From 828e38a8b3cf18f08dbc62e08db85963c2454360 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Tue, 15 Nov 2022 17:32:04 +0100 Subject: [PATCH 01/66] far calls --- gen/KickCLexer.interp | 487 +++++ gen/KickCLexer.java | 1596 +++++++++++++++++ gen/KickCLexer.tokens | 225 +++ .../dk/camelot64/kickc/parser/KickCLexer.g4 | 1 + .../dk/camelot64/kickc/parser/KickCParser.g4 | 1 + .../mos6502-common/call_far_cx16_entry.asm | 4 + .../mos6502-common/call_far_cx16_exit.asm | 0 .../java/dk/camelot64/kickc/Compiler.java | 1 + .../kickc/fragment/AsmFragmentInstance.java | 9 +- .../AsmFragmentInstanceSpecBuilder.java | 35 + .../kickc/fragment/AsmFragmentTemplate.java | 1 + .../signature/AsmFragmentSignature.java | 28 + .../dk/camelot64/kickc/model/Directive.java | 12 + .../kickc/model/statements/StatementCall.java | 8 + .../kickc/model/symbols/Procedure.java | 26 + .../Pass0GenerateStatementSequence.java | 14 + .../kickc/passes/Pass1ProcedureFar.java | 71 + .../kickc/passes/Pass4CodeGeneration.java | 17 +- .../procedure-callingconvention-phi-far-0.c | 11 + .../procedure-callingconvention-stack-far-0.c | 11 + 20 files changed, 2554 insertions(+), 4 deletions(-) create mode 100644 gen/KickCLexer.interp create mode 100644 gen/KickCLexer.java create mode 100644 gen/KickCLexer.tokens create mode 100644 src/main/fragment/mos6502-common/call_far_cx16_entry.asm create mode 100644 src/main/fragment/mos6502-common/call_far_cx16_exit.asm create mode 100644 src/main/java/dk/camelot64/kickc/passes/Pass1ProcedureFar.java create mode 100644 src/test/kc/procedure-callingconvention-phi-far-0.c create mode 100644 src/test/kc/procedure-callingconvention-stack-far-0.c diff --git a/gen/KickCLexer.interp b/gen/KickCLexer.interp new file mode 100644 index 000000000..c67534aef --- /dev/null +++ b/gen/KickCLexer.interp @@ -0,0 +1,487 @@ +token literal names: +null +null +null +null +null +null +null +null +';' +null +null +'..' +'...' +'?' +null +'->' +null +null +null +null +'%' +'++' +'--' +'&' +'~' +'^' +'|' +null +null +'==' +'!=' +null +'<=' +'>=' +null +'&&' +'||' +'=' +null +'typedef' +'const' +'extern' +'__export' +'__align' +'inline' +'volatile' +'static' +'__interrupt' +'register' +'__zp_reserve' +'__address' +'__zp' +'__mem' +'__far' +'__ssa' +'__ma' +'__intrinsic' +null +'if' +'else' +'while' +'do' +'for' +'switch' +'return' +'break' +'continue' +'goto' +'asm' +'default' +'case' +'struct' +'union' +'enum' +'sizeof' +'typeid' +'defined' +'kickasm' +'!' +null +null +null +'#import' +'#include' +'#pragma' +'#define' +null +'#undef' +'#ifdef' +'#ifndef' +'#if' +'#elif' +'#else' +'#endif' +'#error' +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +'.byte' +null +'#' +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +TYPEDEFNAME +CURLY_BEGIN +CURLY_END +BRACKET_BEGIN +BRACKET_END +PAR_BEGIN +PAR_END +SEMICOLON +COLON +COMMA +RANGE +PARAM_LIST +CONDITION +DOT +ARROW +PLUS +MINUS +ASTERISK +DIVIDE +MODULO +INC +DEC +AND +BIT_NOT +BIT_XOR +BIT_OR +SHIFT_LEFT +SHIFT_RIGHT +EQUAL +NOT_EQUAL +LESS_THAN +LESS_THAN_EQUAL +GREATER_THAN_EQUAL +GREATER_THAN +LOGIC_AND +LOGIC_OR +ASSIGN +ASSIGN_COMPOUND +TYPEDEF +CONST +EXTERN +EXPORT +ALIGN +INLINE +VOLATILE +STATIC +INTERRUPT +REGISTER +LOCAL_RESERVE +ADDRESS +ADDRESS_ZEROPAGE +ADDRESS_MAINMEM +FAR +FORM_SSA +FORM_MA +INTRINSIC +CALLINGCONVENTION +IF +ELSE +WHILE +DO +FOR +SWITCH +RETURN +BREAK +CONTINUE +GOTO +ASM +DEFAULT +CASE +STRUCT +UNION +ENUM +SIZEOF +TYPEID +DEFINED +KICKASM +LOGIC_NOT +SIMPLETYPE +BOOLEAN +KICKASM_BODY +IMPORT +INCLUDE +PRAGMA +DEFINE +DEFINE_CONTINUE +UNDEF +IFDEF +IFNDEF +IFIF +ELIF +IFELSE +ENDIF +ERROR +TOKEN_STRINGIZE +TOKEN_MERGE +NUMBER +NUMFLOAT +BINFLOAT +DECFLOAT +HEXFLOAT +NUMINT +BININTEGER +DECINTEGER +HEXINTEGER +NAME +STRING +CHAR +WS +COMMENT_LINE +COMMENT_BLOCK +ASM_BYTE +ASM_MNEMONIC +ASM_IMM +ASM_COLON +ASM_COMMA +ASM_PAR_BEGIN +ASM_PAR_END +ASM_BRACKET_BEGIN +ASM_BRACKET_END +ASM_DOT +ASM_SHIFT_LEFT +ASM_SHIFT_RIGHT +ASM_PLUS +ASM_MINUS +ASM_LESS_THAN +ASM_GREATER_THAN +ASM_MULTIPLY +ASM_DIVIDE +ASM_CURLY_BEGIN +ASM_CURLY_END +ASM_NUMBER +ASM_NUMFLOAT +ASM_BINFLOAT +ASM_DECFLOAT +ASM_HEXFLOAT +ASM_NUMINT +ASM_BININTEGER +ASM_DECINTEGER +ASM_HEXINTEGER +ASM_CHAR +ASM_MULTI_REL +ASM_MULTI_NAME +ASM_NAME +ASM_TAG +ASM_WS +ASM_COMMENT_LINE +ASM_COMMENT_BLOCK +IMPORT_SYSTEMFILE +IMPORT_LOCALFILE +IMPORT_WS +IMPORT_COMMENT_LINE +IMPORT_COMMENT_BLOCK + +rule names: +CURLY_BEGIN +CURLY_END +BRACKET_BEGIN +BRACKET_END +PAR_BEGIN +PAR_END +SEMICOLON +COLON +COMMA +RANGE +PARAM_LIST +CONDITION +DOT +ARROW +PLUS +MINUS +ASTERISK +DIVIDE +MODULO +INC +DEC +AND +BIT_NOT +BIT_XOR +BIT_OR +SHIFT_LEFT +SHIFT_RIGHT +EQUAL +NOT_EQUAL +LESS_THAN +LESS_THAN_EQUAL +GREATER_THAN_EQUAL +GREATER_THAN +LOGIC_AND +LOGIC_OR +ASSIGN +ASSIGN_COMPOUND +TYPEDEF +CONST +EXTERN +EXPORT +ALIGN +INLINE +VOLATILE +STATIC +INTERRUPT +REGISTER +LOCAL_RESERVE +ADDRESS +ADDRESS_ZEROPAGE +ADDRESS_MAINMEM +FAR +FORM_SSA +FORM_MA +INTRINSIC +CALLINGCONVENTION +IF +ELSE +WHILE +DO +FOR +SWITCH +RETURN +BREAK +CONTINUE +GOTO +ASM +DEFAULT +CASE +STRUCT +UNION +ENUM +SIZEOF +TYPEID +DEFINED +KICKASM +LOGIC_NOT +SIMPLETYPE +BOOLEAN +KICKASM_BODY +IMPORT +INCLUDE +PRAGMA +DEFINE +DEFINE_CONTINUE +UNDEF +IFDEF +IFNDEF +IFIF +ELIF +IFELSE +ENDIF +ERROR +TOKEN_STRINGIZE +TOKEN_MERGE +NUMBER +NUMFLOAT +BINFLOAT +DECFLOAT +HEXFLOAT +NUMINT +BININTEGER +DECINTEGER +HEXINTEGER +BINDIGIT +DECDIGIT +HEXDIGIT +NAME +NAME_START +NAME_CHAR +STRING +CHAR +WS +COMMENT_LINE +COMMENT_BLOCK +ASM_BYTE +ASM_MNEMONIC +ASM_IMM +ASM_COLON +ASM_COMMA +ASM_PAR_BEGIN +ASM_PAR_END +ASM_BRACKET_BEGIN +ASM_BRACKET_END +ASM_DOT +ASM_SHIFT_LEFT +ASM_SHIFT_RIGHT +ASM_PLUS +ASM_MINUS +ASM_LESS_THAN +ASM_GREATER_THAN +ASM_MULTIPLY +ASM_DIVIDE +ASM_CURLY_BEGIN +ASM_CURLY_END +ASM_NUMBER +ASM_NUMFLOAT +ASM_BINFLOAT +ASM_DECFLOAT +ASM_HEXFLOAT +ASM_NUMINT +ASM_BININTEGER +ASM_DECINTEGER +ASM_HEXINTEGER +ASM_BINDIGIT +ASM_DECDIGIT +ASM_HEXDIGIT +ASM_CHAR +ASM_MULTI_REL +ASM_MULTI_NAME +ASM_NAME +ASM_NAME_START +ASM_NAME_CHAR +ASM_TAG +ASM_WS +ASM_COMMENT_LINE +ASM_COMMENT_BLOCK +IMPORT_SYSTEMFILE +IMPORT_LOCALFILE +IMPORT_WS +IMPORT_COMMENT_LINE +IMPORT_COMMENT_BLOCK + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE +ASM_MODE +IMPORT_MODE + +atn: +[4, 0, 153, 1974, 6, -1, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 437, 8, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 628, 8, 55, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 805, 8, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 816, 8, 78, 1, 79, 1, 79, 1, 79, 1, 79, 5, 79, 822, 8, 79, 10, 79, 12, 79, 825, 9, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 872, 8, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 3, 95, 934, 8, 95, 1, 96, 1, 96, 1, 96, 3, 96, 939, 8, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 3, 97, 946, 8, 97, 1, 97, 5, 97, 949, 8, 97, 10, 97, 12, 97, 952, 9, 97, 1, 97, 1, 97, 4, 97, 956, 8, 97, 11, 97, 12, 97, 957, 1, 98, 5, 98, 961, 8, 98, 10, 98, 12, 98, 964, 9, 98, 1, 98, 1, 98, 4, 98, 968, 8, 98, 11, 98, 12, 98, 969, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 3, 99, 977, 8, 99, 1, 99, 5, 99, 980, 8, 99, 10, 99, 12, 99, 983, 9, 99, 1, 99, 1, 99, 4, 99, 987, 8, 99, 11, 99, 12, 99, 988, 1, 100, 1, 100, 1, 100, 3, 100, 994, 8, 100, 1, 100, 1, 100, 1, 100, 3, 100, 999, 8, 100, 1, 101, 1, 101, 1, 101, 4, 101, 1004, 8, 101, 11, 101, 12, 101, 1005, 1, 101, 1, 101, 4, 101, 1010, 8, 101, 11, 101, 12, 101, 1011, 3, 101, 1014, 8, 101, 1, 102, 4, 102, 1017, 8, 102, 11, 102, 12, 102, 1018, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 3, 103, 1026, 8, 103, 1, 103, 4, 103, 1029, 8, 103, 11, 103, 12, 103, 1030, 1, 104, 1, 104, 1, 105, 1, 105, 1, 106, 1, 106, 1, 107, 1, 107, 5, 107, 1041, 8, 107, 10, 107, 12, 107, 1044, 9, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 5, 110, 1056, 8, 110, 10, 110, 12, 110, 1059, 9, 110, 1, 110, 1, 110, 3, 110, 1063, 8, 110, 1, 110, 1, 110, 3, 110, 1067, 8, 110, 3, 110, 1069, 8, 110, 1, 110, 3, 110, 1072, 8, 110, 1, 111, 1, 111, 1, 111, 1, 111, 3, 111, 1078, 8, 111, 1, 111, 3, 111, 1081, 8, 111, 1, 111, 1, 111, 1, 111, 3, 111, 1086, 8, 111, 1, 111, 3, 111, 1089, 8, 111, 1, 111, 1, 111, 1, 112, 4, 112, 1094, 8, 112, 11, 112, 12, 112, 1095, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 5, 113, 1104, 8, 113, 10, 113, 12, 113, 1107, 9, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 5, 114, 1115, 8, 114, 10, 114, 12, 114, 1118, 9, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 3, 116, 1738, 8, 116, 1, 117, 1, 117, 1, 118, 1, 118, 1, 119, 1, 119, 1, 120, 1, 120, 1, 121, 1, 121, 1, 122, 1, 122, 1, 123, 1, 123, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 128, 1, 128, 1, 129, 1, 129, 1, 130, 1, 130, 1, 131, 1, 131, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 3, 135, 1782, 8, 135, 1, 136, 1, 136, 1, 136, 3, 136, 1787, 8, 136, 1, 137, 1, 137, 5, 137, 1791, 8, 137, 10, 137, 12, 137, 1794, 9, 137, 1, 137, 1, 137, 4, 137, 1798, 8, 137, 11, 137, 12, 137, 1799, 1, 138, 5, 138, 1803, 8, 138, 10, 138, 12, 138, 1806, 9, 138, 1, 138, 1, 138, 4, 138, 1810, 8, 138, 11, 138, 12, 138, 1811, 1, 139, 1, 139, 5, 139, 1816, 8, 139, 10, 139, 12, 139, 1819, 9, 139, 1, 139, 1, 139, 4, 139, 1823, 8, 139, 11, 139, 12, 139, 1824, 1, 140, 1, 140, 1, 140, 3, 140, 1830, 8, 140, 1, 141, 1, 141, 4, 141, 1834, 8, 141, 11, 141, 12, 141, 1835, 1, 142, 4, 142, 1839, 8, 142, 11, 142, 12, 142, 1840, 1, 143, 1, 143, 4, 143, 1845, 8, 143, 11, 143, 12, 143, 1846, 1, 144, 1, 144, 1, 145, 1, 145, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 3, 147, 1859, 8, 147, 1, 147, 1, 147, 1, 148, 1, 148, 4, 148, 1865, 8, 148, 11, 148, 12, 148, 1866, 1, 149, 1, 149, 5, 149, 1871, 8, 149, 10, 149, 12, 149, 1874, 9, 149, 1, 150, 1, 150, 5, 150, 1878, 8, 150, 10, 150, 12, 150, 1881, 9, 150, 1, 151, 1, 151, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 154, 4, 154, 1891, 8, 154, 11, 154, 12, 154, 1892, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 5, 155, 1901, 8, 155, 10, 155, 12, 155, 1904, 9, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 5, 156, 1912, 8, 156, 10, 156, 12, 156, 1915, 9, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 4, 157, 1924, 8, 157, 11, 157, 12, 157, 1925, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 5, 158, 1935, 8, 158, 10, 158, 12, 158, 1938, 9, 158, 1, 158, 1, 158, 1, 158, 1, 159, 4, 159, 1944, 8, 159, 11, 159, 12, 159, 1945, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 5, 160, 1954, 8, 160, 10, 160, 12, 160, 1957, 9, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 5, 161, 1965, 8, 161, 10, 161, 12, 161, 1968, 9, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 4, 823, 1116, 1913, 1966, 0, 162, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 0, 213, 0, 215, 0, 217, 106, 219, 0, 221, 0, 223, 107, 225, 108, 227, 109, 229, 110, 231, 111, 233, 112, 235, 113, 237, 114, 239, 115, 241, 116, 243, 117, 245, 118, 247, 119, 249, 120, 251, 121, 253, 122, 255, 123, 257, 124, 259, 125, 261, 126, 263, 127, 265, 128, 267, 129, 269, 130, 271, 131, 273, 132, 275, 133, 277, 134, 279, 135, 281, 136, 283, 137, 285, 138, 287, 139, 289, 140, 291, 0, 293, 0, 295, 0, 297, 141, 299, 142, 301, 143, 303, 144, 305, 0, 307, 0, 309, 145, 311, 146, 313, 147, 315, 148, 317, 149, 319, 150, 321, 151, 323, 152, 325, 153, 3, 0, 1, 2, 21, 4, 0, 83, 83, 85, 85, 115, 115, 117, 117, 10, 0, 66, 68, 73, 73, 76, 76, 83, 83, 87, 87, 98, 100, 105, 105, 108, 108, 115, 115, 119, 119, 4, 0, 76, 76, 85, 85, 108, 108, 117, 117, 2, 0, 66, 66, 98, 98, 1, 0, 48, 49, 1, 0, 48, 57, 3, 0, 48, 57, 65, 70, 97, 102, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 1, 0, 34, 34, 1, 0, 122, 122, 3, 0, 97, 97, 112, 112, 115, 115, 3, 0, 97, 97, 109, 109, 115, 117, 7, 0, 34, 34, 39, 39, 48, 57, 92, 92, 102, 102, 110, 110, 114, 114, 2, 0, 48, 57, 97, 102, 1, 0, 39, 39, 4, 0, 9, 10, 13, 13, 32, 32, 160, 160, 2, 0, 10, 10, 13, 13, 5, 0, 34, 34, 39, 39, 102, 102, 110, 110, 114, 114, 2, 0, 43, 43, 45, 45, 5, 0, 45, 57, 65, 90, 92, 92, 95, 95, 97, 122, 2235, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 1, 233, 1, 0, 0, 0, 1, 235, 1, 0, 0, 0, 1, 237, 1, 0, 0, 0, 1, 239, 1, 0, 0, 0, 1, 241, 1, 0, 0, 0, 1, 243, 1, 0, 0, 0, 1, 245, 1, 0, 0, 0, 1, 247, 1, 0, 0, 0, 1, 249, 1, 0, 0, 0, 1, 251, 1, 0, 0, 0, 1, 253, 1, 0, 0, 0, 1, 255, 1, 0, 0, 0, 1, 257, 1, 0, 0, 0, 1, 259, 1, 0, 0, 0, 1, 261, 1, 0, 0, 0, 1, 263, 1, 0, 0, 0, 1, 265, 1, 0, 0, 0, 1, 267, 1, 0, 0, 0, 1, 269, 1, 0, 0, 0, 1, 271, 1, 0, 0, 0, 1, 273, 1, 0, 0, 0, 1, 275, 1, 0, 0, 0, 1, 277, 1, 0, 0, 0, 1, 279, 1, 0, 0, 0, 1, 281, 1, 0, 0, 0, 1, 283, 1, 0, 0, 0, 1, 285, 1, 0, 0, 0, 1, 287, 1, 0, 0, 0, 1, 289, 1, 0, 0, 0, 1, 297, 1, 0, 0, 0, 1, 299, 1, 0, 0, 0, 1, 301, 1, 0, 0, 0, 1, 303, 1, 0, 0, 0, 1, 309, 1, 0, 0, 0, 1, 311, 1, 0, 0, 0, 1, 313, 1, 0, 0, 0, 1, 315, 1, 0, 0, 0, 2, 317, 1, 0, 0, 0, 2, 319, 1, 0, 0, 0, 2, 321, 1, 0, 0, 0, 2, 323, 1, 0, 0, 0, 2, 325, 1, 0, 0, 0, 3, 327, 1, 0, 0, 0, 5, 330, 1, 0, 0, 0, 7, 332, 1, 0, 0, 0, 9, 334, 1, 0, 0, 0, 11, 336, 1, 0, 0, 0, 13, 338, 1, 0, 0, 0, 15, 340, 1, 0, 0, 0, 17, 342, 1, 0, 0, 0, 19, 344, 1, 0, 0, 0, 21, 346, 1, 0, 0, 0, 23, 349, 1, 0, 0, 0, 25, 353, 1, 0, 0, 0, 27, 355, 1, 0, 0, 0, 29, 357, 1, 0, 0, 0, 31, 360, 1, 0, 0, 0, 33, 362, 1, 0, 0, 0, 35, 364, 1, 0, 0, 0, 37, 366, 1, 0, 0, 0, 39, 368, 1, 0, 0, 0, 41, 370, 1, 0, 0, 0, 43, 373, 1, 0, 0, 0, 45, 376, 1, 0, 0, 0, 47, 378, 1, 0, 0, 0, 49, 380, 1, 0, 0, 0, 51, 382, 1, 0, 0, 0, 53, 384, 1, 0, 0, 0, 55, 387, 1, 0, 0, 0, 57, 390, 1, 0, 0, 0, 59, 393, 1, 0, 0, 0, 61, 396, 1, 0, 0, 0, 63, 398, 1, 0, 0, 0, 65, 401, 1, 0, 0, 0, 67, 404, 1, 0, 0, 0, 69, 406, 1, 0, 0, 0, 71, 409, 1, 0, 0, 0, 73, 412, 1, 0, 0, 0, 75, 436, 1, 0, 0, 0, 77, 438, 1, 0, 0, 0, 79, 446, 1, 0, 0, 0, 81, 452, 1, 0, 0, 0, 83, 459, 1, 0, 0, 0, 85, 468, 1, 0, 0, 0, 87, 476, 1, 0, 0, 0, 89, 483, 1, 0, 0, 0, 91, 492, 1, 0, 0, 0, 93, 499, 1, 0, 0, 0, 95, 511, 1, 0, 0, 0, 97, 520, 1, 0, 0, 0, 99, 533, 1, 0, 0, 0, 101, 543, 1, 0, 0, 0, 103, 548, 1, 0, 0, 0, 105, 554, 1, 0, 0, 0, 107, 560, 1, 0, 0, 0, 109, 566, 1, 0, 0, 0, 111, 571, 1, 0, 0, 0, 113, 627, 1, 0, 0, 0, 115, 629, 1, 0, 0, 0, 117, 632, 1, 0, 0, 0, 119, 637, 1, 0, 0, 0, 121, 643, 1, 0, 0, 0, 123, 646, 1, 0, 0, 0, 125, 650, 1, 0, 0, 0, 127, 657, 1, 0, 0, 0, 129, 664, 1, 0, 0, 0, 131, 670, 1, 0, 0, 0, 133, 679, 1, 0, 0, 0, 135, 684, 1, 0, 0, 0, 137, 690, 1, 0, 0, 0, 139, 698, 1, 0, 0, 0, 141, 703, 1, 0, 0, 0, 143, 710, 1, 0, 0, 0, 145, 716, 1, 0, 0, 0, 147, 721, 1, 0, 0, 0, 149, 728, 1, 0, 0, 0, 151, 735, 1, 0, 0, 0, 153, 743, 1, 0, 0, 0, 155, 751, 1, 0, 0, 0, 157, 804, 1, 0, 0, 0, 159, 815, 1, 0, 0, 0, 161, 817, 1, 0, 0, 0, 163, 829, 1, 0, 0, 0, 165, 839, 1, 0, 0, 0, 167, 850, 1, 0, 0, 0, 169, 858, 1, 0, 0, 0, 171, 871, 1, 0, 0, 0, 173, 873, 1, 0, 0, 0, 175, 880, 1, 0, 0, 0, 177, 887, 1, 0, 0, 0, 179, 895, 1, 0, 0, 0, 181, 899, 1, 0, 0, 0, 183, 905, 1, 0, 0, 0, 185, 911, 1, 0, 0, 0, 187, 918, 1, 0, 0, 0, 189, 925, 1, 0, 0, 0, 191, 928, 1, 0, 0, 0, 193, 933, 1, 0, 0, 0, 195, 938, 1, 0, 0, 0, 197, 945, 1, 0, 0, 0, 199, 962, 1, 0, 0, 0, 201, 976, 1, 0, 0, 0, 203, 993, 1, 0, 0, 0, 205, 1013, 1, 0, 0, 0, 207, 1016, 1, 0, 0, 0, 209, 1025, 1, 0, 0, 0, 211, 1032, 1, 0, 0, 0, 213, 1034, 1, 0, 0, 0, 215, 1036, 1, 0, 0, 0, 217, 1038, 1, 0, 0, 0, 219, 1047, 1, 0, 0, 0, 221, 1049, 1, 0, 0, 0, 223, 1051, 1, 0, 0, 0, 225, 1073, 1, 0, 0, 0, 227, 1093, 1, 0, 0, 0, 229, 1099, 1, 0, 0, 0, 231, 1110, 1, 0, 0, 0, 233, 1124, 1, 0, 0, 0, 235, 1737, 1, 0, 0, 0, 237, 1739, 1, 0, 0, 0, 239, 1741, 1, 0, 0, 0, 241, 1743, 1, 0, 0, 0, 243, 1745, 1, 0, 0, 0, 245, 1747, 1, 0, 0, 0, 247, 1749, 1, 0, 0, 0, 249, 1751, 1, 0, 0, 0, 251, 1753, 1, 0, 0, 0, 253, 1755, 1, 0, 0, 0, 255, 1758, 1, 0, 0, 0, 257, 1761, 1, 0, 0, 0, 259, 1763, 1, 0, 0, 0, 261, 1765, 1, 0, 0, 0, 263, 1767, 1, 0, 0, 0, 265, 1769, 1, 0, 0, 0, 267, 1771, 1, 0, 0, 0, 269, 1773, 1, 0, 0, 0, 271, 1776, 1, 0, 0, 0, 273, 1781, 1, 0, 0, 0, 275, 1786, 1, 0, 0, 0, 277, 1788, 1, 0, 0, 0, 279, 1804, 1, 0, 0, 0, 281, 1813, 1, 0, 0, 0, 283, 1829, 1, 0, 0, 0, 285, 1831, 1, 0, 0, 0, 287, 1838, 1, 0, 0, 0, 289, 1842, 1, 0, 0, 0, 291, 1848, 1, 0, 0, 0, 293, 1850, 1, 0, 0, 0, 295, 1852, 1, 0, 0, 0, 297, 1854, 1, 0, 0, 0, 299, 1862, 1, 0, 0, 0, 301, 1868, 1, 0, 0, 0, 303, 1875, 1, 0, 0, 0, 305, 1882, 1, 0, 0, 0, 307, 1884, 1, 0, 0, 0, 309, 1886, 1, 0, 0, 0, 311, 1890, 1, 0, 0, 0, 313, 1896, 1, 0, 0, 0, 315, 1907, 1, 0, 0, 0, 317, 1921, 1, 0, 0, 0, 319, 1930, 1, 0, 0, 0, 321, 1943, 1, 0, 0, 0, 323, 1949, 1, 0, 0, 0, 325, 1960, 1, 0, 0, 0, 327, 328, 5, 123, 0, 0, 328, 329, 6, 0, 0, 0, 329, 4, 1, 0, 0, 0, 330, 331, 5, 125, 0, 0, 331, 6, 1, 0, 0, 0, 332, 333, 5, 91, 0, 0, 333, 8, 1, 0, 0, 0, 334, 335, 5, 93, 0, 0, 335, 10, 1, 0, 0, 0, 336, 337, 5, 40, 0, 0, 337, 12, 1, 0, 0, 0, 338, 339, 5, 41, 0, 0, 339, 14, 1, 0, 0, 0, 340, 341, 5, 59, 0, 0, 341, 16, 1, 0, 0, 0, 342, 343, 5, 58, 0, 0, 343, 18, 1, 0, 0, 0, 344, 345, 5, 44, 0, 0, 345, 20, 1, 0, 0, 0, 346, 347, 5, 46, 0, 0, 347, 348, 5, 46, 0, 0, 348, 22, 1, 0, 0, 0, 349, 350, 5, 46, 0, 0, 350, 351, 5, 46, 0, 0, 351, 352, 5, 46, 0, 0, 352, 24, 1, 0, 0, 0, 353, 354, 5, 63, 0, 0, 354, 26, 1, 0, 0, 0, 355, 356, 5, 46, 0, 0, 356, 28, 1, 0, 0, 0, 357, 358, 5, 45, 0, 0, 358, 359, 5, 62, 0, 0, 359, 30, 1, 0, 0, 0, 360, 361, 5, 43, 0, 0, 361, 32, 1, 0, 0, 0, 362, 363, 5, 45, 0, 0, 363, 34, 1, 0, 0, 0, 364, 365, 5, 42, 0, 0, 365, 36, 1, 0, 0, 0, 366, 367, 5, 47, 0, 0, 367, 38, 1, 0, 0, 0, 368, 369, 5, 37, 0, 0, 369, 40, 1, 0, 0, 0, 370, 371, 5, 43, 0, 0, 371, 372, 5, 43, 0, 0, 372, 42, 1, 0, 0, 0, 373, 374, 5, 45, 0, 0, 374, 375, 5, 45, 0, 0, 375, 44, 1, 0, 0, 0, 376, 377, 5, 38, 0, 0, 377, 46, 1, 0, 0, 0, 378, 379, 5, 126, 0, 0, 379, 48, 1, 0, 0, 0, 380, 381, 5, 94, 0, 0, 381, 50, 1, 0, 0, 0, 382, 383, 5, 124, 0, 0, 383, 52, 1, 0, 0, 0, 384, 385, 5, 60, 0, 0, 385, 386, 5, 60, 0, 0, 386, 54, 1, 0, 0, 0, 387, 388, 5, 62, 0, 0, 388, 389, 5, 62, 0, 0, 389, 56, 1, 0, 0, 0, 390, 391, 5, 61, 0, 0, 391, 392, 5, 61, 0, 0, 392, 58, 1, 0, 0, 0, 393, 394, 5, 33, 0, 0, 394, 395, 5, 61, 0, 0, 395, 60, 1, 0, 0, 0, 396, 397, 5, 60, 0, 0, 397, 62, 1, 0, 0, 0, 398, 399, 5, 60, 0, 0, 399, 400, 5, 61, 0, 0, 400, 64, 1, 0, 0, 0, 401, 402, 5, 62, 0, 0, 402, 403, 5, 61, 0, 0, 403, 66, 1, 0, 0, 0, 404, 405, 5, 62, 0, 0, 405, 68, 1, 0, 0, 0, 406, 407, 5, 38, 0, 0, 407, 408, 5, 38, 0, 0, 408, 70, 1, 0, 0, 0, 409, 410, 5, 124, 0, 0, 410, 411, 5, 124, 0, 0, 411, 72, 1, 0, 0, 0, 412, 413, 5, 61, 0, 0, 413, 74, 1, 0, 0, 0, 414, 415, 5, 43, 0, 0, 415, 437, 5, 61, 0, 0, 416, 417, 5, 45, 0, 0, 417, 437, 5, 61, 0, 0, 418, 419, 5, 42, 0, 0, 419, 437, 5, 61, 0, 0, 420, 421, 5, 47, 0, 0, 421, 437, 5, 61, 0, 0, 422, 423, 5, 37, 0, 0, 423, 437, 5, 61, 0, 0, 424, 425, 5, 60, 0, 0, 425, 426, 5, 60, 0, 0, 426, 437, 5, 61, 0, 0, 427, 428, 5, 62, 0, 0, 428, 429, 5, 62, 0, 0, 429, 437, 5, 61, 0, 0, 430, 431, 5, 38, 0, 0, 431, 437, 5, 61, 0, 0, 432, 433, 5, 124, 0, 0, 433, 437, 5, 61, 0, 0, 434, 435, 5, 94, 0, 0, 435, 437, 5, 61, 0, 0, 436, 414, 1, 0, 0, 0, 436, 416, 1, 0, 0, 0, 436, 418, 1, 0, 0, 0, 436, 420, 1, 0, 0, 0, 436, 422, 1, 0, 0, 0, 436, 424, 1, 0, 0, 0, 436, 427, 1, 0, 0, 0, 436, 430, 1, 0, 0, 0, 436, 432, 1, 0, 0, 0, 436, 434, 1, 0, 0, 0, 437, 76, 1, 0, 0, 0, 438, 439, 5, 116, 0, 0, 439, 440, 5, 121, 0, 0, 440, 441, 5, 112, 0, 0, 441, 442, 5, 101, 0, 0, 442, 443, 5, 100, 0, 0, 443, 444, 5, 101, 0, 0, 444, 445, 5, 102, 0, 0, 445, 78, 1, 0, 0, 0, 446, 447, 5, 99, 0, 0, 447, 448, 5, 111, 0, 0, 448, 449, 5, 110, 0, 0, 449, 450, 5, 115, 0, 0, 450, 451, 5, 116, 0, 0, 451, 80, 1, 0, 0, 0, 452, 453, 5, 101, 0, 0, 453, 454, 5, 120, 0, 0, 454, 455, 5, 116, 0, 0, 455, 456, 5, 101, 0, 0, 456, 457, 5, 114, 0, 0, 457, 458, 5, 110, 0, 0, 458, 82, 1, 0, 0, 0, 459, 460, 5, 95, 0, 0, 460, 461, 5, 95, 0, 0, 461, 462, 5, 101, 0, 0, 462, 463, 5, 120, 0, 0, 463, 464, 5, 112, 0, 0, 464, 465, 5, 111, 0, 0, 465, 466, 5, 114, 0, 0, 466, 467, 5, 116, 0, 0, 467, 84, 1, 0, 0, 0, 468, 469, 5, 95, 0, 0, 469, 470, 5, 95, 0, 0, 470, 471, 5, 97, 0, 0, 471, 472, 5, 108, 0, 0, 472, 473, 5, 105, 0, 0, 473, 474, 5, 103, 0, 0, 474, 475, 5, 110, 0, 0, 475, 86, 1, 0, 0, 0, 476, 477, 5, 105, 0, 0, 477, 478, 5, 110, 0, 0, 478, 479, 5, 108, 0, 0, 479, 480, 5, 105, 0, 0, 480, 481, 5, 110, 0, 0, 481, 482, 5, 101, 0, 0, 482, 88, 1, 0, 0, 0, 483, 484, 5, 118, 0, 0, 484, 485, 5, 111, 0, 0, 485, 486, 5, 108, 0, 0, 486, 487, 5, 97, 0, 0, 487, 488, 5, 116, 0, 0, 488, 489, 5, 105, 0, 0, 489, 490, 5, 108, 0, 0, 490, 491, 5, 101, 0, 0, 491, 90, 1, 0, 0, 0, 492, 493, 5, 115, 0, 0, 493, 494, 5, 116, 0, 0, 494, 495, 5, 97, 0, 0, 495, 496, 5, 116, 0, 0, 496, 497, 5, 105, 0, 0, 497, 498, 5, 99, 0, 0, 498, 92, 1, 0, 0, 0, 499, 500, 5, 95, 0, 0, 500, 501, 5, 95, 0, 0, 501, 502, 5, 105, 0, 0, 502, 503, 5, 110, 0, 0, 503, 504, 5, 116, 0, 0, 504, 505, 5, 101, 0, 0, 505, 506, 5, 114, 0, 0, 506, 507, 5, 114, 0, 0, 507, 508, 5, 117, 0, 0, 508, 509, 5, 112, 0, 0, 509, 510, 5, 116, 0, 0, 510, 94, 1, 0, 0, 0, 511, 512, 5, 114, 0, 0, 512, 513, 5, 101, 0, 0, 513, 514, 5, 103, 0, 0, 514, 515, 5, 105, 0, 0, 515, 516, 5, 115, 0, 0, 516, 517, 5, 116, 0, 0, 517, 518, 5, 101, 0, 0, 518, 519, 5, 114, 0, 0, 519, 96, 1, 0, 0, 0, 520, 521, 5, 95, 0, 0, 521, 522, 5, 95, 0, 0, 522, 523, 5, 122, 0, 0, 523, 524, 5, 112, 0, 0, 524, 525, 5, 95, 0, 0, 525, 526, 5, 114, 0, 0, 526, 527, 5, 101, 0, 0, 527, 528, 5, 115, 0, 0, 528, 529, 5, 101, 0, 0, 529, 530, 5, 114, 0, 0, 530, 531, 5, 118, 0, 0, 531, 532, 5, 101, 0, 0, 532, 98, 1, 0, 0, 0, 533, 534, 5, 95, 0, 0, 534, 535, 5, 95, 0, 0, 535, 536, 5, 97, 0, 0, 536, 537, 5, 100, 0, 0, 537, 538, 5, 100, 0, 0, 538, 539, 5, 114, 0, 0, 539, 540, 5, 101, 0, 0, 540, 541, 5, 115, 0, 0, 541, 542, 5, 115, 0, 0, 542, 100, 1, 0, 0, 0, 543, 544, 5, 95, 0, 0, 544, 545, 5, 95, 0, 0, 545, 546, 5, 122, 0, 0, 546, 547, 5, 112, 0, 0, 547, 102, 1, 0, 0, 0, 548, 549, 5, 95, 0, 0, 549, 550, 5, 95, 0, 0, 550, 551, 5, 109, 0, 0, 551, 552, 5, 101, 0, 0, 552, 553, 5, 109, 0, 0, 553, 104, 1, 0, 0, 0, 554, 555, 5, 95, 0, 0, 555, 556, 5, 95, 0, 0, 556, 557, 5, 102, 0, 0, 557, 558, 5, 97, 0, 0, 558, 559, 5, 114, 0, 0, 559, 106, 1, 0, 0, 0, 560, 561, 5, 95, 0, 0, 561, 562, 5, 95, 0, 0, 562, 563, 5, 115, 0, 0, 563, 564, 5, 115, 0, 0, 564, 565, 5, 97, 0, 0, 565, 108, 1, 0, 0, 0, 566, 567, 5, 95, 0, 0, 567, 568, 5, 95, 0, 0, 568, 569, 5, 109, 0, 0, 569, 570, 5, 97, 0, 0, 570, 110, 1, 0, 0, 0, 571, 572, 5, 95, 0, 0, 572, 573, 5, 95, 0, 0, 573, 574, 5, 105, 0, 0, 574, 575, 5, 110, 0, 0, 575, 576, 5, 116, 0, 0, 576, 577, 5, 114, 0, 0, 577, 578, 5, 105, 0, 0, 578, 579, 5, 110, 0, 0, 579, 580, 5, 115, 0, 0, 580, 581, 5, 105, 0, 0, 581, 582, 5, 99, 0, 0, 582, 112, 1, 0, 0, 0, 583, 584, 5, 95, 0, 0, 584, 585, 5, 95, 0, 0, 585, 586, 5, 115, 0, 0, 586, 587, 5, 116, 0, 0, 587, 588, 5, 97, 0, 0, 588, 589, 5, 99, 0, 0, 589, 590, 5, 107, 0, 0, 590, 591, 5, 99, 0, 0, 591, 592, 5, 97, 0, 0, 592, 593, 5, 108, 0, 0, 593, 628, 5, 108, 0, 0, 594, 595, 5, 95, 0, 0, 595, 596, 5, 95, 0, 0, 596, 597, 5, 112, 0, 0, 597, 598, 5, 104, 0, 0, 598, 599, 5, 105, 0, 0, 599, 600, 5, 99, 0, 0, 600, 601, 5, 97, 0, 0, 601, 602, 5, 108, 0, 0, 602, 628, 5, 108, 0, 0, 603, 604, 5, 95, 0, 0, 604, 605, 5, 95, 0, 0, 605, 606, 5, 118, 0, 0, 606, 607, 5, 97, 0, 0, 607, 608, 5, 114, 0, 0, 608, 609, 5, 99, 0, 0, 609, 610, 5, 97, 0, 0, 610, 611, 5, 108, 0, 0, 611, 628, 5, 108, 0, 0, 612, 613, 5, 95, 0, 0, 613, 614, 5, 95, 0, 0, 614, 615, 5, 105, 0, 0, 615, 616, 5, 110, 0, 0, 616, 617, 5, 116, 0, 0, 617, 618, 5, 114, 0, 0, 618, 619, 5, 105, 0, 0, 619, 620, 5, 110, 0, 0, 620, 621, 5, 115, 0, 0, 621, 622, 5, 105, 0, 0, 622, 623, 5, 99, 0, 0, 623, 624, 5, 99, 0, 0, 624, 625, 5, 97, 0, 0, 625, 626, 5, 108, 0, 0, 626, 628, 5, 108, 0, 0, 627, 583, 1, 0, 0, 0, 627, 594, 1, 0, 0, 0, 627, 603, 1, 0, 0, 0, 627, 612, 1, 0, 0, 0, 628, 114, 1, 0, 0, 0, 629, 630, 5, 105, 0, 0, 630, 631, 5, 102, 0, 0, 631, 116, 1, 0, 0, 0, 632, 633, 5, 101, 0, 0, 633, 634, 5, 108, 0, 0, 634, 635, 5, 115, 0, 0, 635, 636, 5, 101, 0, 0, 636, 118, 1, 0, 0, 0, 637, 638, 5, 119, 0, 0, 638, 639, 5, 104, 0, 0, 639, 640, 5, 105, 0, 0, 640, 641, 5, 108, 0, 0, 641, 642, 5, 101, 0, 0, 642, 120, 1, 0, 0, 0, 643, 644, 5, 100, 0, 0, 644, 645, 5, 111, 0, 0, 645, 122, 1, 0, 0, 0, 646, 647, 5, 102, 0, 0, 647, 648, 5, 111, 0, 0, 648, 649, 5, 114, 0, 0, 649, 124, 1, 0, 0, 0, 650, 651, 5, 115, 0, 0, 651, 652, 5, 119, 0, 0, 652, 653, 5, 105, 0, 0, 653, 654, 5, 116, 0, 0, 654, 655, 5, 99, 0, 0, 655, 656, 5, 104, 0, 0, 656, 126, 1, 0, 0, 0, 657, 658, 5, 114, 0, 0, 658, 659, 5, 101, 0, 0, 659, 660, 5, 116, 0, 0, 660, 661, 5, 117, 0, 0, 661, 662, 5, 114, 0, 0, 662, 663, 5, 110, 0, 0, 663, 128, 1, 0, 0, 0, 664, 665, 5, 98, 0, 0, 665, 666, 5, 114, 0, 0, 666, 667, 5, 101, 0, 0, 667, 668, 5, 97, 0, 0, 668, 669, 5, 107, 0, 0, 669, 130, 1, 0, 0, 0, 670, 671, 5, 99, 0, 0, 671, 672, 5, 111, 0, 0, 672, 673, 5, 110, 0, 0, 673, 674, 5, 116, 0, 0, 674, 675, 5, 105, 0, 0, 675, 676, 5, 110, 0, 0, 676, 677, 5, 117, 0, 0, 677, 678, 5, 101, 0, 0, 678, 132, 1, 0, 0, 0, 679, 680, 5, 103, 0, 0, 680, 681, 5, 111, 0, 0, 681, 682, 5, 116, 0, 0, 682, 683, 5, 111, 0, 0, 683, 134, 1, 0, 0, 0, 684, 685, 5, 97, 0, 0, 685, 686, 5, 115, 0, 0, 686, 687, 5, 109, 0, 0, 687, 688, 1, 0, 0, 0, 688, 689, 6, 66, 1, 0, 689, 136, 1, 0, 0, 0, 690, 691, 5, 100, 0, 0, 691, 692, 5, 101, 0, 0, 692, 693, 5, 102, 0, 0, 693, 694, 5, 97, 0, 0, 694, 695, 5, 117, 0, 0, 695, 696, 5, 108, 0, 0, 696, 697, 5, 116, 0, 0, 697, 138, 1, 0, 0, 0, 698, 699, 5, 99, 0, 0, 699, 700, 5, 97, 0, 0, 700, 701, 5, 115, 0, 0, 701, 702, 5, 101, 0, 0, 702, 140, 1, 0, 0, 0, 703, 704, 5, 115, 0, 0, 704, 705, 5, 116, 0, 0, 705, 706, 5, 114, 0, 0, 706, 707, 5, 117, 0, 0, 707, 708, 5, 99, 0, 0, 708, 709, 5, 116, 0, 0, 709, 142, 1, 0, 0, 0, 710, 711, 5, 117, 0, 0, 711, 712, 5, 110, 0, 0, 712, 713, 5, 105, 0, 0, 713, 714, 5, 111, 0, 0, 714, 715, 5, 110, 0, 0, 715, 144, 1, 0, 0, 0, 716, 717, 5, 101, 0, 0, 717, 718, 5, 110, 0, 0, 718, 719, 5, 117, 0, 0, 719, 720, 5, 109, 0, 0, 720, 146, 1, 0, 0, 0, 721, 722, 5, 115, 0, 0, 722, 723, 5, 105, 0, 0, 723, 724, 5, 122, 0, 0, 724, 725, 5, 101, 0, 0, 725, 726, 5, 111, 0, 0, 726, 727, 5, 102, 0, 0, 727, 148, 1, 0, 0, 0, 728, 729, 5, 116, 0, 0, 729, 730, 5, 121, 0, 0, 730, 731, 5, 112, 0, 0, 731, 732, 5, 101, 0, 0, 732, 733, 5, 105, 0, 0, 733, 734, 5, 100, 0, 0, 734, 150, 1, 0, 0, 0, 735, 736, 5, 100, 0, 0, 736, 737, 5, 101, 0, 0, 737, 738, 5, 102, 0, 0, 738, 739, 5, 105, 0, 0, 739, 740, 5, 110, 0, 0, 740, 741, 5, 101, 0, 0, 741, 742, 5, 100, 0, 0, 742, 152, 1, 0, 0, 0, 743, 744, 5, 107, 0, 0, 744, 745, 5, 105, 0, 0, 745, 746, 5, 99, 0, 0, 746, 747, 5, 107, 0, 0, 747, 748, 5, 97, 0, 0, 748, 749, 5, 115, 0, 0, 749, 750, 5, 109, 0, 0, 750, 154, 1, 0, 0, 0, 751, 752, 5, 33, 0, 0, 752, 156, 1, 0, 0, 0, 753, 754, 5, 115, 0, 0, 754, 755, 5, 105, 0, 0, 755, 756, 5, 103, 0, 0, 756, 757, 5, 110, 0, 0, 757, 758, 5, 101, 0, 0, 758, 805, 5, 100, 0, 0, 759, 760, 5, 117, 0, 0, 760, 761, 5, 110, 0, 0, 761, 762, 5, 115, 0, 0, 762, 763, 5, 105, 0, 0, 763, 764, 5, 103, 0, 0, 764, 765, 5, 110, 0, 0, 765, 766, 5, 101, 0, 0, 766, 805, 5, 100, 0, 0, 767, 768, 5, 98, 0, 0, 768, 769, 5, 121, 0, 0, 769, 770, 5, 116, 0, 0, 770, 805, 5, 101, 0, 0, 771, 772, 5, 119, 0, 0, 772, 773, 5, 111, 0, 0, 773, 774, 5, 114, 0, 0, 774, 805, 5, 100, 0, 0, 775, 776, 5, 100, 0, 0, 776, 777, 5, 119, 0, 0, 777, 778, 5, 111, 0, 0, 778, 779, 5, 114, 0, 0, 779, 805, 5, 100, 0, 0, 780, 781, 5, 98, 0, 0, 781, 782, 5, 111, 0, 0, 782, 783, 5, 111, 0, 0, 783, 805, 5, 108, 0, 0, 784, 785, 5, 99, 0, 0, 785, 786, 5, 104, 0, 0, 786, 787, 5, 97, 0, 0, 787, 805, 5, 114, 0, 0, 788, 789, 5, 115, 0, 0, 789, 790, 5, 104, 0, 0, 790, 791, 5, 111, 0, 0, 791, 792, 5, 114, 0, 0, 792, 805, 5, 116, 0, 0, 793, 794, 5, 105, 0, 0, 794, 795, 5, 110, 0, 0, 795, 805, 5, 116, 0, 0, 796, 797, 5, 108, 0, 0, 797, 798, 5, 111, 0, 0, 798, 799, 5, 110, 0, 0, 799, 805, 5, 103, 0, 0, 800, 801, 5, 118, 0, 0, 801, 802, 5, 111, 0, 0, 802, 803, 5, 105, 0, 0, 803, 805, 5, 100, 0, 0, 804, 753, 1, 0, 0, 0, 804, 759, 1, 0, 0, 0, 804, 767, 1, 0, 0, 0, 804, 771, 1, 0, 0, 0, 804, 775, 1, 0, 0, 0, 804, 780, 1, 0, 0, 0, 804, 784, 1, 0, 0, 0, 804, 788, 1, 0, 0, 0, 804, 793, 1, 0, 0, 0, 804, 796, 1, 0, 0, 0, 804, 800, 1, 0, 0, 0, 805, 158, 1, 0, 0, 0, 806, 807, 5, 116, 0, 0, 807, 808, 5, 114, 0, 0, 808, 809, 5, 117, 0, 0, 809, 816, 5, 101, 0, 0, 810, 811, 5, 102, 0, 0, 811, 812, 5, 97, 0, 0, 812, 813, 5, 108, 0, 0, 813, 814, 5, 115, 0, 0, 814, 816, 5, 101, 0, 0, 815, 806, 1, 0, 0, 0, 815, 810, 1, 0, 0, 0, 816, 160, 1, 0, 0, 0, 817, 818, 5, 123, 0, 0, 818, 819, 5, 123, 0, 0, 819, 823, 1, 0, 0, 0, 820, 822, 9, 0, 0, 0, 821, 820, 1, 0, 0, 0, 822, 825, 1, 0, 0, 0, 823, 824, 1, 0, 0, 0, 823, 821, 1, 0, 0, 0, 824, 826, 1, 0, 0, 0, 825, 823, 1, 0, 0, 0, 826, 827, 5, 125, 0, 0, 827, 828, 5, 125, 0, 0, 828, 162, 1, 0, 0, 0, 829, 830, 5, 35, 0, 0, 830, 831, 5, 105, 0, 0, 831, 832, 5, 109, 0, 0, 832, 833, 5, 112, 0, 0, 833, 834, 5, 111, 0, 0, 834, 835, 5, 114, 0, 0, 835, 836, 5, 116, 0, 0, 836, 837, 1, 0, 0, 0, 837, 838, 6, 80, 2, 0, 838, 164, 1, 0, 0, 0, 839, 840, 5, 35, 0, 0, 840, 841, 5, 105, 0, 0, 841, 842, 5, 110, 0, 0, 842, 843, 5, 99, 0, 0, 843, 844, 5, 108, 0, 0, 844, 845, 5, 117, 0, 0, 845, 846, 5, 100, 0, 0, 846, 847, 5, 101, 0, 0, 847, 848, 1, 0, 0, 0, 848, 849, 6, 81, 3, 0, 849, 166, 1, 0, 0, 0, 850, 851, 5, 35, 0, 0, 851, 852, 5, 112, 0, 0, 852, 853, 5, 114, 0, 0, 853, 854, 5, 97, 0, 0, 854, 855, 5, 103, 0, 0, 855, 856, 5, 109, 0, 0, 856, 857, 5, 97, 0, 0, 857, 168, 1, 0, 0, 0, 858, 859, 5, 35, 0, 0, 859, 860, 5, 100, 0, 0, 860, 861, 5, 101, 0, 0, 861, 862, 5, 102, 0, 0, 862, 863, 5, 105, 0, 0, 863, 864, 5, 110, 0, 0, 864, 865, 5, 101, 0, 0, 865, 170, 1, 0, 0, 0, 866, 867, 5, 92, 0, 0, 867, 872, 5, 10, 0, 0, 868, 869, 5, 92, 0, 0, 869, 870, 5, 13, 0, 0, 870, 872, 5, 10, 0, 0, 871, 866, 1, 0, 0, 0, 871, 868, 1, 0, 0, 0, 872, 172, 1, 0, 0, 0, 873, 874, 5, 35, 0, 0, 874, 875, 5, 117, 0, 0, 875, 876, 5, 110, 0, 0, 876, 877, 5, 100, 0, 0, 877, 878, 5, 101, 0, 0, 878, 879, 5, 102, 0, 0, 879, 174, 1, 0, 0, 0, 880, 881, 5, 35, 0, 0, 881, 882, 5, 105, 0, 0, 882, 883, 5, 102, 0, 0, 883, 884, 5, 100, 0, 0, 884, 885, 5, 101, 0, 0, 885, 886, 5, 102, 0, 0, 886, 176, 1, 0, 0, 0, 887, 888, 5, 35, 0, 0, 888, 889, 5, 105, 0, 0, 889, 890, 5, 102, 0, 0, 890, 891, 5, 110, 0, 0, 891, 892, 5, 100, 0, 0, 892, 893, 5, 101, 0, 0, 893, 894, 5, 102, 0, 0, 894, 178, 1, 0, 0, 0, 895, 896, 5, 35, 0, 0, 896, 897, 5, 105, 0, 0, 897, 898, 5, 102, 0, 0, 898, 180, 1, 0, 0, 0, 899, 900, 5, 35, 0, 0, 900, 901, 5, 101, 0, 0, 901, 902, 5, 108, 0, 0, 902, 903, 5, 105, 0, 0, 903, 904, 5, 102, 0, 0, 904, 182, 1, 0, 0, 0, 905, 906, 5, 35, 0, 0, 906, 907, 5, 101, 0, 0, 907, 908, 5, 108, 0, 0, 908, 909, 5, 115, 0, 0, 909, 910, 5, 101, 0, 0, 910, 184, 1, 0, 0, 0, 911, 912, 5, 35, 0, 0, 912, 913, 5, 101, 0, 0, 913, 914, 5, 110, 0, 0, 914, 915, 5, 100, 0, 0, 915, 916, 5, 105, 0, 0, 916, 917, 5, 102, 0, 0, 917, 186, 1, 0, 0, 0, 918, 919, 5, 35, 0, 0, 919, 920, 5, 101, 0, 0, 920, 921, 5, 114, 0, 0, 921, 922, 5, 114, 0, 0, 922, 923, 5, 111, 0, 0, 923, 924, 5, 114, 0, 0, 924, 188, 1, 0, 0, 0, 925, 926, 5, 35, 0, 0, 926, 927, 3, 217, 107, 0, 927, 190, 1, 0, 0, 0, 928, 929, 5, 35, 0, 0, 929, 930, 3, 217, 107, 0, 930, 192, 1, 0, 0, 0, 931, 934, 3, 195, 96, 0, 932, 934, 3, 203, 100, 0, 933, 931, 1, 0, 0, 0, 933, 932, 1, 0, 0, 0, 934, 194, 1, 0, 0, 0, 935, 939, 3, 197, 97, 0, 936, 939, 3, 199, 98, 0, 937, 939, 3, 201, 99, 0, 938, 935, 1, 0, 0, 0, 938, 936, 1, 0, 0, 0, 938, 937, 1, 0, 0, 0, 939, 196, 1, 0, 0, 0, 940, 946, 5, 37, 0, 0, 941, 942, 5, 48, 0, 0, 942, 946, 5, 98, 0, 0, 943, 944, 5, 48, 0, 0, 944, 946, 5, 66, 0, 0, 945, 940, 1, 0, 0, 0, 945, 941, 1, 0, 0, 0, 945, 943, 1, 0, 0, 0, 946, 950, 1, 0, 0, 0, 947, 949, 3, 211, 104, 0, 948, 947, 1, 0, 0, 0, 949, 952, 1, 0, 0, 0, 950, 948, 1, 0, 0, 0, 950, 951, 1, 0, 0, 0, 951, 953, 1, 0, 0, 0, 952, 950, 1, 0, 0, 0, 953, 955, 5, 46, 0, 0, 954, 956, 3, 211, 104, 0, 955, 954, 1, 0, 0, 0, 956, 957, 1, 0, 0, 0, 957, 955, 1, 0, 0, 0, 957, 958, 1, 0, 0, 0, 958, 198, 1, 0, 0, 0, 959, 961, 3, 213, 105, 0, 960, 959, 1, 0, 0, 0, 961, 964, 1, 0, 0, 0, 962, 960, 1, 0, 0, 0, 962, 963, 1, 0, 0, 0, 963, 965, 1, 0, 0, 0, 964, 962, 1, 0, 0, 0, 965, 967, 5, 46, 0, 0, 966, 968, 3, 213, 105, 0, 967, 966, 1, 0, 0, 0, 968, 969, 1, 0, 0, 0, 969, 967, 1, 0, 0, 0, 969, 970, 1, 0, 0, 0, 970, 200, 1, 0, 0, 0, 971, 977, 5, 36, 0, 0, 972, 973, 5, 48, 0, 0, 973, 977, 5, 120, 0, 0, 974, 975, 5, 48, 0, 0, 975, 977, 5, 88, 0, 0, 976, 971, 1, 0, 0, 0, 976, 972, 1, 0, 0, 0, 976, 974, 1, 0, 0, 0, 977, 981, 1, 0, 0, 0, 978, 980, 3, 215, 106, 0, 979, 978, 1, 0, 0, 0, 980, 983, 1, 0, 0, 0, 981, 979, 1, 0, 0, 0, 981, 982, 1, 0, 0, 0, 982, 984, 1, 0, 0, 0, 983, 981, 1, 0, 0, 0, 984, 986, 5, 46, 0, 0, 985, 987, 3, 215, 106, 0, 986, 985, 1, 0, 0, 0, 987, 988, 1, 0, 0, 0, 988, 986, 1, 0, 0, 0, 988, 989, 1, 0, 0, 0, 989, 202, 1, 0, 0, 0, 990, 994, 3, 207, 102, 0, 991, 994, 3, 209, 103, 0, 992, 994, 3, 205, 101, 0, 993, 990, 1, 0, 0, 0, 993, 991, 1, 0, 0, 0, 993, 992, 1, 0, 0, 0, 994, 998, 1, 0, 0, 0, 995, 996, 7, 0, 0, 0, 996, 999, 7, 1, 0, 0, 997, 999, 7, 2, 0, 0, 998, 995, 1, 0, 0, 0, 998, 997, 1, 0, 0, 0, 998, 999, 1, 0, 0, 0, 999, 204, 1, 0, 0, 0, 1000, 1001, 5, 48, 0, 0, 1001, 1003, 7, 3, 0, 0, 1002, 1004, 3, 211, 104, 0, 1003, 1002, 1, 0, 0, 0, 1004, 1005, 1, 0, 0, 0, 1005, 1003, 1, 0, 0, 0, 1005, 1006, 1, 0, 0, 0, 1006, 1014, 1, 0, 0, 0, 1007, 1009, 5, 37, 0, 0, 1008, 1010, 3, 211, 104, 0, 1009, 1008, 1, 0, 0, 0, 1010, 1011, 1, 0, 0, 0, 1011, 1009, 1, 0, 0, 0, 1011, 1012, 1, 0, 0, 0, 1012, 1014, 1, 0, 0, 0, 1013, 1000, 1, 0, 0, 0, 1013, 1007, 1, 0, 0, 0, 1014, 206, 1, 0, 0, 0, 1015, 1017, 3, 213, 105, 0, 1016, 1015, 1, 0, 0, 0, 1017, 1018, 1, 0, 0, 0, 1018, 1016, 1, 0, 0, 0, 1018, 1019, 1, 0, 0, 0, 1019, 208, 1, 0, 0, 0, 1020, 1026, 5, 36, 0, 0, 1021, 1022, 5, 48, 0, 0, 1022, 1026, 5, 120, 0, 0, 1023, 1024, 5, 48, 0, 0, 1024, 1026, 5, 88, 0, 0, 1025, 1020, 1, 0, 0, 0, 1025, 1021, 1, 0, 0, 0, 1025, 1023, 1, 0, 0, 0, 1026, 1028, 1, 0, 0, 0, 1027, 1029, 3, 215, 106, 0, 1028, 1027, 1, 0, 0, 0, 1029, 1030, 1, 0, 0, 0, 1030, 1028, 1, 0, 0, 0, 1030, 1031, 1, 0, 0, 0, 1031, 210, 1, 0, 0, 0, 1032, 1033, 7, 4, 0, 0, 1033, 212, 1, 0, 0, 0, 1034, 1035, 7, 5, 0, 0, 1035, 214, 1, 0, 0, 0, 1036, 1037, 7, 6, 0, 0, 1037, 216, 1, 0, 0, 0, 1038, 1042, 3, 219, 108, 0, 1039, 1041, 3, 221, 109, 0, 1040, 1039, 1, 0, 0, 0, 1041, 1044, 1, 0, 0, 0, 1042, 1040, 1, 0, 0, 0, 1042, 1043, 1, 0, 0, 0, 1043, 1045, 1, 0, 0, 0, 1044, 1042, 1, 0, 0, 0, 1045, 1046, 6, 107, 4, 0, 1046, 218, 1, 0, 0, 0, 1047, 1048, 7, 7, 0, 0, 1048, 220, 1, 0, 0, 0, 1049, 1050, 7, 8, 0, 0, 1050, 222, 1, 0, 0, 0, 1051, 1057, 5, 34, 0, 0, 1052, 1053, 5, 92, 0, 0, 1053, 1056, 5, 34, 0, 0, 1054, 1056, 8, 9, 0, 0, 1055, 1052, 1, 0, 0, 0, 1055, 1054, 1, 0, 0, 0, 1056, 1059, 1, 0, 0, 0, 1057, 1055, 1, 0, 0, 0, 1057, 1058, 1, 0, 0, 0, 1058, 1060, 1, 0, 0, 0, 1059, 1057, 1, 0, 0, 0, 1060, 1062, 5, 34, 0, 0, 1061, 1063, 7, 10, 0, 0, 1062, 1061, 1, 0, 0, 0, 1062, 1063, 1, 0, 0, 0, 1063, 1068, 1, 0, 0, 0, 1064, 1066, 7, 11, 0, 0, 1065, 1067, 7, 12, 0, 0, 1066, 1065, 1, 0, 0, 0, 1066, 1067, 1, 0, 0, 0, 1067, 1069, 1, 0, 0, 0, 1068, 1064, 1, 0, 0, 0, 1068, 1069, 1, 0, 0, 0, 1069, 1071, 1, 0, 0, 0, 1070, 1072, 7, 10, 0, 0, 1071, 1070, 1, 0, 0, 0, 1071, 1072, 1, 0, 0, 0, 1072, 224, 1, 0, 0, 0, 1073, 1088, 5, 39, 0, 0, 1074, 1085, 5, 92, 0, 0, 1075, 1077, 7, 13, 0, 0, 1076, 1078, 7, 5, 0, 0, 1077, 1076, 1, 0, 0, 0, 1077, 1078, 1, 0, 0, 0, 1078, 1080, 1, 0, 0, 0, 1079, 1081, 7, 5, 0, 0, 1080, 1079, 1, 0, 0, 0, 1080, 1081, 1, 0, 0, 0, 1081, 1086, 1, 0, 0, 0, 1082, 1083, 5, 120, 0, 0, 1083, 1084, 7, 14, 0, 0, 1084, 1086, 7, 14, 0, 0, 1085, 1075, 1, 0, 0, 0, 1085, 1082, 1, 0, 0, 0, 1086, 1089, 1, 0, 0, 0, 1087, 1089, 8, 15, 0, 0, 1088, 1074, 1, 0, 0, 0, 1088, 1087, 1, 0, 0, 0, 1089, 1090, 1, 0, 0, 0, 1090, 1091, 5, 39, 0, 0, 1091, 226, 1, 0, 0, 0, 1092, 1094, 7, 16, 0, 0, 1093, 1092, 1, 0, 0, 0, 1094, 1095, 1, 0, 0, 0, 1095, 1093, 1, 0, 0, 0, 1095, 1096, 1, 0, 0, 0, 1096, 1097, 1, 0, 0, 0, 1097, 1098, 6, 112, 5, 0, 1098, 228, 1, 0, 0, 0, 1099, 1100, 5, 47, 0, 0, 1100, 1101, 5, 47, 0, 0, 1101, 1105, 1, 0, 0, 0, 1102, 1104, 8, 17, 0, 0, 1103, 1102, 1, 0, 0, 0, 1104, 1107, 1, 0, 0, 0, 1105, 1103, 1, 0, 0, 0, 1105, 1106, 1, 0, 0, 0, 1106, 1108, 1, 0, 0, 0, 1107, 1105, 1, 0, 0, 0, 1108, 1109, 6, 113, 6, 0, 1109, 230, 1, 0, 0, 0, 1110, 1111, 5, 47, 0, 0, 1111, 1112, 5, 42, 0, 0, 1112, 1116, 1, 0, 0, 0, 1113, 1115, 9, 0, 0, 0, 1114, 1113, 1, 0, 0, 0, 1115, 1118, 1, 0, 0, 0, 1116, 1117, 1, 0, 0, 0, 1116, 1114, 1, 0, 0, 0, 1117, 1119, 1, 0, 0, 0, 1118, 1116, 1, 0, 0, 0, 1119, 1120, 5, 42, 0, 0, 1120, 1121, 5, 47, 0, 0, 1121, 1122, 1, 0, 0, 0, 1122, 1123, 6, 114, 6, 0, 1123, 232, 1, 0, 0, 0, 1124, 1125, 5, 46, 0, 0, 1125, 1126, 5, 98, 0, 0, 1126, 1127, 5, 121, 0, 0, 1127, 1128, 5, 116, 0, 0, 1128, 1129, 5, 101, 0, 0, 1129, 234, 1, 0, 0, 0, 1130, 1131, 5, 98, 0, 0, 1131, 1132, 5, 114, 0, 0, 1132, 1738, 5, 107, 0, 0, 1133, 1134, 5, 111, 0, 0, 1134, 1135, 5, 114, 0, 0, 1135, 1738, 5, 97, 0, 0, 1136, 1137, 5, 107, 0, 0, 1137, 1138, 5, 105, 0, 0, 1138, 1738, 5, 108, 0, 0, 1139, 1140, 5, 115, 0, 0, 1140, 1141, 5, 108, 0, 0, 1141, 1738, 5, 111, 0, 0, 1142, 1143, 5, 110, 0, 0, 1143, 1144, 5, 111, 0, 0, 1144, 1738, 5, 112, 0, 0, 1145, 1146, 5, 97, 0, 0, 1146, 1147, 5, 115, 0, 0, 1147, 1738, 5, 108, 0, 0, 1148, 1149, 5, 112, 0, 0, 1149, 1150, 5, 104, 0, 0, 1150, 1738, 5, 112, 0, 0, 1151, 1152, 5, 97, 0, 0, 1152, 1153, 5, 110, 0, 0, 1153, 1738, 5, 99, 0, 0, 1154, 1155, 5, 98, 0, 0, 1155, 1156, 5, 112, 0, 0, 1156, 1738, 5, 108, 0, 0, 1157, 1158, 5, 99, 0, 0, 1158, 1159, 5, 108, 0, 0, 1159, 1738, 5, 99, 0, 0, 1160, 1161, 5, 106, 0, 0, 1161, 1162, 5, 115, 0, 0, 1162, 1738, 5, 114, 0, 0, 1163, 1164, 5, 97, 0, 0, 1164, 1165, 5, 110, 0, 0, 1165, 1738, 5, 100, 0, 0, 1166, 1167, 5, 114, 0, 0, 1167, 1168, 5, 108, 0, 0, 1168, 1738, 5, 97, 0, 0, 1169, 1170, 5, 98, 0, 0, 1170, 1171, 5, 105, 0, 0, 1171, 1738, 5, 116, 0, 0, 1172, 1173, 5, 114, 0, 0, 1173, 1174, 5, 111, 0, 0, 1174, 1738, 5, 108, 0, 0, 1175, 1176, 5, 112, 0, 0, 1176, 1177, 5, 108, 0, 0, 1177, 1738, 5, 97, 0, 0, 1178, 1179, 5, 112, 0, 0, 1179, 1180, 5, 108, 0, 0, 1180, 1738, 5, 112, 0, 0, 1181, 1182, 5, 98, 0, 0, 1182, 1183, 5, 109, 0, 0, 1183, 1738, 5, 105, 0, 0, 1184, 1185, 5, 115, 0, 0, 1185, 1186, 5, 101, 0, 0, 1186, 1738, 5, 99, 0, 0, 1187, 1188, 5, 114, 0, 0, 1188, 1189, 5, 116, 0, 0, 1189, 1738, 5, 105, 0, 0, 1190, 1191, 5, 101, 0, 0, 1191, 1192, 5, 111, 0, 0, 1192, 1738, 5, 114, 0, 0, 1193, 1194, 5, 115, 0, 0, 1194, 1195, 5, 114, 0, 0, 1195, 1738, 5, 101, 0, 0, 1196, 1197, 5, 108, 0, 0, 1197, 1198, 5, 115, 0, 0, 1198, 1738, 5, 114, 0, 0, 1199, 1200, 5, 112, 0, 0, 1200, 1201, 5, 104, 0, 0, 1201, 1738, 5, 97, 0, 0, 1202, 1203, 5, 97, 0, 0, 1203, 1204, 5, 108, 0, 0, 1204, 1738, 5, 114, 0, 0, 1205, 1206, 5, 106, 0, 0, 1206, 1207, 5, 109, 0, 0, 1207, 1738, 5, 112, 0, 0, 1208, 1209, 5, 98, 0, 0, 1209, 1210, 5, 118, 0, 0, 1210, 1738, 5, 99, 0, 0, 1211, 1212, 5, 99, 0, 0, 1212, 1213, 5, 108, 0, 0, 1213, 1738, 5, 105, 0, 0, 1214, 1215, 5, 114, 0, 0, 1215, 1216, 5, 116, 0, 0, 1216, 1738, 5, 115, 0, 0, 1217, 1218, 5, 97, 0, 0, 1218, 1219, 5, 100, 0, 0, 1219, 1738, 5, 99, 0, 0, 1220, 1221, 5, 114, 0, 0, 1221, 1222, 5, 114, 0, 0, 1222, 1738, 5, 97, 0, 0, 1223, 1224, 5, 98, 0, 0, 1224, 1225, 5, 118, 0, 0, 1225, 1738, 5, 115, 0, 0, 1226, 1227, 5, 115, 0, 0, 1227, 1228, 5, 101, 0, 0, 1228, 1738, 5, 105, 0, 0, 1229, 1230, 5, 115, 0, 0, 1230, 1231, 5, 97, 0, 0, 1231, 1738, 5, 120, 0, 0, 1232, 1233, 5, 115, 0, 0, 1233, 1234, 5, 116, 0, 0, 1234, 1738, 5, 121, 0, 0, 1235, 1236, 5, 115, 0, 0, 1236, 1237, 5, 116, 0, 0, 1237, 1738, 5, 97, 0, 0, 1238, 1239, 5, 115, 0, 0, 1239, 1240, 5, 116, 0, 0, 1240, 1738, 5, 120, 0, 0, 1241, 1242, 5, 100, 0, 0, 1242, 1243, 5, 101, 0, 0, 1243, 1738, 5, 121, 0, 0, 1244, 1245, 5, 116, 0, 0, 1245, 1246, 5, 120, 0, 0, 1246, 1738, 5, 97, 0, 0, 1247, 1248, 5, 120, 0, 0, 1248, 1249, 5, 97, 0, 0, 1249, 1738, 5, 97, 0, 0, 1250, 1251, 5, 98, 0, 0, 1251, 1252, 5, 99, 0, 0, 1252, 1738, 5, 99, 0, 0, 1253, 1254, 5, 97, 0, 0, 1254, 1255, 5, 104, 0, 0, 1255, 1738, 5, 120, 0, 0, 1256, 1257, 5, 116, 0, 0, 1257, 1258, 5, 121, 0, 0, 1258, 1738, 5, 97, 0, 0, 1259, 1260, 5, 116, 0, 0, 1260, 1261, 5, 120, 0, 0, 1261, 1738, 5, 115, 0, 0, 1262, 1263, 5, 116, 0, 0, 1263, 1264, 5, 97, 0, 0, 1264, 1738, 5, 115, 0, 0, 1265, 1266, 5, 115, 0, 0, 1266, 1267, 5, 104, 0, 0, 1267, 1738, 5, 121, 0, 0, 1268, 1269, 5, 115, 0, 0, 1269, 1270, 5, 104, 0, 0, 1270, 1738, 5, 120, 0, 0, 1271, 1272, 5, 108, 0, 0, 1272, 1273, 5, 100, 0, 0, 1273, 1738, 5, 121, 0, 0, 1274, 1275, 5, 108, 0, 0, 1275, 1276, 5, 100, 0, 0, 1276, 1738, 5, 97, 0, 0, 1277, 1278, 5, 108, 0, 0, 1278, 1279, 5, 100, 0, 0, 1279, 1738, 5, 120, 0, 0, 1280, 1281, 5, 108, 0, 0, 1281, 1282, 5, 97, 0, 0, 1282, 1738, 5, 120, 0, 0, 1283, 1284, 5, 116, 0, 0, 1284, 1285, 5, 97, 0, 0, 1285, 1738, 5, 121, 0, 0, 1286, 1287, 5, 116, 0, 0, 1287, 1288, 5, 97, 0, 0, 1288, 1738, 5, 120, 0, 0, 1289, 1290, 5, 98, 0, 0, 1290, 1291, 5, 99, 0, 0, 1291, 1738, 5, 115, 0, 0, 1292, 1293, 5, 99, 0, 0, 1293, 1294, 5, 108, 0, 0, 1294, 1738, 5, 118, 0, 0, 1295, 1296, 5, 116, 0, 0, 1296, 1297, 5, 115, 0, 0, 1297, 1738, 5, 120, 0, 0, 1298, 1299, 5, 108, 0, 0, 1299, 1300, 5, 97, 0, 0, 1300, 1738, 5, 115, 0, 0, 1301, 1302, 5, 99, 0, 0, 1302, 1303, 5, 112, 0, 0, 1303, 1738, 5, 121, 0, 0, 1304, 1305, 5, 99, 0, 0, 1305, 1306, 5, 109, 0, 0, 1306, 1738, 5, 112, 0, 0, 1307, 1308, 5, 99, 0, 0, 1308, 1309, 5, 112, 0, 0, 1309, 1738, 5, 120, 0, 0, 1310, 1311, 5, 100, 0, 0, 1311, 1312, 5, 99, 0, 0, 1312, 1738, 5, 112, 0, 0, 1313, 1314, 5, 100, 0, 0, 1314, 1315, 5, 101, 0, 0, 1315, 1738, 5, 99, 0, 0, 1316, 1317, 5, 105, 0, 0, 1317, 1318, 5, 110, 0, 0, 1318, 1738, 5, 99, 0, 0, 1319, 1320, 5, 97, 0, 0, 1320, 1321, 5, 120, 0, 0, 1321, 1738, 5, 115, 0, 0, 1322, 1323, 5, 98, 0, 0, 1323, 1324, 5, 110, 0, 0, 1324, 1738, 5, 101, 0, 0, 1325, 1326, 5, 99, 0, 0, 1326, 1327, 5, 108, 0, 0, 1327, 1738, 5, 100, 0, 0, 1328, 1329, 5, 115, 0, 0, 1329, 1330, 5, 98, 0, 0, 1330, 1738, 5, 99, 0, 0, 1331, 1332, 5, 105, 0, 0, 1332, 1333, 5, 115, 0, 0, 1333, 1738, 5, 99, 0, 0, 1334, 1335, 5, 105, 0, 0, 1335, 1336, 5, 110, 0, 0, 1336, 1738, 5, 120, 0, 0, 1337, 1338, 5, 98, 0, 0, 1338, 1339, 5, 101, 0, 0, 1339, 1738, 5, 113, 0, 0, 1340, 1341, 5, 115, 0, 0, 1341, 1342, 5, 101, 0, 0, 1342, 1738, 5, 100, 0, 0, 1343, 1344, 5, 100, 0, 0, 1344, 1345, 5, 101, 0, 0, 1345, 1738, 5, 120, 0, 0, 1346, 1347, 5, 105, 0, 0, 1347, 1348, 5, 110, 0, 0, 1348, 1738, 5, 121, 0, 0, 1349, 1350, 5, 114, 0, 0, 1350, 1351, 5, 111, 0, 0, 1351, 1738, 5, 114, 0, 0, 1352, 1353, 5, 98, 0, 0, 1353, 1354, 5, 98, 0, 0, 1354, 1355, 5, 114, 0, 0, 1355, 1738, 5, 48, 0, 0, 1356, 1357, 5, 98, 0, 0, 1357, 1358, 5, 98, 0, 0, 1358, 1359, 5, 114, 0, 0, 1359, 1738, 5, 49, 0, 0, 1360, 1361, 5, 98, 0, 0, 1361, 1362, 5, 98, 0, 0, 1362, 1363, 5, 114, 0, 0, 1363, 1738, 5, 50, 0, 0, 1364, 1365, 5, 98, 0, 0, 1365, 1366, 5, 98, 0, 0, 1366, 1367, 5, 114, 0, 0, 1367, 1738, 5, 51, 0, 0, 1368, 1369, 5, 98, 0, 0, 1369, 1370, 5, 98, 0, 0, 1370, 1371, 5, 114, 0, 0, 1371, 1738, 5, 52, 0, 0, 1372, 1373, 5, 98, 0, 0, 1373, 1374, 5, 98, 0, 0, 1374, 1375, 5, 114, 0, 0, 1375, 1738, 5, 53, 0, 0, 1376, 1377, 5, 98, 0, 0, 1377, 1378, 5, 98, 0, 0, 1378, 1379, 5, 114, 0, 0, 1379, 1738, 5, 54, 0, 0, 1380, 1381, 5, 98, 0, 0, 1381, 1382, 5, 98, 0, 0, 1382, 1383, 5, 114, 0, 0, 1383, 1738, 5, 55, 0, 0, 1384, 1385, 5, 98, 0, 0, 1385, 1386, 5, 98, 0, 0, 1386, 1387, 5, 115, 0, 0, 1387, 1738, 5, 48, 0, 0, 1388, 1389, 5, 98, 0, 0, 1389, 1390, 5, 98, 0, 0, 1390, 1391, 5, 115, 0, 0, 1391, 1738, 5, 49, 0, 0, 1392, 1393, 5, 98, 0, 0, 1393, 1394, 5, 98, 0, 0, 1394, 1395, 5, 115, 0, 0, 1395, 1738, 5, 50, 0, 0, 1396, 1397, 5, 98, 0, 0, 1397, 1398, 5, 98, 0, 0, 1398, 1399, 5, 115, 0, 0, 1399, 1738, 5, 51, 0, 0, 1400, 1401, 5, 98, 0, 0, 1401, 1402, 5, 98, 0, 0, 1402, 1403, 5, 115, 0, 0, 1403, 1738, 5, 52, 0, 0, 1404, 1405, 5, 98, 0, 0, 1405, 1406, 5, 98, 0, 0, 1406, 1407, 5, 115, 0, 0, 1407, 1738, 5, 53, 0, 0, 1408, 1409, 5, 98, 0, 0, 1409, 1410, 5, 98, 0, 0, 1410, 1411, 5, 115, 0, 0, 1411, 1738, 5, 54, 0, 0, 1412, 1413, 5, 98, 0, 0, 1413, 1414, 5, 98, 0, 0, 1414, 1415, 5, 115, 0, 0, 1415, 1738, 5, 55, 0, 0, 1416, 1417, 5, 98, 0, 0, 1417, 1418, 5, 114, 0, 0, 1418, 1738, 5, 97, 0, 0, 1419, 1420, 5, 112, 0, 0, 1420, 1421, 5, 104, 0, 0, 1421, 1738, 5, 120, 0, 0, 1422, 1423, 5, 112, 0, 0, 1423, 1424, 5, 104, 0, 0, 1424, 1738, 5, 121, 0, 0, 1425, 1426, 5, 112, 0, 0, 1426, 1427, 5, 108, 0, 0, 1427, 1738, 5, 120, 0, 0, 1428, 1429, 5, 112, 0, 0, 1429, 1430, 5, 108, 0, 0, 1430, 1738, 5, 121, 0, 0, 1431, 1432, 5, 114, 0, 0, 1432, 1433, 5, 109, 0, 0, 1433, 1434, 5, 98, 0, 0, 1434, 1738, 5, 48, 0, 0, 1435, 1436, 5, 114, 0, 0, 1436, 1437, 5, 109, 0, 0, 1437, 1438, 5, 98, 0, 0, 1438, 1738, 5, 49, 0, 0, 1439, 1440, 5, 114, 0, 0, 1440, 1441, 5, 109, 0, 0, 1441, 1442, 5, 98, 0, 0, 1442, 1738, 5, 50, 0, 0, 1443, 1444, 5, 114, 0, 0, 1444, 1445, 5, 109, 0, 0, 1445, 1446, 5, 98, 0, 0, 1446, 1738, 5, 51, 0, 0, 1447, 1448, 5, 114, 0, 0, 1448, 1449, 5, 109, 0, 0, 1449, 1450, 5, 98, 0, 0, 1450, 1738, 5, 52, 0, 0, 1451, 1452, 5, 114, 0, 0, 1452, 1453, 5, 109, 0, 0, 1453, 1454, 5, 98, 0, 0, 1454, 1738, 5, 53, 0, 0, 1455, 1456, 5, 114, 0, 0, 1456, 1457, 5, 109, 0, 0, 1457, 1458, 5, 98, 0, 0, 1458, 1738, 5, 54, 0, 0, 1459, 1460, 5, 114, 0, 0, 1460, 1461, 5, 109, 0, 0, 1461, 1462, 5, 98, 0, 0, 1462, 1738, 5, 55, 0, 0, 1463, 1464, 5, 115, 0, 0, 1464, 1465, 5, 109, 0, 0, 1465, 1466, 5, 98, 0, 0, 1466, 1738, 5, 48, 0, 0, 1467, 1468, 5, 115, 0, 0, 1468, 1469, 5, 109, 0, 0, 1469, 1470, 5, 98, 0, 0, 1470, 1738, 5, 49, 0, 0, 1471, 1472, 5, 115, 0, 0, 1472, 1473, 5, 109, 0, 0, 1473, 1474, 5, 98, 0, 0, 1474, 1738, 5, 50, 0, 0, 1475, 1476, 5, 115, 0, 0, 1476, 1477, 5, 109, 0, 0, 1477, 1478, 5, 98, 0, 0, 1478, 1738, 5, 51, 0, 0, 1479, 1480, 5, 115, 0, 0, 1480, 1481, 5, 109, 0, 0, 1481, 1482, 5, 98, 0, 0, 1482, 1738, 5, 52, 0, 0, 1483, 1484, 5, 115, 0, 0, 1484, 1485, 5, 109, 0, 0, 1485, 1486, 5, 98, 0, 0, 1486, 1738, 5, 53, 0, 0, 1487, 1488, 5, 115, 0, 0, 1488, 1489, 5, 109, 0, 0, 1489, 1490, 5, 98, 0, 0, 1490, 1738, 5, 54, 0, 0, 1491, 1492, 5, 115, 0, 0, 1492, 1493, 5, 109, 0, 0, 1493, 1494, 5, 98, 0, 0, 1494, 1738, 5, 55, 0, 0, 1495, 1496, 5, 115, 0, 0, 1496, 1497, 5, 116, 0, 0, 1497, 1738, 5, 112, 0, 0, 1498, 1499, 5, 115, 0, 0, 1499, 1500, 5, 116, 0, 0, 1500, 1738, 5, 122, 0, 0, 1501, 1502, 5, 116, 0, 0, 1502, 1503, 5, 114, 0, 0, 1503, 1738, 5, 98, 0, 0, 1504, 1505, 5, 116, 0, 0, 1505, 1506, 5, 115, 0, 0, 1506, 1738, 5, 98, 0, 0, 1507, 1508, 5, 119, 0, 0, 1508, 1509, 5, 97, 0, 0, 1509, 1738, 5, 105, 0, 0, 1510, 1511, 5, 99, 0, 0, 1511, 1512, 5, 108, 0, 0, 1512, 1738, 5, 101, 0, 0, 1513, 1514, 5, 115, 0, 0, 1514, 1515, 5, 101, 0, 0, 1515, 1738, 5, 101, 0, 0, 1516, 1517, 5, 116, 0, 0, 1517, 1518, 5, 115, 0, 0, 1518, 1738, 5, 121, 0, 0, 1519, 1520, 5, 108, 0, 0, 1520, 1521, 5, 98, 0, 0, 1521, 1522, 5, 112, 0, 0, 1522, 1738, 5, 108, 0, 0, 1523, 1524, 5, 105, 0, 0, 1524, 1525, 5, 110, 0, 0, 1525, 1738, 5, 122, 0, 0, 1526, 1527, 5, 116, 0, 0, 1527, 1528, 5, 121, 0, 0, 1528, 1738, 5, 115, 0, 0, 1529, 1530, 5, 108, 0, 0, 1530, 1531, 5, 98, 0, 0, 1531, 1532, 5, 109, 0, 0, 1532, 1738, 5, 105, 0, 0, 1533, 1534, 5, 100, 0, 0, 1534, 1535, 5, 101, 0, 0, 1535, 1738, 5, 122, 0, 0, 1536, 1537, 5, 110, 0, 0, 1537, 1538, 5, 101, 0, 0, 1538, 1738, 5, 103, 0, 0, 1539, 1540, 5, 97, 0, 0, 1540, 1541, 5, 115, 0, 0, 1541, 1738, 5, 114, 0, 0, 1542, 1543, 5, 116, 0, 0, 1543, 1544, 5, 97, 0, 0, 1544, 1738, 5, 122, 0, 0, 1545, 1546, 5, 108, 0, 0, 1546, 1547, 5, 98, 0, 0, 1547, 1548, 5, 118, 0, 0, 1548, 1738, 5, 99, 0, 0, 1549, 1550, 5, 116, 0, 0, 1550, 1551, 5, 97, 0, 0, 1551, 1738, 5, 98, 0, 0, 1552, 1553, 5, 109, 0, 0, 1553, 1554, 5, 97, 0, 0, 1554, 1738, 5, 112, 0, 0, 1555, 1556, 5, 114, 0, 0, 1556, 1557, 5, 116, 0, 0, 1557, 1738, 5, 110, 0, 0, 1558, 1559, 5, 108, 0, 0, 1559, 1560, 5, 98, 0, 0, 1560, 1561, 5, 115, 0, 0, 1561, 1738, 5, 114, 0, 0, 1562, 1563, 5, 116, 0, 0, 1563, 1564, 5, 122, 0, 0, 1564, 1738, 5, 97, 0, 0, 1565, 1566, 5, 108, 0, 0, 1566, 1567, 5, 98, 0, 0, 1567, 1568, 5, 118, 0, 0, 1568, 1738, 5, 115, 0, 0, 1569, 1570, 5, 116, 0, 0, 1570, 1571, 5, 98, 0, 0, 1571, 1738, 5, 97, 0, 0, 1572, 1573, 5, 108, 0, 0, 1573, 1574, 5, 98, 0, 0, 1574, 1575, 5, 114, 0, 0, 1575, 1738, 5, 97, 0, 0, 1576, 1577, 5, 108, 0, 0, 1577, 1578, 5, 98, 0, 0, 1578, 1579, 5, 99, 0, 0, 1579, 1738, 5, 99, 0, 0, 1580, 1581, 5, 108, 0, 0, 1581, 1582, 5, 100, 0, 0, 1582, 1738, 5, 122, 0, 0, 1583, 1584, 5, 108, 0, 0, 1584, 1585, 5, 98, 0, 0, 1585, 1586, 5, 99, 0, 0, 1586, 1738, 5, 115, 0, 0, 1587, 1588, 5, 99, 0, 0, 1588, 1589, 5, 112, 0, 0, 1589, 1738, 5, 122, 0, 0, 1590, 1591, 5, 100, 0, 0, 1591, 1592, 5, 101, 0, 0, 1592, 1738, 5, 119, 0, 0, 1593, 1594, 5, 97, 0, 0, 1594, 1595, 5, 115, 0, 0, 1595, 1738, 5, 119, 0, 0, 1596, 1597, 5, 108, 0, 0, 1597, 1598, 5, 98, 0, 0, 1598, 1599, 5, 110, 0, 0, 1599, 1738, 5, 101, 0, 0, 1600, 1601, 5, 112, 0, 0, 1601, 1602, 5, 104, 0, 0, 1602, 1738, 5, 122, 0, 0, 1603, 1604, 5, 105, 0, 0, 1604, 1605, 5, 110, 0, 0, 1605, 1738, 5, 119, 0, 0, 1606, 1607, 5, 114, 0, 0, 1607, 1608, 5, 111, 0, 0, 1608, 1738, 5, 119, 0, 0, 1609, 1610, 5, 108, 0, 0, 1610, 1611, 5, 98, 0, 0, 1611, 1612, 5, 101, 0, 0, 1612, 1738, 5, 113, 0, 0, 1613, 1614, 5, 112, 0, 0, 1614, 1615, 5, 104, 0, 0, 1615, 1738, 5, 119, 0, 0, 1616, 1617, 5, 112, 0, 0, 1617, 1618, 5, 108, 0, 0, 1618, 1738, 5, 122, 0, 0, 1619, 1620, 5, 101, 0, 0, 1620, 1621, 5, 111, 0, 0, 1621, 1738, 5, 109, 0, 0, 1622, 1623, 5, 97, 0, 0, 1623, 1624, 5, 100, 0, 0, 1624, 1625, 5, 99, 0, 0, 1625, 1738, 5, 113, 0, 0, 1626, 1627, 5, 97, 0, 0, 1627, 1628, 5, 110, 0, 0, 1628, 1629, 5, 100, 0, 0, 1629, 1738, 5, 113, 0, 0, 1630, 1631, 5, 97, 0, 0, 1631, 1632, 5, 115, 0, 0, 1632, 1633, 5, 108, 0, 0, 1633, 1738, 5, 113, 0, 0, 1634, 1635, 5, 97, 0, 0, 1635, 1636, 5, 115, 0, 0, 1636, 1637, 5, 114, 0, 0, 1637, 1738, 5, 113, 0, 0, 1638, 1639, 5, 98, 0, 0, 1639, 1640, 5, 105, 0, 0, 1640, 1641, 5, 116, 0, 0, 1641, 1738, 5, 113, 0, 0, 1642, 1643, 5, 99, 0, 0, 1643, 1644, 5, 112, 0, 0, 1644, 1738, 5, 113, 0, 0, 1645, 1646, 5, 100, 0, 0, 1646, 1647, 5, 101, 0, 0, 1647, 1738, 5, 113, 0, 0, 1648, 1649, 5, 101, 0, 0, 1649, 1650, 5, 111, 0, 0, 1650, 1651, 5, 114, 0, 0, 1651, 1738, 5, 113, 0, 0, 1652, 1653, 5, 105, 0, 0, 1653, 1654, 5, 110, 0, 0, 1654, 1738, 5, 113, 0, 0, 1655, 1656, 5, 108, 0, 0, 1656, 1657, 5, 100, 0, 0, 1657, 1738, 5, 113, 0, 0, 1658, 1659, 5, 108, 0, 0, 1659, 1660, 5, 115, 0, 0, 1660, 1661, 5, 114, 0, 0, 1661, 1738, 5, 113, 0, 0, 1662, 1663, 5, 111, 0, 0, 1663, 1664, 5, 114, 0, 0, 1664, 1738, 5, 113, 0, 0, 1665, 1666, 5, 114, 0, 0, 1666, 1667, 5, 111, 0, 0, 1667, 1668, 5, 108, 0, 0, 1668, 1738, 5, 113, 0, 0, 1669, 1670, 5, 114, 0, 0, 1670, 1671, 5, 111, 0, 0, 1671, 1672, 5, 114, 0, 0, 1672, 1738, 5, 113, 0, 0, 1673, 1674, 5, 115, 0, 0, 1674, 1675, 5, 98, 0, 0, 1675, 1676, 5, 99, 0, 0, 1676, 1738, 5, 113, 0, 0, 1677, 1678, 5, 115, 0, 0, 1678, 1679, 5, 116, 0, 0, 1679, 1738, 5, 113, 0, 0, 1680, 1681, 5, 115, 0, 0, 1681, 1682, 5, 120, 0, 0, 1682, 1738, 5, 121, 0, 0, 1683, 1684, 5, 115, 0, 0, 1684, 1685, 5, 116, 0, 0, 1685, 1738, 5, 48, 0, 0, 1686, 1687, 5, 115, 0, 0, 1687, 1688, 5, 116, 0, 0, 1688, 1738, 5, 49, 0, 0, 1689, 1690, 5, 115, 0, 0, 1690, 1691, 5, 116, 0, 0, 1691, 1738, 5, 50, 0, 0, 1692, 1693, 5, 115, 0, 0, 1693, 1694, 5, 97, 0, 0, 1694, 1738, 5, 121, 0, 0, 1695, 1696, 5, 116, 0, 0, 1696, 1697, 5, 109, 0, 0, 1697, 1738, 5, 97, 0, 0, 1698, 1699, 5, 98, 0, 0, 1699, 1700, 5, 115, 0, 0, 1700, 1738, 5, 114, 0, 0, 1701, 1702, 5, 116, 0, 0, 1702, 1703, 5, 97, 0, 0, 1703, 1738, 5, 109, 0, 0, 1704, 1705, 5, 99, 0, 0, 1705, 1706, 5, 115, 0, 0, 1706, 1738, 5, 108, 0, 0, 1707, 1708, 5, 99, 0, 0, 1708, 1709, 5, 108, 0, 0, 1709, 1738, 5, 97, 0, 0, 1710, 1711, 5, 99, 0, 0, 1711, 1712, 5, 108, 0, 0, 1712, 1738, 5, 120, 0, 0, 1713, 1714, 5, 99, 0, 0, 1714, 1715, 5, 108, 0, 0, 1715, 1738, 5, 121, 0, 0, 1716, 1717, 5, 99, 0, 0, 1717, 1718, 5, 115, 0, 0, 1718, 1738, 5, 104, 0, 0, 1719, 1720, 5, 115, 0, 0, 1720, 1721, 5, 101, 0, 0, 1721, 1738, 5, 116, 0, 0, 1722, 1723, 5, 116, 0, 0, 1723, 1724, 5, 115, 0, 0, 1724, 1738, 5, 116, 0, 0, 1725, 1726, 5, 116, 0, 0, 1726, 1727, 5, 105, 0, 0, 1727, 1738, 5, 97, 0, 0, 1728, 1729, 5, 116, 0, 0, 1729, 1730, 5, 100, 0, 0, 1730, 1738, 5, 100, 0, 0, 1731, 1732, 5, 116, 0, 0, 1732, 1733, 5, 105, 0, 0, 1733, 1738, 5, 110, 0, 0, 1734, 1735, 5, 116, 0, 0, 1735, 1736, 5, 105, 0, 0, 1736, 1738, 5, 105, 0, 0, 1737, 1130, 1, 0, 0, 0, 1737, 1133, 1, 0, 0, 0, 1737, 1136, 1, 0, 0, 0, 1737, 1139, 1, 0, 0, 0, 1737, 1142, 1, 0, 0, 0, 1737, 1145, 1, 0, 0, 0, 1737, 1148, 1, 0, 0, 0, 1737, 1151, 1, 0, 0, 0, 1737, 1154, 1, 0, 0, 0, 1737, 1157, 1, 0, 0, 0, 1737, 1160, 1, 0, 0, 0, 1737, 1163, 1, 0, 0, 0, 1737, 1166, 1, 0, 0, 0, 1737, 1169, 1, 0, 0, 0, 1737, 1172, 1, 0, 0, 0, 1737, 1175, 1, 0, 0, 0, 1737, 1178, 1, 0, 0, 0, 1737, 1181, 1, 0, 0, 0, 1737, 1184, 1, 0, 0, 0, 1737, 1187, 1, 0, 0, 0, 1737, 1190, 1, 0, 0, 0, 1737, 1193, 1, 0, 0, 0, 1737, 1196, 1, 0, 0, 0, 1737, 1199, 1, 0, 0, 0, 1737, 1202, 1, 0, 0, 0, 1737, 1205, 1, 0, 0, 0, 1737, 1208, 1, 0, 0, 0, 1737, 1211, 1, 0, 0, 0, 1737, 1214, 1, 0, 0, 0, 1737, 1217, 1, 0, 0, 0, 1737, 1220, 1, 0, 0, 0, 1737, 1223, 1, 0, 0, 0, 1737, 1226, 1, 0, 0, 0, 1737, 1229, 1, 0, 0, 0, 1737, 1232, 1, 0, 0, 0, 1737, 1235, 1, 0, 0, 0, 1737, 1238, 1, 0, 0, 0, 1737, 1241, 1, 0, 0, 0, 1737, 1244, 1, 0, 0, 0, 1737, 1247, 1, 0, 0, 0, 1737, 1250, 1, 0, 0, 0, 1737, 1253, 1, 0, 0, 0, 1737, 1256, 1, 0, 0, 0, 1737, 1259, 1, 0, 0, 0, 1737, 1262, 1, 0, 0, 0, 1737, 1265, 1, 0, 0, 0, 1737, 1268, 1, 0, 0, 0, 1737, 1271, 1, 0, 0, 0, 1737, 1274, 1, 0, 0, 0, 1737, 1277, 1, 0, 0, 0, 1737, 1280, 1, 0, 0, 0, 1737, 1283, 1, 0, 0, 0, 1737, 1286, 1, 0, 0, 0, 1737, 1289, 1, 0, 0, 0, 1737, 1292, 1, 0, 0, 0, 1737, 1295, 1, 0, 0, 0, 1737, 1298, 1, 0, 0, 0, 1737, 1301, 1, 0, 0, 0, 1737, 1304, 1, 0, 0, 0, 1737, 1307, 1, 0, 0, 0, 1737, 1310, 1, 0, 0, 0, 1737, 1313, 1, 0, 0, 0, 1737, 1316, 1, 0, 0, 0, 1737, 1319, 1, 0, 0, 0, 1737, 1322, 1, 0, 0, 0, 1737, 1325, 1, 0, 0, 0, 1737, 1328, 1, 0, 0, 0, 1737, 1331, 1, 0, 0, 0, 1737, 1334, 1, 0, 0, 0, 1737, 1337, 1, 0, 0, 0, 1737, 1340, 1, 0, 0, 0, 1737, 1343, 1, 0, 0, 0, 1737, 1346, 1, 0, 0, 0, 1737, 1349, 1, 0, 0, 0, 1737, 1352, 1, 0, 0, 0, 1737, 1356, 1, 0, 0, 0, 1737, 1360, 1, 0, 0, 0, 1737, 1364, 1, 0, 0, 0, 1737, 1368, 1, 0, 0, 0, 1737, 1372, 1, 0, 0, 0, 1737, 1376, 1, 0, 0, 0, 1737, 1380, 1, 0, 0, 0, 1737, 1384, 1, 0, 0, 0, 1737, 1388, 1, 0, 0, 0, 1737, 1392, 1, 0, 0, 0, 1737, 1396, 1, 0, 0, 0, 1737, 1400, 1, 0, 0, 0, 1737, 1404, 1, 0, 0, 0, 1737, 1408, 1, 0, 0, 0, 1737, 1412, 1, 0, 0, 0, 1737, 1416, 1, 0, 0, 0, 1737, 1419, 1, 0, 0, 0, 1737, 1422, 1, 0, 0, 0, 1737, 1425, 1, 0, 0, 0, 1737, 1428, 1, 0, 0, 0, 1737, 1431, 1, 0, 0, 0, 1737, 1435, 1, 0, 0, 0, 1737, 1439, 1, 0, 0, 0, 1737, 1443, 1, 0, 0, 0, 1737, 1447, 1, 0, 0, 0, 1737, 1451, 1, 0, 0, 0, 1737, 1455, 1, 0, 0, 0, 1737, 1459, 1, 0, 0, 0, 1737, 1463, 1, 0, 0, 0, 1737, 1467, 1, 0, 0, 0, 1737, 1471, 1, 0, 0, 0, 1737, 1475, 1, 0, 0, 0, 1737, 1479, 1, 0, 0, 0, 1737, 1483, 1, 0, 0, 0, 1737, 1487, 1, 0, 0, 0, 1737, 1491, 1, 0, 0, 0, 1737, 1495, 1, 0, 0, 0, 1737, 1498, 1, 0, 0, 0, 1737, 1501, 1, 0, 0, 0, 1737, 1504, 1, 0, 0, 0, 1737, 1507, 1, 0, 0, 0, 1737, 1510, 1, 0, 0, 0, 1737, 1513, 1, 0, 0, 0, 1737, 1516, 1, 0, 0, 0, 1737, 1519, 1, 0, 0, 0, 1737, 1523, 1, 0, 0, 0, 1737, 1526, 1, 0, 0, 0, 1737, 1529, 1, 0, 0, 0, 1737, 1533, 1, 0, 0, 0, 1737, 1536, 1, 0, 0, 0, 1737, 1539, 1, 0, 0, 0, 1737, 1542, 1, 0, 0, 0, 1737, 1545, 1, 0, 0, 0, 1737, 1549, 1, 0, 0, 0, 1737, 1552, 1, 0, 0, 0, 1737, 1555, 1, 0, 0, 0, 1737, 1558, 1, 0, 0, 0, 1737, 1562, 1, 0, 0, 0, 1737, 1565, 1, 0, 0, 0, 1737, 1569, 1, 0, 0, 0, 1737, 1572, 1, 0, 0, 0, 1737, 1576, 1, 0, 0, 0, 1737, 1580, 1, 0, 0, 0, 1737, 1583, 1, 0, 0, 0, 1737, 1587, 1, 0, 0, 0, 1737, 1590, 1, 0, 0, 0, 1737, 1593, 1, 0, 0, 0, 1737, 1596, 1, 0, 0, 0, 1737, 1600, 1, 0, 0, 0, 1737, 1603, 1, 0, 0, 0, 1737, 1606, 1, 0, 0, 0, 1737, 1609, 1, 0, 0, 0, 1737, 1613, 1, 0, 0, 0, 1737, 1616, 1, 0, 0, 0, 1737, 1619, 1, 0, 0, 0, 1737, 1622, 1, 0, 0, 0, 1737, 1626, 1, 0, 0, 0, 1737, 1630, 1, 0, 0, 0, 1737, 1634, 1, 0, 0, 0, 1737, 1638, 1, 0, 0, 0, 1737, 1642, 1, 0, 0, 0, 1737, 1645, 1, 0, 0, 0, 1737, 1648, 1, 0, 0, 0, 1737, 1652, 1, 0, 0, 0, 1737, 1655, 1, 0, 0, 0, 1737, 1658, 1, 0, 0, 0, 1737, 1662, 1, 0, 0, 0, 1737, 1665, 1, 0, 0, 0, 1737, 1669, 1, 0, 0, 0, 1737, 1673, 1, 0, 0, 0, 1737, 1677, 1, 0, 0, 0, 1737, 1680, 1, 0, 0, 0, 1737, 1683, 1, 0, 0, 0, 1737, 1686, 1, 0, 0, 0, 1737, 1689, 1, 0, 0, 0, 1737, 1692, 1, 0, 0, 0, 1737, 1695, 1, 0, 0, 0, 1737, 1698, 1, 0, 0, 0, 1737, 1701, 1, 0, 0, 0, 1737, 1704, 1, 0, 0, 0, 1737, 1707, 1, 0, 0, 0, 1737, 1710, 1, 0, 0, 0, 1737, 1713, 1, 0, 0, 0, 1737, 1716, 1, 0, 0, 0, 1737, 1719, 1, 0, 0, 0, 1737, 1722, 1, 0, 0, 0, 1737, 1725, 1, 0, 0, 0, 1737, 1728, 1, 0, 0, 0, 1737, 1731, 1, 0, 0, 0, 1737, 1734, 1, 0, 0, 0, 1738, 236, 1, 0, 0, 0, 1739, 1740, 5, 35, 0, 0, 1740, 238, 1, 0, 0, 0, 1741, 1742, 5, 58, 0, 0, 1742, 240, 1, 0, 0, 0, 1743, 1744, 5, 44, 0, 0, 1744, 242, 1, 0, 0, 0, 1745, 1746, 5, 40, 0, 0, 1746, 244, 1, 0, 0, 0, 1747, 1748, 5, 41, 0, 0, 1748, 246, 1, 0, 0, 0, 1749, 1750, 5, 91, 0, 0, 1750, 248, 1, 0, 0, 0, 1751, 1752, 5, 93, 0, 0, 1752, 250, 1, 0, 0, 0, 1753, 1754, 5, 46, 0, 0, 1754, 252, 1, 0, 0, 0, 1755, 1756, 5, 60, 0, 0, 1756, 1757, 5, 60, 0, 0, 1757, 254, 1, 0, 0, 0, 1758, 1759, 5, 62, 0, 0, 1759, 1760, 5, 62, 0, 0, 1760, 256, 1, 0, 0, 0, 1761, 1762, 5, 43, 0, 0, 1762, 258, 1, 0, 0, 0, 1763, 1764, 5, 45, 0, 0, 1764, 260, 1, 0, 0, 0, 1765, 1766, 5, 60, 0, 0, 1766, 262, 1, 0, 0, 0, 1767, 1768, 5, 62, 0, 0, 1768, 264, 1, 0, 0, 0, 1769, 1770, 5, 42, 0, 0, 1770, 266, 1, 0, 0, 0, 1771, 1772, 5, 47, 0, 0, 1772, 268, 1, 0, 0, 0, 1773, 1774, 5, 123, 0, 0, 1774, 1775, 6, 133, 7, 0, 1775, 270, 1, 0, 0, 0, 1776, 1777, 5, 125, 0, 0, 1777, 1778, 6, 134, 8, 0, 1778, 272, 1, 0, 0, 0, 1779, 1782, 3, 275, 136, 0, 1780, 1782, 3, 283, 140, 0, 1781, 1779, 1, 0, 0, 0, 1781, 1780, 1, 0, 0, 0, 1782, 274, 1, 0, 0, 0, 1783, 1787, 3, 277, 137, 0, 1784, 1787, 3, 279, 138, 0, 1785, 1787, 3, 281, 139, 0, 1786, 1783, 1, 0, 0, 0, 1786, 1784, 1, 0, 0, 0, 1786, 1785, 1, 0, 0, 0, 1787, 276, 1, 0, 0, 0, 1788, 1792, 5, 37, 0, 0, 1789, 1791, 3, 291, 144, 0, 1790, 1789, 1, 0, 0, 0, 1791, 1794, 1, 0, 0, 0, 1792, 1790, 1, 0, 0, 0, 1792, 1793, 1, 0, 0, 0, 1793, 1795, 1, 0, 0, 0, 1794, 1792, 1, 0, 0, 0, 1795, 1797, 5, 46, 0, 0, 1796, 1798, 3, 291, 144, 0, 1797, 1796, 1, 0, 0, 0, 1798, 1799, 1, 0, 0, 0, 1799, 1797, 1, 0, 0, 0, 1799, 1800, 1, 0, 0, 0, 1800, 278, 1, 0, 0, 0, 1801, 1803, 3, 293, 145, 0, 1802, 1801, 1, 0, 0, 0, 1803, 1806, 1, 0, 0, 0, 1804, 1802, 1, 0, 0, 0, 1804, 1805, 1, 0, 0, 0, 1805, 1807, 1, 0, 0, 0, 1806, 1804, 1, 0, 0, 0, 1807, 1809, 5, 46, 0, 0, 1808, 1810, 3, 293, 145, 0, 1809, 1808, 1, 0, 0, 0, 1810, 1811, 1, 0, 0, 0, 1811, 1809, 1, 0, 0, 0, 1811, 1812, 1, 0, 0, 0, 1812, 280, 1, 0, 0, 0, 1813, 1817, 5, 36, 0, 0, 1814, 1816, 3, 295, 146, 0, 1815, 1814, 1, 0, 0, 0, 1816, 1819, 1, 0, 0, 0, 1817, 1815, 1, 0, 0, 0, 1817, 1818, 1, 0, 0, 0, 1818, 1820, 1, 0, 0, 0, 1819, 1817, 1, 0, 0, 0, 1820, 1822, 5, 46, 0, 0, 1821, 1823, 3, 295, 146, 0, 1822, 1821, 1, 0, 0, 0, 1823, 1824, 1, 0, 0, 0, 1824, 1822, 1, 0, 0, 0, 1824, 1825, 1, 0, 0, 0, 1825, 282, 1, 0, 0, 0, 1826, 1830, 3, 287, 142, 0, 1827, 1830, 3, 289, 143, 0, 1828, 1830, 3, 285, 141, 0, 1829, 1826, 1, 0, 0, 0, 1829, 1827, 1, 0, 0, 0, 1829, 1828, 1, 0, 0, 0, 1830, 284, 1, 0, 0, 0, 1831, 1833, 5, 37, 0, 0, 1832, 1834, 3, 291, 144, 0, 1833, 1832, 1, 0, 0, 0, 1834, 1835, 1, 0, 0, 0, 1835, 1833, 1, 0, 0, 0, 1835, 1836, 1, 0, 0, 0, 1836, 286, 1, 0, 0, 0, 1837, 1839, 3, 293, 145, 0, 1838, 1837, 1, 0, 0, 0, 1839, 1840, 1, 0, 0, 0, 1840, 1838, 1, 0, 0, 0, 1840, 1841, 1, 0, 0, 0, 1841, 288, 1, 0, 0, 0, 1842, 1844, 5, 36, 0, 0, 1843, 1845, 3, 295, 146, 0, 1844, 1843, 1, 0, 0, 0, 1845, 1846, 1, 0, 0, 0, 1846, 1844, 1, 0, 0, 0, 1846, 1847, 1, 0, 0, 0, 1847, 290, 1, 0, 0, 0, 1848, 1849, 7, 4, 0, 0, 1849, 292, 1, 0, 0, 0, 1850, 1851, 7, 5, 0, 0, 1851, 294, 1, 0, 0, 0, 1852, 1853, 7, 6, 0, 0, 1853, 296, 1, 0, 0, 0, 1854, 1858, 5, 39, 0, 0, 1855, 1856, 5, 92, 0, 0, 1856, 1859, 7, 18, 0, 0, 1857, 1859, 8, 15, 0, 0, 1858, 1855, 1, 0, 0, 0, 1858, 1857, 1, 0, 0, 0, 1859, 1860, 1, 0, 0, 0, 1860, 1861, 5, 39, 0, 0, 1861, 298, 1, 0, 0, 0, 1862, 1864, 3, 301, 149, 0, 1863, 1865, 7, 19, 0, 0, 1864, 1863, 1, 0, 0, 0, 1865, 1866, 1, 0, 0, 0, 1866, 1864, 1, 0, 0, 0, 1866, 1867, 1, 0, 0, 0, 1867, 300, 1, 0, 0, 0, 1868, 1872, 5, 33, 0, 0, 1869, 1871, 3, 307, 152, 0, 1870, 1869, 1, 0, 0, 0, 1871, 1874, 1, 0, 0, 0, 1872, 1870, 1, 0, 0, 0, 1872, 1873, 1, 0, 0, 0, 1873, 302, 1, 0, 0, 0, 1874, 1872, 1, 0, 0, 0, 1875, 1879, 3, 305, 151, 0, 1876, 1878, 3, 307, 152, 0, 1877, 1876, 1, 0, 0, 0, 1878, 1881, 1, 0, 0, 0, 1879, 1877, 1, 0, 0, 0, 1879, 1880, 1, 0, 0, 0, 1880, 304, 1, 0, 0, 0, 1881, 1879, 1, 0, 0, 0, 1882, 1883, 7, 7, 0, 0, 1883, 306, 1, 0, 0, 0, 1884, 1885, 7, 8, 0, 0, 1885, 308, 1, 0, 0, 0, 1886, 1887, 5, 64, 0, 0, 1887, 1888, 3, 303, 150, 0, 1888, 310, 1, 0, 0, 0, 1889, 1891, 7, 16, 0, 0, 1890, 1889, 1, 0, 0, 0, 1891, 1892, 1, 0, 0, 0, 1892, 1890, 1, 0, 0, 0, 1892, 1893, 1, 0, 0, 0, 1893, 1894, 1, 0, 0, 0, 1894, 1895, 6, 154, 5, 0, 1895, 312, 1, 0, 0, 0, 1896, 1897, 5, 47, 0, 0, 1897, 1898, 5, 47, 0, 0, 1898, 1902, 1, 0, 0, 0, 1899, 1901, 8, 17, 0, 0, 1900, 1899, 1, 0, 0, 0, 1901, 1904, 1, 0, 0, 0, 1902, 1900, 1, 0, 0, 0, 1902, 1903, 1, 0, 0, 0, 1903, 1905, 1, 0, 0, 0, 1904, 1902, 1, 0, 0, 0, 1905, 1906, 6, 155, 6, 0, 1906, 314, 1, 0, 0, 0, 1907, 1908, 5, 47, 0, 0, 1908, 1909, 5, 42, 0, 0, 1909, 1913, 1, 0, 0, 0, 1910, 1912, 9, 0, 0, 0, 1911, 1910, 1, 0, 0, 0, 1912, 1915, 1, 0, 0, 0, 1913, 1914, 1, 0, 0, 0, 1913, 1911, 1, 0, 0, 0, 1914, 1916, 1, 0, 0, 0, 1915, 1913, 1, 0, 0, 0, 1916, 1917, 5, 42, 0, 0, 1917, 1918, 5, 47, 0, 0, 1918, 1919, 1, 0, 0, 0, 1919, 1920, 6, 156, 6, 0, 1920, 316, 1, 0, 0, 0, 1921, 1923, 5, 60, 0, 0, 1922, 1924, 7, 20, 0, 0, 1923, 1922, 1, 0, 0, 0, 1924, 1925, 1, 0, 0, 0, 1925, 1923, 1, 0, 0, 0, 1925, 1926, 1, 0, 0, 0, 1926, 1927, 1, 0, 0, 0, 1927, 1928, 5, 62, 0, 0, 1928, 1929, 6, 157, 9, 0, 1929, 318, 1, 0, 0, 0, 1930, 1936, 5, 34, 0, 0, 1931, 1932, 5, 92, 0, 0, 1932, 1935, 5, 34, 0, 0, 1933, 1935, 8, 9, 0, 0, 1934, 1931, 1, 0, 0, 0, 1934, 1933, 1, 0, 0, 0, 1935, 1938, 1, 0, 0, 0, 1936, 1934, 1, 0, 0, 0, 1936, 1937, 1, 0, 0, 0, 1937, 1939, 1, 0, 0, 0, 1938, 1936, 1, 0, 0, 0, 1939, 1940, 5, 34, 0, 0, 1940, 1941, 6, 158, 10, 0, 1941, 320, 1, 0, 0, 0, 1942, 1944, 7, 16, 0, 0, 1943, 1942, 1, 0, 0, 0, 1944, 1945, 1, 0, 0, 0, 1945, 1943, 1, 0, 0, 0, 1945, 1946, 1, 0, 0, 0, 1946, 1947, 1, 0, 0, 0, 1947, 1948, 6, 159, 5, 0, 1948, 322, 1, 0, 0, 0, 1949, 1950, 5, 47, 0, 0, 1950, 1951, 5, 47, 0, 0, 1951, 1955, 1, 0, 0, 0, 1952, 1954, 8, 17, 0, 0, 1953, 1952, 1, 0, 0, 0, 1954, 1957, 1, 0, 0, 0, 1955, 1953, 1, 0, 0, 0, 1955, 1956, 1, 0, 0, 0, 1956, 1958, 1, 0, 0, 0, 1957, 1955, 1, 0, 0, 0, 1958, 1959, 6, 160, 6, 0, 1959, 324, 1, 0, 0, 0, 1960, 1961, 5, 47, 0, 0, 1961, 1962, 5, 42, 0, 0, 1962, 1966, 1, 0, 0, 0, 1963, 1965, 9, 0, 0, 0, 1964, 1963, 1, 0, 0, 0, 1965, 1968, 1, 0, 0, 0, 1966, 1967, 1, 0, 0, 0, 1966, 1964, 1, 0, 0, 0, 1967, 1969, 1, 0, 0, 0, 1968, 1966, 1, 0, 0, 0, 1969, 1970, 5, 42, 0, 0, 1970, 1971, 5, 47, 0, 0, 1971, 1972, 1, 0, 0, 0, 1972, 1973, 6, 161, 6, 0, 1973, 326, 1, 0, 0, 0, 67, 0, 1, 2, 436, 627, 804, 815, 823, 871, 933, 938, 945, 950, 957, 962, 969, 976, 981, 988, 993, 998, 1005, 1011, 1013, 1018, 1025, 1030, 1042, 1055, 1057, 1062, 1066, 1068, 1071, 1077, 1080, 1085, 1088, 1095, 1105, 1116, 1737, 1781, 1786, 1792, 1799, 1804, 1811, 1817, 1824, 1829, 1835, 1840, 1846, 1858, 1866, 1872, 1879, 1892, 1902, 1913, 1925, 1934, 1936, 1945, 1955, 1966, 11, 1, 0, 0, 1, 66, 1, 1, 80, 2, 1, 81, 3, 1, 107, 4, 0, 1, 0, 0, 2, 0, 1, 133, 5, 1, 134, 6, 1, 157, 7, 1, 158, 8] \ No newline at end of file diff --git a/gen/KickCLexer.java b/gen/KickCLexer.java new file mode 100644 index 000000000..95c1819b9 --- /dev/null +++ b/gen/KickCLexer.java @@ -0,0 +1,1596 @@ +// Generated from D:/Users/svenv/OneDrive/Documents/GitHub/kickc/src/main/antlr4/dk/camelot64/kickc/parser\KickCLexer.g4 by ANTLR 4.10.1 + + +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"}) +public class KickCLexer extends Lexer { + static { RuntimeMetaData.checkVersion("4.10.1", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + TYPEDEFNAME=1, CURLY_BEGIN=2, CURLY_END=3, BRACKET_BEGIN=4, BRACKET_END=5, + PAR_BEGIN=6, PAR_END=7, SEMICOLON=8, COLON=9, COMMA=10, RANGE=11, PARAM_LIST=12, + CONDITION=13, DOT=14, ARROW=15, PLUS=16, MINUS=17, ASTERISK=18, DIVIDE=19, + MODULO=20, INC=21, DEC=22, AND=23, BIT_NOT=24, BIT_XOR=25, BIT_OR=26, + SHIFT_LEFT=27, SHIFT_RIGHT=28, EQUAL=29, NOT_EQUAL=30, LESS_THAN=31, LESS_THAN_EQUAL=32, + GREATER_THAN_EQUAL=33, GREATER_THAN=34, LOGIC_AND=35, LOGIC_OR=36, ASSIGN=37, + ASSIGN_COMPOUND=38, TYPEDEF=39, CONST=40, EXTERN=41, EXPORT=42, ALIGN=43, + INLINE=44, VOLATILE=45, STATIC=46, INTERRUPT=47, REGISTER=48, LOCAL_RESERVE=49, + ADDRESS=50, ADDRESS_ZEROPAGE=51, ADDRESS_MAINMEM=52, FAR=53, FORM_SSA=54, + FORM_MA=55, INTRINSIC=56, CALLINGCONVENTION=57, IF=58, ELSE=59, WHILE=60, + DO=61, FOR=62, SWITCH=63, RETURN=64, BREAK=65, CONTINUE=66, GOTO=67, ASM=68, + DEFAULT=69, CASE=70, STRUCT=71, UNION=72, ENUM=73, SIZEOF=74, TYPEID=75, + DEFINED=76, KICKASM=77, LOGIC_NOT=78, SIMPLETYPE=79, BOOLEAN=80, KICKASM_BODY=81, + IMPORT=82, INCLUDE=83, PRAGMA=84, DEFINE=85, DEFINE_CONTINUE=86, UNDEF=87, + IFDEF=88, IFNDEF=89, IFIF=90, ELIF=91, IFELSE=92, ENDIF=93, ERROR=94, + TOKEN_STRINGIZE=95, TOKEN_MERGE=96, NUMBER=97, NUMFLOAT=98, BINFLOAT=99, + DECFLOAT=100, HEXFLOAT=101, NUMINT=102, BININTEGER=103, DECINTEGER=104, + HEXINTEGER=105, NAME=106, STRING=107, CHAR=108, WS=109, COMMENT_LINE=110, + COMMENT_BLOCK=111, ASM_BYTE=112, ASM_MNEMONIC=113, ASM_IMM=114, ASM_COLON=115, + ASM_COMMA=116, ASM_PAR_BEGIN=117, ASM_PAR_END=118, ASM_BRACKET_BEGIN=119, + ASM_BRACKET_END=120, ASM_DOT=121, ASM_SHIFT_LEFT=122, ASM_SHIFT_RIGHT=123, + ASM_PLUS=124, ASM_MINUS=125, ASM_LESS_THAN=126, ASM_GREATER_THAN=127, + ASM_MULTIPLY=128, ASM_DIVIDE=129, ASM_CURLY_BEGIN=130, ASM_CURLY_END=131, + ASM_NUMBER=132, ASM_NUMFLOAT=133, ASM_BINFLOAT=134, ASM_DECFLOAT=135, + ASM_HEXFLOAT=136, ASM_NUMINT=137, ASM_BININTEGER=138, ASM_DECINTEGER=139, + ASM_HEXINTEGER=140, ASM_CHAR=141, ASM_MULTI_REL=142, ASM_MULTI_NAME=143, + ASM_NAME=144, ASM_TAG=145, ASM_WS=146, ASM_COMMENT_LINE=147, ASM_COMMENT_BLOCK=148, + IMPORT_SYSTEMFILE=149, IMPORT_LOCALFILE=150, IMPORT_WS=151, IMPORT_COMMENT_LINE=152, + IMPORT_COMMENT_BLOCK=153; + public static final int + ASM_MODE=1, IMPORT_MODE=2; + public static String[] channelNames = { + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" + }; + + public static String[] modeNames = { + "DEFAULT_MODE", "ASM_MODE", "IMPORT_MODE" + }; + + private static String[] makeRuleNames() { + return new String[] { + "CURLY_BEGIN", "CURLY_END", "BRACKET_BEGIN", "BRACKET_END", "PAR_BEGIN", + "PAR_END", "SEMICOLON", "COLON", "COMMA", "RANGE", "PARAM_LIST", "CONDITION", + "DOT", "ARROW", "PLUS", "MINUS", "ASTERISK", "DIVIDE", "MODULO", "INC", + "DEC", "AND", "BIT_NOT", "BIT_XOR", "BIT_OR", "SHIFT_LEFT", "SHIFT_RIGHT", + "EQUAL", "NOT_EQUAL", "LESS_THAN", "LESS_THAN_EQUAL", "GREATER_THAN_EQUAL", + "GREATER_THAN", "LOGIC_AND", "LOGIC_OR", "ASSIGN", "ASSIGN_COMPOUND", + "TYPEDEF", "CONST", "EXTERN", "EXPORT", "ALIGN", "INLINE", "VOLATILE", + "STATIC", "INTERRUPT", "REGISTER", "LOCAL_RESERVE", "ADDRESS", "ADDRESS_ZEROPAGE", + "ADDRESS_MAINMEM", "FAR", "FORM_SSA", "FORM_MA", "INTRINSIC", "CALLINGCONVENTION", + "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH", "RETURN", "BREAK", "CONTINUE", + "GOTO", "ASM", "DEFAULT", "CASE", "STRUCT", "UNION", "ENUM", "SIZEOF", + "TYPEID", "DEFINED", "KICKASM", "LOGIC_NOT", "SIMPLETYPE", "BOOLEAN", + "KICKASM_BODY", "IMPORT", "INCLUDE", "PRAGMA", "DEFINE", "DEFINE_CONTINUE", + "UNDEF", "IFDEF", "IFNDEF", "IFIF", "ELIF", "IFELSE", "ENDIF", "ERROR", + "TOKEN_STRINGIZE", "TOKEN_MERGE", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", + "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", "BINDIGIT", + "DECDIGIT", "HEXDIGIT", "NAME", "NAME_START", "NAME_CHAR", "STRING", + "CHAR", "WS", "COMMENT_LINE", "COMMENT_BLOCK", "ASM_BYTE", "ASM_MNEMONIC", + "ASM_IMM", "ASM_COLON", "ASM_COMMA", "ASM_PAR_BEGIN", "ASM_PAR_END", + "ASM_BRACKET_BEGIN", "ASM_BRACKET_END", "ASM_DOT", "ASM_SHIFT_LEFT", + "ASM_SHIFT_RIGHT", "ASM_PLUS", "ASM_MINUS", "ASM_LESS_THAN", "ASM_GREATER_THAN", + "ASM_MULTIPLY", "ASM_DIVIDE", "ASM_CURLY_BEGIN", "ASM_CURLY_END", "ASM_NUMBER", + "ASM_NUMFLOAT", "ASM_BINFLOAT", "ASM_DECFLOAT", "ASM_HEXFLOAT", "ASM_NUMINT", + "ASM_BININTEGER", "ASM_DECINTEGER", "ASM_HEXINTEGER", "ASM_BINDIGIT", + "ASM_DECDIGIT", "ASM_HEXDIGIT", "ASM_CHAR", "ASM_MULTI_REL", "ASM_MULTI_NAME", + "ASM_NAME", "ASM_NAME_START", "ASM_NAME_CHAR", "ASM_TAG", "ASM_WS", "ASM_COMMENT_LINE", + "ASM_COMMENT_BLOCK", "IMPORT_SYSTEMFILE", "IMPORT_LOCALFILE", "IMPORT_WS", + "IMPORT_COMMENT_LINE", "IMPORT_COMMENT_BLOCK" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, null, null, null, null, null, null, null, "';'", null, null, "'..'", + "'...'", "'?'", null, "'->'", null, null, null, null, "'%'", "'++'", + "'--'", "'&'", "'~'", "'^'", "'|'", null, null, "'=='", "'!='", null, + "'<='", "'>='", null, "'&&'", "'||'", "'='", null, "'typedef'", "'const'", + "'extern'", "'__export'", "'__align'", "'inline'", "'volatile'", "'static'", + "'__interrupt'", "'register'", "'__zp_reserve'", "'__address'", "'__zp'", + "'__mem'", "'__far'", "'__ssa'", "'__ma'", "'__intrinsic'", null, "'if'", + "'else'", "'while'", "'do'", "'for'", "'switch'", "'return'", "'break'", + "'continue'", "'goto'", "'asm'", "'default'", "'case'", "'struct'", "'union'", + "'enum'", "'sizeof'", "'typeid'", "'defined'", "'kickasm'", "'!'", null, + null, null, "'#import'", "'#include'", "'#pragma'", "'#define'", null, + "'#undef'", "'#ifdef'", "'#ifndef'", "'#if'", "'#elif'", "'#else'", "'#endif'", + "'#error'", null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, "'.byte'", null, "'#'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "TYPEDEFNAME", "CURLY_BEGIN", "CURLY_END", "BRACKET_BEGIN", "BRACKET_END", + "PAR_BEGIN", "PAR_END", "SEMICOLON", "COLON", "COMMA", "RANGE", "PARAM_LIST", + "CONDITION", "DOT", "ARROW", "PLUS", "MINUS", "ASTERISK", "DIVIDE", "MODULO", + "INC", "DEC", "AND", "BIT_NOT", "BIT_XOR", "BIT_OR", "SHIFT_LEFT", "SHIFT_RIGHT", + "EQUAL", "NOT_EQUAL", "LESS_THAN", "LESS_THAN_EQUAL", "GREATER_THAN_EQUAL", + "GREATER_THAN", "LOGIC_AND", "LOGIC_OR", "ASSIGN", "ASSIGN_COMPOUND", + "TYPEDEF", "CONST", "EXTERN", "EXPORT", "ALIGN", "INLINE", "VOLATILE", + "STATIC", "INTERRUPT", "REGISTER", "LOCAL_RESERVE", "ADDRESS", "ADDRESS_ZEROPAGE", + "ADDRESS_MAINMEM", "FAR", "FORM_SSA", "FORM_MA", "INTRINSIC", "CALLINGCONVENTION", + "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH", "RETURN", "BREAK", "CONTINUE", + "GOTO", "ASM", "DEFAULT", "CASE", "STRUCT", "UNION", "ENUM", "SIZEOF", + "TYPEID", "DEFINED", "KICKASM", "LOGIC_NOT", "SIMPLETYPE", "BOOLEAN", + "KICKASM_BODY", "IMPORT", "INCLUDE", "PRAGMA", "DEFINE", "DEFINE_CONTINUE", + "UNDEF", "IFDEF", "IFNDEF", "IFIF", "ELIF", "IFELSE", "ENDIF", "ERROR", + "TOKEN_STRINGIZE", "TOKEN_MERGE", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", + "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", "NAME", + "STRING", "CHAR", "WS", "COMMENT_LINE", "COMMENT_BLOCK", "ASM_BYTE", + "ASM_MNEMONIC", "ASM_IMM", "ASM_COLON", "ASM_COMMA", "ASM_PAR_BEGIN", + "ASM_PAR_END", "ASM_BRACKET_BEGIN", "ASM_BRACKET_END", "ASM_DOT", "ASM_SHIFT_LEFT", + "ASM_SHIFT_RIGHT", "ASM_PLUS", "ASM_MINUS", "ASM_LESS_THAN", "ASM_GREATER_THAN", + "ASM_MULTIPLY", "ASM_DIVIDE", "ASM_CURLY_BEGIN", "ASM_CURLY_END", "ASM_NUMBER", + "ASM_NUMFLOAT", "ASM_BINFLOAT", "ASM_DECFLOAT", "ASM_HEXFLOAT", "ASM_NUMINT", + "ASM_BININTEGER", "ASM_DECINTEGER", "ASM_HEXINTEGER", "ASM_CHAR", "ASM_MULTI_REL", + "ASM_MULTI_NAME", "ASM_NAME", "ASM_TAG", "ASM_WS", "ASM_COMMENT_LINE", + "ASM_COMMENT_BLOCK", "IMPORT_SYSTEMFILE", "IMPORT_LOCALFILE", "IMPORT_WS", + "IMPORT_COMMENT_LINE", "IMPORT_COMMENT_BLOCK" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + + + /** The C-Parser. Used for importing C-files and communicating with the Parser about typedefs. */ + CParser cParser; + /** True if the next CURLY starts ASM_MODE */ + boolean asmEnter = false; + /** Counts the nested curlies inside ASM_MODE to determine when to exit ASM_MODE */ + int asmCurlyCount = 0; + + public KickCLexer(CharStream input, CParser cParser) { + this(input); + this.cParser = cParser; + } + + + public KickCLexer(CharStream input) { + super(input); + _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @Override + public String getGrammarFileName() { return "KickCLexer.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public String[] getChannelNames() { return channelNames; } + + @Override + public String[] getModeNames() { return modeNames; } + + @Override + public ATN getATN() { return _ATN; } + + @Override + public void action(RuleContext _localctx, int ruleIndex, int actionIndex) { + switch (ruleIndex) { + case 0: + CURLY_BEGIN_action((RuleContext)_localctx, actionIndex); + break; + case 66: + ASM_action((RuleContext)_localctx, actionIndex); + break; + case 80: + IMPORT_action((RuleContext)_localctx, actionIndex); + break; + case 81: + INCLUDE_action((RuleContext)_localctx, actionIndex); + break; + case 107: + NAME_action((RuleContext)_localctx, actionIndex); + break; + case 133: + ASM_CURLY_BEGIN_action((RuleContext)_localctx, actionIndex); + break; + case 134: + ASM_CURLY_END_action((RuleContext)_localctx, actionIndex); + break; + case 157: + IMPORT_SYSTEMFILE_action((RuleContext)_localctx, actionIndex); + break; + case 158: + IMPORT_LOCALFILE_action((RuleContext)_localctx, actionIndex); + break; + } + } + private void CURLY_BEGIN_action(RuleContext _localctx, int actionIndex) { + switch (actionIndex) { + case 0: + if(asmEnter) { pushMode(ASM_MODE); asmEnter=false; } + break; + } + } + private void ASM_action(RuleContext _localctx, int actionIndex) { + switch (actionIndex) { + case 1: + asmEnter=true; + break; + } + } + private void IMPORT_action(RuleContext _localctx, int actionIndex) { + switch (actionIndex) { + case 2: + pushMode(IMPORT_MODE); + break; + } + } + private void INCLUDE_action(RuleContext _localctx, int actionIndex) { + switch (actionIndex) { + case 3: + pushMode(IMPORT_MODE); + break; + } + } + private void NAME_action(RuleContext _localctx, int actionIndex) { + switch (actionIndex) { + case 4: + if(cParser.isTypedef(getText())) setType(TYPEDEFNAME); + break; + } + } + private void ASM_CURLY_BEGIN_action(RuleContext _localctx, int actionIndex) { + switch (actionIndex) { + case 5: + asmCurlyCount++; + break; + } + } + private void ASM_CURLY_END_action(RuleContext _localctx, int actionIndex) { + switch (actionIndex) { + case 6: + asmCurlyCount--; if(asmCurlyCount<0) { popMode(); } + break; + } + } + private void IMPORT_SYSTEMFILE_action(RuleContext _localctx, int actionIndex) { + switch (actionIndex) { + case 7: + popMode(); + break; + } + } + private void IMPORT_LOCALFILE_action(RuleContext _localctx, int actionIndex) { + switch (actionIndex) { + case 8: + popMode(); + break; + } + } + + public static final String _serializedATN = + "\u0004\u0000\u0099\u07b6\u0006\uffff\uffff\u0006\uffff\uffff\u0006\uffff"+ + "\uffff\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002\u0002\u0007"+ + "\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002\u0005\u0007"+ + "\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002\b\u0007\b"+ + "\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002\f\u0007"+ + "\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002\u000f\u0007\u000f\u0002"+ + "\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002\u0012\u0007\u0012\u0002"+ + "\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002\u0015\u0007\u0015\u0002"+ + "\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002\u0018\u0007\u0018\u0002"+ + "\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002\u001b\u0007\u001b\u0002"+ + "\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002\u001e\u0007\u001e\u0002"+ + "\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007!\u0002\"\u0007\"\u0002#"+ + "\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007&\u0002\'\u0007\'\u0002"+ + "(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007+\u0002,\u0007,\u0002"+ + "-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u00070\u00021\u00071\u0002"+ + "2\u00072\u00023\u00073\u00024\u00074\u00025\u00075\u00026\u00076\u0002"+ + "7\u00077\u00028\u00078\u00029\u00079\u0002:\u0007:\u0002;\u0007;\u0002"+ + "<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007?\u0002@\u0007@\u0002"+ + "A\u0007A\u0002B\u0007B\u0002C\u0007C\u0002D\u0007D\u0002E\u0007E\u0002"+ + "F\u0007F\u0002G\u0007G\u0002H\u0007H\u0002I\u0007I\u0002J\u0007J\u0002"+ + "K\u0007K\u0002L\u0007L\u0002M\u0007M\u0002N\u0007N\u0002O\u0007O\u0002"+ + "P\u0007P\u0002Q\u0007Q\u0002R\u0007R\u0002S\u0007S\u0002T\u0007T\u0002"+ + "U\u0007U\u0002V\u0007V\u0002W\u0007W\u0002X\u0007X\u0002Y\u0007Y\u0002"+ + "Z\u0007Z\u0002[\u0007[\u0002\\\u0007\\\u0002]\u0007]\u0002^\u0007^\u0002"+ + "_\u0007_\u0002`\u0007`\u0002a\u0007a\u0002b\u0007b\u0002c\u0007c\u0002"+ + "d\u0007d\u0002e\u0007e\u0002f\u0007f\u0002g\u0007g\u0002h\u0007h\u0002"+ + "i\u0007i\u0002j\u0007j\u0002k\u0007k\u0002l\u0007l\u0002m\u0007m\u0002"+ + "n\u0007n\u0002o\u0007o\u0002p\u0007p\u0002q\u0007q\u0002r\u0007r\u0002"+ + "s\u0007s\u0002t\u0007t\u0002u\u0007u\u0002v\u0007v\u0002w\u0007w\u0002"+ + "x\u0007x\u0002y\u0007y\u0002z\u0007z\u0002{\u0007{\u0002|\u0007|\u0002"+ + "}\u0007}\u0002~\u0007~\u0002\u007f\u0007\u007f\u0002\u0080\u0007\u0080"+ + "\u0002\u0081\u0007\u0081\u0002\u0082\u0007\u0082\u0002\u0083\u0007\u0083"+ + "\u0002\u0084\u0007\u0084\u0002\u0085\u0007\u0085\u0002\u0086\u0007\u0086"+ + "\u0002\u0087\u0007\u0087\u0002\u0088\u0007\u0088\u0002\u0089\u0007\u0089"+ + "\u0002\u008a\u0007\u008a\u0002\u008b\u0007\u008b\u0002\u008c\u0007\u008c"+ + "\u0002\u008d\u0007\u008d\u0002\u008e\u0007\u008e\u0002\u008f\u0007\u008f"+ + "\u0002\u0090\u0007\u0090\u0002\u0091\u0007\u0091\u0002\u0092\u0007\u0092"+ + "\u0002\u0093\u0007\u0093\u0002\u0094\u0007\u0094\u0002\u0095\u0007\u0095"+ + "\u0002\u0096\u0007\u0096\u0002\u0097\u0007\u0097\u0002\u0098\u0007\u0098"+ + "\u0002\u0099\u0007\u0099\u0002\u009a\u0007\u009a\u0002\u009b\u0007\u009b"+ + "\u0002\u009c\u0007\u009c\u0002\u009d\u0007\u009d\u0002\u009e\u0007\u009e"+ + "\u0002\u009f\u0007\u009f\u0002\u00a0\u0007\u00a0\u0002\u00a1\u0007\u00a1"+ + "\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0002"+ + "\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0005"+ + "\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007\u0001\b\u0001"+ + "\b\u0001\t\u0001\t\u0001\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001\u000b"+ + "\u0001\u000b\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001\u000e\u0001"+ + "\u000e\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0011\u0001"+ + "\u0011\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0001"+ + "\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0016\u0001"+ + "\u0016\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0019\u0001"+ + "\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001b\u0001"+ + "\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001d\u0001"+ + "\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001f\u0001\u001f\u0001"+ + "\u001f\u0001 \u0001 \u0001!\u0001!\u0001!\u0001\"\u0001\"\u0001\"\u0001"+ + "#\u0001#\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+ + "$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+ + "$\u0001$\u0001$\u0001$\u0003$\u01b5\b$\u0001%\u0001%\u0001%\u0001%\u0001"+ + "%\u0001%\u0001%\u0001%\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001"+ + "\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001(\u0001(\u0001"+ + "(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001)\u0001)\u0001)\u0001"+ + ")\u0001)\u0001)\u0001)\u0001)\u0001*\u0001*\u0001*\u0001*\u0001*\u0001"+ + "*\u0001*\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001"+ + "+\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001-\u0001-\u0001"+ + "-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001"+ + ".\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001/\u0001"+ + "/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001"+ + "/\u0001/\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u0001"+ + "0\u00010\u00011\u00011\u00011\u00011\u00011\u00012\u00012\u00012\u0001"+ + "2\u00012\u00012\u00013\u00013\u00013\u00013\u00013\u00013\u00014\u0001"+ + "4\u00014\u00014\u00014\u00014\u00015\u00015\u00015\u00015\u00015\u0001"+ + "6\u00016\u00016\u00016\u00016\u00016\u00016\u00016\u00016\u00016\u0001"+ + "6\u00016\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u0001"+ + "7\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u0001"+ + "7\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u0001"+ + "7\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u0001"+ + "7\u00017\u00017\u00017\u00017\u00017\u00037\u0274\b7\u00018\u00018\u0001"+ + "8\u00019\u00019\u00019\u00019\u00019\u0001:\u0001:\u0001:\u0001:\u0001"+ + ":\u0001:\u0001;\u0001;\u0001;\u0001<\u0001<\u0001<\u0001<\u0001=\u0001"+ + "=\u0001=\u0001=\u0001=\u0001=\u0001=\u0001>\u0001>\u0001>\u0001>\u0001"+ + ">\u0001>\u0001>\u0001?\u0001?\u0001?\u0001?\u0001?\u0001?\u0001@\u0001"+ + "@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001A\u0001A\u0001"+ + "A\u0001A\u0001A\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001C\u0001"+ + "C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001D\u0001D\u0001D\u0001"+ + "D\u0001D\u0001E\u0001E\u0001E\u0001E\u0001E\u0001E\u0001E\u0001F\u0001"+ + "F\u0001F\u0001F\u0001F\u0001F\u0001G\u0001G\u0001G\u0001G\u0001G\u0001"+ + "H\u0001H\u0001H\u0001H\u0001H\u0001H\u0001H\u0001I\u0001I\u0001I\u0001"+ + "I\u0001I\u0001I\u0001I\u0001J\u0001J\u0001J\u0001J\u0001J\u0001J\u0001"+ + "J\u0001J\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001"+ + "L\u0001L\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ + "M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ + "M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ + "M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ + "M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ + "M\u0001M\u0001M\u0003M\u0325\bM\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ + "N\u0001N\u0001N\u0001N\u0003N\u0330\bN\u0001O\u0001O\u0001O\u0001O\u0005"+ + "O\u0336\bO\nO\fO\u0339\tO\u0001O\u0001O\u0001O\u0001P\u0001P\u0001P\u0001"+ + "P\u0001P\u0001P\u0001P\u0001P\u0001P\u0001P\u0001Q\u0001Q\u0001Q\u0001"+ + "Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001R\u0001R\u0001"+ + "R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001S\u0001S\u0001S\u0001S\u0001"+ + "S\u0001S\u0001S\u0001S\u0001T\u0001T\u0001T\u0001T\u0001T\u0003T\u0368"+ + "\bT\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001V\u0001V\u0001"+ + "V\u0001V\u0001V\u0001V\u0001V\u0001W\u0001W\u0001W\u0001W\u0001W\u0001"+ + "W\u0001W\u0001W\u0001X\u0001X\u0001X\u0001X\u0001Y\u0001Y\u0001Y\u0001"+ + "Y\u0001Y\u0001Y\u0001Z\u0001Z\u0001Z\u0001Z\u0001Z\u0001Z\u0001[\u0001"+ + "[\u0001[\u0001[\u0001[\u0001[\u0001[\u0001\\\u0001\\\u0001\\\u0001\\\u0001"+ + "\\\u0001\\\u0001\\\u0001]\u0001]\u0001]\u0001^\u0001^\u0001^\u0001_\u0001"+ + "_\u0003_\u03a6\b_\u0001`\u0001`\u0001`\u0003`\u03ab\b`\u0001a\u0001a\u0001"+ + "a\u0001a\u0001a\u0003a\u03b2\ba\u0001a\u0005a\u03b5\ba\na\fa\u03b8\ta"+ + "\u0001a\u0001a\u0004a\u03bc\ba\u000ba\fa\u03bd\u0001b\u0005b\u03c1\bb"+ + "\nb\fb\u03c4\tb\u0001b\u0001b\u0004b\u03c8\bb\u000bb\fb\u03c9\u0001c\u0001"+ + "c\u0001c\u0001c\u0001c\u0003c\u03d1\bc\u0001c\u0005c\u03d4\bc\nc\fc\u03d7"+ + "\tc\u0001c\u0001c\u0004c\u03db\bc\u000bc\fc\u03dc\u0001d\u0001d\u0001"+ + "d\u0003d\u03e2\bd\u0001d\u0001d\u0001d\u0003d\u03e7\bd\u0001e\u0001e\u0001"+ + "e\u0004e\u03ec\be\u000be\fe\u03ed\u0001e\u0001e\u0004e\u03f2\be\u000b"+ + "e\fe\u03f3\u0003e\u03f6\be\u0001f\u0004f\u03f9\bf\u000bf\ff\u03fa\u0001"+ + "g\u0001g\u0001g\u0001g\u0001g\u0003g\u0402\bg\u0001g\u0004g\u0405\bg\u000b"+ + "g\fg\u0406\u0001h\u0001h\u0001i\u0001i\u0001j\u0001j\u0001k\u0001k\u0005"+ + "k\u0411\bk\nk\fk\u0414\tk\u0001k\u0001k\u0001l\u0001l\u0001m\u0001m\u0001"+ + "n\u0001n\u0001n\u0001n\u0005n\u0420\bn\nn\fn\u0423\tn\u0001n\u0001n\u0003"+ + "n\u0427\bn\u0001n\u0001n\u0003n\u042b\bn\u0003n\u042d\bn\u0001n\u0003"+ + "n\u0430\bn\u0001o\u0001o\u0001o\u0001o\u0003o\u0436\bo\u0001o\u0003o\u0439"+ + "\bo\u0001o\u0001o\u0001o\u0003o\u043e\bo\u0001o\u0003o\u0441\bo\u0001"+ + "o\u0001o\u0001p\u0004p\u0446\bp\u000bp\fp\u0447\u0001p\u0001p\u0001q\u0001"+ + "q\u0001q\u0001q\u0005q\u0450\bq\nq\fq\u0453\tq\u0001q\u0001q\u0001r\u0001"+ + "r\u0001r\u0001r\u0005r\u045b\br\nr\fr\u045e\tr\u0001r\u0001r\u0001r\u0001"+ + "r\u0001r\u0001s\u0001s\u0001s\u0001s\u0001s\u0001s\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0003t\u06ca\bt\u0001u\u0001u\u0001v\u0001"+ + "v\u0001w\u0001w\u0001x\u0001x\u0001y\u0001y\u0001z\u0001z\u0001{\u0001"+ + "{\u0001|\u0001|\u0001}\u0001}\u0001}\u0001~\u0001~\u0001~\u0001\u007f"+ + "\u0001\u007f\u0001\u0080\u0001\u0080\u0001\u0081\u0001\u0081\u0001\u0082"+ + "\u0001\u0082\u0001\u0083\u0001\u0083\u0001\u0084\u0001\u0084\u0001\u0085"+ + "\u0001\u0085\u0001\u0085\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0087"+ + "\u0001\u0087\u0003\u0087\u06f6\b\u0087\u0001\u0088\u0001\u0088\u0001\u0088"+ + "\u0003\u0088\u06fb\b\u0088\u0001\u0089\u0001\u0089\u0005\u0089\u06ff\b"+ + "\u0089\n\u0089\f\u0089\u0702\t\u0089\u0001\u0089\u0001\u0089\u0004\u0089"+ + "\u0706\b\u0089\u000b\u0089\f\u0089\u0707\u0001\u008a\u0005\u008a\u070b"+ + "\b\u008a\n\u008a\f\u008a\u070e\t\u008a\u0001\u008a\u0001\u008a\u0004\u008a"+ + "\u0712\b\u008a\u000b\u008a\f\u008a\u0713\u0001\u008b\u0001\u008b\u0005"+ + "\u008b\u0718\b\u008b\n\u008b\f\u008b\u071b\t\u008b\u0001\u008b\u0001\u008b"+ + "\u0004\u008b\u071f\b\u008b\u000b\u008b\f\u008b\u0720\u0001\u008c\u0001"+ + "\u008c\u0001\u008c\u0003\u008c\u0726\b\u008c\u0001\u008d\u0001\u008d\u0004"+ + "\u008d\u072a\b\u008d\u000b\u008d\f\u008d\u072b\u0001\u008e\u0004\u008e"+ + "\u072f\b\u008e\u000b\u008e\f\u008e\u0730\u0001\u008f\u0001\u008f\u0004"+ + "\u008f\u0735\b\u008f\u000b\u008f\f\u008f\u0736\u0001\u0090\u0001\u0090"+ + "\u0001\u0091\u0001\u0091\u0001\u0092\u0001\u0092\u0001\u0093\u0001\u0093"+ + "\u0001\u0093\u0001\u0093\u0003\u0093\u0743\b\u0093\u0001\u0093\u0001\u0093"+ + "\u0001\u0094\u0001\u0094\u0004\u0094\u0749\b\u0094\u000b\u0094\f\u0094"+ + "\u074a\u0001\u0095\u0001\u0095\u0005\u0095\u074f\b\u0095\n\u0095\f\u0095"+ + "\u0752\t\u0095\u0001\u0096\u0001\u0096\u0005\u0096\u0756\b\u0096\n\u0096"+ + "\f\u0096\u0759\t\u0096\u0001\u0097\u0001\u0097\u0001\u0098\u0001\u0098"+ + "\u0001\u0099\u0001\u0099\u0001\u0099\u0001\u009a\u0004\u009a\u0763\b\u009a"+ + "\u000b\u009a\f\u009a\u0764\u0001\u009a\u0001\u009a\u0001\u009b\u0001\u009b"+ + "\u0001\u009b\u0001\u009b\u0005\u009b\u076d\b\u009b\n\u009b\f\u009b\u0770"+ + "\t\u009b\u0001\u009b\u0001\u009b\u0001\u009c\u0001\u009c\u0001\u009c\u0001"+ + "\u009c\u0005\u009c\u0778\b\u009c\n\u009c\f\u009c\u077b\t\u009c\u0001\u009c"+ + "\u0001\u009c\u0001\u009c\u0001\u009c\u0001\u009c\u0001\u009d\u0001\u009d"+ + "\u0004\u009d\u0784\b\u009d\u000b\u009d\f\u009d\u0785\u0001\u009d\u0001"+ + "\u009d\u0001\u009d\u0001\u009e\u0001\u009e\u0001\u009e\u0001\u009e\u0005"+ + "\u009e\u078f\b\u009e\n\u009e\f\u009e\u0792\t\u009e\u0001\u009e\u0001\u009e"+ + "\u0001\u009e\u0001\u009f\u0004\u009f\u0798\b\u009f\u000b\u009f\f\u009f"+ + "\u0799\u0001\u009f\u0001\u009f\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001"+ + "\u00a0\u0005\u00a0\u07a2\b\u00a0\n\u00a0\f\u00a0\u07a5\t\u00a0\u0001\u00a0"+ + "\u0001\u00a0\u0001\u00a1\u0001\u00a1\u0001\u00a1\u0001\u00a1\u0005\u00a1"+ + "\u07ad\b\u00a1\n\u00a1\f\u00a1\u07b0\t\u00a1\u0001\u00a1\u0001\u00a1\u0001"+ + "\u00a1\u0001\u00a1\u0001\u00a1\u0004\u0337\u045c\u0779\u07ae\u0000\u00a2"+ + "\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006\r\u0007\u000f"+ + "\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b\u000e\u001d\u000f"+ + "\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015+\u0016-\u0017/\u0018"+ + "1\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\"E#G$I%K&M\'O("+ + "Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6m7o8q9s:u;w}?\u007f@\u0081A\u0083B\u0085"+ + "C\u0087D\u0089E\u008bF\u008dG\u008fH\u0091I\u0093J\u0095K\u0097L\u0099"+ + "M\u009bN\u009dO\u009fP\u00a1Q\u00a3R\u00a5S\u00a7T\u00a9U\u00abV\u00ad"+ + "W\u00afX\u00b1Y\u00b3Z\u00b5[\u00b7\\\u00b9]\u00bb^\u00bd_\u00bf`\u00c1"+ + "a\u00c3b\u00c5c\u00c7d\u00c9e\u00cbf\u00cdg\u00cfh\u00d1i\u00d3\u0000"+ + "\u00d5\u0000\u00d7\u0000\u00d9j\u00db\u0000\u00dd\u0000\u00dfk\u00e1l"+ + "\u00e3m\u00e5n\u00e7o\u00e9p\u00ebq\u00edr\u00efs\u00f1t\u00f3u\u00f5"+ + "v\u00f7w\u00f9x\u00fby\u00fdz\u00ff{\u0101|\u0103}\u0105~\u0107\u007f"+ + "\u0109\u0080\u010b\u0081\u010d\u0082\u010f\u0083\u0111\u0084\u0113\u0085"+ + "\u0115\u0086\u0117\u0087\u0119\u0088\u011b\u0089\u011d\u008a\u011f\u008b"+ + "\u0121\u008c\u0123\u0000\u0125\u0000\u0127\u0000\u0129\u008d\u012b\u008e"+ + "\u012d\u008f\u012f\u0090\u0131\u0000\u0133\u0000\u0135\u0091\u0137\u0092"+ + "\u0139\u0093\u013b\u0094\u013d\u0095\u013f\u0096\u0141\u0097\u0143\u0098"+ + "\u0145\u0099\u0003\u0000\u0001\u0002\u0015\u0004\u0000SSUUssuu\n\u0000"+ + "BDIILLSSWWbdiillssww\u0004\u0000LLUUlluu\u0002\u0000BBbb\u0001\u00000"+ + "1\u0001\u000009\u0003\u000009AFaf\u0003\u0000AZ__az\u0004\u000009AZ__"+ + "az\u0001\u0000\"\"\u0001\u0000zz\u0003\u0000aappss\u0003\u0000aammsu\u0007"+ + "\u0000\"\"\'\'09\\\\ffnnrr\u0002\u000009af\u0001\u0000\'\'\u0004\u0000"+ + "\t\n\r\r \u00a0\u00a0\u0002\u0000\n\n\r\r\u0005\u0000\"\"\'\'ffnnrr\u0002"+ + "\u0000++--\u0005\u0000-9AZ\\\\__az\u08bb\u0000\u0003\u0001\u0000\u0000"+ + "\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000\u0000"+ + "\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000\u0000\u0000"+ + "\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000\u0000\u0000"+ + "\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000\u0000\u0000"+ + "\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000\u0000\u0000"+ + "\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000\u0000\u0000\u0000"+ + "\u001d\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000\u0000\u0000\u0000"+ + "!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000\u0000%\u0001"+ + "\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000)\u0001\u0000"+ + "\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001\u0000\u0000\u0000"+ + "\u0000/\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0000\u00003"+ + "\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001\u0000"+ + "\u0000\u0000\u00009\u0001\u0000\u0000\u0000\u0000;\u0001\u0000\u0000\u0000"+ + "\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000\u0000\u0000A"+ + "\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000E\u0001\u0000"+ + "\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001\u0000\u0000\u0000"+ + "\u0000K\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000\u0000\u0000O"+ + "\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000\u0000S\u0001\u0000"+ + "\u0000\u0000\u0000U\u0001\u0000\u0000\u0000\u0000W\u0001\u0000\u0000\u0000"+ + "\u0000Y\u0001\u0000\u0000\u0000\u0000[\u0001\u0000\u0000\u0000\u0000]"+ + "\u0001\u0000\u0000\u0000\u0000_\u0001\u0000\u0000\u0000\u0000a\u0001\u0000"+ + "\u0000\u0000\u0000c\u0001\u0000\u0000\u0000\u0000e\u0001\u0000\u0000\u0000"+ + "\u0000g\u0001\u0000\u0000\u0000\u0000i\u0001\u0000\u0000\u0000\u0000k"+ + "\u0001\u0000\u0000\u0000\u0000m\u0001\u0000\u0000\u0000\u0000o\u0001\u0000"+ + "\u0000\u0000\u0000q\u0001\u0000\u0000\u0000\u0000s\u0001\u0000\u0000\u0000"+ + "\u0000u\u0001\u0000\u0000\u0000\u0000w\u0001\u0000\u0000\u0000\u0000y"+ + "\u0001\u0000\u0000\u0000\u0000{\u0001\u0000\u0000\u0000\u0000}\u0001\u0000"+ + "\u0000\u0000\u0000\u007f\u0001\u0000\u0000\u0000\u0000\u0081\u0001\u0000"+ + "\u0000\u0000\u0000\u0083\u0001\u0000\u0000\u0000\u0000\u0085\u0001\u0000"+ + "\u0000\u0000\u0000\u0087\u0001\u0000\u0000\u0000\u0000\u0089\u0001\u0000"+ + "\u0000\u0000\u0000\u008b\u0001\u0000\u0000\u0000\u0000\u008d\u0001\u0000"+ + "\u0000\u0000\u0000\u008f\u0001\u0000\u0000\u0000\u0000\u0091\u0001\u0000"+ + "\u0000\u0000\u0000\u0093\u0001\u0000\u0000\u0000\u0000\u0095\u0001\u0000"+ + "\u0000\u0000\u0000\u0097\u0001\u0000\u0000\u0000\u0000\u0099\u0001\u0000"+ + "\u0000\u0000\u0000\u009b\u0001\u0000\u0000\u0000\u0000\u009d\u0001\u0000"+ + "\u0000\u0000\u0000\u009f\u0001\u0000\u0000\u0000\u0000\u00a1\u0001\u0000"+ + "\u0000\u0000\u0000\u00a3\u0001\u0000\u0000\u0000\u0000\u00a5\u0001\u0000"+ + "\u0000\u0000\u0000\u00a7\u0001\u0000\u0000\u0000\u0000\u00a9\u0001\u0000"+ + "\u0000\u0000\u0000\u00ab\u0001\u0000\u0000\u0000\u0000\u00ad\u0001\u0000"+ + "\u0000\u0000\u0000\u00af\u0001\u0000\u0000\u0000\u0000\u00b1\u0001\u0000"+ + "\u0000\u0000\u0000\u00b3\u0001\u0000\u0000\u0000\u0000\u00b5\u0001\u0000"+ + "\u0000\u0000\u0000\u00b7\u0001\u0000\u0000\u0000\u0000\u00b9\u0001\u0000"+ + "\u0000\u0000\u0000\u00bb\u0001\u0000\u0000\u0000\u0000\u00bd\u0001\u0000"+ + "\u0000\u0000\u0000\u00bf\u0001\u0000\u0000\u0000\u0000\u00c1\u0001\u0000"+ + "\u0000\u0000\u0000\u00c3\u0001\u0000\u0000\u0000\u0000\u00c5\u0001\u0000"+ + "\u0000\u0000\u0000\u00c7\u0001\u0000\u0000\u0000\u0000\u00c9\u0001\u0000"+ + "\u0000\u0000\u0000\u00cb\u0001\u0000\u0000\u0000\u0000\u00cd\u0001\u0000"+ + "\u0000\u0000\u0000\u00cf\u0001\u0000\u0000\u0000\u0000\u00d1\u0001\u0000"+ + "\u0000\u0000\u0000\u00d9\u0001\u0000\u0000\u0000\u0000\u00df\u0001\u0000"+ + "\u0000\u0000\u0000\u00e1\u0001\u0000\u0000\u0000\u0000\u00e3\u0001\u0000"+ + "\u0000\u0000\u0000\u00e5\u0001\u0000\u0000\u0000\u0000\u00e7\u0001\u0000"+ + "\u0000\u0000\u0001\u00e9\u0001\u0000\u0000\u0000\u0001\u00eb\u0001\u0000"+ + "\u0000\u0000\u0001\u00ed\u0001\u0000\u0000\u0000\u0001\u00ef\u0001\u0000"+ + "\u0000\u0000\u0001\u00f1\u0001\u0000\u0000\u0000\u0001\u00f3\u0001\u0000"+ + "\u0000\u0000\u0001\u00f5\u0001\u0000\u0000\u0000\u0001\u00f7\u0001\u0000"+ + "\u0000\u0000\u0001\u00f9\u0001\u0000\u0000\u0000\u0001\u00fb\u0001\u0000"+ + "\u0000\u0000\u0001\u00fd\u0001\u0000\u0000\u0000\u0001\u00ff\u0001\u0000"+ + "\u0000\u0000\u0001\u0101\u0001\u0000\u0000\u0000\u0001\u0103\u0001\u0000"+ + "\u0000\u0000\u0001\u0105\u0001\u0000\u0000\u0000\u0001\u0107\u0001\u0000"+ + "\u0000\u0000\u0001\u0109\u0001\u0000\u0000\u0000\u0001\u010b\u0001\u0000"+ + "\u0000\u0000\u0001\u010d\u0001\u0000\u0000\u0000\u0001\u010f\u0001\u0000"+ + "\u0000\u0000\u0001\u0111\u0001\u0000\u0000\u0000\u0001\u0113\u0001\u0000"+ + "\u0000\u0000\u0001\u0115\u0001\u0000\u0000\u0000\u0001\u0117\u0001\u0000"+ + "\u0000\u0000\u0001\u0119\u0001\u0000\u0000\u0000\u0001\u011b\u0001\u0000"+ + "\u0000\u0000\u0001\u011d\u0001\u0000\u0000\u0000\u0001\u011f\u0001\u0000"+ + "\u0000\u0000\u0001\u0121\u0001\u0000\u0000\u0000\u0001\u0129\u0001\u0000"+ + "\u0000\u0000\u0001\u012b\u0001\u0000\u0000\u0000\u0001\u012d\u0001\u0000"+ + "\u0000\u0000\u0001\u012f\u0001\u0000\u0000\u0000\u0001\u0135\u0001\u0000"+ + "\u0000\u0000\u0001\u0137\u0001\u0000\u0000\u0000\u0001\u0139\u0001\u0000"+ + "\u0000\u0000\u0001\u013b\u0001\u0000\u0000\u0000\u0002\u013d\u0001\u0000"+ + "\u0000\u0000\u0002\u013f\u0001\u0000\u0000\u0000\u0002\u0141\u0001\u0000"+ + "\u0000\u0000\u0002\u0143\u0001\u0000\u0000\u0000\u0002\u0145\u0001\u0000"+ + "\u0000\u0000\u0003\u0147\u0001\u0000\u0000\u0000\u0005\u014a\u0001\u0000"+ + "\u0000\u0000\u0007\u014c\u0001\u0000\u0000\u0000\t\u014e\u0001\u0000\u0000"+ + "\u0000\u000b\u0150\u0001\u0000\u0000\u0000\r\u0152\u0001\u0000\u0000\u0000"+ + "\u000f\u0154\u0001\u0000\u0000\u0000\u0011\u0156\u0001\u0000\u0000\u0000"+ + "\u0013\u0158\u0001\u0000\u0000\u0000\u0015\u015a\u0001\u0000\u0000\u0000"+ + "\u0017\u015d\u0001\u0000\u0000\u0000\u0019\u0161\u0001\u0000\u0000\u0000"+ + "\u001b\u0163\u0001\u0000\u0000\u0000\u001d\u0165\u0001\u0000\u0000\u0000"+ + "\u001f\u0168\u0001\u0000\u0000\u0000!\u016a\u0001\u0000\u0000\u0000#\u016c"+ + "\u0001\u0000\u0000\u0000%\u016e\u0001\u0000\u0000\u0000\'\u0170\u0001"+ + "\u0000\u0000\u0000)\u0172\u0001\u0000\u0000\u0000+\u0175\u0001\u0000\u0000"+ + "\u0000-\u0178\u0001\u0000\u0000\u0000/\u017a\u0001\u0000\u0000\u00001"+ + "\u017c\u0001\u0000\u0000\u00003\u017e\u0001\u0000\u0000\u00005\u0180\u0001"+ + "\u0000\u0000\u00007\u0183\u0001\u0000\u0000\u00009\u0186\u0001\u0000\u0000"+ + "\u0000;\u0189\u0001\u0000\u0000\u0000=\u018c\u0001\u0000\u0000\u0000?"+ + "\u018e\u0001\u0000\u0000\u0000A\u0191\u0001\u0000\u0000\u0000C\u0194\u0001"+ + "\u0000\u0000\u0000E\u0196\u0001\u0000\u0000\u0000G\u0199\u0001\u0000\u0000"+ + "\u0000I\u019c\u0001\u0000\u0000\u0000K\u01b4\u0001\u0000\u0000\u0000M"+ + "\u01b6\u0001\u0000\u0000\u0000O\u01be\u0001\u0000\u0000\u0000Q\u01c4\u0001"+ + "\u0000\u0000\u0000S\u01cb\u0001\u0000\u0000\u0000U\u01d4\u0001\u0000\u0000"+ + "\u0000W\u01dc\u0001\u0000\u0000\u0000Y\u01e3\u0001\u0000\u0000\u0000["+ + "\u01ec\u0001\u0000\u0000\u0000]\u01f3\u0001\u0000\u0000\u0000_\u01ff\u0001"+ + "\u0000\u0000\u0000a\u0208\u0001\u0000\u0000\u0000c\u0215\u0001\u0000\u0000"+ + "\u0000e\u021f\u0001\u0000\u0000\u0000g\u0224\u0001\u0000\u0000\u0000i"+ + "\u022a\u0001\u0000\u0000\u0000k\u0230\u0001\u0000\u0000\u0000m\u0236\u0001"+ + "\u0000\u0000\u0000o\u023b\u0001\u0000\u0000\u0000q\u0273\u0001\u0000\u0000"+ + "\u0000s\u0275\u0001\u0000\u0000\u0000u\u0278\u0001\u0000\u0000\u0000w"+ + "\u027d\u0001\u0000\u0000\u0000y\u0283\u0001\u0000\u0000\u0000{\u0286\u0001"+ + "\u0000\u0000\u0000}\u028a\u0001\u0000\u0000\u0000\u007f\u0291\u0001\u0000"+ + "\u0000\u0000\u0081\u0298\u0001\u0000\u0000\u0000\u0083\u029e\u0001\u0000"+ + "\u0000\u0000\u0085\u02a7\u0001\u0000\u0000\u0000\u0087\u02ac\u0001\u0000"+ + "\u0000\u0000\u0089\u02b2\u0001\u0000\u0000\u0000\u008b\u02ba\u0001\u0000"+ + "\u0000\u0000\u008d\u02bf\u0001\u0000\u0000\u0000\u008f\u02c6\u0001\u0000"+ + "\u0000\u0000\u0091\u02cc\u0001\u0000\u0000\u0000\u0093\u02d1\u0001\u0000"+ + "\u0000\u0000\u0095\u02d8\u0001\u0000\u0000\u0000\u0097\u02df\u0001\u0000"+ + "\u0000\u0000\u0099\u02e7\u0001\u0000\u0000\u0000\u009b\u02ef\u0001\u0000"+ + "\u0000\u0000\u009d\u0324\u0001\u0000\u0000\u0000\u009f\u032f\u0001\u0000"+ + "\u0000\u0000\u00a1\u0331\u0001\u0000\u0000\u0000\u00a3\u033d\u0001\u0000"+ + "\u0000\u0000\u00a5\u0347\u0001\u0000\u0000\u0000\u00a7\u0352\u0001\u0000"+ + "\u0000\u0000\u00a9\u035a\u0001\u0000\u0000\u0000\u00ab\u0367\u0001\u0000"+ + "\u0000\u0000\u00ad\u0369\u0001\u0000\u0000\u0000\u00af\u0370\u0001\u0000"+ + "\u0000\u0000\u00b1\u0377\u0001\u0000\u0000\u0000\u00b3\u037f\u0001\u0000"+ + "\u0000\u0000\u00b5\u0383\u0001\u0000\u0000\u0000\u00b7\u0389\u0001\u0000"+ + "\u0000\u0000\u00b9\u038f\u0001\u0000\u0000\u0000\u00bb\u0396\u0001\u0000"+ + "\u0000\u0000\u00bd\u039d\u0001\u0000\u0000\u0000\u00bf\u03a0\u0001\u0000"+ + "\u0000\u0000\u00c1\u03a5\u0001\u0000\u0000\u0000\u00c3\u03aa\u0001\u0000"+ + "\u0000\u0000\u00c5\u03b1\u0001\u0000\u0000\u0000\u00c7\u03c2\u0001\u0000"+ + "\u0000\u0000\u00c9\u03d0\u0001\u0000\u0000\u0000\u00cb\u03e1\u0001\u0000"+ + "\u0000\u0000\u00cd\u03f5\u0001\u0000\u0000\u0000\u00cf\u03f8\u0001\u0000"+ + "\u0000\u0000\u00d1\u0401\u0001\u0000\u0000\u0000\u00d3\u0408\u0001\u0000"+ + "\u0000\u0000\u00d5\u040a\u0001\u0000\u0000\u0000\u00d7\u040c\u0001\u0000"+ + "\u0000\u0000\u00d9\u040e\u0001\u0000\u0000\u0000\u00db\u0417\u0001\u0000"+ + "\u0000\u0000\u00dd\u0419\u0001\u0000\u0000\u0000\u00df\u041b\u0001\u0000"+ + "\u0000\u0000\u00e1\u0431\u0001\u0000\u0000\u0000\u00e3\u0445\u0001\u0000"+ + "\u0000\u0000\u00e5\u044b\u0001\u0000\u0000\u0000\u00e7\u0456\u0001\u0000"+ + "\u0000\u0000\u00e9\u0464\u0001\u0000\u0000\u0000\u00eb\u06c9\u0001\u0000"+ + "\u0000\u0000\u00ed\u06cb\u0001\u0000\u0000\u0000\u00ef\u06cd\u0001\u0000"+ + "\u0000\u0000\u00f1\u06cf\u0001\u0000\u0000\u0000\u00f3\u06d1\u0001\u0000"+ + "\u0000\u0000\u00f5\u06d3\u0001\u0000\u0000\u0000\u00f7\u06d5\u0001\u0000"+ + "\u0000\u0000\u00f9\u06d7\u0001\u0000\u0000\u0000\u00fb\u06d9\u0001\u0000"+ + "\u0000\u0000\u00fd\u06db\u0001\u0000\u0000\u0000\u00ff\u06de\u0001\u0000"+ + "\u0000\u0000\u0101\u06e1\u0001\u0000\u0000\u0000\u0103\u06e3\u0001\u0000"+ + "\u0000\u0000\u0105\u06e5\u0001\u0000\u0000\u0000\u0107\u06e7\u0001\u0000"+ + "\u0000\u0000\u0109\u06e9\u0001\u0000\u0000\u0000\u010b\u06eb\u0001\u0000"+ + "\u0000\u0000\u010d\u06ed\u0001\u0000\u0000\u0000\u010f\u06f0\u0001\u0000"+ + "\u0000\u0000\u0111\u06f5\u0001\u0000\u0000\u0000\u0113\u06fa\u0001\u0000"+ + "\u0000\u0000\u0115\u06fc\u0001\u0000\u0000\u0000\u0117\u070c\u0001\u0000"+ + "\u0000\u0000\u0119\u0715\u0001\u0000\u0000\u0000\u011b\u0725\u0001\u0000"+ + "\u0000\u0000\u011d\u0727\u0001\u0000\u0000\u0000\u011f\u072e\u0001\u0000"+ + "\u0000\u0000\u0121\u0732\u0001\u0000\u0000\u0000\u0123\u0738\u0001\u0000"+ + "\u0000\u0000\u0125\u073a\u0001\u0000\u0000\u0000\u0127\u073c\u0001\u0000"+ + "\u0000\u0000\u0129\u073e\u0001\u0000\u0000\u0000\u012b\u0746\u0001\u0000"+ + "\u0000\u0000\u012d\u074c\u0001\u0000\u0000\u0000\u012f\u0753\u0001\u0000"+ + "\u0000\u0000\u0131\u075a\u0001\u0000\u0000\u0000\u0133\u075c\u0001\u0000"+ + "\u0000\u0000\u0135\u075e\u0001\u0000\u0000\u0000\u0137\u0762\u0001\u0000"+ + "\u0000\u0000\u0139\u0768\u0001\u0000\u0000\u0000\u013b\u0773\u0001\u0000"+ + "\u0000\u0000\u013d\u0781\u0001\u0000\u0000\u0000\u013f\u078a\u0001\u0000"+ + "\u0000\u0000\u0141\u0797\u0001\u0000\u0000\u0000\u0143\u079d\u0001\u0000"+ + "\u0000\u0000\u0145\u07a8\u0001\u0000\u0000\u0000\u0147\u0148\u0005{\u0000"+ + "\u0000\u0148\u0149\u0006\u0000\u0000\u0000\u0149\u0004\u0001\u0000\u0000"+ + "\u0000\u014a\u014b\u0005}\u0000\u0000\u014b\u0006\u0001\u0000\u0000\u0000"+ + "\u014c\u014d\u0005[\u0000\u0000\u014d\b\u0001\u0000\u0000\u0000\u014e"+ + "\u014f\u0005]\u0000\u0000\u014f\n\u0001\u0000\u0000\u0000\u0150\u0151"+ + "\u0005(\u0000\u0000\u0151\f\u0001\u0000\u0000\u0000\u0152\u0153\u0005"+ + ")\u0000\u0000\u0153\u000e\u0001\u0000\u0000\u0000\u0154\u0155\u0005;\u0000"+ + "\u0000\u0155\u0010\u0001\u0000\u0000\u0000\u0156\u0157\u0005:\u0000\u0000"+ + "\u0157\u0012\u0001\u0000\u0000\u0000\u0158\u0159\u0005,\u0000\u0000\u0159"+ + "\u0014\u0001\u0000\u0000\u0000\u015a\u015b\u0005.\u0000\u0000\u015b\u015c"+ + "\u0005.\u0000\u0000\u015c\u0016\u0001\u0000\u0000\u0000\u015d\u015e\u0005"+ + ".\u0000\u0000\u015e\u015f\u0005.\u0000\u0000\u015f\u0160\u0005.\u0000"+ + "\u0000\u0160\u0018\u0001\u0000\u0000\u0000\u0161\u0162\u0005?\u0000\u0000"+ + "\u0162\u001a\u0001\u0000\u0000\u0000\u0163\u0164\u0005.\u0000\u0000\u0164"+ + "\u001c\u0001\u0000\u0000\u0000\u0165\u0166\u0005-\u0000\u0000\u0166\u0167"+ + "\u0005>\u0000\u0000\u0167\u001e\u0001\u0000\u0000\u0000\u0168\u0169\u0005"+ + "+\u0000\u0000\u0169 \u0001\u0000\u0000\u0000\u016a\u016b\u0005-\u0000"+ + "\u0000\u016b\"\u0001\u0000\u0000\u0000\u016c\u016d\u0005*\u0000\u0000"+ + "\u016d$\u0001\u0000\u0000\u0000\u016e\u016f\u0005/\u0000\u0000\u016f&"+ + "\u0001\u0000\u0000\u0000\u0170\u0171\u0005%\u0000\u0000\u0171(\u0001\u0000"+ + "\u0000\u0000\u0172\u0173\u0005+\u0000\u0000\u0173\u0174\u0005+\u0000\u0000"+ + "\u0174*\u0001\u0000\u0000\u0000\u0175\u0176\u0005-\u0000\u0000\u0176\u0177"+ + "\u0005-\u0000\u0000\u0177,\u0001\u0000\u0000\u0000\u0178\u0179\u0005&"+ + "\u0000\u0000\u0179.\u0001\u0000\u0000\u0000\u017a\u017b\u0005~\u0000\u0000"+ + "\u017b0\u0001\u0000\u0000\u0000\u017c\u017d\u0005^\u0000\u0000\u017d2"+ + "\u0001\u0000\u0000\u0000\u017e\u017f\u0005|\u0000\u0000\u017f4\u0001\u0000"+ + "\u0000\u0000\u0180\u0181\u0005<\u0000\u0000\u0181\u0182\u0005<\u0000\u0000"+ + "\u01826\u0001\u0000\u0000\u0000\u0183\u0184\u0005>\u0000\u0000\u0184\u0185"+ + "\u0005>\u0000\u0000\u01858\u0001\u0000\u0000\u0000\u0186\u0187\u0005="+ + "\u0000\u0000\u0187\u0188\u0005=\u0000\u0000\u0188:\u0001\u0000\u0000\u0000"+ + "\u0189\u018a\u0005!\u0000\u0000\u018a\u018b\u0005=\u0000\u0000\u018b<"+ + "\u0001\u0000\u0000\u0000\u018c\u018d\u0005<\u0000\u0000\u018d>\u0001\u0000"+ + "\u0000\u0000\u018e\u018f\u0005<\u0000\u0000\u018f\u0190\u0005=\u0000\u0000"+ + "\u0190@\u0001\u0000\u0000\u0000\u0191\u0192\u0005>\u0000\u0000\u0192\u0193"+ + "\u0005=\u0000\u0000\u0193B\u0001\u0000\u0000\u0000\u0194\u0195\u0005>"+ + "\u0000\u0000\u0195D\u0001\u0000\u0000\u0000\u0196\u0197\u0005&\u0000\u0000"+ + "\u0197\u0198\u0005&\u0000\u0000\u0198F\u0001\u0000\u0000\u0000\u0199\u019a"+ + "\u0005|\u0000\u0000\u019a\u019b\u0005|\u0000\u0000\u019bH\u0001\u0000"+ + "\u0000\u0000\u019c\u019d\u0005=\u0000\u0000\u019dJ\u0001\u0000\u0000\u0000"+ + "\u019e\u019f\u0005+\u0000\u0000\u019f\u01b5\u0005=\u0000\u0000\u01a0\u01a1"+ + "\u0005-\u0000\u0000\u01a1\u01b5\u0005=\u0000\u0000\u01a2\u01a3\u0005*"+ + "\u0000\u0000\u01a3\u01b5\u0005=\u0000\u0000\u01a4\u01a5\u0005/\u0000\u0000"+ + "\u01a5\u01b5\u0005=\u0000\u0000\u01a6\u01a7\u0005%\u0000\u0000\u01a7\u01b5"+ + "\u0005=\u0000\u0000\u01a8\u01a9\u0005<\u0000\u0000\u01a9\u01aa\u0005<"+ + "\u0000\u0000\u01aa\u01b5\u0005=\u0000\u0000\u01ab\u01ac\u0005>\u0000\u0000"+ + "\u01ac\u01ad\u0005>\u0000\u0000\u01ad\u01b5\u0005=\u0000\u0000\u01ae\u01af"+ + "\u0005&\u0000\u0000\u01af\u01b5\u0005=\u0000\u0000\u01b0\u01b1\u0005|"+ + "\u0000\u0000\u01b1\u01b5\u0005=\u0000\u0000\u01b2\u01b3\u0005^\u0000\u0000"+ + "\u01b3\u01b5\u0005=\u0000\u0000\u01b4\u019e\u0001\u0000\u0000\u0000\u01b4"+ + "\u01a0\u0001\u0000\u0000\u0000\u01b4\u01a2\u0001\u0000\u0000\u0000\u01b4"+ + "\u01a4\u0001\u0000\u0000\u0000\u01b4\u01a6\u0001\u0000\u0000\u0000\u01b4"+ + "\u01a8\u0001\u0000\u0000\u0000\u01b4\u01ab\u0001\u0000\u0000\u0000\u01b4"+ + "\u01ae\u0001\u0000\u0000\u0000\u01b4\u01b0\u0001\u0000\u0000\u0000\u01b4"+ + "\u01b2\u0001\u0000\u0000\u0000\u01b5L\u0001\u0000\u0000\u0000\u01b6\u01b7"+ + "\u0005t\u0000\u0000\u01b7\u01b8\u0005y\u0000\u0000\u01b8\u01b9\u0005p"+ + "\u0000\u0000\u01b9\u01ba\u0005e\u0000\u0000\u01ba\u01bb\u0005d\u0000\u0000"+ + "\u01bb\u01bc\u0005e\u0000\u0000\u01bc\u01bd\u0005f\u0000\u0000\u01bdN"+ + "\u0001\u0000\u0000\u0000\u01be\u01bf\u0005c\u0000\u0000\u01bf\u01c0\u0005"+ + "o\u0000\u0000\u01c0\u01c1\u0005n\u0000\u0000\u01c1\u01c2\u0005s\u0000"+ + "\u0000\u01c2\u01c3\u0005t\u0000\u0000\u01c3P\u0001\u0000\u0000\u0000\u01c4"+ + "\u01c5\u0005e\u0000\u0000\u01c5\u01c6\u0005x\u0000\u0000\u01c6\u01c7\u0005"+ + "t\u0000\u0000\u01c7\u01c8\u0005e\u0000\u0000\u01c8\u01c9\u0005r\u0000"+ + "\u0000\u01c9\u01ca\u0005n\u0000\u0000\u01caR\u0001\u0000\u0000\u0000\u01cb"+ + "\u01cc\u0005_\u0000\u0000\u01cc\u01cd\u0005_\u0000\u0000\u01cd\u01ce\u0005"+ + "e\u0000\u0000\u01ce\u01cf\u0005x\u0000\u0000\u01cf\u01d0\u0005p\u0000"+ + "\u0000\u01d0\u01d1\u0005o\u0000\u0000\u01d1\u01d2\u0005r\u0000\u0000\u01d2"+ + "\u01d3\u0005t\u0000\u0000\u01d3T\u0001\u0000\u0000\u0000\u01d4\u01d5\u0005"+ + "_\u0000\u0000\u01d5\u01d6\u0005_\u0000\u0000\u01d6\u01d7\u0005a\u0000"+ + "\u0000\u01d7\u01d8\u0005l\u0000\u0000\u01d8\u01d9\u0005i\u0000\u0000\u01d9"+ + "\u01da\u0005g\u0000\u0000\u01da\u01db\u0005n\u0000\u0000\u01dbV\u0001"+ + "\u0000\u0000\u0000\u01dc\u01dd\u0005i\u0000\u0000\u01dd\u01de\u0005n\u0000"+ + "\u0000\u01de\u01df\u0005l\u0000\u0000\u01df\u01e0\u0005i\u0000\u0000\u01e0"+ + "\u01e1\u0005n\u0000\u0000\u01e1\u01e2\u0005e\u0000\u0000\u01e2X\u0001"+ + "\u0000\u0000\u0000\u01e3\u01e4\u0005v\u0000\u0000\u01e4\u01e5\u0005o\u0000"+ + "\u0000\u01e5\u01e6\u0005l\u0000\u0000\u01e6\u01e7\u0005a\u0000\u0000\u01e7"+ + "\u01e8\u0005t\u0000\u0000\u01e8\u01e9\u0005i\u0000\u0000\u01e9\u01ea\u0005"+ + "l\u0000\u0000\u01ea\u01eb\u0005e\u0000\u0000\u01ebZ\u0001\u0000\u0000"+ + "\u0000\u01ec\u01ed\u0005s\u0000\u0000\u01ed\u01ee\u0005t\u0000\u0000\u01ee"+ + "\u01ef\u0005a\u0000\u0000\u01ef\u01f0\u0005t\u0000\u0000\u01f0\u01f1\u0005"+ + "i\u0000\u0000\u01f1\u01f2\u0005c\u0000\u0000\u01f2\\\u0001\u0000\u0000"+ + "\u0000\u01f3\u01f4\u0005_\u0000\u0000\u01f4\u01f5\u0005_\u0000\u0000\u01f5"+ + "\u01f6\u0005i\u0000\u0000\u01f6\u01f7\u0005n\u0000\u0000\u01f7\u01f8\u0005"+ + "t\u0000\u0000\u01f8\u01f9\u0005e\u0000\u0000\u01f9\u01fa\u0005r\u0000"+ + "\u0000\u01fa\u01fb\u0005r\u0000\u0000\u01fb\u01fc\u0005u\u0000\u0000\u01fc"+ + "\u01fd\u0005p\u0000\u0000\u01fd\u01fe\u0005t\u0000\u0000\u01fe^\u0001"+ + "\u0000\u0000\u0000\u01ff\u0200\u0005r\u0000\u0000\u0200\u0201\u0005e\u0000"+ + "\u0000\u0201\u0202\u0005g\u0000\u0000\u0202\u0203\u0005i\u0000\u0000\u0203"+ + "\u0204\u0005s\u0000\u0000\u0204\u0205\u0005t\u0000\u0000\u0205\u0206\u0005"+ + "e\u0000\u0000\u0206\u0207\u0005r\u0000\u0000\u0207`\u0001\u0000\u0000"+ + "\u0000\u0208\u0209\u0005_\u0000\u0000\u0209\u020a\u0005_\u0000\u0000\u020a"+ + "\u020b\u0005z\u0000\u0000\u020b\u020c\u0005p\u0000\u0000\u020c\u020d\u0005"+ + "_\u0000\u0000\u020d\u020e\u0005r\u0000\u0000\u020e\u020f\u0005e\u0000"+ + "\u0000\u020f\u0210\u0005s\u0000\u0000\u0210\u0211\u0005e\u0000\u0000\u0211"+ + "\u0212\u0005r\u0000\u0000\u0212\u0213\u0005v\u0000\u0000\u0213\u0214\u0005"+ + "e\u0000\u0000\u0214b\u0001\u0000\u0000\u0000\u0215\u0216\u0005_\u0000"+ + "\u0000\u0216\u0217\u0005_\u0000\u0000\u0217\u0218\u0005a\u0000\u0000\u0218"+ + "\u0219\u0005d\u0000\u0000\u0219\u021a\u0005d\u0000\u0000\u021a\u021b\u0005"+ + "r\u0000\u0000\u021b\u021c\u0005e\u0000\u0000\u021c\u021d\u0005s\u0000"+ + "\u0000\u021d\u021e\u0005s\u0000\u0000\u021ed\u0001\u0000\u0000\u0000\u021f"+ + "\u0220\u0005_\u0000\u0000\u0220\u0221\u0005_\u0000\u0000\u0221\u0222\u0005"+ + "z\u0000\u0000\u0222\u0223\u0005p\u0000\u0000\u0223f\u0001\u0000\u0000"+ + "\u0000\u0224\u0225\u0005_\u0000\u0000\u0225\u0226\u0005_\u0000\u0000\u0226"+ + "\u0227\u0005m\u0000\u0000\u0227\u0228\u0005e\u0000\u0000\u0228\u0229\u0005"+ + "m\u0000\u0000\u0229h\u0001\u0000\u0000\u0000\u022a\u022b\u0005_\u0000"+ + "\u0000\u022b\u022c\u0005_\u0000\u0000\u022c\u022d\u0005f\u0000\u0000\u022d"+ + "\u022e\u0005a\u0000\u0000\u022e\u022f\u0005r\u0000\u0000\u022fj\u0001"+ + "\u0000\u0000\u0000\u0230\u0231\u0005_\u0000\u0000\u0231\u0232\u0005_\u0000"+ + "\u0000\u0232\u0233\u0005s\u0000\u0000\u0233\u0234\u0005s\u0000\u0000\u0234"+ + "\u0235\u0005a\u0000\u0000\u0235l\u0001\u0000\u0000\u0000\u0236\u0237\u0005"+ + "_\u0000\u0000\u0237\u0238\u0005_\u0000\u0000\u0238\u0239\u0005m\u0000"+ + "\u0000\u0239\u023a\u0005a\u0000\u0000\u023an\u0001\u0000\u0000\u0000\u023b"+ + "\u023c\u0005_\u0000\u0000\u023c\u023d\u0005_\u0000\u0000\u023d\u023e\u0005"+ + "i\u0000\u0000\u023e\u023f\u0005n\u0000\u0000\u023f\u0240\u0005t\u0000"+ + "\u0000\u0240\u0241\u0005r\u0000\u0000\u0241\u0242\u0005i\u0000\u0000\u0242"+ + "\u0243\u0005n\u0000\u0000\u0243\u0244\u0005s\u0000\u0000\u0244\u0245\u0005"+ + "i\u0000\u0000\u0245\u0246\u0005c\u0000\u0000\u0246p\u0001\u0000\u0000"+ + "\u0000\u0247\u0248\u0005_\u0000\u0000\u0248\u0249\u0005_\u0000\u0000\u0249"+ + "\u024a\u0005s\u0000\u0000\u024a\u024b\u0005t\u0000\u0000\u024b\u024c\u0005"+ + "a\u0000\u0000\u024c\u024d\u0005c\u0000\u0000\u024d\u024e\u0005k\u0000"+ + "\u0000\u024e\u024f\u0005c\u0000\u0000\u024f\u0250\u0005a\u0000\u0000\u0250"+ + "\u0251\u0005l\u0000\u0000\u0251\u0274\u0005l\u0000\u0000\u0252\u0253\u0005"+ + "_\u0000\u0000\u0253\u0254\u0005_\u0000\u0000\u0254\u0255\u0005p\u0000"+ + "\u0000\u0255\u0256\u0005h\u0000\u0000\u0256\u0257\u0005i\u0000\u0000\u0257"+ + "\u0258\u0005c\u0000\u0000\u0258\u0259\u0005a\u0000\u0000\u0259\u025a\u0005"+ + "l\u0000\u0000\u025a\u0274\u0005l\u0000\u0000\u025b\u025c\u0005_\u0000"+ + "\u0000\u025c\u025d\u0005_\u0000\u0000\u025d\u025e\u0005v\u0000\u0000\u025e"+ + "\u025f\u0005a\u0000\u0000\u025f\u0260\u0005r\u0000\u0000\u0260\u0261\u0005"+ + "c\u0000\u0000\u0261\u0262\u0005a\u0000\u0000\u0262\u0263\u0005l\u0000"+ + "\u0000\u0263\u0274\u0005l\u0000\u0000\u0264\u0265\u0005_\u0000\u0000\u0265"+ + "\u0266\u0005_\u0000\u0000\u0266\u0267\u0005i\u0000\u0000\u0267\u0268\u0005"+ + "n\u0000\u0000\u0268\u0269\u0005t\u0000\u0000\u0269\u026a\u0005r\u0000"+ + "\u0000\u026a\u026b\u0005i\u0000\u0000\u026b\u026c\u0005n\u0000\u0000\u026c"+ + "\u026d\u0005s\u0000\u0000\u026d\u026e\u0005i\u0000\u0000\u026e\u026f\u0005"+ + "c\u0000\u0000\u026f\u0270\u0005c\u0000\u0000\u0270\u0271\u0005a\u0000"+ + "\u0000\u0271\u0272\u0005l\u0000\u0000\u0272\u0274\u0005l\u0000\u0000\u0273"+ + "\u0247\u0001\u0000\u0000\u0000\u0273\u0252\u0001\u0000\u0000\u0000\u0273"+ + "\u025b\u0001\u0000\u0000\u0000\u0273\u0264\u0001\u0000\u0000\u0000\u0274"+ + "r\u0001\u0000\u0000\u0000\u0275\u0276\u0005i\u0000\u0000\u0276\u0277\u0005"+ + "f\u0000\u0000\u0277t\u0001\u0000\u0000\u0000\u0278\u0279\u0005e\u0000"+ + "\u0000\u0279\u027a\u0005l\u0000\u0000\u027a\u027b\u0005s\u0000\u0000\u027b"+ + "\u027c\u0005e\u0000\u0000\u027cv\u0001\u0000\u0000\u0000\u027d\u027e\u0005"+ + "w\u0000\u0000\u027e\u027f\u0005h\u0000\u0000\u027f\u0280\u0005i\u0000"+ + "\u0000\u0280\u0281\u0005l\u0000\u0000\u0281\u0282\u0005e\u0000\u0000\u0282"+ + "x\u0001\u0000\u0000\u0000\u0283\u0284\u0005d\u0000\u0000\u0284\u0285\u0005"+ + "o\u0000\u0000\u0285z\u0001\u0000\u0000\u0000\u0286\u0287\u0005f\u0000"+ + "\u0000\u0287\u0288\u0005o\u0000\u0000\u0288\u0289\u0005r\u0000\u0000\u0289"+ + "|\u0001\u0000\u0000\u0000\u028a\u028b\u0005s\u0000\u0000\u028b\u028c\u0005"+ + "w\u0000\u0000\u028c\u028d\u0005i\u0000\u0000\u028d\u028e\u0005t\u0000"+ + "\u0000\u028e\u028f\u0005c\u0000\u0000\u028f\u0290\u0005h\u0000\u0000\u0290"+ + "~\u0001\u0000\u0000\u0000\u0291\u0292\u0005r\u0000\u0000\u0292\u0293\u0005"+ + "e\u0000\u0000\u0293\u0294\u0005t\u0000\u0000\u0294\u0295\u0005u\u0000"+ + "\u0000\u0295\u0296\u0005r\u0000\u0000\u0296\u0297\u0005n\u0000\u0000\u0297"+ + "\u0080\u0001\u0000\u0000\u0000\u0298\u0299\u0005b\u0000\u0000\u0299\u029a"+ + "\u0005r\u0000\u0000\u029a\u029b\u0005e\u0000\u0000\u029b\u029c\u0005a"+ + "\u0000\u0000\u029c\u029d\u0005k\u0000\u0000\u029d\u0082\u0001\u0000\u0000"+ + "\u0000\u029e\u029f\u0005c\u0000\u0000\u029f\u02a0\u0005o\u0000\u0000\u02a0"+ + "\u02a1\u0005n\u0000\u0000\u02a1\u02a2\u0005t\u0000\u0000\u02a2\u02a3\u0005"+ + "i\u0000\u0000\u02a3\u02a4\u0005n\u0000\u0000\u02a4\u02a5\u0005u\u0000"+ + "\u0000\u02a5\u02a6\u0005e\u0000\u0000\u02a6\u0084\u0001\u0000\u0000\u0000"+ + "\u02a7\u02a8\u0005g\u0000\u0000\u02a8\u02a9\u0005o\u0000\u0000\u02a9\u02aa"+ + "\u0005t\u0000\u0000\u02aa\u02ab\u0005o\u0000\u0000\u02ab\u0086\u0001\u0000"+ + "\u0000\u0000\u02ac\u02ad\u0005a\u0000\u0000\u02ad\u02ae\u0005s\u0000\u0000"+ + "\u02ae\u02af\u0005m\u0000\u0000\u02af\u02b0\u0001\u0000\u0000\u0000\u02b0"+ + "\u02b1\u0006B\u0001\u0000\u02b1\u0088\u0001\u0000\u0000\u0000\u02b2\u02b3"+ + "\u0005d\u0000\u0000\u02b3\u02b4\u0005e\u0000\u0000\u02b4\u02b5\u0005f"+ + "\u0000\u0000\u02b5\u02b6\u0005a\u0000\u0000\u02b6\u02b7\u0005u\u0000\u0000"+ + "\u02b7\u02b8\u0005l\u0000\u0000\u02b8\u02b9\u0005t\u0000\u0000\u02b9\u008a"+ + "\u0001\u0000\u0000\u0000\u02ba\u02bb\u0005c\u0000\u0000\u02bb\u02bc\u0005"+ + "a\u0000\u0000\u02bc\u02bd\u0005s\u0000\u0000\u02bd\u02be\u0005e\u0000"+ + "\u0000\u02be\u008c\u0001\u0000\u0000\u0000\u02bf\u02c0\u0005s\u0000\u0000"+ + "\u02c0\u02c1\u0005t\u0000\u0000\u02c1\u02c2\u0005r\u0000\u0000\u02c2\u02c3"+ + "\u0005u\u0000\u0000\u02c3\u02c4\u0005c\u0000\u0000\u02c4\u02c5\u0005t"+ + "\u0000\u0000\u02c5\u008e\u0001\u0000\u0000\u0000\u02c6\u02c7\u0005u\u0000"+ + "\u0000\u02c7\u02c8\u0005n\u0000\u0000\u02c8\u02c9\u0005i\u0000\u0000\u02c9"+ + "\u02ca\u0005o\u0000\u0000\u02ca\u02cb\u0005n\u0000\u0000\u02cb\u0090\u0001"+ + "\u0000\u0000\u0000\u02cc\u02cd\u0005e\u0000\u0000\u02cd\u02ce\u0005n\u0000"+ + "\u0000\u02ce\u02cf\u0005u\u0000\u0000\u02cf\u02d0\u0005m\u0000\u0000\u02d0"+ + "\u0092\u0001\u0000\u0000\u0000\u02d1\u02d2\u0005s\u0000\u0000\u02d2\u02d3"+ + "\u0005i\u0000\u0000\u02d3\u02d4\u0005z\u0000\u0000\u02d4\u02d5\u0005e"+ + "\u0000\u0000\u02d5\u02d6\u0005o\u0000\u0000\u02d6\u02d7\u0005f\u0000\u0000"+ + "\u02d7\u0094\u0001\u0000\u0000\u0000\u02d8\u02d9\u0005t\u0000\u0000\u02d9"+ + "\u02da\u0005y\u0000\u0000\u02da\u02db\u0005p\u0000\u0000\u02db\u02dc\u0005"+ + "e\u0000\u0000\u02dc\u02dd\u0005i\u0000\u0000\u02dd\u02de\u0005d\u0000"+ + "\u0000\u02de\u0096\u0001\u0000\u0000\u0000\u02df\u02e0\u0005d\u0000\u0000"+ + "\u02e0\u02e1\u0005e\u0000\u0000\u02e1\u02e2\u0005f\u0000\u0000\u02e2\u02e3"+ + "\u0005i\u0000\u0000\u02e3\u02e4\u0005n\u0000\u0000\u02e4\u02e5\u0005e"+ + "\u0000\u0000\u02e5\u02e6\u0005d\u0000\u0000\u02e6\u0098\u0001\u0000\u0000"+ + "\u0000\u02e7\u02e8\u0005k\u0000\u0000\u02e8\u02e9\u0005i\u0000\u0000\u02e9"+ + "\u02ea\u0005c\u0000\u0000\u02ea\u02eb\u0005k\u0000\u0000\u02eb\u02ec\u0005"+ + "a\u0000\u0000\u02ec\u02ed\u0005s\u0000\u0000\u02ed\u02ee\u0005m\u0000"+ + "\u0000\u02ee\u009a\u0001\u0000\u0000\u0000\u02ef\u02f0\u0005!\u0000\u0000"+ + "\u02f0\u009c\u0001\u0000\u0000\u0000\u02f1\u02f2\u0005s\u0000\u0000\u02f2"+ + "\u02f3\u0005i\u0000\u0000\u02f3\u02f4\u0005g\u0000\u0000\u02f4\u02f5\u0005"+ + "n\u0000\u0000\u02f5\u02f6\u0005e\u0000\u0000\u02f6\u0325\u0005d\u0000"+ + "\u0000\u02f7\u02f8\u0005u\u0000\u0000\u02f8\u02f9\u0005n\u0000\u0000\u02f9"+ + "\u02fa\u0005s\u0000\u0000\u02fa\u02fb\u0005i\u0000\u0000\u02fb\u02fc\u0005"+ + "g\u0000\u0000\u02fc\u02fd\u0005n\u0000\u0000\u02fd\u02fe\u0005e\u0000"+ + "\u0000\u02fe\u0325\u0005d\u0000\u0000\u02ff\u0300\u0005b\u0000\u0000\u0300"+ + "\u0301\u0005y\u0000\u0000\u0301\u0302\u0005t\u0000\u0000\u0302\u0325\u0005"+ + "e\u0000\u0000\u0303\u0304\u0005w\u0000\u0000\u0304\u0305\u0005o\u0000"+ + "\u0000\u0305\u0306\u0005r\u0000\u0000\u0306\u0325\u0005d\u0000\u0000\u0307"+ + "\u0308\u0005d\u0000\u0000\u0308\u0309\u0005w\u0000\u0000\u0309\u030a\u0005"+ + "o\u0000\u0000\u030a\u030b\u0005r\u0000\u0000\u030b\u0325\u0005d\u0000"+ + "\u0000\u030c\u030d\u0005b\u0000\u0000\u030d\u030e\u0005o\u0000\u0000\u030e"+ + "\u030f\u0005o\u0000\u0000\u030f\u0325\u0005l\u0000\u0000\u0310\u0311\u0005"+ + "c\u0000\u0000\u0311\u0312\u0005h\u0000\u0000\u0312\u0313\u0005a\u0000"+ + "\u0000\u0313\u0325\u0005r\u0000\u0000\u0314\u0315\u0005s\u0000\u0000\u0315"+ + "\u0316\u0005h\u0000\u0000\u0316\u0317\u0005o\u0000\u0000\u0317\u0318\u0005"+ + "r\u0000\u0000\u0318\u0325\u0005t\u0000\u0000\u0319\u031a\u0005i\u0000"+ + "\u0000\u031a\u031b\u0005n\u0000\u0000\u031b\u0325\u0005t\u0000\u0000\u031c"+ + "\u031d\u0005l\u0000\u0000\u031d\u031e\u0005o\u0000\u0000\u031e\u031f\u0005"+ + "n\u0000\u0000\u031f\u0325\u0005g\u0000\u0000\u0320\u0321\u0005v\u0000"+ + "\u0000\u0321\u0322\u0005o\u0000\u0000\u0322\u0323\u0005i\u0000\u0000\u0323"+ + "\u0325\u0005d\u0000\u0000\u0324\u02f1\u0001\u0000\u0000\u0000\u0324\u02f7"+ + "\u0001\u0000\u0000\u0000\u0324\u02ff\u0001\u0000\u0000\u0000\u0324\u0303"+ + "\u0001\u0000\u0000\u0000\u0324\u0307\u0001\u0000\u0000\u0000\u0324\u030c"+ + "\u0001\u0000\u0000\u0000\u0324\u0310\u0001\u0000\u0000\u0000\u0324\u0314"+ + "\u0001\u0000\u0000\u0000\u0324\u0319\u0001\u0000\u0000\u0000\u0324\u031c"+ + "\u0001\u0000\u0000\u0000\u0324\u0320\u0001\u0000\u0000\u0000\u0325\u009e"+ + "\u0001\u0000\u0000\u0000\u0326\u0327\u0005t\u0000\u0000\u0327\u0328\u0005"+ + "r\u0000\u0000\u0328\u0329\u0005u\u0000\u0000\u0329\u0330\u0005e\u0000"+ + "\u0000\u032a\u032b\u0005f\u0000\u0000\u032b\u032c\u0005a\u0000\u0000\u032c"+ + "\u032d\u0005l\u0000\u0000\u032d\u032e\u0005s\u0000\u0000\u032e\u0330\u0005"+ + "e\u0000\u0000\u032f\u0326\u0001\u0000\u0000\u0000\u032f\u032a\u0001\u0000"+ + "\u0000\u0000\u0330\u00a0\u0001\u0000\u0000\u0000\u0331\u0332\u0005{\u0000"+ + "\u0000\u0332\u0333\u0005{\u0000\u0000\u0333\u0337\u0001\u0000\u0000\u0000"+ + "\u0334\u0336\t\u0000\u0000\u0000\u0335\u0334\u0001\u0000\u0000\u0000\u0336"+ + "\u0339\u0001\u0000\u0000\u0000\u0337\u0338\u0001\u0000\u0000\u0000\u0337"+ + "\u0335\u0001\u0000\u0000\u0000\u0338\u033a\u0001\u0000\u0000\u0000\u0339"+ + "\u0337\u0001\u0000\u0000\u0000\u033a\u033b\u0005}\u0000\u0000\u033b\u033c"+ + "\u0005}\u0000\u0000\u033c\u00a2\u0001\u0000\u0000\u0000\u033d\u033e\u0005"+ + "#\u0000\u0000\u033e\u033f\u0005i\u0000\u0000\u033f\u0340\u0005m\u0000"+ + "\u0000\u0340\u0341\u0005p\u0000\u0000\u0341\u0342\u0005o\u0000\u0000\u0342"+ + "\u0343\u0005r\u0000\u0000\u0343\u0344\u0005t\u0000\u0000\u0344\u0345\u0001"+ + "\u0000\u0000\u0000\u0345\u0346\u0006P\u0002\u0000\u0346\u00a4\u0001\u0000"+ + "\u0000\u0000\u0347\u0348\u0005#\u0000\u0000\u0348\u0349\u0005i\u0000\u0000"+ + "\u0349\u034a\u0005n\u0000\u0000\u034a\u034b\u0005c\u0000\u0000\u034b\u034c"+ + "\u0005l\u0000\u0000\u034c\u034d\u0005u\u0000\u0000\u034d\u034e\u0005d"+ + "\u0000\u0000\u034e\u034f\u0005e\u0000\u0000\u034f\u0350\u0001\u0000\u0000"+ + "\u0000\u0350\u0351\u0006Q\u0003\u0000\u0351\u00a6\u0001\u0000\u0000\u0000"+ + "\u0352\u0353\u0005#\u0000\u0000\u0353\u0354\u0005p\u0000\u0000\u0354\u0355"+ + "\u0005r\u0000\u0000\u0355\u0356\u0005a\u0000\u0000\u0356\u0357\u0005g"+ + "\u0000\u0000\u0357\u0358\u0005m\u0000\u0000\u0358\u0359\u0005a\u0000\u0000"+ + "\u0359\u00a8\u0001\u0000\u0000\u0000\u035a\u035b\u0005#\u0000\u0000\u035b"+ + "\u035c\u0005d\u0000\u0000\u035c\u035d\u0005e\u0000\u0000\u035d\u035e\u0005"+ + "f\u0000\u0000\u035e\u035f\u0005i\u0000\u0000\u035f\u0360\u0005n\u0000"+ + "\u0000\u0360\u0361\u0005e\u0000\u0000\u0361\u00aa\u0001\u0000\u0000\u0000"+ + "\u0362\u0363\u0005\\\u0000\u0000\u0363\u0368\u0005\n\u0000\u0000\u0364"+ + "\u0365\u0005\\\u0000\u0000\u0365\u0366\u0005\r\u0000\u0000\u0366\u0368"+ + "\u0005\n\u0000\u0000\u0367\u0362\u0001\u0000\u0000\u0000\u0367\u0364\u0001"+ + "\u0000\u0000\u0000\u0368\u00ac\u0001\u0000\u0000\u0000\u0369\u036a\u0005"+ + "#\u0000\u0000\u036a\u036b\u0005u\u0000\u0000\u036b\u036c\u0005n\u0000"+ + "\u0000\u036c\u036d\u0005d\u0000\u0000\u036d\u036e\u0005e\u0000\u0000\u036e"+ + "\u036f\u0005f\u0000\u0000\u036f\u00ae\u0001\u0000\u0000\u0000\u0370\u0371"+ + "\u0005#\u0000\u0000\u0371\u0372\u0005i\u0000\u0000\u0372\u0373\u0005f"+ + "\u0000\u0000\u0373\u0374\u0005d\u0000\u0000\u0374\u0375\u0005e\u0000\u0000"+ + "\u0375\u0376\u0005f\u0000\u0000\u0376\u00b0\u0001\u0000\u0000\u0000\u0377"+ + "\u0378\u0005#\u0000\u0000\u0378\u0379\u0005i\u0000\u0000\u0379\u037a\u0005"+ + "f\u0000\u0000\u037a\u037b\u0005n\u0000\u0000\u037b\u037c\u0005d\u0000"+ + "\u0000\u037c\u037d\u0005e\u0000\u0000\u037d\u037e\u0005f\u0000\u0000\u037e"+ + "\u00b2\u0001\u0000\u0000\u0000\u037f\u0380\u0005#\u0000\u0000\u0380\u0381"+ + "\u0005i\u0000\u0000\u0381\u0382\u0005f\u0000\u0000\u0382\u00b4\u0001\u0000"+ + "\u0000\u0000\u0383\u0384\u0005#\u0000\u0000\u0384\u0385\u0005e\u0000\u0000"+ + "\u0385\u0386\u0005l\u0000\u0000\u0386\u0387\u0005i\u0000\u0000\u0387\u0388"+ + "\u0005f\u0000\u0000\u0388\u00b6\u0001\u0000\u0000\u0000\u0389\u038a\u0005"+ + "#\u0000\u0000\u038a\u038b\u0005e\u0000\u0000\u038b\u038c\u0005l\u0000"+ + "\u0000\u038c\u038d\u0005s\u0000\u0000\u038d\u038e\u0005e\u0000\u0000\u038e"+ + "\u00b8\u0001\u0000\u0000\u0000\u038f\u0390\u0005#\u0000\u0000\u0390\u0391"+ + "\u0005e\u0000\u0000\u0391\u0392\u0005n\u0000\u0000\u0392\u0393\u0005d"+ + "\u0000\u0000\u0393\u0394\u0005i\u0000\u0000\u0394\u0395\u0005f\u0000\u0000"+ + "\u0395\u00ba\u0001\u0000\u0000\u0000\u0396\u0397\u0005#\u0000\u0000\u0397"+ + "\u0398\u0005e\u0000\u0000\u0398\u0399\u0005r\u0000\u0000\u0399\u039a\u0005"+ + "r\u0000\u0000\u039a\u039b\u0005o\u0000\u0000\u039b\u039c\u0005r\u0000"+ + "\u0000\u039c\u00bc\u0001\u0000\u0000\u0000\u039d\u039e\u0005#\u0000\u0000"+ + "\u039e\u039f\u0003\u00d9k\u0000\u039f\u00be\u0001\u0000\u0000\u0000\u03a0"+ + "\u03a1\u0005#\u0000\u0000\u03a1\u03a2\u0003\u00d9k\u0000\u03a2\u00c0\u0001"+ + "\u0000\u0000\u0000\u03a3\u03a6\u0003\u00c3`\u0000\u03a4\u03a6\u0003\u00cb"+ + "d\u0000\u03a5\u03a3\u0001\u0000\u0000\u0000\u03a5\u03a4\u0001\u0000\u0000"+ + "\u0000\u03a6\u00c2\u0001\u0000\u0000\u0000\u03a7\u03ab\u0003\u00c5a\u0000"+ + "\u03a8\u03ab\u0003\u00c7b\u0000\u03a9\u03ab\u0003\u00c9c\u0000\u03aa\u03a7"+ + "\u0001\u0000\u0000\u0000\u03aa\u03a8\u0001\u0000\u0000\u0000\u03aa\u03a9"+ + "\u0001\u0000\u0000\u0000\u03ab\u00c4\u0001\u0000\u0000\u0000\u03ac\u03b2"+ + "\u0005%\u0000\u0000\u03ad\u03ae\u00050\u0000\u0000\u03ae\u03b2\u0005b"+ + "\u0000\u0000\u03af\u03b0\u00050\u0000\u0000\u03b0\u03b2\u0005B\u0000\u0000"+ + "\u03b1\u03ac\u0001\u0000\u0000\u0000\u03b1\u03ad\u0001\u0000\u0000\u0000"+ + "\u03b1\u03af\u0001\u0000\u0000\u0000\u03b2\u03b6\u0001\u0000\u0000\u0000"+ + "\u03b3\u03b5\u0003\u00d3h\u0000\u03b4\u03b3\u0001\u0000\u0000\u0000\u03b5"+ + "\u03b8\u0001\u0000\u0000\u0000\u03b6\u03b4\u0001\u0000\u0000\u0000\u03b6"+ + "\u03b7\u0001\u0000\u0000\u0000\u03b7\u03b9\u0001\u0000\u0000\u0000\u03b8"+ + "\u03b6\u0001\u0000\u0000\u0000\u03b9\u03bb\u0005.\u0000\u0000\u03ba\u03bc"+ + "\u0003\u00d3h\u0000\u03bb\u03ba\u0001\u0000\u0000\u0000\u03bc\u03bd\u0001"+ + "\u0000\u0000\u0000\u03bd\u03bb\u0001\u0000\u0000\u0000\u03bd\u03be\u0001"+ + "\u0000\u0000\u0000\u03be\u00c6\u0001\u0000\u0000\u0000\u03bf\u03c1\u0003"+ + "\u00d5i\u0000\u03c0\u03bf\u0001\u0000\u0000\u0000\u03c1\u03c4\u0001\u0000"+ + "\u0000\u0000\u03c2\u03c0\u0001\u0000\u0000\u0000\u03c2\u03c3\u0001\u0000"+ + "\u0000\u0000\u03c3\u03c5\u0001\u0000\u0000\u0000\u03c4\u03c2\u0001\u0000"+ + "\u0000\u0000\u03c5\u03c7\u0005.\u0000\u0000\u03c6\u03c8\u0003\u00d5i\u0000"+ + "\u03c7\u03c6\u0001\u0000\u0000\u0000\u03c8\u03c9\u0001\u0000\u0000\u0000"+ + "\u03c9\u03c7\u0001\u0000\u0000\u0000\u03c9\u03ca\u0001\u0000\u0000\u0000"+ + "\u03ca\u00c8\u0001\u0000\u0000\u0000\u03cb\u03d1\u0005$\u0000\u0000\u03cc"+ + "\u03cd\u00050\u0000\u0000\u03cd\u03d1\u0005x\u0000\u0000\u03ce\u03cf\u0005"+ + "0\u0000\u0000\u03cf\u03d1\u0005X\u0000\u0000\u03d0\u03cb\u0001\u0000\u0000"+ + "\u0000\u03d0\u03cc\u0001\u0000\u0000\u0000\u03d0\u03ce\u0001\u0000\u0000"+ + "\u0000\u03d1\u03d5\u0001\u0000\u0000\u0000\u03d2\u03d4\u0003\u00d7j\u0000"+ + "\u03d3\u03d2\u0001\u0000\u0000\u0000\u03d4\u03d7\u0001\u0000\u0000\u0000"+ + "\u03d5\u03d3\u0001\u0000\u0000\u0000\u03d5\u03d6\u0001\u0000\u0000\u0000"+ + "\u03d6\u03d8\u0001\u0000\u0000\u0000\u03d7\u03d5\u0001\u0000\u0000\u0000"+ + "\u03d8\u03da\u0005.\u0000\u0000\u03d9\u03db\u0003\u00d7j\u0000\u03da\u03d9"+ + "\u0001\u0000\u0000\u0000\u03db\u03dc\u0001\u0000\u0000\u0000\u03dc\u03da"+ + "\u0001\u0000\u0000\u0000\u03dc\u03dd\u0001\u0000\u0000\u0000\u03dd\u00ca"+ + "\u0001\u0000\u0000\u0000\u03de\u03e2\u0003\u00cff\u0000\u03df\u03e2\u0003"+ + "\u00d1g\u0000\u03e0\u03e2\u0003\u00cde\u0000\u03e1\u03de\u0001\u0000\u0000"+ + "\u0000\u03e1\u03df\u0001\u0000\u0000\u0000\u03e1\u03e0\u0001\u0000\u0000"+ + "\u0000\u03e2\u03e6\u0001\u0000\u0000\u0000\u03e3\u03e4\u0007\u0000\u0000"+ + "\u0000\u03e4\u03e7\u0007\u0001\u0000\u0000\u03e5\u03e7\u0007\u0002\u0000"+ + "\u0000\u03e6\u03e3\u0001\u0000\u0000\u0000\u03e6\u03e5\u0001\u0000\u0000"+ + "\u0000\u03e6\u03e7\u0001\u0000\u0000\u0000\u03e7\u00cc\u0001\u0000\u0000"+ + "\u0000\u03e8\u03e9\u00050\u0000\u0000\u03e9\u03eb\u0007\u0003\u0000\u0000"+ + "\u03ea\u03ec\u0003\u00d3h\u0000\u03eb\u03ea\u0001\u0000\u0000\u0000\u03ec"+ + "\u03ed\u0001\u0000\u0000\u0000\u03ed\u03eb\u0001\u0000\u0000\u0000\u03ed"+ + "\u03ee\u0001\u0000\u0000\u0000\u03ee\u03f6\u0001\u0000\u0000\u0000\u03ef"+ + "\u03f1\u0005%\u0000\u0000\u03f0\u03f2\u0003\u00d3h\u0000\u03f1\u03f0\u0001"+ + "\u0000\u0000\u0000\u03f2\u03f3\u0001\u0000\u0000\u0000\u03f3\u03f1\u0001"+ + "\u0000\u0000\u0000\u03f3\u03f4\u0001\u0000\u0000\u0000\u03f4\u03f6\u0001"+ + "\u0000\u0000\u0000\u03f5\u03e8\u0001\u0000\u0000\u0000\u03f5\u03ef\u0001"+ + "\u0000\u0000\u0000\u03f6\u00ce\u0001\u0000\u0000\u0000\u03f7\u03f9\u0003"+ + "\u00d5i\u0000\u03f8\u03f7\u0001\u0000\u0000\u0000\u03f9\u03fa\u0001\u0000"+ + "\u0000\u0000\u03fa\u03f8\u0001\u0000\u0000\u0000\u03fa\u03fb\u0001\u0000"+ + "\u0000\u0000\u03fb\u00d0\u0001\u0000\u0000\u0000\u03fc\u0402\u0005$\u0000"+ + "\u0000\u03fd\u03fe\u00050\u0000\u0000\u03fe\u0402\u0005x\u0000\u0000\u03ff"+ + "\u0400\u00050\u0000\u0000\u0400\u0402\u0005X\u0000\u0000\u0401\u03fc\u0001"+ + "\u0000\u0000\u0000\u0401\u03fd\u0001\u0000\u0000\u0000\u0401\u03ff\u0001"+ + "\u0000\u0000\u0000\u0402\u0404\u0001\u0000\u0000\u0000\u0403\u0405\u0003"+ + "\u00d7j\u0000\u0404\u0403\u0001\u0000\u0000\u0000\u0405\u0406\u0001\u0000"+ + "\u0000\u0000\u0406\u0404\u0001\u0000\u0000\u0000\u0406\u0407\u0001\u0000"+ + "\u0000\u0000\u0407\u00d2\u0001\u0000\u0000\u0000\u0408\u0409\u0007\u0004"+ + "\u0000\u0000\u0409\u00d4\u0001\u0000\u0000\u0000\u040a\u040b\u0007\u0005"+ + "\u0000\u0000\u040b\u00d6\u0001\u0000\u0000\u0000\u040c\u040d\u0007\u0006"+ + "\u0000\u0000\u040d\u00d8\u0001\u0000\u0000\u0000\u040e\u0412\u0003\u00db"+ + "l\u0000\u040f\u0411\u0003\u00ddm\u0000\u0410\u040f\u0001\u0000\u0000\u0000"+ + "\u0411\u0414\u0001\u0000\u0000\u0000\u0412\u0410\u0001\u0000\u0000\u0000"+ + "\u0412\u0413\u0001\u0000\u0000\u0000\u0413\u0415\u0001\u0000\u0000\u0000"+ + "\u0414\u0412\u0001\u0000\u0000\u0000\u0415\u0416\u0006k\u0004\u0000\u0416"+ + "\u00da\u0001\u0000\u0000\u0000\u0417\u0418\u0007\u0007\u0000\u0000\u0418"+ + "\u00dc\u0001\u0000\u0000\u0000\u0419\u041a\u0007\b\u0000\u0000\u041a\u00de"+ + "\u0001\u0000\u0000\u0000\u041b\u0421\u0005\"\u0000\u0000\u041c\u041d\u0005"+ + "\\\u0000\u0000\u041d\u0420\u0005\"\u0000\u0000\u041e\u0420\b\t\u0000\u0000"+ + "\u041f\u041c\u0001\u0000\u0000\u0000\u041f\u041e\u0001\u0000\u0000\u0000"+ + "\u0420\u0423\u0001\u0000\u0000\u0000\u0421\u041f\u0001\u0000\u0000\u0000"+ + "\u0421\u0422\u0001\u0000\u0000\u0000\u0422\u0424\u0001\u0000\u0000\u0000"+ + "\u0423\u0421\u0001\u0000\u0000\u0000\u0424\u0426\u0005\"\u0000\u0000\u0425"+ + "\u0427\u0007\n\u0000\u0000\u0426\u0425\u0001\u0000\u0000\u0000\u0426\u0427"+ + "\u0001\u0000\u0000\u0000\u0427\u042c\u0001\u0000\u0000\u0000\u0428\u042a"+ + "\u0007\u000b\u0000\u0000\u0429\u042b\u0007\f\u0000\u0000\u042a\u0429\u0001"+ + "\u0000\u0000\u0000\u042a\u042b\u0001\u0000\u0000\u0000\u042b\u042d\u0001"+ + "\u0000\u0000\u0000\u042c\u0428\u0001\u0000\u0000\u0000\u042c\u042d\u0001"+ + "\u0000\u0000\u0000\u042d\u042f\u0001\u0000\u0000\u0000\u042e\u0430\u0007"+ + "\n\u0000\u0000\u042f\u042e\u0001\u0000\u0000\u0000\u042f\u0430\u0001\u0000"+ + "\u0000\u0000\u0430\u00e0\u0001\u0000\u0000\u0000\u0431\u0440\u0005\'\u0000"+ + "\u0000\u0432\u043d\u0005\\\u0000\u0000\u0433\u0435\u0007\r\u0000\u0000"+ + "\u0434\u0436\u0007\u0005\u0000\u0000\u0435\u0434\u0001\u0000\u0000\u0000"+ + "\u0435\u0436\u0001\u0000\u0000\u0000\u0436\u0438\u0001\u0000\u0000\u0000"+ + "\u0437\u0439\u0007\u0005\u0000\u0000\u0438\u0437\u0001\u0000\u0000\u0000"+ + "\u0438\u0439\u0001\u0000\u0000\u0000\u0439\u043e\u0001\u0000\u0000\u0000"+ + "\u043a\u043b\u0005x\u0000\u0000\u043b\u043c\u0007\u000e\u0000\u0000\u043c"+ + "\u043e\u0007\u000e\u0000\u0000\u043d\u0433\u0001\u0000\u0000\u0000\u043d"+ + "\u043a\u0001\u0000\u0000\u0000\u043e\u0441\u0001\u0000\u0000\u0000\u043f"+ + "\u0441\b\u000f\u0000\u0000\u0440\u0432\u0001\u0000\u0000\u0000\u0440\u043f"+ + "\u0001\u0000\u0000\u0000\u0441\u0442\u0001\u0000\u0000\u0000\u0442\u0443"+ + "\u0005\'\u0000\u0000\u0443\u00e2\u0001\u0000\u0000\u0000\u0444\u0446\u0007"+ + "\u0010\u0000\u0000\u0445\u0444\u0001\u0000\u0000\u0000\u0446\u0447\u0001"+ + "\u0000\u0000\u0000\u0447\u0445\u0001\u0000\u0000\u0000\u0447\u0448\u0001"+ + "\u0000\u0000\u0000\u0448\u0449\u0001\u0000\u0000\u0000\u0449\u044a\u0006"+ + "p\u0005\u0000\u044a\u00e4\u0001\u0000\u0000\u0000\u044b\u044c\u0005/\u0000"+ + "\u0000\u044c\u044d\u0005/\u0000\u0000\u044d\u0451\u0001\u0000\u0000\u0000"+ + "\u044e\u0450\b\u0011\u0000\u0000\u044f\u044e\u0001\u0000\u0000\u0000\u0450"+ + "\u0453\u0001\u0000\u0000\u0000\u0451\u044f\u0001\u0000\u0000\u0000\u0451"+ + "\u0452\u0001\u0000\u0000\u0000\u0452\u0454\u0001\u0000\u0000\u0000\u0453"+ + "\u0451\u0001\u0000\u0000\u0000\u0454\u0455\u0006q\u0006\u0000\u0455\u00e6"+ + "\u0001\u0000\u0000\u0000\u0456\u0457\u0005/\u0000\u0000\u0457\u0458\u0005"+ + "*\u0000\u0000\u0458\u045c\u0001\u0000\u0000\u0000\u0459\u045b\t\u0000"+ + "\u0000\u0000\u045a\u0459\u0001\u0000\u0000\u0000\u045b\u045e\u0001\u0000"+ + "\u0000\u0000\u045c\u045d\u0001\u0000\u0000\u0000\u045c\u045a\u0001\u0000"+ + "\u0000\u0000\u045d\u045f\u0001\u0000\u0000\u0000\u045e\u045c\u0001\u0000"+ + "\u0000\u0000\u045f\u0460\u0005*\u0000\u0000\u0460\u0461\u0005/\u0000\u0000"+ + "\u0461\u0462\u0001\u0000\u0000\u0000\u0462\u0463\u0006r\u0006\u0000\u0463"+ + "\u00e8\u0001\u0000\u0000\u0000\u0464\u0465\u0005.\u0000\u0000\u0465\u0466"+ + "\u0005b\u0000\u0000\u0466\u0467\u0005y\u0000\u0000\u0467\u0468\u0005t"+ + "\u0000\u0000\u0468\u0469\u0005e\u0000\u0000\u0469\u00ea\u0001\u0000\u0000"+ + "\u0000\u046a\u046b\u0005b\u0000\u0000\u046b\u046c\u0005r\u0000\u0000\u046c"+ + "\u06ca\u0005k\u0000\u0000\u046d\u046e\u0005o\u0000\u0000\u046e\u046f\u0005"+ + "r\u0000\u0000\u046f\u06ca\u0005a\u0000\u0000\u0470\u0471\u0005k\u0000"+ + "\u0000\u0471\u0472\u0005i\u0000\u0000\u0472\u06ca\u0005l\u0000\u0000\u0473"+ + "\u0474\u0005s\u0000\u0000\u0474\u0475\u0005l\u0000\u0000\u0475\u06ca\u0005"+ + "o\u0000\u0000\u0476\u0477\u0005n\u0000\u0000\u0477\u0478\u0005o\u0000"+ + "\u0000\u0478\u06ca\u0005p\u0000\u0000\u0479\u047a\u0005a\u0000\u0000\u047a"+ + "\u047b\u0005s\u0000\u0000\u047b\u06ca\u0005l\u0000\u0000\u047c\u047d\u0005"+ + "p\u0000\u0000\u047d\u047e\u0005h\u0000\u0000\u047e\u06ca\u0005p\u0000"+ + "\u0000\u047f\u0480\u0005a\u0000\u0000\u0480\u0481\u0005n\u0000\u0000\u0481"+ + "\u06ca\u0005c\u0000\u0000\u0482\u0483\u0005b\u0000\u0000\u0483\u0484\u0005"+ + "p\u0000\u0000\u0484\u06ca\u0005l\u0000\u0000\u0485\u0486\u0005c\u0000"+ + "\u0000\u0486\u0487\u0005l\u0000\u0000\u0487\u06ca\u0005c\u0000\u0000\u0488"+ + "\u0489\u0005j\u0000\u0000\u0489\u048a\u0005s\u0000\u0000\u048a\u06ca\u0005"+ + "r\u0000\u0000\u048b\u048c\u0005a\u0000\u0000\u048c\u048d\u0005n\u0000"+ + "\u0000\u048d\u06ca\u0005d\u0000\u0000\u048e\u048f\u0005r\u0000\u0000\u048f"+ + "\u0490\u0005l\u0000\u0000\u0490\u06ca\u0005a\u0000\u0000\u0491\u0492\u0005"+ + "b\u0000\u0000\u0492\u0493\u0005i\u0000\u0000\u0493\u06ca\u0005t\u0000"+ + "\u0000\u0494\u0495\u0005r\u0000\u0000\u0495\u0496\u0005o\u0000\u0000\u0496"+ + "\u06ca\u0005l\u0000\u0000\u0497\u0498\u0005p\u0000\u0000\u0498\u0499\u0005"+ + "l\u0000\u0000\u0499\u06ca\u0005a\u0000\u0000\u049a\u049b\u0005p\u0000"+ + "\u0000\u049b\u049c\u0005l\u0000\u0000\u049c\u06ca\u0005p\u0000\u0000\u049d"+ + "\u049e\u0005b\u0000\u0000\u049e\u049f\u0005m\u0000\u0000\u049f\u06ca\u0005"+ + "i\u0000\u0000\u04a0\u04a1\u0005s\u0000\u0000\u04a1\u04a2\u0005e\u0000"+ + "\u0000\u04a2\u06ca\u0005c\u0000\u0000\u04a3\u04a4\u0005r\u0000\u0000\u04a4"+ + "\u04a5\u0005t\u0000\u0000\u04a5\u06ca\u0005i\u0000\u0000\u04a6\u04a7\u0005"+ + "e\u0000\u0000\u04a7\u04a8\u0005o\u0000\u0000\u04a8\u06ca\u0005r\u0000"+ + "\u0000\u04a9\u04aa\u0005s\u0000\u0000\u04aa\u04ab\u0005r\u0000\u0000\u04ab"+ + "\u06ca\u0005e\u0000\u0000\u04ac\u04ad\u0005l\u0000\u0000\u04ad\u04ae\u0005"+ + "s\u0000\u0000\u04ae\u06ca\u0005r\u0000\u0000\u04af\u04b0\u0005p\u0000"+ + "\u0000\u04b0\u04b1\u0005h\u0000\u0000\u04b1\u06ca\u0005a\u0000\u0000\u04b2"+ + "\u04b3\u0005a\u0000\u0000\u04b3\u04b4\u0005l\u0000\u0000\u04b4\u06ca\u0005"+ + "r\u0000\u0000\u04b5\u04b6\u0005j\u0000\u0000\u04b6\u04b7\u0005m\u0000"+ + "\u0000\u04b7\u06ca\u0005p\u0000\u0000\u04b8\u04b9\u0005b\u0000\u0000\u04b9"+ + "\u04ba\u0005v\u0000\u0000\u04ba\u06ca\u0005c\u0000\u0000\u04bb\u04bc\u0005"+ + "c\u0000\u0000\u04bc\u04bd\u0005l\u0000\u0000\u04bd\u06ca\u0005i\u0000"+ + "\u0000\u04be\u04bf\u0005r\u0000\u0000\u04bf\u04c0\u0005t\u0000\u0000\u04c0"+ + "\u06ca\u0005s\u0000\u0000\u04c1\u04c2\u0005a\u0000\u0000\u04c2\u04c3\u0005"+ + "d\u0000\u0000\u04c3\u06ca\u0005c\u0000\u0000\u04c4\u04c5\u0005r\u0000"+ + "\u0000\u04c5\u04c6\u0005r\u0000\u0000\u04c6\u06ca\u0005a\u0000\u0000\u04c7"+ + "\u04c8\u0005b\u0000\u0000\u04c8\u04c9\u0005v\u0000\u0000\u04c9\u06ca\u0005"+ + "s\u0000\u0000\u04ca\u04cb\u0005s\u0000\u0000\u04cb\u04cc\u0005e\u0000"+ + "\u0000\u04cc\u06ca\u0005i\u0000\u0000\u04cd\u04ce\u0005s\u0000\u0000\u04ce"+ + "\u04cf\u0005a\u0000\u0000\u04cf\u06ca\u0005x\u0000\u0000\u04d0\u04d1\u0005"+ + "s\u0000\u0000\u04d1\u04d2\u0005t\u0000\u0000\u04d2\u06ca\u0005y\u0000"+ + "\u0000\u04d3\u04d4\u0005s\u0000\u0000\u04d4\u04d5\u0005t\u0000\u0000\u04d5"+ + "\u06ca\u0005a\u0000\u0000\u04d6\u04d7\u0005s\u0000\u0000\u04d7\u04d8\u0005"+ + "t\u0000\u0000\u04d8\u06ca\u0005x\u0000\u0000\u04d9\u04da\u0005d\u0000"+ + "\u0000\u04da\u04db\u0005e\u0000\u0000\u04db\u06ca\u0005y\u0000\u0000\u04dc"+ + "\u04dd\u0005t\u0000\u0000\u04dd\u04de\u0005x\u0000\u0000\u04de\u06ca\u0005"+ + "a\u0000\u0000\u04df\u04e0\u0005x\u0000\u0000\u04e0\u04e1\u0005a\u0000"+ + "\u0000\u04e1\u06ca\u0005a\u0000\u0000\u04e2\u04e3\u0005b\u0000\u0000\u04e3"+ + "\u04e4\u0005c\u0000\u0000\u04e4\u06ca\u0005c\u0000\u0000\u04e5\u04e6\u0005"+ + "a\u0000\u0000\u04e6\u04e7\u0005h\u0000\u0000\u04e7\u06ca\u0005x\u0000"+ + "\u0000\u04e8\u04e9\u0005t\u0000\u0000\u04e9\u04ea\u0005y\u0000\u0000\u04ea"+ + "\u06ca\u0005a\u0000\u0000\u04eb\u04ec\u0005t\u0000\u0000\u04ec\u04ed\u0005"+ + "x\u0000\u0000\u04ed\u06ca\u0005s\u0000\u0000\u04ee\u04ef\u0005t\u0000"+ + "\u0000\u04ef\u04f0\u0005a\u0000\u0000\u04f0\u06ca\u0005s\u0000\u0000\u04f1"+ + "\u04f2\u0005s\u0000\u0000\u04f2\u04f3\u0005h\u0000\u0000\u04f3\u06ca\u0005"+ + "y\u0000\u0000\u04f4\u04f5\u0005s\u0000\u0000\u04f5\u04f6\u0005h\u0000"+ + "\u0000\u04f6\u06ca\u0005x\u0000\u0000\u04f7\u04f8\u0005l\u0000\u0000\u04f8"+ + "\u04f9\u0005d\u0000\u0000\u04f9\u06ca\u0005y\u0000\u0000\u04fa\u04fb\u0005"+ + "l\u0000\u0000\u04fb\u04fc\u0005d\u0000\u0000\u04fc\u06ca\u0005a\u0000"+ + "\u0000\u04fd\u04fe\u0005l\u0000\u0000\u04fe\u04ff\u0005d\u0000\u0000\u04ff"+ + "\u06ca\u0005x\u0000\u0000\u0500\u0501\u0005l\u0000\u0000\u0501\u0502\u0005"+ + "a\u0000\u0000\u0502\u06ca\u0005x\u0000\u0000\u0503\u0504\u0005t\u0000"+ + "\u0000\u0504\u0505\u0005a\u0000\u0000\u0505\u06ca\u0005y\u0000\u0000\u0506"+ + "\u0507\u0005t\u0000\u0000\u0507\u0508\u0005a\u0000\u0000\u0508\u06ca\u0005"+ + "x\u0000\u0000\u0509\u050a\u0005b\u0000\u0000\u050a\u050b\u0005c\u0000"+ + "\u0000\u050b\u06ca\u0005s\u0000\u0000\u050c\u050d\u0005c\u0000\u0000\u050d"+ + "\u050e\u0005l\u0000\u0000\u050e\u06ca\u0005v\u0000\u0000\u050f\u0510\u0005"+ + "t\u0000\u0000\u0510\u0511\u0005s\u0000\u0000\u0511\u06ca\u0005x\u0000"+ + "\u0000\u0512\u0513\u0005l\u0000\u0000\u0513\u0514\u0005a\u0000\u0000\u0514"+ + "\u06ca\u0005s\u0000\u0000\u0515\u0516\u0005c\u0000\u0000\u0516\u0517\u0005"+ + "p\u0000\u0000\u0517\u06ca\u0005y\u0000\u0000\u0518\u0519\u0005c\u0000"+ + "\u0000\u0519\u051a\u0005m\u0000\u0000\u051a\u06ca\u0005p\u0000\u0000\u051b"+ + "\u051c\u0005c\u0000\u0000\u051c\u051d\u0005p\u0000\u0000\u051d\u06ca\u0005"+ + "x\u0000\u0000\u051e\u051f\u0005d\u0000\u0000\u051f\u0520\u0005c\u0000"+ + "\u0000\u0520\u06ca\u0005p\u0000\u0000\u0521\u0522\u0005d\u0000\u0000\u0522"+ + "\u0523\u0005e\u0000\u0000\u0523\u06ca\u0005c\u0000\u0000\u0524\u0525\u0005"+ + "i\u0000\u0000\u0525\u0526\u0005n\u0000\u0000\u0526\u06ca\u0005c\u0000"+ + "\u0000\u0527\u0528\u0005a\u0000\u0000\u0528\u0529\u0005x\u0000\u0000\u0529"+ + "\u06ca\u0005s\u0000\u0000\u052a\u052b\u0005b\u0000\u0000\u052b\u052c\u0005"+ + "n\u0000\u0000\u052c\u06ca\u0005e\u0000\u0000\u052d\u052e\u0005c\u0000"+ + "\u0000\u052e\u052f\u0005l\u0000\u0000\u052f\u06ca\u0005d\u0000\u0000\u0530"+ + "\u0531\u0005s\u0000\u0000\u0531\u0532\u0005b\u0000\u0000\u0532\u06ca\u0005"+ + "c\u0000\u0000\u0533\u0534\u0005i\u0000\u0000\u0534\u0535\u0005s\u0000"+ + "\u0000\u0535\u06ca\u0005c\u0000\u0000\u0536\u0537\u0005i\u0000\u0000\u0537"+ + "\u0538\u0005n\u0000\u0000\u0538\u06ca\u0005x\u0000\u0000\u0539\u053a\u0005"+ + "b\u0000\u0000\u053a\u053b\u0005e\u0000\u0000\u053b\u06ca\u0005q\u0000"+ + "\u0000\u053c\u053d\u0005s\u0000\u0000\u053d\u053e\u0005e\u0000\u0000\u053e"+ + "\u06ca\u0005d\u0000\u0000\u053f\u0540\u0005d\u0000\u0000\u0540\u0541\u0005"+ + "e\u0000\u0000\u0541\u06ca\u0005x\u0000\u0000\u0542\u0543\u0005i\u0000"+ + "\u0000\u0543\u0544\u0005n\u0000\u0000\u0544\u06ca\u0005y\u0000\u0000\u0545"+ + "\u0546\u0005r\u0000\u0000\u0546\u0547\u0005o\u0000\u0000\u0547\u06ca\u0005"+ + "r\u0000\u0000\u0548\u0549\u0005b\u0000\u0000\u0549\u054a\u0005b\u0000"+ + "\u0000\u054a\u054b\u0005r\u0000\u0000\u054b\u06ca\u00050\u0000\u0000\u054c"+ + "\u054d\u0005b\u0000\u0000\u054d\u054e\u0005b\u0000\u0000\u054e\u054f\u0005"+ + "r\u0000\u0000\u054f\u06ca\u00051\u0000\u0000\u0550\u0551\u0005b\u0000"+ + "\u0000\u0551\u0552\u0005b\u0000\u0000\u0552\u0553\u0005r\u0000\u0000\u0553"+ + "\u06ca\u00052\u0000\u0000\u0554\u0555\u0005b\u0000\u0000\u0555\u0556\u0005"+ + "b\u0000\u0000\u0556\u0557\u0005r\u0000\u0000\u0557\u06ca\u00053\u0000"+ + "\u0000\u0558\u0559\u0005b\u0000\u0000\u0559\u055a\u0005b\u0000\u0000\u055a"+ + "\u055b\u0005r\u0000\u0000\u055b\u06ca\u00054\u0000\u0000\u055c\u055d\u0005"+ + "b\u0000\u0000\u055d\u055e\u0005b\u0000\u0000\u055e\u055f\u0005r\u0000"+ + "\u0000\u055f\u06ca\u00055\u0000\u0000\u0560\u0561\u0005b\u0000\u0000\u0561"+ + "\u0562\u0005b\u0000\u0000\u0562\u0563\u0005r\u0000\u0000\u0563\u06ca\u0005"+ + "6\u0000\u0000\u0564\u0565\u0005b\u0000\u0000\u0565\u0566\u0005b\u0000"+ + "\u0000\u0566\u0567\u0005r\u0000\u0000\u0567\u06ca\u00057\u0000\u0000\u0568"+ + "\u0569\u0005b\u0000\u0000\u0569\u056a\u0005b\u0000\u0000\u056a\u056b\u0005"+ + "s\u0000\u0000\u056b\u06ca\u00050\u0000\u0000\u056c\u056d\u0005b\u0000"+ + "\u0000\u056d\u056e\u0005b\u0000\u0000\u056e\u056f\u0005s\u0000\u0000\u056f"+ + "\u06ca\u00051\u0000\u0000\u0570\u0571\u0005b\u0000\u0000\u0571\u0572\u0005"+ + "b\u0000\u0000\u0572\u0573\u0005s\u0000\u0000\u0573\u06ca\u00052\u0000"+ + "\u0000\u0574\u0575\u0005b\u0000\u0000\u0575\u0576\u0005b\u0000\u0000\u0576"+ + "\u0577\u0005s\u0000\u0000\u0577\u06ca\u00053\u0000\u0000\u0578\u0579\u0005"+ + "b\u0000\u0000\u0579\u057a\u0005b\u0000\u0000\u057a\u057b\u0005s\u0000"+ + "\u0000\u057b\u06ca\u00054\u0000\u0000\u057c\u057d\u0005b\u0000\u0000\u057d"+ + "\u057e\u0005b\u0000\u0000\u057e\u057f\u0005s\u0000\u0000\u057f\u06ca\u0005"+ + "5\u0000\u0000\u0580\u0581\u0005b\u0000\u0000\u0581\u0582\u0005b\u0000"+ + "\u0000\u0582\u0583\u0005s\u0000\u0000\u0583\u06ca\u00056\u0000\u0000\u0584"+ + "\u0585\u0005b\u0000\u0000\u0585\u0586\u0005b\u0000\u0000\u0586\u0587\u0005"+ + "s\u0000\u0000\u0587\u06ca\u00057\u0000\u0000\u0588\u0589\u0005b\u0000"+ + "\u0000\u0589\u058a\u0005r\u0000\u0000\u058a\u06ca\u0005a\u0000\u0000\u058b"+ + "\u058c\u0005p\u0000\u0000\u058c\u058d\u0005h\u0000\u0000\u058d\u06ca\u0005"+ + "x\u0000\u0000\u058e\u058f\u0005p\u0000\u0000\u058f\u0590\u0005h\u0000"+ + "\u0000\u0590\u06ca\u0005y\u0000\u0000\u0591\u0592\u0005p\u0000\u0000\u0592"+ + "\u0593\u0005l\u0000\u0000\u0593\u06ca\u0005x\u0000\u0000\u0594\u0595\u0005"+ + "p\u0000\u0000\u0595\u0596\u0005l\u0000\u0000\u0596\u06ca\u0005y\u0000"+ + "\u0000\u0597\u0598\u0005r\u0000\u0000\u0598\u0599\u0005m\u0000\u0000\u0599"+ + "\u059a\u0005b\u0000\u0000\u059a\u06ca\u00050\u0000\u0000\u059b\u059c\u0005"+ + "r\u0000\u0000\u059c\u059d\u0005m\u0000\u0000\u059d\u059e\u0005b\u0000"+ + "\u0000\u059e\u06ca\u00051\u0000\u0000\u059f\u05a0\u0005r\u0000\u0000\u05a0"+ + "\u05a1\u0005m\u0000\u0000\u05a1\u05a2\u0005b\u0000\u0000\u05a2\u06ca\u0005"+ + "2\u0000\u0000\u05a3\u05a4\u0005r\u0000\u0000\u05a4\u05a5\u0005m\u0000"+ + "\u0000\u05a5\u05a6\u0005b\u0000\u0000\u05a6\u06ca\u00053\u0000\u0000\u05a7"+ + "\u05a8\u0005r\u0000\u0000\u05a8\u05a9\u0005m\u0000\u0000\u05a9\u05aa\u0005"+ + "b\u0000\u0000\u05aa\u06ca\u00054\u0000\u0000\u05ab\u05ac\u0005r\u0000"+ + "\u0000\u05ac\u05ad\u0005m\u0000\u0000\u05ad\u05ae\u0005b\u0000\u0000\u05ae"+ + "\u06ca\u00055\u0000\u0000\u05af\u05b0\u0005r\u0000\u0000\u05b0\u05b1\u0005"+ + "m\u0000\u0000\u05b1\u05b2\u0005b\u0000\u0000\u05b2\u06ca\u00056\u0000"+ + "\u0000\u05b3\u05b4\u0005r\u0000\u0000\u05b4\u05b5\u0005m\u0000\u0000\u05b5"+ + "\u05b6\u0005b\u0000\u0000\u05b6\u06ca\u00057\u0000\u0000\u05b7\u05b8\u0005"+ + "s\u0000\u0000\u05b8\u05b9\u0005m\u0000\u0000\u05b9\u05ba\u0005b\u0000"+ + "\u0000\u05ba\u06ca\u00050\u0000\u0000\u05bb\u05bc\u0005s\u0000\u0000\u05bc"+ + "\u05bd\u0005m\u0000\u0000\u05bd\u05be\u0005b\u0000\u0000\u05be\u06ca\u0005"+ + "1\u0000\u0000\u05bf\u05c0\u0005s\u0000\u0000\u05c0\u05c1\u0005m\u0000"+ + "\u0000\u05c1\u05c2\u0005b\u0000\u0000\u05c2\u06ca\u00052\u0000\u0000\u05c3"+ + "\u05c4\u0005s\u0000\u0000\u05c4\u05c5\u0005m\u0000\u0000\u05c5\u05c6\u0005"+ + "b\u0000\u0000\u05c6\u06ca\u00053\u0000\u0000\u05c7\u05c8\u0005s\u0000"+ + "\u0000\u05c8\u05c9\u0005m\u0000\u0000\u05c9\u05ca\u0005b\u0000\u0000\u05ca"+ + "\u06ca\u00054\u0000\u0000\u05cb\u05cc\u0005s\u0000\u0000\u05cc\u05cd\u0005"+ + "m\u0000\u0000\u05cd\u05ce\u0005b\u0000\u0000\u05ce\u06ca\u00055\u0000"+ + "\u0000\u05cf\u05d0\u0005s\u0000\u0000\u05d0\u05d1\u0005m\u0000\u0000\u05d1"+ + "\u05d2\u0005b\u0000\u0000\u05d2\u06ca\u00056\u0000\u0000\u05d3\u05d4\u0005"+ + "s\u0000\u0000\u05d4\u05d5\u0005m\u0000\u0000\u05d5\u05d6\u0005b\u0000"+ + "\u0000\u05d6\u06ca\u00057\u0000\u0000\u05d7\u05d8\u0005s\u0000\u0000\u05d8"+ + "\u05d9\u0005t\u0000\u0000\u05d9\u06ca\u0005p\u0000\u0000\u05da\u05db\u0005"+ + "s\u0000\u0000\u05db\u05dc\u0005t\u0000\u0000\u05dc\u06ca\u0005z\u0000"+ + "\u0000\u05dd\u05de\u0005t\u0000\u0000\u05de\u05df\u0005r\u0000\u0000\u05df"+ + "\u06ca\u0005b\u0000\u0000\u05e0\u05e1\u0005t\u0000\u0000\u05e1\u05e2\u0005"+ + "s\u0000\u0000\u05e2\u06ca\u0005b\u0000\u0000\u05e3\u05e4\u0005w\u0000"+ + "\u0000\u05e4\u05e5\u0005a\u0000\u0000\u05e5\u06ca\u0005i\u0000\u0000\u05e6"+ + "\u05e7\u0005c\u0000\u0000\u05e7\u05e8\u0005l\u0000\u0000\u05e8\u06ca\u0005"+ + "e\u0000\u0000\u05e9\u05ea\u0005s\u0000\u0000\u05ea\u05eb\u0005e\u0000"+ + "\u0000\u05eb\u06ca\u0005e\u0000\u0000\u05ec\u05ed\u0005t\u0000\u0000\u05ed"+ + "\u05ee\u0005s\u0000\u0000\u05ee\u06ca\u0005y\u0000\u0000\u05ef\u05f0\u0005"+ + "l\u0000\u0000\u05f0\u05f1\u0005b\u0000\u0000\u05f1\u05f2\u0005p\u0000"+ + "\u0000\u05f2\u06ca\u0005l\u0000\u0000\u05f3\u05f4\u0005i\u0000\u0000\u05f4"+ + "\u05f5\u0005n\u0000\u0000\u05f5\u06ca\u0005z\u0000\u0000\u05f6\u05f7\u0005"+ + "t\u0000\u0000\u05f7\u05f8\u0005y\u0000\u0000\u05f8\u06ca\u0005s\u0000"+ + "\u0000\u05f9\u05fa\u0005l\u0000\u0000\u05fa\u05fb\u0005b\u0000\u0000\u05fb"+ + "\u05fc\u0005m\u0000\u0000\u05fc\u06ca\u0005i\u0000\u0000\u05fd\u05fe\u0005"+ + "d\u0000\u0000\u05fe\u05ff\u0005e\u0000\u0000\u05ff\u06ca\u0005z\u0000"+ + "\u0000\u0600\u0601\u0005n\u0000\u0000\u0601\u0602\u0005e\u0000\u0000\u0602"+ + "\u06ca\u0005g\u0000\u0000\u0603\u0604\u0005a\u0000\u0000\u0604\u0605\u0005"+ + "s\u0000\u0000\u0605\u06ca\u0005r\u0000\u0000\u0606\u0607\u0005t\u0000"+ + "\u0000\u0607\u0608\u0005a\u0000\u0000\u0608\u06ca\u0005z\u0000\u0000\u0609"+ + "\u060a\u0005l\u0000\u0000\u060a\u060b\u0005b\u0000\u0000\u060b\u060c\u0005"+ + "v\u0000\u0000\u060c\u06ca\u0005c\u0000\u0000\u060d\u060e\u0005t\u0000"+ + "\u0000\u060e\u060f\u0005a\u0000\u0000\u060f\u06ca\u0005b\u0000\u0000\u0610"+ + "\u0611\u0005m\u0000\u0000\u0611\u0612\u0005a\u0000\u0000\u0612\u06ca\u0005"+ + "p\u0000\u0000\u0613\u0614\u0005r\u0000\u0000\u0614\u0615\u0005t\u0000"+ + "\u0000\u0615\u06ca\u0005n\u0000\u0000\u0616\u0617\u0005l\u0000\u0000\u0617"+ + "\u0618\u0005b\u0000\u0000\u0618\u0619\u0005s\u0000\u0000\u0619\u06ca\u0005"+ + "r\u0000\u0000\u061a\u061b\u0005t\u0000\u0000\u061b\u061c\u0005z\u0000"+ + "\u0000\u061c\u06ca\u0005a\u0000\u0000\u061d\u061e\u0005l\u0000\u0000\u061e"+ + "\u061f\u0005b\u0000\u0000\u061f\u0620\u0005v\u0000\u0000\u0620\u06ca\u0005"+ + "s\u0000\u0000\u0621\u0622\u0005t\u0000\u0000\u0622\u0623\u0005b\u0000"+ + "\u0000\u0623\u06ca\u0005a\u0000\u0000\u0624\u0625\u0005l\u0000\u0000\u0625"+ + "\u0626\u0005b\u0000\u0000\u0626\u0627\u0005r\u0000\u0000\u0627\u06ca\u0005"+ + "a\u0000\u0000\u0628\u0629\u0005l\u0000\u0000\u0629\u062a\u0005b\u0000"+ + "\u0000\u062a\u062b\u0005c\u0000\u0000\u062b\u06ca\u0005c\u0000\u0000\u062c"+ + "\u062d\u0005l\u0000\u0000\u062d\u062e\u0005d\u0000\u0000\u062e\u06ca\u0005"+ + "z\u0000\u0000\u062f\u0630\u0005l\u0000\u0000\u0630\u0631\u0005b\u0000"+ + "\u0000\u0631\u0632\u0005c\u0000\u0000\u0632\u06ca\u0005s\u0000\u0000\u0633"+ + "\u0634\u0005c\u0000\u0000\u0634\u0635\u0005p\u0000\u0000\u0635\u06ca\u0005"+ + "z\u0000\u0000\u0636\u0637\u0005d\u0000\u0000\u0637\u0638\u0005e\u0000"+ + "\u0000\u0638\u06ca\u0005w\u0000\u0000\u0639\u063a\u0005a\u0000\u0000\u063a"+ + "\u063b\u0005s\u0000\u0000\u063b\u06ca\u0005w\u0000\u0000\u063c\u063d\u0005"+ + "l\u0000\u0000\u063d\u063e\u0005b\u0000\u0000\u063e\u063f\u0005n\u0000"+ + "\u0000\u063f\u06ca\u0005e\u0000\u0000\u0640\u0641\u0005p\u0000\u0000\u0641"+ + "\u0642\u0005h\u0000\u0000\u0642\u06ca\u0005z\u0000\u0000\u0643\u0644\u0005"+ + "i\u0000\u0000\u0644\u0645\u0005n\u0000\u0000\u0645\u06ca\u0005w\u0000"+ + "\u0000\u0646\u0647\u0005r\u0000\u0000\u0647\u0648\u0005o\u0000\u0000\u0648"+ + "\u06ca\u0005w\u0000\u0000\u0649\u064a\u0005l\u0000\u0000\u064a\u064b\u0005"+ + "b\u0000\u0000\u064b\u064c\u0005e\u0000\u0000\u064c\u06ca\u0005q\u0000"+ + "\u0000\u064d\u064e\u0005p\u0000\u0000\u064e\u064f\u0005h\u0000\u0000\u064f"+ + "\u06ca\u0005w\u0000\u0000\u0650\u0651\u0005p\u0000\u0000\u0651\u0652\u0005"+ + "l\u0000\u0000\u0652\u06ca\u0005z\u0000\u0000\u0653\u0654\u0005e\u0000"+ + "\u0000\u0654\u0655\u0005o\u0000\u0000\u0655\u06ca\u0005m\u0000\u0000\u0656"+ + "\u0657\u0005a\u0000\u0000\u0657\u0658\u0005d\u0000\u0000\u0658\u0659\u0005"+ + "c\u0000\u0000\u0659\u06ca\u0005q\u0000\u0000\u065a\u065b\u0005a\u0000"+ + "\u0000\u065b\u065c\u0005n\u0000\u0000\u065c\u065d\u0005d\u0000\u0000\u065d"+ + "\u06ca\u0005q\u0000\u0000\u065e\u065f\u0005a\u0000\u0000\u065f\u0660\u0005"+ + "s\u0000\u0000\u0660\u0661\u0005l\u0000\u0000\u0661\u06ca\u0005q\u0000"+ + "\u0000\u0662\u0663\u0005a\u0000\u0000\u0663\u0664\u0005s\u0000\u0000\u0664"+ + "\u0665\u0005r\u0000\u0000\u0665\u06ca\u0005q\u0000\u0000\u0666\u0667\u0005"+ + "b\u0000\u0000\u0667\u0668\u0005i\u0000\u0000\u0668\u0669\u0005t\u0000"+ + "\u0000\u0669\u06ca\u0005q\u0000\u0000\u066a\u066b\u0005c\u0000\u0000\u066b"+ + "\u066c\u0005p\u0000\u0000\u066c\u06ca\u0005q\u0000\u0000\u066d\u066e\u0005"+ + "d\u0000\u0000\u066e\u066f\u0005e\u0000\u0000\u066f\u06ca\u0005q\u0000"+ + "\u0000\u0670\u0671\u0005e\u0000\u0000\u0671\u0672\u0005o\u0000\u0000\u0672"+ + "\u0673\u0005r\u0000\u0000\u0673\u06ca\u0005q\u0000\u0000\u0674\u0675\u0005"+ + "i\u0000\u0000\u0675\u0676\u0005n\u0000\u0000\u0676\u06ca\u0005q\u0000"+ + "\u0000\u0677\u0678\u0005l\u0000\u0000\u0678\u0679\u0005d\u0000\u0000\u0679"+ + "\u06ca\u0005q\u0000\u0000\u067a\u067b\u0005l\u0000\u0000\u067b\u067c\u0005"+ + "s\u0000\u0000\u067c\u067d\u0005r\u0000\u0000\u067d\u06ca\u0005q\u0000"+ + "\u0000\u067e\u067f\u0005o\u0000\u0000\u067f\u0680\u0005r\u0000\u0000\u0680"+ + "\u06ca\u0005q\u0000\u0000\u0681\u0682\u0005r\u0000\u0000\u0682\u0683\u0005"+ + "o\u0000\u0000\u0683\u0684\u0005l\u0000\u0000\u0684\u06ca\u0005q\u0000"+ + "\u0000\u0685\u0686\u0005r\u0000\u0000\u0686\u0687\u0005o\u0000\u0000\u0687"+ + "\u0688\u0005r\u0000\u0000\u0688\u06ca\u0005q\u0000\u0000\u0689\u068a\u0005"+ + "s\u0000\u0000\u068a\u068b\u0005b\u0000\u0000\u068b\u068c\u0005c\u0000"+ + "\u0000\u068c\u06ca\u0005q\u0000\u0000\u068d\u068e\u0005s\u0000\u0000\u068e"+ + "\u068f\u0005t\u0000\u0000\u068f\u06ca\u0005q\u0000\u0000\u0690\u0691\u0005"+ + "s\u0000\u0000\u0691\u0692\u0005x\u0000\u0000\u0692\u06ca\u0005y\u0000"+ + "\u0000\u0693\u0694\u0005s\u0000\u0000\u0694\u0695\u0005t\u0000\u0000\u0695"+ + "\u06ca\u00050\u0000\u0000\u0696\u0697\u0005s\u0000\u0000\u0697\u0698\u0005"+ + "t\u0000\u0000\u0698\u06ca\u00051\u0000\u0000\u0699\u069a\u0005s\u0000"+ + "\u0000\u069a\u069b\u0005t\u0000\u0000\u069b\u06ca\u00052\u0000\u0000\u069c"+ + "\u069d\u0005s\u0000\u0000\u069d\u069e\u0005a\u0000\u0000\u069e\u06ca\u0005"+ + "y\u0000\u0000\u069f\u06a0\u0005t\u0000\u0000\u06a0\u06a1\u0005m\u0000"+ + "\u0000\u06a1\u06ca\u0005a\u0000\u0000\u06a2\u06a3\u0005b\u0000\u0000\u06a3"+ + "\u06a4\u0005s\u0000\u0000\u06a4\u06ca\u0005r\u0000\u0000\u06a5\u06a6\u0005"+ + "t\u0000\u0000\u06a6\u06a7\u0005a\u0000\u0000\u06a7\u06ca\u0005m\u0000"+ + "\u0000\u06a8\u06a9\u0005c\u0000\u0000\u06a9\u06aa\u0005s\u0000\u0000\u06aa"+ + "\u06ca\u0005l\u0000\u0000\u06ab\u06ac\u0005c\u0000\u0000\u06ac\u06ad\u0005"+ + "l\u0000\u0000\u06ad\u06ca\u0005a\u0000\u0000\u06ae\u06af\u0005c\u0000"+ + "\u0000\u06af\u06b0\u0005l\u0000\u0000\u06b0\u06ca\u0005x\u0000\u0000\u06b1"+ + "\u06b2\u0005c\u0000\u0000\u06b2\u06b3\u0005l\u0000\u0000\u06b3\u06ca\u0005"+ + "y\u0000\u0000\u06b4\u06b5\u0005c\u0000\u0000\u06b5\u06b6\u0005s\u0000"+ + "\u0000\u06b6\u06ca\u0005h\u0000\u0000\u06b7\u06b8\u0005s\u0000\u0000\u06b8"+ + "\u06b9\u0005e\u0000\u0000\u06b9\u06ca\u0005t\u0000\u0000\u06ba\u06bb\u0005"+ + "t\u0000\u0000\u06bb\u06bc\u0005s\u0000\u0000\u06bc\u06ca\u0005t\u0000"+ + "\u0000\u06bd\u06be\u0005t\u0000\u0000\u06be\u06bf\u0005i\u0000\u0000\u06bf"+ + "\u06ca\u0005a\u0000\u0000\u06c0\u06c1\u0005t\u0000\u0000\u06c1\u06c2\u0005"+ + "d\u0000\u0000\u06c2\u06ca\u0005d\u0000\u0000\u06c3\u06c4\u0005t\u0000"+ + "\u0000\u06c4\u06c5\u0005i\u0000\u0000\u06c5\u06ca\u0005n\u0000\u0000\u06c6"+ + "\u06c7\u0005t\u0000\u0000\u06c7\u06c8\u0005i\u0000\u0000\u06c8\u06ca\u0005"+ + "i\u0000\u0000\u06c9\u046a\u0001\u0000\u0000\u0000\u06c9\u046d\u0001\u0000"+ + "\u0000\u0000\u06c9\u0470\u0001\u0000\u0000\u0000\u06c9\u0473\u0001\u0000"+ + "\u0000\u0000\u06c9\u0476\u0001\u0000\u0000\u0000\u06c9\u0479\u0001\u0000"+ + "\u0000\u0000\u06c9\u047c\u0001\u0000\u0000\u0000\u06c9\u047f\u0001\u0000"+ + "\u0000\u0000\u06c9\u0482\u0001\u0000\u0000\u0000\u06c9\u0485\u0001\u0000"+ + "\u0000\u0000\u06c9\u0488\u0001\u0000\u0000\u0000\u06c9\u048b\u0001\u0000"+ + "\u0000\u0000\u06c9\u048e\u0001\u0000\u0000\u0000\u06c9\u0491\u0001\u0000"+ + "\u0000\u0000\u06c9\u0494\u0001\u0000\u0000\u0000\u06c9\u0497\u0001\u0000"+ + "\u0000\u0000\u06c9\u049a\u0001\u0000\u0000\u0000\u06c9\u049d\u0001\u0000"+ + "\u0000\u0000\u06c9\u04a0\u0001\u0000\u0000\u0000\u06c9\u04a3\u0001\u0000"+ + "\u0000\u0000\u06c9\u04a6\u0001\u0000\u0000\u0000\u06c9\u04a9\u0001\u0000"+ + "\u0000\u0000\u06c9\u04ac\u0001\u0000\u0000\u0000\u06c9\u04af\u0001\u0000"+ + "\u0000\u0000\u06c9\u04b2\u0001\u0000\u0000\u0000\u06c9\u04b5\u0001\u0000"+ + "\u0000\u0000\u06c9\u04b8\u0001\u0000\u0000\u0000\u06c9\u04bb\u0001\u0000"+ + "\u0000\u0000\u06c9\u04be\u0001\u0000\u0000\u0000\u06c9\u04c1\u0001\u0000"+ + "\u0000\u0000\u06c9\u04c4\u0001\u0000\u0000\u0000\u06c9\u04c7\u0001\u0000"+ + "\u0000\u0000\u06c9\u04ca\u0001\u0000\u0000\u0000\u06c9\u04cd\u0001\u0000"+ + "\u0000\u0000\u06c9\u04d0\u0001\u0000\u0000\u0000\u06c9\u04d3\u0001\u0000"+ + "\u0000\u0000\u06c9\u04d6\u0001\u0000\u0000\u0000\u06c9\u04d9\u0001\u0000"+ + "\u0000\u0000\u06c9\u04dc\u0001\u0000\u0000\u0000\u06c9\u04df\u0001\u0000"+ + "\u0000\u0000\u06c9\u04e2\u0001\u0000\u0000\u0000\u06c9\u04e5\u0001\u0000"+ + "\u0000\u0000\u06c9\u04e8\u0001\u0000\u0000\u0000\u06c9\u04eb\u0001\u0000"+ + "\u0000\u0000\u06c9\u04ee\u0001\u0000\u0000\u0000\u06c9\u04f1\u0001\u0000"+ + "\u0000\u0000\u06c9\u04f4\u0001\u0000\u0000\u0000\u06c9\u04f7\u0001\u0000"+ + "\u0000\u0000\u06c9\u04fa\u0001\u0000\u0000\u0000\u06c9\u04fd\u0001\u0000"+ + "\u0000\u0000\u06c9\u0500\u0001\u0000\u0000\u0000\u06c9\u0503\u0001\u0000"+ + "\u0000\u0000\u06c9\u0506\u0001\u0000\u0000\u0000\u06c9\u0509\u0001\u0000"+ + "\u0000\u0000\u06c9\u050c\u0001\u0000\u0000\u0000\u06c9\u050f\u0001\u0000"+ + "\u0000\u0000\u06c9\u0512\u0001\u0000\u0000\u0000\u06c9\u0515\u0001\u0000"+ + "\u0000\u0000\u06c9\u0518\u0001\u0000\u0000\u0000\u06c9\u051b\u0001\u0000"+ + "\u0000\u0000\u06c9\u051e\u0001\u0000\u0000\u0000\u06c9\u0521\u0001\u0000"+ + "\u0000\u0000\u06c9\u0524\u0001\u0000\u0000\u0000\u06c9\u0527\u0001\u0000"+ + "\u0000\u0000\u06c9\u052a\u0001\u0000\u0000\u0000\u06c9\u052d\u0001\u0000"+ + "\u0000\u0000\u06c9\u0530\u0001\u0000\u0000\u0000\u06c9\u0533\u0001\u0000"+ + "\u0000\u0000\u06c9\u0536\u0001\u0000\u0000\u0000\u06c9\u0539\u0001\u0000"+ + "\u0000\u0000\u06c9\u053c\u0001\u0000\u0000\u0000\u06c9\u053f\u0001\u0000"+ + "\u0000\u0000\u06c9\u0542\u0001\u0000\u0000\u0000\u06c9\u0545\u0001\u0000"+ + "\u0000\u0000\u06c9\u0548\u0001\u0000\u0000\u0000\u06c9\u054c\u0001\u0000"+ + "\u0000\u0000\u06c9\u0550\u0001\u0000\u0000\u0000\u06c9\u0554\u0001\u0000"+ + "\u0000\u0000\u06c9\u0558\u0001\u0000\u0000\u0000\u06c9\u055c\u0001\u0000"+ + "\u0000\u0000\u06c9\u0560\u0001\u0000\u0000\u0000\u06c9\u0564\u0001\u0000"+ + "\u0000\u0000\u06c9\u0568\u0001\u0000\u0000\u0000\u06c9\u056c\u0001\u0000"+ + "\u0000\u0000\u06c9\u0570\u0001\u0000\u0000\u0000\u06c9\u0574\u0001\u0000"+ + "\u0000\u0000\u06c9\u0578\u0001\u0000\u0000\u0000\u06c9\u057c\u0001\u0000"+ + "\u0000\u0000\u06c9\u0580\u0001\u0000\u0000\u0000\u06c9\u0584\u0001\u0000"+ + "\u0000\u0000\u06c9\u0588\u0001\u0000\u0000\u0000\u06c9\u058b\u0001\u0000"+ + "\u0000\u0000\u06c9\u058e\u0001\u0000\u0000\u0000\u06c9\u0591\u0001\u0000"+ + "\u0000\u0000\u06c9\u0594\u0001\u0000\u0000\u0000\u06c9\u0597\u0001\u0000"+ + "\u0000\u0000\u06c9\u059b\u0001\u0000\u0000\u0000\u06c9\u059f\u0001\u0000"+ + "\u0000\u0000\u06c9\u05a3\u0001\u0000\u0000\u0000\u06c9\u05a7\u0001\u0000"+ + "\u0000\u0000\u06c9\u05ab\u0001\u0000\u0000\u0000\u06c9\u05af\u0001\u0000"+ + "\u0000\u0000\u06c9\u05b3\u0001\u0000\u0000\u0000\u06c9\u05b7\u0001\u0000"+ + "\u0000\u0000\u06c9\u05bb\u0001\u0000\u0000\u0000\u06c9\u05bf\u0001\u0000"+ + "\u0000\u0000\u06c9\u05c3\u0001\u0000\u0000\u0000\u06c9\u05c7\u0001\u0000"+ + "\u0000\u0000\u06c9\u05cb\u0001\u0000\u0000\u0000\u06c9\u05cf\u0001\u0000"+ + "\u0000\u0000\u06c9\u05d3\u0001\u0000\u0000\u0000\u06c9\u05d7\u0001\u0000"+ + "\u0000\u0000\u06c9\u05da\u0001\u0000\u0000\u0000\u06c9\u05dd\u0001\u0000"+ + "\u0000\u0000\u06c9\u05e0\u0001\u0000\u0000\u0000\u06c9\u05e3\u0001\u0000"+ + "\u0000\u0000\u06c9\u05e6\u0001\u0000\u0000\u0000\u06c9\u05e9\u0001\u0000"+ + "\u0000\u0000\u06c9\u05ec\u0001\u0000\u0000\u0000\u06c9\u05ef\u0001\u0000"+ + "\u0000\u0000\u06c9\u05f3\u0001\u0000\u0000\u0000\u06c9\u05f6\u0001\u0000"+ + "\u0000\u0000\u06c9\u05f9\u0001\u0000\u0000\u0000\u06c9\u05fd\u0001\u0000"+ + "\u0000\u0000\u06c9\u0600\u0001\u0000\u0000\u0000\u06c9\u0603\u0001\u0000"+ + "\u0000\u0000\u06c9\u0606\u0001\u0000\u0000\u0000\u06c9\u0609\u0001\u0000"+ + "\u0000\u0000\u06c9\u060d\u0001\u0000\u0000\u0000\u06c9\u0610\u0001\u0000"+ + "\u0000\u0000\u06c9\u0613\u0001\u0000\u0000\u0000\u06c9\u0616\u0001\u0000"+ + "\u0000\u0000\u06c9\u061a\u0001\u0000\u0000\u0000\u06c9\u061d\u0001\u0000"+ + "\u0000\u0000\u06c9\u0621\u0001\u0000\u0000\u0000\u06c9\u0624\u0001\u0000"+ + "\u0000\u0000\u06c9\u0628\u0001\u0000\u0000\u0000\u06c9\u062c\u0001\u0000"+ + "\u0000\u0000\u06c9\u062f\u0001\u0000\u0000\u0000\u06c9\u0633\u0001\u0000"+ + "\u0000\u0000\u06c9\u0636\u0001\u0000\u0000\u0000\u06c9\u0639\u0001\u0000"+ + "\u0000\u0000\u06c9\u063c\u0001\u0000\u0000\u0000\u06c9\u0640\u0001\u0000"+ + "\u0000\u0000\u06c9\u0643\u0001\u0000\u0000\u0000\u06c9\u0646\u0001\u0000"+ + "\u0000\u0000\u06c9\u0649\u0001\u0000\u0000\u0000\u06c9\u064d\u0001\u0000"+ + "\u0000\u0000\u06c9\u0650\u0001\u0000\u0000\u0000\u06c9\u0653\u0001\u0000"+ + "\u0000\u0000\u06c9\u0656\u0001\u0000\u0000\u0000\u06c9\u065a\u0001\u0000"+ + "\u0000\u0000\u06c9\u065e\u0001\u0000\u0000\u0000\u06c9\u0662\u0001\u0000"+ + "\u0000\u0000\u06c9\u0666\u0001\u0000\u0000\u0000\u06c9\u066a\u0001\u0000"+ + "\u0000\u0000\u06c9\u066d\u0001\u0000\u0000\u0000\u06c9\u0670\u0001\u0000"+ + "\u0000\u0000\u06c9\u0674\u0001\u0000\u0000\u0000\u06c9\u0677\u0001\u0000"+ + "\u0000\u0000\u06c9\u067a\u0001\u0000\u0000\u0000\u06c9\u067e\u0001\u0000"+ + "\u0000\u0000\u06c9\u0681\u0001\u0000\u0000\u0000\u06c9\u0685\u0001\u0000"+ + "\u0000\u0000\u06c9\u0689\u0001\u0000\u0000\u0000\u06c9\u068d\u0001\u0000"+ + "\u0000\u0000\u06c9\u0690\u0001\u0000\u0000\u0000\u06c9\u0693\u0001\u0000"+ + "\u0000\u0000\u06c9\u0696\u0001\u0000\u0000\u0000\u06c9\u0699\u0001\u0000"+ + "\u0000\u0000\u06c9\u069c\u0001\u0000\u0000\u0000\u06c9\u069f\u0001\u0000"+ + "\u0000\u0000\u06c9\u06a2\u0001\u0000\u0000\u0000\u06c9\u06a5\u0001\u0000"+ + "\u0000\u0000\u06c9\u06a8\u0001\u0000\u0000\u0000\u06c9\u06ab\u0001\u0000"+ + "\u0000\u0000\u06c9\u06ae\u0001\u0000\u0000\u0000\u06c9\u06b1\u0001\u0000"+ + "\u0000\u0000\u06c9\u06b4\u0001\u0000\u0000\u0000\u06c9\u06b7\u0001\u0000"+ + "\u0000\u0000\u06c9\u06ba\u0001\u0000\u0000\u0000\u06c9\u06bd\u0001\u0000"+ + "\u0000\u0000\u06c9\u06c0\u0001\u0000\u0000\u0000\u06c9\u06c3\u0001\u0000"+ + "\u0000\u0000\u06c9\u06c6\u0001\u0000\u0000\u0000\u06ca\u00ec\u0001\u0000"+ + "\u0000\u0000\u06cb\u06cc\u0005#\u0000\u0000\u06cc\u00ee\u0001\u0000\u0000"+ + "\u0000\u06cd\u06ce\u0005:\u0000\u0000\u06ce\u00f0\u0001\u0000\u0000\u0000"+ + "\u06cf\u06d0\u0005,\u0000\u0000\u06d0\u00f2\u0001\u0000\u0000\u0000\u06d1"+ + "\u06d2\u0005(\u0000\u0000\u06d2\u00f4\u0001\u0000\u0000\u0000\u06d3\u06d4"+ + "\u0005)\u0000\u0000\u06d4\u00f6\u0001\u0000\u0000\u0000\u06d5\u06d6\u0005"+ + "[\u0000\u0000\u06d6\u00f8\u0001\u0000\u0000\u0000\u06d7\u06d8\u0005]\u0000"+ + "\u0000\u06d8\u00fa\u0001\u0000\u0000\u0000\u06d9\u06da\u0005.\u0000\u0000"+ + "\u06da\u00fc\u0001\u0000\u0000\u0000\u06db\u06dc\u0005<\u0000\u0000\u06dc"+ + "\u06dd\u0005<\u0000\u0000\u06dd\u00fe\u0001\u0000\u0000\u0000\u06de\u06df"+ + "\u0005>\u0000\u0000\u06df\u06e0\u0005>\u0000\u0000\u06e0\u0100\u0001\u0000"+ + "\u0000\u0000\u06e1\u06e2\u0005+\u0000\u0000\u06e2\u0102\u0001\u0000\u0000"+ + "\u0000\u06e3\u06e4\u0005-\u0000\u0000\u06e4\u0104\u0001\u0000\u0000\u0000"+ + "\u06e5\u06e6\u0005<\u0000\u0000\u06e6\u0106\u0001\u0000\u0000\u0000\u06e7"+ + "\u06e8\u0005>\u0000\u0000\u06e8\u0108\u0001\u0000\u0000\u0000\u06e9\u06ea"+ + "\u0005*\u0000\u0000\u06ea\u010a\u0001\u0000\u0000\u0000\u06eb\u06ec\u0005"+ + "/\u0000\u0000\u06ec\u010c\u0001\u0000\u0000\u0000\u06ed\u06ee\u0005{\u0000"+ + "\u0000\u06ee\u06ef\u0006\u0085\u0007\u0000\u06ef\u010e\u0001\u0000\u0000"+ + "\u0000\u06f0\u06f1\u0005}\u0000\u0000\u06f1\u06f2\u0006\u0086\b\u0000"+ + "\u06f2\u0110\u0001\u0000\u0000\u0000\u06f3\u06f6\u0003\u0113\u0088\u0000"+ + "\u06f4\u06f6\u0003\u011b\u008c\u0000\u06f5\u06f3\u0001\u0000\u0000\u0000"+ + "\u06f5\u06f4\u0001\u0000\u0000\u0000\u06f6\u0112\u0001\u0000\u0000\u0000"+ + "\u06f7\u06fb\u0003\u0115\u0089\u0000\u06f8\u06fb\u0003\u0117\u008a\u0000"+ + "\u06f9\u06fb\u0003\u0119\u008b\u0000\u06fa\u06f7\u0001\u0000\u0000\u0000"+ + "\u06fa\u06f8\u0001\u0000\u0000\u0000\u06fa\u06f9\u0001\u0000\u0000\u0000"+ + "\u06fb\u0114\u0001\u0000\u0000\u0000\u06fc\u0700\u0005%\u0000\u0000\u06fd"+ + "\u06ff\u0003\u0123\u0090\u0000\u06fe\u06fd\u0001\u0000\u0000\u0000\u06ff"+ + "\u0702\u0001\u0000\u0000\u0000\u0700\u06fe\u0001\u0000\u0000\u0000\u0700"+ + "\u0701\u0001\u0000\u0000\u0000\u0701\u0703\u0001\u0000\u0000\u0000\u0702"+ + "\u0700\u0001\u0000\u0000\u0000\u0703\u0705\u0005.\u0000\u0000\u0704\u0706"+ + "\u0003\u0123\u0090\u0000\u0705\u0704\u0001\u0000\u0000\u0000\u0706\u0707"+ + "\u0001\u0000\u0000\u0000\u0707\u0705\u0001\u0000\u0000\u0000\u0707\u0708"+ + "\u0001\u0000\u0000\u0000\u0708\u0116\u0001\u0000\u0000\u0000\u0709\u070b"+ + "\u0003\u0125\u0091\u0000\u070a\u0709\u0001\u0000\u0000\u0000\u070b\u070e"+ + "\u0001\u0000\u0000\u0000\u070c\u070a\u0001\u0000\u0000\u0000\u070c\u070d"+ + "\u0001\u0000\u0000\u0000\u070d\u070f\u0001\u0000\u0000\u0000\u070e\u070c"+ + "\u0001\u0000\u0000\u0000\u070f\u0711\u0005.\u0000\u0000\u0710\u0712\u0003"+ + "\u0125\u0091\u0000\u0711\u0710\u0001\u0000\u0000\u0000\u0712\u0713\u0001"+ + "\u0000\u0000\u0000\u0713\u0711\u0001\u0000\u0000\u0000\u0713\u0714\u0001"+ + "\u0000\u0000\u0000\u0714\u0118\u0001\u0000\u0000\u0000\u0715\u0719\u0005"+ + "$\u0000\u0000\u0716\u0718\u0003\u0127\u0092\u0000\u0717\u0716\u0001\u0000"+ + "\u0000\u0000\u0718\u071b\u0001\u0000\u0000\u0000\u0719\u0717\u0001\u0000"+ + "\u0000\u0000\u0719\u071a\u0001\u0000\u0000\u0000\u071a\u071c\u0001\u0000"+ + "\u0000\u0000\u071b\u0719\u0001\u0000\u0000\u0000\u071c\u071e\u0005.\u0000"+ + "\u0000\u071d\u071f\u0003\u0127\u0092\u0000\u071e\u071d\u0001\u0000\u0000"+ + "\u0000\u071f\u0720\u0001\u0000\u0000\u0000\u0720\u071e\u0001\u0000\u0000"+ + "\u0000\u0720\u0721\u0001\u0000\u0000\u0000\u0721\u011a\u0001\u0000\u0000"+ + "\u0000\u0722\u0726\u0003\u011f\u008e\u0000\u0723\u0726\u0003\u0121\u008f"+ + "\u0000\u0724\u0726\u0003\u011d\u008d\u0000\u0725\u0722\u0001\u0000\u0000"+ + "\u0000\u0725\u0723\u0001\u0000\u0000\u0000\u0725\u0724\u0001\u0000\u0000"+ + "\u0000\u0726\u011c\u0001\u0000\u0000\u0000\u0727\u0729\u0005%\u0000\u0000"+ + "\u0728\u072a\u0003\u0123\u0090\u0000\u0729\u0728\u0001\u0000\u0000\u0000"+ + "\u072a\u072b\u0001\u0000\u0000\u0000\u072b\u0729\u0001\u0000\u0000\u0000"+ + "\u072b\u072c\u0001\u0000\u0000\u0000\u072c\u011e\u0001\u0000\u0000\u0000"+ + "\u072d\u072f\u0003\u0125\u0091\u0000\u072e\u072d\u0001\u0000\u0000\u0000"+ + "\u072f\u0730\u0001\u0000\u0000\u0000\u0730\u072e\u0001\u0000\u0000\u0000"+ + "\u0730\u0731\u0001\u0000\u0000\u0000\u0731\u0120\u0001\u0000\u0000\u0000"+ + "\u0732\u0734\u0005$\u0000\u0000\u0733\u0735\u0003\u0127\u0092\u0000\u0734"+ + "\u0733\u0001\u0000\u0000\u0000\u0735\u0736\u0001\u0000\u0000\u0000\u0736"+ + "\u0734\u0001\u0000\u0000\u0000\u0736\u0737\u0001\u0000\u0000\u0000\u0737"+ + "\u0122\u0001\u0000\u0000\u0000\u0738\u0739\u0007\u0004\u0000\u0000\u0739"+ + "\u0124\u0001\u0000\u0000\u0000\u073a\u073b\u0007\u0005\u0000\u0000\u073b"+ + "\u0126\u0001\u0000\u0000\u0000\u073c\u073d\u0007\u0006\u0000\u0000\u073d"+ + "\u0128\u0001\u0000\u0000\u0000\u073e\u0742\u0005\'\u0000\u0000\u073f\u0740"+ + "\u0005\\\u0000\u0000\u0740\u0743\u0007\u0012\u0000\u0000\u0741\u0743\b"+ + "\u000f\u0000\u0000\u0742\u073f\u0001\u0000\u0000\u0000\u0742\u0741\u0001"+ + "\u0000\u0000\u0000\u0743\u0744\u0001\u0000\u0000\u0000\u0744\u0745\u0005"+ + "\'\u0000\u0000\u0745\u012a\u0001\u0000\u0000\u0000\u0746\u0748\u0003\u012d"+ + "\u0095\u0000\u0747\u0749\u0007\u0013\u0000\u0000\u0748\u0747\u0001\u0000"+ + "\u0000\u0000\u0749\u074a\u0001\u0000\u0000\u0000\u074a\u0748\u0001\u0000"+ + "\u0000\u0000\u074a\u074b\u0001\u0000\u0000\u0000\u074b\u012c\u0001\u0000"+ + "\u0000\u0000\u074c\u0750\u0005!\u0000\u0000\u074d\u074f\u0003\u0133\u0098"+ + "\u0000\u074e\u074d\u0001\u0000\u0000\u0000\u074f\u0752\u0001\u0000\u0000"+ + "\u0000\u0750\u074e\u0001\u0000\u0000\u0000\u0750\u0751\u0001\u0000\u0000"+ + "\u0000\u0751\u012e\u0001\u0000\u0000\u0000\u0752\u0750\u0001\u0000\u0000"+ + "\u0000\u0753\u0757\u0003\u0131\u0097\u0000\u0754\u0756\u0003\u0133\u0098"+ + "\u0000\u0755\u0754\u0001\u0000\u0000\u0000\u0756\u0759\u0001\u0000\u0000"+ + "\u0000\u0757\u0755\u0001\u0000\u0000\u0000\u0757\u0758\u0001\u0000\u0000"+ + "\u0000\u0758\u0130\u0001\u0000\u0000\u0000\u0759\u0757\u0001\u0000\u0000"+ + "\u0000\u075a\u075b\u0007\u0007\u0000\u0000\u075b\u0132\u0001\u0000\u0000"+ + "\u0000\u075c\u075d\u0007\b\u0000\u0000\u075d\u0134\u0001\u0000\u0000\u0000"+ + "\u075e\u075f\u0005@\u0000\u0000\u075f\u0760\u0003\u012f\u0096\u0000\u0760"+ + "\u0136\u0001\u0000\u0000\u0000\u0761\u0763\u0007\u0010\u0000\u0000\u0762"+ + "\u0761\u0001\u0000\u0000\u0000\u0763\u0764\u0001\u0000\u0000\u0000\u0764"+ + "\u0762\u0001\u0000\u0000\u0000\u0764\u0765\u0001\u0000\u0000\u0000\u0765"+ + "\u0766\u0001\u0000\u0000\u0000\u0766\u0767\u0006\u009a\u0005\u0000\u0767"+ + "\u0138\u0001\u0000\u0000\u0000\u0768\u0769\u0005/\u0000\u0000\u0769\u076a"+ + "\u0005/\u0000\u0000\u076a\u076e\u0001\u0000\u0000\u0000\u076b\u076d\b"+ + "\u0011\u0000\u0000\u076c\u076b\u0001\u0000\u0000\u0000\u076d\u0770\u0001"+ + "\u0000\u0000\u0000\u076e\u076c\u0001\u0000\u0000\u0000\u076e\u076f\u0001"+ + "\u0000\u0000\u0000\u076f\u0771\u0001\u0000\u0000\u0000\u0770\u076e\u0001"+ + "\u0000\u0000\u0000\u0771\u0772\u0006\u009b\u0006\u0000\u0772\u013a\u0001"+ + "\u0000\u0000\u0000\u0773\u0774\u0005/\u0000\u0000\u0774\u0775\u0005*\u0000"+ + "\u0000\u0775\u0779\u0001\u0000\u0000\u0000\u0776\u0778\t\u0000\u0000\u0000"+ + "\u0777\u0776\u0001\u0000\u0000\u0000\u0778\u077b\u0001\u0000\u0000\u0000"+ + "\u0779\u077a\u0001\u0000\u0000\u0000\u0779\u0777\u0001\u0000\u0000\u0000"+ + "\u077a\u077c\u0001\u0000\u0000\u0000\u077b\u0779\u0001\u0000\u0000\u0000"+ + "\u077c\u077d\u0005*\u0000\u0000\u077d\u077e\u0005/\u0000\u0000\u077e\u077f"+ + "\u0001\u0000\u0000\u0000\u077f\u0780\u0006\u009c\u0006\u0000\u0780\u013c"+ + "\u0001\u0000\u0000\u0000\u0781\u0783\u0005<\u0000\u0000\u0782\u0784\u0007"+ + "\u0014\u0000\u0000\u0783\u0782\u0001\u0000\u0000\u0000\u0784\u0785\u0001"+ + "\u0000\u0000\u0000\u0785\u0783\u0001\u0000\u0000\u0000\u0785\u0786\u0001"+ + "\u0000\u0000\u0000\u0786\u0787\u0001\u0000\u0000\u0000\u0787\u0788\u0005"+ + ">\u0000\u0000\u0788\u0789\u0006\u009d\t\u0000\u0789\u013e\u0001\u0000"+ + "\u0000\u0000\u078a\u0790\u0005\"\u0000\u0000\u078b\u078c\u0005\\\u0000"+ + "\u0000\u078c\u078f\u0005\"\u0000\u0000\u078d\u078f\b\t\u0000\u0000\u078e"+ + "\u078b\u0001\u0000\u0000\u0000\u078e\u078d\u0001\u0000\u0000\u0000\u078f"+ + "\u0792\u0001\u0000\u0000\u0000\u0790\u078e\u0001\u0000\u0000\u0000\u0790"+ + "\u0791\u0001\u0000\u0000\u0000\u0791\u0793\u0001\u0000\u0000\u0000\u0792"+ + "\u0790\u0001\u0000\u0000\u0000\u0793\u0794\u0005\"\u0000\u0000\u0794\u0795"+ + "\u0006\u009e\n\u0000\u0795\u0140\u0001\u0000\u0000\u0000\u0796\u0798\u0007"+ + "\u0010\u0000\u0000\u0797\u0796\u0001\u0000\u0000\u0000\u0798\u0799\u0001"+ + "\u0000\u0000\u0000\u0799\u0797\u0001\u0000\u0000\u0000\u0799\u079a\u0001"+ + "\u0000\u0000\u0000\u079a\u079b\u0001\u0000\u0000\u0000\u079b\u079c\u0006"+ + "\u009f\u0005\u0000\u079c\u0142\u0001\u0000\u0000\u0000\u079d\u079e\u0005"+ + "/\u0000\u0000\u079e\u079f\u0005/\u0000\u0000\u079f\u07a3\u0001\u0000\u0000"+ + "\u0000\u07a0\u07a2\b\u0011\u0000\u0000\u07a1\u07a0\u0001\u0000\u0000\u0000"+ + "\u07a2\u07a5\u0001\u0000\u0000\u0000\u07a3\u07a1\u0001\u0000\u0000\u0000"+ + "\u07a3\u07a4\u0001\u0000\u0000\u0000\u07a4\u07a6\u0001\u0000\u0000\u0000"+ + "\u07a5\u07a3\u0001\u0000\u0000\u0000\u07a6\u07a7\u0006\u00a0\u0006\u0000"+ + "\u07a7\u0144\u0001\u0000\u0000\u0000\u07a8\u07a9\u0005/\u0000\u0000\u07a9"+ + "\u07aa\u0005*\u0000\u0000\u07aa\u07ae\u0001\u0000\u0000\u0000\u07ab\u07ad"+ + "\t\u0000\u0000\u0000\u07ac\u07ab\u0001\u0000\u0000\u0000\u07ad\u07b0\u0001"+ + "\u0000\u0000\u0000\u07ae\u07af\u0001\u0000\u0000\u0000\u07ae\u07ac\u0001"+ + "\u0000\u0000\u0000\u07af\u07b1\u0001\u0000\u0000\u0000\u07b0\u07ae\u0001"+ + "\u0000\u0000\u0000\u07b1\u07b2\u0005*\u0000\u0000\u07b2\u07b3\u0005/\u0000"+ + "\u0000\u07b3\u07b4\u0001\u0000\u0000\u0000\u07b4\u07b5\u0006\u00a1\u0006"+ + "\u0000\u07b5\u0146\u0001\u0000\u0000\u0000C\u0000\u0001\u0002\u01b4\u0273"+ + "\u0324\u032f\u0337\u0367\u03a5\u03aa\u03b1\u03b6\u03bd\u03c2\u03c9\u03d0"+ + "\u03d5\u03dc\u03e1\u03e6\u03ed\u03f3\u03f5\u03fa\u0401\u0406\u0412\u041f"+ + "\u0421\u0426\u042a\u042c\u042f\u0435\u0438\u043d\u0440\u0447\u0451\u045c"+ + "\u06c9\u06f5\u06fa\u0700\u0707\u070c\u0713\u0719\u0720\u0725\u072b\u0730"+ + "\u0736\u0742\u074a\u0750\u0757\u0764\u076e\u0779\u0785\u078e\u0790\u0799"+ + "\u07a3\u07ae\u000b\u0001\u0000\u0000\u0001B\u0001\u0001P\u0002\u0001Q"+ + "\u0003\u0001k\u0004\u0000\u0001\u0000\u0000\u0002\u0000\u0001\u0085\u0005"+ + "\u0001\u0086\u0006\u0001\u009d\u0007\u0001\u009e\b"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/gen/KickCLexer.tokens b/gen/KickCLexer.tokens new file mode 100644 index 000000000..4d0aace39 --- /dev/null +++ b/gen/KickCLexer.tokens @@ -0,0 +1,225 @@ +TYPEDEFNAME=1 +CURLY_BEGIN=2 +CURLY_END=3 +BRACKET_BEGIN=4 +BRACKET_END=5 +PAR_BEGIN=6 +PAR_END=7 +SEMICOLON=8 +COLON=9 +COMMA=10 +RANGE=11 +PARAM_LIST=12 +CONDITION=13 +DOT=14 +ARROW=15 +PLUS=16 +MINUS=17 +ASTERISK=18 +DIVIDE=19 +MODULO=20 +INC=21 +DEC=22 +AND=23 +BIT_NOT=24 +BIT_XOR=25 +BIT_OR=26 +SHIFT_LEFT=27 +SHIFT_RIGHT=28 +EQUAL=29 +NOT_EQUAL=30 +LESS_THAN=31 +LESS_THAN_EQUAL=32 +GREATER_THAN_EQUAL=33 +GREATER_THAN=34 +LOGIC_AND=35 +LOGIC_OR=36 +ASSIGN=37 +ASSIGN_COMPOUND=38 +TYPEDEF=39 +CONST=40 +EXTERN=41 +EXPORT=42 +ALIGN=43 +INLINE=44 +VOLATILE=45 +STATIC=46 +INTERRUPT=47 +REGISTER=48 +LOCAL_RESERVE=49 +ADDRESS=50 +ADDRESS_ZEROPAGE=51 +ADDRESS_MAINMEM=52 +FAR=53 +FORM_SSA=54 +FORM_MA=55 +INTRINSIC=56 +CALLINGCONVENTION=57 +IF=58 +ELSE=59 +WHILE=60 +DO=61 +FOR=62 +SWITCH=63 +RETURN=64 +BREAK=65 +CONTINUE=66 +GOTO=67 +ASM=68 +DEFAULT=69 +CASE=70 +STRUCT=71 +UNION=72 +ENUM=73 +SIZEOF=74 +TYPEID=75 +DEFINED=76 +KICKASM=77 +LOGIC_NOT=78 +SIMPLETYPE=79 +BOOLEAN=80 +KICKASM_BODY=81 +IMPORT=82 +INCLUDE=83 +PRAGMA=84 +DEFINE=85 +DEFINE_CONTINUE=86 +UNDEF=87 +IFDEF=88 +IFNDEF=89 +IFIF=90 +ELIF=91 +IFELSE=92 +ENDIF=93 +ERROR=94 +TOKEN_STRINGIZE=95 +TOKEN_MERGE=96 +NUMBER=97 +NUMFLOAT=98 +BINFLOAT=99 +DECFLOAT=100 +HEXFLOAT=101 +NUMINT=102 +BININTEGER=103 +DECINTEGER=104 +HEXINTEGER=105 +NAME=106 +STRING=107 +CHAR=108 +WS=109 +COMMENT_LINE=110 +COMMENT_BLOCK=111 +ASM_BYTE=112 +ASM_MNEMONIC=113 +ASM_IMM=114 +ASM_COLON=115 +ASM_COMMA=116 +ASM_PAR_BEGIN=117 +ASM_PAR_END=118 +ASM_BRACKET_BEGIN=119 +ASM_BRACKET_END=120 +ASM_DOT=121 +ASM_SHIFT_LEFT=122 +ASM_SHIFT_RIGHT=123 +ASM_PLUS=124 +ASM_MINUS=125 +ASM_LESS_THAN=126 +ASM_GREATER_THAN=127 +ASM_MULTIPLY=128 +ASM_DIVIDE=129 +ASM_CURLY_BEGIN=130 +ASM_CURLY_END=131 +ASM_NUMBER=132 +ASM_NUMFLOAT=133 +ASM_BINFLOAT=134 +ASM_DECFLOAT=135 +ASM_HEXFLOAT=136 +ASM_NUMINT=137 +ASM_BININTEGER=138 +ASM_DECINTEGER=139 +ASM_HEXINTEGER=140 +ASM_CHAR=141 +ASM_MULTI_REL=142 +ASM_MULTI_NAME=143 +ASM_NAME=144 +ASM_TAG=145 +ASM_WS=146 +ASM_COMMENT_LINE=147 +ASM_COMMENT_BLOCK=148 +IMPORT_SYSTEMFILE=149 +IMPORT_LOCALFILE=150 +IMPORT_WS=151 +IMPORT_COMMENT_LINE=152 +IMPORT_COMMENT_BLOCK=153 +';'=8 +'..'=11 +'...'=12 +'?'=13 +'->'=15 +'%'=20 +'++'=21 +'--'=22 +'&'=23 +'~'=24 +'^'=25 +'|'=26 +'=='=29 +'!='=30 +'<='=32 +'>='=33 +'&&'=35 +'||'=36 +'='=37 +'typedef'=39 +'const'=40 +'extern'=41 +'__export'=42 +'__align'=43 +'inline'=44 +'volatile'=45 +'static'=46 +'__interrupt'=47 +'register'=48 +'__zp_reserve'=49 +'__address'=50 +'__zp'=51 +'__mem'=52 +'__far'=53 +'__ssa'=54 +'__ma'=55 +'__intrinsic'=56 +'if'=58 +'else'=59 +'while'=60 +'do'=61 +'for'=62 +'switch'=63 +'return'=64 +'break'=65 +'continue'=66 +'goto'=67 +'asm'=68 +'default'=69 +'case'=70 +'struct'=71 +'union'=72 +'enum'=73 +'sizeof'=74 +'typeid'=75 +'defined'=76 +'kickasm'=77 +'!'=78 +'#import'=82 +'#include'=83 +'#pragma'=84 +'#define'=85 +'#undef'=87 +'#ifdef'=88 +'#ifndef'=89 +'#if'=90 +'#elif'=91 +'#else'=92 +'#endif'=93 +'#error'=94 +'.byte'=112 +'#'=114 diff --git a/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 b/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 index b6828d097..b7662e69e 100644 --- a/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 +++ b/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 @@ -75,6 +75,7 @@ LOCAL_RESERVE: '__zp_reserve' ; ADDRESS: '__address' ; ADDRESS_ZEROPAGE: '__zp' ; ADDRESS_MAINMEM: '__mem' ; +FAR: '__far' ; FORM_SSA: '__ssa' ; FORM_MA: '__ma' ; INTRINSIC: '__intrinsic' ; diff --git a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 index 3084bc0c8..4b61311bf 100644 --- a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 +++ b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 @@ -161,6 +161,7 @@ directive | EXTERN #directiveExtern | EXPORT #directiveExport | INLINE #directiveInline + | FAR PAR_BEGIN ( NUMBER ) PAR_END #directiveFar | INTRINSIC #directiveIntrinsic | INTERRUPT ( PAR_BEGIN NAME PAR_END )? #directiveInterrupt | LOCAL_RESERVE PAR_BEGIN pragmaParam ( COMMA pragmaParam )* PAR_END #directiveReserveZp diff --git a/src/main/fragment/mos6502-common/call_far_cx16_entry.asm b/src/main/fragment/mos6502-common/call_far_cx16_entry.asm new file mode 100644 index 000000000..661d162d6 --- /dev/null +++ b/src/main/fragment/mos6502-common/call_far_cx16_entry.asm @@ -0,0 +1,4 @@ +jsr $FF6E // https://github.com/commanderx16/x16-docs/blob/master/X16%20Reference%20-%2004%20-%20KERNAL.md#function-name-jsrfar +.byte <{la1} +.byte >{la1} +.byte {c1} diff --git a/src/main/fragment/mos6502-common/call_far_cx16_exit.asm b/src/main/fragment/mos6502-common/call_far_cx16_exit.asm new file mode 100644 index 000000000..e69de29bb diff --git a/src/main/java/dk/camelot64/kickc/Compiler.java b/src/main/java/dk/camelot64/kickc/Compiler.java index cc8b197cd..3fc36c85c 100644 --- a/src/main/java/dk/camelot64/kickc/Compiler.java +++ b/src/main/java/dk/camelot64/kickc/Compiler.java @@ -278,6 +278,7 @@ public class Compiler { getLog().append(program.getGraph().toString(program)); } new Pass1ProcedureInline(program).execute(); + new Pass1ProcedureFar(program).execute(); // Implements far calls to procedures defined in a bank. new PassNStatementIndices(program).step(); program.clearCallGraph(); new Pass1AssertNoRecursion(program).execute(); diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java index 38701f530..d61e82d9a 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java @@ -12,6 +12,7 @@ import dk.camelot64.kickc.model.types.SymbolType; import dk.camelot64.kickc.model.values.*; import dk.camelot64.kickc.parser.KickCParser; import dk.camelot64.kickc.parser.KickCParserBaseVisitor; +import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.TerminalNode; import java.util.ArrayList; @@ -250,9 +251,13 @@ public class AsmFragmentInstance { @Override public Object visitAsmBytes(KickCParser.AsmBytesContext ctx) { + List asmExpr = ctx.asmExpr(); ArrayList values = new ArrayList<>(); - for(int i = 1; i < ctx.getChildCount(); i = i + 2) { - values.add(ctx.getChild(i).getText()); + for(int i = 0; i < asmExpr.size(); i++) { + if(asmExpr.get(i) != null) { + AsmParameter par = (AsmParameter)this.visit(asmExpr.get(i)); + values.add(par.getParam()); + } } AsmDataNumeric data = new AsmDataNumeric(null, AsmDataNumeric.Type.BYTE, values); handleTags(data, ctx.ASM_TAG()); diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java index 6ab66739f..66aace3b8 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java @@ -18,6 +18,7 @@ import dk.camelot64.kickc.model.symbols.Symbol; import dk.camelot64.kickc.model.types.SymbolType; import dk.camelot64.kickc.model.types.SymbolTypeInference; import dk.camelot64.kickc.model.values.*; +import kickass.pass.values.StringValue; /** * Creates an ASM Fragment specification for a statement in the control flow graph. @@ -41,6 +42,40 @@ final public class AsmFragmentInstanceSpecBuilder { return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); } + /** + * Create a fragment instance spec factory for a far call entry + * + * @param call The statement call + * @param program The program + * @return the fragment instance spec factory + */ + public static AsmFragmentInstanceSpec farCallEntry(StatementCall call, Program program) { + AsmFragmentBindings bindings = new AsmFragmentBindings(program); + AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(call.getBankFar(), program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.EntryExit.Entry); + ScopeRef codeScope = program.getScope().getRef(); +// ScopeRef codeScope = program.getStatementInfos().getBlock(call).getScope(); + bindings.bind("c1", new ConstantInteger(call.getBankFar())); + bindings.bind("la1", new LabelRef(call.getProcedure().getFullName())); + return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); + } + + /** + * Create a fragment instance spec factory for a far call exit + * + * @param call The statement call + * @param program The program + * @return the fragment instance spec factory + */ + public static AsmFragmentInstanceSpec farCallExit(StatementCall call, Program program) { + AsmFragmentBindings bindings = new AsmFragmentBindings(program); + AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(call.getBankFar(), program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.EntryExit.Exit); + ScopeRef codeScope = program.getStatementInfos().getBlock(call).getScope(); + bindings.bind("la1", new LabelRef(codeScope.getFullName())); + bindings.bind("la2", new ConstantInteger(call.getBankFar())); + return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); + } + + /** * Create a fragment instance spec factory for an interrupt routine entry * diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplate.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplate.java index 94f2aa4b8..150d8de48 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplate.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplate.java @@ -143,6 +143,7 @@ public class AsmFragmentTemplate { if(signature.contains("c6")) bindings.put("c6", new ConstantInteger(360L)); if(signature.contains("la1")) bindings.put("la1", new Label("@1", scope, true)); if(signature.startsWith("call_")) bindings.put("la1", new Label("@1", scope, true)); + if(signature.startsWith("call_")) bindings.put("c1", new ConstantInteger(400L)); AsmFragmentInstance fragmentInstance = new AsmFragmentInstance(new Program(), signature, ScopeRef.ROOT, this, bindings); AsmProgram asm = new AsmProgram(targetCpu); diff --git a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java index 33982bc5c..28797a17d 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java +++ b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java @@ -70,6 +70,34 @@ public interface AsmFragmentSignature { } } + /** + * ASM fragment signature for a far jsr if(A) goto B. + */ + class CallFar implements AsmFragmentSignature { + + final private Long bankFar; + final private String targetPlatform; + + public enum EntryExit { + Exit, + Entry + } + + final private CallFar.EntryExit entryExit; + + + public CallFar(Long bankFar, String targetPlatform, CallFar.EntryExit entryExit) { + this.bankFar = bankFar; + this.targetPlatform = targetPlatform; + this.entryExit = entryExit; + } + + @Override + public String getName() { + return "call_far" + "_" + targetPlatform + "_" + entryExit.name().toLowerCase(); + } + } + /** * ASM fragment signature for a conditional jump if(A) goto B. */ diff --git a/src/main/java/dk/camelot64/kickc/model/Directive.java b/src/main/java/dk/camelot64/kickc/model/Directive.java index 968153e0c..f8f842a63 100644 --- a/src/main/java/dk/camelot64/kickc/model/Directive.java +++ b/src/main/java/dk/camelot64/kickc/model/Directive.java @@ -43,6 +43,18 @@ public class Directive { public Inline() { super("inline"); } } + /** Function declared far. */ + static public class Far extends Directive { + + public Long bankFar; + + public Far(Long bankFar) { + super("__far"); + this.bankFar = bankFar; + } + + } + /** Function declared intrinsic. */ public static class Intrinsic extends Directive { public Intrinsic() { super("intrinsic"); } diff --git a/src/main/java/dk/camelot64/kickc/model/statements/StatementCall.java b/src/main/java/dk/camelot64/kickc/model/statements/StatementCall.java index db5563d05..5c941f835 100644 --- a/src/main/java/dk/camelot64/kickc/model/statements/StatementCall.java +++ b/src/main/java/dk/camelot64/kickc/model/statements/StatementCall.java @@ -28,6 +28,8 @@ public class StatementCall extends StatementBase implements StatementLValue, Sta private List parameters; /** This is the initial assignment of the lValue. */ private boolean initialAssignment; + /** This contains the far call parameters */ + private Long bankFar; public StatementCall(LValue lValue, String procedureName, List parameters, StatementSource source, List comments) { super(source, comments); @@ -64,6 +66,12 @@ public class StatementCall extends StatementBase implements StatementLValue, Sta this.parameters = parameters; } + public void setBankFar(Long bankFar) { + this.bankFar = bankFar; + } + + public Long getBankFar() { return this.bankFar; } + public int getNumParameters() { return parameters.size(); } 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 71e1b667c..7c375e71c 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -25,6 +25,10 @@ public class Procedure extends Scope { private boolean variableLengthParameterList; /** true if the procedure is declared inline. */ private boolean declaredInline; + /** true if the procedure is declared far. */ + private boolean declaredFar; + /** contains the far bank. */ + private Long bankFar; /** 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. */ @@ -52,6 +56,8 @@ public class Procedure extends Scope { /** The method for passing parameters and return value to the procedure. */ public enum CallingConvention { + /** Far call in a cx16 bank using the https://github.com/commanderx16/x16-docs/blob/master/X16%20Reference%20-%2004%20-%20KERNAL.md#function-name-jsrfar routine*/ + FAR_CALL("__far"), /** Parameters and return value handled through PHI-transitions. */ PHI_CALL("__phicall"), /** Parameters and return value over the stack. */ @@ -89,6 +95,8 @@ public class Procedure extends Scope { super(name, parentScope, dataSegment); this.procedureType = procedureType; this.declaredInline = false; + this.declaredFar = false; + this.bankFar = 0L; this.interruptType = null; this.comments = new ArrayList<>(); this.codeSegment = codeSegment; @@ -198,6 +206,20 @@ public class Procedure extends Scope { this.declaredInline = declaredInline; } + public boolean isDeclaredFar() { + return declaredFar; + } + + public void setDeclaredFar(boolean declaredFar) { + this.declaredFar = declaredFar; + } + + public Long getBankFar() { return this.bankFar; } + + public void setBankFar(Long bankFar) { + this.bankFar = bankFar; + } + public String getInterruptType() { return interruptType; } @@ -258,6 +280,9 @@ public class Procedure extends Scope { if(declaredIntrinsic) { res.append("__intrinsic "); } + if(declaredFar) { + res.append("__far(").append("bank").append(") "); + } if(!callingConvention.equals(CallingConvention.PHI_CALL)) { res.append(getCallingConvention().getName()).append(" "); } @@ -296,6 +321,7 @@ public class Procedure extends Scope { Procedure procedure = (Procedure) o; return variableLengthParameterList == procedure.variableLengthParameterList && declaredInline == procedure.declaredInline && + declaredFar == procedure.declaredFar && declaredIntrinsic == procedure.declaredIntrinsic && isConstructor == procedure.isConstructor && Objects.equals(procedureType, procedure.procedureType) && diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 50a51154a..e1e977743 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -1170,6 +1170,9 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor 1) { + bankFar = Long.valueOf(ctx.getChild(2).getText()); + } else { + bankFar = 0L; + } + return new Directive.Far(bankFar); + } + @Override public Object visitDirectiveIntrinsic(KickCParser.DirectiveIntrinsicContext ctx) { return new Directive.Intrinsic(); diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass1ProcedureFar.java b/src/main/java/dk/camelot64/kickc/passes/Pass1ProcedureFar.java new file mode 100644 index 000000000..a74f5eed0 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/passes/Pass1ProcedureFar.java @@ -0,0 +1,71 @@ +package dk.camelot64.kickc.passes; + +import dk.camelot64.kickc.model.InternalError; +import dk.camelot64.kickc.model.*; +import dk.camelot64.kickc.model.iterator.ProgramValue; +import dk.camelot64.kickc.model.iterator.ProgramValueHandler; +import dk.camelot64.kickc.model.iterator.ProgramValueIterator; +import dk.camelot64.kickc.model.statements.*; +import dk.camelot64.kickc.model.symbols.*; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.values.*; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.ListIterator; + +/** Pass that modifies a control flow graph to far call any procedures declared as far */ +public class Pass1ProcedureFar extends Pass1Base { + + public Pass1ProcedureFar(Program program) { + super(program); + } + + @Override + public boolean step() { + List allBlocks = getGraph().getAllBlocks(); + ListIterator blocksIt = allBlocks.listIterator(); + while(blocksIt.hasNext()) { + ControlFlowBlock block = blocksIt.next(); + List blockStatements = block.getStatements(); + ListIterator statementsIt = blockStatements.listIterator(); + while(statementsIt.hasNext()) { + Statement statement = statementsIt.next(); + if(statement instanceof StatementCall) { + StatementCall call = (StatementCall) statement; + ProcedureRef procedureRef = call.getProcedure(); + Procedure procedure = getScope().getProcedure(procedureRef); + if(procedure.isDeclaredFar()) { + if(procedure.getInterruptType()!=null) { + throw new CompileError("Error! Interrupts cannot be far called. "+procedure.getRef().toString()); + } + farProcedureCall(call, procedure, statementsIt, block, blocksIt); + // Exit and restart + return false; + } + } + } + } + return false; + } + + /** + * Inline a specific call to a procedure. + * + * @param call The call to the far procedure + * @param procedure The procedure being called + * @param statementsIt The statement iterator pointing to the call statement + * @param block The block containing the call + * @param blocksIt The block iterator pointing to the block containing the call + */ + private void farProcedureCall(StatementCall call, Procedure procedure, ListIterator statementsIt, ControlFlowBlock block, ListIterator blocksIt) { + Scope callScope = getScope().getScope(block.getScope()); + // Here we add to the call the properties to build a far call depending on the platform. + // The all properties have been entered in the __far() directive in the source code. + // These properties are then used in pass4 of the compiler, to build the platform dependent fragment to execute the far call. + + call.setBankFar(procedure.getBankFar()); + getLog().append("Far call " + call.toString(getProgram(), false)); + } +} diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 681c1ea06..1ba4a73e4 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -865,9 +865,22 @@ public class Pass4CodeGeneration { genBlockPhiTransition(asm, block, callSuccessor, block.getScope()); } } - asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); + if(procedure.isDeclaredFar()) { + // Generate ASM for a call (in a bank or other) + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallEntry(call, program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExit(call, program), program); +// asm.addInstruction("jsr far", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); + } else { + asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); + } } else if (Procedure.CallingConvention.STACK_CALL.equals(procedure.getCallingConvention())) { - asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); + if(procedure.isDeclaredFar()) { + // Generate ASM for a far call (in a bank or other) + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallEntry(call, program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExit(call, program), program); + } else { + asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); + } } } else if (statement instanceof StatementCallExecute) { StatementCallExecute call = (StatementCallExecute) statement; diff --git a/src/test/kc/procedure-callingconvention-phi-far-0.c b/src/test/kc/procedure-callingconvention-phi-far-0.c new file mode 100644 index 000000000..9364cd47b --- /dev/null +++ b/src/test/kc/procedure-callingconvention-phi-far-0.c @@ -0,0 +1,11 @@ +// Test a procedure with calling convention stack + +char* const SCREEN = (char*)0x0400; + +void main(void) { + SCREEN[0] = plus('0', 7); +} + +char __far(1) plus(char a, char b) { + return a+b; +} diff --git a/src/test/kc/procedure-callingconvention-stack-far-0.c b/src/test/kc/procedure-callingconvention-stack-far-0.c new file mode 100644 index 000000000..9957eb924 --- /dev/null +++ b/src/test/kc/procedure-callingconvention-stack-far-0.c @@ -0,0 +1,11 @@ +// Test a procedure with calling convention stack + +char* const SCREEN = (char*)0x0400; + +void main(void) { + SCREEN[0] = plus('0', 7); +} + +char __far(1) __stackcall plus(char a, char b) { + return a+b; +} \ No newline at end of file From 4a4d6f72d0aad7c2fab3eff492783579cc6b595e Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Wed, 16 Nov 2022 17:11:18 +0100 Subject: [PATCH 02/66] far calls for __stackcall calling convention functions. --- .../java/dk/camelot64/kickc/Compiler.java | 2 +- .../AsmFragmentInstanceSpecBuilder.java | 26 ++++++++++--------- .../statements/StatementCallExecute.java | 4 +++ .../kickc/passes/Pass4CodeGeneration.java | 16 ++++++++---- .../procedure-callingconvention-phi-far-0.vs | 5 ++++ .../procedure-callingconvention-phi-far-1.c | 13 ++++++++++ 6 files changed, 48 insertions(+), 18 deletions(-) create mode 100644 src/test/kc/$workspacedir/target/procedure-callingconvention-phi-far-0.vs create mode 100644 src/test/kc/procedure-callingconvention-phi-far-1.c diff --git a/src/main/java/dk/camelot64/kickc/Compiler.java b/src/main/java/dk/camelot64/kickc/Compiler.java index 3fc36c85c..812cffe2a 100644 --- a/src/main/java/dk/camelot64/kickc/Compiler.java +++ b/src/main/java/dk/camelot64/kickc/Compiler.java @@ -278,7 +278,7 @@ public class Compiler { getLog().append(program.getGraph().toString(program)); } new Pass1ProcedureInline(program).execute(); - new Pass1ProcedureFar(program).execute(); // Implements far calls to procedures defined in a bank. + new Pass1ProcedureFar(program).execute(); // Implements far calls to procedures defined in a bank. See https://gitlab.com/Flight_Control/kickc/-/commits/far-call-isolated new PassNStatementIndices(program).step(); program.clearCallGraph(); new Pass1AssertNoRecursion(program).execute(); diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java index 66aace3b8..41e3a76e8 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java @@ -45,33 +45,35 @@ final public class AsmFragmentInstanceSpecBuilder { /** * Create a fragment instance spec factory for a far call entry * - * @param call The statement call - * @param program The program + * @param bankFar The bank where the procedure is to be called. + * @param procedureName The full name of the procedure. + * @param program The program * @return the fragment instance spec factory */ - public static AsmFragmentInstanceSpec farCallEntry(StatementCall call, Program program) { + public static AsmFragmentInstanceSpec farCallEntry(Long bankFar, String procedureName, Program program) { AsmFragmentBindings bindings = new AsmFragmentBindings(program); - AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(call.getBankFar(), program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.EntryExit.Entry); + AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(bankFar, program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.EntryExit.Entry); ScopeRef codeScope = program.getScope().getRef(); // ScopeRef codeScope = program.getStatementInfos().getBlock(call).getScope(); - bindings.bind("c1", new ConstantInteger(call.getBankFar())); - bindings.bind("la1", new LabelRef(call.getProcedure().getFullName())); + bindings.bind("c1", new ConstantInteger(bankFar)); + bindings.bind("la1", new LabelRef(procedureName)); return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); } /** * Create a fragment instance spec factory for a far call exit * - * @param call The statement call + * @param bankFar The bank where the procedure is to be called. + * @param procedureName The full name of the procedure. * @param program The program * @return the fragment instance spec factory */ - public static AsmFragmentInstanceSpec farCallExit(StatementCall call, Program program) { + public static AsmFragmentInstanceSpec farCallExit(Long bankFar, String procedureName, Program program) { AsmFragmentBindings bindings = new AsmFragmentBindings(program); - AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(call.getBankFar(), program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.EntryExit.Exit); - ScopeRef codeScope = program.getStatementInfos().getBlock(call).getScope(); - bindings.bind("la1", new LabelRef(codeScope.getFullName())); - bindings.bind("la2", new ConstantInteger(call.getBankFar())); + AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(bankFar, program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.EntryExit.Exit); + ScopeRef codeScope = program.getScope().getRef(); + bindings.bind("c1", new ConstantInteger(bankFar)); + bindings.bind("la1", new LabelRef(procedureName)); return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); } diff --git a/src/main/java/dk/camelot64/kickc/model/statements/StatementCallExecute.java b/src/main/java/dk/camelot64/kickc/model/statements/StatementCallExecute.java index f1f54fe05..620491ecb 100644 --- a/src/main/java/dk/camelot64/kickc/model/statements/StatementCallExecute.java +++ b/src/main/java/dk/camelot64/kickc/model/statements/StatementCallExecute.java @@ -28,11 +28,15 @@ public class StatementCallExecute extends StatementBase implements StatementCall /** The calling convention to use. */ private Procedure.CallingConvention callingConvention; + /** This contains the far call parameters */ + private Long bankFar; + public StatementCallExecute(SymbolTypeProcedure procedureType, RValue procedure, Procedure.CallingConvention callingConvention, StatementSource source, List comments) { super(source, comments); this.procedureType = procedureType; this.procedure = procedure; this.callingConvention = callingConvention; + this.bankFar = bankFar; } public SymbolTypeProcedure getProcedureType() { diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 1ba4a73e4..ae20b378b 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -867,8 +867,8 @@ public class Pass4CodeGeneration { } if(procedure.isDeclaredFar()) { // Generate ASM for a call (in a bank or other) - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallEntry(call, program), program); - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExit(call, program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallEntry(call.getBankFar(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExit(call.getBankFar(), call.getProcedure().getFullName(), program), program); // asm.addInstruction("jsr far", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } else { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); @@ -876,17 +876,23 @@ public class Pass4CodeGeneration { } else if (Procedure.CallingConvention.STACK_CALL.equals(procedure.getCallingConvention())) { if(procedure.isDeclaredFar()) { // Generate ASM for a far call (in a bank or other) - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallEntry(call, program), program); - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExit(call, program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallEntry(call.getBankFar(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExit(call.getBankFar(), call.getProcedure().getFullName(), program), program); } else { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } } } else if (statement instanceof StatementCallExecute) { StatementCallExecute call = (StatementCallExecute) statement; + Procedure procedure = getScope().getProcedure(call.getProcedure()); RValue procedureRVal = call.getProcedureRVal(); // Generate ASM for a call - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); + if(procedure.isDeclaredFar()) { + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallEntry(procedure.getBankFar(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExit(procedure.getBankFar(), call.getProcedure().getFullName(), program), program); + } else { + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); + } if (!(procedureRVal instanceof ProcedureRef)) { asm.getCurrentChunk().setClobberOverwrite(CpuClobber.CLOBBER_ALL); } diff --git a/src/test/kc/$workspacedir/target/procedure-callingconvention-phi-far-0.vs b/src/test/kc/$workspacedir/target/procedure-callingconvention-phi-far-0.vs new file mode 100644 index 000000000..243aa53b5 --- /dev/null +++ b/src/test/kc/$workspacedir/target/procedure-callingconvention-phi-far-0.vs @@ -0,0 +1,5 @@ +al C:400 .SCREEN +al C:80b .upstartEnd +al C:80d .main +al C:819 .plus +al C:37 .return diff --git a/src/test/kc/procedure-callingconvention-phi-far-1.c b/src/test/kc/procedure-callingconvention-phi-far-1.c new file mode 100644 index 000000000..6eda3a13d --- /dev/null +++ b/src/test/kc/procedure-callingconvention-phi-far-1.c @@ -0,0 +1,13 @@ +// Test a procedure with calling convention stack + +char* const SCREEN = (char*)0x0400; + +void main(void) { + SCREEN[0] = plus('0', 7); +} + +#pragma calling(__stackcall) + +char __far(1) plus(char a, char b) { + return a+b; +} \ No newline at end of file From f948ce0571feaa19ffea371391b24f6d1505a42c Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Wed, 16 Nov 2022 17:41:25 +0100 Subject: [PATCH 03/66] far call test cases. --- .../kickc/test/TestProgramsFast.java | 45 +++++++++++++++++++ .../procedure-callingconvention-phi-far-0.vs | 5 --- ...procedure-callingconvention-stack-far-1.c} | 0 .../procedure-callingconvention-stack-far-2.c | 19 ++++++++ .../procedure-callingconvention-stack-far-3.c | 15 +++++++ .../procedure-callingconvention-stack-far-4.c | 43 ++++++++++++++++++ .../procedure-callingconvention-stack-far-5.c | 35 +++++++++++++++ .../procedure-callingconvention-stack-far-6.c | 18 ++++++++ 8 files changed, 175 insertions(+), 5 deletions(-) delete mode 100644 src/test/kc/$workspacedir/target/procedure-callingconvention-phi-far-0.vs rename src/test/kc/{procedure-callingconvention-phi-far-1.c => procedure-callingconvention-stack-far-1.c} (100%) create mode 100644 src/test/kc/procedure-callingconvention-stack-far-2.c create mode 100644 src/test/kc/procedure-callingconvention-stack-far-3.c create mode 100644 src/test/kc/procedure-callingconvention-stack-far-4.c create mode 100644 src/test/kc/procedure-callingconvention-stack-far-5.c create mode 100644 src/test/kc/procedure-callingconvention-stack-far-6.c diff --git a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java index c6cb04fe1..7ef17a7d0 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java +++ b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java @@ -1495,6 +1495,51 @@ public class TestProgramsFast extends TestPrograms { compileAndCompare("declared-memory-var-0.c"); } + @Test + public void testProcedureCallingConventionStackFar13() throws IOException { + compileAndCompare("procedure-callingconvention-stack-far-13.c"); + } + + @Test + public void testProcedureCallingConventionStackFar6() throws IOException { + compileAndCompare("procedure-callingconvention-stack-far-6.c"); + } + + @Test + public void testProcedureCallingConventionStackFar5() throws IOException { + compileAndCompare("procedure-callingconvention-stack-far-5.c"); + } + + @Test + public void testProcedureCallingConventionStackFar4() throws IOException { + compileAndCompare("procedure-callingconvention-stack-far-4.c"); + } + + @Test + public void testProcedureCallingConventionStackFar3() throws IOException { + compileAndCompare("procedure-callingconvention-stack-far-3.c"); + } + + @Test + public void testProcedureCallingConventionStackFar2() throws IOException { + compileAndCompare("procedure-callingconvention-stack-far-2.c"); + } + + @Test + public void testProcedureCallingConventionStackFar1() throws IOException { + compileAndCompare("procedure-callingconvention-stack-far-1.c"); + } + + @Test + public void testProcedureCallingConventionStackFar0() throws IOException { + compileAndCompare("procedure-callingconvention-stack-far-0.c"); + } + + @Test + public void testProcedureCallingConventionPhiFar0() throws IOException { + compileAndCompare("procedure-callingconvention-phi-far-0.c"); + } + @Test public void testProcedureCallingConventionStack13() throws IOException { compileAndCompare("procedure-callingconvention-stack-13.c"); diff --git a/src/test/kc/$workspacedir/target/procedure-callingconvention-phi-far-0.vs b/src/test/kc/$workspacedir/target/procedure-callingconvention-phi-far-0.vs deleted file mode 100644 index 243aa53b5..000000000 --- a/src/test/kc/$workspacedir/target/procedure-callingconvention-phi-far-0.vs +++ /dev/null @@ -1,5 +0,0 @@ -al C:400 .SCREEN -al C:80b .upstartEnd -al C:80d .main -al C:819 .plus -al C:37 .return diff --git a/src/test/kc/procedure-callingconvention-phi-far-1.c b/src/test/kc/procedure-callingconvention-stack-far-1.c similarity index 100% rename from src/test/kc/procedure-callingconvention-phi-far-1.c rename to src/test/kc/procedure-callingconvention-stack-far-1.c diff --git a/src/test/kc/procedure-callingconvention-stack-far-2.c b/src/test/kc/procedure-callingconvention-stack-far-2.c new file mode 100644 index 000000000..bdcb7c1df --- /dev/null +++ b/src/test/kc/procedure-callingconvention-stack-far-2.c @@ -0,0 +1,19 @@ +// Test a procedure with calling convention stack +// A slightly more complex call + +char* const SCREEN = (char*)0x0400; + +char i = 0; + +void main(void) { + for(char a:0..1) { + char v = a+1; + char w = plus('0', v); + SCREEN[i] = w+a; + } +} + +char __far(1) __stackcall plus(char a, char b) { + i++; + return a+b; +} \ No newline at end of file diff --git a/src/test/kc/procedure-callingconvention-stack-far-3.c b/src/test/kc/procedure-callingconvention-stack-far-3.c new file mode 100644 index 000000000..9586a90fd --- /dev/null +++ b/src/test/kc/procedure-callingconvention-stack-far-3.c @@ -0,0 +1,15 @@ +// Test a procedure with calling convention stack +// Recursive fibonacci + +char* const SCREEN = (char*)0x0400; + +void main(void) { + *SCREEN = fib(5); +} + +char __far(1) __stackcall fib(char n) { + if (n == 0 || n == 1) + return n; + else + return (fib(n-1) + fib(n-2)); +} \ No newline at end of file diff --git a/src/test/kc/procedure-callingconvention-stack-far-4.c b/src/test/kc/procedure-callingconvention-stack-far-4.c new file mode 100644 index 000000000..0fd8e1aa9 --- /dev/null +++ b/src/test/kc/procedure-callingconvention-stack-far-4.c @@ -0,0 +1,43 @@ +// Test a procedure with calling convention stack +// Illustrates live range problem with function variable printother::i and global variable val + +#pragma calling(__stackcall) + +char* const SCREEN = (char*)0x0400; + +char val = 0; + +void main(void) { + for(char i:0..5) { + pval(); + printother(); + ival(); + } +} + +void __far(1) pval() { + printval(); +} + +void __far(2) ival() { + incval(); +} + +void __far(3) printval() { + SCREEN[0] = val; +} + +void __far(4) incval() { + val++; +} + +void __far(5) printother() { + for(char i:0..5) { + (SCREEN+40)[i]++; + } +} + + + + + diff --git a/src/test/kc/procedure-callingconvention-stack-far-5.c b/src/test/kc/procedure-callingconvention-stack-far-5.c new file mode 100644 index 000000000..c006ecd6f --- /dev/null +++ b/src/test/kc/procedure-callingconvention-stack-far-5.c @@ -0,0 +1,35 @@ +// Test a procedure with calling convention stack +// Returning and passing struct values + +#pragma calling(__stackcall) +#pragma struct_model(classic) + +char* const SCREEN = (char*)0x0400; +char idx = 0; + +struct Point { + char x; + char y; +}; + +void main(void) { + for(char i=0;i<5;i++) { + struct Point p = get(i); + print(p); + } +} + +struct Point __far(1) get(char i) { + struct Point p = { i, i/2 }; + return p; +} + +void __far(2) print(struct Point p) { + SCREEN[idx++] = p.x; + SCREEN[idx++] = p.y; +} + + + + + diff --git a/src/test/kc/procedure-callingconvention-stack-far-6.c b/src/test/kc/procedure-callingconvention-stack-far-6.c new file mode 100644 index 000000000..925beedec --- /dev/null +++ b/src/test/kc/procedure-callingconvention-stack-far-6.c @@ -0,0 +1,18 @@ +// Test a procedure with calling convention stack +// Recursion that works (no local variables) + +char* const SCREEN = (char*)0x0400; + +void main(void) { + *SCREEN = pow2(6); +} + +char __stackcall __far(1) pow2(char n) { + if (n == 0) + return 1; + else { + char c = pow2(n-1); + return c+c; + } + +} \ No newline at end of file From d7405d86693384386fe13f0b2747912d207b1529 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Wed, 16 Nov 2022 22:17:29 +0100 Subject: [PATCH 04/66] Fixing bugs: - far calls are now ALL iterated and flagged with a bank! - procedure objects are taken as the base for far call asm generation, not the call objects anymore (too tricky). But i have kept the call objects to be also updated with the bank for any reference later! --- .../java/dk/camelot64/kickc/passes/Pass1ProcedureFar.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass1ProcedureFar.java b/src/main/java/dk/camelot64/kickc/passes/Pass1ProcedureFar.java index a74f5eed0..2bc3b794e 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass1ProcedureFar.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass1ProcedureFar.java @@ -41,8 +41,8 @@ public class Pass1ProcedureFar extends Pass1Base { throw new CompileError("Error! Interrupts cannot be far called. "+procedure.getRef().toString()); } farProcedureCall(call, procedure, statementsIt, block, blocksIt); - // Exit and restart - return false; + // Continue +// return true; } } } From 8801a3e5e281e2db99957f5aadd3ed9da0706e11 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Wed, 16 Nov 2022 22:17:48 +0100 Subject: [PATCH 05/66] Fixing bugs: - far calls are now ALL iterated and flagged with a bank! - procedure objects are taken as the base for far call asm generation, not the call objects anymore (too tricky). But i have kept the call objects to be also updated with the bank for any reference later! --- .../dk/camelot64/kickc/passes/Pass4CodeGeneration.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index ae20b378b..27ec2b462 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -867,8 +867,8 @@ public class Pass4CodeGeneration { } if(procedure.isDeclaredFar()) { // Generate ASM for a call (in a bank or other) - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallEntry(call.getBankFar(), call.getProcedure().getFullName(), program), program); - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExit(call.getBankFar(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallEntry(procedure.getBankFar(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExit(procedure.getBankFar(), call.getProcedure().getFullName(), program), program); // asm.addInstruction("jsr far", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } else { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); @@ -876,8 +876,8 @@ public class Pass4CodeGeneration { } else if (Procedure.CallingConvention.STACK_CALL.equals(procedure.getCallingConvention())) { if(procedure.isDeclaredFar()) { // Generate ASM for a far call (in a bank or other) - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallEntry(call.getBankFar(), call.getProcedure().getFullName(), program), program); - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExit(call.getBankFar(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallEntry(procedure.getBankFar(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExit(procedure.getBankFar(), call.getProcedure().getFullName(), program), program); } else { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } From 2f2028f3a12e6778caa3bb3bddd68b86f4cabfa8 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Thu, 17 Nov 2022 07:43:08 +0100 Subject: [PATCH 06/66] far calls --- pom.xml | 2 +- .../procedure-callingconvention-phi-far-0.asm | 27 + .../procedure-callingconvention-phi-far-0.cfg | 20 + .../procedure-callingconvention-phi-far-0.log | 292 ++++ .../procedure-callingconvention-phi-far-0.sym | 10 + ...rocedure-callingconvention-stack-far-0.asm | 45 + ...rocedure-callingconvention-stack-far-0.cfg | 24 + ...rocedure-callingconvention-stack-far-0.log | 469 +++++ ...rocedure-callingconvention-stack-far-0.sym | 19 + ...rocedure-callingconvention-stack-far-1.asm | 45 + ...rocedure-callingconvention-stack-far-1.cfg | 24 + ...rocedure-callingconvention-stack-far-1.log | 469 +++++ ...rocedure-callingconvention-stack-far-1.sym | 19 + ...rocedure-callingconvention-stack-far-2.asm | 72 + ...rocedure-callingconvention-stack-far-2.cfg | 48 + ...rocedure-callingconvention-stack-far-2.log | 851 +++++++++ ...rocedure-callingconvention-stack-far-2.sym | 32 + ...rocedure-callingconvention-stack-far-3.asm | 68 + ...rocedure-callingconvention-stack-far-3.cfg | 39 + ...rocedure-callingconvention-stack-far-3.log | 1527 +++++++++++++++++ ...rocedure-callingconvention-stack-far-3.sym | 25 + ...rocedure-callingconvention-stack-far-4.asm | 76 + ...rocedure-callingconvention-stack-far-4.cfg | 79 + ...rocedure-callingconvention-stack-far-4.log | 924 ++++++++++ ...rocedure-callingconvention-stack-far-4.sym | 19 + ...rocedure-callingconvention-stack-far-5.asm | 110 ++ ...rocedure-callingconvention-stack-far-5.cfg | 62 + ...rocedure-callingconvention-stack-far-5.log | 845 +++++++++ ...rocedure-callingconvention-stack-far-5.sym | 30 + ...rocedure-callingconvention-stack-far-6.asm | 51 + ...rocedure-callingconvention-stack-far-6.cfg | 29 + ...rocedure-callingconvention-stack-far-6.log | 1060 ++++++++++++ ...rocedure-callingconvention-stack-far-6.sym | 21 + 33 files changed, 7432 insertions(+), 1 deletion(-) create mode 100644 src/test/ref/procedure-callingconvention-phi-far-0.asm create mode 100644 src/test/ref/procedure-callingconvention-phi-far-0.cfg create mode 100644 src/test/ref/procedure-callingconvention-phi-far-0.log create mode 100644 src/test/ref/procedure-callingconvention-phi-far-0.sym create mode 100644 src/test/ref/procedure-callingconvention-stack-far-0.asm create mode 100644 src/test/ref/procedure-callingconvention-stack-far-0.cfg create mode 100644 src/test/ref/procedure-callingconvention-stack-far-0.log create mode 100644 src/test/ref/procedure-callingconvention-stack-far-0.sym create mode 100644 src/test/ref/procedure-callingconvention-stack-far-1.asm create mode 100644 src/test/ref/procedure-callingconvention-stack-far-1.cfg create mode 100644 src/test/ref/procedure-callingconvention-stack-far-1.log create mode 100644 src/test/ref/procedure-callingconvention-stack-far-1.sym create mode 100644 src/test/ref/procedure-callingconvention-stack-far-2.asm create mode 100644 src/test/ref/procedure-callingconvention-stack-far-2.cfg create mode 100644 src/test/ref/procedure-callingconvention-stack-far-2.log create mode 100644 src/test/ref/procedure-callingconvention-stack-far-2.sym create mode 100644 src/test/ref/procedure-callingconvention-stack-far-3.asm create mode 100644 src/test/ref/procedure-callingconvention-stack-far-3.cfg create mode 100644 src/test/ref/procedure-callingconvention-stack-far-3.log create mode 100644 src/test/ref/procedure-callingconvention-stack-far-3.sym create mode 100644 src/test/ref/procedure-callingconvention-stack-far-4.asm create mode 100644 src/test/ref/procedure-callingconvention-stack-far-4.cfg create mode 100644 src/test/ref/procedure-callingconvention-stack-far-4.log create mode 100644 src/test/ref/procedure-callingconvention-stack-far-4.sym create mode 100644 src/test/ref/procedure-callingconvention-stack-far-5.asm create mode 100644 src/test/ref/procedure-callingconvention-stack-far-5.cfg create mode 100644 src/test/ref/procedure-callingconvention-stack-far-5.log create mode 100644 src/test/ref/procedure-callingconvention-stack-far-5.sym create mode 100644 src/test/ref/procedure-callingconvention-stack-far-6.asm create mode 100644 src/test/ref/procedure-callingconvention-stack-far-6.cfg create mode 100644 src/test/ref/procedure-callingconvention-stack-far-6.log create mode 100644 src/test/ref/procedure-callingconvention-stack-far-6.sym diff --git a/pom.xml b/pom.xml index 0146de442..446cc4bd1 100644 --- a/pom.xml +++ b/pom.xml @@ -167,7 +167,7 @@ org.jacoco jacoco-maven-plugin - 0.8.7 + 0.8.8 pre-unit-test diff --git a/src/test/ref/procedure-callingconvention-phi-far-0.asm b/src/test/ref/procedure-callingconvention-phi-far-0.asm new file mode 100644 index 000000000..e29b814ba --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-far-0.asm @@ -0,0 +1,27 @@ +// Test a procedure with calling convention stack + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-phi-far-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + .label SCREEN = $400 +.segment Code +main: { + // plus('0', 7) + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // SCREEN[0] = plus('0', 7) + lda #plus.return + sta SCREEN + // } + rts +} +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + rts +} diff --git a/src/test/ref/procedure-callingconvention-phi-far-0.cfg b/src/test/ref/procedure-callingconvention-phi-far-0.cfg new file mode 100644 index 000000000..5d2b8863d --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-far-0.cfg @@ -0,0 +1,20 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = plus::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__far(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + to:plus::@return +plus::@return: scope:[plus] from plus + [5] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-phi-far-0.log b/src/test/ref/procedure-callingconvention-phi-far-0.log new file mode 100644 index 000000000..6d817cb05 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-far-0.log @@ -0,0 +1,292 @@ +Far call main::$0 = call plus('0', 7) + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__far(bank) char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + plus::$0 = plus::a#1 + plus::b#1 + plus::return#1 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus + plus::return#4 = phi( plus/plus::return#1 ) + plus::return#2 = plus::return#4 + 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 +__constant char * const SCREEN = (char *)$400 +void __start() +void main() +char main::$0 +__far(bank) char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +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 +Constant right-side identified [5] plus::return#1 = plus::a#0 + plus::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant plus::return#1 = plus::a#0+plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#0 = plus::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings plus::return#0 +Constant inlined plus::return#0 = plus::return#1 +Constant inlined main::$0 = plus::return#1 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +CALL GRAPH +Calls in [main] to plus:1 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Adding NOP phi() at start of main +Adding NOP phi() at start of plus + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = plus::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__far(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + to:plus::@return +plus::@return: scope:[plus] from plus + [5] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +__far(bank) char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-far-0.c:6:17: +REGISTER UPLIFT POTENTIAL REGISTERS +Potential register analysis [1] call plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [plus] +Uplift Scope [] + +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-far-0.c:6:17: +Uplifting [main] best 54 combination +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-far-0.c:6:17: +Uplifting [plus] best 54 combination +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-far-0.c:6:17: +Uplifting [] best 54 combination +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-far-0.c:6:17: + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-phi-far-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] + plus_from_main: + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 + lda #plus.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + jmp __breturn + // plus::@return + __breturn: + // [5] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void main() +__far(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return +__constant char plus::return#1 = plus::a#0+plus::b#0 // return + + + +FINAL ASSEMBLER +Score: 18 + + // File Comments +// Test a procedure with calling convention stack + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-phi-far-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 + lda #plus.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + // plus::@return + // [5] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-phi-far-0.sym b/src/test/ref/procedure-callingconvention-phi-far-0.sym new file mode 100644 index 000000000..5e731dc09 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-far-0.sym @@ -0,0 +1,10 @@ +__constant char * const SCREEN = (char *) 1024 +void main() +__far(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return +__constant char plus::return#1 = plus::a#0+plus::b#0 // return + diff --git a/src/test/ref/procedure-callingconvention-stack-far-0.asm b/src/test/ref/procedure-callingconvention-stack-far-0.asm new file mode 100644 index 000000000..cae85630e --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-0.asm @@ -0,0 +1,45 @@ +// Test a procedure with calling convention stack + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment Code +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // return a+b; + clc + adc.z a + // } + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + rts +} +main: { + // plus('0', 7) + lda #'0' + pha + lda #7 + pha + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + pla + pla + // SCREEN[0] = plus('0', 7) + sta SCREEN + // } + rts +} diff --git a/src/test/ref/procedure-callingconvention-stack-far-0.cfg b/src/test/ref/procedure-callingconvention-stack-far-0.cfg new file mode 100644 index 000000000..620247dbd --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-0.cfg @@ -0,0 +1,24 @@ + +__far(bank) __stackcall char plus(char a , char b) +plus: scope:[plus] from + [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + [2] plus::return#0 = plus::a#0 + plus::b#0 + to:plus::@return +plus::@return: scope:[plus] from plus + [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 + [4] return + to:@return + +void main() +main: scope:[main] from + [5] stackpush(char) = '0' + [6] stackpush(char) = 7 + [7] callexecute plus + sideeffect stackpullpadding(1) + [9] main::$0 = stackpull(char) + [10] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [11] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-far-0.log b/src/test/ref/procedure-callingconvention-stack-far-0.log new file mode 100644 index 000000000..3187874dc --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-0.log @@ -0,0 +1,469 @@ +Adding parameter assignment in __stackcall procedure plus::b = param(plus::b) +Adding parameter assignment in __stackcall procedure plus::a = param(plus::a) +Far call main::$0 = call plus('0', 7) +Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call plus('0', 7) +Calling convention STACK_CALL replacing param(plus::a) with stackidx(char,plus::OFFSET_STACK_A) +Calling convention STACK_CALL replacing param(plus::b) with stackidx(char,plus::OFFSET_STACK_B) +Calling convention STACK_CALL adding stack return stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return +Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) +Calling convention STACK_CALL adding stack push stackpush(char) = '0' +Calling convention STACK_CALL adding stack push stackpush(char) = 7 + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + stackpush(char) = '0' + stackpush(char) = 7 + callexecute plus + sideeffect stackpullpadding(1) + main::$0 = stackpull(char) + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main + return + to:@return + +__far(bank) __stackcall char plus(char a , char b) +plus: scope:[plus] from + plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + plus::$0 = plus::a#0 + plus::b#0 + plus::return#0 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus + plus::return#1 = phi( plus/plus::return#0 ) + stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#1 + 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 +__constant char * const SCREEN = (char *)$400 +__constant unsigned int STACK_BASE = $103 +void __start() +void main() +char main::$0 +__far(bank) __stackcall char plus(char a , char b) +char plus::$0 +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 +char plus::b +char plus::b#0 +char plus::return +char plus::return#0 +char plus::return#1 + +Adding number conversion cast (unumber) 7 in stackpush(char) = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast stackpush(char) = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::$0 plus::return#1 +Successful SSA optimization Pass2AliasElimination +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +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 +Finalized unsigned number type (char) 1 +Successful SSA optimization PassNFinalizeNumberTypeConversions +CALL GRAPH +Calls in [main] to plus:7 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes + +FINAL CONTROL FLOW GRAPH + +__far(bank) __stackcall char plus(char a , char b) +plus: scope:[plus] from + [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + [2] plus::return#0 = plus::a#0 + plus::b#0 + to:plus::@return +plus::@return: scope:[plus] from plus + [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 + [4] return + to:@return + +void main() +main: scope:[main] from + [5] stackpush(char) = '0' + [6] stackpush(char) = 7 + [7] callexecute plus + sideeffect stackpullpadding(1) + [9] main::$0 = stackpull(char) + [10] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [11] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +char main::$0 // 4.0 +__far(bank) __stackcall char plus(char a , char b) +char plus::a +char plus::a#0 // 11.0 +char plus::b +char plus::b#0 // 22.0 +char plus::return +char plus::return#0 // 22.0 + +Initial phi equivalence classes +Added variable plus::a#0 to live range equivalence class [ plus::a#0 ] +Added variable plus::b#0 to live range equivalence class [ plus::b#0 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Complete equivalence classes +[ plus::a#0 ] +[ plus::b#0 ] +[ plus::return#0 ] +[ main::$0 ] +Allocated zp[1]:2 [ plus::b#0 ] +Allocated zp[1]:3 [ plus::return#0 ] +Allocated zp[1]:4 [ plus::a#0 ] +Allocated zp[1]:5 [ main::$0 ] +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x +Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte a as potential for zp[1]:4 [ plus::a#0 ] +Removing always clobbered register reg byte x as potential for zp[1]:4 [ plus::a#0 ] +Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a +Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x +Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a +Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a +Potential register analysis [7] callexecute plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [7] callexecute plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement sideeffect stackpullpadding(1) always clobbers reg byte a +Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a +Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x +Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x +Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a +Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x +Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a +Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a +Potential register analysis [7] callexecute plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [7] callexecute plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement sideeffect stackpullpadding(1) always clobbers reg byte a +Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a +Potential registers zp[1]:4 [ plus::a#0 ] : zp[1]:4 , reg byte y , +Potential registers zp[1]:2 [ plus::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ plus::return#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ main::$0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [plus] 22: zp[1]:2 [ plus::b#0 ] 22: zp[1]:3 [ plus::return#0 ] 11: zp[1]:4 [ plus::a#0 ] +Uplift Scope [main] 4: zp[1]:5 [ main::$0 ] +Uplift Scope [] + +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Uplifting [plus] best 73 combination reg byte a [ plus::b#0 ] reg byte a [ plus::return#0 ] zp[1]:4 [ plus::a#0 ] +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Uplifting [main] best 67 combination reg byte a [ main::$0 ] +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Uplifting [] best 67 combination +Attempting to uplift remaining variables inzp[1]:4 [ plus::a#0 ] +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: +Uplifting [plus] best 67 combination zp[1]:4 [ plus::a#0 ] +Allocated (was zp[1]:4) zp[1]:2 [ plus::a#0 ] +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment Code + // plus +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + jmp __breturn + // plus::@return + __breturn: + // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + // [4] return + rts +} + // main +main: { + // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 + lda #'0' + pha + // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 + lda #7 + pha + // [7] callexecute plus + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // sideeffect stackpullpadding(1) -- _stackpullpadding_1 + pla + // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [11] 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 +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void main() +char main::$0 // reg byte a 4.0 +__far(bank) __stackcall char plus(char a , char b) +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 // a zp[1]:2 11.0 +char plus::b +char plus::b#0 // reg byte a 22.0 +char plus::return +char plus::return#0 // reg byte a 22.0 + +zp[1]:2 [ plus::a#0 ] +reg byte a [ plus::b#0 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] + + +FINAL ASSEMBLER +Score: 61 + + // File Comments +// Test a procedure with calling convention stack + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment Code + // plus +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // return a+b; + // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + // plus::@return + // } + // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + // [4] return + rts +} + // main +main: { + // plus('0', 7) + // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 + lda #'0' + pha + // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 + lda #7 + pha + // [7] callexecute plus + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // sideeffect stackpullpadding(1) -- _stackpullpadding_1 + pla + // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // SCREEN[0] = plus('0', 7) + // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + // main::@return + // } + // [11] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-stack-far-0.sym b/src/test/ref/procedure-callingconvention-stack-far-0.sym new file mode 100644 index 000000000..058bfd4d2 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-0.sym @@ -0,0 +1,19 @@ +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void main() +char main::$0 // reg byte a 4.0 +__far(bank) __stackcall char plus(char a , char b) +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 // a zp[1]:2 11.0 +char plus::b +char plus::b#0 // reg byte a 22.0 +char plus::return +char plus::return#0 // reg byte a 22.0 + +zp[1]:2 [ plus::a#0 ] +reg byte a [ plus::b#0 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] diff --git a/src/test/ref/procedure-callingconvention-stack-far-1.asm b/src/test/ref/procedure-callingconvention-stack-far-1.asm new file mode 100644 index 000000000..4d95b1c93 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-1.asm @@ -0,0 +1,45 @@ +// Test a procedure with calling convention stack + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment Code +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // return a+b; + clc + adc.z a + // } + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + rts +} +main: { + // plus('0', 7) + lda #'0' + pha + lda #7 + pha + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + pla + pla + // SCREEN[0] = plus('0', 7) + sta SCREEN + // } + rts +} diff --git a/src/test/ref/procedure-callingconvention-stack-far-1.cfg b/src/test/ref/procedure-callingconvention-stack-far-1.cfg new file mode 100644 index 000000000..620247dbd --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-1.cfg @@ -0,0 +1,24 @@ + +__far(bank) __stackcall char plus(char a , char b) +plus: scope:[plus] from + [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + [2] plus::return#0 = plus::a#0 + plus::b#0 + to:plus::@return +plus::@return: scope:[plus] from plus + [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 + [4] return + to:@return + +void main() +main: scope:[main] from + [5] stackpush(char) = '0' + [6] stackpush(char) = 7 + [7] callexecute plus + sideeffect stackpullpadding(1) + [9] main::$0 = stackpull(char) + [10] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [11] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-far-1.log b/src/test/ref/procedure-callingconvention-stack-far-1.log new file mode 100644 index 000000000..c579e2fab --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-1.log @@ -0,0 +1,469 @@ +Adding parameter assignment in __stackcall procedure plus::b = param(plus::b) +Adding parameter assignment in __stackcall procedure plus::a = param(plus::a) +Far call main::$0 = call plus('0', 7) +Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call plus('0', 7) +Calling convention STACK_CALL replacing param(plus::a) with stackidx(char,plus::OFFSET_STACK_A) +Calling convention STACK_CALL replacing param(plus::b) with stackidx(char,plus::OFFSET_STACK_B) +Calling convention STACK_CALL adding stack return stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return +Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) +Calling convention STACK_CALL adding stack push stackpush(char) = '0' +Calling convention STACK_CALL adding stack push stackpush(char) = 7 + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + stackpush(char) = '0' + stackpush(char) = 7 + callexecute plus + sideeffect stackpullpadding(1) + main::$0 = stackpull(char) + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main + return + to:@return + +__far(bank) __stackcall char plus(char a , char b) +plus: scope:[plus] from + plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + plus::$0 = plus::a#0 + plus::b#0 + plus::return#0 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus + plus::return#1 = phi( plus/plus::return#0 ) + stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#1 + 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 +__constant char * const SCREEN = (char *)$400 +__constant unsigned int STACK_BASE = $103 +void __start() +void main() +char main::$0 +__far(bank) __stackcall char plus(char a , char b) +char plus::$0 +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 +char plus::b +char plus::b#0 +char plus::return +char plus::return#0 +char plus::return#1 + +Adding number conversion cast (unumber) 7 in stackpush(char) = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast stackpush(char) = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::$0 plus::return#1 +Successful SSA optimization Pass2AliasElimination +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +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 +Finalized unsigned number type (char) 1 +Successful SSA optimization PassNFinalizeNumberTypeConversions +CALL GRAPH +Calls in [main] to plus:7 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes + +FINAL CONTROL FLOW GRAPH + +__far(bank) __stackcall char plus(char a , char b) +plus: scope:[plus] from + [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + [2] plus::return#0 = plus::a#0 + plus::b#0 + to:plus::@return +plus::@return: scope:[plus] from plus + [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 + [4] return + to:@return + +void main() +main: scope:[main] from + [5] stackpush(char) = '0' + [6] stackpush(char) = 7 + [7] callexecute plus + sideeffect stackpullpadding(1) + [9] main::$0 = stackpull(char) + [10] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [11] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +char main::$0 // 4.0 +__far(bank) __stackcall char plus(char a , char b) +char plus::a +char plus::a#0 // 11.0 +char plus::b +char plus::b#0 // 22.0 +char plus::return +char plus::return#0 // 22.0 + +Initial phi equivalence classes +Added variable plus::a#0 to live range equivalence class [ plus::a#0 ] +Added variable plus::b#0 to live range equivalence class [ plus::b#0 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Complete equivalence classes +[ plus::a#0 ] +[ plus::b#0 ] +[ plus::return#0 ] +[ main::$0 ] +Allocated zp[1]:2 [ plus::b#0 ] +Allocated zp[1]:3 [ plus::return#0 ] +Allocated zp[1]:4 [ plus::a#0 ] +Allocated zp[1]:5 [ main::$0 ] +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x +Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte a as potential for zp[1]:4 [ plus::a#0 ] +Removing always clobbered register reg byte x as potential for zp[1]:4 [ plus::a#0 ] +Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a +Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x +Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a +Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a +Potential register analysis [7] callexecute plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [7] callexecute plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement sideeffect stackpullpadding(1) always clobbers reg byte a +Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a +Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x +Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x +Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a +Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x +Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a +Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a +Potential register analysis [7] callexecute plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [7] callexecute plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement sideeffect stackpullpadding(1) always clobbers reg byte a +Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a +Potential registers zp[1]:4 [ plus::a#0 ] : zp[1]:4 , reg byte y , +Potential registers zp[1]:2 [ plus::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ plus::return#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ main::$0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [plus] 22: zp[1]:2 [ plus::b#0 ] 22: zp[1]:3 [ plus::return#0 ] 11: zp[1]:4 [ plus::a#0 ] +Uplift Scope [main] 4: zp[1]:5 [ main::$0 ] +Uplift Scope [] + +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Uplifting [plus] best 73 combination reg byte a [ plus::b#0 ] reg byte a [ plus::return#0 ] zp[1]:4 [ plus::a#0 ] +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Uplifting [main] best 67 combination reg byte a [ main::$0 ] +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Uplifting [] best 67 combination +Attempting to uplift remaining variables inzp[1]:4 [ plus::a#0 ] +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: +Uplifting [plus] best 67 combination zp[1]:4 [ plus::a#0 ] +Allocated (was zp[1]:4) zp[1]:2 [ plus::a#0 ] +Warning! Unknown fragment for statement [7] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment Code + // plus +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + jmp __breturn + // plus::@return + __breturn: + // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + // [4] return + rts +} + // main +main: { + // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 + lda #'0' + pha + // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 + lda #7 + pha + // [7] callexecute plus + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // sideeffect stackpullpadding(1) -- _stackpullpadding_1 + pla + // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [11] 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 +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void main() +char main::$0 // reg byte a 4.0 +__far(bank) __stackcall char plus(char a , char b) +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 // a zp[1]:2 11.0 +char plus::b +char plus::b#0 // reg byte a 22.0 +char plus::return +char plus::return#0 // reg byte a 22.0 + +zp[1]:2 [ plus::a#0 ] +reg byte a [ plus::b#0 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] + + +FINAL ASSEMBLER +Score: 61 + + // File Comments +// Test a procedure with calling convention stack + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment Code + // plus +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // return a+b; + // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + // plus::@return + // } + // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + // [4] return + rts +} + // main +main: { + // plus('0', 7) + // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 + lda #'0' + pha + // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 + lda #7 + pha + // [7] callexecute plus + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // sideeffect stackpullpadding(1) -- _stackpullpadding_1 + pla + // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // SCREEN[0] = plus('0', 7) + // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + // main::@return + // } + // [11] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-stack-far-1.sym b/src/test/ref/procedure-callingconvention-stack-far-1.sym new file mode 100644 index 000000000..058bfd4d2 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-1.sym @@ -0,0 +1,19 @@ +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void main() +char main::$0 // reg byte a 4.0 +__far(bank) __stackcall char plus(char a , char b) +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 // a zp[1]:2 11.0 +char plus::b +char plus::b#0 // reg byte a 22.0 +char plus::return +char plus::return#0 // reg byte a 22.0 + +zp[1]:2 [ plus::a#0 ] +reg byte a [ plus::b#0 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] diff --git a/src/test/ref/procedure-callingconvention-stack-far-2.asm b/src/test/ref/procedure-callingconvention-stack-far-2.asm new file mode 100644 index 000000000..8f742ce8a --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-2.asm @@ -0,0 +1,72 @@ +// Test a procedure with calling convention stack +// A slightly more complex call + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(__start) + .const STACK_BASE = $103 + .label SCREEN = $400 + .label i = 4 +.segment Code +__start: { + // char i = 0 + lda #0 + sta.z i + jsr main + rts +} +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // i++; + inc.z i + // return a+b; + clc + adc.z a + // } + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + rts +} +main: { + .label a = 3 + lda #0 + sta.z a + __b1: + // char v = a+1 + ldx.z a + inx + // char w = plus('0', v) + lda #'0' + pha + txa + pha + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + pla + pla + // w+a + clc + adc.z a + // SCREEN[i] = w+a + ldy.z i + sta SCREEN,y + // for(char a:0..1) + inc.z a + lda #2 + cmp.z a + bne __b1 + // } + rts +} diff --git a/src/test/ref/procedure-callingconvention-stack-far-2.cfg b/src/test/ref/procedure-callingconvention-stack-far-2.cfg new file mode 100644 index 000000000..0bd994142 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-2.cfg @@ -0,0 +1,48 @@ + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] i = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [2] phi() + [3] call main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [4] return + to:@return + +__far(bank) __stackcall char plus(char a , char b) +plus: scope:[plus] from + [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + [7] i = ++ i + [8] plus::return#0 = plus::a#0 + plus::b#0 + to:plus::@return +plus::@return: scope:[plus] from plus + [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 + [10] return + to:@return + +void main() +main: scope:[main] from __start::@1 + [11] phi() + to:main::@1 +main::@1: scope:[main] from main main::@1 + [12] main::a#2 = phi( main/0, main::@1/main::a#1 ) + [13] main::v#0 = main::a#2 + 1 + [14] stackpush(char) = '0' + [15] stackpush(char) = main::v#0 + [16] callexecute plus + sideeffect stackpullpadding(1) + [18] main::w#0 = stackpull(char) + [19] main::$2 = main::w#0 + main::a#2 + [20] SCREEN[i] = main::$2 + [21] main::a#1 = ++ main::a#2 + [22] if(main::a#1!=2) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + [23] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-far-2.log b/src/test/ref/procedure-callingconvention-stack-far-2.log new file mode 100644 index 000000000..1153c5e07 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-2.log @@ -0,0 +1,851 @@ +Converting variable modified inside __stackcall procedure plus() to load/store i +Adding parameter assignment in __stackcall procedure plus::b = param(plus::b) +Adding parameter assignment in __stackcall procedure plus::a = param(plus::a) +Inlined call call __init +Far call main::w = call plus('0', main::v) +Eliminating unused variable with no statement main::$0 +Eliminating unused variable with no statement main::$1 +Calling convention __stackcall adding prepare/execute/finalize for main::w = call plus('0', main::v) +Calling convention STACK_CALL replacing param(plus::a) with stackidx(char,plus::OFFSET_STACK_A) +Calling convention STACK_CALL replacing param(plus::b) with stackidx(char,plus::OFFSET_STACK_B) +Calling convention STACK_CALL adding stack return stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return +Calling convention STACK_CALL adding stack pull main::w = stackpull(char) +Calling convention STACK_CALL adding stack push stackpush(char) = '0' +Calling convention STACK_CALL adding stack push stackpush(char) = main::v + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start::@1 + main::a#0 = 0 + to:main::@1 +main::@1: scope:[main] from main main::@1 + main::a#2 = phi( main/main::a#0, main::@1/main::a#1 ) + main::v#0 = main::a#2 + 1 + stackpush(char) = '0' + stackpush(char) = main::v#0 + callexecute plus + sideeffect stackpullpadding(1) + main::w#0 = stackpull(char) + main::$2 = main::w#0 + main::a#2 + SCREEN[i] = main::$2 + main::a#1 = main::a#2 + rangenext(0,1) + main::$3 = main::a#1 != rangelast(0,1) + if(main::$3) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__far(bank) __stackcall char plus(char a , char b) +plus: scope:[plus] from + plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + i = ++ i + plus::$0 = plus::a#0 + plus::b#0 + plus::return#0 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus + plus::return#1 = phi( plus/plus::return#0 ) + stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#1 + return + to:@return + +void __start() +__start: scope:[__start] from + to:__start::__init1 +__start::__init1: scope:[__start] from __start + i = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + call main + to:__start::@2 +__start::@2: scope:[__start] from __start::@1 + to:__start::@return +__start::@return: scope:[__start] from __start::@2 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +__constant unsigned int STACK_BASE = $103 +void __start() +__loadstore char i +void main() +char main::$2 +bool main::$3 +char main::a +char main::a#0 +char main::a#1 +char main::a#2 +char main::v +char main::v#0 +char main::w +char main::w#0 +__far(bank) __stackcall char plus(char a , char b) +char plus::$0 +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 +char plus::b +char plus::b#0 +char plus::return +char plus::return#0 +char plus::return#1 + +Adding number conversion cast (unumber) 1 in main::v#0 = main::a#2 + 1 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 1 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 1 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::$0 plus::return#1 +Successful SSA optimization Pass2AliasElimination +Simple Condition main::$3 [12] if(main::a#1!=rangelast(0,1)) goto main::@1 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant main::a#0 = 0 +Successful SSA optimization Pass2ConstantIdentification +Resolved ranged next value [10] main::a#1 = ++ main::a#2 to ++ +Resolved ranged comparison value [12] if(main::a#1!=rangelast(0,1)) goto main::@1 to 2 +Adding number conversion cast (unumber) 2 in if(main::a#1!=2) goto main::@1 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant integer cast 2 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 2 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inlining constant with var siblings main::a#0 +Constant inlined main::a#0 = 0 +Successful SSA optimization Pass2ConstantInlining +Finalized unsigned number type (char) 1 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Added new block during phi lifting main::@2(between main::@1 and main::@1) +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of __start::@2 +Adding NOP phi() at start of main +CALL GRAPH +Calls in [__start] to main:3 +Calls in [main] to plus:17 + +Created 1 initial phi equivalence classes +Coalesced [25] main::a#3 = main::a#1 +Coalesced down to 1 phi equivalence classes +Culled Empty Block label __start::@2 +Culled Empty Block label main::@2 +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of main + +FINAL CONTROL FLOW GRAPH + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] i = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [2] phi() + [3] call main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [4] return + to:@return + +__far(bank) __stackcall char plus(char a , char b) +plus: scope:[plus] from + [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + [7] i = ++ i + [8] plus::return#0 = plus::a#0 + plus::b#0 + to:plus::@return +plus::@return: scope:[plus] from plus + [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 + [10] return + to:@return + +void main() +main: scope:[main] from __start::@1 + [11] phi() + to:main::@1 +main::@1: scope:[main] from main main::@1 + [12] main::a#2 = phi( main/0, main::@1/main::a#1 ) + [13] main::v#0 = main::a#2 + 1 + [14] stackpush(char) = '0' + [15] stackpush(char) = main::v#0 + [16] callexecute plus + sideeffect stackpullpadding(1) + [18] main::w#0 = stackpull(char) + [19] main::$2 = main::w#0 + main::a#2 + [20] SCREEN[i] = main::$2 + [21] main::a#1 = ++ main::a#2 + [22] if(main::a#1!=2) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + [23] return + to:@return + +null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope plus + +VARIABLE REGISTER WEIGHTS +void __start() +__loadstore char i // 105.24999999999999 +void main() +char main::$2 // 202.0 +char main::a +char main::a#1 // 151.5 +char main::a#2 // 44.888888888888886 +char main::v +char main::v#0 // 101.0 +char main::w +char main::w#0 // 202.0 +__far(bank) __stackcall char plus(char a , char b) +char plus::a +char plus::a#0 // 667.3333333333334 +char plus::b +char plus::b#0 // 1001.0 +char plus::return +char plus::return#0 // 2002.0 + +Initial phi equivalence classes +[ main::a#2 main::a#1 ] +Added variable i to live range equivalence class [ i ] +Added variable plus::a#0 to live range equivalence class [ plus::a#0 ] +Added variable plus::b#0 to live range equivalence class [ plus::b#0 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::v#0 to live range equivalence class [ main::v#0 ] +Added variable main::w#0 to live range equivalence class [ main::w#0 ] +Added variable main::$2 to live range equivalence class [ main::$2 ] +Complete equivalence classes +[ main::a#2 main::a#1 ] +[ i ] +[ plus::a#0 ] +[ plus::b#0 ] +[ plus::return#0 ] +[ main::v#0 ] +[ main::w#0 ] +[ main::$2 ] +Allocated zp[1]:2 [ plus::return#0 ] +Allocated zp[1]:3 [ plus::b#0 ] +Allocated zp[1]:4 [ plus::a#0 ] +Allocated zp[1]:5 [ main::w#0 ] +Allocated zp[1]:6 [ main::$2 ] +Allocated zp[1]:7 [ main::a#2 main::a#1 ] +Allocated zp[1]:8 [ i ] +Allocated zp[1]:9 [ main::v#0 ] +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] i = 0 [ i ] ( [ i ] { } ) always clobbers reg byte a +Statement [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ i plus::a#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 ] { } ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::a#2 main::a#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:7 [ main::a#2 main::a#1 ] +Statement [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ i plus::a#0 plus::b#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte a as potential for zp[1]:4 [ plus::a#0 ] +Removing always clobbered register reg byte x as potential for zp[1]:4 [ plus::a#0 ] +Statement [8] plus::return#0 = plus::a#0 + plus::b#0 [ i plus::return#0 ] ( main:3::plus:16 [ main::a#2 i plus::return#0 ] { } ) always clobbers reg byte a +Statement [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ i ] ( main:3::plus:16 [ main::a#2 i ] { } ) always clobbers reg byte x +Statement [14] stackpush(char) = '0' [ i main::a#2 main::v#0 ] ( main:3 [ i main::a#2 main::v#0 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:9 [ main::v#0 ] +Statement [15] stackpush(char) = main::v#0 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte a +Potential register analysis [16] callexecute plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [16] callexecute plus [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte a reg byte x reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:7 [ main::a#2 main::a#1 ] +Statement sideeffect stackpullpadding(1) always clobbers reg byte a +Statement [18] main::w#0 = stackpull(char) [ i main::a#2 main::w#0 ] ( main:3 [ i main::a#2 main::w#0 ] { } ) always clobbers reg byte a +Statement [19] main::$2 = main::w#0 + main::a#2 [ i main::a#2 main::$2 ] ( main:3 [ i main::a#2 main::$2 ] { } ) always clobbers reg byte a +Statement [20] SCREEN[i] = main::$2 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte y +Statement [22] if(main::a#1!=2) goto main::@1 [ i main::a#1 ] ( main:3 [ i main::a#1 ] { } ) always clobbers reg byte a +Statement [1] i = 0 [ i ] ( [ i ] { } ) always clobbers reg byte a +Statement [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ i plus::a#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 ] { } ) always clobbers reg byte a reg byte x +Statement [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ i plus::a#0 plus::b#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x +Statement [8] plus::return#0 = plus::a#0 + plus::b#0 [ i plus::return#0 ] ( main:3::plus:16 [ main::a#2 i plus::return#0 ] { } ) always clobbers reg byte a +Statement [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ i ] ( main:3::plus:16 [ main::a#2 i ] { } ) always clobbers reg byte x +Statement [14] stackpush(char) = '0' [ i main::a#2 main::v#0 ] ( main:3 [ i main::a#2 main::v#0 ] { } ) always clobbers reg byte a +Statement [15] stackpush(char) = main::v#0 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte a +Potential register analysis [16] callexecute plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [16] callexecute plus [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement sideeffect stackpullpadding(1) always clobbers reg byte a +Statement [18] main::w#0 = stackpull(char) [ i main::a#2 main::w#0 ] ( main:3 [ i main::a#2 main::w#0 ] { } ) always clobbers reg byte a +Statement [19] main::$2 = main::w#0 + main::a#2 [ i main::a#2 main::$2 ] ( main:3 [ i main::a#2 main::$2 ] { } ) always clobbers reg byte a +Statement [20] SCREEN[i] = main::$2 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte y +Statement [22] if(main::a#1!=2) goto main::@1 [ i main::a#1 ] ( main:3 [ i main::a#1 ] { } ) always clobbers reg byte a +Potential registers zp[1]:7 [ main::a#2 main::a#1 ] : zp[1]:7 , +Potential registers zp[1]:8 [ i ] : zp[1]:8 , +Potential registers zp[1]:4 [ plus::a#0 ] : zp[1]:4 , reg byte y , +Potential registers zp[1]:3 [ plus::b#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ plus::return#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ main::v#0 ] : zp[1]:9 , reg byte x , reg byte y , +Potential registers zp[1]:5 [ main::w#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:6 [ main::$2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [plus] 2,002: zp[1]:2 [ plus::return#0 ] 1,001: zp[1]:3 [ plus::b#0 ] 667.33: zp[1]:4 [ plus::a#0 ] +Uplift Scope [main] 202: zp[1]:5 [ main::w#0 ] 202: zp[1]:6 [ main::$2 ] 196.39: zp[1]:7 [ main::a#2 main::a#1 ] 101: zp[1]:9 [ main::v#0 ] +Uplift Scope [] 105.25: zp[1]:8 [ i ] +Uplift Scope [__start] + +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Uplifting [plus] best 885 combination reg byte a [ plus::return#0 ] reg byte a [ plus::b#0 ] zp[1]:4 [ plus::a#0 ] +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Uplifting [main] best 725 combination reg byte a [ main::w#0 ] reg byte a [ main::$2 ] zp[1]:7 [ main::a#2 main::a#1 ] reg byte x [ main::v#0 ] +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Uplifting [] best 725 combination zp[1]:8 [ i ] +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Uplifting [__start] best 725 combination +Attempting to uplift remaining variables inzp[1]:4 [ plus::a#0 ] +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Uplifting [plus] best 725 combination zp[1]:4 [ plus::a#0 ] +Attempting to uplift remaining variables inzp[1]:7 [ main::a#2 main::a#1 ] +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Uplifting [main] best 725 combination zp[1]:7 [ main::a#2 main::a#1 ] +Attempting to uplift remaining variables inzp[1]:8 [ i ] +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: +Uplifting [] best 725 combination zp[1]:8 [ i ] +Allocated (was zp[1]:4) zp[1]:2 [ plus::a#0 ] +Allocated (was zp[1]:7) zp[1]:3 [ main::a#2 main::a#1 ] +Allocated (was zp[1]:8) zp[1]:4 [ i ] +Warning! Unknown fragment for statement [16] callexecute plus +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack +// A slightly more complex call + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(__start) + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 + .label i = 4 +.segment Code + // __start +__start: { + jmp __init1 + // __start::__init1 + __init1: + // [1] i = 0 -- vbuz1=vbuc1 + lda #0 + sta.z i + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + __b1_from___init1: + jmp __b1 + // __start::@1 + __b1: + // [3] call main + // [11] phi from __start::@1 to main [phi:__start::@1->main] + main_from___b1: + jsr main + jmp __breturn + // __start::@return + __breturn: + // [4] return + rts +} + // plus +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + // [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + // [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // [7] i = ++ i -- vbuz1=_inc_vbuz1 + inc.z i + // [8] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + jmp __breturn + // plus::@return + __breturn: + // [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + // [10] return + rts +} + // main +main: { + .label a = 3 + // [12] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + // [12] phi main::a#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z a + jmp __b1 + // [12] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + __b1_from___b1: + // [12] phi main::a#2 = main::a#1 [phi:main::@1->main::@1#0] -- register_copy + jmp __b1 + // main::@1 + __b1: + // [13] main::v#0 = main::a#2 + 1 -- vbuxx=vbuz1_plus_1 + ldx.z a + inx + // [14] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 + lda #'0' + pha + // [15] stackpush(char) = main::v#0 -- _stackpushbyte_=vbuxx + txa + pha + // [16] callexecute plus + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // sideeffect stackpullpadding(1) -- _stackpullpadding_1 + pla + // [18] main::w#0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // [19] main::$2 = main::w#0 + main::a#2 -- vbuaa=vbuaa_plus_vbuz1 + clc + adc.z a + // [20] SCREEN[i] = main::$2 -- pbuc1_derefidx_vbuz1=vbuaa + ldy.z i + sta SCREEN,y + // [21] main::a#1 = ++ main::a#2 -- vbuz1=_inc_vbuz1 + inc.z a + // [22] if(main::a#1!=2) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #2 + cmp.z a + bne __b1_from___b1 + jmp __breturn + // main::@return + __breturn: + // [23] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __init1 +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Replacing label __b1_from___b1 with __b1 +Removing instruction __b1_from___init1: +Removing instruction main_from___b1: +Removing instruction __b1_from___b1: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction __init1: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __b1_from_main: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Removing instruction jmp __b1 +Succesful ASM optimization Pass5NextJumpElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void __start() +__loadstore char i // zp[1]:4 105.24999999999999 +void main() +char main::$2 // reg byte a 202.0 +char main::a +char main::a#1 // a zp[1]:3 151.5 +char main::a#2 // a zp[1]:3 44.888888888888886 +char main::v +char main::v#0 // reg byte x 101.0 +char main::w +char main::w#0 // reg byte a 202.0 +__far(bank) __stackcall char plus(char a , char b) +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 // a zp[1]:2 667.3333333333334 +char plus::b +char plus::b#0 // reg byte a 1001.0 +char plus::return +char plus::return#0 // reg byte a 2002.0 + +zp[1]:3 [ main::a#2 main::a#1 ] +zp[1]:4 [ i ] +zp[1]:2 [ plus::a#0 ] +reg byte a [ plus::b#0 ] +reg byte a [ plus::return#0 ] +reg byte x [ main::v#0 ] +reg byte a [ main::w#0 ] +reg byte a [ main::$2 ] + + +FINAL ASSEMBLER +Score: 596 + + // File Comments +// Test a procedure with calling convention stack +// A slightly more complex call + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-2.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(__start) + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 + .label i = 4 +.segment Code + // __start +__start: { + // __start::__init1 + // char i = 0 + // [1] i = 0 -- vbuz1=vbuc1 + lda #0 + sta.z i + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // __start::@1 + // [3] call main + // [11] phi from __start::@1 to main [phi:__start::@1->main] + jsr main + // __start::@return + // [4] return + rts +} + // plus +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + // [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + // [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // i++; + // [7] i = ++ i -- vbuz1=_inc_vbuz1 + inc.z i + // return a+b; + // [8] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + // plus::@return + // } + // [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + // [10] return + rts +} + // main +main: { + .label a = 3 + // [12] phi from main to main::@1 [phi:main->main::@1] + // [12] phi main::a#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z a + // [12] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [12] phi main::a#2 = main::a#1 [phi:main::@1->main::@1#0] -- register_copy + // main::@1 + __b1: + // char v = a+1 + // [13] main::v#0 = main::a#2 + 1 -- vbuxx=vbuz1_plus_1 + ldx.z a + inx + // char w = plus('0', v) + // [14] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 + lda #'0' + pha + // [15] stackpush(char) = main::v#0 -- _stackpushbyte_=vbuxx + txa + pha + // [16] callexecute plus + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // sideeffect stackpullpadding(1) -- _stackpullpadding_1 + pla + // [18] main::w#0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // w+a + // [19] main::$2 = main::w#0 + main::a#2 -- vbuaa=vbuaa_plus_vbuz1 + clc + adc.z a + // SCREEN[i] = w+a + // [20] SCREEN[i] = main::$2 -- pbuc1_derefidx_vbuz1=vbuaa + ldy.z i + sta SCREEN,y + // for(char a:0..1) + // [21] main::a#1 = ++ main::a#2 -- vbuz1=_inc_vbuz1 + inc.z a + // [22] if(main::a#1!=2) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #2 + cmp.z a + bne __b1 + // main::@return + // } + // [23] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-stack-far-2.sym b/src/test/ref/procedure-callingconvention-stack-far-2.sym new file mode 100644 index 000000000..d5bda0530 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-2.sym @@ -0,0 +1,32 @@ +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void __start() +__loadstore char i // zp[1]:4 105.24999999999999 +void main() +char main::$2 // reg byte a 202.0 +char main::a +char main::a#1 // a zp[1]:3 151.5 +char main::a#2 // a zp[1]:3 44.888888888888886 +char main::v +char main::v#0 // reg byte x 101.0 +char main::w +char main::w#0 // reg byte a 202.0 +__far(bank) __stackcall char plus(char a , char b) +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 // a zp[1]:2 667.3333333333334 +char plus::b +char plus::b#0 // reg byte a 1001.0 +char plus::return +char plus::return#0 // reg byte a 2002.0 + +zp[1]:3 [ main::a#2 main::a#1 ] +zp[1]:4 [ i ] +zp[1]:2 [ plus::a#0 ] +reg byte a [ plus::b#0 ] +reg byte a [ plus::return#0 ] +reg byte x [ main::v#0 ] +reg byte a [ main::w#0 ] +reg byte a [ main::$2 ] diff --git a/src/test/ref/procedure-callingconvention-stack-far-3.asm b/src/test/ref/procedure-callingconvention-stack-far-3.asm new file mode 100644 index 000000000..3db9a00f2 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-3.asm @@ -0,0 +1,68 @@ +// Test a procedure with calling convention stack +// Recursive fibonacci + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment Code +// __register(A) char fib(__zp(2) char n) +fib: { + .const OFFSET_STACK_N = 0 + .const OFFSET_STACK_RETURN_0 = 0 + .label __4 = 3 + .label n = 2 + // return n; + tsx + lda STACK_BASE+OFFSET_STACK_N,x + sta.z n + // if (n == 0 || n == 1) + beq __b1 + lda #1 + cmp.z n + beq __b1 + // n-1 + lda.z n + sec + sbc #1 + // fib(n-1) + pha + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + pla + sta.z __4 + // n-2 + lda.z n + sec + sbc #2 + // fib(n-2) + pha + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + pla + // return (fib(n-1) + fib(n-2)); + clc + adc.z __4 + __breturn: + // } + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + rts + __b1: + lda.z n + jmp __breturn +} +main: { + // fib(5) + lda #5 + pha + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + pla + // *SCREEN = fib(5) + sta SCREEN + // } + rts +} diff --git a/src/test/ref/procedure-callingconvention-stack-far-3.cfg b/src/test/ref/procedure-callingconvention-stack-far-3.cfg new file mode 100644 index 000000000..0fda6c96f --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-3.cfg @@ -0,0 +1,39 @@ + +__far(bank) __stackcall char fib(char n) +fib: scope:[fib] from + [0] fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) + [1] if(fib::n#0==0) goto fib::@1 + to:fib::@3 +fib::@3: scope:[fib] from fib + [2] if(fib::n#0==1) goto fib::@1 + to:fib::@2 +fib::@2: scope:[fib] from fib::@3 + [3] fib::$3 = fib::n#0 - 1 + [4] stackpush(char) = fib::$3 + [5] callexecute fib + [6] fib::$4 = stackpull(char) + [7] fib::$5 = fib::n#0 - 2 + [8] stackpush(char) = fib::$5 + [9] callexecute fib + [10] fib::$6 = stackpull(char) + [11] fib::return#1 = fib::$4 + fib::$6 + to:fib::@return +fib::@return: scope:[fib] from fib::@1 fib::@2 + [12] fib::return#2 = phi( fib::@1/fib::return#3, fib::@2/fib::return#1 ) + [13] stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 + [14] return + to:@return +fib::@1: scope:[fib] from fib fib::@3 + [15] fib::return#3 = fib::n#0 + to:fib::@return + +void main() +main: scope:[main] from + [16] stackpush(char) = 5 + [17] callexecute fib + [18] main::$0 = stackpull(char) + [19] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [20] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-far-3.log b/src/test/ref/procedure-callingconvention-stack-far-3.log new file mode 100644 index 000000000..c23c61551 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-3.log @@ -0,0 +1,1527 @@ +Adding parameter assignment in __stackcall procedure fib::n = param(fib::n) +Far call main::$0 = call fib(5) +Far call fib::$4 = call fib(fib::$3) +Far call fib::$6 = call fib(fib::$5) +Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call fib(5) +Calling convention __stackcall adding prepare/execute/finalize for fib::$4 = call fib(fib::$3) +Calling convention __stackcall adding prepare/execute/finalize for fib::$6 = call fib(fib::$5) +Calling convention STACK_CALL replacing param(fib::n) with stackidx(char,fib::OFFSET_STACK_N) +Calling convention STACK_CALL adding stack return stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return +Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) +Calling convention STACK_CALL adding stack pull fib::$4 = stackpull(char) +Calling convention STACK_CALL adding stack pull fib::$6 = stackpull(char) +Calling convention STACK_CALL adding stack push stackpush(char) = 5 +Calling convention STACK_CALL adding stack push stackpush(char) = fib::$3 +Calling convention STACK_CALL adding stack push stackpush(char) = fib::$5 + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + stackpush(char) = 5 + callexecute fib + main::$0 = stackpull(char) + *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + return + to:@return + +__far(bank) __stackcall char fib(char n) +fib: scope:[fib] from + fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) + fib::$0 = fib::n#0 == 0 + fib::$1 = fib::n#0 == 1 + fib::$2 = fib::$0 || fib::$1 + if(fib::$2) goto fib::@1 + to:fib::@2 +fib::@1: scope:[fib] from fib + fib::n#1 = phi( fib/fib::n#0 ) + fib::return#0 = fib::n#1 + to:fib::@return +fib::@2: scope:[fib] from fib + fib::n#2 = phi( fib/fib::n#0 ) + fib::$3 = fib::n#2 - 1 + stackpush(char) = fib::$3 + callexecute fib + fib::$4 = stackpull(char) + fib::$5 = fib::n#2 - 2 + stackpush(char) = fib::$5 + callexecute fib + fib::$6 = stackpull(char) + fib::$7 = fib::$4 + fib::$6 + fib::return#1 = fib::$7 + to:fib::@return +fib::@return: scope:[fib] from fib::@1 fib::@2 + fib::return#2 = phi( fib::@1/fib::return#0, fib::@2/fib::return#1 ) + stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 + 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 +__constant char * const SCREEN = (char *)$400 +__constant unsigned int STACK_BASE = $103 +void __start() +__far(bank) __stackcall char fib(char n) +bool fib::$0 +bool fib::$1 +bool fib::$2 +number fib::$3 +char fib::$4 +number fib::$5 +char fib::$6 +char fib::$7 +__constant char fib::OFFSET_STACK_N = 0 +__constant char fib::OFFSET_STACK_RETURN_0 = 0 +char fib::n +char fib::n#0 +char fib::n#1 +char fib::n#2 +char fib::return +char fib::return#0 +char fib::return#1 +char fib::return#2 +void main() +char main::$0 + +Adding number conversion cast (unumber) 5 in stackpush(char) = 5 +Adding number conversion cast (unumber) 0 in fib::$0 = fib::n#0 == 0 +Adding number conversion cast (unumber) 1 in fib::$1 = fib::n#0 == 1 +Adding number conversion cast (unumber) 1 in fib::$3 = fib::n#2 - 1 +Adding number conversion cast (unumber) fib::$3 in fib::$3 = fib::n#2 - (unumber)1 +Adding number conversion cast (unumber) 2 in fib::$5 = fib::n#2 - 2 +Adding number conversion cast (unumber) fib::$5 in fib::$5 = fib::n#2 - (unumber)2 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast stackpush(char) = (unumber)5 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 5 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast 2 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 5 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 2 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to char in fib::$3 = fib::n#2 - 1 +Inferred type updated to char in fib::$5 = fib::n#2 - 2 +Alias fib::n#0 = fib::n#1 fib::return#0 fib::n#2 +Alias fib::return#1 = fib::$7 +Successful SSA optimization Pass2AliasElimination +Rewriting || if()-condition to two if()s [8] fib::$2 = fib::$0 || fib::$1 +Successful SSA optimization Pass2ConditionalAndOrRewriting +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 +Simple Condition fib::$0 [8] if(fib::n#0==0) goto fib::@1 +Simple Condition fib::$1 [21] if(fib::n#0==1) goto fib::@1 +Successful SSA optimization Pass2ConditionalJumpSimplification +CALL GRAPH +Calls in [fib] to fib:5 fib:9 +Calls in [main] to fib:18 + +Created 1 initial phi equivalence classes +Coalesced [12] fib::return#4 = fib::return#1 +Not coalescing [16] fib::return#3 = fib::n#0 +Coalesced down to 2 phi equivalence classes + +FINAL CONTROL FLOW GRAPH + +__far(bank) __stackcall char fib(char n) +fib: scope:[fib] from + [0] fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) + [1] if(fib::n#0==0) goto fib::@1 + to:fib::@3 +fib::@3: scope:[fib] from fib + [2] if(fib::n#0==1) goto fib::@1 + to:fib::@2 +fib::@2: scope:[fib] from fib::@3 + [3] fib::$3 = fib::n#0 - 1 + [4] stackpush(char) = fib::$3 + [5] callexecute fib + [6] fib::$4 = stackpull(char) + [7] fib::$5 = fib::n#0 - 2 + [8] stackpush(char) = fib::$5 + [9] callexecute fib + [10] fib::$6 = stackpull(char) + [11] fib::return#1 = fib::$4 + fib::$6 + to:fib::@return +fib::@return: scope:[fib] from fib::@1 fib::@2 + [12] fib::return#2 = phi( fib::@1/fib::return#3, fib::@2/fib::return#1 ) + [13] stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 + [14] return + to:@return +fib::@1: scope:[fib] from fib fib::@3 + [15] fib::return#3 = fib::n#0 + to:fib::@return + +void main() +main: scope:[main] from + [16] stackpush(char) = 5 + [17] callexecute fib + [18] main::$0 = stackpull(char) + [19] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [20] return + to:@return + + +VARIABLE REGISTER WEIGHTS +__far(bank) __stackcall char fib(char n) +char fib::$3 // 22.0 +char fib::$4 // 1.375 +char fib::$5 // 22.0 +char fib::$6 // 22.0 +char fib::n +char fib::n#0 // 5.5 +char fib::return +char fib::return#1 // 22.0 +char fib::return#2 // 33.0 +char fib::return#3 // 22.0 +void main() +char main::$0 // 4.0 + +Initial phi equivalence classes +[ fib::return#2 fib::return#3 fib::return#1 ] +Added variable fib::n#0 to live range equivalence class [ fib::n#0 ] +Added variable fib::$3 to live range equivalence class [ fib::$3 ] +Added variable fib::$4 to live range equivalence class [ fib::$4 ] +Added variable fib::$5 to live range equivalence class [ fib::$5 ] +Added variable fib::$6 to live range equivalence class [ fib::$6 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Complete equivalence classes +[ fib::return#2 fib::return#3 fib::return#1 ] +[ fib::n#0 ] +[ fib::$3 ] +[ fib::$4 ] +[ fib::$5 ] +[ fib::$6 ] +[ main::$0 ] +Allocated zp[1]:2 [ fib::return#2 fib::return#3 fib::return#1 ] +Allocated zp[1]:3 [ fib::$3 ] +Allocated zp[1]:4 [ fib::$5 ] +Allocated zp[1]:5 [ fib::$6 ] +Allocated zp[1]:6 [ fib::n#0 ] +Allocated zp[1]:7 [ main::$0 ] +Allocated zp[1]:8 [ fib::$4 ] +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte a as potential for zp[1]:8 [ fib::$4 ] +Removing always clobbered register reg byte x as potential for zp[1]:8 [ fib::$4 ] +Potential register analysis [5] callexecute fib missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [5] callexecute fib [ fib::n#0 ] ( fib:17 [ fib::n#0 ] { } ) always clobbers reg byte a reg byte x reg byte y +Removing always clobbered register reg byte a as potential for zp[1]:6 [ fib::n#0 ] +Removing always clobbered register reg byte x as potential for zp[1]:6 [ fib::n#0 ] +Removing always clobbered register reg byte y as potential for zp[1]:6 [ fib::n#0 ] +Statement [6] fib::$4 = stackpull(char) [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a +Potential register analysis [9] callexecute fib missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [9] callexecute fib [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a reg byte x reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:8 [ fib::$4 ] +Statement [10] fib::$6 = stackpull(char) [ fib::n#0 fib::$4 fib::$6 ] ( fib:17 [ fib::n#0 fib::$4 fib::$6 ] { } ) always clobbers reg byte a +Statement [11] fib::return#1 = fib::$4 + fib::$6 [ fib::n#0 fib::$4 fib::return#1 ] ( fib:17 [ fib::n#0 fib::$4 fib::return#1 ] { } ) always clobbers reg byte a +Statement [13] stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte x +Statement [16] stackpush(char) = 5 [ fib::$4 ] ( [ fib::$4 ] { } ) always clobbers reg byte a +Potential register analysis [17] callexecute fib missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [17] callexecute fib [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [18] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a +Statement [0] fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a reg byte x +Statement [1] if(fib::n#0==0) goto fib::@1 [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a +Statement [2] if(fib::n#0==1) goto fib::@1 [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a +Potential register analysis [5] callexecute fib missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [5] callexecute fib [ fib::n#0 ] ( fib:17 [ fib::n#0 ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [6] fib::$4 = stackpull(char) [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a +Potential register analysis [9] callexecute fib missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [9] callexecute fib [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [10] fib::$6 = stackpull(char) [ fib::n#0 fib::$4 fib::$6 ] ( fib:17 [ fib::n#0 fib::$4 fib::$6 ] { } ) always clobbers reg byte a +Statement [11] fib::return#1 = fib::$4 + fib::$6 [ fib::n#0 fib::$4 fib::return#1 ] ( fib:17 [ fib::n#0 fib::$4 fib::return#1 ] { } ) always clobbers reg byte a +Statement [13] stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte x +Statement [16] stackpush(char) = 5 [ fib::$4 ] ( [ fib::$4 ] { } ) always clobbers reg byte a +Potential register analysis [17] callexecute fib missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [17] callexecute fib [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [18] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a +Potential registers zp[1]:2 [ fib::return#2 fib::return#3 fib::return#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:6 [ fib::n#0 ] : zp[1]:6 , +Potential registers zp[1]:3 [ fib::$3 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ fib::$4 ] : zp[1]:8 , +Potential registers zp[1]:4 [ fib::$5 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ fib::$6 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ main::$0 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [fib] 77: zp[1]:2 [ fib::return#2 fib::return#3 fib::return#1 ] 22: zp[1]:3 [ fib::$3 ] 22: zp[1]:4 [ fib::$5 ] 22: zp[1]:5 [ fib::$6 ] 5.5: zp[1]:6 [ fib::n#0 ] 1.38: zp[1]:8 [ fib::$4 ] +Uplift Scope [main] 4: zp[1]:7 [ main::$0 ] +Uplift Scope [] + +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Uplifting [fib] best 113 combination reg byte a [ fib::return#2 fib::return#3 fib::return#1 ] reg byte a [ fib::$3 ] reg byte a [ fib::$5 ] reg byte a [ fib::$6 ] zp[1]:6 [ fib::n#0 ] zp[1]:8 [ fib::$4 ] +Limited combination testing to 100 combinations of 256 possible. +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Uplifting [main] best 107 combination reg byte a [ main::$0 ] +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Uplifting [] best 107 combination +Attempting to uplift remaining variables inzp[1]:6 [ fib::n#0 ] +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Uplifting [fib] best 107 combination zp[1]:6 [ fib::n#0 ] +Attempting to uplift remaining variables inzp[1]:8 [ fib::$4 ] +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: +Uplifting [fib] best 107 combination zp[1]:8 [ fib::$4 ] +Allocated (was zp[1]:6) zp[1]:2 [ fib::n#0 ] +Allocated (was zp[1]:8) zp[1]:3 [ fib::$4 ] +Warning! Unknown fragment for statement [5] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: +Warning! Unknown fragment for statement [9] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: +Warning! Unknown fragment for statement [17] callexecute fib +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack +// Recursive fibonacci + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment Code + // fib +// __register(A) char fib(__zp(2) char n) +fib: { + .const OFFSET_STACK_N = 0 + .const OFFSET_STACK_RETURN_0 = 0 + .label __4 = 3 + .label n = 2 + // [0] fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_N,x + sta.z n + // [1] if(fib::n#0==0) goto fib::@1 -- vbuz1_eq_0_then_la1 + lda.z n + beq __b1 + jmp __b3 + // fib::@3 + __b3: + // [2] if(fib::n#0==1) goto fib::@1 -- vbuz1_eq_vbuc1_then_la1 + lda #1 + cmp.z n + beq __b1 + jmp __b2 + // fib::@2 + __b2: + // [3] fib::$3 = fib::n#0 - 1 -- vbuaa=vbuz1_minus_1 + lda.z n + sec + sbc #1 + // [4] stackpush(char) = fib::$3 -- _stackpushbyte_=vbuaa + pha + // [5] callexecute fib + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [6] fib::$4 = stackpull(char) -- vbuz1=_stackpullbyte_ + pla + sta.z __4 + // [7] fib::$5 = fib::n#0 - 2 -- vbuaa=vbuz1_minus_2 + lda.z n + sec + sbc #2 + // [8] stackpush(char) = fib::$5 -- _stackpushbyte_=vbuaa + pha + // [9] callexecute fib + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [10] fib::$6 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // [11] fib::return#1 = fib::$4 + fib::$6 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z __4 + // [12] phi from fib::@1 fib::@2 to fib::@return [phi:fib::@1/fib::@2->fib::@return] + __breturn_from___b1: + __breturn_from___b2: + // [12] phi fib::return#2 = fib::return#3 [phi:fib::@1/fib::@2->fib::@return#0] -- register_copy + jmp __breturn + // fib::@return + __breturn: + // [13] stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + // [14] return + rts + // fib::@1 + __b1: + // [15] fib::return#3 = fib::n#0 -- vbuaa=vbuz1 + lda.z n + jmp __breturn_from___b1 +} + // main +main: { + // [16] stackpush(char) = 5 -- _stackpushbyte_=vbuc1 + lda #5 + pha + // [17] callexecute fib + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [18] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // [19] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [20] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b3 +Removing instruction jmp __b2 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda.z n +Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label __breturn_from___b1 with __breturn +Removing instruction __breturn_from___b1: +Removing instruction __breturn_from___b2: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction __b3: +Removing instruction __b2: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +__far(bank) __stackcall char fib(char n) +char fib::$3 // reg byte a 22.0 +char fib::$4 // zp[1]:3 1.375 +char fib::$5 // reg byte a 22.0 +char fib::$6 // reg byte a 22.0 +__constant char fib::OFFSET_STACK_N = 0 +__constant char fib::OFFSET_STACK_RETURN_0 = 0 +char fib::n +char fib::n#0 // n zp[1]:2 5.5 +char fib::return +char fib::return#1 // reg byte a 22.0 +char fib::return#2 // reg byte a 33.0 +char fib::return#3 // reg byte a 22.0 +void main() +char main::$0 // reg byte a 4.0 + +reg byte a [ fib::return#2 fib::return#3 fib::return#1 ] +zp[1]:2 [ fib::n#0 ] +reg byte a [ fib::$3 ] +zp[1]:3 [ fib::$4 ] +reg byte a [ fib::$5 ] +reg byte a [ fib::$6 ] +reg byte a [ main::$0 ] + + +FINAL ASSEMBLER +Score: 92 + + // File Comments +// Test a procedure with calling convention stack +// Recursive fibonacci + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-3.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment Code + // fib +// __register(A) char fib(__zp(2) char n) +fib: { + .const OFFSET_STACK_N = 0 + .const OFFSET_STACK_RETURN_0 = 0 + .label __4 = 3 + .label n = 2 + // return n; + // [0] fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_N,x + sta.z n + // if (n == 0 || n == 1) + // [1] if(fib::n#0==0) goto fib::@1 -- vbuz1_eq_0_then_la1 + beq __b1 + // fib::@3 + // [2] if(fib::n#0==1) goto fib::@1 -- vbuz1_eq_vbuc1_then_la1 + lda #1 + cmp.z n + beq __b1 + // fib::@2 + // n-1 + // [3] fib::$3 = fib::n#0 - 1 -- vbuaa=vbuz1_minus_1 + lda.z n + sec + sbc #1 + // fib(n-1) + // [4] stackpush(char) = fib::$3 -- _stackpushbyte_=vbuaa + pha + // [5] callexecute fib + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [6] fib::$4 = stackpull(char) -- vbuz1=_stackpullbyte_ + pla + sta.z __4 + // n-2 + // [7] fib::$5 = fib::n#0 - 2 -- vbuaa=vbuz1_minus_2 + lda.z n + sec + sbc #2 + // fib(n-2) + // [8] stackpush(char) = fib::$5 -- _stackpushbyte_=vbuaa + pha + // [9] callexecute fib + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [10] fib::$6 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // return (fib(n-1) + fib(n-2)); + // [11] fib::return#1 = fib::$4 + fib::$6 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z __4 + // [12] phi from fib::@1 fib::@2 to fib::@return [phi:fib::@1/fib::@2->fib::@return] + // [12] phi fib::return#2 = fib::return#3 [phi:fib::@1/fib::@2->fib::@return#0] -- register_copy + // fib::@return + __breturn: + // } + // [13] stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + // [14] return + rts + // fib::@1 + __b1: + // [15] fib::return#3 = fib::n#0 -- vbuaa=vbuz1 + lda.z n + jmp __breturn +} + // main +main: { + // fib(5) + // [16] stackpush(char) = 5 -- _stackpushbyte_=vbuc1 + lda #5 + pha + // [17] callexecute fib + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [18] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // *SCREEN = fib(5) + // [19] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + // main::@return + // } + // [20] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-stack-far-3.sym b/src/test/ref/procedure-callingconvention-stack-far-3.sym new file mode 100644 index 000000000..29b0c2f60 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-3.sym @@ -0,0 +1,25 @@ +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +__far(bank) __stackcall char fib(char n) +char fib::$3 // reg byte a 22.0 +char fib::$4 // zp[1]:3 1.375 +char fib::$5 // reg byte a 22.0 +char fib::$6 // reg byte a 22.0 +__constant char fib::OFFSET_STACK_N = 0 +__constant char fib::OFFSET_STACK_RETURN_0 = 0 +char fib::n +char fib::n#0 // n zp[1]:2 5.5 +char fib::return +char fib::return#1 // reg byte a 22.0 +char fib::return#2 // reg byte a 33.0 +char fib::return#3 // reg byte a 22.0 +void main() +char main::$0 // reg byte a 4.0 + +reg byte a [ fib::return#2 fib::return#3 fib::return#1 ] +zp[1]:2 [ fib::n#0 ] +reg byte a [ fib::$3 ] +zp[1]:3 [ fib::$4 ] +reg byte a [ fib::$5 ] +reg byte a [ fib::$6 ] +reg byte a [ main::$0 ] diff --git a/src/test/ref/procedure-callingconvention-stack-far-4.asm b/src/test/ref/procedure-callingconvention-stack-far-4.asm new file mode 100644 index 000000000..2c82f4133 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-4.asm @@ -0,0 +1,76 @@ +// Test a procedure with calling convention stack +// Illustrates live range problem with function variable printother::i and global variable val + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(__start) + .label SCREEN = $400 + .label val = 2 +.segment Code +__start: { + // char val = 0 + lda #0 + sta.z val + jsr main + rts +} +printother: { + ldx #0 + __b1: + // (SCREEN+40)[i]++; + inc SCREEN+$28,x + // for(char i:0..5) + inx + cpx #6 + bne __b1 + // } + rts +} +incval: { + // val++; + inc.z val + // } + rts +} +printval: { + // SCREEN[0] = val + lda.z val + sta SCREEN + // } + rts +} +ival: { + // incval() + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // } + rts +} +pval: { + // printval() + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // } + rts +} +main: { + .label i = 3 + lda #0 + sta.z i + __b1: + // pval() + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // printother() + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // ival() + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // for(char i:0..5) + inc.z i + lda #6 + cmp.z i + bne __b1 + // } + rts +} diff --git a/src/test/ref/procedure-callingconvention-stack-far-4.cfg b/src/test/ref/procedure-callingconvention-stack-far-4.cfg new file mode 100644 index 000000000..07de02cc3 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-4.cfg @@ -0,0 +1,79 @@ + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] val = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [2] phi() + [3] callexecute main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [4] return + to:@return + +__far(bank) __stackcall void printother() +printother: scope:[printother] from + [5] phi() + to:printother::@1 +printother::@1: scope:[printother] from printother printother::@1 + [6] printother::i#2 = phi( printother/0, printother::@1/printother::i#1 ) + [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] + [8] printother::i#1 = ++ printother::i#2 + [9] if(printother::i#1!=6) goto printother::@1 + to:printother::@return +printother::@return: scope:[printother] from printother::@1 + [10] return + to:@return + +__far(bank) __stackcall void incval() +incval: scope:[incval] from + [11] val = ++ val + to:incval::@return +incval::@return: scope:[incval] from incval + [12] return + to:@return + +__far(bank) __stackcall void printval() +printval: scope:[printval] from + [13] *SCREEN = val + to:printval::@return +printval::@return: scope:[printval] from printval + [14] return + to:@return + +__far(bank) __stackcall void ival() +ival: scope:[ival] from + [15] phi() + [16] callexecute incval + to:ival::@return +ival::@return: scope:[ival] from ival + [17] return + to:@return + +__far(bank) __stackcall void pval() +pval: scope:[pval] from + [18] phi() + [19] callexecute printval + to:pval::@return +pval::@return: scope:[pval] from pval + [20] return + to:@return + +__stackcall void main() +main: scope:[main] from + [21] phi() + to:main::@1 +main::@1: scope:[main] from main main::@1 + [22] main::i#2 = phi( main/0, main::@1/main::i#1 ) + [23] callexecute pval + [24] callexecute printother + [25] callexecute ival + [26] main::i#1 = ++ main::i#2 + [27] if(main::i#1!=6) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + [28] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-far-4.log b/src/test/ref/procedure-callingconvention-stack-far-4.log new file mode 100644 index 000000000..677d0e3cf --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-4.log @@ -0,0 +1,924 @@ +Converting variable modified inside __stackcall procedure main() to load/store val +Inlined call call __init +Far call main::$0 = call pval +Far call main::$1 = call printother +Far call main::$2 = call ival +Far call pval::$0 = call printval +Far call ival::$0 = call incval +Calling convention __stackcall adding prepare/execute/finalize for call pval +Calling convention __stackcall adding prepare/execute/finalize for call printother +Calling convention __stackcall adding prepare/execute/finalize for call ival +Calling convention __stackcall adding prepare/execute/finalize for call printval +Calling convention __stackcall adding prepare/execute/finalize for call incval +Calling convention __stackcall adding prepare/execute/finalize for call main + +CONTROL FLOW GRAPH SSA + +__stackcall void main() +main: scope:[main] from + main::i#0 = 0 + to:main::@1 +main::@1: scope:[main] from main main::@1 + main::i#2 = phi( main/main::i#0, main::@1/main::i#1 ) + callexecute pval + callexecute printother + callexecute ival + main::i#1 = main::i#2 + rangenext(0,5) + main::$3 = main::i#1 != rangelast(0,5) + if(main::$3) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__far(bank) __stackcall void pval() +pval: scope:[pval] from + callexecute printval + to:pval::@return +pval::@return: scope:[pval] from pval + return + to:@return + +__far(bank) __stackcall void ival() +ival: scope:[ival] from + callexecute incval + to:ival::@return +ival::@return: scope:[ival] from ival + return + to:@return + +__far(bank) __stackcall void printval() +printval: scope:[printval] from + SCREEN[0] = val + to:printval::@return +printval::@return: scope:[printval] from printval + return + to:@return + +__far(bank) __stackcall void incval() +incval: scope:[incval] from + val = ++ val + to:incval::@return +incval::@return: scope:[incval] from incval + return + to:@return + +__far(bank) __stackcall void printother() +printother: scope:[printother] from + printother::i#0 = 0 + to:printother::@1 +printother::@1: scope:[printother] from printother printother::@1 + printother::i#2 = phi( printother/printother::i#0, printother::@1/printother::i#1 ) + (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] + printother::i#1 = printother::i#2 + rangenext(0,5) + printother::$1 = printother::i#1 != rangelast(0,5) + if(printother::$1) goto printother::@1 + to:printother::@return +printother::@return: scope:[printother] from printother::@1 + return + to:@return + +void __start() +__start: scope:[__start] from + to:__start::__init1 +__start::__init1: scope:[__start] from __start + val = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + callexecute main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +void __start() +__far(bank) __stackcall void incval() +__far(bank) __stackcall void ival() +__stackcall void main() +bool main::$3 +char main::i +char main::i#0 +char main::i#1 +char main::i#2 +__far(bank) __stackcall void printother() +bool printother::$1 +char printother::i +char printother::i#0 +char printother::i#1 +char printother::i#2 +__far(bank) __stackcall void printval() +__far(bank) __stackcall void pval() +__loadstore char val + +Adding number conversion cast (unumber) 0 in SCREEN[0] = val +Adding number conversion cast (unumber) $28 in (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 0 +Simplifying constant integer cast $28 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $28 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Simple Condition main::$3 [7] if(main::i#1!=rangelast(0,5)) goto main::@1 +Simple Condition printother::$1 [22] if(printother::i#1!=rangelast(0,5)) goto printother::@1 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant main::i#0 = 0 +Constant printother::i#0 = 0 +Successful SSA optimization Pass2ConstantIdentification +Resolved ranged next value [5] main::i#1 = ++ main::i#2 to ++ +Resolved ranged comparison value [7] if(main::i#1!=rangelast(0,5)) goto main::@1 to 6 +Resolved ranged next value [20] printother::i#1 = ++ printother::i#2 to ++ +Resolved ranged comparison value [22] if(printother::i#1!=rangelast(0,5)) goto printother::@1 to 6 +Simplifying expression containing zero SCREEN in [13] SCREEN[0] = val +Successful SSA optimization PassNSimplifyExpressionWithZero +Adding number conversion cast (unumber) 6 in if(main::i#1!=6) goto main::@1 +Adding number conversion cast (unumber) 6 in if(printother::i#1!=6) goto printother::@1 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant integer cast 6 +Simplifying constant integer cast 6 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 6 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inlining constant with var siblings main::i#0 +Inlining constant with var siblings printother::i#0 +Constant inlined main::i#0 = 0 +Constant inlined printother::i#0 = 0 +Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@2(between main::@1 and main::@1) +Added new block during phi lifting printother::@2(between printother::@1 and printother::@1) +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of printother +Adding NOP phi() at start of ival +Adding NOP phi() at start of pval +Adding NOP phi() at start of main +CALL GRAPH +Calls in [__start] to main:3 +Calls in [ival] to incval:17 +Calls in [pval] to printval:20 +Calls in [main] to pval:24 printother:25 ival:26 + +Created 2 initial phi equivalence classes +Coalesced [11] printother::i#3 = printother::i#1 +Coalesced [30] main::i#3 = main::i#1 +Coalesced down to 2 phi equivalence classes +Culled Empty Block label printother::@2 +Culled Empty Block label main::@2 +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of printother +Adding NOP phi() at start of ival +Adding NOP phi() at start of pval +Adding NOP phi() at start of main + +FINAL CONTROL FLOW GRAPH + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] val = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [2] phi() + [3] callexecute main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [4] return + to:@return + +__far(bank) __stackcall void printother() +printother: scope:[printother] from + [5] phi() + to:printother::@1 +printother::@1: scope:[printother] from printother printother::@1 + [6] printother::i#2 = phi( printother/0, printother::@1/printother::i#1 ) + [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] + [8] printother::i#1 = ++ printother::i#2 + [9] if(printother::i#1!=6) goto printother::@1 + to:printother::@return +printother::@return: scope:[printother] from printother::@1 + [10] return + to:@return + +__far(bank) __stackcall void incval() +incval: scope:[incval] from + [11] val = ++ val + to:incval::@return +incval::@return: scope:[incval] from incval + [12] return + to:@return + +__far(bank) __stackcall void printval() +printval: scope:[printval] from + [13] *SCREEN = val + to:printval::@return +printval::@return: scope:[printval] from printval + [14] return + to:@return + +__far(bank) __stackcall void ival() +ival: scope:[ival] from + [15] phi() + [16] callexecute incval + to:ival::@return +ival::@return: scope:[ival] from ival + [17] return + to:@return + +__far(bank) __stackcall void pval() +pval: scope:[pval] from + [18] phi() + [19] callexecute printval + to:pval::@return +pval::@return: scope:[pval] from pval + [20] return + to:@return + +__stackcall void main() +main: scope:[main] from + [21] phi() + to:main::@1 +main::@1: scope:[main] from main main::@1 + [22] main::i#2 = phi( main/0, main::@1/main::i#1 ) + [23] callexecute pval + [24] callexecute printother + [25] callexecute ival + [26] main::i#1 = ++ main::i#2 + [27] if(main::i#1!=6) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + [28] return + to:@return + +null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope printother +null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope ival +null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope pval +null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope ival +null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope pval + +VARIABLE REGISTER WEIGHTS +void __start() +__far(bank) __stackcall void incval() +__far(bank) __stackcall void ival() +__stackcall void main() +char main::i +char main::i#1 // 151.5 +char main::i#2 // 50.5 +__far(bank) __stackcall void printother() +char printother::i +char printother::i#1 // 15001.5 +char printother::i#2 // 20002.0 +__far(bank) __stackcall void printval() +__far(bank) __stackcall void pval() +__loadstore char val // 1579.2105263157896 + +Initial phi equivalence classes +[ printother::i#2 printother::i#1 ] +[ main::i#2 main::i#1 ] +Added variable val to live range equivalence class [ val ] +Complete equivalence classes +[ printother::i#2 printother::i#1 ] +[ main::i#2 main::i#1 ] +[ val ] +Allocated zp[1]:2 [ printother::i#2 printother::i#1 ] +Allocated zp[1]:3 [ val ] +Allocated zp[1]:4 [ main::i#2 main::i#1 ] +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] val = 0 [ val ] ( [ val ] { } ) always clobbers reg byte a +Statement [13] *SCREEN = val [ val ] ( main:3::pval:23::printval:19 [ main::i#2 val ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::i#2 main::i#1 ] +Potential register analysis [16] callexecute incval missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [16] callexecute incval [ val ] ( main:3::ival:25 [ main::i#2 val ] { } ) always clobbers reg byte a reg byte x reg byte y +Removing always clobbered register reg byte x as potential for zp[1]:4 [ main::i#2 main::i#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:4 [ main::i#2 main::i#1 ] +Potential register analysis [19] callexecute printval missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [19] callexecute printval [ val ] ( main:3::pval:23 [ main::i#2 val ] { } ) always clobbers reg byte a reg byte x reg byte y +Potential register analysis [23] callexecute pval missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [23] callexecute pval [ val main::i#2 ] ( main:3 [ val main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y +Potential register analysis [24] callexecute printother missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [24] callexecute printother [ val main::i#2 ] ( main:3 [ val main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y +Potential register analysis [25] callexecute ival missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [25] callexecute ival [ val main::i#2 ] ( main:3 [ val main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [27] if(main::i#1!=6) goto main::@1 [ val main::i#1 ] ( main:3 [ val main::i#1 ] { } ) always clobbers reg byte a +Statement [1] val = 0 [ val ] ( [ val ] { } ) always clobbers reg byte a +Statement [13] *SCREEN = val [ val ] ( main:3::pval:23::printval:19 [ main::i#2 val ] { } ) always clobbers reg byte a +Potential register analysis [16] callexecute incval missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [16] callexecute incval [ val ] ( main:3::ival:25 [ main::i#2 val ] { } ) always clobbers reg byte a reg byte x reg byte y +Potential register analysis [19] callexecute printval missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [19] callexecute printval [ val ] ( main:3::pval:23 [ main::i#2 val ] { } ) always clobbers reg byte a reg byte x reg byte y +Potential register analysis [23] callexecute pval missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [23] callexecute pval [ val main::i#2 ] ( main:3 [ val main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y +Potential register analysis [24] callexecute printother missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [24] callexecute printother [ val main::i#2 ] ( main:3 [ val main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y +Potential register analysis [25] callexecute ival missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [25] callexecute ival [ val main::i#2 ] ( main:3 [ val main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [27] if(main::i#1!=6) goto main::@1 [ val main::i#1 ] ( main:3 [ val main::i#1 ] { } ) always clobbers reg byte a +Potential registers zp[1]:2 [ printother::i#2 printother::i#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:4 [ main::i#2 main::i#1 ] : zp[1]:4 , +Potential registers zp[1]:3 [ val ] : zp[1]:3 , + +REGISTER UPLIFT SCOPES +Uplift Scope [printother] 35,003.5: zp[1]:2 [ printother::i#2 printother::i#1 ] +Uplift Scope [] 1,579.21: zp[1]:3 [ val ] +Uplift Scope [main] 202: zp[1]:4 [ main::i#2 main::i#1 ] +Uplift Scope [pval] +Uplift Scope [ival] +Uplift Scope [printval] +Uplift Scope [incval] +Uplift Scope [__start] + +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +Uplifting [printother] best 623 combination reg byte x [ printother::i#2 printother::i#1 ] +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +Uplifting [] best 623 combination zp[1]:3 [ val ] +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +Uplifting [main] best 623 combination zp[1]:4 [ main::i#2 main::i#1 ] +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +Uplifting [pval] best 623 combination +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +Uplifting [ival] best 623 combination +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +Uplifting [printval] best 623 combination +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +Uplifting [incval] best 623 combination +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +Uplifting [__start] best 623 combination +Attempting to uplift remaining variables inzp[1]:3 [ val ] +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +Uplifting [] best 623 combination zp[1]:3 [ val ] +Attempting to uplift remaining variables inzp[1]:4 [ main::i#2 main::i#1 ] +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: +Uplifting [main] best 623 combination zp[1]:4 [ main::i#2 main::i#1 ] +Allocated (was zp[1]:3) zp[1]:2 [ val ] +Allocated (was zp[1]:4) zp[1]:3 [ main::i#2 main::i#1 ] +Warning! Unknown fragment for statement [16] callexecute incval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: +Warning! Unknown fragment for statement [19] callexecute printval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: +Warning! Unknown fragment for statement [23] callexecute pval +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: +Warning! Unknown fragment for statement [24] callexecute printother +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: +Warning! Unknown fragment for statement [25] callexecute ival +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack +// Illustrates live range problem with function variable printother::i and global variable val + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(__start) + // Global Constants & labels + .label SCREEN = $400 + .label val = 2 +.segment Code + // __start +__start: { + jmp __init1 + // __start::__init1 + __init1: + // [1] val = 0 -- vbuz1=vbuc1 + lda #0 + sta.z val + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + __b1_from___init1: + jmp __b1 + // __start::@1 + __b1: + // [3] callexecute main -- call_vprc1 + jsr main + jmp __breturn + // __start::@return + __breturn: + // [4] return + rts +} + // printother +printother: { + // [6] phi from printother to printother::@1 [phi:printother->printother::@1] + __b1_from_printother: + // [6] phi printother::i#2 = 0 [phi:printother->printother::@1#0] -- vbuxx=vbuc1 + ldx #0 + jmp __b1 + // [6] phi from printother::@1 to printother::@1 [phi:printother::@1->printother::@1] + __b1_from___b1: + // [6] phi printother::i#2 = printother::i#1 [phi:printother::@1->printother::@1#0] -- register_copy + jmp __b1 + // printother::@1 + __b1: + // [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] -- pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx + inc SCREEN+$28,x + // [8] printother::i#1 = ++ printother::i#2 -- vbuxx=_inc_vbuxx + inx + // [9] if(printother::i#1!=6) goto printother::@1 -- vbuxx_neq_vbuc1_then_la1 + cpx #6 + bne __b1_from___b1 + jmp __breturn + // printother::@return + __breturn: + // [10] return + rts +} + // incval +incval: { + // [11] val = ++ val -- vbuz1=_inc_vbuz1 + inc.z val + jmp __breturn + // incval::@return + __breturn: + // [12] return + rts +} + // printval +printval: { + // [13] *SCREEN = val -- _deref_pbuc1=vbuz1 + lda.z val + sta SCREEN + jmp __breturn + // printval::@return + __breturn: + // [14] return + rts +} + // ival +ival: { + // [16] callexecute incval + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + jmp __breturn + // ival::@return + __breturn: + // [17] return + rts +} + // pval +pval: { + // [19] callexecute printval + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + jmp __breturn + // pval::@return + __breturn: + // [20] return + rts +} + // main +main: { + .label i = 3 + // [22] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + // [22] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + jmp __b1 + // [22] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + __b1_from___b1: + // [22] phi main::i#2 = main::i#1 [phi:main::@1->main::@1#0] -- register_copy + jmp __b1 + // main::@1 + __b1: + // [23] callexecute pval + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [24] callexecute printother + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [25] callexecute ival + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [26] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [27] if(main::i#1!=6) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #6 + cmp.z i + bne __b1_from___b1 + jmp __breturn + // main::@return + __breturn: + // [28] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __init1 +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Replacing label __b1_from___b1 with __b1 +Replacing label __b1_from___b1 with __b1 +Removing instruction __b1_from___init1: +Removing instruction __b1_from___b1: +Removing instruction __b1_from___b1: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction __init1: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __b1_from_printother: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __b1_from_main: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Removing instruction jmp __b1 +Removing instruction jmp __b1 +Succesful ASM optimization Pass5NextJumpElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void __start() +__far(bank) __stackcall void incval() +__far(bank) __stackcall void ival() +__stackcall void main() +char main::i +char main::i#1 // i zp[1]:3 151.5 +char main::i#2 // i zp[1]:3 50.5 +__far(bank) __stackcall void printother() +char printother::i +char printother::i#1 // reg byte x 15001.5 +char printother::i#2 // reg byte x 20002.0 +__far(bank) __stackcall void printval() +__far(bank) __stackcall void pval() +__loadstore char val // zp[1]:2 1579.2105263157896 + +reg byte x [ printother::i#2 printother::i#1 ] +zp[1]:3 [ main::i#2 main::i#1 ] +zp[1]:2 [ val ] + + +FINAL ASSEMBLER +Score: 395 + + // File Comments +// Test a procedure with calling convention stack +// Illustrates live range problem with function variable printother::i and global variable val + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-4.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(__start) + // Global Constants & labels + .label SCREEN = $400 + .label val = 2 +.segment Code + // __start +__start: { + // __start::__init1 + // char val = 0 + // [1] val = 0 -- vbuz1=vbuc1 + lda #0 + sta.z val + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // __start::@1 + // [3] callexecute main -- call_vprc1 + jsr main + // __start::@return + // [4] return + rts +} + // printother +printother: { + // [6] phi from printother to printother::@1 [phi:printother->printother::@1] + // [6] phi printother::i#2 = 0 [phi:printother->printother::@1#0] -- vbuxx=vbuc1 + ldx #0 + // [6] phi from printother::@1 to printother::@1 [phi:printother::@1->printother::@1] + // [6] phi printother::i#2 = printother::i#1 [phi:printother::@1->printother::@1#0] -- register_copy + // printother::@1 + __b1: + // (SCREEN+40)[i]++; + // [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] -- pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx + inc SCREEN+$28,x + // for(char i:0..5) + // [8] printother::i#1 = ++ printother::i#2 -- vbuxx=_inc_vbuxx + inx + // [9] if(printother::i#1!=6) goto printother::@1 -- vbuxx_neq_vbuc1_then_la1 + cpx #6 + bne __b1 + // printother::@return + // } + // [10] return + rts +} + // incval +incval: { + // val++; + // [11] val = ++ val -- vbuz1=_inc_vbuz1 + inc.z val + // incval::@return + // } + // [12] return + rts +} + // printval +printval: { + // SCREEN[0] = val + // [13] *SCREEN = val -- _deref_pbuc1=vbuz1 + lda.z val + sta SCREEN + // printval::@return + // } + // [14] return + rts +} + // ival +ival: { + // incval() + // [16] callexecute incval + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // ival::@return + // } + // [17] return + rts +} + // pval +pval: { + // printval() + // [19] callexecute printval + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // pval::@return + // } + // [20] return + rts +} + // main +main: { + .label i = 3 + // [22] phi from main to main::@1 [phi:main->main::@1] + // [22] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + // [22] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [22] phi main::i#2 = main::i#1 [phi:main::@1->main::@1#0] -- register_copy + // main::@1 + __b1: + // pval() + // [23] callexecute pval + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // printother() + // [24] callexecute printother + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // ival() + // [25] callexecute ival + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // for(char i:0..5) + // [26] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [27] if(main::i#1!=6) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #6 + cmp.z i + bne __b1 + // main::@return + // } + // [28] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-stack-far-4.sym b/src/test/ref/procedure-callingconvention-stack-far-4.sym new file mode 100644 index 000000000..0081a2b70 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-4.sym @@ -0,0 +1,19 @@ +__constant char * const SCREEN = (char *) 1024 +void __start() +__far(bank) __stackcall void incval() +__far(bank) __stackcall void ival() +__stackcall void main() +char main::i +char main::i#1 // i zp[1]:3 151.5 +char main::i#2 // i zp[1]:3 50.5 +__far(bank) __stackcall void printother() +char printother::i +char printother::i#1 // reg byte x 15001.5 +char printother::i#2 // reg byte x 20002.0 +__far(bank) __stackcall void printval() +__far(bank) __stackcall void pval() +__loadstore char val // zp[1]:2 1579.2105263157896 + +reg byte x [ printother::i#2 printother::i#1 ] +zp[1]:3 [ main::i#2 main::i#1 ] +zp[1]:2 [ val ] diff --git a/src/test/ref/procedure-callingconvention-stack-far-5.asm b/src/test/ref/procedure-callingconvention-stack-far-5.asm new file mode 100644 index 000000000..31f8416e8 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-5.asm @@ -0,0 +1,110 @@ +// Test a procedure with calling convention stack +// Returning and passing struct values + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(__start) + .const OFFSET_STRUCT_POINT_Y = 1 + .const SIZEOF_STRUCT_POINT = 2 + .const STACK_BASE = $103 + .label SCREEN = $400 + .label idx = 4 +.segment Code +__start: { + // char idx = 0 + lda #0 + sta.z idx + jsr main + rts +} +// void print(__zp(2) struct Point p) +print: { + .const OFFSET_STACK_P = 0 + .label p = 2 + tsx + lda STACK_BASE+OFFSET_STACK_P,x + sta.z p + lda STACK_BASE+OFFSET_STACK_P+1,x + sta.z p+1 + // SCREEN[idx++] = p.x + lda.z p + ldy.z idx + sta SCREEN,y + // SCREEN[idx++] = p.x; + inc.z idx + // SCREEN[idx++] = p.y + lda.z p+OFFSET_STRUCT_POINT_Y + ldy.z idx + sta SCREEN,y + // SCREEN[idx++] = p.y; + inc.z idx + // } + rts +} +// __zp(6) struct Point get(__register(X) char i) +get: { + .const OFFSET_STACK_I = 0 + .const OFFSET_STACK_RETURN_0 = 0 + .label return = 6 + .label p = 8 + tsx + lda STACK_BASE+OFFSET_STACK_I,x + tax + // i/2 + txa + lsr + // struct Point p = { i, i/2 } + stx.z p + sta.z p+OFFSET_STRUCT_POINT_Y + // return p; + ldy #SIZEOF_STRUCT_POINT + !: + lda p-1,y + sta return-1,y + dey + bne !- + // } + tsx + lda.z return + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + lda.z return+1 + sta STACK_BASE+OFFSET_STACK_RETURN_0+1,x + rts +} +main: { + .label p = 2 + .label i = 5 + lda #0 + sta.z i + __b1: + // for(char i=0;i<5;i++) + lda.z i + cmp #5 + bcc __b2 + // } + rts + __b2: + // struct Point p = get(i) + lda.z i + pha + pha + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + pla + sta.z p + pla + sta.z p+1 + // print(p) + pha + lda.z p + pha + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + pla + pla + // for(char i=0;i<5;i++) + inc.z i + jmp __b1 +} diff --git a/src/test/ref/procedure-callingconvention-stack-far-5.cfg b/src/test/ref/procedure-callingconvention-stack-far-5.cfg new file mode 100644 index 000000000..0e44c7ff7 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-5.cfg @@ -0,0 +1,62 @@ + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] idx = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [2] phi() + [3] callexecute main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [4] return + to:@return + +__far(bank) __stackcall void print(struct Point p) +print: scope:[print] from + [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) + [6] SCREEN[idx] = *((char *)&print::p) + [7] idx = ++ idx + [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) + [9] idx = ++ idx + to:print::@return +print::@return: scope:[print] from print + [10] return + to:@return + +__far(bank) __stackcall struct Point get(char i) +get: scope:[get] from + [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) + [12] get::$0 = get::i#0 >> 1 + [13] *((char *)&get::p) = get::i#0 + [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 + [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) + to:get::@return +get::@return: scope:[get] from get + [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return + [17] return + to:@return + +__stackcall void main() +main: scope:[main] from + [18] phi() + to:main::@1 +main::@1: scope:[main] from main main::@2 + [19] main::i#2 = phi( main/0, main::@2/main::i#1 ) + [20] if(main::i#2<5) goto main::@2 + to:main::@return +main::@return: scope:[main] from main::@1 + [21] return + to:@return +main::@2: scope:[main] from main::@1 + [22] stackpush(char) = main::i#2 + sideeffect stackpushpadding(1) + [24] callexecute get + [25] main::p = stackpull(struct Point) + [26] stackpush(struct Point) = main::p + [27] callexecute print + sideeffect stackpullpadding(2) + [29] main::i#1 = ++ main::i#2 + to:main::@1 diff --git a/src/test/ref/procedure-callingconvention-stack-far-5.log b/src/test/ref/procedure-callingconvention-stack-far-5.log new file mode 100644 index 000000000..f6cd22af4 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-5.log @@ -0,0 +1,845 @@ +Converting variable modified inside __stackcall procedure main() to load/store idx +Adding parameter assignment in __stackcall procedure get::i = param(get::i) +Adding parameter assignment in __stackcall procedure print::p = param(print::p) +Inlined call call __init +Far call main::p = call get(main::i) +Far call main::$2 = call print(main::p) +Eliminating unused variable with no statement main::$1 +Calling convention __stackcall adding prepare/execute/finalize for main::p = call get(main::i) +Calling convention __stackcall adding prepare/execute/finalize for call print(main::p) +Calling convention __stackcall adding prepare/execute/finalize for call main +Calling convention STACK_CALL replacing param(get::i) with stackidx(char,get::OFFSET_STACK_I) +Calling convention STACK_CALL replacing param(print::p) with stackidx(struct Point,print::OFFSET_STACK_P) +Calling convention STACK_CALL adding stack return stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return +Calling convention STACK_CALL adding stack pull main::p = stackpull(struct Point) +Calling convention STACK_CALL adding stack push stackpush(char) = main::i +Calling convention STACK_CALL adding stack push stackpush(struct Point) = main::p +Removing C-classic struct-unwound assignment get::p = struct-unwound {*((char *)&get::p+OFFSET_STRUCT_POINT_X), *((char *)&get::p+OFFSET_STRUCT_POINT_Y)} +Removing C-classic struct-unwound assignment get::return = struct-unwound {*(&get::return)} + +CONTROL FLOW GRAPH SSA + +__stackcall void main() +main: scope:[main] from + main::i#0 = 0 + to:main::@1 +main::@1: scope:[main] from main main::@2 + main::i#2 = phi( main/main::i#0, main::@2/main::i#1 ) + main::$0 = main::i#2 < 5 + if(main::$0) goto main::@2 + to:main::@return +main::@2: scope:[main] from main::@1 + main::i#3 = phi( main::@1/main::i#2 ) + stackpush(char) = main::i#3 + sideeffect stackpushpadding(1) + callexecute get + main::p = stackpull(struct Point) + stackpush(struct Point) = main::p + callexecute print + sideeffect stackpullpadding(2) + main::i#1 = ++ main::i#3 + to:main::@1 +main::@return: scope:[main] from main::@1 + return + to:@return + +__far(bank) __stackcall struct Point get(char i) +get: scope:[get] from + get::i#0 = stackidx(char,get::OFFSET_STACK_I) + get::$0 = get::i#0 / 2 + *((char *)&get::p+OFFSET_STRUCT_POINT_X) = get::i#0 + *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 + *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) + to:get::@return +get::@return: scope:[get] from get + stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return + return + to:@return + +__far(bank) __stackcall void print(struct Point p) +print: scope:[print] from + print::p = stackidx(struct Point,print::OFFSET_STACK_P) + SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_X) + idx = ++ idx + SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) + idx = ++ idx + to:print::@return +print::@return: scope:[print] from print + return + to:@return + +void __start() +__start: scope:[__start] from + to:__start::__init1 +__start::__init1: scope:[__start] from __start + idx = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + callexecute main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char OFFSET_STRUCT_POINT_X = 0 +__constant char OFFSET_STRUCT_POINT_Y = 1 +__constant char * const SCREEN = (char *)$400 +__constant char SIZEOF_STRUCT_POINT = 2 +__constant unsigned int STACK_BASE = $103 +void __start() +__far(bank) __stackcall struct Point get(char i) +number get::$0 +__constant char get::OFFSET_STACK_I = 0 +__constant char get::OFFSET_STACK_RETURN_0 = 0 +char get::i +char get::i#0 +__loadstore struct Point get::p +__loadstore struct Point get::return +__loadstore char idx +__stackcall void main() +bool main::$0 +char main::i +char main::i#0 +char main::i#1 +char main::i#2 +char main::i#3 +__loadstore struct Point main::p +__far(bank) __stackcall void print(struct Point p) +__constant char print::OFFSET_STACK_P = 0 +__loadstore struct Point print::p + +Adding number conversion cast (unumber) 5 in main::$0 = main::i#2 < 5 +Adding number conversion cast (unumber) 2 in get::$0 = get::i#0 / 2 +Adding number conversion cast (unumber) get::$0 in get::$0 = get::i#0 / (unumber)2 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 5 +Simplifying constant integer cast 2 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 5 +Finalized unsigned number type (char) 2 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to char in get::$0 = get::i#0 / 2 +Alias main::i#2 = main::i#3 +Successful SSA optimization Pass2AliasElimination +Simple Condition main::$0 [3] if(main::i#2<5) goto main::@2 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant main::i#0 = 0 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero (char *)&get::p in [15] *((char *)&get::p+OFFSET_STRUCT_POINT_X) = get::i#0 +Simplifying expression containing zero (char *)&print::p in [21] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_X) +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused constant OFFSET_STRUCT_POINT_X +Successful SSA optimization PassNEliminateUnusedVars +Rewriting division to use shift [12] get::$0 = get::i#0 / 2 +Successful SSA optimization Pass2MultiplyToShiftRewriting +Inlining constant with var siblings main::i#0 +Constant inlined main::i#0 = 0 +Successful SSA optimization Pass2ConstantInlining +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 2 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of main +CALL GRAPH +Calls in [__start] to main:3 +Calls in [main] to get:24 print:27 + +Created 1 initial phi equivalence classes +Coalesced [30] main::i#4 = main::i#1 +Coalesced down to 1 phi equivalence classes +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of main + +FINAL CONTROL FLOW GRAPH + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] idx = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [2] phi() + [3] callexecute main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [4] return + to:@return + +__far(bank) __stackcall void print(struct Point p) +print: scope:[print] from + [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) + [6] SCREEN[idx] = *((char *)&print::p) + [7] idx = ++ idx + [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) + [9] idx = ++ idx + to:print::@return +print::@return: scope:[print] from print + [10] return + to:@return + +__far(bank) __stackcall struct Point get(char i) +get: scope:[get] from + [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) + [12] get::$0 = get::i#0 >> 1 + [13] *((char *)&get::p) = get::i#0 + [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 + [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) + to:get::@return +get::@return: scope:[get] from get + [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return + [17] return + to:@return + +__stackcall void main() +main: scope:[main] from + [18] phi() + to:main::@1 +main::@1: scope:[main] from main main::@2 + [19] main::i#2 = phi( main/0, main::@2/main::i#1 ) + [20] if(main::i#2<5) goto main::@2 + to:main::@return +main::@return: scope:[main] from main::@1 + [21] return + to:@return +main::@2: scope:[main] from main::@1 + [22] stackpush(char) = main::i#2 + sideeffect stackpushpadding(1) + [24] callexecute get + [25] main::p = stackpull(struct Point) + [26] stackpush(struct Point) = main::p + [27] callexecute print + sideeffect stackpullpadding(2) + [29] main::i#1 = ++ main::i#2 + to:main::@1 + +null depth in calling loop Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 in scope print +null depth in calling loop Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 in scope get + +VARIABLE REGISTER WEIGHTS +void __start() +__far(bank) __stackcall struct Point get(char i) +char get::$0 // 1001.0 +char get::i +char get::i#0 // 1501.5 +__loadstore struct Point get::p +__loadstore struct Point get::return // 47.666666666666664 +__loadstore char idx // 316.2105263157895 +__stackcall void main() +char main::i +char main::i#1 // 202.0 +char main::i#2 // 44.888888888888886 +__loadstore struct Point main::p // 202.0 +__far(bank) __stackcall void print(struct Point p) +__loadstore struct Point print::p // 333.6666666666667 + +Initial phi equivalence classes +[ main::i#2 main::i#1 ] +Added variable idx to live range equivalence class [ idx ] +Added variable print::p to live range equivalence class [ print::p ] +Added variable get::i#0 to live range equivalence class [ get::i#0 ] +Added variable get::$0 to live range equivalence class [ get::$0 ] +Added variable main::p to live range equivalence class [ main::p ] +Added variable get::return to live range equivalence class [ get::return ] +Added variable get::p to live range equivalence class [ get::p ] +Complete equivalence classes +[ main::i#2 main::i#1 ] +[ idx ] +[ print::p ] +[ get::i#0 ] +[ get::$0 ] +[ main::p ] +[ get::return ] +[ get::p ] +Allocated zp[1]:2 [ get::i#0 ] +Allocated zp[1]:3 [ get::$0 ] +Allocated zp[2]:4 [ print::p ] +Allocated zp[1]:6 [ idx ] +Allocated zp[1]:7 [ main::i#2 main::i#1 ] +Allocated zp[2]:8 [ main::p ] +Allocated zp[2]:10 [ get::return ] +Allocated zp[2]:12 [ get::p ] +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] idx = 0 [ idx get::p get::return ] ( [ idx get::p get::return ] { } ) always clobbers reg byte a +Statement [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::i#2 main::i#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:7 [ main::i#2 main::i#1 ] +Statement [6] SCREEN[idx] = *((char *)&print::p) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:7 [ main::i#2 main::i#1 ] +Statement [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) [ idx ] ( main:3::print:27 [ get::p get::return main::i#2 idx ] { } ) always clobbers reg byte a reg byte y +Statement [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) [ get::i#0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::p get::return ] { } ) always clobbers reg byte a reg byte x +Statement [12] get::$0 = get::i#0 >> 1 [ get::i#0 get::$0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::$0 get::p get::return ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:2 [ get::i#0 ] +Statement [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte y +Statement [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte x +Statement [20] if(main::i#2<5) goto main::@2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a +Statement [22] stackpush(char) = main::i#2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a +Potential register analysis [24] callexecute get missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [24] callexecute get [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [25] main::p = stackpull(struct Point) [ idx get::p get::return main::i#2 main::p ] ( main:3 [ idx get::p get::return main::i#2 main::p ] { } ) always clobbers reg byte a +Statement [26] stackpush(struct Point) = main::p [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a +Potential register analysis [27] callexecute print missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [27] callexecute print [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement sideeffect stackpullpadding(2) always clobbers reg byte a +Statement [1] idx = 0 [ idx get::p get::return ] ( [ idx get::p get::return ] { } ) always clobbers reg byte a +Statement [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte x +Statement [6] SCREEN[idx] = *((char *)&print::p) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte y +Statement [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) [ idx ] ( main:3::print:27 [ get::p get::return main::i#2 idx ] { } ) always clobbers reg byte a reg byte y +Statement [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) [ get::i#0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::p get::return ] { } ) always clobbers reg byte a reg byte x +Statement [12] get::$0 = get::i#0 >> 1 [ get::i#0 get::$0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::$0 get::p get::return ] { } ) always clobbers reg byte a +Statement [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte y +Statement [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte x +Statement [20] if(main::i#2<5) goto main::@2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a +Statement [22] stackpush(char) = main::i#2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a +Potential register analysis [24] callexecute get missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [24] callexecute get [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [25] main::p = stackpull(struct Point) [ idx get::p get::return main::i#2 main::p ] ( main:3 [ idx get::p get::return main::i#2 main::p ] { } ) always clobbers reg byte a +Statement [26] stackpush(struct Point) = main::p [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a +Potential register analysis [27] callexecute print missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [27] callexecute print [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement sideeffect stackpullpadding(2) always clobbers reg byte a +Potential registers zp[1]:7 [ main::i#2 main::i#1 ] : zp[1]:7 , +Potential registers zp[1]:6 [ idx ] : zp[1]:6 , +Potential registers zp[2]:4 [ print::p ] : zp[2]:4 , +Potential registers zp[1]:2 [ get::i#0 ] : zp[1]:2 , reg byte x , reg byte y , +Potential registers zp[1]:3 [ get::$0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:8 [ main::p ] : zp[2]:8 , +Potential registers zp[2]:10 [ get::return ] : zp[2]:10 , +Potential registers zp[2]:12 [ get::p ] : zp[2]:12 , + +REGISTER UPLIFT SCOPES +Uplift Scope [get] 1,501.5: zp[1]:2 [ get::i#0 ] 1,001: zp[1]:3 [ get::$0 ] 47.67: zp[2]:10 [ get::return ] 0: zp[2]:12 [ get::p ] +Uplift Scope [main] 246.89: zp[1]:7 [ main::i#2 main::i#1 ] 202: zp[2]:8 [ main::p ] +Uplift Scope [print] 333.67: zp[2]:4 [ print::p ] +Uplift Scope [] 316.21: zp[1]:6 [ idx ] +Uplift Scope [Point] +Uplift Scope [__start] + +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Uplifting [get] best 873 combination reg byte x [ get::i#0 ] reg byte a [ get::$0 ] zp[2]:10 [ get::return ] zp[2]:12 [ get::p ] +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Uplifting [main] best 873 combination zp[1]:7 [ main::i#2 main::i#1 ] zp[2]:8 [ main::p ] +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Uplifting [print] best 873 combination zp[2]:4 [ print::p ] +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Uplifting [] best 873 combination zp[1]:6 [ idx ] +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Uplifting [Point] best 873 combination +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Uplifting [__start] best 873 combination +Attempting to uplift remaining variables inzp[1]:6 [ idx ] +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Uplifting [] best 873 combination zp[1]:6 [ idx ] +Attempting to uplift remaining variables inzp[1]:7 [ main::i#2 main::i#1 ] +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Uplifting [main] best 873 combination zp[1]:7 [ main::i#2 main::i#1 ] +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: +Coalescing zero page register [ zp[2]:8 [ main::p ] ] with [ zp[2]:4 [ print::p ] ] +Allocated (was zp[2]:8) zp[2]:2 [ main::p print::p ] +Allocated (was zp[1]:6) zp[1]:4 [ idx ] +Allocated (was zp[1]:7) zp[1]:5 [ main::i#2 main::i#1 ] +Allocated (was zp[2]:10) zp[2]:6 [ get::return ] +Allocated (was zp[2]:12) zp[2]:8 [ get::p ] +Warning! Unknown fragment for statement [24] callexecute get +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: +Warning! Unknown fragment for statement [27] callexecute print +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack +// Returning and passing struct values + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(__start) + // Global Constants & labels + .const OFFSET_STRUCT_POINT_Y = 1 + .const SIZEOF_STRUCT_POINT = 2 + .const STACK_BASE = $103 + .label SCREEN = $400 + .label idx = 4 +.segment Code + // __start +__start: { + jmp __init1 + // __start::__init1 + __init1: + // [1] idx = 0 -- vbuz1=vbuc1 + lda #0 + sta.z idx + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + __b1_from___init1: + jmp __b1 + // __start::@1 + __b1: + // [3] callexecute main -- call_vprc1 + jsr main + jmp __breturn + // __start::@return + __breturn: + // [4] return + rts +} + // print +// void print(__zp(2) struct Point p) +print: { + .const OFFSET_STACK_P = 0 + .label p = 2 + // [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) -- vssz1=_stackidxstruct_2_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_P,x + sta.z p + lda STACK_BASE+OFFSET_STACK_P+1,x + sta.z p+1 + // [6] SCREEN[idx] = *((char *)&print::p) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 + lda.z p + ldy.z idx + sta SCREEN,y + // [7] idx = ++ idx -- vbuz1=_inc_vbuz1 + inc.z idx + // [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 + lda.z p+OFFSET_STRUCT_POINT_Y + ldy.z idx + sta SCREEN,y + // [9] idx = ++ idx -- vbuz1=_inc_vbuz1 + inc.z idx + jmp __breturn + // print::@return + __breturn: + // [10] return + rts +} + // get +// __zp(6) struct Point get(__register(X) char i) +get: { + .const OFFSET_STACK_I = 0 + .const OFFSET_STACK_RETURN_0 = 0 + .label return = 6 + .label p = 8 + // [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) -- vbuxx=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_I,x + tax + // [12] get::$0 = get::i#0 >> 1 -- vbuaa=vbuxx_ror_1 + txa + lsr + // [13] *((char *)&get::p) = get::i#0 -- _deref_pbuc1=vbuxx + stx.z p + // [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 -- _deref_pbuc1=vbuaa + sta.z p+OFFSET_STRUCT_POINT_Y + // [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda p-1,y + sta return-1,y + dey + bne !- + jmp __breturn + // get::@return + __breturn: + // [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return -- _stackidxstruct_2_vbuc1=vssz1 + tsx + lda.z return + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + lda.z return+1 + sta STACK_BASE+OFFSET_STACK_RETURN_0+1,x + // [17] return + rts +} + // main +main: { + .label p = 2 + .label i = 5 + // [19] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + // [19] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + jmp __b1 + // main::@1 + __b1: + // [20] if(main::i#2<5) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda.z i + cmp #5 + bcc __b2 + jmp __breturn + // main::@return + __breturn: + // [21] return + rts + // main::@2 + __b2: + // [22] stackpush(char) = main::i#2 -- _stackpushbyte_=vbuz1 + lda.z i + pha + // sideeffect stackpushpadding(1) -- _stackpushpadding_1 + pha + // [24] callexecute get + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [25] main::p = stackpull(struct Point) -- vssz1=_stackpullstruct_2_ + pla + sta.z p + pla + sta.z p+1 + // [26] stackpush(struct Point) = main::p -- _stackpushstruct_2_=vssz1 + lda.z p+1 + pha + lda.z p + pha + // [27] callexecute print + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // sideeffect stackpullpadding(2) -- _stackpullpadding_2 + pla + pla + // [29] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [19] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + __b1_from___b2: + // [19] phi main::i#2 = main::i#1 [phi:main::@2->main::@1#0] -- register_copy + jmp __b1 +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __init1 +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda.z p+1 +Succesful ASM optimization Pass5UnnecesaryLoadElimination +Removing instruction __b1_from___init1: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction __init1: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __b1_from_main: +Removing instruction __breturn: +Removing instruction __b1_from___b2: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char OFFSET_STRUCT_POINT_Y = 1 +__constant char * const SCREEN = (char *) 1024 +__constant char SIZEOF_STRUCT_POINT = 2 +__constant unsigned int STACK_BASE = $103 +void __start() +__far(bank) __stackcall struct Point get(char i) +char get::$0 // reg byte a 1001.0 +__constant char get::OFFSET_STACK_I = 0 +__constant char get::OFFSET_STACK_RETURN_0 = 0 +char get::i +char get::i#0 // reg byte x 1501.5 +__loadstore struct Point get::p // zp[2]:8 +__loadstore struct Point get::return // zp[2]:6 47.666666666666664 +__loadstore char idx // zp[1]:4 316.2105263157895 +__stackcall void main() +char main::i +char main::i#1 // i zp[1]:5 202.0 +char main::i#2 // i zp[1]:5 44.888888888888886 +__loadstore struct Point main::p // zp[2]:2 202.0 +__far(bank) __stackcall void print(struct Point p) +__constant char print::OFFSET_STACK_P = 0 +__loadstore struct Point print::p // zp[2]:2 333.6666666666667 + +zp[1]:5 [ main::i#2 main::i#1 ] +zp[1]:4 [ idx ] +reg byte x [ get::i#0 ] +reg byte a [ get::$0 ] +zp[2]:2 [ main::p print::p ] +zp[2]:6 [ get::return ] +zp[2]:8 [ get::p ] + + +FINAL ASSEMBLER +Score: 741 + + // File Comments +// Test a procedure with calling convention stack +// Returning and passing struct values + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(__start) + // Global Constants & labels + .const OFFSET_STRUCT_POINT_Y = 1 + .const SIZEOF_STRUCT_POINT = 2 + .const STACK_BASE = $103 + .label SCREEN = $400 + .label idx = 4 +.segment Code + // __start +__start: { + // __start::__init1 + // char idx = 0 + // [1] idx = 0 -- vbuz1=vbuc1 + lda #0 + sta.z idx + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // __start::@1 + // [3] callexecute main -- call_vprc1 + jsr main + // __start::@return + // [4] return + rts +} + // print +// void print(__zp(2) struct Point p) +print: { + .const OFFSET_STACK_P = 0 + .label p = 2 + // [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) -- vssz1=_stackidxstruct_2_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_P,x + sta.z p + lda STACK_BASE+OFFSET_STACK_P+1,x + sta.z p+1 + // SCREEN[idx++] = p.x + // [6] SCREEN[idx] = *((char *)&print::p) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 + lda.z p + ldy.z idx + sta SCREEN,y + // SCREEN[idx++] = p.x; + // [7] idx = ++ idx -- vbuz1=_inc_vbuz1 + inc.z idx + // SCREEN[idx++] = p.y + // [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 + lda.z p+OFFSET_STRUCT_POINT_Y + ldy.z idx + sta SCREEN,y + // SCREEN[idx++] = p.y; + // [9] idx = ++ idx -- vbuz1=_inc_vbuz1 + inc.z idx + // print::@return + // } + // [10] return + rts +} + // get +// __zp(6) struct Point get(__register(X) char i) +get: { + .const OFFSET_STACK_I = 0 + .const OFFSET_STACK_RETURN_0 = 0 + .label return = 6 + .label p = 8 + // [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) -- vbuxx=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_I,x + tax + // i/2 + // [12] get::$0 = get::i#0 >> 1 -- vbuaa=vbuxx_ror_1 + txa + lsr + // struct Point p = { i, i/2 } + // [13] *((char *)&get::p) = get::i#0 -- _deref_pbuc1=vbuxx + stx.z p + // [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 -- _deref_pbuc1=vbuaa + sta.z p+OFFSET_STRUCT_POINT_Y + // return p; + // [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda p-1,y + sta return-1,y + dey + bne !- + // get::@return + // } + // [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return -- _stackidxstruct_2_vbuc1=vssz1 + tsx + lda.z return + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + lda.z return+1 + sta STACK_BASE+OFFSET_STACK_RETURN_0+1,x + // [17] return + rts +} + // main +main: { + .label p = 2 + .label i = 5 + // [19] phi from main to main::@1 [phi:main->main::@1] + // [19] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + // main::@1 + __b1: + // for(char i=0;i<5;i++) + // [20] if(main::i#2<5) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda.z i + cmp #5 + bcc __b2 + // main::@return + // } + // [21] return + rts + // main::@2 + __b2: + // struct Point p = get(i) + // [22] stackpush(char) = main::i#2 -- _stackpushbyte_=vbuz1 + lda.z i + pha + // sideeffect stackpushpadding(1) -- _stackpushpadding_1 + pha + // [24] callexecute get + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [25] main::p = stackpull(struct Point) -- vssz1=_stackpullstruct_2_ + pla + sta.z p + pla + sta.z p+1 + // print(p) + // [26] stackpush(struct Point) = main::p -- _stackpushstruct_2_=vssz1 + pha + lda.z p + pha + // [27] callexecute print + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // sideeffect stackpullpadding(2) -- _stackpullpadding_2 + pla + pla + // for(char i=0;i<5;i++) + // [29] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [19] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + // [19] phi main::i#2 = main::i#1 [phi:main::@2->main::@1#0] -- register_copy + jmp __b1 +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-stack-far-5.sym b/src/test/ref/procedure-callingconvention-stack-far-5.sym new file mode 100644 index 000000000..71c714767 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-5.sym @@ -0,0 +1,30 @@ +__constant char OFFSET_STRUCT_POINT_Y = 1 +__constant char * const SCREEN = (char *) 1024 +__constant char SIZEOF_STRUCT_POINT = 2 +__constant unsigned int STACK_BASE = $103 +void __start() +__far(bank) __stackcall struct Point get(char i) +char get::$0 // reg byte a 1001.0 +__constant char get::OFFSET_STACK_I = 0 +__constant char get::OFFSET_STACK_RETURN_0 = 0 +char get::i +char get::i#0 // reg byte x 1501.5 +__loadstore struct Point get::p // zp[2]:8 +__loadstore struct Point get::return // zp[2]:6 47.666666666666664 +__loadstore char idx // zp[1]:4 316.2105263157895 +__stackcall void main() +char main::i +char main::i#1 // i zp[1]:5 202.0 +char main::i#2 // i zp[1]:5 44.888888888888886 +__loadstore struct Point main::p // zp[2]:2 202.0 +__far(bank) __stackcall void print(struct Point p) +__constant char print::OFFSET_STACK_P = 0 +__loadstore struct Point print::p // zp[2]:2 333.6666666666667 + +zp[1]:5 [ main::i#2 main::i#1 ] +zp[1]:4 [ idx ] +reg byte x [ get::i#0 ] +reg byte a [ get::$0 ] +zp[2]:2 [ main::p print::p ] +zp[2]:6 [ get::return ] +zp[2]:8 [ get::p ] diff --git a/src/test/ref/procedure-callingconvention-stack-far-6.asm b/src/test/ref/procedure-callingconvention-stack-far-6.asm new file mode 100644 index 000000000..f5a07a3d3 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-6.asm @@ -0,0 +1,51 @@ +// Test a procedure with calling convention stack +// Recursion that works (no local variables) + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-6.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment Code +// __register(A) char pow2(__register(A) char n) +pow2: { + .const OFFSET_STACK_N = 0 + .const OFFSET_STACK_RETURN_0 = 0 + tsx + lda STACK_BASE+OFFSET_STACK_N,x + // if (n == 0) + cmp #0 + beq __b1 + // n-1 + sec + sbc #1 + // char c = pow2(n-1) + pha + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + pla + // return c+c; + asl + jmp __breturn + __b1: + lda #1 + __breturn: + // } + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + rts +} +main: { + // pow2(6) + lda #6 + pha + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + pla + // *SCREEN = pow2(6) + sta SCREEN + // } + rts +} diff --git a/src/test/ref/procedure-callingconvention-stack-far-6.cfg b/src/test/ref/procedure-callingconvention-stack-far-6.cfg new file mode 100644 index 000000000..23570a74e --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-6.cfg @@ -0,0 +1,29 @@ + +__far(bank) __stackcall char pow2(char n) +pow2: scope:[pow2] from + [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) + [1] if(pow2::n#0==0) goto pow2::@return + to:pow2::@1 +pow2::@1: scope:[pow2] from pow2 + [2] pow2::$1 = pow2::n#0 - 1 + [3] stackpush(char) = pow2::$1 + [4] callexecute pow2 + [5] pow2::c#0 = stackpull(char) + [6] pow2::return#1 = pow2::c#0 + pow2::c#0 + to:pow2::@return +pow2::@return: scope:[pow2] from pow2 pow2::@1 + [7] pow2::return#2 = phi( pow2/1, pow2::@1/pow2::return#1 ) + [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 + [9] return + to:@return + +void main() +main: scope:[main] from + [10] stackpush(char) = 6 + [11] callexecute pow2 + [12] main::$0 = stackpull(char) + [13] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [14] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-far-6.log b/src/test/ref/procedure-callingconvention-stack-far-6.log new file mode 100644 index 000000000..d5fc76baf --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-6.log @@ -0,0 +1,1060 @@ +Adding parameter assignment in __stackcall procedure pow2::n = param(pow2::n) +Far call main::$0 = call pow2(6) +Far call pow2::c = call pow2(pow2::$1) +Eliminating unused variable with no statement pow2::$2 +Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call pow2(6) +Calling convention __stackcall adding prepare/execute/finalize for pow2::c = call pow2(pow2::$1) +Calling convention STACK_CALL replacing param(pow2::n) with stackidx(char,pow2::OFFSET_STACK_N) +Calling convention STACK_CALL adding stack return stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return +Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) +Calling convention STACK_CALL adding stack pull pow2::c = stackpull(char) +Calling convention STACK_CALL adding stack push stackpush(char) = 6 +Calling convention STACK_CALL adding stack push stackpush(char) = pow2::$1 + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + stackpush(char) = 6 + callexecute pow2 + main::$0 = stackpull(char) + *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + return + to:@return + +__far(bank) __stackcall char pow2(char n) +pow2: scope:[pow2] from + pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) + pow2::$0 = pow2::n#0 == 0 + if(pow2::$0) goto pow2::@1 + to:pow2::@2 +pow2::@1: scope:[pow2] from pow2 + pow2::return#0 = 1 + to:pow2::@return +pow2::@2: scope:[pow2] from pow2 + pow2::n#1 = phi( pow2/pow2::n#0 ) + pow2::$1 = pow2::n#1 - 1 + stackpush(char) = pow2::$1 + callexecute pow2 + pow2::c#0 = stackpull(char) + pow2::$3 = pow2::c#0 + pow2::c#0 + pow2::return#1 = pow2::$3 + to:pow2::@return +pow2::@return: scope:[pow2] from pow2::@1 pow2::@2 + pow2::return#2 = phi( pow2::@1/pow2::return#0, pow2::@2/pow2::return#1 ) + stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 + 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 +__constant char * const SCREEN = (char *)$400 +__constant unsigned int STACK_BASE = $103 +void __start() +void main() +char main::$0 +__far(bank) __stackcall char pow2(char n) +bool pow2::$0 +number pow2::$1 +char pow2::$3 +__constant char pow2::OFFSET_STACK_N = 0 +__constant char pow2::OFFSET_STACK_RETURN_0 = 0 +char pow2::c +char pow2::c#0 +char pow2::n +char pow2::n#0 +char pow2::n#1 +char pow2::return +char pow2::return#0 +char pow2::return#1 +char pow2::return#2 + +Adding number conversion cast (unumber) 6 in stackpush(char) = 6 +Adding number conversion cast (unumber) 0 in pow2::$0 = pow2::n#0 == 0 +Adding number conversion cast (unumber) 1 in pow2::return#0 = 1 +Adding number conversion cast (unumber) 1 in pow2::$1 = pow2::n#1 - 1 +Adding number conversion cast (unumber) pow2::$1 in pow2::$1 = pow2::n#1 - (unumber)1 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast stackpush(char) = (unumber)6 +Inlining cast pow2::return#0 = (unumber)1 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 6 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 1 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to char in pow2::$1 = pow2::n#1 - 1 +Alias pow2::n#0 = pow2::n#1 +Alias pow2::return#1 = pow2::$3 +Successful SSA optimization Pass2AliasElimination +Simple Condition pow2::$0 [7] if(pow2::n#0==0) goto pow2::@1 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant pow2::return#0 = 1 +Successful SSA optimization Pass2ConstantIdentification +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 +Inlining constant with var siblings pow2::return#0 +Constant inlined pow2::return#0 = 1 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of pow2::@1 +CALL GRAPH +Calls in [pow2] to pow2:4 +Calls in [main] to pow2:13 + +Created 1 initial phi equivalence classes +Coalesced [7] pow2::return#3 = pow2::return#1 +Coalesced down to 1 phi equivalence classes +Culled Empty Block label pow2::@1 +Renumbering block pow2::@2 to pow2::@1 + +FINAL CONTROL FLOW GRAPH + +__far(bank) __stackcall char pow2(char n) +pow2: scope:[pow2] from + [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) + [1] if(pow2::n#0==0) goto pow2::@return + to:pow2::@1 +pow2::@1: scope:[pow2] from pow2 + [2] pow2::$1 = pow2::n#0 - 1 + [3] stackpush(char) = pow2::$1 + [4] callexecute pow2 + [5] pow2::c#0 = stackpull(char) + [6] pow2::return#1 = pow2::c#0 + pow2::c#0 + to:pow2::@return +pow2::@return: scope:[pow2] from pow2 pow2::@1 + [7] pow2::return#2 = phi( pow2/1, pow2::@1/pow2::return#1 ) + [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 + [9] return + to:@return + +void main() +main: scope:[main] from + [10] stackpush(char) = 6 + [11] callexecute pow2 + [12] main::$0 = stackpull(char) + [13] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [14] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +char main::$0 // 4.0 +__far(bank) __stackcall char pow2(char n) +char pow2::$1 // 22.0 +char pow2::c +char pow2::c#0 // 33.0 +char pow2::n +char pow2::n#0 // 16.5 +char pow2::return +char pow2::return#1 // 22.0 +char pow2::return#2 // 22.0 + +Initial phi equivalence classes +[ pow2::return#2 pow2::return#1 ] +Added variable pow2::n#0 to live range equivalence class [ pow2::n#0 ] +Added variable pow2::$1 to live range equivalence class [ pow2::$1 ] +Added variable pow2::c#0 to live range equivalence class [ pow2::c#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Complete equivalence classes +[ pow2::return#2 pow2::return#1 ] +[ pow2::n#0 ] +[ pow2::$1 ] +[ pow2::c#0 ] +[ main::$0 ] +Allocated zp[1]:2 [ pow2::return#2 pow2::return#1 ] +Allocated zp[1]:3 [ pow2::c#0 ] +Allocated zp[1]:4 [ pow2::$1 ] +Allocated zp[1]:5 [ pow2::n#0 ] +Allocated zp[1]:6 [ main::$0 ] +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) [ pow2::n#0 ] ( pow2:11 [ pow2::n#0 ] { } ) always clobbers reg byte a reg byte x +Potential register analysis [4] callexecute pow2 missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [4] callexecute pow2 [ ] ( pow2:11 [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [5] pow2::c#0 = stackpull(char) [ pow2::c#0 ] ( pow2:11 [ pow2::c#0 ] { } ) always clobbers reg byte a +Statement [6] pow2::return#1 = pow2::c#0 + pow2::c#0 [ pow2::return#1 ] ( pow2:11 [ pow2::return#1 ] { } ) always clobbers reg byte a +Statement [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 [ ] ( pow2:11 [ ] { } ) always clobbers reg byte x +Statement [10] stackpush(char) = 6 [ ] ( [ ] { } ) always clobbers reg byte a +Potential register analysis [11] callexecute pow2 missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: +MISSING FRAGMENTS + Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +Statement [11] callexecute pow2 [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [12] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a +Potential registers zp[1]:2 [ pow2::return#2 pow2::return#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ pow2::n#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:4 [ pow2::$1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ pow2::c#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:6 [ main::$0 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [pow2] 44: zp[1]:2 [ pow2::return#2 pow2::return#1 ] 33: zp[1]:3 [ pow2::c#0 ] 22: zp[1]:4 [ pow2::$1 ] 16.5: zp[1]:5 [ pow2::n#0 ] +Uplift Scope [main] 4: zp[1]:6 [ main::$0 ] +Uplift Scope [] + +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Uplifting [pow2] best 75 combination reg byte a [ pow2::return#2 pow2::return#1 ] reg byte a [ pow2::c#0 ] reg byte a [ pow2::$1 ] reg byte a [ pow2::n#0 ] +Limited combination testing to 100 combinations of 256 possible. +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Uplifting [main] best 69 combination reg byte a [ main::$0 ] +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: +Uplifting [] best 69 combination +Warning! Unknown fragment for statement [4] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: +Warning! Unknown fragment for statement [11] callexecute pow2 +Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack +// Recursion that works (no local variables) + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-6.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment Code + // pow2 +// __register(A) char pow2(__register(A) char n) +pow2: { + .const OFFSET_STACK_N = 0 + .const OFFSET_STACK_RETURN_0 = 0 + // [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_N,x + // [1] if(pow2::n#0==0) goto pow2::@return -- vbuaa_eq_0_then_la1 + cmp #0 + beq __breturn_from_pow2 + jmp __b1 + // pow2::@1 + __b1: + // [2] pow2::$1 = pow2::n#0 - 1 -- vbuaa=vbuaa_minus_1 + sec + sbc #1 + // [3] stackpush(char) = pow2::$1 -- _stackpushbyte_=vbuaa + pha + // [4] callexecute pow2 + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [5] pow2::c#0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // [6] pow2::return#1 = pow2::c#0 + pow2::c#0 -- vbuaa=vbuaa_plus_vbuaa + asl + // [7] phi from pow2::@1 to pow2::@return [phi:pow2::@1->pow2::@return] + __breturn_from___b1: + // [7] phi pow2::return#2 = pow2::return#1 [phi:pow2::@1->pow2::@return#0] -- register_copy + jmp __breturn + // [7] phi from pow2 to pow2::@return [phi:pow2->pow2::@return] + __breturn_from_pow2: + // [7] phi pow2::return#2 = 1 [phi:pow2->pow2::@return#0] -- vbuaa=vbuc1 + lda #1 + jmp __breturn + // pow2::@return + __breturn: + // [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + // [9] return + rts +} + // main +main: { + // [10] stackpush(char) = 6 -- _stackpushbyte_=vbuc1 + lda #6 + pha + // [11] callexecute pow2 + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [12] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // [13] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [14] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __b1: +Removing instruction __breturn_from___b1: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Relabelling long label __breturn_from_pow2 to __b1 +Succesful ASM optimization Pass5RelabelLongLabels + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void main() +char main::$0 // reg byte a 4.0 +__far(bank) __stackcall char pow2(char n) +char pow2::$1 // reg byte a 22.0 +__constant char pow2::OFFSET_STACK_N = 0 +__constant char pow2::OFFSET_STACK_RETURN_0 = 0 +char pow2::c +char pow2::c#0 // reg byte a 33.0 +char pow2::n +char pow2::n#0 // reg byte a 16.5 +char pow2::return +char pow2::return#1 // reg byte a 22.0 +char pow2::return#2 // reg byte a 22.0 + +reg byte a [ pow2::return#2 pow2::return#1 ] +reg byte a [ pow2::n#0 ] +reg byte a [ pow2::$1 ] +reg byte a [ pow2::c#0 ] +reg byte a [ main::$0 ] + + +FINAL ASSEMBLER +Score: 60 + + // File Comments +// Test a procedure with calling convention stack +// Recursion that works (no local variables) + // Upstart + // Commodore 64 PRG executable file +.file [name="procedure-callingconvention-stack-far-6.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment Code + // pow2 +// __register(A) char pow2(__register(A) char n) +pow2: { + .const OFFSET_STACK_N = 0 + .const OFFSET_STACK_RETURN_0 = 0 + // [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_N,x + // if (n == 0) + // [1] if(pow2::n#0==0) goto pow2::@return -- vbuaa_eq_0_then_la1 + cmp #0 + beq __b1 + // pow2::@1 + // n-1 + // [2] pow2::$1 = pow2::n#0 - 1 -- vbuaa=vbuaa_minus_1 + sec + sbc #1 + // char c = pow2(n-1) + // [3] stackpush(char) = pow2::$1 -- _stackpushbyte_=vbuaa + pha + // [4] callexecute pow2 + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [5] pow2::c#0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // return c+c; + // [6] pow2::return#1 = pow2::c#0 + pow2::c#0 -- vbuaa=vbuaa_plus_vbuaa + asl + // [7] phi from pow2::@1 to pow2::@return [phi:pow2::@1->pow2::@return] + // [7] phi pow2::return#2 = pow2::return#1 [phi:pow2::@1->pow2::@return#0] -- register_copy + jmp __breturn + // [7] phi from pow2 to pow2::@return [phi:pow2->pow2::@return] + __b1: + // [7] phi pow2::return#2 = 1 [phi:pow2->pow2::@return#0] -- vbuaa=vbuc1 + lda #1 + // pow2::@return + __breturn: + // } + // [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + // [9] return + rts +} + // main +main: { + // pow2(6) + // [10] stackpush(char) = 6 -- _stackpushbyte_=vbuc1 + lda #6 + pha + // [11] callexecute pow2 + .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 + // [12] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // *SCREEN = pow2(6) + // [13] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + // main::@return + // } + // [14] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-stack-far-6.sym b/src/test/ref/procedure-callingconvention-stack-far-6.sym new file mode 100644 index 000000000..52b0b3f95 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-far-6.sym @@ -0,0 +1,21 @@ +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void main() +char main::$0 // reg byte a 4.0 +__far(bank) __stackcall char pow2(char n) +char pow2::$1 // reg byte a 22.0 +__constant char pow2::OFFSET_STACK_N = 0 +__constant char pow2::OFFSET_STACK_RETURN_0 = 0 +char pow2::c +char pow2::c#0 // reg byte a 33.0 +char pow2::n +char pow2::n#0 // reg byte a 16.5 +char pow2::return +char pow2::return#1 // reg byte a 22.0 +char pow2::return#2 // reg byte a 22.0 + +reg byte a [ pow2::return#2 pow2::return#1 ] +reg byte a [ pow2::n#0 ] +reg byte a [ pow2::$1 ] +reg byte a [ pow2::c#0 ] +reg byte a [ main::$0 ] From 1ef785a2548592b25ced27d03fb94ba79dbd1f4a Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Sat, 19 Nov 2022 07:45:07 +0100 Subject: [PATCH 07/66] Parsing implementation of #pragma far_seg(segment, bank, call_prepare, call_execute, call_finalize) with variable parameters, other option is: #pragma far_seg(segment, bank) After parsing a FarSegment HashMap is created that is later used for the far or near call determination. Added currentFarSegment variable. Added near in KickCLexer for __near directive. Added far_seg and near_seg #pragma keywords. near_seg is to be parsed in the next commit. --- .../dk/camelot64/kickc/parser/KickCLexer.g4 | 1 + .../dk/camelot64/kickc/model/FarSegment.java | 32 ++++++++++++ .../camelot64/kickc/model/symbols/Scope.java | 2 + .../dk/camelot64/kickc/parser/CParser.java | 8 +++ .../Pass0GenerateStatementSequence.java | 52 +++++++++++++++++++ .../procedure-callingconvention-phi-far-1.c | 30 +++++++++++ .../procedure-callingconvention-phi-far-2.c | 30 +++++++++++ .../procedure-callingconvention-phi-far-3.c | 30 +++++++++++ 8 files changed, 185 insertions(+) create mode 100644 src/main/java/dk/camelot64/kickc/model/FarSegment.java create mode 100644 src/test/kc/procedure-callingconvention-phi-far-1.c create mode 100644 src/test/kc/procedure-callingconvention-phi-far-2.c create mode 100644 src/test/kc/procedure-callingconvention-phi-far-3.c diff --git a/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 b/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 index b7662e69e..f784b250e 100644 --- a/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 +++ b/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 @@ -76,6 +76,7 @@ ADDRESS: '__address' ; ADDRESS_ZEROPAGE: '__zp' ; ADDRESS_MAINMEM: '__mem' ; FAR: '__far' ; +NEAR: '__near' ; FORM_SSA: '__ssa' ; FORM_MA: '__ma' ; INTRINSIC: '__intrinsic' ; diff --git a/src/main/java/dk/camelot64/kickc/model/FarSegment.java b/src/main/java/dk/camelot64/kickc/model/FarSegment.java new file mode 100644 index 000000000..d297adbad --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/model/FarSegment.java @@ -0,0 +1,32 @@ +package dk.camelot64.kickc.model; + +import dk.camelot64.kickc.model.symbols.Procedure; + +import java.util.List; + +/** A far segment. */ +public class FarSegment { + + private String name; + private Integer bank; + private String call_prepare; + private String call_execute; + private String call_finalize; + + public FarSegment(String name, Integer bank, String call_prepare, String call_execute, String call_finalize) { + this.name = name; + this.bank = bank; + this.call_prepare = call_prepare; + this.call_execute = call_execute; + this.call_finalize = call_finalize; + } + + public String getName() { + return name; + } + + + public Integer getBank() { + return bank; + } +} diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java b/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java index ed32ce6ba..89541598a 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java @@ -16,6 +16,8 @@ public abstract class Scope implements Symbol { public static final String SEGMENT_CODE_DEFAULT = "Code"; /** The default data segment. */ public static final String SEGMENT_DATA_DEFAULT = "Data"; + /** The default far segment. */ + public static final String SEGMENT_FAR_DEFAULT = ""; private String name; private HashMap symbols; diff --git a/src/main/java/dk/camelot64/kickc/parser/CParser.java b/src/main/java/dk/camelot64/kickc/parser/CParser.java index f56daca13..a01d0194a 100644 --- a/src/main/java/dk/camelot64/kickc/parser/CParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/CParser.java @@ -106,6 +106,14 @@ public class CParser { * The resource-file is copied to the output directory when compiling. */ public static final String PRAGMA_RESOURCE = "resource"; + /** + * #pragma far_seg(...) specifies the scope of the sequent functions to be far. Segments are defined in the linker file. + */ + public static final String PRAGMA_FAR_SEG = "far_seg"; + /** + * #pragma near_seg specifies the scope of the sequent functions to be near. Segments are defined in the linker file. + */ + public static final String PRAGMA_NEAR_SEG = "near_seg"; /** * The Program. diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index e1e977743..9ac613614 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -43,6 +43,10 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor scopeStack; /** All #pragma constructor_for() statements. Collected during parsing and handled by {@link #generate()} before returning. */ private final List pragmaConstructorFors; + /** All #pragma code segments. Collected during parsing. These are used by the far_seg pragmas to validate if the code segment exists during compilation.*/ + private final Map pragmaCodeSegs; + /** All #pragma far segments. Collected during parsing. These are used to compare with the current currentFarSegment to decide a near or a far call, and to keep inline calling routines.*/ + private final Map pragmaFarSegs; public Pass0GenerateStatementSequence(CParser cParser, KickCParser.FileContext fileCtx, Program program, Procedure.CallingConvention initialCallingConvention, StringEncoding defaultEncoding, String defaultInterruptType) { @@ -53,6 +57,8 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor(); // Used to collect all pragma code segments. + this.pragmaFarSegs = new HashMap<>(); // Used to collect all pragma far segments. this.currentInterruptType = defaultInterruptType; scopeStack.push(program.getScope()); } @@ -290,10 +296,35 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor 7) { + final String call_prepare = pragmaParamName(ctx.pragmaParam(2)); + final String call_execute = pragmaParamName(ctx.pragmaParam(3)); + final String call_finalize = pragmaParamName(ctx.pragmaParam(4)); + this.pragmaFarSegs.put(this.currentFarSegment, new FarSegment(pragmaFarSegment, pragmaFarBank.intValue(), call_prepare, call_execute, call_finalize)); + } else { + this.pragmaFarSegs.put(this.currentFarSegment, new FarSegment(pragmaFarSegment, pragmaFarBank.intValue(), "", "", "")); + } + } + } else { + throw new CompileError("Expected at least 2 pragma parameters. Found '" + ctx.getText() + "'.", new StatementSource(ctx)); + } + } catch(IllegalArgumentException e) { + throw new CompileError("Illegal parameter " + ctx.getText(), new StatementSource(ctx)); + } + break; case CParser.PRAGMA_RESOURCE: String resourceFileName = pragmaParamString(pragmaParamSingle(ctx)); addResourceFile(ctx, resourceFileName); @@ -367,6 +398,24 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor Date: Sat, 19 Nov 2022 08:06:52 +0100 Subject: [PATCH 08/66] Implementation of #pragma near_seg without prameters. There was a change needed to update the parameter parsing main algorithm, to make parameters optional instead of mandatory. --- gen/KickCLexer.interp | 5 +- gen/KickCLexer.java | 2556 +++++++++-------- gen/KickCLexer.tokens | 278 +- .../dk/camelot64/kickc/parser/KickCParser.g4 | 3 +- .../Pass0GenerateStatementSequence.java | 3 + .../kickc/preprocessor/CPreprocessor.java | 38 +- .../procedure-callingconvention-phi-far-4.c | 32 + 7 files changed, 1482 insertions(+), 1433 deletions(-) create mode 100644 src/test/kc/procedure-callingconvention-phi-far-4.c diff --git a/gen/KickCLexer.interp b/gen/KickCLexer.interp index c67534aef..3688c113f 100644 --- a/gen/KickCLexer.interp +++ b/gen/KickCLexer.interp @@ -53,6 +53,7 @@ null '__zp' '__mem' '__far' +'__near' '__ssa' '__ma' '__intrinsic' @@ -209,6 +210,7 @@ ADDRESS ADDRESS_ZEROPAGE ADDRESS_MAINMEM FAR +NEAR FORM_SSA FORM_MA INTRINSIC @@ -363,6 +365,7 @@ ADDRESS ADDRESS_ZEROPAGE ADDRESS_MAINMEM FAR +NEAR FORM_SSA FORM_MA INTRINSIC @@ -484,4 +487,4 @@ ASM_MODE IMPORT_MODE atn: -[4, 0, 153, 1974, 6, -1, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 437, 8, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 628, 8, 55, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 805, 8, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 816, 8, 78, 1, 79, 1, 79, 1, 79, 1, 79, 5, 79, 822, 8, 79, 10, 79, 12, 79, 825, 9, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 872, 8, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 3, 95, 934, 8, 95, 1, 96, 1, 96, 1, 96, 3, 96, 939, 8, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 3, 97, 946, 8, 97, 1, 97, 5, 97, 949, 8, 97, 10, 97, 12, 97, 952, 9, 97, 1, 97, 1, 97, 4, 97, 956, 8, 97, 11, 97, 12, 97, 957, 1, 98, 5, 98, 961, 8, 98, 10, 98, 12, 98, 964, 9, 98, 1, 98, 1, 98, 4, 98, 968, 8, 98, 11, 98, 12, 98, 969, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 3, 99, 977, 8, 99, 1, 99, 5, 99, 980, 8, 99, 10, 99, 12, 99, 983, 9, 99, 1, 99, 1, 99, 4, 99, 987, 8, 99, 11, 99, 12, 99, 988, 1, 100, 1, 100, 1, 100, 3, 100, 994, 8, 100, 1, 100, 1, 100, 1, 100, 3, 100, 999, 8, 100, 1, 101, 1, 101, 1, 101, 4, 101, 1004, 8, 101, 11, 101, 12, 101, 1005, 1, 101, 1, 101, 4, 101, 1010, 8, 101, 11, 101, 12, 101, 1011, 3, 101, 1014, 8, 101, 1, 102, 4, 102, 1017, 8, 102, 11, 102, 12, 102, 1018, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 3, 103, 1026, 8, 103, 1, 103, 4, 103, 1029, 8, 103, 11, 103, 12, 103, 1030, 1, 104, 1, 104, 1, 105, 1, 105, 1, 106, 1, 106, 1, 107, 1, 107, 5, 107, 1041, 8, 107, 10, 107, 12, 107, 1044, 9, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 5, 110, 1056, 8, 110, 10, 110, 12, 110, 1059, 9, 110, 1, 110, 1, 110, 3, 110, 1063, 8, 110, 1, 110, 1, 110, 3, 110, 1067, 8, 110, 3, 110, 1069, 8, 110, 1, 110, 3, 110, 1072, 8, 110, 1, 111, 1, 111, 1, 111, 1, 111, 3, 111, 1078, 8, 111, 1, 111, 3, 111, 1081, 8, 111, 1, 111, 1, 111, 1, 111, 3, 111, 1086, 8, 111, 1, 111, 3, 111, 1089, 8, 111, 1, 111, 1, 111, 1, 112, 4, 112, 1094, 8, 112, 11, 112, 12, 112, 1095, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 5, 113, 1104, 8, 113, 10, 113, 12, 113, 1107, 9, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 5, 114, 1115, 8, 114, 10, 114, 12, 114, 1118, 9, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 3, 116, 1738, 8, 116, 1, 117, 1, 117, 1, 118, 1, 118, 1, 119, 1, 119, 1, 120, 1, 120, 1, 121, 1, 121, 1, 122, 1, 122, 1, 123, 1, 123, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 128, 1, 128, 1, 129, 1, 129, 1, 130, 1, 130, 1, 131, 1, 131, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 3, 135, 1782, 8, 135, 1, 136, 1, 136, 1, 136, 3, 136, 1787, 8, 136, 1, 137, 1, 137, 5, 137, 1791, 8, 137, 10, 137, 12, 137, 1794, 9, 137, 1, 137, 1, 137, 4, 137, 1798, 8, 137, 11, 137, 12, 137, 1799, 1, 138, 5, 138, 1803, 8, 138, 10, 138, 12, 138, 1806, 9, 138, 1, 138, 1, 138, 4, 138, 1810, 8, 138, 11, 138, 12, 138, 1811, 1, 139, 1, 139, 5, 139, 1816, 8, 139, 10, 139, 12, 139, 1819, 9, 139, 1, 139, 1, 139, 4, 139, 1823, 8, 139, 11, 139, 12, 139, 1824, 1, 140, 1, 140, 1, 140, 3, 140, 1830, 8, 140, 1, 141, 1, 141, 4, 141, 1834, 8, 141, 11, 141, 12, 141, 1835, 1, 142, 4, 142, 1839, 8, 142, 11, 142, 12, 142, 1840, 1, 143, 1, 143, 4, 143, 1845, 8, 143, 11, 143, 12, 143, 1846, 1, 144, 1, 144, 1, 145, 1, 145, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 3, 147, 1859, 8, 147, 1, 147, 1, 147, 1, 148, 1, 148, 4, 148, 1865, 8, 148, 11, 148, 12, 148, 1866, 1, 149, 1, 149, 5, 149, 1871, 8, 149, 10, 149, 12, 149, 1874, 9, 149, 1, 150, 1, 150, 5, 150, 1878, 8, 150, 10, 150, 12, 150, 1881, 9, 150, 1, 151, 1, 151, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 154, 4, 154, 1891, 8, 154, 11, 154, 12, 154, 1892, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 5, 155, 1901, 8, 155, 10, 155, 12, 155, 1904, 9, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 5, 156, 1912, 8, 156, 10, 156, 12, 156, 1915, 9, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 4, 157, 1924, 8, 157, 11, 157, 12, 157, 1925, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 5, 158, 1935, 8, 158, 10, 158, 12, 158, 1938, 9, 158, 1, 158, 1, 158, 1, 158, 1, 159, 4, 159, 1944, 8, 159, 11, 159, 12, 159, 1945, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 5, 160, 1954, 8, 160, 10, 160, 12, 160, 1957, 9, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 5, 161, 1965, 8, 161, 10, 161, 12, 161, 1968, 9, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 4, 823, 1116, 1913, 1966, 0, 162, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 0, 213, 0, 215, 0, 217, 106, 219, 0, 221, 0, 223, 107, 225, 108, 227, 109, 229, 110, 231, 111, 233, 112, 235, 113, 237, 114, 239, 115, 241, 116, 243, 117, 245, 118, 247, 119, 249, 120, 251, 121, 253, 122, 255, 123, 257, 124, 259, 125, 261, 126, 263, 127, 265, 128, 267, 129, 269, 130, 271, 131, 273, 132, 275, 133, 277, 134, 279, 135, 281, 136, 283, 137, 285, 138, 287, 139, 289, 140, 291, 0, 293, 0, 295, 0, 297, 141, 299, 142, 301, 143, 303, 144, 305, 0, 307, 0, 309, 145, 311, 146, 313, 147, 315, 148, 317, 149, 319, 150, 321, 151, 323, 152, 325, 153, 3, 0, 1, 2, 21, 4, 0, 83, 83, 85, 85, 115, 115, 117, 117, 10, 0, 66, 68, 73, 73, 76, 76, 83, 83, 87, 87, 98, 100, 105, 105, 108, 108, 115, 115, 119, 119, 4, 0, 76, 76, 85, 85, 108, 108, 117, 117, 2, 0, 66, 66, 98, 98, 1, 0, 48, 49, 1, 0, 48, 57, 3, 0, 48, 57, 65, 70, 97, 102, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 1, 0, 34, 34, 1, 0, 122, 122, 3, 0, 97, 97, 112, 112, 115, 115, 3, 0, 97, 97, 109, 109, 115, 117, 7, 0, 34, 34, 39, 39, 48, 57, 92, 92, 102, 102, 110, 110, 114, 114, 2, 0, 48, 57, 97, 102, 1, 0, 39, 39, 4, 0, 9, 10, 13, 13, 32, 32, 160, 160, 2, 0, 10, 10, 13, 13, 5, 0, 34, 34, 39, 39, 102, 102, 110, 110, 114, 114, 2, 0, 43, 43, 45, 45, 5, 0, 45, 57, 65, 90, 92, 92, 95, 95, 97, 122, 2235, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 1, 233, 1, 0, 0, 0, 1, 235, 1, 0, 0, 0, 1, 237, 1, 0, 0, 0, 1, 239, 1, 0, 0, 0, 1, 241, 1, 0, 0, 0, 1, 243, 1, 0, 0, 0, 1, 245, 1, 0, 0, 0, 1, 247, 1, 0, 0, 0, 1, 249, 1, 0, 0, 0, 1, 251, 1, 0, 0, 0, 1, 253, 1, 0, 0, 0, 1, 255, 1, 0, 0, 0, 1, 257, 1, 0, 0, 0, 1, 259, 1, 0, 0, 0, 1, 261, 1, 0, 0, 0, 1, 263, 1, 0, 0, 0, 1, 265, 1, 0, 0, 0, 1, 267, 1, 0, 0, 0, 1, 269, 1, 0, 0, 0, 1, 271, 1, 0, 0, 0, 1, 273, 1, 0, 0, 0, 1, 275, 1, 0, 0, 0, 1, 277, 1, 0, 0, 0, 1, 279, 1, 0, 0, 0, 1, 281, 1, 0, 0, 0, 1, 283, 1, 0, 0, 0, 1, 285, 1, 0, 0, 0, 1, 287, 1, 0, 0, 0, 1, 289, 1, 0, 0, 0, 1, 297, 1, 0, 0, 0, 1, 299, 1, 0, 0, 0, 1, 301, 1, 0, 0, 0, 1, 303, 1, 0, 0, 0, 1, 309, 1, 0, 0, 0, 1, 311, 1, 0, 0, 0, 1, 313, 1, 0, 0, 0, 1, 315, 1, 0, 0, 0, 2, 317, 1, 0, 0, 0, 2, 319, 1, 0, 0, 0, 2, 321, 1, 0, 0, 0, 2, 323, 1, 0, 0, 0, 2, 325, 1, 0, 0, 0, 3, 327, 1, 0, 0, 0, 5, 330, 1, 0, 0, 0, 7, 332, 1, 0, 0, 0, 9, 334, 1, 0, 0, 0, 11, 336, 1, 0, 0, 0, 13, 338, 1, 0, 0, 0, 15, 340, 1, 0, 0, 0, 17, 342, 1, 0, 0, 0, 19, 344, 1, 0, 0, 0, 21, 346, 1, 0, 0, 0, 23, 349, 1, 0, 0, 0, 25, 353, 1, 0, 0, 0, 27, 355, 1, 0, 0, 0, 29, 357, 1, 0, 0, 0, 31, 360, 1, 0, 0, 0, 33, 362, 1, 0, 0, 0, 35, 364, 1, 0, 0, 0, 37, 366, 1, 0, 0, 0, 39, 368, 1, 0, 0, 0, 41, 370, 1, 0, 0, 0, 43, 373, 1, 0, 0, 0, 45, 376, 1, 0, 0, 0, 47, 378, 1, 0, 0, 0, 49, 380, 1, 0, 0, 0, 51, 382, 1, 0, 0, 0, 53, 384, 1, 0, 0, 0, 55, 387, 1, 0, 0, 0, 57, 390, 1, 0, 0, 0, 59, 393, 1, 0, 0, 0, 61, 396, 1, 0, 0, 0, 63, 398, 1, 0, 0, 0, 65, 401, 1, 0, 0, 0, 67, 404, 1, 0, 0, 0, 69, 406, 1, 0, 0, 0, 71, 409, 1, 0, 0, 0, 73, 412, 1, 0, 0, 0, 75, 436, 1, 0, 0, 0, 77, 438, 1, 0, 0, 0, 79, 446, 1, 0, 0, 0, 81, 452, 1, 0, 0, 0, 83, 459, 1, 0, 0, 0, 85, 468, 1, 0, 0, 0, 87, 476, 1, 0, 0, 0, 89, 483, 1, 0, 0, 0, 91, 492, 1, 0, 0, 0, 93, 499, 1, 0, 0, 0, 95, 511, 1, 0, 0, 0, 97, 520, 1, 0, 0, 0, 99, 533, 1, 0, 0, 0, 101, 543, 1, 0, 0, 0, 103, 548, 1, 0, 0, 0, 105, 554, 1, 0, 0, 0, 107, 560, 1, 0, 0, 0, 109, 566, 1, 0, 0, 0, 111, 571, 1, 0, 0, 0, 113, 627, 1, 0, 0, 0, 115, 629, 1, 0, 0, 0, 117, 632, 1, 0, 0, 0, 119, 637, 1, 0, 0, 0, 121, 643, 1, 0, 0, 0, 123, 646, 1, 0, 0, 0, 125, 650, 1, 0, 0, 0, 127, 657, 1, 0, 0, 0, 129, 664, 1, 0, 0, 0, 131, 670, 1, 0, 0, 0, 133, 679, 1, 0, 0, 0, 135, 684, 1, 0, 0, 0, 137, 690, 1, 0, 0, 0, 139, 698, 1, 0, 0, 0, 141, 703, 1, 0, 0, 0, 143, 710, 1, 0, 0, 0, 145, 716, 1, 0, 0, 0, 147, 721, 1, 0, 0, 0, 149, 728, 1, 0, 0, 0, 151, 735, 1, 0, 0, 0, 153, 743, 1, 0, 0, 0, 155, 751, 1, 0, 0, 0, 157, 804, 1, 0, 0, 0, 159, 815, 1, 0, 0, 0, 161, 817, 1, 0, 0, 0, 163, 829, 1, 0, 0, 0, 165, 839, 1, 0, 0, 0, 167, 850, 1, 0, 0, 0, 169, 858, 1, 0, 0, 0, 171, 871, 1, 0, 0, 0, 173, 873, 1, 0, 0, 0, 175, 880, 1, 0, 0, 0, 177, 887, 1, 0, 0, 0, 179, 895, 1, 0, 0, 0, 181, 899, 1, 0, 0, 0, 183, 905, 1, 0, 0, 0, 185, 911, 1, 0, 0, 0, 187, 918, 1, 0, 0, 0, 189, 925, 1, 0, 0, 0, 191, 928, 1, 0, 0, 0, 193, 933, 1, 0, 0, 0, 195, 938, 1, 0, 0, 0, 197, 945, 1, 0, 0, 0, 199, 962, 1, 0, 0, 0, 201, 976, 1, 0, 0, 0, 203, 993, 1, 0, 0, 0, 205, 1013, 1, 0, 0, 0, 207, 1016, 1, 0, 0, 0, 209, 1025, 1, 0, 0, 0, 211, 1032, 1, 0, 0, 0, 213, 1034, 1, 0, 0, 0, 215, 1036, 1, 0, 0, 0, 217, 1038, 1, 0, 0, 0, 219, 1047, 1, 0, 0, 0, 221, 1049, 1, 0, 0, 0, 223, 1051, 1, 0, 0, 0, 225, 1073, 1, 0, 0, 0, 227, 1093, 1, 0, 0, 0, 229, 1099, 1, 0, 0, 0, 231, 1110, 1, 0, 0, 0, 233, 1124, 1, 0, 0, 0, 235, 1737, 1, 0, 0, 0, 237, 1739, 1, 0, 0, 0, 239, 1741, 1, 0, 0, 0, 241, 1743, 1, 0, 0, 0, 243, 1745, 1, 0, 0, 0, 245, 1747, 1, 0, 0, 0, 247, 1749, 1, 0, 0, 0, 249, 1751, 1, 0, 0, 0, 251, 1753, 1, 0, 0, 0, 253, 1755, 1, 0, 0, 0, 255, 1758, 1, 0, 0, 0, 257, 1761, 1, 0, 0, 0, 259, 1763, 1, 0, 0, 0, 261, 1765, 1, 0, 0, 0, 263, 1767, 1, 0, 0, 0, 265, 1769, 1, 0, 0, 0, 267, 1771, 1, 0, 0, 0, 269, 1773, 1, 0, 0, 0, 271, 1776, 1, 0, 0, 0, 273, 1781, 1, 0, 0, 0, 275, 1786, 1, 0, 0, 0, 277, 1788, 1, 0, 0, 0, 279, 1804, 1, 0, 0, 0, 281, 1813, 1, 0, 0, 0, 283, 1829, 1, 0, 0, 0, 285, 1831, 1, 0, 0, 0, 287, 1838, 1, 0, 0, 0, 289, 1842, 1, 0, 0, 0, 291, 1848, 1, 0, 0, 0, 293, 1850, 1, 0, 0, 0, 295, 1852, 1, 0, 0, 0, 297, 1854, 1, 0, 0, 0, 299, 1862, 1, 0, 0, 0, 301, 1868, 1, 0, 0, 0, 303, 1875, 1, 0, 0, 0, 305, 1882, 1, 0, 0, 0, 307, 1884, 1, 0, 0, 0, 309, 1886, 1, 0, 0, 0, 311, 1890, 1, 0, 0, 0, 313, 1896, 1, 0, 0, 0, 315, 1907, 1, 0, 0, 0, 317, 1921, 1, 0, 0, 0, 319, 1930, 1, 0, 0, 0, 321, 1943, 1, 0, 0, 0, 323, 1949, 1, 0, 0, 0, 325, 1960, 1, 0, 0, 0, 327, 328, 5, 123, 0, 0, 328, 329, 6, 0, 0, 0, 329, 4, 1, 0, 0, 0, 330, 331, 5, 125, 0, 0, 331, 6, 1, 0, 0, 0, 332, 333, 5, 91, 0, 0, 333, 8, 1, 0, 0, 0, 334, 335, 5, 93, 0, 0, 335, 10, 1, 0, 0, 0, 336, 337, 5, 40, 0, 0, 337, 12, 1, 0, 0, 0, 338, 339, 5, 41, 0, 0, 339, 14, 1, 0, 0, 0, 340, 341, 5, 59, 0, 0, 341, 16, 1, 0, 0, 0, 342, 343, 5, 58, 0, 0, 343, 18, 1, 0, 0, 0, 344, 345, 5, 44, 0, 0, 345, 20, 1, 0, 0, 0, 346, 347, 5, 46, 0, 0, 347, 348, 5, 46, 0, 0, 348, 22, 1, 0, 0, 0, 349, 350, 5, 46, 0, 0, 350, 351, 5, 46, 0, 0, 351, 352, 5, 46, 0, 0, 352, 24, 1, 0, 0, 0, 353, 354, 5, 63, 0, 0, 354, 26, 1, 0, 0, 0, 355, 356, 5, 46, 0, 0, 356, 28, 1, 0, 0, 0, 357, 358, 5, 45, 0, 0, 358, 359, 5, 62, 0, 0, 359, 30, 1, 0, 0, 0, 360, 361, 5, 43, 0, 0, 361, 32, 1, 0, 0, 0, 362, 363, 5, 45, 0, 0, 363, 34, 1, 0, 0, 0, 364, 365, 5, 42, 0, 0, 365, 36, 1, 0, 0, 0, 366, 367, 5, 47, 0, 0, 367, 38, 1, 0, 0, 0, 368, 369, 5, 37, 0, 0, 369, 40, 1, 0, 0, 0, 370, 371, 5, 43, 0, 0, 371, 372, 5, 43, 0, 0, 372, 42, 1, 0, 0, 0, 373, 374, 5, 45, 0, 0, 374, 375, 5, 45, 0, 0, 375, 44, 1, 0, 0, 0, 376, 377, 5, 38, 0, 0, 377, 46, 1, 0, 0, 0, 378, 379, 5, 126, 0, 0, 379, 48, 1, 0, 0, 0, 380, 381, 5, 94, 0, 0, 381, 50, 1, 0, 0, 0, 382, 383, 5, 124, 0, 0, 383, 52, 1, 0, 0, 0, 384, 385, 5, 60, 0, 0, 385, 386, 5, 60, 0, 0, 386, 54, 1, 0, 0, 0, 387, 388, 5, 62, 0, 0, 388, 389, 5, 62, 0, 0, 389, 56, 1, 0, 0, 0, 390, 391, 5, 61, 0, 0, 391, 392, 5, 61, 0, 0, 392, 58, 1, 0, 0, 0, 393, 394, 5, 33, 0, 0, 394, 395, 5, 61, 0, 0, 395, 60, 1, 0, 0, 0, 396, 397, 5, 60, 0, 0, 397, 62, 1, 0, 0, 0, 398, 399, 5, 60, 0, 0, 399, 400, 5, 61, 0, 0, 400, 64, 1, 0, 0, 0, 401, 402, 5, 62, 0, 0, 402, 403, 5, 61, 0, 0, 403, 66, 1, 0, 0, 0, 404, 405, 5, 62, 0, 0, 405, 68, 1, 0, 0, 0, 406, 407, 5, 38, 0, 0, 407, 408, 5, 38, 0, 0, 408, 70, 1, 0, 0, 0, 409, 410, 5, 124, 0, 0, 410, 411, 5, 124, 0, 0, 411, 72, 1, 0, 0, 0, 412, 413, 5, 61, 0, 0, 413, 74, 1, 0, 0, 0, 414, 415, 5, 43, 0, 0, 415, 437, 5, 61, 0, 0, 416, 417, 5, 45, 0, 0, 417, 437, 5, 61, 0, 0, 418, 419, 5, 42, 0, 0, 419, 437, 5, 61, 0, 0, 420, 421, 5, 47, 0, 0, 421, 437, 5, 61, 0, 0, 422, 423, 5, 37, 0, 0, 423, 437, 5, 61, 0, 0, 424, 425, 5, 60, 0, 0, 425, 426, 5, 60, 0, 0, 426, 437, 5, 61, 0, 0, 427, 428, 5, 62, 0, 0, 428, 429, 5, 62, 0, 0, 429, 437, 5, 61, 0, 0, 430, 431, 5, 38, 0, 0, 431, 437, 5, 61, 0, 0, 432, 433, 5, 124, 0, 0, 433, 437, 5, 61, 0, 0, 434, 435, 5, 94, 0, 0, 435, 437, 5, 61, 0, 0, 436, 414, 1, 0, 0, 0, 436, 416, 1, 0, 0, 0, 436, 418, 1, 0, 0, 0, 436, 420, 1, 0, 0, 0, 436, 422, 1, 0, 0, 0, 436, 424, 1, 0, 0, 0, 436, 427, 1, 0, 0, 0, 436, 430, 1, 0, 0, 0, 436, 432, 1, 0, 0, 0, 436, 434, 1, 0, 0, 0, 437, 76, 1, 0, 0, 0, 438, 439, 5, 116, 0, 0, 439, 440, 5, 121, 0, 0, 440, 441, 5, 112, 0, 0, 441, 442, 5, 101, 0, 0, 442, 443, 5, 100, 0, 0, 443, 444, 5, 101, 0, 0, 444, 445, 5, 102, 0, 0, 445, 78, 1, 0, 0, 0, 446, 447, 5, 99, 0, 0, 447, 448, 5, 111, 0, 0, 448, 449, 5, 110, 0, 0, 449, 450, 5, 115, 0, 0, 450, 451, 5, 116, 0, 0, 451, 80, 1, 0, 0, 0, 452, 453, 5, 101, 0, 0, 453, 454, 5, 120, 0, 0, 454, 455, 5, 116, 0, 0, 455, 456, 5, 101, 0, 0, 456, 457, 5, 114, 0, 0, 457, 458, 5, 110, 0, 0, 458, 82, 1, 0, 0, 0, 459, 460, 5, 95, 0, 0, 460, 461, 5, 95, 0, 0, 461, 462, 5, 101, 0, 0, 462, 463, 5, 120, 0, 0, 463, 464, 5, 112, 0, 0, 464, 465, 5, 111, 0, 0, 465, 466, 5, 114, 0, 0, 466, 467, 5, 116, 0, 0, 467, 84, 1, 0, 0, 0, 468, 469, 5, 95, 0, 0, 469, 470, 5, 95, 0, 0, 470, 471, 5, 97, 0, 0, 471, 472, 5, 108, 0, 0, 472, 473, 5, 105, 0, 0, 473, 474, 5, 103, 0, 0, 474, 475, 5, 110, 0, 0, 475, 86, 1, 0, 0, 0, 476, 477, 5, 105, 0, 0, 477, 478, 5, 110, 0, 0, 478, 479, 5, 108, 0, 0, 479, 480, 5, 105, 0, 0, 480, 481, 5, 110, 0, 0, 481, 482, 5, 101, 0, 0, 482, 88, 1, 0, 0, 0, 483, 484, 5, 118, 0, 0, 484, 485, 5, 111, 0, 0, 485, 486, 5, 108, 0, 0, 486, 487, 5, 97, 0, 0, 487, 488, 5, 116, 0, 0, 488, 489, 5, 105, 0, 0, 489, 490, 5, 108, 0, 0, 490, 491, 5, 101, 0, 0, 491, 90, 1, 0, 0, 0, 492, 493, 5, 115, 0, 0, 493, 494, 5, 116, 0, 0, 494, 495, 5, 97, 0, 0, 495, 496, 5, 116, 0, 0, 496, 497, 5, 105, 0, 0, 497, 498, 5, 99, 0, 0, 498, 92, 1, 0, 0, 0, 499, 500, 5, 95, 0, 0, 500, 501, 5, 95, 0, 0, 501, 502, 5, 105, 0, 0, 502, 503, 5, 110, 0, 0, 503, 504, 5, 116, 0, 0, 504, 505, 5, 101, 0, 0, 505, 506, 5, 114, 0, 0, 506, 507, 5, 114, 0, 0, 507, 508, 5, 117, 0, 0, 508, 509, 5, 112, 0, 0, 509, 510, 5, 116, 0, 0, 510, 94, 1, 0, 0, 0, 511, 512, 5, 114, 0, 0, 512, 513, 5, 101, 0, 0, 513, 514, 5, 103, 0, 0, 514, 515, 5, 105, 0, 0, 515, 516, 5, 115, 0, 0, 516, 517, 5, 116, 0, 0, 517, 518, 5, 101, 0, 0, 518, 519, 5, 114, 0, 0, 519, 96, 1, 0, 0, 0, 520, 521, 5, 95, 0, 0, 521, 522, 5, 95, 0, 0, 522, 523, 5, 122, 0, 0, 523, 524, 5, 112, 0, 0, 524, 525, 5, 95, 0, 0, 525, 526, 5, 114, 0, 0, 526, 527, 5, 101, 0, 0, 527, 528, 5, 115, 0, 0, 528, 529, 5, 101, 0, 0, 529, 530, 5, 114, 0, 0, 530, 531, 5, 118, 0, 0, 531, 532, 5, 101, 0, 0, 532, 98, 1, 0, 0, 0, 533, 534, 5, 95, 0, 0, 534, 535, 5, 95, 0, 0, 535, 536, 5, 97, 0, 0, 536, 537, 5, 100, 0, 0, 537, 538, 5, 100, 0, 0, 538, 539, 5, 114, 0, 0, 539, 540, 5, 101, 0, 0, 540, 541, 5, 115, 0, 0, 541, 542, 5, 115, 0, 0, 542, 100, 1, 0, 0, 0, 543, 544, 5, 95, 0, 0, 544, 545, 5, 95, 0, 0, 545, 546, 5, 122, 0, 0, 546, 547, 5, 112, 0, 0, 547, 102, 1, 0, 0, 0, 548, 549, 5, 95, 0, 0, 549, 550, 5, 95, 0, 0, 550, 551, 5, 109, 0, 0, 551, 552, 5, 101, 0, 0, 552, 553, 5, 109, 0, 0, 553, 104, 1, 0, 0, 0, 554, 555, 5, 95, 0, 0, 555, 556, 5, 95, 0, 0, 556, 557, 5, 102, 0, 0, 557, 558, 5, 97, 0, 0, 558, 559, 5, 114, 0, 0, 559, 106, 1, 0, 0, 0, 560, 561, 5, 95, 0, 0, 561, 562, 5, 95, 0, 0, 562, 563, 5, 115, 0, 0, 563, 564, 5, 115, 0, 0, 564, 565, 5, 97, 0, 0, 565, 108, 1, 0, 0, 0, 566, 567, 5, 95, 0, 0, 567, 568, 5, 95, 0, 0, 568, 569, 5, 109, 0, 0, 569, 570, 5, 97, 0, 0, 570, 110, 1, 0, 0, 0, 571, 572, 5, 95, 0, 0, 572, 573, 5, 95, 0, 0, 573, 574, 5, 105, 0, 0, 574, 575, 5, 110, 0, 0, 575, 576, 5, 116, 0, 0, 576, 577, 5, 114, 0, 0, 577, 578, 5, 105, 0, 0, 578, 579, 5, 110, 0, 0, 579, 580, 5, 115, 0, 0, 580, 581, 5, 105, 0, 0, 581, 582, 5, 99, 0, 0, 582, 112, 1, 0, 0, 0, 583, 584, 5, 95, 0, 0, 584, 585, 5, 95, 0, 0, 585, 586, 5, 115, 0, 0, 586, 587, 5, 116, 0, 0, 587, 588, 5, 97, 0, 0, 588, 589, 5, 99, 0, 0, 589, 590, 5, 107, 0, 0, 590, 591, 5, 99, 0, 0, 591, 592, 5, 97, 0, 0, 592, 593, 5, 108, 0, 0, 593, 628, 5, 108, 0, 0, 594, 595, 5, 95, 0, 0, 595, 596, 5, 95, 0, 0, 596, 597, 5, 112, 0, 0, 597, 598, 5, 104, 0, 0, 598, 599, 5, 105, 0, 0, 599, 600, 5, 99, 0, 0, 600, 601, 5, 97, 0, 0, 601, 602, 5, 108, 0, 0, 602, 628, 5, 108, 0, 0, 603, 604, 5, 95, 0, 0, 604, 605, 5, 95, 0, 0, 605, 606, 5, 118, 0, 0, 606, 607, 5, 97, 0, 0, 607, 608, 5, 114, 0, 0, 608, 609, 5, 99, 0, 0, 609, 610, 5, 97, 0, 0, 610, 611, 5, 108, 0, 0, 611, 628, 5, 108, 0, 0, 612, 613, 5, 95, 0, 0, 613, 614, 5, 95, 0, 0, 614, 615, 5, 105, 0, 0, 615, 616, 5, 110, 0, 0, 616, 617, 5, 116, 0, 0, 617, 618, 5, 114, 0, 0, 618, 619, 5, 105, 0, 0, 619, 620, 5, 110, 0, 0, 620, 621, 5, 115, 0, 0, 621, 622, 5, 105, 0, 0, 622, 623, 5, 99, 0, 0, 623, 624, 5, 99, 0, 0, 624, 625, 5, 97, 0, 0, 625, 626, 5, 108, 0, 0, 626, 628, 5, 108, 0, 0, 627, 583, 1, 0, 0, 0, 627, 594, 1, 0, 0, 0, 627, 603, 1, 0, 0, 0, 627, 612, 1, 0, 0, 0, 628, 114, 1, 0, 0, 0, 629, 630, 5, 105, 0, 0, 630, 631, 5, 102, 0, 0, 631, 116, 1, 0, 0, 0, 632, 633, 5, 101, 0, 0, 633, 634, 5, 108, 0, 0, 634, 635, 5, 115, 0, 0, 635, 636, 5, 101, 0, 0, 636, 118, 1, 0, 0, 0, 637, 638, 5, 119, 0, 0, 638, 639, 5, 104, 0, 0, 639, 640, 5, 105, 0, 0, 640, 641, 5, 108, 0, 0, 641, 642, 5, 101, 0, 0, 642, 120, 1, 0, 0, 0, 643, 644, 5, 100, 0, 0, 644, 645, 5, 111, 0, 0, 645, 122, 1, 0, 0, 0, 646, 647, 5, 102, 0, 0, 647, 648, 5, 111, 0, 0, 648, 649, 5, 114, 0, 0, 649, 124, 1, 0, 0, 0, 650, 651, 5, 115, 0, 0, 651, 652, 5, 119, 0, 0, 652, 653, 5, 105, 0, 0, 653, 654, 5, 116, 0, 0, 654, 655, 5, 99, 0, 0, 655, 656, 5, 104, 0, 0, 656, 126, 1, 0, 0, 0, 657, 658, 5, 114, 0, 0, 658, 659, 5, 101, 0, 0, 659, 660, 5, 116, 0, 0, 660, 661, 5, 117, 0, 0, 661, 662, 5, 114, 0, 0, 662, 663, 5, 110, 0, 0, 663, 128, 1, 0, 0, 0, 664, 665, 5, 98, 0, 0, 665, 666, 5, 114, 0, 0, 666, 667, 5, 101, 0, 0, 667, 668, 5, 97, 0, 0, 668, 669, 5, 107, 0, 0, 669, 130, 1, 0, 0, 0, 670, 671, 5, 99, 0, 0, 671, 672, 5, 111, 0, 0, 672, 673, 5, 110, 0, 0, 673, 674, 5, 116, 0, 0, 674, 675, 5, 105, 0, 0, 675, 676, 5, 110, 0, 0, 676, 677, 5, 117, 0, 0, 677, 678, 5, 101, 0, 0, 678, 132, 1, 0, 0, 0, 679, 680, 5, 103, 0, 0, 680, 681, 5, 111, 0, 0, 681, 682, 5, 116, 0, 0, 682, 683, 5, 111, 0, 0, 683, 134, 1, 0, 0, 0, 684, 685, 5, 97, 0, 0, 685, 686, 5, 115, 0, 0, 686, 687, 5, 109, 0, 0, 687, 688, 1, 0, 0, 0, 688, 689, 6, 66, 1, 0, 689, 136, 1, 0, 0, 0, 690, 691, 5, 100, 0, 0, 691, 692, 5, 101, 0, 0, 692, 693, 5, 102, 0, 0, 693, 694, 5, 97, 0, 0, 694, 695, 5, 117, 0, 0, 695, 696, 5, 108, 0, 0, 696, 697, 5, 116, 0, 0, 697, 138, 1, 0, 0, 0, 698, 699, 5, 99, 0, 0, 699, 700, 5, 97, 0, 0, 700, 701, 5, 115, 0, 0, 701, 702, 5, 101, 0, 0, 702, 140, 1, 0, 0, 0, 703, 704, 5, 115, 0, 0, 704, 705, 5, 116, 0, 0, 705, 706, 5, 114, 0, 0, 706, 707, 5, 117, 0, 0, 707, 708, 5, 99, 0, 0, 708, 709, 5, 116, 0, 0, 709, 142, 1, 0, 0, 0, 710, 711, 5, 117, 0, 0, 711, 712, 5, 110, 0, 0, 712, 713, 5, 105, 0, 0, 713, 714, 5, 111, 0, 0, 714, 715, 5, 110, 0, 0, 715, 144, 1, 0, 0, 0, 716, 717, 5, 101, 0, 0, 717, 718, 5, 110, 0, 0, 718, 719, 5, 117, 0, 0, 719, 720, 5, 109, 0, 0, 720, 146, 1, 0, 0, 0, 721, 722, 5, 115, 0, 0, 722, 723, 5, 105, 0, 0, 723, 724, 5, 122, 0, 0, 724, 725, 5, 101, 0, 0, 725, 726, 5, 111, 0, 0, 726, 727, 5, 102, 0, 0, 727, 148, 1, 0, 0, 0, 728, 729, 5, 116, 0, 0, 729, 730, 5, 121, 0, 0, 730, 731, 5, 112, 0, 0, 731, 732, 5, 101, 0, 0, 732, 733, 5, 105, 0, 0, 733, 734, 5, 100, 0, 0, 734, 150, 1, 0, 0, 0, 735, 736, 5, 100, 0, 0, 736, 737, 5, 101, 0, 0, 737, 738, 5, 102, 0, 0, 738, 739, 5, 105, 0, 0, 739, 740, 5, 110, 0, 0, 740, 741, 5, 101, 0, 0, 741, 742, 5, 100, 0, 0, 742, 152, 1, 0, 0, 0, 743, 744, 5, 107, 0, 0, 744, 745, 5, 105, 0, 0, 745, 746, 5, 99, 0, 0, 746, 747, 5, 107, 0, 0, 747, 748, 5, 97, 0, 0, 748, 749, 5, 115, 0, 0, 749, 750, 5, 109, 0, 0, 750, 154, 1, 0, 0, 0, 751, 752, 5, 33, 0, 0, 752, 156, 1, 0, 0, 0, 753, 754, 5, 115, 0, 0, 754, 755, 5, 105, 0, 0, 755, 756, 5, 103, 0, 0, 756, 757, 5, 110, 0, 0, 757, 758, 5, 101, 0, 0, 758, 805, 5, 100, 0, 0, 759, 760, 5, 117, 0, 0, 760, 761, 5, 110, 0, 0, 761, 762, 5, 115, 0, 0, 762, 763, 5, 105, 0, 0, 763, 764, 5, 103, 0, 0, 764, 765, 5, 110, 0, 0, 765, 766, 5, 101, 0, 0, 766, 805, 5, 100, 0, 0, 767, 768, 5, 98, 0, 0, 768, 769, 5, 121, 0, 0, 769, 770, 5, 116, 0, 0, 770, 805, 5, 101, 0, 0, 771, 772, 5, 119, 0, 0, 772, 773, 5, 111, 0, 0, 773, 774, 5, 114, 0, 0, 774, 805, 5, 100, 0, 0, 775, 776, 5, 100, 0, 0, 776, 777, 5, 119, 0, 0, 777, 778, 5, 111, 0, 0, 778, 779, 5, 114, 0, 0, 779, 805, 5, 100, 0, 0, 780, 781, 5, 98, 0, 0, 781, 782, 5, 111, 0, 0, 782, 783, 5, 111, 0, 0, 783, 805, 5, 108, 0, 0, 784, 785, 5, 99, 0, 0, 785, 786, 5, 104, 0, 0, 786, 787, 5, 97, 0, 0, 787, 805, 5, 114, 0, 0, 788, 789, 5, 115, 0, 0, 789, 790, 5, 104, 0, 0, 790, 791, 5, 111, 0, 0, 791, 792, 5, 114, 0, 0, 792, 805, 5, 116, 0, 0, 793, 794, 5, 105, 0, 0, 794, 795, 5, 110, 0, 0, 795, 805, 5, 116, 0, 0, 796, 797, 5, 108, 0, 0, 797, 798, 5, 111, 0, 0, 798, 799, 5, 110, 0, 0, 799, 805, 5, 103, 0, 0, 800, 801, 5, 118, 0, 0, 801, 802, 5, 111, 0, 0, 802, 803, 5, 105, 0, 0, 803, 805, 5, 100, 0, 0, 804, 753, 1, 0, 0, 0, 804, 759, 1, 0, 0, 0, 804, 767, 1, 0, 0, 0, 804, 771, 1, 0, 0, 0, 804, 775, 1, 0, 0, 0, 804, 780, 1, 0, 0, 0, 804, 784, 1, 0, 0, 0, 804, 788, 1, 0, 0, 0, 804, 793, 1, 0, 0, 0, 804, 796, 1, 0, 0, 0, 804, 800, 1, 0, 0, 0, 805, 158, 1, 0, 0, 0, 806, 807, 5, 116, 0, 0, 807, 808, 5, 114, 0, 0, 808, 809, 5, 117, 0, 0, 809, 816, 5, 101, 0, 0, 810, 811, 5, 102, 0, 0, 811, 812, 5, 97, 0, 0, 812, 813, 5, 108, 0, 0, 813, 814, 5, 115, 0, 0, 814, 816, 5, 101, 0, 0, 815, 806, 1, 0, 0, 0, 815, 810, 1, 0, 0, 0, 816, 160, 1, 0, 0, 0, 817, 818, 5, 123, 0, 0, 818, 819, 5, 123, 0, 0, 819, 823, 1, 0, 0, 0, 820, 822, 9, 0, 0, 0, 821, 820, 1, 0, 0, 0, 822, 825, 1, 0, 0, 0, 823, 824, 1, 0, 0, 0, 823, 821, 1, 0, 0, 0, 824, 826, 1, 0, 0, 0, 825, 823, 1, 0, 0, 0, 826, 827, 5, 125, 0, 0, 827, 828, 5, 125, 0, 0, 828, 162, 1, 0, 0, 0, 829, 830, 5, 35, 0, 0, 830, 831, 5, 105, 0, 0, 831, 832, 5, 109, 0, 0, 832, 833, 5, 112, 0, 0, 833, 834, 5, 111, 0, 0, 834, 835, 5, 114, 0, 0, 835, 836, 5, 116, 0, 0, 836, 837, 1, 0, 0, 0, 837, 838, 6, 80, 2, 0, 838, 164, 1, 0, 0, 0, 839, 840, 5, 35, 0, 0, 840, 841, 5, 105, 0, 0, 841, 842, 5, 110, 0, 0, 842, 843, 5, 99, 0, 0, 843, 844, 5, 108, 0, 0, 844, 845, 5, 117, 0, 0, 845, 846, 5, 100, 0, 0, 846, 847, 5, 101, 0, 0, 847, 848, 1, 0, 0, 0, 848, 849, 6, 81, 3, 0, 849, 166, 1, 0, 0, 0, 850, 851, 5, 35, 0, 0, 851, 852, 5, 112, 0, 0, 852, 853, 5, 114, 0, 0, 853, 854, 5, 97, 0, 0, 854, 855, 5, 103, 0, 0, 855, 856, 5, 109, 0, 0, 856, 857, 5, 97, 0, 0, 857, 168, 1, 0, 0, 0, 858, 859, 5, 35, 0, 0, 859, 860, 5, 100, 0, 0, 860, 861, 5, 101, 0, 0, 861, 862, 5, 102, 0, 0, 862, 863, 5, 105, 0, 0, 863, 864, 5, 110, 0, 0, 864, 865, 5, 101, 0, 0, 865, 170, 1, 0, 0, 0, 866, 867, 5, 92, 0, 0, 867, 872, 5, 10, 0, 0, 868, 869, 5, 92, 0, 0, 869, 870, 5, 13, 0, 0, 870, 872, 5, 10, 0, 0, 871, 866, 1, 0, 0, 0, 871, 868, 1, 0, 0, 0, 872, 172, 1, 0, 0, 0, 873, 874, 5, 35, 0, 0, 874, 875, 5, 117, 0, 0, 875, 876, 5, 110, 0, 0, 876, 877, 5, 100, 0, 0, 877, 878, 5, 101, 0, 0, 878, 879, 5, 102, 0, 0, 879, 174, 1, 0, 0, 0, 880, 881, 5, 35, 0, 0, 881, 882, 5, 105, 0, 0, 882, 883, 5, 102, 0, 0, 883, 884, 5, 100, 0, 0, 884, 885, 5, 101, 0, 0, 885, 886, 5, 102, 0, 0, 886, 176, 1, 0, 0, 0, 887, 888, 5, 35, 0, 0, 888, 889, 5, 105, 0, 0, 889, 890, 5, 102, 0, 0, 890, 891, 5, 110, 0, 0, 891, 892, 5, 100, 0, 0, 892, 893, 5, 101, 0, 0, 893, 894, 5, 102, 0, 0, 894, 178, 1, 0, 0, 0, 895, 896, 5, 35, 0, 0, 896, 897, 5, 105, 0, 0, 897, 898, 5, 102, 0, 0, 898, 180, 1, 0, 0, 0, 899, 900, 5, 35, 0, 0, 900, 901, 5, 101, 0, 0, 901, 902, 5, 108, 0, 0, 902, 903, 5, 105, 0, 0, 903, 904, 5, 102, 0, 0, 904, 182, 1, 0, 0, 0, 905, 906, 5, 35, 0, 0, 906, 907, 5, 101, 0, 0, 907, 908, 5, 108, 0, 0, 908, 909, 5, 115, 0, 0, 909, 910, 5, 101, 0, 0, 910, 184, 1, 0, 0, 0, 911, 912, 5, 35, 0, 0, 912, 913, 5, 101, 0, 0, 913, 914, 5, 110, 0, 0, 914, 915, 5, 100, 0, 0, 915, 916, 5, 105, 0, 0, 916, 917, 5, 102, 0, 0, 917, 186, 1, 0, 0, 0, 918, 919, 5, 35, 0, 0, 919, 920, 5, 101, 0, 0, 920, 921, 5, 114, 0, 0, 921, 922, 5, 114, 0, 0, 922, 923, 5, 111, 0, 0, 923, 924, 5, 114, 0, 0, 924, 188, 1, 0, 0, 0, 925, 926, 5, 35, 0, 0, 926, 927, 3, 217, 107, 0, 927, 190, 1, 0, 0, 0, 928, 929, 5, 35, 0, 0, 929, 930, 3, 217, 107, 0, 930, 192, 1, 0, 0, 0, 931, 934, 3, 195, 96, 0, 932, 934, 3, 203, 100, 0, 933, 931, 1, 0, 0, 0, 933, 932, 1, 0, 0, 0, 934, 194, 1, 0, 0, 0, 935, 939, 3, 197, 97, 0, 936, 939, 3, 199, 98, 0, 937, 939, 3, 201, 99, 0, 938, 935, 1, 0, 0, 0, 938, 936, 1, 0, 0, 0, 938, 937, 1, 0, 0, 0, 939, 196, 1, 0, 0, 0, 940, 946, 5, 37, 0, 0, 941, 942, 5, 48, 0, 0, 942, 946, 5, 98, 0, 0, 943, 944, 5, 48, 0, 0, 944, 946, 5, 66, 0, 0, 945, 940, 1, 0, 0, 0, 945, 941, 1, 0, 0, 0, 945, 943, 1, 0, 0, 0, 946, 950, 1, 0, 0, 0, 947, 949, 3, 211, 104, 0, 948, 947, 1, 0, 0, 0, 949, 952, 1, 0, 0, 0, 950, 948, 1, 0, 0, 0, 950, 951, 1, 0, 0, 0, 951, 953, 1, 0, 0, 0, 952, 950, 1, 0, 0, 0, 953, 955, 5, 46, 0, 0, 954, 956, 3, 211, 104, 0, 955, 954, 1, 0, 0, 0, 956, 957, 1, 0, 0, 0, 957, 955, 1, 0, 0, 0, 957, 958, 1, 0, 0, 0, 958, 198, 1, 0, 0, 0, 959, 961, 3, 213, 105, 0, 960, 959, 1, 0, 0, 0, 961, 964, 1, 0, 0, 0, 962, 960, 1, 0, 0, 0, 962, 963, 1, 0, 0, 0, 963, 965, 1, 0, 0, 0, 964, 962, 1, 0, 0, 0, 965, 967, 5, 46, 0, 0, 966, 968, 3, 213, 105, 0, 967, 966, 1, 0, 0, 0, 968, 969, 1, 0, 0, 0, 969, 967, 1, 0, 0, 0, 969, 970, 1, 0, 0, 0, 970, 200, 1, 0, 0, 0, 971, 977, 5, 36, 0, 0, 972, 973, 5, 48, 0, 0, 973, 977, 5, 120, 0, 0, 974, 975, 5, 48, 0, 0, 975, 977, 5, 88, 0, 0, 976, 971, 1, 0, 0, 0, 976, 972, 1, 0, 0, 0, 976, 974, 1, 0, 0, 0, 977, 981, 1, 0, 0, 0, 978, 980, 3, 215, 106, 0, 979, 978, 1, 0, 0, 0, 980, 983, 1, 0, 0, 0, 981, 979, 1, 0, 0, 0, 981, 982, 1, 0, 0, 0, 982, 984, 1, 0, 0, 0, 983, 981, 1, 0, 0, 0, 984, 986, 5, 46, 0, 0, 985, 987, 3, 215, 106, 0, 986, 985, 1, 0, 0, 0, 987, 988, 1, 0, 0, 0, 988, 986, 1, 0, 0, 0, 988, 989, 1, 0, 0, 0, 989, 202, 1, 0, 0, 0, 990, 994, 3, 207, 102, 0, 991, 994, 3, 209, 103, 0, 992, 994, 3, 205, 101, 0, 993, 990, 1, 0, 0, 0, 993, 991, 1, 0, 0, 0, 993, 992, 1, 0, 0, 0, 994, 998, 1, 0, 0, 0, 995, 996, 7, 0, 0, 0, 996, 999, 7, 1, 0, 0, 997, 999, 7, 2, 0, 0, 998, 995, 1, 0, 0, 0, 998, 997, 1, 0, 0, 0, 998, 999, 1, 0, 0, 0, 999, 204, 1, 0, 0, 0, 1000, 1001, 5, 48, 0, 0, 1001, 1003, 7, 3, 0, 0, 1002, 1004, 3, 211, 104, 0, 1003, 1002, 1, 0, 0, 0, 1004, 1005, 1, 0, 0, 0, 1005, 1003, 1, 0, 0, 0, 1005, 1006, 1, 0, 0, 0, 1006, 1014, 1, 0, 0, 0, 1007, 1009, 5, 37, 0, 0, 1008, 1010, 3, 211, 104, 0, 1009, 1008, 1, 0, 0, 0, 1010, 1011, 1, 0, 0, 0, 1011, 1009, 1, 0, 0, 0, 1011, 1012, 1, 0, 0, 0, 1012, 1014, 1, 0, 0, 0, 1013, 1000, 1, 0, 0, 0, 1013, 1007, 1, 0, 0, 0, 1014, 206, 1, 0, 0, 0, 1015, 1017, 3, 213, 105, 0, 1016, 1015, 1, 0, 0, 0, 1017, 1018, 1, 0, 0, 0, 1018, 1016, 1, 0, 0, 0, 1018, 1019, 1, 0, 0, 0, 1019, 208, 1, 0, 0, 0, 1020, 1026, 5, 36, 0, 0, 1021, 1022, 5, 48, 0, 0, 1022, 1026, 5, 120, 0, 0, 1023, 1024, 5, 48, 0, 0, 1024, 1026, 5, 88, 0, 0, 1025, 1020, 1, 0, 0, 0, 1025, 1021, 1, 0, 0, 0, 1025, 1023, 1, 0, 0, 0, 1026, 1028, 1, 0, 0, 0, 1027, 1029, 3, 215, 106, 0, 1028, 1027, 1, 0, 0, 0, 1029, 1030, 1, 0, 0, 0, 1030, 1028, 1, 0, 0, 0, 1030, 1031, 1, 0, 0, 0, 1031, 210, 1, 0, 0, 0, 1032, 1033, 7, 4, 0, 0, 1033, 212, 1, 0, 0, 0, 1034, 1035, 7, 5, 0, 0, 1035, 214, 1, 0, 0, 0, 1036, 1037, 7, 6, 0, 0, 1037, 216, 1, 0, 0, 0, 1038, 1042, 3, 219, 108, 0, 1039, 1041, 3, 221, 109, 0, 1040, 1039, 1, 0, 0, 0, 1041, 1044, 1, 0, 0, 0, 1042, 1040, 1, 0, 0, 0, 1042, 1043, 1, 0, 0, 0, 1043, 1045, 1, 0, 0, 0, 1044, 1042, 1, 0, 0, 0, 1045, 1046, 6, 107, 4, 0, 1046, 218, 1, 0, 0, 0, 1047, 1048, 7, 7, 0, 0, 1048, 220, 1, 0, 0, 0, 1049, 1050, 7, 8, 0, 0, 1050, 222, 1, 0, 0, 0, 1051, 1057, 5, 34, 0, 0, 1052, 1053, 5, 92, 0, 0, 1053, 1056, 5, 34, 0, 0, 1054, 1056, 8, 9, 0, 0, 1055, 1052, 1, 0, 0, 0, 1055, 1054, 1, 0, 0, 0, 1056, 1059, 1, 0, 0, 0, 1057, 1055, 1, 0, 0, 0, 1057, 1058, 1, 0, 0, 0, 1058, 1060, 1, 0, 0, 0, 1059, 1057, 1, 0, 0, 0, 1060, 1062, 5, 34, 0, 0, 1061, 1063, 7, 10, 0, 0, 1062, 1061, 1, 0, 0, 0, 1062, 1063, 1, 0, 0, 0, 1063, 1068, 1, 0, 0, 0, 1064, 1066, 7, 11, 0, 0, 1065, 1067, 7, 12, 0, 0, 1066, 1065, 1, 0, 0, 0, 1066, 1067, 1, 0, 0, 0, 1067, 1069, 1, 0, 0, 0, 1068, 1064, 1, 0, 0, 0, 1068, 1069, 1, 0, 0, 0, 1069, 1071, 1, 0, 0, 0, 1070, 1072, 7, 10, 0, 0, 1071, 1070, 1, 0, 0, 0, 1071, 1072, 1, 0, 0, 0, 1072, 224, 1, 0, 0, 0, 1073, 1088, 5, 39, 0, 0, 1074, 1085, 5, 92, 0, 0, 1075, 1077, 7, 13, 0, 0, 1076, 1078, 7, 5, 0, 0, 1077, 1076, 1, 0, 0, 0, 1077, 1078, 1, 0, 0, 0, 1078, 1080, 1, 0, 0, 0, 1079, 1081, 7, 5, 0, 0, 1080, 1079, 1, 0, 0, 0, 1080, 1081, 1, 0, 0, 0, 1081, 1086, 1, 0, 0, 0, 1082, 1083, 5, 120, 0, 0, 1083, 1084, 7, 14, 0, 0, 1084, 1086, 7, 14, 0, 0, 1085, 1075, 1, 0, 0, 0, 1085, 1082, 1, 0, 0, 0, 1086, 1089, 1, 0, 0, 0, 1087, 1089, 8, 15, 0, 0, 1088, 1074, 1, 0, 0, 0, 1088, 1087, 1, 0, 0, 0, 1089, 1090, 1, 0, 0, 0, 1090, 1091, 5, 39, 0, 0, 1091, 226, 1, 0, 0, 0, 1092, 1094, 7, 16, 0, 0, 1093, 1092, 1, 0, 0, 0, 1094, 1095, 1, 0, 0, 0, 1095, 1093, 1, 0, 0, 0, 1095, 1096, 1, 0, 0, 0, 1096, 1097, 1, 0, 0, 0, 1097, 1098, 6, 112, 5, 0, 1098, 228, 1, 0, 0, 0, 1099, 1100, 5, 47, 0, 0, 1100, 1101, 5, 47, 0, 0, 1101, 1105, 1, 0, 0, 0, 1102, 1104, 8, 17, 0, 0, 1103, 1102, 1, 0, 0, 0, 1104, 1107, 1, 0, 0, 0, 1105, 1103, 1, 0, 0, 0, 1105, 1106, 1, 0, 0, 0, 1106, 1108, 1, 0, 0, 0, 1107, 1105, 1, 0, 0, 0, 1108, 1109, 6, 113, 6, 0, 1109, 230, 1, 0, 0, 0, 1110, 1111, 5, 47, 0, 0, 1111, 1112, 5, 42, 0, 0, 1112, 1116, 1, 0, 0, 0, 1113, 1115, 9, 0, 0, 0, 1114, 1113, 1, 0, 0, 0, 1115, 1118, 1, 0, 0, 0, 1116, 1117, 1, 0, 0, 0, 1116, 1114, 1, 0, 0, 0, 1117, 1119, 1, 0, 0, 0, 1118, 1116, 1, 0, 0, 0, 1119, 1120, 5, 42, 0, 0, 1120, 1121, 5, 47, 0, 0, 1121, 1122, 1, 0, 0, 0, 1122, 1123, 6, 114, 6, 0, 1123, 232, 1, 0, 0, 0, 1124, 1125, 5, 46, 0, 0, 1125, 1126, 5, 98, 0, 0, 1126, 1127, 5, 121, 0, 0, 1127, 1128, 5, 116, 0, 0, 1128, 1129, 5, 101, 0, 0, 1129, 234, 1, 0, 0, 0, 1130, 1131, 5, 98, 0, 0, 1131, 1132, 5, 114, 0, 0, 1132, 1738, 5, 107, 0, 0, 1133, 1134, 5, 111, 0, 0, 1134, 1135, 5, 114, 0, 0, 1135, 1738, 5, 97, 0, 0, 1136, 1137, 5, 107, 0, 0, 1137, 1138, 5, 105, 0, 0, 1138, 1738, 5, 108, 0, 0, 1139, 1140, 5, 115, 0, 0, 1140, 1141, 5, 108, 0, 0, 1141, 1738, 5, 111, 0, 0, 1142, 1143, 5, 110, 0, 0, 1143, 1144, 5, 111, 0, 0, 1144, 1738, 5, 112, 0, 0, 1145, 1146, 5, 97, 0, 0, 1146, 1147, 5, 115, 0, 0, 1147, 1738, 5, 108, 0, 0, 1148, 1149, 5, 112, 0, 0, 1149, 1150, 5, 104, 0, 0, 1150, 1738, 5, 112, 0, 0, 1151, 1152, 5, 97, 0, 0, 1152, 1153, 5, 110, 0, 0, 1153, 1738, 5, 99, 0, 0, 1154, 1155, 5, 98, 0, 0, 1155, 1156, 5, 112, 0, 0, 1156, 1738, 5, 108, 0, 0, 1157, 1158, 5, 99, 0, 0, 1158, 1159, 5, 108, 0, 0, 1159, 1738, 5, 99, 0, 0, 1160, 1161, 5, 106, 0, 0, 1161, 1162, 5, 115, 0, 0, 1162, 1738, 5, 114, 0, 0, 1163, 1164, 5, 97, 0, 0, 1164, 1165, 5, 110, 0, 0, 1165, 1738, 5, 100, 0, 0, 1166, 1167, 5, 114, 0, 0, 1167, 1168, 5, 108, 0, 0, 1168, 1738, 5, 97, 0, 0, 1169, 1170, 5, 98, 0, 0, 1170, 1171, 5, 105, 0, 0, 1171, 1738, 5, 116, 0, 0, 1172, 1173, 5, 114, 0, 0, 1173, 1174, 5, 111, 0, 0, 1174, 1738, 5, 108, 0, 0, 1175, 1176, 5, 112, 0, 0, 1176, 1177, 5, 108, 0, 0, 1177, 1738, 5, 97, 0, 0, 1178, 1179, 5, 112, 0, 0, 1179, 1180, 5, 108, 0, 0, 1180, 1738, 5, 112, 0, 0, 1181, 1182, 5, 98, 0, 0, 1182, 1183, 5, 109, 0, 0, 1183, 1738, 5, 105, 0, 0, 1184, 1185, 5, 115, 0, 0, 1185, 1186, 5, 101, 0, 0, 1186, 1738, 5, 99, 0, 0, 1187, 1188, 5, 114, 0, 0, 1188, 1189, 5, 116, 0, 0, 1189, 1738, 5, 105, 0, 0, 1190, 1191, 5, 101, 0, 0, 1191, 1192, 5, 111, 0, 0, 1192, 1738, 5, 114, 0, 0, 1193, 1194, 5, 115, 0, 0, 1194, 1195, 5, 114, 0, 0, 1195, 1738, 5, 101, 0, 0, 1196, 1197, 5, 108, 0, 0, 1197, 1198, 5, 115, 0, 0, 1198, 1738, 5, 114, 0, 0, 1199, 1200, 5, 112, 0, 0, 1200, 1201, 5, 104, 0, 0, 1201, 1738, 5, 97, 0, 0, 1202, 1203, 5, 97, 0, 0, 1203, 1204, 5, 108, 0, 0, 1204, 1738, 5, 114, 0, 0, 1205, 1206, 5, 106, 0, 0, 1206, 1207, 5, 109, 0, 0, 1207, 1738, 5, 112, 0, 0, 1208, 1209, 5, 98, 0, 0, 1209, 1210, 5, 118, 0, 0, 1210, 1738, 5, 99, 0, 0, 1211, 1212, 5, 99, 0, 0, 1212, 1213, 5, 108, 0, 0, 1213, 1738, 5, 105, 0, 0, 1214, 1215, 5, 114, 0, 0, 1215, 1216, 5, 116, 0, 0, 1216, 1738, 5, 115, 0, 0, 1217, 1218, 5, 97, 0, 0, 1218, 1219, 5, 100, 0, 0, 1219, 1738, 5, 99, 0, 0, 1220, 1221, 5, 114, 0, 0, 1221, 1222, 5, 114, 0, 0, 1222, 1738, 5, 97, 0, 0, 1223, 1224, 5, 98, 0, 0, 1224, 1225, 5, 118, 0, 0, 1225, 1738, 5, 115, 0, 0, 1226, 1227, 5, 115, 0, 0, 1227, 1228, 5, 101, 0, 0, 1228, 1738, 5, 105, 0, 0, 1229, 1230, 5, 115, 0, 0, 1230, 1231, 5, 97, 0, 0, 1231, 1738, 5, 120, 0, 0, 1232, 1233, 5, 115, 0, 0, 1233, 1234, 5, 116, 0, 0, 1234, 1738, 5, 121, 0, 0, 1235, 1236, 5, 115, 0, 0, 1236, 1237, 5, 116, 0, 0, 1237, 1738, 5, 97, 0, 0, 1238, 1239, 5, 115, 0, 0, 1239, 1240, 5, 116, 0, 0, 1240, 1738, 5, 120, 0, 0, 1241, 1242, 5, 100, 0, 0, 1242, 1243, 5, 101, 0, 0, 1243, 1738, 5, 121, 0, 0, 1244, 1245, 5, 116, 0, 0, 1245, 1246, 5, 120, 0, 0, 1246, 1738, 5, 97, 0, 0, 1247, 1248, 5, 120, 0, 0, 1248, 1249, 5, 97, 0, 0, 1249, 1738, 5, 97, 0, 0, 1250, 1251, 5, 98, 0, 0, 1251, 1252, 5, 99, 0, 0, 1252, 1738, 5, 99, 0, 0, 1253, 1254, 5, 97, 0, 0, 1254, 1255, 5, 104, 0, 0, 1255, 1738, 5, 120, 0, 0, 1256, 1257, 5, 116, 0, 0, 1257, 1258, 5, 121, 0, 0, 1258, 1738, 5, 97, 0, 0, 1259, 1260, 5, 116, 0, 0, 1260, 1261, 5, 120, 0, 0, 1261, 1738, 5, 115, 0, 0, 1262, 1263, 5, 116, 0, 0, 1263, 1264, 5, 97, 0, 0, 1264, 1738, 5, 115, 0, 0, 1265, 1266, 5, 115, 0, 0, 1266, 1267, 5, 104, 0, 0, 1267, 1738, 5, 121, 0, 0, 1268, 1269, 5, 115, 0, 0, 1269, 1270, 5, 104, 0, 0, 1270, 1738, 5, 120, 0, 0, 1271, 1272, 5, 108, 0, 0, 1272, 1273, 5, 100, 0, 0, 1273, 1738, 5, 121, 0, 0, 1274, 1275, 5, 108, 0, 0, 1275, 1276, 5, 100, 0, 0, 1276, 1738, 5, 97, 0, 0, 1277, 1278, 5, 108, 0, 0, 1278, 1279, 5, 100, 0, 0, 1279, 1738, 5, 120, 0, 0, 1280, 1281, 5, 108, 0, 0, 1281, 1282, 5, 97, 0, 0, 1282, 1738, 5, 120, 0, 0, 1283, 1284, 5, 116, 0, 0, 1284, 1285, 5, 97, 0, 0, 1285, 1738, 5, 121, 0, 0, 1286, 1287, 5, 116, 0, 0, 1287, 1288, 5, 97, 0, 0, 1288, 1738, 5, 120, 0, 0, 1289, 1290, 5, 98, 0, 0, 1290, 1291, 5, 99, 0, 0, 1291, 1738, 5, 115, 0, 0, 1292, 1293, 5, 99, 0, 0, 1293, 1294, 5, 108, 0, 0, 1294, 1738, 5, 118, 0, 0, 1295, 1296, 5, 116, 0, 0, 1296, 1297, 5, 115, 0, 0, 1297, 1738, 5, 120, 0, 0, 1298, 1299, 5, 108, 0, 0, 1299, 1300, 5, 97, 0, 0, 1300, 1738, 5, 115, 0, 0, 1301, 1302, 5, 99, 0, 0, 1302, 1303, 5, 112, 0, 0, 1303, 1738, 5, 121, 0, 0, 1304, 1305, 5, 99, 0, 0, 1305, 1306, 5, 109, 0, 0, 1306, 1738, 5, 112, 0, 0, 1307, 1308, 5, 99, 0, 0, 1308, 1309, 5, 112, 0, 0, 1309, 1738, 5, 120, 0, 0, 1310, 1311, 5, 100, 0, 0, 1311, 1312, 5, 99, 0, 0, 1312, 1738, 5, 112, 0, 0, 1313, 1314, 5, 100, 0, 0, 1314, 1315, 5, 101, 0, 0, 1315, 1738, 5, 99, 0, 0, 1316, 1317, 5, 105, 0, 0, 1317, 1318, 5, 110, 0, 0, 1318, 1738, 5, 99, 0, 0, 1319, 1320, 5, 97, 0, 0, 1320, 1321, 5, 120, 0, 0, 1321, 1738, 5, 115, 0, 0, 1322, 1323, 5, 98, 0, 0, 1323, 1324, 5, 110, 0, 0, 1324, 1738, 5, 101, 0, 0, 1325, 1326, 5, 99, 0, 0, 1326, 1327, 5, 108, 0, 0, 1327, 1738, 5, 100, 0, 0, 1328, 1329, 5, 115, 0, 0, 1329, 1330, 5, 98, 0, 0, 1330, 1738, 5, 99, 0, 0, 1331, 1332, 5, 105, 0, 0, 1332, 1333, 5, 115, 0, 0, 1333, 1738, 5, 99, 0, 0, 1334, 1335, 5, 105, 0, 0, 1335, 1336, 5, 110, 0, 0, 1336, 1738, 5, 120, 0, 0, 1337, 1338, 5, 98, 0, 0, 1338, 1339, 5, 101, 0, 0, 1339, 1738, 5, 113, 0, 0, 1340, 1341, 5, 115, 0, 0, 1341, 1342, 5, 101, 0, 0, 1342, 1738, 5, 100, 0, 0, 1343, 1344, 5, 100, 0, 0, 1344, 1345, 5, 101, 0, 0, 1345, 1738, 5, 120, 0, 0, 1346, 1347, 5, 105, 0, 0, 1347, 1348, 5, 110, 0, 0, 1348, 1738, 5, 121, 0, 0, 1349, 1350, 5, 114, 0, 0, 1350, 1351, 5, 111, 0, 0, 1351, 1738, 5, 114, 0, 0, 1352, 1353, 5, 98, 0, 0, 1353, 1354, 5, 98, 0, 0, 1354, 1355, 5, 114, 0, 0, 1355, 1738, 5, 48, 0, 0, 1356, 1357, 5, 98, 0, 0, 1357, 1358, 5, 98, 0, 0, 1358, 1359, 5, 114, 0, 0, 1359, 1738, 5, 49, 0, 0, 1360, 1361, 5, 98, 0, 0, 1361, 1362, 5, 98, 0, 0, 1362, 1363, 5, 114, 0, 0, 1363, 1738, 5, 50, 0, 0, 1364, 1365, 5, 98, 0, 0, 1365, 1366, 5, 98, 0, 0, 1366, 1367, 5, 114, 0, 0, 1367, 1738, 5, 51, 0, 0, 1368, 1369, 5, 98, 0, 0, 1369, 1370, 5, 98, 0, 0, 1370, 1371, 5, 114, 0, 0, 1371, 1738, 5, 52, 0, 0, 1372, 1373, 5, 98, 0, 0, 1373, 1374, 5, 98, 0, 0, 1374, 1375, 5, 114, 0, 0, 1375, 1738, 5, 53, 0, 0, 1376, 1377, 5, 98, 0, 0, 1377, 1378, 5, 98, 0, 0, 1378, 1379, 5, 114, 0, 0, 1379, 1738, 5, 54, 0, 0, 1380, 1381, 5, 98, 0, 0, 1381, 1382, 5, 98, 0, 0, 1382, 1383, 5, 114, 0, 0, 1383, 1738, 5, 55, 0, 0, 1384, 1385, 5, 98, 0, 0, 1385, 1386, 5, 98, 0, 0, 1386, 1387, 5, 115, 0, 0, 1387, 1738, 5, 48, 0, 0, 1388, 1389, 5, 98, 0, 0, 1389, 1390, 5, 98, 0, 0, 1390, 1391, 5, 115, 0, 0, 1391, 1738, 5, 49, 0, 0, 1392, 1393, 5, 98, 0, 0, 1393, 1394, 5, 98, 0, 0, 1394, 1395, 5, 115, 0, 0, 1395, 1738, 5, 50, 0, 0, 1396, 1397, 5, 98, 0, 0, 1397, 1398, 5, 98, 0, 0, 1398, 1399, 5, 115, 0, 0, 1399, 1738, 5, 51, 0, 0, 1400, 1401, 5, 98, 0, 0, 1401, 1402, 5, 98, 0, 0, 1402, 1403, 5, 115, 0, 0, 1403, 1738, 5, 52, 0, 0, 1404, 1405, 5, 98, 0, 0, 1405, 1406, 5, 98, 0, 0, 1406, 1407, 5, 115, 0, 0, 1407, 1738, 5, 53, 0, 0, 1408, 1409, 5, 98, 0, 0, 1409, 1410, 5, 98, 0, 0, 1410, 1411, 5, 115, 0, 0, 1411, 1738, 5, 54, 0, 0, 1412, 1413, 5, 98, 0, 0, 1413, 1414, 5, 98, 0, 0, 1414, 1415, 5, 115, 0, 0, 1415, 1738, 5, 55, 0, 0, 1416, 1417, 5, 98, 0, 0, 1417, 1418, 5, 114, 0, 0, 1418, 1738, 5, 97, 0, 0, 1419, 1420, 5, 112, 0, 0, 1420, 1421, 5, 104, 0, 0, 1421, 1738, 5, 120, 0, 0, 1422, 1423, 5, 112, 0, 0, 1423, 1424, 5, 104, 0, 0, 1424, 1738, 5, 121, 0, 0, 1425, 1426, 5, 112, 0, 0, 1426, 1427, 5, 108, 0, 0, 1427, 1738, 5, 120, 0, 0, 1428, 1429, 5, 112, 0, 0, 1429, 1430, 5, 108, 0, 0, 1430, 1738, 5, 121, 0, 0, 1431, 1432, 5, 114, 0, 0, 1432, 1433, 5, 109, 0, 0, 1433, 1434, 5, 98, 0, 0, 1434, 1738, 5, 48, 0, 0, 1435, 1436, 5, 114, 0, 0, 1436, 1437, 5, 109, 0, 0, 1437, 1438, 5, 98, 0, 0, 1438, 1738, 5, 49, 0, 0, 1439, 1440, 5, 114, 0, 0, 1440, 1441, 5, 109, 0, 0, 1441, 1442, 5, 98, 0, 0, 1442, 1738, 5, 50, 0, 0, 1443, 1444, 5, 114, 0, 0, 1444, 1445, 5, 109, 0, 0, 1445, 1446, 5, 98, 0, 0, 1446, 1738, 5, 51, 0, 0, 1447, 1448, 5, 114, 0, 0, 1448, 1449, 5, 109, 0, 0, 1449, 1450, 5, 98, 0, 0, 1450, 1738, 5, 52, 0, 0, 1451, 1452, 5, 114, 0, 0, 1452, 1453, 5, 109, 0, 0, 1453, 1454, 5, 98, 0, 0, 1454, 1738, 5, 53, 0, 0, 1455, 1456, 5, 114, 0, 0, 1456, 1457, 5, 109, 0, 0, 1457, 1458, 5, 98, 0, 0, 1458, 1738, 5, 54, 0, 0, 1459, 1460, 5, 114, 0, 0, 1460, 1461, 5, 109, 0, 0, 1461, 1462, 5, 98, 0, 0, 1462, 1738, 5, 55, 0, 0, 1463, 1464, 5, 115, 0, 0, 1464, 1465, 5, 109, 0, 0, 1465, 1466, 5, 98, 0, 0, 1466, 1738, 5, 48, 0, 0, 1467, 1468, 5, 115, 0, 0, 1468, 1469, 5, 109, 0, 0, 1469, 1470, 5, 98, 0, 0, 1470, 1738, 5, 49, 0, 0, 1471, 1472, 5, 115, 0, 0, 1472, 1473, 5, 109, 0, 0, 1473, 1474, 5, 98, 0, 0, 1474, 1738, 5, 50, 0, 0, 1475, 1476, 5, 115, 0, 0, 1476, 1477, 5, 109, 0, 0, 1477, 1478, 5, 98, 0, 0, 1478, 1738, 5, 51, 0, 0, 1479, 1480, 5, 115, 0, 0, 1480, 1481, 5, 109, 0, 0, 1481, 1482, 5, 98, 0, 0, 1482, 1738, 5, 52, 0, 0, 1483, 1484, 5, 115, 0, 0, 1484, 1485, 5, 109, 0, 0, 1485, 1486, 5, 98, 0, 0, 1486, 1738, 5, 53, 0, 0, 1487, 1488, 5, 115, 0, 0, 1488, 1489, 5, 109, 0, 0, 1489, 1490, 5, 98, 0, 0, 1490, 1738, 5, 54, 0, 0, 1491, 1492, 5, 115, 0, 0, 1492, 1493, 5, 109, 0, 0, 1493, 1494, 5, 98, 0, 0, 1494, 1738, 5, 55, 0, 0, 1495, 1496, 5, 115, 0, 0, 1496, 1497, 5, 116, 0, 0, 1497, 1738, 5, 112, 0, 0, 1498, 1499, 5, 115, 0, 0, 1499, 1500, 5, 116, 0, 0, 1500, 1738, 5, 122, 0, 0, 1501, 1502, 5, 116, 0, 0, 1502, 1503, 5, 114, 0, 0, 1503, 1738, 5, 98, 0, 0, 1504, 1505, 5, 116, 0, 0, 1505, 1506, 5, 115, 0, 0, 1506, 1738, 5, 98, 0, 0, 1507, 1508, 5, 119, 0, 0, 1508, 1509, 5, 97, 0, 0, 1509, 1738, 5, 105, 0, 0, 1510, 1511, 5, 99, 0, 0, 1511, 1512, 5, 108, 0, 0, 1512, 1738, 5, 101, 0, 0, 1513, 1514, 5, 115, 0, 0, 1514, 1515, 5, 101, 0, 0, 1515, 1738, 5, 101, 0, 0, 1516, 1517, 5, 116, 0, 0, 1517, 1518, 5, 115, 0, 0, 1518, 1738, 5, 121, 0, 0, 1519, 1520, 5, 108, 0, 0, 1520, 1521, 5, 98, 0, 0, 1521, 1522, 5, 112, 0, 0, 1522, 1738, 5, 108, 0, 0, 1523, 1524, 5, 105, 0, 0, 1524, 1525, 5, 110, 0, 0, 1525, 1738, 5, 122, 0, 0, 1526, 1527, 5, 116, 0, 0, 1527, 1528, 5, 121, 0, 0, 1528, 1738, 5, 115, 0, 0, 1529, 1530, 5, 108, 0, 0, 1530, 1531, 5, 98, 0, 0, 1531, 1532, 5, 109, 0, 0, 1532, 1738, 5, 105, 0, 0, 1533, 1534, 5, 100, 0, 0, 1534, 1535, 5, 101, 0, 0, 1535, 1738, 5, 122, 0, 0, 1536, 1537, 5, 110, 0, 0, 1537, 1538, 5, 101, 0, 0, 1538, 1738, 5, 103, 0, 0, 1539, 1540, 5, 97, 0, 0, 1540, 1541, 5, 115, 0, 0, 1541, 1738, 5, 114, 0, 0, 1542, 1543, 5, 116, 0, 0, 1543, 1544, 5, 97, 0, 0, 1544, 1738, 5, 122, 0, 0, 1545, 1546, 5, 108, 0, 0, 1546, 1547, 5, 98, 0, 0, 1547, 1548, 5, 118, 0, 0, 1548, 1738, 5, 99, 0, 0, 1549, 1550, 5, 116, 0, 0, 1550, 1551, 5, 97, 0, 0, 1551, 1738, 5, 98, 0, 0, 1552, 1553, 5, 109, 0, 0, 1553, 1554, 5, 97, 0, 0, 1554, 1738, 5, 112, 0, 0, 1555, 1556, 5, 114, 0, 0, 1556, 1557, 5, 116, 0, 0, 1557, 1738, 5, 110, 0, 0, 1558, 1559, 5, 108, 0, 0, 1559, 1560, 5, 98, 0, 0, 1560, 1561, 5, 115, 0, 0, 1561, 1738, 5, 114, 0, 0, 1562, 1563, 5, 116, 0, 0, 1563, 1564, 5, 122, 0, 0, 1564, 1738, 5, 97, 0, 0, 1565, 1566, 5, 108, 0, 0, 1566, 1567, 5, 98, 0, 0, 1567, 1568, 5, 118, 0, 0, 1568, 1738, 5, 115, 0, 0, 1569, 1570, 5, 116, 0, 0, 1570, 1571, 5, 98, 0, 0, 1571, 1738, 5, 97, 0, 0, 1572, 1573, 5, 108, 0, 0, 1573, 1574, 5, 98, 0, 0, 1574, 1575, 5, 114, 0, 0, 1575, 1738, 5, 97, 0, 0, 1576, 1577, 5, 108, 0, 0, 1577, 1578, 5, 98, 0, 0, 1578, 1579, 5, 99, 0, 0, 1579, 1738, 5, 99, 0, 0, 1580, 1581, 5, 108, 0, 0, 1581, 1582, 5, 100, 0, 0, 1582, 1738, 5, 122, 0, 0, 1583, 1584, 5, 108, 0, 0, 1584, 1585, 5, 98, 0, 0, 1585, 1586, 5, 99, 0, 0, 1586, 1738, 5, 115, 0, 0, 1587, 1588, 5, 99, 0, 0, 1588, 1589, 5, 112, 0, 0, 1589, 1738, 5, 122, 0, 0, 1590, 1591, 5, 100, 0, 0, 1591, 1592, 5, 101, 0, 0, 1592, 1738, 5, 119, 0, 0, 1593, 1594, 5, 97, 0, 0, 1594, 1595, 5, 115, 0, 0, 1595, 1738, 5, 119, 0, 0, 1596, 1597, 5, 108, 0, 0, 1597, 1598, 5, 98, 0, 0, 1598, 1599, 5, 110, 0, 0, 1599, 1738, 5, 101, 0, 0, 1600, 1601, 5, 112, 0, 0, 1601, 1602, 5, 104, 0, 0, 1602, 1738, 5, 122, 0, 0, 1603, 1604, 5, 105, 0, 0, 1604, 1605, 5, 110, 0, 0, 1605, 1738, 5, 119, 0, 0, 1606, 1607, 5, 114, 0, 0, 1607, 1608, 5, 111, 0, 0, 1608, 1738, 5, 119, 0, 0, 1609, 1610, 5, 108, 0, 0, 1610, 1611, 5, 98, 0, 0, 1611, 1612, 5, 101, 0, 0, 1612, 1738, 5, 113, 0, 0, 1613, 1614, 5, 112, 0, 0, 1614, 1615, 5, 104, 0, 0, 1615, 1738, 5, 119, 0, 0, 1616, 1617, 5, 112, 0, 0, 1617, 1618, 5, 108, 0, 0, 1618, 1738, 5, 122, 0, 0, 1619, 1620, 5, 101, 0, 0, 1620, 1621, 5, 111, 0, 0, 1621, 1738, 5, 109, 0, 0, 1622, 1623, 5, 97, 0, 0, 1623, 1624, 5, 100, 0, 0, 1624, 1625, 5, 99, 0, 0, 1625, 1738, 5, 113, 0, 0, 1626, 1627, 5, 97, 0, 0, 1627, 1628, 5, 110, 0, 0, 1628, 1629, 5, 100, 0, 0, 1629, 1738, 5, 113, 0, 0, 1630, 1631, 5, 97, 0, 0, 1631, 1632, 5, 115, 0, 0, 1632, 1633, 5, 108, 0, 0, 1633, 1738, 5, 113, 0, 0, 1634, 1635, 5, 97, 0, 0, 1635, 1636, 5, 115, 0, 0, 1636, 1637, 5, 114, 0, 0, 1637, 1738, 5, 113, 0, 0, 1638, 1639, 5, 98, 0, 0, 1639, 1640, 5, 105, 0, 0, 1640, 1641, 5, 116, 0, 0, 1641, 1738, 5, 113, 0, 0, 1642, 1643, 5, 99, 0, 0, 1643, 1644, 5, 112, 0, 0, 1644, 1738, 5, 113, 0, 0, 1645, 1646, 5, 100, 0, 0, 1646, 1647, 5, 101, 0, 0, 1647, 1738, 5, 113, 0, 0, 1648, 1649, 5, 101, 0, 0, 1649, 1650, 5, 111, 0, 0, 1650, 1651, 5, 114, 0, 0, 1651, 1738, 5, 113, 0, 0, 1652, 1653, 5, 105, 0, 0, 1653, 1654, 5, 110, 0, 0, 1654, 1738, 5, 113, 0, 0, 1655, 1656, 5, 108, 0, 0, 1656, 1657, 5, 100, 0, 0, 1657, 1738, 5, 113, 0, 0, 1658, 1659, 5, 108, 0, 0, 1659, 1660, 5, 115, 0, 0, 1660, 1661, 5, 114, 0, 0, 1661, 1738, 5, 113, 0, 0, 1662, 1663, 5, 111, 0, 0, 1663, 1664, 5, 114, 0, 0, 1664, 1738, 5, 113, 0, 0, 1665, 1666, 5, 114, 0, 0, 1666, 1667, 5, 111, 0, 0, 1667, 1668, 5, 108, 0, 0, 1668, 1738, 5, 113, 0, 0, 1669, 1670, 5, 114, 0, 0, 1670, 1671, 5, 111, 0, 0, 1671, 1672, 5, 114, 0, 0, 1672, 1738, 5, 113, 0, 0, 1673, 1674, 5, 115, 0, 0, 1674, 1675, 5, 98, 0, 0, 1675, 1676, 5, 99, 0, 0, 1676, 1738, 5, 113, 0, 0, 1677, 1678, 5, 115, 0, 0, 1678, 1679, 5, 116, 0, 0, 1679, 1738, 5, 113, 0, 0, 1680, 1681, 5, 115, 0, 0, 1681, 1682, 5, 120, 0, 0, 1682, 1738, 5, 121, 0, 0, 1683, 1684, 5, 115, 0, 0, 1684, 1685, 5, 116, 0, 0, 1685, 1738, 5, 48, 0, 0, 1686, 1687, 5, 115, 0, 0, 1687, 1688, 5, 116, 0, 0, 1688, 1738, 5, 49, 0, 0, 1689, 1690, 5, 115, 0, 0, 1690, 1691, 5, 116, 0, 0, 1691, 1738, 5, 50, 0, 0, 1692, 1693, 5, 115, 0, 0, 1693, 1694, 5, 97, 0, 0, 1694, 1738, 5, 121, 0, 0, 1695, 1696, 5, 116, 0, 0, 1696, 1697, 5, 109, 0, 0, 1697, 1738, 5, 97, 0, 0, 1698, 1699, 5, 98, 0, 0, 1699, 1700, 5, 115, 0, 0, 1700, 1738, 5, 114, 0, 0, 1701, 1702, 5, 116, 0, 0, 1702, 1703, 5, 97, 0, 0, 1703, 1738, 5, 109, 0, 0, 1704, 1705, 5, 99, 0, 0, 1705, 1706, 5, 115, 0, 0, 1706, 1738, 5, 108, 0, 0, 1707, 1708, 5, 99, 0, 0, 1708, 1709, 5, 108, 0, 0, 1709, 1738, 5, 97, 0, 0, 1710, 1711, 5, 99, 0, 0, 1711, 1712, 5, 108, 0, 0, 1712, 1738, 5, 120, 0, 0, 1713, 1714, 5, 99, 0, 0, 1714, 1715, 5, 108, 0, 0, 1715, 1738, 5, 121, 0, 0, 1716, 1717, 5, 99, 0, 0, 1717, 1718, 5, 115, 0, 0, 1718, 1738, 5, 104, 0, 0, 1719, 1720, 5, 115, 0, 0, 1720, 1721, 5, 101, 0, 0, 1721, 1738, 5, 116, 0, 0, 1722, 1723, 5, 116, 0, 0, 1723, 1724, 5, 115, 0, 0, 1724, 1738, 5, 116, 0, 0, 1725, 1726, 5, 116, 0, 0, 1726, 1727, 5, 105, 0, 0, 1727, 1738, 5, 97, 0, 0, 1728, 1729, 5, 116, 0, 0, 1729, 1730, 5, 100, 0, 0, 1730, 1738, 5, 100, 0, 0, 1731, 1732, 5, 116, 0, 0, 1732, 1733, 5, 105, 0, 0, 1733, 1738, 5, 110, 0, 0, 1734, 1735, 5, 116, 0, 0, 1735, 1736, 5, 105, 0, 0, 1736, 1738, 5, 105, 0, 0, 1737, 1130, 1, 0, 0, 0, 1737, 1133, 1, 0, 0, 0, 1737, 1136, 1, 0, 0, 0, 1737, 1139, 1, 0, 0, 0, 1737, 1142, 1, 0, 0, 0, 1737, 1145, 1, 0, 0, 0, 1737, 1148, 1, 0, 0, 0, 1737, 1151, 1, 0, 0, 0, 1737, 1154, 1, 0, 0, 0, 1737, 1157, 1, 0, 0, 0, 1737, 1160, 1, 0, 0, 0, 1737, 1163, 1, 0, 0, 0, 1737, 1166, 1, 0, 0, 0, 1737, 1169, 1, 0, 0, 0, 1737, 1172, 1, 0, 0, 0, 1737, 1175, 1, 0, 0, 0, 1737, 1178, 1, 0, 0, 0, 1737, 1181, 1, 0, 0, 0, 1737, 1184, 1, 0, 0, 0, 1737, 1187, 1, 0, 0, 0, 1737, 1190, 1, 0, 0, 0, 1737, 1193, 1, 0, 0, 0, 1737, 1196, 1, 0, 0, 0, 1737, 1199, 1, 0, 0, 0, 1737, 1202, 1, 0, 0, 0, 1737, 1205, 1, 0, 0, 0, 1737, 1208, 1, 0, 0, 0, 1737, 1211, 1, 0, 0, 0, 1737, 1214, 1, 0, 0, 0, 1737, 1217, 1, 0, 0, 0, 1737, 1220, 1, 0, 0, 0, 1737, 1223, 1, 0, 0, 0, 1737, 1226, 1, 0, 0, 0, 1737, 1229, 1, 0, 0, 0, 1737, 1232, 1, 0, 0, 0, 1737, 1235, 1, 0, 0, 0, 1737, 1238, 1, 0, 0, 0, 1737, 1241, 1, 0, 0, 0, 1737, 1244, 1, 0, 0, 0, 1737, 1247, 1, 0, 0, 0, 1737, 1250, 1, 0, 0, 0, 1737, 1253, 1, 0, 0, 0, 1737, 1256, 1, 0, 0, 0, 1737, 1259, 1, 0, 0, 0, 1737, 1262, 1, 0, 0, 0, 1737, 1265, 1, 0, 0, 0, 1737, 1268, 1, 0, 0, 0, 1737, 1271, 1, 0, 0, 0, 1737, 1274, 1, 0, 0, 0, 1737, 1277, 1, 0, 0, 0, 1737, 1280, 1, 0, 0, 0, 1737, 1283, 1, 0, 0, 0, 1737, 1286, 1, 0, 0, 0, 1737, 1289, 1, 0, 0, 0, 1737, 1292, 1, 0, 0, 0, 1737, 1295, 1, 0, 0, 0, 1737, 1298, 1, 0, 0, 0, 1737, 1301, 1, 0, 0, 0, 1737, 1304, 1, 0, 0, 0, 1737, 1307, 1, 0, 0, 0, 1737, 1310, 1, 0, 0, 0, 1737, 1313, 1, 0, 0, 0, 1737, 1316, 1, 0, 0, 0, 1737, 1319, 1, 0, 0, 0, 1737, 1322, 1, 0, 0, 0, 1737, 1325, 1, 0, 0, 0, 1737, 1328, 1, 0, 0, 0, 1737, 1331, 1, 0, 0, 0, 1737, 1334, 1, 0, 0, 0, 1737, 1337, 1, 0, 0, 0, 1737, 1340, 1, 0, 0, 0, 1737, 1343, 1, 0, 0, 0, 1737, 1346, 1, 0, 0, 0, 1737, 1349, 1, 0, 0, 0, 1737, 1352, 1, 0, 0, 0, 1737, 1356, 1, 0, 0, 0, 1737, 1360, 1, 0, 0, 0, 1737, 1364, 1, 0, 0, 0, 1737, 1368, 1, 0, 0, 0, 1737, 1372, 1, 0, 0, 0, 1737, 1376, 1, 0, 0, 0, 1737, 1380, 1, 0, 0, 0, 1737, 1384, 1, 0, 0, 0, 1737, 1388, 1, 0, 0, 0, 1737, 1392, 1, 0, 0, 0, 1737, 1396, 1, 0, 0, 0, 1737, 1400, 1, 0, 0, 0, 1737, 1404, 1, 0, 0, 0, 1737, 1408, 1, 0, 0, 0, 1737, 1412, 1, 0, 0, 0, 1737, 1416, 1, 0, 0, 0, 1737, 1419, 1, 0, 0, 0, 1737, 1422, 1, 0, 0, 0, 1737, 1425, 1, 0, 0, 0, 1737, 1428, 1, 0, 0, 0, 1737, 1431, 1, 0, 0, 0, 1737, 1435, 1, 0, 0, 0, 1737, 1439, 1, 0, 0, 0, 1737, 1443, 1, 0, 0, 0, 1737, 1447, 1, 0, 0, 0, 1737, 1451, 1, 0, 0, 0, 1737, 1455, 1, 0, 0, 0, 1737, 1459, 1, 0, 0, 0, 1737, 1463, 1, 0, 0, 0, 1737, 1467, 1, 0, 0, 0, 1737, 1471, 1, 0, 0, 0, 1737, 1475, 1, 0, 0, 0, 1737, 1479, 1, 0, 0, 0, 1737, 1483, 1, 0, 0, 0, 1737, 1487, 1, 0, 0, 0, 1737, 1491, 1, 0, 0, 0, 1737, 1495, 1, 0, 0, 0, 1737, 1498, 1, 0, 0, 0, 1737, 1501, 1, 0, 0, 0, 1737, 1504, 1, 0, 0, 0, 1737, 1507, 1, 0, 0, 0, 1737, 1510, 1, 0, 0, 0, 1737, 1513, 1, 0, 0, 0, 1737, 1516, 1, 0, 0, 0, 1737, 1519, 1, 0, 0, 0, 1737, 1523, 1, 0, 0, 0, 1737, 1526, 1, 0, 0, 0, 1737, 1529, 1, 0, 0, 0, 1737, 1533, 1, 0, 0, 0, 1737, 1536, 1, 0, 0, 0, 1737, 1539, 1, 0, 0, 0, 1737, 1542, 1, 0, 0, 0, 1737, 1545, 1, 0, 0, 0, 1737, 1549, 1, 0, 0, 0, 1737, 1552, 1, 0, 0, 0, 1737, 1555, 1, 0, 0, 0, 1737, 1558, 1, 0, 0, 0, 1737, 1562, 1, 0, 0, 0, 1737, 1565, 1, 0, 0, 0, 1737, 1569, 1, 0, 0, 0, 1737, 1572, 1, 0, 0, 0, 1737, 1576, 1, 0, 0, 0, 1737, 1580, 1, 0, 0, 0, 1737, 1583, 1, 0, 0, 0, 1737, 1587, 1, 0, 0, 0, 1737, 1590, 1, 0, 0, 0, 1737, 1593, 1, 0, 0, 0, 1737, 1596, 1, 0, 0, 0, 1737, 1600, 1, 0, 0, 0, 1737, 1603, 1, 0, 0, 0, 1737, 1606, 1, 0, 0, 0, 1737, 1609, 1, 0, 0, 0, 1737, 1613, 1, 0, 0, 0, 1737, 1616, 1, 0, 0, 0, 1737, 1619, 1, 0, 0, 0, 1737, 1622, 1, 0, 0, 0, 1737, 1626, 1, 0, 0, 0, 1737, 1630, 1, 0, 0, 0, 1737, 1634, 1, 0, 0, 0, 1737, 1638, 1, 0, 0, 0, 1737, 1642, 1, 0, 0, 0, 1737, 1645, 1, 0, 0, 0, 1737, 1648, 1, 0, 0, 0, 1737, 1652, 1, 0, 0, 0, 1737, 1655, 1, 0, 0, 0, 1737, 1658, 1, 0, 0, 0, 1737, 1662, 1, 0, 0, 0, 1737, 1665, 1, 0, 0, 0, 1737, 1669, 1, 0, 0, 0, 1737, 1673, 1, 0, 0, 0, 1737, 1677, 1, 0, 0, 0, 1737, 1680, 1, 0, 0, 0, 1737, 1683, 1, 0, 0, 0, 1737, 1686, 1, 0, 0, 0, 1737, 1689, 1, 0, 0, 0, 1737, 1692, 1, 0, 0, 0, 1737, 1695, 1, 0, 0, 0, 1737, 1698, 1, 0, 0, 0, 1737, 1701, 1, 0, 0, 0, 1737, 1704, 1, 0, 0, 0, 1737, 1707, 1, 0, 0, 0, 1737, 1710, 1, 0, 0, 0, 1737, 1713, 1, 0, 0, 0, 1737, 1716, 1, 0, 0, 0, 1737, 1719, 1, 0, 0, 0, 1737, 1722, 1, 0, 0, 0, 1737, 1725, 1, 0, 0, 0, 1737, 1728, 1, 0, 0, 0, 1737, 1731, 1, 0, 0, 0, 1737, 1734, 1, 0, 0, 0, 1738, 236, 1, 0, 0, 0, 1739, 1740, 5, 35, 0, 0, 1740, 238, 1, 0, 0, 0, 1741, 1742, 5, 58, 0, 0, 1742, 240, 1, 0, 0, 0, 1743, 1744, 5, 44, 0, 0, 1744, 242, 1, 0, 0, 0, 1745, 1746, 5, 40, 0, 0, 1746, 244, 1, 0, 0, 0, 1747, 1748, 5, 41, 0, 0, 1748, 246, 1, 0, 0, 0, 1749, 1750, 5, 91, 0, 0, 1750, 248, 1, 0, 0, 0, 1751, 1752, 5, 93, 0, 0, 1752, 250, 1, 0, 0, 0, 1753, 1754, 5, 46, 0, 0, 1754, 252, 1, 0, 0, 0, 1755, 1756, 5, 60, 0, 0, 1756, 1757, 5, 60, 0, 0, 1757, 254, 1, 0, 0, 0, 1758, 1759, 5, 62, 0, 0, 1759, 1760, 5, 62, 0, 0, 1760, 256, 1, 0, 0, 0, 1761, 1762, 5, 43, 0, 0, 1762, 258, 1, 0, 0, 0, 1763, 1764, 5, 45, 0, 0, 1764, 260, 1, 0, 0, 0, 1765, 1766, 5, 60, 0, 0, 1766, 262, 1, 0, 0, 0, 1767, 1768, 5, 62, 0, 0, 1768, 264, 1, 0, 0, 0, 1769, 1770, 5, 42, 0, 0, 1770, 266, 1, 0, 0, 0, 1771, 1772, 5, 47, 0, 0, 1772, 268, 1, 0, 0, 0, 1773, 1774, 5, 123, 0, 0, 1774, 1775, 6, 133, 7, 0, 1775, 270, 1, 0, 0, 0, 1776, 1777, 5, 125, 0, 0, 1777, 1778, 6, 134, 8, 0, 1778, 272, 1, 0, 0, 0, 1779, 1782, 3, 275, 136, 0, 1780, 1782, 3, 283, 140, 0, 1781, 1779, 1, 0, 0, 0, 1781, 1780, 1, 0, 0, 0, 1782, 274, 1, 0, 0, 0, 1783, 1787, 3, 277, 137, 0, 1784, 1787, 3, 279, 138, 0, 1785, 1787, 3, 281, 139, 0, 1786, 1783, 1, 0, 0, 0, 1786, 1784, 1, 0, 0, 0, 1786, 1785, 1, 0, 0, 0, 1787, 276, 1, 0, 0, 0, 1788, 1792, 5, 37, 0, 0, 1789, 1791, 3, 291, 144, 0, 1790, 1789, 1, 0, 0, 0, 1791, 1794, 1, 0, 0, 0, 1792, 1790, 1, 0, 0, 0, 1792, 1793, 1, 0, 0, 0, 1793, 1795, 1, 0, 0, 0, 1794, 1792, 1, 0, 0, 0, 1795, 1797, 5, 46, 0, 0, 1796, 1798, 3, 291, 144, 0, 1797, 1796, 1, 0, 0, 0, 1798, 1799, 1, 0, 0, 0, 1799, 1797, 1, 0, 0, 0, 1799, 1800, 1, 0, 0, 0, 1800, 278, 1, 0, 0, 0, 1801, 1803, 3, 293, 145, 0, 1802, 1801, 1, 0, 0, 0, 1803, 1806, 1, 0, 0, 0, 1804, 1802, 1, 0, 0, 0, 1804, 1805, 1, 0, 0, 0, 1805, 1807, 1, 0, 0, 0, 1806, 1804, 1, 0, 0, 0, 1807, 1809, 5, 46, 0, 0, 1808, 1810, 3, 293, 145, 0, 1809, 1808, 1, 0, 0, 0, 1810, 1811, 1, 0, 0, 0, 1811, 1809, 1, 0, 0, 0, 1811, 1812, 1, 0, 0, 0, 1812, 280, 1, 0, 0, 0, 1813, 1817, 5, 36, 0, 0, 1814, 1816, 3, 295, 146, 0, 1815, 1814, 1, 0, 0, 0, 1816, 1819, 1, 0, 0, 0, 1817, 1815, 1, 0, 0, 0, 1817, 1818, 1, 0, 0, 0, 1818, 1820, 1, 0, 0, 0, 1819, 1817, 1, 0, 0, 0, 1820, 1822, 5, 46, 0, 0, 1821, 1823, 3, 295, 146, 0, 1822, 1821, 1, 0, 0, 0, 1823, 1824, 1, 0, 0, 0, 1824, 1822, 1, 0, 0, 0, 1824, 1825, 1, 0, 0, 0, 1825, 282, 1, 0, 0, 0, 1826, 1830, 3, 287, 142, 0, 1827, 1830, 3, 289, 143, 0, 1828, 1830, 3, 285, 141, 0, 1829, 1826, 1, 0, 0, 0, 1829, 1827, 1, 0, 0, 0, 1829, 1828, 1, 0, 0, 0, 1830, 284, 1, 0, 0, 0, 1831, 1833, 5, 37, 0, 0, 1832, 1834, 3, 291, 144, 0, 1833, 1832, 1, 0, 0, 0, 1834, 1835, 1, 0, 0, 0, 1835, 1833, 1, 0, 0, 0, 1835, 1836, 1, 0, 0, 0, 1836, 286, 1, 0, 0, 0, 1837, 1839, 3, 293, 145, 0, 1838, 1837, 1, 0, 0, 0, 1839, 1840, 1, 0, 0, 0, 1840, 1838, 1, 0, 0, 0, 1840, 1841, 1, 0, 0, 0, 1841, 288, 1, 0, 0, 0, 1842, 1844, 5, 36, 0, 0, 1843, 1845, 3, 295, 146, 0, 1844, 1843, 1, 0, 0, 0, 1845, 1846, 1, 0, 0, 0, 1846, 1844, 1, 0, 0, 0, 1846, 1847, 1, 0, 0, 0, 1847, 290, 1, 0, 0, 0, 1848, 1849, 7, 4, 0, 0, 1849, 292, 1, 0, 0, 0, 1850, 1851, 7, 5, 0, 0, 1851, 294, 1, 0, 0, 0, 1852, 1853, 7, 6, 0, 0, 1853, 296, 1, 0, 0, 0, 1854, 1858, 5, 39, 0, 0, 1855, 1856, 5, 92, 0, 0, 1856, 1859, 7, 18, 0, 0, 1857, 1859, 8, 15, 0, 0, 1858, 1855, 1, 0, 0, 0, 1858, 1857, 1, 0, 0, 0, 1859, 1860, 1, 0, 0, 0, 1860, 1861, 5, 39, 0, 0, 1861, 298, 1, 0, 0, 0, 1862, 1864, 3, 301, 149, 0, 1863, 1865, 7, 19, 0, 0, 1864, 1863, 1, 0, 0, 0, 1865, 1866, 1, 0, 0, 0, 1866, 1864, 1, 0, 0, 0, 1866, 1867, 1, 0, 0, 0, 1867, 300, 1, 0, 0, 0, 1868, 1872, 5, 33, 0, 0, 1869, 1871, 3, 307, 152, 0, 1870, 1869, 1, 0, 0, 0, 1871, 1874, 1, 0, 0, 0, 1872, 1870, 1, 0, 0, 0, 1872, 1873, 1, 0, 0, 0, 1873, 302, 1, 0, 0, 0, 1874, 1872, 1, 0, 0, 0, 1875, 1879, 3, 305, 151, 0, 1876, 1878, 3, 307, 152, 0, 1877, 1876, 1, 0, 0, 0, 1878, 1881, 1, 0, 0, 0, 1879, 1877, 1, 0, 0, 0, 1879, 1880, 1, 0, 0, 0, 1880, 304, 1, 0, 0, 0, 1881, 1879, 1, 0, 0, 0, 1882, 1883, 7, 7, 0, 0, 1883, 306, 1, 0, 0, 0, 1884, 1885, 7, 8, 0, 0, 1885, 308, 1, 0, 0, 0, 1886, 1887, 5, 64, 0, 0, 1887, 1888, 3, 303, 150, 0, 1888, 310, 1, 0, 0, 0, 1889, 1891, 7, 16, 0, 0, 1890, 1889, 1, 0, 0, 0, 1891, 1892, 1, 0, 0, 0, 1892, 1890, 1, 0, 0, 0, 1892, 1893, 1, 0, 0, 0, 1893, 1894, 1, 0, 0, 0, 1894, 1895, 6, 154, 5, 0, 1895, 312, 1, 0, 0, 0, 1896, 1897, 5, 47, 0, 0, 1897, 1898, 5, 47, 0, 0, 1898, 1902, 1, 0, 0, 0, 1899, 1901, 8, 17, 0, 0, 1900, 1899, 1, 0, 0, 0, 1901, 1904, 1, 0, 0, 0, 1902, 1900, 1, 0, 0, 0, 1902, 1903, 1, 0, 0, 0, 1903, 1905, 1, 0, 0, 0, 1904, 1902, 1, 0, 0, 0, 1905, 1906, 6, 155, 6, 0, 1906, 314, 1, 0, 0, 0, 1907, 1908, 5, 47, 0, 0, 1908, 1909, 5, 42, 0, 0, 1909, 1913, 1, 0, 0, 0, 1910, 1912, 9, 0, 0, 0, 1911, 1910, 1, 0, 0, 0, 1912, 1915, 1, 0, 0, 0, 1913, 1914, 1, 0, 0, 0, 1913, 1911, 1, 0, 0, 0, 1914, 1916, 1, 0, 0, 0, 1915, 1913, 1, 0, 0, 0, 1916, 1917, 5, 42, 0, 0, 1917, 1918, 5, 47, 0, 0, 1918, 1919, 1, 0, 0, 0, 1919, 1920, 6, 156, 6, 0, 1920, 316, 1, 0, 0, 0, 1921, 1923, 5, 60, 0, 0, 1922, 1924, 7, 20, 0, 0, 1923, 1922, 1, 0, 0, 0, 1924, 1925, 1, 0, 0, 0, 1925, 1923, 1, 0, 0, 0, 1925, 1926, 1, 0, 0, 0, 1926, 1927, 1, 0, 0, 0, 1927, 1928, 5, 62, 0, 0, 1928, 1929, 6, 157, 9, 0, 1929, 318, 1, 0, 0, 0, 1930, 1936, 5, 34, 0, 0, 1931, 1932, 5, 92, 0, 0, 1932, 1935, 5, 34, 0, 0, 1933, 1935, 8, 9, 0, 0, 1934, 1931, 1, 0, 0, 0, 1934, 1933, 1, 0, 0, 0, 1935, 1938, 1, 0, 0, 0, 1936, 1934, 1, 0, 0, 0, 1936, 1937, 1, 0, 0, 0, 1937, 1939, 1, 0, 0, 0, 1938, 1936, 1, 0, 0, 0, 1939, 1940, 5, 34, 0, 0, 1940, 1941, 6, 158, 10, 0, 1941, 320, 1, 0, 0, 0, 1942, 1944, 7, 16, 0, 0, 1943, 1942, 1, 0, 0, 0, 1944, 1945, 1, 0, 0, 0, 1945, 1943, 1, 0, 0, 0, 1945, 1946, 1, 0, 0, 0, 1946, 1947, 1, 0, 0, 0, 1947, 1948, 6, 159, 5, 0, 1948, 322, 1, 0, 0, 0, 1949, 1950, 5, 47, 0, 0, 1950, 1951, 5, 47, 0, 0, 1951, 1955, 1, 0, 0, 0, 1952, 1954, 8, 17, 0, 0, 1953, 1952, 1, 0, 0, 0, 1954, 1957, 1, 0, 0, 0, 1955, 1953, 1, 0, 0, 0, 1955, 1956, 1, 0, 0, 0, 1956, 1958, 1, 0, 0, 0, 1957, 1955, 1, 0, 0, 0, 1958, 1959, 6, 160, 6, 0, 1959, 324, 1, 0, 0, 0, 1960, 1961, 5, 47, 0, 0, 1961, 1962, 5, 42, 0, 0, 1962, 1966, 1, 0, 0, 0, 1963, 1965, 9, 0, 0, 0, 1964, 1963, 1, 0, 0, 0, 1965, 1968, 1, 0, 0, 0, 1966, 1967, 1, 0, 0, 0, 1966, 1964, 1, 0, 0, 0, 1967, 1969, 1, 0, 0, 0, 1968, 1966, 1, 0, 0, 0, 1969, 1970, 5, 42, 0, 0, 1970, 1971, 5, 47, 0, 0, 1971, 1972, 1, 0, 0, 0, 1972, 1973, 6, 161, 6, 0, 1973, 326, 1, 0, 0, 0, 67, 0, 1, 2, 436, 627, 804, 815, 823, 871, 933, 938, 945, 950, 957, 962, 969, 976, 981, 988, 993, 998, 1005, 1011, 1013, 1018, 1025, 1030, 1042, 1055, 1057, 1062, 1066, 1068, 1071, 1077, 1080, 1085, 1088, 1095, 1105, 1116, 1737, 1781, 1786, 1792, 1799, 1804, 1811, 1817, 1824, 1829, 1835, 1840, 1846, 1858, 1866, 1872, 1879, 1892, 1902, 1913, 1925, 1934, 1936, 1945, 1955, 1966, 11, 1, 0, 0, 1, 66, 1, 1, 80, 2, 1, 81, 3, 1, 107, 4, 0, 1, 0, 0, 2, 0, 1, 133, 5, 1, 134, 6, 1, 157, 7, 1, 158, 8] \ No newline at end of file +[4, 0, 154, 1983, 6, -1, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 439, 8, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 637, 8, 56, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 814, 8, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 3, 79, 825, 8, 79, 1, 80, 1, 80, 1, 80, 1, 80, 5, 80, 831, 8, 80, 10, 80, 12, 80, 834, 9, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 3, 85, 881, 8, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 3, 96, 943, 8, 96, 1, 97, 1, 97, 1, 97, 3, 97, 948, 8, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 3, 98, 955, 8, 98, 1, 98, 5, 98, 958, 8, 98, 10, 98, 12, 98, 961, 9, 98, 1, 98, 1, 98, 4, 98, 965, 8, 98, 11, 98, 12, 98, 966, 1, 99, 5, 99, 970, 8, 99, 10, 99, 12, 99, 973, 9, 99, 1, 99, 1, 99, 4, 99, 977, 8, 99, 11, 99, 12, 99, 978, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 3, 100, 986, 8, 100, 1, 100, 5, 100, 989, 8, 100, 10, 100, 12, 100, 992, 9, 100, 1, 100, 1, 100, 4, 100, 996, 8, 100, 11, 100, 12, 100, 997, 1, 101, 1, 101, 1, 101, 3, 101, 1003, 8, 101, 1, 101, 1, 101, 1, 101, 3, 101, 1008, 8, 101, 1, 102, 1, 102, 1, 102, 4, 102, 1013, 8, 102, 11, 102, 12, 102, 1014, 1, 102, 1, 102, 4, 102, 1019, 8, 102, 11, 102, 12, 102, 1020, 3, 102, 1023, 8, 102, 1, 103, 4, 103, 1026, 8, 103, 11, 103, 12, 103, 1027, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 3, 104, 1035, 8, 104, 1, 104, 4, 104, 1038, 8, 104, 11, 104, 12, 104, 1039, 1, 105, 1, 105, 1, 106, 1, 106, 1, 107, 1, 107, 1, 108, 1, 108, 5, 108, 1050, 8, 108, 10, 108, 12, 108, 1053, 9, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 5, 111, 1065, 8, 111, 10, 111, 12, 111, 1068, 9, 111, 1, 111, 1, 111, 3, 111, 1072, 8, 111, 1, 111, 1, 111, 3, 111, 1076, 8, 111, 3, 111, 1078, 8, 111, 1, 111, 3, 111, 1081, 8, 111, 1, 112, 1, 112, 1, 112, 1, 112, 3, 112, 1087, 8, 112, 1, 112, 3, 112, 1090, 8, 112, 1, 112, 1, 112, 1, 112, 3, 112, 1095, 8, 112, 1, 112, 3, 112, 1098, 8, 112, 1, 112, 1, 112, 1, 113, 4, 113, 1103, 8, 113, 11, 113, 12, 113, 1104, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 5, 114, 1113, 8, 114, 10, 114, 12, 114, 1116, 9, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 5, 115, 1124, 8, 115, 10, 115, 12, 115, 1127, 9, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 3, 117, 1747, 8, 117, 1, 118, 1, 118, 1, 119, 1, 119, 1, 120, 1, 120, 1, 121, 1, 121, 1, 122, 1, 122, 1, 123, 1, 123, 1, 124, 1, 124, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 129, 1, 129, 1, 130, 1, 130, 1, 131, 1, 131, 1, 132, 1, 132, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 3, 136, 1791, 8, 136, 1, 137, 1, 137, 1, 137, 3, 137, 1796, 8, 137, 1, 138, 1, 138, 5, 138, 1800, 8, 138, 10, 138, 12, 138, 1803, 9, 138, 1, 138, 1, 138, 4, 138, 1807, 8, 138, 11, 138, 12, 138, 1808, 1, 139, 5, 139, 1812, 8, 139, 10, 139, 12, 139, 1815, 9, 139, 1, 139, 1, 139, 4, 139, 1819, 8, 139, 11, 139, 12, 139, 1820, 1, 140, 1, 140, 5, 140, 1825, 8, 140, 10, 140, 12, 140, 1828, 9, 140, 1, 140, 1, 140, 4, 140, 1832, 8, 140, 11, 140, 12, 140, 1833, 1, 141, 1, 141, 1, 141, 3, 141, 1839, 8, 141, 1, 142, 1, 142, 4, 142, 1843, 8, 142, 11, 142, 12, 142, 1844, 1, 143, 4, 143, 1848, 8, 143, 11, 143, 12, 143, 1849, 1, 144, 1, 144, 4, 144, 1854, 8, 144, 11, 144, 12, 144, 1855, 1, 145, 1, 145, 1, 146, 1, 146, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 3, 148, 1868, 8, 148, 1, 148, 1, 148, 1, 149, 1, 149, 4, 149, 1874, 8, 149, 11, 149, 12, 149, 1875, 1, 150, 1, 150, 5, 150, 1880, 8, 150, 10, 150, 12, 150, 1883, 9, 150, 1, 151, 1, 151, 5, 151, 1887, 8, 151, 10, 151, 12, 151, 1890, 9, 151, 1, 152, 1, 152, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 155, 4, 155, 1900, 8, 155, 11, 155, 12, 155, 1901, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 5, 156, 1910, 8, 156, 10, 156, 12, 156, 1913, 9, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 5, 157, 1921, 8, 157, 10, 157, 12, 157, 1924, 9, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 4, 158, 1933, 8, 158, 11, 158, 12, 158, 1934, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 5, 159, 1944, 8, 159, 10, 159, 12, 159, 1947, 9, 159, 1, 159, 1, 159, 1, 159, 1, 160, 4, 160, 1953, 8, 160, 11, 160, 12, 160, 1954, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 5, 161, 1963, 8, 161, 10, 161, 12, 161, 1966, 9, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 5, 162, 1974, 8, 162, 10, 162, 12, 162, 1977, 9, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 4, 832, 1125, 1922, 1975, 0, 163, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 0, 215, 0, 217, 0, 219, 107, 221, 0, 223, 0, 225, 108, 227, 109, 229, 110, 231, 111, 233, 112, 235, 113, 237, 114, 239, 115, 241, 116, 243, 117, 245, 118, 247, 119, 249, 120, 251, 121, 253, 122, 255, 123, 257, 124, 259, 125, 261, 126, 263, 127, 265, 128, 267, 129, 269, 130, 271, 131, 273, 132, 275, 133, 277, 134, 279, 135, 281, 136, 283, 137, 285, 138, 287, 139, 289, 140, 291, 141, 293, 0, 295, 0, 297, 0, 299, 142, 301, 143, 303, 144, 305, 145, 307, 0, 309, 0, 311, 146, 313, 147, 315, 148, 317, 149, 319, 150, 321, 151, 323, 152, 325, 153, 327, 154, 3, 0, 1, 2, 21, 4, 0, 83, 83, 85, 85, 115, 115, 117, 117, 10, 0, 66, 68, 73, 73, 76, 76, 83, 83, 87, 87, 98, 100, 105, 105, 108, 108, 115, 115, 119, 119, 4, 0, 76, 76, 85, 85, 108, 108, 117, 117, 2, 0, 66, 66, 98, 98, 1, 0, 48, 49, 1, 0, 48, 57, 3, 0, 48, 57, 65, 70, 97, 102, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 1, 0, 34, 34, 1, 0, 122, 122, 3, 0, 97, 97, 112, 112, 115, 115, 3, 0, 97, 97, 109, 109, 115, 117, 7, 0, 34, 34, 39, 39, 48, 57, 92, 92, 102, 102, 110, 110, 114, 114, 2, 0, 48, 57, 97, 102, 1, 0, 39, 39, 4, 0, 9, 10, 13, 13, 32, 32, 160, 160, 2, 0, 10, 10, 13, 13, 5, 0, 34, 34, 39, 39, 102, 102, 110, 110, 114, 114, 2, 0, 43, 43, 45, 45, 5, 0, 45, 57, 65, 90, 92, 92, 95, 95, 97, 122, 2244, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 1, 235, 1, 0, 0, 0, 1, 237, 1, 0, 0, 0, 1, 239, 1, 0, 0, 0, 1, 241, 1, 0, 0, 0, 1, 243, 1, 0, 0, 0, 1, 245, 1, 0, 0, 0, 1, 247, 1, 0, 0, 0, 1, 249, 1, 0, 0, 0, 1, 251, 1, 0, 0, 0, 1, 253, 1, 0, 0, 0, 1, 255, 1, 0, 0, 0, 1, 257, 1, 0, 0, 0, 1, 259, 1, 0, 0, 0, 1, 261, 1, 0, 0, 0, 1, 263, 1, 0, 0, 0, 1, 265, 1, 0, 0, 0, 1, 267, 1, 0, 0, 0, 1, 269, 1, 0, 0, 0, 1, 271, 1, 0, 0, 0, 1, 273, 1, 0, 0, 0, 1, 275, 1, 0, 0, 0, 1, 277, 1, 0, 0, 0, 1, 279, 1, 0, 0, 0, 1, 281, 1, 0, 0, 0, 1, 283, 1, 0, 0, 0, 1, 285, 1, 0, 0, 0, 1, 287, 1, 0, 0, 0, 1, 289, 1, 0, 0, 0, 1, 291, 1, 0, 0, 0, 1, 299, 1, 0, 0, 0, 1, 301, 1, 0, 0, 0, 1, 303, 1, 0, 0, 0, 1, 305, 1, 0, 0, 0, 1, 311, 1, 0, 0, 0, 1, 313, 1, 0, 0, 0, 1, 315, 1, 0, 0, 0, 1, 317, 1, 0, 0, 0, 2, 319, 1, 0, 0, 0, 2, 321, 1, 0, 0, 0, 2, 323, 1, 0, 0, 0, 2, 325, 1, 0, 0, 0, 2, 327, 1, 0, 0, 0, 3, 329, 1, 0, 0, 0, 5, 332, 1, 0, 0, 0, 7, 334, 1, 0, 0, 0, 9, 336, 1, 0, 0, 0, 11, 338, 1, 0, 0, 0, 13, 340, 1, 0, 0, 0, 15, 342, 1, 0, 0, 0, 17, 344, 1, 0, 0, 0, 19, 346, 1, 0, 0, 0, 21, 348, 1, 0, 0, 0, 23, 351, 1, 0, 0, 0, 25, 355, 1, 0, 0, 0, 27, 357, 1, 0, 0, 0, 29, 359, 1, 0, 0, 0, 31, 362, 1, 0, 0, 0, 33, 364, 1, 0, 0, 0, 35, 366, 1, 0, 0, 0, 37, 368, 1, 0, 0, 0, 39, 370, 1, 0, 0, 0, 41, 372, 1, 0, 0, 0, 43, 375, 1, 0, 0, 0, 45, 378, 1, 0, 0, 0, 47, 380, 1, 0, 0, 0, 49, 382, 1, 0, 0, 0, 51, 384, 1, 0, 0, 0, 53, 386, 1, 0, 0, 0, 55, 389, 1, 0, 0, 0, 57, 392, 1, 0, 0, 0, 59, 395, 1, 0, 0, 0, 61, 398, 1, 0, 0, 0, 63, 400, 1, 0, 0, 0, 65, 403, 1, 0, 0, 0, 67, 406, 1, 0, 0, 0, 69, 408, 1, 0, 0, 0, 71, 411, 1, 0, 0, 0, 73, 414, 1, 0, 0, 0, 75, 438, 1, 0, 0, 0, 77, 440, 1, 0, 0, 0, 79, 448, 1, 0, 0, 0, 81, 454, 1, 0, 0, 0, 83, 461, 1, 0, 0, 0, 85, 470, 1, 0, 0, 0, 87, 478, 1, 0, 0, 0, 89, 485, 1, 0, 0, 0, 91, 494, 1, 0, 0, 0, 93, 501, 1, 0, 0, 0, 95, 513, 1, 0, 0, 0, 97, 522, 1, 0, 0, 0, 99, 535, 1, 0, 0, 0, 101, 545, 1, 0, 0, 0, 103, 550, 1, 0, 0, 0, 105, 556, 1, 0, 0, 0, 107, 562, 1, 0, 0, 0, 109, 569, 1, 0, 0, 0, 111, 575, 1, 0, 0, 0, 113, 580, 1, 0, 0, 0, 115, 636, 1, 0, 0, 0, 117, 638, 1, 0, 0, 0, 119, 641, 1, 0, 0, 0, 121, 646, 1, 0, 0, 0, 123, 652, 1, 0, 0, 0, 125, 655, 1, 0, 0, 0, 127, 659, 1, 0, 0, 0, 129, 666, 1, 0, 0, 0, 131, 673, 1, 0, 0, 0, 133, 679, 1, 0, 0, 0, 135, 688, 1, 0, 0, 0, 137, 693, 1, 0, 0, 0, 139, 699, 1, 0, 0, 0, 141, 707, 1, 0, 0, 0, 143, 712, 1, 0, 0, 0, 145, 719, 1, 0, 0, 0, 147, 725, 1, 0, 0, 0, 149, 730, 1, 0, 0, 0, 151, 737, 1, 0, 0, 0, 153, 744, 1, 0, 0, 0, 155, 752, 1, 0, 0, 0, 157, 760, 1, 0, 0, 0, 159, 813, 1, 0, 0, 0, 161, 824, 1, 0, 0, 0, 163, 826, 1, 0, 0, 0, 165, 838, 1, 0, 0, 0, 167, 848, 1, 0, 0, 0, 169, 859, 1, 0, 0, 0, 171, 867, 1, 0, 0, 0, 173, 880, 1, 0, 0, 0, 175, 882, 1, 0, 0, 0, 177, 889, 1, 0, 0, 0, 179, 896, 1, 0, 0, 0, 181, 904, 1, 0, 0, 0, 183, 908, 1, 0, 0, 0, 185, 914, 1, 0, 0, 0, 187, 920, 1, 0, 0, 0, 189, 927, 1, 0, 0, 0, 191, 934, 1, 0, 0, 0, 193, 937, 1, 0, 0, 0, 195, 942, 1, 0, 0, 0, 197, 947, 1, 0, 0, 0, 199, 954, 1, 0, 0, 0, 201, 971, 1, 0, 0, 0, 203, 985, 1, 0, 0, 0, 205, 1002, 1, 0, 0, 0, 207, 1022, 1, 0, 0, 0, 209, 1025, 1, 0, 0, 0, 211, 1034, 1, 0, 0, 0, 213, 1041, 1, 0, 0, 0, 215, 1043, 1, 0, 0, 0, 217, 1045, 1, 0, 0, 0, 219, 1047, 1, 0, 0, 0, 221, 1056, 1, 0, 0, 0, 223, 1058, 1, 0, 0, 0, 225, 1060, 1, 0, 0, 0, 227, 1082, 1, 0, 0, 0, 229, 1102, 1, 0, 0, 0, 231, 1108, 1, 0, 0, 0, 233, 1119, 1, 0, 0, 0, 235, 1133, 1, 0, 0, 0, 237, 1746, 1, 0, 0, 0, 239, 1748, 1, 0, 0, 0, 241, 1750, 1, 0, 0, 0, 243, 1752, 1, 0, 0, 0, 245, 1754, 1, 0, 0, 0, 247, 1756, 1, 0, 0, 0, 249, 1758, 1, 0, 0, 0, 251, 1760, 1, 0, 0, 0, 253, 1762, 1, 0, 0, 0, 255, 1764, 1, 0, 0, 0, 257, 1767, 1, 0, 0, 0, 259, 1770, 1, 0, 0, 0, 261, 1772, 1, 0, 0, 0, 263, 1774, 1, 0, 0, 0, 265, 1776, 1, 0, 0, 0, 267, 1778, 1, 0, 0, 0, 269, 1780, 1, 0, 0, 0, 271, 1782, 1, 0, 0, 0, 273, 1785, 1, 0, 0, 0, 275, 1790, 1, 0, 0, 0, 277, 1795, 1, 0, 0, 0, 279, 1797, 1, 0, 0, 0, 281, 1813, 1, 0, 0, 0, 283, 1822, 1, 0, 0, 0, 285, 1838, 1, 0, 0, 0, 287, 1840, 1, 0, 0, 0, 289, 1847, 1, 0, 0, 0, 291, 1851, 1, 0, 0, 0, 293, 1857, 1, 0, 0, 0, 295, 1859, 1, 0, 0, 0, 297, 1861, 1, 0, 0, 0, 299, 1863, 1, 0, 0, 0, 301, 1871, 1, 0, 0, 0, 303, 1877, 1, 0, 0, 0, 305, 1884, 1, 0, 0, 0, 307, 1891, 1, 0, 0, 0, 309, 1893, 1, 0, 0, 0, 311, 1895, 1, 0, 0, 0, 313, 1899, 1, 0, 0, 0, 315, 1905, 1, 0, 0, 0, 317, 1916, 1, 0, 0, 0, 319, 1930, 1, 0, 0, 0, 321, 1939, 1, 0, 0, 0, 323, 1952, 1, 0, 0, 0, 325, 1958, 1, 0, 0, 0, 327, 1969, 1, 0, 0, 0, 329, 330, 5, 123, 0, 0, 330, 331, 6, 0, 0, 0, 331, 4, 1, 0, 0, 0, 332, 333, 5, 125, 0, 0, 333, 6, 1, 0, 0, 0, 334, 335, 5, 91, 0, 0, 335, 8, 1, 0, 0, 0, 336, 337, 5, 93, 0, 0, 337, 10, 1, 0, 0, 0, 338, 339, 5, 40, 0, 0, 339, 12, 1, 0, 0, 0, 340, 341, 5, 41, 0, 0, 341, 14, 1, 0, 0, 0, 342, 343, 5, 59, 0, 0, 343, 16, 1, 0, 0, 0, 344, 345, 5, 58, 0, 0, 345, 18, 1, 0, 0, 0, 346, 347, 5, 44, 0, 0, 347, 20, 1, 0, 0, 0, 348, 349, 5, 46, 0, 0, 349, 350, 5, 46, 0, 0, 350, 22, 1, 0, 0, 0, 351, 352, 5, 46, 0, 0, 352, 353, 5, 46, 0, 0, 353, 354, 5, 46, 0, 0, 354, 24, 1, 0, 0, 0, 355, 356, 5, 63, 0, 0, 356, 26, 1, 0, 0, 0, 357, 358, 5, 46, 0, 0, 358, 28, 1, 0, 0, 0, 359, 360, 5, 45, 0, 0, 360, 361, 5, 62, 0, 0, 361, 30, 1, 0, 0, 0, 362, 363, 5, 43, 0, 0, 363, 32, 1, 0, 0, 0, 364, 365, 5, 45, 0, 0, 365, 34, 1, 0, 0, 0, 366, 367, 5, 42, 0, 0, 367, 36, 1, 0, 0, 0, 368, 369, 5, 47, 0, 0, 369, 38, 1, 0, 0, 0, 370, 371, 5, 37, 0, 0, 371, 40, 1, 0, 0, 0, 372, 373, 5, 43, 0, 0, 373, 374, 5, 43, 0, 0, 374, 42, 1, 0, 0, 0, 375, 376, 5, 45, 0, 0, 376, 377, 5, 45, 0, 0, 377, 44, 1, 0, 0, 0, 378, 379, 5, 38, 0, 0, 379, 46, 1, 0, 0, 0, 380, 381, 5, 126, 0, 0, 381, 48, 1, 0, 0, 0, 382, 383, 5, 94, 0, 0, 383, 50, 1, 0, 0, 0, 384, 385, 5, 124, 0, 0, 385, 52, 1, 0, 0, 0, 386, 387, 5, 60, 0, 0, 387, 388, 5, 60, 0, 0, 388, 54, 1, 0, 0, 0, 389, 390, 5, 62, 0, 0, 390, 391, 5, 62, 0, 0, 391, 56, 1, 0, 0, 0, 392, 393, 5, 61, 0, 0, 393, 394, 5, 61, 0, 0, 394, 58, 1, 0, 0, 0, 395, 396, 5, 33, 0, 0, 396, 397, 5, 61, 0, 0, 397, 60, 1, 0, 0, 0, 398, 399, 5, 60, 0, 0, 399, 62, 1, 0, 0, 0, 400, 401, 5, 60, 0, 0, 401, 402, 5, 61, 0, 0, 402, 64, 1, 0, 0, 0, 403, 404, 5, 62, 0, 0, 404, 405, 5, 61, 0, 0, 405, 66, 1, 0, 0, 0, 406, 407, 5, 62, 0, 0, 407, 68, 1, 0, 0, 0, 408, 409, 5, 38, 0, 0, 409, 410, 5, 38, 0, 0, 410, 70, 1, 0, 0, 0, 411, 412, 5, 124, 0, 0, 412, 413, 5, 124, 0, 0, 413, 72, 1, 0, 0, 0, 414, 415, 5, 61, 0, 0, 415, 74, 1, 0, 0, 0, 416, 417, 5, 43, 0, 0, 417, 439, 5, 61, 0, 0, 418, 419, 5, 45, 0, 0, 419, 439, 5, 61, 0, 0, 420, 421, 5, 42, 0, 0, 421, 439, 5, 61, 0, 0, 422, 423, 5, 47, 0, 0, 423, 439, 5, 61, 0, 0, 424, 425, 5, 37, 0, 0, 425, 439, 5, 61, 0, 0, 426, 427, 5, 60, 0, 0, 427, 428, 5, 60, 0, 0, 428, 439, 5, 61, 0, 0, 429, 430, 5, 62, 0, 0, 430, 431, 5, 62, 0, 0, 431, 439, 5, 61, 0, 0, 432, 433, 5, 38, 0, 0, 433, 439, 5, 61, 0, 0, 434, 435, 5, 124, 0, 0, 435, 439, 5, 61, 0, 0, 436, 437, 5, 94, 0, 0, 437, 439, 5, 61, 0, 0, 438, 416, 1, 0, 0, 0, 438, 418, 1, 0, 0, 0, 438, 420, 1, 0, 0, 0, 438, 422, 1, 0, 0, 0, 438, 424, 1, 0, 0, 0, 438, 426, 1, 0, 0, 0, 438, 429, 1, 0, 0, 0, 438, 432, 1, 0, 0, 0, 438, 434, 1, 0, 0, 0, 438, 436, 1, 0, 0, 0, 439, 76, 1, 0, 0, 0, 440, 441, 5, 116, 0, 0, 441, 442, 5, 121, 0, 0, 442, 443, 5, 112, 0, 0, 443, 444, 5, 101, 0, 0, 444, 445, 5, 100, 0, 0, 445, 446, 5, 101, 0, 0, 446, 447, 5, 102, 0, 0, 447, 78, 1, 0, 0, 0, 448, 449, 5, 99, 0, 0, 449, 450, 5, 111, 0, 0, 450, 451, 5, 110, 0, 0, 451, 452, 5, 115, 0, 0, 452, 453, 5, 116, 0, 0, 453, 80, 1, 0, 0, 0, 454, 455, 5, 101, 0, 0, 455, 456, 5, 120, 0, 0, 456, 457, 5, 116, 0, 0, 457, 458, 5, 101, 0, 0, 458, 459, 5, 114, 0, 0, 459, 460, 5, 110, 0, 0, 460, 82, 1, 0, 0, 0, 461, 462, 5, 95, 0, 0, 462, 463, 5, 95, 0, 0, 463, 464, 5, 101, 0, 0, 464, 465, 5, 120, 0, 0, 465, 466, 5, 112, 0, 0, 466, 467, 5, 111, 0, 0, 467, 468, 5, 114, 0, 0, 468, 469, 5, 116, 0, 0, 469, 84, 1, 0, 0, 0, 470, 471, 5, 95, 0, 0, 471, 472, 5, 95, 0, 0, 472, 473, 5, 97, 0, 0, 473, 474, 5, 108, 0, 0, 474, 475, 5, 105, 0, 0, 475, 476, 5, 103, 0, 0, 476, 477, 5, 110, 0, 0, 477, 86, 1, 0, 0, 0, 478, 479, 5, 105, 0, 0, 479, 480, 5, 110, 0, 0, 480, 481, 5, 108, 0, 0, 481, 482, 5, 105, 0, 0, 482, 483, 5, 110, 0, 0, 483, 484, 5, 101, 0, 0, 484, 88, 1, 0, 0, 0, 485, 486, 5, 118, 0, 0, 486, 487, 5, 111, 0, 0, 487, 488, 5, 108, 0, 0, 488, 489, 5, 97, 0, 0, 489, 490, 5, 116, 0, 0, 490, 491, 5, 105, 0, 0, 491, 492, 5, 108, 0, 0, 492, 493, 5, 101, 0, 0, 493, 90, 1, 0, 0, 0, 494, 495, 5, 115, 0, 0, 495, 496, 5, 116, 0, 0, 496, 497, 5, 97, 0, 0, 497, 498, 5, 116, 0, 0, 498, 499, 5, 105, 0, 0, 499, 500, 5, 99, 0, 0, 500, 92, 1, 0, 0, 0, 501, 502, 5, 95, 0, 0, 502, 503, 5, 95, 0, 0, 503, 504, 5, 105, 0, 0, 504, 505, 5, 110, 0, 0, 505, 506, 5, 116, 0, 0, 506, 507, 5, 101, 0, 0, 507, 508, 5, 114, 0, 0, 508, 509, 5, 114, 0, 0, 509, 510, 5, 117, 0, 0, 510, 511, 5, 112, 0, 0, 511, 512, 5, 116, 0, 0, 512, 94, 1, 0, 0, 0, 513, 514, 5, 114, 0, 0, 514, 515, 5, 101, 0, 0, 515, 516, 5, 103, 0, 0, 516, 517, 5, 105, 0, 0, 517, 518, 5, 115, 0, 0, 518, 519, 5, 116, 0, 0, 519, 520, 5, 101, 0, 0, 520, 521, 5, 114, 0, 0, 521, 96, 1, 0, 0, 0, 522, 523, 5, 95, 0, 0, 523, 524, 5, 95, 0, 0, 524, 525, 5, 122, 0, 0, 525, 526, 5, 112, 0, 0, 526, 527, 5, 95, 0, 0, 527, 528, 5, 114, 0, 0, 528, 529, 5, 101, 0, 0, 529, 530, 5, 115, 0, 0, 530, 531, 5, 101, 0, 0, 531, 532, 5, 114, 0, 0, 532, 533, 5, 118, 0, 0, 533, 534, 5, 101, 0, 0, 534, 98, 1, 0, 0, 0, 535, 536, 5, 95, 0, 0, 536, 537, 5, 95, 0, 0, 537, 538, 5, 97, 0, 0, 538, 539, 5, 100, 0, 0, 539, 540, 5, 100, 0, 0, 540, 541, 5, 114, 0, 0, 541, 542, 5, 101, 0, 0, 542, 543, 5, 115, 0, 0, 543, 544, 5, 115, 0, 0, 544, 100, 1, 0, 0, 0, 545, 546, 5, 95, 0, 0, 546, 547, 5, 95, 0, 0, 547, 548, 5, 122, 0, 0, 548, 549, 5, 112, 0, 0, 549, 102, 1, 0, 0, 0, 550, 551, 5, 95, 0, 0, 551, 552, 5, 95, 0, 0, 552, 553, 5, 109, 0, 0, 553, 554, 5, 101, 0, 0, 554, 555, 5, 109, 0, 0, 555, 104, 1, 0, 0, 0, 556, 557, 5, 95, 0, 0, 557, 558, 5, 95, 0, 0, 558, 559, 5, 102, 0, 0, 559, 560, 5, 97, 0, 0, 560, 561, 5, 114, 0, 0, 561, 106, 1, 0, 0, 0, 562, 563, 5, 95, 0, 0, 563, 564, 5, 95, 0, 0, 564, 565, 5, 110, 0, 0, 565, 566, 5, 101, 0, 0, 566, 567, 5, 97, 0, 0, 567, 568, 5, 114, 0, 0, 568, 108, 1, 0, 0, 0, 569, 570, 5, 95, 0, 0, 570, 571, 5, 95, 0, 0, 571, 572, 5, 115, 0, 0, 572, 573, 5, 115, 0, 0, 573, 574, 5, 97, 0, 0, 574, 110, 1, 0, 0, 0, 575, 576, 5, 95, 0, 0, 576, 577, 5, 95, 0, 0, 577, 578, 5, 109, 0, 0, 578, 579, 5, 97, 0, 0, 579, 112, 1, 0, 0, 0, 580, 581, 5, 95, 0, 0, 581, 582, 5, 95, 0, 0, 582, 583, 5, 105, 0, 0, 583, 584, 5, 110, 0, 0, 584, 585, 5, 116, 0, 0, 585, 586, 5, 114, 0, 0, 586, 587, 5, 105, 0, 0, 587, 588, 5, 110, 0, 0, 588, 589, 5, 115, 0, 0, 589, 590, 5, 105, 0, 0, 590, 591, 5, 99, 0, 0, 591, 114, 1, 0, 0, 0, 592, 593, 5, 95, 0, 0, 593, 594, 5, 95, 0, 0, 594, 595, 5, 115, 0, 0, 595, 596, 5, 116, 0, 0, 596, 597, 5, 97, 0, 0, 597, 598, 5, 99, 0, 0, 598, 599, 5, 107, 0, 0, 599, 600, 5, 99, 0, 0, 600, 601, 5, 97, 0, 0, 601, 602, 5, 108, 0, 0, 602, 637, 5, 108, 0, 0, 603, 604, 5, 95, 0, 0, 604, 605, 5, 95, 0, 0, 605, 606, 5, 112, 0, 0, 606, 607, 5, 104, 0, 0, 607, 608, 5, 105, 0, 0, 608, 609, 5, 99, 0, 0, 609, 610, 5, 97, 0, 0, 610, 611, 5, 108, 0, 0, 611, 637, 5, 108, 0, 0, 612, 613, 5, 95, 0, 0, 613, 614, 5, 95, 0, 0, 614, 615, 5, 118, 0, 0, 615, 616, 5, 97, 0, 0, 616, 617, 5, 114, 0, 0, 617, 618, 5, 99, 0, 0, 618, 619, 5, 97, 0, 0, 619, 620, 5, 108, 0, 0, 620, 637, 5, 108, 0, 0, 621, 622, 5, 95, 0, 0, 622, 623, 5, 95, 0, 0, 623, 624, 5, 105, 0, 0, 624, 625, 5, 110, 0, 0, 625, 626, 5, 116, 0, 0, 626, 627, 5, 114, 0, 0, 627, 628, 5, 105, 0, 0, 628, 629, 5, 110, 0, 0, 629, 630, 5, 115, 0, 0, 630, 631, 5, 105, 0, 0, 631, 632, 5, 99, 0, 0, 632, 633, 5, 99, 0, 0, 633, 634, 5, 97, 0, 0, 634, 635, 5, 108, 0, 0, 635, 637, 5, 108, 0, 0, 636, 592, 1, 0, 0, 0, 636, 603, 1, 0, 0, 0, 636, 612, 1, 0, 0, 0, 636, 621, 1, 0, 0, 0, 637, 116, 1, 0, 0, 0, 638, 639, 5, 105, 0, 0, 639, 640, 5, 102, 0, 0, 640, 118, 1, 0, 0, 0, 641, 642, 5, 101, 0, 0, 642, 643, 5, 108, 0, 0, 643, 644, 5, 115, 0, 0, 644, 645, 5, 101, 0, 0, 645, 120, 1, 0, 0, 0, 646, 647, 5, 119, 0, 0, 647, 648, 5, 104, 0, 0, 648, 649, 5, 105, 0, 0, 649, 650, 5, 108, 0, 0, 650, 651, 5, 101, 0, 0, 651, 122, 1, 0, 0, 0, 652, 653, 5, 100, 0, 0, 653, 654, 5, 111, 0, 0, 654, 124, 1, 0, 0, 0, 655, 656, 5, 102, 0, 0, 656, 657, 5, 111, 0, 0, 657, 658, 5, 114, 0, 0, 658, 126, 1, 0, 0, 0, 659, 660, 5, 115, 0, 0, 660, 661, 5, 119, 0, 0, 661, 662, 5, 105, 0, 0, 662, 663, 5, 116, 0, 0, 663, 664, 5, 99, 0, 0, 664, 665, 5, 104, 0, 0, 665, 128, 1, 0, 0, 0, 666, 667, 5, 114, 0, 0, 667, 668, 5, 101, 0, 0, 668, 669, 5, 116, 0, 0, 669, 670, 5, 117, 0, 0, 670, 671, 5, 114, 0, 0, 671, 672, 5, 110, 0, 0, 672, 130, 1, 0, 0, 0, 673, 674, 5, 98, 0, 0, 674, 675, 5, 114, 0, 0, 675, 676, 5, 101, 0, 0, 676, 677, 5, 97, 0, 0, 677, 678, 5, 107, 0, 0, 678, 132, 1, 0, 0, 0, 679, 680, 5, 99, 0, 0, 680, 681, 5, 111, 0, 0, 681, 682, 5, 110, 0, 0, 682, 683, 5, 116, 0, 0, 683, 684, 5, 105, 0, 0, 684, 685, 5, 110, 0, 0, 685, 686, 5, 117, 0, 0, 686, 687, 5, 101, 0, 0, 687, 134, 1, 0, 0, 0, 688, 689, 5, 103, 0, 0, 689, 690, 5, 111, 0, 0, 690, 691, 5, 116, 0, 0, 691, 692, 5, 111, 0, 0, 692, 136, 1, 0, 0, 0, 693, 694, 5, 97, 0, 0, 694, 695, 5, 115, 0, 0, 695, 696, 5, 109, 0, 0, 696, 697, 1, 0, 0, 0, 697, 698, 6, 67, 1, 0, 698, 138, 1, 0, 0, 0, 699, 700, 5, 100, 0, 0, 700, 701, 5, 101, 0, 0, 701, 702, 5, 102, 0, 0, 702, 703, 5, 97, 0, 0, 703, 704, 5, 117, 0, 0, 704, 705, 5, 108, 0, 0, 705, 706, 5, 116, 0, 0, 706, 140, 1, 0, 0, 0, 707, 708, 5, 99, 0, 0, 708, 709, 5, 97, 0, 0, 709, 710, 5, 115, 0, 0, 710, 711, 5, 101, 0, 0, 711, 142, 1, 0, 0, 0, 712, 713, 5, 115, 0, 0, 713, 714, 5, 116, 0, 0, 714, 715, 5, 114, 0, 0, 715, 716, 5, 117, 0, 0, 716, 717, 5, 99, 0, 0, 717, 718, 5, 116, 0, 0, 718, 144, 1, 0, 0, 0, 719, 720, 5, 117, 0, 0, 720, 721, 5, 110, 0, 0, 721, 722, 5, 105, 0, 0, 722, 723, 5, 111, 0, 0, 723, 724, 5, 110, 0, 0, 724, 146, 1, 0, 0, 0, 725, 726, 5, 101, 0, 0, 726, 727, 5, 110, 0, 0, 727, 728, 5, 117, 0, 0, 728, 729, 5, 109, 0, 0, 729, 148, 1, 0, 0, 0, 730, 731, 5, 115, 0, 0, 731, 732, 5, 105, 0, 0, 732, 733, 5, 122, 0, 0, 733, 734, 5, 101, 0, 0, 734, 735, 5, 111, 0, 0, 735, 736, 5, 102, 0, 0, 736, 150, 1, 0, 0, 0, 737, 738, 5, 116, 0, 0, 738, 739, 5, 121, 0, 0, 739, 740, 5, 112, 0, 0, 740, 741, 5, 101, 0, 0, 741, 742, 5, 105, 0, 0, 742, 743, 5, 100, 0, 0, 743, 152, 1, 0, 0, 0, 744, 745, 5, 100, 0, 0, 745, 746, 5, 101, 0, 0, 746, 747, 5, 102, 0, 0, 747, 748, 5, 105, 0, 0, 748, 749, 5, 110, 0, 0, 749, 750, 5, 101, 0, 0, 750, 751, 5, 100, 0, 0, 751, 154, 1, 0, 0, 0, 752, 753, 5, 107, 0, 0, 753, 754, 5, 105, 0, 0, 754, 755, 5, 99, 0, 0, 755, 756, 5, 107, 0, 0, 756, 757, 5, 97, 0, 0, 757, 758, 5, 115, 0, 0, 758, 759, 5, 109, 0, 0, 759, 156, 1, 0, 0, 0, 760, 761, 5, 33, 0, 0, 761, 158, 1, 0, 0, 0, 762, 763, 5, 115, 0, 0, 763, 764, 5, 105, 0, 0, 764, 765, 5, 103, 0, 0, 765, 766, 5, 110, 0, 0, 766, 767, 5, 101, 0, 0, 767, 814, 5, 100, 0, 0, 768, 769, 5, 117, 0, 0, 769, 770, 5, 110, 0, 0, 770, 771, 5, 115, 0, 0, 771, 772, 5, 105, 0, 0, 772, 773, 5, 103, 0, 0, 773, 774, 5, 110, 0, 0, 774, 775, 5, 101, 0, 0, 775, 814, 5, 100, 0, 0, 776, 777, 5, 98, 0, 0, 777, 778, 5, 121, 0, 0, 778, 779, 5, 116, 0, 0, 779, 814, 5, 101, 0, 0, 780, 781, 5, 119, 0, 0, 781, 782, 5, 111, 0, 0, 782, 783, 5, 114, 0, 0, 783, 814, 5, 100, 0, 0, 784, 785, 5, 100, 0, 0, 785, 786, 5, 119, 0, 0, 786, 787, 5, 111, 0, 0, 787, 788, 5, 114, 0, 0, 788, 814, 5, 100, 0, 0, 789, 790, 5, 98, 0, 0, 790, 791, 5, 111, 0, 0, 791, 792, 5, 111, 0, 0, 792, 814, 5, 108, 0, 0, 793, 794, 5, 99, 0, 0, 794, 795, 5, 104, 0, 0, 795, 796, 5, 97, 0, 0, 796, 814, 5, 114, 0, 0, 797, 798, 5, 115, 0, 0, 798, 799, 5, 104, 0, 0, 799, 800, 5, 111, 0, 0, 800, 801, 5, 114, 0, 0, 801, 814, 5, 116, 0, 0, 802, 803, 5, 105, 0, 0, 803, 804, 5, 110, 0, 0, 804, 814, 5, 116, 0, 0, 805, 806, 5, 108, 0, 0, 806, 807, 5, 111, 0, 0, 807, 808, 5, 110, 0, 0, 808, 814, 5, 103, 0, 0, 809, 810, 5, 118, 0, 0, 810, 811, 5, 111, 0, 0, 811, 812, 5, 105, 0, 0, 812, 814, 5, 100, 0, 0, 813, 762, 1, 0, 0, 0, 813, 768, 1, 0, 0, 0, 813, 776, 1, 0, 0, 0, 813, 780, 1, 0, 0, 0, 813, 784, 1, 0, 0, 0, 813, 789, 1, 0, 0, 0, 813, 793, 1, 0, 0, 0, 813, 797, 1, 0, 0, 0, 813, 802, 1, 0, 0, 0, 813, 805, 1, 0, 0, 0, 813, 809, 1, 0, 0, 0, 814, 160, 1, 0, 0, 0, 815, 816, 5, 116, 0, 0, 816, 817, 5, 114, 0, 0, 817, 818, 5, 117, 0, 0, 818, 825, 5, 101, 0, 0, 819, 820, 5, 102, 0, 0, 820, 821, 5, 97, 0, 0, 821, 822, 5, 108, 0, 0, 822, 823, 5, 115, 0, 0, 823, 825, 5, 101, 0, 0, 824, 815, 1, 0, 0, 0, 824, 819, 1, 0, 0, 0, 825, 162, 1, 0, 0, 0, 826, 827, 5, 123, 0, 0, 827, 828, 5, 123, 0, 0, 828, 832, 1, 0, 0, 0, 829, 831, 9, 0, 0, 0, 830, 829, 1, 0, 0, 0, 831, 834, 1, 0, 0, 0, 832, 833, 1, 0, 0, 0, 832, 830, 1, 0, 0, 0, 833, 835, 1, 0, 0, 0, 834, 832, 1, 0, 0, 0, 835, 836, 5, 125, 0, 0, 836, 837, 5, 125, 0, 0, 837, 164, 1, 0, 0, 0, 838, 839, 5, 35, 0, 0, 839, 840, 5, 105, 0, 0, 840, 841, 5, 109, 0, 0, 841, 842, 5, 112, 0, 0, 842, 843, 5, 111, 0, 0, 843, 844, 5, 114, 0, 0, 844, 845, 5, 116, 0, 0, 845, 846, 1, 0, 0, 0, 846, 847, 6, 81, 2, 0, 847, 166, 1, 0, 0, 0, 848, 849, 5, 35, 0, 0, 849, 850, 5, 105, 0, 0, 850, 851, 5, 110, 0, 0, 851, 852, 5, 99, 0, 0, 852, 853, 5, 108, 0, 0, 853, 854, 5, 117, 0, 0, 854, 855, 5, 100, 0, 0, 855, 856, 5, 101, 0, 0, 856, 857, 1, 0, 0, 0, 857, 858, 6, 82, 3, 0, 858, 168, 1, 0, 0, 0, 859, 860, 5, 35, 0, 0, 860, 861, 5, 112, 0, 0, 861, 862, 5, 114, 0, 0, 862, 863, 5, 97, 0, 0, 863, 864, 5, 103, 0, 0, 864, 865, 5, 109, 0, 0, 865, 866, 5, 97, 0, 0, 866, 170, 1, 0, 0, 0, 867, 868, 5, 35, 0, 0, 868, 869, 5, 100, 0, 0, 869, 870, 5, 101, 0, 0, 870, 871, 5, 102, 0, 0, 871, 872, 5, 105, 0, 0, 872, 873, 5, 110, 0, 0, 873, 874, 5, 101, 0, 0, 874, 172, 1, 0, 0, 0, 875, 876, 5, 92, 0, 0, 876, 881, 5, 10, 0, 0, 877, 878, 5, 92, 0, 0, 878, 879, 5, 13, 0, 0, 879, 881, 5, 10, 0, 0, 880, 875, 1, 0, 0, 0, 880, 877, 1, 0, 0, 0, 881, 174, 1, 0, 0, 0, 882, 883, 5, 35, 0, 0, 883, 884, 5, 117, 0, 0, 884, 885, 5, 110, 0, 0, 885, 886, 5, 100, 0, 0, 886, 887, 5, 101, 0, 0, 887, 888, 5, 102, 0, 0, 888, 176, 1, 0, 0, 0, 889, 890, 5, 35, 0, 0, 890, 891, 5, 105, 0, 0, 891, 892, 5, 102, 0, 0, 892, 893, 5, 100, 0, 0, 893, 894, 5, 101, 0, 0, 894, 895, 5, 102, 0, 0, 895, 178, 1, 0, 0, 0, 896, 897, 5, 35, 0, 0, 897, 898, 5, 105, 0, 0, 898, 899, 5, 102, 0, 0, 899, 900, 5, 110, 0, 0, 900, 901, 5, 100, 0, 0, 901, 902, 5, 101, 0, 0, 902, 903, 5, 102, 0, 0, 903, 180, 1, 0, 0, 0, 904, 905, 5, 35, 0, 0, 905, 906, 5, 105, 0, 0, 906, 907, 5, 102, 0, 0, 907, 182, 1, 0, 0, 0, 908, 909, 5, 35, 0, 0, 909, 910, 5, 101, 0, 0, 910, 911, 5, 108, 0, 0, 911, 912, 5, 105, 0, 0, 912, 913, 5, 102, 0, 0, 913, 184, 1, 0, 0, 0, 914, 915, 5, 35, 0, 0, 915, 916, 5, 101, 0, 0, 916, 917, 5, 108, 0, 0, 917, 918, 5, 115, 0, 0, 918, 919, 5, 101, 0, 0, 919, 186, 1, 0, 0, 0, 920, 921, 5, 35, 0, 0, 921, 922, 5, 101, 0, 0, 922, 923, 5, 110, 0, 0, 923, 924, 5, 100, 0, 0, 924, 925, 5, 105, 0, 0, 925, 926, 5, 102, 0, 0, 926, 188, 1, 0, 0, 0, 927, 928, 5, 35, 0, 0, 928, 929, 5, 101, 0, 0, 929, 930, 5, 114, 0, 0, 930, 931, 5, 114, 0, 0, 931, 932, 5, 111, 0, 0, 932, 933, 5, 114, 0, 0, 933, 190, 1, 0, 0, 0, 934, 935, 5, 35, 0, 0, 935, 936, 3, 219, 108, 0, 936, 192, 1, 0, 0, 0, 937, 938, 5, 35, 0, 0, 938, 939, 3, 219, 108, 0, 939, 194, 1, 0, 0, 0, 940, 943, 3, 197, 97, 0, 941, 943, 3, 205, 101, 0, 942, 940, 1, 0, 0, 0, 942, 941, 1, 0, 0, 0, 943, 196, 1, 0, 0, 0, 944, 948, 3, 199, 98, 0, 945, 948, 3, 201, 99, 0, 946, 948, 3, 203, 100, 0, 947, 944, 1, 0, 0, 0, 947, 945, 1, 0, 0, 0, 947, 946, 1, 0, 0, 0, 948, 198, 1, 0, 0, 0, 949, 955, 5, 37, 0, 0, 950, 951, 5, 48, 0, 0, 951, 955, 5, 98, 0, 0, 952, 953, 5, 48, 0, 0, 953, 955, 5, 66, 0, 0, 954, 949, 1, 0, 0, 0, 954, 950, 1, 0, 0, 0, 954, 952, 1, 0, 0, 0, 955, 959, 1, 0, 0, 0, 956, 958, 3, 213, 105, 0, 957, 956, 1, 0, 0, 0, 958, 961, 1, 0, 0, 0, 959, 957, 1, 0, 0, 0, 959, 960, 1, 0, 0, 0, 960, 962, 1, 0, 0, 0, 961, 959, 1, 0, 0, 0, 962, 964, 5, 46, 0, 0, 963, 965, 3, 213, 105, 0, 964, 963, 1, 0, 0, 0, 965, 966, 1, 0, 0, 0, 966, 964, 1, 0, 0, 0, 966, 967, 1, 0, 0, 0, 967, 200, 1, 0, 0, 0, 968, 970, 3, 215, 106, 0, 969, 968, 1, 0, 0, 0, 970, 973, 1, 0, 0, 0, 971, 969, 1, 0, 0, 0, 971, 972, 1, 0, 0, 0, 972, 974, 1, 0, 0, 0, 973, 971, 1, 0, 0, 0, 974, 976, 5, 46, 0, 0, 975, 977, 3, 215, 106, 0, 976, 975, 1, 0, 0, 0, 977, 978, 1, 0, 0, 0, 978, 976, 1, 0, 0, 0, 978, 979, 1, 0, 0, 0, 979, 202, 1, 0, 0, 0, 980, 986, 5, 36, 0, 0, 981, 982, 5, 48, 0, 0, 982, 986, 5, 120, 0, 0, 983, 984, 5, 48, 0, 0, 984, 986, 5, 88, 0, 0, 985, 980, 1, 0, 0, 0, 985, 981, 1, 0, 0, 0, 985, 983, 1, 0, 0, 0, 986, 990, 1, 0, 0, 0, 987, 989, 3, 217, 107, 0, 988, 987, 1, 0, 0, 0, 989, 992, 1, 0, 0, 0, 990, 988, 1, 0, 0, 0, 990, 991, 1, 0, 0, 0, 991, 993, 1, 0, 0, 0, 992, 990, 1, 0, 0, 0, 993, 995, 5, 46, 0, 0, 994, 996, 3, 217, 107, 0, 995, 994, 1, 0, 0, 0, 996, 997, 1, 0, 0, 0, 997, 995, 1, 0, 0, 0, 997, 998, 1, 0, 0, 0, 998, 204, 1, 0, 0, 0, 999, 1003, 3, 209, 103, 0, 1000, 1003, 3, 211, 104, 0, 1001, 1003, 3, 207, 102, 0, 1002, 999, 1, 0, 0, 0, 1002, 1000, 1, 0, 0, 0, 1002, 1001, 1, 0, 0, 0, 1003, 1007, 1, 0, 0, 0, 1004, 1005, 7, 0, 0, 0, 1005, 1008, 7, 1, 0, 0, 1006, 1008, 7, 2, 0, 0, 1007, 1004, 1, 0, 0, 0, 1007, 1006, 1, 0, 0, 0, 1007, 1008, 1, 0, 0, 0, 1008, 206, 1, 0, 0, 0, 1009, 1010, 5, 48, 0, 0, 1010, 1012, 7, 3, 0, 0, 1011, 1013, 3, 213, 105, 0, 1012, 1011, 1, 0, 0, 0, 1013, 1014, 1, 0, 0, 0, 1014, 1012, 1, 0, 0, 0, 1014, 1015, 1, 0, 0, 0, 1015, 1023, 1, 0, 0, 0, 1016, 1018, 5, 37, 0, 0, 1017, 1019, 3, 213, 105, 0, 1018, 1017, 1, 0, 0, 0, 1019, 1020, 1, 0, 0, 0, 1020, 1018, 1, 0, 0, 0, 1020, 1021, 1, 0, 0, 0, 1021, 1023, 1, 0, 0, 0, 1022, 1009, 1, 0, 0, 0, 1022, 1016, 1, 0, 0, 0, 1023, 208, 1, 0, 0, 0, 1024, 1026, 3, 215, 106, 0, 1025, 1024, 1, 0, 0, 0, 1026, 1027, 1, 0, 0, 0, 1027, 1025, 1, 0, 0, 0, 1027, 1028, 1, 0, 0, 0, 1028, 210, 1, 0, 0, 0, 1029, 1035, 5, 36, 0, 0, 1030, 1031, 5, 48, 0, 0, 1031, 1035, 5, 120, 0, 0, 1032, 1033, 5, 48, 0, 0, 1033, 1035, 5, 88, 0, 0, 1034, 1029, 1, 0, 0, 0, 1034, 1030, 1, 0, 0, 0, 1034, 1032, 1, 0, 0, 0, 1035, 1037, 1, 0, 0, 0, 1036, 1038, 3, 217, 107, 0, 1037, 1036, 1, 0, 0, 0, 1038, 1039, 1, 0, 0, 0, 1039, 1037, 1, 0, 0, 0, 1039, 1040, 1, 0, 0, 0, 1040, 212, 1, 0, 0, 0, 1041, 1042, 7, 4, 0, 0, 1042, 214, 1, 0, 0, 0, 1043, 1044, 7, 5, 0, 0, 1044, 216, 1, 0, 0, 0, 1045, 1046, 7, 6, 0, 0, 1046, 218, 1, 0, 0, 0, 1047, 1051, 3, 221, 109, 0, 1048, 1050, 3, 223, 110, 0, 1049, 1048, 1, 0, 0, 0, 1050, 1053, 1, 0, 0, 0, 1051, 1049, 1, 0, 0, 0, 1051, 1052, 1, 0, 0, 0, 1052, 1054, 1, 0, 0, 0, 1053, 1051, 1, 0, 0, 0, 1054, 1055, 6, 108, 4, 0, 1055, 220, 1, 0, 0, 0, 1056, 1057, 7, 7, 0, 0, 1057, 222, 1, 0, 0, 0, 1058, 1059, 7, 8, 0, 0, 1059, 224, 1, 0, 0, 0, 1060, 1066, 5, 34, 0, 0, 1061, 1062, 5, 92, 0, 0, 1062, 1065, 5, 34, 0, 0, 1063, 1065, 8, 9, 0, 0, 1064, 1061, 1, 0, 0, 0, 1064, 1063, 1, 0, 0, 0, 1065, 1068, 1, 0, 0, 0, 1066, 1064, 1, 0, 0, 0, 1066, 1067, 1, 0, 0, 0, 1067, 1069, 1, 0, 0, 0, 1068, 1066, 1, 0, 0, 0, 1069, 1071, 5, 34, 0, 0, 1070, 1072, 7, 10, 0, 0, 1071, 1070, 1, 0, 0, 0, 1071, 1072, 1, 0, 0, 0, 1072, 1077, 1, 0, 0, 0, 1073, 1075, 7, 11, 0, 0, 1074, 1076, 7, 12, 0, 0, 1075, 1074, 1, 0, 0, 0, 1075, 1076, 1, 0, 0, 0, 1076, 1078, 1, 0, 0, 0, 1077, 1073, 1, 0, 0, 0, 1077, 1078, 1, 0, 0, 0, 1078, 1080, 1, 0, 0, 0, 1079, 1081, 7, 10, 0, 0, 1080, 1079, 1, 0, 0, 0, 1080, 1081, 1, 0, 0, 0, 1081, 226, 1, 0, 0, 0, 1082, 1097, 5, 39, 0, 0, 1083, 1094, 5, 92, 0, 0, 1084, 1086, 7, 13, 0, 0, 1085, 1087, 7, 5, 0, 0, 1086, 1085, 1, 0, 0, 0, 1086, 1087, 1, 0, 0, 0, 1087, 1089, 1, 0, 0, 0, 1088, 1090, 7, 5, 0, 0, 1089, 1088, 1, 0, 0, 0, 1089, 1090, 1, 0, 0, 0, 1090, 1095, 1, 0, 0, 0, 1091, 1092, 5, 120, 0, 0, 1092, 1093, 7, 14, 0, 0, 1093, 1095, 7, 14, 0, 0, 1094, 1084, 1, 0, 0, 0, 1094, 1091, 1, 0, 0, 0, 1095, 1098, 1, 0, 0, 0, 1096, 1098, 8, 15, 0, 0, 1097, 1083, 1, 0, 0, 0, 1097, 1096, 1, 0, 0, 0, 1098, 1099, 1, 0, 0, 0, 1099, 1100, 5, 39, 0, 0, 1100, 228, 1, 0, 0, 0, 1101, 1103, 7, 16, 0, 0, 1102, 1101, 1, 0, 0, 0, 1103, 1104, 1, 0, 0, 0, 1104, 1102, 1, 0, 0, 0, 1104, 1105, 1, 0, 0, 0, 1105, 1106, 1, 0, 0, 0, 1106, 1107, 6, 113, 5, 0, 1107, 230, 1, 0, 0, 0, 1108, 1109, 5, 47, 0, 0, 1109, 1110, 5, 47, 0, 0, 1110, 1114, 1, 0, 0, 0, 1111, 1113, 8, 17, 0, 0, 1112, 1111, 1, 0, 0, 0, 1113, 1116, 1, 0, 0, 0, 1114, 1112, 1, 0, 0, 0, 1114, 1115, 1, 0, 0, 0, 1115, 1117, 1, 0, 0, 0, 1116, 1114, 1, 0, 0, 0, 1117, 1118, 6, 114, 6, 0, 1118, 232, 1, 0, 0, 0, 1119, 1120, 5, 47, 0, 0, 1120, 1121, 5, 42, 0, 0, 1121, 1125, 1, 0, 0, 0, 1122, 1124, 9, 0, 0, 0, 1123, 1122, 1, 0, 0, 0, 1124, 1127, 1, 0, 0, 0, 1125, 1126, 1, 0, 0, 0, 1125, 1123, 1, 0, 0, 0, 1126, 1128, 1, 0, 0, 0, 1127, 1125, 1, 0, 0, 0, 1128, 1129, 5, 42, 0, 0, 1129, 1130, 5, 47, 0, 0, 1130, 1131, 1, 0, 0, 0, 1131, 1132, 6, 115, 6, 0, 1132, 234, 1, 0, 0, 0, 1133, 1134, 5, 46, 0, 0, 1134, 1135, 5, 98, 0, 0, 1135, 1136, 5, 121, 0, 0, 1136, 1137, 5, 116, 0, 0, 1137, 1138, 5, 101, 0, 0, 1138, 236, 1, 0, 0, 0, 1139, 1140, 5, 98, 0, 0, 1140, 1141, 5, 114, 0, 0, 1141, 1747, 5, 107, 0, 0, 1142, 1143, 5, 111, 0, 0, 1143, 1144, 5, 114, 0, 0, 1144, 1747, 5, 97, 0, 0, 1145, 1146, 5, 107, 0, 0, 1146, 1147, 5, 105, 0, 0, 1147, 1747, 5, 108, 0, 0, 1148, 1149, 5, 115, 0, 0, 1149, 1150, 5, 108, 0, 0, 1150, 1747, 5, 111, 0, 0, 1151, 1152, 5, 110, 0, 0, 1152, 1153, 5, 111, 0, 0, 1153, 1747, 5, 112, 0, 0, 1154, 1155, 5, 97, 0, 0, 1155, 1156, 5, 115, 0, 0, 1156, 1747, 5, 108, 0, 0, 1157, 1158, 5, 112, 0, 0, 1158, 1159, 5, 104, 0, 0, 1159, 1747, 5, 112, 0, 0, 1160, 1161, 5, 97, 0, 0, 1161, 1162, 5, 110, 0, 0, 1162, 1747, 5, 99, 0, 0, 1163, 1164, 5, 98, 0, 0, 1164, 1165, 5, 112, 0, 0, 1165, 1747, 5, 108, 0, 0, 1166, 1167, 5, 99, 0, 0, 1167, 1168, 5, 108, 0, 0, 1168, 1747, 5, 99, 0, 0, 1169, 1170, 5, 106, 0, 0, 1170, 1171, 5, 115, 0, 0, 1171, 1747, 5, 114, 0, 0, 1172, 1173, 5, 97, 0, 0, 1173, 1174, 5, 110, 0, 0, 1174, 1747, 5, 100, 0, 0, 1175, 1176, 5, 114, 0, 0, 1176, 1177, 5, 108, 0, 0, 1177, 1747, 5, 97, 0, 0, 1178, 1179, 5, 98, 0, 0, 1179, 1180, 5, 105, 0, 0, 1180, 1747, 5, 116, 0, 0, 1181, 1182, 5, 114, 0, 0, 1182, 1183, 5, 111, 0, 0, 1183, 1747, 5, 108, 0, 0, 1184, 1185, 5, 112, 0, 0, 1185, 1186, 5, 108, 0, 0, 1186, 1747, 5, 97, 0, 0, 1187, 1188, 5, 112, 0, 0, 1188, 1189, 5, 108, 0, 0, 1189, 1747, 5, 112, 0, 0, 1190, 1191, 5, 98, 0, 0, 1191, 1192, 5, 109, 0, 0, 1192, 1747, 5, 105, 0, 0, 1193, 1194, 5, 115, 0, 0, 1194, 1195, 5, 101, 0, 0, 1195, 1747, 5, 99, 0, 0, 1196, 1197, 5, 114, 0, 0, 1197, 1198, 5, 116, 0, 0, 1198, 1747, 5, 105, 0, 0, 1199, 1200, 5, 101, 0, 0, 1200, 1201, 5, 111, 0, 0, 1201, 1747, 5, 114, 0, 0, 1202, 1203, 5, 115, 0, 0, 1203, 1204, 5, 114, 0, 0, 1204, 1747, 5, 101, 0, 0, 1205, 1206, 5, 108, 0, 0, 1206, 1207, 5, 115, 0, 0, 1207, 1747, 5, 114, 0, 0, 1208, 1209, 5, 112, 0, 0, 1209, 1210, 5, 104, 0, 0, 1210, 1747, 5, 97, 0, 0, 1211, 1212, 5, 97, 0, 0, 1212, 1213, 5, 108, 0, 0, 1213, 1747, 5, 114, 0, 0, 1214, 1215, 5, 106, 0, 0, 1215, 1216, 5, 109, 0, 0, 1216, 1747, 5, 112, 0, 0, 1217, 1218, 5, 98, 0, 0, 1218, 1219, 5, 118, 0, 0, 1219, 1747, 5, 99, 0, 0, 1220, 1221, 5, 99, 0, 0, 1221, 1222, 5, 108, 0, 0, 1222, 1747, 5, 105, 0, 0, 1223, 1224, 5, 114, 0, 0, 1224, 1225, 5, 116, 0, 0, 1225, 1747, 5, 115, 0, 0, 1226, 1227, 5, 97, 0, 0, 1227, 1228, 5, 100, 0, 0, 1228, 1747, 5, 99, 0, 0, 1229, 1230, 5, 114, 0, 0, 1230, 1231, 5, 114, 0, 0, 1231, 1747, 5, 97, 0, 0, 1232, 1233, 5, 98, 0, 0, 1233, 1234, 5, 118, 0, 0, 1234, 1747, 5, 115, 0, 0, 1235, 1236, 5, 115, 0, 0, 1236, 1237, 5, 101, 0, 0, 1237, 1747, 5, 105, 0, 0, 1238, 1239, 5, 115, 0, 0, 1239, 1240, 5, 97, 0, 0, 1240, 1747, 5, 120, 0, 0, 1241, 1242, 5, 115, 0, 0, 1242, 1243, 5, 116, 0, 0, 1243, 1747, 5, 121, 0, 0, 1244, 1245, 5, 115, 0, 0, 1245, 1246, 5, 116, 0, 0, 1246, 1747, 5, 97, 0, 0, 1247, 1248, 5, 115, 0, 0, 1248, 1249, 5, 116, 0, 0, 1249, 1747, 5, 120, 0, 0, 1250, 1251, 5, 100, 0, 0, 1251, 1252, 5, 101, 0, 0, 1252, 1747, 5, 121, 0, 0, 1253, 1254, 5, 116, 0, 0, 1254, 1255, 5, 120, 0, 0, 1255, 1747, 5, 97, 0, 0, 1256, 1257, 5, 120, 0, 0, 1257, 1258, 5, 97, 0, 0, 1258, 1747, 5, 97, 0, 0, 1259, 1260, 5, 98, 0, 0, 1260, 1261, 5, 99, 0, 0, 1261, 1747, 5, 99, 0, 0, 1262, 1263, 5, 97, 0, 0, 1263, 1264, 5, 104, 0, 0, 1264, 1747, 5, 120, 0, 0, 1265, 1266, 5, 116, 0, 0, 1266, 1267, 5, 121, 0, 0, 1267, 1747, 5, 97, 0, 0, 1268, 1269, 5, 116, 0, 0, 1269, 1270, 5, 120, 0, 0, 1270, 1747, 5, 115, 0, 0, 1271, 1272, 5, 116, 0, 0, 1272, 1273, 5, 97, 0, 0, 1273, 1747, 5, 115, 0, 0, 1274, 1275, 5, 115, 0, 0, 1275, 1276, 5, 104, 0, 0, 1276, 1747, 5, 121, 0, 0, 1277, 1278, 5, 115, 0, 0, 1278, 1279, 5, 104, 0, 0, 1279, 1747, 5, 120, 0, 0, 1280, 1281, 5, 108, 0, 0, 1281, 1282, 5, 100, 0, 0, 1282, 1747, 5, 121, 0, 0, 1283, 1284, 5, 108, 0, 0, 1284, 1285, 5, 100, 0, 0, 1285, 1747, 5, 97, 0, 0, 1286, 1287, 5, 108, 0, 0, 1287, 1288, 5, 100, 0, 0, 1288, 1747, 5, 120, 0, 0, 1289, 1290, 5, 108, 0, 0, 1290, 1291, 5, 97, 0, 0, 1291, 1747, 5, 120, 0, 0, 1292, 1293, 5, 116, 0, 0, 1293, 1294, 5, 97, 0, 0, 1294, 1747, 5, 121, 0, 0, 1295, 1296, 5, 116, 0, 0, 1296, 1297, 5, 97, 0, 0, 1297, 1747, 5, 120, 0, 0, 1298, 1299, 5, 98, 0, 0, 1299, 1300, 5, 99, 0, 0, 1300, 1747, 5, 115, 0, 0, 1301, 1302, 5, 99, 0, 0, 1302, 1303, 5, 108, 0, 0, 1303, 1747, 5, 118, 0, 0, 1304, 1305, 5, 116, 0, 0, 1305, 1306, 5, 115, 0, 0, 1306, 1747, 5, 120, 0, 0, 1307, 1308, 5, 108, 0, 0, 1308, 1309, 5, 97, 0, 0, 1309, 1747, 5, 115, 0, 0, 1310, 1311, 5, 99, 0, 0, 1311, 1312, 5, 112, 0, 0, 1312, 1747, 5, 121, 0, 0, 1313, 1314, 5, 99, 0, 0, 1314, 1315, 5, 109, 0, 0, 1315, 1747, 5, 112, 0, 0, 1316, 1317, 5, 99, 0, 0, 1317, 1318, 5, 112, 0, 0, 1318, 1747, 5, 120, 0, 0, 1319, 1320, 5, 100, 0, 0, 1320, 1321, 5, 99, 0, 0, 1321, 1747, 5, 112, 0, 0, 1322, 1323, 5, 100, 0, 0, 1323, 1324, 5, 101, 0, 0, 1324, 1747, 5, 99, 0, 0, 1325, 1326, 5, 105, 0, 0, 1326, 1327, 5, 110, 0, 0, 1327, 1747, 5, 99, 0, 0, 1328, 1329, 5, 97, 0, 0, 1329, 1330, 5, 120, 0, 0, 1330, 1747, 5, 115, 0, 0, 1331, 1332, 5, 98, 0, 0, 1332, 1333, 5, 110, 0, 0, 1333, 1747, 5, 101, 0, 0, 1334, 1335, 5, 99, 0, 0, 1335, 1336, 5, 108, 0, 0, 1336, 1747, 5, 100, 0, 0, 1337, 1338, 5, 115, 0, 0, 1338, 1339, 5, 98, 0, 0, 1339, 1747, 5, 99, 0, 0, 1340, 1341, 5, 105, 0, 0, 1341, 1342, 5, 115, 0, 0, 1342, 1747, 5, 99, 0, 0, 1343, 1344, 5, 105, 0, 0, 1344, 1345, 5, 110, 0, 0, 1345, 1747, 5, 120, 0, 0, 1346, 1347, 5, 98, 0, 0, 1347, 1348, 5, 101, 0, 0, 1348, 1747, 5, 113, 0, 0, 1349, 1350, 5, 115, 0, 0, 1350, 1351, 5, 101, 0, 0, 1351, 1747, 5, 100, 0, 0, 1352, 1353, 5, 100, 0, 0, 1353, 1354, 5, 101, 0, 0, 1354, 1747, 5, 120, 0, 0, 1355, 1356, 5, 105, 0, 0, 1356, 1357, 5, 110, 0, 0, 1357, 1747, 5, 121, 0, 0, 1358, 1359, 5, 114, 0, 0, 1359, 1360, 5, 111, 0, 0, 1360, 1747, 5, 114, 0, 0, 1361, 1362, 5, 98, 0, 0, 1362, 1363, 5, 98, 0, 0, 1363, 1364, 5, 114, 0, 0, 1364, 1747, 5, 48, 0, 0, 1365, 1366, 5, 98, 0, 0, 1366, 1367, 5, 98, 0, 0, 1367, 1368, 5, 114, 0, 0, 1368, 1747, 5, 49, 0, 0, 1369, 1370, 5, 98, 0, 0, 1370, 1371, 5, 98, 0, 0, 1371, 1372, 5, 114, 0, 0, 1372, 1747, 5, 50, 0, 0, 1373, 1374, 5, 98, 0, 0, 1374, 1375, 5, 98, 0, 0, 1375, 1376, 5, 114, 0, 0, 1376, 1747, 5, 51, 0, 0, 1377, 1378, 5, 98, 0, 0, 1378, 1379, 5, 98, 0, 0, 1379, 1380, 5, 114, 0, 0, 1380, 1747, 5, 52, 0, 0, 1381, 1382, 5, 98, 0, 0, 1382, 1383, 5, 98, 0, 0, 1383, 1384, 5, 114, 0, 0, 1384, 1747, 5, 53, 0, 0, 1385, 1386, 5, 98, 0, 0, 1386, 1387, 5, 98, 0, 0, 1387, 1388, 5, 114, 0, 0, 1388, 1747, 5, 54, 0, 0, 1389, 1390, 5, 98, 0, 0, 1390, 1391, 5, 98, 0, 0, 1391, 1392, 5, 114, 0, 0, 1392, 1747, 5, 55, 0, 0, 1393, 1394, 5, 98, 0, 0, 1394, 1395, 5, 98, 0, 0, 1395, 1396, 5, 115, 0, 0, 1396, 1747, 5, 48, 0, 0, 1397, 1398, 5, 98, 0, 0, 1398, 1399, 5, 98, 0, 0, 1399, 1400, 5, 115, 0, 0, 1400, 1747, 5, 49, 0, 0, 1401, 1402, 5, 98, 0, 0, 1402, 1403, 5, 98, 0, 0, 1403, 1404, 5, 115, 0, 0, 1404, 1747, 5, 50, 0, 0, 1405, 1406, 5, 98, 0, 0, 1406, 1407, 5, 98, 0, 0, 1407, 1408, 5, 115, 0, 0, 1408, 1747, 5, 51, 0, 0, 1409, 1410, 5, 98, 0, 0, 1410, 1411, 5, 98, 0, 0, 1411, 1412, 5, 115, 0, 0, 1412, 1747, 5, 52, 0, 0, 1413, 1414, 5, 98, 0, 0, 1414, 1415, 5, 98, 0, 0, 1415, 1416, 5, 115, 0, 0, 1416, 1747, 5, 53, 0, 0, 1417, 1418, 5, 98, 0, 0, 1418, 1419, 5, 98, 0, 0, 1419, 1420, 5, 115, 0, 0, 1420, 1747, 5, 54, 0, 0, 1421, 1422, 5, 98, 0, 0, 1422, 1423, 5, 98, 0, 0, 1423, 1424, 5, 115, 0, 0, 1424, 1747, 5, 55, 0, 0, 1425, 1426, 5, 98, 0, 0, 1426, 1427, 5, 114, 0, 0, 1427, 1747, 5, 97, 0, 0, 1428, 1429, 5, 112, 0, 0, 1429, 1430, 5, 104, 0, 0, 1430, 1747, 5, 120, 0, 0, 1431, 1432, 5, 112, 0, 0, 1432, 1433, 5, 104, 0, 0, 1433, 1747, 5, 121, 0, 0, 1434, 1435, 5, 112, 0, 0, 1435, 1436, 5, 108, 0, 0, 1436, 1747, 5, 120, 0, 0, 1437, 1438, 5, 112, 0, 0, 1438, 1439, 5, 108, 0, 0, 1439, 1747, 5, 121, 0, 0, 1440, 1441, 5, 114, 0, 0, 1441, 1442, 5, 109, 0, 0, 1442, 1443, 5, 98, 0, 0, 1443, 1747, 5, 48, 0, 0, 1444, 1445, 5, 114, 0, 0, 1445, 1446, 5, 109, 0, 0, 1446, 1447, 5, 98, 0, 0, 1447, 1747, 5, 49, 0, 0, 1448, 1449, 5, 114, 0, 0, 1449, 1450, 5, 109, 0, 0, 1450, 1451, 5, 98, 0, 0, 1451, 1747, 5, 50, 0, 0, 1452, 1453, 5, 114, 0, 0, 1453, 1454, 5, 109, 0, 0, 1454, 1455, 5, 98, 0, 0, 1455, 1747, 5, 51, 0, 0, 1456, 1457, 5, 114, 0, 0, 1457, 1458, 5, 109, 0, 0, 1458, 1459, 5, 98, 0, 0, 1459, 1747, 5, 52, 0, 0, 1460, 1461, 5, 114, 0, 0, 1461, 1462, 5, 109, 0, 0, 1462, 1463, 5, 98, 0, 0, 1463, 1747, 5, 53, 0, 0, 1464, 1465, 5, 114, 0, 0, 1465, 1466, 5, 109, 0, 0, 1466, 1467, 5, 98, 0, 0, 1467, 1747, 5, 54, 0, 0, 1468, 1469, 5, 114, 0, 0, 1469, 1470, 5, 109, 0, 0, 1470, 1471, 5, 98, 0, 0, 1471, 1747, 5, 55, 0, 0, 1472, 1473, 5, 115, 0, 0, 1473, 1474, 5, 109, 0, 0, 1474, 1475, 5, 98, 0, 0, 1475, 1747, 5, 48, 0, 0, 1476, 1477, 5, 115, 0, 0, 1477, 1478, 5, 109, 0, 0, 1478, 1479, 5, 98, 0, 0, 1479, 1747, 5, 49, 0, 0, 1480, 1481, 5, 115, 0, 0, 1481, 1482, 5, 109, 0, 0, 1482, 1483, 5, 98, 0, 0, 1483, 1747, 5, 50, 0, 0, 1484, 1485, 5, 115, 0, 0, 1485, 1486, 5, 109, 0, 0, 1486, 1487, 5, 98, 0, 0, 1487, 1747, 5, 51, 0, 0, 1488, 1489, 5, 115, 0, 0, 1489, 1490, 5, 109, 0, 0, 1490, 1491, 5, 98, 0, 0, 1491, 1747, 5, 52, 0, 0, 1492, 1493, 5, 115, 0, 0, 1493, 1494, 5, 109, 0, 0, 1494, 1495, 5, 98, 0, 0, 1495, 1747, 5, 53, 0, 0, 1496, 1497, 5, 115, 0, 0, 1497, 1498, 5, 109, 0, 0, 1498, 1499, 5, 98, 0, 0, 1499, 1747, 5, 54, 0, 0, 1500, 1501, 5, 115, 0, 0, 1501, 1502, 5, 109, 0, 0, 1502, 1503, 5, 98, 0, 0, 1503, 1747, 5, 55, 0, 0, 1504, 1505, 5, 115, 0, 0, 1505, 1506, 5, 116, 0, 0, 1506, 1747, 5, 112, 0, 0, 1507, 1508, 5, 115, 0, 0, 1508, 1509, 5, 116, 0, 0, 1509, 1747, 5, 122, 0, 0, 1510, 1511, 5, 116, 0, 0, 1511, 1512, 5, 114, 0, 0, 1512, 1747, 5, 98, 0, 0, 1513, 1514, 5, 116, 0, 0, 1514, 1515, 5, 115, 0, 0, 1515, 1747, 5, 98, 0, 0, 1516, 1517, 5, 119, 0, 0, 1517, 1518, 5, 97, 0, 0, 1518, 1747, 5, 105, 0, 0, 1519, 1520, 5, 99, 0, 0, 1520, 1521, 5, 108, 0, 0, 1521, 1747, 5, 101, 0, 0, 1522, 1523, 5, 115, 0, 0, 1523, 1524, 5, 101, 0, 0, 1524, 1747, 5, 101, 0, 0, 1525, 1526, 5, 116, 0, 0, 1526, 1527, 5, 115, 0, 0, 1527, 1747, 5, 121, 0, 0, 1528, 1529, 5, 108, 0, 0, 1529, 1530, 5, 98, 0, 0, 1530, 1531, 5, 112, 0, 0, 1531, 1747, 5, 108, 0, 0, 1532, 1533, 5, 105, 0, 0, 1533, 1534, 5, 110, 0, 0, 1534, 1747, 5, 122, 0, 0, 1535, 1536, 5, 116, 0, 0, 1536, 1537, 5, 121, 0, 0, 1537, 1747, 5, 115, 0, 0, 1538, 1539, 5, 108, 0, 0, 1539, 1540, 5, 98, 0, 0, 1540, 1541, 5, 109, 0, 0, 1541, 1747, 5, 105, 0, 0, 1542, 1543, 5, 100, 0, 0, 1543, 1544, 5, 101, 0, 0, 1544, 1747, 5, 122, 0, 0, 1545, 1546, 5, 110, 0, 0, 1546, 1547, 5, 101, 0, 0, 1547, 1747, 5, 103, 0, 0, 1548, 1549, 5, 97, 0, 0, 1549, 1550, 5, 115, 0, 0, 1550, 1747, 5, 114, 0, 0, 1551, 1552, 5, 116, 0, 0, 1552, 1553, 5, 97, 0, 0, 1553, 1747, 5, 122, 0, 0, 1554, 1555, 5, 108, 0, 0, 1555, 1556, 5, 98, 0, 0, 1556, 1557, 5, 118, 0, 0, 1557, 1747, 5, 99, 0, 0, 1558, 1559, 5, 116, 0, 0, 1559, 1560, 5, 97, 0, 0, 1560, 1747, 5, 98, 0, 0, 1561, 1562, 5, 109, 0, 0, 1562, 1563, 5, 97, 0, 0, 1563, 1747, 5, 112, 0, 0, 1564, 1565, 5, 114, 0, 0, 1565, 1566, 5, 116, 0, 0, 1566, 1747, 5, 110, 0, 0, 1567, 1568, 5, 108, 0, 0, 1568, 1569, 5, 98, 0, 0, 1569, 1570, 5, 115, 0, 0, 1570, 1747, 5, 114, 0, 0, 1571, 1572, 5, 116, 0, 0, 1572, 1573, 5, 122, 0, 0, 1573, 1747, 5, 97, 0, 0, 1574, 1575, 5, 108, 0, 0, 1575, 1576, 5, 98, 0, 0, 1576, 1577, 5, 118, 0, 0, 1577, 1747, 5, 115, 0, 0, 1578, 1579, 5, 116, 0, 0, 1579, 1580, 5, 98, 0, 0, 1580, 1747, 5, 97, 0, 0, 1581, 1582, 5, 108, 0, 0, 1582, 1583, 5, 98, 0, 0, 1583, 1584, 5, 114, 0, 0, 1584, 1747, 5, 97, 0, 0, 1585, 1586, 5, 108, 0, 0, 1586, 1587, 5, 98, 0, 0, 1587, 1588, 5, 99, 0, 0, 1588, 1747, 5, 99, 0, 0, 1589, 1590, 5, 108, 0, 0, 1590, 1591, 5, 100, 0, 0, 1591, 1747, 5, 122, 0, 0, 1592, 1593, 5, 108, 0, 0, 1593, 1594, 5, 98, 0, 0, 1594, 1595, 5, 99, 0, 0, 1595, 1747, 5, 115, 0, 0, 1596, 1597, 5, 99, 0, 0, 1597, 1598, 5, 112, 0, 0, 1598, 1747, 5, 122, 0, 0, 1599, 1600, 5, 100, 0, 0, 1600, 1601, 5, 101, 0, 0, 1601, 1747, 5, 119, 0, 0, 1602, 1603, 5, 97, 0, 0, 1603, 1604, 5, 115, 0, 0, 1604, 1747, 5, 119, 0, 0, 1605, 1606, 5, 108, 0, 0, 1606, 1607, 5, 98, 0, 0, 1607, 1608, 5, 110, 0, 0, 1608, 1747, 5, 101, 0, 0, 1609, 1610, 5, 112, 0, 0, 1610, 1611, 5, 104, 0, 0, 1611, 1747, 5, 122, 0, 0, 1612, 1613, 5, 105, 0, 0, 1613, 1614, 5, 110, 0, 0, 1614, 1747, 5, 119, 0, 0, 1615, 1616, 5, 114, 0, 0, 1616, 1617, 5, 111, 0, 0, 1617, 1747, 5, 119, 0, 0, 1618, 1619, 5, 108, 0, 0, 1619, 1620, 5, 98, 0, 0, 1620, 1621, 5, 101, 0, 0, 1621, 1747, 5, 113, 0, 0, 1622, 1623, 5, 112, 0, 0, 1623, 1624, 5, 104, 0, 0, 1624, 1747, 5, 119, 0, 0, 1625, 1626, 5, 112, 0, 0, 1626, 1627, 5, 108, 0, 0, 1627, 1747, 5, 122, 0, 0, 1628, 1629, 5, 101, 0, 0, 1629, 1630, 5, 111, 0, 0, 1630, 1747, 5, 109, 0, 0, 1631, 1632, 5, 97, 0, 0, 1632, 1633, 5, 100, 0, 0, 1633, 1634, 5, 99, 0, 0, 1634, 1747, 5, 113, 0, 0, 1635, 1636, 5, 97, 0, 0, 1636, 1637, 5, 110, 0, 0, 1637, 1638, 5, 100, 0, 0, 1638, 1747, 5, 113, 0, 0, 1639, 1640, 5, 97, 0, 0, 1640, 1641, 5, 115, 0, 0, 1641, 1642, 5, 108, 0, 0, 1642, 1747, 5, 113, 0, 0, 1643, 1644, 5, 97, 0, 0, 1644, 1645, 5, 115, 0, 0, 1645, 1646, 5, 114, 0, 0, 1646, 1747, 5, 113, 0, 0, 1647, 1648, 5, 98, 0, 0, 1648, 1649, 5, 105, 0, 0, 1649, 1650, 5, 116, 0, 0, 1650, 1747, 5, 113, 0, 0, 1651, 1652, 5, 99, 0, 0, 1652, 1653, 5, 112, 0, 0, 1653, 1747, 5, 113, 0, 0, 1654, 1655, 5, 100, 0, 0, 1655, 1656, 5, 101, 0, 0, 1656, 1747, 5, 113, 0, 0, 1657, 1658, 5, 101, 0, 0, 1658, 1659, 5, 111, 0, 0, 1659, 1660, 5, 114, 0, 0, 1660, 1747, 5, 113, 0, 0, 1661, 1662, 5, 105, 0, 0, 1662, 1663, 5, 110, 0, 0, 1663, 1747, 5, 113, 0, 0, 1664, 1665, 5, 108, 0, 0, 1665, 1666, 5, 100, 0, 0, 1666, 1747, 5, 113, 0, 0, 1667, 1668, 5, 108, 0, 0, 1668, 1669, 5, 115, 0, 0, 1669, 1670, 5, 114, 0, 0, 1670, 1747, 5, 113, 0, 0, 1671, 1672, 5, 111, 0, 0, 1672, 1673, 5, 114, 0, 0, 1673, 1747, 5, 113, 0, 0, 1674, 1675, 5, 114, 0, 0, 1675, 1676, 5, 111, 0, 0, 1676, 1677, 5, 108, 0, 0, 1677, 1747, 5, 113, 0, 0, 1678, 1679, 5, 114, 0, 0, 1679, 1680, 5, 111, 0, 0, 1680, 1681, 5, 114, 0, 0, 1681, 1747, 5, 113, 0, 0, 1682, 1683, 5, 115, 0, 0, 1683, 1684, 5, 98, 0, 0, 1684, 1685, 5, 99, 0, 0, 1685, 1747, 5, 113, 0, 0, 1686, 1687, 5, 115, 0, 0, 1687, 1688, 5, 116, 0, 0, 1688, 1747, 5, 113, 0, 0, 1689, 1690, 5, 115, 0, 0, 1690, 1691, 5, 120, 0, 0, 1691, 1747, 5, 121, 0, 0, 1692, 1693, 5, 115, 0, 0, 1693, 1694, 5, 116, 0, 0, 1694, 1747, 5, 48, 0, 0, 1695, 1696, 5, 115, 0, 0, 1696, 1697, 5, 116, 0, 0, 1697, 1747, 5, 49, 0, 0, 1698, 1699, 5, 115, 0, 0, 1699, 1700, 5, 116, 0, 0, 1700, 1747, 5, 50, 0, 0, 1701, 1702, 5, 115, 0, 0, 1702, 1703, 5, 97, 0, 0, 1703, 1747, 5, 121, 0, 0, 1704, 1705, 5, 116, 0, 0, 1705, 1706, 5, 109, 0, 0, 1706, 1747, 5, 97, 0, 0, 1707, 1708, 5, 98, 0, 0, 1708, 1709, 5, 115, 0, 0, 1709, 1747, 5, 114, 0, 0, 1710, 1711, 5, 116, 0, 0, 1711, 1712, 5, 97, 0, 0, 1712, 1747, 5, 109, 0, 0, 1713, 1714, 5, 99, 0, 0, 1714, 1715, 5, 115, 0, 0, 1715, 1747, 5, 108, 0, 0, 1716, 1717, 5, 99, 0, 0, 1717, 1718, 5, 108, 0, 0, 1718, 1747, 5, 97, 0, 0, 1719, 1720, 5, 99, 0, 0, 1720, 1721, 5, 108, 0, 0, 1721, 1747, 5, 120, 0, 0, 1722, 1723, 5, 99, 0, 0, 1723, 1724, 5, 108, 0, 0, 1724, 1747, 5, 121, 0, 0, 1725, 1726, 5, 99, 0, 0, 1726, 1727, 5, 115, 0, 0, 1727, 1747, 5, 104, 0, 0, 1728, 1729, 5, 115, 0, 0, 1729, 1730, 5, 101, 0, 0, 1730, 1747, 5, 116, 0, 0, 1731, 1732, 5, 116, 0, 0, 1732, 1733, 5, 115, 0, 0, 1733, 1747, 5, 116, 0, 0, 1734, 1735, 5, 116, 0, 0, 1735, 1736, 5, 105, 0, 0, 1736, 1747, 5, 97, 0, 0, 1737, 1738, 5, 116, 0, 0, 1738, 1739, 5, 100, 0, 0, 1739, 1747, 5, 100, 0, 0, 1740, 1741, 5, 116, 0, 0, 1741, 1742, 5, 105, 0, 0, 1742, 1747, 5, 110, 0, 0, 1743, 1744, 5, 116, 0, 0, 1744, 1745, 5, 105, 0, 0, 1745, 1747, 5, 105, 0, 0, 1746, 1139, 1, 0, 0, 0, 1746, 1142, 1, 0, 0, 0, 1746, 1145, 1, 0, 0, 0, 1746, 1148, 1, 0, 0, 0, 1746, 1151, 1, 0, 0, 0, 1746, 1154, 1, 0, 0, 0, 1746, 1157, 1, 0, 0, 0, 1746, 1160, 1, 0, 0, 0, 1746, 1163, 1, 0, 0, 0, 1746, 1166, 1, 0, 0, 0, 1746, 1169, 1, 0, 0, 0, 1746, 1172, 1, 0, 0, 0, 1746, 1175, 1, 0, 0, 0, 1746, 1178, 1, 0, 0, 0, 1746, 1181, 1, 0, 0, 0, 1746, 1184, 1, 0, 0, 0, 1746, 1187, 1, 0, 0, 0, 1746, 1190, 1, 0, 0, 0, 1746, 1193, 1, 0, 0, 0, 1746, 1196, 1, 0, 0, 0, 1746, 1199, 1, 0, 0, 0, 1746, 1202, 1, 0, 0, 0, 1746, 1205, 1, 0, 0, 0, 1746, 1208, 1, 0, 0, 0, 1746, 1211, 1, 0, 0, 0, 1746, 1214, 1, 0, 0, 0, 1746, 1217, 1, 0, 0, 0, 1746, 1220, 1, 0, 0, 0, 1746, 1223, 1, 0, 0, 0, 1746, 1226, 1, 0, 0, 0, 1746, 1229, 1, 0, 0, 0, 1746, 1232, 1, 0, 0, 0, 1746, 1235, 1, 0, 0, 0, 1746, 1238, 1, 0, 0, 0, 1746, 1241, 1, 0, 0, 0, 1746, 1244, 1, 0, 0, 0, 1746, 1247, 1, 0, 0, 0, 1746, 1250, 1, 0, 0, 0, 1746, 1253, 1, 0, 0, 0, 1746, 1256, 1, 0, 0, 0, 1746, 1259, 1, 0, 0, 0, 1746, 1262, 1, 0, 0, 0, 1746, 1265, 1, 0, 0, 0, 1746, 1268, 1, 0, 0, 0, 1746, 1271, 1, 0, 0, 0, 1746, 1274, 1, 0, 0, 0, 1746, 1277, 1, 0, 0, 0, 1746, 1280, 1, 0, 0, 0, 1746, 1283, 1, 0, 0, 0, 1746, 1286, 1, 0, 0, 0, 1746, 1289, 1, 0, 0, 0, 1746, 1292, 1, 0, 0, 0, 1746, 1295, 1, 0, 0, 0, 1746, 1298, 1, 0, 0, 0, 1746, 1301, 1, 0, 0, 0, 1746, 1304, 1, 0, 0, 0, 1746, 1307, 1, 0, 0, 0, 1746, 1310, 1, 0, 0, 0, 1746, 1313, 1, 0, 0, 0, 1746, 1316, 1, 0, 0, 0, 1746, 1319, 1, 0, 0, 0, 1746, 1322, 1, 0, 0, 0, 1746, 1325, 1, 0, 0, 0, 1746, 1328, 1, 0, 0, 0, 1746, 1331, 1, 0, 0, 0, 1746, 1334, 1, 0, 0, 0, 1746, 1337, 1, 0, 0, 0, 1746, 1340, 1, 0, 0, 0, 1746, 1343, 1, 0, 0, 0, 1746, 1346, 1, 0, 0, 0, 1746, 1349, 1, 0, 0, 0, 1746, 1352, 1, 0, 0, 0, 1746, 1355, 1, 0, 0, 0, 1746, 1358, 1, 0, 0, 0, 1746, 1361, 1, 0, 0, 0, 1746, 1365, 1, 0, 0, 0, 1746, 1369, 1, 0, 0, 0, 1746, 1373, 1, 0, 0, 0, 1746, 1377, 1, 0, 0, 0, 1746, 1381, 1, 0, 0, 0, 1746, 1385, 1, 0, 0, 0, 1746, 1389, 1, 0, 0, 0, 1746, 1393, 1, 0, 0, 0, 1746, 1397, 1, 0, 0, 0, 1746, 1401, 1, 0, 0, 0, 1746, 1405, 1, 0, 0, 0, 1746, 1409, 1, 0, 0, 0, 1746, 1413, 1, 0, 0, 0, 1746, 1417, 1, 0, 0, 0, 1746, 1421, 1, 0, 0, 0, 1746, 1425, 1, 0, 0, 0, 1746, 1428, 1, 0, 0, 0, 1746, 1431, 1, 0, 0, 0, 1746, 1434, 1, 0, 0, 0, 1746, 1437, 1, 0, 0, 0, 1746, 1440, 1, 0, 0, 0, 1746, 1444, 1, 0, 0, 0, 1746, 1448, 1, 0, 0, 0, 1746, 1452, 1, 0, 0, 0, 1746, 1456, 1, 0, 0, 0, 1746, 1460, 1, 0, 0, 0, 1746, 1464, 1, 0, 0, 0, 1746, 1468, 1, 0, 0, 0, 1746, 1472, 1, 0, 0, 0, 1746, 1476, 1, 0, 0, 0, 1746, 1480, 1, 0, 0, 0, 1746, 1484, 1, 0, 0, 0, 1746, 1488, 1, 0, 0, 0, 1746, 1492, 1, 0, 0, 0, 1746, 1496, 1, 0, 0, 0, 1746, 1500, 1, 0, 0, 0, 1746, 1504, 1, 0, 0, 0, 1746, 1507, 1, 0, 0, 0, 1746, 1510, 1, 0, 0, 0, 1746, 1513, 1, 0, 0, 0, 1746, 1516, 1, 0, 0, 0, 1746, 1519, 1, 0, 0, 0, 1746, 1522, 1, 0, 0, 0, 1746, 1525, 1, 0, 0, 0, 1746, 1528, 1, 0, 0, 0, 1746, 1532, 1, 0, 0, 0, 1746, 1535, 1, 0, 0, 0, 1746, 1538, 1, 0, 0, 0, 1746, 1542, 1, 0, 0, 0, 1746, 1545, 1, 0, 0, 0, 1746, 1548, 1, 0, 0, 0, 1746, 1551, 1, 0, 0, 0, 1746, 1554, 1, 0, 0, 0, 1746, 1558, 1, 0, 0, 0, 1746, 1561, 1, 0, 0, 0, 1746, 1564, 1, 0, 0, 0, 1746, 1567, 1, 0, 0, 0, 1746, 1571, 1, 0, 0, 0, 1746, 1574, 1, 0, 0, 0, 1746, 1578, 1, 0, 0, 0, 1746, 1581, 1, 0, 0, 0, 1746, 1585, 1, 0, 0, 0, 1746, 1589, 1, 0, 0, 0, 1746, 1592, 1, 0, 0, 0, 1746, 1596, 1, 0, 0, 0, 1746, 1599, 1, 0, 0, 0, 1746, 1602, 1, 0, 0, 0, 1746, 1605, 1, 0, 0, 0, 1746, 1609, 1, 0, 0, 0, 1746, 1612, 1, 0, 0, 0, 1746, 1615, 1, 0, 0, 0, 1746, 1618, 1, 0, 0, 0, 1746, 1622, 1, 0, 0, 0, 1746, 1625, 1, 0, 0, 0, 1746, 1628, 1, 0, 0, 0, 1746, 1631, 1, 0, 0, 0, 1746, 1635, 1, 0, 0, 0, 1746, 1639, 1, 0, 0, 0, 1746, 1643, 1, 0, 0, 0, 1746, 1647, 1, 0, 0, 0, 1746, 1651, 1, 0, 0, 0, 1746, 1654, 1, 0, 0, 0, 1746, 1657, 1, 0, 0, 0, 1746, 1661, 1, 0, 0, 0, 1746, 1664, 1, 0, 0, 0, 1746, 1667, 1, 0, 0, 0, 1746, 1671, 1, 0, 0, 0, 1746, 1674, 1, 0, 0, 0, 1746, 1678, 1, 0, 0, 0, 1746, 1682, 1, 0, 0, 0, 1746, 1686, 1, 0, 0, 0, 1746, 1689, 1, 0, 0, 0, 1746, 1692, 1, 0, 0, 0, 1746, 1695, 1, 0, 0, 0, 1746, 1698, 1, 0, 0, 0, 1746, 1701, 1, 0, 0, 0, 1746, 1704, 1, 0, 0, 0, 1746, 1707, 1, 0, 0, 0, 1746, 1710, 1, 0, 0, 0, 1746, 1713, 1, 0, 0, 0, 1746, 1716, 1, 0, 0, 0, 1746, 1719, 1, 0, 0, 0, 1746, 1722, 1, 0, 0, 0, 1746, 1725, 1, 0, 0, 0, 1746, 1728, 1, 0, 0, 0, 1746, 1731, 1, 0, 0, 0, 1746, 1734, 1, 0, 0, 0, 1746, 1737, 1, 0, 0, 0, 1746, 1740, 1, 0, 0, 0, 1746, 1743, 1, 0, 0, 0, 1747, 238, 1, 0, 0, 0, 1748, 1749, 5, 35, 0, 0, 1749, 240, 1, 0, 0, 0, 1750, 1751, 5, 58, 0, 0, 1751, 242, 1, 0, 0, 0, 1752, 1753, 5, 44, 0, 0, 1753, 244, 1, 0, 0, 0, 1754, 1755, 5, 40, 0, 0, 1755, 246, 1, 0, 0, 0, 1756, 1757, 5, 41, 0, 0, 1757, 248, 1, 0, 0, 0, 1758, 1759, 5, 91, 0, 0, 1759, 250, 1, 0, 0, 0, 1760, 1761, 5, 93, 0, 0, 1761, 252, 1, 0, 0, 0, 1762, 1763, 5, 46, 0, 0, 1763, 254, 1, 0, 0, 0, 1764, 1765, 5, 60, 0, 0, 1765, 1766, 5, 60, 0, 0, 1766, 256, 1, 0, 0, 0, 1767, 1768, 5, 62, 0, 0, 1768, 1769, 5, 62, 0, 0, 1769, 258, 1, 0, 0, 0, 1770, 1771, 5, 43, 0, 0, 1771, 260, 1, 0, 0, 0, 1772, 1773, 5, 45, 0, 0, 1773, 262, 1, 0, 0, 0, 1774, 1775, 5, 60, 0, 0, 1775, 264, 1, 0, 0, 0, 1776, 1777, 5, 62, 0, 0, 1777, 266, 1, 0, 0, 0, 1778, 1779, 5, 42, 0, 0, 1779, 268, 1, 0, 0, 0, 1780, 1781, 5, 47, 0, 0, 1781, 270, 1, 0, 0, 0, 1782, 1783, 5, 123, 0, 0, 1783, 1784, 6, 134, 7, 0, 1784, 272, 1, 0, 0, 0, 1785, 1786, 5, 125, 0, 0, 1786, 1787, 6, 135, 8, 0, 1787, 274, 1, 0, 0, 0, 1788, 1791, 3, 277, 137, 0, 1789, 1791, 3, 285, 141, 0, 1790, 1788, 1, 0, 0, 0, 1790, 1789, 1, 0, 0, 0, 1791, 276, 1, 0, 0, 0, 1792, 1796, 3, 279, 138, 0, 1793, 1796, 3, 281, 139, 0, 1794, 1796, 3, 283, 140, 0, 1795, 1792, 1, 0, 0, 0, 1795, 1793, 1, 0, 0, 0, 1795, 1794, 1, 0, 0, 0, 1796, 278, 1, 0, 0, 0, 1797, 1801, 5, 37, 0, 0, 1798, 1800, 3, 293, 145, 0, 1799, 1798, 1, 0, 0, 0, 1800, 1803, 1, 0, 0, 0, 1801, 1799, 1, 0, 0, 0, 1801, 1802, 1, 0, 0, 0, 1802, 1804, 1, 0, 0, 0, 1803, 1801, 1, 0, 0, 0, 1804, 1806, 5, 46, 0, 0, 1805, 1807, 3, 293, 145, 0, 1806, 1805, 1, 0, 0, 0, 1807, 1808, 1, 0, 0, 0, 1808, 1806, 1, 0, 0, 0, 1808, 1809, 1, 0, 0, 0, 1809, 280, 1, 0, 0, 0, 1810, 1812, 3, 295, 146, 0, 1811, 1810, 1, 0, 0, 0, 1812, 1815, 1, 0, 0, 0, 1813, 1811, 1, 0, 0, 0, 1813, 1814, 1, 0, 0, 0, 1814, 1816, 1, 0, 0, 0, 1815, 1813, 1, 0, 0, 0, 1816, 1818, 5, 46, 0, 0, 1817, 1819, 3, 295, 146, 0, 1818, 1817, 1, 0, 0, 0, 1819, 1820, 1, 0, 0, 0, 1820, 1818, 1, 0, 0, 0, 1820, 1821, 1, 0, 0, 0, 1821, 282, 1, 0, 0, 0, 1822, 1826, 5, 36, 0, 0, 1823, 1825, 3, 297, 147, 0, 1824, 1823, 1, 0, 0, 0, 1825, 1828, 1, 0, 0, 0, 1826, 1824, 1, 0, 0, 0, 1826, 1827, 1, 0, 0, 0, 1827, 1829, 1, 0, 0, 0, 1828, 1826, 1, 0, 0, 0, 1829, 1831, 5, 46, 0, 0, 1830, 1832, 3, 297, 147, 0, 1831, 1830, 1, 0, 0, 0, 1832, 1833, 1, 0, 0, 0, 1833, 1831, 1, 0, 0, 0, 1833, 1834, 1, 0, 0, 0, 1834, 284, 1, 0, 0, 0, 1835, 1839, 3, 289, 143, 0, 1836, 1839, 3, 291, 144, 0, 1837, 1839, 3, 287, 142, 0, 1838, 1835, 1, 0, 0, 0, 1838, 1836, 1, 0, 0, 0, 1838, 1837, 1, 0, 0, 0, 1839, 286, 1, 0, 0, 0, 1840, 1842, 5, 37, 0, 0, 1841, 1843, 3, 293, 145, 0, 1842, 1841, 1, 0, 0, 0, 1843, 1844, 1, 0, 0, 0, 1844, 1842, 1, 0, 0, 0, 1844, 1845, 1, 0, 0, 0, 1845, 288, 1, 0, 0, 0, 1846, 1848, 3, 295, 146, 0, 1847, 1846, 1, 0, 0, 0, 1848, 1849, 1, 0, 0, 0, 1849, 1847, 1, 0, 0, 0, 1849, 1850, 1, 0, 0, 0, 1850, 290, 1, 0, 0, 0, 1851, 1853, 5, 36, 0, 0, 1852, 1854, 3, 297, 147, 0, 1853, 1852, 1, 0, 0, 0, 1854, 1855, 1, 0, 0, 0, 1855, 1853, 1, 0, 0, 0, 1855, 1856, 1, 0, 0, 0, 1856, 292, 1, 0, 0, 0, 1857, 1858, 7, 4, 0, 0, 1858, 294, 1, 0, 0, 0, 1859, 1860, 7, 5, 0, 0, 1860, 296, 1, 0, 0, 0, 1861, 1862, 7, 6, 0, 0, 1862, 298, 1, 0, 0, 0, 1863, 1867, 5, 39, 0, 0, 1864, 1865, 5, 92, 0, 0, 1865, 1868, 7, 18, 0, 0, 1866, 1868, 8, 15, 0, 0, 1867, 1864, 1, 0, 0, 0, 1867, 1866, 1, 0, 0, 0, 1868, 1869, 1, 0, 0, 0, 1869, 1870, 5, 39, 0, 0, 1870, 300, 1, 0, 0, 0, 1871, 1873, 3, 303, 150, 0, 1872, 1874, 7, 19, 0, 0, 1873, 1872, 1, 0, 0, 0, 1874, 1875, 1, 0, 0, 0, 1875, 1873, 1, 0, 0, 0, 1875, 1876, 1, 0, 0, 0, 1876, 302, 1, 0, 0, 0, 1877, 1881, 5, 33, 0, 0, 1878, 1880, 3, 309, 153, 0, 1879, 1878, 1, 0, 0, 0, 1880, 1883, 1, 0, 0, 0, 1881, 1879, 1, 0, 0, 0, 1881, 1882, 1, 0, 0, 0, 1882, 304, 1, 0, 0, 0, 1883, 1881, 1, 0, 0, 0, 1884, 1888, 3, 307, 152, 0, 1885, 1887, 3, 309, 153, 0, 1886, 1885, 1, 0, 0, 0, 1887, 1890, 1, 0, 0, 0, 1888, 1886, 1, 0, 0, 0, 1888, 1889, 1, 0, 0, 0, 1889, 306, 1, 0, 0, 0, 1890, 1888, 1, 0, 0, 0, 1891, 1892, 7, 7, 0, 0, 1892, 308, 1, 0, 0, 0, 1893, 1894, 7, 8, 0, 0, 1894, 310, 1, 0, 0, 0, 1895, 1896, 5, 64, 0, 0, 1896, 1897, 3, 305, 151, 0, 1897, 312, 1, 0, 0, 0, 1898, 1900, 7, 16, 0, 0, 1899, 1898, 1, 0, 0, 0, 1900, 1901, 1, 0, 0, 0, 1901, 1899, 1, 0, 0, 0, 1901, 1902, 1, 0, 0, 0, 1902, 1903, 1, 0, 0, 0, 1903, 1904, 6, 155, 5, 0, 1904, 314, 1, 0, 0, 0, 1905, 1906, 5, 47, 0, 0, 1906, 1907, 5, 47, 0, 0, 1907, 1911, 1, 0, 0, 0, 1908, 1910, 8, 17, 0, 0, 1909, 1908, 1, 0, 0, 0, 1910, 1913, 1, 0, 0, 0, 1911, 1909, 1, 0, 0, 0, 1911, 1912, 1, 0, 0, 0, 1912, 1914, 1, 0, 0, 0, 1913, 1911, 1, 0, 0, 0, 1914, 1915, 6, 156, 6, 0, 1915, 316, 1, 0, 0, 0, 1916, 1917, 5, 47, 0, 0, 1917, 1918, 5, 42, 0, 0, 1918, 1922, 1, 0, 0, 0, 1919, 1921, 9, 0, 0, 0, 1920, 1919, 1, 0, 0, 0, 1921, 1924, 1, 0, 0, 0, 1922, 1923, 1, 0, 0, 0, 1922, 1920, 1, 0, 0, 0, 1923, 1925, 1, 0, 0, 0, 1924, 1922, 1, 0, 0, 0, 1925, 1926, 5, 42, 0, 0, 1926, 1927, 5, 47, 0, 0, 1927, 1928, 1, 0, 0, 0, 1928, 1929, 6, 157, 6, 0, 1929, 318, 1, 0, 0, 0, 1930, 1932, 5, 60, 0, 0, 1931, 1933, 7, 20, 0, 0, 1932, 1931, 1, 0, 0, 0, 1933, 1934, 1, 0, 0, 0, 1934, 1932, 1, 0, 0, 0, 1934, 1935, 1, 0, 0, 0, 1935, 1936, 1, 0, 0, 0, 1936, 1937, 5, 62, 0, 0, 1937, 1938, 6, 158, 9, 0, 1938, 320, 1, 0, 0, 0, 1939, 1945, 5, 34, 0, 0, 1940, 1941, 5, 92, 0, 0, 1941, 1944, 5, 34, 0, 0, 1942, 1944, 8, 9, 0, 0, 1943, 1940, 1, 0, 0, 0, 1943, 1942, 1, 0, 0, 0, 1944, 1947, 1, 0, 0, 0, 1945, 1943, 1, 0, 0, 0, 1945, 1946, 1, 0, 0, 0, 1946, 1948, 1, 0, 0, 0, 1947, 1945, 1, 0, 0, 0, 1948, 1949, 5, 34, 0, 0, 1949, 1950, 6, 159, 10, 0, 1950, 322, 1, 0, 0, 0, 1951, 1953, 7, 16, 0, 0, 1952, 1951, 1, 0, 0, 0, 1953, 1954, 1, 0, 0, 0, 1954, 1952, 1, 0, 0, 0, 1954, 1955, 1, 0, 0, 0, 1955, 1956, 1, 0, 0, 0, 1956, 1957, 6, 160, 5, 0, 1957, 324, 1, 0, 0, 0, 1958, 1959, 5, 47, 0, 0, 1959, 1960, 5, 47, 0, 0, 1960, 1964, 1, 0, 0, 0, 1961, 1963, 8, 17, 0, 0, 1962, 1961, 1, 0, 0, 0, 1963, 1966, 1, 0, 0, 0, 1964, 1962, 1, 0, 0, 0, 1964, 1965, 1, 0, 0, 0, 1965, 1967, 1, 0, 0, 0, 1966, 1964, 1, 0, 0, 0, 1967, 1968, 6, 161, 6, 0, 1968, 326, 1, 0, 0, 0, 1969, 1970, 5, 47, 0, 0, 1970, 1971, 5, 42, 0, 0, 1971, 1975, 1, 0, 0, 0, 1972, 1974, 9, 0, 0, 0, 1973, 1972, 1, 0, 0, 0, 1974, 1977, 1, 0, 0, 0, 1975, 1976, 1, 0, 0, 0, 1975, 1973, 1, 0, 0, 0, 1976, 1978, 1, 0, 0, 0, 1977, 1975, 1, 0, 0, 0, 1978, 1979, 5, 42, 0, 0, 1979, 1980, 5, 47, 0, 0, 1980, 1981, 1, 0, 0, 0, 1981, 1982, 6, 162, 6, 0, 1982, 328, 1, 0, 0, 0, 67, 0, 1, 2, 438, 636, 813, 824, 832, 880, 942, 947, 954, 959, 966, 971, 978, 985, 990, 997, 1002, 1007, 1014, 1020, 1022, 1027, 1034, 1039, 1051, 1064, 1066, 1071, 1075, 1077, 1080, 1086, 1089, 1094, 1097, 1104, 1114, 1125, 1746, 1790, 1795, 1801, 1808, 1813, 1820, 1826, 1833, 1838, 1844, 1849, 1855, 1867, 1875, 1881, 1888, 1901, 1911, 1922, 1934, 1943, 1945, 1954, 1964, 1975, 11, 1, 0, 0, 1, 67, 1, 1, 81, 2, 1, 82, 3, 1, 108, 4, 0, 1, 0, 0, 2, 0, 1, 134, 5, 1, 135, 6, 1, 158, 7, 1, 159, 8] \ No newline at end of file diff --git a/gen/KickCLexer.java b/gen/KickCLexer.java index 95c1819b9..4bfb13a32 100644 --- a/gen/KickCLexer.java +++ b/gen/KickCLexer.java @@ -26,27 +26,27 @@ public class KickCLexer extends Lexer { GREATER_THAN_EQUAL=33, GREATER_THAN=34, LOGIC_AND=35, LOGIC_OR=36, ASSIGN=37, ASSIGN_COMPOUND=38, TYPEDEF=39, CONST=40, EXTERN=41, EXPORT=42, ALIGN=43, INLINE=44, VOLATILE=45, STATIC=46, INTERRUPT=47, REGISTER=48, LOCAL_RESERVE=49, - ADDRESS=50, ADDRESS_ZEROPAGE=51, ADDRESS_MAINMEM=52, FAR=53, FORM_SSA=54, - FORM_MA=55, INTRINSIC=56, CALLINGCONVENTION=57, IF=58, ELSE=59, WHILE=60, - DO=61, FOR=62, SWITCH=63, RETURN=64, BREAK=65, CONTINUE=66, GOTO=67, ASM=68, - DEFAULT=69, CASE=70, STRUCT=71, UNION=72, ENUM=73, SIZEOF=74, TYPEID=75, - DEFINED=76, KICKASM=77, LOGIC_NOT=78, SIMPLETYPE=79, BOOLEAN=80, KICKASM_BODY=81, - IMPORT=82, INCLUDE=83, PRAGMA=84, DEFINE=85, DEFINE_CONTINUE=86, UNDEF=87, - IFDEF=88, IFNDEF=89, IFIF=90, ELIF=91, IFELSE=92, ENDIF=93, ERROR=94, - TOKEN_STRINGIZE=95, TOKEN_MERGE=96, NUMBER=97, NUMFLOAT=98, BINFLOAT=99, - DECFLOAT=100, HEXFLOAT=101, NUMINT=102, BININTEGER=103, DECINTEGER=104, - HEXINTEGER=105, NAME=106, STRING=107, CHAR=108, WS=109, COMMENT_LINE=110, - COMMENT_BLOCK=111, ASM_BYTE=112, ASM_MNEMONIC=113, ASM_IMM=114, ASM_COLON=115, - ASM_COMMA=116, ASM_PAR_BEGIN=117, ASM_PAR_END=118, ASM_BRACKET_BEGIN=119, - ASM_BRACKET_END=120, ASM_DOT=121, ASM_SHIFT_LEFT=122, ASM_SHIFT_RIGHT=123, - ASM_PLUS=124, ASM_MINUS=125, ASM_LESS_THAN=126, ASM_GREATER_THAN=127, - ASM_MULTIPLY=128, ASM_DIVIDE=129, ASM_CURLY_BEGIN=130, ASM_CURLY_END=131, - ASM_NUMBER=132, ASM_NUMFLOAT=133, ASM_BINFLOAT=134, ASM_DECFLOAT=135, - ASM_HEXFLOAT=136, ASM_NUMINT=137, ASM_BININTEGER=138, ASM_DECINTEGER=139, - ASM_HEXINTEGER=140, ASM_CHAR=141, ASM_MULTI_REL=142, ASM_MULTI_NAME=143, - ASM_NAME=144, ASM_TAG=145, ASM_WS=146, ASM_COMMENT_LINE=147, ASM_COMMENT_BLOCK=148, - IMPORT_SYSTEMFILE=149, IMPORT_LOCALFILE=150, IMPORT_WS=151, IMPORT_COMMENT_LINE=152, - IMPORT_COMMENT_BLOCK=153; + ADDRESS=50, ADDRESS_ZEROPAGE=51, ADDRESS_MAINMEM=52, FAR=53, NEAR=54, + FORM_SSA=55, FORM_MA=56, INTRINSIC=57, CALLINGCONVENTION=58, IF=59, ELSE=60, + WHILE=61, DO=62, FOR=63, SWITCH=64, RETURN=65, BREAK=66, CONTINUE=67, + GOTO=68, ASM=69, DEFAULT=70, CASE=71, STRUCT=72, UNION=73, ENUM=74, SIZEOF=75, + TYPEID=76, DEFINED=77, KICKASM=78, LOGIC_NOT=79, SIMPLETYPE=80, BOOLEAN=81, + KICKASM_BODY=82, IMPORT=83, INCLUDE=84, PRAGMA=85, DEFINE=86, DEFINE_CONTINUE=87, + UNDEF=88, IFDEF=89, IFNDEF=90, IFIF=91, ELIF=92, IFELSE=93, ENDIF=94, + ERROR=95, TOKEN_STRINGIZE=96, TOKEN_MERGE=97, NUMBER=98, NUMFLOAT=99, + BINFLOAT=100, DECFLOAT=101, HEXFLOAT=102, NUMINT=103, BININTEGER=104, + DECINTEGER=105, HEXINTEGER=106, NAME=107, STRING=108, CHAR=109, WS=110, + COMMENT_LINE=111, COMMENT_BLOCK=112, ASM_BYTE=113, ASM_MNEMONIC=114, ASM_IMM=115, + ASM_COLON=116, ASM_COMMA=117, ASM_PAR_BEGIN=118, ASM_PAR_END=119, ASM_BRACKET_BEGIN=120, + ASM_BRACKET_END=121, ASM_DOT=122, ASM_SHIFT_LEFT=123, ASM_SHIFT_RIGHT=124, + ASM_PLUS=125, ASM_MINUS=126, ASM_LESS_THAN=127, ASM_GREATER_THAN=128, + ASM_MULTIPLY=129, ASM_DIVIDE=130, ASM_CURLY_BEGIN=131, ASM_CURLY_END=132, + ASM_NUMBER=133, ASM_NUMFLOAT=134, ASM_BINFLOAT=135, ASM_DECFLOAT=136, + ASM_HEXFLOAT=137, ASM_NUMINT=138, ASM_BININTEGER=139, ASM_DECINTEGER=140, + ASM_HEXINTEGER=141, ASM_CHAR=142, ASM_MULTI_REL=143, ASM_MULTI_NAME=144, + ASM_NAME=145, ASM_TAG=146, ASM_WS=147, ASM_COMMENT_LINE=148, ASM_COMMENT_BLOCK=149, + IMPORT_SYSTEMFILE=150, IMPORT_LOCALFILE=151, IMPORT_WS=152, IMPORT_COMMENT_LINE=153, + IMPORT_COMMENT_BLOCK=154; public static final int ASM_MODE=1, IMPORT_MODE=2; public static String[] channelNames = { @@ -67,11 +67,11 @@ public class KickCLexer extends Lexer { "GREATER_THAN", "LOGIC_AND", "LOGIC_OR", "ASSIGN", "ASSIGN_COMPOUND", "TYPEDEF", "CONST", "EXTERN", "EXPORT", "ALIGN", "INLINE", "VOLATILE", "STATIC", "INTERRUPT", "REGISTER", "LOCAL_RESERVE", "ADDRESS", "ADDRESS_ZEROPAGE", - "ADDRESS_MAINMEM", "FAR", "FORM_SSA", "FORM_MA", "INTRINSIC", "CALLINGCONVENTION", - "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH", "RETURN", "BREAK", "CONTINUE", - "GOTO", "ASM", "DEFAULT", "CASE", "STRUCT", "UNION", "ENUM", "SIZEOF", - "TYPEID", "DEFINED", "KICKASM", "LOGIC_NOT", "SIMPLETYPE", "BOOLEAN", - "KICKASM_BODY", "IMPORT", "INCLUDE", "PRAGMA", "DEFINE", "DEFINE_CONTINUE", + "ADDRESS_MAINMEM", "FAR", "NEAR", "FORM_SSA", "FORM_MA", "INTRINSIC", + "CALLINGCONVENTION", "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH", "RETURN", + "BREAK", "CONTINUE", "GOTO", "ASM", "DEFAULT", "CASE", "STRUCT", "UNION", + "ENUM", "SIZEOF", "TYPEID", "DEFINED", "KICKASM", "LOGIC_NOT", "SIMPLETYPE", + "BOOLEAN", "KICKASM_BODY", "IMPORT", "INCLUDE", "PRAGMA", "DEFINE", "DEFINE_CONTINUE", "UNDEF", "IFDEF", "IFNDEF", "IFIF", "ELIF", "IFELSE", "ENDIF", "ERROR", "TOKEN_STRINGIZE", "TOKEN_MERGE", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", "BINDIGIT", @@ -99,14 +99,15 @@ public class KickCLexer extends Lexer { "'<='", "'>='", null, "'&&'", "'||'", "'='", null, "'typedef'", "'const'", "'extern'", "'__export'", "'__align'", "'inline'", "'volatile'", "'static'", "'__interrupt'", "'register'", "'__zp_reserve'", "'__address'", "'__zp'", - "'__mem'", "'__far'", "'__ssa'", "'__ma'", "'__intrinsic'", null, "'if'", - "'else'", "'while'", "'do'", "'for'", "'switch'", "'return'", "'break'", - "'continue'", "'goto'", "'asm'", "'default'", "'case'", "'struct'", "'union'", - "'enum'", "'sizeof'", "'typeid'", "'defined'", "'kickasm'", "'!'", null, - null, null, "'#import'", "'#include'", "'#pragma'", "'#define'", null, - "'#undef'", "'#ifdef'", "'#ifndef'", "'#if'", "'#elif'", "'#else'", "'#endif'", - "'#error'", null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, "'.byte'", null, "'#'" + "'__mem'", "'__far'", "'__near'", "'__ssa'", "'__ma'", "'__intrinsic'", + null, "'if'", "'else'", "'while'", "'do'", "'for'", "'switch'", "'return'", + "'break'", "'continue'", "'goto'", "'asm'", "'default'", "'case'", "'struct'", + "'union'", "'enum'", "'sizeof'", "'typeid'", "'defined'", "'kickasm'", + "'!'", null, null, null, "'#import'", "'#include'", "'#pragma'", "'#define'", + null, "'#undef'", "'#ifdef'", "'#ifndef'", "'#if'", "'#elif'", "'#else'", + "'#endif'", "'#error'", null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, "'.byte'", null, + "'#'" }; } private static final String[] _LITERAL_NAMES = makeLiteralNames(); @@ -120,11 +121,11 @@ public class KickCLexer extends Lexer { "GREATER_THAN", "LOGIC_AND", "LOGIC_OR", "ASSIGN", "ASSIGN_COMPOUND", "TYPEDEF", "CONST", "EXTERN", "EXPORT", "ALIGN", "INLINE", "VOLATILE", "STATIC", "INTERRUPT", "REGISTER", "LOCAL_RESERVE", "ADDRESS", "ADDRESS_ZEROPAGE", - "ADDRESS_MAINMEM", "FAR", "FORM_SSA", "FORM_MA", "INTRINSIC", "CALLINGCONVENTION", - "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH", "RETURN", "BREAK", "CONTINUE", - "GOTO", "ASM", "DEFAULT", "CASE", "STRUCT", "UNION", "ENUM", "SIZEOF", - "TYPEID", "DEFINED", "KICKASM", "LOGIC_NOT", "SIMPLETYPE", "BOOLEAN", - "KICKASM_BODY", "IMPORT", "INCLUDE", "PRAGMA", "DEFINE", "DEFINE_CONTINUE", + "ADDRESS_MAINMEM", "FAR", "NEAR", "FORM_SSA", "FORM_MA", "INTRINSIC", + "CALLINGCONVENTION", "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH", "RETURN", + "BREAK", "CONTINUE", "GOTO", "ASM", "DEFAULT", "CASE", "STRUCT", "UNION", + "ENUM", "SIZEOF", "TYPEID", "DEFINED", "KICKASM", "LOGIC_NOT", "SIMPLETYPE", + "BOOLEAN", "KICKASM_BODY", "IMPORT", "INCLUDE", "PRAGMA", "DEFINE", "DEFINE_CONTINUE", "UNDEF", "IFDEF", "IFNDEF", "IFIF", "ELIF", "IFELSE", "ENDIF", "ERROR", "TOKEN_STRINGIZE", "TOKEN_MERGE", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", "NAME", @@ -218,28 +219,28 @@ public class KickCLexer extends Lexer { case 0: CURLY_BEGIN_action((RuleContext)_localctx, actionIndex); break; - case 66: + case 67: ASM_action((RuleContext)_localctx, actionIndex); break; - case 80: + case 81: IMPORT_action((RuleContext)_localctx, actionIndex); break; - case 81: + case 82: INCLUDE_action((RuleContext)_localctx, actionIndex); break; - case 107: + case 108: NAME_action((RuleContext)_localctx, actionIndex); break; - case 133: + case 134: ASM_CURLY_BEGIN_action((RuleContext)_localctx, actionIndex); break; - case 134: + case 135: ASM_CURLY_END_action((RuleContext)_localctx, actionIndex); break; - case 157: + case 158: IMPORT_SYSTEMFILE_action((RuleContext)_localctx, actionIndex); break; - case 158: + case 159: IMPORT_LOCALFILE_action((RuleContext)_localctx, actionIndex); break; } @@ -309,7 +310,7 @@ public class KickCLexer extends Lexer { } public static final String _serializedATN = - "\u0004\u0000\u0099\u07b6\u0006\uffff\uffff\u0006\uffff\uffff\u0006\uffff"+ + "\u0004\u0000\u009a\u07bf\u0006\uffff\uffff\u0006\uffff\uffff\u0006\uffff"+ "\uffff\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002\u0002\u0007"+ "\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002\u0005\u0007"+ "\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002\b\u0007\b"+ @@ -351,1240 +352,1245 @@ public class KickCLexer extends Lexer { "\u0002\u0099\u0007\u0099\u0002\u009a\u0007\u009a\u0002\u009b\u0007\u009b"+ "\u0002\u009c\u0007\u009c\u0002\u009d\u0007\u009d\u0002\u009e\u0007\u009e"+ "\u0002\u009f\u0007\u009f\u0002\u00a0\u0007\u00a0\u0002\u00a1\u0007\u00a1"+ - "\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0002"+ - "\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0005"+ - "\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007\u0001\b\u0001"+ - "\b\u0001\t\u0001\t\u0001\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001\u000b"+ - "\u0001\u000b\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001\u000e\u0001"+ - "\u000e\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0011\u0001"+ - "\u0011\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0001"+ - "\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0016\u0001"+ - "\u0016\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0019\u0001"+ - "\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001b\u0001"+ - "\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001d\u0001"+ - "\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001f\u0001\u001f\u0001"+ - "\u001f\u0001 \u0001 \u0001!\u0001!\u0001!\u0001\"\u0001\"\u0001\"\u0001"+ - "#\u0001#\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+ + "\u0002\u00a2\u0007\u00a2\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001"+ + "\u0001\u0001\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004"+ + "\u0001\u0004\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0007"+ + "\u0001\u0007\u0001\b\u0001\b\u0001\t\u0001\t\u0001\t\u0001\n\u0001\n\u0001"+ + "\n\u0001\n\u0001\u000b\u0001\u000b\u0001\f\u0001\f\u0001\r\u0001\r\u0001"+ + "\r\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010"+ + "\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013"+ + "\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015"+ + "\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018"+ + "\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a"+ + "\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001c"+ + "\u0001\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001f"+ + "\u0001\u001f\u0001\u001f\u0001 \u0001 \u0001!\u0001!\u0001!\u0001\"\u0001"+ + "\"\u0001\"\u0001#\u0001#\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+ "$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+ - "$\u0001$\u0001$\u0001$\u0003$\u01b5\b$\u0001%\u0001%\u0001%\u0001%\u0001"+ - "%\u0001%\u0001%\u0001%\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001"+ - "\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001(\u0001(\u0001"+ - "(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001)\u0001)\u0001)\u0001"+ - ")\u0001)\u0001)\u0001)\u0001)\u0001*\u0001*\u0001*\u0001*\u0001*\u0001"+ - "*\u0001*\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001"+ - "+\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001-\u0001-\u0001"+ + "$\u0001$\u0001$\u0001$\u0001$\u0001$\u0003$\u01b7\b$\u0001%\u0001%\u0001"+ + "%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001&\u0001&\u0001&\u0001&\u0001"+ + "&\u0001&\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001"+ + "(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001)\u0001"+ + ")\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001*\u0001*\u0001*\u0001"+ + "*\u0001*\u0001*\u0001*\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001"+ + "+\u0001+\u0001+\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001"+ "-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001"+ - ".\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001/\u0001"+ - "/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001"+ - "/\u0001/\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u0001"+ - "0\u00010\u00011\u00011\u00011\u00011\u00011\u00012\u00012\u00012\u0001"+ - "2\u00012\u00012\u00013\u00013\u00013\u00013\u00013\u00013\u00014\u0001"+ - "4\u00014\u00014\u00014\u00014\u00015\u00015\u00015\u00015\u00015\u0001"+ - "6\u00016\u00016\u00016\u00016\u00016\u00016\u00016\u00016\u00016\u0001"+ - "6\u00016\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u0001"+ + "-\u0001-\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001"+ + ".\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001"+ + "/\u0001/\u0001/\u0001/\u00010\u00010\u00010\u00010\u00010\u00010\u0001"+ + "0\u00010\u00010\u00010\u00011\u00011\u00011\u00011\u00011\u00012\u0001"+ + "2\u00012\u00012\u00012\u00012\u00013\u00013\u00013\u00013\u00013\u0001"+ + "3\u00014\u00014\u00014\u00014\u00014\u00014\u00014\u00015\u00015\u0001"+ + "5\u00015\u00015\u00015\u00016\u00016\u00016\u00016\u00016\u00017\u0001"+ "7\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u0001"+ - "7\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u0001"+ - "7\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u0001"+ - "7\u00017\u00017\u00017\u00017\u00017\u00037\u0274\b7\u00018\u00018\u0001"+ - "8\u00019\u00019\u00019\u00019\u00019\u0001:\u0001:\u0001:\u0001:\u0001"+ - ":\u0001:\u0001;\u0001;\u0001;\u0001<\u0001<\u0001<\u0001<\u0001=\u0001"+ - "=\u0001=\u0001=\u0001=\u0001=\u0001=\u0001>\u0001>\u0001>\u0001>\u0001"+ - ">\u0001>\u0001>\u0001?\u0001?\u0001?\u0001?\u0001?\u0001?\u0001@\u0001"+ - "@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001A\u0001A\u0001"+ - "A\u0001A\u0001A\u0001B\u0001B\u0001B\u0001B\u0001B\u0001B\u0001C\u0001"+ - "C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001D\u0001D\u0001D\u0001"+ - "D\u0001D\u0001E\u0001E\u0001E\u0001E\u0001E\u0001E\u0001E\u0001F\u0001"+ - "F\u0001F\u0001F\u0001F\u0001F\u0001G\u0001G\u0001G\u0001G\u0001G\u0001"+ - "H\u0001H\u0001H\u0001H\u0001H\u0001H\u0001H\u0001I\u0001I\u0001I\u0001"+ - "I\u0001I\u0001I\u0001I\u0001J\u0001J\u0001J\u0001J\u0001J\u0001J\u0001"+ - "J\u0001J\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001"+ - "L\u0001L\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ - "M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ - "M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ - "M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ - "M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ - "M\u0001M\u0001M\u0003M\u0325\bM\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ - "N\u0001N\u0001N\u0001N\u0003N\u0330\bN\u0001O\u0001O\u0001O\u0001O\u0005"+ - "O\u0336\bO\nO\fO\u0339\tO\u0001O\u0001O\u0001O\u0001P\u0001P\u0001P\u0001"+ - "P\u0001P\u0001P\u0001P\u0001P\u0001P\u0001P\u0001Q\u0001Q\u0001Q\u0001"+ - "Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001R\u0001R\u0001"+ - "R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001S\u0001S\u0001S\u0001S\u0001"+ - "S\u0001S\u0001S\u0001S\u0001T\u0001T\u0001T\u0001T\u0001T\u0003T\u0368"+ - "\bT\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001U\u0001V\u0001V\u0001"+ - "V\u0001V\u0001V\u0001V\u0001V\u0001W\u0001W\u0001W\u0001W\u0001W\u0001"+ - "W\u0001W\u0001W\u0001X\u0001X\u0001X\u0001X\u0001Y\u0001Y\u0001Y\u0001"+ - "Y\u0001Y\u0001Y\u0001Z\u0001Z\u0001Z\u0001Z\u0001Z\u0001Z\u0001[\u0001"+ - "[\u0001[\u0001[\u0001[\u0001[\u0001[\u0001\\\u0001\\\u0001\\\u0001\\\u0001"+ - "\\\u0001\\\u0001\\\u0001]\u0001]\u0001]\u0001^\u0001^\u0001^\u0001_\u0001"+ - "_\u0003_\u03a6\b_\u0001`\u0001`\u0001`\u0003`\u03ab\b`\u0001a\u0001a\u0001"+ - "a\u0001a\u0001a\u0003a\u03b2\ba\u0001a\u0005a\u03b5\ba\na\fa\u03b8\ta"+ - "\u0001a\u0001a\u0004a\u03bc\ba\u000ba\fa\u03bd\u0001b\u0005b\u03c1\bb"+ - "\nb\fb\u03c4\tb\u0001b\u0001b\u0004b\u03c8\bb\u000bb\fb\u03c9\u0001c\u0001"+ - "c\u0001c\u0001c\u0001c\u0003c\u03d1\bc\u0001c\u0005c\u03d4\bc\nc\fc\u03d7"+ - "\tc\u0001c\u0001c\u0004c\u03db\bc\u000bc\fc\u03dc\u0001d\u0001d\u0001"+ - "d\u0003d\u03e2\bd\u0001d\u0001d\u0001d\u0003d\u03e7\bd\u0001e\u0001e\u0001"+ - "e\u0004e\u03ec\be\u000be\fe\u03ed\u0001e\u0001e\u0004e\u03f2\be\u000b"+ - "e\fe\u03f3\u0003e\u03f6\be\u0001f\u0004f\u03f9\bf\u000bf\ff\u03fa\u0001"+ - "g\u0001g\u0001g\u0001g\u0001g\u0003g\u0402\bg\u0001g\u0004g\u0405\bg\u000b"+ - "g\fg\u0406\u0001h\u0001h\u0001i\u0001i\u0001j\u0001j\u0001k\u0001k\u0005"+ - "k\u0411\bk\nk\fk\u0414\tk\u0001k\u0001k\u0001l\u0001l\u0001m\u0001m\u0001"+ - "n\u0001n\u0001n\u0001n\u0005n\u0420\bn\nn\fn\u0423\tn\u0001n\u0001n\u0003"+ - "n\u0427\bn\u0001n\u0001n\u0003n\u042b\bn\u0003n\u042d\bn\u0001n\u0003"+ - "n\u0430\bn\u0001o\u0001o\u0001o\u0001o\u0003o\u0436\bo\u0001o\u0003o\u0439"+ - "\bo\u0001o\u0001o\u0001o\u0003o\u043e\bo\u0001o\u0003o\u0441\bo\u0001"+ - "o\u0001o\u0001p\u0004p\u0446\bp\u000bp\fp\u0447\u0001p\u0001p\u0001q\u0001"+ - "q\u0001q\u0001q\u0005q\u0450\bq\nq\fq\u0453\tq\u0001q\u0001q\u0001r\u0001"+ - "r\u0001r\u0001r\u0005r\u045b\br\nr\fr\u045e\tr\u0001r\u0001r\u0001r\u0001"+ - "r\u0001r\u0001s\u0001s\u0001s\u0001s\u0001s\u0001s\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0003t\u06ca\bt\u0001u\u0001u\u0001v\u0001"+ - "v\u0001w\u0001w\u0001x\u0001x\u0001y\u0001y\u0001z\u0001z\u0001{\u0001"+ - "{\u0001|\u0001|\u0001}\u0001}\u0001}\u0001~\u0001~\u0001~\u0001\u007f"+ - "\u0001\u007f\u0001\u0080\u0001\u0080\u0001\u0081\u0001\u0081\u0001\u0082"+ - "\u0001\u0082\u0001\u0083\u0001\u0083\u0001\u0084\u0001\u0084\u0001\u0085"+ - "\u0001\u0085\u0001\u0085\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0087"+ - "\u0001\u0087\u0003\u0087\u06f6\b\u0087\u0001\u0088\u0001\u0088\u0001\u0088"+ - "\u0003\u0088\u06fb\b\u0088\u0001\u0089\u0001\u0089\u0005\u0089\u06ff\b"+ - "\u0089\n\u0089\f\u0089\u0702\t\u0089\u0001\u0089\u0001\u0089\u0004\u0089"+ - "\u0706\b\u0089\u000b\u0089\f\u0089\u0707\u0001\u008a\u0005\u008a\u070b"+ - "\b\u008a\n\u008a\f\u008a\u070e\t\u008a\u0001\u008a\u0001\u008a\u0004\u008a"+ - "\u0712\b\u008a\u000b\u008a\f\u008a\u0713\u0001\u008b\u0001\u008b\u0005"+ - "\u008b\u0718\b\u008b\n\u008b\f\u008b\u071b\t\u008b\u0001\u008b\u0001\u008b"+ - "\u0004\u008b\u071f\b\u008b\u000b\u008b\f\u008b\u0720\u0001\u008c\u0001"+ - "\u008c\u0001\u008c\u0003\u008c\u0726\b\u008c\u0001\u008d\u0001\u008d\u0004"+ - "\u008d\u072a\b\u008d\u000b\u008d\f\u008d\u072b\u0001\u008e\u0004\u008e"+ - "\u072f\b\u008e\u000b\u008e\f\u008e\u0730\u0001\u008f\u0001\u008f\u0004"+ - "\u008f\u0735\b\u008f\u000b\u008f\f\u008f\u0736\u0001\u0090\u0001\u0090"+ - "\u0001\u0091\u0001\u0091\u0001\u0092\u0001\u0092\u0001\u0093\u0001\u0093"+ - "\u0001\u0093\u0001\u0093\u0003\u0093\u0743\b\u0093\u0001\u0093\u0001\u0093"+ - "\u0001\u0094\u0001\u0094\u0004\u0094\u0749\b\u0094\u000b\u0094\f\u0094"+ - "\u074a\u0001\u0095\u0001\u0095\u0005\u0095\u074f\b\u0095\n\u0095\f\u0095"+ - "\u0752\t\u0095\u0001\u0096\u0001\u0096\u0005\u0096\u0756\b\u0096\n\u0096"+ - "\f\u0096\u0759\t\u0096\u0001\u0097\u0001\u0097\u0001\u0098\u0001\u0098"+ - "\u0001\u0099\u0001\u0099\u0001\u0099\u0001\u009a\u0004\u009a\u0763\b\u009a"+ - "\u000b\u009a\f\u009a\u0764\u0001\u009a\u0001\u009a\u0001\u009b\u0001\u009b"+ - "\u0001\u009b\u0001\u009b\u0005\u009b\u076d\b\u009b\n\u009b\f\u009b\u0770"+ - "\t\u009b\u0001\u009b\u0001\u009b\u0001\u009c\u0001\u009c\u0001\u009c\u0001"+ - "\u009c\u0005\u009c\u0778\b\u009c\n\u009c\f\u009c\u077b\t\u009c\u0001\u009c"+ - "\u0001\u009c\u0001\u009c\u0001\u009c\u0001\u009c\u0001\u009d\u0001\u009d"+ - "\u0004\u009d\u0784\b\u009d\u000b\u009d\f\u009d\u0785\u0001\u009d\u0001"+ - "\u009d\u0001\u009d\u0001\u009e\u0001\u009e\u0001\u009e\u0001\u009e\u0005"+ - "\u009e\u078f\b\u009e\n\u009e\f\u009e\u0792\t\u009e\u0001\u009e\u0001\u009e"+ - "\u0001\u009e\u0001\u009f\u0004\u009f\u0798\b\u009f\u000b\u009f\f\u009f"+ - "\u0799\u0001\u009f\u0001\u009f\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001"+ - "\u00a0\u0005\u00a0\u07a2\b\u00a0\n\u00a0\f\u00a0\u07a5\t\u00a0\u0001\u00a0"+ - "\u0001\u00a0\u0001\u00a1\u0001\u00a1\u0001\u00a1\u0001\u00a1\u0005\u00a1"+ - "\u07ad\b\u00a1\n\u00a1\f\u00a1\u07b0\t\u00a1\u0001\u00a1\u0001\u00a1\u0001"+ - "\u00a1\u0001\u00a1\u0001\u00a1\u0004\u0337\u045c\u0779\u07ae\u0000\u00a2"+ - "\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006\r\u0007\u000f"+ - "\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b\u000e\u001d\u000f"+ - "\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015+\u0016-\u0017/\u0018"+ - "1\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\"E#G$I%K&M\'O("+ - "Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6m7o8q9s:u;w}?\u007f@\u0081A\u0083B\u0085"+ - "C\u0087D\u0089E\u008bF\u008dG\u008fH\u0091I\u0093J\u0095K\u0097L\u0099"+ - "M\u009bN\u009dO\u009fP\u00a1Q\u00a3R\u00a5S\u00a7T\u00a9U\u00abV\u00ad"+ - "W\u00afX\u00b1Y\u00b3Z\u00b5[\u00b7\\\u00b9]\u00bb^\u00bd_\u00bf`\u00c1"+ - "a\u00c3b\u00c5c\u00c7d\u00c9e\u00cbf\u00cdg\u00cfh\u00d1i\u00d3\u0000"+ - "\u00d5\u0000\u00d7\u0000\u00d9j\u00db\u0000\u00dd\u0000\u00dfk\u00e1l"+ - "\u00e3m\u00e5n\u00e7o\u00e9p\u00ebq\u00edr\u00efs\u00f1t\u00f3u\u00f5"+ + "7\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u0001"+ + "8\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u0001"+ + "8\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u0001"+ + "8\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u0001"+ + "8\u00018\u00018\u00018\u00018\u00038\u027d\b8\u00019\u00019\u00019\u0001"+ + ":\u0001:\u0001:\u0001:\u0001:\u0001;\u0001;\u0001;\u0001;\u0001;\u0001"+ + ";\u0001<\u0001<\u0001<\u0001=\u0001=\u0001=\u0001=\u0001>\u0001>\u0001"+ + ">\u0001>\u0001>\u0001>\u0001>\u0001?\u0001?\u0001?\u0001?\u0001?\u0001"+ + "?\u0001?\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001A\u0001A\u0001"+ + "A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001D\u0001D\u0001"+ + "D\u0001D\u0001D\u0001D\u0001D\u0001D\u0001E\u0001E\u0001E\u0001E\u0001"+ + "E\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001G\u0001G\u0001"+ + "G\u0001G\u0001G\u0001G\u0001H\u0001H\u0001H\u0001H\u0001H\u0001I\u0001"+ + "I\u0001I\u0001I\u0001I\u0001I\u0001I\u0001J\u0001J\u0001J\u0001J\u0001"+ + "J\u0001J\u0001J\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001"+ + "K\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001M\u0001"+ + "M\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ + "N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ + "N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ + "N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ + "N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ + "N\u0001N\u0003N\u032e\bN\u0001O\u0001O\u0001O\u0001O\u0001O\u0001O\u0001"+ + "O\u0001O\u0001O\u0003O\u0339\bO\u0001P\u0001P\u0001P\u0001P\u0005P\u033f"+ + "\bP\nP\fP\u0342\tP\u0001P\u0001P\u0001P\u0001Q\u0001Q\u0001Q\u0001Q\u0001"+ + "Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001R\u0001R\u0001R\u0001R\u0001"+ + "R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001S\u0001S\u0001S\u0001"+ + "S\u0001S\u0001S\u0001S\u0001S\u0001T\u0001T\u0001T\u0001T\u0001T\u0001"+ + "T\u0001T\u0001T\u0001U\u0001U\u0001U\u0001U\u0001U\u0003U\u0371\bU\u0001"+ + "V\u0001V\u0001V\u0001V\u0001V\u0001V\u0001V\u0001W\u0001W\u0001W\u0001"+ + "W\u0001W\u0001W\u0001W\u0001X\u0001X\u0001X\u0001X\u0001X\u0001X\u0001"+ + "X\u0001X\u0001Y\u0001Y\u0001Y\u0001Y\u0001Z\u0001Z\u0001Z\u0001Z\u0001"+ + "Z\u0001Z\u0001[\u0001[\u0001[\u0001[\u0001[\u0001[\u0001\\\u0001\\\u0001"+ + "\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001]\u0001]\u0001]\u0001]\u0001]"+ + "\u0001]\u0001]\u0001^\u0001^\u0001^\u0001_\u0001_\u0001_\u0001`\u0001"+ + "`\u0003`\u03af\b`\u0001a\u0001a\u0001a\u0003a\u03b4\ba\u0001b\u0001b\u0001"+ + "b\u0001b\u0001b\u0003b\u03bb\bb\u0001b\u0005b\u03be\bb\nb\fb\u03c1\tb"+ + "\u0001b\u0001b\u0004b\u03c5\bb\u000bb\fb\u03c6\u0001c\u0005c\u03ca\bc"+ + "\nc\fc\u03cd\tc\u0001c\u0001c\u0004c\u03d1\bc\u000bc\fc\u03d2\u0001d\u0001"+ + "d\u0001d\u0001d\u0001d\u0003d\u03da\bd\u0001d\u0005d\u03dd\bd\nd\fd\u03e0"+ + "\td\u0001d\u0001d\u0004d\u03e4\bd\u000bd\fd\u03e5\u0001e\u0001e\u0001"+ + "e\u0003e\u03eb\be\u0001e\u0001e\u0001e\u0003e\u03f0\be\u0001f\u0001f\u0001"+ + "f\u0004f\u03f5\bf\u000bf\ff\u03f6\u0001f\u0001f\u0004f\u03fb\bf\u000b"+ + "f\ff\u03fc\u0003f\u03ff\bf\u0001g\u0004g\u0402\bg\u000bg\fg\u0403\u0001"+ + "h\u0001h\u0001h\u0001h\u0001h\u0003h\u040b\bh\u0001h\u0004h\u040e\bh\u000b"+ + "h\fh\u040f\u0001i\u0001i\u0001j\u0001j\u0001k\u0001k\u0001l\u0001l\u0005"+ + "l\u041a\bl\nl\fl\u041d\tl\u0001l\u0001l\u0001m\u0001m\u0001n\u0001n\u0001"+ + "o\u0001o\u0001o\u0001o\u0005o\u0429\bo\no\fo\u042c\to\u0001o\u0001o\u0003"+ + "o\u0430\bo\u0001o\u0001o\u0003o\u0434\bo\u0003o\u0436\bo\u0001o\u0003"+ + "o\u0439\bo\u0001p\u0001p\u0001p\u0001p\u0003p\u043f\bp\u0001p\u0003p\u0442"+ + "\bp\u0001p\u0001p\u0001p\u0003p\u0447\bp\u0001p\u0003p\u044a\bp\u0001"+ + "p\u0001p\u0001q\u0004q\u044f\bq\u000bq\fq\u0450\u0001q\u0001q\u0001r\u0001"+ + "r\u0001r\u0001r\u0005r\u0459\br\nr\fr\u045c\tr\u0001r\u0001r\u0001s\u0001"+ + "s\u0001s\u0001s\u0005s\u0464\bs\ns\fs\u0467\ts\u0001s\u0001s\u0001s\u0001"+ + "s\u0001s\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001u\u0001u\u0003u\u06d3\bu\u0001v\u0001v\u0001w\u0001"+ + "w\u0001x\u0001x\u0001y\u0001y\u0001z\u0001z\u0001{\u0001{\u0001|\u0001"+ + "|\u0001}\u0001}\u0001~\u0001~\u0001~\u0001\u007f\u0001\u007f\u0001\u007f"+ + "\u0001\u0080\u0001\u0080\u0001\u0081\u0001\u0081\u0001\u0082\u0001\u0082"+ + "\u0001\u0083\u0001\u0083\u0001\u0084\u0001\u0084\u0001\u0085\u0001\u0085"+ + "\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0087\u0001\u0087\u0001\u0087"+ + "\u0001\u0088\u0001\u0088\u0003\u0088\u06ff\b\u0088\u0001\u0089\u0001\u0089"+ + "\u0001\u0089\u0003\u0089\u0704\b\u0089\u0001\u008a\u0001\u008a\u0005\u008a"+ + "\u0708\b\u008a\n\u008a\f\u008a\u070b\t\u008a\u0001\u008a\u0001\u008a\u0004"+ + "\u008a\u070f\b\u008a\u000b\u008a\f\u008a\u0710\u0001\u008b\u0005\u008b"+ + "\u0714\b\u008b\n\u008b\f\u008b\u0717\t\u008b\u0001\u008b\u0001\u008b\u0004"+ + "\u008b\u071b\b\u008b\u000b\u008b\f\u008b\u071c\u0001\u008c\u0001\u008c"+ + "\u0005\u008c\u0721\b\u008c\n\u008c\f\u008c\u0724\t\u008c\u0001\u008c\u0001"+ + "\u008c\u0004\u008c\u0728\b\u008c\u000b\u008c\f\u008c\u0729\u0001\u008d"+ + "\u0001\u008d\u0001\u008d\u0003\u008d\u072f\b\u008d\u0001\u008e\u0001\u008e"+ + "\u0004\u008e\u0733\b\u008e\u000b\u008e\f\u008e\u0734\u0001\u008f\u0004"+ + "\u008f\u0738\b\u008f\u000b\u008f\f\u008f\u0739\u0001\u0090\u0001\u0090"+ + "\u0004\u0090\u073e\b\u0090\u000b\u0090\f\u0090\u073f\u0001\u0091\u0001"+ + "\u0091\u0001\u0092\u0001\u0092\u0001\u0093\u0001\u0093\u0001\u0094\u0001"+ + "\u0094\u0001\u0094\u0001\u0094\u0003\u0094\u074c\b\u0094\u0001\u0094\u0001"+ + "\u0094\u0001\u0095\u0001\u0095\u0004\u0095\u0752\b\u0095\u000b\u0095\f"+ + "\u0095\u0753\u0001\u0096\u0001\u0096\u0005\u0096\u0758\b\u0096\n\u0096"+ + "\f\u0096\u075b\t\u0096\u0001\u0097\u0001\u0097\u0005\u0097\u075f\b\u0097"+ + "\n\u0097\f\u0097\u0762\t\u0097\u0001\u0098\u0001\u0098\u0001\u0099\u0001"+ + "\u0099\u0001\u009a\u0001\u009a\u0001\u009a\u0001\u009b\u0004\u009b\u076c"+ + "\b\u009b\u000b\u009b\f\u009b\u076d\u0001\u009b\u0001\u009b\u0001\u009c"+ + "\u0001\u009c\u0001\u009c\u0001\u009c\u0005\u009c\u0776\b\u009c\n\u009c"+ + "\f\u009c\u0779\t\u009c\u0001\u009c\u0001\u009c\u0001\u009d\u0001\u009d"+ + "\u0001\u009d\u0001\u009d\u0005\u009d\u0781\b\u009d\n\u009d\f\u009d\u0784"+ + "\t\u009d\u0001\u009d\u0001\u009d\u0001\u009d\u0001\u009d\u0001\u009d\u0001"+ + "\u009e\u0001\u009e\u0004\u009e\u078d\b\u009e\u000b\u009e\f\u009e\u078e"+ + "\u0001\u009e\u0001\u009e\u0001\u009e\u0001\u009f\u0001\u009f\u0001\u009f"+ + "\u0001\u009f\u0005\u009f\u0798\b\u009f\n\u009f\f\u009f\u079b\t\u009f\u0001"+ + "\u009f\u0001\u009f\u0001\u009f\u0001\u00a0\u0004\u00a0\u07a1\b\u00a0\u000b"+ + "\u00a0\f\u00a0\u07a2\u0001\u00a0\u0001\u00a0\u0001\u00a1\u0001\u00a1\u0001"+ + "\u00a1\u0001\u00a1\u0005\u00a1\u07ab\b\u00a1\n\u00a1\f\u00a1\u07ae\t\u00a1"+ + "\u0001\u00a1\u0001\u00a1\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2"+ + "\u0005\u00a2\u07b6\b\u00a2\n\u00a2\f\u00a2\u07b9\t\u00a2\u0001\u00a2\u0001"+ + "\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0004\u0340\u0465\u0782\u07b7"+ + "\u0000\u00a3\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006\r"+ + "\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b\u000e"+ + "\u001d\u000f\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015+\u0016-\u0017"+ + "/\u00181\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\"E#G$I%"+ + "K&M\'O(Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6m7o8q9s:u;w}?\u007f@\u0081A\u0083"+ + "B\u0085C\u0087D\u0089E\u008bF\u008dG\u008fH\u0091I\u0093J\u0095K\u0097"+ + "L\u0099M\u009bN\u009dO\u009fP\u00a1Q\u00a3R\u00a5S\u00a7T\u00a9U\u00ab"+ + "V\u00adW\u00afX\u00b1Y\u00b3Z\u00b5[\u00b7\\\u00b9]\u00bb^\u00bd_\u00bf"+ + "`\u00c1a\u00c3b\u00c5c\u00c7d\u00c9e\u00cbf\u00cdg\u00cfh\u00d1i\u00d3"+ + "j\u00d5\u0000\u00d7\u0000\u00d9\u0000\u00dbk\u00dd\u0000\u00df\u0000\u00e1"+ + "l\u00e3m\u00e5n\u00e7o\u00e9p\u00ebq\u00edr\u00efs\u00f1t\u00f3u\u00f5"+ "v\u00f7w\u00f9x\u00fby\u00fdz\u00ff{\u0101|\u0103}\u0105~\u0107\u007f"+ "\u0109\u0080\u010b\u0081\u010d\u0082\u010f\u0083\u0111\u0084\u0113\u0085"+ "\u0115\u0086\u0117\u0087\u0119\u0088\u011b\u0089\u011d\u008a\u011f\u008b"+ - "\u0121\u008c\u0123\u0000\u0125\u0000\u0127\u0000\u0129\u008d\u012b\u008e"+ - "\u012d\u008f\u012f\u0090\u0131\u0000\u0133\u0000\u0135\u0091\u0137\u0092"+ + "\u0121\u008c\u0123\u008d\u0125\u0000\u0127\u0000\u0129\u0000\u012b\u008e"+ + "\u012d\u008f\u012f\u0090\u0131\u0091\u0133\u0000\u0135\u0000\u0137\u0092"+ "\u0139\u0093\u013b\u0094\u013d\u0095\u013f\u0096\u0141\u0097\u0143\u0098"+ - "\u0145\u0099\u0003\u0000\u0001\u0002\u0015\u0004\u0000SSUUssuu\n\u0000"+ - "BDIILLSSWWbdiillssww\u0004\u0000LLUUlluu\u0002\u0000BBbb\u0001\u00000"+ - "1\u0001\u000009\u0003\u000009AFaf\u0003\u0000AZ__az\u0004\u000009AZ__"+ - "az\u0001\u0000\"\"\u0001\u0000zz\u0003\u0000aappss\u0003\u0000aammsu\u0007"+ - "\u0000\"\"\'\'09\\\\ffnnrr\u0002\u000009af\u0001\u0000\'\'\u0004\u0000"+ - "\t\n\r\r \u00a0\u00a0\u0002\u0000\n\n\r\r\u0005\u0000\"\"\'\'ffnnrr\u0002"+ - "\u0000++--\u0005\u0000-9AZ\\\\__az\u08bb\u0000\u0003\u0001\u0000\u0000"+ - "\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000\u0000"+ - "\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000\u0000\u0000"+ - "\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000\u0000\u0000"+ - "\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000\u0000\u0000"+ - "\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000\u0000\u0000"+ - "\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000\u0000\u0000\u0000"+ - "\u001d\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000\u0000\u0000\u0000"+ - "!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000\u0000%\u0001"+ - "\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000)\u0001\u0000"+ - "\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001\u0000\u0000\u0000"+ - "\u0000/\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0000\u00003"+ - "\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001\u0000"+ - "\u0000\u0000\u00009\u0001\u0000\u0000\u0000\u0000;\u0001\u0000\u0000\u0000"+ - "\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000\u0000\u0000A"+ - "\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000E\u0001\u0000"+ - "\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001\u0000\u0000\u0000"+ - "\u0000K\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000\u0000\u0000O"+ - "\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000\u0000S\u0001\u0000"+ - "\u0000\u0000\u0000U\u0001\u0000\u0000\u0000\u0000W\u0001\u0000\u0000\u0000"+ - "\u0000Y\u0001\u0000\u0000\u0000\u0000[\u0001\u0000\u0000\u0000\u0000]"+ - "\u0001\u0000\u0000\u0000\u0000_\u0001\u0000\u0000\u0000\u0000a\u0001\u0000"+ - "\u0000\u0000\u0000c\u0001\u0000\u0000\u0000\u0000e\u0001\u0000\u0000\u0000"+ - "\u0000g\u0001\u0000\u0000\u0000\u0000i\u0001\u0000\u0000\u0000\u0000k"+ - "\u0001\u0000\u0000\u0000\u0000m\u0001\u0000\u0000\u0000\u0000o\u0001\u0000"+ - "\u0000\u0000\u0000q\u0001\u0000\u0000\u0000\u0000s\u0001\u0000\u0000\u0000"+ - "\u0000u\u0001\u0000\u0000\u0000\u0000w\u0001\u0000\u0000\u0000\u0000y"+ - "\u0001\u0000\u0000\u0000\u0000{\u0001\u0000\u0000\u0000\u0000}\u0001\u0000"+ - "\u0000\u0000\u0000\u007f\u0001\u0000\u0000\u0000\u0000\u0081\u0001\u0000"+ - "\u0000\u0000\u0000\u0083\u0001\u0000\u0000\u0000\u0000\u0085\u0001\u0000"+ - "\u0000\u0000\u0000\u0087\u0001\u0000\u0000\u0000\u0000\u0089\u0001\u0000"+ - "\u0000\u0000\u0000\u008b\u0001\u0000\u0000\u0000\u0000\u008d\u0001\u0000"+ - "\u0000\u0000\u0000\u008f\u0001\u0000\u0000\u0000\u0000\u0091\u0001\u0000"+ - "\u0000\u0000\u0000\u0093\u0001\u0000\u0000\u0000\u0000\u0095\u0001\u0000"+ - "\u0000\u0000\u0000\u0097\u0001\u0000\u0000\u0000\u0000\u0099\u0001\u0000"+ - "\u0000\u0000\u0000\u009b\u0001\u0000\u0000\u0000\u0000\u009d\u0001\u0000"+ - "\u0000\u0000\u0000\u009f\u0001\u0000\u0000\u0000\u0000\u00a1\u0001\u0000"+ - "\u0000\u0000\u0000\u00a3\u0001\u0000\u0000\u0000\u0000\u00a5\u0001\u0000"+ - "\u0000\u0000\u0000\u00a7\u0001\u0000\u0000\u0000\u0000\u00a9\u0001\u0000"+ - "\u0000\u0000\u0000\u00ab\u0001\u0000\u0000\u0000\u0000\u00ad\u0001\u0000"+ - "\u0000\u0000\u0000\u00af\u0001\u0000\u0000\u0000\u0000\u00b1\u0001\u0000"+ - "\u0000\u0000\u0000\u00b3\u0001\u0000\u0000\u0000\u0000\u00b5\u0001\u0000"+ - "\u0000\u0000\u0000\u00b7\u0001\u0000\u0000\u0000\u0000\u00b9\u0001\u0000"+ - "\u0000\u0000\u0000\u00bb\u0001\u0000\u0000\u0000\u0000\u00bd\u0001\u0000"+ - "\u0000\u0000\u0000\u00bf\u0001\u0000\u0000\u0000\u0000\u00c1\u0001\u0000"+ - "\u0000\u0000\u0000\u00c3\u0001\u0000\u0000\u0000\u0000\u00c5\u0001\u0000"+ - "\u0000\u0000\u0000\u00c7\u0001\u0000\u0000\u0000\u0000\u00c9\u0001\u0000"+ - "\u0000\u0000\u0000\u00cb\u0001\u0000\u0000\u0000\u0000\u00cd\u0001\u0000"+ - "\u0000\u0000\u0000\u00cf\u0001\u0000\u0000\u0000\u0000\u00d1\u0001\u0000"+ - "\u0000\u0000\u0000\u00d9\u0001\u0000\u0000\u0000\u0000\u00df\u0001\u0000"+ - "\u0000\u0000\u0000\u00e1\u0001\u0000\u0000\u0000\u0000\u00e3\u0001\u0000"+ - "\u0000\u0000\u0000\u00e5\u0001\u0000\u0000\u0000\u0000\u00e7\u0001\u0000"+ - "\u0000\u0000\u0001\u00e9\u0001\u0000\u0000\u0000\u0001\u00eb\u0001\u0000"+ - "\u0000\u0000\u0001\u00ed\u0001\u0000\u0000\u0000\u0001\u00ef\u0001\u0000"+ - "\u0000\u0000\u0001\u00f1\u0001\u0000\u0000\u0000\u0001\u00f3\u0001\u0000"+ - "\u0000\u0000\u0001\u00f5\u0001\u0000\u0000\u0000\u0001\u00f7\u0001\u0000"+ - "\u0000\u0000\u0001\u00f9\u0001\u0000\u0000\u0000\u0001\u00fb\u0001\u0000"+ - "\u0000\u0000\u0001\u00fd\u0001\u0000\u0000\u0000\u0001\u00ff\u0001\u0000"+ - "\u0000\u0000\u0001\u0101\u0001\u0000\u0000\u0000\u0001\u0103\u0001\u0000"+ - "\u0000\u0000\u0001\u0105\u0001\u0000\u0000\u0000\u0001\u0107\u0001\u0000"+ - "\u0000\u0000\u0001\u0109\u0001\u0000\u0000\u0000\u0001\u010b\u0001\u0000"+ - "\u0000\u0000\u0001\u010d\u0001\u0000\u0000\u0000\u0001\u010f\u0001\u0000"+ - "\u0000\u0000\u0001\u0111\u0001\u0000\u0000\u0000\u0001\u0113\u0001\u0000"+ - "\u0000\u0000\u0001\u0115\u0001\u0000\u0000\u0000\u0001\u0117\u0001\u0000"+ - "\u0000\u0000\u0001\u0119\u0001\u0000\u0000\u0000\u0001\u011b\u0001\u0000"+ - "\u0000\u0000\u0001\u011d\u0001\u0000\u0000\u0000\u0001\u011f\u0001\u0000"+ - "\u0000\u0000\u0001\u0121\u0001\u0000\u0000\u0000\u0001\u0129\u0001\u0000"+ - "\u0000\u0000\u0001\u012b\u0001\u0000\u0000\u0000\u0001\u012d\u0001\u0000"+ - "\u0000\u0000\u0001\u012f\u0001\u0000\u0000\u0000\u0001\u0135\u0001\u0000"+ - "\u0000\u0000\u0001\u0137\u0001\u0000\u0000\u0000\u0001\u0139\u0001\u0000"+ - "\u0000\u0000\u0001\u013b\u0001\u0000\u0000\u0000\u0002\u013d\u0001\u0000"+ - "\u0000\u0000\u0002\u013f\u0001\u0000\u0000\u0000\u0002\u0141\u0001\u0000"+ - "\u0000\u0000\u0002\u0143\u0001\u0000\u0000\u0000\u0002\u0145\u0001\u0000"+ - "\u0000\u0000\u0003\u0147\u0001\u0000\u0000\u0000\u0005\u014a\u0001\u0000"+ - "\u0000\u0000\u0007\u014c\u0001\u0000\u0000\u0000\t\u014e\u0001\u0000\u0000"+ - "\u0000\u000b\u0150\u0001\u0000\u0000\u0000\r\u0152\u0001\u0000\u0000\u0000"+ - "\u000f\u0154\u0001\u0000\u0000\u0000\u0011\u0156\u0001\u0000\u0000\u0000"+ - "\u0013\u0158\u0001\u0000\u0000\u0000\u0015\u015a\u0001\u0000\u0000\u0000"+ - "\u0017\u015d\u0001\u0000\u0000\u0000\u0019\u0161\u0001\u0000\u0000\u0000"+ - "\u001b\u0163\u0001\u0000\u0000\u0000\u001d\u0165\u0001\u0000\u0000\u0000"+ - "\u001f\u0168\u0001\u0000\u0000\u0000!\u016a\u0001\u0000\u0000\u0000#\u016c"+ - "\u0001\u0000\u0000\u0000%\u016e\u0001\u0000\u0000\u0000\'\u0170\u0001"+ - "\u0000\u0000\u0000)\u0172\u0001\u0000\u0000\u0000+\u0175\u0001\u0000\u0000"+ - "\u0000-\u0178\u0001\u0000\u0000\u0000/\u017a\u0001\u0000\u0000\u00001"+ - "\u017c\u0001\u0000\u0000\u00003\u017e\u0001\u0000\u0000\u00005\u0180\u0001"+ - "\u0000\u0000\u00007\u0183\u0001\u0000\u0000\u00009\u0186\u0001\u0000\u0000"+ - "\u0000;\u0189\u0001\u0000\u0000\u0000=\u018c\u0001\u0000\u0000\u0000?"+ - "\u018e\u0001\u0000\u0000\u0000A\u0191\u0001\u0000\u0000\u0000C\u0194\u0001"+ - "\u0000\u0000\u0000E\u0196\u0001\u0000\u0000\u0000G\u0199\u0001\u0000\u0000"+ - "\u0000I\u019c\u0001\u0000\u0000\u0000K\u01b4\u0001\u0000\u0000\u0000M"+ - "\u01b6\u0001\u0000\u0000\u0000O\u01be\u0001\u0000\u0000\u0000Q\u01c4\u0001"+ - "\u0000\u0000\u0000S\u01cb\u0001\u0000\u0000\u0000U\u01d4\u0001\u0000\u0000"+ - "\u0000W\u01dc\u0001\u0000\u0000\u0000Y\u01e3\u0001\u0000\u0000\u0000["+ - "\u01ec\u0001\u0000\u0000\u0000]\u01f3\u0001\u0000\u0000\u0000_\u01ff\u0001"+ - "\u0000\u0000\u0000a\u0208\u0001\u0000\u0000\u0000c\u0215\u0001\u0000\u0000"+ - "\u0000e\u021f\u0001\u0000\u0000\u0000g\u0224\u0001\u0000\u0000\u0000i"+ - "\u022a\u0001\u0000\u0000\u0000k\u0230\u0001\u0000\u0000\u0000m\u0236\u0001"+ - "\u0000\u0000\u0000o\u023b\u0001\u0000\u0000\u0000q\u0273\u0001\u0000\u0000"+ - "\u0000s\u0275\u0001\u0000\u0000\u0000u\u0278\u0001\u0000\u0000\u0000w"+ - "\u027d\u0001\u0000\u0000\u0000y\u0283\u0001\u0000\u0000\u0000{\u0286\u0001"+ - "\u0000\u0000\u0000}\u028a\u0001\u0000\u0000\u0000\u007f\u0291\u0001\u0000"+ - "\u0000\u0000\u0081\u0298\u0001\u0000\u0000\u0000\u0083\u029e\u0001\u0000"+ - "\u0000\u0000\u0085\u02a7\u0001\u0000\u0000\u0000\u0087\u02ac\u0001\u0000"+ - "\u0000\u0000\u0089\u02b2\u0001\u0000\u0000\u0000\u008b\u02ba\u0001\u0000"+ - "\u0000\u0000\u008d\u02bf\u0001\u0000\u0000\u0000\u008f\u02c6\u0001\u0000"+ - "\u0000\u0000\u0091\u02cc\u0001\u0000\u0000\u0000\u0093\u02d1\u0001\u0000"+ - "\u0000\u0000\u0095\u02d8\u0001\u0000\u0000\u0000\u0097\u02df\u0001\u0000"+ - "\u0000\u0000\u0099\u02e7\u0001\u0000\u0000\u0000\u009b\u02ef\u0001\u0000"+ - "\u0000\u0000\u009d\u0324\u0001\u0000\u0000\u0000\u009f\u032f\u0001\u0000"+ - "\u0000\u0000\u00a1\u0331\u0001\u0000\u0000\u0000\u00a3\u033d\u0001\u0000"+ - "\u0000\u0000\u00a5\u0347\u0001\u0000\u0000\u0000\u00a7\u0352\u0001\u0000"+ - "\u0000\u0000\u00a9\u035a\u0001\u0000\u0000\u0000\u00ab\u0367\u0001\u0000"+ - "\u0000\u0000\u00ad\u0369\u0001\u0000\u0000\u0000\u00af\u0370\u0001\u0000"+ - "\u0000\u0000\u00b1\u0377\u0001\u0000\u0000\u0000\u00b3\u037f\u0001\u0000"+ - "\u0000\u0000\u00b5\u0383\u0001\u0000\u0000\u0000\u00b7\u0389\u0001\u0000"+ - "\u0000\u0000\u00b9\u038f\u0001\u0000\u0000\u0000\u00bb\u0396\u0001\u0000"+ - "\u0000\u0000\u00bd\u039d\u0001\u0000\u0000\u0000\u00bf\u03a0\u0001\u0000"+ - "\u0000\u0000\u00c1\u03a5\u0001\u0000\u0000\u0000\u00c3\u03aa\u0001\u0000"+ - "\u0000\u0000\u00c5\u03b1\u0001\u0000\u0000\u0000\u00c7\u03c2\u0001\u0000"+ - "\u0000\u0000\u00c9\u03d0\u0001\u0000\u0000\u0000\u00cb\u03e1\u0001\u0000"+ - "\u0000\u0000\u00cd\u03f5\u0001\u0000\u0000\u0000\u00cf\u03f8\u0001\u0000"+ - "\u0000\u0000\u00d1\u0401\u0001\u0000\u0000\u0000\u00d3\u0408\u0001\u0000"+ - "\u0000\u0000\u00d5\u040a\u0001\u0000\u0000\u0000\u00d7\u040c\u0001\u0000"+ - "\u0000\u0000\u00d9\u040e\u0001\u0000\u0000\u0000\u00db\u0417\u0001\u0000"+ - "\u0000\u0000\u00dd\u0419\u0001\u0000\u0000\u0000\u00df\u041b\u0001\u0000"+ - "\u0000\u0000\u00e1\u0431\u0001\u0000\u0000\u0000\u00e3\u0445\u0001\u0000"+ - "\u0000\u0000\u00e5\u044b\u0001\u0000\u0000\u0000\u00e7\u0456\u0001\u0000"+ - "\u0000\u0000\u00e9\u0464\u0001\u0000\u0000\u0000\u00eb\u06c9\u0001\u0000"+ - "\u0000\u0000\u00ed\u06cb\u0001\u0000\u0000\u0000\u00ef\u06cd\u0001\u0000"+ - "\u0000\u0000\u00f1\u06cf\u0001\u0000\u0000\u0000\u00f3\u06d1\u0001\u0000"+ - "\u0000\u0000\u00f5\u06d3\u0001\u0000\u0000\u0000\u00f7\u06d5\u0001\u0000"+ - "\u0000\u0000\u00f9\u06d7\u0001\u0000\u0000\u0000\u00fb\u06d9\u0001\u0000"+ - "\u0000\u0000\u00fd\u06db\u0001\u0000\u0000\u0000\u00ff\u06de\u0001\u0000"+ - "\u0000\u0000\u0101\u06e1\u0001\u0000\u0000\u0000\u0103\u06e3\u0001\u0000"+ - "\u0000\u0000\u0105\u06e5\u0001\u0000\u0000\u0000\u0107\u06e7\u0001\u0000"+ - "\u0000\u0000\u0109\u06e9\u0001\u0000\u0000\u0000\u010b\u06eb\u0001\u0000"+ - "\u0000\u0000\u010d\u06ed\u0001\u0000\u0000\u0000\u010f\u06f0\u0001\u0000"+ - "\u0000\u0000\u0111\u06f5\u0001\u0000\u0000\u0000\u0113\u06fa\u0001\u0000"+ - "\u0000\u0000\u0115\u06fc\u0001\u0000\u0000\u0000\u0117\u070c\u0001\u0000"+ - "\u0000\u0000\u0119\u0715\u0001\u0000\u0000\u0000\u011b\u0725\u0001\u0000"+ - "\u0000\u0000\u011d\u0727\u0001\u0000\u0000\u0000\u011f\u072e\u0001\u0000"+ - "\u0000\u0000\u0121\u0732\u0001\u0000\u0000\u0000\u0123\u0738\u0001\u0000"+ - "\u0000\u0000\u0125\u073a\u0001\u0000\u0000\u0000\u0127\u073c\u0001\u0000"+ - "\u0000\u0000\u0129\u073e\u0001\u0000\u0000\u0000\u012b\u0746\u0001\u0000"+ - "\u0000\u0000\u012d\u074c\u0001\u0000\u0000\u0000\u012f\u0753\u0001\u0000"+ - "\u0000\u0000\u0131\u075a\u0001\u0000\u0000\u0000\u0133\u075c\u0001\u0000"+ - "\u0000\u0000\u0135\u075e\u0001\u0000\u0000\u0000\u0137\u0762\u0001\u0000"+ - "\u0000\u0000\u0139\u0768\u0001\u0000\u0000\u0000\u013b\u0773\u0001\u0000"+ - "\u0000\u0000\u013d\u0781\u0001\u0000\u0000\u0000\u013f\u078a\u0001\u0000"+ - "\u0000\u0000\u0141\u0797\u0001\u0000\u0000\u0000\u0143\u079d\u0001\u0000"+ - "\u0000\u0000\u0145\u07a8\u0001\u0000\u0000\u0000\u0147\u0148\u0005{\u0000"+ - "\u0000\u0148\u0149\u0006\u0000\u0000\u0000\u0149\u0004\u0001\u0000\u0000"+ - "\u0000\u014a\u014b\u0005}\u0000\u0000\u014b\u0006\u0001\u0000\u0000\u0000"+ - "\u014c\u014d\u0005[\u0000\u0000\u014d\b\u0001\u0000\u0000\u0000\u014e"+ - "\u014f\u0005]\u0000\u0000\u014f\n\u0001\u0000\u0000\u0000\u0150\u0151"+ - "\u0005(\u0000\u0000\u0151\f\u0001\u0000\u0000\u0000\u0152\u0153\u0005"+ - ")\u0000\u0000\u0153\u000e\u0001\u0000\u0000\u0000\u0154\u0155\u0005;\u0000"+ - "\u0000\u0155\u0010\u0001\u0000\u0000\u0000\u0156\u0157\u0005:\u0000\u0000"+ - "\u0157\u0012\u0001\u0000\u0000\u0000\u0158\u0159\u0005,\u0000\u0000\u0159"+ - "\u0014\u0001\u0000\u0000\u0000\u015a\u015b\u0005.\u0000\u0000\u015b\u015c"+ - "\u0005.\u0000\u0000\u015c\u0016\u0001\u0000\u0000\u0000\u015d\u015e\u0005"+ - ".\u0000\u0000\u015e\u015f\u0005.\u0000\u0000\u015f\u0160\u0005.\u0000"+ - "\u0000\u0160\u0018\u0001\u0000\u0000\u0000\u0161\u0162\u0005?\u0000\u0000"+ - "\u0162\u001a\u0001\u0000\u0000\u0000\u0163\u0164\u0005.\u0000\u0000\u0164"+ - "\u001c\u0001\u0000\u0000\u0000\u0165\u0166\u0005-\u0000\u0000\u0166\u0167"+ - "\u0005>\u0000\u0000\u0167\u001e\u0001\u0000\u0000\u0000\u0168\u0169\u0005"+ - "+\u0000\u0000\u0169 \u0001\u0000\u0000\u0000\u016a\u016b\u0005-\u0000"+ - "\u0000\u016b\"\u0001\u0000\u0000\u0000\u016c\u016d\u0005*\u0000\u0000"+ - "\u016d$\u0001\u0000\u0000\u0000\u016e\u016f\u0005/\u0000\u0000\u016f&"+ - "\u0001\u0000\u0000\u0000\u0170\u0171\u0005%\u0000\u0000\u0171(\u0001\u0000"+ - "\u0000\u0000\u0172\u0173\u0005+\u0000\u0000\u0173\u0174\u0005+\u0000\u0000"+ - "\u0174*\u0001\u0000\u0000\u0000\u0175\u0176\u0005-\u0000\u0000\u0176\u0177"+ - "\u0005-\u0000\u0000\u0177,\u0001\u0000\u0000\u0000\u0178\u0179\u0005&"+ - "\u0000\u0000\u0179.\u0001\u0000\u0000\u0000\u017a\u017b\u0005~\u0000\u0000"+ - "\u017b0\u0001\u0000\u0000\u0000\u017c\u017d\u0005^\u0000\u0000\u017d2"+ - "\u0001\u0000\u0000\u0000\u017e\u017f\u0005|\u0000\u0000\u017f4\u0001\u0000"+ - "\u0000\u0000\u0180\u0181\u0005<\u0000\u0000\u0181\u0182\u0005<\u0000\u0000"+ - "\u01826\u0001\u0000\u0000\u0000\u0183\u0184\u0005>\u0000\u0000\u0184\u0185"+ - "\u0005>\u0000\u0000\u01858\u0001\u0000\u0000\u0000\u0186\u0187\u0005="+ - "\u0000\u0000\u0187\u0188\u0005=\u0000\u0000\u0188:\u0001\u0000\u0000\u0000"+ - "\u0189\u018a\u0005!\u0000\u0000\u018a\u018b\u0005=\u0000\u0000\u018b<"+ - "\u0001\u0000\u0000\u0000\u018c\u018d\u0005<\u0000\u0000\u018d>\u0001\u0000"+ - "\u0000\u0000\u018e\u018f\u0005<\u0000\u0000\u018f\u0190\u0005=\u0000\u0000"+ - "\u0190@\u0001\u0000\u0000\u0000\u0191\u0192\u0005>\u0000\u0000\u0192\u0193"+ - "\u0005=\u0000\u0000\u0193B\u0001\u0000\u0000\u0000\u0194\u0195\u0005>"+ - "\u0000\u0000\u0195D\u0001\u0000\u0000\u0000\u0196\u0197\u0005&\u0000\u0000"+ - "\u0197\u0198\u0005&\u0000\u0000\u0198F\u0001\u0000\u0000\u0000\u0199\u019a"+ - "\u0005|\u0000\u0000\u019a\u019b\u0005|\u0000\u0000\u019bH\u0001\u0000"+ - "\u0000\u0000\u019c\u019d\u0005=\u0000\u0000\u019dJ\u0001\u0000\u0000\u0000"+ - "\u019e\u019f\u0005+\u0000\u0000\u019f\u01b5\u0005=\u0000\u0000\u01a0\u01a1"+ - "\u0005-\u0000\u0000\u01a1\u01b5\u0005=\u0000\u0000\u01a2\u01a3\u0005*"+ - "\u0000\u0000\u01a3\u01b5\u0005=\u0000\u0000\u01a4\u01a5\u0005/\u0000\u0000"+ - "\u01a5\u01b5\u0005=\u0000\u0000\u01a6\u01a7\u0005%\u0000\u0000\u01a7\u01b5"+ - "\u0005=\u0000\u0000\u01a8\u01a9\u0005<\u0000\u0000\u01a9\u01aa\u0005<"+ - "\u0000\u0000\u01aa\u01b5\u0005=\u0000\u0000\u01ab\u01ac\u0005>\u0000\u0000"+ - "\u01ac\u01ad\u0005>\u0000\u0000\u01ad\u01b5\u0005=\u0000\u0000\u01ae\u01af"+ - "\u0005&\u0000\u0000\u01af\u01b5\u0005=\u0000\u0000\u01b0\u01b1\u0005|"+ - "\u0000\u0000\u01b1\u01b5\u0005=\u0000\u0000\u01b2\u01b3\u0005^\u0000\u0000"+ - "\u01b3\u01b5\u0005=\u0000\u0000\u01b4\u019e\u0001\u0000\u0000\u0000\u01b4"+ - "\u01a0\u0001\u0000\u0000\u0000\u01b4\u01a2\u0001\u0000\u0000\u0000\u01b4"+ - "\u01a4\u0001\u0000\u0000\u0000\u01b4\u01a6\u0001\u0000\u0000\u0000\u01b4"+ - "\u01a8\u0001\u0000\u0000\u0000\u01b4\u01ab\u0001\u0000\u0000\u0000\u01b4"+ - "\u01ae\u0001\u0000\u0000\u0000\u01b4\u01b0\u0001\u0000\u0000\u0000\u01b4"+ - "\u01b2\u0001\u0000\u0000\u0000\u01b5L\u0001\u0000\u0000\u0000\u01b6\u01b7"+ - "\u0005t\u0000\u0000\u01b7\u01b8\u0005y\u0000\u0000\u01b8\u01b9\u0005p"+ - "\u0000\u0000\u01b9\u01ba\u0005e\u0000\u0000\u01ba\u01bb\u0005d\u0000\u0000"+ - "\u01bb\u01bc\u0005e\u0000\u0000\u01bc\u01bd\u0005f\u0000\u0000\u01bdN"+ - "\u0001\u0000\u0000\u0000\u01be\u01bf\u0005c\u0000\u0000\u01bf\u01c0\u0005"+ - "o\u0000\u0000\u01c0\u01c1\u0005n\u0000\u0000\u01c1\u01c2\u0005s\u0000"+ - "\u0000\u01c2\u01c3\u0005t\u0000\u0000\u01c3P\u0001\u0000\u0000\u0000\u01c4"+ - "\u01c5\u0005e\u0000\u0000\u01c5\u01c6\u0005x\u0000\u0000\u01c6\u01c7\u0005"+ - "t\u0000\u0000\u01c7\u01c8\u0005e\u0000\u0000\u01c8\u01c9\u0005r\u0000"+ - "\u0000\u01c9\u01ca\u0005n\u0000\u0000\u01caR\u0001\u0000\u0000\u0000\u01cb"+ - "\u01cc\u0005_\u0000\u0000\u01cc\u01cd\u0005_\u0000\u0000\u01cd\u01ce\u0005"+ - "e\u0000\u0000\u01ce\u01cf\u0005x\u0000\u0000\u01cf\u01d0\u0005p\u0000"+ - "\u0000\u01d0\u01d1\u0005o\u0000\u0000\u01d1\u01d2\u0005r\u0000\u0000\u01d2"+ - "\u01d3\u0005t\u0000\u0000\u01d3T\u0001\u0000\u0000\u0000\u01d4\u01d5\u0005"+ - "_\u0000\u0000\u01d5\u01d6\u0005_\u0000\u0000\u01d6\u01d7\u0005a\u0000"+ - "\u0000\u01d7\u01d8\u0005l\u0000\u0000\u01d8\u01d9\u0005i\u0000\u0000\u01d9"+ - "\u01da\u0005g\u0000\u0000\u01da\u01db\u0005n\u0000\u0000\u01dbV\u0001"+ - "\u0000\u0000\u0000\u01dc\u01dd\u0005i\u0000\u0000\u01dd\u01de\u0005n\u0000"+ - "\u0000\u01de\u01df\u0005l\u0000\u0000\u01df\u01e0\u0005i\u0000\u0000\u01e0"+ - "\u01e1\u0005n\u0000\u0000\u01e1\u01e2\u0005e\u0000\u0000\u01e2X\u0001"+ - "\u0000\u0000\u0000\u01e3\u01e4\u0005v\u0000\u0000\u01e4\u01e5\u0005o\u0000"+ - "\u0000\u01e5\u01e6\u0005l\u0000\u0000\u01e6\u01e7\u0005a\u0000\u0000\u01e7"+ - "\u01e8\u0005t\u0000\u0000\u01e8\u01e9\u0005i\u0000\u0000\u01e9\u01ea\u0005"+ - "l\u0000\u0000\u01ea\u01eb\u0005e\u0000\u0000\u01ebZ\u0001\u0000\u0000"+ - "\u0000\u01ec\u01ed\u0005s\u0000\u0000\u01ed\u01ee\u0005t\u0000\u0000\u01ee"+ - "\u01ef\u0005a\u0000\u0000\u01ef\u01f0\u0005t\u0000\u0000\u01f0\u01f1\u0005"+ - "i\u0000\u0000\u01f1\u01f2\u0005c\u0000\u0000\u01f2\\\u0001\u0000\u0000"+ - "\u0000\u01f3\u01f4\u0005_\u0000\u0000\u01f4\u01f5\u0005_\u0000\u0000\u01f5"+ - "\u01f6\u0005i\u0000\u0000\u01f6\u01f7\u0005n\u0000\u0000\u01f7\u01f8\u0005"+ - "t\u0000\u0000\u01f8\u01f9\u0005e\u0000\u0000\u01f9\u01fa\u0005r\u0000"+ - "\u0000\u01fa\u01fb\u0005r\u0000\u0000\u01fb\u01fc\u0005u\u0000\u0000\u01fc"+ - "\u01fd\u0005p\u0000\u0000\u01fd\u01fe\u0005t\u0000\u0000\u01fe^\u0001"+ - "\u0000\u0000\u0000\u01ff\u0200\u0005r\u0000\u0000\u0200\u0201\u0005e\u0000"+ - "\u0000\u0201\u0202\u0005g\u0000\u0000\u0202\u0203\u0005i\u0000\u0000\u0203"+ - "\u0204\u0005s\u0000\u0000\u0204\u0205\u0005t\u0000\u0000\u0205\u0206\u0005"+ - "e\u0000\u0000\u0206\u0207\u0005r\u0000\u0000\u0207`\u0001\u0000\u0000"+ - "\u0000\u0208\u0209\u0005_\u0000\u0000\u0209\u020a\u0005_\u0000\u0000\u020a"+ - "\u020b\u0005z\u0000\u0000\u020b\u020c\u0005p\u0000\u0000\u020c\u020d\u0005"+ - "_\u0000\u0000\u020d\u020e\u0005r\u0000\u0000\u020e\u020f\u0005e\u0000"+ - "\u0000\u020f\u0210\u0005s\u0000\u0000\u0210\u0211\u0005e\u0000\u0000\u0211"+ - "\u0212\u0005r\u0000\u0000\u0212\u0213\u0005v\u0000\u0000\u0213\u0214\u0005"+ - "e\u0000\u0000\u0214b\u0001\u0000\u0000\u0000\u0215\u0216\u0005_\u0000"+ - "\u0000\u0216\u0217\u0005_\u0000\u0000\u0217\u0218\u0005a\u0000\u0000\u0218"+ - "\u0219\u0005d\u0000\u0000\u0219\u021a\u0005d\u0000\u0000\u021a\u021b\u0005"+ - "r\u0000\u0000\u021b\u021c\u0005e\u0000\u0000\u021c\u021d\u0005s\u0000"+ - "\u0000\u021d\u021e\u0005s\u0000\u0000\u021ed\u0001\u0000\u0000\u0000\u021f"+ - "\u0220\u0005_\u0000\u0000\u0220\u0221\u0005_\u0000\u0000\u0221\u0222\u0005"+ - "z\u0000\u0000\u0222\u0223\u0005p\u0000\u0000\u0223f\u0001\u0000\u0000"+ - "\u0000\u0224\u0225\u0005_\u0000\u0000\u0225\u0226\u0005_\u0000\u0000\u0226"+ - "\u0227\u0005m\u0000\u0000\u0227\u0228\u0005e\u0000\u0000\u0228\u0229\u0005"+ - "m\u0000\u0000\u0229h\u0001\u0000\u0000\u0000\u022a\u022b\u0005_\u0000"+ - "\u0000\u022b\u022c\u0005_\u0000\u0000\u022c\u022d\u0005f\u0000\u0000\u022d"+ - "\u022e\u0005a\u0000\u0000\u022e\u022f\u0005r\u0000\u0000\u022fj\u0001"+ - "\u0000\u0000\u0000\u0230\u0231\u0005_\u0000\u0000\u0231\u0232\u0005_\u0000"+ - "\u0000\u0232\u0233\u0005s\u0000\u0000\u0233\u0234\u0005s\u0000\u0000\u0234"+ - "\u0235\u0005a\u0000\u0000\u0235l\u0001\u0000\u0000\u0000\u0236\u0237\u0005"+ - "_\u0000\u0000\u0237\u0238\u0005_\u0000\u0000\u0238\u0239\u0005m\u0000"+ - "\u0000\u0239\u023a\u0005a\u0000\u0000\u023an\u0001\u0000\u0000\u0000\u023b"+ - "\u023c\u0005_\u0000\u0000\u023c\u023d\u0005_\u0000\u0000\u023d\u023e\u0005"+ - "i\u0000\u0000\u023e\u023f\u0005n\u0000\u0000\u023f\u0240\u0005t\u0000"+ - "\u0000\u0240\u0241\u0005r\u0000\u0000\u0241\u0242\u0005i\u0000\u0000\u0242"+ - "\u0243\u0005n\u0000\u0000\u0243\u0244\u0005s\u0000\u0000\u0244\u0245\u0005"+ - "i\u0000\u0000\u0245\u0246\u0005c\u0000\u0000\u0246p\u0001\u0000\u0000"+ - "\u0000\u0247\u0248\u0005_\u0000\u0000\u0248\u0249\u0005_\u0000\u0000\u0249"+ - "\u024a\u0005s\u0000\u0000\u024a\u024b\u0005t\u0000\u0000\u024b\u024c\u0005"+ - "a\u0000\u0000\u024c\u024d\u0005c\u0000\u0000\u024d\u024e\u0005k\u0000"+ - "\u0000\u024e\u024f\u0005c\u0000\u0000\u024f\u0250\u0005a\u0000\u0000\u0250"+ - "\u0251\u0005l\u0000\u0000\u0251\u0274\u0005l\u0000\u0000\u0252\u0253\u0005"+ - "_\u0000\u0000\u0253\u0254\u0005_\u0000\u0000\u0254\u0255\u0005p\u0000"+ - "\u0000\u0255\u0256\u0005h\u0000\u0000\u0256\u0257\u0005i\u0000\u0000\u0257"+ - "\u0258\u0005c\u0000\u0000\u0258\u0259\u0005a\u0000\u0000\u0259\u025a\u0005"+ - "l\u0000\u0000\u025a\u0274\u0005l\u0000\u0000\u025b\u025c\u0005_\u0000"+ - "\u0000\u025c\u025d\u0005_\u0000\u0000\u025d\u025e\u0005v\u0000\u0000\u025e"+ - "\u025f\u0005a\u0000\u0000\u025f\u0260\u0005r\u0000\u0000\u0260\u0261\u0005"+ - "c\u0000\u0000\u0261\u0262\u0005a\u0000\u0000\u0262\u0263\u0005l\u0000"+ - "\u0000\u0263\u0274\u0005l\u0000\u0000\u0264\u0265\u0005_\u0000\u0000\u0265"+ - "\u0266\u0005_\u0000\u0000\u0266\u0267\u0005i\u0000\u0000\u0267\u0268\u0005"+ - "n\u0000\u0000\u0268\u0269\u0005t\u0000\u0000\u0269\u026a\u0005r\u0000"+ - "\u0000\u026a\u026b\u0005i\u0000\u0000\u026b\u026c\u0005n\u0000\u0000\u026c"+ - "\u026d\u0005s\u0000\u0000\u026d\u026e\u0005i\u0000\u0000\u026e\u026f\u0005"+ - "c\u0000\u0000\u026f\u0270\u0005c\u0000\u0000\u0270\u0271\u0005a\u0000"+ - "\u0000\u0271\u0272\u0005l\u0000\u0000\u0272\u0274\u0005l\u0000\u0000\u0273"+ - "\u0247\u0001\u0000\u0000\u0000\u0273\u0252\u0001\u0000\u0000\u0000\u0273"+ - "\u025b\u0001\u0000\u0000\u0000\u0273\u0264\u0001\u0000\u0000\u0000\u0274"+ - "r\u0001\u0000\u0000\u0000\u0275\u0276\u0005i\u0000\u0000\u0276\u0277\u0005"+ - "f\u0000\u0000\u0277t\u0001\u0000\u0000\u0000\u0278\u0279\u0005e\u0000"+ - "\u0000\u0279\u027a\u0005l\u0000\u0000\u027a\u027b\u0005s\u0000\u0000\u027b"+ - "\u027c\u0005e\u0000\u0000\u027cv\u0001\u0000\u0000\u0000\u027d\u027e\u0005"+ - "w\u0000\u0000\u027e\u027f\u0005h\u0000\u0000\u027f\u0280\u0005i\u0000"+ - "\u0000\u0280\u0281\u0005l\u0000\u0000\u0281\u0282\u0005e\u0000\u0000\u0282"+ - "x\u0001\u0000\u0000\u0000\u0283\u0284\u0005d\u0000\u0000\u0284\u0285\u0005"+ - "o\u0000\u0000\u0285z\u0001\u0000\u0000\u0000\u0286\u0287\u0005f\u0000"+ - "\u0000\u0287\u0288\u0005o\u0000\u0000\u0288\u0289\u0005r\u0000\u0000\u0289"+ - "|\u0001\u0000\u0000\u0000\u028a\u028b\u0005s\u0000\u0000\u028b\u028c\u0005"+ - "w\u0000\u0000\u028c\u028d\u0005i\u0000\u0000\u028d\u028e\u0005t\u0000"+ - "\u0000\u028e\u028f\u0005c\u0000\u0000\u028f\u0290\u0005h\u0000\u0000\u0290"+ - "~\u0001\u0000\u0000\u0000\u0291\u0292\u0005r\u0000\u0000\u0292\u0293\u0005"+ - "e\u0000\u0000\u0293\u0294\u0005t\u0000\u0000\u0294\u0295\u0005u\u0000"+ - "\u0000\u0295\u0296\u0005r\u0000\u0000\u0296\u0297\u0005n\u0000\u0000\u0297"+ - "\u0080\u0001\u0000\u0000\u0000\u0298\u0299\u0005b\u0000\u0000\u0299\u029a"+ - "\u0005r\u0000\u0000\u029a\u029b\u0005e\u0000\u0000\u029b\u029c\u0005a"+ - "\u0000\u0000\u029c\u029d\u0005k\u0000\u0000\u029d\u0082\u0001\u0000\u0000"+ - "\u0000\u029e\u029f\u0005c\u0000\u0000\u029f\u02a0\u0005o\u0000\u0000\u02a0"+ - "\u02a1\u0005n\u0000\u0000\u02a1\u02a2\u0005t\u0000\u0000\u02a2\u02a3\u0005"+ - "i\u0000\u0000\u02a3\u02a4\u0005n\u0000\u0000\u02a4\u02a5\u0005u\u0000"+ - "\u0000\u02a5\u02a6\u0005e\u0000\u0000\u02a6\u0084\u0001\u0000\u0000\u0000"+ - "\u02a7\u02a8\u0005g\u0000\u0000\u02a8\u02a9\u0005o\u0000\u0000\u02a9\u02aa"+ - "\u0005t\u0000\u0000\u02aa\u02ab\u0005o\u0000\u0000\u02ab\u0086\u0001\u0000"+ - "\u0000\u0000\u02ac\u02ad\u0005a\u0000\u0000\u02ad\u02ae\u0005s\u0000\u0000"+ - "\u02ae\u02af\u0005m\u0000\u0000\u02af\u02b0\u0001\u0000\u0000\u0000\u02b0"+ - "\u02b1\u0006B\u0001\u0000\u02b1\u0088\u0001\u0000\u0000\u0000\u02b2\u02b3"+ - "\u0005d\u0000\u0000\u02b3\u02b4\u0005e\u0000\u0000\u02b4\u02b5\u0005f"+ - "\u0000\u0000\u02b5\u02b6\u0005a\u0000\u0000\u02b6\u02b7\u0005u\u0000\u0000"+ - "\u02b7\u02b8\u0005l\u0000\u0000\u02b8\u02b9\u0005t\u0000\u0000\u02b9\u008a"+ - "\u0001\u0000\u0000\u0000\u02ba\u02bb\u0005c\u0000\u0000\u02bb\u02bc\u0005"+ - "a\u0000\u0000\u02bc\u02bd\u0005s\u0000\u0000\u02bd\u02be\u0005e\u0000"+ - "\u0000\u02be\u008c\u0001\u0000\u0000\u0000\u02bf\u02c0\u0005s\u0000\u0000"+ - "\u02c0\u02c1\u0005t\u0000\u0000\u02c1\u02c2\u0005r\u0000\u0000\u02c2\u02c3"+ - "\u0005u\u0000\u0000\u02c3\u02c4\u0005c\u0000\u0000\u02c4\u02c5\u0005t"+ - "\u0000\u0000\u02c5\u008e\u0001\u0000\u0000\u0000\u02c6\u02c7\u0005u\u0000"+ - "\u0000\u02c7\u02c8\u0005n\u0000\u0000\u02c8\u02c9\u0005i\u0000\u0000\u02c9"+ - "\u02ca\u0005o\u0000\u0000\u02ca\u02cb\u0005n\u0000\u0000\u02cb\u0090\u0001"+ - "\u0000\u0000\u0000\u02cc\u02cd\u0005e\u0000\u0000\u02cd\u02ce\u0005n\u0000"+ - "\u0000\u02ce\u02cf\u0005u\u0000\u0000\u02cf\u02d0\u0005m\u0000\u0000\u02d0"+ - "\u0092\u0001\u0000\u0000\u0000\u02d1\u02d2\u0005s\u0000\u0000\u02d2\u02d3"+ - "\u0005i\u0000\u0000\u02d3\u02d4\u0005z\u0000\u0000\u02d4\u02d5\u0005e"+ - "\u0000\u0000\u02d5\u02d6\u0005o\u0000\u0000\u02d6\u02d7\u0005f\u0000\u0000"+ - "\u02d7\u0094\u0001\u0000\u0000\u0000\u02d8\u02d9\u0005t\u0000\u0000\u02d9"+ - "\u02da\u0005y\u0000\u0000\u02da\u02db\u0005p\u0000\u0000\u02db\u02dc\u0005"+ - "e\u0000\u0000\u02dc\u02dd\u0005i\u0000\u0000\u02dd\u02de\u0005d\u0000"+ - "\u0000\u02de\u0096\u0001\u0000\u0000\u0000\u02df\u02e0\u0005d\u0000\u0000"+ - "\u02e0\u02e1\u0005e\u0000\u0000\u02e1\u02e2\u0005f\u0000\u0000\u02e2\u02e3"+ - "\u0005i\u0000\u0000\u02e3\u02e4\u0005n\u0000\u0000\u02e4\u02e5\u0005e"+ - "\u0000\u0000\u02e5\u02e6\u0005d\u0000\u0000\u02e6\u0098\u0001\u0000\u0000"+ - "\u0000\u02e7\u02e8\u0005k\u0000\u0000\u02e8\u02e9\u0005i\u0000\u0000\u02e9"+ - "\u02ea\u0005c\u0000\u0000\u02ea\u02eb\u0005k\u0000\u0000\u02eb\u02ec\u0005"+ - "a\u0000\u0000\u02ec\u02ed\u0005s\u0000\u0000\u02ed\u02ee\u0005m\u0000"+ - "\u0000\u02ee\u009a\u0001\u0000\u0000\u0000\u02ef\u02f0\u0005!\u0000\u0000"+ - "\u02f0\u009c\u0001\u0000\u0000\u0000\u02f1\u02f2\u0005s\u0000\u0000\u02f2"+ - "\u02f3\u0005i\u0000\u0000\u02f3\u02f4\u0005g\u0000\u0000\u02f4\u02f5\u0005"+ - "n\u0000\u0000\u02f5\u02f6\u0005e\u0000\u0000\u02f6\u0325\u0005d\u0000"+ - "\u0000\u02f7\u02f8\u0005u\u0000\u0000\u02f8\u02f9\u0005n\u0000\u0000\u02f9"+ - "\u02fa\u0005s\u0000\u0000\u02fa\u02fb\u0005i\u0000\u0000\u02fb\u02fc\u0005"+ - "g\u0000\u0000\u02fc\u02fd\u0005n\u0000\u0000\u02fd\u02fe\u0005e\u0000"+ - "\u0000\u02fe\u0325\u0005d\u0000\u0000\u02ff\u0300\u0005b\u0000\u0000\u0300"+ - "\u0301\u0005y\u0000\u0000\u0301\u0302\u0005t\u0000\u0000\u0302\u0325\u0005"+ - "e\u0000\u0000\u0303\u0304\u0005w\u0000\u0000\u0304\u0305\u0005o\u0000"+ - "\u0000\u0305\u0306\u0005r\u0000\u0000\u0306\u0325\u0005d\u0000\u0000\u0307"+ - "\u0308\u0005d\u0000\u0000\u0308\u0309\u0005w\u0000\u0000\u0309\u030a\u0005"+ - "o\u0000\u0000\u030a\u030b\u0005r\u0000\u0000\u030b\u0325\u0005d\u0000"+ - "\u0000\u030c\u030d\u0005b\u0000\u0000\u030d\u030e\u0005o\u0000\u0000\u030e"+ - "\u030f\u0005o\u0000\u0000\u030f\u0325\u0005l\u0000\u0000\u0310\u0311\u0005"+ - "c\u0000\u0000\u0311\u0312\u0005h\u0000\u0000\u0312\u0313\u0005a\u0000"+ - "\u0000\u0313\u0325\u0005r\u0000\u0000\u0314\u0315\u0005s\u0000\u0000\u0315"+ - "\u0316\u0005h\u0000\u0000\u0316\u0317\u0005o\u0000\u0000\u0317\u0318\u0005"+ - "r\u0000\u0000\u0318\u0325\u0005t\u0000\u0000\u0319\u031a\u0005i\u0000"+ - "\u0000\u031a\u031b\u0005n\u0000\u0000\u031b\u0325\u0005t\u0000\u0000\u031c"+ - "\u031d\u0005l\u0000\u0000\u031d\u031e\u0005o\u0000\u0000\u031e\u031f\u0005"+ - "n\u0000\u0000\u031f\u0325\u0005g\u0000\u0000\u0320\u0321\u0005v\u0000"+ - "\u0000\u0321\u0322\u0005o\u0000\u0000\u0322\u0323\u0005i\u0000\u0000\u0323"+ - "\u0325\u0005d\u0000\u0000\u0324\u02f1\u0001\u0000\u0000\u0000\u0324\u02f7"+ - "\u0001\u0000\u0000\u0000\u0324\u02ff\u0001\u0000\u0000\u0000\u0324\u0303"+ - "\u0001\u0000\u0000\u0000\u0324\u0307\u0001\u0000\u0000\u0000\u0324\u030c"+ - "\u0001\u0000\u0000\u0000\u0324\u0310\u0001\u0000\u0000\u0000\u0324\u0314"+ - "\u0001\u0000\u0000\u0000\u0324\u0319\u0001\u0000\u0000\u0000\u0324\u031c"+ - "\u0001\u0000\u0000\u0000\u0324\u0320\u0001\u0000\u0000\u0000\u0325\u009e"+ - "\u0001\u0000\u0000\u0000\u0326\u0327\u0005t\u0000\u0000\u0327\u0328\u0005"+ - "r\u0000\u0000\u0328\u0329\u0005u\u0000\u0000\u0329\u0330\u0005e\u0000"+ - "\u0000\u032a\u032b\u0005f\u0000\u0000\u032b\u032c\u0005a\u0000\u0000\u032c"+ - "\u032d\u0005l\u0000\u0000\u032d\u032e\u0005s\u0000\u0000\u032e\u0330\u0005"+ - "e\u0000\u0000\u032f\u0326\u0001\u0000\u0000\u0000\u032f\u032a\u0001\u0000"+ - "\u0000\u0000\u0330\u00a0\u0001\u0000\u0000\u0000\u0331\u0332\u0005{\u0000"+ - "\u0000\u0332\u0333\u0005{\u0000\u0000\u0333\u0337\u0001\u0000\u0000\u0000"+ - "\u0334\u0336\t\u0000\u0000\u0000\u0335\u0334\u0001\u0000\u0000\u0000\u0336"+ - "\u0339\u0001\u0000\u0000\u0000\u0337\u0338\u0001\u0000\u0000\u0000\u0337"+ - "\u0335\u0001\u0000\u0000\u0000\u0338\u033a\u0001\u0000\u0000\u0000\u0339"+ - "\u0337\u0001\u0000\u0000\u0000\u033a\u033b\u0005}\u0000\u0000\u033b\u033c"+ - "\u0005}\u0000\u0000\u033c\u00a2\u0001\u0000\u0000\u0000\u033d\u033e\u0005"+ - "#\u0000\u0000\u033e\u033f\u0005i\u0000\u0000\u033f\u0340\u0005m\u0000"+ - "\u0000\u0340\u0341\u0005p\u0000\u0000\u0341\u0342\u0005o\u0000\u0000\u0342"+ - "\u0343\u0005r\u0000\u0000\u0343\u0344\u0005t\u0000\u0000\u0344\u0345\u0001"+ - "\u0000\u0000\u0000\u0345\u0346\u0006P\u0002\u0000\u0346\u00a4\u0001\u0000"+ - "\u0000\u0000\u0347\u0348\u0005#\u0000\u0000\u0348\u0349\u0005i\u0000\u0000"+ - "\u0349\u034a\u0005n\u0000\u0000\u034a\u034b\u0005c\u0000\u0000\u034b\u034c"+ - "\u0005l\u0000\u0000\u034c\u034d\u0005u\u0000\u0000\u034d\u034e\u0005d"+ - "\u0000\u0000\u034e\u034f\u0005e\u0000\u0000\u034f\u0350\u0001\u0000\u0000"+ - "\u0000\u0350\u0351\u0006Q\u0003\u0000\u0351\u00a6\u0001\u0000\u0000\u0000"+ - "\u0352\u0353\u0005#\u0000\u0000\u0353\u0354\u0005p\u0000\u0000\u0354\u0355"+ - "\u0005r\u0000\u0000\u0355\u0356\u0005a\u0000\u0000\u0356\u0357\u0005g"+ - "\u0000\u0000\u0357\u0358\u0005m\u0000\u0000\u0358\u0359\u0005a\u0000\u0000"+ - "\u0359\u00a8\u0001\u0000\u0000\u0000\u035a\u035b\u0005#\u0000\u0000\u035b"+ - "\u035c\u0005d\u0000\u0000\u035c\u035d\u0005e\u0000\u0000\u035d\u035e\u0005"+ - "f\u0000\u0000\u035e\u035f\u0005i\u0000\u0000\u035f\u0360\u0005n\u0000"+ - "\u0000\u0360\u0361\u0005e\u0000\u0000\u0361\u00aa\u0001\u0000\u0000\u0000"+ - "\u0362\u0363\u0005\\\u0000\u0000\u0363\u0368\u0005\n\u0000\u0000\u0364"+ - "\u0365\u0005\\\u0000\u0000\u0365\u0366\u0005\r\u0000\u0000\u0366\u0368"+ - "\u0005\n\u0000\u0000\u0367\u0362\u0001\u0000\u0000\u0000\u0367\u0364\u0001"+ - "\u0000\u0000\u0000\u0368\u00ac\u0001\u0000\u0000\u0000\u0369\u036a\u0005"+ - "#\u0000\u0000\u036a\u036b\u0005u\u0000\u0000\u036b\u036c\u0005n\u0000"+ - "\u0000\u036c\u036d\u0005d\u0000\u0000\u036d\u036e\u0005e\u0000\u0000\u036e"+ - "\u036f\u0005f\u0000\u0000\u036f\u00ae\u0001\u0000\u0000\u0000\u0370\u0371"+ - "\u0005#\u0000\u0000\u0371\u0372\u0005i\u0000\u0000\u0372\u0373\u0005f"+ - "\u0000\u0000\u0373\u0374\u0005d\u0000\u0000\u0374\u0375\u0005e\u0000\u0000"+ - "\u0375\u0376\u0005f\u0000\u0000\u0376\u00b0\u0001\u0000\u0000\u0000\u0377"+ - "\u0378\u0005#\u0000\u0000\u0378\u0379\u0005i\u0000\u0000\u0379\u037a\u0005"+ - "f\u0000\u0000\u037a\u037b\u0005n\u0000\u0000\u037b\u037c\u0005d\u0000"+ - "\u0000\u037c\u037d\u0005e\u0000\u0000\u037d\u037e\u0005f\u0000\u0000\u037e"+ - "\u00b2\u0001\u0000\u0000\u0000\u037f\u0380\u0005#\u0000\u0000\u0380\u0381"+ - "\u0005i\u0000\u0000\u0381\u0382\u0005f\u0000\u0000\u0382\u00b4\u0001\u0000"+ - "\u0000\u0000\u0383\u0384\u0005#\u0000\u0000\u0384\u0385\u0005e\u0000\u0000"+ - "\u0385\u0386\u0005l\u0000\u0000\u0386\u0387\u0005i\u0000\u0000\u0387\u0388"+ - "\u0005f\u0000\u0000\u0388\u00b6\u0001\u0000\u0000\u0000\u0389\u038a\u0005"+ - "#\u0000\u0000\u038a\u038b\u0005e\u0000\u0000\u038b\u038c\u0005l\u0000"+ - "\u0000\u038c\u038d\u0005s\u0000\u0000\u038d\u038e\u0005e\u0000\u0000\u038e"+ - "\u00b8\u0001\u0000\u0000\u0000\u038f\u0390\u0005#\u0000\u0000\u0390\u0391"+ - "\u0005e\u0000\u0000\u0391\u0392\u0005n\u0000\u0000\u0392\u0393\u0005d"+ - "\u0000\u0000\u0393\u0394\u0005i\u0000\u0000\u0394\u0395\u0005f\u0000\u0000"+ - "\u0395\u00ba\u0001\u0000\u0000\u0000\u0396\u0397\u0005#\u0000\u0000\u0397"+ - "\u0398\u0005e\u0000\u0000\u0398\u0399\u0005r\u0000\u0000\u0399\u039a\u0005"+ - "r\u0000\u0000\u039a\u039b\u0005o\u0000\u0000\u039b\u039c\u0005r\u0000"+ - "\u0000\u039c\u00bc\u0001\u0000\u0000\u0000\u039d\u039e\u0005#\u0000\u0000"+ - "\u039e\u039f\u0003\u00d9k\u0000\u039f\u00be\u0001\u0000\u0000\u0000\u03a0"+ - "\u03a1\u0005#\u0000\u0000\u03a1\u03a2\u0003\u00d9k\u0000\u03a2\u00c0\u0001"+ - "\u0000\u0000\u0000\u03a3\u03a6\u0003\u00c3`\u0000\u03a4\u03a6\u0003\u00cb"+ - "d\u0000\u03a5\u03a3\u0001\u0000\u0000\u0000\u03a5\u03a4\u0001\u0000\u0000"+ - "\u0000\u03a6\u00c2\u0001\u0000\u0000\u0000\u03a7\u03ab\u0003\u00c5a\u0000"+ - "\u03a8\u03ab\u0003\u00c7b\u0000\u03a9\u03ab\u0003\u00c9c\u0000\u03aa\u03a7"+ - "\u0001\u0000\u0000\u0000\u03aa\u03a8\u0001\u0000\u0000\u0000\u03aa\u03a9"+ - "\u0001\u0000\u0000\u0000\u03ab\u00c4\u0001\u0000\u0000\u0000\u03ac\u03b2"+ - "\u0005%\u0000\u0000\u03ad\u03ae\u00050\u0000\u0000\u03ae\u03b2\u0005b"+ - "\u0000\u0000\u03af\u03b0\u00050\u0000\u0000\u03b0\u03b2\u0005B\u0000\u0000"+ - "\u03b1\u03ac\u0001\u0000\u0000\u0000\u03b1\u03ad\u0001\u0000\u0000\u0000"+ - "\u03b1\u03af\u0001\u0000\u0000\u0000\u03b2\u03b6\u0001\u0000\u0000\u0000"+ - "\u03b3\u03b5\u0003\u00d3h\u0000\u03b4\u03b3\u0001\u0000\u0000\u0000\u03b5"+ - "\u03b8\u0001\u0000\u0000\u0000\u03b6\u03b4\u0001\u0000\u0000\u0000\u03b6"+ - "\u03b7\u0001\u0000\u0000\u0000\u03b7\u03b9\u0001\u0000\u0000\u0000\u03b8"+ - "\u03b6\u0001\u0000\u0000\u0000\u03b9\u03bb\u0005.\u0000\u0000\u03ba\u03bc"+ - "\u0003\u00d3h\u0000\u03bb\u03ba\u0001\u0000\u0000\u0000\u03bc\u03bd\u0001"+ - "\u0000\u0000\u0000\u03bd\u03bb\u0001\u0000\u0000\u0000\u03bd\u03be\u0001"+ - "\u0000\u0000\u0000\u03be\u00c6\u0001\u0000\u0000\u0000\u03bf\u03c1\u0003"+ - "\u00d5i\u0000\u03c0\u03bf\u0001\u0000\u0000\u0000\u03c1\u03c4\u0001\u0000"+ - "\u0000\u0000\u03c2\u03c0\u0001\u0000\u0000\u0000\u03c2\u03c3\u0001\u0000"+ - "\u0000\u0000\u03c3\u03c5\u0001\u0000\u0000\u0000\u03c4\u03c2\u0001\u0000"+ - "\u0000\u0000\u03c5\u03c7\u0005.\u0000\u0000\u03c6\u03c8\u0003\u00d5i\u0000"+ - "\u03c7\u03c6\u0001\u0000\u0000\u0000\u03c8\u03c9\u0001\u0000\u0000\u0000"+ - "\u03c9\u03c7\u0001\u0000\u0000\u0000\u03c9\u03ca\u0001\u0000\u0000\u0000"+ - "\u03ca\u00c8\u0001\u0000\u0000\u0000\u03cb\u03d1\u0005$\u0000\u0000\u03cc"+ - "\u03cd\u00050\u0000\u0000\u03cd\u03d1\u0005x\u0000\u0000\u03ce\u03cf\u0005"+ - "0\u0000\u0000\u03cf\u03d1\u0005X\u0000\u0000\u03d0\u03cb\u0001\u0000\u0000"+ - "\u0000\u03d0\u03cc\u0001\u0000\u0000\u0000\u03d0\u03ce\u0001\u0000\u0000"+ - "\u0000\u03d1\u03d5\u0001\u0000\u0000\u0000\u03d2\u03d4\u0003\u00d7j\u0000"+ - "\u03d3\u03d2\u0001\u0000\u0000\u0000\u03d4\u03d7\u0001\u0000\u0000\u0000"+ - "\u03d5\u03d3\u0001\u0000\u0000\u0000\u03d5\u03d6\u0001\u0000\u0000\u0000"+ - "\u03d6\u03d8\u0001\u0000\u0000\u0000\u03d7\u03d5\u0001\u0000\u0000\u0000"+ - "\u03d8\u03da\u0005.\u0000\u0000\u03d9\u03db\u0003\u00d7j\u0000\u03da\u03d9"+ - "\u0001\u0000\u0000\u0000\u03db\u03dc\u0001\u0000\u0000\u0000\u03dc\u03da"+ - "\u0001\u0000\u0000\u0000\u03dc\u03dd\u0001\u0000\u0000\u0000\u03dd\u00ca"+ - "\u0001\u0000\u0000\u0000\u03de\u03e2\u0003\u00cff\u0000\u03df\u03e2\u0003"+ - "\u00d1g\u0000\u03e0\u03e2\u0003\u00cde\u0000\u03e1\u03de\u0001\u0000\u0000"+ - "\u0000\u03e1\u03df\u0001\u0000\u0000\u0000\u03e1\u03e0\u0001\u0000\u0000"+ - "\u0000\u03e2\u03e6\u0001\u0000\u0000\u0000\u03e3\u03e4\u0007\u0000\u0000"+ - "\u0000\u03e4\u03e7\u0007\u0001\u0000\u0000\u03e5\u03e7\u0007\u0002\u0000"+ - "\u0000\u03e6\u03e3\u0001\u0000\u0000\u0000\u03e6\u03e5\u0001\u0000\u0000"+ - "\u0000\u03e6\u03e7\u0001\u0000\u0000\u0000\u03e7\u00cc\u0001\u0000\u0000"+ - "\u0000\u03e8\u03e9\u00050\u0000\u0000\u03e9\u03eb\u0007\u0003\u0000\u0000"+ - "\u03ea\u03ec\u0003\u00d3h\u0000\u03eb\u03ea\u0001\u0000\u0000\u0000\u03ec"+ - "\u03ed\u0001\u0000\u0000\u0000\u03ed\u03eb\u0001\u0000\u0000\u0000\u03ed"+ - "\u03ee\u0001\u0000\u0000\u0000\u03ee\u03f6\u0001\u0000\u0000\u0000\u03ef"+ - "\u03f1\u0005%\u0000\u0000\u03f0\u03f2\u0003\u00d3h\u0000\u03f1\u03f0\u0001"+ - "\u0000\u0000\u0000\u03f2\u03f3\u0001\u0000\u0000\u0000\u03f3\u03f1\u0001"+ - "\u0000\u0000\u0000\u03f3\u03f4\u0001\u0000\u0000\u0000\u03f4\u03f6\u0001"+ - "\u0000\u0000\u0000\u03f5\u03e8\u0001\u0000\u0000\u0000\u03f5\u03ef\u0001"+ - "\u0000\u0000\u0000\u03f6\u00ce\u0001\u0000\u0000\u0000\u03f7\u03f9\u0003"+ - "\u00d5i\u0000\u03f8\u03f7\u0001\u0000\u0000\u0000\u03f9\u03fa\u0001\u0000"+ - "\u0000\u0000\u03fa\u03f8\u0001\u0000\u0000\u0000\u03fa\u03fb\u0001\u0000"+ - "\u0000\u0000\u03fb\u00d0\u0001\u0000\u0000\u0000\u03fc\u0402\u0005$\u0000"+ - "\u0000\u03fd\u03fe\u00050\u0000\u0000\u03fe\u0402\u0005x\u0000\u0000\u03ff"+ - "\u0400\u00050\u0000\u0000\u0400\u0402\u0005X\u0000\u0000\u0401\u03fc\u0001"+ - "\u0000\u0000\u0000\u0401\u03fd\u0001\u0000\u0000\u0000\u0401\u03ff\u0001"+ - "\u0000\u0000\u0000\u0402\u0404\u0001\u0000\u0000\u0000\u0403\u0405\u0003"+ - "\u00d7j\u0000\u0404\u0403\u0001\u0000\u0000\u0000\u0405\u0406\u0001\u0000"+ - "\u0000\u0000\u0406\u0404\u0001\u0000\u0000\u0000\u0406\u0407\u0001\u0000"+ - "\u0000\u0000\u0407\u00d2\u0001\u0000\u0000\u0000\u0408\u0409\u0007\u0004"+ - "\u0000\u0000\u0409\u00d4\u0001\u0000\u0000\u0000\u040a\u040b\u0007\u0005"+ - "\u0000\u0000\u040b\u00d6\u0001\u0000\u0000\u0000\u040c\u040d\u0007\u0006"+ - "\u0000\u0000\u040d\u00d8\u0001\u0000\u0000\u0000\u040e\u0412\u0003\u00db"+ - "l\u0000\u040f\u0411\u0003\u00ddm\u0000\u0410\u040f\u0001\u0000\u0000\u0000"+ - "\u0411\u0414\u0001\u0000\u0000\u0000\u0412\u0410\u0001\u0000\u0000\u0000"+ - "\u0412\u0413\u0001\u0000\u0000\u0000\u0413\u0415\u0001\u0000\u0000\u0000"+ - "\u0414\u0412\u0001\u0000\u0000\u0000\u0415\u0416\u0006k\u0004\u0000\u0416"+ - "\u00da\u0001\u0000\u0000\u0000\u0417\u0418\u0007\u0007\u0000\u0000\u0418"+ - "\u00dc\u0001\u0000\u0000\u0000\u0419\u041a\u0007\b\u0000\u0000\u041a\u00de"+ - "\u0001\u0000\u0000\u0000\u041b\u0421\u0005\"\u0000\u0000\u041c\u041d\u0005"+ - "\\\u0000\u0000\u041d\u0420\u0005\"\u0000\u0000\u041e\u0420\b\t\u0000\u0000"+ - "\u041f\u041c\u0001\u0000\u0000\u0000\u041f\u041e\u0001\u0000\u0000\u0000"+ - "\u0420\u0423\u0001\u0000\u0000\u0000\u0421\u041f\u0001\u0000\u0000\u0000"+ - "\u0421\u0422\u0001\u0000\u0000\u0000\u0422\u0424\u0001\u0000\u0000\u0000"+ - "\u0423\u0421\u0001\u0000\u0000\u0000\u0424\u0426\u0005\"\u0000\u0000\u0425"+ - "\u0427\u0007\n\u0000\u0000\u0426\u0425\u0001\u0000\u0000\u0000\u0426\u0427"+ - "\u0001\u0000\u0000\u0000\u0427\u042c\u0001\u0000\u0000\u0000\u0428\u042a"+ - "\u0007\u000b\u0000\u0000\u0429\u042b\u0007\f\u0000\u0000\u042a\u0429\u0001"+ - "\u0000\u0000\u0000\u042a\u042b\u0001\u0000\u0000\u0000\u042b\u042d\u0001"+ - "\u0000\u0000\u0000\u042c\u0428\u0001\u0000\u0000\u0000\u042c\u042d\u0001"+ - "\u0000\u0000\u0000\u042d\u042f\u0001\u0000\u0000\u0000\u042e\u0430\u0007"+ - "\n\u0000\u0000\u042f\u042e\u0001\u0000\u0000\u0000\u042f\u0430\u0001\u0000"+ - "\u0000\u0000\u0430\u00e0\u0001\u0000\u0000\u0000\u0431\u0440\u0005\'\u0000"+ - "\u0000\u0432\u043d\u0005\\\u0000\u0000\u0433\u0435\u0007\r\u0000\u0000"+ - "\u0434\u0436\u0007\u0005\u0000\u0000\u0435\u0434\u0001\u0000\u0000\u0000"+ - "\u0435\u0436\u0001\u0000\u0000\u0000\u0436\u0438\u0001\u0000\u0000\u0000"+ - "\u0437\u0439\u0007\u0005\u0000\u0000\u0438\u0437\u0001\u0000\u0000\u0000"+ - "\u0438\u0439\u0001\u0000\u0000\u0000\u0439\u043e\u0001\u0000\u0000\u0000"+ - "\u043a\u043b\u0005x\u0000\u0000\u043b\u043c\u0007\u000e\u0000\u0000\u043c"+ - "\u043e\u0007\u000e\u0000\u0000\u043d\u0433\u0001\u0000\u0000\u0000\u043d"+ - "\u043a\u0001\u0000\u0000\u0000\u043e\u0441\u0001\u0000\u0000\u0000\u043f"+ - "\u0441\b\u000f\u0000\u0000\u0440\u0432\u0001\u0000\u0000\u0000\u0440\u043f"+ - "\u0001\u0000\u0000\u0000\u0441\u0442\u0001\u0000\u0000\u0000\u0442\u0443"+ - "\u0005\'\u0000\u0000\u0443\u00e2\u0001\u0000\u0000\u0000\u0444\u0446\u0007"+ - "\u0010\u0000\u0000\u0445\u0444\u0001\u0000\u0000\u0000\u0446\u0447\u0001"+ - "\u0000\u0000\u0000\u0447\u0445\u0001\u0000\u0000\u0000\u0447\u0448\u0001"+ - "\u0000\u0000\u0000\u0448\u0449\u0001\u0000\u0000\u0000\u0449\u044a\u0006"+ - "p\u0005\u0000\u044a\u00e4\u0001\u0000\u0000\u0000\u044b\u044c\u0005/\u0000"+ - "\u0000\u044c\u044d\u0005/\u0000\u0000\u044d\u0451\u0001\u0000\u0000\u0000"+ - "\u044e\u0450\b\u0011\u0000\u0000\u044f\u044e\u0001\u0000\u0000\u0000\u0450"+ - "\u0453\u0001\u0000\u0000\u0000\u0451\u044f\u0001\u0000\u0000\u0000\u0451"+ - "\u0452\u0001\u0000\u0000\u0000\u0452\u0454\u0001\u0000\u0000\u0000\u0453"+ - "\u0451\u0001\u0000\u0000\u0000\u0454\u0455\u0006q\u0006\u0000\u0455\u00e6"+ - "\u0001\u0000\u0000\u0000\u0456\u0457\u0005/\u0000\u0000\u0457\u0458\u0005"+ - "*\u0000\u0000\u0458\u045c\u0001\u0000\u0000\u0000\u0459\u045b\t\u0000"+ - "\u0000\u0000\u045a\u0459\u0001\u0000\u0000\u0000\u045b\u045e\u0001\u0000"+ - "\u0000\u0000\u045c\u045d\u0001\u0000\u0000\u0000\u045c\u045a\u0001\u0000"+ - "\u0000\u0000\u045d\u045f\u0001\u0000\u0000\u0000\u045e\u045c\u0001\u0000"+ - "\u0000\u0000\u045f\u0460\u0005*\u0000\u0000\u0460\u0461\u0005/\u0000\u0000"+ - "\u0461\u0462\u0001\u0000\u0000\u0000\u0462\u0463\u0006r\u0006\u0000\u0463"+ - "\u00e8\u0001\u0000\u0000\u0000\u0464\u0465\u0005.\u0000\u0000\u0465\u0466"+ - "\u0005b\u0000\u0000\u0466\u0467\u0005y\u0000\u0000\u0467\u0468\u0005t"+ - "\u0000\u0000\u0468\u0469\u0005e\u0000\u0000\u0469\u00ea\u0001\u0000\u0000"+ - "\u0000\u046a\u046b\u0005b\u0000\u0000\u046b\u046c\u0005r\u0000\u0000\u046c"+ - "\u06ca\u0005k\u0000\u0000\u046d\u046e\u0005o\u0000\u0000\u046e\u046f\u0005"+ - "r\u0000\u0000\u046f\u06ca\u0005a\u0000\u0000\u0470\u0471\u0005k\u0000"+ - "\u0000\u0471\u0472\u0005i\u0000\u0000\u0472\u06ca\u0005l\u0000\u0000\u0473"+ - "\u0474\u0005s\u0000\u0000\u0474\u0475\u0005l\u0000\u0000\u0475\u06ca\u0005"+ - "o\u0000\u0000\u0476\u0477\u0005n\u0000\u0000\u0477\u0478\u0005o\u0000"+ - "\u0000\u0478\u06ca\u0005p\u0000\u0000\u0479\u047a\u0005a\u0000\u0000\u047a"+ - "\u047b\u0005s\u0000\u0000\u047b\u06ca\u0005l\u0000\u0000\u047c\u047d\u0005"+ - "p\u0000\u0000\u047d\u047e\u0005h\u0000\u0000\u047e\u06ca\u0005p\u0000"+ - "\u0000\u047f\u0480\u0005a\u0000\u0000\u0480\u0481\u0005n\u0000\u0000\u0481"+ - "\u06ca\u0005c\u0000\u0000\u0482\u0483\u0005b\u0000\u0000\u0483\u0484\u0005"+ - "p\u0000\u0000\u0484\u06ca\u0005l\u0000\u0000\u0485\u0486\u0005c\u0000"+ - "\u0000\u0486\u0487\u0005l\u0000\u0000\u0487\u06ca\u0005c\u0000\u0000\u0488"+ - "\u0489\u0005j\u0000\u0000\u0489\u048a\u0005s\u0000\u0000\u048a\u06ca\u0005"+ - "r\u0000\u0000\u048b\u048c\u0005a\u0000\u0000\u048c\u048d\u0005n\u0000"+ - "\u0000\u048d\u06ca\u0005d\u0000\u0000\u048e\u048f\u0005r\u0000\u0000\u048f"+ - "\u0490\u0005l\u0000\u0000\u0490\u06ca\u0005a\u0000\u0000\u0491\u0492\u0005"+ - "b\u0000\u0000\u0492\u0493\u0005i\u0000\u0000\u0493\u06ca\u0005t\u0000"+ - "\u0000\u0494\u0495\u0005r\u0000\u0000\u0495\u0496\u0005o\u0000\u0000\u0496"+ - "\u06ca\u0005l\u0000\u0000\u0497\u0498\u0005p\u0000\u0000\u0498\u0499\u0005"+ - "l\u0000\u0000\u0499\u06ca\u0005a\u0000\u0000\u049a\u049b\u0005p\u0000"+ - "\u0000\u049b\u049c\u0005l\u0000\u0000\u049c\u06ca\u0005p\u0000\u0000\u049d"+ - "\u049e\u0005b\u0000\u0000\u049e\u049f\u0005m\u0000\u0000\u049f\u06ca\u0005"+ - "i\u0000\u0000\u04a0\u04a1\u0005s\u0000\u0000\u04a1\u04a2\u0005e\u0000"+ - "\u0000\u04a2\u06ca\u0005c\u0000\u0000\u04a3\u04a4\u0005r\u0000\u0000\u04a4"+ - "\u04a5\u0005t\u0000\u0000\u04a5\u06ca\u0005i\u0000\u0000\u04a6\u04a7\u0005"+ - "e\u0000\u0000\u04a7\u04a8\u0005o\u0000\u0000\u04a8\u06ca\u0005r\u0000"+ - "\u0000\u04a9\u04aa\u0005s\u0000\u0000\u04aa\u04ab\u0005r\u0000\u0000\u04ab"+ - "\u06ca\u0005e\u0000\u0000\u04ac\u04ad\u0005l\u0000\u0000\u04ad\u04ae\u0005"+ - "s\u0000\u0000\u04ae\u06ca\u0005r\u0000\u0000\u04af\u04b0\u0005p\u0000"+ - "\u0000\u04b0\u04b1\u0005h\u0000\u0000\u04b1\u06ca\u0005a\u0000\u0000\u04b2"+ - "\u04b3\u0005a\u0000\u0000\u04b3\u04b4\u0005l\u0000\u0000\u04b4\u06ca\u0005"+ - "r\u0000\u0000\u04b5\u04b6\u0005j\u0000\u0000\u04b6\u04b7\u0005m\u0000"+ - "\u0000\u04b7\u06ca\u0005p\u0000\u0000\u04b8\u04b9\u0005b\u0000\u0000\u04b9"+ - "\u04ba\u0005v\u0000\u0000\u04ba\u06ca\u0005c\u0000\u0000\u04bb\u04bc\u0005"+ - "c\u0000\u0000\u04bc\u04bd\u0005l\u0000\u0000\u04bd\u06ca\u0005i\u0000"+ - "\u0000\u04be\u04bf\u0005r\u0000\u0000\u04bf\u04c0\u0005t\u0000\u0000\u04c0"+ - "\u06ca\u0005s\u0000\u0000\u04c1\u04c2\u0005a\u0000\u0000\u04c2\u04c3\u0005"+ - "d\u0000\u0000\u04c3\u06ca\u0005c\u0000\u0000\u04c4\u04c5\u0005r\u0000"+ - "\u0000\u04c5\u04c6\u0005r\u0000\u0000\u04c6\u06ca\u0005a\u0000\u0000\u04c7"+ - "\u04c8\u0005b\u0000\u0000\u04c8\u04c9\u0005v\u0000\u0000\u04c9\u06ca\u0005"+ - "s\u0000\u0000\u04ca\u04cb\u0005s\u0000\u0000\u04cb\u04cc\u0005e\u0000"+ - "\u0000\u04cc\u06ca\u0005i\u0000\u0000\u04cd\u04ce\u0005s\u0000\u0000\u04ce"+ - "\u04cf\u0005a\u0000\u0000\u04cf\u06ca\u0005x\u0000\u0000\u04d0\u04d1\u0005"+ - "s\u0000\u0000\u04d1\u04d2\u0005t\u0000\u0000\u04d2\u06ca\u0005y\u0000"+ - "\u0000\u04d3\u04d4\u0005s\u0000\u0000\u04d4\u04d5\u0005t\u0000\u0000\u04d5"+ - "\u06ca\u0005a\u0000\u0000\u04d6\u04d7\u0005s\u0000\u0000\u04d7\u04d8\u0005"+ - "t\u0000\u0000\u04d8\u06ca\u0005x\u0000\u0000\u04d9\u04da\u0005d\u0000"+ - "\u0000\u04da\u04db\u0005e\u0000\u0000\u04db\u06ca\u0005y\u0000\u0000\u04dc"+ - "\u04dd\u0005t\u0000\u0000\u04dd\u04de\u0005x\u0000\u0000\u04de\u06ca\u0005"+ - "a\u0000\u0000\u04df\u04e0\u0005x\u0000\u0000\u04e0\u04e1\u0005a\u0000"+ - "\u0000\u04e1\u06ca\u0005a\u0000\u0000\u04e2\u04e3\u0005b\u0000\u0000\u04e3"+ - "\u04e4\u0005c\u0000\u0000\u04e4\u06ca\u0005c\u0000\u0000\u04e5\u04e6\u0005"+ - "a\u0000\u0000\u04e6\u04e7\u0005h\u0000\u0000\u04e7\u06ca\u0005x\u0000"+ - "\u0000\u04e8\u04e9\u0005t\u0000\u0000\u04e9\u04ea\u0005y\u0000\u0000\u04ea"+ - "\u06ca\u0005a\u0000\u0000\u04eb\u04ec\u0005t\u0000\u0000\u04ec\u04ed\u0005"+ - "x\u0000\u0000\u04ed\u06ca\u0005s\u0000\u0000\u04ee\u04ef\u0005t\u0000"+ - "\u0000\u04ef\u04f0\u0005a\u0000\u0000\u04f0\u06ca\u0005s\u0000\u0000\u04f1"+ - "\u04f2\u0005s\u0000\u0000\u04f2\u04f3\u0005h\u0000\u0000\u04f3\u06ca\u0005"+ - "y\u0000\u0000\u04f4\u04f5\u0005s\u0000\u0000\u04f5\u04f6\u0005h\u0000"+ - "\u0000\u04f6\u06ca\u0005x\u0000\u0000\u04f7\u04f8\u0005l\u0000\u0000\u04f8"+ - "\u04f9\u0005d\u0000\u0000\u04f9\u06ca\u0005y\u0000\u0000\u04fa\u04fb\u0005"+ - "l\u0000\u0000\u04fb\u04fc\u0005d\u0000\u0000\u04fc\u06ca\u0005a\u0000"+ - "\u0000\u04fd\u04fe\u0005l\u0000\u0000\u04fe\u04ff\u0005d\u0000\u0000\u04ff"+ - "\u06ca\u0005x\u0000\u0000\u0500\u0501\u0005l\u0000\u0000\u0501\u0502\u0005"+ - "a\u0000\u0000\u0502\u06ca\u0005x\u0000\u0000\u0503\u0504\u0005t\u0000"+ - "\u0000\u0504\u0505\u0005a\u0000\u0000\u0505\u06ca\u0005y\u0000\u0000\u0506"+ - "\u0507\u0005t\u0000\u0000\u0507\u0508\u0005a\u0000\u0000\u0508\u06ca\u0005"+ - "x\u0000\u0000\u0509\u050a\u0005b\u0000\u0000\u050a\u050b\u0005c\u0000"+ - "\u0000\u050b\u06ca\u0005s\u0000\u0000\u050c\u050d\u0005c\u0000\u0000\u050d"+ - "\u050e\u0005l\u0000\u0000\u050e\u06ca\u0005v\u0000\u0000\u050f\u0510\u0005"+ - "t\u0000\u0000\u0510\u0511\u0005s\u0000\u0000\u0511\u06ca\u0005x\u0000"+ - "\u0000\u0512\u0513\u0005l\u0000\u0000\u0513\u0514\u0005a\u0000\u0000\u0514"+ - "\u06ca\u0005s\u0000\u0000\u0515\u0516\u0005c\u0000\u0000\u0516\u0517\u0005"+ - "p\u0000\u0000\u0517\u06ca\u0005y\u0000\u0000\u0518\u0519\u0005c\u0000"+ - "\u0000\u0519\u051a\u0005m\u0000\u0000\u051a\u06ca\u0005p\u0000\u0000\u051b"+ - "\u051c\u0005c\u0000\u0000\u051c\u051d\u0005p\u0000\u0000\u051d\u06ca\u0005"+ - "x\u0000\u0000\u051e\u051f\u0005d\u0000\u0000\u051f\u0520\u0005c\u0000"+ - "\u0000\u0520\u06ca\u0005p\u0000\u0000\u0521\u0522\u0005d\u0000\u0000\u0522"+ - "\u0523\u0005e\u0000\u0000\u0523\u06ca\u0005c\u0000\u0000\u0524\u0525\u0005"+ - "i\u0000\u0000\u0525\u0526\u0005n\u0000\u0000\u0526\u06ca\u0005c\u0000"+ - "\u0000\u0527\u0528\u0005a\u0000\u0000\u0528\u0529\u0005x\u0000\u0000\u0529"+ - "\u06ca\u0005s\u0000\u0000\u052a\u052b\u0005b\u0000\u0000\u052b\u052c\u0005"+ - "n\u0000\u0000\u052c\u06ca\u0005e\u0000\u0000\u052d\u052e\u0005c\u0000"+ - "\u0000\u052e\u052f\u0005l\u0000\u0000\u052f\u06ca\u0005d\u0000\u0000\u0530"+ - "\u0531\u0005s\u0000\u0000\u0531\u0532\u0005b\u0000\u0000\u0532\u06ca\u0005"+ - "c\u0000\u0000\u0533\u0534\u0005i\u0000\u0000\u0534\u0535\u0005s\u0000"+ - "\u0000\u0535\u06ca\u0005c\u0000\u0000\u0536\u0537\u0005i\u0000\u0000\u0537"+ - "\u0538\u0005n\u0000\u0000\u0538\u06ca\u0005x\u0000\u0000\u0539\u053a\u0005"+ - "b\u0000\u0000\u053a\u053b\u0005e\u0000\u0000\u053b\u06ca\u0005q\u0000"+ - "\u0000\u053c\u053d\u0005s\u0000\u0000\u053d\u053e\u0005e\u0000\u0000\u053e"+ - "\u06ca\u0005d\u0000\u0000\u053f\u0540\u0005d\u0000\u0000\u0540\u0541\u0005"+ - "e\u0000\u0000\u0541\u06ca\u0005x\u0000\u0000\u0542\u0543\u0005i\u0000"+ - "\u0000\u0543\u0544\u0005n\u0000\u0000\u0544\u06ca\u0005y\u0000\u0000\u0545"+ - "\u0546\u0005r\u0000\u0000\u0546\u0547\u0005o\u0000\u0000\u0547\u06ca\u0005"+ - "r\u0000\u0000\u0548\u0549\u0005b\u0000\u0000\u0549\u054a\u0005b\u0000"+ - "\u0000\u054a\u054b\u0005r\u0000\u0000\u054b\u06ca\u00050\u0000\u0000\u054c"+ - "\u054d\u0005b\u0000\u0000\u054d\u054e\u0005b\u0000\u0000\u054e\u054f\u0005"+ - "r\u0000\u0000\u054f\u06ca\u00051\u0000\u0000\u0550\u0551\u0005b\u0000"+ - "\u0000\u0551\u0552\u0005b\u0000\u0000\u0552\u0553\u0005r\u0000\u0000\u0553"+ - "\u06ca\u00052\u0000\u0000\u0554\u0555\u0005b\u0000\u0000\u0555\u0556\u0005"+ - "b\u0000\u0000\u0556\u0557\u0005r\u0000\u0000\u0557\u06ca\u00053\u0000"+ - "\u0000\u0558\u0559\u0005b\u0000\u0000\u0559\u055a\u0005b\u0000\u0000\u055a"+ - "\u055b\u0005r\u0000\u0000\u055b\u06ca\u00054\u0000\u0000\u055c\u055d\u0005"+ - "b\u0000\u0000\u055d\u055e\u0005b\u0000\u0000\u055e\u055f\u0005r\u0000"+ - "\u0000\u055f\u06ca\u00055\u0000\u0000\u0560\u0561\u0005b\u0000\u0000\u0561"+ - "\u0562\u0005b\u0000\u0000\u0562\u0563\u0005r\u0000\u0000\u0563\u06ca\u0005"+ - "6\u0000\u0000\u0564\u0565\u0005b\u0000\u0000\u0565\u0566\u0005b\u0000"+ - "\u0000\u0566\u0567\u0005r\u0000\u0000\u0567\u06ca\u00057\u0000\u0000\u0568"+ - "\u0569\u0005b\u0000\u0000\u0569\u056a\u0005b\u0000\u0000\u056a\u056b\u0005"+ - "s\u0000\u0000\u056b\u06ca\u00050\u0000\u0000\u056c\u056d\u0005b\u0000"+ - "\u0000\u056d\u056e\u0005b\u0000\u0000\u056e\u056f\u0005s\u0000\u0000\u056f"+ - "\u06ca\u00051\u0000\u0000\u0570\u0571\u0005b\u0000\u0000\u0571\u0572\u0005"+ - "b\u0000\u0000\u0572\u0573\u0005s\u0000\u0000\u0573\u06ca\u00052\u0000"+ - "\u0000\u0574\u0575\u0005b\u0000\u0000\u0575\u0576\u0005b\u0000\u0000\u0576"+ - "\u0577\u0005s\u0000\u0000\u0577\u06ca\u00053\u0000\u0000\u0578\u0579\u0005"+ - "b\u0000\u0000\u0579\u057a\u0005b\u0000\u0000\u057a\u057b\u0005s\u0000"+ - "\u0000\u057b\u06ca\u00054\u0000\u0000\u057c\u057d\u0005b\u0000\u0000\u057d"+ - "\u057e\u0005b\u0000\u0000\u057e\u057f\u0005s\u0000\u0000\u057f\u06ca\u0005"+ - "5\u0000\u0000\u0580\u0581\u0005b\u0000\u0000\u0581\u0582\u0005b\u0000"+ - "\u0000\u0582\u0583\u0005s\u0000\u0000\u0583\u06ca\u00056\u0000\u0000\u0584"+ - "\u0585\u0005b\u0000\u0000\u0585\u0586\u0005b\u0000\u0000\u0586\u0587\u0005"+ - "s\u0000\u0000\u0587\u06ca\u00057\u0000\u0000\u0588\u0589\u0005b\u0000"+ - "\u0000\u0589\u058a\u0005r\u0000\u0000\u058a\u06ca\u0005a\u0000\u0000\u058b"+ - "\u058c\u0005p\u0000\u0000\u058c\u058d\u0005h\u0000\u0000\u058d\u06ca\u0005"+ - "x\u0000\u0000\u058e\u058f\u0005p\u0000\u0000\u058f\u0590\u0005h\u0000"+ - "\u0000\u0590\u06ca\u0005y\u0000\u0000\u0591\u0592\u0005p\u0000\u0000\u0592"+ - "\u0593\u0005l\u0000\u0000\u0593\u06ca\u0005x\u0000\u0000\u0594\u0595\u0005"+ - "p\u0000\u0000\u0595\u0596\u0005l\u0000\u0000\u0596\u06ca\u0005y\u0000"+ - "\u0000\u0597\u0598\u0005r\u0000\u0000\u0598\u0599\u0005m\u0000\u0000\u0599"+ - "\u059a\u0005b\u0000\u0000\u059a\u06ca\u00050\u0000\u0000\u059b\u059c\u0005"+ - "r\u0000\u0000\u059c\u059d\u0005m\u0000\u0000\u059d\u059e\u0005b\u0000"+ - "\u0000\u059e\u06ca\u00051\u0000\u0000\u059f\u05a0\u0005r\u0000\u0000\u05a0"+ - "\u05a1\u0005m\u0000\u0000\u05a1\u05a2\u0005b\u0000\u0000\u05a2\u06ca\u0005"+ - "2\u0000\u0000\u05a3\u05a4\u0005r\u0000\u0000\u05a4\u05a5\u0005m\u0000"+ - "\u0000\u05a5\u05a6\u0005b\u0000\u0000\u05a6\u06ca\u00053\u0000\u0000\u05a7"+ - "\u05a8\u0005r\u0000\u0000\u05a8\u05a9\u0005m\u0000\u0000\u05a9\u05aa\u0005"+ - "b\u0000\u0000\u05aa\u06ca\u00054\u0000\u0000\u05ab\u05ac\u0005r\u0000"+ - "\u0000\u05ac\u05ad\u0005m\u0000\u0000\u05ad\u05ae\u0005b\u0000\u0000\u05ae"+ - "\u06ca\u00055\u0000\u0000\u05af\u05b0\u0005r\u0000\u0000\u05b0\u05b1\u0005"+ - "m\u0000\u0000\u05b1\u05b2\u0005b\u0000\u0000\u05b2\u06ca\u00056\u0000"+ - "\u0000\u05b3\u05b4\u0005r\u0000\u0000\u05b4\u05b5\u0005m\u0000\u0000\u05b5"+ - "\u05b6\u0005b\u0000\u0000\u05b6\u06ca\u00057\u0000\u0000\u05b7\u05b8\u0005"+ - "s\u0000\u0000\u05b8\u05b9\u0005m\u0000\u0000\u05b9\u05ba\u0005b\u0000"+ - "\u0000\u05ba\u06ca\u00050\u0000\u0000\u05bb\u05bc\u0005s\u0000\u0000\u05bc"+ - "\u05bd\u0005m\u0000\u0000\u05bd\u05be\u0005b\u0000\u0000\u05be\u06ca\u0005"+ - "1\u0000\u0000\u05bf\u05c0\u0005s\u0000\u0000\u05c0\u05c1\u0005m\u0000"+ - "\u0000\u05c1\u05c2\u0005b\u0000\u0000\u05c2\u06ca\u00052\u0000\u0000\u05c3"+ - "\u05c4\u0005s\u0000\u0000\u05c4\u05c5\u0005m\u0000\u0000\u05c5\u05c6\u0005"+ - "b\u0000\u0000\u05c6\u06ca\u00053\u0000\u0000\u05c7\u05c8\u0005s\u0000"+ - "\u0000\u05c8\u05c9\u0005m\u0000\u0000\u05c9\u05ca\u0005b\u0000\u0000\u05ca"+ - "\u06ca\u00054\u0000\u0000\u05cb\u05cc\u0005s\u0000\u0000\u05cc\u05cd\u0005"+ - "m\u0000\u0000\u05cd\u05ce\u0005b\u0000\u0000\u05ce\u06ca\u00055\u0000"+ - "\u0000\u05cf\u05d0\u0005s\u0000\u0000\u05d0\u05d1\u0005m\u0000\u0000\u05d1"+ - "\u05d2\u0005b\u0000\u0000\u05d2\u06ca\u00056\u0000\u0000\u05d3\u05d4\u0005"+ - "s\u0000\u0000\u05d4\u05d5\u0005m\u0000\u0000\u05d5\u05d6\u0005b\u0000"+ - "\u0000\u05d6\u06ca\u00057\u0000\u0000\u05d7\u05d8\u0005s\u0000\u0000\u05d8"+ - "\u05d9\u0005t\u0000\u0000\u05d9\u06ca\u0005p\u0000\u0000\u05da\u05db\u0005"+ - "s\u0000\u0000\u05db\u05dc\u0005t\u0000\u0000\u05dc\u06ca\u0005z\u0000"+ - "\u0000\u05dd\u05de\u0005t\u0000\u0000\u05de\u05df\u0005r\u0000\u0000\u05df"+ - "\u06ca\u0005b\u0000\u0000\u05e0\u05e1\u0005t\u0000\u0000\u05e1\u05e2\u0005"+ - "s\u0000\u0000\u05e2\u06ca\u0005b\u0000\u0000\u05e3\u05e4\u0005w\u0000"+ - "\u0000\u05e4\u05e5\u0005a\u0000\u0000\u05e5\u06ca\u0005i\u0000\u0000\u05e6"+ - "\u05e7\u0005c\u0000\u0000\u05e7\u05e8\u0005l\u0000\u0000\u05e8\u06ca\u0005"+ - "e\u0000\u0000\u05e9\u05ea\u0005s\u0000\u0000\u05ea\u05eb\u0005e\u0000"+ - "\u0000\u05eb\u06ca\u0005e\u0000\u0000\u05ec\u05ed\u0005t\u0000\u0000\u05ed"+ - "\u05ee\u0005s\u0000\u0000\u05ee\u06ca\u0005y\u0000\u0000\u05ef\u05f0\u0005"+ - "l\u0000\u0000\u05f0\u05f1\u0005b\u0000\u0000\u05f1\u05f2\u0005p\u0000"+ - "\u0000\u05f2\u06ca\u0005l\u0000\u0000\u05f3\u05f4\u0005i\u0000\u0000\u05f4"+ - "\u05f5\u0005n\u0000\u0000\u05f5\u06ca\u0005z\u0000\u0000\u05f6\u05f7\u0005"+ - "t\u0000\u0000\u05f7\u05f8\u0005y\u0000\u0000\u05f8\u06ca\u0005s\u0000"+ - "\u0000\u05f9\u05fa\u0005l\u0000\u0000\u05fa\u05fb\u0005b\u0000\u0000\u05fb"+ - "\u05fc\u0005m\u0000\u0000\u05fc\u06ca\u0005i\u0000\u0000\u05fd\u05fe\u0005"+ - "d\u0000\u0000\u05fe\u05ff\u0005e\u0000\u0000\u05ff\u06ca\u0005z\u0000"+ - "\u0000\u0600\u0601\u0005n\u0000\u0000\u0601\u0602\u0005e\u0000\u0000\u0602"+ - "\u06ca\u0005g\u0000\u0000\u0603\u0604\u0005a\u0000\u0000\u0604\u0605\u0005"+ - "s\u0000\u0000\u0605\u06ca\u0005r\u0000\u0000\u0606\u0607\u0005t\u0000"+ - "\u0000\u0607\u0608\u0005a\u0000\u0000\u0608\u06ca\u0005z\u0000\u0000\u0609"+ - "\u060a\u0005l\u0000\u0000\u060a\u060b\u0005b\u0000\u0000\u060b\u060c\u0005"+ - "v\u0000\u0000\u060c\u06ca\u0005c\u0000\u0000\u060d\u060e\u0005t\u0000"+ - "\u0000\u060e\u060f\u0005a\u0000\u0000\u060f\u06ca\u0005b\u0000\u0000\u0610"+ - "\u0611\u0005m\u0000\u0000\u0611\u0612\u0005a\u0000\u0000\u0612\u06ca\u0005"+ - "p\u0000\u0000\u0613\u0614\u0005r\u0000\u0000\u0614\u0615\u0005t\u0000"+ - "\u0000\u0615\u06ca\u0005n\u0000\u0000\u0616\u0617\u0005l\u0000\u0000\u0617"+ - "\u0618\u0005b\u0000\u0000\u0618\u0619\u0005s\u0000\u0000\u0619\u06ca\u0005"+ - "r\u0000\u0000\u061a\u061b\u0005t\u0000\u0000\u061b\u061c\u0005z\u0000"+ - "\u0000\u061c\u06ca\u0005a\u0000\u0000\u061d\u061e\u0005l\u0000\u0000\u061e"+ - "\u061f\u0005b\u0000\u0000\u061f\u0620\u0005v\u0000\u0000\u0620\u06ca\u0005"+ - "s\u0000\u0000\u0621\u0622\u0005t\u0000\u0000\u0622\u0623\u0005b\u0000"+ - "\u0000\u0623\u06ca\u0005a\u0000\u0000\u0624\u0625\u0005l\u0000\u0000\u0625"+ - "\u0626\u0005b\u0000\u0000\u0626\u0627\u0005r\u0000\u0000\u0627\u06ca\u0005"+ - "a\u0000\u0000\u0628\u0629\u0005l\u0000\u0000\u0629\u062a\u0005b\u0000"+ - "\u0000\u062a\u062b\u0005c\u0000\u0000\u062b\u06ca\u0005c\u0000\u0000\u062c"+ - "\u062d\u0005l\u0000\u0000\u062d\u062e\u0005d\u0000\u0000\u062e\u06ca\u0005"+ - "z\u0000\u0000\u062f\u0630\u0005l\u0000\u0000\u0630\u0631\u0005b\u0000"+ - "\u0000\u0631\u0632\u0005c\u0000\u0000\u0632\u06ca\u0005s\u0000\u0000\u0633"+ - "\u0634\u0005c\u0000\u0000\u0634\u0635\u0005p\u0000\u0000\u0635\u06ca\u0005"+ - "z\u0000\u0000\u0636\u0637\u0005d\u0000\u0000\u0637\u0638\u0005e\u0000"+ - "\u0000\u0638\u06ca\u0005w\u0000\u0000\u0639\u063a\u0005a\u0000\u0000\u063a"+ - "\u063b\u0005s\u0000\u0000\u063b\u06ca\u0005w\u0000\u0000\u063c\u063d\u0005"+ - "l\u0000\u0000\u063d\u063e\u0005b\u0000\u0000\u063e\u063f\u0005n\u0000"+ - "\u0000\u063f\u06ca\u0005e\u0000\u0000\u0640\u0641\u0005p\u0000\u0000\u0641"+ - "\u0642\u0005h\u0000\u0000\u0642\u06ca\u0005z\u0000\u0000\u0643\u0644\u0005"+ - "i\u0000\u0000\u0644\u0645\u0005n\u0000\u0000\u0645\u06ca\u0005w\u0000"+ - "\u0000\u0646\u0647\u0005r\u0000\u0000\u0647\u0648\u0005o\u0000\u0000\u0648"+ - "\u06ca\u0005w\u0000\u0000\u0649\u064a\u0005l\u0000\u0000\u064a\u064b\u0005"+ - "b\u0000\u0000\u064b\u064c\u0005e\u0000\u0000\u064c\u06ca\u0005q\u0000"+ - "\u0000\u064d\u064e\u0005p\u0000\u0000\u064e\u064f\u0005h\u0000\u0000\u064f"+ - "\u06ca\u0005w\u0000\u0000\u0650\u0651\u0005p\u0000\u0000\u0651\u0652\u0005"+ - "l\u0000\u0000\u0652\u06ca\u0005z\u0000\u0000\u0653\u0654\u0005e\u0000"+ - "\u0000\u0654\u0655\u0005o\u0000\u0000\u0655\u06ca\u0005m\u0000\u0000\u0656"+ - "\u0657\u0005a\u0000\u0000\u0657\u0658\u0005d\u0000\u0000\u0658\u0659\u0005"+ - "c\u0000\u0000\u0659\u06ca\u0005q\u0000\u0000\u065a\u065b\u0005a\u0000"+ - "\u0000\u065b\u065c\u0005n\u0000\u0000\u065c\u065d\u0005d\u0000\u0000\u065d"+ - "\u06ca\u0005q\u0000\u0000\u065e\u065f\u0005a\u0000\u0000\u065f\u0660\u0005"+ - "s\u0000\u0000\u0660\u0661\u0005l\u0000\u0000\u0661\u06ca\u0005q\u0000"+ - "\u0000\u0662\u0663\u0005a\u0000\u0000\u0663\u0664\u0005s\u0000\u0000\u0664"+ - "\u0665\u0005r\u0000\u0000\u0665\u06ca\u0005q\u0000\u0000\u0666\u0667\u0005"+ - "b\u0000\u0000\u0667\u0668\u0005i\u0000\u0000\u0668\u0669\u0005t\u0000"+ - "\u0000\u0669\u06ca\u0005q\u0000\u0000\u066a\u066b\u0005c\u0000\u0000\u066b"+ - "\u066c\u0005p\u0000\u0000\u066c\u06ca\u0005q\u0000\u0000\u066d\u066e\u0005"+ - "d\u0000\u0000\u066e\u066f\u0005e\u0000\u0000\u066f\u06ca\u0005q\u0000"+ - "\u0000\u0670\u0671\u0005e\u0000\u0000\u0671\u0672\u0005o\u0000\u0000\u0672"+ - "\u0673\u0005r\u0000\u0000\u0673\u06ca\u0005q\u0000\u0000\u0674\u0675\u0005"+ - "i\u0000\u0000\u0675\u0676\u0005n\u0000\u0000\u0676\u06ca\u0005q\u0000"+ - "\u0000\u0677\u0678\u0005l\u0000\u0000\u0678\u0679\u0005d\u0000\u0000\u0679"+ - "\u06ca\u0005q\u0000\u0000\u067a\u067b\u0005l\u0000\u0000\u067b\u067c\u0005"+ - "s\u0000\u0000\u067c\u067d\u0005r\u0000\u0000\u067d\u06ca\u0005q\u0000"+ - "\u0000\u067e\u067f\u0005o\u0000\u0000\u067f\u0680\u0005r\u0000\u0000\u0680"+ - "\u06ca\u0005q\u0000\u0000\u0681\u0682\u0005r\u0000\u0000\u0682\u0683\u0005"+ - "o\u0000\u0000\u0683\u0684\u0005l\u0000\u0000\u0684\u06ca\u0005q\u0000"+ - "\u0000\u0685\u0686\u0005r\u0000\u0000\u0686\u0687\u0005o\u0000\u0000\u0687"+ - "\u0688\u0005r\u0000\u0000\u0688\u06ca\u0005q\u0000\u0000\u0689\u068a\u0005"+ - "s\u0000\u0000\u068a\u068b\u0005b\u0000\u0000\u068b\u068c\u0005c\u0000"+ - "\u0000\u068c\u06ca\u0005q\u0000\u0000\u068d\u068e\u0005s\u0000\u0000\u068e"+ - "\u068f\u0005t\u0000\u0000\u068f\u06ca\u0005q\u0000\u0000\u0690\u0691\u0005"+ - "s\u0000\u0000\u0691\u0692\u0005x\u0000\u0000\u0692\u06ca\u0005y\u0000"+ - "\u0000\u0693\u0694\u0005s\u0000\u0000\u0694\u0695\u0005t\u0000\u0000\u0695"+ - "\u06ca\u00050\u0000\u0000\u0696\u0697\u0005s\u0000\u0000\u0697\u0698\u0005"+ - "t\u0000\u0000\u0698\u06ca\u00051\u0000\u0000\u0699\u069a\u0005s\u0000"+ - "\u0000\u069a\u069b\u0005t\u0000\u0000\u069b\u06ca\u00052\u0000\u0000\u069c"+ - "\u069d\u0005s\u0000\u0000\u069d\u069e\u0005a\u0000\u0000\u069e\u06ca\u0005"+ - "y\u0000\u0000\u069f\u06a0\u0005t\u0000\u0000\u06a0\u06a1\u0005m\u0000"+ - "\u0000\u06a1\u06ca\u0005a\u0000\u0000\u06a2\u06a3\u0005b\u0000\u0000\u06a3"+ - "\u06a4\u0005s\u0000\u0000\u06a4\u06ca\u0005r\u0000\u0000\u06a5\u06a6\u0005"+ - "t\u0000\u0000\u06a6\u06a7\u0005a\u0000\u0000\u06a7\u06ca\u0005m\u0000"+ - "\u0000\u06a8\u06a9\u0005c\u0000\u0000\u06a9\u06aa\u0005s\u0000\u0000\u06aa"+ - "\u06ca\u0005l\u0000\u0000\u06ab\u06ac\u0005c\u0000\u0000\u06ac\u06ad\u0005"+ - "l\u0000\u0000\u06ad\u06ca\u0005a\u0000\u0000\u06ae\u06af\u0005c\u0000"+ - "\u0000\u06af\u06b0\u0005l\u0000\u0000\u06b0\u06ca\u0005x\u0000\u0000\u06b1"+ - "\u06b2\u0005c\u0000\u0000\u06b2\u06b3\u0005l\u0000\u0000\u06b3\u06ca\u0005"+ - "y\u0000\u0000\u06b4\u06b5\u0005c\u0000\u0000\u06b5\u06b6\u0005s\u0000"+ - "\u0000\u06b6\u06ca\u0005h\u0000\u0000\u06b7\u06b8\u0005s\u0000\u0000\u06b8"+ - "\u06b9\u0005e\u0000\u0000\u06b9\u06ca\u0005t\u0000\u0000\u06ba\u06bb\u0005"+ - "t\u0000\u0000\u06bb\u06bc\u0005s\u0000\u0000\u06bc\u06ca\u0005t\u0000"+ - "\u0000\u06bd\u06be\u0005t\u0000\u0000\u06be\u06bf\u0005i\u0000\u0000\u06bf"+ - "\u06ca\u0005a\u0000\u0000\u06c0\u06c1\u0005t\u0000\u0000\u06c1\u06c2\u0005"+ - "d\u0000\u0000\u06c2\u06ca\u0005d\u0000\u0000\u06c3\u06c4\u0005t\u0000"+ - "\u0000\u06c4\u06c5\u0005i\u0000\u0000\u06c5\u06ca\u0005n\u0000\u0000\u06c6"+ - "\u06c7\u0005t\u0000\u0000\u06c7\u06c8\u0005i\u0000\u0000\u06c8\u06ca\u0005"+ - "i\u0000\u0000\u06c9\u046a\u0001\u0000\u0000\u0000\u06c9\u046d\u0001\u0000"+ - "\u0000\u0000\u06c9\u0470\u0001\u0000\u0000\u0000\u06c9\u0473\u0001\u0000"+ - "\u0000\u0000\u06c9\u0476\u0001\u0000\u0000\u0000\u06c9\u0479\u0001\u0000"+ - "\u0000\u0000\u06c9\u047c\u0001\u0000\u0000\u0000\u06c9\u047f\u0001\u0000"+ - "\u0000\u0000\u06c9\u0482\u0001\u0000\u0000\u0000\u06c9\u0485\u0001\u0000"+ - "\u0000\u0000\u06c9\u0488\u0001\u0000\u0000\u0000\u06c9\u048b\u0001\u0000"+ - "\u0000\u0000\u06c9\u048e\u0001\u0000\u0000\u0000\u06c9\u0491\u0001\u0000"+ - "\u0000\u0000\u06c9\u0494\u0001\u0000\u0000\u0000\u06c9\u0497\u0001\u0000"+ - "\u0000\u0000\u06c9\u049a\u0001\u0000\u0000\u0000\u06c9\u049d\u0001\u0000"+ - "\u0000\u0000\u06c9\u04a0\u0001\u0000\u0000\u0000\u06c9\u04a3\u0001\u0000"+ - "\u0000\u0000\u06c9\u04a6\u0001\u0000\u0000\u0000\u06c9\u04a9\u0001\u0000"+ - "\u0000\u0000\u06c9\u04ac\u0001\u0000\u0000\u0000\u06c9\u04af\u0001\u0000"+ - "\u0000\u0000\u06c9\u04b2\u0001\u0000\u0000\u0000\u06c9\u04b5\u0001\u0000"+ - "\u0000\u0000\u06c9\u04b8\u0001\u0000\u0000\u0000\u06c9\u04bb\u0001\u0000"+ - "\u0000\u0000\u06c9\u04be\u0001\u0000\u0000\u0000\u06c9\u04c1\u0001\u0000"+ - "\u0000\u0000\u06c9\u04c4\u0001\u0000\u0000\u0000\u06c9\u04c7\u0001\u0000"+ - "\u0000\u0000\u06c9\u04ca\u0001\u0000\u0000\u0000\u06c9\u04cd\u0001\u0000"+ - "\u0000\u0000\u06c9\u04d0\u0001\u0000\u0000\u0000\u06c9\u04d3\u0001\u0000"+ - "\u0000\u0000\u06c9\u04d6\u0001\u0000\u0000\u0000\u06c9\u04d9\u0001\u0000"+ - "\u0000\u0000\u06c9\u04dc\u0001\u0000\u0000\u0000\u06c9\u04df\u0001\u0000"+ - "\u0000\u0000\u06c9\u04e2\u0001\u0000\u0000\u0000\u06c9\u04e5\u0001\u0000"+ - "\u0000\u0000\u06c9\u04e8\u0001\u0000\u0000\u0000\u06c9\u04eb\u0001\u0000"+ - "\u0000\u0000\u06c9\u04ee\u0001\u0000\u0000\u0000\u06c9\u04f1\u0001\u0000"+ - "\u0000\u0000\u06c9\u04f4\u0001\u0000\u0000\u0000\u06c9\u04f7\u0001\u0000"+ - "\u0000\u0000\u06c9\u04fa\u0001\u0000\u0000\u0000\u06c9\u04fd\u0001\u0000"+ - "\u0000\u0000\u06c9\u0500\u0001\u0000\u0000\u0000\u06c9\u0503\u0001\u0000"+ - "\u0000\u0000\u06c9\u0506\u0001\u0000\u0000\u0000\u06c9\u0509\u0001\u0000"+ - "\u0000\u0000\u06c9\u050c\u0001\u0000\u0000\u0000\u06c9\u050f\u0001\u0000"+ - "\u0000\u0000\u06c9\u0512\u0001\u0000\u0000\u0000\u06c9\u0515\u0001\u0000"+ - "\u0000\u0000\u06c9\u0518\u0001\u0000\u0000\u0000\u06c9\u051b\u0001\u0000"+ - "\u0000\u0000\u06c9\u051e\u0001\u0000\u0000\u0000\u06c9\u0521\u0001\u0000"+ - "\u0000\u0000\u06c9\u0524\u0001\u0000\u0000\u0000\u06c9\u0527\u0001\u0000"+ - "\u0000\u0000\u06c9\u052a\u0001\u0000\u0000\u0000\u06c9\u052d\u0001\u0000"+ - "\u0000\u0000\u06c9\u0530\u0001\u0000\u0000\u0000\u06c9\u0533\u0001\u0000"+ - "\u0000\u0000\u06c9\u0536\u0001\u0000\u0000\u0000\u06c9\u0539\u0001\u0000"+ - "\u0000\u0000\u06c9\u053c\u0001\u0000\u0000\u0000\u06c9\u053f\u0001\u0000"+ - "\u0000\u0000\u06c9\u0542\u0001\u0000\u0000\u0000\u06c9\u0545\u0001\u0000"+ - "\u0000\u0000\u06c9\u0548\u0001\u0000\u0000\u0000\u06c9\u054c\u0001\u0000"+ - "\u0000\u0000\u06c9\u0550\u0001\u0000\u0000\u0000\u06c9\u0554\u0001\u0000"+ - "\u0000\u0000\u06c9\u0558\u0001\u0000\u0000\u0000\u06c9\u055c\u0001\u0000"+ - "\u0000\u0000\u06c9\u0560\u0001\u0000\u0000\u0000\u06c9\u0564\u0001\u0000"+ - "\u0000\u0000\u06c9\u0568\u0001\u0000\u0000\u0000\u06c9\u056c\u0001\u0000"+ - "\u0000\u0000\u06c9\u0570\u0001\u0000\u0000\u0000\u06c9\u0574\u0001\u0000"+ - "\u0000\u0000\u06c9\u0578\u0001\u0000\u0000\u0000\u06c9\u057c\u0001\u0000"+ - "\u0000\u0000\u06c9\u0580\u0001\u0000\u0000\u0000\u06c9\u0584\u0001\u0000"+ - "\u0000\u0000\u06c9\u0588\u0001\u0000\u0000\u0000\u06c9\u058b\u0001\u0000"+ - "\u0000\u0000\u06c9\u058e\u0001\u0000\u0000\u0000\u06c9\u0591\u0001\u0000"+ - "\u0000\u0000\u06c9\u0594\u0001\u0000\u0000\u0000\u06c9\u0597\u0001\u0000"+ - "\u0000\u0000\u06c9\u059b\u0001\u0000\u0000\u0000\u06c9\u059f\u0001\u0000"+ - "\u0000\u0000\u06c9\u05a3\u0001\u0000\u0000\u0000\u06c9\u05a7\u0001\u0000"+ - "\u0000\u0000\u06c9\u05ab\u0001\u0000\u0000\u0000\u06c9\u05af\u0001\u0000"+ - "\u0000\u0000\u06c9\u05b3\u0001\u0000\u0000\u0000\u06c9\u05b7\u0001\u0000"+ - "\u0000\u0000\u06c9\u05bb\u0001\u0000\u0000\u0000\u06c9\u05bf\u0001\u0000"+ - "\u0000\u0000\u06c9\u05c3\u0001\u0000\u0000\u0000\u06c9\u05c7\u0001\u0000"+ - "\u0000\u0000\u06c9\u05cb\u0001\u0000\u0000\u0000\u06c9\u05cf\u0001\u0000"+ - "\u0000\u0000\u06c9\u05d3\u0001\u0000\u0000\u0000\u06c9\u05d7\u0001\u0000"+ - "\u0000\u0000\u06c9\u05da\u0001\u0000\u0000\u0000\u06c9\u05dd\u0001\u0000"+ - "\u0000\u0000\u06c9\u05e0\u0001\u0000\u0000\u0000\u06c9\u05e3\u0001\u0000"+ - "\u0000\u0000\u06c9\u05e6\u0001\u0000\u0000\u0000\u06c9\u05e9\u0001\u0000"+ - "\u0000\u0000\u06c9\u05ec\u0001\u0000\u0000\u0000\u06c9\u05ef\u0001\u0000"+ - "\u0000\u0000\u06c9\u05f3\u0001\u0000\u0000\u0000\u06c9\u05f6\u0001\u0000"+ - "\u0000\u0000\u06c9\u05f9\u0001\u0000\u0000\u0000\u06c9\u05fd\u0001\u0000"+ - "\u0000\u0000\u06c9\u0600\u0001\u0000\u0000\u0000\u06c9\u0603\u0001\u0000"+ - "\u0000\u0000\u06c9\u0606\u0001\u0000\u0000\u0000\u06c9\u0609\u0001\u0000"+ - "\u0000\u0000\u06c9\u060d\u0001\u0000\u0000\u0000\u06c9\u0610\u0001\u0000"+ - "\u0000\u0000\u06c9\u0613\u0001\u0000\u0000\u0000\u06c9\u0616\u0001\u0000"+ - "\u0000\u0000\u06c9\u061a\u0001\u0000\u0000\u0000\u06c9\u061d\u0001\u0000"+ - "\u0000\u0000\u06c9\u0621\u0001\u0000\u0000\u0000\u06c9\u0624\u0001\u0000"+ - "\u0000\u0000\u06c9\u0628\u0001\u0000\u0000\u0000\u06c9\u062c\u0001\u0000"+ - "\u0000\u0000\u06c9\u062f\u0001\u0000\u0000\u0000\u06c9\u0633\u0001\u0000"+ - "\u0000\u0000\u06c9\u0636\u0001\u0000\u0000\u0000\u06c9\u0639\u0001\u0000"+ - "\u0000\u0000\u06c9\u063c\u0001\u0000\u0000\u0000\u06c9\u0640\u0001\u0000"+ - "\u0000\u0000\u06c9\u0643\u0001\u0000\u0000\u0000\u06c9\u0646\u0001\u0000"+ - "\u0000\u0000\u06c9\u0649\u0001\u0000\u0000\u0000\u06c9\u064d\u0001\u0000"+ - "\u0000\u0000\u06c9\u0650\u0001\u0000\u0000\u0000\u06c9\u0653\u0001\u0000"+ - "\u0000\u0000\u06c9\u0656\u0001\u0000\u0000\u0000\u06c9\u065a\u0001\u0000"+ - "\u0000\u0000\u06c9\u065e\u0001\u0000\u0000\u0000\u06c9\u0662\u0001\u0000"+ - "\u0000\u0000\u06c9\u0666\u0001\u0000\u0000\u0000\u06c9\u066a\u0001\u0000"+ - "\u0000\u0000\u06c9\u066d\u0001\u0000\u0000\u0000\u06c9\u0670\u0001\u0000"+ - "\u0000\u0000\u06c9\u0674\u0001\u0000\u0000\u0000\u06c9\u0677\u0001\u0000"+ - "\u0000\u0000\u06c9\u067a\u0001\u0000\u0000\u0000\u06c9\u067e\u0001\u0000"+ - "\u0000\u0000\u06c9\u0681\u0001\u0000\u0000\u0000\u06c9\u0685\u0001\u0000"+ - "\u0000\u0000\u06c9\u0689\u0001\u0000\u0000\u0000\u06c9\u068d\u0001\u0000"+ - "\u0000\u0000\u06c9\u0690\u0001\u0000\u0000\u0000\u06c9\u0693\u0001\u0000"+ - "\u0000\u0000\u06c9\u0696\u0001\u0000\u0000\u0000\u06c9\u0699\u0001\u0000"+ - "\u0000\u0000\u06c9\u069c\u0001\u0000\u0000\u0000\u06c9\u069f\u0001\u0000"+ - "\u0000\u0000\u06c9\u06a2\u0001\u0000\u0000\u0000\u06c9\u06a5\u0001\u0000"+ - "\u0000\u0000\u06c9\u06a8\u0001\u0000\u0000\u0000\u06c9\u06ab\u0001\u0000"+ - "\u0000\u0000\u06c9\u06ae\u0001\u0000\u0000\u0000\u06c9\u06b1\u0001\u0000"+ - "\u0000\u0000\u06c9\u06b4\u0001\u0000\u0000\u0000\u06c9\u06b7\u0001\u0000"+ - "\u0000\u0000\u06c9\u06ba\u0001\u0000\u0000\u0000\u06c9\u06bd\u0001\u0000"+ - "\u0000\u0000\u06c9\u06c0\u0001\u0000\u0000\u0000\u06c9\u06c3\u0001\u0000"+ - "\u0000\u0000\u06c9\u06c6\u0001\u0000\u0000\u0000\u06ca\u00ec\u0001\u0000"+ - "\u0000\u0000\u06cb\u06cc\u0005#\u0000\u0000\u06cc\u00ee\u0001\u0000\u0000"+ - "\u0000\u06cd\u06ce\u0005:\u0000\u0000\u06ce\u00f0\u0001\u0000\u0000\u0000"+ - "\u06cf\u06d0\u0005,\u0000\u0000\u06d0\u00f2\u0001\u0000\u0000\u0000\u06d1"+ - "\u06d2\u0005(\u0000\u0000\u06d2\u00f4\u0001\u0000\u0000\u0000\u06d3\u06d4"+ - "\u0005)\u0000\u0000\u06d4\u00f6\u0001\u0000\u0000\u0000\u06d5\u06d6\u0005"+ - "[\u0000\u0000\u06d6\u00f8\u0001\u0000\u0000\u0000\u06d7\u06d8\u0005]\u0000"+ - "\u0000\u06d8\u00fa\u0001\u0000\u0000\u0000\u06d9\u06da\u0005.\u0000\u0000"+ - "\u06da\u00fc\u0001\u0000\u0000\u0000\u06db\u06dc\u0005<\u0000\u0000\u06dc"+ - "\u06dd\u0005<\u0000\u0000\u06dd\u00fe\u0001\u0000\u0000\u0000\u06de\u06df"+ - "\u0005>\u0000\u0000\u06df\u06e0\u0005>\u0000\u0000\u06e0\u0100\u0001\u0000"+ - "\u0000\u0000\u06e1\u06e2\u0005+\u0000\u0000\u06e2\u0102\u0001\u0000\u0000"+ - "\u0000\u06e3\u06e4\u0005-\u0000\u0000\u06e4\u0104\u0001\u0000\u0000\u0000"+ - "\u06e5\u06e6\u0005<\u0000\u0000\u06e6\u0106\u0001\u0000\u0000\u0000\u06e7"+ - "\u06e8\u0005>\u0000\u0000\u06e8\u0108\u0001\u0000\u0000\u0000\u06e9\u06ea"+ - "\u0005*\u0000\u0000\u06ea\u010a\u0001\u0000\u0000\u0000\u06eb\u06ec\u0005"+ - "/\u0000\u0000\u06ec\u010c\u0001\u0000\u0000\u0000\u06ed\u06ee\u0005{\u0000"+ - "\u0000\u06ee\u06ef\u0006\u0085\u0007\u0000\u06ef\u010e\u0001\u0000\u0000"+ - "\u0000\u06f0\u06f1\u0005}\u0000\u0000\u06f1\u06f2\u0006\u0086\b\u0000"+ - "\u06f2\u0110\u0001\u0000\u0000\u0000\u06f3\u06f6\u0003\u0113\u0088\u0000"+ - "\u06f4\u06f6\u0003\u011b\u008c\u0000\u06f5\u06f3\u0001\u0000\u0000\u0000"+ - "\u06f5\u06f4\u0001\u0000\u0000\u0000\u06f6\u0112\u0001\u0000\u0000\u0000"+ - "\u06f7\u06fb\u0003\u0115\u0089\u0000\u06f8\u06fb\u0003\u0117\u008a\u0000"+ - "\u06f9\u06fb\u0003\u0119\u008b\u0000\u06fa\u06f7\u0001\u0000\u0000\u0000"+ - "\u06fa\u06f8\u0001\u0000\u0000\u0000\u06fa\u06f9\u0001\u0000\u0000\u0000"+ - "\u06fb\u0114\u0001\u0000\u0000\u0000\u06fc\u0700\u0005%\u0000\u0000\u06fd"+ - "\u06ff\u0003\u0123\u0090\u0000\u06fe\u06fd\u0001\u0000\u0000\u0000\u06ff"+ - "\u0702\u0001\u0000\u0000\u0000\u0700\u06fe\u0001\u0000\u0000\u0000\u0700"+ - "\u0701\u0001\u0000\u0000\u0000\u0701\u0703\u0001\u0000\u0000\u0000\u0702"+ - "\u0700\u0001\u0000\u0000\u0000\u0703\u0705\u0005.\u0000\u0000\u0704\u0706"+ - "\u0003\u0123\u0090\u0000\u0705\u0704\u0001\u0000\u0000\u0000\u0706\u0707"+ - "\u0001\u0000\u0000\u0000\u0707\u0705\u0001\u0000\u0000\u0000\u0707\u0708"+ - "\u0001\u0000\u0000\u0000\u0708\u0116\u0001\u0000\u0000\u0000\u0709\u070b"+ - "\u0003\u0125\u0091\u0000\u070a\u0709\u0001\u0000\u0000\u0000\u070b\u070e"+ - "\u0001\u0000\u0000\u0000\u070c\u070a\u0001\u0000\u0000\u0000\u070c\u070d"+ - "\u0001\u0000\u0000\u0000\u070d\u070f\u0001\u0000\u0000\u0000\u070e\u070c"+ - "\u0001\u0000\u0000\u0000\u070f\u0711\u0005.\u0000\u0000\u0710\u0712\u0003"+ - "\u0125\u0091\u0000\u0711\u0710\u0001\u0000\u0000\u0000\u0712\u0713\u0001"+ - "\u0000\u0000\u0000\u0713\u0711\u0001\u0000\u0000\u0000\u0713\u0714\u0001"+ - "\u0000\u0000\u0000\u0714\u0118\u0001\u0000\u0000\u0000\u0715\u0719\u0005"+ - "$\u0000\u0000\u0716\u0718\u0003\u0127\u0092\u0000\u0717\u0716\u0001\u0000"+ - "\u0000\u0000\u0718\u071b\u0001\u0000\u0000\u0000\u0719\u0717\u0001\u0000"+ - "\u0000\u0000\u0719\u071a\u0001\u0000\u0000\u0000\u071a\u071c\u0001\u0000"+ - "\u0000\u0000\u071b\u0719\u0001\u0000\u0000\u0000\u071c\u071e\u0005.\u0000"+ - "\u0000\u071d\u071f\u0003\u0127\u0092\u0000\u071e\u071d\u0001\u0000\u0000"+ - "\u0000\u071f\u0720\u0001\u0000\u0000\u0000\u0720\u071e\u0001\u0000\u0000"+ - "\u0000\u0720\u0721\u0001\u0000\u0000\u0000\u0721\u011a\u0001\u0000\u0000"+ - "\u0000\u0722\u0726\u0003\u011f\u008e\u0000\u0723\u0726\u0003\u0121\u008f"+ - "\u0000\u0724\u0726\u0003\u011d\u008d\u0000\u0725\u0722\u0001\u0000\u0000"+ - "\u0000\u0725\u0723\u0001\u0000\u0000\u0000\u0725\u0724\u0001\u0000\u0000"+ - "\u0000\u0726\u011c\u0001\u0000\u0000\u0000\u0727\u0729\u0005%\u0000\u0000"+ - "\u0728\u072a\u0003\u0123\u0090\u0000\u0729\u0728\u0001\u0000\u0000\u0000"+ - "\u072a\u072b\u0001\u0000\u0000\u0000\u072b\u0729\u0001\u0000\u0000\u0000"+ - "\u072b\u072c\u0001\u0000\u0000\u0000\u072c\u011e\u0001\u0000\u0000\u0000"+ - "\u072d\u072f\u0003\u0125\u0091\u0000\u072e\u072d\u0001\u0000\u0000\u0000"+ - "\u072f\u0730\u0001\u0000\u0000\u0000\u0730\u072e\u0001\u0000\u0000\u0000"+ - "\u0730\u0731\u0001\u0000\u0000\u0000\u0731\u0120\u0001\u0000\u0000\u0000"+ - "\u0732\u0734\u0005$\u0000\u0000\u0733\u0735\u0003\u0127\u0092\u0000\u0734"+ - "\u0733\u0001\u0000\u0000\u0000\u0735\u0736\u0001\u0000\u0000\u0000\u0736"+ - "\u0734\u0001\u0000\u0000\u0000\u0736\u0737\u0001\u0000\u0000\u0000\u0737"+ - "\u0122\u0001\u0000\u0000\u0000\u0738\u0739\u0007\u0004\u0000\u0000\u0739"+ - "\u0124\u0001\u0000\u0000\u0000\u073a\u073b\u0007\u0005\u0000\u0000\u073b"+ - "\u0126\u0001\u0000\u0000\u0000\u073c\u073d\u0007\u0006\u0000\u0000\u073d"+ - "\u0128\u0001\u0000\u0000\u0000\u073e\u0742\u0005\'\u0000\u0000\u073f\u0740"+ - "\u0005\\\u0000\u0000\u0740\u0743\u0007\u0012\u0000\u0000\u0741\u0743\b"+ - "\u000f\u0000\u0000\u0742\u073f\u0001\u0000\u0000\u0000\u0742\u0741\u0001"+ - "\u0000\u0000\u0000\u0743\u0744\u0001\u0000\u0000\u0000\u0744\u0745\u0005"+ - "\'\u0000\u0000\u0745\u012a\u0001\u0000\u0000\u0000\u0746\u0748\u0003\u012d"+ - "\u0095\u0000\u0747\u0749\u0007\u0013\u0000\u0000\u0748\u0747\u0001\u0000"+ - "\u0000\u0000\u0749\u074a\u0001\u0000\u0000\u0000\u074a\u0748\u0001\u0000"+ - "\u0000\u0000\u074a\u074b\u0001\u0000\u0000\u0000\u074b\u012c\u0001\u0000"+ - "\u0000\u0000\u074c\u0750\u0005!\u0000\u0000\u074d\u074f\u0003\u0133\u0098"+ - "\u0000\u074e\u074d\u0001\u0000\u0000\u0000\u074f\u0752\u0001\u0000\u0000"+ - "\u0000\u0750\u074e\u0001\u0000\u0000\u0000\u0750\u0751\u0001\u0000\u0000"+ - "\u0000\u0751\u012e\u0001\u0000\u0000\u0000\u0752\u0750\u0001\u0000\u0000"+ - "\u0000\u0753\u0757\u0003\u0131\u0097\u0000\u0754\u0756\u0003\u0133\u0098"+ - "\u0000\u0755\u0754\u0001\u0000\u0000\u0000\u0756\u0759\u0001\u0000\u0000"+ - "\u0000\u0757\u0755\u0001\u0000\u0000\u0000\u0757\u0758\u0001\u0000\u0000"+ - "\u0000\u0758\u0130\u0001\u0000\u0000\u0000\u0759\u0757\u0001\u0000\u0000"+ - "\u0000\u075a\u075b\u0007\u0007\u0000\u0000\u075b\u0132\u0001\u0000\u0000"+ - "\u0000\u075c\u075d\u0007\b\u0000\u0000\u075d\u0134\u0001\u0000\u0000\u0000"+ - "\u075e\u075f\u0005@\u0000\u0000\u075f\u0760\u0003\u012f\u0096\u0000\u0760"+ - "\u0136\u0001\u0000\u0000\u0000\u0761\u0763\u0007\u0010\u0000\u0000\u0762"+ - "\u0761\u0001\u0000\u0000\u0000\u0763\u0764\u0001\u0000\u0000\u0000\u0764"+ - "\u0762\u0001\u0000\u0000\u0000\u0764\u0765\u0001\u0000\u0000\u0000\u0765"+ - "\u0766\u0001\u0000\u0000\u0000\u0766\u0767\u0006\u009a\u0005\u0000\u0767"+ - "\u0138\u0001\u0000\u0000\u0000\u0768\u0769\u0005/\u0000\u0000\u0769\u076a"+ - "\u0005/\u0000\u0000\u076a\u076e\u0001\u0000\u0000\u0000\u076b\u076d\b"+ - "\u0011\u0000\u0000\u076c\u076b\u0001\u0000\u0000\u0000\u076d\u0770\u0001"+ - "\u0000\u0000\u0000\u076e\u076c\u0001\u0000\u0000\u0000\u076e\u076f\u0001"+ - "\u0000\u0000\u0000\u076f\u0771\u0001\u0000\u0000\u0000\u0770\u076e\u0001"+ - "\u0000\u0000\u0000\u0771\u0772\u0006\u009b\u0006\u0000\u0772\u013a\u0001"+ - "\u0000\u0000\u0000\u0773\u0774\u0005/\u0000\u0000\u0774\u0775\u0005*\u0000"+ - "\u0000\u0775\u0779\u0001\u0000\u0000\u0000\u0776\u0778\t\u0000\u0000\u0000"+ - "\u0777\u0776\u0001\u0000\u0000\u0000\u0778\u077b\u0001\u0000\u0000\u0000"+ - "\u0779\u077a\u0001\u0000\u0000\u0000\u0779\u0777\u0001\u0000\u0000\u0000"+ - "\u077a\u077c\u0001\u0000\u0000\u0000\u077b\u0779\u0001\u0000\u0000\u0000"+ - "\u077c\u077d\u0005*\u0000\u0000\u077d\u077e\u0005/\u0000\u0000\u077e\u077f"+ - "\u0001\u0000\u0000\u0000\u077f\u0780\u0006\u009c\u0006\u0000\u0780\u013c"+ - "\u0001\u0000\u0000\u0000\u0781\u0783\u0005<\u0000\u0000\u0782\u0784\u0007"+ - "\u0014\u0000\u0000\u0783\u0782\u0001\u0000\u0000\u0000\u0784\u0785\u0001"+ - "\u0000\u0000\u0000\u0785\u0783\u0001\u0000\u0000\u0000\u0785\u0786\u0001"+ - "\u0000\u0000\u0000\u0786\u0787\u0001\u0000\u0000\u0000\u0787\u0788\u0005"+ - ">\u0000\u0000\u0788\u0789\u0006\u009d\t\u0000\u0789\u013e\u0001\u0000"+ - "\u0000\u0000\u078a\u0790\u0005\"\u0000\u0000\u078b\u078c\u0005\\\u0000"+ - "\u0000\u078c\u078f\u0005\"\u0000\u0000\u078d\u078f\b\t\u0000\u0000\u078e"+ - "\u078b\u0001\u0000\u0000\u0000\u078e\u078d\u0001\u0000\u0000\u0000\u078f"+ - "\u0792\u0001\u0000\u0000\u0000\u0790\u078e\u0001\u0000\u0000\u0000\u0790"+ - "\u0791\u0001\u0000\u0000\u0000\u0791\u0793\u0001\u0000\u0000\u0000\u0792"+ - "\u0790\u0001\u0000\u0000\u0000\u0793\u0794\u0005\"\u0000\u0000\u0794\u0795"+ - "\u0006\u009e\n\u0000\u0795\u0140\u0001\u0000\u0000\u0000\u0796\u0798\u0007"+ - "\u0010\u0000\u0000\u0797\u0796\u0001\u0000\u0000\u0000\u0798\u0799\u0001"+ - "\u0000\u0000\u0000\u0799\u0797\u0001\u0000\u0000\u0000\u0799\u079a\u0001"+ - "\u0000\u0000\u0000\u079a\u079b\u0001\u0000\u0000\u0000\u079b\u079c\u0006"+ - "\u009f\u0005\u0000\u079c\u0142\u0001\u0000\u0000\u0000\u079d\u079e\u0005"+ - "/\u0000\u0000\u079e\u079f\u0005/\u0000\u0000\u079f\u07a3\u0001\u0000\u0000"+ - "\u0000\u07a0\u07a2\b\u0011\u0000\u0000\u07a1\u07a0\u0001\u0000\u0000\u0000"+ - "\u07a2\u07a5\u0001\u0000\u0000\u0000\u07a3\u07a1\u0001\u0000\u0000\u0000"+ - "\u07a3\u07a4\u0001\u0000\u0000\u0000\u07a4\u07a6\u0001\u0000\u0000\u0000"+ - "\u07a5\u07a3\u0001\u0000\u0000\u0000\u07a6\u07a7\u0006\u00a0\u0006\u0000"+ - "\u07a7\u0144\u0001\u0000\u0000\u0000\u07a8\u07a9\u0005/\u0000\u0000\u07a9"+ - "\u07aa\u0005*\u0000\u0000\u07aa\u07ae\u0001\u0000\u0000\u0000\u07ab\u07ad"+ - "\t\u0000\u0000\u0000\u07ac\u07ab\u0001\u0000\u0000\u0000\u07ad\u07b0\u0001"+ - "\u0000\u0000\u0000\u07ae\u07af\u0001\u0000\u0000\u0000\u07ae\u07ac\u0001"+ - "\u0000\u0000\u0000\u07af\u07b1\u0001\u0000\u0000\u0000\u07b0\u07ae\u0001"+ - "\u0000\u0000\u0000\u07b1\u07b2\u0005*\u0000\u0000\u07b2\u07b3\u0005/\u0000"+ - "\u0000\u07b3\u07b4\u0001\u0000\u0000\u0000\u07b4\u07b5\u0006\u00a1\u0006"+ - "\u0000\u07b5\u0146\u0001\u0000\u0000\u0000C\u0000\u0001\u0002\u01b4\u0273"+ - "\u0324\u032f\u0337\u0367\u03a5\u03aa\u03b1\u03b6\u03bd\u03c2\u03c9\u03d0"+ - "\u03d5\u03dc\u03e1\u03e6\u03ed\u03f3\u03f5\u03fa\u0401\u0406\u0412\u041f"+ - "\u0421\u0426\u042a\u042c\u042f\u0435\u0438\u043d\u0440\u0447\u0451\u045c"+ - "\u06c9\u06f5\u06fa\u0700\u0707\u070c\u0713\u0719\u0720\u0725\u072b\u0730"+ - "\u0736\u0742\u074a\u0750\u0757\u0764\u076e\u0779\u0785\u078e\u0790\u0799"+ - "\u07a3\u07ae\u000b\u0001\u0000\u0000\u0001B\u0001\u0001P\u0002\u0001Q"+ - "\u0003\u0001k\u0004\u0000\u0001\u0000\u0000\u0002\u0000\u0001\u0085\u0005"+ - "\u0001\u0086\u0006\u0001\u009d\u0007\u0001\u009e\b"; + "\u0145\u0099\u0147\u009a\u0003\u0000\u0001\u0002\u0015\u0004\u0000SSU"+ + "Ussuu\n\u0000BDIILLSSWWbdiillssww\u0004\u0000LLUUlluu\u0002\u0000BBbb"+ + "\u0001\u000001\u0001\u000009\u0003\u000009AFaf\u0003\u0000AZ__az\u0004"+ + "\u000009AZ__az\u0001\u0000\"\"\u0001\u0000zz\u0003\u0000aappss\u0003\u0000"+ + "aammsu\u0007\u0000\"\"\'\'09\\\\ffnnrr\u0002\u000009af\u0001\u0000\'\'"+ + "\u0004\u0000\t\n\r\r \u00a0\u00a0\u0002\u0000\n\n\r\r\u0005\u0000\"\""+ + "\'\'ffnnrr\u0002\u0000++--\u0005\u0000-9AZ\\\\__az\u08c4\u0000\u0003\u0001"+ + "\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001"+ + "\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000"+ + "\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000"+ + "\u0000\u0000\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000"+ + "\u0000\u0000\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000"+ + "\u0000\u0000\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000\u0000"+ + "\u0000\u0000\u001d\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000\u0000"+ + "\u0000\u0000!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000\u0000"+ + "%\u0001\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000)\u0001"+ + "\u0000\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001\u0000\u0000"+ + "\u0000\u0000/\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0000\u0000"+ + "3\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001"+ + "\u0000\u0000\u0000\u00009\u0001\u0000\u0000\u0000\u0000;\u0001\u0000\u0000"+ + "\u0000\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000\u0000\u0000"+ + "A\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000E\u0001"+ + "\u0000\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001\u0000\u0000"+ + "\u0000\u0000K\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000\u0000\u0000"+ + "O\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000\u0000S\u0001"+ + "\u0000\u0000\u0000\u0000U\u0001\u0000\u0000\u0000\u0000W\u0001\u0000\u0000"+ + "\u0000\u0000Y\u0001\u0000\u0000\u0000\u0000[\u0001\u0000\u0000\u0000\u0000"+ + "]\u0001\u0000\u0000\u0000\u0000_\u0001\u0000\u0000\u0000\u0000a\u0001"+ + "\u0000\u0000\u0000\u0000c\u0001\u0000\u0000\u0000\u0000e\u0001\u0000\u0000"+ + "\u0000\u0000g\u0001\u0000\u0000\u0000\u0000i\u0001\u0000\u0000\u0000\u0000"+ + "k\u0001\u0000\u0000\u0000\u0000m\u0001\u0000\u0000\u0000\u0000o\u0001"+ + "\u0000\u0000\u0000\u0000q\u0001\u0000\u0000\u0000\u0000s\u0001\u0000\u0000"+ + "\u0000\u0000u\u0001\u0000\u0000\u0000\u0000w\u0001\u0000\u0000\u0000\u0000"+ + "y\u0001\u0000\u0000\u0000\u0000{\u0001\u0000\u0000\u0000\u0000}\u0001"+ + "\u0000\u0000\u0000\u0000\u007f\u0001\u0000\u0000\u0000\u0000\u0081\u0001"+ + "\u0000\u0000\u0000\u0000\u0083\u0001\u0000\u0000\u0000\u0000\u0085\u0001"+ + "\u0000\u0000\u0000\u0000\u0087\u0001\u0000\u0000\u0000\u0000\u0089\u0001"+ + "\u0000\u0000\u0000\u0000\u008b\u0001\u0000\u0000\u0000\u0000\u008d\u0001"+ + "\u0000\u0000\u0000\u0000\u008f\u0001\u0000\u0000\u0000\u0000\u0091\u0001"+ + "\u0000\u0000\u0000\u0000\u0093\u0001\u0000\u0000\u0000\u0000\u0095\u0001"+ + "\u0000\u0000\u0000\u0000\u0097\u0001\u0000\u0000\u0000\u0000\u0099\u0001"+ + "\u0000\u0000\u0000\u0000\u009b\u0001\u0000\u0000\u0000\u0000\u009d\u0001"+ + "\u0000\u0000\u0000\u0000\u009f\u0001\u0000\u0000\u0000\u0000\u00a1\u0001"+ + "\u0000\u0000\u0000\u0000\u00a3\u0001\u0000\u0000\u0000\u0000\u00a5\u0001"+ + "\u0000\u0000\u0000\u0000\u00a7\u0001\u0000\u0000\u0000\u0000\u00a9\u0001"+ + "\u0000\u0000\u0000\u0000\u00ab\u0001\u0000\u0000\u0000\u0000\u00ad\u0001"+ + "\u0000\u0000\u0000\u0000\u00af\u0001\u0000\u0000\u0000\u0000\u00b1\u0001"+ + "\u0000\u0000\u0000\u0000\u00b3\u0001\u0000\u0000\u0000\u0000\u00b5\u0001"+ + "\u0000\u0000\u0000\u0000\u00b7\u0001\u0000\u0000\u0000\u0000\u00b9\u0001"+ + "\u0000\u0000\u0000\u0000\u00bb\u0001\u0000\u0000\u0000\u0000\u00bd\u0001"+ + "\u0000\u0000\u0000\u0000\u00bf\u0001\u0000\u0000\u0000\u0000\u00c1\u0001"+ + "\u0000\u0000\u0000\u0000\u00c3\u0001\u0000\u0000\u0000\u0000\u00c5\u0001"+ + "\u0000\u0000\u0000\u0000\u00c7\u0001\u0000\u0000\u0000\u0000\u00c9\u0001"+ + "\u0000\u0000\u0000\u0000\u00cb\u0001\u0000\u0000\u0000\u0000\u00cd\u0001"+ + "\u0000\u0000\u0000\u0000\u00cf\u0001\u0000\u0000\u0000\u0000\u00d1\u0001"+ + "\u0000\u0000\u0000\u0000\u00d3\u0001\u0000\u0000\u0000\u0000\u00db\u0001"+ + "\u0000\u0000\u0000\u0000\u00e1\u0001\u0000\u0000\u0000\u0000\u00e3\u0001"+ + "\u0000\u0000\u0000\u0000\u00e5\u0001\u0000\u0000\u0000\u0000\u00e7\u0001"+ + "\u0000\u0000\u0000\u0000\u00e9\u0001\u0000\u0000\u0000\u0001\u00eb\u0001"+ + "\u0000\u0000\u0000\u0001\u00ed\u0001\u0000\u0000\u0000\u0001\u00ef\u0001"+ + "\u0000\u0000\u0000\u0001\u00f1\u0001\u0000\u0000\u0000\u0001\u00f3\u0001"+ + "\u0000\u0000\u0000\u0001\u00f5\u0001\u0000\u0000\u0000\u0001\u00f7\u0001"+ + "\u0000\u0000\u0000\u0001\u00f9\u0001\u0000\u0000\u0000\u0001\u00fb\u0001"+ + "\u0000\u0000\u0000\u0001\u00fd\u0001\u0000\u0000\u0000\u0001\u00ff\u0001"+ + "\u0000\u0000\u0000\u0001\u0101\u0001\u0000\u0000\u0000\u0001\u0103\u0001"+ + "\u0000\u0000\u0000\u0001\u0105\u0001\u0000\u0000\u0000\u0001\u0107\u0001"+ + "\u0000\u0000\u0000\u0001\u0109\u0001\u0000\u0000\u0000\u0001\u010b\u0001"+ + "\u0000\u0000\u0000\u0001\u010d\u0001\u0000\u0000\u0000\u0001\u010f\u0001"+ + "\u0000\u0000\u0000\u0001\u0111\u0001\u0000\u0000\u0000\u0001\u0113\u0001"+ + "\u0000\u0000\u0000\u0001\u0115\u0001\u0000\u0000\u0000\u0001\u0117\u0001"+ + "\u0000\u0000\u0000\u0001\u0119\u0001\u0000\u0000\u0000\u0001\u011b\u0001"+ + "\u0000\u0000\u0000\u0001\u011d\u0001\u0000\u0000\u0000\u0001\u011f\u0001"+ + "\u0000\u0000\u0000\u0001\u0121\u0001\u0000\u0000\u0000\u0001\u0123\u0001"+ + "\u0000\u0000\u0000\u0001\u012b\u0001\u0000\u0000\u0000\u0001\u012d\u0001"+ + "\u0000\u0000\u0000\u0001\u012f\u0001\u0000\u0000\u0000\u0001\u0131\u0001"+ + "\u0000\u0000\u0000\u0001\u0137\u0001\u0000\u0000\u0000\u0001\u0139\u0001"+ + "\u0000\u0000\u0000\u0001\u013b\u0001\u0000\u0000\u0000\u0001\u013d\u0001"+ + "\u0000\u0000\u0000\u0002\u013f\u0001\u0000\u0000\u0000\u0002\u0141\u0001"+ + "\u0000\u0000\u0000\u0002\u0143\u0001\u0000\u0000\u0000\u0002\u0145\u0001"+ + "\u0000\u0000\u0000\u0002\u0147\u0001\u0000\u0000\u0000\u0003\u0149\u0001"+ + "\u0000\u0000\u0000\u0005\u014c\u0001\u0000\u0000\u0000\u0007\u014e\u0001"+ + "\u0000\u0000\u0000\t\u0150\u0001\u0000\u0000\u0000\u000b\u0152\u0001\u0000"+ + "\u0000\u0000\r\u0154\u0001\u0000\u0000\u0000\u000f\u0156\u0001\u0000\u0000"+ + "\u0000\u0011\u0158\u0001\u0000\u0000\u0000\u0013\u015a\u0001\u0000\u0000"+ + "\u0000\u0015\u015c\u0001\u0000\u0000\u0000\u0017\u015f\u0001\u0000\u0000"+ + "\u0000\u0019\u0163\u0001\u0000\u0000\u0000\u001b\u0165\u0001\u0000\u0000"+ + "\u0000\u001d\u0167\u0001\u0000\u0000\u0000\u001f\u016a\u0001\u0000\u0000"+ + "\u0000!\u016c\u0001\u0000\u0000\u0000#\u016e\u0001\u0000\u0000\u0000%"+ + "\u0170\u0001\u0000\u0000\u0000\'\u0172\u0001\u0000\u0000\u0000)\u0174"+ + "\u0001\u0000\u0000\u0000+\u0177\u0001\u0000\u0000\u0000-\u017a\u0001\u0000"+ + "\u0000\u0000/\u017c\u0001\u0000\u0000\u00001\u017e\u0001\u0000\u0000\u0000"+ + "3\u0180\u0001\u0000\u0000\u00005\u0182\u0001\u0000\u0000\u00007\u0185"+ + "\u0001\u0000\u0000\u00009\u0188\u0001\u0000\u0000\u0000;\u018b\u0001\u0000"+ + "\u0000\u0000=\u018e\u0001\u0000\u0000\u0000?\u0190\u0001\u0000\u0000\u0000"+ + "A\u0193\u0001\u0000\u0000\u0000C\u0196\u0001\u0000\u0000\u0000E\u0198"+ + "\u0001\u0000\u0000\u0000G\u019b\u0001\u0000\u0000\u0000I\u019e\u0001\u0000"+ + "\u0000\u0000K\u01b6\u0001\u0000\u0000\u0000M\u01b8\u0001\u0000\u0000\u0000"+ + "O\u01c0\u0001\u0000\u0000\u0000Q\u01c6\u0001\u0000\u0000\u0000S\u01cd"+ + "\u0001\u0000\u0000\u0000U\u01d6\u0001\u0000\u0000\u0000W\u01de\u0001\u0000"+ + "\u0000\u0000Y\u01e5\u0001\u0000\u0000\u0000[\u01ee\u0001\u0000\u0000\u0000"+ + "]\u01f5\u0001\u0000\u0000\u0000_\u0201\u0001\u0000\u0000\u0000a\u020a"+ + "\u0001\u0000\u0000\u0000c\u0217\u0001\u0000\u0000\u0000e\u0221\u0001\u0000"+ + "\u0000\u0000g\u0226\u0001\u0000\u0000\u0000i\u022c\u0001\u0000\u0000\u0000"+ + "k\u0232\u0001\u0000\u0000\u0000m\u0239\u0001\u0000\u0000\u0000o\u023f"+ + "\u0001\u0000\u0000\u0000q\u0244\u0001\u0000\u0000\u0000s\u027c\u0001\u0000"+ + "\u0000\u0000u\u027e\u0001\u0000\u0000\u0000w\u0281\u0001\u0000\u0000\u0000"+ + "y\u0286\u0001\u0000\u0000\u0000{\u028c\u0001\u0000\u0000\u0000}\u028f"+ + "\u0001\u0000\u0000\u0000\u007f\u0293\u0001\u0000\u0000\u0000\u0081\u029a"+ + "\u0001\u0000\u0000\u0000\u0083\u02a1\u0001\u0000\u0000\u0000\u0085\u02a7"+ + "\u0001\u0000\u0000\u0000\u0087\u02b0\u0001\u0000\u0000\u0000\u0089\u02b5"+ + "\u0001\u0000\u0000\u0000\u008b\u02bb\u0001\u0000\u0000\u0000\u008d\u02c3"+ + "\u0001\u0000\u0000\u0000\u008f\u02c8\u0001\u0000\u0000\u0000\u0091\u02cf"+ + "\u0001\u0000\u0000\u0000\u0093\u02d5\u0001\u0000\u0000\u0000\u0095\u02da"+ + "\u0001\u0000\u0000\u0000\u0097\u02e1\u0001\u0000\u0000\u0000\u0099\u02e8"+ + "\u0001\u0000\u0000\u0000\u009b\u02f0\u0001\u0000\u0000\u0000\u009d\u02f8"+ + "\u0001\u0000\u0000\u0000\u009f\u032d\u0001\u0000\u0000\u0000\u00a1\u0338"+ + "\u0001\u0000\u0000\u0000\u00a3\u033a\u0001\u0000\u0000\u0000\u00a5\u0346"+ + "\u0001\u0000\u0000\u0000\u00a7\u0350\u0001\u0000\u0000\u0000\u00a9\u035b"+ + "\u0001\u0000\u0000\u0000\u00ab\u0363\u0001\u0000\u0000\u0000\u00ad\u0370"+ + "\u0001\u0000\u0000\u0000\u00af\u0372\u0001\u0000\u0000\u0000\u00b1\u0379"+ + "\u0001\u0000\u0000\u0000\u00b3\u0380\u0001\u0000\u0000\u0000\u00b5\u0388"+ + "\u0001\u0000\u0000\u0000\u00b7\u038c\u0001\u0000\u0000\u0000\u00b9\u0392"+ + "\u0001\u0000\u0000\u0000\u00bb\u0398\u0001\u0000\u0000\u0000\u00bd\u039f"+ + "\u0001\u0000\u0000\u0000\u00bf\u03a6\u0001\u0000\u0000\u0000\u00c1\u03a9"+ + "\u0001\u0000\u0000\u0000\u00c3\u03ae\u0001\u0000\u0000\u0000\u00c5\u03b3"+ + "\u0001\u0000\u0000\u0000\u00c7\u03ba\u0001\u0000\u0000\u0000\u00c9\u03cb"+ + "\u0001\u0000\u0000\u0000\u00cb\u03d9\u0001\u0000\u0000\u0000\u00cd\u03ea"+ + "\u0001\u0000\u0000\u0000\u00cf\u03fe\u0001\u0000\u0000\u0000\u00d1\u0401"+ + "\u0001\u0000\u0000\u0000\u00d3\u040a\u0001\u0000\u0000\u0000\u00d5\u0411"+ + "\u0001\u0000\u0000\u0000\u00d7\u0413\u0001\u0000\u0000\u0000\u00d9\u0415"+ + "\u0001\u0000\u0000\u0000\u00db\u0417\u0001\u0000\u0000\u0000\u00dd\u0420"+ + "\u0001\u0000\u0000\u0000\u00df\u0422\u0001\u0000\u0000\u0000\u00e1\u0424"+ + "\u0001\u0000\u0000\u0000\u00e3\u043a\u0001\u0000\u0000\u0000\u00e5\u044e"+ + "\u0001\u0000\u0000\u0000\u00e7\u0454\u0001\u0000\u0000\u0000\u00e9\u045f"+ + "\u0001\u0000\u0000\u0000\u00eb\u046d\u0001\u0000\u0000\u0000\u00ed\u06d2"+ + "\u0001\u0000\u0000\u0000\u00ef\u06d4\u0001\u0000\u0000\u0000\u00f1\u06d6"+ + "\u0001\u0000\u0000\u0000\u00f3\u06d8\u0001\u0000\u0000\u0000\u00f5\u06da"+ + "\u0001\u0000\u0000\u0000\u00f7\u06dc\u0001\u0000\u0000\u0000\u00f9\u06de"+ + "\u0001\u0000\u0000\u0000\u00fb\u06e0\u0001\u0000\u0000\u0000\u00fd\u06e2"+ + "\u0001\u0000\u0000\u0000\u00ff\u06e4\u0001\u0000\u0000\u0000\u0101\u06e7"+ + "\u0001\u0000\u0000\u0000\u0103\u06ea\u0001\u0000\u0000\u0000\u0105\u06ec"+ + "\u0001\u0000\u0000\u0000\u0107\u06ee\u0001\u0000\u0000\u0000\u0109\u06f0"+ + "\u0001\u0000\u0000\u0000\u010b\u06f2\u0001\u0000\u0000\u0000\u010d\u06f4"+ + "\u0001\u0000\u0000\u0000\u010f\u06f6\u0001\u0000\u0000\u0000\u0111\u06f9"+ + "\u0001\u0000\u0000\u0000\u0113\u06fe\u0001\u0000\u0000\u0000\u0115\u0703"+ + "\u0001\u0000\u0000\u0000\u0117\u0705\u0001\u0000\u0000\u0000\u0119\u0715"+ + "\u0001\u0000\u0000\u0000\u011b\u071e\u0001\u0000\u0000\u0000\u011d\u072e"+ + "\u0001\u0000\u0000\u0000\u011f\u0730\u0001\u0000\u0000\u0000\u0121\u0737"+ + "\u0001\u0000\u0000\u0000\u0123\u073b\u0001\u0000\u0000\u0000\u0125\u0741"+ + "\u0001\u0000\u0000\u0000\u0127\u0743\u0001\u0000\u0000\u0000\u0129\u0745"+ + "\u0001\u0000\u0000\u0000\u012b\u0747\u0001\u0000\u0000\u0000\u012d\u074f"+ + "\u0001\u0000\u0000\u0000\u012f\u0755\u0001\u0000\u0000\u0000\u0131\u075c"+ + "\u0001\u0000\u0000\u0000\u0133\u0763\u0001\u0000\u0000\u0000\u0135\u0765"+ + "\u0001\u0000\u0000\u0000\u0137\u0767\u0001\u0000\u0000\u0000\u0139\u076b"+ + "\u0001\u0000\u0000\u0000\u013b\u0771\u0001\u0000\u0000\u0000\u013d\u077c"+ + "\u0001\u0000\u0000\u0000\u013f\u078a\u0001\u0000\u0000\u0000\u0141\u0793"+ + "\u0001\u0000\u0000\u0000\u0143\u07a0\u0001\u0000\u0000\u0000\u0145\u07a6"+ + "\u0001\u0000\u0000\u0000\u0147\u07b1\u0001\u0000\u0000\u0000\u0149\u014a"+ + "\u0005{\u0000\u0000\u014a\u014b\u0006\u0000\u0000\u0000\u014b\u0004\u0001"+ + "\u0000\u0000\u0000\u014c\u014d\u0005}\u0000\u0000\u014d\u0006\u0001\u0000"+ + "\u0000\u0000\u014e\u014f\u0005[\u0000\u0000\u014f\b\u0001\u0000\u0000"+ + "\u0000\u0150\u0151\u0005]\u0000\u0000\u0151\n\u0001\u0000\u0000\u0000"+ + "\u0152\u0153\u0005(\u0000\u0000\u0153\f\u0001\u0000\u0000\u0000\u0154"+ + "\u0155\u0005)\u0000\u0000\u0155\u000e\u0001\u0000\u0000\u0000\u0156\u0157"+ + "\u0005;\u0000\u0000\u0157\u0010\u0001\u0000\u0000\u0000\u0158\u0159\u0005"+ + ":\u0000\u0000\u0159\u0012\u0001\u0000\u0000\u0000\u015a\u015b\u0005,\u0000"+ + "\u0000\u015b\u0014\u0001\u0000\u0000\u0000\u015c\u015d\u0005.\u0000\u0000"+ + "\u015d\u015e\u0005.\u0000\u0000\u015e\u0016\u0001\u0000\u0000\u0000\u015f"+ + "\u0160\u0005.\u0000\u0000\u0160\u0161\u0005.\u0000\u0000\u0161\u0162\u0005"+ + ".\u0000\u0000\u0162\u0018\u0001\u0000\u0000\u0000\u0163\u0164\u0005?\u0000"+ + "\u0000\u0164\u001a\u0001\u0000\u0000\u0000\u0165\u0166\u0005.\u0000\u0000"+ + "\u0166\u001c\u0001\u0000\u0000\u0000\u0167\u0168\u0005-\u0000\u0000\u0168"+ + "\u0169\u0005>\u0000\u0000\u0169\u001e\u0001\u0000\u0000\u0000\u016a\u016b"+ + "\u0005+\u0000\u0000\u016b \u0001\u0000\u0000\u0000\u016c\u016d\u0005-"+ + "\u0000\u0000\u016d\"\u0001\u0000\u0000\u0000\u016e\u016f\u0005*\u0000"+ + "\u0000\u016f$\u0001\u0000\u0000\u0000\u0170\u0171\u0005/\u0000\u0000\u0171"+ + "&\u0001\u0000\u0000\u0000\u0172\u0173\u0005%\u0000\u0000\u0173(\u0001"+ + "\u0000\u0000\u0000\u0174\u0175\u0005+\u0000\u0000\u0175\u0176\u0005+\u0000"+ + "\u0000\u0176*\u0001\u0000\u0000\u0000\u0177\u0178\u0005-\u0000\u0000\u0178"+ + "\u0179\u0005-\u0000\u0000\u0179,\u0001\u0000\u0000\u0000\u017a\u017b\u0005"+ + "&\u0000\u0000\u017b.\u0001\u0000\u0000\u0000\u017c\u017d\u0005~\u0000"+ + "\u0000\u017d0\u0001\u0000\u0000\u0000\u017e\u017f\u0005^\u0000\u0000\u017f"+ + "2\u0001\u0000\u0000\u0000\u0180\u0181\u0005|\u0000\u0000\u01814\u0001"+ + "\u0000\u0000\u0000\u0182\u0183\u0005<\u0000\u0000\u0183\u0184\u0005<\u0000"+ + "\u0000\u01846\u0001\u0000\u0000\u0000\u0185\u0186\u0005>\u0000\u0000\u0186"+ + "\u0187\u0005>\u0000\u0000\u01878\u0001\u0000\u0000\u0000\u0188\u0189\u0005"+ + "=\u0000\u0000\u0189\u018a\u0005=\u0000\u0000\u018a:\u0001\u0000\u0000"+ + "\u0000\u018b\u018c\u0005!\u0000\u0000\u018c\u018d\u0005=\u0000\u0000\u018d"+ + "<\u0001\u0000\u0000\u0000\u018e\u018f\u0005<\u0000\u0000\u018f>\u0001"+ + "\u0000\u0000\u0000\u0190\u0191\u0005<\u0000\u0000\u0191\u0192\u0005=\u0000"+ + "\u0000\u0192@\u0001\u0000\u0000\u0000\u0193\u0194\u0005>\u0000\u0000\u0194"+ + "\u0195\u0005=\u0000\u0000\u0195B\u0001\u0000\u0000\u0000\u0196\u0197\u0005"+ + ">\u0000\u0000\u0197D\u0001\u0000\u0000\u0000\u0198\u0199\u0005&\u0000"+ + "\u0000\u0199\u019a\u0005&\u0000\u0000\u019aF\u0001\u0000\u0000\u0000\u019b"+ + "\u019c\u0005|\u0000\u0000\u019c\u019d\u0005|\u0000\u0000\u019dH\u0001"+ + "\u0000\u0000\u0000\u019e\u019f\u0005=\u0000\u0000\u019fJ\u0001\u0000\u0000"+ + "\u0000\u01a0\u01a1\u0005+\u0000\u0000\u01a1\u01b7\u0005=\u0000\u0000\u01a2"+ + "\u01a3\u0005-\u0000\u0000\u01a3\u01b7\u0005=\u0000\u0000\u01a4\u01a5\u0005"+ + "*\u0000\u0000\u01a5\u01b7\u0005=\u0000\u0000\u01a6\u01a7\u0005/\u0000"+ + "\u0000\u01a7\u01b7\u0005=\u0000\u0000\u01a8\u01a9\u0005%\u0000\u0000\u01a9"+ + "\u01b7\u0005=\u0000\u0000\u01aa\u01ab\u0005<\u0000\u0000\u01ab\u01ac\u0005"+ + "<\u0000\u0000\u01ac\u01b7\u0005=\u0000\u0000\u01ad\u01ae\u0005>\u0000"+ + "\u0000\u01ae\u01af\u0005>\u0000\u0000\u01af\u01b7\u0005=\u0000\u0000\u01b0"+ + "\u01b1\u0005&\u0000\u0000\u01b1\u01b7\u0005=\u0000\u0000\u01b2\u01b3\u0005"+ + "|\u0000\u0000\u01b3\u01b7\u0005=\u0000\u0000\u01b4\u01b5\u0005^\u0000"+ + "\u0000\u01b5\u01b7\u0005=\u0000\u0000\u01b6\u01a0\u0001\u0000\u0000\u0000"+ + "\u01b6\u01a2\u0001\u0000\u0000\u0000\u01b6\u01a4\u0001\u0000\u0000\u0000"+ + "\u01b6\u01a6\u0001\u0000\u0000\u0000\u01b6\u01a8\u0001\u0000\u0000\u0000"+ + "\u01b6\u01aa\u0001\u0000\u0000\u0000\u01b6\u01ad\u0001\u0000\u0000\u0000"+ + "\u01b6\u01b0\u0001\u0000\u0000\u0000\u01b6\u01b2\u0001\u0000\u0000\u0000"+ + "\u01b6\u01b4\u0001\u0000\u0000\u0000\u01b7L\u0001\u0000\u0000\u0000\u01b8"+ + "\u01b9\u0005t\u0000\u0000\u01b9\u01ba\u0005y\u0000\u0000\u01ba\u01bb\u0005"+ + "p\u0000\u0000\u01bb\u01bc\u0005e\u0000\u0000\u01bc\u01bd\u0005d\u0000"+ + "\u0000\u01bd\u01be\u0005e\u0000\u0000\u01be\u01bf\u0005f\u0000\u0000\u01bf"+ + "N\u0001\u0000\u0000\u0000\u01c0\u01c1\u0005c\u0000\u0000\u01c1\u01c2\u0005"+ + "o\u0000\u0000\u01c2\u01c3\u0005n\u0000\u0000\u01c3\u01c4\u0005s\u0000"+ + "\u0000\u01c4\u01c5\u0005t\u0000\u0000\u01c5P\u0001\u0000\u0000\u0000\u01c6"+ + "\u01c7\u0005e\u0000\u0000\u01c7\u01c8\u0005x\u0000\u0000\u01c8\u01c9\u0005"+ + "t\u0000\u0000\u01c9\u01ca\u0005e\u0000\u0000\u01ca\u01cb\u0005r\u0000"+ + "\u0000\u01cb\u01cc\u0005n\u0000\u0000\u01ccR\u0001\u0000\u0000\u0000\u01cd"+ + "\u01ce\u0005_\u0000\u0000\u01ce\u01cf\u0005_\u0000\u0000\u01cf\u01d0\u0005"+ + "e\u0000\u0000\u01d0\u01d1\u0005x\u0000\u0000\u01d1\u01d2\u0005p\u0000"+ + "\u0000\u01d2\u01d3\u0005o\u0000\u0000\u01d3\u01d4\u0005r\u0000\u0000\u01d4"+ + "\u01d5\u0005t\u0000\u0000\u01d5T\u0001\u0000\u0000\u0000\u01d6\u01d7\u0005"+ + "_\u0000\u0000\u01d7\u01d8\u0005_\u0000\u0000\u01d8\u01d9\u0005a\u0000"+ + "\u0000\u01d9\u01da\u0005l\u0000\u0000\u01da\u01db\u0005i\u0000\u0000\u01db"+ + "\u01dc\u0005g\u0000\u0000\u01dc\u01dd\u0005n\u0000\u0000\u01ddV\u0001"+ + "\u0000\u0000\u0000\u01de\u01df\u0005i\u0000\u0000\u01df\u01e0\u0005n\u0000"+ + "\u0000\u01e0\u01e1\u0005l\u0000\u0000\u01e1\u01e2\u0005i\u0000\u0000\u01e2"+ + "\u01e3\u0005n\u0000\u0000\u01e3\u01e4\u0005e\u0000\u0000\u01e4X\u0001"+ + "\u0000\u0000\u0000\u01e5\u01e6\u0005v\u0000\u0000\u01e6\u01e7\u0005o\u0000"+ + "\u0000\u01e7\u01e8\u0005l\u0000\u0000\u01e8\u01e9\u0005a\u0000\u0000\u01e9"+ + "\u01ea\u0005t\u0000\u0000\u01ea\u01eb\u0005i\u0000\u0000\u01eb\u01ec\u0005"+ + "l\u0000\u0000\u01ec\u01ed\u0005e\u0000\u0000\u01edZ\u0001\u0000\u0000"+ + "\u0000\u01ee\u01ef\u0005s\u0000\u0000\u01ef\u01f0\u0005t\u0000\u0000\u01f0"+ + "\u01f1\u0005a\u0000\u0000\u01f1\u01f2\u0005t\u0000\u0000\u01f2\u01f3\u0005"+ + "i\u0000\u0000\u01f3\u01f4\u0005c\u0000\u0000\u01f4\\\u0001\u0000\u0000"+ + "\u0000\u01f5\u01f6\u0005_\u0000\u0000\u01f6\u01f7\u0005_\u0000\u0000\u01f7"+ + "\u01f8\u0005i\u0000\u0000\u01f8\u01f9\u0005n\u0000\u0000\u01f9\u01fa\u0005"+ + "t\u0000\u0000\u01fa\u01fb\u0005e\u0000\u0000\u01fb\u01fc\u0005r\u0000"+ + "\u0000\u01fc\u01fd\u0005r\u0000\u0000\u01fd\u01fe\u0005u\u0000\u0000\u01fe"+ + "\u01ff\u0005p\u0000\u0000\u01ff\u0200\u0005t\u0000\u0000\u0200^\u0001"+ + "\u0000\u0000\u0000\u0201\u0202\u0005r\u0000\u0000\u0202\u0203\u0005e\u0000"+ + "\u0000\u0203\u0204\u0005g\u0000\u0000\u0204\u0205\u0005i\u0000\u0000\u0205"+ + "\u0206\u0005s\u0000\u0000\u0206\u0207\u0005t\u0000\u0000\u0207\u0208\u0005"+ + "e\u0000\u0000\u0208\u0209\u0005r\u0000\u0000\u0209`\u0001\u0000\u0000"+ + "\u0000\u020a\u020b\u0005_\u0000\u0000\u020b\u020c\u0005_\u0000\u0000\u020c"+ + "\u020d\u0005z\u0000\u0000\u020d\u020e\u0005p\u0000\u0000\u020e\u020f\u0005"+ + "_\u0000\u0000\u020f\u0210\u0005r\u0000\u0000\u0210\u0211\u0005e\u0000"+ + "\u0000\u0211\u0212\u0005s\u0000\u0000\u0212\u0213\u0005e\u0000\u0000\u0213"+ + "\u0214\u0005r\u0000\u0000\u0214\u0215\u0005v\u0000\u0000\u0215\u0216\u0005"+ + "e\u0000\u0000\u0216b\u0001\u0000\u0000\u0000\u0217\u0218\u0005_\u0000"+ + "\u0000\u0218\u0219\u0005_\u0000\u0000\u0219\u021a\u0005a\u0000\u0000\u021a"+ + "\u021b\u0005d\u0000\u0000\u021b\u021c\u0005d\u0000\u0000\u021c\u021d\u0005"+ + "r\u0000\u0000\u021d\u021e\u0005e\u0000\u0000\u021e\u021f\u0005s\u0000"+ + "\u0000\u021f\u0220\u0005s\u0000\u0000\u0220d\u0001\u0000\u0000\u0000\u0221"+ + "\u0222\u0005_\u0000\u0000\u0222\u0223\u0005_\u0000\u0000\u0223\u0224\u0005"+ + "z\u0000\u0000\u0224\u0225\u0005p\u0000\u0000\u0225f\u0001\u0000\u0000"+ + "\u0000\u0226\u0227\u0005_\u0000\u0000\u0227\u0228\u0005_\u0000\u0000\u0228"+ + "\u0229\u0005m\u0000\u0000\u0229\u022a\u0005e\u0000\u0000\u022a\u022b\u0005"+ + "m\u0000\u0000\u022bh\u0001\u0000\u0000\u0000\u022c\u022d\u0005_\u0000"+ + "\u0000\u022d\u022e\u0005_\u0000\u0000\u022e\u022f\u0005f\u0000\u0000\u022f"+ + "\u0230\u0005a\u0000\u0000\u0230\u0231\u0005r\u0000\u0000\u0231j\u0001"+ + "\u0000\u0000\u0000\u0232\u0233\u0005_\u0000\u0000\u0233\u0234\u0005_\u0000"+ + "\u0000\u0234\u0235\u0005n\u0000\u0000\u0235\u0236\u0005e\u0000\u0000\u0236"+ + "\u0237\u0005a\u0000\u0000\u0237\u0238\u0005r\u0000\u0000\u0238l\u0001"+ + "\u0000\u0000\u0000\u0239\u023a\u0005_\u0000\u0000\u023a\u023b\u0005_\u0000"+ + "\u0000\u023b\u023c\u0005s\u0000\u0000\u023c\u023d\u0005s\u0000\u0000\u023d"+ + "\u023e\u0005a\u0000\u0000\u023en\u0001\u0000\u0000\u0000\u023f\u0240\u0005"+ + "_\u0000\u0000\u0240\u0241\u0005_\u0000\u0000\u0241\u0242\u0005m\u0000"+ + "\u0000\u0242\u0243\u0005a\u0000\u0000\u0243p\u0001\u0000\u0000\u0000\u0244"+ + "\u0245\u0005_\u0000\u0000\u0245\u0246\u0005_\u0000\u0000\u0246\u0247\u0005"+ + "i\u0000\u0000\u0247\u0248\u0005n\u0000\u0000\u0248\u0249\u0005t\u0000"+ + "\u0000\u0249\u024a\u0005r\u0000\u0000\u024a\u024b\u0005i\u0000\u0000\u024b"+ + "\u024c\u0005n\u0000\u0000\u024c\u024d\u0005s\u0000\u0000\u024d\u024e\u0005"+ + "i\u0000\u0000\u024e\u024f\u0005c\u0000\u0000\u024fr\u0001\u0000\u0000"+ + "\u0000\u0250\u0251\u0005_\u0000\u0000\u0251\u0252\u0005_\u0000\u0000\u0252"+ + "\u0253\u0005s\u0000\u0000\u0253\u0254\u0005t\u0000\u0000\u0254\u0255\u0005"+ + "a\u0000\u0000\u0255\u0256\u0005c\u0000\u0000\u0256\u0257\u0005k\u0000"+ + "\u0000\u0257\u0258\u0005c\u0000\u0000\u0258\u0259\u0005a\u0000\u0000\u0259"+ + "\u025a\u0005l\u0000\u0000\u025a\u027d\u0005l\u0000\u0000\u025b\u025c\u0005"+ + "_\u0000\u0000\u025c\u025d\u0005_\u0000\u0000\u025d\u025e\u0005p\u0000"+ + "\u0000\u025e\u025f\u0005h\u0000\u0000\u025f\u0260\u0005i\u0000\u0000\u0260"+ + "\u0261\u0005c\u0000\u0000\u0261\u0262\u0005a\u0000\u0000\u0262\u0263\u0005"+ + "l\u0000\u0000\u0263\u027d\u0005l\u0000\u0000\u0264\u0265\u0005_\u0000"+ + "\u0000\u0265\u0266\u0005_\u0000\u0000\u0266\u0267\u0005v\u0000\u0000\u0267"+ + "\u0268\u0005a\u0000\u0000\u0268\u0269\u0005r\u0000\u0000\u0269\u026a\u0005"+ + "c\u0000\u0000\u026a\u026b\u0005a\u0000\u0000\u026b\u026c\u0005l\u0000"+ + "\u0000\u026c\u027d\u0005l\u0000\u0000\u026d\u026e\u0005_\u0000\u0000\u026e"+ + "\u026f\u0005_\u0000\u0000\u026f\u0270\u0005i\u0000\u0000\u0270\u0271\u0005"+ + "n\u0000\u0000\u0271\u0272\u0005t\u0000\u0000\u0272\u0273\u0005r\u0000"+ + "\u0000\u0273\u0274\u0005i\u0000\u0000\u0274\u0275\u0005n\u0000\u0000\u0275"+ + "\u0276\u0005s\u0000\u0000\u0276\u0277\u0005i\u0000\u0000\u0277\u0278\u0005"+ + "c\u0000\u0000\u0278\u0279\u0005c\u0000\u0000\u0279\u027a\u0005a\u0000"+ + "\u0000\u027a\u027b\u0005l\u0000\u0000\u027b\u027d\u0005l\u0000\u0000\u027c"+ + "\u0250\u0001\u0000\u0000\u0000\u027c\u025b\u0001\u0000\u0000\u0000\u027c"+ + "\u0264\u0001\u0000\u0000\u0000\u027c\u026d\u0001\u0000\u0000\u0000\u027d"+ + "t\u0001\u0000\u0000\u0000\u027e\u027f\u0005i\u0000\u0000\u027f\u0280\u0005"+ + "f\u0000\u0000\u0280v\u0001\u0000\u0000\u0000\u0281\u0282\u0005e\u0000"+ + "\u0000\u0282\u0283\u0005l\u0000\u0000\u0283\u0284\u0005s\u0000\u0000\u0284"+ + "\u0285\u0005e\u0000\u0000\u0285x\u0001\u0000\u0000\u0000\u0286\u0287\u0005"+ + "w\u0000\u0000\u0287\u0288\u0005h\u0000\u0000\u0288\u0289\u0005i\u0000"+ + "\u0000\u0289\u028a\u0005l\u0000\u0000\u028a\u028b\u0005e\u0000\u0000\u028b"+ + "z\u0001\u0000\u0000\u0000\u028c\u028d\u0005d\u0000\u0000\u028d\u028e\u0005"+ + "o\u0000\u0000\u028e|\u0001\u0000\u0000\u0000\u028f\u0290\u0005f\u0000"+ + "\u0000\u0290\u0291\u0005o\u0000\u0000\u0291\u0292\u0005r\u0000\u0000\u0292"+ + "~\u0001\u0000\u0000\u0000\u0293\u0294\u0005s\u0000\u0000\u0294\u0295\u0005"+ + "w\u0000\u0000\u0295\u0296\u0005i\u0000\u0000\u0296\u0297\u0005t\u0000"+ + "\u0000\u0297\u0298\u0005c\u0000\u0000\u0298\u0299\u0005h\u0000\u0000\u0299"+ + "\u0080\u0001\u0000\u0000\u0000\u029a\u029b\u0005r\u0000\u0000\u029b\u029c"+ + "\u0005e\u0000\u0000\u029c\u029d\u0005t\u0000\u0000\u029d\u029e\u0005u"+ + "\u0000\u0000\u029e\u029f\u0005r\u0000\u0000\u029f\u02a0\u0005n\u0000\u0000"+ + "\u02a0\u0082\u0001\u0000\u0000\u0000\u02a1\u02a2\u0005b\u0000\u0000\u02a2"+ + "\u02a3\u0005r\u0000\u0000\u02a3\u02a4\u0005e\u0000\u0000\u02a4\u02a5\u0005"+ + "a\u0000\u0000\u02a5\u02a6\u0005k\u0000\u0000\u02a6\u0084\u0001\u0000\u0000"+ + "\u0000\u02a7\u02a8\u0005c\u0000\u0000\u02a8\u02a9\u0005o\u0000\u0000\u02a9"+ + "\u02aa\u0005n\u0000\u0000\u02aa\u02ab\u0005t\u0000\u0000\u02ab\u02ac\u0005"+ + "i\u0000\u0000\u02ac\u02ad\u0005n\u0000\u0000\u02ad\u02ae\u0005u\u0000"+ + "\u0000\u02ae\u02af\u0005e\u0000\u0000\u02af\u0086\u0001\u0000\u0000\u0000"+ + "\u02b0\u02b1\u0005g\u0000\u0000\u02b1\u02b2\u0005o\u0000\u0000\u02b2\u02b3"+ + "\u0005t\u0000\u0000\u02b3\u02b4\u0005o\u0000\u0000\u02b4\u0088\u0001\u0000"+ + "\u0000\u0000\u02b5\u02b6\u0005a\u0000\u0000\u02b6\u02b7\u0005s\u0000\u0000"+ + "\u02b7\u02b8\u0005m\u0000\u0000\u02b8\u02b9\u0001\u0000\u0000\u0000\u02b9"+ + "\u02ba\u0006C\u0001\u0000\u02ba\u008a\u0001\u0000\u0000\u0000\u02bb\u02bc"+ + "\u0005d\u0000\u0000\u02bc\u02bd\u0005e\u0000\u0000\u02bd\u02be\u0005f"+ + "\u0000\u0000\u02be\u02bf\u0005a\u0000\u0000\u02bf\u02c0\u0005u\u0000\u0000"+ + "\u02c0\u02c1\u0005l\u0000\u0000\u02c1\u02c2\u0005t\u0000\u0000\u02c2\u008c"+ + "\u0001\u0000\u0000\u0000\u02c3\u02c4\u0005c\u0000\u0000\u02c4\u02c5\u0005"+ + "a\u0000\u0000\u02c5\u02c6\u0005s\u0000\u0000\u02c6\u02c7\u0005e\u0000"+ + "\u0000\u02c7\u008e\u0001\u0000\u0000\u0000\u02c8\u02c9\u0005s\u0000\u0000"+ + "\u02c9\u02ca\u0005t\u0000\u0000\u02ca\u02cb\u0005r\u0000\u0000\u02cb\u02cc"+ + "\u0005u\u0000\u0000\u02cc\u02cd\u0005c\u0000\u0000\u02cd\u02ce\u0005t"+ + "\u0000\u0000\u02ce\u0090\u0001\u0000\u0000\u0000\u02cf\u02d0\u0005u\u0000"+ + "\u0000\u02d0\u02d1\u0005n\u0000\u0000\u02d1\u02d2\u0005i\u0000\u0000\u02d2"+ + "\u02d3\u0005o\u0000\u0000\u02d3\u02d4\u0005n\u0000\u0000\u02d4\u0092\u0001"+ + "\u0000\u0000\u0000\u02d5\u02d6\u0005e\u0000\u0000\u02d6\u02d7\u0005n\u0000"+ + "\u0000\u02d7\u02d8\u0005u\u0000\u0000\u02d8\u02d9\u0005m\u0000\u0000\u02d9"+ + "\u0094\u0001\u0000\u0000\u0000\u02da\u02db\u0005s\u0000\u0000\u02db\u02dc"+ + "\u0005i\u0000\u0000\u02dc\u02dd\u0005z\u0000\u0000\u02dd\u02de\u0005e"+ + "\u0000\u0000\u02de\u02df\u0005o\u0000\u0000\u02df\u02e0\u0005f\u0000\u0000"+ + "\u02e0\u0096\u0001\u0000\u0000\u0000\u02e1\u02e2\u0005t\u0000\u0000\u02e2"+ + "\u02e3\u0005y\u0000\u0000\u02e3\u02e4\u0005p\u0000\u0000\u02e4\u02e5\u0005"+ + "e\u0000\u0000\u02e5\u02e6\u0005i\u0000\u0000\u02e6\u02e7\u0005d\u0000"+ + "\u0000\u02e7\u0098\u0001\u0000\u0000\u0000\u02e8\u02e9\u0005d\u0000\u0000"+ + "\u02e9\u02ea\u0005e\u0000\u0000\u02ea\u02eb\u0005f\u0000\u0000\u02eb\u02ec"+ + "\u0005i\u0000\u0000\u02ec\u02ed\u0005n\u0000\u0000\u02ed\u02ee\u0005e"+ + "\u0000\u0000\u02ee\u02ef\u0005d\u0000\u0000\u02ef\u009a\u0001\u0000\u0000"+ + "\u0000\u02f0\u02f1\u0005k\u0000\u0000\u02f1\u02f2\u0005i\u0000\u0000\u02f2"+ + "\u02f3\u0005c\u0000\u0000\u02f3\u02f4\u0005k\u0000\u0000\u02f4\u02f5\u0005"+ + "a\u0000\u0000\u02f5\u02f6\u0005s\u0000\u0000\u02f6\u02f7\u0005m\u0000"+ + "\u0000\u02f7\u009c\u0001\u0000\u0000\u0000\u02f8\u02f9\u0005!\u0000\u0000"+ + "\u02f9\u009e\u0001\u0000\u0000\u0000\u02fa\u02fb\u0005s\u0000\u0000\u02fb"+ + "\u02fc\u0005i\u0000\u0000\u02fc\u02fd\u0005g\u0000\u0000\u02fd\u02fe\u0005"+ + "n\u0000\u0000\u02fe\u02ff\u0005e\u0000\u0000\u02ff\u032e\u0005d\u0000"+ + "\u0000\u0300\u0301\u0005u\u0000\u0000\u0301\u0302\u0005n\u0000\u0000\u0302"+ + "\u0303\u0005s\u0000\u0000\u0303\u0304\u0005i\u0000\u0000\u0304\u0305\u0005"+ + "g\u0000\u0000\u0305\u0306\u0005n\u0000\u0000\u0306\u0307\u0005e\u0000"+ + "\u0000\u0307\u032e\u0005d\u0000\u0000\u0308\u0309\u0005b\u0000\u0000\u0309"+ + "\u030a\u0005y\u0000\u0000\u030a\u030b\u0005t\u0000\u0000\u030b\u032e\u0005"+ + "e\u0000\u0000\u030c\u030d\u0005w\u0000\u0000\u030d\u030e\u0005o\u0000"+ + "\u0000\u030e\u030f\u0005r\u0000\u0000\u030f\u032e\u0005d\u0000\u0000\u0310"+ + "\u0311\u0005d\u0000\u0000\u0311\u0312\u0005w\u0000\u0000\u0312\u0313\u0005"+ + "o\u0000\u0000\u0313\u0314\u0005r\u0000\u0000\u0314\u032e\u0005d\u0000"+ + "\u0000\u0315\u0316\u0005b\u0000\u0000\u0316\u0317\u0005o\u0000\u0000\u0317"+ + "\u0318\u0005o\u0000\u0000\u0318\u032e\u0005l\u0000\u0000\u0319\u031a\u0005"+ + "c\u0000\u0000\u031a\u031b\u0005h\u0000\u0000\u031b\u031c\u0005a\u0000"+ + "\u0000\u031c\u032e\u0005r\u0000\u0000\u031d\u031e\u0005s\u0000\u0000\u031e"+ + "\u031f\u0005h\u0000\u0000\u031f\u0320\u0005o\u0000\u0000\u0320\u0321\u0005"+ + "r\u0000\u0000\u0321\u032e\u0005t\u0000\u0000\u0322\u0323\u0005i\u0000"+ + "\u0000\u0323\u0324\u0005n\u0000\u0000\u0324\u032e\u0005t\u0000\u0000\u0325"+ + "\u0326\u0005l\u0000\u0000\u0326\u0327\u0005o\u0000\u0000\u0327\u0328\u0005"+ + "n\u0000\u0000\u0328\u032e\u0005g\u0000\u0000\u0329\u032a\u0005v\u0000"+ + "\u0000\u032a\u032b\u0005o\u0000\u0000\u032b\u032c\u0005i\u0000\u0000\u032c"+ + "\u032e\u0005d\u0000\u0000\u032d\u02fa\u0001\u0000\u0000\u0000\u032d\u0300"+ + "\u0001\u0000\u0000\u0000\u032d\u0308\u0001\u0000\u0000\u0000\u032d\u030c"+ + "\u0001\u0000\u0000\u0000\u032d\u0310\u0001\u0000\u0000\u0000\u032d\u0315"+ + "\u0001\u0000\u0000\u0000\u032d\u0319\u0001\u0000\u0000\u0000\u032d\u031d"+ + "\u0001\u0000\u0000\u0000\u032d\u0322\u0001\u0000\u0000\u0000\u032d\u0325"+ + "\u0001\u0000\u0000\u0000\u032d\u0329\u0001\u0000\u0000\u0000\u032e\u00a0"+ + "\u0001\u0000\u0000\u0000\u032f\u0330\u0005t\u0000\u0000\u0330\u0331\u0005"+ + "r\u0000\u0000\u0331\u0332\u0005u\u0000\u0000\u0332\u0339\u0005e\u0000"+ + "\u0000\u0333\u0334\u0005f\u0000\u0000\u0334\u0335\u0005a\u0000\u0000\u0335"+ + "\u0336\u0005l\u0000\u0000\u0336\u0337\u0005s\u0000\u0000\u0337\u0339\u0005"+ + "e\u0000\u0000\u0338\u032f\u0001\u0000\u0000\u0000\u0338\u0333\u0001\u0000"+ + "\u0000\u0000\u0339\u00a2\u0001\u0000\u0000\u0000\u033a\u033b\u0005{\u0000"+ + "\u0000\u033b\u033c\u0005{\u0000\u0000\u033c\u0340\u0001\u0000\u0000\u0000"+ + "\u033d\u033f\t\u0000\u0000\u0000\u033e\u033d\u0001\u0000\u0000\u0000\u033f"+ + "\u0342\u0001\u0000\u0000\u0000\u0340\u0341\u0001\u0000\u0000\u0000\u0340"+ + "\u033e\u0001\u0000\u0000\u0000\u0341\u0343\u0001\u0000\u0000\u0000\u0342"+ + "\u0340\u0001\u0000\u0000\u0000\u0343\u0344\u0005}\u0000\u0000\u0344\u0345"+ + "\u0005}\u0000\u0000\u0345\u00a4\u0001\u0000\u0000\u0000\u0346\u0347\u0005"+ + "#\u0000\u0000\u0347\u0348\u0005i\u0000\u0000\u0348\u0349\u0005m\u0000"+ + "\u0000\u0349\u034a\u0005p\u0000\u0000\u034a\u034b\u0005o\u0000\u0000\u034b"+ + "\u034c\u0005r\u0000\u0000\u034c\u034d\u0005t\u0000\u0000\u034d\u034e\u0001"+ + "\u0000\u0000\u0000\u034e\u034f\u0006Q\u0002\u0000\u034f\u00a6\u0001\u0000"+ + "\u0000\u0000\u0350\u0351\u0005#\u0000\u0000\u0351\u0352\u0005i\u0000\u0000"+ + "\u0352\u0353\u0005n\u0000\u0000\u0353\u0354\u0005c\u0000\u0000\u0354\u0355"+ + "\u0005l\u0000\u0000\u0355\u0356\u0005u\u0000\u0000\u0356\u0357\u0005d"+ + "\u0000\u0000\u0357\u0358\u0005e\u0000\u0000\u0358\u0359\u0001\u0000\u0000"+ + "\u0000\u0359\u035a\u0006R\u0003\u0000\u035a\u00a8\u0001\u0000\u0000\u0000"+ + "\u035b\u035c\u0005#\u0000\u0000\u035c\u035d\u0005p\u0000\u0000\u035d\u035e"+ + "\u0005r\u0000\u0000\u035e\u035f\u0005a\u0000\u0000\u035f\u0360\u0005g"+ + "\u0000\u0000\u0360\u0361\u0005m\u0000\u0000\u0361\u0362\u0005a\u0000\u0000"+ + "\u0362\u00aa\u0001\u0000\u0000\u0000\u0363\u0364\u0005#\u0000\u0000\u0364"+ + "\u0365\u0005d\u0000\u0000\u0365\u0366\u0005e\u0000\u0000\u0366\u0367\u0005"+ + "f\u0000\u0000\u0367\u0368\u0005i\u0000\u0000\u0368\u0369\u0005n\u0000"+ + "\u0000\u0369\u036a\u0005e\u0000\u0000\u036a\u00ac\u0001\u0000\u0000\u0000"+ + "\u036b\u036c\u0005\\\u0000\u0000\u036c\u0371\u0005\n\u0000\u0000\u036d"+ + "\u036e\u0005\\\u0000\u0000\u036e\u036f\u0005\r\u0000\u0000\u036f\u0371"+ + "\u0005\n\u0000\u0000\u0370\u036b\u0001\u0000\u0000\u0000\u0370\u036d\u0001"+ + "\u0000\u0000\u0000\u0371\u00ae\u0001\u0000\u0000\u0000\u0372\u0373\u0005"+ + "#\u0000\u0000\u0373\u0374\u0005u\u0000\u0000\u0374\u0375\u0005n\u0000"+ + "\u0000\u0375\u0376\u0005d\u0000\u0000\u0376\u0377\u0005e\u0000\u0000\u0377"+ + "\u0378\u0005f\u0000\u0000\u0378\u00b0\u0001\u0000\u0000\u0000\u0379\u037a"+ + "\u0005#\u0000\u0000\u037a\u037b\u0005i\u0000\u0000\u037b\u037c\u0005f"+ + "\u0000\u0000\u037c\u037d\u0005d\u0000\u0000\u037d\u037e\u0005e\u0000\u0000"+ + "\u037e\u037f\u0005f\u0000\u0000\u037f\u00b2\u0001\u0000\u0000\u0000\u0380"+ + "\u0381\u0005#\u0000\u0000\u0381\u0382\u0005i\u0000\u0000\u0382\u0383\u0005"+ + "f\u0000\u0000\u0383\u0384\u0005n\u0000\u0000\u0384\u0385\u0005d\u0000"+ + "\u0000\u0385\u0386\u0005e\u0000\u0000\u0386\u0387\u0005f\u0000\u0000\u0387"+ + "\u00b4\u0001\u0000\u0000\u0000\u0388\u0389\u0005#\u0000\u0000\u0389\u038a"+ + "\u0005i\u0000\u0000\u038a\u038b\u0005f\u0000\u0000\u038b\u00b6\u0001\u0000"+ + "\u0000\u0000\u038c\u038d\u0005#\u0000\u0000\u038d\u038e\u0005e\u0000\u0000"+ + "\u038e\u038f\u0005l\u0000\u0000\u038f\u0390\u0005i\u0000\u0000\u0390\u0391"+ + "\u0005f\u0000\u0000\u0391\u00b8\u0001\u0000\u0000\u0000\u0392\u0393\u0005"+ + "#\u0000\u0000\u0393\u0394\u0005e\u0000\u0000\u0394\u0395\u0005l\u0000"+ + "\u0000\u0395\u0396\u0005s\u0000\u0000\u0396\u0397\u0005e\u0000\u0000\u0397"+ + "\u00ba\u0001\u0000\u0000\u0000\u0398\u0399\u0005#\u0000\u0000\u0399\u039a"+ + "\u0005e\u0000\u0000\u039a\u039b\u0005n\u0000\u0000\u039b\u039c\u0005d"+ + "\u0000\u0000\u039c\u039d\u0005i\u0000\u0000\u039d\u039e\u0005f\u0000\u0000"+ + "\u039e\u00bc\u0001\u0000\u0000\u0000\u039f\u03a0\u0005#\u0000\u0000\u03a0"+ + "\u03a1\u0005e\u0000\u0000\u03a1\u03a2\u0005r\u0000\u0000\u03a2\u03a3\u0005"+ + "r\u0000\u0000\u03a3\u03a4\u0005o\u0000\u0000\u03a4\u03a5\u0005r\u0000"+ + "\u0000\u03a5\u00be\u0001\u0000\u0000\u0000\u03a6\u03a7\u0005#\u0000\u0000"+ + "\u03a7\u03a8\u0003\u00dbl\u0000\u03a8\u00c0\u0001\u0000\u0000\u0000\u03a9"+ + "\u03aa\u0005#\u0000\u0000\u03aa\u03ab\u0003\u00dbl\u0000\u03ab\u00c2\u0001"+ + "\u0000\u0000\u0000\u03ac\u03af\u0003\u00c5a\u0000\u03ad\u03af\u0003\u00cd"+ + "e\u0000\u03ae\u03ac\u0001\u0000\u0000\u0000\u03ae\u03ad\u0001\u0000\u0000"+ + "\u0000\u03af\u00c4\u0001\u0000\u0000\u0000\u03b0\u03b4\u0003\u00c7b\u0000"+ + "\u03b1\u03b4\u0003\u00c9c\u0000\u03b2\u03b4\u0003\u00cbd\u0000\u03b3\u03b0"+ + "\u0001\u0000\u0000\u0000\u03b3\u03b1\u0001\u0000\u0000\u0000\u03b3\u03b2"+ + "\u0001\u0000\u0000\u0000\u03b4\u00c6\u0001\u0000\u0000\u0000\u03b5\u03bb"+ + "\u0005%\u0000\u0000\u03b6\u03b7\u00050\u0000\u0000\u03b7\u03bb\u0005b"+ + "\u0000\u0000\u03b8\u03b9\u00050\u0000\u0000\u03b9\u03bb\u0005B\u0000\u0000"+ + "\u03ba\u03b5\u0001\u0000\u0000\u0000\u03ba\u03b6\u0001\u0000\u0000\u0000"+ + "\u03ba\u03b8\u0001\u0000\u0000\u0000\u03bb\u03bf\u0001\u0000\u0000\u0000"+ + "\u03bc\u03be\u0003\u00d5i\u0000\u03bd\u03bc\u0001\u0000\u0000\u0000\u03be"+ + "\u03c1\u0001\u0000\u0000\u0000\u03bf\u03bd\u0001\u0000\u0000\u0000\u03bf"+ + "\u03c0\u0001\u0000\u0000\u0000\u03c0\u03c2\u0001\u0000\u0000\u0000\u03c1"+ + "\u03bf\u0001\u0000\u0000\u0000\u03c2\u03c4\u0005.\u0000\u0000\u03c3\u03c5"+ + "\u0003\u00d5i\u0000\u03c4\u03c3\u0001\u0000\u0000\u0000\u03c5\u03c6\u0001"+ + "\u0000\u0000\u0000\u03c6\u03c4\u0001\u0000\u0000\u0000\u03c6\u03c7\u0001"+ + "\u0000\u0000\u0000\u03c7\u00c8\u0001\u0000\u0000\u0000\u03c8\u03ca\u0003"+ + "\u00d7j\u0000\u03c9\u03c8\u0001\u0000\u0000\u0000\u03ca\u03cd\u0001\u0000"+ + "\u0000\u0000\u03cb\u03c9\u0001\u0000\u0000\u0000\u03cb\u03cc\u0001\u0000"+ + "\u0000\u0000\u03cc\u03ce\u0001\u0000\u0000\u0000\u03cd\u03cb\u0001\u0000"+ + "\u0000\u0000\u03ce\u03d0\u0005.\u0000\u0000\u03cf\u03d1\u0003\u00d7j\u0000"+ + "\u03d0\u03cf\u0001\u0000\u0000\u0000\u03d1\u03d2\u0001\u0000\u0000\u0000"+ + "\u03d2\u03d0\u0001\u0000\u0000\u0000\u03d2\u03d3\u0001\u0000\u0000\u0000"+ + "\u03d3\u00ca\u0001\u0000\u0000\u0000\u03d4\u03da\u0005$\u0000\u0000\u03d5"+ + "\u03d6\u00050\u0000\u0000\u03d6\u03da\u0005x\u0000\u0000\u03d7\u03d8\u0005"+ + "0\u0000\u0000\u03d8\u03da\u0005X\u0000\u0000\u03d9\u03d4\u0001\u0000\u0000"+ + "\u0000\u03d9\u03d5\u0001\u0000\u0000\u0000\u03d9\u03d7\u0001\u0000\u0000"+ + "\u0000\u03da\u03de\u0001\u0000\u0000\u0000\u03db\u03dd\u0003\u00d9k\u0000"+ + "\u03dc\u03db\u0001\u0000\u0000\u0000\u03dd\u03e0\u0001\u0000\u0000\u0000"+ + "\u03de\u03dc\u0001\u0000\u0000\u0000\u03de\u03df\u0001\u0000\u0000\u0000"+ + "\u03df\u03e1\u0001\u0000\u0000\u0000\u03e0\u03de\u0001\u0000\u0000\u0000"+ + "\u03e1\u03e3\u0005.\u0000\u0000\u03e2\u03e4\u0003\u00d9k\u0000\u03e3\u03e2"+ + "\u0001\u0000\u0000\u0000\u03e4\u03e5\u0001\u0000\u0000\u0000\u03e5\u03e3"+ + "\u0001\u0000\u0000\u0000\u03e5\u03e6\u0001\u0000\u0000\u0000\u03e6\u00cc"+ + "\u0001\u0000\u0000\u0000\u03e7\u03eb\u0003\u00d1g\u0000\u03e8\u03eb\u0003"+ + "\u00d3h\u0000\u03e9\u03eb\u0003\u00cff\u0000\u03ea\u03e7\u0001\u0000\u0000"+ + "\u0000\u03ea\u03e8\u0001\u0000\u0000\u0000\u03ea\u03e9\u0001\u0000\u0000"+ + "\u0000\u03eb\u03ef\u0001\u0000\u0000\u0000\u03ec\u03ed\u0007\u0000\u0000"+ + "\u0000\u03ed\u03f0\u0007\u0001\u0000\u0000\u03ee\u03f0\u0007\u0002\u0000"+ + "\u0000\u03ef\u03ec\u0001\u0000\u0000\u0000\u03ef\u03ee\u0001\u0000\u0000"+ + "\u0000\u03ef\u03f0\u0001\u0000\u0000\u0000\u03f0\u00ce\u0001\u0000\u0000"+ + "\u0000\u03f1\u03f2\u00050\u0000\u0000\u03f2\u03f4\u0007\u0003\u0000\u0000"+ + "\u03f3\u03f5\u0003\u00d5i\u0000\u03f4\u03f3\u0001\u0000\u0000\u0000\u03f5"+ + "\u03f6\u0001\u0000\u0000\u0000\u03f6\u03f4\u0001\u0000\u0000\u0000\u03f6"+ + "\u03f7\u0001\u0000\u0000\u0000\u03f7\u03ff\u0001\u0000\u0000\u0000\u03f8"+ + "\u03fa\u0005%\u0000\u0000\u03f9\u03fb\u0003\u00d5i\u0000\u03fa\u03f9\u0001"+ + "\u0000\u0000\u0000\u03fb\u03fc\u0001\u0000\u0000\u0000\u03fc\u03fa\u0001"+ + "\u0000\u0000\u0000\u03fc\u03fd\u0001\u0000\u0000\u0000\u03fd\u03ff\u0001"+ + "\u0000\u0000\u0000\u03fe\u03f1\u0001\u0000\u0000\u0000\u03fe\u03f8\u0001"+ + "\u0000\u0000\u0000\u03ff\u00d0\u0001\u0000\u0000\u0000\u0400\u0402\u0003"+ + "\u00d7j\u0000\u0401\u0400\u0001\u0000\u0000\u0000\u0402\u0403\u0001\u0000"+ + "\u0000\u0000\u0403\u0401\u0001\u0000\u0000\u0000\u0403\u0404\u0001\u0000"+ + "\u0000\u0000\u0404\u00d2\u0001\u0000\u0000\u0000\u0405\u040b\u0005$\u0000"+ + "\u0000\u0406\u0407\u00050\u0000\u0000\u0407\u040b\u0005x\u0000\u0000\u0408"+ + "\u0409\u00050\u0000\u0000\u0409\u040b\u0005X\u0000\u0000\u040a\u0405\u0001"+ + "\u0000\u0000\u0000\u040a\u0406\u0001\u0000\u0000\u0000\u040a\u0408\u0001"+ + "\u0000\u0000\u0000\u040b\u040d\u0001\u0000\u0000\u0000\u040c\u040e\u0003"+ + "\u00d9k\u0000\u040d\u040c\u0001\u0000\u0000\u0000\u040e\u040f\u0001\u0000"+ + "\u0000\u0000\u040f\u040d\u0001\u0000\u0000\u0000\u040f\u0410\u0001\u0000"+ + "\u0000\u0000\u0410\u00d4\u0001\u0000\u0000\u0000\u0411\u0412\u0007\u0004"+ + "\u0000\u0000\u0412\u00d6\u0001\u0000\u0000\u0000\u0413\u0414\u0007\u0005"+ + "\u0000\u0000\u0414\u00d8\u0001\u0000\u0000\u0000\u0415\u0416\u0007\u0006"+ + "\u0000\u0000\u0416\u00da\u0001\u0000\u0000\u0000\u0417\u041b\u0003\u00dd"+ + "m\u0000\u0418\u041a\u0003\u00dfn\u0000\u0419\u0418\u0001\u0000\u0000\u0000"+ + "\u041a\u041d\u0001\u0000\u0000\u0000\u041b\u0419\u0001\u0000\u0000\u0000"+ + "\u041b\u041c\u0001\u0000\u0000\u0000\u041c\u041e\u0001\u0000\u0000\u0000"+ + "\u041d\u041b\u0001\u0000\u0000\u0000\u041e\u041f\u0006l\u0004\u0000\u041f"+ + "\u00dc\u0001\u0000\u0000\u0000\u0420\u0421\u0007\u0007\u0000\u0000\u0421"+ + "\u00de\u0001\u0000\u0000\u0000\u0422\u0423\u0007\b\u0000\u0000\u0423\u00e0"+ + "\u0001\u0000\u0000\u0000\u0424\u042a\u0005\"\u0000\u0000\u0425\u0426\u0005"+ + "\\\u0000\u0000\u0426\u0429\u0005\"\u0000\u0000\u0427\u0429\b\t\u0000\u0000"+ + "\u0428\u0425\u0001\u0000\u0000\u0000\u0428\u0427\u0001\u0000\u0000\u0000"+ + "\u0429\u042c\u0001\u0000\u0000\u0000\u042a\u0428\u0001\u0000\u0000\u0000"+ + "\u042a\u042b\u0001\u0000\u0000\u0000\u042b\u042d\u0001\u0000\u0000\u0000"+ + "\u042c\u042a\u0001\u0000\u0000\u0000\u042d\u042f\u0005\"\u0000\u0000\u042e"+ + "\u0430\u0007\n\u0000\u0000\u042f\u042e\u0001\u0000\u0000\u0000\u042f\u0430"+ + "\u0001\u0000\u0000\u0000\u0430\u0435\u0001\u0000\u0000\u0000\u0431\u0433"+ + "\u0007\u000b\u0000\u0000\u0432\u0434\u0007\f\u0000\u0000\u0433\u0432\u0001"+ + "\u0000\u0000\u0000\u0433\u0434\u0001\u0000\u0000\u0000\u0434\u0436\u0001"+ + "\u0000\u0000\u0000\u0435\u0431\u0001\u0000\u0000\u0000\u0435\u0436\u0001"+ + "\u0000\u0000\u0000\u0436\u0438\u0001\u0000\u0000\u0000\u0437\u0439\u0007"+ + "\n\u0000\u0000\u0438\u0437\u0001\u0000\u0000\u0000\u0438\u0439\u0001\u0000"+ + "\u0000\u0000\u0439\u00e2\u0001\u0000\u0000\u0000\u043a\u0449\u0005\'\u0000"+ + "\u0000\u043b\u0446\u0005\\\u0000\u0000\u043c\u043e\u0007\r\u0000\u0000"+ + "\u043d\u043f\u0007\u0005\u0000\u0000\u043e\u043d\u0001\u0000\u0000\u0000"+ + "\u043e\u043f\u0001\u0000\u0000\u0000\u043f\u0441\u0001\u0000\u0000\u0000"+ + "\u0440\u0442\u0007\u0005\u0000\u0000\u0441\u0440\u0001\u0000\u0000\u0000"+ + "\u0441\u0442\u0001\u0000\u0000\u0000\u0442\u0447\u0001\u0000\u0000\u0000"+ + "\u0443\u0444\u0005x\u0000\u0000\u0444\u0445\u0007\u000e\u0000\u0000\u0445"+ + "\u0447\u0007\u000e\u0000\u0000\u0446\u043c\u0001\u0000\u0000\u0000\u0446"+ + "\u0443\u0001\u0000\u0000\u0000\u0447\u044a\u0001\u0000\u0000\u0000\u0448"+ + "\u044a\b\u000f\u0000\u0000\u0449\u043b\u0001\u0000\u0000\u0000\u0449\u0448"+ + "\u0001\u0000\u0000\u0000\u044a\u044b\u0001\u0000\u0000\u0000\u044b\u044c"+ + "\u0005\'\u0000\u0000\u044c\u00e4\u0001\u0000\u0000\u0000\u044d\u044f\u0007"+ + "\u0010\u0000\u0000\u044e\u044d\u0001\u0000\u0000\u0000\u044f\u0450\u0001"+ + "\u0000\u0000\u0000\u0450\u044e\u0001\u0000\u0000\u0000\u0450\u0451\u0001"+ + "\u0000\u0000\u0000\u0451\u0452\u0001\u0000\u0000\u0000\u0452\u0453\u0006"+ + "q\u0005\u0000\u0453\u00e6\u0001\u0000\u0000\u0000\u0454\u0455\u0005/\u0000"+ + "\u0000\u0455\u0456\u0005/\u0000\u0000\u0456\u045a\u0001\u0000\u0000\u0000"+ + "\u0457\u0459\b\u0011\u0000\u0000\u0458\u0457\u0001\u0000\u0000\u0000\u0459"+ + "\u045c\u0001\u0000\u0000\u0000\u045a\u0458\u0001\u0000\u0000\u0000\u045a"+ + "\u045b\u0001\u0000\u0000\u0000\u045b\u045d\u0001\u0000\u0000\u0000\u045c"+ + "\u045a\u0001\u0000\u0000\u0000\u045d\u045e\u0006r\u0006\u0000\u045e\u00e8"+ + "\u0001\u0000\u0000\u0000\u045f\u0460\u0005/\u0000\u0000\u0460\u0461\u0005"+ + "*\u0000\u0000\u0461\u0465\u0001\u0000\u0000\u0000\u0462\u0464\t\u0000"+ + "\u0000\u0000\u0463\u0462\u0001\u0000\u0000\u0000\u0464\u0467\u0001\u0000"+ + "\u0000\u0000\u0465\u0466\u0001\u0000\u0000\u0000\u0465\u0463\u0001\u0000"+ + "\u0000\u0000\u0466\u0468\u0001\u0000\u0000\u0000\u0467\u0465\u0001\u0000"+ + "\u0000\u0000\u0468\u0469\u0005*\u0000\u0000\u0469\u046a\u0005/\u0000\u0000"+ + "\u046a\u046b\u0001\u0000\u0000\u0000\u046b\u046c\u0006s\u0006\u0000\u046c"+ + "\u00ea\u0001\u0000\u0000\u0000\u046d\u046e\u0005.\u0000\u0000\u046e\u046f"+ + "\u0005b\u0000\u0000\u046f\u0470\u0005y\u0000\u0000\u0470\u0471\u0005t"+ + "\u0000\u0000\u0471\u0472\u0005e\u0000\u0000\u0472\u00ec\u0001\u0000\u0000"+ + "\u0000\u0473\u0474\u0005b\u0000\u0000\u0474\u0475\u0005r\u0000\u0000\u0475"+ + "\u06d3\u0005k\u0000\u0000\u0476\u0477\u0005o\u0000\u0000\u0477\u0478\u0005"+ + "r\u0000\u0000\u0478\u06d3\u0005a\u0000\u0000\u0479\u047a\u0005k\u0000"+ + "\u0000\u047a\u047b\u0005i\u0000\u0000\u047b\u06d3\u0005l\u0000\u0000\u047c"+ + "\u047d\u0005s\u0000\u0000\u047d\u047e\u0005l\u0000\u0000\u047e\u06d3\u0005"+ + "o\u0000\u0000\u047f\u0480\u0005n\u0000\u0000\u0480\u0481\u0005o\u0000"+ + "\u0000\u0481\u06d3\u0005p\u0000\u0000\u0482\u0483\u0005a\u0000\u0000\u0483"+ + "\u0484\u0005s\u0000\u0000\u0484\u06d3\u0005l\u0000\u0000\u0485\u0486\u0005"+ + "p\u0000\u0000\u0486\u0487\u0005h\u0000\u0000\u0487\u06d3\u0005p\u0000"+ + "\u0000\u0488\u0489\u0005a\u0000\u0000\u0489\u048a\u0005n\u0000\u0000\u048a"+ + "\u06d3\u0005c\u0000\u0000\u048b\u048c\u0005b\u0000\u0000\u048c\u048d\u0005"+ + "p\u0000\u0000\u048d\u06d3\u0005l\u0000\u0000\u048e\u048f\u0005c\u0000"+ + "\u0000\u048f\u0490\u0005l\u0000\u0000\u0490\u06d3\u0005c\u0000\u0000\u0491"+ + "\u0492\u0005j\u0000\u0000\u0492\u0493\u0005s\u0000\u0000\u0493\u06d3\u0005"+ + "r\u0000\u0000\u0494\u0495\u0005a\u0000\u0000\u0495\u0496\u0005n\u0000"+ + "\u0000\u0496\u06d3\u0005d\u0000\u0000\u0497\u0498\u0005r\u0000\u0000\u0498"+ + "\u0499\u0005l\u0000\u0000\u0499\u06d3\u0005a\u0000\u0000\u049a\u049b\u0005"+ + "b\u0000\u0000\u049b\u049c\u0005i\u0000\u0000\u049c\u06d3\u0005t\u0000"+ + "\u0000\u049d\u049e\u0005r\u0000\u0000\u049e\u049f\u0005o\u0000\u0000\u049f"+ + "\u06d3\u0005l\u0000\u0000\u04a0\u04a1\u0005p\u0000\u0000\u04a1\u04a2\u0005"+ + "l\u0000\u0000\u04a2\u06d3\u0005a\u0000\u0000\u04a3\u04a4\u0005p\u0000"+ + "\u0000\u04a4\u04a5\u0005l\u0000\u0000\u04a5\u06d3\u0005p\u0000\u0000\u04a6"+ + "\u04a7\u0005b\u0000\u0000\u04a7\u04a8\u0005m\u0000\u0000\u04a8\u06d3\u0005"+ + "i\u0000\u0000\u04a9\u04aa\u0005s\u0000\u0000\u04aa\u04ab\u0005e\u0000"+ + "\u0000\u04ab\u06d3\u0005c\u0000\u0000\u04ac\u04ad\u0005r\u0000\u0000\u04ad"+ + "\u04ae\u0005t\u0000\u0000\u04ae\u06d3\u0005i\u0000\u0000\u04af\u04b0\u0005"+ + "e\u0000\u0000\u04b0\u04b1\u0005o\u0000\u0000\u04b1\u06d3\u0005r\u0000"+ + "\u0000\u04b2\u04b3\u0005s\u0000\u0000\u04b3\u04b4\u0005r\u0000\u0000\u04b4"+ + "\u06d3\u0005e\u0000\u0000\u04b5\u04b6\u0005l\u0000\u0000\u04b6\u04b7\u0005"+ + "s\u0000\u0000\u04b7\u06d3\u0005r\u0000\u0000\u04b8\u04b9\u0005p\u0000"+ + "\u0000\u04b9\u04ba\u0005h\u0000\u0000\u04ba\u06d3\u0005a\u0000\u0000\u04bb"+ + "\u04bc\u0005a\u0000\u0000\u04bc\u04bd\u0005l\u0000\u0000\u04bd\u06d3\u0005"+ + "r\u0000\u0000\u04be\u04bf\u0005j\u0000\u0000\u04bf\u04c0\u0005m\u0000"+ + "\u0000\u04c0\u06d3\u0005p\u0000\u0000\u04c1\u04c2\u0005b\u0000\u0000\u04c2"+ + "\u04c3\u0005v\u0000\u0000\u04c3\u06d3\u0005c\u0000\u0000\u04c4\u04c5\u0005"+ + "c\u0000\u0000\u04c5\u04c6\u0005l\u0000\u0000\u04c6\u06d3\u0005i\u0000"+ + "\u0000\u04c7\u04c8\u0005r\u0000\u0000\u04c8\u04c9\u0005t\u0000\u0000\u04c9"+ + "\u06d3\u0005s\u0000\u0000\u04ca\u04cb\u0005a\u0000\u0000\u04cb\u04cc\u0005"+ + "d\u0000\u0000\u04cc\u06d3\u0005c\u0000\u0000\u04cd\u04ce\u0005r\u0000"+ + "\u0000\u04ce\u04cf\u0005r\u0000\u0000\u04cf\u06d3\u0005a\u0000\u0000\u04d0"+ + "\u04d1\u0005b\u0000\u0000\u04d1\u04d2\u0005v\u0000\u0000\u04d2\u06d3\u0005"+ + "s\u0000\u0000\u04d3\u04d4\u0005s\u0000\u0000\u04d4\u04d5\u0005e\u0000"+ + "\u0000\u04d5\u06d3\u0005i\u0000\u0000\u04d6\u04d7\u0005s\u0000\u0000\u04d7"+ + "\u04d8\u0005a\u0000\u0000\u04d8\u06d3\u0005x\u0000\u0000\u04d9\u04da\u0005"+ + "s\u0000\u0000\u04da\u04db\u0005t\u0000\u0000\u04db\u06d3\u0005y\u0000"+ + "\u0000\u04dc\u04dd\u0005s\u0000\u0000\u04dd\u04de\u0005t\u0000\u0000\u04de"+ + "\u06d3\u0005a\u0000\u0000\u04df\u04e0\u0005s\u0000\u0000\u04e0\u04e1\u0005"+ + "t\u0000\u0000\u04e1\u06d3\u0005x\u0000\u0000\u04e2\u04e3\u0005d\u0000"+ + "\u0000\u04e3\u04e4\u0005e\u0000\u0000\u04e4\u06d3\u0005y\u0000\u0000\u04e5"+ + "\u04e6\u0005t\u0000\u0000\u04e6\u04e7\u0005x\u0000\u0000\u04e7\u06d3\u0005"+ + "a\u0000\u0000\u04e8\u04e9\u0005x\u0000\u0000\u04e9\u04ea\u0005a\u0000"+ + "\u0000\u04ea\u06d3\u0005a\u0000\u0000\u04eb\u04ec\u0005b\u0000\u0000\u04ec"+ + "\u04ed\u0005c\u0000\u0000\u04ed\u06d3\u0005c\u0000\u0000\u04ee\u04ef\u0005"+ + "a\u0000\u0000\u04ef\u04f0\u0005h\u0000\u0000\u04f0\u06d3\u0005x\u0000"+ + "\u0000\u04f1\u04f2\u0005t\u0000\u0000\u04f2\u04f3\u0005y\u0000\u0000\u04f3"+ + "\u06d3\u0005a\u0000\u0000\u04f4\u04f5\u0005t\u0000\u0000\u04f5\u04f6\u0005"+ + "x\u0000\u0000\u04f6\u06d3\u0005s\u0000\u0000\u04f7\u04f8\u0005t\u0000"+ + "\u0000\u04f8\u04f9\u0005a\u0000\u0000\u04f9\u06d3\u0005s\u0000\u0000\u04fa"+ + "\u04fb\u0005s\u0000\u0000\u04fb\u04fc\u0005h\u0000\u0000\u04fc\u06d3\u0005"+ + "y\u0000\u0000\u04fd\u04fe\u0005s\u0000\u0000\u04fe\u04ff\u0005h\u0000"+ + "\u0000\u04ff\u06d3\u0005x\u0000\u0000\u0500\u0501\u0005l\u0000\u0000\u0501"+ + "\u0502\u0005d\u0000\u0000\u0502\u06d3\u0005y\u0000\u0000\u0503\u0504\u0005"+ + "l\u0000\u0000\u0504\u0505\u0005d\u0000\u0000\u0505\u06d3\u0005a\u0000"+ + "\u0000\u0506\u0507\u0005l\u0000\u0000\u0507\u0508\u0005d\u0000\u0000\u0508"+ + "\u06d3\u0005x\u0000\u0000\u0509\u050a\u0005l\u0000\u0000\u050a\u050b\u0005"+ + "a\u0000\u0000\u050b\u06d3\u0005x\u0000\u0000\u050c\u050d\u0005t\u0000"+ + "\u0000\u050d\u050e\u0005a\u0000\u0000\u050e\u06d3\u0005y\u0000\u0000\u050f"+ + "\u0510\u0005t\u0000\u0000\u0510\u0511\u0005a\u0000\u0000\u0511\u06d3\u0005"+ + "x\u0000\u0000\u0512\u0513\u0005b\u0000\u0000\u0513\u0514\u0005c\u0000"+ + "\u0000\u0514\u06d3\u0005s\u0000\u0000\u0515\u0516\u0005c\u0000\u0000\u0516"+ + "\u0517\u0005l\u0000\u0000\u0517\u06d3\u0005v\u0000\u0000\u0518\u0519\u0005"+ + "t\u0000\u0000\u0519\u051a\u0005s\u0000\u0000\u051a\u06d3\u0005x\u0000"+ + "\u0000\u051b\u051c\u0005l\u0000\u0000\u051c\u051d\u0005a\u0000\u0000\u051d"+ + "\u06d3\u0005s\u0000\u0000\u051e\u051f\u0005c\u0000\u0000\u051f\u0520\u0005"+ + "p\u0000\u0000\u0520\u06d3\u0005y\u0000\u0000\u0521\u0522\u0005c\u0000"+ + "\u0000\u0522\u0523\u0005m\u0000\u0000\u0523\u06d3\u0005p\u0000\u0000\u0524"+ + "\u0525\u0005c\u0000\u0000\u0525\u0526\u0005p\u0000\u0000\u0526\u06d3\u0005"+ + "x\u0000\u0000\u0527\u0528\u0005d\u0000\u0000\u0528\u0529\u0005c\u0000"+ + "\u0000\u0529\u06d3\u0005p\u0000\u0000\u052a\u052b\u0005d\u0000\u0000\u052b"+ + "\u052c\u0005e\u0000\u0000\u052c\u06d3\u0005c\u0000\u0000\u052d\u052e\u0005"+ + "i\u0000\u0000\u052e\u052f\u0005n\u0000\u0000\u052f\u06d3\u0005c\u0000"+ + "\u0000\u0530\u0531\u0005a\u0000\u0000\u0531\u0532\u0005x\u0000\u0000\u0532"+ + "\u06d3\u0005s\u0000\u0000\u0533\u0534\u0005b\u0000\u0000\u0534\u0535\u0005"+ + "n\u0000\u0000\u0535\u06d3\u0005e\u0000\u0000\u0536\u0537\u0005c\u0000"+ + "\u0000\u0537\u0538\u0005l\u0000\u0000\u0538\u06d3\u0005d\u0000\u0000\u0539"+ + "\u053a\u0005s\u0000\u0000\u053a\u053b\u0005b\u0000\u0000\u053b\u06d3\u0005"+ + "c\u0000\u0000\u053c\u053d\u0005i\u0000\u0000\u053d\u053e\u0005s\u0000"+ + "\u0000\u053e\u06d3\u0005c\u0000\u0000\u053f\u0540\u0005i\u0000\u0000\u0540"+ + "\u0541\u0005n\u0000\u0000\u0541\u06d3\u0005x\u0000\u0000\u0542\u0543\u0005"+ + "b\u0000\u0000\u0543\u0544\u0005e\u0000\u0000\u0544\u06d3\u0005q\u0000"+ + "\u0000\u0545\u0546\u0005s\u0000\u0000\u0546\u0547\u0005e\u0000\u0000\u0547"+ + "\u06d3\u0005d\u0000\u0000\u0548\u0549\u0005d\u0000\u0000\u0549\u054a\u0005"+ + "e\u0000\u0000\u054a\u06d3\u0005x\u0000\u0000\u054b\u054c\u0005i\u0000"+ + "\u0000\u054c\u054d\u0005n\u0000\u0000\u054d\u06d3\u0005y\u0000\u0000\u054e"+ + "\u054f\u0005r\u0000\u0000\u054f\u0550\u0005o\u0000\u0000\u0550\u06d3\u0005"+ + "r\u0000\u0000\u0551\u0552\u0005b\u0000\u0000\u0552\u0553\u0005b\u0000"+ + "\u0000\u0553\u0554\u0005r\u0000\u0000\u0554\u06d3\u00050\u0000\u0000\u0555"+ + "\u0556\u0005b\u0000\u0000\u0556\u0557\u0005b\u0000\u0000\u0557\u0558\u0005"+ + "r\u0000\u0000\u0558\u06d3\u00051\u0000\u0000\u0559\u055a\u0005b\u0000"+ + "\u0000\u055a\u055b\u0005b\u0000\u0000\u055b\u055c\u0005r\u0000\u0000\u055c"+ + "\u06d3\u00052\u0000\u0000\u055d\u055e\u0005b\u0000\u0000\u055e\u055f\u0005"+ + "b\u0000\u0000\u055f\u0560\u0005r\u0000\u0000\u0560\u06d3\u00053\u0000"+ + "\u0000\u0561\u0562\u0005b\u0000\u0000\u0562\u0563\u0005b\u0000\u0000\u0563"+ + "\u0564\u0005r\u0000\u0000\u0564\u06d3\u00054\u0000\u0000\u0565\u0566\u0005"+ + "b\u0000\u0000\u0566\u0567\u0005b\u0000\u0000\u0567\u0568\u0005r\u0000"+ + "\u0000\u0568\u06d3\u00055\u0000\u0000\u0569\u056a\u0005b\u0000\u0000\u056a"+ + "\u056b\u0005b\u0000\u0000\u056b\u056c\u0005r\u0000\u0000\u056c\u06d3\u0005"+ + "6\u0000\u0000\u056d\u056e\u0005b\u0000\u0000\u056e\u056f\u0005b\u0000"+ + "\u0000\u056f\u0570\u0005r\u0000\u0000\u0570\u06d3\u00057\u0000\u0000\u0571"+ + "\u0572\u0005b\u0000\u0000\u0572\u0573\u0005b\u0000\u0000\u0573\u0574\u0005"+ + "s\u0000\u0000\u0574\u06d3\u00050\u0000\u0000\u0575\u0576\u0005b\u0000"+ + "\u0000\u0576\u0577\u0005b\u0000\u0000\u0577\u0578\u0005s\u0000\u0000\u0578"+ + "\u06d3\u00051\u0000\u0000\u0579\u057a\u0005b\u0000\u0000\u057a\u057b\u0005"+ + "b\u0000\u0000\u057b\u057c\u0005s\u0000\u0000\u057c\u06d3\u00052\u0000"+ + "\u0000\u057d\u057e\u0005b\u0000\u0000\u057e\u057f\u0005b\u0000\u0000\u057f"+ + "\u0580\u0005s\u0000\u0000\u0580\u06d3\u00053\u0000\u0000\u0581\u0582\u0005"+ + "b\u0000\u0000\u0582\u0583\u0005b\u0000\u0000\u0583\u0584\u0005s\u0000"+ + "\u0000\u0584\u06d3\u00054\u0000\u0000\u0585\u0586\u0005b\u0000\u0000\u0586"+ + "\u0587\u0005b\u0000\u0000\u0587\u0588\u0005s\u0000\u0000\u0588\u06d3\u0005"+ + "5\u0000\u0000\u0589\u058a\u0005b\u0000\u0000\u058a\u058b\u0005b\u0000"+ + "\u0000\u058b\u058c\u0005s\u0000\u0000\u058c\u06d3\u00056\u0000\u0000\u058d"+ + "\u058e\u0005b\u0000\u0000\u058e\u058f\u0005b\u0000\u0000\u058f\u0590\u0005"+ + "s\u0000\u0000\u0590\u06d3\u00057\u0000\u0000\u0591\u0592\u0005b\u0000"+ + "\u0000\u0592\u0593\u0005r\u0000\u0000\u0593\u06d3\u0005a\u0000\u0000\u0594"+ + "\u0595\u0005p\u0000\u0000\u0595\u0596\u0005h\u0000\u0000\u0596\u06d3\u0005"+ + "x\u0000\u0000\u0597\u0598\u0005p\u0000\u0000\u0598\u0599\u0005h\u0000"+ + "\u0000\u0599\u06d3\u0005y\u0000\u0000\u059a\u059b\u0005p\u0000\u0000\u059b"+ + "\u059c\u0005l\u0000\u0000\u059c\u06d3\u0005x\u0000\u0000\u059d\u059e\u0005"+ + "p\u0000\u0000\u059e\u059f\u0005l\u0000\u0000\u059f\u06d3\u0005y\u0000"+ + "\u0000\u05a0\u05a1\u0005r\u0000\u0000\u05a1\u05a2\u0005m\u0000\u0000\u05a2"+ + "\u05a3\u0005b\u0000\u0000\u05a3\u06d3\u00050\u0000\u0000\u05a4\u05a5\u0005"+ + "r\u0000\u0000\u05a5\u05a6\u0005m\u0000\u0000\u05a6\u05a7\u0005b\u0000"+ + "\u0000\u05a7\u06d3\u00051\u0000\u0000\u05a8\u05a9\u0005r\u0000\u0000\u05a9"+ + "\u05aa\u0005m\u0000\u0000\u05aa\u05ab\u0005b\u0000\u0000\u05ab\u06d3\u0005"+ + "2\u0000\u0000\u05ac\u05ad\u0005r\u0000\u0000\u05ad\u05ae\u0005m\u0000"+ + "\u0000\u05ae\u05af\u0005b\u0000\u0000\u05af\u06d3\u00053\u0000\u0000\u05b0"+ + "\u05b1\u0005r\u0000\u0000\u05b1\u05b2\u0005m\u0000\u0000\u05b2\u05b3\u0005"+ + "b\u0000\u0000\u05b3\u06d3\u00054\u0000\u0000\u05b4\u05b5\u0005r\u0000"+ + "\u0000\u05b5\u05b6\u0005m\u0000\u0000\u05b6\u05b7\u0005b\u0000\u0000\u05b7"+ + "\u06d3\u00055\u0000\u0000\u05b8\u05b9\u0005r\u0000\u0000\u05b9\u05ba\u0005"+ + "m\u0000\u0000\u05ba\u05bb\u0005b\u0000\u0000\u05bb\u06d3\u00056\u0000"+ + "\u0000\u05bc\u05bd\u0005r\u0000\u0000\u05bd\u05be\u0005m\u0000\u0000\u05be"+ + "\u05bf\u0005b\u0000\u0000\u05bf\u06d3\u00057\u0000\u0000\u05c0\u05c1\u0005"+ + "s\u0000\u0000\u05c1\u05c2\u0005m\u0000\u0000\u05c2\u05c3\u0005b\u0000"+ + "\u0000\u05c3\u06d3\u00050\u0000\u0000\u05c4\u05c5\u0005s\u0000\u0000\u05c5"+ + "\u05c6\u0005m\u0000\u0000\u05c6\u05c7\u0005b\u0000\u0000\u05c7\u06d3\u0005"+ + "1\u0000\u0000\u05c8\u05c9\u0005s\u0000\u0000\u05c9\u05ca\u0005m\u0000"+ + "\u0000\u05ca\u05cb\u0005b\u0000\u0000\u05cb\u06d3\u00052\u0000\u0000\u05cc"+ + "\u05cd\u0005s\u0000\u0000\u05cd\u05ce\u0005m\u0000\u0000\u05ce\u05cf\u0005"+ + "b\u0000\u0000\u05cf\u06d3\u00053\u0000\u0000\u05d0\u05d1\u0005s\u0000"+ + "\u0000\u05d1\u05d2\u0005m\u0000\u0000\u05d2\u05d3\u0005b\u0000\u0000\u05d3"+ + "\u06d3\u00054\u0000\u0000\u05d4\u05d5\u0005s\u0000\u0000\u05d5\u05d6\u0005"+ + "m\u0000\u0000\u05d6\u05d7\u0005b\u0000\u0000\u05d7\u06d3\u00055\u0000"+ + "\u0000\u05d8\u05d9\u0005s\u0000\u0000\u05d9\u05da\u0005m\u0000\u0000\u05da"+ + "\u05db\u0005b\u0000\u0000\u05db\u06d3\u00056\u0000\u0000\u05dc\u05dd\u0005"+ + "s\u0000\u0000\u05dd\u05de\u0005m\u0000\u0000\u05de\u05df\u0005b\u0000"+ + "\u0000\u05df\u06d3\u00057\u0000\u0000\u05e0\u05e1\u0005s\u0000\u0000\u05e1"+ + "\u05e2\u0005t\u0000\u0000\u05e2\u06d3\u0005p\u0000\u0000\u05e3\u05e4\u0005"+ + "s\u0000\u0000\u05e4\u05e5\u0005t\u0000\u0000\u05e5\u06d3\u0005z\u0000"+ + "\u0000\u05e6\u05e7\u0005t\u0000\u0000\u05e7\u05e8\u0005r\u0000\u0000\u05e8"+ + "\u06d3\u0005b\u0000\u0000\u05e9\u05ea\u0005t\u0000\u0000\u05ea\u05eb\u0005"+ + "s\u0000\u0000\u05eb\u06d3\u0005b\u0000\u0000\u05ec\u05ed\u0005w\u0000"+ + "\u0000\u05ed\u05ee\u0005a\u0000\u0000\u05ee\u06d3\u0005i\u0000\u0000\u05ef"+ + "\u05f0\u0005c\u0000\u0000\u05f0\u05f1\u0005l\u0000\u0000\u05f1\u06d3\u0005"+ + "e\u0000\u0000\u05f2\u05f3\u0005s\u0000\u0000\u05f3\u05f4\u0005e\u0000"+ + "\u0000\u05f4\u06d3\u0005e\u0000\u0000\u05f5\u05f6\u0005t\u0000\u0000\u05f6"+ + "\u05f7\u0005s\u0000\u0000\u05f7\u06d3\u0005y\u0000\u0000\u05f8\u05f9\u0005"+ + "l\u0000\u0000\u05f9\u05fa\u0005b\u0000\u0000\u05fa\u05fb\u0005p\u0000"+ + "\u0000\u05fb\u06d3\u0005l\u0000\u0000\u05fc\u05fd\u0005i\u0000\u0000\u05fd"+ + "\u05fe\u0005n\u0000\u0000\u05fe\u06d3\u0005z\u0000\u0000\u05ff\u0600\u0005"+ + "t\u0000\u0000\u0600\u0601\u0005y\u0000\u0000\u0601\u06d3\u0005s\u0000"+ + "\u0000\u0602\u0603\u0005l\u0000\u0000\u0603\u0604\u0005b\u0000\u0000\u0604"+ + "\u0605\u0005m\u0000\u0000\u0605\u06d3\u0005i\u0000\u0000\u0606\u0607\u0005"+ + "d\u0000\u0000\u0607\u0608\u0005e\u0000\u0000\u0608\u06d3\u0005z\u0000"+ + "\u0000\u0609\u060a\u0005n\u0000\u0000\u060a\u060b\u0005e\u0000\u0000\u060b"+ + "\u06d3\u0005g\u0000\u0000\u060c\u060d\u0005a\u0000\u0000\u060d\u060e\u0005"+ + "s\u0000\u0000\u060e\u06d3\u0005r\u0000\u0000\u060f\u0610\u0005t\u0000"+ + "\u0000\u0610\u0611\u0005a\u0000\u0000\u0611\u06d3\u0005z\u0000\u0000\u0612"+ + "\u0613\u0005l\u0000\u0000\u0613\u0614\u0005b\u0000\u0000\u0614\u0615\u0005"+ + "v\u0000\u0000\u0615\u06d3\u0005c\u0000\u0000\u0616\u0617\u0005t\u0000"+ + "\u0000\u0617\u0618\u0005a\u0000\u0000\u0618\u06d3\u0005b\u0000\u0000\u0619"+ + "\u061a\u0005m\u0000\u0000\u061a\u061b\u0005a\u0000\u0000\u061b\u06d3\u0005"+ + "p\u0000\u0000\u061c\u061d\u0005r\u0000\u0000\u061d\u061e\u0005t\u0000"+ + "\u0000\u061e\u06d3\u0005n\u0000\u0000\u061f\u0620\u0005l\u0000\u0000\u0620"+ + "\u0621\u0005b\u0000\u0000\u0621\u0622\u0005s\u0000\u0000\u0622\u06d3\u0005"+ + "r\u0000\u0000\u0623\u0624\u0005t\u0000\u0000\u0624\u0625\u0005z\u0000"+ + "\u0000\u0625\u06d3\u0005a\u0000\u0000\u0626\u0627\u0005l\u0000\u0000\u0627"+ + "\u0628\u0005b\u0000\u0000\u0628\u0629\u0005v\u0000\u0000\u0629\u06d3\u0005"+ + "s\u0000\u0000\u062a\u062b\u0005t\u0000\u0000\u062b\u062c\u0005b\u0000"+ + "\u0000\u062c\u06d3\u0005a\u0000\u0000\u062d\u062e\u0005l\u0000\u0000\u062e"+ + "\u062f\u0005b\u0000\u0000\u062f\u0630\u0005r\u0000\u0000\u0630\u06d3\u0005"+ + "a\u0000\u0000\u0631\u0632\u0005l\u0000\u0000\u0632\u0633\u0005b\u0000"+ + "\u0000\u0633\u0634\u0005c\u0000\u0000\u0634\u06d3\u0005c\u0000\u0000\u0635"+ + "\u0636\u0005l\u0000\u0000\u0636\u0637\u0005d\u0000\u0000\u0637\u06d3\u0005"+ + "z\u0000\u0000\u0638\u0639\u0005l\u0000\u0000\u0639\u063a\u0005b\u0000"+ + "\u0000\u063a\u063b\u0005c\u0000\u0000\u063b\u06d3\u0005s\u0000\u0000\u063c"+ + "\u063d\u0005c\u0000\u0000\u063d\u063e\u0005p\u0000\u0000\u063e\u06d3\u0005"+ + "z\u0000\u0000\u063f\u0640\u0005d\u0000\u0000\u0640\u0641\u0005e\u0000"+ + "\u0000\u0641\u06d3\u0005w\u0000\u0000\u0642\u0643\u0005a\u0000\u0000\u0643"+ + "\u0644\u0005s\u0000\u0000\u0644\u06d3\u0005w\u0000\u0000\u0645\u0646\u0005"+ + "l\u0000\u0000\u0646\u0647\u0005b\u0000\u0000\u0647\u0648\u0005n\u0000"+ + "\u0000\u0648\u06d3\u0005e\u0000\u0000\u0649\u064a\u0005p\u0000\u0000\u064a"+ + "\u064b\u0005h\u0000\u0000\u064b\u06d3\u0005z\u0000\u0000\u064c\u064d\u0005"+ + "i\u0000\u0000\u064d\u064e\u0005n\u0000\u0000\u064e\u06d3\u0005w\u0000"+ + "\u0000\u064f\u0650\u0005r\u0000\u0000\u0650\u0651\u0005o\u0000\u0000\u0651"+ + "\u06d3\u0005w\u0000\u0000\u0652\u0653\u0005l\u0000\u0000\u0653\u0654\u0005"+ + "b\u0000\u0000\u0654\u0655\u0005e\u0000\u0000\u0655\u06d3\u0005q\u0000"+ + "\u0000\u0656\u0657\u0005p\u0000\u0000\u0657\u0658\u0005h\u0000\u0000\u0658"+ + "\u06d3\u0005w\u0000\u0000\u0659\u065a\u0005p\u0000\u0000\u065a\u065b\u0005"+ + "l\u0000\u0000\u065b\u06d3\u0005z\u0000\u0000\u065c\u065d\u0005e\u0000"+ + "\u0000\u065d\u065e\u0005o\u0000\u0000\u065e\u06d3\u0005m\u0000\u0000\u065f"+ + "\u0660\u0005a\u0000\u0000\u0660\u0661\u0005d\u0000\u0000\u0661\u0662\u0005"+ + "c\u0000\u0000\u0662\u06d3\u0005q\u0000\u0000\u0663\u0664\u0005a\u0000"+ + "\u0000\u0664\u0665\u0005n\u0000\u0000\u0665\u0666\u0005d\u0000\u0000\u0666"+ + "\u06d3\u0005q\u0000\u0000\u0667\u0668\u0005a\u0000\u0000\u0668\u0669\u0005"+ + "s\u0000\u0000\u0669\u066a\u0005l\u0000\u0000\u066a\u06d3\u0005q\u0000"+ + "\u0000\u066b\u066c\u0005a\u0000\u0000\u066c\u066d\u0005s\u0000\u0000\u066d"+ + "\u066e\u0005r\u0000\u0000\u066e\u06d3\u0005q\u0000\u0000\u066f\u0670\u0005"+ + "b\u0000\u0000\u0670\u0671\u0005i\u0000\u0000\u0671\u0672\u0005t\u0000"+ + "\u0000\u0672\u06d3\u0005q\u0000\u0000\u0673\u0674\u0005c\u0000\u0000\u0674"+ + "\u0675\u0005p\u0000\u0000\u0675\u06d3\u0005q\u0000\u0000\u0676\u0677\u0005"+ + "d\u0000\u0000\u0677\u0678\u0005e\u0000\u0000\u0678\u06d3\u0005q\u0000"+ + "\u0000\u0679\u067a\u0005e\u0000\u0000\u067a\u067b\u0005o\u0000\u0000\u067b"+ + "\u067c\u0005r\u0000\u0000\u067c\u06d3\u0005q\u0000\u0000\u067d\u067e\u0005"+ + "i\u0000\u0000\u067e\u067f\u0005n\u0000\u0000\u067f\u06d3\u0005q\u0000"+ + "\u0000\u0680\u0681\u0005l\u0000\u0000\u0681\u0682\u0005d\u0000\u0000\u0682"+ + "\u06d3\u0005q\u0000\u0000\u0683\u0684\u0005l\u0000\u0000\u0684\u0685\u0005"+ + "s\u0000\u0000\u0685\u0686\u0005r\u0000\u0000\u0686\u06d3\u0005q\u0000"+ + "\u0000\u0687\u0688\u0005o\u0000\u0000\u0688\u0689\u0005r\u0000\u0000\u0689"+ + "\u06d3\u0005q\u0000\u0000\u068a\u068b\u0005r\u0000\u0000\u068b\u068c\u0005"+ + "o\u0000\u0000\u068c\u068d\u0005l\u0000\u0000\u068d\u06d3\u0005q\u0000"+ + "\u0000\u068e\u068f\u0005r\u0000\u0000\u068f\u0690\u0005o\u0000\u0000\u0690"+ + "\u0691\u0005r\u0000\u0000\u0691\u06d3\u0005q\u0000\u0000\u0692\u0693\u0005"+ + "s\u0000\u0000\u0693\u0694\u0005b\u0000\u0000\u0694\u0695\u0005c\u0000"+ + "\u0000\u0695\u06d3\u0005q\u0000\u0000\u0696\u0697\u0005s\u0000\u0000\u0697"+ + "\u0698\u0005t\u0000\u0000\u0698\u06d3\u0005q\u0000\u0000\u0699\u069a\u0005"+ + "s\u0000\u0000\u069a\u069b\u0005x\u0000\u0000\u069b\u06d3\u0005y\u0000"+ + "\u0000\u069c\u069d\u0005s\u0000\u0000\u069d\u069e\u0005t\u0000\u0000\u069e"+ + "\u06d3\u00050\u0000\u0000\u069f\u06a0\u0005s\u0000\u0000\u06a0\u06a1\u0005"+ + "t\u0000\u0000\u06a1\u06d3\u00051\u0000\u0000\u06a2\u06a3\u0005s\u0000"+ + "\u0000\u06a3\u06a4\u0005t\u0000\u0000\u06a4\u06d3\u00052\u0000\u0000\u06a5"+ + "\u06a6\u0005s\u0000\u0000\u06a6\u06a7\u0005a\u0000\u0000\u06a7\u06d3\u0005"+ + "y\u0000\u0000\u06a8\u06a9\u0005t\u0000\u0000\u06a9\u06aa\u0005m\u0000"+ + "\u0000\u06aa\u06d3\u0005a\u0000\u0000\u06ab\u06ac\u0005b\u0000\u0000\u06ac"+ + "\u06ad\u0005s\u0000\u0000\u06ad\u06d3\u0005r\u0000\u0000\u06ae\u06af\u0005"+ + "t\u0000\u0000\u06af\u06b0\u0005a\u0000\u0000\u06b0\u06d3\u0005m\u0000"+ + "\u0000\u06b1\u06b2\u0005c\u0000\u0000\u06b2\u06b3\u0005s\u0000\u0000\u06b3"+ + "\u06d3\u0005l\u0000\u0000\u06b4\u06b5\u0005c\u0000\u0000\u06b5\u06b6\u0005"+ + "l\u0000\u0000\u06b6\u06d3\u0005a\u0000\u0000\u06b7\u06b8\u0005c\u0000"+ + "\u0000\u06b8\u06b9\u0005l\u0000\u0000\u06b9\u06d3\u0005x\u0000\u0000\u06ba"+ + "\u06bb\u0005c\u0000\u0000\u06bb\u06bc\u0005l\u0000\u0000\u06bc\u06d3\u0005"+ + "y\u0000\u0000\u06bd\u06be\u0005c\u0000\u0000\u06be\u06bf\u0005s\u0000"+ + "\u0000\u06bf\u06d3\u0005h\u0000\u0000\u06c0\u06c1\u0005s\u0000\u0000\u06c1"+ + "\u06c2\u0005e\u0000\u0000\u06c2\u06d3\u0005t\u0000\u0000\u06c3\u06c4\u0005"+ + "t\u0000\u0000\u06c4\u06c5\u0005s\u0000\u0000\u06c5\u06d3\u0005t\u0000"+ + "\u0000\u06c6\u06c7\u0005t\u0000\u0000\u06c7\u06c8\u0005i\u0000\u0000\u06c8"+ + "\u06d3\u0005a\u0000\u0000\u06c9\u06ca\u0005t\u0000\u0000\u06ca\u06cb\u0005"+ + "d\u0000\u0000\u06cb\u06d3\u0005d\u0000\u0000\u06cc\u06cd\u0005t\u0000"+ + "\u0000\u06cd\u06ce\u0005i\u0000\u0000\u06ce\u06d3\u0005n\u0000\u0000\u06cf"+ + "\u06d0\u0005t\u0000\u0000\u06d0\u06d1\u0005i\u0000\u0000\u06d1\u06d3\u0005"+ + "i\u0000\u0000\u06d2\u0473\u0001\u0000\u0000\u0000\u06d2\u0476\u0001\u0000"+ + "\u0000\u0000\u06d2\u0479\u0001\u0000\u0000\u0000\u06d2\u047c\u0001\u0000"+ + "\u0000\u0000\u06d2\u047f\u0001\u0000\u0000\u0000\u06d2\u0482\u0001\u0000"+ + "\u0000\u0000\u06d2\u0485\u0001\u0000\u0000\u0000\u06d2\u0488\u0001\u0000"+ + "\u0000\u0000\u06d2\u048b\u0001\u0000\u0000\u0000\u06d2\u048e\u0001\u0000"+ + "\u0000\u0000\u06d2\u0491\u0001\u0000\u0000\u0000\u06d2\u0494\u0001\u0000"+ + "\u0000\u0000\u06d2\u0497\u0001\u0000\u0000\u0000\u06d2\u049a\u0001\u0000"+ + "\u0000\u0000\u06d2\u049d\u0001\u0000\u0000\u0000\u06d2\u04a0\u0001\u0000"+ + "\u0000\u0000\u06d2\u04a3\u0001\u0000\u0000\u0000\u06d2\u04a6\u0001\u0000"+ + "\u0000\u0000\u06d2\u04a9\u0001\u0000\u0000\u0000\u06d2\u04ac\u0001\u0000"+ + "\u0000\u0000\u06d2\u04af\u0001\u0000\u0000\u0000\u06d2\u04b2\u0001\u0000"+ + "\u0000\u0000\u06d2\u04b5\u0001\u0000\u0000\u0000\u06d2\u04b8\u0001\u0000"+ + "\u0000\u0000\u06d2\u04bb\u0001\u0000\u0000\u0000\u06d2\u04be\u0001\u0000"+ + "\u0000\u0000\u06d2\u04c1\u0001\u0000\u0000\u0000\u06d2\u04c4\u0001\u0000"+ + "\u0000\u0000\u06d2\u04c7\u0001\u0000\u0000\u0000\u06d2\u04ca\u0001\u0000"+ + "\u0000\u0000\u06d2\u04cd\u0001\u0000\u0000\u0000\u06d2\u04d0\u0001\u0000"+ + "\u0000\u0000\u06d2\u04d3\u0001\u0000\u0000\u0000\u06d2\u04d6\u0001\u0000"+ + "\u0000\u0000\u06d2\u04d9\u0001\u0000\u0000\u0000\u06d2\u04dc\u0001\u0000"+ + "\u0000\u0000\u06d2\u04df\u0001\u0000\u0000\u0000\u06d2\u04e2\u0001\u0000"+ + "\u0000\u0000\u06d2\u04e5\u0001\u0000\u0000\u0000\u06d2\u04e8\u0001\u0000"+ + "\u0000\u0000\u06d2\u04eb\u0001\u0000\u0000\u0000\u06d2\u04ee\u0001\u0000"+ + "\u0000\u0000\u06d2\u04f1\u0001\u0000\u0000\u0000\u06d2\u04f4\u0001\u0000"+ + "\u0000\u0000\u06d2\u04f7\u0001\u0000\u0000\u0000\u06d2\u04fa\u0001\u0000"+ + "\u0000\u0000\u06d2\u04fd\u0001\u0000\u0000\u0000\u06d2\u0500\u0001\u0000"+ + "\u0000\u0000\u06d2\u0503\u0001\u0000\u0000\u0000\u06d2\u0506\u0001\u0000"+ + "\u0000\u0000\u06d2\u0509\u0001\u0000\u0000\u0000\u06d2\u050c\u0001\u0000"+ + "\u0000\u0000\u06d2\u050f\u0001\u0000\u0000\u0000\u06d2\u0512\u0001\u0000"+ + "\u0000\u0000\u06d2\u0515\u0001\u0000\u0000\u0000\u06d2\u0518\u0001\u0000"+ + "\u0000\u0000\u06d2\u051b\u0001\u0000\u0000\u0000\u06d2\u051e\u0001\u0000"+ + "\u0000\u0000\u06d2\u0521\u0001\u0000\u0000\u0000\u06d2\u0524\u0001\u0000"+ + "\u0000\u0000\u06d2\u0527\u0001\u0000\u0000\u0000\u06d2\u052a\u0001\u0000"+ + "\u0000\u0000\u06d2\u052d\u0001\u0000\u0000\u0000\u06d2\u0530\u0001\u0000"+ + "\u0000\u0000\u06d2\u0533\u0001\u0000\u0000\u0000\u06d2\u0536\u0001\u0000"+ + "\u0000\u0000\u06d2\u0539\u0001\u0000\u0000\u0000\u06d2\u053c\u0001\u0000"+ + "\u0000\u0000\u06d2\u053f\u0001\u0000\u0000\u0000\u06d2\u0542\u0001\u0000"+ + "\u0000\u0000\u06d2\u0545\u0001\u0000\u0000\u0000\u06d2\u0548\u0001\u0000"+ + "\u0000\u0000\u06d2\u054b\u0001\u0000\u0000\u0000\u06d2\u054e\u0001\u0000"+ + "\u0000\u0000\u06d2\u0551\u0001\u0000\u0000\u0000\u06d2\u0555\u0001\u0000"+ + "\u0000\u0000\u06d2\u0559\u0001\u0000\u0000\u0000\u06d2\u055d\u0001\u0000"+ + "\u0000\u0000\u06d2\u0561\u0001\u0000\u0000\u0000\u06d2\u0565\u0001\u0000"+ + "\u0000\u0000\u06d2\u0569\u0001\u0000\u0000\u0000\u06d2\u056d\u0001\u0000"+ + "\u0000\u0000\u06d2\u0571\u0001\u0000\u0000\u0000\u06d2\u0575\u0001\u0000"+ + "\u0000\u0000\u06d2\u0579\u0001\u0000\u0000\u0000\u06d2\u057d\u0001\u0000"+ + "\u0000\u0000\u06d2\u0581\u0001\u0000\u0000\u0000\u06d2\u0585\u0001\u0000"+ + "\u0000\u0000\u06d2\u0589\u0001\u0000\u0000\u0000\u06d2\u058d\u0001\u0000"+ + "\u0000\u0000\u06d2\u0591\u0001\u0000\u0000\u0000\u06d2\u0594\u0001\u0000"+ + "\u0000\u0000\u06d2\u0597\u0001\u0000\u0000\u0000\u06d2\u059a\u0001\u0000"+ + "\u0000\u0000\u06d2\u059d\u0001\u0000\u0000\u0000\u06d2\u05a0\u0001\u0000"+ + "\u0000\u0000\u06d2\u05a4\u0001\u0000\u0000\u0000\u06d2\u05a8\u0001\u0000"+ + "\u0000\u0000\u06d2\u05ac\u0001\u0000\u0000\u0000\u06d2\u05b0\u0001\u0000"+ + "\u0000\u0000\u06d2\u05b4\u0001\u0000\u0000\u0000\u06d2\u05b8\u0001\u0000"+ + "\u0000\u0000\u06d2\u05bc\u0001\u0000\u0000\u0000\u06d2\u05c0\u0001\u0000"+ + "\u0000\u0000\u06d2\u05c4\u0001\u0000\u0000\u0000\u06d2\u05c8\u0001\u0000"+ + "\u0000\u0000\u06d2\u05cc\u0001\u0000\u0000\u0000\u06d2\u05d0\u0001\u0000"+ + "\u0000\u0000\u06d2\u05d4\u0001\u0000\u0000\u0000\u06d2\u05d8\u0001\u0000"+ + "\u0000\u0000\u06d2\u05dc\u0001\u0000\u0000\u0000\u06d2\u05e0\u0001\u0000"+ + "\u0000\u0000\u06d2\u05e3\u0001\u0000\u0000\u0000\u06d2\u05e6\u0001\u0000"+ + "\u0000\u0000\u06d2\u05e9\u0001\u0000\u0000\u0000\u06d2\u05ec\u0001\u0000"+ + "\u0000\u0000\u06d2\u05ef\u0001\u0000\u0000\u0000\u06d2\u05f2\u0001\u0000"+ + "\u0000\u0000\u06d2\u05f5\u0001\u0000\u0000\u0000\u06d2\u05f8\u0001\u0000"+ + "\u0000\u0000\u06d2\u05fc\u0001\u0000\u0000\u0000\u06d2\u05ff\u0001\u0000"+ + "\u0000\u0000\u06d2\u0602\u0001\u0000\u0000\u0000\u06d2\u0606\u0001\u0000"+ + "\u0000\u0000\u06d2\u0609\u0001\u0000\u0000\u0000\u06d2\u060c\u0001\u0000"+ + "\u0000\u0000\u06d2\u060f\u0001\u0000\u0000\u0000\u06d2\u0612\u0001\u0000"+ + "\u0000\u0000\u06d2\u0616\u0001\u0000\u0000\u0000\u06d2\u0619\u0001\u0000"+ + "\u0000\u0000\u06d2\u061c\u0001\u0000\u0000\u0000\u06d2\u061f\u0001\u0000"+ + "\u0000\u0000\u06d2\u0623\u0001\u0000\u0000\u0000\u06d2\u0626\u0001\u0000"+ + "\u0000\u0000\u06d2\u062a\u0001\u0000\u0000\u0000\u06d2\u062d\u0001\u0000"+ + "\u0000\u0000\u06d2\u0631\u0001\u0000\u0000\u0000\u06d2\u0635\u0001\u0000"+ + "\u0000\u0000\u06d2\u0638\u0001\u0000\u0000\u0000\u06d2\u063c\u0001\u0000"+ + "\u0000\u0000\u06d2\u063f\u0001\u0000\u0000\u0000\u06d2\u0642\u0001\u0000"+ + "\u0000\u0000\u06d2\u0645\u0001\u0000\u0000\u0000\u06d2\u0649\u0001\u0000"+ + "\u0000\u0000\u06d2\u064c\u0001\u0000\u0000\u0000\u06d2\u064f\u0001\u0000"+ + "\u0000\u0000\u06d2\u0652\u0001\u0000\u0000\u0000\u06d2\u0656\u0001\u0000"+ + "\u0000\u0000\u06d2\u0659\u0001\u0000\u0000\u0000\u06d2\u065c\u0001\u0000"+ + "\u0000\u0000\u06d2\u065f\u0001\u0000\u0000\u0000\u06d2\u0663\u0001\u0000"+ + "\u0000\u0000\u06d2\u0667\u0001\u0000\u0000\u0000\u06d2\u066b\u0001\u0000"+ + "\u0000\u0000\u06d2\u066f\u0001\u0000\u0000\u0000\u06d2\u0673\u0001\u0000"+ + "\u0000\u0000\u06d2\u0676\u0001\u0000\u0000\u0000\u06d2\u0679\u0001\u0000"+ + "\u0000\u0000\u06d2\u067d\u0001\u0000\u0000\u0000\u06d2\u0680\u0001\u0000"+ + "\u0000\u0000\u06d2\u0683\u0001\u0000\u0000\u0000\u06d2\u0687\u0001\u0000"+ + "\u0000\u0000\u06d2\u068a\u0001\u0000\u0000\u0000\u06d2\u068e\u0001\u0000"+ + "\u0000\u0000\u06d2\u0692\u0001\u0000\u0000\u0000\u06d2\u0696\u0001\u0000"+ + "\u0000\u0000\u06d2\u0699\u0001\u0000\u0000\u0000\u06d2\u069c\u0001\u0000"+ + "\u0000\u0000\u06d2\u069f\u0001\u0000\u0000\u0000\u06d2\u06a2\u0001\u0000"+ + "\u0000\u0000\u06d2\u06a5\u0001\u0000\u0000\u0000\u06d2\u06a8\u0001\u0000"+ + "\u0000\u0000\u06d2\u06ab\u0001\u0000\u0000\u0000\u06d2\u06ae\u0001\u0000"+ + "\u0000\u0000\u06d2\u06b1\u0001\u0000\u0000\u0000\u06d2\u06b4\u0001\u0000"+ + "\u0000\u0000\u06d2\u06b7\u0001\u0000\u0000\u0000\u06d2\u06ba\u0001\u0000"+ + "\u0000\u0000\u06d2\u06bd\u0001\u0000\u0000\u0000\u06d2\u06c0\u0001\u0000"+ + "\u0000\u0000\u06d2\u06c3\u0001\u0000\u0000\u0000\u06d2\u06c6\u0001\u0000"+ + "\u0000\u0000\u06d2\u06c9\u0001\u0000\u0000\u0000\u06d2\u06cc\u0001\u0000"+ + "\u0000\u0000\u06d2\u06cf\u0001\u0000\u0000\u0000\u06d3\u00ee\u0001\u0000"+ + "\u0000\u0000\u06d4\u06d5\u0005#\u0000\u0000\u06d5\u00f0\u0001\u0000\u0000"+ + "\u0000\u06d6\u06d7\u0005:\u0000\u0000\u06d7\u00f2\u0001\u0000\u0000\u0000"+ + "\u06d8\u06d9\u0005,\u0000\u0000\u06d9\u00f4\u0001\u0000\u0000\u0000\u06da"+ + "\u06db\u0005(\u0000\u0000\u06db\u00f6\u0001\u0000\u0000\u0000\u06dc\u06dd"+ + "\u0005)\u0000\u0000\u06dd\u00f8\u0001\u0000\u0000\u0000\u06de\u06df\u0005"+ + "[\u0000\u0000\u06df\u00fa\u0001\u0000\u0000\u0000\u06e0\u06e1\u0005]\u0000"+ + "\u0000\u06e1\u00fc\u0001\u0000\u0000\u0000\u06e2\u06e3\u0005.\u0000\u0000"+ + "\u06e3\u00fe\u0001\u0000\u0000\u0000\u06e4\u06e5\u0005<\u0000\u0000\u06e5"+ + "\u06e6\u0005<\u0000\u0000\u06e6\u0100\u0001\u0000\u0000\u0000\u06e7\u06e8"+ + "\u0005>\u0000\u0000\u06e8\u06e9\u0005>\u0000\u0000\u06e9\u0102\u0001\u0000"+ + "\u0000\u0000\u06ea\u06eb\u0005+\u0000\u0000\u06eb\u0104\u0001\u0000\u0000"+ + "\u0000\u06ec\u06ed\u0005-\u0000\u0000\u06ed\u0106\u0001\u0000\u0000\u0000"+ + "\u06ee\u06ef\u0005<\u0000\u0000\u06ef\u0108\u0001\u0000\u0000\u0000\u06f0"+ + "\u06f1\u0005>\u0000\u0000\u06f1\u010a\u0001\u0000\u0000\u0000\u06f2\u06f3"+ + "\u0005*\u0000\u0000\u06f3\u010c\u0001\u0000\u0000\u0000\u06f4\u06f5\u0005"+ + "/\u0000\u0000\u06f5\u010e\u0001\u0000\u0000\u0000\u06f6\u06f7\u0005{\u0000"+ + "\u0000\u06f7\u06f8\u0006\u0086\u0007\u0000\u06f8\u0110\u0001\u0000\u0000"+ + "\u0000\u06f9\u06fa\u0005}\u0000\u0000\u06fa\u06fb\u0006\u0087\b\u0000"+ + "\u06fb\u0112\u0001\u0000\u0000\u0000\u06fc\u06ff\u0003\u0115\u0089\u0000"+ + "\u06fd\u06ff\u0003\u011d\u008d\u0000\u06fe\u06fc\u0001\u0000\u0000\u0000"+ + "\u06fe\u06fd\u0001\u0000\u0000\u0000\u06ff\u0114\u0001\u0000\u0000\u0000"+ + "\u0700\u0704\u0003\u0117\u008a\u0000\u0701\u0704\u0003\u0119\u008b\u0000"+ + "\u0702\u0704\u0003\u011b\u008c\u0000\u0703\u0700\u0001\u0000\u0000\u0000"+ + "\u0703\u0701\u0001\u0000\u0000\u0000\u0703\u0702\u0001\u0000\u0000\u0000"+ + "\u0704\u0116\u0001\u0000\u0000\u0000\u0705\u0709\u0005%\u0000\u0000\u0706"+ + "\u0708\u0003\u0125\u0091\u0000\u0707\u0706\u0001\u0000\u0000\u0000\u0708"+ + "\u070b\u0001\u0000\u0000\u0000\u0709\u0707\u0001\u0000\u0000\u0000\u0709"+ + "\u070a\u0001\u0000\u0000\u0000\u070a\u070c\u0001\u0000\u0000\u0000\u070b"+ + "\u0709\u0001\u0000\u0000\u0000\u070c\u070e\u0005.\u0000\u0000\u070d\u070f"+ + "\u0003\u0125\u0091\u0000\u070e\u070d\u0001\u0000\u0000\u0000\u070f\u0710"+ + "\u0001\u0000\u0000\u0000\u0710\u070e\u0001\u0000\u0000\u0000\u0710\u0711"+ + "\u0001\u0000\u0000\u0000\u0711\u0118\u0001\u0000\u0000\u0000\u0712\u0714"+ + "\u0003\u0127\u0092\u0000\u0713\u0712\u0001\u0000\u0000\u0000\u0714\u0717"+ + "\u0001\u0000\u0000\u0000\u0715\u0713\u0001\u0000\u0000\u0000\u0715\u0716"+ + "\u0001\u0000\u0000\u0000\u0716\u0718\u0001\u0000\u0000\u0000\u0717\u0715"+ + "\u0001\u0000\u0000\u0000\u0718\u071a\u0005.\u0000\u0000\u0719\u071b\u0003"+ + "\u0127\u0092\u0000\u071a\u0719\u0001\u0000\u0000\u0000\u071b\u071c\u0001"+ + "\u0000\u0000\u0000\u071c\u071a\u0001\u0000\u0000\u0000\u071c\u071d\u0001"+ + "\u0000\u0000\u0000\u071d\u011a\u0001\u0000\u0000\u0000\u071e\u0722\u0005"+ + "$\u0000\u0000\u071f\u0721\u0003\u0129\u0093\u0000\u0720\u071f\u0001\u0000"+ + "\u0000\u0000\u0721\u0724\u0001\u0000\u0000\u0000\u0722\u0720\u0001\u0000"+ + "\u0000\u0000\u0722\u0723\u0001\u0000\u0000\u0000\u0723\u0725\u0001\u0000"+ + "\u0000\u0000\u0724\u0722\u0001\u0000\u0000\u0000\u0725\u0727\u0005.\u0000"+ + "\u0000\u0726\u0728\u0003\u0129\u0093\u0000\u0727\u0726\u0001\u0000\u0000"+ + "\u0000\u0728\u0729\u0001\u0000\u0000\u0000\u0729\u0727\u0001\u0000\u0000"+ + "\u0000\u0729\u072a\u0001\u0000\u0000\u0000\u072a\u011c\u0001\u0000\u0000"+ + "\u0000\u072b\u072f\u0003\u0121\u008f\u0000\u072c\u072f\u0003\u0123\u0090"+ + "\u0000\u072d\u072f\u0003\u011f\u008e\u0000\u072e\u072b\u0001\u0000\u0000"+ + "\u0000\u072e\u072c\u0001\u0000\u0000\u0000\u072e\u072d\u0001\u0000\u0000"+ + "\u0000\u072f\u011e\u0001\u0000\u0000\u0000\u0730\u0732\u0005%\u0000\u0000"+ + "\u0731\u0733\u0003\u0125\u0091\u0000\u0732\u0731\u0001\u0000\u0000\u0000"+ + "\u0733\u0734\u0001\u0000\u0000\u0000\u0734\u0732\u0001\u0000\u0000\u0000"+ + "\u0734\u0735\u0001\u0000\u0000\u0000\u0735\u0120\u0001\u0000\u0000\u0000"+ + "\u0736\u0738\u0003\u0127\u0092\u0000\u0737\u0736\u0001\u0000\u0000\u0000"+ + "\u0738\u0739\u0001\u0000\u0000\u0000\u0739\u0737\u0001\u0000\u0000\u0000"+ + "\u0739\u073a\u0001\u0000\u0000\u0000\u073a\u0122\u0001\u0000\u0000\u0000"+ + "\u073b\u073d\u0005$\u0000\u0000\u073c\u073e\u0003\u0129\u0093\u0000\u073d"+ + "\u073c\u0001\u0000\u0000\u0000\u073e\u073f\u0001\u0000\u0000\u0000\u073f"+ + "\u073d\u0001\u0000\u0000\u0000\u073f\u0740\u0001\u0000\u0000\u0000\u0740"+ + "\u0124\u0001\u0000\u0000\u0000\u0741\u0742\u0007\u0004\u0000\u0000\u0742"+ + "\u0126\u0001\u0000\u0000\u0000\u0743\u0744\u0007\u0005\u0000\u0000\u0744"+ + "\u0128\u0001\u0000\u0000\u0000\u0745\u0746\u0007\u0006\u0000\u0000\u0746"+ + "\u012a\u0001\u0000\u0000\u0000\u0747\u074b\u0005\'\u0000\u0000\u0748\u0749"+ + "\u0005\\\u0000\u0000\u0749\u074c\u0007\u0012\u0000\u0000\u074a\u074c\b"+ + "\u000f\u0000\u0000\u074b\u0748\u0001\u0000\u0000\u0000\u074b\u074a\u0001"+ + "\u0000\u0000\u0000\u074c\u074d\u0001\u0000\u0000\u0000\u074d\u074e\u0005"+ + "\'\u0000\u0000\u074e\u012c\u0001\u0000\u0000\u0000\u074f\u0751\u0003\u012f"+ + "\u0096\u0000\u0750\u0752\u0007\u0013\u0000\u0000\u0751\u0750\u0001\u0000"+ + "\u0000\u0000\u0752\u0753\u0001\u0000\u0000\u0000\u0753\u0751\u0001\u0000"+ + "\u0000\u0000\u0753\u0754\u0001\u0000\u0000\u0000\u0754\u012e\u0001\u0000"+ + "\u0000\u0000\u0755\u0759\u0005!\u0000\u0000\u0756\u0758\u0003\u0135\u0099"+ + "\u0000\u0757\u0756\u0001\u0000\u0000\u0000\u0758\u075b\u0001\u0000\u0000"+ + "\u0000\u0759\u0757\u0001\u0000\u0000\u0000\u0759\u075a\u0001\u0000\u0000"+ + "\u0000\u075a\u0130\u0001\u0000\u0000\u0000\u075b\u0759\u0001\u0000\u0000"+ + "\u0000\u075c\u0760\u0003\u0133\u0098\u0000\u075d\u075f\u0003\u0135\u0099"+ + "\u0000\u075e\u075d\u0001\u0000\u0000\u0000\u075f\u0762\u0001\u0000\u0000"+ + "\u0000\u0760\u075e\u0001\u0000\u0000\u0000\u0760\u0761\u0001\u0000\u0000"+ + "\u0000\u0761\u0132\u0001\u0000\u0000\u0000\u0762\u0760\u0001\u0000\u0000"+ + "\u0000\u0763\u0764\u0007\u0007\u0000\u0000\u0764\u0134\u0001\u0000\u0000"+ + "\u0000\u0765\u0766\u0007\b\u0000\u0000\u0766\u0136\u0001\u0000\u0000\u0000"+ + "\u0767\u0768\u0005@\u0000\u0000\u0768\u0769\u0003\u0131\u0097\u0000\u0769"+ + "\u0138\u0001\u0000\u0000\u0000\u076a\u076c\u0007\u0010\u0000\u0000\u076b"+ + "\u076a\u0001\u0000\u0000\u0000\u076c\u076d\u0001\u0000\u0000\u0000\u076d"+ + "\u076b\u0001\u0000\u0000\u0000\u076d\u076e\u0001\u0000\u0000\u0000\u076e"+ + "\u076f\u0001\u0000\u0000\u0000\u076f\u0770\u0006\u009b\u0005\u0000\u0770"+ + "\u013a\u0001\u0000\u0000\u0000\u0771\u0772\u0005/\u0000\u0000\u0772\u0773"+ + "\u0005/\u0000\u0000\u0773\u0777\u0001\u0000\u0000\u0000\u0774\u0776\b"+ + "\u0011\u0000\u0000\u0775\u0774\u0001\u0000\u0000\u0000\u0776\u0779\u0001"+ + "\u0000\u0000\u0000\u0777\u0775\u0001\u0000\u0000\u0000\u0777\u0778\u0001"+ + "\u0000\u0000\u0000\u0778\u077a\u0001\u0000\u0000\u0000\u0779\u0777\u0001"+ + "\u0000\u0000\u0000\u077a\u077b\u0006\u009c\u0006\u0000\u077b\u013c\u0001"+ + "\u0000\u0000\u0000\u077c\u077d\u0005/\u0000\u0000\u077d\u077e\u0005*\u0000"+ + "\u0000\u077e\u0782\u0001\u0000\u0000\u0000\u077f\u0781\t\u0000\u0000\u0000"+ + "\u0780\u077f\u0001\u0000\u0000\u0000\u0781\u0784\u0001\u0000\u0000\u0000"+ + "\u0782\u0783\u0001\u0000\u0000\u0000\u0782\u0780\u0001\u0000\u0000\u0000"+ + "\u0783\u0785\u0001\u0000\u0000\u0000\u0784\u0782\u0001\u0000\u0000\u0000"+ + "\u0785\u0786\u0005*\u0000\u0000\u0786\u0787\u0005/\u0000\u0000\u0787\u0788"+ + "\u0001\u0000\u0000\u0000\u0788\u0789\u0006\u009d\u0006\u0000\u0789\u013e"+ + "\u0001\u0000\u0000\u0000\u078a\u078c\u0005<\u0000\u0000\u078b\u078d\u0007"+ + "\u0014\u0000\u0000\u078c\u078b\u0001\u0000\u0000\u0000\u078d\u078e\u0001"+ + "\u0000\u0000\u0000\u078e\u078c\u0001\u0000\u0000\u0000\u078e\u078f\u0001"+ + "\u0000\u0000\u0000\u078f\u0790\u0001\u0000\u0000\u0000\u0790\u0791\u0005"+ + ">\u0000\u0000\u0791\u0792\u0006\u009e\t\u0000\u0792\u0140\u0001\u0000"+ + "\u0000\u0000\u0793\u0799\u0005\"\u0000\u0000\u0794\u0795\u0005\\\u0000"+ + "\u0000\u0795\u0798\u0005\"\u0000\u0000\u0796\u0798\b\t\u0000\u0000\u0797"+ + "\u0794\u0001\u0000\u0000\u0000\u0797\u0796\u0001\u0000\u0000\u0000\u0798"+ + "\u079b\u0001\u0000\u0000\u0000\u0799\u0797\u0001\u0000\u0000\u0000\u0799"+ + "\u079a\u0001\u0000\u0000\u0000\u079a\u079c\u0001\u0000\u0000\u0000\u079b"+ + "\u0799\u0001\u0000\u0000\u0000\u079c\u079d\u0005\"\u0000\u0000\u079d\u079e"+ + "\u0006\u009f\n\u0000\u079e\u0142\u0001\u0000\u0000\u0000\u079f\u07a1\u0007"+ + "\u0010\u0000\u0000\u07a0\u079f\u0001\u0000\u0000\u0000\u07a1\u07a2\u0001"+ + "\u0000\u0000\u0000\u07a2\u07a0\u0001\u0000\u0000\u0000\u07a2\u07a3\u0001"+ + "\u0000\u0000\u0000\u07a3\u07a4\u0001\u0000\u0000\u0000\u07a4\u07a5\u0006"+ + "\u00a0\u0005\u0000\u07a5\u0144\u0001\u0000\u0000\u0000\u07a6\u07a7\u0005"+ + "/\u0000\u0000\u07a7\u07a8\u0005/\u0000\u0000\u07a8\u07ac\u0001\u0000\u0000"+ + "\u0000\u07a9\u07ab\b\u0011\u0000\u0000\u07aa\u07a9\u0001\u0000\u0000\u0000"+ + "\u07ab\u07ae\u0001\u0000\u0000\u0000\u07ac\u07aa\u0001\u0000\u0000\u0000"+ + "\u07ac\u07ad\u0001\u0000\u0000\u0000\u07ad\u07af\u0001\u0000\u0000\u0000"+ + "\u07ae\u07ac\u0001\u0000\u0000\u0000\u07af\u07b0\u0006\u00a1\u0006\u0000"+ + "\u07b0\u0146\u0001\u0000\u0000\u0000\u07b1\u07b2\u0005/\u0000\u0000\u07b2"+ + "\u07b3\u0005*\u0000\u0000\u07b3\u07b7\u0001\u0000\u0000\u0000\u07b4\u07b6"+ + "\t\u0000\u0000\u0000\u07b5\u07b4\u0001\u0000\u0000\u0000\u07b6\u07b9\u0001"+ + "\u0000\u0000\u0000\u07b7\u07b8\u0001\u0000\u0000\u0000\u07b7\u07b5\u0001"+ + "\u0000\u0000\u0000\u07b8\u07ba\u0001\u0000\u0000\u0000\u07b9\u07b7\u0001"+ + "\u0000\u0000\u0000\u07ba\u07bb\u0005*\u0000\u0000\u07bb\u07bc\u0005/\u0000"+ + "\u0000\u07bc\u07bd\u0001\u0000\u0000\u0000\u07bd\u07be\u0006\u00a2\u0006"+ + "\u0000\u07be\u0148\u0001\u0000\u0000\u0000C\u0000\u0001\u0002\u01b6\u027c"+ + "\u032d\u0338\u0340\u0370\u03ae\u03b3\u03ba\u03bf\u03c6\u03cb\u03d2\u03d9"+ + "\u03de\u03e5\u03ea\u03ef\u03f6\u03fc\u03fe\u0403\u040a\u040f\u041b\u0428"+ + "\u042a\u042f\u0433\u0435\u0438\u043e\u0441\u0446\u0449\u0450\u045a\u0465"+ + "\u06d2\u06fe\u0703\u0709\u0710\u0715\u071c\u0722\u0729\u072e\u0734\u0739"+ + "\u073f\u074b\u0753\u0759\u0760\u076d\u0777\u0782\u078e\u0797\u0799\u07a2"+ + "\u07ac\u07b7\u000b\u0001\u0000\u0000\u0001C\u0001\u0001Q\u0002\u0001R"+ + "\u0003\u0001l\u0004\u0000\u0001\u0000\u0000\u0002\u0000\u0001\u0086\u0005"+ + "\u0001\u0087\u0006\u0001\u009e\u0007\u0001\u009f\b"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/gen/KickCLexer.tokens b/gen/KickCLexer.tokens index 4d0aace39..2f4afb435 100644 --- a/gen/KickCLexer.tokens +++ b/gen/KickCLexer.tokens @@ -51,106 +51,107 @@ ADDRESS=50 ADDRESS_ZEROPAGE=51 ADDRESS_MAINMEM=52 FAR=53 -FORM_SSA=54 -FORM_MA=55 -INTRINSIC=56 -CALLINGCONVENTION=57 -IF=58 -ELSE=59 -WHILE=60 -DO=61 -FOR=62 -SWITCH=63 -RETURN=64 -BREAK=65 -CONTINUE=66 -GOTO=67 -ASM=68 -DEFAULT=69 -CASE=70 -STRUCT=71 -UNION=72 -ENUM=73 -SIZEOF=74 -TYPEID=75 -DEFINED=76 -KICKASM=77 -LOGIC_NOT=78 -SIMPLETYPE=79 -BOOLEAN=80 -KICKASM_BODY=81 -IMPORT=82 -INCLUDE=83 -PRAGMA=84 -DEFINE=85 -DEFINE_CONTINUE=86 -UNDEF=87 -IFDEF=88 -IFNDEF=89 -IFIF=90 -ELIF=91 -IFELSE=92 -ENDIF=93 -ERROR=94 -TOKEN_STRINGIZE=95 -TOKEN_MERGE=96 -NUMBER=97 -NUMFLOAT=98 -BINFLOAT=99 -DECFLOAT=100 -HEXFLOAT=101 -NUMINT=102 -BININTEGER=103 -DECINTEGER=104 -HEXINTEGER=105 -NAME=106 -STRING=107 -CHAR=108 -WS=109 -COMMENT_LINE=110 -COMMENT_BLOCK=111 -ASM_BYTE=112 -ASM_MNEMONIC=113 -ASM_IMM=114 -ASM_COLON=115 -ASM_COMMA=116 -ASM_PAR_BEGIN=117 -ASM_PAR_END=118 -ASM_BRACKET_BEGIN=119 -ASM_BRACKET_END=120 -ASM_DOT=121 -ASM_SHIFT_LEFT=122 -ASM_SHIFT_RIGHT=123 -ASM_PLUS=124 -ASM_MINUS=125 -ASM_LESS_THAN=126 -ASM_GREATER_THAN=127 -ASM_MULTIPLY=128 -ASM_DIVIDE=129 -ASM_CURLY_BEGIN=130 -ASM_CURLY_END=131 -ASM_NUMBER=132 -ASM_NUMFLOAT=133 -ASM_BINFLOAT=134 -ASM_DECFLOAT=135 -ASM_HEXFLOAT=136 -ASM_NUMINT=137 -ASM_BININTEGER=138 -ASM_DECINTEGER=139 -ASM_HEXINTEGER=140 -ASM_CHAR=141 -ASM_MULTI_REL=142 -ASM_MULTI_NAME=143 -ASM_NAME=144 -ASM_TAG=145 -ASM_WS=146 -ASM_COMMENT_LINE=147 -ASM_COMMENT_BLOCK=148 -IMPORT_SYSTEMFILE=149 -IMPORT_LOCALFILE=150 -IMPORT_WS=151 -IMPORT_COMMENT_LINE=152 -IMPORT_COMMENT_BLOCK=153 +NEAR=54 +FORM_SSA=55 +FORM_MA=56 +INTRINSIC=57 +CALLINGCONVENTION=58 +IF=59 +ELSE=60 +WHILE=61 +DO=62 +FOR=63 +SWITCH=64 +RETURN=65 +BREAK=66 +CONTINUE=67 +GOTO=68 +ASM=69 +DEFAULT=70 +CASE=71 +STRUCT=72 +UNION=73 +ENUM=74 +SIZEOF=75 +TYPEID=76 +DEFINED=77 +KICKASM=78 +LOGIC_NOT=79 +SIMPLETYPE=80 +BOOLEAN=81 +KICKASM_BODY=82 +IMPORT=83 +INCLUDE=84 +PRAGMA=85 +DEFINE=86 +DEFINE_CONTINUE=87 +UNDEF=88 +IFDEF=89 +IFNDEF=90 +IFIF=91 +ELIF=92 +IFELSE=93 +ENDIF=94 +ERROR=95 +TOKEN_STRINGIZE=96 +TOKEN_MERGE=97 +NUMBER=98 +NUMFLOAT=99 +BINFLOAT=100 +DECFLOAT=101 +HEXFLOAT=102 +NUMINT=103 +BININTEGER=104 +DECINTEGER=105 +HEXINTEGER=106 +NAME=107 +STRING=108 +CHAR=109 +WS=110 +COMMENT_LINE=111 +COMMENT_BLOCK=112 +ASM_BYTE=113 +ASM_MNEMONIC=114 +ASM_IMM=115 +ASM_COLON=116 +ASM_COMMA=117 +ASM_PAR_BEGIN=118 +ASM_PAR_END=119 +ASM_BRACKET_BEGIN=120 +ASM_BRACKET_END=121 +ASM_DOT=122 +ASM_SHIFT_LEFT=123 +ASM_SHIFT_RIGHT=124 +ASM_PLUS=125 +ASM_MINUS=126 +ASM_LESS_THAN=127 +ASM_GREATER_THAN=128 +ASM_MULTIPLY=129 +ASM_DIVIDE=130 +ASM_CURLY_BEGIN=131 +ASM_CURLY_END=132 +ASM_NUMBER=133 +ASM_NUMFLOAT=134 +ASM_BINFLOAT=135 +ASM_DECFLOAT=136 +ASM_HEXFLOAT=137 +ASM_NUMINT=138 +ASM_BININTEGER=139 +ASM_DECINTEGER=140 +ASM_HEXINTEGER=141 +ASM_CHAR=142 +ASM_MULTI_REL=143 +ASM_MULTI_NAME=144 +ASM_NAME=145 +ASM_TAG=146 +ASM_WS=147 +ASM_COMMENT_LINE=148 +ASM_COMMENT_BLOCK=149 +IMPORT_SYSTEMFILE=150 +IMPORT_LOCALFILE=151 +IMPORT_WS=152 +IMPORT_COMMENT_LINE=153 +IMPORT_COMMENT_BLOCK=154 ';'=8 '..'=11 '...'=12 @@ -185,41 +186,42 @@ IMPORT_COMMENT_BLOCK=153 '__zp'=51 '__mem'=52 '__far'=53 -'__ssa'=54 -'__ma'=55 -'__intrinsic'=56 -'if'=58 -'else'=59 -'while'=60 -'do'=61 -'for'=62 -'switch'=63 -'return'=64 -'break'=65 -'continue'=66 -'goto'=67 -'asm'=68 -'default'=69 -'case'=70 -'struct'=71 -'union'=72 -'enum'=73 -'sizeof'=74 -'typeid'=75 -'defined'=76 -'kickasm'=77 -'!'=78 -'#import'=82 -'#include'=83 -'#pragma'=84 -'#define'=85 -'#undef'=87 -'#ifdef'=88 -'#ifndef'=89 -'#if'=90 -'#elif'=91 -'#else'=92 -'#endif'=93 -'#error'=94 -'.byte'=112 -'#'=114 +'__near'=54 +'__ssa'=55 +'__ma'=56 +'__intrinsic'=57 +'if'=59 +'else'=60 +'while'=61 +'do'=62 +'for'=63 +'switch'=64 +'return'=65 +'break'=66 +'continue'=67 +'goto'=68 +'asm'=69 +'default'=70 +'case'=71 +'struct'=72 +'union'=73 +'enum'=74 +'sizeof'=75 +'typeid'=76 +'defined'=77 +'kickasm'=78 +'!'=79 +'#import'=83 +'#include'=84 +'#pragma'=85 +'#define'=86 +'#undef'=88 +'#ifdef'=89 +'#ifndef'=90 +'#if'=91 +'#elif'=92 +'#else'=93 +'#endif'=94 +'#error'=95 +'.byte'=113 +'#'=115 diff --git a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 index 4b61311bf..3b20e6c22 100644 --- a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 +++ b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 @@ -136,7 +136,8 @@ parameterDecl ; pragma - : PRAGMA NAME PAR_BEGIN pragmaParam (COMMA pragmaParam)* PAR_END + : PRAGMA NAME + | PRAGMA NAME PAR_BEGIN pragmaParam (COMMA pragmaParam)* PAR_END ; pragmaParam diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 9ac613614..67f93854c 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -325,6 +325,9 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor pragmaBody = readBody(cTokenSource); - final Token pragmaBodyStart = pragmaBody.get(0); - // Convert space-based pragma to parenthesis-based for easier parsing - // #pragma NAME XXX YYY \n => #pragma NAME ( XXX , YYY ) \n - if(pragmaBodyStart.getType() != KickCLexer.PAR_BEGIN) { - ArrayList parenthesizedBody = new ArrayList<>(); - parenthesizedBody.add(new CommonToken(KickCLexer.PAR_BEGIN, "(")); - // Parenthesize the parameter list - boolean first = true; - for(Token token : pragmaBody) { - if(token.getChannel() != CParser.CHANNEL_WHITESPACE && !first) { - parenthesizedBody.add(new CommonToken(KickCLexer.COMMA, ",")); + if(pragmaBody.size()>0) { + final Token pragmaBodyStart = pragmaBody.get(0); + // Convert space-based pragma to parenthesis-based for easier parsing + // #pragma NAME XXX YYY \n => #pragma NAME ( XXX , YYY ) \n + if (pragmaBodyStart.getType() != KickCLexer.PAR_BEGIN) { + ArrayList parenthesizedBody = new ArrayList<>(); + parenthesizedBody.add(new CommonToken(KickCLexer.PAR_BEGIN, "(")); + // Parenthesize the parameter list + boolean first = true; + for (Token token : pragmaBody) { + if (token.getChannel() != CParser.CHANNEL_WHITESPACE && !first) { + parenthesizedBody.add(new CommonToken(KickCLexer.COMMA, ",")); + } + parenthesizedBody.add(token); + first = false; } - parenthesizedBody.add(token); - first = false; + parenthesizedBody.add(new CommonToken(KickCLexer.PAR_END, ")")); + pragmaBody = parenthesizedBody; } - parenthesizedBody.add(new CommonToken(KickCLexer.PAR_END, ")")); - pragmaBody = parenthesizedBody; + pragmaTokens.addAll(pragmaBody); + // Pass on the #pragma to the parser - and mark it as already handled + cTokenSource.addSourceFirst(new ListTokenSource(pragmaTokens)); } - pragmaTokens.addAll(pragmaBody); - // Pass on the #pragma to the parser - and mark it as already handled - cTokenSource.addSourceFirst(new ListTokenSource(pragmaTokens)); parserPragmas.add(inputToken); return true; } diff --git a/src/test/kc/procedure-callingconvention-phi-far-4.c b/src/test/kc/procedure-callingconvention-phi-far-4.c new file mode 100644 index 000000000..4004a4606 --- /dev/null +++ b/src/test/kc/procedure-callingconvention-phi-far-4.c @@ -0,0 +1,32 @@ +// Test a far call procedure with a calling convention sp + +char* const SCREEN = (char*)0x0400; + +void main(void) { + SCREEN[0] = plus('0', 7); +} + +#pragma code_seg(stage) +#pragma far_seg(stage, 20) + +char plus(char a, char b) { + return a+b; +} + +#pragma near_seg + +void stage_entry() { + asm { + lda 0 + pha + lda #1 + sta 0 + } +} + +void stage_exit() { + asm { + pla + sta 0 + } +} From d19c005d79aecd649b821bce1590e0f2baf9157a Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Sat, 19 Nov 2022 08:19:18 +0100 Subject: [PATCH 09/66] Fine tune of the phi-far-4 example to clearly illustrate #pragma near_seg utilization. --- .../procedure-callingconvention-phi-far-4.c | 21 +++---------------- 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/src/test/kc/procedure-callingconvention-phi-far-4.c b/src/test/kc/procedure-callingconvention-phi-far-4.c index 4004a4606..7ce43eb46 100644 --- a/src/test/kc/procedure-callingconvention-phi-far-4.c +++ b/src/test/kc/procedure-callingconvention-phi-far-4.c @@ -1,11 +1,7 @@ -// Test a far call procedure with a calling convention sp +// Test a far call procedure with a calling convention phi char* const SCREEN = (char*)0x0400; -void main(void) { - SCREEN[0] = plus('0', 7); -} - #pragma code_seg(stage) #pragma far_seg(stage, 20) @@ -15,18 +11,7 @@ char plus(char a, char b) { #pragma near_seg -void stage_entry() { - asm { - lda 0 - pha - lda #1 - sta 0 - } +void main(void) { + SCREEN[0] = plus('0', 7); } -void stage_exit() { - asm { - pla - sta 0 - } -} From 1a63d437a0d0bf9a8041e595470359e83be6f621 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Sun, 20 Nov 2022 09:56:10 +0100 Subject: [PATCH 10/66] - Refactored far call logic during parsing. The pragmaFarSegs hash table has been removed from the Pass0GenerateStatementSequence. Instead, a currentFarSegment is controlling the #pragma logic. - Refactored pragmaCodeSegs HashMap, which has been removed from Pass0GenerateStatementSequence and moved to Program. It controls which code segment have been defined, and a validation is implemented in the far_seg pragmas. - Refactored __far() to use the code segments, in analogy to far_seg pragmas. - Refactored Procedure, which implements functions to use the FarSegment to decide on far declaration and far bank retrieval. - refactored CallingConvention. Removed earlier quick implementation of bankFar variable as a local property, and declaredFar in the Procedure class. Now everyting is controlled through the farSegment. - Refactored Procedure, the removal of FAR_CALL calling convention. It is wrong to implement FAR_CALL calling convention, because far and near calls can be stack calls, phi calls and even a varcall can be near of far. - Removed the Pass1ProcedureFar because far and near implementation is not defined in statement level, it is defined on procedure level. But I've kept Pass1ProcedureFar to suppor the logic for inline prepare, execute, finalize routines during further implementation. - Refactored directive FAR to match the directive far_seg() structure. - Refactored complete logic during Pass4CodeGeneration to process statement call fragment generation to decide on near or far calls within the logic, taking into account the calling convention used. - Added new fragments call_far[platform]_prepare.asm, call_far[platform]_execute.asm, call_far[platform]_finalize.asm and deleted call_far[platform]_entry.asm, call_far[platform]_exit.asm - Renamed pragmas far_seg and near_seg to simply far and near respectively. Updated test cases with this change. - Added test cases. TODO: The actual inline implementation of prepare, execute, finalize functions when platform .asm fragments are not used. TODO: Implementation of the near directive. --- .../dk/camelot64/kickc/parser/KickCParser.g4 | 2 +- ...16_entry.asm => call_far_cx16_execute.asm} | 0 ...16_exit.asm => call_far_cx16_finalize.asm} | 0 .../mos6502-common/call_far_cx16_prepare.asm | 0 .../java/dk/camelot64/kickc/Compiler.java | 1 - .../AsmFragmentInstanceSpecBuilder.java | 31 +++- .../signature/AsmFragmentSignature.java | 15 +- .../dk/camelot64/kickc/model/Directive.java | 36 ++++- .../dk/camelot64/kickc/model/FarSegment.java | 49 +++--- .../dk/camelot64/kickc/model/Program.java | 13 +- .../kickc/model/symbols/Procedure.java | 37 +++-- .../dk/camelot64/kickc/parser/CParser.java | 8 +- .../Pass0GenerateStatementSequence.java | 85 +++++----- .../kickc/passes/Pass1ProcedureFar.java | 2 +- .../kickc/passes/Pass4CodeGeneration.java | 44 +++-- .../kickc/test/TestProgramsFast.java | 38 +++-- .../procedure-callingconvention-phi-far-0.c | 3 +- .../procedure-callingconvention-phi-far-1.c | 2 +- .../procedure-callingconvention-phi-far-2.c | 2 +- .../procedure-callingconvention-phi-far-3.c | 2 +- .../procedure-callingconvention-phi-far-4.c | 4 +- .../procedure-callingconvention-phi-far-5.c | 100 ++++++++++++ .../procedure-callingconvention-stack-far-0.c | 3 +- .../procedure-callingconvention-stack-far-1.c | 3 +- .../procedure-callingconvention-stack-far-2.c | 3 +- .../procedure-callingconvention-stack-far-3.c | 51 +++++- .../procedure-callingconvention-stack-far-4.c | 40 ++--- .../procedure-callingconvention-stack-far-5.c | 37 ++--- .../procedure-callingconvention-stack-far-6.c | 18 --- ...rocedure-callingconvention-stack-far-3.asm | 145 +++++++++++++++++ ...rocedure-callingconvention-stack-far-3.dbg | 153 ++++++++++++++++++ ...ocedure-callingconvention-stack-far-3.klog | 22 +++ ...rocedure-callingconvention-stack-far-3.prg | Bin 0 -> 91 bytes ...rocedure-callingconvention-stack-far-3.sym | 20 +++ ...procedure-callingconvention-stack-far-3.vs | 14 ++ 35 files changed, 775 insertions(+), 208 deletions(-) rename src/main/fragment/mos6502-common/{call_far_cx16_entry.asm => call_far_cx16_execute.asm} (100%) rename src/main/fragment/mos6502-common/{call_far_cx16_exit.asm => call_far_cx16_finalize.asm} (100%) create mode 100644 src/main/fragment/mos6502-common/call_far_cx16_prepare.asm create mode 100644 src/test/kc/procedure-callingconvention-phi-far-5.c delete mode 100644 src/test/kc/procedure-callingconvention-stack-far-6.c create mode 100644 src/test/target/procedure-callingconvention-stack-far-3.asm create mode 100644 src/test/target/procedure-callingconvention-stack-far-3.dbg create mode 100644 src/test/target/procedure-callingconvention-stack-far-3.klog create mode 100644 src/test/target/procedure-callingconvention-stack-far-3.prg create mode 100644 src/test/target/procedure-callingconvention-stack-far-3.sym create mode 100644 src/test/target/procedure-callingconvention-stack-far-3.vs diff --git a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 index 3b20e6c22..070ecaee8 100644 --- a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 +++ b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 @@ -162,7 +162,7 @@ directive | EXTERN #directiveExtern | EXPORT #directiveExport | INLINE #directiveInline - | FAR PAR_BEGIN ( NUMBER ) PAR_END #directiveFar + | FAR PAR_BEGIN NAME COMMA NUMBER (COMMA NAME COMMA NAME COMMA NAME)? PAR_END #directiveFar | INTRINSIC #directiveIntrinsic | INTERRUPT ( PAR_BEGIN NAME PAR_END )? #directiveInterrupt | LOCAL_RESERVE PAR_BEGIN pragmaParam ( COMMA pragmaParam )* PAR_END #directiveReserveZp diff --git a/src/main/fragment/mos6502-common/call_far_cx16_entry.asm b/src/main/fragment/mos6502-common/call_far_cx16_execute.asm similarity index 100% rename from src/main/fragment/mos6502-common/call_far_cx16_entry.asm rename to src/main/fragment/mos6502-common/call_far_cx16_execute.asm diff --git a/src/main/fragment/mos6502-common/call_far_cx16_exit.asm b/src/main/fragment/mos6502-common/call_far_cx16_finalize.asm similarity index 100% rename from src/main/fragment/mos6502-common/call_far_cx16_exit.asm rename to src/main/fragment/mos6502-common/call_far_cx16_finalize.asm diff --git a/src/main/fragment/mos6502-common/call_far_cx16_prepare.asm b/src/main/fragment/mos6502-common/call_far_cx16_prepare.asm new file mode 100644 index 000000000..e69de29bb diff --git a/src/main/java/dk/camelot64/kickc/Compiler.java b/src/main/java/dk/camelot64/kickc/Compiler.java index 812cffe2a..cc8b197cd 100644 --- a/src/main/java/dk/camelot64/kickc/Compiler.java +++ b/src/main/java/dk/camelot64/kickc/Compiler.java @@ -278,7 +278,6 @@ public class Compiler { getLog().append(program.getGraph().toString(program)); } new Pass1ProcedureInline(program).execute(); - new Pass1ProcedureFar(program).execute(); // Implements far calls to procedures defined in a bank. See https://gitlab.com/Flight_Control/kickc/-/commits/far-call-isolated new PassNStatementIndices(program).step(); program.clearCallGraph(); new Pass1AssertNoRecursion(program).execute(); diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java index 41e3a76e8..c39c919d9 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java @@ -18,7 +18,6 @@ import dk.camelot64.kickc.model.symbols.Symbol; import dk.camelot64.kickc.model.types.SymbolType; import dk.camelot64.kickc.model.types.SymbolTypeInference; import dk.camelot64.kickc.model.values.*; -import kickass.pass.values.StringValue; /** * Creates an ASM Fragment specification for a statement in the control flow graph. @@ -43,16 +42,16 @@ final public class AsmFragmentInstanceSpecBuilder { } /** - * Create a fragment instance spec factory for a far call entry + * Create a fragment instance spec factory for a far call prepare * * @param bankFar The bank where the procedure is to be called. * @param procedureName The full name of the procedure. * @param program The program * @return the fragment instance spec factory */ - public static AsmFragmentInstanceSpec farCallEntry(Long bankFar, String procedureName, Program program) { + public static AsmFragmentInstanceSpec farCallPrepare(Long bankFar, String procedureName, Program program) { AsmFragmentBindings bindings = new AsmFragmentBindings(program); - AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(bankFar, program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.EntryExit.Entry); + AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(bankFar, program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.PrepareExecuteFinalize.Prepare); ScopeRef codeScope = program.getScope().getRef(); // ScopeRef codeScope = program.getStatementInfos().getBlock(call).getScope(); bindings.bind("c1", new ConstantInteger(bankFar)); @@ -61,16 +60,34 @@ final public class AsmFragmentInstanceSpecBuilder { } /** - * Create a fragment instance spec factory for a far call exit + * Create a fragment instance spec factory for a far call execute + * + * @param bankFar The bank where the procedure is to be called. + * @param procedureName The full name of the procedure. + * @param program The program + * @return the fragment instance spec factory + */ + public static AsmFragmentInstanceSpec farCallExecute(Long bankFar, String procedureName, Program program) { + AsmFragmentBindings bindings = new AsmFragmentBindings(program); + AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(bankFar, program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.PrepareExecuteFinalize.Execute); + ScopeRef codeScope = program.getScope().getRef(); +// ScopeRef codeScope = program.getStatementInfos().getBlock(call).getScope(); + bindings.bind("c1", new ConstantInteger(bankFar)); + bindings.bind("la1", new LabelRef(procedureName)); + return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); + } + + /** + * Create a fragment instance spec factory for a far call finalize * * @param bankFar The bank where the procedure is to be called. * @param procedureName The full name of the procedure. * @param program The program * @return the fragment instance spec factory */ - public static AsmFragmentInstanceSpec farCallExit(Long bankFar, String procedureName, Program program) { + public static AsmFragmentInstanceSpec farCallFinalize(Long bankFar, String procedureName, Program program) { AsmFragmentBindings bindings = new AsmFragmentBindings(program); - AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(bankFar, program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.EntryExit.Exit); + AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(bankFar, program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.PrepareExecuteFinalize.Finalize); ScopeRef codeScope = program.getScope().getRef(); bindings.bind("c1", new ConstantInteger(bankFar)); bindings.bind("la1", new LabelRef(procedureName)); diff --git a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java index 28797a17d..45a2689e7 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java +++ b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java @@ -78,23 +78,24 @@ public interface AsmFragmentSignature { final private Long bankFar; final private String targetPlatform; - public enum EntryExit { - Exit, - Entry + public enum PrepareExecuteFinalize { + Prepare, + Execute, + Finalize } - final private CallFar.EntryExit entryExit; + final private PrepareExecuteFinalize far; - public CallFar(Long bankFar, String targetPlatform, CallFar.EntryExit entryExit) { + public CallFar(Long bankFar, String targetPlatform, PrepareExecuteFinalize far) { this.bankFar = bankFar; this.targetPlatform = targetPlatform; - this.entryExit = entryExit; + this.far = far; } @Override public String getName() { - return "call_far" + "_" + targetPlatform + "_" + entryExit.name().toLowerCase(); + return "call_far" + "_" + targetPlatform + "_" + far.name().toLowerCase(); } } diff --git a/src/main/java/dk/camelot64/kickc/model/Directive.java b/src/main/java/dk/camelot64/kickc/model/Directive.java index f8f842a63..e155d5587 100644 --- a/src/main/java/dk/camelot64/kickc/model/Directive.java +++ b/src/main/java/dk/camelot64/kickc/model/Directive.java @@ -46,13 +46,41 @@ public class Directive { /** Function declared far. */ static public class Far extends Directive { - public Long bankFar; + private String farSegmentName; + private Long farSegmentBank; + private String farProcedurePrepare; + private String farProcedureExecute; + private String farProcedureFinalize; - public Far(Long bankFar) { - super("__far"); - this.bankFar = bankFar; + + public Far(String farSegmentName, Long farSegmentBank, String farProcedurePrepare, String farProcedureExecute, String farProcedureFinalize) { + super("far" ); + this.farSegmentName = farSegmentName; + this.farSegmentBank = farSegmentBank; + this.farProcedurePrepare = farProcedurePrepare; + this.farProcedureExecute = farProcedureExecute; + this.farProcedureFinalize = farProcedureFinalize; } + public String getFarSegmentName() { + return farSegmentName; + } + + public Long getFarSegmentBank() { + return farSegmentBank; + } + + public String getFarProcedurePrepare() { + return farProcedurePrepare; + } + + public String getFarProcedureExecute() { + return farProcedureExecute; + } + + public String getFarProcedureFinalize() { + return farProcedureFinalize; + } } /** Function declared intrinsic. */ diff --git a/src/main/java/dk/camelot64/kickc/model/FarSegment.java b/src/main/java/dk/camelot64/kickc/model/FarSegment.java index d297adbad..18f8dd976 100644 --- a/src/main/java/dk/camelot64/kickc/model/FarSegment.java +++ b/src/main/java/dk/camelot64/kickc/model/FarSegment.java @@ -1,32 +1,43 @@ package dk.camelot64.kickc.model; -import dk.camelot64.kickc.model.symbols.Procedure; - -import java.util.List; - /** A far segment. */ public class FarSegment { - private String name; - private Integer bank; - private String call_prepare; - private String call_execute; - private String call_finalize; + private final String farSegment; + private Long farBank; + private final String procedurePrepare; + private final String procedureExecute; + private final String procedureFinalize; - public FarSegment(String name, Integer bank, String call_prepare, String call_execute, String call_finalize) { - this.name = name; - this.bank = bank; - this.call_prepare = call_prepare; - this.call_execute = call_execute; - this.call_finalize = call_finalize; + public FarSegment(String name, Long bank, String procedurePrepare, String procedureExecute, String procedureFinalize) { + this.farSegment = name; + this.farBank = bank; + this.procedurePrepare = procedurePrepare; + this.procedureExecute = procedureExecute; + this.procedureFinalize = procedureFinalize; } - public String getName() { - return name; + public String getFarSegment() { + return farSegment; } + public Long getFarBank() { + return farBank; + } - public Integer getBank() { - return bank; + public void setFarBank(Long farBank) { + this.farBank = farBank; + } + + public String getProcedurePrepare() { + return procedurePrepare; + } + + public String getProcedureExecute() { + return procedureExecute; + } + + public String getProcedureFinalize() { + return procedureFinalize; } } diff --git a/src/main/java/dk/camelot64/kickc/model/Program.java b/src/main/java/dk/camelot64/kickc/model/Program.java index bcd720852..898c50028 100644 --- a/src/main/java/dk/camelot64/kickc/model/Program.java +++ b/src/main/java/dk/camelot64/kickc/model/Program.java @@ -8,13 +8,11 @@ import dk.camelot64.kickc.model.statements.Statement; import dk.camelot64.kickc.model.symbols.ProgramScope; import dk.camelot64.kickc.model.values.LabelRef; import dk.camelot64.kickc.model.values.ProcedureRef; +import dk.camelot64.kickc.parser.KickCParser; import dk.camelot64.kickc.passes.calcs.*; import java.nio.file.Path; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** A KickC Intermediate Compiler Language (ICL) Program */ public class Program { @@ -107,6 +105,8 @@ public class Program { private NaturalLoopSet loopSet; /** The register weight of all variables describing how much the variable would theoretically gain from being in a register. PASS 3-5 (CACHED ON-DEMAND) */ private VariableRegisterWeights variableRegisterWeights; + /** All #pragma code segments. Collected during parsing. These are used by the far() pragmas to validate if the code segment exists during compilation.*/ + private final Map pragmaCodeSegs; public Program() { this.outputFileManager = new OutputFileManager(); @@ -119,6 +119,8 @@ public class Program { this.asmResourceFiles = new ArrayList<>(); this.reservedZps = new ArrayList<>(); this.procedureCompilations = new LinkedHashMap<>(); + this.pragmaCodeSegs = new HashMap<>(); // Used to collect all pragma code segments. + } /** @@ -539,4 +541,7 @@ public class Program { return sizeInfo.toString(); } + public Map getPragmaCodeSegs() { + return pragmaCodeSegs; + } } 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 7c375e71c..c1b761e7f 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -1,6 +1,7 @@ package dk.camelot64.kickc.model.symbols; import dk.camelot64.kickc.model.Comment; +import dk.camelot64.kickc.model.FarSegment; import dk.camelot64.kickc.model.Program; import dk.camelot64.kickc.model.statements.StatementSource; import dk.camelot64.kickc.model.types.SymbolType; @@ -27,8 +28,6 @@ public class Procedure extends Scope { private boolean declaredInline; /** true if the procedure is declared far. */ private boolean declaredFar; - /** contains the far bank. */ - private Long bankFar; /** 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. */ @@ -45,6 +44,9 @@ public class Procedure extends Scope { private boolean isConstructor; /** The source of the procedure definition. */ private StatementSource definitionSource; + /** The far segment information. Collected during parsing. These are used to compare with the current currentFarSegment to decide a near or a far call, and to keep inline calling routines.*/ + private FarSegment farSegment; + /** The names of all legal intrinsic procedures. */ final public static List INTRINSIC_PROCEDURES = Arrays.asList( @@ -54,10 +56,17 @@ public class Procedure extends Scope { Pass1ByteXIntrinsicRewrite.INTRINSIC_MAKELONG4 ); + public FarSegment getFarSegment() { + return farSegment; + } + + public void setFarSegment(FarSegment farSegment) { + this.farSegment = farSegment; + } + + /** The method for passing parameters and return value to the procedure. */ public enum CallingConvention { - /** Far call in a cx16 bank using the https://github.com/commanderx16/x16-docs/blob/master/X16%20Reference%20-%2004%20-%20KERNAL.md#function-name-jsrfar routine*/ - FAR_CALL("__far"), /** Parameters and return value handled through PHI-transitions. */ PHI_CALL("__phicall"), /** Parameters and return value over the stack. */ @@ -91,12 +100,11 @@ public class Procedure extends Scope { /** The calling convention used for this procedure. */ private CallingConvention callingConvention; - public Procedure(String name, SymbolTypeProcedure procedureType, Scope parentScope, String codeSegment, String dataSegment, CallingConvention callingConvention) { + public Procedure(String name, SymbolTypeProcedure procedureType, Scope parentScope, String codeSegment, String dataSegment, CallingConvention callingConvention, FarSegment farSegment) { super(name, parentScope, dataSegment); this.procedureType = procedureType; this.declaredInline = false; - this.declaredFar = false; - this.bankFar = 0L; + this.farSegment = farSegment; this.interruptType = null; this.comments = new ArrayList<>(); this.codeSegment = codeSegment; @@ -207,17 +215,14 @@ public class Procedure extends Scope { } public boolean isDeclaredFar() { - return declaredFar; + return farSegment != null; } - public void setDeclaredFar(boolean declaredFar) { - this.declaredFar = declaredFar; - } - - public Long getBankFar() { return this.bankFar; } - - public void setBankFar(Long bankFar) { - this.bankFar = bankFar; + public Long getFarBank() { + if(farSegment!=null) + return farSegment.getFarBank(); + else + return 0L; } public String getInterruptType() { diff --git a/src/main/java/dk/camelot64/kickc/parser/CParser.java b/src/main/java/dk/camelot64/kickc/parser/CParser.java index a01d0194a..806287556 100644 --- a/src/main/java/dk/camelot64/kickc/parser/CParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/CParser.java @@ -107,13 +107,13 @@ public class CParser { */ public static final String PRAGMA_RESOURCE = "resource"; /** - * #pragma far_seg(...) specifies the scope of the sequent functions to be far. Segments are defined in the linker file. + * #pragma far(...) specifies the scope of the sequent functions to be far. Segments are defined in the linker file. */ - public static final String PRAGMA_FAR_SEG = "far_seg"; + public static final String PRAGMA_FAR = "far"; /** - * #pragma near_seg specifies the scope of the sequent functions to be near. Segments are defined in the linker file. + * #pragma near specifies the scope of the sequent functions to be near. Segments are defined in the linker file. */ - public static final String PRAGMA_NEAR_SEG = "near_seg"; + public static final String PRAGMA_NEAR = "near"; /** * The Program. diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 67f93854c..00cde33d7 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -43,10 +43,6 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor scopeStack; /** All #pragma constructor_for() statements. Collected during parsing and handled by {@link #generate()} before returning. */ private final List pragmaConstructorFors; - /** All #pragma code segments. Collected during parsing. These are used by the far_seg pragmas to validate if the code segment exists during compilation.*/ - private final Map pragmaCodeSegs; - /** All #pragma far segments. Collected during parsing. These are used to compare with the current currentFarSegment to decide a near or a far call, and to keep inline calling routines.*/ - private final Map pragmaFarSegs; public Pass0GenerateStatementSequence(CParser cParser, KickCParser.FileContext fileCtx, Program program, Procedure.CallingConvention initialCallingConvention, StringEncoding defaultEncoding, String defaultInterruptType) { @@ -57,8 +53,6 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor(); // Used to collect all pragma code segments. - this.pragmaFarSegs = new HashMap<>(); // Used to collect all pragma far segments. this.currentInterruptType = defaultInterruptType; scopeStack.push(program.getScope()); } @@ -137,7 +131,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor()), program.getScope(), Scope.SEGMENT_CODE_DEFAULT, Scope.SEGMENT_DATA_DEFAULT, Procedure.CallingConvention.PHI_CALL); + initProc = new Procedure(SymbolRef.INIT_PROC_NAME, new SymbolTypeProcedure(SymbolType.VOID, new ArrayList<>()), program.getScope(), Scope.SEGMENT_CODE_DEFAULT, Scope.SEGMENT_DATA_DEFAULT, Procedure.CallingConvention.PHI_CALL, null); initProc.setDeclaredInline(true); initProc.setParameters(new ArrayList<>()); program.getScope().add(initProc); @@ -194,7 +188,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor()), program.getScope(), Scope.SEGMENT_CODE_DEFAULT, Scope.SEGMENT_DATA_DEFAULT, Procedure.CallingConvention.PHI_CALL); + final Procedure startProcedure = new Procedure(SymbolRef.START_PROC_NAME, new SymbolTypeProcedure(SymbolType.VOID, new ArrayList<>()), program.getScope(), Scope.SEGMENT_CODE_DEFAULT, Scope.SEGMENT_DATA_DEFAULT, Procedure.CallingConvention.PHI_CALL, null); startProcedure.setParameters(new ArrayList<>()); program.getScope().add(startProcedure); final ProcedureCompilation startProcedureCompilation = program.createProcedureCompilation(startProcedure.getRef()); @@ -296,27 +290,24 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor 7) { - final String call_prepare = pragmaParamName(ctx.pragmaParam(2)); - final String call_execute = pragmaParamName(ctx.pragmaParam(3)); - final String call_finalize = pragmaParamName(ctx.pragmaParam(4)); - this.pragmaFarSegs.put(this.currentFarSegment, new FarSegment(pragmaFarSegment, pragmaFarBank.intValue(), call_prepare, call_execute, call_finalize)); - } else { - this.pragmaFarSegs.put(this.currentFarSegment, new FarSegment(pragmaFarSegment, pragmaFarBank.intValue(), "", "", "")); - } + if (size > 7) { + final String call_prepare = pragmaParamName(ctx.pragmaParam(2)); + final String call_execute = pragmaParamName(ctx.pragmaParam(3)); + final String call_finalize = pragmaParamName(ctx.pragmaParam(4)); + this.currentFarSegment = new FarSegment(pragmaFarSegment, pragmaFarBank.longValue(), call_prepare, call_execute, call_finalize); + } else { + this.currentFarSegment = new FarSegment(pragmaFarSegment, pragmaFarBank.longValue(), "", "", ""); } } else { throw new CompileError("Expected at least 2 pragma parameters. Found '" + ctx.getText() + "'.", new StatementSource(ctx)); @@ -325,8 +316,8 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor 1) { - bankFar = Long.valueOf(ctx.getChild(2).getText()); - } else { - bankFar = 0L; + String farSegmentName = ""; + Long farSegmentBank = 0L; + String farProcedurePrepare = null; + String farProcedureExecute = null; + String farProcedureFinalize = null; + if(this.currentFarSegment != null) { + farSegmentName = this.currentFarSegment.getFarSegment(); + farSegmentBank = this.currentFarSegment.getFarBank(); + farProcedurePrepare = this.currentFarSegment.getProcedurePrepare(); + farProcedureExecute = this.currentFarSegment.getProcedureExecute(); + farProcedureFinalize = this.currentFarSegment.getProcedureFinalize(); } - return new Directive.Far(bankFar); + + if(ctx.getChildCount() >= 5) { + farSegmentName = ctx.getChild(2).getText(); + farSegmentBank = Long.valueOf(ctx.getChild(4).getText()); + } + + if(ctx.getChildCount() == 11) { + farProcedurePrepare = ctx.getChild(6).getText(); + farProcedureExecute = ctx.getChild(8).getText(); + farProcedureFinalize = ctx.getChild(10).getText(); + } + + return new Directive.Far(farSegmentName, farSegmentBank, farProcedurePrepare, farProcedureExecute, farProcedureFinalize); } @Override @@ -2539,7 +2548,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor__start::@1] + // __start::@1 + // [3] callexecute main -- call_vprc1 + jsr main + // __start::@return + // [4] return + rts +} + // printother +printother: { + .label i = 2 + // [6] phi from printother to printother::@1 [phi:printother->printother::@1] + // [6] phi printother::i#2 = 0 [phi:printother->printother::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + // [6] phi from printother::@1 to printother::@1 [phi:printother::@1->printother::@1] + // [6] phi printother::i#2 = printother::i#1 [phi:printother::@1->printother::@1#0] -- register_copy + // printother::@1 + __b1: + // (SCREEN+40)[i]++; + // [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] -- pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 + ldx.z i + inc SCREEN+$28,x + // for(char i:0..5) + // [8] printother::i#1 = ++ printother::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [9] if(printother::i#1!=6) goto printother::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #6 + cmp.z i + bne __b1 + // printother::@return + // } + // [10] return + rts +} + // incval +incval: { + // val++; + // [11] val = ++ val -- vbuz1=_inc_vbuz1 + inc.z val + // incval::@return + // } + // [12] return + rts +} + // printval +printval: { + // SCREEN[0] = val + // [13] *SCREEN = val -- _deref_pbuc1=vbuz1 + lda.z val + sta SCREEN + // printval::@return + // } + // [14] return + rts +} + // ival +ival: { + // incval() + // [16] callexecute incval -- call_far_cx16_exit + jsr $ff6e + .byte incval + .byte $15 + // ival::@return + // } + // [17] return + rts +} + // pval +pval: { + // printval() + // [19] callexecute printval -- call_far_cx16_exit + jsr $ff6e + .byte printval + .byte $14 + // pval::@return + // } + // [20] return + rts +} + // main +main: { + .label i = 4 + // [22] phi from main to main::@1 [phi:main->main::@1] + // [22] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + // [22] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [22] phi main::i#2 = main::i#1 [phi:main::@1->main::@1#0] -- register_copy + // main::@1 + __b1: + // pval() + // [23] callexecute pval -- call_far_cx16_exit + jsr $ff6e + .byte pval + .byte $14 + // printother() + // [24] callexecute printother -- call_vprc1 + jsr printother + // ival() + // [25] callexecute ival -- call_far_cx16_exit + jsr $ff6e + .byte ival + .byte $15 + // for(char i:0..5) + // [26] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [27] if(main::i#1!=6) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #6 + cmp.z i + bne __b1 + // main::@return + // } + // [28] return + rts +} + // File Data diff --git a/src/test/target/procedure-callingconvention-stack-far-3.dbg b/src/test/target/procedure-callingconvention-stack-far-3.dbg new file mode 100644 index 000000000..51e9414f5 --- /dev/null +++ b/src/test/target/procedure-callingconvention-stack-far-3.dbg @@ -0,0 +1,153 @@ + + + 0,KickAss.jar:/include/autoinclude.asm + 1,D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\target\procedure-callingconvention-stack-far-3.asm + + + + + + + + $0801,$0802,0,38,2,38,6 + $0803,$0804,0,39,5,39,9 + $0805,$0805,0,40,5,40,9 + $0806,$0809,0,41,2,41,6 + $080a,$080a,0,42,2,42,6 + $080b,$080c,0,44,5,44,9 + + + $080d,$080e,1,23,5,23,7 + $080f,$0810,1,24,5,24,7 + $0811,$0813,1,28,5,28,7 + $0814,$0814,1,31,5,31,7 + $0815,$0816,1,38,5,38,7 + $0817,$0818,1,39,5,39,7 + $0819,$081a,1,46,5,46,7 + $081b,$081d,1,47,5,47,7 + $081e,$081f,1,50,5,50,7 + $0820,$0821,1,52,5,52,7 + $0822,$0823,1,53,5,53,7 + $0824,$0825,1,54,5,54,7 + $0826,$0826,1,58,5,58,7 + $0827,$0828,1,64,5,64,7 + $0829,$0829,1,68,5,68,7 + $082a,$082b,1,74,5,74,7 + $082c,$082e,1,75,5,75,7 + $082f,$082f,1,79,5,79,7 + $0830,$0832,1,85,5,85,7 + $0833,$0833,1,86,5,86,9 + $0834,$0834,1,87,5,87,9 + $0835,$0835,1,88,5,88,9 + $0836,$0836,1,92,5,92,7 + $0837,$0839,1,98,5,98,7 + $083a,$083a,1,99,5,99,9 + $083b,$083b,1,100,5,100,9 + $083c,$083c,1,101,5,101,9 + $083d,$083d,1,105,5,105,7 + $083e,$083f,1,112,5,112,7 + $0840,$0841,1,113,5,113,7 + $0842,$0844,1,120,5,120,7 + $0845,$0845,1,121,5,121,9 + $0846,$0846,1,122,5,122,9 + $0847,$0847,1,123,5,123,9 + $0848,$084a,1,126,5,126,7 + $084b,$084d,1,129,5,129,7 + $084e,$084e,1,130,5,130,9 + $084f,$084f,1,131,5,131,9 + $0850,$0850,1,132,5,132,9 + $0851,$0852,1,135,5,135,7 + $0853,$0854,1,137,5,137,7 + $0855,$0856,1,138,5,138,7 + $0857,$0858,1,139,5,139,7 + $0859,$0859,1,143,5,143,7 + + + + + + $0801,$0802,0,38,2,38,6 + $0803,$0804,0,39,5,39,9 + $0805,$0805,0,40,5,40,9 + $0806,$0809,0,41,2,41,6 + $080a,$080a,0,42,2,42,6 + $080b,$080c,0,44,5,44,9 + + + + + + $080d,$080e,1,23,5,23,7 + $080f,$0810,1,24,5,24,7 + $0811,$0813,1,28,5,28,7 + $0814,$0814,1,31,5,31,7 + $0815,$0816,1,38,5,38,7 + $0817,$0818,1,39,5,39,7 + $0819,$081a,1,46,5,46,7 + $081b,$081d,1,47,5,47,7 + $081e,$081f,1,50,5,50,7 + $0820,$0821,1,52,5,52,7 + $0822,$0823,1,53,5,53,7 + $0824,$0825,1,54,5,54,7 + $0826,$0826,1,58,5,58,7 + $0827,$0828,1,64,5,64,7 + $0829,$0829,1,68,5,68,7 + $082a,$082b,1,74,5,74,7 + $082c,$082e,1,75,5,75,7 + $082f,$082f,1,79,5,79,7 + $0830,$0832,1,85,5,85,7 + $0833,$0833,1,86,5,86,9 + $0834,$0834,1,87,5,87,9 + $0835,$0835,1,88,5,88,9 + $0836,$0836,1,92,5,92,7 + $0837,$0839,1,98,5,98,7 + $083a,$083a,1,99,5,99,9 + $083b,$083b,1,100,5,100,9 + $083c,$083c,1,101,5,101,9 + $083d,$083d,1,105,5,105,7 + $083e,$083f,1,112,5,112,7 + $0840,$0841,1,113,5,113,7 + $0842,$0844,1,120,5,120,7 + $0845,$0845,1,121,5,121,9 + $0846,$0846,1,122,5,122,9 + $0847,$0847,1,123,5,123,9 + $0848,$084a,1,126,5,126,7 + $084b,$084d,1,129,5,129,7 + $084e,$084e,1,130,5,130,9 + $084f,$084f,1,131,5,131,9 + $0850,$0850,1,132,5,132,9 + $0851,$0852,1,135,5,135,7 + $0853,$0854,1,137,5,137,7 + $0855,$0856,1,138,5,138,7 + $0857,$0858,1,139,5,139,7 + $0859,$0859,1,143,5,143,7 + + + + + + + + Basic,$0400,SCREEN,1,15,10,15,15 + Basic,$0003,val,1,16,10,16,12 + Code,$080d,__start,1,19,1,19,8 + Code,$0815,printother,1,34,1,34,11 + Code,$0002,i,1,35,12,35,12 + Code,$0819,__b1,1,43,3,43,7 + Code,$0827,incval,1,61,1,61,7 + Code,$082a,printval,1,71,1,71,9 + Code,$0830,ival,1,82,1,82,5 + Code,$0837,pval,1,95,1,95,5 + Code,$083e,main,1,108,1,108,5 + Code,$0004,i,1,109,12,109,12 + Code,$0842,__b1,1,117,3,117,7 + Basic,$080b,upstartEnd,0,43,1,43,11 + + + + + + + + + diff --git a/src/test/target/procedure-callingconvention-stack-far-3.klog b/src/test/target/procedure-callingconvention-stack-far-3.klog new file mode 100644 index 000000000..351cd59e1 --- /dev/null +++ b/src/test/target/procedure-callingconvention-stack-far-3.klog @@ -0,0 +1,22 @@ +Output dir: D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\target +parsing +flex pass 1 +flex pass 2 +flex pass 3 +Output pass +Writing prg file: procedure-callingconvention-stack-far-3.prg + +Memory Map +---------- +Program-segment: + +Basic-segment: + $0801-$080c Basic + +Code-segment: + $080d-$0859 Code + +Data-segment: + +Writing Vice symbol file: procedure-callingconvention-stack-far-3.vs +Writing Symbol file: procedure-callingconvention-stack-far-3.sym diff --git a/src/test/target/procedure-callingconvention-stack-far-3.prg b/src/test/target/procedure-callingconvention-stack-far-3.prg new file mode 100644 index 0000000000000000000000000000000000000000..fe3b357eefd982f66c8bec64d2852942552d46a9 GIT binary patch literal 91 zcmZSN;O5|Bm}g{QX2`(6u#%ybS;3AY0Z20~WBRAT@{DOE+fk+qpA()jCoE;|Wnf8A m$osF(Aqt|jI7C1SS%6G)4iN=W4j{vTL-ZL7Pz%e2mk9uPR2%XD literal 0 HcmV?d00001 diff --git a/src/test/target/procedure-callingconvention-stack-far-3.sym b/src/test/target/procedure-callingconvention-stack-far-3.sym new file mode 100644 index 000000000..f1267c367 --- /dev/null +++ b/src/test/target/procedure-callingconvention-stack-far-3.sym @@ -0,0 +1,20 @@ +.label val=$3 +.label SCREEN=$400 +.label __start=$80d { +} +.label pval=$837 { +} +.label ival=$830 { +} +.label incval=$827 { +} +.label main=$83e { + .label __b1=$842 + .label i=$4 +} +.label printother=$815 { + .label __b1=$819 + .label i=$2 +} +.label printval=$82a { +} diff --git a/src/test/target/procedure-callingconvention-stack-far-3.vs b/src/test/target/procedure-callingconvention-stack-far-3.vs new file mode 100644 index 000000000..2787fc577 --- /dev/null +++ b/src/test/target/procedure-callingconvention-stack-far-3.vs @@ -0,0 +1,14 @@ +al C:3 .val +al C:819 .__b1__0 +al C:842 .__b1__1 +al C:400 .SCREEN +al C:80d .__start +al C:837 .pval +al C:2 .i__0 +al C:4 .i__1 +al C:830 .ival +al C:80b .upstartEnd +al C:827 .incval +al C:83e .main +al C:815 .printother +al C:82a .printval From db49ca6aabe96f0ca9ec355f33a4fadf33324f93 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Mon, 21 Nov 2022 18:17:35 +0100 Subject: [PATCH 11/66] Major changes: - Renamed #pragma far() to #pragma bank() upon design recommendations of @jesper. - renamed #pragma near to #pragma nobank, to avoid using bank(-1). - renamed __far directive to __bank directive. - introduced bank area upon design recommendation of jesper, and replaced this with the already present code segment linkage to banking. So the structured stayed the same, only the naming changed! This unlink from segment indeed makes things easier when no segments are in scope of the program. - added bank area as part of the fragment signature, so now call_far_[platform]_[bankarea]_prepare.asm, call_far_[platform]_[bankarea]_execute.asm, call_far_[platform]_[bankarea]_finalize.asm are expected to be present in the compiler. - removed the c code prepare, execute, finalize idea. The fragments seem to be enough for the moment. - added ram and rom fragments for far calls for the cx16. - Cleaned banking logic from Statement level. --- .../dk/camelot64/kickc/parser/KickCLexer.g4 | 3 +- .../dk/camelot64/kickc/parser/KickCParser.g4 | 2 +- .../mos6502-common/call_far_cx16_execute.asm | 4 - .../call_far_cx16_ram_execute.asm | 4 + ...ize.asm => call_far_cx16_ram_finalize.asm} | 0 ...pare.asm => call_far_cx16_ram_prepare.asm} | 0 .../call_far_cx16_rom_execute.asm | 4 + .../call_far_cx16_rom_finalize.asm | 0 .../call_far_cx16_rom_prepare.asm | 0 .../AsmFragmentInstanceSpecBuilder.java | 35 ++++---- .../signature/AsmFragmentSignature.java | 18 +++-- .../java/dk/camelot64/kickc/model/Bank.java | 25 ++++++ .../dk/camelot64/kickc/model/Directive.java | 43 +++------- .../dk/camelot64/kickc/model/FarSegment.java | 43 ---------- .../dk/camelot64/kickc/model/Program.java | 2 +- .../kickc/model/statements/StatementCall.java | 8 -- .../statements/StatementCallExecute.java | 4 - .../kickc/model/symbols/Procedure.java | 43 +++++----- .../camelot64/kickc/model/symbols/Scope.java | 4 +- .../dk/camelot64/kickc/parser/CParser.java | 8 +- .../Pass0GenerateStatementSequence.java | 80 +++++++------------ .../kickc/passes/Pass1ProcedureFar.java | 71 ---------------- .../kickc/passes/Pass4CodeGeneration.java | 46 +++++------ ... procedure-callingconvention-phi-bank-0.c} | 2 +- ... procedure-callingconvention-phi-bank-1.c} | 18 +---- ... procedure-callingconvention-phi-bank-2.c} | 17 +--- .../procedure-callingconvention-phi-bank-3.c | 14 ++++ ... procedure-callingconvention-phi-bank-4.c} | 4 +- ... procedure-callingconvention-phi-bank-5.c} | 12 +-- .../procedure-callingconvention-phi-far-2.c | 30 ------- ...rocedure-callingconvention-stack-bank-0.c} | 2 +- ...rocedure-callingconvention-stack-bank-1.c} | 2 +- ...rocedure-callingconvention-stack-bank-2.c} | 2 +- ...rocedure-callingconvention-stack-bank-3.c} | 10 +-- ...rocedure-callingconvention-stack-bank-4.c} | 4 +- ...rocedure-callingconvention-stack-bank-5.c} | 2 +- 36 files changed, 191 insertions(+), 375 deletions(-) delete mode 100644 src/main/fragment/mos6502-common/call_far_cx16_execute.asm create mode 100644 src/main/fragment/mos6502-common/call_far_cx16_ram_execute.asm rename src/main/fragment/mos6502-common/{call_far_cx16_finalize.asm => call_far_cx16_ram_finalize.asm} (100%) rename src/main/fragment/mos6502-common/{call_far_cx16_prepare.asm => call_far_cx16_ram_prepare.asm} (100%) create mode 100644 src/main/fragment/mos6502-common/call_far_cx16_rom_execute.asm create mode 100644 src/main/fragment/mos6502-common/call_far_cx16_rom_finalize.asm create mode 100644 src/main/fragment/mos6502-common/call_far_cx16_rom_prepare.asm create mode 100644 src/main/java/dk/camelot64/kickc/model/Bank.java delete mode 100644 src/main/java/dk/camelot64/kickc/model/FarSegment.java delete mode 100644 src/main/java/dk/camelot64/kickc/passes/Pass1ProcedureFar.java rename src/test/kc/{procedure-callingconvention-phi-far-0.c => procedure-callingconvention-phi-bank-0.c} (80%) rename src/test/kc/{procedure-callingconvention-phi-far-1.c => procedure-callingconvention-phi-bank-1.c} (54%) rename src/test/kc/{procedure-callingconvention-phi-far-3.c => procedure-callingconvention-phi-bank-2.c} (55%) create mode 100644 src/test/kc/procedure-callingconvention-phi-bank-3.c rename src/test/kc/{procedure-callingconvention-phi-far-4.c => procedure-callingconvention-phi-bank-4.c} (85%) rename src/test/kc/{procedure-callingconvention-phi-far-5.c => procedure-callingconvention-phi-bank-5.c} (92%) delete mode 100644 src/test/kc/procedure-callingconvention-phi-far-2.c rename src/test/kc/{procedure-callingconvention-stack-far-0.c => procedure-callingconvention-stack-bank-0.c} (76%) rename src/test/kc/{procedure-callingconvention-stack-far-1.c => procedure-callingconvention-stack-bank-1.c} (82%) rename src/test/kc/{procedure-callingconvention-stack-far-2.c => procedure-callingconvention-stack-bank-2.c} (86%) rename src/test/kc/{procedure-callingconvention-stack-far-3.c => procedure-callingconvention-stack-bank-3.c} (80%) rename src/test/kc/{procedure-callingconvention-stack-far-4.c => procedure-callingconvention-stack-bank-4.c} (84%) rename src/test/kc/{procedure-callingconvention-stack-far-5.c => procedure-callingconvention-stack-bank-5.c} (84%) diff --git a/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 b/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 index f784b250e..98ef7914a 100644 --- a/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 +++ b/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 @@ -75,8 +75,7 @@ LOCAL_RESERVE: '__zp_reserve' ; ADDRESS: '__address' ; ADDRESS_ZEROPAGE: '__zp' ; ADDRESS_MAINMEM: '__mem' ; -FAR: '__far' ; -NEAR: '__near' ; +BANK: '__bank' ; FORM_SSA: '__ssa' ; FORM_MA: '__ma' ; INTRINSIC: '__intrinsic' ; diff --git a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 index 070ecaee8..50b509cdf 100644 --- a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 +++ b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 @@ -162,7 +162,7 @@ directive | EXTERN #directiveExtern | EXPORT #directiveExport | INLINE #directiveInline - | FAR PAR_BEGIN NAME COMMA NUMBER (COMMA NAME COMMA NAME COMMA NAME)? PAR_END #directiveFar + | BANK PAR_BEGIN NAME COMMA NUMBER (COMMA NAME COMMA NAME COMMA NAME)? PAR_END #directiveBank | INTRINSIC #directiveIntrinsic | INTERRUPT ( PAR_BEGIN NAME PAR_END )? #directiveInterrupt | LOCAL_RESERVE PAR_BEGIN pragmaParam ( COMMA pragmaParam )* PAR_END #directiveReserveZp diff --git a/src/main/fragment/mos6502-common/call_far_cx16_execute.asm b/src/main/fragment/mos6502-common/call_far_cx16_execute.asm deleted file mode 100644 index 661d162d6..000000000 --- a/src/main/fragment/mos6502-common/call_far_cx16_execute.asm +++ /dev/null @@ -1,4 +0,0 @@ -jsr $FF6E // https://github.com/commanderx16/x16-docs/blob/master/X16%20Reference%20-%2004%20-%20KERNAL.md#function-name-jsrfar -.byte <{la1} -.byte >{la1} -.byte {c1} diff --git a/src/main/fragment/mos6502-common/call_far_cx16_ram_execute.asm b/src/main/fragment/mos6502-common/call_far_cx16_ram_execute.asm new file mode 100644 index 000000000..d316eb072 --- /dev/null +++ b/src/main/fragment/mos6502-common/call_far_cx16_ram_execute.asm @@ -0,0 +1,4 @@ +jsr $FFE6 +.byte <{la1} +.byte >{la1} +.byte {c1} diff --git a/src/main/fragment/mos6502-common/call_far_cx16_finalize.asm b/src/main/fragment/mos6502-common/call_far_cx16_ram_finalize.asm similarity index 100% rename from src/main/fragment/mos6502-common/call_far_cx16_finalize.asm rename to src/main/fragment/mos6502-common/call_far_cx16_ram_finalize.asm diff --git a/src/main/fragment/mos6502-common/call_far_cx16_prepare.asm b/src/main/fragment/mos6502-common/call_far_cx16_ram_prepare.asm similarity index 100% rename from src/main/fragment/mos6502-common/call_far_cx16_prepare.asm rename to src/main/fragment/mos6502-common/call_far_cx16_ram_prepare.asm diff --git a/src/main/fragment/mos6502-common/call_far_cx16_rom_execute.asm b/src/main/fragment/mos6502-common/call_far_cx16_rom_execute.asm new file mode 100644 index 000000000..d316eb072 --- /dev/null +++ b/src/main/fragment/mos6502-common/call_far_cx16_rom_execute.asm @@ -0,0 +1,4 @@ +jsr $FFE6 +.byte <{la1} +.byte >{la1} +.byte {c1} diff --git a/src/main/fragment/mos6502-common/call_far_cx16_rom_finalize.asm b/src/main/fragment/mos6502-common/call_far_cx16_rom_finalize.asm new file mode 100644 index 000000000..e69de29bb diff --git a/src/main/fragment/mos6502-common/call_far_cx16_rom_prepare.asm b/src/main/fragment/mos6502-common/call_far_cx16_rom_prepare.asm new file mode 100644 index 000000000..e69de29bb diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java index c39c919d9..859f55804 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java @@ -42,54 +42,55 @@ final public class AsmFragmentInstanceSpecBuilder { } /** - * Create a fragment instance spec factory for a far call prepare + * Create a fragment instance spec factory for a bank call prepare * - * @param bankFar The bank where the procedure is to be called. + * @param bankArea The bank area where the procedure is to be called. + * @param bank The bank where the procedure is to be called. * @param procedureName The full name of the procedure. * @param program The program * @return the fragment instance spec factory */ - public static AsmFragmentInstanceSpec farCallPrepare(Long bankFar, String procedureName, Program program) { + public static AsmFragmentInstanceSpec bankCallPrepare(String bankArea, Long bank, String procedureName, Program program) { AsmFragmentBindings bindings = new AsmFragmentBindings(program); - AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(bankFar, program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.PrepareExecuteFinalize.Prepare); + AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked(bankArea, bank, program.getTargetPlatform().getName(), AsmFragmentSignature.CallBanked.PrepareExecuteFinalize.Prepare); ScopeRef codeScope = program.getScope().getRef(); -// ScopeRef codeScope = program.getStatementInfos().getBlock(call).getScope(); - bindings.bind("c1", new ConstantInteger(bankFar)); + bindings.bind("c1", new ConstantInteger(bank)); bindings.bind("la1", new LabelRef(procedureName)); return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); } /** - * Create a fragment instance spec factory for a far call execute + * Create a fragment instance spec factory for a bank call execute * - * @param bankFar The bank where the procedure is to be called. + * @param bankArea The bank area where the procedure is to be called. + * @param bank The bank where the procedure is to be called. * @param procedureName The full name of the procedure. * @param program The program * @return the fragment instance spec factory */ - public static AsmFragmentInstanceSpec farCallExecute(Long bankFar, String procedureName, Program program) { + public static AsmFragmentInstanceSpec bankCallExecute(String bankArea, Long bank, String procedureName, Program program) { AsmFragmentBindings bindings = new AsmFragmentBindings(program); - AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(bankFar, program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.PrepareExecuteFinalize.Execute); + AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked(bankArea, bank, program.getTargetPlatform().getName(), AsmFragmentSignature.CallBanked.PrepareExecuteFinalize.Execute); ScopeRef codeScope = program.getScope().getRef(); -// ScopeRef codeScope = program.getStatementInfos().getBlock(call).getScope(); - bindings.bind("c1", new ConstantInteger(bankFar)); + bindings.bind("c1", new ConstantInteger(bank)); bindings.bind("la1", new LabelRef(procedureName)); return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); } /** - * Create a fragment instance spec factory for a far call finalize + * Create a fragment instance spec factory for a bank call finalize * - * @param bankFar The bank where the procedure is to be called. + * @param bankArea The bank area where the procedure is to be called. + * @param bank The bank where the procedure is to be called. * @param procedureName The full name of the procedure. * @param program The program * @return the fragment instance spec factory */ - public static AsmFragmentInstanceSpec farCallFinalize(Long bankFar, String procedureName, Program program) { + public static AsmFragmentInstanceSpec bankCallFinalize(String bankArea, Long bank, String procedureName, Program program) { AsmFragmentBindings bindings = new AsmFragmentBindings(program); - AsmFragmentSignature signature = new AsmFragmentSignature.CallFar(bankFar, program.getTargetPlatform().getName(), AsmFragmentSignature.CallFar.PrepareExecuteFinalize.Finalize); + AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked(bankArea, bank, program.getTargetPlatform().getName(), AsmFragmentSignature.CallBanked.PrepareExecuteFinalize.Finalize); ScopeRef codeScope = program.getScope().getRef(); - bindings.bind("c1", new ConstantInteger(bankFar)); + bindings.bind("c1", new ConstantInteger(bank)); bindings.bind("la1", new LabelRef(procedureName)); return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); } diff --git a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java index 45a2689e7..456864880 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java +++ b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java @@ -71,11 +71,12 @@ public interface AsmFragmentSignature { } /** - * ASM fragment signature for a far jsr if(A) goto B. + * ASM fragment signature for a banked jsr if(A) goto B. */ - class CallFar implements AsmFragmentSignature { + class CallBanked implements AsmFragmentSignature { - final private Long bankFar; + final private String bankArea; + final private Long bank; final private String targetPlatform; public enum PrepareExecuteFinalize { @@ -84,18 +85,19 @@ public interface AsmFragmentSignature { Finalize } - final private PrepareExecuteFinalize far; + final private PrepareExecuteFinalize fragment; - public CallFar(Long bankFar, String targetPlatform, PrepareExecuteFinalize far) { - this.bankFar = bankFar; + public CallBanked(String bankArea, Long bank, String targetPlatform, PrepareExecuteFinalize fragment) { + this.bankArea = bankArea; + this.bank = bank; this.targetPlatform = targetPlatform; - this.far = far; + this.fragment = fragment; } @Override public String getName() { - return "call_far" + "_" + targetPlatform + "_" + far.name().toLowerCase(); + return "call_far" + "_" + targetPlatform.toLowerCase() + "_" + bankArea.toLowerCase() + "_" + fragment.name().toLowerCase(); } } diff --git a/src/main/java/dk/camelot64/kickc/model/Bank.java b/src/main/java/dk/camelot64/kickc/model/Bank.java new file mode 100644 index 000000000..99220e7f4 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/model/Bank.java @@ -0,0 +1,25 @@ +package dk.camelot64.kickc.model; + +/** A Bank segment. */ +public class Bank { + + private final String bankArea; + private Long bank; + + public Bank(String bankArea, Long bank) { + this.bankArea = bankArea; + this.bank = bank; + } + + public String getBankArea() { + return bankArea; + } + + public Long getBank() { + return bank; + } + + public void setBank(Long bank) { + this.bank = bank; + } +} diff --git a/src/main/java/dk/camelot64/kickc/model/Directive.java b/src/main/java/dk/camelot64/kickc/model/Directive.java index e155d5587..fe4728cb7 100644 --- a/src/main/java/dk/camelot64/kickc/model/Directive.java +++ b/src/main/java/dk/camelot64/kickc/model/Directive.java @@ -43,43 +43,24 @@ public class Directive { public Inline() { super("inline"); } } - /** Function declared far. */ - static public class Far extends Directive { + /** Function declared banked. */ + static public class Bank extends Directive { - private String farSegmentName; - private Long farSegmentBank; - private String farProcedurePrepare; - private String farProcedureExecute; - private String farProcedureFinalize; + private String bankArea; + private Long bank; - - public Far(String farSegmentName, Long farSegmentBank, String farProcedurePrepare, String farProcedureExecute, String farProcedureFinalize) { - super("far" ); - this.farSegmentName = farSegmentName; - this.farSegmentBank = farSegmentBank; - this.farProcedurePrepare = farProcedurePrepare; - this.farProcedureExecute = farProcedureExecute; - this.farProcedureFinalize = farProcedureFinalize; + public Bank(String bankArea, Long bank) { + super("bank" ); + this.bankArea = bankArea; + this.bank = bank; } - public String getFarSegmentName() { - return farSegmentName; + public String getBankArea() { + return bankArea; } - public Long getFarSegmentBank() { - return farSegmentBank; - } - - public String getFarProcedurePrepare() { - return farProcedurePrepare; - } - - public String getFarProcedureExecute() { - return farProcedureExecute; - } - - public String getFarProcedureFinalize() { - return farProcedureFinalize; + public Long getBank() { + return bank; } } diff --git a/src/main/java/dk/camelot64/kickc/model/FarSegment.java b/src/main/java/dk/camelot64/kickc/model/FarSegment.java deleted file mode 100644 index 18f8dd976..000000000 --- a/src/main/java/dk/camelot64/kickc/model/FarSegment.java +++ /dev/null @@ -1,43 +0,0 @@ -package dk.camelot64.kickc.model; - -/** A far segment. */ -public class FarSegment { - - private final String farSegment; - private Long farBank; - private final String procedurePrepare; - private final String procedureExecute; - private final String procedureFinalize; - - public FarSegment(String name, Long bank, String procedurePrepare, String procedureExecute, String procedureFinalize) { - this.farSegment = name; - this.farBank = bank; - this.procedurePrepare = procedurePrepare; - this.procedureExecute = procedureExecute; - this.procedureFinalize = procedureFinalize; - } - - public String getFarSegment() { - return farSegment; - } - - public Long getFarBank() { - return farBank; - } - - public void setFarBank(Long farBank) { - this.farBank = farBank; - } - - public String getProcedurePrepare() { - return procedurePrepare; - } - - public String getProcedureExecute() { - return procedureExecute; - } - - public String getProcedureFinalize() { - return procedureFinalize; - } -} diff --git a/src/main/java/dk/camelot64/kickc/model/Program.java b/src/main/java/dk/camelot64/kickc/model/Program.java index 898c50028..000cad6bd 100644 --- a/src/main/java/dk/camelot64/kickc/model/Program.java +++ b/src/main/java/dk/camelot64/kickc/model/Program.java @@ -105,7 +105,7 @@ public class Program { private NaturalLoopSet loopSet; /** The register weight of all variables describing how much the variable would theoretically gain from being in a register. PASS 3-5 (CACHED ON-DEMAND) */ private VariableRegisterWeights variableRegisterWeights; - /** All #pragma code segments. Collected during parsing. These are used by the far() pragmas to validate if the code segment exists during compilation.*/ + /** All #pragma code segments. Collected during parsing. These are used by the bank() pragmas to validate if the code segment exists during compilation.*/ private final Map pragmaCodeSegs; public Program() { diff --git a/src/main/java/dk/camelot64/kickc/model/statements/StatementCall.java b/src/main/java/dk/camelot64/kickc/model/statements/StatementCall.java index 5c941f835..db5563d05 100644 --- a/src/main/java/dk/camelot64/kickc/model/statements/StatementCall.java +++ b/src/main/java/dk/camelot64/kickc/model/statements/StatementCall.java @@ -28,8 +28,6 @@ public class StatementCall extends StatementBase implements StatementLValue, Sta private List parameters; /** This is the initial assignment of the lValue. */ private boolean initialAssignment; - /** This contains the far call parameters */ - private Long bankFar; public StatementCall(LValue lValue, String procedureName, List parameters, StatementSource source, List comments) { super(source, comments); @@ -66,12 +64,6 @@ public class StatementCall extends StatementBase implements StatementLValue, Sta this.parameters = parameters; } - public void setBankFar(Long bankFar) { - this.bankFar = bankFar; - } - - public Long getBankFar() { return this.bankFar; } - public int getNumParameters() { return parameters.size(); } diff --git a/src/main/java/dk/camelot64/kickc/model/statements/StatementCallExecute.java b/src/main/java/dk/camelot64/kickc/model/statements/StatementCallExecute.java index 620491ecb..f1f54fe05 100644 --- a/src/main/java/dk/camelot64/kickc/model/statements/StatementCallExecute.java +++ b/src/main/java/dk/camelot64/kickc/model/statements/StatementCallExecute.java @@ -28,15 +28,11 @@ public class StatementCallExecute extends StatementBase implements StatementCall /** The calling convention to use. */ private Procedure.CallingConvention callingConvention; - /** This contains the far call parameters */ - private Long bankFar; - public StatementCallExecute(SymbolTypeProcedure procedureType, RValue procedure, Procedure.CallingConvention callingConvention, StatementSource source, List comments) { super(source, comments); this.procedureType = procedureType; this.procedure = procedure; this.callingConvention = callingConvention; - this.bankFar = bankFar; } public SymbolTypeProcedure getProcedureType() { 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 c1b761e7f..49f9854fa 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -1,7 +1,7 @@ package dk.camelot64.kickc.model.symbols; import dk.camelot64.kickc.model.Comment; -import dk.camelot64.kickc.model.FarSegment; +import dk.camelot64.kickc.model.Bank; import dk.camelot64.kickc.model.Program; import dk.camelot64.kickc.model.statements.StatementSource; import dk.camelot64.kickc.model.types.SymbolType; @@ -26,8 +26,6 @@ public class Procedure extends Scope { private boolean variableLengthParameterList; /** true if the procedure is declared inline. */ private boolean declaredInline; - /** true if the procedure is declared far. */ - private boolean declaredFar; /** 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. */ @@ -44,8 +42,8 @@ public class Procedure extends Scope { private boolean isConstructor; /** The source of the procedure definition. */ private StatementSource definitionSource; - /** The far segment information. Collected during parsing. These are used to compare with the current currentFarSegment to decide a near or a far call, and to keep inline calling routines.*/ - private FarSegment farSegment; + /** The bank segment information. Collected during parsing. These are used to compare with the current currentBank to decide a near or a far call, and to keep inline calling routines.*/ + private Bank bankLocation; /** The names of all legal intrinsic procedures. */ @@ -56,12 +54,12 @@ public class Procedure extends Scope { Pass1ByteXIntrinsicRewrite.INTRINSIC_MAKELONG4 ); - public FarSegment getFarSegment() { - return farSegment; + public Bank getBankLocation() { + return bankLocation; } - public void setFarSegment(FarSegment farSegment) { - this.farSegment = farSegment; + public void setBankLocation(Bank bankLocation) { + this.bankLocation = bankLocation; } @@ -100,11 +98,11 @@ public class Procedure extends Scope { /** The calling convention used for this procedure. */ private CallingConvention callingConvention; - public Procedure(String name, SymbolTypeProcedure procedureType, Scope parentScope, String codeSegment, String dataSegment, CallingConvention callingConvention, FarSegment farSegment) { + public Procedure(String name, SymbolTypeProcedure procedureType, Scope parentScope, String codeSegment, String dataSegment, CallingConvention callingConvention, Bank bankLocation) { super(name, parentScope, dataSegment); this.procedureType = procedureType; this.declaredInline = false; - this.farSegment = farSegment; + this.bankLocation = bankLocation; this.interruptType = null; this.comments = new ArrayList<>(); this.codeSegment = codeSegment; @@ -214,17 +212,24 @@ public class Procedure extends Scope { this.declaredInline = declaredInline; } - public boolean isDeclaredFar() { - return farSegment != null; + public boolean isDeclaredBanked() { + return bankLocation != null; } - public Long getFarBank() { - if(farSegment!=null) - return farSegment.getFarBank(); + public Long getBank() { + if(bankLocation != null) + return bankLocation.getBank(); else return 0L; } + public String getBankArea() { + if(bankLocation != null) + return bankLocation.getBankArea(); + else + return ""; + } + public String getInterruptType() { return interruptType; } @@ -285,8 +290,8 @@ public class Procedure extends Scope { if(declaredIntrinsic) { res.append("__intrinsic "); } - if(declaredFar) { - res.append("__far(").append("bank").append(") "); + if(isDeclaredBanked()) { + res.append("__bank(").append("bank").append(") "); } if(!callingConvention.equals(CallingConvention.PHI_CALL)) { res.append(getCallingConvention().getName()).append(" "); @@ -326,7 +331,7 @@ public class Procedure extends Scope { Procedure procedure = (Procedure) o; return variableLengthParameterList == procedure.variableLengthParameterList && declaredInline == procedure.declaredInline && - declaredFar == procedure.declaredFar && + isDeclaredBanked() == procedure.isDeclaredBanked() && declaredIntrinsic == procedure.declaredIntrinsic && isConstructor == procedure.isConstructor && Objects.equals(procedureType, procedure.procedureType) && diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java b/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java index 89541598a..77ecbb068 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java @@ -16,8 +16,8 @@ public abstract class Scope implements Symbol { public static final String SEGMENT_CODE_DEFAULT = "Code"; /** The default data segment. */ public static final String SEGMENT_DATA_DEFAULT = "Data"; - /** The default far segment. */ - public static final String SEGMENT_FAR_DEFAULT = ""; + /** The default bank segment. */ + public static final Long SEGMENT_BANK_DEFAULT = -1L; private String name; private HashMap symbols; diff --git a/src/main/java/dk/camelot64/kickc/parser/CParser.java b/src/main/java/dk/camelot64/kickc/parser/CParser.java index 806287556..029c6d5f6 100644 --- a/src/main/java/dk/camelot64/kickc/parser/CParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/CParser.java @@ -107,13 +107,13 @@ public class CParser { */ public static final String PRAGMA_RESOURCE = "resource"; /** - * #pragma far(...) specifies the scope of the sequent functions to be far. Segments are defined in the linker file. + * #pragma bank(...) specifies the scope of the sequent functions to be located in a bank using a specific banking area. */ - public static final String PRAGMA_FAR = "far"; + public static final String PRAGMA_BANK = "bank"; /** - * #pragma near specifies the scope of the sequent functions to be near. Segments are defined in the linker file. + * #pragma nobank specifies the scope of the sequent functions to be near. Segments are defined in the linker file. */ - public static final String PRAGMA_NEAR = "near"; + public static final String PRAGMA_NOBANK = "nobank"; /** * The Program. diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 00cde33d7..b6cf3dae6 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -295,20 +295,13 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor 7) { - final String call_prepare = pragmaParamName(ctx.pragmaParam(2)); - final String call_execute = pragmaParamName(ctx.pragmaParam(3)); - final String call_finalize = pragmaParamName(ctx.pragmaParam(4)); - this.currentFarSegment = new FarSegment(pragmaFarSegment, pragmaFarBank.longValue(), call_prepare, call_execute, call_finalize); - } else { - this.currentFarSegment = new FarSegment(pragmaFarSegment, pragmaFarBank.longValue(), "", "", ""); - } + final String pragmaBankArea = pragmaParamBankArea(ctx.pragmaParam(0)); + final Number pragmaBank = pragmaParamNumber(ctx.pragmaParam(1)); + this.currentBank = new Bank(pragmaBankArea, pragmaBank.longValue()); } else { throw new CompileError("Expected at least 2 pragma parameters. Found '" + ctx.getText() + "'.", new StatementSource(ctx)); } @@ -316,8 +309,8 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor= 5) { - farSegmentName = ctx.getChild(2).getText(); - farSegmentBank = Long.valueOf(ctx.getChild(4).getText()); + bankArea = ctx.getChild(2).getText(); + bank = Long.valueOf(ctx.getChild(4).getText()); } - if(ctx.getChildCount() == 11) { - farProcedurePrepare = ctx.getChild(6).getText(); - farProcedureExecute = ctx.getChild(8).getText(); - farProcedureFinalize = ctx.getChild(10).getText(); - } - - return new Directive.Far(farSegmentName, farSegmentBank, farProcedurePrepare, farProcedureExecute, farProcedureFinalize); + return new Directive.Bank(bankArea, bank); } @Override diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass1ProcedureFar.java b/src/main/java/dk/camelot64/kickc/passes/Pass1ProcedureFar.java deleted file mode 100644 index 60d3e3fae..000000000 --- a/src/main/java/dk/camelot64/kickc/passes/Pass1ProcedureFar.java +++ /dev/null @@ -1,71 +0,0 @@ -package dk.camelot64.kickc.passes; - -import dk.camelot64.kickc.model.InternalError; -import dk.camelot64.kickc.model.*; -import dk.camelot64.kickc.model.iterator.ProgramValue; -import dk.camelot64.kickc.model.iterator.ProgramValueHandler; -import dk.camelot64.kickc.model.iterator.ProgramValueIterator; -import dk.camelot64.kickc.model.statements.*; -import dk.camelot64.kickc.model.symbols.*; -import dk.camelot64.kickc.model.types.SymbolType; -import dk.camelot64.kickc.model.values.*; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.ListIterator; - -/** Pass that modifies a control flow graph to far call any procedures declared as far */ -public class Pass1ProcedureFar extends Pass1Base { - - public Pass1ProcedureFar(Program program) { - super(program); - } - - @Override - public boolean step() { - List allBlocks = getGraph().getAllBlocks(); - ListIterator blocksIt = allBlocks.listIterator(); - while(blocksIt.hasNext()) { - ControlFlowBlock block = blocksIt.next(); - List blockStatements = block.getStatements(); - ListIterator statementsIt = blockStatements.listIterator(); - while(statementsIt.hasNext()) { - Statement statement = statementsIt.next(); - if(statement instanceof StatementCall) { - StatementCall call = (StatementCall) statement; - ProcedureRef procedureRef = call.getProcedure(); - Procedure procedure = getScope().getProcedure(procedureRef); - if(procedure.isDeclaredFar()) { - if(procedure.getInterruptType()!=null) { - throw new CompileError("Error! Interrupts cannot be far called. "+procedure.getRef().toString()); - } - farProcedureCall(call, procedure, statementsIt, block, blocksIt); - // Continue -// return true; - } - } - } - } - return false; - } - - /** - * Inline a specific call to a procedure. - * - * @param call The call to the far procedure - * @param procedure The procedure being called - * @param statementsIt The statement iterator pointing to the call statement - * @param block The block containing the call - * @param blocksIt The block iterator pointing to the block containing the call - */ - private void farProcedureCall(StatementCall call, Procedure procedure, ListIterator statementsIt, ControlFlowBlock block, ListIterator blocksIt) { - Scope callScope = getScope().getScope(block.getScope()); - // Here we add to the call the properties to build a far call depending on the platform. - // The all properties have been entered in the __far() directive in the source code. - // These properties are then used in pass4 of the compiler, to build the platform dependent fragment to execute the far call. - -// call.setBankFar(procedure.getBankFar()); - getLog().append("Far call " + call.toString(getProgram(), false)); - } -} diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 6fc625f7d..0d3568c70 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -867,36 +867,26 @@ public class Pass4CodeGeneration { } } // Note: I've chosen to keep this code duplication between phi and stack calling convention, for later maintenance flexibility, if any. - // We check if the procedure is declared as far, and if the calling procedure is not in the same bank as the procedure called. - if(procedure.isDeclaredFar() && procedureFrom.getFarBank() != procedure.getFarBank()) { + // We check if the procedure is declared as banked, and if the calling procedure is not in the same bank as the procedure called. + if(procedure.isDeclaredBanked() && procedureFrom.getBank() != procedure.getBank()) { // In this case, Generate ASM for a far call. // The call is constructed in a prepare, execute and finalize compiler .asm fragments respectively. - // The bank and other preparations are set in the far_call_[platform]_prepare.asm fragment. - // The actual jsr statement is embedded in the far_call_[platform]_execute.asm fragment. - // After the jsr, finalization of the call is defined in the far_call_[platform]_finalize.asm fragment. - // TODO: rework to prepare, execute, finalize - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallPrepare(procedure.getFarSegment().getFarBank(), call.getProcedure().getFullName(), program), program); - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExecute(procedure.getFarSegment().getFarBank(), call.getProcedure().getFullName(), program), program); - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallFinalize(procedure.getFarSegment().getFarBank(), call.getProcedure().getFullName(), program), program); -// asm.addInstruction("jsr far", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); + // The bank and other preparations are set in the call_far_[platform]_[bankarea]_prepare.asm fragment. + // The actual jsr statement is embedded in the far_call_[platform]_[bankarea]_execute.asm fragment. + // After the jsr, finalization of the call is defined in the far_call_[platform]_[bankarea]_finalize.asm fragment. + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallPrepare(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallExecute(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallFinalize(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); } else { // Otherwise, Generate AM for a normal near call. - // In case of a far call, we assume the bank does not need to be changed. asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } } else if (Procedure.CallingConvention.STACK_CALL.equals(procedure.getCallingConvention())) { - // Note: I've chosen to keep this code duplication between phi and stack calling convention, for later maintenance flexibility, if any. - // We check if the procedure is declared as far, and if the calling procedure is not in the same bank as the procedure called. - if(procedure.isDeclaredFar() && procedure.getFarBank() != procedureFrom.getFarBank()) { - // In this case, Generate ASM for a far call. - // The call is constructed in a prepare, execute and finalize compiler .asm fragments respectively. - // The bank and other preparations are set in the far_call_[platform]_prepare.asm fragment. - // The actual jsr statement is embedded in the far_call_[platform]_execute.asm fragment. - // After the jsr, finalization of the call is defined in the far_call_[platform]_finalize.asm fragment. - // TODO: rework to prepare, execute, finalize - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallPrepare(procedure.getFarSegment().getFarBank(), call.getProcedure().getFullName(), program), program); - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExecute(procedure.getFarSegment().getFarBank(), call.getProcedure().getFullName(), program), program); - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallFinalize(procedure.getFarSegment().getFarBank(), call.getProcedure().getFullName(), program), program); + // Same as PHI + if(procedure.isDeclaredBanked() && procedure.getBank() != procedureFrom.getBank()) { + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallPrepare(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallExecute(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallFinalize(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); } else { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } @@ -907,11 +897,11 @@ public class Pass4CodeGeneration { Procedure procedure = getScope().getProcedure(call.getProcedure()); Procedure procedureFrom = block.getProcedure(this.program); // We obtain from where the procedure is called, to validate the bank equality. RValue procedureRVal = call.getProcedureRVal(); - // Generate ASM for a call - if(procedure.isDeclaredFar() && procedureFrom.getFarBank() != procedure.getFarBank()) { - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallPrepare(procedure.getFarSegment().getFarBank(), call.getProcedure().getFullName(), program), program); - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallExecute(procedure.getFarSegment().getFarBank(), call.getProcedure().getFullName(), program), program); - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.farCallFinalize(procedure.getFarSegment().getFarBank(), call.getProcedure().getFullName(), program), program); + // Same as PHI + if(procedure.isDeclaredBanked() && procedureFrom.getBank() != procedure.getBank()) { + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallPrepare(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallExecute(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallFinalize(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); } else { AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); } diff --git a/src/test/kc/procedure-callingconvention-phi-far-0.c b/src/test/kc/procedure-callingconvention-phi-bank-0.c similarity index 80% rename from src/test/kc/procedure-callingconvention-phi-far-0.c rename to src/test/kc/procedure-callingconvention-phi-bank-0.c index ca53104b6..54243fc55 100644 --- a/src/test/kc/procedure-callingconvention-phi-far-0.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-0.c @@ -7,6 +7,6 @@ void main(void) { } #pragma code_seg(stage) -char __far(stage,2) plus(char a, char b) { +char __bank(ram,2) plus(char a, char b) { return a+b; } diff --git a/src/test/kc/procedure-callingconvention-phi-far-1.c b/src/test/kc/procedure-callingconvention-phi-bank-1.c similarity index 54% rename from src/test/kc/procedure-callingconvention-phi-far-1.c rename to src/test/kc/procedure-callingconvention-phi-bank-1.c index 5a3bd5633..585ab0f82 100644 --- a/src/test/kc/procedure-callingconvention-phi-far-1.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-1.c @@ -7,24 +7,8 @@ void main(void) { } #pragma code_seg(stage) -#pragma far(stage, 1) +#pragma bank(ram, 1) char plus(char a, char b) { return a+b; } - -void stage_entry() { - asm { - lda 0 - pha - lda #1 - sta 0 - } -} - -void stage_exit() { - asm { - pla - sta 0 - } -} diff --git a/src/test/kc/procedure-callingconvention-phi-far-3.c b/src/test/kc/procedure-callingconvention-phi-bank-2.c similarity index 55% rename from src/test/kc/procedure-callingconvention-phi-far-3.c rename to src/test/kc/procedure-callingconvention-phi-bank-2.c index 18a600d0f..e56b218aa 100644 --- a/src/test/kc/procedure-callingconvention-phi-far-3.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-2.c @@ -7,24 +7,9 @@ void main(void) { } #pragma code_seg(stage) -#pragma far(stage) +#pragma bank(rubbish, 1) char plus(char a, char b) { return a+b; } -void stage_entry() { - asm { - lda 0 - pha - lda #1 - sta 0 - } -} - -void stage_exit() { - asm { - pla - sta 0 - } -} diff --git a/src/test/kc/procedure-callingconvention-phi-bank-3.c b/src/test/kc/procedure-callingconvention-phi-bank-3.c new file mode 100644 index 000000000..655f28876 --- /dev/null +++ b/src/test/kc/procedure-callingconvention-phi-bank-3.c @@ -0,0 +1,14 @@ +// Test a far call procedure with a calling convention sp + +char* const SCREEN = (char*)0x0400; + +void main(void) { + SCREEN[0] = plus('0', 7); +} + +#pragma code_seg(stage) +#pragma bank(stage, 2) + +char plus(char a, char b) { + return a+b; +} diff --git a/src/test/kc/procedure-callingconvention-phi-far-4.c b/src/test/kc/procedure-callingconvention-phi-bank-4.c similarity index 85% rename from src/test/kc/procedure-callingconvention-phi-far-4.c rename to src/test/kc/procedure-callingconvention-phi-bank-4.c index b186b8bb1..0459fcaa0 100644 --- a/src/test/kc/procedure-callingconvention-phi-far-4.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-4.c @@ -3,13 +3,13 @@ char* const SCREEN = (char*)0x0400; #pragma code_seg(stage) -#pragma far(stage, 20) +#pragma bank(stage, 20) char plus(char a, char b) { return a+b; } -#pragma near +#pragma nobank void main(void) { SCREEN[0] = plus('0', 7); diff --git a/src/test/kc/procedure-callingconvention-phi-far-5.c b/src/test/kc/procedure-callingconvention-phi-bank-5.c similarity index 92% rename from src/test/kc/procedure-callingconvention-phi-far-5.c rename to src/test/kc/procedure-callingconvention-phi-bank-5.c index 7949bb569..9e8021010 100644 --- a/src/test/kc/procedure-callingconvention-phi-far-5.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-5.c @@ -3,7 +3,7 @@ char* const SCREEN = (char*)0x0400; #pragma code_seg(bank_1) -#pragma far(bank_1, 1) +#pragma bank(ram, 1) char func_bank1_a(char a, char b) { return a+b; @@ -20,7 +20,7 @@ char func_bank1_d(char a, char b) { } #pragma code_seg(bank_2) -#pragma far(bank_2, 2) +#pragma bank(ram, 2) char func_bank2_a(char a, char b) { return a+b; @@ -47,17 +47,17 @@ char func_bank2_f(char a, char b) { return func_bank1_b(a,b); } -#pragma near +#pragma nobank -char __far(bank_1, 1) func_bank1_b(char a, char b) { +char __bank(ram, 1) func_bank1_b(char a, char b) { return a+b; } -char __far(bank_2, 2) func_bank2_b(char a, char b) { +char __bank(ram, 2) func_bank2_b(char a, char b) { return a+b; } -#pragma near +#pragma nobank char func_bank1_e(char a, char b) { // this should be a far call, because the call is to bank 1. diff --git a/src/test/kc/procedure-callingconvention-phi-far-2.c b/src/test/kc/procedure-callingconvention-phi-far-2.c deleted file mode 100644 index 4fedebf68..000000000 --- a/src/test/kc/procedure-callingconvention-phi-far-2.c +++ /dev/null @@ -1,30 +0,0 @@ -// Test a far call procedure with a calling convention sp - -char* const SCREEN = (char*)0x0400; - -void main(void) { - SCREEN[0] = plus('0', 7); -} - -#pragma code_seg(stage) -#pragma far(rubbish, 1, stage_prepare, stage_execution, stage_exit) - -char plus(char a, char b) { - return a+b; -} - -void stage_entry() { - asm { - lda 0 - pha - lda #1 - sta 0 - } -} - -void stage_exit() { - asm { - pla - sta 0 - } -} diff --git a/src/test/kc/procedure-callingconvention-stack-far-0.c b/src/test/kc/procedure-callingconvention-stack-bank-0.c similarity index 76% rename from src/test/kc/procedure-callingconvention-stack-far-0.c rename to src/test/kc/procedure-callingconvention-stack-bank-0.c index b232fde4f..3801b0673 100644 --- a/src/test/kc/procedure-callingconvention-stack-far-0.c +++ b/src/test/kc/procedure-callingconvention-stack-bank-0.c @@ -7,6 +7,6 @@ void main(void) { } #pragma code_seg(test) -char __far(test, 2) __stackcall plus(char a, char b) { +char __bank(ram, 2) __stackcall plus(char a, char b) { return a+b; } \ No newline at end of file diff --git a/src/test/kc/procedure-callingconvention-stack-far-1.c b/src/test/kc/procedure-callingconvention-stack-bank-1.c similarity index 82% rename from src/test/kc/procedure-callingconvention-stack-far-1.c rename to src/test/kc/procedure-callingconvention-stack-bank-1.c index 458e13cd4..da246a882 100644 --- a/src/test/kc/procedure-callingconvention-stack-far-1.c +++ b/src/test/kc/procedure-callingconvention-stack-bank-1.c @@ -9,6 +9,6 @@ void main(void) { #pragma calling(__stackcall) #pragma code_seg(test) -char __far(test,20) plus(char a, char b) { +char __bank(ram,20) plus(char a, char b) { return a+b; } \ No newline at end of file diff --git a/src/test/kc/procedure-callingconvention-stack-far-2.c b/src/test/kc/procedure-callingconvention-stack-bank-2.c similarity index 86% rename from src/test/kc/procedure-callingconvention-stack-far-2.c rename to src/test/kc/procedure-callingconvention-stack-bank-2.c index 328dd4d34..cb8a3bc86 100644 --- a/src/test/kc/procedure-callingconvention-stack-far-2.c +++ b/src/test/kc/procedure-callingconvention-stack-bank-2.c @@ -14,7 +14,7 @@ void main(void) { } // this should give a pragma error during compile, as test is not declared yet. -char __far(test, 20) __stackcall plus(char a, char b) { +char __bank(ram, 20) __stackcall plus(char a, char b) { i++; return a+b; } \ No newline at end of file diff --git a/src/test/kc/procedure-callingconvention-stack-far-3.c b/src/test/kc/procedure-callingconvention-stack-bank-3.c similarity index 80% rename from src/test/kc/procedure-callingconvention-stack-far-3.c rename to src/test/kc/procedure-callingconvention-stack-bank-3.c index 1bfec448f..6ab8d136f 100644 --- a/src/test/kc/procedure-callingconvention-stack-far-3.c +++ b/src/test/kc/procedure-callingconvention-stack-bank-3.c @@ -20,23 +20,23 @@ void main(void) { #pragma code_seg(test3) #pragma code_seg(Code) -void __far(test, 20) pval() { +void __bank(ram, 20) pval() { printval(); } -void __far(test2, 21) ival() { +void __bank(ram, 21) ival() { incval(); } -void __far(test, 20) printval() { +void __bank(ram, 20) printval() { SCREEN[0] = val; } -void __far(test2, 21) incval() { +void __bank(ram, 21) incval() { val++; } -#pragma near +#pragma nobank void printother() { for(char i:0..5) { diff --git a/src/test/kc/procedure-callingconvention-stack-far-4.c b/src/test/kc/procedure-callingconvention-stack-bank-4.c similarity index 84% rename from src/test/kc/procedure-callingconvention-stack-far-4.c rename to src/test/kc/procedure-callingconvention-stack-bank-4.c index c006ecd6f..76c66aa26 100644 --- a/src/test/kc/procedure-callingconvention-stack-far-4.c +++ b/src/test/kc/procedure-callingconvention-stack-bank-4.c @@ -19,12 +19,12 @@ void main(void) { } } -struct Point __far(1) get(char i) { +struct Point __bank(ram,1) get(char i) { struct Point p = { i, i/2 }; return p; } -void __far(2) print(struct Point p) { +void __bank(ram,2) print(struct Point p) { SCREEN[idx++] = p.x; SCREEN[idx++] = p.y; } diff --git a/src/test/kc/procedure-callingconvention-stack-far-5.c b/src/test/kc/procedure-callingconvention-stack-bank-5.c similarity index 84% rename from src/test/kc/procedure-callingconvention-stack-far-5.c rename to src/test/kc/procedure-callingconvention-stack-bank-5.c index 925beedec..3bfac0ef3 100644 --- a/src/test/kc/procedure-callingconvention-stack-far-5.c +++ b/src/test/kc/procedure-callingconvention-stack-bank-5.c @@ -7,7 +7,7 @@ void main(void) { *SCREEN = pow2(6); } -char __stackcall __far(1) pow2(char n) { +char __stackcall __bank(ram,1) pow2(char n) { if (n == 0) return 1; else { From 944fbd3021333184c1d1e4496c2021078ed5af9d Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Sun, 26 Mar 2023 10:30:23 +0200 Subject: [PATCH 12/66] - removed gen files --- .gitignore | 1 + gen/KickCLexer.interp | 490 ------------- gen/KickCLexer.java | 1602 ----------------------------------------- gen/KickCLexer.tokens | 227 ------ 4 files changed, 1 insertion(+), 2319 deletions(-) delete mode 100644 gen/KickCLexer.interp delete mode 100644 gen/KickCLexer.java delete mode 100644 gen/KickCLexer.tokens diff --git a/.gitignore b/.gitignore index c7169a380..14e2eee75 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +/gen */*.mon */*.vs */*.brk diff --git a/gen/KickCLexer.interp b/gen/KickCLexer.interp deleted file mode 100644 index 3688c113f..000000000 --- a/gen/KickCLexer.interp +++ /dev/null @@ -1,490 +0,0 @@ -token literal names: -null -null -null -null -null -null -null -null -';' -null -null -'..' -'...' -'?' -null -'->' -null -null -null -null -'%' -'++' -'--' -'&' -'~' -'^' -'|' -null -null -'==' -'!=' -null -'<=' -'>=' -null -'&&' -'||' -'=' -null -'typedef' -'const' -'extern' -'__export' -'__align' -'inline' -'volatile' -'static' -'__interrupt' -'register' -'__zp_reserve' -'__address' -'__zp' -'__mem' -'__far' -'__near' -'__ssa' -'__ma' -'__intrinsic' -null -'if' -'else' -'while' -'do' -'for' -'switch' -'return' -'break' -'continue' -'goto' -'asm' -'default' -'case' -'struct' -'union' -'enum' -'sizeof' -'typeid' -'defined' -'kickasm' -'!' -null -null -null -'#import' -'#include' -'#pragma' -'#define' -null -'#undef' -'#ifdef' -'#ifndef' -'#if' -'#elif' -'#else' -'#endif' -'#error' -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -'.byte' -null -'#' -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null - -token symbolic names: -null -TYPEDEFNAME -CURLY_BEGIN -CURLY_END -BRACKET_BEGIN -BRACKET_END -PAR_BEGIN -PAR_END -SEMICOLON -COLON -COMMA -RANGE -PARAM_LIST -CONDITION -DOT -ARROW -PLUS -MINUS -ASTERISK -DIVIDE -MODULO -INC -DEC -AND -BIT_NOT -BIT_XOR -BIT_OR -SHIFT_LEFT -SHIFT_RIGHT -EQUAL -NOT_EQUAL -LESS_THAN -LESS_THAN_EQUAL -GREATER_THAN_EQUAL -GREATER_THAN -LOGIC_AND -LOGIC_OR -ASSIGN -ASSIGN_COMPOUND -TYPEDEF -CONST -EXTERN -EXPORT -ALIGN -INLINE -VOLATILE -STATIC -INTERRUPT -REGISTER -LOCAL_RESERVE -ADDRESS -ADDRESS_ZEROPAGE -ADDRESS_MAINMEM -FAR -NEAR -FORM_SSA -FORM_MA -INTRINSIC -CALLINGCONVENTION -IF -ELSE -WHILE -DO -FOR -SWITCH -RETURN -BREAK -CONTINUE -GOTO -ASM -DEFAULT -CASE -STRUCT -UNION -ENUM -SIZEOF -TYPEID -DEFINED -KICKASM -LOGIC_NOT -SIMPLETYPE -BOOLEAN -KICKASM_BODY -IMPORT -INCLUDE -PRAGMA -DEFINE -DEFINE_CONTINUE -UNDEF -IFDEF -IFNDEF -IFIF -ELIF -IFELSE -ENDIF -ERROR -TOKEN_STRINGIZE -TOKEN_MERGE -NUMBER -NUMFLOAT -BINFLOAT -DECFLOAT -HEXFLOAT -NUMINT -BININTEGER -DECINTEGER -HEXINTEGER -NAME -STRING -CHAR -WS -COMMENT_LINE -COMMENT_BLOCK -ASM_BYTE -ASM_MNEMONIC -ASM_IMM -ASM_COLON -ASM_COMMA -ASM_PAR_BEGIN -ASM_PAR_END -ASM_BRACKET_BEGIN -ASM_BRACKET_END -ASM_DOT -ASM_SHIFT_LEFT -ASM_SHIFT_RIGHT -ASM_PLUS -ASM_MINUS -ASM_LESS_THAN -ASM_GREATER_THAN -ASM_MULTIPLY -ASM_DIVIDE -ASM_CURLY_BEGIN -ASM_CURLY_END -ASM_NUMBER -ASM_NUMFLOAT -ASM_BINFLOAT -ASM_DECFLOAT -ASM_HEXFLOAT -ASM_NUMINT -ASM_BININTEGER -ASM_DECINTEGER -ASM_HEXINTEGER -ASM_CHAR -ASM_MULTI_REL -ASM_MULTI_NAME -ASM_NAME -ASM_TAG -ASM_WS -ASM_COMMENT_LINE -ASM_COMMENT_BLOCK -IMPORT_SYSTEMFILE -IMPORT_LOCALFILE -IMPORT_WS -IMPORT_COMMENT_LINE -IMPORT_COMMENT_BLOCK - -rule names: -CURLY_BEGIN -CURLY_END -BRACKET_BEGIN -BRACKET_END -PAR_BEGIN -PAR_END -SEMICOLON -COLON -COMMA -RANGE -PARAM_LIST -CONDITION -DOT -ARROW -PLUS -MINUS -ASTERISK -DIVIDE -MODULO -INC -DEC -AND -BIT_NOT -BIT_XOR -BIT_OR -SHIFT_LEFT -SHIFT_RIGHT -EQUAL -NOT_EQUAL -LESS_THAN -LESS_THAN_EQUAL -GREATER_THAN_EQUAL -GREATER_THAN -LOGIC_AND -LOGIC_OR -ASSIGN -ASSIGN_COMPOUND -TYPEDEF -CONST -EXTERN -EXPORT -ALIGN -INLINE -VOLATILE -STATIC -INTERRUPT -REGISTER -LOCAL_RESERVE -ADDRESS -ADDRESS_ZEROPAGE -ADDRESS_MAINMEM -FAR -NEAR -FORM_SSA -FORM_MA -INTRINSIC -CALLINGCONVENTION -IF -ELSE -WHILE -DO -FOR -SWITCH -RETURN -BREAK -CONTINUE -GOTO -ASM -DEFAULT -CASE -STRUCT -UNION -ENUM -SIZEOF -TYPEID -DEFINED -KICKASM -LOGIC_NOT -SIMPLETYPE -BOOLEAN -KICKASM_BODY -IMPORT -INCLUDE -PRAGMA -DEFINE -DEFINE_CONTINUE -UNDEF -IFDEF -IFNDEF -IFIF -ELIF -IFELSE -ENDIF -ERROR -TOKEN_STRINGIZE -TOKEN_MERGE -NUMBER -NUMFLOAT -BINFLOAT -DECFLOAT -HEXFLOAT -NUMINT -BININTEGER -DECINTEGER -HEXINTEGER -BINDIGIT -DECDIGIT -HEXDIGIT -NAME -NAME_START -NAME_CHAR -STRING -CHAR -WS -COMMENT_LINE -COMMENT_BLOCK -ASM_BYTE -ASM_MNEMONIC -ASM_IMM -ASM_COLON -ASM_COMMA -ASM_PAR_BEGIN -ASM_PAR_END -ASM_BRACKET_BEGIN -ASM_BRACKET_END -ASM_DOT -ASM_SHIFT_LEFT -ASM_SHIFT_RIGHT -ASM_PLUS -ASM_MINUS -ASM_LESS_THAN -ASM_GREATER_THAN -ASM_MULTIPLY -ASM_DIVIDE -ASM_CURLY_BEGIN -ASM_CURLY_END -ASM_NUMBER -ASM_NUMFLOAT -ASM_BINFLOAT -ASM_DECFLOAT -ASM_HEXFLOAT -ASM_NUMINT -ASM_BININTEGER -ASM_DECINTEGER -ASM_HEXINTEGER -ASM_BINDIGIT -ASM_DECDIGIT -ASM_HEXDIGIT -ASM_CHAR -ASM_MULTI_REL -ASM_MULTI_NAME -ASM_NAME -ASM_NAME_START -ASM_NAME_CHAR -ASM_TAG -ASM_WS -ASM_COMMENT_LINE -ASM_COMMENT_BLOCK -IMPORT_SYSTEMFILE -IMPORT_LOCALFILE -IMPORT_WS -IMPORT_COMMENT_LINE -IMPORT_COMMENT_BLOCK - -channel names: -DEFAULT_TOKEN_CHANNEL -HIDDEN - -mode names: -DEFAULT_MODE -ASM_MODE -IMPORT_MODE - -atn: -[4, 0, 154, 1983, 6, -1, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 439, 8, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 637, 8, 56, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 814, 8, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 3, 79, 825, 8, 79, 1, 80, 1, 80, 1, 80, 1, 80, 5, 80, 831, 8, 80, 10, 80, 12, 80, 834, 9, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 3, 85, 881, 8, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 3, 96, 943, 8, 96, 1, 97, 1, 97, 1, 97, 3, 97, 948, 8, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 3, 98, 955, 8, 98, 1, 98, 5, 98, 958, 8, 98, 10, 98, 12, 98, 961, 9, 98, 1, 98, 1, 98, 4, 98, 965, 8, 98, 11, 98, 12, 98, 966, 1, 99, 5, 99, 970, 8, 99, 10, 99, 12, 99, 973, 9, 99, 1, 99, 1, 99, 4, 99, 977, 8, 99, 11, 99, 12, 99, 978, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 3, 100, 986, 8, 100, 1, 100, 5, 100, 989, 8, 100, 10, 100, 12, 100, 992, 9, 100, 1, 100, 1, 100, 4, 100, 996, 8, 100, 11, 100, 12, 100, 997, 1, 101, 1, 101, 1, 101, 3, 101, 1003, 8, 101, 1, 101, 1, 101, 1, 101, 3, 101, 1008, 8, 101, 1, 102, 1, 102, 1, 102, 4, 102, 1013, 8, 102, 11, 102, 12, 102, 1014, 1, 102, 1, 102, 4, 102, 1019, 8, 102, 11, 102, 12, 102, 1020, 3, 102, 1023, 8, 102, 1, 103, 4, 103, 1026, 8, 103, 11, 103, 12, 103, 1027, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 3, 104, 1035, 8, 104, 1, 104, 4, 104, 1038, 8, 104, 11, 104, 12, 104, 1039, 1, 105, 1, 105, 1, 106, 1, 106, 1, 107, 1, 107, 1, 108, 1, 108, 5, 108, 1050, 8, 108, 10, 108, 12, 108, 1053, 9, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 5, 111, 1065, 8, 111, 10, 111, 12, 111, 1068, 9, 111, 1, 111, 1, 111, 3, 111, 1072, 8, 111, 1, 111, 1, 111, 3, 111, 1076, 8, 111, 3, 111, 1078, 8, 111, 1, 111, 3, 111, 1081, 8, 111, 1, 112, 1, 112, 1, 112, 1, 112, 3, 112, 1087, 8, 112, 1, 112, 3, 112, 1090, 8, 112, 1, 112, 1, 112, 1, 112, 3, 112, 1095, 8, 112, 1, 112, 3, 112, 1098, 8, 112, 1, 112, 1, 112, 1, 113, 4, 113, 1103, 8, 113, 11, 113, 12, 113, 1104, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 5, 114, 1113, 8, 114, 10, 114, 12, 114, 1116, 9, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 5, 115, 1124, 8, 115, 10, 115, 12, 115, 1127, 9, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 3, 117, 1747, 8, 117, 1, 118, 1, 118, 1, 119, 1, 119, 1, 120, 1, 120, 1, 121, 1, 121, 1, 122, 1, 122, 1, 123, 1, 123, 1, 124, 1, 124, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 129, 1, 129, 1, 130, 1, 130, 1, 131, 1, 131, 1, 132, 1, 132, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 3, 136, 1791, 8, 136, 1, 137, 1, 137, 1, 137, 3, 137, 1796, 8, 137, 1, 138, 1, 138, 5, 138, 1800, 8, 138, 10, 138, 12, 138, 1803, 9, 138, 1, 138, 1, 138, 4, 138, 1807, 8, 138, 11, 138, 12, 138, 1808, 1, 139, 5, 139, 1812, 8, 139, 10, 139, 12, 139, 1815, 9, 139, 1, 139, 1, 139, 4, 139, 1819, 8, 139, 11, 139, 12, 139, 1820, 1, 140, 1, 140, 5, 140, 1825, 8, 140, 10, 140, 12, 140, 1828, 9, 140, 1, 140, 1, 140, 4, 140, 1832, 8, 140, 11, 140, 12, 140, 1833, 1, 141, 1, 141, 1, 141, 3, 141, 1839, 8, 141, 1, 142, 1, 142, 4, 142, 1843, 8, 142, 11, 142, 12, 142, 1844, 1, 143, 4, 143, 1848, 8, 143, 11, 143, 12, 143, 1849, 1, 144, 1, 144, 4, 144, 1854, 8, 144, 11, 144, 12, 144, 1855, 1, 145, 1, 145, 1, 146, 1, 146, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 3, 148, 1868, 8, 148, 1, 148, 1, 148, 1, 149, 1, 149, 4, 149, 1874, 8, 149, 11, 149, 12, 149, 1875, 1, 150, 1, 150, 5, 150, 1880, 8, 150, 10, 150, 12, 150, 1883, 9, 150, 1, 151, 1, 151, 5, 151, 1887, 8, 151, 10, 151, 12, 151, 1890, 9, 151, 1, 152, 1, 152, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 155, 4, 155, 1900, 8, 155, 11, 155, 12, 155, 1901, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 5, 156, 1910, 8, 156, 10, 156, 12, 156, 1913, 9, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 5, 157, 1921, 8, 157, 10, 157, 12, 157, 1924, 9, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 4, 158, 1933, 8, 158, 11, 158, 12, 158, 1934, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 5, 159, 1944, 8, 159, 10, 159, 12, 159, 1947, 9, 159, 1, 159, 1, 159, 1, 159, 1, 160, 4, 160, 1953, 8, 160, 11, 160, 12, 160, 1954, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 5, 161, 1963, 8, 161, 10, 161, 12, 161, 1966, 9, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 5, 162, 1974, 8, 162, 10, 162, 12, 162, 1977, 9, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 4, 832, 1125, 1922, 1975, 0, 163, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 0, 215, 0, 217, 0, 219, 107, 221, 0, 223, 0, 225, 108, 227, 109, 229, 110, 231, 111, 233, 112, 235, 113, 237, 114, 239, 115, 241, 116, 243, 117, 245, 118, 247, 119, 249, 120, 251, 121, 253, 122, 255, 123, 257, 124, 259, 125, 261, 126, 263, 127, 265, 128, 267, 129, 269, 130, 271, 131, 273, 132, 275, 133, 277, 134, 279, 135, 281, 136, 283, 137, 285, 138, 287, 139, 289, 140, 291, 141, 293, 0, 295, 0, 297, 0, 299, 142, 301, 143, 303, 144, 305, 145, 307, 0, 309, 0, 311, 146, 313, 147, 315, 148, 317, 149, 319, 150, 321, 151, 323, 152, 325, 153, 327, 154, 3, 0, 1, 2, 21, 4, 0, 83, 83, 85, 85, 115, 115, 117, 117, 10, 0, 66, 68, 73, 73, 76, 76, 83, 83, 87, 87, 98, 100, 105, 105, 108, 108, 115, 115, 119, 119, 4, 0, 76, 76, 85, 85, 108, 108, 117, 117, 2, 0, 66, 66, 98, 98, 1, 0, 48, 49, 1, 0, 48, 57, 3, 0, 48, 57, 65, 70, 97, 102, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 1, 0, 34, 34, 1, 0, 122, 122, 3, 0, 97, 97, 112, 112, 115, 115, 3, 0, 97, 97, 109, 109, 115, 117, 7, 0, 34, 34, 39, 39, 48, 57, 92, 92, 102, 102, 110, 110, 114, 114, 2, 0, 48, 57, 97, 102, 1, 0, 39, 39, 4, 0, 9, 10, 13, 13, 32, 32, 160, 160, 2, 0, 10, 10, 13, 13, 5, 0, 34, 34, 39, 39, 102, 102, 110, 110, 114, 114, 2, 0, 43, 43, 45, 45, 5, 0, 45, 57, 65, 90, 92, 92, 95, 95, 97, 122, 2244, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 1, 235, 1, 0, 0, 0, 1, 237, 1, 0, 0, 0, 1, 239, 1, 0, 0, 0, 1, 241, 1, 0, 0, 0, 1, 243, 1, 0, 0, 0, 1, 245, 1, 0, 0, 0, 1, 247, 1, 0, 0, 0, 1, 249, 1, 0, 0, 0, 1, 251, 1, 0, 0, 0, 1, 253, 1, 0, 0, 0, 1, 255, 1, 0, 0, 0, 1, 257, 1, 0, 0, 0, 1, 259, 1, 0, 0, 0, 1, 261, 1, 0, 0, 0, 1, 263, 1, 0, 0, 0, 1, 265, 1, 0, 0, 0, 1, 267, 1, 0, 0, 0, 1, 269, 1, 0, 0, 0, 1, 271, 1, 0, 0, 0, 1, 273, 1, 0, 0, 0, 1, 275, 1, 0, 0, 0, 1, 277, 1, 0, 0, 0, 1, 279, 1, 0, 0, 0, 1, 281, 1, 0, 0, 0, 1, 283, 1, 0, 0, 0, 1, 285, 1, 0, 0, 0, 1, 287, 1, 0, 0, 0, 1, 289, 1, 0, 0, 0, 1, 291, 1, 0, 0, 0, 1, 299, 1, 0, 0, 0, 1, 301, 1, 0, 0, 0, 1, 303, 1, 0, 0, 0, 1, 305, 1, 0, 0, 0, 1, 311, 1, 0, 0, 0, 1, 313, 1, 0, 0, 0, 1, 315, 1, 0, 0, 0, 1, 317, 1, 0, 0, 0, 2, 319, 1, 0, 0, 0, 2, 321, 1, 0, 0, 0, 2, 323, 1, 0, 0, 0, 2, 325, 1, 0, 0, 0, 2, 327, 1, 0, 0, 0, 3, 329, 1, 0, 0, 0, 5, 332, 1, 0, 0, 0, 7, 334, 1, 0, 0, 0, 9, 336, 1, 0, 0, 0, 11, 338, 1, 0, 0, 0, 13, 340, 1, 0, 0, 0, 15, 342, 1, 0, 0, 0, 17, 344, 1, 0, 0, 0, 19, 346, 1, 0, 0, 0, 21, 348, 1, 0, 0, 0, 23, 351, 1, 0, 0, 0, 25, 355, 1, 0, 0, 0, 27, 357, 1, 0, 0, 0, 29, 359, 1, 0, 0, 0, 31, 362, 1, 0, 0, 0, 33, 364, 1, 0, 0, 0, 35, 366, 1, 0, 0, 0, 37, 368, 1, 0, 0, 0, 39, 370, 1, 0, 0, 0, 41, 372, 1, 0, 0, 0, 43, 375, 1, 0, 0, 0, 45, 378, 1, 0, 0, 0, 47, 380, 1, 0, 0, 0, 49, 382, 1, 0, 0, 0, 51, 384, 1, 0, 0, 0, 53, 386, 1, 0, 0, 0, 55, 389, 1, 0, 0, 0, 57, 392, 1, 0, 0, 0, 59, 395, 1, 0, 0, 0, 61, 398, 1, 0, 0, 0, 63, 400, 1, 0, 0, 0, 65, 403, 1, 0, 0, 0, 67, 406, 1, 0, 0, 0, 69, 408, 1, 0, 0, 0, 71, 411, 1, 0, 0, 0, 73, 414, 1, 0, 0, 0, 75, 438, 1, 0, 0, 0, 77, 440, 1, 0, 0, 0, 79, 448, 1, 0, 0, 0, 81, 454, 1, 0, 0, 0, 83, 461, 1, 0, 0, 0, 85, 470, 1, 0, 0, 0, 87, 478, 1, 0, 0, 0, 89, 485, 1, 0, 0, 0, 91, 494, 1, 0, 0, 0, 93, 501, 1, 0, 0, 0, 95, 513, 1, 0, 0, 0, 97, 522, 1, 0, 0, 0, 99, 535, 1, 0, 0, 0, 101, 545, 1, 0, 0, 0, 103, 550, 1, 0, 0, 0, 105, 556, 1, 0, 0, 0, 107, 562, 1, 0, 0, 0, 109, 569, 1, 0, 0, 0, 111, 575, 1, 0, 0, 0, 113, 580, 1, 0, 0, 0, 115, 636, 1, 0, 0, 0, 117, 638, 1, 0, 0, 0, 119, 641, 1, 0, 0, 0, 121, 646, 1, 0, 0, 0, 123, 652, 1, 0, 0, 0, 125, 655, 1, 0, 0, 0, 127, 659, 1, 0, 0, 0, 129, 666, 1, 0, 0, 0, 131, 673, 1, 0, 0, 0, 133, 679, 1, 0, 0, 0, 135, 688, 1, 0, 0, 0, 137, 693, 1, 0, 0, 0, 139, 699, 1, 0, 0, 0, 141, 707, 1, 0, 0, 0, 143, 712, 1, 0, 0, 0, 145, 719, 1, 0, 0, 0, 147, 725, 1, 0, 0, 0, 149, 730, 1, 0, 0, 0, 151, 737, 1, 0, 0, 0, 153, 744, 1, 0, 0, 0, 155, 752, 1, 0, 0, 0, 157, 760, 1, 0, 0, 0, 159, 813, 1, 0, 0, 0, 161, 824, 1, 0, 0, 0, 163, 826, 1, 0, 0, 0, 165, 838, 1, 0, 0, 0, 167, 848, 1, 0, 0, 0, 169, 859, 1, 0, 0, 0, 171, 867, 1, 0, 0, 0, 173, 880, 1, 0, 0, 0, 175, 882, 1, 0, 0, 0, 177, 889, 1, 0, 0, 0, 179, 896, 1, 0, 0, 0, 181, 904, 1, 0, 0, 0, 183, 908, 1, 0, 0, 0, 185, 914, 1, 0, 0, 0, 187, 920, 1, 0, 0, 0, 189, 927, 1, 0, 0, 0, 191, 934, 1, 0, 0, 0, 193, 937, 1, 0, 0, 0, 195, 942, 1, 0, 0, 0, 197, 947, 1, 0, 0, 0, 199, 954, 1, 0, 0, 0, 201, 971, 1, 0, 0, 0, 203, 985, 1, 0, 0, 0, 205, 1002, 1, 0, 0, 0, 207, 1022, 1, 0, 0, 0, 209, 1025, 1, 0, 0, 0, 211, 1034, 1, 0, 0, 0, 213, 1041, 1, 0, 0, 0, 215, 1043, 1, 0, 0, 0, 217, 1045, 1, 0, 0, 0, 219, 1047, 1, 0, 0, 0, 221, 1056, 1, 0, 0, 0, 223, 1058, 1, 0, 0, 0, 225, 1060, 1, 0, 0, 0, 227, 1082, 1, 0, 0, 0, 229, 1102, 1, 0, 0, 0, 231, 1108, 1, 0, 0, 0, 233, 1119, 1, 0, 0, 0, 235, 1133, 1, 0, 0, 0, 237, 1746, 1, 0, 0, 0, 239, 1748, 1, 0, 0, 0, 241, 1750, 1, 0, 0, 0, 243, 1752, 1, 0, 0, 0, 245, 1754, 1, 0, 0, 0, 247, 1756, 1, 0, 0, 0, 249, 1758, 1, 0, 0, 0, 251, 1760, 1, 0, 0, 0, 253, 1762, 1, 0, 0, 0, 255, 1764, 1, 0, 0, 0, 257, 1767, 1, 0, 0, 0, 259, 1770, 1, 0, 0, 0, 261, 1772, 1, 0, 0, 0, 263, 1774, 1, 0, 0, 0, 265, 1776, 1, 0, 0, 0, 267, 1778, 1, 0, 0, 0, 269, 1780, 1, 0, 0, 0, 271, 1782, 1, 0, 0, 0, 273, 1785, 1, 0, 0, 0, 275, 1790, 1, 0, 0, 0, 277, 1795, 1, 0, 0, 0, 279, 1797, 1, 0, 0, 0, 281, 1813, 1, 0, 0, 0, 283, 1822, 1, 0, 0, 0, 285, 1838, 1, 0, 0, 0, 287, 1840, 1, 0, 0, 0, 289, 1847, 1, 0, 0, 0, 291, 1851, 1, 0, 0, 0, 293, 1857, 1, 0, 0, 0, 295, 1859, 1, 0, 0, 0, 297, 1861, 1, 0, 0, 0, 299, 1863, 1, 0, 0, 0, 301, 1871, 1, 0, 0, 0, 303, 1877, 1, 0, 0, 0, 305, 1884, 1, 0, 0, 0, 307, 1891, 1, 0, 0, 0, 309, 1893, 1, 0, 0, 0, 311, 1895, 1, 0, 0, 0, 313, 1899, 1, 0, 0, 0, 315, 1905, 1, 0, 0, 0, 317, 1916, 1, 0, 0, 0, 319, 1930, 1, 0, 0, 0, 321, 1939, 1, 0, 0, 0, 323, 1952, 1, 0, 0, 0, 325, 1958, 1, 0, 0, 0, 327, 1969, 1, 0, 0, 0, 329, 330, 5, 123, 0, 0, 330, 331, 6, 0, 0, 0, 331, 4, 1, 0, 0, 0, 332, 333, 5, 125, 0, 0, 333, 6, 1, 0, 0, 0, 334, 335, 5, 91, 0, 0, 335, 8, 1, 0, 0, 0, 336, 337, 5, 93, 0, 0, 337, 10, 1, 0, 0, 0, 338, 339, 5, 40, 0, 0, 339, 12, 1, 0, 0, 0, 340, 341, 5, 41, 0, 0, 341, 14, 1, 0, 0, 0, 342, 343, 5, 59, 0, 0, 343, 16, 1, 0, 0, 0, 344, 345, 5, 58, 0, 0, 345, 18, 1, 0, 0, 0, 346, 347, 5, 44, 0, 0, 347, 20, 1, 0, 0, 0, 348, 349, 5, 46, 0, 0, 349, 350, 5, 46, 0, 0, 350, 22, 1, 0, 0, 0, 351, 352, 5, 46, 0, 0, 352, 353, 5, 46, 0, 0, 353, 354, 5, 46, 0, 0, 354, 24, 1, 0, 0, 0, 355, 356, 5, 63, 0, 0, 356, 26, 1, 0, 0, 0, 357, 358, 5, 46, 0, 0, 358, 28, 1, 0, 0, 0, 359, 360, 5, 45, 0, 0, 360, 361, 5, 62, 0, 0, 361, 30, 1, 0, 0, 0, 362, 363, 5, 43, 0, 0, 363, 32, 1, 0, 0, 0, 364, 365, 5, 45, 0, 0, 365, 34, 1, 0, 0, 0, 366, 367, 5, 42, 0, 0, 367, 36, 1, 0, 0, 0, 368, 369, 5, 47, 0, 0, 369, 38, 1, 0, 0, 0, 370, 371, 5, 37, 0, 0, 371, 40, 1, 0, 0, 0, 372, 373, 5, 43, 0, 0, 373, 374, 5, 43, 0, 0, 374, 42, 1, 0, 0, 0, 375, 376, 5, 45, 0, 0, 376, 377, 5, 45, 0, 0, 377, 44, 1, 0, 0, 0, 378, 379, 5, 38, 0, 0, 379, 46, 1, 0, 0, 0, 380, 381, 5, 126, 0, 0, 381, 48, 1, 0, 0, 0, 382, 383, 5, 94, 0, 0, 383, 50, 1, 0, 0, 0, 384, 385, 5, 124, 0, 0, 385, 52, 1, 0, 0, 0, 386, 387, 5, 60, 0, 0, 387, 388, 5, 60, 0, 0, 388, 54, 1, 0, 0, 0, 389, 390, 5, 62, 0, 0, 390, 391, 5, 62, 0, 0, 391, 56, 1, 0, 0, 0, 392, 393, 5, 61, 0, 0, 393, 394, 5, 61, 0, 0, 394, 58, 1, 0, 0, 0, 395, 396, 5, 33, 0, 0, 396, 397, 5, 61, 0, 0, 397, 60, 1, 0, 0, 0, 398, 399, 5, 60, 0, 0, 399, 62, 1, 0, 0, 0, 400, 401, 5, 60, 0, 0, 401, 402, 5, 61, 0, 0, 402, 64, 1, 0, 0, 0, 403, 404, 5, 62, 0, 0, 404, 405, 5, 61, 0, 0, 405, 66, 1, 0, 0, 0, 406, 407, 5, 62, 0, 0, 407, 68, 1, 0, 0, 0, 408, 409, 5, 38, 0, 0, 409, 410, 5, 38, 0, 0, 410, 70, 1, 0, 0, 0, 411, 412, 5, 124, 0, 0, 412, 413, 5, 124, 0, 0, 413, 72, 1, 0, 0, 0, 414, 415, 5, 61, 0, 0, 415, 74, 1, 0, 0, 0, 416, 417, 5, 43, 0, 0, 417, 439, 5, 61, 0, 0, 418, 419, 5, 45, 0, 0, 419, 439, 5, 61, 0, 0, 420, 421, 5, 42, 0, 0, 421, 439, 5, 61, 0, 0, 422, 423, 5, 47, 0, 0, 423, 439, 5, 61, 0, 0, 424, 425, 5, 37, 0, 0, 425, 439, 5, 61, 0, 0, 426, 427, 5, 60, 0, 0, 427, 428, 5, 60, 0, 0, 428, 439, 5, 61, 0, 0, 429, 430, 5, 62, 0, 0, 430, 431, 5, 62, 0, 0, 431, 439, 5, 61, 0, 0, 432, 433, 5, 38, 0, 0, 433, 439, 5, 61, 0, 0, 434, 435, 5, 124, 0, 0, 435, 439, 5, 61, 0, 0, 436, 437, 5, 94, 0, 0, 437, 439, 5, 61, 0, 0, 438, 416, 1, 0, 0, 0, 438, 418, 1, 0, 0, 0, 438, 420, 1, 0, 0, 0, 438, 422, 1, 0, 0, 0, 438, 424, 1, 0, 0, 0, 438, 426, 1, 0, 0, 0, 438, 429, 1, 0, 0, 0, 438, 432, 1, 0, 0, 0, 438, 434, 1, 0, 0, 0, 438, 436, 1, 0, 0, 0, 439, 76, 1, 0, 0, 0, 440, 441, 5, 116, 0, 0, 441, 442, 5, 121, 0, 0, 442, 443, 5, 112, 0, 0, 443, 444, 5, 101, 0, 0, 444, 445, 5, 100, 0, 0, 445, 446, 5, 101, 0, 0, 446, 447, 5, 102, 0, 0, 447, 78, 1, 0, 0, 0, 448, 449, 5, 99, 0, 0, 449, 450, 5, 111, 0, 0, 450, 451, 5, 110, 0, 0, 451, 452, 5, 115, 0, 0, 452, 453, 5, 116, 0, 0, 453, 80, 1, 0, 0, 0, 454, 455, 5, 101, 0, 0, 455, 456, 5, 120, 0, 0, 456, 457, 5, 116, 0, 0, 457, 458, 5, 101, 0, 0, 458, 459, 5, 114, 0, 0, 459, 460, 5, 110, 0, 0, 460, 82, 1, 0, 0, 0, 461, 462, 5, 95, 0, 0, 462, 463, 5, 95, 0, 0, 463, 464, 5, 101, 0, 0, 464, 465, 5, 120, 0, 0, 465, 466, 5, 112, 0, 0, 466, 467, 5, 111, 0, 0, 467, 468, 5, 114, 0, 0, 468, 469, 5, 116, 0, 0, 469, 84, 1, 0, 0, 0, 470, 471, 5, 95, 0, 0, 471, 472, 5, 95, 0, 0, 472, 473, 5, 97, 0, 0, 473, 474, 5, 108, 0, 0, 474, 475, 5, 105, 0, 0, 475, 476, 5, 103, 0, 0, 476, 477, 5, 110, 0, 0, 477, 86, 1, 0, 0, 0, 478, 479, 5, 105, 0, 0, 479, 480, 5, 110, 0, 0, 480, 481, 5, 108, 0, 0, 481, 482, 5, 105, 0, 0, 482, 483, 5, 110, 0, 0, 483, 484, 5, 101, 0, 0, 484, 88, 1, 0, 0, 0, 485, 486, 5, 118, 0, 0, 486, 487, 5, 111, 0, 0, 487, 488, 5, 108, 0, 0, 488, 489, 5, 97, 0, 0, 489, 490, 5, 116, 0, 0, 490, 491, 5, 105, 0, 0, 491, 492, 5, 108, 0, 0, 492, 493, 5, 101, 0, 0, 493, 90, 1, 0, 0, 0, 494, 495, 5, 115, 0, 0, 495, 496, 5, 116, 0, 0, 496, 497, 5, 97, 0, 0, 497, 498, 5, 116, 0, 0, 498, 499, 5, 105, 0, 0, 499, 500, 5, 99, 0, 0, 500, 92, 1, 0, 0, 0, 501, 502, 5, 95, 0, 0, 502, 503, 5, 95, 0, 0, 503, 504, 5, 105, 0, 0, 504, 505, 5, 110, 0, 0, 505, 506, 5, 116, 0, 0, 506, 507, 5, 101, 0, 0, 507, 508, 5, 114, 0, 0, 508, 509, 5, 114, 0, 0, 509, 510, 5, 117, 0, 0, 510, 511, 5, 112, 0, 0, 511, 512, 5, 116, 0, 0, 512, 94, 1, 0, 0, 0, 513, 514, 5, 114, 0, 0, 514, 515, 5, 101, 0, 0, 515, 516, 5, 103, 0, 0, 516, 517, 5, 105, 0, 0, 517, 518, 5, 115, 0, 0, 518, 519, 5, 116, 0, 0, 519, 520, 5, 101, 0, 0, 520, 521, 5, 114, 0, 0, 521, 96, 1, 0, 0, 0, 522, 523, 5, 95, 0, 0, 523, 524, 5, 95, 0, 0, 524, 525, 5, 122, 0, 0, 525, 526, 5, 112, 0, 0, 526, 527, 5, 95, 0, 0, 527, 528, 5, 114, 0, 0, 528, 529, 5, 101, 0, 0, 529, 530, 5, 115, 0, 0, 530, 531, 5, 101, 0, 0, 531, 532, 5, 114, 0, 0, 532, 533, 5, 118, 0, 0, 533, 534, 5, 101, 0, 0, 534, 98, 1, 0, 0, 0, 535, 536, 5, 95, 0, 0, 536, 537, 5, 95, 0, 0, 537, 538, 5, 97, 0, 0, 538, 539, 5, 100, 0, 0, 539, 540, 5, 100, 0, 0, 540, 541, 5, 114, 0, 0, 541, 542, 5, 101, 0, 0, 542, 543, 5, 115, 0, 0, 543, 544, 5, 115, 0, 0, 544, 100, 1, 0, 0, 0, 545, 546, 5, 95, 0, 0, 546, 547, 5, 95, 0, 0, 547, 548, 5, 122, 0, 0, 548, 549, 5, 112, 0, 0, 549, 102, 1, 0, 0, 0, 550, 551, 5, 95, 0, 0, 551, 552, 5, 95, 0, 0, 552, 553, 5, 109, 0, 0, 553, 554, 5, 101, 0, 0, 554, 555, 5, 109, 0, 0, 555, 104, 1, 0, 0, 0, 556, 557, 5, 95, 0, 0, 557, 558, 5, 95, 0, 0, 558, 559, 5, 102, 0, 0, 559, 560, 5, 97, 0, 0, 560, 561, 5, 114, 0, 0, 561, 106, 1, 0, 0, 0, 562, 563, 5, 95, 0, 0, 563, 564, 5, 95, 0, 0, 564, 565, 5, 110, 0, 0, 565, 566, 5, 101, 0, 0, 566, 567, 5, 97, 0, 0, 567, 568, 5, 114, 0, 0, 568, 108, 1, 0, 0, 0, 569, 570, 5, 95, 0, 0, 570, 571, 5, 95, 0, 0, 571, 572, 5, 115, 0, 0, 572, 573, 5, 115, 0, 0, 573, 574, 5, 97, 0, 0, 574, 110, 1, 0, 0, 0, 575, 576, 5, 95, 0, 0, 576, 577, 5, 95, 0, 0, 577, 578, 5, 109, 0, 0, 578, 579, 5, 97, 0, 0, 579, 112, 1, 0, 0, 0, 580, 581, 5, 95, 0, 0, 581, 582, 5, 95, 0, 0, 582, 583, 5, 105, 0, 0, 583, 584, 5, 110, 0, 0, 584, 585, 5, 116, 0, 0, 585, 586, 5, 114, 0, 0, 586, 587, 5, 105, 0, 0, 587, 588, 5, 110, 0, 0, 588, 589, 5, 115, 0, 0, 589, 590, 5, 105, 0, 0, 590, 591, 5, 99, 0, 0, 591, 114, 1, 0, 0, 0, 592, 593, 5, 95, 0, 0, 593, 594, 5, 95, 0, 0, 594, 595, 5, 115, 0, 0, 595, 596, 5, 116, 0, 0, 596, 597, 5, 97, 0, 0, 597, 598, 5, 99, 0, 0, 598, 599, 5, 107, 0, 0, 599, 600, 5, 99, 0, 0, 600, 601, 5, 97, 0, 0, 601, 602, 5, 108, 0, 0, 602, 637, 5, 108, 0, 0, 603, 604, 5, 95, 0, 0, 604, 605, 5, 95, 0, 0, 605, 606, 5, 112, 0, 0, 606, 607, 5, 104, 0, 0, 607, 608, 5, 105, 0, 0, 608, 609, 5, 99, 0, 0, 609, 610, 5, 97, 0, 0, 610, 611, 5, 108, 0, 0, 611, 637, 5, 108, 0, 0, 612, 613, 5, 95, 0, 0, 613, 614, 5, 95, 0, 0, 614, 615, 5, 118, 0, 0, 615, 616, 5, 97, 0, 0, 616, 617, 5, 114, 0, 0, 617, 618, 5, 99, 0, 0, 618, 619, 5, 97, 0, 0, 619, 620, 5, 108, 0, 0, 620, 637, 5, 108, 0, 0, 621, 622, 5, 95, 0, 0, 622, 623, 5, 95, 0, 0, 623, 624, 5, 105, 0, 0, 624, 625, 5, 110, 0, 0, 625, 626, 5, 116, 0, 0, 626, 627, 5, 114, 0, 0, 627, 628, 5, 105, 0, 0, 628, 629, 5, 110, 0, 0, 629, 630, 5, 115, 0, 0, 630, 631, 5, 105, 0, 0, 631, 632, 5, 99, 0, 0, 632, 633, 5, 99, 0, 0, 633, 634, 5, 97, 0, 0, 634, 635, 5, 108, 0, 0, 635, 637, 5, 108, 0, 0, 636, 592, 1, 0, 0, 0, 636, 603, 1, 0, 0, 0, 636, 612, 1, 0, 0, 0, 636, 621, 1, 0, 0, 0, 637, 116, 1, 0, 0, 0, 638, 639, 5, 105, 0, 0, 639, 640, 5, 102, 0, 0, 640, 118, 1, 0, 0, 0, 641, 642, 5, 101, 0, 0, 642, 643, 5, 108, 0, 0, 643, 644, 5, 115, 0, 0, 644, 645, 5, 101, 0, 0, 645, 120, 1, 0, 0, 0, 646, 647, 5, 119, 0, 0, 647, 648, 5, 104, 0, 0, 648, 649, 5, 105, 0, 0, 649, 650, 5, 108, 0, 0, 650, 651, 5, 101, 0, 0, 651, 122, 1, 0, 0, 0, 652, 653, 5, 100, 0, 0, 653, 654, 5, 111, 0, 0, 654, 124, 1, 0, 0, 0, 655, 656, 5, 102, 0, 0, 656, 657, 5, 111, 0, 0, 657, 658, 5, 114, 0, 0, 658, 126, 1, 0, 0, 0, 659, 660, 5, 115, 0, 0, 660, 661, 5, 119, 0, 0, 661, 662, 5, 105, 0, 0, 662, 663, 5, 116, 0, 0, 663, 664, 5, 99, 0, 0, 664, 665, 5, 104, 0, 0, 665, 128, 1, 0, 0, 0, 666, 667, 5, 114, 0, 0, 667, 668, 5, 101, 0, 0, 668, 669, 5, 116, 0, 0, 669, 670, 5, 117, 0, 0, 670, 671, 5, 114, 0, 0, 671, 672, 5, 110, 0, 0, 672, 130, 1, 0, 0, 0, 673, 674, 5, 98, 0, 0, 674, 675, 5, 114, 0, 0, 675, 676, 5, 101, 0, 0, 676, 677, 5, 97, 0, 0, 677, 678, 5, 107, 0, 0, 678, 132, 1, 0, 0, 0, 679, 680, 5, 99, 0, 0, 680, 681, 5, 111, 0, 0, 681, 682, 5, 110, 0, 0, 682, 683, 5, 116, 0, 0, 683, 684, 5, 105, 0, 0, 684, 685, 5, 110, 0, 0, 685, 686, 5, 117, 0, 0, 686, 687, 5, 101, 0, 0, 687, 134, 1, 0, 0, 0, 688, 689, 5, 103, 0, 0, 689, 690, 5, 111, 0, 0, 690, 691, 5, 116, 0, 0, 691, 692, 5, 111, 0, 0, 692, 136, 1, 0, 0, 0, 693, 694, 5, 97, 0, 0, 694, 695, 5, 115, 0, 0, 695, 696, 5, 109, 0, 0, 696, 697, 1, 0, 0, 0, 697, 698, 6, 67, 1, 0, 698, 138, 1, 0, 0, 0, 699, 700, 5, 100, 0, 0, 700, 701, 5, 101, 0, 0, 701, 702, 5, 102, 0, 0, 702, 703, 5, 97, 0, 0, 703, 704, 5, 117, 0, 0, 704, 705, 5, 108, 0, 0, 705, 706, 5, 116, 0, 0, 706, 140, 1, 0, 0, 0, 707, 708, 5, 99, 0, 0, 708, 709, 5, 97, 0, 0, 709, 710, 5, 115, 0, 0, 710, 711, 5, 101, 0, 0, 711, 142, 1, 0, 0, 0, 712, 713, 5, 115, 0, 0, 713, 714, 5, 116, 0, 0, 714, 715, 5, 114, 0, 0, 715, 716, 5, 117, 0, 0, 716, 717, 5, 99, 0, 0, 717, 718, 5, 116, 0, 0, 718, 144, 1, 0, 0, 0, 719, 720, 5, 117, 0, 0, 720, 721, 5, 110, 0, 0, 721, 722, 5, 105, 0, 0, 722, 723, 5, 111, 0, 0, 723, 724, 5, 110, 0, 0, 724, 146, 1, 0, 0, 0, 725, 726, 5, 101, 0, 0, 726, 727, 5, 110, 0, 0, 727, 728, 5, 117, 0, 0, 728, 729, 5, 109, 0, 0, 729, 148, 1, 0, 0, 0, 730, 731, 5, 115, 0, 0, 731, 732, 5, 105, 0, 0, 732, 733, 5, 122, 0, 0, 733, 734, 5, 101, 0, 0, 734, 735, 5, 111, 0, 0, 735, 736, 5, 102, 0, 0, 736, 150, 1, 0, 0, 0, 737, 738, 5, 116, 0, 0, 738, 739, 5, 121, 0, 0, 739, 740, 5, 112, 0, 0, 740, 741, 5, 101, 0, 0, 741, 742, 5, 105, 0, 0, 742, 743, 5, 100, 0, 0, 743, 152, 1, 0, 0, 0, 744, 745, 5, 100, 0, 0, 745, 746, 5, 101, 0, 0, 746, 747, 5, 102, 0, 0, 747, 748, 5, 105, 0, 0, 748, 749, 5, 110, 0, 0, 749, 750, 5, 101, 0, 0, 750, 751, 5, 100, 0, 0, 751, 154, 1, 0, 0, 0, 752, 753, 5, 107, 0, 0, 753, 754, 5, 105, 0, 0, 754, 755, 5, 99, 0, 0, 755, 756, 5, 107, 0, 0, 756, 757, 5, 97, 0, 0, 757, 758, 5, 115, 0, 0, 758, 759, 5, 109, 0, 0, 759, 156, 1, 0, 0, 0, 760, 761, 5, 33, 0, 0, 761, 158, 1, 0, 0, 0, 762, 763, 5, 115, 0, 0, 763, 764, 5, 105, 0, 0, 764, 765, 5, 103, 0, 0, 765, 766, 5, 110, 0, 0, 766, 767, 5, 101, 0, 0, 767, 814, 5, 100, 0, 0, 768, 769, 5, 117, 0, 0, 769, 770, 5, 110, 0, 0, 770, 771, 5, 115, 0, 0, 771, 772, 5, 105, 0, 0, 772, 773, 5, 103, 0, 0, 773, 774, 5, 110, 0, 0, 774, 775, 5, 101, 0, 0, 775, 814, 5, 100, 0, 0, 776, 777, 5, 98, 0, 0, 777, 778, 5, 121, 0, 0, 778, 779, 5, 116, 0, 0, 779, 814, 5, 101, 0, 0, 780, 781, 5, 119, 0, 0, 781, 782, 5, 111, 0, 0, 782, 783, 5, 114, 0, 0, 783, 814, 5, 100, 0, 0, 784, 785, 5, 100, 0, 0, 785, 786, 5, 119, 0, 0, 786, 787, 5, 111, 0, 0, 787, 788, 5, 114, 0, 0, 788, 814, 5, 100, 0, 0, 789, 790, 5, 98, 0, 0, 790, 791, 5, 111, 0, 0, 791, 792, 5, 111, 0, 0, 792, 814, 5, 108, 0, 0, 793, 794, 5, 99, 0, 0, 794, 795, 5, 104, 0, 0, 795, 796, 5, 97, 0, 0, 796, 814, 5, 114, 0, 0, 797, 798, 5, 115, 0, 0, 798, 799, 5, 104, 0, 0, 799, 800, 5, 111, 0, 0, 800, 801, 5, 114, 0, 0, 801, 814, 5, 116, 0, 0, 802, 803, 5, 105, 0, 0, 803, 804, 5, 110, 0, 0, 804, 814, 5, 116, 0, 0, 805, 806, 5, 108, 0, 0, 806, 807, 5, 111, 0, 0, 807, 808, 5, 110, 0, 0, 808, 814, 5, 103, 0, 0, 809, 810, 5, 118, 0, 0, 810, 811, 5, 111, 0, 0, 811, 812, 5, 105, 0, 0, 812, 814, 5, 100, 0, 0, 813, 762, 1, 0, 0, 0, 813, 768, 1, 0, 0, 0, 813, 776, 1, 0, 0, 0, 813, 780, 1, 0, 0, 0, 813, 784, 1, 0, 0, 0, 813, 789, 1, 0, 0, 0, 813, 793, 1, 0, 0, 0, 813, 797, 1, 0, 0, 0, 813, 802, 1, 0, 0, 0, 813, 805, 1, 0, 0, 0, 813, 809, 1, 0, 0, 0, 814, 160, 1, 0, 0, 0, 815, 816, 5, 116, 0, 0, 816, 817, 5, 114, 0, 0, 817, 818, 5, 117, 0, 0, 818, 825, 5, 101, 0, 0, 819, 820, 5, 102, 0, 0, 820, 821, 5, 97, 0, 0, 821, 822, 5, 108, 0, 0, 822, 823, 5, 115, 0, 0, 823, 825, 5, 101, 0, 0, 824, 815, 1, 0, 0, 0, 824, 819, 1, 0, 0, 0, 825, 162, 1, 0, 0, 0, 826, 827, 5, 123, 0, 0, 827, 828, 5, 123, 0, 0, 828, 832, 1, 0, 0, 0, 829, 831, 9, 0, 0, 0, 830, 829, 1, 0, 0, 0, 831, 834, 1, 0, 0, 0, 832, 833, 1, 0, 0, 0, 832, 830, 1, 0, 0, 0, 833, 835, 1, 0, 0, 0, 834, 832, 1, 0, 0, 0, 835, 836, 5, 125, 0, 0, 836, 837, 5, 125, 0, 0, 837, 164, 1, 0, 0, 0, 838, 839, 5, 35, 0, 0, 839, 840, 5, 105, 0, 0, 840, 841, 5, 109, 0, 0, 841, 842, 5, 112, 0, 0, 842, 843, 5, 111, 0, 0, 843, 844, 5, 114, 0, 0, 844, 845, 5, 116, 0, 0, 845, 846, 1, 0, 0, 0, 846, 847, 6, 81, 2, 0, 847, 166, 1, 0, 0, 0, 848, 849, 5, 35, 0, 0, 849, 850, 5, 105, 0, 0, 850, 851, 5, 110, 0, 0, 851, 852, 5, 99, 0, 0, 852, 853, 5, 108, 0, 0, 853, 854, 5, 117, 0, 0, 854, 855, 5, 100, 0, 0, 855, 856, 5, 101, 0, 0, 856, 857, 1, 0, 0, 0, 857, 858, 6, 82, 3, 0, 858, 168, 1, 0, 0, 0, 859, 860, 5, 35, 0, 0, 860, 861, 5, 112, 0, 0, 861, 862, 5, 114, 0, 0, 862, 863, 5, 97, 0, 0, 863, 864, 5, 103, 0, 0, 864, 865, 5, 109, 0, 0, 865, 866, 5, 97, 0, 0, 866, 170, 1, 0, 0, 0, 867, 868, 5, 35, 0, 0, 868, 869, 5, 100, 0, 0, 869, 870, 5, 101, 0, 0, 870, 871, 5, 102, 0, 0, 871, 872, 5, 105, 0, 0, 872, 873, 5, 110, 0, 0, 873, 874, 5, 101, 0, 0, 874, 172, 1, 0, 0, 0, 875, 876, 5, 92, 0, 0, 876, 881, 5, 10, 0, 0, 877, 878, 5, 92, 0, 0, 878, 879, 5, 13, 0, 0, 879, 881, 5, 10, 0, 0, 880, 875, 1, 0, 0, 0, 880, 877, 1, 0, 0, 0, 881, 174, 1, 0, 0, 0, 882, 883, 5, 35, 0, 0, 883, 884, 5, 117, 0, 0, 884, 885, 5, 110, 0, 0, 885, 886, 5, 100, 0, 0, 886, 887, 5, 101, 0, 0, 887, 888, 5, 102, 0, 0, 888, 176, 1, 0, 0, 0, 889, 890, 5, 35, 0, 0, 890, 891, 5, 105, 0, 0, 891, 892, 5, 102, 0, 0, 892, 893, 5, 100, 0, 0, 893, 894, 5, 101, 0, 0, 894, 895, 5, 102, 0, 0, 895, 178, 1, 0, 0, 0, 896, 897, 5, 35, 0, 0, 897, 898, 5, 105, 0, 0, 898, 899, 5, 102, 0, 0, 899, 900, 5, 110, 0, 0, 900, 901, 5, 100, 0, 0, 901, 902, 5, 101, 0, 0, 902, 903, 5, 102, 0, 0, 903, 180, 1, 0, 0, 0, 904, 905, 5, 35, 0, 0, 905, 906, 5, 105, 0, 0, 906, 907, 5, 102, 0, 0, 907, 182, 1, 0, 0, 0, 908, 909, 5, 35, 0, 0, 909, 910, 5, 101, 0, 0, 910, 911, 5, 108, 0, 0, 911, 912, 5, 105, 0, 0, 912, 913, 5, 102, 0, 0, 913, 184, 1, 0, 0, 0, 914, 915, 5, 35, 0, 0, 915, 916, 5, 101, 0, 0, 916, 917, 5, 108, 0, 0, 917, 918, 5, 115, 0, 0, 918, 919, 5, 101, 0, 0, 919, 186, 1, 0, 0, 0, 920, 921, 5, 35, 0, 0, 921, 922, 5, 101, 0, 0, 922, 923, 5, 110, 0, 0, 923, 924, 5, 100, 0, 0, 924, 925, 5, 105, 0, 0, 925, 926, 5, 102, 0, 0, 926, 188, 1, 0, 0, 0, 927, 928, 5, 35, 0, 0, 928, 929, 5, 101, 0, 0, 929, 930, 5, 114, 0, 0, 930, 931, 5, 114, 0, 0, 931, 932, 5, 111, 0, 0, 932, 933, 5, 114, 0, 0, 933, 190, 1, 0, 0, 0, 934, 935, 5, 35, 0, 0, 935, 936, 3, 219, 108, 0, 936, 192, 1, 0, 0, 0, 937, 938, 5, 35, 0, 0, 938, 939, 3, 219, 108, 0, 939, 194, 1, 0, 0, 0, 940, 943, 3, 197, 97, 0, 941, 943, 3, 205, 101, 0, 942, 940, 1, 0, 0, 0, 942, 941, 1, 0, 0, 0, 943, 196, 1, 0, 0, 0, 944, 948, 3, 199, 98, 0, 945, 948, 3, 201, 99, 0, 946, 948, 3, 203, 100, 0, 947, 944, 1, 0, 0, 0, 947, 945, 1, 0, 0, 0, 947, 946, 1, 0, 0, 0, 948, 198, 1, 0, 0, 0, 949, 955, 5, 37, 0, 0, 950, 951, 5, 48, 0, 0, 951, 955, 5, 98, 0, 0, 952, 953, 5, 48, 0, 0, 953, 955, 5, 66, 0, 0, 954, 949, 1, 0, 0, 0, 954, 950, 1, 0, 0, 0, 954, 952, 1, 0, 0, 0, 955, 959, 1, 0, 0, 0, 956, 958, 3, 213, 105, 0, 957, 956, 1, 0, 0, 0, 958, 961, 1, 0, 0, 0, 959, 957, 1, 0, 0, 0, 959, 960, 1, 0, 0, 0, 960, 962, 1, 0, 0, 0, 961, 959, 1, 0, 0, 0, 962, 964, 5, 46, 0, 0, 963, 965, 3, 213, 105, 0, 964, 963, 1, 0, 0, 0, 965, 966, 1, 0, 0, 0, 966, 964, 1, 0, 0, 0, 966, 967, 1, 0, 0, 0, 967, 200, 1, 0, 0, 0, 968, 970, 3, 215, 106, 0, 969, 968, 1, 0, 0, 0, 970, 973, 1, 0, 0, 0, 971, 969, 1, 0, 0, 0, 971, 972, 1, 0, 0, 0, 972, 974, 1, 0, 0, 0, 973, 971, 1, 0, 0, 0, 974, 976, 5, 46, 0, 0, 975, 977, 3, 215, 106, 0, 976, 975, 1, 0, 0, 0, 977, 978, 1, 0, 0, 0, 978, 976, 1, 0, 0, 0, 978, 979, 1, 0, 0, 0, 979, 202, 1, 0, 0, 0, 980, 986, 5, 36, 0, 0, 981, 982, 5, 48, 0, 0, 982, 986, 5, 120, 0, 0, 983, 984, 5, 48, 0, 0, 984, 986, 5, 88, 0, 0, 985, 980, 1, 0, 0, 0, 985, 981, 1, 0, 0, 0, 985, 983, 1, 0, 0, 0, 986, 990, 1, 0, 0, 0, 987, 989, 3, 217, 107, 0, 988, 987, 1, 0, 0, 0, 989, 992, 1, 0, 0, 0, 990, 988, 1, 0, 0, 0, 990, 991, 1, 0, 0, 0, 991, 993, 1, 0, 0, 0, 992, 990, 1, 0, 0, 0, 993, 995, 5, 46, 0, 0, 994, 996, 3, 217, 107, 0, 995, 994, 1, 0, 0, 0, 996, 997, 1, 0, 0, 0, 997, 995, 1, 0, 0, 0, 997, 998, 1, 0, 0, 0, 998, 204, 1, 0, 0, 0, 999, 1003, 3, 209, 103, 0, 1000, 1003, 3, 211, 104, 0, 1001, 1003, 3, 207, 102, 0, 1002, 999, 1, 0, 0, 0, 1002, 1000, 1, 0, 0, 0, 1002, 1001, 1, 0, 0, 0, 1003, 1007, 1, 0, 0, 0, 1004, 1005, 7, 0, 0, 0, 1005, 1008, 7, 1, 0, 0, 1006, 1008, 7, 2, 0, 0, 1007, 1004, 1, 0, 0, 0, 1007, 1006, 1, 0, 0, 0, 1007, 1008, 1, 0, 0, 0, 1008, 206, 1, 0, 0, 0, 1009, 1010, 5, 48, 0, 0, 1010, 1012, 7, 3, 0, 0, 1011, 1013, 3, 213, 105, 0, 1012, 1011, 1, 0, 0, 0, 1013, 1014, 1, 0, 0, 0, 1014, 1012, 1, 0, 0, 0, 1014, 1015, 1, 0, 0, 0, 1015, 1023, 1, 0, 0, 0, 1016, 1018, 5, 37, 0, 0, 1017, 1019, 3, 213, 105, 0, 1018, 1017, 1, 0, 0, 0, 1019, 1020, 1, 0, 0, 0, 1020, 1018, 1, 0, 0, 0, 1020, 1021, 1, 0, 0, 0, 1021, 1023, 1, 0, 0, 0, 1022, 1009, 1, 0, 0, 0, 1022, 1016, 1, 0, 0, 0, 1023, 208, 1, 0, 0, 0, 1024, 1026, 3, 215, 106, 0, 1025, 1024, 1, 0, 0, 0, 1026, 1027, 1, 0, 0, 0, 1027, 1025, 1, 0, 0, 0, 1027, 1028, 1, 0, 0, 0, 1028, 210, 1, 0, 0, 0, 1029, 1035, 5, 36, 0, 0, 1030, 1031, 5, 48, 0, 0, 1031, 1035, 5, 120, 0, 0, 1032, 1033, 5, 48, 0, 0, 1033, 1035, 5, 88, 0, 0, 1034, 1029, 1, 0, 0, 0, 1034, 1030, 1, 0, 0, 0, 1034, 1032, 1, 0, 0, 0, 1035, 1037, 1, 0, 0, 0, 1036, 1038, 3, 217, 107, 0, 1037, 1036, 1, 0, 0, 0, 1038, 1039, 1, 0, 0, 0, 1039, 1037, 1, 0, 0, 0, 1039, 1040, 1, 0, 0, 0, 1040, 212, 1, 0, 0, 0, 1041, 1042, 7, 4, 0, 0, 1042, 214, 1, 0, 0, 0, 1043, 1044, 7, 5, 0, 0, 1044, 216, 1, 0, 0, 0, 1045, 1046, 7, 6, 0, 0, 1046, 218, 1, 0, 0, 0, 1047, 1051, 3, 221, 109, 0, 1048, 1050, 3, 223, 110, 0, 1049, 1048, 1, 0, 0, 0, 1050, 1053, 1, 0, 0, 0, 1051, 1049, 1, 0, 0, 0, 1051, 1052, 1, 0, 0, 0, 1052, 1054, 1, 0, 0, 0, 1053, 1051, 1, 0, 0, 0, 1054, 1055, 6, 108, 4, 0, 1055, 220, 1, 0, 0, 0, 1056, 1057, 7, 7, 0, 0, 1057, 222, 1, 0, 0, 0, 1058, 1059, 7, 8, 0, 0, 1059, 224, 1, 0, 0, 0, 1060, 1066, 5, 34, 0, 0, 1061, 1062, 5, 92, 0, 0, 1062, 1065, 5, 34, 0, 0, 1063, 1065, 8, 9, 0, 0, 1064, 1061, 1, 0, 0, 0, 1064, 1063, 1, 0, 0, 0, 1065, 1068, 1, 0, 0, 0, 1066, 1064, 1, 0, 0, 0, 1066, 1067, 1, 0, 0, 0, 1067, 1069, 1, 0, 0, 0, 1068, 1066, 1, 0, 0, 0, 1069, 1071, 5, 34, 0, 0, 1070, 1072, 7, 10, 0, 0, 1071, 1070, 1, 0, 0, 0, 1071, 1072, 1, 0, 0, 0, 1072, 1077, 1, 0, 0, 0, 1073, 1075, 7, 11, 0, 0, 1074, 1076, 7, 12, 0, 0, 1075, 1074, 1, 0, 0, 0, 1075, 1076, 1, 0, 0, 0, 1076, 1078, 1, 0, 0, 0, 1077, 1073, 1, 0, 0, 0, 1077, 1078, 1, 0, 0, 0, 1078, 1080, 1, 0, 0, 0, 1079, 1081, 7, 10, 0, 0, 1080, 1079, 1, 0, 0, 0, 1080, 1081, 1, 0, 0, 0, 1081, 226, 1, 0, 0, 0, 1082, 1097, 5, 39, 0, 0, 1083, 1094, 5, 92, 0, 0, 1084, 1086, 7, 13, 0, 0, 1085, 1087, 7, 5, 0, 0, 1086, 1085, 1, 0, 0, 0, 1086, 1087, 1, 0, 0, 0, 1087, 1089, 1, 0, 0, 0, 1088, 1090, 7, 5, 0, 0, 1089, 1088, 1, 0, 0, 0, 1089, 1090, 1, 0, 0, 0, 1090, 1095, 1, 0, 0, 0, 1091, 1092, 5, 120, 0, 0, 1092, 1093, 7, 14, 0, 0, 1093, 1095, 7, 14, 0, 0, 1094, 1084, 1, 0, 0, 0, 1094, 1091, 1, 0, 0, 0, 1095, 1098, 1, 0, 0, 0, 1096, 1098, 8, 15, 0, 0, 1097, 1083, 1, 0, 0, 0, 1097, 1096, 1, 0, 0, 0, 1098, 1099, 1, 0, 0, 0, 1099, 1100, 5, 39, 0, 0, 1100, 228, 1, 0, 0, 0, 1101, 1103, 7, 16, 0, 0, 1102, 1101, 1, 0, 0, 0, 1103, 1104, 1, 0, 0, 0, 1104, 1102, 1, 0, 0, 0, 1104, 1105, 1, 0, 0, 0, 1105, 1106, 1, 0, 0, 0, 1106, 1107, 6, 113, 5, 0, 1107, 230, 1, 0, 0, 0, 1108, 1109, 5, 47, 0, 0, 1109, 1110, 5, 47, 0, 0, 1110, 1114, 1, 0, 0, 0, 1111, 1113, 8, 17, 0, 0, 1112, 1111, 1, 0, 0, 0, 1113, 1116, 1, 0, 0, 0, 1114, 1112, 1, 0, 0, 0, 1114, 1115, 1, 0, 0, 0, 1115, 1117, 1, 0, 0, 0, 1116, 1114, 1, 0, 0, 0, 1117, 1118, 6, 114, 6, 0, 1118, 232, 1, 0, 0, 0, 1119, 1120, 5, 47, 0, 0, 1120, 1121, 5, 42, 0, 0, 1121, 1125, 1, 0, 0, 0, 1122, 1124, 9, 0, 0, 0, 1123, 1122, 1, 0, 0, 0, 1124, 1127, 1, 0, 0, 0, 1125, 1126, 1, 0, 0, 0, 1125, 1123, 1, 0, 0, 0, 1126, 1128, 1, 0, 0, 0, 1127, 1125, 1, 0, 0, 0, 1128, 1129, 5, 42, 0, 0, 1129, 1130, 5, 47, 0, 0, 1130, 1131, 1, 0, 0, 0, 1131, 1132, 6, 115, 6, 0, 1132, 234, 1, 0, 0, 0, 1133, 1134, 5, 46, 0, 0, 1134, 1135, 5, 98, 0, 0, 1135, 1136, 5, 121, 0, 0, 1136, 1137, 5, 116, 0, 0, 1137, 1138, 5, 101, 0, 0, 1138, 236, 1, 0, 0, 0, 1139, 1140, 5, 98, 0, 0, 1140, 1141, 5, 114, 0, 0, 1141, 1747, 5, 107, 0, 0, 1142, 1143, 5, 111, 0, 0, 1143, 1144, 5, 114, 0, 0, 1144, 1747, 5, 97, 0, 0, 1145, 1146, 5, 107, 0, 0, 1146, 1147, 5, 105, 0, 0, 1147, 1747, 5, 108, 0, 0, 1148, 1149, 5, 115, 0, 0, 1149, 1150, 5, 108, 0, 0, 1150, 1747, 5, 111, 0, 0, 1151, 1152, 5, 110, 0, 0, 1152, 1153, 5, 111, 0, 0, 1153, 1747, 5, 112, 0, 0, 1154, 1155, 5, 97, 0, 0, 1155, 1156, 5, 115, 0, 0, 1156, 1747, 5, 108, 0, 0, 1157, 1158, 5, 112, 0, 0, 1158, 1159, 5, 104, 0, 0, 1159, 1747, 5, 112, 0, 0, 1160, 1161, 5, 97, 0, 0, 1161, 1162, 5, 110, 0, 0, 1162, 1747, 5, 99, 0, 0, 1163, 1164, 5, 98, 0, 0, 1164, 1165, 5, 112, 0, 0, 1165, 1747, 5, 108, 0, 0, 1166, 1167, 5, 99, 0, 0, 1167, 1168, 5, 108, 0, 0, 1168, 1747, 5, 99, 0, 0, 1169, 1170, 5, 106, 0, 0, 1170, 1171, 5, 115, 0, 0, 1171, 1747, 5, 114, 0, 0, 1172, 1173, 5, 97, 0, 0, 1173, 1174, 5, 110, 0, 0, 1174, 1747, 5, 100, 0, 0, 1175, 1176, 5, 114, 0, 0, 1176, 1177, 5, 108, 0, 0, 1177, 1747, 5, 97, 0, 0, 1178, 1179, 5, 98, 0, 0, 1179, 1180, 5, 105, 0, 0, 1180, 1747, 5, 116, 0, 0, 1181, 1182, 5, 114, 0, 0, 1182, 1183, 5, 111, 0, 0, 1183, 1747, 5, 108, 0, 0, 1184, 1185, 5, 112, 0, 0, 1185, 1186, 5, 108, 0, 0, 1186, 1747, 5, 97, 0, 0, 1187, 1188, 5, 112, 0, 0, 1188, 1189, 5, 108, 0, 0, 1189, 1747, 5, 112, 0, 0, 1190, 1191, 5, 98, 0, 0, 1191, 1192, 5, 109, 0, 0, 1192, 1747, 5, 105, 0, 0, 1193, 1194, 5, 115, 0, 0, 1194, 1195, 5, 101, 0, 0, 1195, 1747, 5, 99, 0, 0, 1196, 1197, 5, 114, 0, 0, 1197, 1198, 5, 116, 0, 0, 1198, 1747, 5, 105, 0, 0, 1199, 1200, 5, 101, 0, 0, 1200, 1201, 5, 111, 0, 0, 1201, 1747, 5, 114, 0, 0, 1202, 1203, 5, 115, 0, 0, 1203, 1204, 5, 114, 0, 0, 1204, 1747, 5, 101, 0, 0, 1205, 1206, 5, 108, 0, 0, 1206, 1207, 5, 115, 0, 0, 1207, 1747, 5, 114, 0, 0, 1208, 1209, 5, 112, 0, 0, 1209, 1210, 5, 104, 0, 0, 1210, 1747, 5, 97, 0, 0, 1211, 1212, 5, 97, 0, 0, 1212, 1213, 5, 108, 0, 0, 1213, 1747, 5, 114, 0, 0, 1214, 1215, 5, 106, 0, 0, 1215, 1216, 5, 109, 0, 0, 1216, 1747, 5, 112, 0, 0, 1217, 1218, 5, 98, 0, 0, 1218, 1219, 5, 118, 0, 0, 1219, 1747, 5, 99, 0, 0, 1220, 1221, 5, 99, 0, 0, 1221, 1222, 5, 108, 0, 0, 1222, 1747, 5, 105, 0, 0, 1223, 1224, 5, 114, 0, 0, 1224, 1225, 5, 116, 0, 0, 1225, 1747, 5, 115, 0, 0, 1226, 1227, 5, 97, 0, 0, 1227, 1228, 5, 100, 0, 0, 1228, 1747, 5, 99, 0, 0, 1229, 1230, 5, 114, 0, 0, 1230, 1231, 5, 114, 0, 0, 1231, 1747, 5, 97, 0, 0, 1232, 1233, 5, 98, 0, 0, 1233, 1234, 5, 118, 0, 0, 1234, 1747, 5, 115, 0, 0, 1235, 1236, 5, 115, 0, 0, 1236, 1237, 5, 101, 0, 0, 1237, 1747, 5, 105, 0, 0, 1238, 1239, 5, 115, 0, 0, 1239, 1240, 5, 97, 0, 0, 1240, 1747, 5, 120, 0, 0, 1241, 1242, 5, 115, 0, 0, 1242, 1243, 5, 116, 0, 0, 1243, 1747, 5, 121, 0, 0, 1244, 1245, 5, 115, 0, 0, 1245, 1246, 5, 116, 0, 0, 1246, 1747, 5, 97, 0, 0, 1247, 1248, 5, 115, 0, 0, 1248, 1249, 5, 116, 0, 0, 1249, 1747, 5, 120, 0, 0, 1250, 1251, 5, 100, 0, 0, 1251, 1252, 5, 101, 0, 0, 1252, 1747, 5, 121, 0, 0, 1253, 1254, 5, 116, 0, 0, 1254, 1255, 5, 120, 0, 0, 1255, 1747, 5, 97, 0, 0, 1256, 1257, 5, 120, 0, 0, 1257, 1258, 5, 97, 0, 0, 1258, 1747, 5, 97, 0, 0, 1259, 1260, 5, 98, 0, 0, 1260, 1261, 5, 99, 0, 0, 1261, 1747, 5, 99, 0, 0, 1262, 1263, 5, 97, 0, 0, 1263, 1264, 5, 104, 0, 0, 1264, 1747, 5, 120, 0, 0, 1265, 1266, 5, 116, 0, 0, 1266, 1267, 5, 121, 0, 0, 1267, 1747, 5, 97, 0, 0, 1268, 1269, 5, 116, 0, 0, 1269, 1270, 5, 120, 0, 0, 1270, 1747, 5, 115, 0, 0, 1271, 1272, 5, 116, 0, 0, 1272, 1273, 5, 97, 0, 0, 1273, 1747, 5, 115, 0, 0, 1274, 1275, 5, 115, 0, 0, 1275, 1276, 5, 104, 0, 0, 1276, 1747, 5, 121, 0, 0, 1277, 1278, 5, 115, 0, 0, 1278, 1279, 5, 104, 0, 0, 1279, 1747, 5, 120, 0, 0, 1280, 1281, 5, 108, 0, 0, 1281, 1282, 5, 100, 0, 0, 1282, 1747, 5, 121, 0, 0, 1283, 1284, 5, 108, 0, 0, 1284, 1285, 5, 100, 0, 0, 1285, 1747, 5, 97, 0, 0, 1286, 1287, 5, 108, 0, 0, 1287, 1288, 5, 100, 0, 0, 1288, 1747, 5, 120, 0, 0, 1289, 1290, 5, 108, 0, 0, 1290, 1291, 5, 97, 0, 0, 1291, 1747, 5, 120, 0, 0, 1292, 1293, 5, 116, 0, 0, 1293, 1294, 5, 97, 0, 0, 1294, 1747, 5, 121, 0, 0, 1295, 1296, 5, 116, 0, 0, 1296, 1297, 5, 97, 0, 0, 1297, 1747, 5, 120, 0, 0, 1298, 1299, 5, 98, 0, 0, 1299, 1300, 5, 99, 0, 0, 1300, 1747, 5, 115, 0, 0, 1301, 1302, 5, 99, 0, 0, 1302, 1303, 5, 108, 0, 0, 1303, 1747, 5, 118, 0, 0, 1304, 1305, 5, 116, 0, 0, 1305, 1306, 5, 115, 0, 0, 1306, 1747, 5, 120, 0, 0, 1307, 1308, 5, 108, 0, 0, 1308, 1309, 5, 97, 0, 0, 1309, 1747, 5, 115, 0, 0, 1310, 1311, 5, 99, 0, 0, 1311, 1312, 5, 112, 0, 0, 1312, 1747, 5, 121, 0, 0, 1313, 1314, 5, 99, 0, 0, 1314, 1315, 5, 109, 0, 0, 1315, 1747, 5, 112, 0, 0, 1316, 1317, 5, 99, 0, 0, 1317, 1318, 5, 112, 0, 0, 1318, 1747, 5, 120, 0, 0, 1319, 1320, 5, 100, 0, 0, 1320, 1321, 5, 99, 0, 0, 1321, 1747, 5, 112, 0, 0, 1322, 1323, 5, 100, 0, 0, 1323, 1324, 5, 101, 0, 0, 1324, 1747, 5, 99, 0, 0, 1325, 1326, 5, 105, 0, 0, 1326, 1327, 5, 110, 0, 0, 1327, 1747, 5, 99, 0, 0, 1328, 1329, 5, 97, 0, 0, 1329, 1330, 5, 120, 0, 0, 1330, 1747, 5, 115, 0, 0, 1331, 1332, 5, 98, 0, 0, 1332, 1333, 5, 110, 0, 0, 1333, 1747, 5, 101, 0, 0, 1334, 1335, 5, 99, 0, 0, 1335, 1336, 5, 108, 0, 0, 1336, 1747, 5, 100, 0, 0, 1337, 1338, 5, 115, 0, 0, 1338, 1339, 5, 98, 0, 0, 1339, 1747, 5, 99, 0, 0, 1340, 1341, 5, 105, 0, 0, 1341, 1342, 5, 115, 0, 0, 1342, 1747, 5, 99, 0, 0, 1343, 1344, 5, 105, 0, 0, 1344, 1345, 5, 110, 0, 0, 1345, 1747, 5, 120, 0, 0, 1346, 1347, 5, 98, 0, 0, 1347, 1348, 5, 101, 0, 0, 1348, 1747, 5, 113, 0, 0, 1349, 1350, 5, 115, 0, 0, 1350, 1351, 5, 101, 0, 0, 1351, 1747, 5, 100, 0, 0, 1352, 1353, 5, 100, 0, 0, 1353, 1354, 5, 101, 0, 0, 1354, 1747, 5, 120, 0, 0, 1355, 1356, 5, 105, 0, 0, 1356, 1357, 5, 110, 0, 0, 1357, 1747, 5, 121, 0, 0, 1358, 1359, 5, 114, 0, 0, 1359, 1360, 5, 111, 0, 0, 1360, 1747, 5, 114, 0, 0, 1361, 1362, 5, 98, 0, 0, 1362, 1363, 5, 98, 0, 0, 1363, 1364, 5, 114, 0, 0, 1364, 1747, 5, 48, 0, 0, 1365, 1366, 5, 98, 0, 0, 1366, 1367, 5, 98, 0, 0, 1367, 1368, 5, 114, 0, 0, 1368, 1747, 5, 49, 0, 0, 1369, 1370, 5, 98, 0, 0, 1370, 1371, 5, 98, 0, 0, 1371, 1372, 5, 114, 0, 0, 1372, 1747, 5, 50, 0, 0, 1373, 1374, 5, 98, 0, 0, 1374, 1375, 5, 98, 0, 0, 1375, 1376, 5, 114, 0, 0, 1376, 1747, 5, 51, 0, 0, 1377, 1378, 5, 98, 0, 0, 1378, 1379, 5, 98, 0, 0, 1379, 1380, 5, 114, 0, 0, 1380, 1747, 5, 52, 0, 0, 1381, 1382, 5, 98, 0, 0, 1382, 1383, 5, 98, 0, 0, 1383, 1384, 5, 114, 0, 0, 1384, 1747, 5, 53, 0, 0, 1385, 1386, 5, 98, 0, 0, 1386, 1387, 5, 98, 0, 0, 1387, 1388, 5, 114, 0, 0, 1388, 1747, 5, 54, 0, 0, 1389, 1390, 5, 98, 0, 0, 1390, 1391, 5, 98, 0, 0, 1391, 1392, 5, 114, 0, 0, 1392, 1747, 5, 55, 0, 0, 1393, 1394, 5, 98, 0, 0, 1394, 1395, 5, 98, 0, 0, 1395, 1396, 5, 115, 0, 0, 1396, 1747, 5, 48, 0, 0, 1397, 1398, 5, 98, 0, 0, 1398, 1399, 5, 98, 0, 0, 1399, 1400, 5, 115, 0, 0, 1400, 1747, 5, 49, 0, 0, 1401, 1402, 5, 98, 0, 0, 1402, 1403, 5, 98, 0, 0, 1403, 1404, 5, 115, 0, 0, 1404, 1747, 5, 50, 0, 0, 1405, 1406, 5, 98, 0, 0, 1406, 1407, 5, 98, 0, 0, 1407, 1408, 5, 115, 0, 0, 1408, 1747, 5, 51, 0, 0, 1409, 1410, 5, 98, 0, 0, 1410, 1411, 5, 98, 0, 0, 1411, 1412, 5, 115, 0, 0, 1412, 1747, 5, 52, 0, 0, 1413, 1414, 5, 98, 0, 0, 1414, 1415, 5, 98, 0, 0, 1415, 1416, 5, 115, 0, 0, 1416, 1747, 5, 53, 0, 0, 1417, 1418, 5, 98, 0, 0, 1418, 1419, 5, 98, 0, 0, 1419, 1420, 5, 115, 0, 0, 1420, 1747, 5, 54, 0, 0, 1421, 1422, 5, 98, 0, 0, 1422, 1423, 5, 98, 0, 0, 1423, 1424, 5, 115, 0, 0, 1424, 1747, 5, 55, 0, 0, 1425, 1426, 5, 98, 0, 0, 1426, 1427, 5, 114, 0, 0, 1427, 1747, 5, 97, 0, 0, 1428, 1429, 5, 112, 0, 0, 1429, 1430, 5, 104, 0, 0, 1430, 1747, 5, 120, 0, 0, 1431, 1432, 5, 112, 0, 0, 1432, 1433, 5, 104, 0, 0, 1433, 1747, 5, 121, 0, 0, 1434, 1435, 5, 112, 0, 0, 1435, 1436, 5, 108, 0, 0, 1436, 1747, 5, 120, 0, 0, 1437, 1438, 5, 112, 0, 0, 1438, 1439, 5, 108, 0, 0, 1439, 1747, 5, 121, 0, 0, 1440, 1441, 5, 114, 0, 0, 1441, 1442, 5, 109, 0, 0, 1442, 1443, 5, 98, 0, 0, 1443, 1747, 5, 48, 0, 0, 1444, 1445, 5, 114, 0, 0, 1445, 1446, 5, 109, 0, 0, 1446, 1447, 5, 98, 0, 0, 1447, 1747, 5, 49, 0, 0, 1448, 1449, 5, 114, 0, 0, 1449, 1450, 5, 109, 0, 0, 1450, 1451, 5, 98, 0, 0, 1451, 1747, 5, 50, 0, 0, 1452, 1453, 5, 114, 0, 0, 1453, 1454, 5, 109, 0, 0, 1454, 1455, 5, 98, 0, 0, 1455, 1747, 5, 51, 0, 0, 1456, 1457, 5, 114, 0, 0, 1457, 1458, 5, 109, 0, 0, 1458, 1459, 5, 98, 0, 0, 1459, 1747, 5, 52, 0, 0, 1460, 1461, 5, 114, 0, 0, 1461, 1462, 5, 109, 0, 0, 1462, 1463, 5, 98, 0, 0, 1463, 1747, 5, 53, 0, 0, 1464, 1465, 5, 114, 0, 0, 1465, 1466, 5, 109, 0, 0, 1466, 1467, 5, 98, 0, 0, 1467, 1747, 5, 54, 0, 0, 1468, 1469, 5, 114, 0, 0, 1469, 1470, 5, 109, 0, 0, 1470, 1471, 5, 98, 0, 0, 1471, 1747, 5, 55, 0, 0, 1472, 1473, 5, 115, 0, 0, 1473, 1474, 5, 109, 0, 0, 1474, 1475, 5, 98, 0, 0, 1475, 1747, 5, 48, 0, 0, 1476, 1477, 5, 115, 0, 0, 1477, 1478, 5, 109, 0, 0, 1478, 1479, 5, 98, 0, 0, 1479, 1747, 5, 49, 0, 0, 1480, 1481, 5, 115, 0, 0, 1481, 1482, 5, 109, 0, 0, 1482, 1483, 5, 98, 0, 0, 1483, 1747, 5, 50, 0, 0, 1484, 1485, 5, 115, 0, 0, 1485, 1486, 5, 109, 0, 0, 1486, 1487, 5, 98, 0, 0, 1487, 1747, 5, 51, 0, 0, 1488, 1489, 5, 115, 0, 0, 1489, 1490, 5, 109, 0, 0, 1490, 1491, 5, 98, 0, 0, 1491, 1747, 5, 52, 0, 0, 1492, 1493, 5, 115, 0, 0, 1493, 1494, 5, 109, 0, 0, 1494, 1495, 5, 98, 0, 0, 1495, 1747, 5, 53, 0, 0, 1496, 1497, 5, 115, 0, 0, 1497, 1498, 5, 109, 0, 0, 1498, 1499, 5, 98, 0, 0, 1499, 1747, 5, 54, 0, 0, 1500, 1501, 5, 115, 0, 0, 1501, 1502, 5, 109, 0, 0, 1502, 1503, 5, 98, 0, 0, 1503, 1747, 5, 55, 0, 0, 1504, 1505, 5, 115, 0, 0, 1505, 1506, 5, 116, 0, 0, 1506, 1747, 5, 112, 0, 0, 1507, 1508, 5, 115, 0, 0, 1508, 1509, 5, 116, 0, 0, 1509, 1747, 5, 122, 0, 0, 1510, 1511, 5, 116, 0, 0, 1511, 1512, 5, 114, 0, 0, 1512, 1747, 5, 98, 0, 0, 1513, 1514, 5, 116, 0, 0, 1514, 1515, 5, 115, 0, 0, 1515, 1747, 5, 98, 0, 0, 1516, 1517, 5, 119, 0, 0, 1517, 1518, 5, 97, 0, 0, 1518, 1747, 5, 105, 0, 0, 1519, 1520, 5, 99, 0, 0, 1520, 1521, 5, 108, 0, 0, 1521, 1747, 5, 101, 0, 0, 1522, 1523, 5, 115, 0, 0, 1523, 1524, 5, 101, 0, 0, 1524, 1747, 5, 101, 0, 0, 1525, 1526, 5, 116, 0, 0, 1526, 1527, 5, 115, 0, 0, 1527, 1747, 5, 121, 0, 0, 1528, 1529, 5, 108, 0, 0, 1529, 1530, 5, 98, 0, 0, 1530, 1531, 5, 112, 0, 0, 1531, 1747, 5, 108, 0, 0, 1532, 1533, 5, 105, 0, 0, 1533, 1534, 5, 110, 0, 0, 1534, 1747, 5, 122, 0, 0, 1535, 1536, 5, 116, 0, 0, 1536, 1537, 5, 121, 0, 0, 1537, 1747, 5, 115, 0, 0, 1538, 1539, 5, 108, 0, 0, 1539, 1540, 5, 98, 0, 0, 1540, 1541, 5, 109, 0, 0, 1541, 1747, 5, 105, 0, 0, 1542, 1543, 5, 100, 0, 0, 1543, 1544, 5, 101, 0, 0, 1544, 1747, 5, 122, 0, 0, 1545, 1546, 5, 110, 0, 0, 1546, 1547, 5, 101, 0, 0, 1547, 1747, 5, 103, 0, 0, 1548, 1549, 5, 97, 0, 0, 1549, 1550, 5, 115, 0, 0, 1550, 1747, 5, 114, 0, 0, 1551, 1552, 5, 116, 0, 0, 1552, 1553, 5, 97, 0, 0, 1553, 1747, 5, 122, 0, 0, 1554, 1555, 5, 108, 0, 0, 1555, 1556, 5, 98, 0, 0, 1556, 1557, 5, 118, 0, 0, 1557, 1747, 5, 99, 0, 0, 1558, 1559, 5, 116, 0, 0, 1559, 1560, 5, 97, 0, 0, 1560, 1747, 5, 98, 0, 0, 1561, 1562, 5, 109, 0, 0, 1562, 1563, 5, 97, 0, 0, 1563, 1747, 5, 112, 0, 0, 1564, 1565, 5, 114, 0, 0, 1565, 1566, 5, 116, 0, 0, 1566, 1747, 5, 110, 0, 0, 1567, 1568, 5, 108, 0, 0, 1568, 1569, 5, 98, 0, 0, 1569, 1570, 5, 115, 0, 0, 1570, 1747, 5, 114, 0, 0, 1571, 1572, 5, 116, 0, 0, 1572, 1573, 5, 122, 0, 0, 1573, 1747, 5, 97, 0, 0, 1574, 1575, 5, 108, 0, 0, 1575, 1576, 5, 98, 0, 0, 1576, 1577, 5, 118, 0, 0, 1577, 1747, 5, 115, 0, 0, 1578, 1579, 5, 116, 0, 0, 1579, 1580, 5, 98, 0, 0, 1580, 1747, 5, 97, 0, 0, 1581, 1582, 5, 108, 0, 0, 1582, 1583, 5, 98, 0, 0, 1583, 1584, 5, 114, 0, 0, 1584, 1747, 5, 97, 0, 0, 1585, 1586, 5, 108, 0, 0, 1586, 1587, 5, 98, 0, 0, 1587, 1588, 5, 99, 0, 0, 1588, 1747, 5, 99, 0, 0, 1589, 1590, 5, 108, 0, 0, 1590, 1591, 5, 100, 0, 0, 1591, 1747, 5, 122, 0, 0, 1592, 1593, 5, 108, 0, 0, 1593, 1594, 5, 98, 0, 0, 1594, 1595, 5, 99, 0, 0, 1595, 1747, 5, 115, 0, 0, 1596, 1597, 5, 99, 0, 0, 1597, 1598, 5, 112, 0, 0, 1598, 1747, 5, 122, 0, 0, 1599, 1600, 5, 100, 0, 0, 1600, 1601, 5, 101, 0, 0, 1601, 1747, 5, 119, 0, 0, 1602, 1603, 5, 97, 0, 0, 1603, 1604, 5, 115, 0, 0, 1604, 1747, 5, 119, 0, 0, 1605, 1606, 5, 108, 0, 0, 1606, 1607, 5, 98, 0, 0, 1607, 1608, 5, 110, 0, 0, 1608, 1747, 5, 101, 0, 0, 1609, 1610, 5, 112, 0, 0, 1610, 1611, 5, 104, 0, 0, 1611, 1747, 5, 122, 0, 0, 1612, 1613, 5, 105, 0, 0, 1613, 1614, 5, 110, 0, 0, 1614, 1747, 5, 119, 0, 0, 1615, 1616, 5, 114, 0, 0, 1616, 1617, 5, 111, 0, 0, 1617, 1747, 5, 119, 0, 0, 1618, 1619, 5, 108, 0, 0, 1619, 1620, 5, 98, 0, 0, 1620, 1621, 5, 101, 0, 0, 1621, 1747, 5, 113, 0, 0, 1622, 1623, 5, 112, 0, 0, 1623, 1624, 5, 104, 0, 0, 1624, 1747, 5, 119, 0, 0, 1625, 1626, 5, 112, 0, 0, 1626, 1627, 5, 108, 0, 0, 1627, 1747, 5, 122, 0, 0, 1628, 1629, 5, 101, 0, 0, 1629, 1630, 5, 111, 0, 0, 1630, 1747, 5, 109, 0, 0, 1631, 1632, 5, 97, 0, 0, 1632, 1633, 5, 100, 0, 0, 1633, 1634, 5, 99, 0, 0, 1634, 1747, 5, 113, 0, 0, 1635, 1636, 5, 97, 0, 0, 1636, 1637, 5, 110, 0, 0, 1637, 1638, 5, 100, 0, 0, 1638, 1747, 5, 113, 0, 0, 1639, 1640, 5, 97, 0, 0, 1640, 1641, 5, 115, 0, 0, 1641, 1642, 5, 108, 0, 0, 1642, 1747, 5, 113, 0, 0, 1643, 1644, 5, 97, 0, 0, 1644, 1645, 5, 115, 0, 0, 1645, 1646, 5, 114, 0, 0, 1646, 1747, 5, 113, 0, 0, 1647, 1648, 5, 98, 0, 0, 1648, 1649, 5, 105, 0, 0, 1649, 1650, 5, 116, 0, 0, 1650, 1747, 5, 113, 0, 0, 1651, 1652, 5, 99, 0, 0, 1652, 1653, 5, 112, 0, 0, 1653, 1747, 5, 113, 0, 0, 1654, 1655, 5, 100, 0, 0, 1655, 1656, 5, 101, 0, 0, 1656, 1747, 5, 113, 0, 0, 1657, 1658, 5, 101, 0, 0, 1658, 1659, 5, 111, 0, 0, 1659, 1660, 5, 114, 0, 0, 1660, 1747, 5, 113, 0, 0, 1661, 1662, 5, 105, 0, 0, 1662, 1663, 5, 110, 0, 0, 1663, 1747, 5, 113, 0, 0, 1664, 1665, 5, 108, 0, 0, 1665, 1666, 5, 100, 0, 0, 1666, 1747, 5, 113, 0, 0, 1667, 1668, 5, 108, 0, 0, 1668, 1669, 5, 115, 0, 0, 1669, 1670, 5, 114, 0, 0, 1670, 1747, 5, 113, 0, 0, 1671, 1672, 5, 111, 0, 0, 1672, 1673, 5, 114, 0, 0, 1673, 1747, 5, 113, 0, 0, 1674, 1675, 5, 114, 0, 0, 1675, 1676, 5, 111, 0, 0, 1676, 1677, 5, 108, 0, 0, 1677, 1747, 5, 113, 0, 0, 1678, 1679, 5, 114, 0, 0, 1679, 1680, 5, 111, 0, 0, 1680, 1681, 5, 114, 0, 0, 1681, 1747, 5, 113, 0, 0, 1682, 1683, 5, 115, 0, 0, 1683, 1684, 5, 98, 0, 0, 1684, 1685, 5, 99, 0, 0, 1685, 1747, 5, 113, 0, 0, 1686, 1687, 5, 115, 0, 0, 1687, 1688, 5, 116, 0, 0, 1688, 1747, 5, 113, 0, 0, 1689, 1690, 5, 115, 0, 0, 1690, 1691, 5, 120, 0, 0, 1691, 1747, 5, 121, 0, 0, 1692, 1693, 5, 115, 0, 0, 1693, 1694, 5, 116, 0, 0, 1694, 1747, 5, 48, 0, 0, 1695, 1696, 5, 115, 0, 0, 1696, 1697, 5, 116, 0, 0, 1697, 1747, 5, 49, 0, 0, 1698, 1699, 5, 115, 0, 0, 1699, 1700, 5, 116, 0, 0, 1700, 1747, 5, 50, 0, 0, 1701, 1702, 5, 115, 0, 0, 1702, 1703, 5, 97, 0, 0, 1703, 1747, 5, 121, 0, 0, 1704, 1705, 5, 116, 0, 0, 1705, 1706, 5, 109, 0, 0, 1706, 1747, 5, 97, 0, 0, 1707, 1708, 5, 98, 0, 0, 1708, 1709, 5, 115, 0, 0, 1709, 1747, 5, 114, 0, 0, 1710, 1711, 5, 116, 0, 0, 1711, 1712, 5, 97, 0, 0, 1712, 1747, 5, 109, 0, 0, 1713, 1714, 5, 99, 0, 0, 1714, 1715, 5, 115, 0, 0, 1715, 1747, 5, 108, 0, 0, 1716, 1717, 5, 99, 0, 0, 1717, 1718, 5, 108, 0, 0, 1718, 1747, 5, 97, 0, 0, 1719, 1720, 5, 99, 0, 0, 1720, 1721, 5, 108, 0, 0, 1721, 1747, 5, 120, 0, 0, 1722, 1723, 5, 99, 0, 0, 1723, 1724, 5, 108, 0, 0, 1724, 1747, 5, 121, 0, 0, 1725, 1726, 5, 99, 0, 0, 1726, 1727, 5, 115, 0, 0, 1727, 1747, 5, 104, 0, 0, 1728, 1729, 5, 115, 0, 0, 1729, 1730, 5, 101, 0, 0, 1730, 1747, 5, 116, 0, 0, 1731, 1732, 5, 116, 0, 0, 1732, 1733, 5, 115, 0, 0, 1733, 1747, 5, 116, 0, 0, 1734, 1735, 5, 116, 0, 0, 1735, 1736, 5, 105, 0, 0, 1736, 1747, 5, 97, 0, 0, 1737, 1738, 5, 116, 0, 0, 1738, 1739, 5, 100, 0, 0, 1739, 1747, 5, 100, 0, 0, 1740, 1741, 5, 116, 0, 0, 1741, 1742, 5, 105, 0, 0, 1742, 1747, 5, 110, 0, 0, 1743, 1744, 5, 116, 0, 0, 1744, 1745, 5, 105, 0, 0, 1745, 1747, 5, 105, 0, 0, 1746, 1139, 1, 0, 0, 0, 1746, 1142, 1, 0, 0, 0, 1746, 1145, 1, 0, 0, 0, 1746, 1148, 1, 0, 0, 0, 1746, 1151, 1, 0, 0, 0, 1746, 1154, 1, 0, 0, 0, 1746, 1157, 1, 0, 0, 0, 1746, 1160, 1, 0, 0, 0, 1746, 1163, 1, 0, 0, 0, 1746, 1166, 1, 0, 0, 0, 1746, 1169, 1, 0, 0, 0, 1746, 1172, 1, 0, 0, 0, 1746, 1175, 1, 0, 0, 0, 1746, 1178, 1, 0, 0, 0, 1746, 1181, 1, 0, 0, 0, 1746, 1184, 1, 0, 0, 0, 1746, 1187, 1, 0, 0, 0, 1746, 1190, 1, 0, 0, 0, 1746, 1193, 1, 0, 0, 0, 1746, 1196, 1, 0, 0, 0, 1746, 1199, 1, 0, 0, 0, 1746, 1202, 1, 0, 0, 0, 1746, 1205, 1, 0, 0, 0, 1746, 1208, 1, 0, 0, 0, 1746, 1211, 1, 0, 0, 0, 1746, 1214, 1, 0, 0, 0, 1746, 1217, 1, 0, 0, 0, 1746, 1220, 1, 0, 0, 0, 1746, 1223, 1, 0, 0, 0, 1746, 1226, 1, 0, 0, 0, 1746, 1229, 1, 0, 0, 0, 1746, 1232, 1, 0, 0, 0, 1746, 1235, 1, 0, 0, 0, 1746, 1238, 1, 0, 0, 0, 1746, 1241, 1, 0, 0, 0, 1746, 1244, 1, 0, 0, 0, 1746, 1247, 1, 0, 0, 0, 1746, 1250, 1, 0, 0, 0, 1746, 1253, 1, 0, 0, 0, 1746, 1256, 1, 0, 0, 0, 1746, 1259, 1, 0, 0, 0, 1746, 1262, 1, 0, 0, 0, 1746, 1265, 1, 0, 0, 0, 1746, 1268, 1, 0, 0, 0, 1746, 1271, 1, 0, 0, 0, 1746, 1274, 1, 0, 0, 0, 1746, 1277, 1, 0, 0, 0, 1746, 1280, 1, 0, 0, 0, 1746, 1283, 1, 0, 0, 0, 1746, 1286, 1, 0, 0, 0, 1746, 1289, 1, 0, 0, 0, 1746, 1292, 1, 0, 0, 0, 1746, 1295, 1, 0, 0, 0, 1746, 1298, 1, 0, 0, 0, 1746, 1301, 1, 0, 0, 0, 1746, 1304, 1, 0, 0, 0, 1746, 1307, 1, 0, 0, 0, 1746, 1310, 1, 0, 0, 0, 1746, 1313, 1, 0, 0, 0, 1746, 1316, 1, 0, 0, 0, 1746, 1319, 1, 0, 0, 0, 1746, 1322, 1, 0, 0, 0, 1746, 1325, 1, 0, 0, 0, 1746, 1328, 1, 0, 0, 0, 1746, 1331, 1, 0, 0, 0, 1746, 1334, 1, 0, 0, 0, 1746, 1337, 1, 0, 0, 0, 1746, 1340, 1, 0, 0, 0, 1746, 1343, 1, 0, 0, 0, 1746, 1346, 1, 0, 0, 0, 1746, 1349, 1, 0, 0, 0, 1746, 1352, 1, 0, 0, 0, 1746, 1355, 1, 0, 0, 0, 1746, 1358, 1, 0, 0, 0, 1746, 1361, 1, 0, 0, 0, 1746, 1365, 1, 0, 0, 0, 1746, 1369, 1, 0, 0, 0, 1746, 1373, 1, 0, 0, 0, 1746, 1377, 1, 0, 0, 0, 1746, 1381, 1, 0, 0, 0, 1746, 1385, 1, 0, 0, 0, 1746, 1389, 1, 0, 0, 0, 1746, 1393, 1, 0, 0, 0, 1746, 1397, 1, 0, 0, 0, 1746, 1401, 1, 0, 0, 0, 1746, 1405, 1, 0, 0, 0, 1746, 1409, 1, 0, 0, 0, 1746, 1413, 1, 0, 0, 0, 1746, 1417, 1, 0, 0, 0, 1746, 1421, 1, 0, 0, 0, 1746, 1425, 1, 0, 0, 0, 1746, 1428, 1, 0, 0, 0, 1746, 1431, 1, 0, 0, 0, 1746, 1434, 1, 0, 0, 0, 1746, 1437, 1, 0, 0, 0, 1746, 1440, 1, 0, 0, 0, 1746, 1444, 1, 0, 0, 0, 1746, 1448, 1, 0, 0, 0, 1746, 1452, 1, 0, 0, 0, 1746, 1456, 1, 0, 0, 0, 1746, 1460, 1, 0, 0, 0, 1746, 1464, 1, 0, 0, 0, 1746, 1468, 1, 0, 0, 0, 1746, 1472, 1, 0, 0, 0, 1746, 1476, 1, 0, 0, 0, 1746, 1480, 1, 0, 0, 0, 1746, 1484, 1, 0, 0, 0, 1746, 1488, 1, 0, 0, 0, 1746, 1492, 1, 0, 0, 0, 1746, 1496, 1, 0, 0, 0, 1746, 1500, 1, 0, 0, 0, 1746, 1504, 1, 0, 0, 0, 1746, 1507, 1, 0, 0, 0, 1746, 1510, 1, 0, 0, 0, 1746, 1513, 1, 0, 0, 0, 1746, 1516, 1, 0, 0, 0, 1746, 1519, 1, 0, 0, 0, 1746, 1522, 1, 0, 0, 0, 1746, 1525, 1, 0, 0, 0, 1746, 1528, 1, 0, 0, 0, 1746, 1532, 1, 0, 0, 0, 1746, 1535, 1, 0, 0, 0, 1746, 1538, 1, 0, 0, 0, 1746, 1542, 1, 0, 0, 0, 1746, 1545, 1, 0, 0, 0, 1746, 1548, 1, 0, 0, 0, 1746, 1551, 1, 0, 0, 0, 1746, 1554, 1, 0, 0, 0, 1746, 1558, 1, 0, 0, 0, 1746, 1561, 1, 0, 0, 0, 1746, 1564, 1, 0, 0, 0, 1746, 1567, 1, 0, 0, 0, 1746, 1571, 1, 0, 0, 0, 1746, 1574, 1, 0, 0, 0, 1746, 1578, 1, 0, 0, 0, 1746, 1581, 1, 0, 0, 0, 1746, 1585, 1, 0, 0, 0, 1746, 1589, 1, 0, 0, 0, 1746, 1592, 1, 0, 0, 0, 1746, 1596, 1, 0, 0, 0, 1746, 1599, 1, 0, 0, 0, 1746, 1602, 1, 0, 0, 0, 1746, 1605, 1, 0, 0, 0, 1746, 1609, 1, 0, 0, 0, 1746, 1612, 1, 0, 0, 0, 1746, 1615, 1, 0, 0, 0, 1746, 1618, 1, 0, 0, 0, 1746, 1622, 1, 0, 0, 0, 1746, 1625, 1, 0, 0, 0, 1746, 1628, 1, 0, 0, 0, 1746, 1631, 1, 0, 0, 0, 1746, 1635, 1, 0, 0, 0, 1746, 1639, 1, 0, 0, 0, 1746, 1643, 1, 0, 0, 0, 1746, 1647, 1, 0, 0, 0, 1746, 1651, 1, 0, 0, 0, 1746, 1654, 1, 0, 0, 0, 1746, 1657, 1, 0, 0, 0, 1746, 1661, 1, 0, 0, 0, 1746, 1664, 1, 0, 0, 0, 1746, 1667, 1, 0, 0, 0, 1746, 1671, 1, 0, 0, 0, 1746, 1674, 1, 0, 0, 0, 1746, 1678, 1, 0, 0, 0, 1746, 1682, 1, 0, 0, 0, 1746, 1686, 1, 0, 0, 0, 1746, 1689, 1, 0, 0, 0, 1746, 1692, 1, 0, 0, 0, 1746, 1695, 1, 0, 0, 0, 1746, 1698, 1, 0, 0, 0, 1746, 1701, 1, 0, 0, 0, 1746, 1704, 1, 0, 0, 0, 1746, 1707, 1, 0, 0, 0, 1746, 1710, 1, 0, 0, 0, 1746, 1713, 1, 0, 0, 0, 1746, 1716, 1, 0, 0, 0, 1746, 1719, 1, 0, 0, 0, 1746, 1722, 1, 0, 0, 0, 1746, 1725, 1, 0, 0, 0, 1746, 1728, 1, 0, 0, 0, 1746, 1731, 1, 0, 0, 0, 1746, 1734, 1, 0, 0, 0, 1746, 1737, 1, 0, 0, 0, 1746, 1740, 1, 0, 0, 0, 1746, 1743, 1, 0, 0, 0, 1747, 238, 1, 0, 0, 0, 1748, 1749, 5, 35, 0, 0, 1749, 240, 1, 0, 0, 0, 1750, 1751, 5, 58, 0, 0, 1751, 242, 1, 0, 0, 0, 1752, 1753, 5, 44, 0, 0, 1753, 244, 1, 0, 0, 0, 1754, 1755, 5, 40, 0, 0, 1755, 246, 1, 0, 0, 0, 1756, 1757, 5, 41, 0, 0, 1757, 248, 1, 0, 0, 0, 1758, 1759, 5, 91, 0, 0, 1759, 250, 1, 0, 0, 0, 1760, 1761, 5, 93, 0, 0, 1761, 252, 1, 0, 0, 0, 1762, 1763, 5, 46, 0, 0, 1763, 254, 1, 0, 0, 0, 1764, 1765, 5, 60, 0, 0, 1765, 1766, 5, 60, 0, 0, 1766, 256, 1, 0, 0, 0, 1767, 1768, 5, 62, 0, 0, 1768, 1769, 5, 62, 0, 0, 1769, 258, 1, 0, 0, 0, 1770, 1771, 5, 43, 0, 0, 1771, 260, 1, 0, 0, 0, 1772, 1773, 5, 45, 0, 0, 1773, 262, 1, 0, 0, 0, 1774, 1775, 5, 60, 0, 0, 1775, 264, 1, 0, 0, 0, 1776, 1777, 5, 62, 0, 0, 1777, 266, 1, 0, 0, 0, 1778, 1779, 5, 42, 0, 0, 1779, 268, 1, 0, 0, 0, 1780, 1781, 5, 47, 0, 0, 1781, 270, 1, 0, 0, 0, 1782, 1783, 5, 123, 0, 0, 1783, 1784, 6, 134, 7, 0, 1784, 272, 1, 0, 0, 0, 1785, 1786, 5, 125, 0, 0, 1786, 1787, 6, 135, 8, 0, 1787, 274, 1, 0, 0, 0, 1788, 1791, 3, 277, 137, 0, 1789, 1791, 3, 285, 141, 0, 1790, 1788, 1, 0, 0, 0, 1790, 1789, 1, 0, 0, 0, 1791, 276, 1, 0, 0, 0, 1792, 1796, 3, 279, 138, 0, 1793, 1796, 3, 281, 139, 0, 1794, 1796, 3, 283, 140, 0, 1795, 1792, 1, 0, 0, 0, 1795, 1793, 1, 0, 0, 0, 1795, 1794, 1, 0, 0, 0, 1796, 278, 1, 0, 0, 0, 1797, 1801, 5, 37, 0, 0, 1798, 1800, 3, 293, 145, 0, 1799, 1798, 1, 0, 0, 0, 1800, 1803, 1, 0, 0, 0, 1801, 1799, 1, 0, 0, 0, 1801, 1802, 1, 0, 0, 0, 1802, 1804, 1, 0, 0, 0, 1803, 1801, 1, 0, 0, 0, 1804, 1806, 5, 46, 0, 0, 1805, 1807, 3, 293, 145, 0, 1806, 1805, 1, 0, 0, 0, 1807, 1808, 1, 0, 0, 0, 1808, 1806, 1, 0, 0, 0, 1808, 1809, 1, 0, 0, 0, 1809, 280, 1, 0, 0, 0, 1810, 1812, 3, 295, 146, 0, 1811, 1810, 1, 0, 0, 0, 1812, 1815, 1, 0, 0, 0, 1813, 1811, 1, 0, 0, 0, 1813, 1814, 1, 0, 0, 0, 1814, 1816, 1, 0, 0, 0, 1815, 1813, 1, 0, 0, 0, 1816, 1818, 5, 46, 0, 0, 1817, 1819, 3, 295, 146, 0, 1818, 1817, 1, 0, 0, 0, 1819, 1820, 1, 0, 0, 0, 1820, 1818, 1, 0, 0, 0, 1820, 1821, 1, 0, 0, 0, 1821, 282, 1, 0, 0, 0, 1822, 1826, 5, 36, 0, 0, 1823, 1825, 3, 297, 147, 0, 1824, 1823, 1, 0, 0, 0, 1825, 1828, 1, 0, 0, 0, 1826, 1824, 1, 0, 0, 0, 1826, 1827, 1, 0, 0, 0, 1827, 1829, 1, 0, 0, 0, 1828, 1826, 1, 0, 0, 0, 1829, 1831, 5, 46, 0, 0, 1830, 1832, 3, 297, 147, 0, 1831, 1830, 1, 0, 0, 0, 1832, 1833, 1, 0, 0, 0, 1833, 1831, 1, 0, 0, 0, 1833, 1834, 1, 0, 0, 0, 1834, 284, 1, 0, 0, 0, 1835, 1839, 3, 289, 143, 0, 1836, 1839, 3, 291, 144, 0, 1837, 1839, 3, 287, 142, 0, 1838, 1835, 1, 0, 0, 0, 1838, 1836, 1, 0, 0, 0, 1838, 1837, 1, 0, 0, 0, 1839, 286, 1, 0, 0, 0, 1840, 1842, 5, 37, 0, 0, 1841, 1843, 3, 293, 145, 0, 1842, 1841, 1, 0, 0, 0, 1843, 1844, 1, 0, 0, 0, 1844, 1842, 1, 0, 0, 0, 1844, 1845, 1, 0, 0, 0, 1845, 288, 1, 0, 0, 0, 1846, 1848, 3, 295, 146, 0, 1847, 1846, 1, 0, 0, 0, 1848, 1849, 1, 0, 0, 0, 1849, 1847, 1, 0, 0, 0, 1849, 1850, 1, 0, 0, 0, 1850, 290, 1, 0, 0, 0, 1851, 1853, 5, 36, 0, 0, 1852, 1854, 3, 297, 147, 0, 1853, 1852, 1, 0, 0, 0, 1854, 1855, 1, 0, 0, 0, 1855, 1853, 1, 0, 0, 0, 1855, 1856, 1, 0, 0, 0, 1856, 292, 1, 0, 0, 0, 1857, 1858, 7, 4, 0, 0, 1858, 294, 1, 0, 0, 0, 1859, 1860, 7, 5, 0, 0, 1860, 296, 1, 0, 0, 0, 1861, 1862, 7, 6, 0, 0, 1862, 298, 1, 0, 0, 0, 1863, 1867, 5, 39, 0, 0, 1864, 1865, 5, 92, 0, 0, 1865, 1868, 7, 18, 0, 0, 1866, 1868, 8, 15, 0, 0, 1867, 1864, 1, 0, 0, 0, 1867, 1866, 1, 0, 0, 0, 1868, 1869, 1, 0, 0, 0, 1869, 1870, 5, 39, 0, 0, 1870, 300, 1, 0, 0, 0, 1871, 1873, 3, 303, 150, 0, 1872, 1874, 7, 19, 0, 0, 1873, 1872, 1, 0, 0, 0, 1874, 1875, 1, 0, 0, 0, 1875, 1873, 1, 0, 0, 0, 1875, 1876, 1, 0, 0, 0, 1876, 302, 1, 0, 0, 0, 1877, 1881, 5, 33, 0, 0, 1878, 1880, 3, 309, 153, 0, 1879, 1878, 1, 0, 0, 0, 1880, 1883, 1, 0, 0, 0, 1881, 1879, 1, 0, 0, 0, 1881, 1882, 1, 0, 0, 0, 1882, 304, 1, 0, 0, 0, 1883, 1881, 1, 0, 0, 0, 1884, 1888, 3, 307, 152, 0, 1885, 1887, 3, 309, 153, 0, 1886, 1885, 1, 0, 0, 0, 1887, 1890, 1, 0, 0, 0, 1888, 1886, 1, 0, 0, 0, 1888, 1889, 1, 0, 0, 0, 1889, 306, 1, 0, 0, 0, 1890, 1888, 1, 0, 0, 0, 1891, 1892, 7, 7, 0, 0, 1892, 308, 1, 0, 0, 0, 1893, 1894, 7, 8, 0, 0, 1894, 310, 1, 0, 0, 0, 1895, 1896, 5, 64, 0, 0, 1896, 1897, 3, 305, 151, 0, 1897, 312, 1, 0, 0, 0, 1898, 1900, 7, 16, 0, 0, 1899, 1898, 1, 0, 0, 0, 1900, 1901, 1, 0, 0, 0, 1901, 1899, 1, 0, 0, 0, 1901, 1902, 1, 0, 0, 0, 1902, 1903, 1, 0, 0, 0, 1903, 1904, 6, 155, 5, 0, 1904, 314, 1, 0, 0, 0, 1905, 1906, 5, 47, 0, 0, 1906, 1907, 5, 47, 0, 0, 1907, 1911, 1, 0, 0, 0, 1908, 1910, 8, 17, 0, 0, 1909, 1908, 1, 0, 0, 0, 1910, 1913, 1, 0, 0, 0, 1911, 1909, 1, 0, 0, 0, 1911, 1912, 1, 0, 0, 0, 1912, 1914, 1, 0, 0, 0, 1913, 1911, 1, 0, 0, 0, 1914, 1915, 6, 156, 6, 0, 1915, 316, 1, 0, 0, 0, 1916, 1917, 5, 47, 0, 0, 1917, 1918, 5, 42, 0, 0, 1918, 1922, 1, 0, 0, 0, 1919, 1921, 9, 0, 0, 0, 1920, 1919, 1, 0, 0, 0, 1921, 1924, 1, 0, 0, 0, 1922, 1923, 1, 0, 0, 0, 1922, 1920, 1, 0, 0, 0, 1923, 1925, 1, 0, 0, 0, 1924, 1922, 1, 0, 0, 0, 1925, 1926, 5, 42, 0, 0, 1926, 1927, 5, 47, 0, 0, 1927, 1928, 1, 0, 0, 0, 1928, 1929, 6, 157, 6, 0, 1929, 318, 1, 0, 0, 0, 1930, 1932, 5, 60, 0, 0, 1931, 1933, 7, 20, 0, 0, 1932, 1931, 1, 0, 0, 0, 1933, 1934, 1, 0, 0, 0, 1934, 1932, 1, 0, 0, 0, 1934, 1935, 1, 0, 0, 0, 1935, 1936, 1, 0, 0, 0, 1936, 1937, 5, 62, 0, 0, 1937, 1938, 6, 158, 9, 0, 1938, 320, 1, 0, 0, 0, 1939, 1945, 5, 34, 0, 0, 1940, 1941, 5, 92, 0, 0, 1941, 1944, 5, 34, 0, 0, 1942, 1944, 8, 9, 0, 0, 1943, 1940, 1, 0, 0, 0, 1943, 1942, 1, 0, 0, 0, 1944, 1947, 1, 0, 0, 0, 1945, 1943, 1, 0, 0, 0, 1945, 1946, 1, 0, 0, 0, 1946, 1948, 1, 0, 0, 0, 1947, 1945, 1, 0, 0, 0, 1948, 1949, 5, 34, 0, 0, 1949, 1950, 6, 159, 10, 0, 1950, 322, 1, 0, 0, 0, 1951, 1953, 7, 16, 0, 0, 1952, 1951, 1, 0, 0, 0, 1953, 1954, 1, 0, 0, 0, 1954, 1952, 1, 0, 0, 0, 1954, 1955, 1, 0, 0, 0, 1955, 1956, 1, 0, 0, 0, 1956, 1957, 6, 160, 5, 0, 1957, 324, 1, 0, 0, 0, 1958, 1959, 5, 47, 0, 0, 1959, 1960, 5, 47, 0, 0, 1960, 1964, 1, 0, 0, 0, 1961, 1963, 8, 17, 0, 0, 1962, 1961, 1, 0, 0, 0, 1963, 1966, 1, 0, 0, 0, 1964, 1962, 1, 0, 0, 0, 1964, 1965, 1, 0, 0, 0, 1965, 1967, 1, 0, 0, 0, 1966, 1964, 1, 0, 0, 0, 1967, 1968, 6, 161, 6, 0, 1968, 326, 1, 0, 0, 0, 1969, 1970, 5, 47, 0, 0, 1970, 1971, 5, 42, 0, 0, 1971, 1975, 1, 0, 0, 0, 1972, 1974, 9, 0, 0, 0, 1973, 1972, 1, 0, 0, 0, 1974, 1977, 1, 0, 0, 0, 1975, 1976, 1, 0, 0, 0, 1975, 1973, 1, 0, 0, 0, 1976, 1978, 1, 0, 0, 0, 1977, 1975, 1, 0, 0, 0, 1978, 1979, 5, 42, 0, 0, 1979, 1980, 5, 47, 0, 0, 1980, 1981, 1, 0, 0, 0, 1981, 1982, 6, 162, 6, 0, 1982, 328, 1, 0, 0, 0, 67, 0, 1, 2, 438, 636, 813, 824, 832, 880, 942, 947, 954, 959, 966, 971, 978, 985, 990, 997, 1002, 1007, 1014, 1020, 1022, 1027, 1034, 1039, 1051, 1064, 1066, 1071, 1075, 1077, 1080, 1086, 1089, 1094, 1097, 1104, 1114, 1125, 1746, 1790, 1795, 1801, 1808, 1813, 1820, 1826, 1833, 1838, 1844, 1849, 1855, 1867, 1875, 1881, 1888, 1901, 1911, 1922, 1934, 1943, 1945, 1954, 1964, 1975, 11, 1, 0, 0, 1, 67, 1, 1, 81, 2, 1, 82, 3, 1, 108, 4, 0, 1, 0, 0, 2, 0, 1, 134, 5, 1, 135, 6, 1, 158, 7, 1, 159, 8] \ No newline at end of file diff --git a/gen/KickCLexer.java b/gen/KickCLexer.java deleted file mode 100644 index 4bfb13a32..000000000 --- a/gen/KickCLexer.java +++ /dev/null @@ -1,1602 +0,0 @@ -// Generated from D:/Users/svenv/OneDrive/Documents/GitHub/kickc/src/main/antlr4/dk/camelot64/kickc/parser\KickCLexer.g4 by ANTLR 4.10.1 - - -import org.antlr.v4.runtime.Lexer; -import org.antlr.v4.runtime.CharStream; -import org.antlr.v4.runtime.Token; -import org.antlr.v4.runtime.TokenStream; -import org.antlr.v4.runtime.*; -import org.antlr.v4.runtime.atn.*; -import org.antlr.v4.runtime.dfa.DFA; -import org.antlr.v4.runtime.misc.*; - -@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"}) -public class KickCLexer extends Lexer { - static { RuntimeMetaData.checkVersion("4.10.1", RuntimeMetaData.VERSION); } - - protected static final DFA[] _decisionToDFA; - protected static final PredictionContextCache _sharedContextCache = - new PredictionContextCache(); - public static final int - TYPEDEFNAME=1, CURLY_BEGIN=2, CURLY_END=3, BRACKET_BEGIN=4, BRACKET_END=5, - PAR_BEGIN=6, PAR_END=7, SEMICOLON=8, COLON=9, COMMA=10, RANGE=11, PARAM_LIST=12, - CONDITION=13, DOT=14, ARROW=15, PLUS=16, MINUS=17, ASTERISK=18, DIVIDE=19, - MODULO=20, INC=21, DEC=22, AND=23, BIT_NOT=24, BIT_XOR=25, BIT_OR=26, - SHIFT_LEFT=27, SHIFT_RIGHT=28, EQUAL=29, NOT_EQUAL=30, LESS_THAN=31, LESS_THAN_EQUAL=32, - GREATER_THAN_EQUAL=33, GREATER_THAN=34, LOGIC_AND=35, LOGIC_OR=36, ASSIGN=37, - ASSIGN_COMPOUND=38, TYPEDEF=39, CONST=40, EXTERN=41, EXPORT=42, ALIGN=43, - INLINE=44, VOLATILE=45, STATIC=46, INTERRUPT=47, REGISTER=48, LOCAL_RESERVE=49, - ADDRESS=50, ADDRESS_ZEROPAGE=51, ADDRESS_MAINMEM=52, FAR=53, NEAR=54, - FORM_SSA=55, FORM_MA=56, INTRINSIC=57, CALLINGCONVENTION=58, IF=59, ELSE=60, - WHILE=61, DO=62, FOR=63, SWITCH=64, RETURN=65, BREAK=66, CONTINUE=67, - GOTO=68, ASM=69, DEFAULT=70, CASE=71, STRUCT=72, UNION=73, ENUM=74, SIZEOF=75, - TYPEID=76, DEFINED=77, KICKASM=78, LOGIC_NOT=79, SIMPLETYPE=80, BOOLEAN=81, - KICKASM_BODY=82, IMPORT=83, INCLUDE=84, PRAGMA=85, DEFINE=86, DEFINE_CONTINUE=87, - UNDEF=88, IFDEF=89, IFNDEF=90, IFIF=91, ELIF=92, IFELSE=93, ENDIF=94, - ERROR=95, TOKEN_STRINGIZE=96, TOKEN_MERGE=97, NUMBER=98, NUMFLOAT=99, - BINFLOAT=100, DECFLOAT=101, HEXFLOAT=102, NUMINT=103, BININTEGER=104, - DECINTEGER=105, HEXINTEGER=106, NAME=107, STRING=108, CHAR=109, WS=110, - COMMENT_LINE=111, COMMENT_BLOCK=112, ASM_BYTE=113, ASM_MNEMONIC=114, ASM_IMM=115, - ASM_COLON=116, ASM_COMMA=117, ASM_PAR_BEGIN=118, ASM_PAR_END=119, ASM_BRACKET_BEGIN=120, - ASM_BRACKET_END=121, ASM_DOT=122, ASM_SHIFT_LEFT=123, ASM_SHIFT_RIGHT=124, - ASM_PLUS=125, ASM_MINUS=126, ASM_LESS_THAN=127, ASM_GREATER_THAN=128, - ASM_MULTIPLY=129, ASM_DIVIDE=130, ASM_CURLY_BEGIN=131, ASM_CURLY_END=132, - ASM_NUMBER=133, ASM_NUMFLOAT=134, ASM_BINFLOAT=135, ASM_DECFLOAT=136, - ASM_HEXFLOAT=137, ASM_NUMINT=138, ASM_BININTEGER=139, ASM_DECINTEGER=140, - ASM_HEXINTEGER=141, ASM_CHAR=142, ASM_MULTI_REL=143, ASM_MULTI_NAME=144, - ASM_NAME=145, ASM_TAG=146, ASM_WS=147, ASM_COMMENT_LINE=148, ASM_COMMENT_BLOCK=149, - IMPORT_SYSTEMFILE=150, IMPORT_LOCALFILE=151, IMPORT_WS=152, IMPORT_COMMENT_LINE=153, - IMPORT_COMMENT_BLOCK=154; - public static final int - ASM_MODE=1, IMPORT_MODE=2; - public static String[] channelNames = { - "DEFAULT_TOKEN_CHANNEL", "HIDDEN" - }; - - public static String[] modeNames = { - "DEFAULT_MODE", "ASM_MODE", "IMPORT_MODE" - }; - - private static String[] makeRuleNames() { - return new String[] { - "CURLY_BEGIN", "CURLY_END", "BRACKET_BEGIN", "BRACKET_END", "PAR_BEGIN", - "PAR_END", "SEMICOLON", "COLON", "COMMA", "RANGE", "PARAM_LIST", "CONDITION", - "DOT", "ARROW", "PLUS", "MINUS", "ASTERISK", "DIVIDE", "MODULO", "INC", - "DEC", "AND", "BIT_NOT", "BIT_XOR", "BIT_OR", "SHIFT_LEFT", "SHIFT_RIGHT", - "EQUAL", "NOT_EQUAL", "LESS_THAN", "LESS_THAN_EQUAL", "GREATER_THAN_EQUAL", - "GREATER_THAN", "LOGIC_AND", "LOGIC_OR", "ASSIGN", "ASSIGN_COMPOUND", - "TYPEDEF", "CONST", "EXTERN", "EXPORT", "ALIGN", "INLINE", "VOLATILE", - "STATIC", "INTERRUPT", "REGISTER", "LOCAL_RESERVE", "ADDRESS", "ADDRESS_ZEROPAGE", - "ADDRESS_MAINMEM", "FAR", "NEAR", "FORM_SSA", "FORM_MA", "INTRINSIC", - "CALLINGCONVENTION", "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH", "RETURN", - "BREAK", "CONTINUE", "GOTO", "ASM", "DEFAULT", "CASE", "STRUCT", "UNION", - "ENUM", "SIZEOF", "TYPEID", "DEFINED", "KICKASM", "LOGIC_NOT", "SIMPLETYPE", - "BOOLEAN", "KICKASM_BODY", "IMPORT", "INCLUDE", "PRAGMA", "DEFINE", "DEFINE_CONTINUE", - "UNDEF", "IFDEF", "IFNDEF", "IFIF", "ELIF", "IFELSE", "ENDIF", "ERROR", - "TOKEN_STRINGIZE", "TOKEN_MERGE", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", - "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", "BINDIGIT", - "DECDIGIT", "HEXDIGIT", "NAME", "NAME_START", "NAME_CHAR", "STRING", - "CHAR", "WS", "COMMENT_LINE", "COMMENT_BLOCK", "ASM_BYTE", "ASM_MNEMONIC", - "ASM_IMM", "ASM_COLON", "ASM_COMMA", "ASM_PAR_BEGIN", "ASM_PAR_END", - "ASM_BRACKET_BEGIN", "ASM_BRACKET_END", "ASM_DOT", "ASM_SHIFT_LEFT", - "ASM_SHIFT_RIGHT", "ASM_PLUS", "ASM_MINUS", "ASM_LESS_THAN", "ASM_GREATER_THAN", - "ASM_MULTIPLY", "ASM_DIVIDE", "ASM_CURLY_BEGIN", "ASM_CURLY_END", "ASM_NUMBER", - "ASM_NUMFLOAT", "ASM_BINFLOAT", "ASM_DECFLOAT", "ASM_HEXFLOAT", "ASM_NUMINT", - "ASM_BININTEGER", "ASM_DECINTEGER", "ASM_HEXINTEGER", "ASM_BINDIGIT", - "ASM_DECDIGIT", "ASM_HEXDIGIT", "ASM_CHAR", "ASM_MULTI_REL", "ASM_MULTI_NAME", - "ASM_NAME", "ASM_NAME_START", "ASM_NAME_CHAR", "ASM_TAG", "ASM_WS", "ASM_COMMENT_LINE", - "ASM_COMMENT_BLOCK", "IMPORT_SYSTEMFILE", "IMPORT_LOCALFILE", "IMPORT_WS", - "IMPORT_COMMENT_LINE", "IMPORT_COMMENT_BLOCK" - }; - } - public static final String[] ruleNames = makeRuleNames(); - - private static String[] makeLiteralNames() { - return new String[] { - null, null, null, null, null, null, null, null, "';'", null, null, "'..'", - "'...'", "'?'", null, "'->'", null, null, null, null, "'%'", "'++'", - "'--'", "'&'", "'~'", "'^'", "'|'", null, null, "'=='", "'!='", null, - "'<='", "'>='", null, "'&&'", "'||'", "'='", null, "'typedef'", "'const'", - "'extern'", "'__export'", "'__align'", "'inline'", "'volatile'", "'static'", - "'__interrupt'", "'register'", "'__zp_reserve'", "'__address'", "'__zp'", - "'__mem'", "'__far'", "'__near'", "'__ssa'", "'__ma'", "'__intrinsic'", - null, "'if'", "'else'", "'while'", "'do'", "'for'", "'switch'", "'return'", - "'break'", "'continue'", "'goto'", "'asm'", "'default'", "'case'", "'struct'", - "'union'", "'enum'", "'sizeof'", "'typeid'", "'defined'", "'kickasm'", - "'!'", null, null, null, "'#import'", "'#include'", "'#pragma'", "'#define'", - null, "'#undef'", "'#ifdef'", "'#ifndef'", "'#if'", "'#elif'", "'#else'", - "'#endif'", "'#error'", null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, "'.byte'", null, - "'#'" - }; - } - private static final String[] _LITERAL_NAMES = makeLiteralNames(); - private static String[] makeSymbolicNames() { - return new String[] { - null, "TYPEDEFNAME", "CURLY_BEGIN", "CURLY_END", "BRACKET_BEGIN", "BRACKET_END", - "PAR_BEGIN", "PAR_END", "SEMICOLON", "COLON", "COMMA", "RANGE", "PARAM_LIST", - "CONDITION", "DOT", "ARROW", "PLUS", "MINUS", "ASTERISK", "DIVIDE", "MODULO", - "INC", "DEC", "AND", "BIT_NOT", "BIT_XOR", "BIT_OR", "SHIFT_LEFT", "SHIFT_RIGHT", - "EQUAL", "NOT_EQUAL", "LESS_THAN", "LESS_THAN_EQUAL", "GREATER_THAN_EQUAL", - "GREATER_THAN", "LOGIC_AND", "LOGIC_OR", "ASSIGN", "ASSIGN_COMPOUND", - "TYPEDEF", "CONST", "EXTERN", "EXPORT", "ALIGN", "INLINE", "VOLATILE", - "STATIC", "INTERRUPT", "REGISTER", "LOCAL_RESERVE", "ADDRESS", "ADDRESS_ZEROPAGE", - "ADDRESS_MAINMEM", "FAR", "NEAR", "FORM_SSA", "FORM_MA", "INTRINSIC", - "CALLINGCONVENTION", "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH", "RETURN", - "BREAK", "CONTINUE", "GOTO", "ASM", "DEFAULT", "CASE", "STRUCT", "UNION", - "ENUM", "SIZEOF", "TYPEID", "DEFINED", "KICKASM", "LOGIC_NOT", "SIMPLETYPE", - "BOOLEAN", "KICKASM_BODY", "IMPORT", "INCLUDE", "PRAGMA", "DEFINE", "DEFINE_CONTINUE", - "UNDEF", "IFDEF", "IFNDEF", "IFIF", "ELIF", "IFELSE", "ENDIF", "ERROR", - "TOKEN_STRINGIZE", "TOKEN_MERGE", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", - "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", "NAME", - "STRING", "CHAR", "WS", "COMMENT_LINE", "COMMENT_BLOCK", "ASM_BYTE", - "ASM_MNEMONIC", "ASM_IMM", "ASM_COLON", "ASM_COMMA", "ASM_PAR_BEGIN", - "ASM_PAR_END", "ASM_BRACKET_BEGIN", "ASM_BRACKET_END", "ASM_DOT", "ASM_SHIFT_LEFT", - "ASM_SHIFT_RIGHT", "ASM_PLUS", "ASM_MINUS", "ASM_LESS_THAN", "ASM_GREATER_THAN", - "ASM_MULTIPLY", "ASM_DIVIDE", "ASM_CURLY_BEGIN", "ASM_CURLY_END", "ASM_NUMBER", - "ASM_NUMFLOAT", "ASM_BINFLOAT", "ASM_DECFLOAT", "ASM_HEXFLOAT", "ASM_NUMINT", - "ASM_BININTEGER", "ASM_DECINTEGER", "ASM_HEXINTEGER", "ASM_CHAR", "ASM_MULTI_REL", - "ASM_MULTI_NAME", "ASM_NAME", "ASM_TAG", "ASM_WS", "ASM_COMMENT_LINE", - "ASM_COMMENT_BLOCK", "IMPORT_SYSTEMFILE", "IMPORT_LOCALFILE", "IMPORT_WS", - "IMPORT_COMMENT_LINE", "IMPORT_COMMENT_BLOCK" - }; - } - private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); - public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); - - /** - * @deprecated Use {@link #VOCABULARY} instead. - */ - @Deprecated - public static final String[] tokenNames; - static { - tokenNames = new String[_SYMBOLIC_NAMES.length]; - for (int i = 0; i < tokenNames.length; i++) { - tokenNames[i] = VOCABULARY.getLiteralName(i); - if (tokenNames[i] == null) { - tokenNames[i] = VOCABULARY.getSymbolicName(i); - } - - if (tokenNames[i] == null) { - tokenNames[i] = ""; - } - } - } - - @Override - @Deprecated - public String[] getTokenNames() { - return tokenNames; - } - - @Override - - public Vocabulary getVocabulary() { - return VOCABULARY; - } - - - - /** The C-Parser. Used for importing C-files and communicating with the Parser about typedefs. */ - CParser cParser; - /** True if the next CURLY starts ASM_MODE */ - boolean asmEnter = false; - /** Counts the nested curlies inside ASM_MODE to determine when to exit ASM_MODE */ - int asmCurlyCount = 0; - - public KickCLexer(CharStream input, CParser cParser) { - this(input); - this.cParser = cParser; - } - - - public KickCLexer(CharStream input) { - super(input); - _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); - } - - @Override - public String getGrammarFileName() { return "KickCLexer.g4"; } - - @Override - public String[] getRuleNames() { return ruleNames; } - - @Override - public String getSerializedATN() { return _serializedATN; } - - @Override - public String[] getChannelNames() { return channelNames; } - - @Override - public String[] getModeNames() { return modeNames; } - - @Override - public ATN getATN() { return _ATN; } - - @Override - public void action(RuleContext _localctx, int ruleIndex, int actionIndex) { - switch (ruleIndex) { - case 0: - CURLY_BEGIN_action((RuleContext)_localctx, actionIndex); - break; - case 67: - ASM_action((RuleContext)_localctx, actionIndex); - break; - case 81: - IMPORT_action((RuleContext)_localctx, actionIndex); - break; - case 82: - INCLUDE_action((RuleContext)_localctx, actionIndex); - break; - case 108: - NAME_action((RuleContext)_localctx, actionIndex); - break; - case 134: - ASM_CURLY_BEGIN_action((RuleContext)_localctx, actionIndex); - break; - case 135: - ASM_CURLY_END_action((RuleContext)_localctx, actionIndex); - break; - case 158: - IMPORT_SYSTEMFILE_action((RuleContext)_localctx, actionIndex); - break; - case 159: - IMPORT_LOCALFILE_action((RuleContext)_localctx, actionIndex); - break; - } - } - private void CURLY_BEGIN_action(RuleContext _localctx, int actionIndex) { - switch (actionIndex) { - case 0: - if(asmEnter) { pushMode(ASM_MODE); asmEnter=false; } - break; - } - } - private void ASM_action(RuleContext _localctx, int actionIndex) { - switch (actionIndex) { - case 1: - asmEnter=true; - break; - } - } - private void IMPORT_action(RuleContext _localctx, int actionIndex) { - switch (actionIndex) { - case 2: - pushMode(IMPORT_MODE); - break; - } - } - private void INCLUDE_action(RuleContext _localctx, int actionIndex) { - switch (actionIndex) { - case 3: - pushMode(IMPORT_MODE); - break; - } - } - private void NAME_action(RuleContext _localctx, int actionIndex) { - switch (actionIndex) { - case 4: - if(cParser.isTypedef(getText())) setType(TYPEDEFNAME); - break; - } - } - private void ASM_CURLY_BEGIN_action(RuleContext _localctx, int actionIndex) { - switch (actionIndex) { - case 5: - asmCurlyCount++; - break; - } - } - private void ASM_CURLY_END_action(RuleContext _localctx, int actionIndex) { - switch (actionIndex) { - case 6: - asmCurlyCount--; if(asmCurlyCount<0) { popMode(); } - break; - } - } - private void IMPORT_SYSTEMFILE_action(RuleContext _localctx, int actionIndex) { - switch (actionIndex) { - case 7: - popMode(); - break; - } - } - private void IMPORT_LOCALFILE_action(RuleContext _localctx, int actionIndex) { - switch (actionIndex) { - case 8: - popMode(); - break; - } - } - - public static final String _serializedATN = - "\u0004\u0000\u009a\u07bf\u0006\uffff\uffff\u0006\uffff\uffff\u0006\uffff"+ - "\uffff\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002\u0002\u0007"+ - "\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002\u0005\u0007"+ - "\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002\b\u0007\b"+ - "\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002\f\u0007"+ - "\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002\u000f\u0007\u000f\u0002"+ - "\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002\u0012\u0007\u0012\u0002"+ - "\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002\u0015\u0007\u0015\u0002"+ - "\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002\u0018\u0007\u0018\u0002"+ - "\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002\u001b\u0007\u001b\u0002"+ - "\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002\u001e\u0007\u001e\u0002"+ - "\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007!\u0002\"\u0007\"\u0002#"+ - "\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007&\u0002\'\u0007\'\u0002"+ - "(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007+\u0002,\u0007,\u0002"+ - "-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u00070\u00021\u00071\u0002"+ - "2\u00072\u00023\u00073\u00024\u00074\u00025\u00075\u00026\u00076\u0002"+ - "7\u00077\u00028\u00078\u00029\u00079\u0002:\u0007:\u0002;\u0007;\u0002"+ - "<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007?\u0002@\u0007@\u0002"+ - "A\u0007A\u0002B\u0007B\u0002C\u0007C\u0002D\u0007D\u0002E\u0007E\u0002"+ - "F\u0007F\u0002G\u0007G\u0002H\u0007H\u0002I\u0007I\u0002J\u0007J\u0002"+ - "K\u0007K\u0002L\u0007L\u0002M\u0007M\u0002N\u0007N\u0002O\u0007O\u0002"+ - "P\u0007P\u0002Q\u0007Q\u0002R\u0007R\u0002S\u0007S\u0002T\u0007T\u0002"+ - "U\u0007U\u0002V\u0007V\u0002W\u0007W\u0002X\u0007X\u0002Y\u0007Y\u0002"+ - "Z\u0007Z\u0002[\u0007[\u0002\\\u0007\\\u0002]\u0007]\u0002^\u0007^\u0002"+ - "_\u0007_\u0002`\u0007`\u0002a\u0007a\u0002b\u0007b\u0002c\u0007c\u0002"+ - "d\u0007d\u0002e\u0007e\u0002f\u0007f\u0002g\u0007g\u0002h\u0007h\u0002"+ - "i\u0007i\u0002j\u0007j\u0002k\u0007k\u0002l\u0007l\u0002m\u0007m\u0002"+ - "n\u0007n\u0002o\u0007o\u0002p\u0007p\u0002q\u0007q\u0002r\u0007r\u0002"+ - "s\u0007s\u0002t\u0007t\u0002u\u0007u\u0002v\u0007v\u0002w\u0007w\u0002"+ - "x\u0007x\u0002y\u0007y\u0002z\u0007z\u0002{\u0007{\u0002|\u0007|\u0002"+ - "}\u0007}\u0002~\u0007~\u0002\u007f\u0007\u007f\u0002\u0080\u0007\u0080"+ - "\u0002\u0081\u0007\u0081\u0002\u0082\u0007\u0082\u0002\u0083\u0007\u0083"+ - "\u0002\u0084\u0007\u0084\u0002\u0085\u0007\u0085\u0002\u0086\u0007\u0086"+ - "\u0002\u0087\u0007\u0087\u0002\u0088\u0007\u0088\u0002\u0089\u0007\u0089"+ - "\u0002\u008a\u0007\u008a\u0002\u008b\u0007\u008b\u0002\u008c\u0007\u008c"+ - "\u0002\u008d\u0007\u008d\u0002\u008e\u0007\u008e\u0002\u008f\u0007\u008f"+ - "\u0002\u0090\u0007\u0090\u0002\u0091\u0007\u0091\u0002\u0092\u0007\u0092"+ - "\u0002\u0093\u0007\u0093\u0002\u0094\u0007\u0094\u0002\u0095\u0007\u0095"+ - "\u0002\u0096\u0007\u0096\u0002\u0097\u0007\u0097\u0002\u0098\u0007\u0098"+ - "\u0002\u0099\u0007\u0099\u0002\u009a\u0007\u009a\u0002\u009b\u0007\u009b"+ - "\u0002\u009c\u0007\u009c\u0002\u009d\u0007\u009d\u0002\u009e\u0007\u009e"+ - "\u0002\u009f\u0007\u009f\u0002\u00a0\u0007\u00a0\u0002\u00a1\u0007\u00a1"+ - "\u0002\u00a2\u0007\u00a2\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001"+ - "\u0001\u0001\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004"+ - "\u0001\u0004\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0007"+ - "\u0001\u0007\u0001\b\u0001\b\u0001\t\u0001\t\u0001\t\u0001\n\u0001\n\u0001"+ - "\n\u0001\n\u0001\u000b\u0001\u000b\u0001\f\u0001\f\u0001\r\u0001\r\u0001"+ - "\r\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010"+ - "\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013"+ - "\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015"+ - "\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018"+ - "\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a"+ - "\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001c"+ - "\u0001\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001f"+ - "\u0001\u001f\u0001\u001f\u0001 \u0001 \u0001!\u0001!\u0001!\u0001\"\u0001"+ - "\"\u0001\"\u0001#\u0001#\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+ - "$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+ - "$\u0001$\u0001$\u0001$\u0001$\u0001$\u0003$\u01b7\b$\u0001%\u0001%\u0001"+ - "%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001&\u0001&\u0001&\u0001&\u0001"+ - "&\u0001&\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001"+ - "(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001)\u0001"+ - ")\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001*\u0001*\u0001*\u0001"+ - "*\u0001*\u0001*\u0001*\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001"+ - "+\u0001+\u0001+\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001"+ - "-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001"+ - "-\u0001-\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001"+ - ".\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001"+ - "/\u0001/\u0001/\u0001/\u00010\u00010\u00010\u00010\u00010\u00010\u0001"+ - "0\u00010\u00010\u00010\u00011\u00011\u00011\u00011\u00011\u00012\u0001"+ - "2\u00012\u00012\u00012\u00012\u00013\u00013\u00013\u00013\u00013\u0001"+ - "3\u00014\u00014\u00014\u00014\u00014\u00014\u00014\u00015\u00015\u0001"+ - "5\u00015\u00015\u00015\u00016\u00016\u00016\u00016\u00016\u00017\u0001"+ - "7\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u0001"+ - "7\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u0001"+ - "8\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u0001"+ - "8\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u0001"+ - "8\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u0001"+ - "8\u00018\u00018\u00018\u00018\u00038\u027d\b8\u00019\u00019\u00019\u0001"+ - ":\u0001:\u0001:\u0001:\u0001:\u0001;\u0001;\u0001;\u0001;\u0001;\u0001"+ - ";\u0001<\u0001<\u0001<\u0001=\u0001=\u0001=\u0001=\u0001>\u0001>\u0001"+ - ">\u0001>\u0001>\u0001>\u0001>\u0001?\u0001?\u0001?\u0001?\u0001?\u0001"+ - "?\u0001?\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001A\u0001A\u0001"+ - "A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001B\u0001B\u0001B\u0001"+ - "B\u0001B\u0001C\u0001C\u0001C\u0001C\u0001C\u0001C\u0001D\u0001D\u0001"+ - "D\u0001D\u0001D\u0001D\u0001D\u0001D\u0001E\u0001E\u0001E\u0001E\u0001"+ - "E\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001F\u0001G\u0001G\u0001"+ - "G\u0001G\u0001G\u0001G\u0001H\u0001H\u0001H\u0001H\u0001H\u0001I\u0001"+ - "I\u0001I\u0001I\u0001I\u0001I\u0001I\u0001J\u0001J\u0001J\u0001J\u0001"+ - "J\u0001J\u0001J\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001"+ - "K\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001M\u0001"+ - "M\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ - "N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ - "N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ - "N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ - "N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ - "N\u0001N\u0003N\u032e\bN\u0001O\u0001O\u0001O\u0001O\u0001O\u0001O\u0001"+ - "O\u0001O\u0001O\u0003O\u0339\bO\u0001P\u0001P\u0001P\u0001P\u0005P\u033f"+ - "\bP\nP\fP\u0342\tP\u0001P\u0001P\u0001P\u0001Q\u0001Q\u0001Q\u0001Q\u0001"+ - "Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001R\u0001R\u0001R\u0001R\u0001"+ - "R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001S\u0001S\u0001S\u0001"+ - "S\u0001S\u0001S\u0001S\u0001S\u0001T\u0001T\u0001T\u0001T\u0001T\u0001"+ - "T\u0001T\u0001T\u0001U\u0001U\u0001U\u0001U\u0001U\u0003U\u0371\bU\u0001"+ - "V\u0001V\u0001V\u0001V\u0001V\u0001V\u0001V\u0001W\u0001W\u0001W\u0001"+ - "W\u0001W\u0001W\u0001W\u0001X\u0001X\u0001X\u0001X\u0001X\u0001X\u0001"+ - "X\u0001X\u0001Y\u0001Y\u0001Y\u0001Y\u0001Z\u0001Z\u0001Z\u0001Z\u0001"+ - "Z\u0001Z\u0001[\u0001[\u0001[\u0001[\u0001[\u0001[\u0001\\\u0001\\\u0001"+ - "\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001]\u0001]\u0001]\u0001]\u0001]"+ - "\u0001]\u0001]\u0001^\u0001^\u0001^\u0001_\u0001_\u0001_\u0001`\u0001"+ - "`\u0003`\u03af\b`\u0001a\u0001a\u0001a\u0003a\u03b4\ba\u0001b\u0001b\u0001"+ - "b\u0001b\u0001b\u0003b\u03bb\bb\u0001b\u0005b\u03be\bb\nb\fb\u03c1\tb"+ - "\u0001b\u0001b\u0004b\u03c5\bb\u000bb\fb\u03c6\u0001c\u0005c\u03ca\bc"+ - "\nc\fc\u03cd\tc\u0001c\u0001c\u0004c\u03d1\bc\u000bc\fc\u03d2\u0001d\u0001"+ - "d\u0001d\u0001d\u0001d\u0003d\u03da\bd\u0001d\u0005d\u03dd\bd\nd\fd\u03e0"+ - "\td\u0001d\u0001d\u0004d\u03e4\bd\u000bd\fd\u03e5\u0001e\u0001e\u0001"+ - "e\u0003e\u03eb\be\u0001e\u0001e\u0001e\u0003e\u03f0\be\u0001f\u0001f\u0001"+ - "f\u0004f\u03f5\bf\u000bf\ff\u03f6\u0001f\u0001f\u0004f\u03fb\bf\u000b"+ - "f\ff\u03fc\u0003f\u03ff\bf\u0001g\u0004g\u0402\bg\u000bg\fg\u0403\u0001"+ - "h\u0001h\u0001h\u0001h\u0001h\u0003h\u040b\bh\u0001h\u0004h\u040e\bh\u000b"+ - "h\fh\u040f\u0001i\u0001i\u0001j\u0001j\u0001k\u0001k\u0001l\u0001l\u0005"+ - "l\u041a\bl\nl\fl\u041d\tl\u0001l\u0001l\u0001m\u0001m\u0001n\u0001n\u0001"+ - "o\u0001o\u0001o\u0001o\u0005o\u0429\bo\no\fo\u042c\to\u0001o\u0001o\u0003"+ - "o\u0430\bo\u0001o\u0001o\u0003o\u0434\bo\u0003o\u0436\bo\u0001o\u0003"+ - "o\u0439\bo\u0001p\u0001p\u0001p\u0001p\u0003p\u043f\bp\u0001p\u0003p\u0442"+ - "\bp\u0001p\u0001p\u0001p\u0003p\u0447\bp\u0001p\u0003p\u044a\bp\u0001"+ - "p\u0001p\u0001q\u0004q\u044f\bq\u000bq\fq\u0450\u0001q\u0001q\u0001r\u0001"+ - "r\u0001r\u0001r\u0005r\u0459\br\nr\fr\u045c\tr\u0001r\u0001r\u0001s\u0001"+ - "s\u0001s\u0001s\u0005s\u0464\bs\ns\fs\u0467\ts\u0001s\u0001s\u0001s\u0001"+ - "s\u0001s\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001u\u0001u\u0001u\u0003u\u06d3\bu\u0001v\u0001v\u0001w\u0001"+ - "w\u0001x\u0001x\u0001y\u0001y\u0001z\u0001z\u0001{\u0001{\u0001|\u0001"+ - "|\u0001}\u0001}\u0001~\u0001~\u0001~\u0001\u007f\u0001\u007f\u0001\u007f"+ - "\u0001\u0080\u0001\u0080\u0001\u0081\u0001\u0081\u0001\u0082\u0001\u0082"+ - "\u0001\u0083\u0001\u0083\u0001\u0084\u0001\u0084\u0001\u0085\u0001\u0085"+ - "\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0087\u0001\u0087\u0001\u0087"+ - "\u0001\u0088\u0001\u0088\u0003\u0088\u06ff\b\u0088\u0001\u0089\u0001\u0089"+ - "\u0001\u0089\u0003\u0089\u0704\b\u0089\u0001\u008a\u0001\u008a\u0005\u008a"+ - "\u0708\b\u008a\n\u008a\f\u008a\u070b\t\u008a\u0001\u008a\u0001\u008a\u0004"+ - "\u008a\u070f\b\u008a\u000b\u008a\f\u008a\u0710\u0001\u008b\u0005\u008b"+ - "\u0714\b\u008b\n\u008b\f\u008b\u0717\t\u008b\u0001\u008b\u0001\u008b\u0004"+ - "\u008b\u071b\b\u008b\u000b\u008b\f\u008b\u071c\u0001\u008c\u0001\u008c"+ - "\u0005\u008c\u0721\b\u008c\n\u008c\f\u008c\u0724\t\u008c\u0001\u008c\u0001"+ - "\u008c\u0004\u008c\u0728\b\u008c\u000b\u008c\f\u008c\u0729\u0001\u008d"+ - "\u0001\u008d\u0001\u008d\u0003\u008d\u072f\b\u008d\u0001\u008e\u0001\u008e"+ - "\u0004\u008e\u0733\b\u008e\u000b\u008e\f\u008e\u0734\u0001\u008f\u0004"+ - "\u008f\u0738\b\u008f\u000b\u008f\f\u008f\u0739\u0001\u0090\u0001\u0090"+ - "\u0004\u0090\u073e\b\u0090\u000b\u0090\f\u0090\u073f\u0001\u0091\u0001"+ - "\u0091\u0001\u0092\u0001\u0092\u0001\u0093\u0001\u0093\u0001\u0094\u0001"+ - "\u0094\u0001\u0094\u0001\u0094\u0003\u0094\u074c\b\u0094\u0001\u0094\u0001"+ - "\u0094\u0001\u0095\u0001\u0095\u0004\u0095\u0752\b\u0095\u000b\u0095\f"+ - "\u0095\u0753\u0001\u0096\u0001\u0096\u0005\u0096\u0758\b\u0096\n\u0096"+ - "\f\u0096\u075b\t\u0096\u0001\u0097\u0001\u0097\u0005\u0097\u075f\b\u0097"+ - "\n\u0097\f\u0097\u0762\t\u0097\u0001\u0098\u0001\u0098\u0001\u0099\u0001"+ - "\u0099\u0001\u009a\u0001\u009a\u0001\u009a\u0001\u009b\u0004\u009b\u076c"+ - "\b\u009b\u000b\u009b\f\u009b\u076d\u0001\u009b\u0001\u009b\u0001\u009c"+ - "\u0001\u009c\u0001\u009c\u0001\u009c\u0005\u009c\u0776\b\u009c\n\u009c"+ - "\f\u009c\u0779\t\u009c\u0001\u009c\u0001\u009c\u0001\u009d\u0001\u009d"+ - "\u0001\u009d\u0001\u009d\u0005\u009d\u0781\b\u009d\n\u009d\f\u009d\u0784"+ - "\t\u009d\u0001\u009d\u0001\u009d\u0001\u009d\u0001\u009d\u0001\u009d\u0001"+ - "\u009e\u0001\u009e\u0004\u009e\u078d\b\u009e\u000b\u009e\f\u009e\u078e"+ - "\u0001\u009e\u0001\u009e\u0001\u009e\u0001\u009f\u0001\u009f\u0001\u009f"+ - "\u0001\u009f\u0005\u009f\u0798\b\u009f\n\u009f\f\u009f\u079b\t\u009f\u0001"+ - "\u009f\u0001\u009f\u0001\u009f\u0001\u00a0\u0004\u00a0\u07a1\b\u00a0\u000b"+ - "\u00a0\f\u00a0\u07a2\u0001\u00a0\u0001\u00a0\u0001\u00a1\u0001\u00a1\u0001"+ - "\u00a1\u0001\u00a1\u0005\u00a1\u07ab\b\u00a1\n\u00a1\f\u00a1\u07ae\t\u00a1"+ - "\u0001\u00a1\u0001\u00a1\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2"+ - "\u0005\u00a2\u07b6\b\u00a2\n\u00a2\f\u00a2\u07b9\t\u00a2\u0001\u00a2\u0001"+ - "\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0004\u0340\u0465\u0782\u07b7"+ - "\u0000\u00a3\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006\r"+ - "\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b\u000e"+ - "\u001d\u000f\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015+\u0016-\u0017"+ - "/\u00181\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\"E#G$I%"+ - "K&M\'O(Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6m7o8q9s:u;w}?\u007f@\u0081A\u0083"+ - "B\u0085C\u0087D\u0089E\u008bF\u008dG\u008fH\u0091I\u0093J\u0095K\u0097"+ - "L\u0099M\u009bN\u009dO\u009fP\u00a1Q\u00a3R\u00a5S\u00a7T\u00a9U\u00ab"+ - "V\u00adW\u00afX\u00b1Y\u00b3Z\u00b5[\u00b7\\\u00b9]\u00bb^\u00bd_\u00bf"+ - "`\u00c1a\u00c3b\u00c5c\u00c7d\u00c9e\u00cbf\u00cdg\u00cfh\u00d1i\u00d3"+ - "j\u00d5\u0000\u00d7\u0000\u00d9\u0000\u00dbk\u00dd\u0000\u00df\u0000\u00e1"+ - "l\u00e3m\u00e5n\u00e7o\u00e9p\u00ebq\u00edr\u00efs\u00f1t\u00f3u\u00f5"+ - "v\u00f7w\u00f9x\u00fby\u00fdz\u00ff{\u0101|\u0103}\u0105~\u0107\u007f"+ - "\u0109\u0080\u010b\u0081\u010d\u0082\u010f\u0083\u0111\u0084\u0113\u0085"+ - "\u0115\u0086\u0117\u0087\u0119\u0088\u011b\u0089\u011d\u008a\u011f\u008b"+ - "\u0121\u008c\u0123\u008d\u0125\u0000\u0127\u0000\u0129\u0000\u012b\u008e"+ - "\u012d\u008f\u012f\u0090\u0131\u0091\u0133\u0000\u0135\u0000\u0137\u0092"+ - "\u0139\u0093\u013b\u0094\u013d\u0095\u013f\u0096\u0141\u0097\u0143\u0098"+ - "\u0145\u0099\u0147\u009a\u0003\u0000\u0001\u0002\u0015\u0004\u0000SSU"+ - "Ussuu\n\u0000BDIILLSSWWbdiillssww\u0004\u0000LLUUlluu\u0002\u0000BBbb"+ - "\u0001\u000001\u0001\u000009\u0003\u000009AFaf\u0003\u0000AZ__az\u0004"+ - "\u000009AZ__az\u0001\u0000\"\"\u0001\u0000zz\u0003\u0000aappss\u0003\u0000"+ - "aammsu\u0007\u0000\"\"\'\'09\\\\ffnnrr\u0002\u000009af\u0001\u0000\'\'"+ - "\u0004\u0000\t\n\r\r \u00a0\u00a0\u0002\u0000\n\n\r\r\u0005\u0000\"\""+ - "\'\'ffnnrr\u0002\u0000++--\u0005\u0000-9AZ\\\\__az\u08c4\u0000\u0003\u0001"+ - "\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001"+ - "\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000"+ - "\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000"+ - "\u0000\u0000\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000"+ - "\u0000\u0000\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000"+ - "\u0000\u0000\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000\u0000"+ - "\u0000\u0000\u001d\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000\u0000"+ - "\u0000\u0000!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000\u0000"+ - "%\u0001\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000)\u0001"+ - "\u0000\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001\u0000\u0000"+ - "\u0000\u0000/\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0000\u0000"+ - "3\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001"+ - "\u0000\u0000\u0000\u00009\u0001\u0000\u0000\u0000\u0000;\u0001\u0000\u0000"+ - "\u0000\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000\u0000\u0000"+ - "A\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000E\u0001"+ - "\u0000\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001\u0000\u0000"+ - "\u0000\u0000K\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000\u0000\u0000"+ - "O\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000\u0000S\u0001"+ - "\u0000\u0000\u0000\u0000U\u0001\u0000\u0000\u0000\u0000W\u0001\u0000\u0000"+ - "\u0000\u0000Y\u0001\u0000\u0000\u0000\u0000[\u0001\u0000\u0000\u0000\u0000"+ - "]\u0001\u0000\u0000\u0000\u0000_\u0001\u0000\u0000\u0000\u0000a\u0001"+ - "\u0000\u0000\u0000\u0000c\u0001\u0000\u0000\u0000\u0000e\u0001\u0000\u0000"+ - "\u0000\u0000g\u0001\u0000\u0000\u0000\u0000i\u0001\u0000\u0000\u0000\u0000"+ - "k\u0001\u0000\u0000\u0000\u0000m\u0001\u0000\u0000\u0000\u0000o\u0001"+ - "\u0000\u0000\u0000\u0000q\u0001\u0000\u0000\u0000\u0000s\u0001\u0000\u0000"+ - "\u0000\u0000u\u0001\u0000\u0000\u0000\u0000w\u0001\u0000\u0000\u0000\u0000"+ - "y\u0001\u0000\u0000\u0000\u0000{\u0001\u0000\u0000\u0000\u0000}\u0001"+ - "\u0000\u0000\u0000\u0000\u007f\u0001\u0000\u0000\u0000\u0000\u0081\u0001"+ - "\u0000\u0000\u0000\u0000\u0083\u0001\u0000\u0000\u0000\u0000\u0085\u0001"+ - "\u0000\u0000\u0000\u0000\u0087\u0001\u0000\u0000\u0000\u0000\u0089\u0001"+ - "\u0000\u0000\u0000\u0000\u008b\u0001\u0000\u0000\u0000\u0000\u008d\u0001"+ - "\u0000\u0000\u0000\u0000\u008f\u0001\u0000\u0000\u0000\u0000\u0091\u0001"+ - "\u0000\u0000\u0000\u0000\u0093\u0001\u0000\u0000\u0000\u0000\u0095\u0001"+ - "\u0000\u0000\u0000\u0000\u0097\u0001\u0000\u0000\u0000\u0000\u0099\u0001"+ - "\u0000\u0000\u0000\u0000\u009b\u0001\u0000\u0000\u0000\u0000\u009d\u0001"+ - "\u0000\u0000\u0000\u0000\u009f\u0001\u0000\u0000\u0000\u0000\u00a1\u0001"+ - "\u0000\u0000\u0000\u0000\u00a3\u0001\u0000\u0000\u0000\u0000\u00a5\u0001"+ - "\u0000\u0000\u0000\u0000\u00a7\u0001\u0000\u0000\u0000\u0000\u00a9\u0001"+ - "\u0000\u0000\u0000\u0000\u00ab\u0001\u0000\u0000\u0000\u0000\u00ad\u0001"+ - "\u0000\u0000\u0000\u0000\u00af\u0001\u0000\u0000\u0000\u0000\u00b1\u0001"+ - "\u0000\u0000\u0000\u0000\u00b3\u0001\u0000\u0000\u0000\u0000\u00b5\u0001"+ - "\u0000\u0000\u0000\u0000\u00b7\u0001\u0000\u0000\u0000\u0000\u00b9\u0001"+ - "\u0000\u0000\u0000\u0000\u00bb\u0001\u0000\u0000\u0000\u0000\u00bd\u0001"+ - "\u0000\u0000\u0000\u0000\u00bf\u0001\u0000\u0000\u0000\u0000\u00c1\u0001"+ - "\u0000\u0000\u0000\u0000\u00c3\u0001\u0000\u0000\u0000\u0000\u00c5\u0001"+ - "\u0000\u0000\u0000\u0000\u00c7\u0001\u0000\u0000\u0000\u0000\u00c9\u0001"+ - "\u0000\u0000\u0000\u0000\u00cb\u0001\u0000\u0000\u0000\u0000\u00cd\u0001"+ - "\u0000\u0000\u0000\u0000\u00cf\u0001\u0000\u0000\u0000\u0000\u00d1\u0001"+ - "\u0000\u0000\u0000\u0000\u00d3\u0001\u0000\u0000\u0000\u0000\u00db\u0001"+ - "\u0000\u0000\u0000\u0000\u00e1\u0001\u0000\u0000\u0000\u0000\u00e3\u0001"+ - "\u0000\u0000\u0000\u0000\u00e5\u0001\u0000\u0000\u0000\u0000\u00e7\u0001"+ - "\u0000\u0000\u0000\u0000\u00e9\u0001\u0000\u0000\u0000\u0001\u00eb\u0001"+ - "\u0000\u0000\u0000\u0001\u00ed\u0001\u0000\u0000\u0000\u0001\u00ef\u0001"+ - "\u0000\u0000\u0000\u0001\u00f1\u0001\u0000\u0000\u0000\u0001\u00f3\u0001"+ - "\u0000\u0000\u0000\u0001\u00f5\u0001\u0000\u0000\u0000\u0001\u00f7\u0001"+ - "\u0000\u0000\u0000\u0001\u00f9\u0001\u0000\u0000\u0000\u0001\u00fb\u0001"+ - "\u0000\u0000\u0000\u0001\u00fd\u0001\u0000\u0000\u0000\u0001\u00ff\u0001"+ - "\u0000\u0000\u0000\u0001\u0101\u0001\u0000\u0000\u0000\u0001\u0103\u0001"+ - "\u0000\u0000\u0000\u0001\u0105\u0001\u0000\u0000\u0000\u0001\u0107\u0001"+ - "\u0000\u0000\u0000\u0001\u0109\u0001\u0000\u0000\u0000\u0001\u010b\u0001"+ - "\u0000\u0000\u0000\u0001\u010d\u0001\u0000\u0000\u0000\u0001\u010f\u0001"+ - "\u0000\u0000\u0000\u0001\u0111\u0001\u0000\u0000\u0000\u0001\u0113\u0001"+ - "\u0000\u0000\u0000\u0001\u0115\u0001\u0000\u0000\u0000\u0001\u0117\u0001"+ - "\u0000\u0000\u0000\u0001\u0119\u0001\u0000\u0000\u0000\u0001\u011b\u0001"+ - "\u0000\u0000\u0000\u0001\u011d\u0001\u0000\u0000\u0000\u0001\u011f\u0001"+ - "\u0000\u0000\u0000\u0001\u0121\u0001\u0000\u0000\u0000\u0001\u0123\u0001"+ - "\u0000\u0000\u0000\u0001\u012b\u0001\u0000\u0000\u0000\u0001\u012d\u0001"+ - "\u0000\u0000\u0000\u0001\u012f\u0001\u0000\u0000\u0000\u0001\u0131\u0001"+ - "\u0000\u0000\u0000\u0001\u0137\u0001\u0000\u0000\u0000\u0001\u0139\u0001"+ - "\u0000\u0000\u0000\u0001\u013b\u0001\u0000\u0000\u0000\u0001\u013d\u0001"+ - "\u0000\u0000\u0000\u0002\u013f\u0001\u0000\u0000\u0000\u0002\u0141\u0001"+ - "\u0000\u0000\u0000\u0002\u0143\u0001\u0000\u0000\u0000\u0002\u0145\u0001"+ - "\u0000\u0000\u0000\u0002\u0147\u0001\u0000\u0000\u0000\u0003\u0149\u0001"+ - "\u0000\u0000\u0000\u0005\u014c\u0001\u0000\u0000\u0000\u0007\u014e\u0001"+ - "\u0000\u0000\u0000\t\u0150\u0001\u0000\u0000\u0000\u000b\u0152\u0001\u0000"+ - "\u0000\u0000\r\u0154\u0001\u0000\u0000\u0000\u000f\u0156\u0001\u0000\u0000"+ - "\u0000\u0011\u0158\u0001\u0000\u0000\u0000\u0013\u015a\u0001\u0000\u0000"+ - "\u0000\u0015\u015c\u0001\u0000\u0000\u0000\u0017\u015f\u0001\u0000\u0000"+ - "\u0000\u0019\u0163\u0001\u0000\u0000\u0000\u001b\u0165\u0001\u0000\u0000"+ - "\u0000\u001d\u0167\u0001\u0000\u0000\u0000\u001f\u016a\u0001\u0000\u0000"+ - "\u0000!\u016c\u0001\u0000\u0000\u0000#\u016e\u0001\u0000\u0000\u0000%"+ - "\u0170\u0001\u0000\u0000\u0000\'\u0172\u0001\u0000\u0000\u0000)\u0174"+ - "\u0001\u0000\u0000\u0000+\u0177\u0001\u0000\u0000\u0000-\u017a\u0001\u0000"+ - "\u0000\u0000/\u017c\u0001\u0000\u0000\u00001\u017e\u0001\u0000\u0000\u0000"+ - "3\u0180\u0001\u0000\u0000\u00005\u0182\u0001\u0000\u0000\u00007\u0185"+ - "\u0001\u0000\u0000\u00009\u0188\u0001\u0000\u0000\u0000;\u018b\u0001\u0000"+ - "\u0000\u0000=\u018e\u0001\u0000\u0000\u0000?\u0190\u0001\u0000\u0000\u0000"+ - "A\u0193\u0001\u0000\u0000\u0000C\u0196\u0001\u0000\u0000\u0000E\u0198"+ - "\u0001\u0000\u0000\u0000G\u019b\u0001\u0000\u0000\u0000I\u019e\u0001\u0000"+ - "\u0000\u0000K\u01b6\u0001\u0000\u0000\u0000M\u01b8\u0001\u0000\u0000\u0000"+ - "O\u01c0\u0001\u0000\u0000\u0000Q\u01c6\u0001\u0000\u0000\u0000S\u01cd"+ - "\u0001\u0000\u0000\u0000U\u01d6\u0001\u0000\u0000\u0000W\u01de\u0001\u0000"+ - "\u0000\u0000Y\u01e5\u0001\u0000\u0000\u0000[\u01ee\u0001\u0000\u0000\u0000"+ - "]\u01f5\u0001\u0000\u0000\u0000_\u0201\u0001\u0000\u0000\u0000a\u020a"+ - "\u0001\u0000\u0000\u0000c\u0217\u0001\u0000\u0000\u0000e\u0221\u0001\u0000"+ - "\u0000\u0000g\u0226\u0001\u0000\u0000\u0000i\u022c\u0001\u0000\u0000\u0000"+ - "k\u0232\u0001\u0000\u0000\u0000m\u0239\u0001\u0000\u0000\u0000o\u023f"+ - "\u0001\u0000\u0000\u0000q\u0244\u0001\u0000\u0000\u0000s\u027c\u0001\u0000"+ - "\u0000\u0000u\u027e\u0001\u0000\u0000\u0000w\u0281\u0001\u0000\u0000\u0000"+ - "y\u0286\u0001\u0000\u0000\u0000{\u028c\u0001\u0000\u0000\u0000}\u028f"+ - "\u0001\u0000\u0000\u0000\u007f\u0293\u0001\u0000\u0000\u0000\u0081\u029a"+ - "\u0001\u0000\u0000\u0000\u0083\u02a1\u0001\u0000\u0000\u0000\u0085\u02a7"+ - "\u0001\u0000\u0000\u0000\u0087\u02b0\u0001\u0000\u0000\u0000\u0089\u02b5"+ - "\u0001\u0000\u0000\u0000\u008b\u02bb\u0001\u0000\u0000\u0000\u008d\u02c3"+ - "\u0001\u0000\u0000\u0000\u008f\u02c8\u0001\u0000\u0000\u0000\u0091\u02cf"+ - "\u0001\u0000\u0000\u0000\u0093\u02d5\u0001\u0000\u0000\u0000\u0095\u02da"+ - "\u0001\u0000\u0000\u0000\u0097\u02e1\u0001\u0000\u0000\u0000\u0099\u02e8"+ - "\u0001\u0000\u0000\u0000\u009b\u02f0\u0001\u0000\u0000\u0000\u009d\u02f8"+ - "\u0001\u0000\u0000\u0000\u009f\u032d\u0001\u0000\u0000\u0000\u00a1\u0338"+ - "\u0001\u0000\u0000\u0000\u00a3\u033a\u0001\u0000\u0000\u0000\u00a5\u0346"+ - "\u0001\u0000\u0000\u0000\u00a7\u0350\u0001\u0000\u0000\u0000\u00a9\u035b"+ - "\u0001\u0000\u0000\u0000\u00ab\u0363\u0001\u0000\u0000\u0000\u00ad\u0370"+ - "\u0001\u0000\u0000\u0000\u00af\u0372\u0001\u0000\u0000\u0000\u00b1\u0379"+ - "\u0001\u0000\u0000\u0000\u00b3\u0380\u0001\u0000\u0000\u0000\u00b5\u0388"+ - "\u0001\u0000\u0000\u0000\u00b7\u038c\u0001\u0000\u0000\u0000\u00b9\u0392"+ - "\u0001\u0000\u0000\u0000\u00bb\u0398\u0001\u0000\u0000\u0000\u00bd\u039f"+ - "\u0001\u0000\u0000\u0000\u00bf\u03a6\u0001\u0000\u0000\u0000\u00c1\u03a9"+ - "\u0001\u0000\u0000\u0000\u00c3\u03ae\u0001\u0000\u0000\u0000\u00c5\u03b3"+ - "\u0001\u0000\u0000\u0000\u00c7\u03ba\u0001\u0000\u0000\u0000\u00c9\u03cb"+ - "\u0001\u0000\u0000\u0000\u00cb\u03d9\u0001\u0000\u0000\u0000\u00cd\u03ea"+ - "\u0001\u0000\u0000\u0000\u00cf\u03fe\u0001\u0000\u0000\u0000\u00d1\u0401"+ - "\u0001\u0000\u0000\u0000\u00d3\u040a\u0001\u0000\u0000\u0000\u00d5\u0411"+ - "\u0001\u0000\u0000\u0000\u00d7\u0413\u0001\u0000\u0000\u0000\u00d9\u0415"+ - "\u0001\u0000\u0000\u0000\u00db\u0417\u0001\u0000\u0000\u0000\u00dd\u0420"+ - "\u0001\u0000\u0000\u0000\u00df\u0422\u0001\u0000\u0000\u0000\u00e1\u0424"+ - "\u0001\u0000\u0000\u0000\u00e3\u043a\u0001\u0000\u0000\u0000\u00e5\u044e"+ - "\u0001\u0000\u0000\u0000\u00e7\u0454\u0001\u0000\u0000\u0000\u00e9\u045f"+ - "\u0001\u0000\u0000\u0000\u00eb\u046d\u0001\u0000\u0000\u0000\u00ed\u06d2"+ - "\u0001\u0000\u0000\u0000\u00ef\u06d4\u0001\u0000\u0000\u0000\u00f1\u06d6"+ - "\u0001\u0000\u0000\u0000\u00f3\u06d8\u0001\u0000\u0000\u0000\u00f5\u06da"+ - "\u0001\u0000\u0000\u0000\u00f7\u06dc\u0001\u0000\u0000\u0000\u00f9\u06de"+ - "\u0001\u0000\u0000\u0000\u00fb\u06e0\u0001\u0000\u0000\u0000\u00fd\u06e2"+ - "\u0001\u0000\u0000\u0000\u00ff\u06e4\u0001\u0000\u0000\u0000\u0101\u06e7"+ - "\u0001\u0000\u0000\u0000\u0103\u06ea\u0001\u0000\u0000\u0000\u0105\u06ec"+ - "\u0001\u0000\u0000\u0000\u0107\u06ee\u0001\u0000\u0000\u0000\u0109\u06f0"+ - "\u0001\u0000\u0000\u0000\u010b\u06f2\u0001\u0000\u0000\u0000\u010d\u06f4"+ - "\u0001\u0000\u0000\u0000\u010f\u06f6\u0001\u0000\u0000\u0000\u0111\u06f9"+ - "\u0001\u0000\u0000\u0000\u0113\u06fe\u0001\u0000\u0000\u0000\u0115\u0703"+ - "\u0001\u0000\u0000\u0000\u0117\u0705\u0001\u0000\u0000\u0000\u0119\u0715"+ - "\u0001\u0000\u0000\u0000\u011b\u071e\u0001\u0000\u0000\u0000\u011d\u072e"+ - "\u0001\u0000\u0000\u0000\u011f\u0730\u0001\u0000\u0000\u0000\u0121\u0737"+ - "\u0001\u0000\u0000\u0000\u0123\u073b\u0001\u0000\u0000\u0000\u0125\u0741"+ - "\u0001\u0000\u0000\u0000\u0127\u0743\u0001\u0000\u0000\u0000\u0129\u0745"+ - "\u0001\u0000\u0000\u0000\u012b\u0747\u0001\u0000\u0000\u0000\u012d\u074f"+ - "\u0001\u0000\u0000\u0000\u012f\u0755\u0001\u0000\u0000\u0000\u0131\u075c"+ - "\u0001\u0000\u0000\u0000\u0133\u0763\u0001\u0000\u0000\u0000\u0135\u0765"+ - "\u0001\u0000\u0000\u0000\u0137\u0767\u0001\u0000\u0000\u0000\u0139\u076b"+ - "\u0001\u0000\u0000\u0000\u013b\u0771\u0001\u0000\u0000\u0000\u013d\u077c"+ - "\u0001\u0000\u0000\u0000\u013f\u078a\u0001\u0000\u0000\u0000\u0141\u0793"+ - "\u0001\u0000\u0000\u0000\u0143\u07a0\u0001\u0000\u0000\u0000\u0145\u07a6"+ - "\u0001\u0000\u0000\u0000\u0147\u07b1\u0001\u0000\u0000\u0000\u0149\u014a"+ - "\u0005{\u0000\u0000\u014a\u014b\u0006\u0000\u0000\u0000\u014b\u0004\u0001"+ - "\u0000\u0000\u0000\u014c\u014d\u0005}\u0000\u0000\u014d\u0006\u0001\u0000"+ - "\u0000\u0000\u014e\u014f\u0005[\u0000\u0000\u014f\b\u0001\u0000\u0000"+ - "\u0000\u0150\u0151\u0005]\u0000\u0000\u0151\n\u0001\u0000\u0000\u0000"+ - "\u0152\u0153\u0005(\u0000\u0000\u0153\f\u0001\u0000\u0000\u0000\u0154"+ - "\u0155\u0005)\u0000\u0000\u0155\u000e\u0001\u0000\u0000\u0000\u0156\u0157"+ - "\u0005;\u0000\u0000\u0157\u0010\u0001\u0000\u0000\u0000\u0158\u0159\u0005"+ - ":\u0000\u0000\u0159\u0012\u0001\u0000\u0000\u0000\u015a\u015b\u0005,\u0000"+ - "\u0000\u015b\u0014\u0001\u0000\u0000\u0000\u015c\u015d\u0005.\u0000\u0000"+ - "\u015d\u015e\u0005.\u0000\u0000\u015e\u0016\u0001\u0000\u0000\u0000\u015f"+ - "\u0160\u0005.\u0000\u0000\u0160\u0161\u0005.\u0000\u0000\u0161\u0162\u0005"+ - ".\u0000\u0000\u0162\u0018\u0001\u0000\u0000\u0000\u0163\u0164\u0005?\u0000"+ - "\u0000\u0164\u001a\u0001\u0000\u0000\u0000\u0165\u0166\u0005.\u0000\u0000"+ - "\u0166\u001c\u0001\u0000\u0000\u0000\u0167\u0168\u0005-\u0000\u0000\u0168"+ - "\u0169\u0005>\u0000\u0000\u0169\u001e\u0001\u0000\u0000\u0000\u016a\u016b"+ - "\u0005+\u0000\u0000\u016b \u0001\u0000\u0000\u0000\u016c\u016d\u0005-"+ - "\u0000\u0000\u016d\"\u0001\u0000\u0000\u0000\u016e\u016f\u0005*\u0000"+ - "\u0000\u016f$\u0001\u0000\u0000\u0000\u0170\u0171\u0005/\u0000\u0000\u0171"+ - "&\u0001\u0000\u0000\u0000\u0172\u0173\u0005%\u0000\u0000\u0173(\u0001"+ - "\u0000\u0000\u0000\u0174\u0175\u0005+\u0000\u0000\u0175\u0176\u0005+\u0000"+ - "\u0000\u0176*\u0001\u0000\u0000\u0000\u0177\u0178\u0005-\u0000\u0000\u0178"+ - "\u0179\u0005-\u0000\u0000\u0179,\u0001\u0000\u0000\u0000\u017a\u017b\u0005"+ - "&\u0000\u0000\u017b.\u0001\u0000\u0000\u0000\u017c\u017d\u0005~\u0000"+ - "\u0000\u017d0\u0001\u0000\u0000\u0000\u017e\u017f\u0005^\u0000\u0000\u017f"+ - "2\u0001\u0000\u0000\u0000\u0180\u0181\u0005|\u0000\u0000\u01814\u0001"+ - "\u0000\u0000\u0000\u0182\u0183\u0005<\u0000\u0000\u0183\u0184\u0005<\u0000"+ - "\u0000\u01846\u0001\u0000\u0000\u0000\u0185\u0186\u0005>\u0000\u0000\u0186"+ - "\u0187\u0005>\u0000\u0000\u01878\u0001\u0000\u0000\u0000\u0188\u0189\u0005"+ - "=\u0000\u0000\u0189\u018a\u0005=\u0000\u0000\u018a:\u0001\u0000\u0000"+ - "\u0000\u018b\u018c\u0005!\u0000\u0000\u018c\u018d\u0005=\u0000\u0000\u018d"+ - "<\u0001\u0000\u0000\u0000\u018e\u018f\u0005<\u0000\u0000\u018f>\u0001"+ - "\u0000\u0000\u0000\u0190\u0191\u0005<\u0000\u0000\u0191\u0192\u0005=\u0000"+ - "\u0000\u0192@\u0001\u0000\u0000\u0000\u0193\u0194\u0005>\u0000\u0000\u0194"+ - "\u0195\u0005=\u0000\u0000\u0195B\u0001\u0000\u0000\u0000\u0196\u0197\u0005"+ - ">\u0000\u0000\u0197D\u0001\u0000\u0000\u0000\u0198\u0199\u0005&\u0000"+ - "\u0000\u0199\u019a\u0005&\u0000\u0000\u019aF\u0001\u0000\u0000\u0000\u019b"+ - "\u019c\u0005|\u0000\u0000\u019c\u019d\u0005|\u0000\u0000\u019dH\u0001"+ - "\u0000\u0000\u0000\u019e\u019f\u0005=\u0000\u0000\u019fJ\u0001\u0000\u0000"+ - "\u0000\u01a0\u01a1\u0005+\u0000\u0000\u01a1\u01b7\u0005=\u0000\u0000\u01a2"+ - "\u01a3\u0005-\u0000\u0000\u01a3\u01b7\u0005=\u0000\u0000\u01a4\u01a5\u0005"+ - "*\u0000\u0000\u01a5\u01b7\u0005=\u0000\u0000\u01a6\u01a7\u0005/\u0000"+ - "\u0000\u01a7\u01b7\u0005=\u0000\u0000\u01a8\u01a9\u0005%\u0000\u0000\u01a9"+ - "\u01b7\u0005=\u0000\u0000\u01aa\u01ab\u0005<\u0000\u0000\u01ab\u01ac\u0005"+ - "<\u0000\u0000\u01ac\u01b7\u0005=\u0000\u0000\u01ad\u01ae\u0005>\u0000"+ - "\u0000\u01ae\u01af\u0005>\u0000\u0000\u01af\u01b7\u0005=\u0000\u0000\u01b0"+ - "\u01b1\u0005&\u0000\u0000\u01b1\u01b7\u0005=\u0000\u0000\u01b2\u01b3\u0005"+ - "|\u0000\u0000\u01b3\u01b7\u0005=\u0000\u0000\u01b4\u01b5\u0005^\u0000"+ - "\u0000\u01b5\u01b7\u0005=\u0000\u0000\u01b6\u01a0\u0001\u0000\u0000\u0000"+ - "\u01b6\u01a2\u0001\u0000\u0000\u0000\u01b6\u01a4\u0001\u0000\u0000\u0000"+ - "\u01b6\u01a6\u0001\u0000\u0000\u0000\u01b6\u01a8\u0001\u0000\u0000\u0000"+ - "\u01b6\u01aa\u0001\u0000\u0000\u0000\u01b6\u01ad\u0001\u0000\u0000\u0000"+ - "\u01b6\u01b0\u0001\u0000\u0000\u0000\u01b6\u01b2\u0001\u0000\u0000\u0000"+ - "\u01b6\u01b4\u0001\u0000\u0000\u0000\u01b7L\u0001\u0000\u0000\u0000\u01b8"+ - "\u01b9\u0005t\u0000\u0000\u01b9\u01ba\u0005y\u0000\u0000\u01ba\u01bb\u0005"+ - "p\u0000\u0000\u01bb\u01bc\u0005e\u0000\u0000\u01bc\u01bd\u0005d\u0000"+ - "\u0000\u01bd\u01be\u0005e\u0000\u0000\u01be\u01bf\u0005f\u0000\u0000\u01bf"+ - "N\u0001\u0000\u0000\u0000\u01c0\u01c1\u0005c\u0000\u0000\u01c1\u01c2\u0005"+ - "o\u0000\u0000\u01c2\u01c3\u0005n\u0000\u0000\u01c3\u01c4\u0005s\u0000"+ - "\u0000\u01c4\u01c5\u0005t\u0000\u0000\u01c5P\u0001\u0000\u0000\u0000\u01c6"+ - "\u01c7\u0005e\u0000\u0000\u01c7\u01c8\u0005x\u0000\u0000\u01c8\u01c9\u0005"+ - "t\u0000\u0000\u01c9\u01ca\u0005e\u0000\u0000\u01ca\u01cb\u0005r\u0000"+ - "\u0000\u01cb\u01cc\u0005n\u0000\u0000\u01ccR\u0001\u0000\u0000\u0000\u01cd"+ - "\u01ce\u0005_\u0000\u0000\u01ce\u01cf\u0005_\u0000\u0000\u01cf\u01d0\u0005"+ - "e\u0000\u0000\u01d0\u01d1\u0005x\u0000\u0000\u01d1\u01d2\u0005p\u0000"+ - "\u0000\u01d2\u01d3\u0005o\u0000\u0000\u01d3\u01d4\u0005r\u0000\u0000\u01d4"+ - "\u01d5\u0005t\u0000\u0000\u01d5T\u0001\u0000\u0000\u0000\u01d6\u01d7\u0005"+ - "_\u0000\u0000\u01d7\u01d8\u0005_\u0000\u0000\u01d8\u01d9\u0005a\u0000"+ - "\u0000\u01d9\u01da\u0005l\u0000\u0000\u01da\u01db\u0005i\u0000\u0000\u01db"+ - "\u01dc\u0005g\u0000\u0000\u01dc\u01dd\u0005n\u0000\u0000\u01ddV\u0001"+ - "\u0000\u0000\u0000\u01de\u01df\u0005i\u0000\u0000\u01df\u01e0\u0005n\u0000"+ - "\u0000\u01e0\u01e1\u0005l\u0000\u0000\u01e1\u01e2\u0005i\u0000\u0000\u01e2"+ - "\u01e3\u0005n\u0000\u0000\u01e3\u01e4\u0005e\u0000\u0000\u01e4X\u0001"+ - "\u0000\u0000\u0000\u01e5\u01e6\u0005v\u0000\u0000\u01e6\u01e7\u0005o\u0000"+ - "\u0000\u01e7\u01e8\u0005l\u0000\u0000\u01e8\u01e9\u0005a\u0000\u0000\u01e9"+ - "\u01ea\u0005t\u0000\u0000\u01ea\u01eb\u0005i\u0000\u0000\u01eb\u01ec\u0005"+ - "l\u0000\u0000\u01ec\u01ed\u0005e\u0000\u0000\u01edZ\u0001\u0000\u0000"+ - "\u0000\u01ee\u01ef\u0005s\u0000\u0000\u01ef\u01f0\u0005t\u0000\u0000\u01f0"+ - "\u01f1\u0005a\u0000\u0000\u01f1\u01f2\u0005t\u0000\u0000\u01f2\u01f3\u0005"+ - "i\u0000\u0000\u01f3\u01f4\u0005c\u0000\u0000\u01f4\\\u0001\u0000\u0000"+ - "\u0000\u01f5\u01f6\u0005_\u0000\u0000\u01f6\u01f7\u0005_\u0000\u0000\u01f7"+ - "\u01f8\u0005i\u0000\u0000\u01f8\u01f9\u0005n\u0000\u0000\u01f9\u01fa\u0005"+ - "t\u0000\u0000\u01fa\u01fb\u0005e\u0000\u0000\u01fb\u01fc\u0005r\u0000"+ - "\u0000\u01fc\u01fd\u0005r\u0000\u0000\u01fd\u01fe\u0005u\u0000\u0000\u01fe"+ - "\u01ff\u0005p\u0000\u0000\u01ff\u0200\u0005t\u0000\u0000\u0200^\u0001"+ - "\u0000\u0000\u0000\u0201\u0202\u0005r\u0000\u0000\u0202\u0203\u0005e\u0000"+ - "\u0000\u0203\u0204\u0005g\u0000\u0000\u0204\u0205\u0005i\u0000\u0000\u0205"+ - "\u0206\u0005s\u0000\u0000\u0206\u0207\u0005t\u0000\u0000\u0207\u0208\u0005"+ - "e\u0000\u0000\u0208\u0209\u0005r\u0000\u0000\u0209`\u0001\u0000\u0000"+ - "\u0000\u020a\u020b\u0005_\u0000\u0000\u020b\u020c\u0005_\u0000\u0000\u020c"+ - "\u020d\u0005z\u0000\u0000\u020d\u020e\u0005p\u0000\u0000\u020e\u020f\u0005"+ - "_\u0000\u0000\u020f\u0210\u0005r\u0000\u0000\u0210\u0211\u0005e\u0000"+ - "\u0000\u0211\u0212\u0005s\u0000\u0000\u0212\u0213\u0005e\u0000\u0000\u0213"+ - "\u0214\u0005r\u0000\u0000\u0214\u0215\u0005v\u0000\u0000\u0215\u0216\u0005"+ - "e\u0000\u0000\u0216b\u0001\u0000\u0000\u0000\u0217\u0218\u0005_\u0000"+ - "\u0000\u0218\u0219\u0005_\u0000\u0000\u0219\u021a\u0005a\u0000\u0000\u021a"+ - "\u021b\u0005d\u0000\u0000\u021b\u021c\u0005d\u0000\u0000\u021c\u021d\u0005"+ - "r\u0000\u0000\u021d\u021e\u0005e\u0000\u0000\u021e\u021f\u0005s\u0000"+ - "\u0000\u021f\u0220\u0005s\u0000\u0000\u0220d\u0001\u0000\u0000\u0000\u0221"+ - "\u0222\u0005_\u0000\u0000\u0222\u0223\u0005_\u0000\u0000\u0223\u0224\u0005"+ - "z\u0000\u0000\u0224\u0225\u0005p\u0000\u0000\u0225f\u0001\u0000\u0000"+ - "\u0000\u0226\u0227\u0005_\u0000\u0000\u0227\u0228\u0005_\u0000\u0000\u0228"+ - "\u0229\u0005m\u0000\u0000\u0229\u022a\u0005e\u0000\u0000\u022a\u022b\u0005"+ - "m\u0000\u0000\u022bh\u0001\u0000\u0000\u0000\u022c\u022d\u0005_\u0000"+ - "\u0000\u022d\u022e\u0005_\u0000\u0000\u022e\u022f\u0005f\u0000\u0000\u022f"+ - "\u0230\u0005a\u0000\u0000\u0230\u0231\u0005r\u0000\u0000\u0231j\u0001"+ - "\u0000\u0000\u0000\u0232\u0233\u0005_\u0000\u0000\u0233\u0234\u0005_\u0000"+ - "\u0000\u0234\u0235\u0005n\u0000\u0000\u0235\u0236\u0005e\u0000\u0000\u0236"+ - "\u0237\u0005a\u0000\u0000\u0237\u0238\u0005r\u0000\u0000\u0238l\u0001"+ - "\u0000\u0000\u0000\u0239\u023a\u0005_\u0000\u0000\u023a\u023b\u0005_\u0000"+ - "\u0000\u023b\u023c\u0005s\u0000\u0000\u023c\u023d\u0005s\u0000\u0000\u023d"+ - "\u023e\u0005a\u0000\u0000\u023en\u0001\u0000\u0000\u0000\u023f\u0240\u0005"+ - "_\u0000\u0000\u0240\u0241\u0005_\u0000\u0000\u0241\u0242\u0005m\u0000"+ - "\u0000\u0242\u0243\u0005a\u0000\u0000\u0243p\u0001\u0000\u0000\u0000\u0244"+ - "\u0245\u0005_\u0000\u0000\u0245\u0246\u0005_\u0000\u0000\u0246\u0247\u0005"+ - "i\u0000\u0000\u0247\u0248\u0005n\u0000\u0000\u0248\u0249\u0005t\u0000"+ - "\u0000\u0249\u024a\u0005r\u0000\u0000\u024a\u024b\u0005i\u0000\u0000\u024b"+ - "\u024c\u0005n\u0000\u0000\u024c\u024d\u0005s\u0000\u0000\u024d\u024e\u0005"+ - "i\u0000\u0000\u024e\u024f\u0005c\u0000\u0000\u024fr\u0001\u0000\u0000"+ - "\u0000\u0250\u0251\u0005_\u0000\u0000\u0251\u0252\u0005_\u0000\u0000\u0252"+ - "\u0253\u0005s\u0000\u0000\u0253\u0254\u0005t\u0000\u0000\u0254\u0255\u0005"+ - "a\u0000\u0000\u0255\u0256\u0005c\u0000\u0000\u0256\u0257\u0005k\u0000"+ - "\u0000\u0257\u0258\u0005c\u0000\u0000\u0258\u0259\u0005a\u0000\u0000\u0259"+ - "\u025a\u0005l\u0000\u0000\u025a\u027d\u0005l\u0000\u0000\u025b\u025c\u0005"+ - "_\u0000\u0000\u025c\u025d\u0005_\u0000\u0000\u025d\u025e\u0005p\u0000"+ - "\u0000\u025e\u025f\u0005h\u0000\u0000\u025f\u0260\u0005i\u0000\u0000\u0260"+ - "\u0261\u0005c\u0000\u0000\u0261\u0262\u0005a\u0000\u0000\u0262\u0263\u0005"+ - "l\u0000\u0000\u0263\u027d\u0005l\u0000\u0000\u0264\u0265\u0005_\u0000"+ - "\u0000\u0265\u0266\u0005_\u0000\u0000\u0266\u0267\u0005v\u0000\u0000\u0267"+ - "\u0268\u0005a\u0000\u0000\u0268\u0269\u0005r\u0000\u0000\u0269\u026a\u0005"+ - "c\u0000\u0000\u026a\u026b\u0005a\u0000\u0000\u026b\u026c\u0005l\u0000"+ - "\u0000\u026c\u027d\u0005l\u0000\u0000\u026d\u026e\u0005_\u0000\u0000\u026e"+ - "\u026f\u0005_\u0000\u0000\u026f\u0270\u0005i\u0000\u0000\u0270\u0271\u0005"+ - "n\u0000\u0000\u0271\u0272\u0005t\u0000\u0000\u0272\u0273\u0005r\u0000"+ - "\u0000\u0273\u0274\u0005i\u0000\u0000\u0274\u0275\u0005n\u0000\u0000\u0275"+ - "\u0276\u0005s\u0000\u0000\u0276\u0277\u0005i\u0000\u0000\u0277\u0278\u0005"+ - "c\u0000\u0000\u0278\u0279\u0005c\u0000\u0000\u0279\u027a\u0005a\u0000"+ - "\u0000\u027a\u027b\u0005l\u0000\u0000\u027b\u027d\u0005l\u0000\u0000\u027c"+ - "\u0250\u0001\u0000\u0000\u0000\u027c\u025b\u0001\u0000\u0000\u0000\u027c"+ - "\u0264\u0001\u0000\u0000\u0000\u027c\u026d\u0001\u0000\u0000\u0000\u027d"+ - "t\u0001\u0000\u0000\u0000\u027e\u027f\u0005i\u0000\u0000\u027f\u0280\u0005"+ - "f\u0000\u0000\u0280v\u0001\u0000\u0000\u0000\u0281\u0282\u0005e\u0000"+ - "\u0000\u0282\u0283\u0005l\u0000\u0000\u0283\u0284\u0005s\u0000\u0000\u0284"+ - "\u0285\u0005e\u0000\u0000\u0285x\u0001\u0000\u0000\u0000\u0286\u0287\u0005"+ - "w\u0000\u0000\u0287\u0288\u0005h\u0000\u0000\u0288\u0289\u0005i\u0000"+ - "\u0000\u0289\u028a\u0005l\u0000\u0000\u028a\u028b\u0005e\u0000\u0000\u028b"+ - "z\u0001\u0000\u0000\u0000\u028c\u028d\u0005d\u0000\u0000\u028d\u028e\u0005"+ - "o\u0000\u0000\u028e|\u0001\u0000\u0000\u0000\u028f\u0290\u0005f\u0000"+ - "\u0000\u0290\u0291\u0005o\u0000\u0000\u0291\u0292\u0005r\u0000\u0000\u0292"+ - "~\u0001\u0000\u0000\u0000\u0293\u0294\u0005s\u0000\u0000\u0294\u0295\u0005"+ - "w\u0000\u0000\u0295\u0296\u0005i\u0000\u0000\u0296\u0297\u0005t\u0000"+ - "\u0000\u0297\u0298\u0005c\u0000\u0000\u0298\u0299\u0005h\u0000\u0000\u0299"+ - "\u0080\u0001\u0000\u0000\u0000\u029a\u029b\u0005r\u0000\u0000\u029b\u029c"+ - "\u0005e\u0000\u0000\u029c\u029d\u0005t\u0000\u0000\u029d\u029e\u0005u"+ - "\u0000\u0000\u029e\u029f\u0005r\u0000\u0000\u029f\u02a0\u0005n\u0000\u0000"+ - "\u02a0\u0082\u0001\u0000\u0000\u0000\u02a1\u02a2\u0005b\u0000\u0000\u02a2"+ - "\u02a3\u0005r\u0000\u0000\u02a3\u02a4\u0005e\u0000\u0000\u02a4\u02a5\u0005"+ - "a\u0000\u0000\u02a5\u02a6\u0005k\u0000\u0000\u02a6\u0084\u0001\u0000\u0000"+ - "\u0000\u02a7\u02a8\u0005c\u0000\u0000\u02a8\u02a9\u0005o\u0000\u0000\u02a9"+ - "\u02aa\u0005n\u0000\u0000\u02aa\u02ab\u0005t\u0000\u0000\u02ab\u02ac\u0005"+ - "i\u0000\u0000\u02ac\u02ad\u0005n\u0000\u0000\u02ad\u02ae\u0005u\u0000"+ - "\u0000\u02ae\u02af\u0005e\u0000\u0000\u02af\u0086\u0001\u0000\u0000\u0000"+ - "\u02b0\u02b1\u0005g\u0000\u0000\u02b1\u02b2\u0005o\u0000\u0000\u02b2\u02b3"+ - "\u0005t\u0000\u0000\u02b3\u02b4\u0005o\u0000\u0000\u02b4\u0088\u0001\u0000"+ - "\u0000\u0000\u02b5\u02b6\u0005a\u0000\u0000\u02b6\u02b7\u0005s\u0000\u0000"+ - "\u02b7\u02b8\u0005m\u0000\u0000\u02b8\u02b9\u0001\u0000\u0000\u0000\u02b9"+ - "\u02ba\u0006C\u0001\u0000\u02ba\u008a\u0001\u0000\u0000\u0000\u02bb\u02bc"+ - "\u0005d\u0000\u0000\u02bc\u02bd\u0005e\u0000\u0000\u02bd\u02be\u0005f"+ - "\u0000\u0000\u02be\u02bf\u0005a\u0000\u0000\u02bf\u02c0\u0005u\u0000\u0000"+ - "\u02c0\u02c1\u0005l\u0000\u0000\u02c1\u02c2\u0005t\u0000\u0000\u02c2\u008c"+ - "\u0001\u0000\u0000\u0000\u02c3\u02c4\u0005c\u0000\u0000\u02c4\u02c5\u0005"+ - "a\u0000\u0000\u02c5\u02c6\u0005s\u0000\u0000\u02c6\u02c7\u0005e\u0000"+ - "\u0000\u02c7\u008e\u0001\u0000\u0000\u0000\u02c8\u02c9\u0005s\u0000\u0000"+ - "\u02c9\u02ca\u0005t\u0000\u0000\u02ca\u02cb\u0005r\u0000\u0000\u02cb\u02cc"+ - "\u0005u\u0000\u0000\u02cc\u02cd\u0005c\u0000\u0000\u02cd\u02ce\u0005t"+ - "\u0000\u0000\u02ce\u0090\u0001\u0000\u0000\u0000\u02cf\u02d0\u0005u\u0000"+ - "\u0000\u02d0\u02d1\u0005n\u0000\u0000\u02d1\u02d2\u0005i\u0000\u0000\u02d2"+ - "\u02d3\u0005o\u0000\u0000\u02d3\u02d4\u0005n\u0000\u0000\u02d4\u0092\u0001"+ - "\u0000\u0000\u0000\u02d5\u02d6\u0005e\u0000\u0000\u02d6\u02d7\u0005n\u0000"+ - "\u0000\u02d7\u02d8\u0005u\u0000\u0000\u02d8\u02d9\u0005m\u0000\u0000\u02d9"+ - "\u0094\u0001\u0000\u0000\u0000\u02da\u02db\u0005s\u0000\u0000\u02db\u02dc"+ - "\u0005i\u0000\u0000\u02dc\u02dd\u0005z\u0000\u0000\u02dd\u02de\u0005e"+ - "\u0000\u0000\u02de\u02df\u0005o\u0000\u0000\u02df\u02e0\u0005f\u0000\u0000"+ - "\u02e0\u0096\u0001\u0000\u0000\u0000\u02e1\u02e2\u0005t\u0000\u0000\u02e2"+ - "\u02e3\u0005y\u0000\u0000\u02e3\u02e4\u0005p\u0000\u0000\u02e4\u02e5\u0005"+ - "e\u0000\u0000\u02e5\u02e6\u0005i\u0000\u0000\u02e6\u02e7\u0005d\u0000"+ - "\u0000\u02e7\u0098\u0001\u0000\u0000\u0000\u02e8\u02e9\u0005d\u0000\u0000"+ - "\u02e9\u02ea\u0005e\u0000\u0000\u02ea\u02eb\u0005f\u0000\u0000\u02eb\u02ec"+ - "\u0005i\u0000\u0000\u02ec\u02ed\u0005n\u0000\u0000\u02ed\u02ee\u0005e"+ - "\u0000\u0000\u02ee\u02ef\u0005d\u0000\u0000\u02ef\u009a\u0001\u0000\u0000"+ - "\u0000\u02f0\u02f1\u0005k\u0000\u0000\u02f1\u02f2\u0005i\u0000\u0000\u02f2"+ - "\u02f3\u0005c\u0000\u0000\u02f3\u02f4\u0005k\u0000\u0000\u02f4\u02f5\u0005"+ - "a\u0000\u0000\u02f5\u02f6\u0005s\u0000\u0000\u02f6\u02f7\u0005m\u0000"+ - "\u0000\u02f7\u009c\u0001\u0000\u0000\u0000\u02f8\u02f9\u0005!\u0000\u0000"+ - "\u02f9\u009e\u0001\u0000\u0000\u0000\u02fa\u02fb\u0005s\u0000\u0000\u02fb"+ - "\u02fc\u0005i\u0000\u0000\u02fc\u02fd\u0005g\u0000\u0000\u02fd\u02fe\u0005"+ - "n\u0000\u0000\u02fe\u02ff\u0005e\u0000\u0000\u02ff\u032e\u0005d\u0000"+ - "\u0000\u0300\u0301\u0005u\u0000\u0000\u0301\u0302\u0005n\u0000\u0000\u0302"+ - "\u0303\u0005s\u0000\u0000\u0303\u0304\u0005i\u0000\u0000\u0304\u0305\u0005"+ - "g\u0000\u0000\u0305\u0306\u0005n\u0000\u0000\u0306\u0307\u0005e\u0000"+ - "\u0000\u0307\u032e\u0005d\u0000\u0000\u0308\u0309\u0005b\u0000\u0000\u0309"+ - "\u030a\u0005y\u0000\u0000\u030a\u030b\u0005t\u0000\u0000\u030b\u032e\u0005"+ - "e\u0000\u0000\u030c\u030d\u0005w\u0000\u0000\u030d\u030e\u0005o\u0000"+ - "\u0000\u030e\u030f\u0005r\u0000\u0000\u030f\u032e\u0005d\u0000\u0000\u0310"+ - "\u0311\u0005d\u0000\u0000\u0311\u0312\u0005w\u0000\u0000\u0312\u0313\u0005"+ - "o\u0000\u0000\u0313\u0314\u0005r\u0000\u0000\u0314\u032e\u0005d\u0000"+ - "\u0000\u0315\u0316\u0005b\u0000\u0000\u0316\u0317\u0005o\u0000\u0000\u0317"+ - "\u0318\u0005o\u0000\u0000\u0318\u032e\u0005l\u0000\u0000\u0319\u031a\u0005"+ - "c\u0000\u0000\u031a\u031b\u0005h\u0000\u0000\u031b\u031c\u0005a\u0000"+ - "\u0000\u031c\u032e\u0005r\u0000\u0000\u031d\u031e\u0005s\u0000\u0000\u031e"+ - "\u031f\u0005h\u0000\u0000\u031f\u0320\u0005o\u0000\u0000\u0320\u0321\u0005"+ - "r\u0000\u0000\u0321\u032e\u0005t\u0000\u0000\u0322\u0323\u0005i\u0000"+ - "\u0000\u0323\u0324\u0005n\u0000\u0000\u0324\u032e\u0005t\u0000\u0000\u0325"+ - "\u0326\u0005l\u0000\u0000\u0326\u0327\u0005o\u0000\u0000\u0327\u0328\u0005"+ - "n\u0000\u0000\u0328\u032e\u0005g\u0000\u0000\u0329\u032a\u0005v\u0000"+ - "\u0000\u032a\u032b\u0005o\u0000\u0000\u032b\u032c\u0005i\u0000\u0000\u032c"+ - "\u032e\u0005d\u0000\u0000\u032d\u02fa\u0001\u0000\u0000\u0000\u032d\u0300"+ - "\u0001\u0000\u0000\u0000\u032d\u0308\u0001\u0000\u0000\u0000\u032d\u030c"+ - "\u0001\u0000\u0000\u0000\u032d\u0310\u0001\u0000\u0000\u0000\u032d\u0315"+ - "\u0001\u0000\u0000\u0000\u032d\u0319\u0001\u0000\u0000\u0000\u032d\u031d"+ - "\u0001\u0000\u0000\u0000\u032d\u0322\u0001\u0000\u0000\u0000\u032d\u0325"+ - "\u0001\u0000\u0000\u0000\u032d\u0329\u0001\u0000\u0000\u0000\u032e\u00a0"+ - "\u0001\u0000\u0000\u0000\u032f\u0330\u0005t\u0000\u0000\u0330\u0331\u0005"+ - "r\u0000\u0000\u0331\u0332\u0005u\u0000\u0000\u0332\u0339\u0005e\u0000"+ - "\u0000\u0333\u0334\u0005f\u0000\u0000\u0334\u0335\u0005a\u0000\u0000\u0335"+ - "\u0336\u0005l\u0000\u0000\u0336\u0337\u0005s\u0000\u0000\u0337\u0339\u0005"+ - "e\u0000\u0000\u0338\u032f\u0001\u0000\u0000\u0000\u0338\u0333\u0001\u0000"+ - "\u0000\u0000\u0339\u00a2\u0001\u0000\u0000\u0000\u033a\u033b\u0005{\u0000"+ - "\u0000\u033b\u033c\u0005{\u0000\u0000\u033c\u0340\u0001\u0000\u0000\u0000"+ - "\u033d\u033f\t\u0000\u0000\u0000\u033e\u033d\u0001\u0000\u0000\u0000\u033f"+ - "\u0342\u0001\u0000\u0000\u0000\u0340\u0341\u0001\u0000\u0000\u0000\u0340"+ - "\u033e\u0001\u0000\u0000\u0000\u0341\u0343\u0001\u0000\u0000\u0000\u0342"+ - "\u0340\u0001\u0000\u0000\u0000\u0343\u0344\u0005}\u0000\u0000\u0344\u0345"+ - "\u0005}\u0000\u0000\u0345\u00a4\u0001\u0000\u0000\u0000\u0346\u0347\u0005"+ - "#\u0000\u0000\u0347\u0348\u0005i\u0000\u0000\u0348\u0349\u0005m\u0000"+ - "\u0000\u0349\u034a\u0005p\u0000\u0000\u034a\u034b\u0005o\u0000\u0000\u034b"+ - "\u034c\u0005r\u0000\u0000\u034c\u034d\u0005t\u0000\u0000\u034d\u034e\u0001"+ - "\u0000\u0000\u0000\u034e\u034f\u0006Q\u0002\u0000\u034f\u00a6\u0001\u0000"+ - "\u0000\u0000\u0350\u0351\u0005#\u0000\u0000\u0351\u0352\u0005i\u0000\u0000"+ - "\u0352\u0353\u0005n\u0000\u0000\u0353\u0354\u0005c\u0000\u0000\u0354\u0355"+ - "\u0005l\u0000\u0000\u0355\u0356\u0005u\u0000\u0000\u0356\u0357\u0005d"+ - "\u0000\u0000\u0357\u0358\u0005e\u0000\u0000\u0358\u0359\u0001\u0000\u0000"+ - "\u0000\u0359\u035a\u0006R\u0003\u0000\u035a\u00a8\u0001\u0000\u0000\u0000"+ - "\u035b\u035c\u0005#\u0000\u0000\u035c\u035d\u0005p\u0000\u0000\u035d\u035e"+ - "\u0005r\u0000\u0000\u035e\u035f\u0005a\u0000\u0000\u035f\u0360\u0005g"+ - "\u0000\u0000\u0360\u0361\u0005m\u0000\u0000\u0361\u0362\u0005a\u0000\u0000"+ - "\u0362\u00aa\u0001\u0000\u0000\u0000\u0363\u0364\u0005#\u0000\u0000\u0364"+ - "\u0365\u0005d\u0000\u0000\u0365\u0366\u0005e\u0000\u0000\u0366\u0367\u0005"+ - "f\u0000\u0000\u0367\u0368\u0005i\u0000\u0000\u0368\u0369\u0005n\u0000"+ - "\u0000\u0369\u036a\u0005e\u0000\u0000\u036a\u00ac\u0001\u0000\u0000\u0000"+ - "\u036b\u036c\u0005\\\u0000\u0000\u036c\u0371\u0005\n\u0000\u0000\u036d"+ - "\u036e\u0005\\\u0000\u0000\u036e\u036f\u0005\r\u0000\u0000\u036f\u0371"+ - "\u0005\n\u0000\u0000\u0370\u036b\u0001\u0000\u0000\u0000\u0370\u036d\u0001"+ - "\u0000\u0000\u0000\u0371\u00ae\u0001\u0000\u0000\u0000\u0372\u0373\u0005"+ - "#\u0000\u0000\u0373\u0374\u0005u\u0000\u0000\u0374\u0375\u0005n\u0000"+ - "\u0000\u0375\u0376\u0005d\u0000\u0000\u0376\u0377\u0005e\u0000\u0000\u0377"+ - "\u0378\u0005f\u0000\u0000\u0378\u00b0\u0001\u0000\u0000\u0000\u0379\u037a"+ - "\u0005#\u0000\u0000\u037a\u037b\u0005i\u0000\u0000\u037b\u037c\u0005f"+ - "\u0000\u0000\u037c\u037d\u0005d\u0000\u0000\u037d\u037e\u0005e\u0000\u0000"+ - "\u037e\u037f\u0005f\u0000\u0000\u037f\u00b2\u0001\u0000\u0000\u0000\u0380"+ - "\u0381\u0005#\u0000\u0000\u0381\u0382\u0005i\u0000\u0000\u0382\u0383\u0005"+ - "f\u0000\u0000\u0383\u0384\u0005n\u0000\u0000\u0384\u0385\u0005d\u0000"+ - "\u0000\u0385\u0386\u0005e\u0000\u0000\u0386\u0387\u0005f\u0000\u0000\u0387"+ - "\u00b4\u0001\u0000\u0000\u0000\u0388\u0389\u0005#\u0000\u0000\u0389\u038a"+ - "\u0005i\u0000\u0000\u038a\u038b\u0005f\u0000\u0000\u038b\u00b6\u0001\u0000"+ - "\u0000\u0000\u038c\u038d\u0005#\u0000\u0000\u038d\u038e\u0005e\u0000\u0000"+ - "\u038e\u038f\u0005l\u0000\u0000\u038f\u0390\u0005i\u0000\u0000\u0390\u0391"+ - "\u0005f\u0000\u0000\u0391\u00b8\u0001\u0000\u0000\u0000\u0392\u0393\u0005"+ - "#\u0000\u0000\u0393\u0394\u0005e\u0000\u0000\u0394\u0395\u0005l\u0000"+ - "\u0000\u0395\u0396\u0005s\u0000\u0000\u0396\u0397\u0005e\u0000\u0000\u0397"+ - "\u00ba\u0001\u0000\u0000\u0000\u0398\u0399\u0005#\u0000\u0000\u0399\u039a"+ - "\u0005e\u0000\u0000\u039a\u039b\u0005n\u0000\u0000\u039b\u039c\u0005d"+ - "\u0000\u0000\u039c\u039d\u0005i\u0000\u0000\u039d\u039e\u0005f\u0000\u0000"+ - "\u039e\u00bc\u0001\u0000\u0000\u0000\u039f\u03a0\u0005#\u0000\u0000\u03a0"+ - "\u03a1\u0005e\u0000\u0000\u03a1\u03a2\u0005r\u0000\u0000\u03a2\u03a3\u0005"+ - "r\u0000\u0000\u03a3\u03a4\u0005o\u0000\u0000\u03a4\u03a5\u0005r\u0000"+ - "\u0000\u03a5\u00be\u0001\u0000\u0000\u0000\u03a6\u03a7\u0005#\u0000\u0000"+ - "\u03a7\u03a8\u0003\u00dbl\u0000\u03a8\u00c0\u0001\u0000\u0000\u0000\u03a9"+ - "\u03aa\u0005#\u0000\u0000\u03aa\u03ab\u0003\u00dbl\u0000\u03ab\u00c2\u0001"+ - "\u0000\u0000\u0000\u03ac\u03af\u0003\u00c5a\u0000\u03ad\u03af\u0003\u00cd"+ - "e\u0000\u03ae\u03ac\u0001\u0000\u0000\u0000\u03ae\u03ad\u0001\u0000\u0000"+ - "\u0000\u03af\u00c4\u0001\u0000\u0000\u0000\u03b0\u03b4\u0003\u00c7b\u0000"+ - "\u03b1\u03b4\u0003\u00c9c\u0000\u03b2\u03b4\u0003\u00cbd\u0000\u03b3\u03b0"+ - "\u0001\u0000\u0000\u0000\u03b3\u03b1\u0001\u0000\u0000\u0000\u03b3\u03b2"+ - "\u0001\u0000\u0000\u0000\u03b4\u00c6\u0001\u0000\u0000\u0000\u03b5\u03bb"+ - "\u0005%\u0000\u0000\u03b6\u03b7\u00050\u0000\u0000\u03b7\u03bb\u0005b"+ - "\u0000\u0000\u03b8\u03b9\u00050\u0000\u0000\u03b9\u03bb\u0005B\u0000\u0000"+ - "\u03ba\u03b5\u0001\u0000\u0000\u0000\u03ba\u03b6\u0001\u0000\u0000\u0000"+ - "\u03ba\u03b8\u0001\u0000\u0000\u0000\u03bb\u03bf\u0001\u0000\u0000\u0000"+ - "\u03bc\u03be\u0003\u00d5i\u0000\u03bd\u03bc\u0001\u0000\u0000\u0000\u03be"+ - "\u03c1\u0001\u0000\u0000\u0000\u03bf\u03bd\u0001\u0000\u0000\u0000\u03bf"+ - "\u03c0\u0001\u0000\u0000\u0000\u03c0\u03c2\u0001\u0000\u0000\u0000\u03c1"+ - "\u03bf\u0001\u0000\u0000\u0000\u03c2\u03c4\u0005.\u0000\u0000\u03c3\u03c5"+ - "\u0003\u00d5i\u0000\u03c4\u03c3\u0001\u0000\u0000\u0000\u03c5\u03c6\u0001"+ - "\u0000\u0000\u0000\u03c6\u03c4\u0001\u0000\u0000\u0000\u03c6\u03c7\u0001"+ - "\u0000\u0000\u0000\u03c7\u00c8\u0001\u0000\u0000\u0000\u03c8\u03ca\u0003"+ - "\u00d7j\u0000\u03c9\u03c8\u0001\u0000\u0000\u0000\u03ca\u03cd\u0001\u0000"+ - "\u0000\u0000\u03cb\u03c9\u0001\u0000\u0000\u0000\u03cb\u03cc\u0001\u0000"+ - "\u0000\u0000\u03cc\u03ce\u0001\u0000\u0000\u0000\u03cd\u03cb\u0001\u0000"+ - "\u0000\u0000\u03ce\u03d0\u0005.\u0000\u0000\u03cf\u03d1\u0003\u00d7j\u0000"+ - "\u03d0\u03cf\u0001\u0000\u0000\u0000\u03d1\u03d2\u0001\u0000\u0000\u0000"+ - "\u03d2\u03d0\u0001\u0000\u0000\u0000\u03d2\u03d3\u0001\u0000\u0000\u0000"+ - "\u03d3\u00ca\u0001\u0000\u0000\u0000\u03d4\u03da\u0005$\u0000\u0000\u03d5"+ - "\u03d6\u00050\u0000\u0000\u03d6\u03da\u0005x\u0000\u0000\u03d7\u03d8\u0005"+ - "0\u0000\u0000\u03d8\u03da\u0005X\u0000\u0000\u03d9\u03d4\u0001\u0000\u0000"+ - "\u0000\u03d9\u03d5\u0001\u0000\u0000\u0000\u03d9\u03d7\u0001\u0000\u0000"+ - "\u0000\u03da\u03de\u0001\u0000\u0000\u0000\u03db\u03dd\u0003\u00d9k\u0000"+ - "\u03dc\u03db\u0001\u0000\u0000\u0000\u03dd\u03e0\u0001\u0000\u0000\u0000"+ - "\u03de\u03dc\u0001\u0000\u0000\u0000\u03de\u03df\u0001\u0000\u0000\u0000"+ - "\u03df\u03e1\u0001\u0000\u0000\u0000\u03e0\u03de\u0001\u0000\u0000\u0000"+ - "\u03e1\u03e3\u0005.\u0000\u0000\u03e2\u03e4\u0003\u00d9k\u0000\u03e3\u03e2"+ - "\u0001\u0000\u0000\u0000\u03e4\u03e5\u0001\u0000\u0000\u0000\u03e5\u03e3"+ - "\u0001\u0000\u0000\u0000\u03e5\u03e6\u0001\u0000\u0000\u0000\u03e6\u00cc"+ - "\u0001\u0000\u0000\u0000\u03e7\u03eb\u0003\u00d1g\u0000\u03e8\u03eb\u0003"+ - "\u00d3h\u0000\u03e9\u03eb\u0003\u00cff\u0000\u03ea\u03e7\u0001\u0000\u0000"+ - "\u0000\u03ea\u03e8\u0001\u0000\u0000\u0000\u03ea\u03e9\u0001\u0000\u0000"+ - "\u0000\u03eb\u03ef\u0001\u0000\u0000\u0000\u03ec\u03ed\u0007\u0000\u0000"+ - "\u0000\u03ed\u03f0\u0007\u0001\u0000\u0000\u03ee\u03f0\u0007\u0002\u0000"+ - "\u0000\u03ef\u03ec\u0001\u0000\u0000\u0000\u03ef\u03ee\u0001\u0000\u0000"+ - "\u0000\u03ef\u03f0\u0001\u0000\u0000\u0000\u03f0\u00ce\u0001\u0000\u0000"+ - "\u0000\u03f1\u03f2\u00050\u0000\u0000\u03f2\u03f4\u0007\u0003\u0000\u0000"+ - "\u03f3\u03f5\u0003\u00d5i\u0000\u03f4\u03f3\u0001\u0000\u0000\u0000\u03f5"+ - "\u03f6\u0001\u0000\u0000\u0000\u03f6\u03f4\u0001\u0000\u0000\u0000\u03f6"+ - "\u03f7\u0001\u0000\u0000\u0000\u03f7\u03ff\u0001\u0000\u0000\u0000\u03f8"+ - "\u03fa\u0005%\u0000\u0000\u03f9\u03fb\u0003\u00d5i\u0000\u03fa\u03f9\u0001"+ - "\u0000\u0000\u0000\u03fb\u03fc\u0001\u0000\u0000\u0000\u03fc\u03fa\u0001"+ - "\u0000\u0000\u0000\u03fc\u03fd\u0001\u0000\u0000\u0000\u03fd\u03ff\u0001"+ - "\u0000\u0000\u0000\u03fe\u03f1\u0001\u0000\u0000\u0000\u03fe\u03f8\u0001"+ - "\u0000\u0000\u0000\u03ff\u00d0\u0001\u0000\u0000\u0000\u0400\u0402\u0003"+ - "\u00d7j\u0000\u0401\u0400\u0001\u0000\u0000\u0000\u0402\u0403\u0001\u0000"+ - "\u0000\u0000\u0403\u0401\u0001\u0000\u0000\u0000\u0403\u0404\u0001\u0000"+ - "\u0000\u0000\u0404\u00d2\u0001\u0000\u0000\u0000\u0405\u040b\u0005$\u0000"+ - "\u0000\u0406\u0407\u00050\u0000\u0000\u0407\u040b\u0005x\u0000\u0000\u0408"+ - "\u0409\u00050\u0000\u0000\u0409\u040b\u0005X\u0000\u0000\u040a\u0405\u0001"+ - "\u0000\u0000\u0000\u040a\u0406\u0001\u0000\u0000\u0000\u040a\u0408\u0001"+ - "\u0000\u0000\u0000\u040b\u040d\u0001\u0000\u0000\u0000\u040c\u040e\u0003"+ - "\u00d9k\u0000\u040d\u040c\u0001\u0000\u0000\u0000\u040e\u040f\u0001\u0000"+ - "\u0000\u0000\u040f\u040d\u0001\u0000\u0000\u0000\u040f\u0410\u0001\u0000"+ - "\u0000\u0000\u0410\u00d4\u0001\u0000\u0000\u0000\u0411\u0412\u0007\u0004"+ - "\u0000\u0000\u0412\u00d6\u0001\u0000\u0000\u0000\u0413\u0414\u0007\u0005"+ - "\u0000\u0000\u0414\u00d8\u0001\u0000\u0000\u0000\u0415\u0416\u0007\u0006"+ - "\u0000\u0000\u0416\u00da\u0001\u0000\u0000\u0000\u0417\u041b\u0003\u00dd"+ - "m\u0000\u0418\u041a\u0003\u00dfn\u0000\u0419\u0418\u0001\u0000\u0000\u0000"+ - "\u041a\u041d\u0001\u0000\u0000\u0000\u041b\u0419\u0001\u0000\u0000\u0000"+ - "\u041b\u041c\u0001\u0000\u0000\u0000\u041c\u041e\u0001\u0000\u0000\u0000"+ - "\u041d\u041b\u0001\u0000\u0000\u0000\u041e\u041f\u0006l\u0004\u0000\u041f"+ - "\u00dc\u0001\u0000\u0000\u0000\u0420\u0421\u0007\u0007\u0000\u0000\u0421"+ - "\u00de\u0001\u0000\u0000\u0000\u0422\u0423\u0007\b\u0000\u0000\u0423\u00e0"+ - "\u0001\u0000\u0000\u0000\u0424\u042a\u0005\"\u0000\u0000\u0425\u0426\u0005"+ - "\\\u0000\u0000\u0426\u0429\u0005\"\u0000\u0000\u0427\u0429\b\t\u0000\u0000"+ - "\u0428\u0425\u0001\u0000\u0000\u0000\u0428\u0427\u0001\u0000\u0000\u0000"+ - "\u0429\u042c\u0001\u0000\u0000\u0000\u042a\u0428\u0001\u0000\u0000\u0000"+ - "\u042a\u042b\u0001\u0000\u0000\u0000\u042b\u042d\u0001\u0000\u0000\u0000"+ - "\u042c\u042a\u0001\u0000\u0000\u0000\u042d\u042f\u0005\"\u0000\u0000\u042e"+ - "\u0430\u0007\n\u0000\u0000\u042f\u042e\u0001\u0000\u0000\u0000\u042f\u0430"+ - "\u0001\u0000\u0000\u0000\u0430\u0435\u0001\u0000\u0000\u0000\u0431\u0433"+ - "\u0007\u000b\u0000\u0000\u0432\u0434\u0007\f\u0000\u0000\u0433\u0432\u0001"+ - "\u0000\u0000\u0000\u0433\u0434\u0001\u0000\u0000\u0000\u0434\u0436\u0001"+ - "\u0000\u0000\u0000\u0435\u0431\u0001\u0000\u0000\u0000\u0435\u0436\u0001"+ - "\u0000\u0000\u0000\u0436\u0438\u0001\u0000\u0000\u0000\u0437\u0439\u0007"+ - "\n\u0000\u0000\u0438\u0437\u0001\u0000\u0000\u0000\u0438\u0439\u0001\u0000"+ - "\u0000\u0000\u0439\u00e2\u0001\u0000\u0000\u0000\u043a\u0449\u0005\'\u0000"+ - "\u0000\u043b\u0446\u0005\\\u0000\u0000\u043c\u043e\u0007\r\u0000\u0000"+ - "\u043d\u043f\u0007\u0005\u0000\u0000\u043e\u043d\u0001\u0000\u0000\u0000"+ - "\u043e\u043f\u0001\u0000\u0000\u0000\u043f\u0441\u0001\u0000\u0000\u0000"+ - "\u0440\u0442\u0007\u0005\u0000\u0000\u0441\u0440\u0001\u0000\u0000\u0000"+ - "\u0441\u0442\u0001\u0000\u0000\u0000\u0442\u0447\u0001\u0000\u0000\u0000"+ - "\u0443\u0444\u0005x\u0000\u0000\u0444\u0445\u0007\u000e\u0000\u0000\u0445"+ - "\u0447\u0007\u000e\u0000\u0000\u0446\u043c\u0001\u0000\u0000\u0000\u0446"+ - "\u0443\u0001\u0000\u0000\u0000\u0447\u044a\u0001\u0000\u0000\u0000\u0448"+ - "\u044a\b\u000f\u0000\u0000\u0449\u043b\u0001\u0000\u0000\u0000\u0449\u0448"+ - "\u0001\u0000\u0000\u0000\u044a\u044b\u0001\u0000\u0000\u0000\u044b\u044c"+ - "\u0005\'\u0000\u0000\u044c\u00e4\u0001\u0000\u0000\u0000\u044d\u044f\u0007"+ - "\u0010\u0000\u0000\u044e\u044d\u0001\u0000\u0000\u0000\u044f\u0450\u0001"+ - "\u0000\u0000\u0000\u0450\u044e\u0001\u0000\u0000\u0000\u0450\u0451\u0001"+ - "\u0000\u0000\u0000\u0451\u0452\u0001\u0000\u0000\u0000\u0452\u0453\u0006"+ - "q\u0005\u0000\u0453\u00e6\u0001\u0000\u0000\u0000\u0454\u0455\u0005/\u0000"+ - "\u0000\u0455\u0456\u0005/\u0000\u0000\u0456\u045a\u0001\u0000\u0000\u0000"+ - "\u0457\u0459\b\u0011\u0000\u0000\u0458\u0457\u0001\u0000\u0000\u0000\u0459"+ - "\u045c\u0001\u0000\u0000\u0000\u045a\u0458\u0001\u0000\u0000\u0000\u045a"+ - "\u045b\u0001\u0000\u0000\u0000\u045b\u045d\u0001\u0000\u0000\u0000\u045c"+ - "\u045a\u0001\u0000\u0000\u0000\u045d\u045e\u0006r\u0006\u0000\u045e\u00e8"+ - "\u0001\u0000\u0000\u0000\u045f\u0460\u0005/\u0000\u0000\u0460\u0461\u0005"+ - "*\u0000\u0000\u0461\u0465\u0001\u0000\u0000\u0000\u0462\u0464\t\u0000"+ - "\u0000\u0000\u0463\u0462\u0001\u0000\u0000\u0000\u0464\u0467\u0001\u0000"+ - "\u0000\u0000\u0465\u0466\u0001\u0000\u0000\u0000\u0465\u0463\u0001\u0000"+ - "\u0000\u0000\u0466\u0468\u0001\u0000\u0000\u0000\u0467\u0465\u0001\u0000"+ - "\u0000\u0000\u0468\u0469\u0005*\u0000\u0000\u0469\u046a\u0005/\u0000\u0000"+ - "\u046a\u046b\u0001\u0000\u0000\u0000\u046b\u046c\u0006s\u0006\u0000\u046c"+ - "\u00ea\u0001\u0000\u0000\u0000\u046d\u046e\u0005.\u0000\u0000\u046e\u046f"+ - "\u0005b\u0000\u0000\u046f\u0470\u0005y\u0000\u0000\u0470\u0471\u0005t"+ - "\u0000\u0000\u0471\u0472\u0005e\u0000\u0000\u0472\u00ec\u0001\u0000\u0000"+ - "\u0000\u0473\u0474\u0005b\u0000\u0000\u0474\u0475\u0005r\u0000\u0000\u0475"+ - "\u06d3\u0005k\u0000\u0000\u0476\u0477\u0005o\u0000\u0000\u0477\u0478\u0005"+ - "r\u0000\u0000\u0478\u06d3\u0005a\u0000\u0000\u0479\u047a\u0005k\u0000"+ - "\u0000\u047a\u047b\u0005i\u0000\u0000\u047b\u06d3\u0005l\u0000\u0000\u047c"+ - "\u047d\u0005s\u0000\u0000\u047d\u047e\u0005l\u0000\u0000\u047e\u06d3\u0005"+ - "o\u0000\u0000\u047f\u0480\u0005n\u0000\u0000\u0480\u0481\u0005o\u0000"+ - "\u0000\u0481\u06d3\u0005p\u0000\u0000\u0482\u0483\u0005a\u0000\u0000\u0483"+ - "\u0484\u0005s\u0000\u0000\u0484\u06d3\u0005l\u0000\u0000\u0485\u0486\u0005"+ - "p\u0000\u0000\u0486\u0487\u0005h\u0000\u0000\u0487\u06d3\u0005p\u0000"+ - "\u0000\u0488\u0489\u0005a\u0000\u0000\u0489\u048a\u0005n\u0000\u0000\u048a"+ - "\u06d3\u0005c\u0000\u0000\u048b\u048c\u0005b\u0000\u0000\u048c\u048d\u0005"+ - "p\u0000\u0000\u048d\u06d3\u0005l\u0000\u0000\u048e\u048f\u0005c\u0000"+ - "\u0000\u048f\u0490\u0005l\u0000\u0000\u0490\u06d3\u0005c\u0000\u0000\u0491"+ - "\u0492\u0005j\u0000\u0000\u0492\u0493\u0005s\u0000\u0000\u0493\u06d3\u0005"+ - "r\u0000\u0000\u0494\u0495\u0005a\u0000\u0000\u0495\u0496\u0005n\u0000"+ - "\u0000\u0496\u06d3\u0005d\u0000\u0000\u0497\u0498\u0005r\u0000\u0000\u0498"+ - "\u0499\u0005l\u0000\u0000\u0499\u06d3\u0005a\u0000\u0000\u049a\u049b\u0005"+ - "b\u0000\u0000\u049b\u049c\u0005i\u0000\u0000\u049c\u06d3\u0005t\u0000"+ - "\u0000\u049d\u049e\u0005r\u0000\u0000\u049e\u049f\u0005o\u0000\u0000\u049f"+ - "\u06d3\u0005l\u0000\u0000\u04a0\u04a1\u0005p\u0000\u0000\u04a1\u04a2\u0005"+ - "l\u0000\u0000\u04a2\u06d3\u0005a\u0000\u0000\u04a3\u04a4\u0005p\u0000"+ - "\u0000\u04a4\u04a5\u0005l\u0000\u0000\u04a5\u06d3\u0005p\u0000\u0000\u04a6"+ - "\u04a7\u0005b\u0000\u0000\u04a7\u04a8\u0005m\u0000\u0000\u04a8\u06d3\u0005"+ - "i\u0000\u0000\u04a9\u04aa\u0005s\u0000\u0000\u04aa\u04ab\u0005e\u0000"+ - "\u0000\u04ab\u06d3\u0005c\u0000\u0000\u04ac\u04ad\u0005r\u0000\u0000\u04ad"+ - "\u04ae\u0005t\u0000\u0000\u04ae\u06d3\u0005i\u0000\u0000\u04af\u04b0\u0005"+ - "e\u0000\u0000\u04b0\u04b1\u0005o\u0000\u0000\u04b1\u06d3\u0005r\u0000"+ - "\u0000\u04b2\u04b3\u0005s\u0000\u0000\u04b3\u04b4\u0005r\u0000\u0000\u04b4"+ - "\u06d3\u0005e\u0000\u0000\u04b5\u04b6\u0005l\u0000\u0000\u04b6\u04b7\u0005"+ - "s\u0000\u0000\u04b7\u06d3\u0005r\u0000\u0000\u04b8\u04b9\u0005p\u0000"+ - "\u0000\u04b9\u04ba\u0005h\u0000\u0000\u04ba\u06d3\u0005a\u0000\u0000\u04bb"+ - "\u04bc\u0005a\u0000\u0000\u04bc\u04bd\u0005l\u0000\u0000\u04bd\u06d3\u0005"+ - "r\u0000\u0000\u04be\u04bf\u0005j\u0000\u0000\u04bf\u04c0\u0005m\u0000"+ - "\u0000\u04c0\u06d3\u0005p\u0000\u0000\u04c1\u04c2\u0005b\u0000\u0000\u04c2"+ - "\u04c3\u0005v\u0000\u0000\u04c3\u06d3\u0005c\u0000\u0000\u04c4\u04c5\u0005"+ - "c\u0000\u0000\u04c5\u04c6\u0005l\u0000\u0000\u04c6\u06d3\u0005i\u0000"+ - "\u0000\u04c7\u04c8\u0005r\u0000\u0000\u04c8\u04c9\u0005t\u0000\u0000\u04c9"+ - "\u06d3\u0005s\u0000\u0000\u04ca\u04cb\u0005a\u0000\u0000\u04cb\u04cc\u0005"+ - "d\u0000\u0000\u04cc\u06d3\u0005c\u0000\u0000\u04cd\u04ce\u0005r\u0000"+ - "\u0000\u04ce\u04cf\u0005r\u0000\u0000\u04cf\u06d3\u0005a\u0000\u0000\u04d0"+ - "\u04d1\u0005b\u0000\u0000\u04d1\u04d2\u0005v\u0000\u0000\u04d2\u06d3\u0005"+ - "s\u0000\u0000\u04d3\u04d4\u0005s\u0000\u0000\u04d4\u04d5\u0005e\u0000"+ - "\u0000\u04d5\u06d3\u0005i\u0000\u0000\u04d6\u04d7\u0005s\u0000\u0000\u04d7"+ - "\u04d8\u0005a\u0000\u0000\u04d8\u06d3\u0005x\u0000\u0000\u04d9\u04da\u0005"+ - "s\u0000\u0000\u04da\u04db\u0005t\u0000\u0000\u04db\u06d3\u0005y\u0000"+ - "\u0000\u04dc\u04dd\u0005s\u0000\u0000\u04dd\u04de\u0005t\u0000\u0000\u04de"+ - "\u06d3\u0005a\u0000\u0000\u04df\u04e0\u0005s\u0000\u0000\u04e0\u04e1\u0005"+ - "t\u0000\u0000\u04e1\u06d3\u0005x\u0000\u0000\u04e2\u04e3\u0005d\u0000"+ - "\u0000\u04e3\u04e4\u0005e\u0000\u0000\u04e4\u06d3\u0005y\u0000\u0000\u04e5"+ - "\u04e6\u0005t\u0000\u0000\u04e6\u04e7\u0005x\u0000\u0000\u04e7\u06d3\u0005"+ - "a\u0000\u0000\u04e8\u04e9\u0005x\u0000\u0000\u04e9\u04ea\u0005a\u0000"+ - "\u0000\u04ea\u06d3\u0005a\u0000\u0000\u04eb\u04ec\u0005b\u0000\u0000\u04ec"+ - "\u04ed\u0005c\u0000\u0000\u04ed\u06d3\u0005c\u0000\u0000\u04ee\u04ef\u0005"+ - "a\u0000\u0000\u04ef\u04f0\u0005h\u0000\u0000\u04f0\u06d3\u0005x\u0000"+ - "\u0000\u04f1\u04f2\u0005t\u0000\u0000\u04f2\u04f3\u0005y\u0000\u0000\u04f3"+ - "\u06d3\u0005a\u0000\u0000\u04f4\u04f5\u0005t\u0000\u0000\u04f5\u04f6\u0005"+ - "x\u0000\u0000\u04f6\u06d3\u0005s\u0000\u0000\u04f7\u04f8\u0005t\u0000"+ - "\u0000\u04f8\u04f9\u0005a\u0000\u0000\u04f9\u06d3\u0005s\u0000\u0000\u04fa"+ - "\u04fb\u0005s\u0000\u0000\u04fb\u04fc\u0005h\u0000\u0000\u04fc\u06d3\u0005"+ - "y\u0000\u0000\u04fd\u04fe\u0005s\u0000\u0000\u04fe\u04ff\u0005h\u0000"+ - "\u0000\u04ff\u06d3\u0005x\u0000\u0000\u0500\u0501\u0005l\u0000\u0000\u0501"+ - "\u0502\u0005d\u0000\u0000\u0502\u06d3\u0005y\u0000\u0000\u0503\u0504\u0005"+ - "l\u0000\u0000\u0504\u0505\u0005d\u0000\u0000\u0505\u06d3\u0005a\u0000"+ - "\u0000\u0506\u0507\u0005l\u0000\u0000\u0507\u0508\u0005d\u0000\u0000\u0508"+ - "\u06d3\u0005x\u0000\u0000\u0509\u050a\u0005l\u0000\u0000\u050a\u050b\u0005"+ - "a\u0000\u0000\u050b\u06d3\u0005x\u0000\u0000\u050c\u050d\u0005t\u0000"+ - "\u0000\u050d\u050e\u0005a\u0000\u0000\u050e\u06d3\u0005y\u0000\u0000\u050f"+ - "\u0510\u0005t\u0000\u0000\u0510\u0511\u0005a\u0000\u0000\u0511\u06d3\u0005"+ - "x\u0000\u0000\u0512\u0513\u0005b\u0000\u0000\u0513\u0514\u0005c\u0000"+ - "\u0000\u0514\u06d3\u0005s\u0000\u0000\u0515\u0516\u0005c\u0000\u0000\u0516"+ - "\u0517\u0005l\u0000\u0000\u0517\u06d3\u0005v\u0000\u0000\u0518\u0519\u0005"+ - "t\u0000\u0000\u0519\u051a\u0005s\u0000\u0000\u051a\u06d3\u0005x\u0000"+ - "\u0000\u051b\u051c\u0005l\u0000\u0000\u051c\u051d\u0005a\u0000\u0000\u051d"+ - "\u06d3\u0005s\u0000\u0000\u051e\u051f\u0005c\u0000\u0000\u051f\u0520\u0005"+ - "p\u0000\u0000\u0520\u06d3\u0005y\u0000\u0000\u0521\u0522\u0005c\u0000"+ - "\u0000\u0522\u0523\u0005m\u0000\u0000\u0523\u06d3\u0005p\u0000\u0000\u0524"+ - "\u0525\u0005c\u0000\u0000\u0525\u0526\u0005p\u0000\u0000\u0526\u06d3\u0005"+ - "x\u0000\u0000\u0527\u0528\u0005d\u0000\u0000\u0528\u0529\u0005c\u0000"+ - "\u0000\u0529\u06d3\u0005p\u0000\u0000\u052a\u052b\u0005d\u0000\u0000\u052b"+ - "\u052c\u0005e\u0000\u0000\u052c\u06d3\u0005c\u0000\u0000\u052d\u052e\u0005"+ - "i\u0000\u0000\u052e\u052f\u0005n\u0000\u0000\u052f\u06d3\u0005c\u0000"+ - "\u0000\u0530\u0531\u0005a\u0000\u0000\u0531\u0532\u0005x\u0000\u0000\u0532"+ - "\u06d3\u0005s\u0000\u0000\u0533\u0534\u0005b\u0000\u0000\u0534\u0535\u0005"+ - "n\u0000\u0000\u0535\u06d3\u0005e\u0000\u0000\u0536\u0537\u0005c\u0000"+ - "\u0000\u0537\u0538\u0005l\u0000\u0000\u0538\u06d3\u0005d\u0000\u0000\u0539"+ - "\u053a\u0005s\u0000\u0000\u053a\u053b\u0005b\u0000\u0000\u053b\u06d3\u0005"+ - "c\u0000\u0000\u053c\u053d\u0005i\u0000\u0000\u053d\u053e\u0005s\u0000"+ - "\u0000\u053e\u06d3\u0005c\u0000\u0000\u053f\u0540\u0005i\u0000\u0000\u0540"+ - "\u0541\u0005n\u0000\u0000\u0541\u06d3\u0005x\u0000\u0000\u0542\u0543\u0005"+ - "b\u0000\u0000\u0543\u0544\u0005e\u0000\u0000\u0544\u06d3\u0005q\u0000"+ - "\u0000\u0545\u0546\u0005s\u0000\u0000\u0546\u0547\u0005e\u0000\u0000\u0547"+ - "\u06d3\u0005d\u0000\u0000\u0548\u0549\u0005d\u0000\u0000\u0549\u054a\u0005"+ - "e\u0000\u0000\u054a\u06d3\u0005x\u0000\u0000\u054b\u054c\u0005i\u0000"+ - "\u0000\u054c\u054d\u0005n\u0000\u0000\u054d\u06d3\u0005y\u0000\u0000\u054e"+ - "\u054f\u0005r\u0000\u0000\u054f\u0550\u0005o\u0000\u0000\u0550\u06d3\u0005"+ - "r\u0000\u0000\u0551\u0552\u0005b\u0000\u0000\u0552\u0553\u0005b\u0000"+ - "\u0000\u0553\u0554\u0005r\u0000\u0000\u0554\u06d3\u00050\u0000\u0000\u0555"+ - "\u0556\u0005b\u0000\u0000\u0556\u0557\u0005b\u0000\u0000\u0557\u0558\u0005"+ - "r\u0000\u0000\u0558\u06d3\u00051\u0000\u0000\u0559\u055a\u0005b\u0000"+ - "\u0000\u055a\u055b\u0005b\u0000\u0000\u055b\u055c\u0005r\u0000\u0000\u055c"+ - "\u06d3\u00052\u0000\u0000\u055d\u055e\u0005b\u0000\u0000\u055e\u055f\u0005"+ - "b\u0000\u0000\u055f\u0560\u0005r\u0000\u0000\u0560\u06d3\u00053\u0000"+ - "\u0000\u0561\u0562\u0005b\u0000\u0000\u0562\u0563\u0005b\u0000\u0000\u0563"+ - "\u0564\u0005r\u0000\u0000\u0564\u06d3\u00054\u0000\u0000\u0565\u0566\u0005"+ - "b\u0000\u0000\u0566\u0567\u0005b\u0000\u0000\u0567\u0568\u0005r\u0000"+ - "\u0000\u0568\u06d3\u00055\u0000\u0000\u0569\u056a\u0005b\u0000\u0000\u056a"+ - "\u056b\u0005b\u0000\u0000\u056b\u056c\u0005r\u0000\u0000\u056c\u06d3\u0005"+ - "6\u0000\u0000\u056d\u056e\u0005b\u0000\u0000\u056e\u056f\u0005b\u0000"+ - "\u0000\u056f\u0570\u0005r\u0000\u0000\u0570\u06d3\u00057\u0000\u0000\u0571"+ - "\u0572\u0005b\u0000\u0000\u0572\u0573\u0005b\u0000\u0000\u0573\u0574\u0005"+ - "s\u0000\u0000\u0574\u06d3\u00050\u0000\u0000\u0575\u0576\u0005b\u0000"+ - "\u0000\u0576\u0577\u0005b\u0000\u0000\u0577\u0578\u0005s\u0000\u0000\u0578"+ - "\u06d3\u00051\u0000\u0000\u0579\u057a\u0005b\u0000\u0000\u057a\u057b\u0005"+ - "b\u0000\u0000\u057b\u057c\u0005s\u0000\u0000\u057c\u06d3\u00052\u0000"+ - "\u0000\u057d\u057e\u0005b\u0000\u0000\u057e\u057f\u0005b\u0000\u0000\u057f"+ - "\u0580\u0005s\u0000\u0000\u0580\u06d3\u00053\u0000\u0000\u0581\u0582\u0005"+ - "b\u0000\u0000\u0582\u0583\u0005b\u0000\u0000\u0583\u0584\u0005s\u0000"+ - "\u0000\u0584\u06d3\u00054\u0000\u0000\u0585\u0586\u0005b\u0000\u0000\u0586"+ - "\u0587\u0005b\u0000\u0000\u0587\u0588\u0005s\u0000\u0000\u0588\u06d3\u0005"+ - "5\u0000\u0000\u0589\u058a\u0005b\u0000\u0000\u058a\u058b\u0005b\u0000"+ - "\u0000\u058b\u058c\u0005s\u0000\u0000\u058c\u06d3\u00056\u0000\u0000\u058d"+ - "\u058e\u0005b\u0000\u0000\u058e\u058f\u0005b\u0000\u0000\u058f\u0590\u0005"+ - "s\u0000\u0000\u0590\u06d3\u00057\u0000\u0000\u0591\u0592\u0005b\u0000"+ - "\u0000\u0592\u0593\u0005r\u0000\u0000\u0593\u06d3\u0005a\u0000\u0000\u0594"+ - "\u0595\u0005p\u0000\u0000\u0595\u0596\u0005h\u0000\u0000\u0596\u06d3\u0005"+ - "x\u0000\u0000\u0597\u0598\u0005p\u0000\u0000\u0598\u0599\u0005h\u0000"+ - "\u0000\u0599\u06d3\u0005y\u0000\u0000\u059a\u059b\u0005p\u0000\u0000\u059b"+ - "\u059c\u0005l\u0000\u0000\u059c\u06d3\u0005x\u0000\u0000\u059d\u059e\u0005"+ - "p\u0000\u0000\u059e\u059f\u0005l\u0000\u0000\u059f\u06d3\u0005y\u0000"+ - "\u0000\u05a0\u05a1\u0005r\u0000\u0000\u05a1\u05a2\u0005m\u0000\u0000\u05a2"+ - "\u05a3\u0005b\u0000\u0000\u05a3\u06d3\u00050\u0000\u0000\u05a4\u05a5\u0005"+ - "r\u0000\u0000\u05a5\u05a6\u0005m\u0000\u0000\u05a6\u05a7\u0005b\u0000"+ - "\u0000\u05a7\u06d3\u00051\u0000\u0000\u05a8\u05a9\u0005r\u0000\u0000\u05a9"+ - "\u05aa\u0005m\u0000\u0000\u05aa\u05ab\u0005b\u0000\u0000\u05ab\u06d3\u0005"+ - "2\u0000\u0000\u05ac\u05ad\u0005r\u0000\u0000\u05ad\u05ae\u0005m\u0000"+ - "\u0000\u05ae\u05af\u0005b\u0000\u0000\u05af\u06d3\u00053\u0000\u0000\u05b0"+ - "\u05b1\u0005r\u0000\u0000\u05b1\u05b2\u0005m\u0000\u0000\u05b2\u05b3\u0005"+ - "b\u0000\u0000\u05b3\u06d3\u00054\u0000\u0000\u05b4\u05b5\u0005r\u0000"+ - "\u0000\u05b5\u05b6\u0005m\u0000\u0000\u05b6\u05b7\u0005b\u0000\u0000\u05b7"+ - "\u06d3\u00055\u0000\u0000\u05b8\u05b9\u0005r\u0000\u0000\u05b9\u05ba\u0005"+ - "m\u0000\u0000\u05ba\u05bb\u0005b\u0000\u0000\u05bb\u06d3\u00056\u0000"+ - "\u0000\u05bc\u05bd\u0005r\u0000\u0000\u05bd\u05be\u0005m\u0000\u0000\u05be"+ - "\u05bf\u0005b\u0000\u0000\u05bf\u06d3\u00057\u0000\u0000\u05c0\u05c1\u0005"+ - "s\u0000\u0000\u05c1\u05c2\u0005m\u0000\u0000\u05c2\u05c3\u0005b\u0000"+ - "\u0000\u05c3\u06d3\u00050\u0000\u0000\u05c4\u05c5\u0005s\u0000\u0000\u05c5"+ - "\u05c6\u0005m\u0000\u0000\u05c6\u05c7\u0005b\u0000\u0000\u05c7\u06d3\u0005"+ - "1\u0000\u0000\u05c8\u05c9\u0005s\u0000\u0000\u05c9\u05ca\u0005m\u0000"+ - "\u0000\u05ca\u05cb\u0005b\u0000\u0000\u05cb\u06d3\u00052\u0000\u0000\u05cc"+ - "\u05cd\u0005s\u0000\u0000\u05cd\u05ce\u0005m\u0000\u0000\u05ce\u05cf\u0005"+ - "b\u0000\u0000\u05cf\u06d3\u00053\u0000\u0000\u05d0\u05d1\u0005s\u0000"+ - "\u0000\u05d1\u05d2\u0005m\u0000\u0000\u05d2\u05d3\u0005b\u0000\u0000\u05d3"+ - "\u06d3\u00054\u0000\u0000\u05d4\u05d5\u0005s\u0000\u0000\u05d5\u05d6\u0005"+ - "m\u0000\u0000\u05d6\u05d7\u0005b\u0000\u0000\u05d7\u06d3\u00055\u0000"+ - "\u0000\u05d8\u05d9\u0005s\u0000\u0000\u05d9\u05da\u0005m\u0000\u0000\u05da"+ - "\u05db\u0005b\u0000\u0000\u05db\u06d3\u00056\u0000\u0000\u05dc\u05dd\u0005"+ - "s\u0000\u0000\u05dd\u05de\u0005m\u0000\u0000\u05de\u05df\u0005b\u0000"+ - "\u0000\u05df\u06d3\u00057\u0000\u0000\u05e0\u05e1\u0005s\u0000\u0000\u05e1"+ - "\u05e2\u0005t\u0000\u0000\u05e2\u06d3\u0005p\u0000\u0000\u05e3\u05e4\u0005"+ - "s\u0000\u0000\u05e4\u05e5\u0005t\u0000\u0000\u05e5\u06d3\u0005z\u0000"+ - "\u0000\u05e6\u05e7\u0005t\u0000\u0000\u05e7\u05e8\u0005r\u0000\u0000\u05e8"+ - "\u06d3\u0005b\u0000\u0000\u05e9\u05ea\u0005t\u0000\u0000\u05ea\u05eb\u0005"+ - "s\u0000\u0000\u05eb\u06d3\u0005b\u0000\u0000\u05ec\u05ed\u0005w\u0000"+ - "\u0000\u05ed\u05ee\u0005a\u0000\u0000\u05ee\u06d3\u0005i\u0000\u0000\u05ef"+ - "\u05f0\u0005c\u0000\u0000\u05f0\u05f1\u0005l\u0000\u0000\u05f1\u06d3\u0005"+ - "e\u0000\u0000\u05f2\u05f3\u0005s\u0000\u0000\u05f3\u05f4\u0005e\u0000"+ - "\u0000\u05f4\u06d3\u0005e\u0000\u0000\u05f5\u05f6\u0005t\u0000\u0000\u05f6"+ - "\u05f7\u0005s\u0000\u0000\u05f7\u06d3\u0005y\u0000\u0000\u05f8\u05f9\u0005"+ - "l\u0000\u0000\u05f9\u05fa\u0005b\u0000\u0000\u05fa\u05fb\u0005p\u0000"+ - "\u0000\u05fb\u06d3\u0005l\u0000\u0000\u05fc\u05fd\u0005i\u0000\u0000\u05fd"+ - "\u05fe\u0005n\u0000\u0000\u05fe\u06d3\u0005z\u0000\u0000\u05ff\u0600\u0005"+ - "t\u0000\u0000\u0600\u0601\u0005y\u0000\u0000\u0601\u06d3\u0005s\u0000"+ - "\u0000\u0602\u0603\u0005l\u0000\u0000\u0603\u0604\u0005b\u0000\u0000\u0604"+ - "\u0605\u0005m\u0000\u0000\u0605\u06d3\u0005i\u0000\u0000\u0606\u0607\u0005"+ - "d\u0000\u0000\u0607\u0608\u0005e\u0000\u0000\u0608\u06d3\u0005z\u0000"+ - "\u0000\u0609\u060a\u0005n\u0000\u0000\u060a\u060b\u0005e\u0000\u0000\u060b"+ - "\u06d3\u0005g\u0000\u0000\u060c\u060d\u0005a\u0000\u0000\u060d\u060e\u0005"+ - "s\u0000\u0000\u060e\u06d3\u0005r\u0000\u0000\u060f\u0610\u0005t\u0000"+ - "\u0000\u0610\u0611\u0005a\u0000\u0000\u0611\u06d3\u0005z\u0000\u0000\u0612"+ - "\u0613\u0005l\u0000\u0000\u0613\u0614\u0005b\u0000\u0000\u0614\u0615\u0005"+ - "v\u0000\u0000\u0615\u06d3\u0005c\u0000\u0000\u0616\u0617\u0005t\u0000"+ - "\u0000\u0617\u0618\u0005a\u0000\u0000\u0618\u06d3\u0005b\u0000\u0000\u0619"+ - "\u061a\u0005m\u0000\u0000\u061a\u061b\u0005a\u0000\u0000\u061b\u06d3\u0005"+ - "p\u0000\u0000\u061c\u061d\u0005r\u0000\u0000\u061d\u061e\u0005t\u0000"+ - "\u0000\u061e\u06d3\u0005n\u0000\u0000\u061f\u0620\u0005l\u0000\u0000\u0620"+ - "\u0621\u0005b\u0000\u0000\u0621\u0622\u0005s\u0000\u0000\u0622\u06d3\u0005"+ - "r\u0000\u0000\u0623\u0624\u0005t\u0000\u0000\u0624\u0625\u0005z\u0000"+ - "\u0000\u0625\u06d3\u0005a\u0000\u0000\u0626\u0627\u0005l\u0000\u0000\u0627"+ - "\u0628\u0005b\u0000\u0000\u0628\u0629\u0005v\u0000\u0000\u0629\u06d3\u0005"+ - "s\u0000\u0000\u062a\u062b\u0005t\u0000\u0000\u062b\u062c\u0005b\u0000"+ - "\u0000\u062c\u06d3\u0005a\u0000\u0000\u062d\u062e\u0005l\u0000\u0000\u062e"+ - "\u062f\u0005b\u0000\u0000\u062f\u0630\u0005r\u0000\u0000\u0630\u06d3\u0005"+ - "a\u0000\u0000\u0631\u0632\u0005l\u0000\u0000\u0632\u0633\u0005b\u0000"+ - "\u0000\u0633\u0634\u0005c\u0000\u0000\u0634\u06d3\u0005c\u0000\u0000\u0635"+ - "\u0636\u0005l\u0000\u0000\u0636\u0637\u0005d\u0000\u0000\u0637\u06d3\u0005"+ - "z\u0000\u0000\u0638\u0639\u0005l\u0000\u0000\u0639\u063a\u0005b\u0000"+ - "\u0000\u063a\u063b\u0005c\u0000\u0000\u063b\u06d3\u0005s\u0000\u0000\u063c"+ - "\u063d\u0005c\u0000\u0000\u063d\u063e\u0005p\u0000\u0000\u063e\u06d3\u0005"+ - "z\u0000\u0000\u063f\u0640\u0005d\u0000\u0000\u0640\u0641\u0005e\u0000"+ - "\u0000\u0641\u06d3\u0005w\u0000\u0000\u0642\u0643\u0005a\u0000\u0000\u0643"+ - "\u0644\u0005s\u0000\u0000\u0644\u06d3\u0005w\u0000\u0000\u0645\u0646\u0005"+ - "l\u0000\u0000\u0646\u0647\u0005b\u0000\u0000\u0647\u0648\u0005n\u0000"+ - "\u0000\u0648\u06d3\u0005e\u0000\u0000\u0649\u064a\u0005p\u0000\u0000\u064a"+ - "\u064b\u0005h\u0000\u0000\u064b\u06d3\u0005z\u0000\u0000\u064c\u064d\u0005"+ - "i\u0000\u0000\u064d\u064e\u0005n\u0000\u0000\u064e\u06d3\u0005w\u0000"+ - "\u0000\u064f\u0650\u0005r\u0000\u0000\u0650\u0651\u0005o\u0000\u0000\u0651"+ - "\u06d3\u0005w\u0000\u0000\u0652\u0653\u0005l\u0000\u0000\u0653\u0654\u0005"+ - "b\u0000\u0000\u0654\u0655\u0005e\u0000\u0000\u0655\u06d3\u0005q\u0000"+ - "\u0000\u0656\u0657\u0005p\u0000\u0000\u0657\u0658\u0005h\u0000\u0000\u0658"+ - "\u06d3\u0005w\u0000\u0000\u0659\u065a\u0005p\u0000\u0000\u065a\u065b\u0005"+ - "l\u0000\u0000\u065b\u06d3\u0005z\u0000\u0000\u065c\u065d\u0005e\u0000"+ - "\u0000\u065d\u065e\u0005o\u0000\u0000\u065e\u06d3\u0005m\u0000\u0000\u065f"+ - "\u0660\u0005a\u0000\u0000\u0660\u0661\u0005d\u0000\u0000\u0661\u0662\u0005"+ - "c\u0000\u0000\u0662\u06d3\u0005q\u0000\u0000\u0663\u0664\u0005a\u0000"+ - "\u0000\u0664\u0665\u0005n\u0000\u0000\u0665\u0666\u0005d\u0000\u0000\u0666"+ - "\u06d3\u0005q\u0000\u0000\u0667\u0668\u0005a\u0000\u0000\u0668\u0669\u0005"+ - "s\u0000\u0000\u0669\u066a\u0005l\u0000\u0000\u066a\u06d3\u0005q\u0000"+ - "\u0000\u066b\u066c\u0005a\u0000\u0000\u066c\u066d\u0005s\u0000\u0000\u066d"+ - "\u066e\u0005r\u0000\u0000\u066e\u06d3\u0005q\u0000\u0000\u066f\u0670\u0005"+ - "b\u0000\u0000\u0670\u0671\u0005i\u0000\u0000\u0671\u0672\u0005t\u0000"+ - "\u0000\u0672\u06d3\u0005q\u0000\u0000\u0673\u0674\u0005c\u0000\u0000\u0674"+ - "\u0675\u0005p\u0000\u0000\u0675\u06d3\u0005q\u0000\u0000\u0676\u0677\u0005"+ - "d\u0000\u0000\u0677\u0678\u0005e\u0000\u0000\u0678\u06d3\u0005q\u0000"+ - "\u0000\u0679\u067a\u0005e\u0000\u0000\u067a\u067b\u0005o\u0000\u0000\u067b"+ - "\u067c\u0005r\u0000\u0000\u067c\u06d3\u0005q\u0000\u0000\u067d\u067e\u0005"+ - "i\u0000\u0000\u067e\u067f\u0005n\u0000\u0000\u067f\u06d3\u0005q\u0000"+ - "\u0000\u0680\u0681\u0005l\u0000\u0000\u0681\u0682\u0005d\u0000\u0000\u0682"+ - "\u06d3\u0005q\u0000\u0000\u0683\u0684\u0005l\u0000\u0000\u0684\u0685\u0005"+ - "s\u0000\u0000\u0685\u0686\u0005r\u0000\u0000\u0686\u06d3\u0005q\u0000"+ - "\u0000\u0687\u0688\u0005o\u0000\u0000\u0688\u0689\u0005r\u0000\u0000\u0689"+ - "\u06d3\u0005q\u0000\u0000\u068a\u068b\u0005r\u0000\u0000\u068b\u068c\u0005"+ - "o\u0000\u0000\u068c\u068d\u0005l\u0000\u0000\u068d\u06d3\u0005q\u0000"+ - "\u0000\u068e\u068f\u0005r\u0000\u0000\u068f\u0690\u0005o\u0000\u0000\u0690"+ - "\u0691\u0005r\u0000\u0000\u0691\u06d3\u0005q\u0000\u0000\u0692\u0693\u0005"+ - "s\u0000\u0000\u0693\u0694\u0005b\u0000\u0000\u0694\u0695\u0005c\u0000"+ - "\u0000\u0695\u06d3\u0005q\u0000\u0000\u0696\u0697\u0005s\u0000\u0000\u0697"+ - "\u0698\u0005t\u0000\u0000\u0698\u06d3\u0005q\u0000\u0000\u0699\u069a\u0005"+ - "s\u0000\u0000\u069a\u069b\u0005x\u0000\u0000\u069b\u06d3\u0005y\u0000"+ - "\u0000\u069c\u069d\u0005s\u0000\u0000\u069d\u069e\u0005t\u0000\u0000\u069e"+ - "\u06d3\u00050\u0000\u0000\u069f\u06a0\u0005s\u0000\u0000\u06a0\u06a1\u0005"+ - "t\u0000\u0000\u06a1\u06d3\u00051\u0000\u0000\u06a2\u06a3\u0005s\u0000"+ - "\u0000\u06a3\u06a4\u0005t\u0000\u0000\u06a4\u06d3\u00052\u0000\u0000\u06a5"+ - "\u06a6\u0005s\u0000\u0000\u06a6\u06a7\u0005a\u0000\u0000\u06a7\u06d3\u0005"+ - "y\u0000\u0000\u06a8\u06a9\u0005t\u0000\u0000\u06a9\u06aa\u0005m\u0000"+ - "\u0000\u06aa\u06d3\u0005a\u0000\u0000\u06ab\u06ac\u0005b\u0000\u0000\u06ac"+ - "\u06ad\u0005s\u0000\u0000\u06ad\u06d3\u0005r\u0000\u0000\u06ae\u06af\u0005"+ - "t\u0000\u0000\u06af\u06b0\u0005a\u0000\u0000\u06b0\u06d3\u0005m\u0000"+ - "\u0000\u06b1\u06b2\u0005c\u0000\u0000\u06b2\u06b3\u0005s\u0000\u0000\u06b3"+ - "\u06d3\u0005l\u0000\u0000\u06b4\u06b5\u0005c\u0000\u0000\u06b5\u06b6\u0005"+ - "l\u0000\u0000\u06b6\u06d3\u0005a\u0000\u0000\u06b7\u06b8\u0005c\u0000"+ - "\u0000\u06b8\u06b9\u0005l\u0000\u0000\u06b9\u06d3\u0005x\u0000\u0000\u06ba"+ - "\u06bb\u0005c\u0000\u0000\u06bb\u06bc\u0005l\u0000\u0000\u06bc\u06d3\u0005"+ - "y\u0000\u0000\u06bd\u06be\u0005c\u0000\u0000\u06be\u06bf\u0005s\u0000"+ - "\u0000\u06bf\u06d3\u0005h\u0000\u0000\u06c0\u06c1\u0005s\u0000\u0000\u06c1"+ - "\u06c2\u0005e\u0000\u0000\u06c2\u06d3\u0005t\u0000\u0000\u06c3\u06c4\u0005"+ - "t\u0000\u0000\u06c4\u06c5\u0005s\u0000\u0000\u06c5\u06d3\u0005t\u0000"+ - "\u0000\u06c6\u06c7\u0005t\u0000\u0000\u06c7\u06c8\u0005i\u0000\u0000\u06c8"+ - "\u06d3\u0005a\u0000\u0000\u06c9\u06ca\u0005t\u0000\u0000\u06ca\u06cb\u0005"+ - "d\u0000\u0000\u06cb\u06d3\u0005d\u0000\u0000\u06cc\u06cd\u0005t\u0000"+ - "\u0000\u06cd\u06ce\u0005i\u0000\u0000\u06ce\u06d3\u0005n\u0000\u0000\u06cf"+ - "\u06d0\u0005t\u0000\u0000\u06d0\u06d1\u0005i\u0000\u0000\u06d1\u06d3\u0005"+ - "i\u0000\u0000\u06d2\u0473\u0001\u0000\u0000\u0000\u06d2\u0476\u0001\u0000"+ - "\u0000\u0000\u06d2\u0479\u0001\u0000\u0000\u0000\u06d2\u047c\u0001\u0000"+ - "\u0000\u0000\u06d2\u047f\u0001\u0000\u0000\u0000\u06d2\u0482\u0001\u0000"+ - "\u0000\u0000\u06d2\u0485\u0001\u0000\u0000\u0000\u06d2\u0488\u0001\u0000"+ - "\u0000\u0000\u06d2\u048b\u0001\u0000\u0000\u0000\u06d2\u048e\u0001\u0000"+ - "\u0000\u0000\u06d2\u0491\u0001\u0000\u0000\u0000\u06d2\u0494\u0001\u0000"+ - "\u0000\u0000\u06d2\u0497\u0001\u0000\u0000\u0000\u06d2\u049a\u0001\u0000"+ - "\u0000\u0000\u06d2\u049d\u0001\u0000\u0000\u0000\u06d2\u04a0\u0001\u0000"+ - "\u0000\u0000\u06d2\u04a3\u0001\u0000\u0000\u0000\u06d2\u04a6\u0001\u0000"+ - "\u0000\u0000\u06d2\u04a9\u0001\u0000\u0000\u0000\u06d2\u04ac\u0001\u0000"+ - "\u0000\u0000\u06d2\u04af\u0001\u0000\u0000\u0000\u06d2\u04b2\u0001\u0000"+ - "\u0000\u0000\u06d2\u04b5\u0001\u0000\u0000\u0000\u06d2\u04b8\u0001\u0000"+ - "\u0000\u0000\u06d2\u04bb\u0001\u0000\u0000\u0000\u06d2\u04be\u0001\u0000"+ - "\u0000\u0000\u06d2\u04c1\u0001\u0000\u0000\u0000\u06d2\u04c4\u0001\u0000"+ - "\u0000\u0000\u06d2\u04c7\u0001\u0000\u0000\u0000\u06d2\u04ca\u0001\u0000"+ - "\u0000\u0000\u06d2\u04cd\u0001\u0000\u0000\u0000\u06d2\u04d0\u0001\u0000"+ - "\u0000\u0000\u06d2\u04d3\u0001\u0000\u0000\u0000\u06d2\u04d6\u0001\u0000"+ - "\u0000\u0000\u06d2\u04d9\u0001\u0000\u0000\u0000\u06d2\u04dc\u0001\u0000"+ - "\u0000\u0000\u06d2\u04df\u0001\u0000\u0000\u0000\u06d2\u04e2\u0001\u0000"+ - "\u0000\u0000\u06d2\u04e5\u0001\u0000\u0000\u0000\u06d2\u04e8\u0001\u0000"+ - "\u0000\u0000\u06d2\u04eb\u0001\u0000\u0000\u0000\u06d2\u04ee\u0001\u0000"+ - "\u0000\u0000\u06d2\u04f1\u0001\u0000\u0000\u0000\u06d2\u04f4\u0001\u0000"+ - "\u0000\u0000\u06d2\u04f7\u0001\u0000\u0000\u0000\u06d2\u04fa\u0001\u0000"+ - "\u0000\u0000\u06d2\u04fd\u0001\u0000\u0000\u0000\u06d2\u0500\u0001\u0000"+ - "\u0000\u0000\u06d2\u0503\u0001\u0000\u0000\u0000\u06d2\u0506\u0001\u0000"+ - "\u0000\u0000\u06d2\u0509\u0001\u0000\u0000\u0000\u06d2\u050c\u0001\u0000"+ - "\u0000\u0000\u06d2\u050f\u0001\u0000\u0000\u0000\u06d2\u0512\u0001\u0000"+ - "\u0000\u0000\u06d2\u0515\u0001\u0000\u0000\u0000\u06d2\u0518\u0001\u0000"+ - "\u0000\u0000\u06d2\u051b\u0001\u0000\u0000\u0000\u06d2\u051e\u0001\u0000"+ - "\u0000\u0000\u06d2\u0521\u0001\u0000\u0000\u0000\u06d2\u0524\u0001\u0000"+ - "\u0000\u0000\u06d2\u0527\u0001\u0000\u0000\u0000\u06d2\u052a\u0001\u0000"+ - "\u0000\u0000\u06d2\u052d\u0001\u0000\u0000\u0000\u06d2\u0530\u0001\u0000"+ - "\u0000\u0000\u06d2\u0533\u0001\u0000\u0000\u0000\u06d2\u0536\u0001\u0000"+ - "\u0000\u0000\u06d2\u0539\u0001\u0000\u0000\u0000\u06d2\u053c\u0001\u0000"+ - "\u0000\u0000\u06d2\u053f\u0001\u0000\u0000\u0000\u06d2\u0542\u0001\u0000"+ - "\u0000\u0000\u06d2\u0545\u0001\u0000\u0000\u0000\u06d2\u0548\u0001\u0000"+ - "\u0000\u0000\u06d2\u054b\u0001\u0000\u0000\u0000\u06d2\u054e\u0001\u0000"+ - "\u0000\u0000\u06d2\u0551\u0001\u0000\u0000\u0000\u06d2\u0555\u0001\u0000"+ - "\u0000\u0000\u06d2\u0559\u0001\u0000\u0000\u0000\u06d2\u055d\u0001\u0000"+ - "\u0000\u0000\u06d2\u0561\u0001\u0000\u0000\u0000\u06d2\u0565\u0001\u0000"+ - "\u0000\u0000\u06d2\u0569\u0001\u0000\u0000\u0000\u06d2\u056d\u0001\u0000"+ - "\u0000\u0000\u06d2\u0571\u0001\u0000\u0000\u0000\u06d2\u0575\u0001\u0000"+ - "\u0000\u0000\u06d2\u0579\u0001\u0000\u0000\u0000\u06d2\u057d\u0001\u0000"+ - "\u0000\u0000\u06d2\u0581\u0001\u0000\u0000\u0000\u06d2\u0585\u0001\u0000"+ - "\u0000\u0000\u06d2\u0589\u0001\u0000\u0000\u0000\u06d2\u058d\u0001\u0000"+ - "\u0000\u0000\u06d2\u0591\u0001\u0000\u0000\u0000\u06d2\u0594\u0001\u0000"+ - "\u0000\u0000\u06d2\u0597\u0001\u0000\u0000\u0000\u06d2\u059a\u0001\u0000"+ - "\u0000\u0000\u06d2\u059d\u0001\u0000\u0000\u0000\u06d2\u05a0\u0001\u0000"+ - "\u0000\u0000\u06d2\u05a4\u0001\u0000\u0000\u0000\u06d2\u05a8\u0001\u0000"+ - "\u0000\u0000\u06d2\u05ac\u0001\u0000\u0000\u0000\u06d2\u05b0\u0001\u0000"+ - "\u0000\u0000\u06d2\u05b4\u0001\u0000\u0000\u0000\u06d2\u05b8\u0001\u0000"+ - "\u0000\u0000\u06d2\u05bc\u0001\u0000\u0000\u0000\u06d2\u05c0\u0001\u0000"+ - "\u0000\u0000\u06d2\u05c4\u0001\u0000\u0000\u0000\u06d2\u05c8\u0001\u0000"+ - "\u0000\u0000\u06d2\u05cc\u0001\u0000\u0000\u0000\u06d2\u05d0\u0001\u0000"+ - "\u0000\u0000\u06d2\u05d4\u0001\u0000\u0000\u0000\u06d2\u05d8\u0001\u0000"+ - "\u0000\u0000\u06d2\u05dc\u0001\u0000\u0000\u0000\u06d2\u05e0\u0001\u0000"+ - "\u0000\u0000\u06d2\u05e3\u0001\u0000\u0000\u0000\u06d2\u05e6\u0001\u0000"+ - "\u0000\u0000\u06d2\u05e9\u0001\u0000\u0000\u0000\u06d2\u05ec\u0001\u0000"+ - "\u0000\u0000\u06d2\u05ef\u0001\u0000\u0000\u0000\u06d2\u05f2\u0001\u0000"+ - "\u0000\u0000\u06d2\u05f5\u0001\u0000\u0000\u0000\u06d2\u05f8\u0001\u0000"+ - "\u0000\u0000\u06d2\u05fc\u0001\u0000\u0000\u0000\u06d2\u05ff\u0001\u0000"+ - "\u0000\u0000\u06d2\u0602\u0001\u0000\u0000\u0000\u06d2\u0606\u0001\u0000"+ - "\u0000\u0000\u06d2\u0609\u0001\u0000\u0000\u0000\u06d2\u060c\u0001\u0000"+ - "\u0000\u0000\u06d2\u060f\u0001\u0000\u0000\u0000\u06d2\u0612\u0001\u0000"+ - "\u0000\u0000\u06d2\u0616\u0001\u0000\u0000\u0000\u06d2\u0619\u0001\u0000"+ - "\u0000\u0000\u06d2\u061c\u0001\u0000\u0000\u0000\u06d2\u061f\u0001\u0000"+ - "\u0000\u0000\u06d2\u0623\u0001\u0000\u0000\u0000\u06d2\u0626\u0001\u0000"+ - "\u0000\u0000\u06d2\u062a\u0001\u0000\u0000\u0000\u06d2\u062d\u0001\u0000"+ - "\u0000\u0000\u06d2\u0631\u0001\u0000\u0000\u0000\u06d2\u0635\u0001\u0000"+ - "\u0000\u0000\u06d2\u0638\u0001\u0000\u0000\u0000\u06d2\u063c\u0001\u0000"+ - "\u0000\u0000\u06d2\u063f\u0001\u0000\u0000\u0000\u06d2\u0642\u0001\u0000"+ - "\u0000\u0000\u06d2\u0645\u0001\u0000\u0000\u0000\u06d2\u0649\u0001\u0000"+ - "\u0000\u0000\u06d2\u064c\u0001\u0000\u0000\u0000\u06d2\u064f\u0001\u0000"+ - "\u0000\u0000\u06d2\u0652\u0001\u0000\u0000\u0000\u06d2\u0656\u0001\u0000"+ - "\u0000\u0000\u06d2\u0659\u0001\u0000\u0000\u0000\u06d2\u065c\u0001\u0000"+ - "\u0000\u0000\u06d2\u065f\u0001\u0000\u0000\u0000\u06d2\u0663\u0001\u0000"+ - "\u0000\u0000\u06d2\u0667\u0001\u0000\u0000\u0000\u06d2\u066b\u0001\u0000"+ - "\u0000\u0000\u06d2\u066f\u0001\u0000\u0000\u0000\u06d2\u0673\u0001\u0000"+ - "\u0000\u0000\u06d2\u0676\u0001\u0000\u0000\u0000\u06d2\u0679\u0001\u0000"+ - "\u0000\u0000\u06d2\u067d\u0001\u0000\u0000\u0000\u06d2\u0680\u0001\u0000"+ - "\u0000\u0000\u06d2\u0683\u0001\u0000\u0000\u0000\u06d2\u0687\u0001\u0000"+ - "\u0000\u0000\u06d2\u068a\u0001\u0000\u0000\u0000\u06d2\u068e\u0001\u0000"+ - "\u0000\u0000\u06d2\u0692\u0001\u0000\u0000\u0000\u06d2\u0696\u0001\u0000"+ - "\u0000\u0000\u06d2\u0699\u0001\u0000\u0000\u0000\u06d2\u069c\u0001\u0000"+ - "\u0000\u0000\u06d2\u069f\u0001\u0000\u0000\u0000\u06d2\u06a2\u0001\u0000"+ - "\u0000\u0000\u06d2\u06a5\u0001\u0000\u0000\u0000\u06d2\u06a8\u0001\u0000"+ - "\u0000\u0000\u06d2\u06ab\u0001\u0000\u0000\u0000\u06d2\u06ae\u0001\u0000"+ - "\u0000\u0000\u06d2\u06b1\u0001\u0000\u0000\u0000\u06d2\u06b4\u0001\u0000"+ - "\u0000\u0000\u06d2\u06b7\u0001\u0000\u0000\u0000\u06d2\u06ba\u0001\u0000"+ - "\u0000\u0000\u06d2\u06bd\u0001\u0000\u0000\u0000\u06d2\u06c0\u0001\u0000"+ - "\u0000\u0000\u06d2\u06c3\u0001\u0000\u0000\u0000\u06d2\u06c6\u0001\u0000"+ - "\u0000\u0000\u06d2\u06c9\u0001\u0000\u0000\u0000\u06d2\u06cc\u0001\u0000"+ - "\u0000\u0000\u06d2\u06cf\u0001\u0000\u0000\u0000\u06d3\u00ee\u0001\u0000"+ - "\u0000\u0000\u06d4\u06d5\u0005#\u0000\u0000\u06d5\u00f0\u0001\u0000\u0000"+ - "\u0000\u06d6\u06d7\u0005:\u0000\u0000\u06d7\u00f2\u0001\u0000\u0000\u0000"+ - "\u06d8\u06d9\u0005,\u0000\u0000\u06d9\u00f4\u0001\u0000\u0000\u0000\u06da"+ - "\u06db\u0005(\u0000\u0000\u06db\u00f6\u0001\u0000\u0000\u0000\u06dc\u06dd"+ - "\u0005)\u0000\u0000\u06dd\u00f8\u0001\u0000\u0000\u0000\u06de\u06df\u0005"+ - "[\u0000\u0000\u06df\u00fa\u0001\u0000\u0000\u0000\u06e0\u06e1\u0005]\u0000"+ - "\u0000\u06e1\u00fc\u0001\u0000\u0000\u0000\u06e2\u06e3\u0005.\u0000\u0000"+ - "\u06e3\u00fe\u0001\u0000\u0000\u0000\u06e4\u06e5\u0005<\u0000\u0000\u06e5"+ - "\u06e6\u0005<\u0000\u0000\u06e6\u0100\u0001\u0000\u0000\u0000\u06e7\u06e8"+ - "\u0005>\u0000\u0000\u06e8\u06e9\u0005>\u0000\u0000\u06e9\u0102\u0001\u0000"+ - "\u0000\u0000\u06ea\u06eb\u0005+\u0000\u0000\u06eb\u0104\u0001\u0000\u0000"+ - "\u0000\u06ec\u06ed\u0005-\u0000\u0000\u06ed\u0106\u0001\u0000\u0000\u0000"+ - "\u06ee\u06ef\u0005<\u0000\u0000\u06ef\u0108\u0001\u0000\u0000\u0000\u06f0"+ - "\u06f1\u0005>\u0000\u0000\u06f1\u010a\u0001\u0000\u0000\u0000\u06f2\u06f3"+ - "\u0005*\u0000\u0000\u06f3\u010c\u0001\u0000\u0000\u0000\u06f4\u06f5\u0005"+ - "/\u0000\u0000\u06f5\u010e\u0001\u0000\u0000\u0000\u06f6\u06f7\u0005{\u0000"+ - "\u0000\u06f7\u06f8\u0006\u0086\u0007\u0000\u06f8\u0110\u0001\u0000\u0000"+ - "\u0000\u06f9\u06fa\u0005}\u0000\u0000\u06fa\u06fb\u0006\u0087\b\u0000"+ - "\u06fb\u0112\u0001\u0000\u0000\u0000\u06fc\u06ff\u0003\u0115\u0089\u0000"+ - "\u06fd\u06ff\u0003\u011d\u008d\u0000\u06fe\u06fc\u0001\u0000\u0000\u0000"+ - "\u06fe\u06fd\u0001\u0000\u0000\u0000\u06ff\u0114\u0001\u0000\u0000\u0000"+ - "\u0700\u0704\u0003\u0117\u008a\u0000\u0701\u0704\u0003\u0119\u008b\u0000"+ - "\u0702\u0704\u0003\u011b\u008c\u0000\u0703\u0700\u0001\u0000\u0000\u0000"+ - "\u0703\u0701\u0001\u0000\u0000\u0000\u0703\u0702\u0001\u0000\u0000\u0000"+ - "\u0704\u0116\u0001\u0000\u0000\u0000\u0705\u0709\u0005%\u0000\u0000\u0706"+ - "\u0708\u0003\u0125\u0091\u0000\u0707\u0706\u0001\u0000\u0000\u0000\u0708"+ - "\u070b\u0001\u0000\u0000\u0000\u0709\u0707\u0001\u0000\u0000\u0000\u0709"+ - "\u070a\u0001\u0000\u0000\u0000\u070a\u070c\u0001\u0000\u0000\u0000\u070b"+ - "\u0709\u0001\u0000\u0000\u0000\u070c\u070e\u0005.\u0000\u0000\u070d\u070f"+ - "\u0003\u0125\u0091\u0000\u070e\u070d\u0001\u0000\u0000\u0000\u070f\u0710"+ - "\u0001\u0000\u0000\u0000\u0710\u070e\u0001\u0000\u0000\u0000\u0710\u0711"+ - "\u0001\u0000\u0000\u0000\u0711\u0118\u0001\u0000\u0000\u0000\u0712\u0714"+ - "\u0003\u0127\u0092\u0000\u0713\u0712\u0001\u0000\u0000\u0000\u0714\u0717"+ - "\u0001\u0000\u0000\u0000\u0715\u0713\u0001\u0000\u0000\u0000\u0715\u0716"+ - "\u0001\u0000\u0000\u0000\u0716\u0718\u0001\u0000\u0000\u0000\u0717\u0715"+ - "\u0001\u0000\u0000\u0000\u0718\u071a\u0005.\u0000\u0000\u0719\u071b\u0003"+ - "\u0127\u0092\u0000\u071a\u0719\u0001\u0000\u0000\u0000\u071b\u071c\u0001"+ - "\u0000\u0000\u0000\u071c\u071a\u0001\u0000\u0000\u0000\u071c\u071d\u0001"+ - "\u0000\u0000\u0000\u071d\u011a\u0001\u0000\u0000\u0000\u071e\u0722\u0005"+ - "$\u0000\u0000\u071f\u0721\u0003\u0129\u0093\u0000\u0720\u071f\u0001\u0000"+ - "\u0000\u0000\u0721\u0724\u0001\u0000\u0000\u0000\u0722\u0720\u0001\u0000"+ - "\u0000\u0000\u0722\u0723\u0001\u0000\u0000\u0000\u0723\u0725\u0001\u0000"+ - "\u0000\u0000\u0724\u0722\u0001\u0000\u0000\u0000\u0725\u0727\u0005.\u0000"+ - "\u0000\u0726\u0728\u0003\u0129\u0093\u0000\u0727\u0726\u0001\u0000\u0000"+ - "\u0000\u0728\u0729\u0001\u0000\u0000\u0000\u0729\u0727\u0001\u0000\u0000"+ - "\u0000\u0729\u072a\u0001\u0000\u0000\u0000\u072a\u011c\u0001\u0000\u0000"+ - "\u0000\u072b\u072f\u0003\u0121\u008f\u0000\u072c\u072f\u0003\u0123\u0090"+ - "\u0000\u072d\u072f\u0003\u011f\u008e\u0000\u072e\u072b\u0001\u0000\u0000"+ - "\u0000\u072e\u072c\u0001\u0000\u0000\u0000\u072e\u072d\u0001\u0000\u0000"+ - "\u0000\u072f\u011e\u0001\u0000\u0000\u0000\u0730\u0732\u0005%\u0000\u0000"+ - "\u0731\u0733\u0003\u0125\u0091\u0000\u0732\u0731\u0001\u0000\u0000\u0000"+ - "\u0733\u0734\u0001\u0000\u0000\u0000\u0734\u0732\u0001\u0000\u0000\u0000"+ - "\u0734\u0735\u0001\u0000\u0000\u0000\u0735\u0120\u0001\u0000\u0000\u0000"+ - "\u0736\u0738\u0003\u0127\u0092\u0000\u0737\u0736\u0001\u0000\u0000\u0000"+ - "\u0738\u0739\u0001\u0000\u0000\u0000\u0739\u0737\u0001\u0000\u0000\u0000"+ - "\u0739\u073a\u0001\u0000\u0000\u0000\u073a\u0122\u0001\u0000\u0000\u0000"+ - "\u073b\u073d\u0005$\u0000\u0000\u073c\u073e\u0003\u0129\u0093\u0000\u073d"+ - "\u073c\u0001\u0000\u0000\u0000\u073e\u073f\u0001\u0000\u0000\u0000\u073f"+ - "\u073d\u0001\u0000\u0000\u0000\u073f\u0740\u0001\u0000\u0000\u0000\u0740"+ - "\u0124\u0001\u0000\u0000\u0000\u0741\u0742\u0007\u0004\u0000\u0000\u0742"+ - "\u0126\u0001\u0000\u0000\u0000\u0743\u0744\u0007\u0005\u0000\u0000\u0744"+ - "\u0128\u0001\u0000\u0000\u0000\u0745\u0746\u0007\u0006\u0000\u0000\u0746"+ - "\u012a\u0001\u0000\u0000\u0000\u0747\u074b\u0005\'\u0000\u0000\u0748\u0749"+ - "\u0005\\\u0000\u0000\u0749\u074c\u0007\u0012\u0000\u0000\u074a\u074c\b"+ - "\u000f\u0000\u0000\u074b\u0748\u0001\u0000\u0000\u0000\u074b\u074a\u0001"+ - "\u0000\u0000\u0000\u074c\u074d\u0001\u0000\u0000\u0000\u074d\u074e\u0005"+ - "\'\u0000\u0000\u074e\u012c\u0001\u0000\u0000\u0000\u074f\u0751\u0003\u012f"+ - "\u0096\u0000\u0750\u0752\u0007\u0013\u0000\u0000\u0751\u0750\u0001\u0000"+ - "\u0000\u0000\u0752\u0753\u0001\u0000\u0000\u0000\u0753\u0751\u0001\u0000"+ - "\u0000\u0000\u0753\u0754\u0001\u0000\u0000\u0000\u0754\u012e\u0001\u0000"+ - "\u0000\u0000\u0755\u0759\u0005!\u0000\u0000\u0756\u0758\u0003\u0135\u0099"+ - "\u0000\u0757\u0756\u0001\u0000\u0000\u0000\u0758\u075b\u0001\u0000\u0000"+ - "\u0000\u0759\u0757\u0001\u0000\u0000\u0000\u0759\u075a\u0001\u0000\u0000"+ - "\u0000\u075a\u0130\u0001\u0000\u0000\u0000\u075b\u0759\u0001\u0000\u0000"+ - "\u0000\u075c\u0760\u0003\u0133\u0098\u0000\u075d\u075f\u0003\u0135\u0099"+ - "\u0000\u075e\u075d\u0001\u0000\u0000\u0000\u075f\u0762\u0001\u0000\u0000"+ - "\u0000\u0760\u075e\u0001\u0000\u0000\u0000\u0760\u0761\u0001\u0000\u0000"+ - "\u0000\u0761\u0132\u0001\u0000\u0000\u0000\u0762\u0760\u0001\u0000\u0000"+ - "\u0000\u0763\u0764\u0007\u0007\u0000\u0000\u0764\u0134\u0001\u0000\u0000"+ - "\u0000\u0765\u0766\u0007\b\u0000\u0000\u0766\u0136\u0001\u0000\u0000\u0000"+ - "\u0767\u0768\u0005@\u0000\u0000\u0768\u0769\u0003\u0131\u0097\u0000\u0769"+ - "\u0138\u0001\u0000\u0000\u0000\u076a\u076c\u0007\u0010\u0000\u0000\u076b"+ - "\u076a\u0001\u0000\u0000\u0000\u076c\u076d\u0001\u0000\u0000\u0000\u076d"+ - "\u076b\u0001\u0000\u0000\u0000\u076d\u076e\u0001\u0000\u0000\u0000\u076e"+ - "\u076f\u0001\u0000\u0000\u0000\u076f\u0770\u0006\u009b\u0005\u0000\u0770"+ - "\u013a\u0001\u0000\u0000\u0000\u0771\u0772\u0005/\u0000\u0000\u0772\u0773"+ - "\u0005/\u0000\u0000\u0773\u0777\u0001\u0000\u0000\u0000\u0774\u0776\b"+ - "\u0011\u0000\u0000\u0775\u0774\u0001\u0000\u0000\u0000\u0776\u0779\u0001"+ - "\u0000\u0000\u0000\u0777\u0775\u0001\u0000\u0000\u0000\u0777\u0778\u0001"+ - "\u0000\u0000\u0000\u0778\u077a\u0001\u0000\u0000\u0000\u0779\u0777\u0001"+ - "\u0000\u0000\u0000\u077a\u077b\u0006\u009c\u0006\u0000\u077b\u013c\u0001"+ - "\u0000\u0000\u0000\u077c\u077d\u0005/\u0000\u0000\u077d\u077e\u0005*\u0000"+ - "\u0000\u077e\u0782\u0001\u0000\u0000\u0000\u077f\u0781\t\u0000\u0000\u0000"+ - "\u0780\u077f\u0001\u0000\u0000\u0000\u0781\u0784\u0001\u0000\u0000\u0000"+ - "\u0782\u0783\u0001\u0000\u0000\u0000\u0782\u0780\u0001\u0000\u0000\u0000"+ - "\u0783\u0785\u0001\u0000\u0000\u0000\u0784\u0782\u0001\u0000\u0000\u0000"+ - "\u0785\u0786\u0005*\u0000\u0000\u0786\u0787\u0005/\u0000\u0000\u0787\u0788"+ - "\u0001\u0000\u0000\u0000\u0788\u0789\u0006\u009d\u0006\u0000\u0789\u013e"+ - "\u0001\u0000\u0000\u0000\u078a\u078c\u0005<\u0000\u0000\u078b\u078d\u0007"+ - "\u0014\u0000\u0000\u078c\u078b\u0001\u0000\u0000\u0000\u078d\u078e\u0001"+ - "\u0000\u0000\u0000\u078e\u078c\u0001\u0000\u0000\u0000\u078e\u078f\u0001"+ - "\u0000\u0000\u0000\u078f\u0790\u0001\u0000\u0000\u0000\u0790\u0791\u0005"+ - ">\u0000\u0000\u0791\u0792\u0006\u009e\t\u0000\u0792\u0140\u0001\u0000"+ - "\u0000\u0000\u0793\u0799\u0005\"\u0000\u0000\u0794\u0795\u0005\\\u0000"+ - "\u0000\u0795\u0798\u0005\"\u0000\u0000\u0796\u0798\b\t\u0000\u0000\u0797"+ - "\u0794\u0001\u0000\u0000\u0000\u0797\u0796\u0001\u0000\u0000\u0000\u0798"+ - "\u079b\u0001\u0000\u0000\u0000\u0799\u0797\u0001\u0000\u0000\u0000\u0799"+ - "\u079a\u0001\u0000\u0000\u0000\u079a\u079c\u0001\u0000\u0000\u0000\u079b"+ - "\u0799\u0001\u0000\u0000\u0000\u079c\u079d\u0005\"\u0000\u0000\u079d\u079e"+ - "\u0006\u009f\n\u0000\u079e\u0142\u0001\u0000\u0000\u0000\u079f\u07a1\u0007"+ - "\u0010\u0000\u0000\u07a0\u079f\u0001\u0000\u0000\u0000\u07a1\u07a2\u0001"+ - "\u0000\u0000\u0000\u07a2\u07a0\u0001\u0000\u0000\u0000\u07a2\u07a3\u0001"+ - "\u0000\u0000\u0000\u07a3\u07a4\u0001\u0000\u0000\u0000\u07a4\u07a5\u0006"+ - "\u00a0\u0005\u0000\u07a5\u0144\u0001\u0000\u0000\u0000\u07a6\u07a7\u0005"+ - "/\u0000\u0000\u07a7\u07a8\u0005/\u0000\u0000\u07a8\u07ac\u0001\u0000\u0000"+ - "\u0000\u07a9\u07ab\b\u0011\u0000\u0000\u07aa\u07a9\u0001\u0000\u0000\u0000"+ - "\u07ab\u07ae\u0001\u0000\u0000\u0000\u07ac\u07aa\u0001\u0000\u0000\u0000"+ - "\u07ac\u07ad\u0001\u0000\u0000\u0000\u07ad\u07af\u0001\u0000\u0000\u0000"+ - "\u07ae\u07ac\u0001\u0000\u0000\u0000\u07af\u07b0\u0006\u00a1\u0006\u0000"+ - "\u07b0\u0146\u0001\u0000\u0000\u0000\u07b1\u07b2\u0005/\u0000\u0000\u07b2"+ - "\u07b3\u0005*\u0000\u0000\u07b3\u07b7\u0001\u0000\u0000\u0000\u07b4\u07b6"+ - "\t\u0000\u0000\u0000\u07b5\u07b4\u0001\u0000\u0000\u0000\u07b6\u07b9\u0001"+ - "\u0000\u0000\u0000\u07b7\u07b8\u0001\u0000\u0000\u0000\u07b7\u07b5\u0001"+ - "\u0000\u0000\u0000\u07b8\u07ba\u0001\u0000\u0000\u0000\u07b9\u07b7\u0001"+ - "\u0000\u0000\u0000\u07ba\u07bb\u0005*\u0000\u0000\u07bb\u07bc\u0005/\u0000"+ - "\u0000\u07bc\u07bd\u0001\u0000\u0000\u0000\u07bd\u07be\u0006\u00a2\u0006"+ - "\u0000\u07be\u0148\u0001\u0000\u0000\u0000C\u0000\u0001\u0002\u01b6\u027c"+ - "\u032d\u0338\u0340\u0370\u03ae\u03b3\u03ba\u03bf\u03c6\u03cb\u03d2\u03d9"+ - "\u03de\u03e5\u03ea\u03ef\u03f6\u03fc\u03fe\u0403\u040a\u040f\u041b\u0428"+ - "\u042a\u042f\u0433\u0435\u0438\u043e\u0441\u0446\u0449\u0450\u045a\u0465"+ - "\u06d2\u06fe\u0703\u0709\u0710\u0715\u071c\u0722\u0729\u072e\u0734\u0739"+ - "\u073f\u074b\u0753\u0759\u0760\u076d\u0777\u0782\u078e\u0797\u0799\u07a2"+ - "\u07ac\u07b7\u000b\u0001\u0000\u0000\u0001C\u0001\u0001Q\u0002\u0001R"+ - "\u0003\u0001l\u0004\u0000\u0001\u0000\u0000\u0002\u0000\u0001\u0086\u0005"+ - "\u0001\u0087\u0006\u0001\u009e\u0007\u0001\u009f\b"; - public static final ATN _ATN = - new ATNDeserializer().deserialize(_serializedATN.toCharArray()); - static { - _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; - for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { - _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); - } - } -} \ No newline at end of file diff --git a/gen/KickCLexer.tokens b/gen/KickCLexer.tokens deleted file mode 100644 index 2f4afb435..000000000 --- a/gen/KickCLexer.tokens +++ /dev/null @@ -1,227 +0,0 @@ -TYPEDEFNAME=1 -CURLY_BEGIN=2 -CURLY_END=3 -BRACKET_BEGIN=4 -BRACKET_END=5 -PAR_BEGIN=6 -PAR_END=7 -SEMICOLON=8 -COLON=9 -COMMA=10 -RANGE=11 -PARAM_LIST=12 -CONDITION=13 -DOT=14 -ARROW=15 -PLUS=16 -MINUS=17 -ASTERISK=18 -DIVIDE=19 -MODULO=20 -INC=21 -DEC=22 -AND=23 -BIT_NOT=24 -BIT_XOR=25 -BIT_OR=26 -SHIFT_LEFT=27 -SHIFT_RIGHT=28 -EQUAL=29 -NOT_EQUAL=30 -LESS_THAN=31 -LESS_THAN_EQUAL=32 -GREATER_THAN_EQUAL=33 -GREATER_THAN=34 -LOGIC_AND=35 -LOGIC_OR=36 -ASSIGN=37 -ASSIGN_COMPOUND=38 -TYPEDEF=39 -CONST=40 -EXTERN=41 -EXPORT=42 -ALIGN=43 -INLINE=44 -VOLATILE=45 -STATIC=46 -INTERRUPT=47 -REGISTER=48 -LOCAL_RESERVE=49 -ADDRESS=50 -ADDRESS_ZEROPAGE=51 -ADDRESS_MAINMEM=52 -FAR=53 -NEAR=54 -FORM_SSA=55 -FORM_MA=56 -INTRINSIC=57 -CALLINGCONVENTION=58 -IF=59 -ELSE=60 -WHILE=61 -DO=62 -FOR=63 -SWITCH=64 -RETURN=65 -BREAK=66 -CONTINUE=67 -GOTO=68 -ASM=69 -DEFAULT=70 -CASE=71 -STRUCT=72 -UNION=73 -ENUM=74 -SIZEOF=75 -TYPEID=76 -DEFINED=77 -KICKASM=78 -LOGIC_NOT=79 -SIMPLETYPE=80 -BOOLEAN=81 -KICKASM_BODY=82 -IMPORT=83 -INCLUDE=84 -PRAGMA=85 -DEFINE=86 -DEFINE_CONTINUE=87 -UNDEF=88 -IFDEF=89 -IFNDEF=90 -IFIF=91 -ELIF=92 -IFELSE=93 -ENDIF=94 -ERROR=95 -TOKEN_STRINGIZE=96 -TOKEN_MERGE=97 -NUMBER=98 -NUMFLOAT=99 -BINFLOAT=100 -DECFLOAT=101 -HEXFLOAT=102 -NUMINT=103 -BININTEGER=104 -DECINTEGER=105 -HEXINTEGER=106 -NAME=107 -STRING=108 -CHAR=109 -WS=110 -COMMENT_LINE=111 -COMMENT_BLOCK=112 -ASM_BYTE=113 -ASM_MNEMONIC=114 -ASM_IMM=115 -ASM_COLON=116 -ASM_COMMA=117 -ASM_PAR_BEGIN=118 -ASM_PAR_END=119 -ASM_BRACKET_BEGIN=120 -ASM_BRACKET_END=121 -ASM_DOT=122 -ASM_SHIFT_LEFT=123 -ASM_SHIFT_RIGHT=124 -ASM_PLUS=125 -ASM_MINUS=126 -ASM_LESS_THAN=127 -ASM_GREATER_THAN=128 -ASM_MULTIPLY=129 -ASM_DIVIDE=130 -ASM_CURLY_BEGIN=131 -ASM_CURLY_END=132 -ASM_NUMBER=133 -ASM_NUMFLOAT=134 -ASM_BINFLOAT=135 -ASM_DECFLOAT=136 -ASM_HEXFLOAT=137 -ASM_NUMINT=138 -ASM_BININTEGER=139 -ASM_DECINTEGER=140 -ASM_HEXINTEGER=141 -ASM_CHAR=142 -ASM_MULTI_REL=143 -ASM_MULTI_NAME=144 -ASM_NAME=145 -ASM_TAG=146 -ASM_WS=147 -ASM_COMMENT_LINE=148 -ASM_COMMENT_BLOCK=149 -IMPORT_SYSTEMFILE=150 -IMPORT_LOCALFILE=151 -IMPORT_WS=152 -IMPORT_COMMENT_LINE=153 -IMPORT_COMMENT_BLOCK=154 -';'=8 -'..'=11 -'...'=12 -'?'=13 -'->'=15 -'%'=20 -'++'=21 -'--'=22 -'&'=23 -'~'=24 -'^'=25 -'|'=26 -'=='=29 -'!='=30 -'<='=32 -'>='=33 -'&&'=35 -'||'=36 -'='=37 -'typedef'=39 -'const'=40 -'extern'=41 -'__export'=42 -'__align'=43 -'inline'=44 -'volatile'=45 -'static'=46 -'__interrupt'=47 -'register'=48 -'__zp_reserve'=49 -'__address'=50 -'__zp'=51 -'__mem'=52 -'__far'=53 -'__near'=54 -'__ssa'=55 -'__ma'=56 -'__intrinsic'=57 -'if'=59 -'else'=60 -'while'=61 -'do'=62 -'for'=63 -'switch'=64 -'return'=65 -'break'=66 -'continue'=67 -'goto'=68 -'asm'=69 -'default'=70 -'case'=71 -'struct'=72 -'union'=73 -'enum'=74 -'sizeof'=75 -'typeid'=76 -'defined'=77 -'kickasm'=78 -'!'=79 -'#import'=83 -'#include'=84 -'#pragma'=85 -'#define'=86 -'#undef'=88 -'#ifdef'=89 -'#ifndef'=90 -'#if'=91 -'#elif'=92 -'#else'=93 -'#endif'=94 -'#error'=95 -'.byte'=113 -'#'=115 From f81c5ce04035554a045f3173efcb4228ec59cb7b Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Sun, 26 Mar 2023 18:30:09 +0200 Subject: [PATCH 13/66] Adding the fix code segment in far call bank. Added the currentBankLocation to the procedure definition. (cherry picked from commit 0d90caebe8dd528b2a36d1e151f26820e40e70f5) (cherry picked from commit 8cbf1b5b4bd7f62326e454bbff7ab5456647615d) --- .../camelot64/kickc/passes/Pass0GenerateStatementSequence.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index b6cf3dae6..0026ec069 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -588,6 +588,8 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor Date: Sun, 26 Mar 2023 18:30:53 +0200 Subject: [PATCH 14/66] - Inline code can never be banked. (cherry picked from commit 249b7600a9262ea673e63d133db75690af43ca05) --- .../kickc/passes/Pass4CodeGeneration.java | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 0d3568c70..60b8aa5dd 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -894,20 +894,27 @@ public class Pass4CodeGeneration { } else if (statement instanceof StatementCallExecute) { // TODO: This part seems never to be executed! Old code? StatementCallExecute call = (StatementCallExecute) statement; - Procedure procedure = getScope().getProcedure(call.getProcedure()); - Procedure procedureFrom = block.getProcedure(this.program); // We obtain from where the procedure is called, to validate the bank equality. RValue procedureRVal = call.getProcedureRVal(); - // Same as PHI - if(procedure.isDeclaredBanked() && procedureFrom.getBank() != procedure.getBank()) { - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallPrepare(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallExecute(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallFinalize(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); - } else { - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); - } + // Generate ASM for a call + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); if (!(procedureRVal instanceof ProcedureRef)) { asm.getCurrentChunk().setClobberOverwrite(CpuClobber.CLOBBER_ALL); } +// StatementCallExecute call = (StatementCallExecute) statement; +// Procedure procedure = getScope().getProcedure(call.getProcedure()); +// Procedure procedureFrom = block.getProcedure(this.program); // We obtain from where the procedure is called, to validate the bank equality. +// RValue procedureRVal = call.getProcedureRVal(); +// // Same as PHI +// if(procedure.isDeclaredBanked() && procedureFrom.getBank() != procedure.getBank()) { +// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallPrepare(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); +// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallExecute(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); +// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallFinalize(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); +// } else { +// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); +// } +// if (!(procedureRVal instanceof ProcedureRef)) { +// asm.getCurrentChunk().setClobberOverwrite(CpuClobber.CLOBBER_ALL); +// } } else if (statement instanceof StatementExprSideEffect) { AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.exprSideEffect((StatementExprSideEffect) statement, program), program); } else if (statement instanceof StatementReturn) { From b650ba99a95db7645f2299c25ad3669c1923e8c2 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Sun, 26 Mar 2023 18:31:47 +0200 Subject: [PATCH 15/66] - Fix far call kernal servicing address! It was wrong! Now it's fixed! (cherry picked from commit e9ddfaeb3ab519cd393f26ca30632c06c59de1fe) --- src/main/fragment/mos6502-common/call_far_cx16_ram_execute.asm | 2 +- src/main/fragment/mos6502-common/call_far_cx16_rom_execute.asm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/fragment/mos6502-common/call_far_cx16_ram_execute.asm b/src/main/fragment/mos6502-common/call_far_cx16_ram_execute.asm index d316eb072..667444f52 100644 --- a/src/main/fragment/mos6502-common/call_far_cx16_ram_execute.asm +++ b/src/main/fragment/mos6502-common/call_far_cx16_ram_execute.asm @@ -1,4 +1,4 @@ -jsr $FFE6 +jsr $FF6E .byte <{la1} .byte >{la1} .byte {c1} diff --git a/src/main/fragment/mos6502-common/call_far_cx16_rom_execute.asm b/src/main/fragment/mos6502-common/call_far_cx16_rom_execute.asm index d316eb072..667444f52 100644 --- a/src/main/fragment/mos6502-common/call_far_cx16_rom_execute.asm +++ b/src/main/fragment/mos6502-common/call_far_cx16_rom_execute.asm @@ -1,4 +1,4 @@ -jsr $FFE6 +jsr $FF6E .byte <{la1} .byte >{la1} .byte {c1} From 47066115644d07b97c995d54340bc94fcf969dd1 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Mon, 27 Mar 2023 21:42:52 +0200 Subject: [PATCH 16/66] - Mem[x] parameters in a banked function are always allocated in main memory. - Mem[x] return value(s) in banked functions are always allocated in main memory. - Mem[x] intermediate value(s) in banked functions are always placed in the designated data segment. This to accommodate better banking logic for far function calls. (There might be more complexity for other type of variables, but for equinoxe it's working!). (cherry picked from commit 649a187d7e9290b630a951d8968ce5ece6ba2216) --- .../kickc/model/symbols/Procedure.java | 23 +++++++++------- .../camelot64/kickc/model/symbols/Scope.java | 6 ++++- .../Pass0GenerateStatementSequence.java | 3 ++- .../kickc/passes/Pass4CodeGeneration.java | 27 ++++++++++++++++++- 4 files changed, 47 insertions(+), 12 deletions(-) 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 49f9854fa..692e7f96a 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -34,8 +34,8 @@ public class Procedure extends Scope { private List comments; /** Reserved zeropage addresses. */ private List reservedZps; - /** The code segment to put the procedure into. */ - private final String codeSegment; + /** The data and code segment to put the procedure into. */ + private String segmentCode; /** The list of constructor procedures for this procedure. The constructor procedures are called during program initialization. */ private final List constructorRefs; /** Is this procedure declared as a constructor procedure. */ @@ -98,14 +98,15 @@ public class Procedure extends Scope { /** The calling convention used for this procedure. */ private CallingConvention callingConvention; - public Procedure(String name, SymbolTypeProcedure procedureType, Scope parentScope, String codeSegment, String dataSegment, CallingConvention callingConvention, Bank bankLocation) { - super(name, parentScope, dataSegment); + public Procedure(String name, SymbolTypeProcedure procedureType, Scope parentScope, String segmentCode, String segmentData, CallingConvention callingConvention, Bank bankLocation) { + super(name, parentScope, segmentData); this.procedureType = procedureType; this.declaredInline = false; this.bankLocation = bankLocation; this.interruptType = null; this.comments = new ArrayList<>(); - this.codeSegment = codeSegment; + this.segmentCode = segmentCode; + this.segmentData = segmentData; // The parameter dataSegment was foreseen, but never implemented. this.callingConvention = callingConvention; this.constructorRefs = new ArrayList<>(); this.isConstructor = false; @@ -127,8 +128,12 @@ public class Procedure extends Scope { this.callingConvention = callingConvention; } - public String getCodeSegment() { - return codeSegment; + public String getSegmentCode() { + return segmentCode; + } + + public void setSegmentCode(String segmentCode) { + this.segmentCode = segmentCode; } public List getParameterNames() { @@ -339,13 +344,13 @@ public class Procedure extends Scope { Objects.equals(interruptType, procedure.interruptType) && Objects.equals(comments, procedure.comments) && Objects.equals(reservedZps, procedure.reservedZps) && - Objects.equals(codeSegment, procedure.codeSegment) && + Objects.equals(segmentCode, procedure.segmentCode) && Objects.equals(constructorRefs, procedure.constructorRefs) && callingConvention == procedure.callingConvention; } @Override public int hashCode() { - return Objects.hash(super.hashCode(), procedureType, parameterNames, variableLengthParameterList, declaredInline, declaredIntrinsic, interruptType, comments, reservedZps, codeSegment, constructorRefs, isConstructor, callingConvention); + return Objects.hash(super.hashCode(), procedureType, parameterNames, variableLengthParameterList, declaredInline, declaredIntrinsic, interruptType, comments, reservedZps, segmentCode, constructorRefs, isConstructor, callingConvention); } } diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java b/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java index 77ecbb068..b950128f7 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java @@ -26,7 +26,7 @@ public abstract class Scope implements Symbol { private int blockCount = 1; private Scope parentScope; private String fullName; - private String segmentData; + protected String segmentData; public Scope(String name, Scope parentScope, String segmentData) { this.name = name; @@ -45,6 +45,10 @@ public abstract class Scope implements Symbol { return segmentData; } + public void setSegmentData(String segmentData) { + this.segmentData = segmentData; + } + public HashMap getSymbols() { return symbols; } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 0026ec069..792c6849f 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -588,7 +588,8 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor parameters = procedure.getParameters(); + if (variable.isKindPhiVersion()) { + Variable master = variable.getPhiMaster(); + if (master != null) { + if (parameters.contains(master) || master.getLocalName().equals("return")) { + variable.setDataSegment("Data"); + } + } + } + } + } + + // Intermediate variables are placed at the banked data segment, but parameters and return values are kept untouched. + if (variable.isKindIntermediate()) { + if (scope instanceof Procedure) { + Procedure procedure = (Procedure) scope; + variable.setDataSegment(procedure.getSegmentData()); + } + } + setCurrentSegment(variable.getDataSegment(), asm); setCurrentSegment(variable.getDataSegment(), asm); // Add any comments generateComments(asm, variable.getComments()); From c9720722ad6de9a25ca9f859cdc49eeda1640651 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sat, 1 Apr 2023 19:30:19 +0200 Subject: [PATCH 17/66] Working on #372 varcall. Fixed problem with returning a struct by value. --- .../camelot64/kickc/passes/Pass1CallVar.java | 4 +- .../kickc/test/TestProgramsFast.java | 8 +- src/test/kc/varcall-5.c | 12 +- src/test/ref/varcall-5.asm | 69 +++ src/test/ref/varcall-5.cfg | 33 ++ src/test/ref/varcall-5.log | 496 ++++++++++++++++++ src/test/ref/varcall-5.sym | 30 ++ 7 files changed, 642 insertions(+), 10 deletions(-) create mode 100644 src/test/ref/varcall-5.asm create mode 100644 src/test/ref/varcall-5.cfg create mode 100644 src/test/ref/varcall-5.log create mode 100644 src/test/ref/varcall-5.sym diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass1CallVar.java b/src/main/java/dk/camelot64/kickc/passes/Pass1CallVar.java index fcf013ba0..68b7c6f3c 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass1CallVar.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass1CallVar.java @@ -62,9 +62,7 @@ public class Pass1CallVar extends Pass2SsaOptimization { final LValue lValue = call.getlValue(); if(lValue!=null) { Variable returnVar = procedure.getLocalVariable("return"); - stmtIt.previous(); generateCallFinalize(lValue, returnVar, source, comments, stmtIt, statement); - stmtIt.next(); } stmtIt.remove(); } @@ -105,7 +103,9 @@ public class Pass1CallVar extends Pass2SsaOptimization { if(!(lValue instanceof ValueList) || !(returnType instanceof SymbolTypeStruct)) { // A simple value - add simple assignment final StatementAssignment stackPull = new StatementAssignment(lValue, returnVar.getRef(), false, source, comments); + stmtIt.previous(); stmtIt.add(stackPull); + stmtIt.next(); getLog().append("Calling convention " + Procedure.CallingConvention.VAR_CALL + " adding return value assignment " + stackPull); } else { final CastValue structLValue = new CastValue(returnType, lValue); diff --git a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java index c6cb04fe1..094cff35b 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java +++ b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java @@ -380,10 +380,10 @@ public class TestProgramsFast extends TestPrograms { compileAndCompare("struct-unwinding-1.c"); } - //@Test - //public void testVarCall5() throws IOException { - // compileAndCompare("varcall-5.c", log().verboseCreateSsa().verboseStructUnwind()); - //} + @Test + public void testVarCall5() throws IOException { + compileAndCompare("varcall-5.c"); + } @Test public void testVarCall4() throws IOException { diff --git a/src/test/kc/varcall-5.c b/src/test/kc/varcall-5.c index 0e0b1cd1a..e6b7f18d1 100644 --- a/src/test/kc/varcall-5.c +++ b/src/test/kc/varcall-5.c @@ -6,10 +6,17 @@ struct Cols { char bg; }; -struct Cols * const COLS = (struct Cols *)0xd020; +struct Cols * const COLS = (struct Cols * const)0xd020; struct Cols a; +__varcall struct Cols make(char v) { + struct Cols c; + c.border = v; + c.bg = v+v; + return c; +} + void main() { a = make(1); *COLS = a; @@ -17,6 +24,3 @@ void main() { *COLS = a; } -__varcall struct Cols make(char v) { - return { v, v+v }; -} diff --git a/src/test/ref/varcall-5.asm b/src/test/ref/varcall-5.asm new file mode 100644 index 000000000..22b209990 --- /dev/null +++ b/src/test/ref/varcall-5.asm @@ -0,0 +1,69 @@ +// Test __varcall calling convention +// Struct return value + // Commodore 64 PRG executable file +.file [name="varcall-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + .const OFFSET_STRUCT_COLS_BG = 1 + .const SIZEOF_STRUCT_COLS = 2 + .label COLS = $d020 +.segment Code +main: { + // make(1) + lda #1 + sta.z make.v + jsr make + ldx.z make.return_border + lda.z make.return_bg + // a = make(1) + stx a + sta a+OFFSET_STRUCT_COLS_BG + // *COLS = a + ldy #SIZEOF_STRUCT_COLS + !: + lda a-1,y + sta COLS-1,y + dey + bne !- + // make(2) + lda #2 + sta.z make.v + jsr make + ldx.z make.return_border + lda.z make.return_bg + // a = make(2) + stx a + sta a+OFFSET_STRUCT_COLS_BG + // *COLS = a + ldy #SIZEOF_STRUCT_COLS + !: + lda a-1,y + sta COLS-1,y + dey + bne !- + // } + rts +} +// struct Cols make(__zp(2) char v) +make: { + .label v = 2 + .label return_border = 3 + .label return_bg = 4 + // c.border = v + ldx.z v + // v+v + txa + asl + // c.bg = v+v + // return c; + stx.z return_border + sta.z return_bg + // } + rts +} +.segment Data + a: .fill SIZEOF_STRUCT_COLS, 0 diff --git a/src/test/ref/varcall-5.cfg b/src/test/ref/varcall-5.cfg new file mode 100644 index 000000000..c0e651751 --- /dev/null +++ b/src/test/ref/varcall-5.cfg @@ -0,0 +1,33 @@ + +void main() +main: scope:[main] from + [0] make::v = 1 + [1] callexecute make + [2] main::$0_border = make::return_border + [3] main::$0_bg = make::return_bg + [4] *((char *)&a) = main::$0_border + [5] *((char *)&a+OFFSET_STRUCT_COLS_BG) = main::$0_bg + [6] *COLS = memcpy(*(&a), struct Cols, SIZEOF_STRUCT_COLS) + [7] make::v = 2 + [8] callexecute make + [9] main::$1_border = make::return_border + [10] main::$1_bg = make::return_bg + [11] *((char *)&a) = main::$1_border + [12] *((char *)&a+OFFSET_STRUCT_COLS_BG) = main::$1_bg + [13] *COLS = memcpy(*(&a), struct Cols, SIZEOF_STRUCT_COLS) + to:main::@return +main::@return: scope:[main] from main + [14] return + to:@return + +__varcall struct Cols make(char v) +make: scope:[make] from + [15] make::c_border#1 = make::v + [16] make::$0 = make::v + make::v + [17] make::c_bg#1 = make::$0 + [18] make::return_border = make::c_border#1 + [19] make::return_bg = make::c_bg#1 + to:make::@return +make::@return: scope:[make] from make + [20] return + to:@return diff --git a/src/test/ref/varcall-5.log b/src/test/ref/varcall-5.log new file mode 100644 index 000000000..0d1cb0dde --- /dev/null +++ b/src/test/ref/varcall-5.log @@ -0,0 +1,496 @@ +Converting parameter in __varcall procedure to load/store make::v +Converting return in __varcall procedure to load/store make::return +Eliminating unused variable with no statement main::$0 +Eliminating unused variable with no statement main::$1 +Calling convention __varcall adding prepare/execute/finalize for { main::$0_border, main::$0_bg } = call make(1) +Calling convention __varcall adding prepare/execute/finalize for { main::$1_border, main::$1_bg } = call make(2) +Removing C-classic struct-unwound assignment a = struct-unwound {*((char *)&a+OFFSET_STRUCT_COLS_BORDER), *((char *)&a+OFFSET_STRUCT_COLS_BG)} +Removing C-classic struct-unwound assignment a = struct-unwound {*((char *)&a+OFFSET_STRUCT_COLS_BORDER), *((char *)&a+OFFSET_STRUCT_COLS_BG)} + +CONTROL FLOW GRAPH SSA + +__varcall struct Cols make(char v) +make: scope:[make] from + make::c_border#0 = 0 + make::c_bg#0 = 0 + make::c_border#1 = make::v + make::$0 = make::v + make::v + make::c_bg#1 = make::$0 + make::return_border = make::c_border#1 + make::return_bg = make::c_bg#1 + make::return = struct-unwound {make::return_border, make::return_bg} + to:make::@return +make::@return: scope:[make] from make + return + to:@return + +void main() +main: scope:[main] from __start + make::v = 1 + callexecute make + main::$0_border = make::return_border + main::$0_bg = make::return_bg + *((char *)&a+OFFSET_STRUCT_COLS_BORDER) = main::$0_border + *((char *)&a+OFFSET_STRUCT_COLS_BG) = main::$0_bg + *COLS = memcpy(*(&a), struct Cols, SIZEOF_STRUCT_COLS) + make::v = 2 + callexecute make + main::$1_border = make::return_border + main::$1_bg = make::return_bg + *((char *)&a+OFFSET_STRUCT_COLS_BORDER) = main::$1_border + *((char *)&a+OFFSET_STRUCT_COLS_BG) = main::$1_bg + *COLS = memcpy(*(&a), struct Cols, SIZEOF_STRUCT_COLS) + to:main::@return +main::@return: scope:[main] from main + 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 +__constant struct Cols * const COLS = (struct Cols * const )$d020 +__constant char OFFSET_STRUCT_COLS_BG = 1 +__constant char OFFSET_STRUCT_COLS_BORDER = 0 +__constant char SIZEOF_STRUCT_COLS = 2 +void __start() +__loadstore struct Cols a = {} +void main() +char main::$0_bg +char main::$0_border +char main::$1_bg +char main::$1_border +__varcall struct Cols make(char v) +char make::$0 +char make::c_bg +char make::c_bg#0 +char make::c_bg#1 +char make::c_border +char make::c_border#0 +char make::c_border#1 +__loadstore struct Cols make::return +__loadstore char make::return_bg +__loadstore char make::return_border +__loadstore char make::v + +Adding number conversion cast (unumber) 1 in make::v = 1 +Adding number conversion cast (unumber) 2 in make::v = 2 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast make::v = (unumber)1 +Inlining cast make::v = (unumber)2 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (struct Cols *) 53280 +Simplifying constant integer cast 1 +Simplifying constant integer cast 2 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 2 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias candidate removed (volatile)make::c_bg#1 = make::$0 make::return_bg +Alias candidate removed (volatile)make::c_border#1 = make::return_border +Constant make::c_border#0 = 0 +Constant make::c_bg#0 = 0 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero (char *)&a in [13] *((char *)&a+OFFSET_STRUCT_COLS_BORDER) = main::$0_border +Simplifying expression containing zero (char *)&a in [20] *((char *)&a+OFFSET_STRUCT_COLS_BORDER) = main::$1_border +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused variable make::return and assignment [5] make::return = struct-unwound {make::return_border, make::return_bg} +Eliminating unused constant make::c_border#0 +Eliminating unused constant make::c_bg#0 +Eliminating unused constant OFFSET_STRUCT_COLS_BORDER +Successful SSA optimization PassNEliminateUnusedVars +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 +Alias candidate removed (volatile)make::c_bg#1 = make::$0 make::return_bg +Alias candidate removed (volatile)make::c_border#1 = make::return_border +Alias candidate removed (volatile)make::c_bg#1 = make::$0 make::return_bg +Alias candidate removed (volatile)make::c_border#1 = make::return_border +Alias candidate removed (volatile)make::c_bg#1 = make::$0 make::return_bg +Alias candidate removed (volatile)make::c_border#1 = make::return_border +CALL GRAPH +Calls in [main] to make:1 make:8 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] make::v = 1 + [1] callexecute make + [2] main::$0_border = make::return_border + [3] main::$0_bg = make::return_bg + [4] *((char *)&a) = main::$0_border + [5] *((char *)&a+OFFSET_STRUCT_COLS_BG) = main::$0_bg + [6] *COLS = memcpy(*(&a), struct Cols, SIZEOF_STRUCT_COLS) + [7] make::v = 2 + [8] callexecute make + [9] main::$1_border = make::return_border + [10] main::$1_bg = make::return_bg + [11] *((char *)&a) = main::$1_border + [12] *((char *)&a+OFFSET_STRUCT_COLS_BG) = main::$1_bg + [13] *COLS = memcpy(*(&a), struct Cols, SIZEOF_STRUCT_COLS) + to:main::@return +main::@return: scope:[main] from main + [14] return + to:@return + +__varcall struct Cols make(char v) +make: scope:[make] from + [15] make::c_border#1 = make::v + [16] make::$0 = make::v + make::v + [17] make::c_bg#1 = make::$0 + [18] make::return_border = make::c_border#1 + [19] make::return_bg = make::c_bg#1 + to:make::@return +make::@return: scope:[make] from make + [20] return + to:@return + + +VARIABLE REGISTER WEIGHTS +__loadstore struct Cols a = {} +void main() +char main::$0_bg // 2.0 +char main::$0_border // 2.0 +char main::$1_bg // 2.0 +char main::$1_border // 2.0 +__varcall struct Cols make(char v) +char make::$0 // 22.0 +char make::c_bg +char make::c_bg#1 // 11.0 +char make::c_border +char make::c_border#1 // 7.333333333333333 +__loadstore char make::return_bg // 2.5 +__loadstore char make::return_border // 3.0 +__loadstore char make::v // 12.333333333333332 + +Initial phi equivalence classes +Added variable make::v to live range equivalence class [ make::v ] +Added variable main::$0_border to live range equivalence class [ main::$0_border ] +Added variable main::$0_bg to live range equivalence class [ main::$0_bg ] +Added variable main::$1_border to live range equivalence class [ main::$1_border ] +Added variable main::$1_bg to live range equivalence class [ main::$1_bg ] +Added variable make::c_border#1 to live range equivalence class [ make::c_border#1 ] +Added variable make::$0 to live range equivalence class [ make::$0 ] +Added variable make::c_bg#1 to live range equivalence class [ make::c_bg#1 ] +Added variable make::return_border to live range equivalence class [ make::return_border ] +Added variable make::return_bg to live range equivalence class [ make::return_bg ] +Added variable a to live range equivalence class [ a ] +Complete equivalence classes +[ make::v ] +[ main::$0_border ] +[ main::$0_bg ] +[ main::$1_border ] +[ main::$1_bg ] +[ make::c_border#1 ] +[ make::$0 ] +[ make::c_bg#1 ] +[ make::return_border ] +[ make::return_bg ] +[ a ] +Allocated zp[1]:2 [ make::$0 ] +Allocated zp[1]:3 [ make::v ] +Allocated zp[1]:4 [ make::c_bg#1 ] +Allocated zp[1]:5 [ make::c_border#1 ] +Allocated zp[1]:6 [ make::return_border ] +Allocated zp[1]:7 [ make::return_bg ] +Allocated zp[1]:8 [ main::$0_border ] +Allocated zp[1]:9 [ main::$0_bg ] +Allocated zp[1]:10 [ main::$1_border ] +Allocated zp[1]:11 [ main::$1_bg ] +Allocated mem[2] [ a ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] make::v = 1 [ make::v a ] ( [ make::v a ] { } ) always clobbers reg byte a +Statement [6] *COLS = memcpy(*(&a), struct Cols, SIZEOF_STRUCT_COLS) [ a ] ( [ a ] { } ) always clobbers reg byte a reg byte y +Statement [7] make::v = 2 [ make::v a ] ( [ make::v a ] { } ) always clobbers reg byte a +Statement [13] *COLS = memcpy(*(&a), struct Cols, SIZEOF_STRUCT_COLS) [ ] ( [ ] { } ) always clobbers reg byte a reg byte y +Statement [16] make::$0 = make::v + make::v [ make::c_border#1 make::$0 ] ( make:1 [ a make::c_border#1 make::$0 ] { } make:8 [ a make::c_border#1 make::$0 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:5 [ make::c_border#1 ] +Statement [0] make::v = 1 [ make::v a ] ( [ make::v a ] { } ) always clobbers reg byte a +Statement [6] *COLS = memcpy(*(&a), struct Cols, SIZEOF_STRUCT_COLS) [ a ] ( [ a ] { } ) always clobbers reg byte a reg byte y +Statement [7] make::v = 2 [ make::v a ] ( [ make::v a ] { } ) always clobbers reg byte a +Statement [13] *COLS = memcpy(*(&a), struct Cols, SIZEOF_STRUCT_COLS) [ ] ( [ ] { } ) always clobbers reg byte a reg byte y +Statement [16] make::$0 = make::v + make::v [ make::c_border#1 make::$0 ] ( make:1 [ a make::c_border#1 make::$0 ] { } make:8 [ a make::c_border#1 make::$0 ] { } ) always clobbers reg byte a +Potential registers zp[1]:3 [ make::v ] : zp[1]:3 , +Potential registers zp[1]:8 [ main::$0_border ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ main::$0_bg ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:10 [ main::$1_border ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:11 [ main::$1_bg ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ make::c_border#1 ] : zp[1]:5 , reg byte x , reg byte y , +Potential registers zp[1]:2 [ make::$0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:4 [ make::c_bg#1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:6 [ make::return_border ] : zp[1]:6 , +Potential registers zp[1]:7 [ make::return_bg ] : zp[1]:7 , +Potential registers mem[2] [ a ] : mem[2] , + +REGISTER UPLIFT SCOPES +Uplift Scope [make] 22: zp[1]:2 [ make::$0 ] 12.33: zp[1]:3 [ make::v ] 11: zp[1]:4 [ make::c_bg#1 ] 7.33: zp[1]:5 [ make::c_border#1 ] 3: zp[1]:6 [ make::return_border ] 2.5: zp[1]:7 [ make::return_bg ] +Uplift Scope [main] 2: zp[1]:8 [ main::$0_border ] 2: zp[1]:9 [ main::$0_bg ] 2: zp[1]:10 [ main::$1_border ] 2: zp[1]:11 [ main::$1_bg ] +Uplift Scope [Cols] +Uplift Scope [] 0: mem[2] [ a ] + +Uplifting [make] best 138 combination reg byte a [ make::$0 ] zp[1]:3 [ make::v ] reg byte a [ make::c_bg#1 ] reg byte x [ make::c_border#1 ] zp[1]:6 [ make::return_border ] zp[1]:7 [ make::return_bg ] +Uplifting [main] best 120 combination reg byte x [ main::$0_border ] reg byte a [ main::$0_bg ] reg byte x [ main::$1_border ] zp[1]:11 [ main::$1_bg ] +Limited combination testing to 100 combinations of 256 possible. +Uplifting [Cols] best 120 combination +Uplifting [] best 120 combination mem[2] [ a ] +Attempting to uplift remaining variables inzp[1]:3 [ make::v ] +Uplifting [make] best 120 combination zp[1]:3 [ make::v ] +Attempting to uplift remaining variables inzp[1]:6 [ make::return_border ] +Uplifting [make] best 120 combination zp[1]:6 [ make::return_border ] +Attempting to uplift remaining variables inzp[1]:7 [ make::return_bg ] +Uplifting [make] best 120 combination zp[1]:7 [ make::return_bg ] +Attempting to uplift remaining variables inzp[1]:11 [ main::$1_bg ] +Uplifting [main] best 114 combination reg byte a [ main::$1_bg ] +Allocated (was zp[1]:3) zp[1]:2 [ make::v ] +Allocated (was zp[1]:6) zp[1]:3 [ make::return_border ] +Allocated (was zp[1]:7) zp[1]:4 [ make::return_bg ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test __varcall calling convention +// Struct return value + // Upstart + // Commodore 64 PRG executable file +.file [name="varcall-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .const OFFSET_STRUCT_COLS_BG = 1 + .const SIZEOF_STRUCT_COLS = 2 + .label COLS = $d020 +.segment Code + // main +main: { + // [0] make::v = 1 -- vbuz1=vbuc1 + lda #1 + sta.z make.v + // [1] callexecute make -- call_vprc1 + jsr make + // [2] main::$0_border = make::return_border -- vbuxx=vbuz1 + ldx.z make.return_border + // [3] main::$0_bg = make::return_bg -- vbuaa=vbuz1 + lda.z make.return_bg + // [4] *((char *)&a) = main::$0_border -- _deref_pbuc1=vbuxx + stx a + // [5] *((char *)&a+OFFSET_STRUCT_COLS_BG) = main::$0_bg -- _deref_pbuc1=vbuaa + sta a+OFFSET_STRUCT_COLS_BG + // [6] *COLS = memcpy(*(&a), struct Cols, SIZEOF_STRUCT_COLS) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_COLS + !: + lda a-1,y + sta COLS-1,y + dey + bne !- + // [7] make::v = 2 -- vbuz1=vbuc1 + lda #2 + sta.z make.v + // [8] callexecute make -- call_vprc1 + jsr make + // [9] main::$1_border = make::return_border -- vbuxx=vbuz1 + ldx.z make.return_border + // [10] main::$1_bg = make::return_bg -- vbuaa=vbuz1 + lda.z make.return_bg + // [11] *((char *)&a) = main::$1_border -- _deref_pbuc1=vbuxx + stx a + // [12] *((char *)&a+OFFSET_STRUCT_COLS_BG) = main::$1_bg -- _deref_pbuc1=vbuaa + sta a+OFFSET_STRUCT_COLS_BG + // [13] *COLS = memcpy(*(&a), struct Cols, SIZEOF_STRUCT_COLS) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_COLS + !: + lda a-1,y + sta COLS-1,y + dey + bne !- + jmp __breturn + // main::@return + __breturn: + // [14] return + rts +} + // make +// struct Cols make(__zp(2) char v) +make: { + .label v = 2 + .label return_border = 3 + .label return_bg = 4 + // [15] make::c_border#1 = make::v -- vbuxx=vbuz1 + ldx.z v + // [16] make::$0 = make::v + make::v -- vbuaa=vbuz1_plus_vbuz1 + lda.z v + asl + // [17] make::c_bg#1 = make::$0 + // [18] make::return_border = make::c_border#1 -- vbuz1=vbuxx + stx.z return_border + // [19] make::return_bg = make::c_bg#1 -- vbuz1=vbuaa + sta.z return_bg + jmp __breturn + // make::@return + __breturn: + // [20] return + rts +} + // File Data +.segment Data + a: .fill SIZEOF_STRUCT_COLS, 0 + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Replacing instruction lda.z v with TXA +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant struct Cols * const COLS = (struct Cols *) 53280 +__constant char OFFSET_STRUCT_COLS_BG = 1 +__constant char SIZEOF_STRUCT_COLS = 2 +__loadstore struct Cols a = {} // mem[2] +void main() +char main::$0_bg // reg byte a 2.0 +char main::$0_border // reg byte x 2.0 +char main::$1_bg // reg byte a 2.0 +char main::$1_border // reg byte x 2.0 +__varcall struct Cols make(char v) +char make::$0 // reg byte a 22.0 +char make::c_bg +char make::c_bg#1 // reg byte a 11.0 +char make::c_border +char make::c_border#1 // reg byte x 7.333333333333333 +__loadstore char make::return_bg // zp[1]:4 2.5 +__loadstore char make::return_border // zp[1]:3 3.0 +__loadstore char make::v // zp[1]:2 12.333333333333332 + +zp[1]:2 [ make::v ] +reg byte x [ main::$0_border ] +reg byte a [ main::$0_bg ] +reg byte x [ main::$1_border ] +reg byte a [ main::$1_bg ] +reg byte x [ make::c_border#1 ] +reg byte a [ make::$0 ] +reg byte a [ make::c_bg#1 ] +zp[1]:3 [ make::return_border ] +zp[1]:4 [ make::return_bg ] +mem[2] [ a ] + + +FINAL ASSEMBLER +Score: 107 + + // File Comments +// Test __varcall calling convention +// Struct return value + // Upstart + // Commodore 64 PRG executable file +.file [name="varcall-5.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .const OFFSET_STRUCT_COLS_BG = 1 + .const SIZEOF_STRUCT_COLS = 2 + .label COLS = $d020 +.segment Code + // main +main: { + // make(1) + // [0] make::v = 1 -- vbuz1=vbuc1 + lda #1 + sta.z make.v + // [1] callexecute make -- call_vprc1 + jsr make + // [2] main::$0_border = make::return_border -- vbuxx=vbuz1 + ldx.z make.return_border + // [3] main::$0_bg = make::return_bg -- vbuaa=vbuz1 + lda.z make.return_bg + // a = make(1) + // [4] *((char *)&a) = main::$0_border -- _deref_pbuc1=vbuxx + stx a + // [5] *((char *)&a+OFFSET_STRUCT_COLS_BG) = main::$0_bg -- _deref_pbuc1=vbuaa + sta a+OFFSET_STRUCT_COLS_BG + // *COLS = a + // [6] *COLS = memcpy(*(&a), struct Cols, SIZEOF_STRUCT_COLS) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_COLS + !: + lda a-1,y + sta COLS-1,y + dey + bne !- + // make(2) + // [7] make::v = 2 -- vbuz1=vbuc1 + lda #2 + sta.z make.v + // [8] callexecute make -- call_vprc1 + jsr make + // [9] main::$1_border = make::return_border -- vbuxx=vbuz1 + ldx.z make.return_border + // [10] main::$1_bg = make::return_bg -- vbuaa=vbuz1 + lda.z make.return_bg + // a = make(2) + // [11] *((char *)&a) = main::$1_border -- _deref_pbuc1=vbuxx + stx a + // [12] *((char *)&a+OFFSET_STRUCT_COLS_BG) = main::$1_bg -- _deref_pbuc1=vbuaa + sta a+OFFSET_STRUCT_COLS_BG + // *COLS = a + // [13] *COLS = memcpy(*(&a), struct Cols, SIZEOF_STRUCT_COLS) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_COLS + !: + lda a-1,y + sta COLS-1,y + dey + bne !- + // main::@return + // } + // [14] return + rts +} + // make +// struct Cols make(__zp(2) char v) +make: { + .label v = 2 + .label return_border = 3 + .label return_bg = 4 + // c.border = v + // [15] make::c_border#1 = make::v -- vbuxx=vbuz1 + ldx.z v + // v+v + // [16] make::$0 = make::v + make::v -- vbuaa=vbuz1_plus_vbuz1 + txa + asl + // c.bg = v+v + // [17] make::c_bg#1 = make::$0 + // return c; + // [18] make::return_border = make::c_border#1 -- vbuz1=vbuxx + stx.z return_border + // [19] make::return_bg = make::c_bg#1 -- vbuz1=vbuaa + sta.z return_bg + // make::@return + // } + // [20] return + rts +} + // File Data +.segment Data + a: .fill SIZEOF_STRUCT_COLS, 0 + diff --git a/src/test/ref/varcall-5.sym b/src/test/ref/varcall-5.sym new file mode 100644 index 000000000..42d6b78ee --- /dev/null +++ b/src/test/ref/varcall-5.sym @@ -0,0 +1,30 @@ +__constant struct Cols * const COLS = (struct Cols *) 53280 +__constant char OFFSET_STRUCT_COLS_BG = 1 +__constant char SIZEOF_STRUCT_COLS = 2 +__loadstore struct Cols a = {} // mem[2] +void main() +char main::$0_bg // reg byte a 2.0 +char main::$0_border // reg byte x 2.0 +char main::$1_bg // reg byte a 2.0 +char main::$1_border // reg byte x 2.0 +__varcall struct Cols make(char v) +char make::$0 // reg byte a 22.0 +char make::c_bg +char make::c_bg#1 // reg byte a 11.0 +char make::c_border +char make::c_border#1 // reg byte x 7.333333333333333 +__loadstore char make::return_bg // zp[1]:4 2.5 +__loadstore char make::return_border // zp[1]:3 3.0 +__loadstore char make::v // zp[1]:2 12.333333333333332 + +zp[1]:2 [ make::v ] +reg byte x [ main::$0_border ] +reg byte a [ main::$0_bg ] +reg byte x [ main::$1_border ] +reg byte a [ main::$1_bg ] +reg byte x [ make::c_border#1 ] +reg byte a [ make::$0 ] +reg byte a [ make::c_bg#1 ] +zp[1]:3 [ make::return_border ] +zp[1]:4 [ make::return_bg ] +mem[2] [ a ] From 9a85048003a67c990d639da78dae836ff063ab39 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 2 Apr 2023 11:17:57 +0200 Subject: [PATCH 18/66] Working on #372 varcall. Fixed struct in/out by value - also when only called once. --- .../kickc/passes/Pass2ConstantInlining.java | 36 ++- .../kickc/test/TestProgramsFast.java | 10 + src/test/kc/varcall-6.c | 20 +- src/test/kc/varcall-7.c | 21 ++ src/test/ref/varcall-7.asm | 33 ++ src/test/ref/varcall-7.cfg | 19 ++ src/test/ref/varcall-7.log | 301 ++++++++++++++++++ src/test/ref/varcall-7.sym | 14 + 8 files changed, 439 insertions(+), 15 deletions(-) create mode 100644 src/test/kc/varcall-7.c create mode 100644 src/test/ref/varcall-7.asm create mode 100644 src/test/ref/varcall-7.cfg create mode 100644 src/test/ref/varcall-7.log create mode 100644 src/test/ref/varcall-7.sym diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass2ConstantInlining.java b/src/main/java/dk/camelot64/kickc/passes/Pass2ConstantInlining.java index df78a6bb4..bde8b4b30 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass2ConstantInlining.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass2ConstantInlining.java @@ -3,9 +3,7 @@ package dk.camelot64.kickc.passes; import dk.camelot64.kickc.model.Program; import dk.camelot64.kickc.model.iterator.ProgramValue; import dk.camelot64.kickc.model.iterator.ProgramValueIterator; -import dk.camelot64.kickc.model.symbols.ProgramScope; -import dk.camelot64.kickc.model.symbols.Symbol; -import dk.camelot64.kickc.model.symbols.Variable; +import dk.camelot64.kickc.model.symbols.*; import dk.camelot64.kickc.model.values.*; import dk.camelot64.kickc.passes.utils.AliasReplacer; @@ -55,10 +53,14 @@ public class Pass2ConstantInlining extends Pass2SsaOptimization { replaceInValues(inline); // Replace all usages of the constants in the control flow graph or symbol table replaceVariables(inline); + // Remove parameters + final Set inlineRefs = inline.keySet(); + removeParameters(inlineRefs); // Remove from symbol table - deleteSymbols(getScope(), inline.keySet()); + deleteSymbols(getScope(), inlineRefs); - for(ConstantRef constantRef : inline.keySet()) { + + for(ConstantRef constantRef : inlineRefs) { getLog().append("Constant inlined " + constantRef.toString() + " = " + inline.get(constantRef).toString(getProgram())); } @@ -66,6 +68,30 @@ public class Pass2ConstantInlining extends Pass2SsaOptimization { } + private void removeParameters(Set inlineRefs) { + for(ConstantRef inlineRef : inlineRefs) { + final Scope scope = getScope().getConstant(inlineRef).getScope(); + final Procedure procedure = getProcedure(scope); + if(procedure!=null) { + final List parameters = procedure.getParameters(); + final boolean modified = parameters.removeIf(param -> param.getRef().equals(inlineRef)); + if(modified) { + procedure.setParameters(parameters); + getLog().append("Parameter inlined " + inlineRef.toString()); + } + } + } + } + + private static Procedure getProcedure(Scope scope) { + if(scope instanceof Procedure) + return (Procedure) scope; + else if(scope instanceof ProgramScope) + return null; + else + return getProcedure(scope.getScope()); + } + /** * Replace any aliases within the constant values themselves * diff --git a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java index 094cff35b..7b6411e2d 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java +++ b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java @@ -380,6 +380,16 @@ public class TestProgramsFast extends TestPrograms { compileAndCompare("struct-unwinding-1.c"); } + @Test + public void testVarCall7() throws IOException { + compileAndCompare("varcall-7.c"); + } + + @Test + public void testVarCall6() throws IOException { + compileAndCompare("varcall-6.c"); + } + @Test public void testVarCall5() throws IOException { compileAndCompare("varcall-5.c"); diff --git a/src/test/kc/varcall-6.c b/src/test/kc/varcall-6.c index f5e00cc96..41c23d687 100644 --- a/src/test/kc/varcall-6.c +++ b/src/test/kc/varcall-6.c @@ -8,15 +8,15 @@ struct Cols { struct Cols * const COLS = (struct Cols *)0xd020; -void main() { - struct Cols a = { 1, 2 }; - //*COLS = a; - a = plus(a, { 2, 3 } ); - *COLS = a; - //a = plus(a, a); - //*COLS = a; -} - __varcall struct Cols plus(struct Cols a, struct Cols b) { return { a.border+b.border, a.bg+b.bg }; -} \ No newline at end of file +} + + +void main() { + struct Cols a = { 1, 2 }; + struct Cols c = plus(a, { 2, 3 }); + *COLS = c; + c = plus(c, a); + *COLS = c; +} diff --git a/src/test/kc/varcall-7.c b/src/test/kc/varcall-7.c new file mode 100644 index 000000000..83d418bee --- /dev/null +++ b/src/test/kc/varcall-7.c @@ -0,0 +1,21 @@ +// Test __varcall calling convention +// Struct parameter & return value - only a single call + +struct Cols { + char border; + char bg; +}; + +struct Cols * const COLS = (struct Cols *)0xd020; + +__varcall struct Cols plus(struct Cols a, struct Cols b) { + return { a.border+b.border, a.bg+b.bg }; +} + + +void main() { + struct Cols a = { 1, 2 }; + struct Cols b = { 2, 3 }; + struct Cols c = plus(a, b); + *COLS = c; +} diff --git a/src/test/ref/varcall-7.asm b/src/test/ref/varcall-7.asm new file mode 100644 index 000000000..86486cc8b --- /dev/null +++ b/src/test/ref/varcall-7.asm @@ -0,0 +1,33 @@ +// Test __varcall calling convention +// Struct parameter & return value - only a single call + // Commodore 64 PRG executable file +.file [name="varcall-7.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + .const OFFSET_STRUCT_COLS_BG = 1 + .label COLS = $d020 +.segment Code +main: { + .label a_border = 1 + .label a_bg = 2 + .label b_border = 2 + .label b_bg = 3 + // struct Cols c = plus(a, b) + jsr plus + // *COLS = c + lda #plus.return_border + sta COLS + lda #plus.return_bg + sta COLS+OFFSET_STRUCT_COLS_BG + // } + rts +} +plus: { + .label return_border = main.a_border+main.b_border + .label return_bg = main.a_bg+main.b_bg + rts +} diff --git a/src/test/ref/varcall-7.cfg b/src/test/ref/varcall-7.cfg new file mode 100644 index 000000000..9cec35c4c --- /dev/null +++ b/src/test/ref/varcall-7.cfg @@ -0,0 +1,19 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] callexecute plus + [2] *((char *)COLS) = plus::return_border + [3] *((char *)COLS+OFFSET_STRUCT_COLS_BG) = plus::return_bg + to:main::@return +main::@return: scope:[main] from main + [4] return + to:@return + +__varcall struct Cols plus() +plus: scope:[plus] from + [5] phi() + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return diff --git a/src/test/ref/varcall-7.log b/src/test/ref/varcall-7.log new file mode 100644 index 000000000..f9db3a4eb --- /dev/null +++ b/src/test/ref/varcall-7.log @@ -0,0 +1,301 @@ +Converting parameter in __varcall procedure to load/store plus::a +Converting parameter in __varcall procedure to load/store plus::b +Converting return in __varcall procedure to load/store plus::return +Constantified RValue plus::return = (struct Cols){ plus::$0, plus::$1 } +Eliminating unused variable with no statement plus::a +Eliminating unused variable with no statement plus::b +Eliminating unused variable with no statement main::$0 +Calling convention __varcall adding prepare/execute/finalize for { main::c_border, main::c_bg } = call plus(main::a_border, main::a_bg, main::b_border, main::b_bg) + +CONTROL FLOW GRAPH SSA + +__varcall struct Cols plus(char a_border , char a_bg , char b_border , char b_bg) +plus: scope:[plus] from + plus::$0 = plus::a_border + plus::b_border + plus::$1 = plus::a_bg + plus::b_bg + plus::return_border = plus::$0 + plus::return_bg = plus::$1 + plus::return = struct-unwound {plus::return_border, plus::return_bg} + to:plus::@return +plus::@return: scope:[plus] from plus + return + to:@return + +void main() +main: scope:[main] from __start + plus::a_border = main::a_border + plus::a_bg = main::a_bg + plus::b_border = main::b_border + plus::b_bg = main::b_bg + callexecute plus + main::c_border#0 = plus::return_border + main::c_bg#0 = plus::return_bg + *((char *)COLS+OFFSET_STRUCT_COLS_BORDER) = main::c_border#0 + *((char *)COLS+OFFSET_STRUCT_COLS_BG) = main::c_bg#0 + to:main::@return +main::@return: scope:[main] from main + 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 +__constant struct Cols * const COLS = (struct Cols *)$d020 +__constant char OFFSET_STRUCT_COLS_BG = 1 +__constant char OFFSET_STRUCT_COLS_BORDER = 0 +void __start() +void main() +__constant char main::a_bg = 2 +__constant char main::a_border = 1 +__constant char main::b_bg = 3 +__constant char main::b_border = 2 +struct Cols main::c +char main::c_bg +char main::c_bg#0 +char main::c_border +char main::c_border#0 +__varcall struct Cols plus(char a_border , char a_bg , char b_border , char b_bg) +char plus::$0 +char plus::$1 +__loadstore char plus::a_bg +__loadstore char plus::a_border +__loadstore char plus::b_bg +__loadstore char plus::b_border +__loadstore struct Cols plus::return +__loadstore char plus::return_bg +__loadstore char plus::return_border + +Simplifying constant pointer cast (struct Cols *) 53280 +Successful SSA optimization PassNCastSimplification +Alias candidate removed (volatile)plus::return_border = plus::$0 +Alias candidate removed (volatile)plus::return_bg = plus::$1 +Constant plus::a_border = main::a_border +Constant plus::a_bg = main::a_bg +Constant plus::b_border = main::b_border +Constant plus::b_bg = main::b_bg +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero (char *)COLS in [13] *((char *)COLS+OFFSET_STRUCT_COLS_BORDER) = main::c_border#0 +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused variable plus::return and assignment [4] plus::return = struct-unwound {plus::return_border, plus::return_bg} +Eliminating unused constant OFFSET_STRUCT_COLS_BORDER +Successful SSA optimization PassNEliminateUnusedVars +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 +Alias candidate removed (volatile)plus::return_border = plus::$0 +Alias candidate removed (volatile)plus::return_bg = plus::$1 +Constant right-side identified [0] plus::$0 = plus::a_border + plus::b_border +Constant right-side identified [1] plus::$1 = plus::a_bg + plus::b_bg +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant plus::$0 = plus::a_border+plus::b_border +Constant plus::$1 = plus::a_bg+plus::b_bg +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return_border = plus::$0 +Constant plus::return_bg = plus::$1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::c_border#0 = plus::return_border +Constant main::c_bg#0 = plus::return_bg +Successful SSA optimization Pass2ConstantIdentification +Parameter inlined plus::b_bg +Parameter inlined plus::a_bg +Parameter inlined plus::b_border +Parameter inlined plus::a_border +Constant inlined main::c_border#0 = plus::return_border +Constant inlined plus::b_bg = main::b_bg +Constant inlined plus::a_bg = main::a_bg +Constant inlined plus::b_border = main::b_border +Constant inlined plus::a_border = main::a_border +Constant inlined plus::$1 = main::a_bg+main::b_bg +Constant inlined plus::$0 = main::a_border+main::b_border +Constant inlined main::c_bg#0 = plus::return_bg +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +CALL GRAPH +Calls in [main] to plus:1 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Adding NOP phi() at start of main +Adding NOP phi() at start of plus + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] callexecute plus + [2] *((char *)COLS) = plus::return_border + [3] *((char *)COLS+OFFSET_STRUCT_COLS_BG) = plus::return_bg + to:main::@return +main::@return: scope:[main] from main + [4] return + to:@return + +__varcall struct Cols plus() +plus: scope:[plus] from + [5] phi() + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +struct Cols main::c +char main::c_bg +char main::c_border +__varcall struct Cols plus() + +Initial phi equivalence classes +Complete equivalence classes +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [2] *((char *)COLS) = plus::return_border [ ] ( [ ] { } ) always clobbers reg byte a +Statement [3] *((char *)COLS+OFFSET_STRUCT_COLS_BG) = plus::return_bg [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [Cols] +Uplift Scope [plus] +Uplift Scope [main] +Uplift Scope [] + +Uplifting [Cols] best 63 combination +Uplifting [plus] best 63 combination +Uplifting [main] best 63 combination +Uplifting [] best 63 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test __varcall calling convention +// Struct parameter & return value - only a single call + // Upstart + // Commodore 64 PRG executable file +.file [name="varcall-7.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .const OFFSET_STRUCT_COLS_BG = 1 + .label COLS = $d020 +.segment Code + // main +main: { + .label a_border = 1 + .label a_bg = 2 + .label b_border = 2 + .label b_bg = 3 + // [1] callexecute plus -- call_vprc1 + jsr plus + // [2] *((char *)COLS) = plus::return_border -- _deref_pbuc1=vbuc2 + lda #plus.return_border + sta COLS + // [3] *((char *)COLS+OFFSET_STRUCT_COLS_BG) = plus::return_bg -- _deref_pbuc1=vbuc2 + lda #plus.return_bg + sta COLS+OFFSET_STRUCT_COLS_BG + jmp __breturn + // main::@return + __breturn: + // [4] return + rts +} + // plus +plus: { + .label return_border = main.a_border+main.b_border + .label return_bg = main.a_bg+main.b_bg + jmp __breturn + // plus::@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 +__constant struct Cols * const COLS = (struct Cols *) 53280 +__constant char OFFSET_STRUCT_COLS_BG = 1 +void main() +__constant char main::a_bg = 2 +__constant char main::a_border = 1 +__constant char main::b_bg = 3 +__constant char main::b_border = 2 +struct Cols main::c +char main::c_bg +char main::c_border +__varcall struct Cols plus() +__constant char plus::return_bg = main::a_bg+main::b_bg +__constant char plus::return_border = main::a_border+main::b_border + + + +FINAL ASSEMBLER +Score: 30 + + // File Comments +// Test __varcall calling convention +// Struct parameter & return value - only a single call + // Upstart + // Commodore 64 PRG executable file +.file [name="varcall-7.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .const OFFSET_STRUCT_COLS_BG = 1 + .label COLS = $d020 +.segment Code + // main +main: { + .label a_border = 1 + .label a_bg = 2 + .label b_border = 2 + .label b_bg = 3 + // struct Cols c = plus(a, b) + // [1] callexecute plus -- call_vprc1 + jsr plus + // *COLS = c + // [2] *((char *)COLS) = plus::return_border -- _deref_pbuc1=vbuc2 + lda #plus.return_border + sta COLS + // [3] *((char *)COLS+OFFSET_STRUCT_COLS_BG) = plus::return_bg -- _deref_pbuc1=vbuc2 + lda #plus.return_bg + sta COLS+OFFSET_STRUCT_COLS_BG + // main::@return + // } + // [4] return + rts +} + // plus +plus: { + .label return_border = main.a_border+main.b_border + .label return_bg = main.a_bg+main.b_bg + // plus::@return + // [6] return + rts +} + // File Data + diff --git a/src/test/ref/varcall-7.sym b/src/test/ref/varcall-7.sym new file mode 100644 index 000000000..135b38925 --- /dev/null +++ b/src/test/ref/varcall-7.sym @@ -0,0 +1,14 @@ +__constant struct Cols * const COLS = (struct Cols *) 53280 +__constant char OFFSET_STRUCT_COLS_BG = 1 +void main() +__constant char main::a_bg = 2 +__constant char main::a_border = 1 +__constant char main::b_bg = 3 +__constant char main::b_border = 2 +struct Cols main::c +char main::c_bg +char main::c_border +__varcall struct Cols plus() +__constant char plus::return_bg = main::a_bg+main::b_bg +__constant char plus::return_border = main::a_border+main::b_border + From 2dd2f2e081b53ab503507be516f5ec241b003a8d Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 2 Apr 2023 11:18:07 +0200 Subject: [PATCH 19/66] Working on #372 varcall. Fixed struct in/out by value - also when only called once. --- src/test/ref/varcall-6.asm | 71 +++++ src/test/ref/varcall-6.cfg | 36 +++ src/test/ref/varcall-6.log | 541 +++++++++++++++++++++++++++++++++++++ src/test/ref/varcall-6.sym | 33 +++ 4 files changed, 681 insertions(+) create mode 100644 src/test/ref/varcall-6.asm create mode 100644 src/test/ref/varcall-6.cfg create mode 100644 src/test/ref/varcall-6.log create mode 100644 src/test/ref/varcall-6.sym diff --git a/src/test/ref/varcall-6.asm b/src/test/ref/varcall-6.asm new file mode 100644 index 000000000..f66a117ec --- /dev/null +++ b/src/test/ref/varcall-6.asm @@ -0,0 +1,71 @@ +// Test __varcall calling convention +// Struct parameter & return value + // Commodore 64 PRG executable file +.file [name="varcall-6.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + .const OFFSET_STRUCT_COLS_BG = 1 + .label COLS = $d020 +.segment Code +main: { + .const a_border = 1 + .const a_bg = 2 + // struct Cols c = plus(a, { 2, 3 }) + lda #a_border + sta.z plus.a_border + lda #a_bg + sta.z plus.a_bg + lda #2 + sta.z plus.b_border + lda #3 + sta.z plus.b_bg + jsr plus + ldx.z plus.return_border + lda.z plus.return_bg + // *COLS = c + stx COLS + sta COLS+OFFSET_STRUCT_COLS_BG + // plus(c, a) + stx.z plus.a_border + sta.z plus.a_bg + lda #a_border + sta.z plus.b_border + lda #a_bg + sta.z plus.b_bg + jsr plus + // c = plus(c, a) + ldx.z plus.return_border + lda.z plus.return_bg + // *COLS = c + stx COLS + sta COLS+OFFSET_STRUCT_COLS_BG + // } + rts +} +// struct Cols plus(__zp(7) char a_border, __zp(6) char a_bg, __zp(3) char b_border, __zp(2) char b_bg) +plus: { + .label a_border = 7 + .label a_bg = 6 + .label b_border = 3 + .label b_bg = 2 + .label return_border = 4 + .label return_bg = 5 + // a.border+b.border + lda.z a_border + clc + adc.z b_border + tax + // a.bg+b.bg + lda.z a_bg + clc + adc.z b_bg + // return { a.border+b.border, a.bg+b.bg }; + stx.z return_border + sta.z return_bg + // } + rts +} diff --git a/src/test/ref/varcall-6.cfg b/src/test/ref/varcall-6.cfg new file mode 100644 index 000000000..d1c58c825 --- /dev/null +++ b/src/test/ref/varcall-6.cfg @@ -0,0 +1,36 @@ + +void main() +main: scope:[main] from + [0] plus::a_border = main::a_border + [1] plus::a_bg = main::a_bg + [2] plus::b_border = 2 + [3] plus::b_bg = 3 + [4] callexecute plus + [5] main::c_border#0 = plus::return_border + [6] main::c_bg#0 = plus::return_bg + [7] *((char *)COLS) = main::c_border#0 + [8] *((char *)COLS+OFFSET_STRUCT_COLS_BG) = main::c_bg#0 + [9] plus::a_border = main::c_border#0 + [10] plus::a_bg = main::c_bg#0 + [11] plus::b_border = main::a_border + [12] plus::b_bg = main::a_bg + [13] callexecute plus + [14] main::c_border#1 = plus::return_border + [15] main::c_bg#1 = plus::return_bg + [16] *((char *)COLS) = main::c_border#1 + [17] *((char *)COLS+OFFSET_STRUCT_COLS_BG) = main::c_bg#1 + to:main::@return +main::@return: scope:[main] from main + [18] return + to:@return + +__varcall struct Cols plus(char a_border , char a_bg , char b_border , char b_bg) +plus: scope:[plus] from + [19] plus::$0 = plus::a_border + plus::b_border + [20] plus::$1 = plus::a_bg + plus::b_bg + [21] plus::return_border = plus::$0 + [22] plus::return_bg = plus::$1 + to:plus::@return +plus::@return: scope:[plus] from plus + [23] return + to:@return diff --git a/src/test/ref/varcall-6.log b/src/test/ref/varcall-6.log new file mode 100644 index 000000000..c2f9e0b26 --- /dev/null +++ b/src/test/ref/varcall-6.log @@ -0,0 +1,541 @@ +Converting parameter in __varcall procedure to load/store plus::a +Converting parameter in __varcall procedure to load/store plus::b +Converting return in __varcall procedure to load/store plus::return +Constantified RValue plus::return = (struct Cols){ plus::$0, plus::$1 } +Added struct type cast to parameter value list main::c = call plus(main::a, (struct Cols){ 2, 3 }) +Eliminating unused variable with no statement plus::a +Eliminating unused variable with no statement plus::b +Eliminating unused variable with no statement main::$0 +Eliminating unused variable with no statement main::$1 +Calling convention __varcall adding prepare/execute/finalize for { main::c_border, main::c_bg } = call plus(main::a_border, main::a_bg, 2, 3) +Calling convention __varcall adding prepare/execute/finalize for { main::$1_border, main::$1_bg } = call plus(main::c_border, main::c_bg, main::a_border, main::a_bg) + +CONTROL FLOW GRAPH SSA + +__varcall struct Cols plus(char a_border , char a_bg , char b_border , char b_bg) +plus: scope:[plus] from + plus::$0 = plus::a_border + plus::b_border + plus::$1 = plus::a_bg + plus::b_bg + plus::return_border = plus::$0 + plus::return_bg = plus::$1 + plus::return = struct-unwound {plus::return_border, plus::return_bg} + to:plus::@return +plus::@return: scope:[plus] from plus + return + to:@return + +void main() +main: scope:[main] from __start + plus::a_border = main::a_border + plus::a_bg = main::a_bg + plus::b_border = 2 + plus::b_bg = 3 + callexecute plus + main::c_border#0 = plus::return_border + main::c_bg#0 = plus::return_bg + *((char *)COLS+OFFSET_STRUCT_COLS_BORDER) = main::c_border#0 + *((char *)COLS+OFFSET_STRUCT_COLS_BG) = main::c_bg#0 + plus::a_border = main::c_border#0 + plus::a_bg = main::c_bg#0 + plus::b_border = main::a_border + plus::b_bg = main::a_bg + callexecute plus + main::$1_border = plus::return_border + main::$1_bg = plus::return_bg + main::c_border#1 = main::$1_border + main::c_bg#1 = main::$1_bg + *((char *)COLS+OFFSET_STRUCT_COLS_BORDER) = main::c_border#1 + *((char *)COLS+OFFSET_STRUCT_COLS_BG) = main::c_bg#1 + to:main::@return +main::@return: scope:[main] from main + 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 +__constant struct Cols * const COLS = (struct Cols *)$d020 +__constant char OFFSET_STRUCT_COLS_BG = 1 +__constant char OFFSET_STRUCT_COLS_BORDER = 0 +void __start() +void main() +char main::$1_bg +char main::$1_border +__constant char main::a_bg = 2 +__constant char main::a_border = 1 +char main::c_bg +char main::c_bg#0 +char main::c_bg#1 +char main::c_border +char main::c_border#0 +char main::c_border#1 +__varcall struct Cols plus(char a_border , char a_bg , char b_border , char b_bg) +char plus::$0 +char plus::$1 +__loadstore char plus::a_bg +__loadstore char plus::a_border +__loadstore char plus::b_bg +__loadstore char plus::b_border +__loadstore struct Cols plus::return +__loadstore char plus::return_bg +__loadstore char plus::return_border + +Adding number conversion cast (unumber) 2 in plus::b_border = 2 +Adding number conversion cast (unumber) 3 in plus::b_bg = 3 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b_border = (unumber)2 +Inlining cast plus::b_bg = (unumber)3 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (struct Cols *) 53280 +Simplifying constant integer cast 2 +Simplifying constant integer cast 3 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 2 +Finalized unsigned number type (char) 3 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias candidate removed (volatile)plus::return_border = plus::$0 +Alias candidate removed (volatile)plus::return_bg = plus::$1 +Alias main::c_border#1 = main::$1_border +Alias main::c_bg#1 = main::$1_bg +Successful SSA optimization Pass2AliasElimination +Alias candidate removed (volatile)plus::return_border = plus::$0 +Alias candidate removed (volatile)plus::return_bg = plus::$1 +Simplifying expression containing zero (char *)COLS in [13] *((char *)COLS+OFFSET_STRUCT_COLS_BORDER) = main::c_border#0 +Simplifying expression containing zero (char *)COLS in [22] *((char *)COLS+OFFSET_STRUCT_COLS_BORDER) = main::c_border#1 +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused variable plus::return and assignment [4] plus::return = struct-unwound {plus::return_border, plus::return_bg} +Eliminating unused constant OFFSET_STRUCT_COLS_BORDER +Successful SSA optimization PassNEliminateUnusedVars +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 +Alias candidate removed (volatile)plus::return_border = plus::$0 +Alias candidate removed (volatile)plus::return_bg = plus::$1 +Alias candidate removed (volatile)plus::return_border = plus::$0 +Alias candidate removed (volatile)plus::return_bg = plus::$1 +Alias candidate removed (volatile)plus::return_border = plus::$0 +Alias candidate removed (volatile)plus::return_bg = plus::$1 +CALL GRAPH +Calls in [main] to plus:4 plus:13 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] plus::a_border = main::a_border + [1] plus::a_bg = main::a_bg + [2] plus::b_border = 2 + [3] plus::b_bg = 3 + [4] callexecute plus + [5] main::c_border#0 = plus::return_border + [6] main::c_bg#0 = plus::return_bg + [7] *((char *)COLS) = main::c_border#0 + [8] *((char *)COLS+OFFSET_STRUCT_COLS_BG) = main::c_bg#0 + [9] plus::a_border = main::c_border#0 + [10] plus::a_bg = main::c_bg#0 + [11] plus::b_border = main::a_border + [12] plus::b_bg = main::a_bg + [13] callexecute plus + [14] main::c_border#1 = plus::return_border + [15] main::c_bg#1 = plus::return_bg + [16] *((char *)COLS) = main::c_border#1 + [17] *((char *)COLS+OFFSET_STRUCT_COLS_BG) = main::c_bg#1 + to:main::@return +main::@return: scope:[main] from main + [18] return + to:@return + +__varcall struct Cols plus(char a_border , char a_bg , char b_border , char b_bg) +plus: scope:[plus] from + [19] plus::$0 = plus::a_border + plus::b_border + [20] plus::$1 = plus::a_bg + plus::b_bg + [21] plus::return_border = plus::$0 + [22] plus::return_bg = plus::$1 + to:plus::@return +plus::@return: scope:[plus] from plus + [23] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +char main::c_bg +char main::c_bg#0 // 1.5 +char main::c_bg#1 // 2.0 +char main::c_border +char main::c_border#0 // 1.5 +char main::c_border#1 // 2.0 +__varcall struct Cols plus(char a_border , char a_bg , char b_border , char b_bg) +char plus::$0 // 11.0 +char plus::$1 // 11.0 +__loadstore char plus::a_bg // 2.142857142857143 +__loadstore char plus::a_border // 1.875 +__loadstore char plus::b_bg // 5.0 +__loadstore char plus::b_border // 3.75 +__loadstore char plus::return_bg // 2.5 +__loadstore char plus::return_border // 3.0 + +Initial phi equivalence classes +Added variable plus::a_border to live range equivalence class [ plus::a_border ] +Added variable plus::a_bg to live range equivalence class [ plus::a_bg ] +Added variable plus::b_border to live range equivalence class [ plus::b_border ] +Added variable plus::b_bg to live range equivalence class [ plus::b_bg ] +Added variable main::c_border#0 to live range equivalence class [ main::c_border#0 ] +Added variable main::c_bg#0 to live range equivalence class [ main::c_bg#0 ] +Added variable main::c_border#1 to live range equivalence class [ main::c_border#1 ] +Added variable main::c_bg#1 to live range equivalence class [ main::c_bg#1 ] +Added variable plus::$0 to live range equivalence class [ plus::$0 ] +Added variable plus::$1 to live range equivalence class [ plus::$1 ] +Added variable plus::return_border to live range equivalence class [ plus::return_border ] +Added variable plus::return_bg to live range equivalence class [ plus::return_bg ] +Complete equivalence classes +[ plus::a_border ] +[ plus::a_bg ] +[ plus::b_border ] +[ plus::b_bg ] +[ main::c_border#0 ] +[ main::c_bg#0 ] +[ main::c_border#1 ] +[ main::c_bg#1 ] +[ plus::$0 ] +[ plus::$1 ] +[ plus::return_border ] +[ plus::return_bg ] +Allocated zp[1]:2 [ plus::$0 ] +Allocated zp[1]:3 [ plus::$1 ] +Allocated zp[1]:4 [ plus::b_bg ] +Allocated zp[1]:5 [ plus::b_border ] +Allocated zp[1]:6 [ plus::return_border ] +Allocated zp[1]:7 [ plus::return_bg ] +Allocated zp[1]:8 [ plus::a_bg ] +Allocated zp[1]:9 [ main::c_border#1 ] +Allocated zp[1]:10 [ main::c_bg#1 ] +Allocated zp[1]:11 [ plus::a_border ] +Allocated zp[1]:12 [ main::c_border#0 ] +Allocated zp[1]:13 [ main::c_bg#0 ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] plus::a_border = main::a_border [ plus::a_border ] ( [ plus::a_border ] { } ) always clobbers reg byte a +Statement [1] plus::a_bg = main::a_bg [ plus::a_border plus::a_bg ] ( [ plus::a_border plus::a_bg ] { } ) always clobbers reg byte a +Statement [2] plus::b_border = 2 [ plus::a_border plus::a_bg plus::b_border ] ( [ plus::a_border plus::a_bg plus::b_border ] { } ) always clobbers reg byte a +Statement [3] plus::b_bg = 3 [ plus::a_border plus::a_bg plus::b_border plus::b_bg ] ( [ plus::a_border plus::a_bg plus::b_border plus::b_bg ] { } ) always clobbers reg byte a +Statement [11] plus::b_border = main::a_border [ plus::a_border plus::a_bg plus::b_border ] ( [ plus::a_border plus::a_bg plus::b_border ] { } ) always clobbers reg byte a +Statement [12] plus::b_bg = main::a_bg [ plus::a_border plus::a_bg plus::b_border plus::b_bg ] ( [ plus::a_border plus::a_bg plus::b_border plus::b_bg ] { } ) always clobbers reg byte a +Statement [19] plus::$0 = plus::a_border + plus::b_border [ plus::a_bg plus::b_bg plus::$0 ] ( plus:4 [ plus::a_bg plus::b_bg plus::$0 ] { { main::c_border#0 = plus::a_border } { main::c_bg#0 = plus::a_bg } } plus:13 [ plus::a_bg plus::b_bg plus::$0 ] { { main::c_border#0 = plus::a_border } { main::c_bg#0 = plus::a_bg } } ) always clobbers reg byte a +Statement [20] plus::$1 = plus::a_bg + plus::b_bg [ plus::$0 plus::$1 ] ( plus:4 [ plus::$0 plus::$1 ] { { main::c_border#0 = plus::a_border } { main::c_bg#0 = plus::a_bg } } plus:13 [ plus::$0 plus::$1 ] { { main::c_border#0 = plus::a_border } { main::c_bg#0 = plus::a_bg } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:2 [ plus::$0 ] +Statement [0] plus::a_border = main::a_border [ plus::a_border ] ( [ plus::a_border ] { } ) always clobbers reg byte a +Statement [1] plus::a_bg = main::a_bg [ plus::a_border plus::a_bg ] ( [ plus::a_border plus::a_bg ] { } ) always clobbers reg byte a +Statement [2] plus::b_border = 2 [ plus::a_border plus::a_bg plus::b_border ] ( [ plus::a_border plus::a_bg plus::b_border ] { } ) always clobbers reg byte a +Statement [3] plus::b_bg = 3 [ plus::a_border plus::a_bg plus::b_border plus::b_bg ] ( [ plus::a_border plus::a_bg plus::b_border plus::b_bg ] { } ) always clobbers reg byte a +Statement [11] plus::b_border = main::a_border [ plus::a_border plus::a_bg plus::b_border ] ( [ plus::a_border plus::a_bg plus::b_border ] { } ) always clobbers reg byte a +Statement [12] plus::b_bg = main::a_bg [ plus::a_border plus::a_bg plus::b_border plus::b_bg ] ( [ plus::a_border plus::a_bg plus::b_border plus::b_bg ] { } ) always clobbers reg byte a +Statement [19] plus::$0 = plus::a_border + plus::b_border [ plus::a_bg plus::b_bg plus::$0 ] ( plus:4 [ plus::a_bg plus::b_bg plus::$0 ] { { main::c_border#0 = plus::a_border } { main::c_bg#0 = plus::a_bg } } plus:13 [ plus::a_bg plus::b_bg plus::$0 ] { { main::c_border#0 = plus::a_border } { main::c_bg#0 = plus::a_bg } } ) always clobbers reg byte a +Statement [20] plus::$1 = plus::a_bg + plus::b_bg [ plus::$0 plus::$1 ] ( plus:4 [ plus::$0 plus::$1 ] { { main::c_border#0 = plus::a_border } { main::c_bg#0 = plus::a_bg } } plus:13 [ plus::$0 plus::$1 ] { { main::c_border#0 = plus::a_border } { main::c_bg#0 = plus::a_bg } } ) always clobbers reg byte a +Potential registers zp[1]:11 [ plus::a_border ] : zp[1]:11 , +Potential registers zp[1]:8 [ plus::a_bg ] : zp[1]:8 , +Potential registers zp[1]:5 [ plus::b_border ] : zp[1]:5 , +Potential registers zp[1]:4 [ plus::b_bg ] : zp[1]:4 , +Potential registers zp[1]:12 [ main::c_border#0 ] : zp[1]:12 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:13 [ main::c_bg#0 ] : zp[1]:13 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ main::c_border#1 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:10 [ main::c_bg#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ plus::$0 ] : zp[1]:2 , reg byte x , reg byte y , +Potential registers zp[1]:3 [ plus::$1 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:6 [ plus::return_border ] : zp[1]:6 , +Potential registers zp[1]:7 [ plus::return_bg ] : zp[1]:7 , + +REGISTER UPLIFT SCOPES +Uplift Scope [plus] 11: zp[1]:2 [ plus::$0 ] 11: zp[1]:3 [ plus::$1 ] 5: zp[1]:4 [ plus::b_bg ] 3.75: zp[1]:5 [ plus::b_border ] 3: zp[1]:6 [ plus::return_border ] 2.5: zp[1]:7 [ plus::return_bg ] 2.14: zp[1]:8 [ plus::a_bg ] 1.88: zp[1]:11 [ plus::a_border ] +Uplift Scope [main] 2: zp[1]:9 [ main::c_border#1 ] 2: zp[1]:10 [ main::c_bg#1 ] 1.5: zp[1]:12 [ main::c_border#0 ] 1.5: zp[1]:13 [ main::c_bg#0 ] +Uplift Scope [Cols] +Uplift Scope [] + +Uplifting [plus] best 148 combination reg byte x [ plus::$0 ] reg byte a [ plus::$1 ] zp[1]:4 [ plus::b_bg ] zp[1]:5 [ plus::b_border ] zp[1]:6 [ plus::return_border ] zp[1]:7 [ plus::return_bg ] zp[1]:8 [ plus::a_bg ] zp[1]:11 [ plus::a_border ] +Uplifting [main] best 124 combination reg byte x [ main::c_border#1 ] zp[1]:10 [ main::c_bg#1 ] reg byte x [ main::c_border#0 ] reg byte a [ main::c_bg#0 ] +Limited combination testing to 100 combinations of 256 possible. +Uplifting [Cols] best 124 combination +Uplifting [] best 124 combination +Attempting to uplift remaining variables inzp[1]:4 [ plus::b_bg ] +Uplifting [plus] best 124 combination zp[1]:4 [ plus::b_bg ] +Attempting to uplift remaining variables inzp[1]:5 [ plus::b_border ] +Uplifting [plus] best 124 combination zp[1]:5 [ plus::b_border ] +Attempting to uplift remaining variables inzp[1]:6 [ plus::return_border ] +Uplifting [plus] best 124 combination zp[1]:6 [ plus::return_border ] +Attempting to uplift remaining variables inzp[1]:7 [ plus::return_bg ] +Uplifting [plus] best 124 combination zp[1]:7 [ plus::return_bg ] +Attempting to uplift remaining variables inzp[1]:8 [ plus::a_bg ] +Uplifting [plus] best 124 combination zp[1]:8 [ plus::a_bg ] +Attempting to uplift remaining variables inzp[1]:10 [ main::c_bg#1 ] +Uplifting [main] best 118 combination reg byte a [ main::c_bg#1 ] +Attempting to uplift remaining variables inzp[1]:11 [ plus::a_border ] +Uplifting [plus] best 118 combination zp[1]:11 [ plus::a_border ] +Allocated (was zp[1]:4) zp[1]:2 [ plus::b_bg ] +Allocated (was zp[1]:5) zp[1]:3 [ plus::b_border ] +Allocated (was zp[1]:6) zp[1]:4 [ plus::return_border ] +Allocated (was zp[1]:7) zp[1]:5 [ plus::return_bg ] +Allocated (was zp[1]:8) zp[1]:6 [ plus::a_bg ] +Allocated (was zp[1]:11) zp[1]:7 [ plus::a_border ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test __varcall calling convention +// Struct parameter & return value + // Upstart + // Commodore 64 PRG executable file +.file [name="varcall-6.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .const OFFSET_STRUCT_COLS_BG = 1 + .label COLS = $d020 +.segment Code + // main +main: { + .const a_border = 1 + .const a_bg = 2 + // [0] plus::a_border = main::a_border -- vbuz1=vbuc1 + lda #a_border + sta.z plus.a_border + // [1] plus::a_bg = main::a_bg -- vbuz1=vbuc1 + lda #a_bg + sta.z plus.a_bg + // [2] plus::b_border = 2 -- vbuz1=vbuc1 + lda #2 + sta.z plus.b_border + // [3] plus::b_bg = 3 -- vbuz1=vbuc1 + lda #3 + sta.z plus.b_bg + // [4] callexecute plus -- call_vprc1 + jsr plus + // [5] main::c_border#0 = plus::return_border -- vbuxx=vbuz1 + ldx.z plus.return_border + // [6] main::c_bg#0 = plus::return_bg -- vbuaa=vbuz1 + lda.z plus.return_bg + // [7] *((char *)COLS) = main::c_border#0 -- _deref_pbuc1=vbuxx + stx COLS + // [8] *((char *)COLS+OFFSET_STRUCT_COLS_BG) = main::c_bg#0 -- _deref_pbuc1=vbuaa + sta COLS+OFFSET_STRUCT_COLS_BG + // [9] plus::a_border = main::c_border#0 -- vbuz1=vbuxx + stx.z plus.a_border + // [10] plus::a_bg = main::c_bg#0 -- vbuz1=vbuaa + sta.z plus.a_bg + // [11] plus::b_border = main::a_border -- vbuz1=vbuc1 + lda #a_border + sta.z plus.b_border + // [12] plus::b_bg = main::a_bg -- vbuz1=vbuc1 + lda #a_bg + sta.z plus.b_bg + // [13] callexecute plus -- call_vprc1 + jsr plus + // [14] main::c_border#1 = plus::return_border -- vbuxx=vbuz1 + ldx.z plus.return_border + // [15] main::c_bg#1 = plus::return_bg -- vbuaa=vbuz1 + lda.z plus.return_bg + // [16] *((char *)COLS) = main::c_border#1 -- _deref_pbuc1=vbuxx + stx COLS + // [17] *((char *)COLS+OFFSET_STRUCT_COLS_BG) = main::c_bg#1 -- _deref_pbuc1=vbuaa + sta COLS+OFFSET_STRUCT_COLS_BG + jmp __breturn + // main::@return + __breturn: + // [18] return + rts +} + // plus +// struct Cols plus(__zp(7) char a_border, __zp(6) char a_bg, __zp(3) char b_border, __zp(2) char b_bg) +plus: { + .label a_border = 7 + .label a_bg = 6 + .label b_border = 3 + .label b_bg = 2 + .label return_border = 4 + .label return_bg = 5 + // [19] plus::$0 = plus::a_border + plus::b_border -- vbuxx=vbuz1_plus_vbuz2 + lda.z a_border + clc + adc.z b_border + tax + // [20] plus::$1 = plus::a_bg + plus::b_bg -- vbuaa=vbuz1_plus_vbuz2 + lda.z a_bg + clc + adc.z b_bg + // [21] plus::return_border = plus::$0 -- vbuz1=vbuxx + stx.z return_border + // [22] plus::return_bg = plus::$1 -- vbuz1=vbuaa + sta.z return_bg + jmp __breturn + // plus::@return + __breturn: + // [23] 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 +__constant struct Cols * const COLS = (struct Cols *) 53280 +__constant char OFFSET_STRUCT_COLS_BG = 1 +void main() +__constant char main::a_bg = 2 +__constant char main::a_border = 1 +char main::c_bg +char main::c_bg#0 // reg byte a 1.5 +char main::c_bg#1 // reg byte a 2.0 +char main::c_border +char main::c_border#0 // reg byte x 1.5 +char main::c_border#1 // reg byte x 2.0 +__varcall struct Cols plus(char a_border , char a_bg , char b_border , char b_bg) +char plus::$0 // reg byte x 11.0 +char plus::$1 // reg byte a 11.0 +__loadstore char plus::a_bg // zp[1]:6 2.142857142857143 +__loadstore char plus::a_border // zp[1]:7 1.875 +__loadstore char plus::b_bg // zp[1]:2 5.0 +__loadstore char plus::b_border // zp[1]:3 3.75 +__loadstore char plus::return_bg // zp[1]:5 2.5 +__loadstore char plus::return_border // zp[1]:4 3.0 + +zp[1]:7 [ plus::a_border ] +zp[1]:6 [ plus::a_bg ] +zp[1]:3 [ plus::b_border ] +zp[1]:2 [ plus::b_bg ] +reg byte x [ main::c_border#0 ] +reg byte a [ main::c_bg#0 ] +reg byte x [ main::c_border#1 ] +reg byte a [ main::c_bg#1 ] +reg byte x [ plus::$0 ] +reg byte a [ plus::$1 ] +zp[1]:4 [ plus::return_border ] +zp[1]:5 [ plus::return_bg ] + + +FINAL ASSEMBLER +Score: 112 + + // File Comments +// Test __varcall calling convention +// Struct parameter & return value + // Upstart + // Commodore 64 PRG executable file +.file [name="varcall-6.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .const OFFSET_STRUCT_COLS_BG = 1 + .label COLS = $d020 +.segment Code + // main +main: { + .const a_border = 1 + .const a_bg = 2 + // struct Cols c = plus(a, { 2, 3 }) + // [0] plus::a_border = main::a_border -- vbuz1=vbuc1 + lda #a_border + sta.z plus.a_border + // [1] plus::a_bg = main::a_bg -- vbuz1=vbuc1 + lda #a_bg + sta.z plus.a_bg + // [2] plus::b_border = 2 -- vbuz1=vbuc1 + lda #2 + sta.z plus.b_border + // [3] plus::b_bg = 3 -- vbuz1=vbuc1 + lda #3 + sta.z plus.b_bg + // [4] callexecute plus -- call_vprc1 + jsr plus + // [5] main::c_border#0 = plus::return_border -- vbuxx=vbuz1 + ldx.z plus.return_border + // [6] main::c_bg#0 = plus::return_bg -- vbuaa=vbuz1 + lda.z plus.return_bg + // *COLS = c + // [7] *((char *)COLS) = main::c_border#0 -- _deref_pbuc1=vbuxx + stx COLS + // [8] *((char *)COLS+OFFSET_STRUCT_COLS_BG) = main::c_bg#0 -- _deref_pbuc1=vbuaa + sta COLS+OFFSET_STRUCT_COLS_BG + // plus(c, a) + // [9] plus::a_border = main::c_border#0 -- vbuz1=vbuxx + stx.z plus.a_border + // [10] plus::a_bg = main::c_bg#0 -- vbuz1=vbuaa + sta.z plus.a_bg + // [11] plus::b_border = main::a_border -- vbuz1=vbuc1 + lda #a_border + sta.z plus.b_border + // [12] plus::b_bg = main::a_bg -- vbuz1=vbuc1 + lda #a_bg + sta.z plus.b_bg + // [13] callexecute plus -- call_vprc1 + jsr plus + // c = plus(c, a) + // [14] main::c_border#1 = plus::return_border -- vbuxx=vbuz1 + ldx.z plus.return_border + // [15] main::c_bg#1 = plus::return_bg -- vbuaa=vbuz1 + lda.z plus.return_bg + // *COLS = c + // [16] *((char *)COLS) = main::c_border#1 -- _deref_pbuc1=vbuxx + stx COLS + // [17] *((char *)COLS+OFFSET_STRUCT_COLS_BG) = main::c_bg#1 -- _deref_pbuc1=vbuaa + sta COLS+OFFSET_STRUCT_COLS_BG + // main::@return + // } + // [18] return + rts +} + // plus +// struct Cols plus(__zp(7) char a_border, __zp(6) char a_bg, __zp(3) char b_border, __zp(2) char b_bg) +plus: { + .label a_border = 7 + .label a_bg = 6 + .label b_border = 3 + .label b_bg = 2 + .label return_border = 4 + .label return_bg = 5 + // a.border+b.border + // [19] plus::$0 = plus::a_border + plus::b_border -- vbuxx=vbuz1_plus_vbuz2 + lda.z a_border + clc + adc.z b_border + tax + // a.bg+b.bg + // [20] plus::$1 = plus::a_bg + plus::b_bg -- vbuaa=vbuz1_plus_vbuz2 + lda.z a_bg + clc + adc.z b_bg + // return { a.border+b.border, a.bg+b.bg }; + // [21] plus::return_border = plus::$0 -- vbuz1=vbuxx + stx.z return_border + // [22] plus::return_bg = plus::$1 -- vbuz1=vbuaa + sta.z return_bg + // plus::@return + // } + // [23] return + rts +} + // File Data + diff --git a/src/test/ref/varcall-6.sym b/src/test/ref/varcall-6.sym new file mode 100644 index 000000000..e37f86116 --- /dev/null +++ b/src/test/ref/varcall-6.sym @@ -0,0 +1,33 @@ +__constant struct Cols * const COLS = (struct Cols *) 53280 +__constant char OFFSET_STRUCT_COLS_BG = 1 +void main() +__constant char main::a_bg = 2 +__constant char main::a_border = 1 +char main::c_bg +char main::c_bg#0 // reg byte a 1.5 +char main::c_bg#1 // reg byte a 2.0 +char main::c_border +char main::c_border#0 // reg byte x 1.5 +char main::c_border#1 // reg byte x 2.0 +__varcall struct Cols plus(char a_border , char a_bg , char b_border , char b_bg) +char plus::$0 // reg byte x 11.0 +char plus::$1 // reg byte a 11.0 +__loadstore char plus::a_bg // zp[1]:6 2.142857142857143 +__loadstore char plus::a_border // zp[1]:7 1.875 +__loadstore char plus::b_bg // zp[1]:2 5.0 +__loadstore char plus::b_border // zp[1]:3 3.75 +__loadstore char plus::return_bg // zp[1]:5 2.5 +__loadstore char plus::return_border // zp[1]:4 3.0 + +zp[1]:7 [ plus::a_border ] +zp[1]:6 [ plus::a_bg ] +zp[1]:3 [ plus::b_border ] +zp[1]:2 [ plus::b_bg ] +reg byte x [ main::c_border#0 ] +reg byte a [ main::c_bg#0 ] +reg byte x [ main::c_border#1 ] +reg byte a [ main::c_bg#1 ] +reg byte x [ plus::$0 ] +reg byte a [ plus::$1 ] +zp[1]:4 [ plus::return_border ] +zp[1]:5 [ plus::return_bg ] From 594e8d688c11c0a892c5ab7a32c94ad8757c6f2c Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 2 Apr 2023 12:18:33 +0200 Subject: [PATCH 20/66] Working on #372 varcall. Pointers to struct working. --- ...vbuyy_lt_pbuz1_derefidx_vbuyy_then_la1.asm | 3 + .../kickc/test/TestProgramsFast.java | 8 +- src/test/kc/varcall-8.c | 28 + src/test/ref/varcall-8.asm | 102 ++++ src/test/ref/varcall-8.cfg | 34 ++ src/test/ref/varcall-8.log | 539 ++++++++++++++++++ src/test/ref/varcall-8.sym | 23 + 7 files changed, 733 insertions(+), 4 deletions(-) create mode 100644 src/main/fragment/mos6502-common/pbuz2_derefidx_vbuyy_lt_pbuz1_derefidx_vbuyy_then_la1.asm create mode 100644 src/test/kc/varcall-8.c create mode 100644 src/test/ref/varcall-8.asm create mode 100644 src/test/ref/varcall-8.cfg create mode 100644 src/test/ref/varcall-8.log create mode 100644 src/test/ref/varcall-8.sym diff --git a/src/main/fragment/mos6502-common/pbuz2_derefidx_vbuyy_lt_pbuz1_derefidx_vbuyy_then_la1.asm b/src/main/fragment/mos6502-common/pbuz2_derefidx_vbuyy_lt_pbuz1_derefidx_vbuyy_then_la1.asm new file mode 100644 index 000000000..298782bba --- /dev/null +++ b/src/main/fragment/mos6502-common/pbuz2_derefidx_vbuyy_lt_pbuz1_derefidx_vbuyy_then_la1.asm @@ -0,0 +1,3 @@ +lda ({z1}),y +cmp ({z2}),y +bcc {la1} diff --git a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java index 7b6411e2d..59c627c82 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java +++ b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java @@ -374,27 +374,27 @@ public class TestProgramsFast extends TestPrograms { public void testStructUnwinding2() throws IOException { compileAndCompare("struct-unwinding-2.c"); } - @Test public void testStructUnwinding1() throws IOException { compileAndCompare("struct-unwinding-1.c"); } + @Test + public void testVarCall8() throws IOException { + compileAndCompare("varcall-8.c"); + } @Test public void testVarCall7() throws IOException { compileAndCompare("varcall-7.c"); } - @Test public void testVarCall6() throws IOException { compileAndCompare("varcall-6.c"); } - @Test public void testVarCall5() throws IOException { compileAndCompare("varcall-5.c"); } - @Test public void testVarCall4() throws IOException { compileAndCompare("varcall-4.c"); diff --git a/src/test/kc/varcall-8.c b/src/test/kc/varcall-8.c new file mode 100644 index 000000000..be744f1b3 --- /dev/null +++ b/src/test/kc/varcall-8.c @@ -0,0 +1,28 @@ +// Test __varcall calling convention +// Pointer to Struct parameter & return value + +struct Cols { + char border; + char bg; +}; + +struct Cols * const COLS = (struct Cols *)0xd020; + +__varcall struct Cols * min(struct Cols * a, struct Cols * b) { + if(a->bg < b->bg) + return a; + else + return b; + +} + + +void main() { + struct Cols a = { 1, 7 }; + struct Cols b = { 2, 6 }; + struct Cols c = { 3, 5 }; + struct Cols *m = min(&a,&b); + *COLS = *m; + m = min(m,&c); + *COLS = *m; +} diff --git a/src/test/ref/varcall-8.asm b/src/test/ref/varcall-8.asm new file mode 100644 index 000000000..a2f170325 --- /dev/null +++ b/src/test/ref/varcall-8.asm @@ -0,0 +1,102 @@ +// Test __varcall calling convention +// Pointer to Struct parameter & return value + // Commodore 64 PRG executable file +.file [name="varcall-8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + .const SIZEOF_STRUCT_COLS = 2 + .const OFFSET_STRUCT_COLS_BG = 1 + .label COLS = $d020 +.segment Code +main: { + .label a = 6 + .label b = 8 + .label c = $a + .label m = 2 + // struct Cols a = { 1, 7 } + ldy #SIZEOF_STRUCT_COLS + !: + lda __0-1,y + sta a-1,y + dey + bne !- + // struct Cols b = { 2, 6 } + ldy #SIZEOF_STRUCT_COLS + !: + lda __1-1,y + sta b-1,y + dey + bne !- + // struct Cols c = { 3, 5 } + ldy #SIZEOF_STRUCT_COLS + !: + lda __2-1,y + sta c-1,y + dey + bne !- + // struct Cols *m = min(&a,&b) + lda #a + sta.z min.a+1 + lda #b + sta.z min.b+1 + jsr min + // *COLS = *m + ldx #SIZEOF_STRUCT_COLS + ldy #0 + !: + lda (m),y + sta COLS,y + iny + dex + bne !- + // min(m,&c) + lda #c + sta.z min.b+1 + jsr min + // m = min(m,&c) + // *COLS = *m + ldx #SIZEOF_STRUCT_COLS + ldy #0 + !: + lda (m),y + sta COLS,y + iny + dex + bne !- + // } + rts +} +// __zp(2) struct Cols * min(__zp(2) struct Cols *a, __zp(4) struct Cols *b) +min: { + .label a = 2 + .label b = 4 + .label return = 2 + // if(a->bg < b->bg) + ldy #OFFSET_STRUCT_COLS_BG + lda (b),y + cmp (a),y + bcc __breturn + // return b; + lda.z b + sta.z return + lda.z b+1 + sta.z return+1 + __breturn: + // } + rts + // return a; +} +.segment Data + __0: .byte 1, 7 + __1: .byte 2, 6 + __2: .byte 3, 5 diff --git a/src/test/ref/varcall-8.cfg b/src/test/ref/varcall-8.cfg new file mode 100644 index 000000000..b1baa09cd --- /dev/null +++ b/src/test/ref/varcall-8.cfg @@ -0,0 +1,34 @@ + +void main() +main: scope:[main] from + [0] *(&main::a) = memcpy(*(&$0), struct Cols, SIZEOF_STRUCT_COLS) + [1] *(&main::b) = memcpy(*(&$1), struct Cols, SIZEOF_STRUCT_COLS) + [2] *(&main::c) = memcpy(*(&$2), struct Cols, SIZEOF_STRUCT_COLS) + [3] min::a = &main::a + [4] min::b = &main::b + [5] callexecute min + [6] main::m#0 = min::return + [7] *COLS = memcpy(*main::m#0, struct Cols, SIZEOF_STRUCT_COLS) + [8] min::a = main::m#0 + [9] min::b = &main::c + [10] callexecute min + [11] main::m#1 = min::return + [12] *COLS = memcpy(*main::m#1, struct Cols, SIZEOF_STRUCT_COLS) + to:main::@return +main::@return: scope:[main] from main + [13] return + to:@return + +__varcall struct Cols * min(struct Cols *a , struct Cols *b) +min: scope:[min] from + [14] if(((char *)min::a)[OFFSET_STRUCT_COLS_BG]<((char *)min::b)[OFFSET_STRUCT_COLS_BG]) goto min::@1 + to:min::@2 +min::@2: scope:[min] from min + [15] min::return = min::b + to:min::@return +min::@return: scope:[min] from min::@1 min::@2 + [16] return + to:@return +min::@1: scope:[min] from min + [17] min::return = min::a + to:min::@return diff --git a/src/test/ref/varcall-8.log b/src/test/ref/varcall-8.log new file mode 100644 index 000000000..29ecb72f8 --- /dev/null +++ b/src/test/ref/varcall-8.log @@ -0,0 +1,539 @@ +Setting struct to load/store in variable affected by address-of main::m = call min(&main::a, &main::b) +Setting struct to load/store in variable affected by address-of main::m = call min(&main::a, &main::b) +Setting struct to load/store in variable affected by address-of main::$1 = call min(main::m, &main::c) +Converting parameter in __varcall procedure to load/store min::a +Converting parameter in __varcall procedure to load/store min::b +Converting return in __varcall procedure to load/store min::return +Eliminating unused variable with no statement main::$0 +Calling convention __varcall adding prepare/execute/finalize for main::m = call min(&main::a, &main::b) +Calling convention __varcall adding prepare/execute/finalize for main::$1 = call min(main::m, &main::c) +Calling convention VAR_CALL adding return value assignment main::m = min::return +Calling convention VAR_CALL adding return value assignment main::$1 = min::return +Removing C-classic struct-unwound assignment main::a = struct-unwound {*(&main::a)} +Removing C-classic struct-unwound assignment main::b = struct-unwound {*(&main::b)} +Removing C-classic struct-unwound assignment main::c = struct-unwound {*(&main::c)} + +CONTROL FLOW GRAPH SSA + +__varcall struct Cols * min(struct Cols *a , struct Cols *b) +min: scope:[min] from + min::$3 = (char *)min::a + min::$1 = min::$3 + OFFSET_STRUCT_COLS_BG + min::$4 = (char *)min::b + min::$2 = min::$4 + OFFSET_STRUCT_COLS_BG + min::$0 = *min::$1 < *min::$2 + if(min::$0) goto min::@1 + to:min::@2 +min::@1: scope:[min] from min + min::return = min::a + to:min::@return +min::@2: scope:[min] from min + min::return = min::b + to:min::@return +min::@return: scope:[min] from min::@1 min::@2 + return + to:@return + +void main() +main: scope:[main] from __start + *(&main::a) = memcpy(*(&$0), struct Cols, SIZEOF_STRUCT_COLS) + *(&main::b) = memcpy(*(&$1), struct Cols, SIZEOF_STRUCT_COLS) + *(&main::c) = memcpy(*(&$2), struct Cols, SIZEOF_STRUCT_COLS) + min::a = &main::a + min::b = &main::b + callexecute min + main::m#0 = min::return + *COLS = memcpy(*main::m#0, struct Cols, SIZEOF_STRUCT_COLS) + min::a = main::m#0 + min::b = &main::c + callexecute min + main::$1 = min::return + main::m#1 = main::$1 + *COLS = memcpy(*main::m#1, struct Cols, SIZEOF_STRUCT_COLS) + to:main::@return +main::@return: scope:[main] from main + 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 +__constant struct Cols $0 = { border: 1, bg: 7 } +__constant struct Cols $1 = { border: 2, bg: 6 } +__constant struct Cols $2 = { border: 3, bg: 5 } +__constant struct Cols * const COLS = (struct Cols *)$d020 +__constant char OFFSET_STRUCT_COLS_BG = 1 +__constant char SIZEOF_STRUCT_COLS = 2 +void __start() +void main() +struct Cols *main::$1 +__loadstore volatile struct Cols main::a +__loadstore volatile struct Cols main::b +__loadstore volatile struct Cols main::c +struct Cols *main::m +struct Cols *main::m#0 +struct Cols *main::m#1 +__varcall struct Cols * min(struct Cols *a , struct Cols *b) +bool min::$0 +char *min::$1 +char *min::$2 +char *min::$3 +char *min::$4 +__loadstore struct Cols *min::a +__loadstore struct Cols *min::b +__loadstore struct Cols *min::return + +Simplifying constant pointer cast (struct Cols *) 53280 +Successful SSA optimization PassNCastSimplification +Alias main::m#1 = main::$1 +Successful SSA optimization Pass2AliasElimination +Simple Condition min::$0 [5] if(*min::$1<*min::$2) goto min::@1 +Successful SSA optimization Pass2ConditionalJumpSimplification +Converting *(pointer+n) to pointer[n] [5] if(*min::$1<*min::$2) goto min::@1 -- min::$3[OFFSET_STRUCT_COLS_BG] +Converting *(pointer+n) to pointer[n] [5] if(min::$3[OFFSET_STRUCT_COLS_BG]<*min::$2) goto min::@1 -- min::$4[OFFSET_STRUCT_COLS_BG] +Successful SSA optimization Pass2InlineDerefIdx +Eliminating unused variable min::$1 and assignment [1] min::$1 = min::$3 + OFFSET_STRUCT_COLS_BG +Eliminating unused variable min::$2 and assignment [3] min::$2 = min::$4 + OFFSET_STRUCT_COLS_BG +Successful SSA optimization PassNEliminateUnusedVars +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 +Inlining Noop Cast [0] min::$3 = (char *)min::a keeping min::a +Inlining Noop Cast [1] min::$4 = (char *)min::b keeping min::b +Successful SSA optimization Pass2NopCastInlining +CALL GRAPH +Calls in [main] to min:5 min:10 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] *(&main::a) = memcpy(*(&$0), struct Cols, SIZEOF_STRUCT_COLS) + [1] *(&main::b) = memcpy(*(&$1), struct Cols, SIZEOF_STRUCT_COLS) + [2] *(&main::c) = memcpy(*(&$2), struct Cols, SIZEOF_STRUCT_COLS) + [3] min::a = &main::a + [4] min::b = &main::b + [5] callexecute min + [6] main::m#0 = min::return + [7] *COLS = memcpy(*main::m#0, struct Cols, SIZEOF_STRUCT_COLS) + [8] min::a = main::m#0 + [9] min::b = &main::c + [10] callexecute min + [11] main::m#1 = min::return + [12] *COLS = memcpy(*main::m#1, struct Cols, SIZEOF_STRUCT_COLS) + to:main::@return +main::@return: scope:[main] from main + [13] return + to:@return + +__varcall struct Cols * min(struct Cols *a , struct Cols *b) +min: scope:[min] from + [14] if(((char *)min::a)[OFFSET_STRUCT_COLS_BG]<((char *)min::b)[OFFSET_STRUCT_COLS_BG]) goto min::@1 + to:min::@2 +min::@2: scope:[min] from min + [15] min::return = min::b + to:min::@return +min::@return: scope:[min] from min::@1 min::@2 + [16] return + to:@return +min::@1: scope:[min] from min + [17] min::return = min::a + to:min::@return + + +VARIABLE REGISTER WEIGHTS +void main() +__loadstore volatile struct Cols main::a +__loadstore volatile struct Cols main::b +__loadstore volatile struct Cols main::c +struct Cols *main::m +struct Cols *main::m#0 // 2.0 +struct Cols *main::m#1 // 2.0 +__varcall struct Cols * min(struct Cols *a , struct Cols *b) +__loadstore struct Cols *min::a // 3.0 +__loadstore struct Cols *min::b // 5.0 +__loadstore struct Cols *min::return // 5.2 + +Initial phi equivalence classes +Added variable min::a to live range equivalence class [ min::a ] +Added variable min::b to live range equivalence class [ min::b ] +Added variable main::m#0 to live range equivalence class [ main::m#0 ] +Added variable main::m#1 to live range equivalence class [ main::m#1 ] +Added variable min::return to live range equivalence class [ min::return ] +Added variable main::a to live range equivalence class [ main::a ] +Added variable main::b to live range equivalence class [ main::b ] +Added variable main::c to live range equivalence class [ main::c ] +Complete equivalence classes +[ min::a ] +[ min::b ] +[ main::m#0 ] +[ main::m#1 ] +[ min::return ] +[ main::a ] +[ main::b ] +[ main::c ] +Allocated zp[2]:2 [ min::return ] +Allocated zp[2]:4 [ min::b ] +Allocated zp[2]:6 [ min::a ] +Allocated zp[2]:8 [ main::m#0 ] +Allocated zp[2]:10 [ main::m#1 ] +Allocated zp[2]:12 [ main::a ] +Allocated zp[2]:14 [ main::b ] +Allocated zp[2]:16 [ main::c ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] *(&main::a) = memcpy(*(&$0), struct Cols, SIZEOF_STRUCT_COLS) [ main::b main::c main::a ] ( [ main::b main::c main::a ] { } ) always clobbers reg byte a reg byte y +Statement [1] *(&main::b) = memcpy(*(&$1), struct Cols, SIZEOF_STRUCT_COLS) [ main::b main::c main::a ] ( [ main::b main::c main::a ] { } ) always clobbers reg byte a reg byte y +Statement [2] *(&main::c) = memcpy(*(&$2), struct Cols, SIZEOF_STRUCT_COLS) [ main::b main::c main::a ] ( [ main::b main::c main::a ] { } ) always clobbers reg byte a reg byte y +Statement [3] min::a = &main::a [ main::b main::c min::a ] ( [ main::b main::c min::a ] { } ) always clobbers reg byte a +Statement [4] min::b = &main::b [ main::c min::a min::b ] ( [ main::c min::a min::b ] { } ) always clobbers reg byte a +Statement [6] main::m#0 = min::return [ main::c main::m#0 ] ( [ main::c main::m#0 ] { } ) always clobbers reg byte a +Statement [7] *COLS = memcpy(*main::m#0, struct Cols, SIZEOF_STRUCT_COLS) [ main::c main::m#0 ] ( [ main::c main::m#0 ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [8] min::a = main::m#0 [ main::c min::a ] ( [ main::c min::a ] { } ) always clobbers reg byte a +Statement [9] min::b = &main::c [ min::a min::b ] ( [ min::a min::b ] { } ) always clobbers reg byte a +Statement [11] main::m#1 = min::return [ main::m#1 ] ( [ main::m#1 ] { } ) always clobbers reg byte a +Statement [12] *COLS = memcpy(*main::m#1, struct Cols, SIZEOF_STRUCT_COLS) [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [14] if(((char *)min::a)[OFFSET_STRUCT_COLS_BG]<((char *)min::b)[OFFSET_STRUCT_COLS_BG]) goto min::@1 [ min::a min::b ] ( min:5 [ main::c min::a min::b ] { { main::m#0 = min::a } } min:10 [ min::a min::b ] { { main::m#0 = min::a } } ) always clobbers reg byte a reg byte y +Statement [15] min::return = min::b [ min::return ] ( min:5 [ main::c min::return ] { { main::m#0 = min::a } } min:10 [ min::return ] { { main::m#0 = min::a } } ) always clobbers reg byte a +Statement [17] min::return = min::a [ min::return ] ( min:5 [ main::c min::return ] { { main::m#0 = min::a } } min:10 [ min::return ] { { main::m#0 = min::a } } ) always clobbers reg byte a +Potential registers zp[2]:6 [ min::a ] : zp[2]:6 , +Potential registers zp[2]:4 [ min::b ] : zp[2]:4 , +Potential registers zp[2]:8 [ main::m#0 ] : zp[2]:8 , +Potential registers zp[2]:10 [ main::m#1 ] : zp[2]:10 , +Potential registers zp[2]:2 [ min::return ] : zp[2]:2 , +Potential registers zp[2]:12 [ main::a ] : zp[2]:12 , +Potential registers zp[2]:14 [ main::b ] : zp[2]:14 , +Potential registers zp[2]:16 [ main::c ] : zp[2]:16 , + +REGISTER UPLIFT SCOPES +Uplift Scope [min] 5.2: zp[2]:2 [ min::return ] 5: zp[2]:4 [ min::b ] 3: zp[2]:6 [ min::a ] +Uplift Scope [main] 2: zp[2]:8 [ main::m#0 ] 2: zp[2]:10 [ main::m#1 ] 0: zp[2]:12 [ main::a ] 0: zp[2]:14 [ main::b ] 0: zp[2]:16 [ main::c ] +Uplift Scope [Cols] +Uplift Scope [] + +Uplifting [min] best 231 combination zp[2]:2 [ min::return ] zp[2]:4 [ min::b ] zp[2]:6 [ min::a ] +Uplifting [main] best 231 combination zp[2]:8 [ main::m#0 ] zp[2]:10 [ main::m#1 ] zp[2]:12 [ main::a ] zp[2]:14 [ main::b ] zp[2]:16 [ main::c ] +Uplifting [Cols] best 231 combination +Uplifting [] best 231 combination +Coalescing zero page register [ zp[2]:6 [ min::a ] ] with [ zp[2]:8 [ main::m#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:6 [ min::a main::m#0 ] ] with [ zp[2]:2 [ min::return ] ] - score: 1 +Coalescing zero page register [ zp[2]:6 [ min::a main::m#0 min::return ] ] with [ zp[2]:10 [ main::m#1 ] ] - score: 1 +Allocated (was zp[2]:6) zp[2]:2 [ min::a main::m#0 min::return main::m#1 ] +Allocated (was zp[2]:12) zp[2]:6 [ main::a ] +Allocated (was zp[2]:14) zp[2]:8 [ main::b ] +Allocated (was zp[2]:16) zp[2]:10 [ main::c ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test __varcall calling convention +// Pointer to Struct parameter & return value + // Upstart + // Commodore 64 PRG executable file +.file [name="varcall-8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .const SIZEOF_STRUCT_COLS = 2 + .const OFFSET_STRUCT_COLS_BG = 1 + .label COLS = $d020 +.segment Code + // main +main: { + .label a = 6 + .label b = 8 + .label c = $a + .label m = 2 + // [0] *(&main::a) = memcpy(*(&$0), struct Cols, SIZEOF_STRUCT_COLS) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_COLS + !: + lda __0-1,y + sta a-1,y + dey + bne !- + // [1] *(&main::b) = memcpy(*(&$1), struct Cols, SIZEOF_STRUCT_COLS) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_COLS + !: + lda __1-1,y + sta b-1,y + dey + bne !- + // [2] *(&main::c) = memcpy(*(&$2), struct Cols, SIZEOF_STRUCT_COLS) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_COLS + !: + lda __2-1,y + sta c-1,y + dey + bne !- + // [3] min::a = &main::a -- pssz1=pssc1 + lda #a + sta.z min.a+1 + // [4] min::b = &main::b -- pssz1=pssc1 + lda #b + sta.z min.b+1 + // [5] callexecute min -- call_vprc1 + jsr min + // [6] main::m#0 = min::return + // [7] *COLS = memcpy(*main::m#0, struct Cols, SIZEOF_STRUCT_COLS) -- _deref_pssc1=_deref_pssz1_memcpy_vbuc2 + ldx #SIZEOF_STRUCT_COLS + ldy #0 + !: + lda (m),y + sta COLS,y + iny + dex + bne !- + // [8] min::a = main::m#0 + // [9] min::b = &main::c -- pssz1=pssc1 + lda #c + sta.z min.b+1 + // [10] callexecute min -- call_vprc1 + jsr min + // [11] main::m#1 = min::return + // [12] *COLS = memcpy(*main::m#1, struct Cols, SIZEOF_STRUCT_COLS) -- _deref_pssc1=_deref_pssz1_memcpy_vbuc2 + ldx #SIZEOF_STRUCT_COLS + ldy #0 + !: + lda (m),y + sta COLS,y + iny + dex + bne !- + jmp __breturn + // main::@return + __breturn: + // [13] return + rts +} + // min +// __zp(2) struct Cols * min(__zp(2) struct Cols *a, __zp(4) struct Cols *b) +min: { + .label a = 2 + .label b = 4 + .label return = 2 + // [14] if(((char *)min::a)[OFFSET_STRUCT_COLS_BG]<((char *)min::b)[OFFSET_STRUCT_COLS_BG]) goto min::@1 -- pbuz1_derefidx_vbuc1_lt_pbuz2_derefidx_vbuc1_then_la1 + ldy #OFFSET_STRUCT_COLS_BG + lda (b),y + cmp (a),y + bcc __b1 + jmp __b2 + // min::@2 + __b2: + // [15] min::return = min::b -- pssz1=pssz2 + lda.z b + sta.z return + lda.z b+1 + sta.z return+1 + jmp __breturn + // min::@return + __breturn: + // [16] return + rts + // min::@1 + __b1: + // [17] min::return = min::a + jmp __breturn +} + // File Data +.segment Data + __0: .byte 1, 7 + __1: .byte 2, 6 + __2: .byte 3, 5 + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __breturn +Removing instruction jmp __b2 +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __breturn: +Removing instruction __b2: +Succesful ASM optimization Pass5UnusedLabelElimination +Skipping double jump to __breturn in bcc __b1 +Replacing jump to rts with rts in jmp __breturn +Succesful ASM optimization Pass5DoubleJumpElimination +Removing instruction __b1: +Succesful ASM optimization Pass5UnusedLabelElimination +Removing unreachable instruction rts +Succesful ASM optimization Pass5UnreachableCodeElimination + +FINAL SYMBOL TABLE +__constant struct Cols $0 = { border: 1, bg: 7 } +__constant struct Cols $1 = { border: 2, bg: 6 } +__constant struct Cols $2 = { border: 3, bg: 5 } +__constant struct Cols * const COLS = (struct Cols *) 53280 +__constant char OFFSET_STRUCT_COLS_BG = 1 +__constant char SIZEOF_STRUCT_COLS = 2 +void main() +__loadstore volatile struct Cols main::a // zp[2]:6 +__loadstore volatile struct Cols main::b // zp[2]:8 +__loadstore volatile struct Cols main::c // zp[2]:10 +struct Cols *main::m +struct Cols *main::m#0 // m zp[2]:2 2.0 +struct Cols *main::m#1 // m zp[2]:2 2.0 +__varcall struct Cols * min(struct Cols *a , struct Cols *b) +__loadstore struct Cols *min::a // zp[2]:2 3.0 +__loadstore struct Cols *min::b // zp[2]:4 5.0 +__loadstore struct Cols *min::return // zp[2]:2 5.2 + +zp[2]:2 [ min::a main::m#0 min::return main::m#1 ] +zp[2]:4 [ min::b ] +zp[2]:6 [ main::a ] +zp[2]:8 [ main::b ] +zp[2]:10 [ main::c ] + + +FINAL ASSEMBLER +Score: 171 + + // File Comments +// Test __varcall calling convention +// Pointer to Struct parameter & return value + // Upstart + // Commodore 64 PRG executable file +.file [name="varcall-8.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .const SIZEOF_STRUCT_COLS = 2 + .const OFFSET_STRUCT_COLS_BG = 1 + .label COLS = $d020 +.segment Code + // main +main: { + .label a = 6 + .label b = 8 + .label c = $a + .label m = 2 + // struct Cols a = { 1, 7 } + // [0] *(&main::a) = memcpy(*(&$0), struct Cols, SIZEOF_STRUCT_COLS) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_COLS + !: + lda __0-1,y + sta a-1,y + dey + bne !- + // struct Cols b = { 2, 6 } + // [1] *(&main::b) = memcpy(*(&$1), struct Cols, SIZEOF_STRUCT_COLS) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_COLS + !: + lda __1-1,y + sta b-1,y + dey + bne !- + // struct Cols c = { 3, 5 } + // [2] *(&main::c) = memcpy(*(&$2), struct Cols, SIZEOF_STRUCT_COLS) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_COLS + !: + lda __2-1,y + sta c-1,y + dey + bne !- + // struct Cols *m = min(&a,&b) + // [3] min::a = &main::a -- pssz1=pssc1 + lda #a + sta.z min.a+1 + // [4] min::b = &main::b -- pssz1=pssc1 + lda #b + sta.z min.b+1 + // [5] callexecute min -- call_vprc1 + jsr min + // [6] main::m#0 = min::return + // *COLS = *m + // [7] *COLS = memcpy(*main::m#0, struct Cols, SIZEOF_STRUCT_COLS) -- _deref_pssc1=_deref_pssz1_memcpy_vbuc2 + ldx #SIZEOF_STRUCT_COLS + ldy #0 + !: + lda (m),y + sta COLS,y + iny + dex + bne !- + // min(m,&c) + // [8] min::a = main::m#0 + // [9] min::b = &main::c -- pssz1=pssc1 + lda #c + sta.z min.b+1 + // [10] callexecute min -- call_vprc1 + jsr min + // m = min(m,&c) + // [11] main::m#1 = min::return + // *COLS = *m + // [12] *COLS = memcpy(*main::m#1, struct Cols, SIZEOF_STRUCT_COLS) -- _deref_pssc1=_deref_pssz1_memcpy_vbuc2 + ldx #SIZEOF_STRUCT_COLS + ldy #0 + !: + lda (m),y + sta COLS,y + iny + dex + bne !- + // main::@return + // } + // [13] return + rts +} + // min +// __zp(2) struct Cols * min(__zp(2) struct Cols *a, __zp(4) struct Cols *b) +min: { + .label a = 2 + .label b = 4 + .label return = 2 + // if(a->bg < b->bg) + // [14] if(((char *)min::a)[OFFSET_STRUCT_COLS_BG]<((char *)min::b)[OFFSET_STRUCT_COLS_BG]) goto min::@1 -- pbuz1_derefidx_vbuc1_lt_pbuz2_derefidx_vbuc1_then_la1 + ldy #OFFSET_STRUCT_COLS_BG + lda (b),y + cmp (a),y + bcc __breturn + // min::@2 + // return b; + // [15] min::return = min::b -- pssz1=pssz2 + lda.z b + sta.z return + lda.z b+1 + sta.z return+1 + // min::@return + __breturn: + // } + // [16] return + rts + // min::@1 + // return a; + // [17] min::return = min::a +} + // File Data +.segment Data + __0: .byte 1, 7 + __1: .byte 2, 6 + __2: .byte 3, 5 + diff --git a/src/test/ref/varcall-8.sym b/src/test/ref/varcall-8.sym new file mode 100644 index 000000000..63634cbc5 --- /dev/null +++ b/src/test/ref/varcall-8.sym @@ -0,0 +1,23 @@ +__constant struct Cols $0 = { border: 1, bg: 7 } +__constant struct Cols $1 = { border: 2, bg: 6 } +__constant struct Cols $2 = { border: 3, bg: 5 } +__constant struct Cols * const COLS = (struct Cols *) 53280 +__constant char OFFSET_STRUCT_COLS_BG = 1 +__constant char SIZEOF_STRUCT_COLS = 2 +void main() +__loadstore volatile struct Cols main::a // zp[2]:6 +__loadstore volatile struct Cols main::b // zp[2]:8 +__loadstore volatile struct Cols main::c // zp[2]:10 +struct Cols *main::m +struct Cols *main::m#0 // m zp[2]:2 2.0 +struct Cols *main::m#1 // m zp[2]:2 2.0 +__varcall struct Cols * min(struct Cols *a , struct Cols *b) +__loadstore struct Cols *min::a // zp[2]:2 3.0 +__loadstore struct Cols *min::b // zp[2]:4 5.0 +__loadstore struct Cols *min::return // zp[2]:2 5.2 + +zp[2]:2 [ min::a main::m#0 min::return main::m#1 ] +zp[2]:4 [ min::b ] +zp[2]:6 [ main::a ] +zp[2]:8 [ main::b ] +zp[2]:10 [ main::c ] From 51623c3657f2cef57c1e0e5096da2c12cf20e573 Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Sun, 2 Apr 2023 12:43:18 +0200 Subject: [PATCH 21/66] Implemented C99 compatible union initializer method, using .member= syntax... (cherry picked from commit f52f851127ab06064c010d310ee7d87f78e1f303) --- .../dk/camelot64/kickc/parser/KickCParser.g4 | 11 ++++- ...ion-member-initialization-parsetree-test.c | 34 ++++++++++++++ .../camelot64/kickc/model/Initializers.java | 23 ++++++++-- .../kickc/model/values/ValueStructList.java | 46 +++++++++++++++++++ .../Pass0GenerateStatementSequence.java | 30 ++++++++++-- 5 files changed, 135 insertions(+), 9 deletions(-) create mode 100644 src/main/antlr4/dk/camelot64/kickc/union-member-initialization-parsetree-test.c create mode 100644 src/main/java/dk/camelot64/kickc/model/values/ValueStructList.java diff --git a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 index 3084bc0c8..67ceaeb59 100644 --- a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 +++ b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 @@ -217,6 +217,15 @@ commaExpr | commaExpr COMMA expr #commaSimple ; +initMemberExpr + : expr + ; + +initExpr + : (DOT initMemberExpr ASSIGN)? expr + ; + + expr : PAR_BEGIN commaExpr PAR_END #exprPar | expr DOT NAME #exprDot @@ -243,9 +252,9 @@ expr | expr ( '&&' ) expr #exprBinary | expr ( '||' ) expr #exprBinary | expr '?' expr COLON expr #exprTernary + | CURLY_BEGIN initExpr (COMMA initExpr )* COMMA? CURLY_END #initList | expr '=' expr #exprAssignment | expr ASSIGN_COMPOUND expr #exprAssignmentCompound - | CURLY_BEGIN expr (COMMA expr )* COMMA? CURLY_END #initList | NAME #exprId | NUMBER #exprNumber | STRING+ #exprString diff --git a/src/main/antlr4/dk/camelot64/kickc/union-member-initialization-parsetree-test.c b/src/main/antlr4/dk/camelot64/kickc/union-member-initialization-parsetree-test.c new file mode 100644 index 000000000..cba4b102a --- /dev/null +++ b/src/main/antlr4/dk/camelot64/kickc/union-member-initialization-parsetree-test.c @@ -0,0 +1,34 @@ +struct M { + unsigned int flight; + signed char turn; + unsigned char speed; +}; + +struct T { + signed char turn; + unsigned char radius; + unsigned char speed; +}; + +struct E { + unsigned char explode; +}; + +union A { + struct M move; + struct T turn; + struct E end; +}; + +struct F { + union A action; + unsigned char type; + unsigned char next; +}; + + +struct F action_flightpath_001[] = { + { .move={ action_move_00 }, STAGE_ACTION_MOVE, 1 }, + { { action_end } , STAGE_ACTION_END, 0 } +}; + diff --git a/src/main/java/dk/camelot64/kickc/model/Initializers.java b/src/main/java/dk/camelot64/kickc/model/Initializers.java index 6db8334eb..b2b33cdb4 100644 --- a/src/main/java/dk/camelot64/kickc/model/Initializers.java +++ b/src/main/java/dk/camelot64/kickc/model/Initializers.java @@ -143,10 +143,12 @@ public class Initializers { int structInitNeedSize = structDefinition.isUnion() ? 1 : memberDefinitions.size(); if(structInitNeedSize != valueList.getList().size()) { if(structDefinition.isUnion()) { - throw new CompileError( - "Union initializer has too many values, since only one is allowed.\n" + - " Union initializer: " + valueList.toString(program), - source); + if(valueList.getList().size()>1) { + throw new CompileError( + "Union initializer has too many values, since only one is allowed.\n" + + " Union initializer: " + valueList.toString(program), + source); + } } else { throw new CompileError( "Struct initializer has wrong size (" + valueList.getList().size() + "), " + @@ -165,8 +167,19 @@ public class Initializers { Iterator memberDefIt = memberDefinitions.iterator(); Iterator valueIt = valueList.getList().iterator(); for(int i = 0; i < structInitNeedSize; i++) { - Variable memberDef = memberDefIt.next(); + Variable memberDef = null; RValue memberValue = valueIt.next(); + String memberUnion = ((ValueStructList)valueList).getMember(memberValue); + if(memberUnion != null) { + while(memberDefIt.hasNext()) { + memberDef = memberDefIt.next(); + if (memberDef.getLocalName().contentEquals(memberUnion.toString())) { + break; + } + } + } else { + memberDef = memberDefIt.next(); + } RValue constantifiedMemberValue = constantify(memberValue, new ValueTypeSpec(memberDef.getType()), program, source); constantifiedList.add(constantifiedMemberValue); if(constantifiedMemberValue instanceof ConstantValue) diff --git a/src/main/java/dk/camelot64/kickc/model/values/ValueStructList.java b/src/main/java/dk/camelot64/kickc/model/values/ValueStructList.java new file mode 100644 index 000000000..0b389b174 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/model/values/ValueStructList.java @@ -0,0 +1,46 @@ +package dk.camelot64.kickc.model.values; + +import dk.camelot64.kickc.model.Program; + +import java.util.HashMap; +import java.util.List; + +/** + * A list of sub-values. + * Used for struct value initializers. + */ +public class ValueStructList extends ValueList { + + private HashMap members; + + public ValueStructList(HashMap members, List list) { + super(list); + this.members = members; + } + + public HashMap getMembers() { + return members; + } + public String getMember(RValue init) { return members.get(init); } + + @Override + public String toString(Program program) { + StringBuilder out = new StringBuilder(); + boolean first = true; + out.append("{ "); + for(RValue constantValue : getList()) { + if(!first) { + out.append(", "); + } + first = false; + out.append(constantValue.toString(program)); + } + out.append(" }"); + return out.toString(); + } + + @Override + public String toString() { + return toString(null); + } +} diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index e7a343ac6..78db33ba0 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -1913,14 +1913,38 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor initValues = new ArrayList<>(); + HashMap members = new HashMap<>(); + + String member = null; + if(ctx.initMemberExpr() != null) { + member = ctx.initMemberExpr().getText(); + } + return member; + } + @Override public RValue visitInitList(KickCParser.InitListContext ctx) { List initValues = new ArrayList<>(); - for(KickCParser.ExprContext initializer : ctx.expr()) { - RValue rValue = (RValue) visit(initializer); + HashMap members = new HashMap<>(); + + for(KickCParser.InitExprContext initializer : ctx.initExpr()) { + RValue member = null; + String initString = initializer.getText(); + if (initializer.initMemberExpr() != null) { + if(initializer.initMemberExpr().isEmpty() == false) { + member = (RValue) visit(initializer.initMemberExpr()); + } + } + RValue rValue = (RValue) visit(initializer.expr()); initValues.add(rValue); + if(member!=null) { + members.put(rValue, member.toString()); + } } - return new ValueList(initValues); + return new ValueStructList(members, initValues); } @Override From 9db2d9b9601ba790716a24405bbee398d41c6965 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Mon, 3 Apr 2023 08:38:16 +0200 Subject: [PATCH 22/66] Implemented C99 compatible union initializer method, using .member= syntax... (cherry picked from commit ef62f80b2b693aa92bcbdfb873bad5f995b4b6ff) --- .../dk/camelot64/kickc/model/Initializers.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/model/Initializers.java b/src/main/java/dk/camelot64/kickc/model/Initializers.java index b2b33cdb4..f0592ba5f 100644 --- a/src/main/java/dk/camelot64/kickc/model/Initializers.java +++ b/src/main/java/dk/camelot64/kickc/model/Initializers.java @@ -169,14 +169,21 @@ public class Initializers { for(int i = 0; i < structInitNeedSize; i++) { Variable memberDef = null; RValue memberValue = valueIt.next(); - String memberUnion = ((ValueStructList)valueList).getMember(memberValue); - if(memberUnion != null) { - while(memberDefIt.hasNext()) { + String memberUnionName = ((ValueStructList)valueList).getMember(memberValue); + if(memberUnionName != null) { + boolean found = false; + while (memberDefIt.hasNext()) { memberDef = memberDefIt.next(); - if (memberDef.getLocalName().contentEquals(memberUnion.toString())) { + if (memberDef.getLocalName().contentEquals(memberUnionName)) { + found = true; break; } } + if(!found) + throw new CompileError( + "Union initializer cannot find member field " + memberUnionName + "\n" + + " Union initializer: " + valueList.toString(program), + source); } else { memberDef = memberDefIt.next(); } From 08ed1deebda924bb21cccd297857e260c1506214 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Mon, 3 Apr 2023 10:37:54 +0200 Subject: [PATCH 23/66] Working on #372 varcall. Struct of struct parameters working. --- .../camelot64/kickc/passes/Pass1CallVar.java | 15 - .../kickc/test/TestProgramsFast.java | 6 + src/test/kc/varcall-9.c | 26 + src/test/ref/varcall-9.asm | 108 +++ src/test/ref/varcall-9.cfg | 44 ++ src/test/ref/varcall-9.log | 711 ++++++++++++++++++ src/test/ref/varcall-9.sym | 58 ++ 7 files changed, 953 insertions(+), 15 deletions(-) create mode 100644 src/test/kc/varcall-9.c create mode 100644 src/test/ref/varcall-9.asm create mode 100644 src/test/ref/varcall-9.cfg create mode 100644 src/test/ref/varcall-9.log create mode 100644 src/test/ref/varcall-9.sym diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass1CallVar.java b/src/main/java/dk/camelot64/kickc/passes/Pass1CallVar.java index 68b7c6f3c..62aa6513b 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass1CallVar.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass1CallVar.java @@ -113,21 +113,6 @@ public class Pass1CallVar extends Pass2SsaOptimization { final ValueSource lValueSource = ValueSourceFactory.getValueSource(structLValue, getProgram(), getScope(), currentStmt, stmtIt, null); final ValueSource rValueSource = ValueSourceFactory.getValueSource(returnVar.getRef(), getProgram(), getScope(), currentStmt, stmtIt, null); Pass1UnwindStructValues.copyValues(lValueSource, rValueSource, null, false, currentStmt, null, stmtIt, getProgram()); - - - /* - final List memberLValues = ((ValueList) lValue).getList(); - final StructVariableMemberUnwinding structVariableMemberUnwinding = getProgram().getStructVariableMemberUnwinding(); - final StructVariableMemberUnwinding.VariableUnwinding returnVarUnwinding = structVariableMemberUnwinding.getVariableUnwinding(returnVar.getRef()); - for(RValue memberLValue : memberLValues) { - - } - for(int i = 0; i < structMemberVars.size(); i++) { - final Variable memberVar = structMemberVars.get(i); - final RValue memberValue = memberLValues.get(i); - generateCallFinalize(memberValue, memberVar.getType(), source, comments, stmtIt); - } - */ } } diff --git a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java index 59c627c82..1107e9ce3 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java +++ b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java @@ -378,6 +378,12 @@ public class TestProgramsFast extends TestPrograms { public void testStructUnwinding1() throws IOException { compileAndCompare("struct-unwinding-1.c"); } + + @Test + public void testVarCall9() throws IOException { + compileAndCompare("varcall-9.c"); + } + @Test public void testVarCall8() throws IOException { compileAndCompare("varcall-8.c"); diff --git a/src/test/kc/varcall-9.c b/src/test/kc/varcall-9.c new file mode 100644 index 000000000..b72b75bba --- /dev/null +++ b/src/test/kc/varcall-9.c @@ -0,0 +1,26 @@ +// Test __varcall calling convention +// Struct of struct parameter value + +struct Col { + char border; + char bg; +}; + +struct Cols { + struct Col normal; + struct Col error; +}; + +char * const COLS = (char*)0xd020; + +__varcall char plus(struct Cols a, struct Cols b) { + return a.normal.border + b.normal.border + a.normal.bg + b.normal.bg + a.error.border + b.error.border + a.error.bg + b.error.bg; +} + +void main() { + struct Cols a = { { 1, 2 }, { 3, 4 }}; + struct Cols b = { { 5, 6 }, { 7, 8 }}; + struct Cols c = { { 9, 10 }, { 11, 12 }}; + *COLS = plus(a, b); + *COLS = plus(b, c); +} diff --git a/src/test/ref/varcall-9.asm b/src/test/ref/varcall-9.asm new file mode 100644 index 000000000..64356c310 --- /dev/null +++ b/src/test/ref/varcall-9.asm @@ -0,0 +1,108 @@ +// Test __varcall calling convention +// Struct of struct parameter value + // Commodore 64 PRG executable file +.file [name="varcall-9.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + .label COLS = $d020 +.segment Code +main: { + .const a_normal_border = 1 + .const a_normal_bg = 2 + .const a_error_border = 3 + .const a_error_bg = 4 + .const b_normal_border = 5 + .const b_normal_bg = 6 + .const b_error_border = 7 + .const b_error_bg = 8 + .const c_normal_border = 9 + .const c_normal_bg = $a + .const c_error_border = $b + .const c_error_bg = $c + // plus(a, b) + lda #a_normal_border + sta.z plus.a_normal_border + lda #a_normal_bg + sta.z plus.a_normal_bg + lda #a_error_border + sta.z plus.a_error_border + lda #a_error_bg + sta.z plus.a_error_bg + lda #b_normal_border + sta.z plus.b_normal_border + lda #b_normal_bg + sta.z plus.b_normal_bg + lda #b_error_border + sta.z plus.b_error_border + lda #b_error_bg + sta.z plus.b_error_bg + jsr plus + lda.z plus.return + // *COLS = plus(a, b) + sta COLS + // plus(b, c) + lda #b_normal_border + sta.z plus.a_normal_border + lda #b_normal_bg + sta.z plus.a_normal_bg + lda #b_error_border + sta.z plus.a_error_border + lda #b_error_bg + sta.z plus.a_error_bg + lda #c_normal_border + sta.z plus.b_normal_border + lda #c_normal_bg + sta.z plus.b_normal_bg + lda #c_error_border + sta.z plus.b_error_border + lda #c_error_bg + sta.z plus.b_error_bg + jsr plus + lda.z plus.return + // *COLS = plus(b, c) + sta COLS + // } + rts +} +// __zp(2) char plus(__zp($a) char a_normal_border, __zp(7) char a_normal_bg, __zp(8) char a_error_border, __zp(9) char a_error_bg, __zp(3) char b_normal_border, __zp(4) char b_normal_bg, __zp(5) char b_error_border, __zp(6) char b_error_bg) +plus: { + .label return = 2 + .label a_normal_border = $a + .label a_normal_bg = 7 + .label a_error_border = 8 + .label a_error_bg = 9 + .label b_normal_border = 3 + .label b_normal_bg = 4 + .label b_error_border = 5 + .label b_error_bg = 6 + // a.normal.border + b.normal.border + lda.z a_normal_border + clc + adc.z b_normal_border + // a.normal.border + b.normal.border + a.normal.bg + clc + adc.z a_normal_bg + // a.normal.border + b.normal.border + a.normal.bg + b.normal.bg + clc + adc.z b_normal_bg + // a.normal.border + b.normal.border + a.normal.bg + b.normal.bg + a.error.border + clc + adc.z a_error_border + // a.normal.border + b.normal.border + a.normal.bg + b.normal.bg + a.error.border + b.error.border + clc + adc.z b_error_border + // a.normal.border + b.normal.border + a.normal.bg + b.normal.bg + a.error.border + b.error.border + a.error.bg + clc + adc.z a_error_bg + // a.normal.border + b.normal.border + a.normal.bg + b.normal.bg + a.error.border + b.error.border + a.error.bg + b.error.bg + clc + adc.z b_error_bg + // return a.normal.border + b.normal.border + a.normal.bg + b.normal.bg + a.error.border + b.error.border + a.error.bg + b.error.bg; + sta.z return + // } + rts +} diff --git a/src/test/ref/varcall-9.cfg b/src/test/ref/varcall-9.cfg new file mode 100644 index 000000000..e96b47d3d --- /dev/null +++ b/src/test/ref/varcall-9.cfg @@ -0,0 +1,44 @@ + +void main() +main: scope:[main] from + [0] plus::a_normal_border = main::a_normal_border + [1] plus::a_normal_bg = main::a_normal_bg + [2] plus::a_error_border = main::a_error_border + [3] plus::a_error_bg = main::a_error_bg + [4] plus::b_normal_border = main::b_normal_border + [5] plus::b_normal_bg = main::b_normal_bg + [6] plus::b_error_border = main::b_error_border + [7] plus::b_error_bg = main::b_error_bg + [8] callexecute plus + [9] main::$0 = plus::return + [10] *COLS = main::$0 + [11] plus::a_normal_border = main::b_normal_border + [12] plus::a_normal_bg = main::b_normal_bg + [13] plus::a_error_border = main::b_error_border + [14] plus::a_error_bg = main::b_error_bg + [15] plus::b_normal_border = main::c_normal_border + [16] plus::b_normal_bg = main::c_normal_bg + [17] plus::b_error_border = main::c_error_border + [18] plus::b_error_bg = main::c_error_bg + [19] callexecute plus + [20] main::$1 = plus::return + [21] *COLS = main::$1 + to:main::@return +main::@return: scope:[main] from main + [22] return + to:@return + +__varcall char plus(char a_normal_border , char a_normal_bg , char a_error_border , char a_error_bg , char b_normal_border , char b_normal_bg , char b_error_border , char b_error_bg) +plus: scope:[plus] from + [23] plus::$0 = plus::a_normal_border + plus::b_normal_border + [24] plus::$1 = plus::$0 + plus::a_normal_bg + [25] plus::$2 = plus::$1 + plus::b_normal_bg + [26] plus::$3 = plus::$2 + plus::a_error_border + [27] plus::$4 = plus::$3 + plus::b_error_border + [28] plus::$5 = plus::$4 + plus::a_error_bg + [29] plus::$6 = plus::$5 + plus::b_error_bg + [30] plus::return = plus::$6 + to:plus::@return +plus::@return: scope:[plus] from plus + [31] return + to:@return diff --git a/src/test/ref/varcall-9.log b/src/test/ref/varcall-9.log new file mode 100644 index 000000000..d917fb1f3 --- /dev/null +++ b/src/test/ref/varcall-9.log @@ -0,0 +1,711 @@ +Converting parameter in __varcall procedure to load/store plus::a +Converting parameter in __varcall procedure to load/store plus::b +Converting return in __varcall procedure to load/store plus::return +Eliminating unused variable with no statement plus::a +Eliminating unused variable with no statement plus::b +Eliminating unused variable with no statement plus::a_normal +Eliminating unused variable with no statement plus::a_error +Eliminating unused variable with no statement plus::b_normal +Eliminating unused variable with no statement plus::b_error +Calling convention __varcall adding prepare/execute/finalize for main::$0 = call plus(main::a_normal_border, main::a_normal_bg, main::a_error_border, main::a_error_bg, main::b_normal_border, main::b_normal_bg, main::b_error_border, main::b_error_bg) +Calling convention __varcall adding prepare/execute/finalize for main::$1 = call plus(main::b_normal_border, main::b_normal_bg, main::b_error_border, main::b_error_bg, main::c_normal_border, main::c_normal_bg, main::c_error_border, main::c_error_bg) +Calling convention VAR_CALL adding return value assignment main::$0 = plus::return +Calling convention VAR_CALL adding return value assignment main::$1 = plus::return + +CONTROL FLOW GRAPH SSA + +__varcall char plus(char a_normal_border , char a_normal_bg , char a_error_border , char a_error_bg , char b_normal_border , char b_normal_bg , char b_error_border , char b_error_bg) +plus: scope:[plus] from + plus::$0 = plus::a_normal_border + plus::b_normal_border + plus::$1 = plus::$0 + plus::a_normal_bg + plus::$2 = plus::$1 + plus::b_normal_bg + plus::$3 = plus::$2 + plus::a_error_border + plus::$4 = plus::$3 + plus::b_error_border + plus::$5 = plus::$4 + plus::a_error_bg + plus::$6 = plus::$5 + plus::b_error_bg + plus::return = plus::$6 + to:plus::@return +plus::@return: scope:[plus] from plus + return + to:@return + +void main() +main: scope:[main] from __start + plus::a_normal_border = main::a_normal_border + plus::a_normal_bg = main::a_normal_bg + plus::a_error_border = main::a_error_border + plus::a_error_bg = main::a_error_bg + plus::b_normal_border = main::b_normal_border + plus::b_normal_bg = main::b_normal_bg + plus::b_error_border = main::b_error_border + plus::b_error_bg = main::b_error_bg + callexecute plus + main::$0 = plus::return + *COLS = main::$0 + plus::a_normal_border = main::b_normal_border + plus::a_normal_bg = main::b_normal_bg + plus::a_error_border = main::b_error_border + plus::a_error_bg = main::b_error_bg + plus::b_normal_border = main::c_normal_border + plus::b_normal_bg = main::c_normal_bg + plus::b_error_border = main::c_error_border + plus::b_error_bg = main::c_error_bg + callexecute plus + main::$1 = plus::return + *COLS = main::$1 + to:main::@return +main::@return: scope:[main] from main + 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 +__constant char * const COLS = (char *)$d020 +void __start() +void main() +char main::$0 +char main::$1 +struct Col main::a_error +__constant char main::a_error_bg = 4 +__constant char main::a_error_border = 3 +struct Col main::a_normal +__constant char main::a_normal_bg = 2 +__constant char main::a_normal_border = 1 +struct Col main::b_error +__constant char main::b_error_bg = 8 +__constant char main::b_error_border = 7 +struct Col main::b_normal +__constant char main::b_normal_bg = 6 +__constant char main::b_normal_border = 5 +struct Col main::c_error +__constant char main::c_error_bg = $c +__constant char main::c_error_border = $b +struct Col main::c_normal +__constant char main::c_normal_bg = $a +__constant char main::c_normal_border = 9 +__varcall char plus(char a_normal_border , char a_normal_bg , char a_error_border , char a_error_bg , char b_normal_border , char b_normal_bg , char b_error_border , char b_error_bg) +char plus::$0 +char plus::$1 +char plus::$2 +char plus::$3 +char plus::$4 +char plus::$5 +char plus::$6 +__loadstore char plus::a_error_bg +__loadstore char plus::a_error_border +__loadstore char plus::a_normal_bg +__loadstore char plus::a_normal_border +__loadstore char plus::b_error_bg +__loadstore char plus::b_error_border +__loadstore char plus::b_normal_bg +__loadstore char plus::b_normal_border +__loadstore char plus::return + +Simplifying constant pointer cast (char *) 53280 +Successful SSA optimization PassNCastSimplification +Alias candidate removed (volatile)plus::return = plus::$6 +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 +Alias candidate removed (volatile)plus::return = plus::$6 +Alias candidate removed (volatile)plus::return = plus::$6 +Alias candidate removed (volatile)plus::return = plus::$6 +CALL GRAPH +Calls in [main] to plus:8 plus:19 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] plus::a_normal_border = main::a_normal_border + [1] plus::a_normal_bg = main::a_normal_bg + [2] plus::a_error_border = main::a_error_border + [3] plus::a_error_bg = main::a_error_bg + [4] plus::b_normal_border = main::b_normal_border + [5] plus::b_normal_bg = main::b_normal_bg + [6] plus::b_error_border = main::b_error_border + [7] plus::b_error_bg = main::b_error_bg + [8] callexecute plus + [9] main::$0 = plus::return + [10] *COLS = main::$0 + [11] plus::a_normal_border = main::b_normal_border + [12] plus::a_normal_bg = main::b_normal_bg + [13] plus::a_error_border = main::b_error_border + [14] plus::a_error_bg = main::b_error_bg + [15] plus::b_normal_border = main::c_normal_border + [16] plus::b_normal_bg = main::c_normal_bg + [17] plus::b_error_border = main::c_error_border + [18] plus::b_error_bg = main::c_error_bg + [19] callexecute plus + [20] main::$1 = plus::return + [21] *COLS = main::$1 + to:main::@return +main::@return: scope:[main] from main + [22] return + to:@return + +__varcall char plus(char a_normal_border , char a_normal_bg , char a_error_border , char a_error_bg , char b_normal_border , char b_normal_bg , char b_error_border , char b_error_bg) +plus: scope:[plus] from + [23] plus::$0 = plus::a_normal_border + plus::b_normal_border + [24] plus::$1 = plus::$0 + plus::a_normal_bg + [25] plus::$2 = plus::$1 + plus::b_normal_bg + [26] plus::$3 = plus::$2 + plus::a_error_border + [27] plus::$4 = plus::$3 + plus::b_error_border + [28] plus::$5 = plus::$4 + plus::a_error_bg + [29] plus::$6 = plus::$5 + plus::b_error_bg + [30] plus::return = plus::$6 + to:plus::@return +plus::@return: scope:[plus] from plus + [31] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +char main::$0 // 4.0 +char main::$1 // 4.0 +struct Col main::a_error +struct Col main::a_normal +struct Col main::b_error +struct Col main::b_normal +struct Col main::c_error +struct Col main::c_normal +__varcall char plus(char a_normal_border , char a_normal_bg , char a_error_border , char a_error_bg , char b_normal_border , char b_normal_bg , char b_error_border , char b_error_bg) +char plus::$0 // 22.0 +char plus::$1 // 22.0 +char plus::$2 // 22.0 +char plus::$3 // 22.0 +char plus::$4 // 22.0 +char plus::$5 // 22.0 +char plus::$6 // 22.0 +__loadstore char plus::a_error_bg // 1.0 +__loadstore char plus::a_error_border // 1.0 +__loadstore char plus::a_normal_bg // 1.0 +__loadstore char plus::a_normal_border // 0.9375 +__loadstore char plus::b_error_bg // 1.875 +__loadstore char plus::b_error_border // 1.875 +__loadstore char plus::b_normal_bg // 1.875 +__loadstore char plus::b_normal_border // 1.875 +__loadstore char plus::return // 3.75 + +Initial phi equivalence classes +Added variable plus::a_normal_border to live range equivalence class [ plus::a_normal_border ] +Added variable plus::a_normal_bg to live range equivalence class [ plus::a_normal_bg ] +Added variable plus::a_error_border to live range equivalence class [ plus::a_error_border ] +Added variable plus::a_error_bg to live range equivalence class [ plus::a_error_bg ] +Added variable plus::b_normal_border to live range equivalence class [ plus::b_normal_border ] +Added variable plus::b_normal_bg to live range equivalence class [ plus::b_normal_bg ] +Added variable plus::b_error_border to live range equivalence class [ plus::b_error_border ] +Added variable plus::b_error_bg to live range equivalence class [ plus::b_error_bg ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable plus::$0 to live range equivalence class [ plus::$0 ] +Added variable plus::$1 to live range equivalence class [ plus::$1 ] +Added variable plus::$2 to live range equivalence class [ plus::$2 ] +Added variable plus::$3 to live range equivalence class [ plus::$3 ] +Added variable plus::$4 to live range equivalence class [ plus::$4 ] +Added variable plus::$5 to live range equivalence class [ plus::$5 ] +Added variable plus::$6 to live range equivalence class [ plus::$6 ] +Added variable plus::return to live range equivalence class [ plus::return ] +Complete equivalence classes +[ plus::a_normal_border ] +[ plus::a_normal_bg ] +[ plus::a_error_border ] +[ plus::a_error_bg ] +[ plus::b_normal_border ] +[ plus::b_normal_bg ] +[ plus::b_error_border ] +[ plus::b_error_bg ] +[ main::$0 ] +[ main::$1 ] +[ plus::$0 ] +[ plus::$1 ] +[ plus::$2 ] +[ plus::$3 ] +[ plus::$4 ] +[ plus::$5 ] +[ plus::$6 ] +[ plus::return ] +Allocated zp[1]:2 [ plus::$0 ] +Allocated zp[1]:3 [ plus::$1 ] +Allocated zp[1]:4 [ plus::$2 ] +Allocated zp[1]:5 [ plus::$3 ] +Allocated zp[1]:6 [ plus::$4 ] +Allocated zp[1]:7 [ plus::$5 ] +Allocated zp[1]:8 [ plus::$6 ] +Allocated zp[1]:9 [ main::$0 ] +Allocated zp[1]:10 [ main::$1 ] +Allocated zp[1]:11 [ plus::return ] +Allocated zp[1]:12 [ plus::b_normal_border ] +Allocated zp[1]:13 [ plus::b_normal_bg ] +Allocated zp[1]:14 [ plus::b_error_border ] +Allocated zp[1]:15 [ plus::b_error_bg ] +Allocated zp[1]:16 [ plus::a_normal_bg ] +Allocated zp[1]:17 [ plus::a_error_border ] +Allocated zp[1]:18 [ plus::a_error_bg ] +Allocated zp[1]:19 [ plus::a_normal_border ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] plus::a_normal_border = main::a_normal_border [ plus::a_normal_border ] ( [ plus::a_normal_border ] { } ) always clobbers reg byte a +Statement [1] plus::a_normal_bg = main::a_normal_bg [ plus::a_normal_border plus::a_normal_bg ] ( [ plus::a_normal_border plus::a_normal_bg ] { } ) always clobbers reg byte a +Statement [2] plus::a_error_border = main::a_error_border [ plus::a_normal_border plus::a_normal_bg plus::a_error_border ] ( [ plus::a_normal_border plus::a_normal_bg plus::a_error_border ] { } ) always clobbers reg byte a +Statement [3] plus::a_error_bg = main::a_error_bg [ plus::a_normal_border plus::a_normal_bg plus::a_error_border plus::a_error_bg ] ( [ plus::a_normal_border plus::a_normal_bg plus::a_error_border plus::a_error_bg ] { } ) always clobbers reg byte a +Statement [4] plus::b_normal_border = main::b_normal_border [ plus::a_normal_border plus::a_normal_bg plus::a_error_border plus::a_error_bg plus::b_normal_border ] ( [ plus::a_normal_border plus::a_normal_bg plus::a_error_border plus::a_error_bg plus::b_normal_border ] { } ) always clobbers reg byte a +Statement [5] plus::b_normal_bg = main::b_normal_bg [ plus::a_normal_border plus::a_normal_bg plus::a_error_border plus::a_error_bg plus::b_normal_border plus::b_normal_bg ] ( [ plus::a_normal_border plus::a_normal_bg plus::a_error_border plus::a_error_bg plus::b_normal_border plus::b_normal_bg ] { } ) always clobbers reg byte a +Statement [6] plus::b_error_border = main::b_error_border [ plus::a_normal_border plus::a_normal_bg plus::a_error_border plus::a_error_bg plus::b_normal_border plus::b_normal_bg plus::b_error_border ] ( [ plus::a_normal_border plus::a_normal_bg plus::a_error_border plus::a_error_bg plus::b_normal_border plus::b_normal_bg plus::b_error_border ] { } ) always clobbers reg byte a +Statement [7] plus::b_error_bg = main::b_error_bg [ plus::a_normal_border plus::a_normal_bg plus::a_error_border plus::a_error_bg plus::b_normal_border plus::b_normal_bg plus::b_error_border plus::b_error_bg ] ( [ plus::a_normal_border plus::a_normal_bg plus::a_error_border plus::a_error_bg plus::b_normal_border plus::b_normal_bg plus::b_error_border plus::b_error_bg ] { } ) always clobbers reg byte a +Statement [11] plus::a_normal_border = main::b_normal_border [ plus::a_normal_border ] ( [ plus::a_normal_border ] { } ) always clobbers reg byte a +Statement [12] plus::a_normal_bg = main::b_normal_bg [ plus::a_normal_border plus::a_normal_bg ] ( [ plus::a_normal_border plus::a_normal_bg ] { } ) always clobbers reg byte a +Statement [13] plus::a_error_border = main::b_error_border [ plus::a_normal_border plus::a_normal_bg plus::a_error_border ] ( [ plus::a_normal_border plus::a_normal_bg plus::a_error_border ] { } ) always clobbers reg byte a +Statement [14] plus::a_error_bg = main::b_error_bg [ plus::a_normal_border plus::a_normal_bg plus::a_error_border plus::a_error_bg ] ( [ plus::a_normal_border plus::a_normal_bg plus::a_error_border plus::a_error_bg ] { } ) always clobbers reg byte a +Statement [15] plus::b_normal_border = main::c_normal_border [ plus::a_normal_border plus::a_normal_bg plus::a_error_border plus::a_error_bg plus::b_normal_border ] ( [ plus::a_normal_border plus::a_normal_bg plus::a_error_border plus::a_error_bg plus::b_normal_border ] { } ) always clobbers reg byte a +Statement [16] plus::b_normal_bg = main::c_normal_bg [ plus::a_normal_border plus::a_normal_bg plus::a_error_border plus::a_error_bg plus::b_normal_border plus::b_normal_bg ] ( [ plus::a_normal_border plus::a_normal_bg plus::a_error_border plus::a_error_bg plus::b_normal_border plus::b_normal_bg ] { } ) always clobbers reg byte a +Statement [17] plus::b_error_border = main::c_error_border [ plus::a_normal_border plus::a_normal_bg plus::a_error_border plus::a_error_bg plus::b_normal_border plus::b_normal_bg plus::b_error_border ] ( [ plus::a_normal_border plus::a_normal_bg plus::a_error_border plus::a_error_bg plus::b_normal_border plus::b_normal_bg plus::b_error_border ] { } ) always clobbers reg byte a +Statement [18] plus::b_error_bg = main::c_error_bg [ plus::a_normal_border plus::a_normal_bg plus::a_error_border plus::a_error_bg plus::b_normal_border plus::b_normal_bg plus::b_error_border plus::b_error_bg ] ( [ plus::a_normal_border plus::a_normal_bg plus::a_error_border plus::a_error_bg plus::b_normal_border plus::b_normal_bg plus::b_error_border plus::b_error_bg ] { } ) always clobbers reg byte a +Statement [23] plus::$0 = plus::a_normal_border + plus::b_normal_border [ plus::a_normal_bg plus::a_error_border plus::a_error_bg plus::b_normal_bg plus::b_error_border plus::b_error_bg plus::$0 ] ( plus:8 [ plus::a_normal_bg plus::a_error_border plus::a_error_bg plus::b_normal_bg plus::b_error_border plus::b_error_bg plus::$0 ] { } plus:19 [ plus::a_normal_bg plus::a_error_border plus::a_error_bg plus::b_normal_bg plus::b_error_border plus::b_error_bg plus::$0 ] { } ) always clobbers reg byte a +Statement [24] plus::$1 = plus::$0 + plus::a_normal_bg [ plus::a_error_border plus::a_error_bg plus::b_normal_bg plus::b_error_border plus::b_error_bg plus::$1 ] ( plus:8 [ plus::a_error_border plus::a_error_bg plus::b_normal_bg plus::b_error_border plus::b_error_bg plus::$1 ] { } plus:19 [ plus::a_error_border plus::a_error_bg plus::b_normal_bg plus::b_error_border plus::b_error_bg plus::$1 ] { } ) always clobbers reg byte a +Statement [25] plus::$2 = plus::$1 + plus::b_normal_bg [ plus::a_error_border plus::a_error_bg plus::b_error_border plus::b_error_bg plus::$2 ] ( plus:8 [ plus::a_error_border plus::a_error_bg plus::b_error_border plus::b_error_bg plus::$2 ] { } plus:19 [ plus::a_error_border plus::a_error_bg plus::b_error_border plus::b_error_bg plus::$2 ] { } ) always clobbers reg byte a +Statement [26] plus::$3 = plus::$2 + plus::a_error_border [ plus::a_error_bg plus::b_error_border plus::b_error_bg plus::$3 ] ( plus:8 [ plus::a_error_bg plus::b_error_border plus::b_error_bg plus::$3 ] { } plus:19 [ plus::a_error_bg plus::b_error_border plus::b_error_bg plus::$3 ] { } ) always clobbers reg byte a +Statement [27] plus::$4 = plus::$3 + plus::b_error_border [ plus::a_error_bg plus::b_error_bg plus::$4 ] ( plus:8 [ plus::a_error_bg plus::b_error_bg plus::$4 ] { } plus:19 [ plus::a_error_bg plus::b_error_bg plus::$4 ] { } ) always clobbers reg byte a +Statement [28] plus::$5 = plus::$4 + plus::a_error_bg [ plus::b_error_bg plus::$5 ] ( plus:8 [ plus::b_error_bg plus::$5 ] { } plus:19 [ plus::b_error_bg plus::$5 ] { } ) always clobbers reg byte a +Statement [29] plus::$6 = plus::$5 + plus::b_error_bg [ plus::$6 ] ( plus:8 [ plus::$6 ] { } plus:19 [ plus::$6 ] { } ) always clobbers reg byte a +Potential registers zp[1]:19 [ plus::a_normal_border ] : zp[1]:19 , +Potential registers zp[1]:16 [ plus::a_normal_bg ] : zp[1]:16 , +Potential registers zp[1]:17 [ plus::a_error_border ] : zp[1]:17 , +Potential registers zp[1]:18 [ plus::a_error_bg ] : zp[1]:18 , +Potential registers zp[1]:12 [ plus::b_normal_border ] : zp[1]:12 , +Potential registers zp[1]:13 [ plus::b_normal_bg ] : zp[1]:13 , +Potential registers zp[1]:14 [ plus::b_error_border ] : zp[1]:14 , +Potential registers zp[1]:15 [ plus::b_error_bg ] : zp[1]:15 , +Potential registers zp[1]:9 [ main::$0 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:10 [ main::$1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ plus::$0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ plus::$1 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:4 [ plus::$2 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ plus::$3 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:6 [ plus::$4 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ plus::$5 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ plus::$6 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:11 [ plus::return ] : zp[1]:11 , + +REGISTER UPLIFT SCOPES +Uplift Scope [plus] 22: zp[1]:2 [ plus::$0 ] 22: zp[1]:3 [ plus::$1 ] 22: zp[1]:4 [ plus::$2 ] 22: zp[1]:5 [ plus::$3 ] 22: zp[1]:6 [ plus::$4 ] 22: zp[1]:7 [ plus::$5 ] 22: zp[1]:8 [ plus::$6 ] 3.75: zp[1]:11 [ plus::return ] 1.88: zp[1]:12 [ plus::b_normal_border ] 1.88: zp[1]:13 [ plus::b_normal_bg ] 1.88: zp[1]:14 [ plus::b_error_border ] 1.88: zp[1]:15 [ plus::b_error_bg ] 1: zp[1]:16 [ plus::a_normal_bg ] 1: zp[1]:17 [ plus::a_error_border ] 1: zp[1]:18 [ plus::a_error_bg ] 0.94: zp[1]:19 [ plus::a_normal_border ] +Uplift Scope [main] 4: zp[1]:9 [ main::$0 ] 4: zp[1]:10 [ main::$1 ] +Uplift Scope [Col] +Uplift Scope [Cols] +Uplift Scope [] + +Uplifting [plus] best 195 combination reg byte a [ plus::$0 ] reg byte a [ plus::$1 ] reg byte a [ plus::$2 ] reg byte a [ plus::$3 ] zp[1]:6 [ plus::$4 ] zp[1]:7 [ plus::$5 ] zp[1]:8 [ plus::$6 ] zp[1]:11 [ plus::return ] zp[1]:12 [ plus::b_normal_border ] zp[1]:13 [ plus::b_normal_bg ] zp[1]:14 [ plus::b_error_border ] zp[1]:15 [ plus::b_error_bg ] zp[1]:16 [ plus::a_normal_bg ] zp[1]:17 [ plus::a_error_border ] zp[1]:18 [ plus::a_error_bg ] zp[1]:19 [ plus::a_normal_border ] +Limited combination testing to 100 combinations of 16384 possible. +Uplifting [main] best 183 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] +Uplifting [Col] best 183 combination +Uplifting [Cols] best 183 combination +Uplifting [] best 183 combination +Attempting to uplift remaining variables inzp[1]:6 [ plus::$4 ] +Uplifting [plus] best 177 combination reg byte a [ plus::$4 ] +Attempting to uplift remaining variables inzp[1]:7 [ plus::$5 ] +Uplifting [plus] best 171 combination reg byte a [ plus::$5 ] +Attempting to uplift remaining variables inzp[1]:8 [ plus::$6 ] +Uplifting [plus] best 165 combination reg byte a [ plus::$6 ] +Attempting to uplift remaining variables inzp[1]:11 [ plus::return ] +Uplifting [plus] best 165 combination zp[1]:11 [ plus::return ] +Attempting to uplift remaining variables inzp[1]:12 [ plus::b_normal_border ] +Uplifting [plus] best 165 combination zp[1]:12 [ plus::b_normal_border ] +Attempting to uplift remaining variables inzp[1]:13 [ plus::b_normal_bg ] +Uplifting [plus] best 165 combination zp[1]:13 [ plus::b_normal_bg ] +Attempting to uplift remaining variables inzp[1]:14 [ plus::b_error_border ] +Uplifting [plus] best 165 combination zp[1]:14 [ plus::b_error_border ] +Attempting to uplift remaining variables inzp[1]:15 [ plus::b_error_bg ] +Uplifting [plus] best 165 combination zp[1]:15 [ plus::b_error_bg ] +Attempting to uplift remaining variables inzp[1]:16 [ plus::a_normal_bg ] +Uplifting [plus] best 165 combination zp[1]:16 [ plus::a_normal_bg ] +Attempting to uplift remaining variables inzp[1]:17 [ plus::a_error_border ] +Uplifting [plus] best 165 combination zp[1]:17 [ plus::a_error_border ] +Attempting to uplift remaining variables inzp[1]:18 [ plus::a_error_bg ] +Uplifting [plus] best 165 combination zp[1]:18 [ plus::a_error_bg ] +Attempting to uplift remaining variables inzp[1]:19 [ plus::a_normal_border ] +Uplifting [plus] best 165 combination zp[1]:19 [ plus::a_normal_border ] +Allocated (was zp[1]:11) zp[1]:2 [ plus::return ] +Allocated (was zp[1]:12) zp[1]:3 [ plus::b_normal_border ] +Allocated (was zp[1]:13) zp[1]:4 [ plus::b_normal_bg ] +Allocated (was zp[1]:14) zp[1]:5 [ plus::b_error_border ] +Allocated (was zp[1]:15) zp[1]:6 [ plus::b_error_bg ] +Allocated (was zp[1]:16) zp[1]:7 [ plus::a_normal_bg ] +Allocated (was zp[1]:17) zp[1]:8 [ plus::a_error_border ] +Allocated (was zp[1]:18) zp[1]:9 [ plus::a_error_bg ] +Allocated (was zp[1]:19) zp[1]:10 [ plus::a_normal_border ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test __varcall calling convention +// Struct of struct parameter value + // Upstart + // Commodore 64 PRG executable file +.file [name="varcall-9.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .label COLS = $d020 +.segment Code + // main +main: { + .const a_normal_border = 1 + .const a_normal_bg = 2 + .const a_error_border = 3 + .const a_error_bg = 4 + .const b_normal_border = 5 + .const b_normal_bg = 6 + .const b_error_border = 7 + .const b_error_bg = 8 + .const c_normal_border = 9 + .const c_normal_bg = $a + .const c_error_border = $b + .const c_error_bg = $c + // [0] plus::a_normal_border = main::a_normal_border -- vbuz1=vbuc1 + lda #a_normal_border + sta.z plus.a_normal_border + // [1] plus::a_normal_bg = main::a_normal_bg -- vbuz1=vbuc1 + lda #a_normal_bg + sta.z plus.a_normal_bg + // [2] plus::a_error_border = main::a_error_border -- vbuz1=vbuc1 + lda #a_error_border + sta.z plus.a_error_border + // [3] plus::a_error_bg = main::a_error_bg -- vbuz1=vbuc1 + lda #a_error_bg + sta.z plus.a_error_bg + // [4] plus::b_normal_border = main::b_normal_border -- vbuz1=vbuc1 + lda #b_normal_border + sta.z plus.b_normal_border + // [5] plus::b_normal_bg = main::b_normal_bg -- vbuz1=vbuc1 + lda #b_normal_bg + sta.z plus.b_normal_bg + // [6] plus::b_error_border = main::b_error_border -- vbuz1=vbuc1 + lda #b_error_border + sta.z plus.b_error_border + // [7] plus::b_error_bg = main::b_error_bg -- vbuz1=vbuc1 + lda #b_error_bg + sta.z plus.b_error_bg + // [8] callexecute plus -- call_vprc1 + jsr plus + // [9] main::$0 = plus::return -- vbuaa=vbuz1 + lda.z plus.return + // [10] *COLS = main::$0 -- _deref_pbuc1=vbuaa + sta COLS + // [11] plus::a_normal_border = main::b_normal_border -- vbuz1=vbuc1 + lda #b_normal_border + sta.z plus.a_normal_border + // [12] plus::a_normal_bg = main::b_normal_bg -- vbuz1=vbuc1 + lda #b_normal_bg + sta.z plus.a_normal_bg + // [13] plus::a_error_border = main::b_error_border -- vbuz1=vbuc1 + lda #b_error_border + sta.z plus.a_error_border + // [14] plus::a_error_bg = main::b_error_bg -- vbuz1=vbuc1 + lda #b_error_bg + sta.z plus.a_error_bg + // [15] plus::b_normal_border = main::c_normal_border -- vbuz1=vbuc1 + lda #c_normal_border + sta.z plus.b_normal_border + // [16] plus::b_normal_bg = main::c_normal_bg -- vbuz1=vbuc1 + lda #c_normal_bg + sta.z plus.b_normal_bg + // [17] plus::b_error_border = main::c_error_border -- vbuz1=vbuc1 + lda #c_error_border + sta.z plus.b_error_border + // [18] plus::b_error_bg = main::c_error_bg -- vbuz1=vbuc1 + lda #c_error_bg + sta.z plus.b_error_bg + // [19] callexecute plus -- call_vprc1 + jsr plus + // [20] main::$1 = plus::return -- vbuaa=vbuz1 + lda.z plus.return + // [21] *COLS = main::$1 -- _deref_pbuc1=vbuaa + sta COLS + jmp __breturn + // main::@return + __breturn: + // [22] return + rts +} + // plus +// __zp(2) char plus(__zp($a) char a_normal_border, __zp(7) char a_normal_bg, __zp(8) char a_error_border, __zp(9) char a_error_bg, __zp(3) char b_normal_border, __zp(4) char b_normal_bg, __zp(5) char b_error_border, __zp(6) char b_error_bg) +plus: { + .label return = 2 + .label a_normal_border = $a + .label a_normal_bg = 7 + .label a_error_border = 8 + .label a_error_bg = 9 + .label b_normal_border = 3 + .label b_normal_bg = 4 + .label b_error_border = 5 + .label b_error_bg = 6 + // [23] plus::$0 = plus::a_normal_border + plus::b_normal_border -- vbuaa=vbuz1_plus_vbuz2 + lda.z a_normal_border + clc + adc.z b_normal_border + // [24] plus::$1 = plus::$0 + plus::a_normal_bg -- vbuaa=vbuaa_plus_vbuz1 + clc + adc.z a_normal_bg + // [25] plus::$2 = plus::$1 + plus::b_normal_bg -- vbuaa=vbuaa_plus_vbuz1 + clc + adc.z b_normal_bg + // [26] plus::$3 = plus::$2 + plus::a_error_border -- vbuaa=vbuaa_plus_vbuz1 + clc + adc.z a_error_border + // [27] plus::$4 = plus::$3 + plus::b_error_border -- vbuaa=vbuaa_plus_vbuz1 + clc + adc.z b_error_border + // [28] plus::$5 = plus::$4 + plus::a_error_bg -- vbuaa=vbuaa_plus_vbuz1 + clc + adc.z a_error_bg + // [29] plus::$6 = plus::$5 + plus::b_error_bg -- vbuaa=vbuaa_plus_vbuz1 + clc + adc.z b_error_bg + // [30] plus::return = plus::$6 -- vbuz1=vbuaa + sta.z return + jmp __breturn + // plus::@return + __breturn: + // [31] 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 +__constant char * const COLS = (char *) 53280 +void main() +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 +struct Col main::a_error +__constant char main::a_error_bg = 4 +__constant char main::a_error_border = 3 +struct Col main::a_normal +__constant char main::a_normal_bg = 2 +__constant char main::a_normal_border = 1 +struct Col main::b_error +__constant char main::b_error_bg = 8 +__constant char main::b_error_border = 7 +struct Col main::b_normal +__constant char main::b_normal_bg = 6 +__constant char main::b_normal_border = 5 +struct Col main::c_error +__constant char main::c_error_bg = $c +__constant char main::c_error_border = $b +struct Col main::c_normal +__constant char main::c_normal_bg = $a +__constant char main::c_normal_border = 9 +__varcall char plus(char a_normal_border , char a_normal_bg , char a_error_border , char a_error_bg , char b_normal_border , char b_normal_bg , char b_error_border , char b_error_bg) +char plus::$0 // reg byte a 22.0 +char plus::$1 // reg byte a 22.0 +char plus::$2 // reg byte a 22.0 +char plus::$3 // reg byte a 22.0 +char plus::$4 // reg byte a 22.0 +char plus::$5 // reg byte a 22.0 +char plus::$6 // reg byte a 22.0 +__loadstore char plus::a_error_bg // zp[1]:9 1.0 +__loadstore char plus::a_error_border // zp[1]:8 1.0 +__loadstore char plus::a_normal_bg // zp[1]:7 1.0 +__loadstore char plus::a_normal_border // zp[1]:10 0.9375 +__loadstore char plus::b_error_bg // zp[1]:6 1.875 +__loadstore char plus::b_error_border // zp[1]:5 1.875 +__loadstore char plus::b_normal_bg // zp[1]:4 1.875 +__loadstore char plus::b_normal_border // zp[1]:3 1.875 +__loadstore char plus::return // zp[1]:2 3.75 + +zp[1]:10 [ plus::a_normal_border ] +zp[1]:7 [ plus::a_normal_bg ] +zp[1]:8 [ plus::a_error_border ] +zp[1]:9 [ plus::a_error_bg ] +zp[1]:3 [ plus::b_normal_border ] +zp[1]:4 [ plus::b_normal_bg ] +zp[1]:5 [ plus::b_error_border ] +zp[1]:6 [ plus::b_error_bg ] +reg byte a [ main::$0 ] +reg byte a [ main::$1 ] +reg byte a [ plus::$0 ] +reg byte a [ plus::$1 ] +reg byte a [ plus::$2 ] +reg byte a [ plus::$3 ] +reg byte a [ plus::$4 ] +reg byte a [ plus::$5 ] +reg byte a [ plus::$6 ] +zp[1]:2 [ plus::return ] + + +FINAL ASSEMBLER +Score: 159 + + // File Comments +// Test __varcall calling convention +// Struct of struct parameter value + // Upstart + // Commodore 64 PRG executable file +.file [name="varcall-9.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .label COLS = $d020 +.segment Code + // main +main: { + .const a_normal_border = 1 + .const a_normal_bg = 2 + .const a_error_border = 3 + .const a_error_bg = 4 + .const b_normal_border = 5 + .const b_normal_bg = 6 + .const b_error_border = 7 + .const b_error_bg = 8 + .const c_normal_border = 9 + .const c_normal_bg = $a + .const c_error_border = $b + .const c_error_bg = $c + // plus(a, b) + // [0] plus::a_normal_border = main::a_normal_border -- vbuz1=vbuc1 + lda #a_normal_border + sta.z plus.a_normal_border + // [1] plus::a_normal_bg = main::a_normal_bg -- vbuz1=vbuc1 + lda #a_normal_bg + sta.z plus.a_normal_bg + // [2] plus::a_error_border = main::a_error_border -- vbuz1=vbuc1 + lda #a_error_border + sta.z plus.a_error_border + // [3] plus::a_error_bg = main::a_error_bg -- vbuz1=vbuc1 + lda #a_error_bg + sta.z plus.a_error_bg + // [4] plus::b_normal_border = main::b_normal_border -- vbuz1=vbuc1 + lda #b_normal_border + sta.z plus.b_normal_border + // [5] plus::b_normal_bg = main::b_normal_bg -- vbuz1=vbuc1 + lda #b_normal_bg + sta.z plus.b_normal_bg + // [6] plus::b_error_border = main::b_error_border -- vbuz1=vbuc1 + lda #b_error_border + sta.z plus.b_error_border + // [7] plus::b_error_bg = main::b_error_bg -- vbuz1=vbuc1 + lda #b_error_bg + sta.z plus.b_error_bg + // [8] callexecute plus -- call_vprc1 + jsr plus + // [9] main::$0 = plus::return -- vbuaa=vbuz1 + lda.z plus.return + // *COLS = plus(a, b) + // [10] *COLS = main::$0 -- _deref_pbuc1=vbuaa + sta COLS + // plus(b, c) + // [11] plus::a_normal_border = main::b_normal_border -- vbuz1=vbuc1 + lda #b_normal_border + sta.z plus.a_normal_border + // [12] plus::a_normal_bg = main::b_normal_bg -- vbuz1=vbuc1 + lda #b_normal_bg + sta.z plus.a_normal_bg + // [13] plus::a_error_border = main::b_error_border -- vbuz1=vbuc1 + lda #b_error_border + sta.z plus.a_error_border + // [14] plus::a_error_bg = main::b_error_bg -- vbuz1=vbuc1 + lda #b_error_bg + sta.z plus.a_error_bg + // [15] plus::b_normal_border = main::c_normal_border -- vbuz1=vbuc1 + lda #c_normal_border + sta.z plus.b_normal_border + // [16] plus::b_normal_bg = main::c_normal_bg -- vbuz1=vbuc1 + lda #c_normal_bg + sta.z plus.b_normal_bg + // [17] plus::b_error_border = main::c_error_border -- vbuz1=vbuc1 + lda #c_error_border + sta.z plus.b_error_border + // [18] plus::b_error_bg = main::c_error_bg -- vbuz1=vbuc1 + lda #c_error_bg + sta.z plus.b_error_bg + // [19] callexecute plus -- call_vprc1 + jsr plus + // [20] main::$1 = plus::return -- vbuaa=vbuz1 + lda.z plus.return + // *COLS = plus(b, c) + // [21] *COLS = main::$1 -- _deref_pbuc1=vbuaa + sta COLS + // main::@return + // } + // [22] return + rts +} + // plus +// __zp(2) char plus(__zp($a) char a_normal_border, __zp(7) char a_normal_bg, __zp(8) char a_error_border, __zp(9) char a_error_bg, __zp(3) char b_normal_border, __zp(4) char b_normal_bg, __zp(5) char b_error_border, __zp(6) char b_error_bg) +plus: { + .label return = 2 + .label a_normal_border = $a + .label a_normal_bg = 7 + .label a_error_border = 8 + .label a_error_bg = 9 + .label b_normal_border = 3 + .label b_normal_bg = 4 + .label b_error_border = 5 + .label b_error_bg = 6 + // a.normal.border + b.normal.border + // [23] plus::$0 = plus::a_normal_border + plus::b_normal_border -- vbuaa=vbuz1_plus_vbuz2 + lda.z a_normal_border + clc + adc.z b_normal_border + // a.normal.border + b.normal.border + a.normal.bg + // [24] plus::$1 = plus::$0 + plus::a_normal_bg -- vbuaa=vbuaa_plus_vbuz1 + clc + adc.z a_normal_bg + // a.normal.border + b.normal.border + a.normal.bg + b.normal.bg + // [25] plus::$2 = plus::$1 + plus::b_normal_bg -- vbuaa=vbuaa_plus_vbuz1 + clc + adc.z b_normal_bg + // a.normal.border + b.normal.border + a.normal.bg + b.normal.bg + a.error.border + // [26] plus::$3 = plus::$2 + plus::a_error_border -- vbuaa=vbuaa_plus_vbuz1 + clc + adc.z a_error_border + // a.normal.border + b.normal.border + a.normal.bg + b.normal.bg + a.error.border + b.error.border + // [27] plus::$4 = plus::$3 + plus::b_error_border -- vbuaa=vbuaa_plus_vbuz1 + clc + adc.z b_error_border + // a.normal.border + b.normal.border + a.normal.bg + b.normal.bg + a.error.border + b.error.border + a.error.bg + // [28] plus::$5 = plus::$4 + plus::a_error_bg -- vbuaa=vbuaa_plus_vbuz1 + clc + adc.z a_error_bg + // a.normal.border + b.normal.border + a.normal.bg + b.normal.bg + a.error.border + b.error.border + a.error.bg + b.error.bg + // [29] plus::$6 = plus::$5 + plus::b_error_bg -- vbuaa=vbuaa_plus_vbuz1 + clc + adc.z b_error_bg + // return a.normal.border + b.normal.border + a.normal.bg + b.normal.bg + a.error.border + b.error.border + a.error.bg + b.error.bg; + // [30] plus::return = plus::$6 -- vbuz1=vbuaa + sta.z return + // plus::@return + // } + // [31] return + rts +} + // File Data + diff --git a/src/test/ref/varcall-9.sym b/src/test/ref/varcall-9.sym new file mode 100644 index 000000000..a2c916dc9 --- /dev/null +++ b/src/test/ref/varcall-9.sym @@ -0,0 +1,58 @@ +__constant char * const COLS = (char *) 53280 +void main() +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 +struct Col main::a_error +__constant char main::a_error_bg = 4 +__constant char main::a_error_border = 3 +struct Col main::a_normal +__constant char main::a_normal_bg = 2 +__constant char main::a_normal_border = 1 +struct Col main::b_error +__constant char main::b_error_bg = 8 +__constant char main::b_error_border = 7 +struct Col main::b_normal +__constant char main::b_normal_bg = 6 +__constant char main::b_normal_border = 5 +struct Col main::c_error +__constant char main::c_error_bg = $c +__constant char main::c_error_border = $b +struct Col main::c_normal +__constant char main::c_normal_bg = $a +__constant char main::c_normal_border = 9 +__varcall char plus(char a_normal_border , char a_normal_bg , char a_error_border , char a_error_bg , char b_normal_border , char b_normal_bg , char b_error_border , char b_error_bg) +char plus::$0 // reg byte a 22.0 +char plus::$1 // reg byte a 22.0 +char plus::$2 // reg byte a 22.0 +char plus::$3 // reg byte a 22.0 +char plus::$4 // reg byte a 22.0 +char plus::$5 // reg byte a 22.0 +char plus::$6 // reg byte a 22.0 +__loadstore char plus::a_error_bg // zp[1]:9 1.0 +__loadstore char plus::a_error_border // zp[1]:8 1.0 +__loadstore char plus::a_normal_bg // zp[1]:7 1.0 +__loadstore char plus::a_normal_border // zp[1]:10 0.9375 +__loadstore char plus::b_error_bg // zp[1]:6 1.875 +__loadstore char plus::b_error_border // zp[1]:5 1.875 +__loadstore char plus::b_normal_bg // zp[1]:4 1.875 +__loadstore char plus::b_normal_border // zp[1]:3 1.875 +__loadstore char plus::return // zp[1]:2 3.75 + +zp[1]:10 [ plus::a_normal_border ] +zp[1]:7 [ plus::a_normal_bg ] +zp[1]:8 [ plus::a_error_border ] +zp[1]:9 [ plus::a_error_bg ] +zp[1]:3 [ plus::b_normal_border ] +zp[1]:4 [ plus::b_normal_bg ] +zp[1]:5 [ plus::b_error_border ] +zp[1]:6 [ plus::b_error_bg ] +reg byte a [ main::$0 ] +reg byte a [ main::$1 ] +reg byte a [ plus::$0 ] +reg byte a [ plus::$1 ] +reg byte a [ plus::$2 ] +reg byte a [ plus::$3 ] +reg byte a [ plus::$4 ] +reg byte a [ plus::$5 ] +reg byte a [ plus::$6 ] +zp[1]:2 [ plus::return ] From c5f260e8826529cca9dbc4024814cd122b17f325 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Tue, 4 Apr 2023 09:30:40 +0200 Subject: [PATCH 24/66] Implemented C99 compatible union initializer method. - Added test cases. - Reworked parser. - Added code redesign to avoid crashes in Initializers.java. --- .../dk/camelot64/kickc/parser/KickCParser.g4 | 7 +- .../camelot64/kickc/model/Initializers.java | 30 ++++---- .../Pass0GenerateStatementSequence.java | 34 +++------ .../kickc/test/TestProgramsFast.java | 20 +++++ src/test/kc/union-10.c | 27 +++++++ src/test/kc/union-11.c | 27 +++++++ src/test/kc/union-12.c | 29 ++++++++ src/test/kc/union-9.c | 14 ++++ src/test/target/union-10.asm | 29 ++++++++ src/test/target/union-10.dbg | 67 +++++++++++++++++ src/test/target/union-10.klog | 23 ++++++ src/test/target/union-10.prg | Bin 0 -> 25 bytes src/test/target/union-10.sym | 4 + src/test/target/union-10.vs | 4 + src/test/target/union-11.asm | 30 ++++++++ src/test/target/union-11.dbg | 69 +++++++++++++++++ src/test/target/union-11.klog | 23 ++++++ src/test/target/union-11.prg | Bin 0 -> 25 bytes src/test/target/union-11.sym | 4 + src/test/target/union-11.vs | 4 + src/test/target/union-12.asm | 30 ++++++++ src/test/target/union-12.dbg | 70 ++++++++++++++++++ src/test/target/union-12.klog | 23 ++++++ src/test/target/union-12.prg | Bin 0 -> 25 bytes src/test/target/union-12.sym | 5 ++ src/test/target/union-12.vs | 5 ++ src/test/target/union-9.asm | 29 ++++++++ src/test/target/union-9.dbg | 67 +++++++++++++++++ src/test/target/union-9.klog | 23 ++++++ src/test/target/union-9.prg | Bin 0 -> 23 bytes src/test/target/union-9.sym | 4 + src/test/target/union-9.vs | 4 + 32 files changed, 663 insertions(+), 42 deletions(-) create mode 100644 src/test/kc/union-10.c create mode 100644 src/test/kc/union-11.c create mode 100644 src/test/kc/union-12.c create mode 100644 src/test/kc/union-9.c create mode 100644 src/test/target/union-10.asm create mode 100644 src/test/target/union-10.dbg create mode 100644 src/test/target/union-10.klog create mode 100644 src/test/target/union-10.prg create mode 100644 src/test/target/union-10.sym create mode 100644 src/test/target/union-10.vs create mode 100644 src/test/target/union-11.asm create mode 100644 src/test/target/union-11.dbg create mode 100644 src/test/target/union-11.klog create mode 100644 src/test/target/union-11.prg create mode 100644 src/test/target/union-11.sym create mode 100644 src/test/target/union-11.vs create mode 100644 src/test/target/union-12.asm create mode 100644 src/test/target/union-12.dbg create mode 100644 src/test/target/union-12.klog create mode 100644 src/test/target/union-12.prg create mode 100644 src/test/target/union-12.sym create mode 100644 src/test/target/union-12.vs create mode 100644 src/test/target/union-9.asm create mode 100644 src/test/target/union-9.dbg create mode 100644 src/test/target/union-9.klog create mode 100644 src/test/target/union-9.prg create mode 100644 src/test/target/union-9.sym create mode 100644 src/test/target/union-9.vs diff --git a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 index 67ceaeb59..83afa7132 100644 --- a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 +++ b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 @@ -217,12 +217,9 @@ commaExpr | commaExpr COMMA expr #commaSimple ; -initMemberExpr - : expr - ; initExpr - : (DOT initMemberExpr ASSIGN)? expr + : (DOT expr ASSIGN)? expr ; @@ -252,9 +249,9 @@ expr | expr ( '&&' ) expr #exprBinary | expr ( '||' ) expr #exprBinary | expr '?' expr COLON expr #exprTernary - | CURLY_BEGIN initExpr (COMMA initExpr )* COMMA? CURLY_END #initList | expr '=' expr #exprAssignment | expr ASSIGN_COMPOUND expr #exprAssignmentCompound + | CURLY_BEGIN initExpr (COMMA initExpr )* COMMA? CURLY_END #initList | NAME #exprId | NUMBER #exprNumber | STRING+ #exprString diff --git a/src/main/java/dk/camelot64/kickc/model/Initializers.java b/src/main/java/dk/camelot64/kickc/model/Initializers.java index f0592ba5f..6a67d0f9d 100644 --- a/src/main/java/dk/camelot64/kickc/model/Initializers.java +++ b/src/main/java/dk/camelot64/kickc/model/Initializers.java @@ -169,21 +169,25 @@ public class Initializers { for(int i = 0; i < structInitNeedSize; i++) { Variable memberDef = null; RValue memberValue = valueIt.next(); - String memberUnionName = ((ValueStructList)valueList).getMember(memberValue); - if(memberUnionName != null) { - boolean found = false; - while (memberDefIt.hasNext()) { - memberDef = memberDefIt.next(); - if (memberDef.getLocalName().contentEquals(memberUnionName)) { - found = true; - break; + if(structDefinition.isUnion()) { + String memberUnionName = ((ValueStructList)valueList).getMember(memberValue); + if(memberUnionName != null) { + boolean found = false; + while (memberDefIt.hasNext()) { + memberDef = memberDefIt.next(); + if (memberDef.getLocalName().contentEquals(memberUnionName)) { + found = true; + break; + } } + if (!found) + throw new CompileError( + "Union initializer cannot find member field " + memberUnionName + "\n" + + " Union initializer: " + valueList.toString(program), + source); + } else { + memberDef = memberDefIt.next(); } - if(!found) - throw new CompileError( - "Union initializer cannot find member field " + memberUnionName + "\n" + - " Union initializer: " + valueList.toString(program), - source); } else { memberDef = memberDefIt.next(); } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 78db33ba0..710723bd9 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -1913,38 +1913,24 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor initValues = new ArrayList<>(); - HashMap members = new HashMap<>(); - - String member = null; - if(ctx.initMemberExpr() != null) { - member = ctx.initMemberExpr().getText(); - } - return member; - } - @Override public RValue visitInitList(KickCParser.InitListContext ctx) { List initValues = new ArrayList<>(); - HashMap members = new HashMap<>(); + HashMap initDesignators = new HashMap<>(); for(KickCParser.InitExprContext initializer : ctx.initExpr()) { - RValue member = null; String initString = initializer.getText(); - if (initializer.initMemberExpr() != null) { - if(initializer.initMemberExpr().isEmpty() == false) { - member = (RValue) visit(initializer.initMemberExpr()); - } - } - RValue rValue = (RValue) visit(initializer.expr()); - initValues.add(rValue); - if(member!=null) { - members.put(rValue, member.toString()); + if (initializer.expr().size() == 2) { + RValue member = (RValue) visit(initializer.expr(0)); + RValue rValue = (RValue) visit(initializer.expr(1)); + initValues.add(rValue); + initDesignators.put(rValue, member.toString()); + } else { + RValue rValue = (RValue) visit(initializer.expr(0)); + initValues.add(rValue); } } - return new ValueStructList(members, initValues); + return new ValueStructList(initDesignators, initValues); } @Override diff --git a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java index c6cb04fe1..9a99f43fc 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java +++ b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java @@ -2541,6 +2541,26 @@ public class TestProgramsFast extends TestPrograms { compileAndCompare("weeip-bbslist.c"); } + @Test + public void testUnion12() throws IOException { + compileAndCompare("union-12.c"); + } + + @Test + public void testUnion11() throws IOException { + compileAndCompare("union-11.c"); + } + + @Test + public void testUnion10() throws IOException { + compileAndCompare("union-10.c"); + } + + @Test + public void testUnion9() throws IOException { + compileAndCompare("union-9.c"); + } + @Test public void testUnion8() throws IOException { compileAndCompare("union-8.c"); diff --git a/src/test/kc/union-10.c b/src/test/kc/union-10.c new file mode 100644 index 000000000..e05a9d461 --- /dev/null +++ b/src/test/kc/union-10.c @@ -0,0 +1,27 @@ +// More extensive union with C99 style designator initialization behaviour of the second element. + +struct Move { + char f; + char t; + char s; +}; + +struct Turn { + char t; + char s; + char r; + char d; +}; + +union Data { + struct Move m; + struct Turn t; +}; + +union Data data = { .t={1,2,3,4} }; + +char* const SCREEN = (char*)0x0400; + +void main() { + SCREEN[0] = data.m.f; +} \ No newline at end of file diff --git a/src/test/kc/union-11.c b/src/test/kc/union-11.c new file mode 100644 index 000000000..840f4c9a0 --- /dev/null +++ b/src/test/kc/union-11.c @@ -0,0 +1,27 @@ +// More extensive union with C99 style designator initialization behaviour of the first element. + +struct Move { + char f; + char t; + char s; +}; + +struct Turn { + char t; + char s; + char r; + char d; +}; + +union Data { + struct Move m; + struct Turn t; +}; + +union Data data = { .m={1,2,3} }; + +char* const SCREEN = (char*)0x0400; + +void main() { + SCREEN[0] = data.m.f; +} \ No newline at end of file diff --git a/src/test/kc/union-12.c b/src/test/kc/union-12.c new file mode 100644 index 000000000..a6e084637 --- /dev/null +++ b/src/test/kc/union-12.c @@ -0,0 +1,29 @@ +// More extensive union with C99 style designator initialization behaviour using const expressions. + +struct Move { + char f; + char t; + char s; +}; + +struct Turn { + char t; + char s; + char r; + char d; +}; + +union Data { + struct Move m; + struct Turn t; +}; + +const struct Move move = {1,2,3}; + +union Data data = { .m=move }; + +char* const SCREEN = (char*)0x0400; + +void main() { + SCREEN[0] = data.m.f; +} \ No newline at end of file diff --git a/src/test/kc/union-9.c b/src/test/kc/union-9.c new file mode 100644 index 000000000..bf7a6dd30 --- /dev/null +++ b/src/test/kc/union-9.c @@ -0,0 +1,14 @@ +// Minimal union with C99 style designator initialization behaviour. + +union Data { + char b; + unsigned w; +}; + +union Data data = { .w=1234 }; + +char* const SCREEN = (char*)0x0400; + +void main() { + SCREEN[0] = data.b; +} \ No newline at end of file diff --git a/src/test/target/union-10.asm b/src/test/target/union-10.asm new file mode 100644 index 000000000..a898e3900 --- /dev/null +++ b/src/test/target/union-10.asm @@ -0,0 +1,29 @@ + // File Comments +// More extensive union with C99 style designator initialization behaviour. + // Upstart +.cpu _65c02 + // Commodore 64 PRG executable file +.file [name="union-10.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // SCREEN[0] = data.m.f + // [0] *SCREEN = *((char *)(struct Move *)&data) -- _deref_pbuc1=_deref_pbuc2 + lda data + sta SCREEN + // main::@return + // } + // [1] return + rts +} + // File Data +.segment Data + data: .byte 1, 2, 3, 4 diff --git a/src/test/target/union-10.dbg b/src/test/target/union-10.dbg new file mode 100644 index 000000000..99af3ebc0 --- /dev/null +++ b/src/test/target/union-10.dbg @@ -0,0 +1,67 @@ + + + 0,KickAss.jar:/include/autoinclude.asm + 1,D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\target\union-10.asm + + + + + + + + $0801,$0802,0,38,2,38,6 + $0803,$0804,0,39,5,39,9 + $0805,$0805,0,40,5,40,9 + $0806,$0809,0,41,2,41,6 + $080a,$080a,0,42,2,42,6 + $080b,$080c,0,44,5,44,9 + + + $080d,$080f,1,20,5,20,7 + $0810,$0812,1,21,5,21,7 + $0813,$0813,1,25,5,25,7 + + + $0814,$0817,1,29,9,29,13 + + + + + + $0801,$0802,0,38,2,38,6 + $0803,$0804,0,39,5,39,9 + $0805,$0805,0,40,5,40,9 + $0806,$0809,0,41,2,41,6 + $080a,$080a,0,42,2,42,6 + $080b,$080c,0,44,5,44,9 + + + + + + $080d,$080f,1,20,5,20,7 + $0810,$0812,1,21,5,21,7 + $0813,$0813,1,25,5,25,7 + + + + + + $0814,$0817,1,29,9,29,13 + + + + + Basic,$0400,SCREEN,1,14,10,14,15 + Code,$080d,main,1,17,1,17,5 + Basic,$080b,upstartEnd,0,43,1,43,11 + Data,$0814,data,1,29,3,29,7 + + + + + + + + + diff --git a/src/test/target/union-10.klog b/src/test/target/union-10.klog new file mode 100644 index 000000000..b5a4ba607 --- /dev/null +++ b/src/test/target/union-10.klog @@ -0,0 +1,23 @@ +Output dir: D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\target +parsing +flex pass 1 +flex pass 2 +flex pass 3 +Output pass +Writing prg file: union-10.prg + +Memory Map +---------- +Program-segment: + +Basic-segment: + $0801-$080c Basic + +Code-segment: + $080d-$0813 Code + +Data-segment: + $0814-$0817 Data + +Writing Vice symbol file: union-10.vs +Writing Symbol file: union-10.sym diff --git a/src/test/target/union-10.prg b/src/test/target/union-10.prg new file mode 100644 index 0000000000000000000000000000000000000000..bacbff8bf49ae915b06bb999c7a6b464d4b8d650 GIT binary patch literal 25 gcmZSN;O5|Bm}g{QX2`(6uvUblmw_dLk%^fF04os#QUCw| literal 0 HcmV?d00001 diff --git a/src/test/target/union-10.sym b/src/test/target/union-10.sym new file mode 100644 index 000000000..31ed0e570 --- /dev/null +++ b/src/test/target/union-10.sym @@ -0,0 +1,4 @@ +.label SCREEN=$400 +.label data=$814 +.label main=$80d { +} diff --git a/src/test/target/union-10.vs b/src/test/target/union-10.vs new file mode 100644 index 000000000..32545d85b --- /dev/null +++ b/src/test/target/union-10.vs @@ -0,0 +1,4 @@ +al C:400 .SCREEN +al C:814 .data +al C:80b .upstartEnd +al C:80d .main diff --git a/src/test/target/union-11.asm b/src/test/target/union-11.asm new file mode 100644 index 000000000..84b7a2c30 --- /dev/null +++ b/src/test/target/union-11.asm @@ -0,0 +1,30 @@ + // File Comments +// More extensive union with C99 style designator initialization behaviour. + // Upstart +.cpu _65c02 + // Commodore 64 PRG executable file +.file [name="union-11.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // SCREEN[0] = data.m.f + // [0] *SCREEN = *((char *)(struct Move *)&data) -- _deref_pbuc1=_deref_pbuc2 + lda data + sta SCREEN + // main::@return + // } + // [1] return + rts +} + // File Data +.segment Data + data: .byte 1, 2, 3 + .fill 1, 0 diff --git a/src/test/target/union-11.dbg b/src/test/target/union-11.dbg new file mode 100644 index 000000000..aaf6eb026 --- /dev/null +++ b/src/test/target/union-11.dbg @@ -0,0 +1,69 @@ + + + 0,KickAss.jar:/include/autoinclude.asm + 1,D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\target\union-11.asm + + + + + + + + $0801,$0802,0,38,2,38,6 + $0803,$0804,0,39,5,39,9 + $0805,$0805,0,40,5,40,9 + $0806,$0809,0,41,2,41,6 + $080a,$080a,0,42,2,42,6 + $080b,$080c,0,44,5,44,9 + + + $080d,$080f,1,20,5,20,7 + $0810,$0812,1,21,5,21,7 + $0813,$0813,1,25,5,25,7 + + + $0814,$0816,1,29,9,29,13 + $0817,$0817,1,30,3,30,7 + + + + + + $0801,$0802,0,38,2,38,6 + $0803,$0804,0,39,5,39,9 + $0805,$0805,0,40,5,40,9 + $0806,$0809,0,41,2,41,6 + $080a,$080a,0,42,2,42,6 + $080b,$080c,0,44,5,44,9 + + + + + + $080d,$080f,1,20,5,20,7 + $0810,$0812,1,21,5,21,7 + $0813,$0813,1,25,5,25,7 + + + + + + $0814,$0816,1,29,9,29,13 + $0817,$0817,1,30,3,30,7 + + + + + Basic,$0400,SCREEN,1,14,10,14,15 + Code,$080d,main,1,17,1,17,5 + Basic,$080b,upstartEnd,0,43,1,43,11 + Data,$0814,data,1,29,3,29,7 + + + + + + + + + diff --git a/src/test/target/union-11.klog b/src/test/target/union-11.klog new file mode 100644 index 000000000..9a5e5debc --- /dev/null +++ b/src/test/target/union-11.klog @@ -0,0 +1,23 @@ +Output dir: D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\target +parsing +flex pass 1 +flex pass 2 +flex pass 3 +Output pass +Writing prg file: union-11.prg + +Memory Map +---------- +Program-segment: + +Basic-segment: + $0801-$080c Basic + +Code-segment: + $080d-$0813 Code + +Data-segment: + $0814-$0817 Data + +Writing Vice symbol file: union-11.vs +Writing Symbol file: union-11.sym diff --git a/src/test/target/union-11.prg b/src/test/target/union-11.prg new file mode 100644 index 0000000000000000000000000000000000000000..07026eb6d7251cc949380970b1145da09ac75e69 GIT binary patch literal 25 gcmZSN;O5|Bm}g{QX2`(6uvUblmw_dLk%^fB04ogxP5=M^ literal 0 HcmV?d00001 diff --git a/src/test/target/union-11.sym b/src/test/target/union-11.sym new file mode 100644 index 000000000..31ed0e570 --- /dev/null +++ b/src/test/target/union-11.sym @@ -0,0 +1,4 @@ +.label SCREEN=$400 +.label data=$814 +.label main=$80d { +} diff --git a/src/test/target/union-11.vs b/src/test/target/union-11.vs new file mode 100644 index 000000000..32545d85b --- /dev/null +++ b/src/test/target/union-11.vs @@ -0,0 +1,4 @@ +al C:400 .SCREEN +al C:814 .data +al C:80b .upstartEnd +al C:80d .main diff --git a/src/test/target/union-12.asm b/src/test/target/union-12.asm new file mode 100644 index 000000000..5986af0d8 --- /dev/null +++ b/src/test/target/union-12.asm @@ -0,0 +1,30 @@ + // File Comments +// More extensive union with C99 style designator initialization behaviour using const expressions. + // Upstart +.cpu _65c02 + // Commodore 64 PRG executable file +.file [name="union-12.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // SCREEN[0] = data.m.f + // [0] *SCREEN = *((char *)(struct Move *)&data) -- _deref_pbuc1=_deref_pbuc2 + lda data + sta SCREEN + // main::@return + // } + // [1] return + rts +} + // File Data +.segment Data + move: .byte 1, 2, 3 + data: .fill 1, 0 diff --git a/src/test/target/union-12.dbg b/src/test/target/union-12.dbg new file mode 100644 index 000000000..b88db7abd --- /dev/null +++ b/src/test/target/union-12.dbg @@ -0,0 +1,70 @@ + + + 0,KickAss.jar:/include/autoinclude.asm + 1,D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\target\union-12.asm + + + + + + + + $0801,$0802,0,38,2,38,6 + $0803,$0804,0,39,5,39,9 + $0805,$0805,0,40,5,40,9 + $0806,$0809,0,41,2,41,6 + $080a,$080a,0,42,2,42,6 + $080b,$080c,0,44,5,44,9 + + + $080d,$080f,1,20,5,20,7 + $0810,$0812,1,21,5,21,7 + $0813,$0813,1,25,5,25,7 + + + $0814,$0816,1,29,9,29,13 + $0817,$0817,1,30,9,30,13 + + + + + + $0801,$0802,0,38,2,38,6 + $0803,$0804,0,39,5,39,9 + $0805,$0805,0,40,5,40,9 + $0806,$0809,0,41,2,41,6 + $080a,$080a,0,42,2,42,6 + $080b,$080c,0,44,5,44,9 + + + + + + $080d,$080f,1,20,5,20,7 + $0810,$0812,1,21,5,21,7 + $0813,$0813,1,25,5,25,7 + + + + + + $0814,$0816,1,29,9,29,13 + $0817,$0817,1,30,9,30,13 + + + + + Basic,$0400,SCREEN,1,14,10,14,15 + Code,$080d,main,1,17,1,17,5 + Basic,$080b,upstartEnd,0,43,1,43,11 + Data,$0814,move,1,29,3,29,7 + Data,$0817,data,1,30,3,30,7 + + + + + + + + + diff --git a/src/test/target/union-12.klog b/src/test/target/union-12.klog new file mode 100644 index 000000000..6cf82c193 --- /dev/null +++ b/src/test/target/union-12.klog @@ -0,0 +1,23 @@ +Output dir: D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\target +parsing +flex pass 1 +flex pass 2 +flex pass 3 +Output pass +Writing prg file: union-12.prg + +Memory Map +---------- +Program-segment: + +Basic-segment: + $0801-$080c Basic + +Code-segment: + $080d-$0813 Code + +Data-segment: + $0814-$0817 Data + +Writing Vice symbol file: union-12.vs +Writing Symbol file: union-12.sym diff --git a/src/test/target/union-12.prg b/src/test/target/union-12.prg new file mode 100644 index 0000000000000000000000000000000000000000..1f4888480c543bfd0aceee329ecc9b4e8bb7c1f6 GIT binary patch literal 25 gcmZSN;O5|Bm}g{QX2`(6uvVO-mw_dLk%^fB04pm4Q2+n{ literal 0 HcmV?d00001 diff --git a/src/test/target/union-12.sym b/src/test/target/union-12.sym new file mode 100644 index 000000000..6702c90da --- /dev/null +++ b/src/test/target/union-12.sym @@ -0,0 +1,5 @@ +.label move=$814 +.label SCREEN=$400 +.label data=$817 +.label main=$80d { +} diff --git a/src/test/target/union-12.vs b/src/test/target/union-12.vs new file mode 100644 index 000000000..91239332d --- /dev/null +++ b/src/test/target/union-12.vs @@ -0,0 +1,5 @@ +al C:814 .move +al C:400 .SCREEN +al C:817 .data +al C:80b .upstartEnd +al C:80d .main diff --git a/src/test/target/union-9.asm b/src/test/target/union-9.asm new file mode 100644 index 000000000..2cb18040e --- /dev/null +++ b/src/test/target/union-9.asm @@ -0,0 +1,29 @@ + // File Comments +// Minimal union with C-Standard behavior + // Upstart +.cpu _65c02 + // Commodore 64 PRG executable file +.file [name="union-9.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // SCREEN[0] = data.b + // [0] *SCREEN = *((char *)&data) -- _deref_pbuc1=_deref_pbuc2 + lda data + sta SCREEN + // main::@return + // } + // [1] return + rts +} + // File Data +.segment Data + data: .word $4d2 diff --git a/src/test/target/union-9.dbg b/src/test/target/union-9.dbg new file mode 100644 index 000000000..4597299fe --- /dev/null +++ b/src/test/target/union-9.dbg @@ -0,0 +1,67 @@ + + + 0,KickAss.jar:/include/autoinclude.asm + 1,D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\target\union-9.asm + + + + + + + + $0801,$0802,0,38,2,38,6 + $0803,$0804,0,39,5,39,9 + $0805,$0805,0,40,5,40,9 + $0806,$0809,0,41,2,41,6 + $080a,$080a,0,42,2,42,6 + $080b,$080c,0,44,5,44,9 + + + $080d,$080f,1,20,5,20,7 + $0810,$0812,1,21,5,21,7 + $0813,$0813,1,25,5,25,7 + + + $0814,$0815,1,29,9,29,13 + + + + + + $0801,$0802,0,38,2,38,6 + $0803,$0804,0,39,5,39,9 + $0805,$0805,0,40,5,40,9 + $0806,$0809,0,41,2,41,6 + $080a,$080a,0,42,2,42,6 + $080b,$080c,0,44,5,44,9 + + + + + + $080d,$080f,1,20,5,20,7 + $0810,$0812,1,21,5,21,7 + $0813,$0813,1,25,5,25,7 + + + + + + $0814,$0815,1,29,9,29,13 + + + + + Basic,$0400,SCREEN,1,14,10,14,15 + Code,$080d,main,1,17,1,17,5 + Basic,$080b,upstartEnd,0,43,1,43,11 + Data,$0814,data,1,29,3,29,7 + + + + + + + + + diff --git a/src/test/target/union-9.klog b/src/test/target/union-9.klog new file mode 100644 index 000000000..35301049e --- /dev/null +++ b/src/test/target/union-9.klog @@ -0,0 +1,23 @@ +Output dir: D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\target +parsing +flex pass 1 +flex pass 2 +flex pass 3 +Output pass +Writing prg file: union-9.prg + +Memory Map +---------- +Program-segment: + +Basic-segment: + $0801-$080c Basic + +Code-segment: + $080d-$0813 Code + +Data-segment: + $0814-$0815 Data + +Writing Vice symbol file: union-9.vs +Writing Symbol file: union-9.sym diff --git a/src/test/target/union-9.prg b/src/test/target/union-9.prg new file mode 100644 index 0000000000000000000000000000000000000000..207b0b1639c879fd2d659a584d7fe097a8983ceb GIT binary patch literal 23 ecmZSN;O5|Bm}g{QX2`(6uvUblmw_eW5(@w(6$Bmt literal 0 HcmV?d00001 diff --git a/src/test/target/union-9.sym b/src/test/target/union-9.sym new file mode 100644 index 000000000..31ed0e570 --- /dev/null +++ b/src/test/target/union-9.sym @@ -0,0 +1,4 @@ +.label SCREEN=$400 +.label data=$814 +.label main=$80d { +} diff --git a/src/test/target/union-9.vs b/src/test/target/union-9.vs new file mode 100644 index 000000000..32545d85b --- /dev/null +++ b/src/test/target/union-9.vs @@ -0,0 +1,4 @@ +al C:400 .SCREEN +al C:814 .data +al C:80b .upstartEnd +al C:80d .main From 5c86d25057a79ec8cb6c1b5c257e4ff34b5c823a Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Tue, 4 Apr 2023 12:45:38 +0200 Subject: [PATCH 25/66] FlightControl fix for #678. --- .../dk/camelot64/kickc/parser/KickCParser.g4 | 11 +- ...ion-member-initialization-parsetree-test.c | 34 ---- .../camelot64/kickc/model/Initializers.java | 84 +++++---- .../values/ValueListUnionDesignator.java | 45 +++++ .../kickc/model/values/ValueStructList.java | 46 ----- .../Pass0GenerateStatementSequence.java | 23 +-- .../kickc/test/TestProgramsFast.java | 5 + src/test/kc/union-13.c | 20 ++ src/test/{target => ref}/union-10.asm | 11 +- src/test/ref/union-10.cfg | 8 + src/test/ref/union-10.log | 166 +++++++++++++++++ src/test/ref/union-10.sym | 5 + src/test/{target => ref}/union-11.asm | 11 +- src/test/ref/union-11.cfg | 8 + src/test/ref/union-11.log | 168 +++++++++++++++++ src/test/ref/union-11.sym | 5 + src/test/{target => ref}/union-12.asm | 9 - src/test/ref/union-12.cfg | 8 + src/test/ref/union-12.log | 170 +++++++++++++++++ src/test/ref/union-12.sym | 6 + src/test/ref/union-13.asm | 22 +++ src/test/ref/union-13.cfg | 8 + src/test/ref/union-13.log | 176 ++++++++++++++++++ src/test/ref/union-13.sym | 5 + src/test/{target => ref}/union-9.asm | 11 +- src/test/ref/union-9.cfg | 8 + src/test/ref/union-9.log | 159 ++++++++++++++++ src/test/ref/union-9.sym | 5 + src/test/target/union-10.dbg | 67 ------- src/test/target/union-10.klog | 23 --- src/test/target/union-10.prg | Bin 25 -> 0 bytes src/test/target/union-10.sym | 4 - src/test/target/union-10.vs | 4 - src/test/target/union-11.dbg | 69 ------- src/test/target/union-11.klog | 23 --- src/test/target/union-11.prg | Bin 25 -> 0 bytes src/test/target/union-11.sym | 4 - src/test/target/union-11.vs | 4 - src/test/target/union-12.dbg | 70 ------- src/test/target/union-12.klog | 23 --- src/test/target/union-12.prg | Bin 25 -> 0 bytes src/test/target/union-12.sym | 5 - src/test/target/union-12.vs | 5 - src/test/target/union-9.dbg | 67 ------- src/test/target/union-9.klog | 23 --- src/test/target/union-9.prg | Bin 23 -> 0 bytes src/test/target/union-9.sym | 4 - src/test/target/union-9.vs | 4 - 48 files changed, 1057 insertions(+), 579 deletions(-) delete mode 100644 src/main/antlr4/dk/camelot64/kickc/union-member-initialization-parsetree-test.c create mode 100644 src/main/java/dk/camelot64/kickc/model/values/ValueListUnionDesignator.java delete mode 100644 src/main/java/dk/camelot64/kickc/model/values/ValueStructList.java create mode 100644 src/test/kc/union-13.c rename src/test/{target => ref}/union-10.asm (68%) create mode 100644 src/test/ref/union-10.cfg create mode 100644 src/test/ref/union-10.log create mode 100644 src/test/ref/union-10.sym rename src/test/{target => ref}/union-11.asm (68%) create mode 100644 src/test/ref/union-11.cfg create mode 100644 src/test/ref/union-11.log create mode 100644 src/test/ref/union-11.sym rename src/test/{target => ref}/union-12.asm (71%) create mode 100644 src/test/ref/union-12.cfg create mode 100644 src/test/ref/union-12.log create mode 100644 src/test/ref/union-12.sym create mode 100644 src/test/ref/union-13.asm create mode 100644 src/test/ref/union-13.cfg create mode 100644 src/test/ref/union-13.log create mode 100644 src/test/ref/union-13.sym rename src/test/{target => ref}/union-9.asm (63%) create mode 100644 src/test/ref/union-9.cfg create mode 100644 src/test/ref/union-9.log create mode 100644 src/test/ref/union-9.sym delete mode 100644 src/test/target/union-10.dbg delete mode 100644 src/test/target/union-10.klog delete mode 100644 src/test/target/union-10.prg delete mode 100644 src/test/target/union-10.sym delete mode 100644 src/test/target/union-10.vs delete mode 100644 src/test/target/union-11.dbg delete mode 100644 src/test/target/union-11.klog delete mode 100644 src/test/target/union-11.prg delete mode 100644 src/test/target/union-11.sym delete mode 100644 src/test/target/union-11.vs delete mode 100644 src/test/target/union-12.dbg delete mode 100644 src/test/target/union-12.klog delete mode 100644 src/test/target/union-12.prg delete mode 100644 src/test/target/union-12.sym delete mode 100644 src/test/target/union-12.vs delete mode 100644 src/test/target/union-9.dbg delete mode 100644 src/test/target/union-9.klog delete mode 100644 src/test/target/union-9.prg delete mode 100644 src/test/target/union-9.sym delete mode 100644 src/test/target/union-9.vs diff --git a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 index 83afa7132..1a7e70da2 100644 --- a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 +++ b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 @@ -217,12 +217,6 @@ commaExpr | commaExpr COMMA expr #commaSimple ; - -initExpr - : (DOT expr ASSIGN)? expr - ; - - expr : PAR_BEGIN commaExpr PAR_END #exprPar | expr DOT NAME #exprDot @@ -249,9 +243,10 @@ expr | expr ( '&&' ) expr #exprBinary | expr ( '||' ) expr #exprBinary | expr '?' expr COLON expr #exprTernary - | expr '=' expr #exprAssignment + | expr ASSIGN expr #exprAssignment | expr ASSIGN_COMPOUND expr #exprAssignmentCompound - | CURLY_BEGIN initExpr (COMMA initExpr )* COMMA? CURLY_END #initList + | CURLY_BEGIN expr (COMMA expr )* COMMA? CURLY_END #initList + | CURLY_BEGIN DOT NAME ASSIGN expr CURLY_END #initUnion | NAME #exprId | NUMBER #exprNumber | STRING+ #exprString diff --git a/src/main/antlr4/dk/camelot64/kickc/union-member-initialization-parsetree-test.c b/src/main/antlr4/dk/camelot64/kickc/union-member-initialization-parsetree-test.c deleted file mode 100644 index cba4b102a..000000000 --- a/src/main/antlr4/dk/camelot64/kickc/union-member-initialization-parsetree-test.c +++ /dev/null @@ -1,34 +0,0 @@ -struct M { - unsigned int flight; - signed char turn; - unsigned char speed; -}; - -struct T { - signed char turn; - unsigned char radius; - unsigned char speed; -}; - -struct E { - unsigned char explode; -}; - -union A { - struct M move; - struct T turn; - struct E end; -}; - -struct F { - union A action; - unsigned char type; - unsigned char next; -}; - - -struct F action_flightpath_001[] = { - { .move={ action_move_00 }, STAGE_ACTION_MOVE, 1 }, - { { action_end } , STAGE_ACTION_END, 0 } -}; - diff --git a/src/main/java/dk/camelot64/kickc/model/Initializers.java b/src/main/java/dk/camelot64/kickc/model/Initializers.java index 6a67d0f9d..7fa86d102 100644 --- a/src/main/java/dk/camelot64/kickc/model/Initializers.java +++ b/src/main/java/dk/camelot64/kickc/model/Initializers.java @@ -159,51 +159,55 @@ public class Initializers { } } - boolean allConst = true; - // Constantified values in a list - List constantifiedList = new ArrayList<>(); - // Map filled if all member values become constant - LinkedHashMap constMemberMap = new LinkedHashMap<>(); - Iterator memberDefIt = memberDefinitions.iterator(); - Iterator valueIt = valueList.getList().iterator(); - for(int i = 0; i < structInitNeedSize; i++) { + if(valueList instanceof ValueListUnionDesignator) { + + ValueListUnionDesignator unionInit = (ValueListUnionDesignator) valueList; + final String memberName = unionInit.getMemberName(); + final RValue initValue = unionInit.getList().get(0); + Variable memberDef = null; - RValue memberValue = valueIt.next(); - if(structDefinition.isUnion()) { - String memberUnionName = ((ValueStructList)valueList).getMember(memberValue); - if(memberUnionName != null) { - boolean found = false; - while (memberDefIt.hasNext()) { - memberDef = memberDefIt.next(); - if (memberDef.getLocalName().contentEquals(memberUnionName)) { - found = true; - break; - } - } - if (!found) - throw new CompileError( - "Union initializer cannot find member field " + memberUnionName + "\n" + - " Union initializer: " + valueList.toString(program), - source); - } else { - memberDef = memberDefIt.next(); + for(Variable definition : memberDefinitions) { + if(definition.getLocalName().equals(memberName)) { + memberDef = definition; } - } else { - memberDef = memberDefIt.next(); } - RValue constantifiedMemberValue = constantify(memberValue, new ValueTypeSpec(memberDef.getType()), program, source); - constantifiedList.add(constantifiedMemberValue); - if(constantifiedMemberValue instanceof ConstantValue) + if(memberDef==null) + throw new CompileError( "Union member not found", source); + + RValue constantifiedMemberValue = constantify(initValue, new ValueTypeSpec(memberDef.getType()), program, source); + if(constantifiedMemberValue instanceof ConstantValue) { + LinkedHashMap constMemberMap = new LinkedHashMap<>(); constMemberMap.put(memberDef.getRef(), (ConstantValue) constantifiedMemberValue); - else - allConst = false; - } - if(allConst) { - // Constant struct - return new ConstantStructValue(structType, constMemberMap); + return new ConstantStructValue(structType, constMemberMap); + } else { + throw new CompileError( "Union initializer is not constant", source); + } } else { - // Constantified list with a cast - return new CastValue(structType, new ValueList(constantifiedList)); + boolean allConst = true; + // Constantified values in a list + List constantifiedList = new ArrayList<>(); + // Map filled if all member values become constant + LinkedHashMap constMemberMap = new LinkedHashMap<>(); + Iterator memberDefIt = memberDefinitions.iterator(); + Iterator valueIt = valueList.getList().iterator(); + for(int i = 0; i < structInitNeedSize; i++) { + Variable memberDef = memberDefIt.next(); + RValue memberValue = valueIt.next(); + RValue constantifiedMemberValue = constantify(memberValue, new ValueTypeSpec(memberDef.getType()), program, source); + constantifiedList.add(constantifiedMemberValue); + if(constantifiedMemberValue instanceof ConstantValue) + constMemberMap.put(memberDef.getRef(), (ConstantValue) constantifiedMemberValue); + else + allConst = false; + } + if(allConst) { + // Constant struct + return new ConstantStructValue(structType, constMemberMap); + } else { + // Constantified list with a cast + return new CastValue(structType, new ValueList(constantifiedList)); + } + } } diff --git a/src/main/java/dk/camelot64/kickc/model/values/ValueListUnionDesignator.java b/src/main/java/dk/camelot64/kickc/model/values/ValueListUnionDesignator.java new file mode 100644 index 000000000..3c6157b99 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/model/values/ValueListUnionDesignator.java @@ -0,0 +1,45 @@ +package dk.camelot64.kickc.model.values; + +import dk.camelot64.kickc.model.Program; + +import java.util.ArrayList; +import java.util.List; + +/** + * A union designator initializer. + *

+ * The init list will have length one. + */ +public class ValueListUnionDesignator extends ValueList { + + private String memberName; + + public ValueListUnionDesignator(String memberName, RValue rValue) { + super(asList(rValue)); + this.memberName = memberName; + } + + static List asList(RValue rValue) { + final ArrayList list = new ArrayList<>(); + list.add(rValue); + return list; + } + + public String getMemberName() { return memberName; } + + @Override + public String toString(Program program) { + StringBuilder out = new StringBuilder(); + out.append("{ "); + out.append(memberName); + out.append("="); + out.append(getList().get(0).toString(program)); + out.append(" }"); + return out.toString(); + } + + @Override + public String toString() { + return toString(null); + } +} diff --git a/src/main/java/dk/camelot64/kickc/model/values/ValueStructList.java b/src/main/java/dk/camelot64/kickc/model/values/ValueStructList.java deleted file mode 100644 index 0b389b174..000000000 --- a/src/main/java/dk/camelot64/kickc/model/values/ValueStructList.java +++ /dev/null @@ -1,46 +0,0 @@ -package dk.camelot64.kickc.model.values; - -import dk.camelot64.kickc.model.Program; - -import java.util.HashMap; -import java.util.List; - -/** - * A list of sub-values. - * Used for struct value initializers. - */ -public class ValueStructList extends ValueList { - - private HashMap members; - - public ValueStructList(HashMap members, List list) { - super(list); - this.members = members; - } - - public HashMap getMembers() { - return members; - } - public String getMember(RValue init) { return members.get(init); } - - @Override - public String toString(Program program) { - StringBuilder out = new StringBuilder(); - boolean first = true; - out.append("{ "); - for(RValue constantValue : getList()) { - if(!first) { - out.append(", "); - } - first = false; - out.append(constantValue.toString(program)); - } - out.append(" }"); - return out.toString(); - } - - @Override - public String toString() { - return toString(null); - } -} diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 710723bd9..4357e149c 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -1913,24 +1913,21 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor initValues = new ArrayList<>(); - HashMap initDesignators = new HashMap<>(); - - for(KickCParser.InitExprContext initializer : ctx.initExpr()) { - String initString = initializer.getText(); - if (initializer.expr().size() == 2) { - RValue member = (RValue) visit(initializer.expr(0)); - RValue rValue = (RValue) visit(initializer.expr(1)); - initValues.add(rValue); - initDesignators.put(rValue, member.toString()); - } else { - RValue rValue = (RValue) visit(initializer.expr(0)); + for(KickCParser.ExprContext initializer : ctx.expr()) { + RValue rValue = (RValue) visit(initializer); initValues.add(rValue); } - } - return new ValueStructList(initDesignators, initValues); + return new ValueList(initValues); } @Override diff --git a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java index 9a99f43fc..2fa4dc525 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java +++ b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java @@ -2541,6 +2541,11 @@ public class TestProgramsFast extends TestPrograms { compileAndCompare("weeip-bbslist.c"); } + @Test + public void testUnion13() throws IOException { + compileAndCompare("union-13.c"); + } + @Test public void testUnion12() throws IOException { compileAndCompare("union-12.c"); diff --git a/src/test/kc/union-13.c b/src/test/kc/union-13.c new file mode 100644 index 000000000..fbfb6d8f4 --- /dev/null +++ b/src/test/kc/union-13.c @@ -0,0 +1,20 @@ +// More extensive union with C99 style designator initialization behaviour using const expressions. + +union A { + unsigned char b; + unsigned int w; +}; + +union B { + union A a; + char b[4]; +}; + +union B b1 = { .a={ .b=1 } }; + + +char* const SCREEN = (char*)0x0400; + +void main() { + SCREEN[0] = b1.b[0]; +} \ No newline at end of file diff --git a/src/test/target/union-10.asm b/src/test/ref/union-10.asm similarity index 68% rename from src/test/target/union-10.asm rename to src/test/ref/union-10.asm index a898e3900..312006261 100644 --- a/src/test/target/union-10.asm +++ b/src/test/ref/union-10.asm @@ -1,7 +1,4 @@ - // File Comments -// More extensive union with C99 style designator initialization behaviour. - // Upstart -.cpu _65c02 +// More extensive union with C99 style designator initialization behaviour of the second element. // Commodore 64 PRG executable file .file [name="union-10.prg", type="prg", segments="Program"] .segmentdef Program [segments="Basic, Code, Data"] @@ -10,20 +7,14 @@ .segmentdef Data [startAfter="Code"] .segment Basic :BasicUpstart(main) - // Global Constants & labels .label SCREEN = $400 .segment Code - // main main: { // SCREEN[0] = data.m.f - // [0] *SCREEN = *((char *)(struct Move *)&data) -- _deref_pbuc1=_deref_pbuc2 lda data sta SCREEN - // main::@return // } - // [1] return rts } - // File Data .segment Data data: .byte 1, 2, 3, 4 diff --git a/src/test/ref/union-10.cfg b/src/test/ref/union-10.cfg new file mode 100644 index 000000000..16c9227d5 --- /dev/null +++ b/src/test/ref/union-10.cfg @@ -0,0 +1,8 @@ + +void main() +main: scope:[main] from + [0] *SCREEN = *((char *)(struct Move *)&data) + to:main::@return +main::@return: scope:[main] from main + [1] return + to:@return diff --git a/src/test/ref/union-10.log b/src/test/ref/union-10.log new file mode 100644 index 000000000..f48c5715f --- /dev/null +++ b/src/test/ref/union-10.log @@ -0,0 +1,166 @@ + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + SCREEN[0] = *((char *)(struct Move *)&data+OFFSET_UNION_DATA_M+OFFSET_STRUCT_MOVE_F) + to:main::@return +main::@return: scope:[main] from main + 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 +__constant char OFFSET_STRUCT_MOVE_F = 0 +__constant char OFFSET_UNION_DATA_M = 0 +__constant char * const SCREEN = (char *)$400 +void __start() +__loadstore union Data data = { t: { t: 1, s: 2, r: 3, d: 4 } } +void main() + +Adding number conversion cast (unumber) 0 in SCREEN[0] = *((char *)(struct Move *)&data+OFFSET_UNION_DATA_M+OFFSET_STRUCT_MOVE_F) +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Simplifying expression containing zero (char *)(struct Move *)&data+OFFSET_UNION_DATA_M in [0] SCREEN[0] = *((char *)(struct Move *)&data+OFFSET_UNION_DATA_M+OFFSET_STRUCT_MOVE_F) +Simplifying expression containing zero (struct Move *)&data in [0] SCREEN[0] = *((char *)(struct Move *)&data+OFFSET_UNION_DATA_M) +Simplifying expression containing zero SCREEN in [0] SCREEN[0] = *((char *)(struct Move *)&data) +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused constant OFFSET_UNION_DATA_M +Eliminating unused constant OFFSET_STRUCT_MOVE_F +Successful SSA optimization PassNEliminateUnusedVars +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 + +void main() +main: scope:[main] from + [0] *SCREEN = *((char *)(struct Move *)&data) + to:main::@return +main::@return: scope:[main] from main + [1] return + to:@return + + +VARIABLE REGISTER WEIGHTS +__loadstore union Data data = { t: { t: 1, s: 2, r: 3, d: 4 } } +void main() + +Initial phi equivalence classes +Added variable data to live range equivalence class [ data ] +Complete equivalence classes +[ data ] +Allocated mem[4] [ data ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] *SCREEN = *((char *)(struct Move *)&data) [ ] ( [ ] { } ) always clobbers reg byte a +Potential registers mem[4] [ data ] : mem[4] , + +REGISTER UPLIFT SCOPES +Uplift Scope [Move] +Uplift Scope [Turn] +Uplift Scope [Data] +Uplift Scope [main] +Uplift Scope [] 0: mem[4] [ data ] + +Uplifting [Move] best 17 combination +Uplifting [Turn] best 17 combination +Uplifting [Data] best 17 combination +Uplifting [main] best 17 combination +Uplifting [] best 17 combination mem[4] [ data ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// More extensive union with C99 style designator initialization behaviour of the second element. + // Upstart + // Commodore 64 PRG executable file +.file [name="union-10.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [0] *SCREEN = *((char *)(struct Move *)&data) -- _deref_pbuc1=_deref_pbuc2 + lda data + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [1] return + rts +} + // File Data +.segment Data + data: .byte 1, 2, 3, 4 + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +__loadstore union Data data = { t: { t: 1, s: 2, r: 3, d: 4 } } // mem[4] +void main() + +mem[4] [ data ] + + +FINAL ASSEMBLER +Score: 14 + + // File Comments +// More extensive union with C99 style designator initialization behaviour of the second element. + // Upstart + // Commodore 64 PRG executable file +.file [name="union-10.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // SCREEN[0] = data.m.f + // [0] *SCREEN = *((char *)(struct Move *)&data) -- _deref_pbuc1=_deref_pbuc2 + lda data + sta SCREEN + // main::@return + // } + // [1] return + rts +} + // File Data +.segment Data + data: .byte 1, 2, 3, 4 + diff --git a/src/test/ref/union-10.sym b/src/test/ref/union-10.sym new file mode 100644 index 000000000..74e440b35 --- /dev/null +++ b/src/test/ref/union-10.sym @@ -0,0 +1,5 @@ +__constant char * const SCREEN = (char *) 1024 +__loadstore union Data data = { t: { t: 1, s: 2, r: 3, d: 4 } } // mem[4] +void main() + +mem[4] [ data ] diff --git a/src/test/target/union-11.asm b/src/test/ref/union-11.asm similarity index 68% rename from src/test/target/union-11.asm rename to src/test/ref/union-11.asm index 84b7a2c30..8cc1f3211 100644 --- a/src/test/target/union-11.asm +++ b/src/test/ref/union-11.asm @@ -1,7 +1,4 @@ - // File Comments -// More extensive union with C99 style designator initialization behaviour. - // Upstart -.cpu _65c02 +// More extensive union with C99 style designator initialization behaviour of the first element. // Commodore 64 PRG executable file .file [name="union-11.prg", type="prg", segments="Program"] .segmentdef Program [segments="Basic, Code, Data"] @@ -10,21 +7,15 @@ .segmentdef Data [startAfter="Code"] .segment Basic :BasicUpstart(main) - // Global Constants & labels .label SCREEN = $400 .segment Code - // main main: { // SCREEN[0] = data.m.f - // [0] *SCREEN = *((char *)(struct Move *)&data) -- _deref_pbuc1=_deref_pbuc2 lda data sta SCREEN - // main::@return // } - // [1] return rts } - // File Data .segment Data data: .byte 1, 2, 3 .fill 1, 0 diff --git a/src/test/ref/union-11.cfg b/src/test/ref/union-11.cfg new file mode 100644 index 000000000..16c9227d5 --- /dev/null +++ b/src/test/ref/union-11.cfg @@ -0,0 +1,8 @@ + +void main() +main: scope:[main] from + [0] *SCREEN = *((char *)(struct Move *)&data) + to:main::@return +main::@return: scope:[main] from main + [1] return + to:@return diff --git a/src/test/ref/union-11.log b/src/test/ref/union-11.log new file mode 100644 index 000000000..a03a0dd9b --- /dev/null +++ b/src/test/ref/union-11.log @@ -0,0 +1,168 @@ + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + SCREEN[0] = *((char *)(struct Move *)&data+OFFSET_UNION_DATA_M+OFFSET_STRUCT_MOVE_F) + to:main::@return +main::@return: scope:[main] from main + 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 +__constant char OFFSET_STRUCT_MOVE_F = 0 +__constant char OFFSET_UNION_DATA_M = 0 +__constant char * const SCREEN = (char *)$400 +void __start() +__loadstore union Data data = { m: { f: 1, t: 2, s: 3 } } +void main() + +Adding number conversion cast (unumber) 0 in SCREEN[0] = *((char *)(struct Move *)&data+OFFSET_UNION_DATA_M+OFFSET_STRUCT_MOVE_F) +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Simplifying expression containing zero (char *)(struct Move *)&data+OFFSET_UNION_DATA_M in [0] SCREEN[0] = *((char *)(struct Move *)&data+OFFSET_UNION_DATA_M+OFFSET_STRUCT_MOVE_F) +Simplifying expression containing zero (struct Move *)&data in [0] SCREEN[0] = *((char *)(struct Move *)&data+OFFSET_UNION_DATA_M) +Simplifying expression containing zero SCREEN in [0] SCREEN[0] = *((char *)(struct Move *)&data) +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused constant OFFSET_UNION_DATA_M +Eliminating unused constant OFFSET_STRUCT_MOVE_F +Successful SSA optimization PassNEliminateUnusedVars +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 + +void main() +main: scope:[main] from + [0] *SCREEN = *((char *)(struct Move *)&data) + to:main::@return +main::@return: scope:[main] from main + [1] return + to:@return + + +VARIABLE REGISTER WEIGHTS +__loadstore union Data data = { m: { f: 1, t: 2, s: 3 } } +void main() + +Initial phi equivalence classes +Added variable data to live range equivalence class [ data ] +Complete equivalence classes +[ data ] +Allocated mem[4] [ data ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] *SCREEN = *((char *)(struct Move *)&data) [ ] ( [ ] { } ) always clobbers reg byte a +Potential registers mem[4] [ data ] : mem[4] , + +REGISTER UPLIFT SCOPES +Uplift Scope [Move] +Uplift Scope [Turn] +Uplift Scope [Data] +Uplift Scope [main] +Uplift Scope [] 0: mem[4] [ data ] + +Uplifting [Move] best 17 combination +Uplifting [Turn] best 17 combination +Uplifting [Data] best 17 combination +Uplifting [main] best 17 combination +Uplifting [] best 17 combination mem[4] [ data ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// More extensive union with C99 style designator initialization behaviour of the first element. + // Upstart + // Commodore 64 PRG executable file +.file [name="union-11.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [0] *SCREEN = *((char *)(struct Move *)&data) -- _deref_pbuc1=_deref_pbuc2 + lda data + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [1] return + rts +} + // File Data +.segment Data + data: .byte 1, 2, 3 + .fill 1, 0 + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +__loadstore union Data data = { m: { f: 1, t: 2, s: 3 } } // mem[4] +void main() + +mem[4] [ data ] + + +FINAL ASSEMBLER +Score: 14 + + // File Comments +// More extensive union with C99 style designator initialization behaviour of the first element. + // Upstart + // Commodore 64 PRG executable file +.file [name="union-11.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // SCREEN[0] = data.m.f + // [0] *SCREEN = *((char *)(struct Move *)&data) -- _deref_pbuc1=_deref_pbuc2 + lda data + sta SCREEN + // main::@return + // } + // [1] return + rts +} + // File Data +.segment Data + data: .byte 1, 2, 3 + .fill 1, 0 + diff --git a/src/test/ref/union-11.sym b/src/test/ref/union-11.sym new file mode 100644 index 000000000..65428d3de --- /dev/null +++ b/src/test/ref/union-11.sym @@ -0,0 +1,5 @@ +__constant char * const SCREEN = (char *) 1024 +__loadstore union Data data = { m: { f: 1, t: 2, s: 3 } } // mem[4] +void main() + +mem[4] [ data ] diff --git a/src/test/target/union-12.asm b/src/test/ref/union-12.asm similarity index 71% rename from src/test/target/union-12.asm rename to src/test/ref/union-12.asm index 5986af0d8..cd836e561 100644 --- a/src/test/target/union-12.asm +++ b/src/test/ref/union-12.asm @@ -1,7 +1,4 @@ - // File Comments // More extensive union with C99 style designator initialization behaviour using const expressions. - // Upstart -.cpu _65c02 // Commodore 64 PRG executable file .file [name="union-12.prg", type="prg", segments="Program"] .segmentdef Program [segments="Basic, Code, Data"] @@ -10,21 +7,15 @@ .segmentdef Data [startAfter="Code"] .segment Basic :BasicUpstart(main) - // Global Constants & labels .label SCREEN = $400 .segment Code - // main main: { // SCREEN[0] = data.m.f - // [0] *SCREEN = *((char *)(struct Move *)&data) -- _deref_pbuc1=_deref_pbuc2 lda data sta SCREEN - // main::@return // } - // [1] return rts } - // File Data .segment Data move: .byte 1, 2, 3 data: .fill 1, 0 diff --git a/src/test/ref/union-12.cfg b/src/test/ref/union-12.cfg new file mode 100644 index 000000000..16c9227d5 --- /dev/null +++ b/src/test/ref/union-12.cfg @@ -0,0 +1,8 @@ + +void main() +main: scope:[main] from + [0] *SCREEN = *((char *)(struct Move *)&data) + to:main::@return +main::@return: scope:[main] from main + [1] return + to:@return diff --git a/src/test/ref/union-12.log b/src/test/ref/union-12.log new file mode 100644 index 000000000..6d08ee7e8 --- /dev/null +++ b/src/test/ref/union-12.log @@ -0,0 +1,170 @@ + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + SCREEN[0] = *((char *)(struct Move *)&data+OFFSET_UNION_DATA_M+OFFSET_STRUCT_MOVE_F) + to:main::@return +main::@return: scope:[main] from main + 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 +__constant char OFFSET_STRUCT_MOVE_F = 0 +__constant char OFFSET_UNION_DATA_M = 0 +__constant char * const SCREEN = (char *)$400 +void __start() +__loadstore union Data data = { m: move } +void main() +__constant const struct Move move = { f: 1, t: 2, s: 3 } + +Adding number conversion cast (unumber) 0 in SCREEN[0] = *((char *)(struct Move *)&data+OFFSET_UNION_DATA_M+OFFSET_STRUCT_MOVE_F) +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Simplifying expression containing zero (char *)(struct Move *)&data+OFFSET_UNION_DATA_M in [0] SCREEN[0] = *((char *)(struct Move *)&data+OFFSET_UNION_DATA_M+OFFSET_STRUCT_MOVE_F) +Simplifying expression containing zero (struct Move *)&data in [0] SCREEN[0] = *((char *)(struct Move *)&data+OFFSET_UNION_DATA_M) +Simplifying expression containing zero SCREEN in [0] SCREEN[0] = *((char *)(struct Move *)&data) +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused constant OFFSET_UNION_DATA_M +Eliminating unused constant OFFSET_STRUCT_MOVE_F +Successful SSA optimization PassNEliminateUnusedVars +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 + +void main() +main: scope:[main] from + [0] *SCREEN = *((char *)(struct Move *)&data) + to:main::@return +main::@return: scope:[main] from main + [1] return + to:@return + + +VARIABLE REGISTER WEIGHTS +__loadstore union Data data = { m: move } +void main() + +Initial phi equivalence classes +Added variable data to live range equivalence class [ data ] +Complete equivalence classes +[ data ] +Allocated mem[4] [ data ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] *SCREEN = *((char *)(struct Move *)&data) [ ] ( [ ] { } ) always clobbers reg byte a +Potential registers mem[4] [ data ] : mem[4] , + +REGISTER UPLIFT SCOPES +Uplift Scope [Move] +Uplift Scope [Turn] +Uplift Scope [Data] +Uplift Scope [main] +Uplift Scope [] 0: mem[4] [ data ] + +Uplifting [Move] best 17 combination +Uplifting [Turn] best 17 combination +Uplifting [Data] best 17 combination +Uplifting [main] best 17 combination +Uplifting [] best 17 combination mem[4] [ data ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// More extensive union with C99 style designator initialization behaviour using const expressions. + // Upstart + // Commodore 64 PRG executable file +.file [name="union-12.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [0] *SCREEN = *((char *)(struct Move *)&data) -- _deref_pbuc1=_deref_pbuc2 + lda data + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [1] return + rts +} + // File Data +.segment Data + move: .byte 1, 2, 3 + data: .fill 1, 0 + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +__loadstore union Data data = { m: move } // mem[4] +void main() +__constant const struct Move move = { f: 1, t: 2, s: 3 } + +mem[4] [ data ] + + +FINAL ASSEMBLER +Score: 14 + + // File Comments +// More extensive union with C99 style designator initialization behaviour using const expressions. + // Upstart + // Commodore 64 PRG executable file +.file [name="union-12.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // SCREEN[0] = data.m.f + // [0] *SCREEN = *((char *)(struct Move *)&data) -- _deref_pbuc1=_deref_pbuc2 + lda data + sta SCREEN + // main::@return + // } + // [1] return + rts +} + // File Data +.segment Data + move: .byte 1, 2, 3 + data: .fill 1, 0 + diff --git a/src/test/ref/union-12.sym b/src/test/ref/union-12.sym new file mode 100644 index 000000000..262c82268 --- /dev/null +++ b/src/test/ref/union-12.sym @@ -0,0 +1,6 @@ +__constant char * const SCREEN = (char *) 1024 +__loadstore union Data data = { m: move } // mem[4] +void main() +__constant const struct Move move = { f: 1, t: 2, s: 3 } + +mem[4] [ data ] diff --git a/src/test/ref/union-13.asm b/src/test/ref/union-13.asm new file mode 100644 index 000000000..523f3d619 --- /dev/null +++ b/src/test/ref/union-13.asm @@ -0,0 +1,22 @@ +// More extensive union with C99 style designator initialization behaviour using const expressions. + // Commodore 64 PRG executable file +.file [name="union-13.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + .label SCREEN = $400 +.segment Code +main: { + // SCREEN[0] = b1.b[0] + lda b1 + sta SCREEN + // } + rts +} +.segment Data + b1: .byte 1 + .fill 1, 0 + .fill 2, 0 diff --git a/src/test/ref/union-13.cfg b/src/test/ref/union-13.cfg new file mode 100644 index 000000000..067c8eda8 --- /dev/null +++ b/src/test/ref/union-13.cfg @@ -0,0 +1,8 @@ + +void main() +main: scope:[main] from + [0] *SCREEN = *((char *)&b1) + to:main::@return +main::@return: scope:[main] from main + [1] return + to:@return diff --git a/src/test/ref/union-13.log b/src/test/ref/union-13.log new file mode 100644 index 000000000..70ec969ae --- /dev/null +++ b/src/test/ref/union-13.log @@ -0,0 +1,176 @@ +Fixing struct type size union B to 4 +Fixing struct type size union B to 4 +Fixing struct type SIZE_OF union B to 4 +Fixing struct type SIZE_OF union B to 4 + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + SCREEN[0] = ((char *)&b1+OFFSET_UNION_B_B)[0] + to:main::@return +main::@return: scope:[main] from main + 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 +__constant char OFFSET_UNION_B_B = 0 +__constant char * const SCREEN = (char *)$400 +void __start() +__loadstore union B b1 = { a: { b: 1 } } +void main() + +Adding number conversion cast (unumber) 0 in SCREEN[0] = ((char *)&b1+OFFSET_UNION_B_B)[0] +Adding number conversion cast (unumber) 0 in SCREEN[0] = ((char *)&b1+OFFSET_UNION_B_B)[(unumber)0] +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Simplifying expression containing zero (char *)&b1+OFFSET_UNION_B_B in [0] SCREEN[0] = ((char *)&b1+OFFSET_UNION_B_B)[0] +Simplifying expression containing zero (char *)&b1 in [0] SCREEN[0] = *((char *)&b1+OFFSET_UNION_B_B) +Simplifying expression containing zero SCREEN in [0] SCREEN[0] = *((char *)&b1) +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused constant OFFSET_UNION_B_B +Successful SSA optimization PassNEliminateUnusedVars +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 +Finalized unsigned number type (char) 4 +Finalized unsigned number type (char) 4 +Successful SSA optimization PassNFinalizeNumberTypeConversions +CALL GRAPH + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] *SCREEN = *((char *)&b1) + to:main::@return +main::@return: scope:[main] from main + [1] return + to:@return + + +VARIABLE REGISTER WEIGHTS +__loadstore union B b1 = { a: { b: 1 } } +void main() + +Initial phi equivalence classes +Added variable b1 to live range equivalence class [ b1 ] +Complete equivalence classes +[ b1 ] +Allocated mem[4] [ b1 ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] *SCREEN = *((char *)&b1) [ ] ( [ ] { } ) always clobbers reg byte a +Potential registers mem[4] [ b1 ] : mem[4] , + +REGISTER UPLIFT SCOPES +Uplift Scope [A] +Uplift Scope [B] +Uplift Scope [main] +Uplift Scope [] 0: mem[4] [ b1 ] + +Uplifting [A] best 17 combination +Uplifting [B] best 17 combination +Uplifting [main] best 17 combination +Uplifting [] best 17 combination mem[4] [ b1 ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// More extensive union with C99 style designator initialization behaviour using const expressions. + // Upstart + // Commodore 64 PRG executable file +.file [name="union-13.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [0] *SCREEN = *((char *)&b1) -- _deref_pbuc1=_deref_pbuc2 + lda b1 + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [1] return + rts +} + // File Data +.segment Data + b1: .byte 1 + .fill 1, 0 + .fill 2, 0 + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +__loadstore union B b1 = { a: { b: 1 } } // mem[4] +void main() + +mem[4] [ b1 ] + + +FINAL ASSEMBLER +Score: 14 + + // File Comments +// More extensive union with C99 style designator initialization behaviour using const expressions. + // Upstart + // Commodore 64 PRG executable file +.file [name="union-13.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // SCREEN[0] = b1.b[0] + // [0] *SCREEN = *((char *)&b1) -- _deref_pbuc1=_deref_pbuc2 + lda b1 + sta SCREEN + // main::@return + // } + // [1] return + rts +} + // File Data +.segment Data + b1: .byte 1 + .fill 1, 0 + .fill 2, 0 + diff --git a/src/test/ref/union-13.sym b/src/test/ref/union-13.sym new file mode 100644 index 000000000..12c6996e2 --- /dev/null +++ b/src/test/ref/union-13.sym @@ -0,0 +1,5 @@ +__constant char * const SCREEN = (char *) 1024 +__loadstore union B b1 = { a: { b: 1 } } // mem[4] +void main() + +mem[4] [ b1 ] diff --git a/src/test/target/union-9.asm b/src/test/ref/union-9.asm similarity index 63% rename from src/test/target/union-9.asm rename to src/test/ref/union-9.asm index 2cb18040e..7963534cd 100644 --- a/src/test/target/union-9.asm +++ b/src/test/ref/union-9.asm @@ -1,7 +1,4 @@ - // File Comments -// Minimal union with C-Standard behavior - // Upstart -.cpu _65c02 +// Minimal union with C99 style designator initialization behaviour. // Commodore 64 PRG executable file .file [name="union-9.prg", type="prg", segments="Program"] .segmentdef Program [segments="Basic, Code, Data"] @@ -10,20 +7,14 @@ .segmentdef Data [startAfter="Code"] .segment Basic :BasicUpstart(main) - // Global Constants & labels .label SCREEN = $400 .segment Code - // main main: { // SCREEN[0] = data.b - // [0] *SCREEN = *((char *)&data) -- _deref_pbuc1=_deref_pbuc2 lda data sta SCREEN - // main::@return // } - // [1] return rts } - // File Data .segment Data data: .word $4d2 diff --git a/src/test/ref/union-9.cfg b/src/test/ref/union-9.cfg new file mode 100644 index 000000000..dcb6487cf --- /dev/null +++ b/src/test/ref/union-9.cfg @@ -0,0 +1,8 @@ + +void main() +main: scope:[main] from + [0] *SCREEN = *((char *)&data) + to:main::@return +main::@return: scope:[main] from main + [1] return + to:@return diff --git a/src/test/ref/union-9.log b/src/test/ref/union-9.log new file mode 100644 index 000000000..7f4e6a7d1 --- /dev/null +++ b/src/test/ref/union-9.log @@ -0,0 +1,159 @@ + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + SCREEN[0] = *((char *)&data+OFFSET_UNION_DATA_B) + to:main::@return +main::@return: scope:[main] from main + 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 +__constant char OFFSET_UNION_DATA_B = 0 +__constant char * const SCREEN = (char *)$400 +void __start() +__loadstore union Data data = { w: $4d2 } +void main() + +Adding number conversion cast (unumber) 0 in SCREEN[0] = *((char *)&data+OFFSET_UNION_DATA_B) +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Simplifying expression containing zero (char *)&data in [0] SCREEN[0] = *((char *)&data+OFFSET_UNION_DATA_B) +Simplifying expression containing zero SCREEN in [0] SCREEN[0] = *((char *)&data) +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused constant OFFSET_UNION_DATA_B +Successful SSA optimization PassNEliminateUnusedVars +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 + +void main() +main: scope:[main] from + [0] *SCREEN = *((char *)&data) + to:main::@return +main::@return: scope:[main] from main + [1] return + to:@return + + +VARIABLE REGISTER WEIGHTS +__loadstore union Data data = { w: $4d2 } +void main() + +Initial phi equivalence classes +Added variable data to live range equivalence class [ data ] +Complete equivalence classes +[ data ] +Allocated mem[2] [ data ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] *SCREEN = *((char *)&data) [ ] ( [ ] { } ) always clobbers reg byte a +Potential registers mem[2] [ data ] : mem[2] , + +REGISTER UPLIFT SCOPES +Uplift Scope [Data] +Uplift Scope [main] +Uplift Scope [] 0: mem[2] [ data ] + +Uplifting [Data] best 17 combination +Uplifting [main] best 17 combination +Uplifting [] best 17 combination mem[2] [ data ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Minimal union with C99 style designator initialization behaviour. + // Upstart + // Commodore 64 PRG executable file +.file [name="union-9.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [0] *SCREEN = *((char *)&data) -- _deref_pbuc1=_deref_pbuc2 + lda data + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [1] return + rts +} + // File Data +.segment Data + data: .word $4d2 + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +__loadstore union Data data = { w: $4d2 } // mem[2] +void main() + +mem[2] [ data ] + + +FINAL ASSEMBLER +Score: 14 + + // File Comments +// Minimal union with C99 style designator initialization behaviour. + // Upstart + // Commodore 64 PRG executable file +.file [name="union-9.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // SCREEN[0] = data.b + // [0] *SCREEN = *((char *)&data) -- _deref_pbuc1=_deref_pbuc2 + lda data + sta SCREEN + // main::@return + // } + // [1] return + rts +} + // File Data +.segment Data + data: .word $4d2 + diff --git a/src/test/ref/union-9.sym b/src/test/ref/union-9.sym new file mode 100644 index 000000000..3f15e7831 --- /dev/null +++ b/src/test/ref/union-9.sym @@ -0,0 +1,5 @@ +__constant char * const SCREEN = (char *) 1024 +__loadstore union Data data = { w: $4d2 } // mem[2] +void main() + +mem[2] [ data ] diff --git a/src/test/target/union-10.dbg b/src/test/target/union-10.dbg deleted file mode 100644 index 99af3ebc0..000000000 --- a/src/test/target/union-10.dbg +++ /dev/null @@ -1,67 +0,0 @@ - - - 0,KickAss.jar:/include/autoinclude.asm - 1,D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\target\union-10.asm - - - - - - - - $0801,$0802,0,38,2,38,6 - $0803,$0804,0,39,5,39,9 - $0805,$0805,0,40,5,40,9 - $0806,$0809,0,41,2,41,6 - $080a,$080a,0,42,2,42,6 - $080b,$080c,0,44,5,44,9 - - - $080d,$080f,1,20,5,20,7 - $0810,$0812,1,21,5,21,7 - $0813,$0813,1,25,5,25,7 - - - $0814,$0817,1,29,9,29,13 - - - - - - $0801,$0802,0,38,2,38,6 - $0803,$0804,0,39,5,39,9 - $0805,$0805,0,40,5,40,9 - $0806,$0809,0,41,2,41,6 - $080a,$080a,0,42,2,42,6 - $080b,$080c,0,44,5,44,9 - - - - - - $080d,$080f,1,20,5,20,7 - $0810,$0812,1,21,5,21,7 - $0813,$0813,1,25,5,25,7 - - - - - - $0814,$0817,1,29,9,29,13 - - - - - Basic,$0400,SCREEN,1,14,10,14,15 - Code,$080d,main,1,17,1,17,5 - Basic,$080b,upstartEnd,0,43,1,43,11 - Data,$0814,data,1,29,3,29,7 - - - - - - - - - diff --git a/src/test/target/union-10.klog b/src/test/target/union-10.klog deleted file mode 100644 index b5a4ba607..000000000 --- a/src/test/target/union-10.klog +++ /dev/null @@ -1,23 +0,0 @@ -Output dir: D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\target -parsing -flex pass 1 -flex pass 2 -flex pass 3 -Output pass -Writing prg file: union-10.prg - -Memory Map ----------- -Program-segment: - -Basic-segment: - $0801-$080c Basic - -Code-segment: - $080d-$0813 Code - -Data-segment: - $0814-$0817 Data - -Writing Vice symbol file: union-10.vs -Writing Symbol file: union-10.sym diff --git a/src/test/target/union-10.prg b/src/test/target/union-10.prg deleted file mode 100644 index bacbff8bf49ae915b06bb999c7a6b464d4b8d650..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25 gcmZSN;O5|Bm}g{QX2`(6uvUblmw_dLk%^fF04os#QUCw| diff --git a/src/test/target/union-10.sym b/src/test/target/union-10.sym deleted file mode 100644 index 31ed0e570..000000000 --- a/src/test/target/union-10.sym +++ /dev/null @@ -1,4 +0,0 @@ -.label SCREEN=$400 -.label data=$814 -.label main=$80d { -} diff --git a/src/test/target/union-10.vs b/src/test/target/union-10.vs deleted file mode 100644 index 32545d85b..000000000 --- a/src/test/target/union-10.vs +++ /dev/null @@ -1,4 +0,0 @@ -al C:400 .SCREEN -al C:814 .data -al C:80b .upstartEnd -al C:80d .main diff --git a/src/test/target/union-11.dbg b/src/test/target/union-11.dbg deleted file mode 100644 index aaf6eb026..000000000 --- a/src/test/target/union-11.dbg +++ /dev/null @@ -1,69 +0,0 @@ - - - 0,KickAss.jar:/include/autoinclude.asm - 1,D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\target\union-11.asm - - - - - - - - $0801,$0802,0,38,2,38,6 - $0803,$0804,0,39,5,39,9 - $0805,$0805,0,40,5,40,9 - $0806,$0809,0,41,2,41,6 - $080a,$080a,0,42,2,42,6 - $080b,$080c,0,44,5,44,9 - - - $080d,$080f,1,20,5,20,7 - $0810,$0812,1,21,5,21,7 - $0813,$0813,1,25,5,25,7 - - - $0814,$0816,1,29,9,29,13 - $0817,$0817,1,30,3,30,7 - - - - - - $0801,$0802,0,38,2,38,6 - $0803,$0804,0,39,5,39,9 - $0805,$0805,0,40,5,40,9 - $0806,$0809,0,41,2,41,6 - $080a,$080a,0,42,2,42,6 - $080b,$080c,0,44,5,44,9 - - - - - - $080d,$080f,1,20,5,20,7 - $0810,$0812,1,21,5,21,7 - $0813,$0813,1,25,5,25,7 - - - - - - $0814,$0816,1,29,9,29,13 - $0817,$0817,1,30,3,30,7 - - - - - Basic,$0400,SCREEN,1,14,10,14,15 - Code,$080d,main,1,17,1,17,5 - Basic,$080b,upstartEnd,0,43,1,43,11 - Data,$0814,data,1,29,3,29,7 - - - - - - - - - diff --git a/src/test/target/union-11.klog b/src/test/target/union-11.klog deleted file mode 100644 index 9a5e5debc..000000000 --- a/src/test/target/union-11.klog +++ /dev/null @@ -1,23 +0,0 @@ -Output dir: D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\target -parsing -flex pass 1 -flex pass 2 -flex pass 3 -Output pass -Writing prg file: union-11.prg - -Memory Map ----------- -Program-segment: - -Basic-segment: - $0801-$080c Basic - -Code-segment: - $080d-$0813 Code - -Data-segment: - $0814-$0817 Data - -Writing Vice symbol file: union-11.vs -Writing Symbol file: union-11.sym diff --git a/src/test/target/union-11.prg b/src/test/target/union-11.prg deleted file mode 100644 index 07026eb6d7251cc949380970b1145da09ac75e69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25 gcmZSN;O5|Bm}g{QX2`(6uvUblmw_dLk%^fB04ogxP5=M^ diff --git a/src/test/target/union-11.sym b/src/test/target/union-11.sym deleted file mode 100644 index 31ed0e570..000000000 --- a/src/test/target/union-11.sym +++ /dev/null @@ -1,4 +0,0 @@ -.label SCREEN=$400 -.label data=$814 -.label main=$80d { -} diff --git a/src/test/target/union-11.vs b/src/test/target/union-11.vs deleted file mode 100644 index 32545d85b..000000000 --- a/src/test/target/union-11.vs +++ /dev/null @@ -1,4 +0,0 @@ -al C:400 .SCREEN -al C:814 .data -al C:80b .upstartEnd -al C:80d .main diff --git a/src/test/target/union-12.dbg b/src/test/target/union-12.dbg deleted file mode 100644 index b88db7abd..000000000 --- a/src/test/target/union-12.dbg +++ /dev/null @@ -1,70 +0,0 @@ - - - 0,KickAss.jar:/include/autoinclude.asm - 1,D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\target\union-12.asm - - - - - - - - $0801,$0802,0,38,2,38,6 - $0803,$0804,0,39,5,39,9 - $0805,$0805,0,40,5,40,9 - $0806,$0809,0,41,2,41,6 - $080a,$080a,0,42,2,42,6 - $080b,$080c,0,44,5,44,9 - - - $080d,$080f,1,20,5,20,7 - $0810,$0812,1,21,5,21,7 - $0813,$0813,1,25,5,25,7 - - - $0814,$0816,1,29,9,29,13 - $0817,$0817,1,30,9,30,13 - - - - - - $0801,$0802,0,38,2,38,6 - $0803,$0804,0,39,5,39,9 - $0805,$0805,0,40,5,40,9 - $0806,$0809,0,41,2,41,6 - $080a,$080a,0,42,2,42,6 - $080b,$080c,0,44,5,44,9 - - - - - - $080d,$080f,1,20,5,20,7 - $0810,$0812,1,21,5,21,7 - $0813,$0813,1,25,5,25,7 - - - - - - $0814,$0816,1,29,9,29,13 - $0817,$0817,1,30,9,30,13 - - - - - Basic,$0400,SCREEN,1,14,10,14,15 - Code,$080d,main,1,17,1,17,5 - Basic,$080b,upstartEnd,0,43,1,43,11 - Data,$0814,move,1,29,3,29,7 - Data,$0817,data,1,30,3,30,7 - - - - - - - - - diff --git a/src/test/target/union-12.klog b/src/test/target/union-12.klog deleted file mode 100644 index 6cf82c193..000000000 --- a/src/test/target/union-12.klog +++ /dev/null @@ -1,23 +0,0 @@ -Output dir: D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\target -parsing -flex pass 1 -flex pass 2 -flex pass 3 -Output pass -Writing prg file: union-12.prg - -Memory Map ----------- -Program-segment: - -Basic-segment: - $0801-$080c Basic - -Code-segment: - $080d-$0813 Code - -Data-segment: - $0814-$0817 Data - -Writing Vice symbol file: union-12.vs -Writing Symbol file: union-12.sym diff --git a/src/test/target/union-12.prg b/src/test/target/union-12.prg deleted file mode 100644 index 1f4888480c543bfd0aceee329ecc9b4e8bb7c1f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25 gcmZSN;O5|Bm}g{QX2`(6uvVO-mw_dLk%^fB04pm4Q2+n{ diff --git a/src/test/target/union-12.sym b/src/test/target/union-12.sym deleted file mode 100644 index 6702c90da..000000000 --- a/src/test/target/union-12.sym +++ /dev/null @@ -1,5 +0,0 @@ -.label move=$814 -.label SCREEN=$400 -.label data=$817 -.label main=$80d { -} diff --git a/src/test/target/union-12.vs b/src/test/target/union-12.vs deleted file mode 100644 index 91239332d..000000000 --- a/src/test/target/union-12.vs +++ /dev/null @@ -1,5 +0,0 @@ -al C:814 .move -al C:400 .SCREEN -al C:817 .data -al C:80b .upstartEnd -al C:80d .main diff --git a/src/test/target/union-9.dbg b/src/test/target/union-9.dbg deleted file mode 100644 index 4597299fe..000000000 --- a/src/test/target/union-9.dbg +++ /dev/null @@ -1,67 +0,0 @@ - - - 0,KickAss.jar:/include/autoinclude.asm - 1,D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\target\union-9.asm - - - - - - - - $0801,$0802,0,38,2,38,6 - $0803,$0804,0,39,5,39,9 - $0805,$0805,0,40,5,40,9 - $0806,$0809,0,41,2,41,6 - $080a,$080a,0,42,2,42,6 - $080b,$080c,0,44,5,44,9 - - - $080d,$080f,1,20,5,20,7 - $0810,$0812,1,21,5,21,7 - $0813,$0813,1,25,5,25,7 - - - $0814,$0815,1,29,9,29,13 - - - - - - $0801,$0802,0,38,2,38,6 - $0803,$0804,0,39,5,39,9 - $0805,$0805,0,40,5,40,9 - $0806,$0809,0,41,2,41,6 - $080a,$080a,0,42,2,42,6 - $080b,$080c,0,44,5,44,9 - - - - - - $080d,$080f,1,20,5,20,7 - $0810,$0812,1,21,5,21,7 - $0813,$0813,1,25,5,25,7 - - - - - - $0814,$0815,1,29,9,29,13 - - - - - Basic,$0400,SCREEN,1,14,10,14,15 - Code,$080d,main,1,17,1,17,5 - Basic,$080b,upstartEnd,0,43,1,43,11 - Data,$0814,data,1,29,3,29,7 - - - - - - - - - diff --git a/src/test/target/union-9.klog b/src/test/target/union-9.klog deleted file mode 100644 index 35301049e..000000000 --- a/src/test/target/union-9.klog +++ /dev/null @@ -1,23 +0,0 @@ -Output dir: D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\target -parsing -flex pass 1 -flex pass 2 -flex pass 3 -Output pass -Writing prg file: union-9.prg - -Memory Map ----------- -Program-segment: - -Basic-segment: - $0801-$080c Basic - -Code-segment: - $080d-$0813 Code - -Data-segment: - $0814-$0815 Data - -Writing Vice symbol file: union-9.vs -Writing Symbol file: union-9.sym diff --git a/src/test/target/union-9.prg b/src/test/target/union-9.prg deleted file mode 100644 index 207b0b1639c879fd2d659a584d7fe097a8983ceb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23 ecmZSN;O5|Bm}g{QX2`(6uvUblmw_eW5(@w(6$Bmt diff --git a/src/test/target/union-9.sym b/src/test/target/union-9.sym deleted file mode 100644 index 31ed0e570..000000000 --- a/src/test/target/union-9.sym +++ /dev/null @@ -1,4 +0,0 @@ -.label SCREEN=$400 -.label data=$814 -.label main=$80d { -} diff --git a/src/test/target/union-9.vs b/src/test/target/union-9.vs deleted file mode 100644 index 32545d85b..000000000 --- a/src/test/target/union-9.vs +++ /dev/null @@ -1,4 +0,0 @@ -al C:400 .SCREEN -al C:814 .data -al C:80b .upstartEnd -al C:80d .main From 3c52043744cd848479d333addf8e23ba57e978ba Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Tue, 4 Apr 2023 12:54:28 +0200 Subject: [PATCH 26/66] FlightControl fix for #678. --- src/main/java/dk/camelot64/kickc/model/Initializers.java | 2 +- .../kickc/model/values/ValueListUnionDesignator.java | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/dk/camelot64/kickc/model/Initializers.java b/src/main/java/dk/camelot64/kickc/model/Initializers.java index 7fa86d102..d5b5789a3 100644 --- a/src/main/java/dk/camelot64/kickc/model/Initializers.java +++ b/src/main/java/dk/camelot64/kickc/model/Initializers.java @@ -163,7 +163,7 @@ public class Initializers { ValueListUnionDesignator unionInit = (ValueListUnionDesignator) valueList; final String memberName = unionInit.getMemberName(); - final RValue initValue = unionInit.getList().get(0); + final RValue initValue = unionInit.getMemberValue(); Variable memberDef = null; for(Variable definition : memberDefinitions) { diff --git a/src/main/java/dk/camelot64/kickc/model/values/ValueListUnionDesignator.java b/src/main/java/dk/camelot64/kickc/model/values/ValueListUnionDesignator.java index 3c6157b99..ae42ea218 100644 --- a/src/main/java/dk/camelot64/kickc/model/values/ValueListUnionDesignator.java +++ b/src/main/java/dk/camelot64/kickc/model/values/ValueListUnionDesignator.java @@ -27,6 +27,10 @@ public class ValueListUnionDesignator extends ValueList { public String getMemberName() { return memberName; } + public RValue getMemberValue() { + return getList().get(0); + } + @Override public String toString(Program program) { StringBuilder out = new StringBuilder(); From b85e6fc715e9eedf40ed1c14c9e6bfaae7184bdb Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Tue, 4 Apr 2023 13:11:36 +0200 Subject: [PATCH 27/66] FlightControl fix for #678. --- .../camelot64/kickc/model/Initializers.java | 120 ++++++++++-------- ...onDesignator.java => UnionDesignator.java} | 25 ++-- .../Pass0GenerateStatementSequence.java | 2 +- 3 files changed, 74 insertions(+), 73 deletions(-) rename src/main/java/dk/camelot64/kickc/model/values/{ValueListUnionDesignator.java => UnionDesignator.java} (53%) diff --git a/src/main/java/dk/camelot64/kickc/model/Initializers.java b/src/main/java/dk/camelot64/kickc/model/Initializers.java index d5b5789a3..393a214f2 100644 --- a/src/main/java/dk/camelot64/kickc/model/Initializers.java +++ b/src/main/java/dk/camelot64/kickc/model/Initializers.java @@ -89,6 +89,8 @@ public class Initializers { return new ConstantCastValue(toType, (ConstantValue) constantSub); } } + } else if(initValue instanceof UnionDesignator) { + initValue = constantifyUnion((UnionDesignator) initValue, (SymbolTypeStruct) typeSpec.getType(), program, source); } else if(initValue instanceof ValueList) { ValueList initList = (ValueList) initValue; if(typeSpec.getType() instanceof SymbolTypePointer && ((SymbolTypePointer) typeSpec.getType()).getArraySpec() != null) { @@ -96,7 +98,7 @@ public class Initializers { initValue = constantifyArray(initList, (SymbolTypePointer) typeSpec.getType(), program, source); } else if(typeSpec.getType() instanceof SymbolTypeStruct) { // Type is a struct - initValue = constantifyStruct(initList, (SymbolTypeStruct) typeSpec.getType(), program, source); + initValue = constantifyStructOrUnion(initList, (SymbolTypeStruct) typeSpec.getType(), program, source); } else { throw new CompileError("Value list cannot initialize type " + typeSpec.getType(), source); } @@ -127,6 +129,42 @@ public class Initializers { return initValue; } + /** + * Convert as much as possible of a struct to constants. + * + * @param unionInit The value list + * @param structType The struct type + * @param program The program + * @param source The source line + * @return The constantified value + */ + private static RValue constantifyUnion(UnionDesignator unionInit, SymbolTypeStruct structType, Program program, StatementSource source) { + StructDefinition structDefinition = structType.getStructDefinition(program.getScope()); + Collection memberDefinitions = structDefinition.getAllVars(false); + + final String memberName = unionInit.getMemberName(); + final RValue initValue = unionInit.getMemberValue(); + + Variable memberDef = null; + for(Variable definition : memberDefinitions) { + if(definition.getLocalName().equals(memberName)) { + memberDef = definition; + } + } + if(memberDef==null) + throw new CompileError( "Union member not found", source); + + RValue constantifiedMemberValue = constantify(initValue, new ValueTypeSpec(memberDef.getType()), program, source); + if(constantifiedMemberValue instanceof ConstantValue) { + LinkedHashMap constMemberMap = new LinkedHashMap<>(); + constMemberMap.put(memberDef.getRef(), (ConstantValue) constantifiedMemberValue); + return new ConstantStructValue(structType, constMemberMap); + } else { + throw new CompileError( "Union initializer is not constant", source); + } + } + + /** * Convert as much as possible of a struct to constants. * @@ -136,19 +174,17 @@ public class Initializers { * @param source The source line * @return The constantified value */ - private static RValue constantifyStruct(ValueList valueList, SymbolTypeStruct structType, Program program, StatementSource source) { + private static RValue constantifyStructOrUnion(ValueList valueList, SymbolTypeStruct structType, Program program, StatementSource source) { // Recursively cast all sub-elements StructDefinition structDefinition = structType.getStructDefinition(program.getScope()); Collection memberDefinitions = structDefinition.getAllVars(false); int structInitNeedSize = structDefinition.isUnion() ? 1 : memberDefinitions.size(); if(structInitNeedSize != valueList.getList().size()) { if(structDefinition.isUnion()) { - if(valueList.getList().size()>1) { - throw new CompileError( - "Union initializer has too many values, since only one is allowed.\n" + - " Union initializer: " + valueList.toString(program), - source); - } + throw new CompileError( + "Union initializer has wrong size. One value is required.\n" + + " Union initializer: " + valueList.toString(program), + source); } else { throw new CompileError( "Struct initializer has wrong size (" + valueList.getList().size() + "), " + @@ -159,55 +195,29 @@ public class Initializers { } } - if(valueList instanceof ValueListUnionDesignator) { - - ValueListUnionDesignator unionInit = (ValueListUnionDesignator) valueList; - final String memberName = unionInit.getMemberName(); - final RValue initValue = unionInit.getMemberValue(); - - Variable memberDef = null; - for(Variable definition : memberDefinitions) { - if(definition.getLocalName().equals(memberName)) { - memberDef = definition; - } - } - if(memberDef==null) - throw new CompileError( "Union member not found", source); - - RValue constantifiedMemberValue = constantify(initValue, new ValueTypeSpec(memberDef.getType()), program, source); - if(constantifiedMemberValue instanceof ConstantValue) { - LinkedHashMap constMemberMap = new LinkedHashMap<>(); + boolean allConst = true; + // Constantified values in a list + List constantifiedList = new ArrayList<>(); + // Map filled if all member values become constant + LinkedHashMap constMemberMap = new LinkedHashMap<>(); + Iterator memberDefIt = memberDefinitions.iterator(); + Iterator valueIt = valueList.getList().iterator(); + for(int i = 0; i < structInitNeedSize; i++) { + Variable memberDef = memberDefIt.next(); + RValue memberValue = valueIt.next(); + RValue constantifiedMemberValue = constantify(memberValue, new ValueTypeSpec(memberDef.getType()), program, source); + constantifiedList.add(constantifiedMemberValue); + if(constantifiedMemberValue instanceof ConstantValue) constMemberMap.put(memberDef.getRef(), (ConstantValue) constantifiedMemberValue); - return new ConstantStructValue(structType, constMemberMap); - } else { - throw new CompileError( "Union initializer is not constant", source); - } + else + allConst = false; + } + if(allConst) { + // Constant struct + return new ConstantStructValue(structType, constMemberMap); } else { - boolean allConst = true; - // Constantified values in a list - List constantifiedList = new ArrayList<>(); - // Map filled if all member values become constant - LinkedHashMap constMemberMap = new LinkedHashMap<>(); - Iterator memberDefIt = memberDefinitions.iterator(); - Iterator valueIt = valueList.getList().iterator(); - for(int i = 0; i < structInitNeedSize; i++) { - Variable memberDef = memberDefIt.next(); - RValue memberValue = valueIt.next(); - RValue constantifiedMemberValue = constantify(memberValue, new ValueTypeSpec(memberDef.getType()), program, source); - constantifiedList.add(constantifiedMemberValue); - if(constantifiedMemberValue instanceof ConstantValue) - constMemberMap.put(memberDef.getRef(), (ConstantValue) constantifiedMemberValue); - else - allConst = false; - } - if(allConst) { - // Constant struct - return new ConstantStructValue(structType, constMemberMap); - } else { - // Constantified list with a cast - return new CastValue(structType, new ValueList(constantifiedList)); - } - + // Constantified list with a cast + return new CastValue(structType, new ValueList(constantifiedList)); } } diff --git a/src/main/java/dk/camelot64/kickc/model/values/ValueListUnionDesignator.java b/src/main/java/dk/camelot64/kickc/model/values/UnionDesignator.java similarity index 53% rename from src/main/java/dk/camelot64/kickc/model/values/ValueListUnionDesignator.java rename to src/main/java/dk/camelot64/kickc/model/values/UnionDesignator.java index ae42ea218..6811766db 100644 --- a/src/main/java/dk/camelot64/kickc/model/values/ValueListUnionDesignator.java +++ b/src/main/java/dk/camelot64/kickc/model/values/UnionDesignator.java @@ -2,33 +2,24 @@ package dk.camelot64.kickc.model.values; import dk.camelot64.kickc.model.Program; -import java.util.ArrayList; -import java.util.List; - /** * A union designator initializer. - *

- * The init list will have length one. */ -public class ValueListUnionDesignator extends ValueList { +public class UnionDesignator implements RValue { - private String memberName; + private final String memberName; - public ValueListUnionDesignator(String memberName, RValue rValue) { - super(asList(rValue)); + private final RValue rValue; + + public UnionDesignator(String memberName, RValue rValue) { this.memberName = memberName; - } - - static List asList(RValue rValue) { - final ArrayList list = new ArrayList<>(); - list.add(rValue); - return list; + this.rValue = rValue; } public String getMemberName() { return memberName; } public RValue getMemberValue() { - return getList().get(0); + return rValue; } @Override @@ -37,7 +28,7 @@ public class ValueListUnionDesignator extends ValueList { out.append("{ "); out.append(memberName); out.append("="); - out.append(getList().get(0).toString(program)); + out.append(rValue.toString(program)); out.append(" }"); return out.toString(); } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 4357e149c..3f570bead 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -1917,7 +1917,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor Date: Tue, 4 Apr 2023 13:18:58 +0200 Subject: [PATCH 28/66] FlightControl fix for #678. Improved doc. --- src/main/java/dk/camelot64/kickc/model/Initializers.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/model/Initializers.java b/src/main/java/dk/camelot64/kickc/model/Initializers.java index 393a214f2..31f5cc2fe 100644 --- a/src/main/java/dk/camelot64/kickc/model/Initializers.java +++ b/src/main/java/dk/camelot64/kickc/model/Initializers.java @@ -130,10 +130,10 @@ public class Initializers { } /** - * Convert as much as possible of a struct to constants. + * Convert a union designator initializer to a constant. * - * @param unionInit The value list - * @param structType The struct type + * @param unionInit The union initializer + * @param structType The union type * @param program The program * @param source The source line * @return The constantified value @@ -164,7 +164,6 @@ public class Initializers { } } - /** * Convert as much as possible of a struct to constants. * From 5bd84e7812b33e5a2a4c54deff83b45558177668 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Tue, 4 Apr 2023 19:36:11 +0200 Subject: [PATCH 29/66] - Added test cases. - Checked asm outputs. - banking is only implemented for the cx16 for now. --- .../kickc/test/TestProgramsFast.java | 53 +- .../procedure-callingconvention-phi-bank-0.c | 5 +- .../procedure-callingconvention-phi-bank-1.c | 4 + .../procedure-callingconvention-phi-bank-2.c | 4 + .../procedure-callingconvention-phi-bank-3.c | 4 + .../procedure-callingconvention-phi-bank-4.c | 4 + .../procedure-callingconvention-phi-bank-5.c | 12 +- .../procedure-callingconvention-phi-bank.ld | 7 + ...procedure-callingconvention-stack-bank-0.c | 6 +- ...procedure-callingconvention-stack-bank-1.c | 6 +- ...procedure-callingconvention-stack-bank-2.c | 4 + ...procedure-callingconvention-stack-bank-3.c | 4 + ...procedure-callingconvention-stack-bank-4.c | 4 + ...procedure-callingconvention-stack-bank-5.c | 4 + .../procedure-callingconvention-stack-bank.ld | 6 + src/test/ref/asm-culling-jmp.asm | 2 +- src/test/ref/asm-culling-jmp.log | 4 +- src/test/ref/c64dtv-8bppcharstretch.asm | 2 +- src/test/ref/c64dtv-8bppcharstretch.log | 4 +- src/test/ref/c64dtv-8bppchunkystretch.asm | 2 +- src/test/ref/c64dtv-8bppchunkystretch.log | 4 +- ...procedure-callingconvention-phi-bank-0.asm | 28 + ...procedure-callingconvention-phi-bank-0.cfg | 20 + ...procedure-callingconvention-phi-bank-0.log | 275 ++ ...procedure-callingconvention-phi-bank-0.sym | 10 + ...procedure-callingconvention-phi-bank-1.asm | 31 + ...procedure-callingconvention-phi-bank-1.cfg | 20 + ...procedure-callingconvention-phi-bank-1.log | 281 ++ ...procedure-callingconvention-phi-bank-1.sym | 10 + ...procedure-callingconvention-phi-bank-2.asm | 28 + ...procedure-callingconvention-phi-bank-2.cfg | 20 + ...procedure-callingconvention-phi-bank-2.log | 294 ++ ...procedure-callingconvention-phi-bank-2.sym | 10 + ...procedure-callingconvention-phi-bank-3.asm | 28 + ...procedure-callingconvention-phi-bank-3.cfg | 20 + ...procedure-callingconvention-phi-bank-3.log | 294 ++ ...procedure-callingconvention-phi-bank-3.sym | 10 + ...procedure-callingconvention-phi-bank-4.asm | 28 + ...procedure-callingconvention-phi-bank-4.cfg | 20 + ...procedure-callingconvention-phi-bank-4.log | 275 ++ ...procedure-callingconvention-phi-bank-4.sym | 10 + ...procedure-callingconvention-phi-bank-5.asm | 268 ++ ...procedure-callingconvention-phi-bank-5.cfg | 224 ++ ...procedure-callingconvention-phi-bank-5.log | 2642 +++++++++++++++++ ...procedure-callingconvention-phi-bank-5.sym | 171 ++ ...ocedure-callingconvention-stack-bank-0.asm | 45 + ...ocedure-callingconvention-stack-bank-0.cfg | 24 + ...ocedure-callingconvention-stack-bank-0.log | 350 +++ ...ocedure-callingconvention-stack-bank-0.sym | 19 + ...ocedure-callingconvention-stack-bank-1.asm | 45 + ...ocedure-callingconvention-stack-bank-1.cfg | 24 + ...ocedure-callingconvention-stack-bank-1.log | 350 +++ ...ocedure-callingconvention-stack-bank-1.sym | 19 + ...ocedure-callingconvention-stack-bank-2.asm | 74 + ...ocedure-callingconvention-stack-bank-2.cfg | 48 + ...ocedure-callingconvention-stack-bank-2.log | 595 ++++ ...ocedure-callingconvention-stack-bank-2.sym | 32 + ...ocedure-callingconvention-stack-bank-3.asm | 74 + ...ocedure-callingconvention-stack-bank-3.cfg | 79 + ...ocedure-callingconvention-stack-bank-3.log | 644 ++++ ...ocedure-callingconvention-stack-bank-3.sym | 19 + ...ocedure-callingconvention-stack-bank-4.asm | 111 + ...ocedure-callingconvention-stack-bank-4.cfg | 62 + ...ocedure-callingconvention-stack-bank-4.log | 710 +++++ ...ocedure-callingconvention-stack-bank-4.sym | 30 + ...ocedure-callingconvention-stack-bank-5.asm | 50 + ...ocedure-callingconvention-stack-bank-5.cfg | 29 + ...ocedure-callingconvention-stack-bank-5.log | 408 +++ ...ocedure-callingconvention-stack-bank-5.sym | 21 + 69 files changed, 8979 insertions(+), 45 deletions(-) create mode 100644 src/test/kc/procedure-callingconvention-phi-bank.ld create mode 100644 src/test/kc/procedure-callingconvention-stack-bank.ld create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-0.asm create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-0.cfg create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-0.log create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-0.sym create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-1.asm create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-1.cfg create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-1.log create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-1.sym create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-2.asm create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-2.cfg create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-2.log create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-2.sym create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-3.asm create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-3.cfg create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-3.log create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-3.sym create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-4.asm create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-4.cfg create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-4.log create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-4.sym create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-5.asm create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-5.cfg create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-5.log create mode 100644 src/test/ref/procedure-callingconvention-phi-bank-5.sym create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-0.asm create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-0.cfg create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-0.log create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-0.sym create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-1.asm create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-1.cfg create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-1.log create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-1.sym create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-2.asm create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-2.cfg create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-2.log create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-2.sym create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-3.asm create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-3.cfg create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-3.log create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-3.sym create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-4.asm create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-4.cfg create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-4.log create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-4.sym create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-5.asm create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-5.cfg create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-5.log create mode 100644 src/test/ref/procedure-callingconvention-stack-bank-5.sym diff --git a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java index a9aabb89f..1e1da9720 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java +++ b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java @@ -1496,68 +1496,63 @@ public class TestProgramsFast extends TestPrograms { } @Test - public void testProcedureCallingConventionPhiFarx() throws IOException { - compileAndCompare("procedure-callingconvention-phi-far-x.c"); + public void testProcedureCallingConventionPhiBank0() throws IOException { + compileAndCompare("procedure-callingconvention-phi-bank-0.c"); } @Test - public void testProcedureCallingConventionPhiFar0() throws IOException { - compileAndCompare("procedure-callingconvention-phi-far-0.c"); + public void testProcedureCallingConventionPhiBank1() throws IOException { + compileAndCompare("procedure-callingconvention-phi-bank-1.c"); } @Test - public void testProcedureCallingConventionPhiFar1() throws IOException { - compileAndCompare("procedure-callingconvention-phi-far-1.c"); + public void testProcedureCallingConventionPhiBank2() throws IOException { + compileAndCompare("procedure-callingconvention-phi-bank-2.c"); } @Test - public void testProcedureCallingConventionPhiFar2() throws IOException { - compileAndCompare("procedure-callingconvention-phi-far-2.c"); + public void testProcedureCallingConventionPhiBank3() throws IOException { + compileAndCompare("procedure-callingconvention-phi-bank-3.c"); } @Test - public void testProcedureCallingConventionPhiFar3() throws IOException { - compileAndCompare("procedure-callingconvention-phi-far-3.c"); + public void testProcedureCallingConventionPhiBank4() throws IOException { + compileAndCompare("procedure-callingconvention-phi-bank-4.c"); } @Test - public void testProcedureCallingConventionPhiFar4() throws IOException { - compileAndCompare("procedure-callingconvention-phi-far-4.c"); + public void testProcedureCallingConventionPhiBank5() throws IOException { + compileAndCompare("procedure-callingconvention-phi-bank-5.c"); } @Test - public void testProcedureCallingConventionPhiFar5() throws IOException { - compileAndCompare("procedure-callingconvention-phi-far-5.c"); + public void testProcedureCallingConventionStackBank5() throws IOException { + compileAndCompare("procedure-callingconvention-stack-bank-5.c"); } @Test - public void testProcedureCallingConventionStackFar5() throws IOException { - compileAndCompare("procedure-callingconvention-stack-far-5.c"); + public void testProcedureCallingConventionStackBank4() throws IOException { + compileAndCompare("procedure-callingconvention-stack-bank-4.c"); } @Test - public void testProcedureCallingConventionStackFar4() throws IOException { - compileAndCompare("procedure-callingconvention-stack-far-4.c"); + public void testProcedureCallingConventionStackBank3() throws IOException { + compileAndCompare("procedure-callingconvention-stack-bank-3.c"); } @Test - public void testProcedureCallingConventionStackFar3() throws IOException { - compileAndCompare("procedure-callingconvention-stack-far-3.c"); + public void testProcedureCallingConventionStackBank2() throws IOException { + compileAndCompare("procedure-callingconvention-stack-bank-2.c"); } @Test - public void testProcedureCallingConventionStackFar2() throws IOException { - compileAndCompare("procedure-callingconvention-stack-far-2.c"); + public void testProcedureCallingConventionStackBank1() throws IOException { + compileAndCompare("procedure-callingconvention-stack-bank-1.c"); } @Test - public void testProcedureCallingConventionStackFar1() throws IOException { - compileAndCompare("procedure-callingconvention-stack-far-1.c"); - } - - @Test - public void testProcedureCallingConventionStackFar0() throws IOException { - compileAndCompare("procedure-callingconvention-stack-far-0.c"); + public void testProcedureCallingConventionStackBank0() throws IOException { + compileAndCompare("procedure-callingconvention-stack-bank-0.c"); } @Test diff --git a/src/test/kc/procedure-callingconvention-phi-bank-0.c b/src/test/kc/procedure-callingconvention-phi-bank-0.c index 54243fc55..2ab91f28b 100644 --- a/src/test/kc/procedure-callingconvention-phi-bank-0.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-0.c @@ -1,12 +1,15 @@ // Test a procedure with calling convention stack +#pragma code_seg(stage) +#pragma link("procedure-callingconvention-phi-bank.ld") +#pragma target(cx16) + char* const SCREEN = (char*)0x0400; void main(void) { SCREEN[0] = plus('0', 7); } -#pragma code_seg(stage) char __bank(ram,2) plus(char a, char b) { return a+b; } diff --git a/src/test/kc/procedure-callingconvention-phi-bank-1.c b/src/test/kc/procedure-callingconvention-phi-bank-1.c index 585ab0f82..f534c13e7 100644 --- a/src/test/kc/procedure-callingconvention-phi-bank-1.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-1.c @@ -1,5 +1,9 @@ // Test a far call procedure with a calling convention sp +#pragma code_seg(stage) +#pragma link("procedure-callingconvention-phi-bank.ld") +#pragma target(cx16) + char* const SCREEN = (char*)0x0400; void main(void) { diff --git a/src/test/kc/procedure-callingconvention-phi-bank-2.c b/src/test/kc/procedure-callingconvention-phi-bank-2.c index e56b218aa..790978c7d 100644 --- a/src/test/kc/procedure-callingconvention-phi-bank-2.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-2.c @@ -1,5 +1,9 @@ // Test a far call procedure with a calling convention sp +#pragma code_seg(stage) +#pragma link("procedure-callingconvention-phi-bank.ld") +#pragma target(cx16) + char* const SCREEN = (char*)0x0400; void main(void) { diff --git a/src/test/kc/procedure-callingconvention-phi-bank-3.c b/src/test/kc/procedure-callingconvention-phi-bank-3.c index 655f28876..fc48b2e5e 100644 --- a/src/test/kc/procedure-callingconvention-phi-bank-3.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-3.c @@ -1,5 +1,9 @@ // Test a far call procedure with a calling convention sp +#pragma code_seg(stage) +#pragma link("procedure-callingconvention-phi-bank.ld") +#pragma target(cx16) + char* const SCREEN = (char*)0x0400; void main(void) { diff --git a/src/test/kc/procedure-callingconvention-phi-bank-4.c b/src/test/kc/procedure-callingconvention-phi-bank-4.c index 0459fcaa0..b6e49a3a1 100644 --- a/src/test/kc/procedure-callingconvention-phi-bank-4.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-4.c @@ -1,5 +1,9 @@ // Test a far call procedure with a calling convention phi +#pragma code_seg(stage) +#pragma link("procedure-callingconvention-phi-bank.ld") +#pragma target(cx16) + char* const SCREEN = (char*)0x0400; #pragma code_seg(stage) diff --git a/src/test/kc/procedure-callingconvention-phi-bank-5.c b/src/test/kc/procedure-callingconvention-phi-bank-5.c index 9e8021010..c8b8aa399 100644 --- a/src/test/kc/procedure-callingconvention-phi-bank-5.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-5.c @@ -1,8 +1,12 @@ // Test a far call procedure with a calling convention phi +#pragma code_seg(stage) +#pragma link("procedure-callingconvention-phi-bank.ld") +#pragma target(cx16) + char* const SCREEN = (char*)0x0400; -#pragma code_seg(bank_1) +#pragma code_seg(stage) #pragma bank(ram, 1) char func_bank1_a(char a, char b) { @@ -19,7 +23,7 @@ char func_bank1_d(char a, char b) { return func_bank2_a(a,b); } -#pragma code_seg(bank_2) +#pragma code_seg(platform) #pragma bank(ram, 2) char func_bank2_a(char a, char b) { @@ -47,7 +51,7 @@ char func_bank2_f(char a, char b) { return func_bank1_b(a,b); } -#pragma nobank +#pragma nobank(dummy) char __bank(ram, 1) func_bank1_b(char a, char b) { return a+b; @@ -57,7 +61,7 @@ char __bank(ram, 2) func_bank2_b(char a, char b) { return a+b; } -#pragma nobank +#pragma nobank(dummy) char func_bank1_e(char a, char b) { // this should be a far call, because the call is to bank 1. diff --git a/src/test/kc/procedure-callingconvention-phi-bank.ld b/src/test/kc/procedure-callingconvention-phi-bank.ld new file mode 100644 index 000000000..130604424 --- /dev/null +++ b/src/test/kc/procedure-callingconvention-phi-bank.ld @@ -0,0 +1,7 @@ +.segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=%P] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + diff --git a/src/test/kc/procedure-callingconvention-stack-bank-0.c b/src/test/kc/procedure-callingconvention-stack-bank-0.c index 3801b0673..d0394b9d1 100644 --- a/src/test/kc/procedure-callingconvention-stack-bank-0.c +++ b/src/test/kc/procedure-callingconvention-stack-bank-0.c @@ -1,12 +1,16 @@ // Test a procedure with calling convention stack +#pragma code_seg(stage) +#pragma link("procedure-callingconvention-stack-bank.ld") +#pragma target(cx16) + char* const SCREEN = (char*)0x0400; void main(void) { SCREEN[0] = plus('0', 7); } -#pragma code_seg(test) +#pragma code_seg(stage) char __bank(ram, 2) __stackcall plus(char a, char b) { return a+b; } \ No newline at end of file diff --git a/src/test/kc/procedure-callingconvention-stack-bank-1.c b/src/test/kc/procedure-callingconvention-stack-bank-1.c index da246a882..c1ac83207 100644 --- a/src/test/kc/procedure-callingconvention-stack-bank-1.c +++ b/src/test/kc/procedure-callingconvention-stack-bank-1.c @@ -1,5 +1,9 @@ // Test a procedure with calling convention stack +#pragma code_seg(stage) +#pragma link("procedure-callingconvention-stack-bank.ld") +#pragma target(cx16) + char* const SCREEN = (char*)0x0400; void main(void) { @@ -7,7 +11,7 @@ void main(void) { } #pragma calling(__stackcall) -#pragma code_seg(test) +#pragma code_seg(stage) char __bank(ram,20) plus(char a, char b) { return a+b; diff --git a/src/test/kc/procedure-callingconvention-stack-bank-2.c b/src/test/kc/procedure-callingconvention-stack-bank-2.c index cb8a3bc86..cba3de4b9 100644 --- a/src/test/kc/procedure-callingconvention-stack-bank-2.c +++ b/src/test/kc/procedure-callingconvention-stack-bank-2.c @@ -1,6 +1,10 @@ // Test a procedure with calling convention stack // A slightly more complex call +#pragma code_seg(stage) +#pragma link("procedure-callingconvention-stack-bank.ld") +#pragma target(cx16) + char* const SCREEN = (char*)0x0400; char i = 0; diff --git a/src/test/kc/procedure-callingconvention-stack-bank-3.c b/src/test/kc/procedure-callingconvention-stack-bank-3.c index 6ab8d136f..129824bb7 100644 --- a/src/test/kc/procedure-callingconvention-stack-bank-3.c +++ b/src/test/kc/procedure-callingconvention-stack-bank-3.c @@ -3,6 +3,10 @@ #pragma calling(__stackcall) +#pragma code_seg(stage) +#pragma link("procedure-callingconvention-stack-bank.ld") +#pragma target(cx16) + char* const SCREEN = (char*)0x0400; char val = 0; diff --git a/src/test/kc/procedure-callingconvention-stack-bank-4.c b/src/test/kc/procedure-callingconvention-stack-bank-4.c index 76c66aa26..bb3ebc6e8 100644 --- a/src/test/kc/procedure-callingconvention-stack-bank-4.c +++ b/src/test/kc/procedure-callingconvention-stack-bank-4.c @@ -4,6 +4,10 @@ #pragma calling(__stackcall) #pragma struct_model(classic) +#pragma code_seg(stage) +#pragma link("procedure-callingconvention-stack-bank.ld") +#pragma target(cx16) + char* const SCREEN = (char*)0x0400; char idx = 0; diff --git a/src/test/kc/procedure-callingconvention-stack-bank-5.c b/src/test/kc/procedure-callingconvention-stack-bank-5.c index 3bfac0ef3..ce0701c6f 100644 --- a/src/test/kc/procedure-callingconvention-stack-bank-5.c +++ b/src/test/kc/procedure-callingconvention-stack-bank-5.c @@ -1,6 +1,10 @@ // Test a procedure with calling convention stack // Recursion that works (no local variables) +#pragma code_seg(stage) +#pragma link("procedure-callingconvention-stack-bank.ld") +#pragma platform(cx16) + char* const SCREEN = (char*)0x0400; void main(void) { diff --git a/src/test/kc/procedure-callingconvention-stack-bank.ld b/src/test/kc/procedure-callingconvention-stack-bank.ld new file mode 100644 index 000000000..3e9cecaee --- /dev/null +++ b/src/test/kc/procedure-callingconvention-stack-bank.ld @@ -0,0 +1,6 @@ +.segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=%P] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] diff --git a/src/test/ref/asm-culling-jmp.asm b/src/test/ref/asm-culling-jmp.asm index 39c886fa8..152a669fe 100644 --- a/src/test/ref/asm-culling-jmp.asm +++ b/src/test/ref/asm-culling-jmp.asm @@ -12,7 +12,7 @@ main: { // asm jmp qwe - .byte 0, 25, 51, 76, 102, 128, 153, 179, 204, 230 + .byte 0, $19, $33, $4c, $66, $80, $99, $b3, $cc, $e6 qwe: lda #$32 // *((char*)0x0400) = 'c' diff --git a/src/test/ref/asm-culling-jmp.log b/src/test/ref/asm-culling-jmp.log index 8f295f1ae..9870ae91e 100644 --- a/src/test/ref/asm-culling-jmp.log +++ b/src/test/ref/asm-culling-jmp.log @@ -83,7 +83,7 @@ ASSEMBLER BEFORE OPTIMIZATION main: { // asm { jmpqwe .byte0,25,51,76,102,128,153,179,204,230 qwe: lda#50 } jmp qwe - .byte 0, 25, 51, 76, 102, 128, 153, 179, 204, 230 + .byte 0, $19, $33, $4c, $66, $80, $99, $b3, $cc, $e6 qwe: lda #$32 // [1] *((char *) 1024) = 'c' -- _deref_pbuc1=vbuc2 @@ -130,7 +130,7 @@ main: { // asm // asm { jmpqwe .byte0,25,51,76,102,128,153,179,204,230 qwe: lda#50 } jmp qwe - .byte 0, 25, 51, 76, 102, 128, 153, 179, 204, 230 + .byte 0, $19, $33, $4c, $66, $80, $99, $b3, $cc, $e6 qwe: lda #$32 // *((char*)0x0400) = 'c' diff --git a/src/test/ref/c64dtv-8bppcharstretch.asm b/src/test/ref/c64dtv-8bppcharstretch.asm index 13c88352a..8fadfc7eb 100644 --- a/src/test/ref/c64dtv-8bppcharstretch.asm +++ b/src/test/ref/c64dtv-8bppcharstretch.asm @@ -457,7 +457,7 @@ dtvSetCpuBankSegment1: { // asm .byte $32, $dd lda.z $ff - .byte $32, $00 + .byte $32, 0 // } rts } diff --git a/src/test/ref/c64dtv-8bppcharstretch.log b/src/test/ref/c64dtv-8bppcharstretch.log index 4c5a4bc2e..9e674183c 100644 --- a/src/test/ref/c64dtv-8bppcharstretch.log +++ b/src/test/ref/c64dtv-8bppcharstretch.log @@ -1872,7 +1872,7 @@ dtvSetCpuBankSegment1: { // asm { .byte$32,$dd lda$ff .byte$32,$00 } .byte $32, $dd lda.z $ff - .byte $32, $00 + .byte $32, 0 jmp __breturn // dtvSetCpuBankSegment1::@return __breturn: @@ -2714,7 +2714,7 @@ dtvSetCpuBankSegment1: { // asm { .byte$32,$dd lda$ff .byte$32,$00 } .byte $32, $dd lda.z $ff - .byte $32, $00 + .byte $32, 0 // dtvSetCpuBankSegment1::@return // } // [87] return diff --git a/src/test/ref/c64dtv-8bppchunkystretch.asm b/src/test/ref/c64dtv-8bppchunkystretch.asm index 7ebe19652..becb0cb59 100644 --- a/src/test/ref/c64dtv-8bppchunkystretch.asm +++ b/src/test/ref/c64dtv-8bppchunkystretch.asm @@ -365,7 +365,7 @@ dtvSetCpuBankSegment1: { // asm .byte $32, $dd lda.z $ff - .byte $32, $00 + .byte $32, 0 // } rts } diff --git a/src/test/ref/c64dtv-8bppchunkystretch.log b/src/test/ref/c64dtv-8bppchunkystretch.log index cc100204f..932a1908c 100644 --- a/src/test/ref/c64dtv-8bppchunkystretch.log +++ b/src/test/ref/c64dtv-8bppchunkystretch.log @@ -1260,7 +1260,7 @@ dtvSetCpuBankSegment1: { // asm { .byte$32,$dd lda$ff .byte$32,$00 } .byte $32, $dd lda.z $ff - .byte $32, $00 + .byte $32, 0 jmp __breturn // dtvSetCpuBankSegment1::@return __breturn: @@ -1881,7 +1881,7 @@ dtvSetCpuBankSegment1: { // asm { .byte$32,$dd lda$ff .byte$32,$00 } .byte $32, $dd lda.z $ff - .byte $32, $00 + .byte $32, 0 // dtvSetCpuBankSegment1::@return // } // [57] return diff --git a/src/test/ref/procedure-callingconvention-phi-bank-0.asm b/src/test/ref/procedure-callingconvention-phi-bank-0.asm new file mode 100644 index 000000000..2bb668af6 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-0.asm @@ -0,0 +1,28 @@ +// Test a procedure with calling convention stack +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + .label SCREEN = $400 +.segment stage +main: { + // plus('0', 7) + jsr plus + // SCREEN[0] = plus('0', 7) + lda #plus.return + sta SCREEN + // } + rts +} +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + rts +} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-0.cfg b/src/test/ref/procedure-callingconvention-phi-bank-0.cfg new file mode 100644 index 000000000..bfaa7082a --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-0.cfg @@ -0,0 +1,20 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = plus::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + to:plus::@return +plus::@return: scope:[plus] from plus + [5] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-phi-bank-0.log b/src/test/ref/procedure-callingconvention-phi-bank-0.log new file mode 100644 index 000000000..58a2a2fd0 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-0.log @@ -0,0 +1,275 @@ +Loading link script "procedure-callingconvention-phi-bank.ld" + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + plus::$0 = plus::a#1 + plus::b#1 + plus::return#1 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus + plus::return#4 = phi( plus/plus::return#1 ) + plus::return#2 = plus::return#4 + 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 +__constant char * const SCREEN = (char *)$400 +void __start() +void main() +char main::$0 +char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +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 +Constant right-side identified [5] plus::return#1 = plus::a#0 + plus::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant plus::return#1 = plus::a#0+plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#0 = plus::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings plus::return#0 +Constant inlined plus::return#0 = plus::return#1 +Constant inlined main::$0 = plus::return#1 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +CALL GRAPH +Calls in [main] to plus:1 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Adding NOP phi() at start of main +Adding NOP phi() at start of plus + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = plus::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + to:plus::@return +plus::@return: scope:[plus] from plus + [5] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [plus] +Uplift Scope [] + +Uplifting [main] best 60 combination +Uplifting [plus] best 60 combination +Uplifting [] best 60 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + // Global Constants & labels + .label SCREEN = $400 +.segment stage + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] + plus_from_main: + jsr plus + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 + lda #plus.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + jmp __breturn + // plus::@return + __breturn: + // [5] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void main() +char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return +__constant char plus::return#1 = plus::a#0+plus::b#0 // return + + + +FINAL ASSEMBLER +Score: 24 + + // File Comments +// Test a procedure with calling convention stack + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + // Global Constants & labels + .label SCREEN = $400 +.segment stage + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] + jsr plus + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 + lda #plus.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + // plus::@return + // [5] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-0.sym b/src/test/ref/procedure-callingconvention-phi-bank-0.sym new file mode 100644 index 000000000..70d3c4d1f --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-0.sym @@ -0,0 +1,10 @@ +__constant char * const SCREEN = (char *) 1024 +void main() +char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return +__constant char plus::return#1 = plus::a#0+plus::b#0 // return + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-1.asm b/src/test/ref/procedure-callingconvention-phi-bank-1.asm new file mode 100644 index 000000000..ea53aa852 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-1.asm @@ -0,0 +1,31 @@ +// Test a far call procedure with a calling convention sp +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + .label SCREEN = $400 +.segment stage +main: { + // plus('0', 7) + jsr $ff6e + .byte plus + .byte 1 + // SCREEN[0] = plus('0', 7) + lda #plus.return + sta SCREEN + // } + rts +} +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + rts +} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-1.cfg b/src/test/ref/procedure-callingconvention-phi-bank-1.cfg new file mode 100644 index 000000000..1701ea88d --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-1.cfg @@ -0,0 +1,20 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = plus::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + to:plus::@return +plus::@return: scope:[plus] from plus + [5] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-phi-bank-1.log b/src/test/ref/procedure-callingconvention-phi-bank-1.log new file mode 100644 index 000000000..5484d90f9 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-1.log @@ -0,0 +1,281 @@ +Loading link script "procedure-callingconvention-phi-bank.ld" + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + plus::$0 = plus::a#1 + plus::b#1 + plus::return#1 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus + plus::return#4 = phi( plus/plus::return#1 ) + plus::return#2 = plus::return#4 + 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 +__constant char * const SCREEN = (char *)$400 +void __start() +void main() +char main::$0 +__bank(bank) char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +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 +Constant right-side identified [5] plus::return#1 = plus::a#0 + plus::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant plus::return#1 = plus::a#0+plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#0 = plus::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings plus::return#0 +Constant inlined plus::return#0 = plus::return#1 +Constant inlined main::$0 = plus::return#1 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +CALL GRAPH +Calls in [main] to plus:1 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Adding NOP phi() at start of main +Adding NOP phi() at start of plus + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = plus::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + to:plus::@return +plus::@return: scope:[plus] from plus + [5] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +__bank(bank) char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [plus] +Uplift Scope [] + +Uplifting [main] best 60 combination +Uplifting [plus] best 60 combination +Uplifting [] best 60 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a far call procedure with a calling convention sp + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + // Global Constants & labels + .label SCREEN = $400 +.segment stage + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_ram_finalize + plus_from_main: + jsr $ff6e + .byte plus + .byte 1 + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 + lda #plus.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + jmp __breturn + // plus::@return + __breturn: + // [5] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return +__constant char plus::return#1 = plus::a#0+plus::b#0 // return + + + +FINAL ASSEMBLER +Score: 24 + + // File Comments +// Test a far call procedure with a calling convention sp + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + // Global Constants & labels + .label SCREEN = $400 +.segment stage + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_ram_finalize + jsr $ff6e + .byte plus + .byte 1 + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 + lda #plus.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + // plus::@return + // [5] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-1.sym b/src/test/ref/procedure-callingconvention-phi-bank-1.sym new file mode 100644 index 000000000..c79872a57 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-1.sym @@ -0,0 +1,10 @@ +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return +__constant char plus::return#1 = plus::a#0+plus::b#0 // return + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-2.asm b/src/test/ref/procedure-callingconvention-phi-bank-2.asm new file mode 100644 index 000000000..1e4b59461 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-2.asm @@ -0,0 +1,28 @@ +// Test a far call procedure with a calling convention sp +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + .label SCREEN = $400 +.segment stage +main: { + // plus('0', 7) + .assert "Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare ", 0, 1 + // SCREEN[0] = plus('0', 7) + lda #plus.return + sta SCREEN + // } + rts +} +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + rts +} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-2.cfg b/src/test/ref/procedure-callingconvention-phi-bank-2.cfg new file mode 100644 index 000000000..1701ea88d --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-2.cfg @@ -0,0 +1,20 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = plus::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + to:plus::@return +plus::@return: scope:[plus] from plus + [5] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-phi-bank-2.log b/src/test/ref/procedure-callingconvention-phi-bank-2.log new file mode 100644 index 000000000..9b0d446f2 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-2.log @@ -0,0 +1,294 @@ +Loading link script "procedure-callingconvention-phi-bank.ld" + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + plus::$0 = plus::a#1 + plus::b#1 + plus::return#1 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus + plus::return#4 = phi( plus/plus::return#1 ) + plus::return#2 = plus::return#4 + 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 +__constant char * const SCREEN = (char *)$400 +void __start() +void main() +char main::$0 +__bank(bank) char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +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 +Constant right-side identified [5] plus::return#1 = plus::a#0 + plus::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant plus::return#1 = plus::a#0+plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#0 = plus::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings plus::return#0 +Constant inlined plus::return#0 = plus::return#1 +Constant inlined main::$0 = plus::return#1 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +CALL GRAPH +Calls in [main] to plus:1 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Adding NOP phi() at start of main +Adding NOP phi() at start of plus + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = plus::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + to:plus::@return +plus::@return: scope:[plus] from plus + [5] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +__bank(bank) char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-2.c:10:17: +REGISTER UPLIFT POTENTIAL REGISTERS +Potential register analysis [1] call plus missing fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare allocation: +MISSING FRAGMENTS + Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare +Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [plus] +Uplift Scope [] + +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-2.c:10:17: +Uplifting [main] best 54 combination +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-2.c:10:17: +Uplifting [plus] best 54 combination +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-2.c:10:17: +Uplifting [] best 54 combination +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-2.c:10:17: + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a far call procedure with a calling convention sp + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + // Global Constants & labels + .label SCREEN = $400 +.segment stage + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] + plus_from_main: + .assert "Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare ", 0, 1 + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 + lda #plus.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + jmp __breturn + // plus::@return + __breturn: + // [5] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return +__constant char plus::return#1 = plus::a#0+plus::b#0 // return + + + +FINAL ASSEMBLER +Score: 18 + + // File Comments +// Test a far call procedure with a calling convention sp + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + // Global Constants & labels + .label SCREEN = $400 +.segment stage + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] + .assert "Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare ", 0, 1 + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 + lda #plus.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + // plus::@return + // [5] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-2.sym b/src/test/ref/procedure-callingconvention-phi-bank-2.sym new file mode 100644 index 000000000..c79872a57 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-2.sym @@ -0,0 +1,10 @@ +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return +__constant char plus::return#1 = plus::a#0+plus::b#0 // return + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-3.asm b/src/test/ref/procedure-callingconvention-phi-bank-3.asm new file mode 100644 index 000000000..14b4c8f88 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-3.asm @@ -0,0 +1,28 @@ +// Test a far call procedure with a calling convention sp +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + .label SCREEN = $400 +.segment stage +main: { + // plus('0', 7) + .assert "Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare ", 0, 1 + // SCREEN[0] = plus('0', 7) + lda #plus.return + sta SCREEN + // } + rts +} +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + rts +} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-3.cfg b/src/test/ref/procedure-callingconvention-phi-bank-3.cfg new file mode 100644 index 000000000..1701ea88d --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-3.cfg @@ -0,0 +1,20 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = plus::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + to:plus::@return +plus::@return: scope:[plus] from plus + [5] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-phi-bank-3.log b/src/test/ref/procedure-callingconvention-phi-bank-3.log new file mode 100644 index 000000000..edbe990fa --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-3.log @@ -0,0 +1,294 @@ +Loading link script "procedure-callingconvention-phi-bank.ld" + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + plus::$0 = plus::a#1 + plus::b#1 + plus::return#1 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus + plus::return#4 = phi( plus/plus::return#1 ) + plus::return#2 = plus::return#4 + 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 +__constant char * const SCREEN = (char *)$400 +void __start() +void main() +char main::$0 +__bank(bank) char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +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 +Constant right-side identified [5] plus::return#1 = plus::a#0 + plus::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant plus::return#1 = plus::a#0+plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#0 = plus::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings plus::return#0 +Constant inlined plus::return#0 = plus::return#1 +Constant inlined main::$0 = plus::return#1 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +CALL GRAPH +Calls in [main] to plus:1 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Adding NOP phi() at start of main +Adding NOP phi() at start of plus + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = plus::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + to:plus::@return +plus::@return: scope:[plus] from plus + [5] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +__bank(bank) char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-3.c:10:17: +REGISTER UPLIFT POTENTIAL REGISTERS +Potential register analysis [1] call plus missing fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare allocation: +MISSING FRAGMENTS + Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare +Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [plus] +Uplift Scope [] + +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-3.c:10:17: +Uplifting [main] best 54 combination +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-3.c:10:17: +Uplifting [plus] best 54 combination +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-3.c:10:17: +Uplifting [] best 54 combination +Warning! Unknown fragment for statement [1] call plus +Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare +D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-3.c:10:17: + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a far call procedure with a calling convention sp + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + // Global Constants & labels + .label SCREEN = $400 +.segment stage + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] + plus_from_main: + .assert "Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare ", 0, 1 + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 + lda #plus.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + jmp __breturn + // plus::@return + __breturn: + // [5] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return +__constant char plus::return#1 = plus::a#0+plus::b#0 // return + + + +FINAL ASSEMBLER +Score: 18 + + // File Comments +// Test a far call procedure with a calling convention sp + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + // Global Constants & labels + .label SCREEN = $400 +.segment stage + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] + .assert "Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare ", 0, 1 + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 + lda #plus.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + // plus::@return + // [5] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-3.sym b/src/test/ref/procedure-callingconvention-phi-bank-3.sym new file mode 100644 index 000000000..c79872a57 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-3.sym @@ -0,0 +1,10 @@ +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return +__constant char plus::return#1 = plus::a#0+plus::b#0 // return + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-4.asm b/src/test/ref/procedure-callingconvention-phi-bank-4.asm new file mode 100644 index 000000000..e67cb058e --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-4.asm @@ -0,0 +1,28 @@ +// Test a far call procedure with a calling convention phi +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + .label SCREEN = $400 +.segment stage +main: { + // plus('0', 7) + jsr plus + // SCREEN[0] = plus('0', 7) + lda #plus.return + sta SCREEN + // } + rts +} +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + rts +} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-4.cfg b/src/test/ref/procedure-callingconvention-phi-bank-4.cfg new file mode 100644 index 000000000..2cc5e64ff --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-4.cfg @@ -0,0 +1,20 @@ + +__bank(bank) void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = plus::return#0 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + to:plus::@return +plus::@return: scope:[plus] from plus + [5] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-phi-bank-4.log b/src/test/ref/procedure-callingconvention-phi-bank-4.log new file mode 100644 index 000000000..80ecb72df --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-4.log @@ -0,0 +1,275 @@ +Loading link script "procedure-callingconvention-phi-bank.ld" + +CONTROL FLOW GRAPH SSA + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + plus::$0 = plus::a#1 + plus::b#1 + plus::return#0 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus + plus::return#3 = phi( plus/plus::return#0 ) + plus::return#1 = plus::return#3 + return + to:@return + +__bank(bank) void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#2 = plus::return#1 + to:main::@1 +main::@1: scope:[main] from main + plus::return#4 = phi( main/plus::return#2 ) + main::$0 = plus::return#4 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + 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 +__constant char * const SCREEN = (char *)$400 +void __start() +__bank(bank) void main() +char main::$0 +__bank(bank) char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::$0 plus::return#3 plus::return#1 +Alias plus::return#2 = plus::return#4 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [8] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +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 +Constant right-side identified [0] plus::return#0 = plus::a#0 + plus::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant plus::return#0 = plus::a#0+plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#2 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#2 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings plus::return#2 +Constant inlined plus::return#2 = plus::return#0 +Constant inlined main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +CALL GRAPH +Calls in [main] to plus:1 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Adding NOP phi() at start of main +Adding NOP phi() at start of plus + +FINAL CONTROL FLOW GRAPH + +__bank(bank) void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = plus::return#0 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + to:plus::@return +plus::@return: scope:[plus] from plus + [5] return + to:@return + + +VARIABLE REGISTER WEIGHTS +__bank(bank) void main() +__bank(bank) char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [2] *SCREEN = plus::return#0 [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [plus] +Uplift Scope [main] +Uplift Scope [] + +Uplifting [plus] best 60 combination +Uplifting [main] best 60 combination +Uplifting [] best 60 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a far call procedure with a calling convention phi + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + // Global Constants & labels + .label SCREEN = $400 +.segment stage + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] + plus_from_main: + jsr plus + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = plus::return#0 -- _deref_pbuc1=vbuc2 + lda #plus.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + jmp __breturn + // plus::@return + __breturn: + // [5] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +__bank(bank) void main() +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return +__constant char plus::return#0 = plus::a#0+plus::b#0 // return + + + +FINAL ASSEMBLER +Score: 24 + + // File Comments +// Test a far call procedure with a calling convention phi + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + // Global Constants & labels + .label SCREEN = $400 +.segment stage + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] + jsr plus + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = plus::return#0 -- _deref_pbuc1=vbuc2 + lda #plus.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + // plus::@return + // [5] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-4.sym b/src/test/ref/procedure-callingconvention-phi-bank-4.sym new file mode 100644 index 000000000..303e3a74d --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-4.sym @@ -0,0 +1,10 @@ +__constant char * const SCREEN = (char *) 1024 +__bank(bank) void main() +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return +__constant char plus::return#0 = plus::a#0+plus::b#0 // return + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-5.asm b/src/test/ref/procedure-callingconvention-phi-bank-5.asm new file mode 100644 index 000000000..f04dd9403 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-5.asm @@ -0,0 +1,268 @@ +// Test a far call procedure with a calling convention phi +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + .label SCREEN = $400 +.segment Code +main: { + // func_bank1_a('0', 7) + lda #7 + ldx #'0' + jsr $ff6e + .byte func_bank1_a + .byte 1 + // func_bank1_a('0', 7) + // SCREEN[0] = func_bank1_a('0', 7) + // far call + sta SCREEN + // func_bank1_b('0', 7) + lda #7 + ldx #'0' + jsr func_bank1_b + // func_bank1_b('0', 7) + // SCREEN[0] = func_bank1_b('0', 7) + // far call + sta SCREEN + // func_bank1_c('0', 7) + jsr $ff6e + .byte func_bank1_c + .byte 1 + // func_bank1_c('0', 7) + // SCREEN[0] = func_bank1_c('0', 7) + // far call + sta SCREEN + // func_bank1_d('0', 7) + jsr $ff6e + .byte func_bank1_d + .byte 1 + // func_bank1_d('0', 7) + // SCREEN[0] = func_bank1_d('0', 7) + // far call + sta SCREEN + // func_bank1_e('0', 7) + jsr func_bank1_e + // func_bank1_e('0', 7) + // SCREEN[0] = func_bank1_e('0', 7) + // near call + sta SCREEN + // func_bank1_f('0', 7) + jsr func_bank1_f + // func_bank1_f('0', 7) + // SCREEN[0] = func_bank1_f('0', 7) + // near call + sta SCREEN + // func_bank2_a('0', 7) + lda #7 + ldx #'0' + jsr $ff6e + .byte func_bank2_a + .byte 2 + // func_bank2_a('0', 7) + // SCREEN[0] = func_bank2_a('0', 7) + // far call + sta SCREEN + // func_bank2_b('0', 7) + lda #7 + ldx #'0' + jsr func_bank2_b + // func_bank2_b('0', 7) + // SCREEN[0] = func_bank2_b('0', 7) + // far call + sta SCREEN + // func_bank2_c('0', 7) + jsr $ff6e + .byte func_bank2_c + .byte 2 + // func_bank2_c('0', 7) + // SCREEN[0] = func_bank2_c('0', 7) + // far call + sta SCREEN + // func_bank2_d('0', 7) + jsr $ff6e + .byte func_bank2_d + .byte 2 + // func_bank2_d('0', 7) + // SCREEN[0] = func_bank2_d('0', 7) + // far call + sta SCREEN + // func_bank2_e('0', 7) + jsr $ff6e + .byte func_bank2_e + .byte 2 + // func_bank2_e('0', 7) + // SCREEN[0] = func_bank2_e('0', 7) + // far call + sta SCREEN + // func_bank2_f('0', 7) + jsr $ff6e + .byte func_bank2_f + .byte 2 + // func_bank2_f('0', 7) + // SCREEN[0] = func_bank2_f('0', 7) + // far call + sta SCREEN + // } + rts +} +.segment stage +// __register(A) char func_bank1_a(__register(X) char a, __register(A) char b) +func_bank1_a: { + // a+b + stx.z $ff + clc + adc.z $ff + // } + rts +} +.segment platform +// __register(A) char func_bank1_b(__register(X) char a, __register(A) char b) +func_bank1_b: { + // a+b + stx.z $ff + clc + adc.z $ff + // } + rts +} +.segment stage +// __register(A) char func_bank1_c(char a, char b) +func_bank1_c: { + .const a = '0' + .const b = 7 + // func_bank1_a(a,b) + lda #b + ldx #a + jsr func_bank1_a + // func_bank1_a(a,b) + // } + rts +} +// __register(A) char func_bank1_d(char a, char b) +func_bank1_d: { + .const a = '0' + .const b = 7 + // func_bank2_a(a,b) + lda #b + ldx #a + jsr $ff6e + .byte func_bank2_a + .byte 2 + // func_bank2_a(a,b) + // } + rts +} +.segment platform +// __register(A) char func_bank1_e(char a, char b) +func_bank1_e: { + .const a = '0' + .const b = 7 + // func_bank1_a(a,b) + lda #b + ldx #a + jsr $ff6e + .byte func_bank1_a + .byte 1 + // func_bank1_a(a,b) + // } + rts +} +// __register(A) char func_bank1_f(char a, char b) +func_bank1_f: { + .const a = '0' + .const b = 7 + // func_bank2_a(a,b) + lda #b + ldx #a + jsr $ff6e + .byte func_bank2_a + .byte 2 + // func_bank2_a(a,b) + // } + rts +} +// __register(A) char func_bank2_a(__register(X) char a, __register(A) char b) +func_bank2_a: { + // a+b + stx.z $ff + clc + adc.z $ff + // } + rts +} +// __register(A) char func_bank2_b(__register(X) char a, __register(A) char b) +func_bank2_b: { + // a+b + stx.z $ff + clc + adc.z $ff + // } + rts +} +// __register(A) char func_bank2_c(char a, char b) +func_bank2_c: { + .const a = '0' + .const b = 7 + // func_bank1_a(a,b) + lda #b + ldx #a + jsr $ff6e + .byte func_bank1_a + .byte 1 + // func_bank1_a(a,b) + // } + rts +} +// __register(A) char func_bank2_d(char a, char b) +func_bank2_d: { + .const a = '0' + .const b = 7 + // func_bank2_a(a,b) + lda #b + ldx #a + jsr func_bank2_a + // func_bank2_a(a,b) + // } + rts +} +// __register(A) char func_bank2_e(char a, char b) +func_bank2_e: { + .const a = '0' + .const b = 7 + // func_bank2_b(a,b) + lda #b + ldx #a + jsr func_bank2_b + // func_bank2_b(a,b) + // } + rts +} +// __register(A) char func_bank2_f(char a, char b) +func_bank2_f: { + .const a = '0' + .const b = 7 + // func_bank1_b(a,b) + lda #b + ldx #a + jsr func_bank1_b + // func_bank1_b(a,b) + // } + rts +} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-5.cfg b/src/test/ref/procedure-callingconvention-phi-bank-5.cfg new file mode 100644 index 000000000..39617047b --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-5.cfg @@ -0,0 +1,224 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call func_bank1_a + [2] func_bank1_a::return#10 = func_bank1_a::return#0 + to:main::@1 +main::@1: scope:[main] from main + [3] main::$0 = func_bank1_a::return#10 + [4] *SCREEN = main::$0 + [5] call func_bank1_b + [6] func_bank1_b::return#3 = func_bank1_b::return#1 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = func_bank1_b::return#3 + [8] *SCREEN = main::$1 + [9] call func_bank1_c + [10] func_bank1_c::return#2 = func_bank1_c::return#0 + to:main::@3 +main::@3: scope:[main] from main::@2 + [11] main::$2 = func_bank1_c::return#2 + [12] *SCREEN = main::$2 + [13] call func_bank1_d + [14] func_bank1_d::return#2 = func_bank1_d::return#0 + to:main::@4 +main::@4: scope:[main] from main::@3 + [15] main::$3 = func_bank1_d::return#2 + [16] *SCREEN = main::$3 + [17] call func_bank1_e + [18] func_bank1_e::return#2 = func_bank1_e::return#0 + to:main::@5 +main::@5: scope:[main] from main::@4 + [19] main::$4 = func_bank1_e::return#2 + [20] *SCREEN = main::$4 + [21] call func_bank1_f + [22] func_bank1_f::return#2 = func_bank1_f::return#0 + to:main::@6 +main::@6: scope:[main] from main::@5 + [23] main::$5 = func_bank1_f::return#2 + [24] *SCREEN = main::$5 + [25] call func_bank2_a + [26] func_bank2_a::return#10 = func_bank2_a::return#1 + to:main::@7 +main::@7: scope:[main] from main::@6 + [27] main::$6 = func_bank2_a::return#10 + [28] *SCREEN = main::$6 + [29] call func_bank2_b + [30] func_bank2_b::return#3 = func_bank2_b::return#1 + to:main::@8 +main::@8: scope:[main] from main::@7 + [31] main::$7 = func_bank2_b::return#3 + [32] *SCREEN = main::$7 + [33] call func_bank2_c + [34] func_bank2_c::return#2 = func_bank2_c::return#0 + to:main::@9 +main::@9: scope:[main] from main::@8 + [35] main::$8 = func_bank2_c::return#2 + [36] *SCREEN = main::$8 + [37] call func_bank2_d + [38] func_bank2_d::return#2 = func_bank2_d::return#0 + to:main::@10 +main::@10: scope:[main] from main::@9 + [39] main::$9 = func_bank2_d::return#2 + [40] *SCREEN = main::$9 + [41] call func_bank2_e + [42] func_bank2_e::return#2 = func_bank2_e::return#0 + to:main::@11 +main::@11: scope:[main] from main::@10 + [43] main::$10 = func_bank2_e::return#2 + [44] *SCREEN = main::$10 + [45] call func_bank2_f + [46] func_bank2_f::return#2 = func_bank2_f::return#0 + to:main::@12 +main::@12: scope:[main] from main::@11 + [47] main::$11 = func_bank2_f::return#2 + [48] *SCREEN = main::$11 + to:main::@return +main::@return: scope:[main] from main::@12 + [49] return + to:@return + +__bank(bank) char func_bank1_a(char a , char b) +func_bank1_a: scope:[func_bank1_a] from func_bank1_c func_bank1_e func_bank2_c main + [50] func_bank1_a::b#4 = phi( func_bank1_c/func_bank1_c::b#0, func_bank1_e/func_bank1_e::b#0, func_bank2_c/func_bank2_c::b#0, main/7 ) + [50] func_bank1_a::a#4 = phi( func_bank1_c/func_bank1_c::a#0, func_bank1_e/func_bank1_e::a#0, func_bank2_c/func_bank2_c::a#0, main/'0' ) + [51] func_bank1_a::return#0 = func_bank1_a::a#4 + func_bank1_a::b#4 + to:func_bank1_a::@return +func_bank1_a::@return: scope:[func_bank1_a] from func_bank1_a + [52] return + to:@return + +char func_bank1_b(char a , char b) +func_bank1_b: scope:[func_bank1_b] from func_bank2_f main::@1 + [53] func_bank1_b::b#2 = phi( func_bank2_f/func_bank2_f::b#0, main::@1/7 ) + [53] func_bank1_b::a#2 = phi( func_bank2_f/func_bank2_f::a#0, main::@1/'0' ) + [54] func_bank1_b::return#1 = func_bank1_b::a#2 + func_bank1_b::b#2 + to:func_bank1_b::@return +func_bank1_b::@return: scope:[func_bank1_b] from func_bank1_b + [55] return + to:@return + +__bank(bank) char func_bank1_c(char a , char b) +func_bank1_c: scope:[func_bank1_c] from main::@2 + [56] phi() + [57] call func_bank1_a + [58] func_bank1_a::return#2 = func_bank1_a::return#0 + to:func_bank1_c::@1 +func_bank1_c::@1: scope:[func_bank1_c] from func_bank1_c + [59] func_bank1_c::return#0 = func_bank1_a::return#2 + to:func_bank1_c::@return +func_bank1_c::@return: scope:[func_bank1_c] from func_bank1_c::@1 + [60] return + to:@return + +__bank(bank) char func_bank1_d(char a , char b) +func_bank1_d: scope:[func_bank1_d] from main::@3 + [61] phi() + [62] call func_bank2_a + [63] func_bank2_a::return#0 = func_bank2_a::return#1 + to:func_bank1_d::@1 +func_bank1_d::@1: scope:[func_bank1_d] from func_bank1_d + [64] func_bank1_d::return#0 = func_bank2_a::return#0 + to:func_bank1_d::@return +func_bank1_d::@return: scope:[func_bank1_d] from func_bank1_d::@1 + [65] return + to:@return + +char func_bank1_e(char a , char b) +func_bank1_e: scope:[func_bank1_e] from main::@4 + [66] phi() + [67] call func_bank1_a + [68] func_bank1_a::return#4 = func_bank1_a::return#0 + to:func_bank1_e::@1 +func_bank1_e::@1: scope:[func_bank1_e] from func_bank1_e + [69] func_bank1_e::return#0 = func_bank1_a::return#4 + to:func_bank1_e::@return +func_bank1_e::@return: scope:[func_bank1_e] from func_bank1_e::@1 + [70] return + to:@return + +char func_bank1_f(char a , char b) +func_bank1_f: scope:[func_bank1_f] from main::@5 + [71] phi() + [72] call func_bank2_a + [73] func_bank2_a::return#4 = func_bank2_a::return#1 + to:func_bank1_f::@1 +func_bank1_f::@1: scope:[func_bank1_f] from func_bank1_f + [74] func_bank1_f::return#0 = func_bank2_a::return#4 + to:func_bank1_f::@return +func_bank1_f::@return: scope:[func_bank1_f] from func_bank1_f::@1 + [75] return + to:@return + +__bank(bank) char func_bank2_a(char a , char b) +func_bank2_a: scope:[func_bank2_a] from func_bank1_d func_bank1_f func_bank2_d main::@6 + [76] func_bank2_a::b#4 = phi( func_bank1_d/func_bank1_d::b#0, func_bank1_f/func_bank1_f::b#0, func_bank2_d/func_bank2_d::b#0, main::@6/7 ) + [76] func_bank2_a::a#4 = phi( func_bank1_d/func_bank1_d::a#0, func_bank1_f/func_bank1_f::a#0, func_bank2_d/func_bank2_d::a#0, main::@6/'0' ) + [77] func_bank2_a::return#1 = func_bank2_a::a#4 + func_bank2_a::b#4 + to:func_bank2_a::@return +func_bank2_a::@return: scope:[func_bank2_a] from func_bank2_a + [78] return + to:@return + +char func_bank2_b(char a , char b) +func_bank2_b: scope:[func_bank2_b] from func_bank2_e main::@7 + [79] func_bank2_b::b#2 = phi( func_bank2_e/func_bank2_e::b#0, main::@7/7 ) + [79] func_bank2_b::a#2 = phi( func_bank2_e/func_bank2_e::a#0, main::@7/'0' ) + [80] func_bank2_b::return#1 = func_bank2_b::a#2 + func_bank2_b::b#2 + to:func_bank2_b::@return +func_bank2_b::@return: scope:[func_bank2_b] from func_bank2_b + [81] return + to:@return + +__bank(bank) char func_bank2_c(char a , char b) +func_bank2_c: scope:[func_bank2_c] from main::@8 + [82] phi() + [83] call func_bank1_a + [84] func_bank1_a::return#3 = func_bank1_a::return#0 + to:func_bank2_c::@1 +func_bank2_c::@1: scope:[func_bank2_c] from func_bank2_c + [85] func_bank2_c::return#0 = func_bank1_a::return#3 + to:func_bank2_c::@return +func_bank2_c::@return: scope:[func_bank2_c] from func_bank2_c::@1 + [86] return + to:@return + +__bank(bank) char func_bank2_d(char a , char b) +func_bank2_d: scope:[func_bank2_d] from main::@9 + [87] phi() + [88] call func_bank2_a + [89] func_bank2_a::return#3 = func_bank2_a::return#1 + to:func_bank2_d::@1 +func_bank2_d::@1: scope:[func_bank2_d] from func_bank2_d + [90] func_bank2_d::return#0 = func_bank2_a::return#3 + to:func_bank2_d::@return +func_bank2_d::@return: scope:[func_bank2_d] from func_bank2_d::@1 + [91] return + to:@return + +__bank(bank) char func_bank2_e(char a , char b) +func_bank2_e: scope:[func_bank2_e] from main::@10 + [92] phi() + [93] call func_bank2_b + [94] func_bank2_b::return#0 = func_bank2_b::return#1 + to:func_bank2_e::@1 +func_bank2_e::@1: scope:[func_bank2_e] from func_bank2_e + [95] func_bank2_e::return#0 = func_bank2_b::return#0 + to:func_bank2_e::@return +func_bank2_e::@return: scope:[func_bank2_e] from func_bank2_e::@1 + [96] return + to:@return + +__bank(bank) char func_bank2_f(char a , char b) +func_bank2_f: scope:[func_bank2_f] from main::@11 + [97] phi() + [98] call func_bank1_b + [99] func_bank1_b::return#0 = func_bank1_b::return#1 + to:func_bank2_f::@1 +func_bank2_f::@1: scope:[func_bank2_f] from func_bank2_f + [100] func_bank2_f::return#0 = func_bank1_b::return#0 + to:func_bank2_f::@return +func_bank2_f::@return: scope:[func_bank2_f] from func_bank2_f::@1 + [101] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-phi-bank-5.log b/src/test/ref/procedure-callingconvention-phi-bank-5.log new file mode 100644 index 000000000..1e374e133 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-5.log @@ -0,0 +1,2642 @@ +Loading link script "procedure-callingconvention-phi-bank.ld" + +CONTROL FLOW GRAPH SSA + +__bank(bank) char func_bank1_a(char a , char b) +func_bank1_a: scope:[func_bank1_a] from func_bank1_c func_bank1_e func_bank2_c main + func_bank1_a::b#4 = phi( func_bank1_c/func_bank1_a::b#0, func_bank1_e/func_bank1_a::b#2, func_bank2_c/func_bank1_a::b#1, main/func_bank1_a::b#3 ) + func_bank1_a::a#4 = phi( func_bank1_c/func_bank1_a::a#0, func_bank1_e/func_bank1_a::a#2, func_bank2_c/func_bank1_a::a#1, main/func_bank1_a::a#3 ) + func_bank1_a::$0 = func_bank1_a::a#4 + func_bank1_a::b#4 + func_bank1_a::return#0 = func_bank1_a::$0 + to:func_bank1_a::@return +func_bank1_a::@return: scope:[func_bank1_a] from func_bank1_a + func_bank1_a::return#6 = phi( func_bank1_a/func_bank1_a::return#0 ) + func_bank1_a::return#1 = func_bank1_a::return#6 + return + to:@return + +__bank(bank) char func_bank1_c(char a , char b) +func_bank1_c: scope:[func_bank1_c] from main::@2 + func_bank1_c::b#1 = phi( main::@2/func_bank1_c::b#0 ) + func_bank1_c::a#1 = phi( main::@2/func_bank1_c::a#0 ) + func_bank1_a::a#0 = func_bank1_c::a#1 + func_bank1_a::b#0 = func_bank1_c::b#1 + call func_bank1_a + func_bank1_a::return#2 = func_bank1_a::return#1 + to:func_bank1_c::@1 +func_bank1_c::@1: scope:[func_bank1_c] from func_bank1_c + func_bank1_a::return#7 = phi( func_bank1_c/func_bank1_a::return#2 ) + func_bank1_c::$0 = func_bank1_a::return#7 + func_bank1_c::return#0 = func_bank1_c::$0 + to:func_bank1_c::@return +func_bank1_c::@return: scope:[func_bank1_c] from func_bank1_c::@1 + func_bank1_c::return#3 = phi( func_bank1_c::@1/func_bank1_c::return#0 ) + func_bank1_c::return#1 = func_bank1_c::return#3 + return + to:@return + +__bank(bank) char func_bank1_d(char a , char b) +func_bank1_d: scope:[func_bank1_d] from main::@3 + func_bank1_d::b#1 = phi( main::@3/func_bank1_d::b#0 ) + func_bank1_d::a#1 = phi( main::@3/func_bank1_d::a#0 ) + func_bank2_a::a#0 = func_bank1_d::a#1 + func_bank2_a::b#0 = func_bank1_d::b#1 + call func_bank2_a + func_bank2_a::return#0 = func_bank2_a::return#2 + to:func_bank1_d::@1 +func_bank1_d::@1: scope:[func_bank1_d] from func_bank1_d + func_bank2_a::return#6 = phi( func_bank1_d/func_bank2_a::return#0 ) + func_bank1_d::$0 = func_bank2_a::return#6 + func_bank1_d::return#0 = func_bank1_d::$0 + to:func_bank1_d::@return +func_bank1_d::@return: scope:[func_bank1_d] from func_bank1_d::@1 + func_bank1_d::return#3 = phi( func_bank1_d::@1/func_bank1_d::return#0 ) + func_bank1_d::return#1 = func_bank1_d::return#3 + return + to:@return + +__bank(bank) char func_bank2_a(char a , char b) +func_bank2_a: scope:[func_bank2_a] from func_bank1_d func_bank1_f func_bank2_d main::@6 + func_bank2_a::b#4 = phi( func_bank1_d/func_bank2_a::b#0, func_bank1_f/func_bank2_a::b#2, func_bank2_d/func_bank2_a::b#1, main::@6/func_bank2_a::b#3 ) + func_bank2_a::a#4 = phi( func_bank1_d/func_bank2_a::a#0, func_bank1_f/func_bank2_a::a#2, func_bank2_d/func_bank2_a::a#1, main::@6/func_bank2_a::a#3 ) + func_bank2_a::$0 = func_bank2_a::a#4 + func_bank2_a::b#4 + func_bank2_a::return#1 = func_bank2_a::$0 + to:func_bank2_a::@return +func_bank2_a::@return: scope:[func_bank2_a] from func_bank2_a + func_bank2_a::return#7 = phi( func_bank2_a/func_bank2_a::return#1 ) + func_bank2_a::return#2 = func_bank2_a::return#7 + return + to:@return + +__bank(bank) char func_bank2_c(char a , char b) +func_bank2_c: scope:[func_bank2_c] from main::@8 + func_bank2_c::b#1 = phi( main::@8/func_bank2_c::b#0 ) + func_bank2_c::a#1 = phi( main::@8/func_bank2_c::a#0 ) + func_bank1_a::a#1 = func_bank2_c::a#1 + func_bank1_a::b#1 = func_bank2_c::b#1 + call func_bank1_a + func_bank1_a::return#3 = func_bank1_a::return#1 + to:func_bank2_c::@1 +func_bank2_c::@1: scope:[func_bank2_c] from func_bank2_c + func_bank1_a::return#8 = phi( func_bank2_c/func_bank1_a::return#3 ) + func_bank2_c::$0 = func_bank1_a::return#8 + func_bank2_c::return#0 = func_bank2_c::$0 + to:func_bank2_c::@return +func_bank2_c::@return: scope:[func_bank2_c] from func_bank2_c::@1 + func_bank2_c::return#3 = phi( func_bank2_c::@1/func_bank2_c::return#0 ) + func_bank2_c::return#1 = func_bank2_c::return#3 + return + to:@return + +__bank(bank) char func_bank2_d(char a , char b) +func_bank2_d: scope:[func_bank2_d] from main::@9 + func_bank2_d::b#1 = phi( main::@9/func_bank2_d::b#0 ) + func_bank2_d::a#1 = phi( main::@9/func_bank2_d::a#0 ) + func_bank2_a::a#1 = func_bank2_d::a#1 + func_bank2_a::b#1 = func_bank2_d::b#1 + call func_bank2_a + func_bank2_a::return#3 = func_bank2_a::return#2 + to:func_bank2_d::@1 +func_bank2_d::@1: scope:[func_bank2_d] from func_bank2_d + func_bank2_a::return#8 = phi( func_bank2_d/func_bank2_a::return#3 ) + func_bank2_d::$0 = func_bank2_a::return#8 + func_bank2_d::return#0 = func_bank2_d::$0 + to:func_bank2_d::@return +func_bank2_d::@return: scope:[func_bank2_d] from func_bank2_d::@1 + func_bank2_d::return#3 = phi( func_bank2_d::@1/func_bank2_d::return#0 ) + func_bank2_d::return#1 = func_bank2_d::return#3 + return + to:@return + +__bank(bank) char func_bank2_e(char a , char b) +func_bank2_e: scope:[func_bank2_e] from main::@10 + func_bank2_e::b#1 = phi( main::@10/func_bank2_e::b#0 ) + func_bank2_e::a#1 = phi( main::@10/func_bank2_e::a#0 ) + func_bank2_b::a#0 = func_bank2_e::a#1 + func_bank2_b::b#0 = func_bank2_e::b#1 + call func_bank2_b + func_bank2_b::return#0 = func_bank2_b::return#2 + to:func_bank2_e::@1 +func_bank2_e::@1: scope:[func_bank2_e] from func_bank2_e + func_bank2_b::return#4 = phi( func_bank2_e/func_bank2_b::return#0 ) + func_bank2_e::$0 = func_bank2_b::return#4 + func_bank2_e::return#0 = func_bank2_e::$0 + to:func_bank2_e::@return +func_bank2_e::@return: scope:[func_bank2_e] from func_bank2_e::@1 + func_bank2_e::return#3 = phi( func_bank2_e::@1/func_bank2_e::return#0 ) + func_bank2_e::return#1 = func_bank2_e::return#3 + return + to:@return + +__bank(bank) char func_bank2_f(char a , char b) +func_bank2_f: scope:[func_bank2_f] from main::@11 + func_bank2_f::b#1 = phi( main::@11/func_bank2_f::b#0 ) + func_bank2_f::a#1 = phi( main::@11/func_bank2_f::a#0 ) + func_bank1_b::a#0 = func_bank2_f::a#1 + func_bank1_b::b#0 = func_bank2_f::b#1 + call func_bank1_b + func_bank1_b::return#0 = func_bank1_b::return#2 + to:func_bank2_f::@1 +func_bank2_f::@1: scope:[func_bank2_f] from func_bank2_f + func_bank1_b::return#4 = phi( func_bank2_f/func_bank1_b::return#0 ) + func_bank2_f::$0 = func_bank1_b::return#4 + func_bank2_f::return#0 = func_bank2_f::$0 + to:func_bank2_f::@return +func_bank2_f::@return: scope:[func_bank2_f] from func_bank2_f::@1 + func_bank2_f::return#3 = phi( func_bank2_f::@1/func_bank2_f::return#0 ) + func_bank2_f::return#1 = func_bank2_f::return#3 + return + to:@return + +char func_bank1_b(char a , char b) +func_bank1_b: scope:[func_bank1_b] from func_bank2_f main::@1 + func_bank1_b::b#2 = phi( func_bank2_f/func_bank1_b::b#0, main::@1/func_bank1_b::b#1 ) + func_bank1_b::a#2 = phi( func_bank2_f/func_bank1_b::a#0, main::@1/func_bank1_b::a#1 ) + func_bank1_b::$0 = func_bank1_b::a#2 + func_bank1_b::b#2 + func_bank1_b::return#1 = func_bank1_b::$0 + to:func_bank1_b::@return +func_bank1_b::@return: scope:[func_bank1_b] from func_bank1_b + func_bank1_b::return#5 = phi( func_bank1_b/func_bank1_b::return#1 ) + func_bank1_b::return#2 = func_bank1_b::return#5 + return + to:@return + +char func_bank2_b(char a , char b) +func_bank2_b: scope:[func_bank2_b] from func_bank2_e main::@7 + func_bank2_b::b#2 = phi( func_bank2_e/func_bank2_b::b#0, main::@7/func_bank2_b::b#1 ) + func_bank2_b::a#2 = phi( func_bank2_e/func_bank2_b::a#0, main::@7/func_bank2_b::a#1 ) + func_bank2_b::$0 = func_bank2_b::a#2 + func_bank2_b::b#2 + func_bank2_b::return#1 = func_bank2_b::$0 + to:func_bank2_b::@return +func_bank2_b::@return: scope:[func_bank2_b] from func_bank2_b + func_bank2_b::return#5 = phi( func_bank2_b/func_bank2_b::return#1 ) + func_bank2_b::return#2 = func_bank2_b::return#5 + return + to:@return + +char func_bank1_e(char a , char b) +func_bank1_e: scope:[func_bank1_e] from main::@4 + func_bank1_e::b#1 = phi( main::@4/func_bank1_e::b#0 ) + func_bank1_e::a#1 = phi( main::@4/func_bank1_e::a#0 ) + func_bank1_a::a#2 = func_bank1_e::a#1 + func_bank1_a::b#2 = func_bank1_e::b#1 + call func_bank1_a + func_bank1_a::return#4 = func_bank1_a::return#1 + to:func_bank1_e::@1 +func_bank1_e::@1: scope:[func_bank1_e] from func_bank1_e + func_bank1_a::return#9 = phi( func_bank1_e/func_bank1_a::return#4 ) + func_bank1_e::$0 = func_bank1_a::return#9 + func_bank1_e::return#0 = func_bank1_e::$0 + to:func_bank1_e::@return +func_bank1_e::@return: scope:[func_bank1_e] from func_bank1_e::@1 + func_bank1_e::return#3 = phi( func_bank1_e::@1/func_bank1_e::return#0 ) + func_bank1_e::return#1 = func_bank1_e::return#3 + return + to:@return + +char func_bank1_f(char a , char b) +func_bank1_f: scope:[func_bank1_f] from main::@5 + func_bank1_f::b#1 = phi( main::@5/func_bank1_f::b#0 ) + func_bank1_f::a#1 = phi( main::@5/func_bank1_f::a#0 ) + func_bank2_a::a#2 = func_bank1_f::a#1 + func_bank2_a::b#2 = func_bank1_f::b#1 + call func_bank2_a + func_bank2_a::return#4 = func_bank2_a::return#2 + to:func_bank1_f::@1 +func_bank1_f::@1: scope:[func_bank1_f] from func_bank1_f + func_bank2_a::return#9 = phi( func_bank1_f/func_bank2_a::return#4 ) + func_bank1_f::$0 = func_bank2_a::return#9 + func_bank1_f::return#0 = func_bank1_f::$0 + to:func_bank1_f::@return +func_bank1_f::@return: scope:[func_bank1_f] from func_bank1_f::@1 + func_bank1_f::return#3 = phi( func_bank1_f::@1/func_bank1_f::return#0 ) + func_bank1_f::return#1 = func_bank1_f::return#3 + return + to:@return + +void main() +main: scope:[main] from __start + func_bank1_a::a#3 = '0' + func_bank1_a::b#3 = 7 + call func_bank1_a + func_bank1_a::return#5 = func_bank1_a::return#1 + to:main::@1 +main::@1: scope:[main] from main + func_bank1_a::return#10 = phi( main/func_bank1_a::return#5 ) + main::$0 = func_bank1_a::return#10 + SCREEN[0] = main::$0 + func_bank1_b::a#1 = '0' + func_bank1_b::b#1 = 7 + call func_bank1_b + func_bank1_b::return#3 = func_bank1_b::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + func_bank1_b::return#6 = phi( main::@1/func_bank1_b::return#3 ) + main::$1 = func_bank1_b::return#6 + SCREEN[0] = main::$1 + func_bank1_c::a#0 = '0' + func_bank1_c::b#0 = 7 + call func_bank1_c + func_bank1_c::return#2 = func_bank1_c::return#1 + to:main::@3 +main::@3: scope:[main] from main::@2 + func_bank1_c::return#4 = phi( main::@2/func_bank1_c::return#2 ) + main::$2 = func_bank1_c::return#4 + SCREEN[0] = main::$2 + func_bank1_d::a#0 = '0' + func_bank1_d::b#0 = 7 + call func_bank1_d + func_bank1_d::return#2 = func_bank1_d::return#1 + to:main::@4 +main::@4: scope:[main] from main::@3 + func_bank1_d::return#4 = phi( main::@3/func_bank1_d::return#2 ) + main::$3 = func_bank1_d::return#4 + SCREEN[0] = main::$3 + func_bank1_e::a#0 = '0' + func_bank1_e::b#0 = 7 + call func_bank1_e + func_bank1_e::return#2 = func_bank1_e::return#1 + to:main::@5 +main::@5: scope:[main] from main::@4 + func_bank1_e::return#4 = phi( main::@4/func_bank1_e::return#2 ) + main::$4 = func_bank1_e::return#4 + SCREEN[0] = main::$4 + func_bank1_f::a#0 = '0' + func_bank1_f::b#0 = 7 + call func_bank1_f + func_bank1_f::return#2 = func_bank1_f::return#1 + to:main::@6 +main::@6: scope:[main] from main::@5 + func_bank1_f::return#4 = phi( main::@5/func_bank1_f::return#2 ) + main::$5 = func_bank1_f::return#4 + SCREEN[0] = main::$5 + func_bank2_a::a#3 = '0' + func_bank2_a::b#3 = 7 + call func_bank2_a + func_bank2_a::return#5 = func_bank2_a::return#2 + to:main::@7 +main::@7: scope:[main] from main::@6 + func_bank2_a::return#10 = phi( main::@6/func_bank2_a::return#5 ) + main::$6 = func_bank2_a::return#10 + SCREEN[0] = main::$6 + func_bank2_b::a#1 = '0' + func_bank2_b::b#1 = 7 + call func_bank2_b + func_bank2_b::return#3 = func_bank2_b::return#2 + to:main::@8 +main::@8: scope:[main] from main::@7 + func_bank2_b::return#6 = phi( main::@7/func_bank2_b::return#3 ) + main::$7 = func_bank2_b::return#6 + SCREEN[0] = main::$7 + func_bank2_c::a#0 = '0' + func_bank2_c::b#0 = 7 + call func_bank2_c + func_bank2_c::return#2 = func_bank2_c::return#1 + to:main::@9 +main::@9: scope:[main] from main::@8 + func_bank2_c::return#4 = phi( main::@8/func_bank2_c::return#2 ) + main::$8 = func_bank2_c::return#4 + SCREEN[0] = main::$8 + func_bank2_d::a#0 = '0' + func_bank2_d::b#0 = 7 + call func_bank2_d + func_bank2_d::return#2 = func_bank2_d::return#1 + to:main::@10 +main::@10: scope:[main] from main::@9 + func_bank2_d::return#4 = phi( main::@9/func_bank2_d::return#2 ) + main::$9 = func_bank2_d::return#4 + SCREEN[0] = main::$9 + func_bank2_e::a#0 = '0' + func_bank2_e::b#0 = 7 + call func_bank2_e + func_bank2_e::return#2 = func_bank2_e::return#1 + to:main::@11 +main::@11: scope:[main] from main::@10 + func_bank2_e::return#4 = phi( main::@10/func_bank2_e::return#2 ) + main::$10 = func_bank2_e::return#4 + SCREEN[0] = main::$10 + func_bank2_f::a#0 = '0' + func_bank2_f::b#0 = 7 + call func_bank2_f + func_bank2_f::return#2 = func_bank2_f::return#1 + to:main::@12 +main::@12: scope:[main] from main::@11 + func_bank2_f::return#4 = phi( main::@11/func_bank2_f::return#2 ) + main::$11 = func_bank2_f::return#4 + SCREEN[0] = main::$11 + to:main::@return +main::@return: scope:[main] from main::@12 + 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 +__constant char * const SCREEN = (char *)$400 +void __start() +__bank(bank) char func_bank1_a(char a , char b) +char func_bank1_a::$0 +char func_bank1_a::a +char func_bank1_a::a#0 +char func_bank1_a::a#1 +char func_bank1_a::a#2 +char func_bank1_a::a#3 +char func_bank1_a::a#4 +char func_bank1_a::b +char func_bank1_a::b#0 +char func_bank1_a::b#1 +char func_bank1_a::b#2 +char func_bank1_a::b#3 +char func_bank1_a::b#4 +char func_bank1_a::return +char func_bank1_a::return#0 +char func_bank1_a::return#1 +char func_bank1_a::return#10 +char func_bank1_a::return#2 +char func_bank1_a::return#3 +char func_bank1_a::return#4 +char func_bank1_a::return#5 +char func_bank1_a::return#6 +char func_bank1_a::return#7 +char func_bank1_a::return#8 +char func_bank1_a::return#9 +char func_bank1_b(char a , char b) +char func_bank1_b::$0 +char func_bank1_b::a +char func_bank1_b::a#0 +char func_bank1_b::a#1 +char func_bank1_b::a#2 +char func_bank1_b::b +char func_bank1_b::b#0 +char func_bank1_b::b#1 +char func_bank1_b::b#2 +char func_bank1_b::return +char func_bank1_b::return#0 +char func_bank1_b::return#1 +char func_bank1_b::return#2 +char func_bank1_b::return#3 +char func_bank1_b::return#4 +char func_bank1_b::return#5 +char func_bank1_b::return#6 +__bank(bank) char func_bank1_c(char a , char b) +char func_bank1_c::$0 +char func_bank1_c::a +char func_bank1_c::a#0 +char func_bank1_c::a#1 +char func_bank1_c::b +char func_bank1_c::b#0 +char func_bank1_c::b#1 +char func_bank1_c::return +char func_bank1_c::return#0 +char func_bank1_c::return#1 +char func_bank1_c::return#2 +char func_bank1_c::return#3 +char func_bank1_c::return#4 +__bank(bank) char func_bank1_d(char a , char b) +char func_bank1_d::$0 +char func_bank1_d::a +char func_bank1_d::a#0 +char func_bank1_d::a#1 +char func_bank1_d::b +char func_bank1_d::b#0 +char func_bank1_d::b#1 +char func_bank1_d::return +char func_bank1_d::return#0 +char func_bank1_d::return#1 +char func_bank1_d::return#2 +char func_bank1_d::return#3 +char func_bank1_d::return#4 +char func_bank1_e(char a , char b) +char func_bank1_e::$0 +char func_bank1_e::a +char func_bank1_e::a#0 +char func_bank1_e::a#1 +char func_bank1_e::b +char func_bank1_e::b#0 +char func_bank1_e::b#1 +char func_bank1_e::return +char func_bank1_e::return#0 +char func_bank1_e::return#1 +char func_bank1_e::return#2 +char func_bank1_e::return#3 +char func_bank1_e::return#4 +char func_bank1_f(char a , char b) +char func_bank1_f::$0 +char func_bank1_f::a +char func_bank1_f::a#0 +char func_bank1_f::a#1 +char func_bank1_f::b +char func_bank1_f::b#0 +char func_bank1_f::b#1 +char func_bank1_f::return +char func_bank1_f::return#0 +char func_bank1_f::return#1 +char func_bank1_f::return#2 +char func_bank1_f::return#3 +char func_bank1_f::return#4 +__bank(bank) char func_bank2_a(char a , char b) +char func_bank2_a::$0 +char func_bank2_a::a +char func_bank2_a::a#0 +char func_bank2_a::a#1 +char func_bank2_a::a#2 +char func_bank2_a::a#3 +char func_bank2_a::a#4 +char func_bank2_a::b +char func_bank2_a::b#0 +char func_bank2_a::b#1 +char func_bank2_a::b#2 +char func_bank2_a::b#3 +char func_bank2_a::b#4 +char func_bank2_a::return +char func_bank2_a::return#0 +char func_bank2_a::return#1 +char func_bank2_a::return#10 +char func_bank2_a::return#2 +char func_bank2_a::return#3 +char func_bank2_a::return#4 +char func_bank2_a::return#5 +char func_bank2_a::return#6 +char func_bank2_a::return#7 +char func_bank2_a::return#8 +char func_bank2_a::return#9 +char func_bank2_b(char a , char b) +char func_bank2_b::$0 +char func_bank2_b::a +char func_bank2_b::a#0 +char func_bank2_b::a#1 +char func_bank2_b::a#2 +char func_bank2_b::b +char func_bank2_b::b#0 +char func_bank2_b::b#1 +char func_bank2_b::b#2 +char func_bank2_b::return +char func_bank2_b::return#0 +char func_bank2_b::return#1 +char func_bank2_b::return#2 +char func_bank2_b::return#3 +char func_bank2_b::return#4 +char func_bank2_b::return#5 +char func_bank2_b::return#6 +__bank(bank) char func_bank2_c(char a , char b) +char func_bank2_c::$0 +char func_bank2_c::a +char func_bank2_c::a#0 +char func_bank2_c::a#1 +char func_bank2_c::b +char func_bank2_c::b#0 +char func_bank2_c::b#1 +char func_bank2_c::return +char func_bank2_c::return#0 +char func_bank2_c::return#1 +char func_bank2_c::return#2 +char func_bank2_c::return#3 +char func_bank2_c::return#4 +__bank(bank) char func_bank2_d(char a , char b) +char func_bank2_d::$0 +char func_bank2_d::a +char func_bank2_d::a#0 +char func_bank2_d::a#1 +char func_bank2_d::b +char func_bank2_d::b#0 +char func_bank2_d::b#1 +char func_bank2_d::return +char func_bank2_d::return#0 +char func_bank2_d::return#1 +char func_bank2_d::return#2 +char func_bank2_d::return#3 +char func_bank2_d::return#4 +__bank(bank) char func_bank2_e(char a , char b) +char func_bank2_e::$0 +char func_bank2_e::a +char func_bank2_e::a#0 +char func_bank2_e::a#1 +char func_bank2_e::b +char func_bank2_e::b#0 +char func_bank2_e::b#1 +char func_bank2_e::return +char func_bank2_e::return#0 +char func_bank2_e::return#1 +char func_bank2_e::return#2 +char func_bank2_e::return#3 +char func_bank2_e::return#4 +__bank(bank) char func_bank2_f(char a , char b) +char func_bank2_f::$0 +char func_bank2_f::a +char func_bank2_f::a#0 +char func_bank2_f::a#1 +char func_bank2_f::b +char func_bank2_f::b#0 +char func_bank2_f::b#1 +char func_bank2_f::return +char func_bank2_f::return#0 +char func_bank2_f::return#1 +char func_bank2_f::return#2 +char func_bank2_f::return#3 +char func_bank2_f::return#4 +void main() +char main::$0 +char main::$1 +char main::$10 +char main::$11 +char main::$2 +char main::$3 +char main::$4 +char main::$5 +char main::$6 +char main::$7 +char main::$8 +char main::$9 + +Adding number conversion cast (unumber) 7 in func_bank1_a::b#3 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Adding number conversion cast (unumber) 7 in func_bank1_b::b#1 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$1 +Adding number conversion cast (unumber) 7 in func_bank1_c::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$2 +Adding number conversion cast (unumber) 7 in func_bank1_d::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$3 +Adding number conversion cast (unumber) 7 in func_bank1_e::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$4 +Adding number conversion cast (unumber) 7 in func_bank1_f::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$5 +Adding number conversion cast (unumber) 7 in func_bank2_a::b#3 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$6 +Adding number conversion cast (unumber) 7 in func_bank2_b::b#1 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$7 +Adding number conversion cast (unumber) 7 in func_bank2_c::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$8 +Adding number conversion cast (unumber) 7 in func_bank2_d::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$9 +Adding number conversion cast (unumber) 7 in func_bank2_e::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$10 +Adding number conversion cast (unumber) 7 in func_bank2_f::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$11 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast func_bank1_a::b#3 = (unumber)7 +Inlining cast func_bank1_b::b#1 = (unumber)7 +Inlining cast func_bank1_c::b#0 = (unumber)7 +Inlining cast func_bank1_d::b#0 = (unumber)7 +Inlining cast func_bank1_e::b#0 = (unumber)7 +Inlining cast func_bank1_f::b#0 = (unumber)7 +Inlining cast func_bank2_a::b#3 = (unumber)7 +Inlining cast func_bank2_b::b#1 = (unumber)7 +Inlining cast func_bank2_c::b#0 = (unumber)7 +Inlining cast func_bank2_d::b#0 = (unumber)7 +Inlining cast func_bank2_e::b#0 = (unumber)7 +Inlining cast func_bank2_f::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias func_bank1_a::return#0 = func_bank1_a::$0 func_bank1_a::return#6 func_bank1_a::return#1 +Alias func_bank1_a::return#2 = func_bank1_a::return#7 +Alias func_bank1_c::return#0 = func_bank1_c::$0 func_bank1_c::return#3 func_bank1_c::return#1 +Alias func_bank2_a::return#0 = func_bank2_a::return#6 +Alias func_bank1_d::return#0 = func_bank1_d::$0 func_bank1_d::return#3 func_bank1_d::return#1 +Alias func_bank2_a::return#1 = func_bank2_a::$0 func_bank2_a::return#7 func_bank2_a::return#2 +Alias func_bank1_a::return#3 = func_bank1_a::return#8 +Alias func_bank2_c::return#0 = func_bank2_c::$0 func_bank2_c::return#3 func_bank2_c::return#1 +Alias func_bank2_a::return#3 = func_bank2_a::return#8 +Alias func_bank2_d::return#0 = func_bank2_d::$0 func_bank2_d::return#3 func_bank2_d::return#1 +Alias func_bank2_b::return#0 = func_bank2_b::return#4 +Alias func_bank2_e::return#0 = func_bank2_e::$0 func_bank2_e::return#3 func_bank2_e::return#1 +Alias func_bank1_b::return#0 = func_bank1_b::return#4 +Alias func_bank2_f::return#0 = func_bank2_f::$0 func_bank2_f::return#3 func_bank2_f::return#1 +Alias func_bank1_b::return#1 = func_bank1_b::$0 func_bank1_b::return#5 func_bank1_b::return#2 +Alias func_bank2_b::return#1 = func_bank2_b::$0 func_bank2_b::return#5 func_bank2_b::return#2 +Alias func_bank1_a::return#4 = func_bank1_a::return#9 +Alias func_bank1_e::return#0 = func_bank1_e::$0 func_bank1_e::return#3 func_bank1_e::return#1 +Alias func_bank2_a::return#4 = func_bank2_a::return#9 +Alias func_bank1_f::return#0 = func_bank1_f::$0 func_bank1_f::return#3 func_bank1_f::return#1 +Alias func_bank1_a::return#10 = func_bank1_a::return#5 +Alias func_bank1_b::return#3 = func_bank1_b::return#6 +Alias func_bank1_c::return#2 = func_bank1_c::return#4 +Alias func_bank1_d::return#2 = func_bank1_d::return#4 +Alias func_bank1_e::return#2 = func_bank1_e::return#4 +Alias func_bank1_f::return#2 = func_bank1_f::return#4 +Alias func_bank2_a::return#10 = func_bank2_a::return#5 +Alias func_bank2_b::return#3 = func_bank2_b::return#6 +Alias func_bank2_c::return#2 = func_bank2_c::return#4 +Alias func_bank2_d::return#2 = func_bank2_d::return#4 +Alias func_bank2_e::return#2 = func_bank2_e::return#4 +Alias func_bank2_f::return#2 = func_bank2_f::return#4 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values func_bank1_c::a#1 func_bank1_c::a#0 +Identical Phi Values func_bank1_c::b#1 func_bank1_c::b#0 +Identical Phi Values func_bank1_d::a#1 func_bank1_d::a#0 +Identical Phi Values func_bank1_d::b#1 func_bank1_d::b#0 +Identical Phi Values func_bank2_c::a#1 func_bank2_c::a#0 +Identical Phi Values func_bank2_c::b#1 func_bank2_c::b#0 +Identical Phi Values func_bank2_d::a#1 func_bank2_d::a#0 +Identical Phi Values func_bank2_d::b#1 func_bank2_d::b#0 +Identical Phi Values func_bank2_e::a#1 func_bank2_e::a#0 +Identical Phi Values func_bank2_e::b#1 func_bank2_e::b#0 +Identical Phi Values func_bank2_f::a#1 func_bank2_f::a#0 +Identical Phi Values func_bank2_f::b#1 func_bank2_f::b#0 +Identical Phi Values func_bank1_e::a#1 func_bank1_e::a#0 +Identical Phi Values func_bank1_e::b#1 func_bank1_e::b#0 +Identical Phi Values func_bank1_f::a#1 func_bank1_f::a#0 +Identical Phi Values func_bank1_f::b#1 func_bank1_f::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant func_bank1_a::a#3 = '0' +Constant func_bank1_a::b#3 = 7 +Constant func_bank1_b::a#1 = '0' +Constant func_bank1_b::b#1 = 7 +Constant func_bank1_c::a#0 = '0' +Constant func_bank1_c::b#0 = 7 +Constant func_bank1_d::a#0 = '0' +Constant func_bank1_d::b#0 = 7 +Constant func_bank1_e::a#0 = '0' +Constant func_bank1_e::b#0 = 7 +Constant func_bank1_f::a#0 = '0' +Constant func_bank1_f::b#0 = 7 +Constant func_bank2_a::a#3 = '0' +Constant func_bank2_a::b#3 = 7 +Constant func_bank2_b::a#1 = '0' +Constant func_bank2_b::b#1 = 7 +Constant func_bank2_c::a#0 = '0' +Constant func_bank2_c::b#0 = 7 +Constant func_bank2_d::a#0 = '0' +Constant func_bank2_d::b#0 = 7 +Constant func_bank2_e::a#0 = '0' +Constant func_bank2_e::b#0 = 7 +Constant func_bank2_f::a#0 = '0' +Constant func_bank2_f::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Constant func_bank1_a::a#0 = func_bank1_c::a#0 +Constant func_bank1_a::b#0 = func_bank1_c::b#0 +Constant func_bank2_a::a#0 = func_bank1_d::a#0 +Constant func_bank2_a::b#0 = func_bank1_d::b#0 +Constant func_bank1_a::a#1 = func_bank2_c::a#0 +Constant func_bank1_a::b#1 = func_bank2_c::b#0 +Constant func_bank2_a::a#1 = func_bank2_d::a#0 +Constant func_bank2_a::b#1 = func_bank2_d::b#0 +Constant func_bank2_b::a#0 = func_bank2_e::a#0 +Constant func_bank2_b::b#0 = func_bank2_e::b#0 +Constant func_bank1_b::a#0 = func_bank2_f::a#0 +Constant func_bank1_b::b#0 = func_bank2_f::b#0 +Constant func_bank1_a::a#2 = func_bank1_e::a#0 +Constant func_bank1_a::b#2 = func_bank1_e::b#0 +Constant func_bank2_a::a#2 = func_bank1_f::a#0 +Constant func_bank2_a::b#2 = func_bank1_f::b#0 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [73] SCREEN[0] = main::$0 +Simplifying expression containing zero SCREEN in [79] SCREEN[0] = main::$1 +Simplifying expression containing zero SCREEN in [85] SCREEN[0] = main::$2 +Simplifying expression containing zero SCREEN in [91] SCREEN[0] = main::$3 +Simplifying expression containing zero SCREEN in [97] SCREEN[0] = main::$4 +Simplifying expression containing zero SCREEN in [103] SCREEN[0] = main::$5 +Simplifying expression containing zero SCREEN in [109] SCREEN[0] = main::$6 +Simplifying expression containing zero SCREEN in [115] SCREEN[0] = main::$7 +Simplifying expression containing zero SCREEN in [121] SCREEN[0] = main::$8 +Simplifying expression containing zero SCREEN in [127] SCREEN[0] = main::$9 +Simplifying expression containing zero SCREEN in [133] SCREEN[0] = main::$10 +Simplifying expression containing zero SCREEN in [139] SCREEN[0] = main::$11 +Successful SSA optimization PassNSimplifyExpressionWithZero +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 +Inlining constant with var siblings func_bank1_a::a#3 +Inlining constant with var siblings func_bank1_a::b#3 +Inlining constant with var siblings func_bank1_a::a#0 +Inlining constant with var siblings func_bank1_a::b#0 +Inlining constant with var siblings func_bank1_a::a#1 +Inlining constant with var siblings func_bank1_a::b#1 +Inlining constant with var siblings func_bank1_a::a#2 +Inlining constant with var siblings func_bank1_a::b#2 +Inlining constant with var siblings func_bank2_a::a#3 +Inlining constant with var siblings func_bank2_a::b#3 +Inlining constant with var siblings func_bank2_a::a#0 +Inlining constant with var siblings func_bank2_a::b#0 +Inlining constant with var siblings func_bank2_a::a#1 +Inlining constant with var siblings func_bank2_a::b#1 +Inlining constant with var siblings func_bank2_a::a#2 +Inlining constant with var siblings func_bank2_a::b#2 +Inlining constant with var siblings func_bank1_b::a#1 +Inlining constant with var siblings func_bank1_b::b#1 +Inlining constant with var siblings func_bank1_b::a#0 +Inlining constant with var siblings func_bank1_b::b#0 +Inlining constant with var siblings func_bank2_b::a#1 +Inlining constant with var siblings func_bank2_b::b#1 +Inlining constant with var siblings func_bank2_b::a#0 +Inlining constant with var siblings func_bank2_b::b#0 +Constant inlined func_bank1_a::b#0 = func_bank1_c::b#0 +Constant inlined func_bank1_a::a#1 = func_bank2_c::a#0 +Constant inlined func_bank2_a::b#2 = func_bank1_f::b#0 +Constant inlined func_bank2_a::a#3 = '0' +Constant inlined func_bank1_a::a#0 = func_bank1_c::a#0 +Constant inlined func_bank2_a::b#3 = 7 +Constant inlined func_bank2_a::a#0 = func_bank1_d::a#0 +Constant inlined func_bank1_a::b#3 = 7 +Constant inlined func_bank1_a::b#2 = func_bank1_e::b#0 +Constant inlined func_bank2_a::b#0 = func_bank1_d::b#0 +Constant inlined func_bank2_a::a#1 = func_bank2_d::a#0 +Constant inlined func_bank1_a::a#3 = '0' +Constant inlined func_bank1_a::b#1 = func_bank2_c::b#0 +Constant inlined func_bank1_a::a#2 = func_bank1_e::a#0 +Constant inlined func_bank2_a::b#1 = func_bank2_d::b#0 +Constant inlined func_bank2_a::a#2 = func_bank1_f::a#0 +Constant inlined func_bank2_b::b#0 = func_bank2_e::b#0 +Constant inlined func_bank2_b::a#1 = '0' +Constant inlined func_bank1_b::a#0 = func_bank2_f::a#0 +Constant inlined func_bank2_b::a#0 = func_bank2_e::a#0 +Constant inlined func_bank1_b::b#0 = func_bank2_f::b#0 +Constant inlined func_bank1_b::a#1 = '0' +Constant inlined func_bank1_b::b#1 = 7 +Constant inlined func_bank2_b::b#1 = 7 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of func_bank1_c +Adding NOP phi() at start of func_bank1_d +Adding NOP phi() at start of func_bank1_e +Adding NOP phi() at start of func_bank1_f +Adding NOP phi() at start of func_bank2_c +Adding NOP phi() at start of func_bank2_d +Adding NOP phi() at start of func_bank2_e +Adding NOP phi() at start of func_bank2_f +CALL GRAPH +Calls in [main] to func_bank1_a:1 func_bank1_b:5 func_bank1_c:9 func_bank1_d:13 func_bank1_e:17 func_bank1_f:21 func_bank2_a:25 func_bank2_b:29 func_bank2_c:33 func_bank2_d:37 func_bank2_e:41 func_bank2_f:45 +Calls in [func_bank1_c] to func_bank1_a:57 +Calls in [func_bank1_d] to func_bank2_a:62 +Calls in [func_bank1_e] to func_bank1_a:67 +Calls in [func_bank1_f] to func_bank2_a:72 +Calls in [func_bank2_c] to func_bank1_a:83 +Calls in [func_bank2_d] to func_bank2_a:88 +Calls in [func_bank2_e] to func_bank2_b:93 +Calls in [func_bank2_f] to func_bank1_b:98 + +Created 8 initial phi equivalence classes +Coalesced down to 8 phi equivalence classes +Adding NOP phi() at start of main +Adding NOP phi() at start of func_bank1_c +Adding NOP phi() at start of func_bank1_d +Adding NOP phi() at start of func_bank1_e +Adding NOP phi() at start of func_bank1_f +Adding NOP phi() at start of func_bank2_c +Adding NOP phi() at start of func_bank2_d +Adding NOP phi() at start of func_bank2_e +Adding NOP phi() at start of func_bank2_f + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call func_bank1_a + [2] func_bank1_a::return#10 = func_bank1_a::return#0 + to:main::@1 +main::@1: scope:[main] from main + [3] main::$0 = func_bank1_a::return#10 + [4] *SCREEN = main::$0 + [5] call func_bank1_b + [6] func_bank1_b::return#3 = func_bank1_b::return#1 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = func_bank1_b::return#3 + [8] *SCREEN = main::$1 + [9] call func_bank1_c + [10] func_bank1_c::return#2 = func_bank1_c::return#0 + to:main::@3 +main::@3: scope:[main] from main::@2 + [11] main::$2 = func_bank1_c::return#2 + [12] *SCREEN = main::$2 + [13] call func_bank1_d + [14] func_bank1_d::return#2 = func_bank1_d::return#0 + to:main::@4 +main::@4: scope:[main] from main::@3 + [15] main::$3 = func_bank1_d::return#2 + [16] *SCREEN = main::$3 + [17] call func_bank1_e + [18] func_bank1_e::return#2 = func_bank1_e::return#0 + to:main::@5 +main::@5: scope:[main] from main::@4 + [19] main::$4 = func_bank1_e::return#2 + [20] *SCREEN = main::$4 + [21] call func_bank1_f + [22] func_bank1_f::return#2 = func_bank1_f::return#0 + to:main::@6 +main::@6: scope:[main] from main::@5 + [23] main::$5 = func_bank1_f::return#2 + [24] *SCREEN = main::$5 + [25] call func_bank2_a + [26] func_bank2_a::return#10 = func_bank2_a::return#1 + to:main::@7 +main::@7: scope:[main] from main::@6 + [27] main::$6 = func_bank2_a::return#10 + [28] *SCREEN = main::$6 + [29] call func_bank2_b + [30] func_bank2_b::return#3 = func_bank2_b::return#1 + to:main::@8 +main::@8: scope:[main] from main::@7 + [31] main::$7 = func_bank2_b::return#3 + [32] *SCREEN = main::$7 + [33] call func_bank2_c + [34] func_bank2_c::return#2 = func_bank2_c::return#0 + to:main::@9 +main::@9: scope:[main] from main::@8 + [35] main::$8 = func_bank2_c::return#2 + [36] *SCREEN = main::$8 + [37] call func_bank2_d + [38] func_bank2_d::return#2 = func_bank2_d::return#0 + to:main::@10 +main::@10: scope:[main] from main::@9 + [39] main::$9 = func_bank2_d::return#2 + [40] *SCREEN = main::$9 + [41] call func_bank2_e + [42] func_bank2_e::return#2 = func_bank2_e::return#0 + to:main::@11 +main::@11: scope:[main] from main::@10 + [43] main::$10 = func_bank2_e::return#2 + [44] *SCREEN = main::$10 + [45] call func_bank2_f + [46] func_bank2_f::return#2 = func_bank2_f::return#0 + to:main::@12 +main::@12: scope:[main] from main::@11 + [47] main::$11 = func_bank2_f::return#2 + [48] *SCREEN = main::$11 + to:main::@return +main::@return: scope:[main] from main::@12 + [49] return + to:@return + +__bank(bank) char func_bank1_a(char a , char b) +func_bank1_a: scope:[func_bank1_a] from func_bank1_c func_bank1_e func_bank2_c main + [50] func_bank1_a::b#4 = phi( func_bank1_c/func_bank1_c::b#0, func_bank1_e/func_bank1_e::b#0, func_bank2_c/func_bank2_c::b#0, main/7 ) + [50] func_bank1_a::a#4 = phi( func_bank1_c/func_bank1_c::a#0, func_bank1_e/func_bank1_e::a#0, func_bank2_c/func_bank2_c::a#0, main/'0' ) + [51] func_bank1_a::return#0 = func_bank1_a::a#4 + func_bank1_a::b#4 + to:func_bank1_a::@return +func_bank1_a::@return: scope:[func_bank1_a] from func_bank1_a + [52] return + to:@return + +char func_bank1_b(char a , char b) +func_bank1_b: scope:[func_bank1_b] from func_bank2_f main::@1 + [53] func_bank1_b::b#2 = phi( func_bank2_f/func_bank2_f::b#0, main::@1/7 ) + [53] func_bank1_b::a#2 = phi( func_bank2_f/func_bank2_f::a#0, main::@1/'0' ) + [54] func_bank1_b::return#1 = func_bank1_b::a#2 + func_bank1_b::b#2 + to:func_bank1_b::@return +func_bank1_b::@return: scope:[func_bank1_b] from func_bank1_b + [55] return + to:@return + +__bank(bank) char func_bank1_c(char a , char b) +func_bank1_c: scope:[func_bank1_c] from main::@2 + [56] phi() + [57] call func_bank1_a + [58] func_bank1_a::return#2 = func_bank1_a::return#0 + to:func_bank1_c::@1 +func_bank1_c::@1: scope:[func_bank1_c] from func_bank1_c + [59] func_bank1_c::return#0 = func_bank1_a::return#2 + to:func_bank1_c::@return +func_bank1_c::@return: scope:[func_bank1_c] from func_bank1_c::@1 + [60] return + to:@return + +__bank(bank) char func_bank1_d(char a , char b) +func_bank1_d: scope:[func_bank1_d] from main::@3 + [61] phi() + [62] call func_bank2_a + [63] func_bank2_a::return#0 = func_bank2_a::return#1 + to:func_bank1_d::@1 +func_bank1_d::@1: scope:[func_bank1_d] from func_bank1_d + [64] func_bank1_d::return#0 = func_bank2_a::return#0 + to:func_bank1_d::@return +func_bank1_d::@return: scope:[func_bank1_d] from func_bank1_d::@1 + [65] return + to:@return + +char func_bank1_e(char a , char b) +func_bank1_e: scope:[func_bank1_e] from main::@4 + [66] phi() + [67] call func_bank1_a + [68] func_bank1_a::return#4 = func_bank1_a::return#0 + to:func_bank1_e::@1 +func_bank1_e::@1: scope:[func_bank1_e] from func_bank1_e + [69] func_bank1_e::return#0 = func_bank1_a::return#4 + to:func_bank1_e::@return +func_bank1_e::@return: scope:[func_bank1_e] from func_bank1_e::@1 + [70] return + to:@return + +char func_bank1_f(char a , char b) +func_bank1_f: scope:[func_bank1_f] from main::@5 + [71] phi() + [72] call func_bank2_a + [73] func_bank2_a::return#4 = func_bank2_a::return#1 + to:func_bank1_f::@1 +func_bank1_f::@1: scope:[func_bank1_f] from func_bank1_f + [74] func_bank1_f::return#0 = func_bank2_a::return#4 + to:func_bank1_f::@return +func_bank1_f::@return: scope:[func_bank1_f] from func_bank1_f::@1 + [75] return + to:@return + +__bank(bank) char func_bank2_a(char a , char b) +func_bank2_a: scope:[func_bank2_a] from func_bank1_d func_bank1_f func_bank2_d main::@6 + [76] func_bank2_a::b#4 = phi( func_bank1_d/func_bank1_d::b#0, func_bank1_f/func_bank1_f::b#0, func_bank2_d/func_bank2_d::b#0, main::@6/7 ) + [76] func_bank2_a::a#4 = phi( func_bank1_d/func_bank1_d::a#0, func_bank1_f/func_bank1_f::a#0, func_bank2_d/func_bank2_d::a#0, main::@6/'0' ) + [77] func_bank2_a::return#1 = func_bank2_a::a#4 + func_bank2_a::b#4 + to:func_bank2_a::@return +func_bank2_a::@return: scope:[func_bank2_a] from func_bank2_a + [78] return + to:@return + +char func_bank2_b(char a , char b) +func_bank2_b: scope:[func_bank2_b] from func_bank2_e main::@7 + [79] func_bank2_b::b#2 = phi( func_bank2_e/func_bank2_e::b#0, main::@7/7 ) + [79] func_bank2_b::a#2 = phi( func_bank2_e/func_bank2_e::a#0, main::@7/'0' ) + [80] func_bank2_b::return#1 = func_bank2_b::a#2 + func_bank2_b::b#2 + to:func_bank2_b::@return +func_bank2_b::@return: scope:[func_bank2_b] from func_bank2_b + [81] return + to:@return + +__bank(bank) char func_bank2_c(char a , char b) +func_bank2_c: scope:[func_bank2_c] from main::@8 + [82] phi() + [83] call func_bank1_a + [84] func_bank1_a::return#3 = func_bank1_a::return#0 + to:func_bank2_c::@1 +func_bank2_c::@1: scope:[func_bank2_c] from func_bank2_c + [85] func_bank2_c::return#0 = func_bank1_a::return#3 + to:func_bank2_c::@return +func_bank2_c::@return: scope:[func_bank2_c] from func_bank2_c::@1 + [86] return + to:@return + +__bank(bank) char func_bank2_d(char a , char b) +func_bank2_d: scope:[func_bank2_d] from main::@9 + [87] phi() + [88] call func_bank2_a + [89] func_bank2_a::return#3 = func_bank2_a::return#1 + to:func_bank2_d::@1 +func_bank2_d::@1: scope:[func_bank2_d] from func_bank2_d + [90] func_bank2_d::return#0 = func_bank2_a::return#3 + to:func_bank2_d::@return +func_bank2_d::@return: scope:[func_bank2_d] from func_bank2_d::@1 + [91] return + to:@return + +__bank(bank) char func_bank2_e(char a , char b) +func_bank2_e: scope:[func_bank2_e] from main::@10 + [92] phi() + [93] call func_bank2_b + [94] func_bank2_b::return#0 = func_bank2_b::return#1 + to:func_bank2_e::@1 +func_bank2_e::@1: scope:[func_bank2_e] from func_bank2_e + [95] func_bank2_e::return#0 = func_bank2_b::return#0 + to:func_bank2_e::@return +func_bank2_e::@return: scope:[func_bank2_e] from func_bank2_e::@1 + [96] return + to:@return + +__bank(bank) char func_bank2_f(char a , char b) +func_bank2_f: scope:[func_bank2_f] from main::@11 + [97] phi() + [98] call func_bank1_b + [99] func_bank1_b::return#0 = func_bank1_b::return#1 + to:func_bank2_f::@1 +func_bank2_f::@1: scope:[func_bank2_f] from func_bank2_f + [100] func_bank2_f::return#0 = func_bank1_b::return#0 + to:func_bank2_f::@return +func_bank2_f::@return: scope:[func_bank2_f] from func_bank2_f::@1 + [101] return + to:@return + + +VARIABLE REGISTER WEIGHTS +__bank(bank) char func_bank1_a(char a , char b) +char func_bank1_a::a +char func_bank1_a::a#4 // 101.0 +char func_bank1_a::b +char func_bank1_a::b#4 // 101.0 +char func_bank1_a::return +char func_bank1_a::return#0 // 22.66666666666666 +char func_bank1_a::return#10 // 4.0 +char func_bank1_a::return#2 // 22.0 +char func_bank1_a::return#3 // 22.0 +char func_bank1_a::return#4 // 22.0 +char func_bank1_b(char a , char b) +char func_bank1_b::a +char func_bank1_b::a#2 // 101.0 +char func_bank1_b::b +char func_bank1_b::b#2 // 101.0 +char func_bank1_b::return +char func_bank1_b::return#0 // 22.0 +char func_bank1_b::return#1 // 28.5 +char func_bank1_b::return#3 // 4.0 +__bank(bank) char func_bank1_c(char a , char b) +char func_bank1_c::a +char func_bank1_c::b +char func_bank1_c::return +char func_bank1_c::return#0 // 4.333333333333333 +char func_bank1_c::return#2 // 4.0 +__bank(bank) char func_bank1_d(char a , char b) +char func_bank1_d::a +char func_bank1_d::b +char func_bank1_d::return +char func_bank1_d::return#0 // 4.333333333333333 +char func_bank1_d::return#2 // 4.0 +char func_bank1_e(char a , char b) +char func_bank1_e::a +char func_bank1_e::b +char func_bank1_e::return +char func_bank1_e::return#0 // 4.333333333333333 +char func_bank1_e::return#2 // 4.0 +char func_bank1_f(char a , char b) +char func_bank1_f::a +char func_bank1_f::b +char func_bank1_f::return +char func_bank1_f::return#0 // 4.333333333333333 +char func_bank1_f::return#2 // 4.0 +__bank(bank) char func_bank2_a(char a , char b) +char func_bank2_a::a +char func_bank2_a::a#4 // 101.0 +char func_bank2_a::b +char func_bank2_a::b#4 // 101.0 +char func_bank2_a::return +char func_bank2_a::return#0 // 22.0 +char func_bank2_a::return#1 // 22.666666666666664 +char func_bank2_a::return#10 // 4.0 +char func_bank2_a::return#3 // 22.0 +char func_bank2_a::return#4 // 22.0 +char func_bank2_b(char a , char b) +char func_bank2_b::a +char func_bank2_b::a#2 // 101.0 +char func_bank2_b::b +char func_bank2_b::b#2 // 101.0 +char func_bank2_b::return +char func_bank2_b::return#0 // 22.0 +char func_bank2_b::return#1 // 28.5 +char func_bank2_b::return#3 // 4.0 +__bank(bank) char func_bank2_c(char a , char b) +char func_bank2_c::a +char func_bank2_c::b +char func_bank2_c::return +char func_bank2_c::return#0 // 4.333333333333333 +char func_bank2_c::return#2 // 4.0 +__bank(bank) char func_bank2_d(char a , char b) +char func_bank2_d::a +char func_bank2_d::b +char func_bank2_d::return +char func_bank2_d::return#0 // 4.333333333333333 +char func_bank2_d::return#2 // 4.0 +__bank(bank) char func_bank2_e(char a , char b) +char func_bank2_e::a +char func_bank2_e::b +char func_bank2_e::return +char func_bank2_e::return#0 // 4.333333333333333 +char func_bank2_e::return#2 // 4.0 +__bank(bank) char func_bank2_f(char a , char b) +char func_bank2_f::a +char func_bank2_f::b +char func_bank2_f::return +char func_bank2_f::return#0 // 4.333333333333333 +char func_bank2_f::return#2 // 4.0 +void main() +char main::$0 // 4.0 +char main::$1 // 4.0 +char main::$10 // 4.0 +char main::$11 // 4.0 +char main::$2 // 4.0 +char main::$3 // 4.0 +char main::$4 // 4.0 +char main::$5 // 4.0 +char main::$6 // 4.0 +char main::$7 // 4.0 +char main::$8 // 4.0 +char main::$9 // 4.0 + +Initial phi equivalence classes +[ func_bank1_a::a#4 ] +[ func_bank1_a::b#4 ] +[ func_bank1_b::a#2 ] +[ func_bank1_b::b#2 ] +[ func_bank2_a::a#4 ] +[ func_bank2_a::b#4 ] +[ func_bank2_b::a#2 ] +[ func_bank2_b::b#2 ] +Added variable func_bank1_a::return#10 to live range equivalence class [ func_bank1_a::return#10 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable func_bank1_b::return#3 to live range equivalence class [ func_bank1_b::return#3 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable func_bank1_c::return#2 to live range equivalence class [ func_bank1_c::return#2 ] +Added variable main::$2 to live range equivalence class [ main::$2 ] +Added variable func_bank1_d::return#2 to live range equivalence class [ func_bank1_d::return#2 ] +Added variable main::$3 to live range equivalence class [ main::$3 ] +Added variable func_bank1_e::return#2 to live range equivalence class [ func_bank1_e::return#2 ] +Added variable main::$4 to live range equivalence class [ main::$4 ] +Added variable func_bank1_f::return#2 to live range equivalence class [ func_bank1_f::return#2 ] +Added variable main::$5 to live range equivalence class [ main::$5 ] +Added variable func_bank2_a::return#10 to live range equivalence class [ func_bank2_a::return#10 ] +Added variable main::$6 to live range equivalence class [ main::$6 ] +Added variable func_bank2_b::return#3 to live range equivalence class [ func_bank2_b::return#3 ] +Added variable main::$7 to live range equivalence class [ main::$7 ] +Added variable func_bank2_c::return#2 to live range equivalence class [ func_bank2_c::return#2 ] +Added variable main::$8 to live range equivalence class [ main::$8 ] +Added variable func_bank2_d::return#2 to live range equivalence class [ func_bank2_d::return#2 ] +Added variable main::$9 to live range equivalence class [ main::$9 ] +Added variable func_bank2_e::return#2 to live range equivalence class [ func_bank2_e::return#2 ] +Added variable main::$10 to live range equivalence class [ main::$10 ] +Added variable func_bank2_f::return#2 to live range equivalence class [ func_bank2_f::return#2 ] +Added variable main::$11 to live range equivalence class [ main::$11 ] +Added variable func_bank1_a::return#0 to live range equivalence class [ func_bank1_a::return#0 ] +Added variable func_bank1_b::return#1 to live range equivalence class [ func_bank1_b::return#1 ] +Added variable func_bank1_a::return#2 to live range equivalence class [ func_bank1_a::return#2 ] +Added variable func_bank1_c::return#0 to live range equivalence class [ func_bank1_c::return#0 ] +Added variable func_bank2_a::return#0 to live range equivalence class [ func_bank2_a::return#0 ] +Added variable func_bank1_d::return#0 to live range equivalence class [ func_bank1_d::return#0 ] +Added variable func_bank1_a::return#4 to live range equivalence class [ func_bank1_a::return#4 ] +Added variable func_bank1_e::return#0 to live range equivalence class [ func_bank1_e::return#0 ] +Added variable func_bank2_a::return#4 to live range equivalence class [ func_bank2_a::return#4 ] +Added variable func_bank1_f::return#0 to live range equivalence class [ func_bank1_f::return#0 ] +Added variable func_bank2_a::return#1 to live range equivalence class [ func_bank2_a::return#1 ] +Added variable func_bank2_b::return#1 to live range equivalence class [ func_bank2_b::return#1 ] +Added variable func_bank1_a::return#3 to live range equivalence class [ func_bank1_a::return#3 ] +Added variable func_bank2_c::return#0 to live range equivalence class [ func_bank2_c::return#0 ] +Added variable func_bank2_a::return#3 to live range equivalence class [ func_bank2_a::return#3 ] +Added variable func_bank2_d::return#0 to live range equivalence class [ func_bank2_d::return#0 ] +Added variable func_bank2_b::return#0 to live range equivalence class [ func_bank2_b::return#0 ] +Added variable func_bank2_e::return#0 to live range equivalence class [ func_bank2_e::return#0 ] +Added variable func_bank1_b::return#0 to live range equivalence class [ func_bank1_b::return#0 ] +Added variable func_bank2_f::return#0 to live range equivalence class [ func_bank2_f::return#0 ] +Complete equivalence classes +[ func_bank1_a::a#4 ] +[ func_bank1_a::b#4 ] +[ func_bank1_b::a#2 ] +[ func_bank1_b::b#2 ] +[ func_bank2_a::a#4 ] +[ func_bank2_a::b#4 ] +[ func_bank2_b::a#2 ] +[ func_bank2_b::b#2 ] +[ func_bank1_a::return#10 ] +[ main::$0 ] +[ func_bank1_b::return#3 ] +[ main::$1 ] +[ func_bank1_c::return#2 ] +[ main::$2 ] +[ func_bank1_d::return#2 ] +[ main::$3 ] +[ func_bank1_e::return#2 ] +[ main::$4 ] +[ func_bank1_f::return#2 ] +[ main::$5 ] +[ func_bank2_a::return#10 ] +[ main::$6 ] +[ func_bank2_b::return#3 ] +[ main::$7 ] +[ func_bank2_c::return#2 ] +[ main::$8 ] +[ func_bank2_d::return#2 ] +[ main::$9 ] +[ func_bank2_e::return#2 ] +[ main::$10 ] +[ func_bank2_f::return#2 ] +[ main::$11 ] +[ func_bank1_a::return#0 ] +[ func_bank1_b::return#1 ] +[ func_bank1_a::return#2 ] +[ func_bank1_c::return#0 ] +[ func_bank2_a::return#0 ] +[ func_bank1_d::return#0 ] +[ func_bank1_a::return#4 ] +[ func_bank1_e::return#0 ] +[ func_bank2_a::return#4 ] +[ func_bank1_f::return#0 ] +[ func_bank2_a::return#1 ] +[ func_bank2_b::return#1 ] +[ func_bank1_a::return#3 ] +[ func_bank2_c::return#0 ] +[ func_bank2_a::return#3 ] +[ func_bank2_d::return#0 ] +[ func_bank2_b::return#0 ] +[ func_bank2_e::return#0 ] +[ func_bank1_b::return#0 ] +[ func_bank2_f::return#0 ] +Allocated zp[1]:2 [ func_bank1_a::a#4 ] +Allocated zp[1]:3 [ func_bank1_a::b#4 ] +Allocated zp[1]:4 [ func_bank1_b::a#2 ] +Allocated zp[1]:5 [ func_bank1_b::b#2 ] +Allocated zp[1]:6 [ func_bank2_a::a#4 ] +Allocated zp[1]:7 [ func_bank2_a::b#4 ] +Allocated zp[1]:8 [ func_bank2_b::a#2 ] +Allocated zp[1]:9 [ func_bank2_b::b#2 ] +Allocated zp[1]:10 [ func_bank1_b::return#1 ] +Allocated zp[1]:11 [ func_bank2_b::return#1 ] +Allocated zp[1]:12 [ func_bank2_a::return#1 ] +Allocated zp[1]:13 [ func_bank1_a::return#0 ] +Allocated zp[1]:14 [ func_bank1_a::return#2 ] +Allocated zp[1]:15 [ func_bank2_a::return#0 ] +Allocated zp[1]:16 [ func_bank1_a::return#4 ] +Allocated zp[1]:17 [ func_bank2_a::return#4 ] +Allocated zp[1]:18 [ func_bank1_a::return#3 ] +Allocated zp[1]:19 [ func_bank2_a::return#3 ] +Allocated zp[1]:20 [ func_bank2_b::return#0 ] +Allocated zp[1]:21 [ func_bank1_b::return#0 ] +Allocated zp[1]:22 [ func_bank1_c::return#0 ] +Allocated zp[1]:23 [ func_bank1_d::return#0 ] +Allocated zp[1]:24 [ func_bank1_e::return#0 ] +Allocated zp[1]:25 [ func_bank1_f::return#0 ] +Allocated zp[1]:26 [ func_bank2_c::return#0 ] +Allocated zp[1]:27 [ func_bank2_d::return#0 ] +Allocated zp[1]:28 [ func_bank2_e::return#0 ] +Allocated zp[1]:29 [ func_bank2_f::return#0 ] +Allocated zp[1]:30 [ func_bank1_a::return#10 ] +Allocated zp[1]:31 [ main::$0 ] +Allocated zp[1]:32 [ func_bank1_b::return#3 ] +Allocated zp[1]:33 [ main::$1 ] +Allocated zp[1]:34 [ func_bank1_c::return#2 ] +Allocated zp[1]:35 [ main::$2 ] +Allocated zp[1]:36 [ func_bank1_d::return#2 ] +Allocated zp[1]:37 [ main::$3 ] +Allocated zp[1]:38 [ func_bank1_e::return#2 ] +Allocated zp[1]:39 [ main::$4 ] +Allocated zp[1]:40 [ func_bank1_f::return#2 ] +Allocated zp[1]:41 [ main::$5 ] +Allocated zp[1]:42 [ func_bank2_a::return#10 ] +Allocated zp[1]:43 [ main::$6 ] +Allocated zp[1]:44 [ func_bank2_b::return#3 ] +Allocated zp[1]:45 [ main::$7 ] +Allocated zp[1]:46 [ func_bank2_c::return#2 ] +Allocated zp[1]:47 [ main::$8 ] +Allocated zp[1]:48 [ func_bank2_d::return#2 ] +Allocated zp[1]:49 [ main::$9 ] +Allocated zp[1]:50 [ func_bank2_e::return#2 ] +Allocated zp[1]:51 [ main::$10 ] +Allocated zp[1]:52 [ func_bank2_f::return#2 ] +Allocated zp[1]:53 [ main::$11 ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [51] func_bank1_a::return#0 = func_bank1_a::a#4 + func_bank1_a::b#4 [ func_bank1_a::return#0 ] ( func_bank1_a:1 [ func_bank1_a::return#0 ] { { func_bank1_a::return#0 = func_bank1_a::return#10 } } func_bank1_c:9::func_bank1_a:57 [ func_bank1_a::return#0 ] { { func_bank1_c::return#0 = func_bank1_c::return#2 } { func_bank1_a::return#0 = func_bank1_a::return#2 } } func_bank1_e:17::func_bank1_a:67 [ func_bank1_a::return#0 ] { { func_bank1_e::return#0 = func_bank1_e::return#2 } { func_bank1_a::return#0 = func_bank1_a::return#4 } } func_bank2_c:33::func_bank1_a:83 [ func_bank1_a::return#0 ] { { func_bank2_c::return#0 = func_bank2_c::return#2 } { func_bank1_a::return#0 = func_bank1_a::return#3 } } ) always clobbers reg byte a +Statement [54] func_bank1_b::return#1 = func_bank1_b::a#2 + func_bank1_b::b#2 [ func_bank1_b::return#1 ] ( func_bank1_b:5 [ func_bank1_b::return#1 ] { { func_bank1_b::return#1 = func_bank1_b::return#3 } } func_bank2_f:45::func_bank1_b:98 [ func_bank1_b::return#1 ] { { func_bank2_f::return#0 = func_bank2_f::return#2 } { func_bank1_b::return#0 = func_bank1_b::return#1 } } ) always clobbers reg byte a +Statement [77] func_bank2_a::return#1 = func_bank2_a::a#4 + func_bank2_a::b#4 [ func_bank2_a::return#1 ] ( func_bank2_a:25 [ func_bank2_a::return#1 ] { { func_bank2_a::return#1 = func_bank2_a::return#10 } } func_bank1_d:13::func_bank2_a:62 [ func_bank2_a::return#1 ] { { func_bank1_d::return#0 = func_bank1_d::return#2 } { func_bank2_a::return#0 = func_bank2_a::return#1 } } func_bank1_f:21::func_bank2_a:72 [ func_bank2_a::return#1 ] { { func_bank1_f::return#0 = func_bank1_f::return#2 } { func_bank2_a::return#1 = func_bank2_a::return#4 } } func_bank2_d:37::func_bank2_a:88 [ func_bank2_a::return#1 ] { { func_bank2_d::return#0 = func_bank2_d::return#2 } { func_bank2_a::return#1 = func_bank2_a::return#3 } } ) always clobbers reg byte a +Statement [80] func_bank2_b::return#1 = func_bank2_b::a#2 + func_bank2_b::b#2 [ func_bank2_b::return#1 ] ( func_bank2_b:29 [ func_bank2_b::return#1 ] { { func_bank2_b::return#1 = func_bank2_b::return#3 } } func_bank2_e:41::func_bank2_b:93 [ func_bank2_b::return#1 ] { { func_bank2_e::return#0 = func_bank2_e::return#2 } { func_bank2_b::return#0 = func_bank2_b::return#1 } } ) always clobbers reg byte a +Potential registers zp[1]:2 [ func_bank1_a::a#4 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ func_bank1_a::b#4 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:4 [ func_bank1_b::a#2 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ func_bank1_b::b#2 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:6 [ func_bank2_a::a#4 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ func_bank2_a::b#4 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ func_bank2_b::a#2 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ func_bank2_b::b#2 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:30 [ func_bank1_a::return#10 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:31 [ main::$0 ] : zp[1]:31 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:32 [ func_bank1_b::return#3 ] : zp[1]:32 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:33 [ main::$1 ] : zp[1]:33 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:34 [ func_bank1_c::return#2 ] : zp[1]:34 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:35 [ main::$2 ] : zp[1]:35 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:36 [ func_bank1_d::return#2 ] : zp[1]:36 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:37 [ main::$3 ] : zp[1]:37 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:38 [ func_bank1_e::return#2 ] : zp[1]:38 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:39 [ main::$4 ] : zp[1]:39 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:40 [ func_bank1_f::return#2 ] : zp[1]:40 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:41 [ main::$5 ] : zp[1]:41 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:42 [ func_bank2_a::return#10 ] : zp[1]:42 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:43 [ main::$6 ] : zp[1]:43 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:44 [ func_bank2_b::return#3 ] : zp[1]:44 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:45 [ main::$7 ] : zp[1]:45 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:46 [ func_bank2_c::return#2 ] : zp[1]:46 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:47 [ main::$8 ] : zp[1]:47 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:48 [ func_bank2_d::return#2 ] : zp[1]:48 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:49 [ main::$9 ] : zp[1]:49 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:50 [ func_bank2_e::return#2 ] : zp[1]:50 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:51 [ main::$10 ] : zp[1]:51 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:52 [ func_bank2_f::return#2 ] : zp[1]:52 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:53 [ main::$11 ] : zp[1]:53 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:13 [ func_bank1_a::return#0 ] : zp[1]:13 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:10 [ func_bank1_b::return#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:14 [ func_bank1_a::return#2 ] : zp[1]:14 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:22 [ func_bank1_c::return#0 ] : zp[1]:22 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:15 [ func_bank2_a::return#0 ] : zp[1]:15 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:23 [ func_bank1_d::return#0 ] : zp[1]:23 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:16 [ func_bank1_a::return#4 ] : zp[1]:16 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:24 [ func_bank1_e::return#0 ] : zp[1]:24 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:17 [ func_bank2_a::return#4 ] : zp[1]:17 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:25 [ func_bank1_f::return#0 ] : zp[1]:25 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:12 [ func_bank2_a::return#1 ] : zp[1]:12 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:11 [ func_bank2_b::return#1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:18 [ func_bank1_a::return#3 ] : zp[1]:18 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:26 [ func_bank2_c::return#0 ] : zp[1]:26 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:19 [ func_bank2_a::return#3 ] : zp[1]:19 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:27 [ func_bank2_d::return#0 ] : zp[1]:27 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:20 [ func_bank2_b::return#0 ] : zp[1]:20 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:28 [ func_bank2_e::return#0 ] : zp[1]:28 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:21 [ func_bank1_b::return#0 ] : zp[1]:21 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:29 [ func_bank2_f::return#0 ] : zp[1]:29 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [func_bank1_a] 101: zp[1]:2 [ func_bank1_a::a#4 ] 101: zp[1]:3 [ func_bank1_a::b#4 ] 22.67: zp[1]:13 [ func_bank1_a::return#0 ] 22: zp[1]:14 [ func_bank1_a::return#2 ] 22: zp[1]:16 [ func_bank1_a::return#4 ] 22: zp[1]:18 [ func_bank1_a::return#3 ] 4: zp[1]:30 [ func_bank1_a::return#10 ] +Uplift Scope [func_bank2_a] 101: zp[1]:6 [ func_bank2_a::a#4 ] 101: zp[1]:7 [ func_bank2_a::b#4 ] 22.67: zp[1]:12 [ func_bank2_a::return#1 ] 22: zp[1]:15 [ func_bank2_a::return#0 ] 22: zp[1]:17 [ func_bank2_a::return#4 ] 22: zp[1]:19 [ func_bank2_a::return#3 ] 4: zp[1]:42 [ func_bank2_a::return#10 ] +Uplift Scope [func_bank1_b] 101: zp[1]:4 [ func_bank1_b::a#2 ] 101: zp[1]:5 [ func_bank1_b::b#2 ] 28.5: zp[1]:10 [ func_bank1_b::return#1 ] 22: zp[1]:21 [ func_bank1_b::return#0 ] 4: zp[1]:32 [ func_bank1_b::return#3 ] +Uplift Scope [func_bank2_b] 101: zp[1]:8 [ func_bank2_b::a#2 ] 101: zp[1]:9 [ func_bank2_b::b#2 ] 28.5: zp[1]:11 [ func_bank2_b::return#1 ] 22: zp[1]:20 [ func_bank2_b::return#0 ] 4: zp[1]:44 [ func_bank2_b::return#3 ] +Uplift Scope [main] 4: zp[1]:31 [ main::$0 ] 4: zp[1]:33 [ main::$1 ] 4: zp[1]:35 [ main::$2 ] 4: zp[1]:37 [ main::$3 ] 4: zp[1]:39 [ main::$4 ] 4: zp[1]:41 [ main::$5 ] 4: zp[1]:43 [ main::$6 ] 4: zp[1]:45 [ main::$7 ] 4: zp[1]:47 [ main::$8 ] 4: zp[1]:49 [ main::$9 ] 4: zp[1]:51 [ main::$10 ] 4: zp[1]:53 [ main::$11 ] +Uplift Scope [func_bank1_c] 4.33: zp[1]:22 [ func_bank1_c::return#0 ] 4: zp[1]:34 [ func_bank1_c::return#2 ] +Uplift Scope [func_bank1_d] 4.33: zp[1]:23 [ func_bank1_d::return#0 ] 4: zp[1]:36 [ func_bank1_d::return#2 ] +Uplift Scope [func_bank2_c] 4.33: zp[1]:26 [ func_bank2_c::return#0 ] 4: zp[1]:46 [ func_bank2_c::return#2 ] +Uplift Scope [func_bank2_d] 4.33: zp[1]:27 [ func_bank2_d::return#0 ] 4: zp[1]:48 [ func_bank2_d::return#2 ] +Uplift Scope [func_bank2_e] 4.33: zp[1]:28 [ func_bank2_e::return#0 ] 4: zp[1]:50 [ func_bank2_e::return#2 ] +Uplift Scope [func_bank2_f] 4.33: zp[1]:29 [ func_bank2_f::return#0 ] 4: zp[1]:52 [ func_bank2_f::return#2 ] +Uplift Scope [func_bank1_e] 4.33: zp[1]:24 [ func_bank1_e::return#0 ] 4: zp[1]:38 [ func_bank1_e::return#2 ] +Uplift Scope [func_bank1_f] 4.33: zp[1]:25 [ func_bank1_f::return#0 ] 4: zp[1]:40 [ func_bank1_f::return#2 ] +Uplift Scope [] + +Uplifting [func_bank1_a] best 740 combination reg byte x [ func_bank1_a::a#4 ] reg byte a [ func_bank1_a::b#4 ] reg byte a [ func_bank1_a::return#0 ] reg byte a [ func_bank1_a::return#2 ] zp[1]:16 [ func_bank1_a::return#4 ] zp[1]:18 [ func_bank1_a::return#3 ] zp[1]:30 [ func_bank1_a::return#10 ] +Limited combination testing to 100 combinations of 16384 possible. +Uplifting [func_bank2_a] best 695 combination reg byte x [ func_bank2_a::a#4 ] reg byte a [ func_bank2_a::b#4 ] reg byte a [ func_bank2_a::return#1 ] reg byte a [ func_bank2_a::return#0 ] zp[1]:17 [ func_bank2_a::return#4 ] zp[1]:19 [ func_bank2_a::return#3 ] zp[1]:42 [ func_bank2_a::return#10 ] +Limited combination testing to 100 combinations of 16384 possible. +Uplifting [func_bank1_b] best 668 combination reg byte x [ func_bank1_b::a#2 ] reg byte a [ func_bank1_b::b#2 ] reg byte a [ func_bank1_b::return#1 ] reg byte a [ func_bank1_b::return#0 ] zp[1]:32 [ func_bank1_b::return#3 ] +Limited combination testing to 100 combinations of 1024 possible. +Uplifting [func_bank2_b] best 641 combination reg byte x [ func_bank2_b::a#2 ] reg byte a [ func_bank2_b::b#2 ] reg byte a [ func_bank2_b::return#1 ] reg byte a [ func_bank2_b::return#0 ] zp[1]:44 [ func_bank2_b::return#3 ] +Limited combination testing to 100 combinations of 1024 possible. +Uplifting [main] best 617 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] reg byte a [ main::$2 ] reg byte a [ main::$3 ] zp[1]:39 [ main::$4 ] zp[1]:41 [ main::$5 ] zp[1]:43 [ main::$6 ] zp[1]:45 [ main::$7 ] zp[1]:47 [ main::$8 ] zp[1]:49 [ main::$9 ] zp[1]:51 [ main::$10 ] zp[1]:53 [ main::$11 ] +Limited combination testing to 100 combinations of 16777216 possible. +Uplifting [func_bank1_c] best 605 combination reg byte a [ func_bank1_c::return#0 ] reg byte a [ func_bank1_c::return#2 ] +Uplifting [func_bank1_d] best 593 combination reg byte a [ func_bank1_d::return#0 ] reg byte a [ func_bank1_d::return#2 ] +Uplifting [func_bank2_c] best 581 combination reg byte a [ func_bank2_c::return#0 ] reg byte a [ func_bank2_c::return#2 ] +Uplifting [func_bank2_d] best 569 combination reg byte a [ func_bank2_d::return#0 ] reg byte a [ func_bank2_d::return#2 ] +Uplifting [func_bank2_e] best 557 combination reg byte a [ func_bank2_e::return#0 ] reg byte a [ func_bank2_e::return#2 ] +Uplifting [func_bank2_f] best 545 combination reg byte a [ func_bank2_f::return#0 ] reg byte a [ func_bank2_f::return#2 ] +Uplifting [func_bank1_e] best 533 combination reg byte a [ func_bank1_e::return#0 ] reg byte a [ func_bank1_e::return#2 ] +Uplifting [func_bank1_f] best 521 combination reg byte a [ func_bank1_f::return#0 ] reg byte a [ func_bank1_f::return#2 ] +Uplifting [] best 521 combination +Attempting to uplift remaining variables inzp[1]:16 [ func_bank1_a::return#4 ] +Uplifting [func_bank1_a] best 515 combination reg byte a [ func_bank1_a::return#4 ] +Attempting to uplift remaining variables inzp[1]:17 [ func_bank2_a::return#4 ] +Uplifting [func_bank2_a] best 509 combination reg byte a [ func_bank2_a::return#4 ] +Attempting to uplift remaining variables inzp[1]:18 [ func_bank1_a::return#3 ] +Uplifting [func_bank1_a] best 503 combination reg byte a [ func_bank1_a::return#3 ] +Attempting to uplift remaining variables inzp[1]:19 [ func_bank2_a::return#3 ] +Uplifting [func_bank2_a] best 497 combination reg byte a [ func_bank2_a::return#3 ] +Attempting to uplift remaining variables inzp[1]:30 [ func_bank1_a::return#10 ] +Uplifting [func_bank1_a] best 491 combination reg byte a [ func_bank1_a::return#10 ] +Attempting to uplift remaining variables inzp[1]:32 [ func_bank1_b::return#3 ] +Uplifting [func_bank1_b] best 485 combination reg byte a [ func_bank1_b::return#3 ] +Attempting to uplift remaining variables inzp[1]:39 [ main::$4 ] +Uplifting [main] best 479 combination reg byte a [ main::$4 ] +Attempting to uplift remaining variables inzp[1]:41 [ main::$5 ] +Uplifting [main] best 473 combination reg byte a [ main::$5 ] +Attempting to uplift remaining variables inzp[1]:42 [ func_bank2_a::return#10 ] +Uplifting [func_bank2_a] best 467 combination reg byte a [ func_bank2_a::return#10 ] +Attempting to uplift remaining variables inzp[1]:43 [ main::$6 ] +Uplifting [main] best 461 combination reg byte a [ main::$6 ] +Attempting to uplift remaining variables inzp[1]:44 [ func_bank2_b::return#3 ] +Uplifting [func_bank2_b] best 455 combination reg byte a [ func_bank2_b::return#3 ] +Attempting to uplift remaining variables inzp[1]:45 [ main::$7 ] +Uplifting [main] best 449 combination reg byte a [ main::$7 ] +Attempting to uplift remaining variables inzp[1]:47 [ main::$8 ] +Uplifting [main] best 443 combination reg byte a [ main::$8 ] +Attempting to uplift remaining variables inzp[1]:49 [ main::$9 ] +Uplifting [main] best 437 combination reg byte a [ main::$9 ] +Attempting to uplift remaining variables inzp[1]:51 [ main::$10 ] +Uplifting [main] best 431 combination reg byte a [ main::$10 ] +Attempting to uplift remaining variables inzp[1]:53 [ main::$11 ] +Uplifting [main] best 425 combination reg byte a [ main::$11 ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a far call procedure with a calling convention phi + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [1] call func_bank1_a + // [50] phi from main to func_bank1_a [phi:main->func_bank1_a] + func_bank1_a_from_main: + // [50] phi func_bank1_a::b#4 = 7 [phi:main->func_bank1_a#0] -- vbuaa=vbuc1 + lda #7 + // [50] phi func_bank1_a::a#4 = '0' [phi:main->func_bank1_a#1] -- call_far_cx16_ram_finalize + ldx #'0' + jsr $ff6e + .byte func_bank1_a + .byte 1 + // [2] func_bank1_a::return#10 = func_bank1_a::return#0 + jmp __b1 + // main::@1 + __b1: + // [3] main::$0 = func_bank1_a::return#10 + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // [5] call func_bank1_b + // [53] phi from main::@1 to func_bank1_b [phi:main::@1->func_bank1_b] + func_bank1_b_from___b1: + // [53] phi func_bank1_b::b#2 = 7 [phi:main::@1->func_bank1_b#0] -- vbuaa=vbuc1 + lda #7 + // [53] phi func_bank1_b::a#2 = '0' [phi:main::@1->func_bank1_b#1] -- vbuxx=vbuc1 + ldx #'0' + jsr func_bank1_b + // [6] func_bank1_b::return#3 = func_bank1_b::return#1 + jmp __b2 + // main::@2 + __b2: + // [7] main::$1 = func_bank1_b::return#3 + // [8] *SCREEN = main::$1 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // [9] call func_bank1_c + // [56] phi from main::@2 to func_bank1_c [phi:main::@2->func_bank1_c] -- call_far_cx16_ram_finalize + func_bank1_c_from___b2: + jsr $ff6e + .byte func_bank1_c + .byte 1 + // [10] func_bank1_c::return#2 = func_bank1_c::return#0 + jmp __b3 + // main::@3 + __b3: + // [11] main::$2 = func_bank1_c::return#2 + // [12] *SCREEN = main::$2 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // [13] call func_bank1_d + // [61] phi from main::@3 to func_bank1_d [phi:main::@3->func_bank1_d] -- call_far_cx16_ram_finalize + func_bank1_d_from___b3: + jsr $ff6e + .byte func_bank1_d + .byte 1 + // [14] func_bank1_d::return#2 = func_bank1_d::return#0 + jmp __b4 + // main::@4 + __b4: + // [15] main::$3 = func_bank1_d::return#2 + // [16] *SCREEN = main::$3 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // [17] call func_bank1_e + // [66] phi from main::@4 to func_bank1_e [phi:main::@4->func_bank1_e] + func_bank1_e_from___b4: + jsr func_bank1_e + // [18] func_bank1_e::return#2 = func_bank1_e::return#0 + jmp __b5 + // main::@5 + __b5: + // [19] main::$4 = func_bank1_e::return#2 + // [20] *SCREEN = main::$4 -- _deref_pbuc1=vbuaa + // near call + sta SCREEN + // [21] call func_bank1_f + // [71] phi from main::@5 to func_bank1_f [phi:main::@5->func_bank1_f] + func_bank1_f_from___b5: + jsr func_bank1_f + // [22] func_bank1_f::return#2 = func_bank1_f::return#0 + jmp __b6 + // main::@6 + __b6: + // [23] main::$5 = func_bank1_f::return#2 + // [24] *SCREEN = main::$5 -- _deref_pbuc1=vbuaa + // near call + sta SCREEN + // [25] call func_bank2_a + // [76] phi from main::@6 to func_bank2_a [phi:main::@6->func_bank2_a] + func_bank2_a_from___b6: + // [76] phi func_bank2_a::b#4 = 7 [phi:main::@6->func_bank2_a#0] -- vbuaa=vbuc1 + lda #7 + // [76] phi func_bank2_a::a#4 = '0' [phi:main::@6->func_bank2_a#1] -- call_far_cx16_ram_finalize + ldx #'0' + jsr $ff6e + .byte func_bank2_a + .byte 2 + // [26] func_bank2_a::return#10 = func_bank2_a::return#1 + jmp __b7 + // main::@7 + __b7: + // [27] main::$6 = func_bank2_a::return#10 + // [28] *SCREEN = main::$6 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // [29] call func_bank2_b + // [79] phi from main::@7 to func_bank2_b [phi:main::@7->func_bank2_b] + func_bank2_b_from___b7: + // [79] phi func_bank2_b::b#2 = 7 [phi:main::@7->func_bank2_b#0] -- vbuaa=vbuc1 + lda #7 + // [79] phi func_bank2_b::a#2 = '0' [phi:main::@7->func_bank2_b#1] -- vbuxx=vbuc1 + ldx #'0' + jsr func_bank2_b + // [30] func_bank2_b::return#3 = func_bank2_b::return#1 + jmp __b8 + // main::@8 + __b8: + // [31] main::$7 = func_bank2_b::return#3 + // [32] *SCREEN = main::$7 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // [33] call func_bank2_c + // [82] phi from main::@8 to func_bank2_c [phi:main::@8->func_bank2_c] -- call_far_cx16_ram_finalize + func_bank2_c_from___b8: + jsr $ff6e + .byte func_bank2_c + .byte 2 + // [34] func_bank2_c::return#2 = func_bank2_c::return#0 + jmp __b9 + // main::@9 + __b9: + // [35] main::$8 = func_bank2_c::return#2 + // [36] *SCREEN = main::$8 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // [37] call func_bank2_d + // [87] phi from main::@9 to func_bank2_d [phi:main::@9->func_bank2_d] -- call_far_cx16_ram_finalize + func_bank2_d_from___b9: + jsr $ff6e + .byte func_bank2_d + .byte 2 + // [38] func_bank2_d::return#2 = func_bank2_d::return#0 + jmp __b10 + // main::@10 + __b10: + // [39] main::$9 = func_bank2_d::return#2 + // [40] *SCREEN = main::$9 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // [41] call func_bank2_e + // [92] phi from main::@10 to func_bank2_e [phi:main::@10->func_bank2_e] -- call_far_cx16_ram_finalize + func_bank2_e_from___b10: + jsr $ff6e + .byte func_bank2_e + .byte 2 + // [42] func_bank2_e::return#2 = func_bank2_e::return#0 + jmp __b11 + // main::@11 + __b11: + // [43] main::$10 = func_bank2_e::return#2 + // [44] *SCREEN = main::$10 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // [45] call func_bank2_f + // [97] phi from main::@11 to func_bank2_f [phi:main::@11->func_bank2_f] -- call_far_cx16_ram_finalize + func_bank2_f_from___b11: + jsr $ff6e + .byte func_bank2_f + .byte 2 + // [46] func_bank2_f::return#2 = func_bank2_f::return#0 + jmp __b12 + // main::@12 + __b12: + // [47] main::$11 = func_bank2_f::return#2 + // [48] *SCREEN = main::$11 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [49] return + rts +} +.segment stage + // func_bank1_a +// __register(A) char func_bank1_a(__register(X) char a, __register(A) char b) +func_bank1_a: { + // [51] func_bank1_a::return#0 = func_bank1_a::a#4 + func_bank1_a::b#4 -- vbuaa=vbuxx_plus_vbuaa + stx.z $ff + clc + adc.z $ff + jmp __breturn + // func_bank1_a::@return + __breturn: + // [52] return + rts +} +.segment platform + // func_bank1_b +// __register(A) char func_bank1_b(__register(X) char a, __register(A) char b) +func_bank1_b: { + // [54] func_bank1_b::return#1 = func_bank1_b::a#2 + func_bank1_b::b#2 -- vbuaa=vbuxx_plus_vbuaa + stx.z $ff + clc + adc.z $ff + jmp __breturn + // func_bank1_b::@return + __breturn: + // [55] return + rts +} +.segment stage + // func_bank1_c +// __register(A) char func_bank1_c(char a, char b) +func_bank1_c: { + .const a = '0' + .const b = 7 + // [57] call func_bank1_a + // [50] phi from func_bank1_c to func_bank1_a [phi:func_bank1_c->func_bank1_a] + func_bank1_a_from_func_bank1_c: + // [50] phi func_bank1_a::b#4 = func_bank1_c::b#0 [phi:func_bank1_c->func_bank1_a#0] -- vbuaa=vbuc1 + lda #b + // [50] phi func_bank1_a::a#4 = func_bank1_c::a#0 [phi:func_bank1_c->func_bank1_a#1] -- vbuxx=vbuc1 + ldx #a + jsr func_bank1_a + // [58] func_bank1_a::return#2 = func_bank1_a::return#0 + jmp __b1 + // func_bank1_c::@1 + __b1: + // [59] func_bank1_c::return#0 = func_bank1_a::return#2 + jmp __breturn + // func_bank1_c::@return + __breturn: + // [60] return + rts +} + // func_bank1_d +// __register(A) char func_bank1_d(char a, char b) +func_bank1_d: { + .const a = '0' + .const b = 7 + // [62] call func_bank2_a + // [76] phi from func_bank1_d to func_bank2_a [phi:func_bank1_d->func_bank2_a] + func_bank2_a_from_func_bank1_d: + // [76] phi func_bank2_a::b#4 = func_bank1_d::b#0 [phi:func_bank1_d->func_bank2_a#0] -- vbuaa=vbuc1 + lda #b + // [76] phi func_bank2_a::a#4 = func_bank1_d::a#0 [phi:func_bank1_d->func_bank2_a#1] -- call_far_cx16_ram_finalize + ldx #a + jsr $ff6e + .byte func_bank2_a + .byte 2 + // [63] func_bank2_a::return#0 = func_bank2_a::return#1 + jmp __b1 + // func_bank1_d::@1 + __b1: + // [64] func_bank1_d::return#0 = func_bank2_a::return#0 + jmp __breturn + // func_bank1_d::@return + __breturn: + // [65] return + rts +} +.segment platform + // func_bank1_e +// __register(A) char func_bank1_e(char a, char b) +func_bank1_e: { + .const a = '0' + .const b = 7 + // [67] call func_bank1_a + // [50] phi from func_bank1_e to func_bank1_a [phi:func_bank1_e->func_bank1_a] + func_bank1_a_from_func_bank1_e: + // [50] phi func_bank1_a::b#4 = func_bank1_e::b#0 [phi:func_bank1_e->func_bank1_a#0] -- vbuaa=vbuc1 + lda #b + // [50] phi func_bank1_a::a#4 = func_bank1_e::a#0 [phi:func_bank1_e->func_bank1_a#1] -- call_far_cx16_ram_finalize + ldx #a + jsr $ff6e + .byte func_bank1_a + .byte 1 + // [68] func_bank1_a::return#4 = func_bank1_a::return#0 + jmp __b1 + // func_bank1_e::@1 + __b1: + // [69] func_bank1_e::return#0 = func_bank1_a::return#4 + jmp __breturn + // func_bank1_e::@return + __breturn: + // [70] return + rts +} + // func_bank1_f +// __register(A) char func_bank1_f(char a, char b) +func_bank1_f: { + .const a = '0' + .const b = 7 + // [72] call func_bank2_a + // [76] phi from func_bank1_f to func_bank2_a [phi:func_bank1_f->func_bank2_a] + func_bank2_a_from_func_bank1_f: + // [76] phi func_bank2_a::b#4 = func_bank1_f::b#0 [phi:func_bank1_f->func_bank2_a#0] -- vbuaa=vbuc1 + lda #b + // [76] phi func_bank2_a::a#4 = func_bank1_f::a#0 [phi:func_bank1_f->func_bank2_a#1] -- call_far_cx16_ram_finalize + ldx #a + jsr $ff6e + .byte func_bank2_a + .byte 2 + // [73] func_bank2_a::return#4 = func_bank2_a::return#1 + jmp __b1 + // func_bank1_f::@1 + __b1: + // [74] func_bank1_f::return#0 = func_bank2_a::return#4 + jmp __breturn + // func_bank1_f::@return + __breturn: + // [75] return + rts +} + // func_bank2_a +// __register(A) char func_bank2_a(__register(X) char a, __register(A) char b) +func_bank2_a: { + // [77] func_bank2_a::return#1 = func_bank2_a::a#4 + func_bank2_a::b#4 -- vbuaa=vbuxx_plus_vbuaa + stx.z $ff + clc + adc.z $ff + jmp __breturn + // func_bank2_a::@return + __breturn: + // [78] return + rts +} + // func_bank2_b +// __register(A) char func_bank2_b(__register(X) char a, __register(A) char b) +func_bank2_b: { + // [80] func_bank2_b::return#1 = func_bank2_b::a#2 + func_bank2_b::b#2 -- vbuaa=vbuxx_plus_vbuaa + stx.z $ff + clc + adc.z $ff + jmp __breturn + // func_bank2_b::@return + __breturn: + // [81] return + rts +} + // func_bank2_c +// __register(A) char func_bank2_c(char a, char b) +func_bank2_c: { + .const a = '0' + .const b = 7 + // [83] call func_bank1_a + // [50] phi from func_bank2_c to func_bank1_a [phi:func_bank2_c->func_bank1_a] + func_bank1_a_from_func_bank2_c: + // [50] phi func_bank1_a::b#4 = func_bank2_c::b#0 [phi:func_bank2_c->func_bank1_a#0] -- vbuaa=vbuc1 + lda #b + // [50] phi func_bank1_a::a#4 = func_bank2_c::a#0 [phi:func_bank2_c->func_bank1_a#1] -- call_far_cx16_ram_finalize + ldx #a + jsr $ff6e + .byte func_bank1_a + .byte 1 + // [84] func_bank1_a::return#3 = func_bank1_a::return#0 + jmp __b1 + // func_bank2_c::@1 + __b1: + // [85] func_bank2_c::return#0 = func_bank1_a::return#3 + jmp __breturn + // func_bank2_c::@return + __breturn: + // [86] return + rts +} + // func_bank2_d +// __register(A) char func_bank2_d(char a, char b) +func_bank2_d: { + .const a = '0' + .const b = 7 + // [88] call func_bank2_a + // [76] phi from func_bank2_d to func_bank2_a [phi:func_bank2_d->func_bank2_a] + func_bank2_a_from_func_bank2_d: + // [76] phi func_bank2_a::b#4 = func_bank2_d::b#0 [phi:func_bank2_d->func_bank2_a#0] -- vbuaa=vbuc1 + lda #b + // [76] phi func_bank2_a::a#4 = func_bank2_d::a#0 [phi:func_bank2_d->func_bank2_a#1] -- vbuxx=vbuc1 + ldx #a + jsr func_bank2_a + // [89] func_bank2_a::return#3 = func_bank2_a::return#1 + jmp __b1 + // func_bank2_d::@1 + __b1: + // [90] func_bank2_d::return#0 = func_bank2_a::return#3 + jmp __breturn + // func_bank2_d::@return + __breturn: + // [91] return + rts +} + // func_bank2_e +// __register(A) char func_bank2_e(char a, char b) +func_bank2_e: { + .const a = '0' + .const b = 7 + // [93] call func_bank2_b + // [79] phi from func_bank2_e to func_bank2_b [phi:func_bank2_e->func_bank2_b] + func_bank2_b_from_func_bank2_e: + // [79] phi func_bank2_b::b#2 = func_bank2_e::b#0 [phi:func_bank2_e->func_bank2_b#0] -- vbuaa=vbuc1 + lda #b + // [79] phi func_bank2_b::a#2 = func_bank2_e::a#0 [phi:func_bank2_e->func_bank2_b#1] -- vbuxx=vbuc1 + ldx #a + jsr func_bank2_b + // [94] func_bank2_b::return#0 = func_bank2_b::return#1 + jmp __b1 + // func_bank2_e::@1 + __b1: + // [95] func_bank2_e::return#0 = func_bank2_b::return#0 + jmp __breturn + // func_bank2_e::@return + __breturn: + // [96] return + rts +} + // func_bank2_f +// __register(A) char func_bank2_f(char a, char b) +func_bank2_f: { + .const a = '0' + .const b = 7 + // [98] call func_bank1_b + // [53] phi from func_bank2_f to func_bank1_b [phi:func_bank2_f->func_bank1_b] + func_bank1_b_from_func_bank2_f: + // [53] phi func_bank1_b::b#2 = func_bank2_f::b#0 [phi:func_bank2_f->func_bank1_b#0] -- vbuaa=vbuc1 + lda #b + // [53] phi func_bank1_b::a#2 = func_bank2_f::a#0 [phi:func_bank2_f->func_bank1_b#1] -- vbuxx=vbuc1 + ldx #a + jsr func_bank1_b + // [99] func_bank1_b::return#0 = func_bank1_b::return#1 + jmp __b1 + // func_bank2_f::@1 + __b1: + // [100] func_bank2_f::return#0 = func_bank1_b::return#0 + jmp __breturn + // func_bank2_f::@return + __breturn: + // [101] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __b2 +Removing instruction jmp __b3 +Removing instruction jmp __b4 +Removing instruction jmp __b5 +Removing instruction jmp __b6 +Removing instruction jmp __b7 +Removing instruction jmp __b8 +Removing instruction jmp __b9 +Removing instruction jmp __b10 +Removing instruction jmp __b11 +Removing instruction jmp __b12 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction func_bank1_a_from_main: +Removing instruction __b1: +Removing instruction func_bank1_b_from___b1: +Removing instruction __b2: +Removing instruction func_bank1_c_from___b2: +Removing instruction __b3: +Removing instruction func_bank1_d_from___b3: +Removing instruction __b4: +Removing instruction func_bank1_e_from___b4: +Removing instruction __b5: +Removing instruction func_bank1_f_from___b5: +Removing instruction __b6: +Removing instruction func_bank2_a_from___b6: +Removing instruction __b7: +Removing instruction func_bank2_b_from___b7: +Removing instruction __b8: +Removing instruction func_bank2_c_from___b8: +Removing instruction __b9: +Removing instruction func_bank2_d_from___b9: +Removing instruction __b10: +Removing instruction func_bank2_e_from___b10: +Removing instruction __b11: +Removing instruction func_bank2_f_from___b11: +Removing instruction __b12: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction func_bank1_a_from_func_bank1_c: +Removing instruction __b1: +Removing instruction func_bank2_a_from_func_bank1_d: +Removing instruction __b1: +Removing instruction func_bank1_a_from_func_bank1_e: +Removing instruction __b1: +Removing instruction func_bank2_a_from_func_bank1_f: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction func_bank1_a_from_func_bank2_c: +Removing instruction __b1: +Removing instruction func_bank2_a_from_func_bank2_d: +Removing instruction __b1: +Removing instruction func_bank2_b_from_func_bank2_e: +Removing instruction __b1: +Removing instruction func_bank1_b_from_func_bank2_f: +Removing instruction __b1: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +__bank(bank) char func_bank1_a(char a , char b) +char func_bank1_a::a +char func_bank1_a::a#4 // reg byte x 101.0 +char func_bank1_a::b +char func_bank1_a::b#4 // reg byte a 101.0 +char func_bank1_a::return +char func_bank1_a::return#0 // reg byte a 22.66666666666666 +char func_bank1_a::return#10 // reg byte a 4.0 +char func_bank1_a::return#2 // reg byte a 22.0 +char func_bank1_a::return#3 // reg byte a 22.0 +char func_bank1_a::return#4 // reg byte a 22.0 +char func_bank1_b(char a , char b) +char func_bank1_b::a +char func_bank1_b::a#2 // reg byte x 101.0 +char func_bank1_b::b +char func_bank1_b::b#2 // reg byte a 101.0 +char func_bank1_b::return +char func_bank1_b::return#0 // reg byte a 22.0 +char func_bank1_b::return#1 // reg byte a 28.5 +char func_bank1_b::return#3 // reg byte a 4.0 +__bank(bank) char func_bank1_c(char a , char b) +char func_bank1_c::a +__constant char func_bank1_c::a#0 = '0' // a +char func_bank1_c::b +__constant char func_bank1_c::b#0 = 7 // b +char func_bank1_c::return +char func_bank1_c::return#0 // reg byte a 4.333333333333333 +char func_bank1_c::return#2 // reg byte a 4.0 +__bank(bank) char func_bank1_d(char a , char b) +char func_bank1_d::a +__constant char func_bank1_d::a#0 = '0' // a +char func_bank1_d::b +__constant char func_bank1_d::b#0 = 7 // b +char func_bank1_d::return +char func_bank1_d::return#0 // reg byte a 4.333333333333333 +char func_bank1_d::return#2 // reg byte a 4.0 +char func_bank1_e(char a , char b) +char func_bank1_e::a +__constant char func_bank1_e::a#0 = '0' // a +char func_bank1_e::b +__constant char func_bank1_e::b#0 = 7 // b +char func_bank1_e::return +char func_bank1_e::return#0 // reg byte a 4.333333333333333 +char func_bank1_e::return#2 // reg byte a 4.0 +char func_bank1_f(char a , char b) +char func_bank1_f::a +__constant char func_bank1_f::a#0 = '0' // a +char func_bank1_f::b +__constant char func_bank1_f::b#0 = 7 // b +char func_bank1_f::return +char func_bank1_f::return#0 // reg byte a 4.333333333333333 +char func_bank1_f::return#2 // reg byte a 4.0 +__bank(bank) char func_bank2_a(char a , char b) +char func_bank2_a::a +char func_bank2_a::a#4 // reg byte x 101.0 +char func_bank2_a::b +char func_bank2_a::b#4 // reg byte a 101.0 +char func_bank2_a::return +char func_bank2_a::return#0 // reg byte a 22.0 +char func_bank2_a::return#1 // reg byte a 22.666666666666664 +char func_bank2_a::return#10 // reg byte a 4.0 +char func_bank2_a::return#3 // reg byte a 22.0 +char func_bank2_a::return#4 // reg byte a 22.0 +char func_bank2_b(char a , char b) +char func_bank2_b::a +char func_bank2_b::a#2 // reg byte x 101.0 +char func_bank2_b::b +char func_bank2_b::b#2 // reg byte a 101.0 +char func_bank2_b::return +char func_bank2_b::return#0 // reg byte a 22.0 +char func_bank2_b::return#1 // reg byte a 28.5 +char func_bank2_b::return#3 // reg byte a 4.0 +__bank(bank) char func_bank2_c(char a , char b) +char func_bank2_c::a +__constant char func_bank2_c::a#0 = '0' // a +char func_bank2_c::b +__constant char func_bank2_c::b#0 = 7 // b +char func_bank2_c::return +char func_bank2_c::return#0 // reg byte a 4.333333333333333 +char func_bank2_c::return#2 // reg byte a 4.0 +__bank(bank) char func_bank2_d(char a , char b) +char func_bank2_d::a +__constant char func_bank2_d::a#0 = '0' // a +char func_bank2_d::b +__constant char func_bank2_d::b#0 = 7 // b +char func_bank2_d::return +char func_bank2_d::return#0 // reg byte a 4.333333333333333 +char func_bank2_d::return#2 // reg byte a 4.0 +__bank(bank) char func_bank2_e(char a , char b) +char func_bank2_e::a +__constant char func_bank2_e::a#0 = '0' // a +char func_bank2_e::b +__constant char func_bank2_e::b#0 = 7 // b +char func_bank2_e::return +char func_bank2_e::return#0 // reg byte a 4.333333333333333 +char func_bank2_e::return#2 // reg byte a 4.0 +__bank(bank) char func_bank2_f(char a , char b) +char func_bank2_f::a +__constant char func_bank2_f::a#0 = '0' // a +char func_bank2_f::b +__constant char func_bank2_f::b#0 = 7 // b +char func_bank2_f::return +char func_bank2_f::return#0 // reg byte a 4.333333333333333 +char func_bank2_f::return#2 // reg byte a 4.0 +void main() +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 +char main::$10 // reg byte a 4.0 +char main::$11 // reg byte a 4.0 +char main::$2 // reg byte a 4.0 +char main::$3 // reg byte a 4.0 +char main::$4 // reg byte a 4.0 +char main::$5 // reg byte a 4.0 +char main::$6 // reg byte a 4.0 +char main::$7 // reg byte a 4.0 +char main::$8 // reg byte a 4.0 +char main::$9 // reg byte a 4.0 + +reg byte x [ func_bank1_a::a#4 ] +reg byte a [ func_bank1_a::b#4 ] +reg byte x [ func_bank1_b::a#2 ] +reg byte a [ func_bank1_b::b#2 ] +reg byte x [ func_bank2_a::a#4 ] +reg byte a [ func_bank2_a::b#4 ] +reg byte x [ func_bank2_b::a#2 ] +reg byte a [ func_bank2_b::b#2 ] +reg byte a [ func_bank1_a::return#10 ] +reg byte a [ main::$0 ] +reg byte a [ func_bank1_b::return#3 ] +reg byte a [ main::$1 ] +reg byte a [ func_bank1_c::return#2 ] +reg byte a [ main::$2 ] +reg byte a [ func_bank1_d::return#2 ] +reg byte a [ main::$3 ] +reg byte a [ func_bank1_e::return#2 ] +reg byte a [ main::$4 ] +reg byte a [ func_bank1_f::return#2 ] +reg byte a [ main::$5 ] +reg byte a [ func_bank2_a::return#10 ] +reg byte a [ main::$6 ] +reg byte a [ func_bank2_b::return#3 ] +reg byte a [ main::$7 ] +reg byte a [ func_bank2_c::return#2 ] +reg byte a [ main::$8 ] +reg byte a [ func_bank2_d::return#2 ] +reg byte a [ main::$9 ] +reg byte a [ func_bank2_e::return#2 ] +reg byte a [ main::$10 ] +reg byte a [ func_bank2_f::return#2 ] +reg byte a [ main::$11 ] +reg byte a [ func_bank1_a::return#0 ] +reg byte a [ func_bank1_b::return#1 ] +reg byte a [ func_bank1_a::return#2 ] +reg byte a [ func_bank1_c::return#0 ] +reg byte a [ func_bank2_a::return#0 ] +reg byte a [ func_bank1_d::return#0 ] +reg byte a [ func_bank1_a::return#4 ] +reg byte a [ func_bank1_e::return#0 ] +reg byte a [ func_bank2_a::return#4 ] +reg byte a [ func_bank1_f::return#0 ] +reg byte a [ func_bank2_a::return#1 ] +reg byte a [ func_bank2_b::return#1 ] +reg byte a [ func_bank1_a::return#3 ] +reg byte a [ func_bank2_c::return#0 ] +reg byte a [ func_bank2_a::return#3 ] +reg byte a [ func_bank2_d::return#0 ] +reg byte a [ func_bank2_b::return#0 ] +reg byte a [ func_bank2_e::return#0 ] +reg byte a [ func_bank1_b::return#0 ] +reg byte a [ func_bank2_f::return#0 ] + + +FINAL ASSEMBLER +Score: 326 + + // File Comments +// Test a far call procedure with a calling convention phi + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // func_bank1_a('0', 7) + // [1] call func_bank1_a + // [50] phi from main to func_bank1_a [phi:main->func_bank1_a] + // [50] phi func_bank1_a::b#4 = 7 [phi:main->func_bank1_a#0] -- vbuaa=vbuc1 + lda #7 + // [50] phi func_bank1_a::a#4 = '0' [phi:main->func_bank1_a#1] -- call_far_cx16_ram_finalize + ldx #'0' + jsr $ff6e + .byte func_bank1_a + .byte 1 + // func_bank1_a('0', 7) + // [2] func_bank1_a::return#10 = func_bank1_a::return#0 + // main::@1 + // [3] main::$0 = func_bank1_a::return#10 + // SCREEN[0] = func_bank1_a('0', 7) + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // func_bank1_b('0', 7) + // [5] call func_bank1_b + // [53] phi from main::@1 to func_bank1_b [phi:main::@1->func_bank1_b] + // [53] phi func_bank1_b::b#2 = 7 [phi:main::@1->func_bank1_b#0] -- vbuaa=vbuc1 + lda #7 + // [53] phi func_bank1_b::a#2 = '0' [phi:main::@1->func_bank1_b#1] -- vbuxx=vbuc1 + ldx #'0' + jsr func_bank1_b + // func_bank1_b('0', 7) + // [6] func_bank1_b::return#3 = func_bank1_b::return#1 + // main::@2 + // [7] main::$1 = func_bank1_b::return#3 + // SCREEN[0] = func_bank1_b('0', 7) + // [8] *SCREEN = main::$1 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // func_bank1_c('0', 7) + // [9] call func_bank1_c + // [56] phi from main::@2 to func_bank1_c [phi:main::@2->func_bank1_c] -- call_far_cx16_ram_finalize + jsr $ff6e + .byte func_bank1_c + .byte 1 + // func_bank1_c('0', 7) + // [10] func_bank1_c::return#2 = func_bank1_c::return#0 + // main::@3 + // [11] main::$2 = func_bank1_c::return#2 + // SCREEN[0] = func_bank1_c('0', 7) + // [12] *SCREEN = main::$2 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // func_bank1_d('0', 7) + // [13] call func_bank1_d + // [61] phi from main::@3 to func_bank1_d [phi:main::@3->func_bank1_d] -- call_far_cx16_ram_finalize + jsr $ff6e + .byte func_bank1_d + .byte 1 + // func_bank1_d('0', 7) + // [14] func_bank1_d::return#2 = func_bank1_d::return#0 + // main::@4 + // [15] main::$3 = func_bank1_d::return#2 + // SCREEN[0] = func_bank1_d('0', 7) + // [16] *SCREEN = main::$3 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // func_bank1_e('0', 7) + // [17] call func_bank1_e + // [66] phi from main::@4 to func_bank1_e [phi:main::@4->func_bank1_e] + jsr func_bank1_e + // func_bank1_e('0', 7) + // [18] func_bank1_e::return#2 = func_bank1_e::return#0 + // main::@5 + // [19] main::$4 = func_bank1_e::return#2 + // SCREEN[0] = func_bank1_e('0', 7) + // [20] *SCREEN = main::$4 -- _deref_pbuc1=vbuaa + // near call + sta SCREEN + // func_bank1_f('0', 7) + // [21] call func_bank1_f + // [71] phi from main::@5 to func_bank1_f [phi:main::@5->func_bank1_f] + jsr func_bank1_f + // func_bank1_f('0', 7) + // [22] func_bank1_f::return#2 = func_bank1_f::return#0 + // main::@6 + // [23] main::$5 = func_bank1_f::return#2 + // SCREEN[0] = func_bank1_f('0', 7) + // [24] *SCREEN = main::$5 -- _deref_pbuc1=vbuaa + // near call + sta SCREEN + // func_bank2_a('0', 7) + // [25] call func_bank2_a + // [76] phi from main::@6 to func_bank2_a [phi:main::@6->func_bank2_a] + // [76] phi func_bank2_a::b#4 = 7 [phi:main::@6->func_bank2_a#0] -- vbuaa=vbuc1 + lda #7 + // [76] phi func_bank2_a::a#4 = '0' [phi:main::@6->func_bank2_a#1] -- call_far_cx16_ram_finalize + ldx #'0' + jsr $ff6e + .byte func_bank2_a + .byte 2 + // func_bank2_a('0', 7) + // [26] func_bank2_a::return#10 = func_bank2_a::return#1 + // main::@7 + // [27] main::$6 = func_bank2_a::return#10 + // SCREEN[0] = func_bank2_a('0', 7) + // [28] *SCREEN = main::$6 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // func_bank2_b('0', 7) + // [29] call func_bank2_b + // [79] phi from main::@7 to func_bank2_b [phi:main::@7->func_bank2_b] + // [79] phi func_bank2_b::b#2 = 7 [phi:main::@7->func_bank2_b#0] -- vbuaa=vbuc1 + lda #7 + // [79] phi func_bank2_b::a#2 = '0' [phi:main::@7->func_bank2_b#1] -- vbuxx=vbuc1 + ldx #'0' + jsr func_bank2_b + // func_bank2_b('0', 7) + // [30] func_bank2_b::return#3 = func_bank2_b::return#1 + // main::@8 + // [31] main::$7 = func_bank2_b::return#3 + // SCREEN[0] = func_bank2_b('0', 7) + // [32] *SCREEN = main::$7 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // func_bank2_c('0', 7) + // [33] call func_bank2_c + // [82] phi from main::@8 to func_bank2_c [phi:main::@8->func_bank2_c] -- call_far_cx16_ram_finalize + jsr $ff6e + .byte func_bank2_c + .byte 2 + // func_bank2_c('0', 7) + // [34] func_bank2_c::return#2 = func_bank2_c::return#0 + // main::@9 + // [35] main::$8 = func_bank2_c::return#2 + // SCREEN[0] = func_bank2_c('0', 7) + // [36] *SCREEN = main::$8 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // func_bank2_d('0', 7) + // [37] call func_bank2_d + // [87] phi from main::@9 to func_bank2_d [phi:main::@9->func_bank2_d] -- call_far_cx16_ram_finalize + jsr $ff6e + .byte func_bank2_d + .byte 2 + // func_bank2_d('0', 7) + // [38] func_bank2_d::return#2 = func_bank2_d::return#0 + // main::@10 + // [39] main::$9 = func_bank2_d::return#2 + // SCREEN[0] = func_bank2_d('0', 7) + // [40] *SCREEN = main::$9 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // func_bank2_e('0', 7) + // [41] call func_bank2_e + // [92] phi from main::@10 to func_bank2_e [phi:main::@10->func_bank2_e] -- call_far_cx16_ram_finalize + jsr $ff6e + .byte func_bank2_e + .byte 2 + // func_bank2_e('0', 7) + // [42] func_bank2_e::return#2 = func_bank2_e::return#0 + // main::@11 + // [43] main::$10 = func_bank2_e::return#2 + // SCREEN[0] = func_bank2_e('0', 7) + // [44] *SCREEN = main::$10 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // func_bank2_f('0', 7) + // [45] call func_bank2_f + // [97] phi from main::@11 to func_bank2_f [phi:main::@11->func_bank2_f] -- call_far_cx16_ram_finalize + jsr $ff6e + .byte func_bank2_f + .byte 2 + // func_bank2_f('0', 7) + // [46] func_bank2_f::return#2 = func_bank2_f::return#0 + // main::@12 + // [47] main::$11 = func_bank2_f::return#2 + // SCREEN[0] = func_bank2_f('0', 7) + // [48] *SCREEN = main::$11 -- _deref_pbuc1=vbuaa + // far call + sta SCREEN + // main::@return + // } + // [49] return + rts +} +.segment stage + // func_bank1_a +// __register(A) char func_bank1_a(__register(X) char a, __register(A) char b) +func_bank1_a: { + // a+b + // [51] func_bank1_a::return#0 = func_bank1_a::a#4 + func_bank1_a::b#4 -- vbuaa=vbuxx_plus_vbuaa + stx.z $ff + clc + adc.z $ff + // func_bank1_a::@return + // } + // [52] return + rts +} +.segment platform + // func_bank1_b +// __register(A) char func_bank1_b(__register(X) char a, __register(A) char b) +func_bank1_b: { + // a+b + // [54] func_bank1_b::return#1 = func_bank1_b::a#2 + func_bank1_b::b#2 -- vbuaa=vbuxx_plus_vbuaa + stx.z $ff + clc + adc.z $ff + // func_bank1_b::@return + // } + // [55] return + rts +} +.segment stage + // func_bank1_c +// __register(A) char func_bank1_c(char a, char b) +func_bank1_c: { + .const a = '0' + .const b = 7 + // func_bank1_a(a,b) + // [57] call func_bank1_a + // [50] phi from func_bank1_c to func_bank1_a [phi:func_bank1_c->func_bank1_a] + // [50] phi func_bank1_a::b#4 = func_bank1_c::b#0 [phi:func_bank1_c->func_bank1_a#0] -- vbuaa=vbuc1 + lda #b + // [50] phi func_bank1_a::a#4 = func_bank1_c::a#0 [phi:func_bank1_c->func_bank1_a#1] -- vbuxx=vbuc1 + ldx #a + jsr func_bank1_a + // func_bank1_a(a,b) + // [58] func_bank1_a::return#2 = func_bank1_a::return#0 + // func_bank1_c::@1 + // [59] func_bank1_c::return#0 = func_bank1_a::return#2 + // func_bank1_c::@return + // } + // [60] return + rts +} + // func_bank1_d +// __register(A) char func_bank1_d(char a, char b) +func_bank1_d: { + .const a = '0' + .const b = 7 + // func_bank2_a(a,b) + // [62] call func_bank2_a + // [76] phi from func_bank1_d to func_bank2_a [phi:func_bank1_d->func_bank2_a] + // [76] phi func_bank2_a::b#4 = func_bank1_d::b#0 [phi:func_bank1_d->func_bank2_a#0] -- vbuaa=vbuc1 + lda #b + // [76] phi func_bank2_a::a#4 = func_bank1_d::a#0 [phi:func_bank1_d->func_bank2_a#1] -- call_far_cx16_ram_finalize + ldx #a + jsr $ff6e + .byte func_bank2_a + .byte 2 + // func_bank2_a(a,b) + // [63] func_bank2_a::return#0 = func_bank2_a::return#1 + // func_bank1_d::@1 + // [64] func_bank1_d::return#0 = func_bank2_a::return#0 + // func_bank1_d::@return + // } + // [65] return + rts +} +.segment platform + // func_bank1_e +// __register(A) char func_bank1_e(char a, char b) +func_bank1_e: { + .const a = '0' + .const b = 7 + // func_bank1_a(a,b) + // [67] call func_bank1_a + // [50] phi from func_bank1_e to func_bank1_a [phi:func_bank1_e->func_bank1_a] + // [50] phi func_bank1_a::b#4 = func_bank1_e::b#0 [phi:func_bank1_e->func_bank1_a#0] -- vbuaa=vbuc1 + lda #b + // [50] phi func_bank1_a::a#4 = func_bank1_e::a#0 [phi:func_bank1_e->func_bank1_a#1] -- call_far_cx16_ram_finalize + ldx #a + jsr $ff6e + .byte func_bank1_a + .byte 1 + // func_bank1_a(a,b) + // [68] func_bank1_a::return#4 = func_bank1_a::return#0 + // func_bank1_e::@1 + // [69] func_bank1_e::return#0 = func_bank1_a::return#4 + // func_bank1_e::@return + // } + // [70] return + rts +} + // func_bank1_f +// __register(A) char func_bank1_f(char a, char b) +func_bank1_f: { + .const a = '0' + .const b = 7 + // func_bank2_a(a,b) + // [72] call func_bank2_a + // [76] phi from func_bank1_f to func_bank2_a [phi:func_bank1_f->func_bank2_a] + // [76] phi func_bank2_a::b#4 = func_bank1_f::b#0 [phi:func_bank1_f->func_bank2_a#0] -- vbuaa=vbuc1 + lda #b + // [76] phi func_bank2_a::a#4 = func_bank1_f::a#0 [phi:func_bank1_f->func_bank2_a#1] -- call_far_cx16_ram_finalize + ldx #a + jsr $ff6e + .byte func_bank2_a + .byte 2 + // func_bank2_a(a,b) + // [73] func_bank2_a::return#4 = func_bank2_a::return#1 + // func_bank1_f::@1 + // [74] func_bank1_f::return#0 = func_bank2_a::return#4 + // func_bank1_f::@return + // } + // [75] return + rts +} + // func_bank2_a +// __register(A) char func_bank2_a(__register(X) char a, __register(A) char b) +func_bank2_a: { + // a+b + // [77] func_bank2_a::return#1 = func_bank2_a::a#4 + func_bank2_a::b#4 -- vbuaa=vbuxx_plus_vbuaa + stx.z $ff + clc + adc.z $ff + // func_bank2_a::@return + // } + // [78] return + rts +} + // func_bank2_b +// __register(A) char func_bank2_b(__register(X) char a, __register(A) char b) +func_bank2_b: { + // a+b + // [80] func_bank2_b::return#1 = func_bank2_b::a#2 + func_bank2_b::b#2 -- vbuaa=vbuxx_plus_vbuaa + stx.z $ff + clc + adc.z $ff + // func_bank2_b::@return + // } + // [81] return + rts +} + // func_bank2_c +// __register(A) char func_bank2_c(char a, char b) +func_bank2_c: { + .const a = '0' + .const b = 7 + // func_bank1_a(a,b) + // [83] call func_bank1_a + // [50] phi from func_bank2_c to func_bank1_a [phi:func_bank2_c->func_bank1_a] + // [50] phi func_bank1_a::b#4 = func_bank2_c::b#0 [phi:func_bank2_c->func_bank1_a#0] -- vbuaa=vbuc1 + lda #b + // [50] phi func_bank1_a::a#4 = func_bank2_c::a#0 [phi:func_bank2_c->func_bank1_a#1] -- call_far_cx16_ram_finalize + ldx #a + jsr $ff6e + .byte func_bank1_a + .byte 1 + // func_bank1_a(a,b) + // [84] func_bank1_a::return#3 = func_bank1_a::return#0 + // func_bank2_c::@1 + // [85] func_bank2_c::return#0 = func_bank1_a::return#3 + // func_bank2_c::@return + // } + // [86] return + rts +} + // func_bank2_d +// __register(A) char func_bank2_d(char a, char b) +func_bank2_d: { + .const a = '0' + .const b = 7 + // func_bank2_a(a,b) + // [88] call func_bank2_a + // [76] phi from func_bank2_d to func_bank2_a [phi:func_bank2_d->func_bank2_a] + // [76] phi func_bank2_a::b#4 = func_bank2_d::b#0 [phi:func_bank2_d->func_bank2_a#0] -- vbuaa=vbuc1 + lda #b + // [76] phi func_bank2_a::a#4 = func_bank2_d::a#0 [phi:func_bank2_d->func_bank2_a#1] -- vbuxx=vbuc1 + ldx #a + jsr func_bank2_a + // func_bank2_a(a,b) + // [89] func_bank2_a::return#3 = func_bank2_a::return#1 + // func_bank2_d::@1 + // [90] func_bank2_d::return#0 = func_bank2_a::return#3 + // func_bank2_d::@return + // } + // [91] return + rts +} + // func_bank2_e +// __register(A) char func_bank2_e(char a, char b) +func_bank2_e: { + .const a = '0' + .const b = 7 + // func_bank2_b(a,b) + // [93] call func_bank2_b + // [79] phi from func_bank2_e to func_bank2_b [phi:func_bank2_e->func_bank2_b] + // [79] phi func_bank2_b::b#2 = func_bank2_e::b#0 [phi:func_bank2_e->func_bank2_b#0] -- vbuaa=vbuc1 + lda #b + // [79] phi func_bank2_b::a#2 = func_bank2_e::a#0 [phi:func_bank2_e->func_bank2_b#1] -- vbuxx=vbuc1 + ldx #a + jsr func_bank2_b + // func_bank2_b(a,b) + // [94] func_bank2_b::return#0 = func_bank2_b::return#1 + // func_bank2_e::@1 + // [95] func_bank2_e::return#0 = func_bank2_b::return#0 + // func_bank2_e::@return + // } + // [96] return + rts +} + // func_bank2_f +// __register(A) char func_bank2_f(char a, char b) +func_bank2_f: { + .const a = '0' + .const b = 7 + // func_bank1_b(a,b) + // [98] call func_bank1_b + // [53] phi from func_bank2_f to func_bank1_b [phi:func_bank2_f->func_bank1_b] + // [53] phi func_bank1_b::b#2 = func_bank2_f::b#0 [phi:func_bank2_f->func_bank1_b#0] -- vbuaa=vbuc1 + lda #b + // [53] phi func_bank1_b::a#2 = func_bank2_f::a#0 [phi:func_bank2_f->func_bank1_b#1] -- vbuxx=vbuc1 + ldx #a + jsr func_bank1_b + // func_bank1_b(a,b) + // [99] func_bank1_b::return#0 = func_bank1_b::return#1 + // func_bank2_f::@1 + // [100] func_bank2_f::return#0 = func_bank1_b::return#0 + // func_bank2_f::@return + // } + // [101] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-5.sym b/src/test/ref/procedure-callingconvention-phi-bank-5.sym new file mode 100644 index 000000000..c0905901f --- /dev/null +++ b/src/test/ref/procedure-callingconvention-phi-bank-5.sym @@ -0,0 +1,171 @@ +__constant char * const SCREEN = (char *) 1024 +__bank(bank) char func_bank1_a(char a , char b) +char func_bank1_a::a +char func_bank1_a::a#4 // reg byte x 101.0 +char func_bank1_a::b +char func_bank1_a::b#4 // reg byte a 101.0 +char func_bank1_a::return +char func_bank1_a::return#0 // reg byte a 22.66666666666666 +char func_bank1_a::return#10 // reg byte a 4.0 +char func_bank1_a::return#2 // reg byte a 22.0 +char func_bank1_a::return#3 // reg byte a 22.0 +char func_bank1_a::return#4 // reg byte a 22.0 +char func_bank1_b(char a , char b) +char func_bank1_b::a +char func_bank1_b::a#2 // reg byte x 101.0 +char func_bank1_b::b +char func_bank1_b::b#2 // reg byte a 101.0 +char func_bank1_b::return +char func_bank1_b::return#0 // reg byte a 22.0 +char func_bank1_b::return#1 // reg byte a 28.5 +char func_bank1_b::return#3 // reg byte a 4.0 +__bank(bank) char func_bank1_c(char a , char b) +char func_bank1_c::a +__constant char func_bank1_c::a#0 = '0' // a +char func_bank1_c::b +__constant char func_bank1_c::b#0 = 7 // b +char func_bank1_c::return +char func_bank1_c::return#0 // reg byte a 4.333333333333333 +char func_bank1_c::return#2 // reg byte a 4.0 +__bank(bank) char func_bank1_d(char a , char b) +char func_bank1_d::a +__constant char func_bank1_d::a#0 = '0' // a +char func_bank1_d::b +__constant char func_bank1_d::b#0 = 7 // b +char func_bank1_d::return +char func_bank1_d::return#0 // reg byte a 4.333333333333333 +char func_bank1_d::return#2 // reg byte a 4.0 +char func_bank1_e(char a , char b) +char func_bank1_e::a +__constant char func_bank1_e::a#0 = '0' // a +char func_bank1_e::b +__constant char func_bank1_e::b#0 = 7 // b +char func_bank1_e::return +char func_bank1_e::return#0 // reg byte a 4.333333333333333 +char func_bank1_e::return#2 // reg byte a 4.0 +char func_bank1_f(char a , char b) +char func_bank1_f::a +__constant char func_bank1_f::a#0 = '0' // a +char func_bank1_f::b +__constant char func_bank1_f::b#0 = 7 // b +char func_bank1_f::return +char func_bank1_f::return#0 // reg byte a 4.333333333333333 +char func_bank1_f::return#2 // reg byte a 4.0 +__bank(bank) char func_bank2_a(char a , char b) +char func_bank2_a::a +char func_bank2_a::a#4 // reg byte x 101.0 +char func_bank2_a::b +char func_bank2_a::b#4 // reg byte a 101.0 +char func_bank2_a::return +char func_bank2_a::return#0 // reg byte a 22.0 +char func_bank2_a::return#1 // reg byte a 22.666666666666664 +char func_bank2_a::return#10 // reg byte a 4.0 +char func_bank2_a::return#3 // reg byte a 22.0 +char func_bank2_a::return#4 // reg byte a 22.0 +char func_bank2_b(char a , char b) +char func_bank2_b::a +char func_bank2_b::a#2 // reg byte x 101.0 +char func_bank2_b::b +char func_bank2_b::b#2 // reg byte a 101.0 +char func_bank2_b::return +char func_bank2_b::return#0 // reg byte a 22.0 +char func_bank2_b::return#1 // reg byte a 28.5 +char func_bank2_b::return#3 // reg byte a 4.0 +__bank(bank) char func_bank2_c(char a , char b) +char func_bank2_c::a +__constant char func_bank2_c::a#0 = '0' // a +char func_bank2_c::b +__constant char func_bank2_c::b#0 = 7 // b +char func_bank2_c::return +char func_bank2_c::return#0 // reg byte a 4.333333333333333 +char func_bank2_c::return#2 // reg byte a 4.0 +__bank(bank) char func_bank2_d(char a , char b) +char func_bank2_d::a +__constant char func_bank2_d::a#0 = '0' // a +char func_bank2_d::b +__constant char func_bank2_d::b#0 = 7 // b +char func_bank2_d::return +char func_bank2_d::return#0 // reg byte a 4.333333333333333 +char func_bank2_d::return#2 // reg byte a 4.0 +__bank(bank) char func_bank2_e(char a , char b) +char func_bank2_e::a +__constant char func_bank2_e::a#0 = '0' // a +char func_bank2_e::b +__constant char func_bank2_e::b#0 = 7 // b +char func_bank2_e::return +char func_bank2_e::return#0 // reg byte a 4.333333333333333 +char func_bank2_e::return#2 // reg byte a 4.0 +__bank(bank) char func_bank2_f(char a , char b) +char func_bank2_f::a +__constant char func_bank2_f::a#0 = '0' // a +char func_bank2_f::b +__constant char func_bank2_f::b#0 = 7 // b +char func_bank2_f::return +char func_bank2_f::return#0 // reg byte a 4.333333333333333 +char func_bank2_f::return#2 // reg byte a 4.0 +void main() +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 +char main::$10 // reg byte a 4.0 +char main::$11 // reg byte a 4.0 +char main::$2 // reg byte a 4.0 +char main::$3 // reg byte a 4.0 +char main::$4 // reg byte a 4.0 +char main::$5 // reg byte a 4.0 +char main::$6 // reg byte a 4.0 +char main::$7 // reg byte a 4.0 +char main::$8 // reg byte a 4.0 +char main::$9 // reg byte a 4.0 + +reg byte x [ func_bank1_a::a#4 ] +reg byte a [ func_bank1_a::b#4 ] +reg byte x [ func_bank1_b::a#2 ] +reg byte a [ func_bank1_b::b#2 ] +reg byte x [ func_bank2_a::a#4 ] +reg byte a [ func_bank2_a::b#4 ] +reg byte x [ func_bank2_b::a#2 ] +reg byte a [ func_bank2_b::b#2 ] +reg byte a [ func_bank1_a::return#10 ] +reg byte a [ main::$0 ] +reg byte a [ func_bank1_b::return#3 ] +reg byte a [ main::$1 ] +reg byte a [ func_bank1_c::return#2 ] +reg byte a [ main::$2 ] +reg byte a [ func_bank1_d::return#2 ] +reg byte a [ main::$3 ] +reg byte a [ func_bank1_e::return#2 ] +reg byte a [ main::$4 ] +reg byte a [ func_bank1_f::return#2 ] +reg byte a [ main::$5 ] +reg byte a [ func_bank2_a::return#10 ] +reg byte a [ main::$6 ] +reg byte a [ func_bank2_b::return#3 ] +reg byte a [ main::$7 ] +reg byte a [ func_bank2_c::return#2 ] +reg byte a [ main::$8 ] +reg byte a [ func_bank2_d::return#2 ] +reg byte a [ main::$9 ] +reg byte a [ func_bank2_e::return#2 ] +reg byte a [ main::$10 ] +reg byte a [ func_bank2_f::return#2 ] +reg byte a [ main::$11 ] +reg byte a [ func_bank1_a::return#0 ] +reg byte a [ func_bank1_b::return#1 ] +reg byte a [ func_bank1_a::return#2 ] +reg byte a [ func_bank1_c::return#0 ] +reg byte a [ func_bank2_a::return#0 ] +reg byte a [ func_bank1_d::return#0 ] +reg byte a [ func_bank1_a::return#4 ] +reg byte a [ func_bank1_e::return#0 ] +reg byte a [ func_bank2_a::return#4 ] +reg byte a [ func_bank1_f::return#0 ] +reg byte a [ func_bank2_a::return#1 ] +reg byte a [ func_bank2_b::return#1 ] +reg byte a [ func_bank1_a::return#3 ] +reg byte a [ func_bank2_c::return#0 ] +reg byte a [ func_bank2_a::return#3 ] +reg byte a [ func_bank2_d::return#0 ] +reg byte a [ func_bank2_b::return#0 ] +reg byte a [ func_bank2_e::return#0 ] +reg byte a [ func_bank1_b::return#0 ] +reg byte a [ func_bank2_f::return#0 ] diff --git a/src/test/ref/procedure-callingconvention-stack-bank-0.asm b/src/test/ref/procedure-callingconvention-stack-bank-0.asm new file mode 100644 index 000000000..ec687e5fb --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-0.asm @@ -0,0 +1,45 @@ +// Test a procedure with calling convention stack +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment stage +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // return a+b; + clc + adc.z a + // } + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + rts +} +main: { + // plus('0', 7) + lda #'0' + pha + lda #7 + pha + jsr plus + pla + pla + // SCREEN[0] = plus('0', 7) + sta SCREEN + // } + rts +} diff --git a/src/test/ref/procedure-callingconvention-stack-bank-0.cfg b/src/test/ref/procedure-callingconvention-stack-bank-0.cfg new file mode 100644 index 000000000..e23f2647e --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-0.cfg @@ -0,0 +1,24 @@ + +__stackcall char plus(char a , char b) +plus: scope:[plus] from + [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + [2] plus::return#0 = plus::a#0 + plus::b#0 + to:plus::@return +plus::@return: scope:[plus] from plus + [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 + [4] return + to:@return + +void main() +main: scope:[main] from + [5] stackpush(char) = '0' + [6] stackpush(char) = 7 + [7] callexecute plus + sideeffect stackpullpadding(1) + [9] main::$0 = stackpull(char) + [10] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [11] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-bank-0.log b/src/test/ref/procedure-callingconvention-stack-bank-0.log new file mode 100644 index 000000000..de9b614ed --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-0.log @@ -0,0 +1,350 @@ +Loading link script "procedure-callingconvention-stack-bank.ld" +Adding parameter assignment in __stackcall procedure plus::b = param(plus::b) +Adding parameter assignment in __stackcall procedure plus::a = param(plus::a) +Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call plus('0', 7) +Calling convention STACK_CALL replacing param(plus::a) with stackidx(char,plus::OFFSET_STACK_A) +Calling convention STACK_CALL replacing param(plus::b) with stackidx(char,plus::OFFSET_STACK_B) +Calling convention STACK_CALL adding stack return stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return +Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) +Calling convention STACK_CALL adding stack push stackpush(char) = '0' +Calling convention STACK_CALL adding stack push stackpush(char) = 7 + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + stackpush(char) = '0' + stackpush(char) = 7 + callexecute plus + sideeffect stackpullpadding(1) + main::$0 = stackpull(char) + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main + return + to:@return + +__stackcall char plus(char a , char b) +plus: scope:[plus] from + plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + plus::$0 = plus::a#0 + plus::b#0 + plus::return#0 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus + plus::return#1 = phi( plus/plus::return#0 ) + stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#1 + 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 +__constant char * const SCREEN = (char *)$400 +__constant unsigned int STACK_BASE = $103 +void __start() +void main() +char main::$0 +__stackcall char plus(char a , char b) +char plus::$0 +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 +char plus::b +char plus::b#0 +char plus::return +char plus::return#0 +char plus::return#1 + +Adding number conversion cast (unumber) 7 in stackpush(char) = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast stackpush(char) = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::$0 plus::return#1 +Successful SSA optimization Pass2AliasElimination +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +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 +Finalized unsigned number type (char) 1 +Successful SSA optimization PassNFinalizeNumberTypeConversions +CALL GRAPH +Calls in [main] to plus:7 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes + +FINAL CONTROL FLOW GRAPH + +__stackcall char plus(char a , char b) +plus: scope:[plus] from + [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + [2] plus::return#0 = plus::a#0 + plus::b#0 + to:plus::@return +plus::@return: scope:[plus] from plus + [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 + [4] return + to:@return + +void main() +main: scope:[main] from + [5] stackpush(char) = '0' + [6] stackpush(char) = 7 + [7] callexecute plus + sideeffect stackpullpadding(1) + [9] main::$0 = stackpull(char) + [10] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [11] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +char main::$0 // 4.0 +__stackcall char plus(char a , char b) +char plus::a +char plus::a#0 // 11.0 +char plus::b +char plus::b#0 // 22.0 +char plus::return +char plus::return#0 // 22.0 + +Initial phi equivalence classes +Added variable plus::a#0 to live range equivalence class [ plus::a#0 ] +Added variable plus::b#0 to live range equivalence class [ plus::b#0 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Complete equivalence classes +[ plus::a#0 ] +[ plus::b#0 ] +[ plus::return#0 ] +[ main::$0 ] +Allocated zp[1]:2 [ plus::b#0 ] +Allocated zp[1]:3 [ plus::return#0 ] +Allocated zp[1]:4 [ plus::a#0 ] +Allocated zp[1]:5 [ main::$0 ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x +Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte a as potential for zp[1]:4 [ plus::a#0 ] +Removing always clobbered register reg byte x as potential for zp[1]:4 [ plus::a#0 ] +Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a +Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x +Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a +Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a +Statement sideeffect stackpullpadding(1) always clobbers reg byte a +Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a +Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x +Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x +Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a +Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x +Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a +Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a +Statement sideeffect stackpullpadding(1) always clobbers reg byte a +Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a +Potential registers zp[1]:4 [ plus::a#0 ] : zp[1]:4 , reg byte y , +Potential registers zp[1]:2 [ plus::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ plus::return#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ main::$0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [plus] 22: zp[1]:2 [ plus::b#0 ] 22: zp[1]:3 [ plus::return#0 ] 11: zp[1]:4 [ plus::a#0 ] +Uplift Scope [main] 4: zp[1]:5 [ main::$0 ] +Uplift Scope [] + +Uplifting [plus] best 79 combination reg byte a [ plus::b#0 ] reg byte a [ plus::return#0 ] zp[1]:4 [ plus::a#0 ] +Uplifting [main] best 73 combination reg byte a [ main::$0 ] +Uplifting [] best 73 combination +Attempting to uplift remaining variables inzp[1]:4 [ plus::a#0 ] +Uplifting [plus] best 73 combination zp[1]:4 [ plus::a#0 ] +Allocated (was zp[1]:4) zp[1]:2 [ plus::a#0 ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment stage + // plus +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + jmp __breturn + // plus::@return + __breturn: + // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + // [4] return + rts +} + // main +main: { + // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 + lda #'0' + pha + // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 + lda #7 + pha + // [7] callexecute plus -- call_vprc1 + jsr plus + // sideeffect stackpullpadding(1) -- _stackpullpadding_1 + pla + // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [11] 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 +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void main() +char main::$0 // reg byte a 4.0 +__stackcall char plus(char a , char b) +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 // a zp[1]:2 11.0 +char plus::b +char plus::b#0 // reg byte a 22.0 +char plus::return +char plus::return#0 // reg byte a 22.0 + +zp[1]:2 [ plus::a#0 ] +reg byte a [ plus::b#0 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] + + +FINAL ASSEMBLER +Score: 67 + + // File Comments +// Test a procedure with calling convention stack + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment stage + // plus +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // return a+b; + // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + // plus::@return + // } + // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + // [4] return + rts +} + // main +main: { + // plus('0', 7) + // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 + lda #'0' + pha + // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 + lda #7 + pha + // [7] callexecute plus -- call_vprc1 + jsr plus + // sideeffect stackpullpadding(1) -- _stackpullpadding_1 + pla + // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // SCREEN[0] = plus('0', 7) + // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + // main::@return + // } + // [11] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-stack-bank-0.sym b/src/test/ref/procedure-callingconvention-stack-bank-0.sym new file mode 100644 index 000000000..30874c0fd --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-0.sym @@ -0,0 +1,19 @@ +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void main() +char main::$0 // reg byte a 4.0 +__stackcall char plus(char a , char b) +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 // a zp[1]:2 11.0 +char plus::b +char plus::b#0 // reg byte a 22.0 +char plus::return +char plus::return#0 // reg byte a 22.0 + +zp[1]:2 [ plus::a#0 ] +reg byte a [ plus::b#0 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] diff --git a/src/test/ref/procedure-callingconvention-stack-bank-1.asm b/src/test/ref/procedure-callingconvention-stack-bank-1.asm new file mode 100644 index 000000000..ec687e5fb --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-1.asm @@ -0,0 +1,45 @@ +// Test a procedure with calling convention stack +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment stage +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // return a+b; + clc + adc.z a + // } + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + rts +} +main: { + // plus('0', 7) + lda #'0' + pha + lda #7 + pha + jsr plus + pla + pla + // SCREEN[0] = plus('0', 7) + sta SCREEN + // } + rts +} diff --git a/src/test/ref/procedure-callingconvention-stack-bank-1.cfg b/src/test/ref/procedure-callingconvention-stack-bank-1.cfg new file mode 100644 index 000000000..e23f2647e --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-1.cfg @@ -0,0 +1,24 @@ + +__stackcall char plus(char a , char b) +plus: scope:[plus] from + [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + [2] plus::return#0 = plus::a#0 + plus::b#0 + to:plus::@return +plus::@return: scope:[plus] from plus + [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 + [4] return + to:@return + +void main() +main: scope:[main] from + [5] stackpush(char) = '0' + [6] stackpush(char) = 7 + [7] callexecute plus + sideeffect stackpullpadding(1) + [9] main::$0 = stackpull(char) + [10] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [11] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-bank-1.log b/src/test/ref/procedure-callingconvention-stack-bank-1.log new file mode 100644 index 000000000..de9b614ed --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-1.log @@ -0,0 +1,350 @@ +Loading link script "procedure-callingconvention-stack-bank.ld" +Adding parameter assignment in __stackcall procedure plus::b = param(plus::b) +Adding parameter assignment in __stackcall procedure plus::a = param(plus::a) +Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call plus('0', 7) +Calling convention STACK_CALL replacing param(plus::a) with stackidx(char,plus::OFFSET_STACK_A) +Calling convention STACK_CALL replacing param(plus::b) with stackidx(char,plus::OFFSET_STACK_B) +Calling convention STACK_CALL adding stack return stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return +Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) +Calling convention STACK_CALL adding stack push stackpush(char) = '0' +Calling convention STACK_CALL adding stack push stackpush(char) = 7 + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + stackpush(char) = '0' + stackpush(char) = 7 + callexecute plus + sideeffect stackpullpadding(1) + main::$0 = stackpull(char) + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main + return + to:@return + +__stackcall char plus(char a , char b) +plus: scope:[plus] from + plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + plus::$0 = plus::a#0 + plus::b#0 + plus::return#0 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus + plus::return#1 = phi( plus/plus::return#0 ) + stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#1 + 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 +__constant char * const SCREEN = (char *)$400 +__constant unsigned int STACK_BASE = $103 +void __start() +void main() +char main::$0 +__stackcall char plus(char a , char b) +char plus::$0 +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 +char plus::b +char plus::b#0 +char plus::return +char plus::return#0 +char plus::return#1 + +Adding number conversion cast (unumber) 7 in stackpush(char) = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast stackpush(char) = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::$0 plus::return#1 +Successful SSA optimization Pass2AliasElimination +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +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 +Finalized unsigned number type (char) 1 +Successful SSA optimization PassNFinalizeNumberTypeConversions +CALL GRAPH +Calls in [main] to plus:7 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes + +FINAL CONTROL FLOW GRAPH + +__stackcall char plus(char a , char b) +plus: scope:[plus] from + [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + [2] plus::return#0 = plus::a#0 + plus::b#0 + to:plus::@return +plus::@return: scope:[plus] from plus + [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 + [4] return + to:@return + +void main() +main: scope:[main] from + [5] stackpush(char) = '0' + [6] stackpush(char) = 7 + [7] callexecute plus + sideeffect stackpullpadding(1) + [9] main::$0 = stackpull(char) + [10] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [11] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +char main::$0 // 4.0 +__stackcall char plus(char a , char b) +char plus::a +char plus::a#0 // 11.0 +char plus::b +char plus::b#0 // 22.0 +char plus::return +char plus::return#0 // 22.0 + +Initial phi equivalence classes +Added variable plus::a#0 to live range equivalence class [ plus::a#0 ] +Added variable plus::b#0 to live range equivalence class [ plus::b#0 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Complete equivalence classes +[ plus::a#0 ] +[ plus::b#0 ] +[ plus::return#0 ] +[ main::$0 ] +Allocated zp[1]:2 [ plus::b#0 ] +Allocated zp[1]:3 [ plus::return#0 ] +Allocated zp[1]:4 [ plus::a#0 ] +Allocated zp[1]:5 [ main::$0 ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x +Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte a as potential for zp[1]:4 [ plus::a#0 ] +Removing always clobbered register reg byte x as potential for zp[1]:4 [ plus::a#0 ] +Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a +Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x +Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a +Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a +Statement sideeffect stackpullpadding(1) always clobbers reg byte a +Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a +Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x +Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x +Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a +Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x +Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a +Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a +Statement sideeffect stackpullpadding(1) always clobbers reg byte a +Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a +Potential registers zp[1]:4 [ plus::a#0 ] : zp[1]:4 , reg byte y , +Potential registers zp[1]:2 [ plus::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ plus::return#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ main::$0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [plus] 22: zp[1]:2 [ plus::b#0 ] 22: zp[1]:3 [ plus::return#0 ] 11: zp[1]:4 [ plus::a#0 ] +Uplift Scope [main] 4: zp[1]:5 [ main::$0 ] +Uplift Scope [] + +Uplifting [plus] best 79 combination reg byte a [ plus::b#0 ] reg byte a [ plus::return#0 ] zp[1]:4 [ plus::a#0 ] +Uplifting [main] best 73 combination reg byte a [ main::$0 ] +Uplifting [] best 73 combination +Attempting to uplift remaining variables inzp[1]:4 [ plus::a#0 ] +Uplifting [plus] best 73 combination zp[1]:4 [ plus::a#0 ] +Allocated (was zp[1]:4) zp[1]:2 [ plus::a#0 ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment stage + // plus +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + jmp __breturn + // plus::@return + __breturn: + // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + // [4] return + rts +} + // main +main: { + // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 + lda #'0' + pha + // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 + lda #7 + pha + // [7] callexecute plus -- call_vprc1 + jsr plus + // sideeffect stackpullpadding(1) -- _stackpullpadding_1 + pla + // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [11] 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 +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void main() +char main::$0 // reg byte a 4.0 +__stackcall char plus(char a , char b) +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 // a zp[1]:2 11.0 +char plus::b +char plus::b#0 // reg byte a 22.0 +char plus::return +char plus::return#0 // reg byte a 22.0 + +zp[1]:2 [ plus::a#0 ] +reg byte a [ plus::b#0 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] + + +FINAL ASSEMBLER +Score: 67 + + // File Comments +// Test a procedure with calling convention stack + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment stage + // plus +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // return a+b; + // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + // plus::@return + // } + // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + // [4] return + rts +} + // main +main: { + // plus('0', 7) + // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 + lda #'0' + pha + // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 + lda #7 + pha + // [7] callexecute plus -- call_vprc1 + jsr plus + // sideeffect stackpullpadding(1) -- _stackpullpadding_1 + pla + // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // SCREEN[0] = plus('0', 7) + // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + // main::@return + // } + // [11] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-stack-bank-1.sym b/src/test/ref/procedure-callingconvention-stack-bank-1.sym new file mode 100644 index 000000000..30874c0fd --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-1.sym @@ -0,0 +1,19 @@ +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void main() +char main::$0 // reg byte a 4.0 +__stackcall char plus(char a , char b) +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 // a zp[1]:2 11.0 +char plus::b +char plus::b#0 // reg byte a 22.0 +char plus::return +char plus::return#0 // reg byte a 22.0 + +zp[1]:2 [ plus::a#0 ] +reg byte a [ plus::b#0 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] diff --git a/src/test/ref/procedure-callingconvention-stack-bank-2.asm b/src/test/ref/procedure-callingconvention-stack-bank-2.asm new file mode 100644 index 000000000..10a9f97c1 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-2.asm @@ -0,0 +1,74 @@ +// Test a procedure with calling convention stack +// A slightly more complex call +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + .const STACK_BASE = $103 + .label SCREEN = $400 + .label i = 4 +.segment Code +__start: { + // char i = 0 + lda #0 + sta.z i + jsr main + rts +} +.segment stage +// this should give a pragma error during compile, as test is not declared yet. +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // i++; + inc.z i + // return a+b; + clc + adc.z a + // } + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + rts +} +main: { + .label a = 3 + lda #0 + sta.z a + __b1: + // char v = a+1 + ldx.z a + inx + // char w = plus('0', v) + lda #'0' + pha + txa + pha + jsr plus + pla + pla + // w+a + clc + adc.z a + // SCREEN[i] = w+a + ldy.z i + sta SCREEN,y + // for(char a:0..1) + inc.z a + lda #2 + cmp.z a + bne __b1 + // } + rts +} diff --git a/src/test/ref/procedure-callingconvention-stack-bank-2.cfg b/src/test/ref/procedure-callingconvention-stack-bank-2.cfg new file mode 100644 index 000000000..ff4b58982 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-2.cfg @@ -0,0 +1,48 @@ + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] i = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [2] phi() + [3] call main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [4] return + to:@return + +__stackcall char plus(char a , char b) +plus: scope:[plus] from + [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + [7] i = ++ i + [8] plus::return#0 = plus::a#0 + plus::b#0 + to:plus::@return +plus::@return: scope:[plus] from plus + [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 + [10] return + to:@return + +void main() +main: scope:[main] from __start::@1 + [11] phi() + to:main::@1 +main::@1: scope:[main] from main main::@1 + [12] main::a#2 = phi( main/0, main::@1/main::a#1 ) + [13] main::v#0 = main::a#2 + 1 + [14] stackpush(char) = '0' + [15] stackpush(char) = main::v#0 + [16] callexecute plus + sideeffect stackpullpadding(1) + [18] main::w#0 = stackpull(char) + [19] main::$2 = main::w#0 + main::a#2 + [20] SCREEN[i] = main::$2 + [21] main::a#1 = ++ main::a#2 + [22] if(main::a#1!=2) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + [23] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-bank-2.log b/src/test/ref/procedure-callingconvention-stack-bank-2.log new file mode 100644 index 000000000..4a6f3d67b --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-2.log @@ -0,0 +1,595 @@ +Loading link script "procedure-callingconvention-stack-bank.ld" +Converting variable modified inside __stackcall procedure plus() to load/store i +Adding parameter assignment in __stackcall procedure plus::b = param(plus::b) +Adding parameter assignment in __stackcall procedure plus::a = param(plus::a) +Inlined call call __init +Eliminating unused variable with no statement main::$0 +Eliminating unused variable with no statement main::$1 +Calling convention __stackcall adding prepare/execute/finalize for main::w = call plus('0', main::v) +Calling convention STACK_CALL replacing param(plus::a) with stackidx(char,plus::OFFSET_STACK_A) +Calling convention STACK_CALL replacing param(plus::b) with stackidx(char,plus::OFFSET_STACK_B) +Calling convention STACK_CALL adding stack return stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return +Calling convention STACK_CALL adding stack pull main::w = stackpull(char) +Calling convention STACK_CALL adding stack push stackpush(char) = '0' +Calling convention STACK_CALL adding stack push stackpush(char) = main::v + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start::@1 + main::a#0 = 0 + to:main::@1 +main::@1: scope:[main] from main main::@1 + main::a#2 = phi( main/main::a#0, main::@1/main::a#1 ) + main::v#0 = main::a#2 + 1 + stackpush(char) = '0' + stackpush(char) = main::v#0 + callexecute plus + sideeffect stackpullpadding(1) + main::w#0 = stackpull(char) + main::$2 = main::w#0 + main::a#2 + SCREEN[i] = main::$2 + main::a#1 = main::a#2 + rangenext(0,1) + main::$3 = main::a#1 != rangelast(0,1) + if(main::$3) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__stackcall char plus(char a , char b) +plus: scope:[plus] from + plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + i = ++ i + plus::$0 = plus::a#0 + plus::b#0 + plus::return#0 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus + plus::return#1 = phi( plus/plus::return#0 ) + stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#1 + return + to:@return + +void __start() +__start: scope:[__start] from + to:__start::__init1 +__start::__init1: scope:[__start] from __start + i = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + call main + to:__start::@2 +__start::@2: scope:[__start] from __start::@1 + to:__start::@return +__start::@return: scope:[__start] from __start::@2 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +__constant unsigned int STACK_BASE = $103 +void __start() +__loadstore char i +void main() +char main::$2 +bool main::$3 +char main::a +char main::a#0 +char main::a#1 +char main::a#2 +char main::v +char main::v#0 +char main::w +char main::w#0 +__stackcall char plus(char a , char b) +char plus::$0 +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 +char plus::b +char plus::b#0 +char plus::return +char plus::return#0 +char plus::return#1 + +Adding number conversion cast (unumber) 1 in main::v#0 = main::a#2 + 1 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 1 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 1 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::$0 plus::return#1 +Successful SSA optimization Pass2AliasElimination +Simple Condition main::$3 [12] if(main::a#1!=rangelast(0,1)) goto main::@1 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant main::a#0 = 0 +Successful SSA optimization Pass2ConstantIdentification +Resolved ranged next value [10] main::a#1 = ++ main::a#2 to ++ +Resolved ranged comparison value [12] if(main::a#1!=rangelast(0,1)) goto main::@1 to 2 +Adding number conversion cast (unumber) 2 in if(main::a#1!=2) goto main::@1 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant integer cast 2 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 2 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inlining constant with var siblings main::a#0 +Constant inlined main::a#0 = 0 +Successful SSA optimization Pass2ConstantInlining +Finalized unsigned number type (char) 1 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Added new block during phi lifting main::@2(between main::@1 and main::@1) +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of __start::@2 +Adding NOP phi() at start of main +CALL GRAPH +Calls in [__start] to main:3 +Calls in [main] to plus:17 + +Created 1 initial phi equivalence classes +Coalesced [25] main::a#3 = main::a#1 +Coalesced down to 1 phi equivalence classes +Culled Empty Block label __start::@2 +Culled Empty Block label main::@2 +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of main + +FINAL CONTROL FLOW GRAPH + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] i = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [2] phi() + [3] call main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [4] return + to:@return + +__stackcall char plus(char a , char b) +plus: scope:[plus] from + [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) + [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) + [7] i = ++ i + [8] plus::return#0 = plus::a#0 + plus::b#0 + to:plus::@return +plus::@return: scope:[plus] from plus + [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 + [10] return + to:@return + +void main() +main: scope:[main] from __start::@1 + [11] phi() + to:main::@1 +main::@1: scope:[main] from main main::@1 + [12] main::a#2 = phi( main/0, main::@1/main::a#1 ) + [13] main::v#0 = main::a#2 + 1 + [14] stackpush(char) = '0' + [15] stackpush(char) = main::v#0 + [16] callexecute plus + sideeffect stackpullpadding(1) + [18] main::w#0 = stackpull(char) + [19] main::$2 = main::w#0 + main::a#2 + [20] SCREEN[i] = main::$2 + [21] main::a#1 = ++ main::a#2 + [22] if(main::a#1!=2) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + [23] return + to:@return + +null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope plus + +VARIABLE REGISTER WEIGHTS +void __start() +__loadstore char i // 105.24999999999999 +void main() +char main::$2 // 202.0 +char main::a +char main::a#1 // 151.5 +char main::a#2 // 44.888888888888886 +char main::v +char main::v#0 // 101.0 +char main::w +char main::w#0 // 202.0 +__stackcall char plus(char a , char b) +char plus::a +char plus::a#0 // 667.3333333333334 +char plus::b +char plus::b#0 // 1001.0 +char plus::return +char plus::return#0 // 2002.0 + +Initial phi equivalence classes +[ main::a#2 main::a#1 ] +Added variable i to live range equivalence class [ i ] +Added variable plus::a#0 to live range equivalence class [ plus::a#0 ] +Added variable plus::b#0 to live range equivalence class [ plus::b#0 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::v#0 to live range equivalence class [ main::v#0 ] +Added variable main::w#0 to live range equivalence class [ main::w#0 ] +Added variable main::$2 to live range equivalence class [ main::$2 ] +Complete equivalence classes +[ main::a#2 main::a#1 ] +[ i ] +[ plus::a#0 ] +[ plus::b#0 ] +[ plus::return#0 ] +[ main::v#0 ] +[ main::w#0 ] +[ main::$2 ] +Allocated zp[1]:2 [ plus::return#0 ] +Allocated zp[1]:3 [ plus::b#0 ] +Allocated zp[1]:4 [ plus::a#0 ] +Allocated zp[1]:5 [ main::w#0 ] +Allocated zp[1]:6 [ main::$2 ] +Allocated zp[1]:7 [ main::a#2 main::a#1 ] +Allocated zp[1]:8 [ i ] +Allocated zp[1]:9 [ main::v#0 ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] i = 0 [ i ] ( [ i ] { } ) always clobbers reg byte a +Statement [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ i plus::a#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 ] { } ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::a#2 main::a#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:7 [ main::a#2 main::a#1 ] +Statement [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ i plus::a#0 plus::b#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte a as potential for zp[1]:4 [ plus::a#0 ] +Removing always clobbered register reg byte x as potential for zp[1]:4 [ plus::a#0 ] +Statement [8] plus::return#0 = plus::a#0 + plus::b#0 [ i plus::return#0 ] ( main:3::plus:16 [ main::a#2 i plus::return#0 ] { } ) always clobbers reg byte a +Statement [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ i ] ( main:3::plus:16 [ main::a#2 i ] { } ) always clobbers reg byte x +Statement [14] stackpush(char) = '0' [ i main::a#2 main::v#0 ] ( main:3 [ i main::a#2 main::v#0 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:9 [ main::v#0 ] +Statement [15] stackpush(char) = main::v#0 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte a +Statement sideeffect stackpullpadding(1) always clobbers reg byte a +Statement [18] main::w#0 = stackpull(char) [ i main::a#2 main::w#0 ] ( main:3 [ i main::a#2 main::w#0 ] { } ) always clobbers reg byte a +Statement [19] main::$2 = main::w#0 + main::a#2 [ i main::a#2 main::$2 ] ( main:3 [ i main::a#2 main::$2 ] { } ) always clobbers reg byte a +Statement [20] SCREEN[i] = main::$2 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:7 [ main::a#2 main::a#1 ] +Statement [22] if(main::a#1!=2) goto main::@1 [ i main::a#1 ] ( main:3 [ i main::a#1 ] { } ) always clobbers reg byte a +Statement [1] i = 0 [ i ] ( [ i ] { } ) always clobbers reg byte a +Statement [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ i plus::a#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 ] { } ) always clobbers reg byte a reg byte x +Statement [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ i plus::a#0 plus::b#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x +Statement [8] plus::return#0 = plus::a#0 + plus::b#0 [ i plus::return#0 ] ( main:3::plus:16 [ main::a#2 i plus::return#0 ] { } ) always clobbers reg byte a +Statement [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ i ] ( main:3::plus:16 [ main::a#2 i ] { } ) always clobbers reg byte x +Statement [14] stackpush(char) = '0' [ i main::a#2 main::v#0 ] ( main:3 [ i main::a#2 main::v#0 ] { } ) always clobbers reg byte a +Statement [15] stackpush(char) = main::v#0 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte a +Statement sideeffect stackpullpadding(1) always clobbers reg byte a +Statement [18] main::w#0 = stackpull(char) [ i main::a#2 main::w#0 ] ( main:3 [ i main::a#2 main::w#0 ] { } ) always clobbers reg byte a +Statement [19] main::$2 = main::w#0 + main::a#2 [ i main::a#2 main::$2 ] ( main:3 [ i main::a#2 main::$2 ] { } ) always clobbers reg byte a +Statement [20] SCREEN[i] = main::$2 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte y +Statement [22] if(main::a#1!=2) goto main::@1 [ i main::a#1 ] ( main:3 [ i main::a#1 ] { } ) always clobbers reg byte a +Potential registers zp[1]:7 [ main::a#2 main::a#1 ] : zp[1]:7 , +Potential registers zp[1]:8 [ i ] : zp[1]:8 , +Potential registers zp[1]:4 [ plus::a#0 ] : zp[1]:4 , reg byte y , +Potential registers zp[1]:3 [ plus::b#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ plus::return#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ main::v#0 ] : zp[1]:9 , reg byte x , reg byte y , +Potential registers zp[1]:5 [ main::w#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:6 [ main::$2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [plus] 2,002: zp[1]:2 [ plus::return#0 ] 1,001: zp[1]:3 [ plus::b#0 ] 667.33: zp[1]:4 [ plus::a#0 ] +Uplift Scope [main] 202: zp[1]:5 [ main::w#0 ] 202: zp[1]:6 [ main::$2 ] 196.39: zp[1]:7 [ main::a#2 main::a#1 ] 101: zp[1]:9 [ main::v#0 ] +Uplift Scope [] 105.25: zp[1]:8 [ i ] +Uplift Scope [__start] + +Uplifting [plus] best 945 combination reg byte a [ plus::return#0 ] reg byte a [ plus::b#0 ] zp[1]:4 [ plus::a#0 ] +Uplifting [main] best 785 combination reg byte a [ main::w#0 ] reg byte a [ main::$2 ] zp[1]:7 [ main::a#2 main::a#1 ] reg byte x [ main::v#0 ] +Uplifting [] best 785 combination zp[1]:8 [ i ] +Uplifting [__start] best 785 combination +Attempting to uplift remaining variables inzp[1]:4 [ plus::a#0 ] +Uplifting [plus] best 785 combination zp[1]:4 [ plus::a#0 ] +Attempting to uplift remaining variables inzp[1]:7 [ main::a#2 main::a#1 ] +Uplifting [main] best 785 combination zp[1]:7 [ main::a#2 main::a#1 ] +Attempting to uplift remaining variables inzp[1]:8 [ i ] +Uplifting [] best 785 combination zp[1]:8 [ i ] +Allocated (was zp[1]:4) zp[1]:2 [ plus::a#0 ] +Allocated (was zp[1]:7) zp[1]:3 [ main::a#2 main::a#1 ] +Allocated (was zp[1]:8) zp[1]:4 [ i ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack +// A slightly more complex call + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 + .label i = 4 +.segment Code + // __start +__start: { + jmp __init1 + // __start::__init1 + __init1: + // [1] i = 0 -- vbuz1=vbuc1 + lda #0 + sta.z i + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + __b1_from___init1: + jmp __b1 + // __start::@1 + __b1: + // [3] call main + // [11] phi from __start::@1 to main [phi:__start::@1->main] + main_from___b1: + jsr main + jmp __breturn + // __start::@return + __breturn: + // [4] return + rts +} +.segment stage + // plus +// this should give a pragma error during compile, as test is not declared yet. +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + // [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + // [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // [7] i = ++ i -- vbuz1=_inc_vbuz1 + inc.z i + // [8] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + jmp __breturn + // plus::@return + __breturn: + // [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + // [10] return + rts +} + // main +main: { + .label a = 3 + // [12] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + // [12] phi main::a#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z a + jmp __b1 + // [12] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + __b1_from___b1: + // [12] phi main::a#2 = main::a#1 [phi:main::@1->main::@1#0] -- register_copy + jmp __b1 + // main::@1 + __b1: + // [13] main::v#0 = main::a#2 + 1 -- vbuxx=vbuz1_plus_1 + ldx.z a + inx + // [14] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 + lda #'0' + pha + // [15] stackpush(char) = main::v#0 -- _stackpushbyte_=vbuxx + txa + pha + // [16] callexecute plus -- call_vprc1 + jsr plus + // sideeffect stackpullpadding(1) -- _stackpullpadding_1 + pla + // [18] main::w#0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // [19] main::$2 = main::w#0 + main::a#2 -- vbuaa=vbuaa_plus_vbuz1 + clc + adc.z a + // [20] SCREEN[i] = main::$2 -- pbuc1_derefidx_vbuz1=vbuaa + ldy.z i + sta SCREEN,y + // [21] main::a#1 = ++ main::a#2 -- vbuz1=_inc_vbuz1 + inc.z a + // [22] if(main::a#1!=2) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #2 + cmp.z a + bne __b1_from___b1 + jmp __breturn + // main::@return + __breturn: + // [23] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __init1 +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Replacing label __b1_from___b1 with __b1 +Removing instruction __b1_from___init1: +Removing instruction main_from___b1: +Removing instruction __b1_from___b1: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction __init1: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __b1_from_main: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Removing instruction jmp __b1 +Succesful ASM optimization Pass5NextJumpElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void __start() +__loadstore char i // zp[1]:4 105.24999999999999 +void main() +char main::$2 // reg byte a 202.0 +char main::a +char main::a#1 // a zp[1]:3 151.5 +char main::a#2 // a zp[1]:3 44.888888888888886 +char main::v +char main::v#0 // reg byte x 101.0 +char main::w +char main::w#0 // reg byte a 202.0 +__stackcall char plus(char a , char b) +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 // a zp[1]:2 667.3333333333334 +char plus::b +char plus::b#0 // reg byte a 1001.0 +char plus::return +char plus::return#0 // reg byte a 2002.0 + +zp[1]:3 [ main::a#2 main::a#1 ] +zp[1]:4 [ i ] +zp[1]:2 [ plus::a#0 ] +reg byte a [ plus::b#0 ] +reg byte a [ plus::return#0 ] +reg byte x [ main::v#0 ] +reg byte a [ main::w#0 ] +reg byte a [ main::$2 ] + + +FINAL ASSEMBLER +Score: 656 + + // File Comments +// Test a procedure with calling convention stack +// A slightly more complex call + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 + .label i = 4 +.segment Code + // __start +__start: { + // __start::__init1 + // char i = 0 + // [1] i = 0 -- vbuz1=vbuc1 + lda #0 + sta.z i + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // __start::@1 + // [3] call main + // [11] phi from __start::@1 to main [phi:__start::@1->main] + jsr main + // __start::@return + // [4] return + rts +} +.segment stage + // plus +// this should give a pragma error during compile, as test is not declared yet. +// __register(A) char plus(__zp(2) char a, __register(A) char b) +plus: { + .const OFFSET_STACK_A = 1 + .const OFFSET_STACK_B = 0 + .const OFFSET_STACK_RETURN_1 = 1 + .label a = 2 + // [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_A,x + sta.z a + // [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_B,x + // i++; + // [7] i = ++ i -- vbuz1=_inc_vbuz1 + inc.z i + // return a+b; + // [8] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + // plus::@return + // } + // [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_1,x + // [10] return + rts +} + // main +main: { + .label a = 3 + // [12] phi from main to main::@1 [phi:main->main::@1] + // [12] phi main::a#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z a + // [12] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [12] phi main::a#2 = main::a#1 [phi:main::@1->main::@1#0] -- register_copy + // main::@1 + __b1: + // char v = a+1 + // [13] main::v#0 = main::a#2 + 1 -- vbuxx=vbuz1_plus_1 + ldx.z a + inx + // char w = plus('0', v) + // [14] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 + lda #'0' + pha + // [15] stackpush(char) = main::v#0 -- _stackpushbyte_=vbuxx + txa + pha + // [16] callexecute plus -- call_vprc1 + jsr plus + // sideeffect stackpullpadding(1) -- _stackpullpadding_1 + pla + // [18] main::w#0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // w+a + // [19] main::$2 = main::w#0 + main::a#2 -- vbuaa=vbuaa_plus_vbuz1 + clc + adc.z a + // SCREEN[i] = w+a + // [20] SCREEN[i] = main::$2 -- pbuc1_derefidx_vbuz1=vbuaa + ldy.z i + sta SCREEN,y + // for(char a:0..1) + // [21] main::a#1 = ++ main::a#2 -- vbuz1=_inc_vbuz1 + inc.z a + // [22] if(main::a#1!=2) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #2 + cmp.z a + bne __b1 + // main::@return + // } + // [23] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-stack-bank-2.sym b/src/test/ref/procedure-callingconvention-stack-bank-2.sym new file mode 100644 index 000000000..0e71cf52f --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-2.sym @@ -0,0 +1,32 @@ +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void __start() +__loadstore char i // zp[1]:4 105.24999999999999 +void main() +char main::$2 // reg byte a 202.0 +char main::a +char main::a#1 // a zp[1]:3 151.5 +char main::a#2 // a zp[1]:3 44.888888888888886 +char main::v +char main::v#0 // reg byte x 101.0 +char main::w +char main::w#0 // reg byte a 202.0 +__stackcall char plus(char a , char b) +__constant char plus::OFFSET_STACK_A = 1 +__constant char plus::OFFSET_STACK_B = 0 +__constant char plus::OFFSET_STACK_RETURN_1 = 1 +char plus::a +char plus::a#0 // a zp[1]:2 667.3333333333334 +char plus::b +char plus::b#0 // reg byte a 1001.0 +char plus::return +char plus::return#0 // reg byte a 2002.0 + +zp[1]:3 [ main::a#2 main::a#1 ] +zp[1]:4 [ i ] +zp[1]:2 [ plus::a#0 ] +reg byte a [ plus::b#0 ] +reg byte a [ plus::return#0 ] +reg byte x [ main::v#0 ] +reg byte a [ main::w#0 ] +reg byte a [ main::$2 ] diff --git a/src/test/ref/procedure-callingconvention-stack-bank-3.asm b/src/test/ref/procedure-callingconvention-stack-bank-3.asm new file mode 100644 index 000000000..57944cb6c --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-3.asm @@ -0,0 +1,74 @@ +// Test a procedure with calling convention stack +// Illustrates live range problem with function variable printother::i and global variable val +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + .label SCREEN = $400 + .label val = 2 +.segment Code +__start: { + // char val = 0 + lda #0 + sta.z val + jsr main + rts +} +printother: { + ldx #0 + __b1: + // (SCREEN+40)[i]++; + inc SCREEN+$28,x + // for(char i:0..5) + inx + cpx #6 + bne __b1 + // } + rts +} +incval: { + // val++; + inc.z val + // } + rts +} +printval: { + // SCREEN[0] = val + lda.z val + sta SCREEN + // } + rts +} +ival: { + // incval() + jsr incval + // } + rts +} +pval: { + // printval() + jsr printval + // } + rts +} +.segment stage +main: { + ldy #0 + __b1: + // pval() + jsr pval + // printother() + jsr printother + // ival() + jsr ival + // for(char i:0..5) + iny + cpy #6 + bne __b1 + // } + rts +} diff --git a/src/test/ref/procedure-callingconvention-stack-bank-3.cfg b/src/test/ref/procedure-callingconvention-stack-bank-3.cfg new file mode 100644 index 000000000..01f3d9e0f --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-3.cfg @@ -0,0 +1,79 @@ + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] val = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [2] phi() + [3] callexecute main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [4] return + to:@return + +__stackcall void printother() +printother: scope:[printother] from + [5] phi() + to:printother::@1 +printother::@1: scope:[printother] from printother printother::@1 + [6] printother::i#2 = phi( printother/0, printother::@1/printother::i#1 ) + [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] + [8] printother::i#1 = ++ printother::i#2 + [9] if(printother::i#1!=6) goto printother::@1 + to:printother::@return +printother::@return: scope:[printother] from printother::@1 + [10] return + to:@return + +__stackcall void incval() +incval: scope:[incval] from + [11] val = ++ val + to:incval::@return +incval::@return: scope:[incval] from incval + [12] return + to:@return + +__stackcall void printval() +printval: scope:[printval] from + [13] *SCREEN = val + to:printval::@return +printval::@return: scope:[printval] from printval + [14] return + to:@return + +__stackcall void ival() +ival: scope:[ival] from + [15] phi() + [16] callexecute incval + to:ival::@return +ival::@return: scope:[ival] from ival + [17] return + to:@return + +__stackcall void pval() +pval: scope:[pval] from + [18] phi() + [19] callexecute printval + to:pval::@return +pval::@return: scope:[pval] from pval + [20] return + to:@return + +__stackcall void main() +main: scope:[main] from + [21] phi() + to:main::@1 +main::@1: scope:[main] from main main::@1 + [22] main::i#2 = phi( main/0, main::@1/main::i#1 ) + [23] callexecute pval + [24] callexecute printother + [25] callexecute ival + [26] main::i#1 = ++ main::i#2 + [27] if(main::i#1!=6) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + [28] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-bank-3.log b/src/test/ref/procedure-callingconvention-stack-bank-3.log new file mode 100644 index 000000000..6c840b6f9 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-3.log @@ -0,0 +1,644 @@ +Loading link script "procedure-callingconvention-stack-bank.ld" +Converting variable modified inside __stackcall procedure main() to load/store val +Inlined call call __init +Calling convention __stackcall adding prepare/execute/finalize for call pval +Calling convention __stackcall adding prepare/execute/finalize for call printother +Calling convention __stackcall adding prepare/execute/finalize for call ival +Calling convention __stackcall adding prepare/execute/finalize for call printval +Calling convention __stackcall adding prepare/execute/finalize for call incval +Calling convention __stackcall adding prepare/execute/finalize for call main + +CONTROL FLOW GRAPH SSA + +__stackcall void main() +main: scope:[main] from + main::i#0 = 0 + to:main::@1 +main::@1: scope:[main] from main main::@1 + main::i#2 = phi( main/main::i#0, main::@1/main::i#1 ) + callexecute pval + callexecute printother + callexecute ival + main::i#1 = main::i#2 + rangenext(0,5) + main::$3 = main::i#1 != rangelast(0,5) + if(main::$3) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__stackcall void pval() +pval: scope:[pval] from + callexecute printval + to:pval::@return +pval::@return: scope:[pval] from pval + return + to:@return + +__stackcall void ival() +ival: scope:[ival] from + callexecute incval + to:ival::@return +ival::@return: scope:[ival] from ival + return + to:@return + +__stackcall void printval() +printval: scope:[printval] from + SCREEN[0] = val + to:printval::@return +printval::@return: scope:[printval] from printval + return + to:@return + +__stackcall void incval() +incval: scope:[incval] from + val = ++ val + to:incval::@return +incval::@return: scope:[incval] from incval + return + to:@return + +__stackcall void printother() +printother: scope:[printother] from + printother::i#0 = 0 + to:printother::@1 +printother::@1: scope:[printother] from printother printother::@1 + printother::i#2 = phi( printother/printother::i#0, printother::@1/printother::i#1 ) + (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] + printother::i#1 = printother::i#2 + rangenext(0,5) + printother::$1 = printother::i#1 != rangelast(0,5) + if(printother::$1) goto printother::@1 + to:printother::@return +printother::@return: scope:[printother] from printother::@1 + return + to:@return + +void __start() +__start: scope:[__start] from + to:__start::__init1 +__start::__init1: scope:[__start] from __start + val = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + callexecute main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const SCREEN = (char *)$400 +void __start() +__stackcall void incval() +__stackcall void ival() +__stackcall void main() +bool main::$3 +char main::i +char main::i#0 +char main::i#1 +char main::i#2 +__stackcall void printother() +bool printother::$1 +char printother::i +char printother::i#0 +char printother::i#1 +char printother::i#2 +__stackcall void printval() +__stackcall void pval() +__loadstore char val + +Adding number conversion cast (unumber) 0 in SCREEN[0] = val +Adding number conversion cast (unumber) $28 in (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 0 +Simplifying constant integer cast $28 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $28 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Simple Condition main::$3 [7] if(main::i#1!=rangelast(0,5)) goto main::@1 +Simple Condition printother::$1 [22] if(printother::i#1!=rangelast(0,5)) goto printother::@1 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant main::i#0 = 0 +Constant printother::i#0 = 0 +Successful SSA optimization Pass2ConstantIdentification +Resolved ranged next value [5] main::i#1 = ++ main::i#2 to ++ +Resolved ranged comparison value [7] if(main::i#1!=rangelast(0,5)) goto main::@1 to 6 +Resolved ranged next value [20] printother::i#1 = ++ printother::i#2 to ++ +Resolved ranged comparison value [22] if(printother::i#1!=rangelast(0,5)) goto printother::@1 to 6 +Simplifying expression containing zero SCREEN in [13] SCREEN[0] = val +Successful SSA optimization PassNSimplifyExpressionWithZero +Adding number conversion cast (unumber) 6 in if(main::i#1!=6) goto main::@1 +Adding number conversion cast (unumber) 6 in if(printother::i#1!=6) goto printother::@1 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant integer cast 6 +Simplifying constant integer cast 6 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 6 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inlining constant with var siblings main::i#0 +Inlining constant with var siblings printother::i#0 +Constant inlined main::i#0 = 0 +Constant inlined printother::i#0 = 0 +Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@2(between main::@1 and main::@1) +Added new block during phi lifting printother::@2(between printother::@1 and printother::@1) +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of printother +Adding NOP phi() at start of ival +Adding NOP phi() at start of pval +Adding NOP phi() at start of main +CALL GRAPH +Calls in [__start] to main:3 +Calls in [ival] to incval:17 +Calls in [pval] to printval:20 +Calls in [main] to pval:24 printother:25 ival:26 + +Created 2 initial phi equivalence classes +Coalesced [11] printother::i#3 = printother::i#1 +Coalesced [30] main::i#3 = main::i#1 +Coalesced down to 2 phi equivalence classes +Culled Empty Block label printother::@2 +Culled Empty Block label main::@2 +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of printother +Adding NOP phi() at start of ival +Adding NOP phi() at start of pval +Adding NOP phi() at start of main + +FINAL CONTROL FLOW GRAPH + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] val = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [2] phi() + [3] callexecute main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [4] return + to:@return + +__stackcall void printother() +printother: scope:[printother] from + [5] phi() + to:printother::@1 +printother::@1: scope:[printother] from printother printother::@1 + [6] printother::i#2 = phi( printother/0, printother::@1/printother::i#1 ) + [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] + [8] printother::i#1 = ++ printother::i#2 + [9] if(printother::i#1!=6) goto printother::@1 + to:printother::@return +printother::@return: scope:[printother] from printother::@1 + [10] return + to:@return + +__stackcall void incval() +incval: scope:[incval] from + [11] val = ++ val + to:incval::@return +incval::@return: scope:[incval] from incval + [12] return + to:@return + +__stackcall void printval() +printval: scope:[printval] from + [13] *SCREEN = val + to:printval::@return +printval::@return: scope:[printval] from printval + [14] return + to:@return + +__stackcall void ival() +ival: scope:[ival] from + [15] phi() + [16] callexecute incval + to:ival::@return +ival::@return: scope:[ival] from ival + [17] return + to:@return + +__stackcall void pval() +pval: scope:[pval] from + [18] phi() + [19] callexecute printval + to:pval::@return +pval::@return: scope:[pval] from pval + [20] return + to:@return + +__stackcall void main() +main: scope:[main] from + [21] phi() + to:main::@1 +main::@1: scope:[main] from main main::@1 + [22] main::i#2 = phi( main/0, main::@1/main::i#1 ) + [23] callexecute pval + [24] callexecute printother + [25] callexecute ival + [26] main::i#1 = ++ main::i#2 + [27] if(main::i#1!=6) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + [28] return + to:@return + +null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope printother +null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope ival +null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope pval +null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope ival +null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope pval + +VARIABLE REGISTER WEIGHTS +void __start() +__stackcall void incval() +__stackcall void ival() +__stackcall void main() +char main::i +char main::i#1 // 151.5 +char main::i#2 // 50.5 +__stackcall void printother() +char printother::i +char printother::i#1 // 15001.5 +char printother::i#2 // 20002.0 +__stackcall void printval() +__stackcall void pval() +__loadstore char val // 1579.2105263157896 + +Initial phi equivalence classes +[ printother::i#2 printother::i#1 ] +[ main::i#2 main::i#1 ] +Added variable val to live range equivalence class [ val ] +Complete equivalence classes +[ printother::i#2 printother::i#1 ] +[ main::i#2 main::i#1 ] +[ val ] +Allocated zp[1]:2 [ printother::i#2 printother::i#1 ] +Allocated zp[1]:3 [ val ] +Allocated zp[1]:4 [ main::i#2 main::i#1 ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] val = 0 [ val ] ( [ val ] { } ) always clobbers reg byte a +Statement [13] *SCREEN = val [ val ] ( main:3::pval:23::printval:19 [ main::i#2 val ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::i#2 main::i#1 ] +Statement [1] val = 0 [ val ] ( [ val ] { } ) always clobbers reg byte a +Statement [13] *SCREEN = val [ val ] ( main:3::pval:23::printval:19 [ main::i#2 val ] { } ) always clobbers reg byte a +Potential registers zp[1]:2 [ printother::i#2 printother::i#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:4 [ main::i#2 main::i#1 ] : zp[1]:4 , reg byte x , reg byte y , +Potential registers zp[1]:3 [ val ] : zp[1]:3 , + +REGISTER UPLIFT SCOPES +Uplift Scope [printother] 35,003.5: zp[1]:2 [ printother::i#2 printother::i#1 ] +Uplift Scope [] 1,579.21: zp[1]:3 [ val ] +Uplift Scope [main] 202: zp[1]:4 [ main::i#2 main::i#1 ] +Uplift Scope [pval] +Uplift Scope [ival] +Uplift Scope [printval] +Uplift Scope [incval] +Uplift Scope [__start] + +Uplifting [printother] best 815 combination reg byte x [ printother::i#2 printother::i#1 ] +Uplifting [] best 815 combination zp[1]:3 [ val ] +Uplifting [main] best 725 combination reg byte y [ main::i#2 main::i#1 ] +Uplifting [pval] best 725 combination +Uplifting [ival] best 725 combination +Uplifting [printval] best 725 combination +Uplifting [incval] best 725 combination +Uplifting [__start] best 725 combination +Attempting to uplift remaining variables inzp[1]:3 [ val ] +Uplifting [] best 725 combination zp[1]:3 [ val ] +Allocated (was zp[1]:3) zp[1]:2 [ val ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack +// Illustrates live range problem with function variable printother::i and global variable val + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + // Global Constants & labels + .label SCREEN = $400 + .label val = 2 +.segment Code + // __start +__start: { + jmp __init1 + // __start::__init1 + __init1: + // [1] val = 0 -- vbuz1=vbuc1 + lda #0 + sta.z val + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + __b1_from___init1: + jmp __b1 + // __start::@1 + __b1: + // [3] callexecute main -- call_vprc1 + jsr main + jmp __breturn + // __start::@return + __breturn: + // [4] return + rts +} + // printother +printother: { + // [6] phi from printother to printother::@1 [phi:printother->printother::@1] + __b1_from_printother: + // [6] phi printother::i#2 = 0 [phi:printother->printother::@1#0] -- vbuxx=vbuc1 + ldx #0 + jmp __b1 + // [6] phi from printother::@1 to printother::@1 [phi:printother::@1->printother::@1] + __b1_from___b1: + // [6] phi printother::i#2 = printother::i#1 [phi:printother::@1->printother::@1#0] -- register_copy + jmp __b1 + // printother::@1 + __b1: + // [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] -- pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx + inc SCREEN+$28,x + // [8] printother::i#1 = ++ printother::i#2 -- vbuxx=_inc_vbuxx + inx + // [9] if(printother::i#1!=6) goto printother::@1 -- vbuxx_neq_vbuc1_then_la1 + cpx #6 + bne __b1_from___b1 + jmp __breturn + // printother::@return + __breturn: + // [10] return + rts +} + // incval +incval: { + // [11] val = ++ val -- vbuz1=_inc_vbuz1 + inc.z val + jmp __breturn + // incval::@return + __breturn: + // [12] return + rts +} + // printval +printval: { + // [13] *SCREEN = val -- _deref_pbuc1=vbuz1 + lda.z val + sta SCREEN + jmp __breturn + // printval::@return + __breturn: + // [14] return + rts +} + // ival +ival: { + // [16] callexecute incval -- call_vprc1 + jsr incval + jmp __breturn + // ival::@return + __breturn: + // [17] return + rts +} + // pval +pval: { + // [19] callexecute printval -- call_vprc1 + jsr printval + jmp __breturn + // pval::@return + __breturn: + // [20] return + rts +} +.segment stage + // main +main: { + // [22] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + // [22] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 + ldy #0 + jmp __b1 + // [22] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + __b1_from___b1: + // [22] phi main::i#2 = main::i#1 [phi:main::@1->main::@1#0] -- register_copy + jmp __b1 + // main::@1 + __b1: + // [23] callexecute pval -- call_vprc1 + jsr pval + // [24] callexecute printother -- call_vprc1 + jsr printother + // [25] callexecute ival -- call_vprc1 + jsr ival + // [26] main::i#1 = ++ main::i#2 -- vbuyy=_inc_vbuyy + iny + // [27] if(main::i#1!=6) goto main::@1 -- vbuyy_neq_vbuc1_then_la1 + cpy #6 + bne __b1_from___b1 + jmp __breturn + // main::@return + __breturn: + // [28] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __init1 +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Replacing label __b1_from___b1 with __b1 +Replacing label __b1_from___b1 with __b1 +Removing instruction __b1_from___init1: +Removing instruction __b1_from___b1: +Removing instruction __b1_from___b1: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction __init1: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __b1_from_printother: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __b1_from_main: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Removing instruction jmp __b1 +Removing instruction jmp __b1 +Succesful ASM optimization Pass5NextJumpElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void __start() +__stackcall void incval() +__stackcall void ival() +__stackcall void main() +char main::i +char main::i#1 // reg byte y 151.5 +char main::i#2 // reg byte y 50.5 +__stackcall void printother() +char printother::i +char printother::i#1 // reg byte x 15001.5 +char printother::i#2 // reg byte x 20002.0 +__stackcall void printval() +__stackcall void pval() +__loadstore char val // zp[1]:2 1579.2105263157896 + +reg byte x [ printother::i#2 printother::i#1 ] +reg byte y [ main::i#2 main::i#1 ] +zp[1]:2 [ val ] + + +FINAL ASSEMBLER +Score: 497 + + // File Comments +// Test a procedure with calling convention stack +// Illustrates live range problem with function variable printother::i and global variable val + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + // Global Constants & labels + .label SCREEN = $400 + .label val = 2 +.segment Code + // __start +__start: { + // __start::__init1 + // char val = 0 + // [1] val = 0 -- vbuz1=vbuc1 + lda #0 + sta.z val + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // __start::@1 + // [3] callexecute main -- call_vprc1 + jsr main + // __start::@return + // [4] return + rts +} + // printother +printother: { + // [6] phi from printother to printother::@1 [phi:printother->printother::@1] + // [6] phi printother::i#2 = 0 [phi:printother->printother::@1#0] -- vbuxx=vbuc1 + ldx #0 + // [6] phi from printother::@1 to printother::@1 [phi:printother::@1->printother::@1] + // [6] phi printother::i#2 = printother::i#1 [phi:printother::@1->printother::@1#0] -- register_copy + // printother::@1 + __b1: + // (SCREEN+40)[i]++; + // [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] -- pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx + inc SCREEN+$28,x + // for(char i:0..5) + // [8] printother::i#1 = ++ printother::i#2 -- vbuxx=_inc_vbuxx + inx + // [9] if(printother::i#1!=6) goto printother::@1 -- vbuxx_neq_vbuc1_then_la1 + cpx #6 + bne __b1 + // printother::@return + // } + // [10] return + rts +} + // incval +incval: { + // val++; + // [11] val = ++ val -- vbuz1=_inc_vbuz1 + inc.z val + // incval::@return + // } + // [12] return + rts +} + // printval +printval: { + // SCREEN[0] = val + // [13] *SCREEN = val -- _deref_pbuc1=vbuz1 + lda.z val + sta SCREEN + // printval::@return + // } + // [14] return + rts +} + // ival +ival: { + // incval() + // [16] callexecute incval -- call_vprc1 + jsr incval + // ival::@return + // } + // [17] return + rts +} + // pval +pval: { + // printval() + // [19] callexecute printval -- call_vprc1 + jsr printval + // pval::@return + // } + // [20] return + rts +} +.segment stage + // main +main: { + // [22] phi from main to main::@1 [phi:main->main::@1] + // [22] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 + ldy #0 + // [22] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [22] phi main::i#2 = main::i#1 [phi:main::@1->main::@1#0] -- register_copy + // main::@1 + __b1: + // pval() + // [23] callexecute pval -- call_vprc1 + jsr pval + // printother() + // [24] callexecute printother -- call_vprc1 + jsr printother + // ival() + // [25] callexecute ival -- call_vprc1 + jsr ival + // for(char i:0..5) + // [26] main::i#1 = ++ main::i#2 -- vbuyy=_inc_vbuyy + iny + // [27] if(main::i#1!=6) goto main::@1 -- vbuyy_neq_vbuc1_then_la1 + cpy #6 + bne __b1 + // main::@return + // } + // [28] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-stack-bank-3.sym b/src/test/ref/procedure-callingconvention-stack-bank-3.sym new file mode 100644 index 000000000..4eeb8472d --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-3.sym @@ -0,0 +1,19 @@ +__constant char * const SCREEN = (char *) 1024 +void __start() +__stackcall void incval() +__stackcall void ival() +__stackcall void main() +char main::i +char main::i#1 // reg byte y 151.5 +char main::i#2 // reg byte y 50.5 +__stackcall void printother() +char printother::i +char printother::i#1 // reg byte x 15001.5 +char printother::i#2 // reg byte x 20002.0 +__stackcall void printval() +__stackcall void pval() +__loadstore char val // zp[1]:2 1579.2105263157896 + +reg byte x [ printother::i#2 printother::i#1 ] +reg byte y [ main::i#2 main::i#1 ] +zp[1]:2 [ val ] diff --git a/src/test/ref/procedure-callingconvention-stack-bank-4.asm b/src/test/ref/procedure-callingconvention-stack-bank-4.asm new file mode 100644 index 000000000..f5f8d94ab --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-4.asm @@ -0,0 +1,111 @@ +// Test a procedure with calling convention stack +// Returning and passing struct values +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + .const OFFSET_STRUCT_POINT_Y = 1 + .const SIZEOF_STRUCT_POINT = 2 + .const STACK_BASE = $103 + .label SCREEN = $400 + .label idx = 4 +.segment Code +__start: { + // char idx = 0 + lda #0 + sta.z idx + jsr main + rts +} +.segment stage +// void print(__zp(2) struct Point p) +print: { + .const OFFSET_STACK_P = 0 + .label p = 2 + tsx + lda STACK_BASE+OFFSET_STACK_P,x + sta.z p + lda STACK_BASE+OFFSET_STACK_P+1,x + sta.z p+1 + // SCREEN[idx++] = p.x + lda.z p + ldy.z idx + sta SCREEN,y + // SCREEN[idx++] = p.x; + inc.z idx + // SCREEN[idx++] = p.y + lda.z p+OFFSET_STRUCT_POINT_Y + ldy.z idx + sta SCREEN,y + // SCREEN[idx++] = p.y; + inc.z idx + // } + rts +} +// __zp(6) struct Point get(__register(X) char i) +get: { + .const OFFSET_STACK_I = 0 + .const OFFSET_STACK_RETURN_0 = 0 + .label return = 6 + .label p = 8 + tsx + lda STACK_BASE+OFFSET_STACK_I,x + tax + // i/2 + txa + lsr + // struct Point p = { i, i/2 } + stx.z p + sta.z p+OFFSET_STRUCT_POINT_Y + // return p; + ldy #SIZEOF_STRUCT_POINT + !: + lda p-1,y + sta return-1,y + dey + bne !- + // } + tsx + lda.z return + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + lda.z return+1 + sta STACK_BASE+OFFSET_STACK_RETURN_0+1,x + rts +} +main: { + .label p = 2 + .label i = 5 + lda #0 + sta.z i + __b1: + // for(char i=0;i<5;i++) + lda.z i + cmp #5 + bcc __b2 + // } + rts + __b2: + // struct Point p = get(i) + lda.z i + pha + pha + jsr get + pla + sta.z p + pla + sta.z p+1 + // print(p) + pha + lda.z p + pha + jsr print + pla + pla + // for(char i=0;i<5;i++) + inc.z i + jmp __b1 +} diff --git a/src/test/ref/procedure-callingconvention-stack-bank-4.cfg b/src/test/ref/procedure-callingconvention-stack-bank-4.cfg new file mode 100644 index 000000000..df3d4fa35 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-4.cfg @@ -0,0 +1,62 @@ + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] idx = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [2] phi() + [3] callexecute main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [4] return + to:@return + +__stackcall void print(struct Point p) +print: scope:[print] from + [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) + [6] SCREEN[idx] = *((char *)&print::p) + [7] idx = ++ idx + [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) + [9] idx = ++ idx + to:print::@return +print::@return: scope:[print] from print + [10] return + to:@return + +__stackcall struct Point get(char i) +get: scope:[get] from + [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) + [12] get::$0 = get::i#0 >> 1 + [13] *((char *)&get::p) = get::i#0 + [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 + [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) + to:get::@return +get::@return: scope:[get] from get + [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return + [17] return + to:@return + +__stackcall void main() +main: scope:[main] from + [18] phi() + to:main::@1 +main::@1: scope:[main] from main main::@2 + [19] main::i#2 = phi( main/0, main::@2/main::i#1 ) + [20] if(main::i#2<5) goto main::@2 + to:main::@return +main::@return: scope:[main] from main::@1 + [21] return + to:@return +main::@2: scope:[main] from main::@1 + [22] stackpush(char) = main::i#2 + sideeffect stackpushpadding(1) + [24] callexecute get + [25] main::p = stackpull(struct Point) + [26] stackpush(struct Point) = main::p + [27] callexecute print + sideeffect stackpullpadding(2) + [29] main::i#1 = ++ main::i#2 + to:main::@1 diff --git a/src/test/ref/procedure-callingconvention-stack-bank-4.log b/src/test/ref/procedure-callingconvention-stack-bank-4.log new file mode 100644 index 000000000..4d3cfc93f --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-4.log @@ -0,0 +1,710 @@ +Loading link script "procedure-callingconvention-stack-bank.ld" +Converting variable modified inside __stackcall procedure main() to load/store idx +Adding parameter assignment in __stackcall procedure get::i = param(get::i) +Adding parameter assignment in __stackcall procedure print::p = param(print::p) +Inlined call call __init +Eliminating unused variable with no statement main::$1 +Calling convention __stackcall adding prepare/execute/finalize for main::p = call get(main::i) +Calling convention __stackcall adding prepare/execute/finalize for call print(main::p) +Calling convention __stackcall adding prepare/execute/finalize for call main +Calling convention STACK_CALL replacing param(get::i) with stackidx(char,get::OFFSET_STACK_I) +Calling convention STACK_CALL replacing param(print::p) with stackidx(struct Point,print::OFFSET_STACK_P) +Calling convention STACK_CALL adding stack return stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return +Calling convention STACK_CALL adding stack pull main::p = stackpull(struct Point) +Calling convention STACK_CALL adding stack push stackpush(char) = main::i +Calling convention STACK_CALL adding stack push stackpush(struct Point) = main::p +Removing C-classic struct-unwound assignment get::p = struct-unwound {*((char *)&get::p+OFFSET_STRUCT_POINT_X), *((char *)&get::p+OFFSET_STRUCT_POINT_Y)} +Removing C-classic struct-unwound assignment get::return = struct-unwound {*(&get::return)} + +CONTROL FLOW GRAPH SSA + +__stackcall void main() +main: scope:[main] from + main::i#0 = 0 + to:main::@1 +main::@1: scope:[main] from main main::@2 + main::i#2 = phi( main/main::i#0, main::@2/main::i#1 ) + main::$0 = main::i#2 < 5 + if(main::$0) goto main::@2 + to:main::@return +main::@2: scope:[main] from main::@1 + main::i#3 = phi( main::@1/main::i#2 ) + stackpush(char) = main::i#3 + sideeffect stackpushpadding(1) + callexecute get + main::p = stackpull(struct Point) + stackpush(struct Point) = main::p + callexecute print + sideeffect stackpullpadding(2) + main::i#1 = ++ main::i#3 + to:main::@1 +main::@return: scope:[main] from main::@1 + return + to:@return + +__stackcall struct Point get(char i) +get: scope:[get] from + get::i#0 = stackidx(char,get::OFFSET_STACK_I) + get::$0 = get::i#0 / 2 + *((char *)&get::p+OFFSET_STRUCT_POINT_X) = get::i#0 + *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 + *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) + to:get::@return +get::@return: scope:[get] from get + stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return + return + to:@return + +__stackcall void print(struct Point p) +print: scope:[print] from + print::p = stackidx(struct Point,print::OFFSET_STACK_P) + SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_X) + idx = ++ idx + SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) + idx = ++ idx + to:print::@return +print::@return: scope:[print] from print + return + to:@return + +void __start() +__start: scope:[__start] from + to:__start::__init1 +__start::__init1: scope:[__start] from __start + idx = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + callexecute main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char OFFSET_STRUCT_POINT_X = 0 +__constant char OFFSET_STRUCT_POINT_Y = 1 +__constant char * const SCREEN = (char *)$400 +__constant char SIZEOF_STRUCT_POINT = 2 +__constant unsigned int STACK_BASE = $103 +void __start() +__stackcall struct Point get(char i) +number get::$0 +__constant char get::OFFSET_STACK_I = 0 +__constant char get::OFFSET_STACK_RETURN_0 = 0 +char get::i +char get::i#0 +__loadstore struct Point get::p +__loadstore struct Point get::return +__loadstore char idx +__stackcall void main() +bool main::$0 +char main::i +char main::i#0 +char main::i#1 +char main::i#2 +char main::i#3 +__loadstore struct Point main::p +__stackcall void print(struct Point p) +__constant char print::OFFSET_STACK_P = 0 +__loadstore struct Point print::p + +Adding number conversion cast (unumber) 5 in main::$0 = main::i#2 < 5 +Adding number conversion cast (unumber) 2 in get::$0 = get::i#0 / 2 +Adding number conversion cast (unumber) get::$0 in get::$0 = get::i#0 / (unumber)2 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 5 +Simplifying constant integer cast 2 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 5 +Finalized unsigned number type (char) 2 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to char in get::$0 = get::i#0 / 2 +Alias main::i#2 = main::i#3 +Successful SSA optimization Pass2AliasElimination +Simple Condition main::$0 [3] if(main::i#2<5) goto main::@2 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant main::i#0 = 0 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero (char *)&get::p in [15] *((char *)&get::p+OFFSET_STRUCT_POINT_X) = get::i#0 +Simplifying expression containing zero (char *)&print::p in [21] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_X) +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused constant OFFSET_STRUCT_POINT_X +Successful SSA optimization PassNEliminateUnusedVars +Rewriting division to use shift [12] get::$0 = get::i#0 / 2 +Successful SSA optimization Pass2MultiplyToShiftRewriting +Inlining constant with var siblings main::i#0 +Constant inlined main::i#0 = 0 +Successful SSA optimization Pass2ConstantInlining +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 2 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of main +CALL GRAPH +Calls in [__start] to main:3 +Calls in [main] to get:24 print:27 + +Created 1 initial phi equivalence classes +Coalesced [30] main::i#4 = main::i#1 +Coalesced down to 1 phi equivalence classes +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of main + +FINAL CONTROL FLOW GRAPH + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] idx = 0 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [2] phi() + [3] callexecute main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [4] return + to:@return + +__stackcall void print(struct Point p) +print: scope:[print] from + [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) + [6] SCREEN[idx] = *((char *)&print::p) + [7] idx = ++ idx + [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) + [9] idx = ++ idx + to:print::@return +print::@return: scope:[print] from print + [10] return + to:@return + +__stackcall struct Point get(char i) +get: scope:[get] from + [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) + [12] get::$0 = get::i#0 >> 1 + [13] *((char *)&get::p) = get::i#0 + [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 + [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) + to:get::@return +get::@return: scope:[get] from get + [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return + [17] return + to:@return + +__stackcall void main() +main: scope:[main] from + [18] phi() + to:main::@1 +main::@1: scope:[main] from main main::@2 + [19] main::i#2 = phi( main/0, main::@2/main::i#1 ) + [20] if(main::i#2<5) goto main::@2 + to:main::@return +main::@return: scope:[main] from main::@1 + [21] return + to:@return +main::@2: scope:[main] from main::@1 + [22] stackpush(char) = main::i#2 + sideeffect stackpushpadding(1) + [24] callexecute get + [25] main::p = stackpull(struct Point) + [26] stackpush(struct Point) = main::p + [27] callexecute print + sideeffect stackpullpadding(2) + [29] main::i#1 = ++ main::i#2 + to:main::@1 + +null depth in calling loop Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 in scope print +null depth in calling loop Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 in scope get + +VARIABLE REGISTER WEIGHTS +void __start() +__stackcall struct Point get(char i) +char get::$0 // 1001.0 +char get::i +char get::i#0 // 1501.5 +__loadstore struct Point get::p +__loadstore struct Point get::return // 47.666666666666664 +__loadstore char idx // 316.2105263157895 +__stackcall void main() +char main::i +char main::i#1 // 202.0 +char main::i#2 // 44.888888888888886 +__loadstore struct Point main::p // 202.0 +__stackcall void print(struct Point p) +__loadstore struct Point print::p // 333.6666666666667 + +Initial phi equivalence classes +[ main::i#2 main::i#1 ] +Added variable idx to live range equivalence class [ idx ] +Added variable print::p to live range equivalence class [ print::p ] +Added variable get::i#0 to live range equivalence class [ get::i#0 ] +Added variable get::$0 to live range equivalence class [ get::$0 ] +Added variable main::p to live range equivalence class [ main::p ] +Added variable get::return to live range equivalence class [ get::return ] +Added variable get::p to live range equivalence class [ get::p ] +Complete equivalence classes +[ main::i#2 main::i#1 ] +[ idx ] +[ print::p ] +[ get::i#0 ] +[ get::$0 ] +[ main::p ] +[ get::return ] +[ get::p ] +Allocated zp[1]:2 [ get::i#0 ] +Allocated zp[1]:3 [ get::$0 ] +Allocated zp[2]:4 [ print::p ] +Allocated zp[1]:6 [ idx ] +Allocated zp[1]:7 [ main::i#2 main::i#1 ] +Allocated zp[2]:8 [ main::p ] +Allocated zp[2]:10 [ get::return ] +Allocated zp[2]:12 [ get::p ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] idx = 0 [ idx get::p get::return ] ( [ idx get::p get::return ] { } ) always clobbers reg byte a +Statement [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::i#2 main::i#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:7 [ main::i#2 main::i#1 ] +Statement [6] SCREEN[idx] = *((char *)&print::p) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:7 [ main::i#2 main::i#1 ] +Statement [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) [ idx ] ( main:3::print:27 [ get::p get::return main::i#2 idx ] { } ) always clobbers reg byte a reg byte y +Statement [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) [ get::i#0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::p get::return ] { } ) always clobbers reg byte a reg byte x +Statement [12] get::$0 = get::i#0 >> 1 [ get::i#0 get::$0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::$0 get::p get::return ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:2 [ get::i#0 ] +Statement [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte y +Statement [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte x +Statement [20] if(main::i#2<5) goto main::@2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a +Statement [22] stackpush(char) = main::i#2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a +Statement [25] main::p = stackpull(struct Point) [ idx get::p get::return main::i#2 main::p ] ( main:3 [ idx get::p get::return main::i#2 main::p ] { } ) always clobbers reg byte a +Statement [26] stackpush(struct Point) = main::p [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a +Statement sideeffect stackpullpadding(2) always clobbers reg byte a +Statement [1] idx = 0 [ idx get::p get::return ] ( [ idx get::p get::return ] { } ) always clobbers reg byte a +Statement [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte x +Statement [6] SCREEN[idx] = *((char *)&print::p) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte y +Statement [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) [ idx ] ( main:3::print:27 [ get::p get::return main::i#2 idx ] { } ) always clobbers reg byte a reg byte y +Statement [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) [ get::i#0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::p get::return ] { } ) always clobbers reg byte a reg byte x +Statement [12] get::$0 = get::i#0 >> 1 [ get::i#0 get::$0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::$0 get::p get::return ] { } ) always clobbers reg byte a +Statement [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte y +Statement [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte x +Statement [20] if(main::i#2<5) goto main::@2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a +Statement [22] stackpush(char) = main::i#2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a +Statement [25] main::p = stackpull(struct Point) [ idx get::p get::return main::i#2 main::p ] ( main:3 [ idx get::p get::return main::i#2 main::p ] { } ) always clobbers reg byte a +Statement [26] stackpush(struct Point) = main::p [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a +Statement sideeffect stackpullpadding(2) always clobbers reg byte a +Potential registers zp[1]:7 [ main::i#2 main::i#1 ] : zp[1]:7 , +Potential registers zp[1]:6 [ idx ] : zp[1]:6 , +Potential registers zp[2]:4 [ print::p ] : zp[2]:4 , +Potential registers zp[1]:2 [ get::i#0 ] : zp[1]:2 , reg byte x , reg byte y , +Potential registers zp[1]:3 [ get::$0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:8 [ main::p ] : zp[2]:8 , +Potential registers zp[2]:10 [ get::return ] : zp[2]:10 , +Potential registers zp[2]:12 [ get::p ] : zp[2]:12 , + +REGISTER UPLIFT SCOPES +Uplift Scope [get] 1,501.5: zp[1]:2 [ get::i#0 ] 1,001: zp[1]:3 [ get::$0 ] 47.67: zp[2]:10 [ get::return ] 0: zp[2]:12 [ get::p ] +Uplift Scope [main] 246.89: zp[1]:7 [ main::i#2 main::i#1 ] 202: zp[2]:8 [ main::p ] +Uplift Scope [print] 333.67: zp[2]:4 [ print::p ] +Uplift Scope [] 316.21: zp[1]:6 [ idx ] +Uplift Scope [Point] +Uplift Scope [__start] + +Uplifting [get] best 993 combination reg byte x [ get::i#0 ] reg byte a [ get::$0 ] zp[2]:10 [ get::return ] zp[2]:12 [ get::p ] +Uplifting [main] best 993 combination zp[1]:7 [ main::i#2 main::i#1 ] zp[2]:8 [ main::p ] +Uplifting [print] best 993 combination zp[2]:4 [ print::p ] +Uplifting [] best 993 combination zp[1]:6 [ idx ] +Uplifting [Point] best 993 combination +Uplifting [__start] best 993 combination +Attempting to uplift remaining variables inzp[1]:6 [ idx ] +Uplifting [] best 993 combination zp[1]:6 [ idx ] +Attempting to uplift remaining variables inzp[1]:7 [ main::i#2 main::i#1 ] +Uplifting [main] best 993 combination zp[1]:7 [ main::i#2 main::i#1 ] +Coalescing zero page register [ zp[2]:8 [ main::p ] ] with [ zp[2]:4 [ print::p ] ] +Allocated (was zp[2]:8) zp[2]:2 [ main::p print::p ] +Allocated (was zp[1]:6) zp[1]:4 [ idx ] +Allocated (was zp[1]:7) zp[1]:5 [ main::i#2 main::i#1 ] +Allocated (was zp[2]:10) zp[2]:6 [ get::return ] +Allocated (was zp[2]:12) zp[2]:8 [ get::p ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack +// Returning and passing struct values + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + // Global Constants & labels + .const OFFSET_STRUCT_POINT_Y = 1 + .const SIZEOF_STRUCT_POINT = 2 + .const STACK_BASE = $103 + .label SCREEN = $400 + .label idx = 4 +.segment Code + // __start +__start: { + jmp __init1 + // __start::__init1 + __init1: + // [1] idx = 0 -- vbuz1=vbuc1 + lda #0 + sta.z idx + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + __b1_from___init1: + jmp __b1 + // __start::@1 + __b1: + // [3] callexecute main -- call_vprc1 + jsr main + jmp __breturn + // __start::@return + __breturn: + // [4] return + rts +} +.segment stage + // print +// void print(__zp(2) struct Point p) +print: { + .const OFFSET_STACK_P = 0 + .label p = 2 + // [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) -- vssz1=_stackidxstruct_2_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_P,x + sta.z p + lda STACK_BASE+OFFSET_STACK_P+1,x + sta.z p+1 + // [6] SCREEN[idx] = *((char *)&print::p) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 + lda.z p + ldy.z idx + sta SCREEN,y + // [7] idx = ++ idx -- vbuz1=_inc_vbuz1 + inc.z idx + // [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 + lda.z p+OFFSET_STRUCT_POINT_Y + ldy.z idx + sta SCREEN,y + // [9] idx = ++ idx -- vbuz1=_inc_vbuz1 + inc.z idx + jmp __breturn + // print::@return + __breturn: + // [10] return + rts +} + // get +// __zp(6) struct Point get(__register(X) char i) +get: { + .const OFFSET_STACK_I = 0 + .const OFFSET_STACK_RETURN_0 = 0 + .label return = 6 + .label p = 8 + // [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) -- vbuxx=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_I,x + tax + // [12] get::$0 = get::i#0 >> 1 -- vbuaa=vbuxx_ror_1 + txa + lsr + // [13] *((char *)&get::p) = get::i#0 -- _deref_pbuc1=vbuxx + stx.z p + // [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 -- _deref_pbuc1=vbuaa + sta.z p+OFFSET_STRUCT_POINT_Y + // [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda p-1,y + sta return-1,y + dey + bne !- + jmp __breturn + // get::@return + __breturn: + // [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return -- _stackidxstruct_2_vbuc1=vssz1 + tsx + lda.z return + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + lda.z return+1 + sta STACK_BASE+OFFSET_STACK_RETURN_0+1,x + // [17] return + rts +} + // main +main: { + .label p = 2 + .label i = 5 + // [19] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + // [19] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + jmp __b1 + // main::@1 + __b1: + // [20] if(main::i#2<5) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda.z i + cmp #5 + bcc __b2 + jmp __breturn + // main::@return + __breturn: + // [21] return + rts + // main::@2 + __b2: + // [22] stackpush(char) = main::i#2 -- _stackpushbyte_=vbuz1 + lda.z i + pha + // sideeffect stackpushpadding(1) -- _stackpushpadding_1 + pha + // [24] callexecute get -- call_vprc1 + jsr get + // [25] main::p = stackpull(struct Point) -- vssz1=_stackpullstruct_2_ + pla + sta.z p + pla + sta.z p+1 + // [26] stackpush(struct Point) = main::p -- _stackpushstruct_2_=vssz1 + lda.z p+1 + pha + lda.z p + pha + // [27] callexecute print -- call_vprc1 + jsr print + // sideeffect stackpullpadding(2) -- _stackpullpadding_2 + pla + pla + // [29] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [19] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + __b1_from___b2: + // [19] phi main::i#2 = main::i#1 [phi:main::@2->main::@1#0] -- register_copy + jmp __b1 +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __init1 +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda.z p+1 +Succesful ASM optimization Pass5UnnecesaryLoadElimination +Removing instruction __b1_from___init1: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction __init1: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __b1_from_main: +Removing instruction __breturn: +Removing instruction __b1_from___b2: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char OFFSET_STRUCT_POINT_Y = 1 +__constant char * const SCREEN = (char *) 1024 +__constant char SIZEOF_STRUCT_POINT = 2 +__constant unsigned int STACK_BASE = $103 +void __start() +__stackcall struct Point get(char i) +char get::$0 // reg byte a 1001.0 +__constant char get::OFFSET_STACK_I = 0 +__constant char get::OFFSET_STACK_RETURN_0 = 0 +char get::i +char get::i#0 // reg byte x 1501.5 +__loadstore struct Point get::p // zp[2]:8 +__loadstore struct Point get::return // zp[2]:6 47.666666666666664 +__loadstore char idx // zp[1]:4 316.2105263157895 +__stackcall void main() +char main::i +char main::i#1 // i zp[1]:5 202.0 +char main::i#2 // i zp[1]:5 44.888888888888886 +__loadstore struct Point main::p // zp[2]:2 202.0 +__stackcall void print(struct Point p) +__constant char print::OFFSET_STACK_P = 0 +__loadstore struct Point print::p // zp[2]:2 333.6666666666667 + +zp[1]:5 [ main::i#2 main::i#1 ] +zp[1]:4 [ idx ] +reg byte x [ get::i#0 ] +reg byte a [ get::$0 ] +zp[2]:2 [ main::p print::p ] +zp[2]:6 [ get::return ] +zp[2]:8 [ get::p ] + + +FINAL ASSEMBLER +Score: 861 + + // File Comments +// Test a procedure with calling convention stack +// Returning and passing struct values + // Upstart +.cpu _65c02 + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + // Global Constants & labels + .const OFFSET_STRUCT_POINT_Y = 1 + .const SIZEOF_STRUCT_POINT = 2 + .const STACK_BASE = $103 + .label SCREEN = $400 + .label idx = 4 +.segment Code + // __start +__start: { + // __start::__init1 + // char idx = 0 + // [1] idx = 0 -- vbuz1=vbuc1 + lda #0 + sta.z idx + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // __start::@1 + // [3] callexecute main -- call_vprc1 + jsr main + // __start::@return + // [4] return + rts +} +.segment stage + // print +// void print(__zp(2) struct Point p) +print: { + .const OFFSET_STACK_P = 0 + .label p = 2 + // [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) -- vssz1=_stackidxstruct_2_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_P,x + sta.z p + lda STACK_BASE+OFFSET_STACK_P+1,x + sta.z p+1 + // SCREEN[idx++] = p.x + // [6] SCREEN[idx] = *((char *)&print::p) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 + lda.z p + ldy.z idx + sta SCREEN,y + // SCREEN[idx++] = p.x; + // [7] idx = ++ idx -- vbuz1=_inc_vbuz1 + inc.z idx + // SCREEN[idx++] = p.y + // [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 + lda.z p+OFFSET_STRUCT_POINT_Y + ldy.z idx + sta SCREEN,y + // SCREEN[idx++] = p.y; + // [9] idx = ++ idx -- vbuz1=_inc_vbuz1 + inc.z idx + // print::@return + // } + // [10] return + rts +} + // get +// __zp(6) struct Point get(__register(X) char i) +get: { + .const OFFSET_STACK_I = 0 + .const OFFSET_STACK_RETURN_0 = 0 + .label return = 6 + .label p = 8 + // [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) -- vbuxx=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_I,x + tax + // i/2 + // [12] get::$0 = get::i#0 >> 1 -- vbuaa=vbuxx_ror_1 + txa + lsr + // struct Point p = { i, i/2 } + // [13] *((char *)&get::p) = get::i#0 -- _deref_pbuc1=vbuxx + stx.z p + // [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 -- _deref_pbuc1=vbuaa + sta.z p+OFFSET_STRUCT_POINT_Y + // return p; + // [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 + ldy #SIZEOF_STRUCT_POINT + !: + lda p-1,y + sta return-1,y + dey + bne !- + // get::@return + // } + // [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return -- _stackidxstruct_2_vbuc1=vssz1 + tsx + lda.z return + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + lda.z return+1 + sta STACK_BASE+OFFSET_STACK_RETURN_0+1,x + // [17] return + rts +} + // main +main: { + .label p = 2 + .label i = 5 + // [19] phi from main to main::@1 [phi:main->main::@1] + // [19] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + // main::@1 + __b1: + // for(char i=0;i<5;i++) + // [20] if(main::i#2<5) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda.z i + cmp #5 + bcc __b2 + // main::@return + // } + // [21] return + rts + // main::@2 + __b2: + // struct Point p = get(i) + // [22] stackpush(char) = main::i#2 -- _stackpushbyte_=vbuz1 + lda.z i + pha + // sideeffect stackpushpadding(1) -- _stackpushpadding_1 + pha + // [24] callexecute get -- call_vprc1 + jsr get + // [25] main::p = stackpull(struct Point) -- vssz1=_stackpullstruct_2_ + pla + sta.z p + pla + sta.z p+1 + // print(p) + // [26] stackpush(struct Point) = main::p -- _stackpushstruct_2_=vssz1 + pha + lda.z p + pha + // [27] callexecute print -- call_vprc1 + jsr print + // sideeffect stackpullpadding(2) -- _stackpullpadding_2 + pla + pla + // for(char i=0;i<5;i++) + // [29] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [19] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + // [19] phi main::i#2 = main::i#1 [phi:main::@2->main::@1#0] -- register_copy + jmp __b1 +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-stack-bank-4.sym b/src/test/ref/procedure-callingconvention-stack-bank-4.sym new file mode 100644 index 000000000..0c4dcbeba --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-4.sym @@ -0,0 +1,30 @@ +__constant char OFFSET_STRUCT_POINT_Y = 1 +__constant char * const SCREEN = (char *) 1024 +__constant char SIZEOF_STRUCT_POINT = 2 +__constant unsigned int STACK_BASE = $103 +void __start() +__stackcall struct Point get(char i) +char get::$0 // reg byte a 1001.0 +__constant char get::OFFSET_STACK_I = 0 +__constant char get::OFFSET_STACK_RETURN_0 = 0 +char get::i +char get::i#0 // reg byte x 1501.5 +__loadstore struct Point get::p // zp[2]:8 +__loadstore struct Point get::return // zp[2]:6 47.666666666666664 +__loadstore char idx // zp[1]:4 316.2105263157895 +__stackcall void main() +char main::i +char main::i#1 // i zp[1]:5 202.0 +char main::i#2 // i zp[1]:5 44.888888888888886 +__loadstore struct Point main::p // zp[2]:2 202.0 +__stackcall void print(struct Point p) +__constant char print::OFFSET_STACK_P = 0 +__loadstore struct Point print::p // zp[2]:2 333.6666666666667 + +zp[1]:5 [ main::i#2 main::i#1 ] +zp[1]:4 [ idx ] +reg byte x [ get::i#0 ] +reg byte a [ get::$0 ] +zp[2]:2 [ main::p print::p ] +zp[2]:6 [ get::return ] +zp[2]:8 [ get::p ] diff --git a/src/test/ref/procedure-callingconvention-stack-bank-5.asm b/src/test/ref/procedure-callingconvention-stack-bank-5.asm new file mode 100644 index 000000000..7a7f95bc0 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-5.asm @@ -0,0 +1,50 @@ +// Test a procedure with calling convention stack +// Recursion that works (no local variables) + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment stage +// __register(A) char pow2(__register(A) char n) +pow2: { + .const OFFSET_STACK_N = 0 + .const OFFSET_STACK_RETURN_0 = 0 + tsx + lda STACK_BASE+OFFSET_STACK_N,x + // if (n == 0) + cmp #0 + beq __b1 + // n-1 + sec + sbc #1 + // char c = pow2(n-1) + pha + jsr pow2 + pla + // return c+c; + asl + jmp __breturn + __b1: + lda #1 + __breturn: + // } + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + rts +} +main: { + // pow2(6) + lda #6 + pha + jsr pow2 + pla + // *SCREEN = pow2(6) + sta SCREEN + // } + rts +} diff --git a/src/test/ref/procedure-callingconvention-stack-bank-5.cfg b/src/test/ref/procedure-callingconvention-stack-bank-5.cfg new file mode 100644 index 000000000..17c2baaed --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-5.cfg @@ -0,0 +1,29 @@ + +__stackcall char pow2(char n) +pow2: scope:[pow2] from + [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) + [1] if(pow2::n#0==0) goto pow2::@return + to:pow2::@1 +pow2::@1: scope:[pow2] from pow2 + [2] pow2::$1 = pow2::n#0 - 1 + [3] stackpush(char) = pow2::$1 + [4] callexecute pow2 + [5] pow2::c#0 = stackpull(char) + [6] pow2::return#1 = pow2::c#0 + pow2::c#0 + to:pow2::@return +pow2::@return: scope:[pow2] from pow2 pow2::@1 + [7] pow2::return#2 = phi( pow2/1, pow2::@1/pow2::return#1 ) + [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 + [9] return + to:@return + +void main() +main: scope:[main] from + [10] stackpush(char) = 6 + [11] callexecute pow2 + [12] main::$0 = stackpull(char) + [13] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [14] return + to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-bank-5.log b/src/test/ref/procedure-callingconvention-stack-bank-5.log new file mode 100644 index 000000000..e3d77a25a --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-5.log @@ -0,0 +1,408 @@ +Loading link script "procedure-callingconvention-stack-bank.ld" +Warning! Unknown #pragma platform +Adding parameter assignment in __stackcall procedure pow2::n = param(pow2::n) +Eliminating unused variable with no statement pow2::$2 +Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call pow2(6) +Calling convention __stackcall adding prepare/execute/finalize for pow2::c = call pow2(pow2::$1) +Calling convention STACK_CALL replacing param(pow2::n) with stackidx(char,pow2::OFFSET_STACK_N) +Calling convention STACK_CALL adding stack return stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return +Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) +Calling convention STACK_CALL adding stack pull pow2::c = stackpull(char) +Calling convention STACK_CALL adding stack push stackpush(char) = 6 +Calling convention STACK_CALL adding stack push stackpush(char) = pow2::$1 + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + stackpush(char) = 6 + callexecute pow2 + main::$0 = stackpull(char) + *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + return + to:@return + +__stackcall char pow2(char n) +pow2: scope:[pow2] from + pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) + pow2::$0 = pow2::n#0 == 0 + if(pow2::$0) goto pow2::@1 + to:pow2::@2 +pow2::@1: scope:[pow2] from pow2 + pow2::return#0 = 1 + to:pow2::@return +pow2::@2: scope:[pow2] from pow2 + pow2::n#1 = phi( pow2/pow2::n#0 ) + pow2::$1 = pow2::n#1 - 1 + stackpush(char) = pow2::$1 + callexecute pow2 + pow2::c#0 = stackpull(char) + pow2::$3 = pow2::c#0 + pow2::c#0 + pow2::return#1 = pow2::$3 + to:pow2::@return +pow2::@return: scope:[pow2] from pow2::@1 pow2::@2 + pow2::return#2 = phi( pow2::@1/pow2::return#0, pow2::@2/pow2::return#1 ) + stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 + 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 +__constant char * const SCREEN = (char *)$400 +__constant unsigned int STACK_BASE = $103 +void __start() +void main() +char main::$0 +__stackcall char pow2(char n) +bool pow2::$0 +number pow2::$1 +char pow2::$3 +__constant char pow2::OFFSET_STACK_N = 0 +__constant char pow2::OFFSET_STACK_RETURN_0 = 0 +char pow2::c +char pow2::c#0 +char pow2::n +char pow2::n#0 +char pow2::n#1 +char pow2::return +char pow2::return#0 +char pow2::return#1 +char pow2::return#2 + +Adding number conversion cast (unumber) 6 in stackpush(char) = 6 +Adding number conversion cast (unumber) 0 in pow2::$0 = pow2::n#0 == 0 +Adding number conversion cast (unumber) 1 in pow2::return#0 = 1 +Adding number conversion cast (unumber) 1 in pow2::$1 = pow2::n#1 - 1 +Adding number conversion cast (unumber) pow2::$1 in pow2::$1 = pow2::n#1 - (unumber)1 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast stackpush(char) = (unumber)6 +Inlining cast pow2::return#0 = (unumber)1 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 6 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 1 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to char in pow2::$1 = pow2::n#1 - 1 +Alias pow2::n#0 = pow2::n#1 +Alias pow2::return#1 = pow2::$3 +Successful SSA optimization Pass2AliasElimination +Simple Condition pow2::$0 [7] if(pow2::n#0==0) goto pow2::@1 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant pow2::return#0 = 1 +Successful SSA optimization Pass2ConstantIdentification +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 +Inlining constant with var siblings pow2::return#0 +Constant inlined pow2::return#0 = 1 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of pow2::@1 +CALL GRAPH +Calls in [pow2] to pow2:4 +Calls in [main] to pow2:13 + +Created 1 initial phi equivalence classes +Coalesced [7] pow2::return#3 = pow2::return#1 +Coalesced down to 1 phi equivalence classes +Culled Empty Block label pow2::@1 +Renumbering block pow2::@2 to pow2::@1 + +FINAL CONTROL FLOW GRAPH + +__stackcall char pow2(char n) +pow2: scope:[pow2] from + [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) + [1] if(pow2::n#0==0) goto pow2::@return + to:pow2::@1 +pow2::@1: scope:[pow2] from pow2 + [2] pow2::$1 = pow2::n#0 - 1 + [3] stackpush(char) = pow2::$1 + [4] callexecute pow2 + [5] pow2::c#0 = stackpull(char) + [6] pow2::return#1 = pow2::c#0 + pow2::c#0 + to:pow2::@return +pow2::@return: scope:[pow2] from pow2 pow2::@1 + [7] pow2::return#2 = phi( pow2/1, pow2::@1/pow2::return#1 ) + [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 + [9] return + to:@return + +void main() +main: scope:[main] from + [10] stackpush(char) = 6 + [11] callexecute pow2 + [12] main::$0 = stackpull(char) + [13] *SCREEN = main::$0 + to:main::@return +main::@return: scope:[main] from main + [14] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +char main::$0 // 4.0 +__stackcall char pow2(char n) +char pow2::$1 // 22.0 +char pow2::c +char pow2::c#0 // 33.0 +char pow2::n +char pow2::n#0 // 16.5 +char pow2::return +char pow2::return#1 // 22.0 +char pow2::return#2 // 22.0 + +Initial phi equivalence classes +[ pow2::return#2 pow2::return#1 ] +Added variable pow2::n#0 to live range equivalence class [ pow2::n#0 ] +Added variable pow2::$1 to live range equivalence class [ pow2::$1 ] +Added variable pow2::c#0 to live range equivalence class [ pow2::c#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Complete equivalence classes +[ pow2::return#2 pow2::return#1 ] +[ pow2::n#0 ] +[ pow2::$1 ] +[ pow2::c#0 ] +[ main::$0 ] +Allocated zp[1]:2 [ pow2::return#2 pow2::return#1 ] +Allocated zp[1]:3 [ pow2::c#0 ] +Allocated zp[1]:4 [ pow2::$1 ] +Allocated zp[1]:5 [ pow2::n#0 ] +Allocated zp[1]:6 [ main::$0 ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) [ pow2::n#0 ] ( pow2:11 [ pow2::n#0 ] { } ) always clobbers reg byte a reg byte x +Statement [5] pow2::c#0 = stackpull(char) [ pow2::c#0 ] ( pow2:11 [ pow2::c#0 ] { } ) always clobbers reg byte a +Statement [6] pow2::return#1 = pow2::c#0 + pow2::c#0 [ pow2::return#1 ] ( pow2:11 [ pow2::return#1 ] { } ) always clobbers reg byte a +Statement [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 [ ] ( pow2:11 [ ] { } ) always clobbers reg byte x +Statement [10] stackpush(char) = 6 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [12] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a +Potential registers zp[1]:2 [ pow2::return#2 pow2::return#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ pow2::n#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:4 [ pow2::$1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ pow2::c#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:6 [ main::$0 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [pow2] 44: zp[1]:2 [ pow2::return#2 pow2::return#1 ] 33: zp[1]:3 [ pow2::c#0 ] 22: zp[1]:4 [ pow2::$1 ] 16.5: zp[1]:5 [ pow2::n#0 ] +Uplift Scope [main] 4: zp[1]:6 [ main::$0 ] +Uplift Scope [] + +Uplifting [pow2] best 87 combination reg byte a [ pow2::return#2 pow2::return#1 ] reg byte a [ pow2::c#0 ] reg byte a [ pow2::$1 ] reg byte a [ pow2::n#0 ] +Limited combination testing to 100 combinations of 256 possible. +Uplifting [main] best 81 combination reg byte a [ main::$0 ] +Uplifting [] best 81 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention stack +// Recursion that works (no local variables) + // Upstart + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment stage + // pow2 +// __register(A) char pow2(__register(A) char n) +pow2: { + .const OFFSET_STACK_N = 0 + .const OFFSET_STACK_RETURN_0 = 0 + // [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_N,x + // [1] if(pow2::n#0==0) goto pow2::@return -- vbuaa_eq_0_then_la1 + cmp #0 + beq __breturn_from_pow2 + jmp __b1 + // pow2::@1 + __b1: + // [2] pow2::$1 = pow2::n#0 - 1 -- vbuaa=vbuaa_minus_1 + sec + sbc #1 + // [3] stackpush(char) = pow2::$1 -- _stackpushbyte_=vbuaa + pha + // [4] callexecute pow2 -- call_vprc1 + jsr pow2 + // [5] pow2::c#0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // [6] pow2::return#1 = pow2::c#0 + pow2::c#0 -- vbuaa=vbuaa_plus_vbuaa + asl + // [7] phi from pow2::@1 to pow2::@return [phi:pow2::@1->pow2::@return] + __breturn_from___b1: + // [7] phi pow2::return#2 = pow2::return#1 [phi:pow2::@1->pow2::@return#0] -- register_copy + jmp __breturn + // [7] phi from pow2 to pow2::@return [phi:pow2->pow2::@return] + __breturn_from_pow2: + // [7] phi pow2::return#2 = 1 [phi:pow2->pow2::@return#0] -- vbuaa=vbuc1 + lda #1 + jmp __breturn + // pow2::@return + __breturn: + // [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + // [9] return + rts +} + // main +main: { + // [10] stackpush(char) = 6 -- _stackpushbyte_=vbuc1 + lda #6 + pha + // [11] callexecute pow2 -- call_vprc1 + jsr pow2 + // [12] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // [13] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [14] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __b1: +Removing instruction __breturn_from___b1: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Relabelling long label __breturn_from_pow2 to __b1 +Succesful ASM optimization Pass5RelabelLongLabels + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void main() +char main::$0 // reg byte a 4.0 +__stackcall char pow2(char n) +char pow2::$1 // reg byte a 22.0 +__constant char pow2::OFFSET_STACK_N = 0 +__constant char pow2::OFFSET_STACK_RETURN_0 = 0 +char pow2::c +char pow2::c#0 // reg byte a 33.0 +char pow2::n +char pow2::n#0 // reg byte a 16.5 +char pow2::return +char pow2::return#1 // reg byte a 22.0 +char pow2::return#2 // reg byte a 22.0 + +reg byte a [ pow2::return#2 pow2::return#1 ] +reg byte a [ pow2::n#0 ] +reg byte a [ pow2::$1 ] +reg byte a [ pow2::c#0 ] +reg byte a [ main::$0 ] + + +FINAL ASSEMBLER +Score: 72 + + // File Comments +// Test a procedure with calling convention stack +// Recursion that works (no local variables) + // Upstart + .segmentdef Program [segments="Basic, Code, Data, stage, platform"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] +.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] + + // Global Constants & labels + .const STACK_BASE = $103 + .label SCREEN = $400 +.segment stage + // pow2 +// __register(A) char pow2(__register(A) char n) +pow2: { + .const OFFSET_STACK_N = 0 + .const OFFSET_STACK_RETURN_0 = 0 + // [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) -- vbuaa=_stackidxbyte_vbuc1 + tsx + lda STACK_BASE+OFFSET_STACK_N,x + // if (n == 0) + // [1] if(pow2::n#0==0) goto pow2::@return -- vbuaa_eq_0_then_la1 + cmp #0 + beq __b1 + // pow2::@1 + // n-1 + // [2] pow2::$1 = pow2::n#0 - 1 -- vbuaa=vbuaa_minus_1 + sec + sbc #1 + // char c = pow2(n-1) + // [3] stackpush(char) = pow2::$1 -- _stackpushbyte_=vbuaa + pha + // [4] callexecute pow2 -- call_vprc1 + jsr pow2 + // [5] pow2::c#0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // return c+c; + // [6] pow2::return#1 = pow2::c#0 + pow2::c#0 -- vbuaa=vbuaa_plus_vbuaa + asl + // [7] phi from pow2::@1 to pow2::@return [phi:pow2::@1->pow2::@return] + // [7] phi pow2::return#2 = pow2::return#1 [phi:pow2::@1->pow2::@return#0] -- register_copy + jmp __breturn + // [7] phi from pow2 to pow2::@return [phi:pow2->pow2::@return] + __b1: + // [7] phi pow2::return#2 = 1 [phi:pow2->pow2::@return#0] -- vbuaa=vbuc1 + lda #1 + // pow2::@return + __breturn: + // } + // [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 -- _stackidxbyte_vbuc1=vbuaa + tsx + sta STACK_BASE+OFFSET_STACK_RETURN_0,x + // [9] return + rts +} + // main +main: { + // pow2(6) + // [10] stackpush(char) = 6 -- _stackpushbyte_=vbuc1 + lda #6 + pha + // [11] callexecute pow2 -- call_vprc1 + jsr pow2 + // [12] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ + pla + // *SCREEN = pow2(6) + // [13] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa + sta SCREEN + // main::@return + // } + // [14] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-stack-bank-5.sym b/src/test/ref/procedure-callingconvention-stack-bank-5.sym new file mode 100644 index 000000000..b914904e4 --- /dev/null +++ b/src/test/ref/procedure-callingconvention-stack-bank-5.sym @@ -0,0 +1,21 @@ +__constant char * const SCREEN = (char *) 1024 +__constant unsigned int STACK_BASE = $103 +void main() +char main::$0 // reg byte a 4.0 +__stackcall char pow2(char n) +char pow2::$1 // reg byte a 22.0 +__constant char pow2::OFFSET_STACK_N = 0 +__constant char pow2::OFFSET_STACK_RETURN_0 = 0 +char pow2::c +char pow2::c#0 // reg byte a 33.0 +char pow2::n +char pow2::n#0 // reg byte a 16.5 +char pow2::return +char pow2::return#1 // reg byte a 22.0 +char pow2::return#2 // reg byte a 22.0 + +reg byte a [ pow2::return#2 pow2::return#1 ] +reg byte a [ pow2::n#0 ] +reg byte a [ pow2::$1 ] +reg byte a [ pow2::c#0 ] +reg byte a [ main::$0 ] From b13262beb87faa5651b3c17af1ca783b78485a4b Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Tue, 4 Apr 2023 20:11:09 +0200 Subject: [PATCH 30/66] - Added test cases. - Merged remaining code change that is not in master remote. --- src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 805daac86..e3eac7744 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -137,7 +137,7 @@ public class Procedure extends Scope { } public void setCodeSegment(String codeSegment) { - this.codeSegment = codeSegment; + this.segmentCode = segmentCode; } public List getParameterNames() { From bdc4e28d0a9d8f063504b0b9e76f29738292a619 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Tue, 4 Apr 2023 23:31:56 +0200 Subject: [PATCH 31/66] - Fixed test cases going in error. - Optimized test cases and documented them properly. - Remove obscolete ref data. --- .../procedure-callingconvention-phi-bank-0.c | 2 +- .../procedure-callingconvention-phi-bank-1.c | 2 +- .../procedure-callingconvention-phi-bank-2.c | 4 +- .../procedure-callingconvention-phi-bank-3.c | 7 +- .../procedure-callingconvention-phi-bank-4.c | 4 +- ...procedure-callingconvention-stack-bank-3.c | 13 +- ...procedure-callingconvention-phi-bank-0.asm | 2 +- ...procedure-callingconvention-phi-bank-0.log | 4 +- ...procedure-callingconvention-phi-bank-1.asm | 2 +- ...procedure-callingconvention-phi-bank-1.log | 4 +- ...procedure-callingconvention-phi-bank-2.asm | 8 +- ...procedure-callingconvention-phi-bank-2.log | 47 +- ...procedure-callingconvention-phi-bank-3.asm | 8 +- ...procedure-callingconvention-phi-bank-3.log | 47 +- ...procedure-callingconvention-phi-bank-4.asm | 5 +- ...procedure-callingconvention-phi-bank-4.cfg | 2 +- ...procedure-callingconvention-phi-bank-4.log | 24 +- ...procedure-callingconvention-phi-bank-4.sym | 2 +- .../procedure-callingconvention-phi-far-0.asm | 27 - .../procedure-callingconvention-phi-far-0.cfg | 20 - .../procedure-callingconvention-phi-far-0.log | 292 ---- .../procedure-callingconvention-phi-far-0.sym | 10 - ...ocedure-callingconvention-stack-bank-3.asm | 5 +- ...ocedure-callingconvention-stack-bank-3.log | 10 +- ...rocedure-callingconvention-stack-far-0.asm | 45 - ...rocedure-callingconvention-stack-far-0.cfg | 24 - ...rocedure-callingconvention-stack-far-0.log | 469 ----- ...rocedure-callingconvention-stack-far-0.sym | 19 - ...rocedure-callingconvention-stack-far-1.asm | 45 - ...rocedure-callingconvention-stack-far-1.cfg | 24 - ...rocedure-callingconvention-stack-far-1.log | 469 ----- ...rocedure-callingconvention-stack-far-1.sym | 19 - ...rocedure-callingconvention-stack-far-2.asm | 72 - ...rocedure-callingconvention-stack-far-2.cfg | 48 - ...rocedure-callingconvention-stack-far-2.log | 851 --------- ...rocedure-callingconvention-stack-far-2.sym | 32 - ...rocedure-callingconvention-stack-far-3.asm | 68 - ...rocedure-callingconvention-stack-far-3.cfg | 39 - ...rocedure-callingconvention-stack-far-3.log | 1527 ----------------- ...rocedure-callingconvention-stack-far-3.sym | 25 - ...rocedure-callingconvention-stack-far-4.asm | 76 - ...rocedure-callingconvention-stack-far-4.cfg | 79 - ...rocedure-callingconvention-stack-far-4.log | 924 ---------- ...rocedure-callingconvention-stack-far-4.sym | 19 - ...rocedure-callingconvention-stack-far-5.asm | 110 -- ...rocedure-callingconvention-stack-far-5.cfg | 62 - ...rocedure-callingconvention-stack-far-5.log | 845 --------- ...rocedure-callingconvention-stack-far-5.sym | 30 - ...rocedure-callingconvention-stack-far-6.asm | 51 - ...rocedure-callingconvention-stack-far-6.cfg | 29 - ...rocedure-callingconvention-stack-far-6.log | 1060 ------------ ...rocedure-callingconvention-stack-far-6.sym | 21 - 52 files changed, 107 insertions(+), 7526 deletions(-) delete mode 100644 src/test/ref/procedure-callingconvention-phi-far-0.asm delete mode 100644 src/test/ref/procedure-callingconvention-phi-far-0.cfg delete mode 100644 src/test/ref/procedure-callingconvention-phi-far-0.log delete mode 100644 src/test/ref/procedure-callingconvention-phi-far-0.sym delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-0.asm delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-0.cfg delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-0.log delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-0.sym delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-1.asm delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-1.cfg delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-1.log delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-1.sym delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-2.asm delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-2.cfg delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-2.log delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-2.sym delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-3.asm delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-3.cfg delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-3.log delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-3.sym delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-4.asm delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-4.cfg delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-4.log delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-4.sym delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-5.asm delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-5.cfg delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-5.log delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-5.sym delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-6.asm delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-6.cfg delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-6.log delete mode 100644 src/test/ref/procedure-callingconvention-stack-far-6.sym diff --git a/src/test/kc/procedure-callingconvention-phi-bank-0.c b/src/test/kc/procedure-callingconvention-phi-bank-0.c index 2ab91f28b..bee484e0f 100644 --- a/src/test/kc/procedure-callingconvention-phi-bank-0.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-0.c @@ -1,4 +1,4 @@ -// Test a procedure with calling convention stack +// Test a procedure with calling convention PHI #pragma code_seg(stage) #pragma link("procedure-callingconvention-phi-bank.ld") diff --git a/src/test/kc/procedure-callingconvention-phi-bank-1.c b/src/test/kc/procedure-callingconvention-phi-bank-1.c index f534c13e7..bb4b31031 100644 --- a/src/test/kc/procedure-callingconvention-phi-bank-1.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-1.c @@ -1,4 +1,4 @@ -// Test a far call procedure with a calling convention sp +// Test a far call procedure with a calling convention PHI #pragma code_seg(stage) #pragma link("procedure-callingconvention-phi-bank.ld") diff --git a/src/test/kc/procedure-callingconvention-phi-bank-2.c b/src/test/kc/procedure-callingconvention-phi-bank-2.c index 790978c7d..5f2053c4b 100644 --- a/src/test/kc/procedure-callingconvention-phi-bank-2.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-2.c @@ -1,4 +1,4 @@ -// Test a far call procedure with a calling convention sp +// Test a far call procedure with a calling convention PHI into ROM #pragma code_seg(stage) #pragma link("procedure-callingconvention-phi-bank.ld") @@ -11,7 +11,7 @@ void main(void) { } #pragma code_seg(stage) -#pragma bank(rubbish, 1) +#pragma bank(rom, 1) // test rom bank char plus(char a, char b) { return a+b; diff --git a/src/test/kc/procedure-callingconvention-phi-bank-3.c b/src/test/kc/procedure-callingconvention-phi-bank-3.c index fc48b2e5e..0dc59a663 100644 --- a/src/test/kc/procedure-callingconvention-phi-bank-3.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-3.c @@ -1,4 +1,4 @@ -// Test a far call procedure with a calling convention sp +// Test a far call procedure with a calling convention PHI #pragma code_seg(stage) #pragma link("procedure-callingconvention-phi-bank.ld") @@ -11,8 +11,11 @@ void main(void) { } #pragma code_seg(stage) -#pragma bank(stage, 2) +#pragma bank(rom, 2) // Test rom fragment char plus(char a, char b) { return a+b; } + +#pragma nobank(dummy) + diff --git a/src/test/kc/procedure-callingconvention-phi-bank-4.c b/src/test/kc/procedure-callingconvention-phi-bank-4.c index b6e49a3a1..7075f3b6c 100644 --- a/src/test/kc/procedure-callingconvention-phi-bank-4.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-4.c @@ -7,13 +7,13 @@ char* const SCREEN = (char*)0x0400; #pragma code_seg(stage) -#pragma bank(stage, 20) +#pragma bank(ram, 20) char plus(char a, char b) { return a+b; } -#pragma nobank +#pragma nobank(dummy) void main(void) { SCREEN[0] = plus('0', 7); diff --git a/src/test/kc/procedure-callingconvention-stack-bank-3.c b/src/test/kc/procedure-callingconvention-stack-bank-3.c index 129824bb7..97313f42e 100644 --- a/src/test/kc/procedure-callingconvention-stack-bank-3.c +++ b/src/test/kc/procedure-callingconvention-stack-bank-3.c @@ -19,28 +19,33 @@ void main(void) { } } -#pragma code_seg(test) -#pragma code_seg(test2) -#pragma code_seg(test3) -#pragma code_seg(Code) +#pragma code_seg(stage) void __bank(ram, 20) pval() { printval(); } +#pragma code_seg(platform) + void __bank(ram, 21) ival() { incval(); } +#pragma code_seg(stage) + void __bank(ram, 20) printval() { SCREEN[0] = val; } + +#pragma code_seg(platform) + void __bank(ram, 21) incval() { val++; } #pragma nobank +#pragma code_seg(Code) void printother() { for(char i:0..5) { diff --git a/src/test/ref/procedure-callingconvention-phi-bank-0.asm b/src/test/ref/procedure-callingconvention-phi-bank-0.asm index 2bb668af6..4a72f9f2b 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-0.asm +++ b/src/test/ref/procedure-callingconvention-phi-bank-0.asm @@ -1,4 +1,4 @@ -// Test a procedure with calling convention stack +// Test a procedure with calling convention PHI .cpu _65c02 .segmentdef Program [segments="Basic, Code, Data, stage, platform"] .segmentdef Basic [start=$0801] diff --git a/src/test/ref/procedure-callingconvention-phi-bank-0.log b/src/test/ref/procedure-callingconvention-phi-bank-0.log index 58a2a2fd0..a8f414328 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-0.log +++ b/src/test/ref/procedure-callingconvention-phi-bank-0.log @@ -157,7 +157,7 @@ Uplifting [] best 60 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments -// Test a procedure with calling convention stack +// Test a procedure with calling convention PHI // Upstart .cpu _65c02 .segmentdef Program [segments="Basic, Code, Data, stage, platform"] @@ -231,7 +231,7 @@ FINAL ASSEMBLER Score: 24 // File Comments -// Test a procedure with calling convention stack +// Test a procedure with calling convention PHI // Upstart .cpu _65c02 .segmentdef Program [segments="Basic, Code, Data, stage, platform"] diff --git a/src/test/ref/procedure-callingconvention-phi-bank-1.asm b/src/test/ref/procedure-callingconvention-phi-bank-1.asm index ea53aa852..2a8a6ff0a 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-1.asm +++ b/src/test/ref/procedure-callingconvention-phi-bank-1.asm @@ -1,4 +1,4 @@ -// Test a far call procedure with a calling convention sp +// Test a far call procedure with a calling convention PHI .cpu _65c02 .segmentdef Program [segments="Basic, Code, Data, stage, platform"] .segmentdef Basic [start=$0801] diff --git a/src/test/ref/procedure-callingconvention-phi-bank-1.log b/src/test/ref/procedure-callingconvention-phi-bank-1.log index 5484d90f9..f7e169609 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-1.log +++ b/src/test/ref/procedure-callingconvention-phi-bank-1.log @@ -157,7 +157,7 @@ Uplifting [] best 60 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments -// Test a far call procedure with a calling convention sp +// Test a far call procedure with a calling convention PHI // Upstart .cpu _65c02 .segmentdef Program [segments="Basic, Code, Data, stage, platform"] @@ -234,7 +234,7 @@ FINAL ASSEMBLER Score: 24 // File Comments -// Test a far call procedure with a calling convention sp +// Test a far call procedure with a calling convention PHI // Upstart .cpu _65c02 .segmentdef Program [segments="Basic, Code, Data, stage, platform"] diff --git a/src/test/ref/procedure-callingconvention-phi-bank-2.asm b/src/test/ref/procedure-callingconvention-phi-bank-2.asm index 1e4b59461..25216b2f4 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-2.asm +++ b/src/test/ref/procedure-callingconvention-phi-bank-2.asm @@ -1,4 +1,4 @@ -// Test a far call procedure with a calling convention sp +// Test a far call procedure with a calling convention PHI into ROM .cpu _65c02 .segmentdef Program [segments="Basic, Code, Data, stage, platform"] .segmentdef Basic [start=$0801] @@ -12,13 +12,17 @@ .segment stage main: { // plus('0', 7) - .assert "Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare ", 0, 1 + jsr $ff6e + .byte plus + .byte 1 // SCREEN[0] = plus('0', 7) lda #plus.return sta SCREEN // } rts } +// test rom bank // char plus(char a, char b) plus: { .const a = '0' diff --git a/src/test/ref/procedure-callingconvention-phi-bank-2.log b/src/test/ref/procedure-callingconvention-phi-bank-2.log index 9b0d446f2..adb898ed6 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-2.log +++ b/src/test/ref/procedure-callingconvention-phi-bank-2.log @@ -143,14 +143,7 @@ char plus::return Initial phi equivalence classes Complete equivalence classes -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-2.c:10:17: REGISTER UPLIFT POTENTIAL REGISTERS -Potential register analysis [1] call plus missing fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare allocation: -MISSING FRAGMENTS - Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare -Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a REGISTER UPLIFT SCOPES @@ -158,25 +151,13 @@ Uplift Scope [main] Uplift Scope [plus] Uplift Scope [] -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-2.c:10:17: -Uplifting [main] best 54 combination -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-2.c:10:17: -Uplifting [plus] best 54 combination -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-2.c:10:17: -Uplifting [] best 54 combination -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-2.c:10:17: +Uplifting [main] best 60 combination +Uplifting [plus] best 60 combination +Uplifting [] best 60 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments -// Test a far call procedure with a calling convention sp +// Test a far call procedure with a calling convention PHI into ROM // Upstart .cpu _65c02 .segmentdef Program [segments="Basic, Code, Data, stage, platform"] @@ -193,9 +174,12 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] + // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_rom_finalize plus_from_main: - .assert "Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare ", 0, 1 + jsr $ff6e + .byte plus + .byte 1 jmp __b1 // main::@1 __b1: @@ -209,6 +193,7 @@ main: { rts } // plus +// test rom bank // char plus(char a, char b) plus: { .const a = '0' @@ -247,10 +232,10 @@ __constant char plus::return#1 = plus::a#0+plus::b#0 // return FINAL ASSEMBLER -Score: 18 +Score: 24 // File Comments -// Test a far call procedure with a calling convention sp +// Test a far call procedure with a calling convention PHI into ROM // Upstart .cpu _65c02 .segmentdef Program [segments="Basic, Code, Data, stage, platform"] @@ -268,8 +253,11 @@ Score: 18 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] - .assert "Missing ASM fragment Fragment not found call_far_cx16_rubbish_prepare. Attempted variations call_far_cx16_rubbish_prepare ", 0, 1 + // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_rom_finalize + jsr $ff6e + .byte plus + .byte 1 // main::@1 // SCREEN[0] = plus('0', 7) // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 @@ -281,6 +269,7 @@ main: { rts } // plus +// test rom bank // char plus(char a, char b) plus: { .const a = '0' diff --git a/src/test/ref/procedure-callingconvention-phi-bank-3.asm b/src/test/ref/procedure-callingconvention-phi-bank-3.asm index 14b4c8f88..ee036ece3 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-3.asm +++ b/src/test/ref/procedure-callingconvention-phi-bank-3.asm @@ -1,4 +1,4 @@ -// Test a far call procedure with a calling convention sp +// Test a far call procedure with a calling convention PHI .cpu _65c02 .segmentdef Program [segments="Basic, Code, Data, stage, platform"] .segmentdef Basic [start=$0801] @@ -12,13 +12,17 @@ .segment stage main: { // plus('0', 7) - .assert "Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare ", 0, 1 + jsr $ff6e + .byte plus + .byte 2 // SCREEN[0] = plus('0', 7) lda #plus.return sta SCREEN // } rts } +// Test rom fragment // char plus(char a, char b) plus: { .const a = '0' diff --git a/src/test/ref/procedure-callingconvention-phi-bank-3.log b/src/test/ref/procedure-callingconvention-phi-bank-3.log index edbe990fa..f970e5bd6 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-3.log +++ b/src/test/ref/procedure-callingconvention-phi-bank-3.log @@ -143,14 +143,7 @@ char plus::return Initial phi equivalence classes Complete equivalence classes -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-3.c:10:17: REGISTER UPLIFT POTENTIAL REGISTERS -Potential register analysis [1] call plus missing fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare allocation: -MISSING FRAGMENTS - Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare -Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a REGISTER UPLIFT SCOPES @@ -158,25 +151,13 @@ Uplift Scope [main] Uplift Scope [plus] Uplift Scope [] -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-3.c:10:17: -Uplifting [main] best 54 combination -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-3.c:10:17: -Uplifting [plus] best 54 combination -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-3.c:10:17: -Uplifting [] best 54 combination -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-bank-3.c:10:17: +Uplifting [main] best 60 combination +Uplifting [plus] best 60 combination +Uplifting [] best 60 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments -// Test a far call procedure with a calling convention sp +// Test a far call procedure with a calling convention PHI // Upstart .cpu _65c02 .segmentdef Program [segments="Basic, Code, Data, stage, platform"] @@ -193,9 +174,12 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] + // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_rom_finalize plus_from_main: - .assert "Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare ", 0, 1 + jsr $ff6e + .byte plus + .byte 2 jmp __b1 // main::@1 __b1: @@ -209,6 +193,7 @@ main: { rts } // plus +// Test rom fragment // char plus(char a, char b) plus: { .const a = '0' @@ -247,10 +232,10 @@ __constant char plus::return#1 = plus::a#0+plus::b#0 // return FINAL ASSEMBLER -Score: 18 +Score: 24 // File Comments -// Test a far call procedure with a calling convention sp +// Test a far call procedure with a calling convention PHI // Upstart .cpu _65c02 .segmentdef Program [segments="Basic, Code, Data, stage, platform"] @@ -268,8 +253,11 @@ Score: 18 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] - .assert "Missing ASM fragment Fragment not found call_far_cx16_stage_prepare. Attempted variations call_far_cx16_stage_prepare ", 0, 1 + // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_rom_finalize + jsr $ff6e + .byte plus + .byte 2 // main::@1 // SCREEN[0] = plus('0', 7) // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 @@ -281,6 +269,7 @@ main: { rts } // plus +// Test rom fragment // char plus(char a, char b) plus: { .const a = '0' diff --git a/src/test/ref/procedure-callingconvention-phi-bank-4.asm b/src/test/ref/procedure-callingconvention-phi-bank-4.asm index e67cb058e..e9d93e257 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-4.asm +++ b/src/test/ref/procedure-callingconvention-phi-bank-4.asm @@ -12,7 +12,10 @@ .segment stage main: { // plus('0', 7) - jsr plus + jsr $ff6e + .byte plus + .byte $14 // SCREEN[0] = plus('0', 7) lda #plus.return sta SCREEN diff --git a/src/test/ref/procedure-callingconvention-phi-bank-4.cfg b/src/test/ref/procedure-callingconvention-phi-bank-4.cfg index 2cc5e64ff..ce60f7fc8 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-4.cfg +++ b/src/test/ref/procedure-callingconvention-phi-bank-4.cfg @@ -1,5 +1,5 @@ -__bank(bank) void main() +void main() main: scope:[main] from [0] phi() [1] call plus diff --git a/src/test/ref/procedure-callingconvention-phi-bank-4.log b/src/test/ref/procedure-callingconvention-phi-bank-4.log index 80ecb72df..f7da854a2 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-4.log +++ b/src/test/ref/procedure-callingconvention-phi-bank-4.log @@ -15,7 +15,7 @@ plus::@return: scope:[plus] from plus return to:@return -__bank(bank) void main() +void main() main: scope:[main] from __start plus::a#0 = '0' plus::b#0 = 7 @@ -44,7 +44,7 @@ __start::@return: scope:[__start] from __start::@1 SYMBOL TABLE SSA __constant char * const SCREEN = (char *)$400 void __start() -__bank(bank) void main() +void main() char main::$0 __bank(bank) char plus(char a , char b) char plus::$0 @@ -113,7 +113,7 @@ Adding NOP phi() at start of plus FINAL CONTROL FLOW GRAPH -__bank(bank) void main() +void main() main: scope:[main] from [0] phi() [1] call plus @@ -135,7 +135,7 @@ plus::@return: scope:[plus] from plus VARIABLE REGISTER WEIGHTS -__bank(bank) void main() +void main() __bank(bank) char plus(char a , char b) char plus::a char plus::b @@ -174,9 +174,12 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] + // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_ram_finalize plus_from_main: - jsr plus + jsr $ff6e + .byte plus + .byte $14 jmp __b1 // main::@1 __b1: @@ -216,7 +219,7 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 -__bank(bank) void main() +void main() __bank(bank) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a @@ -249,8 +252,11 @@ Score: 24 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] - jsr plus + // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_ram_finalize + jsr $ff6e + .byte plus + .byte $14 // main::@1 // SCREEN[0] = plus('0', 7) // [2] *SCREEN = plus::return#0 -- _deref_pbuc1=vbuc2 diff --git a/src/test/ref/procedure-callingconvention-phi-bank-4.sym b/src/test/ref/procedure-callingconvention-phi-bank-4.sym index 303e3a74d..b274ece82 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-4.sym +++ b/src/test/ref/procedure-callingconvention-phi-bank-4.sym @@ -1,5 +1,5 @@ __constant char * const SCREEN = (char *) 1024 -__bank(bank) void main() +void main() __bank(bank) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a diff --git a/src/test/ref/procedure-callingconvention-phi-far-0.asm b/src/test/ref/procedure-callingconvention-phi-far-0.asm deleted file mode 100644 index e29b814ba..000000000 --- a/src/test/ref/procedure-callingconvention-phi-far-0.asm +++ /dev/null @@ -1,27 +0,0 @@ -// Test a procedure with calling convention stack - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-phi-far-0.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(main) - .label SCREEN = $400 -.segment Code -main: { - // plus('0', 7) - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // SCREEN[0] = plus('0', 7) - lda #plus.return - sta SCREEN - // } - rts -} -// char plus(char a, char b) -plus: { - .const a = '0' - .const b = 7 - .label return = a+b - rts -} diff --git a/src/test/ref/procedure-callingconvention-phi-far-0.cfg b/src/test/ref/procedure-callingconvention-phi-far-0.cfg deleted file mode 100644 index 5d2b8863d..000000000 --- a/src/test/ref/procedure-callingconvention-phi-far-0.cfg +++ /dev/null @@ -1,20 +0,0 @@ - -void main() -main: scope:[main] from - [0] phi() - [1] call plus - to:main::@1 -main::@1: scope:[main] from main - [2] *SCREEN = plus::return#1 - to:main::@return -main::@return: scope:[main] from main::@1 - [3] return - to:@return - -__far(bank) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - to:plus::@return -plus::@return: scope:[plus] from plus - [5] return - to:@return diff --git a/src/test/ref/procedure-callingconvention-phi-far-0.log b/src/test/ref/procedure-callingconvention-phi-far-0.log deleted file mode 100644 index 6d817cb05..000000000 --- a/src/test/ref/procedure-callingconvention-phi-far-0.log +++ /dev/null @@ -1,292 +0,0 @@ -Far call main::$0 = call plus('0', 7) - -CONTROL FLOW GRAPH SSA - -void main() -main: scope:[main] from __start - plus::a#0 = '0' - plus::b#0 = 7 - call plus - plus::return#0 = plus::return#2 - to:main::@1 -main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 - SCREEN[0] = main::$0 - to:main::@return -main::@return: scope:[main] from main::@1 - return - to:@return - -__far(bank) char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - plus::$0 = plus::a#1 + plus::b#1 - plus::return#1 = plus::$0 - to:plus::@return -plus::@return: scope:[plus] from plus - plus::return#4 = phi( plus/plus::return#1 ) - plus::return#2 = plus::return#4 - 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 -__constant char * const SCREEN = (char *)$400 -void __start() -void main() -char main::$0 -__far(bank) char plus(char a , char b) -char plus::$0 -char plus::a -char plus::a#0 -char plus::a#1 -char plus::b -char plus::b#0 -char plus::b#1 -char plus::return -char plus::return#0 -char plus::return#1 -char plus::return#2 -char plus::return#3 -char plus::return#4 - -Adding number conversion cast (unumber) 7 in plus::b#0 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast plus::b#0 = (unumber)7 -Successful SSA optimization Pass2InlineCast -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 -Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Successful SSA optimization Pass2IdenticalPhiElimination -Constant plus::a#0 = '0' -Constant plus::b#0 = 7 -Successful SSA optimization Pass2ConstantIdentification -Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 -Successful SSA optimization PassNSimplifyExpressionWithZero -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 -Constant right-side identified [5] plus::return#1 = plus::a#0 + plus::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant plus::return#1 = plus::a#0+plus::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings plus::return#0 -Constant inlined plus::return#0 = plus::return#1 -Constant inlined main::$0 = plus::return#1 -Successful SSA optimization Pass2ConstantInlining -Adding NOP phi() at start of main -Adding NOP phi() at start of plus -CALL GRAPH -Calls in [main] to plus:1 - -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes -Adding NOP phi() at start of main -Adding NOP phi() at start of plus - -FINAL CONTROL FLOW GRAPH - -void main() -main: scope:[main] from - [0] phi() - [1] call plus - to:main::@1 -main::@1: scope:[main] from main - [2] *SCREEN = plus::return#1 - to:main::@return -main::@return: scope:[main] from main::@1 - [3] return - to:@return - -__far(bank) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - to:plus::@return -plus::@return: scope:[plus] from plus - [5] return - to:@return - - -VARIABLE REGISTER WEIGHTS -void main() -__far(bank) char plus(char a , char b) -char plus::a -char plus::b -char plus::return - -Initial phi equivalence classes -Complete equivalence classes -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-far-0.c:6:17: -REGISTER UPLIFT POTENTIAL REGISTERS -Potential register analysis [1] call plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a - -REGISTER UPLIFT SCOPES -Uplift Scope [main] -Uplift Scope [plus] -Uplift Scope [] - -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-far-0.c:6:17: -Uplifting [main] best 54 combination -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-far-0.c:6:17: -Uplifting [plus] best 54 combination -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-far-0.c:6:17: -Uplifting [] best 54 combination -Warning! Unknown fragment for statement [1] call plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-phi-far-0.c:6:17: - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-phi-far-0.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(main) - // Global Constants & labels - .label SCREEN = $400 -.segment Code - // main -main: { - // [1] call plus - // [4] phi from main to plus [phi:main->plus] - plus_from_main: - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - jmp __b1 - // main::@1 - __b1: - // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 - lda #plus.return - sta SCREEN - jmp __breturn - // main::@return - __breturn: - // [3] return - rts -} - // plus -// char plus(char a, char b) -plus: { - .const a = '0' - .const b = 7 - .label return = a+b - jmp __breturn - // plus::@return - __breturn: - // [5] return - rts -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction plus_from_main: -Removing instruction __b1: -Removing instruction __breturn: -Removing instruction __breturn: -Succesful ASM optimization Pass5UnusedLabelElimination - -FINAL SYMBOL TABLE -__constant char * const SCREEN = (char *) 1024 -void main() -__far(bank) char plus(char a , char b) -char plus::a -__constant char plus::a#0 = '0' // a -char plus::b -__constant char plus::b#0 = 7 // b -char plus::return -__constant char plus::return#1 = plus::a#0+plus::b#0 // return - - - -FINAL ASSEMBLER -Score: 18 - - // File Comments -// Test a procedure with calling convention stack - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-phi-far-0.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(main) - // Global Constants & labels - .label SCREEN = $400 -.segment Code - // main -main: { - // plus('0', 7) - // [1] call plus - // [4] phi from main to plus [phi:main->plus] - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // main::@1 - // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 - lda #plus.return - sta SCREEN - // main::@return - // } - // [3] return - rts -} - // plus -// char plus(char a, char b) -plus: { - .const a = '0' - .const b = 7 - .label return = a+b - // plus::@return - // [5] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-phi-far-0.sym b/src/test/ref/procedure-callingconvention-phi-far-0.sym deleted file mode 100644 index 5e731dc09..000000000 --- a/src/test/ref/procedure-callingconvention-phi-far-0.sym +++ /dev/null @@ -1,10 +0,0 @@ -__constant char * const SCREEN = (char *) 1024 -void main() -__far(bank) char plus(char a , char b) -char plus::a -__constant char plus::a#0 = '0' // a -char plus::b -__constant char plus::b#0 = 7 // b -char plus::return -__constant char plus::return#1 = plus::a#0+plus::b#0 // return - diff --git a/src/test/ref/procedure-callingconvention-stack-bank-3.asm b/src/test/ref/procedure-callingconvention-stack-bank-3.asm index 57944cb6c..b16c0e558 100644 --- a/src/test/ref/procedure-callingconvention-stack-bank-3.asm +++ b/src/test/ref/procedure-callingconvention-stack-bank-3.asm @@ -30,12 +30,14 @@ printother: { // } rts } +.segment platform incval: { // val++; inc.z val // } rts } +.segment stage printval: { // SCREEN[0] = val lda.z val @@ -43,19 +45,20 @@ printval: { // } rts } +.segment platform ival: { // incval() jsr incval // } rts } +.segment stage pval: { // printval() jsr printval // } rts } -.segment stage main: { ldy #0 __b1: diff --git a/src/test/ref/procedure-callingconvention-stack-bank-3.log b/src/test/ref/procedure-callingconvention-stack-bank-3.log index 6c840b6f9..3037f5b3b 100644 --- a/src/test/ref/procedure-callingconvention-stack-bank-3.log +++ b/src/test/ref/procedure-callingconvention-stack-bank-3.log @@ -381,6 +381,7 @@ printother: { // [10] return rts } +.segment platform // incval incval: { // [11] val = ++ val -- vbuz1=_inc_vbuz1 @@ -391,6 +392,7 @@ incval: { // [12] return rts } +.segment stage // printval printval: { // [13] *SCREEN = val -- _deref_pbuc1=vbuz1 @@ -402,6 +404,7 @@ printval: { // [14] return rts } +.segment platform // ival ival: { // [16] callexecute incval -- call_vprc1 @@ -412,6 +415,7 @@ ival: { // [17] return rts } +.segment stage // pval pval: { // [19] callexecute printval -- call_vprc1 @@ -422,7 +426,6 @@ pval: { // [20] return rts } -.segment stage // main main: { // [22] phi from main to main::@1 [phi:main->main::@1] @@ -569,6 +572,7 @@ printother: { // [10] return rts } +.segment platform // incval incval: { // val++; @@ -579,6 +583,7 @@ incval: { // [12] return rts } +.segment stage // printval printval: { // SCREEN[0] = val @@ -590,6 +595,7 @@ printval: { // [14] return rts } +.segment platform // ival ival: { // incval() @@ -600,6 +606,7 @@ ival: { // [17] return rts } +.segment stage // pval pval: { // printval() @@ -610,7 +617,6 @@ pval: { // [20] return rts } -.segment stage // main main: { // [22] phi from main to main::@1 [phi:main->main::@1] diff --git a/src/test/ref/procedure-callingconvention-stack-far-0.asm b/src/test/ref/procedure-callingconvention-stack-far-0.asm deleted file mode 100644 index cae85630e..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-0.asm +++ /dev/null @@ -1,45 +0,0 @@ -// Test a procedure with calling convention stack - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-0.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(main) - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment Code -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // return a+b; - clc - adc.z a - // } - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - rts -} -main: { - // plus('0', 7) - lda #'0' - pha - lda #7 - pha - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - pla - pla - // SCREEN[0] = plus('0', 7) - sta SCREEN - // } - rts -} diff --git a/src/test/ref/procedure-callingconvention-stack-far-0.cfg b/src/test/ref/procedure-callingconvention-stack-far-0.cfg deleted file mode 100644 index 620247dbd..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-0.cfg +++ /dev/null @@ -1,24 +0,0 @@ - -__far(bank) __stackcall char plus(char a , char b) -plus: scope:[plus] from - [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - [2] plus::return#0 = plus::a#0 + plus::b#0 - to:plus::@return -plus::@return: scope:[plus] from plus - [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 - [4] return - to:@return - -void main() -main: scope:[main] from - [5] stackpush(char) = '0' - [6] stackpush(char) = 7 - [7] callexecute plus - sideeffect stackpullpadding(1) - [9] main::$0 = stackpull(char) - [10] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [11] return - to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-far-0.log b/src/test/ref/procedure-callingconvention-stack-far-0.log deleted file mode 100644 index 3187874dc..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-0.log +++ /dev/null @@ -1,469 +0,0 @@ -Adding parameter assignment in __stackcall procedure plus::b = param(plus::b) -Adding parameter assignment in __stackcall procedure plus::a = param(plus::a) -Far call main::$0 = call plus('0', 7) -Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call plus('0', 7) -Calling convention STACK_CALL replacing param(plus::a) with stackidx(char,plus::OFFSET_STACK_A) -Calling convention STACK_CALL replacing param(plus::b) with stackidx(char,plus::OFFSET_STACK_B) -Calling convention STACK_CALL adding stack return stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return -Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) -Calling convention STACK_CALL adding stack push stackpush(char) = '0' -Calling convention STACK_CALL adding stack push stackpush(char) = 7 - -CONTROL FLOW GRAPH SSA - -void main() -main: scope:[main] from __start - stackpush(char) = '0' - stackpush(char) = 7 - callexecute plus - sideeffect stackpullpadding(1) - main::$0 = stackpull(char) - SCREEN[0] = main::$0 - to:main::@return -main::@return: scope:[main] from main - return - to:@return - -__far(bank) __stackcall char plus(char a , char b) -plus: scope:[plus] from - plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - plus::$0 = plus::a#0 + plus::b#0 - plus::return#0 = plus::$0 - to:plus::@return -plus::@return: scope:[plus] from plus - plus::return#1 = phi( plus/plus::return#0 ) - stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#1 - 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 -__constant char * const SCREEN = (char *)$400 -__constant unsigned int STACK_BASE = $103 -void __start() -void main() -char main::$0 -__far(bank) __stackcall char plus(char a , char b) -char plus::$0 -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 -char plus::b -char plus::b#0 -char plus::return -char plus::return#0 -char plus::return#1 - -Adding number conversion cast (unumber) 7 in stackpush(char) = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast stackpush(char) = (unumber)7 -Successful SSA optimization Pass2InlineCast -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::$0 plus::return#1 -Successful SSA optimization Pass2AliasElimination -Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 -Successful SSA optimization PassNSimplifyExpressionWithZero -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 -Finalized unsigned number type (char) 1 -Successful SSA optimization PassNFinalizeNumberTypeConversions -CALL GRAPH -Calls in [main] to plus:7 - -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes - -FINAL CONTROL FLOW GRAPH - -__far(bank) __stackcall char plus(char a , char b) -plus: scope:[plus] from - [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - [2] plus::return#0 = plus::a#0 + plus::b#0 - to:plus::@return -plus::@return: scope:[plus] from plus - [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 - [4] return - to:@return - -void main() -main: scope:[main] from - [5] stackpush(char) = '0' - [6] stackpush(char) = 7 - [7] callexecute plus - sideeffect stackpullpadding(1) - [9] main::$0 = stackpull(char) - [10] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [11] return - to:@return - - -VARIABLE REGISTER WEIGHTS -void main() -char main::$0 // 4.0 -__far(bank) __stackcall char plus(char a , char b) -char plus::a -char plus::a#0 // 11.0 -char plus::b -char plus::b#0 // 22.0 -char plus::return -char plus::return#0 // 22.0 - -Initial phi equivalence classes -Added variable plus::a#0 to live range equivalence class [ plus::a#0 ] -Added variable plus::b#0 to live range equivalence class [ plus::b#0 ] -Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] -Added variable main::$0 to live range equivalence class [ main::$0 ] -Complete equivalence classes -[ plus::a#0 ] -[ plus::b#0 ] -[ plus::return#0 ] -[ main::$0 ] -Allocated zp[1]:2 [ plus::b#0 ] -Allocated zp[1]:3 [ plus::return#0 ] -Allocated zp[1]:4 [ plus::a#0 ] -Allocated zp[1]:5 [ main::$0 ] -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x -Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte a as potential for zp[1]:4 [ plus::a#0 ] -Removing always clobbered register reg byte x as potential for zp[1]:4 [ plus::a#0 ] -Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a -Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x -Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a -Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a -Potential register analysis [7] callexecute plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [7] callexecute plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a -Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x -Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x -Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a -Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x -Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a -Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a -Potential register analysis [7] callexecute plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [7] callexecute plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a -Potential registers zp[1]:4 [ plus::a#0 ] : zp[1]:4 , reg byte y , -Potential registers zp[1]:2 [ plus::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:3 [ plus::return#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:5 [ main::$0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , - -REGISTER UPLIFT SCOPES -Uplift Scope [plus] 22: zp[1]:2 [ plus::b#0 ] 22: zp[1]:3 [ plus::return#0 ] 11: zp[1]:4 [ plus::a#0 ] -Uplift Scope [main] 4: zp[1]:5 [ main::$0 ] -Uplift Scope [] - -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Uplifting [plus] best 73 combination reg byte a [ plus::b#0 ] reg byte a [ plus::return#0 ] zp[1]:4 [ plus::a#0 ] -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Uplifting [main] best 67 combination reg byte a [ main::$0 ] -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Uplifting [] best 67 combination -Attempting to uplift remaining variables inzp[1]:4 [ plus::a#0 ] -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: -Uplifting [plus] best 67 combination zp[1]:4 [ plus::a#0 ] -Allocated (was zp[1]:4) zp[1]:2 [ plus::a#0 ] -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-0.c:6:17: - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-0.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(main) - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment Code - // plus -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z a - jmp __breturn - // plus::@return - __breturn: - // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - // [4] return - rts -} - // main -main: { - // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 - lda #'0' - pha - // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 - lda #7 - pha - // [7] callexecute plus - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - jmp __breturn - // main::@return - __breturn: - // [11] 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 -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void main() -char main::$0 // reg byte a 4.0 -__far(bank) __stackcall char plus(char a , char b) -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 // a zp[1]:2 11.0 -char plus::b -char plus::b#0 // reg byte a 22.0 -char plus::return -char plus::return#0 // reg byte a 22.0 - -zp[1]:2 [ plus::a#0 ] -reg byte a [ plus::b#0 ] -reg byte a [ plus::return#0 ] -reg byte a [ main::$0 ] - - -FINAL ASSEMBLER -Score: 61 - - // File Comments -// Test a procedure with calling convention stack - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-0.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(main) - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment Code - // plus -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // return a+b; - // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z a - // plus::@return - // } - // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - // [4] return - rts -} - // main -main: { - // plus('0', 7) - // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 - lda #'0' - pha - // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 - lda #7 - pha - // [7] callexecute plus - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // SCREEN[0] = plus('0', 7) - // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - // main::@return - // } - // [11] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-stack-far-0.sym b/src/test/ref/procedure-callingconvention-stack-far-0.sym deleted file mode 100644 index 058bfd4d2..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-0.sym +++ /dev/null @@ -1,19 +0,0 @@ -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void main() -char main::$0 // reg byte a 4.0 -__far(bank) __stackcall char plus(char a , char b) -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 // a zp[1]:2 11.0 -char plus::b -char plus::b#0 // reg byte a 22.0 -char plus::return -char plus::return#0 // reg byte a 22.0 - -zp[1]:2 [ plus::a#0 ] -reg byte a [ plus::b#0 ] -reg byte a [ plus::return#0 ] -reg byte a [ main::$0 ] diff --git a/src/test/ref/procedure-callingconvention-stack-far-1.asm b/src/test/ref/procedure-callingconvention-stack-far-1.asm deleted file mode 100644 index 4d95b1c93..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-1.asm +++ /dev/null @@ -1,45 +0,0 @@ -// Test a procedure with calling convention stack - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-1.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(main) - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment Code -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // return a+b; - clc - adc.z a - // } - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - rts -} -main: { - // plus('0', 7) - lda #'0' - pha - lda #7 - pha - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - pla - pla - // SCREEN[0] = plus('0', 7) - sta SCREEN - // } - rts -} diff --git a/src/test/ref/procedure-callingconvention-stack-far-1.cfg b/src/test/ref/procedure-callingconvention-stack-far-1.cfg deleted file mode 100644 index 620247dbd..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-1.cfg +++ /dev/null @@ -1,24 +0,0 @@ - -__far(bank) __stackcall char plus(char a , char b) -plus: scope:[plus] from - [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - [2] plus::return#0 = plus::a#0 + plus::b#0 - to:plus::@return -plus::@return: scope:[plus] from plus - [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 - [4] return - to:@return - -void main() -main: scope:[main] from - [5] stackpush(char) = '0' - [6] stackpush(char) = 7 - [7] callexecute plus - sideeffect stackpullpadding(1) - [9] main::$0 = stackpull(char) - [10] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [11] return - to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-far-1.log b/src/test/ref/procedure-callingconvention-stack-far-1.log deleted file mode 100644 index c579e2fab..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-1.log +++ /dev/null @@ -1,469 +0,0 @@ -Adding parameter assignment in __stackcall procedure plus::b = param(plus::b) -Adding parameter assignment in __stackcall procedure plus::a = param(plus::a) -Far call main::$0 = call plus('0', 7) -Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call plus('0', 7) -Calling convention STACK_CALL replacing param(plus::a) with stackidx(char,plus::OFFSET_STACK_A) -Calling convention STACK_CALL replacing param(plus::b) with stackidx(char,plus::OFFSET_STACK_B) -Calling convention STACK_CALL adding stack return stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return -Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) -Calling convention STACK_CALL adding stack push stackpush(char) = '0' -Calling convention STACK_CALL adding stack push stackpush(char) = 7 - -CONTROL FLOW GRAPH SSA - -void main() -main: scope:[main] from __start - stackpush(char) = '0' - stackpush(char) = 7 - callexecute plus - sideeffect stackpullpadding(1) - main::$0 = stackpull(char) - SCREEN[0] = main::$0 - to:main::@return -main::@return: scope:[main] from main - return - to:@return - -__far(bank) __stackcall char plus(char a , char b) -plus: scope:[plus] from - plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - plus::$0 = plus::a#0 + plus::b#0 - plus::return#0 = plus::$0 - to:plus::@return -plus::@return: scope:[plus] from plus - plus::return#1 = phi( plus/plus::return#0 ) - stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#1 - 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 -__constant char * const SCREEN = (char *)$400 -__constant unsigned int STACK_BASE = $103 -void __start() -void main() -char main::$0 -__far(bank) __stackcall char plus(char a , char b) -char plus::$0 -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 -char plus::b -char plus::b#0 -char plus::return -char plus::return#0 -char plus::return#1 - -Adding number conversion cast (unumber) 7 in stackpush(char) = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast stackpush(char) = (unumber)7 -Successful SSA optimization Pass2InlineCast -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::$0 plus::return#1 -Successful SSA optimization Pass2AliasElimination -Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 -Successful SSA optimization PassNSimplifyExpressionWithZero -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 -Finalized unsigned number type (char) 1 -Successful SSA optimization PassNFinalizeNumberTypeConversions -CALL GRAPH -Calls in [main] to plus:7 - -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes - -FINAL CONTROL FLOW GRAPH - -__far(bank) __stackcall char plus(char a , char b) -plus: scope:[plus] from - [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - [2] plus::return#0 = plus::a#0 + plus::b#0 - to:plus::@return -plus::@return: scope:[plus] from plus - [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 - [4] return - to:@return - -void main() -main: scope:[main] from - [5] stackpush(char) = '0' - [6] stackpush(char) = 7 - [7] callexecute plus - sideeffect stackpullpadding(1) - [9] main::$0 = stackpull(char) - [10] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [11] return - to:@return - - -VARIABLE REGISTER WEIGHTS -void main() -char main::$0 // 4.0 -__far(bank) __stackcall char plus(char a , char b) -char plus::a -char plus::a#0 // 11.0 -char plus::b -char plus::b#0 // 22.0 -char plus::return -char plus::return#0 // 22.0 - -Initial phi equivalence classes -Added variable plus::a#0 to live range equivalence class [ plus::a#0 ] -Added variable plus::b#0 to live range equivalence class [ plus::b#0 ] -Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] -Added variable main::$0 to live range equivalence class [ main::$0 ] -Complete equivalence classes -[ plus::a#0 ] -[ plus::b#0 ] -[ plus::return#0 ] -[ main::$0 ] -Allocated zp[1]:2 [ plus::b#0 ] -Allocated zp[1]:3 [ plus::return#0 ] -Allocated zp[1]:4 [ plus::a#0 ] -Allocated zp[1]:5 [ main::$0 ] -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x -Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte a as potential for zp[1]:4 [ plus::a#0 ] -Removing always clobbered register reg byte x as potential for zp[1]:4 [ plus::a#0 ] -Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a -Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x -Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a -Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a -Potential register analysis [7] callexecute plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [7] callexecute plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a -Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x -Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x -Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a -Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x -Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a -Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a -Potential register analysis [7] callexecute plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [7] callexecute plus [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a -Potential registers zp[1]:4 [ plus::a#0 ] : zp[1]:4 , reg byte y , -Potential registers zp[1]:2 [ plus::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:3 [ plus::return#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:5 [ main::$0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , - -REGISTER UPLIFT SCOPES -Uplift Scope [plus] 22: zp[1]:2 [ plus::b#0 ] 22: zp[1]:3 [ plus::return#0 ] 11: zp[1]:4 [ plus::a#0 ] -Uplift Scope [main] 4: zp[1]:5 [ main::$0 ] -Uplift Scope [] - -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Uplifting [plus] best 73 combination reg byte a [ plus::b#0 ] reg byte a [ plus::return#0 ] zp[1]:4 [ plus::a#0 ] -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Uplifting [main] best 67 combination reg byte a [ main::$0 ] -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Uplifting [] best 67 combination -Attempting to uplift remaining variables inzp[1]:4 [ plus::a#0 ] -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: -Uplifting [plus] best 67 combination zp[1]:4 [ plus::a#0 ] -Allocated (was zp[1]:4) zp[1]:2 [ plus::a#0 ] -Warning! Unknown fragment for statement [7] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-1.c:6:17: - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-1.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(main) - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment Code - // plus -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z a - jmp __breturn - // plus::@return - __breturn: - // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - // [4] return - rts -} - // main -main: { - // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 - lda #'0' - pha - // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 - lda #7 - pha - // [7] callexecute plus - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - jmp __breturn - // main::@return - __breturn: - // [11] 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 -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void main() -char main::$0 // reg byte a 4.0 -__far(bank) __stackcall char plus(char a , char b) -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 // a zp[1]:2 11.0 -char plus::b -char plus::b#0 // reg byte a 22.0 -char plus::return -char plus::return#0 // reg byte a 22.0 - -zp[1]:2 [ plus::a#0 ] -reg byte a [ plus::b#0 ] -reg byte a [ plus::return#0 ] -reg byte a [ main::$0 ] - - -FINAL ASSEMBLER -Score: 61 - - // File Comments -// Test a procedure with calling convention stack - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-1.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(main) - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment Code - // plus -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // return a+b; - // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z a - // plus::@return - // } - // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - // [4] return - rts -} - // main -main: { - // plus('0', 7) - // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 - lda #'0' - pha - // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 - lda #7 - pha - // [7] callexecute plus - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // SCREEN[0] = plus('0', 7) - // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - // main::@return - // } - // [11] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-stack-far-1.sym b/src/test/ref/procedure-callingconvention-stack-far-1.sym deleted file mode 100644 index 058bfd4d2..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-1.sym +++ /dev/null @@ -1,19 +0,0 @@ -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void main() -char main::$0 // reg byte a 4.0 -__far(bank) __stackcall char plus(char a , char b) -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 // a zp[1]:2 11.0 -char plus::b -char plus::b#0 // reg byte a 22.0 -char plus::return -char plus::return#0 // reg byte a 22.0 - -zp[1]:2 [ plus::a#0 ] -reg byte a [ plus::b#0 ] -reg byte a [ plus::return#0 ] -reg byte a [ main::$0 ] diff --git a/src/test/ref/procedure-callingconvention-stack-far-2.asm b/src/test/ref/procedure-callingconvention-stack-far-2.asm deleted file mode 100644 index 8f742ce8a..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-2.asm +++ /dev/null @@ -1,72 +0,0 @@ -// Test a procedure with calling convention stack -// A slightly more complex call - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-2.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(__start) - .const STACK_BASE = $103 - .label SCREEN = $400 - .label i = 4 -.segment Code -__start: { - // char i = 0 - lda #0 - sta.z i - jsr main - rts -} -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // i++; - inc.z i - // return a+b; - clc - adc.z a - // } - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - rts -} -main: { - .label a = 3 - lda #0 - sta.z a - __b1: - // char v = a+1 - ldx.z a - inx - // char w = plus('0', v) - lda #'0' - pha - txa - pha - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - pla - pla - // w+a - clc - adc.z a - // SCREEN[i] = w+a - ldy.z i - sta SCREEN,y - // for(char a:0..1) - inc.z a - lda #2 - cmp.z a - bne __b1 - // } - rts -} diff --git a/src/test/ref/procedure-callingconvention-stack-far-2.cfg b/src/test/ref/procedure-callingconvention-stack-far-2.cfg deleted file mode 100644 index 0bd994142..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-2.cfg +++ /dev/null @@ -1,48 +0,0 @@ - -void __start() -__start: scope:[__start] from - [0] phi() - to:__start::__init1 -__start::__init1: scope:[__start] from __start - [1] i = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - [2] phi() - [3] call main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - [4] return - to:@return - -__far(bank) __stackcall char plus(char a , char b) -plus: scope:[plus] from - [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - [7] i = ++ i - [8] plus::return#0 = plus::a#0 + plus::b#0 - to:plus::@return -plus::@return: scope:[plus] from plus - [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 - [10] return - to:@return - -void main() -main: scope:[main] from __start::@1 - [11] phi() - to:main::@1 -main::@1: scope:[main] from main main::@1 - [12] main::a#2 = phi( main/0, main::@1/main::a#1 ) - [13] main::v#0 = main::a#2 + 1 - [14] stackpush(char) = '0' - [15] stackpush(char) = main::v#0 - [16] callexecute plus - sideeffect stackpullpadding(1) - [18] main::w#0 = stackpull(char) - [19] main::$2 = main::w#0 + main::a#2 - [20] SCREEN[i] = main::$2 - [21] main::a#1 = ++ main::a#2 - [22] if(main::a#1!=2) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - [23] return - to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-far-2.log b/src/test/ref/procedure-callingconvention-stack-far-2.log deleted file mode 100644 index 1153c5e07..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-2.log +++ /dev/null @@ -1,851 +0,0 @@ -Converting variable modified inside __stackcall procedure plus() to load/store i -Adding parameter assignment in __stackcall procedure plus::b = param(plus::b) -Adding parameter assignment in __stackcall procedure plus::a = param(plus::a) -Inlined call call __init -Far call main::w = call plus('0', main::v) -Eliminating unused variable with no statement main::$0 -Eliminating unused variable with no statement main::$1 -Calling convention __stackcall adding prepare/execute/finalize for main::w = call plus('0', main::v) -Calling convention STACK_CALL replacing param(plus::a) with stackidx(char,plus::OFFSET_STACK_A) -Calling convention STACK_CALL replacing param(plus::b) with stackidx(char,plus::OFFSET_STACK_B) -Calling convention STACK_CALL adding stack return stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return -Calling convention STACK_CALL adding stack pull main::w = stackpull(char) -Calling convention STACK_CALL adding stack push stackpush(char) = '0' -Calling convention STACK_CALL adding stack push stackpush(char) = main::v - -CONTROL FLOW GRAPH SSA - -void main() -main: scope:[main] from __start::@1 - main::a#0 = 0 - to:main::@1 -main::@1: scope:[main] from main main::@1 - main::a#2 = phi( main/main::a#0, main::@1/main::a#1 ) - main::v#0 = main::a#2 + 1 - stackpush(char) = '0' - stackpush(char) = main::v#0 - callexecute plus - sideeffect stackpullpadding(1) - main::w#0 = stackpull(char) - main::$2 = main::w#0 + main::a#2 - SCREEN[i] = main::$2 - main::a#1 = main::a#2 + rangenext(0,1) - main::$3 = main::a#1 != rangelast(0,1) - if(main::$3) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - return - to:@return - -__far(bank) __stackcall char plus(char a , char b) -plus: scope:[plus] from - plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - i = ++ i - plus::$0 = plus::a#0 + plus::b#0 - plus::return#0 = plus::$0 - to:plus::@return -plus::@return: scope:[plus] from plus - plus::return#1 = phi( plus/plus::return#0 ) - stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#1 - return - to:@return - -void __start() -__start: scope:[__start] from - to:__start::__init1 -__start::__init1: scope:[__start] from __start - i = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - call main - to:__start::@2 -__start::@2: scope:[__start] from __start::@1 - to:__start::@return -__start::@return: scope:[__start] from __start::@2 - return - to:@return - -SYMBOL TABLE SSA -__constant char * const SCREEN = (char *)$400 -__constant unsigned int STACK_BASE = $103 -void __start() -__loadstore char i -void main() -char main::$2 -bool main::$3 -char main::a -char main::a#0 -char main::a#1 -char main::a#2 -char main::v -char main::v#0 -char main::w -char main::w#0 -__far(bank) __stackcall char plus(char a , char b) -char plus::$0 -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 -char plus::b -char plus::b#0 -char plus::return -char plus::return#0 -char plus::return#1 - -Adding number conversion cast (unumber) 1 in main::v#0 = main::a#2 + 1 -Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 1 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 1 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::$0 plus::return#1 -Successful SSA optimization Pass2AliasElimination -Simple Condition main::$3 [12] if(main::a#1!=rangelast(0,1)) goto main::@1 -Successful SSA optimization Pass2ConditionalJumpSimplification -Constant main::a#0 = 0 -Successful SSA optimization Pass2ConstantIdentification -Resolved ranged next value [10] main::a#1 = ++ main::a#2 to ++ -Resolved ranged comparison value [12] if(main::a#1!=rangelast(0,1)) goto main::@1 to 2 -Adding number conversion cast (unumber) 2 in if(main::a#1!=2) goto main::@1 -Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant integer cast 2 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 2 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Inlining constant with var siblings main::a#0 -Constant inlined main::a#0 = 0 -Successful SSA optimization Pass2ConstantInlining -Finalized unsigned number type (char) 1 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Added new block during phi lifting main::@2(between main::@1 and main::@1) -Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of __start::@2 -Adding NOP phi() at start of main -CALL GRAPH -Calls in [__start] to main:3 -Calls in [main] to plus:17 - -Created 1 initial phi equivalence classes -Coalesced [25] main::a#3 = main::a#1 -Coalesced down to 1 phi equivalence classes -Culled Empty Block label __start::@2 -Culled Empty Block label main::@2 -Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of main - -FINAL CONTROL FLOW GRAPH - -void __start() -__start: scope:[__start] from - [0] phi() - to:__start::__init1 -__start::__init1: scope:[__start] from __start - [1] i = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - [2] phi() - [3] call main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - [4] return - to:@return - -__far(bank) __stackcall char plus(char a , char b) -plus: scope:[plus] from - [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - [7] i = ++ i - [8] plus::return#0 = plus::a#0 + plus::b#0 - to:plus::@return -plus::@return: scope:[plus] from plus - [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 - [10] return - to:@return - -void main() -main: scope:[main] from __start::@1 - [11] phi() - to:main::@1 -main::@1: scope:[main] from main main::@1 - [12] main::a#2 = phi( main/0, main::@1/main::a#1 ) - [13] main::v#0 = main::a#2 + 1 - [14] stackpush(char) = '0' - [15] stackpush(char) = main::v#0 - [16] callexecute plus - sideeffect stackpullpadding(1) - [18] main::w#0 = stackpull(char) - [19] main::$2 = main::w#0 + main::a#2 - [20] SCREEN[i] = main::$2 - [21] main::a#1 = ++ main::a#2 - [22] if(main::a#1!=2) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - [23] return - to:@return - -null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope plus - -VARIABLE REGISTER WEIGHTS -void __start() -__loadstore char i // 105.24999999999999 -void main() -char main::$2 // 202.0 -char main::a -char main::a#1 // 151.5 -char main::a#2 // 44.888888888888886 -char main::v -char main::v#0 // 101.0 -char main::w -char main::w#0 // 202.0 -__far(bank) __stackcall char plus(char a , char b) -char plus::a -char plus::a#0 // 667.3333333333334 -char plus::b -char plus::b#0 // 1001.0 -char plus::return -char plus::return#0 // 2002.0 - -Initial phi equivalence classes -[ main::a#2 main::a#1 ] -Added variable i to live range equivalence class [ i ] -Added variable plus::a#0 to live range equivalence class [ plus::a#0 ] -Added variable plus::b#0 to live range equivalence class [ plus::b#0 ] -Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] -Added variable main::v#0 to live range equivalence class [ main::v#0 ] -Added variable main::w#0 to live range equivalence class [ main::w#0 ] -Added variable main::$2 to live range equivalence class [ main::$2 ] -Complete equivalence classes -[ main::a#2 main::a#1 ] -[ i ] -[ plus::a#0 ] -[ plus::b#0 ] -[ plus::return#0 ] -[ main::v#0 ] -[ main::w#0 ] -[ main::$2 ] -Allocated zp[1]:2 [ plus::return#0 ] -Allocated zp[1]:3 [ plus::b#0 ] -Allocated zp[1]:4 [ plus::a#0 ] -Allocated zp[1]:5 [ main::w#0 ] -Allocated zp[1]:6 [ main::$2 ] -Allocated zp[1]:7 [ main::a#2 main::a#1 ] -Allocated zp[1]:8 [ i ] -Allocated zp[1]:9 [ main::v#0 ] -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] i = 0 [ i ] ( [ i ] { } ) always clobbers reg byte a -Statement [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ i plus::a#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 ] { } ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::a#2 main::a#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:7 [ main::a#2 main::a#1 ] -Statement [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ i plus::a#0 plus::b#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte a as potential for zp[1]:4 [ plus::a#0 ] -Removing always clobbered register reg byte x as potential for zp[1]:4 [ plus::a#0 ] -Statement [8] plus::return#0 = plus::a#0 + plus::b#0 [ i plus::return#0 ] ( main:3::plus:16 [ main::a#2 i plus::return#0 ] { } ) always clobbers reg byte a -Statement [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ i ] ( main:3::plus:16 [ main::a#2 i ] { } ) always clobbers reg byte x -Statement [14] stackpush(char) = '0' [ i main::a#2 main::v#0 ] ( main:3 [ i main::a#2 main::v#0 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:9 [ main::v#0 ] -Statement [15] stackpush(char) = main::v#0 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte a -Potential register analysis [16] callexecute plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [16] callexecute plus [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte a reg byte x reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:7 [ main::a#2 main::a#1 ] -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [18] main::w#0 = stackpull(char) [ i main::a#2 main::w#0 ] ( main:3 [ i main::a#2 main::w#0 ] { } ) always clobbers reg byte a -Statement [19] main::$2 = main::w#0 + main::a#2 [ i main::a#2 main::$2 ] ( main:3 [ i main::a#2 main::$2 ] { } ) always clobbers reg byte a -Statement [20] SCREEN[i] = main::$2 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte y -Statement [22] if(main::a#1!=2) goto main::@1 [ i main::a#1 ] ( main:3 [ i main::a#1 ] { } ) always clobbers reg byte a -Statement [1] i = 0 [ i ] ( [ i ] { } ) always clobbers reg byte a -Statement [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ i plus::a#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 ] { } ) always clobbers reg byte a reg byte x -Statement [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ i plus::a#0 plus::b#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x -Statement [8] plus::return#0 = plus::a#0 + plus::b#0 [ i plus::return#0 ] ( main:3::plus:16 [ main::a#2 i plus::return#0 ] { } ) always clobbers reg byte a -Statement [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ i ] ( main:3::plus:16 [ main::a#2 i ] { } ) always clobbers reg byte x -Statement [14] stackpush(char) = '0' [ i main::a#2 main::v#0 ] ( main:3 [ i main::a#2 main::v#0 ] { } ) always clobbers reg byte a -Statement [15] stackpush(char) = main::v#0 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte a -Potential register analysis [16] callexecute plus missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [16] callexecute plus [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [18] main::w#0 = stackpull(char) [ i main::a#2 main::w#0 ] ( main:3 [ i main::a#2 main::w#0 ] { } ) always clobbers reg byte a -Statement [19] main::$2 = main::w#0 + main::a#2 [ i main::a#2 main::$2 ] ( main:3 [ i main::a#2 main::$2 ] { } ) always clobbers reg byte a -Statement [20] SCREEN[i] = main::$2 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte y -Statement [22] if(main::a#1!=2) goto main::@1 [ i main::a#1 ] ( main:3 [ i main::a#1 ] { } ) always clobbers reg byte a -Potential registers zp[1]:7 [ main::a#2 main::a#1 ] : zp[1]:7 , -Potential registers zp[1]:8 [ i ] : zp[1]:8 , -Potential registers zp[1]:4 [ plus::a#0 ] : zp[1]:4 , reg byte y , -Potential registers zp[1]:3 [ plus::b#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:2 [ plus::return#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:9 [ main::v#0 ] : zp[1]:9 , reg byte x , reg byte y , -Potential registers zp[1]:5 [ main::w#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:6 [ main::$2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , - -REGISTER UPLIFT SCOPES -Uplift Scope [plus] 2,002: zp[1]:2 [ plus::return#0 ] 1,001: zp[1]:3 [ plus::b#0 ] 667.33: zp[1]:4 [ plus::a#0 ] -Uplift Scope [main] 202: zp[1]:5 [ main::w#0 ] 202: zp[1]:6 [ main::$2 ] 196.39: zp[1]:7 [ main::a#2 main::a#1 ] 101: zp[1]:9 [ main::v#0 ] -Uplift Scope [] 105.25: zp[1]:8 [ i ] -Uplift Scope [__start] - -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Uplifting [plus] best 885 combination reg byte a [ plus::return#0 ] reg byte a [ plus::b#0 ] zp[1]:4 [ plus::a#0 ] -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Uplifting [main] best 725 combination reg byte a [ main::w#0 ] reg byte a [ main::$2 ] zp[1]:7 [ main::a#2 main::a#1 ] reg byte x [ main::v#0 ] -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Uplifting [] best 725 combination zp[1]:8 [ i ] -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Uplifting [__start] best 725 combination -Attempting to uplift remaining variables inzp[1]:4 [ plus::a#0 ] -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Uplifting [plus] best 725 combination zp[1]:4 [ plus::a#0 ] -Attempting to uplift remaining variables inzp[1]:7 [ main::a#2 main::a#1 ] -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Uplifting [main] best 725 combination zp[1]:7 [ main::a#2 main::a#1 ] -Attempting to uplift remaining variables inzp[1]:8 [ i ] -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: -Uplifting [] best 725 combination zp[1]:8 [ i ] -Allocated (was zp[1]:4) zp[1]:2 [ plus::a#0 ] -Allocated (was zp[1]:7) zp[1]:3 [ main::a#2 main::a#1 ] -Allocated (was zp[1]:8) zp[1]:4 [ i ] -Warning! Unknown fragment for statement [16] callexecute plus -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-2.c:11:9: - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack -// A slightly more complex call - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-2.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(__start) - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 - .label i = 4 -.segment Code - // __start -__start: { - jmp __init1 - // __start::__init1 - __init1: - // [1] i = 0 -- vbuz1=vbuc1 - lda #0 - sta.z i - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - __b1_from___init1: - jmp __b1 - // __start::@1 - __b1: - // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] - main_from___b1: - jsr main - jmp __breturn - // __start::@return - __breturn: - // [4] return - rts -} - // plus -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - // [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - // [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // [7] i = ++ i -- vbuz1=_inc_vbuz1 - inc.z i - // [8] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z a - jmp __breturn - // plus::@return - __breturn: - // [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - // [10] return - rts -} - // main -main: { - .label a = 3 - // [12] phi from main to main::@1 [phi:main->main::@1] - __b1_from_main: - // [12] phi main::a#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z a - jmp __b1 - // [12] phi from main::@1 to main::@1 [phi:main::@1->main::@1] - __b1_from___b1: - // [12] phi main::a#2 = main::a#1 [phi:main::@1->main::@1#0] -- register_copy - jmp __b1 - // main::@1 - __b1: - // [13] main::v#0 = main::a#2 + 1 -- vbuxx=vbuz1_plus_1 - ldx.z a - inx - // [14] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 - lda #'0' - pha - // [15] stackpush(char) = main::v#0 -- _stackpushbyte_=vbuxx - txa - pha - // [16] callexecute plus - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - // [18] main::w#0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // [19] main::$2 = main::w#0 + main::a#2 -- vbuaa=vbuaa_plus_vbuz1 - clc - adc.z a - // [20] SCREEN[i] = main::$2 -- pbuc1_derefidx_vbuz1=vbuaa - ldy.z i - sta SCREEN,y - // [21] main::a#1 = ++ main::a#2 -- vbuz1=_inc_vbuz1 - inc.z a - // [22] if(main::a#1!=2) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #2 - cmp.z a - bne __b1_from___b1 - jmp __breturn - // main::@return - __breturn: - // [23] return - rts -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __init1 -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Replacing label __b1_from___b1 with __b1 -Removing instruction __b1_from___init1: -Removing instruction main_from___b1: -Removing instruction __b1_from___b1: -Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction __init1: -Removing instruction __b1: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __b1_from_main: -Removing instruction __breturn: -Succesful ASM optimization Pass5UnusedLabelElimination -Removing instruction jmp __b1 -Succesful ASM optimization Pass5NextJumpElimination - -FINAL SYMBOL TABLE -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void __start() -__loadstore char i // zp[1]:4 105.24999999999999 -void main() -char main::$2 // reg byte a 202.0 -char main::a -char main::a#1 // a zp[1]:3 151.5 -char main::a#2 // a zp[1]:3 44.888888888888886 -char main::v -char main::v#0 // reg byte x 101.0 -char main::w -char main::w#0 // reg byte a 202.0 -__far(bank) __stackcall char plus(char a , char b) -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 // a zp[1]:2 667.3333333333334 -char plus::b -char plus::b#0 // reg byte a 1001.0 -char plus::return -char plus::return#0 // reg byte a 2002.0 - -zp[1]:3 [ main::a#2 main::a#1 ] -zp[1]:4 [ i ] -zp[1]:2 [ plus::a#0 ] -reg byte a [ plus::b#0 ] -reg byte a [ plus::return#0 ] -reg byte x [ main::v#0 ] -reg byte a [ main::w#0 ] -reg byte a [ main::$2 ] - - -FINAL ASSEMBLER -Score: 596 - - // File Comments -// Test a procedure with calling convention stack -// A slightly more complex call - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-2.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(__start) - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 - .label i = 4 -.segment Code - // __start -__start: { - // __start::__init1 - // char i = 0 - // [1] i = 0 -- vbuz1=vbuc1 - lda #0 - sta.z i - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - // __start::@1 - // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] - jsr main - // __start::@return - // [4] return - rts -} - // plus -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - // [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - // [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // i++; - // [7] i = ++ i -- vbuz1=_inc_vbuz1 - inc.z i - // return a+b; - // [8] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z a - // plus::@return - // } - // [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - // [10] return - rts -} - // main -main: { - .label a = 3 - // [12] phi from main to main::@1 [phi:main->main::@1] - // [12] phi main::a#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z a - // [12] phi from main::@1 to main::@1 [phi:main::@1->main::@1] - // [12] phi main::a#2 = main::a#1 [phi:main::@1->main::@1#0] -- register_copy - // main::@1 - __b1: - // char v = a+1 - // [13] main::v#0 = main::a#2 + 1 -- vbuxx=vbuz1_plus_1 - ldx.z a - inx - // char w = plus('0', v) - // [14] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 - lda #'0' - pha - // [15] stackpush(char) = main::v#0 -- _stackpushbyte_=vbuxx - txa - pha - // [16] callexecute plus - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - // [18] main::w#0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // w+a - // [19] main::$2 = main::w#0 + main::a#2 -- vbuaa=vbuaa_plus_vbuz1 - clc - adc.z a - // SCREEN[i] = w+a - // [20] SCREEN[i] = main::$2 -- pbuc1_derefidx_vbuz1=vbuaa - ldy.z i - sta SCREEN,y - // for(char a:0..1) - // [21] main::a#1 = ++ main::a#2 -- vbuz1=_inc_vbuz1 - inc.z a - // [22] if(main::a#1!=2) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #2 - cmp.z a - bne __b1 - // main::@return - // } - // [23] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-stack-far-2.sym b/src/test/ref/procedure-callingconvention-stack-far-2.sym deleted file mode 100644 index d5bda0530..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-2.sym +++ /dev/null @@ -1,32 +0,0 @@ -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void __start() -__loadstore char i // zp[1]:4 105.24999999999999 -void main() -char main::$2 // reg byte a 202.0 -char main::a -char main::a#1 // a zp[1]:3 151.5 -char main::a#2 // a zp[1]:3 44.888888888888886 -char main::v -char main::v#0 // reg byte x 101.0 -char main::w -char main::w#0 // reg byte a 202.0 -__far(bank) __stackcall char plus(char a , char b) -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 // a zp[1]:2 667.3333333333334 -char plus::b -char plus::b#0 // reg byte a 1001.0 -char plus::return -char plus::return#0 // reg byte a 2002.0 - -zp[1]:3 [ main::a#2 main::a#1 ] -zp[1]:4 [ i ] -zp[1]:2 [ plus::a#0 ] -reg byte a [ plus::b#0 ] -reg byte a [ plus::return#0 ] -reg byte x [ main::v#0 ] -reg byte a [ main::w#0 ] -reg byte a [ main::$2 ] diff --git a/src/test/ref/procedure-callingconvention-stack-far-3.asm b/src/test/ref/procedure-callingconvention-stack-far-3.asm deleted file mode 100644 index 3db9a00f2..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-3.asm +++ /dev/null @@ -1,68 +0,0 @@ -// Test a procedure with calling convention stack -// Recursive fibonacci - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-3.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(main) - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment Code -// __register(A) char fib(__zp(2) char n) -fib: { - .const OFFSET_STACK_N = 0 - .const OFFSET_STACK_RETURN_0 = 0 - .label __4 = 3 - .label n = 2 - // return n; - tsx - lda STACK_BASE+OFFSET_STACK_N,x - sta.z n - // if (n == 0 || n == 1) - beq __b1 - lda #1 - cmp.z n - beq __b1 - // n-1 - lda.z n - sec - sbc #1 - // fib(n-1) - pha - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - pla - sta.z __4 - // n-2 - lda.z n - sec - sbc #2 - // fib(n-2) - pha - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - pla - // return (fib(n-1) + fib(n-2)); - clc - adc.z __4 - __breturn: - // } - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - rts - __b1: - lda.z n - jmp __breturn -} -main: { - // fib(5) - lda #5 - pha - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - pla - // *SCREEN = fib(5) - sta SCREEN - // } - rts -} diff --git a/src/test/ref/procedure-callingconvention-stack-far-3.cfg b/src/test/ref/procedure-callingconvention-stack-far-3.cfg deleted file mode 100644 index 0fda6c96f..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-3.cfg +++ /dev/null @@ -1,39 +0,0 @@ - -__far(bank) __stackcall char fib(char n) -fib: scope:[fib] from - [0] fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) - [1] if(fib::n#0==0) goto fib::@1 - to:fib::@3 -fib::@3: scope:[fib] from fib - [2] if(fib::n#0==1) goto fib::@1 - to:fib::@2 -fib::@2: scope:[fib] from fib::@3 - [3] fib::$3 = fib::n#0 - 1 - [4] stackpush(char) = fib::$3 - [5] callexecute fib - [6] fib::$4 = stackpull(char) - [7] fib::$5 = fib::n#0 - 2 - [8] stackpush(char) = fib::$5 - [9] callexecute fib - [10] fib::$6 = stackpull(char) - [11] fib::return#1 = fib::$4 + fib::$6 - to:fib::@return -fib::@return: scope:[fib] from fib::@1 fib::@2 - [12] fib::return#2 = phi( fib::@1/fib::return#3, fib::@2/fib::return#1 ) - [13] stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 - [14] return - to:@return -fib::@1: scope:[fib] from fib fib::@3 - [15] fib::return#3 = fib::n#0 - to:fib::@return - -void main() -main: scope:[main] from - [16] stackpush(char) = 5 - [17] callexecute fib - [18] main::$0 = stackpull(char) - [19] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [20] return - to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-far-3.log b/src/test/ref/procedure-callingconvention-stack-far-3.log deleted file mode 100644 index c23c61551..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-3.log +++ /dev/null @@ -1,1527 +0,0 @@ -Adding parameter assignment in __stackcall procedure fib::n = param(fib::n) -Far call main::$0 = call fib(5) -Far call fib::$4 = call fib(fib::$3) -Far call fib::$6 = call fib(fib::$5) -Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call fib(5) -Calling convention __stackcall adding prepare/execute/finalize for fib::$4 = call fib(fib::$3) -Calling convention __stackcall adding prepare/execute/finalize for fib::$6 = call fib(fib::$5) -Calling convention STACK_CALL replacing param(fib::n) with stackidx(char,fib::OFFSET_STACK_N) -Calling convention STACK_CALL adding stack return stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return -Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) -Calling convention STACK_CALL adding stack pull fib::$4 = stackpull(char) -Calling convention STACK_CALL adding stack pull fib::$6 = stackpull(char) -Calling convention STACK_CALL adding stack push stackpush(char) = 5 -Calling convention STACK_CALL adding stack push stackpush(char) = fib::$3 -Calling convention STACK_CALL adding stack push stackpush(char) = fib::$5 - -CONTROL FLOW GRAPH SSA - -void main() -main: scope:[main] from __start - stackpush(char) = 5 - callexecute fib - main::$0 = stackpull(char) - *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - return - to:@return - -__far(bank) __stackcall char fib(char n) -fib: scope:[fib] from - fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) - fib::$0 = fib::n#0 == 0 - fib::$1 = fib::n#0 == 1 - fib::$2 = fib::$0 || fib::$1 - if(fib::$2) goto fib::@1 - to:fib::@2 -fib::@1: scope:[fib] from fib - fib::n#1 = phi( fib/fib::n#0 ) - fib::return#0 = fib::n#1 - to:fib::@return -fib::@2: scope:[fib] from fib - fib::n#2 = phi( fib/fib::n#0 ) - fib::$3 = fib::n#2 - 1 - stackpush(char) = fib::$3 - callexecute fib - fib::$4 = stackpull(char) - fib::$5 = fib::n#2 - 2 - stackpush(char) = fib::$5 - callexecute fib - fib::$6 = stackpull(char) - fib::$7 = fib::$4 + fib::$6 - fib::return#1 = fib::$7 - to:fib::@return -fib::@return: scope:[fib] from fib::@1 fib::@2 - fib::return#2 = phi( fib::@1/fib::return#0, fib::@2/fib::return#1 ) - stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 - 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 -__constant char * const SCREEN = (char *)$400 -__constant unsigned int STACK_BASE = $103 -void __start() -__far(bank) __stackcall char fib(char n) -bool fib::$0 -bool fib::$1 -bool fib::$2 -number fib::$3 -char fib::$4 -number fib::$5 -char fib::$6 -char fib::$7 -__constant char fib::OFFSET_STACK_N = 0 -__constant char fib::OFFSET_STACK_RETURN_0 = 0 -char fib::n -char fib::n#0 -char fib::n#1 -char fib::n#2 -char fib::return -char fib::return#0 -char fib::return#1 -char fib::return#2 -void main() -char main::$0 - -Adding number conversion cast (unumber) 5 in stackpush(char) = 5 -Adding number conversion cast (unumber) 0 in fib::$0 = fib::n#0 == 0 -Adding number conversion cast (unumber) 1 in fib::$1 = fib::n#0 == 1 -Adding number conversion cast (unumber) 1 in fib::$3 = fib::n#2 - 1 -Adding number conversion cast (unumber) fib::$3 in fib::$3 = fib::n#2 - (unumber)1 -Adding number conversion cast (unumber) 2 in fib::$5 = fib::n#2 - 2 -Adding number conversion cast (unumber) fib::$5 in fib::$5 = fib::n#2 - (unumber)2 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast stackpush(char) = (unumber)5 -Successful SSA optimization Pass2InlineCast -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 5 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 5 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 2 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Inferred type updated to char in fib::$3 = fib::n#2 - 1 -Inferred type updated to char in fib::$5 = fib::n#2 - 2 -Alias fib::n#0 = fib::n#1 fib::return#0 fib::n#2 -Alias fib::return#1 = fib::$7 -Successful SSA optimization Pass2AliasElimination -Rewriting || if()-condition to two if()s [8] fib::$2 = fib::$0 || fib::$1 -Successful SSA optimization Pass2ConditionalAndOrRewriting -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 -Simple Condition fib::$0 [8] if(fib::n#0==0) goto fib::@1 -Simple Condition fib::$1 [21] if(fib::n#0==1) goto fib::@1 -Successful SSA optimization Pass2ConditionalJumpSimplification -CALL GRAPH -Calls in [fib] to fib:5 fib:9 -Calls in [main] to fib:18 - -Created 1 initial phi equivalence classes -Coalesced [12] fib::return#4 = fib::return#1 -Not coalescing [16] fib::return#3 = fib::n#0 -Coalesced down to 2 phi equivalence classes - -FINAL CONTROL FLOW GRAPH - -__far(bank) __stackcall char fib(char n) -fib: scope:[fib] from - [0] fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) - [1] if(fib::n#0==0) goto fib::@1 - to:fib::@3 -fib::@3: scope:[fib] from fib - [2] if(fib::n#0==1) goto fib::@1 - to:fib::@2 -fib::@2: scope:[fib] from fib::@3 - [3] fib::$3 = fib::n#0 - 1 - [4] stackpush(char) = fib::$3 - [5] callexecute fib - [6] fib::$4 = stackpull(char) - [7] fib::$5 = fib::n#0 - 2 - [8] stackpush(char) = fib::$5 - [9] callexecute fib - [10] fib::$6 = stackpull(char) - [11] fib::return#1 = fib::$4 + fib::$6 - to:fib::@return -fib::@return: scope:[fib] from fib::@1 fib::@2 - [12] fib::return#2 = phi( fib::@1/fib::return#3, fib::@2/fib::return#1 ) - [13] stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 - [14] return - to:@return -fib::@1: scope:[fib] from fib fib::@3 - [15] fib::return#3 = fib::n#0 - to:fib::@return - -void main() -main: scope:[main] from - [16] stackpush(char) = 5 - [17] callexecute fib - [18] main::$0 = stackpull(char) - [19] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [20] return - to:@return - - -VARIABLE REGISTER WEIGHTS -__far(bank) __stackcall char fib(char n) -char fib::$3 // 22.0 -char fib::$4 // 1.375 -char fib::$5 // 22.0 -char fib::$6 // 22.0 -char fib::n -char fib::n#0 // 5.5 -char fib::return -char fib::return#1 // 22.0 -char fib::return#2 // 33.0 -char fib::return#3 // 22.0 -void main() -char main::$0 // 4.0 - -Initial phi equivalence classes -[ fib::return#2 fib::return#3 fib::return#1 ] -Added variable fib::n#0 to live range equivalence class [ fib::n#0 ] -Added variable fib::$3 to live range equivalence class [ fib::$3 ] -Added variable fib::$4 to live range equivalence class [ fib::$4 ] -Added variable fib::$5 to live range equivalence class [ fib::$5 ] -Added variable fib::$6 to live range equivalence class [ fib::$6 ] -Added variable main::$0 to live range equivalence class [ main::$0 ] -Complete equivalence classes -[ fib::return#2 fib::return#3 fib::return#1 ] -[ fib::n#0 ] -[ fib::$3 ] -[ fib::$4 ] -[ fib::$5 ] -[ fib::$6 ] -[ main::$0 ] -Allocated zp[1]:2 [ fib::return#2 fib::return#3 fib::return#1 ] -Allocated zp[1]:3 [ fib::$3 ] -Allocated zp[1]:4 [ fib::$5 ] -Allocated zp[1]:5 [ fib::$6 ] -Allocated zp[1]:6 [ fib::n#0 ] -Allocated zp[1]:7 [ main::$0 ] -Allocated zp[1]:8 [ fib::$4 ] -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [0] fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte a as potential for zp[1]:8 [ fib::$4 ] -Removing always clobbered register reg byte x as potential for zp[1]:8 [ fib::$4 ] -Potential register analysis [5] callexecute fib missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [5] callexecute fib [ fib::n#0 ] ( fib:17 [ fib::n#0 ] { } ) always clobbers reg byte a reg byte x reg byte y -Removing always clobbered register reg byte a as potential for zp[1]:6 [ fib::n#0 ] -Removing always clobbered register reg byte x as potential for zp[1]:6 [ fib::n#0 ] -Removing always clobbered register reg byte y as potential for zp[1]:6 [ fib::n#0 ] -Statement [6] fib::$4 = stackpull(char) [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a -Potential register analysis [9] callexecute fib missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [9] callexecute fib [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a reg byte x reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:8 [ fib::$4 ] -Statement [10] fib::$6 = stackpull(char) [ fib::n#0 fib::$4 fib::$6 ] ( fib:17 [ fib::n#0 fib::$4 fib::$6 ] { } ) always clobbers reg byte a -Statement [11] fib::return#1 = fib::$4 + fib::$6 [ fib::n#0 fib::$4 fib::return#1 ] ( fib:17 [ fib::n#0 fib::$4 fib::return#1 ] { } ) always clobbers reg byte a -Statement [13] stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte x -Statement [16] stackpush(char) = 5 [ fib::$4 ] ( [ fib::$4 ] { } ) always clobbers reg byte a -Potential register analysis [17] callexecute fib missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [17] callexecute fib [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [18] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a -Statement [0] fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a reg byte x -Statement [1] if(fib::n#0==0) goto fib::@1 [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a -Statement [2] if(fib::n#0==1) goto fib::@1 [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a -Potential register analysis [5] callexecute fib missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [5] callexecute fib [ fib::n#0 ] ( fib:17 [ fib::n#0 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [6] fib::$4 = stackpull(char) [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a -Potential register analysis [9] callexecute fib missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [9] callexecute fib [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [10] fib::$6 = stackpull(char) [ fib::n#0 fib::$4 fib::$6 ] ( fib:17 [ fib::n#0 fib::$4 fib::$6 ] { } ) always clobbers reg byte a -Statement [11] fib::return#1 = fib::$4 + fib::$6 [ fib::n#0 fib::$4 fib::return#1 ] ( fib:17 [ fib::n#0 fib::$4 fib::return#1 ] { } ) always clobbers reg byte a -Statement [13] stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 [ fib::n#0 fib::$4 ] ( fib:17 [ fib::n#0 fib::$4 ] { } ) always clobbers reg byte x -Statement [16] stackpush(char) = 5 [ fib::$4 ] ( [ fib::$4 ] { } ) always clobbers reg byte a -Potential register analysis [17] callexecute fib missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [17] callexecute fib [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [18] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a -Potential registers zp[1]:2 [ fib::return#2 fib::return#3 fib::return#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:6 [ fib::n#0 ] : zp[1]:6 , -Potential registers zp[1]:3 [ fib::$3 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:8 [ fib::$4 ] : zp[1]:8 , -Potential registers zp[1]:4 [ fib::$5 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:5 [ fib::$6 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:7 [ main::$0 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , - -REGISTER UPLIFT SCOPES -Uplift Scope [fib] 77: zp[1]:2 [ fib::return#2 fib::return#3 fib::return#1 ] 22: zp[1]:3 [ fib::$3 ] 22: zp[1]:4 [ fib::$5 ] 22: zp[1]:5 [ fib::$6 ] 5.5: zp[1]:6 [ fib::n#0 ] 1.38: zp[1]:8 [ fib::$4 ] -Uplift Scope [main] 4: zp[1]:7 [ main::$0 ] -Uplift Scope [] - -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Uplifting [fib] best 113 combination reg byte a [ fib::return#2 fib::return#3 fib::return#1 ] reg byte a [ fib::$3 ] reg byte a [ fib::$5 ] reg byte a [ fib::$6 ] zp[1]:6 [ fib::n#0 ] zp[1]:8 [ fib::$4 ] -Limited combination testing to 100 combinations of 256 possible. -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Uplifting [main] best 107 combination reg byte a [ main::$0 ] -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Uplifting [] best 107 combination -Attempting to uplift remaining variables inzp[1]:6 [ fib::n#0 ] -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Uplifting [fib] best 107 combination zp[1]:6 [ fib::n#0 ] -Attempting to uplift remaining variables inzp[1]:8 [ fib::$4 ] -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: -Uplifting [fib] best 107 combination zp[1]:8 [ fib::$4 ] -Allocated (was zp[1]:6) zp[1]:2 [ fib::n#0 ] -Allocated (was zp[1]:8) zp[1]:3 [ fib::$4 ] -Warning! Unknown fragment for statement [5] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:13: -Warning! Unknown fragment for statement [9] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:14:24: -Warning! Unknown fragment for statement [17] callexecute fib -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-3.c:7:15: - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack -// Recursive fibonacci - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-3.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(main) - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment Code - // fib -// __register(A) char fib(__zp(2) char n) -fib: { - .const OFFSET_STACK_N = 0 - .const OFFSET_STACK_RETURN_0 = 0 - .label __4 = 3 - .label n = 2 - // [0] fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_N,x - sta.z n - // [1] if(fib::n#0==0) goto fib::@1 -- vbuz1_eq_0_then_la1 - lda.z n - beq __b1 - jmp __b3 - // fib::@3 - __b3: - // [2] if(fib::n#0==1) goto fib::@1 -- vbuz1_eq_vbuc1_then_la1 - lda #1 - cmp.z n - beq __b1 - jmp __b2 - // fib::@2 - __b2: - // [3] fib::$3 = fib::n#0 - 1 -- vbuaa=vbuz1_minus_1 - lda.z n - sec - sbc #1 - // [4] stackpush(char) = fib::$3 -- _stackpushbyte_=vbuaa - pha - // [5] callexecute fib - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [6] fib::$4 = stackpull(char) -- vbuz1=_stackpullbyte_ - pla - sta.z __4 - // [7] fib::$5 = fib::n#0 - 2 -- vbuaa=vbuz1_minus_2 - lda.z n - sec - sbc #2 - // [8] stackpush(char) = fib::$5 -- _stackpushbyte_=vbuaa - pha - // [9] callexecute fib - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [10] fib::$6 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // [11] fib::return#1 = fib::$4 + fib::$6 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z __4 - // [12] phi from fib::@1 fib::@2 to fib::@return [phi:fib::@1/fib::@2->fib::@return] - __breturn_from___b1: - __breturn_from___b2: - // [12] phi fib::return#2 = fib::return#3 [phi:fib::@1/fib::@2->fib::@return#0] -- register_copy - jmp __breturn - // fib::@return - __breturn: - // [13] stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - // [14] return - rts - // fib::@1 - __b1: - // [15] fib::return#3 = fib::n#0 -- vbuaa=vbuz1 - lda.z n - jmp __breturn_from___b1 -} - // main -main: { - // [16] stackpush(char) = 5 -- _stackpushbyte_=vbuc1 - lda #5 - pha - // [17] callexecute fib - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [18] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // [19] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - jmp __breturn - // main::@return - __breturn: - // [20] return - rts -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __b3 -Removing instruction jmp __b2 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction lda.z n -Succesful ASM optimization Pass5UnnecesaryLoadElimination -Replacing label __breturn_from___b1 with __breturn -Removing instruction __breturn_from___b1: -Removing instruction __breturn_from___b2: -Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction __b3: -Removing instruction __b2: -Removing instruction __breturn: -Succesful ASM optimization Pass5UnusedLabelElimination - -FINAL SYMBOL TABLE -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -__far(bank) __stackcall char fib(char n) -char fib::$3 // reg byte a 22.0 -char fib::$4 // zp[1]:3 1.375 -char fib::$5 // reg byte a 22.0 -char fib::$6 // reg byte a 22.0 -__constant char fib::OFFSET_STACK_N = 0 -__constant char fib::OFFSET_STACK_RETURN_0 = 0 -char fib::n -char fib::n#0 // n zp[1]:2 5.5 -char fib::return -char fib::return#1 // reg byte a 22.0 -char fib::return#2 // reg byte a 33.0 -char fib::return#3 // reg byte a 22.0 -void main() -char main::$0 // reg byte a 4.0 - -reg byte a [ fib::return#2 fib::return#3 fib::return#1 ] -zp[1]:2 [ fib::n#0 ] -reg byte a [ fib::$3 ] -zp[1]:3 [ fib::$4 ] -reg byte a [ fib::$5 ] -reg byte a [ fib::$6 ] -reg byte a [ main::$0 ] - - -FINAL ASSEMBLER -Score: 92 - - // File Comments -// Test a procedure with calling convention stack -// Recursive fibonacci - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-3.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(main) - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment Code - // fib -// __register(A) char fib(__zp(2) char n) -fib: { - .const OFFSET_STACK_N = 0 - .const OFFSET_STACK_RETURN_0 = 0 - .label __4 = 3 - .label n = 2 - // return n; - // [0] fib::n#0 = stackidx(char,fib::OFFSET_STACK_N) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_N,x - sta.z n - // if (n == 0 || n == 1) - // [1] if(fib::n#0==0) goto fib::@1 -- vbuz1_eq_0_then_la1 - beq __b1 - // fib::@3 - // [2] if(fib::n#0==1) goto fib::@1 -- vbuz1_eq_vbuc1_then_la1 - lda #1 - cmp.z n - beq __b1 - // fib::@2 - // n-1 - // [3] fib::$3 = fib::n#0 - 1 -- vbuaa=vbuz1_minus_1 - lda.z n - sec - sbc #1 - // fib(n-1) - // [4] stackpush(char) = fib::$3 -- _stackpushbyte_=vbuaa - pha - // [5] callexecute fib - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [6] fib::$4 = stackpull(char) -- vbuz1=_stackpullbyte_ - pla - sta.z __4 - // n-2 - // [7] fib::$5 = fib::n#0 - 2 -- vbuaa=vbuz1_minus_2 - lda.z n - sec - sbc #2 - // fib(n-2) - // [8] stackpush(char) = fib::$5 -- _stackpushbyte_=vbuaa - pha - // [9] callexecute fib - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [10] fib::$6 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // return (fib(n-1) + fib(n-2)); - // [11] fib::return#1 = fib::$4 + fib::$6 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z __4 - // [12] phi from fib::@1 fib::@2 to fib::@return [phi:fib::@1/fib::@2->fib::@return] - // [12] phi fib::return#2 = fib::return#3 [phi:fib::@1/fib::@2->fib::@return#0] -- register_copy - // fib::@return - __breturn: - // } - // [13] stackidx(char,fib::OFFSET_STACK_RETURN_0) = fib::return#2 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - // [14] return - rts - // fib::@1 - __b1: - // [15] fib::return#3 = fib::n#0 -- vbuaa=vbuz1 - lda.z n - jmp __breturn -} - // main -main: { - // fib(5) - // [16] stackpush(char) = 5 -- _stackpushbyte_=vbuc1 - lda #5 - pha - // [17] callexecute fib - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [18] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // *SCREEN = fib(5) - // [19] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - // main::@return - // } - // [20] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-stack-far-3.sym b/src/test/ref/procedure-callingconvention-stack-far-3.sym deleted file mode 100644 index 29b0c2f60..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-3.sym +++ /dev/null @@ -1,25 +0,0 @@ -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -__far(bank) __stackcall char fib(char n) -char fib::$3 // reg byte a 22.0 -char fib::$4 // zp[1]:3 1.375 -char fib::$5 // reg byte a 22.0 -char fib::$6 // reg byte a 22.0 -__constant char fib::OFFSET_STACK_N = 0 -__constant char fib::OFFSET_STACK_RETURN_0 = 0 -char fib::n -char fib::n#0 // n zp[1]:2 5.5 -char fib::return -char fib::return#1 // reg byte a 22.0 -char fib::return#2 // reg byte a 33.0 -char fib::return#3 // reg byte a 22.0 -void main() -char main::$0 // reg byte a 4.0 - -reg byte a [ fib::return#2 fib::return#3 fib::return#1 ] -zp[1]:2 [ fib::n#0 ] -reg byte a [ fib::$3 ] -zp[1]:3 [ fib::$4 ] -reg byte a [ fib::$5 ] -reg byte a [ fib::$6 ] -reg byte a [ main::$0 ] diff --git a/src/test/ref/procedure-callingconvention-stack-far-4.asm b/src/test/ref/procedure-callingconvention-stack-far-4.asm deleted file mode 100644 index 2c82f4133..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-4.asm +++ /dev/null @@ -1,76 +0,0 @@ -// Test a procedure with calling convention stack -// Illustrates live range problem with function variable printother::i and global variable val - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-4.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(__start) - .label SCREEN = $400 - .label val = 2 -.segment Code -__start: { - // char val = 0 - lda #0 - sta.z val - jsr main - rts -} -printother: { - ldx #0 - __b1: - // (SCREEN+40)[i]++; - inc SCREEN+$28,x - // for(char i:0..5) - inx - cpx #6 - bne __b1 - // } - rts -} -incval: { - // val++; - inc.z val - // } - rts -} -printval: { - // SCREEN[0] = val - lda.z val - sta SCREEN - // } - rts -} -ival: { - // incval() - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // } - rts -} -pval: { - // printval() - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // } - rts -} -main: { - .label i = 3 - lda #0 - sta.z i - __b1: - // pval() - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // printother() - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // ival() - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // for(char i:0..5) - inc.z i - lda #6 - cmp.z i - bne __b1 - // } - rts -} diff --git a/src/test/ref/procedure-callingconvention-stack-far-4.cfg b/src/test/ref/procedure-callingconvention-stack-far-4.cfg deleted file mode 100644 index 07de02cc3..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-4.cfg +++ /dev/null @@ -1,79 +0,0 @@ - -void __start() -__start: scope:[__start] from - [0] phi() - to:__start::__init1 -__start::__init1: scope:[__start] from __start - [1] val = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - [2] phi() - [3] callexecute main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - [4] return - to:@return - -__far(bank) __stackcall void printother() -printother: scope:[printother] from - [5] phi() - to:printother::@1 -printother::@1: scope:[printother] from printother printother::@1 - [6] printother::i#2 = phi( printother/0, printother::@1/printother::i#1 ) - [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] - [8] printother::i#1 = ++ printother::i#2 - [9] if(printother::i#1!=6) goto printother::@1 - to:printother::@return -printother::@return: scope:[printother] from printother::@1 - [10] return - to:@return - -__far(bank) __stackcall void incval() -incval: scope:[incval] from - [11] val = ++ val - to:incval::@return -incval::@return: scope:[incval] from incval - [12] return - to:@return - -__far(bank) __stackcall void printval() -printval: scope:[printval] from - [13] *SCREEN = val - to:printval::@return -printval::@return: scope:[printval] from printval - [14] return - to:@return - -__far(bank) __stackcall void ival() -ival: scope:[ival] from - [15] phi() - [16] callexecute incval - to:ival::@return -ival::@return: scope:[ival] from ival - [17] return - to:@return - -__far(bank) __stackcall void pval() -pval: scope:[pval] from - [18] phi() - [19] callexecute printval - to:pval::@return -pval::@return: scope:[pval] from pval - [20] return - to:@return - -__stackcall void main() -main: scope:[main] from - [21] phi() - to:main::@1 -main::@1: scope:[main] from main main::@1 - [22] main::i#2 = phi( main/0, main::@1/main::i#1 ) - [23] callexecute pval - [24] callexecute printother - [25] callexecute ival - [26] main::i#1 = ++ main::i#2 - [27] if(main::i#1!=6) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - [28] return - to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-far-4.log b/src/test/ref/procedure-callingconvention-stack-far-4.log deleted file mode 100644 index 677d0e3cf..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-4.log +++ /dev/null @@ -1,924 +0,0 @@ -Converting variable modified inside __stackcall procedure main() to load/store val -Inlined call call __init -Far call main::$0 = call pval -Far call main::$1 = call printother -Far call main::$2 = call ival -Far call pval::$0 = call printval -Far call ival::$0 = call incval -Calling convention __stackcall adding prepare/execute/finalize for call pval -Calling convention __stackcall adding prepare/execute/finalize for call printother -Calling convention __stackcall adding prepare/execute/finalize for call ival -Calling convention __stackcall adding prepare/execute/finalize for call printval -Calling convention __stackcall adding prepare/execute/finalize for call incval -Calling convention __stackcall adding prepare/execute/finalize for call main - -CONTROL FLOW GRAPH SSA - -__stackcall void main() -main: scope:[main] from - main::i#0 = 0 - to:main::@1 -main::@1: scope:[main] from main main::@1 - main::i#2 = phi( main/main::i#0, main::@1/main::i#1 ) - callexecute pval - callexecute printother - callexecute ival - main::i#1 = main::i#2 + rangenext(0,5) - main::$3 = main::i#1 != rangelast(0,5) - if(main::$3) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - return - to:@return - -__far(bank) __stackcall void pval() -pval: scope:[pval] from - callexecute printval - to:pval::@return -pval::@return: scope:[pval] from pval - return - to:@return - -__far(bank) __stackcall void ival() -ival: scope:[ival] from - callexecute incval - to:ival::@return -ival::@return: scope:[ival] from ival - return - to:@return - -__far(bank) __stackcall void printval() -printval: scope:[printval] from - SCREEN[0] = val - to:printval::@return -printval::@return: scope:[printval] from printval - return - to:@return - -__far(bank) __stackcall void incval() -incval: scope:[incval] from - val = ++ val - to:incval::@return -incval::@return: scope:[incval] from incval - return - to:@return - -__far(bank) __stackcall void printother() -printother: scope:[printother] from - printother::i#0 = 0 - to:printother::@1 -printother::@1: scope:[printother] from printother printother::@1 - printother::i#2 = phi( printother/printother::i#0, printother::@1/printother::i#1 ) - (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] - printother::i#1 = printother::i#2 + rangenext(0,5) - printother::$1 = printother::i#1 != rangelast(0,5) - if(printother::$1) goto printother::@1 - to:printother::@return -printother::@return: scope:[printother] from printother::@1 - return - to:@return - -void __start() -__start: scope:[__start] from - to:__start::__init1 -__start::__init1: scope:[__start] from __start - val = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - callexecute main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - return - to:@return - -SYMBOL TABLE SSA -__constant char * const SCREEN = (char *)$400 -void __start() -__far(bank) __stackcall void incval() -__far(bank) __stackcall void ival() -__stackcall void main() -bool main::$3 -char main::i -char main::i#0 -char main::i#1 -char main::i#2 -__far(bank) __stackcall void printother() -bool printother::$1 -char printother::i -char printother::i#0 -char printother::i#1 -char printother::i#2 -__far(bank) __stackcall void printval() -__far(bank) __stackcall void pval() -__loadstore char val - -Adding number conversion cast (unumber) 0 in SCREEN[0] = val -Adding number conversion cast (unumber) $28 in (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] -Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 0 -Simplifying constant integer cast $28 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) $28 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Simple Condition main::$3 [7] if(main::i#1!=rangelast(0,5)) goto main::@1 -Simple Condition printother::$1 [22] if(printother::i#1!=rangelast(0,5)) goto printother::@1 -Successful SSA optimization Pass2ConditionalJumpSimplification -Constant main::i#0 = 0 -Constant printother::i#0 = 0 -Successful SSA optimization Pass2ConstantIdentification -Resolved ranged next value [5] main::i#1 = ++ main::i#2 to ++ -Resolved ranged comparison value [7] if(main::i#1!=rangelast(0,5)) goto main::@1 to 6 -Resolved ranged next value [20] printother::i#1 = ++ printother::i#2 to ++ -Resolved ranged comparison value [22] if(printother::i#1!=rangelast(0,5)) goto printother::@1 to 6 -Simplifying expression containing zero SCREEN in [13] SCREEN[0] = val -Successful SSA optimization PassNSimplifyExpressionWithZero -Adding number conversion cast (unumber) 6 in if(main::i#1!=6) goto main::@1 -Adding number conversion cast (unumber) 6 in if(printother::i#1!=6) goto printother::@1 -Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant integer cast 6 -Simplifying constant integer cast 6 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 6 -Finalized unsigned number type (char) 6 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Inlining constant with var siblings main::i#0 -Inlining constant with var siblings printother::i#0 -Constant inlined main::i#0 = 0 -Constant inlined printother::i#0 = 0 -Successful SSA optimization Pass2ConstantInlining -Added new block during phi lifting main::@2(between main::@1 and main::@1) -Added new block during phi lifting printother::@2(between printother::@1 and printother::@1) -Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of printother -Adding NOP phi() at start of ival -Adding NOP phi() at start of pval -Adding NOP phi() at start of main -CALL GRAPH -Calls in [__start] to main:3 -Calls in [ival] to incval:17 -Calls in [pval] to printval:20 -Calls in [main] to pval:24 printother:25 ival:26 - -Created 2 initial phi equivalence classes -Coalesced [11] printother::i#3 = printother::i#1 -Coalesced [30] main::i#3 = main::i#1 -Coalesced down to 2 phi equivalence classes -Culled Empty Block label printother::@2 -Culled Empty Block label main::@2 -Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of printother -Adding NOP phi() at start of ival -Adding NOP phi() at start of pval -Adding NOP phi() at start of main - -FINAL CONTROL FLOW GRAPH - -void __start() -__start: scope:[__start] from - [0] phi() - to:__start::__init1 -__start::__init1: scope:[__start] from __start - [1] val = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - [2] phi() - [3] callexecute main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - [4] return - to:@return - -__far(bank) __stackcall void printother() -printother: scope:[printother] from - [5] phi() - to:printother::@1 -printother::@1: scope:[printother] from printother printother::@1 - [6] printother::i#2 = phi( printother/0, printother::@1/printother::i#1 ) - [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] - [8] printother::i#1 = ++ printother::i#2 - [9] if(printother::i#1!=6) goto printother::@1 - to:printother::@return -printother::@return: scope:[printother] from printother::@1 - [10] return - to:@return - -__far(bank) __stackcall void incval() -incval: scope:[incval] from - [11] val = ++ val - to:incval::@return -incval::@return: scope:[incval] from incval - [12] return - to:@return - -__far(bank) __stackcall void printval() -printval: scope:[printval] from - [13] *SCREEN = val - to:printval::@return -printval::@return: scope:[printval] from printval - [14] return - to:@return - -__far(bank) __stackcall void ival() -ival: scope:[ival] from - [15] phi() - [16] callexecute incval - to:ival::@return -ival::@return: scope:[ival] from ival - [17] return - to:@return - -__far(bank) __stackcall void pval() -pval: scope:[pval] from - [18] phi() - [19] callexecute printval - to:pval::@return -pval::@return: scope:[pval] from pval - [20] return - to:@return - -__stackcall void main() -main: scope:[main] from - [21] phi() - to:main::@1 -main::@1: scope:[main] from main main::@1 - [22] main::i#2 = phi( main/0, main::@1/main::i#1 ) - [23] callexecute pval - [24] callexecute printother - [25] callexecute ival - [26] main::i#1 = ++ main::i#2 - [27] if(main::i#1!=6) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - [28] return - to:@return - -null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope printother -null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope ival -null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope pval -null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope ival -null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope pval - -VARIABLE REGISTER WEIGHTS -void __start() -__far(bank) __stackcall void incval() -__far(bank) __stackcall void ival() -__stackcall void main() -char main::i -char main::i#1 // 151.5 -char main::i#2 // 50.5 -__far(bank) __stackcall void printother() -char printother::i -char printother::i#1 // 15001.5 -char printother::i#2 // 20002.0 -__far(bank) __stackcall void printval() -__far(bank) __stackcall void pval() -__loadstore char val // 1579.2105263157896 - -Initial phi equivalence classes -[ printother::i#2 printother::i#1 ] -[ main::i#2 main::i#1 ] -Added variable val to live range equivalence class [ val ] -Complete equivalence classes -[ printother::i#2 printother::i#1 ] -[ main::i#2 main::i#1 ] -[ val ] -Allocated zp[1]:2 [ printother::i#2 printother::i#1 ] -Allocated zp[1]:3 [ val ] -Allocated zp[1]:4 [ main::i#2 main::i#1 ] -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] val = 0 [ val ] ( [ val ] { } ) always clobbers reg byte a -Statement [13] *SCREEN = val [ val ] ( main:3::pval:23::printval:19 [ main::i#2 val ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::i#2 main::i#1 ] -Potential register analysis [16] callexecute incval missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [16] callexecute incval [ val ] ( main:3::ival:25 [ main::i#2 val ] { } ) always clobbers reg byte a reg byte x reg byte y -Removing always clobbered register reg byte x as potential for zp[1]:4 [ main::i#2 main::i#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:4 [ main::i#2 main::i#1 ] -Potential register analysis [19] callexecute printval missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [19] callexecute printval [ val ] ( main:3::pval:23 [ main::i#2 val ] { } ) always clobbers reg byte a reg byte x reg byte y -Potential register analysis [23] callexecute pval missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [23] callexecute pval [ val main::i#2 ] ( main:3 [ val main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y -Potential register analysis [24] callexecute printother missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [24] callexecute printother [ val main::i#2 ] ( main:3 [ val main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y -Potential register analysis [25] callexecute ival missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [25] callexecute ival [ val main::i#2 ] ( main:3 [ val main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [27] if(main::i#1!=6) goto main::@1 [ val main::i#1 ] ( main:3 [ val main::i#1 ] { } ) always clobbers reg byte a -Statement [1] val = 0 [ val ] ( [ val ] { } ) always clobbers reg byte a -Statement [13] *SCREEN = val [ val ] ( main:3::pval:23::printval:19 [ main::i#2 val ] { } ) always clobbers reg byte a -Potential register analysis [16] callexecute incval missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [16] callexecute incval [ val ] ( main:3::ival:25 [ main::i#2 val ] { } ) always clobbers reg byte a reg byte x reg byte y -Potential register analysis [19] callexecute printval missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [19] callexecute printval [ val ] ( main:3::pval:23 [ main::i#2 val ] { } ) always clobbers reg byte a reg byte x reg byte y -Potential register analysis [23] callexecute pval missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [23] callexecute pval [ val main::i#2 ] ( main:3 [ val main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y -Potential register analysis [24] callexecute printother missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [24] callexecute printother [ val main::i#2 ] ( main:3 [ val main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y -Potential register analysis [25] callexecute ival missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [25] callexecute ival [ val main::i#2 ] ( main:3 [ val main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [27] if(main::i#1!=6) goto main::@1 [ val main::i#1 ] ( main:3 [ val main::i#1 ] { } ) always clobbers reg byte a -Potential registers zp[1]:2 [ printother::i#2 printother::i#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:4 [ main::i#2 main::i#1 ] : zp[1]:4 , -Potential registers zp[1]:3 [ val ] : zp[1]:3 , - -REGISTER UPLIFT SCOPES -Uplift Scope [printother] 35,003.5: zp[1]:2 [ printother::i#2 printother::i#1 ] -Uplift Scope [] 1,579.21: zp[1]:3 [ val ] -Uplift Scope [main] 202: zp[1]:4 [ main::i#2 main::i#1 ] -Uplift Scope [pval] -Uplift Scope [ival] -Uplift Scope [printval] -Uplift Scope [incval] -Uplift Scope [__start] - -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -Uplifting [printother] best 623 combination reg byte x [ printother::i#2 printother::i#1 ] -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -Uplifting [] best 623 combination zp[1]:3 [ val ] -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -Uplifting [main] best 623 combination zp[1]:4 [ main::i#2 main::i#1 ] -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -Uplifting [pval] best 623 combination -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -Uplifting [ival] best 623 combination -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -Uplifting [printval] best 623 combination -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -Uplifting [incval] best 623 combination -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -Uplifting [__start] best 623 combination -Attempting to uplift remaining variables inzp[1]:3 [ val ] -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -Uplifting [] best 623 combination zp[1]:3 [ val ] -Attempting to uplift remaining variables inzp[1]:4 [ main::i#2 main::i#1 ] -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: -Uplifting [main] best 623 combination zp[1]:4 [ main::i#2 main::i#1 ] -Allocated (was zp[1]:3) zp[1]:2 [ val ] -Allocated (was zp[1]:4) zp[1]:3 [ main::i#2 main::i#1 ] -Warning! Unknown fragment for statement [16] callexecute incval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:23:5: -Warning! Unknown fragment for statement [19] callexecute printval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:19:5: -Warning! Unknown fragment for statement [23] callexecute pval -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:12:9: -Warning! Unknown fragment for statement [24] callexecute printother -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:13:9: -Warning! Unknown fragment for statement [25] callexecute ival -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-4.c:14:9: - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack -// Illustrates live range problem with function variable printother::i and global variable val - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-4.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(__start) - // Global Constants & labels - .label SCREEN = $400 - .label val = 2 -.segment Code - // __start -__start: { - jmp __init1 - // __start::__init1 - __init1: - // [1] val = 0 -- vbuz1=vbuc1 - lda #0 - sta.z val - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - __b1_from___init1: - jmp __b1 - // __start::@1 - __b1: - // [3] callexecute main -- call_vprc1 - jsr main - jmp __breturn - // __start::@return - __breturn: - // [4] return - rts -} - // printother -printother: { - // [6] phi from printother to printother::@1 [phi:printother->printother::@1] - __b1_from_printother: - // [6] phi printother::i#2 = 0 [phi:printother->printother::@1#0] -- vbuxx=vbuc1 - ldx #0 - jmp __b1 - // [6] phi from printother::@1 to printother::@1 [phi:printother::@1->printother::@1] - __b1_from___b1: - // [6] phi printother::i#2 = printother::i#1 [phi:printother::@1->printother::@1#0] -- register_copy - jmp __b1 - // printother::@1 - __b1: - // [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] -- pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx - inc SCREEN+$28,x - // [8] printother::i#1 = ++ printother::i#2 -- vbuxx=_inc_vbuxx - inx - // [9] if(printother::i#1!=6) goto printother::@1 -- vbuxx_neq_vbuc1_then_la1 - cpx #6 - bne __b1_from___b1 - jmp __breturn - // printother::@return - __breturn: - // [10] return - rts -} - // incval -incval: { - // [11] val = ++ val -- vbuz1=_inc_vbuz1 - inc.z val - jmp __breturn - // incval::@return - __breturn: - // [12] return - rts -} - // printval -printval: { - // [13] *SCREEN = val -- _deref_pbuc1=vbuz1 - lda.z val - sta SCREEN - jmp __breturn - // printval::@return - __breturn: - // [14] return - rts -} - // ival -ival: { - // [16] callexecute incval - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - jmp __breturn - // ival::@return - __breturn: - // [17] return - rts -} - // pval -pval: { - // [19] callexecute printval - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - jmp __breturn - // pval::@return - __breturn: - // [20] return - rts -} - // main -main: { - .label i = 3 - // [22] phi from main to main::@1 [phi:main->main::@1] - __b1_from_main: - // [22] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z i - jmp __b1 - // [22] phi from main::@1 to main::@1 [phi:main::@1->main::@1] - __b1_from___b1: - // [22] phi main::i#2 = main::i#1 [phi:main::@1->main::@1#0] -- register_copy - jmp __b1 - // main::@1 - __b1: - // [23] callexecute pval - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [24] callexecute printother - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [25] callexecute ival - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [26] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 - inc.z i - // [27] if(main::i#1!=6) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #6 - cmp.z i - bne __b1_from___b1 - jmp __breturn - // main::@return - __breturn: - // [28] return - rts -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __init1 -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Replacing label __b1_from___b1 with __b1 -Replacing label __b1_from___b1 with __b1 -Removing instruction __b1_from___init1: -Removing instruction __b1_from___b1: -Removing instruction __b1_from___b1: -Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction __init1: -Removing instruction __b1: -Removing instruction __breturn: -Removing instruction __b1_from_printother: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __b1_from_main: -Removing instruction __breturn: -Succesful ASM optimization Pass5UnusedLabelElimination -Removing instruction jmp __b1 -Removing instruction jmp __b1 -Succesful ASM optimization Pass5NextJumpElimination - -FINAL SYMBOL TABLE -__constant char * const SCREEN = (char *) 1024 -void __start() -__far(bank) __stackcall void incval() -__far(bank) __stackcall void ival() -__stackcall void main() -char main::i -char main::i#1 // i zp[1]:3 151.5 -char main::i#2 // i zp[1]:3 50.5 -__far(bank) __stackcall void printother() -char printother::i -char printother::i#1 // reg byte x 15001.5 -char printother::i#2 // reg byte x 20002.0 -__far(bank) __stackcall void printval() -__far(bank) __stackcall void pval() -__loadstore char val // zp[1]:2 1579.2105263157896 - -reg byte x [ printother::i#2 printother::i#1 ] -zp[1]:3 [ main::i#2 main::i#1 ] -zp[1]:2 [ val ] - - -FINAL ASSEMBLER -Score: 395 - - // File Comments -// Test a procedure with calling convention stack -// Illustrates live range problem with function variable printother::i and global variable val - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-4.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(__start) - // Global Constants & labels - .label SCREEN = $400 - .label val = 2 -.segment Code - // __start -__start: { - // __start::__init1 - // char val = 0 - // [1] val = 0 -- vbuz1=vbuc1 - lda #0 - sta.z val - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - // __start::@1 - // [3] callexecute main -- call_vprc1 - jsr main - // __start::@return - // [4] return - rts -} - // printother -printother: { - // [6] phi from printother to printother::@1 [phi:printother->printother::@1] - // [6] phi printother::i#2 = 0 [phi:printother->printother::@1#0] -- vbuxx=vbuc1 - ldx #0 - // [6] phi from printother::@1 to printother::@1 [phi:printother::@1->printother::@1] - // [6] phi printother::i#2 = printother::i#1 [phi:printother::@1->printother::@1#0] -- register_copy - // printother::@1 - __b1: - // (SCREEN+40)[i]++; - // [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] -- pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx - inc SCREEN+$28,x - // for(char i:0..5) - // [8] printother::i#1 = ++ printother::i#2 -- vbuxx=_inc_vbuxx - inx - // [9] if(printother::i#1!=6) goto printother::@1 -- vbuxx_neq_vbuc1_then_la1 - cpx #6 - bne __b1 - // printother::@return - // } - // [10] return - rts -} - // incval -incval: { - // val++; - // [11] val = ++ val -- vbuz1=_inc_vbuz1 - inc.z val - // incval::@return - // } - // [12] return - rts -} - // printval -printval: { - // SCREEN[0] = val - // [13] *SCREEN = val -- _deref_pbuc1=vbuz1 - lda.z val - sta SCREEN - // printval::@return - // } - // [14] return - rts -} - // ival -ival: { - // incval() - // [16] callexecute incval - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // ival::@return - // } - // [17] return - rts -} - // pval -pval: { - // printval() - // [19] callexecute printval - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // pval::@return - // } - // [20] return - rts -} - // main -main: { - .label i = 3 - // [22] phi from main to main::@1 [phi:main->main::@1] - // [22] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z i - // [22] phi from main::@1 to main::@1 [phi:main::@1->main::@1] - // [22] phi main::i#2 = main::i#1 [phi:main::@1->main::@1#0] -- register_copy - // main::@1 - __b1: - // pval() - // [23] callexecute pval - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // printother() - // [24] callexecute printother - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // ival() - // [25] callexecute ival - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // for(char i:0..5) - // [26] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 - inc.z i - // [27] if(main::i#1!=6) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #6 - cmp.z i - bne __b1 - // main::@return - // } - // [28] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-stack-far-4.sym b/src/test/ref/procedure-callingconvention-stack-far-4.sym deleted file mode 100644 index 0081a2b70..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-4.sym +++ /dev/null @@ -1,19 +0,0 @@ -__constant char * const SCREEN = (char *) 1024 -void __start() -__far(bank) __stackcall void incval() -__far(bank) __stackcall void ival() -__stackcall void main() -char main::i -char main::i#1 // i zp[1]:3 151.5 -char main::i#2 // i zp[1]:3 50.5 -__far(bank) __stackcall void printother() -char printother::i -char printother::i#1 // reg byte x 15001.5 -char printother::i#2 // reg byte x 20002.0 -__far(bank) __stackcall void printval() -__far(bank) __stackcall void pval() -__loadstore char val // zp[1]:2 1579.2105263157896 - -reg byte x [ printother::i#2 printother::i#1 ] -zp[1]:3 [ main::i#2 main::i#1 ] -zp[1]:2 [ val ] diff --git a/src/test/ref/procedure-callingconvention-stack-far-5.asm b/src/test/ref/procedure-callingconvention-stack-far-5.asm deleted file mode 100644 index 31f8416e8..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-5.asm +++ /dev/null @@ -1,110 +0,0 @@ -// Test a procedure with calling convention stack -// Returning and passing struct values - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-5.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(__start) - .const OFFSET_STRUCT_POINT_Y = 1 - .const SIZEOF_STRUCT_POINT = 2 - .const STACK_BASE = $103 - .label SCREEN = $400 - .label idx = 4 -.segment Code -__start: { - // char idx = 0 - lda #0 - sta.z idx - jsr main - rts -} -// void print(__zp(2) struct Point p) -print: { - .const OFFSET_STACK_P = 0 - .label p = 2 - tsx - lda STACK_BASE+OFFSET_STACK_P,x - sta.z p - lda STACK_BASE+OFFSET_STACK_P+1,x - sta.z p+1 - // SCREEN[idx++] = p.x - lda.z p - ldy.z idx - sta SCREEN,y - // SCREEN[idx++] = p.x; - inc.z idx - // SCREEN[idx++] = p.y - lda.z p+OFFSET_STRUCT_POINT_Y - ldy.z idx - sta SCREEN,y - // SCREEN[idx++] = p.y; - inc.z idx - // } - rts -} -// __zp(6) struct Point get(__register(X) char i) -get: { - .const OFFSET_STACK_I = 0 - .const OFFSET_STACK_RETURN_0 = 0 - .label return = 6 - .label p = 8 - tsx - lda STACK_BASE+OFFSET_STACK_I,x - tax - // i/2 - txa - lsr - // struct Point p = { i, i/2 } - stx.z p - sta.z p+OFFSET_STRUCT_POINT_Y - // return p; - ldy #SIZEOF_STRUCT_POINT - !: - lda p-1,y - sta return-1,y - dey - bne !- - // } - tsx - lda.z return - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - lda.z return+1 - sta STACK_BASE+OFFSET_STACK_RETURN_0+1,x - rts -} -main: { - .label p = 2 - .label i = 5 - lda #0 - sta.z i - __b1: - // for(char i=0;i<5;i++) - lda.z i - cmp #5 - bcc __b2 - // } - rts - __b2: - // struct Point p = get(i) - lda.z i - pha - pha - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - pla - sta.z p - pla - sta.z p+1 - // print(p) - pha - lda.z p - pha - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - pla - pla - // for(char i=0;i<5;i++) - inc.z i - jmp __b1 -} diff --git a/src/test/ref/procedure-callingconvention-stack-far-5.cfg b/src/test/ref/procedure-callingconvention-stack-far-5.cfg deleted file mode 100644 index 0e44c7ff7..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-5.cfg +++ /dev/null @@ -1,62 +0,0 @@ - -void __start() -__start: scope:[__start] from - [0] phi() - to:__start::__init1 -__start::__init1: scope:[__start] from __start - [1] idx = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - [2] phi() - [3] callexecute main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - [4] return - to:@return - -__far(bank) __stackcall void print(struct Point p) -print: scope:[print] from - [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) - [6] SCREEN[idx] = *((char *)&print::p) - [7] idx = ++ idx - [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) - [9] idx = ++ idx - to:print::@return -print::@return: scope:[print] from print - [10] return - to:@return - -__far(bank) __stackcall struct Point get(char i) -get: scope:[get] from - [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) - [12] get::$0 = get::i#0 >> 1 - [13] *((char *)&get::p) = get::i#0 - [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 - [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) - to:get::@return -get::@return: scope:[get] from get - [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return - [17] return - to:@return - -__stackcall void main() -main: scope:[main] from - [18] phi() - to:main::@1 -main::@1: scope:[main] from main main::@2 - [19] main::i#2 = phi( main/0, main::@2/main::i#1 ) - [20] if(main::i#2<5) goto main::@2 - to:main::@return -main::@return: scope:[main] from main::@1 - [21] return - to:@return -main::@2: scope:[main] from main::@1 - [22] stackpush(char) = main::i#2 - sideeffect stackpushpadding(1) - [24] callexecute get - [25] main::p = stackpull(struct Point) - [26] stackpush(struct Point) = main::p - [27] callexecute print - sideeffect stackpullpadding(2) - [29] main::i#1 = ++ main::i#2 - to:main::@1 diff --git a/src/test/ref/procedure-callingconvention-stack-far-5.log b/src/test/ref/procedure-callingconvention-stack-far-5.log deleted file mode 100644 index f6cd22af4..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-5.log +++ /dev/null @@ -1,845 +0,0 @@ -Converting variable modified inside __stackcall procedure main() to load/store idx -Adding parameter assignment in __stackcall procedure get::i = param(get::i) -Adding parameter assignment in __stackcall procedure print::p = param(print::p) -Inlined call call __init -Far call main::p = call get(main::i) -Far call main::$2 = call print(main::p) -Eliminating unused variable with no statement main::$1 -Calling convention __stackcall adding prepare/execute/finalize for main::p = call get(main::i) -Calling convention __stackcall adding prepare/execute/finalize for call print(main::p) -Calling convention __stackcall adding prepare/execute/finalize for call main -Calling convention STACK_CALL replacing param(get::i) with stackidx(char,get::OFFSET_STACK_I) -Calling convention STACK_CALL replacing param(print::p) with stackidx(struct Point,print::OFFSET_STACK_P) -Calling convention STACK_CALL adding stack return stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return -Calling convention STACK_CALL adding stack pull main::p = stackpull(struct Point) -Calling convention STACK_CALL adding stack push stackpush(char) = main::i -Calling convention STACK_CALL adding stack push stackpush(struct Point) = main::p -Removing C-classic struct-unwound assignment get::p = struct-unwound {*((char *)&get::p+OFFSET_STRUCT_POINT_X), *((char *)&get::p+OFFSET_STRUCT_POINT_Y)} -Removing C-classic struct-unwound assignment get::return = struct-unwound {*(&get::return)} - -CONTROL FLOW GRAPH SSA - -__stackcall void main() -main: scope:[main] from - main::i#0 = 0 - to:main::@1 -main::@1: scope:[main] from main main::@2 - main::i#2 = phi( main/main::i#0, main::@2/main::i#1 ) - main::$0 = main::i#2 < 5 - if(main::$0) goto main::@2 - to:main::@return -main::@2: scope:[main] from main::@1 - main::i#3 = phi( main::@1/main::i#2 ) - stackpush(char) = main::i#3 - sideeffect stackpushpadding(1) - callexecute get - main::p = stackpull(struct Point) - stackpush(struct Point) = main::p - callexecute print - sideeffect stackpullpadding(2) - main::i#1 = ++ main::i#3 - to:main::@1 -main::@return: scope:[main] from main::@1 - return - to:@return - -__far(bank) __stackcall struct Point get(char i) -get: scope:[get] from - get::i#0 = stackidx(char,get::OFFSET_STACK_I) - get::$0 = get::i#0 / 2 - *((char *)&get::p+OFFSET_STRUCT_POINT_X) = get::i#0 - *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 - *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) - to:get::@return -get::@return: scope:[get] from get - stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return - return - to:@return - -__far(bank) __stackcall void print(struct Point p) -print: scope:[print] from - print::p = stackidx(struct Point,print::OFFSET_STACK_P) - SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_X) - idx = ++ idx - SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) - idx = ++ idx - to:print::@return -print::@return: scope:[print] from print - return - to:@return - -void __start() -__start: scope:[__start] from - to:__start::__init1 -__start::__init1: scope:[__start] from __start - idx = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - callexecute main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - return - to:@return - -SYMBOL TABLE SSA -__constant char OFFSET_STRUCT_POINT_X = 0 -__constant char OFFSET_STRUCT_POINT_Y = 1 -__constant char * const SCREEN = (char *)$400 -__constant char SIZEOF_STRUCT_POINT = 2 -__constant unsigned int STACK_BASE = $103 -void __start() -__far(bank) __stackcall struct Point get(char i) -number get::$0 -__constant char get::OFFSET_STACK_I = 0 -__constant char get::OFFSET_STACK_RETURN_0 = 0 -char get::i -char get::i#0 -__loadstore struct Point get::p -__loadstore struct Point get::return -__loadstore char idx -__stackcall void main() -bool main::$0 -char main::i -char main::i#0 -char main::i#1 -char main::i#2 -char main::i#3 -__loadstore struct Point main::p -__far(bank) __stackcall void print(struct Point p) -__constant char print::OFFSET_STACK_P = 0 -__loadstore struct Point print::p - -Adding number conversion cast (unumber) 5 in main::$0 = main::i#2 < 5 -Adding number conversion cast (unumber) 2 in get::$0 = get::i#0 / 2 -Adding number conversion cast (unumber) get::$0 in get::$0 = get::i#0 / (unumber)2 -Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 5 -Finalized unsigned number type (char) 2 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Inferred type updated to char in get::$0 = get::i#0 / 2 -Alias main::i#2 = main::i#3 -Successful SSA optimization Pass2AliasElimination -Simple Condition main::$0 [3] if(main::i#2<5) goto main::@2 -Successful SSA optimization Pass2ConditionalJumpSimplification -Constant main::i#0 = 0 -Successful SSA optimization Pass2ConstantIdentification -Simplifying expression containing zero (char *)&get::p in [15] *((char *)&get::p+OFFSET_STRUCT_POINT_X) = get::i#0 -Simplifying expression containing zero (char *)&print::p in [21] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_X) -Successful SSA optimization PassNSimplifyExpressionWithZero -Eliminating unused constant OFFSET_STRUCT_POINT_X -Successful SSA optimization PassNEliminateUnusedVars -Rewriting division to use shift [12] get::$0 = get::i#0 / 2 -Successful SSA optimization Pass2MultiplyToShiftRewriting -Inlining constant with var siblings main::i#0 -Constant inlined main::i#0 = 0 -Successful SSA optimization Pass2ConstantInlining -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 2 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of main -CALL GRAPH -Calls in [__start] to main:3 -Calls in [main] to get:24 print:27 - -Created 1 initial phi equivalence classes -Coalesced [30] main::i#4 = main::i#1 -Coalesced down to 1 phi equivalence classes -Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of main - -FINAL CONTROL FLOW GRAPH - -void __start() -__start: scope:[__start] from - [0] phi() - to:__start::__init1 -__start::__init1: scope:[__start] from __start - [1] idx = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - [2] phi() - [3] callexecute main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - [4] return - to:@return - -__far(bank) __stackcall void print(struct Point p) -print: scope:[print] from - [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) - [6] SCREEN[idx] = *((char *)&print::p) - [7] idx = ++ idx - [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) - [9] idx = ++ idx - to:print::@return -print::@return: scope:[print] from print - [10] return - to:@return - -__far(bank) __stackcall struct Point get(char i) -get: scope:[get] from - [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) - [12] get::$0 = get::i#0 >> 1 - [13] *((char *)&get::p) = get::i#0 - [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 - [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) - to:get::@return -get::@return: scope:[get] from get - [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return - [17] return - to:@return - -__stackcall void main() -main: scope:[main] from - [18] phi() - to:main::@1 -main::@1: scope:[main] from main main::@2 - [19] main::i#2 = phi( main/0, main::@2/main::i#1 ) - [20] if(main::i#2<5) goto main::@2 - to:main::@return -main::@return: scope:[main] from main::@1 - [21] return - to:@return -main::@2: scope:[main] from main::@1 - [22] stackpush(char) = main::i#2 - sideeffect stackpushpadding(1) - [24] callexecute get - [25] main::p = stackpull(struct Point) - [26] stackpush(struct Point) = main::p - [27] callexecute print - sideeffect stackpullpadding(2) - [29] main::i#1 = ++ main::i#2 - to:main::@1 - -null depth in calling loop Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 in scope print -null depth in calling loop Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 in scope get - -VARIABLE REGISTER WEIGHTS -void __start() -__far(bank) __stackcall struct Point get(char i) -char get::$0 // 1001.0 -char get::i -char get::i#0 // 1501.5 -__loadstore struct Point get::p -__loadstore struct Point get::return // 47.666666666666664 -__loadstore char idx // 316.2105263157895 -__stackcall void main() -char main::i -char main::i#1 // 202.0 -char main::i#2 // 44.888888888888886 -__loadstore struct Point main::p // 202.0 -__far(bank) __stackcall void print(struct Point p) -__loadstore struct Point print::p // 333.6666666666667 - -Initial phi equivalence classes -[ main::i#2 main::i#1 ] -Added variable idx to live range equivalence class [ idx ] -Added variable print::p to live range equivalence class [ print::p ] -Added variable get::i#0 to live range equivalence class [ get::i#0 ] -Added variable get::$0 to live range equivalence class [ get::$0 ] -Added variable main::p to live range equivalence class [ main::p ] -Added variable get::return to live range equivalence class [ get::return ] -Added variable get::p to live range equivalence class [ get::p ] -Complete equivalence classes -[ main::i#2 main::i#1 ] -[ idx ] -[ print::p ] -[ get::i#0 ] -[ get::$0 ] -[ main::p ] -[ get::return ] -[ get::p ] -Allocated zp[1]:2 [ get::i#0 ] -Allocated zp[1]:3 [ get::$0 ] -Allocated zp[2]:4 [ print::p ] -Allocated zp[1]:6 [ idx ] -Allocated zp[1]:7 [ main::i#2 main::i#1 ] -Allocated zp[2]:8 [ main::p ] -Allocated zp[2]:10 [ get::return ] -Allocated zp[2]:12 [ get::p ] -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] idx = 0 [ idx get::p get::return ] ( [ idx get::p get::return ] { } ) always clobbers reg byte a -Statement [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::i#2 main::i#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:7 [ main::i#2 main::i#1 ] -Statement [6] SCREEN[idx] = *((char *)&print::p) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:7 [ main::i#2 main::i#1 ] -Statement [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) [ idx ] ( main:3::print:27 [ get::p get::return main::i#2 idx ] { } ) always clobbers reg byte a reg byte y -Statement [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) [ get::i#0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::p get::return ] { } ) always clobbers reg byte a reg byte x -Statement [12] get::$0 = get::i#0 >> 1 [ get::i#0 get::$0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::$0 get::p get::return ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:2 [ get::i#0 ] -Statement [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte y -Statement [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte x -Statement [20] if(main::i#2<5) goto main::@2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a -Statement [22] stackpush(char) = main::i#2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a -Potential register analysis [24] callexecute get missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [24] callexecute get [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [25] main::p = stackpull(struct Point) [ idx get::p get::return main::i#2 main::p ] ( main:3 [ idx get::p get::return main::i#2 main::p ] { } ) always clobbers reg byte a -Statement [26] stackpush(struct Point) = main::p [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a -Potential register analysis [27] callexecute print missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [27] callexecute print [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement sideeffect stackpullpadding(2) always clobbers reg byte a -Statement [1] idx = 0 [ idx get::p get::return ] ( [ idx get::p get::return ] { } ) always clobbers reg byte a -Statement [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte x -Statement [6] SCREEN[idx] = *((char *)&print::p) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte y -Statement [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) [ idx ] ( main:3::print:27 [ get::p get::return main::i#2 idx ] { } ) always clobbers reg byte a reg byte y -Statement [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) [ get::i#0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::p get::return ] { } ) always clobbers reg byte a reg byte x -Statement [12] get::$0 = get::i#0 >> 1 [ get::i#0 get::$0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::$0 get::p get::return ] { } ) always clobbers reg byte a -Statement [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte y -Statement [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte x -Statement [20] if(main::i#2<5) goto main::@2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a -Statement [22] stackpush(char) = main::i#2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a -Potential register analysis [24] callexecute get missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [24] callexecute get [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [25] main::p = stackpull(struct Point) [ idx get::p get::return main::i#2 main::p ] ( main:3 [ idx get::p get::return main::i#2 main::p ] { } ) always clobbers reg byte a -Statement [26] stackpush(struct Point) = main::p [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a -Potential register analysis [27] callexecute print missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [27] callexecute print [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement sideeffect stackpullpadding(2) always clobbers reg byte a -Potential registers zp[1]:7 [ main::i#2 main::i#1 ] : zp[1]:7 , -Potential registers zp[1]:6 [ idx ] : zp[1]:6 , -Potential registers zp[2]:4 [ print::p ] : zp[2]:4 , -Potential registers zp[1]:2 [ get::i#0 ] : zp[1]:2 , reg byte x , reg byte y , -Potential registers zp[1]:3 [ get::$0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:8 [ main::p ] : zp[2]:8 , -Potential registers zp[2]:10 [ get::return ] : zp[2]:10 , -Potential registers zp[2]:12 [ get::p ] : zp[2]:12 , - -REGISTER UPLIFT SCOPES -Uplift Scope [get] 1,501.5: zp[1]:2 [ get::i#0 ] 1,001: zp[1]:3 [ get::$0 ] 47.67: zp[2]:10 [ get::return ] 0: zp[2]:12 [ get::p ] -Uplift Scope [main] 246.89: zp[1]:7 [ main::i#2 main::i#1 ] 202: zp[2]:8 [ main::p ] -Uplift Scope [print] 333.67: zp[2]:4 [ print::p ] -Uplift Scope [] 316.21: zp[1]:6 [ idx ] -Uplift Scope [Point] -Uplift Scope [__start] - -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Uplifting [get] best 873 combination reg byte x [ get::i#0 ] reg byte a [ get::$0 ] zp[2]:10 [ get::return ] zp[2]:12 [ get::p ] -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Uplifting [main] best 873 combination zp[1]:7 [ main::i#2 main::i#1 ] zp[2]:8 [ main::p ] -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Uplifting [print] best 873 combination zp[2]:4 [ print::p ] -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Uplifting [] best 873 combination zp[1]:6 [ idx ] -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Uplifting [Point] best 873 combination -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Uplifting [__start] best 873 combination -Attempting to uplift remaining variables inzp[1]:6 [ idx ] -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Uplifting [] best 873 combination zp[1]:6 [ idx ] -Attempting to uplift remaining variables inzp[1]:7 [ main::i#2 main::i#1 ] -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Uplifting [main] best 873 combination zp[1]:7 [ main::i#2 main::i#1 ] -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: -Coalescing zero page register [ zp[2]:8 [ main::p ] ] with [ zp[2]:4 [ print::p ] ] -Allocated (was zp[2]:8) zp[2]:2 [ main::p print::p ] -Allocated (was zp[1]:6) zp[1]:4 [ idx ] -Allocated (was zp[1]:7) zp[1]:5 [ main::i#2 main::i#1 ] -Allocated (was zp[2]:10) zp[2]:6 [ get::return ] -Allocated (was zp[2]:12) zp[2]:8 [ get::p ] -Warning! Unknown fragment for statement [24] callexecute get -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:17:9: -Warning! Unknown fragment for statement [27] callexecute print -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-5.c:18:9: - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack -// Returning and passing struct values - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-5.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(__start) - // Global Constants & labels - .const OFFSET_STRUCT_POINT_Y = 1 - .const SIZEOF_STRUCT_POINT = 2 - .const STACK_BASE = $103 - .label SCREEN = $400 - .label idx = 4 -.segment Code - // __start -__start: { - jmp __init1 - // __start::__init1 - __init1: - // [1] idx = 0 -- vbuz1=vbuc1 - lda #0 - sta.z idx - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - __b1_from___init1: - jmp __b1 - // __start::@1 - __b1: - // [3] callexecute main -- call_vprc1 - jsr main - jmp __breturn - // __start::@return - __breturn: - // [4] return - rts -} - // print -// void print(__zp(2) struct Point p) -print: { - .const OFFSET_STACK_P = 0 - .label p = 2 - // [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) -- vssz1=_stackidxstruct_2_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_P,x - sta.z p - lda STACK_BASE+OFFSET_STACK_P+1,x - sta.z p+1 - // [6] SCREEN[idx] = *((char *)&print::p) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 - lda.z p - ldy.z idx - sta SCREEN,y - // [7] idx = ++ idx -- vbuz1=_inc_vbuz1 - inc.z idx - // [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 - lda.z p+OFFSET_STRUCT_POINT_Y - ldy.z idx - sta SCREEN,y - // [9] idx = ++ idx -- vbuz1=_inc_vbuz1 - inc.z idx - jmp __breturn - // print::@return - __breturn: - // [10] return - rts -} - // get -// __zp(6) struct Point get(__register(X) char i) -get: { - .const OFFSET_STACK_I = 0 - .const OFFSET_STACK_RETURN_0 = 0 - .label return = 6 - .label p = 8 - // [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) -- vbuxx=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_I,x - tax - // [12] get::$0 = get::i#0 >> 1 -- vbuaa=vbuxx_ror_1 - txa - lsr - // [13] *((char *)&get::p) = get::i#0 -- _deref_pbuc1=vbuxx - stx.z p - // [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 -- _deref_pbuc1=vbuaa - sta.z p+OFFSET_STRUCT_POINT_Y - // [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 - ldy #SIZEOF_STRUCT_POINT - !: - lda p-1,y - sta return-1,y - dey - bne !- - jmp __breturn - // get::@return - __breturn: - // [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return -- _stackidxstruct_2_vbuc1=vssz1 - tsx - lda.z return - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - lda.z return+1 - sta STACK_BASE+OFFSET_STACK_RETURN_0+1,x - // [17] return - rts -} - // main -main: { - .label p = 2 - .label i = 5 - // [19] phi from main to main::@1 [phi:main->main::@1] - __b1_from_main: - // [19] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z i - jmp __b1 - // main::@1 - __b1: - // [20] if(main::i#2<5) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda.z i - cmp #5 - bcc __b2 - jmp __breturn - // main::@return - __breturn: - // [21] return - rts - // main::@2 - __b2: - // [22] stackpush(char) = main::i#2 -- _stackpushbyte_=vbuz1 - lda.z i - pha - // sideeffect stackpushpadding(1) -- _stackpushpadding_1 - pha - // [24] callexecute get - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [25] main::p = stackpull(struct Point) -- vssz1=_stackpullstruct_2_ - pla - sta.z p - pla - sta.z p+1 - // [26] stackpush(struct Point) = main::p -- _stackpushstruct_2_=vssz1 - lda.z p+1 - pha - lda.z p - pha - // [27] callexecute print - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // sideeffect stackpullpadding(2) -- _stackpullpadding_2 - pla - pla - // [29] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 - inc.z i - // [19] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - __b1_from___b2: - // [19] phi main::i#2 = main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp __b1 -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __init1 -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction lda.z p+1 -Succesful ASM optimization Pass5UnnecesaryLoadElimination -Removing instruction __b1_from___init1: -Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction __init1: -Removing instruction __b1: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __b1_from_main: -Removing instruction __breturn: -Removing instruction __b1_from___b2: -Succesful ASM optimization Pass5UnusedLabelElimination - -FINAL SYMBOL TABLE -__constant char OFFSET_STRUCT_POINT_Y = 1 -__constant char * const SCREEN = (char *) 1024 -__constant char SIZEOF_STRUCT_POINT = 2 -__constant unsigned int STACK_BASE = $103 -void __start() -__far(bank) __stackcall struct Point get(char i) -char get::$0 // reg byte a 1001.0 -__constant char get::OFFSET_STACK_I = 0 -__constant char get::OFFSET_STACK_RETURN_0 = 0 -char get::i -char get::i#0 // reg byte x 1501.5 -__loadstore struct Point get::p // zp[2]:8 -__loadstore struct Point get::return // zp[2]:6 47.666666666666664 -__loadstore char idx // zp[1]:4 316.2105263157895 -__stackcall void main() -char main::i -char main::i#1 // i zp[1]:5 202.0 -char main::i#2 // i zp[1]:5 44.888888888888886 -__loadstore struct Point main::p // zp[2]:2 202.0 -__far(bank) __stackcall void print(struct Point p) -__constant char print::OFFSET_STACK_P = 0 -__loadstore struct Point print::p // zp[2]:2 333.6666666666667 - -zp[1]:5 [ main::i#2 main::i#1 ] -zp[1]:4 [ idx ] -reg byte x [ get::i#0 ] -reg byte a [ get::$0 ] -zp[2]:2 [ main::p print::p ] -zp[2]:6 [ get::return ] -zp[2]:8 [ get::p ] - - -FINAL ASSEMBLER -Score: 741 - - // File Comments -// Test a procedure with calling convention stack -// Returning and passing struct values - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-5.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(__start) - // Global Constants & labels - .const OFFSET_STRUCT_POINT_Y = 1 - .const SIZEOF_STRUCT_POINT = 2 - .const STACK_BASE = $103 - .label SCREEN = $400 - .label idx = 4 -.segment Code - // __start -__start: { - // __start::__init1 - // char idx = 0 - // [1] idx = 0 -- vbuz1=vbuc1 - lda #0 - sta.z idx - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - // __start::@1 - // [3] callexecute main -- call_vprc1 - jsr main - // __start::@return - // [4] return - rts -} - // print -// void print(__zp(2) struct Point p) -print: { - .const OFFSET_STACK_P = 0 - .label p = 2 - // [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) -- vssz1=_stackidxstruct_2_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_P,x - sta.z p - lda STACK_BASE+OFFSET_STACK_P+1,x - sta.z p+1 - // SCREEN[idx++] = p.x - // [6] SCREEN[idx] = *((char *)&print::p) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 - lda.z p - ldy.z idx - sta SCREEN,y - // SCREEN[idx++] = p.x; - // [7] idx = ++ idx -- vbuz1=_inc_vbuz1 - inc.z idx - // SCREEN[idx++] = p.y - // [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 - lda.z p+OFFSET_STRUCT_POINT_Y - ldy.z idx - sta SCREEN,y - // SCREEN[idx++] = p.y; - // [9] idx = ++ idx -- vbuz1=_inc_vbuz1 - inc.z idx - // print::@return - // } - // [10] return - rts -} - // get -// __zp(6) struct Point get(__register(X) char i) -get: { - .const OFFSET_STACK_I = 0 - .const OFFSET_STACK_RETURN_0 = 0 - .label return = 6 - .label p = 8 - // [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) -- vbuxx=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_I,x - tax - // i/2 - // [12] get::$0 = get::i#0 >> 1 -- vbuaa=vbuxx_ror_1 - txa - lsr - // struct Point p = { i, i/2 } - // [13] *((char *)&get::p) = get::i#0 -- _deref_pbuc1=vbuxx - stx.z p - // [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 -- _deref_pbuc1=vbuaa - sta.z p+OFFSET_STRUCT_POINT_Y - // return p; - // [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 - ldy #SIZEOF_STRUCT_POINT - !: - lda p-1,y - sta return-1,y - dey - bne !- - // get::@return - // } - // [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return -- _stackidxstruct_2_vbuc1=vssz1 - tsx - lda.z return - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - lda.z return+1 - sta STACK_BASE+OFFSET_STACK_RETURN_0+1,x - // [17] return - rts -} - // main -main: { - .label p = 2 - .label i = 5 - // [19] phi from main to main::@1 [phi:main->main::@1] - // [19] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z i - // main::@1 - __b1: - // for(char i=0;i<5;i++) - // [20] if(main::i#2<5) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda.z i - cmp #5 - bcc __b2 - // main::@return - // } - // [21] return - rts - // main::@2 - __b2: - // struct Point p = get(i) - // [22] stackpush(char) = main::i#2 -- _stackpushbyte_=vbuz1 - lda.z i - pha - // sideeffect stackpushpadding(1) -- _stackpushpadding_1 - pha - // [24] callexecute get - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [25] main::p = stackpull(struct Point) -- vssz1=_stackpullstruct_2_ - pla - sta.z p - pla - sta.z p+1 - // print(p) - // [26] stackpush(struct Point) = main::p -- _stackpushstruct_2_=vssz1 - pha - lda.z p - pha - // [27] callexecute print - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // sideeffect stackpullpadding(2) -- _stackpullpadding_2 - pla - pla - // for(char i=0;i<5;i++) - // [29] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 - inc.z i - // [19] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [19] phi main::i#2 = main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp __b1 -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-stack-far-5.sym b/src/test/ref/procedure-callingconvention-stack-far-5.sym deleted file mode 100644 index 71c714767..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-5.sym +++ /dev/null @@ -1,30 +0,0 @@ -__constant char OFFSET_STRUCT_POINT_Y = 1 -__constant char * const SCREEN = (char *) 1024 -__constant char SIZEOF_STRUCT_POINT = 2 -__constant unsigned int STACK_BASE = $103 -void __start() -__far(bank) __stackcall struct Point get(char i) -char get::$0 // reg byte a 1001.0 -__constant char get::OFFSET_STACK_I = 0 -__constant char get::OFFSET_STACK_RETURN_0 = 0 -char get::i -char get::i#0 // reg byte x 1501.5 -__loadstore struct Point get::p // zp[2]:8 -__loadstore struct Point get::return // zp[2]:6 47.666666666666664 -__loadstore char idx // zp[1]:4 316.2105263157895 -__stackcall void main() -char main::i -char main::i#1 // i zp[1]:5 202.0 -char main::i#2 // i zp[1]:5 44.888888888888886 -__loadstore struct Point main::p // zp[2]:2 202.0 -__far(bank) __stackcall void print(struct Point p) -__constant char print::OFFSET_STACK_P = 0 -__loadstore struct Point print::p // zp[2]:2 333.6666666666667 - -zp[1]:5 [ main::i#2 main::i#1 ] -zp[1]:4 [ idx ] -reg byte x [ get::i#0 ] -reg byte a [ get::$0 ] -zp[2]:2 [ main::p print::p ] -zp[2]:6 [ get::return ] -zp[2]:8 [ get::p ] diff --git a/src/test/ref/procedure-callingconvention-stack-far-6.asm b/src/test/ref/procedure-callingconvention-stack-far-6.asm deleted file mode 100644 index f5a07a3d3..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-6.asm +++ /dev/null @@ -1,51 +0,0 @@ -// Test a procedure with calling convention stack -// Recursion that works (no local variables) - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-6.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(main) - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment Code -// __register(A) char pow2(__register(A) char n) -pow2: { - .const OFFSET_STACK_N = 0 - .const OFFSET_STACK_RETURN_0 = 0 - tsx - lda STACK_BASE+OFFSET_STACK_N,x - // if (n == 0) - cmp #0 - beq __b1 - // n-1 - sec - sbc #1 - // char c = pow2(n-1) - pha - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - pla - // return c+c; - asl - jmp __breturn - __b1: - lda #1 - __breturn: - // } - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - rts -} -main: { - // pow2(6) - lda #6 - pha - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - pla - // *SCREEN = pow2(6) - sta SCREEN - // } - rts -} diff --git a/src/test/ref/procedure-callingconvention-stack-far-6.cfg b/src/test/ref/procedure-callingconvention-stack-far-6.cfg deleted file mode 100644 index 23570a74e..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-6.cfg +++ /dev/null @@ -1,29 +0,0 @@ - -__far(bank) __stackcall char pow2(char n) -pow2: scope:[pow2] from - [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) - [1] if(pow2::n#0==0) goto pow2::@return - to:pow2::@1 -pow2::@1: scope:[pow2] from pow2 - [2] pow2::$1 = pow2::n#0 - 1 - [3] stackpush(char) = pow2::$1 - [4] callexecute pow2 - [5] pow2::c#0 = stackpull(char) - [6] pow2::return#1 = pow2::c#0 + pow2::c#0 - to:pow2::@return -pow2::@return: scope:[pow2] from pow2 pow2::@1 - [7] pow2::return#2 = phi( pow2/1, pow2::@1/pow2::return#1 ) - [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 - [9] return - to:@return - -void main() -main: scope:[main] from - [10] stackpush(char) = 6 - [11] callexecute pow2 - [12] main::$0 = stackpull(char) - [13] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [14] return - to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-far-6.log b/src/test/ref/procedure-callingconvention-stack-far-6.log deleted file mode 100644 index d5fc76baf..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-6.log +++ /dev/null @@ -1,1060 +0,0 @@ -Adding parameter assignment in __stackcall procedure pow2::n = param(pow2::n) -Far call main::$0 = call pow2(6) -Far call pow2::c = call pow2(pow2::$1) -Eliminating unused variable with no statement pow2::$2 -Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call pow2(6) -Calling convention __stackcall adding prepare/execute/finalize for pow2::c = call pow2(pow2::$1) -Calling convention STACK_CALL replacing param(pow2::n) with stackidx(char,pow2::OFFSET_STACK_N) -Calling convention STACK_CALL adding stack return stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return -Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) -Calling convention STACK_CALL adding stack pull pow2::c = stackpull(char) -Calling convention STACK_CALL adding stack push stackpush(char) = 6 -Calling convention STACK_CALL adding stack push stackpush(char) = pow2::$1 - -CONTROL FLOW GRAPH SSA - -void main() -main: scope:[main] from __start - stackpush(char) = 6 - callexecute pow2 - main::$0 = stackpull(char) - *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - return - to:@return - -__far(bank) __stackcall char pow2(char n) -pow2: scope:[pow2] from - pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) - pow2::$0 = pow2::n#0 == 0 - if(pow2::$0) goto pow2::@1 - to:pow2::@2 -pow2::@1: scope:[pow2] from pow2 - pow2::return#0 = 1 - to:pow2::@return -pow2::@2: scope:[pow2] from pow2 - pow2::n#1 = phi( pow2/pow2::n#0 ) - pow2::$1 = pow2::n#1 - 1 - stackpush(char) = pow2::$1 - callexecute pow2 - pow2::c#0 = stackpull(char) - pow2::$3 = pow2::c#0 + pow2::c#0 - pow2::return#1 = pow2::$3 - to:pow2::@return -pow2::@return: scope:[pow2] from pow2::@1 pow2::@2 - pow2::return#2 = phi( pow2::@1/pow2::return#0, pow2::@2/pow2::return#1 ) - stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 - 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 -__constant char * const SCREEN = (char *)$400 -__constant unsigned int STACK_BASE = $103 -void __start() -void main() -char main::$0 -__far(bank) __stackcall char pow2(char n) -bool pow2::$0 -number pow2::$1 -char pow2::$3 -__constant char pow2::OFFSET_STACK_N = 0 -__constant char pow2::OFFSET_STACK_RETURN_0 = 0 -char pow2::c -char pow2::c#0 -char pow2::n -char pow2::n#0 -char pow2::n#1 -char pow2::return -char pow2::return#0 -char pow2::return#1 -char pow2::return#2 - -Adding number conversion cast (unumber) 6 in stackpush(char) = 6 -Adding number conversion cast (unumber) 0 in pow2::$0 = pow2::n#0 == 0 -Adding number conversion cast (unumber) 1 in pow2::return#0 = 1 -Adding number conversion cast (unumber) 1 in pow2::$1 = pow2::n#1 - 1 -Adding number conversion cast (unumber) pow2::$1 in pow2::$1 = pow2::n#1 - (unumber)1 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast stackpush(char) = (unumber)6 -Inlining cast pow2::return#0 = (unumber)1 -Successful SSA optimization Pass2InlineCast -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 6 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 6 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Inferred type updated to char in pow2::$1 = pow2::n#1 - 1 -Alias pow2::n#0 = pow2::n#1 -Alias pow2::return#1 = pow2::$3 -Successful SSA optimization Pass2AliasElimination -Simple Condition pow2::$0 [7] if(pow2::n#0==0) goto pow2::@1 -Successful SSA optimization Pass2ConditionalJumpSimplification -Constant pow2::return#0 = 1 -Successful SSA optimization Pass2ConstantIdentification -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 -Inlining constant with var siblings pow2::return#0 -Constant inlined pow2::return#0 = 1 -Successful SSA optimization Pass2ConstantInlining -Adding NOP phi() at start of pow2::@1 -CALL GRAPH -Calls in [pow2] to pow2:4 -Calls in [main] to pow2:13 - -Created 1 initial phi equivalence classes -Coalesced [7] pow2::return#3 = pow2::return#1 -Coalesced down to 1 phi equivalence classes -Culled Empty Block label pow2::@1 -Renumbering block pow2::@2 to pow2::@1 - -FINAL CONTROL FLOW GRAPH - -__far(bank) __stackcall char pow2(char n) -pow2: scope:[pow2] from - [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) - [1] if(pow2::n#0==0) goto pow2::@return - to:pow2::@1 -pow2::@1: scope:[pow2] from pow2 - [2] pow2::$1 = pow2::n#0 - 1 - [3] stackpush(char) = pow2::$1 - [4] callexecute pow2 - [5] pow2::c#0 = stackpull(char) - [6] pow2::return#1 = pow2::c#0 + pow2::c#0 - to:pow2::@return -pow2::@return: scope:[pow2] from pow2 pow2::@1 - [7] pow2::return#2 = phi( pow2/1, pow2::@1/pow2::return#1 ) - [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 - [9] return - to:@return - -void main() -main: scope:[main] from - [10] stackpush(char) = 6 - [11] callexecute pow2 - [12] main::$0 = stackpull(char) - [13] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [14] return - to:@return - - -VARIABLE REGISTER WEIGHTS -void main() -char main::$0 // 4.0 -__far(bank) __stackcall char pow2(char n) -char pow2::$1 // 22.0 -char pow2::c -char pow2::c#0 // 33.0 -char pow2::n -char pow2::n#0 // 16.5 -char pow2::return -char pow2::return#1 // 22.0 -char pow2::return#2 // 22.0 - -Initial phi equivalence classes -[ pow2::return#2 pow2::return#1 ] -Added variable pow2::n#0 to live range equivalence class [ pow2::n#0 ] -Added variable pow2::$1 to live range equivalence class [ pow2::$1 ] -Added variable pow2::c#0 to live range equivalence class [ pow2::c#0 ] -Added variable main::$0 to live range equivalence class [ main::$0 ] -Complete equivalence classes -[ pow2::return#2 pow2::return#1 ] -[ pow2::n#0 ] -[ pow2::$1 ] -[ pow2::c#0 ] -[ main::$0 ] -Allocated zp[1]:2 [ pow2::return#2 pow2::return#1 ] -Allocated zp[1]:3 [ pow2::c#0 ] -Allocated zp[1]:4 [ pow2::$1 ] -Allocated zp[1]:5 [ pow2::n#0 ] -Allocated zp[1]:6 [ main::$0 ] -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) [ pow2::n#0 ] ( pow2:11 [ pow2::n#0 ] { } ) always clobbers reg byte a reg byte x -Potential register analysis [4] callexecute pow2 missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [4] callexecute pow2 [ ] ( pow2:11 [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [5] pow2::c#0 = stackpull(char) [ pow2::c#0 ] ( pow2:11 [ pow2::c#0 ] { } ) always clobbers reg byte a -Statement [6] pow2::return#1 = pow2::c#0 + pow2::c#0 [ pow2::return#1 ] ( pow2:11 [ pow2::return#1 ] { } ) always clobbers reg byte a -Statement [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 [ ] ( pow2:11 [ ] { } ) always clobbers reg byte x -Statement [10] stackpush(char) = 6 [ ] ( [ ] { } ) always clobbers reg byte a -Potential register analysis [11] callexecute pow2 missing fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry allocation: -MISSING FRAGMENTS - Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -Statement [11] callexecute pow2 [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [12] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a -Potential registers zp[1]:2 [ pow2::return#2 pow2::return#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:5 [ pow2::n#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:4 [ pow2::$1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:3 [ pow2::c#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:6 [ main::$0 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , - -REGISTER UPLIFT SCOPES -Uplift Scope [pow2] 44: zp[1]:2 [ pow2::return#2 pow2::return#1 ] 33: zp[1]:3 [ pow2::c#0 ] 22: zp[1]:4 [ pow2::$1 ] 16.5: zp[1]:5 [ pow2::n#0 ] -Uplift Scope [main] 4: zp[1]:6 [ main::$0 ] -Uplift Scope [] - -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Uplifting [pow2] best 75 combination reg byte a [ pow2::return#2 pow2::return#1 ] reg byte a [ pow2::c#0 ] reg byte a [ pow2::$1 ] reg byte a [ pow2::n#0 ] -Limited combination testing to 100 combinations of 256 possible. -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Uplifting [main] best 69 combination reg byte a [ main::$0 ] -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: -Uplifting [] best 69 combination -Warning! Unknown fragment for statement [4] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:14:5: -Warning! Unknown fragment for statement [11] callexecute pow2 -Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry -D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\kc\procedure-callingconvention-stack-far-6.c:7:15: - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack -// Recursion that works (no local variables) - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-6.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(main) - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment Code - // pow2 -// __register(A) char pow2(__register(A) char n) -pow2: { - .const OFFSET_STACK_N = 0 - .const OFFSET_STACK_RETURN_0 = 0 - // [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_N,x - // [1] if(pow2::n#0==0) goto pow2::@return -- vbuaa_eq_0_then_la1 - cmp #0 - beq __breturn_from_pow2 - jmp __b1 - // pow2::@1 - __b1: - // [2] pow2::$1 = pow2::n#0 - 1 -- vbuaa=vbuaa_minus_1 - sec - sbc #1 - // [3] stackpush(char) = pow2::$1 -- _stackpushbyte_=vbuaa - pha - // [4] callexecute pow2 - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [5] pow2::c#0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // [6] pow2::return#1 = pow2::c#0 + pow2::c#0 -- vbuaa=vbuaa_plus_vbuaa - asl - // [7] phi from pow2::@1 to pow2::@return [phi:pow2::@1->pow2::@return] - __breturn_from___b1: - // [7] phi pow2::return#2 = pow2::return#1 [phi:pow2::@1->pow2::@return#0] -- register_copy - jmp __breturn - // [7] phi from pow2 to pow2::@return [phi:pow2->pow2::@return] - __breturn_from_pow2: - // [7] phi pow2::return#2 = 1 [phi:pow2->pow2::@return#0] -- vbuaa=vbuc1 - lda #1 - jmp __breturn - // pow2::@return - __breturn: - // [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - // [9] return - rts -} - // main -main: { - // [10] stackpush(char) = 6 -- _stackpushbyte_=vbuc1 - lda #6 - pha - // [11] callexecute pow2 - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [12] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // [13] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - jmp __breturn - // main::@return - __breturn: - // [14] return - rts -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction __b1: -Removing instruction __breturn_from___b1: -Removing instruction __breturn: -Succesful ASM optimization Pass5UnusedLabelElimination -Relabelling long label __breturn_from_pow2 to __b1 -Succesful ASM optimization Pass5RelabelLongLabels - -FINAL SYMBOL TABLE -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void main() -char main::$0 // reg byte a 4.0 -__far(bank) __stackcall char pow2(char n) -char pow2::$1 // reg byte a 22.0 -__constant char pow2::OFFSET_STACK_N = 0 -__constant char pow2::OFFSET_STACK_RETURN_0 = 0 -char pow2::c -char pow2::c#0 // reg byte a 33.0 -char pow2::n -char pow2::n#0 // reg byte a 16.5 -char pow2::return -char pow2::return#1 // reg byte a 22.0 -char pow2::return#2 // reg byte a 22.0 - -reg byte a [ pow2::return#2 pow2::return#1 ] -reg byte a [ pow2::n#0 ] -reg byte a [ pow2::$1 ] -reg byte a [ pow2::c#0 ] -reg byte a [ main::$0 ] - - -FINAL ASSEMBLER -Score: 60 - - // File Comments -// Test a procedure with calling convention stack -// Recursion that works (no local variables) - // Upstart - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-6.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(main) - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment Code - // pow2 -// __register(A) char pow2(__register(A) char n) -pow2: { - .const OFFSET_STACK_N = 0 - .const OFFSET_STACK_RETURN_0 = 0 - // [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_N,x - // if (n == 0) - // [1] if(pow2::n#0==0) goto pow2::@return -- vbuaa_eq_0_then_la1 - cmp #0 - beq __b1 - // pow2::@1 - // n-1 - // [2] pow2::$1 = pow2::n#0 - 1 -- vbuaa=vbuaa_minus_1 - sec - sbc #1 - // char c = pow2(n-1) - // [3] stackpush(char) = pow2::$1 -- _stackpushbyte_=vbuaa - pha - // [4] callexecute pow2 - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [5] pow2::c#0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // return c+c; - // [6] pow2::return#1 = pow2::c#0 + pow2::c#0 -- vbuaa=vbuaa_plus_vbuaa - asl - // [7] phi from pow2::@1 to pow2::@return [phi:pow2::@1->pow2::@return] - // [7] phi pow2::return#2 = pow2::return#1 [phi:pow2::@1->pow2::@return#0] -- register_copy - jmp __breturn - // [7] phi from pow2 to pow2::@return [phi:pow2->pow2::@return] - __b1: - // [7] phi pow2::return#2 = 1 [phi:pow2->pow2::@return#0] -- vbuaa=vbuc1 - lda #1 - // pow2::@return - __breturn: - // } - // [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - // [9] return - rts -} - // main -main: { - // pow2(6) - // [10] stackpush(char) = 6 -- _stackpushbyte_=vbuc1 - lda #6 - pha - // [11] callexecute pow2 - .assert "Missing ASM fragment Fragment not found call_far_c64_entry. Attempted variations call_far_c64_entry ", 0, 1 - // [12] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // *SCREEN = pow2(6) - // [13] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - // main::@return - // } - // [14] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-stack-far-6.sym b/src/test/ref/procedure-callingconvention-stack-far-6.sym deleted file mode 100644 index 52b0b3f95..000000000 --- a/src/test/ref/procedure-callingconvention-stack-far-6.sym +++ /dev/null @@ -1,21 +0,0 @@ -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void main() -char main::$0 // reg byte a 4.0 -__far(bank) __stackcall char pow2(char n) -char pow2::$1 // reg byte a 22.0 -__constant char pow2::OFFSET_STACK_N = 0 -__constant char pow2::OFFSET_STACK_RETURN_0 = 0 -char pow2::c -char pow2::c#0 // reg byte a 33.0 -char pow2::n -char pow2::n#0 // reg byte a 16.5 -char pow2::return -char pow2::return#1 // reg byte a 22.0 -char pow2::return#2 // reg byte a 22.0 - -reg byte a [ pow2::return#2 pow2::return#1 ] -reg byte a [ pow2::n#0 ] -reg byte a [ pow2::$1 ] -reg byte a [ pow2::c#0 ] -reg byte a [ main::$0 ] From 1499f8cecc086a042178e282e73d3bc5a55346ee Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Wed, 5 Apr 2023 13:10:18 +0200 Subject: [PATCH 32/66] - Added javadoc documentation in Bank.java. - Added reworked procedure-callingconvention-phi-bank-5.c to reflect a good banking example for the documentation. - Update ref for test cases. --- .../java/dk/camelot64/kickc/model/Bank.java | 222 +- .../procedure-callingconvention-phi-bank-4.c | 1 - .../procedure-callingconvention-phi-bank-5.c | 155 +- .../procedure-callingconvention-phi-bank-5.ld | 7 + ...procedure-callingconvention-phi-bank-5.asm | 414 +- ...procedure-callingconvention-phi-bank-5.cfg | 377 +- ...procedure-callingconvention-phi-bank-5.log | 4397 +++++++++-------- ...procedure-callingconvention-phi-bank-5.sym | 325 +- 8 files changed, 3367 insertions(+), 2531 deletions(-) create mode 100644 src/test/kc/procedure-callingconvention-phi-bank-5.ld diff --git a/src/main/java/dk/camelot64/kickc/model/Bank.java b/src/main/java/dk/camelot64/kickc/model/Bank.java index 99220e7f4..6f43b7c18 100644 --- a/src/main/java/dk/camelot64/kickc/model/Bank.java +++ b/src/main/java/dk/camelot64/kickc/model/Bank.java @@ -1,10 +1,226 @@ package dk.camelot64.kickc.model; -/** A Bank segment. */ + + +/** + * + *

+ * Specific target computer platforms implement a memory layout that can be banked either in ram or rom. + * This class models the capability to calculate which function call implementations are banked and which not. + *
Since banking implementations are specific to the target computer platform, + * specific assembler fragments are available in the compiler, + * that model the implementation of the banking, depending on: + * + *

    + *
  • the computer target computer platform.
  • + *
  • the bank method of function call implementation at the call location.
  • + *
+ * + *

The method can implement different banking implementations, + * depending on the required function call speed, + * the banking routine availability in the kernal (rom) of the target computer platform + * or even using specific designed banking routines by kickc to provide alternatives for banking methods. + * The method and the platform are the key combinations that select the fragments + * in kickc to generate the banked function call implementations used by the compiler. + * + *

Your C-code can be augmented with 3 new directives, that define which function(s) will be declared as banked: + * + *

    + *
  • #pragma bank( method, number ) directive, defines for sequent functions + * the target bank number and the method for the banked function call implementations.
  • + *
  • A new #pragma nobank( dummy ) directive, resets the calculation of banking for sequent functions + * not to calculate any banking for these functions.
  • + *
  • A new __bank( method, number ) directive, defines for one function a + * target bank number and the method for the banked function call implementation.
  • + *
+ * + *

The compiler decides automatically the function call implementation, which can be either banked or not. + * And if the function call implementation is banked, it should use the specified bank number to implement + * the banked function call. + * The rules can be summarized as follows: + * + *

    + *
  • If a function is declared not banked, and the function call location is not banked, + * the function call implementation will be not banked.
  • + *
  • If a function is declared banked, and the function call location is not banked, + * the function call implementation will be banked.
  • + *
  • If a function is declared not banked, and the function call location is banked, + * the function call implementation will be not banked.
  • + *
  • If a function is declared banked, and the function call location is banked, + * but the function call location is within the same bank, + * the function call implementation will be not banked.
  • + *
  • If a function is declared banked, and the function call location is banked, + * but the function call location is not within the same bank, + * the function call implementation will be banked.
  • + *
+ * + *

The usage of #pragma code_seg( segment ) directive + * is very important! The #pragma code_seg( segment ) directive utilization + * in harmony with the #pragma bank( method, number ) directive + * makes the overall banking implementation work for your program. + * + *

+ *

    + *
  • KickC uses the #pragma code_seg( segment ) directive to calculate the + * addressing of the allocation of the function code within main or banked memory.
  • + *
  • KickC uses the #pragma bank( method, number ) directive or + * __bank( method, number ) directive to calculate the function call implementation + * at the function calling locations!
  • + *
+ * + *

+ * The best way to describe the usage with a comprehensive example, documenting the different use cases + * how the compiler decides which functions are banked or not, + * and how the resulting banked function call code will be generated. + *

+ * The example implements several functions in various forms to allocate the code in main memory + * using segment Code and within 3 banked memory locations, using segments Bank1, Bank2, Bank3. + * In order to ensure a good understanding of the example, the usage of these code segments in harmony with the + * banking directives must be described, which is absolutely necessary to master, + * in order to make banked function calls work. + * + *

+ *

    + *
  • The #pragma directive code_seg( Code ) defines the sequent function code to be allocated + * within main (not banked) memory, defined within segment Code<> by the linker.
  • + *
  • The #pragma directive code_seg( Bank1 ) defines the sequent function code to be allocated + * within banked memory, defined within segment Bank1 by the linker.
  • + *
  • The #pragma directive code_seg( Bank2 ) defines the sequent function code to be allocated + * within banked memory, defined within segment Bank2 by the linker.
  • + *
  • The #pragma directive code_seg( Bank3 ) defines the sequent function code to be allocated + * within banked memory, defined within segment Bank3 by the linker.
  • + *
+ * + * Note that the Code segment is the default location in KickC where the code is placed by the linker. + * + * Find below the code example, which is also the program procedure-callingconvention-phi-bank-5.c + * + *
+ *
+ * // The linker specification of the different segments.
+ * #pragma link("procedure-callingconvention-phi-bank-5.ld")
+ *
+ * // The target computer platform is the Commander X16,
+ * // which implements banking in ram between 0xA0000 and 0xBFFF,
+ * // and in rom between 0xC000 and 0xFFFF.
+ * #pragma target(cx16)
+ *
+ * char *const SCREEN = (char *)0x0400; // Just for test purposes.
+ *
+ * #pragma code_seg(Bank1) // The sequent functions will be addressed specified by segment bank1 in the linker.
+ * #pragma bank(ram, 1)    // The sequent functions will be banked using call method ram in bank number 1.
+ *
+ * // Function declarations
+ * char func_ram_bank1_a(char a, char b);
+ * char __bank(ram, 1) func_ram_bank1_b(char a, char b);
+ * char func_ram_bank1_c(char a, char b);
+ * char func_ram_bank1_d(char a, char b);
+ * char func_ram_bank1_e(char a, char b);
+ * char func_ram_bank1_f(char a, char b);
+ * char func_rom_bank2_a(char a, char b);
+ * char __bank(rom, 2) func_rom_bank2_b(char a, char b);
+ * char func_rom_bank2_c(char a, char b);
+ * char func_rom_bank2_d(char a, char b);
+ * char func_rom_bank2_e(char a, char b);
+ * char func_rom_bank2_f(char a, char b);
+ * char func_main_a(char a, char b);
+ * char func_main_b(char a, char b);
+ *
+ * // Functional code
+ *
+ * char func_ram_bank1_a(char a, char b) {
+ *     return a + b;
+ * }
+ *
+ * char func_ram_bank1_c(char a, char b) {
+ *     return func_ram_bank1_a(a, b);               // Non banked call in ram bank 1.
+ * }
+ *
+ * char func_ram_bank1_d(char a, char b) {
+ *     return func_rom_bank2_a(a, b);               // Banked call from ram bank 1 to rom bank 2.
+ * }
+ *
+ * char func_ram_bank1_e(char a, char b) {
+ *     return func_rom_bank2_b(a, b);               // Banked call from ram bank 1 to rom bank 2.
+ * }
+ *
+ * char func_ram_bank1_f(char a, char b) {
+ *     return func_main_a(a, b);                    // Non banked call from ram bank 1 to main memory.
+ * }
+ *
+ *
+ * #pragma code_seg(Bank2) // The sequent functions will be addressed specified by segment bank2 in the linker.
+ * #pragma bank(rom, 2)    // The sequent functions will be banked using call method rom in bank number 2.
+ *
+ * char func_rom_bank2_a(char a, char b) {
+ *     return a + b;
+ * }
+ *
+ * char func_rom_bank2_c(char a, char b) {
+ *     return func_ram_bank1_a(a, b);              // Banked call from rom bank 2 to ram bank 1.
+ * }
+ *
+ * char func_rom_bank2_d(char a, char b) {
+ *     return func_rom_bank2_a(a, b);              // Non banked call in rom bank 2.
+ * }
+ *
+ * char func_rom_bank2_e(char a, char b) {
+ *     return func_rom_bank2_b(a, b);              // Non Banked call in rom bank 2.
+ * }
+ *
+ * char func_rom_bank2_f(char a, char b) {
+ *     return func_main_a(a, b);                   // Non banked call from rom bank 2 to main memory.
+ * }
+ *
+ *
+ * #pragma nobank(dummy) // The sequent functions will consider no banking calculations anymore.
+ *
+ * // The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram.
+ * char __bank(ram, 1) func_ram_bank1_b(char a, char b) {
+ *     return a + b;
+ * }
+ *
+ * // The __bank directive declares this function to be banked using call method rom in bank number 2 of banked rom.
+ * char __bank(rom, 2) func_rom_bank2_b(char a, char b) {
+ *     return a + b;
+ * }
+ *
+ * #pragma code_seg(Code) // The sequent functions will be addressed in the default main memory location (segment Code).
+ *
+ * // Allocated in main memory.
+ * char func_main_a(char a, char b) {
+ *     return func_ram_bank1_e(a, b); // Banked call to ram in bank 1 from main memory.
+ * }
+ *
+ * // Allocated in main memory.
+ * char func_main_b(char a, char b) {
+ *     return func_rom_bank2_e(a, b); // Banked call to rom in bank 2 from main memory.
+ * }
+ *
+ * // Practically this means that the main() function is placed in main memory ...
+ *
+ * void main(void) {
+ *     SCREEN[0] = func_ram_bank1_a('0', 7); // Banked call to ram in bank 1 from main memory.
+ *     SCREEN[0] = func_ram_bank1_b('0', 7); // Banked call to ram in bank 1 from main memory.
+ *     SCREEN[0] = func_ram_bank1_c('0', 7); // Banked call to ram in bank 1 from main memory.
+ *     SCREEN[0] = func_ram_bank1_d('0', 7); // Banked call to ram in bank 1 from main memory.
+ *     SCREEN[0] = func_ram_bank1_e('0', 7); // Banked call to ram in bank 1 from main memory.
+ *     SCREEN[0] = func_ram_bank1_f('0', 7); // Banked call to ram in bank 1 from main memory.
+ *     SCREEN[0] = func_rom_bank2_a('0', 7); // Banked call to rom in bank 2 from main memory.
+ *     SCREEN[0] = func_rom_bank2_b('0', 7); // Banked call to rom in bank 2 from main memory.
+ *     SCREEN[0] = func_rom_bank2_c('0', 7); // Banked call to rom in bank 2 from main memory.
+ *     SCREEN[0] = func_rom_bank2_d('0', 7); // Banked call to rom in bank 2 from main memory.
+ *     SCREEN[0] = func_rom_bank2_e('0', 7); // banked call to rom in bank 2 from main memory.
+ *     SCREEN[0] = func_rom_bank2_f('0', 7); // banked call to rom in bank 2 from main memory.
+ *     SCREEN[0] = func_main_a('0', 7);  // Near call in main memory from main memory.
+ *     SCREEN[0] = func_main_b('0', 7);  // Near call in main memory from main memory.
+ * }
+ * 
+ */ public class Bank { - private final String bankArea; - private Long bank; + private final String bankArea; // The bank method to apply. + private Long bank; // The bank number. public Bank(String bankArea, Long bank) { this.bankArea = bankArea; diff --git a/src/test/kc/procedure-callingconvention-phi-bank-4.c b/src/test/kc/procedure-callingconvention-phi-bank-4.c index 7075f3b6c..31dc11f0e 100644 --- a/src/test/kc/procedure-callingconvention-phi-bank-4.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-4.c @@ -1,6 +1,5 @@ // Test a far call procedure with a calling convention phi -#pragma code_seg(stage) #pragma link("procedure-callingconvention-phi-bank.ld") #pragma target(cx16) diff --git a/src/test/kc/procedure-callingconvention-phi-bank-5.c b/src/test/kc/procedure-callingconvention-phi-bank-5.c index c8b8aa399..ef564b56c 100644 --- a/src/test/kc/procedure-callingconvention-phi-bank-5.c +++ b/src/test/kc/procedure-callingconvention-phi-bank-5.c @@ -1,104 +1,119 @@ -// Test a far call procedure with a calling convention phi -#pragma code_seg(stage) -#pragma link("procedure-callingconvention-phi-bank.ld") +// The linker specification of the different segments. +#pragma link("procedure-callingconvention-phi-bank-5.ld") + +// The target computer platform is the Commander X16, +// which implements banking in ram between 0xA0000 and 0xBFFF, +// and in rom between 0xC000 and 0xFFFF. #pragma target(cx16) -char* const SCREEN = (char*)0x0400; +char *const SCREEN = (char *)0x0400; // Just for test purposes. -#pragma code_seg(stage) -#pragma bank(ram, 1) +#pragma code_seg(Bank1) // The sequent functions will be addressed specified by segment bank1 in the linker. +#pragma bank(ram, 1) // The sequent functions will be banked using call method ram in bank number 1. -char func_bank1_a(char a, char b) { - return a+b; +// Function declarations +char func_ram_bank1_a(char a, char b); +char __bank(ram, 1) func_ram_bank1_b(char a, char b); +char func_ram_bank1_c(char a, char b); +char func_ram_bank1_d(char a, char b); +char func_ram_bank1_e(char a, char b); +char func_ram_bank1_f(char a, char b); +char func_rom_bank2_a(char a, char b); +char __bank(rom, 2) func_rom_bank2_b(char a, char b); +char func_rom_bank2_c(char a, char b); +char func_rom_bank2_d(char a, char b); +char func_rom_bank2_e(char a, char b); +char func_rom_bank2_f(char a, char b); +char func_main_a(char a, char b); +char func_main_b(char a, char b); + +// Functional code + +char func_ram_bank1_a(char a, char b) { + return a + b; } -char func_bank1_c(char a, char b) { - // this should be a near call, because the call is from the same bank. - return func_bank1_a(a,b); +char func_ram_bank1_c(char a, char b) { + return func_ram_bank1_a(a, b); // Non banked call in ram bank 1. } -char func_bank1_d(char a, char b) { - // this should be a far call, because the call is to an other bank. - return func_bank2_a(a,b); +char func_ram_bank1_d(char a, char b) { + return func_rom_bank2_a(a, b); // Banked call from ram bank 1 to rom bank 2. } -#pragma code_seg(platform) -#pragma bank(ram, 2) +char func_ram_bank1_e(char a, char b) { + return func_rom_bank2_b(a, b); // Banked call from ram bank 1 to rom bank 2. +} -char func_bank2_a(char a, char b) { - return a+b; +char func_ram_bank1_f(char a, char b) { + return func_main_a(a, b); // Non banked call from ram bank 1 to main memory. } -char func_bank2_c(char a, char b) { - // this should be a far call, because the call is from another bank. - return func_bank1_a(a,b); +#pragma code_seg(Bank2) // The sequent functions will be addressed specified by segment bank2 in the linker. +#pragma bank(rom, 2) // The sequent functions will be banked using call method rom in bank number 2. + +char func_rom_bank2_a(char a, char b) { + return a + b; } -char func_bank2_d(char a, char b) { - // this should be a near call, because the call is from the same bank. - return func_bank2_a(a,b); +char func_rom_bank2_c(char a, char b) { + return func_ram_bank1_a(a, b); // Banked call from rom bank 2 to ram bank 1. } -char func_bank2_e(char a, char b) { - // this should be a near call, because the call is from the same bank. - return func_bank2_b(a,b); +char func_rom_bank2_d(char a, char b) { + return func_rom_bank2_a(a, b); // Non banked call in rom bank 2. } -char func_bank2_f(char a, char b) { - // this should be a far call, because the call is from another bank. - return func_bank1_b(a,b); +char func_rom_bank2_e(char a, char b) { + return func_rom_bank2_b(a, b); // Non Banked call in rom bank 2. } -#pragma nobank(dummy) - -char __bank(ram, 1) func_bank1_b(char a, char b) { - return a+b; +char func_rom_bank2_f(char a, char b) { + return func_main_a(a, b); // Non banked call from rom bank 2 to main memory. } -char __bank(ram, 2) func_bank2_b(char a, char b) { - return a+b; + +#pragma nobank(dummy) // The sequent functions will consider no banking calculations anymore. + +// The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram. +char __bank(ram, 1) func_ram_bank1_b(char a, char b) { + return a + b; } -#pragma nobank(dummy) - -char func_bank1_e(char a, char b) { - // this should be a far call, because the call is to bank 1. - return func_bank1_a(a,b); +// The __bank directive declares this function to be banked using call method rom in bank number 2 of banked rom. +char __bank(rom, 2) func_rom_bank2_b(char a, char b) { + return a + b; } -char func_bank1_f(char a, char b) { - // this should be a far call, because the call is to bank 2. - return func_bank2_a(a,b); +#pragma code_seg(Code) // The sequent functions will be addressed in the default main memory location (segment Code). + +// Allocated in main memory. +char func_main_a(char a, char b) { + return func_ram_bank1_e(a, b); // Banked call to ram in bank 1 from main memory. } -#pragma code_seg(Code) +// Allocated in main memory. +char func_main_b(char a, char b) { + return func_rom_bank2_e(a, b); // Banked call to rom in bank 2 from main memory. +} + +// Practically this means that the main() function is placed in main memory ... void main(void) { - // far call - SCREEN[0] = func_bank1_a('0', 7); - // far call - SCREEN[0] = func_bank1_b('0', 7); - // far call - SCREEN[0] = func_bank1_c('0', 7); - // far call - SCREEN[0] = func_bank1_d('0', 7); - // near call - SCREEN[0] = func_bank1_e('0', 7); - // near call - SCREEN[0] = func_bank1_f('0', 7); - // far call - SCREEN[0] = func_bank2_a('0', 7); - // far call - SCREEN[0] = func_bank2_b('0', 7); - // far call - SCREEN[0] = func_bank2_c('0', 7); - // far call - SCREEN[0] = func_bank2_d('0', 7); - // far call - SCREEN[0] = func_bank2_e('0', 7); - // far call - SCREEN[0] = func_bank2_f('0', 7); + SCREEN[0] = func_ram_bank1_a('0', 7); // Banked call to ram in bank 1 from main memory. + SCREEN[0] = func_ram_bank1_b('0', 7); // Banked call to ram in bank 1 from main memory. + SCREEN[0] = func_ram_bank1_c('0', 7); // Banked call to ram in bank 1 from main memory. + SCREEN[0] = func_ram_bank1_d('0', 7); // Banked call to ram in bank 1 from main memory. + SCREEN[0] = func_ram_bank1_e('0', 7); // Banked call to ram in bank 1 from main memory. + SCREEN[0] = func_ram_bank1_f('0', 7); // Banked call to ram in bank 1 from main memory. + SCREEN[0] = func_rom_bank2_a('0', 7); // Banked call to rom in bank 2 from main memory. + SCREEN[0] = func_rom_bank2_b('0', 7); // Banked call to rom in bank 2 from main memory. + SCREEN[0] = func_rom_bank2_c('0', 7); // Banked call to rom in bank 2 from main memory. + SCREEN[0] = func_rom_bank2_d('0', 7); // Banked call to rom in bank 2 from main memory. + SCREEN[0] = func_rom_bank2_e('0', 7); // banked call to rom in bank 2 from main memory. + SCREEN[0] = func_rom_bank2_f('0', 7); // banked call to rom in bank 2 from main memory. + SCREEN[0] = func_main_a('0', 7); // Near call in main memory from main memory. + SCREEN[0] = func_main_b('0', 7); // Near call in main memory from main memory. } - diff --git a/src/test/kc/procedure-callingconvention-phi-bank-5.ld b/src/test/kc/procedure-callingconvention-phi-bank-5.ld new file mode 100644 index 000000000..b82b5d038 --- /dev/null +++ b/src/test/kc/procedure-callingconvention-phi-bank-5.ld @@ -0,0 +1,7 @@ +.segmentdef Program [segments="Basic, Code, Data, Bank1, Bank2"] +.segmentdef Basic [start=$0801]a +.segmentdef Code [start=%P] +.segmentdef Data [startAfter="Code"] +.segmentdef Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef Bank2 [start=$C000, min=$C000, max=$FFFF, align=$100] + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-5.asm b/src/test/ref/procedure-callingconvention-phi-bank-5.asm index f04dd9403..b1c97a971 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-5.asm +++ b/src/test/ref/procedure-callingconvention-phi-bank-5.asm @@ -1,268 +1,312 @@ -// Test a far call procedure with a calling convention phi +// The linker specification of the different segments. .cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] + .segmentdef Program [segments="Basic, Code, Data, Bank1, Bank2"] +.segmentdef Basic [start=$0801]a .segmentdef Code [start=$80d] .segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] +.segmentdef Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef Bank2 [start=$C000, min=$C000, max=$FFFF, align=$100] + // The target computer platform is the Commander X16, + // which implements banking in ram between 0xA0000 and 0xBFFF, + // and in rom between 0xC000 and 0xFFFF. .label SCREEN = $400 .segment Code +// Practically this means that the main() function is placed in main memory ... main: { - // func_bank1_a('0', 7) + // func_ram_bank1_a('0', 7) lda #7 ldx #'0' jsr $ff6e - .byte func_bank1_a + .byte func_ram_bank1_a .byte 1 - // func_bank1_a('0', 7) - // SCREEN[0] = func_bank1_a('0', 7) - // far call + // func_ram_bank1_a('0', 7) + // SCREEN[0] = func_ram_bank1_a('0', 7) sta SCREEN - // func_bank1_b('0', 7) - lda #7 - ldx #'0' - jsr func_bank1_b - // func_bank1_b('0', 7) - // SCREEN[0] = func_bank1_b('0', 7) - // far call + // func_ram_bank1_b('0', 7) + jsr func_ram_bank1_b + // SCREEN[0] = func_ram_bank1_b('0', 7) + // Banked call to ram in bank 1 from main memory. + lda #func_ram_bank1_b.return sta SCREEN - // func_bank1_c('0', 7) + // func_ram_bank1_c('0', 7) jsr $ff6e - .byte func_bank1_c + .byte func_ram_bank1_c .byte 1 - // func_bank1_c('0', 7) - // SCREEN[0] = func_bank1_c('0', 7) - // far call + // func_ram_bank1_c('0', 7) + // SCREEN[0] = func_ram_bank1_c('0', 7) + // Banked call to ram in bank 1 from main memory. sta SCREEN - // func_bank1_d('0', 7) + // func_ram_bank1_d('0', 7) jsr $ff6e - .byte func_bank1_d + .byte func_ram_bank1_d .byte 1 - // func_bank1_d('0', 7) - // SCREEN[0] = func_bank1_d('0', 7) - // far call + // func_ram_bank1_d('0', 7) + // SCREEN[0] = func_ram_bank1_d('0', 7) + // Banked call to ram in bank 1 from main memory. sta SCREEN - // func_bank1_e('0', 7) - jsr func_bank1_e - // func_bank1_e('0', 7) - // SCREEN[0] = func_bank1_e('0', 7) - // near call + // func_ram_bank1_e('0', 7) + ldx #7 + lda #'0' + jsr $ff6e + .byte func_ram_bank1_e + .byte 1 + // func_ram_bank1_e('0', 7) + // SCREEN[0] = func_ram_bank1_e('0', 7) + // Banked call to ram in bank 1 from main memory. sta SCREEN - // func_bank1_f('0', 7) - jsr func_bank1_f - // func_bank1_f('0', 7) - // SCREEN[0] = func_bank1_f('0', 7) - // near call + // func_ram_bank1_f('0', 7) + jsr $ff6e + .byte func_ram_bank1_f + .byte 1 + // func_ram_bank1_f('0', 7) + // SCREEN[0] = func_ram_bank1_f('0', 7) + // Banked call to ram in bank 1 from main memory. sta SCREEN - // func_bank2_a('0', 7) + // func_rom_bank2_a('0', 7) lda #7 ldx #'0' jsr $ff6e - .byte func_bank2_a + .byte func_rom_bank2_a .byte 2 - // func_bank2_a('0', 7) - // SCREEN[0] = func_bank2_a('0', 7) - // far call + // func_rom_bank2_a('0', 7) + // SCREEN[0] = func_rom_bank2_a('0', 7) + // Banked call to ram in bank 1 from main memory. sta SCREEN - // func_bank2_b('0', 7) - lda #7 - ldx #'0' - jsr func_bank2_b - // func_bank2_b('0', 7) - // SCREEN[0] = func_bank2_b('0', 7) - // far call + // func_rom_bank2_b('0', 7) + ldx #7 + lda #'0' + jsr func_rom_bank2_b + // func_rom_bank2_b('0', 7) + // SCREEN[0] = func_rom_bank2_b('0', 7) + // Banked call to rom in bank 2 from main memory. sta SCREEN - // func_bank2_c('0', 7) + // func_rom_bank2_c('0', 7) jsr $ff6e - .byte func_bank2_c + .byte func_rom_bank2_c .byte 2 - // func_bank2_c('0', 7) - // SCREEN[0] = func_bank2_c('0', 7) - // far call + // func_rom_bank2_c('0', 7) + // SCREEN[0] = func_rom_bank2_c('0', 7) + // Banked call to rom in bank 2 from main memory. sta SCREEN - // func_bank2_d('0', 7) + // func_rom_bank2_d('0', 7) jsr $ff6e - .byte func_bank2_d + .byte func_rom_bank2_d .byte 2 - // func_bank2_d('0', 7) - // SCREEN[0] = func_bank2_d('0', 7) - // far call + // func_rom_bank2_d('0', 7) + // SCREEN[0] = func_rom_bank2_d('0', 7) + // Banked call to rom in bank 2 from main memory. sta SCREEN - // func_bank2_e('0', 7) + // func_rom_bank2_e('0', 7) + ldx #7 + lda #'0' jsr $ff6e - .byte func_bank2_e + .byte func_rom_bank2_e .byte 2 - // func_bank2_e('0', 7) - // SCREEN[0] = func_bank2_e('0', 7) - // far call + // func_rom_bank2_e('0', 7) + // SCREEN[0] = func_rom_bank2_e('0', 7) + // Banked call to rom in bank 2 from main memory. sta SCREEN - // func_bank2_f('0', 7) + // func_rom_bank2_f('0', 7) jsr $ff6e - .byte func_bank2_f + .byte func_rom_bank2_f .byte 2 - // func_bank2_f('0', 7) - // SCREEN[0] = func_bank2_f('0', 7) - // far call + // func_rom_bank2_f('0', 7) + // SCREEN[0] = func_rom_bank2_f('0', 7) + // banked call to rom in bank 2 from main memory. + sta SCREEN + // func_main_a('0', 7) + ldx #7 + lda #'0' + jsr func_main_a + // func_main_a('0', 7) + // SCREEN[0] = func_main_a('0', 7) + // banked call to rom in bank 2 from main memory. + sta SCREEN + // func_main_b('0', 7) + jsr func_main_b + // func_main_b('0', 7) + // SCREEN[0] = func_main_b('0', 7) + // Near call in main memory from main memory. sta SCREEN // } rts } -.segment stage -// __register(A) char func_bank1_a(__register(X) char a, __register(A) char b) -func_bank1_a: { - // a+b +.segment Bank1 +// Functional code +// __register(A) char func_ram_bank1_a(__register(X) char a, __register(A) char b) +func_ram_bank1_a: { + // a + b stx.z $ff clc adc.z $ff // } rts } -.segment platform -// __register(A) char func_bank1_b(__register(X) char a, __register(A) char b) -func_bank1_b: { - // a+b - stx.z $ff - clc - adc.z $ff - // } - rts -} -.segment stage -// __register(A) char func_bank1_c(char a, char b) -func_bank1_c: { +.segment Bank2 +// The sequent functions will consider no banking calculations anymore. +// The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram. +// char func_ram_bank1_b(char a, char b) +func_ram_bank1_b: { .const a = '0' .const b = 7 - // func_bank1_a(a,b) + .label return = a+b + rts +} +.segment Bank1 +// __register(A) char func_ram_bank1_c(char a, char b) +func_ram_bank1_c: { + .const a = '0' + .const b = 7 + // func_ram_bank1_a(a, b) lda #b ldx #a - jsr func_bank1_a - // func_bank1_a(a,b) + jsr func_ram_bank1_a + // func_ram_bank1_a(a, b) // } rts } -// __register(A) char func_bank1_d(char a, char b) -func_bank1_d: { +// __register(A) char func_ram_bank1_d(char a, char b) +func_ram_bank1_d: { .const a = '0' .const b = 7 - // func_bank2_a(a,b) + // func_rom_bank2_a(a, b) lda #b ldx #a jsr $ff6e - .byte func_bank2_a + .byte func_rom_bank2_a .byte 2 - // func_bank2_a(a,b) + // func_rom_bank2_a(a, b) // } rts } -.segment platform -// __register(A) char func_bank1_e(char a, char b) -func_bank1_e: { +// __register(A) char func_ram_bank1_e(__register(A) char a, __register(X) char b) +func_ram_bank1_e: { + // func_rom_bank2_b(a, b) + jsr func_rom_bank2_b + // func_rom_bank2_b(a, b) + // } + rts +} +// __register(A) char func_ram_bank1_f(char a, char b) +func_ram_bank1_f: { .const a = '0' .const b = 7 - // func_bank1_a(a,b) + // func_main_a(a, b) + ldx #b + lda #a + jsr func_main_a + // func_main_a(a, b) + // } + rts +} +.segment Bank2 +// The sequent functions will be banked using call method rom in bank number 2. +// __register(A) char func_rom_bank2_a(__register(X) char a, __register(A) char b) +func_rom_bank2_a: { + // a + b + stx.z $ff + clc + adc.z $ff + // } + rts +} +// The __bank directive declares this function to be banked using call method rom in bank number 2 of banked rom. +// __register(A) char func_rom_bank2_b(__register(A) char a, __register(X) char b) +func_rom_bank2_b: { + // a + b + stx.z $ff + clc + adc.z $ff + // } + rts +} +// __register(A) char func_rom_bank2_c(char a, char b) +func_rom_bank2_c: { + .const a = '0' + .const b = 7 + // func_ram_bank1_a(a, b) lda #b ldx #a jsr $ff6e - .byte func_bank1_a + .byte func_ram_bank1_a .byte 1 - // func_bank1_a(a,b) + // func_ram_bank1_a(a, b) // } rts } -// __register(A) char func_bank1_f(char a, char b) -func_bank1_f: { +// __register(A) char func_rom_bank2_d(char a, char b) +func_rom_bank2_d: { .const a = '0' .const b = 7 - // func_bank2_a(a,b) + // func_rom_bank2_a(a, b) lda #b ldx #a + jsr func_rom_bank2_a + // func_rom_bank2_a(a, b) + // } + rts +} +// __register(A) char func_rom_bank2_e(__register(A) char a, __register(X) char b) +func_rom_bank2_e: { + // func_rom_bank2_b(a, b) + jsr func_rom_bank2_b + // func_rom_bank2_b(a, b) + // } + rts +} +// __register(A) char func_rom_bank2_f(char a, char b) +func_rom_bank2_f: { + .const a = '0' + .const b = 7 + // func_main_a(a, b) + ldx #b + lda #a + jsr func_main_a + // func_main_a(a, b) + // } + rts +} +.segment Code +// The sequent functions will be addressed in the default main memory location (segment Code). +// Allocated in main memory. +// __register(A) char func_main_a(__register(A) char a, __register(X) char b) +func_main_a: { + // func_ram_bank1_e(a, b) jsr $ff6e - .byte func_bank2_a + .byte func_ram_bank1_e + .byte 1 + // func_ram_bank1_e(a, b) + // } + rts +} +// Allocated in main memory. +// __register(A) char func_main_b(char a, char b) +func_main_b: { + .const a = '0' + .const b = 7 + // func_rom_bank2_e(a, b) + ldx #b + lda #a + jsr $ff6e + .byte func_rom_bank2_e .byte 2 - // func_bank2_a(a,b) - // } - rts -} -// __register(A) char func_bank2_a(__register(X) char a, __register(A) char b) -func_bank2_a: { - // a+b - stx.z $ff - clc - adc.z $ff - // } - rts -} -// __register(A) char func_bank2_b(__register(X) char a, __register(A) char b) -func_bank2_b: { - // a+b - stx.z $ff - clc - adc.z $ff - // } - rts -} -// __register(A) char func_bank2_c(char a, char b) -func_bank2_c: { - .const a = '0' - .const b = 7 - // func_bank1_a(a,b) - lda #b - ldx #a - jsr $ff6e - .byte func_bank1_a - .byte 1 - // func_bank1_a(a,b) - // } - rts -} -// __register(A) char func_bank2_d(char a, char b) -func_bank2_d: { - .const a = '0' - .const b = 7 - // func_bank2_a(a,b) - lda #b - ldx #a - jsr func_bank2_a - // func_bank2_a(a,b) - // } - rts -} -// __register(A) char func_bank2_e(char a, char b) -func_bank2_e: { - .const a = '0' - .const b = 7 - // func_bank2_b(a,b) - lda #b - ldx #a - jsr func_bank2_b - // func_bank2_b(a,b) - // } - rts -} -// __register(A) char func_bank2_f(char a, char b) -func_bank2_f: { - .const a = '0' - .const b = 7 - // func_bank1_b(a,b) - lda #b - ldx #a - jsr func_bank1_b - // func_bank1_b(a,b) + // func_rom_bank2_e(a, b) // } rts } diff --git a/src/test/ref/procedure-callingconvention-phi-bank-5.cfg b/src/test/ref/procedure-callingconvention-phi-bank-5.cfg index 39617047b..12023844b 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-5.cfg +++ b/src/test/ref/procedure-callingconvention-phi-bank-5.cfg @@ -2,223 +2,266 @@ void main() main: scope:[main] from [0] phi() - [1] call func_bank1_a - [2] func_bank1_a::return#10 = func_bank1_a::return#0 + [1] call func_ram_bank1_a + [2] func_ram_bank1_a::return#4 = func_ram_bank1_a::return#0 to:main::@1 main::@1: scope:[main] from main - [3] main::$0 = func_bank1_a::return#10 + [3] main::$0 = func_ram_bank1_a::return#4 [4] *SCREEN = main::$0 - [5] call func_bank1_b - [6] func_bank1_b::return#3 = func_bank1_b::return#1 + [5] call func_ram_bank1_b to:main::@2 main::@2: scope:[main] from main::@1 - [7] main::$1 = func_bank1_b::return#3 - [8] *SCREEN = main::$1 - [9] call func_bank1_c - [10] func_bank1_c::return#2 = func_bank1_c::return#0 + [6] *SCREEN = func_ram_bank1_b::return#0 + [7] call func_ram_bank1_c + [8] func_ram_bank1_c::return#2 = func_ram_bank1_c::return#0 to:main::@3 main::@3: scope:[main] from main::@2 - [11] main::$2 = func_bank1_c::return#2 - [12] *SCREEN = main::$2 - [13] call func_bank1_d - [14] func_bank1_d::return#2 = func_bank1_d::return#0 + [9] main::$2 = func_ram_bank1_c::return#2 + [10] *SCREEN = main::$2 + [11] call func_ram_bank1_d + [12] func_ram_bank1_d::return#2 = func_ram_bank1_d::return#0 to:main::@4 main::@4: scope:[main] from main::@3 - [15] main::$3 = func_bank1_d::return#2 - [16] *SCREEN = main::$3 - [17] call func_bank1_e - [18] func_bank1_e::return#2 = func_bank1_e::return#0 + [13] main::$3 = func_ram_bank1_d::return#2 + [14] *SCREEN = main::$3 + [15] call func_ram_bank1_e + [16] func_ram_bank1_e::return#3 = func_ram_bank1_e::return#0 to:main::@5 main::@5: scope:[main] from main::@4 - [19] main::$4 = func_bank1_e::return#2 - [20] *SCREEN = main::$4 - [21] call func_bank1_f - [22] func_bank1_f::return#2 = func_bank1_f::return#0 + [17] main::$4 = func_ram_bank1_e::return#3 + [18] *SCREEN = main::$4 + [19] call func_ram_bank1_f + [20] func_ram_bank1_f::return#2 = func_ram_bank1_f::return#0 to:main::@6 main::@6: scope:[main] from main::@5 - [23] main::$5 = func_bank1_f::return#2 - [24] *SCREEN = main::$5 - [25] call func_bank2_a - [26] func_bank2_a::return#10 = func_bank2_a::return#1 + [21] main::$5 = func_ram_bank1_f::return#2 + [22] *SCREEN = main::$5 + [23] call func_rom_bank2_a + [24] func_rom_bank2_a::return#4 = func_rom_bank2_a::return#1 to:main::@7 main::@7: scope:[main] from main::@6 - [27] main::$6 = func_bank2_a::return#10 - [28] *SCREEN = main::$6 - [29] call func_bank2_b - [30] func_bank2_b::return#3 = func_bank2_b::return#1 + [25] main::$6 = func_rom_bank2_a::return#4 + [26] *SCREEN = main::$6 + [27] call func_rom_bank2_b + [28] func_rom_bank2_b::return#4 = func_rom_bank2_b::return#1 to:main::@8 main::@8: scope:[main] from main::@7 - [31] main::$7 = func_bank2_b::return#3 - [32] *SCREEN = main::$7 - [33] call func_bank2_c - [34] func_bank2_c::return#2 = func_bank2_c::return#0 + [29] main::$7 = func_rom_bank2_b::return#4 + [30] *SCREEN = main::$7 + [31] call func_rom_bank2_c + [32] func_rom_bank2_c::return#2 = func_rom_bank2_c::return#0 to:main::@9 main::@9: scope:[main] from main::@8 - [35] main::$8 = func_bank2_c::return#2 - [36] *SCREEN = main::$8 - [37] call func_bank2_d - [38] func_bank2_d::return#2 = func_bank2_d::return#0 + [33] main::$8 = func_rom_bank2_c::return#2 + [34] *SCREEN = main::$8 + [35] call func_rom_bank2_d + [36] func_rom_bank2_d::return#2 = func_rom_bank2_d::return#0 to:main::@10 main::@10: scope:[main] from main::@9 - [39] main::$9 = func_bank2_d::return#2 - [40] *SCREEN = main::$9 - [41] call func_bank2_e - [42] func_bank2_e::return#2 = func_bank2_e::return#0 + [37] main::$9 = func_rom_bank2_d::return#2 + [38] *SCREEN = main::$9 + [39] call func_rom_bank2_e + [40] func_rom_bank2_e::return#3 = func_rom_bank2_e::return#0 to:main::@11 main::@11: scope:[main] from main::@10 - [43] main::$10 = func_bank2_e::return#2 - [44] *SCREEN = main::$10 - [45] call func_bank2_f - [46] func_bank2_f::return#2 = func_bank2_f::return#0 + [41] main::$10 = func_rom_bank2_e::return#3 + [42] *SCREEN = main::$10 + [43] call func_rom_bank2_f + [44] func_rom_bank2_f::return#2 = func_rom_bank2_f::return#0 to:main::@12 main::@12: scope:[main] from main::@11 - [47] main::$11 = func_bank2_f::return#2 - [48] *SCREEN = main::$11 + [45] main::$11 = func_rom_bank2_f::return#2 + [46] *SCREEN = main::$11 + [47] call func_main_a + [48] func_main_a::return#4 = func_main_a::return#2 + to:main::@13 +main::@13: scope:[main] from main::@12 + [49] main::$12 = func_main_a::return#4 + [50] *SCREEN = main::$12 + [51] call func_main_b + [52] func_main_b::return#2 = func_main_b::return#0 + to:main::@14 +main::@14: scope:[main] from main::@13 + [53] main::$13 = func_main_b::return#2 + [54] *SCREEN = main::$13 to:main::@return -main::@return: scope:[main] from main::@12 - [49] return - to:@return - -__bank(bank) char func_bank1_a(char a , char b) -func_bank1_a: scope:[func_bank1_a] from func_bank1_c func_bank1_e func_bank2_c main - [50] func_bank1_a::b#4 = phi( func_bank1_c/func_bank1_c::b#0, func_bank1_e/func_bank1_e::b#0, func_bank2_c/func_bank2_c::b#0, main/7 ) - [50] func_bank1_a::a#4 = phi( func_bank1_c/func_bank1_c::a#0, func_bank1_e/func_bank1_e::a#0, func_bank2_c/func_bank2_c::a#0, main/'0' ) - [51] func_bank1_a::return#0 = func_bank1_a::a#4 + func_bank1_a::b#4 - to:func_bank1_a::@return -func_bank1_a::@return: scope:[func_bank1_a] from func_bank1_a - [52] return - to:@return - -char func_bank1_b(char a , char b) -func_bank1_b: scope:[func_bank1_b] from func_bank2_f main::@1 - [53] func_bank1_b::b#2 = phi( func_bank2_f/func_bank2_f::b#0, main::@1/7 ) - [53] func_bank1_b::a#2 = phi( func_bank2_f/func_bank2_f::a#0, main::@1/'0' ) - [54] func_bank1_b::return#1 = func_bank1_b::a#2 + func_bank1_b::b#2 - to:func_bank1_b::@return -func_bank1_b::@return: scope:[func_bank1_b] from func_bank1_b +main::@return: scope:[main] from main::@14 [55] return to:@return -__bank(bank) char func_bank1_c(char a , char b) -func_bank1_c: scope:[func_bank1_c] from main::@2 - [56] phi() - [57] call func_bank1_a - [58] func_bank1_a::return#2 = func_bank1_a::return#0 - to:func_bank1_c::@1 -func_bank1_c::@1: scope:[func_bank1_c] from func_bank1_c - [59] func_bank1_c::return#0 = func_bank1_a::return#2 - to:func_bank1_c::@return -func_bank1_c::@return: scope:[func_bank1_c] from func_bank1_c::@1 +__bank(bank) char func_ram_bank1_a(char a , char b) +func_ram_bank1_a: scope:[func_ram_bank1_a] from func_ram_bank1_c func_rom_bank2_c main + [56] func_ram_bank1_a::b#3 = phi( func_ram_bank1_c/func_ram_bank1_c::b#0, func_rom_bank2_c/func_rom_bank2_c::b#0, main/7 ) + [56] func_ram_bank1_a::a#3 = phi( func_ram_bank1_c/func_ram_bank1_c::a#0, func_rom_bank2_c/func_rom_bank2_c::a#0, main/'0' ) + [57] func_ram_bank1_a::return#0 = func_ram_bank1_a::a#3 + func_ram_bank1_a::b#3 + to:func_ram_bank1_a::@return +func_ram_bank1_a::@return: scope:[func_ram_bank1_a] from func_ram_bank1_a + [58] return + to:@return + +char func_ram_bank1_b(char a , char b) +func_ram_bank1_b: scope:[func_ram_bank1_b] from main::@1 + [59] phi() + to:func_ram_bank1_b::@return +func_ram_bank1_b::@return: scope:[func_ram_bank1_b] from func_ram_bank1_b [60] return to:@return -__bank(bank) char func_bank1_d(char a , char b) -func_bank1_d: scope:[func_bank1_d] from main::@3 +__bank(bank) char func_ram_bank1_c(char a , char b) +func_ram_bank1_c: scope:[func_ram_bank1_c] from main::@2 [61] phi() - [62] call func_bank2_a - [63] func_bank2_a::return#0 = func_bank2_a::return#1 - to:func_bank1_d::@1 -func_bank1_d::@1: scope:[func_bank1_d] from func_bank1_d - [64] func_bank1_d::return#0 = func_bank2_a::return#0 - to:func_bank1_d::@return -func_bank1_d::@return: scope:[func_bank1_d] from func_bank1_d::@1 + [62] call func_ram_bank1_a + [63] func_ram_bank1_a::return#2 = func_ram_bank1_a::return#0 + to:func_ram_bank1_c::@1 +func_ram_bank1_c::@1: scope:[func_ram_bank1_c] from func_ram_bank1_c + [64] func_ram_bank1_c::return#0 = func_ram_bank1_a::return#2 + to:func_ram_bank1_c::@return +func_ram_bank1_c::@return: scope:[func_ram_bank1_c] from func_ram_bank1_c::@1 [65] return to:@return -char func_bank1_e(char a , char b) -func_bank1_e: scope:[func_bank1_e] from main::@4 +__bank(bank) char func_ram_bank1_d(char a , char b) +func_ram_bank1_d: scope:[func_ram_bank1_d] from main::@3 [66] phi() - [67] call func_bank1_a - [68] func_bank1_a::return#4 = func_bank1_a::return#0 - to:func_bank1_e::@1 -func_bank1_e::@1: scope:[func_bank1_e] from func_bank1_e - [69] func_bank1_e::return#0 = func_bank1_a::return#4 - to:func_bank1_e::@return -func_bank1_e::@return: scope:[func_bank1_e] from func_bank1_e::@1 + [67] call func_rom_bank2_a + [68] func_rom_bank2_a::return#0 = func_rom_bank2_a::return#1 + to:func_ram_bank1_d::@1 +func_ram_bank1_d::@1: scope:[func_ram_bank1_d] from func_ram_bank1_d + [69] func_ram_bank1_d::return#0 = func_rom_bank2_a::return#0 + to:func_ram_bank1_d::@return +func_ram_bank1_d::@return: scope:[func_ram_bank1_d] from func_ram_bank1_d::@1 [70] return to:@return -char func_bank1_f(char a , char b) -func_bank1_f: scope:[func_bank1_f] from main::@5 - [71] phi() - [72] call func_bank2_a - [73] func_bank2_a::return#4 = func_bank2_a::return#1 - to:func_bank1_f::@1 -func_bank1_f::@1: scope:[func_bank1_f] from func_bank1_f - [74] func_bank1_f::return#0 = func_bank2_a::return#4 - to:func_bank1_f::@return -func_bank1_f::@return: scope:[func_bank1_f] from func_bank1_f::@1 - [75] return +__bank(bank) char func_ram_bank1_e(char a , char b) +func_ram_bank1_e: scope:[func_ram_bank1_e] from func_main_a main::@4 + [71] func_ram_bank1_e::b#2 = phi( func_main_a/func_ram_bank1_e::b#0, main::@4/7 ) + [71] func_ram_bank1_e::a#2 = phi( func_main_a/func_ram_bank1_e::a#0, main::@4/'0' ) + [72] func_rom_bank2_b::a#0 = func_ram_bank1_e::a#2 + [73] func_rom_bank2_b::b#0 = func_ram_bank1_e::b#2 + [74] call func_rom_bank2_b + [75] func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 + to:func_ram_bank1_e::@1 +func_ram_bank1_e::@1: scope:[func_ram_bank1_e] from func_ram_bank1_e + [76] func_ram_bank1_e::return#0 = func_rom_bank2_b::return#0 + to:func_ram_bank1_e::@return +func_ram_bank1_e::@return: scope:[func_ram_bank1_e] from func_ram_bank1_e::@1 + [77] return to:@return -__bank(bank) char func_bank2_a(char a , char b) -func_bank2_a: scope:[func_bank2_a] from func_bank1_d func_bank1_f func_bank2_d main::@6 - [76] func_bank2_a::b#4 = phi( func_bank1_d/func_bank1_d::b#0, func_bank1_f/func_bank1_f::b#0, func_bank2_d/func_bank2_d::b#0, main::@6/7 ) - [76] func_bank2_a::a#4 = phi( func_bank1_d/func_bank1_d::a#0, func_bank1_f/func_bank1_f::a#0, func_bank2_d/func_bank2_d::a#0, main::@6/'0' ) - [77] func_bank2_a::return#1 = func_bank2_a::a#4 + func_bank2_a::b#4 - to:func_bank2_a::@return -func_bank2_a::@return: scope:[func_bank2_a] from func_bank2_a - [78] return +__bank(bank) char func_ram_bank1_f(char a , char b) +func_ram_bank1_f: scope:[func_ram_bank1_f] from main::@5 + [78] phi() + [79] call func_main_a + [80] func_main_a::return#0 = func_main_a::return#2 + to:func_ram_bank1_f::@1 +func_ram_bank1_f::@1: scope:[func_ram_bank1_f] from func_ram_bank1_f + [81] func_ram_bank1_f::return#0 = func_main_a::return#0 + to:func_ram_bank1_f::@return +func_ram_bank1_f::@return: scope:[func_ram_bank1_f] from func_ram_bank1_f::@1 + [82] return to:@return -char func_bank2_b(char a , char b) -func_bank2_b: scope:[func_bank2_b] from func_bank2_e main::@7 - [79] func_bank2_b::b#2 = phi( func_bank2_e/func_bank2_e::b#0, main::@7/7 ) - [79] func_bank2_b::a#2 = phi( func_bank2_e/func_bank2_e::a#0, main::@7/'0' ) - [80] func_bank2_b::return#1 = func_bank2_b::a#2 + func_bank2_b::b#2 - to:func_bank2_b::@return -func_bank2_b::@return: scope:[func_bank2_b] from func_bank2_b - [81] return +__bank(bank) char func_rom_bank2_a(char a , char b) +func_rom_bank2_a: scope:[func_rom_bank2_a] from func_ram_bank1_d func_rom_bank2_d main::@6 + [83] func_rom_bank2_a::b#3 = phi( func_ram_bank1_d/func_ram_bank1_d::b#0, func_rom_bank2_d/func_rom_bank2_d::b#0, main::@6/7 ) + [83] func_rom_bank2_a::a#3 = phi( func_ram_bank1_d/func_ram_bank1_d::a#0, func_rom_bank2_d/func_rom_bank2_d::a#0, main::@6/'0' ) + [84] func_rom_bank2_a::return#1 = func_rom_bank2_a::a#3 + func_rom_bank2_a::b#3 + to:func_rom_bank2_a::@return +func_rom_bank2_a::@return: scope:[func_rom_bank2_a] from func_rom_bank2_a + [85] return to:@return -__bank(bank) char func_bank2_c(char a , char b) -func_bank2_c: scope:[func_bank2_c] from main::@8 - [82] phi() - [83] call func_bank1_a - [84] func_bank1_a::return#3 = func_bank1_a::return#0 - to:func_bank2_c::@1 -func_bank2_c::@1: scope:[func_bank2_c] from func_bank2_c - [85] func_bank2_c::return#0 = func_bank1_a::return#3 - to:func_bank2_c::@return -func_bank2_c::@return: scope:[func_bank2_c] from func_bank2_c::@1 - [86] return +char func_rom_bank2_b(char a , char b) +func_rom_bank2_b: scope:[func_rom_bank2_b] from func_ram_bank1_e func_rom_bank2_e main::@7 + [86] func_rom_bank2_b::b#3 = phi( func_ram_bank1_e/func_rom_bank2_b::b#0, func_rom_bank2_e/func_rom_bank2_b::b#1, main::@7/7 ) + [86] func_rom_bank2_b::a#3 = phi( func_ram_bank1_e/func_rom_bank2_b::a#0, func_rom_bank2_e/func_rom_bank2_b::a#1, main::@7/'0' ) + [87] func_rom_bank2_b::return#1 = func_rom_bank2_b::a#3 + func_rom_bank2_b::b#3 + to:func_rom_bank2_b::@return +func_rom_bank2_b::@return: scope:[func_rom_bank2_b] from func_rom_bank2_b + [88] return to:@return -__bank(bank) char func_bank2_d(char a , char b) -func_bank2_d: scope:[func_bank2_d] from main::@9 - [87] phi() - [88] call func_bank2_a - [89] func_bank2_a::return#3 = func_bank2_a::return#1 - to:func_bank2_d::@1 -func_bank2_d::@1: scope:[func_bank2_d] from func_bank2_d - [90] func_bank2_d::return#0 = func_bank2_a::return#3 - to:func_bank2_d::@return -func_bank2_d::@return: scope:[func_bank2_d] from func_bank2_d::@1 - [91] return +__bank(bank) char func_rom_bank2_c(char a , char b) +func_rom_bank2_c: scope:[func_rom_bank2_c] from main::@8 + [89] phi() + [90] call func_ram_bank1_a + [91] func_ram_bank1_a::return#3 = func_ram_bank1_a::return#0 + to:func_rom_bank2_c::@1 +func_rom_bank2_c::@1: scope:[func_rom_bank2_c] from func_rom_bank2_c + [92] func_rom_bank2_c::return#0 = func_ram_bank1_a::return#3 + to:func_rom_bank2_c::@return +func_rom_bank2_c::@return: scope:[func_rom_bank2_c] from func_rom_bank2_c::@1 + [93] return to:@return -__bank(bank) char func_bank2_e(char a , char b) -func_bank2_e: scope:[func_bank2_e] from main::@10 - [92] phi() - [93] call func_bank2_b - [94] func_bank2_b::return#0 = func_bank2_b::return#1 - to:func_bank2_e::@1 -func_bank2_e::@1: scope:[func_bank2_e] from func_bank2_e - [95] func_bank2_e::return#0 = func_bank2_b::return#0 - to:func_bank2_e::@return -func_bank2_e::@return: scope:[func_bank2_e] from func_bank2_e::@1 - [96] return +__bank(bank) char func_rom_bank2_d(char a , char b) +func_rom_bank2_d: scope:[func_rom_bank2_d] from main::@9 + [94] phi() + [95] call func_rom_bank2_a + [96] func_rom_bank2_a::return#3 = func_rom_bank2_a::return#1 + to:func_rom_bank2_d::@1 +func_rom_bank2_d::@1: scope:[func_rom_bank2_d] from func_rom_bank2_d + [97] func_rom_bank2_d::return#0 = func_rom_bank2_a::return#3 + to:func_rom_bank2_d::@return +func_rom_bank2_d::@return: scope:[func_rom_bank2_d] from func_rom_bank2_d::@1 + [98] return to:@return -__bank(bank) char func_bank2_f(char a , char b) -func_bank2_f: scope:[func_bank2_f] from main::@11 - [97] phi() - [98] call func_bank1_b - [99] func_bank1_b::return#0 = func_bank1_b::return#1 - to:func_bank2_f::@1 -func_bank2_f::@1: scope:[func_bank2_f] from func_bank2_f - [100] func_bank2_f::return#0 = func_bank1_b::return#0 - to:func_bank2_f::@return -func_bank2_f::@return: scope:[func_bank2_f] from func_bank2_f::@1 - [101] return +__bank(bank) char func_rom_bank2_e(char a , char b) +func_rom_bank2_e: scope:[func_rom_bank2_e] from func_main_b main::@10 + [99] func_rom_bank2_e::b#2 = phi( func_main_b/func_main_b::b#0, main::@10/7 ) + [99] func_rom_bank2_e::a#2 = phi( func_main_b/func_main_b::a#0, main::@10/'0' ) + [100] func_rom_bank2_b::a#1 = func_rom_bank2_e::a#2 + [101] func_rom_bank2_b::b#1 = func_rom_bank2_e::b#2 + [102] call func_rom_bank2_b + [103] func_rom_bank2_b::return#3 = func_rom_bank2_b::return#1 + to:func_rom_bank2_e::@1 +func_rom_bank2_e::@1: scope:[func_rom_bank2_e] from func_rom_bank2_e + [104] func_rom_bank2_e::return#0 = func_rom_bank2_b::return#3 + to:func_rom_bank2_e::@return +func_rom_bank2_e::@return: scope:[func_rom_bank2_e] from func_rom_bank2_e::@1 + [105] return + to:@return + +__bank(bank) char func_rom_bank2_f(char a , char b) +func_rom_bank2_f: scope:[func_rom_bank2_f] from main::@11 + [106] phi() + [107] call func_main_a + [108] func_main_a::return#1 = func_main_a::return#2 + to:func_rom_bank2_f::@1 +func_rom_bank2_f::@1: scope:[func_rom_bank2_f] from func_rom_bank2_f + [109] func_rom_bank2_f::return#0 = func_main_a::return#1 + to:func_rom_bank2_f::@return +func_rom_bank2_f::@return: scope:[func_rom_bank2_f] from func_rom_bank2_f::@1 + [110] return + to:@return + +char func_main_a(char a , char b) +func_main_a: scope:[func_main_a] from func_ram_bank1_f func_rom_bank2_f main::@12 + [111] func_main_a::b#3 = phi( func_ram_bank1_f/func_ram_bank1_f::b#0, func_rom_bank2_f/func_rom_bank2_f::b#0, main::@12/7 ) + [111] func_main_a::a#3 = phi( func_ram_bank1_f/func_ram_bank1_f::a#0, func_rom_bank2_f/func_rom_bank2_f::a#0, main::@12/'0' ) + [112] func_ram_bank1_e::a#0 = func_main_a::a#3 + [113] func_ram_bank1_e::b#0 = func_main_a::b#3 + [114] call func_ram_bank1_e + [115] func_ram_bank1_e::return#2 = func_ram_bank1_e::return#0 + to:func_main_a::@1 +func_main_a::@1: scope:[func_main_a] from func_main_a + [116] func_main_a::return#2 = func_ram_bank1_e::return#2 + to:func_main_a::@return +func_main_a::@return: scope:[func_main_a] from func_main_a::@1 + [117] return + to:@return + +char func_main_b(char a , char b) +func_main_b: scope:[func_main_b] from main::@13 + [118] phi() + [119] call func_rom_bank2_e + [120] func_rom_bank2_e::return#2 = func_rom_bank2_e::return#0 + to:func_main_b::@1 +func_main_b::@1: scope:[func_main_b] from func_main_b + [121] func_main_b::return#0 = func_rom_bank2_e::return#2 + to:func_main_b::@return +func_main_b::@return: scope:[func_main_b] from func_main_b::@1 + [122] return to:@return diff --git a/src/test/ref/procedure-callingconvention-phi-bank-5.log b/src/test/ref/procedure-callingconvention-phi-bank-5.log index 1e374e133..7c7b8a77a 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-5.log +++ b/src/test/ref/procedure-callingconvention-phi-bank-5.log @@ -1,331 +1,389 @@ -Loading link script "procedure-callingconvention-phi-bank.ld" +Loading link script "procedure-callingconvention-phi-bank-5.ld" CONTROL FLOW GRAPH SSA -__bank(bank) char func_bank1_a(char a , char b) -func_bank1_a: scope:[func_bank1_a] from func_bank1_c func_bank1_e func_bank2_c main - func_bank1_a::b#4 = phi( func_bank1_c/func_bank1_a::b#0, func_bank1_e/func_bank1_a::b#2, func_bank2_c/func_bank1_a::b#1, main/func_bank1_a::b#3 ) - func_bank1_a::a#4 = phi( func_bank1_c/func_bank1_a::a#0, func_bank1_e/func_bank1_a::a#2, func_bank2_c/func_bank1_a::a#1, main/func_bank1_a::a#3 ) - func_bank1_a::$0 = func_bank1_a::a#4 + func_bank1_a::b#4 - func_bank1_a::return#0 = func_bank1_a::$0 - to:func_bank1_a::@return -func_bank1_a::@return: scope:[func_bank1_a] from func_bank1_a - func_bank1_a::return#6 = phi( func_bank1_a/func_bank1_a::return#0 ) - func_bank1_a::return#1 = func_bank1_a::return#6 +__bank(bank) char func_ram_bank1_a(char a , char b) +func_ram_bank1_a: scope:[func_ram_bank1_a] from func_ram_bank1_c func_rom_bank2_c main + func_ram_bank1_a::b#3 = phi( func_ram_bank1_c/func_ram_bank1_a::b#0, func_rom_bank2_c/func_ram_bank1_a::b#1, main/func_ram_bank1_a::b#2 ) + func_ram_bank1_a::a#3 = phi( func_ram_bank1_c/func_ram_bank1_a::a#0, func_rom_bank2_c/func_ram_bank1_a::a#1, main/func_ram_bank1_a::a#2 ) + func_ram_bank1_a::$0 = func_ram_bank1_a::a#3 + func_ram_bank1_a::b#3 + func_ram_bank1_a::return#0 = func_ram_bank1_a::$0 + to:func_ram_bank1_a::@return +func_ram_bank1_a::@return: scope:[func_ram_bank1_a] from func_ram_bank1_a + func_ram_bank1_a::return#5 = phi( func_ram_bank1_a/func_ram_bank1_a::return#0 ) + func_ram_bank1_a::return#1 = func_ram_bank1_a::return#5 return to:@return -__bank(bank) char func_bank1_c(char a , char b) -func_bank1_c: scope:[func_bank1_c] from main::@2 - func_bank1_c::b#1 = phi( main::@2/func_bank1_c::b#0 ) - func_bank1_c::a#1 = phi( main::@2/func_bank1_c::a#0 ) - func_bank1_a::a#0 = func_bank1_c::a#1 - func_bank1_a::b#0 = func_bank1_c::b#1 - call func_bank1_a - func_bank1_a::return#2 = func_bank1_a::return#1 - to:func_bank1_c::@1 -func_bank1_c::@1: scope:[func_bank1_c] from func_bank1_c - func_bank1_a::return#7 = phi( func_bank1_c/func_bank1_a::return#2 ) - func_bank1_c::$0 = func_bank1_a::return#7 - func_bank1_c::return#0 = func_bank1_c::$0 - to:func_bank1_c::@return -func_bank1_c::@return: scope:[func_bank1_c] from func_bank1_c::@1 - func_bank1_c::return#3 = phi( func_bank1_c::@1/func_bank1_c::return#0 ) - func_bank1_c::return#1 = func_bank1_c::return#3 +char func_ram_bank1_b(char a , char b) +func_ram_bank1_b: scope:[func_ram_bank1_b] from main::@1 + func_ram_bank1_b::b#1 = phi( main::@1/func_ram_bank1_b::b#0 ) + func_ram_bank1_b::a#1 = phi( main::@1/func_ram_bank1_b::a#0 ) + func_ram_bank1_b::$0 = func_ram_bank1_b::a#1 + func_ram_bank1_b::b#1 + func_ram_bank1_b::return#0 = func_ram_bank1_b::$0 + to:func_ram_bank1_b::@return +func_ram_bank1_b::@return: scope:[func_ram_bank1_b] from func_ram_bank1_b + func_ram_bank1_b::return#3 = phi( func_ram_bank1_b/func_ram_bank1_b::return#0 ) + func_ram_bank1_b::return#1 = func_ram_bank1_b::return#3 return to:@return -__bank(bank) char func_bank1_d(char a , char b) -func_bank1_d: scope:[func_bank1_d] from main::@3 - func_bank1_d::b#1 = phi( main::@3/func_bank1_d::b#0 ) - func_bank1_d::a#1 = phi( main::@3/func_bank1_d::a#0 ) - func_bank2_a::a#0 = func_bank1_d::a#1 - func_bank2_a::b#0 = func_bank1_d::b#1 - call func_bank2_a - func_bank2_a::return#0 = func_bank2_a::return#2 - to:func_bank1_d::@1 -func_bank1_d::@1: scope:[func_bank1_d] from func_bank1_d - func_bank2_a::return#6 = phi( func_bank1_d/func_bank2_a::return#0 ) - func_bank1_d::$0 = func_bank2_a::return#6 - func_bank1_d::return#0 = func_bank1_d::$0 - to:func_bank1_d::@return -func_bank1_d::@return: scope:[func_bank1_d] from func_bank1_d::@1 - func_bank1_d::return#3 = phi( func_bank1_d::@1/func_bank1_d::return#0 ) - func_bank1_d::return#1 = func_bank1_d::return#3 +__bank(bank) char func_ram_bank1_c(char a , char b) +func_ram_bank1_c: scope:[func_ram_bank1_c] from main::@2 + func_ram_bank1_c::b#1 = phi( main::@2/func_ram_bank1_c::b#0 ) + func_ram_bank1_c::a#1 = phi( main::@2/func_ram_bank1_c::a#0 ) + func_ram_bank1_a::a#0 = func_ram_bank1_c::a#1 + func_ram_bank1_a::b#0 = func_ram_bank1_c::b#1 + call func_ram_bank1_a + func_ram_bank1_a::return#2 = func_ram_bank1_a::return#1 + to:func_ram_bank1_c::@1 +func_ram_bank1_c::@1: scope:[func_ram_bank1_c] from func_ram_bank1_c + func_ram_bank1_a::return#6 = phi( func_ram_bank1_c/func_ram_bank1_a::return#2 ) + func_ram_bank1_c::$0 = func_ram_bank1_a::return#6 + func_ram_bank1_c::return#0 = func_ram_bank1_c::$0 + to:func_ram_bank1_c::@return +func_ram_bank1_c::@return: scope:[func_ram_bank1_c] from func_ram_bank1_c::@1 + func_ram_bank1_c::return#3 = phi( func_ram_bank1_c::@1/func_ram_bank1_c::return#0 ) + func_ram_bank1_c::return#1 = func_ram_bank1_c::return#3 return to:@return -__bank(bank) char func_bank2_a(char a , char b) -func_bank2_a: scope:[func_bank2_a] from func_bank1_d func_bank1_f func_bank2_d main::@6 - func_bank2_a::b#4 = phi( func_bank1_d/func_bank2_a::b#0, func_bank1_f/func_bank2_a::b#2, func_bank2_d/func_bank2_a::b#1, main::@6/func_bank2_a::b#3 ) - func_bank2_a::a#4 = phi( func_bank1_d/func_bank2_a::a#0, func_bank1_f/func_bank2_a::a#2, func_bank2_d/func_bank2_a::a#1, main::@6/func_bank2_a::a#3 ) - func_bank2_a::$0 = func_bank2_a::a#4 + func_bank2_a::b#4 - func_bank2_a::return#1 = func_bank2_a::$0 - to:func_bank2_a::@return -func_bank2_a::@return: scope:[func_bank2_a] from func_bank2_a - func_bank2_a::return#7 = phi( func_bank2_a/func_bank2_a::return#1 ) - func_bank2_a::return#2 = func_bank2_a::return#7 +__bank(bank) char func_ram_bank1_d(char a , char b) +func_ram_bank1_d: scope:[func_ram_bank1_d] from main::@3 + func_ram_bank1_d::b#1 = phi( main::@3/func_ram_bank1_d::b#0 ) + func_ram_bank1_d::a#1 = phi( main::@3/func_ram_bank1_d::a#0 ) + func_rom_bank2_a::a#0 = func_ram_bank1_d::a#1 + func_rom_bank2_a::b#0 = func_ram_bank1_d::b#1 + call func_rom_bank2_a + func_rom_bank2_a::return#0 = func_rom_bank2_a::return#2 + to:func_ram_bank1_d::@1 +func_ram_bank1_d::@1: scope:[func_ram_bank1_d] from func_ram_bank1_d + func_rom_bank2_a::return#5 = phi( func_ram_bank1_d/func_rom_bank2_a::return#0 ) + func_ram_bank1_d::$0 = func_rom_bank2_a::return#5 + func_ram_bank1_d::return#0 = func_ram_bank1_d::$0 + to:func_ram_bank1_d::@return +func_ram_bank1_d::@return: scope:[func_ram_bank1_d] from func_ram_bank1_d::@1 + func_ram_bank1_d::return#3 = phi( func_ram_bank1_d::@1/func_ram_bank1_d::return#0 ) + func_ram_bank1_d::return#1 = func_ram_bank1_d::return#3 return to:@return -__bank(bank) char func_bank2_c(char a , char b) -func_bank2_c: scope:[func_bank2_c] from main::@8 - func_bank2_c::b#1 = phi( main::@8/func_bank2_c::b#0 ) - func_bank2_c::a#1 = phi( main::@8/func_bank2_c::a#0 ) - func_bank1_a::a#1 = func_bank2_c::a#1 - func_bank1_a::b#1 = func_bank2_c::b#1 - call func_bank1_a - func_bank1_a::return#3 = func_bank1_a::return#1 - to:func_bank2_c::@1 -func_bank2_c::@1: scope:[func_bank2_c] from func_bank2_c - func_bank1_a::return#8 = phi( func_bank2_c/func_bank1_a::return#3 ) - func_bank2_c::$0 = func_bank1_a::return#8 - func_bank2_c::return#0 = func_bank2_c::$0 - to:func_bank2_c::@return -func_bank2_c::@return: scope:[func_bank2_c] from func_bank2_c::@1 - func_bank2_c::return#3 = phi( func_bank2_c::@1/func_bank2_c::return#0 ) - func_bank2_c::return#1 = func_bank2_c::return#3 +__bank(bank) char func_ram_bank1_e(char a , char b) +func_ram_bank1_e: scope:[func_ram_bank1_e] from func_main_a main::@4 + func_ram_bank1_e::b#2 = phi( func_main_a/func_ram_bank1_e::b#0, main::@4/func_ram_bank1_e::b#1 ) + func_ram_bank1_e::a#2 = phi( func_main_a/func_ram_bank1_e::a#0, main::@4/func_ram_bank1_e::a#1 ) + func_rom_bank2_b::a#0 = func_ram_bank1_e::a#2 + func_rom_bank2_b::b#0 = func_ram_bank1_e::b#2 + call func_rom_bank2_b + func_rom_bank2_b::return#0 = func_rom_bank2_b::return#2 + to:func_ram_bank1_e::@1 +func_ram_bank1_e::@1: scope:[func_ram_bank1_e] from func_ram_bank1_e + func_rom_bank2_b::return#5 = phi( func_ram_bank1_e/func_rom_bank2_b::return#0 ) + func_ram_bank1_e::$0 = func_rom_bank2_b::return#5 + func_ram_bank1_e::return#0 = func_ram_bank1_e::$0 + to:func_ram_bank1_e::@return +func_ram_bank1_e::@return: scope:[func_ram_bank1_e] from func_ram_bank1_e::@1 + func_ram_bank1_e::return#4 = phi( func_ram_bank1_e::@1/func_ram_bank1_e::return#0 ) + func_ram_bank1_e::return#1 = func_ram_bank1_e::return#4 return to:@return -__bank(bank) char func_bank2_d(char a , char b) -func_bank2_d: scope:[func_bank2_d] from main::@9 - func_bank2_d::b#1 = phi( main::@9/func_bank2_d::b#0 ) - func_bank2_d::a#1 = phi( main::@9/func_bank2_d::a#0 ) - func_bank2_a::a#1 = func_bank2_d::a#1 - func_bank2_a::b#1 = func_bank2_d::b#1 - call func_bank2_a - func_bank2_a::return#3 = func_bank2_a::return#2 - to:func_bank2_d::@1 -func_bank2_d::@1: scope:[func_bank2_d] from func_bank2_d - func_bank2_a::return#8 = phi( func_bank2_d/func_bank2_a::return#3 ) - func_bank2_d::$0 = func_bank2_a::return#8 - func_bank2_d::return#0 = func_bank2_d::$0 - to:func_bank2_d::@return -func_bank2_d::@return: scope:[func_bank2_d] from func_bank2_d::@1 - func_bank2_d::return#3 = phi( func_bank2_d::@1/func_bank2_d::return#0 ) - func_bank2_d::return#1 = func_bank2_d::return#3 +__bank(bank) char func_ram_bank1_f(char a , char b) +func_ram_bank1_f: scope:[func_ram_bank1_f] from main::@5 + func_ram_bank1_f::b#1 = phi( main::@5/func_ram_bank1_f::b#0 ) + func_ram_bank1_f::a#1 = phi( main::@5/func_ram_bank1_f::a#0 ) + func_main_a::a#0 = func_ram_bank1_f::a#1 + func_main_a::b#0 = func_ram_bank1_f::b#1 + call func_main_a + func_main_a::return#0 = func_main_a::return#3 + to:func_ram_bank1_f::@1 +func_ram_bank1_f::@1: scope:[func_ram_bank1_f] from func_ram_bank1_f + func_main_a::return#5 = phi( func_ram_bank1_f/func_main_a::return#0 ) + func_ram_bank1_f::$0 = func_main_a::return#5 + func_ram_bank1_f::return#0 = func_ram_bank1_f::$0 + to:func_ram_bank1_f::@return +func_ram_bank1_f::@return: scope:[func_ram_bank1_f] from func_ram_bank1_f::@1 + func_ram_bank1_f::return#3 = phi( func_ram_bank1_f::@1/func_ram_bank1_f::return#0 ) + func_ram_bank1_f::return#1 = func_ram_bank1_f::return#3 return to:@return -__bank(bank) char func_bank2_e(char a , char b) -func_bank2_e: scope:[func_bank2_e] from main::@10 - func_bank2_e::b#1 = phi( main::@10/func_bank2_e::b#0 ) - func_bank2_e::a#1 = phi( main::@10/func_bank2_e::a#0 ) - func_bank2_b::a#0 = func_bank2_e::a#1 - func_bank2_b::b#0 = func_bank2_e::b#1 - call func_bank2_b - func_bank2_b::return#0 = func_bank2_b::return#2 - to:func_bank2_e::@1 -func_bank2_e::@1: scope:[func_bank2_e] from func_bank2_e - func_bank2_b::return#4 = phi( func_bank2_e/func_bank2_b::return#0 ) - func_bank2_e::$0 = func_bank2_b::return#4 - func_bank2_e::return#0 = func_bank2_e::$0 - to:func_bank2_e::@return -func_bank2_e::@return: scope:[func_bank2_e] from func_bank2_e::@1 - func_bank2_e::return#3 = phi( func_bank2_e::@1/func_bank2_e::return#0 ) - func_bank2_e::return#1 = func_bank2_e::return#3 +__bank(bank) char func_rom_bank2_a(char a , char b) +func_rom_bank2_a: scope:[func_rom_bank2_a] from func_ram_bank1_d func_rom_bank2_d main::@6 + func_rom_bank2_a::b#3 = phi( func_ram_bank1_d/func_rom_bank2_a::b#0, func_rom_bank2_d/func_rom_bank2_a::b#1, main::@6/func_rom_bank2_a::b#2 ) + func_rom_bank2_a::a#3 = phi( func_ram_bank1_d/func_rom_bank2_a::a#0, func_rom_bank2_d/func_rom_bank2_a::a#1, main::@6/func_rom_bank2_a::a#2 ) + func_rom_bank2_a::$0 = func_rom_bank2_a::a#3 + func_rom_bank2_a::b#3 + func_rom_bank2_a::return#1 = func_rom_bank2_a::$0 + to:func_rom_bank2_a::@return +func_rom_bank2_a::@return: scope:[func_rom_bank2_a] from func_rom_bank2_a + func_rom_bank2_a::return#6 = phi( func_rom_bank2_a/func_rom_bank2_a::return#1 ) + func_rom_bank2_a::return#2 = func_rom_bank2_a::return#6 return to:@return -__bank(bank) char func_bank2_f(char a , char b) -func_bank2_f: scope:[func_bank2_f] from main::@11 - func_bank2_f::b#1 = phi( main::@11/func_bank2_f::b#0 ) - func_bank2_f::a#1 = phi( main::@11/func_bank2_f::a#0 ) - func_bank1_b::a#0 = func_bank2_f::a#1 - func_bank1_b::b#0 = func_bank2_f::b#1 - call func_bank1_b - func_bank1_b::return#0 = func_bank1_b::return#2 - to:func_bank2_f::@1 -func_bank2_f::@1: scope:[func_bank2_f] from func_bank2_f - func_bank1_b::return#4 = phi( func_bank2_f/func_bank1_b::return#0 ) - func_bank2_f::$0 = func_bank1_b::return#4 - func_bank2_f::return#0 = func_bank2_f::$0 - to:func_bank2_f::@return -func_bank2_f::@return: scope:[func_bank2_f] from func_bank2_f::@1 - func_bank2_f::return#3 = phi( func_bank2_f::@1/func_bank2_f::return#0 ) - func_bank2_f::return#1 = func_bank2_f::return#3 +char func_rom_bank2_b(char a , char b) +func_rom_bank2_b: scope:[func_rom_bank2_b] from func_ram_bank1_e func_rom_bank2_e main::@7 + func_rom_bank2_b::b#3 = phi( func_ram_bank1_e/func_rom_bank2_b::b#0, func_rom_bank2_e/func_rom_bank2_b::b#1, main::@7/func_rom_bank2_b::b#2 ) + func_rom_bank2_b::a#3 = phi( func_ram_bank1_e/func_rom_bank2_b::a#0, func_rom_bank2_e/func_rom_bank2_b::a#1, main::@7/func_rom_bank2_b::a#2 ) + func_rom_bank2_b::$0 = func_rom_bank2_b::a#3 + func_rom_bank2_b::b#3 + func_rom_bank2_b::return#1 = func_rom_bank2_b::$0 + to:func_rom_bank2_b::@return +func_rom_bank2_b::@return: scope:[func_rom_bank2_b] from func_rom_bank2_b + func_rom_bank2_b::return#6 = phi( func_rom_bank2_b/func_rom_bank2_b::return#1 ) + func_rom_bank2_b::return#2 = func_rom_bank2_b::return#6 return to:@return -char func_bank1_b(char a , char b) -func_bank1_b: scope:[func_bank1_b] from func_bank2_f main::@1 - func_bank1_b::b#2 = phi( func_bank2_f/func_bank1_b::b#0, main::@1/func_bank1_b::b#1 ) - func_bank1_b::a#2 = phi( func_bank2_f/func_bank1_b::a#0, main::@1/func_bank1_b::a#1 ) - func_bank1_b::$0 = func_bank1_b::a#2 + func_bank1_b::b#2 - func_bank1_b::return#1 = func_bank1_b::$0 - to:func_bank1_b::@return -func_bank1_b::@return: scope:[func_bank1_b] from func_bank1_b - func_bank1_b::return#5 = phi( func_bank1_b/func_bank1_b::return#1 ) - func_bank1_b::return#2 = func_bank1_b::return#5 +__bank(bank) char func_rom_bank2_c(char a , char b) +func_rom_bank2_c: scope:[func_rom_bank2_c] from main::@8 + func_rom_bank2_c::b#1 = phi( main::@8/func_rom_bank2_c::b#0 ) + func_rom_bank2_c::a#1 = phi( main::@8/func_rom_bank2_c::a#0 ) + func_ram_bank1_a::a#1 = func_rom_bank2_c::a#1 + func_ram_bank1_a::b#1 = func_rom_bank2_c::b#1 + call func_ram_bank1_a + func_ram_bank1_a::return#3 = func_ram_bank1_a::return#1 + to:func_rom_bank2_c::@1 +func_rom_bank2_c::@1: scope:[func_rom_bank2_c] from func_rom_bank2_c + func_ram_bank1_a::return#7 = phi( func_rom_bank2_c/func_ram_bank1_a::return#3 ) + func_rom_bank2_c::$0 = func_ram_bank1_a::return#7 + func_rom_bank2_c::return#0 = func_rom_bank2_c::$0 + to:func_rom_bank2_c::@return +func_rom_bank2_c::@return: scope:[func_rom_bank2_c] from func_rom_bank2_c::@1 + func_rom_bank2_c::return#3 = phi( func_rom_bank2_c::@1/func_rom_bank2_c::return#0 ) + func_rom_bank2_c::return#1 = func_rom_bank2_c::return#3 return to:@return -char func_bank2_b(char a , char b) -func_bank2_b: scope:[func_bank2_b] from func_bank2_e main::@7 - func_bank2_b::b#2 = phi( func_bank2_e/func_bank2_b::b#0, main::@7/func_bank2_b::b#1 ) - func_bank2_b::a#2 = phi( func_bank2_e/func_bank2_b::a#0, main::@7/func_bank2_b::a#1 ) - func_bank2_b::$0 = func_bank2_b::a#2 + func_bank2_b::b#2 - func_bank2_b::return#1 = func_bank2_b::$0 - to:func_bank2_b::@return -func_bank2_b::@return: scope:[func_bank2_b] from func_bank2_b - func_bank2_b::return#5 = phi( func_bank2_b/func_bank2_b::return#1 ) - func_bank2_b::return#2 = func_bank2_b::return#5 +__bank(bank) char func_rom_bank2_d(char a , char b) +func_rom_bank2_d: scope:[func_rom_bank2_d] from main::@9 + func_rom_bank2_d::b#1 = phi( main::@9/func_rom_bank2_d::b#0 ) + func_rom_bank2_d::a#1 = phi( main::@9/func_rom_bank2_d::a#0 ) + func_rom_bank2_a::a#1 = func_rom_bank2_d::a#1 + func_rom_bank2_a::b#1 = func_rom_bank2_d::b#1 + call func_rom_bank2_a + func_rom_bank2_a::return#3 = func_rom_bank2_a::return#2 + to:func_rom_bank2_d::@1 +func_rom_bank2_d::@1: scope:[func_rom_bank2_d] from func_rom_bank2_d + func_rom_bank2_a::return#7 = phi( func_rom_bank2_d/func_rom_bank2_a::return#3 ) + func_rom_bank2_d::$0 = func_rom_bank2_a::return#7 + func_rom_bank2_d::return#0 = func_rom_bank2_d::$0 + to:func_rom_bank2_d::@return +func_rom_bank2_d::@return: scope:[func_rom_bank2_d] from func_rom_bank2_d::@1 + func_rom_bank2_d::return#3 = phi( func_rom_bank2_d::@1/func_rom_bank2_d::return#0 ) + func_rom_bank2_d::return#1 = func_rom_bank2_d::return#3 return to:@return -char func_bank1_e(char a , char b) -func_bank1_e: scope:[func_bank1_e] from main::@4 - func_bank1_e::b#1 = phi( main::@4/func_bank1_e::b#0 ) - func_bank1_e::a#1 = phi( main::@4/func_bank1_e::a#0 ) - func_bank1_a::a#2 = func_bank1_e::a#1 - func_bank1_a::b#2 = func_bank1_e::b#1 - call func_bank1_a - func_bank1_a::return#4 = func_bank1_a::return#1 - to:func_bank1_e::@1 -func_bank1_e::@1: scope:[func_bank1_e] from func_bank1_e - func_bank1_a::return#9 = phi( func_bank1_e/func_bank1_a::return#4 ) - func_bank1_e::$0 = func_bank1_a::return#9 - func_bank1_e::return#0 = func_bank1_e::$0 - to:func_bank1_e::@return -func_bank1_e::@return: scope:[func_bank1_e] from func_bank1_e::@1 - func_bank1_e::return#3 = phi( func_bank1_e::@1/func_bank1_e::return#0 ) - func_bank1_e::return#1 = func_bank1_e::return#3 +__bank(bank) char func_rom_bank2_e(char a , char b) +func_rom_bank2_e: scope:[func_rom_bank2_e] from func_main_b main::@10 + func_rom_bank2_e::b#2 = phi( func_main_b/func_rom_bank2_e::b#0, main::@10/func_rom_bank2_e::b#1 ) + func_rom_bank2_e::a#2 = phi( func_main_b/func_rom_bank2_e::a#0, main::@10/func_rom_bank2_e::a#1 ) + func_rom_bank2_b::a#1 = func_rom_bank2_e::a#2 + func_rom_bank2_b::b#1 = func_rom_bank2_e::b#2 + call func_rom_bank2_b + func_rom_bank2_b::return#3 = func_rom_bank2_b::return#2 + to:func_rom_bank2_e::@1 +func_rom_bank2_e::@1: scope:[func_rom_bank2_e] from func_rom_bank2_e + func_rom_bank2_b::return#7 = phi( func_rom_bank2_e/func_rom_bank2_b::return#3 ) + func_rom_bank2_e::$0 = func_rom_bank2_b::return#7 + func_rom_bank2_e::return#0 = func_rom_bank2_e::$0 + to:func_rom_bank2_e::@return +func_rom_bank2_e::@return: scope:[func_rom_bank2_e] from func_rom_bank2_e::@1 + func_rom_bank2_e::return#4 = phi( func_rom_bank2_e::@1/func_rom_bank2_e::return#0 ) + func_rom_bank2_e::return#1 = func_rom_bank2_e::return#4 return to:@return -char func_bank1_f(char a , char b) -func_bank1_f: scope:[func_bank1_f] from main::@5 - func_bank1_f::b#1 = phi( main::@5/func_bank1_f::b#0 ) - func_bank1_f::a#1 = phi( main::@5/func_bank1_f::a#0 ) - func_bank2_a::a#2 = func_bank1_f::a#1 - func_bank2_a::b#2 = func_bank1_f::b#1 - call func_bank2_a - func_bank2_a::return#4 = func_bank2_a::return#2 - to:func_bank1_f::@1 -func_bank1_f::@1: scope:[func_bank1_f] from func_bank1_f - func_bank2_a::return#9 = phi( func_bank1_f/func_bank2_a::return#4 ) - func_bank1_f::$0 = func_bank2_a::return#9 - func_bank1_f::return#0 = func_bank1_f::$0 - to:func_bank1_f::@return -func_bank1_f::@return: scope:[func_bank1_f] from func_bank1_f::@1 - func_bank1_f::return#3 = phi( func_bank1_f::@1/func_bank1_f::return#0 ) - func_bank1_f::return#1 = func_bank1_f::return#3 +__bank(bank) char func_rom_bank2_f(char a , char b) +func_rom_bank2_f: scope:[func_rom_bank2_f] from main::@11 + func_rom_bank2_f::b#1 = phi( main::@11/func_rom_bank2_f::b#0 ) + func_rom_bank2_f::a#1 = phi( main::@11/func_rom_bank2_f::a#0 ) + func_main_a::a#1 = func_rom_bank2_f::a#1 + func_main_a::b#1 = func_rom_bank2_f::b#1 + call func_main_a + func_main_a::return#1 = func_main_a::return#3 + to:func_rom_bank2_f::@1 +func_rom_bank2_f::@1: scope:[func_rom_bank2_f] from func_rom_bank2_f + func_main_a::return#6 = phi( func_rom_bank2_f/func_main_a::return#1 ) + func_rom_bank2_f::$0 = func_main_a::return#6 + func_rom_bank2_f::return#0 = func_rom_bank2_f::$0 + to:func_rom_bank2_f::@return +func_rom_bank2_f::@return: scope:[func_rom_bank2_f] from func_rom_bank2_f::@1 + func_rom_bank2_f::return#3 = phi( func_rom_bank2_f::@1/func_rom_bank2_f::return#0 ) + func_rom_bank2_f::return#1 = func_rom_bank2_f::return#3 + return + to:@return + +char func_main_a(char a , char b) +func_main_a: scope:[func_main_a] from func_ram_bank1_f func_rom_bank2_f main::@12 + func_main_a::b#3 = phi( func_ram_bank1_f/func_main_a::b#0, func_rom_bank2_f/func_main_a::b#1, main::@12/func_main_a::b#2 ) + func_main_a::a#3 = phi( func_ram_bank1_f/func_main_a::a#0, func_rom_bank2_f/func_main_a::a#1, main::@12/func_main_a::a#2 ) + func_ram_bank1_e::a#0 = func_main_a::a#3 + func_ram_bank1_e::b#0 = func_main_a::b#3 + call func_ram_bank1_e + func_ram_bank1_e::return#2 = func_ram_bank1_e::return#1 + to:func_main_a::@1 +func_main_a::@1: scope:[func_main_a] from func_main_a + func_ram_bank1_e::return#5 = phi( func_main_a/func_ram_bank1_e::return#2 ) + func_main_a::$0 = func_ram_bank1_e::return#5 + func_main_a::return#2 = func_main_a::$0 + to:func_main_a::@return +func_main_a::@return: scope:[func_main_a] from func_main_a::@1 + func_main_a::return#7 = phi( func_main_a::@1/func_main_a::return#2 ) + func_main_a::return#3 = func_main_a::return#7 + return + to:@return + +char func_main_b(char a , char b) +func_main_b: scope:[func_main_b] from main::@13 + func_main_b::b#1 = phi( main::@13/func_main_b::b#0 ) + func_main_b::a#1 = phi( main::@13/func_main_b::a#0 ) + func_rom_bank2_e::a#0 = func_main_b::a#1 + func_rom_bank2_e::b#0 = func_main_b::b#1 + call func_rom_bank2_e + func_rom_bank2_e::return#2 = func_rom_bank2_e::return#1 + to:func_main_b::@1 +func_main_b::@1: scope:[func_main_b] from func_main_b + func_rom_bank2_e::return#5 = phi( func_main_b/func_rom_bank2_e::return#2 ) + func_main_b::$0 = func_rom_bank2_e::return#5 + func_main_b::return#0 = func_main_b::$0 + to:func_main_b::@return +func_main_b::@return: scope:[func_main_b] from func_main_b::@1 + func_main_b::return#3 = phi( func_main_b::@1/func_main_b::return#0 ) + func_main_b::return#1 = func_main_b::return#3 return to:@return void main() main: scope:[main] from __start - func_bank1_a::a#3 = '0' - func_bank1_a::b#3 = 7 - call func_bank1_a - func_bank1_a::return#5 = func_bank1_a::return#1 + func_ram_bank1_a::a#2 = '0' + func_ram_bank1_a::b#2 = 7 + call func_ram_bank1_a + func_ram_bank1_a::return#4 = func_ram_bank1_a::return#1 to:main::@1 main::@1: scope:[main] from main - func_bank1_a::return#10 = phi( main/func_bank1_a::return#5 ) - main::$0 = func_bank1_a::return#10 + func_ram_bank1_a::return#8 = phi( main/func_ram_bank1_a::return#4 ) + main::$0 = func_ram_bank1_a::return#8 SCREEN[0] = main::$0 - func_bank1_b::a#1 = '0' - func_bank1_b::b#1 = 7 - call func_bank1_b - func_bank1_b::return#3 = func_bank1_b::return#2 + func_ram_bank1_b::a#0 = '0' + func_ram_bank1_b::b#0 = 7 + call func_ram_bank1_b + func_ram_bank1_b::return#2 = func_ram_bank1_b::return#1 to:main::@2 main::@2: scope:[main] from main::@1 - func_bank1_b::return#6 = phi( main::@1/func_bank1_b::return#3 ) - main::$1 = func_bank1_b::return#6 + func_ram_bank1_b::return#4 = phi( main::@1/func_ram_bank1_b::return#2 ) + main::$1 = func_ram_bank1_b::return#4 SCREEN[0] = main::$1 - func_bank1_c::a#0 = '0' - func_bank1_c::b#0 = 7 - call func_bank1_c - func_bank1_c::return#2 = func_bank1_c::return#1 + func_ram_bank1_c::a#0 = '0' + func_ram_bank1_c::b#0 = 7 + call func_ram_bank1_c + func_ram_bank1_c::return#2 = func_ram_bank1_c::return#1 to:main::@3 main::@3: scope:[main] from main::@2 - func_bank1_c::return#4 = phi( main::@2/func_bank1_c::return#2 ) - main::$2 = func_bank1_c::return#4 + func_ram_bank1_c::return#4 = phi( main::@2/func_ram_bank1_c::return#2 ) + main::$2 = func_ram_bank1_c::return#4 SCREEN[0] = main::$2 - func_bank1_d::a#0 = '0' - func_bank1_d::b#0 = 7 - call func_bank1_d - func_bank1_d::return#2 = func_bank1_d::return#1 + func_ram_bank1_d::a#0 = '0' + func_ram_bank1_d::b#0 = 7 + call func_ram_bank1_d + func_ram_bank1_d::return#2 = func_ram_bank1_d::return#1 to:main::@4 main::@4: scope:[main] from main::@3 - func_bank1_d::return#4 = phi( main::@3/func_bank1_d::return#2 ) - main::$3 = func_bank1_d::return#4 + func_ram_bank1_d::return#4 = phi( main::@3/func_ram_bank1_d::return#2 ) + main::$3 = func_ram_bank1_d::return#4 SCREEN[0] = main::$3 - func_bank1_e::a#0 = '0' - func_bank1_e::b#0 = 7 - call func_bank1_e - func_bank1_e::return#2 = func_bank1_e::return#1 + func_ram_bank1_e::a#1 = '0' + func_ram_bank1_e::b#1 = 7 + call func_ram_bank1_e + func_ram_bank1_e::return#3 = func_ram_bank1_e::return#1 to:main::@5 main::@5: scope:[main] from main::@4 - func_bank1_e::return#4 = phi( main::@4/func_bank1_e::return#2 ) - main::$4 = func_bank1_e::return#4 + func_ram_bank1_e::return#6 = phi( main::@4/func_ram_bank1_e::return#3 ) + main::$4 = func_ram_bank1_e::return#6 SCREEN[0] = main::$4 - func_bank1_f::a#0 = '0' - func_bank1_f::b#0 = 7 - call func_bank1_f - func_bank1_f::return#2 = func_bank1_f::return#1 + func_ram_bank1_f::a#0 = '0' + func_ram_bank1_f::b#0 = 7 + call func_ram_bank1_f + func_ram_bank1_f::return#2 = func_ram_bank1_f::return#1 to:main::@6 main::@6: scope:[main] from main::@5 - func_bank1_f::return#4 = phi( main::@5/func_bank1_f::return#2 ) - main::$5 = func_bank1_f::return#4 + func_ram_bank1_f::return#4 = phi( main::@5/func_ram_bank1_f::return#2 ) + main::$5 = func_ram_bank1_f::return#4 SCREEN[0] = main::$5 - func_bank2_a::a#3 = '0' - func_bank2_a::b#3 = 7 - call func_bank2_a - func_bank2_a::return#5 = func_bank2_a::return#2 + func_rom_bank2_a::a#2 = '0' + func_rom_bank2_a::b#2 = 7 + call func_rom_bank2_a + func_rom_bank2_a::return#4 = func_rom_bank2_a::return#2 to:main::@7 main::@7: scope:[main] from main::@6 - func_bank2_a::return#10 = phi( main::@6/func_bank2_a::return#5 ) - main::$6 = func_bank2_a::return#10 + func_rom_bank2_a::return#8 = phi( main::@6/func_rom_bank2_a::return#4 ) + main::$6 = func_rom_bank2_a::return#8 SCREEN[0] = main::$6 - func_bank2_b::a#1 = '0' - func_bank2_b::b#1 = 7 - call func_bank2_b - func_bank2_b::return#3 = func_bank2_b::return#2 + func_rom_bank2_b::a#2 = '0' + func_rom_bank2_b::b#2 = 7 + call func_rom_bank2_b + func_rom_bank2_b::return#4 = func_rom_bank2_b::return#2 to:main::@8 main::@8: scope:[main] from main::@7 - func_bank2_b::return#6 = phi( main::@7/func_bank2_b::return#3 ) - main::$7 = func_bank2_b::return#6 + func_rom_bank2_b::return#8 = phi( main::@7/func_rom_bank2_b::return#4 ) + main::$7 = func_rom_bank2_b::return#8 SCREEN[0] = main::$7 - func_bank2_c::a#0 = '0' - func_bank2_c::b#0 = 7 - call func_bank2_c - func_bank2_c::return#2 = func_bank2_c::return#1 + func_rom_bank2_c::a#0 = '0' + func_rom_bank2_c::b#0 = 7 + call func_rom_bank2_c + func_rom_bank2_c::return#2 = func_rom_bank2_c::return#1 to:main::@9 main::@9: scope:[main] from main::@8 - func_bank2_c::return#4 = phi( main::@8/func_bank2_c::return#2 ) - main::$8 = func_bank2_c::return#4 + func_rom_bank2_c::return#4 = phi( main::@8/func_rom_bank2_c::return#2 ) + main::$8 = func_rom_bank2_c::return#4 SCREEN[0] = main::$8 - func_bank2_d::a#0 = '0' - func_bank2_d::b#0 = 7 - call func_bank2_d - func_bank2_d::return#2 = func_bank2_d::return#1 + func_rom_bank2_d::a#0 = '0' + func_rom_bank2_d::b#0 = 7 + call func_rom_bank2_d + func_rom_bank2_d::return#2 = func_rom_bank2_d::return#1 to:main::@10 main::@10: scope:[main] from main::@9 - func_bank2_d::return#4 = phi( main::@9/func_bank2_d::return#2 ) - main::$9 = func_bank2_d::return#4 + func_rom_bank2_d::return#4 = phi( main::@9/func_rom_bank2_d::return#2 ) + main::$9 = func_rom_bank2_d::return#4 SCREEN[0] = main::$9 - func_bank2_e::a#0 = '0' - func_bank2_e::b#0 = 7 - call func_bank2_e - func_bank2_e::return#2 = func_bank2_e::return#1 + func_rom_bank2_e::a#1 = '0' + func_rom_bank2_e::b#1 = 7 + call func_rom_bank2_e + func_rom_bank2_e::return#3 = func_rom_bank2_e::return#1 to:main::@11 main::@11: scope:[main] from main::@10 - func_bank2_e::return#4 = phi( main::@10/func_bank2_e::return#2 ) - main::$10 = func_bank2_e::return#4 + func_rom_bank2_e::return#6 = phi( main::@10/func_rom_bank2_e::return#3 ) + main::$10 = func_rom_bank2_e::return#6 SCREEN[0] = main::$10 - func_bank2_f::a#0 = '0' - func_bank2_f::b#0 = 7 - call func_bank2_f - func_bank2_f::return#2 = func_bank2_f::return#1 + func_rom_bank2_f::a#0 = '0' + func_rom_bank2_f::b#0 = 7 + call func_rom_bank2_f + func_rom_bank2_f::return#2 = func_rom_bank2_f::return#1 to:main::@12 main::@12: scope:[main] from main::@11 - func_bank2_f::return#4 = phi( main::@11/func_bank2_f::return#2 ) - main::$11 = func_bank2_f::return#4 + func_rom_bank2_f::return#4 = phi( main::@11/func_rom_bank2_f::return#2 ) + main::$11 = func_rom_bank2_f::return#4 SCREEN[0] = main::$11 + func_main_a::a#2 = '0' + func_main_a::b#2 = 7 + call func_main_a + func_main_a::return#4 = func_main_a::return#3 + to:main::@13 +main::@13: scope:[main] from main::@12 + func_main_a::return#8 = phi( main::@12/func_main_a::return#4 ) + main::$12 = func_main_a::return#8 + SCREEN[0] = main::$12 + func_main_b::a#0 = '0' + func_main_b::b#0 = 7 + call func_main_b + func_main_b::return#2 = func_main_b::return#1 + to:main::@14 +main::@14: scope:[main] from main::@13 + func_main_b::return#4 = phi( main::@13/func_main_b::return#2 ) + main::$13 = func_main_b::return#4 + SCREEN[0] = main::$13 to:main::@return -main::@return: scope:[main] from main::@12 +main::@return: scope:[main] from main::@14 return to:@return @@ -342,211 +400,249 @@ __start::@return: scope:[__start] from __start::@1 SYMBOL TABLE SSA __constant char * const SCREEN = (char *)$400 void __start() -__bank(bank) char func_bank1_a(char a , char b) -char func_bank1_a::$0 -char func_bank1_a::a -char func_bank1_a::a#0 -char func_bank1_a::a#1 -char func_bank1_a::a#2 -char func_bank1_a::a#3 -char func_bank1_a::a#4 -char func_bank1_a::b -char func_bank1_a::b#0 -char func_bank1_a::b#1 -char func_bank1_a::b#2 -char func_bank1_a::b#3 -char func_bank1_a::b#4 -char func_bank1_a::return -char func_bank1_a::return#0 -char func_bank1_a::return#1 -char func_bank1_a::return#10 -char func_bank1_a::return#2 -char func_bank1_a::return#3 -char func_bank1_a::return#4 -char func_bank1_a::return#5 -char func_bank1_a::return#6 -char func_bank1_a::return#7 -char func_bank1_a::return#8 -char func_bank1_a::return#9 -char func_bank1_b(char a , char b) -char func_bank1_b::$0 -char func_bank1_b::a -char func_bank1_b::a#0 -char func_bank1_b::a#1 -char func_bank1_b::a#2 -char func_bank1_b::b -char func_bank1_b::b#0 -char func_bank1_b::b#1 -char func_bank1_b::b#2 -char func_bank1_b::return -char func_bank1_b::return#0 -char func_bank1_b::return#1 -char func_bank1_b::return#2 -char func_bank1_b::return#3 -char func_bank1_b::return#4 -char func_bank1_b::return#5 -char func_bank1_b::return#6 -__bank(bank) char func_bank1_c(char a , char b) -char func_bank1_c::$0 -char func_bank1_c::a -char func_bank1_c::a#0 -char func_bank1_c::a#1 -char func_bank1_c::b -char func_bank1_c::b#0 -char func_bank1_c::b#1 -char func_bank1_c::return -char func_bank1_c::return#0 -char func_bank1_c::return#1 -char func_bank1_c::return#2 -char func_bank1_c::return#3 -char func_bank1_c::return#4 -__bank(bank) char func_bank1_d(char a , char b) -char func_bank1_d::$0 -char func_bank1_d::a -char func_bank1_d::a#0 -char func_bank1_d::a#1 -char func_bank1_d::b -char func_bank1_d::b#0 -char func_bank1_d::b#1 -char func_bank1_d::return -char func_bank1_d::return#0 -char func_bank1_d::return#1 -char func_bank1_d::return#2 -char func_bank1_d::return#3 -char func_bank1_d::return#4 -char func_bank1_e(char a , char b) -char func_bank1_e::$0 -char func_bank1_e::a -char func_bank1_e::a#0 -char func_bank1_e::a#1 -char func_bank1_e::b -char func_bank1_e::b#0 -char func_bank1_e::b#1 -char func_bank1_e::return -char func_bank1_e::return#0 -char func_bank1_e::return#1 -char func_bank1_e::return#2 -char func_bank1_e::return#3 -char func_bank1_e::return#4 -char func_bank1_f(char a , char b) -char func_bank1_f::$0 -char func_bank1_f::a -char func_bank1_f::a#0 -char func_bank1_f::a#1 -char func_bank1_f::b -char func_bank1_f::b#0 -char func_bank1_f::b#1 -char func_bank1_f::return -char func_bank1_f::return#0 -char func_bank1_f::return#1 -char func_bank1_f::return#2 -char func_bank1_f::return#3 -char func_bank1_f::return#4 -__bank(bank) char func_bank2_a(char a , char b) -char func_bank2_a::$0 -char func_bank2_a::a -char func_bank2_a::a#0 -char func_bank2_a::a#1 -char func_bank2_a::a#2 -char func_bank2_a::a#3 -char func_bank2_a::a#4 -char func_bank2_a::b -char func_bank2_a::b#0 -char func_bank2_a::b#1 -char func_bank2_a::b#2 -char func_bank2_a::b#3 -char func_bank2_a::b#4 -char func_bank2_a::return -char func_bank2_a::return#0 -char func_bank2_a::return#1 -char func_bank2_a::return#10 -char func_bank2_a::return#2 -char func_bank2_a::return#3 -char func_bank2_a::return#4 -char func_bank2_a::return#5 -char func_bank2_a::return#6 -char func_bank2_a::return#7 -char func_bank2_a::return#8 -char func_bank2_a::return#9 -char func_bank2_b(char a , char b) -char func_bank2_b::$0 -char func_bank2_b::a -char func_bank2_b::a#0 -char func_bank2_b::a#1 -char func_bank2_b::a#2 -char func_bank2_b::b -char func_bank2_b::b#0 -char func_bank2_b::b#1 -char func_bank2_b::b#2 -char func_bank2_b::return -char func_bank2_b::return#0 -char func_bank2_b::return#1 -char func_bank2_b::return#2 -char func_bank2_b::return#3 -char func_bank2_b::return#4 -char func_bank2_b::return#5 -char func_bank2_b::return#6 -__bank(bank) char func_bank2_c(char a , char b) -char func_bank2_c::$0 -char func_bank2_c::a -char func_bank2_c::a#0 -char func_bank2_c::a#1 -char func_bank2_c::b -char func_bank2_c::b#0 -char func_bank2_c::b#1 -char func_bank2_c::return -char func_bank2_c::return#0 -char func_bank2_c::return#1 -char func_bank2_c::return#2 -char func_bank2_c::return#3 -char func_bank2_c::return#4 -__bank(bank) char func_bank2_d(char a , char b) -char func_bank2_d::$0 -char func_bank2_d::a -char func_bank2_d::a#0 -char func_bank2_d::a#1 -char func_bank2_d::b -char func_bank2_d::b#0 -char func_bank2_d::b#1 -char func_bank2_d::return -char func_bank2_d::return#0 -char func_bank2_d::return#1 -char func_bank2_d::return#2 -char func_bank2_d::return#3 -char func_bank2_d::return#4 -__bank(bank) char func_bank2_e(char a , char b) -char func_bank2_e::$0 -char func_bank2_e::a -char func_bank2_e::a#0 -char func_bank2_e::a#1 -char func_bank2_e::b -char func_bank2_e::b#0 -char func_bank2_e::b#1 -char func_bank2_e::return -char func_bank2_e::return#0 -char func_bank2_e::return#1 -char func_bank2_e::return#2 -char func_bank2_e::return#3 -char func_bank2_e::return#4 -__bank(bank) char func_bank2_f(char a , char b) -char func_bank2_f::$0 -char func_bank2_f::a -char func_bank2_f::a#0 -char func_bank2_f::a#1 -char func_bank2_f::b -char func_bank2_f::b#0 -char func_bank2_f::b#1 -char func_bank2_f::return -char func_bank2_f::return#0 -char func_bank2_f::return#1 -char func_bank2_f::return#2 -char func_bank2_f::return#3 -char func_bank2_f::return#4 +char func_main_a(char a , char b) +char func_main_a::$0 +char func_main_a::a +char func_main_a::a#0 +char func_main_a::a#1 +char func_main_a::a#2 +char func_main_a::a#3 +char func_main_a::b +char func_main_a::b#0 +char func_main_a::b#1 +char func_main_a::b#2 +char func_main_a::b#3 +char func_main_a::return +char func_main_a::return#0 +char func_main_a::return#1 +char func_main_a::return#2 +char func_main_a::return#3 +char func_main_a::return#4 +char func_main_a::return#5 +char func_main_a::return#6 +char func_main_a::return#7 +char func_main_a::return#8 +char func_main_b(char a , char b) +char func_main_b::$0 +char func_main_b::a +char func_main_b::a#0 +char func_main_b::a#1 +char func_main_b::b +char func_main_b::b#0 +char func_main_b::b#1 +char func_main_b::return +char func_main_b::return#0 +char func_main_b::return#1 +char func_main_b::return#2 +char func_main_b::return#3 +char func_main_b::return#4 +__bank(bank) char func_ram_bank1_a(char a , char b) +char func_ram_bank1_a::$0 +char func_ram_bank1_a::a +char func_ram_bank1_a::a#0 +char func_ram_bank1_a::a#1 +char func_ram_bank1_a::a#2 +char func_ram_bank1_a::a#3 +char func_ram_bank1_a::b +char func_ram_bank1_a::b#0 +char func_ram_bank1_a::b#1 +char func_ram_bank1_a::b#2 +char func_ram_bank1_a::b#3 +char func_ram_bank1_a::return +char func_ram_bank1_a::return#0 +char func_ram_bank1_a::return#1 +char func_ram_bank1_a::return#2 +char func_ram_bank1_a::return#3 +char func_ram_bank1_a::return#4 +char func_ram_bank1_a::return#5 +char func_ram_bank1_a::return#6 +char func_ram_bank1_a::return#7 +char func_ram_bank1_a::return#8 +char func_ram_bank1_b(char a , char b) +char func_ram_bank1_b::$0 +char func_ram_bank1_b::a +char func_ram_bank1_b::a#0 +char func_ram_bank1_b::a#1 +char func_ram_bank1_b::b +char func_ram_bank1_b::b#0 +char func_ram_bank1_b::b#1 +char func_ram_bank1_b::return +char func_ram_bank1_b::return#0 +char func_ram_bank1_b::return#1 +char func_ram_bank1_b::return#2 +char func_ram_bank1_b::return#3 +char func_ram_bank1_b::return#4 +__bank(bank) char func_ram_bank1_c(char a , char b) +char func_ram_bank1_c::$0 +char func_ram_bank1_c::a +char func_ram_bank1_c::a#0 +char func_ram_bank1_c::a#1 +char func_ram_bank1_c::b +char func_ram_bank1_c::b#0 +char func_ram_bank1_c::b#1 +char func_ram_bank1_c::return +char func_ram_bank1_c::return#0 +char func_ram_bank1_c::return#1 +char func_ram_bank1_c::return#2 +char func_ram_bank1_c::return#3 +char func_ram_bank1_c::return#4 +__bank(bank) char func_ram_bank1_d(char a , char b) +char func_ram_bank1_d::$0 +char func_ram_bank1_d::a +char func_ram_bank1_d::a#0 +char func_ram_bank1_d::a#1 +char func_ram_bank1_d::b +char func_ram_bank1_d::b#0 +char func_ram_bank1_d::b#1 +char func_ram_bank1_d::return +char func_ram_bank1_d::return#0 +char func_ram_bank1_d::return#1 +char func_ram_bank1_d::return#2 +char func_ram_bank1_d::return#3 +char func_ram_bank1_d::return#4 +__bank(bank) char func_ram_bank1_e(char a , char b) +char func_ram_bank1_e::$0 +char func_ram_bank1_e::a +char func_ram_bank1_e::a#0 +char func_ram_bank1_e::a#1 +char func_ram_bank1_e::a#2 +char func_ram_bank1_e::b +char func_ram_bank1_e::b#0 +char func_ram_bank1_e::b#1 +char func_ram_bank1_e::b#2 +char func_ram_bank1_e::return +char func_ram_bank1_e::return#0 +char func_ram_bank1_e::return#1 +char func_ram_bank1_e::return#2 +char func_ram_bank1_e::return#3 +char func_ram_bank1_e::return#4 +char func_ram_bank1_e::return#5 +char func_ram_bank1_e::return#6 +__bank(bank) char func_ram_bank1_f(char a , char b) +char func_ram_bank1_f::$0 +char func_ram_bank1_f::a +char func_ram_bank1_f::a#0 +char func_ram_bank1_f::a#1 +char func_ram_bank1_f::b +char func_ram_bank1_f::b#0 +char func_ram_bank1_f::b#1 +char func_ram_bank1_f::return +char func_ram_bank1_f::return#0 +char func_ram_bank1_f::return#1 +char func_ram_bank1_f::return#2 +char func_ram_bank1_f::return#3 +char func_ram_bank1_f::return#4 +__bank(bank) char func_rom_bank2_a(char a , char b) +char func_rom_bank2_a::$0 +char func_rom_bank2_a::a +char func_rom_bank2_a::a#0 +char func_rom_bank2_a::a#1 +char func_rom_bank2_a::a#2 +char func_rom_bank2_a::a#3 +char func_rom_bank2_a::b +char func_rom_bank2_a::b#0 +char func_rom_bank2_a::b#1 +char func_rom_bank2_a::b#2 +char func_rom_bank2_a::b#3 +char func_rom_bank2_a::return +char func_rom_bank2_a::return#0 +char func_rom_bank2_a::return#1 +char func_rom_bank2_a::return#2 +char func_rom_bank2_a::return#3 +char func_rom_bank2_a::return#4 +char func_rom_bank2_a::return#5 +char func_rom_bank2_a::return#6 +char func_rom_bank2_a::return#7 +char func_rom_bank2_a::return#8 +char func_rom_bank2_b(char a , char b) +char func_rom_bank2_b::$0 +char func_rom_bank2_b::a +char func_rom_bank2_b::a#0 +char func_rom_bank2_b::a#1 +char func_rom_bank2_b::a#2 +char func_rom_bank2_b::a#3 +char func_rom_bank2_b::b +char func_rom_bank2_b::b#0 +char func_rom_bank2_b::b#1 +char func_rom_bank2_b::b#2 +char func_rom_bank2_b::b#3 +char func_rom_bank2_b::return +char func_rom_bank2_b::return#0 +char func_rom_bank2_b::return#1 +char func_rom_bank2_b::return#2 +char func_rom_bank2_b::return#3 +char func_rom_bank2_b::return#4 +char func_rom_bank2_b::return#5 +char func_rom_bank2_b::return#6 +char func_rom_bank2_b::return#7 +char func_rom_bank2_b::return#8 +__bank(bank) char func_rom_bank2_c(char a , char b) +char func_rom_bank2_c::$0 +char func_rom_bank2_c::a +char func_rom_bank2_c::a#0 +char func_rom_bank2_c::a#1 +char func_rom_bank2_c::b +char func_rom_bank2_c::b#0 +char func_rom_bank2_c::b#1 +char func_rom_bank2_c::return +char func_rom_bank2_c::return#0 +char func_rom_bank2_c::return#1 +char func_rom_bank2_c::return#2 +char func_rom_bank2_c::return#3 +char func_rom_bank2_c::return#4 +__bank(bank) char func_rom_bank2_d(char a , char b) +char func_rom_bank2_d::$0 +char func_rom_bank2_d::a +char func_rom_bank2_d::a#0 +char func_rom_bank2_d::a#1 +char func_rom_bank2_d::b +char func_rom_bank2_d::b#0 +char func_rom_bank2_d::b#1 +char func_rom_bank2_d::return +char func_rom_bank2_d::return#0 +char func_rom_bank2_d::return#1 +char func_rom_bank2_d::return#2 +char func_rom_bank2_d::return#3 +char func_rom_bank2_d::return#4 +__bank(bank) char func_rom_bank2_e(char a , char b) +char func_rom_bank2_e::$0 +char func_rom_bank2_e::a +char func_rom_bank2_e::a#0 +char func_rom_bank2_e::a#1 +char func_rom_bank2_e::a#2 +char func_rom_bank2_e::b +char func_rom_bank2_e::b#0 +char func_rom_bank2_e::b#1 +char func_rom_bank2_e::b#2 +char func_rom_bank2_e::return +char func_rom_bank2_e::return#0 +char func_rom_bank2_e::return#1 +char func_rom_bank2_e::return#2 +char func_rom_bank2_e::return#3 +char func_rom_bank2_e::return#4 +char func_rom_bank2_e::return#5 +char func_rom_bank2_e::return#6 +__bank(bank) char func_rom_bank2_f(char a , char b) +char func_rom_bank2_f::$0 +char func_rom_bank2_f::a +char func_rom_bank2_f::a#0 +char func_rom_bank2_f::a#1 +char func_rom_bank2_f::b +char func_rom_bank2_f::b#0 +char func_rom_bank2_f::b#1 +char func_rom_bank2_f::return +char func_rom_bank2_f::return#0 +char func_rom_bank2_f::return#1 +char func_rom_bank2_f::return#2 +char func_rom_bank2_f::return#3 +char func_rom_bank2_f::return#4 void main() char main::$0 char main::$1 char main::$10 char main::$11 +char main::$12 +char main::$13 char main::$2 char main::$3 char main::$4 @@ -556,43 +652,49 @@ char main::$7 char main::$8 char main::$9 -Adding number conversion cast (unumber) 7 in func_bank1_a::b#3 = 7 +Adding number conversion cast (unumber) 7 in func_ram_bank1_a::b#2 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 -Adding number conversion cast (unumber) 7 in func_bank1_b::b#1 = 7 +Adding number conversion cast (unumber) 7 in func_ram_bank1_b::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$1 -Adding number conversion cast (unumber) 7 in func_bank1_c::b#0 = 7 +Adding number conversion cast (unumber) 7 in func_ram_bank1_c::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$2 -Adding number conversion cast (unumber) 7 in func_bank1_d::b#0 = 7 +Adding number conversion cast (unumber) 7 in func_ram_bank1_d::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$3 -Adding number conversion cast (unumber) 7 in func_bank1_e::b#0 = 7 +Adding number conversion cast (unumber) 7 in func_ram_bank1_e::b#1 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$4 -Adding number conversion cast (unumber) 7 in func_bank1_f::b#0 = 7 +Adding number conversion cast (unumber) 7 in func_ram_bank1_f::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$5 -Adding number conversion cast (unumber) 7 in func_bank2_a::b#3 = 7 +Adding number conversion cast (unumber) 7 in func_rom_bank2_a::b#2 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$6 -Adding number conversion cast (unumber) 7 in func_bank2_b::b#1 = 7 +Adding number conversion cast (unumber) 7 in func_rom_bank2_b::b#2 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$7 -Adding number conversion cast (unumber) 7 in func_bank2_c::b#0 = 7 +Adding number conversion cast (unumber) 7 in func_rom_bank2_c::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$8 -Adding number conversion cast (unumber) 7 in func_bank2_d::b#0 = 7 +Adding number conversion cast (unumber) 7 in func_rom_bank2_d::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$9 -Adding number conversion cast (unumber) 7 in func_bank2_e::b#0 = 7 +Adding number conversion cast (unumber) 7 in func_rom_bank2_e::b#1 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$10 -Adding number conversion cast (unumber) 7 in func_bank2_f::b#0 = 7 +Adding number conversion cast (unumber) 7 in func_rom_bank2_f::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$11 +Adding number conversion cast (unumber) 7 in func_main_a::b#2 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$12 +Adding number conversion cast (unumber) 7 in func_main_b::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$13 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast func_bank1_a::b#3 = (unumber)7 -Inlining cast func_bank1_b::b#1 = (unumber)7 -Inlining cast func_bank1_c::b#0 = (unumber)7 -Inlining cast func_bank1_d::b#0 = (unumber)7 -Inlining cast func_bank1_e::b#0 = (unumber)7 -Inlining cast func_bank1_f::b#0 = (unumber)7 -Inlining cast func_bank2_a::b#3 = (unumber)7 -Inlining cast func_bank2_b::b#1 = (unumber)7 -Inlining cast func_bank2_c::b#0 = (unumber)7 -Inlining cast func_bank2_d::b#0 = (unumber)7 -Inlining cast func_bank2_e::b#0 = (unumber)7 -Inlining cast func_bank2_f::b#0 = (unumber)7 +Inlining cast func_ram_bank1_a::b#2 = (unumber)7 +Inlining cast func_ram_bank1_b::b#0 = (unumber)7 +Inlining cast func_ram_bank1_c::b#0 = (unumber)7 +Inlining cast func_ram_bank1_d::b#0 = (unumber)7 +Inlining cast func_ram_bank1_e::b#1 = (unumber)7 +Inlining cast func_ram_bank1_f::b#0 = (unumber)7 +Inlining cast func_rom_bank2_a::b#2 = (unumber)7 +Inlining cast func_rom_bank2_b::b#2 = (unumber)7 +Inlining cast func_rom_bank2_c::b#0 = (unumber)7 +Inlining cast func_rom_bank2_d::b#0 = (unumber)7 +Inlining cast func_rom_bank2_e::b#1 = (unumber)7 +Inlining cast func_rom_bank2_f::b#0 = (unumber)7 +Inlining cast func_main_a::b#2 = (unumber)7 +Inlining cast func_main_b::b#0 = (unumber)7 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (char *) 1024 Simplifying constant integer cast 7 @@ -619,6 +721,10 @@ Simplifying constant integer cast 7 Simplifying constant integer cast 0 Simplifying constant integer cast 7 Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 @@ -644,519 +750,622 @@ Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias func_bank1_a::return#0 = func_bank1_a::$0 func_bank1_a::return#6 func_bank1_a::return#1 -Alias func_bank1_a::return#2 = func_bank1_a::return#7 -Alias func_bank1_c::return#0 = func_bank1_c::$0 func_bank1_c::return#3 func_bank1_c::return#1 -Alias func_bank2_a::return#0 = func_bank2_a::return#6 -Alias func_bank1_d::return#0 = func_bank1_d::$0 func_bank1_d::return#3 func_bank1_d::return#1 -Alias func_bank2_a::return#1 = func_bank2_a::$0 func_bank2_a::return#7 func_bank2_a::return#2 -Alias func_bank1_a::return#3 = func_bank1_a::return#8 -Alias func_bank2_c::return#0 = func_bank2_c::$0 func_bank2_c::return#3 func_bank2_c::return#1 -Alias func_bank2_a::return#3 = func_bank2_a::return#8 -Alias func_bank2_d::return#0 = func_bank2_d::$0 func_bank2_d::return#3 func_bank2_d::return#1 -Alias func_bank2_b::return#0 = func_bank2_b::return#4 -Alias func_bank2_e::return#0 = func_bank2_e::$0 func_bank2_e::return#3 func_bank2_e::return#1 -Alias func_bank1_b::return#0 = func_bank1_b::return#4 -Alias func_bank2_f::return#0 = func_bank2_f::$0 func_bank2_f::return#3 func_bank2_f::return#1 -Alias func_bank1_b::return#1 = func_bank1_b::$0 func_bank1_b::return#5 func_bank1_b::return#2 -Alias func_bank2_b::return#1 = func_bank2_b::$0 func_bank2_b::return#5 func_bank2_b::return#2 -Alias func_bank1_a::return#4 = func_bank1_a::return#9 -Alias func_bank1_e::return#0 = func_bank1_e::$0 func_bank1_e::return#3 func_bank1_e::return#1 -Alias func_bank2_a::return#4 = func_bank2_a::return#9 -Alias func_bank1_f::return#0 = func_bank1_f::$0 func_bank1_f::return#3 func_bank1_f::return#1 -Alias func_bank1_a::return#10 = func_bank1_a::return#5 -Alias func_bank1_b::return#3 = func_bank1_b::return#6 -Alias func_bank1_c::return#2 = func_bank1_c::return#4 -Alias func_bank1_d::return#2 = func_bank1_d::return#4 -Alias func_bank1_e::return#2 = func_bank1_e::return#4 -Alias func_bank1_f::return#2 = func_bank1_f::return#4 -Alias func_bank2_a::return#10 = func_bank2_a::return#5 -Alias func_bank2_b::return#3 = func_bank2_b::return#6 -Alias func_bank2_c::return#2 = func_bank2_c::return#4 -Alias func_bank2_d::return#2 = func_bank2_d::return#4 -Alias func_bank2_e::return#2 = func_bank2_e::return#4 -Alias func_bank2_f::return#2 = func_bank2_f::return#4 +Alias func_ram_bank1_a::return#0 = func_ram_bank1_a::$0 func_ram_bank1_a::return#5 func_ram_bank1_a::return#1 +Alias func_ram_bank1_b::return#0 = func_ram_bank1_b::$0 func_ram_bank1_b::return#3 func_ram_bank1_b::return#1 +Alias func_ram_bank1_a::return#2 = func_ram_bank1_a::return#6 +Alias func_ram_bank1_c::return#0 = func_ram_bank1_c::$0 func_ram_bank1_c::return#3 func_ram_bank1_c::return#1 +Alias func_rom_bank2_a::return#0 = func_rom_bank2_a::return#5 +Alias func_ram_bank1_d::return#0 = func_ram_bank1_d::$0 func_ram_bank1_d::return#3 func_ram_bank1_d::return#1 +Alias func_rom_bank2_b::return#0 = func_rom_bank2_b::return#5 +Alias func_ram_bank1_e::return#0 = func_ram_bank1_e::$0 func_ram_bank1_e::return#4 func_ram_bank1_e::return#1 +Alias func_main_a::return#0 = func_main_a::return#5 +Alias func_ram_bank1_f::return#0 = func_ram_bank1_f::$0 func_ram_bank1_f::return#3 func_ram_bank1_f::return#1 +Alias func_rom_bank2_a::return#1 = func_rom_bank2_a::$0 func_rom_bank2_a::return#6 func_rom_bank2_a::return#2 +Alias func_rom_bank2_b::return#1 = func_rom_bank2_b::$0 func_rom_bank2_b::return#6 func_rom_bank2_b::return#2 +Alias func_ram_bank1_a::return#3 = func_ram_bank1_a::return#7 +Alias func_rom_bank2_c::return#0 = func_rom_bank2_c::$0 func_rom_bank2_c::return#3 func_rom_bank2_c::return#1 +Alias func_rom_bank2_a::return#3 = func_rom_bank2_a::return#7 +Alias func_rom_bank2_d::return#0 = func_rom_bank2_d::$0 func_rom_bank2_d::return#3 func_rom_bank2_d::return#1 +Alias func_rom_bank2_b::return#3 = func_rom_bank2_b::return#7 +Alias func_rom_bank2_e::return#0 = func_rom_bank2_e::$0 func_rom_bank2_e::return#4 func_rom_bank2_e::return#1 +Alias func_main_a::return#1 = func_main_a::return#6 +Alias func_rom_bank2_f::return#0 = func_rom_bank2_f::$0 func_rom_bank2_f::return#3 func_rom_bank2_f::return#1 +Alias func_ram_bank1_e::return#2 = func_ram_bank1_e::return#5 +Alias func_main_a::return#2 = func_main_a::$0 func_main_a::return#7 func_main_a::return#3 +Alias func_rom_bank2_e::return#2 = func_rom_bank2_e::return#5 +Alias func_main_b::return#0 = func_main_b::$0 func_main_b::return#3 func_main_b::return#1 +Alias func_ram_bank1_a::return#4 = func_ram_bank1_a::return#8 +Alias func_ram_bank1_b::return#2 = func_ram_bank1_b::return#4 +Alias func_ram_bank1_c::return#2 = func_ram_bank1_c::return#4 +Alias func_ram_bank1_d::return#2 = func_ram_bank1_d::return#4 +Alias func_ram_bank1_e::return#3 = func_ram_bank1_e::return#6 +Alias func_ram_bank1_f::return#2 = func_ram_bank1_f::return#4 +Alias func_rom_bank2_a::return#4 = func_rom_bank2_a::return#8 +Alias func_rom_bank2_b::return#4 = func_rom_bank2_b::return#8 +Alias func_rom_bank2_c::return#2 = func_rom_bank2_c::return#4 +Alias func_rom_bank2_d::return#2 = func_rom_bank2_d::return#4 +Alias func_rom_bank2_e::return#3 = func_rom_bank2_e::return#6 +Alias func_rom_bank2_f::return#2 = func_rom_bank2_f::return#4 +Alias func_main_a::return#4 = func_main_a::return#8 +Alias func_main_b::return#2 = func_main_b::return#4 Successful SSA optimization Pass2AliasElimination -Identical Phi Values func_bank1_c::a#1 func_bank1_c::a#0 -Identical Phi Values func_bank1_c::b#1 func_bank1_c::b#0 -Identical Phi Values func_bank1_d::a#1 func_bank1_d::a#0 -Identical Phi Values func_bank1_d::b#1 func_bank1_d::b#0 -Identical Phi Values func_bank2_c::a#1 func_bank2_c::a#0 -Identical Phi Values func_bank2_c::b#1 func_bank2_c::b#0 -Identical Phi Values func_bank2_d::a#1 func_bank2_d::a#0 -Identical Phi Values func_bank2_d::b#1 func_bank2_d::b#0 -Identical Phi Values func_bank2_e::a#1 func_bank2_e::a#0 -Identical Phi Values func_bank2_e::b#1 func_bank2_e::b#0 -Identical Phi Values func_bank2_f::a#1 func_bank2_f::a#0 -Identical Phi Values func_bank2_f::b#1 func_bank2_f::b#0 -Identical Phi Values func_bank1_e::a#1 func_bank1_e::a#0 -Identical Phi Values func_bank1_e::b#1 func_bank1_e::b#0 -Identical Phi Values func_bank1_f::a#1 func_bank1_f::a#0 -Identical Phi Values func_bank1_f::b#1 func_bank1_f::b#0 +Identical Phi Values func_ram_bank1_b::a#1 func_ram_bank1_b::a#0 +Identical Phi Values func_ram_bank1_b::b#1 func_ram_bank1_b::b#0 +Identical Phi Values func_ram_bank1_c::a#1 func_ram_bank1_c::a#0 +Identical Phi Values func_ram_bank1_c::b#1 func_ram_bank1_c::b#0 +Identical Phi Values func_ram_bank1_d::a#1 func_ram_bank1_d::a#0 +Identical Phi Values func_ram_bank1_d::b#1 func_ram_bank1_d::b#0 +Identical Phi Values func_ram_bank1_f::a#1 func_ram_bank1_f::a#0 +Identical Phi Values func_ram_bank1_f::b#1 func_ram_bank1_f::b#0 +Identical Phi Values func_rom_bank2_c::a#1 func_rom_bank2_c::a#0 +Identical Phi Values func_rom_bank2_c::b#1 func_rom_bank2_c::b#0 +Identical Phi Values func_rom_bank2_d::a#1 func_rom_bank2_d::a#0 +Identical Phi Values func_rom_bank2_d::b#1 func_rom_bank2_d::b#0 +Identical Phi Values func_rom_bank2_f::a#1 func_rom_bank2_f::a#0 +Identical Phi Values func_rom_bank2_f::b#1 func_rom_bank2_f::b#0 +Identical Phi Values func_main_b::a#1 func_main_b::a#0 +Identical Phi Values func_main_b::b#1 func_main_b::b#0 Successful SSA optimization Pass2IdenticalPhiElimination -Constant func_bank1_a::a#3 = '0' -Constant func_bank1_a::b#3 = 7 -Constant func_bank1_b::a#1 = '0' -Constant func_bank1_b::b#1 = 7 -Constant func_bank1_c::a#0 = '0' -Constant func_bank1_c::b#0 = 7 -Constant func_bank1_d::a#0 = '0' -Constant func_bank1_d::b#0 = 7 -Constant func_bank1_e::a#0 = '0' -Constant func_bank1_e::b#0 = 7 -Constant func_bank1_f::a#0 = '0' -Constant func_bank1_f::b#0 = 7 -Constant func_bank2_a::a#3 = '0' -Constant func_bank2_a::b#3 = 7 -Constant func_bank2_b::a#1 = '0' -Constant func_bank2_b::b#1 = 7 -Constant func_bank2_c::a#0 = '0' -Constant func_bank2_c::b#0 = 7 -Constant func_bank2_d::a#0 = '0' -Constant func_bank2_d::b#0 = 7 -Constant func_bank2_e::a#0 = '0' -Constant func_bank2_e::b#0 = 7 -Constant func_bank2_f::a#0 = '0' -Constant func_bank2_f::b#0 = 7 +Constant func_ram_bank1_a::a#2 = '0' +Constant func_ram_bank1_a::b#2 = 7 +Constant func_ram_bank1_b::a#0 = '0' +Constant func_ram_bank1_b::b#0 = 7 +Constant func_ram_bank1_c::a#0 = '0' +Constant func_ram_bank1_c::b#0 = 7 +Constant func_ram_bank1_d::a#0 = '0' +Constant func_ram_bank1_d::b#0 = 7 +Constant func_ram_bank1_e::a#1 = '0' +Constant func_ram_bank1_e::b#1 = 7 +Constant func_ram_bank1_f::a#0 = '0' +Constant func_ram_bank1_f::b#0 = 7 +Constant func_rom_bank2_a::a#2 = '0' +Constant func_rom_bank2_a::b#2 = 7 +Constant func_rom_bank2_b::a#2 = '0' +Constant func_rom_bank2_b::b#2 = 7 +Constant func_rom_bank2_c::a#0 = '0' +Constant func_rom_bank2_c::b#0 = 7 +Constant func_rom_bank2_d::a#0 = '0' +Constant func_rom_bank2_d::b#0 = 7 +Constant func_rom_bank2_e::a#1 = '0' +Constant func_rom_bank2_e::b#1 = 7 +Constant func_rom_bank2_f::a#0 = '0' +Constant func_rom_bank2_f::b#0 = 7 +Constant func_main_a::a#2 = '0' +Constant func_main_a::b#2 = 7 +Constant func_main_b::a#0 = '0' +Constant func_main_b::b#0 = 7 Successful SSA optimization Pass2ConstantIdentification -Constant func_bank1_a::a#0 = func_bank1_c::a#0 -Constant func_bank1_a::b#0 = func_bank1_c::b#0 -Constant func_bank2_a::a#0 = func_bank1_d::a#0 -Constant func_bank2_a::b#0 = func_bank1_d::b#0 -Constant func_bank1_a::a#1 = func_bank2_c::a#0 -Constant func_bank1_a::b#1 = func_bank2_c::b#0 -Constant func_bank2_a::a#1 = func_bank2_d::a#0 -Constant func_bank2_a::b#1 = func_bank2_d::b#0 -Constant func_bank2_b::a#0 = func_bank2_e::a#0 -Constant func_bank2_b::b#0 = func_bank2_e::b#0 -Constant func_bank1_b::a#0 = func_bank2_f::a#0 -Constant func_bank1_b::b#0 = func_bank2_f::b#0 -Constant func_bank1_a::a#2 = func_bank1_e::a#0 -Constant func_bank1_a::b#2 = func_bank1_e::b#0 -Constant func_bank2_a::a#2 = func_bank1_f::a#0 -Constant func_bank2_a::b#2 = func_bank1_f::b#0 +Constant func_ram_bank1_a::a#0 = func_ram_bank1_c::a#0 +Constant func_ram_bank1_a::b#0 = func_ram_bank1_c::b#0 +Constant func_rom_bank2_a::a#0 = func_ram_bank1_d::a#0 +Constant func_rom_bank2_a::b#0 = func_ram_bank1_d::b#0 +Constant func_main_a::a#0 = func_ram_bank1_f::a#0 +Constant func_main_a::b#0 = func_ram_bank1_f::b#0 +Constant func_ram_bank1_a::a#1 = func_rom_bank2_c::a#0 +Constant func_ram_bank1_a::b#1 = func_rom_bank2_c::b#0 +Constant func_rom_bank2_a::a#1 = func_rom_bank2_d::a#0 +Constant func_rom_bank2_a::b#1 = func_rom_bank2_d::b#0 +Constant func_main_a::a#1 = func_rom_bank2_f::a#0 +Constant func_main_a::b#1 = func_rom_bank2_f::b#0 +Constant func_rom_bank2_e::a#0 = func_main_b::a#0 +Constant func_rom_bank2_e::b#0 = func_main_b::b#0 Successful SSA optimization Pass2ConstantIdentification -Simplifying expression containing zero SCREEN in [73] SCREEN[0] = main::$0 -Simplifying expression containing zero SCREEN in [79] SCREEN[0] = main::$1 -Simplifying expression containing zero SCREEN in [85] SCREEN[0] = main::$2 -Simplifying expression containing zero SCREEN in [91] SCREEN[0] = main::$3 -Simplifying expression containing zero SCREEN in [97] SCREEN[0] = main::$4 -Simplifying expression containing zero SCREEN in [103] SCREEN[0] = main::$5 -Simplifying expression containing zero SCREEN in [109] SCREEN[0] = main::$6 -Simplifying expression containing zero SCREEN in [115] SCREEN[0] = main::$7 -Simplifying expression containing zero SCREEN in [121] SCREEN[0] = main::$8 -Simplifying expression containing zero SCREEN in [127] SCREEN[0] = main::$9 -Simplifying expression containing zero SCREEN in [133] SCREEN[0] = main::$10 -Simplifying expression containing zero SCREEN in [139] SCREEN[0] = main::$11 +Simplifying expression containing zero SCREEN in [87] SCREEN[0] = main::$0 +Simplifying expression containing zero SCREEN in [93] SCREEN[0] = main::$1 +Simplifying expression containing zero SCREEN in [99] SCREEN[0] = main::$2 +Simplifying expression containing zero SCREEN in [105] SCREEN[0] = main::$3 +Simplifying expression containing zero SCREEN in [111] SCREEN[0] = main::$4 +Simplifying expression containing zero SCREEN in [117] SCREEN[0] = main::$5 +Simplifying expression containing zero SCREEN in [123] SCREEN[0] = main::$6 +Simplifying expression containing zero SCREEN in [129] SCREEN[0] = main::$7 +Simplifying expression containing zero SCREEN in [135] SCREEN[0] = main::$8 +Simplifying expression containing zero SCREEN in [141] SCREEN[0] = main::$9 +Simplifying expression containing zero SCREEN in [147] SCREEN[0] = main::$10 +Simplifying expression containing zero SCREEN in [153] SCREEN[0] = main::$11 +Simplifying expression containing zero SCREEN in [159] SCREEN[0] = main::$12 +Simplifying expression containing zero SCREEN in [165] SCREEN[0] = main::$13 Successful SSA optimization PassNSimplifyExpressionWithZero 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 -Inlining constant with var siblings func_bank1_a::a#3 -Inlining constant with var siblings func_bank1_a::b#3 -Inlining constant with var siblings func_bank1_a::a#0 -Inlining constant with var siblings func_bank1_a::b#0 -Inlining constant with var siblings func_bank1_a::a#1 -Inlining constant with var siblings func_bank1_a::b#1 -Inlining constant with var siblings func_bank1_a::a#2 -Inlining constant with var siblings func_bank1_a::b#2 -Inlining constant with var siblings func_bank2_a::a#3 -Inlining constant with var siblings func_bank2_a::b#3 -Inlining constant with var siblings func_bank2_a::a#0 -Inlining constant with var siblings func_bank2_a::b#0 -Inlining constant with var siblings func_bank2_a::a#1 -Inlining constant with var siblings func_bank2_a::b#1 -Inlining constant with var siblings func_bank2_a::a#2 -Inlining constant with var siblings func_bank2_a::b#2 -Inlining constant with var siblings func_bank1_b::a#1 -Inlining constant with var siblings func_bank1_b::b#1 -Inlining constant with var siblings func_bank1_b::a#0 -Inlining constant with var siblings func_bank1_b::b#0 -Inlining constant with var siblings func_bank2_b::a#1 -Inlining constant with var siblings func_bank2_b::b#1 -Inlining constant with var siblings func_bank2_b::a#0 -Inlining constant with var siblings func_bank2_b::b#0 -Constant inlined func_bank1_a::b#0 = func_bank1_c::b#0 -Constant inlined func_bank1_a::a#1 = func_bank2_c::a#0 -Constant inlined func_bank2_a::b#2 = func_bank1_f::b#0 -Constant inlined func_bank2_a::a#3 = '0' -Constant inlined func_bank1_a::a#0 = func_bank1_c::a#0 -Constant inlined func_bank2_a::b#3 = 7 -Constant inlined func_bank2_a::a#0 = func_bank1_d::a#0 -Constant inlined func_bank1_a::b#3 = 7 -Constant inlined func_bank1_a::b#2 = func_bank1_e::b#0 -Constant inlined func_bank2_a::b#0 = func_bank1_d::b#0 -Constant inlined func_bank2_a::a#1 = func_bank2_d::a#0 -Constant inlined func_bank1_a::a#3 = '0' -Constant inlined func_bank1_a::b#1 = func_bank2_c::b#0 -Constant inlined func_bank1_a::a#2 = func_bank1_e::a#0 -Constant inlined func_bank2_a::b#1 = func_bank2_d::b#0 -Constant inlined func_bank2_a::a#2 = func_bank1_f::a#0 -Constant inlined func_bank2_b::b#0 = func_bank2_e::b#0 -Constant inlined func_bank2_b::a#1 = '0' -Constant inlined func_bank1_b::a#0 = func_bank2_f::a#0 -Constant inlined func_bank2_b::a#0 = func_bank2_e::a#0 -Constant inlined func_bank1_b::b#0 = func_bank2_f::b#0 -Constant inlined func_bank1_b::a#1 = '0' -Constant inlined func_bank1_b::b#1 = 7 -Constant inlined func_bank2_b::b#1 = 7 +Constant right-side identified [3] func_ram_bank1_b::return#0 = func_ram_bank1_b::a#0 + func_ram_bank1_b::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant func_ram_bank1_b::return#0 = func_ram_bank1_b::a#0+func_ram_bank1_b::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant func_ram_bank1_b::return#2 = func_ram_bank1_b::return#0 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$1 = func_ram_bank1_b::return#2 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with var siblings func_ram_bank1_a::a#2 +Inlining constant with var siblings func_ram_bank1_a::b#2 +Inlining constant with var siblings func_ram_bank1_a::a#0 +Inlining constant with var siblings func_ram_bank1_a::b#0 +Inlining constant with var siblings func_ram_bank1_a::a#1 +Inlining constant with var siblings func_ram_bank1_a::b#1 +Inlining constant with different constant siblings func_ram_bank1_b::return#2 +Inlining constant with var siblings func_ram_bank1_e::a#1 +Inlining constant with var siblings func_ram_bank1_e::b#1 +Inlining constant with var siblings func_rom_bank2_a::a#2 +Inlining constant with var siblings func_rom_bank2_a::b#2 +Inlining constant with var siblings func_rom_bank2_a::a#0 +Inlining constant with var siblings func_rom_bank2_a::b#0 +Inlining constant with var siblings func_rom_bank2_a::a#1 +Inlining constant with var siblings func_rom_bank2_a::b#1 +Inlining constant with var siblings func_rom_bank2_b::a#2 +Inlining constant with var siblings func_rom_bank2_b::b#2 +Inlining constant with var siblings func_rom_bank2_e::a#1 +Inlining constant with var siblings func_rom_bank2_e::b#1 +Inlining constant with var siblings func_rom_bank2_e::a#0 +Inlining constant with var siblings func_rom_bank2_e::b#0 +Inlining constant with var siblings func_main_a::a#2 +Inlining constant with var siblings func_main_a::b#2 +Inlining constant with var siblings func_main_a::a#0 +Inlining constant with var siblings func_main_a::b#0 +Inlining constant with var siblings func_main_a::a#1 +Inlining constant with var siblings func_main_a::b#1 +Constant inlined func_rom_bank2_e::a#0 = func_main_b::a#0 +Constant inlined func_rom_bank2_e::b#0 = func_main_b::b#0 +Constant inlined func_rom_bank2_e::a#1 = '0' +Constant inlined func_rom_bank2_e::b#1 = 7 +Constant inlined func_ram_bank1_e::b#1 = 7 +Constant inlined func_ram_bank1_e::a#1 = '0' +Constant inlined func_main_a::a#0 = func_ram_bank1_f::a#0 +Constant inlined func_main_a::b#0 = func_ram_bank1_f::b#0 +Constant inlined func_main_a::a#1 = func_rom_bank2_f::a#0 +Constant inlined func_main_a::b#1 = func_rom_bank2_f::b#0 +Constant inlined func_main_a::a#2 = '0' +Constant inlined func_main_a::b#2 = 7 +Constant inlined func_ram_bank1_a::b#2 = 7 +Constant inlined func_ram_bank1_a::b#1 = func_rom_bank2_c::b#0 +Constant inlined func_ram_bank1_a::a#2 = '0' +Constant inlined func_ram_bank1_a::b#0 = func_ram_bank1_c::b#0 +Constant inlined func_ram_bank1_a::a#1 = func_rom_bank2_c::a#0 +Constant inlined func_ram_bank1_a::a#0 = func_ram_bank1_c::a#0 +Constant inlined func_rom_bank2_a::a#0 = func_ram_bank1_d::a#0 +Constant inlined func_rom_bank2_a::b#0 = func_ram_bank1_d::b#0 +Constant inlined func_rom_bank2_a::a#1 = func_rom_bank2_d::a#0 +Constant inlined func_rom_bank2_a::b#1 = func_rom_bank2_d::b#0 +Constant inlined func_rom_bank2_a::a#2 = '0' +Constant inlined func_rom_bank2_a::b#2 = 7 +Constant inlined main::$1 = func_ram_bank1_b::return#0 +Constant inlined func_ram_bank1_b::return#2 = func_ram_bank1_b::return#0 +Constant inlined func_rom_bank2_b::a#2 = '0' +Constant inlined func_rom_bank2_b::b#2 = 7 Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of main -Adding NOP phi() at start of func_bank1_c -Adding NOP phi() at start of func_bank1_d -Adding NOP phi() at start of func_bank1_e -Adding NOP phi() at start of func_bank1_f -Adding NOP phi() at start of func_bank2_c -Adding NOP phi() at start of func_bank2_d -Adding NOP phi() at start of func_bank2_e -Adding NOP phi() at start of func_bank2_f +Adding NOP phi() at start of func_ram_bank1_b +Adding NOP phi() at start of func_ram_bank1_c +Adding NOP phi() at start of func_ram_bank1_d +Adding NOP phi() at start of func_ram_bank1_f +Adding NOP phi() at start of func_rom_bank2_c +Adding NOP phi() at start of func_rom_bank2_d +Adding NOP phi() at start of func_rom_bank2_f +Adding NOP phi() at start of func_main_b CALL GRAPH -Calls in [main] to func_bank1_a:1 func_bank1_b:5 func_bank1_c:9 func_bank1_d:13 func_bank1_e:17 func_bank1_f:21 func_bank2_a:25 func_bank2_b:29 func_bank2_c:33 func_bank2_d:37 func_bank2_e:41 func_bank2_f:45 -Calls in [func_bank1_c] to func_bank1_a:57 -Calls in [func_bank1_d] to func_bank2_a:62 -Calls in [func_bank1_e] to func_bank1_a:67 -Calls in [func_bank1_f] to func_bank2_a:72 -Calls in [func_bank2_c] to func_bank1_a:83 -Calls in [func_bank2_d] to func_bank2_a:88 -Calls in [func_bank2_e] to func_bank2_b:93 -Calls in [func_bank2_f] to func_bank1_b:98 +Calls in [main] to func_ram_bank1_a:1 func_ram_bank1_b:5 func_ram_bank1_c:7 func_ram_bank1_d:11 func_ram_bank1_e:15 func_ram_bank1_f:19 func_rom_bank2_a:23 func_rom_bank2_b:27 func_rom_bank2_c:31 func_rom_bank2_d:35 func_rom_bank2_e:39 func_rom_bank2_f:43 func_main_a:47 func_main_b:51 +Calls in [func_ram_bank1_c] to func_ram_bank1_a:62 +Calls in [func_ram_bank1_d] to func_rom_bank2_a:67 +Calls in [func_ram_bank1_e] to func_rom_bank2_b:76 +Calls in [func_ram_bank1_f] to func_main_a:81 +Calls in [func_rom_bank2_c] to func_ram_bank1_a:92 +Calls in [func_rom_bank2_d] to func_rom_bank2_a:97 +Calls in [func_rom_bank2_e] to func_rom_bank2_b:106 +Calls in [func_rom_bank2_f] to func_main_a:111 +Calls in [func_main_a] to func_ram_bank1_e:120 +Calls in [func_main_b] to func_rom_bank2_e:125 -Created 8 initial phi equivalence classes -Coalesced down to 8 phi equivalence classes +Created 12 initial phi equivalence classes +Coalesced [74] func_rom_bank2_b::a#4 = func_rom_bank2_b::a#0 +Coalesced [75] func_rom_bank2_b::b#4 = func_rom_bank2_b::b#0 +Coalesced [104] func_rom_bank2_b::a#5 = func_rom_bank2_b::a#1 +Coalesced [105] func_rom_bank2_b::b#5 = func_rom_bank2_b::b#1 +Coalesced [118] func_ram_bank1_e::a#3 = func_ram_bank1_e::a#0 +Coalesced [119] func_ram_bank1_e::b#3 = func_ram_bank1_e::b#0 +Coalesced down to 12 phi equivalence classes Adding NOP phi() at start of main -Adding NOP phi() at start of func_bank1_c -Adding NOP phi() at start of func_bank1_d -Adding NOP phi() at start of func_bank1_e -Adding NOP phi() at start of func_bank1_f -Adding NOP phi() at start of func_bank2_c -Adding NOP phi() at start of func_bank2_d -Adding NOP phi() at start of func_bank2_e -Adding NOP phi() at start of func_bank2_f +Adding NOP phi() at start of func_ram_bank1_b +Adding NOP phi() at start of func_ram_bank1_c +Adding NOP phi() at start of func_ram_bank1_d +Adding NOP phi() at start of func_ram_bank1_f +Adding NOP phi() at start of func_rom_bank2_c +Adding NOP phi() at start of func_rom_bank2_d +Adding NOP phi() at start of func_rom_bank2_f +Adding NOP phi() at start of func_main_b FINAL CONTROL FLOW GRAPH void main() main: scope:[main] from [0] phi() - [1] call func_bank1_a - [2] func_bank1_a::return#10 = func_bank1_a::return#0 + [1] call func_ram_bank1_a + [2] func_ram_bank1_a::return#4 = func_ram_bank1_a::return#0 to:main::@1 main::@1: scope:[main] from main - [3] main::$0 = func_bank1_a::return#10 + [3] main::$0 = func_ram_bank1_a::return#4 [4] *SCREEN = main::$0 - [5] call func_bank1_b - [6] func_bank1_b::return#3 = func_bank1_b::return#1 + [5] call func_ram_bank1_b to:main::@2 main::@2: scope:[main] from main::@1 - [7] main::$1 = func_bank1_b::return#3 - [8] *SCREEN = main::$1 - [9] call func_bank1_c - [10] func_bank1_c::return#2 = func_bank1_c::return#0 + [6] *SCREEN = func_ram_bank1_b::return#0 + [7] call func_ram_bank1_c + [8] func_ram_bank1_c::return#2 = func_ram_bank1_c::return#0 to:main::@3 main::@3: scope:[main] from main::@2 - [11] main::$2 = func_bank1_c::return#2 - [12] *SCREEN = main::$2 - [13] call func_bank1_d - [14] func_bank1_d::return#2 = func_bank1_d::return#0 + [9] main::$2 = func_ram_bank1_c::return#2 + [10] *SCREEN = main::$2 + [11] call func_ram_bank1_d + [12] func_ram_bank1_d::return#2 = func_ram_bank1_d::return#0 to:main::@4 main::@4: scope:[main] from main::@3 - [15] main::$3 = func_bank1_d::return#2 - [16] *SCREEN = main::$3 - [17] call func_bank1_e - [18] func_bank1_e::return#2 = func_bank1_e::return#0 + [13] main::$3 = func_ram_bank1_d::return#2 + [14] *SCREEN = main::$3 + [15] call func_ram_bank1_e + [16] func_ram_bank1_e::return#3 = func_ram_bank1_e::return#0 to:main::@5 main::@5: scope:[main] from main::@4 - [19] main::$4 = func_bank1_e::return#2 - [20] *SCREEN = main::$4 - [21] call func_bank1_f - [22] func_bank1_f::return#2 = func_bank1_f::return#0 + [17] main::$4 = func_ram_bank1_e::return#3 + [18] *SCREEN = main::$4 + [19] call func_ram_bank1_f + [20] func_ram_bank1_f::return#2 = func_ram_bank1_f::return#0 to:main::@6 main::@6: scope:[main] from main::@5 - [23] main::$5 = func_bank1_f::return#2 - [24] *SCREEN = main::$5 - [25] call func_bank2_a - [26] func_bank2_a::return#10 = func_bank2_a::return#1 + [21] main::$5 = func_ram_bank1_f::return#2 + [22] *SCREEN = main::$5 + [23] call func_rom_bank2_a + [24] func_rom_bank2_a::return#4 = func_rom_bank2_a::return#1 to:main::@7 main::@7: scope:[main] from main::@6 - [27] main::$6 = func_bank2_a::return#10 - [28] *SCREEN = main::$6 - [29] call func_bank2_b - [30] func_bank2_b::return#3 = func_bank2_b::return#1 + [25] main::$6 = func_rom_bank2_a::return#4 + [26] *SCREEN = main::$6 + [27] call func_rom_bank2_b + [28] func_rom_bank2_b::return#4 = func_rom_bank2_b::return#1 to:main::@8 main::@8: scope:[main] from main::@7 - [31] main::$7 = func_bank2_b::return#3 - [32] *SCREEN = main::$7 - [33] call func_bank2_c - [34] func_bank2_c::return#2 = func_bank2_c::return#0 + [29] main::$7 = func_rom_bank2_b::return#4 + [30] *SCREEN = main::$7 + [31] call func_rom_bank2_c + [32] func_rom_bank2_c::return#2 = func_rom_bank2_c::return#0 to:main::@9 main::@9: scope:[main] from main::@8 - [35] main::$8 = func_bank2_c::return#2 - [36] *SCREEN = main::$8 - [37] call func_bank2_d - [38] func_bank2_d::return#2 = func_bank2_d::return#0 + [33] main::$8 = func_rom_bank2_c::return#2 + [34] *SCREEN = main::$8 + [35] call func_rom_bank2_d + [36] func_rom_bank2_d::return#2 = func_rom_bank2_d::return#0 to:main::@10 main::@10: scope:[main] from main::@9 - [39] main::$9 = func_bank2_d::return#2 - [40] *SCREEN = main::$9 - [41] call func_bank2_e - [42] func_bank2_e::return#2 = func_bank2_e::return#0 + [37] main::$9 = func_rom_bank2_d::return#2 + [38] *SCREEN = main::$9 + [39] call func_rom_bank2_e + [40] func_rom_bank2_e::return#3 = func_rom_bank2_e::return#0 to:main::@11 main::@11: scope:[main] from main::@10 - [43] main::$10 = func_bank2_e::return#2 - [44] *SCREEN = main::$10 - [45] call func_bank2_f - [46] func_bank2_f::return#2 = func_bank2_f::return#0 + [41] main::$10 = func_rom_bank2_e::return#3 + [42] *SCREEN = main::$10 + [43] call func_rom_bank2_f + [44] func_rom_bank2_f::return#2 = func_rom_bank2_f::return#0 to:main::@12 main::@12: scope:[main] from main::@11 - [47] main::$11 = func_bank2_f::return#2 - [48] *SCREEN = main::$11 + [45] main::$11 = func_rom_bank2_f::return#2 + [46] *SCREEN = main::$11 + [47] call func_main_a + [48] func_main_a::return#4 = func_main_a::return#2 + to:main::@13 +main::@13: scope:[main] from main::@12 + [49] main::$12 = func_main_a::return#4 + [50] *SCREEN = main::$12 + [51] call func_main_b + [52] func_main_b::return#2 = func_main_b::return#0 + to:main::@14 +main::@14: scope:[main] from main::@13 + [53] main::$13 = func_main_b::return#2 + [54] *SCREEN = main::$13 to:main::@return -main::@return: scope:[main] from main::@12 - [49] return - to:@return - -__bank(bank) char func_bank1_a(char a , char b) -func_bank1_a: scope:[func_bank1_a] from func_bank1_c func_bank1_e func_bank2_c main - [50] func_bank1_a::b#4 = phi( func_bank1_c/func_bank1_c::b#0, func_bank1_e/func_bank1_e::b#0, func_bank2_c/func_bank2_c::b#0, main/7 ) - [50] func_bank1_a::a#4 = phi( func_bank1_c/func_bank1_c::a#0, func_bank1_e/func_bank1_e::a#0, func_bank2_c/func_bank2_c::a#0, main/'0' ) - [51] func_bank1_a::return#0 = func_bank1_a::a#4 + func_bank1_a::b#4 - to:func_bank1_a::@return -func_bank1_a::@return: scope:[func_bank1_a] from func_bank1_a - [52] return - to:@return - -char func_bank1_b(char a , char b) -func_bank1_b: scope:[func_bank1_b] from func_bank2_f main::@1 - [53] func_bank1_b::b#2 = phi( func_bank2_f/func_bank2_f::b#0, main::@1/7 ) - [53] func_bank1_b::a#2 = phi( func_bank2_f/func_bank2_f::a#0, main::@1/'0' ) - [54] func_bank1_b::return#1 = func_bank1_b::a#2 + func_bank1_b::b#2 - to:func_bank1_b::@return -func_bank1_b::@return: scope:[func_bank1_b] from func_bank1_b +main::@return: scope:[main] from main::@14 [55] return to:@return -__bank(bank) char func_bank1_c(char a , char b) -func_bank1_c: scope:[func_bank1_c] from main::@2 - [56] phi() - [57] call func_bank1_a - [58] func_bank1_a::return#2 = func_bank1_a::return#0 - to:func_bank1_c::@1 -func_bank1_c::@1: scope:[func_bank1_c] from func_bank1_c - [59] func_bank1_c::return#0 = func_bank1_a::return#2 - to:func_bank1_c::@return -func_bank1_c::@return: scope:[func_bank1_c] from func_bank1_c::@1 +__bank(bank) char func_ram_bank1_a(char a , char b) +func_ram_bank1_a: scope:[func_ram_bank1_a] from func_ram_bank1_c func_rom_bank2_c main + [56] func_ram_bank1_a::b#3 = phi( func_ram_bank1_c/func_ram_bank1_c::b#0, func_rom_bank2_c/func_rom_bank2_c::b#0, main/7 ) + [56] func_ram_bank1_a::a#3 = phi( func_ram_bank1_c/func_ram_bank1_c::a#0, func_rom_bank2_c/func_rom_bank2_c::a#0, main/'0' ) + [57] func_ram_bank1_a::return#0 = func_ram_bank1_a::a#3 + func_ram_bank1_a::b#3 + to:func_ram_bank1_a::@return +func_ram_bank1_a::@return: scope:[func_ram_bank1_a] from func_ram_bank1_a + [58] return + to:@return + +char func_ram_bank1_b(char a , char b) +func_ram_bank1_b: scope:[func_ram_bank1_b] from main::@1 + [59] phi() + to:func_ram_bank1_b::@return +func_ram_bank1_b::@return: scope:[func_ram_bank1_b] from func_ram_bank1_b [60] return to:@return -__bank(bank) char func_bank1_d(char a , char b) -func_bank1_d: scope:[func_bank1_d] from main::@3 +__bank(bank) char func_ram_bank1_c(char a , char b) +func_ram_bank1_c: scope:[func_ram_bank1_c] from main::@2 [61] phi() - [62] call func_bank2_a - [63] func_bank2_a::return#0 = func_bank2_a::return#1 - to:func_bank1_d::@1 -func_bank1_d::@1: scope:[func_bank1_d] from func_bank1_d - [64] func_bank1_d::return#0 = func_bank2_a::return#0 - to:func_bank1_d::@return -func_bank1_d::@return: scope:[func_bank1_d] from func_bank1_d::@1 + [62] call func_ram_bank1_a + [63] func_ram_bank1_a::return#2 = func_ram_bank1_a::return#0 + to:func_ram_bank1_c::@1 +func_ram_bank1_c::@1: scope:[func_ram_bank1_c] from func_ram_bank1_c + [64] func_ram_bank1_c::return#0 = func_ram_bank1_a::return#2 + to:func_ram_bank1_c::@return +func_ram_bank1_c::@return: scope:[func_ram_bank1_c] from func_ram_bank1_c::@1 [65] return to:@return -char func_bank1_e(char a , char b) -func_bank1_e: scope:[func_bank1_e] from main::@4 +__bank(bank) char func_ram_bank1_d(char a , char b) +func_ram_bank1_d: scope:[func_ram_bank1_d] from main::@3 [66] phi() - [67] call func_bank1_a - [68] func_bank1_a::return#4 = func_bank1_a::return#0 - to:func_bank1_e::@1 -func_bank1_e::@1: scope:[func_bank1_e] from func_bank1_e - [69] func_bank1_e::return#0 = func_bank1_a::return#4 - to:func_bank1_e::@return -func_bank1_e::@return: scope:[func_bank1_e] from func_bank1_e::@1 + [67] call func_rom_bank2_a + [68] func_rom_bank2_a::return#0 = func_rom_bank2_a::return#1 + to:func_ram_bank1_d::@1 +func_ram_bank1_d::@1: scope:[func_ram_bank1_d] from func_ram_bank1_d + [69] func_ram_bank1_d::return#0 = func_rom_bank2_a::return#0 + to:func_ram_bank1_d::@return +func_ram_bank1_d::@return: scope:[func_ram_bank1_d] from func_ram_bank1_d::@1 [70] return to:@return -char func_bank1_f(char a , char b) -func_bank1_f: scope:[func_bank1_f] from main::@5 - [71] phi() - [72] call func_bank2_a - [73] func_bank2_a::return#4 = func_bank2_a::return#1 - to:func_bank1_f::@1 -func_bank1_f::@1: scope:[func_bank1_f] from func_bank1_f - [74] func_bank1_f::return#0 = func_bank2_a::return#4 - to:func_bank1_f::@return -func_bank1_f::@return: scope:[func_bank1_f] from func_bank1_f::@1 - [75] return +__bank(bank) char func_ram_bank1_e(char a , char b) +func_ram_bank1_e: scope:[func_ram_bank1_e] from func_main_a main::@4 + [71] func_ram_bank1_e::b#2 = phi( func_main_a/func_ram_bank1_e::b#0, main::@4/7 ) + [71] func_ram_bank1_e::a#2 = phi( func_main_a/func_ram_bank1_e::a#0, main::@4/'0' ) + [72] func_rom_bank2_b::a#0 = func_ram_bank1_e::a#2 + [73] func_rom_bank2_b::b#0 = func_ram_bank1_e::b#2 + [74] call func_rom_bank2_b + [75] func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 + to:func_ram_bank1_e::@1 +func_ram_bank1_e::@1: scope:[func_ram_bank1_e] from func_ram_bank1_e + [76] func_ram_bank1_e::return#0 = func_rom_bank2_b::return#0 + to:func_ram_bank1_e::@return +func_ram_bank1_e::@return: scope:[func_ram_bank1_e] from func_ram_bank1_e::@1 + [77] return to:@return -__bank(bank) char func_bank2_a(char a , char b) -func_bank2_a: scope:[func_bank2_a] from func_bank1_d func_bank1_f func_bank2_d main::@6 - [76] func_bank2_a::b#4 = phi( func_bank1_d/func_bank1_d::b#0, func_bank1_f/func_bank1_f::b#0, func_bank2_d/func_bank2_d::b#0, main::@6/7 ) - [76] func_bank2_a::a#4 = phi( func_bank1_d/func_bank1_d::a#0, func_bank1_f/func_bank1_f::a#0, func_bank2_d/func_bank2_d::a#0, main::@6/'0' ) - [77] func_bank2_a::return#1 = func_bank2_a::a#4 + func_bank2_a::b#4 - to:func_bank2_a::@return -func_bank2_a::@return: scope:[func_bank2_a] from func_bank2_a - [78] return +__bank(bank) char func_ram_bank1_f(char a , char b) +func_ram_bank1_f: scope:[func_ram_bank1_f] from main::@5 + [78] phi() + [79] call func_main_a + [80] func_main_a::return#0 = func_main_a::return#2 + to:func_ram_bank1_f::@1 +func_ram_bank1_f::@1: scope:[func_ram_bank1_f] from func_ram_bank1_f + [81] func_ram_bank1_f::return#0 = func_main_a::return#0 + to:func_ram_bank1_f::@return +func_ram_bank1_f::@return: scope:[func_ram_bank1_f] from func_ram_bank1_f::@1 + [82] return to:@return -char func_bank2_b(char a , char b) -func_bank2_b: scope:[func_bank2_b] from func_bank2_e main::@7 - [79] func_bank2_b::b#2 = phi( func_bank2_e/func_bank2_e::b#0, main::@7/7 ) - [79] func_bank2_b::a#2 = phi( func_bank2_e/func_bank2_e::a#0, main::@7/'0' ) - [80] func_bank2_b::return#1 = func_bank2_b::a#2 + func_bank2_b::b#2 - to:func_bank2_b::@return -func_bank2_b::@return: scope:[func_bank2_b] from func_bank2_b - [81] return +__bank(bank) char func_rom_bank2_a(char a , char b) +func_rom_bank2_a: scope:[func_rom_bank2_a] from func_ram_bank1_d func_rom_bank2_d main::@6 + [83] func_rom_bank2_a::b#3 = phi( func_ram_bank1_d/func_ram_bank1_d::b#0, func_rom_bank2_d/func_rom_bank2_d::b#0, main::@6/7 ) + [83] func_rom_bank2_a::a#3 = phi( func_ram_bank1_d/func_ram_bank1_d::a#0, func_rom_bank2_d/func_rom_bank2_d::a#0, main::@6/'0' ) + [84] func_rom_bank2_a::return#1 = func_rom_bank2_a::a#3 + func_rom_bank2_a::b#3 + to:func_rom_bank2_a::@return +func_rom_bank2_a::@return: scope:[func_rom_bank2_a] from func_rom_bank2_a + [85] return to:@return -__bank(bank) char func_bank2_c(char a , char b) -func_bank2_c: scope:[func_bank2_c] from main::@8 - [82] phi() - [83] call func_bank1_a - [84] func_bank1_a::return#3 = func_bank1_a::return#0 - to:func_bank2_c::@1 -func_bank2_c::@1: scope:[func_bank2_c] from func_bank2_c - [85] func_bank2_c::return#0 = func_bank1_a::return#3 - to:func_bank2_c::@return -func_bank2_c::@return: scope:[func_bank2_c] from func_bank2_c::@1 - [86] return +char func_rom_bank2_b(char a , char b) +func_rom_bank2_b: scope:[func_rom_bank2_b] from func_ram_bank1_e func_rom_bank2_e main::@7 + [86] func_rom_bank2_b::b#3 = phi( func_ram_bank1_e/func_rom_bank2_b::b#0, func_rom_bank2_e/func_rom_bank2_b::b#1, main::@7/7 ) + [86] func_rom_bank2_b::a#3 = phi( func_ram_bank1_e/func_rom_bank2_b::a#0, func_rom_bank2_e/func_rom_bank2_b::a#1, main::@7/'0' ) + [87] func_rom_bank2_b::return#1 = func_rom_bank2_b::a#3 + func_rom_bank2_b::b#3 + to:func_rom_bank2_b::@return +func_rom_bank2_b::@return: scope:[func_rom_bank2_b] from func_rom_bank2_b + [88] return to:@return -__bank(bank) char func_bank2_d(char a , char b) -func_bank2_d: scope:[func_bank2_d] from main::@9 - [87] phi() - [88] call func_bank2_a - [89] func_bank2_a::return#3 = func_bank2_a::return#1 - to:func_bank2_d::@1 -func_bank2_d::@1: scope:[func_bank2_d] from func_bank2_d - [90] func_bank2_d::return#0 = func_bank2_a::return#3 - to:func_bank2_d::@return -func_bank2_d::@return: scope:[func_bank2_d] from func_bank2_d::@1 - [91] return +__bank(bank) char func_rom_bank2_c(char a , char b) +func_rom_bank2_c: scope:[func_rom_bank2_c] from main::@8 + [89] phi() + [90] call func_ram_bank1_a + [91] func_ram_bank1_a::return#3 = func_ram_bank1_a::return#0 + to:func_rom_bank2_c::@1 +func_rom_bank2_c::@1: scope:[func_rom_bank2_c] from func_rom_bank2_c + [92] func_rom_bank2_c::return#0 = func_ram_bank1_a::return#3 + to:func_rom_bank2_c::@return +func_rom_bank2_c::@return: scope:[func_rom_bank2_c] from func_rom_bank2_c::@1 + [93] return to:@return -__bank(bank) char func_bank2_e(char a , char b) -func_bank2_e: scope:[func_bank2_e] from main::@10 - [92] phi() - [93] call func_bank2_b - [94] func_bank2_b::return#0 = func_bank2_b::return#1 - to:func_bank2_e::@1 -func_bank2_e::@1: scope:[func_bank2_e] from func_bank2_e - [95] func_bank2_e::return#0 = func_bank2_b::return#0 - to:func_bank2_e::@return -func_bank2_e::@return: scope:[func_bank2_e] from func_bank2_e::@1 - [96] return +__bank(bank) char func_rom_bank2_d(char a , char b) +func_rom_bank2_d: scope:[func_rom_bank2_d] from main::@9 + [94] phi() + [95] call func_rom_bank2_a + [96] func_rom_bank2_a::return#3 = func_rom_bank2_a::return#1 + to:func_rom_bank2_d::@1 +func_rom_bank2_d::@1: scope:[func_rom_bank2_d] from func_rom_bank2_d + [97] func_rom_bank2_d::return#0 = func_rom_bank2_a::return#3 + to:func_rom_bank2_d::@return +func_rom_bank2_d::@return: scope:[func_rom_bank2_d] from func_rom_bank2_d::@1 + [98] return to:@return -__bank(bank) char func_bank2_f(char a , char b) -func_bank2_f: scope:[func_bank2_f] from main::@11 - [97] phi() - [98] call func_bank1_b - [99] func_bank1_b::return#0 = func_bank1_b::return#1 - to:func_bank2_f::@1 -func_bank2_f::@1: scope:[func_bank2_f] from func_bank2_f - [100] func_bank2_f::return#0 = func_bank1_b::return#0 - to:func_bank2_f::@return -func_bank2_f::@return: scope:[func_bank2_f] from func_bank2_f::@1 - [101] return +__bank(bank) char func_rom_bank2_e(char a , char b) +func_rom_bank2_e: scope:[func_rom_bank2_e] from func_main_b main::@10 + [99] func_rom_bank2_e::b#2 = phi( func_main_b/func_main_b::b#0, main::@10/7 ) + [99] func_rom_bank2_e::a#2 = phi( func_main_b/func_main_b::a#0, main::@10/'0' ) + [100] func_rom_bank2_b::a#1 = func_rom_bank2_e::a#2 + [101] func_rom_bank2_b::b#1 = func_rom_bank2_e::b#2 + [102] call func_rom_bank2_b + [103] func_rom_bank2_b::return#3 = func_rom_bank2_b::return#1 + to:func_rom_bank2_e::@1 +func_rom_bank2_e::@1: scope:[func_rom_bank2_e] from func_rom_bank2_e + [104] func_rom_bank2_e::return#0 = func_rom_bank2_b::return#3 + to:func_rom_bank2_e::@return +func_rom_bank2_e::@return: scope:[func_rom_bank2_e] from func_rom_bank2_e::@1 + [105] return + to:@return + +__bank(bank) char func_rom_bank2_f(char a , char b) +func_rom_bank2_f: scope:[func_rom_bank2_f] from main::@11 + [106] phi() + [107] call func_main_a + [108] func_main_a::return#1 = func_main_a::return#2 + to:func_rom_bank2_f::@1 +func_rom_bank2_f::@1: scope:[func_rom_bank2_f] from func_rom_bank2_f + [109] func_rom_bank2_f::return#0 = func_main_a::return#1 + to:func_rom_bank2_f::@return +func_rom_bank2_f::@return: scope:[func_rom_bank2_f] from func_rom_bank2_f::@1 + [110] return + to:@return + +char func_main_a(char a , char b) +func_main_a: scope:[func_main_a] from func_ram_bank1_f func_rom_bank2_f main::@12 + [111] func_main_a::b#3 = phi( func_ram_bank1_f/func_ram_bank1_f::b#0, func_rom_bank2_f/func_rom_bank2_f::b#0, main::@12/7 ) + [111] func_main_a::a#3 = phi( func_ram_bank1_f/func_ram_bank1_f::a#0, func_rom_bank2_f/func_rom_bank2_f::a#0, main::@12/'0' ) + [112] func_ram_bank1_e::a#0 = func_main_a::a#3 + [113] func_ram_bank1_e::b#0 = func_main_a::b#3 + [114] call func_ram_bank1_e + [115] func_ram_bank1_e::return#2 = func_ram_bank1_e::return#0 + to:func_main_a::@1 +func_main_a::@1: scope:[func_main_a] from func_main_a + [116] func_main_a::return#2 = func_ram_bank1_e::return#2 + to:func_main_a::@return +func_main_a::@return: scope:[func_main_a] from func_main_a::@1 + [117] return + to:@return + +char func_main_b(char a , char b) +func_main_b: scope:[func_main_b] from main::@13 + [118] phi() + [119] call func_rom_bank2_e + [120] func_rom_bank2_e::return#2 = func_rom_bank2_e::return#0 + to:func_main_b::@1 +func_main_b::@1: scope:[func_main_b] from func_main_b + [121] func_main_b::return#0 = func_rom_bank2_e::return#2 + to:func_main_b::@return +func_main_b::@return: scope:[func_main_b] from func_main_b::@1 + [122] return to:@return VARIABLE REGISTER WEIGHTS -__bank(bank) char func_bank1_a(char a , char b) -char func_bank1_a::a -char func_bank1_a::a#4 // 101.0 -char func_bank1_a::b -char func_bank1_a::b#4 // 101.0 -char func_bank1_a::return -char func_bank1_a::return#0 // 22.66666666666666 -char func_bank1_a::return#10 // 4.0 -char func_bank1_a::return#2 // 22.0 -char func_bank1_a::return#3 // 22.0 -char func_bank1_a::return#4 // 22.0 -char func_bank1_b(char a , char b) -char func_bank1_b::a -char func_bank1_b::a#2 // 101.0 -char func_bank1_b::b -char func_bank1_b::b#2 // 101.0 -char func_bank1_b::return -char func_bank1_b::return#0 // 22.0 -char func_bank1_b::return#1 // 28.5 -char func_bank1_b::return#3 // 4.0 -__bank(bank) char func_bank1_c(char a , char b) -char func_bank1_c::a -char func_bank1_c::b -char func_bank1_c::return -char func_bank1_c::return#0 // 4.333333333333333 -char func_bank1_c::return#2 // 4.0 -__bank(bank) char func_bank1_d(char a , char b) -char func_bank1_d::a -char func_bank1_d::b -char func_bank1_d::return -char func_bank1_d::return#0 // 4.333333333333333 -char func_bank1_d::return#2 // 4.0 -char func_bank1_e(char a , char b) -char func_bank1_e::a -char func_bank1_e::b -char func_bank1_e::return -char func_bank1_e::return#0 // 4.333333333333333 -char func_bank1_e::return#2 // 4.0 -char func_bank1_f(char a , char b) -char func_bank1_f::a -char func_bank1_f::b -char func_bank1_f::return -char func_bank1_f::return#0 // 4.333333333333333 -char func_bank1_f::return#2 // 4.0 -__bank(bank) char func_bank2_a(char a , char b) -char func_bank2_a::a -char func_bank2_a::a#4 // 101.0 -char func_bank2_a::b -char func_bank2_a::b#4 // 101.0 -char func_bank2_a::return -char func_bank2_a::return#0 // 22.0 -char func_bank2_a::return#1 // 22.666666666666664 -char func_bank2_a::return#10 // 4.0 -char func_bank2_a::return#3 // 22.0 -char func_bank2_a::return#4 // 22.0 -char func_bank2_b(char a , char b) -char func_bank2_b::a -char func_bank2_b::a#2 // 101.0 -char func_bank2_b::b -char func_bank2_b::b#2 // 101.0 -char func_bank2_b::return -char func_bank2_b::return#0 // 22.0 -char func_bank2_b::return#1 // 28.5 -char func_bank2_b::return#3 // 4.0 -__bank(bank) char func_bank2_c(char a , char b) -char func_bank2_c::a -char func_bank2_c::b -char func_bank2_c::return -char func_bank2_c::return#0 // 4.333333333333333 -char func_bank2_c::return#2 // 4.0 -__bank(bank) char func_bank2_d(char a , char b) -char func_bank2_d::a -char func_bank2_d::b -char func_bank2_d::return -char func_bank2_d::return#0 // 4.333333333333333 -char func_bank2_d::return#2 // 4.0 -__bank(bank) char func_bank2_e(char a , char b) -char func_bank2_e::a -char func_bank2_e::b -char func_bank2_e::return -char func_bank2_e::return#0 // 4.333333333333333 -char func_bank2_e::return#2 // 4.0 -__bank(bank) char func_bank2_f(char a , char b) -char func_bank2_f::a -char func_bank2_f::b -char func_bank2_f::return -char func_bank2_f::return#0 // 4.333333333333333 -char func_bank2_f::return#2 // 4.0 +char func_main_a(char a , char b) +char func_main_a::a +char func_main_a::a#3 // 101.0 +char func_main_a::b +char func_main_a::b#3 // 50.5 +char func_main_a::return +char func_main_a::return#0 // 22.0 +char func_main_a::return#1 // 22.0 +char func_main_a::return#2 // 25.0 +char func_main_a::return#4 // 4.0 +char func_main_b(char a , char b) +char func_main_b::a +char func_main_b::b +char func_main_b::return +char func_main_b::return#0 // 4.333333333333333 +char func_main_b::return#2 // 4.0 +__bank(bank) char func_ram_bank1_a(char a , char b) +char func_ram_bank1_a::a +char func_ram_bank1_a::a#3 // 101.0 +char func_ram_bank1_a::b +char func_ram_bank1_a::b#3 // 101.0 +char func_ram_bank1_a::return +char func_ram_bank1_a::return#0 // 24.999999999999996 +char func_ram_bank1_a::return#2 // 22.0 +char func_ram_bank1_a::return#3 // 22.0 +char func_ram_bank1_a::return#4 // 4.0 +char func_ram_bank1_b(char a , char b) +char func_ram_bank1_b::a +char func_ram_bank1_b::b +char func_ram_bank1_b::return +__bank(bank) char func_ram_bank1_c(char a , char b) +char func_ram_bank1_c::a +char func_ram_bank1_c::b +char func_ram_bank1_c::return +char func_ram_bank1_c::return#0 // 4.333333333333333 +char func_ram_bank1_c::return#2 // 4.0 +__bank(bank) char func_ram_bank1_d(char a , char b) +char func_ram_bank1_d::a +char func_ram_bank1_d::b +char func_ram_bank1_d::return +char func_ram_bank1_d::return#0 // 4.333333333333333 +char func_ram_bank1_d::return#2 // 4.0 +__bank(bank) char func_ram_bank1_e(char a , char b) +char func_ram_bank1_e::a +char func_ram_bank1_e::a#0 // 101.0 +char func_ram_bank1_e::a#2 // 1102.0 +char func_ram_bank1_e::b +char func_ram_bank1_e::b#0 // 202.0 +char func_ram_bank1_e::b#2 // 551.0 +char func_ram_bank1_e::return +char func_ram_bank1_e::return#0 // 276.0 +char func_ram_bank1_e::return#2 // 202.0 +char func_ram_bank1_e::return#3 // 4.0 +__bank(bank) char func_ram_bank1_f(char a , char b) +char func_ram_bank1_f::a +char func_ram_bank1_f::b +char func_ram_bank1_f::return +char func_ram_bank1_f::return#0 // 4.333333333333333 +char func_ram_bank1_f::return#2 // 4.0 +__bank(bank) char func_rom_bank2_a(char a , char b) +char func_rom_bank2_a::a +char func_rom_bank2_a::a#3 // 101.0 +char func_rom_bank2_a::b +char func_rom_bank2_a::b#3 // 101.0 +char func_rom_bank2_a::return +char func_rom_bank2_a::return#0 // 22.0 +char func_rom_bank2_a::return#1 // 25.0 +char func_rom_bank2_a::return#3 // 22.0 +char func_rom_bank2_a::return#4 // 4.0 +char func_rom_bank2_b(char a , char b) +char func_rom_bank2_b::a +char func_rom_bank2_b::a#0 // 1001.0 +char func_rom_bank2_b::a#1 // 101.0 +char func_rom_bank2_b::a#3 // 11103.0 +char func_rom_bank2_b::b +char func_rom_bank2_b::b#0 // 2002.0 +char func_rom_bank2_b::b#1 // 202.0 +char func_rom_bank2_b::b#3 // 11103.0 +char func_rom_bank2_b::return +char func_rom_bank2_b::return#0 // 2002.0 +char func_rom_bank2_b::return#1 // 2221.0 +char func_rom_bank2_b::return#3 // 202.0 +char func_rom_bank2_b::return#4 // 4.0 +__bank(bank) char func_rom_bank2_c(char a , char b) +char func_rom_bank2_c::a +char func_rom_bank2_c::b +char func_rom_bank2_c::return +char func_rom_bank2_c::return#0 // 4.333333333333333 +char func_rom_bank2_c::return#2 // 4.0 +__bank(bank) char func_rom_bank2_d(char a , char b) +char func_rom_bank2_d::a +char func_rom_bank2_d::b +char func_rom_bank2_d::return +char func_rom_bank2_d::return#0 // 4.333333333333333 +char func_rom_bank2_d::return#2 // 4.0 +__bank(bank) char func_rom_bank2_e(char a , char b) +char func_rom_bank2_e::a +char func_rom_bank2_e::a#2 // 101.0 +char func_rom_bank2_e::b +char func_rom_bank2_e::b#2 // 50.5 +char func_rom_bank2_e::return +char func_rom_bank2_e::return#0 // 28.5 +char func_rom_bank2_e::return#2 // 22.0 +char func_rom_bank2_e::return#3 // 4.0 +__bank(bank) char func_rom_bank2_f(char a , char b) +char func_rom_bank2_f::a +char func_rom_bank2_f::b +char func_rom_bank2_f::return +char func_rom_bank2_f::return#0 // 4.333333333333333 +char func_rom_bank2_f::return#2 // 4.0 void main() char main::$0 // 4.0 -char main::$1 // 4.0 char main::$10 // 4.0 char main::$11 // 4.0 +char main::$12 // 4.0 +char main::$13 // 4.0 char main::$2 // 4.0 char main::$3 // 4.0 char main::$4 // 4.0 @@ -1167,755 +1376,893 @@ char main::$8 // 4.0 char main::$9 // 4.0 Initial phi equivalence classes -[ func_bank1_a::a#4 ] -[ func_bank1_a::b#4 ] -[ func_bank1_b::a#2 ] -[ func_bank1_b::b#2 ] -[ func_bank2_a::a#4 ] -[ func_bank2_a::b#4 ] -[ func_bank2_b::a#2 ] -[ func_bank2_b::b#2 ] -Added variable func_bank1_a::return#10 to live range equivalence class [ func_bank1_a::return#10 ] +[ func_ram_bank1_a::a#3 ] +[ func_ram_bank1_a::b#3 ] +[ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] +[ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] +[ func_rom_bank2_a::a#3 ] +[ func_rom_bank2_a::b#3 ] +[ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] +[ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] +[ func_rom_bank2_e::a#2 ] +[ func_rom_bank2_e::b#2 ] +[ func_main_a::a#3 ] +[ func_main_a::b#3 ] +Added variable func_ram_bank1_a::return#4 to live range equivalence class [ func_ram_bank1_a::return#4 ] Added variable main::$0 to live range equivalence class [ main::$0 ] -Added variable func_bank1_b::return#3 to live range equivalence class [ func_bank1_b::return#3 ] -Added variable main::$1 to live range equivalence class [ main::$1 ] -Added variable func_bank1_c::return#2 to live range equivalence class [ func_bank1_c::return#2 ] +Added variable func_ram_bank1_c::return#2 to live range equivalence class [ func_ram_bank1_c::return#2 ] Added variable main::$2 to live range equivalence class [ main::$2 ] -Added variable func_bank1_d::return#2 to live range equivalence class [ func_bank1_d::return#2 ] +Added variable func_ram_bank1_d::return#2 to live range equivalence class [ func_ram_bank1_d::return#2 ] Added variable main::$3 to live range equivalence class [ main::$3 ] -Added variable func_bank1_e::return#2 to live range equivalence class [ func_bank1_e::return#2 ] +Added variable func_ram_bank1_e::return#3 to live range equivalence class [ func_ram_bank1_e::return#3 ] Added variable main::$4 to live range equivalence class [ main::$4 ] -Added variable func_bank1_f::return#2 to live range equivalence class [ func_bank1_f::return#2 ] +Added variable func_ram_bank1_f::return#2 to live range equivalence class [ func_ram_bank1_f::return#2 ] Added variable main::$5 to live range equivalence class [ main::$5 ] -Added variable func_bank2_a::return#10 to live range equivalence class [ func_bank2_a::return#10 ] +Added variable func_rom_bank2_a::return#4 to live range equivalence class [ func_rom_bank2_a::return#4 ] Added variable main::$6 to live range equivalence class [ main::$6 ] -Added variable func_bank2_b::return#3 to live range equivalence class [ func_bank2_b::return#3 ] +Added variable func_rom_bank2_b::return#4 to live range equivalence class [ func_rom_bank2_b::return#4 ] Added variable main::$7 to live range equivalence class [ main::$7 ] -Added variable func_bank2_c::return#2 to live range equivalence class [ func_bank2_c::return#2 ] +Added variable func_rom_bank2_c::return#2 to live range equivalence class [ func_rom_bank2_c::return#2 ] Added variable main::$8 to live range equivalence class [ main::$8 ] -Added variable func_bank2_d::return#2 to live range equivalence class [ func_bank2_d::return#2 ] +Added variable func_rom_bank2_d::return#2 to live range equivalence class [ func_rom_bank2_d::return#2 ] Added variable main::$9 to live range equivalence class [ main::$9 ] -Added variable func_bank2_e::return#2 to live range equivalence class [ func_bank2_e::return#2 ] +Added variable func_rom_bank2_e::return#3 to live range equivalence class [ func_rom_bank2_e::return#3 ] Added variable main::$10 to live range equivalence class [ main::$10 ] -Added variable func_bank2_f::return#2 to live range equivalence class [ func_bank2_f::return#2 ] +Added variable func_rom_bank2_f::return#2 to live range equivalence class [ func_rom_bank2_f::return#2 ] Added variable main::$11 to live range equivalence class [ main::$11 ] -Added variable func_bank1_a::return#0 to live range equivalence class [ func_bank1_a::return#0 ] -Added variable func_bank1_b::return#1 to live range equivalence class [ func_bank1_b::return#1 ] -Added variable func_bank1_a::return#2 to live range equivalence class [ func_bank1_a::return#2 ] -Added variable func_bank1_c::return#0 to live range equivalence class [ func_bank1_c::return#0 ] -Added variable func_bank2_a::return#0 to live range equivalence class [ func_bank2_a::return#0 ] -Added variable func_bank1_d::return#0 to live range equivalence class [ func_bank1_d::return#0 ] -Added variable func_bank1_a::return#4 to live range equivalence class [ func_bank1_a::return#4 ] -Added variable func_bank1_e::return#0 to live range equivalence class [ func_bank1_e::return#0 ] -Added variable func_bank2_a::return#4 to live range equivalence class [ func_bank2_a::return#4 ] -Added variable func_bank1_f::return#0 to live range equivalence class [ func_bank1_f::return#0 ] -Added variable func_bank2_a::return#1 to live range equivalence class [ func_bank2_a::return#1 ] -Added variable func_bank2_b::return#1 to live range equivalence class [ func_bank2_b::return#1 ] -Added variable func_bank1_a::return#3 to live range equivalence class [ func_bank1_a::return#3 ] -Added variable func_bank2_c::return#0 to live range equivalence class [ func_bank2_c::return#0 ] -Added variable func_bank2_a::return#3 to live range equivalence class [ func_bank2_a::return#3 ] -Added variable func_bank2_d::return#0 to live range equivalence class [ func_bank2_d::return#0 ] -Added variable func_bank2_b::return#0 to live range equivalence class [ func_bank2_b::return#0 ] -Added variable func_bank2_e::return#0 to live range equivalence class [ func_bank2_e::return#0 ] -Added variable func_bank1_b::return#0 to live range equivalence class [ func_bank1_b::return#0 ] -Added variable func_bank2_f::return#0 to live range equivalence class [ func_bank2_f::return#0 ] +Added variable func_main_a::return#4 to live range equivalence class [ func_main_a::return#4 ] +Added variable main::$12 to live range equivalence class [ main::$12 ] +Added variable func_main_b::return#2 to live range equivalence class [ func_main_b::return#2 ] +Added variable main::$13 to live range equivalence class [ main::$13 ] +Added variable func_ram_bank1_a::return#0 to live range equivalence class [ func_ram_bank1_a::return#0 ] +Added variable func_ram_bank1_a::return#2 to live range equivalence class [ func_ram_bank1_a::return#2 ] +Added variable func_ram_bank1_c::return#0 to live range equivalence class [ func_ram_bank1_c::return#0 ] +Added variable func_rom_bank2_a::return#0 to live range equivalence class [ func_rom_bank2_a::return#0 ] +Added variable func_ram_bank1_d::return#0 to live range equivalence class [ func_ram_bank1_d::return#0 ] +Added variable func_rom_bank2_b::return#0 to live range equivalence class [ func_rom_bank2_b::return#0 ] +Added variable func_ram_bank1_e::return#0 to live range equivalence class [ func_ram_bank1_e::return#0 ] +Added variable func_main_a::return#0 to live range equivalence class [ func_main_a::return#0 ] +Added variable func_ram_bank1_f::return#0 to live range equivalence class [ func_ram_bank1_f::return#0 ] +Added variable func_rom_bank2_a::return#1 to live range equivalence class [ func_rom_bank2_a::return#1 ] +Added variable func_rom_bank2_b::return#1 to live range equivalence class [ func_rom_bank2_b::return#1 ] +Added variable func_ram_bank1_a::return#3 to live range equivalence class [ func_ram_bank1_a::return#3 ] +Added variable func_rom_bank2_c::return#0 to live range equivalence class [ func_rom_bank2_c::return#0 ] +Added variable func_rom_bank2_a::return#3 to live range equivalence class [ func_rom_bank2_a::return#3 ] +Added variable func_rom_bank2_d::return#0 to live range equivalence class [ func_rom_bank2_d::return#0 ] +Added variable func_rom_bank2_b::return#3 to live range equivalence class [ func_rom_bank2_b::return#3 ] +Added variable func_rom_bank2_e::return#0 to live range equivalence class [ func_rom_bank2_e::return#0 ] +Added variable func_main_a::return#1 to live range equivalence class [ func_main_a::return#1 ] +Added variable func_rom_bank2_f::return#0 to live range equivalence class [ func_rom_bank2_f::return#0 ] +Added variable func_ram_bank1_e::return#2 to live range equivalence class [ func_ram_bank1_e::return#2 ] +Added variable func_main_a::return#2 to live range equivalence class [ func_main_a::return#2 ] +Added variable func_rom_bank2_e::return#2 to live range equivalence class [ func_rom_bank2_e::return#2 ] +Added variable func_main_b::return#0 to live range equivalence class [ func_main_b::return#0 ] Complete equivalence classes -[ func_bank1_a::a#4 ] -[ func_bank1_a::b#4 ] -[ func_bank1_b::a#2 ] -[ func_bank1_b::b#2 ] -[ func_bank2_a::a#4 ] -[ func_bank2_a::b#4 ] -[ func_bank2_b::a#2 ] -[ func_bank2_b::b#2 ] -[ func_bank1_a::return#10 ] +[ func_ram_bank1_a::a#3 ] +[ func_ram_bank1_a::b#3 ] +[ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] +[ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] +[ func_rom_bank2_a::a#3 ] +[ func_rom_bank2_a::b#3 ] +[ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] +[ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] +[ func_rom_bank2_e::a#2 ] +[ func_rom_bank2_e::b#2 ] +[ func_main_a::a#3 ] +[ func_main_a::b#3 ] +[ func_ram_bank1_a::return#4 ] [ main::$0 ] -[ func_bank1_b::return#3 ] -[ main::$1 ] -[ func_bank1_c::return#2 ] +[ func_ram_bank1_c::return#2 ] [ main::$2 ] -[ func_bank1_d::return#2 ] +[ func_ram_bank1_d::return#2 ] [ main::$3 ] -[ func_bank1_e::return#2 ] +[ func_ram_bank1_e::return#3 ] [ main::$4 ] -[ func_bank1_f::return#2 ] +[ func_ram_bank1_f::return#2 ] [ main::$5 ] -[ func_bank2_a::return#10 ] +[ func_rom_bank2_a::return#4 ] [ main::$6 ] -[ func_bank2_b::return#3 ] +[ func_rom_bank2_b::return#4 ] [ main::$7 ] -[ func_bank2_c::return#2 ] +[ func_rom_bank2_c::return#2 ] [ main::$8 ] -[ func_bank2_d::return#2 ] +[ func_rom_bank2_d::return#2 ] [ main::$9 ] -[ func_bank2_e::return#2 ] +[ func_rom_bank2_e::return#3 ] [ main::$10 ] -[ func_bank2_f::return#2 ] +[ func_rom_bank2_f::return#2 ] [ main::$11 ] -[ func_bank1_a::return#0 ] -[ func_bank1_b::return#1 ] -[ func_bank1_a::return#2 ] -[ func_bank1_c::return#0 ] -[ func_bank2_a::return#0 ] -[ func_bank1_d::return#0 ] -[ func_bank1_a::return#4 ] -[ func_bank1_e::return#0 ] -[ func_bank2_a::return#4 ] -[ func_bank1_f::return#0 ] -[ func_bank2_a::return#1 ] -[ func_bank2_b::return#1 ] -[ func_bank1_a::return#3 ] -[ func_bank2_c::return#0 ] -[ func_bank2_a::return#3 ] -[ func_bank2_d::return#0 ] -[ func_bank2_b::return#0 ] -[ func_bank2_e::return#0 ] -[ func_bank1_b::return#0 ] -[ func_bank2_f::return#0 ] -Allocated zp[1]:2 [ func_bank1_a::a#4 ] -Allocated zp[1]:3 [ func_bank1_a::b#4 ] -Allocated zp[1]:4 [ func_bank1_b::a#2 ] -Allocated zp[1]:5 [ func_bank1_b::b#2 ] -Allocated zp[1]:6 [ func_bank2_a::a#4 ] -Allocated zp[1]:7 [ func_bank2_a::b#4 ] -Allocated zp[1]:8 [ func_bank2_b::a#2 ] -Allocated zp[1]:9 [ func_bank2_b::b#2 ] -Allocated zp[1]:10 [ func_bank1_b::return#1 ] -Allocated zp[1]:11 [ func_bank2_b::return#1 ] -Allocated zp[1]:12 [ func_bank2_a::return#1 ] -Allocated zp[1]:13 [ func_bank1_a::return#0 ] -Allocated zp[1]:14 [ func_bank1_a::return#2 ] -Allocated zp[1]:15 [ func_bank2_a::return#0 ] -Allocated zp[1]:16 [ func_bank1_a::return#4 ] -Allocated zp[1]:17 [ func_bank2_a::return#4 ] -Allocated zp[1]:18 [ func_bank1_a::return#3 ] -Allocated zp[1]:19 [ func_bank2_a::return#3 ] -Allocated zp[1]:20 [ func_bank2_b::return#0 ] -Allocated zp[1]:21 [ func_bank1_b::return#0 ] -Allocated zp[1]:22 [ func_bank1_c::return#0 ] -Allocated zp[1]:23 [ func_bank1_d::return#0 ] -Allocated zp[1]:24 [ func_bank1_e::return#0 ] -Allocated zp[1]:25 [ func_bank1_f::return#0 ] -Allocated zp[1]:26 [ func_bank2_c::return#0 ] -Allocated zp[1]:27 [ func_bank2_d::return#0 ] -Allocated zp[1]:28 [ func_bank2_e::return#0 ] -Allocated zp[1]:29 [ func_bank2_f::return#0 ] -Allocated zp[1]:30 [ func_bank1_a::return#10 ] -Allocated zp[1]:31 [ main::$0 ] -Allocated zp[1]:32 [ func_bank1_b::return#3 ] -Allocated zp[1]:33 [ main::$1 ] -Allocated zp[1]:34 [ func_bank1_c::return#2 ] -Allocated zp[1]:35 [ main::$2 ] -Allocated zp[1]:36 [ func_bank1_d::return#2 ] -Allocated zp[1]:37 [ main::$3 ] -Allocated zp[1]:38 [ func_bank1_e::return#2 ] -Allocated zp[1]:39 [ main::$4 ] -Allocated zp[1]:40 [ func_bank1_f::return#2 ] -Allocated zp[1]:41 [ main::$5 ] -Allocated zp[1]:42 [ func_bank2_a::return#10 ] -Allocated zp[1]:43 [ main::$6 ] -Allocated zp[1]:44 [ func_bank2_b::return#3 ] -Allocated zp[1]:45 [ main::$7 ] -Allocated zp[1]:46 [ func_bank2_c::return#2 ] -Allocated zp[1]:47 [ main::$8 ] -Allocated zp[1]:48 [ func_bank2_d::return#2 ] -Allocated zp[1]:49 [ main::$9 ] -Allocated zp[1]:50 [ func_bank2_e::return#2 ] -Allocated zp[1]:51 [ main::$10 ] -Allocated zp[1]:52 [ func_bank2_f::return#2 ] -Allocated zp[1]:53 [ main::$11 ] +[ func_main_a::return#4 ] +[ main::$12 ] +[ func_main_b::return#2 ] +[ main::$13 ] +[ func_ram_bank1_a::return#0 ] +[ func_ram_bank1_a::return#2 ] +[ func_ram_bank1_c::return#0 ] +[ func_rom_bank2_a::return#0 ] +[ func_ram_bank1_d::return#0 ] +[ func_rom_bank2_b::return#0 ] +[ func_ram_bank1_e::return#0 ] +[ func_main_a::return#0 ] +[ func_ram_bank1_f::return#0 ] +[ func_rom_bank2_a::return#1 ] +[ func_rom_bank2_b::return#1 ] +[ func_ram_bank1_a::return#3 ] +[ func_rom_bank2_c::return#0 ] +[ func_rom_bank2_a::return#3 ] +[ func_rom_bank2_d::return#0 ] +[ func_rom_bank2_b::return#3 ] +[ func_rom_bank2_e::return#0 ] +[ func_main_a::return#1 ] +[ func_rom_bank2_f::return#0 ] +[ func_ram_bank1_e::return#2 ] +[ func_main_a::return#2 ] +[ func_rom_bank2_e::return#2 ] +[ func_main_b::return#0 ] +Allocated zp[1]:2 [ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] +Allocated zp[1]:3 [ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] +Allocated zp[1]:4 [ func_rom_bank2_b::return#1 ] +Allocated zp[1]:5 [ func_rom_bank2_b::return#0 ] +Allocated zp[1]:6 [ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] +Allocated zp[1]:7 [ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] +Allocated zp[1]:8 [ func_ram_bank1_e::return#0 ] +Allocated zp[1]:9 [ func_rom_bank2_b::return#3 ] +Allocated zp[1]:10 [ func_ram_bank1_e::return#2 ] +Allocated zp[1]:11 [ func_ram_bank1_a::a#3 ] +Allocated zp[1]:12 [ func_ram_bank1_a::b#3 ] +Allocated zp[1]:13 [ func_rom_bank2_a::a#3 ] +Allocated zp[1]:14 [ func_rom_bank2_a::b#3 ] +Allocated zp[1]:15 [ func_rom_bank2_e::a#2 ] +Allocated zp[1]:16 [ func_main_a::a#3 ] +Allocated zp[1]:17 [ func_rom_bank2_e::b#2 ] +Allocated zp[1]:18 [ func_main_a::b#3 ] +Allocated zp[1]:19 [ func_rom_bank2_e::return#0 ] +Allocated zp[1]:20 [ func_rom_bank2_a::return#1 ] +Allocated zp[1]:21 [ func_main_a::return#2 ] +Allocated zp[1]:22 [ func_ram_bank1_a::return#0 ] +Allocated zp[1]:23 [ func_ram_bank1_a::return#2 ] +Allocated zp[1]:24 [ func_rom_bank2_a::return#0 ] +Allocated zp[1]:25 [ func_main_a::return#0 ] +Allocated zp[1]:26 [ func_ram_bank1_a::return#3 ] +Allocated zp[1]:27 [ func_rom_bank2_a::return#3 ] +Allocated zp[1]:28 [ func_main_a::return#1 ] +Allocated zp[1]:29 [ func_rom_bank2_e::return#2 ] +Allocated zp[1]:30 [ func_ram_bank1_c::return#0 ] +Allocated zp[1]:31 [ func_ram_bank1_d::return#0 ] +Allocated zp[1]:32 [ func_ram_bank1_f::return#0 ] +Allocated zp[1]:33 [ func_rom_bank2_c::return#0 ] +Allocated zp[1]:34 [ func_rom_bank2_d::return#0 ] +Allocated zp[1]:35 [ func_rom_bank2_f::return#0 ] +Allocated zp[1]:36 [ func_main_b::return#0 ] +Allocated zp[1]:37 [ func_ram_bank1_a::return#4 ] +Allocated zp[1]:38 [ main::$0 ] +Allocated zp[1]:39 [ func_ram_bank1_c::return#2 ] +Allocated zp[1]:40 [ main::$2 ] +Allocated zp[1]:41 [ func_ram_bank1_d::return#2 ] +Allocated zp[1]:42 [ main::$3 ] +Allocated zp[1]:43 [ func_ram_bank1_e::return#3 ] +Allocated zp[1]:44 [ main::$4 ] +Allocated zp[1]:45 [ func_ram_bank1_f::return#2 ] +Allocated zp[1]:46 [ main::$5 ] +Allocated zp[1]:47 [ func_rom_bank2_a::return#4 ] +Allocated zp[1]:48 [ main::$6 ] +Allocated zp[1]:49 [ func_rom_bank2_b::return#4 ] +Allocated zp[1]:50 [ main::$7 ] +Allocated zp[1]:51 [ func_rom_bank2_c::return#2 ] +Allocated zp[1]:52 [ main::$8 ] +Allocated zp[1]:53 [ func_rom_bank2_d::return#2 ] +Allocated zp[1]:54 [ main::$9 ] +Allocated zp[1]:55 [ func_rom_bank2_e::return#3 ] +Allocated zp[1]:56 [ main::$10 ] +Allocated zp[1]:57 [ func_rom_bank2_f::return#2 ] +Allocated zp[1]:58 [ main::$11 ] +Allocated zp[1]:59 [ func_main_a::return#4 ] +Allocated zp[1]:60 [ main::$12 ] +Allocated zp[1]:61 [ func_main_b::return#2 ] +Allocated zp[1]:62 [ main::$13 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [51] func_bank1_a::return#0 = func_bank1_a::a#4 + func_bank1_a::b#4 [ func_bank1_a::return#0 ] ( func_bank1_a:1 [ func_bank1_a::return#0 ] { { func_bank1_a::return#0 = func_bank1_a::return#10 } } func_bank1_c:9::func_bank1_a:57 [ func_bank1_a::return#0 ] { { func_bank1_c::return#0 = func_bank1_c::return#2 } { func_bank1_a::return#0 = func_bank1_a::return#2 } } func_bank1_e:17::func_bank1_a:67 [ func_bank1_a::return#0 ] { { func_bank1_e::return#0 = func_bank1_e::return#2 } { func_bank1_a::return#0 = func_bank1_a::return#4 } } func_bank2_c:33::func_bank1_a:83 [ func_bank1_a::return#0 ] { { func_bank2_c::return#0 = func_bank2_c::return#2 } { func_bank1_a::return#0 = func_bank1_a::return#3 } } ) always clobbers reg byte a -Statement [54] func_bank1_b::return#1 = func_bank1_b::a#2 + func_bank1_b::b#2 [ func_bank1_b::return#1 ] ( func_bank1_b:5 [ func_bank1_b::return#1 ] { { func_bank1_b::return#1 = func_bank1_b::return#3 } } func_bank2_f:45::func_bank1_b:98 [ func_bank1_b::return#1 ] { { func_bank2_f::return#0 = func_bank2_f::return#2 } { func_bank1_b::return#0 = func_bank1_b::return#1 } } ) always clobbers reg byte a -Statement [77] func_bank2_a::return#1 = func_bank2_a::a#4 + func_bank2_a::b#4 [ func_bank2_a::return#1 ] ( func_bank2_a:25 [ func_bank2_a::return#1 ] { { func_bank2_a::return#1 = func_bank2_a::return#10 } } func_bank1_d:13::func_bank2_a:62 [ func_bank2_a::return#1 ] { { func_bank1_d::return#0 = func_bank1_d::return#2 } { func_bank2_a::return#0 = func_bank2_a::return#1 } } func_bank1_f:21::func_bank2_a:72 [ func_bank2_a::return#1 ] { { func_bank1_f::return#0 = func_bank1_f::return#2 } { func_bank2_a::return#1 = func_bank2_a::return#4 } } func_bank2_d:37::func_bank2_a:88 [ func_bank2_a::return#1 ] { { func_bank2_d::return#0 = func_bank2_d::return#2 } { func_bank2_a::return#1 = func_bank2_a::return#3 } } ) always clobbers reg byte a -Statement [80] func_bank2_b::return#1 = func_bank2_b::a#2 + func_bank2_b::b#2 [ func_bank2_b::return#1 ] ( func_bank2_b:29 [ func_bank2_b::return#1 ] { { func_bank2_b::return#1 = func_bank2_b::return#3 } } func_bank2_e:41::func_bank2_b:93 [ func_bank2_b::return#1 ] { { func_bank2_e::return#0 = func_bank2_e::return#2 } { func_bank2_b::return#0 = func_bank2_b::return#1 } } ) always clobbers reg byte a -Potential registers zp[1]:2 [ func_bank1_a::a#4 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:3 [ func_bank1_a::b#4 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:4 [ func_bank1_b::a#2 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:5 [ func_bank1_b::b#2 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:6 [ func_bank2_a::a#4 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:7 [ func_bank2_a::b#4 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:8 [ func_bank2_b::a#2 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:9 [ func_bank2_b::b#2 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:30 [ func_bank1_a::return#10 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:31 [ main::$0 ] : zp[1]:31 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:32 [ func_bank1_b::return#3 ] : zp[1]:32 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:33 [ main::$1 ] : zp[1]:33 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:34 [ func_bank1_c::return#2 ] : zp[1]:34 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:35 [ main::$2 ] : zp[1]:35 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:36 [ func_bank1_d::return#2 ] : zp[1]:36 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:37 [ main::$3 ] : zp[1]:37 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:38 [ func_bank1_e::return#2 ] : zp[1]:38 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:39 [ main::$4 ] : zp[1]:39 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:40 [ func_bank1_f::return#2 ] : zp[1]:40 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:41 [ main::$5 ] : zp[1]:41 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:42 [ func_bank2_a::return#10 ] : zp[1]:42 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:43 [ main::$6 ] : zp[1]:43 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:44 [ func_bank2_b::return#3 ] : zp[1]:44 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:45 [ main::$7 ] : zp[1]:45 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:46 [ func_bank2_c::return#2 ] : zp[1]:46 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:47 [ main::$8 ] : zp[1]:47 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:48 [ func_bank2_d::return#2 ] : zp[1]:48 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:49 [ main::$9 ] : zp[1]:49 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:50 [ func_bank2_e::return#2 ] : zp[1]:50 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:51 [ main::$10 ] : zp[1]:51 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:52 [ func_bank2_f::return#2 ] : zp[1]:52 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:53 [ main::$11 ] : zp[1]:53 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:13 [ func_bank1_a::return#0 ] : zp[1]:13 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:10 [ func_bank1_b::return#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:14 [ func_bank1_a::return#2 ] : zp[1]:14 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:22 [ func_bank1_c::return#0 ] : zp[1]:22 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:15 [ func_bank2_a::return#0 ] : zp[1]:15 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:23 [ func_bank1_d::return#0 ] : zp[1]:23 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:16 [ func_bank1_a::return#4 ] : zp[1]:16 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:24 [ func_bank1_e::return#0 ] : zp[1]:24 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:17 [ func_bank2_a::return#4 ] : zp[1]:17 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:25 [ func_bank1_f::return#0 ] : zp[1]:25 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:12 [ func_bank2_a::return#1 ] : zp[1]:12 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:11 [ func_bank2_b::return#1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:18 [ func_bank1_a::return#3 ] : zp[1]:18 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:26 [ func_bank2_c::return#0 ] : zp[1]:26 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:19 [ func_bank2_a::return#3 ] : zp[1]:19 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:27 [ func_bank2_d::return#0 ] : zp[1]:27 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:20 [ func_bank2_b::return#0 ] : zp[1]:20 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:28 [ func_bank2_e::return#0 ] : zp[1]:28 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:21 [ func_bank1_b::return#0 ] : zp[1]:21 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:29 [ func_bank2_f::return#0 ] : zp[1]:29 , reg byte a , reg byte x , reg byte y , +Statement [6] *SCREEN = func_ram_bank1_b::return#0 [ ] ( [ ] { { func_ram_bank1_c::return#0 = func_ram_bank1_c::return#2 } } ) always clobbers reg byte a +Statement [57] func_ram_bank1_a::return#0 = func_ram_bank1_a::a#3 + func_ram_bank1_a::b#3 [ func_ram_bank1_a::return#0 ] ( func_ram_bank1_a:1 [ func_ram_bank1_a::return#0 ] { { func_ram_bank1_a::return#0 = func_ram_bank1_a::return#4 } } func_ram_bank1_c:7::func_ram_bank1_a:62 [ func_ram_bank1_a::return#0 ] { { func_ram_bank1_c::return#0 = func_ram_bank1_c::return#2 } { func_ram_bank1_a::return#0 = func_ram_bank1_a::return#2 } } func_rom_bank2_c:31::func_ram_bank1_a:90 [ func_ram_bank1_a::return#0 ] { { func_rom_bank2_c::return#0 = func_rom_bank2_c::return#2 } { func_ram_bank1_a::return#0 = func_ram_bank1_a::return#3 } } ) always clobbers reg byte a +Statement [84] func_rom_bank2_a::return#1 = func_rom_bank2_a::a#3 + func_rom_bank2_a::b#3 [ func_rom_bank2_a::return#1 ] ( func_rom_bank2_a:23 [ func_rom_bank2_a::return#1 ] { { func_rom_bank2_a::return#1 = func_rom_bank2_a::return#4 } } func_ram_bank1_d:11::func_rom_bank2_a:67 [ func_rom_bank2_a::return#1 ] { { func_ram_bank1_d::return#0 = func_ram_bank1_d::return#2 } { func_rom_bank2_a::return#0 = func_rom_bank2_a::return#1 } } func_rom_bank2_d:35::func_rom_bank2_a:95 [ func_rom_bank2_a::return#1 ] { { func_rom_bank2_d::return#0 = func_rom_bank2_d::return#2 } { func_rom_bank2_a::return#1 = func_rom_bank2_a::return#3 } } ) always clobbers reg byte a +Statement [87] func_rom_bank2_b::return#1 = func_rom_bank2_b::a#3 + func_rom_bank2_b::b#3 [ func_rom_bank2_b::return#1 ] ( func_rom_bank2_b:27 [ func_rom_bank2_b::return#1 ] { { func_rom_bank2_b::return#1 = func_rom_bank2_b::return#4 } } func_ram_bank1_e:15::func_rom_bank2_b:74 [ func_rom_bank2_b::return#1 ] { { func_ram_bank1_e::return#0 = func_ram_bank1_e::return#3 } { func_rom_bank2_b::a#0 = func_rom_bank2_b::a#3 func_ram_bank1_e::a#2 } { func_rom_bank2_b::b#0 = func_rom_bank2_b::b#3 func_ram_bank1_e::b#2 } { func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 } } func_main_a:47::func_ram_bank1_e:114::func_rom_bank2_b:74 [ func_rom_bank2_b::return#1 ] { { func_main_a::return#2 = func_main_a::return#4 } { func_ram_bank1_e::return#0 = func_ram_bank1_e::return#2 } { func_rom_bank2_b::a#0 = func_rom_bank2_b::a#3 func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 func_main_a::a#3 } { func_rom_bank2_b::b#0 = func_rom_bank2_b::b#3 func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 func_main_a::b#3 } { func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 } } func_ram_bank1_f:19::func_main_a:79::func_ram_bank1_e:114::func_rom_bank2_b:74 [ func_rom_bank2_b::return#1 ] { { func_ram_bank1_f::return#0 = func_ram_bank1_f::return#2 } { func_main_a::return#0 = func_main_a::return#2 } { func_ram_bank1_e::return#0 = func_ram_bank1_e::return#2 } { func_rom_bank2_b::a#0 = func_rom_bank2_b::a#3 func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 func_main_a::a#3 } { func_rom_bank2_b::b#0 = func_rom_bank2_b::b#3 func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 func_main_a::b#3 } { func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 } } func_rom_bank2_f:43::func_main_a:107::func_ram_bank1_e:114::func_rom_bank2_b:74 [ func_rom_bank2_b::return#1 ] { { func_rom_bank2_f::return#0 = func_rom_bank2_f::return#2 } { func_main_a::return#1 = func_main_a::return#2 } { func_ram_bank1_e::return#0 = func_ram_bank1_e::return#2 } { func_rom_bank2_b::a#0 = func_rom_bank2_b::a#3 func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 func_main_a::a#3 } { func_rom_bank2_b::b#0 = func_rom_bank2_b::b#3 func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 func_main_a::b#3 } { func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 } } func_rom_bank2_e:39::func_rom_bank2_b:102 [ func_rom_bank2_b::return#1 ] { { func_rom_bank2_e::return#0 = func_rom_bank2_e::return#3 } { func_rom_bank2_b::a#1 = func_rom_bank2_b::a#3 func_rom_bank2_e::a#2 } { func_rom_bank2_b::b#1 = func_rom_bank2_b::b#3 func_rom_bank2_e::b#2 } { func_rom_bank2_b::return#1 = func_rom_bank2_b::return#3 } } func_main_b:51::func_rom_bank2_e:119::func_rom_bank2_b:102 [ func_rom_bank2_b::return#1 ] { { func_main_b::return#0 = func_main_b::return#2 } { func_rom_bank2_e::return#0 = func_rom_bank2_e::return#2 } { func_rom_bank2_b::a#1 = func_rom_bank2_b::a#3 func_rom_bank2_e::a#2 } { func_rom_bank2_b::b#1 = func_rom_bank2_b::b#3 func_rom_bank2_e::b#2 } { func_rom_bank2_b::return#1 = func_rom_bank2_b::return#3 } } ) always clobbers reg byte a +Potential registers zp[1]:11 [ func_ram_bank1_a::a#3 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:12 [ func_ram_bank1_a::b#3 ] : zp[1]:12 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:6 [ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:13 [ func_rom_bank2_a::a#3 ] : zp[1]:13 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:14 [ func_rom_bank2_a::b#3 ] : zp[1]:14 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:15 [ func_rom_bank2_e::a#2 ] : zp[1]:15 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:17 [ func_rom_bank2_e::b#2 ] : zp[1]:17 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:16 [ func_main_a::a#3 ] : zp[1]:16 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:18 [ func_main_a::b#3 ] : zp[1]:18 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:37 [ func_ram_bank1_a::return#4 ] : zp[1]:37 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:38 [ main::$0 ] : zp[1]:38 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:39 [ func_ram_bank1_c::return#2 ] : zp[1]:39 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:40 [ main::$2 ] : zp[1]:40 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:41 [ func_ram_bank1_d::return#2 ] : zp[1]:41 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:42 [ main::$3 ] : zp[1]:42 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:43 [ func_ram_bank1_e::return#3 ] : zp[1]:43 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:44 [ main::$4 ] : zp[1]:44 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:45 [ func_ram_bank1_f::return#2 ] : zp[1]:45 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:46 [ main::$5 ] : zp[1]:46 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:47 [ func_rom_bank2_a::return#4 ] : zp[1]:47 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:48 [ main::$6 ] : zp[1]:48 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:49 [ func_rom_bank2_b::return#4 ] : zp[1]:49 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:50 [ main::$7 ] : zp[1]:50 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:51 [ func_rom_bank2_c::return#2 ] : zp[1]:51 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:52 [ main::$8 ] : zp[1]:52 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:53 [ func_rom_bank2_d::return#2 ] : zp[1]:53 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:54 [ main::$9 ] : zp[1]:54 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:55 [ func_rom_bank2_e::return#3 ] : zp[1]:55 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:56 [ main::$10 ] : zp[1]:56 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:57 [ func_rom_bank2_f::return#2 ] : zp[1]:57 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:58 [ main::$11 ] : zp[1]:58 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:59 [ func_main_a::return#4 ] : zp[1]:59 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:60 [ main::$12 ] : zp[1]:60 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:61 [ func_main_b::return#2 ] : zp[1]:61 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:62 [ main::$13 ] : zp[1]:62 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:22 [ func_ram_bank1_a::return#0 ] : zp[1]:22 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:23 [ func_ram_bank1_a::return#2 ] : zp[1]:23 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:30 [ func_ram_bank1_c::return#0 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:24 [ func_rom_bank2_a::return#0 ] : zp[1]:24 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:31 [ func_ram_bank1_d::return#0 ] : zp[1]:31 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ func_rom_bank2_b::return#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ func_ram_bank1_e::return#0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:25 [ func_main_a::return#0 ] : zp[1]:25 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:32 [ func_ram_bank1_f::return#0 ] : zp[1]:32 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:20 [ func_rom_bank2_a::return#1 ] : zp[1]:20 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:4 [ func_rom_bank2_b::return#1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:26 [ func_ram_bank1_a::return#3 ] : zp[1]:26 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:33 [ func_rom_bank2_c::return#0 ] : zp[1]:33 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:27 [ func_rom_bank2_a::return#3 ] : zp[1]:27 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:34 [ func_rom_bank2_d::return#0 ] : zp[1]:34 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ func_rom_bank2_b::return#3 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:19 [ func_rom_bank2_e::return#0 ] : zp[1]:19 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:28 [ func_main_a::return#1 ] : zp[1]:28 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:35 [ func_rom_bank2_f::return#0 ] : zp[1]:35 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:10 [ func_ram_bank1_e::return#2 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:21 [ func_main_a::return#2 ] : zp[1]:21 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:29 [ func_rom_bank2_e::return#2 ] : zp[1]:29 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:36 [ func_main_b::return#0 ] : zp[1]:36 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [func_bank1_a] 101: zp[1]:2 [ func_bank1_a::a#4 ] 101: zp[1]:3 [ func_bank1_a::b#4 ] 22.67: zp[1]:13 [ func_bank1_a::return#0 ] 22: zp[1]:14 [ func_bank1_a::return#2 ] 22: zp[1]:16 [ func_bank1_a::return#4 ] 22: zp[1]:18 [ func_bank1_a::return#3 ] 4: zp[1]:30 [ func_bank1_a::return#10 ] -Uplift Scope [func_bank2_a] 101: zp[1]:6 [ func_bank2_a::a#4 ] 101: zp[1]:7 [ func_bank2_a::b#4 ] 22.67: zp[1]:12 [ func_bank2_a::return#1 ] 22: zp[1]:15 [ func_bank2_a::return#0 ] 22: zp[1]:17 [ func_bank2_a::return#4 ] 22: zp[1]:19 [ func_bank2_a::return#3 ] 4: zp[1]:42 [ func_bank2_a::return#10 ] -Uplift Scope [func_bank1_b] 101: zp[1]:4 [ func_bank1_b::a#2 ] 101: zp[1]:5 [ func_bank1_b::b#2 ] 28.5: zp[1]:10 [ func_bank1_b::return#1 ] 22: zp[1]:21 [ func_bank1_b::return#0 ] 4: zp[1]:32 [ func_bank1_b::return#3 ] -Uplift Scope [func_bank2_b] 101: zp[1]:8 [ func_bank2_b::a#2 ] 101: zp[1]:9 [ func_bank2_b::b#2 ] 28.5: zp[1]:11 [ func_bank2_b::return#1 ] 22: zp[1]:20 [ func_bank2_b::return#0 ] 4: zp[1]:44 [ func_bank2_b::return#3 ] -Uplift Scope [main] 4: zp[1]:31 [ main::$0 ] 4: zp[1]:33 [ main::$1 ] 4: zp[1]:35 [ main::$2 ] 4: zp[1]:37 [ main::$3 ] 4: zp[1]:39 [ main::$4 ] 4: zp[1]:41 [ main::$5 ] 4: zp[1]:43 [ main::$6 ] 4: zp[1]:45 [ main::$7 ] 4: zp[1]:47 [ main::$8 ] 4: zp[1]:49 [ main::$9 ] 4: zp[1]:51 [ main::$10 ] 4: zp[1]:53 [ main::$11 ] -Uplift Scope [func_bank1_c] 4.33: zp[1]:22 [ func_bank1_c::return#0 ] 4: zp[1]:34 [ func_bank1_c::return#2 ] -Uplift Scope [func_bank1_d] 4.33: zp[1]:23 [ func_bank1_d::return#0 ] 4: zp[1]:36 [ func_bank1_d::return#2 ] -Uplift Scope [func_bank2_c] 4.33: zp[1]:26 [ func_bank2_c::return#0 ] 4: zp[1]:46 [ func_bank2_c::return#2 ] -Uplift Scope [func_bank2_d] 4.33: zp[1]:27 [ func_bank2_d::return#0 ] 4: zp[1]:48 [ func_bank2_d::return#2 ] -Uplift Scope [func_bank2_e] 4.33: zp[1]:28 [ func_bank2_e::return#0 ] 4: zp[1]:50 [ func_bank2_e::return#2 ] -Uplift Scope [func_bank2_f] 4.33: zp[1]:29 [ func_bank2_f::return#0 ] 4: zp[1]:52 [ func_bank2_f::return#2 ] -Uplift Scope [func_bank1_e] 4.33: zp[1]:24 [ func_bank1_e::return#0 ] 4: zp[1]:38 [ func_bank1_e::return#2 ] -Uplift Scope [func_bank1_f] 4.33: zp[1]:25 [ func_bank1_f::return#0 ] 4: zp[1]:40 [ func_bank1_f::return#2 ] +Uplift Scope [func_rom_bank2_b] 13,307: zp[1]:2 [ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] 12,205: zp[1]:3 [ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] 2,221: zp[1]:4 [ func_rom_bank2_b::return#1 ] 2,002: zp[1]:5 [ func_rom_bank2_b::return#0 ] 202: zp[1]:9 [ func_rom_bank2_b::return#3 ] 4: zp[1]:49 [ func_rom_bank2_b::return#4 ] +Uplift Scope [func_ram_bank1_e] 1,203: zp[1]:6 [ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] 753: zp[1]:7 [ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] 276: zp[1]:8 [ func_ram_bank1_e::return#0 ] 202: zp[1]:10 [ func_ram_bank1_e::return#2 ] 4: zp[1]:43 [ func_ram_bank1_e::return#3 ] +Uplift Scope [func_ram_bank1_a] 101: zp[1]:11 [ func_ram_bank1_a::a#3 ] 101: zp[1]:12 [ func_ram_bank1_a::b#3 ] 25: zp[1]:22 [ func_ram_bank1_a::return#0 ] 22: zp[1]:23 [ func_ram_bank1_a::return#2 ] 22: zp[1]:26 [ func_ram_bank1_a::return#3 ] 4: zp[1]:37 [ func_ram_bank1_a::return#4 ] +Uplift Scope [func_rom_bank2_a] 101: zp[1]:13 [ func_rom_bank2_a::a#3 ] 101: zp[1]:14 [ func_rom_bank2_a::b#3 ] 25: zp[1]:20 [ func_rom_bank2_a::return#1 ] 22: zp[1]:24 [ func_rom_bank2_a::return#0 ] 22: zp[1]:27 [ func_rom_bank2_a::return#3 ] 4: zp[1]:47 [ func_rom_bank2_a::return#4 ] +Uplift Scope [func_main_a] 101: zp[1]:16 [ func_main_a::a#3 ] 50.5: zp[1]:18 [ func_main_a::b#3 ] 25: zp[1]:21 [ func_main_a::return#2 ] 22: zp[1]:25 [ func_main_a::return#0 ] 22: zp[1]:28 [ func_main_a::return#1 ] 4: zp[1]:59 [ func_main_a::return#4 ] +Uplift Scope [func_rom_bank2_e] 101: zp[1]:15 [ func_rom_bank2_e::a#2 ] 50.5: zp[1]:17 [ func_rom_bank2_e::b#2 ] 28.5: zp[1]:19 [ func_rom_bank2_e::return#0 ] 22: zp[1]:29 [ func_rom_bank2_e::return#2 ] 4: zp[1]:55 [ func_rom_bank2_e::return#3 ] +Uplift Scope [main] 4: zp[1]:38 [ main::$0 ] 4: zp[1]:40 [ main::$2 ] 4: zp[1]:42 [ main::$3 ] 4: zp[1]:44 [ main::$4 ] 4: zp[1]:46 [ main::$5 ] 4: zp[1]:48 [ main::$6 ] 4: zp[1]:50 [ main::$7 ] 4: zp[1]:52 [ main::$8 ] 4: zp[1]:54 [ main::$9 ] 4: zp[1]:56 [ main::$10 ] 4: zp[1]:58 [ main::$11 ] 4: zp[1]:60 [ main::$12 ] 4: zp[1]:62 [ main::$13 ] +Uplift Scope [func_ram_bank1_c] 4.33: zp[1]:30 [ func_ram_bank1_c::return#0 ] 4: zp[1]:39 [ func_ram_bank1_c::return#2 ] +Uplift Scope [func_ram_bank1_d] 4.33: zp[1]:31 [ func_ram_bank1_d::return#0 ] 4: zp[1]:41 [ func_ram_bank1_d::return#2 ] +Uplift Scope [func_ram_bank1_f] 4.33: zp[1]:32 [ func_ram_bank1_f::return#0 ] 4: zp[1]:45 [ func_ram_bank1_f::return#2 ] +Uplift Scope [func_rom_bank2_c] 4.33: zp[1]:33 [ func_rom_bank2_c::return#0 ] 4: zp[1]:51 [ func_rom_bank2_c::return#2 ] +Uplift Scope [func_rom_bank2_d] 4.33: zp[1]:34 [ func_rom_bank2_d::return#0 ] 4: zp[1]:53 [ func_rom_bank2_d::return#2 ] +Uplift Scope [func_rom_bank2_f] 4.33: zp[1]:35 [ func_rom_bank2_f::return#0 ] 4: zp[1]:57 [ func_rom_bank2_f::return#2 ] +Uplift Scope [func_main_b] 4.33: zp[1]:36 [ func_main_b::return#0 ] 4: zp[1]:61 [ func_main_b::return#2 ] +Uplift Scope [func_ram_bank1_b] Uplift Scope [] -Uplifting [func_bank1_a] best 740 combination reg byte x [ func_bank1_a::a#4 ] reg byte a [ func_bank1_a::b#4 ] reg byte a [ func_bank1_a::return#0 ] reg byte a [ func_bank1_a::return#2 ] zp[1]:16 [ func_bank1_a::return#4 ] zp[1]:18 [ func_bank1_a::return#3 ] zp[1]:30 [ func_bank1_a::return#10 ] -Limited combination testing to 100 combinations of 16384 possible. -Uplifting [func_bank2_a] best 695 combination reg byte x [ func_bank2_a::a#4 ] reg byte a [ func_bank2_a::b#4 ] reg byte a [ func_bank2_a::return#1 ] reg byte a [ func_bank2_a::return#0 ] zp[1]:17 [ func_bank2_a::return#4 ] zp[1]:19 [ func_bank2_a::return#3 ] zp[1]:42 [ func_bank2_a::return#10 ] -Limited combination testing to 100 combinations of 16384 possible. -Uplifting [func_bank1_b] best 668 combination reg byte x [ func_bank1_b::a#2 ] reg byte a [ func_bank1_b::b#2 ] reg byte a [ func_bank1_b::return#1 ] reg byte a [ func_bank1_b::return#0 ] zp[1]:32 [ func_bank1_b::return#3 ] +Uplifting [func_rom_bank2_b] best 914 combination reg byte x [ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] reg byte a [ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] reg byte a [ func_rom_bank2_b::return#1 ] reg byte a [ func_rom_bank2_b::return#0 ] zp[1]:9 [ func_rom_bank2_b::return#3 ] zp[1]:49 [ func_rom_bank2_b::return#4 ] +Limited combination testing to 100 combinations of 4096 possible. +Uplifting [func_ram_bank1_e] best 881 combination reg byte a [ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] reg byte x [ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] reg byte a [ func_ram_bank1_e::return#0 ] reg byte a [ func_ram_bank1_e::return#2 ] zp[1]:43 [ func_ram_bank1_e::return#3 ] Limited combination testing to 100 combinations of 1024 possible. -Uplifting [func_bank2_b] best 641 combination reg byte x [ func_bank2_b::a#2 ] reg byte a [ func_bank2_b::b#2 ] reg byte a [ func_bank2_b::return#1 ] reg byte a [ func_bank2_b::return#0 ] zp[1]:44 [ func_bank2_b::return#3 ] +Uplifting [func_ram_bank1_a] best 845 combination reg byte x [ func_ram_bank1_a::a#3 ] reg byte a [ func_ram_bank1_a::b#3 ] reg byte a [ func_ram_bank1_a::return#0 ] reg byte a [ func_ram_bank1_a::return#2 ] zp[1]:26 [ func_ram_bank1_a::return#3 ] zp[1]:37 [ func_ram_bank1_a::return#4 ] +Limited combination testing to 100 combinations of 4096 possible. +Uplifting [func_rom_bank2_a] best 809 combination reg byte x [ func_rom_bank2_a::a#3 ] reg byte a [ func_rom_bank2_a::b#3 ] reg byte a [ func_rom_bank2_a::return#1 ] reg byte a [ func_rom_bank2_a::return#0 ] zp[1]:27 [ func_rom_bank2_a::return#3 ] zp[1]:47 [ func_rom_bank2_a::return#4 ] +Limited combination testing to 100 combinations of 4096 possible. +Uplifting [func_main_a] best 767 combination reg byte a [ func_main_a::a#3 ] reg byte x [ func_main_a::b#3 ] reg byte a [ func_main_a::return#2 ] reg byte a [ func_main_a::return#0 ] zp[1]:28 [ func_main_a::return#1 ] zp[1]:59 [ func_main_a::return#4 ] +Limited combination testing to 100 combinations of 4096 possible. +Uplifting [func_rom_bank2_e] best 734 combination reg byte a [ func_rom_bank2_e::a#2 ] reg byte x [ func_rom_bank2_e::b#2 ] reg byte a [ func_rom_bank2_e::return#0 ] reg byte a [ func_rom_bank2_e::return#2 ] zp[1]:55 [ func_rom_bank2_e::return#3 ] Limited combination testing to 100 combinations of 1024 possible. -Uplifting [main] best 617 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] reg byte a [ main::$2 ] reg byte a [ main::$3 ] zp[1]:39 [ main::$4 ] zp[1]:41 [ main::$5 ] zp[1]:43 [ main::$6 ] zp[1]:45 [ main::$7 ] zp[1]:47 [ main::$8 ] zp[1]:49 [ main::$9 ] zp[1]:51 [ main::$10 ] zp[1]:53 [ main::$11 ] -Limited combination testing to 100 combinations of 16777216 possible. -Uplifting [func_bank1_c] best 605 combination reg byte a [ func_bank1_c::return#0 ] reg byte a [ func_bank1_c::return#2 ] -Uplifting [func_bank1_d] best 593 combination reg byte a [ func_bank1_d::return#0 ] reg byte a [ func_bank1_d::return#2 ] -Uplifting [func_bank2_c] best 581 combination reg byte a [ func_bank2_c::return#0 ] reg byte a [ func_bank2_c::return#2 ] -Uplifting [func_bank2_d] best 569 combination reg byte a [ func_bank2_d::return#0 ] reg byte a [ func_bank2_d::return#2 ] -Uplifting [func_bank2_e] best 557 combination reg byte a [ func_bank2_e::return#0 ] reg byte a [ func_bank2_e::return#2 ] -Uplifting [func_bank2_f] best 545 combination reg byte a [ func_bank2_f::return#0 ] reg byte a [ func_bank2_f::return#2 ] -Uplifting [func_bank1_e] best 533 combination reg byte a [ func_bank1_e::return#0 ] reg byte a [ func_bank1_e::return#2 ] -Uplifting [func_bank1_f] best 521 combination reg byte a [ func_bank1_f::return#0 ] reg byte a [ func_bank1_f::return#2 ] -Uplifting [] best 521 combination -Attempting to uplift remaining variables inzp[1]:16 [ func_bank1_a::return#4 ] -Uplifting [func_bank1_a] best 515 combination reg byte a [ func_bank1_a::return#4 ] -Attempting to uplift remaining variables inzp[1]:17 [ func_bank2_a::return#4 ] -Uplifting [func_bank2_a] best 509 combination reg byte a [ func_bank2_a::return#4 ] -Attempting to uplift remaining variables inzp[1]:18 [ func_bank1_a::return#3 ] -Uplifting [func_bank1_a] best 503 combination reg byte a [ func_bank1_a::return#3 ] -Attempting to uplift remaining variables inzp[1]:19 [ func_bank2_a::return#3 ] -Uplifting [func_bank2_a] best 497 combination reg byte a [ func_bank2_a::return#3 ] -Attempting to uplift remaining variables inzp[1]:30 [ func_bank1_a::return#10 ] -Uplifting [func_bank1_a] best 491 combination reg byte a [ func_bank1_a::return#10 ] -Attempting to uplift remaining variables inzp[1]:32 [ func_bank1_b::return#3 ] -Uplifting [func_bank1_b] best 485 combination reg byte a [ func_bank1_b::return#3 ] -Attempting to uplift remaining variables inzp[1]:39 [ main::$4 ] -Uplifting [main] best 479 combination reg byte a [ main::$4 ] -Attempting to uplift remaining variables inzp[1]:41 [ main::$5 ] -Uplifting [main] best 473 combination reg byte a [ main::$5 ] -Attempting to uplift remaining variables inzp[1]:42 [ func_bank2_a::return#10 ] -Uplifting [func_bank2_a] best 467 combination reg byte a [ func_bank2_a::return#10 ] -Attempting to uplift remaining variables inzp[1]:43 [ main::$6 ] -Uplifting [main] best 461 combination reg byte a [ main::$6 ] -Attempting to uplift remaining variables inzp[1]:44 [ func_bank2_b::return#3 ] -Uplifting [func_bank2_b] best 455 combination reg byte a [ func_bank2_b::return#3 ] -Attempting to uplift remaining variables inzp[1]:45 [ main::$7 ] -Uplifting [main] best 449 combination reg byte a [ main::$7 ] -Attempting to uplift remaining variables inzp[1]:47 [ main::$8 ] -Uplifting [main] best 443 combination reg byte a [ main::$8 ] -Attempting to uplift remaining variables inzp[1]:49 [ main::$9 ] -Uplifting [main] best 437 combination reg byte a [ main::$9 ] -Attempting to uplift remaining variables inzp[1]:51 [ main::$10 ] -Uplifting [main] best 431 combination reg byte a [ main::$10 ] -Attempting to uplift remaining variables inzp[1]:53 [ main::$11 ] -Uplifting [main] best 425 combination reg byte a [ main::$11 ] +Uplifting [main] best 710 combination reg byte a [ main::$0 ] reg byte a [ main::$2 ] reg byte a [ main::$3 ] reg byte a [ main::$4 ] zp[1]:46 [ main::$5 ] zp[1]:48 [ main::$6 ] zp[1]:50 [ main::$7 ] zp[1]:52 [ main::$8 ] zp[1]:54 [ main::$9 ] zp[1]:56 [ main::$10 ] zp[1]:58 [ main::$11 ] zp[1]:60 [ main::$12 ] zp[1]:62 [ main::$13 ] +Limited combination testing to 100 combinations of 67108864 possible. +Uplifting [func_ram_bank1_c] best 698 combination reg byte a [ func_ram_bank1_c::return#0 ] reg byte a [ func_ram_bank1_c::return#2 ] +Uplifting [func_ram_bank1_d] best 686 combination reg byte a [ func_ram_bank1_d::return#0 ] reg byte a [ func_ram_bank1_d::return#2 ] +Uplifting [func_ram_bank1_f] best 674 combination reg byte a [ func_ram_bank1_f::return#0 ] reg byte a [ func_ram_bank1_f::return#2 ] +Uplifting [func_rom_bank2_c] best 662 combination reg byte a [ func_rom_bank2_c::return#0 ] reg byte a [ func_rom_bank2_c::return#2 ] +Uplifting [func_rom_bank2_d] best 650 combination reg byte a [ func_rom_bank2_d::return#0 ] reg byte a [ func_rom_bank2_d::return#2 ] +Uplifting [func_rom_bank2_f] best 638 combination reg byte a [ func_rom_bank2_f::return#0 ] reg byte a [ func_rom_bank2_f::return#2 ] +Uplifting [func_main_b] best 626 combination reg byte a [ func_main_b::return#0 ] reg byte a [ func_main_b::return#2 ] +Uplifting [func_ram_bank1_b] best 626 combination +Uplifting [] best 626 combination +Attempting to uplift remaining variables inzp[1]:9 [ func_rom_bank2_b::return#3 ] +Uplifting [func_rom_bank2_b] best 620 combination reg byte a [ func_rom_bank2_b::return#3 ] +Attempting to uplift remaining variables inzp[1]:26 [ func_ram_bank1_a::return#3 ] +Uplifting [func_ram_bank1_a] best 614 combination reg byte a [ func_ram_bank1_a::return#3 ] +Attempting to uplift remaining variables inzp[1]:27 [ func_rom_bank2_a::return#3 ] +Uplifting [func_rom_bank2_a] best 608 combination reg byte a [ func_rom_bank2_a::return#3 ] +Attempting to uplift remaining variables inzp[1]:28 [ func_main_a::return#1 ] +Uplifting [func_main_a] best 602 combination reg byte a [ func_main_a::return#1 ] +Attempting to uplift remaining variables inzp[1]:37 [ func_ram_bank1_a::return#4 ] +Uplifting [func_ram_bank1_a] best 596 combination reg byte a [ func_ram_bank1_a::return#4 ] +Attempting to uplift remaining variables inzp[1]:43 [ func_ram_bank1_e::return#3 ] +Uplifting [func_ram_bank1_e] best 590 combination reg byte a [ func_ram_bank1_e::return#3 ] +Attempting to uplift remaining variables inzp[1]:46 [ main::$5 ] +Uplifting [main] best 584 combination reg byte a [ main::$5 ] +Attempting to uplift remaining variables inzp[1]:47 [ func_rom_bank2_a::return#4 ] +Uplifting [func_rom_bank2_a] best 578 combination reg byte a [ func_rom_bank2_a::return#4 ] +Attempting to uplift remaining variables inzp[1]:48 [ main::$6 ] +Uplifting [main] best 572 combination reg byte a [ main::$6 ] +Attempting to uplift remaining variables inzp[1]:49 [ func_rom_bank2_b::return#4 ] +Uplifting [func_rom_bank2_b] best 566 combination reg byte a [ func_rom_bank2_b::return#4 ] +Attempting to uplift remaining variables inzp[1]:50 [ main::$7 ] +Uplifting [main] best 560 combination reg byte a [ main::$7 ] +Attempting to uplift remaining variables inzp[1]:52 [ main::$8 ] +Uplifting [main] best 554 combination reg byte a [ main::$8 ] +Attempting to uplift remaining variables inzp[1]:54 [ main::$9 ] +Uplifting [main] best 548 combination reg byte a [ main::$9 ] +Attempting to uplift remaining variables inzp[1]:55 [ func_rom_bank2_e::return#3 ] +Uplifting [func_rom_bank2_e] best 542 combination reg byte a [ func_rom_bank2_e::return#3 ] +Attempting to uplift remaining variables inzp[1]:56 [ main::$10 ] +Uplifting [main] best 536 combination reg byte a [ main::$10 ] +Attempting to uplift remaining variables inzp[1]:58 [ main::$11 ] +Uplifting [main] best 530 combination reg byte a [ main::$11 ] +Attempting to uplift remaining variables inzp[1]:59 [ func_main_a::return#4 ] +Uplifting [func_main_a] best 524 combination reg byte a [ func_main_a::return#4 ] +Attempting to uplift remaining variables inzp[1]:60 [ main::$12 ] +Uplifting [main] best 518 combination reg byte a [ main::$12 ] +Attempting to uplift remaining variables inzp[1]:62 [ main::$13 ] +Uplifting [main] best 512 combination reg byte a [ main::$13 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments -// Test a far call procedure with a calling convention phi +// The linker specification of the different segments. // Upstart .cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] + .segmentdef Program [segments="Basic, Code, Data, Bank1, Bank2"] +.segmentdef Basic [start=$0801]a .segmentdef Code [start=$80d] .segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] +.segmentdef Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef Bank2 [start=$C000, min=$C000, max=$FFFF, align=$100] // Global Constants & labels + // The target computer platform is the Commander X16, + // which implements banking in ram between 0xA0000 and 0xBFFF, + // and in rom between 0xC000 and 0xFFFF. .label SCREEN = $400 .segment Code // main +// Practically this means that the main() function is placed in main memory ... main: { - // [1] call func_bank1_a - // [50] phi from main to func_bank1_a [phi:main->func_bank1_a] - func_bank1_a_from_main: - // [50] phi func_bank1_a::b#4 = 7 [phi:main->func_bank1_a#0] -- vbuaa=vbuc1 + // [1] call func_ram_bank1_a + // [56] phi from main to func_ram_bank1_a [phi:main->func_ram_bank1_a] + func_ram_bank1_a_from_main: + // [56] phi func_ram_bank1_a::b#3 = 7 [phi:main->func_ram_bank1_a#0] -- vbuaa=vbuc1 lda #7 - // [50] phi func_bank1_a::a#4 = '0' [phi:main->func_bank1_a#1] -- call_far_cx16_ram_finalize + // [56] phi func_ram_bank1_a::a#3 = '0' [phi:main->func_ram_bank1_a#1] -- call_far_cx16_ram_finalize ldx #'0' jsr $ff6e - .byte func_bank1_a + .byte func_ram_bank1_a .byte 1 - // [2] func_bank1_a::return#10 = func_bank1_a::return#0 + // [2] func_ram_bank1_a::return#4 = func_ram_bank1_a::return#0 jmp __b1 // main::@1 __b1: - // [3] main::$0 = func_bank1_a::return#10 + // [3] main::$0 = func_ram_bank1_a::return#4 // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - // far call sta SCREEN - // [5] call func_bank1_b - // [53] phi from main::@1 to func_bank1_b [phi:main::@1->func_bank1_b] - func_bank1_b_from___b1: - // [53] phi func_bank1_b::b#2 = 7 [phi:main::@1->func_bank1_b#0] -- vbuaa=vbuc1 - lda #7 - // [53] phi func_bank1_b::a#2 = '0' [phi:main::@1->func_bank1_b#1] -- vbuxx=vbuc1 - ldx #'0' - jsr func_bank1_b - // [6] func_bank1_b::return#3 = func_bank1_b::return#1 + // [5] call func_ram_bank1_b + // [59] phi from main::@1 to func_ram_bank1_b [phi:main::@1->func_ram_bank1_b] + func_ram_bank1_b_from___b1: + jsr func_ram_bank1_b jmp __b2 // main::@2 __b2: - // [7] main::$1 = func_bank1_b::return#3 - // [8] *SCREEN = main::$1 -- _deref_pbuc1=vbuaa - // far call + // [6] *SCREEN = func_ram_bank1_b::return#0 -- _deref_pbuc1=vbuc2 + // Banked call to ram in bank 1 from main memory. + lda #func_ram_bank1_b.return sta SCREEN - // [9] call func_bank1_c - // [56] phi from main::@2 to func_bank1_c [phi:main::@2->func_bank1_c] -- call_far_cx16_ram_finalize - func_bank1_c_from___b2: + // [7] call func_ram_bank1_c + // [61] phi from main::@2 to func_ram_bank1_c [phi:main::@2->func_ram_bank1_c] -- call_far_cx16_ram_finalize + func_ram_bank1_c_from___b2: jsr $ff6e - .byte func_bank1_c + .byte func_ram_bank1_c .byte 1 - // [10] func_bank1_c::return#2 = func_bank1_c::return#0 + // [8] func_ram_bank1_c::return#2 = func_ram_bank1_c::return#0 jmp __b3 // main::@3 __b3: - // [11] main::$2 = func_bank1_c::return#2 - // [12] *SCREEN = main::$2 -- _deref_pbuc1=vbuaa - // far call + // [9] main::$2 = func_ram_bank1_c::return#2 + // [10] *SCREEN = main::$2 -- _deref_pbuc1=vbuaa + // Banked call to ram in bank 1 from main memory. sta SCREEN - // [13] call func_bank1_d - // [61] phi from main::@3 to func_bank1_d [phi:main::@3->func_bank1_d] -- call_far_cx16_ram_finalize - func_bank1_d_from___b3: + // [11] call func_ram_bank1_d + // [66] phi from main::@3 to func_ram_bank1_d [phi:main::@3->func_ram_bank1_d] -- call_far_cx16_ram_finalize + func_ram_bank1_d_from___b3: jsr $ff6e - .byte func_bank1_d + .byte func_ram_bank1_d .byte 1 - // [14] func_bank1_d::return#2 = func_bank1_d::return#0 + // [12] func_ram_bank1_d::return#2 = func_ram_bank1_d::return#0 jmp __b4 // main::@4 __b4: - // [15] main::$3 = func_bank1_d::return#2 - // [16] *SCREEN = main::$3 -- _deref_pbuc1=vbuaa - // far call + // [13] main::$3 = func_ram_bank1_d::return#2 + // [14] *SCREEN = main::$3 -- _deref_pbuc1=vbuaa + // Banked call to ram in bank 1 from main memory. sta SCREEN - // [17] call func_bank1_e - // [66] phi from main::@4 to func_bank1_e [phi:main::@4->func_bank1_e] - func_bank1_e_from___b4: - jsr func_bank1_e - // [18] func_bank1_e::return#2 = func_bank1_e::return#0 + // [15] call func_ram_bank1_e + // [71] phi from main::@4 to func_ram_bank1_e [phi:main::@4->func_ram_bank1_e] + func_ram_bank1_e_from___b4: + // [71] phi func_ram_bank1_e::b#2 = 7 [phi:main::@4->func_ram_bank1_e#0] -- vbuxx=vbuc1 + ldx #7 + // [71] phi func_ram_bank1_e::a#2 = '0' [phi:main::@4->func_ram_bank1_e#1] -- call_far_cx16_ram_finalize + lda #'0' + jsr $ff6e + .byte func_ram_bank1_e + .byte 1 + // [16] func_ram_bank1_e::return#3 = func_ram_bank1_e::return#0 jmp __b5 // main::@5 __b5: - // [19] main::$4 = func_bank1_e::return#2 - // [20] *SCREEN = main::$4 -- _deref_pbuc1=vbuaa - // near call + // [17] main::$4 = func_ram_bank1_e::return#3 + // [18] *SCREEN = main::$4 -- _deref_pbuc1=vbuaa + // Banked call to ram in bank 1 from main memory. sta SCREEN - // [21] call func_bank1_f - // [71] phi from main::@5 to func_bank1_f [phi:main::@5->func_bank1_f] - func_bank1_f_from___b5: - jsr func_bank1_f - // [22] func_bank1_f::return#2 = func_bank1_f::return#0 + // [19] call func_ram_bank1_f + // [78] phi from main::@5 to func_ram_bank1_f [phi:main::@5->func_ram_bank1_f] -- call_far_cx16_ram_finalize + func_ram_bank1_f_from___b5: + jsr $ff6e + .byte func_ram_bank1_f + .byte 1 + // [20] func_ram_bank1_f::return#2 = func_ram_bank1_f::return#0 jmp __b6 // main::@6 __b6: - // [23] main::$5 = func_bank1_f::return#2 - // [24] *SCREEN = main::$5 -- _deref_pbuc1=vbuaa - // near call + // [21] main::$5 = func_ram_bank1_f::return#2 + // [22] *SCREEN = main::$5 -- _deref_pbuc1=vbuaa + // Banked call to ram in bank 1 from main memory. sta SCREEN - // [25] call func_bank2_a - // [76] phi from main::@6 to func_bank2_a [phi:main::@6->func_bank2_a] - func_bank2_a_from___b6: - // [76] phi func_bank2_a::b#4 = 7 [phi:main::@6->func_bank2_a#0] -- vbuaa=vbuc1 + // [23] call func_rom_bank2_a + // [83] phi from main::@6 to func_rom_bank2_a [phi:main::@6->func_rom_bank2_a] + func_rom_bank2_a_from___b6: + // [83] phi func_rom_bank2_a::b#3 = 7 [phi:main::@6->func_rom_bank2_a#0] -- vbuaa=vbuc1 lda #7 - // [76] phi func_bank2_a::a#4 = '0' [phi:main::@6->func_bank2_a#1] -- call_far_cx16_ram_finalize + // [83] phi func_rom_bank2_a::a#3 = '0' [phi:main::@6->func_rom_bank2_a#1] -- call_far_cx16_rom_finalize ldx #'0' jsr $ff6e - .byte func_bank2_a + .byte func_rom_bank2_a .byte 2 - // [26] func_bank2_a::return#10 = func_bank2_a::return#1 + // [24] func_rom_bank2_a::return#4 = func_rom_bank2_a::return#1 jmp __b7 // main::@7 __b7: - // [27] main::$6 = func_bank2_a::return#10 - // [28] *SCREEN = main::$6 -- _deref_pbuc1=vbuaa - // far call + // [25] main::$6 = func_rom_bank2_a::return#4 + // [26] *SCREEN = main::$6 -- _deref_pbuc1=vbuaa + // Banked call to ram in bank 1 from main memory. sta SCREEN - // [29] call func_bank2_b - // [79] phi from main::@7 to func_bank2_b [phi:main::@7->func_bank2_b] - func_bank2_b_from___b7: - // [79] phi func_bank2_b::b#2 = 7 [phi:main::@7->func_bank2_b#0] -- vbuaa=vbuc1 - lda #7 - // [79] phi func_bank2_b::a#2 = '0' [phi:main::@7->func_bank2_b#1] -- vbuxx=vbuc1 - ldx #'0' - jsr func_bank2_b - // [30] func_bank2_b::return#3 = func_bank2_b::return#1 + // [27] call func_rom_bank2_b + // [86] phi from main::@7 to func_rom_bank2_b [phi:main::@7->func_rom_bank2_b] + func_rom_bank2_b_from___b7: + // [86] phi func_rom_bank2_b::b#3 = 7 [phi:main::@7->func_rom_bank2_b#0] -- vbuxx=vbuc1 + ldx #7 + // [86] phi func_rom_bank2_b::a#3 = '0' [phi:main::@7->func_rom_bank2_b#1] -- vbuaa=vbuc1 + lda #'0' + jsr func_rom_bank2_b + // [28] func_rom_bank2_b::return#4 = func_rom_bank2_b::return#1 jmp __b8 // main::@8 __b8: - // [31] main::$7 = func_bank2_b::return#3 - // [32] *SCREEN = main::$7 -- _deref_pbuc1=vbuaa - // far call + // [29] main::$7 = func_rom_bank2_b::return#4 + // [30] *SCREEN = main::$7 -- _deref_pbuc1=vbuaa + // Banked call to rom in bank 2 from main memory. sta SCREEN - // [33] call func_bank2_c - // [82] phi from main::@8 to func_bank2_c [phi:main::@8->func_bank2_c] -- call_far_cx16_ram_finalize - func_bank2_c_from___b8: + // [31] call func_rom_bank2_c + // [89] phi from main::@8 to func_rom_bank2_c [phi:main::@8->func_rom_bank2_c] -- call_far_cx16_rom_finalize + func_rom_bank2_c_from___b8: jsr $ff6e - .byte func_bank2_c + .byte func_rom_bank2_c .byte 2 - // [34] func_bank2_c::return#2 = func_bank2_c::return#0 + // [32] func_rom_bank2_c::return#2 = func_rom_bank2_c::return#0 jmp __b9 // main::@9 __b9: - // [35] main::$8 = func_bank2_c::return#2 - // [36] *SCREEN = main::$8 -- _deref_pbuc1=vbuaa - // far call + // [33] main::$8 = func_rom_bank2_c::return#2 + // [34] *SCREEN = main::$8 -- _deref_pbuc1=vbuaa + // Banked call to rom in bank 2 from main memory. sta SCREEN - // [37] call func_bank2_d - // [87] phi from main::@9 to func_bank2_d [phi:main::@9->func_bank2_d] -- call_far_cx16_ram_finalize - func_bank2_d_from___b9: + // [35] call func_rom_bank2_d + // [94] phi from main::@9 to func_rom_bank2_d [phi:main::@9->func_rom_bank2_d] -- call_far_cx16_rom_finalize + func_rom_bank2_d_from___b9: jsr $ff6e - .byte func_bank2_d + .byte func_rom_bank2_d .byte 2 - // [38] func_bank2_d::return#2 = func_bank2_d::return#0 + // [36] func_rom_bank2_d::return#2 = func_rom_bank2_d::return#0 jmp __b10 // main::@10 __b10: - // [39] main::$9 = func_bank2_d::return#2 - // [40] *SCREEN = main::$9 -- _deref_pbuc1=vbuaa - // far call + // [37] main::$9 = func_rom_bank2_d::return#2 + // [38] *SCREEN = main::$9 -- _deref_pbuc1=vbuaa + // Banked call to rom in bank 2 from main memory. sta SCREEN - // [41] call func_bank2_e - // [92] phi from main::@10 to func_bank2_e [phi:main::@10->func_bank2_e] -- call_far_cx16_ram_finalize - func_bank2_e_from___b10: + // [39] call func_rom_bank2_e + // [99] phi from main::@10 to func_rom_bank2_e [phi:main::@10->func_rom_bank2_e] + func_rom_bank2_e_from___b10: + // [99] phi func_rom_bank2_e::b#2 = 7 [phi:main::@10->func_rom_bank2_e#0] -- vbuxx=vbuc1 + ldx #7 + // [99] phi func_rom_bank2_e::a#2 = '0' [phi:main::@10->func_rom_bank2_e#1] -- call_far_cx16_rom_finalize + lda #'0' jsr $ff6e - .byte func_bank2_e + .byte func_rom_bank2_e .byte 2 - // [42] func_bank2_e::return#2 = func_bank2_e::return#0 + // [40] func_rom_bank2_e::return#3 = func_rom_bank2_e::return#0 jmp __b11 // main::@11 __b11: - // [43] main::$10 = func_bank2_e::return#2 - // [44] *SCREEN = main::$10 -- _deref_pbuc1=vbuaa - // far call + // [41] main::$10 = func_rom_bank2_e::return#3 + // [42] *SCREEN = main::$10 -- _deref_pbuc1=vbuaa + // Banked call to rom in bank 2 from main memory. sta SCREEN - // [45] call func_bank2_f - // [97] phi from main::@11 to func_bank2_f [phi:main::@11->func_bank2_f] -- call_far_cx16_ram_finalize - func_bank2_f_from___b11: + // [43] call func_rom_bank2_f + // [106] phi from main::@11 to func_rom_bank2_f [phi:main::@11->func_rom_bank2_f] -- call_far_cx16_rom_finalize + func_rom_bank2_f_from___b11: jsr $ff6e - .byte func_bank2_f + .byte func_rom_bank2_f .byte 2 - // [46] func_bank2_f::return#2 = func_bank2_f::return#0 + // [44] func_rom_bank2_f::return#2 = func_rom_bank2_f::return#0 jmp __b12 // main::@12 __b12: - // [47] main::$11 = func_bank2_f::return#2 - // [48] *SCREEN = main::$11 -- _deref_pbuc1=vbuaa - // far call + // [45] main::$11 = func_rom_bank2_f::return#2 + // [46] *SCREEN = main::$11 -- _deref_pbuc1=vbuaa + // banked call to rom in bank 2 from main memory. + sta SCREEN + // [47] call func_main_a + // [111] phi from main::@12 to func_main_a [phi:main::@12->func_main_a] + func_main_a_from___b12: + // [111] phi func_main_a::b#3 = 7 [phi:main::@12->func_main_a#0] -- vbuxx=vbuc1 + ldx #7 + // [111] phi func_main_a::a#3 = '0' [phi:main::@12->func_main_a#1] -- vbuaa=vbuc1 + lda #'0' + jsr func_main_a + // [48] func_main_a::return#4 = func_main_a::return#2 + jmp __b13 + // main::@13 + __b13: + // [49] main::$12 = func_main_a::return#4 + // [50] *SCREEN = main::$12 -- _deref_pbuc1=vbuaa + // banked call to rom in bank 2 from main memory. + sta SCREEN + // [51] call func_main_b + // [118] phi from main::@13 to func_main_b [phi:main::@13->func_main_b] + func_main_b_from___b13: + jsr func_main_b + // [52] func_main_b::return#2 = func_main_b::return#0 + jmp __b14 + // main::@14 + __b14: + // [53] main::$13 = func_main_b::return#2 + // [54] *SCREEN = main::$13 -- _deref_pbuc1=vbuaa + // Near call in main memory from main memory. sta SCREEN jmp __breturn // main::@return - __breturn: - // [49] return - rts -} -.segment stage - // func_bank1_a -// __register(A) char func_bank1_a(__register(X) char a, __register(A) char b) -func_bank1_a: { - // [51] func_bank1_a::return#0 = func_bank1_a::a#4 + func_bank1_a::b#4 -- vbuaa=vbuxx_plus_vbuaa - stx.z $ff - clc - adc.z $ff - jmp __breturn - // func_bank1_a::@return - __breturn: - // [52] return - rts -} -.segment platform - // func_bank1_b -// __register(A) char func_bank1_b(__register(X) char a, __register(A) char b) -func_bank1_b: { - // [54] func_bank1_b::return#1 = func_bank1_b::a#2 + func_bank1_b::b#2 -- vbuaa=vbuxx_plus_vbuaa - stx.z $ff - clc - adc.z $ff - jmp __breturn - // func_bank1_b::@return __breturn: // [55] return rts } -.segment stage - // func_bank1_c -// __register(A) char func_bank1_c(char a, char b) -func_bank1_c: { +.segment Bank1 + // func_ram_bank1_a +// Functional code +// __register(A) char func_ram_bank1_a(__register(X) char a, __register(A) char b) +func_ram_bank1_a: { + // [57] func_ram_bank1_a::return#0 = func_ram_bank1_a::a#3 + func_ram_bank1_a::b#3 -- vbuaa=vbuxx_plus_vbuaa + stx.z $ff + clc + adc.z $ff + jmp __breturn + // func_ram_bank1_a::@return + __breturn: + // [58] return + rts +} +.segment Bank2 + // func_ram_bank1_b +// The sequent functions will consider no banking calculations anymore. +// The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram. +// char func_ram_bank1_b(char a, char b) +func_ram_bank1_b: { .const a = '0' .const b = 7 - // [57] call func_bank1_a - // [50] phi from func_bank1_c to func_bank1_a [phi:func_bank1_c->func_bank1_a] - func_bank1_a_from_func_bank1_c: - // [50] phi func_bank1_a::b#4 = func_bank1_c::b#0 [phi:func_bank1_c->func_bank1_a#0] -- vbuaa=vbuc1 - lda #b - // [50] phi func_bank1_a::a#4 = func_bank1_c::a#0 [phi:func_bank1_c->func_bank1_a#1] -- vbuxx=vbuc1 - ldx #a - jsr func_bank1_a - // [58] func_bank1_a::return#2 = func_bank1_a::return#0 - jmp __b1 - // func_bank1_c::@1 - __b1: - // [59] func_bank1_c::return#0 = func_bank1_a::return#2 + .label return = a+b jmp __breturn - // func_bank1_c::@return + // func_ram_bank1_b::@return __breturn: // [60] return rts } - // func_bank1_d -// __register(A) char func_bank1_d(char a, char b) -func_bank1_d: { +.segment Bank1 + // func_ram_bank1_c +// __register(A) char func_ram_bank1_c(char a, char b) +func_ram_bank1_c: { .const a = '0' .const b = 7 - // [62] call func_bank2_a - // [76] phi from func_bank1_d to func_bank2_a [phi:func_bank1_d->func_bank2_a] - func_bank2_a_from_func_bank1_d: - // [76] phi func_bank2_a::b#4 = func_bank1_d::b#0 [phi:func_bank1_d->func_bank2_a#0] -- vbuaa=vbuc1 + // [62] call func_ram_bank1_a + // [56] phi from func_ram_bank1_c to func_ram_bank1_a [phi:func_ram_bank1_c->func_ram_bank1_a] + func_ram_bank1_a_from_func_ram_bank1_c: + // [56] phi func_ram_bank1_a::b#3 = func_ram_bank1_c::b#0 [phi:func_ram_bank1_c->func_ram_bank1_a#0] -- vbuaa=vbuc1 lda #b - // [76] phi func_bank2_a::a#4 = func_bank1_d::a#0 [phi:func_bank1_d->func_bank2_a#1] -- call_far_cx16_ram_finalize + // [56] phi func_ram_bank1_a::a#3 = func_ram_bank1_c::a#0 [phi:func_ram_bank1_c->func_ram_bank1_a#1] -- vbuxx=vbuc1 ldx #a - jsr $ff6e - .byte func_bank2_a - .byte 2 - // [63] func_bank2_a::return#0 = func_bank2_a::return#1 + jsr func_ram_bank1_a + // [63] func_ram_bank1_a::return#2 = func_ram_bank1_a::return#0 jmp __b1 - // func_bank1_d::@1 + // func_ram_bank1_c::@1 __b1: - // [64] func_bank1_d::return#0 = func_bank2_a::return#0 + // [64] func_ram_bank1_c::return#0 = func_ram_bank1_a::return#2 jmp __breturn - // func_bank1_d::@return + // func_ram_bank1_c::@return __breturn: // [65] return rts } -.segment platform - // func_bank1_e -// __register(A) char func_bank1_e(char a, char b) -func_bank1_e: { + // func_ram_bank1_d +// __register(A) char func_ram_bank1_d(char a, char b) +func_ram_bank1_d: { .const a = '0' .const b = 7 - // [67] call func_bank1_a - // [50] phi from func_bank1_e to func_bank1_a [phi:func_bank1_e->func_bank1_a] - func_bank1_a_from_func_bank1_e: - // [50] phi func_bank1_a::b#4 = func_bank1_e::b#0 [phi:func_bank1_e->func_bank1_a#0] -- vbuaa=vbuc1 + // [67] call func_rom_bank2_a + // [83] phi from func_ram_bank1_d to func_rom_bank2_a [phi:func_ram_bank1_d->func_rom_bank2_a] + func_rom_bank2_a_from_func_ram_bank1_d: + // [83] phi func_rom_bank2_a::b#3 = func_ram_bank1_d::b#0 [phi:func_ram_bank1_d->func_rom_bank2_a#0] -- vbuaa=vbuc1 lda #b - // [50] phi func_bank1_a::a#4 = func_bank1_e::a#0 [phi:func_bank1_e->func_bank1_a#1] -- call_far_cx16_ram_finalize + // [83] phi func_rom_bank2_a::a#3 = func_ram_bank1_d::a#0 [phi:func_ram_bank1_d->func_rom_bank2_a#1] -- call_far_cx16_rom_finalize ldx #a jsr $ff6e - .byte func_bank1_a - .byte 1 - // [68] func_bank1_a::return#4 = func_bank1_a::return#0 + .byte func_rom_bank2_a + .byte 2 + // [68] func_rom_bank2_a::return#0 = func_rom_bank2_a::return#1 jmp __b1 - // func_bank1_e::@1 + // func_ram_bank1_d::@1 __b1: - // [69] func_bank1_e::return#0 = func_bank1_a::return#4 + // [69] func_ram_bank1_d::return#0 = func_rom_bank2_a::return#0 jmp __breturn - // func_bank1_e::@return + // func_ram_bank1_d::@return __breturn: // [70] return rts } - // func_bank1_f -// __register(A) char func_bank1_f(char a, char b) -func_bank1_f: { - .const a = '0' - .const b = 7 - // [72] call func_bank2_a - // [76] phi from func_bank1_f to func_bank2_a [phi:func_bank1_f->func_bank2_a] - func_bank2_a_from_func_bank1_f: - // [76] phi func_bank2_a::b#4 = func_bank1_f::b#0 [phi:func_bank1_f->func_bank2_a#0] -- vbuaa=vbuc1 - lda #b - // [76] phi func_bank2_a::a#4 = func_bank1_f::a#0 [phi:func_bank1_f->func_bank2_a#1] -- call_far_cx16_ram_finalize - ldx #a - jsr $ff6e - .byte func_bank2_a - .byte 2 - // [73] func_bank2_a::return#4 = func_bank2_a::return#1 + // func_ram_bank1_e +// __register(A) char func_ram_bank1_e(__register(A) char a, __register(X) char b) +func_ram_bank1_e: { + // [72] func_rom_bank2_b::a#0 = func_ram_bank1_e::a#2 + // [73] func_rom_bank2_b::b#0 = func_ram_bank1_e::b#2 + // [74] call func_rom_bank2_b + // [86] phi from func_ram_bank1_e to func_rom_bank2_b [phi:func_ram_bank1_e->func_rom_bank2_b] + func_rom_bank2_b_from_func_ram_bank1_e: + // [86] phi func_rom_bank2_b::b#3 = func_rom_bank2_b::b#0 [phi:func_ram_bank1_e->func_rom_bank2_b#0] -- register_copy + // [86] phi func_rom_bank2_b::a#3 = func_rom_bank2_b::a#0 [phi:func_ram_bank1_e->func_rom_bank2_b#1] -- register_copy + jsr func_rom_bank2_b + // [75] func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 jmp __b1 - // func_bank1_f::@1 + // func_ram_bank1_e::@1 __b1: - // [74] func_bank1_f::return#0 = func_bank2_a::return#4 + // [76] func_ram_bank1_e::return#0 = func_rom_bank2_b::return#0 jmp __breturn - // func_bank1_f::@return + // func_ram_bank1_e::@return __breturn: - // [75] return + // [77] return rts } - // func_bank2_a -// __register(A) char func_bank2_a(__register(X) char a, __register(A) char b) -func_bank2_a: { - // [77] func_bank2_a::return#1 = func_bank2_a::a#4 + func_bank2_a::b#4 -- vbuaa=vbuxx_plus_vbuaa - stx.z $ff - clc - adc.z $ff - jmp __breturn - // func_bank2_a::@return - __breturn: - // [78] return - rts -} - // func_bank2_b -// __register(A) char func_bank2_b(__register(X) char a, __register(A) char b) -func_bank2_b: { - // [80] func_bank2_b::return#1 = func_bank2_b::a#2 + func_bank2_b::b#2 -- vbuaa=vbuxx_plus_vbuaa - stx.z $ff - clc - adc.z $ff - jmp __breturn - // func_bank2_b::@return - __breturn: - // [81] return - rts -} - // func_bank2_c -// __register(A) char func_bank2_c(char a, char b) -func_bank2_c: { + // func_ram_bank1_f +// __register(A) char func_ram_bank1_f(char a, char b) +func_ram_bank1_f: { .const a = '0' .const b = 7 - // [83] call func_bank1_a - // [50] phi from func_bank2_c to func_bank1_a [phi:func_bank2_c->func_bank1_a] - func_bank1_a_from_func_bank2_c: - // [50] phi func_bank1_a::b#4 = func_bank2_c::b#0 [phi:func_bank2_c->func_bank1_a#0] -- vbuaa=vbuc1 + // [79] call func_main_a + // [111] phi from func_ram_bank1_f to func_main_a [phi:func_ram_bank1_f->func_main_a] + func_main_a_from_func_ram_bank1_f: + // [111] phi func_main_a::b#3 = func_ram_bank1_f::b#0 [phi:func_ram_bank1_f->func_main_a#0] -- vbuxx=vbuc1 + ldx #b + // [111] phi func_main_a::a#3 = func_ram_bank1_f::a#0 [phi:func_ram_bank1_f->func_main_a#1] -- vbuaa=vbuc1 + lda #a + jsr func_main_a + // [80] func_main_a::return#0 = func_main_a::return#2 + jmp __b1 + // func_ram_bank1_f::@1 + __b1: + // [81] func_ram_bank1_f::return#0 = func_main_a::return#0 + jmp __breturn + // func_ram_bank1_f::@return + __breturn: + // [82] return + rts +} +.segment Bank2 + // func_rom_bank2_a +// The sequent functions will be banked using call method rom in bank number 2. +// __register(A) char func_rom_bank2_a(__register(X) char a, __register(A) char b) +func_rom_bank2_a: { + // [84] func_rom_bank2_a::return#1 = func_rom_bank2_a::a#3 + func_rom_bank2_a::b#3 -- vbuaa=vbuxx_plus_vbuaa + stx.z $ff + clc + adc.z $ff + jmp __breturn + // func_rom_bank2_a::@return + __breturn: + // [85] return + rts +} + // func_rom_bank2_b +// The __bank directive declares this function to be banked using call method rom in bank number 2 of banked rom. +// __register(A) char func_rom_bank2_b(__register(A) char a, __register(X) char b) +func_rom_bank2_b: { + // [87] func_rom_bank2_b::return#1 = func_rom_bank2_b::a#3 + func_rom_bank2_b::b#3 -- vbuaa=vbuaa_plus_vbuxx + stx.z $ff + clc + adc.z $ff + jmp __breturn + // func_rom_bank2_b::@return + __breturn: + // [88] return + rts +} + // func_rom_bank2_c +// __register(A) char func_rom_bank2_c(char a, char b) +func_rom_bank2_c: { + .const a = '0' + .const b = 7 + // [90] call func_ram_bank1_a + // [56] phi from func_rom_bank2_c to func_ram_bank1_a [phi:func_rom_bank2_c->func_ram_bank1_a] + func_ram_bank1_a_from_func_rom_bank2_c: + // [56] phi func_ram_bank1_a::b#3 = func_rom_bank2_c::b#0 [phi:func_rom_bank2_c->func_ram_bank1_a#0] -- vbuaa=vbuc1 lda #b - // [50] phi func_bank1_a::a#4 = func_bank2_c::a#0 [phi:func_bank2_c->func_bank1_a#1] -- call_far_cx16_ram_finalize + // [56] phi func_ram_bank1_a::a#3 = func_rom_bank2_c::a#0 [phi:func_rom_bank2_c->func_ram_bank1_a#1] -- call_far_cx16_ram_finalize ldx #a jsr $ff6e - .byte func_bank1_a + .byte func_ram_bank1_a .byte 1 - // [84] func_bank1_a::return#3 = func_bank1_a::return#0 + // [91] func_ram_bank1_a::return#3 = func_ram_bank1_a::return#0 jmp __b1 - // func_bank2_c::@1 + // func_rom_bank2_c::@1 __b1: - // [85] func_bank2_c::return#0 = func_bank1_a::return#3 + // [92] func_rom_bank2_c::return#0 = func_ram_bank1_a::return#3 jmp __breturn - // func_bank2_c::@return + // func_rom_bank2_c::@return __breturn: - // [86] return + // [93] return rts } - // func_bank2_d -// __register(A) char func_bank2_d(char a, char b) -func_bank2_d: { + // func_rom_bank2_d +// __register(A) char func_rom_bank2_d(char a, char b) +func_rom_bank2_d: { .const a = '0' .const b = 7 - // [88] call func_bank2_a - // [76] phi from func_bank2_d to func_bank2_a [phi:func_bank2_d->func_bank2_a] - func_bank2_a_from_func_bank2_d: - // [76] phi func_bank2_a::b#4 = func_bank2_d::b#0 [phi:func_bank2_d->func_bank2_a#0] -- vbuaa=vbuc1 + // [95] call func_rom_bank2_a + // [83] phi from func_rom_bank2_d to func_rom_bank2_a [phi:func_rom_bank2_d->func_rom_bank2_a] + func_rom_bank2_a_from_func_rom_bank2_d: + // [83] phi func_rom_bank2_a::b#3 = func_rom_bank2_d::b#0 [phi:func_rom_bank2_d->func_rom_bank2_a#0] -- vbuaa=vbuc1 lda #b - // [76] phi func_bank2_a::a#4 = func_bank2_d::a#0 [phi:func_bank2_d->func_bank2_a#1] -- vbuxx=vbuc1 + // [83] phi func_rom_bank2_a::a#3 = func_rom_bank2_d::a#0 [phi:func_rom_bank2_d->func_rom_bank2_a#1] -- vbuxx=vbuc1 ldx #a - jsr func_bank2_a - // [89] func_bank2_a::return#3 = func_bank2_a::return#1 + jsr func_rom_bank2_a + // [96] func_rom_bank2_a::return#3 = func_rom_bank2_a::return#1 jmp __b1 - // func_bank2_d::@1 + // func_rom_bank2_d::@1 __b1: - // [90] func_bank2_d::return#0 = func_bank2_a::return#3 + // [97] func_rom_bank2_d::return#0 = func_rom_bank2_a::return#3 jmp __breturn - // func_bank2_d::@return + // func_rom_bank2_d::@return __breturn: - // [91] return + // [98] return rts } - // func_bank2_e -// __register(A) char func_bank2_e(char a, char b) -func_bank2_e: { - .const a = '0' - .const b = 7 - // [93] call func_bank2_b - // [79] phi from func_bank2_e to func_bank2_b [phi:func_bank2_e->func_bank2_b] - func_bank2_b_from_func_bank2_e: - // [79] phi func_bank2_b::b#2 = func_bank2_e::b#0 [phi:func_bank2_e->func_bank2_b#0] -- vbuaa=vbuc1 - lda #b - // [79] phi func_bank2_b::a#2 = func_bank2_e::a#0 [phi:func_bank2_e->func_bank2_b#1] -- vbuxx=vbuc1 - ldx #a - jsr func_bank2_b - // [94] func_bank2_b::return#0 = func_bank2_b::return#1 + // func_rom_bank2_e +// __register(A) char func_rom_bank2_e(__register(A) char a, __register(X) char b) +func_rom_bank2_e: { + // [100] func_rom_bank2_b::a#1 = func_rom_bank2_e::a#2 + // [101] func_rom_bank2_b::b#1 = func_rom_bank2_e::b#2 + // [102] call func_rom_bank2_b + // [86] phi from func_rom_bank2_e to func_rom_bank2_b [phi:func_rom_bank2_e->func_rom_bank2_b] + func_rom_bank2_b_from_func_rom_bank2_e: + // [86] phi func_rom_bank2_b::b#3 = func_rom_bank2_b::b#1 [phi:func_rom_bank2_e->func_rom_bank2_b#0] -- register_copy + // [86] phi func_rom_bank2_b::a#3 = func_rom_bank2_b::a#1 [phi:func_rom_bank2_e->func_rom_bank2_b#1] -- register_copy + jsr func_rom_bank2_b + // [103] func_rom_bank2_b::return#3 = func_rom_bank2_b::return#1 jmp __b1 - // func_bank2_e::@1 + // func_rom_bank2_e::@1 __b1: - // [95] func_bank2_e::return#0 = func_bank2_b::return#0 + // [104] func_rom_bank2_e::return#0 = func_rom_bank2_b::return#3 jmp __breturn - // func_bank2_e::@return + // func_rom_bank2_e::@return __breturn: - // [96] return + // [105] return rts } - // func_bank2_f -// __register(A) char func_bank2_f(char a, char b) -func_bank2_f: { + // func_rom_bank2_f +// __register(A) char func_rom_bank2_f(char a, char b) +func_rom_bank2_f: { .const a = '0' .const b = 7 - // [98] call func_bank1_b - // [53] phi from func_bank2_f to func_bank1_b [phi:func_bank2_f->func_bank1_b] - func_bank1_b_from_func_bank2_f: - // [53] phi func_bank1_b::b#2 = func_bank2_f::b#0 [phi:func_bank2_f->func_bank1_b#0] -- vbuaa=vbuc1 - lda #b - // [53] phi func_bank1_b::a#2 = func_bank2_f::a#0 [phi:func_bank2_f->func_bank1_b#1] -- vbuxx=vbuc1 - ldx #a - jsr func_bank1_b - // [99] func_bank1_b::return#0 = func_bank1_b::return#1 + // [107] call func_main_a + // [111] phi from func_rom_bank2_f to func_main_a [phi:func_rom_bank2_f->func_main_a] + func_main_a_from_func_rom_bank2_f: + // [111] phi func_main_a::b#3 = func_rom_bank2_f::b#0 [phi:func_rom_bank2_f->func_main_a#0] -- vbuxx=vbuc1 + ldx #b + // [111] phi func_main_a::a#3 = func_rom_bank2_f::a#0 [phi:func_rom_bank2_f->func_main_a#1] -- vbuaa=vbuc1 + lda #a + jsr func_main_a + // [108] func_main_a::return#1 = func_main_a::return#2 jmp __b1 - // func_bank2_f::@1 + // func_rom_bank2_f::@1 __b1: - // [100] func_bank2_f::return#0 = func_bank1_b::return#0 + // [109] func_rom_bank2_f::return#0 = func_main_a::return#1 jmp __breturn - // func_bank2_f::@return + // func_rom_bank2_f::@return __breturn: - // [101] return + // [110] return + rts +} +.segment Code + // func_main_a +// The sequent functions will be addressed in the default main memory location (segment Code). +// Allocated in main memory. +// __register(A) char func_main_a(__register(A) char a, __register(X) char b) +func_main_a: { + // [112] func_ram_bank1_e::a#0 = func_main_a::a#3 + // [113] func_ram_bank1_e::b#0 = func_main_a::b#3 + // [114] call func_ram_bank1_e + // [71] phi from func_main_a to func_ram_bank1_e [phi:func_main_a->func_ram_bank1_e] + func_ram_bank1_e_from_func_main_a: + // [71] phi func_ram_bank1_e::b#2 = func_ram_bank1_e::b#0 [phi:func_main_a->func_ram_bank1_e#0] -- register_copy + // [71] phi func_ram_bank1_e::a#2 = func_ram_bank1_e::a#0 [phi:func_main_a->func_ram_bank1_e#1] -- call_far_cx16_ram_finalize + jsr $ff6e + .byte func_ram_bank1_e + .byte 1 + // [115] func_ram_bank1_e::return#2 = func_ram_bank1_e::return#0 + jmp __b1 + // func_main_a::@1 + __b1: + // [116] func_main_a::return#2 = func_ram_bank1_e::return#2 + jmp __breturn + // func_main_a::@return + __breturn: + // [117] return + rts +} + // func_main_b +// Allocated in main memory. +// __register(A) char func_main_b(char a, char b) +func_main_b: { + .const a = '0' + .const b = 7 + // [119] call func_rom_bank2_e + // [99] phi from func_main_b to func_rom_bank2_e [phi:func_main_b->func_rom_bank2_e] + func_rom_bank2_e_from_func_main_b: + // [99] phi func_rom_bank2_e::b#2 = func_main_b::b#0 [phi:func_main_b->func_rom_bank2_e#0] -- vbuxx=vbuc1 + ldx #b + // [99] phi func_rom_bank2_e::a#2 = func_main_b::a#0 [phi:func_main_b->func_rom_bank2_e#1] -- call_far_cx16_rom_finalize + lda #a + jsr $ff6e + .byte func_rom_bank2_e + .byte 2 + // [120] func_rom_bank2_e::return#2 = func_rom_bank2_e::return#0 + jmp __b1 + // func_main_b::@1 + __b1: + // [121] func_main_b::return#0 = func_rom_bank2_e::return#2 + jmp __breturn + // func_main_b::@return + __breturn: + // [122] return rts } // File Data @@ -1933,6 +2280,8 @@ Removing instruction jmp __b9 Removing instruction jmp __b10 Removing instruction jmp __b11 Removing instruction jmp __b12 +Removing instruction jmp __b13 +Removing instruction jmp __b14 Removing instruction jmp __breturn Removing instruction jmp __breturn Removing instruction jmp __breturn @@ -1954,6 +2303,10 @@ Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction __breturn: Removing instruction __breturn: @@ -1963,165 +2316,199 @@ Removing instruction __breturn: Removing instruction __breturn: Removing instruction __breturn: Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __breturn: Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction func_bank1_a_from_main: +Removing instruction func_ram_bank1_a_from_main: Removing instruction __b1: -Removing instruction func_bank1_b_from___b1: +Removing instruction func_ram_bank1_b_from___b1: Removing instruction __b2: -Removing instruction func_bank1_c_from___b2: +Removing instruction func_ram_bank1_c_from___b2: Removing instruction __b3: -Removing instruction func_bank1_d_from___b3: +Removing instruction func_ram_bank1_d_from___b3: Removing instruction __b4: -Removing instruction func_bank1_e_from___b4: +Removing instruction func_ram_bank1_e_from___b4: Removing instruction __b5: -Removing instruction func_bank1_f_from___b5: +Removing instruction func_ram_bank1_f_from___b5: Removing instruction __b6: -Removing instruction func_bank2_a_from___b6: +Removing instruction func_rom_bank2_a_from___b6: Removing instruction __b7: -Removing instruction func_bank2_b_from___b7: +Removing instruction func_rom_bank2_b_from___b7: Removing instruction __b8: -Removing instruction func_bank2_c_from___b8: +Removing instruction func_rom_bank2_c_from___b8: Removing instruction __b9: -Removing instruction func_bank2_d_from___b9: +Removing instruction func_rom_bank2_d_from___b9: Removing instruction __b10: -Removing instruction func_bank2_e_from___b10: +Removing instruction func_rom_bank2_e_from___b10: Removing instruction __b11: -Removing instruction func_bank2_f_from___b11: +Removing instruction func_rom_bank2_f_from___b11: Removing instruction __b12: +Removing instruction func_main_a_from___b12: +Removing instruction __b13: +Removing instruction func_main_b_from___b13: +Removing instruction __b14: Removing instruction __breturn: Removing instruction __breturn: Removing instruction __breturn: -Removing instruction func_bank1_a_from_func_bank1_c: +Removing instruction func_ram_bank1_a_from_func_ram_bank1_c: Removing instruction __b1: -Removing instruction func_bank2_a_from_func_bank1_d: +Removing instruction func_rom_bank2_a_from_func_ram_bank1_d: Removing instruction __b1: -Removing instruction func_bank1_a_from_func_bank1_e: +Removing instruction func_rom_bank2_b_from_func_ram_bank1_e: Removing instruction __b1: -Removing instruction func_bank2_a_from_func_bank1_f: +Removing instruction func_main_a_from_func_ram_bank1_f: Removing instruction __b1: Removing instruction __breturn: Removing instruction __breturn: -Removing instruction func_bank1_a_from_func_bank2_c: +Removing instruction func_ram_bank1_a_from_func_rom_bank2_c: Removing instruction __b1: -Removing instruction func_bank2_a_from_func_bank2_d: +Removing instruction func_rom_bank2_a_from_func_rom_bank2_d: Removing instruction __b1: -Removing instruction func_bank2_b_from_func_bank2_e: +Removing instruction func_rom_bank2_b_from_func_rom_bank2_e: Removing instruction __b1: -Removing instruction func_bank1_b_from_func_bank2_f: +Removing instruction func_main_a_from_func_rom_bank2_f: +Removing instruction __b1: +Removing instruction func_ram_bank1_e_from_func_main_a: +Removing instruction __b1: +Removing instruction func_rom_bank2_e_from_func_main_b: Removing instruction __b1: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 -__bank(bank) char func_bank1_a(char a , char b) -char func_bank1_a::a -char func_bank1_a::a#4 // reg byte x 101.0 -char func_bank1_a::b -char func_bank1_a::b#4 // reg byte a 101.0 -char func_bank1_a::return -char func_bank1_a::return#0 // reg byte a 22.66666666666666 -char func_bank1_a::return#10 // reg byte a 4.0 -char func_bank1_a::return#2 // reg byte a 22.0 -char func_bank1_a::return#3 // reg byte a 22.0 -char func_bank1_a::return#4 // reg byte a 22.0 -char func_bank1_b(char a , char b) -char func_bank1_b::a -char func_bank1_b::a#2 // reg byte x 101.0 -char func_bank1_b::b -char func_bank1_b::b#2 // reg byte a 101.0 -char func_bank1_b::return -char func_bank1_b::return#0 // reg byte a 22.0 -char func_bank1_b::return#1 // reg byte a 28.5 -char func_bank1_b::return#3 // reg byte a 4.0 -__bank(bank) char func_bank1_c(char a , char b) -char func_bank1_c::a -__constant char func_bank1_c::a#0 = '0' // a -char func_bank1_c::b -__constant char func_bank1_c::b#0 = 7 // b -char func_bank1_c::return -char func_bank1_c::return#0 // reg byte a 4.333333333333333 -char func_bank1_c::return#2 // reg byte a 4.0 -__bank(bank) char func_bank1_d(char a , char b) -char func_bank1_d::a -__constant char func_bank1_d::a#0 = '0' // a -char func_bank1_d::b -__constant char func_bank1_d::b#0 = 7 // b -char func_bank1_d::return -char func_bank1_d::return#0 // reg byte a 4.333333333333333 -char func_bank1_d::return#2 // reg byte a 4.0 -char func_bank1_e(char a , char b) -char func_bank1_e::a -__constant char func_bank1_e::a#0 = '0' // a -char func_bank1_e::b -__constant char func_bank1_e::b#0 = 7 // b -char func_bank1_e::return -char func_bank1_e::return#0 // reg byte a 4.333333333333333 -char func_bank1_e::return#2 // reg byte a 4.0 -char func_bank1_f(char a , char b) -char func_bank1_f::a -__constant char func_bank1_f::a#0 = '0' // a -char func_bank1_f::b -__constant char func_bank1_f::b#0 = 7 // b -char func_bank1_f::return -char func_bank1_f::return#0 // reg byte a 4.333333333333333 -char func_bank1_f::return#2 // reg byte a 4.0 -__bank(bank) char func_bank2_a(char a , char b) -char func_bank2_a::a -char func_bank2_a::a#4 // reg byte x 101.0 -char func_bank2_a::b -char func_bank2_a::b#4 // reg byte a 101.0 -char func_bank2_a::return -char func_bank2_a::return#0 // reg byte a 22.0 -char func_bank2_a::return#1 // reg byte a 22.666666666666664 -char func_bank2_a::return#10 // reg byte a 4.0 -char func_bank2_a::return#3 // reg byte a 22.0 -char func_bank2_a::return#4 // reg byte a 22.0 -char func_bank2_b(char a , char b) -char func_bank2_b::a -char func_bank2_b::a#2 // reg byte x 101.0 -char func_bank2_b::b -char func_bank2_b::b#2 // reg byte a 101.0 -char func_bank2_b::return -char func_bank2_b::return#0 // reg byte a 22.0 -char func_bank2_b::return#1 // reg byte a 28.5 -char func_bank2_b::return#3 // reg byte a 4.0 -__bank(bank) char func_bank2_c(char a , char b) -char func_bank2_c::a -__constant char func_bank2_c::a#0 = '0' // a -char func_bank2_c::b -__constant char func_bank2_c::b#0 = 7 // b -char func_bank2_c::return -char func_bank2_c::return#0 // reg byte a 4.333333333333333 -char func_bank2_c::return#2 // reg byte a 4.0 -__bank(bank) char func_bank2_d(char a , char b) -char func_bank2_d::a -__constant char func_bank2_d::a#0 = '0' // a -char func_bank2_d::b -__constant char func_bank2_d::b#0 = 7 // b -char func_bank2_d::return -char func_bank2_d::return#0 // reg byte a 4.333333333333333 -char func_bank2_d::return#2 // reg byte a 4.0 -__bank(bank) char func_bank2_e(char a , char b) -char func_bank2_e::a -__constant char func_bank2_e::a#0 = '0' // a -char func_bank2_e::b -__constant char func_bank2_e::b#0 = 7 // b -char func_bank2_e::return -char func_bank2_e::return#0 // reg byte a 4.333333333333333 -char func_bank2_e::return#2 // reg byte a 4.0 -__bank(bank) char func_bank2_f(char a , char b) -char func_bank2_f::a -__constant char func_bank2_f::a#0 = '0' // a -char func_bank2_f::b -__constant char func_bank2_f::b#0 = 7 // b -char func_bank2_f::return -char func_bank2_f::return#0 // reg byte a 4.333333333333333 -char func_bank2_f::return#2 // reg byte a 4.0 +char func_main_a(char a , char b) +char func_main_a::a +char func_main_a::a#3 // reg byte a 101.0 +char func_main_a::b +char func_main_a::b#3 // reg byte x 50.5 +char func_main_a::return +char func_main_a::return#0 // reg byte a 22.0 +char func_main_a::return#1 // reg byte a 22.0 +char func_main_a::return#2 // reg byte a 25.0 +char func_main_a::return#4 // reg byte a 4.0 +char func_main_b(char a , char b) +char func_main_b::a +__constant char func_main_b::a#0 = '0' // a +char func_main_b::b +__constant char func_main_b::b#0 = 7 // b +char func_main_b::return +char func_main_b::return#0 // reg byte a 4.333333333333333 +char func_main_b::return#2 // reg byte a 4.0 +__bank(bank) char func_ram_bank1_a(char a , char b) +char func_ram_bank1_a::a +char func_ram_bank1_a::a#3 // reg byte x 101.0 +char func_ram_bank1_a::b +char func_ram_bank1_a::b#3 // reg byte a 101.0 +char func_ram_bank1_a::return +char func_ram_bank1_a::return#0 // reg byte a 24.999999999999996 +char func_ram_bank1_a::return#2 // reg byte a 22.0 +char func_ram_bank1_a::return#3 // reg byte a 22.0 +char func_ram_bank1_a::return#4 // reg byte a 4.0 +char func_ram_bank1_b(char a , char b) +char func_ram_bank1_b::a +__constant char func_ram_bank1_b::a#0 = '0' // a +char func_ram_bank1_b::b +__constant char func_ram_bank1_b::b#0 = 7 // b +char func_ram_bank1_b::return +__constant char func_ram_bank1_b::return#0 = func_ram_bank1_b::a#0+func_ram_bank1_b::b#0 // return +__bank(bank) char func_ram_bank1_c(char a , char b) +char func_ram_bank1_c::a +__constant char func_ram_bank1_c::a#0 = '0' // a +char func_ram_bank1_c::b +__constant char func_ram_bank1_c::b#0 = 7 // b +char func_ram_bank1_c::return +char func_ram_bank1_c::return#0 // reg byte a 4.333333333333333 +char func_ram_bank1_c::return#2 // reg byte a 4.0 +__bank(bank) char func_ram_bank1_d(char a , char b) +char func_ram_bank1_d::a +__constant char func_ram_bank1_d::a#0 = '0' // a +char func_ram_bank1_d::b +__constant char func_ram_bank1_d::b#0 = 7 // b +char func_ram_bank1_d::return +char func_ram_bank1_d::return#0 // reg byte a 4.333333333333333 +char func_ram_bank1_d::return#2 // reg byte a 4.0 +__bank(bank) char func_ram_bank1_e(char a , char b) +char func_ram_bank1_e::a +char func_ram_bank1_e::a#0 // reg byte a 101.0 +char func_ram_bank1_e::a#2 // reg byte a 1102.0 +char func_ram_bank1_e::b +char func_ram_bank1_e::b#0 // reg byte x 202.0 +char func_ram_bank1_e::b#2 // reg byte x 551.0 +char func_ram_bank1_e::return +char func_ram_bank1_e::return#0 // reg byte a 276.0 +char func_ram_bank1_e::return#2 // reg byte a 202.0 +char func_ram_bank1_e::return#3 // reg byte a 4.0 +__bank(bank) char func_ram_bank1_f(char a , char b) +char func_ram_bank1_f::a +__constant char func_ram_bank1_f::a#0 = '0' // a +char func_ram_bank1_f::b +__constant char func_ram_bank1_f::b#0 = 7 // b +char func_ram_bank1_f::return +char func_ram_bank1_f::return#0 // reg byte a 4.333333333333333 +char func_ram_bank1_f::return#2 // reg byte a 4.0 +__bank(bank) char func_rom_bank2_a(char a , char b) +char func_rom_bank2_a::a +char func_rom_bank2_a::a#3 // reg byte x 101.0 +char func_rom_bank2_a::b +char func_rom_bank2_a::b#3 // reg byte a 101.0 +char func_rom_bank2_a::return +char func_rom_bank2_a::return#0 // reg byte a 22.0 +char func_rom_bank2_a::return#1 // reg byte a 25.0 +char func_rom_bank2_a::return#3 // reg byte a 22.0 +char func_rom_bank2_a::return#4 // reg byte a 4.0 +char func_rom_bank2_b(char a , char b) +char func_rom_bank2_b::a +char func_rom_bank2_b::a#0 // reg byte a 1001.0 +char func_rom_bank2_b::a#1 // reg byte a 101.0 +char func_rom_bank2_b::a#3 // reg byte a 11103.0 +char func_rom_bank2_b::b +char func_rom_bank2_b::b#0 // reg byte x 2002.0 +char func_rom_bank2_b::b#1 // reg byte x 202.0 +char func_rom_bank2_b::b#3 // reg byte x 11103.0 +char func_rom_bank2_b::return +char func_rom_bank2_b::return#0 // reg byte a 2002.0 +char func_rom_bank2_b::return#1 // reg byte a 2221.0 +char func_rom_bank2_b::return#3 // reg byte a 202.0 +char func_rom_bank2_b::return#4 // reg byte a 4.0 +__bank(bank) char func_rom_bank2_c(char a , char b) +char func_rom_bank2_c::a +__constant char func_rom_bank2_c::a#0 = '0' // a +char func_rom_bank2_c::b +__constant char func_rom_bank2_c::b#0 = 7 // b +char func_rom_bank2_c::return +char func_rom_bank2_c::return#0 // reg byte a 4.333333333333333 +char func_rom_bank2_c::return#2 // reg byte a 4.0 +__bank(bank) char func_rom_bank2_d(char a , char b) +char func_rom_bank2_d::a +__constant char func_rom_bank2_d::a#0 = '0' // a +char func_rom_bank2_d::b +__constant char func_rom_bank2_d::b#0 = 7 // b +char func_rom_bank2_d::return +char func_rom_bank2_d::return#0 // reg byte a 4.333333333333333 +char func_rom_bank2_d::return#2 // reg byte a 4.0 +__bank(bank) char func_rom_bank2_e(char a , char b) +char func_rom_bank2_e::a +char func_rom_bank2_e::a#2 // reg byte a 101.0 +char func_rom_bank2_e::b +char func_rom_bank2_e::b#2 // reg byte x 50.5 +char func_rom_bank2_e::return +char func_rom_bank2_e::return#0 // reg byte a 28.5 +char func_rom_bank2_e::return#2 // reg byte a 22.0 +char func_rom_bank2_e::return#3 // reg byte a 4.0 +__bank(bank) char func_rom_bank2_f(char a , char b) +char func_rom_bank2_f::a +__constant char func_rom_bank2_f::a#0 = '0' // a +char func_rom_bank2_f::b +__constant char func_rom_bank2_f::b#0 = 7 // b +char func_rom_bank2_f::return +char func_rom_bank2_f::return#0 // reg byte a 4.333333333333333 +char func_rom_bank2_f::return#2 // reg byte a 4.0 void main() char main::$0 // reg byte a 4.0 -char main::$1 // reg byte a 4.0 char main::$10 // reg byte a 4.0 char main::$11 // reg byte a 4.0 +char main::$12 // reg byte a 4.0 +char main::$13 // reg byte a 4.0 char main::$2 // reg byte a 4.0 char main::$3 // reg byte a 4.0 char main::$4 // reg byte a 4.0 @@ -2131,511 +2518,603 @@ char main::$7 // reg byte a 4.0 char main::$8 // reg byte a 4.0 char main::$9 // reg byte a 4.0 -reg byte x [ func_bank1_a::a#4 ] -reg byte a [ func_bank1_a::b#4 ] -reg byte x [ func_bank1_b::a#2 ] -reg byte a [ func_bank1_b::b#2 ] -reg byte x [ func_bank2_a::a#4 ] -reg byte a [ func_bank2_a::b#4 ] -reg byte x [ func_bank2_b::a#2 ] -reg byte a [ func_bank2_b::b#2 ] -reg byte a [ func_bank1_a::return#10 ] +reg byte x [ func_ram_bank1_a::a#3 ] +reg byte a [ func_ram_bank1_a::b#3 ] +reg byte a [ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] +reg byte x [ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] +reg byte x [ func_rom_bank2_a::a#3 ] +reg byte a [ func_rom_bank2_a::b#3 ] +reg byte a [ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] +reg byte x [ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] +reg byte a [ func_rom_bank2_e::a#2 ] +reg byte x [ func_rom_bank2_e::b#2 ] +reg byte a [ func_main_a::a#3 ] +reg byte x [ func_main_a::b#3 ] +reg byte a [ func_ram_bank1_a::return#4 ] reg byte a [ main::$0 ] -reg byte a [ func_bank1_b::return#3 ] -reg byte a [ main::$1 ] -reg byte a [ func_bank1_c::return#2 ] +reg byte a [ func_ram_bank1_c::return#2 ] reg byte a [ main::$2 ] -reg byte a [ func_bank1_d::return#2 ] +reg byte a [ func_ram_bank1_d::return#2 ] reg byte a [ main::$3 ] -reg byte a [ func_bank1_e::return#2 ] +reg byte a [ func_ram_bank1_e::return#3 ] reg byte a [ main::$4 ] -reg byte a [ func_bank1_f::return#2 ] +reg byte a [ func_ram_bank1_f::return#2 ] reg byte a [ main::$5 ] -reg byte a [ func_bank2_a::return#10 ] +reg byte a [ func_rom_bank2_a::return#4 ] reg byte a [ main::$6 ] -reg byte a [ func_bank2_b::return#3 ] +reg byte a [ func_rom_bank2_b::return#4 ] reg byte a [ main::$7 ] -reg byte a [ func_bank2_c::return#2 ] +reg byte a [ func_rom_bank2_c::return#2 ] reg byte a [ main::$8 ] -reg byte a [ func_bank2_d::return#2 ] +reg byte a [ func_rom_bank2_d::return#2 ] reg byte a [ main::$9 ] -reg byte a [ func_bank2_e::return#2 ] +reg byte a [ func_rom_bank2_e::return#3 ] reg byte a [ main::$10 ] -reg byte a [ func_bank2_f::return#2 ] +reg byte a [ func_rom_bank2_f::return#2 ] reg byte a [ main::$11 ] -reg byte a [ func_bank1_a::return#0 ] -reg byte a [ func_bank1_b::return#1 ] -reg byte a [ func_bank1_a::return#2 ] -reg byte a [ func_bank1_c::return#0 ] -reg byte a [ func_bank2_a::return#0 ] -reg byte a [ func_bank1_d::return#0 ] -reg byte a [ func_bank1_a::return#4 ] -reg byte a [ func_bank1_e::return#0 ] -reg byte a [ func_bank2_a::return#4 ] -reg byte a [ func_bank1_f::return#0 ] -reg byte a [ func_bank2_a::return#1 ] -reg byte a [ func_bank2_b::return#1 ] -reg byte a [ func_bank1_a::return#3 ] -reg byte a [ func_bank2_c::return#0 ] -reg byte a [ func_bank2_a::return#3 ] -reg byte a [ func_bank2_d::return#0 ] -reg byte a [ func_bank2_b::return#0 ] -reg byte a [ func_bank2_e::return#0 ] -reg byte a [ func_bank1_b::return#0 ] -reg byte a [ func_bank2_f::return#0 ] +reg byte a [ func_main_a::return#4 ] +reg byte a [ main::$12 ] +reg byte a [ func_main_b::return#2 ] +reg byte a [ main::$13 ] +reg byte a [ func_ram_bank1_a::return#0 ] +reg byte a [ func_ram_bank1_a::return#2 ] +reg byte a [ func_ram_bank1_c::return#0 ] +reg byte a [ func_rom_bank2_a::return#0 ] +reg byte a [ func_ram_bank1_d::return#0 ] +reg byte a [ func_rom_bank2_b::return#0 ] +reg byte a [ func_ram_bank1_e::return#0 ] +reg byte a [ func_main_a::return#0 ] +reg byte a [ func_ram_bank1_f::return#0 ] +reg byte a [ func_rom_bank2_a::return#1 ] +reg byte a [ func_rom_bank2_b::return#1 ] +reg byte a [ func_ram_bank1_a::return#3 ] +reg byte a [ func_rom_bank2_c::return#0 ] +reg byte a [ func_rom_bank2_a::return#3 ] +reg byte a [ func_rom_bank2_d::return#0 ] +reg byte a [ func_rom_bank2_b::return#3 ] +reg byte a [ func_rom_bank2_e::return#0 ] +reg byte a [ func_main_a::return#1 ] +reg byte a [ func_rom_bank2_f::return#0 ] +reg byte a [ func_ram_bank1_e::return#2 ] +reg byte a [ func_main_a::return#2 ] +reg byte a [ func_rom_bank2_e::return#2 ] +reg byte a [ func_main_b::return#0 ] FINAL ASSEMBLER -Score: 326 +Score: 368 // File Comments -// Test a far call procedure with a calling convention phi +// The linker specification of the different segments. // Upstart .cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] + .segmentdef Program [segments="Basic, Code, Data, Bank1, Bank2"] +.segmentdef Basic [start=$0801]a .segmentdef Code [start=$80d] .segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] +.segmentdef Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef Bank2 [start=$C000, min=$C000, max=$FFFF, align=$100] // Global Constants & labels + // The target computer platform is the Commander X16, + // which implements banking in ram between 0xA0000 and 0xBFFF, + // and in rom between 0xC000 and 0xFFFF. .label SCREEN = $400 .segment Code // main +// Practically this means that the main() function is placed in main memory ... main: { - // func_bank1_a('0', 7) - // [1] call func_bank1_a - // [50] phi from main to func_bank1_a [phi:main->func_bank1_a] - // [50] phi func_bank1_a::b#4 = 7 [phi:main->func_bank1_a#0] -- vbuaa=vbuc1 + // func_ram_bank1_a('0', 7) + // [1] call func_ram_bank1_a + // [56] phi from main to func_ram_bank1_a [phi:main->func_ram_bank1_a] + // [56] phi func_ram_bank1_a::b#3 = 7 [phi:main->func_ram_bank1_a#0] -- vbuaa=vbuc1 lda #7 - // [50] phi func_bank1_a::a#4 = '0' [phi:main->func_bank1_a#1] -- call_far_cx16_ram_finalize + // [56] phi func_ram_bank1_a::a#3 = '0' [phi:main->func_ram_bank1_a#1] -- call_far_cx16_ram_finalize ldx #'0' jsr $ff6e - .byte func_bank1_a + .byte func_ram_bank1_a .byte 1 - // func_bank1_a('0', 7) - // [2] func_bank1_a::return#10 = func_bank1_a::return#0 + // func_ram_bank1_a('0', 7) + // [2] func_ram_bank1_a::return#4 = func_ram_bank1_a::return#0 // main::@1 - // [3] main::$0 = func_bank1_a::return#10 - // SCREEN[0] = func_bank1_a('0', 7) + // [3] main::$0 = func_ram_bank1_a::return#4 + // SCREEN[0] = func_ram_bank1_a('0', 7) // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - // far call sta SCREEN - // func_bank1_b('0', 7) - // [5] call func_bank1_b - // [53] phi from main::@1 to func_bank1_b [phi:main::@1->func_bank1_b] - // [53] phi func_bank1_b::b#2 = 7 [phi:main::@1->func_bank1_b#0] -- vbuaa=vbuc1 - lda #7 - // [53] phi func_bank1_b::a#2 = '0' [phi:main::@1->func_bank1_b#1] -- vbuxx=vbuc1 - ldx #'0' - jsr func_bank1_b - // func_bank1_b('0', 7) - // [6] func_bank1_b::return#3 = func_bank1_b::return#1 + // func_ram_bank1_b('0', 7) + // [5] call func_ram_bank1_b + // [59] phi from main::@1 to func_ram_bank1_b [phi:main::@1->func_ram_bank1_b] + jsr func_ram_bank1_b // main::@2 - // [7] main::$1 = func_bank1_b::return#3 - // SCREEN[0] = func_bank1_b('0', 7) - // [8] *SCREEN = main::$1 -- _deref_pbuc1=vbuaa - // far call + // SCREEN[0] = func_ram_bank1_b('0', 7) + // [6] *SCREEN = func_ram_bank1_b::return#0 -- _deref_pbuc1=vbuc2 + // Banked call to ram in bank 1 from main memory. + lda #func_ram_bank1_b.return sta SCREEN - // func_bank1_c('0', 7) - // [9] call func_bank1_c - // [56] phi from main::@2 to func_bank1_c [phi:main::@2->func_bank1_c] -- call_far_cx16_ram_finalize + // func_ram_bank1_c('0', 7) + // [7] call func_ram_bank1_c + // [61] phi from main::@2 to func_ram_bank1_c [phi:main::@2->func_ram_bank1_c] -- call_far_cx16_ram_finalize jsr $ff6e - .byte func_bank1_c + .byte func_ram_bank1_c .byte 1 - // func_bank1_c('0', 7) - // [10] func_bank1_c::return#2 = func_bank1_c::return#0 + // func_ram_bank1_c('0', 7) + // [8] func_ram_bank1_c::return#2 = func_ram_bank1_c::return#0 // main::@3 - // [11] main::$2 = func_bank1_c::return#2 - // SCREEN[0] = func_bank1_c('0', 7) - // [12] *SCREEN = main::$2 -- _deref_pbuc1=vbuaa - // far call + // [9] main::$2 = func_ram_bank1_c::return#2 + // SCREEN[0] = func_ram_bank1_c('0', 7) + // [10] *SCREEN = main::$2 -- _deref_pbuc1=vbuaa + // Banked call to ram in bank 1 from main memory. sta SCREEN - // func_bank1_d('0', 7) - // [13] call func_bank1_d - // [61] phi from main::@3 to func_bank1_d [phi:main::@3->func_bank1_d] -- call_far_cx16_ram_finalize + // func_ram_bank1_d('0', 7) + // [11] call func_ram_bank1_d + // [66] phi from main::@3 to func_ram_bank1_d [phi:main::@3->func_ram_bank1_d] -- call_far_cx16_ram_finalize jsr $ff6e - .byte func_bank1_d + .byte func_ram_bank1_d .byte 1 - // func_bank1_d('0', 7) - // [14] func_bank1_d::return#2 = func_bank1_d::return#0 + // func_ram_bank1_d('0', 7) + // [12] func_ram_bank1_d::return#2 = func_ram_bank1_d::return#0 // main::@4 - // [15] main::$3 = func_bank1_d::return#2 - // SCREEN[0] = func_bank1_d('0', 7) - // [16] *SCREEN = main::$3 -- _deref_pbuc1=vbuaa - // far call + // [13] main::$3 = func_ram_bank1_d::return#2 + // SCREEN[0] = func_ram_bank1_d('0', 7) + // [14] *SCREEN = main::$3 -- _deref_pbuc1=vbuaa + // Banked call to ram in bank 1 from main memory. sta SCREEN - // func_bank1_e('0', 7) - // [17] call func_bank1_e - // [66] phi from main::@4 to func_bank1_e [phi:main::@4->func_bank1_e] - jsr func_bank1_e - // func_bank1_e('0', 7) - // [18] func_bank1_e::return#2 = func_bank1_e::return#0 + // func_ram_bank1_e('0', 7) + // [15] call func_ram_bank1_e + // [71] phi from main::@4 to func_ram_bank1_e [phi:main::@4->func_ram_bank1_e] + // [71] phi func_ram_bank1_e::b#2 = 7 [phi:main::@4->func_ram_bank1_e#0] -- vbuxx=vbuc1 + ldx #7 + // [71] phi func_ram_bank1_e::a#2 = '0' [phi:main::@4->func_ram_bank1_e#1] -- call_far_cx16_ram_finalize + lda #'0' + jsr $ff6e + .byte func_ram_bank1_e + .byte 1 + // func_ram_bank1_e('0', 7) + // [16] func_ram_bank1_e::return#3 = func_ram_bank1_e::return#0 // main::@5 - // [19] main::$4 = func_bank1_e::return#2 - // SCREEN[0] = func_bank1_e('0', 7) - // [20] *SCREEN = main::$4 -- _deref_pbuc1=vbuaa - // near call + // [17] main::$4 = func_ram_bank1_e::return#3 + // SCREEN[0] = func_ram_bank1_e('0', 7) + // [18] *SCREEN = main::$4 -- _deref_pbuc1=vbuaa + // Banked call to ram in bank 1 from main memory. sta SCREEN - // func_bank1_f('0', 7) - // [21] call func_bank1_f - // [71] phi from main::@5 to func_bank1_f [phi:main::@5->func_bank1_f] - jsr func_bank1_f - // func_bank1_f('0', 7) - // [22] func_bank1_f::return#2 = func_bank1_f::return#0 + // func_ram_bank1_f('0', 7) + // [19] call func_ram_bank1_f + // [78] phi from main::@5 to func_ram_bank1_f [phi:main::@5->func_ram_bank1_f] -- call_far_cx16_ram_finalize + jsr $ff6e + .byte func_ram_bank1_f + .byte 1 + // func_ram_bank1_f('0', 7) + // [20] func_ram_bank1_f::return#2 = func_ram_bank1_f::return#0 // main::@6 - // [23] main::$5 = func_bank1_f::return#2 - // SCREEN[0] = func_bank1_f('0', 7) - // [24] *SCREEN = main::$5 -- _deref_pbuc1=vbuaa - // near call + // [21] main::$5 = func_ram_bank1_f::return#2 + // SCREEN[0] = func_ram_bank1_f('0', 7) + // [22] *SCREEN = main::$5 -- _deref_pbuc1=vbuaa + // Banked call to ram in bank 1 from main memory. sta SCREEN - // func_bank2_a('0', 7) - // [25] call func_bank2_a - // [76] phi from main::@6 to func_bank2_a [phi:main::@6->func_bank2_a] - // [76] phi func_bank2_a::b#4 = 7 [phi:main::@6->func_bank2_a#0] -- vbuaa=vbuc1 + // func_rom_bank2_a('0', 7) + // [23] call func_rom_bank2_a + // [83] phi from main::@6 to func_rom_bank2_a [phi:main::@6->func_rom_bank2_a] + // [83] phi func_rom_bank2_a::b#3 = 7 [phi:main::@6->func_rom_bank2_a#0] -- vbuaa=vbuc1 lda #7 - // [76] phi func_bank2_a::a#4 = '0' [phi:main::@6->func_bank2_a#1] -- call_far_cx16_ram_finalize + // [83] phi func_rom_bank2_a::a#3 = '0' [phi:main::@6->func_rom_bank2_a#1] -- call_far_cx16_rom_finalize ldx #'0' jsr $ff6e - .byte func_bank2_a + .byte func_rom_bank2_a .byte 2 - // func_bank2_a('0', 7) - // [26] func_bank2_a::return#10 = func_bank2_a::return#1 + // func_rom_bank2_a('0', 7) + // [24] func_rom_bank2_a::return#4 = func_rom_bank2_a::return#1 // main::@7 - // [27] main::$6 = func_bank2_a::return#10 - // SCREEN[0] = func_bank2_a('0', 7) - // [28] *SCREEN = main::$6 -- _deref_pbuc1=vbuaa - // far call + // [25] main::$6 = func_rom_bank2_a::return#4 + // SCREEN[0] = func_rom_bank2_a('0', 7) + // [26] *SCREEN = main::$6 -- _deref_pbuc1=vbuaa + // Banked call to ram in bank 1 from main memory. sta SCREEN - // func_bank2_b('0', 7) - // [29] call func_bank2_b - // [79] phi from main::@7 to func_bank2_b [phi:main::@7->func_bank2_b] - // [79] phi func_bank2_b::b#2 = 7 [phi:main::@7->func_bank2_b#0] -- vbuaa=vbuc1 - lda #7 - // [79] phi func_bank2_b::a#2 = '0' [phi:main::@7->func_bank2_b#1] -- vbuxx=vbuc1 - ldx #'0' - jsr func_bank2_b - // func_bank2_b('0', 7) - // [30] func_bank2_b::return#3 = func_bank2_b::return#1 + // func_rom_bank2_b('0', 7) + // [27] call func_rom_bank2_b + // [86] phi from main::@7 to func_rom_bank2_b [phi:main::@7->func_rom_bank2_b] + // [86] phi func_rom_bank2_b::b#3 = 7 [phi:main::@7->func_rom_bank2_b#0] -- vbuxx=vbuc1 + ldx #7 + // [86] phi func_rom_bank2_b::a#3 = '0' [phi:main::@7->func_rom_bank2_b#1] -- vbuaa=vbuc1 + lda #'0' + jsr func_rom_bank2_b + // func_rom_bank2_b('0', 7) + // [28] func_rom_bank2_b::return#4 = func_rom_bank2_b::return#1 // main::@8 - // [31] main::$7 = func_bank2_b::return#3 - // SCREEN[0] = func_bank2_b('0', 7) - // [32] *SCREEN = main::$7 -- _deref_pbuc1=vbuaa - // far call + // [29] main::$7 = func_rom_bank2_b::return#4 + // SCREEN[0] = func_rom_bank2_b('0', 7) + // [30] *SCREEN = main::$7 -- _deref_pbuc1=vbuaa + // Banked call to rom in bank 2 from main memory. sta SCREEN - // func_bank2_c('0', 7) - // [33] call func_bank2_c - // [82] phi from main::@8 to func_bank2_c [phi:main::@8->func_bank2_c] -- call_far_cx16_ram_finalize + // func_rom_bank2_c('0', 7) + // [31] call func_rom_bank2_c + // [89] phi from main::@8 to func_rom_bank2_c [phi:main::@8->func_rom_bank2_c] -- call_far_cx16_rom_finalize jsr $ff6e - .byte func_bank2_c + .byte func_rom_bank2_c .byte 2 - // func_bank2_c('0', 7) - // [34] func_bank2_c::return#2 = func_bank2_c::return#0 + // func_rom_bank2_c('0', 7) + // [32] func_rom_bank2_c::return#2 = func_rom_bank2_c::return#0 // main::@9 - // [35] main::$8 = func_bank2_c::return#2 - // SCREEN[0] = func_bank2_c('0', 7) - // [36] *SCREEN = main::$8 -- _deref_pbuc1=vbuaa - // far call + // [33] main::$8 = func_rom_bank2_c::return#2 + // SCREEN[0] = func_rom_bank2_c('0', 7) + // [34] *SCREEN = main::$8 -- _deref_pbuc1=vbuaa + // Banked call to rom in bank 2 from main memory. sta SCREEN - // func_bank2_d('0', 7) - // [37] call func_bank2_d - // [87] phi from main::@9 to func_bank2_d [phi:main::@9->func_bank2_d] -- call_far_cx16_ram_finalize + // func_rom_bank2_d('0', 7) + // [35] call func_rom_bank2_d + // [94] phi from main::@9 to func_rom_bank2_d [phi:main::@9->func_rom_bank2_d] -- call_far_cx16_rom_finalize jsr $ff6e - .byte func_bank2_d + .byte func_rom_bank2_d .byte 2 - // func_bank2_d('0', 7) - // [38] func_bank2_d::return#2 = func_bank2_d::return#0 + // func_rom_bank2_d('0', 7) + // [36] func_rom_bank2_d::return#2 = func_rom_bank2_d::return#0 // main::@10 - // [39] main::$9 = func_bank2_d::return#2 - // SCREEN[0] = func_bank2_d('0', 7) - // [40] *SCREEN = main::$9 -- _deref_pbuc1=vbuaa - // far call + // [37] main::$9 = func_rom_bank2_d::return#2 + // SCREEN[0] = func_rom_bank2_d('0', 7) + // [38] *SCREEN = main::$9 -- _deref_pbuc1=vbuaa + // Banked call to rom in bank 2 from main memory. sta SCREEN - // func_bank2_e('0', 7) - // [41] call func_bank2_e - // [92] phi from main::@10 to func_bank2_e [phi:main::@10->func_bank2_e] -- call_far_cx16_ram_finalize + // func_rom_bank2_e('0', 7) + // [39] call func_rom_bank2_e + // [99] phi from main::@10 to func_rom_bank2_e [phi:main::@10->func_rom_bank2_e] + // [99] phi func_rom_bank2_e::b#2 = 7 [phi:main::@10->func_rom_bank2_e#0] -- vbuxx=vbuc1 + ldx #7 + // [99] phi func_rom_bank2_e::a#2 = '0' [phi:main::@10->func_rom_bank2_e#1] -- call_far_cx16_rom_finalize + lda #'0' jsr $ff6e - .byte func_bank2_e + .byte func_rom_bank2_e .byte 2 - // func_bank2_e('0', 7) - // [42] func_bank2_e::return#2 = func_bank2_e::return#0 + // func_rom_bank2_e('0', 7) + // [40] func_rom_bank2_e::return#3 = func_rom_bank2_e::return#0 // main::@11 - // [43] main::$10 = func_bank2_e::return#2 - // SCREEN[0] = func_bank2_e('0', 7) - // [44] *SCREEN = main::$10 -- _deref_pbuc1=vbuaa - // far call + // [41] main::$10 = func_rom_bank2_e::return#3 + // SCREEN[0] = func_rom_bank2_e('0', 7) + // [42] *SCREEN = main::$10 -- _deref_pbuc1=vbuaa + // Banked call to rom in bank 2 from main memory. sta SCREEN - // func_bank2_f('0', 7) - // [45] call func_bank2_f - // [97] phi from main::@11 to func_bank2_f [phi:main::@11->func_bank2_f] -- call_far_cx16_ram_finalize + // func_rom_bank2_f('0', 7) + // [43] call func_rom_bank2_f + // [106] phi from main::@11 to func_rom_bank2_f [phi:main::@11->func_rom_bank2_f] -- call_far_cx16_rom_finalize jsr $ff6e - .byte func_bank2_f + .byte func_rom_bank2_f .byte 2 - // func_bank2_f('0', 7) - // [46] func_bank2_f::return#2 = func_bank2_f::return#0 + // func_rom_bank2_f('0', 7) + // [44] func_rom_bank2_f::return#2 = func_rom_bank2_f::return#0 // main::@12 - // [47] main::$11 = func_bank2_f::return#2 - // SCREEN[0] = func_bank2_f('0', 7) - // [48] *SCREEN = main::$11 -- _deref_pbuc1=vbuaa - // far call + // [45] main::$11 = func_rom_bank2_f::return#2 + // SCREEN[0] = func_rom_bank2_f('0', 7) + // [46] *SCREEN = main::$11 -- _deref_pbuc1=vbuaa + // banked call to rom in bank 2 from main memory. + sta SCREEN + // func_main_a('0', 7) + // [47] call func_main_a + // [111] phi from main::@12 to func_main_a [phi:main::@12->func_main_a] + // [111] phi func_main_a::b#3 = 7 [phi:main::@12->func_main_a#0] -- vbuxx=vbuc1 + ldx #7 + // [111] phi func_main_a::a#3 = '0' [phi:main::@12->func_main_a#1] -- vbuaa=vbuc1 + lda #'0' + jsr func_main_a + // func_main_a('0', 7) + // [48] func_main_a::return#4 = func_main_a::return#2 + // main::@13 + // [49] main::$12 = func_main_a::return#4 + // SCREEN[0] = func_main_a('0', 7) + // [50] *SCREEN = main::$12 -- _deref_pbuc1=vbuaa + // banked call to rom in bank 2 from main memory. + sta SCREEN + // func_main_b('0', 7) + // [51] call func_main_b + // [118] phi from main::@13 to func_main_b [phi:main::@13->func_main_b] + jsr func_main_b + // func_main_b('0', 7) + // [52] func_main_b::return#2 = func_main_b::return#0 + // main::@14 + // [53] main::$13 = func_main_b::return#2 + // SCREEN[0] = func_main_b('0', 7) + // [54] *SCREEN = main::$13 -- _deref_pbuc1=vbuaa + // Near call in main memory from main memory. sta SCREEN // main::@return // } - // [49] return - rts -} -.segment stage - // func_bank1_a -// __register(A) char func_bank1_a(__register(X) char a, __register(A) char b) -func_bank1_a: { - // a+b - // [51] func_bank1_a::return#0 = func_bank1_a::a#4 + func_bank1_a::b#4 -- vbuaa=vbuxx_plus_vbuaa - stx.z $ff - clc - adc.z $ff - // func_bank1_a::@return - // } - // [52] return - rts -} -.segment platform - // func_bank1_b -// __register(A) char func_bank1_b(__register(X) char a, __register(A) char b) -func_bank1_b: { - // a+b - // [54] func_bank1_b::return#1 = func_bank1_b::a#2 + func_bank1_b::b#2 -- vbuaa=vbuxx_plus_vbuaa - stx.z $ff - clc - adc.z $ff - // func_bank1_b::@return - // } // [55] return rts } -.segment stage - // func_bank1_c -// __register(A) char func_bank1_c(char a, char b) -func_bank1_c: { +.segment Bank1 + // func_ram_bank1_a +// Functional code +// __register(A) char func_ram_bank1_a(__register(X) char a, __register(A) char b) +func_ram_bank1_a: { + // a + b + // [57] func_ram_bank1_a::return#0 = func_ram_bank1_a::a#3 + func_ram_bank1_a::b#3 -- vbuaa=vbuxx_plus_vbuaa + stx.z $ff + clc + adc.z $ff + // func_ram_bank1_a::@return + // } + // [58] return + rts +} +.segment Bank2 + // func_ram_bank1_b +// The sequent functions will consider no banking calculations anymore. +// The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram. +// char func_ram_bank1_b(char a, char b) +func_ram_bank1_b: { .const a = '0' .const b = 7 - // func_bank1_a(a,b) - // [57] call func_bank1_a - // [50] phi from func_bank1_c to func_bank1_a [phi:func_bank1_c->func_bank1_a] - // [50] phi func_bank1_a::b#4 = func_bank1_c::b#0 [phi:func_bank1_c->func_bank1_a#0] -- vbuaa=vbuc1 - lda #b - // [50] phi func_bank1_a::a#4 = func_bank1_c::a#0 [phi:func_bank1_c->func_bank1_a#1] -- vbuxx=vbuc1 - ldx #a - jsr func_bank1_a - // func_bank1_a(a,b) - // [58] func_bank1_a::return#2 = func_bank1_a::return#0 - // func_bank1_c::@1 - // [59] func_bank1_c::return#0 = func_bank1_a::return#2 - // func_bank1_c::@return - // } + .label return = a+b + // func_ram_bank1_b::@return // [60] return rts } - // func_bank1_d -// __register(A) char func_bank1_d(char a, char b) -func_bank1_d: { +.segment Bank1 + // func_ram_bank1_c +// __register(A) char func_ram_bank1_c(char a, char b) +func_ram_bank1_c: { .const a = '0' .const b = 7 - // func_bank2_a(a,b) - // [62] call func_bank2_a - // [76] phi from func_bank1_d to func_bank2_a [phi:func_bank1_d->func_bank2_a] - // [76] phi func_bank2_a::b#4 = func_bank1_d::b#0 [phi:func_bank1_d->func_bank2_a#0] -- vbuaa=vbuc1 + // func_ram_bank1_a(a, b) + // [62] call func_ram_bank1_a + // [56] phi from func_ram_bank1_c to func_ram_bank1_a [phi:func_ram_bank1_c->func_ram_bank1_a] + // [56] phi func_ram_bank1_a::b#3 = func_ram_bank1_c::b#0 [phi:func_ram_bank1_c->func_ram_bank1_a#0] -- vbuaa=vbuc1 lda #b - // [76] phi func_bank2_a::a#4 = func_bank1_d::a#0 [phi:func_bank1_d->func_bank2_a#1] -- call_far_cx16_ram_finalize + // [56] phi func_ram_bank1_a::a#3 = func_ram_bank1_c::a#0 [phi:func_ram_bank1_c->func_ram_bank1_a#1] -- vbuxx=vbuc1 ldx #a - jsr $ff6e - .byte func_bank2_a - .byte 2 - // func_bank2_a(a,b) - // [63] func_bank2_a::return#0 = func_bank2_a::return#1 - // func_bank1_d::@1 - // [64] func_bank1_d::return#0 = func_bank2_a::return#0 - // func_bank1_d::@return + jsr func_ram_bank1_a + // func_ram_bank1_a(a, b) + // [63] func_ram_bank1_a::return#2 = func_ram_bank1_a::return#0 + // func_ram_bank1_c::@1 + // [64] func_ram_bank1_c::return#0 = func_ram_bank1_a::return#2 + // func_ram_bank1_c::@return // } // [65] return rts } -.segment platform - // func_bank1_e -// __register(A) char func_bank1_e(char a, char b) -func_bank1_e: { + // func_ram_bank1_d +// __register(A) char func_ram_bank1_d(char a, char b) +func_ram_bank1_d: { .const a = '0' .const b = 7 - // func_bank1_a(a,b) - // [67] call func_bank1_a - // [50] phi from func_bank1_e to func_bank1_a [phi:func_bank1_e->func_bank1_a] - // [50] phi func_bank1_a::b#4 = func_bank1_e::b#0 [phi:func_bank1_e->func_bank1_a#0] -- vbuaa=vbuc1 + // func_rom_bank2_a(a, b) + // [67] call func_rom_bank2_a + // [83] phi from func_ram_bank1_d to func_rom_bank2_a [phi:func_ram_bank1_d->func_rom_bank2_a] + // [83] phi func_rom_bank2_a::b#3 = func_ram_bank1_d::b#0 [phi:func_ram_bank1_d->func_rom_bank2_a#0] -- vbuaa=vbuc1 lda #b - // [50] phi func_bank1_a::a#4 = func_bank1_e::a#0 [phi:func_bank1_e->func_bank1_a#1] -- call_far_cx16_ram_finalize + // [83] phi func_rom_bank2_a::a#3 = func_ram_bank1_d::a#0 [phi:func_ram_bank1_d->func_rom_bank2_a#1] -- call_far_cx16_rom_finalize ldx #a jsr $ff6e - .byte func_bank1_a - .byte 1 - // func_bank1_a(a,b) - // [68] func_bank1_a::return#4 = func_bank1_a::return#0 - // func_bank1_e::@1 - // [69] func_bank1_e::return#0 = func_bank1_a::return#4 - // func_bank1_e::@return + .byte func_rom_bank2_a + .byte 2 + // func_rom_bank2_a(a, b) + // [68] func_rom_bank2_a::return#0 = func_rom_bank2_a::return#1 + // func_ram_bank1_d::@1 + // [69] func_ram_bank1_d::return#0 = func_rom_bank2_a::return#0 + // func_ram_bank1_d::@return // } // [70] return rts } - // func_bank1_f -// __register(A) char func_bank1_f(char a, char b) -func_bank1_f: { - .const a = '0' - .const b = 7 - // func_bank2_a(a,b) - // [72] call func_bank2_a - // [76] phi from func_bank1_f to func_bank2_a [phi:func_bank1_f->func_bank2_a] - // [76] phi func_bank2_a::b#4 = func_bank1_f::b#0 [phi:func_bank1_f->func_bank2_a#0] -- vbuaa=vbuc1 - lda #b - // [76] phi func_bank2_a::a#4 = func_bank1_f::a#0 [phi:func_bank1_f->func_bank2_a#1] -- call_far_cx16_ram_finalize - ldx #a - jsr $ff6e - .byte func_bank2_a - .byte 2 - // func_bank2_a(a,b) - // [73] func_bank2_a::return#4 = func_bank2_a::return#1 - // func_bank1_f::@1 - // [74] func_bank1_f::return#0 = func_bank2_a::return#4 - // func_bank1_f::@return + // func_ram_bank1_e +// __register(A) char func_ram_bank1_e(__register(A) char a, __register(X) char b) +func_ram_bank1_e: { + // func_rom_bank2_b(a, b) + // [72] func_rom_bank2_b::a#0 = func_ram_bank1_e::a#2 + // [73] func_rom_bank2_b::b#0 = func_ram_bank1_e::b#2 + // [74] call func_rom_bank2_b + // [86] phi from func_ram_bank1_e to func_rom_bank2_b [phi:func_ram_bank1_e->func_rom_bank2_b] + // [86] phi func_rom_bank2_b::b#3 = func_rom_bank2_b::b#0 [phi:func_ram_bank1_e->func_rom_bank2_b#0] -- register_copy + // [86] phi func_rom_bank2_b::a#3 = func_rom_bank2_b::a#0 [phi:func_ram_bank1_e->func_rom_bank2_b#1] -- register_copy + jsr func_rom_bank2_b + // func_rom_bank2_b(a, b) + // [75] func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 + // func_ram_bank1_e::@1 + // [76] func_ram_bank1_e::return#0 = func_rom_bank2_b::return#0 + // func_ram_bank1_e::@return // } - // [75] return + // [77] return rts } - // func_bank2_a -// __register(A) char func_bank2_a(__register(X) char a, __register(A) char b) -func_bank2_a: { - // a+b - // [77] func_bank2_a::return#1 = func_bank2_a::a#4 + func_bank2_a::b#4 -- vbuaa=vbuxx_plus_vbuaa + // func_ram_bank1_f +// __register(A) char func_ram_bank1_f(char a, char b) +func_ram_bank1_f: { + .const a = '0' + .const b = 7 + // func_main_a(a, b) + // [79] call func_main_a + // [111] phi from func_ram_bank1_f to func_main_a [phi:func_ram_bank1_f->func_main_a] + // [111] phi func_main_a::b#3 = func_ram_bank1_f::b#0 [phi:func_ram_bank1_f->func_main_a#0] -- vbuxx=vbuc1 + ldx #b + // [111] phi func_main_a::a#3 = func_ram_bank1_f::a#0 [phi:func_ram_bank1_f->func_main_a#1] -- vbuaa=vbuc1 + lda #a + jsr func_main_a + // func_main_a(a, b) + // [80] func_main_a::return#0 = func_main_a::return#2 + // func_ram_bank1_f::@1 + // [81] func_ram_bank1_f::return#0 = func_main_a::return#0 + // func_ram_bank1_f::@return + // } + // [82] return + rts +} +.segment Bank2 + // func_rom_bank2_a +// The sequent functions will be banked using call method rom in bank number 2. +// __register(A) char func_rom_bank2_a(__register(X) char a, __register(A) char b) +func_rom_bank2_a: { + // a + b + // [84] func_rom_bank2_a::return#1 = func_rom_bank2_a::a#3 + func_rom_bank2_a::b#3 -- vbuaa=vbuxx_plus_vbuaa stx.z $ff clc adc.z $ff - // func_bank2_a::@return + // func_rom_bank2_a::@return // } - // [78] return + // [85] return rts } - // func_bank2_b -// __register(A) char func_bank2_b(__register(X) char a, __register(A) char b) -func_bank2_b: { - // a+b - // [80] func_bank2_b::return#1 = func_bank2_b::a#2 + func_bank2_b::b#2 -- vbuaa=vbuxx_plus_vbuaa + // func_rom_bank2_b +// The __bank directive declares this function to be banked using call method rom in bank number 2 of banked rom. +// __register(A) char func_rom_bank2_b(__register(A) char a, __register(X) char b) +func_rom_bank2_b: { + // a + b + // [87] func_rom_bank2_b::return#1 = func_rom_bank2_b::a#3 + func_rom_bank2_b::b#3 -- vbuaa=vbuaa_plus_vbuxx stx.z $ff clc adc.z $ff - // func_bank2_b::@return + // func_rom_bank2_b::@return // } - // [81] return + // [88] return rts } - // func_bank2_c -// __register(A) char func_bank2_c(char a, char b) -func_bank2_c: { + // func_rom_bank2_c +// __register(A) char func_rom_bank2_c(char a, char b) +func_rom_bank2_c: { .const a = '0' .const b = 7 - // func_bank1_a(a,b) - // [83] call func_bank1_a - // [50] phi from func_bank2_c to func_bank1_a [phi:func_bank2_c->func_bank1_a] - // [50] phi func_bank1_a::b#4 = func_bank2_c::b#0 [phi:func_bank2_c->func_bank1_a#0] -- vbuaa=vbuc1 + // func_ram_bank1_a(a, b) + // [90] call func_ram_bank1_a + // [56] phi from func_rom_bank2_c to func_ram_bank1_a [phi:func_rom_bank2_c->func_ram_bank1_a] + // [56] phi func_ram_bank1_a::b#3 = func_rom_bank2_c::b#0 [phi:func_rom_bank2_c->func_ram_bank1_a#0] -- vbuaa=vbuc1 lda #b - // [50] phi func_bank1_a::a#4 = func_bank2_c::a#0 [phi:func_bank2_c->func_bank1_a#1] -- call_far_cx16_ram_finalize + // [56] phi func_ram_bank1_a::a#3 = func_rom_bank2_c::a#0 [phi:func_rom_bank2_c->func_ram_bank1_a#1] -- call_far_cx16_ram_finalize ldx #a jsr $ff6e - .byte func_bank1_a + .byte func_ram_bank1_a .byte 1 - // func_bank1_a(a,b) - // [84] func_bank1_a::return#3 = func_bank1_a::return#0 - // func_bank2_c::@1 - // [85] func_bank2_c::return#0 = func_bank1_a::return#3 - // func_bank2_c::@return + // func_ram_bank1_a(a, b) + // [91] func_ram_bank1_a::return#3 = func_ram_bank1_a::return#0 + // func_rom_bank2_c::@1 + // [92] func_rom_bank2_c::return#0 = func_ram_bank1_a::return#3 + // func_rom_bank2_c::@return // } - // [86] return + // [93] return rts } - // func_bank2_d -// __register(A) char func_bank2_d(char a, char b) -func_bank2_d: { + // func_rom_bank2_d +// __register(A) char func_rom_bank2_d(char a, char b) +func_rom_bank2_d: { .const a = '0' .const b = 7 - // func_bank2_a(a,b) - // [88] call func_bank2_a - // [76] phi from func_bank2_d to func_bank2_a [phi:func_bank2_d->func_bank2_a] - // [76] phi func_bank2_a::b#4 = func_bank2_d::b#0 [phi:func_bank2_d->func_bank2_a#0] -- vbuaa=vbuc1 + // func_rom_bank2_a(a, b) + // [95] call func_rom_bank2_a + // [83] phi from func_rom_bank2_d to func_rom_bank2_a [phi:func_rom_bank2_d->func_rom_bank2_a] + // [83] phi func_rom_bank2_a::b#3 = func_rom_bank2_d::b#0 [phi:func_rom_bank2_d->func_rom_bank2_a#0] -- vbuaa=vbuc1 lda #b - // [76] phi func_bank2_a::a#4 = func_bank2_d::a#0 [phi:func_bank2_d->func_bank2_a#1] -- vbuxx=vbuc1 + // [83] phi func_rom_bank2_a::a#3 = func_rom_bank2_d::a#0 [phi:func_rom_bank2_d->func_rom_bank2_a#1] -- vbuxx=vbuc1 ldx #a - jsr func_bank2_a - // func_bank2_a(a,b) - // [89] func_bank2_a::return#3 = func_bank2_a::return#1 - // func_bank2_d::@1 - // [90] func_bank2_d::return#0 = func_bank2_a::return#3 - // func_bank2_d::@return + jsr func_rom_bank2_a + // func_rom_bank2_a(a, b) + // [96] func_rom_bank2_a::return#3 = func_rom_bank2_a::return#1 + // func_rom_bank2_d::@1 + // [97] func_rom_bank2_d::return#0 = func_rom_bank2_a::return#3 + // func_rom_bank2_d::@return // } - // [91] return + // [98] return rts } - // func_bank2_e -// __register(A) char func_bank2_e(char a, char b) -func_bank2_e: { - .const a = '0' - .const b = 7 - // func_bank2_b(a,b) - // [93] call func_bank2_b - // [79] phi from func_bank2_e to func_bank2_b [phi:func_bank2_e->func_bank2_b] - // [79] phi func_bank2_b::b#2 = func_bank2_e::b#0 [phi:func_bank2_e->func_bank2_b#0] -- vbuaa=vbuc1 - lda #b - // [79] phi func_bank2_b::a#2 = func_bank2_e::a#0 [phi:func_bank2_e->func_bank2_b#1] -- vbuxx=vbuc1 - ldx #a - jsr func_bank2_b - // func_bank2_b(a,b) - // [94] func_bank2_b::return#0 = func_bank2_b::return#1 - // func_bank2_e::@1 - // [95] func_bank2_e::return#0 = func_bank2_b::return#0 - // func_bank2_e::@return + // func_rom_bank2_e +// __register(A) char func_rom_bank2_e(__register(A) char a, __register(X) char b) +func_rom_bank2_e: { + // func_rom_bank2_b(a, b) + // [100] func_rom_bank2_b::a#1 = func_rom_bank2_e::a#2 + // [101] func_rom_bank2_b::b#1 = func_rom_bank2_e::b#2 + // [102] call func_rom_bank2_b + // [86] phi from func_rom_bank2_e to func_rom_bank2_b [phi:func_rom_bank2_e->func_rom_bank2_b] + // [86] phi func_rom_bank2_b::b#3 = func_rom_bank2_b::b#1 [phi:func_rom_bank2_e->func_rom_bank2_b#0] -- register_copy + // [86] phi func_rom_bank2_b::a#3 = func_rom_bank2_b::a#1 [phi:func_rom_bank2_e->func_rom_bank2_b#1] -- register_copy + jsr func_rom_bank2_b + // func_rom_bank2_b(a, b) + // [103] func_rom_bank2_b::return#3 = func_rom_bank2_b::return#1 + // func_rom_bank2_e::@1 + // [104] func_rom_bank2_e::return#0 = func_rom_bank2_b::return#3 + // func_rom_bank2_e::@return // } - // [96] return + // [105] return rts } - // func_bank2_f -// __register(A) char func_bank2_f(char a, char b) -func_bank2_f: { + // func_rom_bank2_f +// __register(A) char func_rom_bank2_f(char a, char b) +func_rom_bank2_f: { .const a = '0' .const b = 7 - // func_bank1_b(a,b) - // [98] call func_bank1_b - // [53] phi from func_bank2_f to func_bank1_b [phi:func_bank2_f->func_bank1_b] - // [53] phi func_bank1_b::b#2 = func_bank2_f::b#0 [phi:func_bank2_f->func_bank1_b#0] -- vbuaa=vbuc1 - lda #b - // [53] phi func_bank1_b::a#2 = func_bank2_f::a#0 [phi:func_bank2_f->func_bank1_b#1] -- vbuxx=vbuc1 - ldx #a - jsr func_bank1_b - // func_bank1_b(a,b) - // [99] func_bank1_b::return#0 = func_bank1_b::return#1 - // func_bank2_f::@1 - // [100] func_bank2_f::return#0 = func_bank1_b::return#0 - // func_bank2_f::@return + // func_main_a(a, b) + // [107] call func_main_a + // [111] phi from func_rom_bank2_f to func_main_a [phi:func_rom_bank2_f->func_main_a] + // [111] phi func_main_a::b#3 = func_rom_bank2_f::b#0 [phi:func_rom_bank2_f->func_main_a#0] -- vbuxx=vbuc1 + ldx #b + // [111] phi func_main_a::a#3 = func_rom_bank2_f::a#0 [phi:func_rom_bank2_f->func_main_a#1] -- vbuaa=vbuc1 + lda #a + jsr func_main_a + // func_main_a(a, b) + // [108] func_main_a::return#1 = func_main_a::return#2 + // func_rom_bank2_f::@1 + // [109] func_rom_bank2_f::return#0 = func_main_a::return#1 + // func_rom_bank2_f::@return // } - // [101] return + // [110] return + rts +} +.segment Code + // func_main_a +// The sequent functions will be addressed in the default main memory location (segment Code). +// Allocated in main memory. +// __register(A) char func_main_a(__register(A) char a, __register(X) char b) +func_main_a: { + // func_ram_bank1_e(a, b) + // [112] func_ram_bank1_e::a#0 = func_main_a::a#3 + // [113] func_ram_bank1_e::b#0 = func_main_a::b#3 + // [114] call func_ram_bank1_e + // [71] phi from func_main_a to func_ram_bank1_e [phi:func_main_a->func_ram_bank1_e] + // [71] phi func_ram_bank1_e::b#2 = func_ram_bank1_e::b#0 [phi:func_main_a->func_ram_bank1_e#0] -- register_copy + // [71] phi func_ram_bank1_e::a#2 = func_ram_bank1_e::a#0 [phi:func_main_a->func_ram_bank1_e#1] -- call_far_cx16_ram_finalize + jsr $ff6e + .byte func_ram_bank1_e + .byte 1 + // func_ram_bank1_e(a, b) + // [115] func_ram_bank1_e::return#2 = func_ram_bank1_e::return#0 + // func_main_a::@1 + // [116] func_main_a::return#2 = func_ram_bank1_e::return#2 + // func_main_a::@return + // } + // [117] return + rts +} + // func_main_b +// Allocated in main memory. +// __register(A) char func_main_b(char a, char b) +func_main_b: { + .const a = '0' + .const b = 7 + // func_rom_bank2_e(a, b) + // [119] call func_rom_bank2_e + // [99] phi from func_main_b to func_rom_bank2_e [phi:func_main_b->func_rom_bank2_e] + // [99] phi func_rom_bank2_e::b#2 = func_main_b::b#0 [phi:func_main_b->func_rom_bank2_e#0] -- vbuxx=vbuc1 + ldx #b + // [99] phi func_rom_bank2_e::a#2 = func_main_b::a#0 [phi:func_main_b->func_rom_bank2_e#1] -- call_far_cx16_rom_finalize + lda #a + jsr $ff6e + .byte func_rom_bank2_e + .byte 2 + // func_rom_bank2_e(a, b) + // [120] func_rom_bank2_e::return#2 = func_rom_bank2_e::return#0 + // func_main_b::@1 + // [121] func_main_b::return#0 = func_rom_bank2_e::return#2 + // func_main_b::@return + // } + // [122] return rts } // File Data diff --git a/src/test/ref/procedure-callingconvention-phi-bank-5.sym b/src/test/ref/procedure-callingconvention-phi-bank-5.sym index c0905901f..4b1b61e72 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-5.sym +++ b/src/test/ref/procedure-callingconvention-phi-bank-5.sym @@ -1,113 +1,137 @@ __constant char * const SCREEN = (char *) 1024 -__bank(bank) char func_bank1_a(char a , char b) -char func_bank1_a::a -char func_bank1_a::a#4 // reg byte x 101.0 -char func_bank1_a::b -char func_bank1_a::b#4 // reg byte a 101.0 -char func_bank1_a::return -char func_bank1_a::return#0 // reg byte a 22.66666666666666 -char func_bank1_a::return#10 // reg byte a 4.0 -char func_bank1_a::return#2 // reg byte a 22.0 -char func_bank1_a::return#3 // reg byte a 22.0 -char func_bank1_a::return#4 // reg byte a 22.0 -char func_bank1_b(char a , char b) -char func_bank1_b::a -char func_bank1_b::a#2 // reg byte x 101.0 -char func_bank1_b::b -char func_bank1_b::b#2 // reg byte a 101.0 -char func_bank1_b::return -char func_bank1_b::return#0 // reg byte a 22.0 -char func_bank1_b::return#1 // reg byte a 28.5 -char func_bank1_b::return#3 // reg byte a 4.0 -__bank(bank) char func_bank1_c(char a , char b) -char func_bank1_c::a -__constant char func_bank1_c::a#0 = '0' // a -char func_bank1_c::b -__constant char func_bank1_c::b#0 = 7 // b -char func_bank1_c::return -char func_bank1_c::return#0 // reg byte a 4.333333333333333 -char func_bank1_c::return#2 // reg byte a 4.0 -__bank(bank) char func_bank1_d(char a , char b) -char func_bank1_d::a -__constant char func_bank1_d::a#0 = '0' // a -char func_bank1_d::b -__constant char func_bank1_d::b#0 = 7 // b -char func_bank1_d::return -char func_bank1_d::return#0 // reg byte a 4.333333333333333 -char func_bank1_d::return#2 // reg byte a 4.0 -char func_bank1_e(char a , char b) -char func_bank1_e::a -__constant char func_bank1_e::a#0 = '0' // a -char func_bank1_e::b -__constant char func_bank1_e::b#0 = 7 // b -char func_bank1_e::return -char func_bank1_e::return#0 // reg byte a 4.333333333333333 -char func_bank1_e::return#2 // reg byte a 4.0 -char func_bank1_f(char a , char b) -char func_bank1_f::a -__constant char func_bank1_f::a#0 = '0' // a -char func_bank1_f::b -__constant char func_bank1_f::b#0 = 7 // b -char func_bank1_f::return -char func_bank1_f::return#0 // reg byte a 4.333333333333333 -char func_bank1_f::return#2 // reg byte a 4.0 -__bank(bank) char func_bank2_a(char a , char b) -char func_bank2_a::a -char func_bank2_a::a#4 // reg byte x 101.0 -char func_bank2_a::b -char func_bank2_a::b#4 // reg byte a 101.0 -char func_bank2_a::return -char func_bank2_a::return#0 // reg byte a 22.0 -char func_bank2_a::return#1 // reg byte a 22.666666666666664 -char func_bank2_a::return#10 // reg byte a 4.0 -char func_bank2_a::return#3 // reg byte a 22.0 -char func_bank2_a::return#4 // reg byte a 22.0 -char func_bank2_b(char a , char b) -char func_bank2_b::a -char func_bank2_b::a#2 // reg byte x 101.0 -char func_bank2_b::b -char func_bank2_b::b#2 // reg byte a 101.0 -char func_bank2_b::return -char func_bank2_b::return#0 // reg byte a 22.0 -char func_bank2_b::return#1 // reg byte a 28.5 -char func_bank2_b::return#3 // reg byte a 4.0 -__bank(bank) char func_bank2_c(char a , char b) -char func_bank2_c::a -__constant char func_bank2_c::a#0 = '0' // a -char func_bank2_c::b -__constant char func_bank2_c::b#0 = 7 // b -char func_bank2_c::return -char func_bank2_c::return#0 // reg byte a 4.333333333333333 -char func_bank2_c::return#2 // reg byte a 4.0 -__bank(bank) char func_bank2_d(char a , char b) -char func_bank2_d::a -__constant char func_bank2_d::a#0 = '0' // a -char func_bank2_d::b -__constant char func_bank2_d::b#0 = 7 // b -char func_bank2_d::return -char func_bank2_d::return#0 // reg byte a 4.333333333333333 -char func_bank2_d::return#2 // reg byte a 4.0 -__bank(bank) char func_bank2_e(char a , char b) -char func_bank2_e::a -__constant char func_bank2_e::a#0 = '0' // a -char func_bank2_e::b -__constant char func_bank2_e::b#0 = 7 // b -char func_bank2_e::return -char func_bank2_e::return#0 // reg byte a 4.333333333333333 -char func_bank2_e::return#2 // reg byte a 4.0 -__bank(bank) char func_bank2_f(char a , char b) -char func_bank2_f::a -__constant char func_bank2_f::a#0 = '0' // a -char func_bank2_f::b -__constant char func_bank2_f::b#0 = 7 // b -char func_bank2_f::return -char func_bank2_f::return#0 // reg byte a 4.333333333333333 -char func_bank2_f::return#2 // reg byte a 4.0 +char func_main_a(char a , char b) +char func_main_a::a +char func_main_a::a#3 // reg byte a 101.0 +char func_main_a::b +char func_main_a::b#3 // reg byte x 50.5 +char func_main_a::return +char func_main_a::return#0 // reg byte a 22.0 +char func_main_a::return#1 // reg byte a 22.0 +char func_main_a::return#2 // reg byte a 25.0 +char func_main_a::return#4 // reg byte a 4.0 +char func_main_b(char a , char b) +char func_main_b::a +__constant char func_main_b::a#0 = '0' // a +char func_main_b::b +__constant char func_main_b::b#0 = 7 // b +char func_main_b::return +char func_main_b::return#0 // reg byte a 4.333333333333333 +char func_main_b::return#2 // reg byte a 4.0 +__bank(bank) char func_ram_bank1_a(char a , char b) +char func_ram_bank1_a::a +char func_ram_bank1_a::a#3 // reg byte x 101.0 +char func_ram_bank1_a::b +char func_ram_bank1_a::b#3 // reg byte a 101.0 +char func_ram_bank1_a::return +char func_ram_bank1_a::return#0 // reg byte a 24.999999999999996 +char func_ram_bank1_a::return#2 // reg byte a 22.0 +char func_ram_bank1_a::return#3 // reg byte a 22.0 +char func_ram_bank1_a::return#4 // reg byte a 4.0 +char func_ram_bank1_b(char a , char b) +char func_ram_bank1_b::a +__constant char func_ram_bank1_b::a#0 = '0' // a +char func_ram_bank1_b::b +__constant char func_ram_bank1_b::b#0 = 7 // b +char func_ram_bank1_b::return +__constant char func_ram_bank1_b::return#0 = func_ram_bank1_b::a#0+func_ram_bank1_b::b#0 // return +__bank(bank) char func_ram_bank1_c(char a , char b) +char func_ram_bank1_c::a +__constant char func_ram_bank1_c::a#0 = '0' // a +char func_ram_bank1_c::b +__constant char func_ram_bank1_c::b#0 = 7 // b +char func_ram_bank1_c::return +char func_ram_bank1_c::return#0 // reg byte a 4.333333333333333 +char func_ram_bank1_c::return#2 // reg byte a 4.0 +__bank(bank) char func_ram_bank1_d(char a , char b) +char func_ram_bank1_d::a +__constant char func_ram_bank1_d::a#0 = '0' // a +char func_ram_bank1_d::b +__constant char func_ram_bank1_d::b#0 = 7 // b +char func_ram_bank1_d::return +char func_ram_bank1_d::return#0 // reg byte a 4.333333333333333 +char func_ram_bank1_d::return#2 // reg byte a 4.0 +__bank(bank) char func_ram_bank1_e(char a , char b) +char func_ram_bank1_e::a +char func_ram_bank1_e::a#0 // reg byte a 101.0 +char func_ram_bank1_e::a#2 // reg byte a 1102.0 +char func_ram_bank1_e::b +char func_ram_bank1_e::b#0 // reg byte x 202.0 +char func_ram_bank1_e::b#2 // reg byte x 551.0 +char func_ram_bank1_e::return +char func_ram_bank1_e::return#0 // reg byte a 276.0 +char func_ram_bank1_e::return#2 // reg byte a 202.0 +char func_ram_bank1_e::return#3 // reg byte a 4.0 +__bank(bank) char func_ram_bank1_f(char a , char b) +char func_ram_bank1_f::a +__constant char func_ram_bank1_f::a#0 = '0' // a +char func_ram_bank1_f::b +__constant char func_ram_bank1_f::b#0 = 7 // b +char func_ram_bank1_f::return +char func_ram_bank1_f::return#0 // reg byte a 4.333333333333333 +char func_ram_bank1_f::return#2 // reg byte a 4.0 +__bank(bank) char func_rom_bank2_a(char a , char b) +char func_rom_bank2_a::a +char func_rom_bank2_a::a#3 // reg byte x 101.0 +char func_rom_bank2_a::b +char func_rom_bank2_a::b#3 // reg byte a 101.0 +char func_rom_bank2_a::return +char func_rom_bank2_a::return#0 // reg byte a 22.0 +char func_rom_bank2_a::return#1 // reg byte a 25.0 +char func_rom_bank2_a::return#3 // reg byte a 22.0 +char func_rom_bank2_a::return#4 // reg byte a 4.0 +char func_rom_bank2_b(char a , char b) +char func_rom_bank2_b::a +char func_rom_bank2_b::a#0 // reg byte a 1001.0 +char func_rom_bank2_b::a#1 // reg byte a 101.0 +char func_rom_bank2_b::a#3 // reg byte a 11103.0 +char func_rom_bank2_b::b +char func_rom_bank2_b::b#0 // reg byte x 2002.0 +char func_rom_bank2_b::b#1 // reg byte x 202.0 +char func_rom_bank2_b::b#3 // reg byte x 11103.0 +char func_rom_bank2_b::return +char func_rom_bank2_b::return#0 // reg byte a 2002.0 +char func_rom_bank2_b::return#1 // reg byte a 2221.0 +char func_rom_bank2_b::return#3 // reg byte a 202.0 +char func_rom_bank2_b::return#4 // reg byte a 4.0 +__bank(bank) char func_rom_bank2_c(char a , char b) +char func_rom_bank2_c::a +__constant char func_rom_bank2_c::a#0 = '0' // a +char func_rom_bank2_c::b +__constant char func_rom_bank2_c::b#0 = 7 // b +char func_rom_bank2_c::return +char func_rom_bank2_c::return#0 // reg byte a 4.333333333333333 +char func_rom_bank2_c::return#2 // reg byte a 4.0 +__bank(bank) char func_rom_bank2_d(char a , char b) +char func_rom_bank2_d::a +__constant char func_rom_bank2_d::a#0 = '0' // a +char func_rom_bank2_d::b +__constant char func_rom_bank2_d::b#0 = 7 // b +char func_rom_bank2_d::return +char func_rom_bank2_d::return#0 // reg byte a 4.333333333333333 +char func_rom_bank2_d::return#2 // reg byte a 4.0 +__bank(bank) char func_rom_bank2_e(char a , char b) +char func_rom_bank2_e::a +char func_rom_bank2_e::a#2 // reg byte a 101.0 +char func_rom_bank2_e::b +char func_rom_bank2_e::b#2 // reg byte x 50.5 +char func_rom_bank2_e::return +char func_rom_bank2_e::return#0 // reg byte a 28.5 +char func_rom_bank2_e::return#2 // reg byte a 22.0 +char func_rom_bank2_e::return#3 // reg byte a 4.0 +__bank(bank) char func_rom_bank2_f(char a , char b) +char func_rom_bank2_f::a +__constant char func_rom_bank2_f::a#0 = '0' // a +char func_rom_bank2_f::b +__constant char func_rom_bank2_f::b#0 = 7 // b +char func_rom_bank2_f::return +char func_rom_bank2_f::return#0 // reg byte a 4.333333333333333 +char func_rom_bank2_f::return#2 // reg byte a 4.0 void main() char main::$0 // reg byte a 4.0 -char main::$1 // reg byte a 4.0 char main::$10 // reg byte a 4.0 char main::$11 // reg byte a 4.0 +char main::$12 // reg byte a 4.0 +char main::$13 // reg byte a 4.0 char main::$2 // reg byte a 4.0 char main::$3 // reg byte a 4.0 char main::$4 // reg byte a 4.0 @@ -117,55 +141,64 @@ char main::$7 // reg byte a 4.0 char main::$8 // reg byte a 4.0 char main::$9 // reg byte a 4.0 -reg byte x [ func_bank1_a::a#4 ] -reg byte a [ func_bank1_a::b#4 ] -reg byte x [ func_bank1_b::a#2 ] -reg byte a [ func_bank1_b::b#2 ] -reg byte x [ func_bank2_a::a#4 ] -reg byte a [ func_bank2_a::b#4 ] -reg byte x [ func_bank2_b::a#2 ] -reg byte a [ func_bank2_b::b#2 ] -reg byte a [ func_bank1_a::return#10 ] +reg byte x [ func_ram_bank1_a::a#3 ] +reg byte a [ func_ram_bank1_a::b#3 ] +reg byte a [ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] +reg byte x [ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] +reg byte x [ func_rom_bank2_a::a#3 ] +reg byte a [ func_rom_bank2_a::b#3 ] +reg byte a [ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] +reg byte x [ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] +reg byte a [ func_rom_bank2_e::a#2 ] +reg byte x [ func_rom_bank2_e::b#2 ] +reg byte a [ func_main_a::a#3 ] +reg byte x [ func_main_a::b#3 ] +reg byte a [ func_ram_bank1_a::return#4 ] reg byte a [ main::$0 ] -reg byte a [ func_bank1_b::return#3 ] -reg byte a [ main::$1 ] -reg byte a [ func_bank1_c::return#2 ] +reg byte a [ func_ram_bank1_c::return#2 ] reg byte a [ main::$2 ] -reg byte a [ func_bank1_d::return#2 ] +reg byte a [ func_ram_bank1_d::return#2 ] reg byte a [ main::$3 ] -reg byte a [ func_bank1_e::return#2 ] +reg byte a [ func_ram_bank1_e::return#3 ] reg byte a [ main::$4 ] -reg byte a [ func_bank1_f::return#2 ] +reg byte a [ func_ram_bank1_f::return#2 ] reg byte a [ main::$5 ] -reg byte a [ func_bank2_a::return#10 ] +reg byte a [ func_rom_bank2_a::return#4 ] reg byte a [ main::$6 ] -reg byte a [ func_bank2_b::return#3 ] +reg byte a [ func_rom_bank2_b::return#4 ] reg byte a [ main::$7 ] -reg byte a [ func_bank2_c::return#2 ] +reg byte a [ func_rom_bank2_c::return#2 ] reg byte a [ main::$8 ] -reg byte a [ func_bank2_d::return#2 ] +reg byte a [ func_rom_bank2_d::return#2 ] reg byte a [ main::$9 ] -reg byte a [ func_bank2_e::return#2 ] +reg byte a [ func_rom_bank2_e::return#3 ] reg byte a [ main::$10 ] -reg byte a [ func_bank2_f::return#2 ] +reg byte a [ func_rom_bank2_f::return#2 ] reg byte a [ main::$11 ] -reg byte a [ func_bank1_a::return#0 ] -reg byte a [ func_bank1_b::return#1 ] -reg byte a [ func_bank1_a::return#2 ] -reg byte a [ func_bank1_c::return#0 ] -reg byte a [ func_bank2_a::return#0 ] -reg byte a [ func_bank1_d::return#0 ] -reg byte a [ func_bank1_a::return#4 ] -reg byte a [ func_bank1_e::return#0 ] -reg byte a [ func_bank2_a::return#4 ] -reg byte a [ func_bank1_f::return#0 ] -reg byte a [ func_bank2_a::return#1 ] -reg byte a [ func_bank2_b::return#1 ] -reg byte a [ func_bank1_a::return#3 ] -reg byte a [ func_bank2_c::return#0 ] -reg byte a [ func_bank2_a::return#3 ] -reg byte a [ func_bank2_d::return#0 ] -reg byte a [ func_bank2_b::return#0 ] -reg byte a [ func_bank2_e::return#0 ] -reg byte a [ func_bank1_b::return#0 ] -reg byte a [ func_bank2_f::return#0 ] +reg byte a [ func_main_a::return#4 ] +reg byte a [ main::$12 ] +reg byte a [ func_main_b::return#2 ] +reg byte a [ main::$13 ] +reg byte a [ func_ram_bank1_a::return#0 ] +reg byte a [ func_ram_bank1_a::return#2 ] +reg byte a [ func_ram_bank1_c::return#0 ] +reg byte a [ func_rom_bank2_a::return#0 ] +reg byte a [ func_ram_bank1_d::return#0 ] +reg byte a [ func_rom_bank2_b::return#0 ] +reg byte a [ func_ram_bank1_e::return#0 ] +reg byte a [ func_main_a::return#0 ] +reg byte a [ func_ram_bank1_f::return#0 ] +reg byte a [ func_rom_bank2_a::return#1 ] +reg byte a [ func_rom_bank2_b::return#1 ] +reg byte a [ func_ram_bank1_a::return#3 ] +reg byte a [ func_rom_bank2_c::return#0 ] +reg byte a [ func_rom_bank2_a::return#3 ] +reg byte a [ func_rom_bank2_d::return#0 ] +reg byte a [ func_rom_bank2_b::return#3 ] +reg byte a [ func_rom_bank2_e::return#0 ] +reg byte a [ func_main_a::return#1 ] +reg byte a [ func_rom_bank2_f::return#0 ] +reg byte a [ func_ram_bank1_e::return#2 ] +reg byte a [ func_main_a::return#2 ] +reg byte a [ func_rom_bank2_e::return#2 ] +reg byte a [ func_main_b::return#0 ] From a12a211d70fcfd0a4910f9d0651754c976a28b81 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Thu, 6 Apr 2023 08:44:31 +0200 Subject: [PATCH 33/66] #814 Upgrade to Java 17 plus upgraded libraries. --- pom.xml | 24 +++++++++---------- .../model/statements/StatementPhiBlock.java | 6 ++--- .../Pass0GenerateStatementSequence.java | 22 ++++++++--------- .../kickc/passes/Pass4RegistersFinalize.java | 2 +- 4 files changed, 26 insertions(+), 28 deletions(-) diff --git a/pom.xml b/pom.xml index 0146de442..e4abd072c 100644 --- a/pom.xml +++ b/pom.xml @@ -5,8 +5,8 @@ 4.0.0 - 8 - 8 + 17 + 17 UTF-8 -Xmx2048m @@ -47,24 +47,24 @@ org.antlr antlr4 - 4.9.3 + 4.12.0 provided org.antlr antlr4-runtime - 4.9.3 + 4.12.0 org.junit.jupiter junit-jupiter-engine - 5.8.2 + 5.9.2 test info.picocli picocli - 4.6.2 + 4.7.1 javax.json @@ -124,7 +124,7 @@ org.antlr antlr4-maven-plugin - 4.9.3 + 4.12.0 antlr @@ -152,7 +152,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.0.0-M5 + 3.0.0-M9 **/TestFragments.java @@ -167,7 +167,7 @@ org.jacoco jacoco-maven-plugin - 0.8.7 + 0.8.9 pre-unit-test @@ -187,7 +187,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.2.0 + 3.3.0 @@ -201,7 +201,7 @@ org.apache.felix maven-bundle-plugin - 3.5.0 + 5.1.8 bundle-manifest @@ -214,7 +214,7 @@ maven-assembly-plugin - 3.3.0 + 3.5.0 kickc posix diff --git a/src/main/java/dk/camelot64/kickc/model/statements/StatementPhiBlock.java b/src/main/java/dk/camelot64/kickc/model/statements/StatementPhiBlock.java index 11cdbb587..bb1d018ee 100644 --- a/src/main/java/dk/camelot64/kickc/model/statements/StatementPhiBlock.java +++ b/src/main/java/dk/camelot64/kickc/model/statements/StatementPhiBlock.java @@ -1,13 +1,11 @@ package dk.camelot64.kickc.model.statements; import dk.camelot64.kickc.model.Comment; -import dk.camelot64.kickc.model.values.LabelRef; import dk.camelot64.kickc.model.Program; +import dk.camelot64.kickc.model.values.LabelRef; import dk.camelot64.kickc.model.values.RValue; import dk.camelot64.kickc.model.values.VariableRef; -import org.antlr.v4.runtime.RuleContext; -import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -24,7 +22,7 @@ public class StatementPhiBlock extends StatementBase { private List phiVariables; public StatementPhiBlock(List comments) { - super(new StatementSource(RuleContext.EMPTY), comments); + super(StatementSource.NONE, comments); this.phiVariables = new ArrayList<>(); } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 3f570bead..c8604b28d 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -136,7 +136,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor()); program.getScope().add(initProc); program.createProcedureCompilation(initProc.getRef()); - program.getProcedureCompilation(initProc.getRef()).getStatementSequence().addStatement(new StatementProcedureBegin(initProc.getRef(), new StatementSource(RuleContext.EMPTY), Comment.NO_COMMENTS)); + program.getProcedureCompilation(initProc.getRef()).getStatementSequence().addStatement(new StatementProcedureBegin(initProc.getRef(), StatementSource.NONE, Comment.NO_COMMENTS)); } return initProc; } @@ -180,9 +180,9 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor(), new StatementSource(RuleContext.EMPTY), Comment.NO_COMMENTS)); + startSequence.addStatement(new StatementCall(null, SymbolRef.INIT_PROC_NAME, new ArrayList<>(), StatementSource.NONE, Comment.NO_COMMENTS)); final Procedure mainProc = program.getScope().getLocalProcedure(SymbolRef.MAIN_PROC_NAME); if(mainProc == null) throw new CompileError("Required main() not defined in program."); if(!SymbolType.VOID.equals(mainProc.getReturnType()) && !SymbolType.SWORD.equals(mainProc.getReturnType())) throw new CompileError("return of main() must be 'void' or of type 'int'.", mainProc.getDefinitionSource()); if(mainProc.getParameterNames().size() == 0) { - startSequence.addStatement(new StatementCall(null, SymbolRef.MAIN_PROC_NAME, new ArrayList<>(), new StatementSource(RuleContext.EMPTY), Comment.NO_COMMENTS)); + startSequence.addStatement(new StatementCall(null, SymbolRef.MAIN_PROC_NAME, new ArrayList<>(), StatementSource.NONE, Comment.NO_COMMENTS)); } else if(mainProc.getParameterNames().size() == 2) { final List parameters = mainProc.getParameters(); final Variable argc = parameters.get(0); @@ -214,15 +214,15 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor params = new ArrayList<>(); params.add(new ConstantInteger(0L, SymbolType.SWORD)); params.add(new ConstantPointer(0L, new SymbolTypePointer(SymbolType.BYTE))); - startSequence.addStatement(new StatementCall(null, SymbolRef.MAIN_PROC_NAME, params, new StatementSource(RuleContext.EMPTY), Comment.NO_COMMENTS)); + startSequence.addStatement(new StatementCall(null, SymbolRef.MAIN_PROC_NAME, params, StatementSource.NONE, Comment.NO_COMMENTS)); } else throw new CompileError("main() has wrong number of parameters. It must have zero or 2 parameters.", mainProc.getDefinitionSource()); final Label startReturnLabel = startProcedure.addLabel(SymbolRef.PROCEXIT_BLOCK_NAME); - startSequence.addStatement(new StatementLabel(startReturnLabel.getRef(), new StatementSource(RuleContext.EMPTY), Comment.NO_COMMENTS)); - startSequence.addStatement(new StatementReturn(null, new StatementSource(RuleContext.EMPTY), Comment.NO_COMMENTS)); - startSequence.addStatement(new StatementProcedureEnd(startProcedure.getRef(), new StatementSource(RuleContext.EMPTY), Comment.NO_COMMENTS)); + startSequence.addStatement(new StatementLabel(startReturnLabel.getRef(), StatementSource.NONE, Comment.NO_COMMENTS)); + startSequence.addStatement(new StatementReturn(null, StatementSource.NONE, Comment.NO_COMMENTS)); + startSequence.addStatement(new StatementProcedureEnd(startProcedure.getRef(), StatementSource.NONE, Comment.NO_COMMENTS)); } } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4RegistersFinalize.java b/src/main/java/dk/camelot64/kickc/passes/Pass4RegistersFinalize.java index 545eb23e9..59c1a1480 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4RegistersFinalize.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4RegistersFinalize.java @@ -212,7 +212,7 @@ public class Pass4RegistersFinalize extends Pass2Base { reserved = false; int candidateZp = currentZp; for(int i=0;i Date: Mon, 10 Apr 2023 07:19:35 +0200 Subject: [PATCH 34/66] Banking progress (cherry picked from commit b98f95facff43c7a0bb8f9e9f902b49cc10ef4fe) --- .gitignore | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 14e2eee75..0ae827ae2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /gen +**/.vscode/* */*.mon */*.vs */*.brk @@ -6,11 +7,12 @@ */*.sym */.tmpdirs */bin/ -/target/ +**/target/* */workspace.xml **/.DS_Store .project .tmpdirs **/.vscode/*.log /.idea/* -kickc.iml \ No newline at end of file +kickc.iml +/src/main/fragment/cache From a52b5dc4a949ba1ab22aa38bcd3bf08960879948 Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Mon, 10 Apr 2023 07:22:06 +0200 Subject: [PATCH 35/66] Banking progress (cherry picked from commit d0abf45529c34e14ed3ce43b9be3a140f78bc4a9) --- .../kickc/passes/Pass4CodeGeneration.java | 45 +++-- .../kc/examples/cx16/banking/cx16-banking-0.c | 55 ++++++ .../kc/examples/cx16/banking/cx16-banking-0.h | 20 +++ .../examples/cx16/banking/cx16-banking-0.ld | 12 ++ .../kc/examples/cx16/banking/cx16-banking-1.c | 168 ++++++++++++++++++ .../banking/cx16-banking-recursive-near.c | 38 ++++ 6 files changed, 321 insertions(+), 17 deletions(-) create mode 100644 src/test/kc/examples/cx16/banking/cx16-banking-0.c create mode 100644 src/test/kc/examples/cx16/banking/cx16-banking-0.h create mode 100644 src/test/kc/examples/cx16/banking/cx16-banking-0.ld create mode 100644 src/test/kc/examples/cx16/banking/cx16-banking-1.c create mode 100644 src/test/kc/examples/cx16/banking/cx16-banking-recursive-near.c diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 07fa70e5f..4e435ea98 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -925,28 +925,39 @@ public class Pass4CodeGeneration { } } else if (statement instanceof StatementCallExecute) { // TODO: This part seems never to be executed! Old code? - StatementCallExecute call = (StatementCallExecute) statement; - RValue procedureRVal = call.getProcedureRVal(); - // Generate ASM for a call - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); - if (!(procedureRVal instanceof ProcedureRef)) { - asm.getCurrentChunk().setClobberOverwrite(CpuClobber.CLOBBER_ALL); - } // StatementCallExecute call = (StatementCallExecute) statement; -// Procedure procedure = getScope().getProcedure(call.getProcedure()); -// Procedure procedureFrom = block.getProcedure(this.program); // We obtain from where the procedure is called, to validate the bank equality. // RValue procedureRVal = call.getProcedureRVal(); -// // Same as PHI -// if(procedure.isDeclaredBanked() && procedureFrom.getBank() != procedure.getBank()) { -// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallPrepare(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); -// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallExecute(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); -// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallFinalize(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); -// } else { -// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); -// } +// // Generate ASM for a call +// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); // if (!(procedureRVal instanceof ProcedureRef)) { // asm.getCurrentChunk().setClobberOverwrite(CpuClobber.CLOBBER_ALL); // } + StatementCallExecute call = (StatementCallExecute) statement; + ProcedureRef procedureRef = call.getProcedure(); + if(procedureRef != null) { + ProgramScope scope = getScope(); + Procedure procedure = scope.getProcedure(procedureRef); + Procedure procedureFrom = block.getProcedure(this.program); // We obtain from where the procedure is called, to validate the bank equality. + RValue procedureRVal = call.getProcedureRVal(); + // Same as PHI + if (procedure.isDeclaredBanked() && procedureFrom.getBank() != procedure.getBank()) { + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallPrepare(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallExecute(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.bankCallFinalize(procedure.getBankArea(), procedure.getBank(), call.getProcedure().getFullName(), program), program); + } else { + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); + } + if (!(procedureRVal instanceof ProcedureRef)) { + asm.getCurrentChunk().setClobberOverwrite(CpuClobber.CLOBBER_ALL); + } + } else { + RValue procedureRVal = call.getProcedureRVal(); + // Generate ASM for a call + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); + if (!(procedureRVal instanceof ProcedureRef)) { + asm.getCurrentChunk().setClobberOverwrite(CpuClobber.CLOBBER_ALL); + } + } } else if (statement instanceof StatementExprSideEffect) { AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.exprSideEffect((StatementExprSideEffect) statement, program), program); } else if (statement instanceof StatementReturn) { diff --git a/src/test/kc/examples/cx16/banking/cx16-banking-0.c b/src/test/kc/examples/cx16/banking/cx16-banking-0.c new file mode 100644 index 000000000..bab4d90a5 --- /dev/null +++ b/src/test/kc/examples/cx16/banking/cx16-banking-0.c @@ -0,0 +1,55 @@ +/** + * @file cx16-banking-1.c + * @author your name (you@domain.com) + * @brief This program demonstrates a simple example of a banked call. + * @version 0.1 + * @date 2023-04-05 + * + * @copyright Copyright (c) 2023 + * + */ + +// The linker specification of the different segments. +#pragma link("cx16-banking-1.ld") +#pragma var_model(mem) + +#include +#include +#include +#include + +#include "cx16-banking-0.h" + + +// The target computer platform is the Commander X16, +// which implements banking in ram between 0xA0000 and 0xBFFF, +// and in ram between 0xC000 and 0xFFFF. +#pragma target(cx16) + +char* const SCREEN = (char*)0x0400; + +#pragma code_seg(Bank1) // The sequent functions will be addressed specified by segment bank1 in the linker. +#pragma bank(ram, 1) // The sequent functions will be banked using call method ram in bank number 1. + +char __stackcall plus(char a, char b) { + return a+b; +} + +#pragma code_seg(Code) // The sequent functions will be addressed in the default main memory location (segment Code). +#pragma nobank(dummy) // The sequent functions will consider no banking calculations anymore. + +void load_bank(char bank, char *file) { + bank_set_bram(bank); + cbm_k_setnam(file); + cbm_k_setlfs(1,8,2); + cbm_k_load((char*)0xA000, 0); + cbm_k_close(1); +} + +void main(void) { + + load_bank(1, "BANK1.BIN"); + + SCREEN[0] = plus('0', 7); +} + diff --git a/src/test/kc/examples/cx16/banking/cx16-banking-0.h b/src/test/kc/examples/cx16/banking/cx16-banking-0.h new file mode 100644 index 000000000..a52f107cb --- /dev/null +++ b/src/test/kc/examples/cx16/banking/cx16-banking-0.h @@ -0,0 +1,20 @@ + + +// Function declarations +// char add_a(char a); +// char add_b(char a); +// char add_c(char a); +// char add_d(char a); +// char add_e(char a); +// char add_f(char a); + +// char add_m(char a); + +// char mul_a(char m); +// char mul_b(char m); +// char mul_c(char m); +// char mul_d(char m); +// char mul_e(char m); +// char mul_f(char m); + +// char mul_m(char m); diff --git a/src/test/kc/examples/cx16/banking/cx16-banking-0.ld b/src/test/kc/examples/cx16/banking/cx16-banking-0.ld new file mode 100644 index 000000000..c0dedea43 --- /dev/null +++ b/src/test/kc/examples/cx16/banking/cx16-banking-0.ld @@ -0,0 +1,12 @@ +.file [name="%O", type="prg", segments="Program"] +.file [name="BANK1.BIN", type="bin", segments="Bank1"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=%P] +.segmentdef Data [startAfter="Code"] +.segmentdef Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segment Basic +:BasicUpstart(%E) +.segment Code +.segment Data + diff --git a/src/test/kc/examples/cx16/banking/cx16-banking-1.c b/src/test/kc/examples/cx16/banking/cx16-banking-1.c new file mode 100644 index 000000000..b95afbcef --- /dev/null +++ b/src/test/kc/examples/cx16/banking/cx16-banking-1.c @@ -0,0 +1,168 @@ +/** + * @file cx16-banking-1.c + * @author your name (you@domain.com) + * @brief This program demonstrates a simple example of a banked call. + * @version 0.1 + * @date 2023-04-05 + * + * @copyright Copyright (c) 2023 + * + */ + +// The linker specification of the different segments. +#pragma link("cx16-banking-1.ld") +#pragma var_model(mem) + +#include +#include +#include +#include + +#include "cx16-banking-1.h" + + +// The target computer platform is the Commander X16, +// which implements banking in ram between 0xA0000 and 0xBFFF, +// and in ram between 0xC000 and 0xFFFF. +#pragma target(cx16) + + +#pragma code_seg(Bank1) // The sequent functions will be addressed specified by segment bank1 in the linker. +#pragma bank(ram, 1) // The sequent functions will be banked using call method ram in bank number 1. + + +// Functional code + +char add_a(char a) { + printf("add_a(%02x:%04p), ",bank_get_bram(), (void*)&add_a); + return a+1; +} + +char add_c(char a) { + printf("add_c(%02x:%04p), ",bank_get_bram(),(void*)&add_c); + return add_a(a)+1; // Non banked call in ram bank 1. +} + +char add_d(char a) { + printf("add_d(%02x:%04p), ",bank_get_bram(),(void*)&add_d); + return mul_a(a)+1; // Banked call fram ram bank 1 to ram bank 2. +} + +char add_e(char a) { + printf("add_e(%02x:%04p), ",bank_get_bram(),(void*)&add_e); + return mul_b(a)+1; // Banked call fram ram bank 1 to ram bank 2. +} + +char add_f(char a) { + printf("add_f(%02x:%04p), ",bank_get_bram(),(void*)&add_f); + return add_m(a)+1; // Non banked call fram ram bank 1 to main memory. +} + + +#pragma code_seg(Bank2) // The sequent functions will be addressed specified by segment bank2 in the linker. +#pragma bank(ram, 2) // The sequent functions will be banked using call method ram in bank number 2. + +char mul_a(char m) { + printf("mul_a(%02x:%04p), ",bank_get_bram(),(void*)&mul_a); + return m * 2; +} + +char mul_c(char m) { + printf("mul_c(%02x:%04p), ",bank_get_bram(),(void*)&mul_c); + return add_a(m)*2; // Banked call fram ram bank 2 to ram bank 1. +} + +char mul_d(char m) { + printf("mul_d(%02x:%04p), ",bank_get_bram(),(void*)&mul_d); + return mul_a(m)*2; // Non banked call in ram bank 2. +} + +char mul_e(char a) { + printf("mul_e(%02x:%04p), ",bank_get_bram(),(void*)&mul_e); + return mul_b(a)*2; // Non Banked call in ram bank 2. +} + +char mul_f(char m) { + printf("mul_f(%02x:%04p), ",bank_get_bram(),(void*)&mul_f); + return add_m(m)*2; // Non banked call fram ram bank 2 to main memory. +} + + +#pragma code_seg(Code) // The sequent functions will be addressed in the default main memory location (segment Code). +#pragma nobank(dummy) // The sequent functions will consider no banking calculations anymore. + +// The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram. +char __bank(ram, 1) add_b(char a) { + printf("add_b(%02x:%04p), ",bank_get_bram(),(void*)&add_b); + return a+1; +} + +// The __bank directive declares this function to be banked using call method ram in bank number 2 of banked ram. +char __bank(ram, 2) mul_b(char m) { + printf("mul_b(%02x:%04p), ",bank_get_bram(),(void*)&mul_b); + return m*2; +} + +// Allocated in main memory. +char add_m(char a) { + printf("add_m(%02x:%04p), ",bank_get_bram(),(void*)&add_m); + return add_e(a)+1; // Banked call to ram in bank 1 fram main memory. +} + +// Allocated in main memory. +char mul_m(char m) { + printf("mul_m(%02x:%04p), ",bank_get_bram(),(void*)&mul_m); + return mul_e(m)*2; // Banked call to ram in bank 2 fram main memory. +} + + +// Practically this means that the main() function is placed in main memory ... + +void load_bank(char bank, char *file) { + bank_set_bram(bank); + cbm_k_setnam(file); + cbm_k_setlfs(1,8,2); + cbm_k_load((char*)0xA000, 0); + cbm_k_close(1); +} + +void main(void) { + + clrscr(); + cx16_k_screen_set_charset(1,0); + + load_bank(1, "BANK1.BIN"); + load_bank(2, "BANK2.BIN"); + + bank_set_bram(0); + + asm{.byte $db} + __export char result = add_a(1); + printf("result = %u\n", result); // Banked call to ram in bank 1 fram main memory. + // asm{.byte $db} + // printf("result = %u\n", add_b(1)); // Banked call to ram in bank 1 fram main memory. + // asm{.byte $db} + // printf("result = %u\n", add_c(1)); // Banked call to ram in bank 1 fram main memory. + // asm{.byte $db} + // printf("result = %u\n", add_d(1)); // Banked call to ram in bank 1 fram main memory. + // asm{.byte $db} + // printf("result = %u\n", add_e(1)); // Banked call to ram in bank 1 fram main memory. + // asm{.byte $db} + // printf("result = %u\n", add_f(1)); // Banked call to ram in bank 1 fram main memory. + // asm{.byte $db} + // printf("result = %u\n", mul_a(1)); // Banked call to ram in bank 2 fram main memory. + // asm{.byte $db} + // printf("result = %u\n", mul_b(1)); // Banked call to ram in bank 2 fram main memory. + // asm{.byte $db} + // printf("result = %u\n", mul_c(1)); // Banked call to ram in bank 2 fram main memory. + // asm{.byte $db} + // printf("result = %u\n", mul_d(1)); // Banked call to ram in bank 2 fram main memory. + // asm{.byte $db} + // printf("result = %u\n", mul_e(1)); // banked call to ram in bank 2 fram main memory. + // asm{.byte $db} + // printf("result = %u\n", mul_f(1)); // banked call to ram in bank 2 fram main memory. + // asm{.byte $db} + // printf("result = %u\n", add_m(1)); // Near call in main memory fram main memory. + // asm{.byte $db} + // printf("result = %u\n", mul_m(1)); // Near call in main memory fram main memory. + } diff --git a/src/test/kc/examples/cx16/banking/cx16-banking-recursive-near.c b/src/test/kc/examples/cx16/banking/cx16-banking-recursive-near.c new file mode 100644 index 000000000..e1987ae9d --- /dev/null +++ b/src/test/kc/examples/cx16/banking/cx16-banking-recursive-near.c @@ -0,0 +1,38 @@ +/** + * @file cx16-banking-1.c + * @author your name (you@domain.com) + * @brief This program demonstrates a simple example of a banked call. + * @version 0.1 + * @date 2023-04-05 + * + * @copyright Copyright (c) 2023 + * + */ + +// The linker specification of the different segments. +#pragma var_model(mem) + +#include +#include +#include +#include + +// The target computer platform is the Commander X16, +// which implements banking in ram between 0xA0000 and 0xBFFF, +// and in ram between 0xC000 and 0xFFFF. +#pragma target(cx16) + +char __stackcall plus(char a, char b) { + if (a > 0) { + return a + plus(a - b, b); + } else { + return 0; + } +} + +void main(void) { + + char result = plus(4, 1); + printf("result = %u\n", result); +} + From b62430bfc36ff4e0940ee657d259f5d34a9eb935 Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Tue, 11 Apr 2023 08:35:18 +0200 Subject: [PATCH 36/66] - near, close, far implementation using fragments for phi calls - fragment consolidation - removal of platform - stackcall banked throws error - testing --- .../call_far_cx16_ram_finalize.asm | 0 .../call_far_cx16_ram_prepare.asm | 0 .../call_far_cx16_rom_finalize.asm | 0 .../call_far_cx16_rom_prepare.asm | 0 .../call_phi_close_cx16_ram.asm | 6 + .../call_phi_close_cx16_rom.asm | 7 + ..._execute.asm => call_phi_far_cx16_ram.asm} | 0 ..._execute.asm => call_phi_far_cx16_rom.asm} | 0 .../fragment/mos6502-common/call_phi_near.asm | 1 + src/test/kc/call-banked-phi-case-1-near-0.c | 14 + src/test/kc/call-banked-phi-case-1-near-1.c | 14 + src/test/kc/call-banked-phi-case-2-close-0.c | 17 + src/test/kc/call-banked-phi-case-2-close-1.c | 17 + src/test/kc/call-banked-phi-case-3-near-0.c | 22 + src/test/kc/call-banked-phi-case-3-near-1.c | 22 + src/test/kc/call-banked-phi-case-4-near-0.c | 21 + src/test/kc/call-banked-phi-case-4-near-1.c | 21 + src/test/kc/call-banked-phi-case-5-far-0.c | 21 + src/test/kc/call-banked-phi-case-5-far-1.c | 21 + src/test/kc/call-banked-phi-case-6-close-0.c | 20 + src/test/kc/call-banked-phi-case-6-close-1.c | 25 + ...vention-phi-bank.ld => call-banked-phi.ld} | 0 .../kc/call-banked-stack-case-2-close-0.c | 15 + src/test/kc/call-banked-stack-case-5-far-0.c | 20 + ...cx16-banking-0.ld => call-banked-stack.ld} | 5 +- .../kc/examples/cx16/banking/cx16-banking-0.c | 55 - .../{cx16-banking-1.c => cx16-banking.c} | 5 +- .../procedure-callingconvention-phi-bank-0.c | 15 - .../procedure-callingconvention-phi-bank-1.c | 18 - .../procedure-callingconvention-phi-bank-2.c | 19 - .../procedure-callingconvention-phi-bank-3.c | 21 - .../procedure-callingconvention-phi-bank-4.c | 20 - .../procedure-callingconvention-phi-bank-5.c | 119 - .../procedure-callingconvention-phi-bank-5.ld | 7 - .../ref/call-banked-phi-case-1-near-0.asm | 33 + ....cfg => call-banked-phi-case-1-near-0.cfg} | 0 ....log => call-banked-phi-case-1-near-0.log} | 40 +- ....sym => call-banked-phi-case-1-near-0.sym} | 0 .../ref/call-banked-phi-case-1-near-1.asm | 40 + .../ref/call-banked-phi-case-1-near-1.cfg | 29 + .../ref/call-banked-phi-case-1-near-1.log | 386 ++ .../ref/call-banked-phi-case-1-near-1.sym | 14 + .../ref/call-banked-phi-case-2-close-0.asm | 39 + ...cfg => call-banked-phi-case-2-close-0.cfg} | 0 ...log => call-banked-phi-case-2-close-0.log} | 73 +- ...sym => call-banked-phi-case-2-close-0.sym} | 0 .../ref/call-banked-phi-case-2-close-1.asm | 39 + ...cfg => call-banked-phi-case-2-close-1.cfg} | 0 ...log => call-banked-phi-case-2-close-1.log} | 73 +- ...sym => call-banked-phi-case-2-close-1.sym} | 0 .../ref/call-banked-phi-case-3-near-0.asm | 47 + ....cfg => call-banked-phi-case-3-near-0.cfg} | 13 +- ....log => call-banked-phi-case-3-near-0.log} | 222 +- ....sym => call-banked-phi-case-3-near-0.sym} | 6 +- .../ref/call-banked-phi-case-3-near-1.asm | 47 + ....cfg => call-banked-phi-case-3-near-1.cfg} | 13 +- .../ref/call-banked-phi-case-3-near-1.log | 401 +++ ....sym => call-banked-phi-case-3-near-1.sym} | 6 +- .../ref/call-banked-phi-case-4-near-0.asm | 46 + .../ref/call-banked-phi-case-4-near-0.cfg | 29 + .../ref/call-banked-phi-case-4-near-0.log | 399 +++ .../ref/call-banked-phi-case-4-near-0.sym | 14 + .../ref/call-banked-phi-case-4-near-1.asm | 46 + .../ref/call-banked-phi-case-4-near-1.cfg | 29 + .../ref/call-banked-phi-case-4-near-1.log | 399 +++ .../ref/call-banked-phi-case-4-near-1.sym | 14 + src/test/ref/call-banked-phi-case-5-far-0.asm | 50 + src/test/ref/call-banked-phi-case-5-far-0.cfg | 29 + src/test/ref/call-banked-phi-case-5-far-0.log | 407 +++ src/test/ref/call-banked-phi-case-5-far-0.sym | 14 + src/test/ref/call-banked-phi-case-5-far-1.asm | 50 + src/test/ref/call-banked-phi-case-5-far-1.cfg | 29 + src/test/ref/call-banked-phi-case-5-far-1.log | 407 +++ src/test/ref/call-banked-phi-case-5-far-1.sym | 14 + .../ref/call-banked-phi-case-6-close-0.asm | 52 + .../ref/call-banked-phi-case-6-close-0.cfg | 29 + .../ref/call-banked-phi-case-6-close-0.log | 412 +++ .../ref/call-banked-phi-case-6-close-0.sym | 14 + .../ref/call-banked-phi-case-6-close-1.asm | 52 + .../ref/call-banked-phi-case-6-close-1.cfg | 29 + .../ref/call-banked-phi-case-6-close-1.log | 412 +++ .../ref/call-banked-phi-case-6-close-1.sym | 14 + ...procedure-callingconvention-phi-bank-0.asm | 28 - ...procedure-callingconvention-phi-bank-1.asm | 31 - ...procedure-callingconvention-phi-bank-2.asm | 32 - ...procedure-callingconvention-phi-bank-3.asm | 32 - ...procedure-callingconvention-phi-bank-4.asm | 31 - ...procedure-callingconvention-phi-bank-4.log | 281 -- ...procedure-callingconvention-phi-bank-5.asm | 312 -- ...procedure-callingconvention-phi-bank-5.cfg | 267 -- ...procedure-callingconvention-phi-bank-5.log | 3121 ----------------- ...procedure-callingconvention-phi-bank-5.sym | 204 -- ...ocedure-callingconvention-stack-bank-0.asm | 45 - ...ocedure-callingconvention-stack-bank-0.cfg | 24 - ...ocedure-callingconvention-stack-bank-0.log | 350 -- ...ocedure-callingconvention-stack-bank-0.sym | 19 - ...ocedure-callingconvention-stack-bank-1.asm | 45 - ...ocedure-callingconvention-stack-bank-1.cfg | 24 - ...ocedure-callingconvention-stack-bank-1.log | 350 -- ...ocedure-callingconvention-stack-bank-1.sym | 19 - ...ocedure-callingconvention-stack-bank-2.asm | 74 - ...ocedure-callingconvention-stack-bank-2.cfg | 48 - ...ocedure-callingconvention-stack-bank-2.log | 595 ---- ...ocedure-callingconvention-stack-bank-2.sym | 32 - ...ocedure-callingconvention-stack-bank-3.asm | 77 - ...ocedure-callingconvention-stack-bank-3.cfg | 79 - ...ocedure-callingconvention-stack-bank-3.log | 650 ---- ...ocedure-callingconvention-stack-bank-3.sym | 19 - ...ocedure-callingconvention-stack-bank-4.asm | 111 - ...ocedure-callingconvention-stack-bank-4.cfg | 62 - ...ocedure-callingconvention-stack-bank-4.log | 710 ---- ...ocedure-callingconvention-stack-bank-4.sym | 30 - ...ocedure-callingconvention-stack-bank-5.asm | 50 - ...ocedure-callingconvention-stack-bank-5.cfg | 29 - ...ocedure-callingconvention-stack-bank-5.log | 408 --- ...ocedure-callingconvention-stack-bank-5.sym | 21 - 116 files changed, 4669 insertions(+), 8620 deletions(-) delete mode 100644 src/main/fragment/mos6502-common/call_far_cx16_ram_finalize.asm delete mode 100644 src/main/fragment/mos6502-common/call_far_cx16_ram_prepare.asm delete mode 100644 src/main/fragment/mos6502-common/call_far_cx16_rom_finalize.asm delete mode 100644 src/main/fragment/mos6502-common/call_far_cx16_rom_prepare.asm create mode 100644 src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm create mode 100644 src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm rename src/main/fragment/mos6502-common/{call_far_cx16_ram_execute.asm => call_phi_far_cx16_ram.asm} (100%) rename src/main/fragment/mos6502-common/{call_far_cx16_rom_execute.asm => call_phi_far_cx16_rom.asm} (100%) create mode 100644 src/main/fragment/mos6502-common/call_phi_near.asm create mode 100644 src/test/kc/call-banked-phi-case-1-near-0.c create mode 100644 src/test/kc/call-banked-phi-case-1-near-1.c create mode 100644 src/test/kc/call-banked-phi-case-2-close-0.c create mode 100644 src/test/kc/call-banked-phi-case-2-close-1.c create mode 100644 src/test/kc/call-banked-phi-case-3-near-0.c create mode 100644 src/test/kc/call-banked-phi-case-3-near-1.c create mode 100644 src/test/kc/call-banked-phi-case-4-near-0.c create mode 100644 src/test/kc/call-banked-phi-case-4-near-1.c create mode 100644 src/test/kc/call-banked-phi-case-5-far-0.c create mode 100644 src/test/kc/call-banked-phi-case-5-far-1.c create mode 100644 src/test/kc/call-banked-phi-case-6-close-0.c create mode 100644 src/test/kc/call-banked-phi-case-6-close-1.c rename src/test/kc/{procedure-callingconvention-phi-bank.ld => call-banked-phi.ld} (100%) create mode 100644 src/test/kc/call-banked-stack-case-2-close-0.c create mode 100644 src/test/kc/call-banked-stack-case-5-far-0.c rename src/test/kc/{examples/cx16/banking/cx16-banking-0.ld => call-banked-stack.ld} (62%) delete mode 100644 src/test/kc/examples/cx16/banking/cx16-banking-0.c rename src/test/kc/examples/cx16/banking/{cx16-banking-1.c => cx16-banking.c} (99%) delete mode 100644 src/test/kc/procedure-callingconvention-phi-bank-0.c delete mode 100644 src/test/kc/procedure-callingconvention-phi-bank-1.c delete mode 100644 src/test/kc/procedure-callingconvention-phi-bank-2.c delete mode 100644 src/test/kc/procedure-callingconvention-phi-bank-3.c delete mode 100644 src/test/kc/procedure-callingconvention-phi-bank-4.c delete mode 100644 src/test/kc/procedure-callingconvention-phi-bank-5.c delete mode 100644 src/test/kc/procedure-callingconvention-phi-bank-5.ld create mode 100644 src/test/ref/call-banked-phi-case-1-near-0.asm rename src/test/ref/{procedure-callingconvention-phi-bank-0.cfg => call-banked-phi-case-1-near-0.cfg} (100%) rename src/test/ref/{procedure-callingconvention-phi-bank-0.log => call-banked-phi-case-1-near-0.log} (83%) rename src/test/ref/{procedure-callingconvention-phi-bank-0.sym => call-banked-phi-case-1-near-0.sym} (100%) create mode 100644 src/test/ref/call-banked-phi-case-1-near-1.asm create mode 100644 src/test/ref/call-banked-phi-case-1-near-1.cfg create mode 100644 src/test/ref/call-banked-phi-case-1-near-1.log create mode 100644 src/test/ref/call-banked-phi-case-1-near-1.sym create mode 100644 src/test/ref/call-banked-phi-case-2-close-0.asm rename src/test/ref/{procedure-callingconvention-phi-bank-1.cfg => call-banked-phi-case-2-close-0.cfg} (100%) rename src/test/ref/{procedure-callingconvention-phi-bank-2.log => call-banked-phi-case-2-close-0.log} (79%) rename src/test/ref/{procedure-callingconvention-phi-bank-1.sym => call-banked-phi-case-2-close-0.sym} (100%) create mode 100644 src/test/ref/call-banked-phi-case-2-close-1.asm rename src/test/ref/{procedure-callingconvention-phi-bank-2.cfg => call-banked-phi-case-2-close-1.cfg} (100%) rename src/test/ref/{procedure-callingconvention-phi-bank-3.log => call-banked-phi-case-2-close-1.log} (79%) rename src/test/ref/{procedure-callingconvention-phi-bank-2.sym => call-banked-phi-case-2-close-1.sym} (100%) create mode 100644 src/test/ref/call-banked-phi-case-3-near-0.asm rename src/test/ref/{procedure-callingconvention-phi-bank-3.cfg => call-banked-phi-case-3-near-0.cfg} (63%) rename src/test/ref/{procedure-callingconvention-phi-bank-1.log => call-banked-phi-case-3-near-0.log} (52%) rename src/test/ref/{procedure-callingconvention-phi-bank-3.sym => call-banked-phi-case-3-near-0.sym} (62%) create mode 100644 src/test/ref/call-banked-phi-case-3-near-1.asm rename src/test/ref/{procedure-callingconvention-phi-bank-4.cfg => call-banked-phi-case-3-near-1.cfg} (63%) create mode 100644 src/test/ref/call-banked-phi-case-3-near-1.log rename src/test/ref/{procedure-callingconvention-phi-bank-4.sym => call-banked-phi-case-3-near-1.sym} (62%) create mode 100644 src/test/ref/call-banked-phi-case-4-near-0.asm create mode 100644 src/test/ref/call-banked-phi-case-4-near-0.cfg create mode 100644 src/test/ref/call-banked-phi-case-4-near-0.log create mode 100644 src/test/ref/call-banked-phi-case-4-near-0.sym create mode 100644 src/test/ref/call-banked-phi-case-4-near-1.asm create mode 100644 src/test/ref/call-banked-phi-case-4-near-1.cfg create mode 100644 src/test/ref/call-banked-phi-case-4-near-1.log create mode 100644 src/test/ref/call-banked-phi-case-4-near-1.sym create mode 100644 src/test/ref/call-banked-phi-case-5-far-0.asm create mode 100644 src/test/ref/call-banked-phi-case-5-far-0.cfg create mode 100644 src/test/ref/call-banked-phi-case-5-far-0.log create mode 100644 src/test/ref/call-banked-phi-case-5-far-0.sym create mode 100644 src/test/ref/call-banked-phi-case-5-far-1.asm create mode 100644 src/test/ref/call-banked-phi-case-5-far-1.cfg create mode 100644 src/test/ref/call-banked-phi-case-5-far-1.log create mode 100644 src/test/ref/call-banked-phi-case-5-far-1.sym create mode 100644 src/test/ref/call-banked-phi-case-6-close-0.asm create mode 100644 src/test/ref/call-banked-phi-case-6-close-0.cfg create mode 100644 src/test/ref/call-banked-phi-case-6-close-0.log create mode 100644 src/test/ref/call-banked-phi-case-6-close-0.sym create mode 100644 src/test/ref/call-banked-phi-case-6-close-1.asm create mode 100644 src/test/ref/call-banked-phi-case-6-close-1.cfg create mode 100644 src/test/ref/call-banked-phi-case-6-close-1.log create mode 100644 src/test/ref/call-banked-phi-case-6-close-1.sym delete mode 100644 src/test/ref/procedure-callingconvention-phi-bank-0.asm delete mode 100644 src/test/ref/procedure-callingconvention-phi-bank-1.asm delete mode 100644 src/test/ref/procedure-callingconvention-phi-bank-2.asm delete mode 100644 src/test/ref/procedure-callingconvention-phi-bank-3.asm delete mode 100644 src/test/ref/procedure-callingconvention-phi-bank-4.asm delete mode 100644 src/test/ref/procedure-callingconvention-phi-bank-4.log delete mode 100644 src/test/ref/procedure-callingconvention-phi-bank-5.asm delete mode 100644 src/test/ref/procedure-callingconvention-phi-bank-5.cfg delete mode 100644 src/test/ref/procedure-callingconvention-phi-bank-5.log delete mode 100644 src/test/ref/procedure-callingconvention-phi-bank-5.sym delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-0.asm delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-0.cfg delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-0.log delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-0.sym delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-1.asm delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-1.cfg delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-1.log delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-1.sym delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-2.asm delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-2.cfg delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-2.log delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-2.sym delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-3.asm delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-3.cfg delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-3.log delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-3.sym delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-4.asm delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-4.cfg delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-4.log delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-4.sym delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-5.asm delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-5.cfg delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-5.log delete mode 100644 src/test/ref/procedure-callingconvention-stack-bank-5.sym diff --git a/src/main/fragment/mos6502-common/call_far_cx16_ram_finalize.asm b/src/main/fragment/mos6502-common/call_far_cx16_ram_finalize.asm deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/main/fragment/mos6502-common/call_far_cx16_ram_prepare.asm b/src/main/fragment/mos6502-common/call_far_cx16_ram_prepare.asm deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/main/fragment/mos6502-common/call_far_cx16_rom_finalize.asm b/src/main/fragment/mos6502-common/call_far_cx16_rom_finalize.asm deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/main/fragment/mos6502-common/call_far_cx16_rom_prepare.asm b/src/main/fragment/mos6502-common/call_far_cx16_rom_prepare.asm deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm b/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm new file mode 100644 index 000000000..38d40a072 --- /dev/null +++ b/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm @@ -0,0 +1,6 @@ +lda #{c1} +sta $0 +pha +jsr {la1} +pla +sta $0 diff --git a/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm b/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm new file mode 100644 index 000000000..e19cf8ab7 --- /dev/null +++ b/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm @@ -0,0 +1,7 @@ +lda #{c1} +sta $1 +pha +jsr {la1} +pla +sta $1 + diff --git a/src/main/fragment/mos6502-common/call_far_cx16_ram_execute.asm b/src/main/fragment/mos6502-common/call_phi_far_cx16_ram.asm similarity index 100% rename from src/main/fragment/mos6502-common/call_far_cx16_ram_execute.asm rename to src/main/fragment/mos6502-common/call_phi_far_cx16_ram.asm diff --git a/src/main/fragment/mos6502-common/call_far_cx16_rom_execute.asm b/src/main/fragment/mos6502-common/call_phi_far_cx16_rom.asm similarity index 100% rename from src/main/fragment/mos6502-common/call_far_cx16_rom_execute.asm rename to src/main/fragment/mos6502-common/call_phi_far_cx16_rom.asm diff --git a/src/main/fragment/mos6502-common/call_phi_near.asm b/src/main/fragment/mos6502-common/call_phi_near.asm new file mode 100644 index 000000000..71fb96bc2 --- /dev/null +++ b/src/main/fragment/mos6502-common/call_phi_near.asm @@ -0,0 +1 @@ +jsr {la1} diff --git a/src/test/kc/call-banked-phi-case-1-near-0.c b/src/test/kc/call-banked-phi-case-1-near-0.c new file mode 100644 index 000000000..d63edd272 --- /dev/null +++ b/src/test/kc/call-banked-phi-case-1-near-0.c @@ -0,0 +1,14 @@ +// Test a procedure with calling convention PHI - case #1 + +#pragma code_seg(Code) +#pragma link("call-banked-phi.ld") + +char* const SCREEN = (char*)0x0400; + +void main(void) { + SCREEN[0] = plus('0', 7); +} + +char plus(char a, char b) { + return a+b; +} diff --git a/src/test/kc/call-banked-phi-case-1-near-1.c b/src/test/kc/call-banked-phi-case-1-near-1.c new file mode 100644 index 000000000..d63edd272 --- /dev/null +++ b/src/test/kc/call-banked-phi-case-1-near-1.c @@ -0,0 +1,14 @@ +// Test a procedure with calling convention PHI - case #1 + +#pragma code_seg(Code) +#pragma link("call-banked-phi.ld") + +char* const SCREEN = (char*)0x0400; + +void main(void) { + SCREEN[0] = plus('0', 7); +} + +char plus(char a, char b) { + return a+b; +} diff --git a/src/test/kc/call-banked-phi-case-2-close-0.c b/src/test/kc/call-banked-phi-case-2-close-0.c new file mode 100644 index 000000000..e70370ad4 --- /dev/null +++ b/src/test/kc/call-banked-phi-case-2-close-0.c @@ -0,0 +1,17 @@ +// Test a procedure with calling convention PHI - case #2 + +#pragma link("call-banked-phi.ld") + + +char* const SCREEN = (char*)0x0400; + +#pragma code_seg(RAM_Bank1) +__bank(cx16_ram,1) char plus(char a, char b) { + return a+b; +} + +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); +} + diff --git a/src/test/kc/call-banked-phi-case-2-close-1.c b/src/test/kc/call-banked-phi-case-2-close-1.c new file mode 100644 index 000000000..e70370ad4 --- /dev/null +++ b/src/test/kc/call-banked-phi-case-2-close-1.c @@ -0,0 +1,17 @@ +// Test a procedure with calling convention PHI - case #2 + +#pragma link("call-banked-phi.ld") + + +char* const SCREEN = (char*)0x0400; + +#pragma code_seg(RAM_Bank1) +__bank(cx16_ram,1) char plus(char a, char b) { + return a+b; +} + +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); +} + diff --git a/src/test/kc/call-banked-phi-case-3-near-0.c b/src/test/kc/call-banked-phi-case-3-near-0.c new file mode 100644 index 000000000..898758149 --- /dev/null +++ b/src/test/kc/call-banked-phi-case-3-near-0.c @@ -0,0 +1,22 @@ +// Test a procedure with calling convention PHI - case #3 + +#pragma link("call-banked-phi.ld") + + +char* const SCREEN = (char*)0x0400; + +#pragma code_seg(Code) +char min(char a, char b) { + return a+b; +} + +#pragma code_seg(RAM_Bank1) +__bank(cx16_ram,1) char plus(char a, char b) { + return min(a, b); +} + +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); +} + diff --git a/src/test/kc/call-banked-phi-case-3-near-1.c b/src/test/kc/call-banked-phi-case-3-near-1.c new file mode 100644 index 000000000..898758149 --- /dev/null +++ b/src/test/kc/call-banked-phi-case-3-near-1.c @@ -0,0 +1,22 @@ +// Test a procedure with calling convention PHI - case #3 + +#pragma link("call-banked-phi.ld") + + +char* const SCREEN = (char*)0x0400; + +#pragma code_seg(Code) +char min(char a, char b) { + return a+b; +} + +#pragma code_seg(RAM_Bank1) +__bank(cx16_ram,1) char plus(char a, char b) { + return min(a, b); +} + +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); +} + diff --git a/src/test/kc/call-banked-phi-case-4-near-0.c b/src/test/kc/call-banked-phi-case-4-near-0.c new file mode 100644 index 000000000..226122dad --- /dev/null +++ b/src/test/kc/call-banked-phi-case-4-near-0.c @@ -0,0 +1,21 @@ +// Test a procedure with calling convention PHI - case #4 + +#pragma link("call-banked-phi.ld") + + +char* const SCREEN = (char*)0x0400; + +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); +} + +#pragma code_seg(RAM_Bank1) +char __bank(cx16_ram, 1) plus(char a, char b) { + return min(a, b); +} + +#pragma code_seg(RAM_Bank1) +char __bank(cx16_ram, 1) min(char a, char b) { + return a+b; +} diff --git a/src/test/kc/call-banked-phi-case-4-near-1.c b/src/test/kc/call-banked-phi-case-4-near-1.c new file mode 100644 index 000000000..226122dad --- /dev/null +++ b/src/test/kc/call-banked-phi-case-4-near-1.c @@ -0,0 +1,21 @@ +// Test a procedure with calling convention PHI - case #4 + +#pragma link("call-banked-phi.ld") + + +char* const SCREEN = (char*)0x0400; + +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); +} + +#pragma code_seg(RAM_Bank1) +char __bank(cx16_ram, 1) plus(char a, char b) { + return min(a, b); +} + +#pragma code_seg(RAM_Bank1) +char __bank(cx16_ram, 1) min(char a, char b) { + return a+b; +} diff --git a/src/test/kc/call-banked-phi-case-5-far-0.c b/src/test/kc/call-banked-phi-case-5-far-0.c new file mode 100644 index 000000000..6393b4b2d --- /dev/null +++ b/src/test/kc/call-banked-phi-case-5-far-0.c @@ -0,0 +1,21 @@ +// Test a procedure with calling convention PHI - case #4 + +#pragma link("call-banked-phi.ld") + + +char* const SCREEN = (char*)0x0400; + +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); +} + +#pragma code_seg(RAM_Bank1) +char __bank(cx16_ram, 1) plus(char a, char b) { + return min(a, b); +} + +#pragma code_seg(RAM_Bank2) +char __bank(cx16_ram, 2) min(char a, char b) { + return a+b; +} diff --git a/src/test/kc/call-banked-phi-case-5-far-1.c b/src/test/kc/call-banked-phi-case-5-far-1.c new file mode 100644 index 000000000..6393b4b2d --- /dev/null +++ b/src/test/kc/call-banked-phi-case-5-far-1.c @@ -0,0 +1,21 @@ +// Test a procedure with calling convention PHI - case #4 + +#pragma link("call-banked-phi.ld") + + +char* const SCREEN = (char*)0x0400; + +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); +} + +#pragma code_seg(RAM_Bank1) +char __bank(cx16_ram, 1) plus(char a, char b) { + return min(a, b); +} + +#pragma code_seg(RAM_Bank2) +char __bank(cx16_ram, 2) min(char a, char b) { + return a+b; +} diff --git a/src/test/kc/call-banked-phi-case-6-close-0.c b/src/test/kc/call-banked-phi-case-6-close-0.c new file mode 100644 index 000000000..ec605c21b --- /dev/null +++ b/src/test/kc/call-banked-phi-case-6-close-0.c @@ -0,0 +1,20 @@ +// Test a procedure with calling convention PHI - case #6 + +#pragma link("call-banked-phi.ld") + +char* const SCREEN = (char*)0x0400; + +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); // close call +} + +#pragma code_seg(RAM_Bank1) +__bank(cx16_ram, 1) plus(char a, char b) { + return min(a, b); // near call +} + +#pragma code_seg(ROM_Bank1) +__bank(cx16_rom, 1) min(char a, char b) { + return a+b; +} diff --git a/src/test/kc/call-banked-phi-case-6-close-1.c b/src/test/kc/call-banked-phi-case-6-close-1.c new file mode 100644 index 000000000..57f2afacb --- /dev/null +++ b/src/test/kc/call-banked-phi-case-6-close-1.c @@ -0,0 +1,25 @@ +// Test a procedure with calling convention PHI - case #6 + +#pragma link("call-banked-phi.ld") + +char* const SCREEN = (char*)0x0400; + +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); // close call +} + +#pragma code_seg(RAM_Bank1) +#pragma bank(cx16_ram, 1) +char plus(char a, char b) { + return min(a, b); // near call +} + +#pragma code_seg(ROM_Bank1) +#pragma bank(cx16_rom, 1) +char min(char a, char b) { + return a+b; +} + +#pragma code_seg(Code) +#pragma nobank(dummy) diff --git a/src/test/kc/procedure-callingconvention-phi-bank.ld b/src/test/kc/call-banked-phi.ld similarity index 100% rename from src/test/kc/procedure-callingconvention-phi-bank.ld rename to src/test/kc/call-banked-phi.ld diff --git a/src/test/kc/call-banked-stack-case-2-close-0.c b/src/test/kc/call-banked-stack-case-2-close-0.c new file mode 100644 index 000000000..72a2fb9c8 --- /dev/null +++ b/src/test/kc/call-banked-stack-case-2-close-0.c @@ -0,0 +1,15 @@ +// Test a procedure with calling convention PHI - case #1 + +#pragma link("call-banked-stack.ld") + +char* const SCREEN = (char*)0x0400; + +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); // near stack call +} + +#pragma code_seg(Code) +__stackcall char plus(char a, char b) { + return a+b; +} diff --git a/src/test/kc/call-banked-stack-case-5-far-0.c b/src/test/kc/call-banked-stack-case-5-far-0.c new file mode 100644 index 000000000..28cbe7e53 --- /dev/null +++ b/src/test/kc/call-banked-stack-case-5-far-0.c @@ -0,0 +1,20 @@ +// Test a procedure with calling convention PHI - case #4 + +#pragma link("call-banked-phi.ld") + +char* const SCREEN = (char*)0x0400; + +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); // close call +} + +#pragma code_seg(RAM_Bank1) +char __bank(cx16_ram, 1) plus(char a, char b) { + return min(a, b); // far call +} + +#pragma code_seg(RAM_Bank2) +char __bank(cx16_ram, 2) min(char a, char b) { + return a+b; +} diff --git a/src/test/kc/examples/cx16/banking/cx16-banking-0.ld b/src/test/kc/call-banked-stack.ld similarity index 62% rename from src/test/kc/examples/cx16/banking/cx16-banking-0.ld rename to src/test/kc/call-banked-stack.ld index c0dedea43..de9bdab5d 100644 --- a/src/test/kc/examples/cx16/banking/cx16-banking-0.ld +++ b/src/test/kc/call-banked-stack.ld @@ -1,10 +1,11 @@ .file [name="%O", type="prg", segments="Program"] -.file [name="BANK1.BIN", type="bin", segments="Bank1"] .segmentdef Program [segments="Basic, Code, Data"] .segmentdef Basic [start=$0801] .segmentdef Code [start=%P] .segmentdef Data [startAfter="Code"] -.segmentdef Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] .segment Basic :BasicUpstart(%E) .segment Code diff --git a/src/test/kc/examples/cx16/banking/cx16-banking-0.c b/src/test/kc/examples/cx16/banking/cx16-banking-0.c deleted file mode 100644 index bab4d90a5..000000000 --- a/src/test/kc/examples/cx16/banking/cx16-banking-0.c +++ /dev/null @@ -1,55 +0,0 @@ -/** - * @file cx16-banking-1.c - * @author your name (you@domain.com) - * @brief This program demonstrates a simple example of a banked call. - * @version 0.1 - * @date 2023-04-05 - * - * @copyright Copyright (c) 2023 - * - */ - -// The linker specification of the different segments. -#pragma link("cx16-banking-1.ld") -#pragma var_model(mem) - -#include -#include -#include -#include - -#include "cx16-banking-0.h" - - -// The target computer platform is the Commander X16, -// which implements banking in ram between 0xA0000 and 0xBFFF, -// and in ram between 0xC000 and 0xFFFF. -#pragma target(cx16) - -char* const SCREEN = (char*)0x0400; - -#pragma code_seg(Bank1) // The sequent functions will be addressed specified by segment bank1 in the linker. -#pragma bank(ram, 1) // The sequent functions will be banked using call method ram in bank number 1. - -char __stackcall plus(char a, char b) { - return a+b; -} - -#pragma code_seg(Code) // The sequent functions will be addressed in the default main memory location (segment Code). -#pragma nobank(dummy) // The sequent functions will consider no banking calculations anymore. - -void load_bank(char bank, char *file) { - bank_set_bram(bank); - cbm_k_setnam(file); - cbm_k_setlfs(1,8,2); - cbm_k_load((char*)0xA000, 0); - cbm_k_close(1); -} - -void main(void) { - - load_bank(1, "BANK1.BIN"); - - SCREEN[0] = plus('0', 7); -} - diff --git a/src/test/kc/examples/cx16/banking/cx16-banking-1.c b/src/test/kc/examples/cx16/banking/cx16-banking.c similarity index 99% rename from src/test/kc/examples/cx16/banking/cx16-banking-1.c rename to src/test/kc/examples/cx16/banking/cx16-banking.c index b95afbcef..6e6b66d9a 100644 --- a/src/test/kc/examples/cx16/banking/cx16-banking-1.c +++ b/src/test/kc/examples/cx16/banking/cx16-banking.c @@ -16,10 +16,7 @@ #include #include #include -#include - -#include "cx16-banking-1.h" - +#include // The target computer platform is the Commander X16, // which implements banking in ram between 0xA0000 and 0xBFFF, diff --git a/src/test/kc/procedure-callingconvention-phi-bank-0.c b/src/test/kc/procedure-callingconvention-phi-bank-0.c deleted file mode 100644 index bee484e0f..000000000 --- a/src/test/kc/procedure-callingconvention-phi-bank-0.c +++ /dev/null @@ -1,15 +0,0 @@ -// Test a procedure with calling convention PHI - -#pragma code_seg(stage) -#pragma link("procedure-callingconvention-phi-bank.ld") -#pragma target(cx16) - -char* const SCREEN = (char*)0x0400; - -void main(void) { - SCREEN[0] = plus('0', 7); -} - -char __bank(ram,2) plus(char a, char b) { - return a+b; -} diff --git a/src/test/kc/procedure-callingconvention-phi-bank-1.c b/src/test/kc/procedure-callingconvention-phi-bank-1.c deleted file mode 100644 index bb4b31031..000000000 --- a/src/test/kc/procedure-callingconvention-phi-bank-1.c +++ /dev/null @@ -1,18 +0,0 @@ -// Test a far call procedure with a calling convention PHI - -#pragma code_seg(stage) -#pragma link("procedure-callingconvention-phi-bank.ld") -#pragma target(cx16) - -char* const SCREEN = (char*)0x0400; - -void main(void) { - SCREEN[0] = plus('0', 7); -} - -#pragma code_seg(stage) -#pragma bank(ram, 1) - -char plus(char a, char b) { - return a+b; -} diff --git a/src/test/kc/procedure-callingconvention-phi-bank-2.c b/src/test/kc/procedure-callingconvention-phi-bank-2.c deleted file mode 100644 index 5f2053c4b..000000000 --- a/src/test/kc/procedure-callingconvention-phi-bank-2.c +++ /dev/null @@ -1,19 +0,0 @@ -// Test a far call procedure with a calling convention PHI into ROM - -#pragma code_seg(stage) -#pragma link("procedure-callingconvention-phi-bank.ld") -#pragma target(cx16) - -char* const SCREEN = (char*)0x0400; - -void main(void) { - SCREEN[0] = plus('0', 7); -} - -#pragma code_seg(stage) -#pragma bank(rom, 1) // test rom bank - -char plus(char a, char b) { - return a+b; -} - diff --git a/src/test/kc/procedure-callingconvention-phi-bank-3.c b/src/test/kc/procedure-callingconvention-phi-bank-3.c deleted file mode 100644 index 0dc59a663..000000000 --- a/src/test/kc/procedure-callingconvention-phi-bank-3.c +++ /dev/null @@ -1,21 +0,0 @@ -// Test a far call procedure with a calling convention PHI - -#pragma code_seg(stage) -#pragma link("procedure-callingconvention-phi-bank.ld") -#pragma target(cx16) - -char* const SCREEN = (char*)0x0400; - -void main(void) { - SCREEN[0] = plus('0', 7); -} - -#pragma code_seg(stage) -#pragma bank(rom, 2) // Test rom fragment - -char plus(char a, char b) { - return a+b; -} - -#pragma nobank(dummy) - diff --git a/src/test/kc/procedure-callingconvention-phi-bank-4.c b/src/test/kc/procedure-callingconvention-phi-bank-4.c deleted file mode 100644 index 31dc11f0e..000000000 --- a/src/test/kc/procedure-callingconvention-phi-bank-4.c +++ /dev/null @@ -1,20 +0,0 @@ -// Test a far call procedure with a calling convention phi - -#pragma link("procedure-callingconvention-phi-bank.ld") -#pragma target(cx16) - -char* const SCREEN = (char*)0x0400; - -#pragma code_seg(stage) -#pragma bank(ram, 20) - -char plus(char a, char b) { - return a+b; -} - -#pragma nobank(dummy) - -void main(void) { - SCREEN[0] = plus('0', 7); -} - diff --git a/src/test/kc/procedure-callingconvention-phi-bank-5.c b/src/test/kc/procedure-callingconvention-phi-bank-5.c deleted file mode 100644 index ef564b56c..000000000 --- a/src/test/kc/procedure-callingconvention-phi-bank-5.c +++ /dev/null @@ -1,119 +0,0 @@ - -// The linker specification of the different segments. -#pragma link("procedure-callingconvention-phi-bank-5.ld") - -// The target computer platform is the Commander X16, -// which implements banking in ram between 0xA0000 and 0xBFFF, -// and in rom between 0xC000 and 0xFFFF. -#pragma target(cx16) - -char *const SCREEN = (char *)0x0400; // Just for test purposes. - -#pragma code_seg(Bank1) // The sequent functions will be addressed specified by segment bank1 in the linker. -#pragma bank(ram, 1) // The sequent functions will be banked using call method ram in bank number 1. - -// Function declarations -char func_ram_bank1_a(char a, char b); -char __bank(ram, 1) func_ram_bank1_b(char a, char b); -char func_ram_bank1_c(char a, char b); -char func_ram_bank1_d(char a, char b); -char func_ram_bank1_e(char a, char b); -char func_ram_bank1_f(char a, char b); -char func_rom_bank2_a(char a, char b); -char __bank(rom, 2) func_rom_bank2_b(char a, char b); -char func_rom_bank2_c(char a, char b); -char func_rom_bank2_d(char a, char b); -char func_rom_bank2_e(char a, char b); -char func_rom_bank2_f(char a, char b); -char func_main_a(char a, char b); -char func_main_b(char a, char b); - -// Functional code - -char func_ram_bank1_a(char a, char b) { - return a + b; -} - -char func_ram_bank1_c(char a, char b) { - return func_ram_bank1_a(a, b); // Non banked call in ram bank 1. -} - -char func_ram_bank1_d(char a, char b) { - return func_rom_bank2_a(a, b); // Banked call from ram bank 1 to rom bank 2. -} - -char func_ram_bank1_e(char a, char b) { - return func_rom_bank2_b(a, b); // Banked call from ram bank 1 to rom bank 2. -} - -char func_ram_bank1_f(char a, char b) { - return func_main_a(a, b); // Non banked call from ram bank 1 to main memory. -} - - -#pragma code_seg(Bank2) // The sequent functions will be addressed specified by segment bank2 in the linker. -#pragma bank(rom, 2) // The sequent functions will be banked using call method rom in bank number 2. - -char func_rom_bank2_a(char a, char b) { - return a + b; -} - -char func_rom_bank2_c(char a, char b) { - return func_ram_bank1_a(a, b); // Banked call from rom bank 2 to ram bank 1. -} - -char func_rom_bank2_d(char a, char b) { - return func_rom_bank2_a(a, b); // Non banked call in rom bank 2. -} - -char func_rom_bank2_e(char a, char b) { - return func_rom_bank2_b(a, b); // Non Banked call in rom bank 2. -} - -char func_rom_bank2_f(char a, char b) { - return func_main_a(a, b); // Non banked call from rom bank 2 to main memory. -} - - -#pragma nobank(dummy) // The sequent functions will consider no banking calculations anymore. - -// The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram. -char __bank(ram, 1) func_ram_bank1_b(char a, char b) { - return a + b; -} - -// The __bank directive declares this function to be banked using call method rom in bank number 2 of banked rom. -char __bank(rom, 2) func_rom_bank2_b(char a, char b) { - return a + b; -} - -#pragma code_seg(Code) // The sequent functions will be addressed in the default main memory location (segment Code). - -// Allocated in main memory. -char func_main_a(char a, char b) { - return func_ram_bank1_e(a, b); // Banked call to ram in bank 1 from main memory. -} - -// Allocated in main memory. -char func_main_b(char a, char b) { - return func_rom_bank2_e(a, b); // Banked call to rom in bank 2 from main memory. -} - -// Practically this means that the main() function is placed in main memory ... - -void main(void) { - SCREEN[0] = func_ram_bank1_a('0', 7); // Banked call to ram in bank 1 from main memory. - SCREEN[0] = func_ram_bank1_b('0', 7); // Banked call to ram in bank 1 from main memory. - SCREEN[0] = func_ram_bank1_c('0', 7); // Banked call to ram in bank 1 from main memory. - SCREEN[0] = func_ram_bank1_d('0', 7); // Banked call to ram in bank 1 from main memory. - SCREEN[0] = func_ram_bank1_e('0', 7); // Banked call to ram in bank 1 from main memory. - SCREEN[0] = func_ram_bank1_f('0', 7); // Banked call to ram in bank 1 from main memory. - SCREEN[0] = func_rom_bank2_a('0', 7); // Banked call to rom in bank 2 from main memory. - SCREEN[0] = func_rom_bank2_b('0', 7); // Banked call to rom in bank 2 from main memory. - SCREEN[0] = func_rom_bank2_c('0', 7); // Banked call to rom in bank 2 from main memory. - SCREEN[0] = func_rom_bank2_d('0', 7); // Banked call to rom in bank 2 from main memory. - SCREEN[0] = func_rom_bank2_e('0', 7); // banked call to rom in bank 2 from main memory. - SCREEN[0] = func_rom_bank2_f('0', 7); // banked call to rom in bank 2 from main memory. - SCREEN[0] = func_main_a('0', 7); // Near call in main memory from main memory. - SCREEN[0] = func_main_b('0', 7); // Near call in main memory from main memory. -} diff --git a/src/test/kc/procedure-callingconvention-phi-bank-5.ld b/src/test/kc/procedure-callingconvention-phi-bank-5.ld deleted file mode 100644 index b82b5d038..000000000 --- a/src/test/kc/procedure-callingconvention-phi-bank-5.ld +++ /dev/null @@ -1,7 +0,0 @@ -.segmentdef Program [segments="Basic, Code, Data, Bank1, Bank2"] -.segmentdef Basic [start=$0801]a -.segmentdef Code [start=%P] -.segmentdef Data [startAfter="Code"] -.segmentdef Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] -.segmentdef Bank2 [start=$C000, min=$C000, max=$FFFF, align=$100] - diff --git a/src/test/ref/call-banked-phi-case-1-near-0.asm b/src/test/ref/call-banked-phi-case-1-near-0.asm new file mode 100644 index 000000000..ed640af22 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-1-near-0.asm @@ -0,0 +1,33 @@ +// Test a procedure with calling convention PHI - case #1 + .file [name="call-banked-phi-case-1-near-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + .label SCREEN = $400 +.segment Code +main: { + // plus('0', 7) + jsr plus + // SCREEN[0] = plus('0', 7) + lda #plus.return + sta SCREEN + // } + rts +} +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + rts +} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-0.cfg b/src/test/ref/call-banked-phi-case-1-near-0.cfg similarity index 100% rename from src/test/ref/procedure-callingconvention-phi-bank-0.cfg rename to src/test/ref/call-banked-phi-case-1-near-0.cfg diff --git a/src/test/ref/procedure-callingconvention-phi-bank-0.log b/src/test/ref/call-banked-phi-case-1-near-0.log similarity index 83% rename from src/test/ref/procedure-callingconvention-phi-bank-0.log rename to src/test/ref/call-banked-phi-case-1-near-0.log index a8f414328..be8ee4301 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-0.log +++ b/src/test/ref/call-banked-phi-case-1-near-0.log @@ -1,4 +1,4 @@ -Loading link script "procedure-callingconvention-phi-bank.ld" +Loading link script "call-banked-phi.ld" CONTROL FLOW GRAPH SSA @@ -157,24 +157,29 @@ Uplifting [] best 60 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments -// Test a procedure with calling convention PHI +// Test a procedure with calling convention PHI - case #1 // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] + .file [name="call-banked-phi-case-1-near-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] .segmentdef Basic [start=$0801] .segmentdef Code [start=$80d] .segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data // Global Constants & labels .label SCREEN = $400 -.segment stage +.segment Code // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] + // [4] phi from main to plus [phi:main->plus] -- call__phi_near_finalize plus_from_main: jsr plus jmp __b1 @@ -231,25 +236,30 @@ FINAL ASSEMBLER Score: 24 // File Comments -// Test a procedure with calling convention PHI +// Test a procedure with calling convention PHI - case #1 // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] + .file [name="call-banked-phi-case-1-near-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] .segmentdef Basic [start=$0801] .segmentdef Code [start=$80d] .segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data // Global Constants & labels .label SCREEN = $400 -.segment stage +.segment Code // main main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] + // [4] phi from main to plus [phi:main->plus] -- call__phi_near_finalize jsr plus // main::@1 // SCREEN[0] = plus('0', 7) diff --git a/src/test/ref/procedure-callingconvention-phi-bank-0.sym b/src/test/ref/call-banked-phi-case-1-near-0.sym similarity index 100% rename from src/test/ref/procedure-callingconvention-phi-bank-0.sym rename to src/test/ref/call-banked-phi-case-1-near-0.sym diff --git a/src/test/ref/call-banked-phi-case-1-near-1.asm b/src/test/ref/call-banked-phi-case-1-near-1.asm new file mode 100644 index 000000000..9f70b48bb --- /dev/null +++ b/src/test/ref/call-banked-phi-case-1-near-1.asm @@ -0,0 +1,40 @@ +// Test a procedure with calling convention PHI - case #1 + .file [name="call-banked-phi-case-1-near-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + .label SCREEN = $400 +.segment Code +main: { + // plus('0', 7) + jsr plus + // SCREEN[0] = plus('0', 7) + lda #min.return + sta SCREEN + // } + rts +} +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + jsr min + // } + rts +} +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + rts +} diff --git a/src/test/ref/call-banked-phi-case-1-near-1.cfg b/src/test/ref/call-banked-phi-case-1-near-1.cfg new file mode 100644 index 000000000..0ae888575 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-1-near-1.cfg @@ -0,0 +1,29 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return diff --git a/src/test/ref/call-banked-phi-case-1-near-1.log b/src/test/ref/call-banked-phi-case-1-near-1.log new file mode 100644 index 000000000..b205976e7 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-1-near-1.log @@ -0,0 +1,386 @@ +Loading link script "call-banked-phi.ld" + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + min::a#0 = plus::a#1 + min::b#0 = plus::b#1 + call min + min::return#0 = min::return#2 + to:plus::@1 +plus::@1: scope:[plus] from plus + min::return#3 = phi( plus/min::return#0 ) + plus::$0 = min::return#3 + plus::return#1 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus::@1 + plus::return#4 = phi( plus::@1/plus::return#1 ) + plus::return#2 = plus::return#4 + return + to:@return + +char min(char a , char b) +min: scope:[min] from plus + min::b#1 = phi( plus/min::b#0 ) + min::a#1 = phi( plus/min::a#0 ) + min::$0 = min::a#1 + min::b#1 + min::return#1 = min::$0 + to:min::@return +min::@return: scope:[min] from min + min::return#4 = phi( min/min::return#1 ) + min::return#2 = min::return#4 + 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 +__constant char * const SCREEN = (char *)$400 +void __start() +void main() +char main::$0 +char min(char a , char b) +char min::$0 +char min::a +char min::a#0 +char min::a#1 +char min::b +char min::b#0 +char min::b#1 +char min::return +char min::return#0 +char min::return#1 +char min::return#2 +char min::return#3 +char min::return#4 +char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 +Alias min::return#0 = min::return#3 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Alias min::return#1 = min::$0 min::return#4 min::return#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Identical Phi Values min::a#1 min::a#0 +Identical Phi Values min::b#1 min::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Constant min::a#0 = plus::a#0 +Constant min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +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 +Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant min::return#1 = min::a#0+min::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant min::return#0 = min::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#1 = min::return#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#0 = plus::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings min::return#0 +Constant inlined plus::return#0 = min::return#1 +Constant inlined main::$0 = min::return#1 +Constant inlined plus::return#1 = min::return#1 +Constant inlined min::a#0 = plus::a#0 +Constant inlined min::return#0 = min::return#1 +Constant inlined min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of plus::@1 +Adding NOP phi() at start of min +CALL GRAPH +Calls in [main] to plus:1 +Calls in [plus] to min:5 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Culled Empty Block label plus::@1 +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of min + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +char min(char a , char b) +char min::a +char min::b +char min::return +char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [plus] +Uplift Scope [min] +Uplift Scope [] + +Uplifting [main] best 75 combination +Uplifting [plus] best 75 combination +Uplifting [min] best 75 combination +Uplifting [] best 75 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention PHI - case #1 + // Upstart + .file [name="call-banked-phi-case-1-near-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call__phi_near_finalize + plus_from_main: + jsr plus + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + min_from_plus: + jsr min + jmp __breturn + // plus::@return + __breturn: + // [6] return + rts +} + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + jmp __breturn + // min::@return + __breturn: + // [8] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction min_from_plus: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void main() +char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + + + +FINAL ASSEMBLER +Score: 36 + + // File Comments +// Test a procedure with calling convention PHI - case #1 + // Upstart + .file [name="call-banked-phi-case-1-near-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call__phi_near_finalize + jsr plus + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + jsr min + // plus::@return + // } + // [6] return + rts +} + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + // min::@return + // [8] return + rts +} + // File Data + diff --git a/src/test/ref/call-banked-phi-case-1-near-1.sym b/src/test/ref/call-banked-phi-case-1-near-1.sym new file mode 100644 index 000000000..168bcee58 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-1-near-1.sym @@ -0,0 +1,14 @@ +__constant char * const SCREEN = (char *) 1024 +void main() +char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + diff --git a/src/test/ref/call-banked-phi-case-2-close-0.asm b/src/test/ref/call-banked-phi-case-2-close-0.asm new file mode 100644 index 000000000..5fd130284 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-2-close-0.asm @@ -0,0 +1,39 @@ +// Test a procedure with calling convention PHI - case #2 + .file [name="call-banked-phi-case-2-close-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + .label SCREEN = $400 +.segment Code +main: { + // plus('0', 7) + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // SCREEN[0] = plus('0', 7) + lda #plus.return + sta SCREEN + // } + rts +} +.segment RAM_Bank1 +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + rts +} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-1.cfg b/src/test/ref/call-banked-phi-case-2-close-0.cfg similarity index 100% rename from src/test/ref/procedure-callingconvention-phi-bank-1.cfg rename to src/test/ref/call-banked-phi-case-2-close-0.cfg diff --git a/src/test/ref/procedure-callingconvention-phi-bank-2.log b/src/test/ref/call-banked-phi-case-2-close-0.log similarity index 79% rename from src/test/ref/procedure-callingconvention-phi-bank-2.log rename to src/test/ref/call-banked-phi-case-2-close-0.log index adb898ed6..5d4cd8f5d 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-2.log +++ b/src/test/ref/call-banked-phi-case-2-close-0.log @@ -1,4 +1,4 @@ -Loading link script "procedure-callingconvention-phi-bank.ld" +Loading link script "call-banked-phi.ld" CONTROL FLOW GRAPH SSA @@ -144,6 +144,7 @@ char plus::return Initial phi equivalence classes Complete equivalence classes REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a REGISTER UPLIFT SCOPES @@ -151,35 +152,42 @@ Uplift Scope [main] Uplift Scope [plus] Uplift Scope [] -Uplifting [main] best 60 combination -Uplifting [plus] best 60 combination -Uplifting [] best 60 combination +Uplifting [main] best 75 combination +Uplifting [plus] best 75 combination +Uplifting [] best 75 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments -// Test a far call procedure with a calling convention PHI into ROM +// Test a procedure with calling convention PHI - case #2 // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] + .file [name="call-banked-phi-case-2-close-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] .segmentdef Basic [start=$0801] .segmentdef Code [start=$80d] .segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data // Global Constants & labels .label SCREEN = $400 -.segment stage +.segment Code // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_rom_finalize + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize plus_from_main: - jsr $ff6e - .byte plus - .byte 1 + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 jmp __b1 // main::@1 __b1: @@ -192,8 +200,8 @@ main: { // [3] return rts } +.segment RAM_Bank1 // plus -// test rom bank // char plus(char a, char b) plus: { .const a = '0' @@ -232,32 +240,39 @@ __constant char plus::return#1 = plus::a#0+plus::b#0 // return FINAL ASSEMBLER -Score: 24 +Score: 39 // File Comments -// Test a far call procedure with a calling convention PHI into ROM +// Test a procedure with calling convention PHI - case #2 // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] + .file [name="call-banked-phi-case-2-close-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] .segmentdef Basic [start=$0801] .segmentdef Code [start=$80d] .segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data // Global Constants & labels .label SCREEN = $400 -.segment stage +.segment Code // main main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_rom_finalize - jsr $ff6e - .byte plus - .byte 1 + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 // main::@1 // SCREEN[0] = plus('0', 7) // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 @@ -268,8 +283,8 @@ main: { // [3] return rts } +.segment RAM_Bank1 // plus -// test rom bank // char plus(char a, char b) plus: { .const a = '0' diff --git a/src/test/ref/procedure-callingconvention-phi-bank-1.sym b/src/test/ref/call-banked-phi-case-2-close-0.sym similarity index 100% rename from src/test/ref/procedure-callingconvention-phi-bank-1.sym rename to src/test/ref/call-banked-phi-case-2-close-0.sym diff --git a/src/test/ref/call-banked-phi-case-2-close-1.asm b/src/test/ref/call-banked-phi-case-2-close-1.asm new file mode 100644 index 000000000..275c704c3 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-2-close-1.asm @@ -0,0 +1,39 @@ +// Test a procedure with calling convention PHI - case #2 + .file [name="call-banked-phi-case-2-close-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + .label SCREEN = $400 +.segment Code +main: { + // plus('0', 7) + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // SCREEN[0] = plus('0', 7) + lda #plus.return + sta SCREEN + // } + rts +} +.segment RAM_Bank1 +// char plus(char a, char b) +plus: { + .const a = '0' + .const b = 7 + .label return = a+b + rts +} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-2.cfg b/src/test/ref/call-banked-phi-case-2-close-1.cfg similarity index 100% rename from src/test/ref/procedure-callingconvention-phi-bank-2.cfg rename to src/test/ref/call-banked-phi-case-2-close-1.cfg diff --git a/src/test/ref/procedure-callingconvention-phi-bank-3.log b/src/test/ref/call-banked-phi-case-2-close-1.log similarity index 79% rename from src/test/ref/procedure-callingconvention-phi-bank-3.log rename to src/test/ref/call-banked-phi-case-2-close-1.log index f970e5bd6..6ddc743fb 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-3.log +++ b/src/test/ref/call-banked-phi-case-2-close-1.log @@ -1,4 +1,4 @@ -Loading link script "procedure-callingconvention-phi-bank.ld" +Loading link script "call-banked-phi.ld" CONTROL FLOW GRAPH SSA @@ -144,6 +144,7 @@ char plus::return Initial phi equivalence classes Complete equivalence classes REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a REGISTER UPLIFT SCOPES @@ -151,35 +152,42 @@ Uplift Scope [main] Uplift Scope [plus] Uplift Scope [] -Uplifting [main] best 60 combination -Uplifting [plus] best 60 combination -Uplifting [] best 60 combination +Uplifting [main] best 75 combination +Uplifting [plus] best 75 combination +Uplifting [] best 75 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments -// Test a far call procedure with a calling convention PHI +// Test a procedure with calling convention PHI - case #2 // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] + .file [name="call-banked-phi-case-2-close-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] .segmentdef Basic [start=$0801] .segmentdef Code [start=$80d] .segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data // Global Constants & labels .label SCREEN = $400 -.segment stage +.segment Code // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_rom_finalize + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize plus_from_main: - jsr $ff6e - .byte plus - .byte 2 + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 jmp __b1 // main::@1 __b1: @@ -192,8 +200,8 @@ main: { // [3] return rts } +.segment RAM_Bank1 // plus -// Test rom fragment // char plus(char a, char b) plus: { .const a = '0' @@ -232,32 +240,39 @@ __constant char plus::return#1 = plus::a#0+plus::b#0 // return FINAL ASSEMBLER -Score: 24 +Score: 39 // File Comments -// Test a far call procedure with a calling convention PHI +// Test a procedure with calling convention PHI - case #2 // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] + .file [name="call-banked-phi-case-2-close-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] .segmentdef Basic [start=$0801] .segmentdef Code [start=$80d] .segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data // Global Constants & labels .label SCREEN = $400 -.segment stage +.segment Code // main main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_rom_finalize - jsr $ff6e - .byte plus - .byte 2 + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 // main::@1 // SCREEN[0] = plus('0', 7) // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 @@ -268,8 +283,8 @@ main: { // [3] return rts } +.segment RAM_Bank1 // plus -// Test rom fragment // char plus(char a, char b) plus: { .const a = '0' diff --git a/src/test/ref/procedure-callingconvention-phi-bank-2.sym b/src/test/ref/call-banked-phi-case-2-close-1.sym similarity index 100% rename from src/test/ref/procedure-callingconvention-phi-bank-2.sym rename to src/test/ref/call-banked-phi-case-2-close-1.sym diff --git a/src/test/ref/call-banked-phi-case-3-near-0.asm b/src/test/ref/call-banked-phi-case-3-near-0.asm new file mode 100644 index 000000000..95e842b1a --- /dev/null +++ b/src/test/ref/call-banked-phi-case-3-near-0.asm @@ -0,0 +1,47 @@ +// Test a procedure with calling convention PHI - case #3 + .file [name="call-banked-phi-case-3-near-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + .label SCREEN = $400 +.segment Code +main: { + // plus('0', 7) + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // SCREEN[0] = plus('0', 7) + lda #min.return + sta SCREEN + // } + rts +} +.segment RAM_Bank1 +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + jsr min + // } + rts +} +.segment Code +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + rts +} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-3.cfg b/src/test/ref/call-banked-phi-case-3-near-0.cfg similarity index 63% rename from src/test/ref/procedure-callingconvention-phi-bank-3.cfg rename to src/test/ref/call-banked-phi-case-3-near-0.cfg index 1701ea88d..abba7b99a 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-3.cfg +++ b/src/test/ref/call-banked-phi-case-3-near-0.cfg @@ -5,7 +5,7 @@ main: scope:[main] from [1] call plus to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = plus::return#1 + [2] *SCREEN = min::return#1 to:main::@return main::@return: scope:[main] from main::@1 [3] return @@ -14,7 +14,16 @@ main::@return: scope:[main] from main::@1 __bank(bank) char plus(char a , char b) plus: scope:[plus] from main [4] phi() + [5] call min to:plus::@return plus::@return: scope:[plus] from plus - [5] return + [6] return + to:@return + +char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return to:@return diff --git a/src/test/ref/procedure-callingconvention-phi-bank-1.log b/src/test/ref/call-banked-phi-case-3-near-0.log similarity index 52% rename from src/test/ref/procedure-callingconvention-phi-bank-1.log rename to src/test/ref/call-banked-phi-case-3-near-0.log index f7e169609..37da8004c 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-1.log +++ b/src/test/ref/call-banked-phi-case-3-near-0.log @@ -1,4 +1,4 @@ -Loading link script "procedure-callingconvention-phi-bank.ld" +Loading link script "call-banked-phi.ld" CONTROL FLOW GRAPH SSA @@ -22,15 +22,35 @@ __bank(bank) char plus(char a , char b) plus: scope:[plus] from main plus::b#1 = phi( main/plus::b#0 ) plus::a#1 = phi( main/plus::a#0 ) - plus::$0 = plus::a#1 + plus::b#1 + min::a#0 = plus::a#1 + min::b#0 = plus::b#1 + call min + min::return#0 = min::return#2 + to:plus::@1 +plus::@1: scope:[plus] from plus + min::return#3 = phi( plus/min::return#0 ) + plus::$0 = min::return#3 plus::return#1 = plus::$0 to:plus::@return -plus::@return: scope:[plus] from plus - plus::return#4 = phi( plus/plus::return#1 ) +plus::@return: scope:[plus] from plus::@1 + plus::return#4 = phi( plus::@1/plus::return#1 ) plus::return#2 = plus::return#4 return to:@return +char min(char a , char b) +min: scope:[min] from plus + min::b#1 = phi( plus/min::b#0 ) + min::a#1 = phi( plus/min::a#0 ) + min::$0 = min::a#1 + min::b#1 + min::return#1 = min::$0 + to:min::@return +min::@return: scope:[min] from min + min::return#4 = phi( min/min::return#1 ) + min::return#2 = min::return#4 + return + to:@return + void __start() __start: scope:[__start] from call main @@ -46,6 +66,20 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 +char min(char a , char b) +char min::$0 +char min::a +char min::a#0 +char min::a#1 +char min::b +char min::b#0 +char min::b#1 +char min::return +char min::return#0 +char min::return#1 +char min::return#2 +char min::return#3 +char min::return#4 __bank(bank) char plus(char a , char b) char plus::$0 char plus::a @@ -74,14 +108,21 @@ Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias plus::return#0 = plus::return#3 +Alias min::return#0 = min::return#3 Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Alias min::return#1 = min::$0 min::return#4 min::return#2 Successful SSA optimization Pass2AliasElimination Identical Phi Values plus::a#1 plus::a#0 Identical Phi Values plus::b#1 plus::b#0 +Identical Phi Values min::a#1 min::a#0 +Identical Phi Values min::b#1 min::b#0 Successful SSA optimization Pass2IdenticalPhiElimination Constant plus::a#0 = '0' Constant plus::b#0 = 7 Successful SSA optimization Pass2ConstantIdentification +Constant min::a#0 = plus::a#0 +Constant min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero Removing unused procedure __start @@ -89,27 +130,40 @@ Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [5] plus::return#1 = plus::a#0 + plus::b#0 +Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant plus::return#1 = plus::a#0+plus::b#0 +Constant min::return#1 = min::a#0+min::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant min::return#0 = min::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#1 = min::return#0 Successful SSA optimization Pass2ConstantIdentification Constant plus::return#0 = plus::return#1 Successful SSA optimization Pass2ConstantIdentification Constant main::$0 = plus::return#0 Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings plus::return#0 -Constant inlined plus::return#0 = plus::return#1 -Constant inlined main::$0 = plus::return#1 +Inlining constant with different constant siblings min::return#0 +Constant inlined plus::return#0 = min::return#1 +Constant inlined main::$0 = min::return#1 +Constant inlined plus::return#1 = min::return#1 +Constant inlined min::a#0 = plus::a#0 +Constant inlined min::return#0 = min::return#1 +Constant inlined min::b#0 = plus::b#0 Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of main Adding NOP phi() at start of plus +Adding NOP phi() at start of plus::@1 +Adding NOP phi() at start of min CALL GRAPH Calls in [main] to plus:1 +Calls in [plus] to min:5 Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes +Culled Empty Block label plus::@1 Adding NOP phi() at start of main Adding NOP phi() at start of plus +Adding NOP phi() at start of min FINAL CONTROL FLOW GRAPH @@ -119,7 +173,7 @@ main: scope:[main] from [1] call plus to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = plus::return#1 + [2] *SCREEN = min::return#1 to:main::@return main::@return: scope:[main] from main::@1 [3] return @@ -128,14 +182,27 @@ main::@return: scope:[main] from main::@1 __bank(bank) char plus(char a , char b) plus: scope:[plus] from main [4] phi() + [5] call min to:plus::@return plus::@return: scope:[plus] from plus - [5] return + [6] return + to:@return + +char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return to:@return VARIABLE REGISTER WEIGHTS void main() +char min(char a , char b) +char min::a +char min::b +char min::return __bank(bank) char plus(char a , char b) char plus::a char plus::b @@ -144,47 +211,57 @@ char plus::return Initial phi equivalence classes Complete equivalence classes REGISTER UPLIFT POTENTIAL REGISTERS -Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a REGISTER UPLIFT SCOPES Uplift Scope [main] Uplift Scope [plus] +Uplift Scope [min] Uplift Scope [] -Uplifting [main] best 60 combination -Uplifting [plus] best 60 combination -Uplifting [] best 60 combination +Uplifting [main] best 90 combination +Uplifting [plus] best 90 combination +Uplifting [min] best 90 combination +Uplifting [] best 90 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments -// Test a far call procedure with a calling convention PHI +// Test a procedure with calling convention PHI - case #3 // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] + .file [name="call-banked-phi-case-3-near-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] .segmentdef Basic [start=$0801] .segmentdef Code [start=$80d] .segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data // Global Constants & labels .label SCREEN = $400 -.segment stage +.segment Code // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_ram_finalize + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize plus_from_main: - jsr $ff6e - .byte plus - .byte 1 + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 jmp __b1 // main::@1 __b1: - // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 - lda #plus.return + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return sta SCREEN jmp __breturn // main::@return @@ -192,16 +269,31 @@ main: { // [3] return rts } +.segment RAM_Bank1 // plus // char plus(char a, char b) plus: { - .const a = '0' - .const b = 7 - .label return = a+b + .label a = '0' + .label b = 7 + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + min_from_plus: + jsr min jmp __breturn // plus::@return __breturn: - // [5] return + // [6] return + rts +} +.segment Code + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + jmp __breturn + // min::@return + __breturn: + // [8] return rts } // File Data @@ -210,71 +302,99 @@ ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __breturn +Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction plus_from_main: Removing instruction __b1: Removing instruction __breturn: +Removing instruction min_from_plus: +Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() +char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return __bank(bank) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b __constant char plus::b#0 = 7 // b char plus::return -__constant char plus::return#1 = plus::a#0+plus::b#0 // return FINAL ASSEMBLER -Score: 24 +Score: 51 // File Comments -// Test a far call procedure with a calling convention PHI +// Test a procedure with calling convention PHI - case #3 // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] + .file [name="call-banked-phi-case-3-near-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] .segmentdef Basic [start=$0801] .segmentdef Code [start=$80d] .segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data // Global Constants & labels .label SCREEN = $400 -.segment stage +.segment Code // main main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_ram_finalize - jsr $ff6e - .byte plus - .byte 1 + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 // main::@1 // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 - lda #plus.return + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return sta SCREEN // main::@return // } // [3] return rts } +.segment RAM_Bank1 // plus // char plus(char a, char b) plus: { - .const a = '0' - .const b = 7 - .label return = a+b + .label a = '0' + .label b = 7 + // min(a, b) + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + jsr min // plus::@return - // [5] return + // } + // [6] return + rts +} +.segment Code + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + // min::@return + // [8] return rts } // File Data diff --git a/src/test/ref/procedure-callingconvention-phi-bank-3.sym b/src/test/ref/call-banked-phi-case-3-near-0.sym similarity index 62% rename from src/test/ref/procedure-callingconvention-phi-bank-3.sym rename to src/test/ref/call-banked-phi-case-3-near-0.sym index c79872a57..f7f6861a8 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-3.sym +++ b/src/test/ref/call-banked-phi-case-3-near-0.sym @@ -1,10 +1,14 @@ __constant char * const SCREEN = (char *) 1024 void main() +char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return __bank(bank) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b __constant char plus::b#0 = 7 // b char plus::return -__constant char plus::return#1 = plus::a#0+plus::b#0 // return diff --git a/src/test/ref/call-banked-phi-case-3-near-1.asm b/src/test/ref/call-banked-phi-case-3-near-1.asm new file mode 100644 index 000000000..0a949d112 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-3-near-1.asm @@ -0,0 +1,47 @@ +// Test a procedure with calling convention PHI - case #3 + .file [name="call-banked-phi-case-3-near-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + .label SCREEN = $400 +.segment Code +main: { + // plus('0', 7) + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // SCREEN[0] = plus('0', 7) + lda #min.return + sta SCREEN + // } + rts +} +.segment RAM_Bank1 +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + jsr min + // } + rts +} +.segment Code +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + rts +} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-4.cfg b/src/test/ref/call-banked-phi-case-3-near-1.cfg similarity index 63% rename from src/test/ref/procedure-callingconvention-phi-bank-4.cfg rename to src/test/ref/call-banked-phi-case-3-near-1.cfg index ce60f7fc8..abba7b99a 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-4.cfg +++ b/src/test/ref/call-banked-phi-case-3-near-1.cfg @@ -5,7 +5,7 @@ main: scope:[main] from [1] call plus to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = plus::return#0 + [2] *SCREEN = min::return#1 to:main::@return main::@return: scope:[main] from main::@1 [3] return @@ -14,7 +14,16 @@ main::@return: scope:[main] from main::@1 __bank(bank) char plus(char a , char b) plus: scope:[plus] from main [4] phi() + [5] call min to:plus::@return plus::@return: scope:[plus] from plus - [5] return + [6] return + to:@return + +char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return to:@return diff --git a/src/test/ref/call-banked-phi-case-3-near-1.log b/src/test/ref/call-banked-phi-case-3-near-1.log new file mode 100644 index 000000000..26e30a500 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-3-near-1.log @@ -0,0 +1,401 @@ +Loading link script "call-banked-phi.ld" + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + min::a#0 = plus::a#1 + min::b#0 = plus::b#1 + call min + min::return#0 = min::return#2 + to:plus::@1 +plus::@1: scope:[plus] from plus + min::return#3 = phi( plus/min::return#0 ) + plus::$0 = min::return#3 + plus::return#1 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus::@1 + plus::return#4 = phi( plus::@1/plus::return#1 ) + plus::return#2 = plus::return#4 + return + to:@return + +char min(char a , char b) +min: scope:[min] from plus + min::b#1 = phi( plus/min::b#0 ) + min::a#1 = phi( plus/min::a#0 ) + min::$0 = min::a#1 + min::b#1 + min::return#1 = min::$0 + to:min::@return +min::@return: scope:[min] from min + min::return#4 = phi( min/min::return#1 ) + min::return#2 = min::return#4 + 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 +__constant char * const SCREEN = (char *)$400 +void __start() +void main() +char main::$0 +char min(char a , char b) +char min::$0 +char min::a +char min::a#0 +char min::a#1 +char min::b +char min::b#0 +char min::b#1 +char min::return +char min::return#0 +char min::return#1 +char min::return#2 +char min::return#3 +char min::return#4 +__bank(bank) char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 +Alias min::return#0 = min::return#3 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Alias min::return#1 = min::$0 min::return#4 min::return#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Identical Phi Values min::a#1 min::a#0 +Identical Phi Values min::b#1 min::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Constant min::a#0 = plus::a#0 +Constant min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +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 +Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant min::return#1 = min::a#0+min::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant min::return#0 = min::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#1 = min::return#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#0 = plus::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings min::return#0 +Constant inlined plus::return#0 = min::return#1 +Constant inlined main::$0 = min::return#1 +Constant inlined plus::return#1 = min::return#1 +Constant inlined min::a#0 = plus::a#0 +Constant inlined min::return#0 = min::return#1 +Constant inlined min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of plus::@1 +Adding NOP phi() at start of min +CALL GRAPH +Calls in [main] to plus:1 +Calls in [plus] to min:5 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Culled Empty Block label plus::@1 +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of min + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +char min(char a , char b) +char min::a +char min::b +char min::return +__bank(bank) char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [plus] +Uplift Scope [min] +Uplift Scope [] + +Uplifting [main] best 90 combination +Uplifting [plus] best 90 combination +Uplifting [min] best 90 combination +Uplifting [] best 90 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention PHI - case #3 + // Upstart + .file [name="call-banked-phi-case-3-near-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + plus_from_main: + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + min_from_plus: + jsr min + jmp __breturn + // plus::@return + __breturn: + // [6] return + rts +} +.segment Code + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + jmp __breturn + // min::@return + __breturn: + // [8] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction min_from_plus: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void main() +char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + + + +FINAL ASSEMBLER +Score: 51 + + // File Comments +// Test a procedure with calling convention PHI - case #3 + // Upstart + .file [name="call-banked-phi-case-3-near-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + jsr min + // plus::@return + // } + // [6] return + rts +} +.segment Code + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + // min::@return + // [8] return + rts +} + // File Data + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-4.sym b/src/test/ref/call-banked-phi-case-3-near-1.sym similarity index 62% rename from src/test/ref/procedure-callingconvention-phi-bank-4.sym rename to src/test/ref/call-banked-phi-case-3-near-1.sym index b274ece82..f7f6861a8 100644 --- a/src/test/ref/procedure-callingconvention-phi-bank-4.sym +++ b/src/test/ref/call-banked-phi-case-3-near-1.sym @@ -1,10 +1,14 @@ __constant char * const SCREEN = (char *) 1024 void main() +char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return __bank(bank) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b __constant char plus::b#0 = 7 // b char plus::return -__constant char plus::return#0 = plus::a#0+plus::b#0 // return diff --git a/src/test/ref/call-banked-phi-case-4-near-0.asm b/src/test/ref/call-banked-phi-case-4-near-0.asm new file mode 100644 index 000000000..c26348046 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-4-near-0.asm @@ -0,0 +1,46 @@ +// Test a procedure with calling convention PHI - case #4 + .file [name="call-banked-phi-case-4-near-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + .label SCREEN = $400 +.segment Code +main: { + // plus('0', 7) + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // SCREEN[0] = plus('0', 7) + lda #min.return + sta SCREEN + // } + rts +} +.segment RAM_Bank1 +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + jsr min + // } + rts +} +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + rts +} diff --git a/src/test/ref/call-banked-phi-case-4-near-0.cfg b/src/test/ref/call-banked-phi-case-4-near-0.cfg new file mode 100644 index 000000000..cfd75e701 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-4-near-0.cfg @@ -0,0 +1,29 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return diff --git a/src/test/ref/call-banked-phi-case-4-near-0.log b/src/test/ref/call-banked-phi-case-4-near-0.log new file mode 100644 index 000000000..a484d0a46 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-4-near-0.log @@ -0,0 +1,399 @@ +Loading link script "call-banked-phi.ld" + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + min::a#0 = plus::a#1 + min::b#0 = plus::b#1 + call min + min::return#0 = min::return#2 + to:plus::@1 +plus::@1: scope:[plus] from plus + min::return#3 = phi( plus/min::return#0 ) + plus::$0 = min::return#3 + plus::return#1 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus::@1 + plus::return#4 = phi( plus::@1/plus::return#1 ) + plus::return#2 = plus::return#4 + return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + min::b#1 = phi( plus/min::b#0 ) + min::a#1 = phi( plus/min::a#0 ) + min::$0 = min::a#1 + min::b#1 + min::return#1 = min::$0 + to:min::@return +min::@return: scope:[min] from min + min::return#4 = phi( min/min::return#1 ) + min::return#2 = min::return#4 + 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 +__constant char * const SCREEN = (char *)$400 +void __start() +void main() +char main::$0 +__bank(bank) char min(char a , char b) +char min::$0 +char min::a +char min::a#0 +char min::a#1 +char min::b +char min::b#0 +char min::b#1 +char min::return +char min::return#0 +char min::return#1 +char min::return#2 +char min::return#3 +char min::return#4 +__bank(bank) char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 +Alias min::return#0 = min::return#3 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Alias min::return#1 = min::$0 min::return#4 min::return#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Identical Phi Values min::a#1 min::a#0 +Identical Phi Values min::b#1 min::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Constant min::a#0 = plus::a#0 +Constant min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +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 +Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant min::return#1 = min::a#0+min::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant min::return#0 = min::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#1 = min::return#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#0 = plus::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings min::return#0 +Constant inlined plus::return#0 = min::return#1 +Constant inlined main::$0 = min::return#1 +Constant inlined plus::return#1 = min::return#1 +Constant inlined min::a#0 = plus::a#0 +Constant inlined min::return#0 = min::return#1 +Constant inlined min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of plus::@1 +Adding NOP phi() at start of min +CALL GRAPH +Calls in [main] to plus:1 +Calls in [plus] to min:5 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Culled Empty Block label plus::@1 +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of min + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__bank(bank) char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [plus] +Uplift Scope [min] +Uplift Scope [] + +Uplifting [main] best 90 combination +Uplifting [plus] best 90 combination +Uplifting [min] best 90 combination +Uplifting [] best 90 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention PHI - case #4 + // Upstart + .file [name="call-banked-phi-case-4-near-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + plus_from_main: + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + min_from_plus: + jsr min + jmp __breturn + // plus::@return + __breturn: + // [6] return + rts +} + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + jmp __breturn + // min::@return + __breturn: + // [8] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction min_from_plus: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + + + +FINAL ASSEMBLER +Score: 51 + + // File Comments +// Test a procedure with calling convention PHI - case #4 + // Upstart + .file [name="call-banked-phi-case-4-near-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + jsr min + // plus::@return + // } + // [6] return + rts +} + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + // min::@return + // [8] return + rts +} + // File Data + diff --git a/src/test/ref/call-banked-phi-case-4-near-0.sym b/src/test/ref/call-banked-phi-case-4-near-0.sym new file mode 100644 index 000000000..aaff351f9 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-4-near-0.sym @@ -0,0 +1,14 @@ +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + diff --git a/src/test/ref/call-banked-phi-case-4-near-1.asm b/src/test/ref/call-banked-phi-case-4-near-1.asm new file mode 100644 index 000000000..36a00ae4a --- /dev/null +++ b/src/test/ref/call-banked-phi-case-4-near-1.asm @@ -0,0 +1,46 @@ +// Test a procedure with calling convention PHI - case #4 + .file [name="call-banked-phi-case-4-near-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + .label SCREEN = $400 +.segment Code +main: { + // plus('0', 7) + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // SCREEN[0] = plus('0', 7) + lda #min.return + sta SCREEN + // } + rts +} +.segment RAM_Bank1 +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + jsr min + // } + rts +} +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + rts +} diff --git a/src/test/ref/call-banked-phi-case-4-near-1.cfg b/src/test/ref/call-banked-phi-case-4-near-1.cfg new file mode 100644 index 000000000..cfd75e701 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-4-near-1.cfg @@ -0,0 +1,29 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return diff --git a/src/test/ref/call-banked-phi-case-4-near-1.log b/src/test/ref/call-banked-phi-case-4-near-1.log new file mode 100644 index 000000000..03c157545 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-4-near-1.log @@ -0,0 +1,399 @@ +Loading link script "call-banked-phi.ld" + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + min::a#0 = plus::a#1 + min::b#0 = plus::b#1 + call min + min::return#0 = min::return#2 + to:plus::@1 +plus::@1: scope:[plus] from plus + min::return#3 = phi( plus/min::return#0 ) + plus::$0 = min::return#3 + plus::return#1 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus::@1 + plus::return#4 = phi( plus::@1/plus::return#1 ) + plus::return#2 = plus::return#4 + return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + min::b#1 = phi( plus/min::b#0 ) + min::a#1 = phi( plus/min::a#0 ) + min::$0 = min::a#1 + min::b#1 + min::return#1 = min::$0 + to:min::@return +min::@return: scope:[min] from min + min::return#4 = phi( min/min::return#1 ) + min::return#2 = min::return#4 + 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 +__constant char * const SCREEN = (char *)$400 +void __start() +void main() +char main::$0 +__bank(bank) char min(char a , char b) +char min::$0 +char min::a +char min::a#0 +char min::a#1 +char min::b +char min::b#0 +char min::b#1 +char min::return +char min::return#0 +char min::return#1 +char min::return#2 +char min::return#3 +char min::return#4 +__bank(bank) char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 +Alias min::return#0 = min::return#3 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Alias min::return#1 = min::$0 min::return#4 min::return#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Identical Phi Values min::a#1 min::a#0 +Identical Phi Values min::b#1 min::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Constant min::a#0 = plus::a#0 +Constant min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +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 +Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant min::return#1 = min::a#0+min::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant min::return#0 = min::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#1 = min::return#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#0 = plus::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings min::return#0 +Constant inlined plus::return#0 = min::return#1 +Constant inlined main::$0 = min::return#1 +Constant inlined plus::return#1 = min::return#1 +Constant inlined min::a#0 = plus::a#0 +Constant inlined min::return#0 = min::return#1 +Constant inlined min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of plus::@1 +Adding NOP phi() at start of min +CALL GRAPH +Calls in [main] to plus:1 +Calls in [plus] to min:5 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Culled Empty Block label plus::@1 +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of min + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__bank(bank) char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [plus] +Uplift Scope [min] +Uplift Scope [] + +Uplifting [main] best 90 combination +Uplifting [plus] best 90 combination +Uplifting [min] best 90 combination +Uplifting [] best 90 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention PHI - case #4 + // Upstart + .file [name="call-banked-phi-case-4-near-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + plus_from_main: + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + min_from_plus: + jsr min + jmp __breturn + // plus::@return + __breturn: + // [6] return + rts +} + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + jmp __breturn + // min::@return + __breturn: + // [8] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction min_from_plus: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + + + +FINAL ASSEMBLER +Score: 51 + + // File Comments +// Test a procedure with calling convention PHI - case #4 + // Upstart + .file [name="call-banked-phi-case-4-near-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + jsr min + // plus::@return + // } + // [6] return + rts +} + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + // min::@return + // [8] return + rts +} + // File Data + diff --git a/src/test/ref/call-banked-phi-case-4-near-1.sym b/src/test/ref/call-banked-phi-case-4-near-1.sym new file mode 100644 index 000000000..aaff351f9 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-4-near-1.sym @@ -0,0 +1,14 @@ +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + diff --git a/src/test/ref/call-banked-phi-case-5-far-0.asm b/src/test/ref/call-banked-phi-case-5-far-0.asm new file mode 100644 index 000000000..ef978d27d --- /dev/null +++ b/src/test/ref/call-banked-phi-case-5-far-0.asm @@ -0,0 +1,50 @@ +// Test a procedure with calling convention PHI - case #4 + .file [name="call-banked-phi-case-5-far-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + .label SCREEN = $400 +.segment Code +main: { + // plus('0', 7) + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // SCREEN[0] = plus('0', 7) + lda #min.return + sta SCREEN + // } + rts +} +.segment RAM_Bank1 +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + jsr $ff6e + .byte min + .byte 2 + // } + rts +} +.segment RAM_Bank2 +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + rts +} diff --git a/src/test/ref/call-banked-phi-case-5-far-0.cfg b/src/test/ref/call-banked-phi-case-5-far-0.cfg new file mode 100644 index 000000000..cfd75e701 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-5-far-0.cfg @@ -0,0 +1,29 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return diff --git a/src/test/ref/call-banked-phi-case-5-far-0.log b/src/test/ref/call-banked-phi-case-5-far-0.log new file mode 100644 index 000000000..ea2ec7bee --- /dev/null +++ b/src/test/ref/call-banked-phi-case-5-far-0.log @@ -0,0 +1,407 @@ +Loading link script "call-banked-phi.ld" + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + min::a#0 = plus::a#1 + min::b#0 = plus::b#1 + call min + min::return#0 = min::return#2 + to:plus::@1 +plus::@1: scope:[plus] from plus + min::return#3 = phi( plus/min::return#0 ) + plus::$0 = min::return#3 + plus::return#1 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus::@1 + plus::return#4 = phi( plus::@1/plus::return#1 ) + plus::return#2 = plus::return#4 + return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + min::b#1 = phi( plus/min::b#0 ) + min::a#1 = phi( plus/min::a#0 ) + min::$0 = min::a#1 + min::b#1 + min::return#1 = min::$0 + to:min::@return +min::@return: scope:[min] from min + min::return#4 = phi( min/min::return#1 ) + min::return#2 = min::return#4 + 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 +__constant char * const SCREEN = (char *)$400 +void __start() +void main() +char main::$0 +__bank(bank) char min(char a , char b) +char min::$0 +char min::a +char min::a#0 +char min::a#1 +char min::b +char min::b#0 +char min::b#1 +char min::return +char min::return#0 +char min::return#1 +char min::return#2 +char min::return#3 +char min::return#4 +__bank(bank) char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 +Alias min::return#0 = min::return#3 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Alias min::return#1 = min::$0 min::return#4 min::return#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Identical Phi Values min::a#1 min::a#0 +Identical Phi Values min::b#1 min::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Constant min::a#0 = plus::a#0 +Constant min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +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 +Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant min::return#1 = min::a#0+min::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant min::return#0 = min::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#1 = min::return#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#0 = plus::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings min::return#0 +Constant inlined plus::return#0 = min::return#1 +Constant inlined main::$0 = min::return#1 +Constant inlined plus::return#1 = min::return#1 +Constant inlined min::a#0 = plus::a#0 +Constant inlined min::return#0 = min::return#1 +Constant inlined min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of plus::@1 +Adding NOP phi() at start of min +CALL GRAPH +Calls in [main] to plus:1 +Calls in [plus] to min:5 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Culled Empty Block label plus::@1 +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of min + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__bank(bank) char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [plus] +Uplift Scope [min] +Uplift Scope [] + +Uplifting [main] best 90 combination +Uplifting [plus] best 90 combination +Uplifting [min] best 90 combination +Uplifting [] best 90 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention PHI - case #4 + // Upstart + .file [name="call-banked-phi-case-5-far-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + plus_from_main: + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call_cx16_ram_phi_far_finalize + min_from_plus: + jsr $ff6e + .byte min + .byte 2 + jmp __breturn + // plus::@return + __breturn: + // [6] return + rts +} +.segment RAM_Bank2 + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + jmp __breturn + // min::@return + __breturn: + // [8] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction min_from_plus: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + + + +FINAL ASSEMBLER +Score: 51 + + // File Comments +// Test a procedure with calling convention PHI - case #4 + // Upstart + .file [name="call-banked-phi-case-5-far-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call_cx16_ram_phi_far_finalize + jsr $ff6e + .byte min + .byte 2 + // plus::@return + // } + // [6] return + rts +} +.segment RAM_Bank2 + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + // min::@return + // [8] return + rts +} + // File Data + diff --git a/src/test/ref/call-banked-phi-case-5-far-0.sym b/src/test/ref/call-banked-phi-case-5-far-0.sym new file mode 100644 index 000000000..aaff351f9 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-5-far-0.sym @@ -0,0 +1,14 @@ +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + diff --git a/src/test/ref/call-banked-phi-case-5-far-1.asm b/src/test/ref/call-banked-phi-case-5-far-1.asm new file mode 100644 index 000000000..02c828cfb --- /dev/null +++ b/src/test/ref/call-banked-phi-case-5-far-1.asm @@ -0,0 +1,50 @@ +// Test a procedure with calling convention PHI - case #4 + .file [name="call-banked-phi-case-5-far-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + .label SCREEN = $400 +.segment Code +main: { + // plus('0', 7) + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // SCREEN[0] = plus('0', 7) + lda #min.return + sta SCREEN + // } + rts +} +.segment RAM_Bank1 +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + jsr $ff6e + .byte min + .byte 2 + // } + rts +} +.segment RAM_Bank2 +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + rts +} diff --git a/src/test/ref/call-banked-phi-case-5-far-1.cfg b/src/test/ref/call-banked-phi-case-5-far-1.cfg new file mode 100644 index 000000000..cfd75e701 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-5-far-1.cfg @@ -0,0 +1,29 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return diff --git a/src/test/ref/call-banked-phi-case-5-far-1.log b/src/test/ref/call-banked-phi-case-5-far-1.log new file mode 100644 index 000000000..4527d9a6f --- /dev/null +++ b/src/test/ref/call-banked-phi-case-5-far-1.log @@ -0,0 +1,407 @@ +Loading link script "call-banked-phi.ld" + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + min::a#0 = plus::a#1 + min::b#0 = plus::b#1 + call min + min::return#0 = min::return#2 + to:plus::@1 +plus::@1: scope:[plus] from plus + min::return#3 = phi( plus/min::return#0 ) + plus::$0 = min::return#3 + plus::return#1 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus::@1 + plus::return#4 = phi( plus::@1/plus::return#1 ) + plus::return#2 = plus::return#4 + return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + min::b#1 = phi( plus/min::b#0 ) + min::a#1 = phi( plus/min::a#0 ) + min::$0 = min::a#1 + min::b#1 + min::return#1 = min::$0 + to:min::@return +min::@return: scope:[min] from min + min::return#4 = phi( min/min::return#1 ) + min::return#2 = min::return#4 + 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 +__constant char * const SCREEN = (char *)$400 +void __start() +void main() +char main::$0 +__bank(bank) char min(char a , char b) +char min::$0 +char min::a +char min::a#0 +char min::a#1 +char min::b +char min::b#0 +char min::b#1 +char min::return +char min::return#0 +char min::return#1 +char min::return#2 +char min::return#3 +char min::return#4 +__bank(bank) char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 +Alias min::return#0 = min::return#3 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Alias min::return#1 = min::$0 min::return#4 min::return#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Identical Phi Values min::a#1 min::a#0 +Identical Phi Values min::b#1 min::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Constant min::a#0 = plus::a#0 +Constant min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +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 +Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant min::return#1 = min::a#0+min::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant min::return#0 = min::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#1 = min::return#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#0 = plus::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings min::return#0 +Constant inlined plus::return#0 = min::return#1 +Constant inlined main::$0 = min::return#1 +Constant inlined plus::return#1 = min::return#1 +Constant inlined min::a#0 = plus::a#0 +Constant inlined min::return#0 = min::return#1 +Constant inlined min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of plus::@1 +Adding NOP phi() at start of min +CALL GRAPH +Calls in [main] to plus:1 +Calls in [plus] to min:5 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Culled Empty Block label plus::@1 +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of min + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__bank(bank) char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [plus] +Uplift Scope [min] +Uplift Scope [] + +Uplifting [main] best 90 combination +Uplifting [plus] best 90 combination +Uplifting [min] best 90 combination +Uplifting [] best 90 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention PHI - case #4 + // Upstart + .file [name="call-banked-phi-case-5-far-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + plus_from_main: + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call_cx16_ram_phi_far_finalize + min_from_plus: + jsr $ff6e + .byte min + .byte 2 + jmp __breturn + // plus::@return + __breturn: + // [6] return + rts +} +.segment RAM_Bank2 + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + jmp __breturn + // min::@return + __breturn: + // [8] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction min_from_plus: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + + + +FINAL ASSEMBLER +Score: 51 + + // File Comments +// Test a procedure with calling convention PHI - case #4 + // Upstart + .file [name="call-banked-phi-case-5-far-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call_cx16_ram_phi_far_finalize + jsr $ff6e + .byte min + .byte 2 + // plus::@return + // } + // [6] return + rts +} +.segment RAM_Bank2 + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + // min::@return + // [8] return + rts +} + // File Data + diff --git a/src/test/ref/call-banked-phi-case-5-far-1.sym b/src/test/ref/call-banked-phi-case-5-far-1.sym new file mode 100644 index 000000000..aaff351f9 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-5-far-1.sym @@ -0,0 +1,14 @@ +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + diff --git a/src/test/ref/call-banked-phi-case-6-close-0.asm b/src/test/ref/call-banked-phi-case-6-close-0.asm new file mode 100644 index 000000000..ab71f5d78 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-6-close-0.asm @@ -0,0 +1,52 @@ +// Test a procedure with calling convention PHI - case #6 + .file [name="call-banked-phi-case-6-close-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + .label SCREEN = $400 +.segment Code +main: { + // plus('0', 7) + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // SCREEN[0] = plus('0', 7) + lda #min.return + sta SCREEN + // } + rts +} +.segment RAM_Bank1 +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + lda #1 + sta.z 1 + pha + jsr min + pla + sta.z 1 + // } + rts +} +.segment ROM_Bank1 +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + rts +} diff --git a/src/test/ref/call-banked-phi-case-6-close-0.cfg b/src/test/ref/call-banked-phi-case-6-close-0.cfg new file mode 100644 index 000000000..cfd75e701 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-6-close-0.cfg @@ -0,0 +1,29 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return diff --git a/src/test/ref/call-banked-phi-case-6-close-0.log b/src/test/ref/call-banked-phi-case-6-close-0.log new file mode 100644 index 000000000..aba095156 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-6-close-0.log @@ -0,0 +1,412 @@ +Loading link script "call-banked-phi.ld" + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + min::a#0 = plus::a#1 + min::b#0 = plus::b#1 + call min + min::return#0 = min::return#2 + to:plus::@1 +plus::@1: scope:[plus] from plus + min::return#3 = phi( plus/min::return#0 ) + plus::$0 = min::return#3 + plus::return#1 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus::@1 + plus::return#4 = phi( plus::@1/plus::return#1 ) + plus::return#2 = plus::return#4 + return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + min::b#1 = phi( plus/min::b#0 ) + min::a#1 = phi( plus/min::a#0 ) + min::$0 = min::a#1 + min::b#1 + min::return#1 = min::$0 + to:min::@return +min::@return: scope:[min] from min + min::return#4 = phi( min/min::return#1 ) + min::return#2 = min::return#4 + 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 +__constant char * const SCREEN = (char *)$400 +void __start() +void main() +char main::$0 +__bank(bank) char min(char a , char b) +char min::$0 +char min::a +char min::a#0 +char min::a#1 +char min::b +char min::b#0 +char min::b#1 +char min::return +char min::return#0 +char min::return#1 +char min::return#2 +char min::return#3 +char min::return#4 +__bank(bank) char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 +Alias min::return#0 = min::return#3 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Alias min::return#1 = min::$0 min::return#4 min::return#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Identical Phi Values min::a#1 min::a#0 +Identical Phi Values min::b#1 min::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Constant min::a#0 = plus::a#0 +Constant min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +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 +Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant min::return#1 = min::a#0+min::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant min::return#0 = min::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#1 = min::return#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#0 = plus::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings min::return#0 +Constant inlined plus::return#0 = min::return#1 +Constant inlined main::$0 = min::return#1 +Constant inlined plus::return#1 = min::return#1 +Constant inlined min::a#0 = plus::a#0 +Constant inlined min::return#0 = min::return#1 +Constant inlined min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of plus::@1 +Adding NOP phi() at start of min +CALL GRAPH +Calls in [main] to plus:1 +Calls in [plus] to min:5 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Culled Empty Block label plus::@1 +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of min + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__bank(bank) char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [5] call min [ ] ( plus:1 [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [plus] +Uplift Scope [min] +Uplift Scope [] + +Uplifting [main] best 105 combination +Uplifting [plus] best 105 combination +Uplifting [min] best 105 combination +Uplifting [] best 105 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention PHI - case #6 + // Upstart + .file [name="call-banked-phi-case-6-close-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + plus_from_main: + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call_cx16_rom_phi_close_finalize + min_from_plus: + lda #1 + sta.z 1 + pha + jsr min + pla + sta.z 1 + jmp __breturn + // plus::@return + __breturn: + // [6] return + rts +} +.segment ROM_Bank1 + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + jmp __breturn + // min::@return + __breturn: + // [8] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction min_from_plus: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + + + +FINAL ASSEMBLER +Score: 66 + + // File Comments +// Test a procedure with calling convention PHI - case #6 + // Upstart + .file [name="call-banked-phi-case-6-close-0.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call_cx16_rom_phi_close_finalize + lda #1 + sta.z 1 + pha + jsr min + pla + sta.z 1 + // plus::@return + // } + // [6] return + rts +} +.segment ROM_Bank1 + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + // min::@return + // [8] return + rts +} + // File Data + diff --git a/src/test/ref/call-banked-phi-case-6-close-0.sym b/src/test/ref/call-banked-phi-case-6-close-0.sym new file mode 100644 index 000000000..aaff351f9 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-6-close-0.sym @@ -0,0 +1,14 @@ +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + diff --git a/src/test/ref/call-banked-phi-case-6-close-1.asm b/src/test/ref/call-banked-phi-case-6-close-1.asm new file mode 100644 index 000000000..3ab278c50 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-6-close-1.asm @@ -0,0 +1,52 @@ +// Test a procedure with calling convention PHI - case #6 + .file [name="call-banked-phi-case-6-close-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + .label SCREEN = $400 +.segment Code +main: { + // plus('0', 7) + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // SCREEN[0] = plus('0', 7) + lda #min.return + sta SCREEN + // } + rts +} +.segment RAM_Bank1 +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + lda #1 + sta.z 1 + pha + jsr min + pla + sta.z 1 + // } + rts +} +.segment ROM_Bank1 +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + rts +} diff --git a/src/test/ref/call-banked-phi-case-6-close-1.cfg b/src/test/ref/call-banked-phi-case-6-close-1.cfg new file mode 100644 index 000000000..cfd75e701 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-6-close-1.cfg @@ -0,0 +1,29 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return diff --git a/src/test/ref/call-banked-phi-case-6-close-1.log b/src/test/ref/call-banked-phi-case-6-close-1.log new file mode 100644 index 000000000..047340878 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-6-close-1.log @@ -0,0 +1,412 @@ +Loading link script "call-banked-phi.ld" + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + plus::b#1 = phi( main/plus::b#0 ) + plus::a#1 = phi( main/plus::a#0 ) + min::a#0 = plus::a#1 + min::b#0 = plus::b#1 + call min + min::return#0 = min::return#2 + to:plus::@1 +plus::@1: scope:[plus] from plus + min::return#3 = phi( plus/min::return#0 ) + plus::$0 = min::return#3 + plus::return#1 = plus::$0 + to:plus::@return +plus::@return: scope:[plus] from plus::@1 + plus::return#4 = phi( plus::@1/plus::return#1 ) + plus::return#2 = plus::return#4 + return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + min::b#1 = phi( plus/min::b#0 ) + min::a#1 = phi( plus/min::a#0 ) + min::$0 = min::a#1 + min::b#1 + min::return#1 = min::$0 + to:min::@return +min::@return: scope:[min] from min + min::return#4 = phi( min/min::return#1 ) + min::return#2 = min::return#4 + 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 +__constant char * const SCREEN = (char *)$400 +void __start() +void main() +char main::$0 +__bank(bank) char min(char a , char b) +char min::$0 +char min::a +char min::a#0 +char min::a#1 +char min::b +char min::b#0 +char min::b#1 +char min::return +char min::return#0 +char min::return#1 +char min::return#2 +char min::return#3 +char min::return#4 +__bank(bank) char plus(char a , char b) +char plus::$0 +char plus::a +char plus::a#0 +char plus::a#1 +char plus::b +char plus::b#0 +char plus::b#1 +char plus::return +char plus::return#0 +char plus::return#1 +char plus::return#2 +char plus::return#3 +char plus::return#4 + +Adding number conversion cast (unumber) 7 in plus::b#0 = 7 +Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::b#0 = (unumber)7 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast 7 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 +Alias min::return#0 = min::return#3 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Alias min::return#1 = min::$0 min::return#4 min::return#2 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values plus::a#1 plus::a#0 +Identical Phi Values plus::b#1 plus::b#0 +Identical Phi Values min::a#1 min::a#0 +Identical Phi Values min::b#1 min::b#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant plus::a#0 = '0' +Constant plus::b#0 = 7 +Successful SSA optimization Pass2ConstantIdentification +Constant min::a#0 = plus::a#0 +Constant min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Successful SSA optimization PassNSimplifyExpressionWithZero +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 +Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant min::return#1 = min::a#0+min::b#0 +Successful SSA optimization Pass2ConstantIdentification +Constant min::return#0 = min::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#1 = min::return#0 +Successful SSA optimization Pass2ConstantIdentification +Constant plus::return#0 = plus::return#1 +Successful SSA optimization Pass2ConstantIdentification +Constant main::$0 = plus::return#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with different constant siblings min::return#0 +Constant inlined plus::return#0 = min::return#1 +Constant inlined main::$0 = min::return#1 +Constant inlined plus::return#1 = min::return#1 +Constant inlined min::a#0 = plus::a#0 +Constant inlined min::return#0 = min::return#1 +Constant inlined min::b#0 = plus::b#0 +Successful SSA optimization Pass2ConstantInlining +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of plus::@1 +Adding NOP phi() at start of min +CALL GRAPH +Calls in [main] to plus:1 +Calls in [plus] to min:5 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Culled Empty Block label plus::@1 +Adding NOP phi() at start of main +Adding NOP phi() at start of plus +Adding NOP phi() at start of min + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call plus + to:main::@1 +main::@1: scope:[main] from main + [2] *SCREEN = min::return#1 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return + +__bank(bank) char plus(char a , char b) +plus: scope:[plus] from main + [4] phi() + [5] call min + to:plus::@return +plus::@return: scope:[plus] from plus + [6] return + to:@return + +__bank(bank) char min(char a , char b) +min: scope:[min] from plus + [7] phi() + to:min::@return +min::@return: scope:[min] from min + [8] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__bank(bank) char plus(char a , char b) +char plus::a +char plus::b +char plus::return + +Initial phi equivalence classes +Complete equivalence classes +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [5] call min [ ] ( plus:1 [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [plus] +Uplift Scope [min] +Uplift Scope [] + +Uplifting [main] best 105 combination +Uplifting [plus] best 105 combination +Uplifting [min] best 105 combination +Uplifting [] best 105 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test a procedure with calling convention PHI - case #6 + // Upstart + .file [name="call-banked-phi-case-6-close-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + plus_from_main: + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + jmp __b1 + // main::@1 + __b1: + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call_cx16_rom_phi_close_finalize + min_from_plus: + lda #1 + sta.z 1 + pha + jsr min + pla + sta.z 1 + jmp __breturn + // plus::@return + __breturn: + // [6] return + rts +} +.segment ROM_Bank1 + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + jmp __breturn + // min::@return + __breturn: + // [8] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction plus_from_main: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction min_from_plus: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + + + +FINAL ASSEMBLER +Score: 66 + + // File Comments +// Test a procedure with calling convention PHI - case #6 + // Upstart + .file [name="call-banked-phi-case-6-close-1.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // plus('0', 7) + // [1] call plus + // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + lda #1 + sta.z 0 + pha + jsr plus + pla + sta.z 0 + // main::@1 + // SCREEN[0] = plus('0', 7) + // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 + lda #min.return + sta SCREEN + // main::@return + // } + // [3] return + rts +} +.segment RAM_Bank1 + // plus +// char plus(char a, char b) +plus: { + .label a = '0' + .label b = 7 + // min(a, b) + // [5] call min + // [7] phi from plus to min [phi:plus->min] -- call_cx16_rom_phi_close_finalize + lda #1 + sta.z 1 + pha + jsr min + pla + sta.z 1 + // plus::@return + // } + // [6] return + rts +} +.segment ROM_Bank1 + // min +// char min(char a, char b) +min: { + .label return = plus.a+plus.b + // min::@return + // [8] return + rts +} + // File Data + diff --git a/src/test/ref/call-banked-phi-case-6-close-1.sym b/src/test/ref/call-banked-phi-case-6-close-1.sym new file mode 100644 index 000000000..aaff351f9 --- /dev/null +++ b/src/test/ref/call-banked-phi-case-6-close-1.sym @@ -0,0 +1,14 @@ +__constant char * const SCREEN = (char *) 1024 +void main() +__bank(bank) char min(char a , char b) +char min::a +char min::b +char min::return +__constant char min::return#1 = plus::a#0+plus::b#0 // return +__bank(bank) char plus(char a , char b) +char plus::a +__constant char plus::a#0 = '0' // a +char plus::b +__constant char plus::b#0 = 7 // b +char plus::return + diff --git a/src/test/ref/procedure-callingconvention-phi-bank-0.asm b/src/test/ref/procedure-callingconvention-phi-bank-0.asm deleted file mode 100644 index 4a72f9f2b..000000000 --- a/src/test/ref/procedure-callingconvention-phi-bank-0.asm +++ /dev/null @@ -1,28 +0,0 @@ -// Test a procedure with calling convention PHI -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - - .label SCREEN = $400 -.segment stage -main: { - // plus('0', 7) - jsr plus - // SCREEN[0] = plus('0', 7) - lda #plus.return - sta SCREEN - // } - rts -} -// char plus(char a, char b) -plus: { - .const a = '0' - .const b = 7 - .label return = a+b - rts -} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-1.asm b/src/test/ref/procedure-callingconvention-phi-bank-1.asm deleted file mode 100644 index 2a8a6ff0a..000000000 --- a/src/test/ref/procedure-callingconvention-phi-bank-1.asm +++ /dev/null @@ -1,31 +0,0 @@ -// Test a far call procedure with a calling convention PHI -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - - .label SCREEN = $400 -.segment stage -main: { - // plus('0', 7) - jsr $ff6e - .byte plus - .byte 1 - // SCREEN[0] = plus('0', 7) - lda #plus.return - sta SCREEN - // } - rts -} -// char plus(char a, char b) -plus: { - .const a = '0' - .const b = 7 - .label return = a+b - rts -} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-2.asm b/src/test/ref/procedure-callingconvention-phi-bank-2.asm deleted file mode 100644 index 25216b2f4..000000000 --- a/src/test/ref/procedure-callingconvention-phi-bank-2.asm +++ /dev/null @@ -1,32 +0,0 @@ -// Test a far call procedure with a calling convention PHI into ROM -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - - .label SCREEN = $400 -.segment stage -main: { - // plus('0', 7) - jsr $ff6e - .byte plus - .byte 1 - // SCREEN[0] = plus('0', 7) - lda #plus.return - sta SCREEN - // } - rts -} -// test rom bank -// char plus(char a, char b) -plus: { - .const a = '0' - .const b = 7 - .label return = a+b - rts -} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-3.asm b/src/test/ref/procedure-callingconvention-phi-bank-3.asm deleted file mode 100644 index ee036ece3..000000000 --- a/src/test/ref/procedure-callingconvention-phi-bank-3.asm +++ /dev/null @@ -1,32 +0,0 @@ -// Test a far call procedure with a calling convention PHI -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - - .label SCREEN = $400 -.segment stage -main: { - // plus('0', 7) - jsr $ff6e - .byte plus - .byte 2 - // SCREEN[0] = plus('0', 7) - lda #plus.return - sta SCREEN - // } - rts -} -// Test rom fragment -// char plus(char a, char b) -plus: { - .const a = '0' - .const b = 7 - .label return = a+b - rts -} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-4.asm b/src/test/ref/procedure-callingconvention-phi-bank-4.asm deleted file mode 100644 index e9d93e257..000000000 --- a/src/test/ref/procedure-callingconvention-phi-bank-4.asm +++ /dev/null @@ -1,31 +0,0 @@ -// Test a far call procedure with a calling convention phi -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - - .label SCREEN = $400 -.segment stage -main: { - // plus('0', 7) - jsr $ff6e - .byte plus - .byte $14 - // SCREEN[0] = plus('0', 7) - lda #plus.return - sta SCREEN - // } - rts -} -// char plus(char a, char b) -plus: { - .const a = '0' - .const b = 7 - .label return = a+b - rts -} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-4.log b/src/test/ref/procedure-callingconvention-phi-bank-4.log deleted file mode 100644 index f7da854a2..000000000 --- a/src/test/ref/procedure-callingconvention-phi-bank-4.log +++ /dev/null @@ -1,281 +0,0 @@ -Loading link script "procedure-callingconvention-phi-bank.ld" - -CONTROL FLOW GRAPH SSA - -__bank(bank) char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - plus::$0 = plus::a#1 + plus::b#1 - plus::return#0 = plus::$0 - to:plus::@return -plus::@return: scope:[plus] from plus - plus::return#3 = phi( plus/plus::return#0 ) - plus::return#1 = plus::return#3 - return - to:@return - -void main() -main: scope:[main] from __start - plus::a#0 = '0' - plus::b#0 = 7 - call plus - plus::return#2 = plus::return#1 - to:main::@1 -main::@1: scope:[main] from main - plus::return#4 = phi( main/plus::return#2 ) - main::$0 = plus::return#4 - SCREEN[0] = main::$0 - to:main::@return -main::@return: scope:[main] from main::@1 - 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 -__constant char * const SCREEN = (char *)$400 -void __start() -void main() -char main::$0 -__bank(bank) char plus(char a , char b) -char plus::$0 -char plus::a -char plus::a#0 -char plus::a#1 -char plus::b -char plus::b#0 -char plus::b#1 -char plus::return -char plus::return#0 -char plus::return#1 -char plus::return#2 -char plus::return#3 -char plus::return#4 - -Adding number conversion cast (unumber) 7 in plus::b#0 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast plus::b#0 = (unumber)7 -Successful SSA optimization Pass2InlineCast -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::$0 plus::return#3 plus::return#1 -Alias plus::return#2 = plus::return#4 -Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Successful SSA optimization Pass2IdenticalPhiElimination -Constant plus::a#0 = '0' -Constant plus::b#0 = 7 -Successful SSA optimization Pass2ConstantIdentification -Simplifying expression containing zero SCREEN in [8] SCREEN[0] = main::$0 -Successful SSA optimization PassNSimplifyExpressionWithZero -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 -Constant right-side identified [0] plus::return#0 = plus::a#0 + plus::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant plus::return#0 = plus::a#0+plus::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#2 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#2 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings plus::return#2 -Constant inlined plus::return#2 = plus::return#0 -Constant inlined main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantInlining -Adding NOP phi() at start of main -Adding NOP phi() at start of plus -CALL GRAPH -Calls in [main] to plus:1 - -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes -Adding NOP phi() at start of main -Adding NOP phi() at start of plus - -FINAL CONTROL FLOW GRAPH - -void main() -main: scope:[main] from - [0] phi() - [1] call plus - to:main::@1 -main::@1: scope:[main] from main - [2] *SCREEN = plus::return#0 - to:main::@return -main::@return: scope:[main] from main::@1 - [3] return - to:@return - -__bank(bank) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - to:plus::@return -plus::@return: scope:[plus] from plus - [5] return - to:@return - - -VARIABLE REGISTER WEIGHTS -void main() -__bank(bank) char plus(char a , char b) -char plus::a -char plus::b -char plus::return - -Initial phi equivalence classes -Complete equivalence classes -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [2] *SCREEN = plus::return#0 [ ] ( [ ] { } ) always clobbers reg byte a - -REGISTER UPLIFT SCOPES -Uplift Scope [plus] -Uplift Scope [main] -Uplift Scope [] - -Uplifting [plus] best 60 combination -Uplifting [main] best 60 combination -Uplifting [] best 60 combination - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a far call procedure with a calling convention phi - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - - // Global Constants & labels - .label SCREEN = $400 -.segment stage - // main -main: { - // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_ram_finalize - plus_from_main: - jsr $ff6e - .byte plus - .byte $14 - jmp __b1 - // main::@1 - __b1: - // [2] *SCREEN = plus::return#0 -- _deref_pbuc1=vbuc2 - lda #plus.return - sta SCREEN - jmp __breturn - // main::@return - __breturn: - // [3] return - rts -} - // plus -// char plus(char a, char b) -plus: { - .const a = '0' - .const b = 7 - .label return = a+b - jmp __breturn - // plus::@return - __breturn: - // [5] return - rts -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction plus_from_main: -Removing instruction __b1: -Removing instruction __breturn: -Removing instruction __breturn: -Succesful ASM optimization Pass5UnusedLabelElimination - -FINAL SYMBOL TABLE -__constant char * const SCREEN = (char *) 1024 -void main() -__bank(bank) char plus(char a , char b) -char plus::a -__constant char plus::a#0 = '0' // a -char plus::b -__constant char plus::b#0 = 7 // b -char plus::return -__constant char plus::return#0 = plus::a#0+plus::b#0 // return - - - -FINAL ASSEMBLER -Score: 24 - - // File Comments -// Test a far call procedure with a calling convention phi - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - - // Global Constants & labels - .label SCREEN = $400 -.segment stage - // main -main: { - // plus('0', 7) - // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_far_cx16_ram_finalize - jsr $ff6e - .byte plus - .byte $14 - // main::@1 - // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = plus::return#0 -- _deref_pbuc1=vbuc2 - lda #plus.return - sta SCREEN - // main::@return - // } - // [3] return - rts -} - // plus -// char plus(char a, char b) -plus: { - .const a = '0' - .const b = 7 - .label return = a+b - // plus::@return - // [5] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-phi-bank-5.asm b/src/test/ref/procedure-callingconvention-phi-bank-5.asm deleted file mode 100644 index b1c97a971..000000000 --- a/src/test/ref/procedure-callingconvention-phi-bank-5.asm +++ /dev/null @@ -1,312 +0,0 @@ -// The linker specification of the different segments. -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, Bank1, Bank2"] -.segmentdef Basic [start=$0801]a -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] -.segmentdef Bank2 [start=$C000, min=$C000, max=$FFFF, align=$100] - - - // The target computer platform is the Commander X16, - // which implements banking in ram between 0xA0000 and 0xBFFF, - // and in rom between 0xC000 and 0xFFFF. - .label SCREEN = $400 -.segment Code -// Practically this means that the main() function is placed in main memory ... -main: { - // func_ram_bank1_a('0', 7) - lda #7 - ldx #'0' - jsr $ff6e - .byte func_ram_bank1_a - .byte 1 - // func_ram_bank1_a('0', 7) - // SCREEN[0] = func_ram_bank1_a('0', 7) - sta SCREEN - // func_ram_bank1_b('0', 7) - jsr func_ram_bank1_b - // SCREEN[0] = func_ram_bank1_b('0', 7) - // Banked call to ram in bank 1 from main memory. - lda #func_ram_bank1_b.return - sta SCREEN - // func_ram_bank1_c('0', 7) - jsr $ff6e - .byte func_ram_bank1_c - .byte 1 - // func_ram_bank1_c('0', 7) - // SCREEN[0] = func_ram_bank1_c('0', 7) - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // func_ram_bank1_d('0', 7) - jsr $ff6e - .byte func_ram_bank1_d - .byte 1 - // func_ram_bank1_d('0', 7) - // SCREEN[0] = func_ram_bank1_d('0', 7) - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // func_ram_bank1_e('0', 7) - ldx #7 - lda #'0' - jsr $ff6e - .byte func_ram_bank1_e - .byte 1 - // func_ram_bank1_e('0', 7) - // SCREEN[0] = func_ram_bank1_e('0', 7) - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // func_ram_bank1_f('0', 7) - jsr $ff6e - .byte func_ram_bank1_f - .byte 1 - // func_ram_bank1_f('0', 7) - // SCREEN[0] = func_ram_bank1_f('0', 7) - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // func_rom_bank2_a('0', 7) - lda #7 - ldx #'0' - jsr $ff6e - .byte func_rom_bank2_a - .byte 2 - // func_rom_bank2_a('0', 7) - // SCREEN[0] = func_rom_bank2_a('0', 7) - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // func_rom_bank2_b('0', 7) - ldx #7 - lda #'0' - jsr func_rom_bank2_b - // func_rom_bank2_b('0', 7) - // SCREEN[0] = func_rom_bank2_b('0', 7) - // Banked call to rom in bank 2 from main memory. - sta SCREEN - // func_rom_bank2_c('0', 7) - jsr $ff6e - .byte func_rom_bank2_c - .byte 2 - // func_rom_bank2_c('0', 7) - // SCREEN[0] = func_rom_bank2_c('0', 7) - // Banked call to rom in bank 2 from main memory. - sta SCREEN - // func_rom_bank2_d('0', 7) - jsr $ff6e - .byte func_rom_bank2_d - .byte 2 - // func_rom_bank2_d('0', 7) - // SCREEN[0] = func_rom_bank2_d('0', 7) - // Banked call to rom in bank 2 from main memory. - sta SCREEN - // func_rom_bank2_e('0', 7) - ldx #7 - lda #'0' - jsr $ff6e - .byte func_rom_bank2_e - .byte 2 - // func_rom_bank2_e('0', 7) - // SCREEN[0] = func_rom_bank2_e('0', 7) - // Banked call to rom in bank 2 from main memory. - sta SCREEN - // func_rom_bank2_f('0', 7) - jsr $ff6e - .byte func_rom_bank2_f - .byte 2 - // func_rom_bank2_f('0', 7) - // SCREEN[0] = func_rom_bank2_f('0', 7) - // banked call to rom in bank 2 from main memory. - sta SCREEN - // func_main_a('0', 7) - ldx #7 - lda #'0' - jsr func_main_a - // func_main_a('0', 7) - // SCREEN[0] = func_main_a('0', 7) - // banked call to rom in bank 2 from main memory. - sta SCREEN - // func_main_b('0', 7) - jsr func_main_b - // func_main_b('0', 7) - // SCREEN[0] = func_main_b('0', 7) - // Near call in main memory from main memory. - sta SCREEN - // } - rts -} -.segment Bank1 -// Functional code -// __register(A) char func_ram_bank1_a(__register(X) char a, __register(A) char b) -func_ram_bank1_a: { - // a + b - stx.z $ff - clc - adc.z $ff - // } - rts -} -.segment Bank2 -// The sequent functions will consider no banking calculations anymore. -// The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram. -// char func_ram_bank1_b(char a, char b) -func_ram_bank1_b: { - .const a = '0' - .const b = 7 - .label return = a+b - rts -} -.segment Bank1 -// __register(A) char func_ram_bank1_c(char a, char b) -func_ram_bank1_c: { - .const a = '0' - .const b = 7 - // func_ram_bank1_a(a, b) - lda #b - ldx #a - jsr func_ram_bank1_a - // func_ram_bank1_a(a, b) - // } - rts -} -// __register(A) char func_ram_bank1_d(char a, char b) -func_ram_bank1_d: { - .const a = '0' - .const b = 7 - // func_rom_bank2_a(a, b) - lda #b - ldx #a - jsr $ff6e - .byte func_rom_bank2_a - .byte 2 - // func_rom_bank2_a(a, b) - // } - rts -} -// __register(A) char func_ram_bank1_e(__register(A) char a, __register(X) char b) -func_ram_bank1_e: { - // func_rom_bank2_b(a, b) - jsr func_rom_bank2_b - // func_rom_bank2_b(a, b) - // } - rts -} -// __register(A) char func_ram_bank1_f(char a, char b) -func_ram_bank1_f: { - .const a = '0' - .const b = 7 - // func_main_a(a, b) - ldx #b - lda #a - jsr func_main_a - // func_main_a(a, b) - // } - rts -} -.segment Bank2 -// The sequent functions will be banked using call method rom in bank number 2. -// __register(A) char func_rom_bank2_a(__register(X) char a, __register(A) char b) -func_rom_bank2_a: { - // a + b - stx.z $ff - clc - adc.z $ff - // } - rts -} -// The __bank directive declares this function to be banked using call method rom in bank number 2 of banked rom. -// __register(A) char func_rom_bank2_b(__register(A) char a, __register(X) char b) -func_rom_bank2_b: { - // a + b - stx.z $ff - clc - adc.z $ff - // } - rts -} -// __register(A) char func_rom_bank2_c(char a, char b) -func_rom_bank2_c: { - .const a = '0' - .const b = 7 - // func_ram_bank1_a(a, b) - lda #b - ldx #a - jsr $ff6e - .byte func_ram_bank1_a - .byte 1 - // func_ram_bank1_a(a, b) - // } - rts -} -// __register(A) char func_rom_bank2_d(char a, char b) -func_rom_bank2_d: { - .const a = '0' - .const b = 7 - // func_rom_bank2_a(a, b) - lda #b - ldx #a - jsr func_rom_bank2_a - // func_rom_bank2_a(a, b) - // } - rts -} -// __register(A) char func_rom_bank2_e(__register(A) char a, __register(X) char b) -func_rom_bank2_e: { - // func_rom_bank2_b(a, b) - jsr func_rom_bank2_b - // func_rom_bank2_b(a, b) - // } - rts -} -// __register(A) char func_rom_bank2_f(char a, char b) -func_rom_bank2_f: { - .const a = '0' - .const b = 7 - // func_main_a(a, b) - ldx #b - lda #a - jsr func_main_a - // func_main_a(a, b) - // } - rts -} -.segment Code -// The sequent functions will be addressed in the default main memory location (segment Code). -// Allocated in main memory. -// __register(A) char func_main_a(__register(A) char a, __register(X) char b) -func_main_a: { - // func_ram_bank1_e(a, b) - jsr $ff6e - .byte func_ram_bank1_e - .byte 1 - // func_ram_bank1_e(a, b) - // } - rts -} -// Allocated in main memory. -// __register(A) char func_main_b(char a, char b) -func_main_b: { - .const a = '0' - .const b = 7 - // func_rom_bank2_e(a, b) - ldx #b - lda #a - jsr $ff6e - .byte func_rom_bank2_e - .byte 2 - // func_rom_bank2_e(a, b) - // } - rts -} diff --git a/src/test/ref/procedure-callingconvention-phi-bank-5.cfg b/src/test/ref/procedure-callingconvention-phi-bank-5.cfg deleted file mode 100644 index 12023844b..000000000 --- a/src/test/ref/procedure-callingconvention-phi-bank-5.cfg +++ /dev/null @@ -1,267 +0,0 @@ - -void main() -main: scope:[main] from - [0] phi() - [1] call func_ram_bank1_a - [2] func_ram_bank1_a::return#4 = func_ram_bank1_a::return#0 - to:main::@1 -main::@1: scope:[main] from main - [3] main::$0 = func_ram_bank1_a::return#4 - [4] *SCREEN = main::$0 - [5] call func_ram_bank1_b - to:main::@2 -main::@2: scope:[main] from main::@1 - [6] *SCREEN = func_ram_bank1_b::return#0 - [7] call func_ram_bank1_c - [8] func_ram_bank1_c::return#2 = func_ram_bank1_c::return#0 - to:main::@3 -main::@3: scope:[main] from main::@2 - [9] main::$2 = func_ram_bank1_c::return#2 - [10] *SCREEN = main::$2 - [11] call func_ram_bank1_d - [12] func_ram_bank1_d::return#2 = func_ram_bank1_d::return#0 - to:main::@4 -main::@4: scope:[main] from main::@3 - [13] main::$3 = func_ram_bank1_d::return#2 - [14] *SCREEN = main::$3 - [15] call func_ram_bank1_e - [16] func_ram_bank1_e::return#3 = func_ram_bank1_e::return#0 - to:main::@5 -main::@5: scope:[main] from main::@4 - [17] main::$4 = func_ram_bank1_e::return#3 - [18] *SCREEN = main::$4 - [19] call func_ram_bank1_f - [20] func_ram_bank1_f::return#2 = func_ram_bank1_f::return#0 - to:main::@6 -main::@6: scope:[main] from main::@5 - [21] main::$5 = func_ram_bank1_f::return#2 - [22] *SCREEN = main::$5 - [23] call func_rom_bank2_a - [24] func_rom_bank2_a::return#4 = func_rom_bank2_a::return#1 - to:main::@7 -main::@7: scope:[main] from main::@6 - [25] main::$6 = func_rom_bank2_a::return#4 - [26] *SCREEN = main::$6 - [27] call func_rom_bank2_b - [28] func_rom_bank2_b::return#4 = func_rom_bank2_b::return#1 - to:main::@8 -main::@8: scope:[main] from main::@7 - [29] main::$7 = func_rom_bank2_b::return#4 - [30] *SCREEN = main::$7 - [31] call func_rom_bank2_c - [32] func_rom_bank2_c::return#2 = func_rom_bank2_c::return#0 - to:main::@9 -main::@9: scope:[main] from main::@8 - [33] main::$8 = func_rom_bank2_c::return#2 - [34] *SCREEN = main::$8 - [35] call func_rom_bank2_d - [36] func_rom_bank2_d::return#2 = func_rom_bank2_d::return#0 - to:main::@10 -main::@10: scope:[main] from main::@9 - [37] main::$9 = func_rom_bank2_d::return#2 - [38] *SCREEN = main::$9 - [39] call func_rom_bank2_e - [40] func_rom_bank2_e::return#3 = func_rom_bank2_e::return#0 - to:main::@11 -main::@11: scope:[main] from main::@10 - [41] main::$10 = func_rom_bank2_e::return#3 - [42] *SCREEN = main::$10 - [43] call func_rom_bank2_f - [44] func_rom_bank2_f::return#2 = func_rom_bank2_f::return#0 - to:main::@12 -main::@12: scope:[main] from main::@11 - [45] main::$11 = func_rom_bank2_f::return#2 - [46] *SCREEN = main::$11 - [47] call func_main_a - [48] func_main_a::return#4 = func_main_a::return#2 - to:main::@13 -main::@13: scope:[main] from main::@12 - [49] main::$12 = func_main_a::return#4 - [50] *SCREEN = main::$12 - [51] call func_main_b - [52] func_main_b::return#2 = func_main_b::return#0 - to:main::@14 -main::@14: scope:[main] from main::@13 - [53] main::$13 = func_main_b::return#2 - [54] *SCREEN = main::$13 - to:main::@return -main::@return: scope:[main] from main::@14 - [55] return - to:@return - -__bank(bank) char func_ram_bank1_a(char a , char b) -func_ram_bank1_a: scope:[func_ram_bank1_a] from func_ram_bank1_c func_rom_bank2_c main - [56] func_ram_bank1_a::b#3 = phi( func_ram_bank1_c/func_ram_bank1_c::b#0, func_rom_bank2_c/func_rom_bank2_c::b#0, main/7 ) - [56] func_ram_bank1_a::a#3 = phi( func_ram_bank1_c/func_ram_bank1_c::a#0, func_rom_bank2_c/func_rom_bank2_c::a#0, main/'0' ) - [57] func_ram_bank1_a::return#0 = func_ram_bank1_a::a#3 + func_ram_bank1_a::b#3 - to:func_ram_bank1_a::@return -func_ram_bank1_a::@return: scope:[func_ram_bank1_a] from func_ram_bank1_a - [58] return - to:@return - -char func_ram_bank1_b(char a , char b) -func_ram_bank1_b: scope:[func_ram_bank1_b] from main::@1 - [59] phi() - to:func_ram_bank1_b::@return -func_ram_bank1_b::@return: scope:[func_ram_bank1_b] from func_ram_bank1_b - [60] return - to:@return - -__bank(bank) char func_ram_bank1_c(char a , char b) -func_ram_bank1_c: scope:[func_ram_bank1_c] from main::@2 - [61] phi() - [62] call func_ram_bank1_a - [63] func_ram_bank1_a::return#2 = func_ram_bank1_a::return#0 - to:func_ram_bank1_c::@1 -func_ram_bank1_c::@1: scope:[func_ram_bank1_c] from func_ram_bank1_c - [64] func_ram_bank1_c::return#0 = func_ram_bank1_a::return#2 - to:func_ram_bank1_c::@return -func_ram_bank1_c::@return: scope:[func_ram_bank1_c] from func_ram_bank1_c::@1 - [65] return - to:@return - -__bank(bank) char func_ram_bank1_d(char a , char b) -func_ram_bank1_d: scope:[func_ram_bank1_d] from main::@3 - [66] phi() - [67] call func_rom_bank2_a - [68] func_rom_bank2_a::return#0 = func_rom_bank2_a::return#1 - to:func_ram_bank1_d::@1 -func_ram_bank1_d::@1: scope:[func_ram_bank1_d] from func_ram_bank1_d - [69] func_ram_bank1_d::return#0 = func_rom_bank2_a::return#0 - to:func_ram_bank1_d::@return -func_ram_bank1_d::@return: scope:[func_ram_bank1_d] from func_ram_bank1_d::@1 - [70] return - to:@return - -__bank(bank) char func_ram_bank1_e(char a , char b) -func_ram_bank1_e: scope:[func_ram_bank1_e] from func_main_a main::@4 - [71] func_ram_bank1_e::b#2 = phi( func_main_a/func_ram_bank1_e::b#0, main::@4/7 ) - [71] func_ram_bank1_e::a#2 = phi( func_main_a/func_ram_bank1_e::a#0, main::@4/'0' ) - [72] func_rom_bank2_b::a#0 = func_ram_bank1_e::a#2 - [73] func_rom_bank2_b::b#0 = func_ram_bank1_e::b#2 - [74] call func_rom_bank2_b - [75] func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 - to:func_ram_bank1_e::@1 -func_ram_bank1_e::@1: scope:[func_ram_bank1_e] from func_ram_bank1_e - [76] func_ram_bank1_e::return#0 = func_rom_bank2_b::return#0 - to:func_ram_bank1_e::@return -func_ram_bank1_e::@return: scope:[func_ram_bank1_e] from func_ram_bank1_e::@1 - [77] return - to:@return - -__bank(bank) char func_ram_bank1_f(char a , char b) -func_ram_bank1_f: scope:[func_ram_bank1_f] from main::@5 - [78] phi() - [79] call func_main_a - [80] func_main_a::return#0 = func_main_a::return#2 - to:func_ram_bank1_f::@1 -func_ram_bank1_f::@1: scope:[func_ram_bank1_f] from func_ram_bank1_f - [81] func_ram_bank1_f::return#0 = func_main_a::return#0 - to:func_ram_bank1_f::@return -func_ram_bank1_f::@return: scope:[func_ram_bank1_f] from func_ram_bank1_f::@1 - [82] return - to:@return - -__bank(bank) char func_rom_bank2_a(char a , char b) -func_rom_bank2_a: scope:[func_rom_bank2_a] from func_ram_bank1_d func_rom_bank2_d main::@6 - [83] func_rom_bank2_a::b#3 = phi( func_ram_bank1_d/func_ram_bank1_d::b#0, func_rom_bank2_d/func_rom_bank2_d::b#0, main::@6/7 ) - [83] func_rom_bank2_a::a#3 = phi( func_ram_bank1_d/func_ram_bank1_d::a#0, func_rom_bank2_d/func_rom_bank2_d::a#0, main::@6/'0' ) - [84] func_rom_bank2_a::return#1 = func_rom_bank2_a::a#3 + func_rom_bank2_a::b#3 - to:func_rom_bank2_a::@return -func_rom_bank2_a::@return: scope:[func_rom_bank2_a] from func_rom_bank2_a - [85] return - to:@return - -char func_rom_bank2_b(char a , char b) -func_rom_bank2_b: scope:[func_rom_bank2_b] from func_ram_bank1_e func_rom_bank2_e main::@7 - [86] func_rom_bank2_b::b#3 = phi( func_ram_bank1_e/func_rom_bank2_b::b#0, func_rom_bank2_e/func_rom_bank2_b::b#1, main::@7/7 ) - [86] func_rom_bank2_b::a#3 = phi( func_ram_bank1_e/func_rom_bank2_b::a#0, func_rom_bank2_e/func_rom_bank2_b::a#1, main::@7/'0' ) - [87] func_rom_bank2_b::return#1 = func_rom_bank2_b::a#3 + func_rom_bank2_b::b#3 - to:func_rom_bank2_b::@return -func_rom_bank2_b::@return: scope:[func_rom_bank2_b] from func_rom_bank2_b - [88] return - to:@return - -__bank(bank) char func_rom_bank2_c(char a , char b) -func_rom_bank2_c: scope:[func_rom_bank2_c] from main::@8 - [89] phi() - [90] call func_ram_bank1_a - [91] func_ram_bank1_a::return#3 = func_ram_bank1_a::return#0 - to:func_rom_bank2_c::@1 -func_rom_bank2_c::@1: scope:[func_rom_bank2_c] from func_rom_bank2_c - [92] func_rom_bank2_c::return#0 = func_ram_bank1_a::return#3 - to:func_rom_bank2_c::@return -func_rom_bank2_c::@return: scope:[func_rom_bank2_c] from func_rom_bank2_c::@1 - [93] return - to:@return - -__bank(bank) char func_rom_bank2_d(char a , char b) -func_rom_bank2_d: scope:[func_rom_bank2_d] from main::@9 - [94] phi() - [95] call func_rom_bank2_a - [96] func_rom_bank2_a::return#3 = func_rom_bank2_a::return#1 - to:func_rom_bank2_d::@1 -func_rom_bank2_d::@1: scope:[func_rom_bank2_d] from func_rom_bank2_d - [97] func_rom_bank2_d::return#0 = func_rom_bank2_a::return#3 - to:func_rom_bank2_d::@return -func_rom_bank2_d::@return: scope:[func_rom_bank2_d] from func_rom_bank2_d::@1 - [98] return - to:@return - -__bank(bank) char func_rom_bank2_e(char a , char b) -func_rom_bank2_e: scope:[func_rom_bank2_e] from func_main_b main::@10 - [99] func_rom_bank2_e::b#2 = phi( func_main_b/func_main_b::b#0, main::@10/7 ) - [99] func_rom_bank2_e::a#2 = phi( func_main_b/func_main_b::a#0, main::@10/'0' ) - [100] func_rom_bank2_b::a#1 = func_rom_bank2_e::a#2 - [101] func_rom_bank2_b::b#1 = func_rom_bank2_e::b#2 - [102] call func_rom_bank2_b - [103] func_rom_bank2_b::return#3 = func_rom_bank2_b::return#1 - to:func_rom_bank2_e::@1 -func_rom_bank2_e::@1: scope:[func_rom_bank2_e] from func_rom_bank2_e - [104] func_rom_bank2_e::return#0 = func_rom_bank2_b::return#3 - to:func_rom_bank2_e::@return -func_rom_bank2_e::@return: scope:[func_rom_bank2_e] from func_rom_bank2_e::@1 - [105] return - to:@return - -__bank(bank) char func_rom_bank2_f(char a , char b) -func_rom_bank2_f: scope:[func_rom_bank2_f] from main::@11 - [106] phi() - [107] call func_main_a - [108] func_main_a::return#1 = func_main_a::return#2 - to:func_rom_bank2_f::@1 -func_rom_bank2_f::@1: scope:[func_rom_bank2_f] from func_rom_bank2_f - [109] func_rom_bank2_f::return#0 = func_main_a::return#1 - to:func_rom_bank2_f::@return -func_rom_bank2_f::@return: scope:[func_rom_bank2_f] from func_rom_bank2_f::@1 - [110] return - to:@return - -char func_main_a(char a , char b) -func_main_a: scope:[func_main_a] from func_ram_bank1_f func_rom_bank2_f main::@12 - [111] func_main_a::b#3 = phi( func_ram_bank1_f/func_ram_bank1_f::b#0, func_rom_bank2_f/func_rom_bank2_f::b#0, main::@12/7 ) - [111] func_main_a::a#3 = phi( func_ram_bank1_f/func_ram_bank1_f::a#0, func_rom_bank2_f/func_rom_bank2_f::a#0, main::@12/'0' ) - [112] func_ram_bank1_e::a#0 = func_main_a::a#3 - [113] func_ram_bank1_e::b#0 = func_main_a::b#3 - [114] call func_ram_bank1_e - [115] func_ram_bank1_e::return#2 = func_ram_bank1_e::return#0 - to:func_main_a::@1 -func_main_a::@1: scope:[func_main_a] from func_main_a - [116] func_main_a::return#2 = func_ram_bank1_e::return#2 - to:func_main_a::@return -func_main_a::@return: scope:[func_main_a] from func_main_a::@1 - [117] return - to:@return - -char func_main_b(char a , char b) -func_main_b: scope:[func_main_b] from main::@13 - [118] phi() - [119] call func_rom_bank2_e - [120] func_rom_bank2_e::return#2 = func_rom_bank2_e::return#0 - to:func_main_b::@1 -func_main_b::@1: scope:[func_main_b] from func_main_b - [121] func_main_b::return#0 = func_rom_bank2_e::return#2 - to:func_main_b::@return -func_main_b::@return: scope:[func_main_b] from func_main_b::@1 - [122] return - to:@return diff --git a/src/test/ref/procedure-callingconvention-phi-bank-5.log b/src/test/ref/procedure-callingconvention-phi-bank-5.log deleted file mode 100644 index 7c7b8a77a..000000000 --- a/src/test/ref/procedure-callingconvention-phi-bank-5.log +++ /dev/null @@ -1,3121 +0,0 @@ -Loading link script "procedure-callingconvention-phi-bank-5.ld" - -CONTROL FLOW GRAPH SSA - -__bank(bank) char func_ram_bank1_a(char a , char b) -func_ram_bank1_a: scope:[func_ram_bank1_a] from func_ram_bank1_c func_rom_bank2_c main - func_ram_bank1_a::b#3 = phi( func_ram_bank1_c/func_ram_bank1_a::b#0, func_rom_bank2_c/func_ram_bank1_a::b#1, main/func_ram_bank1_a::b#2 ) - func_ram_bank1_a::a#3 = phi( func_ram_bank1_c/func_ram_bank1_a::a#0, func_rom_bank2_c/func_ram_bank1_a::a#1, main/func_ram_bank1_a::a#2 ) - func_ram_bank1_a::$0 = func_ram_bank1_a::a#3 + func_ram_bank1_a::b#3 - func_ram_bank1_a::return#0 = func_ram_bank1_a::$0 - to:func_ram_bank1_a::@return -func_ram_bank1_a::@return: scope:[func_ram_bank1_a] from func_ram_bank1_a - func_ram_bank1_a::return#5 = phi( func_ram_bank1_a/func_ram_bank1_a::return#0 ) - func_ram_bank1_a::return#1 = func_ram_bank1_a::return#5 - return - to:@return - -char func_ram_bank1_b(char a , char b) -func_ram_bank1_b: scope:[func_ram_bank1_b] from main::@1 - func_ram_bank1_b::b#1 = phi( main::@1/func_ram_bank1_b::b#0 ) - func_ram_bank1_b::a#1 = phi( main::@1/func_ram_bank1_b::a#0 ) - func_ram_bank1_b::$0 = func_ram_bank1_b::a#1 + func_ram_bank1_b::b#1 - func_ram_bank1_b::return#0 = func_ram_bank1_b::$0 - to:func_ram_bank1_b::@return -func_ram_bank1_b::@return: scope:[func_ram_bank1_b] from func_ram_bank1_b - func_ram_bank1_b::return#3 = phi( func_ram_bank1_b/func_ram_bank1_b::return#0 ) - func_ram_bank1_b::return#1 = func_ram_bank1_b::return#3 - return - to:@return - -__bank(bank) char func_ram_bank1_c(char a , char b) -func_ram_bank1_c: scope:[func_ram_bank1_c] from main::@2 - func_ram_bank1_c::b#1 = phi( main::@2/func_ram_bank1_c::b#0 ) - func_ram_bank1_c::a#1 = phi( main::@2/func_ram_bank1_c::a#0 ) - func_ram_bank1_a::a#0 = func_ram_bank1_c::a#1 - func_ram_bank1_a::b#0 = func_ram_bank1_c::b#1 - call func_ram_bank1_a - func_ram_bank1_a::return#2 = func_ram_bank1_a::return#1 - to:func_ram_bank1_c::@1 -func_ram_bank1_c::@1: scope:[func_ram_bank1_c] from func_ram_bank1_c - func_ram_bank1_a::return#6 = phi( func_ram_bank1_c/func_ram_bank1_a::return#2 ) - func_ram_bank1_c::$0 = func_ram_bank1_a::return#6 - func_ram_bank1_c::return#0 = func_ram_bank1_c::$0 - to:func_ram_bank1_c::@return -func_ram_bank1_c::@return: scope:[func_ram_bank1_c] from func_ram_bank1_c::@1 - func_ram_bank1_c::return#3 = phi( func_ram_bank1_c::@1/func_ram_bank1_c::return#0 ) - func_ram_bank1_c::return#1 = func_ram_bank1_c::return#3 - return - to:@return - -__bank(bank) char func_ram_bank1_d(char a , char b) -func_ram_bank1_d: scope:[func_ram_bank1_d] from main::@3 - func_ram_bank1_d::b#1 = phi( main::@3/func_ram_bank1_d::b#0 ) - func_ram_bank1_d::a#1 = phi( main::@3/func_ram_bank1_d::a#0 ) - func_rom_bank2_a::a#0 = func_ram_bank1_d::a#1 - func_rom_bank2_a::b#0 = func_ram_bank1_d::b#1 - call func_rom_bank2_a - func_rom_bank2_a::return#0 = func_rom_bank2_a::return#2 - to:func_ram_bank1_d::@1 -func_ram_bank1_d::@1: scope:[func_ram_bank1_d] from func_ram_bank1_d - func_rom_bank2_a::return#5 = phi( func_ram_bank1_d/func_rom_bank2_a::return#0 ) - func_ram_bank1_d::$0 = func_rom_bank2_a::return#5 - func_ram_bank1_d::return#0 = func_ram_bank1_d::$0 - to:func_ram_bank1_d::@return -func_ram_bank1_d::@return: scope:[func_ram_bank1_d] from func_ram_bank1_d::@1 - func_ram_bank1_d::return#3 = phi( func_ram_bank1_d::@1/func_ram_bank1_d::return#0 ) - func_ram_bank1_d::return#1 = func_ram_bank1_d::return#3 - return - to:@return - -__bank(bank) char func_ram_bank1_e(char a , char b) -func_ram_bank1_e: scope:[func_ram_bank1_e] from func_main_a main::@4 - func_ram_bank1_e::b#2 = phi( func_main_a/func_ram_bank1_e::b#0, main::@4/func_ram_bank1_e::b#1 ) - func_ram_bank1_e::a#2 = phi( func_main_a/func_ram_bank1_e::a#0, main::@4/func_ram_bank1_e::a#1 ) - func_rom_bank2_b::a#0 = func_ram_bank1_e::a#2 - func_rom_bank2_b::b#0 = func_ram_bank1_e::b#2 - call func_rom_bank2_b - func_rom_bank2_b::return#0 = func_rom_bank2_b::return#2 - to:func_ram_bank1_e::@1 -func_ram_bank1_e::@1: scope:[func_ram_bank1_e] from func_ram_bank1_e - func_rom_bank2_b::return#5 = phi( func_ram_bank1_e/func_rom_bank2_b::return#0 ) - func_ram_bank1_e::$0 = func_rom_bank2_b::return#5 - func_ram_bank1_e::return#0 = func_ram_bank1_e::$0 - to:func_ram_bank1_e::@return -func_ram_bank1_e::@return: scope:[func_ram_bank1_e] from func_ram_bank1_e::@1 - func_ram_bank1_e::return#4 = phi( func_ram_bank1_e::@1/func_ram_bank1_e::return#0 ) - func_ram_bank1_e::return#1 = func_ram_bank1_e::return#4 - return - to:@return - -__bank(bank) char func_ram_bank1_f(char a , char b) -func_ram_bank1_f: scope:[func_ram_bank1_f] from main::@5 - func_ram_bank1_f::b#1 = phi( main::@5/func_ram_bank1_f::b#0 ) - func_ram_bank1_f::a#1 = phi( main::@5/func_ram_bank1_f::a#0 ) - func_main_a::a#0 = func_ram_bank1_f::a#1 - func_main_a::b#0 = func_ram_bank1_f::b#1 - call func_main_a - func_main_a::return#0 = func_main_a::return#3 - to:func_ram_bank1_f::@1 -func_ram_bank1_f::@1: scope:[func_ram_bank1_f] from func_ram_bank1_f - func_main_a::return#5 = phi( func_ram_bank1_f/func_main_a::return#0 ) - func_ram_bank1_f::$0 = func_main_a::return#5 - func_ram_bank1_f::return#0 = func_ram_bank1_f::$0 - to:func_ram_bank1_f::@return -func_ram_bank1_f::@return: scope:[func_ram_bank1_f] from func_ram_bank1_f::@1 - func_ram_bank1_f::return#3 = phi( func_ram_bank1_f::@1/func_ram_bank1_f::return#0 ) - func_ram_bank1_f::return#1 = func_ram_bank1_f::return#3 - return - to:@return - -__bank(bank) char func_rom_bank2_a(char a , char b) -func_rom_bank2_a: scope:[func_rom_bank2_a] from func_ram_bank1_d func_rom_bank2_d main::@6 - func_rom_bank2_a::b#3 = phi( func_ram_bank1_d/func_rom_bank2_a::b#0, func_rom_bank2_d/func_rom_bank2_a::b#1, main::@6/func_rom_bank2_a::b#2 ) - func_rom_bank2_a::a#3 = phi( func_ram_bank1_d/func_rom_bank2_a::a#0, func_rom_bank2_d/func_rom_bank2_a::a#1, main::@6/func_rom_bank2_a::a#2 ) - func_rom_bank2_a::$0 = func_rom_bank2_a::a#3 + func_rom_bank2_a::b#3 - func_rom_bank2_a::return#1 = func_rom_bank2_a::$0 - to:func_rom_bank2_a::@return -func_rom_bank2_a::@return: scope:[func_rom_bank2_a] from func_rom_bank2_a - func_rom_bank2_a::return#6 = phi( func_rom_bank2_a/func_rom_bank2_a::return#1 ) - func_rom_bank2_a::return#2 = func_rom_bank2_a::return#6 - return - to:@return - -char func_rom_bank2_b(char a , char b) -func_rom_bank2_b: scope:[func_rom_bank2_b] from func_ram_bank1_e func_rom_bank2_e main::@7 - func_rom_bank2_b::b#3 = phi( func_ram_bank1_e/func_rom_bank2_b::b#0, func_rom_bank2_e/func_rom_bank2_b::b#1, main::@7/func_rom_bank2_b::b#2 ) - func_rom_bank2_b::a#3 = phi( func_ram_bank1_e/func_rom_bank2_b::a#0, func_rom_bank2_e/func_rom_bank2_b::a#1, main::@7/func_rom_bank2_b::a#2 ) - func_rom_bank2_b::$0 = func_rom_bank2_b::a#3 + func_rom_bank2_b::b#3 - func_rom_bank2_b::return#1 = func_rom_bank2_b::$0 - to:func_rom_bank2_b::@return -func_rom_bank2_b::@return: scope:[func_rom_bank2_b] from func_rom_bank2_b - func_rom_bank2_b::return#6 = phi( func_rom_bank2_b/func_rom_bank2_b::return#1 ) - func_rom_bank2_b::return#2 = func_rom_bank2_b::return#6 - return - to:@return - -__bank(bank) char func_rom_bank2_c(char a , char b) -func_rom_bank2_c: scope:[func_rom_bank2_c] from main::@8 - func_rom_bank2_c::b#1 = phi( main::@8/func_rom_bank2_c::b#0 ) - func_rom_bank2_c::a#1 = phi( main::@8/func_rom_bank2_c::a#0 ) - func_ram_bank1_a::a#1 = func_rom_bank2_c::a#1 - func_ram_bank1_a::b#1 = func_rom_bank2_c::b#1 - call func_ram_bank1_a - func_ram_bank1_a::return#3 = func_ram_bank1_a::return#1 - to:func_rom_bank2_c::@1 -func_rom_bank2_c::@1: scope:[func_rom_bank2_c] from func_rom_bank2_c - func_ram_bank1_a::return#7 = phi( func_rom_bank2_c/func_ram_bank1_a::return#3 ) - func_rom_bank2_c::$0 = func_ram_bank1_a::return#7 - func_rom_bank2_c::return#0 = func_rom_bank2_c::$0 - to:func_rom_bank2_c::@return -func_rom_bank2_c::@return: scope:[func_rom_bank2_c] from func_rom_bank2_c::@1 - func_rom_bank2_c::return#3 = phi( func_rom_bank2_c::@1/func_rom_bank2_c::return#0 ) - func_rom_bank2_c::return#1 = func_rom_bank2_c::return#3 - return - to:@return - -__bank(bank) char func_rom_bank2_d(char a , char b) -func_rom_bank2_d: scope:[func_rom_bank2_d] from main::@9 - func_rom_bank2_d::b#1 = phi( main::@9/func_rom_bank2_d::b#0 ) - func_rom_bank2_d::a#1 = phi( main::@9/func_rom_bank2_d::a#0 ) - func_rom_bank2_a::a#1 = func_rom_bank2_d::a#1 - func_rom_bank2_a::b#1 = func_rom_bank2_d::b#1 - call func_rom_bank2_a - func_rom_bank2_a::return#3 = func_rom_bank2_a::return#2 - to:func_rom_bank2_d::@1 -func_rom_bank2_d::@1: scope:[func_rom_bank2_d] from func_rom_bank2_d - func_rom_bank2_a::return#7 = phi( func_rom_bank2_d/func_rom_bank2_a::return#3 ) - func_rom_bank2_d::$0 = func_rom_bank2_a::return#7 - func_rom_bank2_d::return#0 = func_rom_bank2_d::$0 - to:func_rom_bank2_d::@return -func_rom_bank2_d::@return: scope:[func_rom_bank2_d] from func_rom_bank2_d::@1 - func_rom_bank2_d::return#3 = phi( func_rom_bank2_d::@1/func_rom_bank2_d::return#0 ) - func_rom_bank2_d::return#1 = func_rom_bank2_d::return#3 - return - to:@return - -__bank(bank) char func_rom_bank2_e(char a , char b) -func_rom_bank2_e: scope:[func_rom_bank2_e] from func_main_b main::@10 - func_rom_bank2_e::b#2 = phi( func_main_b/func_rom_bank2_e::b#0, main::@10/func_rom_bank2_e::b#1 ) - func_rom_bank2_e::a#2 = phi( func_main_b/func_rom_bank2_e::a#0, main::@10/func_rom_bank2_e::a#1 ) - func_rom_bank2_b::a#1 = func_rom_bank2_e::a#2 - func_rom_bank2_b::b#1 = func_rom_bank2_e::b#2 - call func_rom_bank2_b - func_rom_bank2_b::return#3 = func_rom_bank2_b::return#2 - to:func_rom_bank2_e::@1 -func_rom_bank2_e::@1: scope:[func_rom_bank2_e] from func_rom_bank2_e - func_rom_bank2_b::return#7 = phi( func_rom_bank2_e/func_rom_bank2_b::return#3 ) - func_rom_bank2_e::$0 = func_rom_bank2_b::return#7 - func_rom_bank2_e::return#0 = func_rom_bank2_e::$0 - to:func_rom_bank2_e::@return -func_rom_bank2_e::@return: scope:[func_rom_bank2_e] from func_rom_bank2_e::@1 - func_rom_bank2_e::return#4 = phi( func_rom_bank2_e::@1/func_rom_bank2_e::return#0 ) - func_rom_bank2_e::return#1 = func_rom_bank2_e::return#4 - return - to:@return - -__bank(bank) char func_rom_bank2_f(char a , char b) -func_rom_bank2_f: scope:[func_rom_bank2_f] from main::@11 - func_rom_bank2_f::b#1 = phi( main::@11/func_rom_bank2_f::b#0 ) - func_rom_bank2_f::a#1 = phi( main::@11/func_rom_bank2_f::a#0 ) - func_main_a::a#1 = func_rom_bank2_f::a#1 - func_main_a::b#1 = func_rom_bank2_f::b#1 - call func_main_a - func_main_a::return#1 = func_main_a::return#3 - to:func_rom_bank2_f::@1 -func_rom_bank2_f::@1: scope:[func_rom_bank2_f] from func_rom_bank2_f - func_main_a::return#6 = phi( func_rom_bank2_f/func_main_a::return#1 ) - func_rom_bank2_f::$0 = func_main_a::return#6 - func_rom_bank2_f::return#0 = func_rom_bank2_f::$0 - to:func_rom_bank2_f::@return -func_rom_bank2_f::@return: scope:[func_rom_bank2_f] from func_rom_bank2_f::@1 - func_rom_bank2_f::return#3 = phi( func_rom_bank2_f::@1/func_rom_bank2_f::return#0 ) - func_rom_bank2_f::return#1 = func_rom_bank2_f::return#3 - return - to:@return - -char func_main_a(char a , char b) -func_main_a: scope:[func_main_a] from func_ram_bank1_f func_rom_bank2_f main::@12 - func_main_a::b#3 = phi( func_ram_bank1_f/func_main_a::b#0, func_rom_bank2_f/func_main_a::b#1, main::@12/func_main_a::b#2 ) - func_main_a::a#3 = phi( func_ram_bank1_f/func_main_a::a#0, func_rom_bank2_f/func_main_a::a#1, main::@12/func_main_a::a#2 ) - func_ram_bank1_e::a#0 = func_main_a::a#3 - func_ram_bank1_e::b#0 = func_main_a::b#3 - call func_ram_bank1_e - func_ram_bank1_e::return#2 = func_ram_bank1_e::return#1 - to:func_main_a::@1 -func_main_a::@1: scope:[func_main_a] from func_main_a - func_ram_bank1_e::return#5 = phi( func_main_a/func_ram_bank1_e::return#2 ) - func_main_a::$0 = func_ram_bank1_e::return#5 - func_main_a::return#2 = func_main_a::$0 - to:func_main_a::@return -func_main_a::@return: scope:[func_main_a] from func_main_a::@1 - func_main_a::return#7 = phi( func_main_a::@1/func_main_a::return#2 ) - func_main_a::return#3 = func_main_a::return#7 - return - to:@return - -char func_main_b(char a , char b) -func_main_b: scope:[func_main_b] from main::@13 - func_main_b::b#1 = phi( main::@13/func_main_b::b#0 ) - func_main_b::a#1 = phi( main::@13/func_main_b::a#0 ) - func_rom_bank2_e::a#0 = func_main_b::a#1 - func_rom_bank2_e::b#0 = func_main_b::b#1 - call func_rom_bank2_e - func_rom_bank2_e::return#2 = func_rom_bank2_e::return#1 - to:func_main_b::@1 -func_main_b::@1: scope:[func_main_b] from func_main_b - func_rom_bank2_e::return#5 = phi( func_main_b/func_rom_bank2_e::return#2 ) - func_main_b::$0 = func_rom_bank2_e::return#5 - func_main_b::return#0 = func_main_b::$0 - to:func_main_b::@return -func_main_b::@return: scope:[func_main_b] from func_main_b::@1 - func_main_b::return#3 = phi( func_main_b::@1/func_main_b::return#0 ) - func_main_b::return#1 = func_main_b::return#3 - return - to:@return - -void main() -main: scope:[main] from __start - func_ram_bank1_a::a#2 = '0' - func_ram_bank1_a::b#2 = 7 - call func_ram_bank1_a - func_ram_bank1_a::return#4 = func_ram_bank1_a::return#1 - to:main::@1 -main::@1: scope:[main] from main - func_ram_bank1_a::return#8 = phi( main/func_ram_bank1_a::return#4 ) - main::$0 = func_ram_bank1_a::return#8 - SCREEN[0] = main::$0 - func_ram_bank1_b::a#0 = '0' - func_ram_bank1_b::b#0 = 7 - call func_ram_bank1_b - func_ram_bank1_b::return#2 = func_ram_bank1_b::return#1 - to:main::@2 -main::@2: scope:[main] from main::@1 - func_ram_bank1_b::return#4 = phi( main::@1/func_ram_bank1_b::return#2 ) - main::$1 = func_ram_bank1_b::return#4 - SCREEN[0] = main::$1 - func_ram_bank1_c::a#0 = '0' - func_ram_bank1_c::b#0 = 7 - call func_ram_bank1_c - func_ram_bank1_c::return#2 = func_ram_bank1_c::return#1 - to:main::@3 -main::@3: scope:[main] from main::@2 - func_ram_bank1_c::return#4 = phi( main::@2/func_ram_bank1_c::return#2 ) - main::$2 = func_ram_bank1_c::return#4 - SCREEN[0] = main::$2 - func_ram_bank1_d::a#0 = '0' - func_ram_bank1_d::b#0 = 7 - call func_ram_bank1_d - func_ram_bank1_d::return#2 = func_ram_bank1_d::return#1 - to:main::@4 -main::@4: scope:[main] from main::@3 - func_ram_bank1_d::return#4 = phi( main::@3/func_ram_bank1_d::return#2 ) - main::$3 = func_ram_bank1_d::return#4 - SCREEN[0] = main::$3 - func_ram_bank1_e::a#1 = '0' - func_ram_bank1_e::b#1 = 7 - call func_ram_bank1_e - func_ram_bank1_e::return#3 = func_ram_bank1_e::return#1 - to:main::@5 -main::@5: scope:[main] from main::@4 - func_ram_bank1_e::return#6 = phi( main::@4/func_ram_bank1_e::return#3 ) - main::$4 = func_ram_bank1_e::return#6 - SCREEN[0] = main::$4 - func_ram_bank1_f::a#0 = '0' - func_ram_bank1_f::b#0 = 7 - call func_ram_bank1_f - func_ram_bank1_f::return#2 = func_ram_bank1_f::return#1 - to:main::@6 -main::@6: scope:[main] from main::@5 - func_ram_bank1_f::return#4 = phi( main::@5/func_ram_bank1_f::return#2 ) - main::$5 = func_ram_bank1_f::return#4 - SCREEN[0] = main::$5 - func_rom_bank2_a::a#2 = '0' - func_rom_bank2_a::b#2 = 7 - call func_rom_bank2_a - func_rom_bank2_a::return#4 = func_rom_bank2_a::return#2 - to:main::@7 -main::@7: scope:[main] from main::@6 - func_rom_bank2_a::return#8 = phi( main::@6/func_rom_bank2_a::return#4 ) - main::$6 = func_rom_bank2_a::return#8 - SCREEN[0] = main::$6 - func_rom_bank2_b::a#2 = '0' - func_rom_bank2_b::b#2 = 7 - call func_rom_bank2_b - func_rom_bank2_b::return#4 = func_rom_bank2_b::return#2 - to:main::@8 -main::@8: scope:[main] from main::@7 - func_rom_bank2_b::return#8 = phi( main::@7/func_rom_bank2_b::return#4 ) - main::$7 = func_rom_bank2_b::return#8 - SCREEN[0] = main::$7 - func_rom_bank2_c::a#0 = '0' - func_rom_bank2_c::b#0 = 7 - call func_rom_bank2_c - func_rom_bank2_c::return#2 = func_rom_bank2_c::return#1 - to:main::@9 -main::@9: scope:[main] from main::@8 - func_rom_bank2_c::return#4 = phi( main::@8/func_rom_bank2_c::return#2 ) - main::$8 = func_rom_bank2_c::return#4 - SCREEN[0] = main::$8 - func_rom_bank2_d::a#0 = '0' - func_rom_bank2_d::b#0 = 7 - call func_rom_bank2_d - func_rom_bank2_d::return#2 = func_rom_bank2_d::return#1 - to:main::@10 -main::@10: scope:[main] from main::@9 - func_rom_bank2_d::return#4 = phi( main::@9/func_rom_bank2_d::return#2 ) - main::$9 = func_rom_bank2_d::return#4 - SCREEN[0] = main::$9 - func_rom_bank2_e::a#1 = '0' - func_rom_bank2_e::b#1 = 7 - call func_rom_bank2_e - func_rom_bank2_e::return#3 = func_rom_bank2_e::return#1 - to:main::@11 -main::@11: scope:[main] from main::@10 - func_rom_bank2_e::return#6 = phi( main::@10/func_rom_bank2_e::return#3 ) - main::$10 = func_rom_bank2_e::return#6 - SCREEN[0] = main::$10 - func_rom_bank2_f::a#0 = '0' - func_rom_bank2_f::b#0 = 7 - call func_rom_bank2_f - func_rom_bank2_f::return#2 = func_rom_bank2_f::return#1 - to:main::@12 -main::@12: scope:[main] from main::@11 - func_rom_bank2_f::return#4 = phi( main::@11/func_rom_bank2_f::return#2 ) - main::$11 = func_rom_bank2_f::return#4 - SCREEN[0] = main::$11 - func_main_a::a#2 = '0' - func_main_a::b#2 = 7 - call func_main_a - func_main_a::return#4 = func_main_a::return#3 - to:main::@13 -main::@13: scope:[main] from main::@12 - func_main_a::return#8 = phi( main::@12/func_main_a::return#4 ) - main::$12 = func_main_a::return#8 - SCREEN[0] = main::$12 - func_main_b::a#0 = '0' - func_main_b::b#0 = 7 - call func_main_b - func_main_b::return#2 = func_main_b::return#1 - to:main::@14 -main::@14: scope:[main] from main::@13 - func_main_b::return#4 = phi( main::@13/func_main_b::return#2 ) - main::$13 = func_main_b::return#4 - SCREEN[0] = main::$13 - to:main::@return -main::@return: scope:[main] from main::@14 - 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 -__constant char * const SCREEN = (char *)$400 -void __start() -char func_main_a(char a , char b) -char func_main_a::$0 -char func_main_a::a -char func_main_a::a#0 -char func_main_a::a#1 -char func_main_a::a#2 -char func_main_a::a#3 -char func_main_a::b -char func_main_a::b#0 -char func_main_a::b#1 -char func_main_a::b#2 -char func_main_a::b#3 -char func_main_a::return -char func_main_a::return#0 -char func_main_a::return#1 -char func_main_a::return#2 -char func_main_a::return#3 -char func_main_a::return#4 -char func_main_a::return#5 -char func_main_a::return#6 -char func_main_a::return#7 -char func_main_a::return#8 -char func_main_b(char a , char b) -char func_main_b::$0 -char func_main_b::a -char func_main_b::a#0 -char func_main_b::a#1 -char func_main_b::b -char func_main_b::b#0 -char func_main_b::b#1 -char func_main_b::return -char func_main_b::return#0 -char func_main_b::return#1 -char func_main_b::return#2 -char func_main_b::return#3 -char func_main_b::return#4 -__bank(bank) char func_ram_bank1_a(char a , char b) -char func_ram_bank1_a::$0 -char func_ram_bank1_a::a -char func_ram_bank1_a::a#0 -char func_ram_bank1_a::a#1 -char func_ram_bank1_a::a#2 -char func_ram_bank1_a::a#3 -char func_ram_bank1_a::b -char func_ram_bank1_a::b#0 -char func_ram_bank1_a::b#1 -char func_ram_bank1_a::b#2 -char func_ram_bank1_a::b#3 -char func_ram_bank1_a::return -char func_ram_bank1_a::return#0 -char func_ram_bank1_a::return#1 -char func_ram_bank1_a::return#2 -char func_ram_bank1_a::return#3 -char func_ram_bank1_a::return#4 -char func_ram_bank1_a::return#5 -char func_ram_bank1_a::return#6 -char func_ram_bank1_a::return#7 -char func_ram_bank1_a::return#8 -char func_ram_bank1_b(char a , char b) -char func_ram_bank1_b::$0 -char func_ram_bank1_b::a -char func_ram_bank1_b::a#0 -char func_ram_bank1_b::a#1 -char func_ram_bank1_b::b -char func_ram_bank1_b::b#0 -char func_ram_bank1_b::b#1 -char func_ram_bank1_b::return -char func_ram_bank1_b::return#0 -char func_ram_bank1_b::return#1 -char func_ram_bank1_b::return#2 -char func_ram_bank1_b::return#3 -char func_ram_bank1_b::return#4 -__bank(bank) char func_ram_bank1_c(char a , char b) -char func_ram_bank1_c::$0 -char func_ram_bank1_c::a -char func_ram_bank1_c::a#0 -char func_ram_bank1_c::a#1 -char func_ram_bank1_c::b -char func_ram_bank1_c::b#0 -char func_ram_bank1_c::b#1 -char func_ram_bank1_c::return -char func_ram_bank1_c::return#0 -char func_ram_bank1_c::return#1 -char func_ram_bank1_c::return#2 -char func_ram_bank1_c::return#3 -char func_ram_bank1_c::return#4 -__bank(bank) char func_ram_bank1_d(char a , char b) -char func_ram_bank1_d::$0 -char func_ram_bank1_d::a -char func_ram_bank1_d::a#0 -char func_ram_bank1_d::a#1 -char func_ram_bank1_d::b -char func_ram_bank1_d::b#0 -char func_ram_bank1_d::b#1 -char func_ram_bank1_d::return -char func_ram_bank1_d::return#0 -char func_ram_bank1_d::return#1 -char func_ram_bank1_d::return#2 -char func_ram_bank1_d::return#3 -char func_ram_bank1_d::return#4 -__bank(bank) char func_ram_bank1_e(char a , char b) -char func_ram_bank1_e::$0 -char func_ram_bank1_e::a -char func_ram_bank1_e::a#0 -char func_ram_bank1_e::a#1 -char func_ram_bank1_e::a#2 -char func_ram_bank1_e::b -char func_ram_bank1_e::b#0 -char func_ram_bank1_e::b#1 -char func_ram_bank1_e::b#2 -char func_ram_bank1_e::return -char func_ram_bank1_e::return#0 -char func_ram_bank1_e::return#1 -char func_ram_bank1_e::return#2 -char func_ram_bank1_e::return#3 -char func_ram_bank1_e::return#4 -char func_ram_bank1_e::return#5 -char func_ram_bank1_e::return#6 -__bank(bank) char func_ram_bank1_f(char a , char b) -char func_ram_bank1_f::$0 -char func_ram_bank1_f::a -char func_ram_bank1_f::a#0 -char func_ram_bank1_f::a#1 -char func_ram_bank1_f::b -char func_ram_bank1_f::b#0 -char func_ram_bank1_f::b#1 -char func_ram_bank1_f::return -char func_ram_bank1_f::return#0 -char func_ram_bank1_f::return#1 -char func_ram_bank1_f::return#2 -char func_ram_bank1_f::return#3 -char func_ram_bank1_f::return#4 -__bank(bank) char func_rom_bank2_a(char a , char b) -char func_rom_bank2_a::$0 -char func_rom_bank2_a::a -char func_rom_bank2_a::a#0 -char func_rom_bank2_a::a#1 -char func_rom_bank2_a::a#2 -char func_rom_bank2_a::a#3 -char func_rom_bank2_a::b -char func_rom_bank2_a::b#0 -char func_rom_bank2_a::b#1 -char func_rom_bank2_a::b#2 -char func_rom_bank2_a::b#3 -char func_rom_bank2_a::return -char func_rom_bank2_a::return#0 -char func_rom_bank2_a::return#1 -char func_rom_bank2_a::return#2 -char func_rom_bank2_a::return#3 -char func_rom_bank2_a::return#4 -char func_rom_bank2_a::return#5 -char func_rom_bank2_a::return#6 -char func_rom_bank2_a::return#7 -char func_rom_bank2_a::return#8 -char func_rom_bank2_b(char a , char b) -char func_rom_bank2_b::$0 -char func_rom_bank2_b::a -char func_rom_bank2_b::a#0 -char func_rom_bank2_b::a#1 -char func_rom_bank2_b::a#2 -char func_rom_bank2_b::a#3 -char func_rom_bank2_b::b -char func_rom_bank2_b::b#0 -char func_rom_bank2_b::b#1 -char func_rom_bank2_b::b#2 -char func_rom_bank2_b::b#3 -char func_rom_bank2_b::return -char func_rom_bank2_b::return#0 -char func_rom_bank2_b::return#1 -char func_rom_bank2_b::return#2 -char func_rom_bank2_b::return#3 -char func_rom_bank2_b::return#4 -char func_rom_bank2_b::return#5 -char func_rom_bank2_b::return#6 -char func_rom_bank2_b::return#7 -char func_rom_bank2_b::return#8 -__bank(bank) char func_rom_bank2_c(char a , char b) -char func_rom_bank2_c::$0 -char func_rom_bank2_c::a -char func_rom_bank2_c::a#0 -char func_rom_bank2_c::a#1 -char func_rom_bank2_c::b -char func_rom_bank2_c::b#0 -char func_rom_bank2_c::b#1 -char func_rom_bank2_c::return -char func_rom_bank2_c::return#0 -char func_rom_bank2_c::return#1 -char func_rom_bank2_c::return#2 -char func_rom_bank2_c::return#3 -char func_rom_bank2_c::return#4 -__bank(bank) char func_rom_bank2_d(char a , char b) -char func_rom_bank2_d::$0 -char func_rom_bank2_d::a -char func_rom_bank2_d::a#0 -char func_rom_bank2_d::a#1 -char func_rom_bank2_d::b -char func_rom_bank2_d::b#0 -char func_rom_bank2_d::b#1 -char func_rom_bank2_d::return -char func_rom_bank2_d::return#0 -char func_rom_bank2_d::return#1 -char func_rom_bank2_d::return#2 -char func_rom_bank2_d::return#3 -char func_rom_bank2_d::return#4 -__bank(bank) char func_rom_bank2_e(char a , char b) -char func_rom_bank2_e::$0 -char func_rom_bank2_e::a -char func_rom_bank2_e::a#0 -char func_rom_bank2_e::a#1 -char func_rom_bank2_e::a#2 -char func_rom_bank2_e::b -char func_rom_bank2_e::b#0 -char func_rom_bank2_e::b#1 -char func_rom_bank2_e::b#2 -char func_rom_bank2_e::return -char func_rom_bank2_e::return#0 -char func_rom_bank2_e::return#1 -char func_rom_bank2_e::return#2 -char func_rom_bank2_e::return#3 -char func_rom_bank2_e::return#4 -char func_rom_bank2_e::return#5 -char func_rom_bank2_e::return#6 -__bank(bank) char func_rom_bank2_f(char a , char b) -char func_rom_bank2_f::$0 -char func_rom_bank2_f::a -char func_rom_bank2_f::a#0 -char func_rom_bank2_f::a#1 -char func_rom_bank2_f::b -char func_rom_bank2_f::b#0 -char func_rom_bank2_f::b#1 -char func_rom_bank2_f::return -char func_rom_bank2_f::return#0 -char func_rom_bank2_f::return#1 -char func_rom_bank2_f::return#2 -char func_rom_bank2_f::return#3 -char func_rom_bank2_f::return#4 -void main() -char main::$0 -char main::$1 -char main::$10 -char main::$11 -char main::$12 -char main::$13 -char main::$2 -char main::$3 -char main::$4 -char main::$5 -char main::$6 -char main::$7 -char main::$8 -char main::$9 - -Adding number conversion cast (unumber) 7 in func_ram_bank1_a::b#2 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 -Adding number conversion cast (unumber) 7 in func_ram_bank1_b::b#0 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$1 -Adding number conversion cast (unumber) 7 in func_ram_bank1_c::b#0 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$2 -Adding number conversion cast (unumber) 7 in func_ram_bank1_d::b#0 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$3 -Adding number conversion cast (unumber) 7 in func_ram_bank1_e::b#1 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$4 -Adding number conversion cast (unumber) 7 in func_ram_bank1_f::b#0 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$5 -Adding number conversion cast (unumber) 7 in func_rom_bank2_a::b#2 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$6 -Adding number conversion cast (unumber) 7 in func_rom_bank2_b::b#2 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$7 -Adding number conversion cast (unumber) 7 in func_rom_bank2_c::b#0 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$8 -Adding number conversion cast (unumber) 7 in func_rom_bank2_d::b#0 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$9 -Adding number conversion cast (unumber) 7 in func_rom_bank2_e::b#1 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$10 -Adding number conversion cast (unumber) 7 in func_rom_bank2_f::b#0 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$11 -Adding number conversion cast (unumber) 7 in func_main_a::b#2 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$12 -Adding number conversion cast (unumber) 7 in func_main_b::b#0 = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$13 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast func_ram_bank1_a::b#2 = (unumber)7 -Inlining cast func_ram_bank1_b::b#0 = (unumber)7 -Inlining cast func_ram_bank1_c::b#0 = (unumber)7 -Inlining cast func_ram_bank1_d::b#0 = (unumber)7 -Inlining cast func_ram_bank1_e::b#1 = (unumber)7 -Inlining cast func_ram_bank1_f::b#0 = (unumber)7 -Inlining cast func_rom_bank2_a::b#2 = (unumber)7 -Inlining cast func_rom_bank2_b::b#2 = (unumber)7 -Inlining cast func_rom_bank2_c::b#0 = (unumber)7 -Inlining cast func_rom_bank2_d::b#0 = (unumber)7 -Inlining cast func_rom_bank2_e::b#1 = (unumber)7 -Inlining cast func_rom_bank2_f::b#0 = (unumber)7 -Inlining cast func_main_a::b#2 = (unumber)7 -Inlining cast func_main_b::b#0 = (unumber)7 -Successful SSA optimization Pass2InlineCast -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias func_ram_bank1_a::return#0 = func_ram_bank1_a::$0 func_ram_bank1_a::return#5 func_ram_bank1_a::return#1 -Alias func_ram_bank1_b::return#0 = func_ram_bank1_b::$0 func_ram_bank1_b::return#3 func_ram_bank1_b::return#1 -Alias func_ram_bank1_a::return#2 = func_ram_bank1_a::return#6 -Alias func_ram_bank1_c::return#0 = func_ram_bank1_c::$0 func_ram_bank1_c::return#3 func_ram_bank1_c::return#1 -Alias func_rom_bank2_a::return#0 = func_rom_bank2_a::return#5 -Alias func_ram_bank1_d::return#0 = func_ram_bank1_d::$0 func_ram_bank1_d::return#3 func_ram_bank1_d::return#1 -Alias func_rom_bank2_b::return#0 = func_rom_bank2_b::return#5 -Alias func_ram_bank1_e::return#0 = func_ram_bank1_e::$0 func_ram_bank1_e::return#4 func_ram_bank1_e::return#1 -Alias func_main_a::return#0 = func_main_a::return#5 -Alias func_ram_bank1_f::return#0 = func_ram_bank1_f::$0 func_ram_bank1_f::return#3 func_ram_bank1_f::return#1 -Alias func_rom_bank2_a::return#1 = func_rom_bank2_a::$0 func_rom_bank2_a::return#6 func_rom_bank2_a::return#2 -Alias func_rom_bank2_b::return#1 = func_rom_bank2_b::$0 func_rom_bank2_b::return#6 func_rom_bank2_b::return#2 -Alias func_ram_bank1_a::return#3 = func_ram_bank1_a::return#7 -Alias func_rom_bank2_c::return#0 = func_rom_bank2_c::$0 func_rom_bank2_c::return#3 func_rom_bank2_c::return#1 -Alias func_rom_bank2_a::return#3 = func_rom_bank2_a::return#7 -Alias func_rom_bank2_d::return#0 = func_rom_bank2_d::$0 func_rom_bank2_d::return#3 func_rom_bank2_d::return#1 -Alias func_rom_bank2_b::return#3 = func_rom_bank2_b::return#7 -Alias func_rom_bank2_e::return#0 = func_rom_bank2_e::$0 func_rom_bank2_e::return#4 func_rom_bank2_e::return#1 -Alias func_main_a::return#1 = func_main_a::return#6 -Alias func_rom_bank2_f::return#0 = func_rom_bank2_f::$0 func_rom_bank2_f::return#3 func_rom_bank2_f::return#1 -Alias func_ram_bank1_e::return#2 = func_ram_bank1_e::return#5 -Alias func_main_a::return#2 = func_main_a::$0 func_main_a::return#7 func_main_a::return#3 -Alias func_rom_bank2_e::return#2 = func_rom_bank2_e::return#5 -Alias func_main_b::return#0 = func_main_b::$0 func_main_b::return#3 func_main_b::return#1 -Alias func_ram_bank1_a::return#4 = func_ram_bank1_a::return#8 -Alias func_ram_bank1_b::return#2 = func_ram_bank1_b::return#4 -Alias func_ram_bank1_c::return#2 = func_ram_bank1_c::return#4 -Alias func_ram_bank1_d::return#2 = func_ram_bank1_d::return#4 -Alias func_ram_bank1_e::return#3 = func_ram_bank1_e::return#6 -Alias func_ram_bank1_f::return#2 = func_ram_bank1_f::return#4 -Alias func_rom_bank2_a::return#4 = func_rom_bank2_a::return#8 -Alias func_rom_bank2_b::return#4 = func_rom_bank2_b::return#8 -Alias func_rom_bank2_c::return#2 = func_rom_bank2_c::return#4 -Alias func_rom_bank2_d::return#2 = func_rom_bank2_d::return#4 -Alias func_rom_bank2_e::return#3 = func_rom_bank2_e::return#6 -Alias func_rom_bank2_f::return#2 = func_rom_bank2_f::return#4 -Alias func_main_a::return#4 = func_main_a::return#8 -Alias func_main_b::return#2 = func_main_b::return#4 -Successful SSA optimization Pass2AliasElimination -Identical Phi Values func_ram_bank1_b::a#1 func_ram_bank1_b::a#0 -Identical Phi Values func_ram_bank1_b::b#1 func_ram_bank1_b::b#0 -Identical Phi Values func_ram_bank1_c::a#1 func_ram_bank1_c::a#0 -Identical Phi Values func_ram_bank1_c::b#1 func_ram_bank1_c::b#0 -Identical Phi Values func_ram_bank1_d::a#1 func_ram_bank1_d::a#0 -Identical Phi Values func_ram_bank1_d::b#1 func_ram_bank1_d::b#0 -Identical Phi Values func_ram_bank1_f::a#1 func_ram_bank1_f::a#0 -Identical Phi Values func_ram_bank1_f::b#1 func_ram_bank1_f::b#0 -Identical Phi Values func_rom_bank2_c::a#1 func_rom_bank2_c::a#0 -Identical Phi Values func_rom_bank2_c::b#1 func_rom_bank2_c::b#0 -Identical Phi Values func_rom_bank2_d::a#1 func_rom_bank2_d::a#0 -Identical Phi Values func_rom_bank2_d::b#1 func_rom_bank2_d::b#0 -Identical Phi Values func_rom_bank2_f::a#1 func_rom_bank2_f::a#0 -Identical Phi Values func_rom_bank2_f::b#1 func_rom_bank2_f::b#0 -Identical Phi Values func_main_b::a#1 func_main_b::a#0 -Identical Phi Values func_main_b::b#1 func_main_b::b#0 -Successful SSA optimization Pass2IdenticalPhiElimination -Constant func_ram_bank1_a::a#2 = '0' -Constant func_ram_bank1_a::b#2 = 7 -Constant func_ram_bank1_b::a#0 = '0' -Constant func_ram_bank1_b::b#0 = 7 -Constant func_ram_bank1_c::a#0 = '0' -Constant func_ram_bank1_c::b#0 = 7 -Constant func_ram_bank1_d::a#0 = '0' -Constant func_ram_bank1_d::b#0 = 7 -Constant func_ram_bank1_e::a#1 = '0' -Constant func_ram_bank1_e::b#1 = 7 -Constant func_ram_bank1_f::a#0 = '0' -Constant func_ram_bank1_f::b#0 = 7 -Constant func_rom_bank2_a::a#2 = '0' -Constant func_rom_bank2_a::b#2 = 7 -Constant func_rom_bank2_b::a#2 = '0' -Constant func_rom_bank2_b::b#2 = 7 -Constant func_rom_bank2_c::a#0 = '0' -Constant func_rom_bank2_c::b#0 = 7 -Constant func_rom_bank2_d::a#0 = '0' -Constant func_rom_bank2_d::b#0 = 7 -Constant func_rom_bank2_e::a#1 = '0' -Constant func_rom_bank2_e::b#1 = 7 -Constant func_rom_bank2_f::a#0 = '0' -Constant func_rom_bank2_f::b#0 = 7 -Constant func_main_a::a#2 = '0' -Constant func_main_a::b#2 = 7 -Constant func_main_b::a#0 = '0' -Constant func_main_b::b#0 = 7 -Successful SSA optimization Pass2ConstantIdentification -Constant func_ram_bank1_a::a#0 = func_ram_bank1_c::a#0 -Constant func_ram_bank1_a::b#0 = func_ram_bank1_c::b#0 -Constant func_rom_bank2_a::a#0 = func_ram_bank1_d::a#0 -Constant func_rom_bank2_a::b#0 = func_ram_bank1_d::b#0 -Constant func_main_a::a#0 = func_ram_bank1_f::a#0 -Constant func_main_a::b#0 = func_ram_bank1_f::b#0 -Constant func_ram_bank1_a::a#1 = func_rom_bank2_c::a#0 -Constant func_ram_bank1_a::b#1 = func_rom_bank2_c::b#0 -Constant func_rom_bank2_a::a#1 = func_rom_bank2_d::a#0 -Constant func_rom_bank2_a::b#1 = func_rom_bank2_d::b#0 -Constant func_main_a::a#1 = func_rom_bank2_f::a#0 -Constant func_main_a::b#1 = func_rom_bank2_f::b#0 -Constant func_rom_bank2_e::a#0 = func_main_b::a#0 -Constant func_rom_bank2_e::b#0 = func_main_b::b#0 -Successful SSA optimization Pass2ConstantIdentification -Simplifying expression containing zero SCREEN in [87] SCREEN[0] = main::$0 -Simplifying expression containing zero SCREEN in [93] SCREEN[0] = main::$1 -Simplifying expression containing zero SCREEN in [99] SCREEN[0] = main::$2 -Simplifying expression containing zero SCREEN in [105] SCREEN[0] = main::$3 -Simplifying expression containing zero SCREEN in [111] SCREEN[0] = main::$4 -Simplifying expression containing zero SCREEN in [117] SCREEN[0] = main::$5 -Simplifying expression containing zero SCREEN in [123] SCREEN[0] = main::$6 -Simplifying expression containing zero SCREEN in [129] SCREEN[0] = main::$7 -Simplifying expression containing zero SCREEN in [135] SCREEN[0] = main::$8 -Simplifying expression containing zero SCREEN in [141] SCREEN[0] = main::$9 -Simplifying expression containing zero SCREEN in [147] SCREEN[0] = main::$10 -Simplifying expression containing zero SCREEN in [153] SCREEN[0] = main::$11 -Simplifying expression containing zero SCREEN in [159] SCREEN[0] = main::$12 -Simplifying expression containing zero SCREEN in [165] SCREEN[0] = main::$13 -Successful SSA optimization PassNSimplifyExpressionWithZero -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 -Constant right-side identified [3] func_ram_bank1_b::return#0 = func_ram_bank1_b::a#0 + func_ram_bank1_b::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant func_ram_bank1_b::return#0 = func_ram_bank1_b::a#0+func_ram_bank1_b::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant func_ram_bank1_b::return#2 = func_ram_bank1_b::return#0 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$1 = func_ram_bank1_b::return#2 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with var siblings func_ram_bank1_a::a#2 -Inlining constant with var siblings func_ram_bank1_a::b#2 -Inlining constant with var siblings func_ram_bank1_a::a#0 -Inlining constant with var siblings func_ram_bank1_a::b#0 -Inlining constant with var siblings func_ram_bank1_a::a#1 -Inlining constant with var siblings func_ram_bank1_a::b#1 -Inlining constant with different constant siblings func_ram_bank1_b::return#2 -Inlining constant with var siblings func_ram_bank1_e::a#1 -Inlining constant with var siblings func_ram_bank1_e::b#1 -Inlining constant with var siblings func_rom_bank2_a::a#2 -Inlining constant with var siblings func_rom_bank2_a::b#2 -Inlining constant with var siblings func_rom_bank2_a::a#0 -Inlining constant with var siblings func_rom_bank2_a::b#0 -Inlining constant with var siblings func_rom_bank2_a::a#1 -Inlining constant with var siblings func_rom_bank2_a::b#1 -Inlining constant with var siblings func_rom_bank2_b::a#2 -Inlining constant with var siblings func_rom_bank2_b::b#2 -Inlining constant with var siblings func_rom_bank2_e::a#1 -Inlining constant with var siblings func_rom_bank2_e::b#1 -Inlining constant with var siblings func_rom_bank2_e::a#0 -Inlining constant with var siblings func_rom_bank2_e::b#0 -Inlining constant with var siblings func_main_a::a#2 -Inlining constant with var siblings func_main_a::b#2 -Inlining constant with var siblings func_main_a::a#0 -Inlining constant with var siblings func_main_a::b#0 -Inlining constant with var siblings func_main_a::a#1 -Inlining constant with var siblings func_main_a::b#1 -Constant inlined func_rom_bank2_e::a#0 = func_main_b::a#0 -Constant inlined func_rom_bank2_e::b#0 = func_main_b::b#0 -Constant inlined func_rom_bank2_e::a#1 = '0' -Constant inlined func_rom_bank2_e::b#1 = 7 -Constant inlined func_ram_bank1_e::b#1 = 7 -Constant inlined func_ram_bank1_e::a#1 = '0' -Constant inlined func_main_a::a#0 = func_ram_bank1_f::a#0 -Constant inlined func_main_a::b#0 = func_ram_bank1_f::b#0 -Constant inlined func_main_a::a#1 = func_rom_bank2_f::a#0 -Constant inlined func_main_a::b#1 = func_rom_bank2_f::b#0 -Constant inlined func_main_a::a#2 = '0' -Constant inlined func_main_a::b#2 = 7 -Constant inlined func_ram_bank1_a::b#2 = 7 -Constant inlined func_ram_bank1_a::b#1 = func_rom_bank2_c::b#0 -Constant inlined func_ram_bank1_a::a#2 = '0' -Constant inlined func_ram_bank1_a::b#0 = func_ram_bank1_c::b#0 -Constant inlined func_ram_bank1_a::a#1 = func_rom_bank2_c::a#0 -Constant inlined func_ram_bank1_a::a#0 = func_ram_bank1_c::a#0 -Constant inlined func_rom_bank2_a::a#0 = func_ram_bank1_d::a#0 -Constant inlined func_rom_bank2_a::b#0 = func_ram_bank1_d::b#0 -Constant inlined func_rom_bank2_a::a#1 = func_rom_bank2_d::a#0 -Constant inlined func_rom_bank2_a::b#1 = func_rom_bank2_d::b#0 -Constant inlined func_rom_bank2_a::a#2 = '0' -Constant inlined func_rom_bank2_a::b#2 = 7 -Constant inlined main::$1 = func_ram_bank1_b::return#0 -Constant inlined func_ram_bank1_b::return#2 = func_ram_bank1_b::return#0 -Constant inlined func_rom_bank2_b::a#2 = '0' -Constant inlined func_rom_bank2_b::b#2 = 7 -Successful SSA optimization Pass2ConstantInlining -Adding NOP phi() at start of main -Adding NOP phi() at start of func_ram_bank1_b -Adding NOP phi() at start of func_ram_bank1_c -Adding NOP phi() at start of func_ram_bank1_d -Adding NOP phi() at start of func_ram_bank1_f -Adding NOP phi() at start of func_rom_bank2_c -Adding NOP phi() at start of func_rom_bank2_d -Adding NOP phi() at start of func_rom_bank2_f -Adding NOP phi() at start of func_main_b -CALL GRAPH -Calls in [main] to func_ram_bank1_a:1 func_ram_bank1_b:5 func_ram_bank1_c:7 func_ram_bank1_d:11 func_ram_bank1_e:15 func_ram_bank1_f:19 func_rom_bank2_a:23 func_rom_bank2_b:27 func_rom_bank2_c:31 func_rom_bank2_d:35 func_rom_bank2_e:39 func_rom_bank2_f:43 func_main_a:47 func_main_b:51 -Calls in [func_ram_bank1_c] to func_ram_bank1_a:62 -Calls in [func_ram_bank1_d] to func_rom_bank2_a:67 -Calls in [func_ram_bank1_e] to func_rom_bank2_b:76 -Calls in [func_ram_bank1_f] to func_main_a:81 -Calls in [func_rom_bank2_c] to func_ram_bank1_a:92 -Calls in [func_rom_bank2_d] to func_rom_bank2_a:97 -Calls in [func_rom_bank2_e] to func_rom_bank2_b:106 -Calls in [func_rom_bank2_f] to func_main_a:111 -Calls in [func_main_a] to func_ram_bank1_e:120 -Calls in [func_main_b] to func_rom_bank2_e:125 - -Created 12 initial phi equivalence classes -Coalesced [74] func_rom_bank2_b::a#4 = func_rom_bank2_b::a#0 -Coalesced [75] func_rom_bank2_b::b#4 = func_rom_bank2_b::b#0 -Coalesced [104] func_rom_bank2_b::a#5 = func_rom_bank2_b::a#1 -Coalesced [105] func_rom_bank2_b::b#5 = func_rom_bank2_b::b#1 -Coalesced [118] func_ram_bank1_e::a#3 = func_ram_bank1_e::a#0 -Coalesced [119] func_ram_bank1_e::b#3 = func_ram_bank1_e::b#0 -Coalesced down to 12 phi equivalence classes -Adding NOP phi() at start of main -Adding NOP phi() at start of func_ram_bank1_b -Adding NOP phi() at start of func_ram_bank1_c -Adding NOP phi() at start of func_ram_bank1_d -Adding NOP phi() at start of func_ram_bank1_f -Adding NOP phi() at start of func_rom_bank2_c -Adding NOP phi() at start of func_rom_bank2_d -Adding NOP phi() at start of func_rom_bank2_f -Adding NOP phi() at start of func_main_b - -FINAL CONTROL FLOW GRAPH - -void main() -main: scope:[main] from - [0] phi() - [1] call func_ram_bank1_a - [2] func_ram_bank1_a::return#4 = func_ram_bank1_a::return#0 - to:main::@1 -main::@1: scope:[main] from main - [3] main::$0 = func_ram_bank1_a::return#4 - [4] *SCREEN = main::$0 - [5] call func_ram_bank1_b - to:main::@2 -main::@2: scope:[main] from main::@1 - [6] *SCREEN = func_ram_bank1_b::return#0 - [7] call func_ram_bank1_c - [8] func_ram_bank1_c::return#2 = func_ram_bank1_c::return#0 - to:main::@3 -main::@3: scope:[main] from main::@2 - [9] main::$2 = func_ram_bank1_c::return#2 - [10] *SCREEN = main::$2 - [11] call func_ram_bank1_d - [12] func_ram_bank1_d::return#2 = func_ram_bank1_d::return#0 - to:main::@4 -main::@4: scope:[main] from main::@3 - [13] main::$3 = func_ram_bank1_d::return#2 - [14] *SCREEN = main::$3 - [15] call func_ram_bank1_e - [16] func_ram_bank1_e::return#3 = func_ram_bank1_e::return#0 - to:main::@5 -main::@5: scope:[main] from main::@4 - [17] main::$4 = func_ram_bank1_e::return#3 - [18] *SCREEN = main::$4 - [19] call func_ram_bank1_f - [20] func_ram_bank1_f::return#2 = func_ram_bank1_f::return#0 - to:main::@6 -main::@6: scope:[main] from main::@5 - [21] main::$5 = func_ram_bank1_f::return#2 - [22] *SCREEN = main::$5 - [23] call func_rom_bank2_a - [24] func_rom_bank2_a::return#4 = func_rom_bank2_a::return#1 - to:main::@7 -main::@7: scope:[main] from main::@6 - [25] main::$6 = func_rom_bank2_a::return#4 - [26] *SCREEN = main::$6 - [27] call func_rom_bank2_b - [28] func_rom_bank2_b::return#4 = func_rom_bank2_b::return#1 - to:main::@8 -main::@8: scope:[main] from main::@7 - [29] main::$7 = func_rom_bank2_b::return#4 - [30] *SCREEN = main::$7 - [31] call func_rom_bank2_c - [32] func_rom_bank2_c::return#2 = func_rom_bank2_c::return#0 - to:main::@9 -main::@9: scope:[main] from main::@8 - [33] main::$8 = func_rom_bank2_c::return#2 - [34] *SCREEN = main::$8 - [35] call func_rom_bank2_d - [36] func_rom_bank2_d::return#2 = func_rom_bank2_d::return#0 - to:main::@10 -main::@10: scope:[main] from main::@9 - [37] main::$9 = func_rom_bank2_d::return#2 - [38] *SCREEN = main::$9 - [39] call func_rom_bank2_e - [40] func_rom_bank2_e::return#3 = func_rom_bank2_e::return#0 - to:main::@11 -main::@11: scope:[main] from main::@10 - [41] main::$10 = func_rom_bank2_e::return#3 - [42] *SCREEN = main::$10 - [43] call func_rom_bank2_f - [44] func_rom_bank2_f::return#2 = func_rom_bank2_f::return#0 - to:main::@12 -main::@12: scope:[main] from main::@11 - [45] main::$11 = func_rom_bank2_f::return#2 - [46] *SCREEN = main::$11 - [47] call func_main_a - [48] func_main_a::return#4 = func_main_a::return#2 - to:main::@13 -main::@13: scope:[main] from main::@12 - [49] main::$12 = func_main_a::return#4 - [50] *SCREEN = main::$12 - [51] call func_main_b - [52] func_main_b::return#2 = func_main_b::return#0 - to:main::@14 -main::@14: scope:[main] from main::@13 - [53] main::$13 = func_main_b::return#2 - [54] *SCREEN = main::$13 - to:main::@return -main::@return: scope:[main] from main::@14 - [55] return - to:@return - -__bank(bank) char func_ram_bank1_a(char a , char b) -func_ram_bank1_a: scope:[func_ram_bank1_a] from func_ram_bank1_c func_rom_bank2_c main - [56] func_ram_bank1_a::b#3 = phi( func_ram_bank1_c/func_ram_bank1_c::b#0, func_rom_bank2_c/func_rom_bank2_c::b#0, main/7 ) - [56] func_ram_bank1_a::a#3 = phi( func_ram_bank1_c/func_ram_bank1_c::a#0, func_rom_bank2_c/func_rom_bank2_c::a#0, main/'0' ) - [57] func_ram_bank1_a::return#0 = func_ram_bank1_a::a#3 + func_ram_bank1_a::b#3 - to:func_ram_bank1_a::@return -func_ram_bank1_a::@return: scope:[func_ram_bank1_a] from func_ram_bank1_a - [58] return - to:@return - -char func_ram_bank1_b(char a , char b) -func_ram_bank1_b: scope:[func_ram_bank1_b] from main::@1 - [59] phi() - to:func_ram_bank1_b::@return -func_ram_bank1_b::@return: scope:[func_ram_bank1_b] from func_ram_bank1_b - [60] return - to:@return - -__bank(bank) char func_ram_bank1_c(char a , char b) -func_ram_bank1_c: scope:[func_ram_bank1_c] from main::@2 - [61] phi() - [62] call func_ram_bank1_a - [63] func_ram_bank1_a::return#2 = func_ram_bank1_a::return#0 - to:func_ram_bank1_c::@1 -func_ram_bank1_c::@1: scope:[func_ram_bank1_c] from func_ram_bank1_c - [64] func_ram_bank1_c::return#0 = func_ram_bank1_a::return#2 - to:func_ram_bank1_c::@return -func_ram_bank1_c::@return: scope:[func_ram_bank1_c] from func_ram_bank1_c::@1 - [65] return - to:@return - -__bank(bank) char func_ram_bank1_d(char a , char b) -func_ram_bank1_d: scope:[func_ram_bank1_d] from main::@3 - [66] phi() - [67] call func_rom_bank2_a - [68] func_rom_bank2_a::return#0 = func_rom_bank2_a::return#1 - to:func_ram_bank1_d::@1 -func_ram_bank1_d::@1: scope:[func_ram_bank1_d] from func_ram_bank1_d - [69] func_ram_bank1_d::return#0 = func_rom_bank2_a::return#0 - to:func_ram_bank1_d::@return -func_ram_bank1_d::@return: scope:[func_ram_bank1_d] from func_ram_bank1_d::@1 - [70] return - to:@return - -__bank(bank) char func_ram_bank1_e(char a , char b) -func_ram_bank1_e: scope:[func_ram_bank1_e] from func_main_a main::@4 - [71] func_ram_bank1_e::b#2 = phi( func_main_a/func_ram_bank1_e::b#0, main::@4/7 ) - [71] func_ram_bank1_e::a#2 = phi( func_main_a/func_ram_bank1_e::a#0, main::@4/'0' ) - [72] func_rom_bank2_b::a#0 = func_ram_bank1_e::a#2 - [73] func_rom_bank2_b::b#0 = func_ram_bank1_e::b#2 - [74] call func_rom_bank2_b - [75] func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 - to:func_ram_bank1_e::@1 -func_ram_bank1_e::@1: scope:[func_ram_bank1_e] from func_ram_bank1_e - [76] func_ram_bank1_e::return#0 = func_rom_bank2_b::return#0 - to:func_ram_bank1_e::@return -func_ram_bank1_e::@return: scope:[func_ram_bank1_e] from func_ram_bank1_e::@1 - [77] return - to:@return - -__bank(bank) char func_ram_bank1_f(char a , char b) -func_ram_bank1_f: scope:[func_ram_bank1_f] from main::@5 - [78] phi() - [79] call func_main_a - [80] func_main_a::return#0 = func_main_a::return#2 - to:func_ram_bank1_f::@1 -func_ram_bank1_f::@1: scope:[func_ram_bank1_f] from func_ram_bank1_f - [81] func_ram_bank1_f::return#0 = func_main_a::return#0 - to:func_ram_bank1_f::@return -func_ram_bank1_f::@return: scope:[func_ram_bank1_f] from func_ram_bank1_f::@1 - [82] return - to:@return - -__bank(bank) char func_rom_bank2_a(char a , char b) -func_rom_bank2_a: scope:[func_rom_bank2_a] from func_ram_bank1_d func_rom_bank2_d main::@6 - [83] func_rom_bank2_a::b#3 = phi( func_ram_bank1_d/func_ram_bank1_d::b#0, func_rom_bank2_d/func_rom_bank2_d::b#0, main::@6/7 ) - [83] func_rom_bank2_a::a#3 = phi( func_ram_bank1_d/func_ram_bank1_d::a#0, func_rom_bank2_d/func_rom_bank2_d::a#0, main::@6/'0' ) - [84] func_rom_bank2_a::return#1 = func_rom_bank2_a::a#3 + func_rom_bank2_a::b#3 - to:func_rom_bank2_a::@return -func_rom_bank2_a::@return: scope:[func_rom_bank2_a] from func_rom_bank2_a - [85] return - to:@return - -char func_rom_bank2_b(char a , char b) -func_rom_bank2_b: scope:[func_rom_bank2_b] from func_ram_bank1_e func_rom_bank2_e main::@7 - [86] func_rom_bank2_b::b#3 = phi( func_ram_bank1_e/func_rom_bank2_b::b#0, func_rom_bank2_e/func_rom_bank2_b::b#1, main::@7/7 ) - [86] func_rom_bank2_b::a#3 = phi( func_ram_bank1_e/func_rom_bank2_b::a#0, func_rom_bank2_e/func_rom_bank2_b::a#1, main::@7/'0' ) - [87] func_rom_bank2_b::return#1 = func_rom_bank2_b::a#3 + func_rom_bank2_b::b#3 - to:func_rom_bank2_b::@return -func_rom_bank2_b::@return: scope:[func_rom_bank2_b] from func_rom_bank2_b - [88] return - to:@return - -__bank(bank) char func_rom_bank2_c(char a , char b) -func_rom_bank2_c: scope:[func_rom_bank2_c] from main::@8 - [89] phi() - [90] call func_ram_bank1_a - [91] func_ram_bank1_a::return#3 = func_ram_bank1_a::return#0 - to:func_rom_bank2_c::@1 -func_rom_bank2_c::@1: scope:[func_rom_bank2_c] from func_rom_bank2_c - [92] func_rom_bank2_c::return#0 = func_ram_bank1_a::return#3 - to:func_rom_bank2_c::@return -func_rom_bank2_c::@return: scope:[func_rom_bank2_c] from func_rom_bank2_c::@1 - [93] return - to:@return - -__bank(bank) char func_rom_bank2_d(char a , char b) -func_rom_bank2_d: scope:[func_rom_bank2_d] from main::@9 - [94] phi() - [95] call func_rom_bank2_a - [96] func_rom_bank2_a::return#3 = func_rom_bank2_a::return#1 - to:func_rom_bank2_d::@1 -func_rom_bank2_d::@1: scope:[func_rom_bank2_d] from func_rom_bank2_d - [97] func_rom_bank2_d::return#0 = func_rom_bank2_a::return#3 - to:func_rom_bank2_d::@return -func_rom_bank2_d::@return: scope:[func_rom_bank2_d] from func_rom_bank2_d::@1 - [98] return - to:@return - -__bank(bank) char func_rom_bank2_e(char a , char b) -func_rom_bank2_e: scope:[func_rom_bank2_e] from func_main_b main::@10 - [99] func_rom_bank2_e::b#2 = phi( func_main_b/func_main_b::b#0, main::@10/7 ) - [99] func_rom_bank2_e::a#2 = phi( func_main_b/func_main_b::a#0, main::@10/'0' ) - [100] func_rom_bank2_b::a#1 = func_rom_bank2_e::a#2 - [101] func_rom_bank2_b::b#1 = func_rom_bank2_e::b#2 - [102] call func_rom_bank2_b - [103] func_rom_bank2_b::return#3 = func_rom_bank2_b::return#1 - to:func_rom_bank2_e::@1 -func_rom_bank2_e::@1: scope:[func_rom_bank2_e] from func_rom_bank2_e - [104] func_rom_bank2_e::return#0 = func_rom_bank2_b::return#3 - to:func_rom_bank2_e::@return -func_rom_bank2_e::@return: scope:[func_rom_bank2_e] from func_rom_bank2_e::@1 - [105] return - to:@return - -__bank(bank) char func_rom_bank2_f(char a , char b) -func_rom_bank2_f: scope:[func_rom_bank2_f] from main::@11 - [106] phi() - [107] call func_main_a - [108] func_main_a::return#1 = func_main_a::return#2 - to:func_rom_bank2_f::@1 -func_rom_bank2_f::@1: scope:[func_rom_bank2_f] from func_rom_bank2_f - [109] func_rom_bank2_f::return#0 = func_main_a::return#1 - to:func_rom_bank2_f::@return -func_rom_bank2_f::@return: scope:[func_rom_bank2_f] from func_rom_bank2_f::@1 - [110] return - to:@return - -char func_main_a(char a , char b) -func_main_a: scope:[func_main_a] from func_ram_bank1_f func_rom_bank2_f main::@12 - [111] func_main_a::b#3 = phi( func_ram_bank1_f/func_ram_bank1_f::b#0, func_rom_bank2_f/func_rom_bank2_f::b#0, main::@12/7 ) - [111] func_main_a::a#3 = phi( func_ram_bank1_f/func_ram_bank1_f::a#0, func_rom_bank2_f/func_rom_bank2_f::a#0, main::@12/'0' ) - [112] func_ram_bank1_e::a#0 = func_main_a::a#3 - [113] func_ram_bank1_e::b#0 = func_main_a::b#3 - [114] call func_ram_bank1_e - [115] func_ram_bank1_e::return#2 = func_ram_bank1_e::return#0 - to:func_main_a::@1 -func_main_a::@1: scope:[func_main_a] from func_main_a - [116] func_main_a::return#2 = func_ram_bank1_e::return#2 - to:func_main_a::@return -func_main_a::@return: scope:[func_main_a] from func_main_a::@1 - [117] return - to:@return - -char func_main_b(char a , char b) -func_main_b: scope:[func_main_b] from main::@13 - [118] phi() - [119] call func_rom_bank2_e - [120] func_rom_bank2_e::return#2 = func_rom_bank2_e::return#0 - to:func_main_b::@1 -func_main_b::@1: scope:[func_main_b] from func_main_b - [121] func_main_b::return#0 = func_rom_bank2_e::return#2 - to:func_main_b::@return -func_main_b::@return: scope:[func_main_b] from func_main_b::@1 - [122] return - to:@return - - -VARIABLE REGISTER WEIGHTS -char func_main_a(char a , char b) -char func_main_a::a -char func_main_a::a#3 // 101.0 -char func_main_a::b -char func_main_a::b#3 // 50.5 -char func_main_a::return -char func_main_a::return#0 // 22.0 -char func_main_a::return#1 // 22.0 -char func_main_a::return#2 // 25.0 -char func_main_a::return#4 // 4.0 -char func_main_b(char a , char b) -char func_main_b::a -char func_main_b::b -char func_main_b::return -char func_main_b::return#0 // 4.333333333333333 -char func_main_b::return#2 // 4.0 -__bank(bank) char func_ram_bank1_a(char a , char b) -char func_ram_bank1_a::a -char func_ram_bank1_a::a#3 // 101.0 -char func_ram_bank1_a::b -char func_ram_bank1_a::b#3 // 101.0 -char func_ram_bank1_a::return -char func_ram_bank1_a::return#0 // 24.999999999999996 -char func_ram_bank1_a::return#2 // 22.0 -char func_ram_bank1_a::return#3 // 22.0 -char func_ram_bank1_a::return#4 // 4.0 -char func_ram_bank1_b(char a , char b) -char func_ram_bank1_b::a -char func_ram_bank1_b::b -char func_ram_bank1_b::return -__bank(bank) char func_ram_bank1_c(char a , char b) -char func_ram_bank1_c::a -char func_ram_bank1_c::b -char func_ram_bank1_c::return -char func_ram_bank1_c::return#0 // 4.333333333333333 -char func_ram_bank1_c::return#2 // 4.0 -__bank(bank) char func_ram_bank1_d(char a , char b) -char func_ram_bank1_d::a -char func_ram_bank1_d::b -char func_ram_bank1_d::return -char func_ram_bank1_d::return#0 // 4.333333333333333 -char func_ram_bank1_d::return#2 // 4.0 -__bank(bank) char func_ram_bank1_e(char a , char b) -char func_ram_bank1_e::a -char func_ram_bank1_e::a#0 // 101.0 -char func_ram_bank1_e::a#2 // 1102.0 -char func_ram_bank1_e::b -char func_ram_bank1_e::b#0 // 202.0 -char func_ram_bank1_e::b#2 // 551.0 -char func_ram_bank1_e::return -char func_ram_bank1_e::return#0 // 276.0 -char func_ram_bank1_e::return#2 // 202.0 -char func_ram_bank1_e::return#3 // 4.0 -__bank(bank) char func_ram_bank1_f(char a , char b) -char func_ram_bank1_f::a -char func_ram_bank1_f::b -char func_ram_bank1_f::return -char func_ram_bank1_f::return#0 // 4.333333333333333 -char func_ram_bank1_f::return#2 // 4.0 -__bank(bank) char func_rom_bank2_a(char a , char b) -char func_rom_bank2_a::a -char func_rom_bank2_a::a#3 // 101.0 -char func_rom_bank2_a::b -char func_rom_bank2_a::b#3 // 101.0 -char func_rom_bank2_a::return -char func_rom_bank2_a::return#0 // 22.0 -char func_rom_bank2_a::return#1 // 25.0 -char func_rom_bank2_a::return#3 // 22.0 -char func_rom_bank2_a::return#4 // 4.0 -char func_rom_bank2_b(char a , char b) -char func_rom_bank2_b::a -char func_rom_bank2_b::a#0 // 1001.0 -char func_rom_bank2_b::a#1 // 101.0 -char func_rom_bank2_b::a#3 // 11103.0 -char func_rom_bank2_b::b -char func_rom_bank2_b::b#0 // 2002.0 -char func_rom_bank2_b::b#1 // 202.0 -char func_rom_bank2_b::b#3 // 11103.0 -char func_rom_bank2_b::return -char func_rom_bank2_b::return#0 // 2002.0 -char func_rom_bank2_b::return#1 // 2221.0 -char func_rom_bank2_b::return#3 // 202.0 -char func_rom_bank2_b::return#4 // 4.0 -__bank(bank) char func_rom_bank2_c(char a , char b) -char func_rom_bank2_c::a -char func_rom_bank2_c::b -char func_rom_bank2_c::return -char func_rom_bank2_c::return#0 // 4.333333333333333 -char func_rom_bank2_c::return#2 // 4.0 -__bank(bank) char func_rom_bank2_d(char a , char b) -char func_rom_bank2_d::a -char func_rom_bank2_d::b -char func_rom_bank2_d::return -char func_rom_bank2_d::return#0 // 4.333333333333333 -char func_rom_bank2_d::return#2 // 4.0 -__bank(bank) char func_rom_bank2_e(char a , char b) -char func_rom_bank2_e::a -char func_rom_bank2_e::a#2 // 101.0 -char func_rom_bank2_e::b -char func_rom_bank2_e::b#2 // 50.5 -char func_rom_bank2_e::return -char func_rom_bank2_e::return#0 // 28.5 -char func_rom_bank2_e::return#2 // 22.0 -char func_rom_bank2_e::return#3 // 4.0 -__bank(bank) char func_rom_bank2_f(char a , char b) -char func_rom_bank2_f::a -char func_rom_bank2_f::b -char func_rom_bank2_f::return -char func_rom_bank2_f::return#0 // 4.333333333333333 -char func_rom_bank2_f::return#2 // 4.0 -void main() -char main::$0 // 4.0 -char main::$10 // 4.0 -char main::$11 // 4.0 -char main::$12 // 4.0 -char main::$13 // 4.0 -char main::$2 // 4.0 -char main::$3 // 4.0 -char main::$4 // 4.0 -char main::$5 // 4.0 -char main::$6 // 4.0 -char main::$7 // 4.0 -char main::$8 // 4.0 -char main::$9 // 4.0 - -Initial phi equivalence classes -[ func_ram_bank1_a::a#3 ] -[ func_ram_bank1_a::b#3 ] -[ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] -[ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] -[ func_rom_bank2_a::a#3 ] -[ func_rom_bank2_a::b#3 ] -[ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] -[ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] -[ func_rom_bank2_e::a#2 ] -[ func_rom_bank2_e::b#2 ] -[ func_main_a::a#3 ] -[ func_main_a::b#3 ] -Added variable func_ram_bank1_a::return#4 to live range equivalence class [ func_ram_bank1_a::return#4 ] -Added variable main::$0 to live range equivalence class [ main::$0 ] -Added variable func_ram_bank1_c::return#2 to live range equivalence class [ func_ram_bank1_c::return#2 ] -Added variable main::$2 to live range equivalence class [ main::$2 ] -Added variable func_ram_bank1_d::return#2 to live range equivalence class [ func_ram_bank1_d::return#2 ] -Added variable main::$3 to live range equivalence class [ main::$3 ] -Added variable func_ram_bank1_e::return#3 to live range equivalence class [ func_ram_bank1_e::return#3 ] -Added variable main::$4 to live range equivalence class [ main::$4 ] -Added variable func_ram_bank1_f::return#2 to live range equivalence class [ func_ram_bank1_f::return#2 ] -Added variable main::$5 to live range equivalence class [ main::$5 ] -Added variable func_rom_bank2_a::return#4 to live range equivalence class [ func_rom_bank2_a::return#4 ] -Added variable main::$6 to live range equivalence class [ main::$6 ] -Added variable func_rom_bank2_b::return#4 to live range equivalence class [ func_rom_bank2_b::return#4 ] -Added variable main::$7 to live range equivalence class [ main::$7 ] -Added variable func_rom_bank2_c::return#2 to live range equivalence class [ func_rom_bank2_c::return#2 ] -Added variable main::$8 to live range equivalence class [ main::$8 ] -Added variable func_rom_bank2_d::return#2 to live range equivalence class [ func_rom_bank2_d::return#2 ] -Added variable main::$9 to live range equivalence class [ main::$9 ] -Added variable func_rom_bank2_e::return#3 to live range equivalence class [ func_rom_bank2_e::return#3 ] -Added variable main::$10 to live range equivalence class [ main::$10 ] -Added variable func_rom_bank2_f::return#2 to live range equivalence class [ func_rom_bank2_f::return#2 ] -Added variable main::$11 to live range equivalence class [ main::$11 ] -Added variable func_main_a::return#4 to live range equivalence class [ func_main_a::return#4 ] -Added variable main::$12 to live range equivalence class [ main::$12 ] -Added variable func_main_b::return#2 to live range equivalence class [ func_main_b::return#2 ] -Added variable main::$13 to live range equivalence class [ main::$13 ] -Added variable func_ram_bank1_a::return#0 to live range equivalence class [ func_ram_bank1_a::return#0 ] -Added variable func_ram_bank1_a::return#2 to live range equivalence class [ func_ram_bank1_a::return#2 ] -Added variable func_ram_bank1_c::return#0 to live range equivalence class [ func_ram_bank1_c::return#0 ] -Added variable func_rom_bank2_a::return#0 to live range equivalence class [ func_rom_bank2_a::return#0 ] -Added variable func_ram_bank1_d::return#0 to live range equivalence class [ func_ram_bank1_d::return#0 ] -Added variable func_rom_bank2_b::return#0 to live range equivalence class [ func_rom_bank2_b::return#0 ] -Added variable func_ram_bank1_e::return#0 to live range equivalence class [ func_ram_bank1_e::return#0 ] -Added variable func_main_a::return#0 to live range equivalence class [ func_main_a::return#0 ] -Added variable func_ram_bank1_f::return#0 to live range equivalence class [ func_ram_bank1_f::return#0 ] -Added variable func_rom_bank2_a::return#1 to live range equivalence class [ func_rom_bank2_a::return#1 ] -Added variable func_rom_bank2_b::return#1 to live range equivalence class [ func_rom_bank2_b::return#1 ] -Added variable func_ram_bank1_a::return#3 to live range equivalence class [ func_ram_bank1_a::return#3 ] -Added variable func_rom_bank2_c::return#0 to live range equivalence class [ func_rom_bank2_c::return#0 ] -Added variable func_rom_bank2_a::return#3 to live range equivalence class [ func_rom_bank2_a::return#3 ] -Added variable func_rom_bank2_d::return#0 to live range equivalence class [ func_rom_bank2_d::return#0 ] -Added variable func_rom_bank2_b::return#3 to live range equivalence class [ func_rom_bank2_b::return#3 ] -Added variable func_rom_bank2_e::return#0 to live range equivalence class [ func_rom_bank2_e::return#0 ] -Added variable func_main_a::return#1 to live range equivalence class [ func_main_a::return#1 ] -Added variable func_rom_bank2_f::return#0 to live range equivalence class [ func_rom_bank2_f::return#0 ] -Added variable func_ram_bank1_e::return#2 to live range equivalence class [ func_ram_bank1_e::return#2 ] -Added variable func_main_a::return#2 to live range equivalence class [ func_main_a::return#2 ] -Added variable func_rom_bank2_e::return#2 to live range equivalence class [ func_rom_bank2_e::return#2 ] -Added variable func_main_b::return#0 to live range equivalence class [ func_main_b::return#0 ] -Complete equivalence classes -[ func_ram_bank1_a::a#3 ] -[ func_ram_bank1_a::b#3 ] -[ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] -[ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] -[ func_rom_bank2_a::a#3 ] -[ func_rom_bank2_a::b#3 ] -[ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] -[ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] -[ func_rom_bank2_e::a#2 ] -[ func_rom_bank2_e::b#2 ] -[ func_main_a::a#3 ] -[ func_main_a::b#3 ] -[ func_ram_bank1_a::return#4 ] -[ main::$0 ] -[ func_ram_bank1_c::return#2 ] -[ main::$2 ] -[ func_ram_bank1_d::return#2 ] -[ main::$3 ] -[ func_ram_bank1_e::return#3 ] -[ main::$4 ] -[ func_ram_bank1_f::return#2 ] -[ main::$5 ] -[ func_rom_bank2_a::return#4 ] -[ main::$6 ] -[ func_rom_bank2_b::return#4 ] -[ main::$7 ] -[ func_rom_bank2_c::return#2 ] -[ main::$8 ] -[ func_rom_bank2_d::return#2 ] -[ main::$9 ] -[ func_rom_bank2_e::return#3 ] -[ main::$10 ] -[ func_rom_bank2_f::return#2 ] -[ main::$11 ] -[ func_main_a::return#4 ] -[ main::$12 ] -[ func_main_b::return#2 ] -[ main::$13 ] -[ func_ram_bank1_a::return#0 ] -[ func_ram_bank1_a::return#2 ] -[ func_ram_bank1_c::return#0 ] -[ func_rom_bank2_a::return#0 ] -[ func_ram_bank1_d::return#0 ] -[ func_rom_bank2_b::return#0 ] -[ func_ram_bank1_e::return#0 ] -[ func_main_a::return#0 ] -[ func_ram_bank1_f::return#0 ] -[ func_rom_bank2_a::return#1 ] -[ func_rom_bank2_b::return#1 ] -[ func_ram_bank1_a::return#3 ] -[ func_rom_bank2_c::return#0 ] -[ func_rom_bank2_a::return#3 ] -[ func_rom_bank2_d::return#0 ] -[ func_rom_bank2_b::return#3 ] -[ func_rom_bank2_e::return#0 ] -[ func_main_a::return#1 ] -[ func_rom_bank2_f::return#0 ] -[ func_ram_bank1_e::return#2 ] -[ func_main_a::return#2 ] -[ func_rom_bank2_e::return#2 ] -[ func_main_b::return#0 ] -Allocated zp[1]:2 [ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] -Allocated zp[1]:3 [ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] -Allocated zp[1]:4 [ func_rom_bank2_b::return#1 ] -Allocated zp[1]:5 [ func_rom_bank2_b::return#0 ] -Allocated zp[1]:6 [ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] -Allocated zp[1]:7 [ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] -Allocated zp[1]:8 [ func_ram_bank1_e::return#0 ] -Allocated zp[1]:9 [ func_rom_bank2_b::return#3 ] -Allocated zp[1]:10 [ func_ram_bank1_e::return#2 ] -Allocated zp[1]:11 [ func_ram_bank1_a::a#3 ] -Allocated zp[1]:12 [ func_ram_bank1_a::b#3 ] -Allocated zp[1]:13 [ func_rom_bank2_a::a#3 ] -Allocated zp[1]:14 [ func_rom_bank2_a::b#3 ] -Allocated zp[1]:15 [ func_rom_bank2_e::a#2 ] -Allocated zp[1]:16 [ func_main_a::a#3 ] -Allocated zp[1]:17 [ func_rom_bank2_e::b#2 ] -Allocated zp[1]:18 [ func_main_a::b#3 ] -Allocated zp[1]:19 [ func_rom_bank2_e::return#0 ] -Allocated zp[1]:20 [ func_rom_bank2_a::return#1 ] -Allocated zp[1]:21 [ func_main_a::return#2 ] -Allocated zp[1]:22 [ func_ram_bank1_a::return#0 ] -Allocated zp[1]:23 [ func_ram_bank1_a::return#2 ] -Allocated zp[1]:24 [ func_rom_bank2_a::return#0 ] -Allocated zp[1]:25 [ func_main_a::return#0 ] -Allocated zp[1]:26 [ func_ram_bank1_a::return#3 ] -Allocated zp[1]:27 [ func_rom_bank2_a::return#3 ] -Allocated zp[1]:28 [ func_main_a::return#1 ] -Allocated zp[1]:29 [ func_rom_bank2_e::return#2 ] -Allocated zp[1]:30 [ func_ram_bank1_c::return#0 ] -Allocated zp[1]:31 [ func_ram_bank1_d::return#0 ] -Allocated zp[1]:32 [ func_ram_bank1_f::return#0 ] -Allocated zp[1]:33 [ func_rom_bank2_c::return#0 ] -Allocated zp[1]:34 [ func_rom_bank2_d::return#0 ] -Allocated zp[1]:35 [ func_rom_bank2_f::return#0 ] -Allocated zp[1]:36 [ func_main_b::return#0 ] -Allocated zp[1]:37 [ func_ram_bank1_a::return#4 ] -Allocated zp[1]:38 [ main::$0 ] -Allocated zp[1]:39 [ func_ram_bank1_c::return#2 ] -Allocated zp[1]:40 [ main::$2 ] -Allocated zp[1]:41 [ func_ram_bank1_d::return#2 ] -Allocated zp[1]:42 [ main::$3 ] -Allocated zp[1]:43 [ func_ram_bank1_e::return#3 ] -Allocated zp[1]:44 [ main::$4 ] -Allocated zp[1]:45 [ func_ram_bank1_f::return#2 ] -Allocated zp[1]:46 [ main::$5 ] -Allocated zp[1]:47 [ func_rom_bank2_a::return#4 ] -Allocated zp[1]:48 [ main::$6 ] -Allocated zp[1]:49 [ func_rom_bank2_b::return#4 ] -Allocated zp[1]:50 [ main::$7 ] -Allocated zp[1]:51 [ func_rom_bank2_c::return#2 ] -Allocated zp[1]:52 [ main::$8 ] -Allocated zp[1]:53 [ func_rom_bank2_d::return#2 ] -Allocated zp[1]:54 [ main::$9 ] -Allocated zp[1]:55 [ func_rom_bank2_e::return#3 ] -Allocated zp[1]:56 [ main::$10 ] -Allocated zp[1]:57 [ func_rom_bank2_f::return#2 ] -Allocated zp[1]:58 [ main::$11 ] -Allocated zp[1]:59 [ func_main_a::return#4 ] -Allocated zp[1]:60 [ main::$12 ] -Allocated zp[1]:61 [ func_main_b::return#2 ] -Allocated zp[1]:62 [ main::$13 ] -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [6] *SCREEN = func_ram_bank1_b::return#0 [ ] ( [ ] { { func_ram_bank1_c::return#0 = func_ram_bank1_c::return#2 } } ) always clobbers reg byte a -Statement [57] func_ram_bank1_a::return#0 = func_ram_bank1_a::a#3 + func_ram_bank1_a::b#3 [ func_ram_bank1_a::return#0 ] ( func_ram_bank1_a:1 [ func_ram_bank1_a::return#0 ] { { func_ram_bank1_a::return#0 = func_ram_bank1_a::return#4 } } func_ram_bank1_c:7::func_ram_bank1_a:62 [ func_ram_bank1_a::return#0 ] { { func_ram_bank1_c::return#0 = func_ram_bank1_c::return#2 } { func_ram_bank1_a::return#0 = func_ram_bank1_a::return#2 } } func_rom_bank2_c:31::func_ram_bank1_a:90 [ func_ram_bank1_a::return#0 ] { { func_rom_bank2_c::return#0 = func_rom_bank2_c::return#2 } { func_ram_bank1_a::return#0 = func_ram_bank1_a::return#3 } } ) always clobbers reg byte a -Statement [84] func_rom_bank2_a::return#1 = func_rom_bank2_a::a#3 + func_rom_bank2_a::b#3 [ func_rom_bank2_a::return#1 ] ( func_rom_bank2_a:23 [ func_rom_bank2_a::return#1 ] { { func_rom_bank2_a::return#1 = func_rom_bank2_a::return#4 } } func_ram_bank1_d:11::func_rom_bank2_a:67 [ func_rom_bank2_a::return#1 ] { { func_ram_bank1_d::return#0 = func_ram_bank1_d::return#2 } { func_rom_bank2_a::return#0 = func_rom_bank2_a::return#1 } } func_rom_bank2_d:35::func_rom_bank2_a:95 [ func_rom_bank2_a::return#1 ] { { func_rom_bank2_d::return#0 = func_rom_bank2_d::return#2 } { func_rom_bank2_a::return#1 = func_rom_bank2_a::return#3 } } ) always clobbers reg byte a -Statement [87] func_rom_bank2_b::return#1 = func_rom_bank2_b::a#3 + func_rom_bank2_b::b#3 [ func_rom_bank2_b::return#1 ] ( func_rom_bank2_b:27 [ func_rom_bank2_b::return#1 ] { { func_rom_bank2_b::return#1 = func_rom_bank2_b::return#4 } } func_ram_bank1_e:15::func_rom_bank2_b:74 [ func_rom_bank2_b::return#1 ] { { func_ram_bank1_e::return#0 = func_ram_bank1_e::return#3 } { func_rom_bank2_b::a#0 = func_rom_bank2_b::a#3 func_ram_bank1_e::a#2 } { func_rom_bank2_b::b#0 = func_rom_bank2_b::b#3 func_ram_bank1_e::b#2 } { func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 } } func_main_a:47::func_ram_bank1_e:114::func_rom_bank2_b:74 [ func_rom_bank2_b::return#1 ] { { func_main_a::return#2 = func_main_a::return#4 } { func_ram_bank1_e::return#0 = func_ram_bank1_e::return#2 } { func_rom_bank2_b::a#0 = func_rom_bank2_b::a#3 func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 func_main_a::a#3 } { func_rom_bank2_b::b#0 = func_rom_bank2_b::b#3 func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 func_main_a::b#3 } { func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 } } func_ram_bank1_f:19::func_main_a:79::func_ram_bank1_e:114::func_rom_bank2_b:74 [ func_rom_bank2_b::return#1 ] { { func_ram_bank1_f::return#0 = func_ram_bank1_f::return#2 } { func_main_a::return#0 = func_main_a::return#2 } { func_ram_bank1_e::return#0 = func_ram_bank1_e::return#2 } { func_rom_bank2_b::a#0 = func_rom_bank2_b::a#3 func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 func_main_a::a#3 } { func_rom_bank2_b::b#0 = func_rom_bank2_b::b#3 func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 func_main_a::b#3 } { func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 } } func_rom_bank2_f:43::func_main_a:107::func_ram_bank1_e:114::func_rom_bank2_b:74 [ func_rom_bank2_b::return#1 ] { { func_rom_bank2_f::return#0 = func_rom_bank2_f::return#2 } { func_main_a::return#1 = func_main_a::return#2 } { func_ram_bank1_e::return#0 = func_ram_bank1_e::return#2 } { func_rom_bank2_b::a#0 = func_rom_bank2_b::a#3 func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 func_main_a::a#3 } { func_rom_bank2_b::b#0 = func_rom_bank2_b::b#3 func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 func_main_a::b#3 } { func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 } } func_rom_bank2_e:39::func_rom_bank2_b:102 [ func_rom_bank2_b::return#1 ] { { func_rom_bank2_e::return#0 = func_rom_bank2_e::return#3 } { func_rom_bank2_b::a#1 = func_rom_bank2_b::a#3 func_rom_bank2_e::a#2 } { func_rom_bank2_b::b#1 = func_rom_bank2_b::b#3 func_rom_bank2_e::b#2 } { func_rom_bank2_b::return#1 = func_rom_bank2_b::return#3 } } func_main_b:51::func_rom_bank2_e:119::func_rom_bank2_b:102 [ func_rom_bank2_b::return#1 ] { { func_main_b::return#0 = func_main_b::return#2 } { func_rom_bank2_e::return#0 = func_rom_bank2_e::return#2 } { func_rom_bank2_b::a#1 = func_rom_bank2_b::a#3 func_rom_bank2_e::a#2 } { func_rom_bank2_b::b#1 = func_rom_bank2_b::b#3 func_rom_bank2_e::b#2 } { func_rom_bank2_b::return#1 = func_rom_bank2_b::return#3 } } ) always clobbers reg byte a -Potential registers zp[1]:11 [ func_ram_bank1_a::a#3 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:12 [ func_ram_bank1_a::b#3 ] : zp[1]:12 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:6 [ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:7 [ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:13 [ func_rom_bank2_a::a#3 ] : zp[1]:13 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:14 [ func_rom_bank2_a::b#3 ] : zp[1]:14 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:3 [ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:2 [ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:15 [ func_rom_bank2_e::a#2 ] : zp[1]:15 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:17 [ func_rom_bank2_e::b#2 ] : zp[1]:17 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:16 [ func_main_a::a#3 ] : zp[1]:16 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:18 [ func_main_a::b#3 ] : zp[1]:18 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:37 [ func_ram_bank1_a::return#4 ] : zp[1]:37 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:38 [ main::$0 ] : zp[1]:38 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:39 [ func_ram_bank1_c::return#2 ] : zp[1]:39 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:40 [ main::$2 ] : zp[1]:40 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:41 [ func_ram_bank1_d::return#2 ] : zp[1]:41 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:42 [ main::$3 ] : zp[1]:42 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:43 [ func_ram_bank1_e::return#3 ] : zp[1]:43 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:44 [ main::$4 ] : zp[1]:44 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:45 [ func_ram_bank1_f::return#2 ] : zp[1]:45 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:46 [ main::$5 ] : zp[1]:46 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:47 [ func_rom_bank2_a::return#4 ] : zp[1]:47 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:48 [ main::$6 ] : zp[1]:48 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:49 [ func_rom_bank2_b::return#4 ] : zp[1]:49 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:50 [ main::$7 ] : zp[1]:50 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:51 [ func_rom_bank2_c::return#2 ] : zp[1]:51 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:52 [ main::$8 ] : zp[1]:52 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:53 [ func_rom_bank2_d::return#2 ] : zp[1]:53 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:54 [ main::$9 ] : zp[1]:54 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:55 [ func_rom_bank2_e::return#3 ] : zp[1]:55 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:56 [ main::$10 ] : zp[1]:56 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:57 [ func_rom_bank2_f::return#2 ] : zp[1]:57 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:58 [ main::$11 ] : zp[1]:58 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:59 [ func_main_a::return#4 ] : zp[1]:59 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:60 [ main::$12 ] : zp[1]:60 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:61 [ func_main_b::return#2 ] : zp[1]:61 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:62 [ main::$13 ] : zp[1]:62 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:22 [ func_ram_bank1_a::return#0 ] : zp[1]:22 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:23 [ func_ram_bank1_a::return#2 ] : zp[1]:23 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:30 [ func_ram_bank1_c::return#0 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:24 [ func_rom_bank2_a::return#0 ] : zp[1]:24 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:31 [ func_ram_bank1_d::return#0 ] : zp[1]:31 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:5 [ func_rom_bank2_b::return#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:8 [ func_ram_bank1_e::return#0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:25 [ func_main_a::return#0 ] : zp[1]:25 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:32 [ func_ram_bank1_f::return#0 ] : zp[1]:32 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:20 [ func_rom_bank2_a::return#1 ] : zp[1]:20 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:4 [ func_rom_bank2_b::return#1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:26 [ func_ram_bank1_a::return#3 ] : zp[1]:26 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:33 [ func_rom_bank2_c::return#0 ] : zp[1]:33 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:27 [ func_rom_bank2_a::return#3 ] : zp[1]:27 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:34 [ func_rom_bank2_d::return#0 ] : zp[1]:34 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:9 [ func_rom_bank2_b::return#3 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:19 [ func_rom_bank2_e::return#0 ] : zp[1]:19 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:28 [ func_main_a::return#1 ] : zp[1]:28 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:35 [ func_rom_bank2_f::return#0 ] : zp[1]:35 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:10 [ func_ram_bank1_e::return#2 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:21 [ func_main_a::return#2 ] : zp[1]:21 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:29 [ func_rom_bank2_e::return#2 ] : zp[1]:29 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:36 [ func_main_b::return#0 ] : zp[1]:36 , reg byte a , reg byte x , reg byte y , - -REGISTER UPLIFT SCOPES -Uplift Scope [func_rom_bank2_b] 13,307: zp[1]:2 [ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] 12,205: zp[1]:3 [ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] 2,221: zp[1]:4 [ func_rom_bank2_b::return#1 ] 2,002: zp[1]:5 [ func_rom_bank2_b::return#0 ] 202: zp[1]:9 [ func_rom_bank2_b::return#3 ] 4: zp[1]:49 [ func_rom_bank2_b::return#4 ] -Uplift Scope [func_ram_bank1_e] 1,203: zp[1]:6 [ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] 753: zp[1]:7 [ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] 276: zp[1]:8 [ func_ram_bank1_e::return#0 ] 202: zp[1]:10 [ func_ram_bank1_e::return#2 ] 4: zp[1]:43 [ func_ram_bank1_e::return#3 ] -Uplift Scope [func_ram_bank1_a] 101: zp[1]:11 [ func_ram_bank1_a::a#3 ] 101: zp[1]:12 [ func_ram_bank1_a::b#3 ] 25: zp[1]:22 [ func_ram_bank1_a::return#0 ] 22: zp[1]:23 [ func_ram_bank1_a::return#2 ] 22: zp[1]:26 [ func_ram_bank1_a::return#3 ] 4: zp[1]:37 [ func_ram_bank1_a::return#4 ] -Uplift Scope [func_rom_bank2_a] 101: zp[1]:13 [ func_rom_bank2_a::a#3 ] 101: zp[1]:14 [ func_rom_bank2_a::b#3 ] 25: zp[1]:20 [ func_rom_bank2_a::return#1 ] 22: zp[1]:24 [ func_rom_bank2_a::return#0 ] 22: zp[1]:27 [ func_rom_bank2_a::return#3 ] 4: zp[1]:47 [ func_rom_bank2_a::return#4 ] -Uplift Scope [func_main_a] 101: zp[1]:16 [ func_main_a::a#3 ] 50.5: zp[1]:18 [ func_main_a::b#3 ] 25: zp[1]:21 [ func_main_a::return#2 ] 22: zp[1]:25 [ func_main_a::return#0 ] 22: zp[1]:28 [ func_main_a::return#1 ] 4: zp[1]:59 [ func_main_a::return#4 ] -Uplift Scope [func_rom_bank2_e] 101: zp[1]:15 [ func_rom_bank2_e::a#2 ] 50.5: zp[1]:17 [ func_rom_bank2_e::b#2 ] 28.5: zp[1]:19 [ func_rom_bank2_e::return#0 ] 22: zp[1]:29 [ func_rom_bank2_e::return#2 ] 4: zp[1]:55 [ func_rom_bank2_e::return#3 ] -Uplift Scope [main] 4: zp[1]:38 [ main::$0 ] 4: zp[1]:40 [ main::$2 ] 4: zp[1]:42 [ main::$3 ] 4: zp[1]:44 [ main::$4 ] 4: zp[1]:46 [ main::$5 ] 4: zp[1]:48 [ main::$6 ] 4: zp[1]:50 [ main::$7 ] 4: zp[1]:52 [ main::$8 ] 4: zp[1]:54 [ main::$9 ] 4: zp[1]:56 [ main::$10 ] 4: zp[1]:58 [ main::$11 ] 4: zp[1]:60 [ main::$12 ] 4: zp[1]:62 [ main::$13 ] -Uplift Scope [func_ram_bank1_c] 4.33: zp[1]:30 [ func_ram_bank1_c::return#0 ] 4: zp[1]:39 [ func_ram_bank1_c::return#2 ] -Uplift Scope [func_ram_bank1_d] 4.33: zp[1]:31 [ func_ram_bank1_d::return#0 ] 4: zp[1]:41 [ func_ram_bank1_d::return#2 ] -Uplift Scope [func_ram_bank1_f] 4.33: zp[1]:32 [ func_ram_bank1_f::return#0 ] 4: zp[1]:45 [ func_ram_bank1_f::return#2 ] -Uplift Scope [func_rom_bank2_c] 4.33: zp[1]:33 [ func_rom_bank2_c::return#0 ] 4: zp[1]:51 [ func_rom_bank2_c::return#2 ] -Uplift Scope [func_rom_bank2_d] 4.33: zp[1]:34 [ func_rom_bank2_d::return#0 ] 4: zp[1]:53 [ func_rom_bank2_d::return#2 ] -Uplift Scope [func_rom_bank2_f] 4.33: zp[1]:35 [ func_rom_bank2_f::return#0 ] 4: zp[1]:57 [ func_rom_bank2_f::return#2 ] -Uplift Scope [func_main_b] 4.33: zp[1]:36 [ func_main_b::return#0 ] 4: zp[1]:61 [ func_main_b::return#2 ] -Uplift Scope [func_ram_bank1_b] -Uplift Scope [] - -Uplifting [func_rom_bank2_b] best 914 combination reg byte x [ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] reg byte a [ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] reg byte a [ func_rom_bank2_b::return#1 ] reg byte a [ func_rom_bank2_b::return#0 ] zp[1]:9 [ func_rom_bank2_b::return#3 ] zp[1]:49 [ func_rom_bank2_b::return#4 ] -Limited combination testing to 100 combinations of 4096 possible. -Uplifting [func_ram_bank1_e] best 881 combination reg byte a [ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] reg byte x [ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] reg byte a [ func_ram_bank1_e::return#0 ] reg byte a [ func_ram_bank1_e::return#2 ] zp[1]:43 [ func_ram_bank1_e::return#3 ] -Limited combination testing to 100 combinations of 1024 possible. -Uplifting [func_ram_bank1_a] best 845 combination reg byte x [ func_ram_bank1_a::a#3 ] reg byte a [ func_ram_bank1_a::b#3 ] reg byte a [ func_ram_bank1_a::return#0 ] reg byte a [ func_ram_bank1_a::return#2 ] zp[1]:26 [ func_ram_bank1_a::return#3 ] zp[1]:37 [ func_ram_bank1_a::return#4 ] -Limited combination testing to 100 combinations of 4096 possible. -Uplifting [func_rom_bank2_a] best 809 combination reg byte x [ func_rom_bank2_a::a#3 ] reg byte a [ func_rom_bank2_a::b#3 ] reg byte a [ func_rom_bank2_a::return#1 ] reg byte a [ func_rom_bank2_a::return#0 ] zp[1]:27 [ func_rom_bank2_a::return#3 ] zp[1]:47 [ func_rom_bank2_a::return#4 ] -Limited combination testing to 100 combinations of 4096 possible. -Uplifting [func_main_a] best 767 combination reg byte a [ func_main_a::a#3 ] reg byte x [ func_main_a::b#3 ] reg byte a [ func_main_a::return#2 ] reg byte a [ func_main_a::return#0 ] zp[1]:28 [ func_main_a::return#1 ] zp[1]:59 [ func_main_a::return#4 ] -Limited combination testing to 100 combinations of 4096 possible. -Uplifting [func_rom_bank2_e] best 734 combination reg byte a [ func_rom_bank2_e::a#2 ] reg byte x [ func_rom_bank2_e::b#2 ] reg byte a [ func_rom_bank2_e::return#0 ] reg byte a [ func_rom_bank2_e::return#2 ] zp[1]:55 [ func_rom_bank2_e::return#3 ] -Limited combination testing to 100 combinations of 1024 possible. -Uplifting [main] best 710 combination reg byte a [ main::$0 ] reg byte a [ main::$2 ] reg byte a [ main::$3 ] reg byte a [ main::$4 ] zp[1]:46 [ main::$5 ] zp[1]:48 [ main::$6 ] zp[1]:50 [ main::$7 ] zp[1]:52 [ main::$8 ] zp[1]:54 [ main::$9 ] zp[1]:56 [ main::$10 ] zp[1]:58 [ main::$11 ] zp[1]:60 [ main::$12 ] zp[1]:62 [ main::$13 ] -Limited combination testing to 100 combinations of 67108864 possible. -Uplifting [func_ram_bank1_c] best 698 combination reg byte a [ func_ram_bank1_c::return#0 ] reg byte a [ func_ram_bank1_c::return#2 ] -Uplifting [func_ram_bank1_d] best 686 combination reg byte a [ func_ram_bank1_d::return#0 ] reg byte a [ func_ram_bank1_d::return#2 ] -Uplifting [func_ram_bank1_f] best 674 combination reg byte a [ func_ram_bank1_f::return#0 ] reg byte a [ func_ram_bank1_f::return#2 ] -Uplifting [func_rom_bank2_c] best 662 combination reg byte a [ func_rom_bank2_c::return#0 ] reg byte a [ func_rom_bank2_c::return#2 ] -Uplifting [func_rom_bank2_d] best 650 combination reg byte a [ func_rom_bank2_d::return#0 ] reg byte a [ func_rom_bank2_d::return#2 ] -Uplifting [func_rom_bank2_f] best 638 combination reg byte a [ func_rom_bank2_f::return#0 ] reg byte a [ func_rom_bank2_f::return#2 ] -Uplifting [func_main_b] best 626 combination reg byte a [ func_main_b::return#0 ] reg byte a [ func_main_b::return#2 ] -Uplifting [func_ram_bank1_b] best 626 combination -Uplifting [] best 626 combination -Attempting to uplift remaining variables inzp[1]:9 [ func_rom_bank2_b::return#3 ] -Uplifting [func_rom_bank2_b] best 620 combination reg byte a [ func_rom_bank2_b::return#3 ] -Attempting to uplift remaining variables inzp[1]:26 [ func_ram_bank1_a::return#3 ] -Uplifting [func_ram_bank1_a] best 614 combination reg byte a [ func_ram_bank1_a::return#3 ] -Attempting to uplift remaining variables inzp[1]:27 [ func_rom_bank2_a::return#3 ] -Uplifting [func_rom_bank2_a] best 608 combination reg byte a [ func_rom_bank2_a::return#3 ] -Attempting to uplift remaining variables inzp[1]:28 [ func_main_a::return#1 ] -Uplifting [func_main_a] best 602 combination reg byte a [ func_main_a::return#1 ] -Attempting to uplift remaining variables inzp[1]:37 [ func_ram_bank1_a::return#4 ] -Uplifting [func_ram_bank1_a] best 596 combination reg byte a [ func_ram_bank1_a::return#4 ] -Attempting to uplift remaining variables inzp[1]:43 [ func_ram_bank1_e::return#3 ] -Uplifting [func_ram_bank1_e] best 590 combination reg byte a [ func_ram_bank1_e::return#3 ] -Attempting to uplift remaining variables inzp[1]:46 [ main::$5 ] -Uplifting [main] best 584 combination reg byte a [ main::$5 ] -Attempting to uplift remaining variables inzp[1]:47 [ func_rom_bank2_a::return#4 ] -Uplifting [func_rom_bank2_a] best 578 combination reg byte a [ func_rom_bank2_a::return#4 ] -Attempting to uplift remaining variables inzp[1]:48 [ main::$6 ] -Uplifting [main] best 572 combination reg byte a [ main::$6 ] -Attempting to uplift remaining variables inzp[1]:49 [ func_rom_bank2_b::return#4 ] -Uplifting [func_rom_bank2_b] best 566 combination reg byte a [ func_rom_bank2_b::return#4 ] -Attempting to uplift remaining variables inzp[1]:50 [ main::$7 ] -Uplifting [main] best 560 combination reg byte a [ main::$7 ] -Attempting to uplift remaining variables inzp[1]:52 [ main::$8 ] -Uplifting [main] best 554 combination reg byte a [ main::$8 ] -Attempting to uplift remaining variables inzp[1]:54 [ main::$9 ] -Uplifting [main] best 548 combination reg byte a [ main::$9 ] -Attempting to uplift remaining variables inzp[1]:55 [ func_rom_bank2_e::return#3 ] -Uplifting [func_rom_bank2_e] best 542 combination reg byte a [ func_rom_bank2_e::return#3 ] -Attempting to uplift remaining variables inzp[1]:56 [ main::$10 ] -Uplifting [main] best 536 combination reg byte a [ main::$10 ] -Attempting to uplift remaining variables inzp[1]:58 [ main::$11 ] -Uplifting [main] best 530 combination reg byte a [ main::$11 ] -Attempting to uplift remaining variables inzp[1]:59 [ func_main_a::return#4 ] -Uplifting [func_main_a] best 524 combination reg byte a [ func_main_a::return#4 ] -Attempting to uplift remaining variables inzp[1]:60 [ main::$12 ] -Uplifting [main] best 518 combination reg byte a [ main::$12 ] -Attempting to uplift remaining variables inzp[1]:62 [ main::$13 ] -Uplifting [main] best 512 combination reg byte a [ main::$13 ] - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// The linker specification of the different segments. - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, Bank1, Bank2"] -.segmentdef Basic [start=$0801]a -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] -.segmentdef Bank2 [start=$C000, min=$C000, max=$FFFF, align=$100] - - - // Global Constants & labels - // The target computer platform is the Commander X16, - // which implements banking in ram between 0xA0000 and 0xBFFF, - // and in rom between 0xC000 and 0xFFFF. - .label SCREEN = $400 -.segment Code - // main -// Practically this means that the main() function is placed in main memory ... -main: { - // [1] call func_ram_bank1_a - // [56] phi from main to func_ram_bank1_a [phi:main->func_ram_bank1_a] - func_ram_bank1_a_from_main: - // [56] phi func_ram_bank1_a::b#3 = 7 [phi:main->func_ram_bank1_a#0] -- vbuaa=vbuc1 - lda #7 - // [56] phi func_ram_bank1_a::a#3 = '0' [phi:main->func_ram_bank1_a#1] -- call_far_cx16_ram_finalize - ldx #'0' - jsr $ff6e - .byte func_ram_bank1_a - .byte 1 - // [2] func_ram_bank1_a::return#4 = func_ram_bank1_a::return#0 - jmp __b1 - // main::@1 - __b1: - // [3] main::$0 = func_ram_bank1_a::return#4 - // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - // [5] call func_ram_bank1_b - // [59] phi from main::@1 to func_ram_bank1_b [phi:main::@1->func_ram_bank1_b] - func_ram_bank1_b_from___b1: - jsr func_ram_bank1_b - jmp __b2 - // main::@2 - __b2: - // [6] *SCREEN = func_ram_bank1_b::return#0 -- _deref_pbuc1=vbuc2 - // Banked call to ram in bank 1 from main memory. - lda #func_ram_bank1_b.return - sta SCREEN - // [7] call func_ram_bank1_c - // [61] phi from main::@2 to func_ram_bank1_c [phi:main::@2->func_ram_bank1_c] -- call_far_cx16_ram_finalize - func_ram_bank1_c_from___b2: - jsr $ff6e - .byte func_ram_bank1_c - .byte 1 - // [8] func_ram_bank1_c::return#2 = func_ram_bank1_c::return#0 - jmp __b3 - // main::@3 - __b3: - // [9] main::$2 = func_ram_bank1_c::return#2 - // [10] *SCREEN = main::$2 -- _deref_pbuc1=vbuaa - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // [11] call func_ram_bank1_d - // [66] phi from main::@3 to func_ram_bank1_d [phi:main::@3->func_ram_bank1_d] -- call_far_cx16_ram_finalize - func_ram_bank1_d_from___b3: - jsr $ff6e - .byte func_ram_bank1_d - .byte 1 - // [12] func_ram_bank1_d::return#2 = func_ram_bank1_d::return#0 - jmp __b4 - // main::@4 - __b4: - // [13] main::$3 = func_ram_bank1_d::return#2 - // [14] *SCREEN = main::$3 -- _deref_pbuc1=vbuaa - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // [15] call func_ram_bank1_e - // [71] phi from main::@4 to func_ram_bank1_e [phi:main::@4->func_ram_bank1_e] - func_ram_bank1_e_from___b4: - // [71] phi func_ram_bank1_e::b#2 = 7 [phi:main::@4->func_ram_bank1_e#0] -- vbuxx=vbuc1 - ldx #7 - // [71] phi func_ram_bank1_e::a#2 = '0' [phi:main::@4->func_ram_bank1_e#1] -- call_far_cx16_ram_finalize - lda #'0' - jsr $ff6e - .byte func_ram_bank1_e - .byte 1 - // [16] func_ram_bank1_e::return#3 = func_ram_bank1_e::return#0 - jmp __b5 - // main::@5 - __b5: - // [17] main::$4 = func_ram_bank1_e::return#3 - // [18] *SCREEN = main::$4 -- _deref_pbuc1=vbuaa - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // [19] call func_ram_bank1_f - // [78] phi from main::@5 to func_ram_bank1_f [phi:main::@5->func_ram_bank1_f] -- call_far_cx16_ram_finalize - func_ram_bank1_f_from___b5: - jsr $ff6e - .byte func_ram_bank1_f - .byte 1 - // [20] func_ram_bank1_f::return#2 = func_ram_bank1_f::return#0 - jmp __b6 - // main::@6 - __b6: - // [21] main::$5 = func_ram_bank1_f::return#2 - // [22] *SCREEN = main::$5 -- _deref_pbuc1=vbuaa - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // [23] call func_rom_bank2_a - // [83] phi from main::@6 to func_rom_bank2_a [phi:main::@6->func_rom_bank2_a] - func_rom_bank2_a_from___b6: - // [83] phi func_rom_bank2_a::b#3 = 7 [phi:main::@6->func_rom_bank2_a#0] -- vbuaa=vbuc1 - lda #7 - // [83] phi func_rom_bank2_a::a#3 = '0' [phi:main::@6->func_rom_bank2_a#1] -- call_far_cx16_rom_finalize - ldx #'0' - jsr $ff6e - .byte func_rom_bank2_a - .byte 2 - // [24] func_rom_bank2_a::return#4 = func_rom_bank2_a::return#1 - jmp __b7 - // main::@7 - __b7: - // [25] main::$6 = func_rom_bank2_a::return#4 - // [26] *SCREEN = main::$6 -- _deref_pbuc1=vbuaa - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // [27] call func_rom_bank2_b - // [86] phi from main::@7 to func_rom_bank2_b [phi:main::@7->func_rom_bank2_b] - func_rom_bank2_b_from___b7: - // [86] phi func_rom_bank2_b::b#3 = 7 [phi:main::@7->func_rom_bank2_b#0] -- vbuxx=vbuc1 - ldx #7 - // [86] phi func_rom_bank2_b::a#3 = '0' [phi:main::@7->func_rom_bank2_b#1] -- vbuaa=vbuc1 - lda #'0' - jsr func_rom_bank2_b - // [28] func_rom_bank2_b::return#4 = func_rom_bank2_b::return#1 - jmp __b8 - // main::@8 - __b8: - // [29] main::$7 = func_rom_bank2_b::return#4 - // [30] *SCREEN = main::$7 -- _deref_pbuc1=vbuaa - // Banked call to rom in bank 2 from main memory. - sta SCREEN - // [31] call func_rom_bank2_c - // [89] phi from main::@8 to func_rom_bank2_c [phi:main::@8->func_rom_bank2_c] -- call_far_cx16_rom_finalize - func_rom_bank2_c_from___b8: - jsr $ff6e - .byte func_rom_bank2_c - .byte 2 - // [32] func_rom_bank2_c::return#2 = func_rom_bank2_c::return#0 - jmp __b9 - // main::@9 - __b9: - // [33] main::$8 = func_rom_bank2_c::return#2 - // [34] *SCREEN = main::$8 -- _deref_pbuc1=vbuaa - // Banked call to rom in bank 2 from main memory. - sta SCREEN - // [35] call func_rom_bank2_d - // [94] phi from main::@9 to func_rom_bank2_d [phi:main::@9->func_rom_bank2_d] -- call_far_cx16_rom_finalize - func_rom_bank2_d_from___b9: - jsr $ff6e - .byte func_rom_bank2_d - .byte 2 - // [36] func_rom_bank2_d::return#2 = func_rom_bank2_d::return#0 - jmp __b10 - // main::@10 - __b10: - // [37] main::$9 = func_rom_bank2_d::return#2 - // [38] *SCREEN = main::$9 -- _deref_pbuc1=vbuaa - // Banked call to rom in bank 2 from main memory. - sta SCREEN - // [39] call func_rom_bank2_e - // [99] phi from main::@10 to func_rom_bank2_e [phi:main::@10->func_rom_bank2_e] - func_rom_bank2_e_from___b10: - // [99] phi func_rom_bank2_e::b#2 = 7 [phi:main::@10->func_rom_bank2_e#0] -- vbuxx=vbuc1 - ldx #7 - // [99] phi func_rom_bank2_e::a#2 = '0' [phi:main::@10->func_rom_bank2_e#1] -- call_far_cx16_rom_finalize - lda #'0' - jsr $ff6e - .byte func_rom_bank2_e - .byte 2 - // [40] func_rom_bank2_e::return#3 = func_rom_bank2_e::return#0 - jmp __b11 - // main::@11 - __b11: - // [41] main::$10 = func_rom_bank2_e::return#3 - // [42] *SCREEN = main::$10 -- _deref_pbuc1=vbuaa - // Banked call to rom in bank 2 from main memory. - sta SCREEN - // [43] call func_rom_bank2_f - // [106] phi from main::@11 to func_rom_bank2_f [phi:main::@11->func_rom_bank2_f] -- call_far_cx16_rom_finalize - func_rom_bank2_f_from___b11: - jsr $ff6e - .byte func_rom_bank2_f - .byte 2 - // [44] func_rom_bank2_f::return#2 = func_rom_bank2_f::return#0 - jmp __b12 - // main::@12 - __b12: - // [45] main::$11 = func_rom_bank2_f::return#2 - // [46] *SCREEN = main::$11 -- _deref_pbuc1=vbuaa - // banked call to rom in bank 2 from main memory. - sta SCREEN - // [47] call func_main_a - // [111] phi from main::@12 to func_main_a [phi:main::@12->func_main_a] - func_main_a_from___b12: - // [111] phi func_main_a::b#3 = 7 [phi:main::@12->func_main_a#0] -- vbuxx=vbuc1 - ldx #7 - // [111] phi func_main_a::a#3 = '0' [phi:main::@12->func_main_a#1] -- vbuaa=vbuc1 - lda #'0' - jsr func_main_a - // [48] func_main_a::return#4 = func_main_a::return#2 - jmp __b13 - // main::@13 - __b13: - // [49] main::$12 = func_main_a::return#4 - // [50] *SCREEN = main::$12 -- _deref_pbuc1=vbuaa - // banked call to rom in bank 2 from main memory. - sta SCREEN - // [51] call func_main_b - // [118] phi from main::@13 to func_main_b [phi:main::@13->func_main_b] - func_main_b_from___b13: - jsr func_main_b - // [52] func_main_b::return#2 = func_main_b::return#0 - jmp __b14 - // main::@14 - __b14: - // [53] main::$13 = func_main_b::return#2 - // [54] *SCREEN = main::$13 -- _deref_pbuc1=vbuaa - // Near call in main memory from main memory. - sta SCREEN - jmp __breturn - // main::@return - __breturn: - // [55] return - rts -} -.segment Bank1 - // func_ram_bank1_a -// Functional code -// __register(A) char func_ram_bank1_a(__register(X) char a, __register(A) char b) -func_ram_bank1_a: { - // [57] func_ram_bank1_a::return#0 = func_ram_bank1_a::a#3 + func_ram_bank1_a::b#3 -- vbuaa=vbuxx_plus_vbuaa - stx.z $ff - clc - adc.z $ff - jmp __breturn - // func_ram_bank1_a::@return - __breturn: - // [58] return - rts -} -.segment Bank2 - // func_ram_bank1_b -// The sequent functions will consider no banking calculations anymore. -// The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram. -// char func_ram_bank1_b(char a, char b) -func_ram_bank1_b: { - .const a = '0' - .const b = 7 - .label return = a+b - jmp __breturn - // func_ram_bank1_b::@return - __breturn: - // [60] return - rts -} -.segment Bank1 - // func_ram_bank1_c -// __register(A) char func_ram_bank1_c(char a, char b) -func_ram_bank1_c: { - .const a = '0' - .const b = 7 - // [62] call func_ram_bank1_a - // [56] phi from func_ram_bank1_c to func_ram_bank1_a [phi:func_ram_bank1_c->func_ram_bank1_a] - func_ram_bank1_a_from_func_ram_bank1_c: - // [56] phi func_ram_bank1_a::b#3 = func_ram_bank1_c::b#0 [phi:func_ram_bank1_c->func_ram_bank1_a#0] -- vbuaa=vbuc1 - lda #b - // [56] phi func_ram_bank1_a::a#3 = func_ram_bank1_c::a#0 [phi:func_ram_bank1_c->func_ram_bank1_a#1] -- vbuxx=vbuc1 - ldx #a - jsr func_ram_bank1_a - // [63] func_ram_bank1_a::return#2 = func_ram_bank1_a::return#0 - jmp __b1 - // func_ram_bank1_c::@1 - __b1: - // [64] func_ram_bank1_c::return#0 = func_ram_bank1_a::return#2 - jmp __breturn - // func_ram_bank1_c::@return - __breturn: - // [65] return - rts -} - // func_ram_bank1_d -// __register(A) char func_ram_bank1_d(char a, char b) -func_ram_bank1_d: { - .const a = '0' - .const b = 7 - // [67] call func_rom_bank2_a - // [83] phi from func_ram_bank1_d to func_rom_bank2_a [phi:func_ram_bank1_d->func_rom_bank2_a] - func_rom_bank2_a_from_func_ram_bank1_d: - // [83] phi func_rom_bank2_a::b#3 = func_ram_bank1_d::b#0 [phi:func_ram_bank1_d->func_rom_bank2_a#0] -- vbuaa=vbuc1 - lda #b - // [83] phi func_rom_bank2_a::a#3 = func_ram_bank1_d::a#0 [phi:func_ram_bank1_d->func_rom_bank2_a#1] -- call_far_cx16_rom_finalize - ldx #a - jsr $ff6e - .byte func_rom_bank2_a - .byte 2 - // [68] func_rom_bank2_a::return#0 = func_rom_bank2_a::return#1 - jmp __b1 - // func_ram_bank1_d::@1 - __b1: - // [69] func_ram_bank1_d::return#0 = func_rom_bank2_a::return#0 - jmp __breturn - // func_ram_bank1_d::@return - __breturn: - // [70] return - rts -} - // func_ram_bank1_e -// __register(A) char func_ram_bank1_e(__register(A) char a, __register(X) char b) -func_ram_bank1_e: { - // [72] func_rom_bank2_b::a#0 = func_ram_bank1_e::a#2 - // [73] func_rom_bank2_b::b#0 = func_ram_bank1_e::b#2 - // [74] call func_rom_bank2_b - // [86] phi from func_ram_bank1_e to func_rom_bank2_b [phi:func_ram_bank1_e->func_rom_bank2_b] - func_rom_bank2_b_from_func_ram_bank1_e: - // [86] phi func_rom_bank2_b::b#3 = func_rom_bank2_b::b#0 [phi:func_ram_bank1_e->func_rom_bank2_b#0] -- register_copy - // [86] phi func_rom_bank2_b::a#3 = func_rom_bank2_b::a#0 [phi:func_ram_bank1_e->func_rom_bank2_b#1] -- register_copy - jsr func_rom_bank2_b - // [75] func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 - jmp __b1 - // func_ram_bank1_e::@1 - __b1: - // [76] func_ram_bank1_e::return#0 = func_rom_bank2_b::return#0 - jmp __breturn - // func_ram_bank1_e::@return - __breturn: - // [77] return - rts -} - // func_ram_bank1_f -// __register(A) char func_ram_bank1_f(char a, char b) -func_ram_bank1_f: { - .const a = '0' - .const b = 7 - // [79] call func_main_a - // [111] phi from func_ram_bank1_f to func_main_a [phi:func_ram_bank1_f->func_main_a] - func_main_a_from_func_ram_bank1_f: - // [111] phi func_main_a::b#3 = func_ram_bank1_f::b#0 [phi:func_ram_bank1_f->func_main_a#0] -- vbuxx=vbuc1 - ldx #b - // [111] phi func_main_a::a#3 = func_ram_bank1_f::a#0 [phi:func_ram_bank1_f->func_main_a#1] -- vbuaa=vbuc1 - lda #a - jsr func_main_a - // [80] func_main_a::return#0 = func_main_a::return#2 - jmp __b1 - // func_ram_bank1_f::@1 - __b1: - // [81] func_ram_bank1_f::return#0 = func_main_a::return#0 - jmp __breturn - // func_ram_bank1_f::@return - __breturn: - // [82] return - rts -} -.segment Bank2 - // func_rom_bank2_a -// The sequent functions will be banked using call method rom in bank number 2. -// __register(A) char func_rom_bank2_a(__register(X) char a, __register(A) char b) -func_rom_bank2_a: { - // [84] func_rom_bank2_a::return#1 = func_rom_bank2_a::a#3 + func_rom_bank2_a::b#3 -- vbuaa=vbuxx_plus_vbuaa - stx.z $ff - clc - adc.z $ff - jmp __breturn - // func_rom_bank2_a::@return - __breturn: - // [85] return - rts -} - // func_rom_bank2_b -// The __bank directive declares this function to be banked using call method rom in bank number 2 of banked rom. -// __register(A) char func_rom_bank2_b(__register(A) char a, __register(X) char b) -func_rom_bank2_b: { - // [87] func_rom_bank2_b::return#1 = func_rom_bank2_b::a#3 + func_rom_bank2_b::b#3 -- vbuaa=vbuaa_plus_vbuxx - stx.z $ff - clc - adc.z $ff - jmp __breturn - // func_rom_bank2_b::@return - __breturn: - // [88] return - rts -} - // func_rom_bank2_c -// __register(A) char func_rom_bank2_c(char a, char b) -func_rom_bank2_c: { - .const a = '0' - .const b = 7 - // [90] call func_ram_bank1_a - // [56] phi from func_rom_bank2_c to func_ram_bank1_a [phi:func_rom_bank2_c->func_ram_bank1_a] - func_ram_bank1_a_from_func_rom_bank2_c: - // [56] phi func_ram_bank1_a::b#3 = func_rom_bank2_c::b#0 [phi:func_rom_bank2_c->func_ram_bank1_a#0] -- vbuaa=vbuc1 - lda #b - // [56] phi func_ram_bank1_a::a#3 = func_rom_bank2_c::a#0 [phi:func_rom_bank2_c->func_ram_bank1_a#1] -- call_far_cx16_ram_finalize - ldx #a - jsr $ff6e - .byte func_ram_bank1_a - .byte 1 - // [91] func_ram_bank1_a::return#3 = func_ram_bank1_a::return#0 - jmp __b1 - // func_rom_bank2_c::@1 - __b1: - // [92] func_rom_bank2_c::return#0 = func_ram_bank1_a::return#3 - jmp __breturn - // func_rom_bank2_c::@return - __breturn: - // [93] return - rts -} - // func_rom_bank2_d -// __register(A) char func_rom_bank2_d(char a, char b) -func_rom_bank2_d: { - .const a = '0' - .const b = 7 - // [95] call func_rom_bank2_a - // [83] phi from func_rom_bank2_d to func_rom_bank2_a [phi:func_rom_bank2_d->func_rom_bank2_a] - func_rom_bank2_a_from_func_rom_bank2_d: - // [83] phi func_rom_bank2_a::b#3 = func_rom_bank2_d::b#0 [phi:func_rom_bank2_d->func_rom_bank2_a#0] -- vbuaa=vbuc1 - lda #b - // [83] phi func_rom_bank2_a::a#3 = func_rom_bank2_d::a#0 [phi:func_rom_bank2_d->func_rom_bank2_a#1] -- vbuxx=vbuc1 - ldx #a - jsr func_rom_bank2_a - // [96] func_rom_bank2_a::return#3 = func_rom_bank2_a::return#1 - jmp __b1 - // func_rom_bank2_d::@1 - __b1: - // [97] func_rom_bank2_d::return#0 = func_rom_bank2_a::return#3 - jmp __breturn - // func_rom_bank2_d::@return - __breturn: - // [98] return - rts -} - // func_rom_bank2_e -// __register(A) char func_rom_bank2_e(__register(A) char a, __register(X) char b) -func_rom_bank2_e: { - // [100] func_rom_bank2_b::a#1 = func_rom_bank2_e::a#2 - // [101] func_rom_bank2_b::b#1 = func_rom_bank2_e::b#2 - // [102] call func_rom_bank2_b - // [86] phi from func_rom_bank2_e to func_rom_bank2_b [phi:func_rom_bank2_e->func_rom_bank2_b] - func_rom_bank2_b_from_func_rom_bank2_e: - // [86] phi func_rom_bank2_b::b#3 = func_rom_bank2_b::b#1 [phi:func_rom_bank2_e->func_rom_bank2_b#0] -- register_copy - // [86] phi func_rom_bank2_b::a#3 = func_rom_bank2_b::a#1 [phi:func_rom_bank2_e->func_rom_bank2_b#1] -- register_copy - jsr func_rom_bank2_b - // [103] func_rom_bank2_b::return#3 = func_rom_bank2_b::return#1 - jmp __b1 - // func_rom_bank2_e::@1 - __b1: - // [104] func_rom_bank2_e::return#0 = func_rom_bank2_b::return#3 - jmp __breturn - // func_rom_bank2_e::@return - __breturn: - // [105] return - rts -} - // func_rom_bank2_f -// __register(A) char func_rom_bank2_f(char a, char b) -func_rom_bank2_f: { - .const a = '0' - .const b = 7 - // [107] call func_main_a - // [111] phi from func_rom_bank2_f to func_main_a [phi:func_rom_bank2_f->func_main_a] - func_main_a_from_func_rom_bank2_f: - // [111] phi func_main_a::b#3 = func_rom_bank2_f::b#0 [phi:func_rom_bank2_f->func_main_a#0] -- vbuxx=vbuc1 - ldx #b - // [111] phi func_main_a::a#3 = func_rom_bank2_f::a#0 [phi:func_rom_bank2_f->func_main_a#1] -- vbuaa=vbuc1 - lda #a - jsr func_main_a - // [108] func_main_a::return#1 = func_main_a::return#2 - jmp __b1 - // func_rom_bank2_f::@1 - __b1: - // [109] func_rom_bank2_f::return#0 = func_main_a::return#1 - jmp __breturn - // func_rom_bank2_f::@return - __breturn: - // [110] return - rts -} -.segment Code - // func_main_a -// The sequent functions will be addressed in the default main memory location (segment Code). -// Allocated in main memory. -// __register(A) char func_main_a(__register(A) char a, __register(X) char b) -func_main_a: { - // [112] func_ram_bank1_e::a#0 = func_main_a::a#3 - // [113] func_ram_bank1_e::b#0 = func_main_a::b#3 - // [114] call func_ram_bank1_e - // [71] phi from func_main_a to func_ram_bank1_e [phi:func_main_a->func_ram_bank1_e] - func_ram_bank1_e_from_func_main_a: - // [71] phi func_ram_bank1_e::b#2 = func_ram_bank1_e::b#0 [phi:func_main_a->func_ram_bank1_e#0] -- register_copy - // [71] phi func_ram_bank1_e::a#2 = func_ram_bank1_e::a#0 [phi:func_main_a->func_ram_bank1_e#1] -- call_far_cx16_ram_finalize - jsr $ff6e - .byte func_ram_bank1_e - .byte 1 - // [115] func_ram_bank1_e::return#2 = func_ram_bank1_e::return#0 - jmp __b1 - // func_main_a::@1 - __b1: - // [116] func_main_a::return#2 = func_ram_bank1_e::return#2 - jmp __breturn - // func_main_a::@return - __breturn: - // [117] return - rts -} - // func_main_b -// Allocated in main memory. -// __register(A) char func_main_b(char a, char b) -func_main_b: { - .const a = '0' - .const b = 7 - // [119] call func_rom_bank2_e - // [99] phi from func_main_b to func_rom_bank2_e [phi:func_main_b->func_rom_bank2_e] - func_rom_bank2_e_from_func_main_b: - // [99] phi func_rom_bank2_e::b#2 = func_main_b::b#0 [phi:func_main_b->func_rom_bank2_e#0] -- vbuxx=vbuc1 - ldx #b - // [99] phi func_rom_bank2_e::a#2 = func_main_b::a#0 [phi:func_main_b->func_rom_bank2_e#1] -- call_far_cx16_rom_finalize - lda #a - jsr $ff6e - .byte func_rom_bank2_e - .byte 2 - // [120] func_rom_bank2_e::return#2 = func_rom_bank2_e::return#0 - jmp __b1 - // func_main_b::@1 - __b1: - // [121] func_main_b::return#0 = func_rom_bank2_e::return#2 - jmp __breturn - // func_main_b::@return - __breturn: - // [122] return - rts -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __b1 -Removing instruction jmp __b2 -Removing instruction jmp __b3 -Removing instruction jmp __b4 -Removing instruction jmp __b5 -Removing instruction jmp __b6 -Removing instruction jmp __b7 -Removing instruction jmp __b8 -Removing instruction jmp __b9 -Removing instruction jmp __b10 -Removing instruction jmp __b11 -Removing instruction jmp __b12 -Removing instruction jmp __b13 -Removing instruction jmp __b14 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction func_ram_bank1_a_from_main: -Removing instruction __b1: -Removing instruction func_ram_bank1_b_from___b1: -Removing instruction __b2: -Removing instruction func_ram_bank1_c_from___b2: -Removing instruction __b3: -Removing instruction func_ram_bank1_d_from___b3: -Removing instruction __b4: -Removing instruction func_ram_bank1_e_from___b4: -Removing instruction __b5: -Removing instruction func_ram_bank1_f_from___b5: -Removing instruction __b6: -Removing instruction func_rom_bank2_a_from___b6: -Removing instruction __b7: -Removing instruction func_rom_bank2_b_from___b7: -Removing instruction __b8: -Removing instruction func_rom_bank2_c_from___b8: -Removing instruction __b9: -Removing instruction func_rom_bank2_d_from___b9: -Removing instruction __b10: -Removing instruction func_rom_bank2_e_from___b10: -Removing instruction __b11: -Removing instruction func_rom_bank2_f_from___b11: -Removing instruction __b12: -Removing instruction func_main_a_from___b12: -Removing instruction __b13: -Removing instruction func_main_b_from___b13: -Removing instruction __b14: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction func_ram_bank1_a_from_func_ram_bank1_c: -Removing instruction __b1: -Removing instruction func_rom_bank2_a_from_func_ram_bank1_d: -Removing instruction __b1: -Removing instruction func_rom_bank2_b_from_func_ram_bank1_e: -Removing instruction __b1: -Removing instruction func_main_a_from_func_ram_bank1_f: -Removing instruction __b1: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction func_ram_bank1_a_from_func_rom_bank2_c: -Removing instruction __b1: -Removing instruction func_rom_bank2_a_from_func_rom_bank2_d: -Removing instruction __b1: -Removing instruction func_rom_bank2_b_from_func_rom_bank2_e: -Removing instruction __b1: -Removing instruction func_main_a_from_func_rom_bank2_f: -Removing instruction __b1: -Removing instruction func_ram_bank1_e_from_func_main_a: -Removing instruction __b1: -Removing instruction func_rom_bank2_e_from_func_main_b: -Removing instruction __b1: -Succesful ASM optimization Pass5UnusedLabelElimination - -FINAL SYMBOL TABLE -__constant char * const SCREEN = (char *) 1024 -char func_main_a(char a , char b) -char func_main_a::a -char func_main_a::a#3 // reg byte a 101.0 -char func_main_a::b -char func_main_a::b#3 // reg byte x 50.5 -char func_main_a::return -char func_main_a::return#0 // reg byte a 22.0 -char func_main_a::return#1 // reg byte a 22.0 -char func_main_a::return#2 // reg byte a 25.0 -char func_main_a::return#4 // reg byte a 4.0 -char func_main_b(char a , char b) -char func_main_b::a -__constant char func_main_b::a#0 = '0' // a -char func_main_b::b -__constant char func_main_b::b#0 = 7 // b -char func_main_b::return -char func_main_b::return#0 // reg byte a 4.333333333333333 -char func_main_b::return#2 // reg byte a 4.0 -__bank(bank) char func_ram_bank1_a(char a , char b) -char func_ram_bank1_a::a -char func_ram_bank1_a::a#3 // reg byte x 101.0 -char func_ram_bank1_a::b -char func_ram_bank1_a::b#3 // reg byte a 101.0 -char func_ram_bank1_a::return -char func_ram_bank1_a::return#0 // reg byte a 24.999999999999996 -char func_ram_bank1_a::return#2 // reg byte a 22.0 -char func_ram_bank1_a::return#3 // reg byte a 22.0 -char func_ram_bank1_a::return#4 // reg byte a 4.0 -char func_ram_bank1_b(char a , char b) -char func_ram_bank1_b::a -__constant char func_ram_bank1_b::a#0 = '0' // a -char func_ram_bank1_b::b -__constant char func_ram_bank1_b::b#0 = 7 // b -char func_ram_bank1_b::return -__constant char func_ram_bank1_b::return#0 = func_ram_bank1_b::a#0+func_ram_bank1_b::b#0 // return -__bank(bank) char func_ram_bank1_c(char a , char b) -char func_ram_bank1_c::a -__constant char func_ram_bank1_c::a#0 = '0' // a -char func_ram_bank1_c::b -__constant char func_ram_bank1_c::b#0 = 7 // b -char func_ram_bank1_c::return -char func_ram_bank1_c::return#0 // reg byte a 4.333333333333333 -char func_ram_bank1_c::return#2 // reg byte a 4.0 -__bank(bank) char func_ram_bank1_d(char a , char b) -char func_ram_bank1_d::a -__constant char func_ram_bank1_d::a#0 = '0' // a -char func_ram_bank1_d::b -__constant char func_ram_bank1_d::b#0 = 7 // b -char func_ram_bank1_d::return -char func_ram_bank1_d::return#0 // reg byte a 4.333333333333333 -char func_ram_bank1_d::return#2 // reg byte a 4.0 -__bank(bank) char func_ram_bank1_e(char a , char b) -char func_ram_bank1_e::a -char func_ram_bank1_e::a#0 // reg byte a 101.0 -char func_ram_bank1_e::a#2 // reg byte a 1102.0 -char func_ram_bank1_e::b -char func_ram_bank1_e::b#0 // reg byte x 202.0 -char func_ram_bank1_e::b#2 // reg byte x 551.0 -char func_ram_bank1_e::return -char func_ram_bank1_e::return#0 // reg byte a 276.0 -char func_ram_bank1_e::return#2 // reg byte a 202.0 -char func_ram_bank1_e::return#3 // reg byte a 4.0 -__bank(bank) char func_ram_bank1_f(char a , char b) -char func_ram_bank1_f::a -__constant char func_ram_bank1_f::a#0 = '0' // a -char func_ram_bank1_f::b -__constant char func_ram_bank1_f::b#0 = 7 // b -char func_ram_bank1_f::return -char func_ram_bank1_f::return#0 // reg byte a 4.333333333333333 -char func_ram_bank1_f::return#2 // reg byte a 4.0 -__bank(bank) char func_rom_bank2_a(char a , char b) -char func_rom_bank2_a::a -char func_rom_bank2_a::a#3 // reg byte x 101.0 -char func_rom_bank2_a::b -char func_rom_bank2_a::b#3 // reg byte a 101.0 -char func_rom_bank2_a::return -char func_rom_bank2_a::return#0 // reg byte a 22.0 -char func_rom_bank2_a::return#1 // reg byte a 25.0 -char func_rom_bank2_a::return#3 // reg byte a 22.0 -char func_rom_bank2_a::return#4 // reg byte a 4.0 -char func_rom_bank2_b(char a , char b) -char func_rom_bank2_b::a -char func_rom_bank2_b::a#0 // reg byte a 1001.0 -char func_rom_bank2_b::a#1 // reg byte a 101.0 -char func_rom_bank2_b::a#3 // reg byte a 11103.0 -char func_rom_bank2_b::b -char func_rom_bank2_b::b#0 // reg byte x 2002.0 -char func_rom_bank2_b::b#1 // reg byte x 202.0 -char func_rom_bank2_b::b#3 // reg byte x 11103.0 -char func_rom_bank2_b::return -char func_rom_bank2_b::return#0 // reg byte a 2002.0 -char func_rom_bank2_b::return#1 // reg byte a 2221.0 -char func_rom_bank2_b::return#3 // reg byte a 202.0 -char func_rom_bank2_b::return#4 // reg byte a 4.0 -__bank(bank) char func_rom_bank2_c(char a , char b) -char func_rom_bank2_c::a -__constant char func_rom_bank2_c::a#0 = '0' // a -char func_rom_bank2_c::b -__constant char func_rom_bank2_c::b#0 = 7 // b -char func_rom_bank2_c::return -char func_rom_bank2_c::return#0 // reg byte a 4.333333333333333 -char func_rom_bank2_c::return#2 // reg byte a 4.0 -__bank(bank) char func_rom_bank2_d(char a , char b) -char func_rom_bank2_d::a -__constant char func_rom_bank2_d::a#0 = '0' // a -char func_rom_bank2_d::b -__constant char func_rom_bank2_d::b#0 = 7 // b -char func_rom_bank2_d::return -char func_rom_bank2_d::return#0 // reg byte a 4.333333333333333 -char func_rom_bank2_d::return#2 // reg byte a 4.0 -__bank(bank) char func_rom_bank2_e(char a , char b) -char func_rom_bank2_e::a -char func_rom_bank2_e::a#2 // reg byte a 101.0 -char func_rom_bank2_e::b -char func_rom_bank2_e::b#2 // reg byte x 50.5 -char func_rom_bank2_e::return -char func_rom_bank2_e::return#0 // reg byte a 28.5 -char func_rom_bank2_e::return#2 // reg byte a 22.0 -char func_rom_bank2_e::return#3 // reg byte a 4.0 -__bank(bank) char func_rom_bank2_f(char a , char b) -char func_rom_bank2_f::a -__constant char func_rom_bank2_f::a#0 = '0' // a -char func_rom_bank2_f::b -__constant char func_rom_bank2_f::b#0 = 7 // b -char func_rom_bank2_f::return -char func_rom_bank2_f::return#0 // reg byte a 4.333333333333333 -char func_rom_bank2_f::return#2 // reg byte a 4.0 -void main() -char main::$0 // reg byte a 4.0 -char main::$10 // reg byte a 4.0 -char main::$11 // reg byte a 4.0 -char main::$12 // reg byte a 4.0 -char main::$13 // reg byte a 4.0 -char main::$2 // reg byte a 4.0 -char main::$3 // reg byte a 4.0 -char main::$4 // reg byte a 4.0 -char main::$5 // reg byte a 4.0 -char main::$6 // reg byte a 4.0 -char main::$7 // reg byte a 4.0 -char main::$8 // reg byte a 4.0 -char main::$9 // reg byte a 4.0 - -reg byte x [ func_ram_bank1_a::a#3 ] -reg byte a [ func_ram_bank1_a::b#3 ] -reg byte a [ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] -reg byte x [ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] -reg byte x [ func_rom_bank2_a::a#3 ] -reg byte a [ func_rom_bank2_a::b#3 ] -reg byte a [ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] -reg byte x [ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] -reg byte a [ func_rom_bank2_e::a#2 ] -reg byte x [ func_rom_bank2_e::b#2 ] -reg byte a [ func_main_a::a#3 ] -reg byte x [ func_main_a::b#3 ] -reg byte a [ func_ram_bank1_a::return#4 ] -reg byte a [ main::$0 ] -reg byte a [ func_ram_bank1_c::return#2 ] -reg byte a [ main::$2 ] -reg byte a [ func_ram_bank1_d::return#2 ] -reg byte a [ main::$3 ] -reg byte a [ func_ram_bank1_e::return#3 ] -reg byte a [ main::$4 ] -reg byte a [ func_ram_bank1_f::return#2 ] -reg byte a [ main::$5 ] -reg byte a [ func_rom_bank2_a::return#4 ] -reg byte a [ main::$6 ] -reg byte a [ func_rom_bank2_b::return#4 ] -reg byte a [ main::$7 ] -reg byte a [ func_rom_bank2_c::return#2 ] -reg byte a [ main::$8 ] -reg byte a [ func_rom_bank2_d::return#2 ] -reg byte a [ main::$9 ] -reg byte a [ func_rom_bank2_e::return#3 ] -reg byte a [ main::$10 ] -reg byte a [ func_rom_bank2_f::return#2 ] -reg byte a [ main::$11 ] -reg byte a [ func_main_a::return#4 ] -reg byte a [ main::$12 ] -reg byte a [ func_main_b::return#2 ] -reg byte a [ main::$13 ] -reg byte a [ func_ram_bank1_a::return#0 ] -reg byte a [ func_ram_bank1_a::return#2 ] -reg byte a [ func_ram_bank1_c::return#0 ] -reg byte a [ func_rom_bank2_a::return#0 ] -reg byte a [ func_ram_bank1_d::return#0 ] -reg byte a [ func_rom_bank2_b::return#0 ] -reg byte a [ func_ram_bank1_e::return#0 ] -reg byte a [ func_main_a::return#0 ] -reg byte a [ func_ram_bank1_f::return#0 ] -reg byte a [ func_rom_bank2_a::return#1 ] -reg byte a [ func_rom_bank2_b::return#1 ] -reg byte a [ func_ram_bank1_a::return#3 ] -reg byte a [ func_rom_bank2_c::return#0 ] -reg byte a [ func_rom_bank2_a::return#3 ] -reg byte a [ func_rom_bank2_d::return#0 ] -reg byte a [ func_rom_bank2_b::return#3 ] -reg byte a [ func_rom_bank2_e::return#0 ] -reg byte a [ func_main_a::return#1 ] -reg byte a [ func_rom_bank2_f::return#0 ] -reg byte a [ func_ram_bank1_e::return#2 ] -reg byte a [ func_main_a::return#2 ] -reg byte a [ func_rom_bank2_e::return#2 ] -reg byte a [ func_main_b::return#0 ] - - -FINAL ASSEMBLER -Score: 368 - - // File Comments -// The linker specification of the different segments. - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, Bank1, Bank2"] -.segmentdef Basic [start=$0801]a -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] -.segmentdef Bank2 [start=$C000, min=$C000, max=$FFFF, align=$100] - - - // Global Constants & labels - // The target computer platform is the Commander X16, - // which implements banking in ram between 0xA0000 and 0xBFFF, - // and in rom between 0xC000 and 0xFFFF. - .label SCREEN = $400 -.segment Code - // main -// Practically this means that the main() function is placed in main memory ... -main: { - // func_ram_bank1_a('0', 7) - // [1] call func_ram_bank1_a - // [56] phi from main to func_ram_bank1_a [phi:main->func_ram_bank1_a] - // [56] phi func_ram_bank1_a::b#3 = 7 [phi:main->func_ram_bank1_a#0] -- vbuaa=vbuc1 - lda #7 - // [56] phi func_ram_bank1_a::a#3 = '0' [phi:main->func_ram_bank1_a#1] -- call_far_cx16_ram_finalize - ldx #'0' - jsr $ff6e - .byte func_ram_bank1_a - .byte 1 - // func_ram_bank1_a('0', 7) - // [2] func_ram_bank1_a::return#4 = func_ram_bank1_a::return#0 - // main::@1 - // [3] main::$0 = func_ram_bank1_a::return#4 - // SCREEN[0] = func_ram_bank1_a('0', 7) - // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - // func_ram_bank1_b('0', 7) - // [5] call func_ram_bank1_b - // [59] phi from main::@1 to func_ram_bank1_b [phi:main::@1->func_ram_bank1_b] - jsr func_ram_bank1_b - // main::@2 - // SCREEN[0] = func_ram_bank1_b('0', 7) - // [6] *SCREEN = func_ram_bank1_b::return#0 -- _deref_pbuc1=vbuc2 - // Banked call to ram in bank 1 from main memory. - lda #func_ram_bank1_b.return - sta SCREEN - // func_ram_bank1_c('0', 7) - // [7] call func_ram_bank1_c - // [61] phi from main::@2 to func_ram_bank1_c [phi:main::@2->func_ram_bank1_c] -- call_far_cx16_ram_finalize - jsr $ff6e - .byte func_ram_bank1_c - .byte 1 - // func_ram_bank1_c('0', 7) - // [8] func_ram_bank1_c::return#2 = func_ram_bank1_c::return#0 - // main::@3 - // [9] main::$2 = func_ram_bank1_c::return#2 - // SCREEN[0] = func_ram_bank1_c('0', 7) - // [10] *SCREEN = main::$2 -- _deref_pbuc1=vbuaa - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // func_ram_bank1_d('0', 7) - // [11] call func_ram_bank1_d - // [66] phi from main::@3 to func_ram_bank1_d [phi:main::@3->func_ram_bank1_d] -- call_far_cx16_ram_finalize - jsr $ff6e - .byte func_ram_bank1_d - .byte 1 - // func_ram_bank1_d('0', 7) - // [12] func_ram_bank1_d::return#2 = func_ram_bank1_d::return#0 - // main::@4 - // [13] main::$3 = func_ram_bank1_d::return#2 - // SCREEN[0] = func_ram_bank1_d('0', 7) - // [14] *SCREEN = main::$3 -- _deref_pbuc1=vbuaa - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // func_ram_bank1_e('0', 7) - // [15] call func_ram_bank1_e - // [71] phi from main::@4 to func_ram_bank1_e [phi:main::@4->func_ram_bank1_e] - // [71] phi func_ram_bank1_e::b#2 = 7 [phi:main::@4->func_ram_bank1_e#0] -- vbuxx=vbuc1 - ldx #7 - // [71] phi func_ram_bank1_e::a#2 = '0' [phi:main::@4->func_ram_bank1_e#1] -- call_far_cx16_ram_finalize - lda #'0' - jsr $ff6e - .byte func_ram_bank1_e - .byte 1 - // func_ram_bank1_e('0', 7) - // [16] func_ram_bank1_e::return#3 = func_ram_bank1_e::return#0 - // main::@5 - // [17] main::$4 = func_ram_bank1_e::return#3 - // SCREEN[0] = func_ram_bank1_e('0', 7) - // [18] *SCREEN = main::$4 -- _deref_pbuc1=vbuaa - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // func_ram_bank1_f('0', 7) - // [19] call func_ram_bank1_f - // [78] phi from main::@5 to func_ram_bank1_f [phi:main::@5->func_ram_bank1_f] -- call_far_cx16_ram_finalize - jsr $ff6e - .byte func_ram_bank1_f - .byte 1 - // func_ram_bank1_f('0', 7) - // [20] func_ram_bank1_f::return#2 = func_ram_bank1_f::return#0 - // main::@6 - // [21] main::$5 = func_ram_bank1_f::return#2 - // SCREEN[0] = func_ram_bank1_f('0', 7) - // [22] *SCREEN = main::$5 -- _deref_pbuc1=vbuaa - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // func_rom_bank2_a('0', 7) - // [23] call func_rom_bank2_a - // [83] phi from main::@6 to func_rom_bank2_a [phi:main::@6->func_rom_bank2_a] - // [83] phi func_rom_bank2_a::b#3 = 7 [phi:main::@6->func_rom_bank2_a#0] -- vbuaa=vbuc1 - lda #7 - // [83] phi func_rom_bank2_a::a#3 = '0' [phi:main::@6->func_rom_bank2_a#1] -- call_far_cx16_rom_finalize - ldx #'0' - jsr $ff6e - .byte func_rom_bank2_a - .byte 2 - // func_rom_bank2_a('0', 7) - // [24] func_rom_bank2_a::return#4 = func_rom_bank2_a::return#1 - // main::@7 - // [25] main::$6 = func_rom_bank2_a::return#4 - // SCREEN[0] = func_rom_bank2_a('0', 7) - // [26] *SCREEN = main::$6 -- _deref_pbuc1=vbuaa - // Banked call to ram in bank 1 from main memory. - sta SCREEN - // func_rom_bank2_b('0', 7) - // [27] call func_rom_bank2_b - // [86] phi from main::@7 to func_rom_bank2_b [phi:main::@7->func_rom_bank2_b] - // [86] phi func_rom_bank2_b::b#3 = 7 [phi:main::@7->func_rom_bank2_b#0] -- vbuxx=vbuc1 - ldx #7 - // [86] phi func_rom_bank2_b::a#3 = '0' [phi:main::@7->func_rom_bank2_b#1] -- vbuaa=vbuc1 - lda #'0' - jsr func_rom_bank2_b - // func_rom_bank2_b('0', 7) - // [28] func_rom_bank2_b::return#4 = func_rom_bank2_b::return#1 - // main::@8 - // [29] main::$7 = func_rom_bank2_b::return#4 - // SCREEN[0] = func_rom_bank2_b('0', 7) - // [30] *SCREEN = main::$7 -- _deref_pbuc1=vbuaa - // Banked call to rom in bank 2 from main memory. - sta SCREEN - // func_rom_bank2_c('0', 7) - // [31] call func_rom_bank2_c - // [89] phi from main::@8 to func_rom_bank2_c [phi:main::@8->func_rom_bank2_c] -- call_far_cx16_rom_finalize - jsr $ff6e - .byte func_rom_bank2_c - .byte 2 - // func_rom_bank2_c('0', 7) - // [32] func_rom_bank2_c::return#2 = func_rom_bank2_c::return#0 - // main::@9 - // [33] main::$8 = func_rom_bank2_c::return#2 - // SCREEN[0] = func_rom_bank2_c('0', 7) - // [34] *SCREEN = main::$8 -- _deref_pbuc1=vbuaa - // Banked call to rom in bank 2 from main memory. - sta SCREEN - // func_rom_bank2_d('0', 7) - // [35] call func_rom_bank2_d - // [94] phi from main::@9 to func_rom_bank2_d [phi:main::@9->func_rom_bank2_d] -- call_far_cx16_rom_finalize - jsr $ff6e - .byte func_rom_bank2_d - .byte 2 - // func_rom_bank2_d('0', 7) - // [36] func_rom_bank2_d::return#2 = func_rom_bank2_d::return#0 - // main::@10 - // [37] main::$9 = func_rom_bank2_d::return#2 - // SCREEN[0] = func_rom_bank2_d('0', 7) - // [38] *SCREEN = main::$9 -- _deref_pbuc1=vbuaa - // Banked call to rom in bank 2 from main memory. - sta SCREEN - // func_rom_bank2_e('0', 7) - // [39] call func_rom_bank2_e - // [99] phi from main::@10 to func_rom_bank2_e [phi:main::@10->func_rom_bank2_e] - // [99] phi func_rom_bank2_e::b#2 = 7 [phi:main::@10->func_rom_bank2_e#0] -- vbuxx=vbuc1 - ldx #7 - // [99] phi func_rom_bank2_e::a#2 = '0' [phi:main::@10->func_rom_bank2_e#1] -- call_far_cx16_rom_finalize - lda #'0' - jsr $ff6e - .byte func_rom_bank2_e - .byte 2 - // func_rom_bank2_e('0', 7) - // [40] func_rom_bank2_e::return#3 = func_rom_bank2_e::return#0 - // main::@11 - // [41] main::$10 = func_rom_bank2_e::return#3 - // SCREEN[0] = func_rom_bank2_e('0', 7) - // [42] *SCREEN = main::$10 -- _deref_pbuc1=vbuaa - // Banked call to rom in bank 2 from main memory. - sta SCREEN - // func_rom_bank2_f('0', 7) - // [43] call func_rom_bank2_f - // [106] phi from main::@11 to func_rom_bank2_f [phi:main::@11->func_rom_bank2_f] -- call_far_cx16_rom_finalize - jsr $ff6e - .byte func_rom_bank2_f - .byte 2 - // func_rom_bank2_f('0', 7) - // [44] func_rom_bank2_f::return#2 = func_rom_bank2_f::return#0 - // main::@12 - // [45] main::$11 = func_rom_bank2_f::return#2 - // SCREEN[0] = func_rom_bank2_f('0', 7) - // [46] *SCREEN = main::$11 -- _deref_pbuc1=vbuaa - // banked call to rom in bank 2 from main memory. - sta SCREEN - // func_main_a('0', 7) - // [47] call func_main_a - // [111] phi from main::@12 to func_main_a [phi:main::@12->func_main_a] - // [111] phi func_main_a::b#3 = 7 [phi:main::@12->func_main_a#0] -- vbuxx=vbuc1 - ldx #7 - // [111] phi func_main_a::a#3 = '0' [phi:main::@12->func_main_a#1] -- vbuaa=vbuc1 - lda #'0' - jsr func_main_a - // func_main_a('0', 7) - // [48] func_main_a::return#4 = func_main_a::return#2 - // main::@13 - // [49] main::$12 = func_main_a::return#4 - // SCREEN[0] = func_main_a('0', 7) - // [50] *SCREEN = main::$12 -- _deref_pbuc1=vbuaa - // banked call to rom in bank 2 from main memory. - sta SCREEN - // func_main_b('0', 7) - // [51] call func_main_b - // [118] phi from main::@13 to func_main_b [phi:main::@13->func_main_b] - jsr func_main_b - // func_main_b('0', 7) - // [52] func_main_b::return#2 = func_main_b::return#0 - // main::@14 - // [53] main::$13 = func_main_b::return#2 - // SCREEN[0] = func_main_b('0', 7) - // [54] *SCREEN = main::$13 -- _deref_pbuc1=vbuaa - // Near call in main memory from main memory. - sta SCREEN - // main::@return - // } - // [55] return - rts -} -.segment Bank1 - // func_ram_bank1_a -// Functional code -// __register(A) char func_ram_bank1_a(__register(X) char a, __register(A) char b) -func_ram_bank1_a: { - // a + b - // [57] func_ram_bank1_a::return#0 = func_ram_bank1_a::a#3 + func_ram_bank1_a::b#3 -- vbuaa=vbuxx_plus_vbuaa - stx.z $ff - clc - adc.z $ff - // func_ram_bank1_a::@return - // } - // [58] return - rts -} -.segment Bank2 - // func_ram_bank1_b -// The sequent functions will consider no banking calculations anymore. -// The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram. -// char func_ram_bank1_b(char a, char b) -func_ram_bank1_b: { - .const a = '0' - .const b = 7 - .label return = a+b - // func_ram_bank1_b::@return - // [60] return - rts -} -.segment Bank1 - // func_ram_bank1_c -// __register(A) char func_ram_bank1_c(char a, char b) -func_ram_bank1_c: { - .const a = '0' - .const b = 7 - // func_ram_bank1_a(a, b) - // [62] call func_ram_bank1_a - // [56] phi from func_ram_bank1_c to func_ram_bank1_a [phi:func_ram_bank1_c->func_ram_bank1_a] - // [56] phi func_ram_bank1_a::b#3 = func_ram_bank1_c::b#0 [phi:func_ram_bank1_c->func_ram_bank1_a#0] -- vbuaa=vbuc1 - lda #b - // [56] phi func_ram_bank1_a::a#3 = func_ram_bank1_c::a#0 [phi:func_ram_bank1_c->func_ram_bank1_a#1] -- vbuxx=vbuc1 - ldx #a - jsr func_ram_bank1_a - // func_ram_bank1_a(a, b) - // [63] func_ram_bank1_a::return#2 = func_ram_bank1_a::return#0 - // func_ram_bank1_c::@1 - // [64] func_ram_bank1_c::return#0 = func_ram_bank1_a::return#2 - // func_ram_bank1_c::@return - // } - // [65] return - rts -} - // func_ram_bank1_d -// __register(A) char func_ram_bank1_d(char a, char b) -func_ram_bank1_d: { - .const a = '0' - .const b = 7 - // func_rom_bank2_a(a, b) - // [67] call func_rom_bank2_a - // [83] phi from func_ram_bank1_d to func_rom_bank2_a [phi:func_ram_bank1_d->func_rom_bank2_a] - // [83] phi func_rom_bank2_a::b#3 = func_ram_bank1_d::b#0 [phi:func_ram_bank1_d->func_rom_bank2_a#0] -- vbuaa=vbuc1 - lda #b - // [83] phi func_rom_bank2_a::a#3 = func_ram_bank1_d::a#0 [phi:func_ram_bank1_d->func_rom_bank2_a#1] -- call_far_cx16_rom_finalize - ldx #a - jsr $ff6e - .byte func_rom_bank2_a - .byte 2 - // func_rom_bank2_a(a, b) - // [68] func_rom_bank2_a::return#0 = func_rom_bank2_a::return#1 - // func_ram_bank1_d::@1 - // [69] func_ram_bank1_d::return#0 = func_rom_bank2_a::return#0 - // func_ram_bank1_d::@return - // } - // [70] return - rts -} - // func_ram_bank1_e -// __register(A) char func_ram_bank1_e(__register(A) char a, __register(X) char b) -func_ram_bank1_e: { - // func_rom_bank2_b(a, b) - // [72] func_rom_bank2_b::a#0 = func_ram_bank1_e::a#2 - // [73] func_rom_bank2_b::b#0 = func_ram_bank1_e::b#2 - // [74] call func_rom_bank2_b - // [86] phi from func_ram_bank1_e to func_rom_bank2_b [phi:func_ram_bank1_e->func_rom_bank2_b] - // [86] phi func_rom_bank2_b::b#3 = func_rom_bank2_b::b#0 [phi:func_ram_bank1_e->func_rom_bank2_b#0] -- register_copy - // [86] phi func_rom_bank2_b::a#3 = func_rom_bank2_b::a#0 [phi:func_ram_bank1_e->func_rom_bank2_b#1] -- register_copy - jsr func_rom_bank2_b - // func_rom_bank2_b(a, b) - // [75] func_rom_bank2_b::return#0 = func_rom_bank2_b::return#1 - // func_ram_bank1_e::@1 - // [76] func_ram_bank1_e::return#0 = func_rom_bank2_b::return#0 - // func_ram_bank1_e::@return - // } - // [77] return - rts -} - // func_ram_bank1_f -// __register(A) char func_ram_bank1_f(char a, char b) -func_ram_bank1_f: { - .const a = '0' - .const b = 7 - // func_main_a(a, b) - // [79] call func_main_a - // [111] phi from func_ram_bank1_f to func_main_a [phi:func_ram_bank1_f->func_main_a] - // [111] phi func_main_a::b#3 = func_ram_bank1_f::b#0 [phi:func_ram_bank1_f->func_main_a#0] -- vbuxx=vbuc1 - ldx #b - // [111] phi func_main_a::a#3 = func_ram_bank1_f::a#0 [phi:func_ram_bank1_f->func_main_a#1] -- vbuaa=vbuc1 - lda #a - jsr func_main_a - // func_main_a(a, b) - // [80] func_main_a::return#0 = func_main_a::return#2 - // func_ram_bank1_f::@1 - // [81] func_ram_bank1_f::return#0 = func_main_a::return#0 - // func_ram_bank1_f::@return - // } - // [82] return - rts -} -.segment Bank2 - // func_rom_bank2_a -// The sequent functions will be banked using call method rom in bank number 2. -// __register(A) char func_rom_bank2_a(__register(X) char a, __register(A) char b) -func_rom_bank2_a: { - // a + b - // [84] func_rom_bank2_a::return#1 = func_rom_bank2_a::a#3 + func_rom_bank2_a::b#3 -- vbuaa=vbuxx_plus_vbuaa - stx.z $ff - clc - adc.z $ff - // func_rom_bank2_a::@return - // } - // [85] return - rts -} - // func_rom_bank2_b -// The __bank directive declares this function to be banked using call method rom in bank number 2 of banked rom. -// __register(A) char func_rom_bank2_b(__register(A) char a, __register(X) char b) -func_rom_bank2_b: { - // a + b - // [87] func_rom_bank2_b::return#1 = func_rom_bank2_b::a#3 + func_rom_bank2_b::b#3 -- vbuaa=vbuaa_plus_vbuxx - stx.z $ff - clc - adc.z $ff - // func_rom_bank2_b::@return - // } - // [88] return - rts -} - // func_rom_bank2_c -// __register(A) char func_rom_bank2_c(char a, char b) -func_rom_bank2_c: { - .const a = '0' - .const b = 7 - // func_ram_bank1_a(a, b) - // [90] call func_ram_bank1_a - // [56] phi from func_rom_bank2_c to func_ram_bank1_a [phi:func_rom_bank2_c->func_ram_bank1_a] - // [56] phi func_ram_bank1_a::b#3 = func_rom_bank2_c::b#0 [phi:func_rom_bank2_c->func_ram_bank1_a#0] -- vbuaa=vbuc1 - lda #b - // [56] phi func_ram_bank1_a::a#3 = func_rom_bank2_c::a#0 [phi:func_rom_bank2_c->func_ram_bank1_a#1] -- call_far_cx16_ram_finalize - ldx #a - jsr $ff6e - .byte func_ram_bank1_a - .byte 1 - // func_ram_bank1_a(a, b) - // [91] func_ram_bank1_a::return#3 = func_ram_bank1_a::return#0 - // func_rom_bank2_c::@1 - // [92] func_rom_bank2_c::return#0 = func_ram_bank1_a::return#3 - // func_rom_bank2_c::@return - // } - // [93] return - rts -} - // func_rom_bank2_d -// __register(A) char func_rom_bank2_d(char a, char b) -func_rom_bank2_d: { - .const a = '0' - .const b = 7 - // func_rom_bank2_a(a, b) - // [95] call func_rom_bank2_a - // [83] phi from func_rom_bank2_d to func_rom_bank2_a [phi:func_rom_bank2_d->func_rom_bank2_a] - // [83] phi func_rom_bank2_a::b#3 = func_rom_bank2_d::b#0 [phi:func_rom_bank2_d->func_rom_bank2_a#0] -- vbuaa=vbuc1 - lda #b - // [83] phi func_rom_bank2_a::a#3 = func_rom_bank2_d::a#0 [phi:func_rom_bank2_d->func_rom_bank2_a#1] -- vbuxx=vbuc1 - ldx #a - jsr func_rom_bank2_a - // func_rom_bank2_a(a, b) - // [96] func_rom_bank2_a::return#3 = func_rom_bank2_a::return#1 - // func_rom_bank2_d::@1 - // [97] func_rom_bank2_d::return#0 = func_rom_bank2_a::return#3 - // func_rom_bank2_d::@return - // } - // [98] return - rts -} - // func_rom_bank2_e -// __register(A) char func_rom_bank2_e(__register(A) char a, __register(X) char b) -func_rom_bank2_e: { - // func_rom_bank2_b(a, b) - // [100] func_rom_bank2_b::a#1 = func_rom_bank2_e::a#2 - // [101] func_rom_bank2_b::b#1 = func_rom_bank2_e::b#2 - // [102] call func_rom_bank2_b - // [86] phi from func_rom_bank2_e to func_rom_bank2_b [phi:func_rom_bank2_e->func_rom_bank2_b] - // [86] phi func_rom_bank2_b::b#3 = func_rom_bank2_b::b#1 [phi:func_rom_bank2_e->func_rom_bank2_b#0] -- register_copy - // [86] phi func_rom_bank2_b::a#3 = func_rom_bank2_b::a#1 [phi:func_rom_bank2_e->func_rom_bank2_b#1] -- register_copy - jsr func_rom_bank2_b - // func_rom_bank2_b(a, b) - // [103] func_rom_bank2_b::return#3 = func_rom_bank2_b::return#1 - // func_rom_bank2_e::@1 - // [104] func_rom_bank2_e::return#0 = func_rom_bank2_b::return#3 - // func_rom_bank2_e::@return - // } - // [105] return - rts -} - // func_rom_bank2_f -// __register(A) char func_rom_bank2_f(char a, char b) -func_rom_bank2_f: { - .const a = '0' - .const b = 7 - // func_main_a(a, b) - // [107] call func_main_a - // [111] phi from func_rom_bank2_f to func_main_a [phi:func_rom_bank2_f->func_main_a] - // [111] phi func_main_a::b#3 = func_rom_bank2_f::b#0 [phi:func_rom_bank2_f->func_main_a#0] -- vbuxx=vbuc1 - ldx #b - // [111] phi func_main_a::a#3 = func_rom_bank2_f::a#0 [phi:func_rom_bank2_f->func_main_a#1] -- vbuaa=vbuc1 - lda #a - jsr func_main_a - // func_main_a(a, b) - // [108] func_main_a::return#1 = func_main_a::return#2 - // func_rom_bank2_f::@1 - // [109] func_rom_bank2_f::return#0 = func_main_a::return#1 - // func_rom_bank2_f::@return - // } - // [110] return - rts -} -.segment Code - // func_main_a -// The sequent functions will be addressed in the default main memory location (segment Code). -// Allocated in main memory. -// __register(A) char func_main_a(__register(A) char a, __register(X) char b) -func_main_a: { - // func_ram_bank1_e(a, b) - // [112] func_ram_bank1_e::a#0 = func_main_a::a#3 - // [113] func_ram_bank1_e::b#0 = func_main_a::b#3 - // [114] call func_ram_bank1_e - // [71] phi from func_main_a to func_ram_bank1_e [phi:func_main_a->func_ram_bank1_e] - // [71] phi func_ram_bank1_e::b#2 = func_ram_bank1_e::b#0 [phi:func_main_a->func_ram_bank1_e#0] -- register_copy - // [71] phi func_ram_bank1_e::a#2 = func_ram_bank1_e::a#0 [phi:func_main_a->func_ram_bank1_e#1] -- call_far_cx16_ram_finalize - jsr $ff6e - .byte func_ram_bank1_e - .byte 1 - // func_ram_bank1_e(a, b) - // [115] func_ram_bank1_e::return#2 = func_ram_bank1_e::return#0 - // func_main_a::@1 - // [116] func_main_a::return#2 = func_ram_bank1_e::return#2 - // func_main_a::@return - // } - // [117] return - rts -} - // func_main_b -// Allocated in main memory. -// __register(A) char func_main_b(char a, char b) -func_main_b: { - .const a = '0' - .const b = 7 - // func_rom_bank2_e(a, b) - // [119] call func_rom_bank2_e - // [99] phi from func_main_b to func_rom_bank2_e [phi:func_main_b->func_rom_bank2_e] - // [99] phi func_rom_bank2_e::b#2 = func_main_b::b#0 [phi:func_main_b->func_rom_bank2_e#0] -- vbuxx=vbuc1 - ldx #b - // [99] phi func_rom_bank2_e::a#2 = func_main_b::a#0 [phi:func_main_b->func_rom_bank2_e#1] -- call_far_cx16_rom_finalize - lda #a - jsr $ff6e - .byte func_rom_bank2_e - .byte 2 - // func_rom_bank2_e(a, b) - // [120] func_rom_bank2_e::return#2 = func_rom_bank2_e::return#0 - // func_main_b::@1 - // [121] func_main_b::return#0 = func_rom_bank2_e::return#2 - // func_main_b::@return - // } - // [122] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-phi-bank-5.sym b/src/test/ref/procedure-callingconvention-phi-bank-5.sym deleted file mode 100644 index 4b1b61e72..000000000 --- a/src/test/ref/procedure-callingconvention-phi-bank-5.sym +++ /dev/null @@ -1,204 +0,0 @@ -__constant char * const SCREEN = (char *) 1024 -char func_main_a(char a , char b) -char func_main_a::a -char func_main_a::a#3 // reg byte a 101.0 -char func_main_a::b -char func_main_a::b#3 // reg byte x 50.5 -char func_main_a::return -char func_main_a::return#0 // reg byte a 22.0 -char func_main_a::return#1 // reg byte a 22.0 -char func_main_a::return#2 // reg byte a 25.0 -char func_main_a::return#4 // reg byte a 4.0 -char func_main_b(char a , char b) -char func_main_b::a -__constant char func_main_b::a#0 = '0' // a -char func_main_b::b -__constant char func_main_b::b#0 = 7 // b -char func_main_b::return -char func_main_b::return#0 // reg byte a 4.333333333333333 -char func_main_b::return#2 // reg byte a 4.0 -__bank(bank) char func_ram_bank1_a(char a , char b) -char func_ram_bank1_a::a -char func_ram_bank1_a::a#3 // reg byte x 101.0 -char func_ram_bank1_a::b -char func_ram_bank1_a::b#3 // reg byte a 101.0 -char func_ram_bank1_a::return -char func_ram_bank1_a::return#0 // reg byte a 24.999999999999996 -char func_ram_bank1_a::return#2 // reg byte a 22.0 -char func_ram_bank1_a::return#3 // reg byte a 22.0 -char func_ram_bank1_a::return#4 // reg byte a 4.0 -char func_ram_bank1_b(char a , char b) -char func_ram_bank1_b::a -__constant char func_ram_bank1_b::a#0 = '0' // a -char func_ram_bank1_b::b -__constant char func_ram_bank1_b::b#0 = 7 // b -char func_ram_bank1_b::return -__constant char func_ram_bank1_b::return#0 = func_ram_bank1_b::a#0+func_ram_bank1_b::b#0 // return -__bank(bank) char func_ram_bank1_c(char a , char b) -char func_ram_bank1_c::a -__constant char func_ram_bank1_c::a#0 = '0' // a -char func_ram_bank1_c::b -__constant char func_ram_bank1_c::b#0 = 7 // b -char func_ram_bank1_c::return -char func_ram_bank1_c::return#0 // reg byte a 4.333333333333333 -char func_ram_bank1_c::return#2 // reg byte a 4.0 -__bank(bank) char func_ram_bank1_d(char a , char b) -char func_ram_bank1_d::a -__constant char func_ram_bank1_d::a#0 = '0' // a -char func_ram_bank1_d::b -__constant char func_ram_bank1_d::b#0 = 7 // b -char func_ram_bank1_d::return -char func_ram_bank1_d::return#0 // reg byte a 4.333333333333333 -char func_ram_bank1_d::return#2 // reg byte a 4.0 -__bank(bank) char func_ram_bank1_e(char a , char b) -char func_ram_bank1_e::a -char func_ram_bank1_e::a#0 // reg byte a 101.0 -char func_ram_bank1_e::a#2 // reg byte a 1102.0 -char func_ram_bank1_e::b -char func_ram_bank1_e::b#0 // reg byte x 202.0 -char func_ram_bank1_e::b#2 // reg byte x 551.0 -char func_ram_bank1_e::return -char func_ram_bank1_e::return#0 // reg byte a 276.0 -char func_ram_bank1_e::return#2 // reg byte a 202.0 -char func_ram_bank1_e::return#3 // reg byte a 4.0 -__bank(bank) char func_ram_bank1_f(char a , char b) -char func_ram_bank1_f::a -__constant char func_ram_bank1_f::a#0 = '0' // a -char func_ram_bank1_f::b -__constant char func_ram_bank1_f::b#0 = 7 // b -char func_ram_bank1_f::return -char func_ram_bank1_f::return#0 // reg byte a 4.333333333333333 -char func_ram_bank1_f::return#2 // reg byte a 4.0 -__bank(bank) char func_rom_bank2_a(char a , char b) -char func_rom_bank2_a::a -char func_rom_bank2_a::a#3 // reg byte x 101.0 -char func_rom_bank2_a::b -char func_rom_bank2_a::b#3 // reg byte a 101.0 -char func_rom_bank2_a::return -char func_rom_bank2_a::return#0 // reg byte a 22.0 -char func_rom_bank2_a::return#1 // reg byte a 25.0 -char func_rom_bank2_a::return#3 // reg byte a 22.0 -char func_rom_bank2_a::return#4 // reg byte a 4.0 -char func_rom_bank2_b(char a , char b) -char func_rom_bank2_b::a -char func_rom_bank2_b::a#0 // reg byte a 1001.0 -char func_rom_bank2_b::a#1 // reg byte a 101.0 -char func_rom_bank2_b::a#3 // reg byte a 11103.0 -char func_rom_bank2_b::b -char func_rom_bank2_b::b#0 // reg byte x 2002.0 -char func_rom_bank2_b::b#1 // reg byte x 202.0 -char func_rom_bank2_b::b#3 // reg byte x 11103.0 -char func_rom_bank2_b::return -char func_rom_bank2_b::return#0 // reg byte a 2002.0 -char func_rom_bank2_b::return#1 // reg byte a 2221.0 -char func_rom_bank2_b::return#3 // reg byte a 202.0 -char func_rom_bank2_b::return#4 // reg byte a 4.0 -__bank(bank) char func_rom_bank2_c(char a , char b) -char func_rom_bank2_c::a -__constant char func_rom_bank2_c::a#0 = '0' // a -char func_rom_bank2_c::b -__constant char func_rom_bank2_c::b#0 = 7 // b -char func_rom_bank2_c::return -char func_rom_bank2_c::return#0 // reg byte a 4.333333333333333 -char func_rom_bank2_c::return#2 // reg byte a 4.0 -__bank(bank) char func_rom_bank2_d(char a , char b) -char func_rom_bank2_d::a -__constant char func_rom_bank2_d::a#0 = '0' // a -char func_rom_bank2_d::b -__constant char func_rom_bank2_d::b#0 = 7 // b -char func_rom_bank2_d::return -char func_rom_bank2_d::return#0 // reg byte a 4.333333333333333 -char func_rom_bank2_d::return#2 // reg byte a 4.0 -__bank(bank) char func_rom_bank2_e(char a , char b) -char func_rom_bank2_e::a -char func_rom_bank2_e::a#2 // reg byte a 101.0 -char func_rom_bank2_e::b -char func_rom_bank2_e::b#2 // reg byte x 50.5 -char func_rom_bank2_e::return -char func_rom_bank2_e::return#0 // reg byte a 28.5 -char func_rom_bank2_e::return#2 // reg byte a 22.0 -char func_rom_bank2_e::return#3 // reg byte a 4.0 -__bank(bank) char func_rom_bank2_f(char a , char b) -char func_rom_bank2_f::a -__constant char func_rom_bank2_f::a#0 = '0' // a -char func_rom_bank2_f::b -__constant char func_rom_bank2_f::b#0 = 7 // b -char func_rom_bank2_f::return -char func_rom_bank2_f::return#0 // reg byte a 4.333333333333333 -char func_rom_bank2_f::return#2 // reg byte a 4.0 -void main() -char main::$0 // reg byte a 4.0 -char main::$10 // reg byte a 4.0 -char main::$11 // reg byte a 4.0 -char main::$12 // reg byte a 4.0 -char main::$13 // reg byte a 4.0 -char main::$2 // reg byte a 4.0 -char main::$3 // reg byte a 4.0 -char main::$4 // reg byte a 4.0 -char main::$5 // reg byte a 4.0 -char main::$6 // reg byte a 4.0 -char main::$7 // reg byte a 4.0 -char main::$8 // reg byte a 4.0 -char main::$9 // reg byte a 4.0 - -reg byte x [ func_ram_bank1_a::a#3 ] -reg byte a [ func_ram_bank1_a::b#3 ] -reg byte a [ func_ram_bank1_e::a#2 func_ram_bank1_e::a#0 ] -reg byte x [ func_ram_bank1_e::b#2 func_ram_bank1_e::b#0 ] -reg byte x [ func_rom_bank2_a::a#3 ] -reg byte a [ func_rom_bank2_a::b#3 ] -reg byte a [ func_rom_bank2_b::a#3 func_rom_bank2_b::a#0 func_rom_bank2_b::a#1 ] -reg byte x [ func_rom_bank2_b::b#3 func_rom_bank2_b::b#0 func_rom_bank2_b::b#1 ] -reg byte a [ func_rom_bank2_e::a#2 ] -reg byte x [ func_rom_bank2_e::b#2 ] -reg byte a [ func_main_a::a#3 ] -reg byte x [ func_main_a::b#3 ] -reg byte a [ func_ram_bank1_a::return#4 ] -reg byte a [ main::$0 ] -reg byte a [ func_ram_bank1_c::return#2 ] -reg byte a [ main::$2 ] -reg byte a [ func_ram_bank1_d::return#2 ] -reg byte a [ main::$3 ] -reg byte a [ func_ram_bank1_e::return#3 ] -reg byte a [ main::$4 ] -reg byte a [ func_ram_bank1_f::return#2 ] -reg byte a [ main::$5 ] -reg byte a [ func_rom_bank2_a::return#4 ] -reg byte a [ main::$6 ] -reg byte a [ func_rom_bank2_b::return#4 ] -reg byte a [ main::$7 ] -reg byte a [ func_rom_bank2_c::return#2 ] -reg byte a [ main::$8 ] -reg byte a [ func_rom_bank2_d::return#2 ] -reg byte a [ main::$9 ] -reg byte a [ func_rom_bank2_e::return#3 ] -reg byte a [ main::$10 ] -reg byte a [ func_rom_bank2_f::return#2 ] -reg byte a [ main::$11 ] -reg byte a [ func_main_a::return#4 ] -reg byte a [ main::$12 ] -reg byte a [ func_main_b::return#2 ] -reg byte a [ main::$13 ] -reg byte a [ func_ram_bank1_a::return#0 ] -reg byte a [ func_ram_bank1_a::return#2 ] -reg byte a [ func_ram_bank1_c::return#0 ] -reg byte a [ func_rom_bank2_a::return#0 ] -reg byte a [ func_ram_bank1_d::return#0 ] -reg byte a [ func_rom_bank2_b::return#0 ] -reg byte a [ func_ram_bank1_e::return#0 ] -reg byte a [ func_main_a::return#0 ] -reg byte a [ func_ram_bank1_f::return#0 ] -reg byte a [ func_rom_bank2_a::return#1 ] -reg byte a [ func_rom_bank2_b::return#1 ] -reg byte a [ func_ram_bank1_a::return#3 ] -reg byte a [ func_rom_bank2_c::return#0 ] -reg byte a [ func_rom_bank2_a::return#3 ] -reg byte a [ func_rom_bank2_d::return#0 ] -reg byte a [ func_rom_bank2_b::return#3 ] -reg byte a [ func_rom_bank2_e::return#0 ] -reg byte a [ func_main_a::return#1 ] -reg byte a [ func_rom_bank2_f::return#0 ] -reg byte a [ func_ram_bank1_e::return#2 ] -reg byte a [ func_main_a::return#2 ] -reg byte a [ func_rom_bank2_e::return#2 ] -reg byte a [ func_main_b::return#0 ] diff --git a/src/test/ref/procedure-callingconvention-stack-bank-0.asm b/src/test/ref/procedure-callingconvention-stack-bank-0.asm deleted file mode 100644 index ec687e5fb..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-0.asm +++ /dev/null @@ -1,45 +0,0 @@ -// Test a procedure with calling convention stack -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment stage -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // return a+b; - clc - adc.z a - // } - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - rts -} -main: { - // plus('0', 7) - lda #'0' - pha - lda #7 - pha - jsr plus - pla - pla - // SCREEN[0] = plus('0', 7) - sta SCREEN - // } - rts -} diff --git a/src/test/ref/procedure-callingconvention-stack-bank-0.cfg b/src/test/ref/procedure-callingconvention-stack-bank-0.cfg deleted file mode 100644 index e23f2647e..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-0.cfg +++ /dev/null @@ -1,24 +0,0 @@ - -__stackcall char plus(char a , char b) -plus: scope:[plus] from - [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - [2] plus::return#0 = plus::a#0 + plus::b#0 - to:plus::@return -plus::@return: scope:[plus] from plus - [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 - [4] return - to:@return - -void main() -main: scope:[main] from - [5] stackpush(char) = '0' - [6] stackpush(char) = 7 - [7] callexecute plus - sideeffect stackpullpadding(1) - [9] main::$0 = stackpull(char) - [10] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [11] return - to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-bank-0.log b/src/test/ref/procedure-callingconvention-stack-bank-0.log deleted file mode 100644 index de9b614ed..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-0.log +++ /dev/null @@ -1,350 +0,0 @@ -Loading link script "procedure-callingconvention-stack-bank.ld" -Adding parameter assignment in __stackcall procedure plus::b = param(plus::b) -Adding parameter assignment in __stackcall procedure plus::a = param(plus::a) -Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call plus('0', 7) -Calling convention STACK_CALL replacing param(plus::a) with stackidx(char,plus::OFFSET_STACK_A) -Calling convention STACK_CALL replacing param(plus::b) with stackidx(char,plus::OFFSET_STACK_B) -Calling convention STACK_CALL adding stack return stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return -Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) -Calling convention STACK_CALL adding stack push stackpush(char) = '0' -Calling convention STACK_CALL adding stack push stackpush(char) = 7 - -CONTROL FLOW GRAPH SSA - -void main() -main: scope:[main] from __start - stackpush(char) = '0' - stackpush(char) = 7 - callexecute plus - sideeffect stackpullpadding(1) - main::$0 = stackpull(char) - SCREEN[0] = main::$0 - to:main::@return -main::@return: scope:[main] from main - return - to:@return - -__stackcall char plus(char a , char b) -plus: scope:[plus] from - plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - plus::$0 = plus::a#0 + plus::b#0 - plus::return#0 = plus::$0 - to:plus::@return -plus::@return: scope:[plus] from plus - plus::return#1 = phi( plus/plus::return#0 ) - stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#1 - 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 -__constant char * const SCREEN = (char *)$400 -__constant unsigned int STACK_BASE = $103 -void __start() -void main() -char main::$0 -__stackcall char plus(char a , char b) -char plus::$0 -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 -char plus::b -char plus::b#0 -char plus::return -char plus::return#0 -char plus::return#1 - -Adding number conversion cast (unumber) 7 in stackpush(char) = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast stackpush(char) = (unumber)7 -Successful SSA optimization Pass2InlineCast -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::$0 plus::return#1 -Successful SSA optimization Pass2AliasElimination -Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 -Successful SSA optimization PassNSimplifyExpressionWithZero -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 -Finalized unsigned number type (char) 1 -Successful SSA optimization PassNFinalizeNumberTypeConversions -CALL GRAPH -Calls in [main] to plus:7 - -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes - -FINAL CONTROL FLOW GRAPH - -__stackcall char plus(char a , char b) -plus: scope:[plus] from - [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - [2] plus::return#0 = plus::a#0 + plus::b#0 - to:plus::@return -plus::@return: scope:[plus] from plus - [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 - [4] return - to:@return - -void main() -main: scope:[main] from - [5] stackpush(char) = '0' - [6] stackpush(char) = 7 - [7] callexecute plus - sideeffect stackpullpadding(1) - [9] main::$0 = stackpull(char) - [10] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [11] return - to:@return - - -VARIABLE REGISTER WEIGHTS -void main() -char main::$0 // 4.0 -__stackcall char plus(char a , char b) -char plus::a -char plus::a#0 // 11.0 -char plus::b -char plus::b#0 // 22.0 -char plus::return -char plus::return#0 // 22.0 - -Initial phi equivalence classes -Added variable plus::a#0 to live range equivalence class [ plus::a#0 ] -Added variable plus::b#0 to live range equivalence class [ plus::b#0 ] -Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] -Added variable main::$0 to live range equivalence class [ main::$0 ] -Complete equivalence classes -[ plus::a#0 ] -[ plus::b#0 ] -[ plus::return#0 ] -[ main::$0 ] -Allocated zp[1]:2 [ plus::b#0 ] -Allocated zp[1]:3 [ plus::return#0 ] -Allocated zp[1]:4 [ plus::a#0 ] -Allocated zp[1]:5 [ main::$0 ] -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x -Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte a as potential for zp[1]:4 [ plus::a#0 ] -Removing always clobbered register reg byte x as potential for zp[1]:4 [ plus::a#0 ] -Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a -Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x -Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a -Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a -Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x -Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x -Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a -Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x -Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a -Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a -Potential registers zp[1]:4 [ plus::a#0 ] : zp[1]:4 , reg byte y , -Potential registers zp[1]:2 [ plus::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:3 [ plus::return#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:5 [ main::$0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , - -REGISTER UPLIFT SCOPES -Uplift Scope [plus] 22: zp[1]:2 [ plus::b#0 ] 22: zp[1]:3 [ plus::return#0 ] 11: zp[1]:4 [ plus::a#0 ] -Uplift Scope [main] 4: zp[1]:5 [ main::$0 ] -Uplift Scope [] - -Uplifting [plus] best 79 combination reg byte a [ plus::b#0 ] reg byte a [ plus::return#0 ] zp[1]:4 [ plus::a#0 ] -Uplifting [main] best 73 combination reg byte a [ main::$0 ] -Uplifting [] best 73 combination -Attempting to uplift remaining variables inzp[1]:4 [ plus::a#0 ] -Uplifting [plus] best 73 combination zp[1]:4 [ plus::a#0 ] -Allocated (was zp[1]:4) zp[1]:2 [ plus::a#0 ] - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment stage - // plus -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z a - jmp __breturn - // plus::@return - __breturn: - // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - // [4] return - rts -} - // main -main: { - // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 - lda #'0' - pha - // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 - lda #7 - pha - // [7] callexecute plus -- call_vprc1 - jsr plus - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - jmp __breturn - // main::@return - __breturn: - // [11] 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 -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void main() -char main::$0 // reg byte a 4.0 -__stackcall char plus(char a , char b) -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 // a zp[1]:2 11.0 -char plus::b -char plus::b#0 // reg byte a 22.0 -char plus::return -char plus::return#0 // reg byte a 22.0 - -zp[1]:2 [ plus::a#0 ] -reg byte a [ plus::b#0 ] -reg byte a [ plus::return#0 ] -reg byte a [ main::$0 ] - - -FINAL ASSEMBLER -Score: 67 - - // File Comments -// Test a procedure with calling convention stack - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment stage - // plus -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // return a+b; - // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z a - // plus::@return - // } - // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - // [4] return - rts -} - // main -main: { - // plus('0', 7) - // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 - lda #'0' - pha - // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 - lda #7 - pha - // [7] callexecute plus -- call_vprc1 - jsr plus - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // SCREEN[0] = plus('0', 7) - // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - // main::@return - // } - // [11] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-stack-bank-0.sym b/src/test/ref/procedure-callingconvention-stack-bank-0.sym deleted file mode 100644 index 30874c0fd..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-0.sym +++ /dev/null @@ -1,19 +0,0 @@ -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void main() -char main::$0 // reg byte a 4.0 -__stackcall char plus(char a , char b) -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 // a zp[1]:2 11.0 -char plus::b -char plus::b#0 // reg byte a 22.0 -char plus::return -char plus::return#0 // reg byte a 22.0 - -zp[1]:2 [ plus::a#0 ] -reg byte a [ plus::b#0 ] -reg byte a [ plus::return#0 ] -reg byte a [ main::$0 ] diff --git a/src/test/ref/procedure-callingconvention-stack-bank-1.asm b/src/test/ref/procedure-callingconvention-stack-bank-1.asm deleted file mode 100644 index ec687e5fb..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-1.asm +++ /dev/null @@ -1,45 +0,0 @@ -// Test a procedure with calling convention stack -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment stage -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // return a+b; - clc - adc.z a - // } - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - rts -} -main: { - // plus('0', 7) - lda #'0' - pha - lda #7 - pha - jsr plus - pla - pla - // SCREEN[0] = plus('0', 7) - sta SCREEN - // } - rts -} diff --git a/src/test/ref/procedure-callingconvention-stack-bank-1.cfg b/src/test/ref/procedure-callingconvention-stack-bank-1.cfg deleted file mode 100644 index e23f2647e..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-1.cfg +++ /dev/null @@ -1,24 +0,0 @@ - -__stackcall char plus(char a , char b) -plus: scope:[plus] from - [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - [2] plus::return#0 = plus::a#0 + plus::b#0 - to:plus::@return -plus::@return: scope:[plus] from plus - [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 - [4] return - to:@return - -void main() -main: scope:[main] from - [5] stackpush(char) = '0' - [6] stackpush(char) = 7 - [7] callexecute plus - sideeffect stackpullpadding(1) - [9] main::$0 = stackpull(char) - [10] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [11] return - to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-bank-1.log b/src/test/ref/procedure-callingconvention-stack-bank-1.log deleted file mode 100644 index de9b614ed..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-1.log +++ /dev/null @@ -1,350 +0,0 @@ -Loading link script "procedure-callingconvention-stack-bank.ld" -Adding parameter assignment in __stackcall procedure plus::b = param(plus::b) -Adding parameter assignment in __stackcall procedure plus::a = param(plus::a) -Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call plus('0', 7) -Calling convention STACK_CALL replacing param(plus::a) with stackidx(char,plus::OFFSET_STACK_A) -Calling convention STACK_CALL replacing param(plus::b) with stackidx(char,plus::OFFSET_STACK_B) -Calling convention STACK_CALL adding stack return stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return -Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) -Calling convention STACK_CALL adding stack push stackpush(char) = '0' -Calling convention STACK_CALL adding stack push stackpush(char) = 7 - -CONTROL FLOW GRAPH SSA - -void main() -main: scope:[main] from __start - stackpush(char) = '0' - stackpush(char) = 7 - callexecute plus - sideeffect stackpullpadding(1) - main::$0 = stackpull(char) - SCREEN[0] = main::$0 - to:main::@return -main::@return: scope:[main] from main - return - to:@return - -__stackcall char plus(char a , char b) -plus: scope:[plus] from - plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - plus::$0 = plus::a#0 + plus::b#0 - plus::return#0 = plus::$0 - to:plus::@return -plus::@return: scope:[plus] from plus - plus::return#1 = phi( plus/plus::return#0 ) - stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#1 - 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 -__constant char * const SCREEN = (char *)$400 -__constant unsigned int STACK_BASE = $103 -void __start() -void main() -char main::$0 -__stackcall char plus(char a , char b) -char plus::$0 -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 -char plus::b -char plus::b#0 -char plus::return -char plus::return#0 -char plus::return#1 - -Adding number conversion cast (unumber) 7 in stackpush(char) = 7 -Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast stackpush(char) = (unumber)7 -Successful SSA optimization Pass2InlineCast -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::$0 plus::return#1 -Successful SSA optimization Pass2AliasElimination -Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 -Successful SSA optimization PassNSimplifyExpressionWithZero -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 -Finalized unsigned number type (char) 1 -Successful SSA optimization PassNFinalizeNumberTypeConversions -CALL GRAPH -Calls in [main] to plus:7 - -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes - -FINAL CONTROL FLOW GRAPH - -__stackcall char plus(char a , char b) -plus: scope:[plus] from - [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - [2] plus::return#0 = plus::a#0 + plus::b#0 - to:plus::@return -plus::@return: scope:[plus] from plus - [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 - [4] return - to:@return - -void main() -main: scope:[main] from - [5] stackpush(char) = '0' - [6] stackpush(char) = 7 - [7] callexecute plus - sideeffect stackpullpadding(1) - [9] main::$0 = stackpull(char) - [10] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [11] return - to:@return - - -VARIABLE REGISTER WEIGHTS -void main() -char main::$0 // 4.0 -__stackcall char plus(char a , char b) -char plus::a -char plus::a#0 // 11.0 -char plus::b -char plus::b#0 // 22.0 -char plus::return -char plus::return#0 // 22.0 - -Initial phi equivalence classes -Added variable plus::a#0 to live range equivalence class [ plus::a#0 ] -Added variable plus::b#0 to live range equivalence class [ plus::b#0 ] -Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] -Added variable main::$0 to live range equivalence class [ main::$0 ] -Complete equivalence classes -[ plus::a#0 ] -[ plus::b#0 ] -[ plus::return#0 ] -[ main::$0 ] -Allocated zp[1]:2 [ plus::b#0 ] -Allocated zp[1]:3 [ plus::return#0 ] -Allocated zp[1]:4 [ plus::a#0 ] -Allocated zp[1]:5 [ main::$0 ] -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x -Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte a as potential for zp[1]:4 [ plus::a#0 ] -Removing always clobbered register reg byte x as potential for zp[1]:4 [ plus::a#0 ] -Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a -Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x -Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a -Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a -Statement [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ plus::a#0 ] ( plus:7 [ plus::a#0 ] { } ) always clobbers reg byte a reg byte x -Statement [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ plus::a#0 plus::b#0 ] ( plus:7 [ plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x -Statement [2] plus::return#0 = plus::a#0 + plus::b#0 [ plus::return#0 ] ( plus:7 [ plus::return#0 ] { } ) always clobbers reg byte a -Statement [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ ] ( plus:7 [ ] { } ) always clobbers reg byte x -Statement [5] stackpush(char) = '0' [ ] ( [ ] { } ) always clobbers reg byte a -Statement [6] stackpush(char) = 7 [ ] ( [ ] { } ) always clobbers reg byte a -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [9] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a -Potential registers zp[1]:4 [ plus::a#0 ] : zp[1]:4 , reg byte y , -Potential registers zp[1]:2 [ plus::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:3 [ plus::return#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:5 [ main::$0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , - -REGISTER UPLIFT SCOPES -Uplift Scope [plus] 22: zp[1]:2 [ plus::b#0 ] 22: zp[1]:3 [ plus::return#0 ] 11: zp[1]:4 [ plus::a#0 ] -Uplift Scope [main] 4: zp[1]:5 [ main::$0 ] -Uplift Scope [] - -Uplifting [plus] best 79 combination reg byte a [ plus::b#0 ] reg byte a [ plus::return#0 ] zp[1]:4 [ plus::a#0 ] -Uplifting [main] best 73 combination reg byte a [ main::$0 ] -Uplifting [] best 73 combination -Attempting to uplift remaining variables inzp[1]:4 [ plus::a#0 ] -Uplifting [plus] best 73 combination zp[1]:4 [ plus::a#0 ] -Allocated (was zp[1]:4) zp[1]:2 [ plus::a#0 ] - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment stage - // plus -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z a - jmp __breturn - // plus::@return - __breturn: - // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - // [4] return - rts -} - // main -main: { - // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 - lda #'0' - pha - // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 - lda #7 - pha - // [7] callexecute plus -- call_vprc1 - jsr plus - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - jmp __breturn - // main::@return - __breturn: - // [11] 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 -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void main() -char main::$0 // reg byte a 4.0 -__stackcall char plus(char a , char b) -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 // a zp[1]:2 11.0 -char plus::b -char plus::b#0 // reg byte a 22.0 -char plus::return -char plus::return#0 // reg byte a 22.0 - -zp[1]:2 [ plus::a#0 ] -reg byte a [ plus::b#0 ] -reg byte a [ plus::return#0 ] -reg byte a [ main::$0 ] - - -FINAL ASSEMBLER -Score: 67 - - // File Comments -// Test a procedure with calling convention stack - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment stage - // plus -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - // [0] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - // [1] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // return a+b; - // [2] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z a - // plus::@return - // } - // [3] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - // [4] return - rts -} - // main -main: { - // plus('0', 7) - // [5] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 - lda #'0' - pha - // [6] stackpush(char) = 7 -- _stackpushbyte_=vbuc1 - lda #7 - pha - // [7] callexecute plus -- call_vprc1 - jsr plus - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - // [9] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // SCREEN[0] = plus('0', 7) - // [10] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - // main::@return - // } - // [11] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-stack-bank-1.sym b/src/test/ref/procedure-callingconvention-stack-bank-1.sym deleted file mode 100644 index 30874c0fd..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-1.sym +++ /dev/null @@ -1,19 +0,0 @@ -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void main() -char main::$0 // reg byte a 4.0 -__stackcall char plus(char a , char b) -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 // a zp[1]:2 11.0 -char plus::b -char plus::b#0 // reg byte a 22.0 -char plus::return -char plus::return#0 // reg byte a 22.0 - -zp[1]:2 [ plus::a#0 ] -reg byte a [ plus::b#0 ] -reg byte a [ plus::return#0 ] -reg byte a [ main::$0 ] diff --git a/src/test/ref/procedure-callingconvention-stack-bank-2.asm b/src/test/ref/procedure-callingconvention-stack-bank-2.asm deleted file mode 100644 index 10a9f97c1..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-2.asm +++ /dev/null @@ -1,74 +0,0 @@ -// Test a procedure with calling convention stack -// A slightly more complex call -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - .const STACK_BASE = $103 - .label SCREEN = $400 - .label i = 4 -.segment Code -__start: { - // char i = 0 - lda #0 - sta.z i - jsr main - rts -} -.segment stage -// this should give a pragma error during compile, as test is not declared yet. -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // i++; - inc.z i - // return a+b; - clc - adc.z a - // } - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - rts -} -main: { - .label a = 3 - lda #0 - sta.z a - __b1: - // char v = a+1 - ldx.z a - inx - // char w = plus('0', v) - lda #'0' - pha - txa - pha - jsr plus - pla - pla - // w+a - clc - adc.z a - // SCREEN[i] = w+a - ldy.z i - sta SCREEN,y - // for(char a:0..1) - inc.z a - lda #2 - cmp.z a - bne __b1 - // } - rts -} diff --git a/src/test/ref/procedure-callingconvention-stack-bank-2.cfg b/src/test/ref/procedure-callingconvention-stack-bank-2.cfg deleted file mode 100644 index ff4b58982..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-2.cfg +++ /dev/null @@ -1,48 +0,0 @@ - -void __start() -__start: scope:[__start] from - [0] phi() - to:__start::__init1 -__start::__init1: scope:[__start] from __start - [1] i = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - [2] phi() - [3] call main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - [4] return - to:@return - -__stackcall char plus(char a , char b) -plus: scope:[plus] from - [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - [7] i = ++ i - [8] plus::return#0 = plus::a#0 + plus::b#0 - to:plus::@return -plus::@return: scope:[plus] from plus - [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 - [10] return - to:@return - -void main() -main: scope:[main] from __start::@1 - [11] phi() - to:main::@1 -main::@1: scope:[main] from main main::@1 - [12] main::a#2 = phi( main/0, main::@1/main::a#1 ) - [13] main::v#0 = main::a#2 + 1 - [14] stackpush(char) = '0' - [15] stackpush(char) = main::v#0 - [16] callexecute plus - sideeffect stackpullpadding(1) - [18] main::w#0 = stackpull(char) - [19] main::$2 = main::w#0 + main::a#2 - [20] SCREEN[i] = main::$2 - [21] main::a#1 = ++ main::a#2 - [22] if(main::a#1!=2) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - [23] return - to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-bank-2.log b/src/test/ref/procedure-callingconvention-stack-bank-2.log deleted file mode 100644 index 4a6f3d67b..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-2.log +++ /dev/null @@ -1,595 +0,0 @@ -Loading link script "procedure-callingconvention-stack-bank.ld" -Converting variable modified inside __stackcall procedure plus() to load/store i -Adding parameter assignment in __stackcall procedure plus::b = param(plus::b) -Adding parameter assignment in __stackcall procedure plus::a = param(plus::a) -Inlined call call __init -Eliminating unused variable with no statement main::$0 -Eliminating unused variable with no statement main::$1 -Calling convention __stackcall adding prepare/execute/finalize for main::w = call plus('0', main::v) -Calling convention STACK_CALL replacing param(plus::a) with stackidx(char,plus::OFFSET_STACK_A) -Calling convention STACK_CALL replacing param(plus::b) with stackidx(char,plus::OFFSET_STACK_B) -Calling convention STACK_CALL adding stack return stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return -Calling convention STACK_CALL adding stack pull main::w = stackpull(char) -Calling convention STACK_CALL adding stack push stackpush(char) = '0' -Calling convention STACK_CALL adding stack push stackpush(char) = main::v - -CONTROL FLOW GRAPH SSA - -void main() -main: scope:[main] from __start::@1 - main::a#0 = 0 - to:main::@1 -main::@1: scope:[main] from main main::@1 - main::a#2 = phi( main/main::a#0, main::@1/main::a#1 ) - main::v#0 = main::a#2 + 1 - stackpush(char) = '0' - stackpush(char) = main::v#0 - callexecute plus - sideeffect stackpullpadding(1) - main::w#0 = stackpull(char) - main::$2 = main::w#0 + main::a#2 - SCREEN[i] = main::$2 - main::a#1 = main::a#2 + rangenext(0,1) - main::$3 = main::a#1 != rangelast(0,1) - if(main::$3) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - return - to:@return - -__stackcall char plus(char a , char b) -plus: scope:[plus] from - plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - i = ++ i - plus::$0 = plus::a#0 + plus::b#0 - plus::return#0 = plus::$0 - to:plus::@return -plus::@return: scope:[plus] from plus - plus::return#1 = phi( plus/plus::return#0 ) - stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#1 - return - to:@return - -void __start() -__start: scope:[__start] from - to:__start::__init1 -__start::__init1: scope:[__start] from __start - i = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - call main - to:__start::@2 -__start::@2: scope:[__start] from __start::@1 - to:__start::@return -__start::@return: scope:[__start] from __start::@2 - return - to:@return - -SYMBOL TABLE SSA -__constant char * const SCREEN = (char *)$400 -__constant unsigned int STACK_BASE = $103 -void __start() -__loadstore char i -void main() -char main::$2 -bool main::$3 -char main::a -char main::a#0 -char main::a#1 -char main::a#2 -char main::v -char main::v#0 -char main::w -char main::w#0 -__stackcall char plus(char a , char b) -char plus::$0 -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 -char plus::b -char plus::b#0 -char plus::return -char plus::return#0 -char plus::return#1 - -Adding number conversion cast (unumber) 1 in main::v#0 = main::a#2 + 1 -Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 1 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 1 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::$0 plus::return#1 -Successful SSA optimization Pass2AliasElimination -Simple Condition main::$3 [12] if(main::a#1!=rangelast(0,1)) goto main::@1 -Successful SSA optimization Pass2ConditionalJumpSimplification -Constant main::a#0 = 0 -Successful SSA optimization Pass2ConstantIdentification -Resolved ranged next value [10] main::a#1 = ++ main::a#2 to ++ -Resolved ranged comparison value [12] if(main::a#1!=rangelast(0,1)) goto main::@1 to 2 -Adding number conversion cast (unumber) 2 in if(main::a#1!=2) goto main::@1 -Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant integer cast 2 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 2 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Inlining constant with var siblings main::a#0 -Constant inlined main::a#0 = 0 -Successful SSA optimization Pass2ConstantInlining -Finalized unsigned number type (char) 1 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Added new block during phi lifting main::@2(between main::@1 and main::@1) -Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of __start::@2 -Adding NOP phi() at start of main -CALL GRAPH -Calls in [__start] to main:3 -Calls in [main] to plus:17 - -Created 1 initial phi equivalence classes -Coalesced [25] main::a#3 = main::a#1 -Coalesced down to 1 phi equivalence classes -Culled Empty Block label __start::@2 -Culled Empty Block label main::@2 -Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of main - -FINAL CONTROL FLOW GRAPH - -void __start() -__start: scope:[__start] from - [0] phi() - to:__start::__init1 -__start::__init1: scope:[__start] from __start - [1] i = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - [2] phi() - [3] call main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - [4] return - to:@return - -__stackcall char plus(char a , char b) -plus: scope:[plus] from - [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) - [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) - [7] i = ++ i - [8] plus::return#0 = plus::a#0 + plus::b#0 - to:plus::@return -plus::@return: scope:[plus] from plus - [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 - [10] return - to:@return - -void main() -main: scope:[main] from __start::@1 - [11] phi() - to:main::@1 -main::@1: scope:[main] from main main::@1 - [12] main::a#2 = phi( main/0, main::@1/main::a#1 ) - [13] main::v#0 = main::a#2 + 1 - [14] stackpush(char) = '0' - [15] stackpush(char) = main::v#0 - [16] callexecute plus - sideeffect stackpullpadding(1) - [18] main::w#0 = stackpull(char) - [19] main::$2 = main::w#0 + main::a#2 - [20] SCREEN[i] = main::$2 - [21] main::a#1 = ++ main::a#2 - [22] if(main::a#1!=2) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - [23] return - to:@return - -null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope plus - -VARIABLE REGISTER WEIGHTS -void __start() -__loadstore char i // 105.24999999999999 -void main() -char main::$2 // 202.0 -char main::a -char main::a#1 // 151.5 -char main::a#2 // 44.888888888888886 -char main::v -char main::v#0 // 101.0 -char main::w -char main::w#0 // 202.0 -__stackcall char plus(char a , char b) -char plus::a -char plus::a#0 // 667.3333333333334 -char plus::b -char plus::b#0 // 1001.0 -char plus::return -char plus::return#0 // 2002.0 - -Initial phi equivalence classes -[ main::a#2 main::a#1 ] -Added variable i to live range equivalence class [ i ] -Added variable plus::a#0 to live range equivalence class [ plus::a#0 ] -Added variable plus::b#0 to live range equivalence class [ plus::b#0 ] -Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] -Added variable main::v#0 to live range equivalence class [ main::v#0 ] -Added variable main::w#0 to live range equivalence class [ main::w#0 ] -Added variable main::$2 to live range equivalence class [ main::$2 ] -Complete equivalence classes -[ main::a#2 main::a#1 ] -[ i ] -[ plus::a#0 ] -[ plus::b#0 ] -[ plus::return#0 ] -[ main::v#0 ] -[ main::w#0 ] -[ main::$2 ] -Allocated zp[1]:2 [ plus::return#0 ] -Allocated zp[1]:3 [ plus::b#0 ] -Allocated zp[1]:4 [ plus::a#0 ] -Allocated zp[1]:5 [ main::w#0 ] -Allocated zp[1]:6 [ main::$2 ] -Allocated zp[1]:7 [ main::a#2 main::a#1 ] -Allocated zp[1]:8 [ i ] -Allocated zp[1]:9 [ main::v#0 ] -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] i = 0 [ i ] ( [ i ] { } ) always clobbers reg byte a -Statement [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ i plus::a#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 ] { } ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::a#2 main::a#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:7 [ main::a#2 main::a#1 ] -Statement [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ i plus::a#0 plus::b#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte a as potential for zp[1]:4 [ plus::a#0 ] -Removing always clobbered register reg byte x as potential for zp[1]:4 [ plus::a#0 ] -Statement [8] plus::return#0 = plus::a#0 + plus::b#0 [ i plus::return#0 ] ( main:3::plus:16 [ main::a#2 i plus::return#0 ] { } ) always clobbers reg byte a -Statement [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ i ] ( main:3::plus:16 [ main::a#2 i ] { } ) always clobbers reg byte x -Statement [14] stackpush(char) = '0' [ i main::a#2 main::v#0 ] ( main:3 [ i main::a#2 main::v#0 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:9 [ main::v#0 ] -Statement [15] stackpush(char) = main::v#0 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte a -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [18] main::w#0 = stackpull(char) [ i main::a#2 main::w#0 ] ( main:3 [ i main::a#2 main::w#0 ] { } ) always clobbers reg byte a -Statement [19] main::$2 = main::w#0 + main::a#2 [ i main::a#2 main::$2 ] ( main:3 [ i main::a#2 main::$2 ] { } ) always clobbers reg byte a -Statement [20] SCREEN[i] = main::$2 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:7 [ main::a#2 main::a#1 ] -Statement [22] if(main::a#1!=2) goto main::@1 [ i main::a#1 ] ( main:3 [ i main::a#1 ] { } ) always clobbers reg byte a -Statement [1] i = 0 [ i ] ( [ i ] { } ) always clobbers reg byte a -Statement [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) [ i plus::a#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 ] { } ) always clobbers reg byte a reg byte x -Statement [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) [ i plus::a#0 plus::b#0 ] ( main:3::plus:16 [ main::a#2 i plus::a#0 plus::b#0 ] { } ) always clobbers reg byte a reg byte x -Statement [8] plus::return#0 = plus::a#0 + plus::b#0 [ i plus::return#0 ] ( main:3::plus:16 [ main::a#2 i plus::return#0 ] { } ) always clobbers reg byte a -Statement [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 [ i ] ( main:3::plus:16 [ main::a#2 i ] { } ) always clobbers reg byte x -Statement [14] stackpush(char) = '0' [ i main::a#2 main::v#0 ] ( main:3 [ i main::a#2 main::v#0 ] { } ) always clobbers reg byte a -Statement [15] stackpush(char) = main::v#0 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte a -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [18] main::w#0 = stackpull(char) [ i main::a#2 main::w#0 ] ( main:3 [ i main::a#2 main::w#0 ] { } ) always clobbers reg byte a -Statement [19] main::$2 = main::w#0 + main::a#2 [ i main::a#2 main::$2 ] ( main:3 [ i main::a#2 main::$2 ] { } ) always clobbers reg byte a -Statement [20] SCREEN[i] = main::$2 [ i main::a#2 ] ( main:3 [ i main::a#2 ] { } ) always clobbers reg byte y -Statement [22] if(main::a#1!=2) goto main::@1 [ i main::a#1 ] ( main:3 [ i main::a#1 ] { } ) always clobbers reg byte a -Potential registers zp[1]:7 [ main::a#2 main::a#1 ] : zp[1]:7 , -Potential registers zp[1]:8 [ i ] : zp[1]:8 , -Potential registers zp[1]:4 [ plus::a#0 ] : zp[1]:4 , reg byte y , -Potential registers zp[1]:3 [ plus::b#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:2 [ plus::return#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:9 [ main::v#0 ] : zp[1]:9 , reg byte x , reg byte y , -Potential registers zp[1]:5 [ main::w#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:6 [ main::$2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , - -REGISTER UPLIFT SCOPES -Uplift Scope [plus] 2,002: zp[1]:2 [ plus::return#0 ] 1,001: zp[1]:3 [ plus::b#0 ] 667.33: zp[1]:4 [ plus::a#0 ] -Uplift Scope [main] 202: zp[1]:5 [ main::w#0 ] 202: zp[1]:6 [ main::$2 ] 196.39: zp[1]:7 [ main::a#2 main::a#1 ] 101: zp[1]:9 [ main::v#0 ] -Uplift Scope [] 105.25: zp[1]:8 [ i ] -Uplift Scope [__start] - -Uplifting [plus] best 945 combination reg byte a [ plus::return#0 ] reg byte a [ plus::b#0 ] zp[1]:4 [ plus::a#0 ] -Uplifting [main] best 785 combination reg byte a [ main::w#0 ] reg byte a [ main::$2 ] zp[1]:7 [ main::a#2 main::a#1 ] reg byte x [ main::v#0 ] -Uplifting [] best 785 combination zp[1]:8 [ i ] -Uplifting [__start] best 785 combination -Attempting to uplift remaining variables inzp[1]:4 [ plus::a#0 ] -Uplifting [plus] best 785 combination zp[1]:4 [ plus::a#0 ] -Attempting to uplift remaining variables inzp[1]:7 [ main::a#2 main::a#1 ] -Uplifting [main] best 785 combination zp[1]:7 [ main::a#2 main::a#1 ] -Attempting to uplift remaining variables inzp[1]:8 [ i ] -Uplifting [] best 785 combination zp[1]:8 [ i ] -Allocated (was zp[1]:4) zp[1]:2 [ plus::a#0 ] -Allocated (was zp[1]:7) zp[1]:3 [ main::a#2 main::a#1 ] -Allocated (was zp[1]:8) zp[1]:4 [ i ] - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack -// A slightly more complex call - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 - .label i = 4 -.segment Code - // __start -__start: { - jmp __init1 - // __start::__init1 - __init1: - // [1] i = 0 -- vbuz1=vbuc1 - lda #0 - sta.z i - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - __b1_from___init1: - jmp __b1 - // __start::@1 - __b1: - // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] - main_from___b1: - jsr main - jmp __breturn - // __start::@return - __breturn: - // [4] return - rts -} -.segment stage - // plus -// this should give a pragma error during compile, as test is not declared yet. -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - // [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - // [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // [7] i = ++ i -- vbuz1=_inc_vbuz1 - inc.z i - // [8] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z a - jmp __breturn - // plus::@return - __breturn: - // [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - // [10] return - rts -} - // main -main: { - .label a = 3 - // [12] phi from main to main::@1 [phi:main->main::@1] - __b1_from_main: - // [12] phi main::a#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z a - jmp __b1 - // [12] phi from main::@1 to main::@1 [phi:main::@1->main::@1] - __b1_from___b1: - // [12] phi main::a#2 = main::a#1 [phi:main::@1->main::@1#0] -- register_copy - jmp __b1 - // main::@1 - __b1: - // [13] main::v#0 = main::a#2 + 1 -- vbuxx=vbuz1_plus_1 - ldx.z a - inx - // [14] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 - lda #'0' - pha - // [15] stackpush(char) = main::v#0 -- _stackpushbyte_=vbuxx - txa - pha - // [16] callexecute plus -- call_vprc1 - jsr plus - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - // [18] main::w#0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // [19] main::$2 = main::w#0 + main::a#2 -- vbuaa=vbuaa_plus_vbuz1 - clc - adc.z a - // [20] SCREEN[i] = main::$2 -- pbuc1_derefidx_vbuz1=vbuaa - ldy.z i - sta SCREEN,y - // [21] main::a#1 = ++ main::a#2 -- vbuz1=_inc_vbuz1 - inc.z a - // [22] if(main::a#1!=2) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #2 - cmp.z a - bne __b1_from___b1 - jmp __breturn - // main::@return - __breturn: - // [23] return - rts -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __init1 -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Replacing label __b1_from___b1 with __b1 -Removing instruction __b1_from___init1: -Removing instruction main_from___b1: -Removing instruction __b1_from___b1: -Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction __init1: -Removing instruction __b1: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __b1_from_main: -Removing instruction __breturn: -Succesful ASM optimization Pass5UnusedLabelElimination -Removing instruction jmp __b1 -Succesful ASM optimization Pass5NextJumpElimination - -FINAL SYMBOL TABLE -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void __start() -__loadstore char i // zp[1]:4 105.24999999999999 -void main() -char main::$2 // reg byte a 202.0 -char main::a -char main::a#1 // a zp[1]:3 151.5 -char main::a#2 // a zp[1]:3 44.888888888888886 -char main::v -char main::v#0 // reg byte x 101.0 -char main::w -char main::w#0 // reg byte a 202.0 -__stackcall char plus(char a , char b) -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 // a zp[1]:2 667.3333333333334 -char plus::b -char plus::b#0 // reg byte a 1001.0 -char plus::return -char plus::return#0 // reg byte a 2002.0 - -zp[1]:3 [ main::a#2 main::a#1 ] -zp[1]:4 [ i ] -zp[1]:2 [ plus::a#0 ] -reg byte a [ plus::b#0 ] -reg byte a [ plus::return#0 ] -reg byte x [ main::v#0 ] -reg byte a [ main::w#0 ] -reg byte a [ main::$2 ] - - -FINAL ASSEMBLER -Score: 656 - - // File Comments -// Test a procedure with calling convention stack -// A slightly more complex call - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 - .label i = 4 -.segment Code - // __start -__start: { - // __start::__init1 - // char i = 0 - // [1] i = 0 -- vbuz1=vbuc1 - lda #0 - sta.z i - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - // __start::@1 - // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] - jsr main - // __start::@return - // [4] return - rts -} -.segment stage - // plus -// this should give a pragma error during compile, as test is not declared yet. -// __register(A) char plus(__zp(2) char a, __register(A) char b) -plus: { - .const OFFSET_STACK_A = 1 - .const OFFSET_STACK_B = 0 - .const OFFSET_STACK_RETURN_1 = 1 - .label a = 2 - // [5] plus::a#0 = stackidx(char,plus::OFFSET_STACK_A) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_A,x - sta.z a - // [6] plus::b#0 = stackidx(char,plus::OFFSET_STACK_B) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_B,x - // i++; - // [7] i = ++ i -- vbuz1=_inc_vbuz1 - inc.z i - // return a+b; - // [8] plus::return#0 = plus::a#0 + plus::b#0 -- vbuaa=vbuz1_plus_vbuaa - clc - adc.z a - // plus::@return - // } - // [9] stackidx(char,plus::OFFSET_STACK_RETURN_1) = plus::return#0 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_1,x - // [10] return - rts -} - // main -main: { - .label a = 3 - // [12] phi from main to main::@1 [phi:main->main::@1] - // [12] phi main::a#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z a - // [12] phi from main::@1 to main::@1 [phi:main::@1->main::@1] - // [12] phi main::a#2 = main::a#1 [phi:main::@1->main::@1#0] -- register_copy - // main::@1 - __b1: - // char v = a+1 - // [13] main::v#0 = main::a#2 + 1 -- vbuxx=vbuz1_plus_1 - ldx.z a - inx - // char w = plus('0', v) - // [14] stackpush(char) = '0' -- _stackpushbyte_=vbuc1 - lda #'0' - pha - // [15] stackpush(char) = main::v#0 -- _stackpushbyte_=vbuxx - txa - pha - // [16] callexecute plus -- call_vprc1 - jsr plus - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - // [18] main::w#0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // w+a - // [19] main::$2 = main::w#0 + main::a#2 -- vbuaa=vbuaa_plus_vbuz1 - clc - adc.z a - // SCREEN[i] = w+a - // [20] SCREEN[i] = main::$2 -- pbuc1_derefidx_vbuz1=vbuaa - ldy.z i - sta SCREEN,y - // for(char a:0..1) - // [21] main::a#1 = ++ main::a#2 -- vbuz1=_inc_vbuz1 - inc.z a - // [22] if(main::a#1!=2) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #2 - cmp.z a - bne __b1 - // main::@return - // } - // [23] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-stack-bank-2.sym b/src/test/ref/procedure-callingconvention-stack-bank-2.sym deleted file mode 100644 index 0e71cf52f..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-2.sym +++ /dev/null @@ -1,32 +0,0 @@ -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void __start() -__loadstore char i // zp[1]:4 105.24999999999999 -void main() -char main::$2 // reg byte a 202.0 -char main::a -char main::a#1 // a zp[1]:3 151.5 -char main::a#2 // a zp[1]:3 44.888888888888886 -char main::v -char main::v#0 // reg byte x 101.0 -char main::w -char main::w#0 // reg byte a 202.0 -__stackcall char plus(char a , char b) -__constant char plus::OFFSET_STACK_A = 1 -__constant char plus::OFFSET_STACK_B = 0 -__constant char plus::OFFSET_STACK_RETURN_1 = 1 -char plus::a -char plus::a#0 // a zp[1]:2 667.3333333333334 -char plus::b -char plus::b#0 // reg byte a 1001.0 -char plus::return -char plus::return#0 // reg byte a 2002.0 - -zp[1]:3 [ main::a#2 main::a#1 ] -zp[1]:4 [ i ] -zp[1]:2 [ plus::a#0 ] -reg byte a [ plus::b#0 ] -reg byte a [ plus::return#0 ] -reg byte x [ main::v#0 ] -reg byte a [ main::w#0 ] -reg byte a [ main::$2 ] diff --git a/src/test/ref/procedure-callingconvention-stack-bank-3.asm b/src/test/ref/procedure-callingconvention-stack-bank-3.asm deleted file mode 100644 index b16c0e558..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-3.asm +++ /dev/null @@ -1,77 +0,0 @@ -// Test a procedure with calling convention stack -// Illustrates live range problem with function variable printother::i and global variable val -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - .label SCREEN = $400 - .label val = 2 -.segment Code -__start: { - // char val = 0 - lda #0 - sta.z val - jsr main - rts -} -printother: { - ldx #0 - __b1: - // (SCREEN+40)[i]++; - inc SCREEN+$28,x - // for(char i:0..5) - inx - cpx #6 - bne __b1 - // } - rts -} -.segment platform -incval: { - // val++; - inc.z val - // } - rts -} -.segment stage -printval: { - // SCREEN[0] = val - lda.z val - sta SCREEN - // } - rts -} -.segment platform -ival: { - // incval() - jsr incval - // } - rts -} -.segment stage -pval: { - // printval() - jsr printval - // } - rts -} -main: { - ldy #0 - __b1: - // pval() - jsr pval - // printother() - jsr printother - // ival() - jsr ival - // for(char i:0..5) - iny - cpy #6 - bne __b1 - // } - rts -} diff --git a/src/test/ref/procedure-callingconvention-stack-bank-3.cfg b/src/test/ref/procedure-callingconvention-stack-bank-3.cfg deleted file mode 100644 index 01f3d9e0f..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-3.cfg +++ /dev/null @@ -1,79 +0,0 @@ - -void __start() -__start: scope:[__start] from - [0] phi() - to:__start::__init1 -__start::__init1: scope:[__start] from __start - [1] val = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - [2] phi() - [3] callexecute main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - [4] return - to:@return - -__stackcall void printother() -printother: scope:[printother] from - [5] phi() - to:printother::@1 -printother::@1: scope:[printother] from printother printother::@1 - [6] printother::i#2 = phi( printother/0, printother::@1/printother::i#1 ) - [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] - [8] printother::i#1 = ++ printother::i#2 - [9] if(printother::i#1!=6) goto printother::@1 - to:printother::@return -printother::@return: scope:[printother] from printother::@1 - [10] return - to:@return - -__stackcall void incval() -incval: scope:[incval] from - [11] val = ++ val - to:incval::@return -incval::@return: scope:[incval] from incval - [12] return - to:@return - -__stackcall void printval() -printval: scope:[printval] from - [13] *SCREEN = val - to:printval::@return -printval::@return: scope:[printval] from printval - [14] return - to:@return - -__stackcall void ival() -ival: scope:[ival] from - [15] phi() - [16] callexecute incval - to:ival::@return -ival::@return: scope:[ival] from ival - [17] return - to:@return - -__stackcall void pval() -pval: scope:[pval] from - [18] phi() - [19] callexecute printval - to:pval::@return -pval::@return: scope:[pval] from pval - [20] return - to:@return - -__stackcall void main() -main: scope:[main] from - [21] phi() - to:main::@1 -main::@1: scope:[main] from main main::@1 - [22] main::i#2 = phi( main/0, main::@1/main::i#1 ) - [23] callexecute pval - [24] callexecute printother - [25] callexecute ival - [26] main::i#1 = ++ main::i#2 - [27] if(main::i#1!=6) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - [28] return - to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-bank-3.log b/src/test/ref/procedure-callingconvention-stack-bank-3.log deleted file mode 100644 index 3037f5b3b..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-3.log +++ /dev/null @@ -1,650 +0,0 @@ -Loading link script "procedure-callingconvention-stack-bank.ld" -Converting variable modified inside __stackcall procedure main() to load/store val -Inlined call call __init -Calling convention __stackcall adding prepare/execute/finalize for call pval -Calling convention __stackcall adding prepare/execute/finalize for call printother -Calling convention __stackcall adding prepare/execute/finalize for call ival -Calling convention __stackcall adding prepare/execute/finalize for call printval -Calling convention __stackcall adding prepare/execute/finalize for call incval -Calling convention __stackcall adding prepare/execute/finalize for call main - -CONTROL FLOW GRAPH SSA - -__stackcall void main() -main: scope:[main] from - main::i#0 = 0 - to:main::@1 -main::@1: scope:[main] from main main::@1 - main::i#2 = phi( main/main::i#0, main::@1/main::i#1 ) - callexecute pval - callexecute printother - callexecute ival - main::i#1 = main::i#2 + rangenext(0,5) - main::$3 = main::i#1 != rangelast(0,5) - if(main::$3) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - return - to:@return - -__stackcall void pval() -pval: scope:[pval] from - callexecute printval - to:pval::@return -pval::@return: scope:[pval] from pval - return - to:@return - -__stackcall void ival() -ival: scope:[ival] from - callexecute incval - to:ival::@return -ival::@return: scope:[ival] from ival - return - to:@return - -__stackcall void printval() -printval: scope:[printval] from - SCREEN[0] = val - to:printval::@return -printval::@return: scope:[printval] from printval - return - to:@return - -__stackcall void incval() -incval: scope:[incval] from - val = ++ val - to:incval::@return -incval::@return: scope:[incval] from incval - return - to:@return - -__stackcall void printother() -printother: scope:[printother] from - printother::i#0 = 0 - to:printother::@1 -printother::@1: scope:[printother] from printother printother::@1 - printother::i#2 = phi( printother/printother::i#0, printother::@1/printother::i#1 ) - (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] - printother::i#1 = printother::i#2 + rangenext(0,5) - printother::$1 = printother::i#1 != rangelast(0,5) - if(printother::$1) goto printother::@1 - to:printother::@return -printother::@return: scope:[printother] from printother::@1 - return - to:@return - -void __start() -__start: scope:[__start] from - to:__start::__init1 -__start::__init1: scope:[__start] from __start - val = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - callexecute main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - return - to:@return - -SYMBOL TABLE SSA -__constant char * const SCREEN = (char *)$400 -void __start() -__stackcall void incval() -__stackcall void ival() -__stackcall void main() -bool main::$3 -char main::i -char main::i#0 -char main::i#1 -char main::i#2 -__stackcall void printother() -bool printother::$1 -char printother::i -char printother::i#0 -char printother::i#1 -char printother::i#2 -__stackcall void printval() -__stackcall void pval() -__loadstore char val - -Adding number conversion cast (unumber) 0 in SCREEN[0] = val -Adding number conversion cast (unumber) $28 in (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] -Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 0 -Simplifying constant integer cast $28 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) $28 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Simple Condition main::$3 [7] if(main::i#1!=rangelast(0,5)) goto main::@1 -Simple Condition printother::$1 [22] if(printother::i#1!=rangelast(0,5)) goto printother::@1 -Successful SSA optimization Pass2ConditionalJumpSimplification -Constant main::i#0 = 0 -Constant printother::i#0 = 0 -Successful SSA optimization Pass2ConstantIdentification -Resolved ranged next value [5] main::i#1 = ++ main::i#2 to ++ -Resolved ranged comparison value [7] if(main::i#1!=rangelast(0,5)) goto main::@1 to 6 -Resolved ranged next value [20] printother::i#1 = ++ printother::i#2 to ++ -Resolved ranged comparison value [22] if(printother::i#1!=rangelast(0,5)) goto printother::@1 to 6 -Simplifying expression containing zero SCREEN in [13] SCREEN[0] = val -Successful SSA optimization PassNSimplifyExpressionWithZero -Adding number conversion cast (unumber) 6 in if(main::i#1!=6) goto main::@1 -Adding number conversion cast (unumber) 6 in if(printother::i#1!=6) goto printother::@1 -Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant integer cast 6 -Simplifying constant integer cast 6 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 6 -Finalized unsigned number type (char) 6 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Inlining constant with var siblings main::i#0 -Inlining constant with var siblings printother::i#0 -Constant inlined main::i#0 = 0 -Constant inlined printother::i#0 = 0 -Successful SSA optimization Pass2ConstantInlining -Added new block during phi lifting main::@2(between main::@1 and main::@1) -Added new block during phi lifting printother::@2(between printother::@1 and printother::@1) -Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of printother -Adding NOP phi() at start of ival -Adding NOP phi() at start of pval -Adding NOP phi() at start of main -CALL GRAPH -Calls in [__start] to main:3 -Calls in [ival] to incval:17 -Calls in [pval] to printval:20 -Calls in [main] to pval:24 printother:25 ival:26 - -Created 2 initial phi equivalence classes -Coalesced [11] printother::i#3 = printother::i#1 -Coalesced [30] main::i#3 = main::i#1 -Coalesced down to 2 phi equivalence classes -Culled Empty Block label printother::@2 -Culled Empty Block label main::@2 -Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of printother -Adding NOP phi() at start of ival -Adding NOP phi() at start of pval -Adding NOP phi() at start of main - -FINAL CONTROL FLOW GRAPH - -void __start() -__start: scope:[__start] from - [0] phi() - to:__start::__init1 -__start::__init1: scope:[__start] from __start - [1] val = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - [2] phi() - [3] callexecute main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - [4] return - to:@return - -__stackcall void printother() -printother: scope:[printother] from - [5] phi() - to:printother::@1 -printother::@1: scope:[printother] from printother printother::@1 - [6] printother::i#2 = phi( printother/0, printother::@1/printother::i#1 ) - [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] - [8] printother::i#1 = ++ printother::i#2 - [9] if(printother::i#1!=6) goto printother::@1 - to:printother::@return -printother::@return: scope:[printother] from printother::@1 - [10] return - to:@return - -__stackcall void incval() -incval: scope:[incval] from - [11] val = ++ val - to:incval::@return -incval::@return: scope:[incval] from incval - [12] return - to:@return - -__stackcall void printval() -printval: scope:[printval] from - [13] *SCREEN = val - to:printval::@return -printval::@return: scope:[printval] from printval - [14] return - to:@return - -__stackcall void ival() -ival: scope:[ival] from - [15] phi() - [16] callexecute incval - to:ival::@return -ival::@return: scope:[ival] from ival - [17] return - to:@return - -__stackcall void pval() -pval: scope:[pval] from - [18] phi() - [19] callexecute printval - to:pval::@return -pval::@return: scope:[pval] from pval - [20] return - to:@return - -__stackcall void main() -main: scope:[main] from - [21] phi() - to:main::@1 -main::@1: scope:[main] from main main::@1 - [22] main::i#2 = phi( main/0, main::@1/main::i#1 ) - [23] callexecute pval - [24] callexecute printother - [25] callexecute ival - [26] main::i#1 = ++ main::i#2 - [27] if(main::i#1!=6) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - [28] return - to:@return - -null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope printother -null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope ival -null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope pval -null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope ival -null depth in calling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 in scope pval - -VARIABLE REGISTER WEIGHTS -void __start() -__stackcall void incval() -__stackcall void ival() -__stackcall void main() -char main::i -char main::i#1 // 151.5 -char main::i#2 // 50.5 -__stackcall void printother() -char printother::i -char printother::i#1 // 15001.5 -char printother::i#2 // 20002.0 -__stackcall void printval() -__stackcall void pval() -__loadstore char val // 1579.2105263157896 - -Initial phi equivalence classes -[ printother::i#2 printother::i#1 ] -[ main::i#2 main::i#1 ] -Added variable val to live range equivalence class [ val ] -Complete equivalence classes -[ printother::i#2 printother::i#1 ] -[ main::i#2 main::i#1 ] -[ val ] -Allocated zp[1]:2 [ printother::i#2 printother::i#1 ] -Allocated zp[1]:3 [ val ] -Allocated zp[1]:4 [ main::i#2 main::i#1 ] -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] val = 0 [ val ] ( [ val ] { } ) always clobbers reg byte a -Statement [13] *SCREEN = val [ val ] ( main:3::pval:23::printval:19 [ main::i#2 val ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::i#2 main::i#1 ] -Statement [1] val = 0 [ val ] ( [ val ] { } ) always clobbers reg byte a -Statement [13] *SCREEN = val [ val ] ( main:3::pval:23::printval:19 [ main::i#2 val ] { } ) always clobbers reg byte a -Potential registers zp[1]:2 [ printother::i#2 printother::i#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:4 [ main::i#2 main::i#1 ] : zp[1]:4 , reg byte x , reg byte y , -Potential registers zp[1]:3 [ val ] : zp[1]:3 , - -REGISTER UPLIFT SCOPES -Uplift Scope [printother] 35,003.5: zp[1]:2 [ printother::i#2 printother::i#1 ] -Uplift Scope [] 1,579.21: zp[1]:3 [ val ] -Uplift Scope [main] 202: zp[1]:4 [ main::i#2 main::i#1 ] -Uplift Scope [pval] -Uplift Scope [ival] -Uplift Scope [printval] -Uplift Scope [incval] -Uplift Scope [__start] - -Uplifting [printother] best 815 combination reg byte x [ printother::i#2 printother::i#1 ] -Uplifting [] best 815 combination zp[1]:3 [ val ] -Uplifting [main] best 725 combination reg byte y [ main::i#2 main::i#1 ] -Uplifting [pval] best 725 combination -Uplifting [ival] best 725 combination -Uplifting [printval] best 725 combination -Uplifting [incval] best 725 combination -Uplifting [__start] best 725 combination -Attempting to uplift remaining variables inzp[1]:3 [ val ] -Uplifting [] best 725 combination zp[1]:3 [ val ] -Allocated (was zp[1]:3) zp[1]:2 [ val ] - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack -// Illustrates live range problem with function variable printother::i and global variable val - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - // Global Constants & labels - .label SCREEN = $400 - .label val = 2 -.segment Code - // __start -__start: { - jmp __init1 - // __start::__init1 - __init1: - // [1] val = 0 -- vbuz1=vbuc1 - lda #0 - sta.z val - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - __b1_from___init1: - jmp __b1 - // __start::@1 - __b1: - // [3] callexecute main -- call_vprc1 - jsr main - jmp __breturn - // __start::@return - __breturn: - // [4] return - rts -} - // printother -printother: { - // [6] phi from printother to printother::@1 [phi:printother->printother::@1] - __b1_from_printother: - // [6] phi printother::i#2 = 0 [phi:printother->printother::@1#0] -- vbuxx=vbuc1 - ldx #0 - jmp __b1 - // [6] phi from printother::@1 to printother::@1 [phi:printother::@1->printother::@1] - __b1_from___b1: - // [6] phi printother::i#2 = printother::i#1 [phi:printother::@1->printother::@1#0] -- register_copy - jmp __b1 - // printother::@1 - __b1: - // [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] -- pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx - inc SCREEN+$28,x - // [8] printother::i#1 = ++ printother::i#2 -- vbuxx=_inc_vbuxx - inx - // [9] if(printother::i#1!=6) goto printother::@1 -- vbuxx_neq_vbuc1_then_la1 - cpx #6 - bne __b1_from___b1 - jmp __breturn - // printother::@return - __breturn: - // [10] return - rts -} -.segment platform - // incval -incval: { - // [11] val = ++ val -- vbuz1=_inc_vbuz1 - inc.z val - jmp __breturn - // incval::@return - __breturn: - // [12] return - rts -} -.segment stage - // printval -printval: { - // [13] *SCREEN = val -- _deref_pbuc1=vbuz1 - lda.z val - sta SCREEN - jmp __breturn - // printval::@return - __breturn: - // [14] return - rts -} -.segment platform - // ival -ival: { - // [16] callexecute incval -- call_vprc1 - jsr incval - jmp __breturn - // ival::@return - __breturn: - // [17] return - rts -} -.segment stage - // pval -pval: { - // [19] callexecute printval -- call_vprc1 - jsr printval - jmp __breturn - // pval::@return - __breturn: - // [20] return - rts -} - // main -main: { - // [22] phi from main to main::@1 [phi:main->main::@1] - __b1_from_main: - // [22] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 - ldy #0 - jmp __b1 - // [22] phi from main::@1 to main::@1 [phi:main::@1->main::@1] - __b1_from___b1: - // [22] phi main::i#2 = main::i#1 [phi:main::@1->main::@1#0] -- register_copy - jmp __b1 - // main::@1 - __b1: - // [23] callexecute pval -- call_vprc1 - jsr pval - // [24] callexecute printother -- call_vprc1 - jsr printother - // [25] callexecute ival -- call_vprc1 - jsr ival - // [26] main::i#1 = ++ main::i#2 -- vbuyy=_inc_vbuyy - iny - // [27] if(main::i#1!=6) goto main::@1 -- vbuyy_neq_vbuc1_then_la1 - cpy #6 - bne __b1_from___b1 - jmp __breturn - // main::@return - __breturn: - // [28] return - rts -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __init1 -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Replacing label __b1_from___b1 with __b1 -Replacing label __b1_from___b1 with __b1 -Removing instruction __b1_from___init1: -Removing instruction __b1_from___b1: -Removing instruction __b1_from___b1: -Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction __init1: -Removing instruction __b1: -Removing instruction __breturn: -Removing instruction __b1_from_printother: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __b1_from_main: -Removing instruction __breturn: -Succesful ASM optimization Pass5UnusedLabelElimination -Removing instruction jmp __b1 -Removing instruction jmp __b1 -Succesful ASM optimization Pass5NextJumpElimination - -FINAL SYMBOL TABLE -__constant char * const SCREEN = (char *) 1024 -void __start() -__stackcall void incval() -__stackcall void ival() -__stackcall void main() -char main::i -char main::i#1 // reg byte y 151.5 -char main::i#2 // reg byte y 50.5 -__stackcall void printother() -char printother::i -char printother::i#1 // reg byte x 15001.5 -char printother::i#2 // reg byte x 20002.0 -__stackcall void printval() -__stackcall void pval() -__loadstore char val // zp[1]:2 1579.2105263157896 - -reg byte x [ printother::i#2 printother::i#1 ] -reg byte y [ main::i#2 main::i#1 ] -zp[1]:2 [ val ] - - -FINAL ASSEMBLER -Score: 497 - - // File Comments -// Test a procedure with calling convention stack -// Illustrates live range problem with function variable printother::i and global variable val - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - // Global Constants & labels - .label SCREEN = $400 - .label val = 2 -.segment Code - // __start -__start: { - // __start::__init1 - // char val = 0 - // [1] val = 0 -- vbuz1=vbuc1 - lda #0 - sta.z val - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - // __start::@1 - // [3] callexecute main -- call_vprc1 - jsr main - // __start::@return - // [4] return - rts -} - // printother -printother: { - // [6] phi from printother to printother::@1 [phi:printother->printother::@1] - // [6] phi printother::i#2 = 0 [phi:printother->printother::@1#0] -- vbuxx=vbuc1 - ldx #0 - // [6] phi from printother::@1 to printother::@1 [phi:printother::@1->printother::@1] - // [6] phi printother::i#2 = printother::i#1 [phi:printother::@1->printother::@1#0] -- register_copy - // printother::@1 - __b1: - // (SCREEN+40)[i]++; - // [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] -- pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx - inc SCREEN+$28,x - // for(char i:0..5) - // [8] printother::i#1 = ++ printother::i#2 -- vbuxx=_inc_vbuxx - inx - // [9] if(printother::i#1!=6) goto printother::@1 -- vbuxx_neq_vbuc1_then_la1 - cpx #6 - bne __b1 - // printother::@return - // } - // [10] return - rts -} -.segment platform - // incval -incval: { - // val++; - // [11] val = ++ val -- vbuz1=_inc_vbuz1 - inc.z val - // incval::@return - // } - // [12] return - rts -} -.segment stage - // printval -printval: { - // SCREEN[0] = val - // [13] *SCREEN = val -- _deref_pbuc1=vbuz1 - lda.z val - sta SCREEN - // printval::@return - // } - // [14] return - rts -} -.segment platform - // ival -ival: { - // incval() - // [16] callexecute incval -- call_vprc1 - jsr incval - // ival::@return - // } - // [17] return - rts -} -.segment stage - // pval -pval: { - // printval() - // [19] callexecute printval -- call_vprc1 - jsr printval - // pval::@return - // } - // [20] return - rts -} - // main -main: { - // [22] phi from main to main::@1 [phi:main->main::@1] - // [22] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 - ldy #0 - // [22] phi from main::@1 to main::@1 [phi:main::@1->main::@1] - // [22] phi main::i#2 = main::i#1 [phi:main::@1->main::@1#0] -- register_copy - // main::@1 - __b1: - // pval() - // [23] callexecute pval -- call_vprc1 - jsr pval - // printother() - // [24] callexecute printother -- call_vprc1 - jsr printother - // ival() - // [25] callexecute ival -- call_vprc1 - jsr ival - // for(char i:0..5) - // [26] main::i#1 = ++ main::i#2 -- vbuyy=_inc_vbuyy - iny - // [27] if(main::i#1!=6) goto main::@1 -- vbuyy_neq_vbuc1_then_la1 - cpy #6 - bne __b1 - // main::@return - // } - // [28] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-stack-bank-3.sym b/src/test/ref/procedure-callingconvention-stack-bank-3.sym deleted file mode 100644 index 4eeb8472d..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-3.sym +++ /dev/null @@ -1,19 +0,0 @@ -__constant char * const SCREEN = (char *) 1024 -void __start() -__stackcall void incval() -__stackcall void ival() -__stackcall void main() -char main::i -char main::i#1 // reg byte y 151.5 -char main::i#2 // reg byte y 50.5 -__stackcall void printother() -char printother::i -char printother::i#1 // reg byte x 15001.5 -char printother::i#2 // reg byte x 20002.0 -__stackcall void printval() -__stackcall void pval() -__loadstore char val // zp[1]:2 1579.2105263157896 - -reg byte x [ printother::i#2 printother::i#1 ] -reg byte y [ main::i#2 main::i#1 ] -zp[1]:2 [ val ] diff --git a/src/test/ref/procedure-callingconvention-stack-bank-4.asm b/src/test/ref/procedure-callingconvention-stack-bank-4.asm deleted file mode 100644 index f5f8d94ab..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-4.asm +++ /dev/null @@ -1,111 +0,0 @@ -// Test a procedure with calling convention stack -// Returning and passing struct values -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - .const OFFSET_STRUCT_POINT_Y = 1 - .const SIZEOF_STRUCT_POINT = 2 - .const STACK_BASE = $103 - .label SCREEN = $400 - .label idx = 4 -.segment Code -__start: { - // char idx = 0 - lda #0 - sta.z idx - jsr main - rts -} -.segment stage -// void print(__zp(2) struct Point p) -print: { - .const OFFSET_STACK_P = 0 - .label p = 2 - tsx - lda STACK_BASE+OFFSET_STACK_P,x - sta.z p - lda STACK_BASE+OFFSET_STACK_P+1,x - sta.z p+1 - // SCREEN[idx++] = p.x - lda.z p - ldy.z idx - sta SCREEN,y - // SCREEN[idx++] = p.x; - inc.z idx - // SCREEN[idx++] = p.y - lda.z p+OFFSET_STRUCT_POINT_Y - ldy.z idx - sta SCREEN,y - // SCREEN[idx++] = p.y; - inc.z idx - // } - rts -} -// __zp(6) struct Point get(__register(X) char i) -get: { - .const OFFSET_STACK_I = 0 - .const OFFSET_STACK_RETURN_0 = 0 - .label return = 6 - .label p = 8 - tsx - lda STACK_BASE+OFFSET_STACK_I,x - tax - // i/2 - txa - lsr - // struct Point p = { i, i/2 } - stx.z p - sta.z p+OFFSET_STRUCT_POINT_Y - // return p; - ldy #SIZEOF_STRUCT_POINT - !: - lda p-1,y - sta return-1,y - dey - bne !- - // } - tsx - lda.z return - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - lda.z return+1 - sta STACK_BASE+OFFSET_STACK_RETURN_0+1,x - rts -} -main: { - .label p = 2 - .label i = 5 - lda #0 - sta.z i - __b1: - // for(char i=0;i<5;i++) - lda.z i - cmp #5 - bcc __b2 - // } - rts - __b2: - // struct Point p = get(i) - lda.z i - pha - pha - jsr get - pla - sta.z p - pla - sta.z p+1 - // print(p) - pha - lda.z p - pha - jsr print - pla - pla - // for(char i=0;i<5;i++) - inc.z i - jmp __b1 -} diff --git a/src/test/ref/procedure-callingconvention-stack-bank-4.cfg b/src/test/ref/procedure-callingconvention-stack-bank-4.cfg deleted file mode 100644 index df3d4fa35..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-4.cfg +++ /dev/null @@ -1,62 +0,0 @@ - -void __start() -__start: scope:[__start] from - [0] phi() - to:__start::__init1 -__start::__init1: scope:[__start] from __start - [1] idx = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - [2] phi() - [3] callexecute main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - [4] return - to:@return - -__stackcall void print(struct Point p) -print: scope:[print] from - [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) - [6] SCREEN[idx] = *((char *)&print::p) - [7] idx = ++ idx - [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) - [9] idx = ++ idx - to:print::@return -print::@return: scope:[print] from print - [10] return - to:@return - -__stackcall struct Point get(char i) -get: scope:[get] from - [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) - [12] get::$0 = get::i#0 >> 1 - [13] *((char *)&get::p) = get::i#0 - [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 - [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) - to:get::@return -get::@return: scope:[get] from get - [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return - [17] return - to:@return - -__stackcall void main() -main: scope:[main] from - [18] phi() - to:main::@1 -main::@1: scope:[main] from main main::@2 - [19] main::i#2 = phi( main/0, main::@2/main::i#1 ) - [20] if(main::i#2<5) goto main::@2 - to:main::@return -main::@return: scope:[main] from main::@1 - [21] return - to:@return -main::@2: scope:[main] from main::@1 - [22] stackpush(char) = main::i#2 - sideeffect stackpushpadding(1) - [24] callexecute get - [25] main::p = stackpull(struct Point) - [26] stackpush(struct Point) = main::p - [27] callexecute print - sideeffect stackpullpadding(2) - [29] main::i#1 = ++ main::i#2 - to:main::@1 diff --git a/src/test/ref/procedure-callingconvention-stack-bank-4.log b/src/test/ref/procedure-callingconvention-stack-bank-4.log deleted file mode 100644 index 4d3cfc93f..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-4.log +++ /dev/null @@ -1,710 +0,0 @@ -Loading link script "procedure-callingconvention-stack-bank.ld" -Converting variable modified inside __stackcall procedure main() to load/store idx -Adding parameter assignment in __stackcall procedure get::i = param(get::i) -Adding parameter assignment in __stackcall procedure print::p = param(print::p) -Inlined call call __init -Eliminating unused variable with no statement main::$1 -Calling convention __stackcall adding prepare/execute/finalize for main::p = call get(main::i) -Calling convention __stackcall adding prepare/execute/finalize for call print(main::p) -Calling convention __stackcall adding prepare/execute/finalize for call main -Calling convention STACK_CALL replacing param(get::i) with stackidx(char,get::OFFSET_STACK_I) -Calling convention STACK_CALL replacing param(print::p) with stackidx(struct Point,print::OFFSET_STACK_P) -Calling convention STACK_CALL adding stack return stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return -Calling convention STACK_CALL adding stack pull main::p = stackpull(struct Point) -Calling convention STACK_CALL adding stack push stackpush(char) = main::i -Calling convention STACK_CALL adding stack push stackpush(struct Point) = main::p -Removing C-classic struct-unwound assignment get::p = struct-unwound {*((char *)&get::p+OFFSET_STRUCT_POINT_X), *((char *)&get::p+OFFSET_STRUCT_POINT_Y)} -Removing C-classic struct-unwound assignment get::return = struct-unwound {*(&get::return)} - -CONTROL FLOW GRAPH SSA - -__stackcall void main() -main: scope:[main] from - main::i#0 = 0 - to:main::@1 -main::@1: scope:[main] from main main::@2 - main::i#2 = phi( main/main::i#0, main::@2/main::i#1 ) - main::$0 = main::i#2 < 5 - if(main::$0) goto main::@2 - to:main::@return -main::@2: scope:[main] from main::@1 - main::i#3 = phi( main::@1/main::i#2 ) - stackpush(char) = main::i#3 - sideeffect stackpushpadding(1) - callexecute get - main::p = stackpull(struct Point) - stackpush(struct Point) = main::p - callexecute print - sideeffect stackpullpadding(2) - main::i#1 = ++ main::i#3 - to:main::@1 -main::@return: scope:[main] from main::@1 - return - to:@return - -__stackcall struct Point get(char i) -get: scope:[get] from - get::i#0 = stackidx(char,get::OFFSET_STACK_I) - get::$0 = get::i#0 / 2 - *((char *)&get::p+OFFSET_STRUCT_POINT_X) = get::i#0 - *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 - *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) - to:get::@return -get::@return: scope:[get] from get - stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return - return - to:@return - -__stackcall void print(struct Point p) -print: scope:[print] from - print::p = stackidx(struct Point,print::OFFSET_STACK_P) - SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_X) - idx = ++ idx - SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) - idx = ++ idx - to:print::@return -print::@return: scope:[print] from print - return - to:@return - -void __start() -__start: scope:[__start] from - to:__start::__init1 -__start::__init1: scope:[__start] from __start - idx = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - callexecute main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - return - to:@return - -SYMBOL TABLE SSA -__constant char OFFSET_STRUCT_POINT_X = 0 -__constant char OFFSET_STRUCT_POINT_Y = 1 -__constant char * const SCREEN = (char *)$400 -__constant char SIZEOF_STRUCT_POINT = 2 -__constant unsigned int STACK_BASE = $103 -void __start() -__stackcall struct Point get(char i) -number get::$0 -__constant char get::OFFSET_STACK_I = 0 -__constant char get::OFFSET_STACK_RETURN_0 = 0 -char get::i -char get::i#0 -__loadstore struct Point get::p -__loadstore struct Point get::return -__loadstore char idx -__stackcall void main() -bool main::$0 -char main::i -char main::i#0 -char main::i#1 -char main::i#2 -char main::i#3 -__loadstore struct Point main::p -__stackcall void print(struct Point p) -__constant char print::OFFSET_STACK_P = 0 -__loadstore struct Point print::p - -Adding number conversion cast (unumber) 5 in main::$0 = main::i#2 < 5 -Adding number conversion cast (unumber) 2 in get::$0 = get::i#0 / 2 -Adding number conversion cast (unumber) get::$0 in get::$0 = get::i#0 / (unumber)2 -Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 5 -Finalized unsigned number type (char) 2 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Inferred type updated to char in get::$0 = get::i#0 / 2 -Alias main::i#2 = main::i#3 -Successful SSA optimization Pass2AliasElimination -Simple Condition main::$0 [3] if(main::i#2<5) goto main::@2 -Successful SSA optimization Pass2ConditionalJumpSimplification -Constant main::i#0 = 0 -Successful SSA optimization Pass2ConstantIdentification -Simplifying expression containing zero (char *)&get::p in [15] *((char *)&get::p+OFFSET_STRUCT_POINT_X) = get::i#0 -Simplifying expression containing zero (char *)&print::p in [21] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_X) -Successful SSA optimization PassNSimplifyExpressionWithZero -Eliminating unused constant OFFSET_STRUCT_POINT_X -Successful SSA optimization PassNEliminateUnusedVars -Rewriting division to use shift [12] get::$0 = get::i#0 / 2 -Successful SSA optimization Pass2MultiplyToShiftRewriting -Inlining constant with var siblings main::i#0 -Constant inlined main::i#0 = 0 -Successful SSA optimization Pass2ConstantInlining -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 2 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of main -CALL GRAPH -Calls in [__start] to main:3 -Calls in [main] to get:24 print:27 - -Created 1 initial phi equivalence classes -Coalesced [30] main::i#4 = main::i#1 -Coalesced down to 1 phi equivalence classes -Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of main - -FINAL CONTROL FLOW GRAPH - -void __start() -__start: scope:[__start] from - [0] phi() - to:__start::__init1 -__start::__init1: scope:[__start] from __start - [1] idx = 0 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - [2] phi() - [3] callexecute main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - [4] return - to:@return - -__stackcall void print(struct Point p) -print: scope:[print] from - [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) - [6] SCREEN[idx] = *((char *)&print::p) - [7] idx = ++ idx - [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) - [9] idx = ++ idx - to:print::@return -print::@return: scope:[print] from print - [10] return - to:@return - -__stackcall struct Point get(char i) -get: scope:[get] from - [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) - [12] get::$0 = get::i#0 >> 1 - [13] *((char *)&get::p) = get::i#0 - [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 - [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) - to:get::@return -get::@return: scope:[get] from get - [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return - [17] return - to:@return - -__stackcall void main() -main: scope:[main] from - [18] phi() - to:main::@1 -main::@1: scope:[main] from main main::@2 - [19] main::i#2 = phi( main/0, main::@2/main::i#1 ) - [20] if(main::i#2<5) goto main::@2 - to:main::@return -main::@return: scope:[main] from main::@1 - [21] return - to:@return -main::@2: scope:[main] from main::@1 - [22] stackpush(char) = main::i#2 - sideeffect stackpushpadding(1) - [24] callexecute get - [25] main::p = stackpull(struct Point) - [26] stackpush(struct Point) = main::p - [27] callexecute print - sideeffect stackpullpadding(2) - [29] main::i#1 = ++ main::i#2 - to:main::@1 - -null depth in calling loop Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 in scope print -null depth in calling loop Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 in scope get - -VARIABLE REGISTER WEIGHTS -void __start() -__stackcall struct Point get(char i) -char get::$0 // 1001.0 -char get::i -char get::i#0 // 1501.5 -__loadstore struct Point get::p -__loadstore struct Point get::return // 47.666666666666664 -__loadstore char idx // 316.2105263157895 -__stackcall void main() -char main::i -char main::i#1 // 202.0 -char main::i#2 // 44.888888888888886 -__loadstore struct Point main::p // 202.0 -__stackcall void print(struct Point p) -__loadstore struct Point print::p // 333.6666666666667 - -Initial phi equivalence classes -[ main::i#2 main::i#1 ] -Added variable idx to live range equivalence class [ idx ] -Added variable print::p to live range equivalence class [ print::p ] -Added variable get::i#0 to live range equivalence class [ get::i#0 ] -Added variable get::$0 to live range equivalence class [ get::$0 ] -Added variable main::p to live range equivalence class [ main::p ] -Added variable get::return to live range equivalence class [ get::return ] -Added variable get::p to live range equivalence class [ get::p ] -Complete equivalence classes -[ main::i#2 main::i#1 ] -[ idx ] -[ print::p ] -[ get::i#0 ] -[ get::$0 ] -[ main::p ] -[ get::return ] -[ get::p ] -Allocated zp[1]:2 [ get::i#0 ] -Allocated zp[1]:3 [ get::$0 ] -Allocated zp[2]:4 [ print::p ] -Allocated zp[1]:6 [ idx ] -Allocated zp[1]:7 [ main::i#2 main::i#1 ] -Allocated zp[2]:8 [ main::p ] -Allocated zp[2]:10 [ get::return ] -Allocated zp[2]:12 [ get::p ] -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] idx = 0 [ idx get::p get::return ] ( [ idx get::p get::return ] { } ) always clobbers reg byte a -Statement [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte x -Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::i#2 main::i#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:7 [ main::i#2 main::i#1 ] -Statement [6] SCREEN[idx] = *((char *)&print::p) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:7 [ main::i#2 main::i#1 ] -Statement [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) [ idx ] ( main:3::print:27 [ get::p get::return main::i#2 idx ] { } ) always clobbers reg byte a reg byte y -Statement [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) [ get::i#0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::p get::return ] { } ) always clobbers reg byte a reg byte x -Statement [12] get::$0 = get::i#0 >> 1 [ get::i#0 get::$0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::$0 get::p get::return ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:2 [ get::i#0 ] -Statement [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte y -Statement [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte x -Statement [20] if(main::i#2<5) goto main::@2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a -Statement [22] stackpush(char) = main::i#2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a -Statement [25] main::p = stackpull(struct Point) [ idx get::p get::return main::i#2 main::p ] ( main:3 [ idx get::p get::return main::i#2 main::p ] { } ) always clobbers reg byte a -Statement [26] stackpush(struct Point) = main::p [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a -Statement sideeffect stackpullpadding(2) always clobbers reg byte a -Statement [1] idx = 0 [ idx get::p get::return ] ( [ idx get::p get::return ] { } ) always clobbers reg byte a -Statement [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte x -Statement [6] SCREEN[idx] = *((char *)&print::p) [ idx print::p ] ( main:3::print:27 [ get::p get::return main::i#2 idx print::p ] { } ) always clobbers reg byte a reg byte y -Statement [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) [ idx ] ( main:3::print:27 [ get::p get::return main::i#2 idx ] { } ) always clobbers reg byte a reg byte y -Statement [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) [ get::i#0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::p get::return ] { } ) always clobbers reg byte a reg byte x -Statement [12] get::$0 = get::i#0 >> 1 [ get::i#0 get::$0 get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::i#0 get::$0 get::p get::return ] { } ) always clobbers reg byte a -Statement [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte y -Statement [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return [ get::p get::return ] ( main:3::get:24 [ idx main::i#2 get::p get::return ] { } ) always clobbers reg byte a reg byte x -Statement [20] if(main::i#2<5) goto main::@2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a -Statement [22] stackpush(char) = main::i#2 [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a -Statement [25] main::p = stackpull(struct Point) [ idx get::p get::return main::i#2 main::p ] ( main:3 [ idx get::p get::return main::i#2 main::p ] { } ) always clobbers reg byte a -Statement [26] stackpush(struct Point) = main::p [ idx get::p get::return main::i#2 ] ( main:3 [ idx get::p get::return main::i#2 ] { } ) always clobbers reg byte a -Statement sideeffect stackpullpadding(2) always clobbers reg byte a -Potential registers zp[1]:7 [ main::i#2 main::i#1 ] : zp[1]:7 , -Potential registers zp[1]:6 [ idx ] : zp[1]:6 , -Potential registers zp[2]:4 [ print::p ] : zp[2]:4 , -Potential registers zp[1]:2 [ get::i#0 ] : zp[1]:2 , reg byte x , reg byte y , -Potential registers zp[1]:3 [ get::$0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:8 [ main::p ] : zp[2]:8 , -Potential registers zp[2]:10 [ get::return ] : zp[2]:10 , -Potential registers zp[2]:12 [ get::p ] : zp[2]:12 , - -REGISTER UPLIFT SCOPES -Uplift Scope [get] 1,501.5: zp[1]:2 [ get::i#0 ] 1,001: zp[1]:3 [ get::$0 ] 47.67: zp[2]:10 [ get::return ] 0: zp[2]:12 [ get::p ] -Uplift Scope [main] 246.89: zp[1]:7 [ main::i#2 main::i#1 ] 202: zp[2]:8 [ main::p ] -Uplift Scope [print] 333.67: zp[2]:4 [ print::p ] -Uplift Scope [] 316.21: zp[1]:6 [ idx ] -Uplift Scope [Point] -Uplift Scope [__start] - -Uplifting [get] best 993 combination reg byte x [ get::i#0 ] reg byte a [ get::$0 ] zp[2]:10 [ get::return ] zp[2]:12 [ get::p ] -Uplifting [main] best 993 combination zp[1]:7 [ main::i#2 main::i#1 ] zp[2]:8 [ main::p ] -Uplifting [print] best 993 combination zp[2]:4 [ print::p ] -Uplifting [] best 993 combination zp[1]:6 [ idx ] -Uplifting [Point] best 993 combination -Uplifting [__start] best 993 combination -Attempting to uplift remaining variables inzp[1]:6 [ idx ] -Uplifting [] best 993 combination zp[1]:6 [ idx ] -Attempting to uplift remaining variables inzp[1]:7 [ main::i#2 main::i#1 ] -Uplifting [main] best 993 combination zp[1]:7 [ main::i#2 main::i#1 ] -Coalescing zero page register [ zp[2]:8 [ main::p ] ] with [ zp[2]:4 [ print::p ] ] -Allocated (was zp[2]:8) zp[2]:2 [ main::p print::p ] -Allocated (was zp[1]:6) zp[1]:4 [ idx ] -Allocated (was zp[1]:7) zp[1]:5 [ main::i#2 main::i#1 ] -Allocated (was zp[2]:10) zp[2]:6 [ get::return ] -Allocated (was zp[2]:12) zp[2]:8 [ get::p ] - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack -// Returning and passing struct values - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - // Global Constants & labels - .const OFFSET_STRUCT_POINT_Y = 1 - .const SIZEOF_STRUCT_POINT = 2 - .const STACK_BASE = $103 - .label SCREEN = $400 - .label idx = 4 -.segment Code - // __start -__start: { - jmp __init1 - // __start::__init1 - __init1: - // [1] idx = 0 -- vbuz1=vbuc1 - lda #0 - sta.z idx - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - __b1_from___init1: - jmp __b1 - // __start::@1 - __b1: - // [3] callexecute main -- call_vprc1 - jsr main - jmp __breturn - // __start::@return - __breturn: - // [4] return - rts -} -.segment stage - // print -// void print(__zp(2) struct Point p) -print: { - .const OFFSET_STACK_P = 0 - .label p = 2 - // [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) -- vssz1=_stackidxstruct_2_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_P,x - sta.z p - lda STACK_BASE+OFFSET_STACK_P+1,x - sta.z p+1 - // [6] SCREEN[idx] = *((char *)&print::p) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 - lda.z p - ldy.z idx - sta SCREEN,y - // [7] idx = ++ idx -- vbuz1=_inc_vbuz1 - inc.z idx - // [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 - lda.z p+OFFSET_STRUCT_POINT_Y - ldy.z idx - sta SCREEN,y - // [9] idx = ++ idx -- vbuz1=_inc_vbuz1 - inc.z idx - jmp __breturn - // print::@return - __breturn: - // [10] return - rts -} - // get -// __zp(6) struct Point get(__register(X) char i) -get: { - .const OFFSET_STACK_I = 0 - .const OFFSET_STACK_RETURN_0 = 0 - .label return = 6 - .label p = 8 - // [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) -- vbuxx=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_I,x - tax - // [12] get::$0 = get::i#0 >> 1 -- vbuaa=vbuxx_ror_1 - txa - lsr - // [13] *((char *)&get::p) = get::i#0 -- _deref_pbuc1=vbuxx - stx.z p - // [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 -- _deref_pbuc1=vbuaa - sta.z p+OFFSET_STRUCT_POINT_Y - // [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 - ldy #SIZEOF_STRUCT_POINT - !: - lda p-1,y - sta return-1,y - dey - bne !- - jmp __breturn - // get::@return - __breturn: - // [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return -- _stackidxstruct_2_vbuc1=vssz1 - tsx - lda.z return - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - lda.z return+1 - sta STACK_BASE+OFFSET_STACK_RETURN_0+1,x - // [17] return - rts -} - // main -main: { - .label p = 2 - .label i = 5 - // [19] phi from main to main::@1 [phi:main->main::@1] - __b1_from_main: - // [19] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z i - jmp __b1 - // main::@1 - __b1: - // [20] if(main::i#2<5) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda.z i - cmp #5 - bcc __b2 - jmp __breturn - // main::@return - __breturn: - // [21] return - rts - // main::@2 - __b2: - // [22] stackpush(char) = main::i#2 -- _stackpushbyte_=vbuz1 - lda.z i - pha - // sideeffect stackpushpadding(1) -- _stackpushpadding_1 - pha - // [24] callexecute get -- call_vprc1 - jsr get - // [25] main::p = stackpull(struct Point) -- vssz1=_stackpullstruct_2_ - pla - sta.z p - pla - sta.z p+1 - // [26] stackpush(struct Point) = main::p -- _stackpushstruct_2_=vssz1 - lda.z p+1 - pha - lda.z p - pha - // [27] callexecute print -- call_vprc1 - jsr print - // sideeffect stackpullpadding(2) -- _stackpullpadding_2 - pla - pla - // [29] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 - inc.z i - // [19] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - __b1_from___b2: - // [19] phi main::i#2 = main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp __b1 -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __init1 -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction lda.z p+1 -Succesful ASM optimization Pass5UnnecesaryLoadElimination -Removing instruction __b1_from___init1: -Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction __init1: -Removing instruction __b1: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __b1_from_main: -Removing instruction __breturn: -Removing instruction __b1_from___b2: -Succesful ASM optimization Pass5UnusedLabelElimination - -FINAL SYMBOL TABLE -__constant char OFFSET_STRUCT_POINT_Y = 1 -__constant char * const SCREEN = (char *) 1024 -__constant char SIZEOF_STRUCT_POINT = 2 -__constant unsigned int STACK_BASE = $103 -void __start() -__stackcall struct Point get(char i) -char get::$0 // reg byte a 1001.0 -__constant char get::OFFSET_STACK_I = 0 -__constant char get::OFFSET_STACK_RETURN_0 = 0 -char get::i -char get::i#0 // reg byte x 1501.5 -__loadstore struct Point get::p // zp[2]:8 -__loadstore struct Point get::return // zp[2]:6 47.666666666666664 -__loadstore char idx // zp[1]:4 316.2105263157895 -__stackcall void main() -char main::i -char main::i#1 // i zp[1]:5 202.0 -char main::i#2 // i zp[1]:5 44.888888888888886 -__loadstore struct Point main::p // zp[2]:2 202.0 -__stackcall void print(struct Point p) -__constant char print::OFFSET_STACK_P = 0 -__loadstore struct Point print::p // zp[2]:2 333.6666666666667 - -zp[1]:5 [ main::i#2 main::i#1 ] -zp[1]:4 [ idx ] -reg byte x [ get::i#0 ] -reg byte a [ get::$0 ] -zp[2]:2 [ main::p print::p ] -zp[2]:6 [ get::return ] -zp[2]:8 [ get::p ] - - -FINAL ASSEMBLER -Score: 861 - - // File Comments -// Test a procedure with calling convention stack -// Returning and passing struct values - // Upstart -.cpu _65c02 - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - // Global Constants & labels - .const OFFSET_STRUCT_POINT_Y = 1 - .const SIZEOF_STRUCT_POINT = 2 - .const STACK_BASE = $103 - .label SCREEN = $400 - .label idx = 4 -.segment Code - // __start -__start: { - // __start::__init1 - // char idx = 0 - // [1] idx = 0 -- vbuz1=vbuc1 - lda #0 - sta.z idx - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - // __start::@1 - // [3] callexecute main -- call_vprc1 - jsr main - // __start::@return - // [4] return - rts -} -.segment stage - // print -// void print(__zp(2) struct Point p) -print: { - .const OFFSET_STACK_P = 0 - .label p = 2 - // [5] print::p = stackidx(struct Point,print::OFFSET_STACK_P) -- vssz1=_stackidxstruct_2_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_P,x - sta.z p - lda STACK_BASE+OFFSET_STACK_P+1,x - sta.z p+1 - // SCREEN[idx++] = p.x - // [6] SCREEN[idx] = *((char *)&print::p) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 - lda.z p - ldy.z idx - sta SCREEN,y - // SCREEN[idx++] = p.x; - // [7] idx = ++ idx -- vbuz1=_inc_vbuz1 - inc.z idx - // SCREEN[idx++] = p.y - // [8] SCREEN[idx] = *((char *)&print::p+OFFSET_STRUCT_POINT_Y) -- pbuc1_derefidx_vbuz1=_deref_pbuc2 - lda.z p+OFFSET_STRUCT_POINT_Y - ldy.z idx - sta SCREEN,y - // SCREEN[idx++] = p.y; - // [9] idx = ++ idx -- vbuz1=_inc_vbuz1 - inc.z idx - // print::@return - // } - // [10] return - rts -} - // get -// __zp(6) struct Point get(__register(X) char i) -get: { - .const OFFSET_STACK_I = 0 - .const OFFSET_STACK_RETURN_0 = 0 - .label return = 6 - .label p = 8 - // [11] get::i#0 = stackidx(char,get::OFFSET_STACK_I) -- vbuxx=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_I,x - tax - // i/2 - // [12] get::$0 = get::i#0 >> 1 -- vbuaa=vbuxx_ror_1 - txa - lsr - // struct Point p = { i, i/2 } - // [13] *((char *)&get::p) = get::i#0 -- _deref_pbuc1=vbuxx - stx.z p - // [14] *((char *)&get::p+OFFSET_STRUCT_POINT_Y) = get::$0 -- _deref_pbuc1=vbuaa - sta.z p+OFFSET_STRUCT_POINT_Y - // return p; - // [15] *(&get::return) = memcpy(*(&get::p), struct Point, SIZEOF_STRUCT_POINT) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3 - ldy #SIZEOF_STRUCT_POINT - !: - lda p-1,y - sta return-1,y - dey - bne !- - // get::@return - // } - // [16] stackidx(struct Point,get::OFFSET_STACK_RETURN_0) = get::return -- _stackidxstruct_2_vbuc1=vssz1 - tsx - lda.z return - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - lda.z return+1 - sta STACK_BASE+OFFSET_STACK_RETURN_0+1,x - // [17] return - rts -} - // main -main: { - .label p = 2 - .label i = 5 - // [19] phi from main to main::@1 [phi:main->main::@1] - // [19] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z i - // main::@1 - __b1: - // for(char i=0;i<5;i++) - // [20] if(main::i#2<5) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 - lda.z i - cmp #5 - bcc __b2 - // main::@return - // } - // [21] return - rts - // main::@2 - __b2: - // struct Point p = get(i) - // [22] stackpush(char) = main::i#2 -- _stackpushbyte_=vbuz1 - lda.z i - pha - // sideeffect stackpushpadding(1) -- _stackpushpadding_1 - pha - // [24] callexecute get -- call_vprc1 - jsr get - // [25] main::p = stackpull(struct Point) -- vssz1=_stackpullstruct_2_ - pla - sta.z p - pla - sta.z p+1 - // print(p) - // [26] stackpush(struct Point) = main::p -- _stackpushstruct_2_=vssz1 - pha - lda.z p - pha - // [27] callexecute print -- call_vprc1 - jsr print - // sideeffect stackpullpadding(2) -- _stackpullpadding_2 - pla - pla - // for(char i=0;i<5;i++) - // [29] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 - inc.z i - // [19] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - // [19] phi main::i#2 = main::i#1 [phi:main::@2->main::@1#0] -- register_copy - jmp __b1 -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-stack-bank-4.sym b/src/test/ref/procedure-callingconvention-stack-bank-4.sym deleted file mode 100644 index 0c4dcbeba..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-4.sym +++ /dev/null @@ -1,30 +0,0 @@ -__constant char OFFSET_STRUCT_POINT_Y = 1 -__constant char * const SCREEN = (char *) 1024 -__constant char SIZEOF_STRUCT_POINT = 2 -__constant unsigned int STACK_BASE = $103 -void __start() -__stackcall struct Point get(char i) -char get::$0 // reg byte a 1001.0 -__constant char get::OFFSET_STACK_I = 0 -__constant char get::OFFSET_STACK_RETURN_0 = 0 -char get::i -char get::i#0 // reg byte x 1501.5 -__loadstore struct Point get::p // zp[2]:8 -__loadstore struct Point get::return // zp[2]:6 47.666666666666664 -__loadstore char idx // zp[1]:4 316.2105263157895 -__stackcall void main() -char main::i -char main::i#1 // i zp[1]:5 202.0 -char main::i#2 // i zp[1]:5 44.888888888888886 -__loadstore struct Point main::p // zp[2]:2 202.0 -__stackcall void print(struct Point p) -__constant char print::OFFSET_STACK_P = 0 -__loadstore struct Point print::p // zp[2]:2 333.6666666666667 - -zp[1]:5 [ main::i#2 main::i#1 ] -zp[1]:4 [ idx ] -reg byte x [ get::i#0 ] -reg byte a [ get::$0 ] -zp[2]:2 [ main::p print::p ] -zp[2]:6 [ get::return ] -zp[2]:8 [ get::p ] diff --git a/src/test/ref/procedure-callingconvention-stack-bank-5.asm b/src/test/ref/procedure-callingconvention-stack-bank-5.asm deleted file mode 100644 index 7a7f95bc0..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-5.asm +++ /dev/null @@ -1,50 +0,0 @@ -// Test a procedure with calling convention stack -// Recursion that works (no local variables) - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment stage -// __register(A) char pow2(__register(A) char n) -pow2: { - .const OFFSET_STACK_N = 0 - .const OFFSET_STACK_RETURN_0 = 0 - tsx - lda STACK_BASE+OFFSET_STACK_N,x - // if (n == 0) - cmp #0 - beq __b1 - // n-1 - sec - sbc #1 - // char c = pow2(n-1) - pha - jsr pow2 - pla - // return c+c; - asl - jmp __breturn - __b1: - lda #1 - __breturn: - // } - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - rts -} -main: { - // pow2(6) - lda #6 - pha - jsr pow2 - pla - // *SCREEN = pow2(6) - sta SCREEN - // } - rts -} diff --git a/src/test/ref/procedure-callingconvention-stack-bank-5.cfg b/src/test/ref/procedure-callingconvention-stack-bank-5.cfg deleted file mode 100644 index 17c2baaed..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-5.cfg +++ /dev/null @@ -1,29 +0,0 @@ - -__stackcall char pow2(char n) -pow2: scope:[pow2] from - [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) - [1] if(pow2::n#0==0) goto pow2::@return - to:pow2::@1 -pow2::@1: scope:[pow2] from pow2 - [2] pow2::$1 = pow2::n#0 - 1 - [3] stackpush(char) = pow2::$1 - [4] callexecute pow2 - [5] pow2::c#0 = stackpull(char) - [6] pow2::return#1 = pow2::c#0 + pow2::c#0 - to:pow2::@return -pow2::@return: scope:[pow2] from pow2 pow2::@1 - [7] pow2::return#2 = phi( pow2/1, pow2::@1/pow2::return#1 ) - [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 - [9] return - to:@return - -void main() -main: scope:[main] from - [10] stackpush(char) = 6 - [11] callexecute pow2 - [12] main::$0 = stackpull(char) - [13] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [14] return - to:@return diff --git a/src/test/ref/procedure-callingconvention-stack-bank-5.log b/src/test/ref/procedure-callingconvention-stack-bank-5.log deleted file mode 100644 index e3d77a25a..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-5.log +++ /dev/null @@ -1,408 +0,0 @@ -Loading link script "procedure-callingconvention-stack-bank.ld" -Warning! Unknown #pragma platform -Adding parameter assignment in __stackcall procedure pow2::n = param(pow2::n) -Eliminating unused variable with no statement pow2::$2 -Calling convention __stackcall adding prepare/execute/finalize for main::$0 = call pow2(6) -Calling convention __stackcall adding prepare/execute/finalize for pow2::c = call pow2(pow2::$1) -Calling convention STACK_CALL replacing param(pow2::n) with stackidx(char,pow2::OFFSET_STACK_N) -Calling convention STACK_CALL adding stack return stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return -Calling convention STACK_CALL adding stack pull main::$0 = stackpull(char) -Calling convention STACK_CALL adding stack pull pow2::c = stackpull(char) -Calling convention STACK_CALL adding stack push stackpush(char) = 6 -Calling convention STACK_CALL adding stack push stackpush(char) = pow2::$1 - -CONTROL FLOW GRAPH SSA - -void main() -main: scope:[main] from __start - stackpush(char) = 6 - callexecute pow2 - main::$0 = stackpull(char) - *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - return - to:@return - -__stackcall char pow2(char n) -pow2: scope:[pow2] from - pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) - pow2::$0 = pow2::n#0 == 0 - if(pow2::$0) goto pow2::@1 - to:pow2::@2 -pow2::@1: scope:[pow2] from pow2 - pow2::return#0 = 1 - to:pow2::@return -pow2::@2: scope:[pow2] from pow2 - pow2::n#1 = phi( pow2/pow2::n#0 ) - pow2::$1 = pow2::n#1 - 1 - stackpush(char) = pow2::$1 - callexecute pow2 - pow2::c#0 = stackpull(char) - pow2::$3 = pow2::c#0 + pow2::c#0 - pow2::return#1 = pow2::$3 - to:pow2::@return -pow2::@return: scope:[pow2] from pow2::@1 pow2::@2 - pow2::return#2 = phi( pow2::@1/pow2::return#0, pow2::@2/pow2::return#1 ) - stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 - 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 -__constant char * const SCREEN = (char *)$400 -__constant unsigned int STACK_BASE = $103 -void __start() -void main() -char main::$0 -__stackcall char pow2(char n) -bool pow2::$0 -number pow2::$1 -char pow2::$3 -__constant char pow2::OFFSET_STACK_N = 0 -__constant char pow2::OFFSET_STACK_RETURN_0 = 0 -char pow2::c -char pow2::c#0 -char pow2::n -char pow2::n#0 -char pow2::n#1 -char pow2::return -char pow2::return#0 -char pow2::return#1 -char pow2::return#2 - -Adding number conversion cast (unumber) 6 in stackpush(char) = 6 -Adding number conversion cast (unumber) 0 in pow2::$0 = pow2::n#0 == 0 -Adding number conversion cast (unumber) 1 in pow2::return#0 = 1 -Adding number conversion cast (unumber) 1 in pow2::$1 = pow2::n#1 - 1 -Adding number conversion cast (unumber) pow2::$1 in pow2::$1 = pow2::n#1 - (unumber)1 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast stackpush(char) = (unumber)6 -Inlining cast pow2::return#0 = (unumber)1 -Successful SSA optimization Pass2InlineCast -Simplifying constant pointer cast (char *) 1024 -Simplifying constant integer cast 6 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 6 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Inferred type updated to char in pow2::$1 = pow2::n#1 - 1 -Alias pow2::n#0 = pow2::n#1 -Alias pow2::return#1 = pow2::$3 -Successful SSA optimization Pass2AliasElimination -Simple Condition pow2::$0 [7] if(pow2::n#0==0) goto pow2::@1 -Successful SSA optimization Pass2ConditionalJumpSimplification -Constant pow2::return#0 = 1 -Successful SSA optimization Pass2ConstantIdentification -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 -Inlining constant with var siblings pow2::return#0 -Constant inlined pow2::return#0 = 1 -Successful SSA optimization Pass2ConstantInlining -Adding NOP phi() at start of pow2::@1 -CALL GRAPH -Calls in [pow2] to pow2:4 -Calls in [main] to pow2:13 - -Created 1 initial phi equivalence classes -Coalesced [7] pow2::return#3 = pow2::return#1 -Coalesced down to 1 phi equivalence classes -Culled Empty Block label pow2::@1 -Renumbering block pow2::@2 to pow2::@1 - -FINAL CONTROL FLOW GRAPH - -__stackcall char pow2(char n) -pow2: scope:[pow2] from - [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) - [1] if(pow2::n#0==0) goto pow2::@return - to:pow2::@1 -pow2::@1: scope:[pow2] from pow2 - [2] pow2::$1 = pow2::n#0 - 1 - [3] stackpush(char) = pow2::$1 - [4] callexecute pow2 - [5] pow2::c#0 = stackpull(char) - [6] pow2::return#1 = pow2::c#0 + pow2::c#0 - to:pow2::@return -pow2::@return: scope:[pow2] from pow2 pow2::@1 - [7] pow2::return#2 = phi( pow2/1, pow2::@1/pow2::return#1 ) - [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 - [9] return - to:@return - -void main() -main: scope:[main] from - [10] stackpush(char) = 6 - [11] callexecute pow2 - [12] main::$0 = stackpull(char) - [13] *SCREEN = main::$0 - to:main::@return -main::@return: scope:[main] from main - [14] return - to:@return - - -VARIABLE REGISTER WEIGHTS -void main() -char main::$0 // 4.0 -__stackcall char pow2(char n) -char pow2::$1 // 22.0 -char pow2::c -char pow2::c#0 // 33.0 -char pow2::n -char pow2::n#0 // 16.5 -char pow2::return -char pow2::return#1 // 22.0 -char pow2::return#2 // 22.0 - -Initial phi equivalence classes -[ pow2::return#2 pow2::return#1 ] -Added variable pow2::n#0 to live range equivalence class [ pow2::n#0 ] -Added variable pow2::$1 to live range equivalence class [ pow2::$1 ] -Added variable pow2::c#0 to live range equivalence class [ pow2::c#0 ] -Added variable main::$0 to live range equivalence class [ main::$0 ] -Complete equivalence classes -[ pow2::return#2 pow2::return#1 ] -[ pow2::n#0 ] -[ pow2::$1 ] -[ pow2::c#0 ] -[ main::$0 ] -Allocated zp[1]:2 [ pow2::return#2 pow2::return#1 ] -Allocated zp[1]:3 [ pow2::c#0 ] -Allocated zp[1]:4 [ pow2::$1 ] -Allocated zp[1]:5 [ pow2::n#0 ] -Allocated zp[1]:6 [ main::$0 ] -REGISTER UPLIFT POTENTIAL REGISTERS -Statement [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) [ pow2::n#0 ] ( pow2:11 [ pow2::n#0 ] { } ) always clobbers reg byte a reg byte x -Statement [5] pow2::c#0 = stackpull(char) [ pow2::c#0 ] ( pow2:11 [ pow2::c#0 ] { } ) always clobbers reg byte a -Statement [6] pow2::return#1 = pow2::c#0 + pow2::c#0 [ pow2::return#1 ] ( pow2:11 [ pow2::return#1 ] { } ) always clobbers reg byte a -Statement [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 [ ] ( pow2:11 [ ] { } ) always clobbers reg byte x -Statement [10] stackpush(char) = 6 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [12] main::$0 = stackpull(char) [ main::$0 ] ( [ main::$0 ] { } ) always clobbers reg byte a -Potential registers zp[1]:2 [ pow2::return#2 pow2::return#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:5 [ pow2::n#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:4 [ pow2::$1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:3 [ pow2::c#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:6 [ main::$0 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , - -REGISTER UPLIFT SCOPES -Uplift Scope [pow2] 44: zp[1]:2 [ pow2::return#2 pow2::return#1 ] 33: zp[1]:3 [ pow2::c#0 ] 22: zp[1]:4 [ pow2::$1 ] 16.5: zp[1]:5 [ pow2::n#0 ] -Uplift Scope [main] 4: zp[1]:6 [ main::$0 ] -Uplift Scope [] - -Uplifting [pow2] best 87 combination reg byte a [ pow2::return#2 pow2::return#1 ] reg byte a [ pow2::c#0 ] reg byte a [ pow2::$1 ] reg byte a [ pow2::n#0 ] -Limited combination testing to 100 combinations of 256 possible. -Uplifting [main] best 81 combination reg byte a [ main::$0 ] -Uplifting [] best 81 combination - -ASSEMBLER BEFORE OPTIMIZATION - // File Comments -// Test a procedure with calling convention stack -// Recursion that works (no local variables) - // Upstart - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment stage - // pow2 -// __register(A) char pow2(__register(A) char n) -pow2: { - .const OFFSET_STACK_N = 0 - .const OFFSET_STACK_RETURN_0 = 0 - // [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_N,x - // [1] if(pow2::n#0==0) goto pow2::@return -- vbuaa_eq_0_then_la1 - cmp #0 - beq __breturn_from_pow2 - jmp __b1 - // pow2::@1 - __b1: - // [2] pow2::$1 = pow2::n#0 - 1 -- vbuaa=vbuaa_minus_1 - sec - sbc #1 - // [3] stackpush(char) = pow2::$1 -- _stackpushbyte_=vbuaa - pha - // [4] callexecute pow2 -- call_vprc1 - jsr pow2 - // [5] pow2::c#0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // [6] pow2::return#1 = pow2::c#0 + pow2::c#0 -- vbuaa=vbuaa_plus_vbuaa - asl - // [7] phi from pow2::@1 to pow2::@return [phi:pow2::@1->pow2::@return] - __breturn_from___b1: - // [7] phi pow2::return#2 = pow2::return#1 [phi:pow2::@1->pow2::@return#0] -- register_copy - jmp __breturn - // [7] phi from pow2 to pow2::@return [phi:pow2->pow2::@return] - __breturn_from_pow2: - // [7] phi pow2::return#2 = 1 [phi:pow2->pow2::@return#0] -- vbuaa=vbuc1 - lda #1 - jmp __breturn - // pow2::@return - __breturn: - // [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - // [9] return - rts -} - // main -main: { - // [10] stackpush(char) = 6 -- _stackpushbyte_=vbuc1 - lda #6 - pha - // [11] callexecute pow2 -- call_vprc1 - jsr pow2 - // [12] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // [13] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - jmp __breturn - // main::@return - __breturn: - // [14] return - rts -} - // File Data - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction __b1: -Removing instruction __breturn_from___b1: -Removing instruction __breturn: -Succesful ASM optimization Pass5UnusedLabelElimination -Relabelling long label __breturn_from_pow2 to __b1 -Succesful ASM optimization Pass5RelabelLongLabels - -FINAL SYMBOL TABLE -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void main() -char main::$0 // reg byte a 4.0 -__stackcall char pow2(char n) -char pow2::$1 // reg byte a 22.0 -__constant char pow2::OFFSET_STACK_N = 0 -__constant char pow2::OFFSET_STACK_RETURN_0 = 0 -char pow2::c -char pow2::c#0 // reg byte a 33.0 -char pow2::n -char pow2::n#0 // reg byte a 16.5 -char pow2::return -char pow2::return#1 // reg byte a 22.0 -char pow2::return#2 // reg byte a 22.0 - -reg byte a [ pow2::return#2 pow2::return#1 ] -reg byte a [ pow2::n#0 ] -reg byte a [ pow2::$1 ] -reg byte a [ pow2::c#0 ] -reg byte a [ main::$0 ] - - -FINAL ASSEMBLER -Score: 72 - - // File Comments -// Test a procedure with calling convention stack -// Recursion that works (no local variables) - // Upstart - .segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] - - // Global Constants & labels - .const STACK_BASE = $103 - .label SCREEN = $400 -.segment stage - // pow2 -// __register(A) char pow2(__register(A) char n) -pow2: { - .const OFFSET_STACK_N = 0 - .const OFFSET_STACK_RETURN_0 = 0 - // [0] pow2::n#0 = stackidx(char,pow2::OFFSET_STACK_N) -- vbuaa=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_N,x - // if (n == 0) - // [1] if(pow2::n#0==0) goto pow2::@return -- vbuaa_eq_0_then_la1 - cmp #0 - beq __b1 - // pow2::@1 - // n-1 - // [2] pow2::$1 = pow2::n#0 - 1 -- vbuaa=vbuaa_minus_1 - sec - sbc #1 - // char c = pow2(n-1) - // [3] stackpush(char) = pow2::$1 -- _stackpushbyte_=vbuaa - pha - // [4] callexecute pow2 -- call_vprc1 - jsr pow2 - // [5] pow2::c#0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // return c+c; - // [6] pow2::return#1 = pow2::c#0 + pow2::c#0 -- vbuaa=vbuaa_plus_vbuaa - asl - // [7] phi from pow2::@1 to pow2::@return [phi:pow2::@1->pow2::@return] - // [7] phi pow2::return#2 = pow2::return#1 [phi:pow2::@1->pow2::@return#0] -- register_copy - jmp __breturn - // [7] phi from pow2 to pow2::@return [phi:pow2->pow2::@return] - __b1: - // [7] phi pow2::return#2 = 1 [phi:pow2->pow2::@return#0] -- vbuaa=vbuc1 - lda #1 - // pow2::@return - __breturn: - // } - // [8] stackidx(char,pow2::OFFSET_STACK_RETURN_0) = pow2::return#2 -- _stackidxbyte_vbuc1=vbuaa - tsx - sta STACK_BASE+OFFSET_STACK_RETURN_0,x - // [9] return - rts -} - // main -main: { - // pow2(6) - // [10] stackpush(char) = 6 -- _stackpushbyte_=vbuc1 - lda #6 - pha - // [11] callexecute pow2 -- call_vprc1 - jsr pow2 - // [12] main::$0 = stackpull(char) -- vbuaa=_stackpullbyte_ - pla - // *SCREEN = pow2(6) - // [13] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa - sta SCREEN - // main::@return - // } - // [14] return - rts -} - // File Data - diff --git a/src/test/ref/procedure-callingconvention-stack-bank-5.sym b/src/test/ref/procedure-callingconvention-stack-bank-5.sym deleted file mode 100644 index b914904e4..000000000 --- a/src/test/ref/procedure-callingconvention-stack-bank-5.sym +++ /dev/null @@ -1,21 +0,0 @@ -__constant char * const SCREEN = (char *) 1024 -__constant unsigned int STACK_BASE = $103 -void main() -char main::$0 // reg byte a 4.0 -__stackcall char pow2(char n) -char pow2::$1 // reg byte a 22.0 -__constant char pow2::OFFSET_STACK_N = 0 -__constant char pow2::OFFSET_STACK_RETURN_0 = 0 -char pow2::c -char pow2::c#0 // reg byte a 33.0 -char pow2::n -char pow2::n#0 // reg byte a 16.5 -char pow2::return -char pow2::return#1 // reg byte a 22.0 -char pow2::return#2 // reg byte a 22.0 - -reg byte a [ pow2::return#2 pow2::return#1 ] -reg byte a [ pow2::n#0 ] -reg byte a [ pow2::$1 ] -reg byte a [ pow2::c#0 ] -reg byte a [ main::$0 ] From f2bf3484ad84a75f644a47560f1d2a0dd42c1acd Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Tue, 11 Apr 2023 08:35:53 +0200 Subject: [PATCH 37/66] - testing and regeneration of fragment references - implementation of near, close, far through AsmFragmentSignature - fragment consolidation (removal of prepare, execute, finalize) - stackcall banked throws error + test cases - overall test cases for phi - implementation of fragments --- .../AsmFragmentInstanceSpecBuilder.java | 43 +-- .../signature/AsmFragmentSignature.java | 20 +- .../java/dk/camelot64/kickc/model/Bank.java | 226 +++--------- .../Pass0GenerateStatementSequence.java | 4 +- .../kickc/passes/Pass4CodeGeneration.java | 95 +++-- .../kickc/test/TestProgramsFast.java | 59 ++-- src/test/kc/call-banked-phi-case-1-near-0.c | 5 +- src/test/kc/call-banked-phi-case-1-near-1.c | 10 +- src/test/kc/call-banked-phi-case-2-close-0.c | 11 +- src/test/kc/call-banked-phi-case-2-close-1.c | 13 +- src/test/kc/call-banked-phi-case-3-near-0.c | 20 +- src/test/kc/call-banked-phi-case-3-near-1.c | 22 +- src/test/kc/call-banked-phi-case-4-near-0.c | 4 +- src/test/kc/call-banked-phi-case-4-near-1.c | 14 +- src/test/kc/call-banked-phi-case-5-far-0.c | 9 +- src/test/kc/call-banked-phi-case-5-far-1.c | 14 +- src/test/kc/call-banked-phi-case-6-close-0.c | 6 +- src/test/kc/call-banked-phi-case-6-close-1.c | 2 +- src/test/kc/call-banked-phi.ld | 12 +- .../kc/call-banked-stack-case-2-close-0.c | 6 +- src/test/kc/call-banked-stack-case-5-far-0.c | 4 +- .../kc/examples/cx16/banking/cx16-banking-0.h | 20 -- .../kc/examples/cx16/banking/cx16-banking.c | 153 ++++---- .../kc/examples/cx16/banking/cx16-banking.ld | 14 + src/test/ref/address-0.log | 4 +- src/test/ref/address-2.log | 4 +- src/test/ref/address-5.log | 16 +- src/test/ref/address-6.log | 16 +- src/test/ref/address-of-1.log | 12 +- src/test/ref/address-of-2.log | 12 +- src/test/ref/address-of-3.log | 12 +- src/test/ref/array-16bit-lookup.log | 4 +- src/test/ref/asm-mnemonic-names.log | 4 +- src/test/ref/assignment-compound.log | 44 +-- src/test/ref/atarixl-md5b.log | 16 +- src/test/ref/bitmap-circle-2.log | 44 +-- src/test/ref/bitmap-circle.log | 44 +-- src/test/ref/bitmap-line-anim-1.log | 56 +-- src/test/ref/bitmap-line-anim-2.log | 52 +-- src/test/ref/bitmap-plot-0.log | 28 +- src/test/ref/bitmap-plot-3.log | 52 +-- src/test/ref/bitmap-plotter.log | 16 +- src/test/ref/bool-const.log | 12 +- src/test/ref/bool-function.log | 4 +- src/test/ref/bool-ifs.log | 16 +- src/test/ref/bool-vars.log | 16 +- src/test/ref/c-types.log | 196 +++++------ src/test/ref/c64dtv-8bppcharstretch.log | 20 +- src/test/ref/c64dtv-8bppchunkystretch.log | 16 +- .../ref/call-banked-phi-case-1-near-0.log | 4 +- .../ref/call-banked-phi-case-1-near-1.log | 8 +- .../ref/call-banked-phi-case-2-close-0.log | 4 +- .../ref/call-banked-phi-case-2-close-1.log | 4 +- .../ref/call-banked-phi-case-3-near-0.log | 8 +- .../ref/call-banked-phi-case-3-near-1.log | 8 +- .../ref/call-banked-phi-case-4-near-0.log | 8 +- .../ref/call-banked-phi-case-4-near-1.log | 8 +- src/test/ref/call-banked-phi-case-5-far-0.log | 8 +- src/test/ref/call-banked-phi-case-5-far-1.log | 8 +- .../ref/call-banked-phi-case-6-close-0.log | 8 +- .../ref/call-banked-phi-case-6-close-1.log | 8 +- src/test/ref/call-parameter-autocast.log | 12 +- src/test/ref/callconstparam.log | 8 +- src/test/ref/casting-negative.log | 72 ++-- src/test/ref/casting.log | 4 +- src/test/ref/cbm-keyboard.log | 92 ++--- src/test/ref/cia-timer-cyclecount.log | 36 +- src/test/ref/cia-timer-simple.log | 36 +- src/test/ref/clobber-a-problem.log | 4 +- src/test/ref/complex/includes/includes-1.log | 4 +- src/test/ref/complex/includes/includes-2.log | 4 +- src/test/ref/complex/xmega65/xmega65.log | 8 +- src/test/ref/const-bool-return-problem.log | 8 +- src/test/ref/const-early-identification.log | 8 +- src/test/ref/const-identification.log | 8 +- src/test/ref/const-param.log | 12 +- src/test/ref/const-volatile-problem.log | 4 +- src/test/ref/constants.log | 92 ++--- src/test/ref/constref-not-literal-problem.log | 4 +- src/test/ref/cordic-atan2-16.log | 8 +- src/test/ref/cordic-atan2-clear.log | 12 +- src/test/ref/cordic-atan2.log | 8 +- src/test/ref/cstyle-decl-function.log | 8 +- src/test/ref/declared-memory-var-6.log | 40 +-- src/test/ref/declared-memory-var-7.log | 4 +- src/test/ref/declared-memory-var-8.log | 4 +- src/test/ref/declared-ssa-var-0.log | 4 +- src/test/ref/default-font.log | 4 +- src/test/ref/deref-to-derefidx-2.log | 8 +- src/test/ref/deref-to-derefidx.log | 8 +- src/test/ref/ducks-array.log | 20 +- src/test/ref/ducks-loop211.log | 4 +- src/test/ref/ducks-total.log | 332 +++++++++--------- src/test/ref/emptyblock-error.log | 8 +- src/test/ref/enum-5.log | 4 +- src/test/ref/euclid-3.log | 68 ++-- src/test/ref/euclid-problem-2.log | 16 +- .../examples/atari2600/atari2600-sprites.log | 4 +- src/test/ref/examples/c64/3d/perspective.log | 96 ++--- .../c64/bresenham/bitmap-bresenham.log | 60 ++-- .../c64/crunching/test-byteboozer.log | 4 +- .../c64/fastmultiply/fastmultiply8.log | 48 +-- src/test/ref/examples/c64/fire/fire.log | 28 +- .../ref/examples/c64/font-2x2/font-2x2.log | 20 +- .../examples/c64/kernalload/kernalload.log | 24 +- .../ref/examples/c64/krillload/krillload.log | 8 +- src/test/ref/examples/c64/linking/linking.log | 4 +- .../c64/multiplexer/simple-multiplexer.log | 24 +- .../examples/c64/nmisamples/nmisamples.log | 4 +- .../examples/c64/rasterbars/raster-bars.log | 4 +- src/test/ref/examples/c64/scroll/scroll.log | 4 +- .../ref/examples/c64/scrollbig/scrollbig.log | 20 +- .../ref/examples/c64/showlogo/showlogo.log | 8 +- src/test/ref/examples/c64/zpcode/zpcode.log | 8 +- .../ref/examples/cx16/cx16-rasterbars.log | 8 +- .../ref/examples/helloworld/helloworld.log | 44 +-- .../mega65/32bit-addressing-mega65.log | 4 +- src/test/ref/examples/mega65/banked-music.log | 28 +- .../ref/examples/mega65/camelot-1536dots.log | 44 +-- src/test/ref/examples/mega65/dma-test.log | 4 +- src/test/ref/examples/mega65/dma-test2.log | 8 +- src/test/ref/examples/mega65/dma-test3.log | 8 +- src/test/ref/examples/mega65/dma-test4.log | 8 +- src/test/ref/examples/mega65/dma-test5.log | 8 +- src/test/ref/examples/mega65/dma-test6.log | 8 +- src/test/ref/examples/mega65/dypp65.log | 16 +- .../ref/examples/mega65/helloworld-mega65.log | 48 +-- .../ref/examples/mega65/memorymap-test.log | 24 +- src/test/ref/examples/mega65/raster65.log | 8 +- src/test/ref/examples/nes/nes-dxycp.log | 20 +- .../ref/examples/plus4/plus4-randomwalk.log | 16 +- src/test/ref/examples/rom/rom.log | 16 +- src/test/ref/flipper-rex2.log | 12 +- src/test/ref/font-hex-show.log | 4 +- src/test/ref/fragment-synth.log | 8 +- src/test/ref/fragment-variations.log | 8 +- src/test/ref/function-pointer-advanced-1.log | 72 ++-- .../ref/function-pointer-noarg-call-10.log | 20 +- .../ref/function-pointer-noarg-call-13.log | 8 +- .../ref/function-pointer-noarg-call-14.log | 56 +-- .../ref/function-pointer-noarg-call-3.log | 4 +- .../ref/function-pointer-noarg-call-7.log | 8 +- .../ref/function-pointer-noarg-call-8.log | 12 +- .../ref/function-pointer-noarg-call-9.log | 4 +- .../ref/function-pointer-param-workaround.log | 4 +- src/test/ref/function-pointer-problem-1.log | 4 +- src/test/ref/function-pointer-return-2.log | 8 +- src/test/ref/function-pointer-return-3.log | 4 +- src/test/ref/global-label-problem.log | 20 +- src/test/ref/global-pc-multiple.log | 4 +- src/test/ref/helloworld2.log | 8 +- src/test/ref/hex2dec-ptrptr.log | 40 +-- src/test/ref/hex2dec.log | 44 +-- src/test/ref/incrementinarray.log | 20 +- src/test/ref/init-value-npe.log | 4 +- src/test/ref/init-volatiles.log | 4 +- src/test/ref/inline-asm-ref-scoped.log | 10 +- src/test/ref/inline-asm-uses-1.log | 4 +- src/test/ref/inline-kickasm-uses-problem.log | 4 +- src/test/ref/inline-pointer-1.log | 8 +- src/test/ref/inline-string-2.log | 12 +- src/test/ref/inline-string-4.log | 4 +- src/test/ref/inline-string.log | 12 +- src/test/ref/int-conversion.log | 176 +++++----- src/test/ref/int-literals.log | 68 ++-- src/test/ref/intermediates-simple.log | 4 +- src/test/ref/intermediates-struct.log | 8 +- .../ref/interrupt-volatile-reuse-problem1.log | 4 +- .../ref/interrupt-volatile-reuse-problem2.log | 4 +- src/test/ref/irq-hardware-clobber-jsr.log | 4 +- src/test/ref/irq-idx-problem.log | 4 +- .../ref/irq-local-var-overlap-problem.log | 8 +- src/test/ref/keyboard-glitch.log | 28 +- src/test/ref/library-constructor-1.log | 12 +- src/test/ref/library-constructor-3.log | 16 +- src/test/ref/linegen.log | 136 +++---- src/test/ref/literal-word-pointer-0.log | 4 +- src/test/ref/literal-word-pointer-1.log | 4 +- src/test/ref/liverange-1.log | 8 +- src/test/ref/liverange-10.log | 32 +- src/test/ref/liverange-2.log | 4 +- src/test/ref/liverange-3.log | 4 +- src/test/ref/liverange-4.log | 8 +- src/test/ref/liverange-5.log | 8 +- src/test/ref/liverange-6.log | 4 +- src/test/ref/liverange-7.log | 8 +- src/test/ref/liverange-8.log | 12 +- src/test/ref/liverange-9.log | 20 +- src/test/ref/liverange-call-problem.log | 16 +- src/test/ref/liverange-problem-0.log | 12 +- src/test/ref/liverange.log | 8 +- src/test/ref/longbranch-interrupt-problem.log | 4 +- src/test/ref/longjump2.log | 8 +- src/test/ref/loop-memset-min.log | 4 +- src/test/ref/loop-problem.log | 12 +- src/test/ref/loop-problem2.log | 8 +- src/test/ref/loophead-problem-2.log | 4 +- src/test/ref/loophead-problem-3.log | 4 +- src/test/ref/loophead-problem.log | 4 +- src/test/ref/loopnest.log | 4 +- src/test/ref/loopnest2.log | 8 +- src/test/ref/loopnest3.log | 8 +- src/test/ref/malloc-0.log | 8 +- src/test/ref/malloc-1.log | 8 +- src/test/ref/memcpy-0.log | 8 +- src/test/ref/memcpy-1.log | 8 +- src/test/ref/memory-heap.log | 8 +- .../ref/millfork-benchmarks/linkedlist-kc.log | 56 +-- .../ref/millfork-benchmarks/plasma-kc.log | 56 +-- .../ref/millfork-benchmarks/romsum-kc.log | 68 ++-- src/test/ref/millfork-benchmarks/sieve-kc.log | 80 ++--- src/test/ref/min-fmul-16.log | 36 +- src/test/ref/missing-band.log | 4 +- src/test/ref/modglobal.log | 8 +- src/test/ref/modglobalmin.log | 8 +- src/test/ref/mul8u-min.log | 4 +- .../simple-multiplexer-irq.log | 24 +- src/test/ref/multiply-16bit-const.log | 32 +- src/test/ref/nes-array.log | 8 +- src/test/ref/nomodify-3.log | 4 +- src/test/ref/nomodify-4.log | 8 +- src/test/ref/norom-charset.log | 4 +- src/test/ref/null-constant-1.log | 8 +- src/test/ref/number-conversion.log | 140 ++++---- src/test/ref/number-ternary-fail-2.log | 8 +- src/test/ref/number-type.log | 8 +- src/test/ref/overlap-allocation-2.log | 16 +- src/test/ref/overlap-allocation.log | 12 +- src/test/ref/plus-0.log | 8 +- src/test/ref/plus4-kbhit.log | 4 +- src/test/ref/plus4-keyboard-test.log | 4 +- src/test/ref/pointer-plus-0.log | 8 +- src/test/ref/pointer-pointer-2.log | 4 +- src/test/ref/pointer-pointer-3.log | 12 +- src/test/ref/pointer-swap.log | 20 +- src/test/ref/pointer-void-1.log | 12 +- src/test/ref/pointer-void-2.log | 12 +- src/test/ref/pointer-void-3.log | 8 +- src/test/ref/post-increment-problem-2.log | 4 +- src/test/ref/pragma-noparenthesis.log | 8 +- src/test/ref/primes-1000-2.log | 40 +-- src/test/ref/print-problem.log | 12 +- src/test/ref/printf-1.log | 88 ++--- src/test/ref/printf-10.log | 16 +- src/test/ref/printf-11.log | 12 +- src/test/ref/printf-12.log | 232 ++++++------ src/test/ref/printf-14.log | 64 ++-- src/test/ref/printf-15.log | 52 +-- src/test/ref/printf-17.log | 136 +++---- src/test/ref/printf-18.log | 84 ++--- src/test/ref/printf-19.log | 148 ++++---- src/test/ref/printmsg.log | 28 +- src/test/ref/problem-ma-var-overwrite.log | 8 +- src/test/ref/problem-negate-const.log | 4 +- .../ref/problem-struct-inline-parameter-1.log | 4 +- .../ref/problem-struct-inline-parameter.log | 4 +- .../procedure-callingconvention-stack-4.log | 4 +- .../procedure-callingconvention-stack-5.log | 4 +- src/test/ref/procedure-declare-10.log | 4 +- src/test/ref/procedure-declare-2.log | 8 +- src/test/ref/procedure-declare-3.log | 8 +- src/test/ref/procedure-declare-4.log | 8 +- src/test/ref/procedure-declare-5.log | 4 +- src/test/ref/processor-port-test.log | 188 +++++----- src/test/ref/ptrptr-optimize-1.log | 8 +- src/test/ref/ptrptr-optimize-2.log | 8 +- src/test/ref/ptrtest.log | 16 +- src/test/ref/register-0.log | 16 +- src/test/ref/reserve-zp-global-range.log | 4 +- src/test/ref/reserve-zp-global.log | 4 +- src/test/ref/reserve-zp-procedure-1.log | 4 +- src/test/ref/reserve-zp-procedure-2.log | 8 +- src/test/ref/reserve-zp-procedure-3.log | 4 +- src/test/ref/reserve-zp-procedure-4.log | 4 +- src/test/ref/robozzle64-label-problem.log | 8 +- src/test/ref/roll-sprite-msb.log | 4 +- src/test/ref/scan-desire-problem.log | 24 +- src/test/ref/scrollbig-clobber.log | 4 +- src/test/ref/semi-struct-1.log | 44 +-- src/test/ref/sepa-optimize-problem-1.log | 24 +- src/test/ref/sieve-min.log | 28 +- src/test/ref/signed-char-comparison.log | 4 +- src/test/ref/signed-indexed-subtract.log | 56 +-- src/test/ref/signed-words.log | 8 +- src/test/ref/sinus-basic.log | 72 ++-- src/test/ref/sinusgen16.log | 96 ++--- src/test/ref/sqr-delta.log | 4 +- src/test/ref/stack-relative-addressing.log | 4 +- src/test/ref/stars-2.log | 76 ++-- src/test/ref/static-init-code-0.log | 4 +- src/test/ref/strcmp-0.log | 244 ++++++------- src/test/ref/strcpy-0.log | 8 +- .../ref/string-const-consolidation-noroot.log | 12 +- .../ref/string-const-consolidation-root.log | 32 +- src/test/ref/string-const-consolidation.log | 12 +- src/test/ref/string-escapes-2.log | 4 +- src/test/ref/string-escapes-4.log | 4 +- src/test/ref/string-pointer-problem.log | 4 +- src/test/ref/strip.log | 16 +- src/test/ref/strncat-0.log | 12 +- src/test/ref/struct-11.log | 8 +- src/test/ref/struct-11b.log | 8 +- src/test/ref/struct-12.log | 8 +- src/test/ref/struct-22.log | 8 +- src/test/ref/struct-23.log | 8 +- src/test/ref/struct-3.log | 8 +- src/test/ref/struct-44.log | 76 ++-- src/test/ref/struct-5.log | 4 +- src/test/ref/struct-pointer-ints.log | 4 +- src/test/ref/struct-ptr-14.log | 4 +- src/test/ref/struct-ptr-16.log | 8 +- src/test/ref/struct-ptr-17.log | 8 +- src/test/ref/struct-ptr-18.log | 4 +- src/test/ref/struct-ptr-19.log | 8 +- src/test/ref/struct-ptr-22.log | 44 +-- src/test/ref/struct-ptr-23.log | 8 +- src/test/ref/struct-ptr-24.log | 4 +- src/test/ref/struct-ptr-26.log | 20 +- src/test/ref/struct-ptr-28.log | 8 +- src/test/ref/struct-ptr-29.log | 8 +- src/test/ref/struct-ptr-30.log | 4 +- src/test/ref/struct-ptr-31.log | 8 +- src/test/ref/struct-ptr-34.log | 8 +- src/test/ref/struct-unwinding-2.log | 16 +- src/test/ref/summin.log | 12 +- src/test/ref/ternary-3.log | 12 +- src/test/ref/test-comments-block.log | 4 +- src/test/ref/test-comments-global.log | 4 +- src/test/ref/test-comments-single.log | 4 +- src/test/ref/test-comparisons-sword.log | 64 ++-- src/test/ref/test-comparisons-word.log | 56 +-- .../ref/test-interrupt-volatile-write.log | 4 +- src/test/ref/test-interrupt-volatile.log | 4 +- src/test/ref/test-keyboard-space.log | 12 +- src/test/ref/test-keyboard.log | 20 +- src/test/ref/test-lowhigh.log | 88 ++--- src/test/ref/test-scroll-up.log | 12 +- src/test/ref/test-signed-word-minus-byte.log | 52 +-- src/test/ref/tod-1.log | 64 ++-- src/test/ref/toupper-1.log | 60 ++-- src/test/ref/travis1.log | 24 +- src/test/ref/typedef-2.log | 4 +- src/test/ref/typedef-4.log | 4 +- src/test/ref/typeid-plus-bytes.log | 16 +- src/test/ref/union-7.log | 8 +- src/test/ref/union-8.log | 8 +- src/test/ref/var-register-zp-3.log | 12 +- src/test/ref/var-register.log | 4 +- src/test/ref/varmodel-ma_mem-3.log | 8 +- src/test/ref/varmodel-mem-1.log | 8 +- src/test/ref/void-parameter.log | 12 +- src/test/ref/volatile-0.log | 4 +- src/test/ref/volatile-2.log | 4 +- src/test/ref/voronoi.log | 16 +- src/test/ref/weeip-bbslist.log | 84 ++--- src/test/ref/weeip-checksum.log | 12 +- src/test/ref/wfragment1.log | 4 +- src/test/ref/zeropage-sinus.log | 16 +- src/test/ref/zp-reserve-coalesce-problem.log | 8 +- src/test/ref/zpparammin.log | 8 +- ...rocedure-callingconvention-stack-far-3.asm | 145 -------- ...rocedure-callingconvention-stack-far-3.dbg | 153 -------- ...ocedure-callingconvention-stack-far-3.klog | 22 -- ...rocedure-callingconvention-stack-far-3.prg | Bin 91 -> 0 bytes ...rocedure-callingconvention-stack-far-3.sym | 20 -- ...procedure-callingconvention-stack-far-3.vs | 14 - 366 files changed, 4061 insertions(+), 4477 deletions(-) delete mode 100644 src/test/kc/examples/cx16/banking/cx16-banking-0.h create mode 100644 src/test/kc/examples/cx16/banking/cx16-banking.ld delete mode 100644 src/test/target/procedure-callingconvention-stack-far-3.asm delete mode 100644 src/test/target/procedure-callingconvention-stack-far-3.dbg delete mode 100644 src/test/target/procedure-callingconvention-stack-far-3.klog delete mode 100644 src/test/target/procedure-callingconvention-stack-far-3.prg delete mode 100644 src/test/target/procedure-callingconvention-stack-far-3.sym delete mode 100644 src/test/target/procedure-callingconvention-stack-far-3.vs diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java index 859f55804..8c493b3d6 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java @@ -42,58 +42,25 @@ final public class AsmFragmentInstanceSpecBuilder { } /** - * Create a fragment instance spec factory for a bank call prepare + * Create a fragment instance spec factory for a subroutine call * + * @param distance The string expressing the distance of the call: "near", "close", "far". + * @param callingConvention The string expressing the calling convention supported by the fragment. * @param bankArea The bank area where the procedure is to be called. * @param bank The bank where the procedure is to be called. * @param procedureName The full name of the procedure. * @param program The program * @return the fragment instance spec factory */ - public static AsmFragmentInstanceSpec bankCallPrepare(String bankArea, Long bank, String procedureName, Program program) { + public static AsmFragmentInstanceSpec callBanked(String distance, String callingConvention, String bankArea, Long bank, String procedureName, Program program) { AsmFragmentBindings bindings = new AsmFragmentBindings(program); - AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked(bankArea, bank, program.getTargetPlatform().getName(), AsmFragmentSignature.CallBanked.PrepareExecuteFinalize.Prepare); + AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked(distance, callingConvention, bankArea, bank); ScopeRef codeScope = program.getScope().getRef(); bindings.bind("c1", new ConstantInteger(bank)); bindings.bind("la1", new LabelRef(procedureName)); return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); } - /** - * Create a fragment instance spec factory for a bank call execute - * - * @param bankArea The bank area where the procedure is to be called. - * @param bank The bank where the procedure is to be called. - * @param procedureName The full name of the procedure. - * @param program The program - * @return the fragment instance spec factory - */ - public static AsmFragmentInstanceSpec bankCallExecute(String bankArea, Long bank, String procedureName, Program program) { - AsmFragmentBindings bindings = new AsmFragmentBindings(program); - AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked(bankArea, bank, program.getTargetPlatform().getName(), AsmFragmentSignature.CallBanked.PrepareExecuteFinalize.Execute); - ScopeRef codeScope = program.getScope().getRef(); - bindings.bind("c1", new ConstantInteger(bank)); - bindings.bind("la1", new LabelRef(procedureName)); - return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); - } - - /** - * Create a fragment instance spec factory for a bank call finalize - * - * @param bankArea The bank area where the procedure is to be called. - * @param bank The bank where the procedure is to be called. - * @param procedureName The full name of the procedure. - * @param program The program - * @return the fragment instance spec factory - */ - public static AsmFragmentInstanceSpec bankCallFinalize(String bankArea, Long bank, String procedureName, Program program) { - AsmFragmentBindings bindings = new AsmFragmentBindings(program); - AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked(bankArea, bank, program.getTargetPlatform().getName(), AsmFragmentSignature.CallBanked.PrepareExecuteFinalize.Finalize); - ScopeRef codeScope = program.getScope().getRef(); - bindings.bind("c1", new ConstantInteger(bank)); - bindings.bind("la1", new LabelRef(procedureName)); - return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); - } /** diff --git a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java index 456864880..d13f75cb9 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java +++ b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java @@ -75,29 +75,21 @@ public interface AsmFragmentSignature { */ class CallBanked implements AsmFragmentSignature { + final private String distance; + final private String callingConvention; final private String bankArea; final private Long bank; - final private String targetPlatform; - public enum PrepareExecuteFinalize { - Prepare, - Execute, - Finalize - } - - final private PrepareExecuteFinalize fragment; - - - public CallBanked(String bankArea, Long bank, String targetPlatform, PrepareExecuteFinalize fragment) { + public CallBanked(String distance, String callingConvention, String bankArea, Long bank) { + this.distance = distance; + this.callingConvention = callingConvention; this.bankArea = bankArea; this.bank = bank; - this.targetPlatform = targetPlatform; - this.fragment = fragment; } @Override public String getName() { - return "call_far" + "_" + targetPlatform.toLowerCase() + "_" + bankArea.toLowerCase() + "_" + fragment.name().toLowerCase(); + return "call_" + callingConvention.toLowerCase() + "_" + distance.toLowerCase() + ((bankArea.isEmpty()) ? "" : ("_" + bankArea.toLowerCase())); } } diff --git a/src/main/java/dk/camelot64/kickc/model/Bank.java b/src/main/java/dk/camelot64/kickc/model/Bank.java index 6f43b7c18..c51312740 100644 --- a/src/main/java/dk/camelot64/kickc/model/Bank.java +++ b/src/main/java/dk/camelot64/kickc/model/Bank.java @@ -23,35 +23,67 @@ package dk.camelot64.kickc.model; * The method and the platform are the key combinations that select the fragments * in kickc to generate the banked function call implementations used by the compiler. * - *

Your C-code can be augmented with 3 new directives, that define which function(s) will be declared as banked: + *


Your C-code can be augmented with 3 new directives, that define which function(s) will be declared as banked: * *

    - *
  • #pragma bank( method, number ) directive, defines for sequent functions - * the target bank number and the method for the banked function call implementations.
  • - *
  • A new #pragma nobank( dummy ) directive, resets the calculation of banking for sequent functions - * not to calculate any banking for these functions.
  • - *
  • A new __bank( method, number ) directive, defines for one function a - * target bank number and the method for the banked function call implementation.
  • + *
  • #pragma bank( area, number ) directive, defines for sequent functions + * the the area and the bank number.
  • + *
  • A new #pragma nobank( dummy ) directive, resets the calculation of banking + * for the sequent functions.
  • + *
  • __bank( area, number ) directive, defines for one function a + * target bank area and number.
  • + *
+ *

Examples of bank areas are different RAM and/or ROM areas at different + * zones in the linear memory addressing space, and may or may not overlap. + * Each banking area has its own configuration in the target computer platform and + * operate independently from each other.
+ * For example, the Commander X16 has 256 RAM bank between 0xA000 and 0xBFFF and + * 256 ROM banks from 0xC000 till 0xFFFF. Each RAM bank is configured through zero page $00 + * and each ROM bank is configured through zero page $01. + * The compiler configures for you these registers, depending on the configured banking area of the function, + * when a banked call is required.

+ * + *


There are different types of function calls that can be implemented, depending on: + *

    + *
  • the banked location of either or both the caller and/or the called function.
  • + *
  • the banking area of either or both the caller and the called function.
  • *
* - *

The compiler decides automatically the function call implementation, which can be either banked or not. - * And if the function call implementation is banked, it should use the specified bank number to implement - * the banked function call. - * The rules can be summarized as follows: + *

The types of (banked) function call implementations are: + *

    + *
  • near - jump to subroutine without any implementation of banking logic.
  • + *
  • close - jump to subroutine with inline banking implementation logic.
  • + *
  • far - jump to subroutine using a specific trampoline banking implementation logic.
  • + *
+ * Depending on the target platform of the system the far calls are likely the most complex + * and will consume the most CPU cycles. Therefore, careful design of the program flow and the + * placement of the functions in the banks need to be done, to avoid as much as possible these far calls. + * + *


The exact rules when near, close and far calls are implemented by the compiler, + * can be summarized in the following 6 cases: * *

    - *
  • If a function is declared not banked, and the function call location is not banked, - * the function call implementation will be not banked.
  • - *
  • If a function is declared banked, and the function call location is not banked, - * the function call implementation will be banked.
  • - *
  • If a function is declared not banked, and the function call location is banked, - * the function call implementation will be not banked.
  • - *
  • If a function is declared banked, and the function call location is banked, - * but the function call location is within the same bank, - * the function call implementation will be not banked.
  • - *
  • If a function is declared banked, and the function call location is banked, - * but the function call location is not within the same bank, - * the function call implementation will be banked.
  • + *
  • case #1 - If the caller function is not banked,
    + * and the called function is not banked,
    + * then a near call will be implemented.
  • + *
  • case #2 - If the caller function is not banked,
    + * and the called function is banked in any bank in any banking area
    ,
    + * then a close call will be implemented.
  • + *
  • case #3 - If the caller function is banked in any bank in any banking area,
    + * and the called function is not banked,
    + * then a near call will be implemented.
  • + *
  • case #4 - If the caller function is banked,
    + * and the called function is banked,
    + * and both functions are in the same bank and in the same bank area,
    + * then a near call will be implemented.
  • + *
  • case #5 - If the caller function is banked,
    + * and the called function is banked,
    + * and both functions are in a different bank but in the same bank area,
    + * then a far call will be implemented.
  • + *
  • case #6 - If the caller function is banked,
    + * and the called function is banked,
    + * and both functions are in any bank but in a different bank area,
    + * then the a close call will be implemented.
  • *
* *

The usage of #pragma code_seg( segment ) directive @@ -68,154 +100,8 @@ package dk.camelot64.kickc.model; * at the function calling locations! * * - *

- * The best way to describe the usage with a comprehensive example, documenting the different use cases - * how the compiler decides which functions are banked or not, - * and how the resulting banked function call code will be generated. - *

- * The example implements several functions in various forms to allocate the code in main memory - * using segment Code and within 3 banked memory locations, using segments Bank1, Bank2, Bank3. - * In order to ensure a good understanding of the example, the usage of these code segments in harmony with the - * banking directives must be described, which is absolutely necessary to master, - * in order to make banked function calls work. + * The KickC compiler contains several test cases and examples which demonstrate the usage of the banking system. * - *

- *

    - *
  • The #pragma directive code_seg( Code ) defines the sequent function code to be allocated - * within main (not banked) memory, defined within segment Code<> by the linker.
  • - *
  • The #pragma directive code_seg( Bank1 ) defines the sequent function code to be allocated - * within banked memory, defined within segment Bank1 by the linker.
  • - *
  • The #pragma directive code_seg( Bank2 ) defines the sequent function code to be allocated - * within banked memory, defined within segment Bank2 by the linker.
  • - *
  • The #pragma directive code_seg( Bank3 ) defines the sequent function code to be allocated - * within banked memory, defined within segment Bank3 by the linker.
  • - *
- * - * Note that the Code segment is the default location in KickC where the code is placed by the linker. - * - * Find below the code example, which is also the program procedure-callingconvention-phi-bank-5.c - * - *
- *
- * // The linker specification of the different segments.
- * #pragma link("procedure-callingconvention-phi-bank-5.ld")
- *
- * // The target computer platform is the Commander X16,
- * // which implements banking in ram between 0xA0000 and 0xBFFF,
- * // and in rom between 0xC000 and 0xFFFF.
- * #pragma target(cx16)
- *
- * char *const SCREEN = (char *)0x0400; // Just for test purposes.
- *
- * #pragma code_seg(Bank1) // The sequent functions will be addressed specified by segment bank1 in the linker.
- * #pragma bank(ram, 1)    // The sequent functions will be banked using call method ram in bank number 1.
- *
- * // Function declarations
- * char func_ram_bank1_a(char a, char b);
- * char __bank(ram, 1) func_ram_bank1_b(char a, char b);
- * char func_ram_bank1_c(char a, char b);
- * char func_ram_bank1_d(char a, char b);
- * char func_ram_bank1_e(char a, char b);
- * char func_ram_bank1_f(char a, char b);
- * char func_rom_bank2_a(char a, char b);
- * char __bank(rom, 2) func_rom_bank2_b(char a, char b);
- * char func_rom_bank2_c(char a, char b);
- * char func_rom_bank2_d(char a, char b);
- * char func_rom_bank2_e(char a, char b);
- * char func_rom_bank2_f(char a, char b);
- * char func_main_a(char a, char b);
- * char func_main_b(char a, char b);
- *
- * // Functional code
- *
- * char func_ram_bank1_a(char a, char b) {
- *     return a + b;
- * }
- *
- * char func_ram_bank1_c(char a, char b) {
- *     return func_ram_bank1_a(a, b);               // Non banked call in ram bank 1.
- * }
- *
- * char func_ram_bank1_d(char a, char b) {
- *     return func_rom_bank2_a(a, b);               // Banked call from ram bank 1 to rom bank 2.
- * }
- *
- * char func_ram_bank1_e(char a, char b) {
- *     return func_rom_bank2_b(a, b);               // Banked call from ram bank 1 to rom bank 2.
- * }
- *
- * char func_ram_bank1_f(char a, char b) {
- *     return func_main_a(a, b);                    // Non banked call from ram bank 1 to main memory.
- * }
- *
- *
- * #pragma code_seg(Bank2) // The sequent functions will be addressed specified by segment bank2 in the linker.
- * #pragma bank(rom, 2)    // The sequent functions will be banked using call method rom in bank number 2.
- *
- * char func_rom_bank2_a(char a, char b) {
- *     return a + b;
- * }
- *
- * char func_rom_bank2_c(char a, char b) {
- *     return func_ram_bank1_a(a, b);              // Banked call from rom bank 2 to ram bank 1.
- * }
- *
- * char func_rom_bank2_d(char a, char b) {
- *     return func_rom_bank2_a(a, b);              // Non banked call in rom bank 2.
- * }
- *
- * char func_rom_bank2_e(char a, char b) {
- *     return func_rom_bank2_b(a, b);              // Non Banked call in rom bank 2.
- * }
- *
- * char func_rom_bank2_f(char a, char b) {
- *     return func_main_a(a, b);                   // Non banked call from rom bank 2 to main memory.
- * }
- *
- *
- * #pragma nobank(dummy) // The sequent functions will consider no banking calculations anymore.
- *
- * // The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram.
- * char __bank(ram, 1) func_ram_bank1_b(char a, char b) {
- *     return a + b;
- * }
- *
- * // The __bank directive declares this function to be banked using call method rom in bank number 2 of banked rom.
- * char __bank(rom, 2) func_rom_bank2_b(char a, char b) {
- *     return a + b;
- * }
- *
- * #pragma code_seg(Code) // The sequent functions will be addressed in the default main memory location (segment Code).
- *
- * // Allocated in main memory.
- * char func_main_a(char a, char b) {
- *     return func_ram_bank1_e(a, b); // Banked call to ram in bank 1 from main memory.
- * }
- *
- * // Allocated in main memory.
- * char func_main_b(char a, char b) {
- *     return func_rom_bank2_e(a, b); // Banked call to rom in bank 2 from main memory.
- * }
- *
- * // Practically this means that the main() function is placed in main memory ...
- *
- * void main(void) {
- *     SCREEN[0] = func_ram_bank1_a('0', 7); // Banked call to ram in bank 1 from main memory.
- *     SCREEN[0] = func_ram_bank1_b('0', 7); // Banked call to ram in bank 1 from main memory.
- *     SCREEN[0] = func_ram_bank1_c('0', 7); // Banked call to ram in bank 1 from main memory.
- *     SCREEN[0] = func_ram_bank1_d('0', 7); // Banked call to ram in bank 1 from main memory.
- *     SCREEN[0] = func_ram_bank1_e('0', 7); // Banked call to ram in bank 1 from main memory.
- *     SCREEN[0] = func_ram_bank1_f('0', 7); // Banked call to ram in bank 1 from main memory.
- *     SCREEN[0] = func_rom_bank2_a('0', 7); // Banked call to rom in bank 2 from main memory.
- *     SCREEN[0] = func_rom_bank2_b('0', 7); // Banked call to rom in bank 2 from main memory.
- *     SCREEN[0] = func_rom_bank2_c('0', 7); // Banked call to rom in bank 2 from main memory.
- *     SCREEN[0] = func_rom_bank2_d('0', 7); // Banked call to rom in bank 2 from main memory.
- *     SCREEN[0] = func_rom_bank2_e('0', 7); // banked call to rom in bank 2 from main memory.
- *     SCREEN[0] = func_rom_bank2_f('0', 7); // banked call to rom in bank 2 from main memory.
- *     SCREEN[0] = func_main_a('0', 7);  // Near call in main memory from main memory.
- *     SCREEN[0] = func_main_b('0', 7);  // Near call in main memory from main memory.
- * }
- * 
*/ public class Bank { diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 792c6849f..5d4965219 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -590,7 +590,9 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor +// #include #include #include -#include // The target computer platform is the Commander X16, // which implements banking in ram between 0xA0000 and 0xBFFF, // and in ram between 0xC000 and 0xFFFF. #pragma target(cx16) - -#pragma code_seg(Bank1) // The sequent functions will be addressed specified by segment bank1 in the linker. -#pragma bank(ram, 1) // The sequent functions will be banked using call method ram in bank number 1. - - // Functional code +__address(0x00) char RAM_Bank; + +#pragma code_seg(Bank1) // The sequent functions will be addressed specified by segment bank1 in the linker. +#pragma bank(cx16_ram, 1) // The sequent functions will be banked using call method ram in bank number 1. + char add_a(char a) { - printf("add_a(%02x:%04p), ",bank_get_bram(), (void*)&add_a); + printf("add_a(%02x), ", RAM_Bank); return a+1; } char add_c(char a) { - printf("add_c(%02x:%04p), ",bank_get_bram(),(void*)&add_c); + printf("add_c(%02x), ", RAM_Bank); return add_a(a)+1; // Non banked call in ram bank 1. } char add_d(char a) { - printf("add_d(%02x:%04p), ",bank_get_bram(),(void*)&add_d); + printf("add_d(%02x), ",RAM_Bank); return mul_a(a)+1; // Banked call fram ram bank 1 to ram bank 2. } char add_e(char a) { - printf("add_e(%02x:%04p), ",bank_get_bram(),(void*)&add_e); + printf("add_e(%02x), ",RAM_Bank); return mul_b(a)+1; // Banked call fram ram bank 1 to ram bank 2. } char add_f(char a) { - printf("add_f(%02x:%04p), ",bank_get_bram(),(void*)&add_f); + printf("add_f(%02x), ",RAM_Bank); return add_m(a)+1; // Non banked call fram ram bank 1 to main memory. } #pragma code_seg(Bank2) // The sequent functions will be addressed specified by segment bank2 in the linker. -#pragma bank(ram, 2) // The sequent functions will be banked using call method ram in bank number 2. +#pragma bank(cx16_ram, 2) // The sequent functions will be banked using call method ram in bank number 2. char mul_a(char m) { - printf("mul_a(%02x:%04p), ",bank_get_bram(),(void*)&mul_a); + printf("mul_a(%02x), ",RAM_Bank); return m * 2; } char mul_c(char m) { - printf("mul_c(%02x:%04p), ",bank_get_bram(),(void*)&mul_c); + printf("mul_c(%02x), ",RAM_Bank); return add_a(m)*2; // Banked call fram ram bank 2 to ram bank 1. } char mul_d(char m) { - printf("mul_d(%02x:%04p), ",bank_get_bram(),(void*)&mul_d); + printf("mul_d(%02x), ",RAM_Bank); return mul_a(m)*2; // Non banked call in ram bank 2. } char mul_e(char a) { - printf("mul_e(%02x:%04p), ",bank_get_bram(),(void*)&mul_e); + printf("mul_e(%02x), ",RAM_Bank); return mul_b(a)*2; // Non Banked call in ram bank 2. } char mul_f(char m) { - printf("mul_f(%02x:%04p), ",bank_get_bram(),(void*)&mul_f); + printf("mul_f(%02x), ",RAM_Bank); return add_m(m)*2; // Non banked call fram ram bank 2 to main memory. } -#pragma code_seg(Code) // The sequent functions will be addressed in the default main memory location (segment Code). #pragma nobank(dummy) // The sequent functions will consider no banking calculations anymore. +#pragma code_seg(Bank1) // The sequent functions will be addressed specified by segment bank1 in the linker. // The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram. -char __bank(ram, 1) add_b(char a) { - printf("add_b(%02x:%04p), ",bank_get_bram(),(void*)&add_b); +char __bank(cx16_ram, 1) add_b(char a) { + printf("add_b(%02x), ",RAM_Bank); return a+1; } +#pragma code_seg(Bank2) // The sequent functions will be addressed specified by segment bank1 in the linker. // The __bank directive declares this function to be banked using call method ram in bank number 2 of banked ram. -char __bank(ram, 2) mul_b(char m) { - printf("mul_b(%02x:%04p), ",bank_get_bram(),(void*)&mul_b); +char __bank(cx16_ram, 2) mul_b(char m) { + printf("mul_b(%02x), ",RAM_Bank); return m*2; } +#pragma code_seg(Code) // The sequent functions will be addressed in the default main memory location (segment Code). + // Allocated in main memory. char add_m(char a) { - printf("add_m(%02x:%04p), ",bank_get_bram(),(void*)&add_m); + printf("add_m(%02x), ",RAM_Bank); return add_e(a)+1; // Banked call to ram in bank 1 fram main memory. } // Allocated in main memory. char mul_m(char m) { - printf("mul_m(%02x:%04p), ",bank_get_bram(),(void*)&mul_m); + printf("mul_m(%02x), ",RAM_Bank); return mul_e(m)*2; // Banked call to ram in bank 2 fram main memory. } @@ -116,50 +118,73 @@ char mul_m(char m) { // Practically this means that the main() function is placed in main memory ... void load_bank(char bank, char *file) { - bank_set_bram(bank); - cbm_k_setnam(file); - cbm_k_setlfs(1,8,2); - cbm_k_load((char*)0xA000, 0); - cbm_k_close(1); + RAM_Bank = bank; + + //cbm_k_setnam(file); + char file_len = strlen(file); + asm { + lda file_len + ldx file + jsr $FFBD + } + + //cbm_k_setlfs(1,8,2); + asm { + lda #1 + ldx #8 + ldy #2 + jsr $FFBA + } + + //cbm_k_load((char*)0xA000, 0); + asm { + lda #0 + ldx #<$A000 + ldy #>$A000 + jsr $FFD5 + } + + //cbm_k_close(1); + asm { + lda #1 + jsr $FFC3 + } } void main(void) { - clrscr(); - cx16_k_screen_set_charset(1,0); - load_bank(1, "BANK1.BIN"); load_bank(2, "BANK2.BIN"); - bank_set_bram(0); + RAM_Bank = 0; asm{.byte $db} - __export char result = add_a(1); - printf("result = %u\n", result); // Banked call to ram in bank 1 fram main memory. - // asm{.byte $db} - // printf("result = %u\n", add_b(1)); // Banked call to ram in bank 1 fram main memory. - // asm{.byte $db} - // printf("result = %u\n", add_c(1)); // Banked call to ram in bank 1 fram main memory. - // asm{.byte $db} - // printf("result = %u\n", add_d(1)); // Banked call to ram in bank 1 fram main memory. - // asm{.byte $db} - // printf("result = %u\n", add_e(1)); // Banked call to ram in bank 1 fram main memory. - // asm{.byte $db} - // printf("result = %u\n", add_f(1)); // Banked call to ram in bank 1 fram main memory. - // asm{.byte $db} - // printf("result = %u\n", mul_a(1)); // Banked call to ram in bank 2 fram main memory. - // asm{.byte $db} - // printf("result = %u\n", mul_b(1)); // Banked call to ram in bank 2 fram main memory. - // asm{.byte $db} - // printf("result = %u\n", mul_c(1)); // Banked call to ram in bank 2 fram main memory. - // asm{.byte $db} - // printf("result = %u\n", mul_d(1)); // Banked call to ram in bank 2 fram main memory. - // asm{.byte $db} - // printf("result = %u\n", mul_e(1)); // banked call to ram in bank 2 fram main memory. - // asm{.byte $db} - // printf("result = %u\n", mul_f(1)); // banked call to ram in bank 2 fram main memory. - // asm{.byte $db} - // printf("result = %u\n", add_m(1)); // Near call in main memory fram main memory. - // asm{.byte $db} - // printf("result = %u\n", mul_m(1)); // Near call in main memory fram main memory. - } + printf("result = %u\n", add_a(1)); // Banked call to ram in bank 1 fram main memory. + asm{.byte $db} + printf("result = %u\n", add_b(1)); // Banked call to ram in bank 1 fram main memory. + asm{.byte $db} + printf("result = %u\n", add_c(1)); // Banked call to ram in bank 1 fram main memory. + asm{.byte $db} + printf("result = %u\n", add_d(1)); // Banked call to ram in bank 1 fram main memory. + asm{.byte $db} + printf("result = %u\n", add_e(1)); // Banked call to ram in bank 1 fram main memory. + asm{.byte $db} + printf("result = %u\n", add_f(1)); // Banked call to ram in bank 1 fram main memory. + asm{.byte $db} + printf("result = %u\n", mul_a(1)); // Banked call to ram in bank 2 fram main memory. + asm{.byte $db} + printf("result = %u\n", mul_b(1)); // Banked call to ram in bank 2 fram main memory. + asm{.byte $db} + printf("result = %u\n", mul_c(1)); // Banked call to ram in bank 2 fram main memory. + asm{.byte $db} + printf("result = %u\n", mul_d(1)); // Banked call to ram in bank 2 fram main memory. + asm{.byte $db} + printf("result = %u\n", mul_e(1)); // banked call to ram in bank 2 fram main memory. + asm{.byte $db} + printf("result = %u\n", mul_f(1)); // banked call to ram in bank 2 fram main memory. + asm{.byte $db} + printf("result = %u\n", add_m(1)); // Near call in main memory fram main memory. + asm{.byte $db} + printf("result = %u\n", mul_m(1)); // Near call in main memory fram main memory. +} diff --git a/src/test/kc/examples/cx16/banking/cx16-banking.ld b/src/test/kc/examples/cx16/banking/cx16-banking.ld new file mode 100644 index 000000000..e21277416 --- /dev/null +++ b/src/test/kc/examples/cx16/banking/cx16-banking.ld @@ -0,0 +1,14 @@ +.file [name="%O", type="prg", segments="Program"] +.file [name="BANK1.BIN", type="bin", segments="Bank1"] +.file [name="BANK2.BIN", type="bin", segments="Bank2"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=%P] +.segmentdef Data [startAfter="Code"] +.segmentdef Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segment Basic +:BasicUpstart(%E) +.segment Code +.segment Data + diff --git a/src/test/ref/address-0.log b/src/test/ref/address-0.log index 46f28583e..d0c3f50bd 100644 --- a/src/test/ref/address-0.log +++ b/src/test/ref/address-0.log @@ -152,7 +152,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -241,7 +241,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/address-2.log b/src/test/ref/address-2.log index 635b2d637..850a4e045 100644 --- a/src/test/ref/address-2.log +++ b/src/test/ref/address-2.log @@ -152,7 +152,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -241,7 +241,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/address-5.log b/src/test/ref/address-5.log index ec12d868c..89039d32b 100644 --- a/src/test/ref/address-5.log +++ b/src/test/ref/address-5.log @@ -181,7 +181,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -194,7 +194,7 @@ main: { // [5] print::ch = 'c' -- vbuz1=vbuc1 lda #'c' sta.z print.ch - // [6] call print + // [6] call print -- call_phi_near jsr print jmp __b1 // main::@1 @@ -202,7 +202,7 @@ main: { // [7] print::ch = 'm' -- vbuz1=vbuc1 lda #'m' sta.z print.ch - // [8] call print + // [8] call print -- call_phi_near jsr print jmp __b2 // main::@2 @@ -210,7 +210,7 @@ main: { // [9] print::ch = 'l' -- vbuz1=vbuc1 lda #'l' sta.z print.ch - // [10] call print + // [10] call print -- call_phi_near jsr print jmp __breturn // main::@return @@ -295,7 +295,7 @@ __start: { sta.z idx // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return @@ -307,21 +307,21 @@ main: { // [5] print::ch = 'c' -- vbuz1=vbuc1 lda #'c' sta.z print.ch - // [6] call print + // [6] call print -- call_phi_near jsr print // main::@1 // print('m') // [7] print::ch = 'm' -- vbuz1=vbuc1 lda #'m' sta.z print.ch - // [8] call print + // [8] call print -- call_phi_near jsr print // main::@2 // print('l') // [9] print::ch = 'l' -- vbuz1=vbuc1 lda #'l' sta.z print.ch - // [10] call print + // [10] call print -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/address-6.log b/src/test/ref/address-6.log index 40634ffb4..7b69f56e2 100644 --- a/src/test/ref/address-6.log +++ b/src/test/ref/address-6.log @@ -181,7 +181,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -194,7 +194,7 @@ main: { // [5] print::ch = 'c' -- vbuz1=vbuc1 lda #'c' sta.z print.ch - // [6] call print + // [6] call print -- call_phi_near jsr print jmp __b1 // main::@1 @@ -202,7 +202,7 @@ main: { // [7] print::ch = 'm' -- vbuz1=vbuc1 lda #'m' sta.z print.ch - // [8] call print + // [8] call print -- call_phi_near jsr print jmp __b2 // main::@2 @@ -210,7 +210,7 @@ main: { // [9] print::ch = 'l' -- vbuz1=vbuc1 lda #'l' sta.z print.ch - // [10] call print + // [10] call print -- call_phi_near jsr print jmp __breturn // main::@return @@ -295,7 +295,7 @@ __start: { sta idx // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return @@ -307,21 +307,21 @@ main: { // [5] print::ch = 'c' -- vbuz1=vbuc1 lda #'c' sta.z print.ch - // [6] call print + // [6] call print -- call_phi_near jsr print // main::@1 // print('m') // [7] print::ch = 'm' -- vbuz1=vbuc1 lda #'m' sta.z print.ch - // [8] call print + // [8] call print -- call_phi_near jsr print // main::@2 // print('l') // [9] print::ch = 'l' -- vbuz1=vbuc1 lda #'l' sta.z print.ch - // [10] call print + // [10] call print -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/address-of-1.log b/src/test/ref/address-of-1.log index 9ccbe545a..d3c427e55 100644 --- a/src/test/ref/address-of-1.log +++ b/src/test/ref/address-of-1.log @@ -259,7 +259,7 @@ main: { sta.z setByte.ptr lda #>b1 sta.z setByte.ptr+1 - // [12] phi setByte::b#3 = 'c' [phi:main->setByte#1] -- vbuxx=vbuc1 + // [12] phi setByte::b#3 = 'c' [phi:main->setByte#1] -- call_phi_near ldx #'c' jsr setByte // [4] phi from main to main::@1 [phi:main->main::@1] @@ -275,7 +275,7 @@ main: { sta.z setByte.ptr lda #>b2 sta.z setByte.ptr+1 - // [12] phi setByte::b#3 = 'm' [phi:main::@1->setByte#1] -- vbuxx=vbuc1 + // [12] phi setByte::b#3 = 'm' [phi:main::@1->setByte#1] -- call_phi_near ldx #'m' jsr setByte // [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -291,7 +291,7 @@ main: { sta.z setByte.ptr lda #>b3 sta.z setByte.ptr+1 - // [12] phi setByte::b#3 = 'l' [phi:main::@2->setByte#1] -- vbuxx=vbuc1 + // [12] phi setByte::b#3 = 'l' [phi:main::@2->setByte#1] -- call_phi_near ldx #'l' jsr setByte jmp __b3 @@ -410,7 +410,7 @@ main: { sta.z setByte.ptr lda #>b1 sta.z setByte.ptr+1 - // [12] phi setByte::b#3 = 'c' [phi:main->setByte#1] -- vbuxx=vbuc1 + // [12] phi setByte::b#3 = 'c' [phi:main->setByte#1] -- call_phi_near ldx #'c' jsr setByte // [4] phi from main to main::@1 [phi:main->main::@1] @@ -423,7 +423,7 @@ main: { sta.z setByte.ptr lda #>b2 sta.z setByte.ptr+1 - // [12] phi setByte::b#3 = 'm' [phi:main::@1->setByte#1] -- vbuxx=vbuc1 + // [12] phi setByte::b#3 = 'm' [phi:main::@1->setByte#1] -- call_phi_near ldx #'m' jsr setByte // [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -436,7 +436,7 @@ main: { sta.z setByte.ptr lda #>b3 sta.z setByte.ptr+1 - // [12] phi setByte::b#3 = 'l' [phi:main::@2->setByte#1] -- vbuxx=vbuc1 + // [12] phi setByte::b#3 = 'l' [phi:main::@2->setByte#1] -- call_phi_near ldx #'l' jsr setByte // main::@3 diff --git a/src/test/ref/address-of-2.log b/src/test/ref/address-of-2.log index badb057de..deb4adb98 100644 --- a/src/test/ref/address-of-2.log +++ b/src/test/ref/address-of-2.log @@ -367,7 +367,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -417,7 +417,7 @@ main: { // [15] *(main::SCREEN2+3) = *main::ptr -- _deref_pbuc1=_deref_pbuc2 lda.z ptr sta SCREEN2+3 - // [16] call setv + // [16] call setv -- call_phi_near // Set value directly in a call jsr setv jmp __b1 @@ -429,7 +429,7 @@ main: { // [18] *(main::SCREEN2+4) = *main::ptr -- _deref_pbuc1=_deref_pbuc2 lda.z ptr sta SCREEN2+4 - // [19] call setp + // [19] call setp -- call_phi_near // Set value through pointer in a call jsr setp jmp __b2 @@ -545,7 +545,7 @@ __start: { sta.z val // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return @@ -603,7 +603,7 @@ main: { lda.z ptr sta SCREEN2+3 // setv(4) - // [16] call setv + // [16] call setv -- call_phi_near // Set value directly in a call jsr setv // main::@1 @@ -616,7 +616,7 @@ main: { lda.z ptr sta SCREEN2+4 // setp(ptr, 5) - // [19] call setp + // [19] call setp -- call_phi_near // Set value through pointer in a call jsr setp // main::@2 diff --git a/src/test/ref/address-of-3.log b/src/test/ref/address-of-3.log index f06b24e72..5452e93f9 100644 --- a/src/test/ref/address-of-3.log +++ b/src/test/ref/address-of-3.log @@ -332,7 +332,7 @@ main: { sta.z print.p lda #>VALS sta.z print.p+1 - // [11] phi idx#13 = 0 [phi:main->print#1] -- vbuz1=vbuc1 + // [11] phi idx#13 = 0 [phi:main->print#1] -- call_phi_near lda #0 sta.z idx jsr print @@ -349,7 +349,7 @@ main: { sta.z print.p lda #>VALS+1*SIZEOF_INT sta.z print.p+1 - // [11] phi idx#13 = idx#14 [phi:main::@2->print#1] -- register_copy + // [11] phi idx#13 = idx#14 [phi:main::@2->print#1] -- call_phi_near jsr print // [4] phi from main::@2 to main::@1 [phi:main::@2->main::@1] __b1_from___b2: @@ -377,7 +377,7 @@ main: { // [11] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [11] phi print::p#3 = print::p#2 [phi:main::@1->print#0] -- register_copy - // [11] phi idx#13 = idx#14 [phi:main::@1->print#1] -- register_copy + // [11] phi idx#13 = idx#14 [phi:main::@1->print#1] -- call_phi_near jsr print jmp __b3 // main::@3 @@ -499,7 +499,7 @@ main: { sta.z print.p lda #>VALS sta.z print.p+1 - // [11] phi idx#13 = 0 [phi:main->print#1] -- vbuz1=vbuc1 + // [11] phi idx#13 = 0 [phi:main->print#1] -- call_phi_near lda #0 sta.z idx jsr print @@ -513,7 +513,7 @@ main: { sta.z print.p lda #>VALS+1*SIZEOF_INT sta.z print.p+1 - // [11] phi idx#13 = idx#14 [phi:main::@2->print#1] -- register_copy + // [11] phi idx#13 = idx#14 [phi:main::@2->print#1] -- call_phi_near jsr print // [4] phi from main::@2 to main::@1 [phi:main::@2->main::@1] // [4] phi main::i#2 = 2 [phi:main::@2->main::@1#0] -- vbuz1=vbuc1 @@ -538,7 +538,7 @@ main: { // [7] call print // [11] phi from main::@1 to print [phi:main::@1->print] // [11] phi print::p#3 = print::p#2 [phi:main::@1->print#0] -- register_copy - // [11] phi idx#13 = idx#14 [phi:main::@1->print#1] -- register_copy + // [11] phi idx#13 = idx#14 [phi:main::@1->print#1] -- call_phi_near jsr print // main::@3 // for(char i:2..3) diff --git a/src/test/ref/array-16bit-lookup.log b/src/test/ref/array-16bit-lookup.log index 4425fa5ea..9c1c39308 100644 --- a/src/test/ref/array-16bit-lookup.log +++ b/src/test/ref/array-16bit-lookup.log @@ -313,7 +313,7 @@ main: { sta.z getValue.index lda #0 sta.z getValue.index+1 - // [3] call getValue + // [3] call getValue -- call_phi_near jsr getValue // [4] getValue::return#0 = getValue::return#1 jmp __b2 @@ -451,7 +451,7 @@ main: { sta.z getValue.index lda #0 sta.z getValue.index+1 - // [3] call getValue + // [3] call getValue -- call_phi_near jsr getValue // [4] getValue::return#0 = getValue::return#1 // main::@2 diff --git a/src/test/ref/asm-mnemonic-names.log b/src/test/ref/asm-mnemonic-names.log index e2456e540..7c776fad2 100644 --- a/src/test/ref/asm-mnemonic-names.log +++ b/src/test/ref/asm-mnemonic-names.log @@ -135,7 +135,7 @@ main: { // [0] *lda = main::jmp -- _deref_pbuc1=vbuc2 lda #jmp sta lda - // [1] call bne + // [1] call bne -- call_phi_near jsr bne jmp __b1 // main::@1 @@ -215,7 +215,7 @@ main: { lda #jmp sta lda // bne(jmp) - // [1] call bne + // [1] call bne -- call_phi_near jsr bne // main::@1 // asm diff --git a/src/test/ref/assignment-compound.log b/src/test/ref/assignment-compound.log index fea93d4d2..9c2927c8f 100644 --- a/src/test/ref/assignment-compound.log +++ b/src/test/ref/assignment-compound.log @@ -726,7 +726,7 @@ main: { test_from_main: // [23] phi test::i#11 = 0 [phi:main->test#0] -- vbuxx=vbuc1 ldx #0 - // [23] phi test::a#11 = 3 [phi:main->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3 [phi:main->test#1] -- call_phi_near lda #3 sta.z test.a jsr test @@ -741,7 +741,7 @@ main: { test_from___b1: // [23] phi test::i#11 = 1 [phi:main::@1->test#0] -- vbuxx=vbuc1 ldx #1 - // [23] phi test::a#11 = 3+1 [phi:main::@1->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1 [phi:main::@1->test#1] -- call_phi_near lda #3+1 sta.z test.a jsr test @@ -756,7 +756,7 @@ main: { test_from___b2: // [23] phi test::i#11 = 2 [phi:main::@2->test#0] -- vbuxx=vbuc1 ldx #2 - // [23] phi test::a#11 = 3+1-1 [phi:main::@2->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1 [phi:main::@2->test#1] -- call_phi_near lda #3+1-1 sta.z test.a jsr test @@ -771,7 +771,7 @@ main: { test_from___b3: // [23] phi test::i#11 = 3 [phi:main::@3->test#0] -- vbuxx=vbuc1 ldx #3 - // [23] phi test::a#11 = 3+1-1*6 [phi:main::@3->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6 [phi:main::@3->test#1] -- call_phi_near lda #(3+1-1)*6 sta.z test.a jsr test @@ -786,7 +786,7 @@ main: { test_from___b4: // [23] phi test::i#11 = 4 [phi:main::@4->test#0] -- vbuxx=vbuc1 ldx #4 - // [23] phi test::a#11 = 3+1-1*6/2 [phi:main::@4->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2 [phi:main::@4->test#1] -- call_phi_near lda #(3+1-1)*6/2 sta.z test.a jsr test @@ -801,7 +801,7 @@ main: { test_from___b5: // [23] phi test::i#11 = 5 [phi:main::@5->test#0] -- vbuxx=vbuc1 ldx #5 - // [23] phi test::a#11 = 3+1-1*6/2&2-1 [phi:main::@5->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2&2-1 [phi:main::@5->test#1] -- call_phi_near lda #(3+1-1)*6/2&2-1 sta.z test.a jsr test @@ -816,7 +816,7 @@ main: { test_from___b6: // [23] phi test::i#11 = 6 [phi:main::@6->test#0] -- vbuxx=vbuc1 ldx #6 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2 [phi:main::@6->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2 [phi:main::@6->test#1] -- call_phi_near lda #((3+1-1)*6/2&2-1)<<2 sta.z test.a jsr test @@ -831,7 +831,7 @@ main: { test_from___b7: // [23] phi test::i#11 = 7 [phi:main::@7->test#0] -- vbuxx=vbuc1 ldx #7 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1 [phi:main::@7->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1 [phi:main::@7->test#1] -- call_phi_near lda #((3+1-1)*6/2&2-1)<<2>>1 sta.z test.a jsr test @@ -846,7 +846,7 @@ main: { test_from___b8: // [23] phi test::i#11 = 8 [phi:main::@8->test#0] -- vbuxx=vbuc1 ldx #8 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6 [phi:main::@8->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6 [phi:main::@8->test#1] -- call_phi_near lda #((3+1-1)*6/2&2-1)<<2>>1^6 sta.z test.a jsr test @@ -861,7 +861,7 @@ main: { test_from___b9: // [23] phi test::i#11 = 9 [phi:main::@9->test#0] -- vbuxx=vbuc1 ldx #9 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1 [phi:main::@9->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1 [phi:main::@9->test#1] -- call_phi_near lda #((3+1-1)*6/2&2-1)<<2>>1^6|1 sta.z test.a jsr test @@ -876,7 +876,7 @@ main: { test_from___b10: // [23] phi test::i#11 = $a [phi:main::@10->test#0] -- vbuxx=vbuc1 ldx #$a - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1&1 [phi:main::@10->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1&1 [phi:main::@10->test#1] -- call_phi_near lda #(((3+1-1)*6/2&2-1)<<2>>1^6|1)&1 sta.z test.a jsr test @@ -1027,7 +1027,7 @@ main: { // [23] phi from main to test [phi:main->test] // [23] phi test::i#11 = 0 [phi:main->test#0] -- vbuxx=vbuc1 ldx #0 - // [23] phi test::a#11 = 3 [phi:main->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3 [phi:main->test#1] -- call_phi_near lda #3 sta.z test.a jsr test @@ -1039,7 +1039,7 @@ main: { // [23] phi from main::@1 to test [phi:main::@1->test] // [23] phi test::i#11 = 1 [phi:main::@1->test#0] -- vbuxx=vbuc1 ldx #1 - // [23] phi test::a#11 = 3+1 [phi:main::@1->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1 [phi:main::@1->test#1] -- call_phi_near lda #3+1 sta.z test.a jsr test @@ -1051,7 +1051,7 @@ main: { // [23] phi from main::@2 to test [phi:main::@2->test] // [23] phi test::i#11 = 2 [phi:main::@2->test#0] -- vbuxx=vbuc1 ldx #2 - // [23] phi test::a#11 = 3+1-1 [phi:main::@2->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1 [phi:main::@2->test#1] -- call_phi_near lda #3+1-1 sta.z test.a jsr test @@ -1063,7 +1063,7 @@ main: { // [23] phi from main::@3 to test [phi:main::@3->test] // [23] phi test::i#11 = 3 [phi:main::@3->test#0] -- vbuxx=vbuc1 ldx #3 - // [23] phi test::a#11 = 3+1-1*6 [phi:main::@3->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6 [phi:main::@3->test#1] -- call_phi_near lda #(3+1-1)*6 sta.z test.a jsr test @@ -1075,7 +1075,7 @@ main: { // [23] phi from main::@4 to test [phi:main::@4->test] // [23] phi test::i#11 = 4 [phi:main::@4->test#0] -- vbuxx=vbuc1 ldx #4 - // [23] phi test::a#11 = 3+1-1*6/2 [phi:main::@4->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2 [phi:main::@4->test#1] -- call_phi_near lda #(3+1-1)*6/2 sta.z test.a jsr test @@ -1087,7 +1087,7 @@ main: { // [23] phi from main::@5 to test [phi:main::@5->test] // [23] phi test::i#11 = 5 [phi:main::@5->test#0] -- vbuxx=vbuc1 ldx #5 - // [23] phi test::a#11 = 3+1-1*6/2&2-1 [phi:main::@5->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2&2-1 [phi:main::@5->test#1] -- call_phi_near lda #(3+1-1)*6/2&2-1 sta.z test.a jsr test @@ -1099,7 +1099,7 @@ main: { // [23] phi from main::@6 to test [phi:main::@6->test] // [23] phi test::i#11 = 6 [phi:main::@6->test#0] -- vbuxx=vbuc1 ldx #6 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2 [phi:main::@6->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2 [phi:main::@6->test#1] -- call_phi_near lda #((3+1-1)*6/2&2-1)<<2 sta.z test.a jsr test @@ -1111,7 +1111,7 @@ main: { // [23] phi from main::@7 to test [phi:main::@7->test] // [23] phi test::i#11 = 7 [phi:main::@7->test#0] -- vbuxx=vbuc1 ldx #7 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1 [phi:main::@7->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1 [phi:main::@7->test#1] -- call_phi_near lda #((3+1-1)*6/2&2-1)<<2>>1 sta.z test.a jsr test @@ -1123,7 +1123,7 @@ main: { // [23] phi from main::@8 to test [phi:main::@8->test] // [23] phi test::i#11 = 8 [phi:main::@8->test#0] -- vbuxx=vbuc1 ldx #8 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6 [phi:main::@8->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6 [phi:main::@8->test#1] -- call_phi_near lda #((3+1-1)*6/2&2-1)<<2>>1^6 sta.z test.a jsr test @@ -1135,7 +1135,7 @@ main: { // [23] phi from main::@9 to test [phi:main::@9->test] // [23] phi test::i#11 = 9 [phi:main::@9->test#0] -- vbuxx=vbuc1 ldx #9 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1 [phi:main::@9->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1 [phi:main::@9->test#1] -- call_phi_near lda #((3+1-1)*6/2&2-1)<<2>>1^6|1 sta.z test.a jsr test @@ -1147,7 +1147,7 @@ main: { // [23] phi from main::@10 to test [phi:main::@10->test] // [23] phi test::i#11 = $a [phi:main::@10->test#0] -- vbuxx=vbuc1 ldx #$a - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1&1 [phi:main::@10->test#1] -- vbuz1=vbuc1 + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1&1 [phi:main::@10->test#1] -- call_phi_near lda #(((3+1-1)*6/2&2-1)<<2>>1^6|1)&1 sta.z test.a jsr test diff --git a/src/test/ref/atarixl-md5b.log b/src/test/ref/atarixl-md5b.log index f8b947650..281f695b8 100644 --- a/src/test/ref/atarixl-md5b.log +++ b/src/test/ref/atarixl-md5b.log @@ -903,7 +903,7 @@ __start: { // __start::@1 __b1: // [4] call main - // [6] phi from __start::@1 to main [phi:__start::@1->main] + // [6] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -940,7 +940,7 @@ main: { // main::@3 __b3: // [10] call md5 - // [14] phi from main::@3 to md5 [phi:main::@3->md5] + // [14] phi from main::@3 to md5 [phi:main::@3->md5] -- call_phi_near md5_from___b3: jsr md5 // [11] phi from main::@3 main::@4 to main::@4 [phi:main::@3/main::@4->main::@4] @@ -1012,7 +1012,7 @@ md5: { // [36] phi print::c#2 = print::c#0 [phi:md5::@2->print#0] -- register_copy // [36] phi print::b#2 = print::b#0 [phi:md5::@2->print#1] -- register_copy // [36] phi print::a#2 = print::a#0 [phi:md5::@2->print#2] -- register_copy - // [36] phi print::print321_l#0 = print::i#0 [phi:md5::@2->print#3] -- register_copy + // [36] phi print::print321_l#0 = print::i#0 [phi:md5::@2->print#3] -- call_phi_near jsr print jmp __b5 // md5::@5 @@ -1049,7 +1049,7 @@ md5: { // [36] phi print::c#2 = print::c#1 [phi:md5::@3->print#0] -- register_copy // [36] phi print::b#2 = print::b#1 [phi:md5::@3->print#1] -- register_copy // [36] phi print::a#2 = print::a#1 [phi:md5::@3->print#2] -- register_copy - // [36] phi print::print321_l#0 = print::i#1 [phi:md5::@3->print#3] -- register_copy + // [36] phi print::print321_l#0 = print::i#1 [phi:md5::@3->print#3] -- call_phi_near jsr print jmp __b6 // md5::@6 @@ -1400,7 +1400,7 @@ __start: { // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [4] call main - // [6] phi from __start::@1 to main [phi:__start::@1->main] + // [6] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [5] return @@ -1431,7 +1431,7 @@ main: { // main::@3 // md5() // [10] call md5 - // [14] phi from main::@3 to md5 [phi:main::@3->md5] + // [14] phi from main::@3 to md5 [phi:main::@3->md5] -- call_phi_near jsr md5 // [11] phi from main::@3 main::@4 to main::@4 [phi:main::@3/main::@4->main::@4] // main::@4 @@ -1498,7 +1498,7 @@ md5: { // [36] phi print::c#2 = print::c#0 [phi:md5::@2->print#0] -- register_copy // [36] phi print::b#2 = print::b#0 [phi:md5::@2->print#1] -- register_copy // [36] phi print::a#2 = print::a#0 [phi:md5::@2->print#2] -- register_copy - // [36] phi print::print321_l#0 = print::i#0 [phi:md5::@2->print#3] -- register_copy + // [36] phi print::print321_l#0 = print::i#0 [phi:md5::@2->print#3] -- call_phi_near jsr print // md5::@5 // i&1 @@ -1530,7 +1530,7 @@ md5: { // [36] phi print::c#2 = print::c#1 [phi:md5::@3->print#0] -- register_copy // [36] phi print::b#2 = print::b#1 [phi:md5::@3->print#1] -- register_copy // [36] phi print::a#2 = print::a#1 [phi:md5::@3->print#2] -- register_copy - // [36] phi print::print321_l#0 = print::i#1 [phi:md5::@3->print#3] -- register_copy + // [36] phi print::print321_l#0 = print::i#1 [phi:md5::@3->print#3] -- call_phi_near jsr print // md5::@6 // for(char i = 0; i<4; i++) diff --git a/src/test/ref/bitmap-circle-2.log b/src/test/ref/bitmap-circle-2.log index 68efa05eb..9cda2ff11 100644 --- a/src/test/ref/bitmap-circle-2.log +++ b/src/test/ref/bitmap-circle-2.log @@ -1318,7 +1318,7 @@ main: { sta.z fill.size lda #>$28*$19*8 sta.z fill.size+1 - // [13] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- pbuz1=pbuc1 + // [13] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- call_phi_near lda #BITMAP @@ -1339,7 +1339,7 @@ main: { sta.z fill.size lda #>$28*$19 sta.z fill.size+1 - // [13] phi fill::addr#0 = SCREEN [phi:main::@4->fill#2] -- pbuz1=pbuc1 + // [13] phi fill::addr#0 = SCREEN [phi:main::@4->fill#2] -- call_phi_near lda #SCREEN @@ -1390,7 +1390,7 @@ main: { sta.z circle.r lda.z i+1 sta.z circle.r+1 - // [11] call circle + // [11] call circle -- call_phi_near jsr circle jmp __b6 // main::@6 @@ -1584,7 +1584,7 @@ circle: { // [60] phi from circle::@4 to plot [phi:circle::@4->plot] plot_from___b4: // [60] phi plot::y#8 = plot::y#0 [phi:circle::@4->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- call_phi_near jsr plot jmp __b6 // circle::@6 @@ -1609,7 +1609,7 @@ circle: { // [60] phi from circle::@6 to plot [phi:circle::@6->plot] plot_from___b6: // [60] phi plot::y#8 = plot::y#1 [phi:circle::@6->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- call_phi_near jsr plot jmp __b7 // circle::@7 @@ -1634,7 +1634,7 @@ circle: { // [60] phi from circle::@7 to plot [phi:circle::@7->plot] plot_from___b7: // [60] phi plot::y#8 = plot::y#2 [phi:circle::@7->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- call_phi_near jsr plot jmp __b8 // circle::@8 @@ -1659,7 +1659,7 @@ circle: { // [60] phi from circle::@8 to plot [phi:circle::@8->plot] plot_from___b8: // [60] phi plot::y#8 = plot::y#3 [phi:circle::@8->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- call_phi_near jsr plot jmp __b9 // circle::@9 @@ -1684,7 +1684,7 @@ circle: { // [60] phi from circle::@9 to plot [phi:circle::@9->plot] plot_from___b9: // [60] phi plot::y#8 = plot::y#4 [phi:circle::@9->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- call_phi_near jsr plot jmp __b10 // circle::@10 @@ -1709,7 +1709,7 @@ circle: { // [60] phi from circle::@10 to plot [phi:circle::@10->plot] plot_from___b10: // [60] phi plot::y#8 = plot::y#5 [phi:circle::@10->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- call_phi_near jsr plot jmp __b11 // circle::@11 @@ -1734,7 +1734,7 @@ circle: { // [60] phi from circle::@11 to plot [phi:circle::@11->plot] plot_from___b11: // [60] phi plot::y#8 = plot::y#6 [phi:circle::@11->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- call_phi_near jsr plot jmp __b12 // circle::@12 @@ -1759,7 +1759,7 @@ circle: { // [60] phi from circle::@12 to plot [phi:circle::@12->plot] plot_from___b12: // [60] phi plot::y#8 = plot::y#7 [phi:circle::@12->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- call_phi_near jsr plot jmp __b13 // circle::@13 @@ -2189,7 +2189,7 @@ main: { sta.z fill.size lda #>$28*$19*8 sta.z fill.size+1 - // [13] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- pbuz1=pbuc1 + // [13] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- call_phi_near lda #BITMAP @@ -2207,7 +2207,7 @@ main: { sta.z fill.size lda #>$28*$19 sta.z fill.size+1 - // [13] phi fill::addr#0 = SCREEN [phi:main::@4->fill#2] -- pbuz1=pbuc1 + // [13] phi fill::addr#0 = SCREEN [phi:main::@4->fill#2] -- call_phi_near lda #SCREEN @@ -2256,7 +2256,7 @@ main: { sta.z circle.r lda.z i+1 sta.z circle.r+1 - // [11] call circle + // [11] call circle -- call_phi_near jsr circle // main::@6 // i += 5 @@ -2450,7 +2450,7 @@ circle: { // [34] call plot // [60] phi from circle::@4 to plot [phi:circle::@4->plot] // [60] phi plot::y#8 = plot::y#0 [phi:circle::@4->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- call_phi_near jsr plot // circle::@6 // plot(xc-x,yc-y) @@ -2473,7 +2473,7 @@ circle: { // [37] call plot // [60] phi from circle::@6 to plot [phi:circle::@6->plot] // [60] phi plot::y#8 = plot::y#1 [phi:circle::@6->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- call_phi_near jsr plot // circle::@7 // plot(xc+x,yc+y) @@ -2496,7 +2496,7 @@ circle: { // [40] call plot // [60] phi from circle::@7 to plot [phi:circle::@7->plot] // [60] phi plot::y#8 = plot::y#2 [phi:circle::@7->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- call_phi_near jsr plot // circle::@8 // plot(xc-x,yc+y) @@ -2519,7 +2519,7 @@ circle: { // [43] call plot // [60] phi from circle::@8 to plot [phi:circle::@8->plot] // [60] phi plot::y#8 = plot::y#3 [phi:circle::@8->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- call_phi_near jsr plot // circle::@9 // plot(xc+y,yc-x) @@ -2542,7 +2542,7 @@ circle: { // [46] call plot // [60] phi from circle::@9 to plot [phi:circle::@9->plot] // [60] phi plot::y#8 = plot::y#4 [phi:circle::@9->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- call_phi_near jsr plot // circle::@10 // plot(xc-y,yc-x) @@ -2565,7 +2565,7 @@ circle: { // [49] call plot // [60] phi from circle::@10 to plot [phi:circle::@10->plot] // [60] phi plot::y#8 = plot::y#5 [phi:circle::@10->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- call_phi_near jsr plot // circle::@11 // plot(xc+y,yc+x) @@ -2588,7 +2588,7 @@ circle: { // [52] call plot // [60] phi from circle::@11 to plot [phi:circle::@11->plot] // [60] phi plot::y#8 = plot::y#6 [phi:circle::@11->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- call_phi_near jsr plot // circle::@12 // plot(xc-y,yc+x) @@ -2611,7 +2611,7 @@ circle: { // [55] call plot // [60] phi from circle::@12 to plot [phi:circle::@12->plot] // [60] phi plot::y#8 = plot::y#7 [phi:circle::@12->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- register_copy + // [60] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- call_phi_near jsr plot // circle::@13 // for(int x = 0; x <= y; x ++) diff --git a/src/test/ref/bitmap-circle.log b/src/test/ref/bitmap-circle.log index 0e5befc1a..ce278821e 100644 --- a/src/test/ref/bitmap-circle.log +++ b/src/test/ref/bitmap-circle.log @@ -1192,7 +1192,7 @@ main: { sta.z fill.size lda #>$28*$19*8 sta.z fill.size+1 - // [9] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- pbuz1=pbuc1 + // [9] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- call_phi_near lda #BITMAP @@ -1213,7 +1213,7 @@ main: { sta.z fill.size lda #>$28*$19 sta.z fill.size+1 - // [9] phi fill::addr#0 = SCREEN [phi:main::@2->fill#2] -- pbuz1=pbuc1 + // [9] phi fill::addr#0 = SCREEN [phi:main::@2->fill#2] -- call_phi_near lda #SCREEN @@ -1232,7 +1232,7 @@ main: { lda #(SCREEN&$3fff)/$40|(BITMAP&$3fff)/$400 sta VICII_MEMORY // [7] call circle - // [16] phi from main::@3 to circle [phi:main::@3->circle] + // [16] phi from main::@3 to circle [phi:main::@3->circle] -- call_phi_near circle_from___b3: jsr circle // [8] phi from main::@1 main::@3 to main::@1 [phi:main::@1/main::@3->main::@1] @@ -1411,7 +1411,7 @@ circle: { // [55] phi from circle::@4 to plot [phi:circle::@4->plot] plot_from___b4: // [55] phi plot::y#8 = plot::y#0 [phi:circle::@4->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- call_phi_near jsr plot jmp __b6 // circle::@6 @@ -1436,7 +1436,7 @@ circle: { // [55] phi from circle::@6 to plot [phi:circle::@6->plot] plot_from___b6: // [55] phi plot::y#8 = plot::y#1 [phi:circle::@6->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- call_phi_near jsr plot jmp __b7 // circle::@7 @@ -1461,7 +1461,7 @@ circle: { // [55] phi from circle::@7 to plot [phi:circle::@7->plot] plot_from___b7: // [55] phi plot::y#8 = plot::y#2 [phi:circle::@7->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- call_phi_near jsr plot jmp __b8 // circle::@8 @@ -1486,7 +1486,7 @@ circle: { // [55] phi from circle::@8 to plot [phi:circle::@8->plot] plot_from___b8: // [55] phi plot::y#8 = plot::y#3 [phi:circle::@8->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- call_phi_near jsr plot jmp __b9 // circle::@9 @@ -1511,7 +1511,7 @@ circle: { // [55] phi from circle::@9 to plot [phi:circle::@9->plot] plot_from___b9: // [55] phi plot::y#8 = plot::y#4 [phi:circle::@9->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- call_phi_near jsr plot jmp __b10 // circle::@10 @@ -1536,7 +1536,7 @@ circle: { // [55] phi from circle::@10 to plot [phi:circle::@10->plot] plot_from___b10: // [55] phi plot::y#8 = plot::y#5 [phi:circle::@10->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- call_phi_near jsr plot jmp __b11 // circle::@11 @@ -1561,7 +1561,7 @@ circle: { // [55] phi from circle::@11 to plot [phi:circle::@11->plot] plot_from___b11: // [55] phi plot::y#8 = plot::y#6 [phi:circle::@11->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- call_phi_near jsr plot jmp __b12 // circle::@12 @@ -1586,7 +1586,7 @@ circle: { // [55] phi from circle::@12 to plot [phi:circle::@12->plot] plot_from___b12: // [55] phi plot::y#8 = plot::y#7 [phi:circle::@12->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- call_phi_near jsr plot jmp __b13 // circle::@13 @@ -1955,7 +1955,7 @@ main: { sta.z fill.size lda #>$28*$19*8 sta.z fill.size+1 - // [9] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- pbuz1=pbuc1 + // [9] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- call_phi_near lda #BITMAP @@ -1973,7 +1973,7 @@ main: { sta.z fill.size lda #>$28*$19 sta.z fill.size+1 - // [9] phi fill::addr#0 = SCREEN [phi:main::@2->fill#2] -- pbuz1=pbuc1 + // [9] phi fill::addr#0 = SCREEN [phi:main::@2->fill#2] -- call_phi_near lda #SCREEN @@ -1994,7 +1994,7 @@ main: { sta VICII_MEMORY // circle(100,100,50) // [7] call circle - // [16] phi from main::@3 to circle [phi:main::@3->circle] + // [16] phi from main::@3 to circle [phi:main::@3->circle] -- call_phi_near jsr circle // [8] phi from main::@1 main::@3 to main::@1 [phi:main::@1/main::@3->main::@1] // main::@1 @@ -2169,7 +2169,7 @@ circle: { // [29] call plot // [55] phi from circle::@4 to plot [phi:circle::@4->plot] // [55] phi plot::y#8 = plot::y#0 [phi:circle::@4->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- call_phi_near jsr plot // circle::@6 // plot(xc-x,yc-y) @@ -2192,7 +2192,7 @@ circle: { // [32] call plot // [55] phi from circle::@6 to plot [phi:circle::@6->plot] // [55] phi plot::y#8 = plot::y#1 [phi:circle::@6->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- call_phi_near jsr plot // circle::@7 // plot(xc+x,yc+y) @@ -2215,7 +2215,7 @@ circle: { // [35] call plot // [55] phi from circle::@7 to plot [phi:circle::@7->plot] // [55] phi plot::y#8 = plot::y#2 [phi:circle::@7->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- call_phi_near jsr plot // circle::@8 // plot(xc-x,yc+y) @@ -2238,7 +2238,7 @@ circle: { // [38] call plot // [55] phi from circle::@8 to plot [phi:circle::@8->plot] // [55] phi plot::y#8 = plot::y#3 [phi:circle::@8->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- call_phi_near jsr plot // circle::@9 // plot(xc+y,yc-x) @@ -2261,7 +2261,7 @@ circle: { // [41] call plot // [55] phi from circle::@9 to plot [phi:circle::@9->plot] // [55] phi plot::y#8 = plot::y#4 [phi:circle::@9->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- call_phi_near jsr plot // circle::@10 // plot(xc-y,yc-x) @@ -2284,7 +2284,7 @@ circle: { // [44] call plot // [55] phi from circle::@10 to plot [phi:circle::@10->plot] // [55] phi plot::y#8 = plot::y#5 [phi:circle::@10->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- call_phi_near jsr plot // circle::@11 // plot(xc+y,yc+x) @@ -2307,7 +2307,7 @@ circle: { // [47] call plot // [55] phi from circle::@11 to plot [phi:circle::@11->plot] // [55] phi plot::y#8 = plot::y#6 [phi:circle::@11->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- call_phi_near jsr plot // circle::@12 // plot(xc-y,yc+x) @@ -2330,7 +2330,7 @@ circle: { // [50] call plot // [55] phi from circle::@12 to plot [phi:circle::@12->plot] // [55] phi plot::y#8 = plot::y#7 [phi:circle::@12->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- register_copy + // [55] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- call_phi_near jsr plot // circle::@13 // for(int x = 0; x <= y; x ++) diff --git a/src/test/ref/bitmap-line-anim-1.log b/src/test/ref/bitmap-line-anim-1.log index a9ee08268..ec14390c3 100644 --- a/src/test/ref/bitmap-line-anim-1.log +++ b/src/test/ref/bitmap-line-anim-1.log @@ -2327,7 +2327,7 @@ main: { lda #(SCREEN&$3fff)/$40|(BITMAP&$3fff)/$400 sta VICII_MEMORY // [4] call bitmap_init - // [13] phi from main to bitmap_init [phi:main->bitmap_init] + // [13] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near bitmap_init_from_main: jsr bitmap_init // [5] phi from main to main::@2 [phi:main->main::@2] @@ -2336,7 +2336,7 @@ main: { // main::@2 __b2: // [6] call bitmap_clear - // [35] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] + // [35] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] -- call_phi_near bitmap_clear_from___b2: jsr bitmap_clear // [7] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -2345,7 +2345,7 @@ main: { // main::@3 __b3: // [8] call init_screen - // [40] phi from main::@3 to init_screen [phi:main::@3->init_screen] + // [40] phi from main::@3 to init_screen [phi:main::@3->init_screen] -- call_phi_near init_screen_from___b3: jsr init_screen // [9] phi from main::@3 to main::@1 [phi:main::@3->main::@1] @@ -2361,7 +2361,7 @@ main: { sta.z bitmap_line.x2 lda #0 sta.z bitmap_line.x2+1 - // [11] call bitmap_line + // [11] call bitmap_line -- call_phi_near jsr bitmap_line jmp __b4 // main::@4 @@ -2501,7 +2501,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [94] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [94] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -2522,7 +2522,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [94] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [94] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -2599,7 +2599,7 @@ bitmap_line: { // [47] call abs_u16 // [103] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] abs_u16_from_bitmap_line: - // [103] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy + // [103] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near jsr abs_u16 // [48] abs_u16::return#0 = abs_u16::return#4 jmp __b12 @@ -2613,7 +2613,7 @@ bitmap_line: { // [50] call abs_u16 // [103] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] abs_u16_from___b12: - // [103] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- vwuz1=vwuc1 + // [103] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near lda #y2 @@ -2646,7 +2646,7 @@ bitmap_line: { // [56] call sgn_u16 // [110] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] sgn_u16_from___b1: - // [110] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy + // [110] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near jsr sgn_u16 // [57] sgn_u16::return#0 = sgn_u16::return#4 jmp __b14 @@ -2660,7 +2660,7 @@ bitmap_line: { // [59] call sgn_u16 // [110] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] sgn_u16_from___b14: - // [110] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- vwuz1=vwuc1 + // [110] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near lda #y2 @@ -2720,7 +2720,7 @@ bitmap_line: { // [117] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] bitmap_plot_from___b6: // [117] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [117] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy + // [117] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __b16 // bitmap_line::@16 @@ -2799,7 +2799,7 @@ bitmap_line: { // [117] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] bitmap_plot_from___b3: // [117] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [117] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy + // [117] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __breturn // bitmap_line::@return @@ -2845,7 +2845,7 @@ bitmap_line: { // [117] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] bitmap_plot_from___b9: // [117] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [117] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy + // [117] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __b17 // bitmap_line::@17 @@ -2923,7 +2923,7 @@ bitmap_line: { sta.z bitmap_plot.x lda #>x1 sta.z bitmap_plot.x+1 - // [117] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- vbuxx=vbuc1 + // [117] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near ldx #0 jsr bitmap_plot jmp __breturn @@ -3494,19 +3494,19 @@ main: { sta VICII_MEMORY // bitmap_init(BITMAP, SCREEN) // [4] call bitmap_init - // [13] phi from main to bitmap_init [phi:main->bitmap_init] + // [13] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near jsr bitmap_init // [5] phi from main to main::@2 [phi:main->main::@2] // main::@2 // bitmap_clear(BLACK, WHITE) // [6] call bitmap_clear - // [35] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] + // [35] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] -- call_phi_near jsr bitmap_clear // [7] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // init_screen() // [8] call init_screen - // [40] phi from main::@3 to init_screen [phi:main::@3->init_screen] + // [40] phi from main::@3 to init_screen [phi:main::@3->init_screen] -- call_phi_near jsr init_screen // [9] phi from main::@3 to main::@1 [phi:main::@3->main::@1] // [9] phi next#5 = 0 [phi:main::@3->main::@1#0] -- vbuz1=vbuc1 @@ -3520,7 +3520,7 @@ main: { sta.z bitmap_line.x2 lda #0 sta.z bitmap_line.x2+1 - // [11] call bitmap_line + // [11] call bitmap_line -- call_phi_near jsr bitmap_line // main::@4 // next++; @@ -3650,7 +3650,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [94] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [94] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -3668,7 +3668,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [94] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [94] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -3743,7 +3743,7 @@ bitmap_line: { sta.z abs_u16.w+1 // [47] call abs_u16 // [103] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] - // [103] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy + // [103] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near jsr abs_u16 // unsigned int dx = abs_u16(x2-x1) // [48] abs_u16::return#0 = abs_u16::return#4 @@ -3756,7 +3756,7 @@ bitmap_line: { // unsigned int dy = abs_u16(y2-y1) // [50] call abs_u16 // [103] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] - // [103] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- vwuz1=vwuc1 + // [103] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near lda #y2 @@ -3788,7 +3788,7 @@ bitmap_line: { sta.z sgn_u16.w+1 // [56] call sgn_u16 // [110] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] - // [110] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy + // [110] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near jsr sgn_u16 // unsigned int sx = sgn_u16(x2-x1) // [57] sgn_u16::return#0 = sgn_u16::return#4 @@ -3801,7 +3801,7 @@ bitmap_line: { // unsigned int sy = sgn_u16(y2-y1) // [59] call sgn_u16 // [110] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] - // [110] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- vwuz1=vwuc1 + // [110] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near lda #y2 @@ -3856,7 +3856,7 @@ bitmap_line: { // [67] call bitmap_plot // [117] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] // [117] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [117] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy + // [117] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near jsr bitmap_plot // bitmap_line::@16 // y += sy @@ -3930,7 +3930,7 @@ bitmap_line: { // [78] call bitmap_plot // [117] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] // [117] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [117] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy + // [117] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near jsr bitmap_plot // bitmap_line::@return // } @@ -3972,7 +3972,7 @@ bitmap_line: { // [84] call bitmap_plot // [117] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] // [117] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [117] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy + // [117] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near jsr bitmap_plot // bitmap_line::@17 // x += sx @@ -4046,7 +4046,7 @@ bitmap_line: { sta.z bitmap_plot.x lda #>x1 sta.z bitmap_plot.x+1 - // [117] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- vbuxx=vbuc1 + // [117] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near ldx #0 jsr bitmap_plot rts diff --git a/src/test/ref/bitmap-line-anim-2.log b/src/test/ref/bitmap-line-anim-2.log index 4a8593ac2..cbb073377 100644 --- a/src/test/ref/bitmap-line-anim-2.log +++ b/src/test/ref/bitmap-line-anim-2.log @@ -2293,7 +2293,7 @@ main: { lda #(SCREEN&$3fff)/$40|(BITMAP&$3fff)/$400 sta VICII_MEMORY // [4] call bitmap_init - // [14] phi from main to bitmap_init [phi:main->bitmap_init] + // [14] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near bitmap_init_from_main: jsr bitmap_init // [5] phi from main to main::@3 [phi:main->main::@3] @@ -2302,7 +2302,7 @@ main: { // main::@3 __b3: // [6] call bitmap_clear - // [36] phi from main::@3 to bitmap_clear [phi:main::@3->bitmap_clear] + // [36] phi from main::@3 to bitmap_clear [phi:main::@3->bitmap_clear] -- call_phi_near bitmap_clear_from___b3: jsr bitmap_clear // [7] phi from main::@3 to main::@1 [phi:main::@3->main::@1] @@ -2316,7 +2316,7 @@ main: { // main::@1 __b1: // [8] bitmap_line::x2#0 = next#6 - // [9] call bitmap_line + // [9] call bitmap_line -- call_phi_near jsr bitmap_line jmp __b4 // main::@4 @@ -2485,7 +2485,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [89] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [89] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -2506,7 +2506,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [89] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [89] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -2542,7 +2542,7 @@ bitmap_line: { // [42] call abs_u16 // [98] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] abs_u16_from_bitmap_line: - // [98] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy + // [98] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near jsr abs_u16 // [43] abs_u16::return#0 = abs_u16::return#4 jmp __b12 @@ -2556,7 +2556,7 @@ bitmap_line: { // [45] call abs_u16 // [98] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] abs_u16_from___b12: - // [98] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- vwuz1=vwuc1 + // [98] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near lda #y2 @@ -2589,7 +2589,7 @@ bitmap_line: { // [51] call sgn_u16 // [105] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] sgn_u16_from___b1: - // [105] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy + // [105] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near jsr sgn_u16 // [52] sgn_u16::return#0 = sgn_u16::return#4 jmp __b14 @@ -2603,7 +2603,7 @@ bitmap_line: { // [54] call sgn_u16 // [105] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] sgn_u16_from___b14: - // [105] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- vwuz1=vwuc1 + // [105] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near lda #y2 @@ -2663,7 +2663,7 @@ bitmap_line: { // [112] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] bitmap_plot_from___b6: // [112] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [112] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy + // [112] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __b16 // bitmap_line::@16 @@ -2742,7 +2742,7 @@ bitmap_line: { // [112] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] bitmap_plot_from___b3: // [112] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [112] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy + // [112] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __breturn // bitmap_line::@return @@ -2788,7 +2788,7 @@ bitmap_line: { // [112] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] bitmap_plot_from___b9: // [112] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [112] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy + // [112] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __b17 // bitmap_line::@17 @@ -2866,7 +2866,7 @@ bitmap_line: { sta.z bitmap_plot.x lda #>x1 sta.z bitmap_plot.x+1 - // [112] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- vbuxx=vbuc1 + // [112] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near ldx #0 jsr bitmap_plot jmp __breturn @@ -3443,13 +3443,13 @@ main: { sta VICII_MEMORY // bitmap_init(BITMAP, SCREEN) // [4] call bitmap_init - // [14] phi from main to bitmap_init [phi:main->bitmap_init] + // [14] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near jsr bitmap_init // [5] phi from main to main::@3 [phi:main->main::@3] // main::@3 // bitmap_clear(PURPLE, WHITE) // [6] call bitmap_clear - // [36] phi from main::@3 to bitmap_clear [phi:main::@3->bitmap_clear] + // [36] phi from main::@3 to bitmap_clear [phi:main::@3->bitmap_clear] -- call_phi_near jsr bitmap_clear // [7] phi from main::@3 to main::@1 [phi:main::@3->main::@1] // [7] phi next#6 = 0 [phi:main::@3->main::@1#0] -- vwuz1=vwuc1 @@ -3460,7 +3460,7 @@ main: { __b1: // bitmap_line(0,0,next,100) // [8] bitmap_line::x2#0 = next#6 - // [9] call bitmap_line + // [9] call bitmap_line -- call_phi_near jsr bitmap_line // main::@4 // next++; @@ -3611,7 +3611,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [89] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [89] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -3629,7 +3629,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [89] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [89] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -3664,7 +3664,7 @@ bitmap_line: { sta.z abs_u16.w+1 // [42] call abs_u16 // [98] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] - // [98] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy + // [98] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near jsr abs_u16 // unsigned int dx = abs_u16(x2-x1) // [43] abs_u16::return#0 = abs_u16::return#4 @@ -3677,7 +3677,7 @@ bitmap_line: { // unsigned int dy = abs_u16(y2-y1) // [45] call abs_u16 // [98] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] - // [98] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- vwuz1=vwuc1 + // [98] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near lda #y2 @@ -3709,7 +3709,7 @@ bitmap_line: { sta.z sgn_u16.w+1 // [51] call sgn_u16 // [105] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] - // [105] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy + // [105] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near jsr sgn_u16 // unsigned int sx = sgn_u16(x2-x1) // [52] sgn_u16::return#0 = sgn_u16::return#4 @@ -3722,7 +3722,7 @@ bitmap_line: { // unsigned int sy = sgn_u16(y2-y1) // [54] call sgn_u16 // [105] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] - // [105] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- vwuz1=vwuc1 + // [105] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near lda #y2 @@ -3777,7 +3777,7 @@ bitmap_line: { // [62] call bitmap_plot // [112] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] // [112] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [112] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy + // [112] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near jsr bitmap_plot // bitmap_line::@16 // y += sy @@ -3851,7 +3851,7 @@ bitmap_line: { // [73] call bitmap_plot // [112] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] // [112] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [112] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy + // [112] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near jsr bitmap_plot // bitmap_line::@return // } @@ -3893,7 +3893,7 @@ bitmap_line: { // [79] call bitmap_plot // [112] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] // [112] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [112] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy + // [112] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near jsr bitmap_plot // bitmap_line::@17 // x += sx @@ -3967,7 +3967,7 @@ bitmap_line: { sta.z bitmap_plot.x lda #>x1 sta.z bitmap_plot.x+1 - // [112] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- vbuxx=vbuc1 + // [112] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near ldx #0 jsr bitmap_plot rts diff --git a/src/test/ref/bitmap-plot-0.log b/src/test/ref/bitmap-plot-0.log index 656e0bd4e..6436ef53c 100644 --- a/src/test/ref/bitmap-plot-0.log +++ b/src/test/ref/bitmap-plot-0.log @@ -1730,7 +1730,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] + // [11] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -1782,7 +1782,7 @@ main: { .label vx = $a .label vy = 9 // [12] call bitmap_init - // [34] phi from main to bitmap_init [phi:main->bitmap_init] + // [34] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near bitmap_init_from_main: jsr bitmap_init // [13] phi from main to main::@8 [phi:main->main::@8] @@ -1791,7 +1791,7 @@ main: { // main::@8 __b8: // [14] call bitmap_clear - // [56] phi from main::@8 to bitmap_clear [phi:main::@8->bitmap_clear] + // [56] phi from main::@8 to bitmap_clear [phi:main::@8->bitmap_clear] -- call_phi_near bitmap_clear_from___b8: jsr bitmap_clear jmp __b9 @@ -1811,7 +1811,7 @@ main: { // [17] *D018 = main::toD0181_return#0 -- _deref_pbuc1=vbuc2 lda #toD0181_return sta D018 - // [18] call init_irq + // [18] call init_irq -- call_phi_near jsr init_irq // [19] phi from main::@7 to main::@1 [phi:main::@7->main::@1] __b1_from___b7: @@ -1840,7 +1840,7 @@ main: { // [20] bitmap_plot::x#0 = main::x#2 // [21] bitmap_plot::y#0 = main::y#2 -- vbuxx=vbuz1 ldx.z y - // [22] call bitmap_plot + // [22] call bitmap_plot -- call_phi_near jsr bitmap_plot jmp __b10 // main::@10 @@ -2056,7 +2056,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [77] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [77] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -2077,7 +2077,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [77] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [77] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -2562,7 +2562,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] + // [11] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return @@ -2613,13 +2613,13 @@ main: { .label vy = 9 // bitmap_init(BITMAP, SCREEN) // [12] call bitmap_init - // [34] phi from main to bitmap_init [phi:main->bitmap_init] + // [34] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near jsr bitmap_init // [13] phi from main to main::@8 [phi:main->main::@8] // main::@8 // bitmap_clear(BLACK, WHITE) // [14] call bitmap_clear - // [56] phi from main::@8 to bitmap_clear [phi:main::@8->bitmap_clear] + // [56] phi from main::@8 to bitmap_clear [phi:main::@8->bitmap_clear] -- call_phi_near jsr bitmap_clear // main::@9 // *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 @@ -2634,7 +2634,7 @@ main: { lda #toD0181_return sta D018 // init_irq() - // [18] call init_irq + // [18] call init_irq -- call_phi_near jsr init_irq // [19] phi from main::@7 to main::@1 [phi:main::@7->main::@1] // [19] phi main::vy#2 = 1 [phi:main::@7->main::@1#0] -- vbuz1=vbuc1 @@ -2656,7 +2656,7 @@ main: { // [20] bitmap_plot::x#0 = main::x#2 // [21] bitmap_plot::y#0 = main::y#2 -- vbuxx=vbuz1 ldx.z y - // [22] call bitmap_plot + // [22] call bitmap_plot -- call_phi_near jsr bitmap_plot // main::@10 // x += vx @@ -2856,7 +2856,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [77] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [77] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -2874,7 +2874,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [77] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [77] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near lda #<$1f40 sta.z memset.num lda #>$1f40 diff --git a/src/test/ref/bitmap-plot-3.log b/src/test/ref/bitmap-plot-3.log index fbdff3656..4b3924927 100644 --- a/src/test/ref/bitmap-plot-3.log +++ b/src/test/ref/bitmap-plot-3.log @@ -2524,7 +2524,7 @@ main: { .label a = $1c .label i = $1b // [1] call bitmap_init - // [19] phi from main to bitmap_init [phi:main->bitmap_init] + // [19] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near bitmap_init_from_main: jsr bitmap_init // [2] phi from main to main::@5 [phi:main->main::@5] @@ -2533,7 +2533,7 @@ main: { // main::@5 __b5: // [3] call bitmap_clear - // [41] phi from main::@5 to bitmap_clear [phi:main::@5->bitmap_clear] + // [41] phi from main::@5 to bitmap_clear [phi:main::@5->bitmap_clear] -- call_phi_near bitmap_clear_from___b5: jsr bitmap_clear jmp __b6 @@ -2616,7 +2616,7 @@ main: { sta.z bitmap_line.y2 lda #0 sta.z bitmap_line.y2+1 - // [16] call bitmap_line + // [16] call bitmap_line -- call_phi_near jsr bitmap_line jmp __b7 // main::@7 @@ -2761,7 +2761,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [97] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [97] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -2782,7 +2782,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [97] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [97] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -2821,7 +2821,7 @@ bitmap_line: { // [47] call abs_u16 // [106] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] abs_u16_from_bitmap_line: - // [106] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy + // [106] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near jsr abs_u16 // [48] abs_u16::return#0 = abs_u16::return#4 jmp __b12 @@ -2843,7 +2843,7 @@ bitmap_line: { // [51] call abs_u16 // [106] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] abs_u16_from___b12: - // [106] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- register_copy + // [106] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near jsr abs_u16 // [52] abs_u16::return#1 = abs_u16::return#4 jmp __b13 @@ -2875,7 +2875,7 @@ bitmap_line: { // [57] call sgn_u16 // [113] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] sgn_u16_from___b1: - // [113] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy + // [113] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near jsr sgn_u16 // [58] sgn_u16::return#0 = sgn_u16::return#4 jmp __b14 @@ -2897,7 +2897,7 @@ bitmap_line: { // [61] call sgn_u16 // [113] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] sgn_u16_from___b14: - // [113] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- register_copy + // [113] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near jsr sgn_u16 // [62] sgn_u16::return#1 = sgn_u16::return#4 jmp __b15 @@ -2940,7 +2940,7 @@ bitmap_line: { // [120] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] bitmap_plot_from___b6: // [120] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __b16 // bitmap_line::@16 @@ -3019,7 +3019,7 @@ bitmap_line: { // [120] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] bitmap_plot_from___b3: // [120] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __breturn // bitmap_line::@return @@ -3052,7 +3052,7 @@ bitmap_line: { // [120] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] bitmap_plot_from___b9: // [120] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __b17 // bitmap_line::@17 @@ -3126,7 +3126,7 @@ bitmap_line: { // [120] phi from bitmap_line::@4 to bitmap_plot [phi:bitmap_line::@4->bitmap_plot] bitmap_plot_from___b4: // [120] phi bitmap_plot::x#4 = bitmap_plot::x#0 [phi:bitmap_line::@4->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- register_copy + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __breturn } @@ -3699,13 +3699,13 @@ main: { .label i = $1b // bitmap_init(BITMAP, SCREEN) // [1] call bitmap_init - // [19] phi from main to bitmap_init [phi:main->bitmap_init] + // [19] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near jsr bitmap_init // [2] phi from main to main::@5 [phi:main->main::@5] // main::@5 // bitmap_clear(BLACK, WHITE) // [3] call bitmap_clear - // [41] phi from main::@5 to bitmap_clear [phi:main::@5->bitmap_clear] + // [41] phi from main::@5 to bitmap_clear [phi:main::@5->bitmap_clear] -- call_phi_near jsr bitmap_clear // main::@6 // *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 @@ -3783,7 +3783,7 @@ main: { sta.z bitmap_line.y2 lda #0 sta.z bitmap_line.y2+1 - // [16] call bitmap_line + // [16] call bitmap_line -- call_phi_near jsr bitmap_line // main::@7 // a+=32 @@ -3919,7 +3919,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [97] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [97] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -3937,7 +3937,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [97] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [97] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -3975,7 +3975,7 @@ bitmap_line: { sta.z abs_u16.w+1 // [47] call abs_u16 // [106] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] - // [106] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy + // [106] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near jsr abs_u16 // unsigned int dx = abs_u16(x2-x1) // [48] abs_u16::return#0 = abs_u16::return#4 @@ -3996,7 +3996,7 @@ bitmap_line: { sta.z abs_u16.w+1 // [51] call abs_u16 // [106] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] - // [106] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- register_copy + // [106] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near jsr abs_u16 // unsigned int dy = abs_u16(y2-y1) // [52] abs_u16::return#1 = abs_u16::return#4 @@ -4027,7 +4027,7 @@ bitmap_line: { sta.z sgn_u16.w+1 // [57] call sgn_u16 // [113] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] - // [113] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy + // [113] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near jsr sgn_u16 // unsigned int sx = sgn_u16(x2-x1) // [58] sgn_u16::return#0 = sgn_u16::return#4 @@ -4048,7 +4048,7 @@ bitmap_line: { sta.z sgn_u16.w+1 // [61] call sgn_u16 // [113] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] - // [113] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- register_copy + // [113] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near jsr sgn_u16 // unsigned int sy = sgn_u16(y2-y1) // [62] sgn_u16::return#1 = sgn_u16::return#4 @@ -4087,7 +4087,7 @@ bitmap_line: { // [69] call bitmap_plot // [120] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] // [120] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near jsr bitmap_plot // bitmap_line::@16 // y += sy @@ -4161,7 +4161,7 @@ bitmap_line: { // [80] call bitmap_plot // [120] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] // [120] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near jsr bitmap_plot // bitmap_line::@return // } @@ -4191,7 +4191,7 @@ bitmap_line: { // [86] call bitmap_plot // [120] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] // [120] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near jsr bitmap_plot // bitmap_line::@17 // x += sx @@ -4263,7 +4263,7 @@ bitmap_line: { // [96] call bitmap_plot // [120] phi from bitmap_line::@4 to bitmap_plot [phi:bitmap_line::@4->bitmap_plot] // [120] phi bitmap_plot::x#4 = bitmap_plot::x#0 [phi:bitmap_line::@4->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- register_copy + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near jsr bitmap_plot rts } diff --git a/src/test/ref/bitmap-plotter.log b/src/test/ref/bitmap-plotter.log index ba502c020..dafc94580 100644 --- a/src/test/ref/bitmap-plotter.log +++ b/src/test/ref/bitmap-plotter.log @@ -980,7 +980,7 @@ main: { lda #SCREEN/$40|BITMAP/$400 sta D018 // [4] call init_screen - // [11] phi from main to init_screen [phi:main->init_screen] + // [11] phi from main to init_screen [phi:main->init_screen] -- call_phi_near init_screen_from_main: jsr init_screen // [5] phi from main to main::@3 [phi:main->main::@3] @@ -989,7 +989,7 @@ main: { // main::@3 __b3: // [6] call init_plot_tables - // [21] phi from main::@3 to init_plot_tables [phi:main::@3->init_plot_tables] + // [21] phi from main::@3 to init_plot_tables [phi:main::@3->init_plot_tables] -- call_phi_near init_plot_tables_from___b3: jsr init_plot_tables jmp __b1 @@ -1005,7 +1005,7 @@ main: { // [8] *BG_COLOR = ++ *BG_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 inc BG_COLOR // [9] call plots - // [46] phi from main::@2 to plots [phi:main::@2->plots] + // [46] phi from main::@2 to plots [phi:main::@2->plots] -- call_phi_near plots_from___b2: jsr plots jmp __b4 @@ -1234,7 +1234,7 @@ plots: { // [51] plot::y#0 = plots_y[plots::i#2] -- vbuz1=pbuc1_derefidx_vbuxx lda plots_y,x sta.z plot.y - // [52] call plot + // [52] call plot -- call_phi_near jsr plot jmp __b3 // plots::@3 @@ -1511,13 +1511,13 @@ main: { sta D018 // init_screen() // [4] call init_screen - // [11] phi from main to init_screen [phi:main->init_screen] + // [11] phi from main to init_screen [phi:main->init_screen] -- call_phi_near jsr init_screen // [5] phi from main to main::@3 [phi:main->main::@3] // main::@3 // init_plot_tables() // [6] call init_plot_tables - // [21] phi from main::@3 to init_plot_tables [phi:main::@3->init_plot_tables] + // [21] phi from main::@3 to init_plot_tables [phi:main::@3->init_plot_tables] -- call_phi_near jsr init_plot_tables // main::@1 __b1: @@ -1532,7 +1532,7 @@ main: { inc BG_COLOR // plots() // [9] call plots - // [46] phi from main::@2 to plots [phi:main::@2->plots] + // [46] phi from main::@2 to plots [phi:main::@2->plots] -- call_phi_near jsr plots // main::@4 // (*BG_COLOR)--; @@ -1751,7 +1751,7 @@ plots: { // [51] plot::y#0 = plots_y[plots::i#2] -- vbuz1=pbuc1_derefidx_vbuxx lda plots_y,x sta.z plot.y - // [52] call plot + // [52] call plot -- call_phi_near jsr plot // plots::@3 // for(byte i=0; ibool_const_if] + // [7] phi from main to bool_const_if [phi:main->bool_const_if] -- call_phi_near bool_const_if_from_main: jsr bool_const_if // [2] phi from main to main::@1 [phi:main->main::@1] @@ -377,7 +377,7 @@ main: { // main::@1 __b1: // [3] call bool_const_vars - // [10] phi from main::@1 to bool_const_vars [phi:main::@1->bool_const_vars] + // [10] phi from main::@1 to bool_const_vars [phi:main::@1->bool_const_vars] -- call_phi_near bool_const_vars_from___b1: jsr bool_const_vars // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -386,7 +386,7 @@ main: { // main::@2 __b2: // [5] call bool_const_inline - // [13] phi from main::@2 to bool_const_inline [phi:main::@2->bool_const_inline] + // [13] phi from main::@2 to bool_const_inline [phi:main::@2->bool_const_inline] -- call_phi_near bool_const_inline_from___b2: jsr bool_const_inline jmp __breturn @@ -503,19 +503,19 @@ Score: 60 main: { // bool_const_if() // [1] call bool_const_if - // [7] phi from main to bool_const_if [phi:main->bool_const_if] + // [7] phi from main to bool_const_if [phi:main->bool_const_if] -- call_phi_near jsr bool_const_if // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // bool_const_vars() // [3] call bool_const_vars - // [10] phi from main::@1 to bool_const_vars [phi:main::@1->bool_const_vars] + // [10] phi from main::@1 to bool_const_vars [phi:main::@1->bool_const_vars] -- call_phi_near jsr bool_const_vars // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // bool_const_inline() // [5] call bool_const_inline - // [13] phi from main::@2 to bool_const_inline [phi:main::@2->bool_const_inline] + // [13] phi from main::@2 to bool_const_inline [phi:main::@2->bool_const_inline] -- call_phi_near jsr bool_const_inline // main::@return // } diff --git a/src/test/ref/bool-function.log b/src/test/ref/bool-function.log index 9eefa4f55..4e2a534ae 100644 --- a/src/test/ref/bool-function.log +++ b/src/test/ref/bool-function.log @@ -325,7 +325,7 @@ main: { tay // [4] isSet::i#0 = main::i#2 -- vbuaa=vbuxx txa - // [5] call isSet + // [5] call isSet -- call_phi_near jsr isSet // [6] isSet::return#0 = isSet::return#1 jmp __b5 @@ -474,7 +474,7 @@ main: { tay // [4] isSet::i#0 = main::i#2 -- vbuaa=vbuxx txa - // [5] call isSet + // [5] call isSet -- call_phi_near jsr isSet // [6] isSet::return#0 = isSet::return#1 // main::@5 diff --git a/src/test/ref/bool-ifs.log b/src/test/ref/bool-ifs.log index 93674d607..85068d2b7 100644 --- a/src/test/ref/bool-ifs.log +++ b/src/test/ref/bool-ifs.log @@ -655,7 +655,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call bool_and - // [9] phi from main to bool_and [phi:main->bool_and] + // [9] phi from main to bool_and [phi:main->bool_and] -- call_phi_near bool_and_from_main: jsr bool_and // [2] phi from main to main::@1 [phi:main->main::@1] @@ -664,7 +664,7 @@ main: { // main::@1 __b1: // [3] call bool_or - // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] + // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] -- call_phi_near bool_or_from___b1: jsr bool_or // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -673,7 +673,7 @@ main: { // main::@2 __b2: // [5] call bool_not - // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] + // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] -- call_phi_near bool_not_from___b2: jsr bool_not // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -682,7 +682,7 @@ main: { // main::@3 __b3: // [7] call bool_complex - // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] + // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] -- call_phi_near bool_complex_from___b3: jsr bool_complex jmp __breturn @@ -1040,25 +1040,25 @@ Score: 1684 main: { // bool_and() // [1] call bool_and - // [9] phi from main to bool_and [phi:main->bool_and] + // [9] phi from main to bool_and [phi:main->bool_and] -- call_phi_near jsr bool_and // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // bool_or() // [3] call bool_or - // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] + // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] -- call_phi_near jsr bool_or // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // bool_not() // [5] call bool_not - // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] + // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] -- call_phi_near jsr bool_not // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // bool_complex() // [7] call bool_complex - // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] + // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] -- call_phi_near jsr bool_complex // main::@return // } diff --git a/src/test/ref/bool-vars.log b/src/test/ref/bool-vars.log index afc8566b2..df8e0e9a3 100644 --- a/src/test/ref/bool-vars.log +++ b/src/test/ref/bool-vars.log @@ -689,7 +689,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call bool_and - // [9] phi from main to bool_and [phi:main->bool_and] + // [9] phi from main to bool_and [phi:main->bool_and] -- call_phi_near bool_and_from_main: jsr bool_and // [2] phi from main to main::@1 [phi:main->main::@1] @@ -698,7 +698,7 @@ main: { // main::@1 __b1: // [3] call bool_or - // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] + // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] -- call_phi_near bool_or_from___b1: jsr bool_or // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -707,7 +707,7 @@ main: { // main::@2 __b2: // [5] call bool_not - // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] + // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] -- call_phi_near bool_not_from___b2: jsr bool_not // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -716,7 +716,7 @@ main: { // main::@3 __b3: // [7] call bool_complex - // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] + // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] -- call_phi_near bool_complex_from___b3: jsr bool_complex jmp __breturn @@ -1102,25 +1102,25 @@ Score: 1899 main: { // bool_and() // [1] call bool_and - // [9] phi from main to bool_and [phi:main->bool_and] + // [9] phi from main to bool_and [phi:main->bool_and] -- call_phi_near jsr bool_and // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // bool_or() // [3] call bool_or - // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] + // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] -- call_phi_near jsr bool_or // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // bool_not() // [5] call bool_not - // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] + // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] -- call_phi_near jsr bool_not // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // bool_complex() // [7] call bool_complex - // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] + // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] -- call_phi_near jsr bool_complex // main::@return // } diff --git a/src/test/ref/c-types.log b/src/test/ref/c-types.log index cdea0bfb0..aae73a3d4 100644 --- a/src/test/ref/c-types.log +++ b/src/test/ref/c-types.log @@ -2212,7 +2212,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call print_cls - // [11] phi from main to print_cls [phi:main->print_cls] + // [11] phi from main to print_cls [phi:main->print_cls] -- call_phi_near print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -2221,7 +2221,7 @@ main: { // main::@1 __b1: // [3] call testChar - // [14] phi from main::@1 to testChar [phi:main::@1->testChar] + // [14] phi from main::@1 to testChar [phi:main::@1->testChar] -- call_phi_near testChar_from___b1: jsr testChar // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -2229,21 +2229,21 @@ main: { jmp __b2 // main::@2 __b2: - // [5] call testShort + // [5] call testShort -- call_phi_near jsr testShort // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: jmp __b3 // main::@3 __b3: - // [7] call testInt + // [7] call testInt -- call_phi_near jsr testInt // [8] phi from main::@3 to main::@4 [phi:main::@3->main::@4] __b4_from___b3: jmp __b4 // main::@4 __b4: - // [9] call testLong + // [9] call testLong -- call_phi_near jsr testLong jmp __breturn // main::@return @@ -2255,7 +2255,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [12] call memset - // [74] phi from print_cls to memset [phi:print_cls->memset] + // [74] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -2277,7 +2277,7 @@ testChar: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [80] phi print_str::str#8 = testChar::str [phi:testChar->print_str#1] -- pbuz1=pbuc1 + // [80] phi print_str::str#8 = testChar::str [phi:testChar->print_str#1] -- call_phi_near lda #str @@ -2292,7 +2292,7 @@ testChar: { // [87] phi from testChar::@1 to print_uchar [phi:testChar::@1->print_uchar] print_uchar_from___b1: // [87] phi print_char_cursor#152 = print_char_cursor#1 [phi:testChar::@1->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = testChar::u [phi:testChar::@1->print_uchar#1] -- vbuxx=vbuc1 + // [87] phi print_uchar::b#5 = testChar::u [phi:testChar::@1->print_uchar#1] -- call_phi_near ldx #u jsr print_uchar // [18] phi from testChar::@1 to testChar::@2 [phi:testChar::@1->testChar::@2] @@ -2304,7 +2304,7 @@ testChar: { // [95] phi from testChar::@2 to print_char [phi:testChar::@2->print_char] print_char_from___b2: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testChar::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testChar::@2->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testChar::@2->print_char#1] -- call_phi_near lda #' ' jsr print_char // [20] phi from testChar::@2 to testChar::@3 [phi:testChar::@2->testChar::@3] @@ -2316,7 +2316,7 @@ testChar: { // [87] phi from testChar::@3 to print_uchar [phi:testChar::@3->print_uchar] print_uchar_from___b3: // [87] phi print_char_cursor#152 = print_char_cursor#25 [phi:testChar::@3->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = testChar::n [phi:testChar::@3->print_uchar#1] -- vbuxx=vbuc1 + // [87] phi print_uchar::b#5 = testChar::n [phi:testChar::@3->print_uchar#1] -- call_phi_near ldx #n jsr print_uchar // [22] phi from testChar::@3 to testChar::@4 [phi:testChar::@3->testChar::@4] @@ -2328,7 +2328,7 @@ testChar: { // [95] phi from testChar::@4 to print_char [phi:testChar::@4->print_char] print_char_from___b4: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testChar::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testChar::@4->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testChar::@4->print_char#1] -- call_phi_near lda #' ' jsr print_char // [24] phi from testChar::@4 to testChar::@5 [phi:testChar::@4->testChar::@5] @@ -2337,7 +2337,7 @@ testChar: { // testChar::@5 __b5: // [25] call print_schar - // [99] phi from testChar::@5 to print_schar [phi:testChar::@5->print_schar] + // [99] phi from testChar::@5 to print_schar [phi:testChar::@5->print_schar] -- call_phi_near print_schar_from___b5: jsr print_schar // [26] phi from testChar::@5 to testChar::@6 [phi:testChar::@5->testChar::@6] @@ -2348,7 +2348,7 @@ testChar: { // [27] call print_ln // [105] phi from testChar::@6 to print_ln [phi:testChar::@6->print_ln] print_ln_from___b6: - // [105] phi print_line_cursor#41 = print_screen#0 [phi:testChar::@6->print_ln#0] -- pbuz1=pbuc1 + // [105] phi print_line_cursor#41 = print_screen#0 [phi:testChar::@6->print_ln#0] -- call_phi_near lda #print_screen @@ -2378,7 +2378,7 @@ testShort: { // [80] phi from testShort to print_str [phi:testShort->print_str] print_str_from_testShort: // [80] phi print_char_cursor#159 = print_char_cursor#165 [phi:testShort->print_str#0] -- register_copy - // [80] phi print_str::str#8 = testShort::str [phi:testShort->print_str#1] -- pbuz1=pbuc1 + // [80] phi print_str::str#8 = testShort::str [phi:testShort->print_str#1] -- call_phi_near lda #str @@ -2393,7 +2393,7 @@ testShort: { // [110] phi from testShort::@1 to print_uint [phi:testShort::@1->print_uint] print_uint_from___b1: // [110] phi print_char_cursor#147 = print_char_cursor#1 [phi:testShort::@1->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = testShort::u [phi:testShort::@1->print_uint#1] -- vwuz1=vwuc1 + // [110] phi print_uint::w#5 = testShort::u [phi:testShort::@1->print_uint#1] -- call_phi_near lda #u @@ -2408,7 +2408,7 @@ testShort: { // [95] phi from testShort::@2 to print_char [phi:testShort::@2->print_char] print_char_from___b2: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testShort::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testShort::@2->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testShort::@2->print_char#1] -- call_phi_near lda #' ' jsr print_char // [35] phi from testShort::@2 to testShort::@3 [phi:testShort::@2->testShort::@3] @@ -2419,7 +2419,7 @@ testShort: { // [36] call print_sint // [116] phi from testShort::@3 to print_sint [phi:testShort::@3->print_sint] print_sint_from___b3: - // [116] phi print_sint::w#10 = testShort::n [phi:testShort::@3->print_sint#0] -- vwsz1=vwsc1 + // [116] phi print_sint::w#10 = testShort::n [phi:testShort::@3->print_sint#0] -- call_phi_near lda #n @@ -2434,7 +2434,7 @@ testShort: { // [95] phi from testShort::@4 to print_char [phi:testShort::@4->print_char] print_char_from___b4: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testShort::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testShort::@4->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testShort::@4->print_char#1] -- call_phi_near lda #' ' jsr print_char // [39] phi from testShort::@4 to testShort::@5 [phi:testShort::@4->testShort::@5] @@ -2445,7 +2445,7 @@ testShort: { // [40] call print_sint // [116] phi from testShort::@5 to print_sint [phi:testShort::@5->print_sint] print_sint_from___b5: - // [116] phi print_sint::w#10 = testShort::s [phi:testShort::@5->print_sint#0] -- vwsz1=vwsc1 + // [116] phi print_sint::w#10 = testShort::s [phi:testShort::@5->print_sint#0] -- call_phi_near lda #s @@ -2459,7 +2459,7 @@ testShort: { // [42] call print_ln // [105] phi from testShort::@6 to print_ln [phi:testShort::@6->print_ln] print_ln_from___b6: - // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testShort::@6->print_ln#0] -- register_copy + // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testShort::@6->print_ln#0] -- call_phi_near jsr print_ln jmp __breturn // testShort::@return @@ -2485,7 +2485,7 @@ testInt: { // [80] phi from testInt to print_str [phi:testInt->print_str] print_str_from_testInt: // [80] phi print_char_cursor#159 = print_char_cursor#163 [phi:testInt->print_str#0] -- register_copy - // [80] phi print_str::str#8 = testInt::str [phi:testInt->print_str#1] -- pbuz1=pbuc1 + // [80] phi print_str::str#8 = testInt::str [phi:testInt->print_str#1] -- call_phi_near lda #str @@ -2500,7 +2500,7 @@ testInt: { // [110] phi from testInt::@1 to print_uint [phi:testInt::@1->print_uint] print_uint_from___b1: // [110] phi print_char_cursor#147 = print_char_cursor#1 [phi:testInt::@1->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = testInt::u [phi:testInt::@1->print_uint#1] -- vwuz1=vwuc1 + // [110] phi print_uint::w#5 = testInt::u [phi:testInt::@1->print_uint#1] -- call_phi_near lda #u @@ -2515,7 +2515,7 @@ testInt: { // [95] phi from testInt::@2 to print_char [phi:testInt::@2->print_char] print_char_from___b2: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testInt::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testInt::@2->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testInt::@2->print_char#1] -- call_phi_near lda #' ' jsr print_char // [50] phi from testInt::@2 to testInt::@3 [phi:testInt::@2->testInt::@3] @@ -2526,7 +2526,7 @@ testInt: { // [51] call print_sint // [116] phi from testInt::@3 to print_sint [phi:testInt::@3->print_sint] print_sint_from___b3: - // [116] phi print_sint::w#10 = testInt::n [phi:testInt::@3->print_sint#0] -- vwsz1=vwsc1 + // [116] phi print_sint::w#10 = testInt::n [phi:testInt::@3->print_sint#0] -- call_phi_near lda #n @@ -2541,7 +2541,7 @@ testInt: { // [95] phi from testInt::@4 to print_char [phi:testInt::@4->print_char] print_char_from___b4: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testInt::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testInt::@4->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testInt::@4->print_char#1] -- call_phi_near lda #' ' jsr print_char // [54] phi from testInt::@4 to testInt::@5 [phi:testInt::@4->testInt::@5] @@ -2552,7 +2552,7 @@ testInt: { // [55] call print_sint // [116] phi from testInt::@5 to print_sint [phi:testInt::@5->print_sint] print_sint_from___b5: - // [116] phi print_sint::w#10 = testInt::s [phi:testInt::@5->print_sint#0] -- vwsz1=vwsc1 + // [116] phi print_sint::w#10 = testInt::s [phi:testInt::@5->print_sint#0] -- call_phi_near lda #s @@ -2566,7 +2566,7 @@ testInt: { // [57] call print_ln // [105] phi from testInt::@6 to print_ln [phi:testInt::@6->print_ln] print_ln_from___b6: - // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testInt::@6->print_ln#0] -- register_copy + // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testInt::@6->print_ln#0] -- call_phi_near jsr print_ln jmp __breturn // testInt::@return @@ -2592,7 +2592,7 @@ testLong: { // [80] phi from testLong to print_str [phi:testLong->print_str] print_str_from_testLong: // [80] phi print_char_cursor#159 = print_char_cursor#164 [phi:testLong->print_str#0] -- register_copy - // [80] phi print_str::str#8 = testLong::str [phi:testLong->print_str#1] -- pbuz1=pbuc1 + // [80] phi print_str::str#8 = testLong::str [phi:testLong->print_str#1] -- call_phi_near lda #str @@ -2607,7 +2607,7 @@ testLong: { // [127] phi from testLong::@1 to print_ulong [phi:testLong::@1->print_ulong] print_ulong_from___b1: // [127] phi print_char_cursor#148 = print_char_cursor#1 [phi:testLong::@1->print_ulong#0] -- register_copy - // [127] phi print_ulong::dw#2 = testLong::u [phi:testLong::@1->print_ulong#1] -- vduz1=vduc1 + // [127] phi print_ulong::dw#2 = testLong::u [phi:testLong::@1->print_ulong#1] -- call_phi_near lda #u @@ -2626,7 +2626,7 @@ testLong: { // [95] phi from testLong::@2 to print_char [phi:testLong::@2->print_char] print_char_from___b2: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testLong::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testLong::@2->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testLong::@2->print_char#1] -- call_phi_near lda #' ' jsr print_char // [65] phi from testLong::@2 to testLong::@3 [phi:testLong::@2->testLong::@3] @@ -2637,7 +2637,7 @@ testLong: { // [66] call print_slong // [133] phi from testLong::@3 to print_slong [phi:testLong::@3->print_slong] print_slong_from___b3: - // [133] phi print_slong::dw#3 = testLong::n [phi:testLong::@3->print_slong#0] -- vdsz1=vdsc1 + // [133] phi print_slong::dw#3 = testLong::n [phi:testLong::@3->print_slong#0] -- call_phi_near lda #n @@ -2656,7 +2656,7 @@ testLong: { // [95] phi from testLong::@4 to print_char [phi:testLong::@4->print_char] print_char_from___b4: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testLong::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testLong::@4->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testLong::@4->print_char#1] -- call_phi_near lda #' ' jsr print_char // [69] phi from testLong::@4 to testLong::@5 [phi:testLong::@4->testLong::@5] @@ -2667,7 +2667,7 @@ testLong: { // [70] call print_slong // [133] phi from testLong::@5 to print_slong [phi:testLong::@5->print_slong] print_slong_from___b5: - // [133] phi print_slong::dw#3 = testLong::s [phi:testLong::@5->print_slong#0] -- vdsz1=vdsc1 + // [133] phi print_slong::dw#3 = testLong::s [phi:testLong::@5->print_slong#0] -- call_phi_near lda #s @@ -2685,7 +2685,7 @@ testLong: { // [72] call print_ln // [105] phi from testLong::@6 to print_ln [phi:testLong::@6->print_ln] print_ln_from___b6: - // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testLong::@6->print_ln#0] -- register_copy + // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testLong::@6->print_ln#0] -- call_phi_near jsr print_ln jmp __breturn // testLong::@return @@ -2776,7 +2776,7 @@ print_str: { // [95] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [95] phi print_char_cursor#95 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [95] phi print_char::ch#17 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -2806,7 +2806,7 @@ print_uchar: { // [95] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [95] phi print_char_cursor#95 = print_char_cursor#152 [phi:print_uchar->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = print_char::ch#7 [phi:print_uchar->print_char#1] -- register_copy + // [95] phi print_char::ch#17 = print_char::ch#7 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -2820,7 +2820,7 @@ print_uchar: { // [95] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_uchar::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = print_char::ch#8 [phi:print_uchar::@1->print_char#1] -- register_copy + // [95] phi print_char::ch#17 = print_char::ch#8 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -2860,7 +2860,7 @@ print_schar: { // [95] phi from print_schar::@1 to print_char [phi:print_schar::@1->print_char] print_char_from___b1: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_schar::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = '-' [phi:print_schar::@1->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = '-' [phi:print_schar::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char // [102] phi from print_schar::@1 to print_schar::@2 [phi:print_schar::@1->print_schar::@2] @@ -2872,7 +2872,7 @@ print_schar: { // [87] phi from print_schar::@2 to print_uchar [phi:print_schar::@2->print_uchar] print_uchar_from___b2: // [87] phi print_char_cursor#152 = print_char_cursor#25 [phi:print_schar::@2->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = (char)print_schar::b#0 [phi:print_schar::@2->print_uchar#1] -- vbuxx=vbuc1 + // [87] phi print_uchar::b#5 = (char)print_schar::b#0 [phi:print_schar::@2->print_uchar#1] -- call_phi_near ldx #b jsr print_uchar jmp __breturn @@ -2925,7 +2925,7 @@ print_uint: { // [87] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [87] phi print_char_cursor#152 = print_char_cursor#147 [phi:print_uint->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = print_uchar::b#1 [phi:print_uint->print_uchar#1] -- register_copy + // [87] phi print_uchar::b#5 = print_uchar::b#1 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -2936,7 +2936,7 @@ print_uint: { // [87] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [87] phi print_char_cursor#152 = print_char_cursor#25 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = print_uchar::b#2 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [87] phi print_uchar::b#5 = print_uchar::b#2 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -2961,7 +2961,7 @@ print_sint: { // [95] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] print_char_from___b3: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_sint::@3->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [120] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -2976,7 +2976,7 @@ print_sint: { // [110] phi from print_sint::@2 to print_uint [phi:print_sint::@2->print_uint] print_uint_from___b2: // [110] phi print_char_cursor#147 = print_char_cursor#25 [phi:print_sint::@2->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = print_uint::w#0 [phi:print_sint::@2->print_uint#1] -- register_copy + // [110] phi print_uint::w#5 = print_uint::w#0 [phi:print_sint::@2->print_uint#1] -- call_phi_near jsr print_uint jmp __breturn // print_sint::@return @@ -2992,7 +2992,7 @@ print_sint: { // [95] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] print_char_from___b1: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_sint::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char jmp __b4 @@ -3022,7 +3022,7 @@ print_ulong: { // [110] phi from print_ulong to print_uint [phi:print_ulong->print_uint] print_uint_from_print_ulong: // [110] phi print_char_cursor#147 = print_char_cursor#148 [phi:print_ulong->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = print_uint::w#1 [phi:print_ulong->print_uint#1] -- register_copy + // [110] phi print_uint::w#5 = print_uint::w#1 [phi:print_ulong->print_uint#1] -- call_phi_near jsr print_uint jmp __b1 // print_ulong::@1 @@ -3036,7 +3036,7 @@ print_ulong: { // [110] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] print_uint_from___b1: // [110] phi print_char_cursor#147 = print_char_cursor#25 [phi:print_ulong::@1->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = print_uint::w#2 [phi:print_ulong::@1->print_uint#1] -- register_copy + // [110] phi print_uint::w#5 = print_uint::w#2 [phi:print_ulong::@1->print_uint#1] -- call_phi_near jsr print_uint jmp __breturn // print_ulong::@return @@ -3061,7 +3061,7 @@ print_slong: { // [95] phi from print_slong::@3 to print_char [phi:print_slong::@3->print_char] print_char_from___b3: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_slong::@3->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:print_slong::@3->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:print_slong::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [137] phi from print_slong::@3 print_slong::@4 to print_slong::@2 [phi:print_slong::@3/print_slong::@4->print_slong::@2] @@ -3076,7 +3076,7 @@ print_slong: { // [127] phi from print_slong::@2 to print_ulong [phi:print_slong::@2->print_ulong] print_ulong_from___b2: // [127] phi print_char_cursor#148 = print_char_cursor#25 [phi:print_slong::@2->print_ulong#0] -- register_copy - // [127] phi print_ulong::dw#2 = print_ulong::dw#0 [phi:print_slong::@2->print_ulong#1] -- register_copy + // [127] phi print_ulong::dw#2 = print_ulong::dw#0 [phi:print_slong::@2->print_ulong#1] -- call_phi_near jsr print_ulong jmp __breturn // print_slong::@return @@ -3092,7 +3092,7 @@ print_slong: { // [95] phi from print_slong::@1 to print_char [phi:print_slong::@1->print_char] print_char_from___b1: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_slong::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = '-' [phi:print_slong::@1->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = '-' [phi:print_slong::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char jmp __b4 @@ -3473,28 +3473,28 @@ Score: 2013 main: { // print_cls() // [1] call print_cls - // [11] phi from main to print_cls [phi:main->print_cls] + // [11] phi from main to print_cls [phi:main->print_cls] -- call_phi_near jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // testChar() // [3] call testChar - // [14] phi from main::@1 to testChar [phi:main::@1->testChar] + // [14] phi from main::@1 to testChar [phi:main::@1->testChar] -- call_phi_near jsr testChar // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // testShort() - // [5] call testShort + // [5] call testShort -- call_phi_near jsr testShort // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // testInt() - // [7] call testInt + // [7] call testInt -- call_phi_near jsr testInt // [8] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // testLong() - // [9] call testLong + // [9] call testLong -- call_phi_near jsr testLong // main::@return // } @@ -3506,7 +3506,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [12] call memset - // [74] phi from print_cls to memset [phi:print_cls->memset] + // [74] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -3526,7 +3526,7 @@ testChar: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [80] phi print_str::str#8 = testChar::str [phi:testChar->print_str#1] -- pbuz1=pbuc1 + // [80] phi print_str::str#8 = testChar::str [phi:testChar->print_str#1] -- call_phi_near lda #str @@ -3538,7 +3538,7 @@ testChar: { // [17] call print_uchar // [87] phi from testChar::@1 to print_uchar [phi:testChar::@1->print_uchar] // [87] phi print_char_cursor#152 = print_char_cursor#1 [phi:testChar::@1->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = testChar::u [phi:testChar::@1->print_uchar#1] -- vbuxx=vbuc1 + // [87] phi print_uchar::b#5 = testChar::u [phi:testChar::@1->print_uchar#1] -- call_phi_near ldx #u jsr print_uchar // [18] phi from testChar::@1 to testChar::@2 [phi:testChar::@1->testChar::@2] @@ -3547,7 +3547,7 @@ testChar: { // [19] call print_char // [95] phi from testChar::@2 to print_char [phi:testChar::@2->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testChar::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testChar::@2->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testChar::@2->print_char#1] -- call_phi_near lda #' ' jsr print_char // [20] phi from testChar::@2 to testChar::@3 [phi:testChar::@2->testChar::@3] @@ -3556,7 +3556,7 @@ testChar: { // [21] call print_uchar // [87] phi from testChar::@3 to print_uchar [phi:testChar::@3->print_uchar] // [87] phi print_char_cursor#152 = print_char_cursor#25 [phi:testChar::@3->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = testChar::n [phi:testChar::@3->print_uchar#1] -- vbuxx=vbuc1 + // [87] phi print_uchar::b#5 = testChar::n [phi:testChar::@3->print_uchar#1] -- call_phi_near ldx #n jsr print_uchar // [22] phi from testChar::@3 to testChar::@4 [phi:testChar::@3->testChar::@4] @@ -3565,21 +3565,21 @@ testChar: { // [23] call print_char // [95] phi from testChar::@4 to print_char [phi:testChar::@4->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testChar::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testChar::@4->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testChar::@4->print_char#1] -- call_phi_near lda #' ' jsr print_char // [24] phi from testChar::@4 to testChar::@5 [phi:testChar::@4->testChar::@5] // testChar::@5 // print_schar(s) // [25] call print_schar - // [99] phi from testChar::@5 to print_schar [phi:testChar::@5->print_schar] + // [99] phi from testChar::@5 to print_schar [phi:testChar::@5->print_schar] -- call_phi_near jsr print_schar // [26] phi from testChar::@5 to testChar::@6 [phi:testChar::@5->testChar::@6] // testChar::@6 // print_ln() // [27] call print_ln // [105] phi from testChar::@6 to print_ln [phi:testChar::@6->print_ln] - // [105] phi print_line_cursor#41 = print_screen#0 [phi:testChar::@6->print_ln#0] -- pbuz1=pbuc1 + // [105] phi print_line_cursor#41 = print_screen#0 [phi:testChar::@6->print_ln#0] -- call_phi_near lda #print_screen @@ -3608,7 +3608,7 @@ testShort: { // [30] call print_str // [80] phi from testShort to print_str [phi:testShort->print_str] // [80] phi print_char_cursor#159 = print_char_cursor#165 [phi:testShort->print_str#0] -- register_copy - // [80] phi print_str::str#8 = testShort::str [phi:testShort->print_str#1] -- pbuz1=pbuc1 + // [80] phi print_str::str#8 = testShort::str [phi:testShort->print_str#1] -- call_phi_near lda #str @@ -3620,7 +3620,7 @@ testShort: { // [32] call print_uint // [110] phi from testShort::@1 to print_uint [phi:testShort::@1->print_uint] // [110] phi print_char_cursor#147 = print_char_cursor#1 [phi:testShort::@1->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = testShort::u [phi:testShort::@1->print_uint#1] -- vwuz1=vwuc1 + // [110] phi print_uint::w#5 = testShort::u [phi:testShort::@1->print_uint#1] -- call_phi_near lda #u @@ -3632,7 +3632,7 @@ testShort: { // [34] call print_char // [95] phi from testShort::@2 to print_char [phi:testShort::@2->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testShort::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testShort::@2->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testShort::@2->print_char#1] -- call_phi_near lda #' ' jsr print_char // [35] phi from testShort::@2 to testShort::@3 [phi:testShort::@2->testShort::@3] @@ -3640,7 +3640,7 @@ testShort: { // print_sint(n) // [36] call print_sint // [116] phi from testShort::@3 to print_sint [phi:testShort::@3->print_sint] - // [116] phi print_sint::w#10 = testShort::n [phi:testShort::@3->print_sint#0] -- vwsz1=vwsc1 + // [116] phi print_sint::w#10 = testShort::n [phi:testShort::@3->print_sint#0] -- call_phi_near lda #n @@ -3652,7 +3652,7 @@ testShort: { // [38] call print_char // [95] phi from testShort::@4 to print_char [phi:testShort::@4->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testShort::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testShort::@4->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testShort::@4->print_char#1] -- call_phi_near lda #' ' jsr print_char // [39] phi from testShort::@4 to testShort::@5 [phi:testShort::@4->testShort::@5] @@ -3660,7 +3660,7 @@ testShort: { // print_sint(s) // [40] call print_sint // [116] phi from testShort::@5 to print_sint [phi:testShort::@5->print_sint] - // [116] phi print_sint::w#10 = testShort::s [phi:testShort::@5->print_sint#0] -- vwsz1=vwsc1 + // [116] phi print_sint::w#10 = testShort::s [phi:testShort::@5->print_sint#0] -- call_phi_near lda #s @@ -3671,7 +3671,7 @@ testShort: { // print_ln() // [42] call print_ln // [105] phi from testShort::@6 to print_ln [phi:testShort::@6->print_ln] - // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testShort::@6->print_ln#0] -- register_copy + // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testShort::@6->print_ln#0] -- call_phi_near jsr print_ln // testShort::@return // } @@ -3696,7 +3696,7 @@ testInt: { // [45] call print_str // [80] phi from testInt to print_str [phi:testInt->print_str] // [80] phi print_char_cursor#159 = print_char_cursor#163 [phi:testInt->print_str#0] -- register_copy - // [80] phi print_str::str#8 = testInt::str [phi:testInt->print_str#1] -- pbuz1=pbuc1 + // [80] phi print_str::str#8 = testInt::str [phi:testInt->print_str#1] -- call_phi_near lda #str @@ -3708,7 +3708,7 @@ testInt: { // [47] call print_uint // [110] phi from testInt::@1 to print_uint [phi:testInt::@1->print_uint] // [110] phi print_char_cursor#147 = print_char_cursor#1 [phi:testInt::@1->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = testInt::u [phi:testInt::@1->print_uint#1] -- vwuz1=vwuc1 + // [110] phi print_uint::w#5 = testInt::u [phi:testInt::@1->print_uint#1] -- call_phi_near lda #u @@ -3720,7 +3720,7 @@ testInt: { // [49] call print_char // [95] phi from testInt::@2 to print_char [phi:testInt::@2->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testInt::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testInt::@2->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testInt::@2->print_char#1] -- call_phi_near lda #' ' jsr print_char // [50] phi from testInt::@2 to testInt::@3 [phi:testInt::@2->testInt::@3] @@ -3728,7 +3728,7 @@ testInt: { // print_sint(n) // [51] call print_sint // [116] phi from testInt::@3 to print_sint [phi:testInt::@3->print_sint] - // [116] phi print_sint::w#10 = testInt::n [phi:testInt::@3->print_sint#0] -- vwsz1=vwsc1 + // [116] phi print_sint::w#10 = testInt::n [phi:testInt::@3->print_sint#0] -- call_phi_near lda #n @@ -3740,7 +3740,7 @@ testInt: { // [53] call print_char // [95] phi from testInt::@4 to print_char [phi:testInt::@4->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testInt::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testInt::@4->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testInt::@4->print_char#1] -- call_phi_near lda #' ' jsr print_char // [54] phi from testInt::@4 to testInt::@5 [phi:testInt::@4->testInt::@5] @@ -3748,7 +3748,7 @@ testInt: { // print_sint(s) // [55] call print_sint // [116] phi from testInt::@5 to print_sint [phi:testInt::@5->print_sint] - // [116] phi print_sint::w#10 = testInt::s [phi:testInt::@5->print_sint#0] -- vwsz1=vwsc1 + // [116] phi print_sint::w#10 = testInt::s [phi:testInt::@5->print_sint#0] -- call_phi_near lda #s @@ -3759,7 +3759,7 @@ testInt: { // print_ln() // [57] call print_ln // [105] phi from testInt::@6 to print_ln [phi:testInt::@6->print_ln] - // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testInt::@6->print_ln#0] -- register_copy + // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testInt::@6->print_ln#0] -- call_phi_near jsr print_ln // testInt::@return // } @@ -3784,7 +3784,7 @@ testLong: { // [60] call print_str // [80] phi from testLong to print_str [phi:testLong->print_str] // [80] phi print_char_cursor#159 = print_char_cursor#164 [phi:testLong->print_str#0] -- register_copy - // [80] phi print_str::str#8 = testLong::str [phi:testLong->print_str#1] -- pbuz1=pbuc1 + // [80] phi print_str::str#8 = testLong::str [phi:testLong->print_str#1] -- call_phi_near lda #str @@ -3796,7 +3796,7 @@ testLong: { // [62] call print_ulong // [127] phi from testLong::@1 to print_ulong [phi:testLong::@1->print_ulong] // [127] phi print_char_cursor#148 = print_char_cursor#1 [phi:testLong::@1->print_ulong#0] -- register_copy - // [127] phi print_ulong::dw#2 = testLong::u [phi:testLong::@1->print_ulong#1] -- vduz1=vduc1 + // [127] phi print_ulong::dw#2 = testLong::u [phi:testLong::@1->print_ulong#1] -- call_phi_near lda #u @@ -3812,7 +3812,7 @@ testLong: { // [64] call print_char // [95] phi from testLong::@2 to print_char [phi:testLong::@2->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testLong::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testLong::@2->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testLong::@2->print_char#1] -- call_phi_near lda #' ' jsr print_char // [65] phi from testLong::@2 to testLong::@3 [phi:testLong::@2->testLong::@3] @@ -3820,7 +3820,7 @@ testLong: { // print_slong(n) // [66] call print_slong // [133] phi from testLong::@3 to print_slong [phi:testLong::@3->print_slong] - // [133] phi print_slong::dw#3 = testLong::n [phi:testLong::@3->print_slong#0] -- vdsz1=vdsc1 + // [133] phi print_slong::dw#3 = testLong::n [phi:testLong::@3->print_slong#0] -- call_phi_near lda #n @@ -3836,7 +3836,7 @@ testLong: { // [68] call print_char // [95] phi from testLong::@4 to print_char [phi:testLong::@4->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testLong::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testLong::@4->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:testLong::@4->print_char#1] -- call_phi_near lda #' ' jsr print_char // [69] phi from testLong::@4 to testLong::@5 [phi:testLong::@4->testLong::@5] @@ -3844,7 +3844,7 @@ testLong: { // print_slong(s) // [70] call print_slong // [133] phi from testLong::@5 to print_slong [phi:testLong::@5->print_slong] - // [133] phi print_slong::dw#3 = testLong::s [phi:testLong::@5->print_slong#0] -- vdsz1=vdsc1 + // [133] phi print_slong::dw#3 = testLong::s [phi:testLong::@5->print_slong#0] -- call_phi_near lda #s @@ -3859,7 +3859,7 @@ testLong: { // print_ln() // [72] call print_ln // [105] phi from testLong::@6 to print_ln [phi:testLong::@6->print_ln] - // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testLong::@6->print_ln#0] -- register_copy + // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testLong::@6->print_ln#0] -- call_phi_near jsr print_ln // testLong::@return // } @@ -3945,7 +3945,7 @@ print_str: { // [85] call print_char // [95] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [95] phi print_char::ch#17 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); @@ -3975,7 +3975,7 @@ print_uchar: { // Table of hexadecimal digits // [95] phi from print_uchar to print_char [phi:print_uchar->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#152 [phi:print_uchar->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = print_char::ch#7 [phi:print_uchar->print_char#1] -- register_copy + // [95] phi print_char::ch#17 = print_char::ch#7 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -3988,7 +3988,7 @@ print_uchar: { // [93] call print_char // [95] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_uchar::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = print_char::ch#8 [phi:print_uchar::@1->print_char#1] -- register_copy + // [95] phi print_char::ch#17 = print_char::ch#8 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } @@ -4025,7 +4025,7 @@ print_schar: { // [101] call print_char // [95] phi from print_schar::@1 to print_char [phi:print_schar::@1->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_schar::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = '-' [phi:print_schar::@1->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = '-' [phi:print_schar::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char // [102] phi from print_schar::@1 to print_schar::@2 [phi:print_schar::@1->print_schar::@2] @@ -4034,7 +4034,7 @@ print_schar: { // [103] call print_uchar // [87] phi from print_schar::@2 to print_uchar [phi:print_schar::@2->print_uchar] // [87] phi print_char_cursor#152 = print_char_cursor#25 [phi:print_schar::@2->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = (char)print_schar::b#0 [phi:print_schar::@2->print_uchar#1] -- vbuxx=vbuc1 + // [87] phi print_uchar::b#5 = (char)print_schar::b#0 [phi:print_schar::@2->print_uchar#1] -- call_phi_near ldx #b jsr print_uchar // print_schar::@return @@ -4084,7 +4084,7 @@ print_uint: { // [112] call print_uchar // [87] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [87] phi print_char_cursor#152 = print_char_cursor#147 [phi:print_uint->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = print_uchar::b#1 [phi:print_uint->print_uchar#1] -- register_copy + // [87] phi print_uchar::b#5 = print_uchar::b#1 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -4093,7 +4093,7 @@ print_uint: { // [114] call print_uchar // [87] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [87] phi print_char_cursor#152 = print_char_cursor#25 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = print_uchar::b#2 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [87] phi print_uchar::b#5 = print_uchar::b#2 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -4115,7 +4115,7 @@ print_sint: { // [119] call print_char // [95] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_sint::@3->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [120] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -4127,7 +4127,7 @@ print_sint: { // [122] call print_uint // [110] phi from print_sint::@2 to print_uint [phi:print_sint::@2->print_uint] // [110] phi print_char_cursor#147 = print_char_cursor#25 [phi:print_sint::@2->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = print_uint::w#0 [phi:print_sint::@2->print_uint#1] -- register_copy + // [110] phi print_uint::w#5 = print_uint::w#0 [phi:print_sint::@2->print_uint#1] -- call_phi_near jsr print_uint // print_sint::@return // } @@ -4140,7 +4140,7 @@ print_sint: { // [125] call print_char // [95] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_sint::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char // print_sint::@4 @@ -4169,7 +4169,7 @@ print_ulong: { // [129] call print_uint // [110] phi from print_ulong to print_uint [phi:print_ulong->print_uint] // [110] phi print_char_cursor#147 = print_char_cursor#148 [phi:print_ulong->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = print_uint::w#1 [phi:print_ulong->print_uint#1] -- register_copy + // [110] phi print_uint::w#5 = print_uint::w#1 [phi:print_ulong->print_uint#1] -- call_phi_near jsr print_uint // print_ulong::@1 // print_uint(WORD0(dw)) @@ -4181,7 +4181,7 @@ print_ulong: { // [131] call print_uint // [110] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] // [110] phi print_char_cursor#147 = print_char_cursor#25 [phi:print_ulong::@1->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = print_uint::w#2 [phi:print_ulong::@1->print_uint#1] -- register_copy + // [110] phi print_uint::w#5 = print_uint::w#2 [phi:print_ulong::@1->print_uint#1] -- call_phi_near jsr print_uint // print_ulong::@return // } @@ -4203,7 +4203,7 @@ print_slong: { // [136] call print_char // [95] phi from print_slong::@3 to print_char [phi:print_slong::@3->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_slong::@3->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:print_slong::@3->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = ' ' [phi:print_slong::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [137] phi from print_slong::@3 print_slong::@4 to print_slong::@2 [phi:print_slong::@3/print_slong::@4->print_slong::@2] @@ -4215,7 +4215,7 @@ print_slong: { // [139] call print_ulong // [127] phi from print_slong::@2 to print_ulong [phi:print_slong::@2->print_ulong] // [127] phi print_char_cursor#148 = print_char_cursor#25 [phi:print_slong::@2->print_ulong#0] -- register_copy - // [127] phi print_ulong::dw#2 = print_ulong::dw#0 [phi:print_slong::@2->print_ulong#1] -- register_copy + // [127] phi print_ulong::dw#2 = print_ulong::dw#0 [phi:print_slong::@2->print_ulong#1] -- call_phi_near jsr print_ulong // print_slong::@return // } @@ -4228,7 +4228,7 @@ print_slong: { // [142] call print_char // [95] phi from print_slong::@1 to print_char [phi:print_slong::@1->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_slong::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = '-' [phi:print_slong::@1->print_char#1] -- vbuaa=vbuc1 + // [95] phi print_char::ch#17 = '-' [phi:print_slong::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char // print_slong::@4 diff --git a/src/test/ref/c64dtv-8bppcharstretch.log b/src/test/ref/c64dtv-8bppcharstretch.log index 9e674183c..f7b3c6de1 100644 --- a/src/test/ref/c64dtv-8bppcharstretch.log +++ b/src/test/ref/c64dtv-8bppcharstretch.log @@ -1380,7 +1380,7 @@ main: { lda #PROCPORT_RAM_IO sta.z PROCPORT // [3] call gfx_init - // [40] phi from main to gfx_init [phi:main->gfx_init] + // [40] phi from main to gfx_init [phi:main->gfx_init] -- call_phi_near gfx_init_from_main: jsr gfx_init jmp __b6 @@ -1592,7 +1592,7 @@ main: { // Initialize the different graphics in the memory gfx_init: { // [41] call gfx_init_screen0 - // [45] phi from gfx_init to gfx_init_screen0 [phi:gfx_init->gfx_init_screen0] + // [45] phi from gfx_init to gfx_init_screen0 [phi:gfx_init->gfx_init_screen0] -- call_phi_near gfx_init_screen0_from_gfx_init: jsr gfx_init_screen0 // [42] phi from gfx_init to gfx_init::@1 [phi:gfx_init->gfx_init::@1] @@ -1601,7 +1601,7 @@ gfx_init: { // gfx_init::@1 __b1: // [43] call gfx_init_plane_charset8 - // [59] phi from gfx_init::@1 to gfx_init_plane_charset8 [phi:gfx_init::@1->gfx_init_plane_charset8] + // [59] phi from gfx_init::@1 to gfx_init_plane_charset8 [phi:gfx_init::@1->gfx_init_plane_charset8] -- call_phi_near gfx_init_plane_charset8_from___b1: jsr gfx_init_plane_charset8 jmp __breturn @@ -1703,7 +1703,7 @@ gfx_init_plane_charset8: { // [60] call dtvSetCpuBankSegment1 // [84] phi from gfx_init_plane_charset8 to dtvSetCpuBankSegment1 [phi:gfx_init_plane_charset8->dtvSetCpuBankSegment1] dtvSetCpuBankSegment1_from_gfx_init_plane_charset8: - // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = gfx_init_plane_charset8::gfxbCpuBank#0 [phi:gfx_init_plane_charset8->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 + // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = gfx_init_plane_charset8::gfxbCpuBank#0 [phi:gfx_init_plane_charset8->dtvSetCpuBankSegment1#0] -- call_phi_near lda #gfxbCpuBank jsr dtvSetCpuBankSegment1 jmp __b9 @@ -1850,7 +1850,7 @@ gfx_init_plane_charset8: { // Reset CPU BANK segment to $4000 // [84] phi from gfx_init_plane_charset8::@8 to dtvSetCpuBankSegment1 [phi:gfx_init_plane_charset8::@8->dtvSetCpuBankSegment1] dtvSetCpuBankSegment1_from___b8: - // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = (char)$4000/$4000 [phi:gfx_init_plane_charset8::@8->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 + // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = (char)$4000/$4000 [phi:gfx_init_plane_charset8::@8->dtvSetCpuBankSegment1#0] -- call_phi_near lda #$4000/$4000 jsr dtvSetCpuBankSegment1 jmp __breturn @@ -2224,7 +2224,7 @@ main: { sta.z PROCPORT // gfx_init() // [3] call gfx_init - // [40] phi from main to gfx_init [phi:main->gfx_init] + // [40] phi from main to gfx_init [phi:main->gfx_init] -- call_phi_near jsr gfx_init // main::@6 // *DTV_FEATURE = DTV_FEATURE_ENABLE @@ -2454,13 +2454,13 @@ main: { gfx_init: { // gfx_init_screen0() // [41] call gfx_init_screen0 - // [45] phi from gfx_init to gfx_init_screen0 [phi:gfx_init->gfx_init_screen0] + // [45] phi from gfx_init to gfx_init_screen0 [phi:gfx_init->gfx_init_screen0] -- call_phi_near jsr gfx_init_screen0 // [42] phi from gfx_init to gfx_init::@1 [phi:gfx_init->gfx_init::@1] // gfx_init::@1 // gfx_init_plane_charset8() // [43] call gfx_init_plane_charset8 - // [59] phi from gfx_init::@1 to gfx_init_plane_charset8 [phi:gfx_init::@1->gfx_init_plane_charset8] + // [59] phi from gfx_init::@1 to gfx_init_plane_charset8 [phi:gfx_init::@1->gfx_init_plane_charset8] -- call_phi_near jsr gfx_init_plane_charset8 // gfx_init::@return // } @@ -2557,7 +2557,7 @@ gfx_init_plane_charset8: { // dtvSetCpuBankSegment1(gfxbCpuBank++) // [60] call dtvSetCpuBankSegment1 // [84] phi from gfx_init_plane_charset8 to dtvSetCpuBankSegment1 [phi:gfx_init_plane_charset8->dtvSetCpuBankSegment1] - // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = gfx_init_plane_charset8::gfxbCpuBank#0 [phi:gfx_init_plane_charset8->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 + // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = gfx_init_plane_charset8::gfxbCpuBank#0 [phi:gfx_init_plane_charset8->dtvSetCpuBankSegment1#0] -- call_phi_near lda #gfxbCpuBank jsr dtvSetCpuBankSegment1 // gfx_init_plane_charset8::@9 @@ -2691,7 +2691,7 @@ gfx_init_plane_charset8: { // [82] call dtvSetCpuBankSegment1 // Reset CPU BANK segment to $4000 // [84] phi from gfx_init_plane_charset8::@8 to dtvSetCpuBankSegment1 [phi:gfx_init_plane_charset8::@8->dtvSetCpuBankSegment1] - // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = (char)$4000/$4000 [phi:gfx_init_plane_charset8::@8->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 + // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = (char)$4000/$4000 [phi:gfx_init_plane_charset8::@8->dtvSetCpuBankSegment1#0] -- call_phi_near lda #$4000/$4000 jsr dtvSetCpuBankSegment1 // gfx_init_plane_charset8::@return diff --git a/src/test/ref/c64dtv-8bppchunkystretch.log b/src/test/ref/c64dtv-8bppchunkystretch.log index 932a1908c..5f14475bb 100644 --- a/src/test/ref/c64dtv-8bppchunkystretch.log +++ b/src/test/ref/c64dtv-8bppchunkystretch.log @@ -911,7 +911,7 @@ main: { lda #PROCPORT_RAM_IO sta.z PROCPORT // [3] call gfx_init_chunky - // [34] phi from main to gfx_init_chunky [phi:main->gfx_init_chunky] + // [34] phi from main to gfx_init_chunky [phi:main->gfx_init_chunky] -- call_phi_near gfx_init_chunky_from_main: jsr gfx_init_chunky jmp __b6 @@ -1110,7 +1110,7 @@ gfx_init_chunky: { // [35] call dtvSetCpuBankSegment1 // [54] phi from gfx_init_chunky to dtvSetCpuBankSegment1 [phi:gfx_init_chunky->dtvSetCpuBankSegment1] dtvSetCpuBankSegment1_from_gfx_init_chunky: - // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)CHUNKY/$4000 [phi:gfx_init_chunky->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 + // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)CHUNKY/$4000 [phi:gfx_init_chunky->dtvSetCpuBankSegment1#0] -- call_phi_near lda #CHUNKY/$4000 jsr dtvSetCpuBankSegment1 // [36] phi from gfx_init_chunky to gfx_init_chunky::@1 [phi:gfx_init_chunky->gfx_init_chunky::@1] @@ -1167,7 +1167,7 @@ gfx_init_chunky: { // [40] call dtvSetCpuBankSegment1 // [54] phi from gfx_init_chunky::@4 to dtvSetCpuBankSegment1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1] dtvSetCpuBankSegment1_from___b4: - // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = dtvSetCpuBankSegment1::cpuBankIdx#1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1#0] -- register_copy + // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = dtvSetCpuBankSegment1::cpuBankIdx#1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1#0] -- call_phi_near jsr dtvSetCpuBankSegment1 jmp __b7 // gfx_init_chunky::@7 @@ -1238,7 +1238,7 @@ gfx_init_chunky: { // Reset CPU BANK segment to $4000 // [54] phi from gfx_init_chunky::@6 to dtvSetCpuBankSegment1 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1] dtvSetCpuBankSegment1_from___b6: - // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)$4000/$4000 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 + // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)$4000/$4000 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1#0] -- call_phi_near lda #$4000/$4000 jsr dtvSetCpuBankSegment1 jmp __breturn @@ -1530,7 +1530,7 @@ main: { sta.z PROCPORT // gfx_init_chunky() // [3] call gfx_init_chunky - // [34] phi from main to gfx_init_chunky [phi:main->gfx_init_chunky] + // [34] phi from main to gfx_init_chunky [phi:main->gfx_init_chunky] -- call_phi_near jsr gfx_init_chunky // main::@6 // *DTV_FEATURE = DTV_FEATURE_ENABLE @@ -1744,7 +1744,7 @@ gfx_init_chunky: { // dtvSetCpuBankSegment1(gfxbCpuBank++) // [35] call dtvSetCpuBankSegment1 // [54] phi from gfx_init_chunky to dtvSetCpuBankSegment1 [phi:gfx_init_chunky->dtvSetCpuBankSegment1] - // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)CHUNKY/$4000 [phi:gfx_init_chunky->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 + // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)CHUNKY/$4000 [phi:gfx_init_chunky->dtvSetCpuBankSegment1#0] -- call_phi_near lda #CHUNKY/$4000 jsr dtvSetCpuBankSegment1 // [36] phi from gfx_init_chunky to gfx_init_chunky::@1 [phi:gfx_init_chunky->gfx_init_chunky::@1] @@ -1791,7 +1791,7 @@ gfx_init_chunky: { txa // [40] call dtvSetCpuBankSegment1 // [54] phi from gfx_init_chunky::@4 to dtvSetCpuBankSegment1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1] - // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = dtvSetCpuBankSegment1::cpuBankIdx#1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1#0] -- register_copy + // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = dtvSetCpuBankSegment1::cpuBankIdx#1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1#0] -- call_phi_near jsr dtvSetCpuBankSegment1 // gfx_init_chunky::@7 // dtvSetCpuBankSegment1(gfxbCpuBank++); @@ -1858,7 +1858,7 @@ gfx_init_chunky: { // [52] call dtvSetCpuBankSegment1 // Reset CPU BANK segment to $4000 // [54] phi from gfx_init_chunky::@6 to dtvSetCpuBankSegment1 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1] - // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)$4000/$4000 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 + // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)$4000/$4000 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1#0] -- call_phi_near lda #$4000/$4000 jsr dtvSetCpuBankSegment1 // gfx_init_chunky::@return diff --git a/src/test/ref/call-banked-phi-case-1-near-0.log b/src/test/ref/call-banked-phi-case-1-near-0.log index be8ee4301..9e790fe29 100644 --- a/src/test/ref/call-banked-phi-case-1-near-0.log +++ b/src/test/ref/call-banked-phi-case-1-near-0.log @@ -179,7 +179,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call__phi_near_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_near plus_from_main: jsr plus jmp __b1 @@ -259,7 +259,7 @@ Score: 24 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call__phi_near_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_near jsr plus // main::@1 // SCREEN[0] = plus('0', 7) diff --git a/src/test/ref/call-banked-phi-case-1-near-1.log b/src/test/ref/call-banked-phi-case-1-near-1.log index b205976e7..21e4fb39b 100644 --- a/src/test/ref/call-banked-phi-case-1-near-1.log +++ b/src/test/ref/call-banked-phi-case-1-near-1.log @@ -248,7 +248,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call__phi_near_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_near plus_from_main: jsr plus jmp __b1 @@ -269,7 +269,7 @@ plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_near min_from_plus: jsr min jmp __breturn @@ -348,7 +348,7 @@ Score: 36 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call__phi_near_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_near jsr plus // main::@1 // SCREEN[0] = plus('0', 7) @@ -367,7 +367,7 @@ plus: { .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_near jsr min // plus::@return // } diff --git a/src/test/ref/call-banked-phi-case-2-close-0.log b/src/test/ref/call-banked-phi-case-2-close-0.log index 5d4cd8f5d..3f5fa068e 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.log +++ b/src/test/ref/call-banked-phi-case-2-close-0.log @@ -180,7 +180,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: lda #1 sta.z 0 @@ -266,7 +266,7 @@ Score: 39 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram lda #1 sta.z 0 pha diff --git a/src/test/ref/call-banked-phi-case-2-close-1.log b/src/test/ref/call-banked-phi-case-2-close-1.log index 6ddc743fb..60a66095a 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.log +++ b/src/test/ref/call-banked-phi-case-2-close-1.log @@ -180,7 +180,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: lda #1 sta.z 0 @@ -266,7 +266,7 @@ Score: 39 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram lda #1 sta.z 0 pha diff --git a/src/test/ref/call-banked-phi-case-3-near-0.log b/src/test/ref/call-banked-phi-case-3-near-0.log index 37da8004c..5b3a50214 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.log +++ b/src/test/ref/call-banked-phi-case-3-near-0.log @@ -249,7 +249,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: lda #1 sta.z 0 @@ -276,7 +276,7 @@ plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_near min_from_plus: jsr min jmp __breturn @@ -356,7 +356,7 @@ Score: 51 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram lda #1 sta.z 0 pha @@ -381,7 +381,7 @@ plus: { .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_near jsr min // plus::@return // } diff --git a/src/test/ref/call-banked-phi-case-3-near-1.log b/src/test/ref/call-banked-phi-case-3-near-1.log index 26e30a500..990511052 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.log +++ b/src/test/ref/call-banked-phi-case-3-near-1.log @@ -249,7 +249,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: lda #1 sta.z 0 @@ -276,7 +276,7 @@ plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_near min_from_plus: jsr min jmp __breturn @@ -356,7 +356,7 @@ Score: 51 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram lda #1 sta.z 0 pha @@ -381,7 +381,7 @@ plus: { .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_near jsr min // plus::@return // } diff --git a/src/test/ref/call-banked-phi-case-4-near-0.log b/src/test/ref/call-banked-phi-case-4-near-0.log index a484d0a46..25e2d2255 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.log +++ b/src/test/ref/call-banked-phi-case-4-near-0.log @@ -249,7 +249,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: lda #1 sta.z 0 @@ -276,7 +276,7 @@ plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_near min_from_plus: jsr min jmp __breturn @@ -355,7 +355,7 @@ Score: 51 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram lda #1 sta.z 0 pha @@ -380,7 +380,7 @@ plus: { .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_near jsr min // plus::@return // } diff --git a/src/test/ref/call-banked-phi-case-4-near-1.log b/src/test/ref/call-banked-phi-case-4-near-1.log index 03c157545..54b44c7af 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.log +++ b/src/test/ref/call-banked-phi-case-4-near-1.log @@ -249,7 +249,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: lda #1 sta.z 0 @@ -276,7 +276,7 @@ plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_near min_from_plus: jsr min jmp __breturn @@ -355,7 +355,7 @@ Score: 51 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram lda #1 sta.z 0 pha @@ -380,7 +380,7 @@ plus: { .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call__phi_near_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_near jsr min // plus::@return // } diff --git a/src/test/ref/call-banked-phi-case-5-far-0.log b/src/test/ref/call-banked-phi-case-5-far-0.log index ea2ec7bee..a98cea7ee 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.log +++ b/src/test/ref/call-banked-phi-case-5-far-0.log @@ -249,7 +249,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: lda #1 sta.z 0 @@ -276,7 +276,7 @@ plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_cx16_ram_phi_far_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_far_cx16_ram min_from_plus: jsr $ff6e .byte plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram lda #1 sta.z 0 pha @@ -384,7 +384,7 @@ plus: { .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_cx16_ram_phi_far_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_far_cx16_ram jsr $ff6e .byte min diff --git a/src/test/ref/call-banked-phi-case-5-far-1.log b/src/test/ref/call-banked-phi-case-5-far-1.log index 4527d9a6f..360fff834 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.log +++ b/src/test/ref/call-banked-phi-case-5-far-1.log @@ -249,7 +249,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: lda #1 sta.z 0 @@ -276,7 +276,7 @@ plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_cx16_ram_phi_far_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_far_cx16_ram min_from_plus: jsr $ff6e .byte plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram lda #1 sta.z 0 pha @@ -384,7 +384,7 @@ plus: { .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_cx16_ram_phi_far_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_far_cx16_ram jsr $ff6e .byte min diff --git a/src/test/ref/call-banked-phi-case-6-close-0.log b/src/test/ref/call-banked-phi-case-6-close-0.log index aba095156..fce99e78f 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.log +++ b/src/test/ref/call-banked-phi-case-6-close-0.log @@ -250,7 +250,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: lda #1 sta.z 0 @@ -277,7 +277,7 @@ plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_cx16_rom_phi_close_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_close_cx16_rom min_from_plus: lda #1 sta.z 1 @@ -362,7 +362,7 @@ Score: 66 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram lda #1 sta.z 0 pha @@ -387,7 +387,7 @@ plus: { .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_cx16_rom_phi_close_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_close_cx16_rom lda #1 sta.z 1 pha diff --git a/src/test/ref/call-banked-phi-case-6-close-1.log b/src/test/ref/call-banked-phi-case-6-close-1.log index 047340878..37e02e3ea 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.log +++ b/src/test/ref/call-banked-phi-case-6-close-1.log @@ -250,7 +250,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: lda #1 sta.z 0 @@ -277,7 +277,7 @@ plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_cx16_rom_phi_close_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_close_cx16_rom min_from_plus: lda #1 sta.z 1 @@ -362,7 +362,7 @@ Score: 66 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_cx16_ram_phi_close_finalize + // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram lda #1 sta.z 0 pha @@ -387,7 +387,7 @@ plus: { .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_cx16_rom_phi_close_finalize + // [7] phi from plus to min [phi:plus->min] -- call_phi_close_cx16_rom lda #1 sta.z 1 pha diff --git a/src/test/ref/call-parameter-autocast.log b/src/test/ref/call-parameter-autocast.log index c86f830af..51c9246e2 100644 --- a/src/test/ref/call-parameter-autocast.log +++ b/src/test/ref/call-parameter-autocast.log @@ -261,7 +261,7 @@ main: { sta.z print.w lda #>$1234 sta.z print.w+1 - // [7] phi idx#13 = 0 [phi:main->print#1] -- vbuxx=vbuc1 + // [7] phi idx#13 = 0 [phi:main->print#1] -- call_phi_near ldx #0 jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -277,7 +277,7 @@ main: { sta.z print.w lda #>w sta.z print.w+1 - // [7] phi idx#13 = idx#14 [phi:main::@1->print#1] -- register_copy + // [7] phi idx#13 = idx#14 [phi:main::@1->print#1] -- call_phi_near jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -292,7 +292,7 @@ main: { sta.z print.w lda #>$12*$100+$34 sta.z print.w+1 - // [7] phi idx#13 = idx#14 [phi:main::@2->print#1] -- register_copy + // [7] phi idx#13 = idx#14 [phi:main::@2->print#1] -- call_phi_near jsr print jmp __breturn // main::@return @@ -386,7 +386,7 @@ main: { sta.z print.w lda #>$1234 sta.z print.w+1 - // [7] phi idx#13 = 0 [phi:main->print#1] -- vbuxx=vbuc1 + // [7] phi idx#13 = 0 [phi:main->print#1] -- call_phi_near ldx #0 jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -399,7 +399,7 @@ main: { sta.z print.w lda #>w sta.z print.w+1 - // [7] phi idx#13 = idx#14 [phi:main::@1->print#1] -- register_copy + // [7] phi idx#13 = idx#14 [phi:main::@1->print#1] -- call_phi_near jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 @@ -411,7 +411,7 @@ main: { sta.z print.w lda #>$12*$100+$34 sta.z print.w+1 - // [7] phi idx#13 = idx#14 [phi:main::@2->print#1] -- register_copy + // [7] phi idx#13 = idx#14 [phi:main::@2->print#1] -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/callconstparam.log b/src/test/ref/callconstparam.log index f93f9d39a..ae33a22d0 100644 --- a/src/test/ref/callconstparam.log +++ b/src/test/ref/callconstparam.log @@ -307,7 +307,7 @@ main: { // [5] phi line::x1#3 = 2 [phi:main->line#1] -- vbuz1=vbuc1 lda #2 sta.z line.x1 - // [5] phi line::x#0 = 1 [phi:main->line#2] -- vbuxx=vbuc1 + // [5] phi line::x#0 = 1 [phi:main->line#2] -- call_phi_near ldx #1 jsr line // [2] phi from main to main::@1 [phi:main->main::@1] @@ -322,7 +322,7 @@ main: { // [5] phi line::x1#3 = 5 [phi:main::@1->line#1] -- vbuz1=vbuc1 lda #5 sta.z line.x1 - // [5] phi line::x#0 = 3 [phi:main::@1->line#2] -- vbuxx=vbuc1 + // [5] phi line::x#0 = 3 [phi:main::@1->line#2] -- call_phi_near ldx #3 jsr line jmp __breturn @@ -438,7 +438,7 @@ main: { // [5] phi line::x1#3 = 2 [phi:main->line#1] -- vbuz1=vbuc1 lda #2 sta.z line.x1 - // [5] phi line::x#0 = 1 [phi:main->line#2] -- vbuxx=vbuc1 + // [5] phi line::x#0 = 1 [phi:main->line#2] -- call_phi_near ldx #1 jsr line // [2] phi from main to main::@1 [phi:main->main::@1] @@ -450,7 +450,7 @@ main: { // [5] phi line::x1#3 = 5 [phi:main::@1->line#1] -- vbuz1=vbuc1 lda #5 sta.z line.x1 - // [5] phi line::x#0 = 3 [phi:main::@1->line#2] -- vbuxx=vbuc1 + // [5] phi line::x#0 = 3 [phi:main::@1->line#2] -- call_phi_near ldx #3 jsr line // main::@return diff --git a/src/test/ref/casting-negative.log b/src/test/ref/casting-negative.log index cfa761d3c..1ec60bd76 100644 --- a/src/test/ref/casting-negative.log +++ b/src/test/ref/casting-negative.log @@ -3802,7 +3802,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -3810,7 +3810,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -3846,7 +3846,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -3887,7 +3887,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -3899,7 +3899,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln jmp __breturn } @@ -3907,7 +3907,7 @@ cputc: { main: { .label signed_char_value = $17 // [28] call clrscr - // [55] phi from main to clrscr [phi:main->clrscr] + // [55] phi from main to clrscr [phi:main->clrscr] -- call_phi_near clrscr_from_main: jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] @@ -3939,7 +3939,7 @@ main: { lda #$ff !: sta.z test_casting.signed_short_value+1 - // [34] call test_casting + // [34] call test_casting -- call_phi_near jsr test_casting // [29] phi from main::@2 to main::@1 [phi:main::@2->main::@1] __b1_from___b2: @@ -4069,7 +4069,7 @@ cputln: { sta.z conio_cursor_x // [52] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [53] call cscroll + // [53] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -4183,7 +4183,7 @@ clrscr: { test_casting: { .label signed_short_value = 4 // [71] printf_sint::value#1 = test_casting::signed_short_value#0 - // [72] call printf_sint + // [72] call printf_sint -- call_phi_near jsr printf_sint // [73] phi from test_casting to test_casting::@1 [phi:test_casting->test_casting::@1] __b1_from_test_casting: @@ -4198,7 +4198,7 @@ test_casting: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [99] phi printf_str::s#4 = test_casting::s [phi:test_casting::@1->printf_str#1] -- pbuz1=pbuc1 + // [99] phi printf_str::s#4 = test_casting::s [phi:test_casting::@1->printf_str#1] -- call_phi_near lda #s @@ -4234,7 +4234,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [108] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [108] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -4253,7 +4253,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [108] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [108] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -4269,7 +4269,7 @@ cscroll: { memset_from___b3: // [118] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [118] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [118] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -4285,7 +4285,7 @@ cscroll: { memset_from___b4: // [118] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [118] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [118] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -4354,7 +4354,7 @@ printf_sint: { __b2: // [94] utoa::value#1 = (unsigned int)printf_sint::value#4 // [95] call utoa - // [126] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] + // [126] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] -- call_phi_near utoa_from___b2: jsr utoa jmp __b3 @@ -4364,7 +4364,7 @@ printf_sint: { lda printf_buffer // [97] call printf_number_buffer // Print using format - // [147] phi from printf_sint::@3 to printf_number_buffer [phi:printf_sint::@3->printf_number_buffer] + // [147] phi from printf_sint::@3 to printf_number_buffer [phi:printf_sint::@3->printf_number_buffer] -- call_phi_near printf_number_buffer_from___b3: jsr printf_number_buffer jmp __breturn @@ -4630,7 +4630,7 @@ utoa: { // [141] utoa_append::value#0 = utoa::value#2 // [142] utoa_append::sub#0 = utoa::digit_value#0 // [143] call utoa_append - // [155] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + // [155] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near utoa_append_from___b5: jsr utoa_append // [144] utoa_append::return#0 = utoa_append::value#2 @@ -4686,7 +4686,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>printf_sint.putc sta.z printf_str.putc+1 - // [99] phi printf_str::s#4 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 + // [99] phi printf_str::s#4 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near lda #buffer_digits @@ -5199,12 +5199,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [8] return @@ -5233,7 +5233,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -5272,7 +5272,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -5283,7 +5283,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln rts } @@ -5292,7 +5292,7 @@ main: { .label signed_char_value = $17 // clrscr() // [28] call clrscr - // [55] phi from main to clrscr [phi:main->clrscr] + // [55] phi from main to clrscr [phi:main->clrscr] -- call_phi_near jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] // [29] phi main::signed_char_value#2 = -5 [phi:main->main::@1#0] -- vbsz1=vbsc1 @@ -5323,7 +5323,7 @@ main: { lda #$ff !: sta.z test_casting.signed_short_value+1 - // [34] call test_casting + // [34] call test_casting -- call_phi_near jsr test_casting // [29] phi from main::@2 to main::@1 [phi:main::@2->main::@1] // [29] phi main::signed_char_value#2 = main::signed_char_value#1 [phi:main::@2->main::@1#0] -- register_copy @@ -5455,7 +5455,7 @@ cputln: { // [52] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [53] call cscroll + // [53] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -5570,7 +5570,7 @@ test_casting: { .label signed_short_value = 4 // printf("%d\n", signed_short_value) // [71] printf_sint::value#1 = test_casting::signed_short_value#0 - // [72] call printf_sint + // [72] call printf_sint -- call_phi_near jsr printf_sint // [73] phi from test_casting to test_casting::@1 [phi:test_casting->test_casting::@1] // test_casting::@1 @@ -5582,7 +5582,7 @@ test_casting: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [99] phi printf_str::s#4 = test_casting::s [phi:test_casting::@1->printf_str#1] -- pbuz1=pbuc1 + // [99] phi printf_str::s#4 = test_casting::s [phi:test_casting::@1->printf_str#1] -- call_phi_near lda #s @@ -5615,7 +5615,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [108] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [108] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -5631,7 +5631,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [108] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [108] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -5644,7 +5644,7 @@ cscroll: { // [118] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [118] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [118] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [118] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -5657,7 +5657,7 @@ cscroll: { // [118] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [118] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [118] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [118] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -5729,7 +5729,7 @@ printf_sint: { // utoa(uvalue, printf_buffer.digits, format.radix) // [94] utoa::value#1 = (unsigned int)printf_sint::value#4 // [95] call utoa - // [126] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] + // [126] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] -- call_phi_near jsr utoa // printf_sint::@3 // printf_number_buffer(putc, printf_buffer, format) @@ -5737,7 +5737,7 @@ printf_sint: { lda printf_buffer // [97] call printf_number_buffer // Print using format - // [147] phi from printf_sint::@3 to printf_number_buffer [phi:printf_sint::@3->printf_number_buffer] + // [147] phi from printf_sint::@3 to printf_number_buffer [phi:printf_sint::@3->printf_number_buffer] -- call_phi_near jsr printf_number_buffer // printf_sint::@return // } @@ -5993,7 +5993,7 @@ utoa: { // [141] utoa_append::value#0 = utoa::value#2 // [142] utoa_append::sub#0 = utoa::digit_value#0 // [143] call utoa_append - // [155] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + // [155] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near jsr utoa_append // utoa_append(buffer++, value, digit_value) // [144] utoa_append::return#0 = utoa_append::value#2 @@ -6043,7 +6043,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>printf_sint.putc sta.z printf_str.putc+1 - // [99] phi printf_str::s#4 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 + // [99] phi printf_str::s#4 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near lda #buffer_digits diff --git a/src/test/ref/casting.log b/src/test/ref/casting.log index 83d5fabb2..0e79411dd 100644 --- a/src/test/ref/casting.log +++ b/src/test/ref/casting.log @@ -413,7 +413,7 @@ main: { // main::@2 __b2: // [9] call w - // [11] phi from main::@2 to w [phi:main::@2->w] + // [11] phi from main::@2 to w [phi:main::@2->w] -- call_phi_near w_from___b2: jsr w jmp __breturn @@ -577,7 +577,7 @@ main: { // main::@2 // w() // [9] call w - // [11] phi from main::@2 to w [phi:main::@2->w] + // [11] phi from main::@2 to w [phi:main::@2->w] -- call_phi_near jsr w // main::@return // } diff --git a/src/test/ref/cbm-keyboard.log b/src/test/ref/cbm-keyboard.log index 0ffec3780..07b7d51e5 100644 --- a/src/test/ref/cbm-keyboard.log +++ b/src/test/ref/cbm-keyboard.log @@ -4473,7 +4473,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -4481,7 +4481,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -4517,7 +4517,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -4558,7 +4558,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -4570,7 +4570,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln jmp __breturn } @@ -4593,7 +4593,7 @@ main: { lda #toD0181_return sta VICII+OFFSET_STRUCT_MOS6569_VICII_MEMORY // [30] call clrscr - // [71] phi from main::@3 to clrscr [phi:main::@3->clrscr] + // [71] phi from main::@3 to clrscr [phi:main::@3->clrscr] -- call_phi_near clrscr_from___b3: jsr clrscr // [31] phi from main::@3 to main::@1 [phi:main::@3->main::@1] @@ -4609,7 +4609,7 @@ main: { jmp __b1 // main::@1 __b1: - // [32] call GETIN + // [32] call GETIN -- call_phi_near jsr GETIN // [33] GETIN::return#0 = GETIN::return#1 jmp __b4 @@ -4634,7 +4634,7 @@ main: { __b2: // [37] petscii_to_screencode::petscii#0 = main::ch#0 -- vbuaa=vbuz1 lda.z ch - // [38] call petscii_to_screencode + // [38] call petscii_to_screencode -- call_phi_near jsr petscii_to_screencode // [39] petscii_to_screencode::return#0 = petscii_to_screencode::return#10 jmp __b5 @@ -4650,7 +4650,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = main::s [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 + // [103] phi printf_str::s#6 = main::s [phi:main::@5->printf_str#1] -- call_phi_near lda #s @@ -4674,7 +4674,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = main::s1 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 + // [103] phi printf_str::s#6 = main::s1 [phi:main::@6->printf_str#1] -- call_phi_near lda #s1 @@ -4686,7 +4686,7 @@ main: { // [46] printf_uchar::uvalue#0 = main::ch#0 -- vbuxx=vbuz1 ldx.z ch // [47] call printf_uchar - // [112] phi from main::@7 to printf_uchar [phi:main::@7->printf_uchar] + // [112] phi from main::@7 to printf_uchar [phi:main::@7->printf_uchar] -- call_phi_near printf_uchar_from___b7: jsr printf_uchar // [48] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -4702,7 +4702,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = main::s2 [phi:main::@8->printf_str#1] -- pbuz1=pbuc1 + // [103] phi printf_str::s#6 = main::s2 [phi:main::@8->printf_str#1] -- call_phi_near lda #s2 @@ -4847,7 +4847,7 @@ cputln: { sta.z conio_cursor_x // [68] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [69] call cscroll + // [69] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -5115,7 +5115,7 @@ printf_uchar: { // [114] uctoa::value#1 = printf_uchar::uvalue#0 // [115] call uctoa // Format number into buffer - // [132] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] + // [132] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] -- call_phi_near uctoa_from___b1: jsr uctoa jmp __b2 @@ -5126,7 +5126,7 @@ printf_uchar: { sta.z printf_number_buffer.buffer_sign // [117] call printf_number_buffer // Print using format - // [151] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] + // [151] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] -- call_phi_near printf_number_buffer_from___b2: jsr printf_number_buffer jmp __breturn @@ -5155,7 +5155,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [174] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [174] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -5174,7 +5174,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [174] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [174] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -5190,7 +5190,7 @@ cscroll: { memset_from___b3: // [184] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [184] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [184] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -5206,7 +5206,7 @@ cscroll: { memset_from___b4: // [184] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [184] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [184] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -5332,7 +5332,7 @@ uctoa: { // [145] uctoa_append::value#0 = uctoa::value#2 // [146] uctoa_append::sub#0 = uctoa::digit_value#0 // [147] call uctoa_append - // [192] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] + // [192] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near uctoa_append_from___b5: jsr uctoa_append // [148] uctoa_append::return#0 = uctoa_append::value#2 @@ -5368,7 +5368,7 @@ printf_number_buffer: { // printf_number_buffer::@4 __b4: // [153] call strlen - // [199] phi from printf_number_buffer::@4 to strlen [phi:printf_number_buffer::@4->strlen] + // [199] phi from printf_number_buffer::@4 to strlen [phi:printf_number_buffer::@4->strlen] -- call_phi_near strlen_from___b4: jsr strlen // [154] strlen::return#2 = strlen::len#2 @@ -5430,7 +5430,7 @@ printf_number_buffer: { // [165] printf_padding::length#0 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuaa sta.z printf_padding.length // [166] call printf_padding - // [205] phi from printf_number_buffer::@6 to printf_padding [phi:printf_number_buffer::@6->printf_padding] + // [205] phi from printf_number_buffer::@6 to printf_padding [phi:printf_number_buffer::@6->printf_padding] -- call_phi_near printf_padding_from___b6: jsr printf_padding jmp __b2 @@ -5463,7 +5463,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>printf_uchar.putc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@3->printf_str#1] -- pbuz1=pbuc1 + // [103] phi printf_str::s#6 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@3->printf_str#1] -- call_phi_near lda #buffer_digits @@ -6310,12 +6310,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [8] return @@ -6344,7 +6344,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -6383,7 +6383,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -6394,7 +6394,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln rts } @@ -6414,7 +6414,7 @@ main: { sta VICII+OFFSET_STRUCT_MOS6569_VICII_MEMORY // clrscr() // [30] call clrscr - // [71] phi from main::@3 to clrscr [phi:main::@3->clrscr] + // [71] phi from main::@3 to clrscr [phi:main::@3->clrscr] -- call_phi_near jsr clrscr // [31] phi from main::@3 to main::@1 [phi:main::@3->main::@1] // [31] phi main::current#2 = 0 [phi:main::@3->main::@1#0] -- vbuz1=vbuc1 @@ -6425,7 +6425,7 @@ main: { // main::@1 __b1: // char ch = GETIN() - // [32] call GETIN + // [32] call GETIN -- call_phi_near jsr GETIN // [33] GETIN::return#0 = GETIN::return#1 // main::@4 @@ -6445,7 +6445,7 @@ main: { // petscii_to_screencode(ch) // [37] petscii_to_screencode::petscii#0 = main::ch#0 -- vbuaa=vbuz1 lda.z ch - // [38] call petscii_to_screencode + // [38] call petscii_to_screencode -- call_phi_near jsr petscii_to_screencode // [39] petscii_to_screencode::return#0 = petscii_to_screencode::return#10 // main::@5 @@ -6459,7 +6459,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = main::s [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 + // [103] phi printf_str::s#6 = main::s [phi:main::@5->printf_str#1] -- call_phi_near lda #s @@ -6481,7 +6481,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = main::s1 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 + // [103] phi printf_str::s#6 = main::s1 [phi:main::@6->printf_str#1] -- call_phi_near lda #s1 @@ -6492,7 +6492,7 @@ main: { // [46] printf_uchar::uvalue#0 = main::ch#0 -- vbuxx=vbuz1 ldx.z ch // [47] call printf_uchar - // [112] phi from main::@7 to printf_uchar [phi:main::@7->printf_uchar] + // [112] phi from main::@7 to printf_uchar [phi:main::@7->printf_uchar] -- call_phi_near jsr printf_uchar // [48] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 @@ -6504,7 +6504,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = main::s2 [phi:main::@8->printf_str#1] -- pbuz1=pbuc1 + // [103] phi printf_str::s#6 = main::s2 [phi:main::@8->printf_str#1] -- call_phi_near lda #s2 @@ -6650,7 +6650,7 @@ cputln: { // [68] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [69] call cscroll + // [69] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -6910,7 +6910,7 @@ printf_uchar: { // [114] uctoa::value#1 = printf_uchar::uvalue#0 // [115] call uctoa // Format number into buffer - // [132] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] + // [132] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] -- call_phi_near jsr uctoa // printf_uchar::@2 // printf_number_buffer(putc, printf_buffer, format) @@ -6919,7 +6919,7 @@ printf_uchar: { sta.z printf_number_buffer.buffer_sign // [117] call printf_number_buffer // Print using format - // [151] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] + // [151] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] -- call_phi_near jsr printf_number_buffer // printf_uchar::@return // } @@ -6944,7 +6944,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [174] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [174] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -6960,7 +6960,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [174] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [174] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -6973,7 +6973,7 @@ cscroll: { // [184] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [184] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [184] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [184] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -6986,7 +6986,7 @@ cscroll: { // [184] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [184] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [184] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [184] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -7110,7 +7110,7 @@ uctoa: { // [145] uctoa_append::value#0 = uctoa::value#2 // [146] uctoa_append::sub#0 = uctoa::digit_value#0 // [147] call uctoa_append - // [192] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] + // [192] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near jsr uctoa_append // uctoa_append(buffer++, value, digit_value) // [148] uctoa_append::return#0 = uctoa_append::value#2 @@ -7143,7 +7143,7 @@ printf_number_buffer: { // printf_number_buffer::@4 // strlen(buffer.digits) // [153] call strlen - // [199] phi from printf_number_buffer::@4 to strlen [phi:printf_number_buffer::@4->strlen] + // [199] phi from printf_number_buffer::@4 to strlen [phi:printf_number_buffer::@4->strlen] -- call_phi_near jsr strlen // strlen(buffer.digits) // [154] strlen::return#2 = strlen::len#2 @@ -7196,7 +7196,7 @@ printf_number_buffer: { // [165] printf_padding::length#0 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuaa sta.z printf_padding.length // [166] call printf_padding - // [205] phi from printf_number_buffer::@6 to printf_padding [phi:printf_number_buffer::@6->printf_padding] + // [205] phi from printf_number_buffer::@6 to printf_padding [phi:printf_number_buffer::@6->printf_padding] -- call_phi_near jsr printf_padding // printf_number_buffer::@2 __b2: @@ -7223,7 +7223,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>printf_uchar.putc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@3->printf_str#1] -- pbuz1=pbuc1 + // [103] phi printf_str::s#6 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@3->printf_str#1] -- call_phi_near lda #buffer_digits diff --git a/src/test/ref/cia-timer-cyclecount.log b/src/test/ref/cia-timer-cyclecount.log index d0f1acec5..825e359ca 100644 --- a/src/test/ref/cia-timer-cyclecount.log +++ b/src/test/ref/cia-timer-cyclecount.log @@ -694,7 +694,7 @@ main: { jmp __b1 // main::@1 __b1: - // [2] call clock_start + // [2] call clock_start -- call_phi_near // Reset & start the CIA#2 timer A+B jsr clock_start jmp __b2 @@ -702,7 +702,7 @@ main: { __b2: // asm { nop } nop - // [4] call clock + // [4] call clock -- call_phi_near jsr clock // [5] clock::return#2 = clock::return#0 jmp __b3 @@ -725,7 +725,7 @@ main: { sbc #>CLOCKS_PER_INIT>>$10 sta.z cyclecount+3 // [8] print_ulong_at::dw#0 = main::cyclecount#0 - // [9] call print_ulong_at + // [9] call print_ulong_at -- call_phi_near // Print cycle count jsr print_ulong_at jmp __b1_from___b3 @@ -813,7 +813,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN sta.z print_uint_at.at+1 - // [25] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- register_copy + // [25] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- call_phi_near jsr print_uint_at jmp __b1 // print_ulong_at::@1 @@ -831,7 +831,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN+4 sta.z print_uint_at.at+1 - // [25] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- register_copy + // [25] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- call_phi_near jsr print_uint_at jmp __breturn // print_ulong_at::@return @@ -853,7 +853,7 @@ print_uint_at: { // [33] phi from print_uint_at to print_uchar_at [phi:print_uint_at->print_uchar_at] print_uchar_at_from_print_uint_at: // [33] phi print_uchar_at::at#2 = print_uchar_at::at#0 [phi:print_uint_at->print_uchar_at#0] -- register_copy - // [33] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- register_copy + // [33] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- call_phi_near jsr print_uchar_at jmp __b1 // print_uint_at::@1 @@ -873,7 +873,7 @@ print_uint_at: { // [33] phi from print_uint_at::@1 to print_uchar_at [phi:print_uint_at::@1->print_uchar_at] print_uchar_at_from___b1: // [33] phi print_uchar_at::at#2 = print_uchar_at::at#1 [phi:print_uint_at::@1->print_uchar_at#0] -- register_copy - // [33] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- register_copy + // [33] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- call_phi_near jsr print_uchar_at jmp __breturn // print_uint_at::@return @@ -906,7 +906,7 @@ print_uchar_at: { // [43] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at] print_char_at_from_print_uchar_at: // [43] phi print_char_at::at#2 = print_char_at::at#0 [phi:print_uchar_at->print_char_at#0] -- register_copy - // [43] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- register_copy + // [43] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- call_phi_near jsr print_char_at jmp __b1 // print_uchar_at::@1 @@ -929,7 +929,7 @@ print_uchar_at: { // [43] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at] print_char_at_from___b1: // [43] phi print_char_at::at#2 = print_char_at::at#1 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy - // [43] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy + // [43] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- call_phi_near jsr print_char_at jmp __breturn // print_uchar_at::@return @@ -1097,7 +1097,7 @@ main: { // main::@1 __b1: // clock_start() - // [2] call clock_start + // [2] call clock_start -- call_phi_near // Reset & start the CIA#2 timer A+B jsr clock_start // main::@2 @@ -1105,7 +1105,7 @@ main: { // asm { nop } nop // clock() - // [4] call clock + // [4] call clock -- call_phi_near jsr clock // [5] clock::return#2 = clock::return#0 // main::@3 @@ -1128,7 +1128,7 @@ main: { sta.z cyclecount+3 // print_ulong_at(cyclecount, SCREEN) // [8] print_ulong_at::dw#0 = main::cyclecount#0 - // [9] call print_ulong_at + // [9] call print_ulong_at -- call_phi_near // Print cycle count jsr print_ulong_at jmp __b1 @@ -1222,7 +1222,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN sta.z print_uint_at.at+1 - // [25] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- register_copy + // [25] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- call_phi_near jsr print_uint_at // print_ulong_at::@1 // print_uint_at(WORD0(dw), at+4) @@ -1238,7 +1238,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN+4 sta.z print_uint_at.at+1 - // [25] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- register_copy + // [25] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- call_phi_near jsr print_uint_at // print_ulong_at::@return // } @@ -1259,7 +1259,7 @@ print_uint_at: { // [28] call print_uchar_at // [33] phi from print_uint_at to print_uchar_at [phi:print_uint_at->print_uchar_at] // [33] phi print_uchar_at::at#2 = print_uchar_at::at#0 [phi:print_uint_at->print_uchar_at#0] -- register_copy - // [33] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- register_copy + // [33] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- call_phi_near jsr print_uchar_at // print_uint_at::@1 // print_uchar_at(BYTE0(w), at+2) @@ -1277,7 +1277,7 @@ print_uint_at: { // [31] call print_uchar_at // [33] phi from print_uint_at::@1 to print_uchar_at [phi:print_uint_at::@1->print_uchar_at] // [33] phi print_uchar_at::at#2 = print_uchar_at::at#1 [phi:print_uint_at::@1->print_uchar_at#0] -- register_copy - // [33] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- register_copy + // [33] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- call_phi_near jsr print_uchar_at // print_uint_at::@return // } @@ -1310,7 +1310,7 @@ print_uchar_at: { // Table of hexadecimal digits // [43] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at] // [43] phi print_char_at::at#2 = print_char_at::at#0 [phi:print_uchar_at->print_char_at#0] -- register_copy - // [43] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- register_copy + // [43] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- call_phi_near jsr print_char_at // print_uchar_at::@1 // b&$f @@ -1332,7 +1332,7 @@ print_uchar_at: { // [41] call print_char_at // [43] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at] // [43] phi print_char_at::at#2 = print_char_at::at#1 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy - // [43] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy + // [43] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- call_phi_near jsr print_char_at // print_uchar_at::@return // } diff --git a/src/test/ref/cia-timer-simple.log b/src/test/ref/cia-timer-simple.log index eff475044..cc00daf4c 100644 --- a/src/test/ref/cia-timer-simple.log +++ b/src/test/ref/cia-timer-simple.log @@ -657,7 +657,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call clock_start + // [1] call clock_start -- call_phi_near // Reset & start the CIA#2 timer A+B jsr clock_start // [2] phi from main main::@2 to main::@1 [phi:main/main::@2->main::@1] @@ -666,14 +666,14 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call clock + // [3] call clock -- call_phi_near jsr clock // [4] clock::return#2 = clock::return#0 jmp __b2 // main::@2 __b2: // [5] print_ulong_at::dw#0 = clock::return#2 - // [6] call print_ulong_at + // [6] call print_ulong_at -- call_phi_near jsr print_ulong_at jmp __b1_from___b2 } @@ -760,7 +760,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN sta.z print_uint_at.at+1 - // [22] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- register_copy + // [22] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- call_phi_near jsr print_uint_at jmp __b1 // print_ulong_at::@1 @@ -778,7 +778,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN+4 sta.z print_uint_at.at+1 - // [22] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- register_copy + // [22] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- call_phi_near jsr print_uint_at jmp __breturn // print_ulong_at::@return @@ -800,7 +800,7 @@ print_uint_at: { // [30] phi from print_uint_at to print_uchar_at [phi:print_uint_at->print_uchar_at] print_uchar_at_from_print_uint_at: // [30] phi print_uchar_at::at#2 = print_uchar_at::at#0 [phi:print_uint_at->print_uchar_at#0] -- register_copy - // [30] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- register_copy + // [30] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- call_phi_near jsr print_uchar_at jmp __b1 // print_uint_at::@1 @@ -820,7 +820,7 @@ print_uint_at: { // [30] phi from print_uint_at::@1 to print_uchar_at [phi:print_uint_at::@1->print_uchar_at] print_uchar_at_from___b1: // [30] phi print_uchar_at::at#2 = print_uchar_at::at#1 [phi:print_uint_at::@1->print_uchar_at#0] -- register_copy - // [30] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- register_copy + // [30] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- call_phi_near jsr print_uchar_at jmp __breturn // print_uint_at::@return @@ -853,7 +853,7 @@ print_uchar_at: { // [40] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at] print_char_at_from_print_uchar_at: // [40] phi print_char_at::at#2 = print_char_at::at#0 [phi:print_uchar_at->print_char_at#0] -- register_copy - // [40] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- register_copy + // [40] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- call_phi_near jsr print_char_at jmp __b1 // print_uchar_at::@1 @@ -876,7 +876,7 @@ print_uchar_at: { // [40] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at] print_char_at_from___b1: // [40] phi print_char_at::at#2 = print_char_at::at#1 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy - // [40] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy + // [40] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- call_phi_near jsr print_char_at jmp __breturn // print_uchar_at::@return @@ -1030,20 +1030,20 @@ Score: 467 // main main: { // clock_start() - // [1] call clock_start + // [1] call clock_start -- call_phi_near // Reset & start the CIA#2 timer A+B jsr clock_start // [2] phi from main main::@2 to main::@1 [phi:main/main::@2->main::@1] // main::@1 __b1: // clock() - // [3] call clock + // [3] call clock -- call_phi_near jsr clock // [4] clock::return#2 = clock::return#0 // main::@2 // print_ulong_at(clock(), SCREEN) // [5] print_ulong_at::dw#0 = clock::return#2 - // [6] call print_ulong_at + // [6] call print_ulong_at -- call_phi_near jsr print_ulong_at jmp __b1 } @@ -1136,7 +1136,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN sta.z print_uint_at.at+1 - // [22] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- register_copy + // [22] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- call_phi_near jsr print_uint_at // print_ulong_at::@1 // print_uint_at(WORD0(dw), at+4) @@ -1152,7 +1152,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN+4 sta.z print_uint_at.at+1 - // [22] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- register_copy + // [22] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- call_phi_near jsr print_uint_at // print_ulong_at::@return // } @@ -1173,7 +1173,7 @@ print_uint_at: { // [25] call print_uchar_at // [30] phi from print_uint_at to print_uchar_at [phi:print_uint_at->print_uchar_at] // [30] phi print_uchar_at::at#2 = print_uchar_at::at#0 [phi:print_uint_at->print_uchar_at#0] -- register_copy - // [30] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- register_copy + // [30] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- call_phi_near jsr print_uchar_at // print_uint_at::@1 // print_uchar_at(BYTE0(w), at+2) @@ -1191,7 +1191,7 @@ print_uint_at: { // [28] call print_uchar_at // [30] phi from print_uint_at::@1 to print_uchar_at [phi:print_uint_at::@1->print_uchar_at] // [30] phi print_uchar_at::at#2 = print_uchar_at::at#1 [phi:print_uint_at::@1->print_uchar_at#0] -- register_copy - // [30] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- register_copy + // [30] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- call_phi_near jsr print_uchar_at // print_uint_at::@return // } @@ -1224,7 +1224,7 @@ print_uchar_at: { // Table of hexadecimal digits // [40] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at] // [40] phi print_char_at::at#2 = print_char_at::at#0 [phi:print_uchar_at->print_char_at#0] -- register_copy - // [40] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- register_copy + // [40] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- call_phi_near jsr print_char_at // print_uchar_at::@1 // b&$f @@ -1246,7 +1246,7 @@ print_uchar_at: { // [38] call print_char_at // [40] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at] // [40] phi print_char_at::at#2 = print_char_at::at#1 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy - // [40] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy + // [40] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- call_phi_near jsr print_char_at // print_uchar_at::@return // } diff --git a/src/test/ref/clobber-a-problem.log b/src/test/ref/clobber-a-problem.log index e5d4baccd..d30d271a5 100644 --- a/src/test/ref/clobber-a-problem.log +++ b/src/test/ref/clobber-a-problem.log @@ -236,7 +236,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -383,7 +383,7 @@ __start: { sta.z irq_raster_next // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/complex/includes/includes-1.log b/src/test/ref/complex/includes/includes-1.log index f9b16c089..e9853d55d 100644 --- a/src/test/ref/complex/includes/includes-1.log +++ b/src/test/ref/complex/includes/includes-1.log @@ -235,7 +235,7 @@ ASSEMBLER BEFORE OPTIMIZATION main: { .label __0 = 4 // [1] call strlen - // [6] phi from main to strlen [phi:main->strlen] + // [6] phi from main to strlen [phi:main->strlen] -- call_phi_near strlen_from_main: jsr strlen // [2] strlen::return#2 = strlen::len#2 @@ -364,7 +364,7 @@ main: { .label __0 = 4 // strlen(STR) // [1] call strlen - // [6] phi from main to strlen [phi:main->strlen] + // [6] phi from main to strlen [phi:main->strlen] -- call_phi_near jsr strlen // strlen(STR) // [2] strlen::return#2 = strlen::len#2 diff --git a/src/test/ref/complex/includes/includes-2.log b/src/test/ref/complex/includes/includes-2.log index ba9264981..51cbad9f1 100644 --- a/src/test/ref/complex/includes/includes-2.log +++ b/src/test/ref/complex/includes/includes-2.log @@ -164,7 +164,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call strlen - // [4] phi from main to strlen [phi:main->strlen] + // [4] phi from main to strlen [phi:main->strlen] -- call_phi_near strlen_from_main: jsr strlen jmp __b1 @@ -234,7 +234,7 @@ Score: 24 main: { // strlen(STR) // [1] call strlen - // [4] phi from main to strlen [phi:main->strlen] + // [4] phi from main to strlen [phi:main->strlen] -- call_phi_near jsr strlen // main::@1 // SCREEN [0] = (char) strlen(STR) diff --git a/src/test/ref/complex/xmega65/xmega65.log b/src/test/ref/complex/xmega65/xmega65.log index 0610788ff..82f78053f 100644 --- a/src/test/ref/complex/xmega65/xmega65.log +++ b/src/test/ref/complex/xmega65/xmega65.log @@ -569,7 +569,7 @@ main: { memset_from_main: // [17] phi memset::c#4 = ' ' [phi:main->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [17] phi memset::str#3 = (void *)SCREEN [phi:main->memset#1] -- pvoz1=pvoc1 + // [17] phi memset::str#3 = (void *)SCREEN [phi:main->memset#1] -- call_phi_near lda #SCREEN @@ -585,7 +585,7 @@ main: { memset_from___b6: // [17] phi memset::c#4 = WHITE [phi:main::@6->memset#0] -- vbuxx=vbuc1 ldx #WHITE - // [17] phi memset::str#3 = (void *)COLS [phi:main::@6->memset#1] -- pvoz1=pvoc1 + // [17] phi memset::str#3 = (void *)COLS [phi:main::@6->memset#1] -- call_phi_near lda #COLS @@ -866,7 +866,7 @@ main: { // [17] phi from main to memset [phi:main->memset] // [17] phi memset::c#4 = ' ' [phi:main->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [17] phi memset::str#3 = (void *)SCREEN [phi:main->memset#1] -- pvoz1=pvoc1 + // [17] phi memset::str#3 = (void *)SCREEN [phi:main->memset#1] -- call_phi_near lda #SCREEN @@ -879,7 +879,7 @@ main: { // [17] phi from main::@6 to memset [phi:main::@6->memset] // [17] phi memset::c#4 = WHITE [phi:main::@6->memset#0] -- vbuxx=vbuc1 ldx #WHITE - // [17] phi memset::str#3 = (void *)COLS [phi:main::@6->memset#1] -- pvoz1=pvoc1 + // [17] phi memset::str#3 = (void *)COLS [phi:main::@6->memset#1] -- call_phi_near lda #COLS diff --git a/src/test/ref/const-bool-return-problem.log b/src/test/ref/const-bool-return-problem.log index 0c1be65c9..8825ee589 100644 --- a/src/test/ref/const-bool-return-problem.log +++ b/src/test/ref/const-bool-return-problem.log @@ -420,7 +420,7 @@ main: { __b3: // [7] OBJ_is_solid::oy#0 = main::oy#2 -- vbuaa=vbuz1 lda.z oy - // [8] call OBJ_is_solid + // [8] call OBJ_is_solid -- call_phi_near jsr OBJ_is_solid // [9] OBJ_is_solid::return#0 = OBJ_is_solid::return#3 jmp __b7 @@ -467,7 +467,7 @@ OBJ_is_solid: { // OBJ_is_solid::@1 __b1: // [16] call tile_flag_at - // [19] phi from OBJ_is_solid::@1 to tile_flag_at [phi:OBJ_is_solid::@1->tile_flag_at] + // [19] phi from OBJ_is_solid::@1 to tile_flag_at [phi:OBJ_is_solid::@1->tile_flag_at] -- call_phi_near tile_flag_at_from___b1: jsr tile_flag_at // [17] phi from OBJ_is_solid::@1 to OBJ_is_solid::@return [phi:OBJ_is_solid::@1->OBJ_is_solid::@return] @@ -612,7 +612,7 @@ main: { // OBJ_is_solid(ox,oy) // [7] OBJ_is_solid::oy#0 = main::oy#2 -- vbuaa=vbuz1 lda.z oy - // [8] call OBJ_is_solid + // [8] call OBJ_is_solid -- call_phi_near jsr OBJ_is_solid // [9] OBJ_is_solid::return#0 = OBJ_is_solid::return#3 // main::@7 @@ -657,7 +657,7 @@ OBJ_is_solid: { __b1: // tile_flag_at() // [16] call tile_flag_at - // [19] phi from OBJ_is_solid::@1 to tile_flag_at [phi:OBJ_is_solid::@1->tile_flag_at] + // [19] phi from OBJ_is_solid::@1 to tile_flag_at [phi:OBJ_is_solid::@1->tile_flag_at] -- call_phi_near jsr tile_flag_at // [17] phi from OBJ_is_solid::@1 to OBJ_is_solid::@return [phi:OBJ_is_solid::@1->OBJ_is_solid::@return] // [17] phi OBJ_is_solid::return#3 = tile_flag_at::return#1 [phi:OBJ_is_solid::@1->OBJ_is_solid::@return#0] -- vboaa=vboc1 diff --git a/src/test/ref/const-early-identification.log b/src/test/ref/const-early-identification.log index 267852183..3a12e4591 100644 --- a/src/test/ref/const-early-identification.log +++ b/src/test/ref/const-early-identification.log @@ -206,7 +206,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -227,7 +227,7 @@ main: { // [7] *(SCREEN+2) = *main::addrA -- _deref_pbuc1=_deref_pbuc2 lda.z addrA sta SCREEN+2 - // [8] call sub + // [8] call sub -- call_phi_near jsr sub jmp __breturn // main::@return @@ -315,7 +315,7 @@ __start: { sta.z A // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return @@ -338,7 +338,7 @@ main: { lda.z addrA sta SCREEN+2 // sub() - // [8] call sub + // [8] call sub -- call_phi_near jsr sub // main::@return // } diff --git a/src/test/ref/const-identification.log b/src/test/ref/const-identification.log index c27bca22e..bcf87ce92 100644 --- a/src/test/ref/const-identification.log +++ b/src/test/ref/const-identification.log @@ -377,7 +377,7 @@ main: { // main::@2 __b2: // [7] call line - // [8] phi from main::@2 to line [phi:main::@2->line] + // [8] phi from main::@2 to line [phi:main::@2->line] -- call_phi_near line_from___b2: jsr line jmp __b2_from___b2 @@ -405,7 +405,7 @@ line: { // line::@2 __b2: // [12] plot::x#1 = line::x#2 - // [13] call plot + // [13] call plot -- call_phi_near jsr plot jmp __b3 // line::@3 @@ -535,7 +535,7 @@ main: { __b2: // line(0, 10) // [7] call line - // [8] phi from main::@2 to line [phi:main::@2->line] + // [8] phi from main::@2 to line [phi:main::@2->line] -- call_phi_near jsr line jmp __b2 } @@ -561,7 +561,7 @@ line: { __b2: // plot(x) // [12] plot::x#1 = line::x#2 - // [13] call plot + // [13] call plot -- call_phi_near jsr plot // line::@3 // for(byte x = x0; x<=x1; x++) diff --git a/src/test/ref/const-param.log b/src/test/ref/const-param.log index d169c1ccf..f950c9ac6 100644 --- a/src/test/ref/const-param.log +++ b/src/test/ref/const-param.log @@ -269,7 +269,7 @@ main: { // [1] call sum // [14] phi from main to sum [phi:main->sum] sum_from_main: - // [14] phi sum::b#3 = 'c' [phi:main->sum#0] -- vbuaa=vbuc1 + // [14] phi sum::b#3 = 'c' [phi:main->sum#0] -- call_phi_near lda #'c' jsr sum // [2] sum::return#0 = sum::return#3 @@ -282,7 +282,7 @@ main: { // [5] call sum // [14] phi from main::@1 to sum [phi:main::@1->sum] sum_from___b1: - // [14] phi sum::b#3 = 'm' [phi:main::@1->sum#0] -- vbuaa=vbuc1 + // [14] phi sum::b#3 = 'm' [phi:main::@1->sum#0] -- call_phi_near lda #'m' jsr sum // [6] sum::return#1 = sum::return#3 @@ -295,7 +295,7 @@ main: { // [9] call sum // [14] phi from main::@2 to sum [phi:main::@2->sum] sum_from___b2: - // [14] phi sum::b#3 = 'l' [phi:main::@2->sum#0] -- vbuaa=vbuc1 + // [14] phi sum::b#3 = 'l' [phi:main::@2->sum#0] -- call_phi_near lda #'l' jsr sum // [10] sum::return#2 = sum::return#3 @@ -392,7 +392,7 @@ main: { // sum(reverse, 'c') // [1] call sum // [14] phi from main to sum [phi:main->sum] - // [14] phi sum::b#3 = 'c' [phi:main->sum#0] -- vbuaa=vbuc1 + // [14] phi sum::b#3 = 'c' [phi:main->sum#0] -- call_phi_near lda #'c' jsr sum // sum(reverse, 'c') @@ -405,7 +405,7 @@ main: { // sum(reverse, 'm') // [5] call sum // [14] phi from main::@1 to sum [phi:main::@1->sum] - // [14] phi sum::b#3 = 'm' [phi:main::@1->sum#0] -- vbuaa=vbuc1 + // [14] phi sum::b#3 = 'm' [phi:main::@1->sum#0] -- call_phi_near lda #'m' jsr sum // sum(reverse, 'm') @@ -418,7 +418,7 @@ main: { // sum(reverse, 'l') // [9] call sum // [14] phi from main::@2 to sum [phi:main::@2->sum] - // [14] phi sum::b#3 = 'l' [phi:main::@2->sum#0] -- vbuaa=vbuc1 + // [14] phi sum::b#3 = 'l' [phi:main::@2->sum#0] -- call_phi_near lda #'l' jsr sum // sum(reverse, 'l') diff --git a/src/test/ref/const-volatile-problem.log b/src/test/ref/const-volatile-problem.log index 19557408a..d40481e85 100644 --- a/src/test/ref/const-volatile-problem.log +++ b/src/test/ref/const-volatile-problem.log @@ -204,7 +204,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -313,7 +313,7 @@ __start: { sta.z idx // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/constants.log b/src/test/ref/constants.log index b1c1bb33f..d5b216b61 100644 --- a/src/test/ref/constants.log +++ b/src/test/ref/constants.log @@ -1647,7 +1647,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call print_cls - // [7] phi from main to print_cls [phi:main->print_cls] + // [7] phi from main to print_cls [phi:main->print_cls] -- call_phi_near print_cls_from_main: jsr print_cls jmp __b1 @@ -1657,7 +1657,7 @@ main: { lda #GREEN sta BG_COLOR // [3] call test_bytes - // [10] phi from main::@1 to test_bytes [phi:main::@1->test_bytes] + // [10] phi from main::@1 to test_bytes [phi:main::@1->test_bytes] -- call_phi_near test_bytes_from___b1: jsr test_bytes // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -1666,7 +1666,7 @@ main: { // main::@2 __b2: // [5] call test_sbytes - // [17] phi from main::@2 to test_sbytes [phi:main::@2->test_sbytes] + // [17] phi from main::@2 to test_sbytes [phi:main::@2->test_sbytes] -- call_phi_near test_sbytes_from___b2: jsr test_sbytes jmp __breturn @@ -1679,7 +1679,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [8] call memset - // [28] phi from print_cls to memset [phi:print_cls->memset] + // [28] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -1712,7 +1712,7 @@ test_bytes: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [34] phi assert_byte::msg#3 = msg [phi:test_bytes->assert_byte#4] -- pbuz1=pbuc1 + // [34] phi assert_byte::msg#3 = msg [phi:test_bytes->assert_byte#4] -- call_phi_near lda #msg @@ -1736,7 +1736,7 @@ test_bytes: { // [34] phi assert_byte::b#3 = test_bytes::bc#0 [phi:test_bytes::@1->assert_byte#2] -- vbuxx=vbuc1 ldx #bc // [34] phi print_char_cursor#77 = print_char_cursor#98 [phi:test_bytes::@1->assert_byte#3] -- register_copy - // [34] phi assert_byte::msg#3 = msg1 [phi:test_bytes::@1->assert_byte#4] -- pbuz1=pbuc1 + // [34] phi assert_byte::msg#3 = msg1 [phi:test_bytes::@1->assert_byte#4] -- call_phi_near lda #msg1 @@ -1760,7 +1760,7 @@ test_bytes: { // [34] phi assert_byte::b#3 = test_bytes::bd#0 [phi:test_bytes::@2->assert_byte#2] -- vbuxx=vbuc1 ldx #bd // [34] phi print_char_cursor#77 = print_char_cursor#99 [phi:test_bytes::@2->assert_byte#3] -- register_copy - // [34] phi assert_byte::msg#3 = test_bytes::msg2 [phi:test_bytes::@2->assert_byte#4] -- pbuz1=pbuc1 + // [34] phi assert_byte::msg#3 = test_bytes::msg2 [phi:test_bytes::@2->assert_byte#4] -- call_phi_near lda #msg2 @@ -1792,7 +1792,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bb [phi:test_sbytes->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bb - // [47] phi assert_sbyte::msg#5 = msg [phi:test_sbytes->assert_sbyte#2] -- pbuz1=pbuc1 + // [47] phi assert_sbyte::msg#5 = msg [phi:test_sbytes->assert_sbyte#2] -- call_phi_near lda #msg @@ -1811,7 +1811,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bc#0 [phi:test_sbytes::@1->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bc - // [47] phi assert_sbyte::msg#5 = msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- pbuz1=pbuc1 + // [47] phi assert_sbyte::msg#5 = msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- call_phi_near lda #msg1 @@ -1830,7 +1830,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bd#0 [phi:test_sbytes::@2->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bd - // [47] phi assert_sbyte::msg#5 = test_sbytes::msg2 [phi:test_sbytes::@2->assert_sbyte#2] -- pbuz1=pbuc1 + // [47] phi assert_sbyte::msg#5 = test_sbytes::msg2 [phi:test_sbytes::@2->assert_sbyte#2] -- call_phi_near lda #msg2 @@ -1849,7 +1849,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::be#0 [phi:test_sbytes::@3->assert_sbyte#1] -- vbsxx=vbsc1 ldx #be - // [47] phi assert_sbyte::msg#5 = test_sbytes::msg3 [phi:test_sbytes::@3->assert_sbyte#2] -- pbuz1=pbuc1 + // [47] phi assert_sbyte::msg#5 = test_sbytes::msg3 [phi:test_sbytes::@3->assert_sbyte#2] -- call_phi_near lda #msg3 @@ -1868,7 +1868,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bf [phi:test_sbytes::@4->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bf - // [47] phi assert_sbyte::msg#5 = test_sbytes::msg4 [phi:test_sbytes::@4->assert_sbyte#2] -- pbuz1=pbuc1 + // [47] phi assert_sbyte::msg#5 = test_sbytes::msg4 [phi:test_sbytes::@4->assert_sbyte#2] -- call_phi_near lda #msg4 @@ -1945,7 +1945,7 @@ assert_byte: { // [61] phi from assert_byte to print_str [phi:assert_byte->print_str] print_str_from_assert_byte: // [61] phi print_char_cursor#87 = print_char_cursor#77 [phi:assert_byte->print_str#0] -- register_copy - // [61] phi print_str::str#12 = print_str::str#1 [phi:assert_byte->print_str#1] -- register_copy + // [61] phi print_str::str#12 = print_str::str#1 [phi:assert_byte->print_str#1] -- call_phi_near jsr print_str // [37] phi from assert_byte to assert_byte::@4 [phi:assert_byte->assert_byte::@4] __b4_from_assert_byte: @@ -1956,7 +1956,7 @@ assert_byte: { // [61] phi from assert_byte::@4 to print_str [phi:assert_byte::@4->print_str] print_str_from___b4: // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_byte::@4->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str [phi:assert_byte::@4->print_str#1] -- pbuz1=pbuc1 + // [61] phi print_str::str#12 = str [phi:assert_byte::@4->print_str#1] -- call_phi_near lda #str @@ -1977,7 +1977,7 @@ assert_byte: { // [61] phi from assert_byte::@3 to print_str [phi:assert_byte::@3->print_str] print_str_from___b3: // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_byte::@3->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str2 [phi:assert_byte::@3->print_str#1] -- pbuz1=pbuc1 + // [61] phi print_str::str#12 = str2 [phi:assert_byte::@3->print_str#1] -- call_phi_near lda #str2 @@ -1992,7 +1992,7 @@ assert_byte: { // [43] call print_ln // [68] phi from assert_byte::@2 to print_ln [phi:assert_byte::@2->print_ln] print_ln_from___b2: - // [68] phi print_line_cursor#49 = print_line_cursor#52 [phi:assert_byte::@2->print_ln#0] -- register_copy + // [68] phi print_line_cursor#49 = print_line_cursor#52 [phi:assert_byte::@2->print_ln#0] -- call_phi_near jsr print_ln jmp __breturn // assert_byte::@return @@ -2008,7 +2008,7 @@ assert_byte: { // [61] phi from assert_byte::@1 to print_str [phi:assert_byte::@1->print_str] print_str_from___b1: // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_byte::@1->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str1 [phi:assert_byte::@1->print_str#1] -- pbuz1=pbuc1 + // [61] phi print_str::str#12 = str1 [phi:assert_byte::@1->print_str#1] -- call_phi_near lda #str1 @@ -2031,7 +2031,7 @@ assert_sbyte: { // [61] phi from assert_sbyte to print_str [phi:assert_sbyte->print_str] print_str_from_assert_sbyte: // [61] phi print_char_cursor#87 = print_char_cursor#92 [phi:assert_sbyte->print_str#0] -- register_copy - // [61] phi print_str::str#12 = print_str::str#5 [phi:assert_sbyte->print_str#1] -- register_copy + // [61] phi print_str::str#12 = print_str::str#5 [phi:assert_sbyte->print_str#1] -- call_phi_near jsr print_str // [51] phi from assert_sbyte to assert_sbyte::@4 [phi:assert_sbyte->assert_sbyte::@4] __b4_from_assert_sbyte: @@ -2042,7 +2042,7 @@ assert_sbyte: { // [61] phi from assert_sbyte::@4 to print_str [phi:assert_sbyte::@4->print_str] print_str_from___b4: // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_sbyte::@4->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str [phi:assert_sbyte::@4->print_str#1] -- pbuz1=pbuc1 + // [61] phi print_str::str#12 = str [phi:assert_sbyte::@4->print_str#1] -- call_phi_near lda #str @@ -2063,7 +2063,7 @@ assert_sbyte: { // [61] phi from assert_sbyte::@3 to print_str [phi:assert_sbyte::@3->print_str] print_str_from___b3: // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_sbyte::@3->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str2 [phi:assert_sbyte::@3->print_str#1] -- pbuz1=pbuc1 + // [61] phi print_str::str#12 = str2 [phi:assert_sbyte::@3->print_str#1] -- call_phi_near lda #str2 @@ -2078,7 +2078,7 @@ assert_sbyte: { // [57] call print_ln // [68] phi from assert_sbyte::@2 to print_ln [phi:assert_sbyte::@2->print_ln] print_ln_from___b2: - // [68] phi print_line_cursor#49 = print_line_cursor#0 [phi:assert_sbyte::@2->print_ln#0] -- register_copy + // [68] phi print_line_cursor#49 = print_line_cursor#0 [phi:assert_sbyte::@2->print_ln#0] -- call_phi_near jsr print_ln jmp __breturn // assert_sbyte::@return @@ -2094,7 +2094,7 @@ assert_sbyte: { // [61] phi from assert_sbyte::@1 to print_str [phi:assert_sbyte::@1->print_str] print_str_from___b1: // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_sbyte::@1->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str1 [phi:assert_sbyte::@1->print_str#1] -- pbuz1=pbuc1 + // [61] phi print_str::str#12 = str1 [phi:assert_sbyte::@1->print_str#1] -- call_phi_near lda #str1 @@ -2130,7 +2130,7 @@ print_str: { // [65] print_char::ch#0 = *print_str::str#10 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [66] call print_char + // [66] call print_char -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -2438,7 +2438,7 @@ Score: 1783 main: { // print_cls() // [1] call print_cls - // [7] phi from main to print_cls [phi:main->print_cls] + // [7] phi from main to print_cls [phi:main->print_cls] -- call_phi_near jsr print_cls // main::@1 // *BG_COLOR = GREEN @@ -2447,13 +2447,13 @@ main: { sta BG_COLOR // test_bytes() // [3] call test_bytes - // [10] phi from main::@1 to test_bytes [phi:main::@1->test_bytes] + // [10] phi from main::@1 to test_bytes [phi:main::@1->test_bytes] -- call_phi_near jsr test_bytes // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // test_sbytes() // [5] call test_sbytes - // [17] phi from main::@2 to test_sbytes [phi:main::@2->test_sbytes] + // [17] phi from main::@2 to test_sbytes [phi:main::@2->test_sbytes] -- call_phi_near jsr test_sbytes // main::@return // } @@ -2465,7 +2465,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [8] call memset - // [28] phi from print_cls to memset [phi:print_cls->memset] + // [28] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -2496,7 +2496,7 @@ test_bytes: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [34] phi assert_byte::msg#3 = msg [phi:test_bytes->assert_byte#4] -- pbuz1=pbuc1 + // [34] phi assert_byte::msg#3 = msg [phi:test_bytes->assert_byte#4] -- call_phi_near lda #msg @@ -2518,7 +2518,7 @@ test_bytes: { // [34] phi assert_byte::b#3 = test_bytes::bc#0 [phi:test_bytes::@1->assert_byte#2] -- vbuxx=vbuc1 ldx #bc // [34] phi print_char_cursor#77 = print_char_cursor#98 [phi:test_bytes::@1->assert_byte#3] -- register_copy - // [34] phi assert_byte::msg#3 = msg1 [phi:test_bytes::@1->assert_byte#4] -- pbuz1=pbuc1 + // [34] phi assert_byte::msg#3 = msg1 [phi:test_bytes::@1->assert_byte#4] -- call_phi_near lda #msg1 @@ -2540,7 +2540,7 @@ test_bytes: { // [34] phi assert_byte::b#3 = test_bytes::bd#0 [phi:test_bytes::@2->assert_byte#2] -- vbuxx=vbuc1 ldx #bd // [34] phi print_char_cursor#77 = print_char_cursor#99 [phi:test_bytes::@2->assert_byte#3] -- register_copy - // [34] phi assert_byte::msg#3 = test_bytes::msg2 [phi:test_bytes::@2->assert_byte#4] -- pbuz1=pbuc1 + // [34] phi assert_byte::msg#3 = test_bytes::msg2 [phi:test_bytes::@2->assert_byte#4] -- call_phi_near lda #msg2 @@ -2571,7 +2571,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bb [phi:test_sbytes->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bb - // [47] phi assert_sbyte::msg#5 = msg [phi:test_sbytes->assert_sbyte#2] -- pbuz1=pbuc1 + // [47] phi assert_sbyte::msg#5 = msg [phi:test_sbytes->assert_sbyte#2] -- call_phi_near lda #msg @@ -2587,7 +2587,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bc#0 [phi:test_sbytes::@1->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bc - // [47] phi assert_sbyte::msg#5 = msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- pbuz1=pbuc1 + // [47] phi assert_sbyte::msg#5 = msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- call_phi_near lda #msg1 @@ -2603,7 +2603,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bd#0 [phi:test_sbytes::@2->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bd - // [47] phi assert_sbyte::msg#5 = test_sbytes::msg2 [phi:test_sbytes::@2->assert_sbyte#2] -- pbuz1=pbuc1 + // [47] phi assert_sbyte::msg#5 = test_sbytes::msg2 [phi:test_sbytes::@2->assert_sbyte#2] -- call_phi_near lda #msg2 @@ -2619,7 +2619,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::be#0 [phi:test_sbytes::@3->assert_sbyte#1] -- vbsxx=vbsc1 ldx #be - // [47] phi assert_sbyte::msg#5 = test_sbytes::msg3 [phi:test_sbytes::@3->assert_sbyte#2] -- pbuz1=pbuc1 + // [47] phi assert_sbyte::msg#5 = test_sbytes::msg3 [phi:test_sbytes::@3->assert_sbyte#2] -- call_phi_near lda #msg3 @@ -2635,7 +2635,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bf [phi:test_sbytes::@4->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bf - // [47] phi assert_sbyte::msg#5 = test_sbytes::msg4 [phi:test_sbytes::@4->assert_sbyte#2] -- pbuz1=pbuc1 + // [47] phi assert_sbyte::msg#5 = test_sbytes::msg4 [phi:test_sbytes::@4->assert_sbyte#2] -- call_phi_near lda #msg4 @@ -2710,7 +2710,7 @@ assert_byte: { // [36] call print_str // [61] phi from assert_byte to print_str [phi:assert_byte->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#77 [phi:assert_byte->print_str#0] -- register_copy - // [61] phi print_str::str#12 = print_str::str#1 [phi:assert_byte->print_str#1] -- register_copy + // [61] phi print_str::str#12 = print_str::str#1 [phi:assert_byte->print_str#1] -- call_phi_near jsr print_str // [37] phi from assert_byte to assert_byte::@4 [phi:assert_byte->assert_byte::@4] // assert_byte::@4 @@ -2718,7 +2718,7 @@ assert_byte: { // [38] call print_str // [61] phi from assert_byte::@4 to print_str [phi:assert_byte::@4->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_byte::@4->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str [phi:assert_byte::@4->print_str#1] -- pbuz1=pbuc1 + // [61] phi print_str::str#12 = str [phi:assert_byte::@4->print_str#1] -- call_phi_near lda #str @@ -2735,7 +2735,7 @@ assert_byte: { // [41] call print_str // [61] phi from assert_byte::@3 to print_str [phi:assert_byte::@3->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_byte::@3->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str2 [phi:assert_byte::@3->print_str#1] -- pbuz1=pbuc1 + // [61] phi print_str::str#12 = str2 [phi:assert_byte::@3->print_str#1] -- call_phi_near lda #str2 @@ -2747,7 +2747,7 @@ assert_byte: { // print_ln() // [43] call print_ln // [68] phi from assert_byte::@2 to print_ln [phi:assert_byte::@2->print_ln] - // [68] phi print_line_cursor#49 = print_line_cursor#52 [phi:assert_byte::@2->print_ln#0] -- register_copy + // [68] phi print_line_cursor#49 = print_line_cursor#52 [phi:assert_byte::@2->print_ln#0] -- call_phi_near jsr print_ln // assert_byte::@return // } @@ -2763,7 +2763,7 @@ assert_byte: { // [46] call print_str // [61] phi from assert_byte::@1 to print_str [phi:assert_byte::@1->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_byte::@1->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str1 [phi:assert_byte::@1->print_str#1] -- pbuz1=pbuc1 + // [61] phi print_str::str#12 = str1 [phi:assert_byte::@1->print_str#1] -- call_phi_near lda #str1 @@ -2787,7 +2787,7 @@ assert_sbyte: { // [50] call print_str // [61] phi from assert_sbyte to print_str [phi:assert_sbyte->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#92 [phi:assert_sbyte->print_str#0] -- register_copy - // [61] phi print_str::str#12 = print_str::str#5 [phi:assert_sbyte->print_str#1] -- register_copy + // [61] phi print_str::str#12 = print_str::str#5 [phi:assert_sbyte->print_str#1] -- call_phi_near jsr print_str // [51] phi from assert_sbyte to assert_sbyte::@4 [phi:assert_sbyte->assert_sbyte::@4] // assert_sbyte::@4 @@ -2795,7 +2795,7 @@ assert_sbyte: { // [52] call print_str // [61] phi from assert_sbyte::@4 to print_str [phi:assert_sbyte::@4->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_sbyte::@4->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str [phi:assert_sbyte::@4->print_str#1] -- pbuz1=pbuc1 + // [61] phi print_str::str#12 = str [phi:assert_sbyte::@4->print_str#1] -- call_phi_near lda #str @@ -2812,7 +2812,7 @@ assert_sbyte: { // [55] call print_str // [61] phi from assert_sbyte::@3 to print_str [phi:assert_sbyte::@3->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_sbyte::@3->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str2 [phi:assert_sbyte::@3->print_str#1] -- pbuz1=pbuc1 + // [61] phi print_str::str#12 = str2 [phi:assert_sbyte::@3->print_str#1] -- call_phi_near lda #str2 @@ -2824,7 +2824,7 @@ assert_sbyte: { // print_ln() // [57] call print_ln // [68] phi from assert_sbyte::@2 to print_ln [phi:assert_sbyte::@2->print_ln] - // [68] phi print_line_cursor#49 = print_line_cursor#0 [phi:assert_sbyte::@2->print_ln#0] -- register_copy + // [68] phi print_line_cursor#49 = print_line_cursor#0 [phi:assert_sbyte::@2->print_ln#0] -- call_phi_near jsr print_ln // assert_sbyte::@return // } @@ -2840,7 +2840,7 @@ assert_sbyte: { // [60] call print_str // [61] phi from assert_sbyte::@1 to print_str [phi:assert_sbyte::@1->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_sbyte::@1->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str1 [phi:assert_sbyte::@1->print_str#1] -- pbuz1=pbuc1 + // [61] phi print_str::str#12 = str1 [phi:assert_sbyte::@1->print_str#1] -- call_phi_near lda #str1 @@ -2874,7 +2874,7 @@ print_str: { // [65] print_char::ch#0 = *print_str::str#10 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [66] call print_char + // [66] call print_char -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/constref-not-literal-problem.log b/src/test/ref/constref-not-literal-problem.log index 4068dc7e4..5e11f1540 100644 --- a/src/test/ref/constref-not-literal-problem.log +++ b/src/test/ref/constref-not-literal-problem.log @@ -180,7 +180,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call copy + // [1] call copy -- call_phi_near jsr copy jmp __breturn // main::@return @@ -267,7 +267,7 @@ Score: 41 // main main: { // copy(B, A) - // [1] call copy + // [1] call copy -- call_phi_near jsr copy // main::@return // } diff --git a/src/test/ref/cordic-atan2-16.log b/src/test/ref/cordic-atan2-16.log index 02d896823..42ef0d493 100644 --- a/src/test/ref/cordic-atan2-16.log +++ b/src/test/ref/cordic-atan2-16.log @@ -1758,7 +1758,7 @@ main: { .label x = $f .label y = $17 // [1] call init_font_hex - // [22] phi from main to init_font_hex [phi:main->init_font_hex] + // [22] phi from main to init_font_hex [phi:main->init_font_hex] -- call_phi_near init_font_hex_from_main: jsr init_font_hex // [2] phi from main to main::toD0181 [phi:main->main::toD0181] @@ -1816,7 +1816,7 @@ main: { sta.z yw // [8] atan2_16::x#0 = (int)main::xw#0 // [9] atan2_16::y#0 = (int)main::yw#0 - // [10] call atan2_16 + // [10] call atan2_16 -- call_phi_near jsr atan2_16 // [11] atan2_16::return#2 = atan2_16::return#0 jmp __b6 @@ -2636,7 +2636,7 @@ main: { .label y = $17 // init_font_hex(CHARSET) // [1] call init_font_hex - // [22] phi from main to init_font_hex [phi:main->init_font_hex] + // [22] phi from main to init_font_hex [phi:main->init_font_hex] -- call_phi_near jsr init_font_hex // [2] phi from main to main::toD0181 [phi:main->main::toD0181] // main::toD0181 @@ -2683,7 +2683,7 @@ main: { // word angle_w = atan2_16(xw, yw) // [8] atan2_16::x#0 = (int)main::xw#0 // [9] atan2_16::y#0 = (int)main::yw#0 - // [10] call atan2_16 + // [10] call atan2_16 -- call_phi_near jsr atan2_16 // [11] atan2_16::return#2 = atan2_16::return#0 // main::@6 diff --git a/src/test/ref/cordic-atan2-clear.log b/src/test/ref/cordic-atan2-clear.log index 9f4227d9a..827cd2778 100644 --- a/src/test/ref/cordic-atan2-clear.log +++ b/src/test/ref/cordic-atan2-clear.log @@ -2027,7 +2027,7 @@ main: { // Clear the screen by modifying the charset .label clear_char = $18 // [1] call init_font_hex - // [10] phi from main to init_font_hex [phi:main->init_font_hex] + // [10] phi from main to init_font_hex [phi:main->init_font_hex] -- call_phi_near init_font_hex_from_main: jsr init_font_hex // [2] phi from main to main::toD0181 [phi:main->main::toD0181] @@ -2042,7 +2042,7 @@ main: { lda #toD0181_return sta D018 // [4] call init_angle_screen - // [33] phi from main::@5 to init_angle_screen [phi:main::@5->init_angle_screen] + // [33] phi from main::@5 to init_angle_screen [phi:main::@5->init_angle_screen] -- call_phi_near init_angle_screen_from___b5: jsr init_angle_screen // [5] phi from main::@5 to main::@1 [phi:main::@5->main::@1] @@ -2357,7 +2357,7 @@ init_angle_screen: { sty.z yw // [47] atan2_16::x#0 = (int)init_angle_screen::xw#0 // [48] atan2_16::y#0 = (int)init_angle_screen::yw#0 - // [49] call atan2_16 + // [49] call atan2_16 -- call_phi_near jsr atan2_16 // [50] atan2_16::return#2 = atan2_16::return#0 jmp __b5 @@ -3059,7 +3059,7 @@ main: { .label clear_char = $18 // init_font_hex(CHARSET) // [1] call init_font_hex - // [10] phi from main to init_font_hex [phi:main->init_font_hex] + // [10] phi from main to init_font_hex [phi:main->init_font_hex] -- call_phi_near jsr init_font_hex // [2] phi from main to main::toD0181 [phi:main->main::toD0181] // main::toD0181 @@ -3070,7 +3070,7 @@ main: { sta D018 // init_angle_screen(SCREEN) // [4] call init_angle_screen - // [33] phi from main::@5 to init_angle_screen [phi:main::@5->init_angle_screen] + // [33] phi from main::@5 to init_angle_screen [phi:main::@5->init_angle_screen] -- call_phi_near jsr init_angle_screen // [5] phi from main::@5 to main::@1 [phi:main::@5->main::@1] // [5] phi main::clear_char#5 = CHARSET [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 @@ -3373,7 +3373,7 @@ init_angle_screen: { // word angle_w = atan2_16(xw, yw) // [47] atan2_16::x#0 = (int)init_angle_screen::xw#0 // [48] atan2_16::y#0 = (int)init_angle_screen::yw#0 - // [49] call atan2_16 + // [49] call atan2_16 -- call_phi_near jsr atan2_16 // [50] atan2_16::return#2 = atan2_16::return#0 // init_angle_screen::@5 diff --git a/src/test/ref/cordic-atan2.log b/src/test/ref/cordic-atan2.log index 2e53e0d27..c4712c1a2 100644 --- a/src/test/ref/cordic-atan2.log +++ b/src/test/ref/cordic-atan2.log @@ -1440,7 +1440,7 @@ main: { .label x = $c .label y = $d // [1] call init_font_hex - // [18] phi from main to init_font_hex [phi:main->init_font_hex] + // [18] phi from main to init_font_hex [phi:main->init_font_hex] -- call_phi_near init_font_hex_from_main: jsr init_font_hex // [2] phi from main to main::toD0181 [phi:main->main::toD0181] @@ -1488,7 +1488,7 @@ main: { __b2: // [6] atan2_8::x#0 = main::x#2 // [7] atan2_8::y#0 = main::y#4 - // [8] call atan2_8 + // [8] call atan2_8 -- call_phi_near jsr atan2_8 // [9] atan2_8::return#2 = atan2_8::return#0 -- vbuaa=vbuxx txa @@ -2171,7 +2171,7 @@ main: { .label y = $d // init_font_hex(CHARSET) // [1] call init_font_hex - // [18] phi from main to init_font_hex [phi:main->init_font_hex] + // [18] phi from main to init_font_hex [phi:main->init_font_hex] -- call_phi_near jsr init_font_hex // [2] phi from main to main::toD0181 [phi:main->main::toD0181] // main::toD0181 @@ -2207,7 +2207,7 @@ main: { // byte angle = atan2_8(x, y) // [6] atan2_8::x#0 = main::x#2 // [7] atan2_8::y#0 = main::y#4 - // [8] call atan2_8 + // [8] call atan2_8 -- call_phi_near jsr atan2_8 // [9] atan2_8::return#2 = atan2_8::return#0 -- vbuaa=vbuxx txa diff --git a/src/test/ref/cstyle-decl-function.log b/src/test/ref/cstyle-decl-function.log index 85b67ab57..beb959f12 100644 --- a/src/test/ref/cstyle-decl-function.log +++ b/src/test/ref/cstyle-decl-function.log @@ -243,7 +243,7 @@ main: { sum_from_main: // [10] phi sum::b#2 = 2 [phi:main->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- call_phi_near ldx #'a' jsr sum // [2] sum::return#0 = sum::return#2 @@ -258,7 +258,7 @@ main: { sum_from___b1: // [10] phi sum::b#2 = $c [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #$c - // [10] phi sum::a#2 = 'a' [phi:main::@1->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::a#2 = 'a' [phi:main::@1->sum#1] -- call_phi_near ldx #'a' jsr sum // [6] sum::return#1 = sum::return#2 @@ -353,7 +353,7 @@ main: { // [10] phi from main to sum [phi:main->sum] // [10] phi sum::b#2 = 2 [phi:main->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- call_phi_near ldx #'a' jsr sum // sum('a', 2) @@ -368,7 +368,7 @@ main: { // [10] phi from main::@1 to sum [phi:main::@1->sum] // [10] phi sum::b#2 = $c [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #$c - // [10] phi sum::a#2 = 'a' [phi:main::@1->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::a#2 = 'a' [phi:main::@1->sum#1] -- call_phi_near ldx #'a' jsr sum // sum('a', 12) diff --git a/src/test/ref/declared-memory-var-6.log b/src/test/ref/declared-memory-var-6.log index 5a8d4a8da..b629987ff 100644 --- a/src/test/ref/declared-memory-var-6.log +++ b/src/test/ref/declared-memory-var-6.log @@ -438,7 +438,7 @@ main: { out_from_main: // [24] phi i#27 = 0 [phi:main->out#0] -- vbuyy=vbuc1 ldy #0 - // [24] phi out::c#10 = main::reg_zp_flex [phi:main->out#1] -- vbuxx=vbuc1 + // [24] phi out::c#10 = main::reg_zp_flex [phi:main->out#1] -- call_phi_near ldx #reg_zp_flex jsr out jmp __b1 @@ -450,7 +450,7 @@ main: { // [24] phi from main::@1 to out [phi:main::@1->out] out_from___b1: // [24] phi i#27 = i#11 [phi:main::@1->out#0] -- register_copy - // [24] phi out::c#10 = out::c#1 [phi:main::@1->out#1] -- register_copy + // [24] phi out::c#10 = out::c#1 [phi:main::@1->out#1] -- call_phi_near jsr out // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -461,7 +461,7 @@ main: { // [24] phi from main::@2 to out [phi:main::@2->out] out_from___b2: // [24] phi i#27 = i#11 [phi:main::@2->out#0] -- register_copy - // [24] phi out::c#10 = main::reg_mem_flex [phi:main::@2->out#1] -- vbuxx=vbuc1 + // [24] phi out::c#10 = main::reg_mem_flex [phi:main::@2->out#1] -- call_phi_near ldx #reg_mem_flex jsr out jmp __b3 @@ -473,7 +473,7 @@ main: { // [24] phi from main::@3 to out [phi:main::@3->out] out_from___b3: // [24] phi i#27 = i#11 [phi:main::@3->out#0] -- register_copy - // [24] phi out::c#10 = out::c#3 [phi:main::@3->out#1] -- register_copy + // [24] phi out::c#10 = out::c#3 [phi:main::@3->out#1] -- call_phi_near jsr out // [11] phi from main::@3 to main::@4 [phi:main::@3->main::@4] __b4_from___b3: @@ -484,7 +484,7 @@ main: { // [24] phi from main::@4 to out [phi:main::@4->out] out_from___b4: // [24] phi i#27 = i#11 [phi:main::@4->out#0] -- register_copy - // [24] phi out::c#10 = main::default_default [phi:main::@4->out#1] -- vbuxx=vbuc1 + // [24] phi out::c#10 = main::default_default [phi:main::@4->out#1] -- call_phi_near ldx #default_default jsr out // [13] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -496,7 +496,7 @@ main: { // [24] phi from main::@5 to out [phi:main::@5->out] out_from___b5: // [24] phi i#27 = i#11 [phi:main::@5->out#0] -- register_copy - // [24] phi out::c#10 = main::reg_default [phi:main::@5->out#1] -- vbuxx=vbuc1 + // [24] phi out::c#10 = main::reg_default [phi:main::@5->out#1] -- call_phi_near ldx #reg_default jsr out // [15] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -508,7 +508,7 @@ main: { // [24] phi from main::@6 to out [phi:main::@6->out] out_from___b6: // [24] phi i#27 = i#11 [phi:main::@6->out#0] -- register_copy - // [24] phi out::c#10 = main::default_zp_flex [phi:main::@6->out#1] -- vbuxx=vbuc1 + // [24] phi out::c#10 = main::default_zp_flex [phi:main::@6->out#1] -- call_phi_near ldx #default_zp_flex jsr out jmp __b7 @@ -520,7 +520,7 @@ main: { // [24] phi from main::@7 to out [phi:main::@7->out] out_from___b7: // [24] phi i#27 = i#11 [phi:main::@7->out#0] -- register_copy - // [24] phi out::c#10 = out::c#7 [phi:main::@7->out#1] -- register_copy + // [24] phi out::c#10 = out::c#7 [phi:main::@7->out#1] -- call_phi_near jsr out // [19] phi from main::@7 to main::@8 [phi:main::@7->main::@8] __b8_from___b7: @@ -531,7 +531,7 @@ main: { // [24] phi from main::@8 to out [phi:main::@8->out] out_from___b8: // [24] phi i#27 = i#11 [phi:main::@8->out#0] -- register_copy - // [24] phi out::c#10 = main::default_mem_flex [phi:main::@8->out#1] -- vbuxx=vbuc1 + // [24] phi out::c#10 = main::default_mem_flex [phi:main::@8->out#1] -- call_phi_near ldx #default_mem_flex jsr out jmp __b9 @@ -543,7 +543,7 @@ main: { // [24] phi from main::@9 to out [phi:main::@9->out] out_from___b9: // [24] phi i#27 = i#11 [phi:main::@9->out#0] -- register_copy - // [24] phi out::c#10 = out::c#9 [phi:main::@9->out#1] -- register_copy + // [24] phi out::c#10 = out::c#9 [phi:main::@9->out#1] -- call_phi_near jsr out jmp __breturn // main::@return @@ -694,7 +694,7 @@ main: { // [24] phi from main to out [phi:main->out] // [24] phi i#27 = 0 [phi:main->out#0] -- vbuyy=vbuc1 ldy #0 - // [24] phi out::c#10 = main::reg_zp_flex [phi:main->out#1] -- vbuxx=vbuc1 + // [24] phi out::c#10 = main::reg_zp_flex [phi:main->out#1] -- call_phi_near ldx #reg_zp_flex jsr out // main::@1 @@ -704,7 +704,7 @@ main: { // [6] call out // [24] phi from main::@1 to out [phi:main::@1->out] // [24] phi i#27 = i#11 [phi:main::@1->out#0] -- register_copy - // [24] phi out::c#10 = out::c#1 [phi:main::@1->out#1] -- register_copy + // [24] phi out::c#10 = out::c#1 [phi:main::@1->out#1] -- call_phi_near jsr out // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 @@ -712,7 +712,7 @@ main: { // [8] call out // [24] phi from main::@2 to out [phi:main::@2->out] // [24] phi i#27 = i#11 [phi:main::@2->out#0] -- register_copy - // [24] phi out::c#10 = main::reg_mem_flex [phi:main::@2->out#1] -- vbuxx=vbuc1 + // [24] phi out::c#10 = main::reg_mem_flex [phi:main::@2->out#1] -- call_phi_near ldx #reg_mem_flex jsr out // main::@3 @@ -722,7 +722,7 @@ main: { // [10] call out // [24] phi from main::@3 to out [phi:main::@3->out] // [24] phi i#27 = i#11 [phi:main::@3->out#0] -- register_copy - // [24] phi out::c#10 = out::c#3 [phi:main::@3->out#1] -- register_copy + // [24] phi out::c#10 = out::c#3 [phi:main::@3->out#1] -- call_phi_near jsr out // [11] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 @@ -730,7 +730,7 @@ main: { // [12] call out // [24] phi from main::@4 to out [phi:main::@4->out] // [24] phi i#27 = i#11 [phi:main::@4->out#0] -- register_copy - // [24] phi out::c#10 = main::default_default [phi:main::@4->out#1] -- vbuxx=vbuc1 + // [24] phi out::c#10 = main::default_default [phi:main::@4->out#1] -- call_phi_near ldx #default_default jsr out // [13] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -739,7 +739,7 @@ main: { // [14] call out // [24] phi from main::@5 to out [phi:main::@5->out] // [24] phi i#27 = i#11 [phi:main::@5->out#0] -- register_copy - // [24] phi out::c#10 = main::reg_default [phi:main::@5->out#1] -- vbuxx=vbuc1 + // [24] phi out::c#10 = main::reg_default [phi:main::@5->out#1] -- call_phi_near ldx #reg_default jsr out // [15] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -748,7 +748,7 @@ main: { // [16] call out // [24] phi from main::@6 to out [phi:main::@6->out] // [24] phi i#27 = i#11 [phi:main::@6->out#0] -- register_copy - // [24] phi out::c#10 = main::default_zp_flex [phi:main::@6->out#1] -- vbuxx=vbuc1 + // [24] phi out::c#10 = main::default_zp_flex [phi:main::@6->out#1] -- call_phi_near ldx #default_zp_flex jsr out // main::@7 @@ -758,7 +758,7 @@ main: { // [18] call out // [24] phi from main::@7 to out [phi:main::@7->out] // [24] phi i#27 = i#11 [phi:main::@7->out#0] -- register_copy - // [24] phi out::c#10 = out::c#7 [phi:main::@7->out#1] -- register_copy + // [24] phi out::c#10 = out::c#7 [phi:main::@7->out#1] -- call_phi_near jsr out // [19] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 @@ -766,7 +766,7 @@ main: { // [20] call out // [24] phi from main::@8 to out [phi:main::@8->out] // [24] phi i#27 = i#11 [phi:main::@8->out#0] -- register_copy - // [24] phi out::c#10 = main::default_mem_flex [phi:main::@8->out#1] -- vbuxx=vbuc1 + // [24] phi out::c#10 = main::default_mem_flex [phi:main::@8->out#1] -- call_phi_near ldx #default_mem_flex jsr out // main::@9 @@ -776,7 +776,7 @@ main: { // [22] call out // [24] phi from main::@9 to out [phi:main::@9->out] // [24] phi i#27 = i#11 [phi:main::@9->out#0] -- register_copy - // [24] phi out::c#10 = out::c#9 [phi:main::@9->out#1] -- register_copy + // [24] phi out::c#10 = out::c#9 [phi:main::@9->out#1] -- call_phi_near jsr out // main::@return // } diff --git a/src/test/ref/declared-memory-var-7.log b/src/test/ref/declared-memory-var-7.log index 943be5261..7718eb181 100644 --- a/src/test/ref/declared-memory-var-7.log +++ b/src/test/ref/declared-memory-var-7.log @@ -181,7 +181,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -287,7 +287,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/declared-memory-var-8.log b/src/test/ref/declared-memory-var-8.log index f5d839898..76c66804b 100644 --- a/src/test/ref/declared-memory-var-8.log +++ b/src/test/ref/declared-memory-var-8.log @@ -179,7 +179,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -285,7 +285,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/declared-ssa-var-0.log b/src/test/ref/declared-ssa-var-0.log index 77a968616..2f7d9e2f8 100644 --- a/src/test/ref/declared-ssa-var-0.log +++ b/src/test/ref/declared-ssa-var-0.log @@ -518,7 +518,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -791,7 +791,7 @@ __start: { sta.z idx_nssa_g // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/default-font.log b/src/test/ref/default-font.log index 099802ad4..ce1a6dbd9 100644 --- a/src/test/ref/default-font.log +++ b/src/test/ref/default-font.log @@ -469,7 +469,7 @@ main: { .label ch = 6 .label x = 7 // [1] call memset - // [13] phi from main to memset [phi:main->memset] + // [13] phi from main to memset [phi:main->memset] -- call_phi_near memset_from_main: jsr memset // [2] phi from main to main::@1 [phi:main->main::@1] @@ -686,7 +686,7 @@ main: { .label x = 7 // memset(SCREEN, ' ', 1000) // [1] call memset - // [13] phi from main to memset [phi:main->memset] + // [13] phi from main to memset [phi:main->memset] -- call_phi_near jsr memset // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::x#4 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 diff --git a/src/test/ref/deref-to-derefidx-2.log b/src/test/ref/deref-to-derefidx-2.log index 4d3b92685..7996b0807 100644 --- a/src/test/ref/deref-to-derefidx-2.log +++ b/src/test/ref/deref-to-derefidx-2.log @@ -245,7 +245,7 @@ main: { // [5] phi screen_idx#11 = 0 [phi:main->print#0] -- vbuz1=vbuc1 lda #0 sta.z screen_idx - // [5] phi print::m#2 = msg1 [phi:main->print#1] -- pbuz1=pbuc1 + // [5] phi print::m#2 = msg1 [phi:main->print#1] -- call_phi_near lda #msg1 @@ -260,7 +260,7 @@ main: { // [5] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [5] phi screen_idx#11 = screen_idx#12 [phi:main::@1->print#0] -- register_copy - // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- pbuz1=pbuc1 + // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- call_phi_near lda #msg2 @@ -358,7 +358,7 @@ main: { // [5] phi screen_idx#11 = 0 [phi:main->print#0] -- vbuz1=vbuc1 lda #0 sta.z screen_idx - // [5] phi print::m#2 = msg1 [phi:main->print#1] -- pbuz1=pbuc1 + // [5] phi print::m#2 = msg1 [phi:main->print#1] -- call_phi_near lda #msg1 @@ -370,7 +370,7 @@ main: { // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] // [5] phi screen_idx#11 = screen_idx#12 [phi:main::@1->print#0] -- register_copy - // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- pbuz1=pbuc1 + // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- call_phi_near lda #msg2 diff --git a/src/test/ref/deref-to-derefidx.log b/src/test/ref/deref-to-derefidx.log index 272e2ec42..c68e6aed2 100644 --- a/src/test/ref/deref-to-derefidx.log +++ b/src/test/ref/deref-to-derefidx.log @@ -225,7 +225,7 @@ main: { print_from_main: // [5] phi idx#11 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print::m#2 = msg1 [phi:main->print#1] -- pbuz1=pbuc1 + // [5] phi print::m#2 = msg1 [phi:main->print#1] -- call_phi_near lda #msg1 @@ -240,7 +240,7 @@ main: { // [5] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [5] phi idx#11 = idx#12 [phi:main::@1->print#0] -- register_copy - // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- pbuz1=pbuc1 + // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- call_phi_near lda #msg2 @@ -327,7 +327,7 @@ main: { // [5] phi from main to print [phi:main->print] // [5] phi idx#11 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print::m#2 = msg1 [phi:main->print#1] -- pbuz1=pbuc1 + // [5] phi print::m#2 = msg1 [phi:main->print#1] -- call_phi_near lda #msg1 @@ -339,7 +339,7 @@ main: { // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] // [5] phi idx#11 = idx#12 [phi:main::@1->print#0] -- register_copy - // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- pbuz1=pbuc1 + // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- call_phi_near lda #msg2 diff --git a/src/test/ref/ducks-array.log b/src/test/ref/ducks-array.log index 52b0efcee..246dd736f 100644 --- a/src/test/ref/ducks-array.log +++ b/src/test/ref/ducks-array.log @@ -360,7 +360,7 @@ main: { // [0] chrout::petscii = $95 -- vbuz1=vbuc1 lda #$95 sta.z chrout.petscii - // [1] call chrout + // [1] call chrout -- call_phi_near jsr chrout jmp __b1 // main::@1 @@ -368,7 +368,7 @@ main: { // [2] chrout::petscii = *points -- vbuz1=_deref_pbuc1 lda points sta.z chrout.petscii - // [3] call chrout + // [3] call chrout -- call_phi_near jsr chrout jmp __b2 // main::@2 @@ -376,7 +376,7 @@ main: { // [4] chrout::petscii = *(points+1) -- vbuz1=_deref_pbuc1 lda points+1 sta.z chrout.petscii - // [5] call chrout + // [5] call chrout -- call_phi_near jsr chrout jmp __b3 // main::@3 @@ -384,7 +384,7 @@ main: { // [6] chrout::petscii = *(points+2) -- vbuz1=_deref_pbuc1 lda points+2 sta.z chrout.petscii - // [7] call chrout + // [7] call chrout -- call_phi_near jsr chrout jmp __b4 // main::@4 @@ -392,7 +392,7 @@ main: { // [8] chrout::petscii = *(points+3) -- vbuz1=_deref_pbuc1 lda points+3 sta.z chrout.petscii - // [9] call chrout + // [9] call chrout -- call_phi_near jsr chrout jmp __breturn // main::@return @@ -468,35 +468,35 @@ main: { // [0] chrout::petscii = $95 -- vbuz1=vbuc1 lda #$95 sta.z chrout.petscii - // [1] call chrout + // [1] call chrout -- call_phi_near jsr chrout // main::@1 // chrout(points[0]) // [2] chrout::petscii = *points -- vbuz1=_deref_pbuc1 lda points sta.z chrout.petscii - // [3] call chrout + // [3] call chrout -- call_phi_near jsr chrout // main::@2 // chrout(points[1]) // [4] chrout::petscii = *(points+1) -- vbuz1=_deref_pbuc1 lda points+1 sta.z chrout.petscii - // [5] call chrout + // [5] call chrout -- call_phi_near jsr chrout // main::@3 // chrout(points[2]) // [6] chrout::petscii = *(points+2) -- vbuz1=_deref_pbuc1 lda points+2 sta.z chrout.petscii - // [7] call chrout + // [7] call chrout -- call_phi_near jsr chrout // main::@4 // chrout(points[3]) // [8] chrout::petscii = *(points+3) -- vbuz1=_deref_pbuc1 lda points+3 sta.z chrout.petscii - // [9] call chrout + // [9] call chrout -- call_phi_near jsr chrout // main::@return // } diff --git a/src/test/ref/ducks-loop211.log b/src/test/ref/ducks-loop211.log index 66f3d5dd8..2cfcc151f 100644 --- a/src/test/ref/ducks-loop211.log +++ b/src/test/ref/ducks-loop211.log @@ -214,7 +214,7 @@ main: { // [4] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [5] call chrout + // [5] call chrout -- call_phi_near jsr chrout jmp __b2 // main::@2 @@ -320,7 +320,7 @@ main: { // [4] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [5] call chrout + // [5] call chrout -- call_phi_near jsr chrout // main::@2 // ++k; diff --git a/src/test/ref/ducks-total.log b/src/test/ref/ducks-total.log index b2ef90b84..731814936 100644 --- a/src/test/ref/ducks-total.log +++ b/src/test/ref/ducks-total.log @@ -9588,14 +9588,14 @@ __start: { // [7] m = 0 -- vbuz1=vbuc1 lda #0 sta.z m - // [8] call conio_c64_init + // [8] call conio_c64_init -- call_phi_near jsr conio_c64_init // [9] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [10] call main + // [10] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -9637,7 +9637,7 @@ conio_c64_init: { // [17] call gotoxy // [304] phi from conio_c64_init::@1 to gotoxy [phi:conio_c64_init::@1->gotoxy] gotoxy_from___b1: - // [304] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- register_copy + // [304] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -9700,7 +9700,7 @@ main: { // [20] chrout::petscii = lock -- vbuz1=vbuc1 lda #lock sta.z chrout.petscii - // [21] call chrout + // [21] call chrout -- call_phi_near // border and black paper jsr chrout jmp __b50 @@ -9709,7 +9709,7 @@ main: { // [22] chrout::petscii = lower -- vbuz1=vbuc1 lda #lower sta.z chrout.petscii - // [23] call chrout + // [23] call chrout -- call_phi_near //Lock UpperCase to Lowercase key jsr chrout jmp __b51 @@ -9751,7 +9751,7 @@ main: { // [27] call clear_screen // [321] phi from main::@3 to clear_screen [phi:main::@3->clear_screen] clear_screen_from___b3: - // [321] phi clear_screen::n#5 = $20 [phi:main::@3->clear_screen#0] -- vbuz1=vbuc1 + // [321] phi clear_screen::n#5 = $20 [phi:main::@3->clear_screen#0] -- call_phi_near lda #$20 sta.z clear_screen.n jsr clear_screen @@ -9764,7 +9764,7 @@ main: { // Clear Screen with spaces & black ink // [334] phi from main::@52 to textcolor [phi:main::@52->textcolor] textcolor_from___b52: - // [334] phi textcolor::color#7 = 7 [phi:main::@52->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 7 [phi:main::@52->textcolor#0] -- call_phi_near lda #7 sta.z textcolor.color jsr textcolor @@ -9776,7 +9776,7 @@ main: { // [31] call cputs // [337] phi from main::@53 to cputs [phi:main::@53->cputs] cputs_from___b53: - // [337] phi cputs::s#11 = intro [phi:main::@53->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = intro [phi:main::@53->cputs#0] -- call_phi_near lda #intro @@ -9791,7 +9791,7 @@ main: { // Yellow ink // [334] phi from main::@54 to textcolor [phi:main::@54->textcolor] textcolor_from___b54: - // [334] phi textcolor::color#7 = 1 [phi:main::@54->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 1 [phi:main::@54->textcolor#0] -- call_phi_near lda #1 sta.z textcolor.color jsr textcolor @@ -9803,7 +9803,7 @@ main: { // [35] call cputs // [337] phi from main::@55 to cputs [phi:main::@55->cputs] cputs_from___b55: - // [337] phi cputs::s#11 = levels [phi:main::@55->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = levels [phi:main::@55->cputs#0] -- call_phi_near lda #levels @@ -9818,7 +9818,7 @@ main: { // White // [334] phi from main::@56 to textcolor [phi:main::@56->textcolor] textcolor_from___b56: - // [334] phi textcolor::color#7 = 2 [phi:main::@56->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 2 [phi:main::@56->textcolor#0] -- call_phi_near lda #2 sta.z textcolor.color jsr textcolor @@ -9830,7 +9830,7 @@ main: { // [39] call cputs // [337] phi from main::@57 to cputs [phi:main::@57->cputs] cputs_from___b57: - // [337] phi cputs::s#11 = foot [phi:main::@57->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = foot [phi:main::@57->cputs#0] -- call_phi_near lda #foot @@ -9858,7 +9858,7 @@ main: { // wait for 1-3-5-7-9 keys only // [321] phi from main::@5 to clear_screen [phi:main::@5->clear_screen] clear_screen_from___b5: - // [321] phi clear_screen::n#5 = 4 [phi:main::@5->clear_screen#0] -- vbuz1=vbuc1 + // [321] phi clear_screen::n#5 = 4 [phi:main::@5->clear_screen#0] -- call_phi_near lda #4 sta.z clear_screen.n jsr clear_screen @@ -9871,7 +9871,7 @@ main: { // [46] chrout::petscii = reverse_on -- vbuz1=vbuc1 lda #reverse_on sta.z chrout.petscii - // [47] call chrout + // [47] call chrout -- call_phi_near // Graphic mode jsr chrout jmp __b59 @@ -9880,7 +9880,7 @@ main: { // [48] chrout::petscii = red -- vbuz1=vbuc1 lda #red sta.z chrout.petscii - // [49] call chrout + // [49] call chrout -- call_phi_near jsr chrout jmp __b60 // main::@60 @@ -9888,7 +9888,7 @@ main: { // [50] chrout::petscii = down -- vbuz1=vbuc1 lda #down sta.z chrout.petscii - // [51] call chrout + // [51] call chrout -- call_phi_near jsr chrout // [52] phi from main::@60 to main::@6 [phi:main::@60->main::@6] __b6_from___b60: @@ -9912,7 +9912,7 @@ main: { // [54] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [55] call chrout + // [55] call chrout -- call_phi_near // 23 rows * 22 columns (7680 to 8185). 506 positions. jsr chrout jmp __b61 @@ -9927,7 +9927,7 @@ main: { // [58] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [59] call chrout + // [59] call chrout -- call_phi_near //last brick from last line (#23) to avoid scrolling jsr chrout jmp __b62 @@ -9975,7 +9975,7 @@ main: { // [345] phi from main::@13 to random [phi:main::@13->random] random_from___b13: // [345] phi random::n#4 = random::n#0 [phi:main::@13->random#0] -- register_copy - // [345] phi random::k#4 = random::k#0 [phi:main::@13->random#1] -- register_copy + // [345] phi random::k#4 = random::k#0 [phi:main::@13->random#1] -- call_phi_near jsr random jmp __b71 // main::@71 @@ -10018,7 +10018,7 @@ main: { // [71] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [72] call chrout + // [72] call chrout -- call_phi_near // Duck #1 jsr chrout jmp __b65 @@ -10027,7 +10027,7 @@ main: { // [73] chrout::petscii = yellow -- vbuz1=vbuc1 lda #yellow sta.z chrout.petscii - // [74] call chrout + // [74] call chrout -- call_phi_near jsr chrout jmp __b66 // main::@66 @@ -10035,7 +10035,7 @@ main: { // [75] chrout::petscii = $50 -- vbuz1=vbuc1 lda #$50 sta.z chrout.petscii - // [76] call chrout + // [76] call chrout -- call_phi_near jsr chrout jmp __b67 // main::@67 @@ -10043,7 +10043,7 @@ main: { // [77] chrout::petscii = $54 -- vbuz1=vbuc1 lda #$54 sta.z chrout.petscii - // [78] call chrout + // [78] call chrout -- call_phi_near jsr chrout jmp __b68 // main::@68 @@ -10051,7 +10051,7 @@ main: { // [79] chrout::petscii = $53 -- vbuz1=vbuc1 lda #$53 sta.z chrout.petscii - // [80] call chrout + // [80] call chrout -- call_phi_near jsr chrout jmp __b69 // main::@69 @@ -10059,7 +10059,7 @@ main: { // [81] chrout::petscii = $3a -- vbuz1=vbuc1 lda #$3a sta.z chrout.petscii - // [82] call chrout + // [82] call chrout -- call_phi_near jsr chrout jmp __b70 // main::@70 @@ -10089,7 +10089,7 @@ main: { // Write 'TM:9', yellow // [351] phi from main::@19 to write_score [phi:main::@19->write_score] write_score_from___b19: - // [351] phi score#13 = 0 [phi:main::@19->write_score#0] -- vwuz1=vbuc1 + // [351] phi score#13 = 0 [phi:main::@19->write_score#0] -- call_phi_near lda #<0 sta.z score lda #>0 @@ -10101,7 +10101,7 @@ main: { // [88] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [89] call chrout + // [89] call chrout -- call_phi_near // Write Score (yellow) jsr chrout jmp __b76 @@ -10110,7 +10110,7 @@ main: { // [90] chrout::petscii = green -- vbuz1=vbuc1 lda #green sta.z chrout.petscii - // [91] call chrout + // [91] call chrout -- call_phi_near jsr chrout jmp __b77 // main::@77 @@ -10163,7 +10163,7 @@ main: { // [96] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [97] call chrout + // [97] call chrout -- call_phi_near jsr chrout jmp __b79 // main::@79 @@ -10171,7 +10171,7 @@ main: { // [98] chrout::petscii = green -- vbuz1=vbuc1 lda #green sta.z chrout.petscii - // [99] call chrout + // [99] call chrout -- call_phi_near jsr chrout jmp __b80 // main::@80 @@ -10179,7 +10179,7 @@ main: { // [100] chrout::petscii = reverse_on -- vbuz1=vbuc1 lda #reverse_on sta.z chrout.petscii - // [101] call chrout + // [101] call chrout -- call_phi_near jsr chrout jmp __b81 // main::@81 @@ -10201,7 +10201,7 @@ main: { // [104] chrout::petscii = $31 -- vbuz1=vbuc1 lda #$31 sta.z chrout.petscii - // [105] call chrout + // [105] call chrout -- call_phi_near jsr chrout jmp __b82 // main::@82 @@ -10209,7 +10209,7 @@ main: { // [106] chrout::petscii = $30 -- vbuz1=vbuc1 lda #$30 sta.z chrout.petscii - // [107] call chrout + // [107] call chrout -- call_phi_near jsr chrout // [108] phi from main::@103 main::@104 main::@105 main::@106 main::@23 main::@82 main::@84 to main::@24 [phi:main::@103/main::@104/main::@105/main::@106/main::@23/main::@82/main::@84->main::@24] __b24_from___b103: @@ -10229,7 +10229,7 @@ main: { // [345] phi random::n#4 = $ff [phi:main::@24->random#0] -- vbuz1=vbuc1 lda #$ff sta.z random.n - // [345] phi random::k#4 = 0 [phi:main::@24->random#1] -- vbuz1=vbuc1 + // [345] phi random::k#4 = 0 [phi:main::@24->random#1] -- call_phi_near lda #0 sta.z random.k jsr random @@ -10247,7 +10247,7 @@ main: { // [345] phi random::n#4 = $ff [phi:main::@83->random#0] -- vbuz1=vbuc1 lda #$ff sta.z random.n - // [345] phi random::k#4 = 0 [phi:main::@83->random#1] -- vbuz1=vbuc1 + // [345] phi random::k#4 = 0 [phi:main::@83->random#1] -- call_phi_near lda #0 sta.z random.k jsr random @@ -10340,7 +10340,7 @@ main: { jmp __b25 // main::@25 __b25: - // [123] call chrono_restart + // [123] call chrono_restart -- call_phi_near jsr chrono_restart // [124] phi from main::@25 to main::@26 [phi:main::@25->main::@26] __b26_from___b25: @@ -10384,7 +10384,7 @@ main: { // [128] call write_score // [351] phi from main::@28 to write_score [phi:main::@28->write_score] write_score_from___b28: - // [351] phi score#13 = score#4 [phi:main::@28->write_score#0] -- register_copy + // [351] phi score#13 = score#4 [phi:main::@28->write_score#0] -- call_phi_near jsr write_score jmp __b86 // main::@86 @@ -10396,7 +10396,7 @@ main: { // [381] phi from main::@86 to wait [phi:main::@86->wait] wait_from___b86: // [381] phi z#53 = z#100 [phi:main::@86->wait#0] -- register_copy - // [381] phi wait::n#6 = $14 [phi:main::@86->wait#1] -- vbuz1=vbuc1 + // [381] phi wait::n#6 = $14 [phi:main::@86->wait#1] -- call_phi_near lda #$14 sta.z wait.n jsr wait @@ -10485,7 +10485,7 @@ main: { // 10 ducks // [321] phi from main::@44 to clear_screen [phi:main::@44->clear_screen] clear_screen_from___b44: - // [321] phi clear_screen::n#5 = 4 [phi:main::@44->clear_screen#0] -- vbuz1=vbuc1 + // [321] phi clear_screen::n#5 = 4 [phi:main::@44->clear_screen#0] -- call_phi_near lda #4 sta.z clear_screen.n jsr clear_screen @@ -10498,7 +10498,7 @@ main: { // [147] chrout::petscii = lower -- vbuz1=vbuc1 lda #lower sta.z chrout.petscii - // [148] call chrout + // [148] call chrout -- call_phi_near jsr chrout // [149] phi from main::@91 to main::@92 [phi:main::@91->main::@92] __b92_from___b91: @@ -10509,7 +10509,7 @@ main: { // Return to text mode, lowcase // [334] phi from main::@92 to textcolor [phi:main::@92->textcolor] textcolor_from___b92: - // [334] phi textcolor::color#7 = 7 [phi:main::@92->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 7 [phi:main::@92->textcolor#0] -- call_phi_near lda #7 sta.z textcolor.color jsr textcolor @@ -10521,7 +10521,7 @@ main: { // [152] call cputs // [337] phi from main::@93 to cputs [phi:main::@93->cputs] cputs_from___b93: - // [337] phi cputs::s#11 = game_over [phi:main::@93->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = game_over [phi:main::@93->cputs#0] -- call_phi_near lda #game_over @@ -10536,7 +10536,7 @@ main: { // Yellow // [334] phi from main::@94 to textcolor [phi:main::@94->textcolor] textcolor_from___b94: - // [334] phi textcolor::color#7 = 2 [phi:main::@94->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 2 [phi:main::@94->textcolor#0] -- call_phi_near lda #2 sta.z textcolor.color jsr textcolor @@ -10548,7 +10548,7 @@ main: { // [156] call cputs // [337] phi from main::@95 to cputs [phi:main::@95->cputs] cputs_from___b95: - // [337] phi cputs::s#11 = your_score [phi:main::@95->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = your_score [phi:main::@95->cputs#0] -- call_phi_near lda #your_score @@ -10562,7 +10562,7 @@ main: { // [158] call cputs // [337] phi from main::@96 to cputs [phi:main::@96->cputs] cputs_from___b96: - // [337] phi cputs::s#11 = buffer [phi:main::@96->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = buffer [phi:main::@96->cputs#0] -- call_phi_near lda #buffer @@ -10577,7 +10577,7 @@ main: { // Red // [334] phi from main::@97 to textcolor [phi:main::@97->textcolor] textcolor_from___b97: - // [334] phi textcolor::color#7 = 3 [phi:main::@97->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 3 [phi:main::@97->textcolor#0] -- call_phi_near lda #3 sta.z textcolor.color jsr textcolor @@ -10589,7 +10589,7 @@ main: { // [162] call cputs // [337] phi from main::@98 to cputs [phi:main::@98->cputs] cputs_from___b98: - // [337] phi cputs::s#11 = high_score [phi:main::@98->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = high_score [phi:main::@98->cputs#0] -- call_phi_near lda #high_score @@ -10630,7 +10630,7 @@ main: { // [167] call utoa // [390] phi from main::@46 to utoa [phi:main::@46->utoa] utoa_from___b46: - // [390] phi utoa::value#10 = utoa::value#2 [phi:main::@46->utoa#0] -- register_copy + // [390] phi utoa::value#10 = utoa::value#2 [phi:main::@46->utoa#0] -- call_phi_near jsr utoa // [168] phi from main::@46 to main::@100 [phi:main::@46->main::@100] __b100_from___b46: @@ -10640,7 +10640,7 @@ main: { // [169] call cputs // [337] phi from main::@100 to cputs [phi:main::@100->cputs] cputs_from___b100: - // [337] phi cputs::s#11 = buffer [phi:main::@100->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = buffer [phi:main::@100->cputs#0] -- call_phi_near lda #buffer @@ -10655,7 +10655,7 @@ main: { // Cyan // [334] phi from main::@101 to textcolor [phi:main::@101->textcolor] textcolor_from___b101: - // [334] phi textcolor::color#7 = 1 [phi:main::@101->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 1 [phi:main::@101->textcolor#0] -- call_phi_near lda #1 sta.z textcolor.color jsr textcolor @@ -10667,7 +10667,7 @@ main: { // [173] call cputs // [337] phi from main::@102 to cputs [phi:main::@102->cputs] cputs_from___b102: - // [337] phi cputs::s#11 = play_again [phi:main::@102->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = play_again [phi:main::@102->cputs#0] -- call_phi_near lda #play_again @@ -10728,7 +10728,7 @@ main: { jmp __b27 // main::@27 __b27: - // [182] call read_chrono + // [182] call read_chrono -- call_phi_near jsr read_chrono jmp __b85 // main::@85 @@ -10904,7 +10904,7 @@ main: { // [381] phi from main::@42 to wait [phi:main::@42->wait] wait_from___b42: // [381] phi z#53 = z#100 [phi:main::@42->wait#0] -- register_copy - // [381] phi wait::n#6 = $a [phi:main::@42->wait#1] -- vbuz1=vbuc1 + // [381] phi wait::n#6 = $a [phi:main::@42->wait#1] -- call_phi_near lda #$a sta.z wait.n jsr wait @@ -11083,7 +11083,7 @@ main: { // [381] phi from main::@36 to wait [phi:main::@36->wait] wait_from___b36: // [381] phi z#53 = z#48 [phi:main::@36->wait#0] -- register_copy - // [381] phi wait::n#6 = 5 [phi:main::@36->wait#1] -- vbuz1=vbuc1 + // [381] phi wait::n#6 = 5 [phi:main::@36->wait#1] -- call_phi_near lda #5 sta.z wait.n jsr wait @@ -11182,7 +11182,7 @@ main: { // [381] phi from main::@89 to wait [phi:main::@89->wait] wait_from___b89: // [381] phi z#53 = z#25 [phi:main::@89->wait#0] -- register_copy - // [381] phi wait::n#6 = 5 [phi:main::@89->wait#1] -- vbuz1=vbuc1 + // [381] phi wait::n#6 = 5 [phi:main::@89->wait#1] -- call_phi_near lda #5 sta.z wait.n jsr wait @@ -11305,7 +11305,7 @@ main: { // [269] call write_score // [351] phi from main::@34 to write_score [phi:main::@34->write_score] write_score_from___b34: - // [351] phi score#13 = score#6 [phi:main::@34->write_score#0] -- register_copy + // [351] phi score#13 = score#6 [phi:main::@34->write_score#0] -- call_phi_near jsr write_score // [270] phi from main::@34 to main::@88 [phi:main::@34->main::@88] __b88_from___b34: @@ -11316,7 +11316,7 @@ main: { // [381] phi from main::@88 to wait [phi:main::@88->wait] wait_from___b88: // [381] phi z#53 = z#100 [phi:main::@88->wait#0] -- register_copy - // [381] phi wait::n#6 = $a [phi:main::@88->wait#1] -- vbuz1=vbuc1 + // [381] phi wait::n#6 = $a [phi:main::@88->wait#1] -- call_phi_near lda #$a sta.z wait.n jsr wait @@ -11338,7 +11338,7 @@ main: { // [273] chrout::petscii = main::$57 -- vbuz1=vwuz2 lda.z __57 sta.z chrout.petscii - // [274] call chrout + // [274] call chrout -- call_phi_near jsr chrout jmp __b24_from___b23 // main::@21 @@ -11347,7 +11347,7 @@ main: { ldy.z j_2 lda ducknumber,y sta.z chrout.petscii - // [276] call chrout + // [276] call chrout -- call_phi_near jsr chrout jmp __b78 // main::@78 @@ -11364,7 +11364,7 @@ main: { ldy.z j_1 lda chrono,y sta.z chrout.petscii - // [279] call chrout + // [279] call chrout -- call_phi_near jsr chrout jmp __b74 // main::@74 @@ -11393,7 +11393,7 @@ main: { // [283] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [284] call chrout + // [284] call chrout -- call_phi_near jsr chrout jmp __b73 // main::@73 @@ -11429,7 +11429,7 @@ main: { // [288] chrout::petscii = right -- vbuz1=vbuc1 lda #right sta.z chrout.petscii - // [289] call chrout + // [289] call chrout -- call_phi_near jsr chrout jmp __b72 // main::@72 @@ -11445,7 +11445,7 @@ main: { // [291] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [292] call chrout + // [292] call chrout -- call_phi_near jsr chrout // [293] phi from main::@7 to main::@9 [phi:main::@7->main::@9] __b9_from___b7: @@ -11465,7 +11465,7 @@ main: { // [295] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [296] call chrout + // [296] call chrout -- call_phi_near jsr chrout jmp __b64 // main::@64 @@ -11482,7 +11482,7 @@ main: { // [298] chrout::petscii = right -- vbuz1=vbuc1 lda #right sta.z chrout.petscii - // [299] call chrout + // [299] call chrout -- call_phi_near jsr chrout jmp __b63 // main::@63 @@ -11661,7 +11661,7 @@ clear_screen: { // From 0-->505 (506 bytes). ClearScreen with byte 'n' with color 'm' // [304] phi from clear_screen::@3 to gotoxy [phi:clear_screen::@3->gotoxy] gotoxy_from___b3: - // [304] phi gotoxy::y#4 = 0 [phi:clear_screen::@3->gotoxy#0] -- vbuz1=vbuc1 + // [304] phi gotoxy::y#4 = 0 [phi:clear_screen::@3->gotoxy#0] -- call_phi_near lda #0 sta.z gotoxy.y jsr gotoxy @@ -11671,7 +11671,7 @@ clear_screen: { // [326] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [327] call chrout + // [327] call chrout -- call_phi_near jsr chrout jmp __breturn // clear_screen::@return @@ -11761,7 +11761,7 @@ cputs: { // cputs::@2 __b2: // [343] cputc::c#0 = cputs::c#1 - // [344] call cputc + // [344] call cputc -- call_phi_near jsr cputc jmp __b1_from___b2 } @@ -11850,7 +11850,7 @@ write_score: { // (!!) Needed. Possibly a bug // [390] phi from write_score::@7 to utoa [phi:write_score::@7->utoa] utoa_from___b7: - // [390] phi utoa::value#10 = utoa::value#1 [phi:write_score::@7->utoa#0] -- register_copy + // [390] phi utoa::value#10 = utoa::value#1 [phi:write_score::@7->utoa#0] -- call_phi_near jsr utoa jmp __b11 // write_score::@11 @@ -11899,7 +11899,7 @@ write_score: { // [366] chrout::petscii = yellow -- vbuz1=vbuc1 lda #yellow sta.z chrout.petscii - // [367] call chrout + // [367] call chrout -- call_phi_near jsr chrout jmp __b12 // write_score::@12 @@ -11907,7 +11907,7 @@ write_score: { // [368] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [369] call chrout + // [369] call chrout -- call_phi_near jsr chrout jmp __b13 // write_score::@13 @@ -11936,7 +11936,7 @@ write_score: { ldy.z m lda points,y sta.z chrout.petscii - // [375] call chrout + // [375] call chrout -- call_phi_near jsr chrout jmp __b14 // write_score::@14 @@ -12138,7 +12138,7 @@ utoa: { // [405] utoa_append::value#0 = utoa::value#3 // [406] utoa_append::sub#0 = utoa::digit_value#0 // [407] call utoa_append - // [432] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + // [432] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near utoa_append_from___b5: jsr utoa_append // [408] utoa_append::return#0 = utoa_append::value#2 @@ -12181,7 +12181,7 @@ read_chrono: { bcc !+ inc.z div16u8u.dividend+1 !: - // [414] call div16u8u + // [414] call div16u8u -- call_phi_near jsr div16u8u // [415] div16u8u::return#2 = div16u8u::return#0 -- vwuz1=vwuz2 lda.z div16u8u.return @@ -12256,7 +12256,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [428] call cputln + // [428] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -12268,7 +12268,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [431] call cputln + // [431] call cputln -- call_phi_near jsr cputln jmp __breturn } @@ -12355,7 +12355,7 @@ div16u8u: { // [456] phi from div16u8u to divr8u [phi:div16u8u->divr8u] divr8u_from_div16u8u: // [456] phi divr8u::dividend#5 = divr8u::dividend#1 [phi:div16u8u->divr8u#0] -- register_copy - // [456] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#1] -- vbuz1=vbuc1 + // [456] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#1] -- call_phi_near lda #0 sta.z divr8u.rem jsr divr8u @@ -12374,7 +12374,7 @@ div16u8u: { // [456] phi from div16u8u::@1 to divr8u [phi:div16u8u::@1->divr8u] divr8u_from___b1: // [456] phi divr8u::dividend#5 = divr8u::dividend#2 [phi:div16u8u::@1->divr8u#0] -- register_copy - // [456] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#1] -- register_copy + // [456] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#1] -- call_phi_near jsr divr8u // [446] divr8u::return#3 = divr8u::return#0 jmp __b2 @@ -12416,7 +12416,7 @@ cputln: { sta.z conio_cursor_x // [453] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [454] call cscroll + // [454] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -12537,7 +12537,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [485] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [485] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -12556,7 +12556,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [485] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [485] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -12573,7 +12573,7 @@ cscroll: { // [495] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuz1=vbuc1 lda #' ' sta.z memset.c - // [495] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [495] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -12589,7 +12589,7 @@ cscroll: { // [495] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] memset_from___b4: // [495] phi memset::c#4 = memset::c#1 [phi:cscroll::@4->memset#0] -- register_copy - // [495] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [495] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -13931,11 +13931,11 @@ __start: { // [7] m = 0 -- vbuz1=vbuc1 sta.z m // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [8] call conio_c64_init + // [8] call conio_c64_init -- call_phi_near jsr conio_c64_init // [9] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [10] call main + // [10] call main -- call_phi_near jsr main // __start::@return // [11] return @@ -13969,7 +13969,7 @@ conio_c64_init: { // [16] gotoxy::y#2 = conio_c64_init::line#2 // [17] call gotoxy // [304] phi from conio_c64_init::@1 to gotoxy [phi:conio_c64_init::@1->gotoxy] - // [304] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- register_copy + // [304] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -14033,7 +14033,7 @@ main: { // [20] chrout::petscii = lock -- vbuz1=vbuc1 lda #lock sta.z chrout.petscii - // [21] call chrout + // [21] call chrout -- call_phi_near // border and black paper jsr chrout // main::@50 @@ -14041,7 +14041,7 @@ main: { // [22] chrout::petscii = lower -- vbuz1=vbuc1 lda #lower sta.z chrout.petscii - // [23] call chrout + // [23] call chrout -- call_phi_near //Lock UpperCase to Lowercase key jsr chrout // main::@51 @@ -14077,7 +14077,7 @@ main: { // clear_screen(32,0) // [27] call clear_screen // [321] phi from main::@3 to clear_screen [phi:main::@3->clear_screen] - // [321] phi clear_screen::n#5 = $20 [phi:main::@3->clear_screen#0] -- vbuz1=vbuc1 + // [321] phi clear_screen::n#5 = $20 [phi:main::@3->clear_screen#0] -- call_phi_near lda #$20 sta.z clear_screen.n jsr clear_screen @@ -14087,7 +14087,7 @@ main: { // [29] call textcolor // Clear Screen with spaces & black ink // [334] phi from main::@52 to textcolor [phi:main::@52->textcolor] - // [334] phi textcolor::color#7 = 7 [phi:main::@52->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 7 [phi:main::@52->textcolor#0] -- call_phi_near lda #7 sta.z textcolor.color jsr textcolor @@ -14096,7 +14096,7 @@ main: { // cputs(intro) // [31] call cputs // [337] phi from main::@53 to cputs [phi:main::@53->cputs] - // [337] phi cputs::s#11 = intro [phi:main::@53->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = intro [phi:main::@53->cputs#0] -- call_phi_near lda #intro @@ -14108,7 +14108,7 @@ main: { // [33] call textcolor // Yellow ink // [334] phi from main::@54 to textcolor [phi:main::@54->textcolor] - // [334] phi textcolor::color#7 = 1 [phi:main::@54->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 1 [phi:main::@54->textcolor#0] -- call_phi_near lda #1 sta.z textcolor.color jsr textcolor @@ -14117,7 +14117,7 @@ main: { // cputs(levels) // [35] call cputs // [337] phi from main::@55 to cputs [phi:main::@55->cputs] - // [337] phi cputs::s#11 = levels [phi:main::@55->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = levels [phi:main::@55->cputs#0] -- call_phi_near lda #levels @@ -14129,7 +14129,7 @@ main: { // [37] call textcolor // White // [334] phi from main::@56 to textcolor [phi:main::@56->textcolor] - // [334] phi textcolor::color#7 = 2 [phi:main::@56->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 2 [phi:main::@56->textcolor#0] -- call_phi_near lda #2 sta.z textcolor.color jsr textcolor @@ -14138,7 +14138,7 @@ main: { // cputs(foot) // [39] call cputs // [337] phi from main::@57 to cputs [phi:main::@57->cputs] - // [337] phi cputs::s#11 = foot [phi:main::@57->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = foot [phi:main::@57->cputs#0] -- call_phi_near lda #foot @@ -14165,7 +14165,7 @@ main: { // [44] call clear_screen // wait for 1-3-5-7-9 keys only // [321] phi from main::@5 to clear_screen [phi:main::@5->clear_screen] - // [321] phi clear_screen::n#5 = 4 [phi:main::@5->clear_screen#0] -- vbuz1=vbuc1 + // [321] phi clear_screen::n#5 = 4 [phi:main::@5->clear_screen#0] -- call_phi_near lda #4 sta.z clear_screen.n jsr clear_screen @@ -14178,7 +14178,7 @@ main: { // [46] chrout::petscii = reverse_on -- vbuz1=vbuc1 lda #reverse_on sta.z chrout.petscii - // [47] call chrout + // [47] call chrout -- call_phi_near // Graphic mode jsr chrout // main::@59 @@ -14186,14 +14186,14 @@ main: { // [48] chrout::petscii = red -- vbuz1=vbuc1 lda #red sta.z chrout.petscii - // [49] call chrout + // [49] call chrout -- call_phi_near jsr chrout // main::@60 // chrout(down) // [50] chrout::petscii = down -- vbuz1=vbuc1 lda #down sta.z chrout.petscii - // [51] call chrout + // [51] call chrout -- call_phi_near jsr chrout // [52] phi from main::@60 to main::@6 [phi:main::@60->main::@6] // [52] phi n#89 = n#109 [phi:main::@60->main::@6#0] -- register_copy @@ -14217,7 +14217,7 @@ main: { // [54] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [55] call chrout + // [55] call chrout -- call_phi_near // 23 rows * 22 columns (7680 to 8185). 506 positions. jsr chrout // main::@61 @@ -14232,7 +14232,7 @@ main: { // [58] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [59] call chrout + // [59] call chrout -- call_phi_near //last brick from last line (#23) to avoid scrolling jsr chrout // main::@62 @@ -14277,7 +14277,7 @@ main: { // Write differential random bricks depending on 'l' level choosen // [345] phi from main::@13 to random [phi:main::@13->random] // [345] phi random::n#4 = random::n#0 [phi:main::@13->random#0] -- register_copy - // [345] phi random::k#4 = random::k#0 [phi:main::@13->random#1] -- register_copy + // [345] phi random::k#4 = random::k#0 [phi:main::@13->random#1] -- call_phi_near jsr random // main::@71 // z+m @@ -14322,7 +14322,7 @@ main: { // [71] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [72] call chrout + // [72] call chrout -- call_phi_near // Duck #1 jsr chrout // main::@65 @@ -14330,35 +14330,35 @@ main: { // [73] chrout::petscii = yellow -- vbuz1=vbuc1 lda #yellow sta.z chrout.petscii - // [74] call chrout + // [74] call chrout -- call_phi_near jsr chrout // main::@66 // chrout(80) // [75] chrout::petscii = $50 -- vbuz1=vbuc1 lda #$50 sta.z chrout.petscii - // [76] call chrout + // [76] call chrout -- call_phi_near jsr chrout // main::@67 // chrout(84) // [77] chrout::petscii = $54 -- vbuz1=vbuc1 lda #$54 sta.z chrout.petscii - // [78] call chrout + // [78] call chrout -- call_phi_near jsr chrout // main::@68 // chrout(83) // [79] chrout::petscii = $53 -- vbuz1=vbuc1 lda #$53 sta.z chrout.petscii - // [80] call chrout + // [80] call chrout -- call_phi_near jsr chrout // main::@69 // chrout(58) // [81] chrout::petscii = $3a -- vbuz1=vbuc1 lda #$3a sta.z chrout.petscii - // [82] call chrout + // [82] call chrout -- call_phi_near jsr chrout // main::@70 // POKE @@ -14385,7 +14385,7 @@ main: { // [87] call write_score // Write 'TM:9', yellow // [351] phi from main::@19 to write_score [phi:main::@19->write_score] - // [351] phi score#13 = 0 [phi:main::@19->write_score#0] -- vwuz1=vbuc1 + // [351] phi score#13 = 0 [phi:main::@19->write_score#0] -- call_phi_near lda #<0 sta.z score sta.z score+1 @@ -14395,7 +14395,7 @@ main: { // [88] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [89] call chrout + // [89] call chrout -- call_phi_near // Write Score (yellow) jsr chrout // main::@76 @@ -14403,7 +14403,7 @@ main: { // [90] chrout::petscii = green -- vbuz1=vbuc1 lda #green sta.z chrout.petscii - // [91] call chrout + // [91] call chrout -- call_phi_near jsr chrout // main::@77 // POKE @@ -14453,21 +14453,21 @@ main: { // [96] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [97] call chrout + // [97] call chrout -- call_phi_near jsr chrout // main::@79 // chrout(green) // [98] chrout::petscii = green -- vbuz1=vbuc1 lda #green sta.z chrout.petscii - // [99] call chrout + // [99] call chrout -- call_phi_near jsr chrout // main::@80 // chrout(reverse_on) // [100] chrout::petscii = reverse_on -- vbuz1=vbuc1 lda #reverse_on sta.z chrout.petscii - // [101] call chrout + // [101] call chrout -- call_phi_near jsr chrout // main::@81 // POKE @@ -14490,14 +14490,14 @@ main: { // [104] chrout::petscii = $31 -- vbuz1=vbuc1 lda #$31 sta.z chrout.petscii - // [105] call chrout + // [105] call chrout -- call_phi_near jsr chrout // main::@82 // chrout(48) // [106] chrout::petscii = $30 -- vbuz1=vbuc1 lda #$30 sta.z chrout.petscii - // [107] call chrout + // [107] call chrout -- call_phi_near jsr chrout // [108] phi from main::@103 main::@104 main::@105 main::@106 main::@23 main::@82 main::@84 to main::@24 [phi:main::@103/main::@104/main::@105/main::@106/main::@23/main::@82/main::@84->main::@24] __b11: @@ -14509,7 +14509,7 @@ main: { // [345] phi random::n#4 = $ff [phi:main::@24->random#0] -- vbuz1=vbuc1 lda #$ff sta.z random.n - // [345] phi random::k#4 = 0 [phi:main::@24->random#1] -- vbuz1=vbuc1 + // [345] phi random::k#4 = 0 [phi:main::@24->random#1] -- call_phi_near lda #0 sta.z random.k jsr random @@ -14526,7 +14526,7 @@ main: { // [345] phi random::n#4 = $ff [phi:main::@83->random#0] -- vbuz1=vbuc1 lda #$ff sta.z random.n - // [345] phi random::k#4 = 0 [phi:main::@83->random#1] -- vbuz1=vbuc1 + // [345] phi random::k#4 = 0 [phi:main::@83->random#1] -- call_phi_near lda #0 sta.z random.k jsr random @@ -14607,7 +14607,7 @@ main: { // [122] phi from main::@103 to main::@25 [phi:main::@103->main::@25] // main::@25 // chrono_restart() - // [123] call chrono_restart + // [123] call chrono_restart -- call_phi_near jsr chrono_restart // [124] phi from main::@25 to main::@26 [phi:main::@25->main::@26] // [124] phi n#20 = n#52 [phi:main::@25->main::@26#0] -- register_copy @@ -14651,7 +14651,7 @@ main: { // write_score() // [128] call write_score // [351] phi from main::@28 to write_score [phi:main::@28->write_score] - // [351] phi score#13 = score#4 [phi:main::@28->write_score#0] -- register_copy + // [351] phi score#13 = score#4 [phi:main::@28->write_score#0] -- call_phi_near jsr write_score // main::@86 // POKE @@ -14662,7 +14662,7 @@ main: { // [130] call wait // [381] phi from main::@86 to wait [phi:main::@86->wait] // [381] phi z#53 = z#100 [phi:main::@86->wait#0] -- register_copy - // [381] phi wait::n#6 = $14 [phi:main::@86->wait#1] -- vbuz1=vbuc1 + // [381] phi wait::n#6 = $14 [phi:main::@86->wait#1] -- call_phi_near lda #$14 sta.z wait.n jsr wait @@ -14747,7 +14747,7 @@ main: { // [145] call clear_screen // 10 ducks // [321] phi from main::@44 to clear_screen [phi:main::@44->clear_screen] - // [321] phi clear_screen::n#5 = 4 [phi:main::@44->clear_screen#0] -- vbuz1=vbuc1 + // [321] phi clear_screen::n#5 = 4 [phi:main::@44->clear_screen#0] -- call_phi_near lda #4 sta.z clear_screen.n jsr clear_screen @@ -14760,7 +14760,7 @@ main: { // [147] chrout::petscii = lower -- vbuz1=vbuc1 lda #lower sta.z chrout.petscii - // [148] call chrout + // [148] call chrout -- call_phi_near jsr chrout // [149] phi from main::@91 to main::@92 [phi:main::@91->main::@92] // main::@92 @@ -14768,7 +14768,7 @@ main: { // [150] call textcolor // Return to text mode, lowcase // [334] phi from main::@92 to textcolor [phi:main::@92->textcolor] - // [334] phi textcolor::color#7 = 7 [phi:main::@92->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 7 [phi:main::@92->textcolor#0] -- call_phi_near lda #7 sta.z textcolor.color jsr textcolor @@ -14777,7 +14777,7 @@ main: { // cputs(game_over) // [152] call cputs // [337] phi from main::@93 to cputs [phi:main::@93->cputs] - // [337] phi cputs::s#11 = game_over [phi:main::@93->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = game_over [phi:main::@93->cputs#0] -- call_phi_near lda #game_over @@ -14789,7 +14789,7 @@ main: { // [154] call textcolor // Yellow // [334] phi from main::@94 to textcolor [phi:main::@94->textcolor] - // [334] phi textcolor::color#7 = 2 [phi:main::@94->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 2 [phi:main::@94->textcolor#0] -- call_phi_near lda #2 sta.z textcolor.color jsr textcolor @@ -14798,7 +14798,7 @@ main: { // cputs(your_score) // [156] call cputs // [337] phi from main::@95 to cputs [phi:main::@95->cputs] - // [337] phi cputs::s#11 = your_score [phi:main::@95->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = your_score [phi:main::@95->cputs#0] -- call_phi_near lda #your_score @@ -14809,7 +14809,7 @@ main: { // cputs(buffer) // [158] call cputs // [337] phi from main::@96 to cputs [phi:main::@96->cputs] - // [337] phi cputs::s#11 = buffer [phi:main::@96->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = buffer [phi:main::@96->cputs#0] -- call_phi_near lda #buffer @@ -14821,7 +14821,7 @@ main: { // [160] call textcolor // Red // [334] phi from main::@97 to textcolor [phi:main::@97->textcolor] - // [334] phi textcolor::color#7 = 3 [phi:main::@97->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 3 [phi:main::@97->textcolor#0] -- call_phi_near lda #3 sta.z textcolor.color jsr textcolor @@ -14830,7 +14830,7 @@ main: { // cputs(high_score) // [162] call cputs // [337] phi from main::@98 to cputs [phi:main::@98->cputs] - // [337] phi cputs::s#11 = high_score [phi:main::@98->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = high_score [phi:main::@98->cputs#0] -- call_phi_near lda #high_score @@ -14867,14 +14867,14 @@ main: { sta.z utoa.value+1 // [167] call utoa // [390] phi from main::@46 to utoa [phi:main::@46->utoa] - // [390] phi utoa::value#10 = utoa::value#2 [phi:main::@46->utoa#0] -- register_copy + // [390] phi utoa::value#10 = utoa::value#2 [phi:main::@46->utoa#0] -- call_phi_near jsr utoa // [168] phi from main::@46 to main::@100 [phi:main::@46->main::@100] // main::@100 // cputs(buffer) // [169] call cputs // [337] phi from main::@100 to cputs [phi:main::@100->cputs] - // [337] phi cputs::s#11 = buffer [phi:main::@100->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = buffer [phi:main::@100->cputs#0] -- call_phi_near lda #buffer @@ -14886,7 +14886,7 @@ main: { // [171] call textcolor // Cyan // [334] phi from main::@101 to textcolor [phi:main::@101->textcolor] - // [334] phi textcolor::color#7 = 1 [phi:main::@101->textcolor#0] -- vbuz1=vbuc1 + // [334] phi textcolor::color#7 = 1 [phi:main::@101->textcolor#0] -- call_phi_near lda #1 sta.z textcolor.color jsr textcolor @@ -14895,7 +14895,7 @@ main: { // cputs(play_again) // [173] call cputs // [337] phi from main::@102 to cputs [phi:main::@102->cputs] - // [337] phi cputs::s#11 = play_again [phi:main::@102->cputs#0] -- pbuz1=pbuc1 + // [337] phi cputs::s#11 = play_again [phi:main::@102->cputs#0] -- call_phi_near lda #play_again @@ -14951,7 +14951,7 @@ main: { // main::@27 __b27: // read_chrono() - // [182] call read_chrono + // [182] call read_chrono -- call_phi_near jsr read_chrono // main::@85 // m=PEEK @@ -15123,7 +15123,7 @@ main: { // [212] call wait // [381] phi from main::@42 to wait [phi:main::@42->wait] // [381] phi z#53 = z#100 [phi:main::@42->wait#0] -- register_copy - // [381] phi wait::n#6 = $a [phi:main::@42->wait#1] -- vbuz1=vbuc1 + // [381] phi wait::n#6 = $a [phi:main::@42->wait#1] -- call_phi_near lda #$a sta.z wait.n jsr wait @@ -15280,7 +15280,7 @@ main: { // Clear peephole if there is not bricks contact // [381] phi from main::@36 to wait [phi:main::@36->wait] // [381] phi z#53 = z#48 [phi:main::@36->wait#0] -- register_copy - // [381] phi wait::n#6 = 5 [phi:main::@36->wait#1] -- vbuz1=vbuc1 + // [381] phi wait::n#6 = 5 [phi:main::@36->wait#1] -- call_phi_near lda #5 sta.z wait.n jsr wait @@ -15371,7 +15371,7 @@ main: { // [254] call wait // [381] phi from main::@89 to wait [phi:main::@89->wait] // [381] phi z#53 = z#25 [phi:main::@89->wait#0] -- register_copy - // [381] phi wait::n#6 = 5 [phi:main::@89->wait#1] -- vbuz1=vbuc1 + // [381] phi wait::n#6 = 5 [phi:main::@89->wait#1] -- call_phi_near lda #5 sta.z wait.n jsr wait @@ -15494,7 +15494,7 @@ main: { // write_score() // [269] call write_score // [351] phi from main::@34 to write_score [phi:main::@34->write_score] - // [351] phi score#13 = score#6 [phi:main::@34->write_score#0] -- register_copy + // [351] phi score#13 = score#6 [phi:main::@34->write_score#0] -- call_phi_near jsr write_score // [270] phi from main::@34 to main::@88 [phi:main::@34->main::@88] // main::@88 @@ -15502,7 +15502,7 @@ main: { // [271] call wait // [381] phi from main::@88 to wait [phi:main::@88->wait] // [381] phi z#53 = z#100 [phi:main::@88->wait#0] -- register_copy - // [381] phi wait::n#6 = $a [phi:main::@88->wait#1] -- vbuz1=vbuc1 + // [381] phi wait::n#6 = $a [phi:main::@88->wait#1] -- call_phi_near lda #$a sta.z wait.n jsr wait @@ -15525,7 +15525,7 @@ main: { // [273] chrout::petscii = main::$57 -- vbuz1=vwuz2 lda.z __57 sta.z chrout.petscii - // [274] call chrout + // [274] call chrout -- call_phi_near jsr chrout jmp __b11 // main::@21 @@ -15535,7 +15535,7 @@ main: { ldy.z j_2 lda ducknumber,y sta.z chrout.petscii - // [276] call chrout + // [276] call chrout -- call_phi_near jsr chrout // main::@78 // for (j=0; j<5; j++) @@ -15551,7 +15551,7 @@ main: { ldy.z j_1 lda chrono,y sta.z chrout.petscii - // [279] call chrout + // [279] call chrout -- call_phi_near jsr chrout // main::@74 // for (j=0; j<4; ++j) @@ -15577,7 +15577,7 @@ main: { // [283] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [284] call chrout + // [284] call chrout -- call_phi_near jsr chrout // main::@73 // z+m @@ -15618,7 +15618,7 @@ main: { // [288] chrout::petscii = right -- vbuz1=vbuc1 lda #right sta.z chrout.petscii - // [289] call chrout + // [289] call chrout -- call_phi_near jsr chrout // main::@72 // for (j=1; j<=m; ++j) @@ -15633,7 +15633,7 @@ main: { // [291] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [292] call chrout + // [292] call chrout -- call_phi_near jsr chrout // [293] phi from main::@7 to main::@9 [phi:main::@7->main::@9] // [293] phi n#101 = 2 [phi:main::@7->main::@9#0] -- vbuz1=vbuc1 @@ -15651,7 +15651,7 @@ main: { // [295] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [296] call chrout + // [296] call chrout -- call_phi_near jsr chrout // main::@64 // for (k=1;k<22;k++) @@ -15667,7 +15667,7 @@ main: { // [298] chrout::petscii = right -- vbuz1=vbuc1 lda #right sta.z chrout.petscii - // [299] call chrout + // [299] call chrout -- call_phi_near jsr chrout // main::@63 // for(n=2;n<22;++n) @@ -15839,7 +15839,7 @@ clear_screen: { // [325] call gotoxy // From 0-->505 (506 bytes). ClearScreen with byte 'n' with color 'm' // [304] phi from clear_screen::@3 to gotoxy [phi:clear_screen::@3->gotoxy] - // [304] phi gotoxy::y#4 = 0 [phi:clear_screen::@3->gotoxy#0] -- vbuz1=vbuc1 + // [304] phi gotoxy::y#4 = 0 [phi:clear_screen::@3->gotoxy#0] -- call_phi_near lda #0 sta.z gotoxy.y jsr gotoxy @@ -15848,7 +15848,7 @@ clear_screen: { // [326] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [327] call chrout + // [327] call chrout -- call_phi_near jsr chrout // clear_screen::@return // } @@ -15935,7 +15935,7 @@ cputs: { __b2: // cputc(c) // [343] cputc::c#0 = cputs::c#1 - // [344] call cputc + // [344] call cputc -- call_phi_near jsr cputc jmp __b1 } @@ -16014,7 +16014,7 @@ write_score: { // [358] call utoa // (!!) Needed. Possibly a bug // [390] phi from write_score::@7 to utoa [phi:write_score::@7->utoa] - // [390] phi utoa::value#10 = utoa::value#1 [phi:write_score::@7->utoa#0] -- register_copy + // [390] phi utoa::value#10 = utoa::value#1 [phi:write_score::@7->utoa#0] -- call_phi_near jsr utoa // write_score::@11 // if (score>9) @@ -16063,14 +16063,14 @@ write_score: { // [366] chrout::petscii = yellow -- vbuz1=vbuc1 lda #yellow sta.z chrout.petscii - // [367] call chrout + // [367] call chrout -- call_phi_near jsr chrout // write_score::@12 // chrout(home) // [368] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [369] call chrout + // [369] call chrout -- call_phi_near jsr chrout // write_score::@13 // POKE @@ -16099,7 +16099,7 @@ write_score: { ldy.z m lda points,y sta.z chrout.petscii - // [375] call chrout + // [375] call chrout -- call_phi_near jsr chrout // write_score::@14 // for (m=0;m<4;m++) @@ -16295,7 +16295,7 @@ utoa: { // [405] utoa_append::value#0 = utoa::value#3 // [406] utoa_append::sub#0 = utoa::digit_value#0 // [407] call utoa_append - // [432] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + // [432] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near jsr utoa_append // utoa_append(buffer++, value, digit_value) // [408] utoa_append::return#0 = utoa_append::value#2 @@ -16340,7 +16340,7 @@ read_chrono: { bcc !+ inc.z div16u8u.dividend+1 !: - // [414] call div16u8u + // [414] call div16u8u -- call_phi_near jsr div16u8u // [415] div16u8u::return#2 = div16u8u::return#0 -- vwuz1=vwuz2 lda.z div16u8u.return @@ -16413,7 +16413,7 @@ cputc: { // [427] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [428] call cputln + // [428] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -16424,7 +16424,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [431] call cputln + // [431] call cputln -- call_phi_near jsr cputln rts } @@ -16509,7 +16509,7 @@ div16u8u: { // [440] call divr8u // [456] phi from div16u8u to divr8u [phi:div16u8u->divr8u] // [456] phi divr8u::dividend#5 = divr8u::dividend#1 [phi:div16u8u->divr8u#0] -- register_copy - // [456] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#1] -- vbuz1=vbuc1 + // [456] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#1] -- call_phi_near lda #0 sta.z divr8u.rem jsr divr8u @@ -16527,7 +16527,7 @@ div16u8u: { // [445] call divr8u // [456] phi from div16u8u::@1 to divr8u [phi:div16u8u::@1->divr8u] // [456] phi divr8u::dividend#5 = divr8u::dividend#2 [phi:div16u8u::@1->divr8u#0] -- register_copy - // [456] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#1] -- register_copy + // [456] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#1] -- call_phi_near jsr divr8u // unsigned char quotient_lo = divr8u(BYTE0(dividend), divisor, rem8u) // [446] divr8u::return#3 = divr8u::return#0 @@ -16573,7 +16573,7 @@ cputln: { // [453] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [454] call cscroll + // [454] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -16684,7 +16684,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [485] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [485] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -16700,7 +16700,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [485] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [485] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -16714,7 +16714,7 @@ cscroll: { // [495] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuz1=vbuc1 lda #' ' sta.z memset.c - // [495] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [495] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -16728,7 +16728,7 @@ cscroll: { // [480] call memset // [495] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [495] phi memset::c#4 = memset::c#1 [phi:cscroll::@4->memset#0] -- register_copy - // [495] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [495] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/emptyblock-error.log b/src/test/ref/emptyblock-error.log index 94603b9c6..e0cecc608 100644 --- a/src/test/ref/emptyblock-error.log +++ b/src/test/ref/emptyblock-error.log @@ -210,7 +210,7 @@ main: { // main::@1 __b1: // [2] call menu - // [3] phi from main::@1 to menu [phi:main::@1->menu] + // [3] phi from main::@1 to menu [phi:main::@1->menu] -- call_phi_near menu_from___b1: jsr menu jmp __b1_from___b1 @@ -223,7 +223,7 @@ menu: { // menu::@1 __b1: // [5] call mode - // [7] phi from menu::@1 to mode [phi:menu::@1->mode] + // [7] phi from menu::@1 to mode [phi:menu::@1->mode] -- call_phi_near mode_from___b1: jsr mode jmp __breturn @@ -301,7 +301,7 @@ main: { __b1: // menu() // [2] call menu - // [3] phi from main::@1 to menu [phi:main::@1->menu] + // [3] phi from main::@1 to menu [phi:main::@1->menu] -- call_phi_near jsr menu jmp __b1 } @@ -311,7 +311,7 @@ menu: { // menu::@1 // mode() // [5] call mode - // [7] phi from menu::@1 to mode [phi:menu::@1->mode] + // [7] phi from menu::@1 to mode [phi:menu::@1->mode] -- call_phi_near jsr mode // menu::@return // } diff --git a/src/test/ref/enum-5.log b/src/test/ref/enum-5.log index de8d812af..22495f37d 100644 --- a/src/test/ref/enum-5.log +++ b/src/test/ref/enum-5.log @@ -120,7 +120,7 @@ main: { // [0] *main::SCREEN = main::ON -- _deref_pbuc1=vbuc2 lda #ON sta SCREEN - // [1] call test + // [1] call test -- call_phi_near jsr test jmp __breturn // main::@return @@ -186,7 +186,7 @@ main: { lda #ON sta SCREEN // test() - // [1] call test + // [1] call test -- call_phi_near jsr test // main::@return // } diff --git a/src/test/ref/euclid-3.log b/src/test/ref/euclid-3.log index 1fad1e5a5..2f5eec06d 100644 --- a/src/test/ref/euclid-3.log +++ b/src/test/ref/euclid-3.log @@ -1274,7 +1274,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call print_cls - // [15] phi from main to print_cls [phi:main->print_cls] + // [15] phi from main to print_cls [phi:main->print_cls] -- call_phi_near print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1298,7 +1298,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [18] phi print_euclid::a#10 = $80 [phi:main::@1->print_euclid#3] -- vbuz1=vbuc1 + // [18] phi print_euclid::a#10 = $80 [phi:main::@1->print_euclid#3] -- call_phi_near lda #$80 sta.z print_euclid.a jsr print_euclid @@ -1318,7 +1318,7 @@ main: { lda #$45 sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#65 [phi:main::@2->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $a9 [phi:main::@2->print_euclid#3] -- vbuz1=vbuc1 + // [18] phi print_euclid::a#10 = $a9 [phi:main::@2->print_euclid#3] -- call_phi_near lda #$a9 sta.z print_euclid.a jsr print_euclid @@ -1338,7 +1338,7 @@ main: { lda #$37 sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#66 [phi:main::@3->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $9b [phi:main::@3->print_euclid#3] -- vbuz1=vbuc1 + // [18] phi print_euclid::a#10 = $9b [phi:main::@3->print_euclid#3] -- call_phi_near lda #$9b sta.z print_euclid.a jsr print_euclid @@ -1358,7 +1358,7 @@ main: { lda #3 sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#67 [phi:main::@4->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $c7 [phi:main::@4->print_euclid#3] -- vbuz1=vbuc1 + // [18] phi print_euclid::a#10 = $c7 [phi:main::@4->print_euclid#3] -- call_phi_near lda #$c7 sta.z print_euclid.a jsr print_euclid @@ -1378,7 +1378,7 @@ main: { lda #$1a sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#68 [phi:main::@5->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $5b [phi:main::@5->print_euclid#3] -- vbuz1=vbuc1 + // [18] phi print_euclid::a#10 = $5b [phi:main::@5->print_euclid#3] -- call_phi_near lda #$5b sta.z print_euclid.a jsr print_euclid @@ -1398,7 +1398,7 @@ main: { lda #$bb sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#69 [phi:main::@6->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $77 [phi:main::@6->print_euclid#3] -- vbuz1=vbuc1 + // [18] phi print_euclid::a#10 = $77 [phi:main::@6->print_euclid#3] -- call_phi_near lda #$77 sta.z print_euclid.a jsr print_euclid @@ -1412,7 +1412,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [16] call memset - // [36] phi from print_cls to memset [phi:print_cls->memset] + // [36] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -1432,7 +1432,7 @@ print_euclid: { // [42] phi from print_euclid to print_uchar [phi:print_euclid->print_uchar] print_uchar_from_print_euclid: // [42] phi print_char_cursor#53 = print_char_cursor#55 [phi:print_euclid->print_uchar#0] -- register_copy - // [42] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_euclid->print_uchar#1] -- register_copy + // [42] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_euclid->print_uchar#1] -- call_phi_near jsr print_uchar // [21] phi from print_euclid to print_euclid::@1 [phi:print_euclid->print_euclid::@1] __b1_from_print_euclid: @@ -1443,7 +1443,7 @@ print_euclid: { // [50] phi from print_euclid::@1 to print_char [phi:print_euclid::@1->print_char] print_char_from___b1: // [50] phi print_char_cursor#32 = print_char_cursor#33 [phi:print_euclid::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@1->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@1->print_char#1] -- call_phi_near lda #' ' jsr print_char jmp __b2 @@ -1455,7 +1455,7 @@ print_euclid: { // [42] phi from print_euclid::@2 to print_uchar [phi:print_euclid::@2->print_uchar] print_uchar_from___b2: // [42] phi print_char_cursor#53 = print_char_cursor#33 [phi:print_euclid::@2->print_uchar#0] -- register_copy - // [42] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_euclid::@2->print_uchar#1] -- register_copy + // [42] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_euclid::@2->print_uchar#1] -- call_phi_near jsr print_uchar // [25] phi from print_euclid::@2 to print_euclid::@3 [phi:print_euclid::@2->print_euclid::@3] __b3_from___b2: @@ -1466,7 +1466,7 @@ print_euclid: { // [50] phi from print_euclid::@3 to print_char [phi:print_euclid::@3->print_char] print_char_from___b3: // [50] phi print_char_cursor#32 = print_char_cursor#33 [phi:print_euclid::@3->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@3->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char jmp __b4 @@ -1476,7 +1476,7 @@ print_euclid: { // [28] euclid::b#0 = print_euclid::b#10 -- vbuxx=vbuz1 ldx.z b // [29] call euclid - // [54] phi from print_euclid::@4 to euclid [phi:print_euclid::@4->euclid] + // [54] phi from print_euclid::@4 to euclid [phi:print_euclid::@4->euclid] -- call_phi_near euclid_from___b4: jsr euclid // [30] euclid::return#0 = euclid::a#2 -- vbuaa=vbuz1 @@ -1490,7 +1490,7 @@ print_euclid: { // [42] phi from print_euclid::@5 to print_uchar [phi:print_euclid::@5->print_uchar] print_uchar_from___b5: // [42] phi print_char_cursor#53 = print_char_cursor#33 [phi:print_euclid::@5->print_uchar#0] -- register_copy - // [42] phi print_uchar::b#3 = print_uchar::b#2 [phi:print_euclid::@5->print_uchar#1] -- register_copy + // [42] phi print_uchar::b#3 = print_uchar::b#2 [phi:print_euclid::@5->print_uchar#1] -- call_phi_near jsr print_uchar // [33] phi from print_euclid::@5 to print_euclid::@6 [phi:print_euclid::@5->print_euclid::@6] __b6_from___b5: @@ -1498,7 +1498,7 @@ print_euclid: { // print_euclid::@6 __b6: // [34] call print_ln - // [61] phi from print_euclid::@6 to print_ln [phi:print_euclid::@6->print_ln] + // [61] phi from print_euclid::@6 to print_ln [phi:print_euclid::@6->print_ln] -- call_phi_near print_ln_from___b6: jsr print_ln jmp __breturn @@ -1572,7 +1572,7 @@ print_uchar: { // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [50] phi print_char_cursor#32 = print_char_cursor#53 [phi:print_uchar->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [50] phi print_char::ch#4 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -1586,7 +1586,7 @@ print_uchar: { // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [50] phi print_char_cursor#32 = print_char_cursor#33 [phi:print_uchar::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [50] phi print_char::ch#4 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -1885,7 +1885,7 @@ Score: 1607 main: { // print_cls() // [1] call print_cls - // [15] phi from main to print_cls [phi:main->print_cls] + // [15] phi from main to print_cls [phi:main->print_cls] -- call_phi_near jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 @@ -1905,7 +1905,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [18] phi print_euclid::a#10 = $80 [phi:main::@1->print_euclid#3] -- vbuz1=vbuc1 + // [18] phi print_euclid::a#10 = $80 [phi:main::@1->print_euclid#3] -- call_phi_near lda #$80 sta.z print_euclid.a jsr print_euclid @@ -1923,7 +1923,7 @@ main: { lda #$45 sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#65 [phi:main::@2->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $a9 [phi:main::@2->print_euclid#3] -- vbuz1=vbuc1 + // [18] phi print_euclid::a#10 = $a9 [phi:main::@2->print_euclid#3] -- call_phi_near lda #$a9 sta.z print_euclid.a jsr print_euclid @@ -1941,7 +1941,7 @@ main: { lda #$37 sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#66 [phi:main::@3->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $9b [phi:main::@3->print_euclid#3] -- vbuz1=vbuc1 + // [18] phi print_euclid::a#10 = $9b [phi:main::@3->print_euclid#3] -- call_phi_near lda #$9b sta.z print_euclid.a jsr print_euclid @@ -1959,7 +1959,7 @@ main: { lda #3 sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#67 [phi:main::@4->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $c7 [phi:main::@4->print_euclid#3] -- vbuz1=vbuc1 + // [18] phi print_euclid::a#10 = $c7 [phi:main::@4->print_euclid#3] -- call_phi_near lda #$c7 sta.z print_euclid.a jsr print_euclid @@ -1977,7 +1977,7 @@ main: { lda #$1a sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#68 [phi:main::@5->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $5b [phi:main::@5->print_euclid#3] -- vbuz1=vbuc1 + // [18] phi print_euclid::a#10 = $5b [phi:main::@5->print_euclid#3] -- call_phi_near lda #$5b sta.z print_euclid.a jsr print_euclid @@ -1995,7 +1995,7 @@ main: { lda #$bb sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#69 [phi:main::@6->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $77 [phi:main::@6->print_euclid#3] -- vbuz1=vbuc1 + // [18] phi print_euclid::a#10 = $77 [phi:main::@6->print_euclid#3] -- call_phi_near lda #$77 sta.z print_euclid.a jsr print_euclid @@ -2009,7 +2009,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [16] call memset - // [36] phi from print_cls to memset [phi:print_cls->memset] + // [36] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -2027,7 +2027,7 @@ print_euclid: { // [20] call print_uchar // [42] phi from print_euclid to print_uchar [phi:print_euclid->print_uchar] // [42] phi print_char_cursor#53 = print_char_cursor#55 [phi:print_euclid->print_uchar#0] -- register_copy - // [42] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_euclid->print_uchar#1] -- register_copy + // [42] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_euclid->print_uchar#1] -- call_phi_near jsr print_uchar // [21] phi from print_euclid to print_euclid::@1 [phi:print_euclid->print_euclid::@1] // print_euclid::@1 @@ -2035,7 +2035,7 @@ print_euclid: { // [22] call print_char // [50] phi from print_euclid::@1 to print_char [phi:print_euclid::@1->print_char] // [50] phi print_char_cursor#32 = print_char_cursor#33 [phi:print_euclid::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@1->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@1->print_char#1] -- call_phi_near lda #' ' jsr print_char // print_euclid::@2 @@ -2045,7 +2045,7 @@ print_euclid: { // [24] call print_uchar // [42] phi from print_euclid::@2 to print_uchar [phi:print_euclid::@2->print_uchar] // [42] phi print_char_cursor#53 = print_char_cursor#33 [phi:print_euclid::@2->print_uchar#0] -- register_copy - // [42] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_euclid::@2->print_uchar#1] -- register_copy + // [42] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_euclid::@2->print_uchar#1] -- call_phi_near jsr print_uchar // [25] phi from print_euclid::@2 to print_euclid::@3 [phi:print_euclid::@2->print_euclid::@3] // print_euclid::@3 @@ -2053,7 +2053,7 @@ print_euclid: { // [26] call print_char // [50] phi from print_euclid::@3 to print_char [phi:print_euclid::@3->print_char] // [50] phi print_char_cursor#32 = print_char_cursor#33 [phi:print_euclid::@3->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@3->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // print_euclid::@4 @@ -2062,7 +2062,7 @@ print_euclid: { // [28] euclid::b#0 = print_euclid::b#10 -- vbuxx=vbuz1 ldx.z b // [29] call euclid - // [54] phi from print_euclid::@4 to euclid [phi:print_euclid::@4->euclid] + // [54] phi from print_euclid::@4 to euclid [phi:print_euclid::@4->euclid] -- call_phi_near jsr euclid // euclid(a,b) // [30] euclid::return#0 = euclid::a#2 -- vbuaa=vbuz1 @@ -2074,13 +2074,13 @@ print_euclid: { // [32] call print_uchar // [42] phi from print_euclid::@5 to print_uchar [phi:print_euclid::@5->print_uchar] // [42] phi print_char_cursor#53 = print_char_cursor#33 [phi:print_euclid::@5->print_uchar#0] -- register_copy - // [42] phi print_uchar::b#3 = print_uchar::b#2 [phi:print_euclid::@5->print_uchar#1] -- register_copy + // [42] phi print_uchar::b#3 = print_uchar::b#2 [phi:print_euclid::@5->print_uchar#1] -- call_phi_near jsr print_uchar // [33] phi from print_euclid::@5 to print_euclid::@6 [phi:print_euclid::@5->print_euclid::@6] // print_euclid::@6 // print_ln() // [34] call print_ln - // [61] phi from print_euclid::@6 to print_ln [phi:print_euclid::@6->print_ln] + // [61] phi from print_euclid::@6 to print_ln [phi:print_euclid::@6->print_ln] -- call_phi_near jsr print_ln // print_euclid::@return // } @@ -2152,7 +2152,7 @@ print_uchar: { // Table of hexadecimal digits // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] // [50] phi print_char_cursor#32 = print_char_cursor#53 [phi:print_uchar->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [50] phi print_char::ch#4 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -2165,7 +2165,7 @@ print_uchar: { // [48] call print_char // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [50] phi print_char_cursor#32 = print_char_cursor#33 [phi:print_uchar::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [50] phi print_char::ch#4 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/euclid-problem-2.log b/src/test/ref/euclid-problem-2.log index 4bd995818..697c007eb 100644 --- a/src/test/ref/euclid-problem-2.log +++ b/src/test/ref/euclid-problem-2.log @@ -499,7 +499,7 @@ main: { euclid_from_main: // [18] phi euclid::b#9 = 2 [phi:main->euclid#0] -- vbuxx=vbuc1 ldx #2 - // [18] phi euclid::a#10 = $80 [phi:main->euclid#1] -- vbuz1=vbuc1 + // [18] phi euclid::a#10 = $80 [phi:main->euclid#1] -- call_phi_near lda #$80 sta.z euclid.a jsr euclid @@ -516,7 +516,7 @@ main: { euclid_from___b1: // [18] phi euclid::b#9 = $45 [phi:main::@1->euclid#0] -- vbuxx=vbuc1 ldx #$45 - // [18] phi euclid::a#10 = $a9 [phi:main::@1->euclid#1] -- vbuz1=vbuc1 + // [18] phi euclid::a#10 = $a9 [phi:main::@1->euclid#1] -- call_phi_near lda #$a9 sta.z euclid.a jsr euclid @@ -533,7 +533,7 @@ main: { euclid_from___b2: // [18] phi euclid::b#9 = $9b [phi:main::@2->euclid#0] -- vbuxx=vbuc1 ldx #$9b - // [18] phi euclid::a#10 = $ff [phi:main::@2->euclid#1] -- vbuz1=vbuc1 + // [18] phi euclid::a#10 = $ff [phi:main::@2->euclid#1] -- call_phi_near lda #$ff sta.z euclid.a jsr euclid @@ -550,7 +550,7 @@ main: { euclid_from___b3: // [18] phi euclid::b#9 = 3 [phi:main::@3->euclid#0] -- vbuxx=vbuc1 ldx #3 - // [18] phi euclid::a#10 = $63 [phi:main::@3->euclid#1] -- vbuz1=vbuc1 + // [18] phi euclid::a#10 = $63 [phi:main::@3->euclid#1] -- call_phi_near lda #$63 sta.z euclid.a jsr euclid @@ -705,7 +705,7 @@ main: { // [18] phi from main to euclid [phi:main->euclid] // [18] phi euclid::b#9 = 2 [phi:main->euclid#0] -- vbuxx=vbuc1 ldx #2 - // [18] phi euclid::a#10 = $80 [phi:main->euclid#1] -- vbuz1=vbuc1 + // [18] phi euclid::a#10 = $80 [phi:main->euclid#1] -- call_phi_near lda #$80 sta.z euclid.a jsr euclid @@ -722,7 +722,7 @@ main: { // [18] phi from main::@1 to euclid [phi:main::@1->euclid] // [18] phi euclid::b#9 = $45 [phi:main::@1->euclid#0] -- vbuxx=vbuc1 ldx #$45 - // [18] phi euclid::a#10 = $a9 [phi:main::@1->euclid#1] -- vbuz1=vbuc1 + // [18] phi euclid::a#10 = $a9 [phi:main::@1->euclid#1] -- call_phi_near lda #$a9 sta.z euclid.a jsr euclid @@ -739,7 +739,7 @@ main: { // [18] phi from main::@2 to euclid [phi:main::@2->euclid] // [18] phi euclid::b#9 = $9b [phi:main::@2->euclid#0] -- vbuxx=vbuc1 ldx #$9b - // [18] phi euclid::a#10 = $ff [phi:main::@2->euclid#1] -- vbuz1=vbuc1 + // [18] phi euclid::a#10 = $ff [phi:main::@2->euclid#1] -- call_phi_near lda #$ff sta.z euclid.a jsr euclid @@ -756,7 +756,7 @@ main: { // [18] phi from main::@3 to euclid [phi:main::@3->euclid] // [18] phi euclid::b#9 = 3 [phi:main::@3->euclid#0] -- vbuxx=vbuc1 ldx #3 - // [18] phi euclid::a#10 = $63 [phi:main::@3->euclid#1] -- vbuz1=vbuc1 + // [18] phi euclid::a#10 = $63 [phi:main::@3->euclid#1] -- call_phi_near lda #$63 sta.z euclid.a jsr euclid diff --git a/src/test/ref/examples/atari2600/atari2600-sprites.log b/src/test/ref/examples/atari2600/atari2600-sprites.log index 21d78081a..b2b4eda99 100644 --- a/src/test/ref/examples/atari2600/atari2600-sprites.log +++ b/src/test/ref/examples/atari2600/atari2600-sprites.log @@ -869,7 +869,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -1279,7 +1279,7 @@ __start: { sta.z p0_xpos // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/examples/c64/3d/perspective.log b/src/test/ref/examples/c64/3d/perspective.log index 75d6e8d72..0e9259487 100644 --- a/src/test/ref/examples/c64/3d/perspective.log +++ b/src/test/ref/examples/c64/3d/perspective.log @@ -1781,7 +1781,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [7] call main + // [7] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -1794,7 +1794,7 @@ main: { // asm { sei } sei // [10] call mulf_init - // [17] phi from main to mulf_init [phi:main->mulf_init] + // [17] phi from main to mulf_init [phi:main->mulf_init] -- call_phi_near mulf_init_from_main: jsr mulf_init jmp __b1 @@ -1811,7 +1811,7 @@ main: { lda #>mulf_sqr2 sta.z psp2+1 // [13] call print_cls - // [35] phi from main::@1 to print_cls [phi:main::@1->print_cls] + // [35] phi from main::@1 to print_cls [phi:main::@1->print_cls] -- call_phi_near print_cls_from___b1: jsr print_cls // [14] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -1820,7 +1820,7 @@ main: { // main::@2 __b2: // [15] call do_perspective - // [38] phi from main::@2 to do_perspective [phi:main::@2->do_perspective] + // [38] phi from main::@2 to do_perspective [phi:main::@2->do_perspective] -- call_phi_near do_perspective_from___b2: jsr do_perspective jmp __breturn @@ -1926,7 +1926,7 @@ mulf_init: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [36] call memset - // [65] phi from print_cls to memset [phi:print_cls->memset] + // [65] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -1949,7 +1949,7 @@ do_perspective: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [71] phi print_str::str#10 = do_perspective::str [phi:do_perspective->print_str#1] -- pbuz1=pbuc1 + // [71] phi print_str::str#10 = do_perspective::str [phi:do_perspective->print_str#1] -- call_phi_near lda #str @@ -1963,7 +1963,7 @@ do_perspective: { // [41] call print_schar // [78] phi from do_perspective::@1 to print_schar [phi:do_perspective::@1->print_schar] print_schar_from___b1: - // [78] phi print_schar::b#4 = do_perspective::x#0 [phi:do_perspective::@1->print_schar#0] -- vbsxx=vbsc1 + // [78] phi print_schar::b#4 = do_perspective::x#0 [phi:do_perspective::@1->print_schar#0] -- call_phi_near ldx #x jsr print_schar // [42] phi from do_perspective::@1 to do_perspective::@2 [phi:do_perspective::@1->do_perspective::@2] @@ -1975,7 +1975,7 @@ do_perspective: { // [71] phi from do_perspective::@2 to print_str [phi:do_perspective::@2->print_str] print_str_from___b2: // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@2->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@2->print_str#1] -- pbuz1=pbuc1 + // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@2->print_str#1] -- call_phi_near lda #str1 @@ -1989,7 +1989,7 @@ do_perspective: { // [45] call print_schar // [78] phi from do_perspective::@3 to print_schar [phi:do_perspective::@3->print_schar] print_schar_from___b3: - // [78] phi print_schar::b#4 = do_perspective::y#0 [phi:do_perspective::@3->print_schar#0] -- vbsxx=vbsc1 + // [78] phi print_schar::b#4 = do_perspective::y#0 [phi:do_perspective::@3->print_schar#0] -- call_phi_near ldx #y jsr print_schar // [46] phi from do_perspective::@3 to do_perspective::@4 [phi:do_perspective::@3->do_perspective::@4] @@ -2001,7 +2001,7 @@ do_perspective: { // [71] phi from do_perspective::@4 to print_str [phi:do_perspective::@4->print_str] print_str_from___b4: // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@4->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@4->print_str#1] -- pbuz1=pbuc1 + // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@4->print_str#1] -- call_phi_near lda #str1 @@ -2015,7 +2015,7 @@ do_perspective: { // [49] call print_schar // [78] phi from do_perspective::@5 to print_schar [phi:do_perspective::@5->print_schar] print_schar_from___b5: - // [78] phi print_schar::b#4 = do_perspective::z#0 [phi:do_perspective::@5->print_schar#0] -- vbsxx=vbsc1 + // [78] phi print_schar::b#4 = do_perspective::z#0 [phi:do_perspective::@5->print_schar#0] -- call_phi_near ldx #z jsr print_schar // [50] phi from do_perspective::@5 to do_perspective::@6 [phi:do_perspective::@5->do_perspective::@6] @@ -2027,7 +2027,7 @@ do_perspective: { // [71] phi from do_perspective::@6 to print_str [phi:do_perspective::@6->print_str] print_str_from___b6: // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@6->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str3 [phi:do_perspective::@6->print_str#1] -- pbuz1=pbuc1 + // [71] phi print_str::str#10 = do_perspective::str3 [phi:do_perspective::@6->print_str#1] -- call_phi_near lda #str3 @@ -2038,7 +2038,7 @@ do_perspective: { jmp __b7 // do_perspective::@7 __b7: - // [53] call perspective + // [53] call perspective -- call_phi_near jsr perspective jmp __b8 // do_perspective::@8 @@ -2049,7 +2049,7 @@ do_perspective: { // [94] phi from do_perspective::@8 to print_uchar [phi:do_perspective::@8->print_uchar] print_uchar_from___b8: // [94] phi print_char_cursor#72 = print_char_cursor#1 [phi:do_perspective::@8->print_uchar#0] -- register_copy - // [94] phi print_uchar::b#3 = print_uchar::b#1 [phi:do_perspective::@8->print_uchar#1] -- register_copy + // [94] phi print_uchar::b#3 = print_uchar::b#1 [phi:do_perspective::@8->print_uchar#1] -- call_phi_near jsr print_uchar // [56] phi from do_perspective::@8 to do_perspective::@9 [phi:do_perspective::@8->do_perspective::@9] __b9_from___b8: @@ -2060,7 +2060,7 @@ do_perspective: { // [71] phi from do_perspective::@9 to print_str [phi:do_perspective::@9->print_str] print_str_from___b9: // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@9->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@9->print_str#1] -- pbuz1=pbuc1 + // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@9->print_str#1] -- call_phi_near lda #str1 @@ -2075,7 +2075,7 @@ do_perspective: { // [94] phi from do_perspective::@10 to print_uchar [phi:do_perspective::@10->print_uchar] print_uchar_from___b10: // [94] phi print_char_cursor#72 = print_char_cursor#1 [phi:do_perspective::@10->print_uchar#0] -- register_copy - // [94] phi print_uchar::b#3 = print_uchar::b#2 [phi:do_perspective::@10->print_uchar#1] -- register_copy + // [94] phi print_uchar::b#3 = print_uchar::b#2 [phi:do_perspective::@10->print_uchar#1] -- call_phi_near jsr print_uchar // [60] phi from do_perspective::@10 to do_perspective::@11 [phi:do_perspective::@10->do_perspective::@11] __b11_from___b10: @@ -2086,7 +2086,7 @@ do_perspective: { // [71] phi from do_perspective::@11 to print_str [phi:do_perspective::@11->print_str] print_str_from___b11: // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@11->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str5 [phi:do_perspective::@11->print_str#1] -- pbuz1=pbuc1 + // [71] phi print_str::str#10 = do_perspective::str5 [phi:do_perspective::@11->print_str#1] -- call_phi_near lda #str5 @@ -2098,7 +2098,7 @@ do_perspective: { // do_perspective::@12 __b12: // [63] call print_ln - // [102] phi from do_perspective::@12 to print_ln [phi:do_perspective::@12->print_ln] + // [102] phi from do_perspective::@12 to print_ln [phi:do_perspective::@12->print_ln] -- call_phi_near print_ln_from___b12: jsr print_ln jmp __breturn @@ -2196,7 +2196,7 @@ print_str: { // [107] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [107] phi print_char_cursor#45 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [107] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -2224,7 +2224,7 @@ print_schar: { // [107] phi from print_schar::@3 to print_char [phi:print_schar::@3->print_char] print_char_from___b3: // [107] phi print_char_cursor#45 = print_char_cursor#1 [phi:print_schar::@3->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = ' ' [phi:print_schar::@3->print_char#1] -- vbuaa=vbuc1 + // [107] phi print_char::ch#5 = ' ' [phi:print_schar::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [82] phi from print_schar::@3 print_schar::@4 to print_schar::@2 [phi:print_schar::@3/print_schar::@4->print_schar::@2] @@ -2239,7 +2239,7 @@ print_schar: { // [94] phi from print_schar::@2 to print_uchar [phi:print_schar::@2->print_uchar] print_uchar_from___b2: // [94] phi print_char_cursor#72 = print_char_cursor#11 [phi:print_schar::@2->print_uchar#0] -- register_copy - // [94] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_schar::@2->print_uchar#1] -- register_copy + // [94] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_schar::@2->print_uchar#1] -- call_phi_near jsr print_uchar jmp __breturn // print_schar::@return @@ -2255,7 +2255,7 @@ print_schar: { // [107] phi from print_schar::@1 to print_char [phi:print_schar::@1->print_char] print_char_from___b1: // [107] phi print_char_cursor#45 = print_char_cursor#1 [phi:print_schar::@1->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = '-' [phi:print_schar::@1->print_char#1] -- vbuaa=vbuc1 + // [107] phi print_char::ch#5 = '-' [phi:print_schar::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char jmp __b4 @@ -2327,7 +2327,7 @@ print_uchar: { // [107] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [107] phi print_char_cursor#45 = print_char_cursor#72 [phi:print_uchar->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy + // [107] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -2341,7 +2341,7 @@ print_uchar: { // [107] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [107] phi print_char_cursor#45 = print_char_cursor#11 [phi:print_uchar::@1->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy + // [107] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -2772,7 +2772,7 @@ __start: { sta.z psp2+1 // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [7] call main + // [7] call main -- call_phi_near jsr main // __start::@return // [8] return @@ -2785,7 +2785,7 @@ main: { sei // mulf_init() // [10] call mulf_init - // [17] phi from main to mulf_init [phi:main->mulf_init] + // [17] phi from main to mulf_init [phi:main->mulf_init] -- call_phi_near jsr mulf_init // main::@1 // psp1 = (unsigned int)mulf_sqr1 @@ -2802,13 +2802,13 @@ main: { sta.z psp2+1 // print_cls() // [13] call print_cls - // [35] phi from main::@1 to print_cls [phi:main::@1->print_cls] + // [35] phi from main::@1 to print_cls [phi:main::@1->print_cls] -- call_phi_near jsr print_cls // [14] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // do_perspective($39, -$47, $36) // [15] call do_perspective - // [38] phi from main::@2 to do_perspective [phi:main::@2->do_perspective] + // [38] phi from main::@2 to do_perspective [phi:main::@2->do_perspective] -- call_phi_near jsr do_perspective // main::@return // } @@ -2914,7 +2914,7 @@ mulf_init: { print_cls: { // memset(print_screen, ' ', 1000) // [36] call memset - // [65] phi from print_cls to memset [phi:print_cls->memset] + // [65] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -2935,7 +2935,7 @@ do_perspective: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [71] phi print_str::str#10 = do_perspective::str [phi:do_perspective->print_str#1] -- pbuz1=pbuc1 + // [71] phi print_str::str#10 = do_perspective::str [phi:do_perspective->print_str#1] -- call_phi_near lda #str @@ -2946,7 +2946,7 @@ do_perspective: { // print_schar(x) // [41] call print_schar // [78] phi from do_perspective::@1 to print_schar [phi:do_perspective::@1->print_schar] - // [78] phi print_schar::b#4 = do_perspective::x#0 [phi:do_perspective::@1->print_schar#0] -- vbsxx=vbsc1 + // [78] phi print_schar::b#4 = do_perspective::x#0 [phi:do_perspective::@1->print_schar#0] -- call_phi_near ldx #x jsr print_schar // [42] phi from do_perspective::@1 to do_perspective::@2 [phi:do_perspective::@1->do_perspective::@2] @@ -2955,7 +2955,7 @@ do_perspective: { // [43] call print_str // [71] phi from do_perspective::@2 to print_str [phi:do_perspective::@2->print_str] // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@2->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@2->print_str#1] -- pbuz1=pbuc1 + // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@2->print_str#1] -- call_phi_near lda #str1 @@ -2966,7 +2966,7 @@ do_perspective: { // print_schar(y) // [45] call print_schar // [78] phi from do_perspective::@3 to print_schar [phi:do_perspective::@3->print_schar] - // [78] phi print_schar::b#4 = do_perspective::y#0 [phi:do_perspective::@3->print_schar#0] -- vbsxx=vbsc1 + // [78] phi print_schar::b#4 = do_perspective::y#0 [phi:do_perspective::@3->print_schar#0] -- call_phi_near ldx #y jsr print_schar // [46] phi from do_perspective::@3 to do_perspective::@4 [phi:do_perspective::@3->do_perspective::@4] @@ -2975,7 +2975,7 @@ do_perspective: { // [47] call print_str // [71] phi from do_perspective::@4 to print_str [phi:do_perspective::@4->print_str] // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@4->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@4->print_str#1] -- pbuz1=pbuc1 + // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@4->print_str#1] -- call_phi_near lda #str1 @@ -2986,7 +2986,7 @@ do_perspective: { // print_schar(z) // [49] call print_schar // [78] phi from do_perspective::@5 to print_schar [phi:do_perspective::@5->print_schar] - // [78] phi print_schar::b#4 = do_perspective::z#0 [phi:do_perspective::@5->print_schar#0] -- vbsxx=vbsc1 + // [78] phi print_schar::b#4 = do_perspective::z#0 [phi:do_perspective::@5->print_schar#0] -- call_phi_near ldx #z jsr print_schar // [50] phi from do_perspective::@5 to do_perspective::@6 [phi:do_perspective::@5->do_perspective::@6] @@ -2995,7 +2995,7 @@ do_perspective: { // [51] call print_str // [71] phi from do_perspective::@6 to print_str [phi:do_perspective::@6->print_str] // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@6->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str3 [phi:do_perspective::@6->print_str#1] -- pbuz1=pbuc1 + // [71] phi print_str::str#10 = do_perspective::str3 [phi:do_perspective::@6->print_str#1] -- call_phi_near lda #str3 @@ -3004,7 +3004,7 @@ do_perspective: { // [52] phi from do_perspective::@6 to do_perspective::@7 [phi:do_perspective::@6->do_perspective::@7] // do_perspective::@7 // perspective(x, y, z) - // [53] call perspective + // [53] call perspective -- call_phi_near jsr perspective // do_perspective::@8 // print_uchar((char)xr) @@ -3013,7 +3013,7 @@ do_perspective: { // [55] call print_uchar // [94] phi from do_perspective::@8 to print_uchar [phi:do_perspective::@8->print_uchar] // [94] phi print_char_cursor#72 = print_char_cursor#1 [phi:do_perspective::@8->print_uchar#0] -- register_copy - // [94] phi print_uchar::b#3 = print_uchar::b#1 [phi:do_perspective::@8->print_uchar#1] -- register_copy + // [94] phi print_uchar::b#3 = print_uchar::b#1 [phi:do_perspective::@8->print_uchar#1] -- call_phi_near jsr print_uchar // [56] phi from do_perspective::@8 to do_perspective::@9 [phi:do_perspective::@8->do_perspective::@9] // do_perspective::@9 @@ -3021,7 +3021,7 @@ do_perspective: { // [57] call print_str // [71] phi from do_perspective::@9 to print_str [phi:do_perspective::@9->print_str] // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@9->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@9->print_str#1] -- pbuz1=pbuc1 + // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@9->print_str#1] -- call_phi_near lda #str1 @@ -3034,7 +3034,7 @@ do_perspective: { // [59] call print_uchar // [94] phi from do_perspective::@10 to print_uchar [phi:do_perspective::@10->print_uchar] // [94] phi print_char_cursor#72 = print_char_cursor#1 [phi:do_perspective::@10->print_uchar#0] -- register_copy - // [94] phi print_uchar::b#3 = print_uchar::b#2 [phi:do_perspective::@10->print_uchar#1] -- register_copy + // [94] phi print_uchar::b#3 = print_uchar::b#2 [phi:do_perspective::@10->print_uchar#1] -- call_phi_near jsr print_uchar // [60] phi from do_perspective::@10 to do_perspective::@11 [phi:do_perspective::@10->do_perspective::@11] // do_perspective::@11 @@ -3042,7 +3042,7 @@ do_perspective: { // [61] call print_str // [71] phi from do_perspective::@11 to print_str [phi:do_perspective::@11->print_str] // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@11->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str5 [phi:do_perspective::@11->print_str#1] -- pbuz1=pbuc1 + // [71] phi print_str::str#10 = do_perspective::str5 [phi:do_perspective::@11->print_str#1] -- call_phi_near lda #str5 @@ -3052,7 +3052,7 @@ do_perspective: { // do_perspective::@12 // print_ln() // [63] call print_ln - // [102] phi from do_perspective::@12 to print_ln [phi:do_perspective::@12->print_ln] + // [102] phi from do_perspective::@12 to print_ln [phi:do_perspective::@12->print_ln] -- call_phi_near jsr print_ln // do_perspective::@return // } @@ -3144,7 +3144,7 @@ print_str: { // [76] call print_char // [107] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [107] phi print_char_cursor#45 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [107] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); @@ -3169,7 +3169,7 @@ print_schar: { // [81] call print_char // [107] phi from print_schar::@3 to print_char [phi:print_schar::@3->print_char] // [107] phi print_char_cursor#45 = print_char_cursor#1 [phi:print_schar::@3->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = ' ' [phi:print_schar::@3->print_char#1] -- vbuaa=vbuc1 + // [107] phi print_char::ch#5 = ' ' [phi:print_schar::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [82] phi from print_schar::@3 print_schar::@4 to print_schar::@2 [phi:print_schar::@3/print_schar::@4->print_schar::@2] @@ -3181,7 +3181,7 @@ print_schar: { // [84] call print_uchar // [94] phi from print_schar::@2 to print_uchar [phi:print_schar::@2->print_uchar] // [94] phi print_char_cursor#72 = print_char_cursor#11 [phi:print_schar::@2->print_uchar#0] -- register_copy - // [94] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_schar::@2->print_uchar#1] -- register_copy + // [94] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_schar::@2->print_uchar#1] -- call_phi_near jsr print_uchar // print_schar::@return // } @@ -3194,7 +3194,7 @@ print_schar: { // [87] call print_char // [107] phi from print_schar::@1 to print_char [phi:print_schar::@1->print_char] // [107] phi print_char_cursor#45 = print_char_cursor#1 [phi:print_schar::@1->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = '-' [phi:print_schar::@1->print_char#1] -- vbuaa=vbuc1 + // [107] phi print_char::ch#5 = '-' [phi:print_schar::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char // print_schar::@4 @@ -3268,7 +3268,7 @@ print_uchar: { // Table of hexadecimal digits // [107] phi from print_uchar to print_char [phi:print_uchar->print_char] // [107] phi print_char_cursor#45 = print_char_cursor#72 [phi:print_uchar->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy + // [107] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -3281,7 +3281,7 @@ print_uchar: { // [100] call print_char // [107] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [107] phi print_char_cursor#45 = print_char_cursor#11 [phi:print_uchar::@1->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy + // [107] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/examples/c64/bresenham/bitmap-bresenham.log b/src/test/ref/examples/c64/bresenham/bitmap-bresenham.log index 78e8ae48d..8995c17ed 100644 --- a/src/test/ref/examples/c64/bresenham/bitmap-bresenham.log +++ b/src/test/ref/examples/c64/bresenham/bitmap-bresenham.log @@ -2379,7 +2379,7 @@ main: { lda #(SCREEN&$3fff)/$40|(BITMAP&$3fff)/$400 sta VICII_MEMORY // [4] call bitmap_init - // [11] phi from main to bitmap_init [phi:main->bitmap_init] + // [11] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near bitmap_init_from_main: jsr bitmap_init // [5] phi from main to main::@2 [phi:main->main::@2] @@ -2388,7 +2388,7 @@ main: { // main::@2 __b2: // [6] call bitmap_clear - // [33] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] + // [33] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] -- call_phi_near bitmap_clear_from___b2: jsr bitmap_clear // [7] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -2397,7 +2397,7 @@ main: { // main::@3 __b3: // [8] call init_screen - // [38] phi from main::@3 to init_screen [phi:main::@3->init_screen] + // [38] phi from main::@3 to init_screen [phi:main::@3->init_screen] -- call_phi_near init_screen_from___b3: jsr init_screen // [9] phi from main::@1 main::@3 to main::@1 [phi:main::@1/main::@3->main::@1] @@ -2407,7 +2407,7 @@ main: { // main::@1 __b1: // [10] call lines - // [44] phi from main::@1 to lines [phi:main::@1->lines] + // [44] phi from main::@1 to lines [phi:main::@1->lines] -- call_phi_near lines_from___b1: jsr lines jmp __b1_from___b1 @@ -2540,7 +2540,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [54] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [54] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -2561,7 +2561,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [54] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [54] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -2660,7 +2660,7 @@ lines: { sta.z bitmap_line.y2 lda #0 sta.z bitmap_line.y2+1 - // [52] call bitmap_line + // [52] call bitmap_line -- call_phi_near jsr bitmap_line jmp __b3 // lines::@3 @@ -2757,7 +2757,7 @@ bitmap_line: { // [64] call abs_u16 // [114] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] abs_u16_from_bitmap_line: - // [114] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy + // [114] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near jsr abs_u16 // [65] abs_u16::return#0 = abs_u16::return#4 jmp __b12 @@ -2779,7 +2779,7 @@ bitmap_line: { // [68] call abs_u16 // [114] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] abs_u16_from___b12: - // [114] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- register_copy + // [114] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near jsr abs_u16 // [69] abs_u16::return#1 = abs_u16::return#4 jmp __b13 @@ -2811,7 +2811,7 @@ bitmap_line: { // [74] call sgn_u16 // [121] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] sgn_u16_from___b1: - // [121] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy + // [121] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near jsr sgn_u16 // [75] sgn_u16::return#0 = sgn_u16::return#4 jmp __b14 @@ -2833,7 +2833,7 @@ bitmap_line: { // [78] call sgn_u16 // [121] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] sgn_u16_from___b14: - // [121] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- register_copy + // [121] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near jsr sgn_u16 // [79] sgn_u16::return#1 = sgn_u16::return#4 jmp __b15 @@ -2876,7 +2876,7 @@ bitmap_line: { // [128] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] bitmap_plot_from___b6: // [128] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __b16 // bitmap_line::@16 @@ -2955,7 +2955,7 @@ bitmap_line: { // [128] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] bitmap_plot_from___b3: // [128] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __breturn // bitmap_line::@return @@ -2988,7 +2988,7 @@ bitmap_line: { // [128] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] bitmap_plot_from___b9: // [128] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __b17 // bitmap_line::@17 @@ -3062,7 +3062,7 @@ bitmap_line: { // [128] phi from bitmap_line::@4 to bitmap_plot [phi:bitmap_line::@4->bitmap_plot] bitmap_plot_from___b4: // [128] phi bitmap_plot::x#4 = bitmap_plot::x#0 [phi:bitmap_line::@4->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- register_copy + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near jsr bitmap_plot jmp __breturn } @@ -3595,26 +3595,26 @@ main: { sta VICII_MEMORY // bitmap_init(BITMAP, SCREEN) // [4] call bitmap_init - // [11] phi from main to bitmap_init [phi:main->bitmap_init] + // [11] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near jsr bitmap_init // [5] phi from main to main::@2 [phi:main->main::@2] // main::@2 // bitmap_clear(BLACK, WHITE) // [6] call bitmap_clear - // [33] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] + // [33] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] -- call_phi_near jsr bitmap_clear // [7] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // init_screen() // [8] call init_screen - // [38] phi from main::@3 to init_screen [phi:main::@3->init_screen] + // [38] phi from main::@3 to init_screen [phi:main::@3->init_screen] -- call_phi_near jsr init_screen // [9] phi from main::@1 main::@3 to main::@1 [phi:main::@1/main::@3->main::@1] // main::@1 __b1: // lines() // [10] call lines - // [44] phi from main::@1 to lines [phi:main::@1->lines] + // [44] phi from main::@1 to lines [phi:main::@1->lines] -- call_phi_near jsr lines jmp __b1 } @@ -3738,7 +3738,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [54] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [54] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -3756,7 +3756,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [54] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [54] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -3849,7 +3849,7 @@ lines: { sta.z bitmap_line.y2 lda #0 sta.z bitmap_line.y2+1 - // [52] call bitmap_line + // [52] call bitmap_line -- call_phi_near jsr bitmap_line // lines::@3 // for(char l=0; labs_u16] - // [114] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy + // [114] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near jsr abs_u16 // unsigned int dx = abs_u16(x2-x1) // [65] abs_u16::return#0 = abs_u16::return#4 @@ -3965,7 +3965,7 @@ bitmap_line: { sta.z abs_u16.w+1 // [68] call abs_u16 // [114] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] - // [114] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- register_copy + // [114] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near jsr abs_u16 // unsigned int dy = abs_u16(y2-y1) // [69] abs_u16::return#1 = abs_u16::return#4 @@ -3996,7 +3996,7 @@ bitmap_line: { sta.z sgn_u16.w+1 // [74] call sgn_u16 // [121] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] - // [121] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy + // [121] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near jsr sgn_u16 // unsigned int sx = sgn_u16(x2-x1) // [75] sgn_u16::return#0 = sgn_u16::return#4 @@ -4017,7 +4017,7 @@ bitmap_line: { sta.z sgn_u16.w+1 // [78] call sgn_u16 // [121] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] - // [121] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- register_copy + // [121] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near jsr sgn_u16 // unsigned int sy = sgn_u16(y2-y1) // [79] sgn_u16::return#1 = sgn_u16::return#4 @@ -4056,7 +4056,7 @@ bitmap_line: { // [86] call bitmap_plot // [128] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] // [128] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near jsr bitmap_plot // bitmap_line::@16 // y += sy @@ -4130,7 +4130,7 @@ bitmap_line: { // [97] call bitmap_plot // [128] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] // [128] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near jsr bitmap_plot // bitmap_line::@return // } @@ -4160,7 +4160,7 @@ bitmap_line: { // [103] call bitmap_plot // [128] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] // [128] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near jsr bitmap_plot // bitmap_line::@17 // x += sx @@ -4232,7 +4232,7 @@ bitmap_line: { // [113] call bitmap_plot // [128] phi from bitmap_line::@4 to bitmap_plot [phi:bitmap_line::@4->bitmap_plot] // [128] phi bitmap_plot::x#4 = bitmap_plot::x#0 [phi:bitmap_line::@4->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- register_copy + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near jsr bitmap_plot rts } diff --git a/src/test/ref/examples/c64/crunching/test-byteboozer.log b/src/test/ref/examples/c64/crunching/test-byteboozer.log index 7d5cb9d8f..d603107b2 100644 --- a/src/test/ref/examples/c64/crunching/test-byteboozer.log +++ b/src/test/ref/examples/c64/crunching/test-byteboozer.log @@ -281,7 +281,7 @@ main: { sta.z byteboozer_decrunch.crunched lda #>CRUNCHED_SPRITE sta.z byteboozer_decrunch.crunched+1 - // [1] call byteboozer_decrunch + // [1] call byteboozer_decrunch -- call_phi_near // Decrunch sprite file into memory jsr byteboozer_decrunch jmp __b2 @@ -445,7 +445,7 @@ main: { sta.z byteboozer_decrunch.crunched lda #>CRUNCHED_SPRITE sta.z byteboozer_decrunch.crunched+1 - // [1] call byteboozer_decrunch + // [1] call byteboozer_decrunch -- call_phi_near // Decrunch sprite file into memory jsr byteboozer_decrunch // main::@2 diff --git a/src/test/ref/examples/c64/fastmultiply/fastmultiply8.log b/src/test/ref/examples/c64/fastmultiply/fastmultiply8.log index 6bb624ab9..4b8b3bda8 100644 --- a/src/test/ref/examples/c64/fastmultiply/fastmultiply8.log +++ b/src/test/ref/examples/c64/fastmultiply/fastmultiply8.log @@ -1327,7 +1327,7 @@ main: { .label i = $f .label at_line = $d // [1] call init_screen - // [30] phi from main to init_screen [phi:main->init_screen] + // [30] phi from main to init_screen [phi:main->init_screen] -- call_phi_near init_screen_from_main: jsr init_screen // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1361,7 +1361,7 @@ main: { // [45] phi from main::@1 to print_schar_at [phi:main::@1->print_schar_at] print_schar_at_from___b1: // [45] phi print_schar_at::at#3 = print_schar_at::at#0 [phi:main::@1->print_schar_at#0] -- register_copy - // [45] phi print_schar_at::b#4 = print_schar_at::b#1 [phi:main::@1->print_schar_at#1] -- register_copy + // [45] phi print_schar_at::b#4 = print_schar_at::b#1 [phi:main::@1->print_schar_at#1] -- call_phi_near jsr print_schar_at jmp __b5 // main::@5 @@ -1419,7 +1419,7 @@ main: { // [45] phi from main::@2 to print_schar_at [phi:main::@2->print_schar_at] print_schar_at_from___b2: // [45] phi print_schar_at::at#3 = print_schar_at::at#1 [phi:main::@2->print_schar_at#0] -- register_copy - // [45] phi print_schar_at::b#4 = print_schar_at::b#2 [phi:main::@2->print_schar_at#1] -- register_copy + // [45] phi print_schar_at::b#4 = print_schar_at::b#2 [phi:main::@2->print_schar_at#1] -- call_phi_near jsr print_schar_at jmp __b6 // main::@6 @@ -1459,7 +1459,7 @@ main: { ldy.z j lda vals,y sta.z fmul8.bb - // [19] call fmul8 + // [19] call fmul8 -- call_phi_near jsr fmul8 // [20] fmul8::return#0 = fmul8::return#2 jmp __b7 @@ -1477,7 +1477,7 @@ main: { // [45] phi from main::@7 to print_schar_at [phi:main::@7->print_schar_at] print_schar_at_from___b7: // [45] phi print_schar_at::at#3 = print_schar_at::at#2 [phi:main::@7->print_schar_at#0] -- register_copy - // [45] phi print_schar_at::b#4 = print_schar_at::b#3 [phi:main::@7->print_schar_at#1] -- register_copy + // [45] phi print_schar_at::b#4 = print_schar_at::b#3 [phi:main::@7->print_schar_at#1] -- call_phi_near jsr print_schar_at jmp __b8 // main::@8 @@ -1508,7 +1508,7 @@ init_screen: { .const WHITE = 1 .label COLS = 2 // [31] call print_cls - // [62] phi from init_screen to print_cls [phi:init_screen->print_cls] + // [62] phi from init_screen to print_cls [phi:init_screen->print_cls] -- call_phi_near print_cls_from_init_screen: jsr print_cls // [32] phi from init_screen to init_screen::@1 [phi:init_screen->init_screen::@1] @@ -1599,7 +1599,7 @@ print_schar_at: { // [65] phi from print_schar_at::@3 to print_char_at [phi:print_schar_at::@3->print_char_at] print_char_at_from___b3: // [65] phi print_char_at::at#4 = print_char_at::at#1 [phi:print_schar_at::@3->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = ' ' [phi:print_schar_at::@3->print_char_at#1] -- vbuxx=vbuc1 + // [65] phi print_char_at::ch#4 = ' ' [phi:print_schar_at::@3->print_char_at#1] -- call_phi_near ldx #' ' jsr print_char_at // [49] phi from print_schar_at::@3 print_schar_at::@4 to print_schar_at::@2 [phi:print_schar_at::@3/print_schar_at::@4->print_schar_at::@2] @@ -1615,7 +1615,7 @@ print_schar_at: { inc.z print_uchar_at.at+1 !: // [51] print_uchar_at::b#0 = (char)print_schar_at::b#6 - // [52] call print_uchar_at + // [52] call print_uchar_at -- call_phi_near jsr print_uchar_at jmp __breturn // print_schar_at::@return @@ -1629,7 +1629,7 @@ print_schar_at: { // [65] phi from print_schar_at::@1 to print_char_at [phi:print_schar_at::@1->print_char_at] print_char_at_from___b1: // [65] phi print_char_at::at#4 = print_char_at::at#0 [phi:print_schar_at::@1->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = '-' [phi:print_schar_at::@1->print_char_at#1] -- vbuxx=vbuc1 + // [65] phi print_char_at::ch#4 = '-' [phi:print_schar_at::@1->print_char_at#1] -- call_phi_near ldx #'-' jsr print_char_at jmp __b4 @@ -1677,7 +1677,7 @@ fmul8: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [63] call memset - // [77] phi from print_cls to memset [phi:print_cls->memset] + // [77] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -1722,7 +1722,7 @@ print_uchar_at: { // [65] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at] print_char_at_from_print_uchar_at: // [65] phi print_char_at::at#4 = print_char_at::at#2 [phi:print_uchar_at->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = print_char_at::ch#2 [phi:print_uchar_at->print_char_at#1] -- register_copy + // [65] phi print_char_at::ch#4 = print_char_at::ch#2 [phi:print_uchar_at->print_char_at#1] -- call_phi_near jsr print_char_at jmp __b1 // print_uchar_at::@1 @@ -1742,7 +1742,7 @@ print_uchar_at: { // [65] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at] print_char_at_from___b1: // [65] phi print_char_at::at#4 = print_char_at::at#3 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = print_char_at::ch#3 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy + // [65] phi print_char_at::ch#4 = print_char_at::ch#3 [phi:print_uchar_at::@1->print_char_at#1] -- call_phi_near jsr print_char_at jmp __breturn // print_uchar_at::@return @@ -2072,7 +2072,7 @@ main: { .label at_line = $d // init_screen() // [1] call init_screen - // [30] phi from main to init_screen [phi:main->init_screen] + // [30] phi from main to init_screen [phi:main->init_screen] -- call_phi_near jsr init_screen // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::at#4 = (char *) 1024+4 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -2101,7 +2101,7 @@ main: { // [5] call print_schar_at // [45] phi from main::@1 to print_schar_at [phi:main::@1->print_schar_at] // [45] phi print_schar_at::at#3 = print_schar_at::at#0 [phi:main::@1->print_schar_at#0] -- register_copy - // [45] phi print_schar_at::b#4 = print_schar_at::b#1 [phi:main::@1->print_schar_at#1] -- register_copy + // [45] phi print_schar_at::b#4 = print_schar_at::b#1 [phi:main::@1->print_schar_at#1] -- call_phi_near jsr print_schar_at // main::@5 // at += 4 @@ -2156,7 +2156,7 @@ main: { // [13] call print_schar_at // [45] phi from main::@2 to print_schar_at [phi:main::@2->print_schar_at] // [45] phi print_schar_at::at#3 = print_schar_at::at#1 [phi:main::@2->print_schar_at#0] -- register_copy - // [45] phi print_schar_at::b#4 = print_schar_at::b#2 [phi:main::@2->print_schar_at#1] -- register_copy + // [45] phi print_schar_at::b#4 = print_schar_at::b#2 [phi:main::@2->print_schar_at#1] -- call_phi_near jsr print_schar_at // main::@6 // [14] main::at#12 = main::at#2 -- pbuz1=pbuz2 @@ -2192,7 +2192,7 @@ main: { ldy.z j lda vals,y sta.z fmul8.bb - // [19] call fmul8 + // [19] call fmul8 -- call_phi_near jsr fmul8 // [20] fmul8::return#0 = fmul8::return#2 // main::@7 @@ -2208,7 +2208,7 @@ main: { // [24] call print_schar_at // [45] phi from main::@7 to print_schar_at [phi:main::@7->print_schar_at] // [45] phi print_schar_at::at#3 = print_schar_at::at#2 [phi:main::@7->print_schar_at#0] -- register_copy - // [45] phi print_schar_at::b#4 = print_schar_at::b#3 [phi:main::@7->print_schar_at#1] -- register_copy + // [45] phi print_schar_at::b#4 = print_schar_at::b#3 [phi:main::@7->print_schar_at#1] -- call_phi_near jsr print_schar_at // main::@8 // for(char j: 0..8) @@ -2236,7 +2236,7 @@ init_screen: { .label COLS = 2 // print_cls() // [31] call print_cls - // [62] phi from init_screen to print_cls [phi:init_screen->print_cls] + // [62] phi from init_screen to print_cls [phi:init_screen->print_cls] -- call_phi_near jsr print_cls // [32] phi from init_screen to init_screen::@1 [phi:init_screen->init_screen::@1] // [32] phi init_screen::l#2 = 0 [phi:init_screen->init_screen::@1#0] -- vbuxx=vbuc1 @@ -2321,7 +2321,7 @@ print_schar_at: { // [48] call print_char_at // [65] phi from print_schar_at::@3 to print_char_at [phi:print_schar_at::@3->print_char_at] // [65] phi print_char_at::at#4 = print_char_at::at#1 [phi:print_schar_at::@3->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = ' ' [phi:print_schar_at::@3->print_char_at#1] -- vbuxx=vbuc1 + // [65] phi print_char_at::ch#4 = ' ' [phi:print_schar_at::@3->print_char_at#1] -- call_phi_near ldx #' ' jsr print_char_at // [49] phi from print_schar_at::@3 print_schar_at::@4 to print_schar_at::@2 [phi:print_schar_at::@3/print_schar_at::@4->print_schar_at::@2] @@ -2335,7 +2335,7 @@ print_schar_at: { inc.z print_uchar_at.at+1 !: // [51] print_uchar_at::b#0 = (char)print_schar_at::b#6 - // [52] call print_uchar_at + // [52] call print_uchar_at -- call_phi_near jsr print_uchar_at // print_schar_at::@return // } @@ -2348,7 +2348,7 @@ print_schar_at: { // [55] call print_char_at // [65] phi from print_schar_at::@1 to print_char_at [phi:print_schar_at::@1->print_char_at] // [65] phi print_char_at::at#4 = print_char_at::at#0 [phi:print_schar_at::@1->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = '-' [phi:print_schar_at::@1->print_char_at#1] -- vbuxx=vbuc1 + // [65] phi print_char_at::ch#4 = '-' [phi:print_schar_at::@1->print_char_at#1] -- call_phi_near ldx #'-' jsr print_char_at // print_schar_at::@4 @@ -2397,7 +2397,7 @@ fmul8: { print_cls: { // memset(print_screen, ' ', 1000) // [63] call memset - // [77] phi from print_cls to memset [phi:print_cls->memset] + // [77] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -2441,7 +2441,7 @@ print_uchar_at: { // Table of hexadecimal digits // [65] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at] // [65] phi print_char_at::at#4 = print_char_at::at#2 [phi:print_uchar_at->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = print_char_at::ch#2 [phi:print_uchar_at->print_char_at#1] -- register_copy + // [65] phi print_char_at::ch#4 = print_char_at::ch#2 [phi:print_uchar_at->print_char_at#1] -- call_phi_near jsr print_char_at // print_uchar_at::@1 // b&$f @@ -2460,7 +2460,7 @@ print_uchar_at: { // [75] call print_char_at // [65] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at] // [65] phi print_char_at::at#4 = print_char_at::at#3 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = print_char_at::ch#3 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy + // [65] phi print_char_at::ch#4 = print_char_at::ch#3 [phi:print_uchar_at::@1->print_char_at#1] -- call_phi_near jsr print_char_at // print_uchar_at::@return // } diff --git a/src/test/ref/examples/c64/fire/fire.log b/src/test/ref/examples/c64/fire/fire.log index 04aa6b997..e59bb1d91 100644 --- a/src/test/ref/examples/c64/fire/fire.log +++ b/src/test/ref/examples/c64/fire/fire.log @@ -1695,7 +1695,7 @@ main: { sta.z fillscreen.screen lda #>BUFFER sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = 0 [phi:main->fillscreen#1] -- vbuxx=vbuc1 + // [21] phi fillscreen::fill#5 = 0 [phi:main->fillscreen#1] -- call_phi_near ldx #0 jsr fillscreen // [4] phi from main to main::@5 [phi:main->main::@5] @@ -1711,7 +1711,7 @@ main: { sta.z fillscreen.screen lda #>SCREEN1 sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = 0 [phi:main::@5->fillscreen#1] -- vbuxx=vbuc1 + // [21] phi fillscreen::fill#5 = 0 [phi:main::@5->fillscreen#1] -- call_phi_near ldx #0 jsr fillscreen // [6] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -1727,7 +1727,7 @@ main: { sta.z fillscreen.screen lda #>SCREEN2 sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = 0 [phi:main::@6->fillscreen#1] -- vbuxx=vbuc1 + // [21] phi fillscreen::fill#5 = 0 [phi:main::@6->fillscreen#1] -- call_phi_near ldx #0 jsr fillscreen // [8] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -1743,7 +1743,7 @@ main: { sta.z fillscreen.screen lda #>COLS sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = YELLOW [phi:main::@7->fillscreen#1] -- vbuxx=vbuc1 + // [21] phi fillscreen::fill#5 = YELLOW [phi:main::@7->fillscreen#1] -- call_phi_near ldx #YELLOW jsr fillscreen jmp sid_rnd_init1 @@ -1763,7 +1763,7 @@ main: { // main::@2 __b2: // [13] call makecharset - // [28] phi from main::@2 to makecharset [phi:main::@2->makecharset] + // [28] phi from main::@2 to makecharset [phi:main::@2->makecharset] -- call_phi_near makecharset_from___b2: jsr makecharset // [14] phi from main::@2 main::@4 to main::@1 [phi:main::@2/main::@4->main::@1] @@ -1775,7 +1775,7 @@ main: { // [15] call fire // [60] phi from main::@1 to fire [phi:main::@1->fire] fire_from___b1: - // [60] phi fire::screen#0 = SCREEN1 [phi:main::@1->fire#0] -- pbuz1=pbuc1 + // [60] phi fire::screen#0 = SCREEN1 [phi:main::@1->fire#0] -- call_phi_near lda #SCREEN1 @@ -1795,7 +1795,7 @@ main: { // [18] call fire // [60] phi from main::@3 to fire [phi:main::@3->fire] fire_from___b3: - // [60] phi fire::screen#0 = SCREEN2 [phi:main::@3->fire#0] -- pbuz1=pbuc1 + // [60] phi fire::screen#0 = SCREEN2 [phi:main::@3->fire#0] -- call_phi_near lda #SCREEN2 @@ -2546,7 +2546,7 @@ main: { sta.z fillscreen.screen lda #>BUFFER sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = 0 [phi:main->fillscreen#1] -- vbuxx=vbuc1 + // [21] phi fillscreen::fill#5 = 0 [phi:main->fillscreen#1] -- call_phi_near ldx #0 jsr fillscreen // [4] phi from main to main::@5 [phi:main->main::@5] @@ -2559,7 +2559,7 @@ main: { sta.z fillscreen.screen lda #>SCREEN1 sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = 0 [phi:main::@5->fillscreen#1] -- vbuxx=vbuc1 + // [21] phi fillscreen::fill#5 = 0 [phi:main::@5->fillscreen#1] -- call_phi_near ldx #0 jsr fillscreen // [6] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -2572,7 +2572,7 @@ main: { sta.z fillscreen.screen lda #>SCREEN2 sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = 0 [phi:main::@6->fillscreen#1] -- vbuxx=vbuc1 + // [21] phi fillscreen::fill#5 = 0 [phi:main::@6->fillscreen#1] -- call_phi_near ldx #0 jsr fillscreen // [8] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -2585,7 +2585,7 @@ main: { sta.z fillscreen.screen lda #>COLS sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = YELLOW [phi:main::@7->fillscreen#1] -- vbuxx=vbuc1 + // [21] phi fillscreen::fill#5 = YELLOW [phi:main::@7->fillscreen#1] -- call_phi_near ldx #YELLOW jsr fillscreen // main::sid_rnd_init1 @@ -2603,7 +2603,7 @@ main: { // main::@2 // makecharset(CHARSET) // [13] call makecharset - // [28] phi from main::@2 to makecharset [phi:main::@2->makecharset] + // [28] phi from main::@2 to makecharset [phi:main::@2->makecharset] -- call_phi_near jsr makecharset // [14] phi from main::@2 main::@4 to main::@1 [phi:main::@2/main::@4->main::@1] // main::@1 @@ -2611,7 +2611,7 @@ main: { // fire(SCREEN1) // [15] call fire // [60] phi from main::@1 to fire [phi:main::@1->fire] - // [60] phi fire::screen#0 = SCREEN1 [phi:main::@1->fire#0] -- pbuz1=pbuc1 + // [60] phi fire::screen#0 = SCREEN1 [phi:main::@1->fire#0] -- call_phi_near lda #SCREEN1 @@ -2627,7 +2627,7 @@ main: { // fire(SCREEN2) // [18] call fire // [60] phi from main::@3 to fire [phi:main::@3->fire] - // [60] phi fire::screen#0 = SCREEN2 [phi:main::@3->fire#0] -- pbuz1=pbuc1 + // [60] phi fire::screen#0 = SCREEN2 [phi:main::@3->fire#0] -- call_phi_near lda #SCREEN2 diff --git a/src/test/ref/examples/c64/font-2x2/font-2x2.log b/src/test/ref/examples/c64/font-2x2/font-2x2.log index 54e8fc78d..610d18dbd 100644 --- a/src/test/ref/examples/c64/font-2x2/font-2x2.log +++ b/src/test/ref/examples/c64/font-2x2/font-2x2.log @@ -2350,7 +2350,7 @@ main: { lda #PROCPORT_RAM_CHARROM sta.z PROCPORT // [2] call font_2x2 - // [22] phi from main to font_2x2 [phi:main->font_2x2] + // [22] phi from main to font_2x2 [phi:main->font_2x2] -- call_phi_near font_2x2_from_main: jsr font_2x2 jmp __b6 @@ -2363,7 +2363,7 @@ main: { cli // [5] call font_compress // Compress the font finding identical characters - // [62] phi from main::@6 to font_compress [phi:main::@6->font_compress] + // [62] phi from main::@6 to font_compress [phi:main::@6->font_compress] -- call_phi_near font_compress_from___b6: jsr font_compress // [6] phi from main::@6 to main::toD0181 [phi:main::@6->main::toD0181] @@ -2382,7 +2382,7 @@ main: { ldx FONT_COMPRESSED_MAP+' ' // [9] call memset // Clear the screen - // [85] phi from main::@5 to memset [phi:main::@5->memset] + // [85] phi from main::@5 to memset [phi:main::@5->memset] -- call_phi_near memset_from___b5: jsr memset // [10] phi from main::@5 to main::@1 [phi:main::@5->main::@1] @@ -2420,7 +2420,7 @@ main: { ldx.z x // [14] show::y#0 = main::y#4 -- vbuaa=vbuz1 lda.z y - // [15] call show + // [15] call show -- call_phi_near jsr show jmp __b7 // main::@7 @@ -2735,7 +2735,7 @@ font_compress: { // [65] font_find::font_size#0 = font_compress::font_size#2 // [66] call font_find // Look for the char in font_compressed - // [106] phi from font_compress::@1 to font_find [phi:font_compress::@1->font_find] + // [106] phi from font_compress::@1 to font_find [phi:font_compress::@1->font_find] -- call_phi_near font_find_from___b1: jsr font_find // [67] font_find::return#0 = font_find::return#3 -- vbuaa=vbuxx @@ -3428,7 +3428,7 @@ main: { sta.z PROCPORT // font_2x2(CHARGEN, FONT_ORIGINAL) // [2] call font_2x2 - // [22] phi from main to font_2x2 [phi:main->font_2x2] + // [22] phi from main to font_2x2 [phi:main->font_2x2] -- call_phi_near jsr font_2x2 // main::@6 // *PROCPORT = PROCPORT_BASIC_KERNEL_IO @@ -3441,7 +3441,7 @@ main: { // char size = font_compress(FONT_ORIGINAL, FONT_COMPRESSED, FONT_COMPRESSED_MAP) // [5] call font_compress // Compress the font finding identical characters - // [62] phi from main::@6 to font_compress [phi:main::@6->font_compress] + // [62] phi from main::@6 to font_compress [phi:main::@6->font_compress] -- call_phi_near jsr font_compress // [6] phi from main::@6 to main::toD0181 [phi:main::@6->main::toD0181] // main::toD0181 @@ -3456,7 +3456,7 @@ main: { ldx FONT_COMPRESSED_MAP+' ' // [9] call memset // Clear the screen - // [85] phi from main::@5 to memset [phi:main::@5->memset] + // [85] phi from main::@5 to memset [phi:main::@5->memset] -- call_phi_near jsr memset // [10] phi from main::@5 to main::@1 [phi:main::@5->main::@1] // [10] phi main::y#4 = 0 [phi:main::@5->main::@1#0] -- vbuz1=vbuc1 @@ -3485,7 +3485,7 @@ main: { ldx.z x // [14] show::y#0 = main::y#4 -- vbuaa=vbuz1 lda.z y - // [15] call show + // [15] call show -- call_phi_near jsr show // main::@7 // show(c++, x, y, FONT_COMPRESSED_MAP); @@ -3792,7 +3792,7 @@ font_compress: { // [65] font_find::font_size#0 = font_compress::font_size#2 // [66] call font_find // Look for the char in font_compressed - // [106] phi from font_compress::@1 to font_find [phi:font_compress::@1->font_find] + // [106] phi from font_compress::@1 to font_find [phi:font_compress::@1->font_find] -- call_phi_near jsr font_find // char found = font_find(next_original, font_compressed, font_size) // [67] font_find::return#0 = font_find::return#3 -- vbuaa=vbuxx diff --git a/src/test/ref/examples/c64/kernalload/kernalload.log b/src/test/ref/examples/c64/kernalload/kernalload.log index b0fba1a3b..f2753c471 100644 --- a/src/test/ref/examples/c64/kernalload/kernalload.log +++ b/src/test/ref/examples/c64/kernalload/kernalload.log @@ -763,7 +763,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { .const toSpritePtr1_return = LOAD_SPRITE/$40 - // [1] call loadFileToMemory + // [1] call loadFileToMemory -- call_phi_near // Load sprite file into memory jsr loadFileToMemory // [2] loadFileToMemory::return#0 = loadFileToMemory::return#1 @@ -783,7 +783,7 @@ main: { sta VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // [6] error::err = main::status#0 -- vbuz1=vbuxx stx.z error.err - // [7] call error + // [7] call error -- call_phi_near jsr error jmp __b1 // main::@1 @@ -835,7 +835,7 @@ loadFileToMemory: { sta.z setnam.filename lda #>main.filename sta.z setnam.filename+1 - // [16] call setnam + // [16] call setnam -- call_phi_near jsr setnam jmp __b1 // loadFileToMemory::@1 @@ -843,7 +843,7 @@ loadFileToMemory: { // [17] setlfs::device = loadFileToMemory::device#0 -- vbuz1=vbuc1 lda #device sta.z setlfs.device - // [18] call setlfs + // [18] call setlfs -- call_phi_near jsr setlfs jmp __b2 // loadFileToMemory::@2 @@ -856,7 +856,7 @@ loadFileToMemory: { // [20] load::verify = 0 -- vbuz1=vbuc1 lda #0 sta.z load.verify - // [21] call load + // [21] call load -- call_phi_near jsr load // [22] load::return#0 = load::return#2 jmp __b3 @@ -898,7 +898,7 @@ setnam: { lda.z filename+1 sta.z strlen.str+1 // [28] call strlen - // [41] phi from setnam to strlen [phi:setnam->strlen] + // [41] phi from setnam to strlen [phi:setnam->strlen] -- call_phi_near strlen_from_setnam: jsr strlen // [29] strlen::return#2 = strlen::len#2 @@ -1187,7 +1187,7 @@ Score: 720 main: { .const toSpritePtr1_return = LOAD_SPRITE/$40 // char status = loadFileToMemory(8, "SPRITE", LOAD_SPRITE) - // [1] call loadFileToMemory + // [1] call loadFileToMemory -- call_phi_near // Load sprite file into memory jsr loadFileToMemory // [2] loadFileToMemory::return#0 = loadFileToMemory::return#1 @@ -1206,7 +1206,7 @@ main: { // error(status) // [6] error::err = main::status#0 -- vbuz1=vbuxx stx.z error.err - // [7] call error + // [7] call error -- call_phi_near jsr error // main::@1 __b1: @@ -1257,14 +1257,14 @@ loadFileToMemory: { sta.z setnam.filename lda #>main.filename sta.z setnam.filename+1 - // [16] call setnam + // [16] call setnam -- call_phi_near jsr setnam // loadFileToMemory::@1 // setlfs(device) // [17] setlfs::device = loadFileToMemory::device#0 -- vbuz1=vbuc1 lda #device sta.z setlfs.device - // [18] call setlfs + // [18] call setlfs -- call_phi_near jsr setlfs // loadFileToMemory::@2 // load(address, 0) @@ -1276,7 +1276,7 @@ loadFileToMemory: { // [20] load::verify = 0 -- vbuz1=vbuc1 lda #0 sta.z load.verify - // [21] call load + // [21] call load -- call_phi_near jsr load // [22] load::return#0 = load::return#2 // loadFileToMemory::@3 @@ -1316,7 +1316,7 @@ setnam: { lda.z filename+1 sta.z strlen.str+1 // [28] call strlen - // [41] phi from setnam to strlen [phi:setnam->strlen] + // [41] phi from setnam to strlen [phi:setnam->strlen] -- call_phi_near jsr strlen // strlen(filename) // [29] strlen::return#2 = strlen::len#2 diff --git a/src/test/ref/examples/c64/krillload/krillload.log b/src/test/ref/examples/c64/krillload/krillload.log index 665ca6f4e..c9c97817f 100644 --- a/src/test/ref/examples/c64/krillload/krillload.log +++ b/src/test/ref/examples/c64/krillload/krillload.log @@ -461,7 +461,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { .const toSpritePtr1_return = $ff&SPRITE/$40 - // [1] call krill_install + // [1] call krill_install -- call_phi_near // Install the Krill drive code jsr krill_install // [2] krill_install::return#2 = krill_install::return#0 @@ -488,7 +488,7 @@ main: { jmp __b1 // main::@1 __b1: - // [8] call krill_loadraw + // [8] call krill_loadraw -- call_phi_near jsr krill_loadraw // [9] krill_loadraw::return#2 = krill_loadraw::return#0 jmp __b7 @@ -744,7 +744,7 @@ Score: 128 main: { .const toSpritePtr1_return = $ff&SPRITE/$40 // char status = krill_install() - // [1] call krill_install + // [1] call krill_install -- call_phi_near // Install the Krill drive code jsr krill_install // [2] krill_install::return#2 = krill_install::return#0 @@ -767,7 +767,7 @@ main: { // main::@1 __b1: // krill_loadraw("sprite") - // [8] call krill_loadraw + // [8] call krill_loadraw -- call_phi_near jsr krill_loadraw // [9] krill_loadraw::return#2 = krill_loadraw::return#0 // main::@7 diff --git a/src/test/ref/examples/c64/linking/linking.log b/src/test/ref/examples/c64/linking/linking.log index fadfb0a08..8cb2caf14 100644 --- a/src/test/ref/examples/c64/linking/linking.log +++ b/src/test/ref/examples/c64/linking/linking.log @@ -330,7 +330,7 @@ main: { lda BG_COLOR sta.z fillscreen.c // [6] call fillscreen - // [8] phi from main::@2 to fillscreen [phi:main::@2->fillscreen] + // [8] phi from main::@2 to fillscreen [phi:main::@2->fillscreen] -- call_phi_near fillscreen_from___b2: jsr fillscreen jmp __b3 @@ -496,7 +496,7 @@ main: { lda BG_COLOR sta.z fillscreen.c // [6] call fillscreen - // [8] phi from main::@2 to fillscreen [phi:main::@2->fillscreen] + // [8] phi from main::@2 to fillscreen [phi:main::@2->fillscreen] -- call_phi_near jsr fillscreen // main::@3 // (*BG_COLOR)++; diff --git a/src/test/ref/examples/c64/multiplexer/simple-multiplexer.log b/src/test/ref/examples/c64/multiplexer/simple-multiplexer.log index e8051dc8f..09f17dcee 100644 --- a/src/test/ref/examples/c64/multiplexer/simple-multiplexer.log +++ b/src/test/ref/examples/c64/multiplexer/simple-multiplexer.log @@ -1674,7 +1674,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [7] call main + // [7] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -1686,7 +1686,7 @@ __start: { main: { // asm { sei } sei - // [10] call init + // [10] call init -- call_phi_near jsr init // [11] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -1694,7 +1694,7 @@ main: { // main::@1 __b1: // [12] call loop - // [29] phi from main::@1 to loop [phi:main::@1->loop] + // [29] phi from main::@1 to loop [phi:main::@1->loop] -- call_phi_near loop_from___b1: jsr loop jmp __breturn @@ -1713,7 +1713,7 @@ init: { sta D011 // [15] call plexInit // Initialize the multiplexer - // [54] phi from init to plexInit [phi:init->plexInit] + // [54] phi from init to plexInit [phi:init->plexInit] -- call_phi_near plexInit_from_init: jsr plexInit // [16] phi from init to init::@1 [phi:init->init::@1] @@ -1850,7 +1850,7 @@ loop: { // [40] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // [41] call plexSort - // [61] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] + // [61] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] -- call_phi_near plexSort_from___b5: jsr plexSort jmp __b11 @@ -1903,7 +1903,7 @@ loop: { __b9: // [49] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR - // [50] call plexShowSprite + // [50] call plexShowSprite -- call_phi_near jsr plexShowSprite jmp __b12 // loop::@12 @@ -2583,7 +2583,7 @@ __start: { sta.z plex_free_next // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [7] call main + // [7] call main -- call_phi_near jsr main // __start::@return // [8] return @@ -2595,13 +2595,13 @@ main: { // asm { sei } sei // init() - // [10] call init + // [10] call init -- call_phi_near jsr init // [11] phi from main to main::@1 [phi:main->main::@1] // main::@1 // loop() // [12] call loop - // [29] phi from main::@1 to loop [phi:main::@1->loop] + // [29] phi from main::@1 to loop [phi:main::@1->loop] -- call_phi_near jsr loop // main::@return // } @@ -2620,7 +2620,7 @@ init: { // plexInit(SCREEN) // [15] call plexInit // Initialize the multiplexer - // [54] phi from init to plexInit [phi:init->plexInit] + // [54] phi from init to plexInit [phi:init->plexInit] -- call_phi_near jsr plexInit // [16] phi from init to init::@1 [phi:init->init::@1] // [16] phi init::xp#2 = $20 [phi:init->init::@1#0] -- vwuz1=vwuc1 @@ -2748,7 +2748,7 @@ loop: { inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // plexSort() // [41] call plexSort - // [61] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] + // [61] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] -- call_phi_near jsr plexSort // loop::@11 // VICII->BORDER_COLOR = BLACK @@ -2796,7 +2796,7 @@ loop: { // [49] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // plexShowSprite() - // [50] call plexShowSprite + // [50] call plexShowSprite -- call_phi_near jsr plexShowSprite // loop::@12 // for( char ss: 0..PLEX_COUNT-1) diff --git a/src/test/ref/examples/c64/nmisamples/nmisamples.log b/src/test/ref/examples/c64/nmisamples/nmisamples.log index 3b7a48291..3943b2d56 100644 --- a/src/test/ref/examples/c64/nmisamples/nmisamples.log +++ b/src/test/ref/examples/c64/nmisamples/nmisamples.log @@ -329,7 +329,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -573,7 +573,7 @@ __start: { sta.z sample+1 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/examples/c64/rasterbars/raster-bars.log b/src/test/ref/examples/c64/rasterbars/raster-bars.log index c46d54f43..df81be3ca 100644 --- a/src/test/ref/examples/c64/rasterbars/raster-bars.log +++ b/src/test/ref/examples/c64/rasterbars/raster-bars.log @@ -248,7 +248,7 @@ main: { jmp __b3 // main::@3 __b3: - // [4] call raster + // [4] call raster -- call_phi_near jsr raster jmp __b1 } @@ -419,7 +419,7 @@ main: { // [3] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // raster() - // [4] call raster + // [4] call raster -- call_phi_near jsr raster jmp __b1 } diff --git a/src/test/ref/examples/c64/scroll/scroll.log b/src/test/ref/examples/c64/scroll/scroll.log index 0369e4d2d..5cdde9acf 100644 --- a/src/test/ref/examples/c64/scroll/scroll.log +++ b/src/test/ref/examples/c64/scroll/scroll.log @@ -517,7 +517,7 @@ main: { .label line = SCREEN+$28 .label nxt = 4 // [1] call fillscreen - // [21] phi from main to fillscreen [phi:main->fillscreen] + // [21] phi from main to fillscreen [phi:main->fillscreen] -- call_phi_near fillscreen_from_main: jsr fillscreen // [2] phi from main to main::@1 [phi:main->main::@1] @@ -802,7 +802,7 @@ main: { .label nxt = 4 // fillscreen(SCREEN, $20) // [1] call fillscreen - // [21] phi from main to fillscreen [phi:main->fillscreen] + // [21] phi from main to fillscreen [phi:main->fillscreen] -- call_phi_near jsr fillscreen // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::nxt#10 = TEXT [phi:main->main::@1#0] -- pbuz1=pbuc1 diff --git a/src/test/ref/examples/c64/scrollbig/scrollbig.log b/src/test/ref/examples/c64/scrollbig/scrollbig.log index 8c184af4f..ef0ad24ba 100644 --- a/src/test/ref/examples/c64/scrollbig/scrollbig.log +++ b/src/test/ref/examples/c64/scrollbig/scrollbig.log @@ -1466,7 +1466,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call fillscreen - // [8] phi from main to fillscreen [phi:main->fillscreen] + // [8] phi from main to fillscreen [phi:main->fillscreen] -- call_phi_near fillscreen_from_main: jsr fillscreen // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1514,7 +1514,7 @@ main: { __b3: // [5] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) = ++ *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR - // [6] call scroll_soft + // [6] call scroll_soft -- call_phi_near jsr scroll_soft jmp __b4 // main::@4 @@ -1581,7 +1581,7 @@ scroll_soft: { jmp __b2 // scroll_soft::@2 __b2: - // [17] call scroll_bit + // [17] call scroll_bit -- call_phi_near jsr scroll_bit // [18] phi from scroll_soft::@2 to scroll_soft::@1 [phi:scroll_soft::@2->scroll_soft::@1] __b1_from___b2: @@ -1623,7 +1623,7 @@ scroll_bit: { jmp __b2 // scroll_bit::@2 __b2: - // [24] call next_char + // [24] call next_char -- call_phi_near jsr next_char // [25] next_char::return#0 = next_char::return#1 -- vbuaa=vbuxx txa @@ -1666,7 +1666,7 @@ scroll_bit: { // scroll_bit::@1 __b1: // [30] call scroll_hard - // [52] phi from scroll_bit::@1 to scroll_hard [phi:scroll_bit::@1->scroll_hard] + // [52] phi from scroll_bit::@1 to scroll_hard [phi:scroll_bit::@1->scroll_hard] -- call_phi_near scroll_hard_from___b1: jsr scroll_hard jmp __b7 @@ -2044,7 +2044,7 @@ Score: 20882 main: { // fillscreen(SCREEN, $20) // [1] call fillscreen - // [8] phi from main to fillscreen [phi:main->fillscreen] + // [8] phi from main to fillscreen [phi:main->fillscreen] -- call_phi_near jsr fillscreen // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi current_chargen#28 = CHARGEN [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -2087,7 +2087,7 @@ main: { // [5] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) = ++ *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR // scroll_soft() - // [6] call scroll_soft + // [6] call scroll_soft -- call_phi_near jsr scroll_soft // main::@4 // --VICII->BG_COLOR; @@ -2151,7 +2151,7 @@ scroll_soft: { // [16] phi from scroll_soft to scroll_soft::@2 [phi:scroll_soft->scroll_soft::@2] // scroll_soft::@2 // scroll_bit() - // [17] call scroll_bit + // [17] call scroll_bit -- call_phi_near jsr scroll_bit // [18] phi from scroll_soft::@2 to scroll_soft::@1 [phi:scroll_soft::@2->scroll_soft::@1] // [18] phi current_chargen#12 = current_chargen#21 [phi:scroll_soft::@2->scroll_soft::@1#0] -- register_copy @@ -2189,7 +2189,7 @@ scroll_bit: { // [23] phi from scroll_bit to scroll_bit::@2 [phi:scroll_bit->scroll_bit::@2] // scroll_bit::@2 // unsigned int c = next_char() - // [24] call next_char + // [24] call next_char -- call_phi_near jsr next_char // [25] next_char::return#0 = next_char::return#1 -- vbuaa=vbuxx txa @@ -2229,7 +2229,7 @@ scroll_bit: { __b1: // scroll_hard() // [30] call scroll_hard - // [52] phi from scroll_bit::@1 to scroll_hard [phi:scroll_bit::@1->scroll_hard] + // [52] phi from scroll_bit::@1 to scroll_hard [phi:scroll_bit::@1->scroll_hard] -- call_phi_near jsr scroll_hard // scroll_bit::@7 // asm diff --git a/src/test/ref/examples/c64/showlogo/showlogo.log b/src/test/ref/examples/c64/showlogo/showlogo.log index ec8afeea4..a73435332 100644 --- a/src/test/ref/examples/c64/showlogo/showlogo.log +++ b/src/test/ref/examples/c64/showlogo/showlogo.log @@ -641,7 +641,7 @@ main: { memset_from___b3: // [16] phi memset::c#4 = BLACK [phi:main::@3->memset#0] -- vbuxx=vbuc1 ldx #BLACK - // [16] phi memset::str#3 = (void *)SCREEN [phi:main::@3->memset#1] -- pvoz1=pvoc1 + // [16] phi memset::str#3 = (void *)SCREEN [phi:main::@3->memset#1] -- call_phi_near lda #SCREEN @@ -657,7 +657,7 @@ main: { memset_from___b4: // [16] phi memset::c#4 = WHITE|8 [phi:main::@4->memset#0] -- vbuxx=vbuc1 ldx #WHITE|8 - // [16] phi memset::str#3 = (void *)COLS [phi:main::@4->memset#1] -- pvoz1=pvoc1 + // [16] phi memset::str#3 = (void *)COLS [phi:main::@4->memset#1] -- call_phi_near lda #COLS @@ -916,7 +916,7 @@ main: { // [16] phi from main::@3 to memset [phi:main::@3->memset] // [16] phi memset::c#4 = BLACK [phi:main::@3->memset#0] -- vbuxx=vbuc1 ldx #BLACK - // [16] phi memset::str#3 = (void *)SCREEN [phi:main::@3->memset#1] -- pvoz1=pvoc1 + // [16] phi memset::str#3 = (void *)SCREEN [phi:main::@3->memset#1] -- call_phi_near lda #SCREEN @@ -929,7 +929,7 @@ main: { // [16] phi from main::@4 to memset [phi:main::@4->memset] // [16] phi memset::c#4 = WHITE|8 [phi:main::@4->memset#0] -- vbuxx=vbuc1 ldx #WHITE|8 - // [16] phi memset::str#3 = (void *)COLS [phi:main::@4->memset#1] -- pvoz1=pvoc1 + // [16] phi memset::str#3 = (void *)COLS [phi:main::@4->memset#1] -- call_phi_near lda #COLS diff --git a/src/test/ref/examples/c64/zpcode/zpcode.log b/src/test/ref/examples/c64/zpcode/zpcode.log index 5de3e625f..ba4f154fd 100644 --- a/src/test/ref/examples/c64/zpcode/zpcode.log +++ b/src/test/ref/examples/c64/zpcode/zpcode.log @@ -382,7 +382,7 @@ main: { __b4: // [11] call loop // Call code in normal memory - // [17] phi from main::@4 to loop [phi:main::@4->loop] + // [17] phi from main::@4 to loop [phi:main::@4->loop] -- call_phi_near loop_from___b4: jsr loop // [12] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -392,7 +392,7 @@ main: { __b5: // [13] call zpLoop // Call code on zeropage - // [0] phi from main::@5 to zpLoop [phi:main::@5->zpLoop] + // [0] phi from main::@5 to zpLoop [phi:main::@5->zpLoop] -- call_phi_near zpLoop_from___b5: jsr zpLoop jmp __b6 @@ -581,14 +581,14 @@ main: { // loop() // [11] call loop // Call code in normal memory - // [17] phi from main::@4 to loop [phi:main::@4->loop] + // [17] phi from main::@4 to loop [phi:main::@4->loop] -- call_phi_near jsr loop // [12] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 // zpLoop() // [13] call zpLoop // Call code on zeropage - // [0] phi from main::@5 to zpLoop [phi:main::@5->zpLoop] + // [0] phi from main::@5 to zpLoop [phi:main::@5->zpLoop] -- call_phi_near jsr zpLoop // main::@6 // *BG_COLOR = 0 diff --git a/src/test/ref/examples/cx16/cx16-rasterbars.log b/src/test/ref/examples/cx16/cx16-rasterbars.log index 18cd7a889..10ffb8032 100644 --- a/src/test/ref/examples/cx16/cx16-rasterbars.log +++ b/src/test/ref/examples/cx16/cx16-rasterbars.log @@ -998,7 +998,7 @@ __start: { // __start::@1 __b1: // [8] call main - // [51] phi from __start::@1 to main [phi:__start::@1->main] + // [51] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -1083,7 +1083,7 @@ irq_line: { __b1: // [27] call memset // Animate the bars - // [58] 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] -- call_phi_near memset_from___b1: jsr memset jmp __b19 @@ -1567,7 +1567,7 @@ __start: { // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [8] call main - // [51] phi from __start::@1 to main [phi:__start::@1->main] + // [51] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [9] return @@ -1652,7 +1652,7 @@ irq_line: { // memset(BARS, 0, sizeof(BARS)) // [27] call memset // Animate the bars - // [58] 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] -- call_phi_near jsr memset // irq_line::@19 // char idx = sin_idx-- diff --git a/src/test/ref/examples/helloworld/helloworld.log b/src/test/ref/examples/helloworld/helloworld.log index 06f0e6a9a..4fa87ecd3 100644 --- a/src/test/ref/examples/helloworld/helloworld.log +++ b/src/test/ref/examples/helloworld/helloworld.log @@ -1423,7 +1423,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -1431,7 +1431,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -1467,7 +1467,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -1508,7 +1508,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -1520,14 +1520,14 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln jmp __breturn } // main main: { // [28] call printf_str - // [50] phi from main to printf_str [phi:main->printf_str] + // [50] phi from main to printf_str [phi:main->printf_str] -- call_phi_near printf_str_from_main: jsr printf_str jmp __breturn @@ -1663,7 +1663,7 @@ cputln: { sta.z conio_cursor_x // [47] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [48] call cscroll + // [48] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -1735,7 +1735,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [72] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [72] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -1754,7 +1754,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [72] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [72] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -1770,7 +1770,7 @@ cscroll: { memset_from___b3: // [82] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [82] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [82] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -1786,7 +1786,7 @@ cscroll: { memset_from___b4: // [82] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [82] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [82] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -2178,12 +2178,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [8] return @@ -2212,7 +2212,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -2251,7 +2251,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -2262,7 +2262,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln rts } @@ -2270,7 +2270,7 @@ cputc: { main: { // printf("hello world!\n") // [28] call printf_str - // [50] phi from main to printf_str [phi:main->printf_str] + // [50] phi from main to printf_str [phi:main->printf_str] -- call_phi_near jsr printf_str // main::@return // } @@ -2407,7 +2407,7 @@ cputln: { // [47] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [48] call cscroll + // [48] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -2474,7 +2474,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [72] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [72] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -2490,7 +2490,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [72] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [72] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -2503,7 +2503,7 @@ cscroll: { // [82] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [82] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [82] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [82] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -2516,7 +2516,7 @@ cscroll: { // [82] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [82] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [82] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [82] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/examples/mega65/32bit-addressing-mega65.log b/src/test/ref/examples/mega65/32bit-addressing-mega65.log index f50f22628..3a5303669 100644 --- a/src/test/ref/examples/mega65/32bit-addressing-mega65.log +++ b/src/test/ref/examples/mega65/32bit-addressing-mega65.log @@ -151,7 +151,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -267,7 +267,7 @@ __start: { sta.z ADDR32+3 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/examples/mega65/banked-music.log b/src/test/ref/examples/mega65/banked-music.log index 483f214bb..1f4c72627 100644 --- a/src/test/ref/examples/mega65/banked-music.log +++ b/src/test/ref/examples/mega65/banked-music.log @@ -1140,7 +1140,7 @@ irq: { inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // [2] call memoryRemapBlock // Remap memory to put music at $4000 - // [40] phi from irq to memoryRemapBlock [phi:irq->memoryRemapBlock] + // [40] phi from irq to memoryRemapBlock [phi:irq->memoryRemapBlock] -- call_phi_near memoryRemapBlock_from_irq: jsr memoryRemapBlock // [3] phi from irq to irq::@4 [phi:irq->irq::@4] @@ -1167,7 +1167,7 @@ irq: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = 0 [phi:irq::@1->memoryRemap#1] -- vbuzz=vbuc1 ldz #0 - // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:irq::@1->memoryRemap#2] -- vwuz1=vbuc1 + // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:irq::@1->memoryRemap#2] -- call_phi_near lda #<0 sta.z memoryRemap.lowerPageOffset lda #>0 @@ -1217,7 +1217,7 @@ main: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = 0 [phi:main->memoryRemap#1] -- vbuzz=vbuc1 ldz #0 - // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main->memoryRemap#2] -- vwuz1=vbuc1 + // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main->memoryRemap#2] -- call_phi_near lda #<0 sta.z memoryRemap.lowerPageOffset lda #>0 @@ -1253,7 +1253,7 @@ main: { // open sideborder ldz #1 stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO - // [20] call memcpy_dma4 + // [20] call memcpy_dma4 -- call_phi_near // Transfer banked code/data to upper memory ($10000) jsr memcpy_dma4 // [21] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -1263,7 +1263,7 @@ main: { __b6: // [22] call memoryRemapBlock // Remap [$4000-$5fff] to point to [$10000-$11fff] - // [40] phi from main::@6 to memoryRemapBlock [phi:main::@6->memoryRemapBlock] + // [40] phi from main::@6 to memoryRemapBlock [phi:main::@6->memoryRemapBlock] -- call_phi_near memoryRemapBlock_from___b6: jsr memoryRemapBlock jmp __b7 @@ -1290,7 +1290,7 @@ main: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = 0 [phi:main::@1->memoryRemap#1] -- vbuzz=vbuc1 ldz #0 - // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main::@1->memoryRemap#2] -- vwuz1=vbuc1 + // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main::@1->memoryRemap#2] -- call_phi_near lda #<0 sta.z memoryRemap.lowerPageOffset lda #>0 @@ -1386,7 +1386,7 @@ memoryRemapBlock: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = memoryRemapBlock::blockBits#0 [phi:memoryRemapBlock->memoryRemap#1] -- vbuzz=vbuc1 ldz #blockBits - // [43] phi memoryRemap::lowerPageOffset#4 = memoryRemapBlock::pageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- vwuz1=vwuc1 + // [43] phi memoryRemap::lowerPageOffset#4 = memoryRemapBlock::pageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- call_phi_near lda #pageOffset @@ -1847,7 +1847,7 @@ irq: { // memoryRemapBlock(0x40, 0x100) // [2] call memoryRemapBlock // Remap memory to put music at $4000 - // [40] phi from irq to memoryRemapBlock [phi:irq->memoryRemapBlock] + // [40] phi from irq to memoryRemapBlock [phi:irq->memoryRemapBlock] -- call_phi_near jsr memoryRemapBlock // [3] phi from irq to irq::@4 [phi:irq->irq::@4] // irq::@4 @@ -1867,7 +1867,7 @@ irq: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = 0 [phi:irq::@1->memoryRemap#1] -- vbuzz=vbuc1 taz - // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:irq::@1->memoryRemap#2] -- vwuz1=vbuc1 + // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:irq::@1->memoryRemap#2] -- call_phi_near sta.z memoryRemap.lowerPageOffset sta.z memoryRemap.lowerPageOffset+1 jsr memoryRemap @@ -1912,7 +1912,7 @@ main: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = 0 [phi:main->memoryRemap#1] -- vbuzz=vbuc1 taz - // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main->memoryRemap#2] -- vwuz1=vbuc1 + // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main->memoryRemap#2] -- call_phi_near sta.z memoryRemap.lowerPageOffset sta.z memoryRemap.lowerPageOffset+1 jsr memoryRemap @@ -1952,7 +1952,7 @@ main: { ldz #1 stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO // memcpy_dma4(1, (void*)0x0000, 0, upperCodeData, MUSIC_END-MUSIC) - // [20] call memcpy_dma4 + // [20] call memcpy_dma4 -- call_phi_near // Transfer banked code/data to upper memory ($10000) jsr memcpy_dma4 // [21] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -1960,7 +1960,7 @@ main: { // memoryRemapBlock(0x40, 0x100) // [22] call memoryRemapBlock // Remap [$4000-$5fff] to point to [$10000-$11fff] - // [40] phi from main::@6 to memoryRemapBlock [phi:main::@6->memoryRemapBlock] + // [40] phi from main::@6 to memoryRemapBlock [phi:main::@6->memoryRemapBlock] -- call_phi_near jsr memoryRemapBlock // main::@7 // asm @@ -1982,7 +1982,7 @@ main: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = 0 [phi:main::@1->memoryRemap#1] -- vbuzz=vbuc1 taz - // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main::@1->memoryRemap#2] -- vwuz1=vbuc1 + // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main::@1->memoryRemap#2] -- call_phi_near sta.z memoryRemap.lowerPageOffset sta.z memoryRemap.lowerPageOffset+1 jsr memoryRemap @@ -2078,7 +2078,7 @@ memoryRemapBlock: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = memoryRemapBlock::blockBits#0 [phi:memoryRemapBlock->memoryRemap#1] -- vbuzz=vbuc1 ldz #blockBits - // [43] phi memoryRemap::lowerPageOffset#4 = memoryRemapBlock::pageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- vwuz1=vwuc1 + // [43] phi memoryRemap::lowerPageOffset#4 = memoryRemapBlock::pageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- call_phi_near lda #pageOffset diff --git a/src/test/ref/examples/mega65/camelot-1536dots.log b/src/test/ref/examples/mega65/camelot-1536dots.log index 516889aad..5966d3c76 100644 --- a/src/test/ref/examples/mega65/camelot-1536dots.log +++ b/src/test/ref/examples/mega65/camelot-1536dots.log @@ -2901,7 +2901,7 @@ __start: { // __start::@1 __b1: // [8] call main - // [10] phi from __start::@1 to main [phi:__start::@1->main] + // [10] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -2927,7 +2927,7 @@ main: { jmp __b6 // main::@6 __b6: - // [13] call memoryRemap + // [13] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap jmp __b10 @@ -2960,7 +2960,7 @@ main: { lda #VICIV_VFAST ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC - // [21] call graphics_mode + // [21] call graphics_mode -- call_phi_near // Initialize graphics jsr graphics_mode jmp __b11 @@ -3053,7 +3053,7 @@ main: { stz SPRITES_XMSB // [43] call init_plot // Initialize plotter - // [110] phi from main::@9 to init_plot [phi:main::@9->init_plot] + // [110] phi from main::@9 to init_plot [phi:main::@9->init_plot] -- call_phi_near init_plot_from___b9: jsr init_plot jmp __b12 @@ -3116,7 +3116,7 @@ main: { // Clear the graphics // [122] phi from main::@5 to memset_dma [phi:main::@5->memset_dma] memset_dma_from___b5: - // [122] phi memset_dma::dest#3 = memset_dma::dest#0 [phi:main::@5->memset_dma#0] -- register_copy + // [122] phi memset_dma::dest#3 = memset_dma::dest#0 [phi:main::@5->memset_dma#0] -- call_phi_near jsr memset_dma jmp __b13 // main::@13 @@ -3124,7 +3124,7 @@ main: { // [56] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_BORDER_COLOR) = PURPLE -- _deref_pbuc1=vbuc2 ldz #PURPLE stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_BORDER_COLOR - // [57] call render_dots + // [57] call render_dots -- call_phi_near // Render some dots jsr render_dots jmp __b14 @@ -3327,7 +3327,7 @@ graphics_mode: { // Clear the graphics // [122] phi from graphics_mode::@8 to memset_dma [phi:graphics_mode::@8->memset_dma] memset_dma_from___b8: - // [122] phi memset_dma::dest#3 = (void *)GRAPHICS1 [phi:graphics_mode::@8->memset_dma#0] -- pvoz1=pvoc1 + // [122] phi memset_dma::dest#3 = (void *)GRAPHICS1 [phi:graphics_mode::@8->memset_dma#0] -- call_phi_near lda #GRAPHICS1 @@ -3341,7 +3341,7 @@ graphics_mode: { // [89] call memset_dma // [122] phi from graphics_mode::@11 to memset_dma [phi:graphics_mode::@11->memset_dma] memset_dma_from___b11: - // [122] phi memset_dma::dest#3 = (void *)GRAPHICS2 [phi:graphics_mode::@11->memset_dma#0] -- pvoz1=pvoc1 + // [122] phi memset_dma::dest#3 = (void *)GRAPHICS2 [phi:graphics_mode::@11->memset_dma#0] -- call_phi_near lda #GRAPHICS2 @@ -3360,7 +3360,7 @@ graphics_mode: { // [92] lpoke::val = 0 -- vbuz1=vbuc1 ldz #0 stz.z lpoke.val - // [93] call lpoke + // [93] call lpoke -- call_phi_near jsr lpoke jmp __b9 // graphics_mode::@9 @@ -3373,7 +3373,7 @@ graphics_mode: { // [96] lpoke::val = WHITE -- vbuz1=vbuc1 ldz #WHITE stz.z lpoke.val - // [97] call lpoke + // [97] call lpoke -- call_phi_near // No extended attributes jsr lpoke jmp __b10 @@ -3840,7 +3840,7 @@ render_dots: { ldy #0 adc (__25),y taz - // [161] call plot + // [161] call plot -- call_phi_near jsr plot jmp __b18 // render_dots::@18 @@ -4681,7 +4681,7 @@ __start: { // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [8] call main - // [10] phi from __start::@1 to main [phi:__start::@1->main] + // [10] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [9] return @@ -4701,7 +4701,7 @@ main: { // [12] phi from main::SEI1 to main::@6 [phi:main::SEI1->main::@6] // main::@6 // memoryRemap(0x00,0,0) - // [13] call memoryRemap + // [13] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // main::@10 @@ -4740,7 +4740,7 @@ main: { ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC // graphics_mode() - // [21] call graphics_mode + // [21] call graphics_mode -- call_phi_near // Initialize graphics jsr graphics_mode // main::@11 @@ -4831,7 +4831,7 @@ main: { // init_plot() // [43] call init_plot // Initialize plotter - // [110] phi from main::@9 to init_plot [phi:main::@9->init_plot] + // [110] phi from main::@9 to init_plot [phi:main::@9->init_plot] -- call_phi_near jsr init_plot // main::@12 // asm @@ -4894,7 +4894,7 @@ main: { // [55] call memset_dma // Clear the graphics // [122] phi from main::@5 to memset_dma [phi:main::@5->memset_dma] - // [122] phi memset_dma::dest#3 = memset_dma::dest#0 [phi:main::@5->memset_dma#0] -- register_copy + // [122] phi memset_dma::dest#3 = memset_dma::dest#0 [phi:main::@5->memset_dma#0] -- call_phi_near jsr memset_dma // main::@13 // VICIV->BORDER_COLOR = PURPLE @@ -4902,7 +4902,7 @@ main: { ldz #PURPLE stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_BORDER_COLOR // render_dots() - // [57] call render_dots + // [57] call render_dots -- call_phi_near // Render some dots jsr render_dots // main::@14 @@ -5114,7 +5114,7 @@ graphics_mode: { // [87] call memset_dma // Clear the graphics // [122] phi from graphics_mode::@8 to memset_dma [phi:graphics_mode::@8->memset_dma] - // [122] phi memset_dma::dest#3 = (void *)GRAPHICS1 [phi:graphics_mode::@8->memset_dma#0] -- pvoz1=pvoc1 + // [122] phi memset_dma::dest#3 = (void *)GRAPHICS1 [phi:graphics_mode::@8->memset_dma#0] -- call_phi_near lda #GRAPHICS1 @@ -5125,7 +5125,7 @@ graphics_mode: { // memset_dma(GRAPHICS2, 0x00, 40*25*8) // [89] call memset_dma // [122] phi from graphics_mode::@11 to memset_dma [phi:graphics_mode::@11->memset_dma] - // [122] phi memset_dma::dest#3 = (void *)GRAPHICS2 [phi:graphics_mode::@11->memset_dma#0] -- pvoz1=pvoc1 + // [122] phi memset_dma::dest#3 = (void *)GRAPHICS2 [phi:graphics_mode::@11->memset_dma#0] -- call_phi_near lda #GRAPHICS2 @@ -5144,7 +5144,7 @@ graphics_mode: { // [92] lpoke::val = 0 -- vbuz1=vbuc1 ldz #0 stz.z lpoke.val - // [93] call lpoke + // [93] call lpoke -- call_phi_near jsr lpoke // graphics_mode::@9 // lpoke(cols++, 0); @@ -5157,7 +5157,7 @@ graphics_mode: { // [96] lpoke::val = WHITE -- vbuz1=vbuc1 ldz #WHITE stz.z lpoke.val - // [97] call lpoke + // [97] call lpoke -- call_phi_near // No extended attributes jsr lpoke // graphics_mode::@10 @@ -5626,7 +5626,7 @@ render_dots: { clc adc (__25),y taz - // [161] call plot + // [161] call plot -- call_phi_near jsr plot // render_dots::@18 // idx_x1 -= 11 diff --git a/src/test/ref/examples/mega65/dma-test.log b/src/test/ref/examples/mega65/dma-test.log index 6b118ed53..1357cda42 100644 --- a/src/test/ref/examples/mega65/dma-test.log +++ b/src/test/ref/examples/mega65/dma-test.log @@ -384,7 +384,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memoryRemap + // [1] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap jmp __b1 @@ -570,7 +570,7 @@ Score: 81 // main main: { // memoryRemap(0,0,0) - // [1] call memoryRemap + // [1] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // main::@1 diff --git a/src/test/ref/examples/mega65/dma-test2.log b/src/test/ref/examples/mega65/dma-test2.log index 620a9ffa2..57c7da4f7 100644 --- a/src/test/ref/examples/mega65/dma-test2.log +++ b/src/test/ref/examples/mega65/dma-test2.log @@ -511,7 +511,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memoryRemap + // [1] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] @@ -519,7 +519,7 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call memcpy_dma + // [3] call memcpy_dma -- call_phi_near // Move screen up using DMA jsr memcpy_dma jmp __breturn @@ -759,13 +759,13 @@ Score: 131 // main main: { // memoryRemap(0,0,0) - // [1] call memoryRemap + // [1] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // memcpy_dma(DEFAULT_SCREEN, DEFAULT_SCREEN+80, 24*80) - // [3] call memcpy_dma + // [3] call memcpy_dma -- call_phi_near // Move screen up using DMA jsr memcpy_dma // main::@return diff --git a/src/test/ref/examples/mega65/dma-test3.log b/src/test/ref/examples/mega65/dma-test3.log index f4fb1aa35..8673a5c03 100644 --- a/src/test/ref/examples/mega65/dma-test3.log +++ b/src/test/ref/examples/mega65/dma-test3.log @@ -547,7 +547,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memoryRemap + // [1] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] @@ -555,7 +555,7 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call memcpy_dma4 + // [3] call memcpy_dma4 -- call_phi_near // Move screen up using DMA jsr memcpy_dma4 jmp __breturn @@ -813,13 +813,13 @@ Score: 143 // main main: { // memoryRemap(0,0,0) - // [1] call memoryRemap + // [1] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // memcpy_dma4(0, DEFAULT_SCREEN, 0, DEFAULT_SCREEN+80, 24*80) - // [3] call memcpy_dma4 + // [3] call memcpy_dma4 -- call_phi_near // Move screen up using DMA jsr memcpy_dma4 // main::@return diff --git a/src/test/ref/examples/mega65/dma-test4.log b/src/test/ref/examples/mega65/dma-test4.log index 4b42f4f75..9499054f2 100644 --- a/src/test/ref/examples/mega65/dma-test4.log +++ b/src/test/ref/examples/mega65/dma-test4.log @@ -665,7 +665,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memoryRemap + // [1] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] @@ -673,7 +673,7 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call memcpy_dma256 + // [3] call memcpy_dma256 -- call_phi_near // Move screen up using DMA jsr memcpy_dma256 jmp __breturn @@ -957,13 +957,13 @@ Score: 155 // main main: { // memoryRemap(0,0,0) - // [1] call memoryRemap + // [1] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // memcpy_dma256(0,0, DEFAULT_SCREEN, 0,0, DEFAULT_SCREEN+80, 24*80) - // [3] call memcpy_dma256 + // [3] call memcpy_dma256 -- call_phi_near // Move screen up using DMA jsr memcpy_dma256 // main::@return diff --git a/src/test/ref/examples/mega65/dma-test5.log b/src/test/ref/examples/mega65/dma-test5.log index d58be21be..b77b5b6cf 100644 --- a/src/test/ref/examples/mega65/dma-test5.log +++ b/src/test/ref/examples/mega65/dma-test5.log @@ -507,7 +507,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memoryRemap + // [1] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] @@ -515,7 +515,7 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call memset_dma + // [3] call memset_dma -- call_phi_near // Fill screen up using DMA jsr memset_dma jmp __breturn @@ -755,13 +755,13 @@ Score: 131 // main main: { // memoryRemap(0,0,0) - // [1] call memoryRemap + // [1] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // memset_dma(DEFAULT_SCREEN, '*', 80*10) - // [3] call memset_dma + // [3] call memset_dma -- call_phi_near // Fill screen up using DMA jsr memset_dma // main::@return diff --git a/src/test/ref/examples/mega65/dma-test6.log b/src/test/ref/examples/mega65/dma-test6.log index 3145ecb9f..632c2b1ea 100644 --- a/src/test/ref/examples/mega65/dma-test6.log +++ b/src/test/ref/examples/mega65/dma-test6.log @@ -611,7 +611,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memoryRemap + // [1] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] @@ -619,7 +619,7 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call memset_dma256 + // [3] call memset_dma256 -- call_phi_near // Fill screen up using 256MB DMA jsr memset_dma256 jmp __breturn @@ -884,13 +884,13 @@ Score: 143 // main main: { // memoryRemap(0,0,0) - // [1] call memoryRemap + // [1] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // memset_dma256(0, 0, DEFAULT_SCREEN, '*', 80*10) - // [3] call memset_dma256 + // [3] call memset_dma256 -- call_phi_near // Fill screen up using 256MB DMA jsr memset_dma256 // main::@return diff --git a/src/test/ref/examples/mega65/dypp65.log b/src/test/ref/examples/mega65/dypp65.log index 164eb0c8e..178673d08 100644 --- a/src/test/ref/examples/mega65/dypp65.log +++ b/src/test/ref/examples/mega65/dypp65.log @@ -1460,7 +1460,7 @@ main: { jmp __b11 // main::@11 __b11: - // [3] call memoryRemap + // [3] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap jmp __b12 @@ -1563,7 +1563,7 @@ main: { sta.z memset_dma.dest+1 // [60] phi memset_dma::fill#2 = 0 [phi:main::@12->memset_dma#1] -- vbuzz=vbuc1 ldz #0 - // [60] phi memset_dma::num#2 = (unsigned int)$2d*$19*2 [phi:main::@12->memset_dma#2] -- vwuz1=vwuc1 + // [60] phi memset_dma::num#2 = (unsigned int)$2d*$19*2 [phi:main::@12->memset_dma#2] -- call_phi_near lda #<$2d*$19*2 sta.z memset_dma.num lda #>$2d*$19*2 @@ -1574,7 +1574,7 @@ main: { jmp __b13 // main::@13 __b13: - // [30] call memset_dma256 + // [30] call memset_dma256 -- call_phi_near // Fill the colours with WHITE - directly into $ff80000 jsr memset_dma256 // [31] phi from main::@13 to main::@14 [phi:main::@13->main::@14] @@ -1593,7 +1593,7 @@ main: { sta.z memset_dma.dest+1 // [60] phi memset_dma::fill#2 = $55 [phi:main::@14->memset_dma#1] -- vbuzz=vbuc1 ldz #$55 - // [60] phi memset_dma::num#2 = (unsigned int)$2d*$20*8 [phi:main::@14->memset_dma#2] -- vwuz1=vwuc1 + // [60] phi memset_dma::num#2 = (unsigned int)$2d*$20*8 [phi:main::@14->memset_dma#2] -- call_phi_near lda #<$2d*$20*8 sta.z memset_dma.num lda #>$2d*$20*8 @@ -2236,7 +2236,7 @@ main: { // [2] phi from main::SEI1 to main::@11 [phi:main::SEI1->main::@11] // main::@11 // memoryRemap(0,0,0) - // [3] call memoryRemap + // [3] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // main::@12 @@ -2354,7 +2354,7 @@ main: { lda #>SCREEN sta.z memset_dma.dest+1 // [60] phi memset_dma::fill#2 = 0 [phi:main::@12->memset_dma#1] -- vbuzz=vbuc1 - // [60] phi memset_dma::num#2 = (unsigned int)$2d*$19*2 [phi:main::@12->memset_dma#2] -- vwuz1=vwuc1 + // [60] phi memset_dma::num#2 = (unsigned int)$2d*$19*2 [phi:main::@12->memset_dma#2] -- call_phi_near lda #<$2d*$19*2 sta.z memset_dma.num lda #>$2d*$19*2 @@ -2363,7 +2363,7 @@ main: { // [29] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 // memset_dma256(0xff,0x08,(void*)0x0000, WHITE, 45*25*2) - // [30] call memset_dma256 + // [30] call memset_dma256 -- call_phi_near // Fill the colours with WHITE - directly into $ff80000 jsr memset_dma256 // [31] phi from main::@13 to main::@14 [phi:main::@13->main::@14] @@ -2379,7 +2379,7 @@ main: { sta.z memset_dma.dest+1 // [60] phi memset_dma::fill#2 = $55 [phi:main::@14->memset_dma#1] -- vbuzz=vbuc1 ldz #$55 - // [60] phi memset_dma::num#2 = (unsigned int)$2d*$20*8 [phi:main::@14->memset_dma#2] -- vwuz1=vwuc1 + // [60] phi memset_dma::num#2 = (unsigned int)$2d*$20*8 [phi:main::@14->memset_dma#2] -- call_phi_near lda #<$2d*$20*8 sta.z memset_dma.num lda #>$2d*$20*8 diff --git a/src/test/ref/examples/mega65/helloworld-mega65.log b/src/test/ref/examples/mega65/helloworld-mega65.log index f4fcca264..3d741a72b 100644 --- a/src/test/ref/examples/mega65/helloworld-mega65.log +++ b/src/test/ref/examples/mega65/helloworld-mega65.log @@ -1699,7 +1699,7 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // [5] call conio_mega65_init - // [9] phi from __start::__init1 to conio_mega65_init [phi:__start::__init1->conio_mega65_init] + // [9] phi from __start::__init1 to conio_mega65_init [phi:__start::__init1->conio_mega65_init] -- call_phi_near conio_mega65_init_from___init1: jsr conio_mega65_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] @@ -1708,7 +1708,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [34] phi from __start::@1 to main [phi:__start::@1->main] + // [34] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -1732,7 +1732,7 @@ conio_mega65_init: { jmp __b2 // conio_mega65_init::@2 __b2: - // [12] call memoryRemap + // [12] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap jmp __b3 @@ -1773,7 +1773,7 @@ conio_mega65_init: { // conio_mega65_init::@1 __b1: // [20] gotoxy::y#2 = conio_mega65_init::line#2 - // [21] call gotoxy + // [21] call gotoxy -- call_phi_near jsr gotoxy jmp __breturn // conio_mega65_init::@return @@ -1814,7 +1814,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [30] call cputln + // [30] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -1826,14 +1826,14 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [33] call cputln + // [33] call cputln -- call_phi_near jsr cputln jmp __breturn } // main main: { // [35] call printf_str - // [63] phi from main to printf_str [phi:main->printf_str] + // [63] phi from main to printf_str [phi:main->printf_str] -- call_phi_near printf_str_from_main: jsr printf_str jmp __breturn @@ -2026,7 +2026,7 @@ cputln: { stz.z conio_cursor_x // [60] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [61] call cscroll + // [61] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -2095,7 +2095,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [85] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$50 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [85] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$50 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$50 @@ -2114,7 +2114,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [85] phi memcpy::source#2 = (void *)COLORRAM+$50 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [85] phi memcpy::source#2 = (void *)COLORRAM+$50 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$50 @@ -2130,7 +2130,7 @@ cscroll: { memset_from___b3: // [95] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuzz=vbuc1 ldz #' ' - // [95] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$50-$50 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [95] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$50-$50 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$50-$50 @@ -2146,7 +2146,7 @@ cscroll: { memset_from___b4: // [95] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuzz=vbuc1 ldz #LIGHT_BLUE - // [95] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$50-$50 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [95] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$50-$50 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$50-$50 @@ -2569,12 +2569,12 @@ __start: { sta.z conio_line_color+1 // #pragma constructor_for(conio_mega65_init, cputc, clrscr, cscroll) // [5] call conio_mega65_init - // [9] phi from __start::__init1 to conio_mega65_init [phi:__start::__init1->conio_mega65_init] + // [9] phi from __start::__init1 to conio_mega65_init [phi:__start::__init1->conio_mega65_init] -- call_phi_near jsr conio_mega65_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [34] phi from __start::@1 to main [phi:__start::@1->main] + // [34] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [8] return @@ -2592,7 +2592,7 @@ conio_mega65_init: { // [11] phi from conio_mega65_init::SEI1 to conio_mega65_init::@2 [phi:conio_mega65_init::SEI1->conio_mega65_init::@2] // conio_mega65_init::@2 // memoryRemap(0,0,0) - // [12] call memoryRemap + // [12] call memoryRemap -- call_phi_near // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // conio_mega65_init::@3 @@ -2630,7 +2630,7 @@ conio_mega65_init: { __b1: // gotoxy(0, line) // [20] gotoxy::y#2 = conio_mega65_init::line#2 - // [21] call gotoxy + // [21] call gotoxy -- call_phi_near jsr gotoxy // conio_mega65_init::@return // } @@ -2669,7 +2669,7 @@ cputc: { // [29] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [30] call cputln + // [30] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -2680,7 +2680,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [33] call cputln + // [33] call cputln -- call_phi_near jsr cputln rts } @@ -2688,7 +2688,7 @@ cputc: { main: { // printf("hello world!") // [35] call printf_str - // [63] phi from main to printf_str [phi:main->printf_str] + // [63] phi from main to printf_str [phi:main->printf_str] -- call_phi_near jsr printf_str // main::@return // } @@ -2882,7 +2882,7 @@ cputln: { // [60] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [61] call cscroll + // [61] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -2946,7 +2946,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [85] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$50 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [85] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$50 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$50 @@ -2962,7 +2962,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [85] phi memcpy::source#2 = (void *)COLORRAM+$50 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [85] phi memcpy::source#2 = (void *)COLORRAM+$50 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$50 @@ -2975,7 +2975,7 @@ cscroll: { // [95] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [95] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuzz=vbuc1 ldz #' ' - // [95] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$50-$50 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [95] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$50-$50 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$50-$50 @@ -2988,7 +2988,7 @@ cscroll: { // [95] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [95] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuzz=vbuc1 ldz #LIGHT_BLUE - // [95] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$50-$50 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [95] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$50-$50 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$50-$50 diff --git a/src/test/ref/examples/mega65/memorymap-test.log b/src/test/ref/examples/mega65/memorymap-test.log index 34e9e57ef..e9f734cad 100644 --- a/src/test/ref/examples/mega65/memorymap-test.log +++ b/src/test/ref/examples/mega65/memorymap-test.log @@ -1023,7 +1023,7 @@ main: { // Remap [$4000-$5fff] to point to [$10000-$11fff] // [24] phi from main to memoryRemapBlock [phi:main->memoryRemapBlock] memoryRemapBlock_from_main: - // [24] phi memoryRemapBlock::blockPage#2 = $40 [phi:main->memoryRemapBlock#0] -- vbuxx=vbuc1 + // [24] phi memoryRemapBlock::blockPage#2 = $40 [phi:main->memoryRemapBlock#0] -- call_phi_near ldx #$40 jsr memoryRemapBlock jmp __b7 @@ -1040,7 +1040,7 @@ main: { // Remap [$8000-$9fff] to point to [$10000-$11fff] // [24] phi from main::@7 to memoryRemapBlock [phi:main::@7->memoryRemapBlock] memoryRemapBlock_from___b7: - // [24] phi memoryRemapBlock::blockPage#2 = $80 [phi:main::@7->memoryRemapBlock#0] -- vbuxx=vbuc1 + // [24] phi memoryRemapBlock::blockPage#2 = $80 [phi:main::@7->memoryRemapBlock#0] -- call_phi_near ldx #$80 jsr memoryRemapBlock jmp __b8 @@ -1064,7 +1064,7 @@ main: { sta.z memoryRemap.upperPageOffset+1 // [33] phi memoryRemap::remapBlocks#2 = MEMORYBLOCK_4000|MEMORYBLOCK_8000 [phi:main::@8->memoryRemap#1] -- vbuzz=vbuc1 ldz #MEMORYBLOCK_4000|MEMORYBLOCK_8000 - // [33] phi memoryRemap::lowerPageOffset#2 = $c0 [phi:main::@8->memoryRemap#2] -- vwuz1=vbuc1 + // [33] phi memoryRemap::lowerPageOffset#2 = $c0 [phi:main::@8->memoryRemap#2] -- call_phi_near lda #<$c0 sta.z memoryRemap.lowerPageOffset lda #>$c0 @@ -1102,7 +1102,7 @@ main: { memoryRemap256M_from___b3: // [46] phi memoryRemap256M::remapBlocks#2 = MEMORYBLOCK_4000 [phi:main::@3->memoryRemap256M#0] -- vbuxx=vbuc1 ldx #MEMORYBLOCK_4000 - // [46] phi memoryRemap256M::lowerPageOffset#2 = $ff800-$40 [phi:main::@3->memoryRemap256M#1] -- vduz1=vduc1 + // [46] phi memoryRemap256M::lowerPageOffset#2 = $ff800-$40 [phi:main::@3->memoryRemap256M#1] -- call_phi_near lda #<$ff800-$40 sta.z memoryRemap256M.lowerPageOffset lda #>$ff800-$40 @@ -1134,7 +1134,7 @@ main: { memoryRemap256M_from___b6: // [46] phi memoryRemap256M::remapBlocks#2 = 0 [phi:main::@6->memoryRemap256M#0] -- vbuxx=vbuc1 ldx #0 - // [46] phi memoryRemap256M::lowerPageOffset#2 = 0 [phi:main::@6->memoryRemap256M#1] -- vduz1=vbuc1 + // [46] phi memoryRemap256M::lowerPageOffset#2 = 0 [phi:main::@6->memoryRemap256M#1] -- call_phi_near lda #0 sta.z memoryRemap256M.lowerPageOffset lda #0 @@ -1223,7 +1223,7 @@ memoryRemapBlock: { memoryRemap_from_memoryRemapBlock: // [33] phi memoryRemap::upperPageOffset#2 = memoryRemap::upperPageOffset#0 [phi:memoryRemapBlock->memoryRemap#0] -- register_copy // [33] phi memoryRemap::remapBlocks#2 = memoryRemap::remapBlocks#0 [phi:memoryRemapBlock->memoryRemap#1] -- register_copy - // [33] phi memoryRemap::lowerPageOffset#2 = memoryRemap::lowerPageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- register_copy + // [33] phi memoryRemap::lowerPageOffset#2 = memoryRemap::lowerPageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- call_phi_near jsr memoryRemap jmp __breturn // memoryRemapBlock::@return @@ -1611,7 +1611,7 @@ main: { // [1] call memoryRemapBlock // Remap [$4000-$5fff] to point to [$10000-$11fff] // [24] phi from main to memoryRemapBlock [phi:main->memoryRemapBlock] - // [24] phi memoryRemapBlock::blockPage#2 = $40 [phi:main->memoryRemapBlock#0] -- vbuxx=vbuc1 + // [24] phi memoryRemapBlock::blockPage#2 = $40 [phi:main->memoryRemapBlock#0] -- call_phi_near ldx #$40 jsr memoryRemapBlock // main::@7 @@ -1628,7 +1628,7 @@ main: { // [4] call memoryRemapBlock // Remap [$8000-$9fff] to point to [$10000-$11fff] // [24] phi from main::@7 to memoryRemapBlock [phi:main::@7->memoryRemapBlock] - // [24] phi memoryRemapBlock::blockPage#2 = $80 [phi:main::@7->memoryRemapBlock#0] -- vbuxx=vbuc1 + // [24] phi memoryRemapBlock::blockPage#2 = $80 [phi:main::@7->memoryRemapBlock#0] -- call_phi_near ldx #$80 jsr memoryRemapBlock // main::@8 @@ -1652,7 +1652,7 @@ main: { sta.z memoryRemap.upperPageOffset+1 // [33] phi memoryRemap::remapBlocks#2 = MEMORYBLOCK_4000|MEMORYBLOCK_8000 [phi:main::@8->memoryRemap#1] -- vbuzz=vbuc1 ldz #MEMORYBLOCK_4000|MEMORYBLOCK_8000 - // [33] phi memoryRemap::lowerPageOffset#2 = $c0 [phi:main::@8->memoryRemap#2] -- vwuz1=vbuc1 + // [33] phi memoryRemap::lowerPageOffset#2 = $c0 [phi:main::@8->memoryRemap#2] -- call_phi_near lda #<$c0 sta.z memoryRemap.lowerPageOffset lda #>$c0 @@ -1686,7 +1686,7 @@ main: { // [46] phi from main::@3 to memoryRemap256M [phi:main::@3->memoryRemap256M] // [46] phi memoryRemap256M::remapBlocks#2 = MEMORYBLOCK_4000 [phi:main::@3->memoryRemap256M#0] -- vbuxx=vbuc1 ldx #MEMORYBLOCK_4000 - // [46] phi memoryRemap256M::lowerPageOffset#2 = $ff800-$40 [phi:main::@3->memoryRemap256M#1] -- vduz1=vduc1 + // [46] phi memoryRemap256M::lowerPageOffset#2 = $ff800-$40 [phi:main::@3->memoryRemap256M#1] -- call_phi_near lda #<$ff800-$40 sta.z memoryRemap256M.lowerPageOffset lda #>$ff800-$40 @@ -1714,7 +1714,7 @@ main: { // [46] phi from main::@6 to memoryRemap256M [phi:main::@6->memoryRemap256M] // [46] phi memoryRemap256M::remapBlocks#2 = 0 [phi:main::@6->memoryRemap256M#0] -- vbuxx=vbuc1 ldx #0 - // [46] phi memoryRemap256M::lowerPageOffset#2 = 0 [phi:main::@6->memoryRemap256M#1] -- vduz1=vbuc1 + // [46] phi memoryRemap256M::lowerPageOffset#2 = 0 [phi:main::@6->memoryRemap256M#1] -- call_phi_near txa sta.z memoryRemap256M.lowerPageOffset sta.z memoryRemap256M.lowerPageOffset+1 @@ -1807,7 +1807,7 @@ memoryRemapBlock: { // [33] phi from memoryRemapBlock to memoryRemap [phi:memoryRemapBlock->memoryRemap] // [33] phi memoryRemap::upperPageOffset#2 = memoryRemap::upperPageOffset#0 [phi:memoryRemapBlock->memoryRemap#0] -- register_copy // [33] phi memoryRemap::remapBlocks#2 = memoryRemap::remapBlocks#0 [phi:memoryRemapBlock->memoryRemap#1] -- register_copy - // [33] phi memoryRemap::lowerPageOffset#2 = memoryRemap::lowerPageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- register_copy + // [33] phi memoryRemap::lowerPageOffset#2 = memoryRemap::lowerPageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- call_phi_near jsr memoryRemap // memoryRemapBlock::@return // } diff --git a/src/test/ref/examples/mega65/raster65.log b/src/test/ref/examples/mega65/raster65.log index a3be84bda..6c6c84084 100644 --- a/src/test/ref/examples/mega65/raster65.log +++ b/src/test/ref/examples/mega65/raster65.log @@ -2201,7 +2201,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [7] call main + // [7] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -2747,7 +2747,7 @@ main: { __b1: // [118] call memset // Clear screen - // [144] phi from main::@1 to memset [phi:main::@1->memset] + // [144] phi from main::@1 to memset [phi:main::@1->memset] -- call_phi_near memset_from___b1: jsr memset // [119] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -3403,7 +3403,7 @@ __start: { stz.z greet_idx // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [7] call main + // [7] call main -- call_phi_near jsr main // __start::@return // [8] return @@ -3965,7 +3965,7 @@ main: { // memset(SCREEN, ' ', 40*25) // [118] call memset // Clear screen - // [144] phi from main::@1 to memset [phi:main::@1->memset] + // [144] phi from main::@1 to memset [phi:main::@1->memset] -- call_phi_near jsr memset // [119] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // [119] phi main::i1#2 = 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1 diff --git a/src/test/ref/examples/nes/nes-dxycp.log b/src/test/ref/examples/nes/nes-dxycp.log index fdccbdbe3..7640dad65 100644 --- a/src/test/ref/examples/nes/nes-dxycp.log +++ b/src/test/ref/examples/nes/nes-dxycp.log @@ -2194,7 +2194,7 @@ __start: { // __start::@1 __b1: // [5] call main - // [45] phi from __start::@1 to main [phi:__start::@1->main] + // [45] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -2242,7 +2242,7 @@ vblank: { jmp __b14 // vblank::@14 __b14: - // [12] call readJoy1 + // [12] call readJoy1 -- call_phi_near // Read controller 1 jsr readJoy1 // [13] readJoy1::return#2 = readJoy1::joy#2 @@ -2538,7 +2538,7 @@ main: { __b4: // [71] call ppuDataTransfer // Transfer the palette - // [96] phi from main::@4 to ppuDataTransfer [phi:main::@4->ppuDataTransfer] + // [96] phi from main::@4 to ppuDataTransfer [phi:main::@4->ppuDataTransfer] -- call_phi_near ppuDataTransfer_from___b4: jsr ppuDataTransfer // [72] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -2557,7 +2557,7 @@ main: { sta.z ppuDataFill.size lda #>$20*$1e sta.z ppuDataFill.size+1 - // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_NAME_TABLE_0 [phi:main::@5->ppuDataFill#2] -- pvoz1=pvoc1 + // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_NAME_TABLE_0 [phi:main::@5->ppuDataFill#2] -- call_phi_near lda #PPU_NAME_TABLE_0 @@ -2578,7 +2578,7 @@ main: { sta.z ppuDataFill.size lda #>$40 sta.z ppuDataFill.size+1 - // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_ATTRIBUTE_TABLE_0 [phi:main::@6->ppuDataFill#2] -- pvoz1=pvoc1 + // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_ATTRIBUTE_TABLE_0 [phi:main::@6->ppuDataFill#2] -- call_phi_near lda #PPU_ATTRIBUTE_TABLE_0 @@ -3276,7 +3276,7 @@ __start: { // [4] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [5] call main - // [45] phi from __start::@1 to main [phi:__start::@1->main] + // [45] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [6] return @@ -3318,7 +3318,7 @@ vblank: { // [11] phi from vblank::ppuSpriteBufferDmaTransfer1 to vblank::@14 [phi:vblank::ppuSpriteBufferDmaTransfer1->vblank::@14] // vblank::@14 // char joy = readJoy1() - // [12] call readJoy1 + // [12] call readJoy1 -- call_phi_near // Read controller 1 jsr readJoy1 // [13] readJoy1::return#2 = readJoy1::joy#2 @@ -3596,7 +3596,7 @@ main: { // ppuDataTransfer(PPU_PALETTE, PALETTE, sizeof(PALETTE)) // [71] call ppuDataTransfer // Transfer the palette - // [96] phi from main::@4 to ppuDataTransfer [phi:main::@4->ppuDataTransfer] + // [96] phi from main::@4 to ppuDataTransfer [phi:main::@4->ppuDataTransfer] -- call_phi_near jsr ppuDataTransfer // [72] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 @@ -3611,7 +3611,7 @@ main: { sta.z ppuDataFill.size lda #>$20*$1e sta.z ppuDataFill.size+1 - // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_NAME_TABLE_0 [phi:main::@5->ppuDataFill#2] -- pvoz1=pvoc1 + // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_NAME_TABLE_0 [phi:main::@5->ppuDataFill#2] -- call_phi_near lda #PPU_NAME_TABLE_0 @@ -3629,7 +3629,7 @@ main: { sta.z ppuDataFill.size lda #>$40 sta.z ppuDataFill.size+1 - // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_ATTRIBUTE_TABLE_0 [phi:main::@6->ppuDataFill#2] -- pvoz1=pvoc1 + // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_ATTRIBUTE_TABLE_0 [phi:main::@6->ppuDataFill#2] -- call_phi_near lda #PPU_ATTRIBUTE_TABLE_0 diff --git a/src/test/ref/examples/plus4/plus4-randomwalk.log b/src/test/ref/examples/plus4/plus4-randomwalk.log index 91996d03d..9b13addd0 100644 --- a/src/test/ref/examples/plus4/plus4-randomwalk.log +++ b/src/test/ref/examples/plus4/plus4-randomwalk.log @@ -1195,7 +1195,7 @@ main: { memset_from_main: // [44] phi memset::c#5 = $a0 [phi:main->memset#0] -- vbuxx=vbuc1 ldx #$a0 - // [44] phi memset::str#4 = (void *)DEFAULT_SCREEN [phi:main->memset#1] -- pvoz1=pvoc1 + // [44] phi memset::str#4 = (void *)DEFAULT_SCREEN [phi:main->memset#1] -- call_phi_near lda #DEFAULT_SCREEN @@ -1211,7 +1211,7 @@ main: { memset_from___b10: // [44] phi memset::c#5 = 0 [phi:main::@10->memset#0] -- vbuxx=vbuc1 ldx #0 - // [44] phi memset::str#4 = (void *)DEFAULT_COLORRAM [phi:main::@10->memset#1] -- pvoz1=pvoc1 + // [44] phi memset::str#4 = (void *)DEFAULT_COLORRAM [phi:main::@10->memset#1] -- call_phi_near lda #DEFAULT_COLORRAM @@ -1227,7 +1227,7 @@ main: { memset_from___b11: // [44] phi memset::c#5 = 0 [phi:main::@11->memset#0] -- vbuxx=vbuc1 ldx #0 - // [44] phi memset::str#4 = (void *)VISITS [phi:main::@11->memset#1] -- pvoz1=pvoc1 + // [44] phi memset::str#4 = (void *)VISITS [phi:main::@11->memset#1] -- call_phi_near lda #VISITS @@ -1332,7 +1332,7 @@ main: { lda FADE,y ldy #0 sta (__8),y - // [20] call rand + // [20] call rand -- call_phi_near jsr rand // [21] rand::return#2 = rand::return#0 jmp __b13 @@ -1814,7 +1814,7 @@ main: { // [44] phi from main to memset [phi:main->memset] // [44] phi memset::c#5 = $a0 [phi:main->memset#0] -- vbuxx=vbuc1 ldx #$a0 - // [44] phi memset::str#4 = (void *)DEFAULT_SCREEN [phi:main->memset#1] -- pvoz1=pvoc1 + // [44] phi memset::str#4 = (void *)DEFAULT_SCREEN [phi:main->memset#1] -- call_phi_near lda #DEFAULT_SCREEN @@ -1827,7 +1827,7 @@ main: { // [44] phi from main::@10 to memset [phi:main::@10->memset] // [44] phi memset::c#5 = 0 [phi:main::@10->memset#0] -- vbuxx=vbuc1 ldx #0 - // [44] phi memset::str#4 = (void *)DEFAULT_COLORRAM [phi:main::@10->memset#1] -- pvoz1=pvoc1 + // [44] phi memset::str#4 = (void *)DEFAULT_COLORRAM [phi:main::@10->memset#1] -- call_phi_near lda #DEFAULT_COLORRAM @@ -1840,7 +1840,7 @@ main: { // [44] phi from main::@11 to memset [phi:main::@11->memset] // [44] phi memset::c#5 = 0 [phi:main::@11->memset#0] -- vbuxx=vbuc1 ldx #0 - // [44] phi memset::str#4 = (void *)VISITS [phi:main::@11->memset#1] -- pvoz1=pvoc1 + // [44] phi memset::str#4 = (void *)VISITS [phi:main::@11->memset#1] -- call_phi_near lda #VISITS @@ -1946,7 +1946,7 @@ main: { ldy #0 sta (__8),y // rand() - // [20] call rand + // [20] call rand -- call_phi_near jsr rand // [21] rand::return#2 = rand::return#0 // main::@13 diff --git a/src/test/ref/examples/rom/rom.log b/src/test/ref/examples/rom/rom.log index 42362a5cd..6fc4558a9 100644 --- a/src/test/ref/examples/rom/rom.log +++ b/src/test/ref/examples/rom/rom.log @@ -567,7 +567,7 @@ main: { call2_from_main: // [34] phi call2::param2#2 = 2 [phi:main->call2#0] -- vbuaa=vbuc1 lda #2 - // [34] phi call2::param1#2 = 1 [phi:main->call2#1] -- vbuxx=vbuc1 + // [34] phi call2::param1#2 = 1 [phi:main->call2#1] -- call_phi_near ldx #1 jsr call2 // [13] call2::return = call2::return @@ -583,7 +583,7 @@ main: { call2_from___b1: // [34] phi call2::param2#2 = 4 [phi:main::@1->call2#0] -- vbuaa=vbuc1 lda #4 - // [34] phi call2::param1#2 = 3 [phi:main::@1->call2#1] -- vbuxx=vbuc1 + // [34] phi call2::param1#2 = 3 [phi:main::@1->call2#1] -- call_phi_near ldx #3 jsr call2 // [17] call2::return = call2::return @@ -599,7 +599,7 @@ main: { call3_from___b2: // [38] phi call3::param2#2 = 2 [phi:main::@2->call3#0] -- vbuaa=vbuc1 lda #2 - // [38] phi call3::param1#2 = 1 [phi:main::@2->call3#1] -- vbuxx=vbuc1 + // [38] phi call3::param1#2 = 1 [phi:main::@2->call3#1] -- call_phi_near ldx #1 jsr call3 // [21] call3::return#2 = call3::return#0 @@ -614,7 +614,7 @@ main: { call3_from___b3: // [38] phi call3::param2#2 = 4 [phi:main::@3->call3#0] -- vbuaa=vbuc1 lda #4 - // [38] phi call3::param1#2 = 3 [phi:main::@3->call3#1] -- vbuxx=vbuc1 + // [38] phi call3::param1#2 = 3 [phi:main::@3->call3#1] -- call_phi_near ldx #3 jsr call3 // [25] call3::return#3 = call3::return#0 @@ -828,7 +828,7 @@ main: { // [34] phi from main to call2 [phi:main->call2] // [34] phi call2::param2#2 = 2 [phi:main->call2#0] -- vbuaa=vbuc1 lda #2 - // [34] phi call2::param1#2 = 1 [phi:main->call2#1] -- vbuxx=vbuc1 + // [34] phi call2::param1#2 = 1 [phi:main->call2#1] -- call_phi_near ldx #1 jsr call2 // call2(1,2) @@ -844,7 +844,7 @@ main: { // [34] phi from main::@1 to call2 [phi:main::@1->call2] // [34] phi call2::param2#2 = 4 [phi:main::@1->call2#0] -- vbuaa=vbuc1 lda #4 - // [34] phi call2::param1#2 = 3 [phi:main::@1->call2#1] -- vbuxx=vbuc1 + // [34] phi call2::param1#2 = 3 [phi:main::@1->call2#1] -- call_phi_near ldx #3 jsr call2 // call2(3,4) @@ -860,7 +860,7 @@ main: { // [38] phi from main::@2 to call3 [phi:main::@2->call3] // [38] phi call3::param2#2 = 2 [phi:main::@2->call3#0] -- vbuaa=vbuc1 lda #2 - // [38] phi call3::param1#2 = 1 [phi:main::@2->call3#1] -- vbuxx=vbuc1 + // [38] phi call3::param1#2 = 1 [phi:main::@2->call3#1] -- call_phi_near ldx #1 jsr call3 // call3(1,2) @@ -875,7 +875,7 @@ main: { // [38] phi from main::@3 to call3 [phi:main::@3->call3] // [38] phi call3::param2#2 = 4 [phi:main::@3->call3#0] -- vbuaa=vbuc1 lda #4 - // [38] phi call3::param1#2 = 3 [phi:main::@3->call3#1] -- vbuxx=vbuc1 + // [38] phi call3::param1#2 = 3 [phi:main::@3->call3#1] -- call_phi_near ldx #3 jsr call3 // call3(3,4) diff --git a/src/test/ref/flipper-rex2.log b/src/test/ref/flipper-rex2.log index 317adebed..d38c416eb 100644 --- a/src/test/ref/flipper-rex2.log +++ b/src/test/ref/flipper-rex2.log @@ -718,7 +718,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call prepare - // [11] phi from main to prepare [phi:main->prepare] + // [11] phi from main to prepare [phi:main->prepare] -- call_phi_near prepare_from_main: jsr prepare // [2] phi from main main::@5 to main::@1 [phi:main/main::@5->main::@1] @@ -759,7 +759,7 @@ main: { // main::@4 __b4: // [8] call flip - // [17] phi from main::@4 to flip [phi:main::@4->flip] + // [17] phi from main::@4 to flip [phi:main::@4->flip] -- call_phi_near flip_from___b4: jsr flip // [9] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -768,7 +768,7 @@ main: { // main::@5 __b5: // [10] call plot - // [33] phi from main::@5 to plot [phi:main::@5->plot] + // [33] phi from main::@5 to plot [phi:main::@5->plot] -- call_phi_near plot_from___b5: jsr plot jmp __b1_from___b5 @@ -1111,7 +1111,7 @@ Score: 83294 main: { // prepare() // [1] call prepare - // [11] phi from main to prepare [phi:main->prepare] + // [11] phi from main to prepare [phi:main->prepare] -- call_phi_near jsr prepare // [2] phi from main main::@5 to main::@1 [phi:main/main::@5->main::@1] __b3: @@ -1144,13 +1144,13 @@ main: { // main::@4 // flip() // [8] call flip - // [17] phi from main::@4 to flip [phi:main::@4->flip] + // [17] phi from main::@4 to flip [phi:main::@4->flip] -- call_phi_near jsr flip // [9] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 // plot() // [10] call plot - // [33] phi from main::@5 to plot [phi:main::@5->plot] + // [33] phi from main::@5 to plot [phi:main::@5->plot] -- call_phi_near jsr plot jmp __b3 } diff --git a/src/test/ref/font-hex-show.log b/src/test/ref/font-hex-show.log index d0df97974..8ee442525 100644 --- a/src/test/ref/font-hex-show.log +++ b/src/test/ref/font-hex-show.log @@ -696,7 +696,7 @@ main: { lda #toD0181_return sta D018 // [3] call init_font_hex - // [9] phi from main::@2 to init_font_hex [phi:main::@2->init_font_hex] + // [9] phi from main::@2 to init_font_hex [phi:main::@2->init_font_hex] -- call_phi_near init_font_hex_from___b2: jsr init_font_hex // [4] phi from main::@2 to main::@1 [phi:main::@2->main::@1] @@ -1026,7 +1026,7 @@ main: { sta D018 // init_font_hex(CHARSET) // [3] call init_font_hex - // [9] phi from main::@2 to init_font_hex [phi:main::@2->init_font_hex] + // [9] phi from main::@2 to init_font_hex [phi:main::@2->init_font_hex] -- call_phi_near jsr init_font_hex // [4] phi from main::@2 to main::@1 [phi:main::@2->main::@1] // [4] phi main::c#2 = 0 [phi:main::@2->main::@1#0] -- vbuxx=vbuc1 diff --git a/src/test/ref/fragment-synth.log b/src/test/ref/fragment-synth.log index 408bca681..0c290d92f 100644 --- a/src/test/ref/fragment-synth.log +++ b/src/test/ref/fragment-synth.log @@ -311,7 +311,7 @@ main: { sta.z fct.z lda #>$450 sta.z fct.z+1 - // [11] phi fct::x#2 = $aa [phi:main->fct#1] -- vbuxx=vbuc1 + // [11] phi fct::x#2 = $aa [phi:main->fct#1] -- call_phi_near ldx #$aa jsr fct // [3] fct::return#0 = fct::return#2 @@ -329,7 +329,7 @@ main: { sta.z fct.z lda #>$450+1 sta.z fct.z+1 - // [11] phi fct::x#2 = $55 [phi:main::@1->fct#1] -- vbuxx=vbuc1 + // [11] phi fct::x#2 = $55 [phi:main::@1->fct#1] -- call_phi_near ldx #$55 jsr fct // [7] fct::return#1 = fct::return#2 @@ -440,7 +440,7 @@ main: { sta.z fct.z lda #>$450 sta.z fct.z+1 - // [11] phi fct::x#2 = $aa [phi:main->fct#1] -- vbuxx=vbuc1 + // [11] phi fct::x#2 = $aa [phi:main->fct#1] -- call_phi_near ldx #$aa jsr fct // byte a1 = fct(x, z) @@ -458,7 +458,7 @@ main: { sta.z fct.z lda #>$450+1 sta.z fct.z+1 - // [11] phi fct::x#2 = $55 [phi:main::@1->fct#1] -- vbuxx=vbuc1 + // [11] phi fct::x#2 = $55 [phi:main::@1->fct#1] -- call_phi_near ldx #$55 jsr fct // byte a2 = fct(x, z) diff --git a/src/test/ref/fragment-variations.log b/src/test/ref/fragment-variations.log index ad1a43be9..c97d8efa9 100644 --- a/src/test/ref/fragment-variations.log +++ b/src/test/ref/fragment-variations.log @@ -298,7 +298,7 @@ main: { sta.z mul16u.a lda #>$a sta.z mul16u.a+1 - // [10] phi mul16u::b#2 = $a [phi:main->mul16u#1] -- vwuz1=vwuc1 + // [10] phi mul16u::b#2 = $a [phi:main->mul16u#1] -- call_phi_near lda #<$a sta.z mul16u.b lda #>$a @@ -326,7 +326,7 @@ main: { sta.z mul16u.a lda #>$3e8 sta.z mul16u.a+1 - // [10] phi mul16u::b#2 = $3e8 [phi:main::@1->mul16u#1] -- vwuz1=vwuc1 + // [10] phi mul16u::b#2 = $3e8 [phi:main::@1->mul16u#1] -- call_phi_near lda #<$3e8 sta.z mul16u.b lda #>$3e8 @@ -458,7 +458,7 @@ main: { sta.z mul16u.a lda #>$a sta.z mul16u.a+1 - // [10] phi mul16u::b#2 = $a [phi:main->mul16u#1] -- vwuz1=vwuc1 + // [10] phi mul16u::b#2 = $a [phi:main->mul16u#1] -- call_phi_near lda #<$a sta.z mul16u.b lda #>$a @@ -486,7 +486,7 @@ main: { sta.z mul16u.a lda #>$3e8 sta.z mul16u.a+1 - // [10] phi mul16u::b#2 = $3e8 [phi:main::@1->mul16u#1] -- vwuz1=vwuc1 + // [10] phi mul16u::b#2 = $3e8 [phi:main::@1->mul16u#1] -- call_phi_near lda #<$3e8 sta.z mul16u.b lda #>$3e8 diff --git a/src/test/ref/function-pointer-advanced-1.log b/src/test/ref/function-pointer-advanced-1.log index 73b175d3d..1692d8760 100644 --- a/src/test/ref/function-pointer-advanced-1.log +++ b/src/test/ref/function-pointer-advanced-1.log @@ -1256,7 +1256,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [29] phi from __start::@1 to main [phi:__start::@1->main] + // [29] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -1409,7 +1409,7 @@ main: { jmp __b3 // main::@3 __b3: - // [33] call ln + // [33] call ln -- call_phi_near jsr ln // [34] phi from main::@3 to main::@6 [phi:main::@3->main::@6] __b6_from___b3: @@ -1419,7 +1419,7 @@ main: { // [35] call exec // [56] phi from main::@6 to exec [phi:main::@6->exec] exec_from___b6: - // [56] phi exec::collect#10 = &sum [phi:main::@6->exec#0] -- pprz1=pprc1 + // [56] phi exec::collect#10 = &sum [phi:main::@6->exec#0] -- call_phi_near lda #sum @@ -1430,7 +1430,7 @@ main: { jmp __b7 // main::@7 __b7: - // [37] call ln + // [37] call ln -- call_phi_near jsr ln // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] __b8_from___b7: @@ -1440,7 +1440,7 @@ main: { // [39] call exec // [56] phi from main::@8 to exec [phi:main::@8->exec] exec_from___b8: - // [56] phi exec::collect#10 = &min [phi:main::@8->exec#0] -- pprz1=pprc1 + // [56] phi exec::collect#10 = &min [phi:main::@8->exec#0] -- call_phi_near lda #min @@ -1451,7 +1451,7 @@ main: { jmp __b9 // main::@9 __b9: - // [41] call ln + // [41] call ln -- call_phi_near jsr ln // [42] phi from main::@9 to main::@10 [phi:main::@9->main::@10] __b10_from___b9: @@ -1461,7 +1461,7 @@ main: { // [43] call exec // [56] phi from main::@10 to exec [phi:main::@10->exec] exec_from___b10: - // [56] phi exec::collect#10 = &max [phi:main::@10->exec#0] -- pprz1=pprc1 + // [56] phi exec::collect#10 = &max [phi:main::@10->exec#0] -- call_phi_near lda #max @@ -1472,7 +1472,7 @@ main: { jmp __b11 // main::@11 __b11: - // [45] call ln + // [45] call ln -- call_phi_near jsr ln // [46] phi from main::@11 to main::@12 [phi:main::@11->main::@12] __b12_from___b11: @@ -1482,7 +1482,7 @@ main: { // [47] call exec // [56] phi from main::@12 to exec [phi:main::@12->exec] exec_from___b12: - // [56] phi exec::collect#10 = &xor [phi:main::@12->exec#0] -- pprz1=pprc1 + // [56] phi exec::collect#10 = &xor [phi:main::@12->exec#0] -- call_phi_near lda #xor @@ -1503,7 +1503,7 @@ main: { // [76] phi from main::@2 to print [phi:main::@2->print] print_from___b2: // [76] phi idx#53 = idx#54 [phi:main::@2->print#0] -- register_copy - // [76] phi print::i#2 = print::i#0 [phi:main::@2->print#1] -- register_copy + // [76] phi print::i#2 = print::i#0 [phi:main::@2->print#1] -- call_phi_near jsr print // [51] phi from main::@2 to main::@4 [phi:main::@2->main::@4] __b4_from___b2: @@ -1514,7 +1514,7 @@ main: { // [84] phi from main::@4 to cout [phi:main::@4->cout] cout_from___b4: // [84] phi idx#27 = idx#0 [phi:main::@4->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:main::@4->cout#1] -- vbuxx=vbuc1 + // [84] phi cout::c#7 = ' ' [phi:main::@4->cout#1] -- call_phi_near ldx #' ' jsr cout jmp __b5 @@ -1556,7 +1556,7 @@ exec: { // [84] phi idx#27 = 0 [phi:exec->cout#0] -- vbuz1=vbuc1 lda #0 sta.z idx - // [84] phi cout::c#7 = ' ' [phi:exec->cout#1] -- vbuxx=vbuc1 + // [84] phi cout::c#7 = ' ' [phi:exec->cout#1] -- call_phi_near ldx #' ' jsr cout // [58] phi from exec to exec::@4 [phi:exec->exec::@4] @@ -1568,7 +1568,7 @@ exec: { // [84] phi from exec::@4 to cout [phi:exec::@4->cout] cout_from___b4: // [84] phi idx#27 = idx#0 [phi:exec::@4->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:exec::@4->cout#1] -- vbuxx=vbuc1 + // [84] phi cout::c#7 = ' ' [phi:exec::@4->cout#1] -- call_phi_near ldx #' ' jsr cout // [60] phi from exec::@4 to exec::@5 [phi:exec::@4->exec::@5] @@ -1580,7 +1580,7 @@ exec: { // [84] phi from exec::@5 to cout [phi:exec::@5->cout] cout_from___b5: // [84] phi idx#27 = idx#0 [phi:exec::@5->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:exec::@5->cout#1] -- vbuxx=vbuc1 + // [84] phi cout::c#7 = ' ' [phi:exec::@5->cout#1] -- call_phi_near ldx #' ' jsr cout jmp __b6 @@ -1631,7 +1631,7 @@ exec: { // [76] phi from exec::@3 to print [phi:exec::@3->print] print_from___b3: // [76] phi idx#53 = idx#0 [phi:exec::@3->print#0] -- register_copy - // [76] phi print::i#2 = print::i#1 [phi:exec::@3->print#1] -- register_copy + // [76] phi print::i#2 = print::i#1 [phi:exec::@3->print#1] -- call_phi_near jsr print // [73] phi from exec::@3 to exec::@7 [phi:exec::@3->exec::@7] __b7_from___b3: @@ -1642,7 +1642,7 @@ exec: { // [84] phi from exec::@7 to cout [phi:exec::@7->cout] cout_from___b7: // [84] phi idx#27 = idx#0 [phi:exec::@7->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:exec::@7->cout#1] -- vbuxx=vbuc1 + // [84] phi cout::c#7 = ' ' [phi:exec::@7->cout#1] -- call_phi_near ldx #' ' jsr cout jmp __b8 @@ -1676,7 +1676,7 @@ print: { // [84] phi from print to cout [phi:print->cout] cout_from_print: // [84] phi idx#27 = idx#53 [phi:print->cout#0] -- register_copy - // [84] phi cout::c#7 = cout::c#0 [phi:print->cout#1] -- register_copy + // [84] phi cout::c#7 = cout::c#0 [phi:print->cout#1] -- call_phi_near jsr cout jmp __b1 // print::@1 @@ -1691,7 +1691,7 @@ print: { // [84] phi from print::@1 to cout [phi:print::@1->cout] cout_from___b1: // [84] phi idx#27 = idx#0 [phi:print::@1->cout#0] -- register_copy - // [84] phi cout::c#7 = cout::c#1 [phi:print::@1->cout#1] -- register_copy + // [84] phi cout::c#7 = cout::c#1 [phi:print::@1->cout#1] -- call_phi_near jsr cout jmp __breturn // print::@return @@ -1965,7 +1965,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [29] phi from __start::@1 to main [phi:__start::@1->main] + // [29] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return @@ -2113,14 +2113,14 @@ main: { // [32] phi from main::@1 to main::@3 [phi:main::@1->main::@3] // main::@3 // ln() - // [33] call ln + // [33] call ln -- call_phi_near jsr ln // [34] phi from main::@3 to main::@6 [phi:main::@3->main::@6] // main::@6 // exec(&sum) // [35] call exec // [56] phi from main::@6 to exec [phi:main::@6->exec] - // [56] phi exec::collect#10 = &sum [phi:main::@6->exec#0] -- pprz1=pprc1 + // [56] phi exec::collect#10 = &sum [phi:main::@6->exec#0] -- call_phi_near lda #sum @@ -2129,14 +2129,14 @@ main: { // [36] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 // ln() - // [37] call ln + // [37] call ln -- call_phi_near jsr ln // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 // exec(&min) // [39] call exec // [56] phi from main::@8 to exec [phi:main::@8->exec] - // [56] phi exec::collect#10 = &min [phi:main::@8->exec#0] -- pprz1=pprc1 + // [56] phi exec::collect#10 = &min [phi:main::@8->exec#0] -- call_phi_near lda #min @@ -2145,14 +2145,14 @@ main: { // [40] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 // ln() - // [41] call ln + // [41] call ln -- call_phi_near jsr ln // [42] phi from main::@9 to main::@10 [phi:main::@9->main::@10] // main::@10 // exec(&max) // [43] call exec // [56] phi from main::@10 to exec [phi:main::@10->exec] - // [56] phi exec::collect#10 = &max [phi:main::@10->exec#0] -- pprz1=pprc1 + // [56] phi exec::collect#10 = &max [phi:main::@10->exec#0] -- call_phi_near lda #max @@ -2161,14 +2161,14 @@ main: { // [44] phi from main::@10 to main::@11 [phi:main::@10->main::@11] // main::@11 // ln() - // [45] call ln + // [45] call ln -- call_phi_near jsr ln // [46] phi from main::@11 to main::@12 [phi:main::@11->main::@12] // main::@12 // exec(&xor) // [47] call exec // [56] phi from main::@12 to exec [phi:main::@12->exec] - // [56] phi exec::collect#10 = &xor [phi:main::@12->exec#0] -- pprz1=pprc1 + // [56] phi exec::collect#10 = &xor [phi:main::@12->exec#0] -- call_phi_near lda #xor @@ -2188,7 +2188,7 @@ main: { // [50] call print // [76] phi from main::@2 to print [phi:main::@2->print] // [76] phi idx#53 = idx#54 [phi:main::@2->print#0] -- register_copy - // [76] phi print::i#2 = print::i#0 [phi:main::@2->print#1] -- register_copy + // [76] phi print::i#2 = print::i#0 [phi:main::@2->print#1] -- call_phi_near jsr print // [51] phi from main::@2 to main::@4 [phi:main::@2->main::@4] // main::@4 @@ -2196,7 +2196,7 @@ main: { // [52] call cout // [84] phi from main::@4 to cout [phi:main::@4->cout] // [84] phi idx#27 = idx#0 [phi:main::@4->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:main::@4->cout#1] -- vbuxx=vbuc1 + // [84] phi cout::c#7 = ' ' [phi:main::@4->cout#1] -- call_phi_near ldx #' ' jsr cout // main::@5 @@ -2236,7 +2236,7 @@ exec: { // [84] phi idx#27 = 0 [phi:exec->cout#0] -- vbuz1=vbuc1 lda #0 sta.z idx - // [84] phi cout::c#7 = ' ' [phi:exec->cout#1] -- vbuxx=vbuc1 + // [84] phi cout::c#7 = ' ' [phi:exec->cout#1] -- call_phi_near ldx #' ' jsr cout // [58] phi from exec to exec::@4 [phi:exec->exec::@4] @@ -2245,7 +2245,7 @@ exec: { // [59] call cout // [84] phi from exec::@4 to cout [phi:exec::@4->cout] // [84] phi idx#27 = idx#0 [phi:exec::@4->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:exec::@4->cout#1] -- vbuxx=vbuc1 + // [84] phi cout::c#7 = ' ' [phi:exec::@4->cout#1] -- call_phi_near ldx #' ' jsr cout // [60] phi from exec::@4 to exec::@5 [phi:exec::@4->exec::@5] @@ -2254,7 +2254,7 @@ exec: { // [61] call cout // [84] phi from exec::@5 to cout [phi:exec::@5->cout] // [84] phi idx#27 = idx#0 [phi:exec::@5->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:exec::@5->cout#1] -- vbuxx=vbuc1 + // [84] phi cout::c#7 = ' ' [phi:exec::@5->cout#1] -- call_phi_near ldx #' ' jsr cout // exec::@6 @@ -2302,7 +2302,7 @@ exec: { // [72] call print // [76] phi from exec::@3 to print [phi:exec::@3->print] // [76] phi idx#53 = idx#0 [phi:exec::@3->print#0] -- register_copy - // [76] phi print::i#2 = print::i#1 [phi:exec::@3->print#1] -- register_copy + // [76] phi print::i#2 = print::i#1 [phi:exec::@3->print#1] -- call_phi_near jsr print // [73] phi from exec::@3 to exec::@7 [phi:exec::@3->exec::@7] // exec::@7 @@ -2310,7 +2310,7 @@ exec: { // [74] call cout // [84] phi from exec::@7 to cout [phi:exec::@7->cout] // [84] phi idx#27 = idx#0 [phi:exec::@7->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:exec::@7->cout#1] -- vbuxx=vbuc1 + // [84] phi cout::c#7 = ' ' [phi:exec::@7->cout#1] -- call_phi_near ldx #' ' jsr cout // exec::@8 @@ -2343,7 +2343,7 @@ print: { // [79] call cout // [84] phi from print to cout [phi:print->cout] // [84] phi idx#27 = idx#53 [phi:print->cout#0] -- register_copy - // [84] phi cout::c#7 = cout::c#0 [phi:print->cout#1] -- register_copy + // [84] phi cout::c#7 = cout::c#0 [phi:print->cout#1] -- call_phi_near jsr cout // print::@1 // i&0x0f @@ -2357,7 +2357,7 @@ print: { // [82] call cout // [84] phi from print::@1 to cout [phi:print::@1->cout] // [84] phi idx#27 = idx#0 [phi:print::@1->cout#0] -- register_copy - // [84] phi cout::c#7 = cout::c#1 [phi:print::@1->cout#1] -- register_copy + // [84] phi cout::c#7 = cout::c#1 [phi:print::@1->cout#1] -- call_phi_near jsr cout // print::@return // } diff --git a/src/test/ref/function-pointer-noarg-call-10.log b/src/test/ref/function-pointer-noarg-call-10.log index e0cc8628d..1d2198ef8 100644 --- a/src/test/ref/function-pointer-noarg-call-10.log +++ b/src/test/ref/function-pointer-noarg-call-10.log @@ -400,7 +400,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] + // [11] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -414,7 +414,7 @@ world: { // [6] call print // [16] phi from world to print [phi:world->print] print_from_world: - // [16] phi print::msg#3 = world::msg [phi:world->print#0] -- pbuz1=pbuc1 + // [16] phi print::msg#3 = world::msg [phi:world->print#0] -- call_phi_near lda #msg @@ -435,7 +435,7 @@ hello: { // [9] call print // [16] phi from hello to print [phi:hello->print] print_from_hello: - // [16] phi print::msg#3 = hello::msg [phi:hello->print#0] -- pbuz1=pbuc1 + // [16] phi print::msg#3 = hello::msg [phi:hello->print#0] -- call_phi_near lda #msg @@ -456,7 +456,7 @@ main: { // [12] call do10 // [23] phi from main to do10 [phi:main->do10] do10_from_main: - // [23] phi do10::fn#3 = &hello [phi:main->do10#0] -- pprz1=pprc1 + // [23] phi do10::fn#3 = &hello [phi:main->do10#0] -- call_phi_near lda #hello @@ -470,7 +470,7 @@ main: { // [14] call do10 // [23] phi from main::@1 to do10 [phi:main::@1->do10] do10_from___b1: - // [23] phi do10::fn#3 = &world [phi:main::@1->do10#0] -- pprz1=pprc1 + // [23] phi do10::fn#3 = &world [phi:main::@1->do10#0] -- call_phi_near lda #world @@ -654,7 +654,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] + // [11] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return @@ -665,7 +665,7 @@ world: { // print("world ") // [6] call print // [16] phi from world to print [phi:world->print] - // [16] phi print::msg#3 = world::msg [phi:world->print#0] -- pbuz1=pbuc1 + // [16] phi print::msg#3 = world::msg [phi:world->print#0] -- call_phi_near lda #msg @@ -685,7 +685,7 @@ hello: { // print("hello ") // [9] call print // [16] phi from hello to print [phi:hello->print] - // [16] phi print::msg#3 = hello::msg [phi:hello->print#0] -- pbuz1=pbuc1 + // [16] phi print::msg#3 = hello::msg [phi:hello->print#0] -- call_phi_near lda #msg @@ -705,7 +705,7 @@ main: { // do10(&hello) // [12] call do10 // [23] phi from main to do10 [phi:main->do10] - // [23] phi do10::fn#3 = &hello [phi:main->do10#0] -- pprz1=pprc1 + // [23] phi do10::fn#3 = &hello [phi:main->do10#0] -- call_phi_near lda #hello @@ -716,7 +716,7 @@ main: { // do10(&world) // [14] call do10 // [23] phi from main::@1 to do10 [phi:main::@1->do10] - // [23] phi do10::fn#3 = &world [phi:main::@1->do10#0] -- pprz1=pprc1 + // [23] phi do10::fn#3 = &world [phi:main::@1->do10#0] -- call_phi_near lda #world diff --git a/src/test/ref/function-pointer-noarg-call-13.log b/src/test/ref/function-pointer-noarg-call-13.log index 8035feb5b..34209ef12 100644 --- a/src/test/ref/function-pointer-noarg-call-13.log +++ b/src/test/ref/function-pointer-noarg-call-13.log @@ -213,7 +213,7 @@ main: { sta.z enableDLI.dliptr lda #>fn1 sta.z enableDLI.dliptr+1 - // [5] call enableDLI + // [5] call enableDLI -- call_phi_near jsr enableDLI jmp __b1 // main::@1 @@ -223,7 +223,7 @@ main: { sta.z enableDLI.dliptr lda #>fn2 sta.z enableDLI.dliptr+1 - // [7] call enableDLI + // [7] call enableDLI -- call_phi_near jsr enableDLI jmp __breturn // main::@return @@ -325,7 +325,7 @@ main: { sta.z enableDLI.dliptr lda #>fn1 sta.z enableDLI.dliptr+1 - // [5] call enableDLI + // [5] call enableDLI -- call_phi_near jsr enableDLI // main::@1 // enableDLI(&fn2) @@ -334,7 +334,7 @@ main: { sta.z enableDLI.dliptr lda #>fn2 sta.z enableDLI.dliptr+1 - // [7] call enableDLI + // [7] call enableDLI -- call_phi_near jsr enableDLI // main::@return // } diff --git a/src/test/ref/function-pointer-noarg-call-14.log b/src/test/ref/function-pointer-noarg-call-14.log index da9ae74fb..154ebc78d 100644 --- a/src/test/ref/function-pointer-noarg-call-14.log +++ b/src/test/ref/function-pointer-noarg-call-14.log @@ -1541,7 +1541,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -1549,7 +1549,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [33] phi from __start::@1 to main [phi:__start::@1->main] + // [33] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -1563,7 +1563,7 @@ world: { // [10] call printf_str // [38] phi from world to printf_str [phi:world->printf_str] printf_str_from_world: - // [38] phi printf_str::s#4 = world::s [phi:world->printf_str#0] -- pbuz1=pbuc1 + // [38] phi printf_str::s#4 = world::s [phi:world->printf_str#0] -- call_phi_near lda #s @@ -1584,7 +1584,7 @@ hello: { // [13] call printf_str // [38] phi from hello to printf_str [phi:hello->printf_str] printf_str_from_hello: - // [38] phi printf_str::s#4 = hello::s [phi:hello->printf_str#0] -- pbuz1=pbuc1 + // [38] phi printf_str::s#4 = hello::s [phi:hello->printf_str#0] -- call_phi_near lda #s @@ -1627,7 +1627,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [19] gotoxy::y#2 = conio_c64_init::line#2 - // [20] call gotoxy + // [20] call gotoxy -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -1668,7 +1668,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [29] call cputln + // [29] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -1680,7 +1680,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [32] call cputln + // [32] call cputln -- call_phi_near jsr cputln jmp __breturn } @@ -1689,7 +1689,7 @@ main: { // [34] call f1 // [67] phi from main to f1 [phi:main->f1] f1_from_main: - // [67] phi f1::fn#2 = &hello [phi:main->f1#0] -- pprz1=pprc1 + // [67] phi f1::fn#2 = &hello [phi:main->f1#0] -- call_phi_near lda #hello @@ -1703,7 +1703,7 @@ main: { // [36] call f1 // [67] phi from main::@1 to f1 [phi:main::@1->f1] f1_from___b1: - // [67] phi f1::fn#2 = &world [phi:main::@1->f1#0] -- pprz1=pprc1 + // [67] phi f1::fn#2 = &world [phi:main::@1->f1#0] -- call_phi_near lda #world @@ -1876,7 +1876,7 @@ cputln: { sta.z conio_cursor_x // [64] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [65] call cscroll + // [65] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -1919,7 +1919,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [83] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [83] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -1938,7 +1938,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [83] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [83] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -1954,7 +1954,7 @@ cscroll: { memset_from___b3: // [93] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [93] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [93] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -1970,7 +1970,7 @@ cscroll: { memset_from___b4: // [93] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [93] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [93] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -2381,12 +2381,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [33] phi from __start::@1 to main [phi:__start::@1->main] + // [33] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [8] return @@ -2397,7 +2397,7 @@ world: { // printf("world!") // [10] call printf_str // [38] phi from world to printf_str [phi:world->printf_str] - // [38] phi printf_str::s#4 = world::s [phi:world->printf_str#0] -- pbuz1=pbuc1 + // [38] phi printf_str::s#4 = world::s [phi:world->printf_str#0] -- call_phi_near lda #s @@ -2417,7 +2417,7 @@ hello: { // printf("hello ") // [13] call printf_str // [38] phi from hello to printf_str [phi:hello->printf_str] - // [38] phi printf_str::s#4 = hello::s [phi:hello->printf_str#0] -- pbuz1=pbuc1 + // [38] phi printf_str::s#4 = hello::s [phi:hello->printf_str#0] -- call_phi_near lda #s @@ -2455,7 +2455,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [19] gotoxy::y#2 = conio_c64_init::line#2 - // [20] call gotoxy + // [20] call gotoxy -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -2494,7 +2494,7 @@ cputc: { // [28] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [29] call cputln + // [29] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -2505,7 +2505,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [32] call cputln + // [32] call cputln -- call_phi_near jsr cputln rts } @@ -2514,7 +2514,7 @@ main: { // f1(&hello) // [34] call f1 // [67] phi from main to f1 [phi:main->f1] - // [67] phi f1::fn#2 = &hello [phi:main->f1#0] -- pprz1=pprc1 + // [67] phi f1::fn#2 = &hello [phi:main->f1#0] -- call_phi_near lda #hello @@ -2525,7 +2525,7 @@ main: { // f1(&world) // [36] call f1 // [67] phi from main::@1 to f1 [phi:main::@1->f1] - // [67] phi f1::fn#2 = &world [phi:main::@1->f1#0] -- pprz1=pprc1 + // [67] phi f1::fn#2 = &world [phi:main::@1->f1#0] -- call_phi_near lda #world @@ -2698,7 +2698,7 @@ cputln: { // [64] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [65] call cscroll + // [65] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -2738,7 +2738,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [83] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [83] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -2754,7 +2754,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [83] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [83] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -2767,7 +2767,7 @@ cscroll: { // [93] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [93] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [93] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [93] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -2780,7 +2780,7 @@ cscroll: { // [93] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [93] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [93] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [93] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/function-pointer-noarg-call-3.log b/src/test/ref/function-pointer-noarg-call-3.log index 1aff2dbc6..293123223 100644 --- a/src/test/ref/function-pointer-noarg-call-3.log +++ b/src/test/ref/function-pointer-noarg-call-3.log @@ -334,7 +334,7 @@ main: { inc.z i // [7] getfn::b#0 = main::i#1 -- vbuaa=vbuz1 lda.z i - // [8] call getfn + // [8] call getfn -- call_phi_near jsr getfn // [9] getfn::return#0 = getfn::return#3 jmp __b3 @@ -495,7 +495,7 @@ main: { // getfn(++i) // [7] getfn::b#0 = main::i#1 -- vbuaa=vbuz1 lda.z i - // [8] call getfn + // [8] call getfn -- call_phi_near jsr getfn // [9] getfn::return#0 = getfn::return#3 // main::@3 diff --git a/src/test/ref/function-pointer-noarg-call-7.log b/src/test/ref/function-pointer-noarg-call-7.log index 2cf1501c4..6fd6ebde6 100644 --- a/src/test/ref/function-pointer-noarg-call-7.log +++ b/src/test/ref/function-pointer-noarg-call-7.log @@ -307,7 +307,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [12] phi from __start::@1 to main [phi:__start::@1->main] + // [12] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -350,7 +350,7 @@ hello: { // main main: { // [13] call do10 - // [15] phi from main to do10 [phi:main->do10] + // [15] phi from main to do10 [phi:main->do10] -- call_phi_near do10_from_main: jsr do10 jmp __breturn @@ -479,7 +479,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [12] phi from __start::@1 to main [phi:__start::@1->main] + // [12] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return @@ -518,7 +518,7 @@ hello: { main: { // do10(f) // [13] call do10 - // [15] phi from main to do10 [phi:main->do10] + // [15] phi from main to do10 [phi:main->do10] -- call_phi_near jsr do10 // main::@return // } diff --git a/src/test/ref/function-pointer-noarg-call-8.log b/src/test/ref/function-pointer-noarg-call-8.log index c5d6cde97..339af3fa2 100644 --- a/src/test/ref/function-pointer-noarg-call-8.log +++ b/src/test/ref/function-pointer-noarg-call-8.log @@ -341,7 +341,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [4] call main + // [4] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -388,7 +388,7 @@ main: { lda #>msg1 sta.z msg+1 // [14] call do10 - // [18] phi from main to do10 [phi:main->do10] + // [18] phi from main to do10 [phi:main->do10] -- call_phi_near do10_from_main: jsr do10 jmp __b1 @@ -400,7 +400,7 @@ main: { lda #>msg2 sta.z msg+1 // [16] call do10 - // [18] phi from main::@1 to do10 [phi:main::@1->do10] + // [18] phi from main::@1 to do10 [phi:main::@1->do10] -- call_phi_near do10_from___b1: jsr do10 jmp __breturn @@ -543,7 +543,7 @@ __start: { sta.z idx // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [4] call main + // [4] call main -- call_phi_near jsr main // __start::@return // [5] return @@ -588,7 +588,7 @@ main: { sta.z msg+1 // do10(f) // [14] call do10 - // [18] phi from main to do10 [phi:main->do10] + // [18] phi from main to do10 [phi:main->do10] -- call_phi_near jsr do10 // main::@1 // msg = msg2 @@ -599,7 +599,7 @@ main: { sta.z msg+1 // do10(f) // [16] call do10 - // [18] phi from main::@1 to do10 [phi:main::@1->do10] + // [18] phi from main::@1 to do10 [phi:main::@1->do10] -- call_phi_near jsr do10 // main::@return // } diff --git a/src/test/ref/function-pointer-noarg-call-9.log b/src/test/ref/function-pointer-noarg-call-9.log index e11a1a25c..7547a463a 100644 --- a/src/test/ref/function-pointer-noarg-call-9.log +++ b/src/test/ref/function-pointer-noarg-call-9.log @@ -174,7 +174,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [7] phi from __start::@1 to main [phi:__start::@1->main] + // [7] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -280,7 +280,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [7] phi from __start::@1 to main [phi:__start::@1->main] + // [7] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/function-pointer-param-workaround.log b/src/test/ref/function-pointer-param-workaround.log index 98cb9eeeb..e3173e1e5 100644 --- a/src/test/ref/function-pointer-param-workaround.log +++ b/src/test/ref/function-pointer-param-workaround.log @@ -550,7 +550,7 @@ __start: { // __start::@1 __b1: // [4] call main - // [32] phi from __start::@1 to main [phi:__start::@1->main] + // [32] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -880,7 +880,7 @@ __start: { // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [4] call main - // [32] phi from __start::@1 to main [phi:__start::@1->main] + // [32] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [5] return diff --git a/src/test/ref/function-pointer-problem-1.log b/src/test/ref/function-pointer-problem-1.log index 33a272696..485a6a16d 100644 --- a/src/test/ref/function-pointer-problem-1.log +++ b/src/test/ref/function-pointer-problem-1.log @@ -167,7 +167,7 @@ main: { sta.z enableDLI.dliptr lda #>fn1 sta.z enableDLI.dliptr+1 - // [3] call enableDLI + // [3] call enableDLI -- call_phi_near jsr enableDLI jmp __breturn // main::@return @@ -253,7 +253,7 @@ main: { sta.z enableDLI.dliptr lda #>fn1 sta.z enableDLI.dliptr+1 - // [3] call enableDLI + // [3] call enableDLI -- call_phi_near jsr enableDLI // main::@return // } diff --git a/src/test/ref/function-pointer-return-2.log b/src/test/ref/function-pointer-return-2.log index 3016e22f8..87123a32f 100644 --- a/src/test/ref/function-pointer-return-2.log +++ b/src/test/ref/function-pointer-return-2.log @@ -267,7 +267,7 @@ main: { // Create pointer to function without & // [11] phi from main::@1 to set_border [phi:main::@1->set_border] set_border_from___b1: - // [11] phi set_border::fn#2 = &fn1 [phi:main::@1->set_border#0] -- pprz1=pprc1 + // [11] phi set_border::fn#2 = &fn1 [phi:main::@1->set_border#0] -- call_phi_near lda #fn1 @@ -281,7 +281,7 @@ main: { // [4] call set_border // [11] phi from main::@2 to set_border [phi:main::@2->set_border] set_border_from___b2: - // [11] phi set_border::fn#2 = &fn2 [phi:main::@2->set_border#0] -- pprz1=pprc1 + // [11] phi set_border::fn#2 = &fn2 [phi:main::@2->set_border#0] -- call_phi_near lda #fn2 @@ -418,7 +418,7 @@ main: { // [2] call set_border // Create pointer to function without & // [11] phi from main::@1 to set_border [phi:main::@1->set_border] - // [11] phi set_border::fn#2 = &fn1 [phi:main::@1->set_border#0] -- pprz1=pprc1 + // [11] phi set_border::fn#2 = &fn1 [phi:main::@1->set_border#0] -- call_phi_near lda #fn1 @@ -429,7 +429,7 @@ main: { // set_border(fn2) // [4] call set_border // [11] phi from main::@2 to set_border [phi:main::@2->set_border] - // [11] phi set_border::fn#2 = &fn2 [phi:main::@2->set_border#0] -- pprz1=pprc1 + // [11] phi set_border::fn#2 = &fn2 [phi:main::@2->set_border#0] -- call_phi_near lda #fn2 diff --git a/src/test/ref/function-pointer-return-3.log b/src/test/ref/function-pointer-return-3.log index e4f571d97..0e4451486 100644 --- a/src/test/ref/function-pointer-return-3.log +++ b/src/test/ref/function-pointer-return-3.log @@ -384,7 +384,7 @@ main: { lda #>tasks adc #0 sta.z run.task+1 - // [6] call run + // [6] call run -- call_phi_near jsr run jmp __b3 // main::@3 @@ -569,7 +569,7 @@ main: { lda #>tasks adc #0 sta.z run.task+1 - // [6] call run + // [6] call run -- call_phi_near jsr run // main::@3 // for(char i=0; i < sizeof(tasks)/sizeof(struct Task); i++) diff --git a/src/test/ref/global-label-problem.log b/src/test/ref/global-label-problem.log index 630fe9e72..64d27f2cf 100644 --- a/src/test/ref/global-label-problem.log +++ b/src/test/ref/global-label-problem.log @@ -344,7 +344,7 @@ main: { print_from_main: // [7] phi idx#27 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [7] phi print::msg#7 = msg [phi:main->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#7 = msg [phi:main->print#1] -- call_phi_near lda #msg @@ -359,7 +359,7 @@ main: { // [7] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [7] phi idx#27 = idx#19 [phi:main::@1->print#0] -- register_copy - // [7] phi print::msg#7 = main::msg1 [phi:main::@1->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#7 = main::msg1 [phi:main::@1->print#1] -- call_phi_near lda #msg1 @@ -371,7 +371,7 @@ main: { // main::@2 __b2: // [5] call print1 - // [14] phi from main::@2 to print1 [phi:main::@2->print1] + // [14] phi from main::@2 to print1 [phi:main::@2->print1] -- call_phi_near print1_from___b2: jsr print1 jmp __breturn @@ -427,7 +427,7 @@ print1: { // [7] phi from print1 to print [phi:print1->print] print_from_print1: // [7] phi idx#27 = idx#19 [phi:print1->print#0] -- register_copy - // [7] phi print::msg#7 = print1::msg [phi:print1->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#7 = print1::msg [phi:print1->print#1] -- call_phi_near lda #msg @@ -442,7 +442,7 @@ print1: { // [7] phi from print1::@1 to print [phi:print1::@1->print] print_from___b1: // [7] phi idx#27 = idx#19 [phi:print1::@1->print#0] -- register_copy - // [7] phi print::msg#7 = msg [phi:print1::@1->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#7 = msg [phi:print1::@1->print#1] -- call_phi_near lda #<@msg sta.z print.msg lda #>@msg @@ -537,7 +537,7 @@ main: { // [7] phi from main to print [phi:main->print] // [7] phi idx#27 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [7] phi print::msg#7 = msg [phi:main->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#7 = msg [phi:main->print#1] -- call_phi_near lda #msg @@ -549,7 +549,7 @@ main: { // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] // [7] phi idx#27 = idx#19 [phi:main::@1->print#0] -- register_copy - // [7] phi print::msg#7 = main::msg1 [phi:main::@1->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#7 = main::msg1 [phi:main::@1->print#1] -- call_phi_near lda #msg1 @@ -559,7 +559,7 @@ main: { // main::@2 // print1() // [5] call print1 - // [14] phi from main::@2 to print1 [phi:main::@2->print1] + // [14] phi from main::@2 to print1 [phi:main::@2->print1] -- call_phi_near jsr print1 // main::@return // } @@ -612,7 +612,7 @@ print1: { // [15] call print // [7] phi from print1 to print [phi:print1->print] // [7] phi idx#27 = idx#19 [phi:print1->print#0] -- register_copy - // [7] phi print::msg#7 = print1::msg [phi:print1->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#7 = print1::msg [phi:print1->print#1] -- call_phi_near lda #msg @@ -624,7 +624,7 @@ print1: { // [17] call print // [7] phi from print1::@1 to print [phi:print1::@1->print] // [7] phi idx#27 = idx#19 [phi:print1::@1->print#0] -- register_copy - // [7] phi print::msg#7 = msg [phi:print1::@1->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#7 = msg [phi:print1::@1->print#1] -- call_phi_near lda #<@msg sta.z print.msg lda #>@msg diff --git a/src/test/ref/global-pc-multiple.log b/src/test/ref/global-pc-multiple.log index f2c01c47e..5587b71f0 100644 --- a/src/test/ref/global-pc-multiple.log +++ b/src/test/ref/global-pc-multiple.log @@ -174,7 +174,7 @@ main: { jmp __b2 // main::@2 __b2: - // [4] call incScreen + // [4] call incScreen -- call_phi_near jsr incScreen jmp __b1 } @@ -252,7 +252,7 @@ main: { // main::@2 __b2: // incScreen() - // [4] call incScreen + // [4] call incScreen -- call_phi_near jsr incScreen jmp __b1 } diff --git a/src/test/ref/helloworld2.log b/src/test/ref/helloworld2.log index d80d75484..acd112cb5 100644 --- a/src/test/ref/helloworld2.log +++ b/src/test/ref/helloworld2.log @@ -260,7 +260,7 @@ main: { // [1] call print2 // [5] phi from main to print2 [phi:main->print2] print2_from_main: - // [5] phi print2::at#4 = screen [phi:main->print2#0] -- pbuz1=pbuc1 + // [5] phi print2::at#4 = screen [phi:main->print2#0] -- call_phi_near lda #screen @@ -274,7 +274,7 @@ main: { // [3] call print2 // [5] phi from main::@1 to print2 [phi:main::@1->print2] print2_from___b1: - // [5] phi print2::at#4 = screen+$50 [phi:main::@1->print2#0] -- pbuz1=pbuc1 + // [5] phi print2::at#4 = screen+$50 [phi:main::@1->print2#0] -- call_phi_near lda #screen+$50 @@ -388,7 +388,7 @@ main: { // print2(screen, hello) // [1] call print2 // [5] phi from main to print2 [phi:main->print2] - // [5] phi print2::at#4 = screen [phi:main->print2#0] -- pbuz1=pbuc1 + // [5] phi print2::at#4 = screen [phi:main->print2#0] -- call_phi_near lda #screen @@ -399,7 +399,7 @@ main: { // print2(screen+80, hello) // [3] call print2 // [5] phi from main::@1 to print2 [phi:main::@1->print2] - // [5] phi print2::at#4 = screen+$50 [phi:main::@1->print2#0] -- pbuz1=pbuc1 + // [5] phi print2::at#4 = screen+$50 [phi:main::@1->print2#0] -- call_phi_near lda #screen+$50 diff --git a/src/test/ref/hex2dec-ptrptr.log b/src/test/ref/hex2dec-ptrptr.log index 39f626dc1..a6584ab71 100644 --- a/src/test/ref/hex2dec-ptrptr.log +++ b/src/test/ref/hex2dec-ptrptr.log @@ -757,7 +757,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call cls - // [13] phi from main to cls [phi:main->cls] + // [13] phi from main to cls [phi:main->cls] -- call_phi_near cls_from_main: jsr cls jmp __b1 @@ -771,7 +771,7 @@ main: { // [3] call utoa16w // [19] phi from main::@1 to utoa16w [phi:main::@1->utoa16w] utoa16w_from___b1: - // [19] phi utoa16w::value#5 = 0 [phi:main::@1->utoa16w#0] -- vwuz1=vbuc1 + // [19] phi utoa16w::value#5 = 0 [phi:main::@1->utoa16w#0] -- call_phi_near lda #<0 sta.z utoa16w.value lda #>0 @@ -788,7 +788,7 @@ main: { // [5] call utoa16w // [19] phi from main::@2 to utoa16w [phi:main::@2->utoa16w] utoa16w_from___b2: - // [19] phi utoa16w::value#5 = $4d2 [phi:main::@2->utoa16w#0] -- vwuz1=vwuc1 + // [19] phi utoa16w::value#5 = $4d2 [phi:main::@2->utoa16w#0] -- call_phi_near lda #<$4d2 sta.z utoa16w.value lda #>$4d2 @@ -805,7 +805,7 @@ main: { // [7] call utoa16w // [19] phi from main::@3 to utoa16w [phi:main::@3->utoa16w] utoa16w_from___b3: - // [19] phi utoa16w::value#5 = $162e [phi:main::@3->utoa16w#0] -- vwuz1=vwuc1 + // [19] phi utoa16w::value#5 = $162e [phi:main::@3->utoa16w#0] -- call_phi_near lda #<$162e sta.z utoa16w.value lda #>$162e @@ -822,7 +822,7 @@ main: { // [9] call utoa16w // [19] phi from main::@4 to utoa16w [phi:main::@4->utoa16w] utoa16w_from___b4: - // [19] phi utoa16w::value#5 = $270f [phi:main::@4->utoa16w#0] -- vwuz1=vwuc1 + // [19] phi utoa16w::value#5 = $270f [phi:main::@4->utoa16w#0] -- call_phi_near lda #<$270f sta.z utoa16w.value lda #>$270f @@ -839,7 +839,7 @@ main: { // [11] call utoa16w // [19] phi from main::@5 to utoa16w [phi:main::@5->utoa16w] utoa16w_from___b5: - // [19] phi utoa16w::value#5 = $e608 [phi:main::@5->utoa16w#0] -- vwuz1=vwuc1 + // [19] phi utoa16w::value#5 = $e608 [phi:main::@5->utoa16w#0] -- call_phi_near lda #<$e608 sta.z utoa16w.value lda #>$e608 @@ -909,7 +909,7 @@ utoa16w: { utoa16n_from_utoa16w: // [40] phi utoa16n::started#7 = 0 [phi:utoa16w->utoa16n#0] -- vbuxx=vbuc1 ldx #0 - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- register_copy + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- call_phi_near jsr utoa16n // [23] utoa16n::return#0 = utoa16n::return#4 jmp __b1 @@ -925,7 +925,7 @@ utoa16w: { // [40] phi from utoa16w::@1 to utoa16n [phi:utoa16w::@1->utoa16n] utoa16n_from___b1: // [40] phi utoa16n::started#7 = utoa16n::started#1 [phi:utoa16w::@1->utoa16n#0] -- register_copy - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- register_copy + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- call_phi_near jsr utoa16n // [29] utoa16n::return#1 = utoa16n::return#4 jmp __b2 @@ -944,7 +944,7 @@ utoa16w: { // [40] phi from utoa16w::@2 to utoa16n [phi:utoa16w::@2->utoa16n] utoa16n_from___b2: // [40] phi utoa16n::started#7 = utoa16n::started#2 [phi:utoa16w::@2->utoa16n#0] -- register_copy - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- register_copy + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- call_phi_near jsr utoa16n jmp __b3 // utoa16w::@3 @@ -958,7 +958,7 @@ utoa16w: { utoa16n_from___b3: // [40] phi utoa16n::started#7 = 1 [phi:utoa16w::@3->utoa16n#0] -- vbuxx=vbuc1 ldx #1 - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- register_copy + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- call_phi_near jsr utoa16n jmp __b4 // utoa16w::@4 @@ -1159,7 +1159,7 @@ Score: 751 main: { // cls() // [1] call cls - // [13] phi from main to cls [phi:main->cls] + // [13] phi from main to cls [phi:main->cls] -- call_phi_near jsr cls // main::@1 // utoa16w(00000, screen) @@ -1170,7 +1170,7 @@ main: { sta.z utoa16w.dst+1 // [3] call utoa16w // [19] phi from main::@1 to utoa16w [phi:main::@1->utoa16w] - // [19] phi utoa16w::value#5 = 0 [phi:main::@1->utoa16w#0] -- vwuz1=vbuc1 + // [19] phi utoa16w::value#5 = 0 [phi:main::@1->utoa16w#0] -- call_phi_near lda #<0 sta.z utoa16w.value sta.z utoa16w.value+1 @@ -1184,7 +1184,7 @@ main: { sta.z utoa16w.dst+1 // [5] call utoa16w // [19] phi from main::@2 to utoa16w [phi:main::@2->utoa16w] - // [19] phi utoa16w::value#5 = $4d2 [phi:main::@2->utoa16w#0] -- vwuz1=vwuc1 + // [19] phi utoa16w::value#5 = $4d2 [phi:main::@2->utoa16w#0] -- call_phi_near lda #<$4d2 sta.z utoa16w.value lda #>$4d2 @@ -1199,7 +1199,7 @@ main: { sta.z utoa16w.dst+1 // [7] call utoa16w // [19] phi from main::@3 to utoa16w [phi:main::@3->utoa16w] - // [19] phi utoa16w::value#5 = $162e [phi:main::@3->utoa16w#0] -- vwuz1=vwuc1 + // [19] phi utoa16w::value#5 = $162e [phi:main::@3->utoa16w#0] -- call_phi_near lda #<$162e sta.z utoa16w.value lda #>$162e @@ -1214,7 +1214,7 @@ main: { sta.z utoa16w.dst+1 // [9] call utoa16w // [19] phi from main::@4 to utoa16w [phi:main::@4->utoa16w] - // [19] phi utoa16w::value#5 = $270f [phi:main::@4->utoa16w#0] -- vwuz1=vwuc1 + // [19] phi utoa16w::value#5 = $270f [phi:main::@4->utoa16w#0] -- call_phi_near lda #<$270f sta.z utoa16w.value lda #>$270f @@ -1229,7 +1229,7 @@ main: { sta.z utoa16w.dst+1 // [11] call utoa16w // [19] phi from main::@5 to utoa16w [phi:main::@5->utoa16w] - // [19] phi utoa16w::value#5 = $e608 [phi:main::@5->utoa16w#0] -- vwuz1=vwuc1 + // [19] phi utoa16w::value#5 = $e608 [phi:main::@5->utoa16w#0] -- call_phi_near lda #<$e608 sta.z utoa16w.value lda #>$e608 @@ -1296,7 +1296,7 @@ utoa16w: { // [40] phi from utoa16w to utoa16n [phi:utoa16w->utoa16n] // [40] phi utoa16n::started#7 = 0 [phi:utoa16w->utoa16n#0] -- vbuxx=vbuc1 ldx #0 - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- register_copy + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- call_phi_near jsr utoa16n // utoa16n(BYTE1(value)>>4, &dst, started) // [23] utoa16n::return#0 = utoa16n::return#4 @@ -1313,7 +1313,7 @@ utoa16w: { // [28] call utoa16n // [40] phi from utoa16w::@1 to utoa16n [phi:utoa16w::@1->utoa16n] // [40] phi utoa16n::started#7 = utoa16n::started#1 [phi:utoa16w::@1->utoa16n#0] -- register_copy - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- register_copy + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- call_phi_near jsr utoa16n // utoa16n(BYTE1(value)&0x0f, &dst, started) // [29] utoa16n::return#1 = utoa16n::return#4 @@ -1333,7 +1333,7 @@ utoa16w: { // [34] call utoa16n // [40] phi from utoa16w::@2 to utoa16n [phi:utoa16w::@2->utoa16n] // [40] phi utoa16n::started#7 = utoa16n::started#2 [phi:utoa16w::@2->utoa16n#0] -- register_copy - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- register_copy + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- call_phi_near jsr utoa16n // utoa16w::@3 // BYTE0(value) @@ -1346,7 +1346,7 @@ utoa16w: { // [40] phi from utoa16w::@3 to utoa16n [phi:utoa16w::@3->utoa16n] // [40] phi utoa16n::started#7 = 1 [phi:utoa16w::@3->utoa16n#0] -- vbuxx=vbuc1 ldx #1 - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- register_copy + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- call_phi_near jsr utoa16n // utoa16w::@4 // *dst = 0 diff --git a/src/test/ref/hex2dec.log b/src/test/ref/hex2dec.log index 458bec309..42d4de639 100644 --- a/src/test/ref/hex2dec.log +++ b/src/test/ref/hex2dec.log @@ -1415,7 +1415,7 @@ main: { // asm { sei } sei // [1] call cls - // [31] phi from main to cls [phi:main->cls] + // [31] phi from main to cls [phi:main->cls] -- call_phi_near cls_from_main: jsr cls jmp __b1 @@ -1450,7 +1450,7 @@ main: { // [9] call utoa16w // [37] phi from main::@2 to utoa16w [phi:main::@2->utoa16w] utoa16w_from___b2: - // [37] phi utoa16w::value#5 = 0 [phi:main::@2->utoa16w#0] -- vwuz1=vbuc1 + // [37] phi utoa16w::value#5 = 0 [phi:main::@2->utoa16w#0] -- call_phi_near lda #<0 sta.z utoa16w.value lda #>0 @@ -1469,7 +1469,7 @@ main: { // [12] call utoa16w // [37] phi from main::@5 to utoa16w [phi:main::@5->utoa16w] utoa16w_from___b5: - // [37] phi utoa16w::value#5 = $4d2 [phi:main::@5->utoa16w#0] -- vwuz1=vwuc1 + // [37] phi utoa16w::value#5 = $4d2 [phi:main::@5->utoa16w#0] -- call_phi_near lda #<$4d2 sta.z utoa16w.value lda #>$4d2 @@ -1488,7 +1488,7 @@ main: { // [15] call utoa16w // [37] phi from main::@6 to utoa16w [phi:main::@6->utoa16w] utoa16w_from___b6: - // [37] phi utoa16w::value#5 = $162e [phi:main::@6->utoa16w#0] -- vwuz1=vwuc1 + // [37] phi utoa16w::value#5 = $162e [phi:main::@6->utoa16w#0] -- call_phi_near lda #<$162e sta.z utoa16w.value lda #>$162e @@ -1507,7 +1507,7 @@ main: { // [18] call utoa16w // [37] phi from main::@7 to utoa16w [phi:main::@7->utoa16w] utoa16w_from___b7: - // [37] phi utoa16w::value#5 = $270f [phi:main::@7->utoa16w#0] -- vwuz1=vwuc1 + // [37] phi utoa16w::value#5 = $270f [phi:main::@7->utoa16w#0] -- call_phi_near lda #<$270f sta.z utoa16w.value lda #>$270f @@ -1526,7 +1526,7 @@ main: { // [21] call utoa16w // [37] phi from main::@8 to utoa16w [phi:main::@8->utoa16w] utoa16w_from___b8: - // [37] phi utoa16w::value#5 = $e608 [phi:main::@8->utoa16w#0] -- vwuz1=vwuc1 + // [37] phi utoa16w::value#5 = $e608 [phi:main::@8->utoa16w#0] -- call_phi_near lda #<$e608 sta.z utoa16w.value lda #>$e608 @@ -1549,7 +1549,7 @@ main: { lda #0 sta.z utoa10w.value+1 // [26] call utoa10w - // [58] phi from main::@9 to utoa10w [phi:main::@9->utoa10w] + // [58] phi from main::@9 to utoa10w [phi:main::@9->utoa10w] -- call_phi_near utoa10w_from___b9: jsr utoa10w // [27] phi from main::@9 to main::@3 [phi:main::@9->main::@3] @@ -1638,7 +1638,7 @@ utoa16w: { utoa16n_from_utoa16w: // [78] phi utoa16n::started#7 = 0 [phi:utoa16w->utoa16n#0] -- vbuxx=vbuc1 ldx #0 - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- register_copy + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- call_phi_near jsr utoa16n // [41] utoa16n::return#0 = utoa16n::return#4 jmp __b1 @@ -1654,7 +1654,7 @@ utoa16w: { // [78] phi from utoa16w::@1 to utoa16n [phi:utoa16w::@1->utoa16n] utoa16n_from___b1: // [78] phi utoa16n::started#7 = utoa16n::started#1 [phi:utoa16w::@1->utoa16n#0] -- register_copy - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- register_copy + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- call_phi_near jsr utoa16n // [47] utoa16n::return#1 = utoa16n::return#4 jmp __b2 @@ -1673,7 +1673,7 @@ utoa16w: { // [78] phi from utoa16w::@2 to utoa16n [phi:utoa16w::@2->utoa16n] utoa16n_from___b2: // [78] phi utoa16n::started#7 = utoa16n::started#2 [phi:utoa16w::@2->utoa16n#0] -- register_copy - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- register_copy + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- call_phi_near jsr utoa16n jmp __b3 // utoa16w::@3 @@ -1687,7 +1687,7 @@ utoa16w: { utoa16n_from___b3: // [78] phi utoa16n::started#7 = 1 [phi:utoa16w::@3->utoa16n#0] -- vbuxx=vbuc1 ldx #1 - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- register_copy + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- call_phi_near jsr utoa16n jmp __b4 // utoa16w::@4 @@ -2138,7 +2138,7 @@ main: { sei // cls() // [1] call cls - // [31] phi from main to cls [phi:main->cls] + // [31] phi from main to cls [phi:main->cls] -- call_phi_near jsr cls // main::@1 __b1: @@ -2175,7 +2175,7 @@ main: { sta.z utoa16w.dst+1 // [9] call utoa16w // [37] phi from main::@2 to utoa16w [phi:main::@2->utoa16w] - // [37] phi utoa16w::value#5 = 0 [phi:main::@2->utoa16w#0] -- vwuz1=vbuc1 + // [37] phi utoa16w::value#5 = 0 [phi:main::@2->utoa16w#0] -- call_phi_near lda #<0 sta.z utoa16w.value sta.z utoa16w.value+1 @@ -2192,7 +2192,7 @@ main: { sta.z utoa16w.dst+1 // [12] call utoa16w // [37] phi from main::@5 to utoa16w [phi:main::@5->utoa16w] - // [37] phi utoa16w::value#5 = $4d2 [phi:main::@5->utoa16w#0] -- vwuz1=vwuc1 + // [37] phi utoa16w::value#5 = $4d2 [phi:main::@5->utoa16w#0] -- call_phi_near lda #<$4d2 sta.z utoa16w.value lda #>$4d2 @@ -2210,7 +2210,7 @@ main: { sta.z utoa16w.dst+1 // [15] call utoa16w // [37] phi from main::@6 to utoa16w [phi:main::@6->utoa16w] - // [37] phi utoa16w::value#5 = $162e [phi:main::@6->utoa16w#0] -- vwuz1=vwuc1 + // [37] phi utoa16w::value#5 = $162e [phi:main::@6->utoa16w#0] -- call_phi_near lda #<$162e sta.z utoa16w.value lda #>$162e @@ -2228,7 +2228,7 @@ main: { sta.z utoa16w.dst+1 // [18] call utoa16w // [37] phi from main::@7 to utoa16w [phi:main::@7->utoa16w] - // [37] phi utoa16w::value#5 = $270f [phi:main::@7->utoa16w#0] -- vwuz1=vwuc1 + // [37] phi utoa16w::value#5 = $270f [phi:main::@7->utoa16w#0] -- call_phi_near lda #<$270f sta.z utoa16w.value lda #>$270f @@ -2246,7 +2246,7 @@ main: { sta.z utoa16w.dst+1 // [21] call utoa16w // [37] phi from main::@8 to utoa16w [phi:main::@8->utoa16w] - // [37] phi utoa16w::value#5 = $e608 [phi:main::@8->utoa16w#0] -- vwuz1=vwuc1 + // [37] phi utoa16w::value#5 = $e608 [phi:main::@8->utoa16w#0] -- call_phi_near lda #<$e608 sta.z utoa16w.value lda #>$e608 @@ -2271,7 +2271,7 @@ main: { lda #0 sta.z utoa10w.value+1 // [26] call utoa10w - // [58] phi from main::@9 to utoa10w [phi:main::@9->utoa10w] + // [58] phi from main::@9 to utoa10w [phi:main::@9->utoa10w] -- call_phi_near jsr utoa10w // [27] phi from main::@9 to main::@3 [phi:main::@9->main::@3] // [27] phi main::i#2 = 0 [phi:main::@9->main::@3#0] -- vbuxx=vbuc1 @@ -2357,7 +2357,7 @@ utoa16w: { // [78] phi from utoa16w to utoa16n [phi:utoa16w->utoa16n] // [78] phi utoa16n::started#7 = 0 [phi:utoa16w->utoa16n#0] -- vbuxx=vbuc1 ldx #0 - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- register_copy + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- call_phi_near jsr utoa16n // utoa16n(BYTE1(value)>>4, &dst, started) // [41] utoa16n::return#0 = utoa16n::return#4 @@ -2374,7 +2374,7 @@ utoa16w: { // [46] call utoa16n // [78] phi from utoa16w::@1 to utoa16n [phi:utoa16w::@1->utoa16n] // [78] phi utoa16n::started#7 = utoa16n::started#1 [phi:utoa16w::@1->utoa16n#0] -- register_copy - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- register_copy + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- call_phi_near jsr utoa16n // utoa16n(BYTE1(value)&0x0f, &dst, started) // [47] utoa16n::return#1 = utoa16n::return#4 @@ -2394,7 +2394,7 @@ utoa16w: { // [52] call utoa16n // [78] phi from utoa16w::@2 to utoa16n [phi:utoa16w::@2->utoa16n] // [78] phi utoa16n::started#7 = utoa16n::started#2 [phi:utoa16w::@2->utoa16n#0] -- register_copy - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- register_copy + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- call_phi_near jsr utoa16n // utoa16w::@3 // BYTE0(value) @@ -2407,7 +2407,7 @@ utoa16w: { // [78] phi from utoa16w::@3 to utoa16n [phi:utoa16w::@3->utoa16n] // [78] phi utoa16n::started#7 = 1 [phi:utoa16w::@3->utoa16n#0] -- vbuxx=vbuc1 ldx #1 - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- register_copy + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- call_phi_near jsr utoa16n // utoa16w::@4 // *dst = 0 diff --git a/src/test/ref/incrementinarray.log b/src/test/ref/incrementinarray.log index e7e0c5e28..df198b8fa 100644 --- a/src/test/ref/incrementinarray.log +++ b/src/test/ref/incrementinarray.log @@ -757,7 +757,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call print_cls - // [11] phi from main to print_cls [phi:main->print_cls] + // [11] phi from main to print_cls [phi:main->print_cls] -- call_phi_near print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -778,7 +778,7 @@ main: { // main::@1 __b1: // [3] call print_str - // [14] phi from main::@1 to print_str [phi:main::@1->print_str] + // [14] phi from main::@1 to print_str [phi:main::@1->print_str] -- call_phi_near print_str_from___b1: jsr print_str // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -787,7 +787,7 @@ main: { // main::@2 __b2: // [5] call print_ln - // [21] phi from main::@2 to print_ln [phi:main::@2->print_ln] + // [21] phi from main::@2 to print_ln [phi:main::@2->print_ln] -- call_phi_near print_ln_from___b2: jsr print_ln jmp __b3 @@ -823,7 +823,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [12] call memset - // [26] phi from print_cls to memset [phi:print_cls->memset] + // [26] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -863,7 +863,7 @@ print_str: { // [18] print_char::ch#0 = *print_str::str#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [19] call print_char + // [19] call print_char -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -1101,7 +1101,7 @@ Score: 9880 main: { // print_cls() // [1] call print_cls - // [11] phi from main to print_cls [phi:main->print_cls] + // [11] phi from main to print_cls [phi:main->print_cls] -- call_phi_near jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 @@ -1120,13 +1120,13 @@ main: { __b1: // print_str(txt) // [3] call print_str - // [14] phi from main::@1 to print_str [phi:main::@1->print_str] + // [14] phi from main::@1 to print_str [phi:main::@1->print_str] -- call_phi_near jsr print_str // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // print_ln() // [5] call print_ln - // [21] phi from main::@2 to print_ln [phi:main::@2->print_ln] + // [21] phi from main::@2 to print_ln [phi:main::@2->print_ln] -- call_phi_near jsr print_ln // main::@3 // txt[1]++; @@ -1160,7 +1160,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [12] call memset - // [26] phi from print_cls to memset [phi:print_cls->memset] + // [26] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -1197,7 +1197,7 @@ print_str: { // [18] print_char::ch#0 = *print_str::str#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [19] call print_char + // [19] call print_char -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/init-value-npe.log b/src/test/ref/init-value-npe.log index 0934bf1d1..605953a1e 100644 --- a/src/test/ref/init-value-npe.log +++ b/src/test/ref/init-value-npe.log @@ -238,7 +238,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memset + // [1] call memset -- call_phi_near jsr memset jmp __breturn // main::@return @@ -302,7 +302,7 @@ Score: 24 // main main: { // memset(myscreen) - // [1] call memset + // [1] call memset -- call_phi_near jsr memset // main::@return // } diff --git a/src/test/ref/init-volatiles.log b/src/test/ref/init-volatiles.log index 479f85898..28a4e887d 100644 --- a/src/test/ref/init-volatiles.log +++ b/src/test/ref/init-volatiles.log @@ -154,7 +154,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -241,7 +241,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/inline-asm-ref-scoped.log b/src/test/ref/inline-asm-ref-scoped.log index 0fe922e7f..321189d27 100644 --- a/src/test/ref/inline-asm-ref-scoped.log +++ b/src/test/ref/inline-asm-ref-scoped.log @@ -4,7 +4,7 @@ CONTROL FLOW GRAPH SSA void main() main: scope:[main] from __start asm { lda#'c' stasub.ll+1 } - call sub + call sub to:main::@1 main::@1: scope:[main] from main to:main::@return @@ -22,7 +22,7 @@ sub::@return: scope:[sub] from sub void __start() __start: scope:[__start] from - call main + call main to:__start::@1 __start::@1: scope:[__start] from __start to:__start::@return @@ -53,7 +53,7 @@ FINAL CONTROL FLOW GRAPH void main() main: scope:[main] from asm { lda#'c' stasub.ll+1 } - [1] call sub + [1] call sub to:main::@return main::@return: scope:[main] from main [2] return @@ -106,7 +106,7 @@ main: { // asm { lda#'c' stasub.ll+1 } lda #'c' sta sub.ll+1 - // [1] call sub + // [1] call sub -- call_phi_near jsr sub jmp __breturn // main::@return @@ -165,7 +165,7 @@ main: { lda #'c' sta sub.ll+1 // sub() - // [1] call sub + // [1] call sub -- call_phi_near jsr sub // main::@return // } diff --git a/src/test/ref/inline-asm-uses-1.log b/src/test/ref/inline-asm-uses-1.log index f1456dbff..746828cb6 100644 --- a/src/test/ref/inline-asm-uses-1.log +++ b/src/test/ref/inline-asm-uses-1.log @@ -201,7 +201,7 @@ main: { // [0] fgetc::channel = 7 -- vbuz1=vbuc1 lda #7 sta.z fgetc.channel - // [1] call fgetc + // [1] call fgetc -- call_phi_near jsr fgetc // [2] fgetc::return#0 = fgetc::return#2 jmp __b1 @@ -301,7 +301,7 @@ main: { // [0] fgetc::channel = 7 -- vbuz1=vbuc1 lda #7 sta.z fgetc.channel - // [1] call fgetc + // [1] call fgetc -- call_phi_near jsr fgetc // [2] fgetc::return#0 = fgetc::return#2 // main::@1 diff --git a/src/test/ref/inline-kickasm-uses-problem.log b/src/test/ref/inline-kickasm-uses-problem.log index e583b0c27..66bedbc96 100644 --- a/src/test/ref/inline-kickasm-uses-problem.log +++ b/src/test/ref/inline-kickasm-uses-problem.log @@ -187,7 +187,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call foo + // [1] call foo -- call_phi_near jsr foo jmp __breturn // main::@return @@ -291,7 +291,7 @@ Score: 320 // main main: { // foo(a, b) - // [1] call foo + // [1] call foo -- call_phi_near jsr foo // main::@return // } diff --git a/src/test/ref/inline-pointer-1.log b/src/test/ref/inline-pointer-1.log index edca90a05..04e35a32f 100644 --- a/src/test/ref/inline-pointer-1.log +++ b/src/test/ref/inline-pointer-1.log @@ -194,7 +194,7 @@ main: { puta_from_main: // [5] phi puta::pl#2 = 0 [phi:main->puta#0] -- vbuaa=vbuc1 lda #0 - // [5] phi puta::ph#2 = 4 [phi:main->puta#1] -- vbuxx=vbuc1 + // [5] phi puta::ph#2 = 4 [phi:main->puta#1] -- call_phi_near ldx #4 jsr puta // [2] phi from main to main::@1 [phi:main->main::@1] @@ -207,7 +207,7 @@ main: { puta_from___b1: // [5] phi puta::pl#2 = $18 [phi:main::@1->puta#0] -- vbuaa=vbuc1 lda #$18 - // [5] phi puta::ph#2 = 5 [phi:main::@1->puta#1] -- vbuxx=vbuc1 + // [5] phi puta::ph#2 = 5 [phi:main::@1->puta#1] -- call_phi_near ldx #5 jsr puta jmp __breturn @@ -287,7 +287,7 @@ main: { // [5] phi from main to puta [phi:main->puta] // [5] phi puta::pl#2 = 0 [phi:main->puta#0] -- vbuaa=vbuc1 lda #0 - // [5] phi puta::ph#2 = 4 [phi:main->puta#1] -- vbuxx=vbuc1 + // [5] phi puta::ph#2 = 4 [phi:main->puta#1] -- call_phi_near ldx #4 jsr puta // [2] phi from main to main::@1 [phi:main->main::@1] @@ -297,7 +297,7 @@ main: { // [5] phi from main::@1 to puta [phi:main::@1->puta] // [5] phi puta::pl#2 = $18 [phi:main::@1->puta#0] -- vbuaa=vbuc1 lda #$18 - // [5] phi puta::ph#2 = 5 [phi:main::@1->puta#1] -- vbuxx=vbuc1 + // [5] phi puta::ph#2 = 5 [phi:main::@1->puta#1] -- call_phi_near ldx #5 jsr puta // main::@return diff --git a/src/test/ref/inline-string-2.log b/src/test/ref/inline-string-2.log index cd5c7f730..1eaae4ccd 100644 --- a/src/test/ref/inline-string-2.log +++ b/src/test/ref/inline-string-2.log @@ -379,7 +379,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [5] phi print_msg::idx#2 = 1 [phi:main->print_msg#1] -- vbuxx=vbuc1 + // [5] phi print_msg::idx#2 = 1 [phi:main->print_msg#1] -- call_phi_near ldx #1 jsr print_msg // [2] phi from main to main::@1 [phi:main->main::@1] @@ -391,7 +391,7 @@ main: { // [5] phi from main::@1 to print_msg [phi:main::@1->print_msg] print_msg_from___b1: // [5] phi screen#20 = screen#15 [phi:main::@1->print_msg#0] -- register_copy - // [5] phi print_msg::idx#2 = 2 [phi:main::@1->print_msg#1] -- vbuxx=vbuc1 + // [5] phi print_msg::idx#2 = 2 [phi:main::@1->print_msg#1] -- call_phi_near ldx #2 jsr print_msg jmp __breturn @@ -432,7 +432,7 @@ print_msg: { __b2: // [9] print::msg#0 = print_msg::msg#3 // [10] call print - // [12] phi from print_msg::@2 to print [phi:print_msg::@2->print] + // [12] phi from print_msg::@2 to print [phi:print_msg::@2->print] -- call_phi_near print_from___b2: jsr print jmp __breturn @@ -570,7 +570,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [5] phi print_msg::idx#2 = 1 [phi:main->print_msg#1] -- vbuxx=vbuc1 + // [5] phi print_msg::idx#2 = 1 [phi:main->print_msg#1] -- call_phi_near ldx #1 jsr print_msg // [2] phi from main to main::@1 [phi:main->main::@1] @@ -579,7 +579,7 @@ main: { // [3] call print_msg // [5] phi from main::@1 to print_msg [phi:main::@1->print_msg] // [5] phi screen#20 = screen#15 [phi:main::@1->print_msg#0] -- register_copy - // [5] phi print_msg::idx#2 = 2 [phi:main::@1->print_msg#1] -- vbuxx=vbuc1 + // [5] phi print_msg::idx#2 = 2 [phi:main::@1->print_msg#1] -- call_phi_near ldx #2 jsr print_msg // main::@return @@ -616,7 +616,7 @@ print_msg: { // print(msg) // [9] print::msg#0 = print_msg::msg#3 // [10] call print - // [12] phi from print_msg::@2 to print [phi:print_msg::@2->print] + // [12] phi from print_msg::@2 to print [phi:print_msg::@2->print] -- call_phi_near jsr print // print_msg::@return // } diff --git a/src/test/ref/inline-string-4.log b/src/test/ref/inline-string-4.log index e46adc6d2..4880aa4b8 100644 --- a/src/test/ref/inline-string-4.log +++ b/src/test/ref/inline-string-4.log @@ -122,7 +122,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { .label dw = msg - // [1] call output + // [1] call output -- call_phi_near jsr output jmp __breturn // main::@return @@ -193,7 +193,7 @@ Score: 42 main: { .label dw = msg // output(dw) - // [1] call output + // [1] call output -- call_phi_near jsr output // main::@return // } diff --git a/src/test/ref/inline-string.log b/src/test/ref/inline-string.log index 5662d1b07..6c4793398 100644 --- a/src/test/ref/inline-string.log +++ b/src/test/ref/inline-string.log @@ -274,7 +274,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [7] phi print::msg#6 = msg1 [phi:main->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#6 = msg1 [phi:main->print#1] -- call_phi_near lda #msg1 @@ -289,7 +289,7 @@ main: { // [7] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- register_copy - // [7] phi print::msg#6 = main::msg2 [phi:main::@1->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#6 = main::msg2 [phi:main::@1->print#1] -- call_phi_near lda #msg2 @@ -304,7 +304,7 @@ main: { // [7] phi from main::@2 to print [phi:main::@2->print] print_from___b2: // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- register_copy - // [7] phi print::msg#6 = main::msg [phi:main::@2->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#6 = main::msg [phi:main::@2->print#1] -- call_phi_near lda #msg @@ -438,7 +438,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [7] phi print::msg#6 = msg1 [phi:main->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#6 = msg1 [phi:main->print#1] -- call_phi_near lda #msg1 @@ -450,7 +450,7 @@ main: { // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- register_copy - // [7] phi print::msg#6 = main::msg2 [phi:main::@1->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#6 = main::msg2 [phi:main::@1->print#1] -- call_phi_near lda #msg2 @@ -462,7 +462,7 @@ main: { // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- register_copy - // [7] phi print::msg#6 = main::msg [phi:main::@2->print#1] -- pbuz1=pbuc1 + // [7] phi print::msg#6 = main::msg [phi:main::@2->print#1] -- call_phi_near lda #msg diff --git a/src/test/ref/int-conversion.log b/src/test/ref/int-conversion.log index cd6b3338f..9bc0b5d39 100644 --- a/src/test/ref/int-conversion.log +++ b/src/test/ref/int-conversion.log @@ -1663,7 +1663,7 @@ main: { // main::@3 __b3: // [4] call testUnaryOperator - // [10] phi from main::@3 to testUnaryOperator [phi:main::@3->testUnaryOperator] + // [10] phi from main::@3 to testUnaryOperator [phi:main::@3->testUnaryOperator] -- call_phi_near testUnaryOperator_from___b3: jsr testUnaryOperator // [5] phi from main::@3 to main::@4 [phi:main::@3->main::@4] @@ -1672,7 +1672,7 @@ main: { // main::@4 __b4: // [6] call testBinaryOperator - // [23] phi from main::@4 to testBinaryOperator [phi:main::@4->testBinaryOperator] + // [23] phi from main::@4 to testBinaryOperator [phi:main::@4->testBinaryOperator] -- call_phi_near testBinaryOperator_from___b4: jsr testBinaryOperator jmp __breturn @@ -1707,7 +1707,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testUnaryOperator->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testUnaryOperator->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testUnaryOperator->assertType#2] -- call_phi_near ldy #TYPEID_CHAR jsr assertType // [12] phi from testUnaryOperator to testUnaryOperator::@1 [phi:testUnaryOperator->testUnaryOperator::@1] @@ -1722,7 +1722,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_SIGNED_CHAR [phi:testUnaryOperator::@1->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_SIGNED_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testUnaryOperator::@1->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testUnaryOperator::@1->assertType#2] -- call_phi_near ldy #TYPEID_SIGNED_CHAR jsr assertType // [14] phi from testUnaryOperator::@1 to testUnaryOperator::@2 [phi:testUnaryOperator::@1->testUnaryOperator::@2] @@ -1737,7 +1737,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testUnaryOperator::@2->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testUnaryOperator::@2->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testUnaryOperator::@2->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [16] phi from testUnaryOperator::@2 to testUnaryOperator::@3 [phi:testUnaryOperator::@2->testUnaryOperator::@3] @@ -1752,7 +1752,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testUnaryOperator::@3->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testUnaryOperator::@3->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testUnaryOperator::@3->assertType#2] -- call_phi_near ldy #TYPEID_INT jsr assertType // [18] phi from testUnaryOperator::@3 to testUnaryOperator::@4 [phi:testUnaryOperator::@3->testUnaryOperator::@4] @@ -1767,7 +1767,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testUnaryOperator::@4->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testUnaryOperator::@4->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testUnaryOperator::@4->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [20] phi from testUnaryOperator::@4 to testUnaryOperator::@5 [phi:testUnaryOperator::@4->testUnaryOperator::@5] @@ -1782,7 +1782,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testUnaryOperator::@5->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testUnaryOperator::@5->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testUnaryOperator::@5->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType jmp __breturn @@ -1802,7 +1802,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testBinaryOperator->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator->assertType#2] -- call_phi_near ldy #TYPEID_CHAR jsr assertType // [25] phi from testBinaryOperator to testBinaryOperator::@1 [phi:testBinaryOperator->testBinaryOperator::@1] @@ -1817,7 +1817,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testBinaryOperator::@1->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@1->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@1->assertType#2] -- call_phi_near ldy #TYPEID_CHAR jsr assertType // [27] phi from testBinaryOperator::@1 to testBinaryOperator::@2 [phi:testBinaryOperator::@1->testBinaryOperator::@2] @@ -1832,7 +1832,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@2->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@2->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@2->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [29] phi from testBinaryOperator::@2 to testBinaryOperator::@3 [phi:testBinaryOperator::@2->testBinaryOperator::@3] @@ -1847,7 +1847,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@3->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@3->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@3->assertType#2] -- call_phi_near ldy #TYPEID_INT jsr assertType // [31] phi from testBinaryOperator::@3 to testBinaryOperator::@4 [phi:testBinaryOperator::@3->testBinaryOperator::@4] @@ -1862,7 +1862,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@4->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@4->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@4->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [33] phi from testBinaryOperator::@4 to testBinaryOperator::@5 [phi:testBinaryOperator::@4->testBinaryOperator::@5] @@ -1877,7 +1877,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@5->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@5->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@5->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType jmp __b6 @@ -1893,7 +1893,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testBinaryOperator::@6->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@6->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@6->assertType#2] -- call_phi_near ldy #TYPEID_CHAR jsr assertType // [37] phi from testBinaryOperator::@6 to testBinaryOperator::@7 [phi:testBinaryOperator::@6->testBinaryOperator::@7] @@ -1908,7 +1908,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_SIGNED_CHAR [phi:testBinaryOperator::@7->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_SIGNED_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testBinaryOperator::@7->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testBinaryOperator::@7->assertType#2] -- call_phi_near ldy #TYPEID_SIGNED_CHAR jsr assertType // [39] phi from testBinaryOperator::@7 to testBinaryOperator::@8 [phi:testBinaryOperator::@7->testBinaryOperator::@8] @@ -1923,7 +1923,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@8->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@8->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@8->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [41] phi from testBinaryOperator::@8 to testBinaryOperator::@9 [phi:testBinaryOperator::@8->testBinaryOperator::@9] @@ -1938,7 +1938,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@9->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@9->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@9->assertType#2] -- call_phi_near ldy #TYPEID_INT jsr assertType // [43] phi from testBinaryOperator::@9 to testBinaryOperator::@10 [phi:testBinaryOperator::@9->testBinaryOperator::@10] @@ -1953,7 +1953,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@10->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@10->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@10->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [45] phi from testBinaryOperator::@10 to testBinaryOperator::@11 [phi:testBinaryOperator::@10->testBinaryOperator::@11] @@ -1968,7 +1968,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@11->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@11->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@11->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType jmp __b12 @@ -1984,7 +1984,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@12->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@12->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@12->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [49] phi from testBinaryOperator::@12 to testBinaryOperator::@13 [phi:testBinaryOperator::@12->testBinaryOperator::@13] @@ -1999,7 +1999,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@13->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@13->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@13->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [51] phi from testBinaryOperator::@13 to testBinaryOperator::@14 [phi:testBinaryOperator::@13->testBinaryOperator::@14] @@ -2014,7 +2014,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@14->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@14->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@14->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [53] phi from testBinaryOperator::@14 to testBinaryOperator::@15 [phi:testBinaryOperator::@14->testBinaryOperator::@15] @@ -2029,7 +2029,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@15->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@15->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@15->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [55] phi from testBinaryOperator::@15 to testBinaryOperator::@16 [phi:testBinaryOperator::@15->testBinaryOperator::@16] @@ -2044,7 +2044,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@16->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@16->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@16->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [57] phi from testBinaryOperator::@16 to testBinaryOperator::@17 [phi:testBinaryOperator::@16->testBinaryOperator::@17] @@ -2059,7 +2059,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@17->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@17->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@17->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType // [59] phi from testBinaryOperator::@17 to testBinaryOperator::@18 [phi:testBinaryOperator::@17->testBinaryOperator::@18] @@ -2076,7 +2076,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@18->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@18->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@18->assertType#2] -- call_phi_near ldy #TYPEID_INT jsr assertType // [61] phi from testBinaryOperator::@18 to testBinaryOperator::@19 [phi:testBinaryOperator::@18->testBinaryOperator::@19] @@ -2091,7 +2091,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@19->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@19->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@19->assertType#2] -- call_phi_near ldy #TYPEID_INT jsr assertType // [63] phi from testBinaryOperator::@19 to testBinaryOperator::@20 [phi:testBinaryOperator::@19->testBinaryOperator::@20] @@ -2106,7 +2106,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@20->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@20->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@20->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [65] phi from testBinaryOperator::@20 to testBinaryOperator::@21 [phi:testBinaryOperator::@20->testBinaryOperator::@21] @@ -2121,7 +2121,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@21->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@21->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@21->assertType#2] -- call_phi_near ldy #TYPEID_INT jsr assertType // [67] phi from testBinaryOperator::@21 to testBinaryOperator::@22 [phi:testBinaryOperator::@21->testBinaryOperator::@22] @@ -2136,7 +2136,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@22->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@22->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@22->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [69] phi from testBinaryOperator::@22 to testBinaryOperator::@23 [phi:testBinaryOperator::@22->testBinaryOperator::@23] @@ -2151,7 +2151,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@23->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@23->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@23->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType jmp __b24 @@ -2167,7 +2167,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@24->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@24->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@24->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [73] phi from testBinaryOperator::@24 to testBinaryOperator::@25 [phi:testBinaryOperator::@24->testBinaryOperator::@25] @@ -2182,7 +2182,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@25->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@25->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@25->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [75] phi from testBinaryOperator::@25 to testBinaryOperator::@26 [phi:testBinaryOperator::@25->testBinaryOperator::@26] @@ -2197,7 +2197,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@26->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@26->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@26->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [77] phi from testBinaryOperator::@26 to testBinaryOperator::@27 [phi:testBinaryOperator::@26->testBinaryOperator::@27] @@ -2212,7 +2212,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@27->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@27->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@27->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [79] phi from testBinaryOperator::@27 to testBinaryOperator::@28 [phi:testBinaryOperator::@27->testBinaryOperator::@28] @@ -2227,7 +2227,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@28->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@28->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@28->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [81] phi from testBinaryOperator::@28 to testBinaryOperator::@29 [phi:testBinaryOperator::@28->testBinaryOperator::@29] @@ -2242,7 +2242,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@29->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@29->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@29->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType jmp __b30 @@ -2258,7 +2258,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@30->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@30->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@30->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType // [85] phi from testBinaryOperator::@30 to testBinaryOperator::@31 [phi:testBinaryOperator::@30->testBinaryOperator::@31] @@ -2273,7 +2273,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@31->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@31->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@31->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType // [87] phi from testBinaryOperator::@31 to testBinaryOperator::@32 [phi:testBinaryOperator::@31->testBinaryOperator::@32] @@ -2288,7 +2288,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@32->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@32->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@32->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType // [89] phi from testBinaryOperator::@32 to testBinaryOperator::@33 [phi:testBinaryOperator::@32->testBinaryOperator::@33] @@ -2303,7 +2303,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@33->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@33->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@33->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType // [91] phi from testBinaryOperator::@33 to testBinaryOperator::@34 [phi:testBinaryOperator::@33->testBinaryOperator::@34] @@ -2318,7 +2318,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@34->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@34->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@34->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [93] phi from testBinaryOperator::@34 to testBinaryOperator::@35 [phi:testBinaryOperator::@34->testBinaryOperator::@35] @@ -2333,7 +2333,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@35->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@35->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@35->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType jmp __breturn @@ -2695,13 +2695,13 @@ main: { // main::@3 // testUnaryOperator() // [4] call testUnaryOperator - // [10] phi from main::@3 to testUnaryOperator [phi:main::@3->testUnaryOperator] + // [10] phi from main::@3 to testUnaryOperator [phi:main::@3->testUnaryOperator] -- call_phi_near jsr testUnaryOperator // [5] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // testBinaryOperator() // [6] call testBinaryOperator - // [23] phi from main::@4 to testBinaryOperator [phi:main::@4->testBinaryOperator] + // [23] phi from main::@4 to testBinaryOperator [phi:main::@4->testBinaryOperator] -- call_phi_near jsr testBinaryOperator // main::@return // } @@ -2735,7 +2735,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testUnaryOperator->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testUnaryOperator->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testUnaryOperator->assertType#2] -- call_phi_near tay jsr assertType // [12] phi from testUnaryOperator to testUnaryOperator::@1 [phi:testUnaryOperator->testUnaryOperator::@1] @@ -2747,7 +2747,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_SIGNED_CHAR [phi:testUnaryOperator::@1->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_SIGNED_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testUnaryOperator::@1->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testUnaryOperator::@1->assertType#2] -- call_phi_near tay jsr assertType // [14] phi from testUnaryOperator::@1 to testUnaryOperator::@2 [phi:testUnaryOperator::@1->testUnaryOperator::@2] @@ -2759,7 +2759,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testUnaryOperator::@2->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testUnaryOperator::@2->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testUnaryOperator::@2->assertType#2] -- call_phi_near tay jsr assertType // [16] phi from testUnaryOperator::@2 to testUnaryOperator::@3 [phi:testUnaryOperator::@2->testUnaryOperator::@3] @@ -2771,7 +2771,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testUnaryOperator::@3->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testUnaryOperator::@3->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testUnaryOperator::@3->assertType#2] -- call_phi_near tay jsr assertType // [18] phi from testUnaryOperator::@3 to testUnaryOperator::@4 [phi:testUnaryOperator::@3->testUnaryOperator::@4] @@ -2783,7 +2783,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testUnaryOperator::@4->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testUnaryOperator::@4->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testUnaryOperator::@4->assertType#2] -- call_phi_near tay jsr assertType // [20] phi from testUnaryOperator::@4 to testUnaryOperator::@5 [phi:testUnaryOperator::@4->testUnaryOperator::@5] @@ -2795,7 +2795,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testUnaryOperator::@5->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testUnaryOperator::@5->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testUnaryOperator::@5->assertType#2] -- call_phi_near tay jsr assertType // testUnaryOperator::@return @@ -2814,7 +2814,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testBinaryOperator->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator->assertType#2] -- call_phi_near tay jsr assertType // [25] phi from testBinaryOperator to testBinaryOperator::@1 [phi:testBinaryOperator->testBinaryOperator::@1] @@ -2826,7 +2826,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testBinaryOperator::@1->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@1->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@1->assertType#2] -- call_phi_near tay jsr assertType // [27] phi from testBinaryOperator::@1 to testBinaryOperator::@2 [phi:testBinaryOperator::@1->testBinaryOperator::@2] @@ -2838,7 +2838,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@2->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@2->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@2->assertType#2] -- call_phi_near tay jsr assertType // [29] phi from testBinaryOperator::@2 to testBinaryOperator::@3 [phi:testBinaryOperator::@2->testBinaryOperator::@3] @@ -2850,7 +2850,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@3->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@3->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@3->assertType#2] -- call_phi_near tay jsr assertType // [31] phi from testBinaryOperator::@3 to testBinaryOperator::@4 [phi:testBinaryOperator::@3->testBinaryOperator::@4] @@ -2862,7 +2862,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@4->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@4->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@4->assertType#2] -- call_phi_near tay jsr assertType // [33] phi from testBinaryOperator::@4 to testBinaryOperator::@5 [phi:testBinaryOperator::@4->testBinaryOperator::@5] @@ -2874,7 +2874,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@5->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@5->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@5->assertType#2] -- call_phi_near tay jsr assertType // testBinaryOperator::@6 @@ -2889,7 +2889,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testBinaryOperator::@6->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@6->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@6->assertType#2] -- call_phi_near tay jsr assertType // [37] phi from testBinaryOperator::@6 to testBinaryOperator::@7 [phi:testBinaryOperator::@6->testBinaryOperator::@7] @@ -2901,7 +2901,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_SIGNED_CHAR [phi:testBinaryOperator::@7->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_SIGNED_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testBinaryOperator::@7->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testBinaryOperator::@7->assertType#2] -- call_phi_near tay jsr assertType // [39] phi from testBinaryOperator::@7 to testBinaryOperator::@8 [phi:testBinaryOperator::@7->testBinaryOperator::@8] @@ -2913,7 +2913,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@8->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@8->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@8->assertType#2] -- call_phi_near tay jsr assertType // [41] phi from testBinaryOperator::@8 to testBinaryOperator::@9 [phi:testBinaryOperator::@8->testBinaryOperator::@9] @@ -2925,7 +2925,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@9->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@9->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@9->assertType#2] -- call_phi_near tay jsr assertType // [43] phi from testBinaryOperator::@9 to testBinaryOperator::@10 [phi:testBinaryOperator::@9->testBinaryOperator::@10] @@ -2937,7 +2937,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@10->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@10->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@10->assertType#2] -- call_phi_near tay jsr assertType // [45] phi from testBinaryOperator::@10 to testBinaryOperator::@11 [phi:testBinaryOperator::@10->testBinaryOperator::@11] @@ -2949,7 +2949,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@11->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@11->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@11->assertType#2] -- call_phi_near tay jsr assertType // testBinaryOperator::@12 @@ -2964,7 +2964,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@12->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@12->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@12->assertType#2] -- call_phi_near tay jsr assertType // [49] phi from testBinaryOperator::@12 to testBinaryOperator::@13 [phi:testBinaryOperator::@12->testBinaryOperator::@13] @@ -2976,7 +2976,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@13->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@13->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@13->assertType#2] -- call_phi_near tay jsr assertType // [51] phi from testBinaryOperator::@13 to testBinaryOperator::@14 [phi:testBinaryOperator::@13->testBinaryOperator::@14] @@ -2988,7 +2988,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@14->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@14->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@14->assertType#2] -- call_phi_near tay jsr assertType // [53] phi from testBinaryOperator::@14 to testBinaryOperator::@15 [phi:testBinaryOperator::@14->testBinaryOperator::@15] @@ -3000,7 +3000,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@15->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@15->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@15->assertType#2] -- call_phi_near tay jsr assertType // [55] phi from testBinaryOperator::@15 to testBinaryOperator::@16 [phi:testBinaryOperator::@15->testBinaryOperator::@16] @@ -3012,7 +3012,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@16->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@16->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@16->assertType#2] -- call_phi_near tay jsr assertType // [57] phi from testBinaryOperator::@16 to testBinaryOperator::@17 [phi:testBinaryOperator::@16->testBinaryOperator::@17] @@ -3024,7 +3024,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@17->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@17->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@17->assertType#2] -- call_phi_near tay jsr assertType // [59] phi from testBinaryOperator::@17 to testBinaryOperator::@18 [phi:testBinaryOperator::@17->testBinaryOperator::@18] @@ -3038,7 +3038,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@18->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@18->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@18->assertType#2] -- call_phi_near tay jsr assertType // [61] phi from testBinaryOperator::@18 to testBinaryOperator::@19 [phi:testBinaryOperator::@18->testBinaryOperator::@19] @@ -3050,7 +3050,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@19->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@19->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@19->assertType#2] -- call_phi_near tay jsr assertType // [63] phi from testBinaryOperator::@19 to testBinaryOperator::@20 [phi:testBinaryOperator::@19->testBinaryOperator::@20] @@ -3062,7 +3062,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@20->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@20->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@20->assertType#2] -- call_phi_near tay jsr assertType // [65] phi from testBinaryOperator::@20 to testBinaryOperator::@21 [phi:testBinaryOperator::@20->testBinaryOperator::@21] @@ -3074,7 +3074,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@21->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@21->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@21->assertType#2] -- call_phi_near tay jsr assertType // [67] phi from testBinaryOperator::@21 to testBinaryOperator::@22 [phi:testBinaryOperator::@21->testBinaryOperator::@22] @@ -3086,7 +3086,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@22->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@22->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@22->assertType#2] -- call_phi_near tay jsr assertType // [69] phi from testBinaryOperator::@22 to testBinaryOperator::@23 [phi:testBinaryOperator::@22->testBinaryOperator::@23] @@ -3098,7 +3098,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@23->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@23->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@23->assertType#2] -- call_phi_near tay jsr assertType // testBinaryOperator::@24 @@ -3113,7 +3113,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@24->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@24->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@24->assertType#2] -- call_phi_near tay jsr assertType // [73] phi from testBinaryOperator::@24 to testBinaryOperator::@25 [phi:testBinaryOperator::@24->testBinaryOperator::@25] @@ -3125,7 +3125,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@25->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@25->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@25->assertType#2] -- call_phi_near tay jsr assertType // [75] phi from testBinaryOperator::@25 to testBinaryOperator::@26 [phi:testBinaryOperator::@25->testBinaryOperator::@26] @@ -3137,7 +3137,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@26->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@26->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@26->assertType#2] -- call_phi_near tay jsr assertType // [77] phi from testBinaryOperator::@26 to testBinaryOperator::@27 [phi:testBinaryOperator::@26->testBinaryOperator::@27] @@ -3149,7 +3149,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@27->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@27->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@27->assertType#2] -- call_phi_near tay jsr assertType // [79] phi from testBinaryOperator::@27 to testBinaryOperator::@28 [phi:testBinaryOperator::@27->testBinaryOperator::@28] @@ -3161,7 +3161,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@28->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@28->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@28->assertType#2] -- call_phi_near tay jsr assertType // [81] phi from testBinaryOperator::@28 to testBinaryOperator::@29 [phi:testBinaryOperator::@28->testBinaryOperator::@29] @@ -3173,7 +3173,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@29->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@29->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@29->assertType#2] -- call_phi_near tay jsr assertType // testBinaryOperator::@30 @@ -3188,7 +3188,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@30->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@30->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@30->assertType#2] -- call_phi_near tay jsr assertType // [85] phi from testBinaryOperator::@30 to testBinaryOperator::@31 [phi:testBinaryOperator::@30->testBinaryOperator::@31] @@ -3200,7 +3200,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@31->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@31->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@31->assertType#2] -- call_phi_near tay jsr assertType // [87] phi from testBinaryOperator::@31 to testBinaryOperator::@32 [phi:testBinaryOperator::@31->testBinaryOperator::@32] @@ -3212,7 +3212,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@32->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@32->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@32->assertType#2] -- call_phi_near tay jsr assertType // [89] phi from testBinaryOperator::@32 to testBinaryOperator::@33 [phi:testBinaryOperator::@32->testBinaryOperator::@33] @@ -3224,7 +3224,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@33->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@33->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@33->assertType#2] -- call_phi_near tay jsr assertType // [91] phi from testBinaryOperator::@33 to testBinaryOperator::@34 [phi:testBinaryOperator::@33->testBinaryOperator::@34] @@ -3236,7 +3236,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@34->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@34->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@34->assertType#2] -- call_phi_near tay jsr assertType // [93] phi from testBinaryOperator::@34 to testBinaryOperator::@35 [phi:testBinaryOperator::@34->testBinaryOperator::@35] @@ -3248,7 +3248,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@35->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@35->assertType#2] -- vbuyy=vbuc1 + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@35->assertType#2] -- call_phi_near tay jsr assertType // testBinaryOperator::@return diff --git a/src/test/ref/int-literals.log b/src/test/ref/int-literals.log index 7e001ef35..21f38a123 100644 --- a/src/test/ref/int-literals.log +++ b/src/test/ref/int-literals.log @@ -836,7 +836,7 @@ main: { // main::@3 __b3: // [4] call testSimpleTypes - // [8] phi from main::@3 to testSimpleTypes [phi:main::@3->testSimpleTypes] + // [8] phi from main::@3 to testSimpleTypes [phi:main::@3->testSimpleTypes] -- call_phi_near testSimpleTypes_from___b3: jsr testSimpleTypes jmp __breturn @@ -871,7 +871,7 @@ testSimpleTypes: { sta.z idx // [41] phi assertType::t2#16 = TYPEID_CHAR [phi:testSimpleTypes->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_CHAR - // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes->assertType#2] -- call_phi_near ldx #TYPEID_CHAR jsr assertType // [10] phi from testSimpleTypes to testSimpleTypes::@1 [phi:testSimpleTypes->testSimpleTypes::@1] @@ -885,7 +885,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@1->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_CHAR [phi:testSimpleTypes::@1->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_CHAR - // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes::@1->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes::@1->assertType#2] -- call_phi_near ldx #TYPEID_CHAR jsr assertType // [12] phi from testSimpleTypes::@1 to testSimpleTypes::@2 [phi:testSimpleTypes::@1->testSimpleTypes::@2] @@ -899,7 +899,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@2->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@2->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_SIGNED_CHAR - // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@2->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@2->assertType#2] -- call_phi_near ldx #TYPEID_SIGNED_CHAR jsr assertType // [14] phi from testSimpleTypes::@2 to testSimpleTypes::@3 [phi:testSimpleTypes::@2->testSimpleTypes::@3] @@ -913,7 +913,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@3->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@3->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_SIGNED_CHAR - // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@3->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@3->assertType#2] -- call_phi_near ldx #TYPEID_SIGNED_CHAR jsr assertType // [16] phi from testSimpleTypes::@3 to testSimpleTypes::@4 [phi:testSimpleTypes::@3->testSimpleTypes::@4] @@ -927,7 +927,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@4->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@4->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@4->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@4->assertType#2] -- call_phi_near ldx #TYPEID_UNSIGNED_INT jsr assertType // [18] phi from testSimpleTypes::@4 to testSimpleTypes::@5 [phi:testSimpleTypes::@4->testSimpleTypes::@5] @@ -941,7 +941,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@5->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@5->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@5->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@5->assertType#2] -- call_phi_near ldx #TYPEID_UNSIGNED_INT jsr assertType // [20] phi from testSimpleTypes::@5 to testSimpleTypes::@6 [phi:testSimpleTypes::@5->testSimpleTypes::@6] @@ -955,7 +955,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@6->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@6->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@6->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@6->assertType#2] -- call_phi_near ldx #TYPEID_UNSIGNED_INT jsr assertType // [22] phi from testSimpleTypes::@6 to testSimpleTypes::@7 [phi:testSimpleTypes::@6->testSimpleTypes::@7] @@ -969,7 +969,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@7->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_INT [phi:testSimpleTypes::@7->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_INT - // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@7->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@7->assertType#2] -- call_phi_near ldx #TYPEID_INT jsr assertType // [24] phi from testSimpleTypes::@7 to testSimpleTypes::@8 [phi:testSimpleTypes::@7->testSimpleTypes::@8] @@ -983,7 +983,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@8->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_INT [phi:testSimpleTypes::@8->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_INT - // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@8->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@8->assertType#2] -- call_phi_near ldx #TYPEID_INT jsr assertType // [26] phi from testSimpleTypes::@8 to testSimpleTypes::@9 [phi:testSimpleTypes::@8->testSimpleTypes::@9] @@ -997,7 +997,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@9->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_INT [phi:testSimpleTypes::@9->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_INT - // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@9->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@9->assertType#2] -- call_phi_near ldx #TYPEID_INT jsr assertType // [28] phi from testSimpleTypes::@9 to testSimpleTypes::@10 [phi:testSimpleTypes::@9->testSimpleTypes::@10] @@ -1011,7 +1011,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@10->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@10->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@10->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@10->assertType#2] -- call_phi_near ldx #TYPEID_UNSIGNED_LONG jsr assertType // [30] phi from testSimpleTypes::@10 to testSimpleTypes::@11 [phi:testSimpleTypes::@10->testSimpleTypes::@11] @@ -1025,7 +1025,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@11->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@11->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@11->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@11->assertType#2] -- call_phi_near ldx #TYPEID_UNSIGNED_LONG jsr assertType // [32] phi from testSimpleTypes::@11 to testSimpleTypes::@12 [phi:testSimpleTypes::@11->testSimpleTypes::@12] @@ -1039,7 +1039,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@12->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_LONG [phi:testSimpleTypes::@12->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_LONG - // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@12->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@12->assertType#2] -- call_phi_near ldx #TYPEID_LONG jsr assertType // [34] phi from testSimpleTypes::@12 to testSimpleTypes::@13 [phi:testSimpleTypes::@12->testSimpleTypes::@13] @@ -1053,7 +1053,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@13->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_LONG [phi:testSimpleTypes::@13->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_LONG - // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@13->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@13->assertType#2] -- call_phi_near ldx #TYPEID_LONG jsr assertType // [36] phi from testSimpleTypes::@13 to testSimpleTypes::@14 [phi:testSimpleTypes::@13->testSimpleTypes::@14] @@ -1067,7 +1067,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@14->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_LONG [phi:testSimpleTypes::@14->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_LONG - // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@14->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@14->assertType#2] -- call_phi_near ldx #TYPEID_LONG jsr assertType // [38] phi from testSimpleTypes::@14 to testSimpleTypes::@15 [phi:testSimpleTypes::@14->testSimpleTypes::@15] @@ -1081,7 +1081,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@15->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@15->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@15->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@15->assertType#2] -- call_phi_near ldx #TYPEID_UNSIGNED_INT jsr assertType jmp __breturn @@ -1296,7 +1296,7 @@ main: { // main::@3 // testSimpleTypes() // [4] call testSimpleTypes - // [8] phi from main::@3 to testSimpleTypes [phi:main::@3->testSimpleTypes] + // [8] phi from main::@3 to testSimpleTypes [phi:main::@3->testSimpleTypes] -- call_phi_near jsr testSimpleTypes // main::@return // } @@ -1330,7 +1330,7 @@ testSimpleTypes: { sta.z idx // [41] phi assertType::t2#16 = TYPEID_CHAR [phi:testSimpleTypes->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_CHAR - // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes->assertType#2] -- call_phi_near ldx #TYPEID_CHAR jsr assertType // [10] phi from testSimpleTypes to testSimpleTypes::@1 [phi:testSimpleTypes->testSimpleTypes::@1] @@ -1341,7 +1341,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@1->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_CHAR [phi:testSimpleTypes::@1->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_CHAR - // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes::@1->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes::@1->assertType#2] -- call_phi_near ldx #TYPEID_CHAR jsr assertType // [12] phi from testSimpleTypes::@1 to testSimpleTypes::@2 [phi:testSimpleTypes::@1->testSimpleTypes::@2] @@ -1352,7 +1352,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@2->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@2->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_SIGNED_CHAR - // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@2->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@2->assertType#2] -- call_phi_near ldx #TYPEID_SIGNED_CHAR jsr assertType // [14] phi from testSimpleTypes::@2 to testSimpleTypes::@3 [phi:testSimpleTypes::@2->testSimpleTypes::@3] @@ -1363,7 +1363,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@3->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@3->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_SIGNED_CHAR - // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@3->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@3->assertType#2] -- call_phi_near ldx #TYPEID_SIGNED_CHAR jsr assertType // [16] phi from testSimpleTypes::@3 to testSimpleTypes::@4 [phi:testSimpleTypes::@3->testSimpleTypes::@4] @@ -1374,7 +1374,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@4->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@4->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@4->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@4->assertType#2] -- call_phi_near ldx #TYPEID_UNSIGNED_INT jsr assertType // [18] phi from testSimpleTypes::@4 to testSimpleTypes::@5 [phi:testSimpleTypes::@4->testSimpleTypes::@5] @@ -1385,7 +1385,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@5->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@5->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@5->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@5->assertType#2] -- call_phi_near ldx #TYPEID_UNSIGNED_INT jsr assertType // [20] phi from testSimpleTypes::@5 to testSimpleTypes::@6 [phi:testSimpleTypes::@5->testSimpleTypes::@6] @@ -1396,7 +1396,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@6->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@6->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@6->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@6->assertType#2] -- call_phi_near ldx #TYPEID_UNSIGNED_INT jsr assertType // [22] phi from testSimpleTypes::@6 to testSimpleTypes::@7 [phi:testSimpleTypes::@6->testSimpleTypes::@7] @@ -1407,7 +1407,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@7->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_INT [phi:testSimpleTypes::@7->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_INT - // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@7->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@7->assertType#2] -- call_phi_near ldx #TYPEID_INT jsr assertType // [24] phi from testSimpleTypes::@7 to testSimpleTypes::@8 [phi:testSimpleTypes::@7->testSimpleTypes::@8] @@ -1418,7 +1418,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@8->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_INT [phi:testSimpleTypes::@8->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_INT - // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@8->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@8->assertType#2] -- call_phi_near ldx #TYPEID_INT jsr assertType // [26] phi from testSimpleTypes::@8 to testSimpleTypes::@9 [phi:testSimpleTypes::@8->testSimpleTypes::@9] @@ -1429,7 +1429,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@9->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_INT [phi:testSimpleTypes::@9->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_INT - // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@9->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@9->assertType#2] -- call_phi_near ldx #TYPEID_INT jsr assertType // [28] phi from testSimpleTypes::@9 to testSimpleTypes::@10 [phi:testSimpleTypes::@9->testSimpleTypes::@10] @@ -1440,7 +1440,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@10->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@10->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@10->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@10->assertType#2] -- call_phi_near ldx #TYPEID_UNSIGNED_LONG jsr assertType // [30] phi from testSimpleTypes::@10 to testSimpleTypes::@11 [phi:testSimpleTypes::@10->testSimpleTypes::@11] @@ -1451,7 +1451,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@11->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@11->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@11->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@11->assertType#2] -- call_phi_near ldx #TYPEID_UNSIGNED_LONG jsr assertType // [32] phi from testSimpleTypes::@11 to testSimpleTypes::@12 [phi:testSimpleTypes::@11->testSimpleTypes::@12] @@ -1462,7 +1462,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@12->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_LONG [phi:testSimpleTypes::@12->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_LONG - // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@12->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@12->assertType#2] -- call_phi_near ldx #TYPEID_LONG jsr assertType // [34] phi from testSimpleTypes::@12 to testSimpleTypes::@13 [phi:testSimpleTypes::@12->testSimpleTypes::@13] @@ -1473,7 +1473,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@13->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_LONG [phi:testSimpleTypes::@13->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_LONG - // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@13->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@13->assertType#2] -- call_phi_near ldx #TYPEID_LONG jsr assertType // [36] phi from testSimpleTypes::@13 to testSimpleTypes::@14 [phi:testSimpleTypes::@13->testSimpleTypes::@14] @@ -1484,7 +1484,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@14->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_LONG [phi:testSimpleTypes::@14->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_LONG - // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@14->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@14->assertType#2] -- call_phi_near ldx #TYPEID_LONG jsr assertType // [38] phi from testSimpleTypes::@14 to testSimpleTypes::@15 [phi:testSimpleTypes::@14->testSimpleTypes::@15] @@ -1495,7 +1495,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@15->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@15->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@15->assertType#2] -- vbuxx=vbuc1 + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@15->assertType#2] -- call_phi_near ldx #TYPEID_UNSIGNED_INT jsr assertType // testSimpleTypes::@return diff --git a/src/test/ref/intermediates-simple.log b/src/test/ref/intermediates-simple.log index e1c27b801..e7f494d08 100644 --- a/src/test/ref/intermediates-simple.log +++ b/src/test/ref/intermediates-simple.log @@ -427,7 +427,7 @@ main: { // [10] sum::a#0 = main::i#2 -- vbuaa=vbuz1 lda.z i // [11] sum::b#0 = main::j#2 - // [12] call sum + // [12] call sum -- call_phi_near jsr sum // [13] sum::return#0 = sum::return#1 jmp __b5 @@ -593,7 +593,7 @@ main: { // [10] sum::a#0 = main::i#2 -- vbuaa=vbuz1 lda.z i // [11] sum::b#0 = main::j#2 - // [12] call sum + // [12] call sum -- call_phi_near jsr sum // [13] sum::return#0 = sum::return#1 // main::@5 diff --git a/src/test/ref/intermediates-struct.log b/src/test/ref/intermediates-struct.log index e5d380194..87e4ff885 100644 --- a/src/test/ref/intermediates-struct.log +++ b/src/test/ref/intermediates-struct.log @@ -322,7 +322,7 @@ main: { sum_from_main: // [8] phi sum::b#2 = 2 [phi:main->sum#0] -- vbuxx=vbuc1 ldx #2 - // [8] phi sum::a#2 = 1 [phi:main->sum#1] -- vbuaa=vbuc1 + // [8] phi sum::a#2 = 1 [phi:main->sum#1] -- call_phi_near lda #1 jsr sum jmp __b1 @@ -343,7 +343,7 @@ main: { sum_from___b1: // [8] phi sum::b#2 = 4 [phi:main::@1->sum#0] -- vbuxx=vbuc1 ldx #4 - // [8] phi sum::a#2 = 3 [phi:main::@1->sum#1] -- vbuaa=vbuc1 + // [8] phi sum::a#2 = 3 [phi:main::@1->sum#1] -- call_phi_near lda #3 jsr sum jmp __b2 @@ -461,7 +461,7 @@ main: { // [8] phi from main to sum [phi:main->sum] // [8] phi sum::b#2 = 2 [phi:main->sum#0] -- vbuxx=vbuc1 ldx #2 - // [8] phi sum::a#2 = 1 [phi:main->sum#1] -- vbuaa=vbuc1 + // [8] phi sum::a#2 = 1 [phi:main->sum#1] -- call_phi_near lda #1 jsr sum // main::@1 @@ -482,7 +482,7 @@ main: { // [8] phi from main::@1 to sum [phi:main::@1->sum] // [8] phi sum::b#2 = 4 [phi:main::@1->sum#0] -- vbuxx=vbuc1 ldx #4 - // [8] phi sum::a#2 = 3 [phi:main::@1->sum#1] -- vbuaa=vbuc1 + // [8] phi sum::a#2 = 3 [phi:main::@1->sum#1] -- call_phi_near lda #3 jsr sum // main::@2 diff --git a/src/test/ref/interrupt-volatile-reuse-problem1.log b/src/test/ref/interrupt-volatile-reuse-problem1.log index 60e6229f4..8888465a9 100644 --- a/src/test/ref/interrupt-volatile-reuse-problem1.log +++ b/src/test/ref/interrupt-volatile-reuse-problem1.log @@ -184,7 +184,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [4] call main + // [4] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -289,7 +289,7 @@ __start: { sta.z col2 // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [4] call main + // [4] call main -- call_phi_near jsr main // __start::@return // [5] return diff --git a/src/test/ref/interrupt-volatile-reuse-problem2.log b/src/test/ref/interrupt-volatile-reuse-problem2.log index 3922bcedf..02cc05904 100644 --- a/src/test/ref/interrupt-volatile-reuse-problem2.log +++ b/src/test/ref/interrupt-volatile-reuse-problem2.log @@ -360,7 +360,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -567,7 +567,7 @@ __start: { sta.z col1 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/irq-hardware-clobber-jsr.log b/src/test/ref/irq-hardware-clobber-jsr.log index c4418d11e..879ac1b96 100644 --- a/src/test/ref/irq-hardware-clobber-jsr.log +++ b/src/test/ref/irq-hardware-clobber-jsr.log @@ -271,7 +271,7 @@ ASSEMBLER BEFORE OPTIMIZATION irq: { // interrupt(isr_hardware_clobber_entry) -- isr_hardware_all_entry sta rega+1 - // [1] call do_irq + // [1] call do_irq -- call_phi_near jsr do_irq jmp __breturn // irq::@return @@ -455,7 +455,7 @@ irq: { // interrupt(isr_hardware_clobber_entry) -- isr_hardware_all_entry sta rega+1 // do_irq() - // [1] call do_irq + // [1] call do_irq -- call_phi_near jsr do_irq // irq::@return // } diff --git a/src/test/ref/irq-idx-problem.log b/src/test/ref/irq-idx-problem.log index 2b82b1652..b1e8a310d 100644 --- a/src/test/ref/irq-idx-problem.log +++ b/src/test/ref/irq-idx-problem.log @@ -407,7 +407,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -649,7 +649,7 @@ __start: { sta.z irq_idx // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/irq-local-var-overlap-problem.log b/src/test/ref/irq-local-var-overlap-problem.log index e6cb4199f..d373a75d5 100644 --- a/src/test/ref/irq-local-var-overlap-problem.log +++ b/src/test/ref/irq-local-var-overlap-problem.log @@ -977,7 +977,7 @@ irq: { // [6] *FGCOL = irq::$3 -- _deref_pbuc1=vbuaa sta FGCOL // [7] call sub_irq - // [38] phi from irq::@3 to sub_irq [phi:irq::@3->sub_irq] + // [38] phi from irq::@3 to sub_irq [phi:irq::@3->sub_irq] -- call_phi_near sub_irq_from___b3: jsr sub_irq jmp __b7 @@ -1096,7 +1096,7 @@ main: { // [29] *FGCOL = main::$1 -- _deref_pbuc1=vbuaa sta FGCOL // [30] call sub_main - // [52] phi from main::@3 to sub_main [phi:main::@3->sub_main] + // [52] phi from main::@3 to sub_main [phi:main::@3->sub_main] -- call_phi_near sub_main_from___b3: jsr sub_main jmp __b6 @@ -1554,7 +1554,7 @@ irq: { sta FGCOL // sub_irq() // [7] call sub_irq - // [38] phi from irq::@3 to sub_irq [phi:irq::@3->sub_irq] + // [38] phi from irq::@3 to sub_irq [phi:irq::@3->sub_irq] -- call_phi_near jsr sub_irq // irq::@7 // for( byte k: 0..10 ) @@ -1667,7 +1667,7 @@ main: { sta FGCOL // sub_main() // [30] call sub_main - // [52] phi from main::@3 to sub_main [phi:main::@3->sub_main] + // [52] phi from main::@3 to sub_main [phi:main::@3->sub_main] -- call_phi_near jsr sub_main // main::@6 // for( byte k: 0..10 ) diff --git a/src/test/ref/keyboard-glitch.log b/src/test/ref/keyboard-glitch.log index 4d3548707..81329ce03 100644 --- a/src/test/ref/keyboard-glitch.log +++ b/src/test/ref/keyboard-glitch.log @@ -670,7 +670,7 @@ main: { // main::@1 __b1: // [2] call menu - // [3] phi from main::@1 to menu [phi:main::@1->menu] + // [3] phi from main::@1 to menu [phi:main::@1->menu] -- call_phi_near menu_from___b1: jsr menu jmp __b1_from___b1 @@ -686,7 +686,7 @@ menu: { // [5] call keyboard_key_pressed // [27] phi from menu::@1 to keyboard_key_pressed [phi:menu::@1->keyboard_key_pressed] keyboard_key_pressed_from___b1: - // [27] phi keyboard_key_pressed::key#4 = KEY_C [phi:menu::@1->keyboard_key_pressed#0] -- vbuxx=vbuc1 + // [27] phi keyboard_key_pressed::key#4 = KEY_C [phi:menu::@1->keyboard_key_pressed#0] -- call_phi_near ldx #KEY_C jsr keyboard_key_pressed // [6] keyboard_key_pressed::return#2 = keyboard_key_pressed::return#0 @@ -702,7 +702,7 @@ menu: { jmp __b5 // menu::@5 __b5: - // [10] call pressed + // [10] call pressed -- call_phi_near jsr pressed jmp __breturn // menu::@return @@ -717,7 +717,7 @@ menu: { // [13] call keyboard_key_pressed // [27] phi from menu::@2 to keyboard_key_pressed [phi:menu::@2->keyboard_key_pressed] keyboard_key_pressed_from___b2: - // [27] phi keyboard_key_pressed::key#4 = KEY_I [phi:menu::@2->keyboard_key_pressed#0] -- vbuxx=vbuc1 + // [27] phi keyboard_key_pressed::key#4 = KEY_I [phi:menu::@2->keyboard_key_pressed#0] -- call_phi_near ldx #KEY_I jsr keyboard_key_pressed // [14] keyboard_key_pressed::return#3 = keyboard_key_pressed::return#0 @@ -745,7 +745,7 @@ menu: { // [20] call keyboard_key_pressed // [27] phi from menu::@3 to keyboard_key_pressed [phi:menu::@3->keyboard_key_pressed] keyboard_key_pressed_from___b3: - // [27] phi keyboard_key_pressed::key#4 = KEY_E [phi:menu::@3->keyboard_key_pressed#0] -- vbuxx=vbuc1 + // [27] phi keyboard_key_pressed::key#4 = KEY_E [phi:menu::@3->keyboard_key_pressed#0] -- call_phi_near ldx #KEY_E jsr keyboard_key_pressed // [21] keyboard_key_pressed::return#4 = keyboard_key_pressed::return#0 @@ -789,7 +789,7 @@ keyboard_key_pressed: { lsr // [30] keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 -- vbuxx=vbuaa tax - // [31] call keyboard_matrix_read + // [31] call keyboard_matrix_read -- call_phi_near jsr keyboard_matrix_read // [32] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 jmp __b1 @@ -817,7 +817,7 @@ pressed: { // [38] call keyboard_key_pressed // [27] phi from pressed::@1 to keyboard_key_pressed [phi:pressed::@1->keyboard_key_pressed] keyboard_key_pressed_from___b1: - // [27] phi keyboard_key_pressed::key#4 = KEY_SPACE [phi:pressed::@1->keyboard_key_pressed#0] -- vbuxx=vbuc1 + // [27] phi keyboard_key_pressed::key#4 = KEY_SPACE [phi:pressed::@1->keyboard_key_pressed#0] -- call_phi_near ldx #KEY_SPACE jsr keyboard_key_pressed // [39] keyboard_key_pressed::return#10 = keyboard_key_pressed::return#0 @@ -1043,7 +1043,7 @@ main: { __b1: // menu() // [2] call menu - // [3] phi from main::@1 to menu [phi:main::@1->menu] + // [3] phi from main::@1 to menu [phi:main::@1->menu] -- call_phi_near jsr menu jmp __b1 } @@ -1055,7 +1055,7 @@ menu: { // keyboard_key_pressed(KEY_C) // [5] call keyboard_key_pressed // [27] phi from menu::@1 to keyboard_key_pressed [phi:menu::@1->keyboard_key_pressed] - // [27] phi keyboard_key_pressed::key#4 = KEY_C [phi:menu::@1->keyboard_key_pressed#0] -- vbuxx=vbuc1 + // [27] phi keyboard_key_pressed::key#4 = KEY_C [phi:menu::@1->keyboard_key_pressed#0] -- call_phi_near ldx #KEY_C jsr keyboard_key_pressed // keyboard_key_pressed(KEY_C) @@ -1069,7 +1069,7 @@ menu: { // [9] phi from menu::@8 to menu::@5 [phi:menu::@8->menu::@5] // menu::@5 // pressed() - // [10] call pressed + // [10] call pressed -- call_phi_near jsr pressed // menu::@return // } @@ -1081,7 +1081,7 @@ menu: { // keyboard_key_pressed(KEY_I) // [13] call keyboard_key_pressed // [27] phi from menu::@2 to keyboard_key_pressed [phi:menu::@2->keyboard_key_pressed] - // [27] phi keyboard_key_pressed::key#4 = KEY_I [phi:menu::@2->keyboard_key_pressed#0] -- vbuxx=vbuc1 + // [27] phi keyboard_key_pressed::key#4 = KEY_I [phi:menu::@2->keyboard_key_pressed#0] -- call_phi_near ldx #KEY_I jsr keyboard_key_pressed // keyboard_key_pressed(KEY_I) @@ -1107,7 +1107,7 @@ menu: { // keyboard_key_pressed(KEY_E) // [20] call keyboard_key_pressed // [27] phi from menu::@3 to keyboard_key_pressed [phi:menu::@3->keyboard_key_pressed] - // [27] phi keyboard_key_pressed::key#4 = KEY_E [phi:menu::@3->keyboard_key_pressed#0] -- vbuxx=vbuc1 + // [27] phi keyboard_key_pressed::key#4 = KEY_E [phi:menu::@3->keyboard_key_pressed#0] -- call_phi_near ldx #KEY_E jsr keyboard_key_pressed // keyboard_key_pressed(KEY_E) @@ -1155,7 +1155,7 @@ keyboard_key_pressed: { // keyboard_matrix_read(rowidx) // [30] keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 -- vbuxx=vbuaa tax - // [31] call keyboard_matrix_read + // [31] call keyboard_matrix_read -- call_phi_near jsr keyboard_matrix_read // [32] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 // keyboard_key_pressed::@1 @@ -1179,7 +1179,7 @@ pressed: { // keyboard_key_pressed(KEY_SPACE) // [38] call keyboard_key_pressed // [27] phi from pressed::@1 to keyboard_key_pressed [phi:pressed::@1->keyboard_key_pressed] - // [27] phi keyboard_key_pressed::key#4 = KEY_SPACE [phi:pressed::@1->keyboard_key_pressed#0] -- vbuxx=vbuc1 + // [27] phi keyboard_key_pressed::key#4 = KEY_SPACE [phi:pressed::@1->keyboard_key_pressed#0] -- call_phi_near ldx #KEY_SPACE jsr keyboard_key_pressed // keyboard_key_pressed(KEY_SPACE) diff --git a/src/test/ref/library-constructor-1.log b/src/test/ref/library-constructor-1.log index 0b755e7a0..4b87ac3cb 100644 --- a/src/test/ref/library-constructor-1.log +++ b/src/test/ref/library-constructor-1.log @@ -177,7 +177,7 @@ __start: { // [1] my_value = 0 -- vbuz1=vbuc1 lda #0 sta.z my_value - // [2] call my_init + // [2] call my_init -- call_phi_near jsr my_init // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -185,7 +185,7 @@ __start: { // __start::@1 __b1: // [4] call main - // [8] phi from __start::@1 to main [phi:__start::@1->main] + // [8] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -207,7 +207,7 @@ my_init: { } // main main: { - // [9] call print + // [9] call print -- call_phi_near jsr print jmp __breturn // main::@return @@ -285,12 +285,12 @@ __start: { lda #0 sta.z my_value // #pragma constructor_for(my_init, print) - // [2] call my_init + // [2] call my_init -- call_phi_near jsr my_init // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [4] call main - // [8] phi from __start::@1 to main [phi:__start::@1->main] + // [8] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [5] return @@ -310,7 +310,7 @@ my_init: { // main main: { // print() - // [9] call print + // [9] call print -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/library-constructor-3.log b/src/test/ref/library-constructor-3.log index 9e70da966..9319d815b 100644 --- a/src/test/ref/library-constructor-3.log +++ b/src/test/ref/library-constructor-3.log @@ -220,14 +220,14 @@ __start: { sta.z SCREEN lda #>0 sta.z SCREEN+1 - // [3] call init_1 + // [3] call init_1 -- call_phi_near jsr init_1 // [4] phi from __start::__init1 to __start::@2 [phi:__start::__init1->__start::@2] __b2_from___init1: jmp __b2 // __start::@2 __b2: - // [5] call init_2 + // [5] call init_2 -- call_phi_near jsr init_2 // [6] phi from __start::@2 to __start::@1 [phi:__start::@2->__start::@1] __b1_from___b2: @@ -235,7 +235,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [13] phi from __start::@1 to main [phi:__start::@1->main] + // [13] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -270,7 +270,7 @@ init_1: { } // main main: { - // [14] call print + // [14] call print -- call_phi_near jsr print jmp __breturn // main::@return @@ -363,17 +363,17 @@ __start: { sta.z SCREEN sta.z SCREEN+1 // #pragma constructor_for(init_1, print) - // [3] call init_1 + // [3] call init_1 -- call_phi_near jsr init_1 // [4] phi from __start::__init1 to __start::@2 [phi:__start::__init1->__start::@2] // __start::@2 // #pragma constructor_for(init_2, print) - // [5] call init_2 + // [5] call init_2 -- call_phi_near jsr init_2 // [6] phi from __start::@2 to __start::@1 [phi:__start::@2->__start::@1] // __start::@1 // [7] call main - // [13] phi from __start::@1 to main [phi:__start::@1->main] + // [13] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [8] return @@ -406,7 +406,7 @@ init_1: { // main main: { // print() - // [14] call print + // [14] call print -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/linegen.log b/src/test/ref/linegen.log index a5ce9bad7..3862c529e 100644 --- a/src/test/ref/linegen.log +++ b/src/test/ref/linegen.log @@ -2465,7 +2465,7 @@ main: { sta.z lin16u_gen.min lda #>$22d sta.z lin16u_gen.min+1 - // [58] phi lin16u_gen::max#3 = $7461 [phi:main->lin16u_gen#2] -- vwuz1=vwuc1 + // [58] phi lin16u_gen::max#3 = $7461 [phi:main->lin16u_gen#2] -- call_phi_near lda #<$7461 sta.z lin16u_gen.max lda #>$7461 @@ -2489,7 +2489,7 @@ main: { sta.z lin16u_gen.min lda #>$79cb sta.z lin16u_gen.min+1 - // [58] phi lin16u_gen::max#3 = $f781 [phi:main::@4->lin16u_gen#2] -- vwuz1=vwuc1 + // [58] phi lin16u_gen::max#3 = $f781 [phi:main::@4->lin16u_gen#2] -- call_phi_near lda #<$f781 sta.z lin16u_gen.max lda #>$f781 @@ -2513,7 +2513,7 @@ main: { sta.z lin16u_gen.min lda #>0 sta.z lin16u_gen.min+1 - // [58] phi lin16u_gen::max#3 = $6488 [phi:main::@5->lin16u_gen#2] -- vwuz1=vwuc1 + // [58] phi lin16u_gen::max#3 = $6488 [phi:main::@5->lin16u_gen#2] -- call_phi_near lda #<$6488 sta.z lin16u_gen.max lda #>$6488 @@ -2525,7 +2525,7 @@ main: { // main::@6 __b6: // [7] call print_cls - // [78] phi from main::@6 to print_cls [phi:main::@6->print_cls] + // [78] phi from main::@6 to print_cls [phi:main::@6->print_cls] -- call_phi_near print_cls_from___b6: jsr print_cls // [8] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -2541,7 +2541,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [81] phi print_str::str#13 = main::str [phi:main::@7->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str [phi:main::@7->print_str#1] -- call_phi_near lda #str @@ -2555,7 +2555,7 @@ main: { // [11] call print_uint // [88] phi from main::@8 to print_uint [phi:main::@8->print_uint] print_uint_from___b8: - // [88] phi print_uint::w#10 = $22d [phi:main::@8->print_uint#0] -- vwuz1=vwuc1 + // [88] phi print_uint::w#10 = $22d [phi:main::@8->print_uint#0] -- call_phi_near lda #<$22d sta.z print_uint.w lda #>$22d @@ -2570,7 +2570,7 @@ main: { // [81] phi from main::@9 to print_str [phi:main::@9->print_str] print_str_from___b9: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@9->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@9->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@9->print_str#1] -- call_phi_near lda #str1 @@ -2584,7 +2584,7 @@ main: { // [15] call print_uint // [88] phi from main::@10 to print_uint [phi:main::@10->print_uint] print_uint_from___b10: - // [88] phi print_uint::w#10 = $79cb [phi:main::@10->print_uint#0] -- vwuz1=vwuc1 + // [88] phi print_uint::w#10 = $79cb [phi:main::@10->print_uint#0] -- call_phi_near lda #<$79cb sta.z print_uint.w lda #>$79cb @@ -2599,7 +2599,7 @@ main: { // [81] phi from main::@11 to print_str [phi:main::@11->print_str] print_str_from___b11: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@11->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@11->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@11->print_str#1] -- call_phi_near lda #str1 @@ -2613,7 +2613,7 @@ main: { // [19] call print_uint // [88] phi from main::@12 to print_uint [phi:main::@12->print_uint] print_uint_from___b12: - // [88] phi print_uint::w#10 = 0 [phi:main::@12->print_uint#0] -- vwuz1=vbuc1 + // [88] phi print_uint::w#10 = 0 [phi:main::@12->print_uint#0] -- call_phi_near lda #<0 sta.z print_uint.w lda #>0 @@ -2627,7 +2627,7 @@ main: { // [21] call print_ln // [94] phi from main::@13 to print_ln [phi:main::@13->print_ln] print_ln_from___b13: - // [94] phi print_line_cursor#23 = print_screen#0 [phi:main::@13->print_ln#0] -- pbuz1=pbuc1 + // [94] phi print_line_cursor#23 = print_screen#0 [phi:main::@13->print_ln#0] -- call_phi_near lda #print_screen @@ -2657,7 +2657,7 @@ main: { // [81] phi from main::@3 to print_str [phi:main::@3->print_str] print_str_from___b3: // [81] phi print_char_cursor#89 = print_char_cursor#100 [phi:main::@3->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str [phi:main::@3->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str [phi:main::@3->print_str#1] -- call_phi_near lda #str @@ -2671,7 +2671,7 @@ main: { // [27] call print_uint // [88] phi from main::@22 to print_uint [phi:main::@22->print_uint] print_uint_from___b22: - // [88] phi print_uint::w#10 = $7461 [phi:main::@22->print_uint#0] -- vwuz1=vwuc1 + // [88] phi print_uint::w#10 = $7461 [phi:main::@22->print_uint#0] -- call_phi_near lda #<$7461 sta.z print_uint.w lda #>$7461 @@ -2686,7 +2686,7 @@ main: { // [81] phi from main::@23 to print_str [phi:main::@23->print_str] print_str_from___b23: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@23->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@23->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@23->print_str#1] -- call_phi_near lda #str1 @@ -2700,7 +2700,7 @@ main: { // [31] call print_uint // [88] phi from main::@24 to print_uint [phi:main::@24->print_uint] print_uint_from___b24: - // [88] phi print_uint::w#10 = $f781 [phi:main::@24->print_uint#0] -- vwuz1=vwuc1 + // [88] phi print_uint::w#10 = $f781 [phi:main::@24->print_uint#0] -- call_phi_near lda #<$f781 sta.z print_uint.w lda #>$f781 @@ -2715,7 +2715,7 @@ main: { // [81] phi from main::@25 to print_str [phi:main::@25->print_str] print_str_from___b25: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@25->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@25->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@25->print_str#1] -- call_phi_near lda #str1 @@ -2729,7 +2729,7 @@ main: { // [35] call print_uint // [88] phi from main::@26 to print_uint [phi:main::@26->print_uint] print_uint_from___b26: - // [88] phi print_uint::w#10 = $6488 [phi:main::@26->print_uint#0] -- vwuz1=vwuc1 + // [88] phi print_uint::w#10 = $6488 [phi:main::@26->print_uint#0] -- call_phi_near lda #<$6488 sta.z print_uint.w lda #>$6488 @@ -2743,7 +2743,7 @@ main: { // [37] call print_ln // [94] phi from main::@27 to print_ln [phi:main::@27->print_ln] print_ln_from___b27: - // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@27->print_ln#0] -- register_copy + // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@27->print_ln#0] -- call_phi_near jsr print_ln jmp __breturn // main::@return @@ -2763,7 +2763,7 @@ main: { // [99] phi from main::@2 to print_uchar [phi:main::@2->print_uchar] print_uchar_from___b2: // [99] phi print_char_cursor#84 = print_char_cursor#104 [phi:main::@2->print_uchar#0] -- register_copy - // [99] phi print_uchar::b#3 = print_uchar::b#2 [phi:main::@2->print_uchar#1] -- register_copy + // [99] phi print_uchar::b#3 = print_uchar::b#2 [phi:main::@2->print_uchar#1] -- call_phi_near jsr print_uchar // [42] phi from main::@2 to main::@14 [phi:main::@2->main::@14] __b14_from___b2: @@ -2774,7 +2774,7 @@ main: { // [81] phi from main::@14 to print_str [phi:main::@14->print_str] print_str_from___b14: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@14->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@14->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@14->print_str#1] -- call_phi_near lda #str1 @@ -2796,7 +2796,7 @@ main: { // [46] call print_uint // [88] phi from main::@15 to print_uint [phi:main::@15->print_uint] print_uint_from___b15: - // [88] phi print_uint::w#10 = print_uint::w#3 [phi:main::@15->print_uint#0] -- register_copy + // [88] phi print_uint::w#10 = print_uint::w#3 [phi:main::@15->print_uint#0] -- call_phi_near jsr print_uint // [47] phi from main::@15 to main::@16 [phi:main::@15->main::@16] __b16_from___b15: @@ -2807,7 +2807,7 @@ main: { // [81] phi from main::@16 to print_str [phi:main::@16->print_str] print_str_from___b16: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@16->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@16->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@16->print_str#1] -- call_phi_near lda #str1 @@ -2825,7 +2825,7 @@ main: { // [50] call print_uint // [88] phi from main::@17 to print_uint [phi:main::@17->print_uint] print_uint_from___b17: - // [88] phi print_uint::w#10 = print_uint::w#4 [phi:main::@17->print_uint#0] -- register_copy + // [88] phi print_uint::w#10 = print_uint::w#4 [phi:main::@17->print_uint#0] -- call_phi_near jsr print_uint // [51] phi from main::@17 to main::@18 [phi:main::@17->main::@18] __b18_from___b17: @@ -2836,7 +2836,7 @@ main: { // [81] phi from main::@18 to print_str [phi:main::@18->print_str] print_str_from___b18: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@18->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@18->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@18->print_str#1] -- call_phi_near lda #str1 @@ -2854,7 +2854,7 @@ main: { // [54] call print_uint // [88] phi from main::@19 to print_uint [phi:main::@19->print_uint] print_uint_from___b19: - // [88] phi print_uint::w#10 = print_uint::w#5 [phi:main::@19->print_uint#0] -- register_copy + // [88] phi print_uint::w#10 = print_uint::w#5 [phi:main::@19->print_uint#0] -- call_phi_near jsr print_uint // [55] phi from main::@19 to main::@20 [phi:main::@19->main::@20] __b20_from___b19: @@ -2864,7 +2864,7 @@ main: { // [56] call print_ln // [94] phi from main::@20 to print_ln [phi:main::@20->print_ln] print_ln_from___b20: - // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@20->print_ln#0] -- register_copy + // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@20->print_ln#0] -- call_phi_near jsr print_ln jmp __b21 // main::@21 @@ -2914,7 +2914,7 @@ lin16u_gen: { // [107] phi from lin16u_gen to divr16u [phi:lin16u_gen->divr16u] divr16u_from_lin16u_gen: // [107] phi divr16u::dividend#5 = divr16u::dividend#1 [phi:lin16u_gen->divr16u#0] -- register_copy - // [107] phi divr16u::rem#10 = 0 [phi:lin16u_gen->divr16u#1] -- vwuz1=vbuc1 + // [107] phi divr16u::rem#10 = 0 [phi:lin16u_gen->divr16u#1] -- call_phi_near lda #<0 sta.z divr16u.rem lda #>0 @@ -2938,7 +2938,7 @@ lin16u_gen: { sta.z divr16u.dividend lda #>0 sta.z divr16u.dividend+1 - // [107] phi divr16u::rem#10 = divr16u::rem#4 [phi:lin16u_gen::@3->divr16u#1] -- register_copy + // [107] phi divr16u::rem#10 = divr16u::rem#4 [phi:lin16u_gen::@3->divr16u#1] -- call_phi_near jsr divr16u // [66] divr16u::return#3 = divr16u::return#0 jmp __b4 @@ -3039,7 +3039,7 @@ lin16u_gen: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [79] call memset - // [125] phi from print_cls to memset [phi:print_cls->memset] + // [125] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -3080,7 +3080,7 @@ print_str: { // [131] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [131] phi print_char_cursor#51 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [131] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [131] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -3103,7 +3103,7 @@ print_uint: { // [99] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [99] phi print_char_cursor#84 = print_char_cursor#1 [phi:print_uint->print_uchar#0] -- register_copy - // [99] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [99] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -3114,7 +3114,7 @@ print_uint: { // [99] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [99] phi print_char_cursor#84 = print_char_cursor#10 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [99] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [99] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -3173,7 +3173,7 @@ print_uchar: { // [131] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [131] phi print_char_cursor#51 = print_char_cursor#84 [phi:print_uchar->print_char#0] -- register_copy - // [131] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy + // [131] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -3187,7 +3187,7 @@ print_uchar: { // [131] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [131] phi print_char_cursor#51 = print_char_cursor#10 [phi:print_uchar::@1->print_char#0] -- register_copy - // [131] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy + // [131] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -3755,7 +3755,7 @@ main: { sta.z lin16u_gen.min lda #>$22d sta.z lin16u_gen.min+1 - // [58] phi lin16u_gen::max#3 = $7461 [phi:main->lin16u_gen#2] -- vwuz1=vwuc1 + // [58] phi lin16u_gen::max#3 = $7461 [phi:main->lin16u_gen#2] -- call_phi_near lda #<$7461 sta.z lin16u_gen.max lda #>$7461 @@ -3776,7 +3776,7 @@ main: { sta.z lin16u_gen.min lda #>$79cb sta.z lin16u_gen.min+1 - // [58] phi lin16u_gen::max#3 = $f781 [phi:main::@4->lin16u_gen#2] -- vwuz1=vwuc1 + // [58] phi lin16u_gen::max#3 = $f781 [phi:main::@4->lin16u_gen#2] -- call_phi_near lda #<$f781 sta.z lin16u_gen.max lda #>$f781 @@ -3796,7 +3796,7 @@ main: { lda #<0 sta.z lin16u_gen.min sta.z lin16u_gen.min+1 - // [58] phi lin16u_gen::max#3 = $6488 [phi:main::@5->lin16u_gen#2] -- vwuz1=vwuc1 + // [58] phi lin16u_gen::max#3 = $6488 [phi:main::@5->lin16u_gen#2] -- call_phi_near lda #<$6488 sta.z lin16u_gen.max lda #>$6488 @@ -3806,7 +3806,7 @@ main: { // main::@6 // print_cls() // [7] call print_cls - // [78] phi from main::@6 to print_cls [phi:main::@6->print_cls] + // [78] phi from main::@6 to print_cls [phi:main::@6->print_cls] -- call_phi_near jsr print_cls // [8] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 @@ -3818,7 +3818,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [81] phi print_str::str#13 = main::str [phi:main::@7->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str [phi:main::@7->print_str#1] -- call_phi_near lda #str @@ -3829,7 +3829,7 @@ main: { // print_uint(557) // [11] call print_uint // [88] phi from main::@8 to print_uint [phi:main::@8->print_uint] - // [88] phi print_uint::w#10 = $22d [phi:main::@8->print_uint#0] -- vwuz1=vwuc1 + // [88] phi print_uint::w#10 = $22d [phi:main::@8->print_uint#0] -- call_phi_near lda #<$22d sta.z print_uint.w lda #>$22d @@ -3841,7 +3841,7 @@ main: { // [13] call print_str // [81] phi from main::@9 to print_str [phi:main::@9->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@9->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@9->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@9->print_str#1] -- call_phi_near lda #str1 @@ -3852,7 +3852,7 @@ main: { // print_uint(31179) // [15] call print_uint // [88] phi from main::@10 to print_uint [phi:main::@10->print_uint] - // [88] phi print_uint::w#10 = $79cb [phi:main::@10->print_uint#0] -- vwuz1=vwuc1 + // [88] phi print_uint::w#10 = $79cb [phi:main::@10->print_uint#0] -- call_phi_near lda #<$79cb sta.z print_uint.w lda #>$79cb @@ -3864,7 +3864,7 @@ main: { // [17] call print_str // [81] phi from main::@11 to print_str [phi:main::@11->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@11->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@11->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@11->print_str#1] -- call_phi_near lda #str1 @@ -3875,7 +3875,7 @@ main: { // print_uint(0) // [19] call print_uint // [88] phi from main::@12 to print_uint [phi:main::@12->print_uint] - // [88] phi print_uint::w#10 = 0 [phi:main::@12->print_uint#0] -- vwuz1=vbuc1 + // [88] phi print_uint::w#10 = 0 [phi:main::@12->print_uint#0] -- call_phi_near lda #<0 sta.z print_uint.w sta.z print_uint.w+1 @@ -3885,7 +3885,7 @@ main: { // print_ln() // [21] call print_ln // [94] phi from main::@13 to print_ln [phi:main::@13->print_ln] - // [94] phi print_line_cursor#23 = print_screen#0 [phi:main::@13->print_ln#0] -- pbuz1=pbuc1 + // [94] phi print_line_cursor#23 = print_screen#0 [phi:main::@13->print_ln#0] -- call_phi_near lda #print_screen @@ -3912,7 +3912,7 @@ main: { // [25] call print_str // [81] phi from main::@3 to print_str [phi:main::@3->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#100 [phi:main::@3->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str [phi:main::@3->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str [phi:main::@3->print_str#1] -- call_phi_near lda #str @@ -3923,7 +3923,7 @@ main: { // print_uint(29793) // [27] call print_uint // [88] phi from main::@22 to print_uint [phi:main::@22->print_uint] - // [88] phi print_uint::w#10 = $7461 [phi:main::@22->print_uint#0] -- vwuz1=vwuc1 + // [88] phi print_uint::w#10 = $7461 [phi:main::@22->print_uint#0] -- call_phi_near lda #<$7461 sta.z print_uint.w lda #>$7461 @@ -3935,7 +3935,7 @@ main: { // [29] call print_str // [81] phi from main::@23 to print_str [phi:main::@23->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@23->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@23->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@23->print_str#1] -- call_phi_near lda #str1 @@ -3946,7 +3946,7 @@ main: { // print_uint(63361) // [31] call print_uint // [88] phi from main::@24 to print_uint [phi:main::@24->print_uint] - // [88] phi print_uint::w#10 = $f781 [phi:main::@24->print_uint#0] -- vwuz1=vwuc1 + // [88] phi print_uint::w#10 = $f781 [phi:main::@24->print_uint#0] -- call_phi_near lda #<$f781 sta.z print_uint.w lda #>$f781 @@ -3958,7 +3958,7 @@ main: { // [33] call print_str // [81] phi from main::@25 to print_str [phi:main::@25->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@25->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@25->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@25->print_str#1] -- call_phi_near lda #str1 @@ -3969,7 +3969,7 @@ main: { // print_uint($6488) // [35] call print_uint // [88] phi from main::@26 to print_uint [phi:main::@26->print_uint] - // [88] phi print_uint::w#10 = $6488 [phi:main::@26->print_uint#0] -- vwuz1=vwuc1 + // [88] phi print_uint::w#10 = $6488 [phi:main::@26->print_uint#0] -- call_phi_near lda #<$6488 sta.z print_uint.w lda #>$6488 @@ -3980,7 +3980,7 @@ main: { // print_ln() // [37] call print_ln // [94] phi from main::@27 to print_ln [phi:main::@27->print_ln] - // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@27->print_ln#0] -- register_copy + // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@27->print_ln#0] -- call_phi_near jsr print_ln // main::@return // } @@ -4000,7 +4000,7 @@ main: { // [41] call print_uchar // [99] phi from main::@2 to print_uchar [phi:main::@2->print_uchar] // [99] phi print_char_cursor#84 = print_char_cursor#104 [phi:main::@2->print_uchar#0] -- register_copy - // [99] phi print_uchar::b#3 = print_uchar::b#2 [phi:main::@2->print_uchar#1] -- register_copy + // [99] phi print_uchar::b#3 = print_uchar::b#2 [phi:main::@2->print_uchar#1] -- call_phi_near jsr print_uchar // [42] phi from main::@2 to main::@14 [phi:main::@2->main::@14] // main::@14 @@ -4008,7 +4008,7 @@ main: { // [43] call print_str // [81] phi from main::@14 to print_str [phi:main::@14->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@14->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@14->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@14->print_str#1] -- call_phi_near lda #str1 @@ -4028,7 +4028,7 @@ main: { sta.z print_uint.w+1 // [46] call print_uint // [88] phi from main::@15 to print_uint [phi:main::@15->print_uint] - // [88] phi print_uint::w#10 = print_uint::w#3 [phi:main::@15->print_uint#0] -- register_copy + // [88] phi print_uint::w#10 = print_uint::w#3 [phi:main::@15->print_uint#0] -- call_phi_near jsr print_uint // [47] phi from main::@15 to main::@16 [phi:main::@15->main::@16] // main::@16 @@ -4036,7 +4036,7 @@ main: { // [48] call print_str // [81] phi from main::@16 to print_str [phi:main::@16->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@16->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@16->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@16->print_str#1] -- call_phi_near lda #str1 @@ -4052,7 +4052,7 @@ main: { sta.z print_uint.w+1 // [50] call print_uint // [88] phi from main::@17 to print_uint [phi:main::@17->print_uint] - // [88] phi print_uint::w#10 = print_uint::w#4 [phi:main::@17->print_uint#0] -- register_copy + // [88] phi print_uint::w#10 = print_uint::w#4 [phi:main::@17->print_uint#0] -- call_phi_near jsr print_uint // [51] phi from main::@17 to main::@18 [phi:main::@17->main::@18] // main::@18 @@ -4060,7 +4060,7 @@ main: { // [52] call print_str // [81] phi from main::@18 to print_str [phi:main::@18->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@18->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@18->print_str#1] -- pbuz1=pbuc1 + // [81] phi print_str::str#13 = main::str1 [phi:main::@18->print_str#1] -- call_phi_near lda #str1 @@ -4076,14 +4076,14 @@ main: { sta.z print_uint.w+1 // [54] call print_uint // [88] phi from main::@19 to print_uint [phi:main::@19->print_uint] - // [88] phi print_uint::w#10 = print_uint::w#5 [phi:main::@19->print_uint#0] -- register_copy + // [88] phi print_uint::w#10 = print_uint::w#5 [phi:main::@19->print_uint#0] -- call_phi_near jsr print_uint // [55] phi from main::@19 to main::@20 [phi:main::@19->main::@20] // main::@20 // print_ln() // [56] call print_ln // [94] phi from main::@20 to print_ln [phi:main::@20->print_ln] - // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@20->print_ln#0] -- register_copy + // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@20->print_ln#0] -- call_phi_near jsr print_ln // main::@21 // for(byte i=0; i<20; i++) @@ -4132,7 +4132,7 @@ lin16u_gen: { // [61] call divr16u // [107] phi from lin16u_gen to divr16u [phi:lin16u_gen->divr16u] // [107] phi divr16u::dividend#5 = divr16u::dividend#1 [phi:lin16u_gen->divr16u#0] -- register_copy - // [107] phi divr16u::rem#10 = 0 [phi:lin16u_gen->divr16u#1] -- vwuz1=vbuc1 + // [107] phi divr16u::rem#10 = 0 [phi:lin16u_gen->divr16u#1] -- call_phi_near lda #<0 sta.z divr16u.rem sta.z divr16u.rem+1 @@ -4153,7 +4153,7 @@ lin16u_gen: { lda #<0 sta.z divr16u.dividend sta.z divr16u.dividend+1 - // [107] phi divr16u::rem#10 = divr16u::rem#4 [phi:lin16u_gen::@3->divr16u#1] -- register_copy + // [107] phi divr16u::rem#10 = divr16u::rem#4 [phi:lin16u_gen::@3->divr16u#1] -- call_phi_near jsr divr16u // word stepf = divr16u(0, length-1, rem16u) // [66] divr16u::return#3 = divr16u::return#0 @@ -4255,7 +4255,7 @@ lin16u_gen: { print_cls: { // memset(print_screen, ' ', 1000) // [79] call memset - // [125] phi from print_cls to memset [phi:print_cls->memset] + // [125] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -4291,7 +4291,7 @@ print_str: { // [86] call print_char // [131] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [131] phi print_char_cursor#51 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [131] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [131] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); @@ -4313,7 +4313,7 @@ print_uint: { // [90] call print_uchar // [99] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [99] phi print_char_cursor#84 = print_char_cursor#1 [phi:print_uint->print_uchar#0] -- register_copy - // [99] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [99] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -4322,7 +4322,7 @@ print_uint: { // [92] call print_uchar // [99] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [99] phi print_char_cursor#84 = print_char_cursor#10 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [99] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [99] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -4379,7 +4379,7 @@ print_uchar: { // Table of hexadecimal digits // [131] phi from print_uchar to print_char [phi:print_uchar->print_char] // [131] phi print_char_cursor#51 = print_char_cursor#84 [phi:print_uchar->print_char#0] -- register_copy - // [131] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy + // [131] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -4392,7 +4392,7 @@ print_uchar: { // [105] call print_char // [131] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [131] phi print_char_cursor#51 = print_char_cursor#10 [phi:print_uchar::@1->print_char#0] -- register_copy - // [131] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy + // [131] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/literal-word-pointer-0.log b/src/test/ref/literal-word-pointer-0.log index cf77457ea..f4f8a8669 100644 --- a/src/test/ref/literal-word-pointer-0.log +++ b/src/test/ref/literal-word-pointer-0.log @@ -119,7 +119,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call print + // [1] call print -- call_phi_near jsr print jmp __breturn // main::@return @@ -182,7 +182,7 @@ Score: 28 // main main: { // print("qwe") - // [1] call print + // [1] call print -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/literal-word-pointer-1.log b/src/test/ref/literal-word-pointer-1.log index 1cbc5c0cf..d5311dfc3 100644 --- a/src/test/ref/literal-word-pointer-1.log +++ b/src/test/ref/literal-word-pointer-1.log @@ -120,7 +120,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call print + // [1] call print -- call_phi_near jsr print jmp __breturn // main::@return @@ -183,7 +183,7 @@ Score: 28 // main main: { // print("qwe") - // [1] call print + // [1] call print -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/liverange-1.log b/src/test/ref/liverange-1.log index cf178a468..d04ec4df2 100644 --- a/src/test/ref/liverange-1.log +++ b/src/test/ref/liverange-1.log @@ -208,7 +208,7 @@ main: { out_from_main: // [5] phi idx#11 = 0 [phi:main->out#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi out::c#2 = 'c' [phi:main->out#1] -- vbuaa=vbuc1 + // [5] phi out::c#2 = 'c' [phi:main->out#1] -- call_phi_near lda #'c' jsr out // [2] phi from main to main::@1 [phi:main->main::@1] @@ -220,7 +220,7 @@ main: { // [5] phi from main::@1 to out [phi:main::@1->out] out_from___b1: // [5] phi idx#11 = idx#12 [phi:main::@1->out#0] -- register_copy - // [5] phi out::c#2 = 'm' [phi:main::@1->out#1] -- vbuaa=vbuc1 + // [5] phi out::c#2 = 'm' [phi:main::@1->out#1] -- call_phi_near lda #'m' jsr out jmp __breturn @@ -297,7 +297,7 @@ main: { // [5] phi from main to out [phi:main->out] // [5] phi idx#11 = 0 [phi:main->out#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi out::c#2 = 'c' [phi:main->out#1] -- vbuaa=vbuc1 + // [5] phi out::c#2 = 'c' [phi:main->out#1] -- call_phi_near lda #'c' jsr out // [2] phi from main to main::@1 [phi:main->main::@1] @@ -306,7 +306,7 @@ main: { // [3] call out // [5] phi from main::@1 to out [phi:main::@1->out] // [5] phi idx#11 = idx#12 [phi:main::@1->out#0] -- register_copy - // [5] phi out::c#2 = 'm' [phi:main::@1->out#1] -- vbuaa=vbuc1 + // [5] phi out::c#2 = 'm' [phi:main::@1->out#1] -- call_phi_near lda #'m' jsr out // main::@return diff --git a/src/test/ref/liverange-10.log b/src/test/ref/liverange-10.log index 9d8e362be..f43be339a 100644 --- a/src/test/ref/liverange-10.log +++ b/src/test/ref/liverange-10.log @@ -678,7 +678,7 @@ main: { sta.z outsw.sw lda.z sw+1 sta.z outsw.sw+1 - // [3] call outsw + // [3] call outsw -- call_phi_near jsr outsw jmp __b3 // main::@3 @@ -714,7 +714,7 @@ main: { // [20] phi from main::@2 to outw [phi:main::@2->outw] outw_from___b2: // [20] phi idx#35 = idx#11 [phi:main::@2->outw#0] -- register_copy - // [20] phi outw::w#2 = outw::w#0 [phi:main::@2->outw#1] -- register_copy + // [20] phi outw::w#2 = outw::w#0 [phi:main::@2->outw#1] -- call_phi_near jsr outw jmp __b4 // main::@4 @@ -753,7 +753,7 @@ outsw: { out_from___b2: // [38] phi out::c#5 = '-' [phi:outsw::@2->out#0] -- vbuaa=vbuc1 lda #'-' - // [38] phi idx#27 = idx#31 [phi:outsw::@2->out#1] -- register_copy + // [38] phi idx#27 = idx#31 [phi:outsw::@2->out#1] -- call_phi_near jsr out jmp __b3 // outsw::@3 @@ -779,7 +779,7 @@ outsw: { // [20] phi from outsw::@1 to outw [phi:outsw::@1->outw] outw_from___b1: // [20] phi idx#35 = idx#33 [phi:outsw::@1->outw#0] -- register_copy - // [20] phi outw::w#2 = outw::w#1 [phi:outsw::@1->outw#1] -- register_copy + // [20] phi outw::w#2 = outw::w#1 [phi:outsw::@1->outw#1] -- call_phi_near jsr outw jmp __breturn // outsw::@return @@ -805,7 +805,7 @@ outw: { // [38] phi from outw to out [phi:outw->out] out_from_outw: // [38] phi out::c#5 = out::c#1 [phi:outw->out#0] -- register_copy - // [38] phi idx#27 = idx#35 [phi:outw->out#1] -- register_copy + // [38] phi idx#27 = idx#35 [phi:outw->out#1] -- call_phi_near jsr out jmp __b1 // outw::@1 @@ -821,7 +821,7 @@ outw: { // [38] phi from outw::@1 to out [phi:outw::@1->out] out_from___b1: // [38] phi out::c#5 = out::c#2 [phi:outw::@1->out#0] -- register_copy - // [38] phi idx#27 = idx#11 [phi:outw::@1->out#1] -- register_copy + // [38] phi idx#27 = idx#11 [phi:outw::@1->out#1] -- call_phi_near jsr out jmp __b2 // outw::@2 @@ -840,7 +840,7 @@ outw: { // [38] phi from outw::@2 to out [phi:outw::@2->out] out_from___b2: // [38] phi out::c#5 = out::c#3 [phi:outw::@2->out#0] -- register_copy - // [38] phi idx#27 = idx#11 [phi:outw::@2->out#1] -- register_copy + // [38] phi idx#27 = idx#11 [phi:outw::@2->out#1] -- call_phi_near jsr out jmp __b3 // outw::@3 @@ -856,7 +856,7 @@ outw: { // [38] phi from outw::@3 to out [phi:outw::@3->out] out_from___b3: // [38] phi out::c#5 = out::c#4 [phi:outw::@3->out#0] -- register_copy - // [38] phi idx#27 = idx#11 [phi:outw::@3->out#1] -- register_copy + // [38] phi idx#27 = idx#11 [phi:outw::@3->out#1] -- call_phi_near jsr out jmp __breturn // outw::@return @@ -1033,7 +1033,7 @@ main: { sta.z outsw.sw lda.z sw+1 sta.z outsw.sw+1 - // [3] call outsw + // [3] call outsw -- call_phi_near jsr outsw // main::@3 // for(signed int sw: -20..19 ) @@ -1063,7 +1063,7 @@ main: { // [8] call outw // [20] phi from main::@2 to outw [phi:main::@2->outw] // [20] phi idx#35 = idx#11 [phi:main::@2->outw#0] -- register_copy - // [20] phi outw::w#2 = outw::w#0 [phi:main::@2->outw#1] -- register_copy + // [20] phi outw::w#2 = outw::w#0 [phi:main::@2->outw#1] -- call_phi_near jsr outw // main::@4 // for(unsigned int w: 0..39 ) @@ -1098,7 +1098,7 @@ outsw: { // [38] phi from outsw::@2 to out [phi:outsw::@2->out] // [38] phi out::c#5 = '-' [phi:outsw::@2->out#0] -- vbuaa=vbuc1 lda #'-' - // [38] phi idx#27 = idx#31 [phi:outsw::@2->out#1] -- register_copy + // [38] phi idx#27 = idx#31 [phi:outsw::@2->out#1] -- call_phi_near jsr out // outsw::@3 // sw = -sw @@ -1120,7 +1120,7 @@ outsw: { // [18] call outw // [20] phi from outsw::@1 to outw [phi:outsw::@1->outw] // [20] phi idx#35 = idx#33 [phi:outsw::@1->outw#0] -- register_copy - // [20] phi outw::w#2 = outw::w#1 [phi:outsw::@1->outw#1] -- register_copy + // [20] phi outw::w#2 = outw::w#1 [phi:outsw::@1->outw#1] -- call_phi_near jsr outw // outsw::@return // } @@ -1147,7 +1147,7 @@ outw: { // [24] call out // [38] phi from outw to out [phi:outw->out] // [38] phi out::c#5 = out::c#1 [phi:outw->out#0] -- register_copy - // [38] phi idx#27 = idx#35 [phi:outw->out#1] -- register_copy + // [38] phi idx#27 = idx#35 [phi:outw->out#1] -- call_phi_near jsr out // outw::@1 // BYTE1(w) @@ -1163,7 +1163,7 @@ outw: { // [28] call out // [38] phi from outw::@1 to out [phi:outw::@1->out] // [38] phi out::c#5 = out::c#2 [phi:outw::@1->out#0] -- register_copy - // [38] phi idx#27 = idx#11 [phi:outw::@1->out#1] -- register_copy + // [38] phi idx#27 = idx#11 [phi:outw::@1->out#1] -- call_phi_near jsr out // outw::@2 // BYTE0(w) @@ -1182,7 +1182,7 @@ outw: { // [32] call out // [38] phi from outw::@2 to out [phi:outw::@2->out] // [38] phi out::c#5 = out::c#3 [phi:outw::@2->out#0] -- register_copy - // [38] phi idx#27 = idx#11 [phi:outw::@2->out#1] -- register_copy + // [38] phi idx#27 = idx#11 [phi:outw::@2->out#1] -- call_phi_near jsr out // outw::@3 // BYTE0(w) @@ -1198,7 +1198,7 @@ outw: { // [36] call out // [38] phi from outw::@3 to out [phi:outw::@3->out] // [38] phi out::c#5 = out::c#4 [phi:outw::@3->out#0] -- register_copy - // [38] phi idx#27 = idx#11 [phi:outw::@3->out#1] -- register_copy + // [38] phi idx#27 = idx#11 [phi:outw::@3->out#1] -- call_phi_near jsr out // outw::@return // } diff --git a/src/test/ref/liverange-2.log b/src/test/ref/liverange-2.log index 5c92c0723..87bd1b501 100644 --- a/src/test/ref/liverange-2.log +++ b/src/test/ref/liverange-2.log @@ -343,7 +343,7 @@ main: { adc.z a // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print + // [7] call print -- call_phi_near jsr print jmp __b6 // main::@6 @@ -499,7 +499,7 @@ main: { // print(b, ca) // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print + // [7] call print -- call_phi_near jsr print // main::@6 // for( char c: 0..100 ) diff --git a/src/test/ref/liverange-3.log b/src/test/ref/liverange-3.log index ba653de71..d434831cd 100644 --- a/src/test/ref/liverange-3.log +++ b/src/test/ref/liverange-3.log @@ -350,7 +350,7 @@ main: { adc.z a // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print + // [7] call print -- call_phi_near jsr print jmp __b6 // main::@6 @@ -508,7 +508,7 @@ main: { // print(b, ca) // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print + // [7] call print -- call_phi_near jsr print // main::@6 // for( char c: 0..100 ) diff --git a/src/test/ref/liverange-4.log b/src/test/ref/liverange-4.log index 1a9b9083e..8b05758c7 100644 --- a/src/test/ref/liverange-4.log +++ b/src/test/ref/liverange-4.log @@ -394,7 +394,7 @@ main: { adc.z a // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print + // [7] call print -- call_phi_near jsr print jmp __b6 // main::@6 @@ -432,7 +432,7 @@ main: { print: { // [15] out::b#0 = print::b#0 // [16] out::ca#0 = print::ca#0 - // [17] call out + // [17] call out -- call_phi_near jsr out jmp __breturn // print::@return @@ -572,7 +572,7 @@ main: { // print(b, ca) // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print + // [7] call print -- call_phi_near jsr print // main::@6 // for( char c: 0..100 ) @@ -607,7 +607,7 @@ print: { // out(b, ca) // [15] out::b#0 = print::b#0 // [16] out::ca#0 = print::ca#0 - // [17] call out + // [17] call out -- call_phi_near jsr out // print::@return // } diff --git a/src/test/ref/liverange-5.log b/src/test/ref/liverange-5.log index 1fd2e49e2..ff19a3bcd 100644 --- a/src/test/ref/liverange-5.log +++ b/src/test/ref/liverange-5.log @@ -401,7 +401,7 @@ main: { adc.z a // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print + // [7] call print -- call_phi_near jsr print jmp __b6 // main::@6 @@ -439,7 +439,7 @@ main: { print: { // [15] out::b#0 = print::b#0 // [16] out::ca#0 = print::ca#0 - // [17] call out + // [17] call out -- call_phi_near jsr out jmp __breturn // print::@return @@ -581,7 +581,7 @@ main: { // print(b, ca) // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print + // [7] call print -- call_phi_near jsr print // main::@6 // for( char c: 0..100 ) @@ -616,7 +616,7 @@ print: { // out(b, ca) // [15] out::b#0 = print::b#0 // [16] out::ca#0 = print::ca#0 - // [17] call out + // [17] call out -- call_phi_near jsr out // print::@return // } diff --git a/src/test/ref/liverange-6.log b/src/test/ref/liverange-6.log index 74a12a553..5e9a05aed 100644 --- a/src/test/ref/liverange-6.log +++ b/src/test/ref/liverange-6.log @@ -245,7 +245,7 @@ main: { __b1: // [2] out::c#0 = msg[main::i#2] -- vbuaa=pbuc1_derefidx_vbuyy lda msg,y - // [3] call out + // [3] call out -- call_phi_near jsr out jmp __b2 // main::@2 @@ -348,7 +348,7 @@ main: { // out(msg[i]) // [2] out::c#0 = msg[main::i#2] -- vbuaa=pbuc1_derefidx_vbuyy lda msg,y - // [3] call out + // [3] call out -- call_phi_near jsr out // main::@2 // for( byte i: 0..11) diff --git a/src/test/ref/liverange-7.log b/src/test/ref/liverange-7.log index 674748c62..5b899a517 100644 --- a/src/test/ref/liverange-7.log +++ b/src/test/ref/liverange-7.log @@ -294,7 +294,7 @@ main: { // main::@1 __b1: // [2] out2::c#0 = main::c#2 - // [3] call out2 + // [3] call out2 -- call_phi_near jsr out2 jmp __b2 // main::@2 @@ -315,7 +315,7 @@ main: { // void out2(__register(A) char c) out2: { // [7] out::c#0 = out2::c#0 - // [8] call out + // [8] call out -- call_phi_near jsr out jmp __breturn // out2::@return @@ -412,7 +412,7 @@ main: { __b1: // out2(c) // [2] out2::c#0 = main::c#2 - // [3] call out2 + // [3] call out2 -- call_phi_near jsr out2 // main::@2 // for(char c: 0..39 ) @@ -432,7 +432,7 @@ main: { out2: { // out(c) // [7] out::c#0 = out2::c#0 - // [8] call out + // [8] call out -- call_phi_near jsr out // out2::@return // } diff --git a/src/test/ref/liverange-8.log b/src/test/ref/liverange-8.log index 860335293..fc882b20b 100644 --- a/src/test/ref/liverange-8.log +++ b/src/test/ref/liverange-8.log @@ -319,7 +319,7 @@ main: { // main::@1 __b1: // [2] out2::c#0 = main::c#2 - // [3] call out2 + // [3] call out2 -- call_phi_near jsr out2 jmp __b2 // main::@2 @@ -344,7 +344,7 @@ out2: { // [12] phi from out2 to out [phi:out2->out] out_from_out2: // [12] phi out::c#2 = out::c#0 [phi:out2->out#0] -- register_copy - // [12] phi idx#15 = idx#19 [phi:out2->out#1] -- register_copy + // [12] phi idx#15 = idx#19 [phi:out2->out#1] -- call_phi_near jsr out jmp __b1 // out2::@1 @@ -354,7 +354,7 @@ out2: { // [12] phi from out2::@1 to out [phi:out2::@1->out] out_from___b1: // [12] phi out::c#2 = out::c#1 [phi:out2::@1->out#0] -- register_copy - // [12] phi idx#15 = idx#16 [phi:out2::@1->out#1] -- register_copy + // [12] phi idx#15 = idx#16 [phi:out2::@1->out#1] -- call_phi_near jsr out jmp __breturn // out2::@return @@ -458,7 +458,7 @@ main: { __b1: // out2(c) // [2] out2::c#0 = main::c#2 - // [3] call out2 + // [3] call out2 -- call_phi_near jsr out2 // main::@2 // for(char c: 0..39 ) @@ -481,7 +481,7 @@ out2: { // [8] call out // [12] phi from out2 to out [phi:out2->out] // [12] phi out::c#2 = out::c#0 [phi:out2->out#0] -- register_copy - // [12] phi idx#15 = idx#19 [phi:out2->out#1] -- register_copy + // [12] phi idx#15 = idx#19 [phi:out2->out#1] -- call_phi_near jsr out // out2::@1 // out(c) @@ -489,7 +489,7 @@ out2: { // [10] call out // [12] phi from out2::@1 to out [phi:out2::@1->out] // [12] phi out::c#2 = out::c#1 [phi:out2::@1->out#0] -- register_copy - // [12] phi idx#15 = idx#16 [phi:out2::@1->out#1] -- register_copy + // [12] phi idx#15 = idx#16 [phi:out2::@1->out#1] -- call_phi_near jsr out // out2::@return // } diff --git a/src/test/ref/liverange-9.log b/src/test/ref/liverange-9.log index 090151016..fd8477728 100644 --- a/src/test/ref/liverange-9.log +++ b/src/test/ref/liverange-9.log @@ -417,7 +417,7 @@ main: { __b1: // [2] outsw::c#0 = main::c#2 // [3] call outsw - // [7] phi from main::@1 to outsw [phi:main::@1->outsw] + // [7] phi from main::@1 to outsw [phi:main::@1->outsw] -- call_phi_near outsw_from___b1: jsr outsw jmp __b2 @@ -442,13 +442,13 @@ outsw: { out_from_outsw: // [12] phi out::c#3 = '-' [phi:outsw->out#0] -- vbuaa=vbuc1 lda #'-' - // [12] phi idx#21 = idx#25 [phi:outsw->out#1] -- register_copy + // [12] phi idx#21 = idx#25 [phi:outsw->out#1] -- call_phi_near jsr out jmp __b1 // outsw::@1 __b1: // [9] outw::c#0 = outsw::c#0 - // [10] call outw + // [10] call outw -- call_phi_near jsr outw jmp __breturn // outsw::@return @@ -482,7 +482,7 @@ outw: { // [12] phi from outw to out [phi:outw->out] out_from_outw: // [12] phi out::c#3 = out::c#1 [phi:outw->out#0] -- register_copy - // [12] phi idx#21 = idx#22 [phi:outw->out#1] -- register_copy + // [12] phi idx#21 = idx#22 [phi:outw->out#1] -- call_phi_near jsr out jmp __b1 // outw::@1 @@ -494,7 +494,7 @@ outw: { // [12] phi from outw::@1 to out [phi:outw::@1->out] out_from___b1: // [12] phi out::c#3 = out::c#2 [phi:outw::@1->out#0] -- register_copy - // [12] phi idx#21 = idx#22 [phi:outw::@1->out#1] -- register_copy + // [12] phi idx#21 = idx#22 [phi:outw::@1->out#1] -- call_phi_near jsr out jmp __breturn // outw::@return @@ -595,7 +595,7 @@ main: { // outsw(c) // [2] outsw::c#0 = main::c#2 // [3] call outsw - // [7] phi from main::@1 to outsw [phi:main::@1->outsw] + // [7] phi from main::@1 to outsw [phi:main::@1->outsw] -- call_phi_near jsr outsw // main::@2 // for(char c: 0..39 ) @@ -617,12 +617,12 @@ outsw: { // [12] phi from outsw to out [phi:outsw->out] // [12] phi out::c#3 = '-' [phi:outsw->out#0] -- vbuaa=vbuc1 lda #'-' - // [12] phi idx#21 = idx#25 [phi:outsw->out#1] -- register_copy + // [12] phi idx#21 = idx#25 [phi:outsw->out#1] -- call_phi_near jsr out // outsw::@1 // outw(c) // [9] outw::c#0 = outsw::c#0 - // [10] call outw + // [10] call outw -- call_phi_near jsr outw // outsw::@return // } @@ -656,7 +656,7 @@ outw: { // [17] call out // [12] phi from outw to out [phi:outw->out] // [12] phi out::c#3 = out::c#1 [phi:outw->out#0] -- register_copy - // [12] phi idx#21 = idx#22 [phi:outw->out#1] -- register_copy + // [12] phi idx#21 = idx#22 [phi:outw->out#1] -- call_phi_near jsr out // outw::@1 // out(c&0x0f) @@ -666,7 +666,7 @@ outw: { // [19] call out // [12] phi from outw::@1 to out [phi:outw::@1->out] // [12] phi out::c#3 = out::c#2 [phi:outw::@1->out#0] -- register_copy - // [12] phi idx#21 = idx#22 [phi:outw::@1->out#1] -- register_copy + // [12] phi idx#21 = idx#22 [phi:outw::@1->out#1] -- call_phi_near jsr out // outw::@return // } diff --git a/src/test/ref/liverange-call-problem.log b/src/test/ref/liverange-call-problem.log index e61f1eb79..87040feb9 100644 --- a/src/test/ref/liverange-call-problem.log +++ b/src/test/ref/liverange-call-problem.log @@ -325,7 +325,7 @@ main: { // [1] call incw1 // [11] phi from main to incw1 [phi:main->incw1] incw1_from_main: - // [11] phi w1#12 = 0 [phi:main->incw1#0] -- vwuz1=vwuc1 + // [11] phi w1#12 = 0 [phi:main->incw1#0] -- call_phi_near lda #<0 sta.z w1 lda #>0 @@ -339,7 +339,7 @@ main: { // [3] call incw2 // [14] phi from main::@1 to incw2 [phi:main::@1->incw2] incw2_from___b1: - // [14] phi w2#11 = 0 [phi:main::@1->incw2#0] -- vwuz1=vwuc1 + // [14] phi w2#11 = 0 [phi:main::@1->incw2#0] -- call_phi_near lda #<0 sta.z w2 lda #>0 @@ -353,7 +353,7 @@ main: { // [5] call incw1 // [11] phi from main::@2 to incw1 [phi:main::@2->incw1] incw1_from___b2: - // [11] phi w1#12 = w1#13 [phi:main::@2->incw1#0] -- register_copy + // [11] phi w1#12 = w1#13 [phi:main::@2->incw1#0] -- call_phi_near jsr incw1 // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -363,7 +363,7 @@ main: { // [7] call incw2 // [14] phi from main::@3 to incw2 [phi:main::@3->incw2] incw2_from___b3: - // [14] phi w2#11 = w2#12 [phi:main::@3->incw2#0] -- register_copy + // [14] phi w2#11 = w2#12 [phi:main::@3->incw2#0] -- call_phi_near jsr incw2 jmp __b4 // main::@4 @@ -484,7 +484,7 @@ main: { // incw1() // [1] call incw1 // [11] phi from main to incw1 [phi:main->incw1] - // [11] phi w1#12 = 0 [phi:main->incw1#0] -- vwuz1=vwuc1 + // [11] phi w1#12 = 0 [phi:main->incw1#0] -- call_phi_near lda #<0 sta.z w1 sta.z w1+1 @@ -494,7 +494,7 @@ main: { // incw2() // [3] call incw2 // [14] phi from main::@1 to incw2 [phi:main::@1->incw2] - // [14] phi w2#11 = 0 [phi:main::@1->incw2#0] -- vwuz1=vwuc1 + // [14] phi w2#11 = 0 [phi:main::@1->incw2#0] -- call_phi_near lda #<0 sta.z w2 sta.z w2+1 @@ -504,14 +504,14 @@ main: { // incw1() // [5] call incw1 // [11] phi from main::@2 to incw1 [phi:main::@2->incw1] - // [11] phi w1#12 = w1#13 [phi:main::@2->incw1#0] -- register_copy + // [11] phi w1#12 = w1#13 [phi:main::@2->incw1#0] -- call_phi_near jsr incw1 // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // incw2() // [7] call incw2 // [14] phi from main::@3 to incw2 [phi:main::@3->incw2] - // [14] phi w2#11 = w2#12 [phi:main::@3->incw2#0] -- register_copy + // [14] phi w2#11 = w2#12 [phi:main::@3->incw2#0] -- call_phi_near jsr incw2 // main::@4 // SCREEN[0] = w1 diff --git a/src/test/ref/liverange-problem-0.log b/src/test/ref/liverange-problem-0.log index 914eb6461..53d595e94 100644 --- a/src/test/ref/liverange-problem-0.log +++ b/src/test/ref/liverange-problem-0.log @@ -305,7 +305,7 @@ __start: { // [2] call malloc // [11] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] malloc_from___init1: - // [11] phi MEM#6 = (char *) 1024 [phi:__start::__init1->malloc#0] -- pbuz1=pbuc1 + // [11] phi MEM#6 = (char *) 1024 [phi:__start::__init1->malloc#0] -- call_phi_near lda #<$400 sta.z MEM lda #>$400 @@ -323,7 +323,7 @@ __start: { // [5] call malloc // [11] phi from __start::@2 to malloc [phi:__start::@2->malloc] malloc_from___b2: - // [11] phi MEM#6 = MEM#0 [phi:__start::@2->malloc#0] -- register_copy + // [11] phi MEM#6 = MEM#0 [phi:__start::@2->malloc#0] -- call_phi_near jsr malloc // [6] malloc::return#3 = malloc::return#0 jmp __b3 @@ -335,7 +335,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [9] call main + // [9] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -458,7 +458,7 @@ __start: { // byte* SCREEN_1 = malloc() // [2] call malloc // [11] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] - // [11] phi MEM#6 = (char *) 1024 [phi:__start::__init1->malloc#0] -- pbuz1=pbuc1 + // [11] phi MEM#6 = (char *) 1024 [phi:__start::__init1->malloc#0] -- call_phi_near lda #<$400 sta.z MEM lda #>$400 @@ -475,7 +475,7 @@ __start: { // byte* SCREEN_2 = malloc() // [5] call malloc // [11] phi from __start::@2 to malloc [phi:__start::@2->malloc] - // [11] phi MEM#6 = MEM#0 [phi:__start::@2->malloc#0] -- register_copy + // [11] phi MEM#6 = MEM#0 [phi:__start::@2->malloc#0] -- call_phi_near jsr malloc // byte* SCREEN_2 = malloc() // [6] malloc::return#3 = malloc::return#0 @@ -483,7 +483,7 @@ __start: { // [7] SCREEN_2#0 = malloc::return#3 // [8] phi from __start::@3 to __start::@1 [phi:__start::@3->__start::@1] // __start::@1 - // [9] call main + // [9] call main -- call_phi_near jsr main // __start::@return // [10] return diff --git a/src/test/ref/liverange.log b/src/test/ref/liverange.log index 458f3370d..928b6882c 100644 --- a/src/test/ref/liverange.log +++ b/src/test/ref/liverange.log @@ -300,7 +300,7 @@ main: { // [1] call inci // [12] phi from main to inci [phi:main->inci] inci_from_main: - // [12] phi i#11 = 0 [phi:main->inci#0] -- vbuyy=vbuc1 + // [12] phi i#11 = 0 [phi:main->inci#0] -- call_phi_near ldy #0 jsr inci // [2] inci::return#0 = inci::return#2 @@ -315,7 +315,7 @@ main: { // [5] call inci // [12] phi from main::@1 to inci [phi:main::@1->inci] inci_from___b1: - // [12] phi i#11 = i#12 [phi:main::@1->inci#0] -- register_copy + // [12] phi i#11 = i#12 [phi:main::@1->inci#0] -- call_phi_near jsr inci // [6] inci::return#1 = inci::return#2 jmp __b2 @@ -415,7 +415,7 @@ main: { // inci() // [1] call inci // [12] phi from main to inci [phi:main->inci] - // [12] phi i#11 = 0 [phi:main->inci#0] -- vbuyy=vbuc1 + // [12] phi i#11 = 0 [phi:main->inci#0] -- call_phi_near ldy #0 jsr inci // inci() @@ -430,7 +430,7 @@ main: { // inci() // [5] call inci // [12] phi from main::@1 to inci [phi:main::@1->inci] - // [12] phi i#11 = i#12 [phi:main::@1->inci#0] -- register_copy + // [12] phi i#11 = i#12 [phi:main::@1->inci#0] -- call_phi_near jsr inci // inci() // [6] inci::return#1 = inci::return#2 diff --git a/src/test/ref/longbranch-interrupt-problem.log b/src/test/ref/longbranch-interrupt-problem.log index c8bb0b78d..1333b4a9d 100644 --- a/src/test/ref/longbranch-interrupt-problem.log +++ b/src/test/ref/longbranch-interrupt-problem.log @@ -221,7 +221,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -338,7 +338,7 @@ __start: { sta.z col // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/longjump2.log b/src/test/ref/longjump2.log index 124820e22..28d9a1199 100644 --- a/src/test/ref/longjump2.log +++ b/src/test/ref/longjump2.log @@ -225,7 +225,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call long1 - // [5] phi from main to long1 [phi:main->long1] + // [5] phi from main to long1 [phi:main->long1] -- call_phi_near long1_from_main: jsr long1 // [2] phi from main to main::@1 [phi:main->main::@1] @@ -234,7 +234,7 @@ main: { // main::@1 __b1: // [3] call long2 - // [12] phi from main::@1 to long2 [phi:main::@1->long2] + // [12] phi from main::@1 to long2 [phi:main::@1->long2] -- call_phi_near long2_from___b1: jsr long2 jmp __breturn @@ -881,13 +881,13 @@ Score: 10640 main: { // long1() // [1] call long1 - // [5] phi from main to long1 [phi:main->long1] + // [5] phi from main to long1 [phi:main->long1] -- call_phi_near jsr long1 // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // long2() // [3] call long2 - // [12] phi from main::@1 to long2 [phi:main::@1->long2] + // [12] phi from main::@1 to long2 [phi:main::@1->long2] -- call_phi_near jsr long2 // main::@return // } diff --git a/src/test/ref/loop-memset-min.log b/src/test/ref/loop-memset-min.log index 58b097890..050eaf119 100644 --- a/src/test/ref/loop-memset-min.log +++ b/src/test/ref/loop-memset-min.log @@ -276,7 +276,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call memset - // [3] phi from main to memset [phi:main->memset] + // [3] phi from main to memset [phi:main->memset] -- call_phi_near memset_from_main: jsr memset jmp __breturn @@ -387,7 +387,7 @@ Score: 523 main: { // memset(SCREEN, 'c', 1000) // [1] call memset - // [3] phi from main to memset [phi:main->memset] + // [3] phi from main to memset [phi:main->memset] -- call_phi_near jsr memset // main::@return // } diff --git a/src/test/ref/loop-problem.log b/src/test/ref/loop-problem.log index ea713553e..4a4be12eb 100644 --- a/src/test/ref/loop-problem.log +++ b/src/test/ref/loop-problem.log @@ -200,7 +200,7 @@ main: { // [0] *SCREEN = '0' -- _deref_pbuc1=vbuc2 lda #'0' sta SCREEN - // [1] call d + // [1] call d -- call_phi_near jsr d // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -208,7 +208,7 @@ main: { // main::@1 __b1: // [3] call b - // [7] phi from main::@1 to b [phi:main::@1->b] + // [7] phi from main::@1 to b [phi:main::@1->b] -- call_phi_near b_from___b1: jsr b jmp __breturn @@ -240,7 +240,7 @@ b: { jmp __b1 // b::@1 __b1: - // [9] call d + // [9] call d -- call_phi_near jsr d jmp __b2 // b::@2 @@ -317,13 +317,13 @@ main: { lda #'0' sta SCREEN // d() - // [1] call d + // [1] call d -- call_phi_near jsr d // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // b() // [3] call b - // [7] phi from main::@1 to b [phi:main::@1->b] + // [7] phi from main::@1 to b [phi:main::@1->b] -- call_phi_near jsr b // main::@return // } @@ -350,7 +350,7 @@ b: { // b::@1 __b1: // d() - // [9] call d + // [9] call d -- call_phi_near jsr d // b::@2 // for( byte i: 0..3) diff --git a/src/test/ref/loop-problem2.log b/src/test/ref/loop-problem2.log index 7a74d1625..100d011b9 100644 --- a/src/test/ref/loop-problem2.log +++ b/src/test/ref/loop-problem2.log @@ -243,7 +243,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call print_cls - // [5] phi from main to print_cls [phi:main->print_cls] + // [5] phi from main to print_cls [phi:main->print_cls] -- call_phi_near print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -252,7 +252,7 @@ main: { // main::@1 __b1: // [3] call mode_ctrl - // [11] phi from main::@1 to mode_ctrl [phi:main::@1->mode_ctrl] + // [11] phi from main::@1 to mode_ctrl [phi:main::@1->mode_ctrl] -- call_phi_near mode_ctrl_from___b1: jsr mode_ctrl jmp __breturn @@ -385,13 +385,13 @@ Score: 794 main: { // print_cls() // [1] call print_cls - // [5] phi from main to print_cls [phi:main->print_cls] + // [5] phi from main to print_cls [phi:main->print_cls] -- call_phi_near jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // mode_ctrl() // [3] call mode_ctrl - // [11] phi from main::@1 to mode_ctrl [phi:main::@1->mode_ctrl] + // [11] phi from main::@1 to mode_ctrl [phi:main::@1->mode_ctrl] -- call_phi_near jsr mode_ctrl // main::@return // } diff --git a/src/test/ref/loophead-problem-2.log b/src/test/ref/loophead-problem-2.log index 290ef02b1..c9022a575 100644 --- a/src/test/ref/loophead-problem-2.log +++ b/src/test/ref/loophead-problem-2.log @@ -371,7 +371,7 @@ ASSEMBLER BEFORE OPTIMIZATION main: { .label screen = $400 // [1] call scan_for_lowest - // [11] phi from main to scan_for_lowest [phi:main->scan_for_lowest] + // [11] phi from main to scan_for_lowest [phi:main->scan_for_lowest] -- call_phi_near scan_for_lowest_from_main: jsr scan_for_lowest // [2] scan_for_lowest::return#0 = scan_for_lowest::lowest#2 -- vbuaa=vbuz1 @@ -552,7 +552,7 @@ main: { .label screen = $400 // char hit_check=scan_for_lowest() // [1] call scan_for_lowest - // [11] phi from main to scan_for_lowest [phi:main->scan_for_lowest] + // [11] phi from main to scan_for_lowest [phi:main->scan_for_lowest] -- call_phi_near jsr scan_for_lowest // char hit_check=scan_for_lowest() // [2] scan_for_lowest::return#0 = scan_for_lowest::lowest#2 -- vbuaa=vbuz1 diff --git a/src/test/ref/loophead-problem-3.log b/src/test/ref/loophead-problem-3.log index 637540734..bf1dd5e41 100644 --- a/src/test/ref/loophead-problem-3.log +++ b/src/test/ref/loophead-problem-3.log @@ -384,7 +384,7 @@ main: { .label result = 2 .label kaputt = $a // [1] call mul16u - // [10] phi from main to mul16u [phi:main->mul16u] + // [10] phi from main to mul16u [phi:main->mul16u] -- call_phi_near mul16u_from_main: jsr mul16u // [2] mul16u::return#2 = mul16u::res#2 @@ -591,7 +591,7 @@ main: { .label kaputt = $a // dword result = mul16u(4,123) // [1] call mul16u - // [10] phi from main to mul16u [phi:main->mul16u] + // [10] phi from main to mul16u [phi:main->mul16u] -- call_phi_near jsr mul16u // dword result = mul16u(4,123) // [2] mul16u::return#2 = mul16u::res#2 diff --git a/src/test/ref/loophead-problem.log b/src/test/ref/loophead-problem.log index 47c442d02..20bd0994d 100644 --- a/src/test/ref/loophead-problem.log +++ b/src/test/ref/loophead-problem.log @@ -248,7 +248,7 @@ main: { lda #'a' sta screen+$28 // [1] call popup_selector - // [4] phi from main to popup_selector [phi:main->popup_selector] + // [4] phi from main to popup_selector [phi:main->popup_selector] -- call_phi_near popup_selector_from_main: jsr popup_selector jmp __b1 @@ -356,7 +356,7 @@ main: { sta screen+$28 // popup_selector() // [1] call popup_selector - // [4] phi from main to popup_selector [phi:main->popup_selector] + // [4] phi from main to popup_selector [phi:main->popup_selector] -- call_phi_near jsr popup_selector // main::@1 // screen[41] = opcode diff --git a/src/test/ref/loopnest.log b/src/test/ref/loopnest.log index 7e7d6ce10..deb69c6c0 100644 --- a/src/test/ref/loopnest.log +++ b/src/test/ref/loopnest.log @@ -204,7 +204,7 @@ main: { // main::@1 __b1: // [2] call nest - // [6] phi from main::@1 to nest [phi:main::@1->nest] + // [6] phi from main::@1 to nest [phi:main::@1->nest] -- call_phi_near nest_from___b1: jsr nest jmp __b2 @@ -314,7 +314,7 @@ main: { __b1: // nest() // [2] call nest - // [6] phi from main::@1 to nest [phi:main::@1->nest] + // [6] phi from main::@1 to nest [phi:main::@1->nest] -- call_phi_near jsr nest // main::@2 // while (--i>0) diff --git a/src/test/ref/loopnest2.log b/src/test/ref/loopnest2.log index 56e80a72b..d661e5dd3 100644 --- a/src/test/ref/loopnest2.log +++ b/src/test/ref/loopnest2.log @@ -430,7 +430,7 @@ main: { // main::@2 __b2: // [3] call nest1 - // [9] phi from main::@2 to nest1 [phi:main::@2->nest1] + // [9] phi from main::@2 to nest1 [phi:main::@2->nest1] -- call_phi_near nest1_from___b2: jsr nest1 jmp __b4 @@ -482,7 +482,7 @@ nest1: { // nest1::@2 __b2: // [12] call nest2 - // [18] phi from nest1::@2 to nest2 [phi:nest1::@2->nest2] + // [18] phi from nest1::@2 to nest2 [phi:nest1::@2->nest2] -- call_phi_near nest2_from___b2: jsr nest2 jmp __b4 @@ -679,7 +679,7 @@ main: { __b2: // nest1() // [3] call nest1 - // [9] phi from main::@2 to nest1 [phi:main::@2->nest1] + // [9] phi from main::@2 to nest1 [phi:main::@2->nest1] -- call_phi_near jsr nest1 // main::@4 // while (--j>0) @@ -720,7 +720,7 @@ nest1: { __b2: // nest2() // [12] call nest2 - // [18] phi from nest1::@2 to nest2 [phi:nest1::@2->nest2] + // [18] phi from nest1::@2 to nest2 [phi:nest1::@2->nest2] -- call_phi_near jsr nest2 // nest1::@4 // while (--j>0) diff --git a/src/test/ref/loopnest3.log b/src/test/ref/loopnest3.log index 71ea05214..24dc49f7e 100644 --- a/src/test/ref/loopnest3.log +++ b/src/test/ref/loopnest3.log @@ -257,7 +257,7 @@ main: { // main::@1 __b1: // [2] b::i#0 = main::i#2 - // [3] call b + // [3] call b -- call_phi_near jsr b jmp __b2 // main::@2 @@ -279,7 +279,7 @@ main: { b: { // [7] c::i#0 = b::i#0 // [8] call c - // [10] phi from b to c [phi:b->c] + // [10] phi from b to c [phi:b->c] -- call_phi_near c_from_b: jsr c jmp __breturn @@ -391,7 +391,7 @@ main: { __b1: // b(i) // [2] b::i#0 = main::i#2 - // [3] call b + // [3] call b -- call_phi_near jsr b // main::@2 // for(byte i:0..100) @@ -412,7 +412,7 @@ b: { // c(i) // [7] c::i#0 = b::i#0 // [8] call c - // [10] phi from b to c [phi:b->c] + // [10] phi from b to c [phi:b->c] -- call_phi_near jsr c // b::@return // } diff --git a/src/test/ref/malloc-0.log b/src/test/ref/malloc-0.log index 0925f45ce..408edd611 100644 --- a/src/test/ref/malloc-0.log +++ b/src/test/ref/malloc-0.log @@ -298,7 +298,7 @@ __start: { // __start::__init1 __init1: // [2] call malloc - // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] + // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] -- call_phi_near malloc_from___init1: jsr malloc // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] @@ -307,7 +307,7 @@ __start: { // __start::@1 __b1: // [4] call main - // [8] phi from __start::@1 to main [phi:__start::@1->main] + // [8] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -434,12 +434,12 @@ __start: { // __start::__init1 // byte* BYTES = malloc(0x100) // [2] call malloc - // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] + // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] -- call_phi_near jsr malloc // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [4] call main - // [8] phi from __start::@1 to main [phi:__start::@1->main] + // [8] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [5] return diff --git a/src/test/ref/malloc-1.log b/src/test/ref/malloc-1.log index 72f6b7643..310f06395 100644 --- a/src/test/ref/malloc-1.log +++ b/src/test/ref/malloc-1.log @@ -325,7 +325,7 @@ __start: { // __start::__init1 __init1: // [2] call malloc - // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] + // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] -- call_phi_near malloc_from___init1: jsr malloc // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] @@ -334,7 +334,7 @@ __start: { // __start::@1 __b1: // [4] call main - // [8] phi from __start::@1 to main [phi:__start::@1->main] + // [8] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -486,12 +486,12 @@ __start: { // __start::__init1 // word* WORDS = malloc(0x200) // [2] call malloc - // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] + // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] -- call_phi_near jsr malloc // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [4] call main - // [8] phi from __start::@1 to main [phi:__start::@1->main] + // [8] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [5] return diff --git a/src/test/ref/memcpy-0.log b/src/test/ref/memcpy-0.log index 3a6c0f1db..ea377248e 100644 --- a/src/test/ref/memcpy-0.log +++ b/src/test/ref/memcpy-0.log @@ -496,7 +496,7 @@ main: { sta.z memcpy.destination lda #>SCREEN_COPY sta.z memcpy.destination+1 - // [10] phi memcpy::source#2 = (void *)SCREEN [phi:main::@1->memcpy#2] -- pvoz1=pvoc1 + // [10] phi memcpy::source#2 = (void *)SCREEN [phi:main::@1->memcpy#2] -- call_phi_near lda #SCREEN @@ -523,7 +523,7 @@ main: { sta.z memcpy.destination lda #>CHARSET sta.z memcpy.destination+1 - // [10] phi memcpy::source#2 = (void *)CHARGEN [phi:main::@2->memcpy#2] -- pvoz1=pvoc1 + // [10] phi memcpy::source#2 = (void *)CHARGEN [phi:main::@2->memcpy#2] -- call_phi_near lda #CHARGEN @@ -722,7 +722,7 @@ main: { sta.z memcpy.destination lda #>SCREEN_COPY sta.z memcpy.destination+1 - // [10] phi memcpy::source#2 = (void *)SCREEN [phi:main::@1->memcpy#2] -- pvoz1=pvoc1 + // [10] phi memcpy::source#2 = (void *)SCREEN [phi:main::@1->memcpy#2] -- call_phi_near lda #SCREEN @@ -749,7 +749,7 @@ main: { sta.z memcpy.destination lda #>CHARSET sta.z memcpy.destination+1 - // [10] phi memcpy::source#2 = (void *)CHARGEN [phi:main::@2->memcpy#2] -- pvoz1=pvoc1 + // [10] phi memcpy::source#2 = (void *)CHARGEN [phi:main::@2->memcpy#2] -- call_phi_near lda #CHARGEN diff --git a/src/test/ref/memcpy-1.log b/src/test/ref/memcpy-1.log index ff7dcf584..65e8f759a 100644 --- a/src/test/ref/memcpy-1.log +++ b/src/test/ref/memcpy-1.log @@ -622,7 +622,7 @@ main: { sta.z memcpy.destination lda #>SCREEN+$a sta.z memcpy.destination+1 - // [18] phi memcpy::source#2 = (void *)CAMELOT [phi:main::@3->memcpy#2] -- pvoz1=pvoc1 + // [18] phi memcpy::source#2 = (void *)CAMELOT [phi:main::@3->memcpy#2] -- call_phi_near lda #CAMELOT @@ -646,7 +646,7 @@ main: { sta.z memcpy.destination lda #>SCREEN+$32 sta.z memcpy.destination+1 - // [18] phi memcpy::source#2 = (void *)main::$5 [phi:main::@4->memcpy#2] -- pvoz1=pvoc1 + // [18] phi memcpy::source#2 = (void *)main::$5 [phi:main::@4->memcpy#2] -- call_phi_near lda #<__5 sta.z memcpy.source lda #>__5 @@ -940,7 +940,7 @@ main: { sta.z memcpy.destination lda #>SCREEN+$a sta.z memcpy.destination+1 - // [18] phi memcpy::source#2 = (void *)CAMELOT [phi:main::@3->memcpy#2] -- pvoz1=pvoc1 + // [18] phi memcpy::source#2 = (void *)CAMELOT [phi:main::@3->memcpy#2] -- call_phi_near lda #CAMELOT @@ -961,7 +961,7 @@ main: { sta.z memcpy.destination lda #>SCREEN+$32 sta.z memcpy.destination+1 - // [18] phi memcpy::source#2 = (void *)main::$5 [phi:main::@4->memcpy#2] -- pvoz1=pvoc1 + // [18] phi memcpy::source#2 = (void *)main::$5 [phi:main::@4->memcpy#2] -- call_phi_near lda #<__5 sta.z memcpy.source lda #>__5 diff --git a/src/test/ref/memory-heap.log b/src/test/ref/memory-heap.log index a27fca8c9..b46ea16fc 100644 --- a/src/test/ref/memory-heap.log +++ b/src/test/ref/memory-heap.log @@ -451,7 +451,7 @@ main: { // [1] call malloc // [14] phi from main to malloc [phi:main->malloc] malloc_from_main: - // [14] phi heap_head#8 = HEAP_TOP [phi:main->malloc#0] -- pbuz1=pbuc1 + // [14] phi heap_head#8 = HEAP_TOP [phi:main->malloc#0] -- call_phi_near lda #HEAP_TOP @@ -468,7 +468,7 @@ main: { // [3] call malloc // [14] phi from main::@2 to malloc [phi:main::@2->malloc] malloc_from___b2: - // [14] phi heap_head#8 = heap_head#0 [phi:main::@2->malloc#0] -- register_copy + // [14] phi heap_head#8 = heap_head#0 [phi:main::@2->malloc#0] -- call_phi_near jsr malloc jmp __b3 // main::@3 @@ -629,7 +629,7 @@ main: { // unsigned char* buf1 = malloc(100) // [1] call malloc // [14] phi from main to malloc [phi:main->malloc] - // [14] phi heap_head#8 = HEAP_TOP [phi:main->malloc#0] -- pbuz1=pbuc1 + // [14] phi heap_head#8 = HEAP_TOP [phi:main->malloc#0] -- call_phi_near lda #HEAP_TOP @@ -645,7 +645,7 @@ main: { // unsigned char* buf2 = malloc(100) // [3] call malloc // [14] phi from main::@2 to malloc [phi:main::@2->malloc] - // [14] phi heap_head#8 = heap_head#0 [phi:main::@2->malloc#0] -- register_copy + // [14] phi heap_head#8 = heap_head#0 [phi:main::@2->malloc#0] -- call_phi_near jsr malloc // main::@3 // unsigned char* buf2 = malloc(100) diff --git a/src/test/ref/millfork-benchmarks/linkedlist-kc.log b/src/test/ref/millfork-benchmarks/linkedlist-kc.log index 88b764718..8e9709be8 100644 --- a/src/test/ref/millfork-benchmarks/linkedlist-kc.log +++ b/src/test/ref/millfork-benchmarks/linkedlist-kc.log @@ -1515,7 +1515,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -1528,7 +1528,7 @@ __start: { main: { .label __5 = 6 .label i = $a - // [6] call start + // [6] call start -- call_phi_near jsr start // [7] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -1575,7 +1575,7 @@ main: { __b2: // [9] prepend::x#0 = main::i#2 // [10] call prepend - // [26] phi from main::@2 to prepend [phi:main::@2->prepend] + // [26] phi from main::@2 to prepend [phi:main::@2->prepend] -- call_phi_near prepend_from___b2: jsr prepend jmp __b5 @@ -1598,7 +1598,7 @@ main: { jmp __b3 // main::@3 __b3: - // [14] call sum + // [14] call sum -- call_phi_near jsr sum // [15] sum::return#2 = sum::s#3 jmp __b6 @@ -1611,7 +1611,7 @@ main: { // [40] phi from main::@6 to print_char [phi:main::@6->print_char] print_char_from___b6: // [40] phi print_char_cursor#27 = print_char_cursor#48 [phi:main::@6->print_char#0] -- register_copy - // [40] phi print_char::ch#3 = print_char::ch#2 [phi:main::@6->print_char#1] -- register_copy + // [40] phi print_char::ch#3 = print_char::ch#2 [phi:main::@6->print_char#1] -- call_phi_near jsr print_char jmp __b7 // main::@7 @@ -1626,7 +1626,7 @@ main: { jmp __b4 // main::@4 __b4: - // [22] call end + // [22] call end -- call_phi_near jsr end jmp __breturn // main::@return @@ -1652,7 +1652,7 @@ start: { prepend: { .label new = 4 .label x = $a - // [27] call alloc + // [27] call alloc -- call_phi_near jsr alloc // [28] alloc::return#2 = alloc::return#0 jmp __b1 @@ -1765,7 +1765,7 @@ end: { sta.z Ticks lda.z last_time+1 sta.z Ticks+1 - // [45] call start + // [45] call start -- call_phi_near jsr start jmp __b1 // end::@1 @@ -1784,7 +1784,7 @@ end: { lda.z last_time+1 sta.z Ticks_1+1 // [48] print_uint::w#0 = Ticks#1 - // [49] call print_uint + // [49] call print_uint -- call_phi_near jsr print_uint // [50] phi from end::@1 to end::@2 [phi:end::@1->end::@2] __b2_from___b1: @@ -1792,7 +1792,7 @@ end: { // end::@2 __b2: // [51] call print_ln - // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] + // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] -- call_phi_near print_ln_from___b2: jsr print_ln jmp __breturn @@ -1843,7 +1843,7 @@ print_uint: { // [58] call print_uchar // [67] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: - // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy + // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -1853,7 +1853,7 @@ print_uint: { // [60] call print_uchar // [67] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: - // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy + // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -1919,7 +1919,7 @@ print_uchar: { // [40] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [40] phi print_char_cursor#27 = print_char_cursor#28 [phi:print_uchar->print_char#0] -- register_copy - // [40] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [40] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -1933,7 +1933,7 @@ print_uchar: { // [40] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [40] phi print_char_cursor#27 = print_char_cursor#28 [phi:print_uchar::@1->print_char#0] -- register_copy - // [40] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [40] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -2169,7 +2169,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return @@ -2180,7 +2180,7 @@ main: { .label __5 = 6 .label i = $a // start() - // [6] call start + // [6] call start -- call_phi_near jsr start // [7] phi from main to main::@1 [phi:main->main::@1] // [7] phi main::c#7 = 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 @@ -2215,7 +2215,7 @@ main: { // prepend(i) // [9] prepend::x#0 = main::i#2 // [10] call prepend - // [26] phi from main::@2 to prepend [phi:main::@2->prepend] + // [26] phi from main::@2 to prepend [phi:main::@2->prepend] -- call_phi_near jsr prepend // main::@5 // for(unsigned int i : 0..2999) @@ -2234,7 +2234,7 @@ main: { // [13] phi from main::@5 to main::@3 [phi:main::@5->main::@3] // main::@3 // sum() - // [14] call sum + // [14] call sum -- call_phi_near jsr sum // [15] sum::return#2 = sum::s#3 // main::@6 @@ -2245,7 +2245,7 @@ main: { // [18] call print_char // [40] phi from main::@6 to print_char [phi:main::@6->print_char] // [40] phi print_char_cursor#27 = print_char_cursor#48 [phi:main::@6->print_char#0] -- register_copy - // [40] phi print_char::ch#3 = print_char::ch#2 [phi:main::@6->print_char#1] -- register_copy + // [40] phi print_char::ch#3 = print_char::ch#2 [phi:main::@6->print_char#1] -- call_phi_near jsr print_char // main::@7 // for(unsigned char c : 0..4) @@ -2257,7 +2257,7 @@ main: { // [21] phi from main::@7 to main::@4 [phi:main::@7->main::@4] // main::@4 // end() - // [22] call end + // [22] call end -- call_phi_near jsr end // main::@return // } @@ -2283,7 +2283,7 @@ prepend: { .label new = 4 .label x = $a // alloc() - // [27] call alloc + // [27] call alloc -- call_phi_near jsr alloc // [28] alloc::return#2 = alloc::return#0 // prepend::@1 @@ -2399,7 +2399,7 @@ end: { lda.z last_time+1 sta.z Ticks+1 // start() - // [45] call start + // [45] call start -- call_phi_near jsr start // end::@1 // last_time -= Ticks @@ -2419,13 +2419,13 @@ end: { sta.z Ticks_1+1 // print_uint(Ticks) // [48] print_uint::w#0 = Ticks#1 - // [49] call print_uint + // [49] call print_uint -- call_phi_near jsr print_uint // [50] phi from end::@1 to end::@2 [phi:end::@1->end::@2] // end::@2 // print_ln() // [51] call print_ln - // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] + // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] -- call_phi_near jsr print_ln // end::@return // } @@ -2475,7 +2475,7 @@ print_uint: { ldx.z w+1 // [58] call print_uchar // [67] phi from print_uint to print_uchar [phi:print_uint->print_uchar] - // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy + // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -2483,7 +2483,7 @@ print_uint: { ldx.z w // [60] call print_uchar // [67] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] - // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy + // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -2546,7 +2546,7 @@ print_uchar: { // Table of hexadecimal digits // [40] phi from print_uchar to print_char [phi:print_uchar->print_char] // [40] phi print_char_cursor#27 = print_char_cursor#28 [phi:print_uchar->print_char#0] -- register_copy - // [40] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [40] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -2559,7 +2559,7 @@ print_uchar: { // [73] call print_char // [40] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [40] phi print_char_cursor#27 = print_char_cursor#28 [phi:print_uchar::@1->print_char#0] -- register_copy - // [40] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [40] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/millfork-benchmarks/plasma-kc.log b/src/test/ref/millfork-benchmarks/plasma-kc.log index 6498dc65b..717ae4bad 100644 --- a/src/test/ref/millfork-benchmarks/plasma-kc.log +++ b/src/test/ref/millfork-benchmarks/plasma-kc.log @@ -2315,7 +2315,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -2330,7 +2330,7 @@ main: { .label v = $19 .label count = 2 // [6] call makechar - // [25] phi from main to makechar [phi:main->makechar] + // [25] phi from main to makechar [phi:main->makechar] -- call_phi_near makechar_from_main: jsr makechar // [7] phi from main to main::@4 [phi:main->main::@4] @@ -2338,7 +2338,7 @@ main: { jmp __b4 // main::@4 __b4: - // [8] call start + // [8] call start -- call_phi_near jsr start jmp __b5 // main::@5 @@ -2378,7 +2378,7 @@ main: { // [16] *((char *)CIA2) = main::block#1 -- _deref_pbuc1=vbuz1 lda.z block sta CIA2 - // [17] call end + // [17] call end -- call_phi_near /* Reset screen colors */ jsr end jmp __breturn @@ -2395,7 +2395,7 @@ main: { /* Build page 1, then make it visible */ // [61] phi from main::@2 to doplasma [phi:main::@2->doplasma] doplasma_from___b2: - // [61] phi doplasma::scrn#13 = SCREEN1 [phi:main::@2->doplasma#0] -- pbuz1=pbuc1 + // [61] phi doplasma::scrn#13 = SCREEN1 [phi:main::@2->doplasma#0] -- call_phi_near lda #SCREEN1 @@ -2411,7 +2411,7 @@ main: { /* Build page 2, then make it visible */ // [61] phi from main::@6 to doplasma [phi:main::@6->doplasma] doplasma_from___b6: - // [61] phi doplasma::scrn#13 = SCREEN2 [phi:main::@6->doplasma#0] -- pbuz1=pbuc1 + // [61] phi doplasma::scrn#13 = SCREEN2 [phi:main::@6->doplasma#0] -- call_phi_near lda #SCREEN2 @@ -2565,7 +2565,7 @@ makechar: { jmp __b6 // makechar::@6 __b6: - // [42] call rand + // [42] call rand -- call_phi_near jsr rand // [43] rand::return#2 = rand::return#0 jmp __b10 @@ -2623,7 +2623,7 @@ end: { sta.z Ticks lda.z last_time+1 sta.z Ticks+1 - // [53] call start + // [53] call start -- call_phi_near jsr start jmp __b1 // end::@1 @@ -2642,7 +2642,7 @@ end: { lda.z last_time+1 sta.z Ticks_1+1 // [56] print_uint::w#0 = Ticks#1 - // [57] call print_uint + // [57] call print_uint -- call_phi_near jsr print_uint // [58] phi from end::@1 to end::@2 [phi:end::@1->end::@2] __b2_from___b1: @@ -2650,7 +2650,7 @@ end: { // end::@2 __b2: // [59] call print_ln - // [99] phi from end::@2 to print_ln [phi:end::@2->print_ln] + // [99] phi from end::@2 to print_ln [phi:end::@2->print_ln] -- call_phi_near print_ln_from___b2: jsr print_ln jmp __breturn @@ -2897,7 +2897,7 @@ print_uint: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [104] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [104] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -2908,7 +2908,7 @@ print_uint: { // [104] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [104] phi print_char_cursor#37 = print_char_cursor#27 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [104] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [104] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -2974,7 +2974,7 @@ print_uchar: { // [112] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [112] phi print_char_cursor#26 = print_char_cursor#37 [phi:print_uchar->print_char#0] -- register_copy - // [112] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [112] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -2988,7 +2988,7 @@ print_uchar: { // [112] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [112] phi print_char_cursor#26 = print_char_cursor#27 [phi:print_uchar::@1->print_char#0] -- register_copy - // [112] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [112] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -3361,7 +3361,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return @@ -3374,12 +3374,12 @@ main: { .label count = 2 // makechar() // [6] call makechar - // [25] phi from main to makechar [phi:main->makechar] + // [25] phi from main to makechar [phi:main->makechar] -- call_phi_near jsr makechar // [7] phi from main to main::@4 [phi:main->main::@4] // main::@4 // start() - // [8] call start + // [8] call start -- call_phi_near jsr start // main::@5 // block = CIA2->PORT_A @@ -3421,7 +3421,7 @@ main: { lda.z block sta CIA2 // end() - // [17] call end + // [17] call end -- call_phi_near /* Reset screen colors */ jsr end // main::@return @@ -3435,7 +3435,7 @@ main: { // [20] call doplasma /* Build page 1, then make it visible */ // [61] phi from main::@2 to doplasma [phi:main::@2->doplasma] - // [61] phi doplasma::scrn#13 = SCREEN1 [phi:main::@2->doplasma#0] -- pbuz1=pbuc1 + // [61] phi doplasma::scrn#13 = SCREEN1 [phi:main::@2->doplasma#0] -- call_phi_near lda #SCREEN1 @@ -3450,7 +3450,7 @@ main: { // [22] call doplasma /* Build page 2, then make it visible */ // [61] phi from main::@6 to doplasma [phi:main::@6->doplasma] - // [61] phi doplasma::scrn#13 = SCREEN2 [phi:main::@6->doplasma#0] -- pbuz1=pbuc1 + // [61] phi doplasma::scrn#13 = SCREEN2 [phi:main::@6->doplasma#0] -- call_phi_near lda #SCREEN2 @@ -3597,7 +3597,7 @@ makechar: { // makechar::@6 __b6: // rand() - // [42] call rand + // [42] call rand -- call_phi_near jsr rand // [43] rand::return#2 = rand::return#0 // makechar::@10 @@ -3653,7 +3653,7 @@ end: { lda.z last_time+1 sta.z Ticks+1 // start() - // [53] call start + // [53] call start -- call_phi_near jsr start // end::@1 // last_time -= Ticks @@ -3673,13 +3673,13 @@ end: { sta.z Ticks_1+1 // print_uint(Ticks) // [56] print_uint::w#0 = Ticks#1 - // [57] call print_uint + // [57] call print_uint -- call_phi_near jsr print_uint // [58] phi from end::@1 to end::@2 [phi:end::@1->end::@2] // end::@2 // print_ln() // [59] call print_ln - // [99] phi from end::@2 to print_ln [phi:end::@2->print_ln] + // [99] phi from end::@2 to print_ln [phi:end::@2->print_ln] -- call_phi_near jsr print_ln // end::@return // } @@ -3932,7 +3932,7 @@ print_uint: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [104] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [104] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -3941,7 +3941,7 @@ print_uint: { // [97] call print_uchar // [104] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [104] phi print_char_cursor#37 = print_char_cursor#27 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [104] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [104] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -4004,7 +4004,7 @@ print_uchar: { // Table of hexadecimal digits // [112] phi from print_uchar to print_char [phi:print_uchar->print_char] // [112] phi print_char_cursor#26 = print_char_cursor#37 [phi:print_uchar->print_char#0] -- register_copy - // [112] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [112] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -4017,7 +4017,7 @@ print_uchar: { // [110] call print_char // [112] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [112] phi print_char_cursor#26 = print_char_cursor#27 [phi:print_uchar::@1->print_char#0] -- register_copy - // [112] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [112] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/millfork-benchmarks/romsum-kc.log b/src/test/ref/millfork-benchmarks/romsum-kc.log index a29fd50cf..f2b536ec9 100644 --- a/src/test/ref/millfork-benchmarks/romsum-kc.log +++ b/src/test/ref/millfork-benchmarks/romsum-kc.log @@ -2079,7 +2079,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -2091,7 +2091,7 @@ __start: { // main main: { .label i = $d - // [6] call start + // [6] call start -- call_phi_near jsr start // [7] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -2125,7 +2125,7 @@ main: { jmp __b3 // main::@3 __b3: - // [10] call end + // [10] call end -- call_phi_near jsr end jmp __breturn // main::@return @@ -2138,7 +2138,7 @@ main: { // main::@2 __b2: // [13] call sum - // [32] phi from main::@2 to sum [phi:main::@2->sum] + // [32] phi from main::@2 to sum [phi:main::@2->sum] -- call_phi_near sum_from___b2: jsr sum // [14] sum::return#2 = sum::s#3 @@ -2146,7 +2146,7 @@ main: { // main::@4 __b4: // [15] print_uint_decimal::w#0 = sum::return#2 - // [16] call print_uint_decimal + // [16] call print_uint_decimal -- call_phi_near jsr print_uint_decimal // [17] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: @@ -2156,7 +2156,7 @@ main: { // [18] call print_ln // [48] phi from main::@5 to print_ln [phi:main::@5->print_ln] print_ln_from___b5: - // [48] phi print_char_cursor#49 = print_char_cursor#1 [phi:main::@5->print_ln#0] -- register_copy + // [48] phi print_char_cursor#49 = print_char_cursor#1 [phi:main::@5->print_ln#0] -- call_phi_near jsr print_ln jmp __b6 // main::@6 @@ -2198,7 +2198,7 @@ end: { sta.z Ticks lda.z last_time+1 sta.z Ticks+1 - // [24] call start + // [24] call start -- call_phi_near jsr start jmp __b1 // end::@1 @@ -2217,7 +2217,7 @@ end: { lda.z last_time+1 sta.z Ticks_1+1 // [27] print_uint::w#0 = Ticks#1 - // [28] call print_uint + // [28] call print_uint -- call_phi_near jsr print_uint // [29] phi from end::@1 to end::@2 [phi:end::@1->end::@2] __b2_from___b1: @@ -2227,7 +2227,7 @@ end: { // [30] call print_ln // [48] phi from end::@2 to print_ln [phi:end::@2->print_ln] print_ln_from___b2: - // [48] phi print_char_cursor#49 = print_char_cursor#12 [phi:end::@2->print_ln#0] -- register_copy + // [48] phi print_char_cursor#49 = print_char_cursor#12 [phi:end::@2->print_ln#0] -- call_phi_near jsr print_ln jmp __breturn // end::@return @@ -2320,7 +2320,7 @@ print_uint_decimal: { .label w = 2 // [43] utoa::value#0 = print_uint_decimal::w#0 // [44] call utoa - // [58] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] + // [58] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] -- call_phi_near utoa_from_print_uint_decimal: jsr utoa // [45] phi from print_uint_decimal to print_uint_decimal::@1 [phi:print_uint_decimal->print_uint_decimal::@1] @@ -2329,7 +2329,7 @@ print_uint_decimal: { // print_uint_decimal::@1 __b1: // [46] call print_str - // [79] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] + // [79] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] -- call_phi_near print_str_from___b1: jsr print_str jmp __breturn @@ -2382,7 +2382,7 @@ print_uint: { // [86] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [86] phi print_char_cursor#52 = print_char_cursor#54 [phi:print_uint->print_uchar#0] -- register_copy - // [86] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [86] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -2393,7 +2393,7 @@ print_uint: { // [86] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [86] phi print_char_cursor#52 = print_char_cursor#12 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [86] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [86] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -2506,7 +2506,7 @@ utoa: { // [73] utoa_append::value#0 = utoa::value#2 // [74] utoa_append::sub#0 = utoa::digit_value#0 // [75] call utoa_append - // [94] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + // [94] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near utoa_append_from___b5: jsr utoa_append // [76] utoa_append::return#0 = utoa_append::value#2 @@ -2562,7 +2562,7 @@ print_str: { // [101] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [101] phi print_char_cursor#36 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [101] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [101] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -2596,7 +2596,7 @@ print_uchar: { // [101] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [101] phi print_char_cursor#36 = print_char_cursor#52 [phi:print_uchar->print_char#0] -- register_copy - // [101] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy + // [101] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -2610,7 +2610,7 @@ print_uchar: { // [101] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [101] phi print_char_cursor#36 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [101] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy + // [101] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -3007,7 +3007,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return @@ -3017,7 +3017,7 @@ __start: { main: { .label i = $d // start() - // [6] call start + // [6] call start -- call_phi_near jsr start // [7] phi from main to main::@1 [phi:main->main::@1] // [7] phi print_line_cursor#22 = print_screen#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -3047,7 +3047,7 @@ main: { // [9] phi from main::@1 to main::@3 [phi:main::@1->main::@3] // main::@3 // end() - // [10] call end + // [10] call end -- call_phi_near jsr end // main::@return // } @@ -3058,21 +3058,21 @@ main: { __b2: // sum() // [13] call sum - // [32] phi from main::@2 to sum [phi:main::@2->sum] + // [32] phi from main::@2 to sum [phi:main::@2->sum] -- call_phi_near jsr sum // sum() // [14] sum::return#2 = sum::s#3 // main::@4 // print_uint_decimal(sum()) // [15] print_uint_decimal::w#0 = sum::return#2 - // [16] call print_uint_decimal + // [16] call print_uint_decimal -- call_phi_near jsr print_uint_decimal // [17] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 // print_ln() // [18] call print_ln // [48] phi from main::@5 to print_ln [phi:main::@5->print_ln] - // [48] phi print_char_cursor#49 = print_char_cursor#1 [phi:main::@5->print_ln#0] -- register_copy + // [48] phi print_char_cursor#49 = print_char_cursor#1 [phi:main::@5->print_ln#0] -- call_phi_near jsr print_ln // main::@6 // for(i=0;i<6;i++) @@ -3114,7 +3114,7 @@ end: { lda.z last_time+1 sta.z Ticks+1 // start() - // [24] call start + // [24] call start -- call_phi_near jsr start // end::@1 // last_time -= Ticks @@ -3134,14 +3134,14 @@ end: { sta.z Ticks_1+1 // print_uint(Ticks) // [27] print_uint::w#0 = Ticks#1 - // [28] call print_uint + // [28] call print_uint -- call_phi_near jsr print_uint // [29] phi from end::@1 to end::@2 [phi:end::@1->end::@2] // end::@2 // print_ln() // [30] call print_ln // [48] phi from end::@2 to print_ln [phi:end::@2->print_ln] - // [48] phi print_char_cursor#49 = print_char_cursor#12 [phi:end::@2->print_ln#0] -- register_copy + // [48] phi print_char_cursor#49 = print_char_cursor#12 [phi:end::@2->print_ln#0] -- call_phi_near jsr print_ln // end::@return // } @@ -3231,13 +3231,13 @@ print_uint_decimal: { // utoa(w, decimal_digits, DECIMAL) // [43] utoa::value#0 = print_uint_decimal::w#0 // [44] call utoa - // [58] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] + // [58] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] -- call_phi_near jsr utoa // [45] phi from print_uint_decimal to print_uint_decimal::@1 [phi:print_uint_decimal->print_uint_decimal::@1] // print_uint_decimal::@1 // print_str(decimal_digits) // [46] call print_str - // [79] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] + // [79] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] -- call_phi_near jsr print_str // print_uint_decimal::@return // } @@ -3286,7 +3286,7 @@ print_uint: { // [54] call print_uchar // [86] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [86] phi print_char_cursor#52 = print_char_cursor#54 [phi:print_uint->print_uchar#0] -- register_copy - // [86] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [86] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -3295,7 +3295,7 @@ print_uint: { // [56] call print_uchar // [86] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [86] phi print_char_cursor#52 = print_char_cursor#12 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [86] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [86] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -3404,7 +3404,7 @@ utoa: { // [73] utoa_append::value#0 = utoa::value#2 // [74] utoa_append::sub#0 = utoa::digit_value#0 // [75] call utoa_append - // [94] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + // [94] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near jsr utoa_append // utoa_append(buffer++, value, digit_value) // [76] utoa_append::return#0 = utoa_append::value#2 @@ -3457,7 +3457,7 @@ print_str: { // [84] call print_char // [101] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [101] phi print_char_cursor#36 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [101] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [101] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); @@ -3490,7 +3490,7 @@ print_uchar: { // Table of hexadecimal digits // [101] phi from print_uchar to print_char [phi:print_uchar->print_char] // [101] phi print_char_cursor#36 = print_char_cursor#52 [phi:print_uchar->print_char#0] -- register_copy - // [101] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy + // [101] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -3503,7 +3503,7 @@ print_uchar: { // [92] call print_char // [101] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [101] phi print_char_cursor#36 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [101] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy + // [101] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/millfork-benchmarks/sieve-kc.log b/src/test/ref/millfork-benchmarks/sieve-kc.log index 2d2c4c18b..c022d9e19 100644 --- a/src/test/ref/millfork-benchmarks/sieve-kc.log +++ b/src/test/ref/millfork-benchmarks/sieve-kc.log @@ -1162,7 +1162,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -1173,7 +1173,7 @@ __start: { } // main main: { - // [6] call start + // [6] call start -- call_phi_near jsr start // [7] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -1181,7 +1181,7 @@ main: { // main::@1 __b1: // [8] call round - // [32] phi from main::@1 to round [phi:main::@1->round] + // [32] phi from main::@1 to round [phi:main::@1->round] -- call_phi_near round_from___b1: jsr round // [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -1190,7 +1190,7 @@ main: { // main::@2 __b2: // [10] call round - // [32] phi from main::@2 to round [phi:main::@2->round] + // [32] phi from main::@2 to round [phi:main::@2->round] -- call_phi_near round_from___b2: jsr round // [11] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -1199,7 +1199,7 @@ main: { // main::@3 __b3: // [12] call round - // [32] phi from main::@3 to round [phi:main::@3->round] + // [32] phi from main::@3 to round [phi:main::@3->round] -- call_phi_near round_from___b3: jsr round // [13] phi from main::@3 to main::@4 [phi:main::@3->main::@4] @@ -1208,7 +1208,7 @@ main: { // main::@4 __b4: // [14] call round - // [32] phi from main::@4 to round [phi:main::@4->round] + // [32] phi from main::@4 to round [phi:main::@4->round] -- call_phi_near round_from___b4: jsr round // [15] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -1217,7 +1217,7 @@ main: { // main::@5 __b5: // [16] call round - // [32] phi from main::@5 to round [phi:main::@5->round] + // [32] phi from main::@5 to round [phi:main::@5->round] -- call_phi_near round_from___b5: jsr round // [17] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -1226,7 +1226,7 @@ main: { // main::@6 __b6: // [18] call round - // [32] phi from main::@6 to round [phi:main::@6->round] + // [32] phi from main::@6 to round [phi:main::@6->round] -- call_phi_near round_from___b6: jsr round // [19] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -1235,7 +1235,7 @@ main: { // main::@7 __b7: // [20] call round - // [32] phi from main::@7 to round [phi:main::@7->round] + // [32] phi from main::@7 to round [phi:main::@7->round] -- call_phi_near round_from___b7: jsr round // [21] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -1244,7 +1244,7 @@ main: { // main::@8 __b8: // [22] call round - // [32] phi from main::@8 to round [phi:main::@8->round] + // [32] phi from main::@8 to round [phi:main::@8->round] -- call_phi_near round_from___b8: jsr round // [23] phi from main::@8 to main::@9 [phi:main::@8->main::@9] @@ -1253,7 +1253,7 @@ main: { // main::@9 __b9: // [24] call round - // [32] phi from main::@9 to round [phi:main::@9->round] + // [32] phi from main::@9 to round [phi:main::@9->round] -- call_phi_near round_from___b9: jsr round // [25] phi from main::@9 to main::@10 [phi:main::@9->main::@10] @@ -1262,7 +1262,7 @@ main: { // main::@10 __b10: // [26] call round - // [32] phi from main::@10 to round [phi:main::@10->round] + // [32] phi from main::@10 to round [phi:main::@10->round] -- call_phi_near round_from___b10: jsr round // [27] phi from main::@10 to main::@11 [phi:main::@10->main::@11] @@ -1270,7 +1270,7 @@ main: { jmp __b11 // main::@11 __b11: - // [28] call end + // [28] call end -- call_phi_near jsr end jmp __breturn // main::@return @@ -1411,7 +1411,7 @@ end: { sta.z Ticks lda.z last_time+1 sta.z Ticks+1 - // [49] call start + // [49] call start -- call_phi_near jsr start jmp __b1 // end::@1 @@ -1430,7 +1430,7 @@ end: { lda.z last_time+1 sta.z Ticks_1+1 // [52] print_uint::w#0 = Ticks#1 - // [53] call print_uint + // [53] call print_uint -- call_phi_near jsr print_uint // [54] phi from end::@1 to end::@2 [phi:end::@1->end::@2] __b2_from___b1: @@ -1438,7 +1438,7 @@ end: { // end::@2 __b2: // [55] call print_ln - // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] + // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] -- call_phi_near print_ln_from___b2: jsr print_ln jmp __breturn @@ -1462,7 +1462,7 @@ print_uint: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -1473,7 +1473,7 @@ print_uint: { // [67] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [67] phi print_char_cursor#37 = print_char_cursor#27 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -1539,7 +1539,7 @@ print_uchar: { // [75] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [75] phi print_char_cursor#26 = print_char_cursor#37 [phi:print_uchar->print_char#0] -- register_copy - // [75] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [75] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -1553,7 +1553,7 @@ print_uchar: { // [75] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [75] phi print_char_cursor#26 = print_char_cursor#27 [phi:print_uchar::@1->print_char#0] -- register_copy - // [75] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [75] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -1802,7 +1802,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return @@ -1811,72 +1811,72 @@ __start: { // main main: { // start() - // [6] call start + // [6] call start -- call_phi_near jsr start // [7] phi from main to main::@1 [phi:main->main::@1] // main::@1 // round() // [8] call round - // [32] phi from main::@1 to round [phi:main::@1->round] + // [32] phi from main::@1 to round [phi:main::@1->round] -- call_phi_near jsr round // [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // round() // [10] call round - // [32] phi from main::@2 to round [phi:main::@2->round] + // [32] phi from main::@2 to round [phi:main::@2->round] -- call_phi_near jsr round // [11] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // round() // [12] call round - // [32] phi from main::@3 to round [phi:main::@3->round] + // [32] phi from main::@3 to round [phi:main::@3->round] -- call_phi_near jsr round // [13] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // round() // [14] call round - // [32] phi from main::@4 to round [phi:main::@4->round] + // [32] phi from main::@4 to round [phi:main::@4->round] -- call_phi_near jsr round // [15] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 // round() // [16] call round - // [32] phi from main::@5 to round [phi:main::@5->round] + // [32] phi from main::@5 to round [phi:main::@5->round] -- call_phi_near jsr round // [17] phi from main::@5 to main::@6 [phi:main::@5->main::@6] // main::@6 // round() // [18] call round - // [32] phi from main::@6 to round [phi:main::@6->round] + // [32] phi from main::@6 to round [phi:main::@6->round] -- call_phi_near jsr round // [19] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 // round() // [20] call round - // [32] phi from main::@7 to round [phi:main::@7->round] + // [32] phi from main::@7 to round [phi:main::@7->round] -- call_phi_near jsr round // [21] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 // round() // [22] call round - // [32] phi from main::@8 to round [phi:main::@8->round] + // [32] phi from main::@8 to round [phi:main::@8->round] -- call_phi_near jsr round // [23] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 // round() // [24] call round - // [32] phi from main::@9 to round [phi:main::@9->round] + // [32] phi from main::@9 to round [phi:main::@9->round] -- call_phi_near jsr round // [25] phi from main::@9 to main::@10 [phi:main::@9->main::@10] // main::@10 // round() // [26] call round - // [32] phi from main::@10 to round [phi:main::@10->round] + // [32] phi from main::@10 to round [phi:main::@10->round] -- call_phi_near jsr round // [27] phi from main::@10 to main::@11 [phi:main::@10->main::@11] // main::@11 // end() - // [28] call end + // [28] call end -- call_phi_near jsr end // main::@return // } @@ -2016,7 +2016,7 @@ end: { lda.z last_time+1 sta.z Ticks+1 // start() - // [49] call start + // [49] call start -- call_phi_near jsr start // end::@1 // last_time -= Ticks @@ -2036,13 +2036,13 @@ end: { sta.z Ticks_1+1 // print_uint(Ticks) // [52] print_uint::w#0 = Ticks#1 - // [53] call print_uint + // [53] call print_uint -- call_phi_near jsr print_uint // [54] phi from end::@1 to end::@2 [phi:end::@1->end::@2] // end::@2 // print_ln() // [55] call print_ln - // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] + // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] -- call_phi_near jsr print_ln // end::@return // } @@ -2064,7 +2064,7 @@ print_uint: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -2073,7 +2073,7 @@ print_uint: { // [60] call print_uchar // [67] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [67] phi print_char_cursor#37 = print_char_cursor#27 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -2136,7 +2136,7 @@ print_uchar: { // Table of hexadecimal digits // [75] phi from print_uchar to print_char [phi:print_uchar->print_char] // [75] phi print_char_cursor#26 = print_char_cursor#37 [phi:print_uchar->print_char#0] -- register_copy - // [75] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [75] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -2149,7 +2149,7 @@ print_uchar: { // [73] call print_char // [75] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [75] phi print_char_cursor#26 = print_char_cursor#27 [phi:print_uchar::@1->print_char#0] -- register_copy - // [75] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [75] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/min-fmul-16.log b/src/test/ref/min-fmul-16.log index a5d1cdb6c..c77e7eb9b 100644 --- a/src/test/ref/min-fmul-16.log +++ b/src/test/ref/min-fmul-16.log @@ -1304,7 +1304,7 @@ main: { .label b = $929 .label r = $a // [1] call mulf_init - // [12] phi from main to mulf_init [phi:main->mulf_init] + // [12] phi from main to mulf_init [phi:main->mulf_init] -- call_phi_near mulf_init_from_main: jsr mulf_init jmp __b4 @@ -1334,7 +1334,7 @@ main: { __b3: // [5] *BORDER_COLOR = ++ *BORDER_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 inc BORDER_COLOR - // [6] call mulf16u + // [6] call mulf16u -- call_phi_near jsr mulf16u // [7] mulf16u::return#0 = mulf16u::return#1 jmp __b5 @@ -1344,7 +1344,7 @@ main: { // [9] *BORDER_COLOR = -- *BORDER_COLOR -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDER_COLOR // [10] print_ulong::dw#0 = main::r#0 - // [11] call print_ulong + // [11] call print_ulong -- call_phi_near jsr print_ulong // [3] phi from main::@5 to main::@1 [phi:main::@5->main::@1] __b1_from___b5: @@ -1702,7 +1702,7 @@ print_ulong: { // [51] phi from print_ulong to print_uint [phi:print_ulong->print_uint] print_uint_from_print_ulong: // [51] phi print_char_cursor#36 = print_char_cursor#15 [phi:print_ulong->print_uint#0] -- register_copy - // [51] phi print_uint::w#2 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- register_copy + // [51] phi print_uint::w#2 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- call_phi_near jsr print_uint jmp __b1 // print_ulong::@1 @@ -1716,7 +1716,7 @@ print_ulong: { // [51] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] print_uint_from___b1: // [51] phi print_char_cursor#36 = print_char_cursor#10 [phi:print_ulong::@1->print_uint#0] -- register_copy - // [51] phi print_uint::w#2 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- register_copy + // [51] phi print_uint::w#2 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- call_phi_near jsr print_uint jmp __breturn // print_ulong::@return @@ -1735,7 +1735,7 @@ print_uint: { // [57] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [57] phi print_char_cursor#38 = print_char_cursor#36 [phi:print_uint->print_uchar#0] -- register_copy - // [57] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [57] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -1746,7 +1746,7 @@ print_uint: { // [57] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [57] phi print_char_cursor#38 = print_char_cursor#10 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [57] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [57] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -1772,7 +1772,7 @@ print_uchar: { // [65] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [65] phi print_char_cursor#28 = print_char_cursor#38 [phi:print_uchar->print_char#0] -- register_copy - // [65] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [65] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -1786,7 +1786,7 @@ print_uchar: { // [65] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [65] phi print_char_cursor#28 = print_char_cursor#10 [phi:print_uchar::@1->print_char#0] -- register_copy - // [65] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [65] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -2039,7 +2039,7 @@ main: { .label r = $a // mulf_init() // [1] call mulf_init - // [12] phi from main to mulf_init [phi:main->mulf_init] + // [12] phi from main to mulf_init [phi:main->mulf_init] -- call_phi_near jsr mulf_init // main::@4 // asm @@ -2064,7 +2064,7 @@ main: { // [5] *BORDER_COLOR = ++ *BORDER_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 inc BORDER_COLOR // dword r = mulf16u(a, b) - // [6] call mulf16u + // [6] call mulf16u -- call_phi_near jsr mulf16u // [7] mulf16u::return#0 = mulf16u::return#1 // main::@5 @@ -2074,7 +2074,7 @@ main: { dec BORDER_COLOR // print_ulong(r) // [10] print_ulong::dw#0 = main::r#0 - // [11] call print_ulong + // [11] call print_ulong -- call_phi_near jsr print_ulong // [3] phi from main::@5 to main::@1 [phi:main::@5->main::@1] // [3] phi print_char_cursor#15 = SCREEN [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 @@ -2431,7 +2431,7 @@ print_ulong: { // [47] call print_uint // [51] phi from print_ulong to print_uint [phi:print_ulong->print_uint] // [51] phi print_char_cursor#36 = print_char_cursor#15 [phi:print_ulong->print_uint#0] -- register_copy - // [51] phi print_uint::w#2 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- register_copy + // [51] phi print_uint::w#2 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- call_phi_near jsr print_uint // print_ulong::@1 // print_uint(WORD0(dw)) @@ -2443,7 +2443,7 @@ print_ulong: { // [49] call print_uint // [51] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] // [51] phi print_char_cursor#36 = print_char_cursor#10 [phi:print_ulong::@1->print_uint#0] -- register_copy - // [51] phi print_uint::w#2 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- register_copy + // [51] phi print_uint::w#2 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- call_phi_near jsr print_uint // print_ulong::@return // } @@ -2461,7 +2461,7 @@ print_uint: { // [53] call print_uchar // [57] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [57] phi print_char_cursor#38 = print_char_cursor#36 [phi:print_uint->print_uchar#0] -- register_copy - // [57] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [57] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -2470,7 +2470,7 @@ print_uint: { // [55] call print_uchar // [57] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [57] phi print_char_cursor#38 = print_char_cursor#10 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [57] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [57] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -2496,7 +2496,7 @@ print_uchar: { // Table of hexadecimal digits // [65] phi from print_uchar to print_char [phi:print_uchar->print_char] // [65] phi print_char_cursor#28 = print_char_cursor#38 [phi:print_uchar->print_char#0] -- register_copy - // [65] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [65] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -2509,7 +2509,7 @@ print_uchar: { // [63] call print_char // [65] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [65] phi print_char_cursor#28 = print_char_cursor#10 [phi:print_uchar::@1->print_char#0] -- register_copy - // [65] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [65] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/missing-band.log b/src/test/ref/missing-band.log index 344b3707d..f452c37cb 100644 --- a/src/test/ref/missing-band.log +++ b/src/test/ref/missing-band.log @@ -198,7 +198,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { .label a = 2 - // [1] call foo + // [1] call foo -- call_phi_near jsr foo // [2] foo::return#0 = foo::return#1 jmp __b1 @@ -287,7 +287,7 @@ Score: 39 main: { .label a = 2 // foo(1) - // [1] call foo + // [1] call foo -- call_phi_near jsr foo // [2] foo::return#0 = foo::return#1 // main::@1 diff --git a/src/test/ref/modglobal.log b/src/test/ref/modglobal.log index 955b0c772..c76028bca 100644 --- a/src/test/ref/modglobal.log +++ b/src/test/ref/modglobal.log @@ -394,7 +394,7 @@ main: { ldx #0 // [13] phi cnt2#11 = 0 [phi:main->inccnt#1] -- vbuyy=vbuc1 ldy #0 - // [13] phi cnt#12 = 0 [phi:main->inccnt#2] -- vbuaa=vbuc1 + // [13] phi cnt#12 = 0 [phi:main->inccnt#2] -- call_phi_near lda #0 jsr inccnt // [2] inccnt::return#0 = inccnt::return#2 @@ -413,7 +413,7 @@ main: { inccnt_from___b1: // [13] phi cnt3#11 = cnt3#12 [phi:main::@1->inccnt#0] -- register_copy // [13] phi cnt2#11 = cnt2#12 [phi:main::@1->inccnt#1] -- register_copy - // [13] phi cnt#12 = cnt#1 [phi:main::@1->inccnt#2] -- register_copy + // [13] phi cnt#12 = cnt#1 [phi:main::@1->inccnt#2] -- call_phi_near jsr inccnt // [7] inccnt::return#1 = inccnt::return#2 jmp __b2 @@ -527,7 +527,7 @@ main: { ldx #0 // [13] phi cnt2#11 = 0 [phi:main->inccnt#1] -- vbuyy=vbuc1 ldy #0 - // [13] phi cnt#12 = 0 [phi:main->inccnt#2] -- vbuaa=vbuc1 + // [13] phi cnt#12 = 0 [phi:main->inccnt#2] -- call_phi_near txa jsr inccnt // inccnt() @@ -547,7 +547,7 @@ main: { // [13] phi from main::@1 to inccnt [phi:main::@1->inccnt] // [13] phi cnt3#11 = cnt3#12 [phi:main::@1->inccnt#0] -- register_copy // [13] phi cnt2#11 = cnt2#12 [phi:main::@1->inccnt#1] -- register_copy - // [13] phi cnt#12 = cnt#1 [phi:main::@1->inccnt#2] -- register_copy + // [13] phi cnt#12 = cnt#1 [phi:main::@1->inccnt#2] -- call_phi_near jsr inccnt // inccnt() // [7] inccnt::return#1 = inccnt::return#2 diff --git a/src/test/ref/modglobalmin.log b/src/test/ref/modglobalmin.log index be74abc80..1868da3ec 100644 --- a/src/test/ref/modglobalmin.log +++ b/src/test/ref/modglobalmin.log @@ -215,7 +215,7 @@ main: { // [1] call inccnt // [8] phi from main to inccnt [phi:main->inccnt] inccnt_from_main: - // [8] phi cnt#13 = 0 [phi:main->inccnt#0] -- vbuxx=vbuc1 + // [8] phi cnt#13 = 0 [phi:main->inccnt#0] -- call_phi_near ldx #0 jsr inccnt jmp __b1 @@ -228,7 +228,7 @@ main: { // [4] call inccnt // [8] phi from main::@1 to inccnt [phi:main::@1->inccnt] inccnt_from___b1: - // [8] phi cnt#13 = cnt#1 [phi:main::@1->inccnt#0] -- register_copy + // [8] phi cnt#13 = cnt#1 [phi:main::@1->inccnt#0] -- call_phi_near jsr inccnt jmp __b2 // main::@2 @@ -305,7 +305,7 @@ main: { // inccnt() // [1] call inccnt // [8] phi from main to inccnt [phi:main->inccnt] - // [8] phi cnt#13 = 0 [phi:main->inccnt#0] -- vbuxx=vbuc1 + // [8] phi cnt#13 = 0 [phi:main->inccnt#0] -- call_phi_near ldx #0 jsr inccnt // main::@1 @@ -318,7 +318,7 @@ main: { // inccnt() // [4] call inccnt // [8] phi from main::@1 to inccnt [phi:main::@1->inccnt] - // [8] phi cnt#13 = cnt#1 [phi:main::@1->inccnt#0] -- register_copy + // [8] phi cnt#13 = cnt#1 [phi:main::@1->inccnt#0] -- call_phi_near jsr inccnt // main::@2 // SCREEN[1]=++cnt; diff --git a/src/test/ref/mul8u-min.log b/src/test/ref/mul8u-min.log index 200b2bb19..7fc828d4b 100644 --- a/src/test/ref/mul8u-min.log +++ b/src/test/ref/mul8u-min.log @@ -516,7 +516,7 @@ main: { ldx.z a // [4] mul8u::b#0 = main::b#2 -- vbuaa=vbuyy tya - // [5] call mul8u + // [5] call mul8u -- call_phi_near jsr mul8u // [6] mul8u::return#2 = mul8u::res#2 jmp __b4 @@ -757,7 +757,7 @@ main: { ldx.z a // [4] mul8u::b#0 = main::b#2 -- vbuaa=vbuyy tya - // [5] call mul8u + // [5] call mul8u -- call_phi_near jsr mul8u // [6] mul8u::return#2 = mul8u::res#2 // main::@4 diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log index ba50c3453..4028e59da 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log @@ -1759,7 +1759,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [8] call main + // [8] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -1782,7 +1782,7 @@ plex_irq: { jmp __b3 // plex_irq::@3 __b3: - // [13] call plexShowSprite + // [13] call plexShowSprite -- call_phi_near jsr plexShowSprite jmp plexFreeNextYpos1 // plex_irq::plexFreeNextYpos1 @@ -1851,7 +1851,7 @@ plex_irq: { main: { // asm { sei } sei - // [27] call init + // [27] call init -- call_phi_near jsr init // [28] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -1859,7 +1859,7 @@ main: { // main::@1 __b1: // [29] call loop - // [79] phi from main::@1 to loop [phi:main::@1->loop] + // [79] phi from main::@1 to loop [phi:main::@1->loop] -- call_phi_near loop_from___b1: jsr loop jmp __breturn @@ -1981,7 +1981,7 @@ init: { sta D011 // [57] call plexInit // Initialize the multiplexer - // [94] phi from init to plexInit [phi:init->plexInit] + // [94] phi from init to plexInit [phi:init->plexInit] -- call_phi_near plexInit_from_init: jsr plexInit // [58] phi from init to init::@1 [phi:init->init::@1] @@ -2147,7 +2147,7 @@ loop: { // [90] *BORDER_COLOR = ++ *BORDER_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 inc BORDER_COLOR // [91] call plexSort - // [101] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] + // [101] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] -- call_phi_near plexSort_from___b5: jsr plexSort jmp __b6 @@ -2756,7 +2756,7 @@ __start: { sta.z framedone // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [8] call main + // [8] call main -- call_phi_near jsr main // __start::@return // [9] return @@ -2777,7 +2777,7 @@ plex_irq: { // plex_irq::@3 __b3: // plexShowSprite() - // [13] call plexShowSprite + // [13] call plexShowSprite -- call_phi_near jsr plexShowSprite // plex_irq::plexFreeNextYpos1 // return PLEX_FREE_YPOS[plex_free_next]; @@ -2847,13 +2847,13 @@ main: { // asm { sei } sei // init() - // [27] call init + // [27] call init -- call_phi_near jsr init // [28] phi from main to main::@1 [phi:main->main::@1] // main::@1 // loop() // [29] call loop - // [79] phi from main::@1 to loop [phi:main::@1->loop] + // [79] phi from main::@1 to loop [phi:main::@1->loop] -- call_phi_near jsr loop // main::@return // } @@ -2989,7 +2989,7 @@ init: { // plexInit(SCREEN) // [57] call plexInit // Initialize the multiplexer - // [94] phi from init to plexInit [phi:init->plexInit] + // [94] phi from init to plexInit [phi:init->plexInit] -- call_phi_near jsr plexInit // [58] phi from init to init::@1 [phi:init->init::@1] // [58] phi init::xp#2 = $20 [phi:init->init::@1#0] -- vwuz1=vwuc1 @@ -3153,7 +3153,7 @@ loop: { inc BORDER_COLOR // plexSort() // [91] call plexSort - // [101] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] + // [101] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] -- call_phi_near jsr plexSort // loop::@6 // *BORDER_COLOR = GREEN diff --git a/src/test/ref/multiply-16bit-const.log b/src/test/ref/multiply-16bit-const.log index d043c37d7..a2bb26f85 100644 --- a/src/test/ref/multiply-16bit-const.log +++ b/src/test/ref/multiply-16bit-const.log @@ -1638,7 +1638,7 @@ main: { .label __10 = 2 .label __11 = 2 // [1] call print_cls - // [18] phi from main to print_cls [phi:main->print_cls] + // [18] phi from main to print_cls [phi:main->print_cls] -- call_phi_near print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1793,7 +1793,7 @@ main: { lda.z print_ulong_decimal.w+3 adc.z i+3 sta.z print_ulong_decimal.w+3 - // [13] call print_ulong_decimal + // [13] call print_ulong_decimal -- call_phi_near jsr print_ulong_decimal // [14] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -1801,7 +1801,7 @@ main: { // main::@3 __b3: // [15] call print_ln - // [26] phi from main::@3 to print_ln [phi:main::@3->print_ln] + // [26] phi from main::@3 to print_ln [phi:main::@3->print_ln] -- call_phi_near print_ln_from___b3: jsr print_ln jmp __b4 @@ -1837,7 +1837,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [19] call memset - // [32] phi from print_cls to memset [phi:print_cls->memset] + // [32] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -1853,7 +1853,7 @@ print_ulong_decimal: { .label w = 2 // [21] ultoa::value#0 = print_ulong_decimal::w#0 // [22] call ultoa - // [38] phi from print_ulong_decimal to ultoa [phi:print_ulong_decimal->ultoa] + // [38] phi from print_ulong_decimal to ultoa [phi:print_ulong_decimal->ultoa] -- call_phi_near ultoa_from_print_ulong_decimal: jsr ultoa // [23] phi from print_ulong_decimal to print_ulong_decimal::@1 [phi:print_ulong_decimal->print_ulong_decimal::@1] @@ -1861,7 +1861,7 @@ print_ulong_decimal: { jmp __b1 // print_ulong_decimal::@1 __b1: - // [24] call print_str + // [24] call print_str -- call_phi_near jsr print_str jmp __breturn // print_ulong_decimal::@return @@ -2076,7 +2076,7 @@ ultoa: { // [53] ultoa_append::value#0 = ultoa::value#2 // [54] ultoa_append::sub#0 = ultoa::digit_value#0 // [55] call ultoa_append - // [66] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] + // [66] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] -- call_phi_near ultoa_append_from___b5: jsr ultoa_append // [56] ultoa_append::return#0 = ultoa_append::value#2 @@ -2133,7 +2133,7 @@ print_str: { // [63] print_char::ch#0 = *print_str::str#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [64] call print_char + // [64] call print_char -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -2473,7 +2473,7 @@ main: { .label __11 = 2 // print_cls() // [1] call print_cls - // [18] phi from main to print_cls [phi:main->print_cls] + // [18] phi from main to print_cls [phi:main->print_cls] -- call_phi_near jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi print_char_cursor#13 = print_screen#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -2625,13 +2625,13 @@ main: { lda.z print_ulong_decimal.w+3 adc.z i+3 sta.z print_ulong_decimal.w+3 - // [13] call print_ulong_decimal + // [13] call print_ulong_decimal -- call_phi_near jsr print_ulong_decimal // [14] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // print_ln() // [15] call print_ln - // [26] phi from main::@3 to print_ln [phi:main::@3->print_ln] + // [26] phi from main::@3 to print_ln [phi:main::@3->print_ln] -- call_phi_near jsr print_ln // main::@4 // i+=333 @@ -2665,7 +2665,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [19] call memset - // [32] phi from print_cls to memset [phi:print_cls->memset] + // [32] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -2680,12 +2680,12 @@ print_ulong_decimal: { // ultoa(w, decimal_digits_long, DECIMAL) // [21] ultoa::value#0 = print_ulong_decimal::w#0 // [22] call ultoa - // [38] phi from print_ulong_decimal to ultoa [phi:print_ulong_decimal->ultoa] + // [38] phi from print_ulong_decimal to ultoa [phi:print_ulong_decimal->ultoa] -- call_phi_near jsr ultoa // [23] phi from print_ulong_decimal to print_ulong_decimal::@1 [phi:print_ulong_decimal->print_ulong_decimal::@1] // print_ulong_decimal::@1 // print_str(decimal_digits_long) - // [24] call print_str + // [24] call print_str -- call_phi_near jsr print_str // print_ulong_decimal::@return // } @@ -2893,7 +2893,7 @@ ultoa: { // [53] ultoa_append::value#0 = ultoa::value#2 // [54] ultoa_append::sub#0 = ultoa::digit_value#0 // [55] call ultoa_append - // [66] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] + // [66] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] -- call_phi_near jsr ultoa_append // ultoa_append(buffer++, value, digit_value) // [56] ultoa_append::return#0 = ultoa_append::value#2 @@ -2948,7 +2948,7 @@ print_str: { // [63] print_char::ch#0 = *print_str::str#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [64] call print_char + // [64] call print_char -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/nes-array.log b/src/test/ref/nes-array.log index 9730630ef..7aef83712 100644 --- a/src/test/ref/nes-array.log +++ b/src/test/ref/nes-array.log @@ -318,7 +318,7 @@ main: { sta.z foo.y lda #>y1 sta.z foo.y+1 - // [11] phi foo::x#2 = 1 [phi:main->foo#1] -- vbuxx=vbuc1 + // [11] phi foo::x#2 = 1 [phi:main->foo#1] -- call_phi_near ldx #1 jsr foo // [3] foo::return#2 = foo::return#0 @@ -339,7 +339,7 @@ main: { sta.z foo.y lda #>y2 sta.z foo.y+1 - // [11] phi foo::x#2 = 2 [phi:main::@1->foo#1] -- vbuxx=vbuc1 + // [11] phi foo::x#2 = 2 [phi:main::@1->foo#1] -- call_phi_near ldx #2 jsr foo // [7] foo::return#3 = foo::return#0 @@ -476,7 +476,7 @@ main: { sta.z foo.y lda #>y1 sta.z foo.y+1 - // [11] phi foo::x#2 = 1 [phi:main->foo#1] -- vbuxx=vbuc1 + // [11] phi foo::x#2 = 1 [phi:main->foo#1] -- call_phi_near ldx #1 jsr foo // foo(1, &y1) @@ -497,7 +497,7 @@ main: { sta.z foo.y lda #>y2 sta.z foo.y+1 - // [11] phi foo::x#2 = 2 [phi:main::@1->foo#1] -- vbuxx=vbuc1 + // [11] phi foo::x#2 = 2 [phi:main::@1->foo#1] -- call_phi_near ldx #2 jsr foo // foo(2, &y2) diff --git a/src/test/ref/nomodify-3.log b/src/test/ref/nomodify-3.log index 54e25b59f..c417d2987 100644 --- a/src/test/ref/nomodify-3.log +++ b/src/test/ref/nomodify-3.log @@ -133,7 +133,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -204,7 +204,7 @@ __start: { sta.z i // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/nomodify-4.log b/src/test/ref/nomodify-4.log index 7acfaf501..2967bc6f7 100644 --- a/src/test/ref/nomodify-4.log +++ b/src/test/ref/nomodify-4.log @@ -140,7 +140,7 @@ main: { // [1] call print // [5] phi from main to print [phi:main->print] print_from_main: - // [5] phi print::c#2 = 'a' [phi:main->print#0] -- vbuaa=vbuc1 + // [5] phi print::c#2 = 'a' [phi:main->print#0] -- call_phi_near lda #'a' jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -151,7 +151,7 @@ main: { // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] print_from___b1: - // [5] phi print::c#2 = 'b' [phi:main::@1->print#0] -- vbuaa=vbuc1 + // [5] phi print::c#2 = 'b' [phi:main::@1->print#0] -- call_phi_near lda #'b' jsr print jmp __breturn @@ -219,7 +219,7 @@ main: { // print('a') // [1] call print // [5] phi from main to print [phi:main->print] - // [5] phi print::c#2 = 'a' [phi:main->print#0] -- vbuaa=vbuc1 + // [5] phi print::c#2 = 'a' [phi:main->print#0] -- call_phi_near lda #'a' jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -227,7 +227,7 @@ main: { // print('b') // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] - // [5] phi print::c#2 = 'b' [phi:main::@1->print#0] -- vbuaa=vbuc1 + // [5] phi print::c#2 = 'b' [phi:main::@1->print#0] -- call_phi_near lda #'b' jsr print // main::@return diff --git a/src/test/ref/norom-charset.log b/src/test/ref/norom-charset.log index d4b232a12..9004c2050 100644 --- a/src/test/ref/norom-charset.log +++ b/src/test/ref/norom-charset.log @@ -606,7 +606,7 @@ main: { lda charset_spec_row+1,x sta.z gen_char3.spec+1 // [8] call gen_char3 - // [11] phi from main::@2 to gen_char3 [phi:main::@2->gen_char3] + // [11] phi from main::@2 to gen_char3 [phi:main::@2->gen_char3] -- call_phi_near gen_char3_from___b2: jsr gen_char3 jmp __b4 @@ -868,7 +868,7 @@ main: { lda charset_spec_row+1,x sta.z gen_char3.spec+1 // [8] call gen_char3 - // [11] phi from main::@2 to gen_char3 [phi:main::@2->gen_char3] + // [11] phi from main::@2 to gen_char3 [phi:main::@2->gen_char3] -- call_phi_near jsr gen_char3 // main::@4 // charset = charset+8 diff --git a/src/test/ref/null-constant-1.log b/src/test/ref/null-constant-1.log index 1c2cc9f25..5927f14f1 100644 --- a/src/test/ref/null-constant-1.log +++ b/src/test/ref/null-constant-1.log @@ -249,7 +249,7 @@ main: { // [1] call get // [10] phi from main to get [phi:main->get] get_from_main: - // [10] phi get::ptr#2 = main::SCREEN [phi:main->get#0] -- pbuz1=pbuc1 + // [10] phi get::ptr#2 = main::SCREEN [phi:main->get#0] -- call_phi_near lda #SCREEN @@ -265,7 +265,7 @@ main: { // [5] call get // [10] phi from main::@1 to get [phi:main::@1->get] get_from___b1: - // [10] phi get::ptr#2 = 0 [phi:main::@1->get#0] -- pbuz1=vbuc1 + // [10] phi get::ptr#2 = 0 [phi:main::@1->get#0] -- call_phi_near lda #<0 sta.z get.ptr lda #>0 @@ -379,7 +379,7 @@ main: { // get(SCREEN) // [1] call get // [10] phi from main to get [phi:main->get] - // [10] phi get::ptr#2 = main::SCREEN [phi:main->get#0] -- pbuz1=pbuc1 + // [10] phi get::ptr#2 = main::SCREEN [phi:main->get#0] -- call_phi_near lda #SCREEN @@ -395,7 +395,7 @@ main: { // get(NULL) // [5] call get // [10] phi from main::@1 to get [phi:main::@1->get] - // [10] phi get::ptr#2 = 0 [phi:main::@1->get#0] -- pbuz1=vbuc1 + // [10] phi get::ptr#2 = 0 [phi:main::@1->get#0] -- call_phi_near lda #<0 sta.z get.ptr sta.z get.ptr+1 diff --git a/src/test/ref/number-conversion.log b/src/test/ref/number-conversion.log index db482258b..7c834dd71 100644 --- a/src/test/ref/number-conversion.log +++ b/src/test/ref/number-conversion.log @@ -1393,7 +1393,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_SIGNED_CHAR [phi:main->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_SIGNED_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_SIGNED_CHAR [phi:main->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_SIGNED_CHAR [phi:main->assertType#2] -- call_phi_near ldy #TYPEID_SIGNED_CHAR jsr assertType // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1408,7 +1408,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_INT [phi:main::@1->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@1->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@1->assertType#2] -- call_phi_near ldy #TYPEID_INT jsr assertType // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -1423,7 +1423,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@2->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@2->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@2->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -1438,7 +1438,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_INT [phi:main::@3->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@3->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@3->assertType#2] -- call_phi_near ldy #TYPEID_INT jsr assertType // [8] phi from main::@3 to main::@4 [phi:main::@3->main::@4] @@ -1453,7 +1453,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_INT [phi:main::@4->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@4->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@4->assertType#2] -- call_phi_near ldy #TYPEID_INT jsr assertType // [10] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -1468,7 +1468,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@5->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@5->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@5->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType // [12] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -1483,7 +1483,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@6->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@6->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@6->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType // [14] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -1498,7 +1498,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@7->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@7->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@7->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType // [16] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -1513,7 +1513,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@8->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@8->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@8->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType // [18] phi from main::@8 to main::@9 [phi:main::@8->main::@9] @@ -1529,7 +1529,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@9->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@9->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@9->assertType#2] -- call_phi_near ldy #TYPEID_CHAR jsr assertType // [20] phi from main::@9 to main::@10 [phi:main::@9->main::@10] @@ -1544,7 +1544,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@10->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@10->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@10->assertType#2] -- call_phi_near ldy #TYPEID_CHAR jsr assertType // [22] phi from main::@10 to main::@11 [phi:main::@10->main::@11] @@ -1559,7 +1559,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@11->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@11->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@11->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [24] phi from main::@11 to main::@12 [phi:main::@11->main::@12] @@ -1574,7 +1574,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@12->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@12->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@12->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [26] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -1589,7 +1589,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@13->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@13->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@13->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [28] phi from main::@13 to main::@14 [phi:main::@13->main::@14] @@ -1604,7 +1604,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@14->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@14->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@14->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [30] phi from main::@14 to main::@15 [phi:main::@14->main::@15] @@ -1619,7 +1619,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@15->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@15->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@15->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [32] phi from main::@15 to main::@16 [phi:main::@15->main::@16] @@ -1634,7 +1634,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@16->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@16->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@16->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [34] phi from main::@16 to main::@17 [phi:main::@16->main::@17] @@ -1649,7 +1649,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@17->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@17->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@17->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [36] phi from main::@17 to main::@18 [phi:main::@17->main::@18] @@ -1664,7 +1664,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@18->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@18->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@18->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [38] phi from main::@18 to main::@19 [phi:main::@18->main::@19] @@ -1679,7 +1679,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@19->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@19->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@19->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [40] phi from main::@19 to main::@20 [phi:main::@19->main::@20] @@ -1694,7 +1694,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@20->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@20->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@20->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [42] phi from main::@20 to main::@21 [phi:main::@20->main::@21] @@ -1710,7 +1710,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@21->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@21->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@21->assertType#2] -- call_phi_near ldy #TYPEID_CHAR jsr assertType // [44] phi from main::@21 to main::@22 [phi:main::@21->main::@22] @@ -1725,7 +1725,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@22->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@22->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@22->assertType#2] -- call_phi_near ldy #TYPEID_CHAR jsr assertType // [46] phi from main::@22 to main::@23 [phi:main::@22->main::@23] @@ -1740,7 +1740,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@23->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@23->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@23->assertType#2] -- call_phi_near ldy #TYPEID_CHAR jsr assertType // [48] phi from main::@23 to main::@24 [phi:main::@23->main::@24] @@ -1755,7 +1755,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@24->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@24->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@24->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [50] phi from main::@24 to main::@25 [phi:main::@24->main::@25] @@ -1770,7 +1770,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@25->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@25->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@25->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [52] phi from main::@25 to main::@26 [phi:main::@25->main::@26] @@ -1785,7 +1785,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@26->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@26->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@26->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [54] phi from main::@26 to main::@27 [phi:main::@26->main::@27] @@ -1800,7 +1800,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@27->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@27->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@27->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [56] phi from main::@27 to main::@28 [phi:main::@27->main::@28] @@ -1815,7 +1815,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@28->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@28->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@28->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [58] phi from main::@28 to main::@29 [phi:main::@28->main::@29] @@ -1830,7 +1830,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@29->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@29->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@29->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_INT jsr assertType // [60] phi from main::@29 to main::@30 [phi:main::@29->main::@30] @@ -1845,7 +1845,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@30->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@30->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@30->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [62] phi from main::@30 to main::@31 [phi:main::@30->main::@31] @@ -1860,7 +1860,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@31->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@31->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@31->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [64] phi from main::@31 to main::@32 [phi:main::@31->main::@32] @@ -1875,7 +1875,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@32->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@32->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@32->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [66] phi from main::@32 to main::@33 [phi:main::@32->main::@33] @@ -1890,7 +1890,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@33->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@33->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@33->assertType#2] -- call_phi_near ldy #TYPEID_UNSIGNED_LONG jsr assertType // [68] phi from main::@33 to main::@34 [phi:main::@33->main::@34] @@ -1905,7 +1905,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@34->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@34->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@34->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType jmp __breturn @@ -2199,7 +2199,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_SIGNED_CHAR [phi:main->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_SIGNED_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_SIGNED_CHAR [phi:main->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_SIGNED_CHAR [phi:main->assertType#2] -- call_phi_near tay jsr assertType // [2] phi from main to main::@1 [phi:main->main::@1] @@ -2211,7 +2211,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_INT [phi:main::@1->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@1->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@1->assertType#2] -- call_phi_near tay jsr assertType // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -2223,7 +2223,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@2->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@2->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@2->assertType#2] -- call_phi_near tay jsr assertType // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -2235,7 +2235,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_INT [phi:main::@3->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@3->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@3->assertType#2] -- call_phi_near tay jsr assertType // [8] phi from main::@3 to main::@4 [phi:main::@3->main::@4] @@ -2247,7 +2247,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_INT [phi:main::@4->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@4->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@4->assertType#2] -- call_phi_near tay jsr assertType // [10] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -2259,7 +2259,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@5->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@5->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@5->assertType#2] -- call_phi_near tay jsr assertType // [12] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -2271,7 +2271,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@6->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@6->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@6->assertType#2] -- call_phi_near tay jsr assertType // [14] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -2283,7 +2283,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@7->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@7->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@7->assertType#2] -- call_phi_near tay jsr assertType // [16] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -2295,7 +2295,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@8->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@8->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@8->assertType#2] -- call_phi_near tay jsr assertType // [18] phi from main::@8 to main::@9 [phi:main::@8->main::@9] @@ -2308,7 +2308,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@9->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@9->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@9->assertType#2] -- call_phi_near tay jsr assertType // [20] phi from main::@9 to main::@10 [phi:main::@9->main::@10] @@ -2320,7 +2320,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@10->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@10->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@10->assertType#2] -- call_phi_near tay jsr assertType // [22] phi from main::@10 to main::@11 [phi:main::@10->main::@11] @@ -2332,7 +2332,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@11->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@11->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@11->assertType#2] -- call_phi_near tay jsr assertType // [24] phi from main::@11 to main::@12 [phi:main::@11->main::@12] @@ -2344,7 +2344,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@12->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@12->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@12->assertType#2] -- call_phi_near tay jsr assertType // [26] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -2356,7 +2356,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@13->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@13->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@13->assertType#2] -- call_phi_near tay jsr assertType // [28] phi from main::@13 to main::@14 [phi:main::@13->main::@14] @@ -2368,7 +2368,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@14->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@14->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@14->assertType#2] -- call_phi_near tay jsr assertType // [30] phi from main::@14 to main::@15 [phi:main::@14->main::@15] @@ -2380,7 +2380,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@15->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@15->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@15->assertType#2] -- call_phi_near tay jsr assertType // [32] phi from main::@15 to main::@16 [phi:main::@15->main::@16] @@ -2392,7 +2392,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@16->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@16->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@16->assertType#2] -- call_phi_near tay jsr assertType // [34] phi from main::@16 to main::@17 [phi:main::@16->main::@17] @@ -2404,7 +2404,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@17->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@17->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@17->assertType#2] -- call_phi_near tay jsr assertType // [36] phi from main::@17 to main::@18 [phi:main::@17->main::@18] @@ -2416,7 +2416,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@18->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@18->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@18->assertType#2] -- call_phi_near tay jsr assertType // [38] phi from main::@18 to main::@19 [phi:main::@18->main::@19] @@ -2428,7 +2428,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@19->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@19->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@19->assertType#2] -- call_phi_near tay jsr assertType // [40] phi from main::@19 to main::@20 [phi:main::@19->main::@20] @@ -2440,7 +2440,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@20->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@20->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@20->assertType#2] -- call_phi_near tay jsr assertType // [42] phi from main::@20 to main::@21 [phi:main::@20->main::@21] @@ -2453,7 +2453,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@21->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@21->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@21->assertType#2] -- call_phi_near tay jsr assertType // [44] phi from main::@21 to main::@22 [phi:main::@21->main::@22] @@ -2465,7 +2465,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@22->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@22->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@22->assertType#2] -- call_phi_near tay jsr assertType // [46] phi from main::@22 to main::@23 [phi:main::@22->main::@23] @@ -2477,7 +2477,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@23->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@23->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@23->assertType#2] -- call_phi_near tay jsr assertType // [48] phi from main::@23 to main::@24 [phi:main::@23->main::@24] @@ -2489,7 +2489,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@24->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@24->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@24->assertType#2] -- call_phi_near tay jsr assertType // [50] phi from main::@24 to main::@25 [phi:main::@24->main::@25] @@ -2501,7 +2501,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@25->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@25->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@25->assertType#2] -- call_phi_near tay jsr assertType // [52] phi from main::@25 to main::@26 [phi:main::@25->main::@26] @@ -2513,7 +2513,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@26->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@26->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@26->assertType#2] -- call_phi_near tay jsr assertType // [54] phi from main::@26 to main::@27 [phi:main::@26->main::@27] @@ -2525,7 +2525,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@27->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@27->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@27->assertType#2] -- call_phi_near tay jsr assertType // [56] phi from main::@27 to main::@28 [phi:main::@27->main::@28] @@ -2537,7 +2537,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@28->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@28->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@28->assertType#2] -- call_phi_near tay jsr assertType // [58] phi from main::@28 to main::@29 [phi:main::@28->main::@29] @@ -2549,7 +2549,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@29->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@29->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@29->assertType#2] -- call_phi_near tay jsr assertType // [60] phi from main::@29 to main::@30 [phi:main::@29->main::@30] @@ -2561,7 +2561,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@30->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@30->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@30->assertType#2] -- call_phi_near tay jsr assertType // [62] phi from main::@30 to main::@31 [phi:main::@30->main::@31] @@ -2573,7 +2573,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@31->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@31->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@31->assertType#2] -- call_phi_near tay jsr assertType // [64] phi from main::@31 to main::@32 [phi:main::@31->main::@32] @@ -2585,7 +2585,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@32->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@32->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@32->assertType#2] -- call_phi_near tay jsr assertType // [66] phi from main::@32 to main::@33 [phi:main::@32->main::@33] @@ -2597,7 +2597,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@33->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@33->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@33->assertType#2] -- call_phi_near tay jsr assertType // [68] phi from main::@33 to main::@34 [phi:main::@33->main::@34] @@ -2609,7 +2609,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@34->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@34->assertType#2] -- vbuyy=vbuc1 + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@34->assertType#2] -- call_phi_near ldy #TYPEID_LONG jsr assertType // main::@return diff --git a/src/test/ref/number-ternary-fail-2.log b/src/test/ref/number-ternary-fail-2.log index 99ddb8acf..da320d2ee 100644 --- a/src/test/ref/number-ternary-fail-2.log +++ b/src/test/ref/number-ternary-fail-2.log @@ -560,7 +560,7 @@ main: { .label height = 6*2+3 .label maze = malloc.return // [1] call malloc - // [6] phi from main to malloc [phi:main->malloc] + // [6] phi from main to malloc [phi:main->malloc] -- call_phi_near malloc_from_main: jsr malloc // [2] phi from main to main::@1 [phi:main->main::@1] @@ -569,7 +569,7 @@ main: { // main::@1 __b1: // [3] call SolveMaze - // [8] phi from main::@1 to SolveMaze [phi:main::@1->SolveMaze] + // [8] phi from main::@1 to SolveMaze [phi:main::@1->SolveMaze] -- call_phi_near SolveMaze_from___b1: jsr SolveMaze jmp __b2 @@ -742,13 +742,13 @@ main: { .label maze = malloc.return // malloc(width * height) // [1] call malloc - // [6] phi from main to malloc [phi:main->malloc] + // [6] phi from main to malloc [phi:main->malloc] -- call_phi_near jsr malloc // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // SolveMaze(maze, width, height) // [3] call SolveMaze - // [8] phi from main::@1 to SolveMaze [phi:main::@1->SolveMaze] + // [8] phi from main::@1 to SolveMaze [phi:main::@1->SolveMaze] -- call_phi_near jsr SolveMaze // main::@2 // asm diff --git a/src/test/ref/number-type.log b/src/test/ref/number-type.log index 88a159a46..78c5c6e98 100644 --- a/src/test/ref/number-type.log +++ b/src/test/ref/number-type.log @@ -609,14 +609,14 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call testBytes + // [1] call testBytes -- call_phi_near jsr testBytes // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: jmp __b1 // main::@1 __b1: - // [3] call testSBytes + // [3] call testSBytes -- call_phi_near jsr testSBytes jmp __breturn // main::@return @@ -765,12 +765,12 @@ Score: 180 // main main: { // testBytes() - // [1] call testBytes + // [1] call testBytes -- call_phi_near jsr testBytes // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // testSBytes() - // [3] call testSBytes + // [3] call testSBytes -- call_phi_near jsr testSBytes // main::@return // } diff --git a/src/test/ref/overlap-allocation-2.log b/src/test/ref/overlap-allocation-2.log index 3eeee67ea..349d1069a 100644 --- a/src/test/ref/overlap-allocation-2.log +++ b/src/test/ref/overlap-allocation-2.log @@ -318,7 +318,7 @@ main: { // [3] call line // [12] phi from main::@1 to line [phi:main::@1->line] line_from___b1: - // [12] phi line::l#2 = line::l#0 [phi:main::@1->line#0] -- register_copy + // [12] phi line::l#2 = line::l#0 [phi:main::@1->line#0] -- call_phi_near jsr line jmp __b3 // main::@3 @@ -345,7 +345,7 @@ main: { // [8] call line // [12] phi from main::@2 to line [phi:main::@2->line] line_from___b2: - // [12] phi line::l#2 = line::l#1 [phi:main::@2->line#0] -- register_copy + // [12] phi line::l#2 = line::l#1 [phi:main::@2->line#0] -- call_phi_near jsr line jmp __b4 // main::@4 @@ -368,7 +368,7 @@ line: { // [14] call plot // [18] phi from line to plot [phi:line->plot] plot_from_line: - // [18] phi plot::x#2 = plot::x#0 [phi:line->plot#0] -- register_copy + // [18] phi plot::x#2 = plot::x#0 [phi:line->plot#0] -- call_phi_near jsr plot jmp __b1 // line::@1 @@ -379,7 +379,7 @@ line: { // [16] call plot // [18] phi from line::@1 to plot [phi:line::@1->plot] plot_from___b1: - // [18] phi plot::x#2 = plot::x#1 [phi:line::@1->plot#0] -- register_copy + // [18] phi plot::x#2 = plot::x#1 [phi:line::@1->plot#0] -- call_phi_near jsr plot jmp __breturn // line::@return @@ -491,7 +491,7 @@ main: { tax // [3] call line // [12] phi from main::@1 to line [phi:main::@1->line] - // [12] phi line::l#2 = line::l#0 [phi:main::@1->line#0] -- register_copy + // [12] phi line::l#2 = line::l#0 [phi:main::@1->line#0] -- call_phi_near jsr line // main::@3 // for(byte i : 0..8) @@ -513,7 +513,7 @@ main: { tax // [8] call line // [12] phi from main::@2 to line [phi:main::@2->line] - // [12] phi line::l#2 = line::l#1 [phi:main::@2->line#0] -- register_copy + // [12] phi line::l#2 = line::l#1 [phi:main::@2->line#0] -- call_phi_near jsr line // main::@4 // for(byte j : 10..18) @@ -534,7 +534,7 @@ line: { // [13] plot::x#0 = line::l#2 // [14] call plot // [18] phi from line to plot [phi:line->plot] - // [18] phi plot::x#2 = plot::x#0 [phi:line->plot#0] -- register_copy + // [18] phi plot::x#2 = plot::x#0 [phi:line->plot#0] -- call_phi_near jsr plot // line::@1 // plot(l+20) @@ -543,7 +543,7 @@ line: { axs #-[$14] // [16] call plot // [18] phi from line::@1 to plot [phi:line::@1->plot] - // [18] phi plot::x#2 = plot::x#1 [phi:line::@1->plot#0] -- register_copy + // [18] phi plot::x#2 = plot::x#1 [phi:line::@1->plot#0] -- call_phi_near jsr plot // line::@return // } diff --git a/src/test/ref/overlap-allocation.log b/src/test/ref/overlap-allocation.log index 52b2b1b17..7fa4b33d3 100644 --- a/src/test/ref/overlap-allocation.log +++ b/src/test/ref/overlap-allocation.log @@ -308,7 +308,7 @@ main: { // [3] call plot // [17] phi from main::@1 to plot [phi:main::@1->plot] plot_from___b1: - // [17] phi plot::x#3 = plot::x#0 [phi:main::@1->plot#0] -- register_copy + // [17] phi plot::x#3 = plot::x#0 [phi:main::@1->plot#0] -- call_phi_near jsr plot jmp __b4 // main::@4 @@ -333,7 +333,7 @@ main: { // [8] call plot // [17] phi from main::@2 to plot [phi:main::@2->plot] plot_from___b2: - // [17] phi plot::x#3 = plot::x#1 [phi:main::@2->plot#0] -- register_copy + // [17] phi plot::x#3 = plot::x#1 [phi:main::@2->plot#0] -- call_phi_near jsr plot jmp __b5 // main::@5 @@ -358,7 +358,7 @@ main: { // [13] call plot // [17] phi from main::@3 to plot [phi:main::@3->plot] plot_from___b3: - // [17] phi plot::x#3 = plot::x#2 [phi:main::@3->plot#0] -- register_copy + // [17] phi plot::x#3 = plot::x#2 [phi:main::@3->plot#0] -- call_phi_near jsr plot jmp __b6 // main::@6 @@ -478,7 +478,7 @@ main: { // [2] plot::x#0 = main::i#2 // [3] call plot // [17] phi from main::@1 to plot [phi:main::@1->plot] - // [17] phi plot::x#3 = plot::x#0 [phi:main::@1->plot#0] -- register_copy + // [17] phi plot::x#3 = plot::x#0 [phi:main::@1->plot#0] -- call_phi_near jsr plot // main::@4 // for(byte i : 0..10) @@ -498,7 +498,7 @@ main: { // [7] plot::x#1 = main::j#2 // [8] call plot // [17] phi from main::@2 to plot [phi:main::@2->plot] - // [17] phi plot::x#3 = plot::x#1 [phi:main::@2->plot#0] -- register_copy + // [17] phi plot::x#3 = plot::x#1 [phi:main::@2->plot#0] -- call_phi_near jsr plot // main::@5 // for(byte j : 0..10) @@ -518,7 +518,7 @@ main: { // [12] plot::x#2 = main::k#2 // [13] call plot // [17] phi from main::@3 to plot [phi:main::@3->plot] - // [17] phi plot::x#3 = plot::x#2 [phi:main::@3->plot#0] -- register_copy + // [17] phi plot::x#3 = plot::x#2 [phi:main::@3->plot#0] -- call_phi_near jsr plot // main::@6 // for(byte k : 0..10) diff --git a/src/test/ref/plus-0.log b/src/test/ref/plus-0.log index 3b95a5fc5..896fa94b1 100644 --- a/src/test/ref/plus-0.log +++ b/src/test/ref/plus-0.log @@ -369,7 +369,7 @@ main: { fill_from_main: // [5] phi fill::ch#4 = 'a' [phi:main->fill#0] -- vbuxx=vbuc1 ldx #'a' - // [5] phi fill::screen#4 = (char *) 1024 [phi:main->fill#1] -- pbuz1=pbuc1 + // [5] phi fill::screen#4 = (char *) 1024 [phi:main->fill#1] -- call_phi_near lda #<$400 sta.z fill.screen lda #>$400 @@ -385,7 +385,7 @@ main: { fill_from___b1: // [5] phi fill::ch#4 = 'b' [phi:main::@1->fill#0] -- vbuxx=vbuc1 ldx #'b' - // [5] phi fill::screen#4 = (char *) 8192 [phi:main::@1->fill#1] -- pbuz1=pbuc1 + // [5] phi fill::screen#4 = (char *) 8192 [phi:main::@1->fill#1] -- call_phi_near lda #<$2000 sta.z fill.screen lda #>$2000 @@ -537,7 +537,7 @@ main: { // [5] phi from main to fill [phi:main->fill] // [5] phi fill::ch#4 = 'a' [phi:main->fill#0] -- vbuxx=vbuc1 ldx #'a' - // [5] phi fill::screen#4 = (char *) 1024 [phi:main->fill#1] -- pbuz1=pbuc1 + // [5] phi fill::screen#4 = (char *) 1024 [phi:main->fill#1] -- call_phi_near lda #<$400 sta.z fill.screen lda #>$400 @@ -550,7 +550,7 @@ main: { // [5] phi from main::@1 to fill [phi:main::@1->fill] // [5] phi fill::ch#4 = 'b' [phi:main::@1->fill#0] -- vbuxx=vbuc1 ldx #'b' - // [5] phi fill::screen#4 = (char *) 8192 [phi:main::@1->fill#1] -- pbuz1=pbuc1 + // [5] phi fill::screen#4 = (char *) 8192 [phi:main::@1->fill#1] -- call_phi_near lda #<$2000 sta.z fill.screen lda #>$2000 diff --git a/src/test/ref/plus4-kbhit.log b/src/test/ref/plus4-kbhit.log index 88c782d0d..8fdc1fc16 100644 --- a/src/test/ref/plus4-kbhit.log +++ b/src/test/ref/plus4-kbhit.log @@ -226,7 +226,7 @@ main: { jmp __b1 // main::@1 __b1: - // [2] call kbhit + // [2] call kbhit -- call_phi_near jsr kbhit // [3] kbhit::return#0 = kbhit::return#1 jmp __b2 @@ -338,7 +338,7 @@ main: { // main::@1 __b1: // kbhit() - // [2] call kbhit + // [2] call kbhit -- call_phi_near jsr kbhit // [3] kbhit::return#0 = kbhit::return#1 // main::@2 diff --git a/src/test/ref/plus4-keyboard-test.log b/src/test/ref/plus4-keyboard-test.log index 3e88ecc22..0fa8a6a96 100644 --- a/src/test/ref/plus4-keyboard-test.log +++ b/src/test/ref/plus4-keyboard-test.log @@ -573,7 +573,7 @@ main: { // asm { sei } sei // [1] call memset - // [18] phi from main to memset [phi:main->memset] + // [18] phi from main to memset [phi:main->memset] -- call_phi_near memset_from_main: jsr memset // [2] phi from main main::@1 to main::@1 [phi:main/main::@1->main::@1] @@ -830,7 +830,7 @@ main: { sei // memset(DEFAULT_SCREEN, ' ', 0x0400) // [1] call memset - // [18] phi from main to memset [phi:main->memset] + // [18] phi from main to memset [phi:main->memset] -- call_phi_near jsr memset // [2] phi from main main::@1 to main::@1 [phi:main/main::@1->main::@1] __b5: diff --git a/src/test/ref/pointer-plus-0.log b/src/test/ref/pointer-plus-0.log index 359e48e62..8240d1a2b 100644 --- a/src/test/ref/pointer-plus-0.log +++ b/src/test/ref/pointer-plus-0.log @@ -241,7 +241,7 @@ main: { // [1] call first // [10] phi from main to first [phi:main->first] first_from_main: - // [10] phi first::return#2 = msg1 [phi:main->first#0] -- pbuz1=pbuc1 + // [10] phi first::return#2 = msg1 [phi:main->first#0] -- call_phi_near lda #msg1 @@ -259,7 +259,7 @@ main: { // [5] call first // [10] phi from main::@1 to first [phi:main::@1->first] first_from___b1: - // [10] phi first::return#2 = msg2 [phi:main::@1->first#0] -- pbuz1=pbuc1 + // [10] phi first::return#2 = msg2 [phi:main::@1->first#0] -- call_phi_near lda #msg2 @@ -352,7 +352,7 @@ main: { // first(msg1) // [1] call first // [10] phi from main to first [phi:main->first] - // [10] phi first::return#2 = msg1 [phi:main->first#0] -- pbuz1=pbuc1 + // [10] phi first::return#2 = msg1 [phi:main->first#0] -- call_phi_near lda #msg1 @@ -370,7 +370,7 @@ main: { // first(msg2) // [5] call first // [10] phi from main::@1 to first [phi:main::@1->first] - // [10] phi first::return#2 = msg2 [phi:main::@1->first#0] -- pbuz1=pbuc1 + // [10] phi first::return#2 = msg2 [phi:main::@1->first#0] -- call_phi_near lda #msg2 diff --git a/src/test/ref/pointer-pointer-2.log b/src/test/ref/pointer-pointer-2.log index ddb2effb8..618e61fe6 100644 --- a/src/test/ref/pointer-pointer-2.log +++ b/src/test/ref/pointer-pointer-2.log @@ -394,7 +394,7 @@ main: { jmp __b1 // main::@1 __b1: - // [2] call nexttext + // [2] call nexttext -- call_phi_near jsr nexttext // [3] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2] __b2_from___b1: @@ -584,7 +584,7 @@ main: { // main::@1 __b1: // nexttext(&text) - // [2] call nexttext + // [2] call nexttext -- call_phi_near jsr nexttext // [3] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2] // [3] phi main::screen#2 = main::screen#4 [phi:main::@1/main::@3->main::@2#0] -- register_copy diff --git a/src/test/ref/pointer-pointer-3.log b/src/test/ref/pointer-pointer-3.log index 45197a30d..78e4ba2e4 100644 --- a/src/test/ref/pointer-pointer-3.log +++ b/src/test/ref/pointer-pointer-3.log @@ -224,7 +224,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -238,7 +238,7 @@ main: { // [6] call setscreen // [11] phi from main to setscreen [phi:main->setscreen] setscreen_from_main: - // [11] phi setscreen::val#2 = screen1 [phi:main->setscreen#0] -- pbuz1=pbuc1 + // [11] phi setscreen::val#2 = screen1 [phi:main->setscreen#0] -- call_phi_near lda #screen1 @@ -254,7 +254,7 @@ main: { // [8] call setscreen // [11] phi from main::@1 to setscreen [phi:main::@1->setscreen] setscreen_from___b1: - // [11] phi setscreen::val#2 = screen2 [phi:main::@1->setscreen#0] -- pbuz1=pbuc1 + // [11] phi setscreen::val#2 = screen2 [phi:main::@1->setscreen#0] -- call_phi_near lda #screen2 @@ -359,7 +359,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return @@ -370,7 +370,7 @@ main: { // setscreen(&screen, screen1) // [6] call setscreen // [11] phi from main to setscreen [phi:main->setscreen] - // [11] phi setscreen::val#2 = screen1 [phi:main->setscreen#0] -- pbuz1=pbuc1 + // [11] phi setscreen::val#2 = screen1 [phi:main->setscreen#0] -- call_phi_near lda #screen1 @@ -385,7 +385,7 @@ main: { // setscreen(&screen, screen2) // [8] call setscreen // [11] phi from main::@1 to setscreen [phi:main::@1->setscreen] - // [11] phi setscreen::val#2 = screen2 [phi:main::@1->setscreen#0] -- pbuz1=pbuc1 + // [11] phi setscreen::val#2 = screen2 [phi:main::@1->setscreen#0] -- call_phi_near lda #screen2 diff --git a/src/test/ref/pointer-swap.log b/src/test/ref/pointer-swap.log index 3044bc33c..25a014563 100644 --- a/src/test/ref/pointer-swap.log +++ b/src/test/ref/pointer-swap.log @@ -611,7 +611,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [11] phi tempbuffer#9 = (char *) 0 [phi:main->print#3] -- pbuz1=pbuc1 + // [11] phi tempbuffer#9 = (char *) 0 [phi:main->print#3] -- call_phi_near lda #<0 sta.z tempbuffer_1 lda #>0 @@ -630,7 +630,7 @@ main: { sta.z newbuffer lda #>buffer2 sta.z newbuffer+1 - // [23] phi tempbuffer#0 = buffer1 [phi:main::@1->swap#1] -- pbuz1=pbuc1 + // [23] phi tempbuffer#0 = buffer1 [phi:main::@1->swap#1] -- call_phi_near lda #buffer1 @@ -653,7 +653,7 @@ main: { // [23] phi from main::@2 to swap [phi:main::@2->swap] swap_from___b2: // [23] phi newbuffer#0 = newbuffer#23 [phi:main::@2->swap#0] -- register_copy - // [23] phi tempbuffer#0 = tempbuffer#22 [phi:main::@2->swap#1] -- register_copy + // [23] phi tempbuffer#0 = tempbuffer#22 [phi:main::@2->swap#1] -- call_phi_near jsr swap jmp __b3 // main::@3 @@ -672,7 +672,7 @@ main: { // [23] phi from main::@3 to swap [phi:main::@3->swap] swap_from___b3: // [23] phi newbuffer#0 = newbuffer#24 [phi:main::@3->swap#0] -- register_copy - // [23] phi tempbuffer#0 = tempbuffer#23 [phi:main::@3->swap#1] -- register_copy + // [23] phi tempbuffer#0 = tempbuffer#23 [phi:main::@3->swap#1] -- call_phi_near jsr swap jmp __breturn // main::@return @@ -746,7 +746,7 @@ swap: { // [11] phi oldbuffer#9 = oldbuffer#22 [phi:swap->print#0] -- register_copy // [11] phi newbuffer#9 = newbuffer#22 [phi:swap->print#1] -- register_copy // [11] phi screen#12 = screen#0 [phi:swap->print#2] -- register_copy - // [11] phi tempbuffer#9 = tempbuffer#21 [phi:swap->print#3] -- register_copy + // [11] phi tempbuffer#9 = tempbuffer#21 [phi:swap->print#3] -- call_phi_near jsr print jmp __breturn // swap::@return @@ -872,7 +872,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [11] phi tempbuffer#9 = (char *) 0 [phi:main->print#3] -- pbuz1=pbuc1 + // [11] phi tempbuffer#9 = (char *) 0 [phi:main->print#3] -- call_phi_near lda #<0 sta.z tempbuffer_1 sta.z tempbuffer_1+1 @@ -887,7 +887,7 @@ main: { sta.z newbuffer lda #>buffer2 sta.z newbuffer+1 - // [23] phi tempbuffer#0 = buffer1 [phi:main::@1->swap#1] -- pbuz1=pbuc1 + // [23] phi tempbuffer#0 = buffer1 [phi:main::@1->swap#1] -- call_phi_near lda #buffer1 @@ -908,7 +908,7 @@ main: { // [6] call swap // [23] phi from main::@2 to swap [phi:main::@2->swap] // [23] phi newbuffer#0 = newbuffer#23 [phi:main::@2->swap#0] -- register_copy - // [23] phi tempbuffer#0 = tempbuffer#22 [phi:main::@2->swap#1] -- register_copy + // [23] phi tempbuffer#0 = tempbuffer#22 [phi:main::@2->swap#1] -- call_phi_near jsr swap // main::@3 // [7] tempbuffer#23 = newbuffer#0 -- pbuz1=pbuz2 @@ -925,7 +925,7 @@ main: { // [9] call swap // [23] phi from main::@3 to swap [phi:main::@3->swap] // [23] phi newbuffer#0 = newbuffer#24 [phi:main::@3->swap#0] -- register_copy - // [23] phi tempbuffer#0 = tempbuffer#23 [phi:main::@3->swap#1] -- register_copy + // [23] phi tempbuffer#0 = tempbuffer#23 [phi:main::@3->swap#1] -- call_phi_near jsr swap // main::@return // } @@ -1004,7 +1004,7 @@ swap: { // [11] phi oldbuffer#9 = oldbuffer#22 [phi:swap->print#0] -- register_copy // [11] phi newbuffer#9 = newbuffer#22 [phi:swap->print#1] -- register_copy // [11] phi screen#12 = screen#0 [phi:swap->print#2] -- register_copy - // [11] phi tempbuffer#9 = tempbuffer#21 [phi:swap->print#3] -- register_copy + // [11] phi tempbuffer#9 = tempbuffer#21 [phi:swap->print#3] -- call_phi_near jsr print // swap::@return // } diff --git a/src/test/ref/pointer-void-1.log b/src/test/ref/pointer-void-1.log index d8e90126b..1910db674 100644 --- a/src/test/ref/pointer-void-1.log +++ b/src/test/ref/pointer-void-1.log @@ -290,7 +290,7 @@ main: { print_from_main: // [9] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [9] phi print::ptr#3 = main::vb [phi:main->print#1] -- pvoz1=pvoc1 + // [9] phi print::ptr#3 = main::vb [phi:main->print#1] -- call_phi_near lda #vb @@ -305,7 +305,7 @@ main: { // [9] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [9] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy - // [9] phi print::ptr#3 = main::vw [phi:main::@1->print#1] -- pvoz1=pvoc1 + // [9] phi print::ptr#3 = main::vw [phi:main::@1->print#1] -- call_phi_near lda #vw @@ -320,7 +320,7 @@ main: { // [9] phi from main::@2 to print [phi:main::@2->print] print_from___b2: // [9] phi idx#13 = idx#14 [phi:main::@2->print#0] -- register_copy - // [9] phi print::ptr#3 = main::vd [phi:main::@2->print#1] -- pvoz1=pvoc1 + // [9] phi print::ptr#3 = main::vd [phi:main::@2->print#1] -- call_phi_near lda #vd @@ -441,7 +441,7 @@ main: { // [9] phi from main to print [phi:main->print] // [9] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [9] phi print::ptr#3 = main::vb [phi:main->print#1] -- pvoz1=pvoc1 + // [9] phi print::ptr#3 = main::vb [phi:main->print#1] -- call_phi_near lda #vb @@ -453,7 +453,7 @@ main: { // [5] call print // [9] phi from main::@1 to print [phi:main::@1->print] // [9] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy - // [9] phi print::ptr#3 = main::vw [phi:main::@1->print#1] -- pvoz1=pvoc1 + // [9] phi print::ptr#3 = main::vw [phi:main::@1->print#1] -- call_phi_near lda #vw @@ -465,7 +465,7 @@ main: { // [7] call print // [9] phi from main::@2 to print [phi:main::@2->print] // [9] phi idx#13 = idx#14 [phi:main::@2->print#0] -- register_copy - // [9] phi print::ptr#3 = main::vd [phi:main::@2->print#1] -- pvoz1=pvoc1 + // [9] phi print::ptr#3 = main::vd [phi:main::@2->print#1] -- call_phi_near lda #vd diff --git a/src/test/ref/pointer-void-2.log b/src/test/ref/pointer-void-2.log index 1ddbf6b8f..36f96bc13 100644 --- a/src/test/ref/pointer-void-2.log +++ b/src/test/ref/pointer-void-2.log @@ -284,7 +284,7 @@ main: { print_from_main: // [9] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [9] phi print::ptr#3 = (void *)&main::b [phi:main->print#1] -- pvoz1=pvoc1 + // [9] phi print::ptr#3 = (void *)&main::b [phi:main->print#1] -- call_phi_near lda #b @@ -299,7 +299,7 @@ main: { // [9] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [9] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy - // [9] phi print::ptr#3 = (void *)&main::w [phi:main::@1->print#1] -- pvoz1=pvoc1 + // [9] phi print::ptr#3 = (void *)&main::w [phi:main::@1->print#1] -- call_phi_near lda #w @@ -314,7 +314,7 @@ main: { // [9] phi from main::@2 to print [phi:main::@2->print] print_from___b2: // [9] phi idx#13 = idx#14 [phi:main::@2->print#0] -- register_copy - // [9] phi print::ptr#3 = (void *)&main::d [phi:main::@2->print#1] -- pvoz1=pvoc1 + // [9] phi print::ptr#3 = (void *)&main::d [phi:main::@2->print#1] -- call_phi_near lda #d @@ -429,7 +429,7 @@ main: { // [9] phi from main to print [phi:main->print] // [9] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [9] phi print::ptr#3 = (void *)&main::b [phi:main->print#1] -- pvoz1=pvoc1 + // [9] phi print::ptr#3 = (void *)&main::b [phi:main->print#1] -- call_phi_near lda #b @@ -441,7 +441,7 @@ main: { // [5] call print // [9] phi from main::@1 to print [phi:main::@1->print] // [9] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy - // [9] phi print::ptr#3 = (void *)&main::w [phi:main::@1->print#1] -- pvoz1=pvoc1 + // [9] phi print::ptr#3 = (void *)&main::w [phi:main::@1->print#1] -- call_phi_near lda #w @@ -453,7 +453,7 @@ main: { // [7] call print // [9] phi from main::@2 to print [phi:main::@2->print] // [9] phi idx#13 = idx#14 [phi:main::@2->print#0] -- register_copy - // [9] phi print::ptr#3 = (void *)&main::d [phi:main::@2->print#1] -- pvoz1=pvoc1 + // [9] phi print::ptr#3 = (void *)&main::d [phi:main::@2->print#1] -- call_phi_near lda #d diff --git a/src/test/ref/pointer-void-3.log b/src/test/ref/pointer-void-3.log index e6393cae6..8c1aced57 100644 --- a/src/test/ref/pointer-void-3.log +++ b/src/test/ref/pointer-void-3.log @@ -284,7 +284,7 @@ main: { // [1] call malloc // [12] phi from main to malloc [phi:main->malloc] malloc_from_main: - // [12] phi heap_head#11 = (char *) 49152 [phi:main->malloc#0] -- pbuz1=pbuc1 + // [12] phi heap_head#11 = (char *) 49152 [phi:main->malloc#0] -- call_phi_near lda #<$c000 sta.z heap_head lda #>$c000 @@ -302,7 +302,7 @@ main: { // [4] call malloc // [12] phi from main::@1 to malloc [phi:main::@1->malloc] malloc_from___b1: - // [12] phi heap_head#11 = heap_head#12 [phi:main::@1->malloc#0] -- register_copy + // [12] phi heap_head#11 = heap_head#12 [phi:main::@1->malloc#0] -- call_phi_near jsr malloc // [5] malloc::return#1 = malloc::return#2 jmp __b2 @@ -418,7 +418,7 @@ main: { // byte* buf1 = malloc() // [1] call malloc // [12] phi from main to malloc [phi:main->malloc] - // [12] phi heap_head#11 = (char *) 49152 [phi:main->malloc#0] -- pbuz1=pbuc1 + // [12] phi heap_head#11 = (char *) 49152 [phi:main->malloc#0] -- call_phi_near lda #<$c000 sta.z heap_head lda #>$c000 @@ -435,7 +435,7 @@ main: { // byte* buf2 = malloc() // [4] call malloc // [12] phi from main::@1 to malloc [phi:main::@1->malloc] - // [12] phi heap_head#11 = heap_head#12 [phi:main::@1->malloc#0] -- register_copy + // [12] phi heap_head#11 = heap_head#12 [phi:main::@1->malloc#0] -- call_phi_near jsr malloc // byte* buf2 = malloc() // [5] malloc::return#1 = malloc::return#2 diff --git a/src/test/ref/post-increment-problem-2.log b/src/test/ref/post-increment-problem-2.log index 0b912585f..fb71a2f3d 100644 --- a/src/test/ref/post-increment-problem-2.log +++ b/src/test/ref/post-increment-problem-2.log @@ -245,7 +245,7 @@ main: { jmp __b2 // main::@2 __b2: - // [5] call incscreen + // [5] call incscreen -- call_phi_near jsr incscreen jmp __b3 // main::@3 @@ -342,7 +342,7 @@ main: { // main::@2 __b2: // incscreen(offset) - // [5] call incscreen + // [5] call incscreen -- call_phi_near jsr incscreen // main::@3 // for (char x=0;x<254;x++) diff --git a/src/test/ref/pragma-noparenthesis.log b/src/test/ref/pragma-noparenthesis.log index c12b0e992..7632e3d44 100644 --- a/src/test/ref/pragma-noparenthesis.log +++ b/src/test/ref/pragma-noparenthesis.log @@ -150,14 +150,14 @@ __start: { jmp __init1 // __start::__init1 __init1: - // [2] call init + // [2] call init -- call_phi_near jsr init // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [4] call main + // [4] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -235,11 +235,11 @@ Score: 42 __start: { // [1] phi from __start to __start::__init1 [phi:__start->__start::__init1] // __start::__init1 - // [2] call init + // [2] call init -- call_phi_near jsr init // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [4] call main + // [4] call main -- call_phi_near jsr main // __start::@return // [5] return diff --git a/src/test/ref/primes-1000-2.log b/src/test/ref/primes-1000-2.log index 178959548..c6f05a9b7 100644 --- a/src/test/ref/primes-1000-2.log +++ b/src/test/ref/primes-1000-2.log @@ -2572,7 +2572,7 @@ main: { // [5] mul8u::a#1 = main::p#0 -- vbuxx=vbuaa tax // [6] mul8u::b#0 = main::p#0 - // [7] call mul8u + // [7] call mul8u -- call_phi_near jsr mul8u // [8] mul8u::return#2 = mul8u::res#2 jmp __b8 @@ -2630,7 +2630,7 @@ main: { // [17] div16u8u::divisor#0 = (char)PRIMES[main::$13] -- vbuz1=_byte_pwuc1_derefidx_vbuxx lda PRIMES,x sta.z div16u8u.divisor - // [18] call div16u8u + // [18] call div16u8u -- call_phi_near jsr div16u8u jmp __b9 // main::@9 @@ -2700,7 +2700,7 @@ main: { lda.z potential+1 sta (__15),y // [28] print_uint_decimal::w#0 = potential#11 - // [29] call print_uint_decimal + // [29] call print_uint_decimal -- call_phi_near jsr print_uint_decimal // [30] phi from main::@6 to main::@10 [phi:main::@6->main::@10] __b10_from___b6: @@ -2710,7 +2710,7 @@ main: { // [31] call print_char // [57] phi from main::@10 to print_char [phi:main::@10->print_char] print_char_from___b10: - // [57] phi print_char::ch#2 = ' ' [phi:main::@10->print_char#0] -- vbuaa=vbuc1 + // [57] phi print_char::ch#2 = ' ' [phi:main::@10->print_char#0] -- call_phi_near lda #' ' jsr print_char jmp __b11 @@ -2818,7 +2818,7 @@ div16u8u: { divr8u_from_div16u8u: // [61] phi divr8u::divisor#6 = divr8u::divisor#0 [phi:div16u8u->divr8u#0] -- register_copy // [61] phi divr8u::dividend#5 = divr8u::dividend#1 [phi:div16u8u->divr8u#1] -- register_copy - // [61] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#2] -- vbuyy=vbuc1 + // [61] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#2] -- call_phi_near ldy #0 jsr divr8u jmp __b1 @@ -2834,7 +2834,7 @@ div16u8u: { divr8u_from___b1: // [61] phi divr8u::divisor#6 = divr8u::divisor#1 [phi:div16u8u::@1->divr8u#0] -- register_copy // [61] phi divr8u::dividend#5 = divr8u::dividend#2 [phi:div16u8u::@1->divr8u#1] -- register_copy - // [61] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#2] -- register_copy + // [61] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#2] -- call_phi_near jsr divr8u jmp __breturn // div16u8u::@return @@ -2853,7 +2853,7 @@ print_uint_decimal: { lda.z w+1 sta.z utoa.value+1 // [53] call utoa - // [78] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] + // [78] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] -- call_phi_near utoa_from_print_uint_decimal: jsr utoa // [54] phi from print_uint_decimal to print_uint_decimal::@1 [phi:print_uint_decimal->print_uint_decimal::@1] @@ -2862,7 +2862,7 @@ print_uint_decimal: { // print_uint_decimal::@1 __b1: // [55] call print_str - // [99] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] + // [99] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] -- call_phi_near print_str_from___b1: jsr print_str jmp __breturn @@ -3088,7 +3088,7 @@ utoa: { // [93] utoa_append::value#0 = utoa::value#2 // [94] utoa_append::sub#0 = utoa::digit_value#0 // [95] call utoa_append - // [106] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + // [106] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near utoa_append_from___b5: jsr utoa_append // [96] utoa_append::return#0 = utoa_append::value#2 @@ -3143,7 +3143,7 @@ print_str: { // [104] call print_char // [57] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: - // [57] phi print_char::ch#2 = print_char::ch#0 [phi:print_str::@2->print_char#0] -- register_copy + // [57] phi print_char::ch#2 = print_char::ch#0 [phi:print_str::@2->print_char#0] -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -3628,7 +3628,7 @@ main: { // [5] mul8u::a#1 = main::p#0 -- vbuxx=vbuaa tax // [6] mul8u::b#0 = main::p#0 - // [7] call mul8u + // [7] call mul8u -- call_phi_near jsr mul8u // [8] mul8u::return#2 = mul8u::res#2 // main::@8 @@ -3679,7 +3679,7 @@ main: { // [17] div16u8u::divisor#0 = (char)PRIMES[main::$13] -- vbuz1=_byte_pwuc1_derefidx_vbuxx lda PRIMES,x sta.z div16u8u.divisor - // [18] call div16u8u + // [18] call div16u8u -- call_phi_near jsr div16u8u // main::@9 // div16u8u(potential, (char)PRIMES[test_idx++]); @@ -3746,14 +3746,14 @@ main: { sta (__15),y // print_uint_decimal(potential) // [28] print_uint_decimal::w#0 = potential#11 - // [29] call print_uint_decimal + // [29] call print_uint_decimal -- call_phi_near jsr print_uint_decimal // [30] phi from main::@6 to main::@10 [phi:main::@6->main::@10] // main::@10 // print_char(' ') // [31] call print_char // [57] phi from main::@10 to print_char [phi:main::@10->print_char] - // [57] phi print_char::ch#2 = ' ' [phi:main::@10->print_char#0] -- vbuaa=vbuc1 + // [57] phi print_char::ch#2 = ' ' [phi:main::@10->print_char#0] -- call_phi_near lda #' ' jsr print_char // main::@11 @@ -3859,7 +3859,7 @@ div16u8u: { // [61] phi from div16u8u to divr8u [phi:div16u8u->divr8u] // [61] phi divr8u::divisor#6 = divr8u::divisor#0 [phi:div16u8u->divr8u#0] -- register_copy // [61] phi divr8u::dividend#5 = divr8u::dividend#1 [phi:div16u8u->divr8u#1] -- register_copy - // [61] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#2] -- vbuyy=vbuc1 + // [61] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#2] -- call_phi_near ldy #0 jsr divr8u // div16u8u::@1 @@ -3873,7 +3873,7 @@ div16u8u: { // [61] phi from div16u8u::@1 to divr8u [phi:div16u8u::@1->divr8u] // [61] phi divr8u::divisor#6 = divr8u::divisor#1 [phi:div16u8u::@1->divr8u#0] -- register_copy // [61] phi divr8u::dividend#5 = divr8u::dividend#2 [phi:div16u8u::@1->divr8u#1] -- register_copy - // [61] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#2] -- register_copy + // [61] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#2] -- call_phi_near jsr divr8u // div16u8u::@return // } @@ -3892,13 +3892,13 @@ print_uint_decimal: { lda.z w+1 sta.z utoa.value+1 // [53] call utoa - // [78] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] + // [78] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] -- call_phi_near jsr utoa // [54] phi from print_uint_decimal to print_uint_decimal::@1 [phi:print_uint_decimal->print_uint_decimal::@1] // print_uint_decimal::@1 // print_str(decimal_digits) // [55] call print_str - // [99] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] + // [99] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] -- call_phi_near jsr print_str // print_uint_decimal::@return // } @@ -4114,7 +4114,7 @@ utoa: { // [93] utoa_append::value#0 = utoa::value#2 // [94] utoa_append::sub#0 = utoa::digit_value#0 // [95] call utoa_append - // [106] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + // [106] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near jsr utoa_append // utoa_append(buffer++, value, digit_value) // [96] utoa_append::return#0 = utoa_append::value#2 @@ -4166,7 +4166,7 @@ print_str: { lda (str),y // [104] call print_char // [57] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] - // [57] phi print_char::ch#2 = print_char::ch#0 [phi:print_str::@2->print_char#0] -- register_copy + // [57] phi print_char::ch#2 = print_char::ch#0 [phi:print_str::@2->print_char#0] -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/print-problem.log b/src/test/ref/print-problem.log index 660c6d482..f20359e65 100644 --- a/src/test/ref/print-problem.log +++ b/src/test/ref/print-problem.log @@ -273,7 +273,7 @@ main: { // [1] call ln // [9] phi from main to ln [phi:main->ln] ln_from_main: - // [9] phi line#13 = $40 [phi:main->ln#0] -- vbuaa=vbuc1 + // [9] phi line#13 = $40 [phi:main->ln#0] -- call_phi_near lda #$40 jsr ln // [2] phi from main to main::@1 [phi:main->main::@1] @@ -284,7 +284,7 @@ main: { // [3] call ln // [9] phi from main::@1 to ln [phi:main::@1->ln] ln_from___b1: - // [9] phi line#13 = line#14 [phi:main::@1->ln#0] -- register_copy + // [9] phi line#13 = line#14 [phi:main::@1->ln#0] -- call_phi_near jsr ln // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -294,7 +294,7 @@ main: { // [5] call ln // [9] phi from main::@2 to ln [phi:main::@2->ln] ln_from___b2: - // [9] phi line#13 = line#14 [phi:main::@2->ln#0] -- register_copy + // [9] phi line#13 = line#14 [phi:main::@2->ln#0] -- call_phi_near jsr ln jmp __b3 // main::@3 @@ -375,7 +375,7 @@ main: { // ln() // [1] call ln // [9] phi from main to ln [phi:main->ln] - // [9] phi line#13 = $40 [phi:main->ln#0] -- vbuaa=vbuc1 + // [9] phi line#13 = $40 [phi:main->ln#0] -- call_phi_near lda #$40 jsr ln // [2] phi from main to main::@1 [phi:main->main::@1] @@ -383,14 +383,14 @@ main: { // ln() // [3] call ln // [9] phi from main::@1 to ln [phi:main::@1->ln] - // [9] phi line#13 = line#14 [phi:main::@1->ln#0] -- register_copy + // [9] phi line#13 = line#14 [phi:main::@1->ln#0] -- call_phi_near jsr ln // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // ln() // [5] call ln // [9] phi from main::@2 to ln [phi:main::@2->ln] - // [9] phi line#13 = line#14 [phi:main::@2->ln#0] -- register_copy + // [9] phi line#13 = line#14 [phi:main::@2->ln#0] -- call_phi_near jsr ln // main::@3 // *SCREEN = ch diff --git a/src/test/ref/printf-1.log b/src/test/ref/printf-1.log index 697639266..17ab790c4 100644 --- a/src/test/ref/printf-1.log +++ b/src/test/ref/printf-1.log @@ -2496,7 +2496,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -2504,7 +2504,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -2540,7 +2540,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -2581,7 +2581,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -2593,14 +2593,14 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln jmp __breturn } // main main: { // [28] call clrscr - // [64] phi from main to clrscr [phi:main->clrscr] + // [64] phi from main to clrscr [phi:main->clrscr] -- call_phi_near clrscr_from_main: jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] @@ -2616,7 +2616,7 @@ main: { sta.z printf_string.str lda #>str sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@1->printf_string#1] -- vbuz1=vbuc1 + // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@1->printf_string#1] -- call_phi_near lda #0 sta.z printf_string.format_justify_left jsr printf_string @@ -2625,7 +2625,7 @@ main: { jmp __b2 // main::@2 __b2: - // [32] call cputln + // [32] call cputln -- call_phi_near jsr cputln // [33] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -2640,7 +2640,7 @@ main: { sta.z printf_string.str lda #>str1 sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@3->printf_string#1] -- vbuz1=vbuc1 + // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@3->printf_string#1] -- call_phi_near lda #0 sta.z printf_string.format_justify_left jsr printf_string @@ -2649,7 +2649,7 @@ main: { jmp __b4 // main::@4 __b4: - // [36] call cputln + // [36] call cputln -- call_phi_near jsr cputln // [37] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: @@ -2664,7 +2664,7 @@ main: { sta.z printf_string.str lda #>str sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@5->printf_string#1] -- vbuz1=vbuc1 + // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@5->printf_string#1] -- call_phi_near lda #1 sta.z printf_string.format_justify_left jsr printf_string @@ -2673,7 +2673,7 @@ main: { jmp __b6 // main::@6 __b6: - // [40] call cputln + // [40] call cputln -- call_phi_near jsr cputln // [41] phi from main::@6 to main::@7 [phi:main::@6->main::@7] __b7_from___b6: @@ -2688,7 +2688,7 @@ main: { sta.z printf_string.str lda #>str1 sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@7->printf_string#1] -- vbuz1=vbuc1 + // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@7->printf_string#1] -- call_phi_near lda #1 sta.z printf_string.format_justify_left jsr printf_string @@ -2827,7 +2827,7 @@ cputln: { sta.z conio_cursor_x // [61] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [62] call cscroll + // [62] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -2954,7 +2954,7 @@ printf_string: { lda.z str+1 sta.z strlen.str+1 // [82] call strlen - // [114] phi from printf_string::@3 to strlen [phi:printf_string::@3->strlen] + // [114] phi from printf_string::@3 to strlen [phi:printf_string::@3->strlen] -- call_phi_near strlen_from___b3: jsr strlen // [83] strlen::return#2 = strlen::len#2 @@ -3012,14 +3012,14 @@ printf_string: { // [120] phi printf_padding::pad#4 = ' ' [phi:printf_string::@4->printf_padding#0] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [120] phi printf_padding::length#3 = printf_padding::length#0 [phi:printf_string::@4->printf_padding#1] -- register_copy + // [120] phi printf_padding::length#3 = printf_padding::length#0 [phi:printf_string::@4->printf_padding#1] -- call_phi_near jsr printf_padding jmp __b2 // printf_string::@2 __b2: // [94] printf_str::s#1 = printf_string::str#10 // [95] call printf_str - // [128] phi from printf_string::@2 to printf_str [phi:printf_string::@2->printf_str] + // [128] phi from printf_string::@2 to printf_str [phi:printf_string::@2->printf_str] -- call_phi_near printf_str_from___b2: jsr printf_str jmp __b7 @@ -3047,7 +3047,7 @@ printf_string: { // [120] phi printf_padding::pad#4 = ' ' [phi:printf_string::@5->printf_padding#0] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [120] phi printf_padding::length#3 = printf_padding::length#1 [phi:printf_string::@5->printf_padding#1] -- register_copy + // [120] phi printf_padding::length#3 = printf_padding::length#1 [phi:printf_string::@5->printf_padding#1] -- call_phi_near jsr printf_padding jmp __breturn // printf_string::@return @@ -3075,7 +3075,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [137] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [137] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -3094,7 +3094,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [137] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [137] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -3110,7 +3110,7 @@ cscroll: { memset_from___b3: // [147] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [147] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [147] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -3126,7 +3126,7 @@ cscroll: { memset_from___b4: // [147] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [147] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [147] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -3782,12 +3782,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [8] return @@ -3816,7 +3816,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -3855,7 +3855,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -3866,7 +3866,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln rts } @@ -3874,7 +3874,7 @@ cputc: { main: { // clrscr() // [28] call clrscr - // [64] phi from main to clrscr [phi:main->clrscr] + // [64] phi from main to clrscr [phi:main->clrscr] -- call_phi_near jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] // main::@1 @@ -3886,14 +3886,14 @@ main: { sta.z printf_string.str lda #>str sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@1->printf_string#1] -- vbuz1=vbuc1 + // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@1->printf_string#1] -- call_phi_near lda #0 sta.z printf_string.format_justify_left jsr printf_string // [31] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // cputln() - // [32] call cputln + // [32] call cputln -- call_phi_near jsr cputln // [33] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 @@ -3905,14 +3905,14 @@ main: { sta.z printf_string.str lda #>str1 sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@3->printf_string#1] -- vbuz1=vbuc1 + // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@3->printf_string#1] -- call_phi_near lda #0 sta.z printf_string.format_justify_left jsr printf_string // [35] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // cputln() - // [36] call cputln + // [36] call cputln -- call_phi_near jsr cputln // [37] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 @@ -3924,14 +3924,14 @@ main: { sta.z printf_string.str lda #>str sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@5->printf_string#1] -- vbuz1=vbuc1 + // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@5->printf_string#1] -- call_phi_near lda #1 sta.z printf_string.format_justify_left jsr printf_string // [39] phi from main::@5 to main::@6 [phi:main::@5->main::@6] // main::@6 // cputln() - // [40] call cputln + // [40] call cputln -- call_phi_near jsr cputln // [41] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 @@ -3943,7 +3943,7 @@ main: { sta.z printf_string.str lda #>str1 sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@7->printf_string#1] -- vbuz1=vbuc1 + // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@7->printf_string#1] -- call_phi_near lda #1 sta.z printf_string.format_justify_left jsr printf_string @@ -4084,7 +4084,7 @@ cputln: { // [61] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [62] call cscroll + // [62] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -4210,7 +4210,7 @@ printf_string: { lda.z str+1 sta.z strlen.str+1 // [82] call strlen - // [114] phi from printf_string::@3 to strlen [phi:printf_string::@3->strlen] + // [114] phi from printf_string::@3 to strlen [phi:printf_string::@3->strlen] -- call_phi_near jsr strlen // strlen(str) // [83] strlen::return#2 = strlen::len#2 @@ -4260,14 +4260,14 @@ printf_string: { // [120] phi printf_padding::pad#4 = ' ' [phi:printf_string::@4->printf_padding#0] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [120] phi printf_padding::length#3 = printf_padding::length#0 [phi:printf_string::@4->printf_padding#1] -- register_copy + // [120] phi printf_padding::length#3 = printf_padding::length#0 [phi:printf_string::@4->printf_padding#1] -- call_phi_near jsr printf_padding // printf_string::@2 __b2: // printf_str(putc, str) // [94] printf_str::s#1 = printf_string::str#10 // [95] call printf_str - // [128] phi from printf_string::@2 to printf_str [phi:printf_string::@2->printf_str] + // [128] phi from printf_string::@2 to printf_str [phi:printf_string::@2->printf_str] -- call_phi_near jsr printf_str // printf_string::@7 // if(format.justify_left && padding) @@ -4291,7 +4291,7 @@ printf_string: { // [120] phi printf_padding::pad#4 = ' ' [phi:printf_string::@5->printf_padding#0] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [120] phi printf_padding::length#3 = printf_padding::length#1 [phi:printf_string::@5->printf_padding#1] -- register_copy + // [120] phi printf_padding::length#3 = printf_padding::length#1 [phi:printf_string::@5->printf_padding#1] -- call_phi_near jsr printf_padding // printf_string::@return __breturn: @@ -4317,7 +4317,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [137] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [137] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -4333,7 +4333,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [137] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [137] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -4346,7 +4346,7 @@ cscroll: { // [147] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [147] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [147] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [147] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -4359,7 +4359,7 @@ cscroll: { // [147] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [147] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [147] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [147] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/printf-10.log b/src/test/ref/printf-10.log index d9c32976a..dc91acd48 100644 --- a/src/test/ref/printf-10.log +++ b/src/test/ref/printf-10.log @@ -394,7 +394,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [7] phi printf_str::str#6 = main::str [phi:main->printf_str#1] -- pbuz1=pbuc1 + // [7] phi printf_str::str#6 = main::str [phi:main->printf_str#1] -- call_phi_near lda #str @@ -406,7 +406,7 @@ main: { // main::@1 __b1: // [3] call printf_string - // [14] phi from main::@1 to printf_string [phi:main::@1->printf_string] + // [14] phi from main::@1 to printf_string [phi:main::@1->printf_string] -- call_phi_near printf_string_from___b1: jsr printf_string // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -418,7 +418,7 @@ main: { // [7] phi from main::@2 to printf_str [phi:main::@2->printf_str] printf_str_from___b2: // [7] phi screen#25 = screen#1 [phi:main::@2->printf_str#0] -- register_copy - // [7] phi printf_str::str#6 = main::str1 [phi:main::@2->printf_str#1] -- pbuz1=pbuc1 + // [7] phi printf_str::str#6 = main::str1 [phi:main::@2->printf_str#1] -- call_phi_near lda #str1 @@ -488,7 +488,7 @@ printf_string: { // [7] phi from printf_string to printf_str [phi:printf_string->printf_str] printf_str_from_printf_string: // [7] phi screen#25 = screen#1 [phi:printf_string->printf_str#0] -- register_copy - // [7] phi printf_str::str#6 = main::name [phi:printf_string->printf_str#1] -- pbuz1=pbuc1 + // [7] phi printf_str::str#6 = main::name [phi:printf_string->printf_str#1] -- call_phi_near lda #main.name @@ -585,7 +585,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [7] phi printf_str::str#6 = main::str [phi:main->printf_str#1] -- pbuz1=pbuc1 + // [7] phi printf_str::str#6 = main::str [phi:main->printf_str#1] -- call_phi_near lda #str @@ -595,7 +595,7 @@ main: { // main::@1 // printf("Hello, I am %s. who are you?", name) // [3] call printf_string - // [14] phi from main::@1 to printf_string [phi:main::@1->printf_string] + // [14] phi from main::@1 to printf_string [phi:main::@1->printf_string] -- call_phi_near jsr printf_string // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 @@ -603,7 +603,7 @@ main: { // [5] call printf_str // [7] phi from main::@2 to printf_str [phi:main::@2->printf_str] // [7] phi screen#25 = screen#1 [phi:main::@2->printf_str#0] -- register_copy - // [7] phi printf_str::str#6 = main::str1 [phi:main::@2->printf_str#1] -- pbuz1=pbuc1 + // [7] phi printf_str::str#6 = main::str1 [phi:main::@2->printf_str#1] -- call_phi_near lda #str1 @@ -670,7 +670,7 @@ printf_string: { // [15] call printf_str // [7] phi from printf_string to printf_str [phi:printf_string->printf_str] // [7] phi screen#25 = screen#1 [phi:printf_string->printf_str#0] -- register_copy - // [7] phi printf_str::str#6 = main::name [phi:printf_string->printf_str#1] -- pbuz1=pbuc1 + // [7] phi printf_str::str#6 = main::name [phi:printf_string->printf_str#1] -- call_phi_near lda #main.name diff --git a/src/test/ref/printf-11.log b/src/test/ref/printf-11.log index 9aa0d1b12..7ebcbc0f7 100644 --- a/src/test/ref/printf-11.log +++ b/src/test/ref/printf-11.log @@ -521,7 +521,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [7] phi printf_str::str#5 = main::str [phi:main->printf_str#1] -- pbuz1=pbuc1 + // [7] phi printf_str::str#5 = main::str [phi:main->printf_str#1] -- call_phi_near lda #str @@ -532,7 +532,7 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call printf_uint + // [3] call printf_uint -- call_phi_near jsr printf_uint // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -543,7 +543,7 @@ main: { // [7] phi from main::@2 to printf_str [phi:main::@2->printf_str] printf_str_from___b2: // [7] phi screen#27 = screen#17 [phi:main::@2->printf_str#0] -- register_copy - // [7] phi printf_str::str#5 = main::str1 [phi:main::@2->printf_str#1] -- pbuz1=pbuc1 + // [7] phi printf_str::str#5 = main::str1 [phi:main::@2->printf_str#1] -- call_phi_near lda #str1 @@ -748,7 +748,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [7] phi printf_str::str#5 = main::str [phi:main->printf_str#1] -- pbuz1=pbuc1 + // [7] phi printf_str::str#5 = main::str [phi:main->printf_str#1] -- call_phi_near lda #str @@ -757,7 +757,7 @@ main: { // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // printf("Commodore is %x cool", pct) - // [3] call printf_uint + // [3] call printf_uint -- call_phi_near jsr printf_uint // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 @@ -765,7 +765,7 @@ main: { // [5] call printf_str // [7] phi from main::@2 to printf_str [phi:main::@2->printf_str] // [7] phi screen#27 = screen#17 [phi:main::@2->printf_str#0] -- register_copy - // [7] phi printf_str::str#5 = main::str1 [phi:main::@2->printf_str#1] -- pbuz1=pbuc1 + // [7] phi printf_str::str#5 = main::str1 [phi:main::@2->printf_str#1] -- call_phi_near lda #str1 diff --git a/src/test/ref/printf-12.log b/src/test/ref/printf-12.log index b25c502ae..d8bb5d234 100644 --- a/src/test/ref/printf-12.log +++ b/src/test/ref/printf-12.log @@ -7801,7 +7801,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -7809,7 +7809,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -7845,7 +7845,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -7886,7 +7886,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -7898,7 +7898,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln jmp __breturn } @@ -7912,7 +7912,7 @@ main: { .label ul = $8aa52 .label c = $2c // [28] call clrscr - // [104] phi from main to clrscr [phi:main->clrscr] + // [104] phi from main to clrscr [phi:main->clrscr] -- call_phi_near clrscr_from_main: jsr clrscr jmp __b1 @@ -7929,7 +7929,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s [phi:main::@1->printf_str#1] -- call_phi_near lda #s @@ -7953,7 +7953,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@2->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@2->printf_str#1] -- call_phi_near lda #s1 @@ -7972,7 +7972,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s2 [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s2 [phi:main::@3->printf_str#1] -- call_phi_near lda #s2 @@ -7988,7 +7988,7 @@ main: { printf_uint_from___b4: // [129] phi printf_uint::format_radix#2 = HEXADECIMAL [phi:main::@4->printf_uint#0] -- vbuxx=vbuc1 ldx #HEXADECIMAL - // [129] phi printf_uint::uvalue#2 = (unsigned int)&main::c [phi:main::@4->printf_uint#1] -- vwuz1=vwuc1 + // [129] phi printf_uint::uvalue#2 = (unsigned int)&main::c [phi:main::@4->printf_uint#1] -- call_phi_near lda #c @@ -8007,7 +8007,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@5->printf_str#1] -- call_phi_near lda #s1 @@ -8026,7 +8026,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s4 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s4 [phi:main::@6->printf_str#1] -- call_phi_near lda #s4 @@ -8050,7 +8050,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@7->printf_str#1] -- call_phi_near lda #s1 @@ -8069,7 +8069,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s6 [phi:main::@8->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s6 [phi:main::@8->printf_str#1] -- call_phi_near lda #s6 @@ -8080,7 +8080,7 @@ main: { jmp __b9 // main::@9 __b9: - // [50] call printf_schar + // [50] call printf_schar -- call_phi_near jsr printf_schar // [51] phi from main::@9 to main::@10 [phi:main::@9->main::@10] __b10_from___b9: @@ -8095,7 +8095,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@10->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@10->printf_str#1] -- call_phi_near lda #s1 @@ -8114,7 +8114,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s8 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s8 [phi:main::@11->printf_str#1] -- call_phi_near lda #s8 @@ -8126,7 +8126,7 @@ main: { // main::@12 __b12: // [56] call printf_uchar - // [144] phi from main::@12 to printf_uchar [phi:main::@12->printf_uchar] + // [144] phi from main::@12 to printf_uchar [phi:main::@12->printf_uchar] -- call_phi_near printf_uchar_from___b12: jsr printf_uchar // [57] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -8142,7 +8142,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@13->printf_str#1] -- call_phi_near lda #s1 @@ -8161,7 +8161,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s10 [phi:main::@14->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s10 [phi:main::@14->printf_str#1] -- call_phi_near lda #s10 @@ -8172,7 +8172,7 @@ main: { jmp __b15 // main::@15 __b15: - // [62] call printf_sint + // [62] call printf_sint -- call_phi_near jsr printf_sint // [63] phi from main::@15 to main::@16 [phi:main::@15->main::@16] __b16_from___b15: @@ -8187,7 +8187,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@16->printf_str#1] -- call_phi_near lda #s1 @@ -8206,7 +8206,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s12 [phi:main::@17->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s12 [phi:main::@17->printf_str#1] -- call_phi_near lda #s12 @@ -8222,7 +8222,7 @@ main: { printf_uint_from___b18: // [129] phi printf_uint::format_radix#2 = DECIMAL [phi:main::@18->printf_uint#0] -- vbuxx=vbuc1 ldx #DECIMAL - // [129] phi printf_uint::uvalue#2 = main::ui [phi:main::@18->printf_uint#1] -- vwuz1=vwuc1 + // [129] phi printf_uint::uvalue#2 = main::ui [phi:main::@18->printf_uint#1] -- call_phi_near lda #ui @@ -8241,7 +8241,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@19->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@19->printf_str#1] -- call_phi_near lda #s1 @@ -8260,7 +8260,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s14 [phi:main::@20->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s14 [phi:main::@20->printf_str#1] -- call_phi_near lda #s14 @@ -8271,7 +8271,7 @@ main: { jmp __b21 // main::@21 __b21: - // [74] call printf_slong + // [74] call printf_slong -- call_phi_near jsr printf_slong // [75] phi from main::@21 to main::@22 [phi:main::@21->main::@22] __b22_from___b21: @@ -8286,7 +8286,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@22->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@22->printf_str#1] -- call_phi_near lda #s1 @@ -8305,7 +8305,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s16 [phi:main::@23->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s16 [phi:main::@23->printf_str#1] -- call_phi_near lda #s16 @@ -8317,7 +8317,7 @@ main: { // main::@24 __b24: // [80] call printf_ulong - // [164] phi from main::@24 to printf_ulong [phi:main::@24->printf_ulong] + // [164] phi from main::@24 to printf_ulong [phi:main::@24->printf_ulong] -- call_phi_near printf_ulong_from___b24: jsr printf_ulong // [81] phi from main::@24 to main::@25 [phi:main::@24->main::@25] @@ -8333,7 +8333,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@25->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@25->printf_str#1] -- call_phi_near lda #s1 @@ -8490,7 +8490,7 @@ cputln: { sta.z conio_cursor_x // [101] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [102] call cscroll + // [102] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -8660,7 +8660,7 @@ printf_uint: { // [183] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] utoa_from___b1: // [183] phi utoa::value#10 = utoa::value#2 [phi:printf_uint::@1->utoa#0] -- register_copy - // [183] phi utoa::radix#2 = utoa::radix#1 [phi:printf_uint::@1->utoa#1] -- register_copy + // [183] phi utoa::radix#2 = utoa::radix#1 [phi:printf_uint::@1->utoa#1] -- call_phi_near jsr utoa jmp __b2 // printf_uint::@2 @@ -8687,7 +8687,7 @@ printf_uint: { // [214] phi printf_number_buffer::format_justify_left#10 = 0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #0 sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = 0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [214] phi printf_number_buffer::format_min_length#10 = 0 [phi:printf_uint::@2->printf_number_buffer#5] -- call_phi_near ldx #0 jsr printf_number_buffer jmp __breturn @@ -8726,7 +8726,7 @@ printf_schar: { // [140] call uctoa // [255] phi from printf_schar::@2 to uctoa [phi:printf_schar::@2->uctoa] uctoa_from___b2: - // [255] phi uctoa::value#10 = printf_schar::uvalue#0 [phi:printf_schar::@2->uctoa#0] -- vbuxx=vbuc1 + // [255] phi uctoa::value#10 = printf_schar::uvalue#0 [phi:printf_schar::@2->uctoa#0] -- call_phi_near ldx #uvalue jsr uctoa jmp __b3 @@ -8754,7 +8754,7 @@ printf_schar: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_schar::format_justify_left#0 [phi:printf_schar::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_schar::format_min_length#0 [phi:printf_schar::@3->printf_number_buffer#5] -- vbuxx=vbuc1 + // [214] phi printf_number_buffer::format_min_length#10 = printf_schar::format_min_length#0 [phi:printf_schar::@3->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -8783,7 +8783,7 @@ printf_uchar: { // Format number into buffer // [255] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] uctoa_from___b1: - // [255] phi uctoa::value#10 = main::uc [phi:printf_uchar::@1->uctoa#0] -- vbuxx=vbuc1 + // [255] phi uctoa::value#10 = main::uc [phi:printf_uchar::@1->uctoa#0] -- call_phi_near ldx #main.uc jsr uctoa jmp __b2 @@ -8811,7 +8811,7 @@ printf_uchar: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_uchar::format_justify_left#0 [phi:printf_uchar::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_uchar::format_min_length#0 [phi:printf_uchar::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [214] phi printf_number_buffer::format_min_length#10 = printf_uchar::format_min_length#0 [phi:printf_uchar::@2->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -8855,7 +8855,7 @@ printf_sint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [183] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- vbuxx=vbuc1 + // [183] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- call_phi_near ldx #DECIMAL jsr utoa jmp __b3 @@ -8883,7 +8883,7 @@ printf_sint: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_sint::format_justify_left#0 [phi:printf_sint::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_sint::format_min_length#0 [phi:printf_sint::@3->printf_number_buffer#5] -- vbuxx=vbuc1 + // [214] phi printf_number_buffer::format_min_length#10 = printf_sint::format_min_length#0 [phi:printf_sint::@3->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -8922,7 +8922,7 @@ printf_slong: { // [160] call ultoa // [274] phi from printf_slong::@2 to ultoa [phi:printf_slong::@2->ultoa] ultoa_from___b2: - // [274] phi ultoa::value#10 = printf_slong::uvalue#0 [phi:printf_slong::@2->ultoa#0] -- vduz1=vduc1 + // [274] phi ultoa::value#10 = printf_slong::uvalue#0 [phi:printf_slong::@2->ultoa#0] -- call_phi_near lda #uvalue @@ -8957,7 +8957,7 @@ printf_slong: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_slong::format_justify_left#0 [phi:printf_slong::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_slong::format_min_length#0 [phi:printf_slong::@3->printf_number_buffer#5] -- vbuxx=vbuc1 + // [214] phi printf_number_buffer::format_min_length#10 = printf_slong::format_min_length#0 [phi:printf_slong::@3->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -8986,7 +8986,7 @@ printf_ulong: { // Format number into buffer // [274] phi from printf_ulong::@1 to ultoa [phi:printf_ulong::@1->ultoa] ultoa_from___b1: - // [274] phi ultoa::value#10 = main::ul [phi:printf_ulong::@1->ultoa#0] -- vduz1=vduc1 + // [274] phi ultoa::value#10 = main::ul [phi:printf_ulong::@1->ultoa#0] -- call_phi_near lda #main.ul @@ -9021,7 +9021,7 @@ printf_ulong: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_ulong::format_justify_left#0 [phi:printf_ulong::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_ulong::format_min_length#0 [phi:printf_ulong::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [214] phi printf_number_buffer::format_min_length#10 = printf_ulong::format_min_length#0 [phi:printf_ulong::@2->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -9050,7 +9050,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [295] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [295] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -9069,7 +9069,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [295] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [295] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -9085,7 +9085,7 @@ cscroll: { memset_from___b3: // [305] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [305] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [305] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -9101,7 +9101,7 @@ cscroll: { memset_from___b4: // [305] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [305] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [305] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -9330,7 +9330,7 @@ utoa: { // [208] utoa_append::value#0 = utoa::value#3 // [209] utoa_append::sub#0 = utoa::digit_value#0 // [210] call utoa_append - // [313] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] + // [313] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] -- call_phi_near utoa_append_from___b10: jsr utoa_append // [211] utoa_append::return#0 = utoa_append::value#2 @@ -9372,7 +9372,7 @@ printf_number_buffer: { // printf_number_buffer::@6 __b6: // [217] call strlen - // [320] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] + // [320] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] -- call_phi_near strlen_from___b6: jsr strlen // [218] strlen::return#2 = strlen::len#2 @@ -9456,7 +9456,7 @@ printf_number_buffer: { // [326] phi printf_padding::pad#5 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [326] phi printf_padding::length#4 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy + // [326] phi printf_padding::length#4 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- call_phi_near jsr printf_padding jmp __b2 // printf_number_buffer::@2 @@ -9501,7 +9501,7 @@ printf_number_buffer: { // [326] phi printf_padding::pad#5 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [326] phi printf_padding::length#4 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy + // [326] phi printf_padding::length#4 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- call_phi_near jsr printf_padding jmp __b4 // printf_number_buffer::@4 @@ -9515,7 +9515,7 @@ printf_number_buffer: { // printf_number_buffer::@11 __b11: // [245] call strupr - // [334] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] + // [334] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] -- call_phi_near strupr_from___b11: jsr strupr jmp __b5 @@ -9526,7 +9526,7 @@ printf_number_buffer: { // [120] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] printf_str_from___b5: // [120] phi printf_str::putc#21 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [120] phi printf_str::s#21 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- call_phi_near lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -9565,7 +9565,7 @@ printf_number_buffer: { // [326] phi printf_padding::pad#5 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [326] phi printf_padding::length#4 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy + // [326] phi printf_padding::length#4 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- call_phi_near jsr printf_padding jmp __breturn // printf_number_buffer::@return @@ -9668,7 +9668,7 @@ uctoa: { // [268] uctoa_append::value#0 = uctoa::value#3 // [269] uctoa_append::sub#0 = uctoa::digit_value#0 // [270] call uctoa_append - // [344] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] + // [344] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near uctoa_append_from___b5: jsr uctoa_append // [271] uctoa_append::return#0 = uctoa_append::value#2 @@ -9808,7 +9808,7 @@ ultoa: { // [289] ultoa_append::value#0 = ultoa::value#3 // [290] ultoa_append::sub#0 = ultoa::digit_value#0 // [291] call ultoa_append - // [351] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] + // [351] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] -- call_phi_near ultoa_append_from___b5: jsr ultoa_append // [292] ultoa_append::return#0 = ultoa_append::value#2 @@ -10129,7 +10129,7 @@ strupr: { // [338] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [339] call toupper + // [339] call toupper -- call_phi_near jsr toupper // [340] toupper::return#3 = toupper::return#2 jmp __b3 @@ -11291,12 +11291,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [8] return @@ -11325,7 +11325,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -11364,7 +11364,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -11375,7 +11375,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln rts } @@ -11390,7 +11390,7 @@ main: { .label c = $2c // clrscr() // [28] call clrscr - // [104] phi from main to clrscr [phi:main->clrscr] + // [104] phi from main to clrscr [phi:main->clrscr] -- call_phi_near jsr clrscr // main::@1 // char c = 'x' @@ -11405,7 +11405,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s [phi:main::@1->printf_str#1] -- call_phi_near lda #s @@ -11427,7 +11427,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@2->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@2->printf_str#1] -- call_phi_near lda #s1 @@ -11443,7 +11443,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s2 [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s2 [phi:main::@3->printf_str#1] -- call_phi_near lda #s2 @@ -11456,7 +11456,7 @@ main: { // [129] phi from main::@4 to printf_uint [phi:main::@4->printf_uint] // [129] phi printf_uint::format_radix#2 = HEXADECIMAL [phi:main::@4->printf_uint#0] -- vbuxx=vbuc1 ldx #HEXADECIMAL - // [129] phi printf_uint::uvalue#2 = (unsigned int)&main::c [phi:main::@4->printf_uint#1] -- vwuz1=vwuc1 + // [129] phi printf_uint::uvalue#2 = (unsigned int)&main::c [phi:main::@4->printf_uint#1] -- call_phi_near lda #c @@ -11472,7 +11472,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@5->printf_str#1] -- call_phi_near lda #s1 @@ -11488,7 +11488,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s4 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s4 [phi:main::@6->printf_str#1] -- call_phi_near lda #s4 @@ -11510,7 +11510,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@7->printf_str#1] -- call_phi_near lda #s1 @@ -11526,7 +11526,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s6 [phi:main::@8->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s6 [phi:main::@8->printf_str#1] -- call_phi_near lda #s6 @@ -11535,7 +11535,7 @@ main: { // [49] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 // printf("A signed char: %hhd\n", sc) - // [50] call printf_schar + // [50] call printf_schar -- call_phi_near jsr printf_schar // [51] phi from main::@9 to main::@10 [phi:main::@9->main::@10] // main::@10 @@ -11547,7 +11547,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@10->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@10->printf_str#1] -- call_phi_near lda #s1 @@ -11563,7 +11563,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s8 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s8 [phi:main::@11->printf_str#1] -- call_phi_near lda #s8 @@ -11573,7 +11573,7 @@ main: { // main::@12 // printf("An unsigned char: %hhu\n", uc) // [56] call printf_uchar - // [144] phi from main::@12 to printf_uchar [phi:main::@12->printf_uchar] + // [144] phi from main::@12 to printf_uchar [phi:main::@12->printf_uchar] -- call_phi_near jsr printf_uchar // [57] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 @@ -11585,7 +11585,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@13->printf_str#1] -- call_phi_near lda #s1 @@ -11601,7 +11601,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s10 [phi:main::@14->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s10 [phi:main::@14->printf_str#1] -- call_phi_near lda #s10 @@ -11610,7 +11610,7 @@ main: { // [61] phi from main::@14 to main::@15 [phi:main::@14->main::@15] // main::@15 // printf("A signed int: %d\n", si) - // [62] call printf_sint + // [62] call printf_sint -- call_phi_near jsr printf_sint // [63] phi from main::@15 to main::@16 [phi:main::@15->main::@16] // main::@16 @@ -11622,7 +11622,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@16->printf_str#1] -- call_phi_near lda #s1 @@ -11638,7 +11638,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s12 [phi:main::@17->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s12 [phi:main::@17->printf_str#1] -- call_phi_near lda #s12 @@ -11651,7 +11651,7 @@ main: { // [129] phi from main::@18 to printf_uint [phi:main::@18->printf_uint] // [129] phi printf_uint::format_radix#2 = DECIMAL [phi:main::@18->printf_uint#0] -- vbuxx=vbuc1 ldx #DECIMAL - // [129] phi printf_uint::uvalue#2 = main::ui [phi:main::@18->printf_uint#1] -- vwuz1=vwuc1 + // [129] phi printf_uint::uvalue#2 = main::ui [phi:main::@18->printf_uint#1] -- call_phi_near lda #ui @@ -11667,7 +11667,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@19->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@19->printf_str#1] -- call_phi_near lda #s1 @@ -11683,7 +11683,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s14 [phi:main::@20->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s14 [phi:main::@20->printf_str#1] -- call_phi_near lda #s14 @@ -11692,7 +11692,7 @@ main: { // [73] phi from main::@20 to main::@21 [phi:main::@20->main::@21] // main::@21 // printf("A signed long: %ld\n", sl) - // [74] call printf_slong + // [74] call printf_slong -- call_phi_near jsr printf_slong // [75] phi from main::@21 to main::@22 [phi:main::@21->main::@22] // main::@22 @@ -11704,7 +11704,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@22->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@22->printf_str#1] -- call_phi_near lda #s1 @@ -11720,7 +11720,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s16 [phi:main::@23->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s16 [phi:main::@23->printf_str#1] -- call_phi_near lda #s16 @@ -11730,7 +11730,7 @@ main: { // main::@24 // printf("An unsigned long: %lu\n", ul) // [80] call printf_ulong - // [164] phi from main::@24 to printf_ulong [phi:main::@24->printf_ulong] + // [164] phi from main::@24 to printf_ulong [phi:main::@24->printf_ulong] -- call_phi_near jsr printf_ulong // [81] phi from main::@24 to main::@25 [phi:main::@24->main::@25] // main::@25 @@ -11742,7 +11742,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@25->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = main::s1 [phi:main::@25->printf_str#1] -- call_phi_near lda #s1 @@ -11901,7 +11901,7 @@ cputln: { // [101] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [102] call cscroll + // [102] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -12068,7 +12068,7 @@ printf_uint: { // Format number into buffer // [183] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] // [183] phi utoa::value#10 = utoa::value#2 [phi:printf_uint::@1->utoa#0] -- register_copy - // [183] phi utoa::radix#2 = utoa::radix#1 [phi:printf_uint::@1->utoa#1] -- register_copy + // [183] phi utoa::radix#2 = utoa::radix#1 [phi:printf_uint::@1->utoa#1] -- call_phi_near jsr utoa // printf_uint::@2 // printf_number_buffer(putc, printf_buffer, format) @@ -12092,7 +12092,7 @@ printf_uint: { sta.z printf_number_buffer.format_zero_padding // [214] phi printf_number_buffer::format_justify_left#10 = 0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = 0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [214] phi printf_number_buffer::format_min_length#10 = 0 [phi:printf_uint::@2->printf_number_buffer#5] -- call_phi_near tax jsr printf_number_buffer // printf_uint::@return @@ -12127,7 +12127,7 @@ printf_schar: { // uctoa(uvalue, printf_buffer.digits, format.radix) // [140] call uctoa // [255] phi from printf_schar::@2 to uctoa [phi:printf_schar::@2->uctoa] - // [255] phi uctoa::value#10 = printf_schar::uvalue#0 [phi:printf_schar::@2->uctoa#0] -- vbuxx=vbuc1 + // [255] phi uctoa::value#10 = printf_schar::uvalue#0 [phi:printf_schar::@2->uctoa#0] -- call_phi_near ldx #uvalue jsr uctoa // printf_schar::@3 @@ -12153,7 +12153,7 @@ printf_schar: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_schar::format_justify_left#0 [phi:printf_schar::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_schar::format_min_length#0 [phi:printf_schar::@3->printf_number_buffer#5] -- vbuxx=vbuc1 + // [214] phi printf_number_buffer::format_min_length#10 = printf_schar::format_min_length#0 [phi:printf_schar::@3->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer // printf_schar::@return @@ -12180,7 +12180,7 @@ printf_uchar: { // [146] call uctoa // Format number into buffer // [255] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] - // [255] phi uctoa::value#10 = main::uc [phi:printf_uchar::@1->uctoa#0] -- vbuxx=vbuc1 + // [255] phi uctoa::value#10 = main::uc [phi:printf_uchar::@1->uctoa#0] -- call_phi_near ldx #main.uc jsr uctoa // printf_uchar::@2 @@ -12206,7 +12206,7 @@ printf_uchar: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_uchar::format_justify_left#0 [phi:printf_uchar::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_uchar::format_min_length#0 [phi:printf_uchar::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [214] phi printf_number_buffer::format_min_length#10 = printf_uchar::format_min_length#0 [phi:printf_uchar::@2->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer // printf_uchar::@return @@ -12246,7 +12246,7 @@ printf_sint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [183] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- vbuxx=vbuc1 + // [183] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- call_phi_near ldx #DECIMAL jsr utoa // printf_sint::@3 @@ -12272,7 +12272,7 @@ printf_sint: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_sint::format_justify_left#0 [phi:printf_sint::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_sint::format_min_length#0 [phi:printf_sint::@3->printf_number_buffer#5] -- vbuxx=vbuc1 + // [214] phi printf_number_buffer::format_min_length#10 = printf_sint::format_min_length#0 [phi:printf_sint::@3->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer // printf_sint::@return @@ -12307,7 +12307,7 @@ printf_slong: { // ultoa(uvalue, printf_buffer.digits, format.radix) // [160] call ultoa // [274] phi from printf_slong::@2 to ultoa [phi:printf_slong::@2->ultoa] - // [274] phi ultoa::value#10 = printf_slong::uvalue#0 [phi:printf_slong::@2->ultoa#0] -- vduz1=vduc1 + // [274] phi ultoa::value#10 = printf_slong::uvalue#0 [phi:printf_slong::@2->ultoa#0] -- call_phi_near lda #uvalue @@ -12340,7 +12340,7 @@ printf_slong: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_slong::format_justify_left#0 [phi:printf_slong::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_slong::format_min_length#0 [phi:printf_slong::@3->printf_number_buffer#5] -- vbuxx=vbuc1 + // [214] phi printf_number_buffer::format_min_length#10 = printf_slong::format_min_length#0 [phi:printf_slong::@3->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer // printf_slong::@return @@ -12367,7 +12367,7 @@ printf_ulong: { // [166] call ultoa // Format number into buffer // [274] phi from printf_ulong::@1 to ultoa [phi:printf_ulong::@1->ultoa] - // [274] phi ultoa::value#10 = main::ul [phi:printf_ulong::@1->ultoa#0] -- vduz1=vduc1 + // [274] phi ultoa::value#10 = main::ul [phi:printf_ulong::@1->ultoa#0] -- call_phi_near lda #main.ul @@ -12400,7 +12400,7 @@ printf_ulong: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_ulong::format_justify_left#0 [phi:printf_ulong::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_ulong::format_min_length#0 [phi:printf_ulong::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [214] phi printf_number_buffer::format_min_length#10 = printf_ulong::format_min_length#0 [phi:printf_ulong::@2->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer // printf_ulong::@return @@ -12426,7 +12426,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [295] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [295] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -12442,7 +12442,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [295] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [295] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -12455,7 +12455,7 @@ cscroll: { // [305] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [305] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [305] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [305] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -12468,7 +12468,7 @@ cscroll: { // [305] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [305] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [305] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [305] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -12693,7 +12693,7 @@ utoa: { // [208] utoa_append::value#0 = utoa::value#3 // [209] utoa_append::sub#0 = utoa::digit_value#0 // [210] call utoa_append - // [313] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] + // [313] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] -- call_phi_near jsr utoa_append // utoa_append(buffer++, value, digit_value) // [211] utoa_append::return#0 = utoa_append::value#2 @@ -12733,7 +12733,7 @@ printf_number_buffer: { // printf_number_buffer::@6 // strlen(buffer.digits) // [217] call strlen - // [320] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] + // [320] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] -- call_phi_near jsr strlen // strlen(buffer.digits) // [218] strlen::return#2 = strlen::len#2 @@ -12804,7 +12804,7 @@ printf_number_buffer: { // [326] phi printf_padding::pad#5 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [326] phi printf_padding::length#4 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy + // [326] phi printf_padding::length#4 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- call_phi_near jsr printf_padding // printf_number_buffer::@2 __b2: @@ -12845,7 +12845,7 @@ printf_number_buffer: { // [326] phi printf_padding::pad#5 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [326] phi printf_padding::length#4 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy + // [326] phi printf_padding::length#4 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- call_phi_near jsr printf_padding // printf_number_buffer::@4 __b4: @@ -12857,7 +12857,7 @@ printf_number_buffer: { // printf_number_buffer::@11 // strupr(buffer.digits) // [245] call strupr - // [334] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] + // [334] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] -- call_phi_near jsr strupr // printf_number_buffer::@5 __b5: @@ -12866,7 +12866,7 @@ printf_number_buffer: { // [247] call printf_str // [120] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] // [120] phi printf_str::putc#21 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [120] phi printf_str::s#21 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 + // [120] phi printf_str::s#21 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- call_phi_near lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -12900,7 +12900,7 @@ printf_number_buffer: { // [326] phi printf_padding::pad#5 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [326] phi printf_padding::length#4 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy + // [326] phi printf_padding::length#4 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- call_phi_near jsr printf_padding // printf_number_buffer::@return __breturn: @@ -13000,7 +13000,7 @@ uctoa: { // [268] uctoa_append::value#0 = uctoa::value#3 // [269] uctoa_append::sub#0 = uctoa::digit_value#0 // [270] call uctoa_append - // [344] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] + // [344] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near jsr uctoa_append // uctoa_append(buffer++, value, digit_value) // [271] uctoa_append::return#0 = uctoa_append::value#2 @@ -13137,7 +13137,7 @@ ultoa: { // [289] ultoa_append::value#0 = ultoa::value#3 // [290] ultoa_append::sub#0 = ultoa::digit_value#0 // [291] call ultoa_append - // [351] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] + // [351] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] -- call_phi_near jsr ultoa_append // ultoa_append(buffer++, value, digit_value) // [292] ultoa_append::return#0 = ultoa_append::value#2 @@ -13446,7 +13446,7 @@ strupr: { // [338] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [339] call toupper + // [339] call toupper -- call_phi_near jsr toupper // [340] toupper::return#3 = toupper::return#2 // strupr::@3 diff --git a/src/test/ref/printf-14.log b/src/test/ref/printf-14.log index 8ab5f163e..4a61c0595 100644 --- a/src/test/ref/printf-14.log +++ b/src/test/ref/printf-14.log @@ -3645,7 +3645,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -3653,7 +3653,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -3689,7 +3689,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -3730,7 +3730,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -3742,7 +3742,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln jmp __breturn } @@ -3750,7 +3750,7 @@ cputc: { main: { .label c = 7 // [28] call clrscr - // [52] phi from main to clrscr [phi:main->clrscr] + // [52] phi from main to clrscr [phi:main->clrscr] -- call_phi_near clrscr_from_main: jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] @@ -3759,7 +3759,7 @@ main: { // main::@1 __b1: // [30] call printf_uchar - // [68] phi from main::@1 to printf_uchar [phi:main::@1->printf_uchar] + // [68] phi from main::@1 to printf_uchar [phi:main::@1->printf_uchar] -- call_phi_near printf_uchar_from___b1: jsr printf_uchar jmp __breturn @@ -3891,7 +3891,7 @@ cputln: { sta.z conio_cursor_x // [49] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [50] call cscroll + // [50] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -4013,7 +4013,7 @@ printf_uchar: { sta printf_buffer // [70] call uctoa // Format number into buffer - // [87] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] + // [87] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] -- call_phi_near uctoa_from___b1: jsr uctoa jmp __b2 @@ -4023,7 +4023,7 @@ printf_uchar: { lda printf_buffer // [72] call printf_number_buffer // Print using format - // [106] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] + // [106] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] -- call_phi_near printf_number_buffer_from___b2: jsr printf_number_buffer jmp __breturn @@ -4052,7 +4052,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [114] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [114] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -4071,7 +4071,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [114] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [114] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -4087,7 +4087,7 @@ cscroll: { memset_from___b3: // [124] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [124] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [124] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -4103,7 +4103,7 @@ cscroll: { memset_from___b4: // [124] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [124] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [124] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -4230,7 +4230,7 @@ uctoa: { // [100] uctoa_append::value#0 = uctoa::value#2 // [101] uctoa_append::sub#0 = uctoa::digit_value#0 // [102] call uctoa_append - // [132] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] + // [132] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near uctoa_append_from___b5: jsr uctoa_append // [103] uctoa_append::return#0 = uctoa_append::value#2 @@ -4280,7 +4280,7 @@ printf_number_buffer: { // printf_number_buffer::@2 __b2: // [112] call printf_str - // [139] phi from printf_number_buffer::@2 to printf_str [phi:printf_number_buffer::@2->printf_str] + // [139] phi from printf_number_buffer::@2 to printf_str [phi:printf_number_buffer::@2->printf_str] -- call_phi_near printf_str_from___b2: jsr printf_str jmp __breturn @@ -4903,12 +4903,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [8] return @@ -4937,7 +4937,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -4976,7 +4976,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -4987,7 +4987,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln rts } @@ -4996,13 +4996,13 @@ main: { .label c = 7 // clrscr() // [28] call clrscr - // [52] phi from main to clrscr [phi:main->clrscr] + // [52] phi from main to clrscr [phi:main->clrscr] -- call_phi_near jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] // main::@1 // printf("%u", c) // [30] call printf_uchar - // [68] phi from main::@1 to printf_uchar [phi:main::@1->printf_uchar] + // [68] phi from main::@1 to printf_uchar [phi:main::@1->printf_uchar] -- call_phi_near jsr printf_uchar // main::@return // } @@ -5135,7 +5135,7 @@ cputln: { // [49] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [50] call cscroll + // [50] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -5257,7 +5257,7 @@ printf_uchar: { // uctoa(uvalue, printf_buffer.digits, format.radix) // [70] call uctoa // Format number into buffer - // [87] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] + // [87] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] -- call_phi_near jsr uctoa // printf_uchar::@2 // printf_number_buffer(putc, printf_buffer, format) @@ -5265,7 +5265,7 @@ printf_uchar: { lda printf_buffer // [72] call printf_number_buffer // Print using format - // [106] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] + // [106] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] -- call_phi_near jsr printf_number_buffer // printf_uchar::@return // } @@ -5290,7 +5290,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [114] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [114] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -5306,7 +5306,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [114] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [114] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -5319,7 +5319,7 @@ cscroll: { // [124] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [124] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [124] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [124] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -5332,7 +5332,7 @@ cscroll: { // [124] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [124] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [124] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [124] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -5457,7 +5457,7 @@ uctoa: { // [100] uctoa_append::value#0 = uctoa::value#2 // [101] uctoa_append::sub#0 = uctoa::digit_value#0 // [102] call uctoa_append - // [132] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] + // [132] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near jsr uctoa_append // uctoa_append(buffer++, value, digit_value) // [103] uctoa_append::return#0 = uctoa_append::value#2 @@ -5502,7 +5502,7 @@ printf_number_buffer: { __b2: // printf_str(putc, buffer.digits) // [112] call printf_str - // [139] phi from printf_number_buffer::@2 to printf_str [phi:printf_number_buffer::@2->printf_str] + // [139] phi from printf_number_buffer::@2 to printf_str [phi:printf_number_buffer::@2->printf_str] -- call_phi_near jsr printf_str // printf_number_buffer::@return // } diff --git a/src/test/ref/printf-15.log b/src/test/ref/printf-15.log index 1717f7db4..dcca7d5bb 100644 --- a/src/test/ref/printf-15.log +++ b/src/test/ref/printf-15.log @@ -1683,7 +1683,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -1691,7 +1691,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -1727,7 +1727,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -1768,7 +1768,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -1780,14 +1780,14 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln jmp __breturn } // main main: { // [28] call clrscr - // [54] phi from main to clrscr [phi:main->clrscr] + // [54] phi from main to clrscr [phi:main->clrscr] -- call_phi_near clrscr_from_main: jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] @@ -1798,7 +1798,7 @@ main: { // [30] call printf_str // [70] phi from main::@1 to printf_str [phi:main::@1->printf_str] printf_str_from___b1: - // [70] phi printf_str::s#4 = main::s [phi:main::@1->printf_str#0] -- pbuz1=pbuc1 + // [70] phi printf_str::s#4 = main::s [phi:main::@1->printf_str#0] -- call_phi_near lda #s @@ -1812,7 +1812,7 @@ main: { // [32] call printf_str // [70] phi from main::@2 to printf_str [phi:main::@2->printf_str] printf_str_from___b2: - // [70] phi printf_str::s#4 = main::s1 [phi:main::@2->printf_str#0] -- pbuz1=pbuc1 + // [70] phi printf_str::s#4 = main::s1 [phi:main::@2->printf_str#0] -- call_phi_near lda #s1 @@ -1953,7 +1953,7 @@ cputln: { sta.z conio_cursor_x // [51] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [52] call cscroll + // [52] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -2120,7 +2120,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [92] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [92] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -2139,7 +2139,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [92] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [92] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -2155,7 +2155,7 @@ cscroll: { memset_from___b3: // [102] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [102] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [102] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -2171,7 +2171,7 @@ cscroll: { memset_from___b4: // [102] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [102] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [102] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -2604,12 +2604,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [8] return @@ -2638,7 +2638,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -2677,7 +2677,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -2688,7 +2688,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln rts } @@ -2696,14 +2696,14 @@ cputc: { main: { // clrscr() // [28] call clrscr - // [54] phi from main to clrscr [phi:main->clrscr] + // [54] phi from main to clrscr [phi:main->clrscr] -- call_phi_near jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] // main::@1 // printf("Lone 1\n") // [30] call printf_str // [70] phi from main::@1 to printf_str [phi:main::@1->printf_str] - // [70] phi printf_str::s#4 = main::s [phi:main::@1->printf_str#0] -- pbuz1=pbuc1 + // [70] phi printf_str::s#4 = main::s [phi:main::@1->printf_str#0] -- call_phi_near lda #s @@ -2714,7 +2714,7 @@ main: { // printf("Lone 2\n") // [32] call printf_str // [70] phi from main::@2 to printf_str [phi:main::@2->printf_str] - // [70] phi printf_str::s#4 = main::s1 [phi:main::@2->printf_str#0] -- pbuz1=pbuc1 + // [70] phi printf_str::s#4 = main::s1 [phi:main::@2->printf_str#0] -- call_phi_near lda #s1 @@ -2857,7 +2857,7 @@ cputln: { // [51] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [52] call cscroll + // [52] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -3020,7 +3020,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [92] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [92] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -3036,7 +3036,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [92] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [92] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -3049,7 +3049,7 @@ cscroll: { // [102] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [102] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [102] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [102] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -3062,7 +3062,7 @@ cscroll: { // [102] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [102] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [102] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [102] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/printf-17.log b/src/test/ref/printf-17.log index 234dffab6..dbf187967 100644 --- a/src/test/ref/printf-17.log +++ b/src/test/ref/printf-17.log @@ -4498,7 +4498,7 @@ __start: { // __start::@1 __b1: // [5] call main - // [16] phi from __start::@1 to main [phi:__start::@1->main] + // [16] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -4579,7 +4579,7 @@ main: { // [17] call snprintf_init // [67] phi from main to snprintf_init [phi:main->snprintf_init] snprintf_init_from_main: - // [67] phi snprintf_init::n#4 = $14 [phi:main->snprintf_init#0] -- vwuz1=vbuc1 + // [67] phi snprintf_init::n#4 = $14 [phi:main->snprintf_init#0] -- call_phi_near lda #<$14 sta.z snprintf_init.n lda #>$14 @@ -4598,7 +4598,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- call_phi_near lda #s @@ -4617,7 +4617,7 @@ main: { // [23] call print // [81] phi from main::@2 to print [phi:main::@2->print] print_from___b2: - // [81] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- pbuz1=pbuc1 + // [81] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- call_phi_near lda #<$400 sta.z screen lda #>$400 @@ -4631,7 +4631,7 @@ main: { // [25] call snprintf_init // [67] phi from main::@3 to snprintf_init [phi:main::@3->snprintf_init] snprintf_init_from___b3: - // [67] phi snprintf_init::n#4 = $14 [phi:main::@3->snprintf_init#0] -- vwuz1=vbuc1 + // [67] phi snprintf_init::n#4 = $14 [phi:main::@3->snprintf_init#0] -- call_phi_near lda #<$14 sta.z snprintf_init.n lda #>$14 @@ -4650,7 +4650,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- call_phi_near lda #s1 @@ -4662,7 +4662,7 @@ main: { // main::@5 __b5: // [29] call printf_string - // [88] phi from main::@5 to printf_string [phi:main::@5->printf_string] + // [88] phi from main::@5 to printf_string [phi:main::@5->printf_string] -- call_phi_near printf_string_from___b5: jsr printf_string jmp __b6 @@ -4683,7 +4683,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- call_phi_near lda #s2 @@ -4702,7 +4702,7 @@ main: { // [37] call print // [81] phi from main::@7 to print [phi:main::@7->print] print_from___b7: - // [81] phi screen#25 = screen#1 [phi:main::@7->print#0] -- register_copy + // [81] phi screen#25 = screen#1 [phi:main::@7->print#0] -- call_phi_near jsr print // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] __b8_from___b7: @@ -4712,7 +4712,7 @@ main: { // [39] call snprintf_init // [67] phi from main::@8 to snprintf_init [phi:main::@8->snprintf_init] snprintf_init_from___b8: - // [67] phi snprintf_init::n#4 = $14 [phi:main::@8->snprintf_init#0] -- vwuz1=vbuc1 + // [67] phi snprintf_init::n#4 = $14 [phi:main::@8->snprintf_init#0] -- call_phi_near lda #<$14 sta.z snprintf_init.n lda #>$14 @@ -4731,7 +4731,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- call_phi_near lda #s1 @@ -4745,7 +4745,7 @@ main: { // [43] call printf_sint // [92] phi from main::@10 to printf_sint [phi:main::@10->printf_sint] printf_sint_from___b10: - // [92] phi printf_sint::value#3 = 3 [phi:main::@10->printf_sint#0] -- vwsz1=vbsc1 + // [92] phi printf_sint::value#3 = 3 [phi:main::@10->printf_sint#0] -- call_phi_near lda #<3 sta.z printf_sint.value lda #>3 @@ -4764,7 +4764,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- call_phi_near lda #s4 @@ -4776,7 +4776,7 @@ main: { // main::@12 __b12: // [47] call printf_uint - // [103] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] + // [103] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] -- call_phi_near printf_uint_from___b12: jsr printf_uint // [48] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -4792,7 +4792,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- call_phi_near lda #s5 @@ -4811,7 +4811,7 @@ main: { // [53] call print // [81] phi from main::@14 to print [phi:main::@14->print] print_from___b14: - // [81] phi screen#25 = screen#1 [phi:main::@14->print#0] -- register_copy + // [81] phi screen#25 = screen#1 [phi:main::@14->print#0] -- call_phi_near jsr print // [54] phi from main::@14 to main::@15 [phi:main::@14->main::@15] __b15_from___b14: @@ -4821,7 +4821,7 @@ main: { // [55] call snprintf_init // [67] phi from main::@15 to snprintf_init [phi:main::@15->snprintf_init] snprintf_init_from___b15: - // [67] phi snprintf_init::n#4 = 6 [phi:main::@15->snprintf_init#0] -- vwuz1=vbuc1 + // [67] phi snprintf_init::n#4 = 6 [phi:main::@15->snprintf_init#0] -- call_phi_near lda #<6 sta.z snprintf_init.n lda #>6 @@ -4840,7 +4840,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- call_phi_near lda #s6 @@ -4854,7 +4854,7 @@ main: { // [59] call printf_sint // [92] phi from main::@17 to printf_sint [phi:main::@17->printf_sint] printf_sint_from___b17: - // [92] phi printf_sint::value#3 = $56ce [phi:main::@17->printf_sint#0] -- vwsz1=vwsc1 + // [92] phi printf_sint::value#3 = $56ce [phi:main::@17->printf_sint#0] -- call_phi_near lda #<$56ce sta.z printf_sint.value lda #>$56ce @@ -4873,7 +4873,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- call_phi_near lda #s5 @@ -4892,7 +4892,7 @@ main: { // [65] call print // [81] phi from main::@19 to print [phi:main::@19->print] print_from___b19: - // [81] phi screen#25 = screen#1 [phi:main::@19->print#0] -- register_copy + // [81] phi screen#25 = screen#1 [phi:main::@19->print#0] -- call_phi_near jsr print jmp __breturn // main::@return @@ -5051,7 +5051,7 @@ printf_string: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- call_phi_near lda #main.str @@ -5101,7 +5101,7 @@ printf_sint: { // [109] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] utoa_from___b2: // [109] phi utoa::value#10 = utoa::value#1 [phi:printf_sint::@2->utoa#0] -- register_copy - // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- vbuxx=vbuc1 + // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- call_phi_near ldx #DECIMAL jsr utoa jmp __b3 @@ -5129,7 +5129,7 @@ printf_sint: { // [140] phi printf_number_buffer::format_justify_left#10 = 0 [phi:printf_sint::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #0 sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#2 = 0 [phi:printf_sint::@3->printf_number_buffer#5] -- vbuxx=vbuc1 + // [140] phi printf_number_buffer::format_min_length#2 = 0 [phi:printf_sint::@3->printf_number_buffer#5] -- call_phi_near ldx #0 jsr printf_number_buffer jmp __breturn @@ -5164,7 +5164,7 @@ printf_uint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- vbuxx=vbuc1 + // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- call_phi_near ldx #HEXADECIMAL jsr utoa jmp __b2 @@ -5192,7 +5192,7 @@ printf_uint: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#2 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [140] phi printf_number_buffer::format_min_length#2 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -5397,7 +5397,7 @@ utoa: { // [134] utoa_append::value#0 = utoa::value#3 // [135] utoa_append::sub#0 = utoa::digit_value#0 // [136] call utoa_append - // [181] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] + // [181] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] -- call_phi_near utoa_append_from___b10: jsr utoa_append // [137] utoa_append::return#0 = utoa_append::value#2 @@ -5439,7 +5439,7 @@ printf_number_buffer: { // printf_number_buffer::@6 __b6: // [143] call strlen - // [188] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] + // [188] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] -- call_phi_near strlen_from___b6: jsr strlen // [144] strlen::return#2 = strlen::len#2 @@ -5523,7 +5523,7 @@ printf_number_buffer: { // [194] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy + // [194] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- call_phi_near jsr printf_padding jmp __b2 // printf_number_buffer::@2 @@ -5568,7 +5568,7 @@ printf_number_buffer: { // [194] phi printf_padding::pad#7 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy + // [194] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- call_phi_near jsr printf_padding jmp __b4 // printf_number_buffer::@4 @@ -5582,7 +5582,7 @@ printf_number_buffer: { // printf_number_buffer::@11 __b11: // [171] call strupr - // [202] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] + // [202] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] -- call_phi_near strupr_from___b11: jsr strupr jmp __b5 @@ -5593,7 +5593,7 @@ printf_number_buffer: { // [72] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] printf_str_from___b5: // [72] phi printf_str::putc#12 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [72] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- call_phi_near lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -5632,7 +5632,7 @@ printf_number_buffer: { // [194] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy + // [194] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- call_phi_near jsr printf_padding jmp __breturn // printf_number_buffer::@return @@ -5833,7 +5833,7 @@ strupr: { // [206] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [207] call toupper + // [207] call toupper -- call_phi_near jsr toupper // [208] toupper::return#3 = toupper::return#2 jmp __b3 @@ -6471,7 +6471,7 @@ __start: { // [4] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [5] call main - // [16] phi from __start::@1 to main [phi:__start::@1->main] + // [16] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [6] return @@ -6546,7 +6546,7 @@ main: { // snprintf(BUF, 20, "hello world! ") // [17] call snprintf_init // [67] phi from main to snprintf_init [phi:main->snprintf_init] - // [67] phi snprintf_init::n#4 = $14 [phi:main->snprintf_init#0] -- vwuz1=vbuc1 + // [67] phi snprintf_init::n#4 = $14 [phi:main->snprintf_init#0] -- call_phi_near lda #<$14 sta.z snprintf_init.n lda #>$14 @@ -6562,7 +6562,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- call_phi_near lda #s @@ -6580,7 +6580,7 @@ main: { // print(BUF) // [23] call print // [81] phi from main::@2 to print [phi:main::@2->print] - // [81] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- pbuz1=pbuc1 + // [81] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- call_phi_near lda #<$400 sta.z screen lda #>$400 @@ -6591,7 +6591,7 @@ main: { // snprintf(BUF, 20, "hello %s%c ", "world", '!') // [25] call snprintf_init // [67] phi from main::@3 to snprintf_init [phi:main::@3->snprintf_init] - // [67] phi snprintf_init::n#4 = $14 [phi:main::@3->snprintf_init#0] -- vwuz1=vbuc1 + // [67] phi snprintf_init::n#4 = $14 [phi:main::@3->snprintf_init#0] -- call_phi_near lda #<$14 sta.z snprintf_init.n lda #>$14 @@ -6607,7 +6607,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- call_phi_near lda #s1 @@ -6617,7 +6617,7 @@ main: { // main::@5 // snprintf(BUF, 20, "hello %s%c ", "world", '!') // [29] call printf_string - // [88] phi from main::@5 to printf_string [phi:main::@5->printf_string] + // [88] phi from main::@5 to printf_string [phi:main::@5->printf_string] -- call_phi_near jsr printf_string // main::@6 // snprintf(BUF, 20, "hello %s%c ", "world", '!') @@ -6635,7 +6635,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- call_phi_near lda #s2 @@ -6653,14 +6653,14 @@ main: { // print(BUF) // [37] call print // [81] phi from main::@7 to print [phi:main::@7->print] - // [81] phi screen#25 = screen#1 [phi:main::@7->print#0] -- register_copy + // [81] phi screen#25 = screen#1 [phi:main::@7->print#0] -- call_phi_near jsr print // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 // snprintf(BUF, 20, "hello %d+%x! ", 3,11) // [39] call snprintf_init // [67] phi from main::@8 to snprintf_init [phi:main::@8->snprintf_init] - // [67] phi snprintf_init::n#4 = $14 [phi:main::@8->snprintf_init#0] -- vwuz1=vbuc1 + // [67] phi snprintf_init::n#4 = $14 [phi:main::@8->snprintf_init#0] -- call_phi_near lda #<$14 sta.z snprintf_init.n lda #>$14 @@ -6676,7 +6676,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- call_phi_near lda #s1 @@ -6687,7 +6687,7 @@ main: { // snprintf(BUF, 20, "hello %d+%x! ", 3,11) // [43] call printf_sint // [92] phi from main::@10 to printf_sint [phi:main::@10->printf_sint] - // [92] phi printf_sint::value#3 = 3 [phi:main::@10->printf_sint#0] -- vwsz1=vbsc1 + // [92] phi printf_sint::value#3 = 3 [phi:main::@10->printf_sint#0] -- call_phi_near lda #<3 sta.z printf_sint.value lda #>3 @@ -6703,7 +6703,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- call_phi_near lda #s4 @@ -6713,7 +6713,7 @@ main: { // main::@12 // snprintf(BUF, 20, "hello %d+%x! ", 3,11) // [47] call printf_uint - // [103] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] + // [103] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] -- call_phi_near jsr printf_uint // [48] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 @@ -6725,7 +6725,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- call_phi_near lda #s5 @@ -6743,14 +6743,14 @@ main: { // print(BUF) // [53] call print // [81] phi from main::@14 to print [phi:main::@14->print] - // [81] phi screen#25 = screen#1 [phi:main::@14->print#0] -- register_copy + // [81] phi screen#25 = screen#1 [phi:main::@14->print#0] -- call_phi_near jsr print // [54] phi from main::@14 to main::@15 [phi:main::@14->main::@15] // main::@15 // snprintf(BUF, 6, "hi %d! ", 22222) // [55] call snprintf_init // [67] phi from main::@15 to snprintf_init [phi:main::@15->snprintf_init] - // [67] phi snprintf_init::n#4 = 6 [phi:main::@15->snprintf_init#0] -- vwuz1=vbuc1 + // [67] phi snprintf_init::n#4 = 6 [phi:main::@15->snprintf_init#0] -- call_phi_near lda #<6 sta.z snprintf_init.n lda #>6 @@ -6766,7 +6766,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- call_phi_near lda #s6 @@ -6777,7 +6777,7 @@ main: { // snprintf(BUF, 6, "hi %d! ", 22222) // [59] call printf_sint // [92] phi from main::@17 to printf_sint [phi:main::@17->printf_sint] - // [92] phi printf_sint::value#3 = $56ce [phi:main::@17->printf_sint#0] -- vwsz1=vwsc1 + // [92] phi printf_sint::value#3 = $56ce [phi:main::@17->printf_sint#0] -- call_phi_near lda #<$56ce sta.z printf_sint.value lda #>$56ce @@ -6793,7 +6793,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- call_phi_near lda #s5 @@ -6811,7 +6811,7 @@ main: { // print(BUF) // [65] call print // [81] phi from main::@19 to print [phi:main::@19->print] - // [81] phi screen#25 = screen#1 [phi:main::@19->print#0] -- register_copy + // [81] phi screen#25 = screen#1 [phi:main::@19->print#0] -- call_phi_near jsr print // main::@return // } @@ -6963,7 +6963,7 @@ printf_string: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- call_phi_near lda #main.str @@ -7013,7 +7013,7 @@ printf_sint: { // [99] call utoa // [109] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] // [109] phi utoa::value#10 = utoa::value#1 [phi:printf_sint::@2->utoa#0] -- register_copy - // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- vbuxx=vbuc1 + // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- call_phi_near ldx #DECIMAL jsr utoa // printf_sint::@3 @@ -7038,7 +7038,7 @@ printf_sint: { sta.z printf_number_buffer.format_zero_padding // [140] phi printf_number_buffer::format_justify_left#10 = 0 [phi:printf_sint::@3->printf_number_buffer#4] -- vbuz1=vbuc1 sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#2 = 0 [phi:printf_sint::@3->printf_number_buffer#5] -- vbuxx=vbuc1 + // [140] phi printf_number_buffer::format_min_length#2 = 0 [phi:printf_sint::@3->printf_number_buffer#5] -- call_phi_near tax jsr printf_number_buffer // printf_sint::@return @@ -7071,7 +7071,7 @@ printf_uint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- vbuxx=vbuc1 + // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- call_phi_near ldx #HEXADECIMAL jsr utoa // printf_uint::@2 @@ -7097,7 +7097,7 @@ printf_uint: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#2 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [140] phi printf_number_buffer::format_min_length#2 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer // printf_uint::@return @@ -7296,7 +7296,7 @@ utoa: { // [134] utoa_append::value#0 = utoa::value#3 // [135] utoa_append::sub#0 = utoa::digit_value#0 // [136] call utoa_append - // [181] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] + // [181] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] -- call_phi_near jsr utoa_append // utoa_append(buffer++, value, digit_value) // [137] utoa_append::return#0 = utoa_append::value#2 @@ -7336,7 +7336,7 @@ printf_number_buffer: { // printf_number_buffer::@6 // strlen(buffer.digits) // [143] call strlen - // [188] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] + // [188] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] -- call_phi_near jsr strlen // strlen(buffer.digits) // [144] strlen::return#2 = strlen::len#2 @@ -7407,7 +7407,7 @@ printf_number_buffer: { // [194] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy + // [194] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- call_phi_near jsr printf_padding // printf_number_buffer::@2 __b2: @@ -7448,7 +7448,7 @@ printf_number_buffer: { // [194] phi printf_padding::pad#7 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy + // [194] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- call_phi_near jsr printf_padding // printf_number_buffer::@4 __b4: @@ -7460,7 +7460,7 @@ printf_number_buffer: { // printf_number_buffer::@11 // strupr(buffer.digits) // [171] call strupr - // [202] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] + // [202] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] -- call_phi_near jsr strupr // printf_number_buffer::@5 __b5: @@ -7469,7 +7469,7 @@ printf_number_buffer: { // [173] call printf_str // [72] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] // [72] phi printf_str::putc#12 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [72] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 + // [72] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- call_phi_near lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -7503,7 +7503,7 @@ printf_number_buffer: { // [194] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy + // [194] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- call_phi_near jsr printf_padding // printf_number_buffer::@return __breturn: @@ -7696,7 +7696,7 @@ strupr: { // [206] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [207] call toupper + // [207] call toupper -- call_phi_near jsr toupper // [208] toupper::return#3 = toupper::return#2 // strupr::@3 diff --git a/src/test/ref/printf-18.log b/src/test/ref/printf-18.log index ef837a417..03e8f0b22 100644 --- a/src/test/ref/printf-18.log +++ b/src/test/ref/printf-18.log @@ -2389,7 +2389,7 @@ __start: { sta.z __snprintf_buffer lda #>0 sta.z __snprintf_buffer+1 - // [8] call conio_c64_init + // [8] call conio_c64_init -- call_phi_near jsr conio_c64_init // [9] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -2397,7 +2397,7 @@ __start: { // __start::@1 __b1: // [10] call main - // [39] phi from __start::@1 to main [phi:__start::@1->main] + // [39] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -2500,7 +2500,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [25] gotoxy::y#2 = conio_c64_init::line#2 - // [26] call gotoxy + // [26] call gotoxy -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -2541,7 +2541,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [35] call cputln + // [35] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -2553,7 +2553,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [38] call cputln + // [38] call cputln -- call_phi_near jsr cputln jmp __breturn } @@ -2562,7 +2562,7 @@ main: { // [40] call snprintf_init // [87] phi from main to snprintf_init [phi:main->snprintf_init] snprintf_init_from_main: - // [87] phi snprintf_init::s#2 = BUF1 [phi:main->snprintf_init#0] -- pbuz1=pbuc1 + // [87] phi snprintf_init::s#2 = BUF1 [phi:main->snprintf_init#0] -- call_phi_near lda #BUF1 @@ -2581,7 +2581,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 + // [92] phi printf_str::s#8 = main::s [phi:main::@1->printf_str#1] -- call_phi_near lda #s @@ -2600,7 +2600,7 @@ main: { // [46] call snprintf_init // [87] phi from main::@2 to snprintf_init [phi:main::@2->snprintf_init] snprintf_init_from___b2: - // [87] phi snprintf_init::s#2 = BUF2 [phi:main::@2->snprintf_init#0] -- pbuz1=pbuc1 + // [87] phi snprintf_init::s#2 = BUF2 [phi:main::@2->snprintf_init#0] -- call_phi_near lda #BUF2 @@ -2619,7 +2619,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s1 [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 + // [92] phi printf_str::s#8 = main::s1 [phi:main::@3->printf_str#1] -- call_phi_near lda #s1 @@ -2638,7 +2638,7 @@ main: { sta.z printf_string.putc lda #>snputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = main::str [phi:main::@4->printf_string#1] -- pbuz1=pbuc1 + // [101] phi printf_string::str#10 = main::str [phi:main::@4->printf_string#1] -- call_phi_near lda #str @@ -2669,7 +2669,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s2 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 + // [92] phi printf_str::s#8 = main::s2 [phi:main::@5->printf_str#1] -- call_phi_near lda #s2 @@ -2688,7 +2688,7 @@ main: { sta.z printf_string.putc lda #>cputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = BUF1 [phi:main::@6->printf_string#1] -- pbuz1=pbuc1 + // [101] phi printf_string::str#10 = BUF1 [phi:main::@6->printf_string#1] -- call_phi_near lda #BUF1 @@ -2707,7 +2707,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s3 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 + // [92] phi printf_str::s#8 = main::s3 [phi:main::@7->printf_str#1] -- call_phi_near lda #s3 @@ -2726,7 +2726,7 @@ main: { sta.z printf_string.putc lda #>cputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = BUF2 [phi:main::@8->printf_string#1] -- pbuz1=pbuc1 + // [101] phi printf_string::str#10 = BUF2 [phi:main::@8->printf_string#1] -- call_phi_near lda #BUF2 @@ -2745,7 +2745,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s2 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 + // [92] phi printf_str::s#8 = main::s2 [phi:main::@9->printf_str#1] -- call_phi_near lda #s2 @@ -2892,7 +2892,7 @@ cputln: { sta.z conio_cursor_x // [84] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [85] call cscroll + // [85] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -2984,7 +2984,7 @@ printf_string: { // [92] phi from printf_string::@1 to printf_str [phi:printf_string::@1->printf_str] printf_str_from___b1: // [92] phi printf_str::putc#8 = printf_str::putc#0 [phi:printf_string::@1->printf_str#0] -- register_copy - // [92] phi printf_str::s#8 = printf_str::s#1 [phi:printf_string::@1->printf_str#1] -- register_copy + // [92] phi printf_str::s#8 = printf_str::s#1 [phi:printf_string::@1->printf_str#1] -- call_phi_near jsr printf_str jmp __breturn // printf_string::@return @@ -3012,7 +3012,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [119] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [119] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -3031,7 +3031,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [119] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [119] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -3047,7 +3047,7 @@ cscroll: { memset_from___b3: // [129] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [129] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [129] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -3063,7 +3063,7 @@ cscroll: { memset_from___b4: // [129] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [129] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [129] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -3577,12 +3577,12 @@ __start: { sta.z __snprintf_buffer sta.z __snprintf_buffer+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [8] call conio_c64_init + // [8] call conio_c64_init -- call_phi_near jsr conio_c64_init // [9] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [10] call main - // [39] phi from __start::@1 to main [phi:__start::@1->main] + // [39] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [11] return @@ -3675,7 +3675,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [25] gotoxy::y#2 = conio_c64_init::line#2 - // [26] call gotoxy + // [26] call gotoxy -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -3714,7 +3714,7 @@ cputc: { // [34] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [35] call cputln + // [35] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -3725,7 +3725,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [38] call cputln + // [38] call cputln -- call_phi_near jsr cputln rts } @@ -3734,7 +3734,7 @@ main: { // snprintf(BUF1, 20, "hello world!") // [40] call snprintf_init // [87] phi from main to snprintf_init [phi:main->snprintf_init] - // [87] phi snprintf_init::s#2 = BUF1 [phi:main->snprintf_init#0] -- pbuz1=pbuc1 + // [87] phi snprintf_init::s#2 = BUF1 [phi:main->snprintf_init#0] -- call_phi_near lda #BUF1 @@ -3750,7 +3750,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 + // [92] phi printf_str::s#8 = main::s [phi:main::@1->printf_str#1] -- call_phi_near lda #s @@ -3768,7 +3768,7 @@ main: { // snprintf(BUF2, 20, "hello %s%c", "world", '!') // [46] call snprintf_init // [87] phi from main::@2 to snprintf_init [phi:main::@2->snprintf_init] - // [87] phi snprintf_init::s#2 = BUF2 [phi:main::@2->snprintf_init#0] -- pbuz1=pbuc1 + // [87] phi snprintf_init::s#2 = BUF2 [phi:main::@2->snprintf_init#0] -- call_phi_near lda #BUF2 @@ -3784,7 +3784,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s1 [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 + // [92] phi printf_str::s#8 = main::s1 [phi:main::@3->printf_str#1] -- call_phi_near lda #s1 @@ -3800,7 +3800,7 @@ main: { sta.z printf_string.putc lda #>snputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = main::str [phi:main::@4->printf_string#1] -- pbuz1=pbuc1 + // [101] phi printf_string::str#10 = main::str [phi:main::@4->printf_string#1] -- call_phi_near lda #str @@ -3830,7 +3830,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s2 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 + // [92] phi printf_str::s#8 = main::s2 [phi:main::@5->printf_str#1] -- call_phi_near lda #s2 @@ -3846,7 +3846,7 @@ main: { sta.z printf_string.putc lda #>cputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = BUF1 [phi:main::@6->printf_string#1] -- pbuz1=pbuc1 + // [101] phi printf_string::str#10 = BUF1 [phi:main::@6->printf_string#1] -- call_phi_near lda #BUF1 @@ -3862,7 +3862,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s3 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 + // [92] phi printf_str::s#8 = main::s3 [phi:main::@7->printf_str#1] -- call_phi_near lda #s3 @@ -3878,7 +3878,7 @@ main: { sta.z printf_string.putc lda #>cputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = BUF2 [phi:main::@8->printf_string#1] -- pbuz1=pbuc1 + // [101] phi printf_string::str#10 = BUF2 [phi:main::@8->printf_string#1] -- call_phi_near lda #BUF2 @@ -3894,7 +3894,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s2 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 + // [92] phi printf_str::s#8 = main::s2 [phi:main::@9->printf_str#1] -- call_phi_near lda #s2 @@ -4043,7 +4043,7 @@ cputln: { // [84] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [85] call cscroll + // [85] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -4131,7 +4131,7 @@ printf_string: { // [104] call printf_str // [92] phi from printf_string::@1 to printf_str [phi:printf_string::@1->printf_str] // [92] phi printf_str::putc#8 = printf_str::putc#0 [phi:printf_string::@1->printf_str#0] -- register_copy - // [92] phi printf_str::s#8 = printf_str::s#1 [phi:printf_string::@1->printf_str#1] -- register_copy + // [92] phi printf_str::s#8 = printf_str::s#1 [phi:printf_string::@1->printf_str#1] -- call_phi_near jsr printf_str // printf_string::@return // } @@ -4156,7 +4156,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [119] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [119] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -4172,7 +4172,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [119] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [119] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -4185,7 +4185,7 @@ cscroll: { // [129] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [129] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [129] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [129] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -4198,7 +4198,7 @@ cscroll: { // [129] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [129] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [129] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [129] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/printf-19.log b/src/test/ref/printf-19.log index a8ac45c87..df40a64fe 100644 --- a/src/test/ref/printf-19.log +++ b/src/test/ref/printf-19.log @@ -5428,7 +5428,7 @@ __start: { // __start::@1 __b1: // [5] call main - // [16] phi from __start::@1 to main [phi:__start::@1->main] + // [16] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -5506,7 +5506,7 @@ snputc: { } // main main: { - // [17] call snprintf_init + // [17] call snprintf_init -- call_phi_near jsr snprintf_init // [18] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -5521,7 +5521,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- call_phi_near lda #s @@ -5540,7 +5540,7 @@ main: { // [23] call print // [80] phi from main::@2 to print [phi:main::@2->print] print_from___b2: - // [80] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- pbuz1=pbuc1 + // [80] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- call_phi_near lda #<$400 sta.z screen lda #>$400 @@ -5551,7 +5551,7 @@ main: { jmp __b3 // main::@3 __b3: - // [25] call snprintf_init + // [25] call snprintf_init -- call_phi_near jsr snprintf_init // [26] phi from main::@3 to main::@4 [phi:main::@3->main::@4] __b4_from___b3: @@ -5566,7 +5566,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- call_phi_near lda #s1 @@ -5578,7 +5578,7 @@ main: { // main::@5 __b5: // [29] call printf_string - // [87] phi from main::@5 to printf_string [phi:main::@5->printf_string] + // [87] phi from main::@5 to printf_string [phi:main::@5->printf_string] -- call_phi_near printf_string_from___b5: jsr printf_string jmp __b6 @@ -5599,7 +5599,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- call_phi_near lda #s2 @@ -5618,14 +5618,14 @@ main: { // [37] call print // [80] phi from main::@7 to print [phi:main::@7->print] print_from___b7: - // [80] phi screen#25 = screen#1 [phi:main::@7->print#0] -- register_copy + // [80] phi screen#25 = screen#1 [phi:main::@7->print#0] -- call_phi_near jsr print // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] __b8_from___b7: jmp __b8 // main::@8 __b8: - // [39] call snprintf_init + // [39] call snprintf_init -- call_phi_near jsr snprintf_init // [40] phi from main::@8 to main::@9 [phi:main::@8->main::@9] __b9_from___b8: @@ -5640,7 +5640,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- call_phi_near lda #s1 @@ -5651,7 +5651,7 @@ main: { jmp __b10 // main::@10 __b10: - // [43] call printf_sint + // [43] call printf_sint -- call_phi_near jsr printf_sint // [44] phi from main::@10 to main::@11 [phi:main::@10->main::@11] __b11_from___b10: @@ -5666,7 +5666,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- call_phi_near lda #s4 @@ -5678,7 +5678,7 @@ main: { // main::@12 __b12: // [47] call printf_uint - // [97] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] + // [97] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] -- call_phi_near printf_uint_from___b12: jsr printf_uint // [48] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -5694,7 +5694,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- call_phi_near lda #s5 @@ -5713,14 +5713,14 @@ main: { // [53] call print // [80] phi from main::@14 to print [phi:main::@14->print] print_from___b14: - // [80] phi screen#25 = screen#1 [phi:main::@14->print#0] -- register_copy + // [80] phi screen#25 = screen#1 [phi:main::@14->print#0] -- call_phi_near jsr print // [54] phi from main::@14 to main::@15 [phi:main::@14->main::@15] __b15_from___b14: jmp __b15 // main::@15 __b15: - // [55] call snprintf_init + // [55] call snprintf_init -- call_phi_near jsr snprintf_init // [56] phi from main::@15 to main::@16 [phi:main::@15->main::@16] __b16_from___b15: @@ -5735,7 +5735,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- call_phi_near lda #s6 @@ -5746,7 +5746,7 @@ main: { jmp __b17 // main::@17 __b17: - // [59] call printf_slong + // [59] call printf_slong -- call_phi_near jsr printf_slong // [60] phi from main::@17 to main::@18 [phi:main::@17->main::@18] __b18_from___b17: @@ -5761,7 +5761,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- call_phi_near lda #s5 @@ -5780,7 +5780,7 @@ main: { // [65] call print // [80] phi from main::@19 to print [phi:main::@19->print] print_from___b19: - // [80] phi screen#25 = screen#1 [phi:main::@19->print#0] -- register_copy + // [80] phi screen#25 = screen#1 [phi:main::@19->print#0] -- call_phi_near jsr print jmp __breturn // main::@return @@ -5938,7 +5938,7 @@ printf_string: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- call_phi_near lda #main.str @@ -5979,7 +5979,7 @@ printf_sint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@1->utoa#1] -- vbuxx=vbuc1 + // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@1->utoa#1] -- call_phi_near ldx #DECIMAL jsr utoa jmp __b2 @@ -6007,7 +6007,7 @@ printf_sint: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_sint::format_justify_left#0 [phi:printf_sint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_sint::format_min_length#0 [phi:printf_sint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [140] phi printf_number_buffer::format_min_length#3 = printf_sint::format_min_length#0 [phi:printf_sint::@2->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -6042,7 +6042,7 @@ printf_uint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- vbuxx=vbuc1 + // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- call_phi_near ldx #HEXADECIMAL jsr utoa jmp __b2 @@ -6070,7 +6070,7 @@ printf_uint: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [140] phi printf_number_buffer::format_min_length#3 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -6101,7 +6101,7 @@ printf_slong: { // printf_slong::@1 __b1: // [105] call ultoa - // [181] phi from printf_slong::@1 to ultoa [phi:printf_slong::@1->ultoa] + // [181] phi from printf_slong::@1 to ultoa [phi:printf_slong::@1->ultoa] -- call_phi_near ultoa_from___b1: jsr ultoa jmp __b2 @@ -6129,7 +6129,7 @@ printf_slong: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_slong::format_justify_left#0 [phi:printf_slong::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_slong::format_min_length#0 [phi:printf_slong::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [140] phi printf_number_buffer::format_min_length#3 = printf_slong::format_min_length#0 [phi:printf_slong::@2->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -6334,7 +6334,7 @@ utoa: { // [134] utoa_append::value#0 = utoa::value#3 // [135] utoa_append::sub#0 = utoa::digit_value#0 // [136] call utoa_append - // [202] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] + // [202] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] -- call_phi_near utoa_append_from___b10: jsr utoa_append // [137] utoa_append::return#0 = utoa_append::value#2 @@ -6376,7 +6376,7 @@ printf_number_buffer: { // printf_number_buffer::@6 __b6: // [143] call strlen - // [209] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] + // [209] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] -- call_phi_near strlen_from___b6: jsr strlen // [144] strlen::return#2 = strlen::len#2 @@ -6460,7 +6460,7 @@ printf_number_buffer: { // [215] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy + // [215] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- call_phi_near jsr printf_padding jmp __b2 // printf_number_buffer::@2 @@ -6505,7 +6505,7 @@ printf_number_buffer: { // [215] phi printf_padding::pad#7 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy + // [215] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- call_phi_near jsr printf_padding jmp __b4 // printf_number_buffer::@4 @@ -6519,7 +6519,7 @@ printf_number_buffer: { // printf_number_buffer::@11 __b11: // [171] call strupr - // [223] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] + // [223] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] -- call_phi_near strupr_from___b11: jsr strupr jmp __b5 @@ -6530,7 +6530,7 @@ printf_number_buffer: { // [71] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] printf_str_from___b5: // [71] phi printf_str::putc#12 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [71] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- call_phi_near lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -6569,7 +6569,7 @@ printf_number_buffer: { // [215] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy + // [215] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- call_phi_near jsr printf_padding jmp __breturn // printf_number_buffer::@return @@ -6707,7 +6707,7 @@ ultoa: { // [196] ultoa_append::value#0 = ultoa::value#2 // [197] ultoa_append::sub#0 = ultoa::digit_value#0 // [198] call ultoa_append - // [233] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] + // [233] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] -- call_phi_near ultoa_append_from___b5: jsr ultoa_append // [199] ultoa_append::return#0 = ultoa_append::value#2 @@ -6918,7 +6918,7 @@ strupr: { // [227] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [228] call toupper + // [228] call toupper -- call_phi_near jsr toupper // [229] toupper::return#3 = toupper::return#2 jmp __b3 @@ -7723,7 +7723,7 @@ __start: { // [4] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [5] call main - // [16] phi from __start::@1 to main [phi:__start::@1->main] + // [16] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [6] return @@ -7796,7 +7796,7 @@ snputc: { // main main: { // sprintf(BUF, "hello world! ") - // [17] call snprintf_init + // [17] call snprintf_init -- call_phi_near jsr snprintf_init // [18] phi from main to main::@1 [phi:main->main::@1] // main::@1 @@ -7808,7 +7808,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- call_phi_near lda #s @@ -7826,7 +7826,7 @@ main: { // print(BUF) // [23] call print // [80] phi from main::@2 to print [phi:main::@2->print] - // [80] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- pbuz1=pbuc1 + // [80] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- call_phi_near lda #<$400 sta.z screen lda #>$400 @@ -7835,7 +7835,7 @@ main: { // [24] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // sprintf(BUF, "hello %s%c ", "world", '!') - // [25] call snprintf_init + // [25] call snprintf_init -- call_phi_near jsr snprintf_init // [26] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 @@ -7847,7 +7847,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- call_phi_near lda #s1 @@ -7857,7 +7857,7 @@ main: { // main::@5 // sprintf(BUF, "hello %s%c ", "world", '!') // [29] call printf_string - // [87] phi from main::@5 to printf_string [phi:main::@5->printf_string] + // [87] phi from main::@5 to printf_string [phi:main::@5->printf_string] -- call_phi_near jsr printf_string // main::@6 // sprintf(BUF, "hello %s%c ", "world", '!') @@ -7875,7 +7875,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- call_phi_near lda #s2 @@ -7893,12 +7893,12 @@ main: { // print(BUF) // [37] call print // [80] phi from main::@7 to print [phi:main::@7->print] - // [80] phi screen#25 = screen#1 [phi:main::@7->print#0] -- register_copy + // [80] phi screen#25 = screen#1 [phi:main::@7->print#0] -- call_phi_near jsr print // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 // sprintf(BUF, "hello %d+%x! ", 3,11) - // [39] call snprintf_init + // [39] call snprintf_init -- call_phi_near jsr snprintf_init // [40] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 @@ -7910,7 +7910,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- call_phi_near lda #s1 @@ -7919,7 +7919,7 @@ main: { // [42] phi from main::@9 to main::@10 [phi:main::@9->main::@10] // main::@10 // sprintf(BUF, "hello %d+%x! ", 3,11) - // [43] call printf_sint + // [43] call printf_sint -- call_phi_near jsr printf_sint // [44] phi from main::@10 to main::@11 [phi:main::@10->main::@11] // main::@11 @@ -7931,7 +7931,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- call_phi_near lda #s4 @@ -7941,7 +7941,7 @@ main: { // main::@12 // sprintf(BUF, "hello %d+%x! ", 3,11) // [47] call printf_uint - // [97] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] + // [97] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] -- call_phi_near jsr printf_uint // [48] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 @@ -7953,7 +7953,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- call_phi_near lda #s5 @@ -7971,12 +7971,12 @@ main: { // print(BUF) // [53] call print // [80] phi from main::@14 to print [phi:main::@14->print] - // [80] phi screen#25 = screen#1 [phi:main::@14->print#0] -- register_copy + // [80] phi screen#25 = screen#1 [phi:main::@14->print#0] -- call_phi_near jsr print // [54] phi from main::@14 to main::@15 [phi:main::@14->main::@15] // main::@15 // sprintf(BUF, "hi %ld! ", 22222222l) - // [55] call snprintf_init + // [55] call snprintf_init -- call_phi_near jsr snprintf_init // [56] phi from main::@15 to main::@16 [phi:main::@15->main::@16] // main::@16 @@ -7988,7 +7988,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- call_phi_near lda #s6 @@ -7997,7 +7997,7 @@ main: { // [58] phi from main::@16 to main::@17 [phi:main::@16->main::@17] // main::@17 // sprintf(BUF, "hi %ld! ", 22222222l) - // [59] call printf_slong + // [59] call printf_slong -- call_phi_near jsr printf_slong // [60] phi from main::@17 to main::@18 [phi:main::@17->main::@18] // main::@18 @@ -8009,7 +8009,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- call_phi_near lda #s5 @@ -8027,7 +8027,7 @@ main: { // print(BUF) // [65] call print // [80] phi from main::@19 to print [phi:main::@19->print] - // [80] phi screen#25 = screen#1 [phi:main::@19->print#0] -- register_copy + // [80] phi screen#25 = screen#1 [phi:main::@19->print#0] -- call_phi_near jsr print // main::@return // } @@ -8178,7 +8178,7 @@ printf_string: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- call_phi_near lda #main.str @@ -8216,7 +8216,7 @@ printf_sint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@1->utoa#1] -- vbuxx=vbuc1 + // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@1->utoa#1] -- call_phi_near ldx #DECIMAL jsr utoa // printf_sint::@2 @@ -8242,7 +8242,7 @@ printf_sint: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_sint::format_justify_left#0 [phi:printf_sint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_sint::format_min_length#0 [phi:printf_sint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [140] phi printf_number_buffer::format_min_length#3 = printf_sint::format_min_length#0 [phi:printf_sint::@2->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer // printf_sint::@return @@ -8275,7 +8275,7 @@ printf_uint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- vbuxx=vbuc1 + // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- call_phi_near ldx #HEXADECIMAL jsr utoa // printf_uint::@2 @@ -8301,7 +8301,7 @@ printf_uint: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [140] phi printf_number_buffer::format_min_length#3 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer // printf_uint::@return @@ -8330,7 +8330,7 @@ printf_slong: { // printf_slong::@1 // ultoa(uvalue, printf_buffer.digits, format.radix) // [105] call ultoa - // [181] phi from printf_slong::@1 to ultoa [phi:printf_slong::@1->ultoa] + // [181] phi from printf_slong::@1 to ultoa [phi:printf_slong::@1->ultoa] -- call_phi_near jsr ultoa // printf_slong::@2 // printf_number_buffer(putc, printf_buffer, format) @@ -8355,7 +8355,7 @@ printf_slong: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_slong::format_justify_left#0 [phi:printf_slong::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_slong::format_min_length#0 [phi:printf_slong::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [140] phi printf_number_buffer::format_min_length#3 = printf_slong::format_min_length#0 [phi:printf_slong::@2->printf_number_buffer#5] -- call_phi_near ldx #format_min_length jsr printf_number_buffer // printf_slong::@return @@ -8554,7 +8554,7 @@ utoa: { // [134] utoa_append::value#0 = utoa::value#3 // [135] utoa_append::sub#0 = utoa::digit_value#0 // [136] call utoa_append - // [202] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] + // [202] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] -- call_phi_near jsr utoa_append // utoa_append(buffer++, value, digit_value) // [137] utoa_append::return#0 = utoa_append::value#2 @@ -8594,7 +8594,7 @@ printf_number_buffer: { // printf_number_buffer::@6 // strlen(buffer.digits) // [143] call strlen - // [209] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] + // [209] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] -- call_phi_near jsr strlen // strlen(buffer.digits) // [144] strlen::return#2 = strlen::len#2 @@ -8665,7 +8665,7 @@ printf_number_buffer: { // [215] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy + // [215] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- call_phi_near jsr printf_padding // printf_number_buffer::@2 __b2: @@ -8706,7 +8706,7 @@ printf_number_buffer: { // [215] phi printf_padding::pad#7 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy + // [215] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- call_phi_near jsr printf_padding // printf_number_buffer::@4 __b4: @@ -8718,7 +8718,7 @@ printf_number_buffer: { // printf_number_buffer::@11 // strupr(buffer.digits) // [171] call strupr - // [223] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] + // [223] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] -- call_phi_near jsr strupr // printf_number_buffer::@5 __b5: @@ -8727,7 +8727,7 @@ printf_number_buffer: { // [173] call printf_str // [71] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] // [71] phi printf_str::putc#12 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [71] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 + // [71] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- call_phi_near lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -8761,7 +8761,7 @@ printf_number_buffer: { // [215] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy + // [215] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- call_phi_near jsr printf_padding // printf_number_buffer::@return __breturn: @@ -8897,7 +8897,7 @@ ultoa: { // [196] ultoa_append::value#0 = ultoa::value#2 // [197] ultoa_append::sub#0 = ultoa::digit_value#0 // [198] call ultoa_append - // [233] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] + // [233] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] -- call_phi_near jsr ultoa_append // ultoa_append(buffer++, value, digit_value) // [199] ultoa_append::return#0 = ultoa_append::value#2 @@ -9099,7 +9099,7 @@ strupr: { // [227] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [228] call toupper + // [228] call toupper -- call_phi_near jsr toupper // [229] toupper::return#3 = toupper::return#2 // strupr::@3 diff --git a/src/test/ref/printmsg.log b/src/test/ref/printmsg.log index 292681b07..abad22ec3 100644 --- a/src/test/ref/printmsg.log +++ b/src/test/ref/printmsg.log @@ -531,7 +531,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [13] phi print_str::str#7 = msg [phi:main->print_str#1] -- pbuz1=pbuc1 + // [13] phi print_str::str#7 = msg [phi:main->print_str#1] -- call_phi_near lda #msg @@ -545,7 +545,7 @@ main: { // [3] call print_ln // [20] phi from main::@1 to print_ln [phi:main::@1->print_ln] print_ln_from___b1: - // [20] phi print_line_cursor#18 = print_screen#0 [phi:main::@1->print_ln#0] -- pbuz1=pbuc1 + // [20] phi print_line_cursor#18 = print_screen#0 [phi:main::@1->print_ln#0] -- call_phi_near lda #print_screen @@ -563,7 +563,7 @@ main: { // [13] phi from main::@2 to print_str [phi:main::@2->print_str] print_str_from___b2: // [13] phi print_char_cursor#36 = print_char_cursor#37 [phi:main::@2->print_str#0] -- register_copy - // [13] phi print_str::str#7 = msg2 [phi:main::@2->print_str#1] -- pbuz1=pbuc1 + // [13] phi print_str::str#7 = msg2 [phi:main::@2->print_str#1] -- call_phi_near lda #msg2 @@ -577,7 +577,7 @@ main: { // [7] call print_ln // [20] phi from main::@3 to print_ln [phi:main::@3->print_ln] print_ln_from___b3: - // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@3->print_ln#0] -- register_copy + // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@3->print_ln#0] -- call_phi_near jsr print_ln jmp __b4 // main::@4 @@ -591,7 +591,7 @@ main: { // [13] phi from main::@4 to print_str [phi:main::@4->print_str] print_str_from___b4: // [13] phi print_char_cursor#36 = print_char_cursor#38 [phi:main::@4->print_str#0] -- register_copy - // [13] phi print_str::str#7 = msg3 [phi:main::@4->print_str#1] -- pbuz1=pbuc1 + // [13] phi print_str::str#7 = msg3 [phi:main::@4->print_str#1] -- call_phi_near lda #msg3 @@ -605,7 +605,7 @@ main: { // [11] call print_ln // [20] phi from main::@5 to print_ln [phi:main::@5->print_ln] print_ln_from___b5: - // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@5->print_ln#0] -- register_copy + // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@5->print_ln#0] -- call_phi_near jsr print_ln jmp __breturn // main::@return @@ -641,7 +641,7 @@ print_str: { // [17] print_char::ch#0 = *print_str::str#4 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [18] call print_char + // [18] call print_char -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -825,7 +825,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [13] phi print_str::str#7 = msg [phi:main->print_str#1] -- pbuz1=pbuc1 + // [13] phi print_str::str#7 = msg [phi:main->print_str#1] -- call_phi_near lda #msg @@ -836,7 +836,7 @@ main: { // print_ln() // [3] call print_ln // [20] phi from main::@1 to print_ln [phi:main::@1->print_ln] - // [20] phi print_line_cursor#18 = print_screen#0 [phi:main::@1->print_ln#0] -- pbuz1=pbuc1 + // [20] phi print_line_cursor#18 = print_screen#0 [phi:main::@1->print_ln#0] -- call_phi_near lda #print_screen @@ -852,7 +852,7 @@ main: { // [5] call print_str // [13] phi from main::@2 to print_str [phi:main::@2->print_str] // [13] phi print_char_cursor#36 = print_char_cursor#37 [phi:main::@2->print_str#0] -- register_copy - // [13] phi print_str::str#7 = msg2 [phi:main::@2->print_str#1] -- pbuz1=pbuc1 + // [13] phi print_str::str#7 = msg2 [phi:main::@2->print_str#1] -- call_phi_near lda #msg2 @@ -863,7 +863,7 @@ main: { // print_ln() // [7] call print_ln // [20] phi from main::@3 to print_ln [phi:main::@3->print_ln] - // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@3->print_ln#0] -- register_copy + // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@3->print_ln#0] -- call_phi_near jsr print_ln // main::@4 // [8] print_char_cursor#38 = print_line_cursor#0 -- pbuz1=pbuz2 @@ -875,7 +875,7 @@ main: { // [9] call print_str // [13] phi from main::@4 to print_str [phi:main::@4->print_str] // [13] phi print_char_cursor#36 = print_char_cursor#38 [phi:main::@4->print_str#0] -- register_copy - // [13] phi print_str::str#7 = msg3 [phi:main::@4->print_str#1] -- pbuz1=pbuc1 + // [13] phi print_str::str#7 = msg3 [phi:main::@4->print_str#1] -- call_phi_near lda #msg3 @@ -886,7 +886,7 @@ main: { // print_ln() // [11] call print_ln // [20] phi from main::@5 to print_ln [phi:main::@5->print_ln] - // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@5->print_ln#0] -- register_copy + // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@5->print_ln#0] -- call_phi_near jsr print_ln // main::@return // } @@ -919,7 +919,7 @@ print_str: { // [17] print_char::ch#0 = *print_str::str#4 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [18] call print_char + // [18] call print_char -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/problem-ma-var-overwrite.log b/src/test/ref/problem-ma-var-overwrite.log index d18329c7a..5e3db2880 100644 --- a/src/test/ref/problem-ma-var-overwrite.log +++ b/src/test/ref/problem-ma-var-overwrite.log @@ -252,7 +252,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -267,7 +267,7 @@ main: { sta.z test.videoMem lda.z h1+1 sta.z test.videoMem+1 - // [6] call test + // [6] call test -- call_phi_near jsr test jmp __breturn // main::@return @@ -396,7 +396,7 @@ __start: { sta.z h1+1 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return @@ -410,7 +410,7 @@ main: { sta.z test.videoMem lda.z h1+1 sta.z test.videoMem+1 - // [6] call test + // [6] call test -- call_phi_near jsr test // main::@return // } diff --git a/src/test/ref/problem-negate-const.log b/src/test/ref/problem-negate-const.log index 31fdf120c..95d7df45e 100644 --- a/src/test/ref/problem-negate-const.log +++ b/src/test/ref/problem-negate-const.log @@ -145,7 +145,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call printneg + // [1] call printneg -- call_phi_near jsr printneg jmp __breturn // main::@return @@ -204,7 +204,7 @@ Score: 24 // main main: { // printneg(-4) - // [1] call printneg + // [1] call printneg -- call_phi_near jsr printneg // main::@return // } diff --git a/src/test/ref/problem-struct-inline-parameter-1.log b/src/test/ref/problem-struct-inline-parameter-1.log index 288ce050f..083face16 100644 --- a/src/test/ref/problem-struct-inline-parameter-1.log +++ b/src/test/ref/problem-struct-inline-parameter-1.log @@ -224,7 +224,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call print + // [1] call print -- call_phi_near jsr print jmp __breturn // main::@return @@ -298,7 +298,7 @@ Score: 36 // main main: { // print('c', { '-', '-' } ) - // [1] call print + // [1] call print -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/problem-struct-inline-parameter.log b/src/test/ref/problem-struct-inline-parameter.log index 90545c237..9c2be3a86 100644 --- a/src/test/ref/problem-struct-inline-parameter.log +++ b/src/test/ref/problem-struct-inline-parameter.log @@ -223,7 +223,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call print + // [1] call print -- call_phi_near jsr print jmp __breturn // main::@return @@ -297,7 +297,7 @@ Score: 36 // main main: { // print('c', (struct format){ '-', '-' } ) - // [1] call print + // [1] call print -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/procedure-callingconvention-stack-4.log b/src/test/ref/procedure-callingconvention-stack-4.log index b07b5e8a0..b45d2c468 100644 --- a/src/test/ref/procedure-callingconvention-stack-4.log +++ b/src/test/ref/procedure-callingconvention-stack-4.log @@ -328,7 +328,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] + // [11] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -503,7 +503,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] + // [11] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/procedure-callingconvention-stack-5.log b/src/test/ref/procedure-callingconvention-stack-5.log index 31ccc9f71..dd9548762 100644 --- a/src/test/ref/procedure-callingconvention-stack-5.log +++ b/src/test/ref/procedure-callingconvention-stack-5.log @@ -245,7 +245,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -387,7 +387,7 @@ __start: { sta.z current+1 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/procedure-declare-10.log b/src/test/ref/procedure-declare-10.log index 5f3d5ca17..3218ad121 100644 --- a/src/test/ref/procedure-declare-10.log +++ b/src/test/ref/procedure-declare-10.log @@ -263,7 +263,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call memcpy - // [3] phi from main to memcpy [phi:main->memcpy] + // [3] phi from main to memcpy [phi:main->memcpy] -- call_phi_near memcpy_from_main: jsr memcpy jmp __breturn @@ -400,7 +400,7 @@ Score: 783 main: { // memcpy(SCREEN, STRING, sizeof(STRING)) // [1] call memcpy - // [3] phi from main to memcpy [phi:main->memcpy] + // [3] phi from main to memcpy [phi:main->memcpy] -- call_phi_near jsr memcpy // main::@return // } diff --git a/src/test/ref/procedure-declare-2.log b/src/test/ref/procedure-declare-2.log index 21d1bd4ac..47974ca58 100644 --- a/src/test/ref/procedure-declare-2.log +++ b/src/test/ref/procedure-declare-2.log @@ -257,7 +257,7 @@ main: { sum_from_main: // [10] phi sum::b#2 = 1 [phi:main->sum#0] -- vbuaa=vbuc1 lda #1 - // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- call_phi_near ldx #'a' jsr sum // [2] sum::return#2 = sum::return#0 @@ -272,7 +272,7 @@ main: { sum_from___b1: // [10] phi sum::b#2 = 2 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- call_phi_near ldx #'b' jsr sum // [6] sum::return#3 = sum::return#0 @@ -370,7 +370,7 @@ main: { // [10] phi from main to sum [phi:main->sum] // [10] phi sum::b#2 = 1 [phi:main->sum#0] -- vbuaa=vbuc1 lda #1 - // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- call_phi_near ldx #'a' jsr sum // sum('a', 1) @@ -385,7 +385,7 @@ main: { // [10] phi from main::@1 to sum [phi:main::@1->sum] // [10] phi sum::b#2 = 2 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- call_phi_near ldx #'b' jsr sum // sum('b', 2) diff --git a/src/test/ref/procedure-declare-3.log b/src/test/ref/procedure-declare-3.log index bf558df5c..b5e6d9a40 100644 --- a/src/test/ref/procedure-declare-3.log +++ b/src/test/ref/procedure-declare-3.log @@ -257,7 +257,7 @@ main: { sum_from_main: // [10] phi sum::b#2 = 1 [phi:main->sum#0] -- vbuaa=vbuc1 lda #1 - // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- call_phi_near ldx #'a' jsr sum // [2] sum::return#2 = sum::return#0 @@ -272,7 +272,7 @@ main: { sum_from___b1: // [10] phi sum::b#2 = 2 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- call_phi_near ldx #'b' jsr sum // [6] sum::return#3 = sum::return#0 @@ -370,7 +370,7 @@ main: { // [10] phi from main to sum [phi:main->sum] // [10] phi sum::b#2 = 1 [phi:main->sum#0] -- vbuaa=vbuc1 lda #1 - // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- call_phi_near ldx #'a' jsr sum // sum('a', 1) @@ -385,7 +385,7 @@ main: { // [10] phi from main::@1 to sum [phi:main::@1->sum] // [10] phi sum::b#2 = 2 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- call_phi_near ldx #'b' jsr sum // sum('b', 2) diff --git a/src/test/ref/procedure-declare-4.log b/src/test/ref/procedure-declare-4.log index 15d26e0d7..91a28e0c1 100644 --- a/src/test/ref/procedure-declare-4.log +++ b/src/test/ref/procedure-declare-4.log @@ -257,7 +257,7 @@ main: { sum_from_main: // [10] phi sum::w#2 = 1 [phi:main->sum#0] -- vbuaa=vbuc1 lda #1 - // [10] phi sum::q#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::q#2 = 'a' [phi:main->sum#1] -- call_phi_near ldx #'a' jsr sum // [2] sum::return#2 = sum::return#0 @@ -272,7 +272,7 @@ main: { sum_from___b1: // [10] phi sum::w#2 = 2 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::q#2 = 'b' [phi:main::@1->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::q#2 = 'b' [phi:main::@1->sum#1] -- call_phi_near ldx #'b' jsr sum // [6] sum::return#3 = sum::return#0 @@ -371,7 +371,7 @@ main: { // [10] phi from main to sum [phi:main->sum] // [10] phi sum::w#2 = 1 [phi:main->sum#0] -- vbuaa=vbuc1 lda #1 - // [10] phi sum::q#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::q#2 = 'a' [phi:main->sum#1] -- call_phi_near ldx #'a' jsr sum // sum('a', 1) @@ -386,7 +386,7 @@ main: { // [10] phi from main::@1 to sum [phi:main::@1->sum] // [10] phi sum::w#2 = 2 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::q#2 = 'b' [phi:main::@1->sum#1] -- vbuxx=vbuc1 + // [10] phi sum::q#2 = 'b' [phi:main::@1->sum#1] -- call_phi_near ldx #'b' jsr sum // sum('b', 2) diff --git a/src/test/ref/procedure-declare-5.log b/src/test/ref/procedure-declare-5.log index b7f393e78..cd4778497 100644 --- a/src/test/ref/procedure-declare-5.log +++ b/src/test/ref/procedure-declare-5.log @@ -150,7 +150,7 @@ ASSEMBLER BEFORE OPTIMIZATION main: { .label SCREEN = $400 // [1] call f - // [4] phi from main to f [phi:main->f] + // [4] phi from main to f [phi:main->f] -- call_phi_near f_from_main: jsr f jmp __b1 @@ -217,7 +217,7 @@ main: { .label SCREEN = $400 // f() // [1] call f - // [4] phi from main to f [phi:main->f] + // [4] phi from main to f [phi:main->f] -- call_phi_near jsr f // main::@1 // SCREEN[0] = f() diff --git a/src/test/ref/processor-port-test.log b/src/test/ref/processor-port-test.log index 77456ef24..5e5e887b4 100644 --- a/src/test/ref/processor-port-test.log +++ b/src/test/ref/processor-port-test.log @@ -2507,7 +2507,7 @@ main: { lda #$dd sta IO_RAM // [9] call print_cls - // [64] phi from main to print_cls [phi:main->print_cls] + // [64] phi from main to print_cls [phi:main->print_cls] -- call_phi_near print_cls_from_main: jsr print_cls // [10] phi from main to main::@2 [phi:main->main::@2] @@ -2523,7 +2523,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [67] phi print_str::str#13 = main::str [phi:main::@2->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = main::str [phi:main::@2->print_str#1] -- call_phi_near lda #str @@ -2538,7 +2538,7 @@ main: { // [74] phi from main::@3 to print_ln [phi:main::@3->print_ln] print_ln_from___b3: // [74] phi print_char_cursor#118 = print_char_cursor#1 [phi:main::@3->print_ln#0] -- register_copy - // [74] phi print_line_cursor#69 = print_screen#0 [phi:main::@3->print_ln#1] -- pbuz1=pbuc1 + // [74] phi print_line_cursor#69 = print_screen#0 [phi:main::@3->print_ln#1] -- call_phi_near lda #print_screen @@ -2558,7 +2558,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_RAM_ALL [phi:main::@4->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_RAM_ALL sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@4->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@4->testProcport#2] -- call_phi_near ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [16] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -2575,7 +2575,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_RAM_IO [phi:main::@5->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_RAM_IO sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@5->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@5->testProcport#2] -- call_phi_near ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [18] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -2592,7 +2592,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_RAM_CHARROM [phi:main::@6->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_RAM_CHARROM sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@6->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@6->testProcport#2] -- call_phi_near ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [20] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -2609,7 +2609,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_KERNEL_IO [phi:main::@7->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_KERNEL_IO sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@7->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@7->testProcport#2] -- call_phi_near ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [22] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -2626,7 +2626,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_BASIC_KERNEL_IO [phi:main::@8->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_BASIC_KERNEL_IO sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@8->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@8->testProcport#2] -- call_phi_near ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [24] phi from main::@8 to main::@9 [phi:main::@8->main::@9] @@ -2643,7 +2643,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@9->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = 0 [phi:main::@9->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = 0 [phi:main::@9->testProcport#2] -- call_phi_near ldx #0 jsr testProcport // [26] phi from main::@9 to main::@10 [phi:main::@9->main::@10] @@ -2660,7 +2660,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@10->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@10->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@10->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [28] phi from main::@10 to main::@11 [phi:main::@10->main::@11] @@ -2677,7 +2677,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@11->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@11->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@11->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [30] phi from main::@11 to main::@12 [phi:main::@11->main::@12] @@ -2694,7 +2694,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@12->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@12->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@12->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [32] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -2711,7 +2711,7 @@ main: { // [79] phi testProcport::port#23 = $55 [phi:main::@13->testProcport#1] -- vbuz1=vbuc1 lda #$55 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@13->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@13->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [34] phi from main::@13 to main::@14 [phi:main::@13->main::@14] @@ -2728,7 +2728,7 @@ main: { // [79] phi testProcport::port#23 = $aa [phi:main::@14->testProcport#1] -- vbuz1=vbuc1 lda #$aa sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@14->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@14->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [36] phi from main::@14 to main::@15 [phi:main::@14->main::@15] @@ -2745,7 +2745,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@15->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@15->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@15->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [38] phi from main::@15 to main::@16 [phi:main::@15->main::@16] @@ -2762,7 +2762,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@16->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $55 [phi:main::@16->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $55 [phi:main::@16->testProcport#2] -- call_phi_near ldx #$55 jsr testProcport // [40] phi from main::@16 to main::@17 [phi:main::@16->main::@17] @@ -2779,7 +2779,7 @@ main: { // [79] phi testProcport::port#23 = $55 [phi:main::@17->testProcport#1] -- vbuz1=vbuc1 lda #$55 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $55 [phi:main::@17->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $55 [phi:main::@17->testProcport#2] -- call_phi_near ldx #$55 jsr testProcport // [42] phi from main::@17 to main::@18 [phi:main::@17->main::@18] @@ -2796,7 +2796,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@18->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $55 [phi:main::@18->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $55 [phi:main::@18->testProcport#2] -- call_phi_near ldx #$55 jsr testProcport // [44] phi from main::@18 to main::@19 [phi:main::@18->main::@19] @@ -2813,7 +2813,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@19->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $aa [phi:main::@19->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $aa [phi:main::@19->testProcport#2] -- call_phi_near ldx #$aa jsr testProcport // [46] phi from main::@19 to main::@20 [phi:main::@19->main::@20] @@ -2830,7 +2830,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@20->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $aa [phi:main::@20->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $aa [phi:main::@20->testProcport#2] -- call_phi_near ldx #$aa jsr testProcport // [48] phi from main::@20 to main::@21 [phi:main::@20->main::@21] @@ -2847,7 +2847,7 @@ main: { // [79] phi testProcport::port#23 = $aa [phi:main::@21->testProcport#1] -- vbuz1=vbuc1 lda #$aa sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $aa [phi:main::@21->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $aa [phi:main::@21->testProcport#2] -- call_phi_near ldx #$aa jsr testProcport // [50] phi from main::@21 to main::@22 [phi:main::@21->main::@22] @@ -2864,7 +2864,7 @@ main: { // [79] phi testProcport::port#23 = $d0 [phi:main::@22->testProcport#1] -- vbuz1=vbuc1 lda #$d0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@22->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@22->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [52] phi from main::@22 to main::@23 [phi:main::@22->main::@23] @@ -2881,7 +2881,7 @@ main: { // [79] phi testProcport::port#23 = $55 [phi:main::@23->testProcport#1] -- vbuz1=vbuc1 lda #$55 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@23->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@23->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [54] phi from main::@23 to main::@24 [phi:main::@23->main::@24] @@ -2898,7 +2898,7 @@ main: { // [79] phi testProcport::port#23 = $15 [phi:main::@24->testProcport#1] -- vbuz1=vbuc1 lda #$15 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $17 [phi:main::@24->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $17 [phi:main::@24->testProcport#2] -- call_phi_near ldx #$17 jsr testProcport // [56] phi from main::@24 to main::@25 [phi:main::@24->main::@25] @@ -2915,7 +2915,7 @@ main: { // [79] phi testProcport::port#23 = $15 [phi:main::@25->testProcport#1] -- vbuz1=vbuc1 lda #$15 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $17 [phi:main::@25->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $17 [phi:main::@25->testProcport#2] -- call_phi_near ldx #$17 jsr testProcport // [58] phi from main::@25 to main::@26 [phi:main::@25->main::@26] @@ -2932,7 +2932,7 @@ main: { // [79] phi testProcport::port#23 = $17 [phi:main::@26->testProcport#1] -- vbuz1=vbuc1 lda #$17 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $17 [phi:main::@26->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $17 [phi:main::@26->testProcport#2] -- call_phi_near ldx #$17 jsr testProcport jmp __b27 @@ -2963,7 +2963,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [65] call memset - // [120] phi from print_cls to memset [phi:print_cls->memset] + // [120] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -3004,7 +3004,7 @@ print_str: { // [126] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [126] phi print_char_cursor#66 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [126] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [126] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -3077,7 +3077,7 @@ testProcport: { // [67] phi from testProcport to print_str [phi:testProcport->print_str] print_str_from_testProcport: // [67] phi print_char_cursor#124 = print_char_cursor#126 [phi:testProcport->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str [phi:testProcport->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str [phi:testProcport->print_str#1] -- call_phi_near lda #str @@ -3090,7 +3090,7 @@ testProcport: { // [88] call print_uchar // [130] phi from testProcport::@1 to print_uchar [phi:testProcport::@1->print_uchar] print_uchar_from___b1: - // [130] phi print_uchar::b#8 = print_uchar::b#0 [phi:testProcport::@1->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#0 [phi:testProcport::@1->print_uchar#0] -- call_phi_near jsr print_uchar // [89] phi from testProcport::@1 to testProcport::@2 [phi:testProcport::@1->testProcport::@2] __b2_from___b1: @@ -3101,7 +3101,7 @@ testProcport: { // [67] phi from testProcport::@2 to print_str [phi:testProcport::@2->print_str] print_str_from___b2: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@2->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@2->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@2->print_str#1] -- call_phi_near lda #str1 @@ -3115,7 +3115,7 @@ testProcport: { // [92] call print_uchar // [130] phi from testProcport::@3 to print_uchar [phi:testProcport::@3->print_uchar] print_uchar_from___b3: - // [130] phi print_uchar::b#8 = print_uchar::b#1 [phi:testProcport::@3->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#1 [phi:testProcport::@3->print_uchar#0] -- call_phi_near jsr print_uchar // [93] phi from testProcport::@3 to testProcport::@4 [phi:testProcport::@3->testProcport::@4] __b4_from___b3: @@ -3126,7 +3126,7 @@ testProcport: { // [67] phi from testProcport::@4 to print_str [phi:testProcport::@4->print_str] print_str_from___b4: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@4->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@4->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@4->print_str#1] -- call_phi_near lda #str1 @@ -3140,7 +3140,7 @@ testProcport: { // [96] call print_uchar // [130] phi from testProcport::@5 to print_uchar [phi:testProcport::@5->print_uchar] print_uchar_from___b5: - // [130] phi print_uchar::b#8 = print_uchar::b#2 [phi:testProcport::@5->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#2 [phi:testProcport::@5->print_uchar#0] -- call_phi_near jsr print_uchar // [97] phi from testProcport::@5 to testProcport::@6 [phi:testProcport::@5->testProcport::@6] __b6_from___b5: @@ -3151,7 +3151,7 @@ testProcport: { // [67] phi from testProcport::@6 to print_str [phi:testProcport::@6->print_str] print_str_from___b6: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@6->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@6->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@6->print_str#1] -- call_phi_near lda #str3 @@ -3165,7 +3165,7 @@ testProcport: { // [100] call print_uchar // [130] phi from testProcport::@7 to print_uchar [phi:testProcport::@7->print_uchar] print_uchar_from___b7: - // [130] phi print_uchar::b#8 = print_uchar::b#3 [phi:testProcport::@7->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#3 [phi:testProcport::@7->print_uchar#0] -- call_phi_near jsr print_uchar // [101] phi from testProcport::@7 to testProcport::@8 [phi:testProcport::@7->testProcport::@8] __b8_from___b7: @@ -3176,7 +3176,7 @@ testProcport: { // [67] phi from testProcport::@8 to print_str [phi:testProcport::@8->print_str] print_str_from___b8: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@8->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@8->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@8->print_str#1] -- call_phi_near lda #str3 @@ -3190,7 +3190,7 @@ testProcport: { // [104] call print_uchar // [130] phi from testProcport::@9 to print_uchar [phi:testProcport::@9->print_uchar] print_uchar_from___b9: - // [130] phi print_uchar::b#8 = print_uchar::b#4 [phi:testProcport::@9->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#4 [phi:testProcport::@9->print_uchar#0] -- call_phi_near jsr print_uchar // [105] phi from testProcport::@9 to testProcport::@10 [phi:testProcport::@9->testProcport::@10] __b10_from___b9: @@ -3201,7 +3201,7 @@ testProcport: { // [67] phi from testProcport::@10 to print_str [phi:testProcport::@10->print_str] print_str_from___b10: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@10->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@10->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@10->print_str#1] -- call_phi_near lda #str5 @@ -3215,7 +3215,7 @@ testProcport: { // [108] call print_uchar // [130] phi from testProcport::@11 to print_uchar [phi:testProcport::@11->print_uchar] print_uchar_from___b11: - // [130] phi print_uchar::b#8 = print_uchar::b#5 [phi:testProcport::@11->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#5 [phi:testProcport::@11->print_uchar#0] -- call_phi_near jsr print_uchar // [109] phi from testProcport::@11 to testProcport::@12 [phi:testProcport::@11->testProcport::@12] __b12_from___b11: @@ -3226,7 +3226,7 @@ testProcport: { // [67] phi from testProcport::@12 to print_str [phi:testProcport::@12->print_str] print_str_from___b12: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@12->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@12->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@12->print_str#1] -- call_phi_near lda #str5 @@ -3240,7 +3240,7 @@ testProcport: { // [112] call print_uchar // [130] phi from testProcport::@13 to print_uchar [phi:testProcport::@13->print_uchar] print_uchar_from___b13: - // [130] phi print_uchar::b#8 = print_uchar::b#6 [phi:testProcport::@13->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#6 [phi:testProcport::@13->print_uchar#0] -- call_phi_near jsr print_uchar // [113] phi from testProcport::@13 to testProcport::@14 [phi:testProcport::@13->testProcport::@14] __b14_from___b13: @@ -3251,7 +3251,7 @@ testProcport: { // [67] phi from testProcport::@14 to print_str [phi:testProcport::@14->print_str] print_str_from___b14: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@14->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@14->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@14->print_str#1] -- call_phi_near lda #str5 @@ -3265,7 +3265,7 @@ testProcport: { // [116] call print_uchar // [130] phi from testProcport::@15 to print_uchar [phi:testProcport::@15->print_uchar] print_uchar_from___b15: - // [130] phi print_uchar::b#8 = print_uchar::b#7 [phi:testProcport::@15->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#7 [phi:testProcport::@15->print_uchar#0] -- call_phi_near jsr print_uchar // [117] phi from testProcport::@15 to testProcport::@16 [phi:testProcport::@15->testProcport::@16] __b16_from___b15: @@ -3276,7 +3276,7 @@ testProcport: { // [74] phi from testProcport::@16 to print_ln [phi:testProcport::@16->print_ln] print_ln_from___b16: // [74] phi print_char_cursor#118 = print_char_cursor#67 [phi:testProcport::@16->print_ln#0] -- register_copy - // [74] phi print_line_cursor#69 = print_line_cursor#0 [phi:testProcport::@16->print_ln#1] -- register_copy + // [74] phi print_line_cursor#69 = print_line_cursor#0 [phi:testProcport::@16->print_ln#1] -- call_phi_near jsr print_ln jmp __breturn // testProcport::@return @@ -3377,7 +3377,7 @@ print_uchar: { // [126] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [126] phi print_char_cursor#66 = print_char_cursor#1 [phi:print_uchar->print_char#0] -- register_copy - // [126] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy + // [126] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -3391,7 +3391,7 @@ print_uchar: { // [126] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [126] phi print_char_cursor#66 = print_char_cursor#67 [phi:print_uchar::@1->print_char#0] -- register_copy - // [126] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy + // [126] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -3795,7 +3795,7 @@ main: { sta IO_RAM // print_cls() // [9] call print_cls - // [64] phi from main to print_cls [phi:main->print_cls] + // [64] phi from main to print_cls [phi:main->print_cls] -- call_phi_near jsr print_cls // [10] phi from main to main::@2 [phi:main->main::@2] // main::@2 @@ -3807,7 +3807,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [67] phi print_str::str#13 = main::str [phi:main::@2->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = main::str [phi:main::@2->print_str#1] -- call_phi_near lda #str @@ -3819,7 +3819,7 @@ main: { // [13] call print_ln // [74] phi from main::@3 to print_ln [phi:main::@3->print_ln] // [74] phi print_char_cursor#118 = print_char_cursor#1 [phi:main::@3->print_ln#0] -- register_copy - // [74] phi print_line_cursor#69 = print_screen#0 [phi:main::@3->print_ln#1] -- pbuz1=pbuc1 + // [74] phi print_line_cursor#69 = print_screen#0 [phi:main::@3->print_ln#1] -- call_phi_near lda #print_screen @@ -3836,7 +3836,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_RAM_ALL [phi:main::@4->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_RAM_ALL sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@4->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@4->testProcport#2] -- call_phi_near ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [16] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -3850,7 +3850,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_RAM_IO [phi:main::@5->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_RAM_IO sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@5->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@5->testProcport#2] -- call_phi_near ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [18] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -3864,7 +3864,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_RAM_CHARROM [phi:main::@6->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_RAM_CHARROM sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@6->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@6->testProcport#2] -- call_phi_near ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [20] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -3878,7 +3878,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_KERNEL_IO [phi:main::@7->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_KERNEL_IO sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@7->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@7->testProcport#2] -- call_phi_near ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [22] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -3892,7 +3892,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_BASIC_KERNEL_IO [phi:main::@8->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_BASIC_KERNEL_IO sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@8->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@8->testProcport#2] -- call_phi_near ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [24] phi from main::@8 to main::@9 [phi:main::@8->main::@9] @@ -3905,7 +3905,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = 0 [phi:main::@9->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = 0 [phi:main::@9->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = 0 [phi:main::@9->testProcport#2] -- call_phi_near tax jsr testProcport // [26] phi from main::@9 to main::@10 [phi:main::@9->main::@10] @@ -3918,7 +3918,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = 0 [phi:main::@10->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@10->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@10->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [28] phi from main::@10 to main::@11 [phi:main::@10->main::@11] @@ -3932,7 +3932,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@11->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@11->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@11->testProcport#2] -- call_phi_near tax jsr testProcport // [30] phi from main::@11 to main::@12 [phi:main::@11->main::@12] @@ -3946,7 +3946,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@12->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@12->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@12->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [32] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -3960,7 +3960,7 @@ main: { // [79] phi testProcport::port#23 = $55 [phi:main::@13->testProcport#1] -- vbuz1=vbuc1 lda #$55 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@13->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@13->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [34] phi from main::@13 to main::@14 [phi:main::@13->main::@14] @@ -3974,7 +3974,7 @@ main: { // [79] phi testProcport::port#23 = $aa [phi:main::@14->testProcport#1] -- vbuz1=vbuc1 lda #$aa sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@14->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@14->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [36] phi from main::@14 to main::@15 [phi:main::@14->main::@15] @@ -3987,7 +3987,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = $ff [phi:main::@15->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@15->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@15->testProcport#2] -- call_phi_near tax jsr testProcport // [38] phi from main::@15 to main::@16 [phi:main::@15->main::@16] @@ -4001,7 +4001,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@16->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $55 [phi:main::@16->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $55 [phi:main::@16->testProcport#2] -- call_phi_near ldx #$55 jsr testProcport // [40] phi from main::@16 to main::@17 [phi:main::@16->main::@17] @@ -4014,7 +4014,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = $55 [phi:main::@17->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $55 [phi:main::@17->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $55 [phi:main::@17->testProcport#2] -- call_phi_near tax jsr testProcport // [42] phi from main::@17 to main::@18 [phi:main::@17->main::@18] @@ -4028,7 +4028,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@18->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $55 [phi:main::@18->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $55 [phi:main::@18->testProcport#2] -- call_phi_near ldx #$55 jsr testProcport // [44] phi from main::@18 to main::@19 [phi:main::@18->main::@19] @@ -4042,7 +4042,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@19->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $aa [phi:main::@19->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $aa [phi:main::@19->testProcport#2] -- call_phi_near ldx #$aa jsr testProcport // [46] phi from main::@19 to main::@20 [phi:main::@19->main::@20] @@ -4056,7 +4056,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@20->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $aa [phi:main::@20->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $aa [phi:main::@20->testProcport#2] -- call_phi_near ldx #$aa jsr testProcport // [48] phi from main::@20 to main::@21 [phi:main::@20->main::@21] @@ -4069,7 +4069,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = $aa [phi:main::@21->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $aa [phi:main::@21->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $aa [phi:main::@21->testProcport#2] -- call_phi_near tax jsr testProcport // [50] phi from main::@21 to main::@22 [phi:main::@21->main::@22] @@ -4083,7 +4083,7 @@ main: { // [79] phi testProcport::port#23 = $d0 [phi:main::@22->testProcport#1] -- vbuz1=vbuc1 lda #$d0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@22->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@22->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [52] phi from main::@22 to main::@23 [phi:main::@22->main::@23] @@ -4096,7 +4096,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = $55 [phi:main::@23->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@23->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $ff [phi:main::@23->testProcport#2] -- call_phi_near ldx #$ff jsr testProcport // [54] phi from main::@23 to main::@24 [phi:main::@23->main::@24] @@ -4109,7 +4109,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = $15 [phi:main::@24->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $17 [phi:main::@24->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $17 [phi:main::@24->testProcport#2] -- call_phi_near ldx #$17 jsr testProcport // [56] phi from main::@24 to main::@25 [phi:main::@24->main::@25] @@ -4123,7 +4123,7 @@ main: { // [79] phi testProcport::port#23 = $15 [phi:main::@25->testProcport#1] -- vbuz1=vbuc1 lda #$15 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $17 [phi:main::@25->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $17 [phi:main::@25->testProcport#2] -- call_phi_near ldx #$17 jsr testProcport // [58] phi from main::@25 to main::@26 [phi:main::@25->main::@26] @@ -4136,7 +4136,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = $17 [phi:main::@26->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $17 [phi:main::@26->testProcport#2] -- vbuxx=vbuc1 + // [79] phi testProcport::ddr#23 = $17 [phi:main::@26->testProcport#2] -- call_phi_near tax jsr testProcport // main::@27 @@ -4169,7 +4169,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [65] call memset - // [120] phi from print_cls to memset [phi:print_cls->memset] + // [120] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -4205,7 +4205,7 @@ print_str: { // [72] call print_char // [126] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [126] phi print_char_cursor#66 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [126] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [126] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); @@ -4280,7 +4280,7 @@ testProcport: { // [86] call print_str // [67] phi from testProcport to print_str [phi:testProcport->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#126 [phi:testProcport->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str [phi:testProcport->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str [phi:testProcport->print_str#1] -- call_phi_near lda #str @@ -4291,7 +4291,7 @@ testProcport: { // [87] print_uchar::b#0 = testProcport::ddr#23 // [88] call print_uchar // [130] phi from testProcport::@1 to print_uchar [phi:testProcport::@1->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#0 [phi:testProcport::@1->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#0 [phi:testProcport::@1->print_uchar#0] -- call_phi_near jsr print_uchar // [89] phi from testProcport::@1 to testProcport::@2 [phi:testProcport::@1->testProcport::@2] // testProcport::@2 @@ -4299,7 +4299,7 @@ testProcport: { // [90] call print_str // [67] phi from testProcport::@2 to print_str [phi:testProcport::@2->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@2->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@2->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@2->print_str#1] -- call_phi_near lda #str1 @@ -4311,7 +4311,7 @@ testProcport: { ldx.z port // [92] call print_uchar // [130] phi from testProcport::@3 to print_uchar [phi:testProcport::@3->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#1 [phi:testProcport::@3->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#1 [phi:testProcport::@3->print_uchar#0] -- call_phi_near jsr print_uchar // [93] phi from testProcport::@3 to testProcport::@4 [phi:testProcport::@3->testProcport::@4] // testProcport::@4 @@ -4319,7 +4319,7 @@ testProcport: { // [94] call print_str // [67] phi from testProcport::@4 to print_str [phi:testProcport::@4->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@4->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@4->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@4->print_str#1] -- call_phi_near lda #str1 @@ -4331,7 +4331,7 @@ testProcport: { ldx.z ddr2 // [96] call print_uchar // [130] phi from testProcport::@5 to print_uchar [phi:testProcport::@5->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#2 [phi:testProcport::@5->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#2 [phi:testProcport::@5->print_uchar#0] -- call_phi_near jsr print_uchar // [97] phi from testProcport::@5 to testProcport::@6 [phi:testProcport::@5->testProcport::@6] // testProcport::@6 @@ -4339,7 +4339,7 @@ testProcport: { // [98] call print_str // [67] phi from testProcport::@6 to print_str [phi:testProcport::@6->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@6->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@6->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@6->print_str#1] -- call_phi_near lda #str3 @@ -4351,7 +4351,7 @@ testProcport: { ldx.z PROCPORT_DDR // [100] call print_uchar // [130] phi from testProcport::@7 to print_uchar [phi:testProcport::@7->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#3 [phi:testProcport::@7->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#3 [phi:testProcport::@7->print_uchar#0] -- call_phi_near jsr print_uchar // [101] phi from testProcport::@7 to testProcport::@8 [phi:testProcport::@7->testProcport::@8] // testProcport::@8 @@ -4359,7 +4359,7 @@ testProcport: { // [102] call print_str // [67] phi from testProcport::@8 to print_str [phi:testProcport::@8->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@8->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@8->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@8->print_str#1] -- call_phi_near lda #str3 @@ -4371,7 +4371,7 @@ testProcport: { ldx.z PROCPORT // [104] call print_uchar // [130] phi from testProcport::@9 to print_uchar [phi:testProcport::@9->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#4 [phi:testProcport::@9->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#4 [phi:testProcport::@9->print_uchar#0] -- call_phi_near jsr print_uchar // [105] phi from testProcport::@9 to testProcport::@10 [phi:testProcport::@9->testProcport::@10] // testProcport::@10 @@ -4379,7 +4379,7 @@ testProcport: { // [106] call print_str // [67] phi from testProcport::@10 to print_str [phi:testProcport::@10->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@10->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@10->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@10->print_str#1] -- call_phi_near lda #str5 @@ -4391,7 +4391,7 @@ testProcport: { ldx BASIC_ROM // [108] call print_uchar // [130] phi from testProcport::@11 to print_uchar [phi:testProcport::@11->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#5 [phi:testProcport::@11->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#5 [phi:testProcport::@11->print_uchar#0] -- call_phi_near jsr print_uchar // [109] phi from testProcport::@11 to testProcport::@12 [phi:testProcport::@11->testProcport::@12] // testProcport::@12 @@ -4399,7 +4399,7 @@ testProcport: { // [110] call print_str // [67] phi from testProcport::@12 to print_str [phi:testProcport::@12->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@12->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@12->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@12->print_str#1] -- call_phi_near lda #str5 @@ -4411,7 +4411,7 @@ testProcport: { ldx IO_RAM // [112] call print_uchar // [130] phi from testProcport::@13 to print_uchar [phi:testProcport::@13->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#6 [phi:testProcport::@13->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#6 [phi:testProcport::@13->print_uchar#0] -- call_phi_near jsr print_uchar // [113] phi from testProcport::@13 to testProcport::@14 [phi:testProcport::@13->testProcport::@14] // testProcport::@14 @@ -4419,7 +4419,7 @@ testProcport: { // [114] call print_str // [67] phi from testProcport::@14 to print_str [phi:testProcport::@14->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@14->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@14->print_str#1] -- pbuz1=pbuc1 + // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@14->print_str#1] -- call_phi_near lda #str5 @@ -4431,7 +4431,7 @@ testProcport: { ldx KERNAL_ROM // [116] call print_uchar // [130] phi from testProcport::@15 to print_uchar [phi:testProcport::@15->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#7 [phi:testProcport::@15->print_uchar#0] -- register_copy + // [130] phi print_uchar::b#8 = print_uchar::b#7 [phi:testProcport::@15->print_uchar#0] -- call_phi_near jsr print_uchar // [117] phi from testProcport::@15 to testProcport::@16 [phi:testProcport::@15->testProcport::@16] // testProcport::@16 @@ -4439,7 +4439,7 @@ testProcport: { // [118] call print_ln // [74] phi from testProcport::@16 to print_ln [phi:testProcport::@16->print_ln] // [74] phi print_char_cursor#118 = print_char_cursor#67 [phi:testProcport::@16->print_ln#0] -- register_copy - // [74] phi print_line_cursor#69 = print_line_cursor#0 [phi:testProcport::@16->print_ln#1] -- register_copy + // [74] phi print_line_cursor#69 = print_line_cursor#0 [phi:testProcport::@16->print_ln#1] -- call_phi_near jsr print_ln // testProcport::@return // } @@ -4540,7 +4540,7 @@ print_uchar: { // Table of hexadecimal digits // [126] phi from print_uchar to print_char [phi:print_uchar->print_char] // [126] phi print_char_cursor#66 = print_char_cursor#1 [phi:print_uchar->print_char#0] -- register_copy - // [126] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy + // [126] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -4553,7 +4553,7 @@ print_uchar: { // [136] call print_char // [126] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [126] phi print_char_cursor#66 = print_char_cursor#67 [phi:print_uchar::@1->print_char#0] -- register_copy - // [126] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy + // [126] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/ptrptr-optimize-1.log b/src/test/ref/ptrptr-optimize-1.log index e4fffb39e..467c93875 100644 --- a/src/test/ref/ptrptr-optimize-1.log +++ b/src/test/ref/ptrptr-optimize-1.log @@ -172,7 +172,7 @@ main: { // [1] call sub // [5] phi from main to sub [phi:main->sub] sub_from_main: - // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- vbuaa=vbuc1 + // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- call_phi_near lda #'a' jsr sub // [2] phi from main to main::@1 [phi:main->main::@1] @@ -183,7 +183,7 @@ main: { // [3] call sub // [5] phi from main::@1 to sub [phi:main::@1->sub] sub_from___b1: - // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- vbuaa=vbuc1 + // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- call_phi_near lda #'b' jsr sub jmp __breturn @@ -271,7 +271,7 @@ main: { // sub('a',pscreen) // [1] call sub // [5] phi from main to sub [phi:main->sub] - // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- vbuaa=vbuc1 + // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- call_phi_near lda #'a' jsr sub // [2] phi from main to main::@1 [phi:main->main::@1] @@ -279,7 +279,7 @@ main: { // sub('b',pscreen) // [3] call sub // [5] phi from main::@1 to sub [phi:main::@1->sub] - // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- vbuaa=vbuc1 + // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- call_phi_near lda #'b' jsr sub // main::@return diff --git a/src/test/ref/ptrptr-optimize-2.log b/src/test/ref/ptrptr-optimize-2.log index f569b5aab..112d4cd77 100644 --- a/src/test/ref/ptrptr-optimize-2.log +++ b/src/test/ref/ptrptr-optimize-2.log @@ -172,7 +172,7 @@ main: { // [1] call sub // [5] phi from main to sub [phi:main->sub] sub_from_main: - // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- vbuaa=vbuc1 + // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- call_phi_near lda #'a' jsr sub // [2] phi from main to main::@1 [phi:main->main::@1] @@ -183,7 +183,7 @@ main: { // [3] call sub // [5] phi from main::@1 to sub [phi:main::@1->sub] sub_from___b1: - // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- vbuaa=vbuc1 + // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- call_phi_near lda #'b' jsr sub jmp __breturn @@ -270,7 +270,7 @@ main: { // sub('a',&screen) // [1] call sub // [5] phi from main to sub [phi:main->sub] - // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- vbuaa=vbuc1 + // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- call_phi_near lda #'a' jsr sub // [2] phi from main to main::@1 [phi:main->main::@1] @@ -278,7 +278,7 @@ main: { // sub('b',&screen) // [3] call sub // [5] phi from main::@1 to sub [phi:main::@1->sub] - // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- vbuaa=vbuc1 + // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- call_phi_near lda #'b' jsr sub // main::@return diff --git a/src/test/ref/ptrtest.log b/src/test/ref/ptrtest.log index 42e5fb047..9a333a160 100644 --- a/src/test/ref/ptrtest.log +++ b/src/test/ref/ptrtest.log @@ -519,14 +519,14 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call lvalue + // [1] call lvalue -- call_phi_near jsr lvalue // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: jmp __b1 // main::@1 __b1: - // [3] call rvalue + // [3] call rvalue -- call_phi_near jsr rvalue // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -534,7 +534,7 @@ main: { // main::@2 __b2: // [5] call rvaluevar - // [23] phi from main::@2 to rvaluevar [phi:main::@2->rvaluevar] + // [23] phi from main::@2 to rvaluevar [phi:main::@2->rvaluevar] -- call_phi_near rvaluevar_from___b2: jsr rvaluevar // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -543,7 +543,7 @@ main: { // main::@3 __b3: // [7] call lvaluevar - // [31] phi from main::@3 to lvaluevar [phi:main::@3->lvaluevar] + // [31] phi from main::@3 to lvaluevar [phi:main::@3->lvaluevar] -- call_phi_near lvaluevar_from___b3: jsr lvaluevar jmp __breturn @@ -837,24 +837,24 @@ Score: 1318 // main main: { // lvalue() - // [1] call lvalue + // [1] call lvalue -- call_phi_near jsr lvalue // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // rvalue() - // [3] call rvalue + // [3] call rvalue -- call_phi_near jsr rvalue // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // rvaluevar() // [5] call rvaluevar - // [23] phi from main::@2 to rvaluevar [phi:main::@2->rvaluevar] + // [23] phi from main::@2 to rvaluevar [phi:main::@2->rvaluevar] -- call_phi_near jsr rvaluevar // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // lvaluevar() // [7] call lvaluevar - // [31] phi from main::@3 to lvaluevar [phi:main::@3->lvaluevar] + // [31] phi from main::@3 to lvaluevar [phi:main::@3->lvaluevar] -- call_phi_near jsr lvaluevar // main::@return // } diff --git a/src/test/ref/register-0.log b/src/test/ref/register-0.log index 7b7e77db1..539c7ec51 100644 --- a/src/test/ref/register-0.log +++ b/src/test/ref/register-0.log @@ -183,7 +183,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -196,7 +196,7 @@ main: { // [5] print::ch = 'c' -- vbuz1=vbuc1 lda #'c' sta.z print.ch - // [6] call print + // [6] call print -- call_phi_near jsr print jmp __b1 // main::@1 @@ -204,7 +204,7 @@ main: { // [7] print::ch = 'm' -- vbuz1=vbuc1 lda #'m' sta.z print.ch - // [8] call print + // [8] call print -- call_phi_near jsr print jmp __b2 // main::@2 @@ -212,7 +212,7 @@ main: { // [9] print::ch = 'l' -- vbuz1=vbuc1 lda #'l' sta.z print.ch - // [10] call print + // [10] call print -- call_phi_near jsr print jmp __breturn // main::@return @@ -299,7 +299,7 @@ __start: { sta.z idx // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return @@ -311,21 +311,21 @@ main: { // [5] print::ch = 'c' -- vbuz1=vbuc1 lda #'c' sta.z print.ch - // [6] call print + // [6] call print -- call_phi_near jsr print // main::@1 // print('m') // [7] print::ch = 'm' -- vbuz1=vbuc1 lda #'m' sta.z print.ch - // [8] call print + // [8] call print -- call_phi_near jsr print // main::@2 // print('l') // [9] print::ch = 'l' -- vbuz1=vbuc1 lda #'l' sta.z print.ch - // [10] call print + // [10] call print -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/reserve-zp-global-range.log b/src/test/ref/reserve-zp-global-range.log index 48726c166..8ca16bd1a 100644 --- a/src/test/ref/reserve-zp-global-range.log +++ b/src/test/ref/reserve-zp-global-range.log @@ -198,7 +198,7 @@ main: { __b1: // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 + // [2] call sub1 -- call_phi_near jsr sub1 // [3] sub1::return#0 = sub1::return#1 jmp __b2 @@ -292,7 +292,7 @@ main: { // sub1(i) // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 + // [2] call sub1 -- call_phi_near jsr sub1 // [3] sub1::return#0 = sub1::return#1 // main::@2 diff --git a/src/test/ref/reserve-zp-global.log b/src/test/ref/reserve-zp-global.log index 1c39d5bee..6750f7002 100644 --- a/src/test/ref/reserve-zp-global.log +++ b/src/test/ref/reserve-zp-global.log @@ -198,7 +198,7 @@ main: { __b1: // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 + // [2] call sub1 -- call_phi_near jsr sub1 // [3] sub1::return#0 = sub1::return#1 jmp __b2 @@ -292,7 +292,7 @@ main: { // sub1(i) // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 + // [2] call sub1 -- call_phi_near jsr sub1 // [3] sub1::return#0 = sub1::return#1 // main::@2 diff --git a/src/test/ref/reserve-zp-procedure-1.log b/src/test/ref/reserve-zp-procedure-1.log index 8d61803a7..a4705e225 100644 --- a/src/test/ref/reserve-zp-procedure-1.log +++ b/src/test/ref/reserve-zp-procedure-1.log @@ -198,7 +198,7 @@ main: { __b1: // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 + // [2] call sub1 -- call_phi_near jsr sub1 // [3] sub1::return#0 = sub1::return#1 jmp __b2 @@ -292,7 +292,7 @@ main: { // sub1(i) // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 + // [2] call sub1 -- call_phi_near jsr sub1 // [3] sub1::return#0 = sub1::return#1 // main::@2 diff --git a/src/test/ref/reserve-zp-procedure-2.log b/src/test/ref/reserve-zp-procedure-2.log index 869577f5f..6296a0655 100644 --- a/src/test/ref/reserve-zp-procedure-2.log +++ b/src/test/ref/reserve-zp-procedure-2.log @@ -298,7 +298,7 @@ main: { __b1: // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 + // [2] call sub1 -- call_phi_near jsr sub1 // [3] sub1::return#0 = sub1::return#1 jmp __b2 @@ -310,7 +310,7 @@ main: { sta SCREEN,y // [6] sub2::i#0 = main::i -- vbuxx=vbuz1 ldx.z i - // [7] call sub2 + // [7] call sub2 -- call_phi_near jsr sub2 // [8] sub2::return#0 = sub2::return#1 jmp __b3 @@ -437,7 +437,7 @@ main: { // sub1(i) // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 + // [2] call sub1 -- call_phi_near jsr sub1 // [3] sub1::return#0 = sub1::return#1 // main::@2 @@ -449,7 +449,7 @@ main: { // sub2(i) // [6] sub2::i#0 = main::i -- vbuxx=vbuz1 ldx.z i - // [7] call sub2 + // [7] call sub2 -- call_phi_near jsr sub2 // [8] sub2::return#0 = sub2::return#1 // main::@3 diff --git a/src/test/ref/reserve-zp-procedure-3.log b/src/test/ref/reserve-zp-procedure-3.log index 73b02ba54..25f767086 100644 --- a/src/test/ref/reserve-zp-procedure-3.log +++ b/src/test/ref/reserve-zp-procedure-3.log @@ -198,7 +198,7 @@ main: { __b1: // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 + // [2] call sub1 -- call_phi_near jsr sub1 // [3] sub1::return#0 = sub1::return#1 jmp __b2 @@ -292,7 +292,7 @@ main: { // sub1(i) // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 + // [2] call sub1 -- call_phi_near jsr sub1 // [3] sub1::return#0 = sub1::return#1 // main::@2 diff --git a/src/test/ref/reserve-zp-procedure-4.log b/src/test/ref/reserve-zp-procedure-4.log index 2f13f19d0..bd9d8b75a 100644 --- a/src/test/ref/reserve-zp-procedure-4.log +++ b/src/test/ref/reserve-zp-procedure-4.log @@ -198,7 +198,7 @@ main: { __b1: // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 + // [2] call sub1 -- call_phi_near jsr sub1 // [3] sub1::return#0 = sub1::return#1 jmp __b2 @@ -292,7 +292,7 @@ main: { // sub1(i) // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 + // [2] call sub1 -- call_phi_near jsr sub1 // [3] sub1::return#0 = sub1::return#1 // main::@2 diff --git a/src/test/ref/robozzle64-label-problem.log b/src/test/ref/robozzle64-label-problem.log index 74249a35f..d9ac26394 100644 --- a/src/test/ref/robozzle64-label-problem.log +++ b/src/test/ref/robozzle64-label-problem.log @@ -509,7 +509,7 @@ main: { // [3] call mul8u // [16] phi from main::@1 to mul8u [phi:main::@1->mul8u] mul8u_from___b1: - // [16] phi mul8u::a#6 = mul8u::a#1 [phi:main::@1->mul8u#0] -- register_copy + // [16] phi mul8u::a#6 = mul8u::a#1 [phi:main::@1->mul8u#0] -- call_phi_near jsr mul8u // [4] mul8u::return#2 = mul8u::res#2 jmp __b2 @@ -528,7 +528,7 @@ main: { // [8] call mul8u // [16] phi from main::@2 to mul8u [phi:main::@2->mul8u] mul8u_from___b2: - // [16] phi mul8u::a#6 = mul8u::a#2 [phi:main::@2->mul8u#0] -- register_copy + // [16] phi mul8u::a#6 = mul8u::a#2 [phi:main::@2->mul8u#0] -- call_phi_near jsr mul8u // [9] mul8u::return#3 = mul8u::res#2 jmp __b3 @@ -751,7 +751,7 @@ main: { ldx.z y // [3] call mul8u // [16] phi from main::@1 to mul8u [phi:main::@1->mul8u] - // [16] phi mul8u::a#6 = mul8u::a#1 [phi:main::@1->mul8u#0] -- register_copy + // [16] phi mul8u::a#6 = mul8u::a#1 [phi:main::@1->mul8u#0] -- call_phi_near jsr mul8u // word z1 = mul8u(y,40) // [4] mul8u::return#2 = mul8u::res#2 @@ -770,7 +770,7 @@ main: { ldx.z y // [8] call mul8u // [16] phi from main::@2 to mul8u [phi:main::@2->mul8u] - // [16] phi mul8u::a#6 = mul8u::a#2 [phi:main::@2->mul8u#0] -- register_copy + // [16] phi mul8u::a#6 = mul8u::a#2 [phi:main::@2->mul8u#0] -- call_phi_near jsr mul8u // word z2 = mul8u(y,40) // [9] mul8u::return#3 = mul8u::res#2 diff --git a/src/test/ref/roll-sprite-msb.log b/src/test/ref/roll-sprite-msb.log index 0e330842b..d17638634 100644 --- a/src/test/ref/roll-sprite-msb.log +++ b/src/test/ref/roll-sprite-msb.log @@ -388,7 +388,7 @@ main: { // [2] position_sprite::spriteno#0 = main::s#2 -- vbuz1=vbuxx stx.z position_sprite.spriteno // [3] position_sprite::x#0 = main::xpos#2 - // [4] call position_sprite + // [4] call position_sprite -- call_phi_near jsr position_sprite jmp __b2 // main::@2 @@ -575,7 +575,7 @@ main: { // [2] position_sprite::spriteno#0 = main::s#2 -- vbuz1=vbuxx stx.z position_sprite.spriteno // [3] position_sprite::x#0 = main::xpos#2 - // [4] call position_sprite + // [4] call position_sprite -- call_phi_near jsr position_sprite // main::@2 // xpos += 10 diff --git a/src/test/ref/scan-desire-problem.log b/src/test/ref/scan-desire-problem.log index 1e41f8d2a..618158d3f 100644 --- a/src/test/ref/scan-desire-problem.log +++ b/src/test/ref/scan-desire-problem.log @@ -1413,7 +1413,7 @@ main: { .label y = $14 .label x = $15 // [1] call init - // [15] phi from main to init [phi:main->init] + // [15] phi from main to init [phi:main->init] -- call_phi_near init_from_main: jsr init // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1469,7 +1469,7 @@ main: { // [11] draw_block::x#0 = main::x#2 -- vbuxx=vbuz1 ldx.z x // [12] draw_block::y#0 = main::y#2 - // [13] call draw_block + // [13] call draw_block -- call_phi_near jsr draw_block jmp __b6 // main::@6 @@ -1484,7 +1484,7 @@ main: { // init init: { .const toD0181_return = (>(screen&$3fff)*4)|(>charset)/4&$f - // [16] call init_sprites + // [16] call init_sprites -- call_phi_near jsr init_sprites // [17] phi from init to init::@2 [phi:init->init::@2] __b2_from_init: @@ -1496,7 +1496,7 @@ init: { memset_from___b2: // [66] phi memset::c#4 = 0 [phi:init::@2->memset#0] -- vbuxx=vbuc1 ldx #0 - // [66] phi memset::str#3 = (void *)screen [phi:init::@2->memset#1] -- pvoz1=pvoc1 + // [66] phi memset::str#3 = (void *)screen [phi:init::@2->memset#1] -- call_phi_near lda #screen @@ -1512,7 +1512,7 @@ init: { memset_from___b3: // [66] phi memset::c#4 = BLACK [phi:init::@3->memset#0] -- vbuxx=vbuc1 ldx #BLACK - // [66] phi memset::str#3 = (void *)colors [phi:init::@3->memset#1] -- pvoz1=pvoc1 + // [66] phi memset::str#3 = (void *)colors [phi:init::@3->memset#1] -- call_phi_near lda #colors @@ -1589,7 +1589,7 @@ draw_block: { // [33] mul8u::a#1 = draw_block::y#1 -- vbuxx=vbuaa tax // [34] call mul8u - // [74] phi from draw_block to mul8u [phi:draw_block->mul8u] + // [74] phi from draw_block to mul8u [phi:draw_block->mul8u] -- call_phi_near mul8u_from_draw_block: jsr mul8u // [35] mul8u::return#2 = mul8u::res#2 @@ -2147,7 +2147,7 @@ main: { .label x = $15 // init() // [1] call init - // [15] phi from main to init [phi:main->init] + // [15] phi from main to init [phi:main->init] -- call_phi_near jsr init // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::x#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 @@ -2199,7 +2199,7 @@ main: { // [11] draw_block::x#0 = main::x#2 -- vbuxx=vbuz1 ldx.z x // [12] draw_block::y#0 = main::y#2 - // [13] call draw_block + // [13] call draw_block -- call_phi_near jsr draw_block // main::@6 // for (byte y = 0; y < 9; y++) @@ -2213,7 +2213,7 @@ main: { init: { .const toD0181_return = (>(screen&$3fff)*4)|(>charset)/4&$f // init_sprites() - // [16] call init_sprites + // [16] call init_sprites -- call_phi_near jsr init_sprites // [17] phi from init to init::@2 [phi:init->init::@2] // init::@2 @@ -2222,7 +2222,7 @@ init: { // [66] phi from init::@2 to memset [phi:init::@2->memset] // [66] phi memset::c#4 = 0 [phi:init::@2->memset#0] -- vbuxx=vbuc1 ldx #0 - // [66] phi memset::str#3 = (void *)screen [phi:init::@2->memset#1] -- pvoz1=pvoc1 + // [66] phi memset::str#3 = (void *)screen [phi:init::@2->memset#1] -- call_phi_near lda #screen @@ -2235,7 +2235,7 @@ init: { // [66] phi from init::@3 to memset [phi:init::@3->memset] // [66] phi memset::c#4 = BLACK [phi:init::@3->memset#0] -- vbuxx=vbuc1 ldx #BLACK - // [66] phi memset::str#3 = (void *)colors [phi:init::@3->memset#1] -- pvoz1=pvoc1 + // [66] phi memset::str#3 = (void *)colors [phi:init::@3->memset#1] -- call_phi_near lda #colors @@ -2316,7 +2316,7 @@ draw_block: { // [33] mul8u::a#1 = draw_block::y#1 -- vbuxx=vbuaa tax // [34] call mul8u - // [74] phi from draw_block to mul8u [phi:draw_block->mul8u] + // [74] phi from draw_block to mul8u [phi:draw_block->mul8u] -- call_phi_near jsr mul8u // word z = mul8u(y,40) // [35] mul8u::return#2 = mul8u::res#2 diff --git a/src/test/ref/scrollbig-clobber.log b/src/test/ref/scrollbig-clobber.log index dc0c56401..2b1e27aaa 100644 --- a/src/test/ref/scrollbig-clobber.log +++ b/src/test/ref/scrollbig-clobber.log @@ -325,7 +325,7 @@ main: { jmp __b1 // main::@1 __b1: - // [2] call next_char + // [2] call next_char -- call_phi_near jsr next_char // [3] next_char::return#0 = next_char::return#1 jmp __b2 @@ -481,7 +481,7 @@ main: { // main::@1 __b1: // next_char() - // [2] call next_char + // [2] call next_char -- call_phi_near jsr next_char // [3] next_char::return#0 = next_char::return#1 // main::@2 diff --git a/src/test/ref/semi-struct-1.log b/src/test/ref/semi-struct-1.log index 68e2418bd..cb6b90aba 100644 --- a/src/test/ref/semi-struct-1.log +++ b/src/test/ref/semi-struct-1.log @@ -1524,7 +1524,7 @@ ASSEMBLER BEFORE OPTIMIZATION // Initialize some points and print them main: { // [1] call init_points - // [5] phi from main to init_points [phi:main->init_points] + // [5] phi from main to init_points [phi:main->init_points] -- call_phi_near init_points_from_main: jsr init_points // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1533,7 +1533,7 @@ main: { // main::@1 __b1: // [3] call print_points - // [18] phi from main::@1 to print_points [phi:main::@1->print_points] + // [18] phi from main::@1 to print_points [phi:main::@1->print_points] -- call_phi_near print_points_from___b1: jsr print_points jmp __breturn @@ -1624,7 +1624,7 @@ print_points: { .label point = 9 .label i = 8 // [19] call print_cls - // [37] phi from print_points to print_cls [phi:print_points->print_cls] + // [37] phi from print_points to print_cls [phi:print_points->print_cls] -- call_phi_near print_cls_from_print_points: jsr print_cls // [20] phi from print_points to print_points::@1 [phi:print_points->print_points::@1] @@ -1674,7 +1674,7 @@ print_points: { // [40] phi from print_points::@2 to print_uchar [phi:print_points::@2->print_uchar] print_uchar_from___b2: // [40] phi print_char_cursor#45 = print_char_cursor#48 [phi:print_points::@2->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_points::@2->print_uchar#1] -- register_copy + // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_points::@2->print_uchar#1] -- call_phi_near jsr print_uchar // [26] phi from print_points::@2 to print_points::@4 [phi:print_points::@2->print_points::@4] __b4_from___b2: @@ -1682,7 +1682,7 @@ print_points: { // print_points::@4 __b4: // [27] call print_str - // [48] phi from print_points::@4 to print_str [phi:print_points::@4->print_str] + // [48] phi from print_points::@4 to print_str [phi:print_points::@4->print_str] -- call_phi_near print_str_from___b4: jsr print_str // [28] phi from print_points::@4 to print_points::pointYpos1 [phi:print_points::@4->print_points::pointYpos1] @@ -1701,7 +1701,7 @@ print_points: { // [40] phi from print_points::@3 to print_uchar [phi:print_points::@3->print_uchar] print_uchar_from___b3: // [40] phi print_char_cursor#45 = print_char_cursor#30 [phi:print_points::@3->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_points::@3->print_uchar#1] -- register_copy + // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_points::@3->print_uchar#1] -- call_phi_near jsr print_uchar // [31] phi from print_points::@3 to print_points::@5 [phi:print_points::@3->print_points::@5] __b5_from___b3: @@ -1709,7 +1709,7 @@ print_points: { // print_points::@5 __b5: // [32] call print_ln - // [55] phi from print_points::@5 to print_ln [phi:print_points::@5->print_ln] + // [55] phi from print_points::@5 to print_ln [phi:print_points::@5->print_ln] -- call_phi_near print_ln_from___b5: jsr print_ln jmp __b6 @@ -1748,7 +1748,7 @@ print_points: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [38] call memset - // [60] phi from print_cls to memset [phi:print_cls->memset] + // [60] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -1775,7 +1775,7 @@ print_uchar: { // [66] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [66] phi print_char_cursor#29 = print_char_cursor#45 [phi:print_uchar->print_char#0] -- register_copy - // [66] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy + // [66] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -1789,7 +1789,7 @@ print_uchar: { // [66] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [66] phi print_char_cursor#29 = print_char_cursor#30 [phi:print_uchar::@1->print_char#0] -- register_copy - // [66] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy + // [66] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -1831,7 +1831,7 @@ print_str: { // [66] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [66] phi print_char_cursor#29 = print_char_cursor#30 [phi:print_str::@2->print_char#0] -- register_copy - // [66] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [66] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -2178,13 +2178,13 @@ Score: 10419 main: { // init_points() // [1] call init_points - // [5] phi from main to init_points [phi:main->init_points] + // [5] phi from main to init_points [phi:main->init_points] -- call_phi_near jsr init_points // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // print_points() // [3] call print_points - // [18] phi from main::@1 to print_points [phi:main::@1->print_points] + // [18] phi from main::@1 to print_points [phi:main::@1->print_points] -- call_phi_near jsr print_points // main::@return // } @@ -2264,7 +2264,7 @@ print_points: { .label i = 8 // print_cls() // [19] call print_cls - // [37] phi from print_points to print_cls [phi:print_points->print_cls] + // [37] phi from print_points to print_cls [phi:print_points->print_cls] -- call_phi_near jsr print_cls // [20] phi from print_points to print_points::@1 [phi:print_points->print_points::@1] // [20] phi print_line_cursor#26 = print_screen#0 [phi:print_points->print_points::@1#0] -- pbuz1=pbuc1 @@ -2306,13 +2306,13 @@ print_points: { // [25] call print_uchar // [40] phi from print_points::@2 to print_uchar [phi:print_points::@2->print_uchar] // [40] phi print_char_cursor#45 = print_char_cursor#48 [phi:print_points::@2->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_points::@2->print_uchar#1] -- register_copy + // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_points::@2->print_uchar#1] -- call_phi_near jsr print_uchar // [26] phi from print_points::@2 to print_points::@4 [phi:print_points::@2->print_points::@4] // print_points::@4 // print_str(" ") // [27] call print_str - // [48] phi from print_points::@4 to print_str [phi:print_points::@4->print_str] + // [48] phi from print_points::@4 to print_str [phi:print_points::@4->print_str] -- call_phi_near jsr print_str // [28] phi from print_points::@4 to print_points::pointYpos1 [phi:print_points::@4->print_points::pointYpos1] // print_points::pointYpos1 @@ -2325,13 +2325,13 @@ print_points: { // [30] call print_uchar // [40] phi from print_points::@3 to print_uchar [phi:print_points::@3->print_uchar] // [40] phi print_char_cursor#45 = print_char_cursor#30 [phi:print_points::@3->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_points::@3->print_uchar#1] -- register_copy + // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_points::@3->print_uchar#1] -- call_phi_near jsr print_uchar // [31] phi from print_points::@3 to print_points::@5 [phi:print_points::@3->print_points::@5] // print_points::@5 // print_ln() // [32] call print_ln - // [55] phi from print_points::@5 to print_ln [phi:print_points::@5->print_ln] + // [55] phi from print_points::@5 to print_ln [phi:print_points::@5->print_ln] -- call_phi_near jsr print_ln // print_points::@6 // for(byte i: 0..NUM_POINTS-1) @@ -2367,7 +2367,7 @@ print_points: { print_cls: { // memset(print_screen, ' ', 1000) // [38] call memset - // [60] phi from print_cls to memset [phi:print_cls->memset] + // [60] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -2393,7 +2393,7 @@ print_uchar: { // Table of hexadecimal digits // [66] phi from print_uchar to print_char [phi:print_uchar->print_char] // [66] phi print_char_cursor#29 = print_char_cursor#45 [phi:print_uchar->print_char#0] -- register_copy - // [66] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy + // [66] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -2406,7 +2406,7 @@ print_uchar: { // [46] call print_char // [66] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [66] phi print_char_cursor#29 = print_char_cursor#30 [phi:print_uchar::@1->print_char#0] -- register_copy - // [66] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy + // [66] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } @@ -2445,7 +2445,7 @@ print_str: { // [53] call print_char // [66] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [66] phi print_char_cursor#29 = print_char_cursor#30 [phi:print_str::@2->print_char#0] -- register_copy - // [66] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [66] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/sepa-optimize-problem-1.log b/src/test/ref/sepa-optimize-problem-1.log index 9af598909..36fc38e6c 100644 --- a/src/test/ref/sepa-optimize-problem-1.log +++ b/src/test/ref/sepa-optimize-problem-1.log @@ -408,7 +408,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [9] phi from __start::@1 to main [phi:__start::@1->main] + // [9] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -440,14 +440,14 @@ xputc: { } // main main: { - // [10] call _updatePotatoSprite + // [10] call _updatePotatoSprite -- call_phi_near jsr _updatePotatoSprite // [11] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: jmp __b1 // main::@1 __b1: - // [12] call _updateLupineSprite + // [12] call _updateLupineSprite -- call_phi_near jsr _updateLupineSprite jmp __breturn // main::@return @@ -474,7 +474,7 @@ _updatePotatoSprite: { sta.z _copyDigitToAnySprite.pointer lda #>SPR_POTATO_UI sta.z _copyDigitToAnySprite.pointer+1 - // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#0 [phi:_updatePotatoSprite->_copyDigitToAnySprite#1] -- register_copy + // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#0 [phi:_updatePotatoSprite->_copyDigitToAnySprite#1] -- call_phi_near jsr _copyDigitToAnySprite jmp __breturn // _updatePotatoSprite::@return @@ -501,7 +501,7 @@ _updateLupineSprite: { sta.z _copyDigitToAnySprite.pointer lda #>SPR_LUPINE_UI sta.z _copyDigitToAnySprite.pointer+1 - // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#1 [phi:_updateLupineSprite->_copyDigitToAnySprite#1] -- register_copy + // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#1 [phi:_updateLupineSprite->_copyDigitToAnySprite#1] -- call_phi_near jsr _copyDigitToAnySprite jmp __b1 // _updateLupineSprite::@1 @@ -516,7 +516,7 @@ _updateLupineSprite: { sta.z _copyDigitToAnySprite.pointer lda #>SPR_LUPINE_UI sta.z _copyDigitToAnySprite.pointer+1 - // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#2 [phi:_updateLupineSprite::@1->_copyDigitToAnySprite#1] -- register_copy + // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#2 [phi:_updateLupineSprite::@1->_copyDigitToAnySprite#1] -- call_phi_near jsr _copyDigitToAnySprite jmp __breturn // _updateLupineSprite::@return @@ -650,7 +650,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [9] phi from __start::@1 to main [phi:__start::@1->main] + // [9] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return @@ -681,12 +681,12 @@ xputc: { // main main: { // _updatePotatoSprite() - // [10] call _updatePotatoSprite + // [10] call _updatePotatoSprite -- call_phi_near jsr _updatePotatoSprite // [11] phi from main to main::@1 [phi:main->main::@1] // main::@1 // _updateLupineSprite() - // [12] call _updateLupineSprite + // [12] call _updateLupineSprite -- call_phi_near jsr _updateLupineSprite // main::@return // } @@ -713,7 +713,7 @@ _updatePotatoSprite: { sta.z _copyDigitToAnySprite.pointer lda #>SPR_POTATO_UI sta.z _copyDigitToAnySprite.pointer+1 - // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#0 [phi:_updatePotatoSprite->_copyDigitToAnySprite#1] -- register_copy + // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#0 [phi:_updatePotatoSprite->_copyDigitToAnySprite#1] -- call_phi_near jsr _copyDigitToAnySprite // _updatePotatoSprite::@return // } @@ -740,7 +740,7 @@ _updateLupineSprite: { sta.z _copyDigitToAnySprite.pointer lda #>SPR_LUPINE_UI sta.z _copyDigitToAnySprite.pointer+1 - // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#1 [phi:_updateLupineSprite->_copyDigitToAnySprite#1] -- register_copy + // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#1 [phi:_updateLupineSprite->_copyDigitToAnySprite#1] -- call_phi_near jsr _copyDigitToAnySprite // _updateLupineSprite::@1 // _copyDigitToAnySprite(SPR_LUPINE_UI, num2str[1]) @@ -753,7 +753,7 @@ _updateLupineSprite: { sta.z _copyDigitToAnySprite.pointer lda #>SPR_LUPINE_UI sta.z _copyDigitToAnySprite.pointer+1 - // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#2 [phi:_updateLupineSprite::@1->_copyDigitToAnySprite#1] -- register_copy + // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#2 [phi:_updateLupineSprite::@1->_copyDigitToAnySprite#1] -- call_phi_near jsr _copyDigitToAnySprite // _updateLupineSprite::@return // } diff --git a/src/test/ref/sieve-min.log b/src/test/ref/sieve-min.log index 230bd0d2d..7101f227f 100644 --- a/src/test/ref/sieve-min.log +++ b/src/test/ref/sieve-min.log @@ -1009,7 +1009,7 @@ main: { .label __16 = 4 // [1] call memset // Fill sieve with zeros - // [25] phi from main to memset [phi:main->memset] + // [25] phi from main to memset [phi:main->memset] -- call_phi_near memset_from_main: jsr memset // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1083,7 +1083,7 @@ main: { // main::@10 __b10: // [9] print_uint::w#0 = main::i#10 - // [10] call print_uint + // [10] call print_uint -- call_phi_near jsr print_uint // [11] phi from main::@10 to main::@12 [phi:main::@10->main::@12] __b12_from___b10: @@ -1094,7 +1094,7 @@ main: { // [36] phi from main::@12 to print_char [phi:main::@12->print_char] print_char_from___b12: // [36] phi print_char_cursor#20 = print_char_cursor#21 [phi:main::@12->print_char#0] -- register_copy - // [36] phi print_char::ch#3 = ' ' [phi:main::@12->print_char#1] -- vbuaa=vbuc1 + // [36] phi print_char::ch#3 = ' ' [phi:main::@12->print_char#1] -- call_phi_near lda #' ' jsr print_char // [13] phi from main::@12 main::@8 to main::@9 [phi:main::@12/main::@8->main::@9] @@ -1256,7 +1256,7 @@ print_uint: { // [40] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [40] phi print_char_cursor#28 = print_char_cursor#29 [phi:print_uint->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -1267,7 +1267,7 @@ print_uint: { // [40] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [40] phi print_char_cursor#28 = print_char_cursor#21 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -1311,7 +1311,7 @@ print_uchar: { // [36] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [36] phi print_char_cursor#20 = print_char_cursor#28 [phi:print_uchar->print_char#0] -- register_copy - // [36] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [36] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -1325,7 +1325,7 @@ print_uchar: { // [36] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [36] phi print_char_cursor#20 = print_char_cursor#21 [phi:print_uchar::@1->print_char#0] -- register_copy - // [36] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [36] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -1502,7 +1502,7 @@ main: { // memset(sieve, 0, COUNT) // [1] call memset // Fill sieve with zeros - // [25] phi from main to memset [phi:main->memset] + // [25] phi from main to memset [phi:main->memset] -- call_phi_near jsr memset // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::sieve_i#2 = sieve+2 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -1573,7 +1573,7 @@ main: { // main::@10 // print_uint(i) // [9] print_uint::w#0 = main::i#10 - // [10] call print_uint + // [10] call print_uint -- call_phi_near jsr print_uint // [11] phi from main::@10 to main::@12 [phi:main::@10->main::@12] // main::@12 @@ -1581,7 +1581,7 @@ main: { // [12] call print_char // [36] phi from main::@12 to print_char [phi:main::@12->print_char] // [36] phi print_char_cursor#20 = print_char_cursor#21 [phi:main::@12->print_char#0] -- register_copy - // [36] phi print_char::ch#3 = ' ' [phi:main::@12->print_char#1] -- vbuaa=vbuc1 + // [36] phi print_char::ch#3 = ' ' [phi:main::@12->print_char#1] -- call_phi_near lda #' ' jsr print_char // [13] phi from main::@12 main::@8 to main::@9 [phi:main::@12/main::@8->main::@9] @@ -1741,7 +1741,7 @@ print_uint: { // [32] call print_uchar // [40] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [40] phi print_char_cursor#28 = print_char_cursor#29 [phi:print_uint->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -1750,7 +1750,7 @@ print_uint: { // [34] call print_uchar // [40] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [40] phi print_char_cursor#28 = print_char_cursor#21 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -1795,7 +1795,7 @@ print_uchar: { // Table of hexadecimal digits // [36] phi from print_uchar to print_char [phi:print_uchar->print_char] // [36] phi print_char_cursor#20 = print_char_cursor#28 [phi:print_uchar->print_char#0] -- register_copy - // [36] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [36] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -1808,7 +1808,7 @@ print_uchar: { // [46] call print_char // [36] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [36] phi print_char_cursor#20 = print_char_cursor#21 [phi:print_uchar::@1->print_char#0] -- register_copy - // [36] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [36] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/signed-char-comparison.log b/src/test/ref/signed-char-comparison.log index ae96661aa..ed3c75220 100644 --- a/src/test/ref/signed-char-comparison.log +++ b/src/test/ref/signed-char-comparison.log @@ -224,7 +224,7 @@ main: { // main::@1 __b1: // [2] debug::dy#0 = main::dy#2 - // [3] call debug + // [3] call debug -- call_phi_near jsr debug jmp __b2 // main::@2 @@ -328,7 +328,7 @@ main: { __b1: // debug(dy) // [2] debug::dy#0 = main::dy#2 - // [3] call debug + // [3] call debug -- call_phi_near jsr debug // main::@2 // for(signed char dy:-128..127) diff --git a/src/test/ref/signed-indexed-subtract.log b/src/test/ref/signed-indexed-subtract.log index b7ebd34f7..b877c1b21 100644 --- a/src/test/ref/signed-indexed-subtract.log +++ b/src/test/ref/signed-indexed-subtract.log @@ -1219,7 +1219,7 @@ main: { sub_from___b1: // [22] phi sub::s#3 = $80 [phi:main::@1->sub#0] -- vbuxx=vbuc1 ldx #$80 - // [22] phi sub::idx#3 = sub::idx#0 [phi:main::@1->sub#1] -- register_copy + // [22] phi sub::idx#3 = sub::idx#0 [phi:main::@1->sub#1] -- call_phi_near jsr sub jmp __b4 // main::@4 @@ -1231,7 +1231,7 @@ main: { sub_from___b4: // [22] phi sub::s#3 = $40 [phi:main::@4->sub#0] -- vbuxx=vbuc1 ldx #$40 - // [22] phi sub::idx#3 = sub::idx#1 [phi:main::@4->sub#1] -- register_copy + // [22] phi sub::idx#3 = sub::idx#1 [phi:main::@4->sub#1] -- call_phi_near jsr sub jmp __b5 // main::@5 @@ -1243,7 +1243,7 @@ main: { sub_from___b5: // [22] phi sub::s#3 = $40 [phi:main::@5->sub#0] -- vbuxx=vbuc1 ldx #$40 - // [22] phi sub::idx#3 = sub::idx#2 [phi:main::@5->sub#1] -- register_copy + // [22] phi sub::idx#3 = sub::idx#2 [phi:main::@5->sub#1] -- call_phi_near jsr sub jmp __b6 // main::@6 @@ -1259,7 +1259,7 @@ main: { // main::@2 __b2: // [11] call print_cls - // [26] phi from main::@2 to print_cls [phi:main::@2->print_cls] + // [26] phi from main::@2 to print_cls [phi:main::@2->print_cls] -- call_phi_near print_cls_from___b2: jsr print_cls // [12] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -1289,7 +1289,7 @@ main: { sta.z print_sint.w lda words+1,y sta.z print_sint.w+1 - // [15] call print_sint + // [15] call print_sint -- call_phi_near jsr print_sint // [16] phi from main::@3 to main::@7 [phi:main::@3->main::@7] __b7_from___b3: @@ -1297,7 +1297,7 @@ main: { // main::@7 __b7: // [17] call print_ln - // [39] phi from main::@7 to print_ln [phi:main::@7->print_ln] + // [39] phi from main::@7 to print_ln [phi:main::@7->print_ln] -- call_phi_near print_ln_from___b7: jsr print_ln jmp __b8 @@ -1353,7 +1353,7 @@ sub: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [27] call memset - // [44] phi from print_cls to memset [phi:print_cls->memset] + // [44] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -1379,7 +1379,7 @@ print_sint: { // [50] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] print_char_from___b3: // [50] phi print_char_cursor#35 = print_char_cursor#51 [phi:print_sint::@3->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#4 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [32] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -1390,7 +1390,7 @@ print_sint: { // print_sint::@2 __b2: // [33] print_uint::w#0 = (unsigned int)print_sint::w#4 - // [34] call print_uint + // [34] call print_uint -- call_phi_near jsr print_uint jmp __breturn // print_sint::@return @@ -1406,7 +1406,7 @@ print_sint: { // [50] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] print_char_from___b1: // [50] phi print_char_cursor#35 = print_char_cursor#51 [phi:print_sint::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#4 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char jmp __b4 @@ -1530,7 +1530,7 @@ print_uint: { // [55] call print_uchar // [59] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: - // [59] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy + // [59] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -1540,7 +1540,7 @@ print_uint: { // [57] call print_uchar // [59] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: - // [59] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy + // [59] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -1566,7 +1566,7 @@ print_uchar: { // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [50] phi print_char_cursor#35 = print_char_cursor#12 [phi:print_uchar->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#2 [phi:print_uchar->print_char#1] -- register_copy + // [50] phi print_char::ch#4 = print_char::ch#2 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -1580,7 +1580,7 @@ print_uchar: { // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [50] phi print_char_cursor#35 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- register_copy + // [50] phi print_char::ch#4 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -1797,7 +1797,7 @@ main: { // [22] phi from main::@1 to sub [phi:main::@1->sub] // [22] phi sub::s#3 = $80 [phi:main::@1->sub#0] -- vbuxx=vbuc1 ldx #$80 - // [22] phi sub::idx#3 = sub::idx#0 [phi:main::@1->sub#1] -- register_copy + // [22] phi sub::idx#3 = sub::idx#0 [phi:main::@1->sub#1] -- call_phi_near jsr sub // main::@4 // sub(i, $40) @@ -1807,7 +1807,7 @@ main: { // [22] phi from main::@4 to sub [phi:main::@4->sub] // [22] phi sub::s#3 = $40 [phi:main::@4->sub#0] -- vbuxx=vbuc1 ldx #$40 - // [22] phi sub::idx#3 = sub::idx#1 [phi:main::@4->sub#1] -- register_copy + // [22] phi sub::idx#3 = sub::idx#1 [phi:main::@4->sub#1] -- call_phi_near jsr sub // main::@5 // sub(i, $40) @@ -1817,7 +1817,7 @@ main: { // [22] phi from main::@5 to sub [phi:main::@5->sub] // [22] phi sub::s#3 = $40 [phi:main::@5->sub#0] -- vbuxx=vbuc1 ldx #$40 - // [22] phi sub::idx#3 = sub::idx#2 [phi:main::@5->sub#1] -- register_copy + // [22] phi sub::idx#3 = sub::idx#2 [phi:main::@5->sub#1] -- call_phi_near jsr sub // main::@6 // for(byte i: 0..8) @@ -1830,7 +1830,7 @@ main: { // main::@2 // print_cls() // [11] call print_cls - // [26] phi from main::@2 to print_cls [phi:main::@2->print_cls] + // [26] phi from main::@2 to print_cls [phi:main::@2->print_cls] -- call_phi_near jsr print_cls // [12] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // [12] phi print_line_cursor#21 = print_screen#0 [phi:main::@2->main::@3#0] -- pbuz1=pbuc1 @@ -1858,13 +1858,13 @@ main: { sta.z print_sint.w lda words+1,y sta.z print_sint.w+1 - // [15] call print_sint + // [15] call print_sint -- call_phi_near jsr print_sint // [16] phi from main::@3 to main::@7 [phi:main::@3->main::@7] // main::@7 // print_ln() // [17] call print_ln - // [39] phi from main::@7 to print_ln [phi:main::@7->print_ln] + // [39] phi from main::@7 to print_ln [phi:main::@7->print_ln] -- call_phi_near jsr print_ln // main::@8 // for(byte j: 0..8) @@ -1917,7 +1917,7 @@ sub: { print_cls: { // memset(print_screen, ' ', 1000) // [27] call memset - // [44] phi from print_cls to memset [phi:print_cls->memset] + // [44] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -1939,7 +1939,7 @@ print_sint: { // [31] call print_char // [50] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] // [50] phi print_char_cursor#35 = print_char_cursor#51 [phi:print_sint::@3->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#4 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [32] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -1948,7 +1948,7 @@ print_sint: { __b2: // print_uint((unsigned int)w) // [33] print_uint::w#0 = (unsigned int)print_sint::w#4 - // [34] call print_uint + // [34] call print_uint -- call_phi_near jsr print_uint // print_sint::@return // } @@ -1961,7 +1961,7 @@ print_sint: { // [37] call print_char // [50] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] // [50] phi print_char_cursor#35 = print_char_cursor#51 [phi:print_sint::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#4 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char // print_sint::@4 @@ -2082,7 +2082,7 @@ print_uint: { ldx.z w+1 // [55] call print_uchar // [59] phi from print_uint to print_uchar [phi:print_uint->print_uchar] - // [59] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy + // [59] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -2090,7 +2090,7 @@ print_uint: { ldx.z w // [57] call print_uchar // [59] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] - // [59] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy + // [59] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -2116,7 +2116,7 @@ print_uchar: { // Table of hexadecimal digits // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] // [50] phi print_char_cursor#35 = print_char_cursor#12 [phi:print_uchar->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#2 [phi:print_uchar->print_char#1] -- register_copy + // [50] phi print_char::ch#4 = print_char::ch#2 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -2129,7 +2129,7 @@ print_uchar: { // [65] call print_char // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [50] phi print_char_cursor#35 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- register_copy + // [50] phi print_char::ch#4 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/signed-words.log b/src/test/ref/signed-words.log index 400f1a240..3657fb28c 100644 --- a/src/test/ref/signed-words.log +++ b/src/test/ref/signed-words.log @@ -961,7 +961,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call init + // [1] call init -- call_phi_near jsr init // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -1011,7 +1011,7 @@ main: { jmp __b2 // main::@2 __b2: - // [5] call anim + // [5] call anim -- call_phi_near jsr anim jmp __b1_from___b2 } @@ -1443,7 +1443,7 @@ Score: 6364 // main main: { // init() - // [1] call init + // [1] call init -- call_phi_near jsr init // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi yvel_init#15 = $64 [phi:main->main::@1#0] -- vwsz1=vwsc1 @@ -1484,7 +1484,7 @@ main: { // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // anim() - // [5] call anim + // [5] call anim -- call_phi_near jsr anim jmp __b1 } diff --git a/src/test/ref/sinus-basic.log b/src/test/ref/sinus-basic.log index a837a383f..5f8b3b043 100644 --- a/src/test/ref/sinus-basic.log +++ b/src/test/ref/sinus-basic.log @@ -1301,7 +1301,7 @@ main: { // [1] call setFAC // [34] phi from main to setFAC [phi:main->setFAC] setFAC_from_main: - // [34] phi setFAC::prepareMEM1_mem#0 = $4fb [phi:main->setFAC#0] -- vwuz1=vwuc1 + // [34] phi setFAC::prepareMEM1_mem#0 = $4fb [phi:main->setFAC#0] -- call_phi_near lda #<$4fb sta.z setFAC.prepareMEM1_mem lda #>$4fb @@ -1312,7 +1312,7 @@ main: { jmp __b2 // main::@2 __b2: - // [3] call divFACby10 + // [3] call divFACby10 -- call_phi_near jsr divFACby10 // [4] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -1322,7 +1322,7 @@ main: { // [5] call setMEMtoFAC // [43] phi from main::@3 to setMEMtoFAC [phi:main::@3->setMEMtoFAC] setMEMtoFAC_from___b3: - // [43] phi setMEMtoFAC::mem#2 = main::f_127 [phi:main::@3->setMEMtoFAC#0] -- pbuz1=pbuc1 + // [43] phi setMEMtoFAC::mem#2 = main::f_127 [phi:main::@3->setMEMtoFAC#0] -- call_phi_near lda #f_127 @@ -1354,7 +1354,7 @@ main: { // [8] call setFAC // [34] phi from main::@1 to setFAC [phi:main::@1->setFAC] setFAC_from___b1: - // [34] phi setFAC::prepareMEM1_mem#0 = setFAC::w#1 [phi:main::@1->setFAC#0] -- register_copy + // [34] phi setFAC::prepareMEM1_mem#0 = setFAC::w#1 [phi:main::@1->setFAC#0] -- call_phi_near jsr setFAC // [9] phi from main::@1 to main::@4 [phi:main::@1->main::@4] __b4_from___b1: @@ -1364,7 +1364,7 @@ main: { // [10] call mulFACbyMEM // [50] phi from main::@4 to mulFACbyMEM [phi:main::@4->mulFACbyMEM] mulFACbyMEM_from___b4: - // [50] phi mulFACbyMEM::mem#2 = main::f_2pi [phi:main::@4->mulFACbyMEM#0] -- pbuz1=pbuc1 + // [50] phi mulFACbyMEM::mem#2 = main::f_2pi [phi:main::@4->mulFACbyMEM#0] -- call_phi_near lda #f_2pi @@ -1378,7 +1378,7 @@ main: { // [12] call setMEMtoFAC // [43] phi from main::@5 to setMEMtoFAC [phi:main::@5->setMEMtoFAC] setMEMtoFAC_from___b5: - // [43] phi setMEMtoFAC::mem#2 = main::f_i [phi:main::@5->setMEMtoFAC#0] -- pbuz1=pbuc1 + // [43] phi setMEMtoFAC::mem#2 = main::f_i [phi:main::@5->setMEMtoFAC#0] -- call_phi_near lda #f_i @@ -1392,7 +1392,7 @@ main: { // [14] call setFAC // [34] phi from main::@6 to setFAC [phi:main::@6->setFAC] setFAC_from___b6: - // [34] phi setFAC::prepareMEM1_mem#0 = $19 [phi:main::@6->setFAC#0] -- vwuz1=vbuc1 + // [34] phi setFAC::prepareMEM1_mem#0 = $19 [phi:main::@6->setFAC#0] -- call_phi_near lda #<$19 sta.z setFAC.prepareMEM1_mem lda #>$19 @@ -1404,7 +1404,7 @@ main: { // main::@7 __b7: // [16] call divMEMbyFAC - // [57] phi from main::@7 to divMEMbyFAC [phi:main::@7->divMEMbyFAC] + // [57] phi from main::@7 to divMEMbyFAC [phi:main::@7->divMEMbyFAC] -- call_phi_near divMEMbyFAC_from___b7: jsr divMEMbyFAC // [17] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -1412,7 +1412,7 @@ main: { jmp __b8 // main::@8 __b8: - // [18] call sinFAC + // [18] call sinFAC -- call_phi_near jsr sinFAC // [19] phi from main::@8 to main::@9 [phi:main::@8->main::@9] __b9_from___b8: @@ -1422,7 +1422,7 @@ main: { // [20] call mulFACbyMEM // [50] phi from main::@9 to mulFACbyMEM [phi:main::@9->mulFACbyMEM] mulFACbyMEM_from___b9: - // [50] phi mulFACbyMEM::mem#2 = main::f_127 [phi:main::@9->mulFACbyMEM#0] -- pbuz1=pbuc1 + // [50] phi mulFACbyMEM::mem#2 = main::f_127 [phi:main::@9->mulFACbyMEM#0] -- call_phi_near lda #f_127 @@ -1434,7 +1434,7 @@ main: { // main::@10 __b10: // [22] call addMEMtoFAC - // [64] phi from main::@10 to addMEMtoFAC [phi:main::@10->addMEMtoFAC] + // [64] phi from main::@10 to addMEMtoFAC [phi:main::@10->addMEMtoFAC] -- call_phi_near addMEMtoFAC_from___b10: jsr addMEMtoFAC // [23] phi from main::@10 to main::@11 [phi:main::@10->main::@11] @@ -1442,14 +1442,14 @@ main: { jmp __b11 // main::@11 __b11: - // [24] call getFAC + // [24] call getFAC -- call_phi_near jsr getFAC // [25] getFAC::return#2 = getFAC::return#0 jmp __b12 // main::@12 __b12: // [26] print_uint::w#0 = getFAC::return#2 - // [27] call print_uint + // [27] call print_uint -- call_phi_near jsr print_uint // [28] phi from main::@12 to main::@13 [phi:main::@12->main::@13] __b13_from___b12: @@ -1457,7 +1457,7 @@ main: { // main::@13 __b13: // [29] call print_ln - // [77] phi from main::@13 to print_ln [phi:main::@13->print_ln] + // [77] phi from main::@13 to print_ln [phi:main::@13->print_ln] -- call_phi_near print_ln_from___b13: jsr print_ln jmp __b14 @@ -1702,7 +1702,7 @@ print_uint: { // [82] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [82] phi print_char_cursor#33 = print_char_cursor#34 [phi:print_uint->print_uchar#0] -- register_copy - // [82] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [82] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -1713,7 +1713,7 @@ print_uint: { // [82] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [82] phi print_char_cursor#33 = print_char_cursor#25 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [82] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [82] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -1772,7 +1772,7 @@ print_uchar: { // [90] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [90] phi print_char_cursor#24 = print_char_cursor#33 [phi:print_uchar->print_char#0] -- register_copy - // [90] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [90] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -1786,7 +1786,7 @@ print_uchar: { // [90] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [90] phi print_char_cursor#24 = print_char_cursor#25 [phi:print_uchar::@1->print_char#0] -- register_copy - // [90] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [90] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -2062,7 +2062,7 @@ main: { // setFAC(1275) // [1] call setFAC // [34] phi from main to setFAC [phi:main->setFAC] - // [34] phi setFAC::prepareMEM1_mem#0 = $4fb [phi:main->setFAC#0] -- vwuz1=vwuc1 + // [34] phi setFAC::prepareMEM1_mem#0 = $4fb [phi:main->setFAC#0] -- call_phi_near lda #<$4fb sta.z setFAC.prepareMEM1_mem lda #>$4fb @@ -2071,14 +2071,14 @@ main: { // [2] phi from main to main::@2 [phi:main->main::@2] // main::@2 // divFACby10() - // [3] call divFACby10 + // [3] call divFACby10 -- call_phi_near jsr divFACby10 // [4] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // setMEMtoFAC(f_127) // [5] call setMEMtoFAC // [43] phi from main::@3 to setMEMtoFAC [phi:main::@3->setMEMtoFAC] - // [43] phi setMEMtoFAC::mem#2 = main::f_127 [phi:main::@3->setMEMtoFAC#0] -- pbuz1=pbuc1 + // [43] phi setMEMtoFAC::mem#2 = main::f_127 [phi:main::@3->setMEMtoFAC#0] -- call_phi_near lda #f_127 @@ -2108,14 +2108,14 @@ main: { sta.z setFAC.w+1 // [8] call setFAC // [34] phi from main::@1 to setFAC [phi:main::@1->setFAC] - // [34] phi setFAC::prepareMEM1_mem#0 = setFAC::w#1 [phi:main::@1->setFAC#0] -- register_copy + // [34] phi setFAC::prepareMEM1_mem#0 = setFAC::w#1 [phi:main::@1->setFAC#0] -- call_phi_near jsr setFAC // [9] phi from main::@1 to main::@4 [phi:main::@1->main::@4] // main::@4 // mulFACbyMEM(f_2pi) // [10] call mulFACbyMEM // [50] phi from main::@4 to mulFACbyMEM [phi:main::@4->mulFACbyMEM] - // [50] phi mulFACbyMEM::mem#2 = main::f_2pi [phi:main::@4->mulFACbyMEM#0] -- pbuz1=pbuc1 + // [50] phi mulFACbyMEM::mem#2 = main::f_2pi [phi:main::@4->mulFACbyMEM#0] -- call_phi_near lda #f_2pi @@ -2126,7 +2126,7 @@ main: { // setMEMtoFAC(f_i) // [12] call setMEMtoFAC // [43] phi from main::@5 to setMEMtoFAC [phi:main::@5->setMEMtoFAC] - // [43] phi setMEMtoFAC::mem#2 = main::f_i [phi:main::@5->setMEMtoFAC#0] -- pbuz1=pbuc1 + // [43] phi setMEMtoFAC::mem#2 = main::f_i [phi:main::@5->setMEMtoFAC#0] -- call_phi_near lda #f_i @@ -2137,7 +2137,7 @@ main: { // setFAC(25) // [14] call setFAC // [34] phi from main::@6 to setFAC [phi:main::@6->setFAC] - // [34] phi setFAC::prepareMEM1_mem#0 = $19 [phi:main::@6->setFAC#0] -- vwuz1=vbuc1 + // [34] phi setFAC::prepareMEM1_mem#0 = $19 [phi:main::@6->setFAC#0] -- call_phi_near lda #<$19 sta.z setFAC.prepareMEM1_mem lda #>$19 @@ -2147,19 +2147,19 @@ main: { // main::@7 // divMEMbyFAC(f_i) // [16] call divMEMbyFAC - // [57] phi from main::@7 to divMEMbyFAC [phi:main::@7->divMEMbyFAC] + // [57] phi from main::@7 to divMEMbyFAC [phi:main::@7->divMEMbyFAC] -- call_phi_near jsr divMEMbyFAC // [17] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 // sinFAC() - // [18] call sinFAC + // [18] call sinFAC -- call_phi_near jsr sinFAC // [19] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 // mulFACbyMEM(f_127) // [20] call mulFACbyMEM // [50] phi from main::@9 to mulFACbyMEM [phi:main::@9->mulFACbyMEM] - // [50] phi mulFACbyMEM::mem#2 = main::f_127 [phi:main::@9->mulFACbyMEM#0] -- pbuz1=pbuc1 + // [50] phi mulFACbyMEM::mem#2 = main::f_127 [phi:main::@9->mulFACbyMEM#0] -- call_phi_near lda #f_127 @@ -2169,24 +2169,24 @@ main: { // main::@10 // addMEMtoFAC(f_127) // [22] call addMEMtoFAC - // [64] phi from main::@10 to addMEMtoFAC [phi:main::@10->addMEMtoFAC] + // [64] phi from main::@10 to addMEMtoFAC [phi:main::@10->addMEMtoFAC] -- call_phi_near jsr addMEMtoFAC // [23] phi from main::@10 to main::@11 [phi:main::@10->main::@11] // main::@11 // getFAC() - // [24] call getFAC + // [24] call getFAC -- call_phi_near jsr getFAC // [25] getFAC::return#2 = getFAC::return#0 // main::@12 // print_uint(getFAC()) // [26] print_uint::w#0 = getFAC::return#2 - // [27] call print_uint + // [27] call print_uint -- call_phi_near jsr print_uint // [28] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 // print_ln() // [29] call print_ln - // [77] phi from main::@13 to print_ln [phi:main::@13->print_ln] + // [77] phi from main::@13 to print_ln [phi:main::@13->print_ln] -- call_phi_near jsr print_ln // main::@14 // for(byte i : 1..25) @@ -2422,7 +2422,7 @@ print_uint: { // [73] call print_uchar // [82] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [82] phi print_char_cursor#33 = print_char_cursor#34 [phi:print_uint->print_uchar#0] -- register_copy - // [82] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [82] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -2431,7 +2431,7 @@ print_uint: { // [75] call print_uchar // [82] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [82] phi print_char_cursor#33 = print_char_cursor#25 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [82] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [82] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -2488,7 +2488,7 @@ print_uchar: { // Table of hexadecimal digits // [90] phi from print_uchar to print_char [phi:print_uchar->print_char] // [90] phi print_char_cursor#24 = print_char_cursor#33 [phi:print_uchar->print_char#0] -- register_copy - // [90] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [90] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -2501,7 +2501,7 @@ print_uchar: { // [88] call print_char // [90] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [90] phi print_char_cursor#24 = print_char_cursor#25 [phi:print_uchar::@1->print_char#0] -- register_copy - // [90] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [90] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/sinusgen16.log b/src/test/ref/sinusgen16.log index 03d6776c4..3136a40cd 100644 --- a/src/test/ref/sinusgen16.log +++ b/src/test/ref/sinusgen16.log @@ -2907,7 +2907,7 @@ main: { .label sw = $1a .label st1 = $24 // [1] call sin16s_gen - // [17] phi from main to sin16s_gen [phi:main->sin16s_gen] + // [17] phi from main to sin16s_gen [phi:main->sin16s_gen] -- call_phi_near sin16s_gen_from_main: jsr sin16s_gen // [2] phi from main to main::@5 [phi:main->main::@5] @@ -2916,7 +2916,7 @@ main: { // main::@5 __b5: // [3] call print_cls - // [32] phi from main::@5 to print_cls [phi:main::@5->print_cls] + // [32] phi from main::@5 to print_cls [phi:main::@5->print_cls] -- call_phi_near print_cls_from___b5: jsr print_cls // [4] phi from main::@5 to main::@1 [phi:main::@5->main::@1] @@ -2969,7 +2969,7 @@ main: { // [35] phi from main::@4 to print_str [phi:main::@4->print_str] print_str_from___b4: // [35] phi print_char_cursor#58 = print_char_cursor#20 [phi:main::@4->print_str#0] -- register_copy - // [35] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- pbuz1=pbuc1 + // [35] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- call_phi_near lda #str1 @@ -2983,7 +2983,7 @@ main: { // main::@3 __b3: // [12] print_sint::w#1 = main::sw#0 - // [13] call print_sint + // [13] call print_sint -- call_phi_near jsr print_sint // [14] phi from main::@3 to main::@6 [phi:main::@3->main::@6] __b6_from___b3: @@ -2994,7 +2994,7 @@ main: { // [35] phi from main::@6 to print_str [phi:main::@6->print_str] print_str_from___b6: // [35] phi print_char_cursor#58 = print_char_cursor#12 [phi:main::@6->print_str#0] -- register_copy - // [35] phi print_str::str#6 = main::str [phi:main::@6->print_str#1] -- pbuz1=pbuc1 + // [35] phi print_str::str#6 = main::str [phi:main::@6->print_str#1] -- call_phi_near lda #str @@ -3039,7 +3039,7 @@ sin16s_gen: { .label i = $12 // [18] call div32u16u // u[4.28] step = PI*2/wavelength - // [52] phi from sin16s_gen to div32u16u [phi:sin16s_gen->div32u16u] + // [52] phi from sin16s_gen to div32u16u [phi:sin16s_gen->div32u16u] -- call_phi_near div32u16u_from_sin16s_gen: jsr div32u16u // [19] div32u16u::return#0 = div32u16u::return#1 @@ -3097,7 +3097,7 @@ sin16s_gen: { sta.z sin16s.x+2 lda.z x+3 sta.z sin16s.x+3 - // [25] call sin16s + // [25] call sin16s -- call_phi_near jsr sin16s // [26] sin16s::return#0 = sin16s::return#1 jmp __b4 @@ -3149,7 +3149,7 @@ sin16s_gen: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [33] call memset - // [102] phi from print_cls to memset [phi:print_cls->memset] + // [102] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -3190,7 +3190,7 @@ print_str: { // [108] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [108] phi print_char_cursor#36 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [108] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -3219,7 +3219,7 @@ print_sint: { // [108] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] print_char_from___b3: // [108] phi print_char_cursor#36 = print_char_cursor#54 [phi:print_sint::@3->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 + // [108] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [45] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -3230,7 +3230,7 @@ print_sint: { // print_sint::@2 __b2: // [46] print_uint::w#0 = (unsigned int)print_sint::w#4 - // [47] call print_uint + // [47] call print_uint -- call_phi_near jsr print_uint jmp __breturn // print_sint::@return @@ -3246,7 +3246,7 @@ print_sint: { // [108] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] print_char_from___b1: // [108] phi print_char_cursor#36 = print_char_cursor#54 [phi:print_sint::@1->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 + // [108] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char jmp __b4 @@ -3278,7 +3278,7 @@ div32u16u: { sta.z divr16u.dividend lda #>PI2_u4f28>>$10 sta.z divr16u.dividend+1 - // [117] phi divr16u::rem#10 = 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 + // [117] phi divr16u::rem#10 = 0 [phi:div32u16u->divr16u#1] -- call_phi_near lda #<0 sta.z divr16u.rem lda #>0 @@ -3302,7 +3302,7 @@ div32u16u: { sta.z divr16u.dividend lda #>PI2_u4f28&$ffff sta.z divr16u.dividend+1 - // [117] phi divr16u::rem#10 = divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy + // [117] phi divr16u::rem#10 = divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- call_phi_near jsr divr16u // [58] divr16u::return#3 = divr16u::return#0 jmp __b2 @@ -3475,7 +3475,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- call_phi_near jsr mulu16_sel // [73] mulu16_sel::return#0 = mulu16_sel::return#12 jmp __b7 @@ -3499,7 +3499,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- call_phi_near jsr mulu16_sel // [78] mulu16_sel::return#1 = mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return @@ -3522,7 +3522,7 @@ sin16s: { sta.z mulu16_sel.v2 lda #>$10000/6 sta.z mulu16_sel.v2+1 - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- call_phi_near jsr mulu16_sel // [82] mulu16_sel::return#2 = mulu16_sel::return#12 jmp __b9 @@ -3551,7 +3551,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- call_phi_near jsr mulu16_sel // [88] mulu16_sel::return#10 = mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return @@ -3575,7 +3575,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- call_phi_near jsr mulu16_sel // [93] mulu16_sel::return#11 = mulu16_sel::return#12 jmp __b11 @@ -3706,7 +3706,7 @@ print_uint: { // [113] call print_uchar // [144] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: - // [144] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy + // [144] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -3716,7 +3716,7 @@ print_uint: { // [115] call print_uchar // [144] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: - // [144] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy + // [144] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -3851,7 +3851,7 @@ mulu16_sel: { lda.z v1+1 sta.z mul16u.a+1 // [137] mul16u::b#0 = mulu16_sel::v2#5 - // [138] call mul16u + // [138] call mul16u -- call_phi_near jsr mul16u // [139] mul16u::return#0 = mul16u::res#2 jmp __b1 @@ -3898,7 +3898,7 @@ print_uchar: { // [108] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [108] phi print_char_cursor#36 = print_char_cursor#12 [phi:print_uchar->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy + // [108] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -3912,7 +3912,7 @@ print_uchar: { // [108] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [108] phi print_char_cursor#36 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy + // [108] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -4468,13 +4468,13 @@ main: { .label st1 = $24 // sin16s_gen(sintab1, wavelength) // [1] call sin16s_gen - // [17] phi from main to sin16s_gen [phi:main->sin16s_gen] + // [17] phi from main to sin16s_gen [phi:main->sin16s_gen] -- call_phi_near jsr sin16s_gen // [2] phi from main to main::@5 [phi:main->main::@5] // main::@5 // print_cls() // [3] call print_cls - // [32] phi from main::@5 to print_cls [phi:main::@5->print_cls] + // [32] phi from main::@5 to print_cls [phi:main::@5->print_cls] -- call_phi_near jsr print_cls // [4] phi from main::@5 to main::@1 [phi:main::@5->main::@1] // [4] phi print_char_cursor#20 = print_screen#0 [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 @@ -4522,7 +4522,7 @@ main: { // [10] call print_str // [35] phi from main::@4 to print_str [phi:main::@4->print_str] // [35] phi print_char_cursor#58 = print_char_cursor#20 [phi:main::@4->print_str#0] -- register_copy - // [35] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- pbuz1=pbuc1 + // [35] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- call_phi_near lda #str1 @@ -4534,7 +4534,7 @@ main: { __b3: // print_sint(sw) // [12] print_sint::w#1 = main::sw#0 - // [13] call print_sint + // [13] call print_sint -- call_phi_near jsr print_sint // [14] phi from main::@3 to main::@6 [phi:main::@3->main::@6] // main::@6 @@ -4542,7 +4542,7 @@ main: { // [15] call print_str // [35] phi from main::@6 to print_str [phi:main::@6->print_str] // [35] phi print_char_cursor#58 = print_char_cursor#12 [phi:main::@6->print_str#0] -- register_copy - // [35] phi print_str::str#6 = main::str [phi:main::@6->print_str#1] -- pbuz1=pbuc1 + // [35] phi print_str::str#6 = main::str [phi:main::@6->print_str#1] -- call_phi_near lda #str @@ -4586,7 +4586,7 @@ sin16s_gen: { // unsigned long step = div32u16u(PI2_u4f28, wavelength) // [18] call div32u16u // u[4.28] step = PI*2/wavelength - // [52] phi from sin16s_gen to div32u16u [phi:sin16s_gen->div32u16u] + // [52] phi from sin16s_gen to div32u16u [phi:sin16s_gen->div32u16u] -- call_phi_near jsr div32u16u // unsigned long step = div32u16u(PI2_u4f28, wavelength) // [19] div32u16u::return#0 = div32u16u::return#1 @@ -4639,7 +4639,7 @@ sin16s_gen: { sta.z sin16s.x+2 lda.z x+3 sta.z sin16s.x+3 - // [25] call sin16s + // [25] call sin16s -- call_phi_near jsr sin16s // [26] sin16s::return#0 = sin16s::return#1 // sin16s_gen::@4 @@ -4693,7 +4693,7 @@ sin16s_gen: { print_cls: { // memset(print_screen, ' ', 1000) // [33] call memset - // [102] phi from print_cls to memset [phi:print_cls->memset] + // [102] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -4729,7 +4729,7 @@ print_str: { // [40] call print_char // [108] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [108] phi print_char_cursor#36 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [108] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); @@ -4755,7 +4755,7 @@ print_sint: { // [44] call print_char // [108] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] // [108] phi print_char_cursor#36 = print_char_cursor#54 [phi:print_sint::@3->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 + // [108] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [45] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -4764,7 +4764,7 @@ print_sint: { __b2: // print_uint((unsigned int)w) // [46] print_uint::w#0 = (unsigned int)print_sint::w#4 - // [47] call print_uint + // [47] call print_uint -- call_phi_near jsr print_uint // print_sint::@return // } @@ -4777,7 +4777,7 @@ print_sint: { // [50] call print_char // [108] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] // [108] phi print_char_cursor#36 = print_char_cursor#54 [phi:print_sint::@1->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 + // [108] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char // print_sint::@4 @@ -4808,7 +4808,7 @@ div32u16u: { sta.z divr16u.dividend lda #>PI2_u4f28>>$10 sta.z divr16u.dividend+1 - // [117] phi divr16u::rem#10 = 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 + // [117] phi divr16u::rem#10 = 0 [phi:div32u16u->divr16u#1] -- call_phi_near lda #<0 sta.z divr16u.rem sta.z divr16u.rem+1 @@ -4830,7 +4830,7 @@ div32u16u: { sta.z divr16u.dividend lda #>PI2_u4f28&$ffff sta.z divr16u.dividend+1 - // [117] phi divr16u::rem#10 = divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy + // [117] phi divr16u::rem#10 = divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- call_phi_near jsr divr16u // unsigned int quotient_lo = divr16u(WORD0(dividend), divisor, rem16u) // [58] divr16u::return#3 = divr16u::return#0 @@ -4999,7 +4999,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- call_phi_near jsr mulu16_sel // unsigned int x2 = mulu16_sel(x1, x1, 0) // [73] mulu16_sel::return#0 = mulu16_sel::return#12 @@ -5022,7 +5022,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- call_phi_near jsr mulu16_sel // unsigned int x3 = mulu16_sel(x2, x1, 1) // [78] mulu16_sel::return#1 = mulu16_sel::return#12 -- vwuz1=vwuz2 @@ -5044,7 +5044,7 @@ sin16s: { sta.z mulu16_sel.v2 lda #>$10000/6 sta.z mulu16_sel.v2+1 - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- call_phi_near jsr mulu16_sel // unsigned int x3_6 = mulu16_sel(x3, $10000/6, 1) // [82] mulu16_sel::return#2 = mulu16_sel::return#12 @@ -5073,7 +5073,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- call_phi_near jsr mulu16_sel // unsigned int x4 = mulu16_sel(x3, x1, 0) // [88] mulu16_sel::return#10 = mulu16_sel::return#12 -- vwuz1=vwuz2 @@ -5096,7 +5096,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- call_phi_near jsr mulu16_sel // unsigned int x5 = mulu16_sel(x4, x1, 0) // [93] mulu16_sel::return#11 = mulu16_sel::return#12 @@ -5222,7 +5222,7 @@ print_uint: { ldx.z w+1 // [113] call print_uchar // [144] phi from print_uint to print_uchar [phi:print_uint->print_uchar] - // [144] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy + // [144] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -5230,7 +5230,7 @@ print_uint: { ldx.z w // [115] call print_uchar // [144] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] - // [144] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy + // [144] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -5359,7 +5359,7 @@ mulu16_sel: { lda.z v1+1 sta.z mul16u.a+1 // [137] mul16u::b#0 = mulu16_sel::v2#5 - // [138] call mul16u + // [138] call mul16u -- call_phi_near jsr mul16u // [139] mul16u::return#0 = mul16u::res#2 // mulu16_sel::@1 @@ -5406,7 +5406,7 @@ print_uchar: { // Table of hexadecimal digits // [108] phi from print_uchar to print_char [phi:print_uchar->print_char] // [108] phi print_char_cursor#36 = print_char_cursor#12 [phi:print_uchar->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy + // [108] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -5419,7 +5419,7 @@ print_uchar: { // [150] call print_char // [108] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [108] phi print_char_cursor#36 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy + // [108] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/sqr-delta.log b/src/test/ref/sqr-delta.log index 8e9d5d606..a1c585f80 100644 --- a/src/test/ref/sqr-delta.log +++ b/src/test/ref/sqr-delta.log @@ -307,7 +307,7 @@ ASSEMBLER BEFORE OPTIMIZATION main: { .label __0 = $a // [1] call ifunc - // [6] phi from main to ifunc [phi:main->ifunc] + // [6] phi from main to ifunc [phi:main->ifunc] -- call_phi_near ifunc_from_main: jsr ifunc // [2] ifunc::return#2 = ifunc::return#0 @@ -517,7 +517,7 @@ main: { .label __0 = $a // ifunc(8) // [1] call ifunc - // [6] phi from main to ifunc [phi:main->ifunc] + // [6] phi from main to ifunc [phi:main->ifunc] -- call_phi_near jsr ifunc // ifunc(8) // [2] ifunc::return#2 = ifunc::return#0 diff --git a/src/test/ref/stack-relative-addressing.log b/src/test/ref/stack-relative-addressing.log index 086bef0c7..997b6394f 100644 --- a/src/test/ref/stack-relative-addressing.log +++ b/src/test/ref/stack-relative-addressing.log @@ -123,7 +123,7 @@ main: { pha lda #'3' pha - // [1] call peek_stack + // [1] call peek_stack -- call_phi_near // Then call a function jsr peek_stack jmp __b1 @@ -209,7 +209,7 @@ main: { lda #'3' pha // peek_stack() - // [1] call peek_stack + // [1] call peek_stack -- call_phi_near // Then call a function jsr peek_stack // main::@1 diff --git a/src/test/ref/stars-2.log b/src/test/ref/stars-2.log index ef8de9f69..41f56edd7 100644 --- a/src/test/ref/stars-2.log +++ b/src/test/ref/stars-2.log @@ -3903,7 +3903,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -3911,7 +3911,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -3947,7 +3947,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -3988,7 +3988,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -4000,7 +4000,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln jmp __breturn } @@ -4008,7 +4008,7 @@ cputc: { main: { .label i = $17 // [28] call clrscr - // [61] phi from main to clrscr [phi:main->clrscr] + // [61] phi from main to clrscr [phi:main->clrscr] -- call_phi_near clrscr_from_main: jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] @@ -4036,7 +4036,7 @@ main: { // [33] call printf_uchar // [77] phi from main::@2 to printf_uchar [phi:main::@2->printf_uchar] printf_uchar_from___b2: - // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#0 [phi:main::@2->printf_uchar#0] -- register_copy + // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#0 [phi:main::@2->printf_uchar#0] -- call_phi_near jsr printf_uchar // [34] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -4051,7 +4051,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [84] phi printf_str::s#5 = main::s [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 + // [84] phi printf_str::s#5 = main::s [phi:main::@3->printf_str#1] -- call_phi_near lda #s @@ -4066,7 +4066,7 @@ main: { // [37] call printf_uchar // [77] phi from main::@4 to printf_uchar [phi:main::@4->printf_uchar] printf_uchar_from___b4: - // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#1 [phi:main::@4->printf_uchar#0] -- register_copy + // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#1 [phi:main::@4->printf_uchar#0] -- call_phi_near jsr printf_uchar // [38] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: @@ -4081,7 +4081,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [84] phi printf_str::s#5 = main::s1 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 + // [84] phi printf_str::s#5 = main::s1 [phi:main::@5->printf_str#1] -- call_phi_near lda #s1 @@ -4226,7 +4226,7 @@ cputln: { sta.z conio_cursor_x // [58] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [59] call cscroll + // [59] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -4349,7 +4349,7 @@ printf_uchar: { // [79] uctoa::value#1 = printf_uchar::uvalue#2 // [80] call uctoa // Format number into buffer - // [106] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] + // [106] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] -- call_phi_near uctoa_from___b1: jsr uctoa jmp __b2 @@ -4359,7 +4359,7 @@ printf_uchar: { lda printf_buffer // [82] call printf_number_buffer // Print using format - // [125] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] + // [125] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] -- call_phi_near printf_number_buffer_from___b2: jsr printf_number_buffer jmp __breturn @@ -4430,7 +4430,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [133] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [133] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -4449,7 +4449,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [133] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [133] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -4465,7 +4465,7 @@ cscroll: { memset_from___b3: // [143] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [143] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [143] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -4481,7 +4481,7 @@ cscroll: { memset_from___b4: // [143] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [143] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [143] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -4606,7 +4606,7 @@ uctoa: { // [119] uctoa_append::value#0 = uctoa::value#2 // [120] uctoa_append::sub#0 = uctoa::digit_value#0 // [121] call uctoa_append - // [151] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] + // [151] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near uctoa_append_from___b5: jsr uctoa_append // [122] uctoa_append::return#0 = uctoa_append::value#2 @@ -4664,7 +4664,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [84] phi printf_str::s#5 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 + // [84] phi printf_str::s#5 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near lda #buffer_digits @@ -5278,12 +5278,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] + // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [8] return @@ -5312,7 +5312,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -5351,7 +5351,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -5362,7 +5362,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln rts } @@ -5371,7 +5371,7 @@ main: { .label i = $17 // clrscr() // [28] call clrscr - // [61] phi from main to clrscr [phi:main->clrscr] + // [61] phi from main to clrscr [phi:main->clrscr] -- call_phi_near jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] // [29] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 @@ -5396,7 +5396,7 @@ main: { ldx stars,y // [33] call printf_uchar // [77] phi from main::@2 to printf_uchar [phi:main::@2->printf_uchar] - // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#0 [phi:main::@2->printf_uchar#0] -- register_copy + // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#0 [phi:main::@2->printf_uchar#0] -- call_phi_near jsr printf_uchar // [34] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 @@ -5408,7 +5408,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [84] phi printf_str::s#5 = main::s [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 + // [84] phi printf_str::s#5 = main::s [phi:main::@3->printf_str#1] -- call_phi_near lda #s @@ -5421,7 +5421,7 @@ main: { ldx stars+5,y // [37] call printf_uchar // [77] phi from main::@4 to printf_uchar [phi:main::@4->printf_uchar] - // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#1 [phi:main::@4->printf_uchar#0] -- register_copy + // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#1 [phi:main::@4->printf_uchar#0] -- call_phi_near jsr printf_uchar // [38] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 @@ -5433,7 +5433,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [84] phi printf_str::s#5 = main::s1 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 + // [84] phi printf_str::s#5 = main::s1 [phi:main::@5->printf_str#1] -- call_phi_near lda #s1 @@ -5579,7 +5579,7 @@ cputln: { // [58] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [59] call cscroll + // [59] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -5702,7 +5702,7 @@ printf_uchar: { // [79] uctoa::value#1 = printf_uchar::uvalue#2 // [80] call uctoa // Format number into buffer - // [106] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] + // [106] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] -- call_phi_near jsr uctoa // printf_uchar::@2 // printf_number_buffer(putc, printf_buffer, format) @@ -5710,7 +5710,7 @@ printf_uchar: { lda printf_buffer // [82] call printf_number_buffer // Print using format - // [125] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] + // [125] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] -- call_phi_near jsr printf_number_buffer // printf_uchar::@return // } @@ -5775,7 +5775,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [133] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [133] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -5791,7 +5791,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [133] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [133] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -5804,7 +5804,7 @@ cscroll: { // [143] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [143] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [143] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [143] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -5817,7 +5817,7 @@ cscroll: { // [143] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [143] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [143] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [143] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -5940,7 +5940,7 @@ uctoa: { // [119] uctoa_append::value#0 = uctoa::value#2 // [120] uctoa_append::sub#0 = uctoa::digit_value#0 // [121] call uctoa_append - // [151] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] + // [151] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near jsr uctoa_append // uctoa_append(buffer++, value, digit_value) // [122] uctoa_append::return#0 = uctoa_append::value#2 @@ -5992,7 +5992,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [84] phi printf_str::s#5 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 + // [84] phi printf_str::s#5 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near lda #buffer_digits diff --git a/src/test/ref/static-init-code-0.log b/src/test/ref/static-init-code-0.log index 30a96a03e..1f7fcb3d1 100644 --- a/src/test/ref/static-init-code-0.log +++ b/src/test/ref/static-init-code-0.log @@ -161,7 +161,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [4] call main + // [4] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -246,7 +246,7 @@ __start: { sta.z c2 // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [4] call main + // [4] call main -- call_phi_near jsr main // __start::@return // [5] return diff --git a/src/test/ref/strcmp-0.log b/src/test/ref/strcmp-0.log index 3f97576c7..9481ebe15 100644 --- a/src/test/ref/strcmp-0.log +++ b/src/test/ref/strcmp-0.log @@ -6231,7 +6231,7 @@ __start: { // [5] conio_textcolor = LIGHT_BLUE -- vbuz1=vbuc1 lda #LIGHT_BLUE sta.z conio_textcolor - // [6] call conio_c64_init + // [6] call conio_c64_init -- call_phi_near jsr conio_c64_init // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -6239,7 +6239,7 @@ __start: { // __start::@1 __b1: // [8] call main - // [28] phi from __start::@1 to main [phi:__start::@1->main] + // [28] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -6275,7 +6275,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [14] gotoxy::y#2 = conio_c64_init::line#2 - // [15] call gotoxy + // [15] call gotoxy -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -6316,7 +6316,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [24] call cputln + // [24] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -6328,7 +6328,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [27] call cputln + // [27] call cputln -- call_phi_near jsr cputln jmp __breturn } @@ -6342,7 +6342,7 @@ main: { sta.z strcmp.s2 lda #>str2 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str1 [phi:main->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str1 [phi:main->strcmp#1] -- call_phi_near lda #str1 @@ -6364,7 +6364,7 @@ main: { lda #>message sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#0 [phi:main::@2->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@2->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@2->assert_cmp#2] -- call_phi_near lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -6381,7 +6381,7 @@ main: { sta.z strcmp.s2 lda #>str21 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str11 [phi:main::@3->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str11 [phi:main::@3->strcmp#1] -- call_phi_near lda #str11 @@ -6403,7 +6403,7 @@ main: { lda #>message1 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#1 [phi:main::@4->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@4->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@4->assert_cmp#2] -- call_phi_near lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -6420,7 +6420,7 @@ main: { sta.z strcmp.s2 lda #>str11 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str12 [phi:main::@5->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str12 [phi:main::@5->strcmp#1] -- call_phi_near lda #str12 @@ -6442,7 +6442,7 @@ main: { lda #>message2 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#2 [phi:main::@6->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@6->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@6->assert_cmp#2] -- call_phi_near lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -6459,7 +6459,7 @@ main: { sta.z strcmp.s2 lda #>str13 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str13 [phi:main::@7->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str13 [phi:main::@7->strcmp#1] -- call_phi_near lda #str13 @@ -6481,7 +6481,7 @@ main: { lda #>message3 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#3 [phi:main::@8->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@8->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@8->assert_cmp#2] -- call_phi_near lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -6498,7 +6498,7 @@ main: { sta.z strcmp.s2 lda #>str14 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str14 [phi:main::@9->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str14 [phi:main::@9->strcmp#1] -- call_phi_near lda #str14 @@ -6520,7 +6520,7 @@ main: { lda #>message4 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#4 [phi:main::@10->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@10->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@10->assert_cmp#2] -- call_phi_near lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -6537,7 +6537,7 @@ main: { sta.z strcmp.s2 lda #>str25 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str15 [phi:main::@11->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str15 [phi:main::@11->strcmp#1] -- call_phi_near lda #str15 @@ -6559,7 +6559,7 @@ main: { lda #>message5 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#5 [phi:main::@12->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@12->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@12->assert_cmp#2] -- call_phi_near lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -6576,7 +6576,7 @@ main: { sta.z strcmp.s2 lda #>str26 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str16 [phi:main::@13->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str16 [phi:main::@13->strcmp#1] -- call_phi_near lda #str16 @@ -6598,7 +6598,7 @@ main: { lda #>message6 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#6 [phi:main::@14->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@14->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@14->assert_cmp#2] -- call_phi_near lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -6615,7 +6615,7 @@ main: { sta.z strcmp.s2 lda #>str27 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str16 [phi:main::@15->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str16 [phi:main::@15->strcmp#1] -- call_phi_near lda #str16 @@ -6637,7 +6637,7 @@ main: { lda #>message7 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#7 [phi:main::@16->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@16->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@16->assert_cmp#2] -- call_phi_near lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -6659,7 +6659,7 @@ main: { sta.z strncmp.s2 lda #>str28 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str18 [phi:main::@17->strncmp#2] -- pbuz1=pbuc1 + // [181] phi strncmp::s1#0 = main::str18 [phi:main::@17->strncmp#2] -- call_phi_near lda #str18 @@ -6681,7 +6681,7 @@ main: { lda #>message8 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#8 [phi:main::@18->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@18->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@18->assert_cmp#2] -- call_phi_near lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -6703,7 +6703,7 @@ main: { sta.z strncmp.s2 lda #>str29 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str19 [phi:main::@19->strncmp#2] -- pbuz1=pbuc1 + // [181] phi strncmp::s1#0 = main::str19 [phi:main::@19->strncmp#2] -- call_phi_near lda #str19 @@ -6725,7 +6725,7 @@ main: { lda #>message9 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#9 [phi:main::@20->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@20->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@20->assert_cmp#2] -- call_phi_near lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -6747,7 +6747,7 @@ main: { sta.z strncmp.s2 lda #>str210 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str21 [phi:main::@21->strncmp#2] -- pbuz1=pbuc1 + // [181] phi strncmp::s1#0 = main::str21 [phi:main::@21->strncmp#2] -- call_phi_near lda #str21 @@ -6769,7 +6769,7 @@ main: { lda #>message10 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#10 [phi:main::@22->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@22->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@22->assert_cmp#2] -- call_phi_near lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -6791,7 +6791,7 @@ main: { sta.z strncmp.s2 lda #>str211 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str111 [phi:main::@23->strncmp#2] -- pbuz1=pbuc1 + // [181] phi strncmp::s1#0 = main::str111 [phi:main::@23->strncmp#2] -- call_phi_near lda #str111 @@ -6813,7 +6813,7 @@ main: { lda #>message11 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#11 [phi:main::@24->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@24->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@24->assert_cmp#2] -- call_phi_near lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -6835,7 +6835,7 @@ main: { sta.z strncmp.s2 lda #>str212 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str12 [phi:main::@25->strncmp#2] -- pbuz1=pbuc1 + // [181] phi strncmp::s1#0 = main::str12 [phi:main::@25->strncmp#2] -- call_phi_near lda #str12 @@ -6857,7 +6857,7 @@ main: { lda #>message12 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#12 [phi:main::@26->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@26->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@26->assert_cmp#2] -- call_phi_near lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -6879,7 +6879,7 @@ main: { sta.z memcmp.str2 lda #>__35 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::str12 [phi:main::@27->memcmp#2] -- pvoz1=pvoc1 + // [193] phi memcmp::str1#4 = (const void *)main::str12 [phi:main::@27->memcmp#2] -- call_phi_near lda #str12 @@ -6901,7 +6901,7 @@ main: { lda #>message13 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#13 [phi:main::@28->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@28->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@28->assert_cmp#2] -- call_phi_near lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -6923,7 +6923,7 @@ main: { sta.z memcmp.str2 lda #>str13 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::str13 [phi:main::@29->memcmp#2] -- pvoz1=pvoc1 + // [193] phi memcmp::str1#4 = (const void *)main::str13 [phi:main::@29->memcmp#2] -- call_phi_near lda #str13 @@ -6945,7 +6945,7 @@ main: { lda #>message14 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#14 [phi:main::@30->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@30->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@30->assert_cmp#2] -- call_phi_near lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -6967,7 +6967,7 @@ main: { sta.z memcmp.str2 lda #>__39 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::$38 [phi:main::@31->memcmp#2] -- pvoz1=pvoc1 + // [193] phi memcmp::str1#4 = (const void *)main::$38 [phi:main::@31->memcmp#2] -- call_phi_near lda #<__38 sta.z memcmp.str1 lda #>__38 @@ -6989,7 +6989,7 @@ main: { lda #>message15 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#15 [phi:main::@32->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@32->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@32->assert_cmp#2] -- call_phi_near lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -7011,7 +7011,7 @@ main: { sta.z memcmp.str2 lda #>str111 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::str14 [phi:main::@33->memcmp#2] -- pvoz1=pvoc1 + // [193] phi memcmp::str1#4 = (const void *)main::str14 [phi:main::@33->memcmp#2] -- call_phi_near lda #str14 @@ -7033,7 +7033,7 @@ main: { lda #>message16 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#16 [phi:main::@34->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@34->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@34->assert_cmp#2] -- call_phi_near lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -7250,7 +7250,7 @@ cputln: { sta.z conio_cursor_x // [131] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [132] call cscroll + // [132] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -7401,7 +7401,7 @@ assert_cmp: { // [153] call textcolor // [219] phi from assert_cmp::@8 to textcolor [phi:assert_cmp::@8->textcolor] textcolor_from___b8: - // [219] phi textcolor::color#2 = RED [phi:assert_cmp::@8->textcolor#0] -- vbuaa=vbuc1 + // [219] phi textcolor::color#2 = RED [phi:assert_cmp::@8->textcolor#0] -- call_phi_near lda #RED jsr textcolor // [154] phi from assert_cmp::@8 to assert_cmp::@12 [phi:assert_cmp::@8->assert_cmp::@12] @@ -7417,7 +7417,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s2 [phi:assert_cmp::@12->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = assert_cmp::s2 [phi:assert_cmp::@12->printf_str#1] -- call_phi_near lda #s2 @@ -7431,7 +7431,7 @@ assert_cmp: { // [157] call printf_schar // [231] phi from assert_cmp::@13 to printf_schar [phi:assert_cmp::@13->printf_schar] printf_schar_from___b13: - // [231] phi printf_schar::value#3 = printf_schar::value#1 [phi:assert_cmp::@13->printf_schar#0] -- register_copy + // [231] phi printf_schar::value#3 = printf_schar::value#1 [phi:assert_cmp::@13->printf_schar#0] -- call_phi_near jsr printf_schar // [158] phi from assert_cmp::@13 to assert_cmp::@14 [phi:assert_cmp::@13->assert_cmp::@14] __b14_from___b13: @@ -7446,7 +7446,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s3 [phi:assert_cmp::@14->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = assert_cmp::s3 [phi:assert_cmp::@14->printf_str#1] -- call_phi_near lda #s3 @@ -7460,7 +7460,7 @@ assert_cmp: { // [161] call printf_schar // [231] phi from assert_cmp::@15 to printf_schar [phi:assert_cmp::@15->printf_schar] printf_schar_from___b15: - // [231] phi printf_schar::value#3 = printf_schar::value#2 [phi:assert_cmp::@15->printf_schar#0] -- register_copy + // [231] phi printf_schar::value#3 = printf_schar::value#2 [phi:assert_cmp::@15->printf_schar#0] -- call_phi_near jsr printf_schar // [162] phi from assert_cmp::@15 to assert_cmp::@16 [phi:assert_cmp::@15->assert_cmp::@16] __b16_from___b15: @@ -7475,7 +7475,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s4 [phi:assert_cmp::@16->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = assert_cmp::s4 [phi:assert_cmp::@16->printf_str#1] -- call_phi_near lda #s4 @@ -7488,7 +7488,7 @@ assert_cmp: { // [165] call printf_string // [242] phi from assert_cmp::@17 to printf_string [phi:assert_cmp::@17->printf_string] printf_string_from___b17: - // [242] phi printf_string::str#2 = printf_string::str#1 [phi:assert_cmp::@17->printf_string#0] -- register_copy + // [242] phi printf_string::str#2 = printf_string::str#1 [phi:assert_cmp::@17->printf_string#0] -- call_phi_near jsr printf_string // [166] phi from assert_cmp::@17 to assert_cmp::@18 [phi:assert_cmp::@17->assert_cmp::@18] __b18_from___b17: @@ -7503,7 +7503,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@18->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@18->printf_str#1] -- call_phi_near lda #s1 @@ -7522,7 +7522,7 @@ assert_cmp: { // [170] call textcolor // [219] phi from assert_cmp::@1 to textcolor [phi:assert_cmp::@1->textcolor] textcolor_from___b1: - // [219] phi textcolor::color#2 = GREEN [phi:assert_cmp::@1->textcolor#0] -- vbuaa=vbuc1 + // [219] phi textcolor::color#2 = GREEN [phi:assert_cmp::@1->textcolor#0] -- call_phi_near lda #GREEN jsr textcolor // [171] phi from assert_cmp::@1 to assert_cmp::@9 [phi:assert_cmp::@1->assert_cmp::@9] @@ -7538,7 +7538,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s [phi:assert_cmp::@9->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = assert_cmp::s [phi:assert_cmp::@9->printf_str#1] -- call_phi_near lda #s @@ -7551,7 +7551,7 @@ assert_cmp: { // [174] call printf_string // [242] phi from assert_cmp::@10 to printf_string [phi:assert_cmp::@10->printf_string] printf_string_from___b10: - // [242] phi printf_string::str#2 = printf_string::str#0 [phi:assert_cmp::@10->printf_string#0] -- register_copy + // [242] phi printf_string::str#2 = printf_string::str#0 [phi:assert_cmp::@10->printf_string#0] -- call_phi_near jsr printf_string // [175] phi from assert_cmp::@10 to assert_cmp::@11 [phi:assert_cmp::@10->assert_cmp::@11] __b11_from___b10: @@ -7566,7 +7566,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@11->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@11->printf_str#1] -- call_phi_near lda #s1 @@ -7819,7 +7819,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [246] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [246] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -7838,7 +7838,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [246] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [246] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -7854,7 +7854,7 @@ cscroll: { memset_from___b3: // [256] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [256] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [256] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -7869,7 +7869,7 @@ cscroll: { // [256] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] memset_from___b4: // [256] phi memset::c#4 = memset::c#1 [phi:cscroll::@4->memset#0] -- register_copy - // [256] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [256] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -7988,7 +7988,7 @@ printf_schar: { __b2: // [237] uctoa::value#1 = (char)printf_schar::value#5 // [238] call uctoa - // [264] phi from printf_schar::@2 to uctoa [phi:printf_schar::@2->uctoa] + // [264] phi from printf_schar::@2 to uctoa [phi:printf_schar::@2->uctoa] -- call_phi_near uctoa_from___b2: jsr uctoa jmp __b3 @@ -7998,7 +7998,7 @@ printf_schar: { lda printf_buffer // [240] call printf_number_buffer // Print using format - // [283] phi from printf_schar::@3 to printf_number_buffer [phi:printf_schar::@3->printf_number_buffer] + // [283] phi from printf_schar::@3 to printf_number_buffer [phi:printf_schar::@3->printf_number_buffer] -- call_phi_near printf_number_buffer_from___b3: jsr printf_number_buffer jmp __breturn @@ -8029,7 +8029,7 @@ printf_string: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- register_copy + // [222] phi printf_str::s#10 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- call_phi_near jsr printf_str jmp __breturn // printf_string::@return @@ -8239,7 +8239,7 @@ uctoa: { // [277] uctoa_append::value#0 = uctoa::value#2 // [278] uctoa_append::sub#0 = uctoa::digit_value#0 // [279] call uctoa_append - // [291] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] + // [291] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near uctoa_append_from___b5: jsr uctoa_append // [280] uctoa_append::return#0 = uctoa_append::value#2 @@ -8297,7 +8297,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near lda #buffer_digits @@ -9187,12 +9187,12 @@ __start: { lda #LIGHT_BLUE sta.z conio_textcolor // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [6] call conio_c64_init + // [6] call conio_c64_init -- call_phi_near jsr conio_c64_init // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [8] call main - // [28] phi from __start::@1 to main [phi:__start::@1->main] + // [28] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [9] return @@ -9221,7 +9221,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [14] gotoxy::y#2 = conio_c64_init::line#2 - // [15] call gotoxy + // [15] call gotoxy -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -9260,7 +9260,7 @@ cputc: { // [23] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [24] call cputln + // [24] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -9271,7 +9271,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [27] call cputln + // [27] call cputln -- call_phi_near jsr cputln rts } @@ -9285,7 +9285,7 @@ main: { sta.z strcmp.s2 lda #>str2 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str1 [phi:main->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str1 [phi:main->strcmp#1] -- call_phi_near lda #str1 @@ -9306,7 +9306,7 @@ main: { lda #>message sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#0 [phi:main::@2->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@2->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@2->assert_cmp#2] -- call_phi_near lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -9320,7 +9320,7 @@ main: { sta.z strcmp.s2 lda #>str21 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str11 [phi:main::@3->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str11 [phi:main::@3->strcmp#1] -- call_phi_near lda #str11 @@ -9341,7 +9341,7 @@ main: { lda #>message1 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#1 [phi:main::@4->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@4->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@4->assert_cmp#2] -- call_phi_near lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -9355,7 +9355,7 @@ main: { sta.z strcmp.s2 lda #>str11 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str12 [phi:main::@5->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str12 [phi:main::@5->strcmp#1] -- call_phi_near lda #str12 @@ -9376,7 +9376,7 @@ main: { lda #>message2 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#2 [phi:main::@6->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@6->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@6->assert_cmp#2] -- call_phi_near lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -9390,7 +9390,7 @@ main: { sta.z strcmp.s2 lda #>str13 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str13 [phi:main::@7->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str13 [phi:main::@7->strcmp#1] -- call_phi_near lda #str13 @@ -9411,7 +9411,7 @@ main: { lda #>message3 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#3 [phi:main::@8->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@8->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@8->assert_cmp#2] -- call_phi_near lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -9425,7 +9425,7 @@ main: { sta.z strcmp.s2 lda #>str14 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str14 [phi:main::@9->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str14 [phi:main::@9->strcmp#1] -- call_phi_near lda #str14 @@ -9446,7 +9446,7 @@ main: { lda #>message4 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#4 [phi:main::@10->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@10->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@10->assert_cmp#2] -- call_phi_near lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -9460,7 +9460,7 @@ main: { sta.z strcmp.s2 lda #>str25 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str15 [phi:main::@11->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str15 [phi:main::@11->strcmp#1] -- call_phi_near lda #str15 @@ -9481,7 +9481,7 @@ main: { lda #>message5 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#5 [phi:main::@12->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@12->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@12->assert_cmp#2] -- call_phi_near lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -9495,7 +9495,7 @@ main: { sta.z strcmp.s2 lda #>str26 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str16 [phi:main::@13->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str16 [phi:main::@13->strcmp#1] -- call_phi_near lda #str16 @@ -9516,7 +9516,7 @@ main: { lda #>message6 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#6 [phi:main::@14->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@14->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@14->assert_cmp#2] -- call_phi_near lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -9530,7 +9530,7 @@ main: { sta.z strcmp.s2 lda #>str27 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str16 [phi:main::@15->strcmp#1] -- pbuz1=pbuc1 + // [134] phi strcmp::s1#0 = main::str16 [phi:main::@15->strcmp#1] -- call_phi_near lda #str16 @@ -9551,7 +9551,7 @@ main: { lda #>message7 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#7 [phi:main::@16->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@16->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@16->assert_cmp#2] -- call_phi_near lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -9570,7 +9570,7 @@ main: { sta.z strncmp.s2 lda #>str28 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str18 [phi:main::@17->strncmp#2] -- pbuz1=pbuc1 + // [181] phi strncmp::s1#0 = main::str18 [phi:main::@17->strncmp#2] -- call_phi_near lda #str18 @@ -9591,7 +9591,7 @@ main: { lda #>message8 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#8 [phi:main::@18->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@18->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@18->assert_cmp#2] -- call_phi_near lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -9610,7 +9610,7 @@ main: { sta.z strncmp.s2 lda #>str29 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str19 [phi:main::@19->strncmp#2] -- pbuz1=pbuc1 + // [181] phi strncmp::s1#0 = main::str19 [phi:main::@19->strncmp#2] -- call_phi_near lda #str19 @@ -9631,7 +9631,7 @@ main: { lda #>message9 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#9 [phi:main::@20->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@20->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@20->assert_cmp#2] -- call_phi_near lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -9650,7 +9650,7 @@ main: { sta.z strncmp.s2 lda #>str210 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str21 [phi:main::@21->strncmp#2] -- pbuz1=pbuc1 + // [181] phi strncmp::s1#0 = main::str21 [phi:main::@21->strncmp#2] -- call_phi_near lda #str21 @@ -9671,7 +9671,7 @@ main: { lda #>message10 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#10 [phi:main::@22->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@22->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@22->assert_cmp#2] -- call_phi_near lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -9690,7 +9690,7 @@ main: { sta.z strncmp.s2 lda #>str211 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str111 [phi:main::@23->strncmp#2] -- pbuz1=pbuc1 + // [181] phi strncmp::s1#0 = main::str111 [phi:main::@23->strncmp#2] -- call_phi_near lda #str111 @@ -9711,7 +9711,7 @@ main: { lda #>message11 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#11 [phi:main::@24->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@24->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@24->assert_cmp#2] -- call_phi_near lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -9730,7 +9730,7 @@ main: { sta.z strncmp.s2 lda #>str212 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str12 [phi:main::@25->strncmp#2] -- pbuz1=pbuc1 + // [181] phi strncmp::s1#0 = main::str12 [phi:main::@25->strncmp#2] -- call_phi_near lda #str12 @@ -9751,7 +9751,7 @@ main: { lda #>message12 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#12 [phi:main::@26->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@26->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@26->assert_cmp#2] -- call_phi_near lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -9770,7 +9770,7 @@ main: { sta.z memcmp.str2 lda #>__35 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::str12 [phi:main::@27->memcmp#2] -- pvoz1=pvoc1 + // [193] phi memcmp::str1#4 = (const void *)main::str12 [phi:main::@27->memcmp#2] -- call_phi_near lda #str12 @@ -9791,7 +9791,7 @@ main: { lda #>message13 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#13 [phi:main::@28->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@28->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@28->assert_cmp#2] -- call_phi_near lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -9810,7 +9810,7 @@ main: { sta.z memcmp.str2 lda #>str13 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::str13 [phi:main::@29->memcmp#2] -- pvoz1=pvoc1 + // [193] phi memcmp::str1#4 = (const void *)main::str13 [phi:main::@29->memcmp#2] -- call_phi_near lda #str13 @@ -9831,7 +9831,7 @@ main: { lda #>message14 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#14 [phi:main::@30->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@30->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@30->assert_cmp#2] -- call_phi_near lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -9850,7 +9850,7 @@ main: { sta.z memcmp.str2 lda #>__39 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::$38 [phi:main::@31->memcmp#2] -- pvoz1=pvoc1 + // [193] phi memcmp::str1#4 = (const void *)main::$38 [phi:main::@31->memcmp#2] -- call_phi_near lda #<__38 sta.z memcmp.str1 lda #>__38 @@ -9871,7 +9871,7 @@ main: { lda #>message15 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#15 [phi:main::@32->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@32->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@32->assert_cmp#2] -- call_phi_near lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -9890,7 +9890,7 @@ main: { sta.z memcmp.str2 lda #>str111 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::str14 [phi:main::@33->memcmp#2] -- pvoz1=pvoc1 + // [193] phi memcmp::str1#4 = (const void *)main::str14 [phi:main::@33->memcmp#2] -- call_phi_near lda #str14 @@ -9911,7 +9911,7 @@ main: { lda #>message16 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#16 [phi:main::@34->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@34->assert_cmp#2] -- vbsz1=vbsc1 + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@34->assert_cmp#2] -- call_phi_near lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -10128,7 +10128,7 @@ cputln: { // [131] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [132] call cscroll + // [132] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -10275,7 +10275,7 @@ assert_cmp: { // textcolor(RED) // [153] call textcolor // [219] phi from assert_cmp::@8 to textcolor [phi:assert_cmp::@8->textcolor] - // [219] phi textcolor::color#2 = RED [phi:assert_cmp::@8->textcolor#0] -- vbuaa=vbuc1 + // [219] phi textcolor::color#2 = RED [phi:assert_cmp::@8->textcolor#0] -- call_phi_near lda #RED jsr textcolor // [154] phi from assert_cmp::@8 to assert_cmp::@12 [phi:assert_cmp::@8->assert_cmp::@12] @@ -10288,7 +10288,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s2 [phi:assert_cmp::@12->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = assert_cmp::s2 [phi:assert_cmp::@12->printf_str#1] -- call_phi_near lda #s2 @@ -10300,7 +10300,7 @@ assert_cmp: { ldx.z expect // [157] call printf_schar // [231] phi from assert_cmp::@13 to printf_schar [phi:assert_cmp::@13->printf_schar] - // [231] phi printf_schar::value#3 = printf_schar::value#1 [phi:assert_cmp::@13->printf_schar#0] -- register_copy + // [231] phi printf_schar::value#3 = printf_schar::value#1 [phi:assert_cmp::@13->printf_schar#0] -- call_phi_near jsr printf_schar // [158] phi from assert_cmp::@13 to assert_cmp::@14 [phi:assert_cmp::@13->assert_cmp::@14] // assert_cmp::@14 @@ -10312,7 +10312,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s3 [phi:assert_cmp::@14->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = assert_cmp::s3 [phi:assert_cmp::@14->printf_str#1] -- call_phi_near lda #s3 @@ -10324,7 +10324,7 @@ assert_cmp: { ldx.z actual // [161] call printf_schar // [231] phi from assert_cmp::@15 to printf_schar [phi:assert_cmp::@15->printf_schar] - // [231] phi printf_schar::value#3 = printf_schar::value#2 [phi:assert_cmp::@15->printf_schar#0] -- register_copy + // [231] phi printf_schar::value#3 = printf_schar::value#2 [phi:assert_cmp::@15->printf_schar#0] -- call_phi_near jsr printf_schar // [162] phi from assert_cmp::@15 to assert_cmp::@16 [phi:assert_cmp::@15->assert_cmp::@16] // assert_cmp::@16 @@ -10336,7 +10336,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s4 [phi:assert_cmp::@16->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = assert_cmp::s4 [phi:assert_cmp::@16->printf_str#1] -- call_phi_near lda #s4 @@ -10347,7 +10347,7 @@ assert_cmp: { // [164] printf_string::str#1 = assert_cmp::message#17 // [165] call printf_string // [242] phi from assert_cmp::@17 to printf_string [phi:assert_cmp::@17->printf_string] - // [242] phi printf_string::str#2 = printf_string::str#1 [phi:assert_cmp::@17->printf_string#0] -- register_copy + // [242] phi printf_string::str#2 = printf_string::str#1 [phi:assert_cmp::@17->printf_string#0] -- call_phi_near jsr printf_string // [166] phi from assert_cmp::@17 to assert_cmp::@18 [phi:assert_cmp::@17->assert_cmp::@18] // assert_cmp::@18 @@ -10359,7 +10359,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@18->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@18->printf_str#1] -- call_phi_near lda #s1 @@ -10375,7 +10375,7 @@ assert_cmp: { // textcolor(GREEN) // [170] call textcolor // [219] phi from assert_cmp::@1 to textcolor [phi:assert_cmp::@1->textcolor] - // [219] phi textcolor::color#2 = GREEN [phi:assert_cmp::@1->textcolor#0] -- vbuaa=vbuc1 + // [219] phi textcolor::color#2 = GREEN [phi:assert_cmp::@1->textcolor#0] -- call_phi_near lda #GREEN jsr textcolor // [171] phi from assert_cmp::@1 to assert_cmp::@9 [phi:assert_cmp::@1->assert_cmp::@9] @@ -10388,7 +10388,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s [phi:assert_cmp::@9->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = assert_cmp::s [phi:assert_cmp::@9->printf_str#1] -- call_phi_near lda #s @@ -10399,7 +10399,7 @@ assert_cmp: { // [173] printf_string::str#0 = assert_cmp::message#17 // [174] call printf_string // [242] phi from assert_cmp::@10 to printf_string [phi:assert_cmp::@10->printf_string] - // [242] phi printf_string::str#2 = printf_string::str#0 [phi:assert_cmp::@10->printf_string#0] -- register_copy + // [242] phi printf_string::str#2 = printf_string::str#0 [phi:assert_cmp::@10->printf_string#0] -- call_phi_near jsr printf_string // [175] phi from assert_cmp::@10 to assert_cmp::@11 [phi:assert_cmp::@10->assert_cmp::@11] // assert_cmp::@11 @@ -10411,7 +10411,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@11->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@11->printf_str#1] -- call_phi_near lda #s1 @@ -10650,7 +10650,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [246] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [246] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -10666,7 +10666,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [246] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [246] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -10679,7 +10679,7 @@ cscroll: { // [256] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [256] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [256] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [256] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -10692,7 +10692,7 @@ cscroll: { // [214] call memset // [256] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [256] phi memset::c#4 = memset::c#1 [phi:cscroll::@4->memset#0] -- register_copy - // [256] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [256] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -10812,7 +10812,7 @@ printf_schar: { // uctoa(uvalue, printf_buffer.digits, format.radix) // [237] uctoa::value#1 = (char)printf_schar::value#5 // [238] call uctoa - // [264] phi from printf_schar::@2 to uctoa [phi:printf_schar::@2->uctoa] + // [264] phi from printf_schar::@2 to uctoa [phi:printf_schar::@2->uctoa] -- call_phi_near jsr uctoa // printf_schar::@3 // printf_number_buffer(putc, printf_buffer, format) @@ -10820,7 +10820,7 @@ printf_schar: { lda printf_buffer // [240] call printf_number_buffer // Print using format - // [283] phi from printf_schar::@3 to printf_number_buffer [phi:printf_schar::@3->printf_number_buffer] + // [283] phi from printf_schar::@3 to printf_number_buffer [phi:printf_schar::@3->printf_number_buffer] -- call_phi_near jsr printf_number_buffer // printf_schar::@return // } @@ -10847,7 +10847,7 @@ printf_string: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- register_copy + // [222] phi printf_str::s#10 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- call_phi_near jsr printf_str // printf_string::@return // } @@ -11050,7 +11050,7 @@ uctoa: { // [277] uctoa_append::value#0 = uctoa::value#2 // [278] uctoa_append::sub#0 = uctoa::digit_value#0 // [279] call uctoa_append - // [291] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] + // [291] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near jsr uctoa_append // uctoa_append(buffer++, value, digit_value) // [280] uctoa_append::return#0 = uctoa_append::value#2 @@ -11102,7 +11102,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 + // [222] phi printf_str::s#10 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near lda #buffer_digits diff --git a/src/test/ref/strcpy-0.log b/src/test/ref/strcpy-0.log index 9303adf6e..aaa3b83f8 100644 --- a/src/test/ref/strcpy-0.log +++ b/src/test/ref/strcpy-0.log @@ -223,7 +223,7 @@ main: { sta.z str_cpy.dst lda #>dst1 sta.z str_cpy.dst+1 - // [5] phi str_cpy::src#4 = main::src [phi:main->str_cpy#1] -- pbuz1=pbuc1 + // [5] phi str_cpy::src#4 = main::src [phi:main->str_cpy#1] -- call_phi_near lda #src @@ -242,7 +242,7 @@ main: { sta.z str_cpy.dst lda #>dst2 sta.z str_cpy.dst+1 - // [5] phi str_cpy::src#4 = main::src1 [phi:main::@1->str_cpy#1] -- pbuz1=pbuc1 + // [5] phi str_cpy::src#4 = main::src1 [phi:main::@1->str_cpy#1] -- call_phi_near lda #src1 @@ -372,7 +372,7 @@ main: { sta.z str_cpy.dst lda #>dst1 sta.z str_cpy.dst+1 - // [5] phi str_cpy::src#4 = main::src [phi:main->str_cpy#1] -- pbuz1=pbuc1 + // [5] phi str_cpy::src#4 = main::src [phi:main->str_cpy#1] -- call_phi_near lda #src @@ -388,7 +388,7 @@ main: { sta.z str_cpy.dst lda #>dst2 sta.z str_cpy.dst+1 - // [5] phi str_cpy::src#4 = main::src1 [phi:main::@1->str_cpy#1] -- pbuz1=pbuc1 + // [5] phi str_cpy::src#4 = main::src1 [phi:main::@1->str_cpy#1] -- call_phi_near lda #src1 diff --git a/src/test/ref/string-const-consolidation-noroot.log b/src/test/ref/string-const-consolidation-noroot.log index 3595bcc09..5c73a3a86 100644 --- a/src/test/ref/string-const-consolidation-noroot.log +++ b/src/test/ref/string-const-consolidation-noroot.log @@ -272,7 +272,7 @@ main: { // [1] call print // [7] phi from main to print [phi:main->print] print_from_main: - // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- pbuz1=pbuc1 + // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- call_phi_near lda #<$400 sta.z screen lda #>$400 @@ -286,7 +286,7 @@ main: { // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] print_from___b1: - // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- register_copy + // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- call_phi_near jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -296,7 +296,7 @@ main: { // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] print_from___b2: - // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- register_copy + // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- call_phi_near jsr print jmp __breturn // main::@return @@ -419,7 +419,7 @@ main: { // print(rex1) // [1] call print // [7] phi from main to print [phi:main->print] - // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- pbuz1=pbuc1 + // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- call_phi_near lda #<$400 sta.z screen lda #>$400 @@ -430,14 +430,14 @@ main: { // print(rex2) // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] - // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- register_copy + // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- call_phi_near jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // print("rex") // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] - // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- register_copy + // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/string-const-consolidation-root.log b/src/test/ref/string-const-consolidation-root.log index 6a83cad43..fde1b3fb2 100644 --- a/src/test/ref/string-const-consolidation-root.log +++ b/src/test/ref/string-const-consolidation-root.log @@ -419,7 +419,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call print1 - // [5] phi from main to print1 [phi:main->print1] + // [5] phi from main to print1 [phi:main->print1] -- call_phi_near print1_from_main: jsr print1 // [2] phi from main to main::@1 [phi:main->main::@1] @@ -428,7 +428,7 @@ main: { // main::@1 __b1: // [3] call print2 - // [12] phi from main::@1 to print2 [phi:main::@1->print2] + // [12] phi from main::@1 to print2 [phi:main::@1->print2] -- call_phi_near print2_from___b1: jsr print2 jmp __breturn @@ -447,7 +447,7 @@ print1: { sta.z screen lda #>$400 sta.z screen+1 - // [19] phi print::s#9 = string_0 [phi:print1->print#1] -- pbuz1=pbuc1 + // [19] phi print::s#9 = string_0 [phi:print1->print#1] -- call_phi_near lda #string_0 @@ -462,7 +462,7 @@ print1: { // [19] phi from print1::@1 to print [phi:print1::@1->print] print_from___b1: // [19] phi screen#36 = screen#12 [phi:print1::@1->print#0] -- register_copy - // [19] phi print::s#9 = string_1 [phi:print1::@1->print#1] -- pbuz1=pbuc1 + // [19] phi print::s#9 = string_1 [phi:print1::@1->print#1] -- call_phi_near lda #string_1 @@ -477,7 +477,7 @@ print1: { // [19] phi from print1::@2 to print [phi:print1::@2->print] print_from___b2: // [19] phi screen#36 = screen#12 [phi:print1::@2->print#0] -- register_copy - // [19] phi print::s#9 = s [phi:print1::@2->print#1] -- pbuz1=pbuc1 + // [19] phi print::s#9 = s [phi:print1::@2->print#1] -- call_phi_near lda #s @@ -495,7 +495,7 @@ print2: { // [19] phi from print2 to print [phi:print2->print] print_from_print2: // [19] phi screen#36 = screen#12 [phi:print2->print#0] -- register_copy - // [19] phi print::s#9 = string_0 [phi:print2->print#1] -- pbuz1=pbuc1 + // [19] phi print::s#9 = string_0 [phi:print2->print#1] -- call_phi_near lda #string_0 @@ -510,7 +510,7 @@ print2: { // [19] phi from print2::@1 to print [phi:print2::@1->print] print_from___b1: // [19] phi screen#36 = screen#12 [phi:print2::@1->print#0] -- register_copy - // [19] phi print::s#9 = string_1 [phi:print2::@1->print#1] -- pbuz1=pbuc1 + // [19] phi print::s#9 = string_1 [phi:print2::@1->print#1] -- call_phi_near lda #string_1 @@ -525,7 +525,7 @@ print2: { // [19] phi from print2::@2 to print [phi:print2::@2->print] print_from___b2: // [19] phi screen#36 = screen#12 [phi:print2::@2->print#0] -- register_copy - // [19] phi print::s#9 = s1 [phi:print2::@2->print#1] -- pbuz1=pbuc1 + // [19] phi print::s#9 = s1 [phi:print2::@2->print#1] -- call_phi_near lda #s1 @@ -674,13 +674,13 @@ Score: 677 main: { // print1() // [1] call print1 - // [5] phi from main to print1 [phi:main->print1] + // [5] phi from main to print1 [phi:main->print1] -- call_phi_near jsr print1 // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // print2() // [3] call print2 - // [12] phi from main::@1 to print2 [phi:main::@1->print2] + // [12] phi from main::@1 to print2 [phi:main::@1->print2] -- call_phi_near jsr print2 // main::@return // } @@ -697,7 +697,7 @@ print1: { sta.z screen lda #>$400 sta.z screen+1 - // [19] phi print::s#9 = string_0 [phi:print1->print#1] -- pbuz1=pbuc1 + // [19] phi print::s#9 = string_0 [phi:print1->print#1] -- call_phi_near lda #string_0 @@ -709,7 +709,7 @@ print1: { // [8] call print // [19] phi from print1::@1 to print [phi:print1::@1->print] // [19] phi screen#36 = screen#12 [phi:print1::@1->print#0] -- register_copy - // [19] phi print::s#9 = string_1 [phi:print1::@1->print#1] -- pbuz1=pbuc1 + // [19] phi print::s#9 = string_1 [phi:print1::@1->print#1] -- call_phi_near lda #string_1 @@ -721,7 +721,7 @@ print1: { // [10] call print // [19] phi from print1::@2 to print [phi:print1::@2->print] // [19] phi screen#36 = screen#12 [phi:print1::@2->print#0] -- register_copy - // [19] phi print::s#9 = s [phi:print1::@2->print#1] -- pbuz1=pbuc1 + // [19] phi print::s#9 = s [phi:print1::@2->print#1] -- call_phi_near lda #s @@ -738,7 +738,7 @@ print2: { // [13] call print // [19] phi from print2 to print [phi:print2->print] // [19] phi screen#36 = screen#12 [phi:print2->print#0] -- register_copy - // [19] phi print::s#9 = string_0 [phi:print2->print#1] -- pbuz1=pbuc1 + // [19] phi print::s#9 = string_0 [phi:print2->print#1] -- call_phi_near lda #string_0 @@ -750,7 +750,7 @@ print2: { // [15] call print // [19] phi from print2::@1 to print [phi:print2::@1->print] // [19] phi screen#36 = screen#12 [phi:print2::@1->print#0] -- register_copy - // [19] phi print::s#9 = string_1 [phi:print2::@1->print#1] -- pbuz1=pbuc1 + // [19] phi print::s#9 = string_1 [phi:print2::@1->print#1] -- call_phi_near lda #string_1 @@ -762,7 +762,7 @@ print2: { // [17] call print // [19] phi from print2::@2 to print [phi:print2::@2->print] // [19] phi screen#36 = screen#12 [phi:print2::@2->print#0] -- register_copy - // [19] phi print::s#9 = s1 [phi:print2::@2->print#1] -- pbuz1=pbuc1 + // [19] phi print::s#9 = s1 [phi:print2::@2->print#1] -- call_phi_near lda #s1 diff --git a/src/test/ref/string-const-consolidation.log b/src/test/ref/string-const-consolidation.log index 6861b8596..3a4a13034 100644 --- a/src/test/ref/string-const-consolidation.log +++ b/src/test/ref/string-const-consolidation.log @@ -272,7 +272,7 @@ main: { // [1] call print // [7] phi from main to print [phi:main->print] print_from_main: - // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- pbuz1=pbuc1 + // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- call_phi_near lda #<$400 sta.z screen lda #>$400 @@ -286,7 +286,7 @@ main: { // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] print_from___b1: - // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- register_copy + // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- call_phi_near jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -296,7 +296,7 @@ main: { // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] print_from___b2: - // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- register_copy + // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- call_phi_near jsr print jmp __breturn // main::@return @@ -418,7 +418,7 @@ main: { // print(rex1) // [1] call print // [7] phi from main to print [phi:main->print] - // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- pbuz1=pbuc1 + // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- call_phi_near lda #<$400 sta.z screen lda #>$400 @@ -429,14 +429,14 @@ main: { // print(rex2) // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] - // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- register_copy + // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- call_phi_near jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // print("rex") // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] - // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- register_copy + // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/string-escapes-2.log b/src/test/ref/string-escapes-2.log index 7c799cfa5..084de2ae1 100644 --- a/src/test/ref/string-escapes-2.log +++ b/src/test/ref/string-escapes-2.log @@ -206,7 +206,7 @@ main: { // [4] chrout::c#0 = MESSAGE[main::i#2] -- vbuaa=pbuc1_derefidx_vbuz1 ldy.z i lda MESSAGE,y - // [5] call chrout + // [5] call chrout -- call_phi_near jsr chrout jmp __b3 // main::@3 @@ -311,7 +311,7 @@ main: { // [4] chrout::c#0 = MESSAGE[main::i#2] -- vbuaa=pbuc1_derefidx_vbuz1 ldy.z i lda MESSAGE,y - // [5] call chrout + // [5] call chrout -- call_phi_near jsr chrout // main::@3 // chrout(MESSAGE[i++]); diff --git a/src/test/ref/string-escapes-4.log b/src/test/ref/string-escapes-4.log index d3c3418c1..45c3b0f47 100644 --- a/src/test/ref/string-escapes-4.log +++ b/src/test/ref/string-escapes-4.log @@ -244,7 +244,7 @@ main: { // [5] chrout::petscii = MSG1[main::i#2] -- vbuz1=pbuc1_derefidx_vbuxx lda MSG1,x sta.z chrout.petscii - // [6] call chrout + // [6] call chrout -- call_phi_near jsr chrout jmp __b4 // main::@4 @@ -366,7 +366,7 @@ main: { // [5] chrout::petscii = MSG1[main::i#2] -- vbuz1=pbuc1_derefidx_vbuxx lda MSG1,x sta.z chrout.petscii - // [6] call chrout + // [6] call chrout -- call_phi_near jsr chrout // main::@4 // SCREEN1[i] = MSG2[i] diff --git a/src/test/ref/string-pointer-problem.log b/src/test/ref/string-pointer-problem.log index 4d68344cc..a696bea92 100644 --- a/src/test/ref/string-pointer-problem.log +++ b/src/test/ref/string-pointer-problem.log @@ -199,7 +199,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call set_process_name - // [3] phi from main to set_process_name [phi:main->set_process_name] + // [3] phi from main to set_process_name [phi:main->set_process_name] -- call_phi_near set_process_name_from_main: jsr set_process_name jmp __breturn @@ -332,7 +332,7 @@ Score: 948 main: { // set_process_name("keyboard") // [1] call set_process_name - // [3] phi from main to set_process_name [phi:main->set_process_name] + // [3] phi from main to set_process_name [phi:main->set_process_name] -- call_phi_near jsr set_process_name // main::@return // } diff --git a/src/test/ref/strip.log b/src/test/ref/strip.log index 5cea80c20..6e81e0dd7 100644 --- a/src/test/ref/strip.log +++ b/src/test/ref/strip.log @@ -443,7 +443,7 @@ main: { strip_from_main: // [9] phi strip::c#3 = ' ' [phi:main->strip#0] -- vbuxx=vbuc1 ldx #' ' - // [9] phi strip::dest#0 = msg1 [phi:main->strip#1] -- pbuz1=pbuc1 + // [9] phi strip::dest#0 = msg1 [phi:main->strip#1] -- call_phi_near lda #msg1 @@ -462,7 +462,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [20] phi print::msg#4 = msg1 [phi:main::@1->print#1] -- pbuz1=pbuc1 + // [20] phi print::msg#4 = msg1 [phi:main::@1->print#1] -- call_phi_near lda #msg1 @@ -478,7 +478,7 @@ main: { strip_from___b2: // [9] phi strip::c#3 = 'y' [phi:main::@2->strip#0] -- vbuxx=vbuc1 ldx #'y' - // [9] phi strip::dest#0 = msg2 [phi:main::@2->strip#1] -- pbuz1=pbuc1 + // [9] phi strip::dest#0 = msg2 [phi:main::@2->strip#1] -- call_phi_near lda #msg2 @@ -493,7 +493,7 @@ main: { // [20] phi from main::@3 to print [phi:main::@3->print] print_from___b3: // [20] phi screen#17 = screen#12 [phi:main::@3->print#0] -- register_copy - // [20] phi print::msg#4 = msg2 [phi:main::@3->print#1] -- pbuz1=pbuc1 + // [20] phi print::msg#4 = msg2 [phi:main::@3->print#1] -- call_phi_near lda #msg2 @@ -722,7 +722,7 @@ main: { // [9] phi from main to strip [phi:main->strip] // [9] phi strip::c#3 = ' ' [phi:main->strip#0] -- vbuxx=vbuc1 ldx #' ' - // [9] phi strip::dest#0 = msg1 [phi:main->strip#1] -- pbuz1=pbuc1 + // [9] phi strip::dest#0 = msg1 [phi:main->strip#1] -- call_phi_near lda #msg1 @@ -738,7 +738,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [20] phi print::msg#4 = msg1 [phi:main::@1->print#1] -- pbuz1=pbuc1 + // [20] phi print::msg#4 = msg1 [phi:main::@1->print#1] -- call_phi_near lda #msg1 @@ -751,7 +751,7 @@ main: { // [9] phi from main::@2 to strip [phi:main::@2->strip] // [9] phi strip::c#3 = 'y' [phi:main::@2->strip#0] -- vbuxx=vbuc1 ldx #'y' - // [9] phi strip::dest#0 = msg2 [phi:main::@2->strip#1] -- pbuz1=pbuc1 + // [9] phi strip::dest#0 = msg2 [phi:main::@2->strip#1] -- call_phi_near lda #msg2 @@ -763,7 +763,7 @@ main: { // [7] call print // [20] phi from main::@3 to print [phi:main::@3->print] // [20] phi screen#17 = screen#12 [phi:main::@3->print#0] -- register_copy - // [20] phi print::msg#4 = msg2 [phi:main::@3->print#1] -- pbuz1=pbuc1 + // [20] phi print::msg#4 = msg2 [phi:main::@3->print#1] -- call_phi_near lda #msg2 diff --git a/src/test/ref/strncat-0.log b/src/test/ref/strncat-0.log index 0e88b069b..7b681effa 100644 --- a/src/test/ref/strncat-0.log +++ b/src/test/ref/strncat-0.log @@ -446,7 +446,7 @@ main: { // [1] call strncat // [11] phi from main to strncat [phi:main->strncat] strncat_from_main: - // [11] phi strncat::source#7 = hello [phi:main->strncat#0] -- pbuz1=pbuc1 + // [11] phi strncat::source#7 = hello [phi:main->strncat#0] -- call_phi_near lda #hello @@ -460,7 +460,7 @@ main: { // [3] call strncat // [11] phi from main::@3 to strncat [phi:main::@3->strncat] strncat_from___b3: - // [11] phi strncat::source#7 = space [phi:main::@3->strncat#0] -- pbuz1=pbuc1 + // [11] phi strncat::source#7 = space [phi:main::@3->strncat#0] -- call_phi_near lda #space @@ -474,7 +474,7 @@ main: { // [5] call strncat // [11] phi from main::@4 to strncat [phi:main::@4->strncat] strncat_from___b4: - // [11] phi strncat::source#7 = world [phi:main::@4->strncat#0] -- pbuz1=pbuc1 + // [11] phi strncat::source#7 = world [phi:main::@4->strncat#0] -- call_phi_near lda #world @@ -709,7 +709,7 @@ main: { // strncat(build, hello, 5) // [1] call strncat // [11] phi from main to strncat [phi:main->strncat] - // [11] phi strncat::source#7 = hello [phi:main->strncat#0] -- pbuz1=pbuc1 + // [11] phi strncat::source#7 = hello [phi:main->strncat#0] -- call_phi_near lda #hello @@ -720,7 +720,7 @@ main: { // strncat(build, space, 5) // [3] call strncat // [11] phi from main::@3 to strncat [phi:main::@3->strncat] - // [11] phi strncat::source#7 = space [phi:main::@3->strncat#0] -- pbuz1=pbuc1 + // [11] phi strncat::source#7 = space [phi:main::@3->strncat#0] -- call_phi_near lda #space @@ -731,7 +731,7 @@ main: { // strncat(build, world, 5) // [5] call strncat // [11] phi from main::@4 to strncat [phi:main::@4->strncat] - // [11] phi strncat::source#7 = world [phi:main::@4->strncat#0] -- pbuz1=pbuc1 + // [11] phi strncat::source#7 = world [phi:main::@4->strncat#0] -- call_phi_near lda #world diff --git a/src/test/ref/struct-11.log b/src/test/ref/struct-11.log index a876813e0..a13b51663 100644 --- a/src/test/ref/struct-11.log +++ b/src/test/ref/struct-11.log @@ -368,7 +368,7 @@ main: { sta.z print_person.person_name+1 // [5] phi idx#14 = 0 [phi:main->print_person#1] -- vbuyy=vbuc1 ldy #0 - // [5] phi print_person::person_id#2 = print_person::person_id#0 [phi:main->print_person#2] -- register_copy + // [5] phi print_person::person_id#2 = print_person::person_id#0 [phi:main->print_person#2] -- call_phi_near jsr print_person jmp __b1 // main::@1 @@ -384,7 +384,7 @@ main: { lda #>henriette+OFFSET_STRUCT_PERSON_NAME sta.z print_person.person_name+1 // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#1] -- register_copy - // [5] phi print_person::person_id#2 = print_person::person_id#1 [phi:main::@1->print_person#2] -- register_copy + // [5] phi print_person::person_id#2 = print_person::person_id#1 [phi:main::@1->print_person#2] -- call_phi_near jsr print_person jmp __breturn // main::@return @@ -548,7 +548,7 @@ main: { sta.z print_person.person_name+1 // [5] phi idx#14 = 0 [phi:main->print_person#1] -- vbuyy=vbuc1 ldy #0 - // [5] phi print_person::person_id#2 = print_person::person_id#0 [phi:main->print_person#2] -- register_copy + // [5] phi print_person::person_id#2 = print_person::person_id#0 [phi:main->print_person#2] -- call_phi_near jsr print_person // main::@1 // print_person(henriette) @@ -562,7 +562,7 @@ main: { lda #>henriette+OFFSET_STRUCT_PERSON_NAME sta.z print_person.person_name+1 // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#1] -- register_copy - // [5] phi print_person::person_id#2 = print_person::person_id#1 [phi:main::@1->print_person#2] -- register_copy + // [5] phi print_person::person_id#2 = print_person::person_id#1 [phi:main::@1->print_person#2] -- call_phi_near jsr print_person // main::@return // } diff --git a/src/test/ref/struct-11b.log b/src/test/ref/struct-11b.log index 6f04d1233..4ab349f17 100644 --- a/src/test/ref/struct-11b.log +++ b/src/test/ref/struct-11b.log @@ -306,7 +306,7 @@ main: { print_person_from_main: // [5] phi idx#20 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person_initials#4 = jesper_initials [phi:main->print_person#1] -- pbuz1=pbuc1 + // [5] phi print_person::person_initials#4 = jesper_initials [phi:main->print_person#1] -- call_phi_near lda #jesper_initials @@ -321,7 +321,7 @@ main: { // [5] phi from main::@1 to print_person [phi:main::@1->print_person] print_person_from___b1: // [5] phi idx#20 = idx#14 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person_initials#4 = henry_initials [phi:main::@1->print_person#1] -- pbuz1=pbuc1 + // [5] phi print_person::person_initials#4 = henry_initials [phi:main::@1->print_person#1] -- call_phi_near lda #henry_initials @@ -452,7 +452,7 @@ main: { // [5] phi from main to print_person [phi:main->print_person] // [5] phi idx#20 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person_initials#4 = jesper_initials [phi:main->print_person#1] -- pbuz1=pbuc1 + // [5] phi print_person::person_initials#4 = jesper_initials [phi:main->print_person#1] -- call_phi_near lda #jesper_initials @@ -464,7 +464,7 @@ main: { // [3] call print_person // [5] phi from main::@1 to print_person [phi:main::@1->print_person] // [5] phi idx#20 = idx#14 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person_initials#4 = henry_initials [phi:main::@1->print_person#1] -- pbuz1=pbuc1 + // [5] phi print_person::person_initials#4 = henry_initials [phi:main::@1->print_person#1] -- call_phi_near lda #henry_initials diff --git a/src/test/ref/struct-12.log b/src/test/ref/struct-12.log index 7a8731e6a..9f897fa31 100644 --- a/src/test/ref/struct-12.log +++ b/src/test/ref/struct-12.log @@ -378,7 +378,7 @@ main: { // [5] phi idx#14 = 0 [phi:main->print_person#1] -- vbuz1=vbuc1 lda #0 sta.z idx - // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- vbuxx=vbuc1 + // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- call_phi_near ldx #jesper_id jsr print_person jmp __b1 @@ -400,7 +400,7 @@ main: { lda #>henriette_name sta.z print_person.person_name+1 // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#1] -- register_copy - // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- vbuxx=vbuc1 + // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- call_phi_near ldx #henriette_id jsr print_person jmp __breturn @@ -575,7 +575,7 @@ main: { // [5] phi idx#14 = 0 [phi:main->print_person#1] -- vbuz1=vbuc1 lda #0 sta.z idx - // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- vbuxx=vbuc1 + // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- call_phi_near ldx #jesper_id jsr print_person // main::@1 @@ -596,7 +596,7 @@ main: { lda #>henriette_name sta.z print_person.person_name+1 // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#1] -- register_copy - // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- vbuxx=vbuc1 + // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- call_phi_near ldx #henriette_id jsr print_person // main::@return diff --git a/src/test/ref/struct-22.log b/src/test/ref/struct-22.log index d064fca8f..cd1a81ea7 100644 --- a/src/test/ref/struct-22.log +++ b/src/test/ref/struct-22.log @@ -224,7 +224,7 @@ main: { // [9] phi from main to print [phi:main->print] print_from_main: // [9] phi print::p_y#2 = print::p_y#0 [phi:main->print#0] -- register_copy - // [9] phi print::p_x#2 = print::p_x#0 [phi:main->print#1] -- register_copy + // [9] phi print::p_x#2 = print::p_x#0 [phi:main->print#1] -- call_phi_near jsr print jmp __b1 // main::@1 @@ -237,7 +237,7 @@ main: { // [9] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [9] phi print::p_y#2 = print::p_y#1 [phi:main::@1->print#0] -- register_copy - // [9] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#1] -- register_copy + // [9] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#1] -- call_phi_near jsr print jmp __breturn // main::@return @@ -348,7 +348,7 @@ main: { // [4] call print // [9] phi from main to print [phi:main->print] // [9] phi print::p_y#2 = print::p_y#0 [phi:main->print#0] -- register_copy - // [9] phi print::p_x#2 = print::p_x#0 [phi:main->print#1] -- register_copy + // [9] phi print::p_x#2 = print::p_x#0 [phi:main->print#1] -- call_phi_near jsr print // main::@1 // print(point2) @@ -359,7 +359,7 @@ main: { // [7] call print // [9] phi from main::@1 to print [phi:main::@1->print] // [9] phi print::p_y#2 = print::p_y#1 [phi:main::@1->print#0] -- register_copy - // [9] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#1] -- register_copy + // [9] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#1] -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/struct-23.log b/src/test/ref/struct-23.log index 2dac27139..963dfa9ad 100644 --- a/src/test/ref/struct-23.log +++ b/src/test/ref/struct-23.log @@ -329,7 +329,7 @@ main: { getPoint_from_main: // [16] phi getPoint::return_y#2 = 3 [phi:main->getPoint#0] -- vbuaa=vbuc1 lda #3 - // [16] phi getPoint::return_x#2 = 2 [phi:main->getPoint#1] -- vbuxx=vbuc1 + // [16] phi getPoint::return_x#2 = 2 [phi:main->getPoint#1] -- call_phi_near ldx #2 jsr getPoint // [2] getPoint::return_x#0 = getPoint::return_x#2 @@ -352,7 +352,7 @@ main: { getPoint_from___b1: // [16] phi getPoint::return_y#2 = 5 [phi:main::@1->getPoint#0] -- vbuaa=vbuc1 lda #5 - // [16] phi getPoint::return_x#2 = 4 [phi:main::@1->getPoint#1] -- vbuxx=vbuc1 + // [16] phi getPoint::return_x#2 = 4 [phi:main::@1->getPoint#1] -- call_phi_near ldx #4 jsr getPoint // [9] getPoint::return_x#1 = getPoint::return_x#2 @@ -461,7 +461,7 @@ main: { // [16] phi from main to getPoint [phi:main->getPoint] // [16] phi getPoint::return_y#2 = 3 [phi:main->getPoint#0] -- vbuaa=vbuc1 lda #3 - // [16] phi getPoint::return_x#2 = 2 [phi:main->getPoint#1] -- vbuxx=vbuc1 + // [16] phi getPoint::return_x#2 = 2 [phi:main->getPoint#1] -- call_phi_near ldx #2 jsr getPoint // __ma struct Point point1 = getPoint(2, 3) @@ -485,7 +485,7 @@ main: { // [16] phi from main::@1 to getPoint [phi:main::@1->getPoint] // [16] phi getPoint::return_y#2 = 5 [phi:main::@1->getPoint#0] -- vbuaa=vbuc1 lda #5 - // [16] phi getPoint::return_x#2 = 4 [phi:main::@1->getPoint#1] -- vbuxx=vbuc1 + // [16] phi getPoint::return_x#2 = 4 [phi:main::@1->getPoint#1] -- call_phi_near ldx #4 jsr getPoint // __ma struct Point point2 = getPoint(4, 5) diff --git a/src/test/ref/struct-3.log b/src/test/ref/struct-3.log index c55db1bdc..5918d9eca 100644 --- a/src/test/ref/struct-3.log +++ b/src/test/ref/struct-3.log @@ -286,7 +286,7 @@ main: { print_from_main: // [5] phi idx#12 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print::p_x#2 = 1 [phi:main->print#1] -- vbuaa=vbuc1 + // [5] phi print::p_x#2 = 1 [phi:main->print#1] -- call_phi_near lda #1 jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -298,7 +298,7 @@ main: { // [5] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [5] phi idx#12 = idx#13 [phi:main::@1->print#0] -- register_copy - // [5] phi print::p_x#2 = 2 [phi:main::@1->print#1] -- vbuaa=vbuc1 + // [5] phi print::p_x#2 = 2 [phi:main::@1->print#1] -- call_phi_near lda #2 jsr print jmp __breturn @@ -387,7 +387,7 @@ main: { // [5] phi from main to print [phi:main->print] // [5] phi idx#12 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print::p_x#2 = 1 [phi:main->print#1] -- vbuaa=vbuc1 + // [5] phi print::p_x#2 = 1 [phi:main->print#1] -- call_phi_near lda #1 jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -396,7 +396,7 @@ main: { // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] // [5] phi idx#12 = idx#13 [phi:main::@1->print#0] -- register_copy - // [5] phi print::p_x#2 = 2 [phi:main::@1->print#1] -- vbuaa=vbuc1 + // [5] phi print::p_x#2 = 2 [phi:main::@1->print#1] -- call_phi_near lda #2 jsr print // main::@return diff --git a/src/test/ref/struct-44.log b/src/test/ref/struct-44.log index da5547970..f8aac3cdb 100644 --- a/src/test/ref/struct-44.log +++ b/src/test/ref/struct-44.log @@ -1316,7 +1316,7 @@ main: { // [13] phi print_circle::c_center_y#2 = print_circle::c_center_y#0 [phi:main->print_circle#1] -- register_copy // [13] phi print_circle::c_center_x#2 = print_circle::c_center_x#0 [phi:main->print_circle#2] -- register_copy // [13] phi print_circle::c_radius#2 = print_circle::c_radius#0 [phi:main->print_circle#3] -- register_copy - // [13] phi screen_line#61 = (char *) 1024+(unsigned int)$28*$a [phi:main->print_circle#4] -- pbuz1=pbuc1 + // [13] phi screen_line#61 = (char *) 1024+(unsigned int)$28*$a [phi:main->print_circle#4] -- call_phi_near lda #<$400+$28*$a sta.z screen_line lda #>$400+$28*$a @@ -1330,7 +1330,7 @@ main: { // [6] call print_ln // [30] phi from main::@1 to print_ln [phi:main::@1->print_ln] print_ln_from___b1: - // [30] phi screen_line#56 = screen_line#24 [phi:main::@1->print_ln#0] -- register_copy + // [30] phi screen_line#56 = screen_line#24 [phi:main::@1->print_ln#0] -- call_phi_near jsr print_ln jmp __b2 // main::@2 @@ -1360,7 +1360,7 @@ main: { // [13] phi print_circle::c_center_y#2 = print_circle::c_center_y#1 [phi:main::@2->print_circle#1] -- register_copy // [13] phi print_circle::c_center_x#2 = print_circle::c_center_x#1 [phi:main::@2->print_circle#2] -- register_copy // [13] phi print_circle::c_radius#2 = print_circle::c_radius#1 [phi:main::@2->print_circle#3] -- register_copy - // [13] phi screen_line#61 = screen_line#25 [phi:main::@2->print_circle#4] -- register_copy + // [13] phi screen_line#61 = screen_line#25 [phi:main::@2->print_circle#4] -- call_phi_near jsr print_circle jmp __breturn // main::@return @@ -1381,7 +1381,7 @@ print_circle: { // [33] phi screen_line#68 = screen_line#61 [phi:print_circle->print_str#0] -- register_copy // [33] phi screen_idx#68 = 0 [phi:print_circle->print_str#1] -- vbuxx=vbuc1 ldx #0 - // [33] phi print_str::str#8 = print_circle::str [phi:print_circle->print_str#2] -- pbuz1=pbuc1 + // [33] phi print_str::str#8 = print_circle::str [phi:print_circle->print_str#2] -- call_phi_near lda #str @@ -1394,7 +1394,7 @@ print_circle: { // [16] call print_uint // [40] phi from print_circle::@1 to print_uint [phi:print_circle::@1->print_uint] print_uint_from___b1: - // [40] phi print_uint::i#3 = print_uint::i#0 [phi:print_circle::@1->print_uint#0] -- register_copy + // [40] phi print_uint::i#3 = print_uint::i#0 [phi:print_circle::@1->print_uint#0] -- call_phi_near jsr print_uint // [17] phi from print_circle::@1 to print_circle::@2 [phi:print_circle::@1->print_circle::@2] __b2_from___b1: @@ -1406,7 +1406,7 @@ print_circle: { print_str_from___b2: // [33] phi screen_line#68 = screen_line#24 [phi:print_circle::@2->print_str#0] -- register_copy // [33] phi screen_idx#68 = screen_idx#25 [phi:print_circle::@2->print_str#1] -- register_copy - // [33] phi print_str::str#8 = print_circle::str1 [phi:print_circle::@2->print_str#2] -- pbuz1=pbuc1 + // [33] phi print_str::str#8 = print_circle::str1 [phi:print_circle::@2->print_str#2] -- call_phi_near lda #str1 @@ -1423,7 +1423,7 @@ print_circle: { // [20] call print_uint // [40] phi from print_circle::@3 to print_uint [phi:print_circle::@3->print_uint] print_uint_from___b3: - // [40] phi print_uint::i#3 = print_uint::i#1 [phi:print_circle::@3->print_uint#0] -- register_copy + // [40] phi print_uint::i#3 = print_uint::i#1 [phi:print_circle::@3->print_uint#0] -- call_phi_near jsr print_uint // [21] phi from print_circle::@3 to print_circle::@4 [phi:print_circle::@3->print_circle::@4] __b4_from___b3: @@ -1435,7 +1435,7 @@ print_circle: { print_str_from___b4: // [33] phi screen_line#68 = screen_line#24 [phi:print_circle::@4->print_str#0] -- register_copy // [33] phi screen_idx#68 = screen_idx#25 [phi:print_circle::@4->print_str#1] -- register_copy - // [33] phi print_str::str#8 = print_circle::str2 [phi:print_circle::@4->print_str#2] -- pbuz1=pbuc1 + // [33] phi print_str::str#8 = print_circle::str2 [phi:print_circle::@4->print_str#2] -- call_phi_near lda #str2 @@ -1452,7 +1452,7 @@ print_circle: { // [24] call print_uint // [40] phi from print_circle::@5 to print_uint [phi:print_circle::@5->print_uint] print_uint_from___b5: - // [40] phi print_uint::i#3 = print_uint::i#2 [phi:print_circle::@5->print_uint#0] -- register_copy + // [40] phi print_uint::i#3 = print_uint::i#2 [phi:print_circle::@5->print_uint#0] -- call_phi_near jsr print_uint // [25] phi from print_circle::@5 to print_circle::@6 [phi:print_circle::@5->print_circle::@6] __b6_from___b5: @@ -1464,7 +1464,7 @@ print_circle: { print_str_from___b6: // [33] phi screen_line#68 = screen_line#24 [phi:print_circle::@6->print_str#0] -- register_copy // [33] phi screen_idx#68 = screen_idx#25 [phi:print_circle::@6->print_str#1] -- register_copy - // [33] phi print_str::str#8 = print_circle::str3 [phi:print_circle::@6->print_str#2] -- pbuz1=pbuc1 + // [33] phi print_str::str#8 = print_circle::str3 [phi:print_circle::@6->print_str#2] -- call_phi_near lda #str3 @@ -1474,7 +1474,7 @@ print_circle: { // print_circle::@7 __b7: // [27] print_uchar::c#0 = print_circle::c_color#2 - // [28] call print_uchar + // [28] call print_uchar -- call_phi_near jsr print_uchar jmp __breturn // print_circle::@return @@ -1541,7 +1541,7 @@ print_str: { print_char_from___b2: // [65] phi screen_idx#54 = screen_idx#22 [phi:print_str::@2->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#22 [phi:print_str::@2->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#6 [phi:print_str::@2->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#6 [phi:print_str::@2->print_char#2] -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -1572,7 +1572,7 @@ print_uint: { print_char_from_print_uint: // [65] phi screen_idx#54 = screen_idx#22 [phi:print_uint->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#22 [phi:print_uint->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#0 [phi:print_uint->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#0 [phi:print_uint->print_char#2] -- call_phi_near jsr print_char jmp __b1 // print_uint::@1 @@ -1589,7 +1589,7 @@ print_uint: { print_char_from___b1: // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uint::@1->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uint::@1->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#1 [phi:print_uint::@1->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#1 [phi:print_uint::@1->print_char#2] -- call_phi_near jsr print_char jmp __b2 // print_uint::@2 @@ -1609,7 +1609,7 @@ print_uint: { print_char_from___b2: // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uint::@2->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uint::@2->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#2 [phi:print_uint::@2->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#2 [phi:print_uint::@2->print_char#2] -- call_phi_near jsr print_char jmp __b3 // print_uint::@3 @@ -1626,7 +1626,7 @@ print_uint: { print_char_from___b3: // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uint::@3->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uint::@3->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#3 [phi:print_uint::@3->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#3 [phi:print_uint::@3->print_char#2] -- call_phi_near jsr print_char jmp __breturn // print_uint::@return @@ -1652,7 +1652,7 @@ print_uchar: { print_char_from_print_uchar: // [65] phi screen_idx#54 = screen_idx#22 [phi:print_uchar->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#22 [phi:print_uchar->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#4 [phi:print_uchar->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#4 [phi:print_uchar->print_char#2] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -1668,7 +1668,7 @@ print_uchar: { print_char_from___b1: // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uchar::@1->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uchar::@1->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#5 [phi:print_uchar::@1->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#5 [phi:print_uchar::@1->print_char#2] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -1696,7 +1696,7 @@ print_char: { // [70] call print_ln // [30] phi from print_char::@1 to print_ln [phi:print_char::@1->print_ln] print_ln_from___b1: - // [30] phi screen_line#56 = screen_line#53 [phi:print_char::@1->print_ln#0] -- register_copy + // [30] phi screen_line#56 = screen_line#53 [phi:print_char::@1->print_ln#0] -- call_phi_near jsr print_ln // [71] phi from print_char::@1 to print_char::@return [phi:print_char::@1->print_char::@return] __breturn_from___b1: @@ -1957,7 +1957,7 @@ main: { // [13] phi print_circle::c_center_y#2 = print_circle::c_center_y#0 [phi:main->print_circle#1] -- register_copy // [13] phi print_circle::c_center_x#2 = print_circle::c_center_x#0 [phi:main->print_circle#2] -- register_copy // [13] phi print_circle::c_radius#2 = print_circle::c_radius#0 [phi:main->print_circle#3] -- register_copy - // [13] phi screen_line#61 = (char *) 1024+(unsigned int)$28*$a [phi:main->print_circle#4] -- pbuz1=pbuc1 + // [13] phi screen_line#61 = (char *) 1024+(unsigned int)$28*$a [phi:main->print_circle#4] -- call_phi_near lda #<$400+$28*$a sta.z screen_line lda #>$400+$28*$a @@ -1968,7 +1968,7 @@ main: { // print_ln() // [6] call print_ln // [30] phi from main::@1 to print_ln [phi:main::@1->print_ln] - // [30] phi screen_line#56 = screen_line#24 [phi:main::@1->print_ln#0] -- register_copy + // [30] phi screen_line#56 = screen_line#24 [phi:main::@1->print_ln#0] -- call_phi_near jsr print_ln // main::@2 // print_circle(c2) @@ -1996,7 +1996,7 @@ main: { // [13] phi print_circle::c_center_y#2 = print_circle::c_center_y#1 [phi:main::@2->print_circle#1] -- register_copy // [13] phi print_circle::c_center_x#2 = print_circle::c_center_x#1 [phi:main::@2->print_circle#2] -- register_copy // [13] phi print_circle::c_radius#2 = print_circle::c_radius#1 [phi:main::@2->print_circle#3] -- register_copy - // [13] phi screen_line#61 = screen_line#25 [phi:main::@2->print_circle#4] -- register_copy + // [13] phi screen_line#61 = screen_line#25 [phi:main::@2->print_circle#4] -- call_phi_near jsr print_circle // main::@return // } @@ -2016,7 +2016,7 @@ print_circle: { // [33] phi screen_line#68 = screen_line#61 [phi:print_circle->print_str#0] -- register_copy // [33] phi screen_idx#68 = 0 [phi:print_circle->print_str#1] -- vbuxx=vbuc1 ldx #0 - // [33] phi print_str::str#8 = print_circle::str [phi:print_circle->print_str#2] -- pbuz1=pbuc1 + // [33] phi print_str::str#8 = print_circle::str [phi:print_circle->print_str#2] -- call_phi_near lda #str @@ -2027,7 +2027,7 @@ print_circle: { // [15] print_uint::i#0 = print_circle::c_radius#2 // [16] call print_uint // [40] phi from print_circle::@1 to print_uint [phi:print_circle::@1->print_uint] - // [40] phi print_uint::i#3 = print_uint::i#0 [phi:print_circle::@1->print_uint#0] -- register_copy + // [40] phi print_uint::i#3 = print_uint::i#0 [phi:print_circle::@1->print_uint#0] -- call_phi_near jsr print_uint // [17] phi from print_circle::@1 to print_circle::@2 [phi:print_circle::@1->print_circle::@2] // print_circle::@2 @@ -2036,7 +2036,7 @@ print_circle: { // [33] phi from print_circle::@2 to print_str [phi:print_circle::@2->print_str] // [33] phi screen_line#68 = screen_line#24 [phi:print_circle::@2->print_str#0] -- register_copy // [33] phi screen_idx#68 = screen_idx#25 [phi:print_circle::@2->print_str#1] -- register_copy - // [33] phi print_str::str#8 = print_circle::str1 [phi:print_circle::@2->print_str#2] -- pbuz1=pbuc1 + // [33] phi print_str::str#8 = print_circle::str1 [phi:print_circle::@2->print_str#2] -- call_phi_near lda #str1 @@ -2051,7 +2051,7 @@ print_circle: { sta.z print_uint.i+1 // [20] call print_uint // [40] phi from print_circle::@3 to print_uint [phi:print_circle::@3->print_uint] - // [40] phi print_uint::i#3 = print_uint::i#1 [phi:print_circle::@3->print_uint#0] -- register_copy + // [40] phi print_uint::i#3 = print_uint::i#1 [phi:print_circle::@3->print_uint#0] -- call_phi_near jsr print_uint // [21] phi from print_circle::@3 to print_circle::@4 [phi:print_circle::@3->print_circle::@4] // print_circle::@4 @@ -2060,7 +2060,7 @@ print_circle: { // [33] phi from print_circle::@4 to print_str [phi:print_circle::@4->print_str] // [33] phi screen_line#68 = screen_line#24 [phi:print_circle::@4->print_str#0] -- register_copy // [33] phi screen_idx#68 = screen_idx#25 [phi:print_circle::@4->print_str#1] -- register_copy - // [33] phi print_str::str#8 = print_circle::str2 [phi:print_circle::@4->print_str#2] -- pbuz1=pbuc1 + // [33] phi print_str::str#8 = print_circle::str2 [phi:print_circle::@4->print_str#2] -- call_phi_near lda #str2 @@ -2075,7 +2075,7 @@ print_circle: { sta.z print_uint.i+1 // [24] call print_uint // [40] phi from print_circle::@5 to print_uint [phi:print_circle::@5->print_uint] - // [40] phi print_uint::i#3 = print_uint::i#2 [phi:print_circle::@5->print_uint#0] -- register_copy + // [40] phi print_uint::i#3 = print_uint::i#2 [phi:print_circle::@5->print_uint#0] -- call_phi_near jsr print_uint // [25] phi from print_circle::@5 to print_circle::@6 [phi:print_circle::@5->print_circle::@6] // print_circle::@6 @@ -2084,7 +2084,7 @@ print_circle: { // [33] phi from print_circle::@6 to print_str [phi:print_circle::@6->print_str] // [33] phi screen_line#68 = screen_line#24 [phi:print_circle::@6->print_str#0] -- register_copy // [33] phi screen_idx#68 = screen_idx#25 [phi:print_circle::@6->print_str#1] -- register_copy - // [33] phi print_str::str#8 = print_circle::str3 [phi:print_circle::@6->print_str#2] -- pbuz1=pbuc1 + // [33] phi print_str::str#8 = print_circle::str3 [phi:print_circle::@6->print_str#2] -- call_phi_near lda #str3 @@ -2093,7 +2093,7 @@ print_circle: { // print_circle::@7 // print_uchar(c.color) // [27] print_uchar::c#0 = print_circle::c_color#2 - // [28] call print_uchar + // [28] call print_uchar -- call_phi_near jsr print_uchar // print_circle::@return // } @@ -2156,7 +2156,7 @@ print_str: { // [65] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [65] phi screen_idx#54 = screen_idx#22 [phi:print_str::@2->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#22 [phi:print_str::@2->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#6 [phi:print_str::@2->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#6 [phi:print_str::@2->print_char#2] -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); @@ -2188,7 +2188,7 @@ print_uint: { // [65] phi from print_uint to print_char [phi:print_uint->print_char] // [65] phi screen_idx#54 = screen_idx#22 [phi:print_uint->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#22 [phi:print_uint->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#0 [phi:print_uint->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#0 [phi:print_uint->print_char#2] -- call_phi_near jsr print_char // print_uint::@1 // BYTE1(i) @@ -2205,7 +2205,7 @@ print_uint: { // [65] phi from print_uint::@1 to print_char [phi:print_uint::@1->print_char] // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uint::@1->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uint::@1->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#1 [phi:print_uint::@1->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#1 [phi:print_uint::@1->print_char#2] -- call_phi_near jsr print_char // print_uint::@2 // BYTE0(i) @@ -2225,7 +2225,7 @@ print_uint: { // [65] phi from print_uint::@2 to print_char [phi:print_uint::@2->print_char] // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uint::@2->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uint::@2->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#2 [phi:print_uint::@2->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#2 [phi:print_uint::@2->print_char#2] -- call_phi_near jsr print_char // print_uint::@3 // BYTE0(i) @@ -2242,7 +2242,7 @@ print_uint: { // [65] phi from print_uint::@3 to print_char [phi:print_uint::@3->print_char] // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uint::@3->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uint::@3->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#3 [phi:print_uint::@3->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#3 [phi:print_uint::@3->print_char#2] -- call_phi_near jsr print_char // print_uint::@return // } @@ -2268,7 +2268,7 @@ print_uchar: { // [65] phi from print_uchar to print_char [phi:print_uchar->print_char] // [65] phi screen_idx#54 = screen_idx#22 [phi:print_uchar->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#22 [phi:print_uchar->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#4 [phi:print_uchar->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#4 [phi:print_uchar->print_char#2] -- call_phi_near jsr print_char // print_uchar::@1 // c&0x0f @@ -2283,7 +2283,7 @@ print_uchar: { // [65] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uchar::@1->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uchar::@1->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#5 [phi:print_uchar::@1->print_char#2] -- register_copy + // [65] phi print_char::c#7 = print_char::c#5 [phi:print_uchar::@1->print_char#2] -- call_phi_near jsr print_char // print_uchar::@return // } @@ -2310,7 +2310,7 @@ print_char: { // print_ln() // [70] call print_ln // [30] phi from print_char::@1 to print_ln [phi:print_char::@1->print_ln] - // [30] phi screen_line#56 = screen_line#53 [phi:print_char::@1->print_ln#0] -- register_copy + // [30] phi screen_line#56 = screen_line#53 [phi:print_char::@1->print_ln#0] -- call_phi_near jsr print_ln // [71] phi from print_char::@1 to print_char::@return [phi:print_char::@1->print_char::@return] // [71] phi screen_line#24 = screen_line#25 [phi:print_char::@1->print_char::@return#0] -- register_copy diff --git a/src/test/ref/struct-5.log b/src/test/ref/struct-5.log index 562daa3bc..160d184c7 100644 --- a/src/test/ref/struct-5.log +++ b/src/test/ref/struct-5.log @@ -205,7 +205,7 @@ ASSEMBLER BEFORE OPTIMIZATION main: { .label SCREEN = $400 // [1] call point - // [5] phi from main to point [phi:main->point] + // [5] phi from main to point [phi:main->point] -- call_phi_near point_from_main: jsr point jmp __b1 @@ -281,7 +281,7 @@ main: { .label SCREEN = $400 // point() // [1] call point - // [5] phi from main to point [phi:main->point] + // [5] phi from main to point [phi:main->point] -- call_phi_near jsr point // main::@1 // SCREEN[0] = q.x diff --git a/src/test/ref/struct-pointer-ints.log b/src/test/ref/struct-pointer-ints.log index 439c9747a..929f043f6 100644 --- a/src/test/ref/struct-pointer-ints.log +++ b/src/test/ref/struct-pointer-ints.log @@ -198,7 +198,7 @@ main: { dey sta s,y bne !- - // [1] call update + // [1] call update -- call_phi_near jsr update jmp __breturn // main::@return @@ -279,7 +279,7 @@ main: { sta s,y bne !- // update(&s, 1000) - // [1] call update + // [1] call update -- call_phi_near jsr update // main::@return // } diff --git a/src/test/ref/struct-ptr-14.log b/src/test/ref/struct-ptr-14.log index f3667e527..62e3627d2 100644 --- a/src/test/ref/struct-ptr-14.log +++ b/src/test/ref/struct-ptr-14.log @@ -219,7 +219,7 @@ main: { sta p-1,y dey bne !- - // [1] call set + // [1] call set -- call_phi_near jsr set jmp __b1 // main::@1 @@ -311,7 +311,7 @@ main: { dey bne !- // set(q) - // [1] call set + // [1] call set -- call_phi_near jsr set // main::@1 // SCREEN[0] = q->x diff --git a/src/test/ref/struct-ptr-16.log b/src/test/ref/struct-ptr-16.log index efca071e2..ae180a3ec 100644 --- a/src/test/ref/struct-ptr-16.log +++ b/src/test/ref/struct-ptr-16.log @@ -510,7 +510,7 @@ main: { // [1] call get // [21] phi from main to get [phi:main->get] get_from_main: - // [21] phi get::i#2 = 0 [phi:main->get#0] -- vbuaa=vbuc1 + // [21] phi get::i#2 = 0 [phi:main->get#0] -- call_phi_near lda #0 jsr get // [2] get::return_x#0 = get::return_x#7 @@ -540,7 +540,7 @@ main: { // [10] call get // [21] phi from main::@1 to get [phi:main::@1->get] get_from___b1: - // [21] phi get::i#2 = get::i#1 [phi:main::@1->get#0] -- register_copy + // [21] phi get::i#2 = get::i#1 [phi:main::@1->get#0] -- call_phi_near jsr get // [11] get::return_x#1 = get::return_x#7 // [12] get::return_y#1 = get::return_y#7 @@ -731,7 +731,7 @@ main: { // get(0) // [1] call get // [21] phi from main to get [phi:main->get] - // [21] phi get::i#2 = 0 [phi:main->get#0] -- vbuaa=vbuc1 + // [21] phi get::i#2 = 0 [phi:main->get#0] -- call_phi_near lda #0 jsr get // get(0) @@ -757,7 +757,7 @@ main: { tya // [10] call get // [21] phi from main::@1 to get [phi:main::@1->get] - // [21] phi get::i#2 = get::i#1 [phi:main::@1->get#0] -- register_copy + // [21] phi get::i#2 = get::i#1 [phi:main::@1->get#0] -- call_phi_near jsr get // get(i) // [11] get::return_x#1 = get::return_x#7 diff --git a/src/test/ref/struct-ptr-17.log b/src/test/ref/struct-ptr-17.log index 25a9edc1e..21ef57152 100644 --- a/src/test/ref/struct-ptr-17.log +++ b/src/test/ref/struct-ptr-17.log @@ -337,7 +337,7 @@ main: { // [1] call get // [17] phi from main to get [phi:main->get] get_from_main: - // [17] phi get::return_x#2 = 0 [phi:main->get#0] -- vbuaa=vbuc1 + // [17] phi get::return_x#2 = 0 [phi:main->get#0] -- call_phi_near lda #0 jsr get // [2] get::return_x#0 = get::return_x#2 @@ -366,7 +366,7 @@ main: { // [8] call get // [17] phi from main::@1 to get [phi:main::@1->get] get_from___b1: - // [17] phi get::return_x#2 = get::i#1 [phi:main::@1->get#0] -- register_copy + // [17] phi get::return_x#2 = get::i#1 [phi:main::@1->get#0] -- call_phi_near jsr get // [9] get::return_x#1 = get::return_x#2 jmp __b3 @@ -483,7 +483,7 @@ main: { // get(0) // [1] call get // [17] phi from main to get [phi:main->get] - // [17] phi get::return_x#2 = 0 [phi:main->get#0] -- vbuaa=vbuc1 + // [17] phi get::return_x#2 = 0 [phi:main->get#0] -- call_phi_near lda #0 jsr get // get(0) @@ -508,7 +508,7 @@ main: { tya // [8] call get // [17] phi from main::@1 to get [phi:main::@1->get] - // [17] phi get::return_x#2 = get::i#1 [phi:main::@1->get#0] -- register_copy + // [17] phi get::return_x#2 = get::i#1 [phi:main::@1->get#0] -- call_phi_near jsr get // get(i) // [9] get::return_x#1 = get::return_x#2 diff --git a/src/test/ref/struct-ptr-18.log b/src/test/ref/struct-ptr-18.log index 01cd484ed..aef25a7ae 100644 --- a/src/test/ref/struct-ptr-18.log +++ b/src/test/ref/struct-ptr-18.log @@ -366,7 +366,7 @@ main: { // [5] print::p_y#0 = ((char *)points+OFFSET_STRUCT_POINT_Y)[main::$4] -- vbuyy=pbuc1_derefidx_vbuyy lda points+OFFSET_STRUCT_POINT_Y,y tay - // [6] call print + // [6] call print -- call_phi_near jsr print jmp __b2 // main::@2 @@ -518,7 +518,7 @@ main: { // [5] print::p_y#0 = ((char *)points+OFFSET_STRUCT_POINT_Y)[main::$4] -- vbuyy=pbuc1_derefidx_vbuyy lda points+OFFSET_STRUCT_POINT_Y,y tay - // [6] call print + // [6] call print -- call_phi_near jsr print // main::@2 // for ( char i: 0..1) diff --git a/src/test/ref/struct-ptr-19.log b/src/test/ref/struct-ptr-19.log index 7fedae1e8..1ce20220d 100644 --- a/src/test/ref/struct-ptr-19.log +++ b/src/test/ref/struct-ptr-19.log @@ -302,7 +302,7 @@ main: { // [8] phi idx#12 = 0 [phi:main->print#1] -- vbuz1=vbuc1 lda #0 sta.z idx - // [8] phi print::p_x#2 = print::p_x#0 [phi:main->print#2] -- register_copy + // [8] phi print::p_x#2 = print::p_x#0 [phi:main->print#2] -- call_phi_near jsr print jmp __b1 // main::@1 @@ -316,7 +316,7 @@ main: { print_from___b1: // [8] phi print::p_y#2 = print::p_y#1 [phi:main::@1->print#0] -- register_copy // [8] phi idx#12 = idx#13 [phi:main::@1->print#1] -- register_copy - // [8] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#2] -- register_copy + // [8] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#2] -- call_phi_near jsr print jmp __breturn // main::@return @@ -437,7 +437,7 @@ main: { // [8] phi idx#12 = 0 [phi:main->print#1] -- vbuz1=vbuc1 lda #0 sta.z idx - // [8] phi print::p_x#2 = print::p_x#0 [phi:main->print#2] -- register_copy + // [8] phi print::p_x#2 = print::p_x#0 [phi:main->print#2] -- call_phi_near jsr print // main::@1 // print(*ptr) @@ -449,7 +449,7 @@ main: { // [8] phi from main::@1 to print [phi:main::@1->print] // [8] phi print::p_y#2 = print::p_y#1 [phi:main::@1->print#0] -- register_copy // [8] phi idx#12 = idx#13 [phi:main::@1->print#1] -- register_copy - // [8] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#2] -- register_copy + // [8] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#2] -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/struct-ptr-22.log b/src/test/ref/struct-ptr-22.log index a2ca0c0e0..4c11521d2 100644 --- a/src/test/ref/struct-ptr-22.log +++ b/src/test/ref/struct-ptr-22.log @@ -1039,7 +1039,7 @@ main: { sta (__13),y // [4] call print_cls // writes address 0x4004 (right!) - // [18] phi from main to print_cls [phi:main->print_cls] + // [18] phi from main to print_cls [phi:main->print_cls] -- call_phi_near print_cls_from_main: jsr print_cls // [5] phi from main to main::@1 [phi:main->main::@1] @@ -1055,7 +1055,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [21] phi print_str::str#6 = main::str [phi:main::@1->print_str#1] -- pbuz1=pbuc1 + // [21] phi print_str::str#6 = main::str [phi:main::@1->print_str#1] -- call_phi_near lda #str @@ -1069,7 +1069,7 @@ main: { // [8] call print_uchar // [28] phi from main::@2 to print_uchar [phi:main::@2->print_uchar] print_uchar_from___b2: - // [28] phi print_uchar::b#2 = print_uchar::b#0 [phi:main::@2->print_uchar#0] -- register_copy + // [28] phi print_uchar::b#2 = print_uchar::b#0 [phi:main::@2->print_uchar#0] -- call_phi_near jsr print_uchar // [9] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -1079,7 +1079,7 @@ main: { // [10] call print_ln // [36] phi from main::@3 to print_ln [phi:main::@3->print_ln] print_ln_from___b3: - // [36] phi print_line_cursor#21 = print_screen#0 [phi:main::@3->print_ln#0] -- pbuz1=pbuc1 + // [36] phi print_line_cursor#21 = print_screen#0 [phi:main::@3->print_ln#0] -- call_phi_near lda #print_screen @@ -1097,7 +1097,7 @@ main: { // [21] phi from main::@4 to print_str [phi:main::@4->print_str] print_str_from___b4: // [21] phi print_char_cursor#48 = print_char_cursor#49 [phi:main::@4->print_str#0] -- register_copy - // [21] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- pbuz1=pbuc1 + // [21] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- call_phi_near lda #str1 @@ -1111,7 +1111,7 @@ main: { // [14] call print_uchar // [28] phi from main::@5 to print_uchar [phi:main::@5->print_uchar] print_uchar_from___b5: - // [28] phi print_uchar::b#2 = print_uchar::b#1 [phi:main::@5->print_uchar#0] -- register_copy + // [28] phi print_uchar::b#2 = print_uchar::b#1 [phi:main::@5->print_uchar#0] -- call_phi_near jsr print_uchar // [15] phi from main::@5 to main::@6 [phi:main::@5->main::@6] __b6_from___b5: @@ -1121,7 +1121,7 @@ main: { // [16] call print_ln // [36] phi from main::@6 to print_ln [phi:main::@6->print_ln] print_ln_from___b6: - // [36] phi print_line_cursor#21 = print_line_cursor#0 [phi:main::@6->print_ln#0] -- register_copy + // [36] phi print_line_cursor#21 = print_line_cursor#0 [phi:main::@6->print_ln#0] -- call_phi_near jsr print_ln jmp __breturn // main::@return @@ -1139,7 +1139,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [19] call memset - // [41] phi from print_cls to memset [phi:print_cls->memset] + // [41] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -1180,7 +1180,7 @@ print_str: { // [47] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [47] phi print_char_cursor#29 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [47] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [47] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -1210,7 +1210,7 @@ print_uchar: { // [47] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [47] phi print_char_cursor#29 = print_char_cursor#1 [phi:print_uchar->print_char#0] -- register_copy - // [47] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy + // [47] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -1224,7 +1224,7 @@ print_uchar: { // [47] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [47] phi print_char_cursor#29 = print_char_cursor#30 [phi:print_uchar::@1->print_char#0] -- register_copy - // [47] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy + // [47] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -1516,7 +1516,7 @@ main: { // print_cls() // [4] call print_cls // writes address 0x4004 (right!) - // [18] phi from main to print_cls [phi:main->print_cls] + // [18] phi from main to print_cls [phi:main->print_cls] -- call_phi_near jsr print_cls // [5] phi from main to main::@1 [phi:main->main::@1] // main::@1 @@ -1528,7 +1528,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [21] phi print_str::str#6 = main::str [phi:main::@1->print_str#1] -- pbuz1=pbuc1 + // [21] phi print_str::str#6 = main::str [phi:main::@1->print_str#1] -- call_phi_near lda #str @@ -1540,14 +1540,14 @@ main: { ldx.z 0 // [8] call print_uchar // [28] phi from main::@2 to print_uchar [phi:main::@2->print_uchar] - // [28] phi print_uchar::b#2 = print_uchar::b#0 [phi:main::@2->print_uchar#0] -- register_copy + // [28] phi print_uchar::b#2 = print_uchar::b#0 [phi:main::@2->print_uchar#0] -- call_phi_near jsr print_uchar // [9] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // print_ln() // [10] call print_ln // [36] phi from main::@3 to print_ln [phi:main::@3->print_ln] - // [36] phi print_line_cursor#21 = print_screen#0 [phi:main::@3->print_ln#0] -- pbuz1=pbuc1 + // [36] phi print_line_cursor#21 = print_screen#0 [phi:main::@3->print_ln#0] -- call_phi_near lda #print_screen @@ -1563,7 +1563,7 @@ main: { // [12] call print_str // [21] phi from main::@4 to print_str [phi:main::@4->print_str] // [21] phi print_char_cursor#48 = print_char_cursor#49 [phi:main::@4->print_str#0] -- register_copy - // [21] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- pbuz1=pbuc1 + // [21] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- call_phi_near lda #str1 @@ -1575,14 +1575,14 @@ main: { ldx $4004 // [14] call print_uchar // [28] phi from main::@5 to print_uchar [phi:main::@5->print_uchar] - // [28] phi print_uchar::b#2 = print_uchar::b#1 [phi:main::@5->print_uchar#0] -- register_copy + // [28] phi print_uchar::b#2 = print_uchar::b#1 [phi:main::@5->print_uchar#0] -- call_phi_near jsr print_uchar // [15] phi from main::@5 to main::@6 [phi:main::@5->main::@6] // main::@6 // print_ln() // [16] call print_ln // [36] phi from main::@6 to print_ln [phi:main::@6->print_ln] - // [36] phi print_line_cursor#21 = print_line_cursor#0 [phi:main::@6->print_ln#0] -- register_copy + // [36] phi print_line_cursor#21 = print_line_cursor#0 [phi:main::@6->print_ln#0] -- call_phi_near jsr print_ln // main::@return // } @@ -1600,7 +1600,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [19] call memset - // [41] phi from print_cls to memset [phi:print_cls->memset] + // [41] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -1636,7 +1636,7 @@ print_str: { // [26] call print_char // [47] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [47] phi print_char_cursor#29 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [47] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [47] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); @@ -1666,7 +1666,7 @@ print_uchar: { // Table of hexadecimal digits // [47] phi from print_uchar to print_char [phi:print_uchar->print_char] // [47] phi print_char_cursor#29 = print_char_cursor#1 [phi:print_uchar->print_char#0] -- register_copy - // [47] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy + // [47] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -1679,7 +1679,7 @@ print_uchar: { // [34] call print_char // [47] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [47] phi print_char_cursor#29 = print_char_cursor#30 [phi:print_uchar::@1->print_char#0] -- register_copy - // [47] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy + // [47] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/struct-ptr-23.log b/src/test/ref/struct-ptr-23.log index cbf14967f..670db72d5 100644 --- a/src/test/ref/struct-ptr-23.log +++ b/src/test/ref/struct-ptr-23.log @@ -391,7 +391,7 @@ main: { print_person_from_main: // [5] phi idx#16 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- call_phi_near lda #persons @@ -406,7 +406,7 @@ main: { // [5] phi from main::@1 to print_person [phi:main::@1->print_person] print_person_from___b1: // [5] phi idx#16 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = main::person#1 [phi:main::@1->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = main::person#1 [phi:main::@1->print_person#1] -- call_phi_near lda #person @@ -567,7 +567,7 @@ main: { // [5] phi from main to print_person [phi:main->print_person] // [5] phi idx#16 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- call_phi_near lda #persons @@ -579,7 +579,7 @@ main: { // [3] call print_person // [5] phi from main::@1 to print_person [phi:main::@1->print_person] // [5] phi idx#16 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = main::person#1 [phi:main::@1->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = main::person#1 [phi:main::@1->print_person#1] -- call_phi_near lda #person diff --git a/src/test/ref/struct-ptr-24.log b/src/test/ref/struct-ptr-24.log index 612b6a134..86e8070b3 100644 --- a/src/test/ref/struct-ptr-24.log +++ b/src/test/ref/struct-ptr-24.log @@ -227,7 +227,7 @@ main: { // main::@2 __b2: // [4] PrintName::file#0 = main::file#2 - // [5] call PrintName + // [5] call PrintName -- call_phi_near jsr PrintName jmp __b3 // main::@3 @@ -345,7 +345,7 @@ main: { __b2: // PrintName(file) // [4] PrintName::file#0 = main::file#2 - // [5] call PrintName + // [5] call PrintName -- call_phi_near jsr PrintName // main::@3 // ++file; diff --git a/src/test/ref/struct-ptr-26.log b/src/test/ref/struct-ptr-26.log index 883b54c3a..00c214918 100644 --- a/src/test/ref/struct-ptr-26.log +++ b/src/test/ref/struct-ptr-26.log @@ -501,7 +501,7 @@ main: { lda ($fe),y sta.z uSize+1 // [2] print_uint::w#0 = main::uSize#1 - // [3] call print_uint + // [3] call print_uint -- call_phi_near jsr print_uint jmp __breturn // main::@return @@ -524,7 +524,7 @@ print_uint: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [10] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [10] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -535,7 +535,7 @@ print_uint: { // [10] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [10] phi print_char_cursor#26 = print_char_cursor#20 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [10] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [10] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -561,7 +561,7 @@ print_uchar: { // [18] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [18] phi print_char_cursor#19 = print_char_cursor#26 [phi:print_uchar->print_char#0] -- register_copy - // [18] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [18] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -575,7 +575,7 @@ print_uchar: { // [18] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [18] phi print_char_cursor#19 = print_char_cursor#20 [phi:print_uchar::@1->print_char#0] -- register_copy - // [18] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [18] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -713,7 +713,7 @@ main: { sta.z uSize+1 // print_uint(uSize) // [2] print_uint::w#0 = main::uSize#1 - // [3] call print_uint + // [3] call print_uint -- call_phi_near jsr print_uint // main::@return // } @@ -735,7 +735,7 @@ print_uint: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [10] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [10] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -744,7 +744,7 @@ print_uint: { // [8] call print_uchar // [10] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [10] phi print_char_cursor#26 = print_char_cursor#20 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [10] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [10] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -770,7 +770,7 @@ print_uchar: { // Table of hexadecimal digits // [18] phi from print_uchar to print_char [phi:print_uchar->print_char] // [18] phi print_char_cursor#19 = print_char_cursor#26 [phi:print_uchar->print_char#0] -- register_copy - // [18] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [18] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -783,7 +783,7 @@ print_uchar: { // [16] call print_char // [18] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [18] phi print_char_cursor#19 = print_char_cursor#20 [phi:print_uchar::@1->print_char#0] -- register_copy - // [18] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [18] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/struct-ptr-28.log b/src/test/ref/struct-ptr-28.log index 16f789147..b55726613 100644 --- a/src/test/ref/struct-ptr-28.log +++ b/src/test/ref/struct-ptr-28.log @@ -406,7 +406,7 @@ main: { print_person_from_main: // [5] phi idx#14 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = &main::jesper [phi:main->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = &main::jesper [phi:main->print_person#1] -- call_phi_near lda #jesper @@ -426,7 +426,7 @@ main: { // [5] phi from main::@1 to print_person [phi:main::@1->print_person] print_person_from___b1: // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = &main::henriette [phi:main::@1->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = &main::henriette [phi:main::@1->print_person#1] -- call_phi_near lda #henriette @@ -618,7 +618,7 @@ main: { // [5] phi from main to print_person [phi:main->print_person] // [5] phi idx#14 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = &main::jesper [phi:main->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = &main::jesper [phi:main->print_person#1] -- call_phi_near lda #jesper @@ -637,7 +637,7 @@ main: { // [3] call print_person // [5] phi from main::@1 to print_person [phi:main::@1->print_person] // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = &main::henriette [phi:main::@1->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = &main::henriette [phi:main::@1->print_person#1] -- call_phi_near lda #henriette diff --git a/src/test/ref/struct-ptr-29.log b/src/test/ref/struct-ptr-29.log index 0851f3245..f5178c5fa 100644 --- a/src/test/ref/struct-ptr-29.log +++ b/src/test/ref/struct-ptr-29.log @@ -372,7 +372,7 @@ main: { print_person_from_main: // [5] phi idx#14 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- call_phi_near lda #persons @@ -387,7 +387,7 @@ main: { // [5] phi from main::@1 to print_person [phi:main::@1->print_person] print_person_from___b1: // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- call_phi_near lda #persons+1*SIZEOF_STRUCT_PERSON @@ -559,7 +559,7 @@ main: { // [5] phi from main to print_person [phi:main->print_person] // [5] phi idx#14 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- call_phi_near lda #persons @@ -571,7 +571,7 @@ main: { // [3] call print_person // [5] phi from main::@1 to print_person [phi:main::@1->print_person] // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- call_phi_near lda #persons+1*SIZEOF_STRUCT_PERSON diff --git a/src/test/ref/struct-ptr-30.log b/src/test/ref/struct-ptr-30.log index ac2bddd57..f5c1e15fd 100644 --- a/src/test/ref/struct-ptr-30.log +++ b/src/test/ref/struct-ptr-30.log @@ -375,7 +375,7 @@ main: { sta.z print.p_y lda points+OFFSET_STRUCT_POINT_Y+1,y sta.z print.p_y+1 - // [6] call print + // [6] call print -- call_phi_near jsr print jmp __b2 // main::@2 @@ -543,7 +543,7 @@ main: { sta.z print.p_y lda points+OFFSET_STRUCT_POINT_Y+1,y sta.z print.p_y+1 - // [6] call print + // [6] call print -- call_phi_near jsr print // main::@2 // for ( char i: 0..3) diff --git a/src/test/ref/struct-ptr-31.log b/src/test/ref/struct-ptr-31.log index 6a4043e79..40b5b2919 100644 --- a/src/test/ref/struct-ptr-31.log +++ b/src/test/ref/struct-ptr-31.log @@ -378,7 +378,7 @@ main: { print_person_from_main: // [5] phi idx#14 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- call_phi_near lda #persons @@ -393,7 +393,7 @@ main: { // [5] phi from main::@1 to print_person [phi:main::@1->print_person] print_person_from___b1: // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- call_phi_near lda #persons+1*SIZEOF_STRUCT_PERSON @@ -570,7 +570,7 @@ main: { // [5] phi from main to print_person [phi:main->print_person] // [5] phi idx#14 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- call_phi_near lda #persons @@ -582,7 +582,7 @@ main: { // [3] call print_person // [5] phi from main::@1 to print_person [phi:main::@1->print_person] // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- pssz1=pssc1 + // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- call_phi_near lda #persons+1*SIZEOF_STRUCT_PERSON diff --git a/src/test/ref/struct-ptr-34.log b/src/test/ref/struct-ptr-34.log index 7c8268e35..a40dc698b 100644 --- a/src/test/ref/struct-ptr-34.log +++ b/src/test/ref/struct-ptr-34.log @@ -377,7 +377,7 @@ main: { // [5] phi idx#14 = 0 [phi:main->print_person#1] -- vbuz1=vbuc1 lda #0 sta.z idx - // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- vbuxx=vbuc1 + // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- call_phi_near ldx #jesper_id jsr print_person jmp __b1 @@ -399,7 +399,7 @@ main: { lda #>henriette_name sta.z print_person.person_name+1 // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#1] -- register_copy - // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- vbuxx=vbuc1 + // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- call_phi_near ldx #henriette_id jsr print_person jmp __breturn @@ -573,7 +573,7 @@ main: { // [5] phi idx#14 = 0 [phi:main->print_person#1] -- vbuz1=vbuc1 lda #0 sta.z idx - // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- vbuxx=vbuc1 + // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- call_phi_near ldx #jesper_id jsr print_person // main::@1 @@ -594,7 +594,7 @@ main: { lda #>henriette_name sta.z print_person.person_name+1 // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#1] -- register_copy - // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- vbuxx=vbuc1 + // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- call_phi_near ldx #henriette_id jsr print_person // main::@return diff --git a/src/test/ref/struct-unwinding-2.log b/src/test/ref/struct-unwinding-2.log index 57b719231..bd3ca1afc 100644 --- a/src/test/ref/struct-unwinding-2.log +++ b/src/test/ref/struct-unwinding-2.log @@ -391,7 +391,7 @@ main: { print1_from_main: // [12] phi print1::p_y#2 = print1::p_y#0 [phi:main->print1#0] -- register_copy // [12] phi print1::p_x#2 = print1::p_x#0 [phi:main->print1#1] -- register_copy - // [12] phi print1::idx#2 = 0 [phi:main->print1#2] -- vbuaa=vbuc1 + // [12] phi print1::idx#2 = 0 [phi:main->print1#2] -- call_phi_near lda #0 jsr print1 jmp __b1 @@ -407,7 +407,7 @@ main: { print2_from___b1: // [17] phi print2::p_y#2 = print2::p_y#0 [phi:main::@1->print2#0] -- register_copy // [17] phi print2::p_x#2 = print2::p_x#0 [phi:main::@1->print2#1] -- register_copy - // [17] phi print2::idx#2 = 2 [phi:main::@1->print2#2] -- vbuaa=vbuc1 + // [17] phi print2::idx#2 = 2 [phi:main::@1->print2#2] -- call_phi_near lda #2 jsr print2 // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -423,7 +423,7 @@ main: { ldx #p2_y // [12] phi print1::p_x#2 = main::p2_x [phi:main::@2->print1#1] -- vbuyy=vbuc1 ldy #p2_x - // [12] phi print1::idx#2 = 4 [phi:main::@2->print1#2] -- vbuaa=vbuc1 + // [12] phi print1::idx#2 = 4 [phi:main::@2->print1#2] -- call_phi_near lda #4 jsr print1 // [9] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -439,7 +439,7 @@ main: { ldx #p2_y // [17] phi print2::p_x#2 = main::p2_x [phi:main::@3->print2#1] -- vbuyy=vbuc1 ldy #p2_x - // [17] phi print2::idx#2 = 6 [phi:main::@3->print2#2] -- vbuaa=vbuc1 + // [17] phi print2::idx#2 = 6 [phi:main::@3->print2#2] -- call_phi_near lda #6 jsr print2 jmp __breturn @@ -607,7 +607,7 @@ main: { // [12] phi from main to print1 [phi:main->print1] // [12] phi print1::p_y#2 = print1::p_y#0 [phi:main->print1#0] -- register_copy // [12] phi print1::p_x#2 = print1::p_x#0 [phi:main->print1#1] -- register_copy - // [12] phi print1::idx#2 = 0 [phi:main->print1#2] -- vbuaa=vbuc1 + // [12] phi print1::idx#2 = 0 [phi:main->print1#2] -- call_phi_near lda #0 jsr print1 // main::@1 @@ -621,7 +621,7 @@ main: { // [17] phi from main::@1 to print2 [phi:main::@1->print2] // [17] phi print2::p_y#2 = print2::p_y#0 [phi:main::@1->print2#0] -- register_copy // [17] phi print2::p_x#2 = print2::p_x#0 [phi:main::@1->print2#1] -- register_copy - // [17] phi print2::idx#2 = 2 [phi:main::@1->print2#2] -- vbuaa=vbuc1 + // [17] phi print2::idx#2 = 2 [phi:main::@1->print2#2] -- call_phi_near lda #2 jsr print2 // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -634,7 +634,7 @@ main: { ldx #p2_y // [12] phi print1::p_x#2 = main::p2_x [phi:main::@2->print1#1] -- vbuyy=vbuc1 ldy #p2_x - // [12] phi print1::idx#2 = 4 [phi:main::@2->print1#2] -- vbuaa=vbuc1 + // [12] phi print1::idx#2 = 4 [phi:main::@2->print1#2] -- call_phi_near lda #4 jsr print1 // [9] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -647,7 +647,7 @@ main: { ldx #p2_y // [17] phi print2::p_x#2 = main::p2_x [phi:main::@3->print2#1] -- vbuyy=vbuc1 ldy #p2_x - // [17] phi print2::idx#2 = 6 [phi:main::@3->print2#2] -- vbuaa=vbuc1 + // [17] phi print2::idx#2 = 6 [phi:main::@3->print2#2] -- call_phi_near lda #6 jsr print2 // main::@return diff --git a/src/test/ref/summin.log b/src/test/ref/summin.log index 72960af5a..fed3ac18d 100644 --- a/src/test/ref/summin.log +++ b/src/test/ref/summin.log @@ -344,7 +344,7 @@ main: { sum_from_main: // [14] phi sum::b#3 = 2 [phi:main->sum#0] -- vbuaa=vbuc1 lda #2 - // [14] phi sum::a#3 = 1 [phi:main->sum#1] -- vbuxx=vbuc1 + // [14] phi sum::a#3 = 1 [phi:main->sum#1] -- call_phi_near ldx #1 jsr sum // [2] sum::return#0 = sum::return#3 @@ -358,7 +358,7 @@ main: { sum_from___b1: // [14] phi sum::b#3 = 4 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #4 - // [14] phi sum::a#3 = 3 [phi:main::@1->sum#1] -- vbuxx=vbuc1 + // [14] phi sum::a#3 = 3 [phi:main::@1->sum#1] -- call_phi_near ldx #3 jsr sum // [5] sum::return#1 = sum::return#3 @@ -372,7 +372,7 @@ main: { sum_from___b2: // [14] phi sum::b#3 = $d [phi:main::@2->sum#0] -- vbuaa=vbuc1 lda #$d - // [14] phi sum::a#3 = 9 [phi:main::@2->sum#1] -- vbuxx=vbuc1 + // [14] phi sum::a#3 = 9 [phi:main::@2->sum#1] -- call_phi_near ldx #9 jsr sum // [8] sum::return#2 = sum::return#3 @@ -489,7 +489,7 @@ main: { // [14] phi from main to sum [phi:main->sum] // [14] phi sum::b#3 = 2 [phi:main->sum#0] -- vbuaa=vbuc1 lda #2 - // [14] phi sum::a#3 = 1 [phi:main->sum#1] -- vbuxx=vbuc1 + // [14] phi sum::a#3 = 1 [phi:main->sum#1] -- call_phi_near ldx #1 jsr sum // byte s1=sum(1,2) @@ -502,7 +502,7 @@ main: { // [14] phi from main::@1 to sum [phi:main::@1->sum] // [14] phi sum::b#3 = 4 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #4 - // [14] phi sum::a#3 = 3 [phi:main::@1->sum#1] -- vbuxx=vbuc1 + // [14] phi sum::a#3 = 3 [phi:main::@1->sum#1] -- call_phi_near ldx #3 jsr sum // byte s2=sum(3,4) @@ -515,7 +515,7 @@ main: { // [14] phi from main::@2 to sum [phi:main::@2->sum] // [14] phi sum::b#3 = $d [phi:main::@2->sum#0] -- vbuaa=vbuc1 lda #$d - // [14] phi sum::a#3 = 9 [phi:main::@2->sum#1] -- vbuxx=vbuc1 + // [14] phi sum::a#3 = 9 [phi:main::@2->sum#1] -- call_phi_near ldx #9 jsr sum // byte s3=sum(9,13) diff --git a/src/test/ref/ternary-3.log b/src/test/ref/ternary-3.log index e59a43842..9d783e981 100644 --- a/src/test/ref/ternary-3.log +++ b/src/test/ref/ternary-3.log @@ -413,7 +413,7 @@ main: { __b1: // [2] cond::b#0 = main::i#2 -- vbuaa=vbuxx txa - // [3] call cond + // [3] call cond -- call_phi_near jsr cond // [4] cond::return#0 = cond::return#1 jmp __b5 @@ -428,7 +428,7 @@ main: { __b3: // [7] m2::i#0 = main::i#2 -- vbuaa=vbuxx txa - // [8] call m2 + // [8] call m2 -- call_phi_near jsr m2 // [9] m2::return#0 = m2::return#1 jmp __b7 @@ -458,7 +458,7 @@ main: { __b2: // [16] m1::i#0 = main::i#2 -- vbuaa=vbuxx txa - // [17] call m1 + // [17] call m1 -- call_phi_near jsr m1 // [18] m1::return#0 = m1::return#1 jmp __b6 @@ -610,7 +610,7 @@ main: { // cond(i) // [2] cond::b#0 = main::i#2 -- vbuaa=vbuxx txa - // [3] call cond + // [3] call cond -- call_phi_near jsr cond // [4] cond::return#0 = cond::return#1 // main::@5 @@ -623,7 +623,7 @@ main: { // m2(i) // [7] m2::i#0 = main::i#2 -- vbuaa=vbuxx txa - // [8] call m2 + // [8] call m2 -- call_phi_near jsr m2 // [9] m2::return#0 = m2::return#1 // main::@7 @@ -651,7 +651,7 @@ main: { // m1(i) // [16] m1::i#0 = main::i#2 -- vbuaa=vbuxx txa - // [17] call m1 + // [17] call m1 -- call_phi_near jsr m1 // [18] m1::return#0 = m1::return#1 // main::@6 diff --git a/src/test/ref/test-comments-block.log b/src/test/ref/test-comments-block.log index 39b585c7f..fdd1384b5 100644 --- a/src/test/ref/test-comments-block.log +++ b/src/test/ref/test-comments-block.log @@ -268,7 +268,7 @@ main: { __b1: // [2] sum::b#0 = main::b#2 -- vbuaa=vbuyy tya - // [3] call sum + // [3] call sum -- call_phi_near jsr sum // [4] sum::return#0 = sum::return#1 jmp __b2 @@ -395,7 +395,7 @@ main: { // sum(a, b) // [2] sum::b#0 = main::b#2 -- vbuaa=vbuyy tya - // [3] call sum + // [3] call sum -- call_phi_near jsr sum // [4] sum::return#0 = sum::return#1 // main::@2 diff --git a/src/test/ref/test-comments-global.log b/src/test/ref/test-comments-global.log index dd2286dbf..593c45e1e 100644 --- a/src/test/ref/test-comments-global.log +++ b/src/test/ref/test-comments-global.log @@ -130,7 +130,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -215,7 +215,7 @@ __start: { sta.z screen+1 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/test-comments-single.log b/src/test/ref/test-comments-single.log index 991fbf8ef..438b8bb10 100644 --- a/src/test/ref/test-comments-single.log +++ b/src/test/ref/test-comments-single.log @@ -267,7 +267,7 @@ main: { __b1: // [2] sum::b#0 = main::b#2 -- vbuaa=vbuyy tya - // [3] call sum + // [3] call sum -- call_phi_near jsr sum // [4] sum::return#0 = sum::return#1 jmp __b2 @@ -392,7 +392,7 @@ main: { // sum(a, b) // [2] sum::b#0 = main::b#2 -- vbuaa=vbuyy tya - // [3] call sum + // [3] call sum -- call_phi_near jsr sum // [4] sum::return#0 = sum::return#1 // main::@2 diff --git a/src/test/ref/test-comparisons-sword.log b/src/test/ref/test-comparisons-sword.log index 8ca79b5a4..c9e36d50b 100644 --- a/src/test/ref/test-comparisons-sword.log +++ b/src/test/ref/test-comparisons-sword.log @@ -2186,7 +2186,7 @@ main: { .label j = $f .label i = $12 // [1] call print_cls - // [26] phi from main to print_cls [phi:main->print_cls] + // [26] phi from main to print_cls [phi:main->print_cls] -- call_phi_near print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -2279,7 +2279,7 @@ main: { // [10] compare::w2#0 = main::w2#0 // [11] compare::op#0 = main::op#2 -- vbuaa=vbuz1 lda.z op - // [12] call compare + // [12] call compare -- call_phi_near jsr compare jmp __b9 // main::@9 @@ -2296,7 +2296,7 @@ main: { // main::@5 __b5: // [16] call print_ln - // [63] phi from main::@5 to print_ln [phi:main::@5->print_ln] + // [63] phi from main::@5 to print_ln [phi:main::@5->print_ln] -- call_phi_near print_ln_from___b5: jsr print_ln jmp __b10 @@ -2360,7 +2360,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [27] call memset - // [68] phi from print_cls to memset [phi:print_cls->memset] + // [68] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -2467,14 +2467,14 @@ compare: { // [74] phi from compare::@6 to print_sint [phi:compare::@6->print_sint] print_sint_from___b6: // [74] phi print_char_cursor#61 = print_char_cursor#67 [phi:compare::@6->print_sint#0] -- register_copy - // [74] phi print_sint::w#3 = print_sint::w#1 [phi:compare::@6->print_sint#1] -- register_copy + // [74] phi print_sint::w#3 = print_sint::w#1 [phi:compare::@6->print_sint#1] -- call_phi_near jsr print_sint jmp __b25 // compare::@25 __b25: // [41] print_str::str#1 = compare::ops#7 // [42] call print_str - // [85] phi from compare::@25 to print_str [phi:compare::@25->print_str] + // [85] phi from compare::@25 to print_str [phi:compare::@25->print_str] -- call_phi_near print_str_from___b25: jsr print_str jmp __b26 @@ -2489,7 +2489,7 @@ compare: { // [74] phi from compare::@26 to print_sint [phi:compare::@26->print_sint] print_sint_from___b26: // [74] phi print_char_cursor#61 = print_char_cursor#14 [phi:compare::@26->print_sint#0] -- register_copy - // [74] phi print_sint::w#3 = print_sint::w#2 [phi:compare::@26->print_sint#1] -- register_copy + // [74] phi print_sint::w#3 = print_sint::w#2 [phi:compare::@26->print_sint#1] -- call_phi_near jsr print_sint jmp __b27 // compare::@27 @@ -2500,7 +2500,7 @@ compare: { // [92] phi from compare::@27 to print_char [phi:compare::@27->print_char] print_char_from___b27: // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:compare::@27->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#5 [phi:compare::@27->print_char#1] -- register_copy + // [92] phi print_char::ch#6 = print_char::ch#5 [phi:compare::@27->print_char#1] -- call_phi_near jsr print_char jmp __breturn // compare::@return @@ -2812,7 +2812,7 @@ print_sint: { // [92] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] print_char_from___b3: // [92] phi print_char_cursor#44 = print_char_cursor#61 [phi:print_sint::@3->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 + // [92] phi print_char::ch#6 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [78] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -2823,7 +2823,7 @@ print_sint: { // print_sint::@2 __b2: // [79] print_uint::w#0 = (unsigned int)print_sint::w#5 - // [80] call print_uint + // [80] call print_uint -- call_phi_near jsr print_uint jmp __breturn // print_sint::@return @@ -2839,7 +2839,7 @@ print_sint: { // [92] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] print_char_from___b1: // [92] phi print_char_cursor#44 = print_char_cursor#61 [phi:print_sint::@1->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 + // [92] phi print_char::ch#6 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char jmp __b4 @@ -2886,7 +2886,7 @@ print_str: { // [92] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:print_str::@2->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [92] phi print_char::ch#6 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -2926,7 +2926,7 @@ print_uint: { // [97] call print_uchar // [101] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: - // [101] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy + // [101] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -2936,7 +2936,7 @@ print_uint: { // [99] call print_uchar // [101] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: - // [101] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy + // [101] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -2962,7 +2962,7 @@ print_uchar: { // [92] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:print_uchar->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy + // [92] phi print_char::ch#6 = print_char::ch#3 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -2976,7 +2976,7 @@ print_uchar: { // [92] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:print_uchar::@1->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy + // [92] phi print_char::ch#6 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -3344,7 +3344,7 @@ main: { .label i = $12 // print_cls() // [1] call print_cls - // [26] phi from main to print_cls [phi:main->print_cls] + // [26] phi from main to print_cls [phi:main->print_cls] -- call_phi_near jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi print_line_cursor#30 = print_screen#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -3427,7 +3427,7 @@ main: { // [10] compare::w2#0 = main::w2#0 // [11] compare::op#0 = main::op#2 -- vbuaa=vbuz1 lda.z op - // [12] call compare + // [12] call compare -- call_phi_near jsr compare // main::@9 // if(++s==3) @@ -3441,7 +3441,7 @@ main: { // main::@5 // print_ln() // [16] call print_ln - // [63] phi from main::@5 to print_ln [phi:main::@5->print_ln] + // [63] phi from main::@5 to print_ln [phi:main::@5->print_ln] -- call_phi_near jsr print_ln // main::@10 // [17] print_char_cursor#117 = print_line_cursor#0 -- pbuz1=pbuz2 @@ -3494,7 +3494,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [27] call memset - // [68] phi from print_cls to memset [phi:print_cls->memset] + // [68] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -3592,13 +3592,13 @@ compare: { // [40] call print_sint // [74] phi from compare::@6 to print_sint [phi:compare::@6->print_sint] // [74] phi print_char_cursor#61 = print_char_cursor#67 [phi:compare::@6->print_sint#0] -- register_copy - // [74] phi print_sint::w#3 = print_sint::w#1 [phi:compare::@6->print_sint#1] -- register_copy + // [74] phi print_sint::w#3 = print_sint::w#1 [phi:compare::@6->print_sint#1] -- call_phi_near jsr print_sint // compare::@25 // print_str(ops) // [41] print_str::str#1 = compare::ops#7 // [42] call print_str - // [85] phi from compare::@25 to print_str [phi:compare::@25->print_str] + // [85] phi from compare::@25 to print_str [phi:compare::@25->print_str] -- call_phi_near jsr print_str // compare::@26 // print_sint(w2) @@ -3610,7 +3610,7 @@ compare: { // [44] call print_sint // [74] phi from compare::@26 to print_sint [phi:compare::@26->print_sint] // [74] phi print_char_cursor#61 = print_char_cursor#14 [phi:compare::@26->print_sint#0] -- register_copy - // [74] phi print_sint::w#3 = print_sint::w#2 [phi:compare::@26->print_sint#1] -- register_copy + // [74] phi print_sint::w#3 = print_sint::w#2 [phi:compare::@26->print_sint#1] -- call_phi_near jsr print_sint // compare::@27 // print_char(r) @@ -3619,7 +3619,7 @@ compare: { // [46] call print_char // [92] phi from compare::@27 to print_char [phi:compare::@27->print_char] // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:compare::@27->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#5 [phi:compare::@27->print_char#1] -- register_copy + // [92] phi print_char::ch#6 = print_char::ch#5 [phi:compare::@27->print_char#1] -- call_phi_near jsr print_char // compare::@return // } @@ -3900,7 +3900,7 @@ print_sint: { // [77] call print_char // [92] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] // [92] phi print_char_cursor#44 = print_char_cursor#61 [phi:print_sint::@3->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 + // [92] phi print_char::ch#6 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [78] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -3909,7 +3909,7 @@ print_sint: { __b2: // print_uint((unsigned int)w) // [79] print_uint::w#0 = (unsigned int)print_sint::w#5 - // [80] call print_uint + // [80] call print_uint -- call_phi_near jsr print_uint // print_sint::@return // } @@ -3922,7 +3922,7 @@ print_sint: { // [83] call print_char // [92] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] // [92] phi print_char_cursor#44 = print_char_cursor#61 [phi:print_sint::@1->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 + // [92] phi print_char::ch#6 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char // print_sint::@4 @@ -3965,7 +3965,7 @@ print_str: { // [90] call print_char // [92] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:print_str::@2->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [92] phi print_char::ch#6 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); @@ -4005,7 +4005,7 @@ print_uint: { ldx.z w+1 // [97] call print_uchar // [101] phi from print_uint to print_uchar [phi:print_uint->print_uchar] - // [101] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy + // [101] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -4013,7 +4013,7 @@ print_uint: { ldx.z w // [99] call print_uchar // [101] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] - // [101] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy + // [101] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -4039,7 +4039,7 @@ print_uchar: { // Table of hexadecimal digits // [92] phi from print_uchar to print_char [phi:print_uchar->print_char] // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:print_uchar->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy + // [92] phi print_char::ch#6 = print_char::ch#3 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -4052,7 +4052,7 @@ print_uchar: { // [107] call print_char // [92] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:print_uchar::@1->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy + // [92] phi print_char::ch#6 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/test-comparisons-word.log b/src/test/ref/test-comparisons-word.log index 993118abf..fc913e3fb 100644 --- a/src/test/ref/test-comparisons-word.log +++ b/src/test/ref/test-comparisons-word.log @@ -2072,7 +2072,7 @@ main: { .label j = $f .label i = $12 // [1] call print_cls - // [26] phi from main to print_cls [phi:main->print_cls] + // [26] phi from main to print_cls [phi:main->print_cls] -- call_phi_near print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -2165,7 +2165,7 @@ main: { // [10] compare::w2#0 = main::w2#0 // [11] compare::op#0 = main::op#2 -- vbuaa=vbuz1 lda.z op - // [12] call compare + // [12] call compare -- call_phi_near jsr compare jmp __b9 // main::@9 @@ -2182,7 +2182,7 @@ main: { // main::@5 __b5: // [16] call print_ln - // [65] phi from main::@5 to print_ln [phi:main::@5->print_ln] + // [65] phi from main::@5 to print_ln [phi:main::@5->print_ln] -- call_phi_near print_ln_from___b5: jsr print_ln jmp __b10 @@ -2246,7 +2246,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [27] call memset - // [70] phi from print_cls to memset [phi:print_cls->memset] + // [70] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -2353,14 +2353,14 @@ compare: { // [76] phi from compare::@6 to print_uint [phi:compare::@6->print_uint] print_uint_from___b6: // [76] phi print_char_cursor#55 = print_char_cursor#58 [phi:compare::@6->print_uint#0] -- register_copy - // [76] phi print_uint::w#2 = print_uint::w#0 [phi:compare::@6->print_uint#1] -- register_copy + // [76] phi print_uint::w#2 = print_uint::w#0 [phi:compare::@6->print_uint#1] -- call_phi_near jsr print_uint jmp __b25 // compare::@25 __b25: // [41] print_str::str#1 = compare::ops#7 // [42] call print_str - // [82] phi from compare::@25 to print_str [phi:compare::@25->print_str] + // [82] phi from compare::@25 to print_str [phi:compare::@25->print_str] -- call_phi_near print_str_from___b25: jsr print_str jmp __b26 @@ -2375,7 +2375,7 @@ compare: { // [76] phi from compare::@26 to print_uint [phi:compare::@26->print_uint] print_uint_from___b26: // [76] phi print_char_cursor#55 = print_char_cursor#10 [phi:compare::@26->print_uint#0] -- register_copy - // [76] phi print_uint::w#2 = print_uint::w#1 [phi:compare::@26->print_uint#1] -- register_copy + // [76] phi print_uint::w#2 = print_uint::w#1 [phi:compare::@26->print_uint#1] -- call_phi_near jsr print_uint jmp __b27 // compare::@27 @@ -2386,7 +2386,7 @@ compare: { // [89] phi from compare::@27 to print_char [phi:compare::@27->print_char] print_char_from___b27: // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:compare::@27->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#3 [phi:compare::@27->print_char#1] -- register_copy + // [89] phi print_char::ch#5 = print_char::ch#3 [phi:compare::@27->print_char#1] -- call_phi_near jsr print_char // [47] phi from compare::@27 to compare::@28 [phi:compare::@27->compare::@28] __b28_from___b27: @@ -2397,7 +2397,7 @@ compare: { // [89] phi from compare::@28 to print_char [phi:compare::@28->print_char] print_char_from___b28: // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:compare::@28->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = ' ' [phi:compare::@28->print_char#1] -- vbuaa=vbuc1 + // [89] phi print_char::ch#5 = ' ' [phi:compare::@28->print_char#1] -- call_phi_near lda #' ' jsr print_char jmp __breturn @@ -2704,7 +2704,7 @@ print_uint: { // [93] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [93] phi print_char_cursor#56 = print_char_cursor#55 [phi:print_uint->print_uchar#0] -- register_copy - // [93] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [93] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -2715,7 +2715,7 @@ print_uint: { // [93] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [93] phi print_char_cursor#56 = print_char_cursor#10 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [93] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [93] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -2754,7 +2754,7 @@ print_str: { // [89] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:print_str::@2->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [89] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -2802,7 +2802,7 @@ print_uchar: { // [89] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [89] phi print_char_cursor#37 = print_char_cursor#56 [phi:print_uchar->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy + // [89] phi print_char::ch#5 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -2816,7 +2816,7 @@ print_uchar: { // [89] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:print_uchar::@1->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy + // [89] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -3161,7 +3161,7 @@ main: { .label i = $12 // print_cls() // [1] call print_cls - // [26] phi from main to print_cls [phi:main->print_cls] + // [26] phi from main to print_cls [phi:main->print_cls] -- call_phi_near jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi print_line_cursor#30 = print_screen#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -3244,7 +3244,7 @@ main: { // [10] compare::w2#0 = main::w2#0 // [11] compare::op#0 = main::op#2 -- vbuaa=vbuz1 lda.z op - // [12] call compare + // [12] call compare -- call_phi_near jsr compare // main::@9 // if(++s==3) @@ -3258,7 +3258,7 @@ main: { // main::@5 // print_ln() // [16] call print_ln - // [65] phi from main::@5 to print_ln [phi:main::@5->print_ln] + // [65] phi from main::@5 to print_ln [phi:main::@5->print_ln] -- call_phi_near jsr print_ln // main::@10 // [17] print_char_cursor#108 = print_line_cursor#0 -- pbuz1=pbuz2 @@ -3311,7 +3311,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [27] call memset - // [70] phi from print_cls to memset [phi:print_cls->memset] + // [70] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -3409,13 +3409,13 @@ compare: { // [40] call print_uint // [76] phi from compare::@6 to print_uint [phi:compare::@6->print_uint] // [76] phi print_char_cursor#55 = print_char_cursor#58 [phi:compare::@6->print_uint#0] -- register_copy - // [76] phi print_uint::w#2 = print_uint::w#0 [phi:compare::@6->print_uint#1] -- register_copy + // [76] phi print_uint::w#2 = print_uint::w#0 [phi:compare::@6->print_uint#1] -- call_phi_near jsr print_uint // compare::@25 // print_str(ops) // [41] print_str::str#1 = compare::ops#7 // [42] call print_str - // [82] phi from compare::@25 to print_str [phi:compare::@25->print_str] + // [82] phi from compare::@25 to print_str [phi:compare::@25->print_str] -- call_phi_near jsr print_str // compare::@26 // print_uint(w2) @@ -3427,7 +3427,7 @@ compare: { // [44] call print_uint // [76] phi from compare::@26 to print_uint [phi:compare::@26->print_uint] // [76] phi print_char_cursor#55 = print_char_cursor#10 [phi:compare::@26->print_uint#0] -- register_copy - // [76] phi print_uint::w#2 = print_uint::w#1 [phi:compare::@26->print_uint#1] -- register_copy + // [76] phi print_uint::w#2 = print_uint::w#1 [phi:compare::@26->print_uint#1] -- call_phi_near jsr print_uint // compare::@27 // print_char(r) @@ -3436,7 +3436,7 @@ compare: { // [46] call print_char // [89] phi from compare::@27 to print_char [phi:compare::@27->print_char] // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:compare::@27->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#3 [phi:compare::@27->print_char#1] -- register_copy + // [89] phi print_char::ch#5 = print_char::ch#3 [phi:compare::@27->print_char#1] -- call_phi_near jsr print_char // [47] phi from compare::@27 to compare::@28 [phi:compare::@27->compare::@28] // compare::@28 @@ -3444,7 +3444,7 @@ compare: { // [48] call print_char // [89] phi from compare::@28 to print_char [phi:compare::@28->print_char] // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:compare::@28->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = ' ' [phi:compare::@28->print_char#1] -- vbuaa=vbuc1 + // [89] phi print_char::ch#5 = ' ' [phi:compare::@28->print_char#1] -- call_phi_near lda #' ' jsr print_char // compare::@return @@ -3722,7 +3722,7 @@ print_uint: { // [78] call print_uchar // [93] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [93] phi print_char_cursor#56 = print_char_cursor#55 [phi:print_uint->print_uchar#0] -- register_copy - // [93] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [93] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -3731,7 +3731,7 @@ print_uint: { // [80] call print_uchar // [93] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [93] phi print_char_cursor#56 = print_char_cursor#10 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [93] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [93] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -3766,7 +3766,7 @@ print_str: { // [87] call print_char // [89] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:print_str::@2->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy + // [89] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); @@ -3815,7 +3815,7 @@ print_uchar: { // Table of hexadecimal digits // [89] phi from print_uchar to print_char [phi:print_uchar->print_char] // [89] phi print_char_cursor#37 = print_char_cursor#56 [phi:print_uchar->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy + // [89] phi print_char::ch#5 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -3828,7 +3828,7 @@ print_uchar: { // [99] call print_char // [89] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:print_uchar::@1->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy + // [89] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/test-interrupt-volatile-write.log b/src/test/ref/test-interrupt-volatile-write.log index 630c0dbb0..a984678bb 100644 --- a/src/test/ref/test-interrupt-volatile-write.log +++ b/src/test/ref/test-interrupt-volatile-write.log @@ -229,7 +229,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -356,7 +356,7 @@ __start: { sta.z col // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/test-interrupt-volatile.log b/src/test/ref/test-interrupt-volatile.log index 20611a737..c651e9cbc 100644 --- a/src/test/ref/test-interrupt-volatile.log +++ b/src/test/ref/test-interrupt-volatile.log @@ -166,7 +166,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -258,7 +258,7 @@ __start: { sta.z col // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/test-keyboard-space.log b/src/test/ref/test-keyboard-space.log index d07a3e81f..7fee032ec 100644 --- a/src/test/ref/test-keyboard-space.log +++ b/src/test/ref/test-keyboard-space.log @@ -421,7 +421,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call keyboard_init + // [1] call keyboard_init -- call_phi_near jsr keyboard_init jmp __b1 // main::@1 @@ -436,7 +436,7 @@ main: { // main::@2 __b2: // [4] call keyboard_key_pressed - // [13] phi from main::@2 to keyboard_key_pressed [phi:main::@2->keyboard_key_pressed] + // [13] phi from main::@2 to keyboard_key_pressed [phi:main::@2->keyboard_key_pressed] -- call_phi_near keyboard_key_pressed_from___b2: jsr keyboard_key_pressed // [5] keyboard_key_pressed::return#2 = keyboard_key_pressed::return#0 @@ -487,7 +487,7 @@ keyboard_init: { keyboard_key_pressed: { .const colidx = KEY_SPACE&7 .label rowidx = KEY_SPACE>>3 - // [14] call keyboard_matrix_read + // [14] call keyboard_matrix_read -- call_phi_near jsr keyboard_matrix_read // [15] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 jmp __b1 @@ -641,7 +641,7 @@ Score: 1141 // main main: { // keyboard_init() - // [1] call keyboard_init + // [1] call keyboard_init -- call_phi_near jsr keyboard_init // main::@1 __b1: @@ -654,7 +654,7 @@ main: { // main::@2 // keyboard_key_pressed(KEY_SPACE) // [4] call keyboard_key_pressed - // [13] phi from main::@2 to keyboard_key_pressed [phi:main::@2->keyboard_key_pressed] + // [13] phi from main::@2 to keyboard_key_pressed [phi:main::@2->keyboard_key_pressed] -- call_phi_near jsr keyboard_key_pressed // keyboard_key_pressed(KEY_SPACE) // [5] keyboard_key_pressed::return#2 = keyboard_key_pressed::return#0 @@ -706,7 +706,7 @@ keyboard_key_pressed: { .const colidx = KEY_SPACE&7 .label rowidx = KEY_SPACE>>3 // keyboard_matrix_read(rowidx) - // [14] call keyboard_matrix_read + // [14] call keyboard_matrix_read -- call_phi_near jsr keyboard_matrix_read // [15] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 // keyboard_key_pressed::@1 diff --git a/src/test/ref/test-keyboard.log b/src/test/ref/test-keyboard.log index 8ac6f08aa..af2450073 100644 --- a/src/test/ref/test-keyboard.log +++ b/src/test/ref/test-keyboard.log @@ -1139,7 +1139,7 @@ main: { jmp __b3 // main::@3 __b3: - // [4] call keyboard_init + // [4] call keyboard_init -- call_phi_near // Init keyboard jsr keyboard_init jmp __b4 @@ -1173,7 +1173,7 @@ main: { // [8] call keyboard_matrix_read // [48] phi from main::@5 to keyboard_matrix_read [phi:main::@5->keyboard_matrix_read] keyboard_matrix_read_from___b5: - // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#1 [phi:main::@5->keyboard_matrix_read#0] -- register_copy + // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#1 [phi:main::@5->keyboard_matrix_read#0] -- call_phi_near jsr keyboard_matrix_read // [9] keyboard_matrix_read::return#3 = keyboard_matrix_read::return#0 jmp __b17 @@ -1264,7 +1264,7 @@ main: { __b12: // [23] keyboard_get_keycode::ch#0 = main::ch#2 -- vbuxx=vbuz1 ldx.z ch - // [24] call keyboard_get_keycode + // [24] call keyboard_get_keycode -- call_phi_near jsr keyboard_get_keycode // [25] keyboard_get_keycode::return#2 = keyboard_get_keycode::return#0 jmp __b18 @@ -1279,7 +1279,7 @@ main: { __b14: // [28] keyboard_key_pressed::key#0 = main::key#0 -- vbuxx=vbuaa tax - // [29] call keyboard_key_pressed + // [29] call keyboard_key_pressed -- call_phi_near jsr keyboard_key_pressed // [30] keyboard_key_pressed::return#2 = keyboard_key_pressed::return#0 jmp __b19 @@ -1426,7 +1426,7 @@ keyboard_key_pressed: { // [57] call keyboard_matrix_read // [48] phi from keyboard_key_pressed to keyboard_matrix_read [phi:keyboard_key_pressed->keyboard_matrix_read] keyboard_matrix_read_from_keyboard_key_pressed: - // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#0 [phi:keyboard_key_pressed->keyboard_matrix_read#0] -- register_copy + // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#0 [phi:keyboard_key_pressed->keyboard_matrix_read#0] -- call_phi_near jsr keyboard_matrix_read // [58] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 jmp __b1 @@ -1774,7 +1774,7 @@ main: { // [3] phi from main::@1 to main::@3 [phi:main::@1->main::@3] // main::@3 // keyboard_init() - // [4] call keyboard_init + // [4] call keyboard_init -- call_phi_near // Init keyboard jsr keyboard_init // main::@4 @@ -1804,7 +1804,7 @@ main: { ldx.z row // [8] call keyboard_matrix_read // [48] phi from main::@5 to keyboard_matrix_read [phi:main::@5->keyboard_matrix_read] - // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#1 [phi:main::@5->keyboard_matrix_read#0] -- register_copy + // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#1 [phi:main::@5->keyboard_matrix_read#0] -- call_phi_near jsr keyboard_matrix_read // byte row_pressed_bits = keyboard_matrix_read(row) // [9] keyboard_matrix_read::return#3 = keyboard_matrix_read::return#0 @@ -1887,7 +1887,7 @@ main: { // byte key = keyboard_get_keycode(ch) // [23] keyboard_get_keycode::ch#0 = main::ch#2 -- vbuxx=vbuz1 ldx.z ch - // [24] call keyboard_get_keycode + // [24] call keyboard_get_keycode -- call_phi_near jsr keyboard_get_keycode // [25] keyboard_get_keycode::return#2 = keyboard_get_keycode::return#0 // main::@18 @@ -1900,7 +1900,7 @@ main: { // keyboard_key_pressed(key) // [28] keyboard_key_pressed::key#0 = main::key#0 -- vbuxx=vbuaa tax - // [29] call keyboard_key_pressed + // [29] call keyboard_key_pressed -- call_phi_near jsr keyboard_key_pressed // [30] keyboard_key_pressed::return#2 = keyboard_key_pressed::return#0 // main::@19 @@ -2049,7 +2049,7 @@ keyboard_key_pressed: { tax // [57] call keyboard_matrix_read // [48] phi from keyboard_key_pressed to keyboard_matrix_read [phi:keyboard_key_pressed->keyboard_matrix_read] - // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#0 [phi:keyboard_key_pressed->keyboard_matrix_read#0] -- register_copy + // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#0 [phi:keyboard_key_pressed->keyboard_matrix_read#0] -- call_phi_near jsr keyboard_matrix_read // keyboard_matrix_read(rowidx) // [58] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 diff --git a/src/test/ref/test-lowhigh.log b/src/test/ref/test-lowhigh.log index 3bbd8dc31..a719270ef 100644 --- a/src/test/ref/test-lowhigh.log +++ b/src/test/ref/test-lowhigh.log @@ -1373,7 +1373,7 @@ main: { .label dw2 = $a .label dw = $e // [1] call print_cls - // [41] phi from main to print_cls [phi:main->print_cls] + // [41] phi from main to print_cls [phi:main->print_cls] -- call_phi_near print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1461,7 +1461,7 @@ main: { lda.z __29+1 sta.z dw2+1 // [11] print_ulong::dw#0 = main::dw2#10 - // [12] call print_ulong + // [12] call print_ulong -- call_phi_near // Test set/get low word of dword jsr print_ulong // [13] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -1473,7 +1473,7 @@ main: { // [50] phi from main::@3 to print_char [phi:main::@3->print_char] print_char_from___b3: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@3->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@3->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#8 = ' ' [phi:main::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char jmp __b4 @@ -1488,7 +1488,7 @@ main: { // [54] phi from main::@4 to print_uint [phi:main::@4->print_uint] print_uint_from___b4: // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@4->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#2 [phi:main::@4->print_uint#1] -- register_copy + // [54] phi print_uint::w#4 = print_uint::w#2 [phi:main::@4->print_uint#1] -- call_phi_near jsr print_uint // [17] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: @@ -1500,7 +1500,7 @@ main: { // [50] phi from main::@5 to print_char [phi:main::@5->print_char] print_char_from___b5: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@5->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@5->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#8 = ' ' [phi:main::@5->print_char#1] -- call_phi_near lda #' ' jsr print_char jmp __b6 @@ -1515,7 +1515,7 @@ main: { // [54] phi from main::@6 to print_uint [phi:main::@6->print_uint] print_uint_from___b6: // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@6->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#3 [phi:main::@6->print_uint#1] -- register_copy + // [54] phi print_uint::w#4 = print_uint::w#3 [phi:main::@6->print_uint#1] -- call_phi_near jsr print_uint // [21] phi from main::@6 to main::@7 [phi:main::@6->main::@7] __b7_from___b6: @@ -1527,7 +1527,7 @@ main: { // [50] phi from main::@7 to print_char [phi:main::@7->print_char] print_char_from___b7: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@7->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@7->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#8 = ' ' [phi:main::@7->print_char#1] -- call_phi_near lda #' ' jsr print_char jmp __b8 @@ -1539,7 +1539,7 @@ main: { // [60] phi from main::@8 to print_uchar [phi:main::@8->print_uchar] print_uchar_from___b8: // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@8->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#2 [phi:main::@8->print_uchar#1] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#2 [phi:main::@8->print_uchar#1] -- call_phi_near jsr print_uchar // [25] phi from main::@8 to main::@9 [phi:main::@8->main::@9] __b9_from___b8: @@ -1551,7 +1551,7 @@ main: { // [50] phi from main::@9 to print_char [phi:main::@9->print_char] print_char_from___b9: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@9->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@9->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#8 = ' ' [phi:main::@9->print_char#1] -- call_phi_near lda #' ' jsr print_char jmp __b10 @@ -1563,7 +1563,7 @@ main: { // [60] phi from main::@10 to print_uchar [phi:main::@10->print_uchar] print_uchar_from___b10: // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@10->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#3 [phi:main::@10->print_uchar#1] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#3 [phi:main::@10->print_uchar#1] -- call_phi_near jsr print_uchar // [29] phi from main::@10 to main::@11 [phi:main::@10->main::@11] __b11_from___b10: @@ -1575,7 +1575,7 @@ main: { // [50] phi from main::@11 to print_char [phi:main::@11->print_char] print_char_from___b11: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@11->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@11->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#8 = ' ' [phi:main::@11->print_char#1] -- call_phi_near lda #' ' jsr print_char jmp __b12 @@ -1587,7 +1587,7 @@ main: { // [60] phi from main::@12 to print_uchar [phi:main::@12->print_uchar] print_uchar_from___b12: // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@12->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#4 [phi:main::@12->print_uchar#1] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#4 [phi:main::@12->print_uchar#1] -- call_phi_near jsr print_uchar // [33] phi from main::@12 to main::@13 [phi:main::@12->main::@13] __b13_from___b12: @@ -1599,7 +1599,7 @@ main: { // [50] phi from main::@13 to print_char [phi:main::@13->print_char] print_char_from___b13: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@13->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@13->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#8 = ' ' [phi:main::@13->print_char#1] -- call_phi_near lda #' ' jsr print_char jmp __b14 @@ -1611,7 +1611,7 @@ main: { // [60] phi from main::@14 to print_uchar [phi:main::@14->print_uchar] print_uchar_from___b14: // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@14->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#5 [phi:main::@14->print_uchar#1] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#5 [phi:main::@14->print_uchar#1] -- call_phi_near jsr print_uchar // [37] phi from main::@14 to main::@15 [phi:main::@14->main::@15] __b15_from___b14: @@ -1620,7 +1620,7 @@ main: { __b15: // [38] call print_ln // Test get low low byte of dword - // [68] phi from main::@15 to print_ln [phi:main::@15->print_ln] + // [68] phi from main::@15 to print_ln [phi:main::@15->print_ln] -- call_phi_near print_ln_from___b15: jsr print_ln jmp __b16 @@ -1651,7 +1651,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [42] call memset - // [74] phi from print_cls to memset [phi:print_cls->memset] + // [74] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -1679,7 +1679,7 @@ print_ulong: { // [54] phi from print_ulong to print_uint [phi:print_ulong->print_uint] print_uint_from_print_ulong: // [54] phi print_char_cursor#67 = print_char_cursor#76 [phi:print_ulong->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- register_copy + // [54] phi print_uint::w#4 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- call_phi_near jsr print_uint jmp __b1 // print_ulong::@1 @@ -1693,7 +1693,7 @@ print_ulong: { // [54] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] print_uint_from___b1: // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:print_ulong::@1->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- register_copy + // [54] phi print_uint::w#4 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- call_phi_near jsr print_uint jmp __breturn // print_ulong::@return @@ -1730,7 +1730,7 @@ print_uint: { // [60] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [60] phi print_char_cursor#69 = print_char_cursor#67 [phi:print_uint->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -1741,7 +1741,7 @@ print_uint: { // [60] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -1767,7 +1767,7 @@ print_uchar: { // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [50] phi print_char_cursor#45 = print_char_cursor#69 [phi:print_uchar->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [50] phi print_char::ch#8 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -1781,7 +1781,7 @@ print_uchar: { // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:print_uchar::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [50] phi print_char::ch#8 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -2096,7 +2096,7 @@ main: { .label dw = $e // print_cls() // [1] call print_cls - // [41] phi from main to print_cls [phi:main->print_cls] + // [41] phi from main to print_cls [phi:main->print_cls] -- call_phi_near jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi print_char_cursor#30 = print_screen#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -2186,7 +2186,7 @@ main: { sta.z dw2+1 // print_ulong(dw2) // [11] print_ulong::dw#0 = main::dw2#10 - // [12] call print_ulong + // [12] call print_ulong -- call_phi_near // Test set/get low word of dword jsr print_ulong // [13] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -2195,7 +2195,7 @@ main: { // [14] call print_char // [50] phi from main::@3 to print_char [phi:main::@3->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@3->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@3->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#8 = ' ' [phi:main::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // main::@4 @@ -2208,7 +2208,7 @@ main: { // [16] call print_uint // [54] phi from main::@4 to print_uint [phi:main::@4->print_uint] // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@4->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#2 [phi:main::@4->print_uint#1] -- register_copy + // [54] phi print_uint::w#4 = print_uint::w#2 [phi:main::@4->print_uint#1] -- call_phi_near jsr print_uint // [17] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 @@ -2217,7 +2217,7 @@ main: { // Test get high word of dword // [50] phi from main::@5 to print_char [phi:main::@5->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@5->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@5->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#8 = ' ' [phi:main::@5->print_char#1] -- call_phi_near lda #' ' jsr print_char // main::@6 @@ -2230,7 +2230,7 @@ main: { // [20] call print_uint // [54] phi from main::@6 to print_uint [phi:main::@6->print_uint] // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@6->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#3 [phi:main::@6->print_uint#1] -- register_copy + // [54] phi print_uint::w#4 = print_uint::w#3 [phi:main::@6->print_uint#1] -- call_phi_near jsr print_uint // [21] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 @@ -2239,7 +2239,7 @@ main: { // Test get low word of dword // [50] phi from main::@7 to print_char [phi:main::@7->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@7->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@7->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#8 = ' ' [phi:main::@7->print_char#1] -- call_phi_near lda #' ' jsr print_char // main::@8 @@ -2249,7 +2249,7 @@ main: { // [24] call print_uchar // [60] phi from main::@8 to print_uchar [phi:main::@8->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@8->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#2 [phi:main::@8->print_uchar#1] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#2 [phi:main::@8->print_uchar#1] -- call_phi_near jsr print_uchar // [25] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 @@ -2258,7 +2258,7 @@ main: { // Test get high high byte of dword // [50] phi from main::@9 to print_char [phi:main::@9->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@9->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@9->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#8 = ' ' [phi:main::@9->print_char#1] -- call_phi_near lda #' ' jsr print_char // main::@10 @@ -2268,7 +2268,7 @@ main: { // [28] call print_uchar // [60] phi from main::@10 to print_uchar [phi:main::@10->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@10->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#3 [phi:main::@10->print_uchar#1] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#3 [phi:main::@10->print_uchar#1] -- call_phi_near jsr print_uchar // [29] phi from main::@10 to main::@11 [phi:main::@10->main::@11] // main::@11 @@ -2277,7 +2277,7 @@ main: { // Test get low high byte of dword // [50] phi from main::@11 to print_char [phi:main::@11->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@11->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@11->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#8 = ' ' [phi:main::@11->print_char#1] -- call_phi_near lda #' ' jsr print_char // main::@12 @@ -2287,7 +2287,7 @@ main: { // [32] call print_uchar // [60] phi from main::@12 to print_uchar [phi:main::@12->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@12->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#4 [phi:main::@12->print_uchar#1] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#4 [phi:main::@12->print_uchar#1] -- call_phi_near jsr print_uchar // [33] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 @@ -2296,7 +2296,7 @@ main: { // Test get high low byte of dword // [50] phi from main::@13 to print_char [phi:main::@13->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@13->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@13->print_char#1] -- vbuaa=vbuc1 + // [50] phi print_char::ch#8 = ' ' [phi:main::@13->print_char#1] -- call_phi_near lda #' ' jsr print_char // main::@14 @@ -2306,14 +2306,14 @@ main: { // [36] call print_uchar // [60] phi from main::@14 to print_uchar [phi:main::@14->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@14->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#5 [phi:main::@14->print_uchar#1] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#5 [phi:main::@14->print_uchar#1] -- call_phi_near jsr print_uchar // [37] phi from main::@14 to main::@15 [phi:main::@14->main::@15] // main::@15 // print_ln() // [38] call print_ln // Test get low low byte of dword - // [68] phi from main::@15 to print_ln [phi:main::@15->print_ln] + // [68] phi from main::@15 to print_ln [phi:main::@15->print_ln] -- call_phi_near jsr print_ln // main::@16 // for( dword dw = $12345678; dw != $12345690; dw++ ) @@ -2342,7 +2342,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [42] call memset - // [74] phi from print_cls to memset [phi:print_cls->memset] + // [74] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -2369,7 +2369,7 @@ print_ulong: { // [46] call print_uint // [54] phi from print_ulong to print_uint [phi:print_ulong->print_uint] // [54] phi print_char_cursor#67 = print_char_cursor#76 [phi:print_ulong->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- register_copy + // [54] phi print_uint::w#4 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- call_phi_near jsr print_uint // print_ulong::@1 // print_uint(WORD0(dw)) @@ -2381,7 +2381,7 @@ print_ulong: { // [48] call print_uint // [54] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:print_ulong::@1->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- register_copy + // [54] phi print_uint::w#4 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- call_phi_near jsr print_uint // print_ulong::@return // } @@ -2418,7 +2418,7 @@ print_uint: { // [56] call print_uchar // [60] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#67 [phi:print_uint->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -2427,7 +2427,7 @@ print_uint: { // [58] call print_uchar // [60] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [60] phi print_uchar::b#6 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -2453,7 +2453,7 @@ print_uchar: { // Table of hexadecimal digits // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#69 [phi:print_uchar->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [50] phi print_char::ch#8 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -2466,7 +2466,7 @@ print_uchar: { // [66] call print_char // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:print_uchar::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [50] phi print_char::ch#8 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/test-scroll-up.log b/src/test/ref/test-scroll-up.log index cbfe562da..59c9e835e 100644 --- a/src/test/ref/test-scroll-up.log +++ b/src/test/ref/test-scroll-up.log @@ -650,7 +650,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call scrollup1 - // [7] phi from main to scrollup1 [phi:main->scrollup1] + // [7] phi from main to scrollup1 [phi:main->scrollup1] -- call_phi_near scrollup1_from_main: jsr scrollup1 // [2] phi from main to main::@1 [phi:main->main::@1] @@ -659,7 +659,7 @@ main: { // main::@1 __b1: // [3] call scrollup2 - // [19] phi from main::@1 to scrollup2 [phi:main::@1->scrollup2] + // [19] phi from main::@1 to scrollup2 [phi:main::@1->scrollup2] -- call_phi_near scrollup2_from___b1: jsr scrollup2 // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -668,7 +668,7 @@ main: { // main::@2 __b2: // [5] call scrollup3 - // [30] phi from main::@2 to scrollup3 [phi:main::@2->scrollup3] + // [30] phi from main::@2 to scrollup3 [phi:main::@2->scrollup3] -- call_phi_near scrollup3_from___b2: jsr scrollup3 jmp __breturn @@ -1081,19 +1081,19 @@ Score: 21407 main: { // scrollup1() // [1] call scrollup1 - // [7] phi from main to scrollup1 [phi:main->scrollup1] + // [7] phi from main to scrollup1 [phi:main->scrollup1] -- call_phi_near jsr scrollup1 // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // scrollup2() // [3] call scrollup2 - // [19] phi from main::@1 to scrollup2 [phi:main::@1->scrollup2] + // [19] phi from main::@1 to scrollup2 [phi:main::@1->scrollup2] -- call_phi_near jsr scrollup2 // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // scrollup3() // [5] call scrollup3 - // [30] phi from main::@2 to scrollup3 [phi:main::@2->scrollup3] + // [30] phi from main::@2 to scrollup3 [phi:main::@2->scrollup3] -- call_phi_near jsr scrollup3 // main::@return // } diff --git a/src/test/ref/test-signed-word-minus-byte.log b/src/test/ref/test-signed-word-minus-byte.log index ae2da3cb4..da47eae51 100644 --- a/src/test/ref/test-signed-word-minus-byte.log +++ b/src/test/ref/test-signed-word-minus-byte.log @@ -1105,7 +1105,7 @@ main: { .label w1 = 8 .label i = $a // [1] call print_cls - // [17] phi from main to print_cls [phi:main->print_cls] + // [17] phi from main to print_cls [phi:main->print_cls] -- call_phi_near print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1156,7 +1156,7 @@ main: { // [20] phi from main::@1 to print_sint [phi:main::@1->print_sint] print_sint_from___b1: // [20] phi print_char_cursor#49 = print_char_cursor#55 [phi:main::@1->print_sint#0] -- register_copy - // [20] phi print_sint::w#3 = print_sint::w#1 [phi:main::@1->print_sint#1] -- register_copy + // [20] phi print_sint::w#3 = print_sint::w#1 [phi:main::@1->print_sint#1] -- call_phi_near jsr print_sint // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -1167,7 +1167,7 @@ main: { // [31] phi from main::@2 to print_char [phi:main::@2->print_char] print_char_from___b2: // [31] phi print_char_cursor#37 = print_char_cursor#12 [phi:main::@2->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = ' ' [phi:main::@2->print_char#1] -- vbuaa=vbuc1 + // [31] phi print_char::ch#5 = ' ' [phi:main::@2->print_char#1] -- call_phi_near lda #' ' jsr print_char jmp __b3 @@ -1182,7 +1182,7 @@ main: { // [20] phi from main::@3 to print_sint [phi:main::@3->print_sint] print_sint_from___b3: // [20] phi print_char_cursor#49 = print_char_cursor#12 [phi:main::@3->print_sint#0] -- register_copy - // [20] phi print_sint::w#3 = print_sint::w#2 [phi:main::@3->print_sint#1] -- register_copy + // [20] phi print_sint::w#3 = print_sint::w#2 [phi:main::@3->print_sint#1] -- call_phi_near jsr print_sint // [11] phi from main::@3 to main::@4 [phi:main::@3->main::@4] __b4_from___b3: @@ -1190,7 +1190,7 @@ main: { // main::@4 __b4: // [12] call print_ln - // [35] phi from main::@4 to print_ln [phi:main::@4->print_ln] + // [35] phi from main::@4 to print_ln [phi:main::@4->print_ln] -- call_phi_near print_ln_from___b4: jsr print_ln jmp __b5 @@ -1226,7 +1226,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [18] call memset - // [40] phi from print_cls to memset [phi:print_cls->memset] + // [40] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near memset_from_print_cls: jsr memset jmp __breturn @@ -1252,7 +1252,7 @@ print_sint: { // [31] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] print_char_from___b3: // [31] phi print_char_cursor#37 = print_char_cursor#49 [phi:print_sint::@3->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 + // [31] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [24] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -1263,7 +1263,7 @@ print_sint: { // print_sint::@2 __b2: // [25] print_uint::w#0 = (unsigned int)print_sint::w#5 - // [26] call print_uint + // [26] call print_uint -- call_phi_near jsr print_uint jmp __breturn // print_sint::@return @@ -1279,7 +1279,7 @@ print_sint: { // [31] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] print_char_from___b1: // [31] phi print_char_cursor#37 = print_char_cursor#49 [phi:print_sint::@1->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 + // [31] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char jmp __b4 @@ -1403,7 +1403,7 @@ print_uint: { // [47] call print_uchar // [51] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: - // [51] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy + // [51] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near jsr print_uchar jmp __b1 // print_uint::@1 @@ -1413,7 +1413,7 @@ print_uint: { // [49] call print_uchar // [51] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: - // [51] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy + // [51] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near jsr print_uchar jmp __breturn // print_uint::@return @@ -1439,7 +1439,7 @@ print_uchar: { // [31] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [31] phi print_char_cursor#37 = print_char_cursor#12 [phi:print_uchar->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar->print_char#1] -- register_copy + // [31] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char jmp __b1 // print_uchar::@1 @@ -1453,7 +1453,7 @@ print_uchar: { // [31] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [31] phi print_char_cursor#37 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- register_copy + // [31] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char jmp __breturn // print_uchar::@return @@ -1638,7 +1638,7 @@ main: { .label i = $a // print_cls() // [1] call print_cls - // [17] phi from main to print_cls [phi:main->print_cls] + // [17] phi from main to print_cls [phi:main->print_cls] -- call_phi_near jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 @@ -1688,7 +1688,7 @@ main: { // [6] call print_sint // [20] phi from main::@1 to print_sint [phi:main::@1->print_sint] // [20] phi print_char_cursor#49 = print_char_cursor#55 [phi:main::@1->print_sint#0] -- register_copy - // [20] phi print_sint::w#3 = print_sint::w#1 [phi:main::@1->print_sint#1] -- register_copy + // [20] phi print_sint::w#3 = print_sint::w#1 [phi:main::@1->print_sint#1] -- call_phi_near jsr print_sint // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 @@ -1696,7 +1696,7 @@ main: { // [8] call print_char // [31] phi from main::@2 to print_char [phi:main::@2->print_char] // [31] phi print_char_cursor#37 = print_char_cursor#12 [phi:main::@2->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = ' ' [phi:main::@2->print_char#1] -- vbuaa=vbuc1 + // [31] phi print_char::ch#5 = ' ' [phi:main::@2->print_char#1] -- call_phi_near lda #' ' jsr print_char // main::@3 @@ -1709,13 +1709,13 @@ main: { // [10] call print_sint // [20] phi from main::@3 to print_sint [phi:main::@3->print_sint] // [20] phi print_char_cursor#49 = print_char_cursor#12 [phi:main::@3->print_sint#0] -- register_copy - // [20] phi print_sint::w#3 = print_sint::w#2 [phi:main::@3->print_sint#1] -- register_copy + // [20] phi print_sint::w#3 = print_sint::w#2 [phi:main::@3->print_sint#1] -- call_phi_near jsr print_sint // [11] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // print_ln() // [12] call print_ln - // [35] phi from main::@4 to print_ln [phi:main::@4->print_ln] + // [35] phi from main::@4 to print_ln [phi:main::@4->print_ln] -- call_phi_near jsr print_ln // main::@5 // for( byte i: 0..10 ) @@ -1748,7 +1748,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [18] call memset - // [40] phi from print_cls to memset [phi:print_cls->memset] + // [40] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near jsr memset // print_cls::@return // } @@ -1770,7 +1770,7 @@ print_sint: { // [23] call print_char // [31] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] // [31] phi print_char_cursor#37 = print_char_cursor#49 [phi:print_sint::@3->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 + // [31] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near lda #' ' jsr print_char // [24] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -1779,7 +1779,7 @@ print_sint: { __b2: // print_uint((unsigned int)w) // [25] print_uint::w#0 = (unsigned int)print_sint::w#5 - // [26] call print_uint + // [26] call print_uint -- call_phi_near jsr print_uint // print_sint::@return // } @@ -1792,7 +1792,7 @@ print_sint: { // [29] call print_char // [31] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] // [31] phi print_char_cursor#37 = print_char_cursor#49 [phi:print_sint::@1->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 + // [31] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near lda #'-' jsr print_char // print_sint::@4 @@ -1913,7 +1913,7 @@ print_uint: { ldx.z w+1 // [47] call print_uchar // [51] phi from print_uint to print_uchar [phi:print_uint->print_uchar] - // [51] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy + // [51] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -1921,7 +1921,7 @@ print_uint: { ldx.z w // [49] call print_uchar // [51] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] - // [51] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy + // [51] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near jsr print_uchar // print_uint::@return // } @@ -1947,7 +1947,7 @@ print_uchar: { // Table of hexadecimal digits // [31] phi from print_uchar to print_char [phi:print_uchar->print_char] // [31] phi print_char_cursor#37 = print_char_cursor#12 [phi:print_uchar->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar->print_char#1] -- register_copy + // [31] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar->print_char#1] -- call_phi_near jsr print_char // print_uchar::@1 // b&$f @@ -1960,7 +1960,7 @@ print_uchar: { // [57] call print_char // [31] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [31] phi print_char_cursor#37 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- register_copy + // [31] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- call_phi_near jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/tod-1.log b/src/test/ref/tod-1.log index 2a06ad9f5..d41b4ed6f 100644 --- a/src/test/ref/tod-1.log +++ b/src/test/ref/tod-1.log @@ -2127,14 +2127,14 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [7] call main + // [7] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -2172,7 +2172,7 @@ conio_c64_init: { // [14] call gotoxy // [36] phi from conio_c64_init::@1 to gotoxy [phi:conio_c64_init::@1->gotoxy] gotoxy_from___b1: - // [36] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- register_copy + // [36] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -2192,7 +2192,7 @@ main: { ldx TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_MIN // [19] tod_init::tod_HOURS#0 = *((char *)&TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_HOURS) -- vbuyy=_deref_pbuc1 ldy TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_HOURS - // [20] call tod_init + // [20] call tod_init -- call_phi_near jsr tod_init // [21] phi from main main::@4 to main::@1 [phi:main/main::@4->main::@1] __b1_from_main: @@ -2203,7 +2203,7 @@ main: { // [22] call gotoxy // [36] phi from main::@1 to gotoxy [phi:main::@1->gotoxy] gotoxy_from___b1: - // [36] phi gotoxy::y#4 = 0 [phi:main::@1->gotoxy#0] -- vbuxx=vbuc1 + // [36] phi gotoxy::y#4 = 0 [phi:main::@1->gotoxy#0] -- call_phi_near ldx #0 jsr gotoxy // [23] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -2211,7 +2211,7 @@ main: { jmp __b2 // main::@2 __b2: - // [24] call tod_read + // [24] call tod_read -- call_phi_near jsr tod_read // [25] tod_read::return_TENTHS#1 = tod_read::return_TENTHS#0 // [26] tod_read::return_SEC#1 = tod_read::return_SEC#0 @@ -2230,7 +2230,7 @@ main: { ldy.z tod_read.return_MIN // [32] tod_str::tod_HOURS#0 = tod_read::return_HOURS#1 -- vbuxx=vbuaa tax - // [33] call tod_str + // [33] call tod_str -- call_phi_near jsr tod_str // [34] phi from main::@3 to main::@4 [phi:main::@3->main::@4] __b4_from___b3: @@ -2238,7 +2238,7 @@ main: { // main::@4 __b4: // [35] call cputs - // [88] phi from main::@4 to cputs [phi:main::@4->cputs] + // [88] phi from main::@4 to cputs [phi:main::@4->cputs] -- call_phi_near cputs_from___b4: jsr cputs jmp __b1_from___b4 @@ -2519,7 +2519,7 @@ cputs: { // cputs::@2 __b2: // [94] cputc::c#0 = cputs::c#1 - // [95] call cputc + // [95] call cputc -- call_phi_near jsr cputc // [89] phi from cputs::@2 to cputs::@1 [phi:cputs::@2->cputs::@1] __b1_from___b2: @@ -2555,7 +2555,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [102] call cputln + // [102] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -2567,7 +2567,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [105] call cputln + // [105] call cputln -- call_phi_near jsr cputln jmp __breturn } @@ -2595,7 +2595,7 @@ cputln: { sta.z conio_cursor_x // [109] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [110] call cscroll + // [110] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -2623,7 +2623,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [125] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [125] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -2642,7 +2642,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [125] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [125] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -2658,7 +2658,7 @@ cscroll: { memset_from___b3: // [135] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [135] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [135] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -2674,7 +2674,7 @@ cscroll: { memset_from___b4: // [135] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [135] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [135] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -3197,11 +3197,11 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [7] call main + // [7] call main -- call_phi_near jsr main // __start::@return // [8] return @@ -3232,7 +3232,7 @@ conio_c64_init: { // [13] gotoxy::y#2 = conio_c64_init::line#2 // [14] call gotoxy // [36] phi from conio_c64_init::@1 to gotoxy [phi:conio_c64_init::@1->gotoxy] - // [36] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- register_copy + // [36] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -3252,7 +3252,7 @@ main: { ldx TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_MIN // [19] tod_init::tod_HOURS#0 = *((char *)&TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_HOURS) -- vbuyy=_deref_pbuc1 ldy TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_HOURS - // [20] call tod_init + // [20] call tod_init -- call_phi_near jsr tod_init // [21] phi from main main::@4 to main::@1 [phi:main/main::@4->main::@1] // main::@1 @@ -3260,13 +3260,13 @@ main: { // gotoxy(0,0) // [22] call gotoxy // [36] phi from main::@1 to gotoxy [phi:main::@1->gotoxy] - // [36] phi gotoxy::y#4 = 0 [phi:main::@1->gotoxy#0] -- vbuxx=vbuc1 + // [36] phi gotoxy::y#4 = 0 [phi:main::@1->gotoxy#0] -- call_phi_near ldx #0 jsr gotoxy // [23] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // tod_read() - // [24] call tod_read + // [24] call tod_read -- call_phi_near jsr tod_read // [25] tod_read::return_TENTHS#1 = tod_read::return_TENTHS#0 // [26] tod_read::return_SEC#1 = tod_read::return_SEC#0 @@ -3284,13 +3284,13 @@ main: { ldy.z tod_read.return_MIN // [32] tod_str::tod_HOURS#0 = tod_read::return_HOURS#1 -- vbuxx=vbuaa tax - // [33] call tod_str + // [33] call tod_str -- call_phi_near jsr tod_str // [34] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // cputs(tod_str(tod_read())) // [35] call cputs - // [88] phi from main::@4 to cputs [phi:main::@4->cputs] + // [88] phi from main::@4 to cputs [phi:main::@4->cputs] -- call_phi_near jsr cputs jmp __b1 } @@ -3598,7 +3598,7 @@ cputs: { __b2: // cputc(c) // [94] cputc::c#0 = cputs::c#1 - // [95] call cputc + // [95] call cputc -- call_phi_near jsr cputc // [89] phi from cputs::@2 to cputs::@1 [phi:cputs::@2->cputs::@1] // [89] phi cputs::s#2 = cputs::s#0 [phi:cputs::@2->cputs::@1#0] -- register_copy @@ -3632,7 +3632,7 @@ cputc: { // [101] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [102] call cputln + // [102] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -3643,7 +3643,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [105] call cputln + // [105] call cputln -- call_phi_near jsr cputln rts } @@ -3676,7 +3676,7 @@ cputln: { // [109] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [110] call cscroll + // [110] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -3701,7 +3701,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [125] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [125] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -3717,7 +3717,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [125] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [125] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -3730,7 +3730,7 @@ cscroll: { // [135] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [135] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [135] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [135] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -3743,7 +3743,7 @@ cscroll: { // [135] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [135] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [135] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [135] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/toupper-1.log b/src/test/ref/toupper-1.log index a3c406731..cb5c3a047 100644 --- a/src/test/ref/toupper-1.log +++ b/src/test/ref/toupper-1.log @@ -1780,14 +1780,14 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [7] call main + // [7] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -1825,7 +1825,7 @@ conio_c64_init: { // [14] call gotoxy // [35] phi from conio_c64_init::@1 to gotoxy [phi:conio_c64_init::@1->gotoxy] gotoxy_from___b1: - // [35] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- register_copy + // [35] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -1843,7 +1843,7 @@ main: { sta $d018 // [17] call clrscr // Clear screen - // [50] phi from main to clrscr [phi:main->clrscr] + // [50] phi from main to clrscr [phi:main->clrscr] -- call_phi_near clrscr_from_main: jsr clrscr // [18] phi from main to main::@1 [phi:main->main::@1] @@ -1864,7 +1864,7 @@ main: { // [20] call cputc // [66] phi from main::@1 to cputc [phi:main::@1->cputc] cputc_from___b1: - // [66] phi cputc::c#2 = cputc::c#0 [phi:main::@1->cputc#0] -- register_copy + // [66] phi cputc::c#2 = cputc::c#0 [phi:main::@1->cputc#0] -- call_phi_near jsr cputc jmp __b4 // main::@4 @@ -1888,7 +1888,7 @@ main: { // [25] call gotoxy // [35] phi from main::@3 to gotoxy [phi:main::@3->gotoxy] gotoxy_from___b3: - // [35] phi gotoxy::y#4 = gotoxy::y#3 [phi:main::@3->gotoxy#0] -- register_copy + // [35] phi gotoxy::y#4 = gotoxy::y#3 [phi:main::@3->gotoxy#0] -- call_phi_near jsr gotoxy // [26] phi from main::@3 to main::@2 [phi:main::@3->main::@2] __b2_from___b3: @@ -1905,7 +1905,7 @@ main: { __b2: // [27] toupper::ch#0 = main::c1#2 -- vbuaa=vbuz1 lda.z c1 - // [28] call toupper + // [28] call toupper -- call_phi_near jsr toupper // [29] toupper::return#3 = toupper::return#2 jmp __b5 @@ -1915,7 +1915,7 @@ main: { // [31] call cputc // [66] phi from main::@5 to cputc [phi:main::@5->cputc] cputc_from___b5: - // [66] phi cputc::c#2 = cputc::c#1 [phi:main::@5->cputc#0] -- register_copy + // [66] phi cputc::c#2 = cputc::c#1 [phi:main::@5->cputc#0] -- call_phi_near jsr cputc jmp __b6 // main::@6 @@ -2159,7 +2159,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [73] call cputln + // [73] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -2171,7 +2171,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [76] call cputln + // [76] call cputln -- call_phi_near jsr cputln jmp __breturn } @@ -2231,7 +2231,7 @@ cputln: { sta.z conio_cursor_x // [85] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [86] call cscroll + // [86] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -2259,7 +2259,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [101] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [101] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -2278,7 +2278,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [101] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [101] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -2294,7 +2294,7 @@ cscroll: { memset_from___b3: // [111] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [111] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [111] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -2310,7 +2310,7 @@ cscroll: { memset_from___b4: // [111] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [111] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [111] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -2766,11 +2766,11 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [7] call main + // [7] call main -- call_phi_near jsr main // __start::@return // [8] return @@ -2801,7 +2801,7 @@ conio_c64_init: { // [13] gotoxy::y#2 = conio_c64_init::line#2 // [14] call gotoxy // [35] phi from conio_c64_init::@1 to gotoxy [phi:conio_c64_init::@1->gotoxy] - // [35] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- register_copy + // [35] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -2820,7 +2820,7 @@ main: { // clrscr() // [17] call clrscr // Clear screen - // [50] phi from main to clrscr [phi:main->clrscr] + // [50] phi from main to clrscr [phi:main->clrscr] -- call_phi_near jsr clrscr // [18] phi from main to main::@1 [phi:main->main::@1] // [18] phi main::c#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 @@ -2836,7 +2836,7 @@ main: { lda.z c // [20] call cputc // [66] phi from main::@1 to cputc [phi:main::@1->cputc] - // [66] phi cputc::c#2 = cputc::c#0 [phi:main::@1->cputc#0] -- register_copy + // [66] phi cputc::c#2 = cputc::c#0 [phi:main::@1->cputc#0] -- call_phi_near jsr cputc // main::@4 // for(char c:0..0xff) @@ -2856,7 +2856,7 @@ main: { inx // [25] call gotoxy // [35] phi from main::@3 to gotoxy [phi:main::@3->gotoxy] - // [35] phi gotoxy::y#4 = gotoxy::y#3 [phi:main::@3->gotoxy#0] -- register_copy + // [35] phi gotoxy::y#4 = gotoxy::y#3 [phi:main::@3->gotoxy#0] -- call_phi_near jsr gotoxy // [26] phi from main::@3 to main::@2 [phi:main::@3->main::@2] // [26] phi main::c1#2 = 0 [phi:main::@3->main::@2#0] -- vbuz1=vbuc1 @@ -2870,7 +2870,7 @@ main: { // toupper(c) // [27] toupper::ch#0 = main::c1#2 -- vbuaa=vbuz1 lda.z c1 - // [28] call toupper + // [28] call toupper -- call_phi_near jsr toupper // [29] toupper::return#3 = toupper::return#2 // main::@5 @@ -2878,7 +2878,7 @@ main: { // [30] cputc::c#1 = toupper::return#3 // [31] call cputc // [66] phi from main::@5 to cputc [phi:main::@5->cputc] - // [66] phi cputc::c#2 = cputc::c#1 [phi:main::@5->cputc#0] -- register_copy + // [66] phi cputc::c#2 = cputc::c#1 [phi:main::@5->cputc#0] -- call_phi_near jsr cputc // main::@6 // for(char c:0..0xff) @@ -3118,7 +3118,7 @@ cputc: { // [72] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [73] call cputln + // [73] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -3129,7 +3129,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [76] call cputln + // [76] call cputln -- call_phi_near jsr cputln rts } @@ -3191,7 +3191,7 @@ cputln: { // [85] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [86] call cscroll + // [86] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -3216,7 +3216,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [101] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [101] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -3232,7 +3232,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [101] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [101] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -3245,7 +3245,7 @@ cscroll: { // [111] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [111] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [111] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [111] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -3258,7 +3258,7 @@ cscroll: { // [111] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [111] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [111] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [111] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/travis1.log b/src/test/ref/travis1.log index 3097d73f5..1d1caf5d6 100644 --- a/src/test/ref/travis1.log +++ b/src/test/ref/travis1.log @@ -866,7 +866,7 @@ main: { jmp __b1 // main::@1 __b1: - // [2] call game_ready + // [2] call game_ready -- call_phi_near jsr game_ready // [3] game_ready::return#0 = game_ready::return#1 jmp __b4 @@ -889,7 +889,7 @@ main: { print_str_ln_from___b3: // [19] phi print_line_cursor#24 = print_line_cursor#15 [phi:main::@3->print_str_ln#0] -- register_copy // [19] phi print_char_cursor#33 = print_char_cursor#47 [phi:main::@3->print_str_ln#1] -- register_copy - // [19] phi print_str_ln::str#2 = main::str [phi:main::@3->print_str_ln#2] -- pbuz1=pbuc1 + // [19] phi print_str_ln::str#2 = main::str [phi:main::@3->print_str_ln#2] -- call_phi_near lda #str @@ -954,7 +954,7 @@ game_ready: { print_str_ln_from___b1: // [19] phi print_line_cursor#24 = print_line_cursor#26 [phi:game_ready::@1->print_str_ln#0] -- register_copy // [19] phi print_char_cursor#33 = print_char_cursor#37 [phi:game_ready::@1->print_str_ln#1] -- register_copy - // [19] phi print_str_ln::str#2 = game_ready::str [phi:game_ready::@1->print_str_ln#2] -- pbuz1=pbuc1 + // [19] phi print_str_ln::str#2 = game_ready::str [phi:game_ready::@1->print_str_ln#2] -- call_phi_near lda #str @@ -988,7 +988,7 @@ print_str_ln: { .label str = 4 // [20] print_str::str#0 = print_str_ln::str#2 // [21] call print_str - // [25] phi from print_str_ln to print_str [phi:print_str_ln->print_str] + // [25] phi from print_str_ln to print_str [phi:print_str_ln->print_str] -- call_phi_near print_str_from_print_str_ln: jsr print_str // [22] phi from print_str_ln to print_str_ln::@1 [phi:print_str_ln->print_str_ln::@1] @@ -997,7 +997,7 @@ print_str_ln: { // print_str_ln::@1 __b1: // [23] call print_ln - // [32] phi from print_str_ln::@1 to print_ln [phi:print_str_ln::@1->print_ln] + // [32] phi from print_str_ln::@1 to print_ln [phi:print_str_ln::@1->print_ln] -- call_phi_near print_ln_from___b1: jsr print_ln jmp __breturn @@ -1034,7 +1034,7 @@ print_str: { // [29] print_char::ch#0 = *print_str::str#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [30] call print_char + // [30] call print_char -- call_phi_near jsr print_char jmp __b3 // print_str::@3 @@ -1253,7 +1253,7 @@ main: { // main::@1 __b1: // game_ready() - // [2] call game_ready + // [2] call game_ready -- call_phi_near jsr game_ready // [3] game_ready::return#0 = game_ready::return#1 // main::@4 @@ -1275,7 +1275,7 @@ main: { // [19] phi from main::@3 to print_str_ln [phi:main::@3->print_str_ln] // [19] phi print_line_cursor#24 = print_line_cursor#15 [phi:main::@3->print_str_ln#0] -- register_copy // [19] phi print_char_cursor#33 = print_char_cursor#47 [phi:main::@3->print_str_ln#1] -- register_copy - // [19] phi print_str_ln::str#2 = main::str [phi:main::@3->print_str_ln#2] -- pbuz1=pbuc1 + // [19] phi print_str_ln::str#2 = main::str [phi:main::@3->print_str_ln#2] -- call_phi_near lda #str @@ -1332,7 +1332,7 @@ game_ready: { // [19] phi from game_ready::@1 to print_str_ln [phi:game_ready::@1->print_str_ln] // [19] phi print_line_cursor#24 = print_line_cursor#26 [phi:game_ready::@1->print_str_ln#0] -- register_copy // [19] phi print_char_cursor#33 = print_char_cursor#37 [phi:game_ready::@1->print_str_ln#1] -- register_copy - // [19] phi print_str_ln::str#2 = game_ready::str [phi:game_ready::@1->print_str_ln#2] -- pbuz1=pbuc1 + // [19] phi print_str_ln::str#2 = game_ready::str [phi:game_ready::@1->print_str_ln#2] -- call_phi_near lda #str @@ -1366,13 +1366,13 @@ print_str_ln: { // print_str(str) // [20] print_str::str#0 = print_str_ln::str#2 // [21] call print_str - // [25] phi from print_str_ln to print_str [phi:print_str_ln->print_str] + // [25] phi from print_str_ln to print_str [phi:print_str_ln->print_str] -- call_phi_near jsr print_str // [22] phi from print_str_ln to print_str_ln::@1 [phi:print_str_ln->print_str_ln::@1] // print_str_ln::@1 // print_ln() // [23] call print_ln - // [32] phi from print_str_ln::@1 to print_ln [phi:print_str_ln::@1->print_ln] + // [32] phi from print_str_ln::@1 to print_ln [phi:print_str_ln::@1->print_ln] -- call_phi_near jsr print_ln // print_str_ln::@return // } @@ -1405,7 +1405,7 @@ print_str: { // [29] print_char::ch#0 = *print_str::str#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [30] call print_char + // [30] call print_char -- call_phi_near jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/typedef-2.log b/src/test/ref/typedef-2.log index b0794ff9f..b687fafe3 100644 --- a/src/test/ref/typedef-2.log +++ b/src/test/ref/typedef-2.log @@ -161,7 +161,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -234,7 +234,7 @@ __start: { sta.z ptr+1 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/typedef-4.log b/src/test/ref/typedef-4.log index a7149e8a3..6f11f1843 100644 --- a/src/test/ref/typedef-4.log +++ b/src/test/ref/typedef-4.log @@ -143,7 +143,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main + // [3] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -219,7 +219,7 @@ __start: { sta.z v // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main + // [3] call main -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/typeid-plus-bytes.log b/src/test/ref/typeid-plus-bytes.log index 178f9f3fd..e8c0b9553 100644 --- a/src/test/ref/typeid-plus-bytes.log +++ b/src/test/ref/typeid-plus-bytes.log @@ -1214,28 +1214,28 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call testUnsigned + // [1] call testUnsigned -- call_phi_near jsr testUnsigned // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: jmp __b1 // main::@1 __b1: - // [3] call testUnsignedVals + // [3] call testUnsignedVals -- call_phi_near jsr testUnsignedVals // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: jmp __b2 // main::@2 __b2: - // [5] call testSigned + // [5] call testSigned -- call_phi_near jsr testSigned // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: jmp __b3 // main::@3 __b3: - // [7] call testSignedVals + // [7] call testSignedVals -- call_phi_near jsr testSignedVals jmp __breturn // main::@return @@ -1547,22 +1547,22 @@ Score: 336 // main main: { // testUnsigned() - // [1] call testUnsigned + // [1] call testUnsigned -- call_phi_near jsr testUnsigned // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // testUnsignedVals() - // [3] call testUnsignedVals + // [3] call testUnsignedVals -- call_phi_near jsr testUnsignedVals // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // testSigned() - // [5] call testSigned + // [5] call testSigned -- call_phi_near jsr testSigned // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // testSignedVals() - // [7] call testSignedVals + // [7] call testSignedVals -- call_phi_near jsr testSignedVals // main::@return // } diff --git a/src/test/ref/union-7.log b/src/test/ref/union-7.log index 03cd69c4e..7c32c5599 100644 --- a/src/test/ref/union-7.log +++ b/src/test/ref/union-7.log @@ -264,7 +264,7 @@ main: { // [1] call print // [5] phi from main to print [phi:main->print] print_from_main: - // [5] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 + // [5] phi idx#13 = 0 [phi:main->print#0] -- call_phi_near ldx #0 jsr print jmp __b1 @@ -280,7 +280,7 @@ main: { // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] print_from___b1: - // [5] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy + // [5] phi idx#13 = idx#14 [phi:main::@1->print#0] -- call_phi_near jsr print jmp __breturn // main::@return @@ -387,7 +387,7 @@ main: { bne !- // [1] call print // [5] phi from main to print [phi:main->print] - // [5] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 + // [5] phi idx#13 = 0 [phi:main->print#0] -- call_phi_near ldx #0 jsr print // main::@1 @@ -401,7 +401,7 @@ main: { bne !- // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] - // [5] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy + // [5] phi idx#13 = idx#14 [phi:main::@1->print#0] -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/union-8.log b/src/test/ref/union-8.log index 2293bd594..719799d32 100644 --- a/src/test/ref/union-8.log +++ b/src/test/ref/union-8.log @@ -262,7 +262,7 @@ main: { // [1] call data // [8] phi from main to data [phi:main->data] data_from_main: - // [8] phi data::i#2 = $1234 [phi:main->data#0] -- vwuz1=vwuc1 + // [8] phi data::i#2 = $1234 [phi:main->data#0] -- call_phi_near lda #<$1234 sta.z data.i lda #>$1234 @@ -284,7 +284,7 @@ main: { // [4] call data // [8] phi from main::@1 to data [phi:main::@1->data] data_from___b1: - // [8] phi data::i#2 = $5678 [phi:main::@1->data#0] -- vwuz1=vwuc1 + // [8] phi data::i#2 = $5678 [phi:main::@1->data#0] -- call_phi_near lda #<$5678 sta.z data.i lda #>$5678 @@ -384,7 +384,7 @@ main: { // union Data d1 = data(0x1234) // [1] call data // [8] phi from main to data [phi:main->data] - // [8] phi data::i#2 = $1234 [phi:main->data#0] -- vwuz1=vwuc1 + // [8] phi data::i#2 = $1234 [phi:main->data#0] -- call_phi_near lda #<$1234 sta.z data.i lda #>$1234 @@ -406,7 +406,7 @@ main: { // union Data d2 = data(0x5678) // [4] call data // [8] phi from main::@1 to data [phi:main::@1->data] - // [8] phi data::i#2 = $5678 [phi:main::@1->data#0] -- vwuz1=vwuc1 + // [8] phi data::i#2 = $5678 [phi:main::@1->data#0] -- call_phi_near lda #<$5678 sta.z data.i lda #>$5678 diff --git a/src/test/ref/var-register-zp-3.log b/src/test/ref/var-register-zp-3.log index 7515037a5..6d05b64b9 100644 --- a/src/test/ref/var-register-zp-3.log +++ b/src/test/ref/var-register-zp-3.log @@ -351,7 +351,7 @@ main: { sta.z print2.at lda #>screen sta.z print2.at+1 - // [5] phi print2::msg#4 = main::msg [phi:main->print2#1] -- pbuz1=pbuc1 + // [5] phi print2::msg#4 = main::msg [phi:main->print2#1] -- call_phi_near lda #msg @@ -370,7 +370,7 @@ main: { sta.z print2.at lda #>screen+$50 sta.z print2.at+1 - // [5] phi print2::msg#4 = main::msg1 [phi:main::@1->print2#1] -- pbuz1=pbuc1 + // [5] phi print2::msg#4 = main::msg1 [phi:main::@1->print2#1] -- call_phi_near lda #msg1 @@ -421,7 +421,7 @@ print2: { // [11] print_char::ch#0 = print2::msg#4[print2::i#2] -- vbuaa=pbuz1_derefidx_vbuz2 ldy.z i lda (msg),y - // [12] call print_char + // [12] call print_char -- call_phi_near jsr print_char jmp __b3 // print2::@3 @@ -534,7 +534,7 @@ main: { sta.z print2.at lda #>screen sta.z print2.at+1 - // [5] phi print2::msg#4 = main::msg [phi:main->print2#1] -- pbuz1=pbuc1 + // [5] phi print2::msg#4 = main::msg [phi:main->print2#1] -- call_phi_near lda #msg @@ -550,7 +550,7 @@ main: { sta.z print2.at lda #>screen+$50 sta.z print2.at+1 - // [5] phi print2::msg#4 = main::msg1 [phi:main::@1->print2#1] -- pbuz1=pbuc1 + // [5] phi print2::msg#4 = main::msg1 [phi:main::@1->print2#1] -- call_phi_near lda #msg1 @@ -599,7 +599,7 @@ print2: { // [11] print_char::ch#0 = print2::msg#4[print2::i#2] -- vbuaa=pbuz1_derefidx_vbuz2 ldy.z i lda (msg),y - // [12] call print_char + // [12] call print_char -- call_phi_near jsr print_char // print2::@3 // j += 2 diff --git a/src/test/ref/var-register.log b/src/test/ref/var-register.log index 104745bbf..c188609ed 100644 --- a/src/test/ref/var-register.log +++ b/src/test/ref/var-register.log @@ -340,7 +340,7 @@ main: { adc.z x // [5] print::idx#0 = main::y#4 // [6] print::val#0 = main::val1#0 - // [7] call print + // [7] call print -- call_phi_near jsr print jmp __b6 // main::@6 @@ -494,7 +494,7 @@ main: { // print(y, val1) // [5] print::idx#0 = main::y#4 // [6] print::val#0 = main::val1#0 - // [7] call print + // [7] call print -- call_phi_near jsr print // main::@6 // for( byte a: 0..100 ) diff --git a/src/test/ref/varmodel-ma_mem-3.log b/src/test/ref/varmodel-ma_mem-3.log index d685aab73..1acef1711 100644 --- a/src/test/ref/varmodel-ma_mem-3.log +++ b/src/test/ref/varmodel-ma_mem-3.log @@ -248,7 +248,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call model_ma_mem + // [1] call model_ma_mem -- call_phi_near jsr model_ma_mem // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -256,7 +256,7 @@ main: { // main::@1 __b1: // [3] call model_ssa_zp - // [12] phi from main::@1 to model_ssa_zp [phi:main::@1->model_ssa_zp] + // [12] phi from main::@1 to model_ssa_zp [phi:main::@1->model_ssa_zp] -- call_phi_near model_ssa_zp_from___b1: jsr model_ssa_zp jmp __breturn @@ -413,13 +413,13 @@ Score: 988 // main main: { // model_ma_mem() - // [1] call model_ma_mem + // [1] call model_ma_mem -- call_phi_near jsr model_ma_mem // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // model_ssa_zp() // [3] call model_ssa_zp - // [12] phi from main::@1 to model_ssa_zp [phi:main::@1->model_ssa_zp] + // [12] phi from main::@1 to model_ssa_zp [phi:main::@1->model_ssa_zp] -- call_phi_near jsr model_ssa_zp // main::@return // } diff --git a/src/test/ref/varmodel-mem-1.log b/src/test/ref/varmodel-mem-1.log index b7d15ea15..f7fb80684 100644 --- a/src/test/ref/varmodel-mem-1.log +++ b/src/test/ref/varmodel-mem-1.log @@ -306,7 +306,7 @@ main: { // [17] phi from main::@1 to sum [phi:main::@1->sum] sum_from___b1: // [17] phi sum::b#2 = sum::b#0 [phi:main::@1->sum#0] -- register_copy - // [17] phi sum::a#2 = sum::a#0 [phi:main::@1->sum#1] -- register_copy + // [17] phi sum::a#2 = sum::a#0 [phi:main::@1->sum#1] -- call_phi_near jsr sum // [5] sum::return#0 = sum::return#2 jmp __b2 @@ -321,7 +321,7 @@ main: { // [17] phi from main::@2 to sum [phi:main::@2->sum] sum_from___b2: // [17] phi sum::b#2 = sum::b#1 [phi:main::@2->sum#0] -- register_copy - // [17] phi sum::a#2 = sum::a#1 [phi:main::@2->sum#1] -- register_copy + // [17] phi sum::a#2 = sum::a#1 [phi:main::@2->sum#1] -- call_phi_near jsr sum // [10] sum::return#1 = sum::return#2 jmp __b3 @@ -453,7 +453,7 @@ main: { // [4] call sum // [17] phi from main::@1 to sum [phi:main::@1->sum] // [17] phi sum::b#2 = sum::b#0 [phi:main::@1->sum#0] -- register_copy - // [17] phi sum::a#2 = sum::a#0 [phi:main::@1->sum#1] -- register_copy + // [17] phi sum::a#2 = sum::a#0 [phi:main::@1->sum#1] -- call_phi_near jsr sum // sum(i,i) // [5] sum::return#0 = sum::return#2 @@ -466,7 +466,7 @@ main: { // [9] call sum // [17] phi from main::@2 to sum [phi:main::@2->sum] // [17] phi sum::b#2 = sum::b#1 [phi:main::@2->sum#0] -- register_copy - // [17] phi sum::a#2 = sum::a#1 [phi:main::@2->sum#1] -- register_copy + // [17] phi sum::a#2 = sum::a#1 [phi:main::@2->sum#1] -- call_phi_near jsr sum // sum(i,i) // [10] sum::return#1 = sum::return#2 diff --git a/src/test/ref/void-parameter.log b/src/test/ref/void-parameter.log index 874323b60..bb2e46799 100644 --- a/src/test/ref/void-parameter.log +++ b/src/test/ref/void-parameter.log @@ -204,7 +204,7 @@ main: { // [1] call print // [7] phi from main to print [phi:main->print] print_from_main: - // [7] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 + // [7] phi idx#13 = 0 [phi:main->print#0] -- call_phi_near ldx #0 jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -215,7 +215,7 @@ main: { // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] print_from___b1: - // [7] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy + // [7] phi idx#13 = idx#14 [phi:main::@1->print#0] -- call_phi_near jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -225,7 +225,7 @@ main: { // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] print_from___b2: - // [7] phi idx#13 = idx#14 [phi:main::@2->print#0] -- register_copy + // [7] phi idx#13 = idx#14 [phi:main::@2->print#0] -- call_phi_near jsr print jmp __breturn // main::@return @@ -300,7 +300,7 @@ main: { // print() // [1] call print // [7] phi from main to print [phi:main->print] - // [7] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 + // [7] phi idx#13 = 0 [phi:main->print#0] -- call_phi_near ldx #0 jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -308,14 +308,14 @@ main: { // print() // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] - // [7] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy + // [7] phi idx#13 = idx#14 [phi:main::@1->print#0] -- call_phi_near jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // print() // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] - // [7] phi idx#13 = idx#14 [phi:main::@2->print#0] -- register_copy + // [7] phi idx#13 = idx#14 [phi:main::@2->print#0] -- call_phi_near jsr print // main::@return // } diff --git a/src/test/ref/volatile-0.log b/src/test/ref/volatile-0.log index d95bbac39..94f5e8e54 100644 --- a/src/test/ref/volatile-0.log +++ b/src/test/ref/volatile-0.log @@ -152,7 +152,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -240,7 +240,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/volatile-2.log b/src/test/ref/volatile-2.log index 49b880883..ededfb26d 100644 --- a/src/test/ref/volatile-2.log +++ b/src/test/ref/volatile-2.log @@ -179,7 +179,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near main_from___b1: jsr main jmp __breturn @@ -278,7 +278,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near jsr main // __start::@return // [4] return diff --git a/src/test/ref/voronoi.log b/src/test/ref/voronoi.log index cac577834..9a71eb20b 100644 --- a/src/test/ref/voronoi.log +++ b/src/test/ref/voronoi.log @@ -1349,7 +1349,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call initscreen - // [6] phi from main to initscreen [phi:main->initscreen] + // [6] phi from main to initscreen [phi:main->initscreen] -- call_phi_near initscreen_from_main: jsr initscreen // [2] phi from main main::@2 to main::@1 [phi:main/main::@2->main::@1] @@ -1359,7 +1359,7 @@ main: { // main::@1 __b1: // [3] call render - // [12] phi from main::@1 to render [phi:main::@1->render] + // [12] phi from main::@1 to render [phi:main::@1->render] -- call_phi_near render_from___b1: jsr render // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -1367,7 +1367,7 @@ main: { jmp __b2 // main::@2 __b2: - // [5] call animate + // [5] call animate -- call_phi_near jsr animate jmp __b1_from___b2 } @@ -1452,7 +1452,7 @@ render: { // [15] findcol::x#0 = render::x#2 // [16] findcol::y#0 = render::y#4 // [17] call findcol - // [53] phi from render::@2 to findcol [phi:render::@2->findcol] + // [53] phi from render::@2 to findcol [phi:render::@2->findcol] -- call_phi_near findcol_from___b2: jsr findcol // [18] findcol::return#0 = findcol::return#3 -- vbuaa=vbuxx @@ -1976,19 +1976,19 @@ Score: 1568620 main: { // initscreen() // [1] call initscreen - // [6] phi from main to initscreen [phi:main->initscreen] + // [6] phi from main to initscreen [phi:main->initscreen] -- call_phi_near jsr initscreen // [2] phi from main main::@2 to main::@1 [phi:main/main::@2->main::@1] // main::@1 __b1: // render() // [3] call render - // [12] phi from main::@1 to render [phi:main::@1->render] + // [12] phi from main::@1 to render [phi:main::@1->render] -- call_phi_near jsr render // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // animate() - // [5] call animate + // [5] call animate -- call_phi_near jsr animate jmp __b1 } @@ -2065,7 +2065,7 @@ render: { // [15] findcol::x#0 = render::x#2 // [16] findcol::y#0 = render::y#4 // [17] call findcol - // [53] phi from render::@2 to findcol [phi:render::@2->findcol] + // [53] phi from render::@2 to findcol [phi:render::@2->findcol] -- call_phi_near jsr findcol // byte col = findcol(x, y) // [18] findcol::return#0 = findcol::return#3 -- vbuaa=vbuxx diff --git a/src/test/ref/weeip-bbslist.log b/src/test/ref/weeip-bbslist.log index b8f240724..943137694 100644 --- a/src/test/ref/weeip-bbslist.log +++ b/src/test/ref/weeip-bbslist.log @@ -4093,14 +4093,14 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [7] call main + // [7] call main -- call_phi_near jsr main jmp __breturn // __start::@return @@ -4135,7 +4135,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -4176,7 +4176,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln jmp __breturn // cputc::@return @@ -4188,7 +4188,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln jmp __breturn } @@ -4234,7 +4234,7 @@ main: { // [32] call printf_string // [64] phi from main::@2 to printf_string [phi:main::@2->printf_string] printf_string_from___b2: - // [64] phi printf_string::str#2 = printf_string::str#0 [phi:main::@2->printf_string#0] -- register_copy + // [64] phi printf_string::str#2 = printf_string::str#0 [phi:main::@2->printf_string#0] -- call_phi_near jsr printf_string // [33] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -4249,7 +4249,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = main::s [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 + // [68] phi printf_str::s#7 = main::s [phi:main::@3->printf_str#1] -- call_phi_near lda #s @@ -4268,7 +4268,7 @@ main: { // [36] call printf_string // [64] phi from main::@4 to printf_string [phi:main::@4->printf_string] printf_string_from___b4: - // [64] phi printf_string::str#2 = printf_string::str#1 [phi:main::@4->printf_string#0] -- register_copy + // [64] phi printf_string::str#2 = printf_string::str#1 [phi:main::@4->printf_string#0] -- call_phi_near jsr printf_string // [37] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: @@ -4283,7 +4283,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = main::s [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 + // [68] phi printf_str::s#7 = main::s [phi:main::@5->printf_str#1] -- call_phi_near lda #s @@ -4300,7 +4300,7 @@ main: { lda (bbs),y sta.z printf_uint.uvalue+1 // [40] call printf_uint - // [77] phi from main::@6 to printf_uint [phi:main::@6->printf_uint] + // [77] phi from main::@6 to printf_uint [phi:main::@6->printf_uint] -- call_phi_near printf_uint_from___b6: jsr printf_uint // [41] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -4316,7 +4316,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = main::s2 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 + // [68] phi printf_str::s#7 = main::s2 [phi:main::@7->printf_str#1] -- call_phi_near lda #s2 @@ -4467,7 +4467,7 @@ cputln: { sta.z conio_cursor_x // [61] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [62] call cscroll + // [62] call cscroll -- call_phi_near jsr cscroll jmp __breturn // cputln::@return @@ -4493,7 +4493,7 @@ printf_string: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- register_copy + // [68] phi printf_str::s#7 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- call_phi_near jsr printf_str jmp __breturn // printf_string::@return @@ -4559,7 +4559,7 @@ printf_uint: { // [79] utoa::value#1 = printf_uint::uvalue#0 // [80] call utoa // Format number into buffer - // [97] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] + // [97] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] -- call_phi_near utoa_from___b1: jsr utoa jmp __b2 @@ -4569,7 +4569,7 @@ printf_uint: { lda printf_buffer // [82] call printf_number_buffer // Print using format - // [118] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] + // [118] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] -- call_phi_near printf_number_buffer_from___b2: jsr printf_number_buffer jmp __breturn @@ -4598,7 +4598,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [126] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [126] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -4617,7 +4617,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [126] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [126] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -4633,7 +4633,7 @@ cscroll: { memset_from___b3: // [136] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [136] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [136] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -4649,7 +4649,7 @@ cscroll: { memset_from___b4: // [136] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [136] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [136] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -4787,7 +4787,7 @@ utoa: { // [112] utoa_append::value#0 = utoa::value#2 // [113] utoa_append::sub#0 = utoa::digit_value#0 // [114] call utoa_append - // [144] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + // [144] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near utoa_append_from___b5: jsr utoa_append // [115] utoa_append::return#0 = utoa_append::value#2 @@ -4843,7 +4843,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>printf_uint.putc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 + // [68] phi printf_str::s#7 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near lda #buffer_digits @@ -5622,11 +5622,11 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init + // [5] call conio_c64_init -- call_phi_near jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [7] call main + // [7] call main -- call_phi_near jsr main // __start::@return // [8] return @@ -5655,7 +5655,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy + // [14] call gotoxy -- call_phi_near jsr gotoxy // conio_c64_init::@return // } @@ -5694,7 +5694,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln + // [23] call cputln -- call_phi_near jsr cputln // cputc::@return __breturn: @@ -5705,7 +5705,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln + // [26] call cputln -- call_phi_near jsr cputln rts } @@ -5749,7 +5749,7 @@ main: { sta.z printf_string.str+1 // [32] call printf_string // [64] phi from main::@2 to printf_string [phi:main::@2->printf_string] - // [64] phi printf_string::str#2 = printf_string::str#0 [phi:main::@2->printf_string#0] -- register_copy + // [64] phi printf_string::str#2 = printf_string::str#0 [phi:main::@2->printf_string#0] -- call_phi_near jsr printf_string // [33] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 @@ -5761,7 +5761,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = main::s [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 + // [68] phi printf_str::s#7 = main::s [phi:main::@3->printf_str#1] -- call_phi_near lda #s @@ -5778,7 +5778,7 @@ main: { sta.z printf_string.str+1 // [36] call printf_string // [64] phi from main::@4 to printf_string [phi:main::@4->printf_string] - // [64] phi printf_string::str#2 = printf_string::str#1 [phi:main::@4->printf_string#0] -- register_copy + // [64] phi printf_string::str#2 = printf_string::str#1 [phi:main::@4->printf_string#0] -- call_phi_near jsr printf_string // [37] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 @@ -5790,7 +5790,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = main::s [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 + // [68] phi printf_str::s#7 = main::s [phi:main::@5->printf_str#1] -- call_phi_near lda #s @@ -5806,7 +5806,7 @@ main: { lda (bbs),y sta.z printf_uint.uvalue+1 // [40] call printf_uint - // [77] phi from main::@6 to printf_uint [phi:main::@6->printf_uint] + // [77] phi from main::@6 to printf_uint [phi:main::@6->printf_uint] -- call_phi_near jsr printf_uint // [41] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 @@ -5818,7 +5818,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = main::s2 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 + // [68] phi printf_str::s#7 = main::s2 [phi:main::@7->printf_str#1] -- call_phi_near lda #s2 @@ -5970,7 +5970,7 @@ cputln: { // [61] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [62] call cscroll + // [62] call cscroll -- call_phi_near jsr cscroll // cputln::@return // } @@ -5993,7 +5993,7 @@ printf_string: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- register_copy + // [68] phi printf_str::s#7 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- call_phi_near jsr printf_str // printf_string::@return // } @@ -6056,7 +6056,7 @@ printf_uint: { // [79] utoa::value#1 = printf_uint::uvalue#0 // [80] call utoa // Format number into buffer - // [97] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] + // [97] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] -- call_phi_near jsr utoa // printf_uint::@2 // printf_number_buffer(putc, printf_buffer, format) @@ -6064,7 +6064,7 @@ printf_uint: { lda printf_buffer // [82] call printf_number_buffer // Print using format - // [118] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] + // [118] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] -- call_phi_near jsr printf_number_buffer // printf_uint::@return // } @@ -6089,7 +6089,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [126] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [126] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near lda #DEFAULT_SCREEN+$28 @@ -6105,7 +6105,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [126] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [126] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near lda #COLORRAM+$28 @@ -6118,7 +6118,7 @@ cscroll: { // [136] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [136] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [136] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [136] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near lda #DEFAULT_SCREEN+$19*$28-$28 @@ -6131,7 +6131,7 @@ cscroll: { // [136] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [136] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [136] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [136] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near lda #COLORRAM+$19*$28-$28 @@ -6267,7 +6267,7 @@ utoa: { // [112] utoa_append::value#0 = utoa::value#2 // [113] utoa_append::sub#0 = utoa::digit_value#0 // [114] call utoa_append - // [144] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + // [144] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near jsr utoa_append // utoa_append(buffer++, value, digit_value) // [115] utoa_append::return#0 = utoa_append::value#2 @@ -6317,7 +6317,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>printf_uint.putc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 + // [68] phi printf_str::s#7 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near lda #buffer_digits diff --git a/src/test/ref/weeip-checksum.log b/src/test/ref/weeip-checksum.log index 000ab670d..d1766bac7 100644 --- a/src/test/ref/weeip-checksum.log +++ b/src/test/ref/weeip-checksum.log @@ -729,7 +729,7 @@ main: { // [1] call add_checksum // [8] phi from main to add_checksum [phi:main->add_checksum] add_checksum_from_main: - // [8] phi add_checksum::v#3 = $1234 [phi:main->add_checksum#0] -- vwuz1=vwuc1 + // [8] phi add_checksum::v#3 = $1234 [phi:main->add_checksum#0] -- call_phi_near lda #<$1234 sta.z add_checksum.v lda #>$1234 @@ -746,7 +746,7 @@ main: { // [3] call add_checksum // [8] phi from main::@1 to add_checksum [phi:main::@1->add_checksum] add_checksum_from___b1: - // [8] phi add_checksum::v#3 = $2345 [phi:main::@1->add_checksum#0] -- vwuz1=vwuc1 + // [8] phi add_checksum::v#3 = $2345 [phi:main::@1->add_checksum#0] -- call_phi_near lda #<$2345 sta.z add_checksum.v lda #>$2345 @@ -763,7 +763,7 @@ main: { // [5] call add_checksum // [8] phi from main::@2 to add_checksum [phi:main::@2->add_checksum] add_checksum_from___b2: - // [8] phi add_checksum::v#3 = $3456 [phi:main::@2->add_checksum#0] -- vwuz1=vwuc1 + // [8] phi add_checksum::v#3 = $3456 [phi:main::@2->add_checksum#0] -- call_phi_near lda #<$3456 sta.z add_checksum.v lda #>$3456 @@ -991,7 +991,7 @@ main: { // add_checksum(0x1234) // [1] call add_checksum // [8] phi from main to add_checksum [phi:main->add_checksum] - // [8] phi add_checksum::v#3 = $1234 [phi:main->add_checksum#0] -- vwuz1=vwuc1 + // [8] phi add_checksum::v#3 = $1234 [phi:main->add_checksum#0] -- call_phi_near lda #<$1234 sta.z add_checksum.v lda #>$1234 @@ -1007,7 +1007,7 @@ main: { // add_checksum(0x2345) // [3] call add_checksum // [8] phi from main::@1 to add_checksum [phi:main::@1->add_checksum] - // [8] phi add_checksum::v#3 = $2345 [phi:main::@1->add_checksum#0] -- vwuz1=vwuc1 + // [8] phi add_checksum::v#3 = $2345 [phi:main::@1->add_checksum#0] -- call_phi_near lda #<$2345 sta.z add_checksum.v lda #>$2345 @@ -1023,7 +1023,7 @@ main: { // add_checksum(0x3456) // [5] call add_checksum // [8] phi from main::@2 to add_checksum [phi:main::@2->add_checksum] - // [8] phi add_checksum::v#3 = $3456 [phi:main::@2->add_checksum#0] -- vwuz1=vwuc1 + // [8] phi add_checksum::v#3 = $3456 [phi:main::@2->add_checksum#0] -- call_phi_near lda #<$3456 sta.z add_checksum.v lda #>$3456 diff --git a/src/test/ref/wfragment1.log b/src/test/ref/wfragment1.log index cb6bee255..7010c4f71 100644 --- a/src/test/ref/wfragment1.log +++ b/src/test/ref/wfragment1.log @@ -238,7 +238,7 @@ main: { __b1: // [2] move_enemy::obj_slot#0 = main::i#2 -- vbuaa=vbuyy tya - // [3] call move_enemy + // [3] call move_enemy -- call_phi_near jsr move_enemy jmp __b2 // main::@2 @@ -344,7 +344,7 @@ main: { // move_enemy(i) // [2] move_enemy::obj_slot#0 = main::i#2 -- vbuaa=vbuyy tya - // [3] call move_enemy + // [3] call move_enemy -- call_phi_near jsr move_enemy // main::@2 // for(byte i:0..5) diff --git a/src/test/ref/zeropage-sinus.log b/src/test/ref/zeropage-sinus.log index c0c2ed378..58a5e6075 100644 --- a/src/test/ref/zeropage-sinus.log +++ b/src/test/ref/zeropage-sinus.log @@ -323,28 +323,28 @@ main: { // [4] *(SCREEN+OFFSET_SPRITE_PTRS) = (char)SPRITE/$40 -- _deref_pbuc1=vbuc2 lda #$ff&SPRITE/$40 sta SCREEN+OFFSET_SPRITE_PTRS - // [5] call saveZeropage + // [5] call saveZeropage -- call_phi_near jsr saveZeropage // [6] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: jmp __b1 // main::@1 __b1: - // [7] call sinZeropage + // [7] call sinZeropage -- call_phi_near jsr sinZeropage // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: jmp __b2 // main::@2 __b2: - // [9] call animSprite + // [9] call animSprite -- call_phi_near jsr animSprite // [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: jmp __b3 // main::@3 __b3: - // [11] call restoreZeropage + // [11] call restoreZeropage -- call_phi_near jsr restoreZeropage jmp __breturn // main::@return @@ -541,22 +541,22 @@ main: { lda #$ff&SPRITE/$40 sta SCREEN+OFFSET_SPRITE_PTRS // saveZeropage() - // [5] call saveZeropage + // [5] call saveZeropage -- call_phi_near jsr saveZeropage // [6] phi from main to main::@1 [phi:main->main::@1] // main::@1 // sinZeropage() - // [7] call sinZeropage + // [7] call sinZeropage -- call_phi_near jsr sinZeropage // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // animSprite() - // [9] call animSprite + // [9] call animSprite -- call_phi_near jsr animSprite // [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // restoreZeropage() - // [11] call restoreZeropage + // [11] call restoreZeropage -- call_phi_near jsr restoreZeropage // main::@return // } diff --git a/src/test/ref/zp-reserve-coalesce-problem.log b/src/test/ref/zp-reserve-coalesce-problem.log index 8eb06440f..c32198dec 100644 --- a/src/test/ref/zp-reserve-coalesce-problem.log +++ b/src/test/ref/zp-reserve-coalesce-problem.log @@ -663,7 +663,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call benchmarkCountdownFor + // [1] call benchmarkCountdownFor -- call_phi_near jsr benchmarkCountdownFor // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -671,7 +671,7 @@ main: { // main::@1 __b1: // [3] call benchmarkLandscape - // [14] phi from main::@1 to benchmarkLandscape [phi:main::@1->benchmarkLandscape] + // [14] phi from main::@1 to benchmarkLandscape [phi:main::@1->benchmarkLandscape] -- call_phi_near benchmarkLandscape_from___b1: jsr benchmarkLandscape jmp __breturn @@ -1022,13 +1022,13 @@ Score: 649273 // main main: { // benchmarkCountdownFor() - // [1] call benchmarkCountdownFor + // [1] call benchmarkCountdownFor -- call_phi_near jsr benchmarkCountdownFor // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // benchmarkLandscape() // [3] call benchmarkLandscape - // [14] phi from main::@1 to benchmarkLandscape [phi:main::@1->benchmarkLandscape] + // [14] phi from main::@1 to benchmarkLandscape [phi:main::@1->benchmarkLandscape] -- call_phi_near jsr benchmarkLandscape // main::@return // } diff --git a/src/test/ref/zpparammin.log b/src/test/ref/zpparammin.log index 93b37706c..9e7ddaf99 100644 --- a/src/test/ref/zpparammin.log +++ b/src/test/ref/zpparammin.log @@ -440,7 +440,7 @@ main: { inx // [4] sum::a#0 = main::i#2 -- vbuyy=vbuz1 ldy.z i - // [5] call sum + // [5] call sum -- call_phi_near jsr sum // [6] sum::return#0 = sum::return#1 jmp __b2 @@ -460,7 +460,7 @@ main: { inx // [11] sum2::a#0 = main::i#2 -- vbuyy=vbuz1 ldy.z i - // [12] call sum2 + // [12] call sum2 -- call_phi_near jsr sum2 // [13] sum2::return#0 = sum2::return#1 jmp __b3 @@ -630,7 +630,7 @@ main: { inx // [4] sum::a#0 = main::i#2 -- vbuyy=vbuz1 ldy.z i - // [5] call sum + // [5] call sum -- call_phi_near jsr sum // [6] sum::return#0 = sum::return#1 // main::@2 @@ -649,7 +649,7 @@ main: { inx inx // [11] sum2::a#0 = main::i#2 -- vbuyy=vbuz1 - // [12] call sum2 + // [12] call sum2 -- call_phi_near jsr sum2 // [13] sum2::return#0 = sum2::return#1 // main::@3 diff --git a/src/test/target/procedure-callingconvention-stack-far-3.asm b/src/test/target/procedure-callingconvention-stack-far-3.asm deleted file mode 100644 index b361ef9a2..000000000 --- a/src/test/target/procedure-callingconvention-stack-far-3.asm +++ /dev/null @@ -1,145 +0,0 @@ - // File Comments -// Test a procedure with calling convention stack -// Illustrates live range problem with function variable printother::i and global variable val - // Upstart -.cpu _65c02 - // Commodore 64 PRG executable file -.file [name="procedure-callingconvention-stack-far-3.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(__start) - // Global Constants & labels - .label SCREEN = $400 - .label val = 3 -.segment Code - // __start -__start: { - // __start::__init1 - // char val = 0 - // [1] val = 0 -- vbuz1=vbuc1 - lda #0 - sta.z val - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - // __start::@1 - // [3] callexecute main -- call_vprc1 - jsr main - // __start::@return - // [4] return - rts -} - // printother -printother: { - .label i = 2 - // [6] phi from printother to printother::@1 [phi:printother->printother::@1] - // [6] phi printother::i#2 = 0 [phi:printother->printother::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z i - // [6] phi from printother::@1 to printother::@1 [phi:printother::@1->printother::@1] - // [6] phi printother::i#2 = printother::i#1 [phi:printother::@1->printother::@1#0] -- register_copy - // printother::@1 - __b1: - // (SCREEN+40)[i]++; - // [7] (SCREEN+$28)[printother::i#2] = ++ (SCREEN+$28)[printother::i#2] -- pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 - ldx.z i - inc SCREEN+$28,x - // for(char i:0..5) - // [8] printother::i#1 = ++ printother::i#2 -- vbuz1=_inc_vbuz1 - inc.z i - // [9] if(printother::i#1!=6) goto printother::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #6 - cmp.z i - bne __b1 - // printother::@return - // } - // [10] return - rts -} - // incval -incval: { - // val++; - // [11] val = ++ val -- vbuz1=_inc_vbuz1 - inc.z val - // incval::@return - // } - // [12] return - rts -} - // printval -printval: { - // SCREEN[0] = val - // [13] *SCREEN = val -- _deref_pbuc1=vbuz1 - lda.z val - sta SCREEN - // printval::@return - // } - // [14] return - rts -} - // ival -ival: { - // incval() - // [16] callexecute incval -- call_far_cx16_exit - jsr $ff6e - .byte incval - .byte $15 - // ival::@return - // } - // [17] return - rts -} - // pval -pval: { - // printval() - // [19] callexecute printval -- call_far_cx16_exit - jsr $ff6e - .byte printval - .byte $14 - // pval::@return - // } - // [20] return - rts -} - // main -main: { - .label i = 4 - // [22] phi from main to main::@1 [phi:main->main::@1] - // [22] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta.z i - // [22] phi from main::@1 to main::@1 [phi:main::@1->main::@1] - // [22] phi main::i#2 = main::i#1 [phi:main::@1->main::@1#0] -- register_copy - // main::@1 - __b1: - // pval() - // [23] callexecute pval -- call_far_cx16_exit - jsr $ff6e - .byte pval - .byte $14 - // printother() - // [24] callexecute printother -- call_vprc1 - jsr printother - // ival() - // [25] callexecute ival -- call_far_cx16_exit - jsr $ff6e - .byte ival - .byte $15 - // for(char i:0..5) - // [26] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1 - inc.z i - // [27] if(main::i#1!=6) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 - lda #6 - cmp.z i - bne __b1 - // main::@return - // } - // [28] return - rts -} - // File Data diff --git a/src/test/target/procedure-callingconvention-stack-far-3.dbg b/src/test/target/procedure-callingconvention-stack-far-3.dbg deleted file mode 100644 index 51e9414f5..000000000 --- a/src/test/target/procedure-callingconvention-stack-far-3.dbg +++ /dev/null @@ -1,153 +0,0 @@ - - - 0,KickAss.jar:/include/autoinclude.asm - 1,D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\target\procedure-callingconvention-stack-far-3.asm - - - - - - - - $0801,$0802,0,38,2,38,6 - $0803,$0804,0,39,5,39,9 - $0805,$0805,0,40,5,40,9 - $0806,$0809,0,41,2,41,6 - $080a,$080a,0,42,2,42,6 - $080b,$080c,0,44,5,44,9 - - - $080d,$080e,1,23,5,23,7 - $080f,$0810,1,24,5,24,7 - $0811,$0813,1,28,5,28,7 - $0814,$0814,1,31,5,31,7 - $0815,$0816,1,38,5,38,7 - $0817,$0818,1,39,5,39,7 - $0819,$081a,1,46,5,46,7 - $081b,$081d,1,47,5,47,7 - $081e,$081f,1,50,5,50,7 - $0820,$0821,1,52,5,52,7 - $0822,$0823,1,53,5,53,7 - $0824,$0825,1,54,5,54,7 - $0826,$0826,1,58,5,58,7 - $0827,$0828,1,64,5,64,7 - $0829,$0829,1,68,5,68,7 - $082a,$082b,1,74,5,74,7 - $082c,$082e,1,75,5,75,7 - $082f,$082f,1,79,5,79,7 - $0830,$0832,1,85,5,85,7 - $0833,$0833,1,86,5,86,9 - $0834,$0834,1,87,5,87,9 - $0835,$0835,1,88,5,88,9 - $0836,$0836,1,92,5,92,7 - $0837,$0839,1,98,5,98,7 - $083a,$083a,1,99,5,99,9 - $083b,$083b,1,100,5,100,9 - $083c,$083c,1,101,5,101,9 - $083d,$083d,1,105,5,105,7 - $083e,$083f,1,112,5,112,7 - $0840,$0841,1,113,5,113,7 - $0842,$0844,1,120,5,120,7 - $0845,$0845,1,121,5,121,9 - $0846,$0846,1,122,5,122,9 - $0847,$0847,1,123,5,123,9 - $0848,$084a,1,126,5,126,7 - $084b,$084d,1,129,5,129,7 - $084e,$084e,1,130,5,130,9 - $084f,$084f,1,131,5,131,9 - $0850,$0850,1,132,5,132,9 - $0851,$0852,1,135,5,135,7 - $0853,$0854,1,137,5,137,7 - $0855,$0856,1,138,5,138,7 - $0857,$0858,1,139,5,139,7 - $0859,$0859,1,143,5,143,7 - - - - - - $0801,$0802,0,38,2,38,6 - $0803,$0804,0,39,5,39,9 - $0805,$0805,0,40,5,40,9 - $0806,$0809,0,41,2,41,6 - $080a,$080a,0,42,2,42,6 - $080b,$080c,0,44,5,44,9 - - - - - - $080d,$080e,1,23,5,23,7 - $080f,$0810,1,24,5,24,7 - $0811,$0813,1,28,5,28,7 - $0814,$0814,1,31,5,31,7 - $0815,$0816,1,38,5,38,7 - $0817,$0818,1,39,5,39,7 - $0819,$081a,1,46,5,46,7 - $081b,$081d,1,47,5,47,7 - $081e,$081f,1,50,5,50,7 - $0820,$0821,1,52,5,52,7 - $0822,$0823,1,53,5,53,7 - $0824,$0825,1,54,5,54,7 - $0826,$0826,1,58,5,58,7 - $0827,$0828,1,64,5,64,7 - $0829,$0829,1,68,5,68,7 - $082a,$082b,1,74,5,74,7 - $082c,$082e,1,75,5,75,7 - $082f,$082f,1,79,5,79,7 - $0830,$0832,1,85,5,85,7 - $0833,$0833,1,86,5,86,9 - $0834,$0834,1,87,5,87,9 - $0835,$0835,1,88,5,88,9 - $0836,$0836,1,92,5,92,7 - $0837,$0839,1,98,5,98,7 - $083a,$083a,1,99,5,99,9 - $083b,$083b,1,100,5,100,9 - $083c,$083c,1,101,5,101,9 - $083d,$083d,1,105,5,105,7 - $083e,$083f,1,112,5,112,7 - $0840,$0841,1,113,5,113,7 - $0842,$0844,1,120,5,120,7 - $0845,$0845,1,121,5,121,9 - $0846,$0846,1,122,5,122,9 - $0847,$0847,1,123,5,123,9 - $0848,$084a,1,126,5,126,7 - $084b,$084d,1,129,5,129,7 - $084e,$084e,1,130,5,130,9 - $084f,$084f,1,131,5,131,9 - $0850,$0850,1,132,5,132,9 - $0851,$0852,1,135,5,135,7 - $0853,$0854,1,137,5,137,7 - $0855,$0856,1,138,5,138,7 - $0857,$0858,1,139,5,139,7 - $0859,$0859,1,143,5,143,7 - - - - - - - - Basic,$0400,SCREEN,1,15,10,15,15 - Basic,$0003,val,1,16,10,16,12 - Code,$080d,__start,1,19,1,19,8 - Code,$0815,printother,1,34,1,34,11 - Code,$0002,i,1,35,12,35,12 - Code,$0819,__b1,1,43,3,43,7 - Code,$0827,incval,1,61,1,61,7 - Code,$082a,printval,1,71,1,71,9 - Code,$0830,ival,1,82,1,82,5 - Code,$0837,pval,1,95,1,95,5 - Code,$083e,main,1,108,1,108,5 - Code,$0004,i,1,109,12,109,12 - Code,$0842,__b1,1,117,3,117,7 - Basic,$080b,upstartEnd,0,43,1,43,11 - - - - - - - - - diff --git a/src/test/target/procedure-callingconvention-stack-far-3.klog b/src/test/target/procedure-callingconvention-stack-far-3.klog deleted file mode 100644 index 351cd59e1..000000000 --- a/src/test/target/procedure-callingconvention-stack-far-3.klog +++ /dev/null @@ -1,22 +0,0 @@ -Output dir: D:\Users\svenv\OneDrive\Documents\GitHub\kickc\src\test\target -parsing -flex pass 1 -flex pass 2 -flex pass 3 -Output pass -Writing prg file: procedure-callingconvention-stack-far-3.prg - -Memory Map ----------- -Program-segment: - -Basic-segment: - $0801-$080c Basic - -Code-segment: - $080d-$0859 Code - -Data-segment: - -Writing Vice symbol file: procedure-callingconvention-stack-far-3.vs -Writing Symbol file: procedure-callingconvention-stack-far-3.sym diff --git a/src/test/target/procedure-callingconvention-stack-far-3.prg b/src/test/target/procedure-callingconvention-stack-far-3.prg deleted file mode 100644 index fe3b357eefd982f66c8bec64d2852942552d46a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91 zcmZSN;O5|Bm}g{QX2`(6u#%ybS;3AY0Z20~WBRAT@{DOE+fk+qpA()jCoE;|Wnf8A m$osF(Aqt|jI7C1SS%6G)4iN=W4j{vTL-ZL7Pz%e2mk9uPR2%XD diff --git a/src/test/target/procedure-callingconvention-stack-far-3.sym b/src/test/target/procedure-callingconvention-stack-far-3.sym deleted file mode 100644 index f1267c367..000000000 --- a/src/test/target/procedure-callingconvention-stack-far-3.sym +++ /dev/null @@ -1,20 +0,0 @@ -.label val=$3 -.label SCREEN=$400 -.label __start=$80d { -} -.label pval=$837 { -} -.label ival=$830 { -} -.label incval=$827 { -} -.label main=$83e { - .label __b1=$842 - .label i=$4 -} -.label printother=$815 { - .label __b1=$819 - .label i=$2 -} -.label printval=$82a { -} diff --git a/src/test/target/procedure-callingconvention-stack-far-3.vs b/src/test/target/procedure-callingconvention-stack-far-3.vs deleted file mode 100644 index 2787fc577..000000000 --- a/src/test/target/procedure-callingconvention-stack-far-3.vs +++ /dev/null @@ -1,14 +0,0 @@ -al C:3 .val -al C:819 .__b1__0 -al C:842 .__b1__1 -al C:400 .SCREEN -al C:80d .__start -al C:837 .pval -al C:2 .i__0 -al C:4 .i__1 -al C:830 .ival -al C:80b .upstartEnd -al C:827 .incval -al C:83e .main -al C:815 .printother -al C:82a .printval From 9cf5f4cd056a7c4c06e502b8cc3e3d2cf5884733 Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Tue, 11 Apr 2023 09:00:46 +0200 Subject: [PATCH 38/66] Merge commit 'f2bf3484ad84a75f644a47560f1d2a0dd42c1acd' into jesper_baseline_all_changes (cherry picked from commit 74512e132625e2e4f8f0ae3a80beae043dcc642d) --- .../kc/examples/cx16/banking/cx16-banking.c | 73 ++++++------------- 1 file changed, 23 insertions(+), 50 deletions(-) diff --git a/src/test/kc/examples/cx16/banking/cx16-banking.c b/src/test/kc/examples/cx16/banking/cx16-banking.c index 87d4b224e..113f11c40 100644 --- a/src/test/kc/examples/cx16/banking/cx16-banking.c +++ b/src/test/kc/examples/cx16/banking/cx16-banking.c @@ -13,7 +13,7 @@ #pragma link("cx16-banking.ld") #pragma var_model(mem) -// #include +#include #include #include @@ -24,33 +24,31 @@ // Functional code -__address(0x00) char RAM_Bank; - #pragma code_seg(Bank1) // The sequent functions will be addressed specified by segment bank1 in the linker. #pragma bank(cx16_ram, 1) // The sequent functions will be banked using call method ram in bank number 1. char add_a(char a) { - printf("add_a(%02x), ", RAM_Bank); + printf("add_a(%02x), ", bank_get_bram()); return a+1; } char add_c(char a) { - printf("add_c(%02x), ", RAM_Bank); + printf("add_c(%02x), ", bank_get_bram()); return add_a(a)+1; // Non banked call in ram bank 1. } char add_d(char a) { - printf("add_d(%02x), ",RAM_Bank); + printf("add_d(%02x), ",bank_get_bram()); return mul_a(a)+1; // Banked call fram ram bank 1 to ram bank 2. } char add_e(char a) { - printf("add_e(%02x), ",RAM_Bank); + printf("add_e(%02x), ",bank_get_bram()); return mul_b(a)+1; // Banked call fram ram bank 1 to ram bank 2. } char add_f(char a) { - printf("add_f(%02x), ",RAM_Bank); + printf("add_f(%02x), ",bank_get_bram()); return add_m(a)+1; // Non banked call fram ram bank 1 to main memory. } @@ -59,27 +57,27 @@ char add_f(char a) { #pragma bank(cx16_ram, 2) // The sequent functions will be banked using call method ram in bank number 2. char mul_a(char m) { - printf("mul_a(%02x), ",RAM_Bank); + printf("mul_a(%02x), ",bank_get_bram()); return m * 2; } char mul_c(char m) { - printf("mul_c(%02x), ",RAM_Bank); + printf("mul_c(%02x), ",bank_get_bram()); return add_a(m)*2; // Banked call fram ram bank 2 to ram bank 1. } char mul_d(char m) { - printf("mul_d(%02x), ",RAM_Bank); + printf("mul_d(%02x), ",bank_get_bram()); return mul_a(m)*2; // Non banked call in ram bank 2. } char mul_e(char a) { - printf("mul_e(%02x), ",RAM_Bank); + printf("mul_e(%02x), ",bank_get_bram()); return mul_b(a)*2; // Non Banked call in ram bank 2. } char mul_f(char m) { - printf("mul_f(%02x), ",RAM_Bank); + printf("mul_f(%02x), ",bank_get_bram()); return add_m(m)*2; // Non banked call fram ram bank 2 to main memory. } @@ -89,14 +87,14 @@ char mul_f(char m) { #pragma code_seg(Bank1) // The sequent functions will be addressed specified by segment bank1 in the linker. // The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram. char __bank(cx16_ram, 1) add_b(char a) { - printf("add_b(%02x), ",RAM_Bank); + printf("add_b(%02x), ",bank_get_bram()); return a+1; } #pragma code_seg(Bank2) // The sequent functions will be addressed specified by segment bank1 in the linker. // The __bank directive declares this function to be banked using call method ram in bank number 2 of banked ram. char __bank(cx16_ram, 2) mul_b(char m) { - printf("mul_b(%02x), ",RAM_Bank); + printf("mul_b(%02x), ",bank_get_bram()); return m*2; } @@ -104,13 +102,13 @@ char __bank(cx16_ram, 2) mul_b(char m) { // Allocated in main memory. char add_m(char a) { - printf("add_m(%02x), ",RAM_Bank); + printf("add_m(%02x), ",bank_get_bram()); return add_e(a)+1; // Banked call to ram in bank 1 fram main memory. } // Allocated in main memory. char mul_m(char m) { - printf("mul_m(%02x), ",RAM_Bank); + printf("mul_m(%02x), ",bank_get_bram()); return mul_e(m)*2; // Banked call to ram in bank 2 fram main memory. } @@ -118,46 +116,21 @@ char mul_m(char m) { // Practically this means that the main() function is placed in main memory ... void load_bank(char bank, char *file) { - RAM_Bank = bank; - - //cbm_k_setnam(file); - char file_len = strlen(file); - asm { - lda file_len - ldx file - jsr $FFBD - } - - //cbm_k_setlfs(1,8,2); - asm { - lda #1 - ldx #8 - ldy #2 - jsr $FFBA - } - - //cbm_k_load((char*)0xA000, 0); - asm { - lda #0 - ldx #<$A000 - ldy #>$A000 - jsr $FFD5 - } - - //cbm_k_close(1); - asm { - lda #1 - jsr $FFC3 - } + bank_set_bram(bank); + cbm_k_setnam(file); + cbm_k_setlfs(1,8,2); + cbm_k_load((char*)0xA000, 0); + cbm_k_close(1); } void main(void) { + clrscr(); + load_bank(1, "BANK1.BIN"); load_bank(2, "BANK2.BIN"); - RAM_Bank = 0; + bank_set_bram(0); asm{.byte $db} printf("result = %u\n", add_a(1)); // Banked call to ram in bank 1 fram main memory. From 8b7beac0c135def7f8c8c68975b98fe2924c8b09 Mon Sep 17 00:00:00 2001 From: Jesper Balman Gravgaard Date: Tue, 11 Apr 2023 07:42:41 +0000 Subject: [PATCH 39/66] ok --- src/main/java/dk/camelot64/kickc/parser/CParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/dk/camelot64/kickc/parser/CParser.java b/src/main/java/dk/camelot64/kickc/parser/CParser.java index 029c6d5f6..5e3ef8ad1 100644 --- a/src/main/java/dk/camelot64/kickc/parser/CParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/CParser.java @@ -111,7 +111,7 @@ public class CParser { */ public static final String PRAGMA_BANK = "bank"; /** - * #pragma nobank specifies the scope of the sequent functions to be near. Segments are defined in the linker file. + * #pragma nobank Changes the current bank to the default bank. */ public static final String PRAGMA_NOBANK = "nobank"; From e7d717e9158a86bd33bd8c99907190c4a8d51ccc Mon Sep 17 00:00:00 2001 From: Jesper Balman Gravgaard Date: Tue, 11 Apr 2023 08:02:06 +0000 Subject: [PATCH 40/66] Apply 2 suggestion(s) to 2 file(s) --- src/main/java/dk/camelot64/kickc/parser/CParser.java | 2 +- .../camelot64/kickc/passes/Pass0GenerateStatementSequence.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/parser/CParser.java b/src/main/java/dk/camelot64/kickc/parser/CParser.java index 5e3ef8ad1..84832cf36 100644 --- a/src/main/java/dk/camelot64/kickc/parser/CParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/CParser.java @@ -107,7 +107,7 @@ public class CParser { */ public static final String PRAGMA_RESOURCE = "resource"; /** - * #pragma bank(...) specifies the scope of the sequent functions to be located in a bank using a specific banking area. + * #pragma bank(...) changes the current bank. Functionsand variables will be placed in the specified bank. */ public static final String PRAGMA_BANK = "bank"; /** diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 5d4965219..5db81d773 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -299,7 +299,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor Date: Tue, 11 Apr 2023 10:13:41 +0200 Subject: [PATCH 41/66] - processed some of the comments. - documentation fixes. --- .../java/dk/camelot64/kickc/model/Bank.java | 8 +++++ .../dk/camelot64/kickc/model/Directive.java | 11 +++++-- .../dk/camelot64/kickc/model/Program.java | 7 ---- .../kickc/model/symbols/Procedure.java | 13 +++----- .../camelot64/kickc/model/symbols/Scope.java | 2 +- .../Pass0GenerateStatementSequence.java | 33 +++++++++---------- .../kickc/passes/Pass4CodeGeneration.java | 4 +-- 7 files changed, 40 insertions(+), 38 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/model/Bank.java b/src/main/java/dk/camelot64/kickc/model/Bank.java index c51312740..ec111abb3 100644 --- a/src/main/java/dk/camelot64/kickc/model/Bank.java +++ b/src/main/java/dk/camelot64/kickc/model/Bank.java @@ -108,6 +108,14 @@ public class Bank { private final String bankArea; // The bank method to apply. private Long bank; // The bank number. + /** + * Creates a new Bank which collects the necessary data to handle banking. + * For example, on the Commander X16, RAM is banked from address 0xA000 till 0xBFFF. + * Zeropage 0x00 configures this banked RAM, with a number from 0x00 till 0xff. + * So banked RAM is is a bankArea, and the bank is a configurable bank number in the bankArea. + * @param bankArea A bank area is a memory range that is banked on a target platform. + * @param bank A bank is a number that defines a bank configuration in a bank area. + */ public Bank(String bankArea, Long bank) { this.bankArea = bankArea; this.bank = bank; diff --git a/src/main/java/dk/camelot64/kickc/model/Directive.java b/src/main/java/dk/camelot64/kickc/model/Directive.java index fe4728cb7..4b43f7d4b 100644 --- a/src/main/java/dk/camelot64/kickc/model/Directive.java +++ b/src/main/java/dk/camelot64/kickc/model/Directive.java @@ -43,11 +43,16 @@ public class Directive { public Inline() { super("inline"); } } - /** Function declared banked. */ + /** + * Creates a new Bank which collects the necessary data to handle banking. + * For example, on the Commander X16, RAM is banked from address 0xA000 till 0xBFFF. + * Zeropage 0x00 configures this banked RAM, with a number from 0x00 till 0xff. + * So banked RAM is is a bankArea, and the bank is a configurable bank number in the bankArea. + */ static public class Bank extends Directive { - private String bankArea; - private Long bank; + private String bankArea; // A bank area is a memory range that is banked on a target platform. + private Long bank; // A bank is a number that defines a bank configuration in a bank area. public Bank(String bankArea, Long bank) { super("bank" ); diff --git a/src/main/java/dk/camelot64/kickc/model/Program.java b/src/main/java/dk/camelot64/kickc/model/Program.java index 000cad6bd..c42debf3d 100644 --- a/src/main/java/dk/camelot64/kickc/model/Program.java +++ b/src/main/java/dk/camelot64/kickc/model/Program.java @@ -106,7 +106,6 @@ public class Program { /** The register weight of all variables describing how much the variable would theoretically gain from being in a register. PASS 3-5 (CACHED ON-DEMAND) */ private VariableRegisterWeights variableRegisterWeights; /** All #pragma code segments. Collected during parsing. These are used by the bank() pragmas to validate if the code segment exists during compilation.*/ - private final Map pragmaCodeSegs; public Program() { this.outputFileManager = new OutputFileManager(); @@ -119,8 +118,6 @@ public class Program { this.asmResourceFiles = new ArrayList<>(); this.reservedZps = new ArrayList<>(); this.procedureCompilations = new LinkedHashMap<>(); - this.pragmaCodeSegs = new HashMap<>(); // Used to collect all pragma code segments. - } /** @@ -540,8 +537,4 @@ public class Program { sizeInfo.append(getAsm().getSizeInfo()); return sizeInfo.toString(); } - - public Map getPragmaCodeSegs() { - return pragmaCodeSegs; - } } 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 e3eac7744..a154a2ca0 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -34,7 +34,7 @@ public class Procedure extends Scope { private List comments; /** Reserved zeropage addresses. */ private List reservedZps; - /** The data and code segment to put the procedure into. */ + /** The data and code segment to put the procedure into. When null the procedure is not assigned to the code segment. */ private String segmentCode; /** The list of constructor procedures for this procedure. The constructor procedures are called during program initialization. */ private final List constructorRefs; @@ -42,7 +42,9 @@ public class Procedure extends Scope { private boolean isConstructor; /** The source of the procedure definition. */ private StatementSource definitionSource; - /** The bank segment information. Collected during parsing. These are used to compare with the current currentBank to decide a near or a far call, and to keep inline calling routines.*/ + /** The bank segment information. Collected during parsing. These are used to compare with the current currentBank to decide a near or a far call, and to keep inline calling routines. + * When this value is null, the procedure is not allocated to a bank. + */ private Bank bankLocation; @@ -106,7 +108,6 @@ public class Procedure extends Scope { this.interruptType = null; this.comments = new ArrayList<>(); this.segmentCode = segmentCode; - this.segmentData = segmentData; // The parameter dataSegment was foreseen, but never implemented. this.callingConvention = callingConvention; this.constructorRefs = new ArrayList<>(); this.isConstructor = false; @@ -136,10 +137,6 @@ public class Procedure extends Scope { this.segmentCode = segmentCode; } - public void setCodeSegment(String codeSegment) { - this.segmentCode = segmentCode; - } - public List getParameterNames() { return parameterNames; } @@ -300,7 +297,7 @@ public class Procedure extends Scope { res.append("__intrinsic "); } if(isDeclaredBanked()) { - res.append("__bank(").append("bank").append(") "); + res.append("__bank(").append(this.getBankArea()).append(", ").append(this.getBank()).append(") "); } if(!callingConvention.equals(CallingConvention.PHI_CALL)) { res.append(getCallingConvention().getName()).append(" "); diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java b/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java index b950128f7..0ef0c0345 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java @@ -26,7 +26,7 @@ public abstract class Scope implements Symbol { private int blockCount = 1; private Scope parentScope; private String fullName; - protected String segmentData; + private String segmentData; public Scope(String name, Scope parentScope, String segmentData) { this.name = name; diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 5d4965219..e9d6cadec 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -289,11 +289,10 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor effectiveDirectives = varDecl.getDeclDirectives(); final List declComments = varDecl.getDeclComments(); varDecl.exitVar(); - VariableBuilder varBuilder = new VariableBuilder(varName, getCurrentScope(), false, false, effectiveType, effectiveDirectives, currentDataSegment, program.getTargetPlatform().getVariableBuilderConfig()); + VariableBuilder varBuilder = new VariableBuilder(varName, getCurrentScope(), false, false, effectiveType, effectiveDirectives, currentSegmentData, program.getTargetPlatform().getVariableBuilderConfig()); Variable variable = varBuilder.build(); if(isStructMember && (initializer != null)) throw new CompileError("Initializer not supported inside structs " + effectiveType.toCDecl(), declSource); @@ -1180,7 +1179,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor parameters = procedure.getParameters(); @@ -590,7 +590,7 @@ public class Pass4CodeGeneration { Variable master = variable.getPhiMaster(); if (master != null) { if (parameters.contains(master) || master.getLocalName().equals("return")) { - variable.setDataSegment("Data"); + variable.setDataSegment(Scope.SEGMENT_DATA_DEFAULT); } } } From acbf8f073fdbd292a91e81100c5c0e3cac2983d2 Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Tue, 11 Apr 2023 10:41:10 +0200 Subject: [PATCH 42/66] - Updated test case references. --- .../ref/call-banked-phi-case-2-close-0.cfg | 2 +- .../ref/call-banked-phi-case-2-close-0.log | 10 +++++----- .../ref/call-banked-phi-case-2-close-0.sym | 2 +- .../ref/call-banked-phi-case-2-close-1.cfg | 2 +- .../ref/call-banked-phi-case-2-close-1.log | 10 +++++----- .../ref/call-banked-phi-case-2-close-1.sym | 2 +- .../ref/call-banked-phi-case-3-near-0.cfg | 2 +- .../ref/call-banked-phi-case-3-near-0.log | 10 +++++----- .../ref/call-banked-phi-case-3-near-0.sym | 2 +- .../ref/call-banked-phi-case-3-near-1.cfg | 2 +- .../ref/call-banked-phi-case-3-near-1.log | 10 +++++----- .../ref/call-banked-phi-case-3-near-1.sym | 2 +- .../ref/call-banked-phi-case-4-near-0.cfg | 4 ++-- .../ref/call-banked-phi-case-4-near-0.log | 20 +++++++++---------- .../ref/call-banked-phi-case-4-near-0.sym | 4 ++-- .../ref/call-banked-phi-case-4-near-1.cfg | 4 ++-- .../ref/call-banked-phi-case-4-near-1.log | 20 +++++++++---------- .../ref/call-banked-phi-case-4-near-1.sym | 4 ++-- src/test/ref/call-banked-phi-case-5-far-0.cfg | 4 ++-- src/test/ref/call-banked-phi-case-5-far-0.log | 20 +++++++++---------- src/test/ref/call-banked-phi-case-5-far-0.sym | 4 ++-- src/test/ref/call-banked-phi-case-5-far-1.cfg | 4 ++-- src/test/ref/call-banked-phi-case-5-far-1.log | 20 +++++++++---------- src/test/ref/call-banked-phi-case-5-far-1.sym | 4 ++-- .../ref/call-banked-phi-case-6-close-0.cfg | 4 ++-- .../ref/call-banked-phi-case-6-close-0.log | 20 +++++++++---------- .../ref/call-banked-phi-case-6-close-0.sym | 4 ++-- .../ref/call-banked-phi-case-6-close-1.cfg | 4 ++-- .../ref/call-banked-phi-case-6-close-1.log | 20 +++++++++---------- .../ref/call-banked-phi-case-6-close-1.sym | 4 ++-- 30 files changed, 112 insertions(+), 112 deletions(-) diff --git a/src/test/ref/call-banked-phi-case-2-close-0.cfg b/src/test/ref/call-banked-phi-case-2-close-0.cfg index 1701ea88d..47114a8a3 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.cfg +++ b/src/test/ref/call-banked-phi-case-2-close-0.cfg @@ -11,7 +11,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() to:plus::@return diff --git a/src/test/ref/call-banked-phi-case-2-close-0.log b/src/test/ref/call-banked-phi-case-2-close-0.log index 3f5fa068e..578d2ed25 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.log +++ b/src/test/ref/call-banked-phi-case-2-close-0.log @@ -18,7 +18,7 @@ main::@return: scope:[main] from main::@1 return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main plus::b#1 = phi( main/plus::b#0 ) plus::a#1 = phi( main/plus::a#0 ) @@ -46,7 +46,7 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 @@ -125,7 +125,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() to:plus::@return @@ -136,7 +136,7 @@ plus::@return: scope:[plus] from plus VARIABLE REGISTER WEIGHTS void main() -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a char plus::b char plus::return @@ -229,7 +229,7 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-2-close-0.sym b/src/test/ref/call-banked-phi-case-2-close-0.sym index c79872a57..45d8d7108 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.sym +++ b/src/test/ref/call-banked-phi-case-2-close-0.sym @@ -1,6 +1,6 @@ __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-2-close-1.cfg b/src/test/ref/call-banked-phi-case-2-close-1.cfg index 1701ea88d..47114a8a3 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.cfg +++ b/src/test/ref/call-banked-phi-case-2-close-1.cfg @@ -11,7 +11,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() to:plus::@return diff --git a/src/test/ref/call-banked-phi-case-2-close-1.log b/src/test/ref/call-banked-phi-case-2-close-1.log index 60a66095a..2fa89f425 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.log +++ b/src/test/ref/call-banked-phi-case-2-close-1.log @@ -18,7 +18,7 @@ main::@return: scope:[main] from main::@1 return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main plus::b#1 = phi( main/plus::b#0 ) plus::a#1 = phi( main/plus::a#0 ) @@ -46,7 +46,7 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 @@ -125,7 +125,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() to:plus::@return @@ -136,7 +136,7 @@ plus::@return: scope:[plus] from plus VARIABLE REGISTER WEIGHTS void main() -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a char plus::b char plus::return @@ -229,7 +229,7 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-2-close-1.sym b/src/test/ref/call-banked-phi-case-2-close-1.sym index c79872a57..45d8d7108 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.sym +++ b/src/test/ref/call-banked-phi-case-2-close-1.sym @@ -1,6 +1,6 @@ __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-3-near-0.cfg b/src/test/ref/call-banked-phi-case-3-near-0.cfg index abba7b99a..4a0b60f9d 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.cfg +++ b/src/test/ref/call-banked-phi-case-3-near-0.cfg @@ -11,7 +11,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min diff --git a/src/test/ref/call-banked-phi-case-3-near-0.log b/src/test/ref/call-banked-phi-case-3-near-0.log index 5b3a50214..c0e438f84 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.log +++ b/src/test/ref/call-banked-phi-case-3-near-0.log @@ -18,7 +18,7 @@ main::@return: scope:[main] from main::@1 return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main plus::b#1 = phi( main/plus::b#0 ) plus::a#1 = phi( main/plus::a#0 ) @@ -80,7 +80,7 @@ char min::return#1 char min::return#2 char min::return#3 char min::return#4 -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 @@ -179,7 +179,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -203,7 +203,7 @@ char min(char a , char b) char min::a char min::b char min::return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a char plus::b char plus::return @@ -320,7 +320,7 @@ char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-3-near-0.sym b/src/test/ref/call-banked-phi-case-3-near-0.sym index f7f6861a8..9e4219f22 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.sym +++ b/src/test/ref/call-banked-phi-case-3-near-0.sym @@ -5,7 +5,7 @@ char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-3-near-1.cfg b/src/test/ref/call-banked-phi-case-3-near-1.cfg index abba7b99a..4a0b60f9d 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.cfg +++ b/src/test/ref/call-banked-phi-case-3-near-1.cfg @@ -11,7 +11,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min diff --git a/src/test/ref/call-banked-phi-case-3-near-1.log b/src/test/ref/call-banked-phi-case-3-near-1.log index 990511052..e7e2f38ca 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.log +++ b/src/test/ref/call-banked-phi-case-3-near-1.log @@ -18,7 +18,7 @@ main::@return: scope:[main] from main::@1 return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main plus::b#1 = phi( main/plus::b#0 ) plus::a#1 = phi( main/plus::a#0 ) @@ -80,7 +80,7 @@ char min::return#1 char min::return#2 char min::return#3 char min::return#4 -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 @@ -179,7 +179,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -203,7 +203,7 @@ char min(char a , char b) char min::a char min::b char min::return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a char plus::b char plus::return @@ -320,7 +320,7 @@ char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-3-near-1.sym b/src/test/ref/call-banked-phi-case-3-near-1.sym index f7f6861a8..9e4219f22 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.sym +++ b/src/test/ref/call-banked-phi-case-3-near-1.sym @@ -5,7 +5,7 @@ char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-4-near-0.cfg b/src/test/ref/call-banked-phi-case-4-near-0.cfg index cfd75e701..3a2aea220 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.cfg +++ b/src/test/ref/call-banked-phi-case-4-near-0.cfg @@ -11,7 +11,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -20,7 +20,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return diff --git a/src/test/ref/call-banked-phi-case-4-near-0.log b/src/test/ref/call-banked-phi-case-4-near-0.log index 25e2d2255..5c2bba535 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.log +++ b/src/test/ref/call-banked-phi-case-4-near-0.log @@ -18,7 +18,7 @@ main::@return: scope:[main] from main::@1 return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main plus::b#1 = phi( main/plus::b#0 ) plus::a#1 = phi( main/plus::a#0 ) @@ -38,7 +38,7 @@ plus::@return: scope:[plus] from plus::@1 return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) min: scope:[min] from plus min::b#1 = phi( plus/min::b#0 ) min::a#1 = phi( plus/min::a#0 ) @@ -66,7 +66,7 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) char min::$0 char min::a char min::a#0 @@ -80,7 +80,7 @@ char min::return#1 char min::return#2 char min::return#3 char min::return#4 -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 @@ -179,7 +179,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -188,7 +188,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return @@ -199,11 +199,11 @@ min::@return: scope:[min] from min VARIABLE REGISTER WEIGHTS void main() -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) char min::a char min::b char min::return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a char plus::b char plus::return @@ -314,12 +314,12 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-4-near-0.sym b/src/test/ref/call-banked-phi-case-4-near-0.sym index aaff351f9..09b563343 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.sym +++ b/src/test/ref/call-banked-phi-case-4-near-0.sym @@ -1,11 +1,11 @@ __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-4-near-1.cfg b/src/test/ref/call-banked-phi-case-4-near-1.cfg index cfd75e701..3a2aea220 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.cfg +++ b/src/test/ref/call-banked-phi-case-4-near-1.cfg @@ -11,7 +11,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -20,7 +20,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return diff --git a/src/test/ref/call-banked-phi-case-4-near-1.log b/src/test/ref/call-banked-phi-case-4-near-1.log index 54b44c7af..36912a129 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.log +++ b/src/test/ref/call-banked-phi-case-4-near-1.log @@ -18,7 +18,7 @@ main::@return: scope:[main] from main::@1 return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main plus::b#1 = phi( main/plus::b#0 ) plus::a#1 = phi( main/plus::a#0 ) @@ -38,7 +38,7 @@ plus::@return: scope:[plus] from plus::@1 return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) min: scope:[min] from plus min::b#1 = phi( plus/min::b#0 ) min::a#1 = phi( plus/min::a#0 ) @@ -66,7 +66,7 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) char min::$0 char min::a char min::a#0 @@ -80,7 +80,7 @@ char min::return#1 char min::return#2 char min::return#3 char min::return#4 -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 @@ -179,7 +179,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -188,7 +188,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return @@ -199,11 +199,11 @@ min::@return: scope:[min] from min VARIABLE REGISTER WEIGHTS void main() -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) char min::a char min::b char min::return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a char plus::b char plus::return @@ -314,12 +314,12 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-4-near-1.sym b/src/test/ref/call-banked-phi-case-4-near-1.sym index aaff351f9..09b563343 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.sym +++ b/src/test/ref/call-banked-phi-case-4-near-1.sym @@ -1,11 +1,11 @@ __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-5-far-0.cfg b/src/test/ref/call-banked-phi-case-5-far-0.cfg index cfd75e701..1bdaac9fb 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.cfg +++ b/src/test/ref/call-banked-phi-case-5-far-0.cfg @@ -11,7 +11,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -20,7 +20,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return diff --git a/src/test/ref/call-banked-phi-case-5-far-0.log b/src/test/ref/call-banked-phi-case-5-far-0.log index a98cea7ee..e0d2540ab 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.log +++ b/src/test/ref/call-banked-phi-case-5-far-0.log @@ -18,7 +18,7 @@ main::@return: scope:[main] from main::@1 return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main plus::b#1 = phi( main/plus::b#0 ) plus::a#1 = phi( main/plus::a#0 ) @@ -38,7 +38,7 @@ plus::@return: scope:[plus] from plus::@1 return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) min: scope:[min] from plus min::b#1 = phi( plus/min::b#0 ) min::a#1 = phi( plus/min::a#0 ) @@ -66,7 +66,7 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) char min::$0 char min::a char min::a#0 @@ -80,7 +80,7 @@ char min::return#1 char min::return#2 char min::return#3 char min::return#4 -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 @@ -179,7 +179,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -188,7 +188,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return @@ -199,11 +199,11 @@ min::@return: scope:[min] from min VARIABLE REGISTER WEIGHTS void main() -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) char min::a char min::b char min::return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a char plus::b char plus::return @@ -318,12 +318,12 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-5-far-0.sym b/src/test/ref/call-banked-phi-case-5-far-0.sym index aaff351f9..7c061e559 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.sym +++ b/src/test/ref/call-banked-phi-case-5-far-0.sym @@ -1,11 +1,11 @@ __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-5-far-1.cfg b/src/test/ref/call-banked-phi-case-5-far-1.cfg index cfd75e701..1bdaac9fb 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.cfg +++ b/src/test/ref/call-banked-phi-case-5-far-1.cfg @@ -11,7 +11,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -20,7 +20,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return diff --git a/src/test/ref/call-banked-phi-case-5-far-1.log b/src/test/ref/call-banked-phi-case-5-far-1.log index 360fff834..af55b2c68 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.log +++ b/src/test/ref/call-banked-phi-case-5-far-1.log @@ -18,7 +18,7 @@ main::@return: scope:[main] from main::@1 return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main plus::b#1 = phi( main/plus::b#0 ) plus::a#1 = phi( main/plus::a#0 ) @@ -38,7 +38,7 @@ plus::@return: scope:[plus] from plus::@1 return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) min: scope:[min] from plus min::b#1 = phi( plus/min::b#0 ) min::a#1 = phi( plus/min::a#0 ) @@ -66,7 +66,7 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) char min::$0 char min::a char min::a#0 @@ -80,7 +80,7 @@ char min::return#1 char min::return#2 char min::return#3 char min::return#4 -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 @@ -179,7 +179,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -188,7 +188,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return @@ -199,11 +199,11 @@ min::@return: scope:[min] from min VARIABLE REGISTER WEIGHTS void main() -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) char min::a char min::b char min::return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a char plus::b char plus::return @@ -318,12 +318,12 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-5-far-1.sym b/src/test/ref/call-banked-phi-case-5-far-1.sym index aaff351f9..7c061e559 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.sym +++ b/src/test/ref/call-banked-phi-case-5-far-1.sym @@ -1,11 +1,11 @@ __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char min(char a , char b) +__bank(cx16_ram, 2) char min(char a , char b) char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-6-close-0.cfg b/src/test/ref/call-banked-phi-case-6-close-0.cfg index cfd75e701..62e999ce1 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.cfg +++ b/src/test/ref/call-banked-phi-case-6-close-0.cfg @@ -11,7 +11,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -20,7 +20,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return diff --git a/src/test/ref/call-banked-phi-case-6-close-0.log b/src/test/ref/call-banked-phi-case-6-close-0.log index fce99e78f..989ffb846 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.log +++ b/src/test/ref/call-banked-phi-case-6-close-0.log @@ -18,7 +18,7 @@ main::@return: scope:[main] from main::@1 return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main plus::b#1 = phi( main/plus::b#0 ) plus::a#1 = phi( main/plus::a#0 ) @@ -38,7 +38,7 @@ plus::@return: scope:[plus] from plus::@1 return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) min: scope:[min] from plus min::b#1 = phi( plus/min::b#0 ) min::a#1 = phi( plus/min::a#0 ) @@ -66,7 +66,7 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) char min::$0 char min::a char min::a#0 @@ -80,7 +80,7 @@ char min::return#1 char min::return#2 char min::return#3 char min::return#4 -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 @@ -179,7 +179,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -188,7 +188,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return @@ -199,11 +199,11 @@ min::@return: scope:[min] from min VARIABLE REGISTER WEIGHTS void main() -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) char min::a char min::b char min::return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a char plus::b char plus::return @@ -321,12 +321,12 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-6-close-0.sym b/src/test/ref/call-banked-phi-case-6-close-0.sym index aaff351f9..ada067df8 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.sym +++ b/src/test/ref/call-banked-phi-case-6-close-0.sym @@ -1,11 +1,11 @@ __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-6-close-1.cfg b/src/test/ref/call-banked-phi-case-6-close-1.cfg index cfd75e701..62e999ce1 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.cfg +++ b/src/test/ref/call-banked-phi-case-6-close-1.cfg @@ -11,7 +11,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -20,7 +20,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return diff --git a/src/test/ref/call-banked-phi-case-6-close-1.log b/src/test/ref/call-banked-phi-case-6-close-1.log index 37e02e3ea..e84a846b0 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.log +++ b/src/test/ref/call-banked-phi-case-6-close-1.log @@ -18,7 +18,7 @@ main::@return: scope:[main] from main::@1 return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main plus::b#1 = phi( main/plus::b#0 ) plus::a#1 = phi( main/plus::a#0 ) @@ -38,7 +38,7 @@ plus::@return: scope:[plus] from plus::@1 return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) min: scope:[min] from plus min::b#1 = phi( plus/min::b#0 ) min::a#1 = phi( plus/min::a#0 ) @@ -66,7 +66,7 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) char min::$0 char min::a char min::a#0 @@ -80,7 +80,7 @@ char min::return#1 char min::return#2 char min::return#3 char min::return#4 -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 @@ -179,7 +179,7 @@ main::@return: scope:[main] from main::@1 [3] return to:@return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main [4] phi() [5] call min @@ -188,7 +188,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return @@ -199,11 +199,11 @@ min::@return: scope:[min] from min VARIABLE REGISTER WEIGHTS void main() -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) char min::a char min::b char min::return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a char plus::b char plus::return @@ -321,12 +321,12 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b diff --git a/src/test/ref/call-banked-phi-case-6-close-1.sym b/src/test/ref/call-banked-phi-case-6-close-1.sym index aaff351f9..ada067df8 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.sym +++ b/src/test/ref/call-banked-phi-case-6-close-1.sym @@ -1,11 +1,11 @@ __constant char * const SCREEN = (char *) 1024 void main() -__bank(bank) char min(char a , char b) +__bank(cx16_rom, 1) char min(char a , char b) char min::a char min::b char min::return __constant char min::return#1 = plus::a#0+plus::b#0 // return -__bank(bank) char plus(char a , char b) +__bank(cx16_ram, 1) char plus(char a , char b) char plus::a __constant char plus::a#0 = '0' // a char plus::b From 477499b97b251d37eabb61ba9e4c9c80b1360d44 Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Tue, 11 Apr 2023 13:41:14 +0200 Subject: [PATCH 43/66] - Fixed #pragma nobank parameter issue. - Optimized logic for #pragma bank. - Updated test cases and references. - Made #pragma NAME parameters optional. - Retested all test cases. --- .../dk/camelot64/kickc/parser/KickCParser.g4 | 4 +- .../Pass0GenerateStatementSequence.java | 13 ++-- src/test/kc/call-banked-phi-case-1-near-0.c | 27 +++++++- src/test/kc/call-banked-phi-case-1-near-1.c | 27 +++++++- src/test/kc/call-banked-phi-case-2-close-0.c | 28 +++++++- src/test/kc/call-banked-phi-case-2-close-1.c | 30 ++++++++- src/test/kc/call-banked-phi-case-3-near-0.c | 28 +++++++- src/test/kc/call-banked-phi-case-3-near-1.c | 30 ++++++++- src/test/kc/call-banked-phi-case-4-near-0.c | 28 +++++++- src/test/kc/call-banked-phi-case-4-near-1.c | 30 ++++++++- src/test/kc/call-banked-phi-case-5-far-0.c | 28 +++++++- src/test/kc/call-banked-phi-case-5-far-1.c | 30 ++++++++- src/test/kc/call-banked-phi-case-6-close-0.c | 28 +++++++- src/test/kc/call-banked-phi-case-6-close-1.c | 30 ++++++++- .../kc/call-banked-stack-case-2-close-0.c | 29 +++++++- src/test/kc/call-banked-stack-case-5-far-0.c | 29 +++++++- .../kc/examples/cx16/banking/cx16-banking.c | 2 +- .../ref/call-banked-phi-case-1-near-0.asm | 27 +++++++- .../ref/call-banked-phi-case-1-near-0.log | 54 ++++++++++++++- .../ref/call-banked-phi-case-1-near-1.asm | 27 +++++++- .../ref/call-banked-phi-case-1-near-1.log | 54 ++++++++++++++- .../ref/call-banked-phi-case-2-close-0.asm | 28 +++++++- .../ref/call-banked-phi-case-2-close-0.log | 56 +++++++++++++++- .../ref/call-banked-phi-case-2-close-1.asm | 28 +++++++- .../ref/call-banked-phi-case-2-close-1.log | 56 +++++++++++++++- .../ref/call-banked-phi-case-3-near-0.asm | 28 +++++++- .../ref/call-banked-phi-case-3-near-0.log | 56 +++++++++++++++- .../ref/call-banked-phi-case-3-near-1.asm | 28 +++++++- .../ref/call-banked-phi-case-3-near-1.cfg | 2 +- .../ref/call-banked-phi-case-3-near-1.log | 66 +++++++++++++++++-- .../ref/call-banked-phi-case-3-near-1.sym | 2 +- .../ref/call-banked-phi-case-4-near-0.asm | 28 +++++++- .../ref/call-banked-phi-case-4-near-0.log | 56 +++++++++++++++- .../ref/call-banked-phi-case-4-near-1.asm | 28 +++++++- .../ref/call-banked-phi-case-4-near-1.log | 56 +++++++++++++++- src/test/ref/call-banked-phi-case-5-far-0.asm | 28 +++++++- src/test/ref/call-banked-phi-case-5-far-0.log | 56 +++++++++++++++- src/test/ref/call-banked-phi-case-5-far-1.asm | 28 +++++++- src/test/ref/call-banked-phi-case-5-far-1.log | 56 +++++++++++++++- .../ref/call-banked-phi-case-6-close-0.asm | 28 +++++++- .../ref/call-banked-phi-case-6-close-0.log | 56 +++++++++++++++- .../ref/call-banked-phi-case-6-close-1.asm | 28 +++++++- .../ref/call-banked-phi-case-6-close-1.log | 56 +++++++++++++++- 43 files changed, 1363 insertions(+), 74 deletions(-) diff --git a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 index 50b509cdf..0bfba0d7d 100644 --- a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 +++ b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 @@ -137,7 +137,7 @@ parameterDecl pragma : PRAGMA NAME - | PRAGMA NAME PAR_BEGIN pragmaParam (COMMA pragmaParam)* PAR_END + | PRAGMA NAME (PAR_BEGIN pragmaParam (COMMA pragmaParam)* PAR_END)? ; pragmaParam @@ -162,7 +162,7 @@ directive | EXTERN #directiveExtern | EXPORT #directiveExport | INLINE #directiveInline - | BANK PAR_BEGIN NAME COMMA NUMBER (COMMA NAME COMMA NAME COMMA NAME)? PAR_END #directiveBank + | BANK PAR_BEGIN NAME COMMA NUMBER PAR_END #directiveBank | INTRINSIC #directiveIntrinsic | INTERRUPT ( PAR_BEGIN NAME PAR_END )? #directiveInterrupt | LOCAL_RESERVE PAR_BEGIN pragmaParam ( COMMA pragmaParam )* PAR_END #directiveReserveZp diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index d0d81fcd1..d9c69061c 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -296,20 +296,15 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor Date: Tue, 11 Apr 2023 14:44:35 +0200 Subject: [PATCH 44/66] - Removed unnecessary tests and logic for bank directive parsing. - Retested all test cases. --- .../kickc/passes/Pass0GenerateStatementSequence.java | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index d9c69061c..4a3dcaf4b 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -1257,17 +1257,9 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor= 5) { - bankArea = ctx.getChild(2).getText(); - bank = Long.valueOf(ctx.getChild(4).getText()); - } + String bankArea = ctx.getChild(2).getText(); + Long bank = Long.valueOf(ctx.getChild(4).getText()); return new Directive.Bank(bankArea, bank); } From 82a6c56e0a6ab9eaa09b4ff3ae9b0b186434d86f Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Tue, 11 Apr 2023 21:48:26 +0200 Subject: [PATCH 45/66] - Resolved issue of nobank without parameters. Now it works ... The CPreprocessor adds () and the KickCParser.g4 demands brackets as part of the syntax. But you can write without in the code. - Retested all test cases. --- .../dk/camelot64/kickc/parser/KickCParser.g4 | 4 +- .../Pass0GenerateStatementSequence.java | 29 ++++++-- .../kickc/preprocessor/CPreprocessor.java | 8 +++ src/test/kc/call-banked-phi-case-3-near-1.c | 8 +-- .../ref/call-banked-phi-case-3-near-1.cfg | 2 +- .../ref/call-banked-phi-case-3-near-1.log | 68 +++++++++---------- .../ref/call-banked-phi-case-3-near-1.sym | 2 +- 7 files changed, 75 insertions(+), 46 deletions(-) diff --git a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 index 0bfba0d7d..178005132 100644 --- a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 +++ b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 @@ -136,8 +136,8 @@ parameterDecl ; pragma - : PRAGMA NAME - | PRAGMA NAME (PAR_BEGIN pragmaParam (COMMA pragmaParam)* PAR_END)? + : PRAGMA NAME PAR_BEGIN PAR_END #pragmaNoParameters + | PRAGMA NAME PAR_BEGIN pragmaParam (COMMA pragmaParam)* PAR_END #pragmaParameters ; pragmaParam diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 4a3dcaf4b..504dc117c 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -42,7 +42,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor scopeStack; /** All #pragma constructor_for() statements. Collected during parsing and handled by {@link #generate()} before returning. */ - private final List pragmaConstructorFors; + private final List pragmaConstructorFors; public Pass0GenerateStatementSequence(CParser cParser, KickCParser.FileContext fileCtx, Program program, Procedure.CallingConvention initialCallingConvention, StringEncoding defaultEncoding, String defaultInterruptType) { @@ -148,7 +148,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor constructorProcs = new ArrayList<>(); - for(KickCParser.PragmaContext pragmaConstructorFor : pragmaConstructorFors) { + for(KickCParser.PragmaParametersContext pragmaConstructorFor : pragmaConstructorFors) { final List names = pragmaConstructorFor.pragmaParam(); if(names.size() < 2) throw new CompileError("#pragma constructor_for requires at least 2 parameters.", new StatementSource(pragmaConstructorFor)); @@ -237,8 +237,29 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor parenthesizedBody = new ArrayList<>(); + parenthesizedBody.add(new CommonToken(KickCLexer.PAR_BEGIN, "(")); + parenthesizedBody.add(new CommonToken(KickCLexer.PAR_END, ")")); + pragmaBody = parenthesizedBody; + pragmaTokens.addAll(pragmaBody); + // Pass on the #pragma to the parser - and mark it as already handled + cTokenSource.addSourceFirst(new ListTokenSource(pragmaTokens)); } parserPragmas.add(inputToken); return true; diff --git a/src/test/kc/call-banked-phi-case-3-near-1.c b/src/test/kc/call-banked-phi-case-3-near-1.c index 2743d4b5c..feb43dbda 100644 --- a/src/test/kc/call-banked-phi-case-3-near-1.c +++ b/src/test/kc/call-banked-phi-case-3-near-1.c @@ -30,10 +30,6 @@ char* const SCREEN = (char*)0x0400; -#pragma code_seg(Code) -void main(void) { - SCREEN[0] = plus('0', 7); // close call -} #pragma code_seg(RAM_Bank1) #pragma bank(cx16_ram, 1) @@ -47,4 +43,8 @@ char min(char a, char b) { return a+b; } +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); // close call +} diff --git a/src/test/ref/call-banked-phi-case-3-near-1.cfg b/src/test/ref/call-banked-phi-case-3-near-1.cfg index 3a2aea220..4a0b60f9d 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.cfg +++ b/src/test/ref/call-banked-phi-case-3-near-1.cfg @@ -20,7 +20,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return diff --git a/src/test/ref/call-banked-phi-case-3-near-1.log b/src/test/ref/call-banked-phi-case-3-near-1.log index fde569cc1..3ed463fde 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.log +++ b/src/test/ref/call-banked-phi-case-3-near-1.log @@ -2,22 +2,6 @@ Loading link script "call-banked-phi.ld" CONTROL FLOW GRAPH SSA -void main() -main: scope:[main] from __start - plus::a#0 = '0' - plus::b#0 = 7 - call plus - plus::return#0 = plus::return#2 - to:main::@1 -main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 - SCREEN[0] = main::$0 - to:main::@return -main::@return: scope:[main] from main::@1 - return - to:@return - __bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main plus::b#1 = phi( main/plus::b#0 ) @@ -30,15 +14,15 @@ plus: scope:[plus] from main plus::@1: scope:[plus] from plus min::return#3 = phi( plus/min::return#0 ) plus::$0 = min::return#3 - plus::return#1 = plus::$0 + plus::return#0 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus::@1 - plus::return#4 = phi( plus::@1/plus::return#1 ) - plus::return#2 = plus::return#4 + plus::return#3 = phi( plus::@1/plus::return#0 ) + plus::return#1 = plus::return#3 return to:@return -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) min: scope:[min] from plus min::b#1 = phi( plus/min::b#0 ) min::a#1 = phi( plus/min::a#0 ) @@ -51,6 +35,22 @@ min::@return: scope:[min] from min return to:@return +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#2 = plus::return#1 + to:main::@1 +main::@1: scope:[main] from main + plus::return#4 = phi( main/plus::return#2 ) + main::$0 = plus::return#4 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + void __start() __start: scope:[__start] from call main @@ -66,7 +66,7 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) char min::$0 char min::a char min::a#0 @@ -107,10 +107,10 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 Alias min::return#0 = min::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Alias plus::return#0 = plus::$0 plus::return#3 plus::return#1 Alias min::return#1 = min::$0 min::return#4 min::return#2 +Alias plus::return#2 = plus::return#4 Successful SSA optimization Pass2AliasElimination Identical Phi Values plus::a#1 plus::a#0 Identical Phi Values plus::b#1 plus::b#0 @@ -123,31 +123,31 @@ Successful SSA optimization Pass2ConstantIdentification Constant min::a#0 = plus::a#0 Constant min::b#0 = plus::b#0 Successful SSA optimization Pass2ConstantIdentification -Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 +Simplifying expression containing zero SCREEN in [15] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero 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 -Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 +Constant right-side identified [4] min::return#1 = min::a#0 + min::b#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant min::return#1 = min::a#0+min::b#0 Successful SSA optimization Pass2ConstantIdentification Constant min::return#0 = min::return#1 Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#1 = min::return#0 +Constant plus::return#0 = min::return#0 Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 +Constant plus::return#2 = plus::return#0 Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 +Constant main::$0 = plus::return#2 Successful SSA optimization Pass2ConstantIdentification Inlining constant with different constant siblings min::return#0 Constant inlined plus::return#0 = min::return#1 Constant inlined main::$0 = min::return#1 -Constant inlined plus::return#1 = min::return#1 Constant inlined min::a#0 = plus::a#0 Constant inlined min::return#0 = min::return#1 +Constant inlined plus::return#2 = min::return#1 Constant inlined min::b#0 = plus::b#0 Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of main @@ -188,7 +188,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return @@ -199,7 +199,7 @@ min::@return: scope:[min] from min VARIABLE REGISTER WEIGHTS void main() -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) char min::a char min::b char min::return @@ -215,14 +215,14 @@ Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a REGISTER UPLIFT SCOPES -Uplift Scope [main] Uplift Scope [plus] Uplift Scope [min] +Uplift Scope [main] Uplift Scope [] -Uplifting [main] best 90 combination Uplifting [plus] best 90 combination Uplifting [min] best 90 combination +Uplifting [main] best 90 combination Uplifting [] best 90 combination ASSEMBLER BEFORE OPTIMIZATION @@ -341,7 +341,7 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) char min::a char min::b char min::return diff --git a/src/test/ref/call-banked-phi-case-3-near-1.sym b/src/test/ref/call-banked-phi-case-3-near-1.sym index 09b563343..9e4219f22 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.sym +++ b/src/test/ref/call-banked-phi-case-3-near-1.sym @@ -1,6 +1,6 @@ __constant char * const SCREEN = (char *) 1024 void main() -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) char min::a char min::b char min::return From 02d9eaf0817ee6286dca94128742cfe969eac90c Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Wed, 12 Apr 2023 06:57:25 +0200 Subject: [PATCH 46/66] - Added banking signature to procedures in the comments of the assembler output file. - Update test cases and reference data. - Cleaned old test cases for stack calls. --- .../java/dk/camelot64/kickc/model/Bank.java | 9 ++- .../kickc/passes/Pass4CodeGeneration.java | 10 +++- ...procedure-callingconvention-stack-bank-0.c | 16 ----- ...procedure-callingconvention-stack-bank-1.c | 18 ------ ...procedure-callingconvention-stack-bank-2.c | 24 -------- ...procedure-callingconvention-stack-bank-3.c | 59 ------------------- ...procedure-callingconvention-stack-bank-4.c | 39 ------------ ...procedure-callingconvention-stack-bank-5.c | 22 ------- .../procedure-callingconvention-stack-bank.ld | 6 -- .../ref/call-banked-phi-case-2-close-0.asm | 1 + .../ref/call-banked-phi-case-2-close-0.log | 2 + .../ref/call-banked-phi-case-2-close-1.asm | 1 + .../ref/call-banked-phi-case-2-close-1.log | 2 + .../ref/call-banked-phi-case-3-near-0.asm | 1 + .../ref/call-banked-phi-case-3-near-0.log | 2 + .../ref/call-banked-phi-case-3-near-1.asm | 1 + .../ref/call-banked-phi-case-3-near-1.log | 2 + .../ref/call-banked-phi-case-4-near-0.asm | 2 + .../ref/call-banked-phi-case-4-near-0.log | 4 ++ .../ref/call-banked-phi-case-4-near-1.asm | 2 + .../ref/call-banked-phi-case-4-near-1.log | 4 ++ src/test/ref/call-banked-phi-case-5-far-0.asm | 2 + src/test/ref/call-banked-phi-case-5-far-0.log | 4 ++ src/test/ref/call-banked-phi-case-5-far-1.asm | 2 + src/test/ref/call-banked-phi-case-5-far-1.log | 4 ++ .../ref/call-banked-phi-case-6-close-0.asm | 2 + .../ref/call-banked-phi-case-6-close-0.log | 4 ++ .../ref/call-banked-phi-case-6-close-1.asm | 2 + .../ref/call-banked-phi-case-6-close-1.log | 4 ++ 29 files changed, 65 insertions(+), 186 deletions(-) delete mode 100644 src/test/kc/procedure-callingconvention-stack-bank-0.c delete mode 100644 src/test/kc/procedure-callingconvention-stack-bank-1.c delete mode 100644 src/test/kc/procedure-callingconvention-stack-bank-2.c delete mode 100644 src/test/kc/procedure-callingconvention-stack-bank-3.c delete mode 100644 src/test/kc/procedure-callingconvention-stack-bank-4.c delete mode 100644 src/test/kc/procedure-callingconvention-stack-bank-5.c delete mode 100644 src/test/kc/procedure-callingconvention-stack-bank.ld diff --git a/src/main/java/dk/camelot64/kickc/model/Bank.java b/src/main/java/dk/camelot64/kickc/model/Bank.java index ec111abb3..b080bc0e4 100644 --- a/src/main/java/dk/camelot64/kickc/model/Bank.java +++ b/src/main/java/dk/camelot64/kickc/model/Bank.java @@ -103,7 +103,7 @@ package dk.camelot64.kickc.model; * The KickC compiler contains several test cases and examples which demonstrate the usage of the banking system. * */ -public class Bank { +public class Bank extends Object { private final String bankArea; // The bank method to apply. private Long bank; // The bank number. @@ -132,4 +132,11 @@ public class Bank { public void setBank(Long bank) { this.bank = bank; } + + @Override + public String toString() { + return "banked : " + + "bank area='" + bankArea + '\'' + + ", bank=" + bank; + } } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index b3877765d..177d137b9 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -219,7 +219,8 @@ public class Pass4CodeGeneration { } /** - * Generate a comment that describes the procedure signature and parameter transfer + * Generate a comment that describes the procedure signature and parameter transfer. + * We have added here also the banking information. * * @param asm The assembler program being generated * @param procedure The procedure @@ -240,6 +241,13 @@ public class Pass4CodeGeneration { if (i > 0) { asm.addComment(signature.toString(), false); } + // Banking information of the procedure. + Bank bank = procedure.getBankLocation(); + if(bank != null) { + StringBuilder signatureBank = new StringBuilder(); + signatureBank.append(" " + bank.toString()); // This procedure is in a bank and in a banking area. + asm.addComment(signatureBank.toString(), false); + } } /** diff --git a/src/test/kc/procedure-callingconvention-stack-bank-0.c b/src/test/kc/procedure-callingconvention-stack-bank-0.c deleted file mode 100644 index d0394b9d1..000000000 --- a/src/test/kc/procedure-callingconvention-stack-bank-0.c +++ /dev/null @@ -1,16 +0,0 @@ -// Test a procedure with calling convention stack - -#pragma code_seg(stage) -#pragma link("procedure-callingconvention-stack-bank.ld") -#pragma target(cx16) - -char* const SCREEN = (char*)0x0400; - -void main(void) { - SCREEN[0] = plus('0', 7); -} - -#pragma code_seg(stage) -char __bank(ram, 2) __stackcall plus(char a, char b) { - return a+b; -} \ No newline at end of file diff --git a/src/test/kc/procedure-callingconvention-stack-bank-1.c b/src/test/kc/procedure-callingconvention-stack-bank-1.c deleted file mode 100644 index c1ac83207..000000000 --- a/src/test/kc/procedure-callingconvention-stack-bank-1.c +++ /dev/null @@ -1,18 +0,0 @@ -// Test a procedure with calling convention stack - -#pragma code_seg(stage) -#pragma link("procedure-callingconvention-stack-bank.ld") -#pragma target(cx16) - -char* const SCREEN = (char*)0x0400; - -void main(void) { - SCREEN[0] = plus('0', 7); -} - -#pragma calling(__stackcall) -#pragma code_seg(stage) - -char __bank(ram,20) plus(char a, char b) { - return a+b; -} \ No newline at end of file diff --git a/src/test/kc/procedure-callingconvention-stack-bank-2.c b/src/test/kc/procedure-callingconvention-stack-bank-2.c deleted file mode 100644 index cba3de4b9..000000000 --- a/src/test/kc/procedure-callingconvention-stack-bank-2.c +++ /dev/null @@ -1,24 +0,0 @@ -// Test a procedure with calling convention stack -// A slightly more complex call - -#pragma code_seg(stage) -#pragma link("procedure-callingconvention-stack-bank.ld") -#pragma target(cx16) - -char* const SCREEN = (char*)0x0400; - -char i = 0; - -void main(void) { - for(char a:0..1) { - char v = a+1; - char w = plus('0', v); - SCREEN[i] = w+a; - } -} - -// this should give a pragma error during compile, as test is not declared yet. -char __bank(ram, 20) __stackcall plus(char a, char b) { - i++; - return a+b; -} \ No newline at end of file diff --git a/src/test/kc/procedure-callingconvention-stack-bank-3.c b/src/test/kc/procedure-callingconvention-stack-bank-3.c deleted file mode 100644 index 97313f42e..000000000 --- a/src/test/kc/procedure-callingconvention-stack-bank-3.c +++ /dev/null @@ -1,59 +0,0 @@ -// Test a procedure with calling convention stack -// Illustrates live range problem with function variable printother::i and global variable val - -#pragma calling(__stackcall) - -#pragma code_seg(stage) -#pragma link("procedure-callingconvention-stack-bank.ld") -#pragma target(cx16) - -char* const SCREEN = (char*)0x0400; - -char val = 0; - -void main(void) { - for(char i:0..5) { - pval(); - printother(); - ival(); - } -} - -#pragma code_seg(stage) - -void __bank(ram, 20) pval() { - printval(); -} - -#pragma code_seg(platform) - -void __bank(ram, 21) ival() { - incval(); -} - -#pragma code_seg(stage) - -void __bank(ram, 20) printval() { - SCREEN[0] = val; -} - - -#pragma code_seg(platform) - -void __bank(ram, 21) incval() { - val++; -} - -#pragma nobank -#pragma code_seg(Code) - -void printother() { - for(char i:0..5) { - (SCREEN+40)[i]++; - } -} - - - - - diff --git a/src/test/kc/procedure-callingconvention-stack-bank-4.c b/src/test/kc/procedure-callingconvention-stack-bank-4.c deleted file mode 100644 index bb3ebc6e8..000000000 --- a/src/test/kc/procedure-callingconvention-stack-bank-4.c +++ /dev/null @@ -1,39 +0,0 @@ -// Test a procedure with calling convention stack -// Returning and passing struct values - -#pragma calling(__stackcall) -#pragma struct_model(classic) - -#pragma code_seg(stage) -#pragma link("procedure-callingconvention-stack-bank.ld") -#pragma target(cx16) - -char* const SCREEN = (char*)0x0400; -char idx = 0; - -struct Point { - char x; - char y; -}; - -void main(void) { - for(char i=0;i<5;i++) { - struct Point p = get(i); - print(p); - } -} - -struct Point __bank(ram,1) get(char i) { - struct Point p = { i, i/2 }; - return p; -} - -void __bank(ram,2) print(struct Point p) { - SCREEN[idx++] = p.x; - SCREEN[idx++] = p.y; -} - - - - - diff --git a/src/test/kc/procedure-callingconvention-stack-bank-5.c b/src/test/kc/procedure-callingconvention-stack-bank-5.c deleted file mode 100644 index ce0701c6f..000000000 --- a/src/test/kc/procedure-callingconvention-stack-bank-5.c +++ /dev/null @@ -1,22 +0,0 @@ -// Test a procedure with calling convention stack -// Recursion that works (no local variables) - -#pragma code_seg(stage) -#pragma link("procedure-callingconvention-stack-bank.ld") -#pragma platform(cx16) - -char* const SCREEN = (char*)0x0400; - -void main(void) { - *SCREEN = pow2(6); -} - -char __stackcall __bank(ram,1) pow2(char n) { - if (n == 0) - return 1; - else { - char c = pow2(n-1); - return c+c; - } - -} \ No newline at end of file diff --git a/src/test/kc/procedure-callingconvention-stack-bank.ld b/src/test/kc/procedure-callingconvention-stack-bank.ld deleted file mode 100644 index 3e9cecaee..000000000 --- a/src/test/kc/procedure-callingconvention-stack-bank.ld +++ /dev/null @@ -1,6 +0,0 @@ -.segmentdef Program [segments="Basic, Code, Data, stage, platform"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=%P] -.segmentdef Data [startAfter="Code"] -.segmentdef stage [start=$0400, min=$0400, max=$07FF, align=$100] -.segmentdef platform [start=$C000, min=$C000, max=$C7FF, align=$100] diff --git a/src/test/ref/call-banked-phi-case-2-close-0.asm b/src/test/ref/call-banked-phi-case-2-close-0.asm index 345d208bb..349ff29d6 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.asm +++ b/src/test/ref/call-banked-phi-case-2-close-0.asm @@ -57,6 +57,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .const a = '0' .const b = 7 diff --git a/src/test/ref/call-banked-phi-case-2-close-0.log b/src/test/ref/call-banked-phi-case-2-close-0.log index e58f419ff..3ea76d170 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.log +++ b/src/test/ref/call-banked-phi-case-2-close-0.log @@ -229,6 +229,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .const a = '0' .const b = 7 @@ -338,6 +339,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .const a = '0' .const b = 7 diff --git a/src/test/ref/call-banked-phi-case-2-close-1.asm b/src/test/ref/call-banked-phi-case-2-close-1.asm index e59df026e..be3c04747 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.asm +++ b/src/test/ref/call-banked-phi-case-2-close-1.asm @@ -57,6 +57,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .const a = '0' .const b = 7 diff --git a/src/test/ref/call-banked-phi-case-2-close-1.log b/src/test/ref/call-banked-phi-case-2-close-1.log index 0e29a8ff2..0413d3865 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.log +++ b/src/test/ref/call-banked-phi-case-2-close-1.log @@ -229,6 +229,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .const a = '0' .const b = 7 @@ -338,6 +339,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .const a = '0' .const b = 7 diff --git a/src/test/ref/call-banked-phi-case-3-near-0.asm b/src/test/ref/call-banked-phi-case-3-near-0.asm index e7e644763..599c148cd 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.asm +++ b/src/test/ref/call-banked-phi-case-3-near-0.asm @@ -57,6 +57,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 diff --git a/src/test/ref/call-banked-phi-case-3-near-0.log b/src/test/ref/call-banked-phi-case-3-near-0.log index 7720bf87c..cdc88a695 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.log +++ b/src/test/ref/call-banked-phi-case-3-near-0.log @@ -298,6 +298,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -428,6 +429,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 diff --git a/src/test/ref/call-banked-phi-case-3-near-1.asm b/src/test/ref/call-banked-phi-case-3-near-1.asm index f4440cd98..7f5a14078 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.asm +++ b/src/test/ref/call-banked-phi-case-3-near-1.asm @@ -57,6 +57,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 diff --git a/src/test/ref/call-banked-phi-case-3-near-1.log b/src/test/ref/call-banked-phi-case-3-near-1.log index 3ed463fde..834f647f1 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.log +++ b/src/test/ref/call-banked-phi-case-3-near-1.log @@ -298,6 +298,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -428,6 +429,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 diff --git a/src/test/ref/call-banked-phi-case-4-near-0.asm b/src/test/ref/call-banked-phi-case-4-near-0.asm index 3972e6016..e43e78962 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.asm +++ b/src/test/ref/call-banked-phi-case-4-near-0.asm @@ -57,6 +57,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -66,6 +67,7 @@ plus: { rts } // char min(char a, char b) +// banked : bank area='cx16_ram', bank=1 min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-4-near-0.log b/src/test/ref/call-banked-phi-case-4-near-0.log index 62c366a98..204e49501 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.log +++ b/src/test/ref/call-banked-phi-case-4-near-0.log @@ -298,6 +298,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -313,6 +314,7 @@ plus: { } // min // char min(char a, char b) +// banked : bank area='cx16_ram', bank=1 min: { .label return = plus.a+plus.b jmp __breturn @@ -427,6 +429,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -441,6 +444,7 @@ plus: { } // min // char min(char a, char b) +// banked : bank area='cx16_ram', bank=1 min: { .label return = plus.a+plus.b // min::@return diff --git a/src/test/ref/call-banked-phi-case-4-near-1.asm b/src/test/ref/call-banked-phi-case-4-near-1.asm index 2f6e45907..e51f01278 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.asm +++ b/src/test/ref/call-banked-phi-case-4-near-1.asm @@ -57,6 +57,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -66,6 +67,7 @@ plus: { rts } // char min(char a, char b) +// banked : bank area='cx16_ram', bank=1 min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-4-near-1.log b/src/test/ref/call-banked-phi-case-4-near-1.log index 38ccd800f..98d448864 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.log +++ b/src/test/ref/call-banked-phi-case-4-near-1.log @@ -298,6 +298,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -313,6 +314,7 @@ plus: { } // min // char min(char a, char b) +// banked : bank area='cx16_ram', bank=1 min: { .label return = plus.a+plus.b jmp __breturn @@ -427,6 +429,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -441,6 +444,7 @@ plus: { } // min // char min(char a, char b) +// banked : bank area='cx16_ram', bank=1 min: { .label return = plus.a+plus.b // min::@return diff --git a/src/test/ref/call-banked-phi-case-5-far-0.asm b/src/test/ref/call-banked-phi-case-5-far-0.asm index a1d1eaba5..df153f403 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.asm +++ b/src/test/ref/call-banked-phi-case-5-far-0.asm @@ -57,6 +57,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -70,6 +71,7 @@ plus: { } .segment RAM_Bank2 // char min(char a, char b) +// banked : bank area='cx16_ram', bank=2 min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-5-far-0.log b/src/test/ref/call-banked-phi-case-5-far-0.log index 5e7710384..01cc81e12 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.log +++ b/src/test/ref/call-banked-phi-case-5-far-0.log @@ -298,6 +298,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -317,6 +318,7 @@ plus: { .segment RAM_Bank2 // min // char min(char a, char b) +// banked : bank area='cx16_ram', bank=2 min: { .label return = plus.a+plus.b jmp __breturn @@ -431,6 +433,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -449,6 +452,7 @@ plus: { .segment RAM_Bank2 // min // char min(char a, char b) +// banked : bank area='cx16_ram', bank=2 min: { .label return = plus.a+plus.b // min::@return diff --git a/src/test/ref/call-banked-phi-case-5-far-1.asm b/src/test/ref/call-banked-phi-case-5-far-1.asm index 8b9f8b367..a45533f07 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.asm +++ b/src/test/ref/call-banked-phi-case-5-far-1.asm @@ -57,6 +57,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -70,6 +71,7 @@ plus: { } .segment RAM_Bank2 // char min(char a, char b) +// banked : bank area='cx16_ram', bank=2 min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-5-far-1.log b/src/test/ref/call-banked-phi-case-5-far-1.log index 63e6a0ff3..843a67794 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.log +++ b/src/test/ref/call-banked-phi-case-5-far-1.log @@ -298,6 +298,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -317,6 +318,7 @@ plus: { .segment RAM_Bank2 // min // char min(char a, char b) +// banked : bank area='cx16_ram', bank=2 min: { .label return = plus.a+plus.b jmp __breturn @@ -431,6 +433,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -449,6 +452,7 @@ plus: { .segment RAM_Bank2 // min // char min(char a, char b) +// banked : bank area='cx16_ram', bank=2 min: { .label return = plus.a+plus.b // min::@return diff --git a/src/test/ref/call-banked-phi-case-6-close-0.asm b/src/test/ref/call-banked-phi-case-6-close-0.asm index 503c5ad0f..006ba06a2 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.asm +++ b/src/test/ref/call-banked-phi-case-6-close-0.asm @@ -57,6 +57,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -72,6 +73,7 @@ plus: { } .segment ROM_Bank1 // char min(char a, char b) +// banked : bank area='cx16_rom', bank=1 min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-6-close-0.log b/src/test/ref/call-banked-phi-case-6-close-0.log index e6a9fd619..50c042ba4 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.log +++ b/src/test/ref/call-banked-phi-case-6-close-0.log @@ -299,6 +299,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -320,6 +321,7 @@ plus: { .segment ROM_Bank1 // min // char min(char a, char b) +// banked : bank area='cx16_rom', bank=1 min: { .label return = plus.a+plus.b jmp __breturn @@ -434,6 +436,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -454,6 +457,7 @@ plus: { .segment ROM_Bank1 // min // char min(char a, char b) +// banked : bank area='cx16_rom', bank=1 min: { .label return = plus.a+plus.b // min::@return diff --git a/src/test/ref/call-banked-phi-case-6-close-1.asm b/src/test/ref/call-banked-phi-case-6-close-1.asm index 99c634672..b893a61f0 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.asm +++ b/src/test/ref/call-banked-phi-case-6-close-1.asm @@ -57,6 +57,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -72,6 +73,7 @@ plus: { } .segment ROM_Bank1 // char min(char a, char b) +// banked : bank area='cx16_rom', bank=1 min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-6-close-1.log b/src/test/ref/call-banked-phi-case-6-close-1.log index 4de0578ce..38195d985 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.log +++ b/src/test/ref/call-banked-phi-case-6-close-1.log @@ -299,6 +299,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -320,6 +321,7 @@ plus: { .segment ROM_Bank1 // min // char min(char a, char b) +// banked : bank area='cx16_rom', bank=1 min: { .label return = plus.a+plus.b jmp __breturn @@ -434,6 +436,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -454,6 +457,7 @@ plus: { .segment ROM_Bank1 // min // char min(char a, char b) +// banked : bank area='cx16_rom', bank=1 min: { .label return = plus.a+plus.b // min::@return From 3916ee341328711461d65af2d0feef808a5fb7fa Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Wed, 12 Apr 2023 07:35:45 +0200 Subject: [PATCH 47/66] - Fixed a silly mistake where the banked close call fragment sequence was wrong. I first need to read the current bank, store it in the stack, then change the current bank. After jsr return, pop the old bank from the stack and store it. --- .../call_phi_close_cx16_ram.asm | 3 ++- .../call_phi_close_cx16_rom.asm | 3 ++- .../ref/call-banked-phi-case-2-close-0.asm | 3 ++- .../ref/call-banked-phi-case-2-close-0.log | 14 +++++++----- .../ref/call-banked-phi-case-2-close-1.asm | 3 ++- .../ref/call-banked-phi-case-2-close-1.log | 14 +++++++----- .../ref/call-banked-phi-case-3-near-0.asm | 3 ++- .../ref/call-banked-phi-case-3-near-0.log | 16 ++++++++------ .../ref/call-banked-phi-case-3-near-1.asm | 3 ++- .../ref/call-banked-phi-case-3-near-1.log | 16 ++++++++------ .../ref/call-banked-phi-case-4-near-0.asm | 3 ++- .../ref/call-banked-phi-case-4-near-0.log | 16 ++++++++------ .../ref/call-banked-phi-case-4-near-1.asm | 3 ++- .../ref/call-banked-phi-case-4-near-1.log | 16 ++++++++------ src/test/ref/call-banked-phi-case-5-far-0.asm | 3 ++- src/test/ref/call-banked-phi-case-5-far-0.log | 16 ++++++++------ src/test/ref/call-banked-phi-case-5-far-1.asm | 3 ++- src/test/ref/call-banked-phi-case-5-far-1.log | 16 ++++++++------ .../ref/call-banked-phi-case-6-close-0.asm | 6 +++-- .../ref/call-banked-phi-case-6-close-0.log | 22 +++++++++++-------- .../ref/call-banked-phi-case-6-close-1.asm | 6 +++-- .../ref/call-banked-phi-case-6-close-1.log | 22 +++++++++++-------- 22 files changed, 124 insertions(+), 86 deletions(-) diff --git a/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm b/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm index 38d40a072..40053e0b4 100644 --- a/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm +++ b/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm @@ -1,6 +1,7 @@ +lda $0 +pha lda #{c1} sta $0 -pha jsr {la1} pla sta $0 diff --git a/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm b/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm index e19cf8ab7..29641e03d 100644 --- a/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm +++ b/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm @@ -1,6 +1,7 @@ +lda $1 +pha lda #{c1} sta $1 -pha jsr {la1} pla sta $1 diff --git a/src/test/ref/call-banked-phi-case-2-close-0.asm b/src/test/ref/call-banked-phi-case-2-close-0.asm index 349ff29d6..f867223cc 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.asm +++ b/src/test/ref/call-banked-phi-case-2-close-0.asm @@ -43,9 +43,10 @@ .segment Code main: { // plus('0', 7) + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-2-close-0.log b/src/test/ref/call-banked-phi-case-2-close-0.log index 3ea76d170..8d78e1673 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.log +++ b/src/test/ref/call-banked-phi-case-2-close-0.log @@ -152,9 +152,9 @@ Uplift Scope [main] Uplift Scope [plus] Uplift Scope [] -Uplifting [main] best 75 combination -Uplifting [plus] best 75 combination -Uplifting [] best 75 combination +Uplifting [main] best 78 combination +Uplifting [plus] best 78 combination +Uplifting [] best 78 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -208,9 +208,10 @@ main: { // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -267,7 +268,7 @@ __constant char plus::return#1 = plus::a#0+plus::b#0 // return FINAL ASSEMBLER -Score: 39 +Score: 42 // File Comments /** @@ -320,9 +321,10 @@ main: { // plus('0', 7) // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-2-close-1.asm b/src/test/ref/call-banked-phi-case-2-close-1.asm index be3c04747..3074c08e3 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.asm +++ b/src/test/ref/call-banked-phi-case-2-close-1.asm @@ -43,9 +43,10 @@ .segment Code main: { // plus('0', 7) + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-2-close-1.log b/src/test/ref/call-banked-phi-case-2-close-1.log index 0413d3865..3ac501458 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.log +++ b/src/test/ref/call-banked-phi-case-2-close-1.log @@ -152,9 +152,9 @@ Uplift Scope [main] Uplift Scope [plus] Uplift Scope [] -Uplifting [main] best 75 combination -Uplifting [plus] best 75 combination -Uplifting [] best 75 combination +Uplifting [main] best 78 combination +Uplifting [plus] best 78 combination +Uplifting [] best 78 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -208,9 +208,10 @@ main: { // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -267,7 +268,7 @@ __constant char plus::return#1 = plus::a#0+plus::b#0 // return FINAL ASSEMBLER -Score: 39 +Score: 42 // File Comments /** @@ -320,9 +321,10 @@ main: { // plus('0', 7) // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-3-near-0.asm b/src/test/ref/call-banked-phi-case-3-near-0.asm index 599c148cd..135a22afc 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.asm +++ b/src/test/ref/call-banked-phi-case-3-near-0.asm @@ -43,9 +43,10 @@ .segment Code main: { // plus('0', 7) + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-3-near-0.log b/src/test/ref/call-banked-phi-case-3-near-0.log index cdc88a695..e5e80a97d 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.log +++ b/src/test/ref/call-banked-phi-case-3-near-0.log @@ -220,10 +220,10 @@ Uplift Scope [plus] Uplift Scope [min] Uplift Scope [] -Uplifting [main] best 90 combination -Uplifting [plus] best 90 combination -Uplifting [min] best 90 combination -Uplifting [] best 90 combination +Uplifting [main] best 93 combination +Uplifting [plus] best 93 combination +Uplifting [min] best 93 combination +Uplifting [] best 93 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -277,9 +277,10 @@ main: { // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -357,7 +358,7 @@ char plus::return FINAL ASSEMBLER -Score: 51 +Score: 54 // File Comments /** @@ -410,9 +411,10 @@ main: { // plus('0', 7) // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-3-near-1.asm b/src/test/ref/call-banked-phi-case-3-near-1.asm index 7f5a14078..f3e8aa08d 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.asm +++ b/src/test/ref/call-banked-phi-case-3-near-1.asm @@ -43,9 +43,10 @@ .segment Code main: { // plus('0', 7) + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-3-near-1.log b/src/test/ref/call-banked-phi-case-3-near-1.log index 834f647f1..60b08c7d8 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.log +++ b/src/test/ref/call-banked-phi-case-3-near-1.log @@ -220,10 +220,10 @@ Uplift Scope [min] Uplift Scope [main] Uplift Scope [] -Uplifting [plus] best 90 combination -Uplifting [min] best 90 combination -Uplifting [main] best 90 combination -Uplifting [] best 90 combination +Uplifting [plus] best 93 combination +Uplifting [min] best 93 combination +Uplifting [main] best 93 combination +Uplifting [] best 93 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -277,9 +277,10 @@ main: { // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -357,7 +358,7 @@ char plus::return FINAL ASSEMBLER -Score: 51 +Score: 54 // File Comments /** @@ -410,9 +411,10 @@ main: { // plus('0', 7) // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-4-near-0.asm b/src/test/ref/call-banked-phi-case-4-near-0.asm index e43e78962..9eda4af17 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.asm +++ b/src/test/ref/call-banked-phi-case-4-near-0.asm @@ -43,9 +43,10 @@ .segment Code main: { // plus('0', 7) + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-4-near-0.log b/src/test/ref/call-banked-phi-case-4-near-0.log index 204e49501..8fff4dd12 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.log +++ b/src/test/ref/call-banked-phi-case-4-near-0.log @@ -220,10 +220,10 @@ Uplift Scope [plus] Uplift Scope [min] Uplift Scope [] -Uplifting [main] best 90 combination -Uplifting [plus] best 90 combination -Uplifting [min] best 90 combination -Uplifting [] best 90 combination +Uplifting [main] best 93 combination +Uplifting [plus] best 93 combination +Uplifting [min] best 93 combination +Uplifting [] best 93 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -277,9 +277,10 @@ main: { // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -357,7 +358,7 @@ char plus::return FINAL ASSEMBLER -Score: 51 +Score: 54 // File Comments /** @@ -410,9 +411,10 @@ main: { // plus('0', 7) // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-4-near-1.asm b/src/test/ref/call-banked-phi-case-4-near-1.asm index e51f01278..7a009fb12 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.asm +++ b/src/test/ref/call-banked-phi-case-4-near-1.asm @@ -43,9 +43,10 @@ .segment Code main: { // plus('0', 7) + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-4-near-1.log b/src/test/ref/call-banked-phi-case-4-near-1.log index 98d448864..355d2d82c 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.log +++ b/src/test/ref/call-banked-phi-case-4-near-1.log @@ -220,10 +220,10 @@ Uplift Scope [plus] Uplift Scope [min] Uplift Scope [] -Uplifting [main] best 90 combination -Uplifting [plus] best 90 combination -Uplifting [min] best 90 combination -Uplifting [] best 90 combination +Uplifting [main] best 93 combination +Uplifting [plus] best 93 combination +Uplifting [min] best 93 combination +Uplifting [] best 93 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -277,9 +277,10 @@ main: { // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -357,7 +358,7 @@ char plus::return FINAL ASSEMBLER -Score: 51 +Score: 54 // File Comments /** @@ -410,9 +411,10 @@ main: { // plus('0', 7) // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-5-far-0.asm b/src/test/ref/call-banked-phi-case-5-far-0.asm index df153f403..f492f49fe 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.asm +++ b/src/test/ref/call-banked-phi-case-5-far-0.asm @@ -43,9 +43,10 @@ .segment Code main: { // plus('0', 7) + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-5-far-0.log b/src/test/ref/call-banked-phi-case-5-far-0.log index 01cc81e12..c7fde5e3d 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.log +++ b/src/test/ref/call-banked-phi-case-5-far-0.log @@ -220,10 +220,10 @@ Uplift Scope [plus] Uplift Scope [min] Uplift Scope [] -Uplifting [main] best 90 combination -Uplifting [plus] best 90 combination -Uplifting [min] best 90 combination -Uplifting [] best 90 combination +Uplifting [main] best 93 combination +Uplifting [plus] best 93 combination +Uplifting [min] best 93 combination +Uplifting [] best 93 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -277,9 +277,10 @@ main: { // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -361,7 +362,7 @@ char plus::return FINAL ASSEMBLER -Score: 51 +Score: 54 // File Comments /** @@ -414,9 +415,10 @@ main: { // plus('0', 7) // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-5-far-1.asm b/src/test/ref/call-banked-phi-case-5-far-1.asm index a45533f07..002273c5d 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.asm +++ b/src/test/ref/call-banked-phi-case-5-far-1.asm @@ -43,9 +43,10 @@ .segment Code main: { // plus('0', 7) + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-5-far-1.log b/src/test/ref/call-banked-phi-case-5-far-1.log index 843a67794..d8beab3fb 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.log +++ b/src/test/ref/call-banked-phi-case-5-far-1.log @@ -220,10 +220,10 @@ Uplift Scope [plus] Uplift Scope [min] Uplift Scope [] -Uplifting [main] best 90 combination -Uplifting [plus] best 90 combination -Uplifting [min] best 90 combination -Uplifting [] best 90 combination +Uplifting [main] best 93 combination +Uplifting [plus] best 93 combination +Uplifting [min] best 93 combination +Uplifting [] best 93 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -277,9 +277,10 @@ main: { // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -361,7 +362,7 @@ char plus::return FINAL ASSEMBLER -Score: 51 +Score: 54 // File Comments /** @@ -414,9 +415,10 @@ main: { // plus('0', 7) // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 diff --git a/src/test/ref/call-banked-phi-case-6-close-0.asm b/src/test/ref/call-banked-phi-case-6-close-0.asm index 006ba06a2..bed31d08c 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.asm +++ b/src/test/ref/call-banked-phi-case-6-close-0.asm @@ -43,9 +43,10 @@ .segment Code main: { // plus('0', 7) + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -62,9 +63,10 @@ plus: { .label a = '0' .label b = 7 // min(a, b) + lda.z 1 + pha lda #1 sta.z 1 - pha jsr min pla sta.z 1 diff --git a/src/test/ref/call-banked-phi-case-6-close-0.log b/src/test/ref/call-banked-phi-case-6-close-0.log index 50c042ba4..8dd9b182a 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.log +++ b/src/test/ref/call-banked-phi-case-6-close-0.log @@ -221,10 +221,10 @@ Uplift Scope [plus] Uplift Scope [min] Uplift Scope [] -Uplifting [main] best 105 combination -Uplifting [plus] best 105 combination -Uplifting [min] best 105 combination -Uplifting [] best 105 combination +Uplifting [main] best 111 combination +Uplifting [plus] best 111 combination +Uplifting [min] best 111 combination +Uplifting [] best 111 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -278,9 +278,10 @@ main: { // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -306,9 +307,10 @@ plus: { // [5] call min // [7] phi from plus to min [phi:plus->min] -- call_phi_close_cx16_rom min_from_plus: + lda.z 1 + pha lda #1 sta.z 1 - pha jsr min pla sta.z 1 @@ -364,7 +366,7 @@ char plus::return FINAL ASSEMBLER -Score: 66 +Score: 72 // File Comments /** @@ -417,9 +419,10 @@ main: { // plus('0', 7) // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -443,9 +446,10 @@ plus: { // min(a, b) // [5] call min // [7] phi from plus to min [phi:plus->min] -- call_phi_close_cx16_rom + lda.z 1 + pha lda #1 sta.z 1 - pha jsr min pla sta.z 1 diff --git a/src/test/ref/call-banked-phi-case-6-close-1.asm b/src/test/ref/call-banked-phi-case-6-close-1.asm index b893a61f0..b924a7a81 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.asm +++ b/src/test/ref/call-banked-phi-case-6-close-1.asm @@ -43,9 +43,10 @@ .segment Code main: { // plus('0', 7) + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -62,9 +63,10 @@ plus: { .label a = '0' .label b = 7 // min(a, b) + lda.z 1 + pha lda #1 sta.z 1 - pha jsr min pla sta.z 1 diff --git a/src/test/ref/call-banked-phi-case-6-close-1.log b/src/test/ref/call-banked-phi-case-6-close-1.log index 38195d985..4228f15f1 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.log +++ b/src/test/ref/call-banked-phi-case-6-close-1.log @@ -221,10 +221,10 @@ Uplift Scope [plus] Uplift Scope [min] Uplift Scope [] -Uplifting [main] best 105 combination -Uplifting [plus] best 105 combination -Uplifting [min] best 105 combination -Uplifting [] best 105 combination +Uplifting [main] best 111 combination +Uplifting [plus] best 111 combination +Uplifting [min] best 111 combination +Uplifting [] best 111 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -278,9 +278,10 @@ main: { // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -306,9 +307,10 @@ plus: { // [5] call min // [7] phi from plus to min [phi:plus->min] -- call_phi_close_cx16_rom min_from_plus: + lda.z 1 + pha lda #1 sta.z 1 - pha jsr min pla sta.z 1 @@ -364,7 +366,7 @@ char plus::return FINAL ASSEMBLER -Score: 66 +Score: 72 // File Comments /** @@ -417,9 +419,10 @@ main: { // plus('0', 7) // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -443,9 +446,10 @@ plus: { // min(a, b) // [5] call min // [7] phi from plus to min [phi:plus->min] -- call_phi_close_cx16_rom + lda.z 1 + pha lda #1 sta.z 1 - pha jsr min pla sta.z 1 From 2478ea034f51fe36f6207b28ab1b5d355a96d03a Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Wed, 12 Apr 2023 07:50:52 +0200 Subject: [PATCH 48/66] #816 Pragma with no parameter and no parenthesis --- .../dk/camelot64/kickc/parser/KickCParser.g4 | 2 +- .../kickc/preprocessor/CPreprocessor.java | 3 +- .../kickc/test/TestProgramsFast.java | 5 + src/test/kc/pragma-noparam-noparen.c | 8 ++ src/test/ref/pragma-noparam-noparen.asm | 18 +++ src/test/ref/pragma-noparam-noparen.cfg | 8 ++ src/test/ref/pragma-noparam-noparen.log | 135 ++++++++++++++++++ src/test/ref/pragma-noparam-noparen.sym | 3 + 8 files changed, 179 insertions(+), 3 deletions(-) create mode 100644 src/test/kc/pragma-noparam-noparen.c create mode 100644 src/test/ref/pragma-noparam-noparen.asm create mode 100644 src/test/ref/pragma-noparam-noparen.cfg create mode 100644 src/test/ref/pragma-noparam-noparen.log create mode 100644 src/test/ref/pragma-noparam-noparen.sym diff --git a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 index 1a7e70da2..574d23c4b 100644 --- a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 +++ b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 @@ -136,7 +136,7 @@ parameterDecl ; pragma - : PRAGMA NAME PAR_BEGIN pragmaParam (COMMA pragmaParam)* PAR_END + : PRAGMA NAME PAR_BEGIN (pragmaParam (COMMA pragmaParam)* )? PAR_END ; pragmaParam diff --git a/src/main/java/dk/camelot64/kickc/preprocessor/CPreprocessor.java b/src/main/java/dk/camelot64/kickc/preprocessor/CPreprocessor.java index 3b80d2e6d..1fe90dd54 100644 --- a/src/main/java/dk/camelot64/kickc/preprocessor/CPreprocessor.java +++ b/src/main/java/dk/camelot64/kickc/preprocessor/CPreprocessor.java @@ -223,10 +223,9 @@ public class CPreprocessor implements TokenSource { pragmaTokens.add(pragmaType); pragmaTokens.addAll(skipWhitespace(cTokenSource)); ArrayList pragmaBody = readBody(cTokenSource); - final Token pragmaBodyStart = pragmaBody.get(0); // Convert space-based pragma to parenthesis-based for easier parsing // #pragma NAME XXX YYY \n => #pragma NAME ( XXX , YYY ) \n - if(pragmaBodyStart.getType() != KickCLexer.PAR_BEGIN) { + if(pragmaBody.isEmpty() || pragmaBody.get(0).getType() != KickCLexer.PAR_BEGIN) { ArrayList parenthesizedBody = new ArrayList<>(); parenthesizedBody.add(new CommonToken(KickCLexer.PAR_BEGIN, "(")); // Parenthesize the parameter list diff --git a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java index 90670856d..042f930e2 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java +++ b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java @@ -546,6 +546,11 @@ public class TestProgramsFast extends TestPrograms { compileAndCompare("pragma-unknown.c"); } + @Test + public void testPragmaNoParametersNoParenthesis() throws IOException { + compileAndCompare("pragma-noparam-noparen.c"); + } + @Test public void testErrorFormatter() throws IOException { // Error on a char diff --git a/src/test/kc/pragma-noparam-noparen.c b/src/test/kc/pragma-noparam-noparen.c new file mode 100644 index 000000000..2d9fe466b --- /dev/null +++ b/src/test/kc/pragma-noparam-noparen.c @@ -0,0 +1,8 @@ +// Test that #pragma works with no parenthesis and no parameters + +#pragma nobank + +void main() { + char * const SCREEN = (char*) 0x0400; + *SCREEN = 'a'; +} \ No newline at end of file diff --git a/src/test/ref/pragma-noparam-noparen.asm b/src/test/ref/pragma-noparam-noparen.asm new file mode 100644 index 000000000..7039561db --- /dev/null +++ b/src/test/ref/pragma-noparam-noparen.asm @@ -0,0 +1,18 @@ +// Test that #pragma works with no parenthesis and no parameters + // Commodore 64 PRG executable file +.file [name="pragma-noparam-noparen.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) +.segment Code +main: { + .label SCREEN = $400 + // *SCREEN = 'a' + lda #'a' + sta SCREEN + // } + rts +} diff --git a/src/test/ref/pragma-noparam-noparen.cfg b/src/test/ref/pragma-noparam-noparen.cfg new file mode 100644 index 000000000..134ce4314 --- /dev/null +++ b/src/test/ref/pragma-noparam-noparen.cfg @@ -0,0 +1,8 @@ + +void main() +main: scope:[main] from + [0] *main::SCREEN = 'a' + to:main::@return +main::@return: scope:[main] from main + [1] return + to:@return diff --git a/src/test/ref/pragma-noparam-noparen.log b/src/test/ref/pragma-noparam-noparen.log new file mode 100644 index 000000000..68ccb3b9d --- /dev/null +++ b/src/test/ref/pragma-noparam-noparen.log @@ -0,0 +1,135 @@ +Warning! Unknown #pragma nobank + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + *main::SCREEN = 'a' + to:main::@return +main::@return: scope:[main] from main + 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 +void __start() +void main() +__constant char * const main::SCREEN = (char *)$400 + +Simplifying constant pointer cast (char *) 1024 +Successful SSA optimization PassNCastSimplification +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 + +void main() +main: scope:[main] from + [0] *main::SCREEN = 'a' + to:main::@return +main::@return: scope:[main] from main + [1] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() + +Initial phi equivalence classes +Complete equivalence classes +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] *main::SCREEN = 'a' [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [] + +Uplifting [main] best 15 combination +Uplifting [] best 15 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test that #pragma works with no parenthesis and no parameters + // Upstart + // Commodore 64 PRG executable file +.file [name="pragma-noparam-noparen.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels +.segment Code + // main +main: { + .label SCREEN = $400 + // [0] *main::SCREEN = 'a' -- _deref_pbuc1=vbuc2 + lda #'a' + sta SCREEN + jmp __breturn + // main::@return + __breturn: + // [1] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +void main() +__constant char * const main::SCREEN = (char *) 1024 + + + +FINAL ASSEMBLER +Score: 12 + + // File Comments +// Test that #pragma works with no parenthesis and no parameters + // Upstart + // Commodore 64 PRG executable file +.file [name="pragma-noparam-noparen.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels +.segment Code + // main +main: { + .label SCREEN = $400 + // *SCREEN = 'a' + // [0] *main::SCREEN = 'a' -- _deref_pbuc1=vbuc2 + lda #'a' + sta SCREEN + // main::@return + // } + // [1] return + rts +} + // File Data + diff --git a/src/test/ref/pragma-noparam-noparen.sym b/src/test/ref/pragma-noparam-noparen.sym new file mode 100644 index 000000000..a2a8aef7f --- /dev/null +++ b/src/test/ref/pragma-noparam-noparen.sym @@ -0,0 +1,3 @@ +void main() +__constant char * const main::SCREEN = (char *) 1024 + From 70012690ddbf1842a4a4241565025db2cdee602c Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Thu, 13 Apr 2023 13:07:30 +0200 Subject: [PATCH 49/66] Revert "- Resolved issue of nobank without parameters. Now it works ... The CPreprocessor adds () and the KickCParser.g4 demands brackets as part of the syntax. But you can write without in the code. - Retested all test cases." This reverts commit 82a6c56e --- .../dk/camelot64/kickc/parser/KickCParser.g4 | 4 +- .../Pass0GenerateStatementSequence.java | 29 +------ .../kickc/preprocessor/CPreprocessor.java | 8 -- src/test/kc/call-banked-phi-case-3-near-1.c | 8 +- .../ref/call-banked-phi-case-3-near-1.cfg | 2 +- .../ref/call-banked-phi-case-3-near-1.log | 84 +++++++++---------- .../ref/call-banked-phi-case-3-near-1.sym | 2 +- 7 files changed, 52 insertions(+), 85 deletions(-) diff --git a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 index 178005132..0bfba0d7d 100644 --- a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 +++ b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 @@ -136,8 +136,8 @@ parameterDecl ; pragma - : PRAGMA NAME PAR_BEGIN PAR_END #pragmaNoParameters - | PRAGMA NAME PAR_BEGIN pragmaParam (COMMA pragmaParam)* PAR_END #pragmaParameters + : PRAGMA NAME + | PRAGMA NAME (PAR_BEGIN pragmaParam (COMMA pragmaParam)* PAR_END)? ; pragmaParam diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 504dc117c..4a3dcaf4b 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -42,7 +42,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor scopeStack; /** All #pragma constructor_for() statements. Collected during parsing and handled by {@link #generate()} before returning. */ - private final List pragmaConstructorFors; + private final List pragmaConstructorFors; public Pass0GenerateStatementSequence(CParser cParser, KickCParser.FileContext fileCtx, Program program, Procedure.CallingConvention initialCallingConvention, StringEncoding defaultEncoding, String defaultInterruptType) { @@ -148,7 +148,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor constructorProcs = new ArrayList<>(); - for(KickCParser.PragmaParametersContext pragmaConstructorFor : pragmaConstructorFors) { + for(KickCParser.PragmaContext pragmaConstructorFor : pragmaConstructorFors) { final List names = pragmaConstructorFor.pragmaParam(); if(names.size() < 2) throw new CompileError("#pragma constructor_for requires at least 2 parameters.", new StatementSource(pragmaConstructorFor)); @@ -237,29 +237,8 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor parenthesizedBody = new ArrayList<>(); - parenthesizedBody.add(new CommonToken(KickCLexer.PAR_BEGIN, "(")); - parenthesizedBody.add(new CommonToken(KickCLexer.PAR_END, ")")); - pragmaBody = parenthesizedBody; - pragmaTokens.addAll(pragmaBody); - // Pass on the #pragma to the parser - and mark it as already handled - cTokenSource.addSourceFirst(new ListTokenSource(pragmaTokens)); } parserPragmas.add(inputToken); return true; diff --git a/src/test/kc/call-banked-phi-case-3-near-1.c b/src/test/kc/call-banked-phi-case-3-near-1.c index feb43dbda..2743d4b5c 100644 --- a/src/test/kc/call-banked-phi-case-3-near-1.c +++ b/src/test/kc/call-banked-phi-case-3-near-1.c @@ -30,6 +30,10 @@ char* const SCREEN = (char*)0x0400; +#pragma code_seg(Code) +void main(void) { + SCREEN[0] = plus('0', 7); // close call +} #pragma code_seg(RAM_Bank1) #pragma bank(cx16_ram, 1) @@ -43,8 +47,4 @@ char min(char a, char b) { return a+b; } -#pragma code_seg(Code) -void main(void) { - SCREEN[0] = plus('0', 7); // close call -} diff --git a/src/test/ref/call-banked-phi-case-3-near-1.cfg b/src/test/ref/call-banked-phi-case-3-near-1.cfg index 4a0b60f9d..3a2aea220 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.cfg +++ b/src/test/ref/call-banked-phi-case-3-near-1.cfg @@ -20,7 +20,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return diff --git a/src/test/ref/call-banked-phi-case-3-near-1.log b/src/test/ref/call-banked-phi-case-3-near-1.log index 60b08c7d8..fde569cc1 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.log +++ b/src/test/ref/call-banked-phi-case-3-near-1.log @@ -2,6 +2,22 @@ Loading link script "call-banked-phi.ld" CONTROL FLOW GRAPH SSA +void main() +main: scope:[main] from __start + plus::a#0 = '0' + plus::b#0 = 7 + call plus + plus::return#0 = plus::return#2 + to:main::@1 +main::@1: scope:[main] from main + plus::return#3 = phi( main/plus::return#0 ) + main::$0 = plus::return#3 + SCREEN[0] = main::$0 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + __bank(cx16_ram, 1) char plus(char a , char b) plus: scope:[plus] from main plus::b#1 = phi( main/plus::b#0 ) @@ -14,15 +30,15 @@ plus: scope:[plus] from main plus::@1: scope:[plus] from plus min::return#3 = phi( plus/min::return#0 ) plus::$0 = min::return#3 - plus::return#0 = plus::$0 + plus::return#1 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus::@1 - plus::return#3 = phi( plus::@1/plus::return#0 ) - plus::return#1 = plus::return#3 + plus::return#4 = phi( plus::@1/plus::return#1 ) + plus::return#2 = plus::return#4 return to:@return -char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) min: scope:[min] from plus min::b#1 = phi( plus/min::b#0 ) min::a#1 = phi( plus/min::a#0 ) @@ -35,22 +51,6 @@ min::@return: scope:[min] from min return to:@return -void main() -main: scope:[main] from __start - plus::a#0 = '0' - plus::b#0 = 7 - call plus - plus::return#2 = plus::return#1 - to:main::@1 -main::@1: scope:[main] from main - plus::return#4 = phi( main/plus::return#2 ) - main::$0 = plus::return#4 - SCREEN[0] = main::$0 - to:main::@return -main::@return: scope:[main] from main::@1 - return - to:@return - void __start() __start: scope:[__start] from call main @@ -66,7 +66,7 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 -char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) char min::$0 char min::a char min::a#0 @@ -107,10 +107,10 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias plus::return#0 = plus::return#3 Alias min::return#0 = min::return#3 -Alias plus::return#0 = plus::$0 plus::return#3 plus::return#1 +Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 Alias min::return#1 = min::$0 min::return#4 min::return#2 -Alias plus::return#2 = plus::return#4 Successful SSA optimization Pass2AliasElimination Identical Phi Values plus::a#1 plus::a#0 Identical Phi Values plus::b#1 plus::b#0 @@ -123,31 +123,31 @@ Successful SSA optimization Pass2ConstantIdentification Constant min::a#0 = plus::a#0 Constant min::b#0 = plus::b#0 Successful SSA optimization Pass2ConstantIdentification -Simplifying expression containing zero SCREEN in [15] SCREEN[0] = main::$0 +Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero 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 -Constant right-side identified [4] min::return#1 = min::a#0 + min::b#0 +Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant min::return#1 = min::a#0+min::b#0 Successful SSA optimization Pass2ConstantIdentification Constant min::return#0 = min::return#1 Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = min::return#0 +Constant plus::return#1 = min::return#0 Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#2 = plus::return#0 +Constant plus::return#0 = plus::return#1 Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#2 +Constant main::$0 = plus::return#0 Successful SSA optimization Pass2ConstantIdentification Inlining constant with different constant siblings min::return#0 Constant inlined plus::return#0 = min::return#1 Constant inlined main::$0 = min::return#1 +Constant inlined plus::return#1 = min::return#1 Constant inlined min::a#0 = plus::a#0 Constant inlined min::return#0 = min::return#1 -Constant inlined plus::return#2 = min::return#1 Constant inlined min::b#0 = plus::b#0 Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of main @@ -188,7 +188,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return @@ -199,7 +199,7 @@ min::@return: scope:[min] from min VARIABLE REGISTER WEIGHTS void main() -char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) char min::a char min::b char min::return @@ -215,15 +215,15 @@ Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a REGISTER UPLIFT SCOPES +Uplift Scope [main] Uplift Scope [plus] Uplift Scope [min] -Uplift Scope [main] Uplift Scope [] -Uplifting [plus] best 93 combination -Uplifting [min] best 93 combination -Uplifting [main] best 93 combination -Uplifting [] best 93 combination +Uplifting [main] best 90 combination +Uplifting [plus] best 90 combination +Uplifting [min] best 90 combination +Uplifting [] best 90 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -277,10 +277,9 @@ main: { // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: - lda.z 0 - pha lda #1 sta.z 0 + pha jsr plus pla sta.z 0 @@ -299,7 +298,6 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -343,7 +341,7 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() -char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) char min::a char min::b char min::return @@ -358,7 +356,7 @@ char plus::return FINAL ASSEMBLER -Score: 54 +Score: 51 // File Comments /** @@ -411,10 +409,9 @@ main: { // plus('0', 7) // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram - lda.z 0 - pha lda #1 sta.z 0 + pha jsr plus pla sta.z 0 @@ -431,7 +428,6 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 diff --git a/src/test/ref/call-banked-phi-case-3-near-1.sym b/src/test/ref/call-banked-phi-case-3-near-1.sym index 9e4219f22..09b563343 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.sym +++ b/src/test/ref/call-banked-phi-case-3-near-1.sym @@ -1,6 +1,6 @@ __constant char * const SCREEN = (char *) 1024 void main() -char min(char a , char b) +__bank(cx16_ram, 1) char min(char a , char b) char min::a char min::b char min::return From 663a439c34f8fe5c31a2f5f38abffa7de41d5190 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Fri, 14 Apr 2023 08:00:31 +0200 Subject: [PATCH 50/66] - Updated test cases --- .../ref/call-banked-phi-case-3-near-1.asm | 1 + .../ref/call-banked-phi-case-3-near-1.log | 20 ++++++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/test/ref/call-banked-phi-case-3-near-1.asm b/src/test/ref/call-banked-phi-case-3-near-1.asm index f3e8aa08d..39b32a2d9 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.asm +++ b/src/test/ref/call-banked-phi-case-3-near-1.asm @@ -69,6 +69,7 @@ plus: { } .segment Code // char min(char a, char b) +// banked : bank area='cx16_ram', bank=1 min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-3-near-1.log b/src/test/ref/call-banked-phi-case-3-near-1.log index fde569cc1..ee40560bd 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.log +++ b/src/test/ref/call-banked-phi-case-3-near-1.log @@ -220,10 +220,10 @@ Uplift Scope [plus] Uplift Scope [min] Uplift Scope [] -Uplifting [main] best 90 combination -Uplifting [plus] best 90 combination -Uplifting [min] best 90 combination -Uplifting [] best 90 combination +Uplifting [main] best 93 combination +Uplifting [plus] best 93 combination +Uplifting [min] best 93 combination +Uplifting [] best 93 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -277,9 +277,10 @@ main: { // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram plus_from_main: + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -298,6 +299,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -314,6 +316,7 @@ plus: { .segment Code // min // char min(char a, char b) +// banked : bank area='cx16_ram', bank=1 min: { .label return = plus.a+plus.b jmp __breturn @@ -356,7 +359,7 @@ char plus::return FINAL ASSEMBLER -Score: 51 +Score: 54 // File Comments /** @@ -409,9 +412,10 @@ main: { // plus('0', 7) // [1] call plus // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + lda.z 0 + pha lda #1 sta.z 0 - pha jsr plus pla sta.z 0 @@ -428,6 +432,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) +// banked : bank area='cx16_ram', bank=1 plus: { .label a = '0' .label b = 7 @@ -443,6 +448,7 @@ plus: { .segment Code // min // char min(char a, char b) +// banked : bank area='cx16_ram', bank=1 min: { .label return = plus.a+plus.b // min::@return From 23903b34c64f951bb4af84570b3d0bac831fd37b Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Tue, 18 Apr 2023 08:02:39 +0200 Subject: [PATCH 51/66] - Removed TODO --- .../dk/camelot64/kickc/passes/Pass4CodeGeneration.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 177d137b9..ccea75395 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -961,14 +961,6 @@ public class Pass4CodeGeneration { } } } else if (statement instanceof StatementCallExecute) { - // TODO: This part seems never to be executed! Old code? -// StatementCallExecute call = (StatementCallExecute) statement; -// RValue procedureRVal = call.getProcedureRVal(); -// // Generate ASM for a call -// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); -// if (!(procedureRVal instanceof ProcedureRef)) { -// asm.getCurrentChunk().setClobberOverwrite(CpuClobber.CLOBBER_ALL); -// } StatementCallExecute call = (StatementCallExecute) statement; ProcedureRef procedureRef = call.getProcedure(); if(procedureRef != null) { From 3735b248c3b97f6cfd8f17bc98721bc686d50825 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Tue, 18 Apr 2023 08:36:22 +0200 Subject: [PATCH 52/66] - Objects.equals(bankLocation, procedure.bankLocation) --- src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 a154a2ca0..40512af6b 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -337,7 +337,7 @@ public class Procedure extends Scope { Procedure procedure = (Procedure) o; return variableLengthParameterList == procedure.variableLengthParameterList && declaredInline == procedure.declaredInline && - isDeclaredBanked() == procedure.isDeclaredBanked() && + Objects.equals(bankLocation, procedure.bankLocation) && declaredIntrinsic == procedure.declaredIntrinsic && isConstructor == procedure.isConstructor && Objects.equals(procedureType, procedure.procedureType) && From 4aeed59d0e3ce6ed3c5f654e27a7f875e5b1fce3 Mon Sep 17 00:00:00 2001 From: Flight_Control Date: Tue, 18 Apr 2023 10:14:47 +0200 Subject: [PATCH 53/66] - Code improvements for CallingDistance and CallingProximity --- .../AsmFragmentInstanceSpecBuilder.java | 11 ++- .../signature/AsmFragmentSignature.java | 13 ++- .../kickc/model/symbols/Procedure.java | 83 +++++++++++++++++++ .../kickc/passes/Pass4CodeGeneration.java | 53 +----------- 4 files changed, 94 insertions(+), 66 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java index 8c493b3d6..91669533e 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java @@ -14,6 +14,7 @@ import dk.camelot64.kickc.model.operators.OperatorUnary; import dk.camelot64.kickc.model.operators.Operators; import dk.camelot64.kickc.model.statements.*; import dk.camelot64.kickc.model.symbols.Label; +import dk.camelot64.kickc.model.symbols.Procedure; import dk.camelot64.kickc.model.symbols.Symbol; import dk.camelot64.kickc.model.types.SymbolType; import dk.camelot64.kickc.model.types.SymbolTypeInference; @@ -44,19 +45,17 @@ final public class AsmFragmentInstanceSpecBuilder { /** * Create a fragment instance spec factory for a subroutine call * - * @param distance The string expressing the distance of the call: "near", "close", "far". + * @param callingDistance The class expressing the distance of the call: "near", "close", "far" plus bankArea and bank information calculated from the from and to procedure. * @param callingConvention The string expressing the calling convention supported by the fragment. - * @param bankArea The bank area where the procedure is to be called. - * @param bank The bank where the procedure is to be called. * @param procedureName The full name of the procedure. * @param program The program * @return the fragment instance spec factory */ - public static AsmFragmentInstanceSpec callBanked(String distance, String callingConvention, String bankArea, Long bank, String procedureName, Program program) { + public static AsmFragmentInstanceSpec callBanked(Procedure.CallingDistance callingDistance, String callingConvention, String procedureName, Program program) { AsmFragmentBindings bindings = new AsmFragmentBindings(program); - AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked(distance, callingConvention, bankArea, bank); + AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked(callingDistance, callingConvention); ScopeRef codeScope = program.getScope().getRef(); - bindings.bind("c1", new ConstantInteger(bank)); + bindings.bind("c1", new ConstantInteger(callingDistance.getBank())); bindings.bind("la1", new LabelRef(procedureName)); return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); } diff --git a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java index d13f75cb9..509680120 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java +++ b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java @@ -2,6 +2,7 @@ package dk.camelot64.kickc.fragment.signature; import dk.camelot64.kickc.asm.fragment.signature.AsmFragmentSignatureLexer; import dk.camelot64.kickc.asm.fragment.signature.AsmFragmentSignatureParser; +import dk.camelot64.kickc.model.symbols.Procedure; import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; @@ -75,21 +76,17 @@ public interface AsmFragmentSignature { */ class CallBanked implements AsmFragmentSignature { - final private String distance; + final private Procedure.CallingDistance callingDistance; final private String callingConvention; - final private String bankArea; - final private Long bank; - public CallBanked(String distance, String callingConvention, String bankArea, Long bank) { - this.distance = distance; + public CallBanked(Procedure.CallingDistance callingDistance, String callingConvention) { + this.callingDistance = callingDistance; this.callingConvention = callingConvention; - this.bankArea = bankArea; - this.bank = bank; } @Override public String getName() { - return "call_" + callingConvention.toLowerCase() + "_" + distance.toLowerCase() + ((bankArea.isEmpty()) ? "" : ("_" + bankArea.toLowerCase())); + return "call_" + callingConvention.toLowerCase() + "_" + callingDistance.getFragmentName().toLowerCase(); } } 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 40512af6b..d59dd6419 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -64,6 +64,89 @@ public class Procedure extends Scope { this.bankLocation = bankLocation; } + public enum CallingProximity { + NEAR("near"), + CLOSE("close"), + FAR("far"); + + public String getProximity() { + return proximity; + } + + private final String proximity; + + CallingProximity(String proximity) { + this.proximity = proximity; + } + } + + /** The method for expressing the call distance to implement banking + * + * The following variations exist related to banked calls: + * - #1 - unbanked to unbanked and no banking areas + * - #2 - unbanked to banked to any bank area + * - #3 - banked to unbanked from any bank area + * - #4 - banked to same bank in same bank area + * - #5 - banked to different bank in same bank area + * - #6 - banked to any bank between different bank areas + * + * This brings us to the call types: + * - CallingDistance.NEAR - case #1, #3, #4 + * - CallingDistance.CLOSE - case #2, #6 + * - CallingDistance.FAR - case #5 + */ + public static class CallingDistance { + + private CallingProximity proximity; + private String bankArea; + private Long bank; + + public CallingProximity getProximity() { + return proximity; + } + + public String getBankArea() { + return bankArea; + } + + public Long getBank() { + return bank; + } + + + public CallingDistance(Procedure from, Procedure to) { + if (((!from.isDeclaredBanked() && !to.isDeclaredBanked())) || + ((from.isDeclaredBanked() && !to.isDeclaredBanked())) || + ((from.isDeclaredBanked() && to.isDeclaredBanked()) && + (from.getBank() == to.getBank()) && + (from.getBankArea().contentEquals(to.getBankArea())) + ) + ) { + // near call - case #1, #3, #4 + this.proximity = CallingProximity.NEAR; + this.bankArea = ""; + this.bank = 0L; + } else { + if ((!from.isDeclaredBanked() && to.isDeclaredBanked()) || + ((from.isDeclaredBanked() && to.isDeclaredBanked()) && (!from.getBankArea().contentEquals(to.getBankArea()))) + ) { + // close call - case #2, #6 + this.proximity = CallingProximity.CLOSE; + this.bankArea = to.getBankArea(); + this.bank = to.getBank(); + } else { + // far call - case #5 + this.proximity = CallingProximity.FAR; + this.bankArea = to.getBankArea(); + this.bank = to.getBank(); + } + } + } + + public String getFragmentName() { + return this.proximity.getProximity() + (this.bankArea.isEmpty() ? "" : "_" + this.bankArea); + } + } /** The method for passing parameters and return value to the procedure. */ public enum CallingConvention { diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index ccea75395..dfcba31e5 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -906,56 +906,13 @@ public class Pass4CodeGeneration { genBlockPhiTransition(asm, block, callSuccessor, block.getScope()); } } - /* - The following variations exist related to banked calls: - #1 - unbanked to unbanked and no banking areas - #2 - unbanked to banked to any bank area - #3 - banked to unbanked from any bank area - #4 - banked to same bank in same bank area - #5 - banked to different bank in same bank area - #6 - banked to any bank between different bank areas - - This brings us to the call types: - near - case #1, #3, #4 - close - case #2, #6 - far - case #5 - */ - String fromBankArea = fromProcedure.getBankArea(); - String toBankArea = toProcedure.getBankArea(); - Boolean fromIsBanked = fromProcedure.isDeclaredBanked(); - Boolean toIsBanked = toProcedure.isDeclaredBanked(); - Long fromBank = fromProcedure.getBank(); - Long toBank = toProcedure.getBank(); - if( ((!fromIsBanked && !toIsBanked)) || - ((fromIsBanked && !toIsBanked)) || - ((fromIsBanked && toIsBanked) && (fromBank == toBank) && (fromBankArea.contentEquals(toBankArea))) - ) { - // near call - case #1, #3, #4 - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked( "near","phi", "", 0L, call.getProcedure().getFullName(), program), program); -// // Otherwise, Generate AM for a normal near call. -// asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); - } else { - if( (!fromIsBanked && toIsBanked) || - ((fromIsBanked && toIsBanked) && (!fromBankArea.contentEquals(toBankArea))) - ) { - // close call - case #2, #6 - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked( "close","phi", toBankArea, toBank, call.getProcedure().getFullName(), program), program); - } else { - // far call - case #5 - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked( "far","phi", toBankArea, toBank, call.getProcedure().getFullName(), program), program); - } - } + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked(new Procedure.CallingDistance(fromProcedure, toProcedure),"phi", call.getProcedure().getFullName(), program), program); } else if (Procedure.CallingConvention.STACK_CALL.equals(toProcedure.getCallingConvention())) { - // Same as PHI - String fromBankArea = fromProcedure.getBankArea(); - String toBankArea = toProcedure.getBankArea(); - Boolean fromIsBanked = fromProcedure.isDeclaredBanked(); Boolean toIsBanked = toProcedure.isDeclaredBanked(); Long fromBank = fromProcedure.getBank(); Long toBank = toProcedure.getBank(); if(toIsBanked && fromBank != toBank) { throw new CompileError("Stack Call procedure not supported in banked mode " + toProcedure.toString(program)); -// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked("far", "stack", toProcedure.getBankArea(), toProcedure.getBank(), call.getProcedure().getFullName(), program), program); } else { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } @@ -967,20 +924,12 @@ public class Pass4CodeGeneration { ProgramScope scope = getScope(); Procedure toProcedure = scope.getProcedure(procedureRef); Procedure fromProcedure = block.getProcedure(this.program); // We obtain from where the procedure is called, to validate the bank equality. - String fromBankArea = fromProcedure.getBankArea(); - String toBankArea = toProcedure.getBankArea(); - Boolean fromIsBanked = fromProcedure.isDeclaredBanked(); - Boolean toIsBanked = toProcedure.isDeclaredBanked(); - Long fromBank = fromProcedure.getBank(); - Long toBank = toProcedure.getBank(); RValue procedureRVal = call.getProcedureRVal(); // Same as PHI if (toProcedure.isDeclaredBanked() && fromProcedure.getBank() != toProcedure.getBank()) { throw new CompileError("Stack Call procedure not supported in banked mode " + toProcedure.toString(program)); -// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked( "far", "stack", toProcedure.getBankArea(), toProcedure.getBank(), call.getProcedure().getFullName(), program), program); } else { AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); -// AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked( "near", "stack", toProcedure.getBankArea(), toProcedure.getBank(), call.getProcedure().getFullName(), program), program); } if (!(procedureRVal instanceof ProcedureRef)) { asm.getCurrentChunk().setClobberOverwrite(CpuClobber.CLOBBER_ALL); From 9f75ffdb2a72976b45e0e3c6b9d44364586a0192 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 23 Apr 2023 09:55:20 +0200 Subject: [PATCH 54/66] Merging far-call-isolated. --- .../java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java index d61e82d9a..ef9ec9e00 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java @@ -12,7 +12,6 @@ import dk.camelot64.kickc.model.types.SymbolType; import dk.camelot64.kickc.model.values.*; import dk.camelot64.kickc.parser.KickCParser; import dk.camelot64.kickc.parser.KickCParserBaseVisitor; -import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.TerminalNode; import java.util.ArrayList; From 54aa66b96ea507e74b58131e45859bc76221352d Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 23 Apr 2023 10:09:42 +0200 Subject: [PATCH 55/66] Treating ASM bytes as expressions. --- .../dk/camelot64/kickc/fragment/AsmFragmentInstance.java | 9 ++++++--- src/test/ref/asm-culling-jmp.asm | 2 +- src/test/ref/asm-culling-jmp.log | 4 ++-- src/test/ref/c64dtv-8bppcharstretch.asm | 2 +- src/test/ref/c64dtv-8bppcharstretch.log | 4 ++-- src/test/ref/c64dtv-8bppchunkystretch.asm | 2 +- src/test/ref/c64dtv-8bppchunkystretch.log | 4 ++-- 7 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java index 38701f530..28c0e441b 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java @@ -250,15 +250,18 @@ public class AsmFragmentInstance { @Override public Object visitAsmBytes(KickCParser.AsmBytesContext ctx) { + List asmExpr = ctx.asmExpr(); ArrayList values = new ArrayList<>(); - for(int i = 1; i < ctx.getChildCount(); i = i + 2) { - values.add(ctx.getChild(i).getText()); + for(int i = 0; i < asmExpr.size(); i++) { + if(asmExpr.get(i) != null) { + AsmParameter par = (AsmParameter)this.visit(asmExpr.get(i)); + values.add(par.getParam()); + } } AsmDataNumeric data = new AsmDataNumeric(null, AsmDataNumeric.Type.BYTE, values); handleTags(data, ctx.ASM_TAG()); return null; } - @Override public Object visitAsmInstruction(KickCParser.AsmInstructionContext ctx) { KickCParser.AsmParamModeContext paramModeCtx = ctx.asmParamMode(); diff --git a/src/test/ref/asm-culling-jmp.asm b/src/test/ref/asm-culling-jmp.asm index 39c886fa8..152a669fe 100644 --- a/src/test/ref/asm-culling-jmp.asm +++ b/src/test/ref/asm-culling-jmp.asm @@ -12,7 +12,7 @@ main: { // asm jmp qwe - .byte 0, 25, 51, 76, 102, 128, 153, 179, 204, 230 + .byte 0, $19, $33, $4c, $66, $80, $99, $b3, $cc, $e6 qwe: lda #$32 // *((char*)0x0400) = 'c' diff --git a/src/test/ref/asm-culling-jmp.log b/src/test/ref/asm-culling-jmp.log index 8f295f1ae..9870ae91e 100644 --- a/src/test/ref/asm-culling-jmp.log +++ b/src/test/ref/asm-culling-jmp.log @@ -83,7 +83,7 @@ ASSEMBLER BEFORE OPTIMIZATION main: { // asm { jmpqwe .byte0,25,51,76,102,128,153,179,204,230 qwe: lda#50 } jmp qwe - .byte 0, 25, 51, 76, 102, 128, 153, 179, 204, 230 + .byte 0, $19, $33, $4c, $66, $80, $99, $b3, $cc, $e6 qwe: lda #$32 // [1] *((char *) 1024) = 'c' -- _deref_pbuc1=vbuc2 @@ -130,7 +130,7 @@ main: { // asm // asm { jmpqwe .byte0,25,51,76,102,128,153,179,204,230 qwe: lda#50 } jmp qwe - .byte 0, 25, 51, 76, 102, 128, 153, 179, 204, 230 + .byte 0, $19, $33, $4c, $66, $80, $99, $b3, $cc, $e6 qwe: lda #$32 // *((char*)0x0400) = 'c' diff --git a/src/test/ref/c64dtv-8bppcharstretch.asm b/src/test/ref/c64dtv-8bppcharstretch.asm index 13c88352a..8fadfc7eb 100644 --- a/src/test/ref/c64dtv-8bppcharstretch.asm +++ b/src/test/ref/c64dtv-8bppcharstretch.asm @@ -457,7 +457,7 @@ dtvSetCpuBankSegment1: { // asm .byte $32, $dd lda.z $ff - .byte $32, $00 + .byte $32, 0 // } rts } diff --git a/src/test/ref/c64dtv-8bppcharstretch.log b/src/test/ref/c64dtv-8bppcharstretch.log index 4c5a4bc2e..9e674183c 100644 --- a/src/test/ref/c64dtv-8bppcharstretch.log +++ b/src/test/ref/c64dtv-8bppcharstretch.log @@ -1872,7 +1872,7 @@ dtvSetCpuBankSegment1: { // asm { .byte$32,$dd lda$ff .byte$32,$00 } .byte $32, $dd lda.z $ff - .byte $32, $00 + .byte $32, 0 jmp __breturn // dtvSetCpuBankSegment1::@return __breturn: @@ -2714,7 +2714,7 @@ dtvSetCpuBankSegment1: { // asm { .byte$32,$dd lda$ff .byte$32,$00 } .byte $32, $dd lda.z $ff - .byte $32, $00 + .byte $32, 0 // dtvSetCpuBankSegment1::@return // } // [87] return diff --git a/src/test/ref/c64dtv-8bppchunkystretch.asm b/src/test/ref/c64dtv-8bppchunkystretch.asm index 7ebe19652..becb0cb59 100644 --- a/src/test/ref/c64dtv-8bppchunkystretch.asm +++ b/src/test/ref/c64dtv-8bppchunkystretch.asm @@ -365,7 +365,7 @@ dtvSetCpuBankSegment1: { // asm .byte $32, $dd lda.z $ff - .byte $32, $00 + .byte $32, 0 // } rts } diff --git a/src/test/ref/c64dtv-8bppchunkystretch.log b/src/test/ref/c64dtv-8bppchunkystretch.log index cc100204f..932a1908c 100644 --- a/src/test/ref/c64dtv-8bppchunkystretch.log +++ b/src/test/ref/c64dtv-8bppchunkystretch.log @@ -1260,7 +1260,7 @@ dtvSetCpuBankSegment1: { // asm { .byte$32,$dd lda$ff .byte$32,$00 } .byte $32, $dd lda.z $ff - .byte $32, $00 + .byte $32, 0 jmp __breturn // dtvSetCpuBankSegment1::@return __breturn: @@ -1881,7 +1881,7 @@ dtvSetCpuBankSegment1: { // asm { .byte$32,$dd lda$ff .byte$32,$00 } .byte $32, $dd lda.z $ff - .byte $32, $00 + .byte $32, 0 // dtvSetCpuBankSegment1::@return // } // [57] return From 291ce871c45d9f7c892e293c6622e8e49fc446ac Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 23 Apr 2023 11:54:47 +0200 Subject: [PATCH 56/66] Working on far call merge. --- .../call_phi_close_cx16_ram.asm | 2 +- .../call_phi_close_cx16_rom.asm | 3 +- .../mos6502-common/call_phi_far_cx16_ram.asm | 2 +- .../mos6502-common/call_phi_far_cx16_rom.asm | 2 +- .../fragment/mos6502-common/call_phi_near.asm | 2 +- .../AsmFragmentInstanceSpecBuilder.java | 2 +- .../dk/camelot64/kickc/model/Directive.java | 10 +- .../dk/camelot64/kickc/model/Program.java | 8 +- .../kickc/model/{ => symbols}/Bank.java | 39 +- .../kickc/model/symbols/Procedure.java | 73 ++-- .../camelot64/kickc/model/symbols/Scope.java | 2 - .../dk/camelot64/kickc/parser/CParser.java | 4 +- .../Pass0GenerateStatementSequence.java | 42 +-- .../kickc/passes/Pass4CodeGeneration.java | 42 +-- src/test/ref/address-0.log | 4 +- src/test/ref/address-2.log | 4 +- src/test/ref/address-5.log | 16 +- src/test/ref/address-6.log | 16 +- src/test/ref/address-of-1.log | 12 +- src/test/ref/address-of-2.log | 12 +- src/test/ref/address-of-3.log | 12 +- src/test/ref/array-16bit-lookup.log | 4 +- src/test/ref/asm-mnemonic-names.log | 4 +- src/test/ref/assignment-compound.log | 44 +-- src/test/ref/atarixl-md5b.log | 16 +- src/test/ref/bitmap-circle-2.log | 44 +-- src/test/ref/bitmap-circle.log | 44 +-- src/test/ref/bitmap-line-anim-1.log | 56 +-- src/test/ref/bitmap-line-anim-2.log | 52 +-- src/test/ref/bitmap-plot-0.log | 28 +- src/test/ref/bitmap-plot-3.log | 52 +-- src/test/ref/bitmap-plotter.log | 16 +- src/test/ref/bool-const.log | 12 +- src/test/ref/bool-function.log | 4 +- src/test/ref/bool-ifs.log | 16 +- src/test/ref/bool-vars.log | 16 +- src/test/ref/c-types.log | 196 +++++------ src/test/ref/c64dtv-8bppcharstretch.log | 20 +- src/test/ref/c64dtv-8bppchunkystretch.log | 16 +- .../ref/call-banked-phi-case-1-near-0.log | 4 +- .../ref/call-banked-phi-case-1-near-1.log | 8 +- .../ref/call-banked-phi-case-2-close-0.asm | 2 +- .../ref/call-banked-phi-case-2-close-0.log | 4 +- .../ref/call-banked-phi-case-2-close-1.asm | 2 +- .../ref/call-banked-phi-case-2-close-1.log | 4 +- .../ref/call-banked-phi-case-3-near-0.asm | 2 +- .../ref/call-banked-phi-case-3-near-0.log | 8 +- .../ref/call-banked-phi-case-3-near-1.asm | 3 +- .../ref/call-banked-phi-case-3-near-1.cfg | 2 +- .../ref/call-banked-phi-case-3-near-1.log | 20 +- .../ref/call-banked-phi-case-3-near-1.sym | 2 +- .../ref/call-banked-phi-case-4-near-0.asm | 4 +- .../ref/call-banked-phi-case-4-near-0.log | 12 +- .../ref/call-banked-phi-case-4-near-1.asm | 4 +- .../ref/call-banked-phi-case-4-near-1.log | 12 +- src/test/ref/call-banked-phi-case-5-far-0.asm | 4 +- src/test/ref/call-banked-phi-case-5-far-0.log | 8 +- src/test/ref/call-banked-phi-case-5-far-1.asm | 4 +- src/test/ref/call-banked-phi-case-5-far-1.log | 8 +- .../ref/call-banked-phi-case-6-close-0.asm | 4 +- .../ref/call-banked-phi-case-6-close-0.log | 8 +- .../ref/call-banked-phi-case-6-close-1.asm | 4 +- .../ref/call-banked-phi-case-6-close-1.log | 8 +- src/test/ref/call-parameter-autocast.log | 12 +- src/test/ref/callconstparam.log | 8 +- src/test/ref/casting-negative.log | 72 ++-- src/test/ref/casting.log | 4 +- src/test/ref/cbm-keyboard.log | 92 ++--- src/test/ref/cia-timer-cyclecount.log | 36 +- src/test/ref/cia-timer-simple.log | 36 +- src/test/ref/clobber-a-problem.log | 4 +- src/test/ref/complex/includes/includes-1.log | 4 +- src/test/ref/complex/includes/includes-2.log | 4 +- src/test/ref/complex/xmega65/xmega65.log | 8 +- src/test/ref/const-bool-return-problem.log | 8 +- src/test/ref/const-early-identification.log | 8 +- src/test/ref/const-identification.log | 8 +- src/test/ref/const-param.log | 12 +- src/test/ref/const-volatile-problem.log | 4 +- src/test/ref/constants.log | 92 ++--- src/test/ref/constref-not-literal-problem.log | 4 +- src/test/ref/cordic-atan2-16.log | 8 +- src/test/ref/cordic-atan2-clear.log | 12 +- src/test/ref/cordic-atan2.log | 8 +- src/test/ref/cstyle-decl-function.log | 8 +- src/test/ref/declared-memory-var-6.log | 40 +-- src/test/ref/declared-memory-var-7.log | 4 +- src/test/ref/declared-memory-var-8.log | 4 +- src/test/ref/declared-ssa-var-0.log | 4 +- src/test/ref/default-font.log | 4 +- src/test/ref/deref-to-derefidx-2.log | 8 +- src/test/ref/deref-to-derefidx.log | 8 +- src/test/ref/ducks-array.log | 20 +- src/test/ref/ducks-loop211.log | 4 +- src/test/ref/ducks-total.log | 332 +++++++++--------- src/test/ref/emptyblock-error.log | 8 +- src/test/ref/enum-5.log | 4 +- src/test/ref/euclid-3.log | 68 ++-- src/test/ref/euclid-problem-2.log | 16 +- .../examples/atari2600/atari2600-sprites.log | 4 +- src/test/ref/examples/c64/3d/perspective.log | 96 ++--- .../c64/bresenham/bitmap-bresenham.log | 60 ++-- .../c64/crunching/test-byteboozer.log | 4 +- .../c64/fastmultiply/fastmultiply8.log | 48 +-- src/test/ref/examples/c64/fire/fire.log | 28 +- .../ref/examples/c64/font-2x2/font-2x2.log | 20 +- .../examples/c64/kernalload/kernalload.log | 24 +- .../ref/examples/c64/krillload/krillload.log | 8 +- src/test/ref/examples/c64/linking/linking.log | 4 +- .../c64/multiplexer/simple-multiplexer.log | 24 +- .../examples/c64/nmisamples/nmisamples.log | 4 +- .../examples/c64/rasterbars/raster-bars.log | 4 +- src/test/ref/examples/c64/scroll/scroll.log | 4 +- .../ref/examples/c64/scrollbig/scrollbig.log | 20 +- .../ref/examples/c64/showlogo/showlogo.log | 8 +- src/test/ref/examples/c64/zpcode/zpcode.log | 8 +- .../ref/examples/cx16/cx16-rasterbars.log | 8 +- .../ref/examples/helloworld/helloworld.log | 44 +-- .../mega65/32bit-addressing-mega65.log | 4 +- src/test/ref/examples/mega65/banked-music.log | 28 +- .../ref/examples/mega65/camelot-1536dots.log | 44 +-- src/test/ref/examples/mega65/dma-test.log | 4 +- src/test/ref/examples/mega65/dma-test2.log | 8 +- src/test/ref/examples/mega65/dma-test3.log | 8 +- src/test/ref/examples/mega65/dma-test4.log | 8 +- src/test/ref/examples/mega65/dma-test5.log | 8 +- src/test/ref/examples/mega65/dma-test6.log | 8 +- src/test/ref/examples/mega65/dypp65.log | 16 +- .../ref/examples/mega65/helloworld-mega65.log | 48 +-- .../ref/examples/mega65/memorymap-test.log | 24 +- src/test/ref/examples/mega65/raster65.log | 8 +- src/test/ref/examples/nes/nes-dxycp.log | 20 +- .../ref/examples/plus4/plus4-randomwalk.log | 16 +- src/test/ref/examples/rom/rom.log | 16 +- src/test/ref/flipper-rex2.log | 12 +- src/test/ref/font-hex-show.log | 4 +- src/test/ref/fragment-synth.log | 8 +- src/test/ref/fragment-variations.log | 8 +- src/test/ref/function-pointer-advanced-1.log | 72 ++-- .../ref/function-pointer-noarg-call-10.log | 20 +- .../ref/function-pointer-noarg-call-13.log | 8 +- .../ref/function-pointer-noarg-call-14.log | 56 +-- .../ref/function-pointer-noarg-call-3.log | 4 +- .../ref/function-pointer-noarg-call-7.log | 8 +- .../ref/function-pointer-noarg-call-8.log | 12 +- .../ref/function-pointer-noarg-call-9.log | 4 +- .../ref/function-pointer-param-workaround.log | 4 +- src/test/ref/function-pointer-problem-1.log | 4 +- src/test/ref/function-pointer-return-2.log | 8 +- src/test/ref/function-pointer-return-3.log | 4 +- src/test/ref/global-label-problem.log | 20 +- src/test/ref/global-pc-multiple.log | 4 +- src/test/ref/helloworld2.log | 8 +- src/test/ref/hex2dec-ptrptr.log | 40 +-- src/test/ref/hex2dec.log | 44 +-- src/test/ref/incrementinarray.log | 20 +- src/test/ref/init-value-npe.log | 4 +- src/test/ref/init-volatiles.log | 4 +- src/test/ref/inline-asm-ref-scoped.log | 4 +- src/test/ref/inline-asm-uses-1.log | 4 +- src/test/ref/inline-kickasm-uses-problem.log | 4 +- src/test/ref/inline-pointer-1.log | 8 +- src/test/ref/inline-string-2.log | 12 +- src/test/ref/inline-string-4.log | 4 +- src/test/ref/inline-string.log | 12 +- src/test/ref/int-conversion.log | 176 +++++----- src/test/ref/int-literals.log | 68 ++-- src/test/ref/intermediates-simple.log | 4 +- src/test/ref/intermediates-struct.log | 8 +- .../ref/interrupt-volatile-reuse-problem1.log | 4 +- .../ref/interrupt-volatile-reuse-problem2.log | 4 +- src/test/ref/irq-hardware-clobber-jsr.log | 4 +- src/test/ref/irq-idx-problem.log | 4 +- .../ref/irq-local-var-overlap-problem.log | 8 +- src/test/ref/keyboard-glitch.log | 28 +- src/test/ref/library-constructor-1.log | 12 +- src/test/ref/library-constructor-3.log | 16 +- src/test/ref/linegen.log | 136 +++---- src/test/ref/literal-word-pointer-0.log | 4 +- src/test/ref/literal-word-pointer-1.log | 4 +- src/test/ref/liverange-1.log | 8 +- src/test/ref/liverange-10.log | 32 +- src/test/ref/liverange-2.log | 4 +- src/test/ref/liverange-3.log | 4 +- src/test/ref/liverange-4.log | 8 +- src/test/ref/liverange-5.log | 8 +- src/test/ref/liverange-6.log | 4 +- src/test/ref/liverange-7.log | 8 +- src/test/ref/liverange-8.log | 12 +- src/test/ref/liverange-9.log | 20 +- src/test/ref/liverange-call-problem.log | 16 +- src/test/ref/liverange-problem-0.log | 12 +- src/test/ref/liverange.log | 8 +- src/test/ref/longbranch-interrupt-problem.log | 4 +- src/test/ref/longjump2.log | 8 +- src/test/ref/loop-memset-min.log | 4 +- src/test/ref/loop-problem.log | 12 +- src/test/ref/loop-problem2.log | 8 +- src/test/ref/loophead-problem-2.log | 4 +- src/test/ref/loophead-problem-3.log | 4 +- src/test/ref/loophead-problem.log | 4 +- src/test/ref/loopnest.log | 4 +- src/test/ref/loopnest2.log | 8 +- src/test/ref/loopnest3.log | 8 +- src/test/ref/malloc-0.log | 8 +- src/test/ref/malloc-1.log | 8 +- src/test/ref/memcpy-0.log | 8 +- src/test/ref/memcpy-1.log | 8 +- src/test/ref/memory-heap.log | 8 +- .../ref/millfork-benchmarks/linkedlist-kc.log | 56 +-- .../ref/millfork-benchmarks/plasma-kc.log | 56 +-- .../ref/millfork-benchmarks/romsum-kc.log | 68 ++-- src/test/ref/millfork-benchmarks/sieve-kc.log | 80 ++--- src/test/ref/min-fmul-16.log | 36 +- src/test/ref/missing-band.log | 4 +- src/test/ref/modglobal.log | 8 +- src/test/ref/modglobalmin.log | 8 +- src/test/ref/mul8u-min.log | 4 +- .../simple-multiplexer-irq.log | 24 +- src/test/ref/multiply-16bit-const.log | 32 +- src/test/ref/nes-array.log | 8 +- src/test/ref/nomodify-3.log | 4 +- src/test/ref/nomodify-4.log | 8 +- src/test/ref/norom-charset.log | 4 +- src/test/ref/null-constant-1.log | 8 +- src/test/ref/number-conversion.log | 140 ++++---- src/test/ref/number-ternary-fail-2.log | 8 +- src/test/ref/number-type.log | 8 +- src/test/ref/overlap-allocation-2.log | 16 +- src/test/ref/overlap-allocation.log | 12 +- src/test/ref/plus-0.log | 8 +- src/test/ref/plus4-kbhit.log | 4 +- src/test/ref/plus4-keyboard-test.log | 4 +- src/test/ref/pointer-plus-0.log | 8 +- src/test/ref/pointer-pointer-2.log | 4 +- src/test/ref/pointer-pointer-3.log | 12 +- src/test/ref/pointer-swap.log | 20 +- src/test/ref/pointer-void-1.log | 12 +- src/test/ref/pointer-void-2.log | 12 +- src/test/ref/pointer-void-3.log | 8 +- src/test/ref/post-increment-problem-2.log | 4 +- src/test/ref/pragma-noparam-noparen.log | 1 - src/test/ref/pragma-noparenthesis.log | 8 +- src/test/ref/primes-1000-2.log | 40 +-- src/test/ref/print-problem.log | 12 +- src/test/ref/printf-1.log | 88 ++--- src/test/ref/printf-10.log | 16 +- src/test/ref/printf-11.log | 12 +- src/test/ref/printf-12.log | 232 ++++++------ src/test/ref/printf-14.log | 64 ++-- src/test/ref/printf-15.log | 52 +-- src/test/ref/printf-17.log | 136 +++---- src/test/ref/printf-18.log | 84 ++--- src/test/ref/printf-19.log | 148 ++++---- src/test/ref/printmsg.log | 28 +- src/test/ref/problem-ma-var-overwrite.log | 8 +- src/test/ref/problem-negate-const.log | 4 +- .../ref/problem-struct-inline-parameter-1.log | 4 +- .../ref/problem-struct-inline-parameter.log | 4 +- .../procedure-callingconvention-stack-4.log | 4 +- .../procedure-callingconvention-stack-5.log | 4 +- src/test/ref/procedure-declare-10.log | 4 +- src/test/ref/procedure-declare-2.log | 8 +- src/test/ref/procedure-declare-3.log | 8 +- src/test/ref/procedure-declare-4.log | 8 +- src/test/ref/procedure-declare-5.log | 4 +- src/test/ref/processor-port-test.log | 188 +++++----- src/test/ref/ptrptr-optimize-1.log | 8 +- src/test/ref/ptrptr-optimize-2.log | 8 +- src/test/ref/ptrtest.log | 16 +- src/test/ref/register-0.log | 16 +- src/test/ref/reserve-zp-global-range.log | 4 +- src/test/ref/reserve-zp-global.log | 4 +- src/test/ref/reserve-zp-procedure-1.log | 4 +- src/test/ref/reserve-zp-procedure-2.log | 8 +- src/test/ref/reserve-zp-procedure-3.log | 4 +- src/test/ref/reserve-zp-procedure-4.log | 4 +- src/test/ref/robozzle64-label-problem.log | 8 +- src/test/ref/roll-sprite-msb.log | 4 +- src/test/ref/scan-desire-problem.log | 24 +- src/test/ref/scrollbig-clobber.log | 4 +- src/test/ref/semi-struct-1.log | 44 +-- src/test/ref/sepa-optimize-problem-1.log | 24 +- src/test/ref/sieve-min.log | 28 +- src/test/ref/signed-char-comparison.log | 4 +- src/test/ref/signed-indexed-subtract.log | 56 +-- src/test/ref/signed-words.log | 8 +- src/test/ref/sinus-basic.log | 72 ++-- src/test/ref/sinusgen16.log | 96 ++--- src/test/ref/sqr-delta.log | 4 +- src/test/ref/stack-relative-addressing.log | 4 +- src/test/ref/stars-2.log | 76 ++-- src/test/ref/static-init-code-0.log | 4 +- src/test/ref/strcmp-0.log | 244 ++++++------- src/test/ref/strcpy-0.log | 8 +- .../ref/string-const-consolidation-noroot.log | 12 +- .../ref/string-const-consolidation-root.log | 32 +- src/test/ref/string-const-consolidation.log | 12 +- src/test/ref/string-escapes-2.log | 4 +- src/test/ref/string-escapes-4.log | 4 +- src/test/ref/string-pointer-problem.log | 4 +- src/test/ref/strip.log | 16 +- src/test/ref/strncat-0.log | 12 +- src/test/ref/struct-11.log | 8 +- src/test/ref/struct-11b.log | 8 +- src/test/ref/struct-12.log | 8 +- src/test/ref/struct-22.log | 8 +- src/test/ref/struct-23.log | 8 +- src/test/ref/struct-3.log | 8 +- src/test/ref/struct-44.log | 76 ++-- src/test/ref/struct-5.log | 4 +- src/test/ref/struct-pointer-ints.log | 4 +- src/test/ref/struct-ptr-14.log | 4 +- src/test/ref/struct-ptr-16.log | 8 +- src/test/ref/struct-ptr-17.log | 8 +- src/test/ref/struct-ptr-18.log | 4 +- src/test/ref/struct-ptr-19.log | 8 +- src/test/ref/struct-ptr-22.log | 44 +-- src/test/ref/struct-ptr-23.log | 8 +- src/test/ref/struct-ptr-24.log | 4 +- src/test/ref/struct-ptr-26.log | 20 +- src/test/ref/struct-ptr-28.log | 8 +- src/test/ref/struct-ptr-29.log | 8 +- src/test/ref/struct-ptr-30.log | 4 +- src/test/ref/struct-ptr-31.log | 8 +- src/test/ref/struct-ptr-34.log | 8 +- src/test/ref/struct-unwinding-2.log | 16 +- src/test/ref/summin.log | 12 +- src/test/ref/ternary-3.log | 12 +- src/test/ref/test-comments-block.log | 4 +- src/test/ref/test-comments-global.log | 4 +- src/test/ref/test-comments-single.log | 4 +- src/test/ref/test-comparisons-sword.log | 64 ++-- src/test/ref/test-comparisons-word.log | 56 +-- .../ref/test-interrupt-volatile-write.log | 4 +- src/test/ref/test-interrupt-volatile.log | 4 +- src/test/ref/test-keyboard-space.log | 12 +- src/test/ref/test-keyboard.log | 20 +- src/test/ref/test-lowhigh.log | 88 ++--- src/test/ref/test-scroll-up.log | 12 +- src/test/ref/test-signed-word-minus-byte.log | 52 +-- src/test/ref/tod-1.log | 64 ++-- src/test/ref/toupper-1.log | 60 ++-- src/test/ref/travis1.log | 24 +- src/test/ref/typedef-2.log | 4 +- src/test/ref/typedef-4.log | 4 +- src/test/ref/typeid-plus-bytes.log | 16 +- src/test/ref/union-7.log | 8 +- src/test/ref/union-8.log | 8 +- src/test/ref/var-register-zp-3.log | 12 +- src/test/ref/var-register.log | 4 +- src/test/ref/varmodel-ma_mem-3.log | 8 +- src/test/ref/varmodel-mem-1.log | 8 +- src/test/ref/void-parameter.log | 12 +- src/test/ref/volatile-0.log | 4 +- src/test/ref/volatile-2.log | 4 +- src/test/ref/voronoi.log | 16 +- src/test/ref/weeip-bbslist.log | 84 ++--- src/test/ref/weeip-checksum.log | 12 +- src/test/ref/wfragment1.log | 4 +- src/test/ref/zeropage-sinus.log | 16 +- src/test/ref/zp-reserve-coalesce-problem.log | 8 +- src/test/ref/zpparammin.log | 8 +- 363 files changed, 3814 insertions(+), 3869 deletions(-) rename src/main/java/dk/camelot64/kickc/model/{ => symbols}/Bank.java (89%) diff --git a/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm b/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm index 40053e0b4..fda09c03e 100644 --- a/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm +++ b/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm @@ -4,4 +4,4 @@ lda #{c1} sta $0 jsr {la1} pla -sta $0 +sta $0 \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm b/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm index 29641e03d..6d0c8e9c2 100644 --- a/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm +++ b/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm @@ -4,5 +4,4 @@ lda #{c1} sta $1 jsr {la1} pla -sta $1 - +sta $1 \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/call_phi_far_cx16_ram.asm b/src/main/fragment/mos6502-common/call_phi_far_cx16_ram.asm index 667444f52..6be1d836e 100644 --- a/src/main/fragment/mos6502-common/call_phi_far_cx16_ram.asm +++ b/src/main/fragment/mos6502-common/call_phi_far_cx16_ram.asm @@ -1,4 +1,4 @@ jsr $FF6E .byte <{la1} .byte >{la1} -.byte {c1} +.byte {c1} \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/call_phi_far_cx16_rom.asm b/src/main/fragment/mos6502-common/call_phi_far_cx16_rom.asm index 667444f52..6be1d836e 100644 --- a/src/main/fragment/mos6502-common/call_phi_far_cx16_rom.asm +++ b/src/main/fragment/mos6502-common/call_phi_far_cx16_rom.asm @@ -1,4 +1,4 @@ jsr $FF6E .byte <{la1} .byte >{la1} -.byte {c1} +.byte {c1} \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/call_phi_near.asm b/src/main/fragment/mos6502-common/call_phi_near.asm index 71fb96bc2..443c46caa 100644 --- a/src/main/fragment/mos6502-common/call_phi_near.asm +++ b/src/main/fragment/mos6502-common/call_phi_near.asm @@ -1 +1 @@ -jsr {la1} +jsr {la1} \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java index 91669533e..a3ca5bddc 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java @@ -55,7 +55,7 @@ final public class AsmFragmentInstanceSpecBuilder { AsmFragmentBindings bindings = new AsmFragmentBindings(program); AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked(callingDistance, callingConvention); ScopeRef codeScope = program.getScope().getRef(); - bindings.bind("c1", new ConstantInteger(callingDistance.getBank())); + bindings.bind("c1", new ConstantInteger(callingDistance.getBankNumber())); bindings.bind("la1", new LabelRef(procedureName)); return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); } diff --git a/src/main/java/dk/camelot64/kickc/model/Directive.java b/src/main/java/dk/camelot64/kickc/model/Directive.java index 4b43f7d4b..850933e44 100644 --- a/src/main/java/dk/camelot64/kickc/model/Directive.java +++ b/src/main/java/dk/camelot64/kickc/model/Directive.java @@ -52,20 +52,20 @@ public class Directive { static public class Bank extends Directive { private String bankArea; // A bank area is a memory range that is banked on a target platform. - private Long bank; // A bank is a number that defines a bank configuration in a bank area. + private Long bankNumber; // A bank is a number that defines a bank configuration in a bank area. - public Bank(String bankArea, Long bank) { + public Bank(String bankArea, Long bankNumber) { super("bank" ); this.bankArea = bankArea; - this.bank = bank; + this.bankNumber = bankNumber; } public String getBankArea() { return bankArea; } - public Long getBank() { - return bank; + public Long getBankNumber() { + return bankNumber; } } diff --git a/src/main/java/dk/camelot64/kickc/model/Program.java b/src/main/java/dk/camelot64/kickc/model/Program.java index c42debf3d..bcd720852 100644 --- a/src/main/java/dk/camelot64/kickc/model/Program.java +++ b/src/main/java/dk/camelot64/kickc/model/Program.java @@ -8,11 +8,13 @@ import dk.camelot64.kickc.model.statements.Statement; import dk.camelot64.kickc.model.symbols.ProgramScope; import dk.camelot64.kickc.model.values.LabelRef; import dk.camelot64.kickc.model.values.ProcedureRef; -import dk.camelot64.kickc.parser.KickCParser; import dk.camelot64.kickc.passes.calcs.*; import java.nio.file.Path; -import java.util.*; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; /** A KickC Intermediate Compiler Language (ICL) Program */ public class Program { @@ -105,7 +107,6 @@ public class Program { private NaturalLoopSet loopSet; /** The register weight of all variables describing how much the variable would theoretically gain from being in a register. PASS 3-5 (CACHED ON-DEMAND) */ private VariableRegisterWeights variableRegisterWeights; - /** All #pragma code segments. Collected during parsing. These are used by the bank() pragmas to validate if the code segment exists during compilation.*/ public Program() { this.outputFileManager = new OutputFileManager(); @@ -537,4 +538,5 @@ public class Program { sizeInfo.append(getAsm().getSizeInfo()); return sizeInfo.toString(); } + } diff --git a/src/main/java/dk/camelot64/kickc/model/Bank.java b/src/main/java/dk/camelot64/kickc/model/symbols/Bank.java similarity index 89% rename from src/main/java/dk/camelot64/kickc/model/Bank.java rename to src/main/java/dk/camelot64/kickc/model/symbols/Bank.java index b080bc0e4..ce1ace201 100644 --- a/src/main/java/dk/camelot64/kickc/model/Bank.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Bank.java @@ -1,9 +1,6 @@ -package dk.camelot64.kickc.model; - - +package dk.camelot64.kickc.model.symbols; /** - * *

* Specific target computer platforms implement a memory layout that can be banked either in ram or rom. * This class models the capability to calculate which function call implementations are banked and which not. @@ -99,44 +96,28 @@ package dk.camelot64.kickc.model; * __bank( method, number ) directive to calculate the function call implementation * at the function calling locations! * - * + *

* The KickC compiler contains several test cases and examples which demonstrate the usage of the banking system. * + * @param bankArea The bankable area name. + * @param bankNumber The bank number. */ -public class Bank extends Object { - - private final String bankArea; // The bank method to apply. - private Long bank; // The bank number. +public record Bank(String bankArea, Long bankNumber) { /** * Creates a new Bank which collects the necessary data to handle banking. * For example, on the Commander X16, RAM is banked from address 0xA000 till 0xBFFF. * Zeropage 0x00 configures this banked RAM, with a number from 0x00 till 0xff. - * So banked RAM is is a bankArea, and the bank is a configurable bank number in the bankArea. + * So "Banked RAM" is is a bankArea, and the bank is a configurable bank number in the bankArea. + * * @param bankArea A bank area is a memory range that is banked on a target platform. - * @param bank A bank is a number that defines a bank configuration in a bank area. + * @param bankNumber A bank is a number that defines a bank configuration in a bank area. */ - public Bank(String bankArea, Long bank) { - this.bankArea = bankArea; - this.bank = bank; - } - - public String getBankArea() { - return bankArea; - } - - public Long getBank() { - return bank; - } - - public void setBank(Long bank) { - this.bank = bank; + public Bank { } @Override public String toString() { - return "banked : " + - "bank area='" + bankArea + '\'' + - ", bank=" + bank; + return "__bank(" + this.bankArea() + ", " + this.bankNumber() + ") "; } } 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 d59dd6419..40da8c1d2 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -1,7 +1,6 @@ package dk.camelot64.kickc.model.symbols; import dk.camelot64.kickc.model.Comment; -import dk.camelot64.kickc.model.Bank; import dk.camelot64.kickc.model.Program; import dk.camelot64.kickc.model.statements.StatementSource; import dk.camelot64.kickc.model.types.SymbolType; @@ -42,10 +41,12 @@ public class Procedure extends Scope { private boolean isConstructor; /** The source of the procedure definition. */ private StatementSource definitionSource; - /** The bank segment information. Collected during parsing. These are used to compare with the current currentBank to decide a near or a far call, and to keep inline calling routines. - * When this value is null, the procedure is not allocated to a bank. + /** + * The bank that the procedure code is placed in. + * Used to decide whether to produce near, close or far call when generating code. + * If null, the procedure is in a common bank (always visible) and all calls will be near. */ - private Bank bankLocation; + private Bank bank; /** The names of all legal intrinsic procedures. */ @@ -56,12 +57,12 @@ public class Procedure extends Scope { Pass1ByteXIntrinsicRewrite.INTRINSIC_MAKELONG4 ); - public Bank getBankLocation() { - return bankLocation; + public Bank getBank() { + return bank; } - public void setBankLocation(Bank bankLocation) { - this.bankLocation = bankLocation; + public void setBank(Bank bank) { + this.bank = bank; } public enum CallingProximity { @@ -109,16 +110,16 @@ public class Procedure extends Scope { return bankArea; } - public Long getBank() { + public Long getBankNumber() { return bank; } public CallingDistance(Procedure from, Procedure to) { - if (((!from.isDeclaredBanked() && !to.isDeclaredBanked())) || - ((from.isDeclaredBanked() && !to.isDeclaredBanked())) || - ((from.isDeclaredBanked() && to.isDeclaredBanked()) && - (from.getBank() == to.getBank()) && + if (((!from.isBanked() && !to.isBanked())) || + ((from.isBanked() && !to.isBanked())) || + ((from.isBanked() && to.isBanked()) && + (from.getBankNumber() == to.getBankNumber()) && (from.getBankArea().contentEquals(to.getBankArea())) ) ) { @@ -127,18 +128,18 @@ public class Procedure extends Scope { this.bankArea = ""; this.bank = 0L; } else { - if ((!from.isDeclaredBanked() && to.isDeclaredBanked()) || - ((from.isDeclaredBanked() && to.isDeclaredBanked()) && (!from.getBankArea().contentEquals(to.getBankArea()))) + if ((!from.isBanked() && to.isBanked()) || + ((from.isBanked() && to.isBanked()) && (!from.getBankArea().contentEquals(to.getBankArea()))) ) { // close call - case #2, #6 this.proximity = CallingProximity.CLOSE; this.bankArea = to.getBankArea(); - this.bank = to.getBank(); + this.bank = to.getBankNumber(); } else { // far call - case #5 this.proximity = CallingProximity.FAR; this.bankArea = to.getBankArea(); - this.bank = to.getBank(); + this.bank = to.getBankNumber(); } } } @@ -183,11 +184,11 @@ public class Procedure extends Scope { /** The calling convention used for this procedure. */ private CallingConvention callingConvention; - public Procedure(String name, SymbolTypeProcedure procedureType, Scope parentScope, String segmentCode, String segmentData, CallingConvention callingConvention, Bank bankLocation) { + public Procedure(String name, SymbolTypeProcedure procedureType, Scope parentScope, String segmentCode, String segmentData, CallingConvention callingConvention, Bank bank) { super(name, parentScope, segmentData); this.procedureType = procedureType; this.declaredInline = false; - this.bankLocation = bankLocation; + this.bank = bank; this.interruptType = null; this.comments = new ArrayList<>(); this.segmentCode = segmentCode; @@ -301,20 +302,20 @@ public class Procedure extends Scope { this.declaredInline = declaredInline; } - public boolean isDeclaredBanked() { - return bankLocation != null; + public boolean isBanked() { + return bank != null; } - public Long getBank() { - if(bankLocation != null) - return bankLocation.getBank(); + public Long getBankNumber() { + if(bank != null) + return bank.bankNumber(); else return 0L; } public String getBankArea() { - if(bankLocation != null) - return bankLocation.getBankArea(); + if(bank != null) + return bank.bankArea(); else return ""; } @@ -379,8 +380,8 @@ public class Procedure extends Scope { if(declaredIntrinsic) { res.append("__intrinsic "); } - if(isDeclaredBanked()) { - res.append("__bank(").append(this.getBankArea()).append(", ").append(this.getBank()).append(") "); + if(isBanked()) { + res.append("__bank(").append(this.getBankArea()).append(", ").append(this.getBankNumber()).append(") "); } if(!callingConvention.equals(CallingConvention.PHI_CALL)) { res.append(getCallingConvention().getName()).append(" "); @@ -418,23 +419,11 @@ public class Procedure extends Scope { if(o == null || getClass() != o.getClass()) return false; if(!super.equals(o)) return false; Procedure procedure = (Procedure) o; - return variableLengthParameterList == procedure.variableLengthParameterList && - declaredInline == procedure.declaredInline && - Objects.equals(bankLocation, procedure.bankLocation) && - declaredIntrinsic == procedure.declaredIntrinsic && - isConstructor == procedure.isConstructor && - Objects.equals(procedureType, procedure.procedureType) && - Objects.equals(parameterNames, procedure.parameterNames) && - Objects.equals(interruptType, procedure.interruptType) && - Objects.equals(comments, procedure.comments) && - Objects.equals(reservedZps, procedure.reservedZps) && - Objects.equals(segmentCode, procedure.segmentCode) && - Objects.equals(constructorRefs, procedure.constructorRefs) && - callingConvention == procedure.callingConvention; + return variableLengthParameterList == procedure.variableLengthParameterList && declaredInline == procedure.declaredInline && declaredIntrinsic == procedure.declaredIntrinsic && isConstructor == procedure.isConstructor && Objects.equals(procedureType, procedure.procedureType) && Objects.equals(parameterNames, procedure.parameterNames) && Objects.equals(interruptType, procedure.interruptType) && Objects.equals(comments, procedure.comments) && Objects.equals(reservedZps, procedure.reservedZps) && Objects.equals(segmentCode, procedure.segmentCode) && Objects.equals(constructorRefs, procedure.constructorRefs) && Objects.equals(definitionSource, procedure.definitionSource) && Objects.equals(bank, procedure.bank) && callingConvention == procedure.callingConvention; } @Override public int hashCode() { - return Objects.hash(super.hashCode(), procedureType, parameterNames, variableLengthParameterList, declaredInline, declaredIntrinsic, interruptType, comments, reservedZps, segmentCode, constructorRefs, isConstructor, callingConvention); + return Objects.hash(super.hashCode(), procedureType, parameterNames, variableLengthParameterList, declaredInline, declaredIntrinsic, interruptType, comments, reservedZps, segmentCode, constructorRefs, isConstructor, definitionSource, bank, callingConvention); } } diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java b/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java index 0ef0c0345..b73ae4353 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java @@ -16,8 +16,6 @@ public abstract class Scope implements Symbol { public static final String SEGMENT_CODE_DEFAULT = "Code"; /** The default data segment. */ public static final String SEGMENT_DATA_DEFAULT = "Data"; - /** The default bank segment. */ - public static final Long SEGMENT_BANK_DEFAULT = -1L; private String name; private HashMap symbols; diff --git a/src/main/java/dk/camelot64/kickc/parser/CParser.java b/src/main/java/dk/camelot64/kickc/parser/CParser.java index 84832cf36..d15b8d800 100644 --- a/src/main/java/dk/camelot64/kickc/parser/CParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/CParser.java @@ -107,11 +107,11 @@ public class CParser { */ public static final String PRAGMA_RESOURCE = "resource"; /** - * #pragma bank(...) changes the current bank. Functionsand variables will be placed in the specified bank. + * #pragma bank(...) changes the current bank. Functions and variables will be placed in the specified bank. */ public static final String PRAGMA_BANK = "bank"; /** - * #pragma nobank Changes the current bank to the default bank. + * #pragma nobank Changes the current bank to the default/common bank. */ public static final String PRAGMA_NOBANK = "nobank"; diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index b1a939feb..9d4cf7357 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -16,7 +16,6 @@ import dk.camelot64.kickc.parser.KickCParserBaseVisitor; import dk.camelot64.kickc.passes.utils.SizeOfConstants; import org.antlr.v4.runtime.BufferedTokenStream; import org.antlr.v4.runtime.ParserRuleContext; -import org.antlr.v4.runtime.RuleContext; import org.antlr.v4.runtime.Token; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.TerminalNode; @@ -295,12 +294,14 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor 0) { asm.addComment(signature.toString(), false); } - // Banking information of the procedure. - Bank bank = procedure.getBankLocation(); - if(bank != null) { - StringBuilder signatureBank = new StringBuilder(); - signatureBank.append(" " + bank.toString()); // This procedure is in a bank and in a banking area. - asm.addComment(signatureBank.toString(), false); + if(procedure.getBank() != null) { + asm.addComment(" " + procedure.getBank(), false); } } @@ -896,6 +891,7 @@ public class Pass4CodeGeneration { } } else if (Procedure.CallingConvention.PHI_CALL.equals(toProcedure.getCallingConvention())) { // Generate PHI transition + boolean generatedPhis = false; if (genCallPhiEntry) { ControlFlowBlock callSuccessor = getGraph().getCallSuccessor(block); if (callSuccessor != null && callSuccessor.hasPhiBlock()) { @@ -904,17 +900,21 @@ public class Pass4CodeGeneration { throw new InternalError("Error! JSR transition already generated. Must modify PhiTransitions code to ensure this does not happen."); } genBlockPhiTransition(asm, block, callSuccessor, block.getScope()); + generatedPhis = true; } } - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked(new Procedure.CallingDistance(fromProcedure, toProcedure),"phi", call.getProcedure().getFullName(), program), program); - } else if (Procedure.CallingConvention.STACK_CALL.equals(toProcedure.getCallingConvention())) { - Boolean toIsBanked = toProcedure.isDeclaredBanked(); - Long fromBank = fromProcedure.getBank(); - Long toBank = toProcedure.getBank(); - if(toIsBanked && fromBank != toBank) { - throw new CompileError("Stack Call procedure not supported in banked mode " + toProcedure.toString(program)); - } else { + final Procedure.CallingDistance callingDistance = new Procedure.CallingDistance(fromProcedure, toProcedure); + if(Procedure.CallingProximity.NEAR.equals(callingDistance.getProximity())) { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); + } else { + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked(callingDistance,"phi", call.getProcedure().getFullName(), program), program); + } + } else if (Procedure.CallingConvention.STACK_CALL.equals(toProcedure.getCallingConvention())) { + final Procedure.CallingDistance callingDistance = new Procedure.CallingDistance(fromProcedure, toProcedure); + if(Procedure.CallingProximity.NEAR.equals(callingDistance.getProximity())) { + asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); + } else { + throw new CompileError("Stack Call procedure not supported in banked mode " + toProcedure.toString(program)); } } } else if (statement instanceof StatementCallExecute) { @@ -923,14 +923,14 @@ public class Pass4CodeGeneration { if(procedureRef != null) { ProgramScope scope = getScope(); Procedure toProcedure = scope.getProcedure(procedureRef); - Procedure fromProcedure = block.getProcedure(this.program); // We obtain from where the procedure is called, to validate the bank equality. - RValue procedureRVal = call.getProcedureRVal(); - // Same as PHI - if (toProcedure.isDeclaredBanked() && fromProcedure.getBank() != toProcedure.getBank()) { - throw new CompileError("Stack Call procedure not supported in banked mode " + toProcedure.toString(program)); - } else { + Procedure fromProcedure = block.getProcedure(this.program); + final Procedure.CallingDistance callingDistance = new Procedure.CallingDistance(fromProcedure, toProcedure); + if(Procedure.CallingProximity.NEAR.equals(callingDistance.getProximity())) { AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); + } else { + throw new CompileError("Stack Call procedure not supported in banked mode " + toProcedure.toString(program)); } + RValue procedureRVal = call.getProcedureRVal(); if (!(procedureRVal instanceof ProcedureRef)) { asm.getCurrentChunk().setClobberOverwrite(CpuClobber.CLOBBER_ALL); } diff --git a/src/test/ref/address-0.log b/src/test/ref/address-0.log index d0c3f50bd..46f28583e 100644 --- a/src/test/ref/address-0.log +++ b/src/test/ref/address-0.log @@ -152,7 +152,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -241,7 +241,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return diff --git a/src/test/ref/address-2.log b/src/test/ref/address-2.log index 850a4e045..635b2d637 100644 --- a/src/test/ref/address-2.log +++ b/src/test/ref/address-2.log @@ -152,7 +152,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -241,7 +241,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return diff --git a/src/test/ref/address-5.log b/src/test/ref/address-5.log index 89039d32b..ec12d868c 100644 --- a/src/test/ref/address-5.log +++ b/src/test/ref/address-5.log @@ -181,7 +181,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -194,7 +194,7 @@ main: { // [5] print::ch = 'c' -- vbuz1=vbuc1 lda #'c' sta.z print.ch - // [6] call print -- call_phi_near + // [6] call print jsr print jmp __b1 // main::@1 @@ -202,7 +202,7 @@ main: { // [7] print::ch = 'm' -- vbuz1=vbuc1 lda #'m' sta.z print.ch - // [8] call print -- call_phi_near + // [8] call print jsr print jmp __b2 // main::@2 @@ -210,7 +210,7 @@ main: { // [9] print::ch = 'l' -- vbuz1=vbuc1 lda #'l' sta.z print.ch - // [10] call print -- call_phi_near + // [10] call print jsr print jmp __breturn // main::@return @@ -295,7 +295,7 @@ __start: { sta.z idx // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return @@ -307,21 +307,21 @@ main: { // [5] print::ch = 'c' -- vbuz1=vbuc1 lda #'c' sta.z print.ch - // [6] call print -- call_phi_near + // [6] call print jsr print // main::@1 // print('m') // [7] print::ch = 'm' -- vbuz1=vbuc1 lda #'m' sta.z print.ch - // [8] call print -- call_phi_near + // [8] call print jsr print // main::@2 // print('l') // [9] print::ch = 'l' -- vbuz1=vbuc1 lda #'l' sta.z print.ch - // [10] call print -- call_phi_near + // [10] call print jsr print // main::@return // } diff --git a/src/test/ref/address-6.log b/src/test/ref/address-6.log index 7b69f56e2..40634ffb4 100644 --- a/src/test/ref/address-6.log +++ b/src/test/ref/address-6.log @@ -181,7 +181,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -194,7 +194,7 @@ main: { // [5] print::ch = 'c' -- vbuz1=vbuc1 lda #'c' sta.z print.ch - // [6] call print -- call_phi_near + // [6] call print jsr print jmp __b1 // main::@1 @@ -202,7 +202,7 @@ main: { // [7] print::ch = 'm' -- vbuz1=vbuc1 lda #'m' sta.z print.ch - // [8] call print -- call_phi_near + // [8] call print jsr print jmp __b2 // main::@2 @@ -210,7 +210,7 @@ main: { // [9] print::ch = 'l' -- vbuz1=vbuc1 lda #'l' sta.z print.ch - // [10] call print -- call_phi_near + // [10] call print jsr print jmp __breturn // main::@return @@ -295,7 +295,7 @@ __start: { sta idx // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return @@ -307,21 +307,21 @@ main: { // [5] print::ch = 'c' -- vbuz1=vbuc1 lda #'c' sta.z print.ch - // [6] call print -- call_phi_near + // [6] call print jsr print // main::@1 // print('m') // [7] print::ch = 'm' -- vbuz1=vbuc1 lda #'m' sta.z print.ch - // [8] call print -- call_phi_near + // [8] call print jsr print // main::@2 // print('l') // [9] print::ch = 'l' -- vbuz1=vbuc1 lda #'l' sta.z print.ch - // [10] call print -- call_phi_near + // [10] call print jsr print // main::@return // } diff --git a/src/test/ref/address-of-1.log b/src/test/ref/address-of-1.log index d3c427e55..9ccbe545a 100644 --- a/src/test/ref/address-of-1.log +++ b/src/test/ref/address-of-1.log @@ -259,7 +259,7 @@ main: { sta.z setByte.ptr lda #>b1 sta.z setByte.ptr+1 - // [12] phi setByte::b#3 = 'c' [phi:main->setByte#1] -- call_phi_near + // [12] phi setByte::b#3 = 'c' [phi:main->setByte#1] -- vbuxx=vbuc1 ldx #'c' jsr setByte // [4] phi from main to main::@1 [phi:main->main::@1] @@ -275,7 +275,7 @@ main: { sta.z setByte.ptr lda #>b2 sta.z setByte.ptr+1 - // [12] phi setByte::b#3 = 'm' [phi:main::@1->setByte#1] -- call_phi_near + // [12] phi setByte::b#3 = 'm' [phi:main::@1->setByte#1] -- vbuxx=vbuc1 ldx #'m' jsr setByte // [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -291,7 +291,7 @@ main: { sta.z setByte.ptr lda #>b3 sta.z setByte.ptr+1 - // [12] phi setByte::b#3 = 'l' [phi:main::@2->setByte#1] -- call_phi_near + // [12] phi setByte::b#3 = 'l' [phi:main::@2->setByte#1] -- vbuxx=vbuc1 ldx #'l' jsr setByte jmp __b3 @@ -410,7 +410,7 @@ main: { sta.z setByte.ptr lda #>b1 sta.z setByte.ptr+1 - // [12] phi setByte::b#3 = 'c' [phi:main->setByte#1] -- call_phi_near + // [12] phi setByte::b#3 = 'c' [phi:main->setByte#1] -- vbuxx=vbuc1 ldx #'c' jsr setByte // [4] phi from main to main::@1 [phi:main->main::@1] @@ -423,7 +423,7 @@ main: { sta.z setByte.ptr lda #>b2 sta.z setByte.ptr+1 - // [12] phi setByte::b#3 = 'm' [phi:main::@1->setByte#1] -- call_phi_near + // [12] phi setByte::b#3 = 'm' [phi:main::@1->setByte#1] -- vbuxx=vbuc1 ldx #'m' jsr setByte // [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -436,7 +436,7 @@ main: { sta.z setByte.ptr lda #>b3 sta.z setByte.ptr+1 - // [12] phi setByte::b#3 = 'l' [phi:main::@2->setByte#1] -- call_phi_near + // [12] phi setByte::b#3 = 'l' [phi:main::@2->setByte#1] -- vbuxx=vbuc1 ldx #'l' jsr setByte // main::@3 diff --git a/src/test/ref/address-of-2.log b/src/test/ref/address-of-2.log index deb4adb98..badb057de 100644 --- a/src/test/ref/address-of-2.log +++ b/src/test/ref/address-of-2.log @@ -367,7 +367,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -417,7 +417,7 @@ main: { // [15] *(main::SCREEN2+3) = *main::ptr -- _deref_pbuc1=_deref_pbuc2 lda.z ptr sta SCREEN2+3 - // [16] call setv -- call_phi_near + // [16] call setv // Set value directly in a call jsr setv jmp __b1 @@ -429,7 +429,7 @@ main: { // [18] *(main::SCREEN2+4) = *main::ptr -- _deref_pbuc1=_deref_pbuc2 lda.z ptr sta SCREEN2+4 - // [19] call setp -- call_phi_near + // [19] call setp // Set value through pointer in a call jsr setp jmp __b2 @@ -545,7 +545,7 @@ __start: { sta.z val // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return @@ -603,7 +603,7 @@ main: { lda.z ptr sta SCREEN2+3 // setv(4) - // [16] call setv -- call_phi_near + // [16] call setv // Set value directly in a call jsr setv // main::@1 @@ -616,7 +616,7 @@ main: { lda.z ptr sta SCREEN2+4 // setp(ptr, 5) - // [19] call setp -- call_phi_near + // [19] call setp // Set value through pointer in a call jsr setp // main::@2 diff --git a/src/test/ref/address-of-3.log b/src/test/ref/address-of-3.log index 5452e93f9..f06b24e72 100644 --- a/src/test/ref/address-of-3.log +++ b/src/test/ref/address-of-3.log @@ -332,7 +332,7 @@ main: { sta.z print.p lda #>VALS sta.z print.p+1 - // [11] phi idx#13 = 0 [phi:main->print#1] -- call_phi_near + // [11] phi idx#13 = 0 [phi:main->print#1] -- vbuz1=vbuc1 lda #0 sta.z idx jsr print @@ -349,7 +349,7 @@ main: { sta.z print.p lda #>VALS+1*SIZEOF_INT sta.z print.p+1 - // [11] phi idx#13 = idx#14 [phi:main::@2->print#1] -- call_phi_near + // [11] phi idx#13 = idx#14 [phi:main::@2->print#1] -- register_copy jsr print // [4] phi from main::@2 to main::@1 [phi:main::@2->main::@1] __b1_from___b2: @@ -377,7 +377,7 @@ main: { // [11] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [11] phi print::p#3 = print::p#2 [phi:main::@1->print#0] -- register_copy - // [11] phi idx#13 = idx#14 [phi:main::@1->print#1] -- call_phi_near + // [11] phi idx#13 = idx#14 [phi:main::@1->print#1] -- register_copy jsr print jmp __b3 // main::@3 @@ -499,7 +499,7 @@ main: { sta.z print.p lda #>VALS sta.z print.p+1 - // [11] phi idx#13 = 0 [phi:main->print#1] -- call_phi_near + // [11] phi idx#13 = 0 [phi:main->print#1] -- vbuz1=vbuc1 lda #0 sta.z idx jsr print @@ -513,7 +513,7 @@ main: { sta.z print.p lda #>VALS+1*SIZEOF_INT sta.z print.p+1 - // [11] phi idx#13 = idx#14 [phi:main::@2->print#1] -- call_phi_near + // [11] phi idx#13 = idx#14 [phi:main::@2->print#1] -- register_copy jsr print // [4] phi from main::@2 to main::@1 [phi:main::@2->main::@1] // [4] phi main::i#2 = 2 [phi:main::@2->main::@1#0] -- vbuz1=vbuc1 @@ -538,7 +538,7 @@ main: { // [7] call print // [11] phi from main::@1 to print [phi:main::@1->print] // [11] phi print::p#3 = print::p#2 [phi:main::@1->print#0] -- register_copy - // [11] phi idx#13 = idx#14 [phi:main::@1->print#1] -- call_phi_near + // [11] phi idx#13 = idx#14 [phi:main::@1->print#1] -- register_copy jsr print // main::@3 // for(char i:2..3) diff --git a/src/test/ref/array-16bit-lookup.log b/src/test/ref/array-16bit-lookup.log index 9c1c39308..4425fa5ea 100644 --- a/src/test/ref/array-16bit-lookup.log +++ b/src/test/ref/array-16bit-lookup.log @@ -313,7 +313,7 @@ main: { sta.z getValue.index lda #0 sta.z getValue.index+1 - // [3] call getValue -- call_phi_near + // [3] call getValue jsr getValue // [4] getValue::return#0 = getValue::return#1 jmp __b2 @@ -451,7 +451,7 @@ main: { sta.z getValue.index lda #0 sta.z getValue.index+1 - // [3] call getValue -- call_phi_near + // [3] call getValue jsr getValue // [4] getValue::return#0 = getValue::return#1 // main::@2 diff --git a/src/test/ref/asm-mnemonic-names.log b/src/test/ref/asm-mnemonic-names.log index 7c776fad2..e2456e540 100644 --- a/src/test/ref/asm-mnemonic-names.log +++ b/src/test/ref/asm-mnemonic-names.log @@ -135,7 +135,7 @@ main: { // [0] *lda = main::jmp -- _deref_pbuc1=vbuc2 lda #jmp sta lda - // [1] call bne -- call_phi_near + // [1] call bne jsr bne jmp __b1 // main::@1 @@ -215,7 +215,7 @@ main: { lda #jmp sta lda // bne(jmp) - // [1] call bne -- call_phi_near + // [1] call bne jsr bne // main::@1 // asm diff --git a/src/test/ref/assignment-compound.log b/src/test/ref/assignment-compound.log index 9c2927c8f..fea93d4d2 100644 --- a/src/test/ref/assignment-compound.log +++ b/src/test/ref/assignment-compound.log @@ -726,7 +726,7 @@ main: { test_from_main: // [23] phi test::i#11 = 0 [phi:main->test#0] -- vbuxx=vbuc1 ldx #0 - // [23] phi test::a#11 = 3 [phi:main->test#1] -- call_phi_near + // [23] phi test::a#11 = 3 [phi:main->test#1] -- vbuz1=vbuc1 lda #3 sta.z test.a jsr test @@ -741,7 +741,7 @@ main: { test_from___b1: // [23] phi test::i#11 = 1 [phi:main::@1->test#0] -- vbuxx=vbuc1 ldx #1 - // [23] phi test::a#11 = 3+1 [phi:main::@1->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1 [phi:main::@1->test#1] -- vbuz1=vbuc1 lda #3+1 sta.z test.a jsr test @@ -756,7 +756,7 @@ main: { test_from___b2: // [23] phi test::i#11 = 2 [phi:main::@2->test#0] -- vbuxx=vbuc1 ldx #2 - // [23] phi test::a#11 = 3+1-1 [phi:main::@2->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1 [phi:main::@2->test#1] -- vbuz1=vbuc1 lda #3+1-1 sta.z test.a jsr test @@ -771,7 +771,7 @@ main: { test_from___b3: // [23] phi test::i#11 = 3 [phi:main::@3->test#0] -- vbuxx=vbuc1 ldx #3 - // [23] phi test::a#11 = 3+1-1*6 [phi:main::@3->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6 [phi:main::@3->test#1] -- vbuz1=vbuc1 lda #(3+1-1)*6 sta.z test.a jsr test @@ -786,7 +786,7 @@ main: { test_from___b4: // [23] phi test::i#11 = 4 [phi:main::@4->test#0] -- vbuxx=vbuc1 ldx #4 - // [23] phi test::a#11 = 3+1-1*6/2 [phi:main::@4->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2 [phi:main::@4->test#1] -- vbuz1=vbuc1 lda #(3+1-1)*6/2 sta.z test.a jsr test @@ -801,7 +801,7 @@ main: { test_from___b5: // [23] phi test::i#11 = 5 [phi:main::@5->test#0] -- vbuxx=vbuc1 ldx #5 - // [23] phi test::a#11 = 3+1-1*6/2&2-1 [phi:main::@5->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2&2-1 [phi:main::@5->test#1] -- vbuz1=vbuc1 lda #(3+1-1)*6/2&2-1 sta.z test.a jsr test @@ -816,7 +816,7 @@ main: { test_from___b6: // [23] phi test::i#11 = 6 [phi:main::@6->test#0] -- vbuxx=vbuc1 ldx #6 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2 [phi:main::@6->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2 [phi:main::@6->test#1] -- vbuz1=vbuc1 lda #((3+1-1)*6/2&2-1)<<2 sta.z test.a jsr test @@ -831,7 +831,7 @@ main: { test_from___b7: // [23] phi test::i#11 = 7 [phi:main::@7->test#0] -- vbuxx=vbuc1 ldx #7 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1 [phi:main::@7->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1 [phi:main::@7->test#1] -- vbuz1=vbuc1 lda #((3+1-1)*6/2&2-1)<<2>>1 sta.z test.a jsr test @@ -846,7 +846,7 @@ main: { test_from___b8: // [23] phi test::i#11 = 8 [phi:main::@8->test#0] -- vbuxx=vbuc1 ldx #8 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6 [phi:main::@8->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6 [phi:main::@8->test#1] -- vbuz1=vbuc1 lda #((3+1-1)*6/2&2-1)<<2>>1^6 sta.z test.a jsr test @@ -861,7 +861,7 @@ main: { test_from___b9: // [23] phi test::i#11 = 9 [phi:main::@9->test#0] -- vbuxx=vbuc1 ldx #9 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1 [phi:main::@9->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1 [phi:main::@9->test#1] -- vbuz1=vbuc1 lda #((3+1-1)*6/2&2-1)<<2>>1^6|1 sta.z test.a jsr test @@ -876,7 +876,7 @@ main: { test_from___b10: // [23] phi test::i#11 = $a [phi:main::@10->test#0] -- vbuxx=vbuc1 ldx #$a - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1&1 [phi:main::@10->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1&1 [phi:main::@10->test#1] -- vbuz1=vbuc1 lda #(((3+1-1)*6/2&2-1)<<2>>1^6|1)&1 sta.z test.a jsr test @@ -1027,7 +1027,7 @@ main: { // [23] phi from main to test [phi:main->test] // [23] phi test::i#11 = 0 [phi:main->test#0] -- vbuxx=vbuc1 ldx #0 - // [23] phi test::a#11 = 3 [phi:main->test#1] -- call_phi_near + // [23] phi test::a#11 = 3 [phi:main->test#1] -- vbuz1=vbuc1 lda #3 sta.z test.a jsr test @@ -1039,7 +1039,7 @@ main: { // [23] phi from main::@1 to test [phi:main::@1->test] // [23] phi test::i#11 = 1 [phi:main::@1->test#0] -- vbuxx=vbuc1 ldx #1 - // [23] phi test::a#11 = 3+1 [phi:main::@1->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1 [phi:main::@1->test#1] -- vbuz1=vbuc1 lda #3+1 sta.z test.a jsr test @@ -1051,7 +1051,7 @@ main: { // [23] phi from main::@2 to test [phi:main::@2->test] // [23] phi test::i#11 = 2 [phi:main::@2->test#0] -- vbuxx=vbuc1 ldx #2 - // [23] phi test::a#11 = 3+1-1 [phi:main::@2->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1 [phi:main::@2->test#1] -- vbuz1=vbuc1 lda #3+1-1 sta.z test.a jsr test @@ -1063,7 +1063,7 @@ main: { // [23] phi from main::@3 to test [phi:main::@3->test] // [23] phi test::i#11 = 3 [phi:main::@3->test#0] -- vbuxx=vbuc1 ldx #3 - // [23] phi test::a#11 = 3+1-1*6 [phi:main::@3->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6 [phi:main::@3->test#1] -- vbuz1=vbuc1 lda #(3+1-1)*6 sta.z test.a jsr test @@ -1075,7 +1075,7 @@ main: { // [23] phi from main::@4 to test [phi:main::@4->test] // [23] phi test::i#11 = 4 [phi:main::@4->test#0] -- vbuxx=vbuc1 ldx #4 - // [23] phi test::a#11 = 3+1-1*6/2 [phi:main::@4->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2 [phi:main::@4->test#1] -- vbuz1=vbuc1 lda #(3+1-1)*6/2 sta.z test.a jsr test @@ -1087,7 +1087,7 @@ main: { // [23] phi from main::@5 to test [phi:main::@5->test] // [23] phi test::i#11 = 5 [phi:main::@5->test#0] -- vbuxx=vbuc1 ldx #5 - // [23] phi test::a#11 = 3+1-1*6/2&2-1 [phi:main::@5->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2&2-1 [phi:main::@5->test#1] -- vbuz1=vbuc1 lda #(3+1-1)*6/2&2-1 sta.z test.a jsr test @@ -1099,7 +1099,7 @@ main: { // [23] phi from main::@6 to test [phi:main::@6->test] // [23] phi test::i#11 = 6 [phi:main::@6->test#0] -- vbuxx=vbuc1 ldx #6 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2 [phi:main::@6->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2 [phi:main::@6->test#1] -- vbuz1=vbuc1 lda #((3+1-1)*6/2&2-1)<<2 sta.z test.a jsr test @@ -1111,7 +1111,7 @@ main: { // [23] phi from main::@7 to test [phi:main::@7->test] // [23] phi test::i#11 = 7 [phi:main::@7->test#0] -- vbuxx=vbuc1 ldx #7 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1 [phi:main::@7->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1 [phi:main::@7->test#1] -- vbuz1=vbuc1 lda #((3+1-1)*6/2&2-1)<<2>>1 sta.z test.a jsr test @@ -1123,7 +1123,7 @@ main: { // [23] phi from main::@8 to test [phi:main::@8->test] // [23] phi test::i#11 = 8 [phi:main::@8->test#0] -- vbuxx=vbuc1 ldx #8 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6 [phi:main::@8->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6 [phi:main::@8->test#1] -- vbuz1=vbuc1 lda #((3+1-1)*6/2&2-1)<<2>>1^6 sta.z test.a jsr test @@ -1135,7 +1135,7 @@ main: { // [23] phi from main::@9 to test [phi:main::@9->test] // [23] phi test::i#11 = 9 [phi:main::@9->test#0] -- vbuxx=vbuc1 ldx #9 - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1 [phi:main::@9->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1 [phi:main::@9->test#1] -- vbuz1=vbuc1 lda #((3+1-1)*6/2&2-1)<<2>>1^6|1 sta.z test.a jsr test @@ -1147,7 +1147,7 @@ main: { // [23] phi from main::@10 to test [phi:main::@10->test] // [23] phi test::i#11 = $a [phi:main::@10->test#0] -- vbuxx=vbuc1 ldx #$a - // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1&1 [phi:main::@10->test#1] -- call_phi_near + // [23] phi test::a#11 = 3+1-1*6/2&2-1<<2>>1^6|1&1 [phi:main::@10->test#1] -- vbuz1=vbuc1 lda #(((3+1-1)*6/2&2-1)<<2>>1^6|1)&1 sta.z test.a jsr test diff --git a/src/test/ref/atarixl-md5b.log b/src/test/ref/atarixl-md5b.log index 281f695b8..f8b947650 100644 --- a/src/test/ref/atarixl-md5b.log +++ b/src/test/ref/atarixl-md5b.log @@ -903,7 +903,7 @@ __start: { // __start::@1 __b1: // [4] call main - // [6] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [6] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -940,7 +940,7 @@ main: { // main::@3 __b3: // [10] call md5 - // [14] phi from main::@3 to md5 [phi:main::@3->md5] -- call_phi_near + // [14] phi from main::@3 to md5 [phi:main::@3->md5] md5_from___b3: jsr md5 // [11] phi from main::@3 main::@4 to main::@4 [phi:main::@3/main::@4->main::@4] @@ -1012,7 +1012,7 @@ md5: { // [36] phi print::c#2 = print::c#0 [phi:md5::@2->print#0] -- register_copy // [36] phi print::b#2 = print::b#0 [phi:md5::@2->print#1] -- register_copy // [36] phi print::a#2 = print::a#0 [phi:md5::@2->print#2] -- register_copy - // [36] phi print::print321_l#0 = print::i#0 [phi:md5::@2->print#3] -- call_phi_near + // [36] phi print::print321_l#0 = print::i#0 [phi:md5::@2->print#3] -- register_copy jsr print jmp __b5 // md5::@5 @@ -1049,7 +1049,7 @@ md5: { // [36] phi print::c#2 = print::c#1 [phi:md5::@3->print#0] -- register_copy // [36] phi print::b#2 = print::b#1 [phi:md5::@3->print#1] -- register_copy // [36] phi print::a#2 = print::a#1 [phi:md5::@3->print#2] -- register_copy - // [36] phi print::print321_l#0 = print::i#1 [phi:md5::@3->print#3] -- call_phi_near + // [36] phi print::print321_l#0 = print::i#1 [phi:md5::@3->print#3] -- register_copy jsr print jmp __b6 // md5::@6 @@ -1400,7 +1400,7 @@ __start: { // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [4] call main - // [6] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [6] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [5] return @@ -1431,7 +1431,7 @@ main: { // main::@3 // md5() // [10] call md5 - // [14] phi from main::@3 to md5 [phi:main::@3->md5] -- call_phi_near + // [14] phi from main::@3 to md5 [phi:main::@3->md5] jsr md5 // [11] phi from main::@3 main::@4 to main::@4 [phi:main::@3/main::@4->main::@4] // main::@4 @@ -1498,7 +1498,7 @@ md5: { // [36] phi print::c#2 = print::c#0 [phi:md5::@2->print#0] -- register_copy // [36] phi print::b#2 = print::b#0 [phi:md5::@2->print#1] -- register_copy // [36] phi print::a#2 = print::a#0 [phi:md5::@2->print#2] -- register_copy - // [36] phi print::print321_l#0 = print::i#0 [phi:md5::@2->print#3] -- call_phi_near + // [36] phi print::print321_l#0 = print::i#0 [phi:md5::@2->print#3] -- register_copy jsr print // md5::@5 // i&1 @@ -1530,7 +1530,7 @@ md5: { // [36] phi print::c#2 = print::c#1 [phi:md5::@3->print#0] -- register_copy // [36] phi print::b#2 = print::b#1 [phi:md5::@3->print#1] -- register_copy // [36] phi print::a#2 = print::a#1 [phi:md5::@3->print#2] -- register_copy - // [36] phi print::print321_l#0 = print::i#1 [phi:md5::@3->print#3] -- call_phi_near + // [36] phi print::print321_l#0 = print::i#1 [phi:md5::@3->print#3] -- register_copy jsr print // md5::@6 // for(char i = 0; i<4; i++) diff --git a/src/test/ref/bitmap-circle-2.log b/src/test/ref/bitmap-circle-2.log index 9cda2ff11..68efa05eb 100644 --- a/src/test/ref/bitmap-circle-2.log +++ b/src/test/ref/bitmap-circle-2.log @@ -1318,7 +1318,7 @@ main: { sta.z fill.size lda #>$28*$19*8 sta.z fill.size+1 - // [13] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- call_phi_near + // [13] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- pbuz1=pbuc1 lda #BITMAP @@ -1339,7 +1339,7 @@ main: { sta.z fill.size lda #>$28*$19 sta.z fill.size+1 - // [13] phi fill::addr#0 = SCREEN [phi:main::@4->fill#2] -- call_phi_near + // [13] phi fill::addr#0 = SCREEN [phi:main::@4->fill#2] -- pbuz1=pbuc1 lda #SCREEN @@ -1390,7 +1390,7 @@ main: { sta.z circle.r lda.z i+1 sta.z circle.r+1 - // [11] call circle -- call_phi_near + // [11] call circle jsr circle jmp __b6 // main::@6 @@ -1584,7 +1584,7 @@ circle: { // [60] phi from circle::@4 to plot [phi:circle::@4->plot] plot_from___b4: // [60] phi plot::y#8 = plot::y#0 [phi:circle::@4->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- register_copy jsr plot jmp __b6 // circle::@6 @@ -1609,7 +1609,7 @@ circle: { // [60] phi from circle::@6 to plot [phi:circle::@6->plot] plot_from___b6: // [60] phi plot::y#8 = plot::y#1 [phi:circle::@6->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- register_copy jsr plot jmp __b7 // circle::@7 @@ -1634,7 +1634,7 @@ circle: { // [60] phi from circle::@7 to plot [phi:circle::@7->plot] plot_from___b7: // [60] phi plot::y#8 = plot::y#2 [phi:circle::@7->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- register_copy jsr plot jmp __b8 // circle::@8 @@ -1659,7 +1659,7 @@ circle: { // [60] phi from circle::@8 to plot [phi:circle::@8->plot] plot_from___b8: // [60] phi plot::y#8 = plot::y#3 [phi:circle::@8->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- register_copy jsr plot jmp __b9 // circle::@9 @@ -1684,7 +1684,7 @@ circle: { // [60] phi from circle::@9 to plot [phi:circle::@9->plot] plot_from___b9: // [60] phi plot::y#8 = plot::y#4 [phi:circle::@9->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- register_copy jsr plot jmp __b10 // circle::@10 @@ -1709,7 +1709,7 @@ circle: { // [60] phi from circle::@10 to plot [phi:circle::@10->plot] plot_from___b10: // [60] phi plot::y#8 = plot::y#5 [phi:circle::@10->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- register_copy jsr plot jmp __b11 // circle::@11 @@ -1734,7 +1734,7 @@ circle: { // [60] phi from circle::@11 to plot [phi:circle::@11->plot] plot_from___b11: // [60] phi plot::y#8 = plot::y#6 [phi:circle::@11->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- register_copy jsr plot jmp __b12 // circle::@12 @@ -1759,7 +1759,7 @@ circle: { // [60] phi from circle::@12 to plot [phi:circle::@12->plot] plot_from___b12: // [60] phi plot::y#8 = plot::y#7 [phi:circle::@12->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- register_copy jsr plot jmp __b13 // circle::@13 @@ -2189,7 +2189,7 @@ main: { sta.z fill.size lda #>$28*$19*8 sta.z fill.size+1 - // [13] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- call_phi_near + // [13] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- pbuz1=pbuc1 lda #BITMAP @@ -2207,7 +2207,7 @@ main: { sta.z fill.size lda #>$28*$19 sta.z fill.size+1 - // [13] phi fill::addr#0 = SCREEN [phi:main::@4->fill#2] -- call_phi_near + // [13] phi fill::addr#0 = SCREEN [phi:main::@4->fill#2] -- pbuz1=pbuc1 lda #SCREEN @@ -2256,7 +2256,7 @@ main: { sta.z circle.r lda.z i+1 sta.z circle.r+1 - // [11] call circle -- call_phi_near + // [11] call circle jsr circle // main::@6 // i += 5 @@ -2450,7 +2450,7 @@ circle: { // [34] call plot // [60] phi from circle::@4 to plot [phi:circle::@4->plot] // [60] phi plot::y#8 = plot::y#0 [phi:circle::@4->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- register_copy jsr plot // circle::@6 // plot(xc-x,yc-y) @@ -2473,7 +2473,7 @@ circle: { // [37] call plot // [60] phi from circle::@6 to plot [phi:circle::@6->plot] // [60] phi plot::y#8 = plot::y#1 [phi:circle::@6->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- register_copy jsr plot // circle::@7 // plot(xc+x,yc+y) @@ -2496,7 +2496,7 @@ circle: { // [40] call plot // [60] phi from circle::@7 to plot [phi:circle::@7->plot] // [60] phi plot::y#8 = plot::y#2 [phi:circle::@7->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- register_copy jsr plot // circle::@8 // plot(xc-x,yc+y) @@ -2519,7 +2519,7 @@ circle: { // [43] call plot // [60] phi from circle::@8 to plot [phi:circle::@8->plot] // [60] phi plot::y#8 = plot::y#3 [phi:circle::@8->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- register_copy jsr plot // circle::@9 // plot(xc+y,yc-x) @@ -2542,7 +2542,7 @@ circle: { // [46] call plot // [60] phi from circle::@9 to plot [phi:circle::@9->plot] // [60] phi plot::y#8 = plot::y#4 [phi:circle::@9->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- register_copy jsr plot // circle::@10 // plot(xc-y,yc-x) @@ -2565,7 +2565,7 @@ circle: { // [49] call plot // [60] phi from circle::@10 to plot [phi:circle::@10->plot] // [60] phi plot::y#8 = plot::y#5 [phi:circle::@10->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- register_copy jsr plot // circle::@11 // plot(xc+y,yc+x) @@ -2588,7 +2588,7 @@ circle: { // [52] call plot // [60] phi from circle::@11 to plot [phi:circle::@11->plot] // [60] phi plot::y#8 = plot::y#6 [phi:circle::@11->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- register_copy jsr plot // circle::@12 // plot(xc-y,yc+x) @@ -2611,7 +2611,7 @@ circle: { // [55] call plot // [60] phi from circle::@12 to plot [phi:circle::@12->plot] // [60] phi plot::y#8 = plot::y#7 [phi:circle::@12->plot#0] -- register_copy - // [60] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- call_phi_near + // [60] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- register_copy jsr plot // circle::@13 // for(int x = 0; x <= y; x ++) diff --git a/src/test/ref/bitmap-circle.log b/src/test/ref/bitmap-circle.log index ce278821e..0e5befc1a 100644 --- a/src/test/ref/bitmap-circle.log +++ b/src/test/ref/bitmap-circle.log @@ -1192,7 +1192,7 @@ main: { sta.z fill.size lda #>$28*$19*8 sta.z fill.size+1 - // [9] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- call_phi_near + // [9] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- pbuz1=pbuc1 lda #BITMAP @@ -1213,7 +1213,7 @@ main: { sta.z fill.size lda #>$28*$19 sta.z fill.size+1 - // [9] phi fill::addr#0 = SCREEN [phi:main::@2->fill#2] -- call_phi_near + // [9] phi fill::addr#0 = SCREEN [phi:main::@2->fill#2] -- pbuz1=pbuc1 lda #SCREEN @@ -1232,7 +1232,7 @@ main: { lda #(SCREEN&$3fff)/$40|(BITMAP&$3fff)/$400 sta VICII_MEMORY // [7] call circle - // [16] phi from main::@3 to circle [phi:main::@3->circle] -- call_phi_near + // [16] phi from main::@3 to circle [phi:main::@3->circle] circle_from___b3: jsr circle // [8] phi from main::@1 main::@3 to main::@1 [phi:main::@1/main::@3->main::@1] @@ -1411,7 +1411,7 @@ circle: { // [55] phi from circle::@4 to plot [phi:circle::@4->plot] plot_from___b4: // [55] phi plot::y#8 = plot::y#0 [phi:circle::@4->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- register_copy jsr plot jmp __b6 // circle::@6 @@ -1436,7 +1436,7 @@ circle: { // [55] phi from circle::@6 to plot [phi:circle::@6->plot] plot_from___b6: // [55] phi plot::y#8 = plot::y#1 [phi:circle::@6->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- register_copy jsr plot jmp __b7 // circle::@7 @@ -1461,7 +1461,7 @@ circle: { // [55] phi from circle::@7 to plot [phi:circle::@7->plot] plot_from___b7: // [55] phi plot::y#8 = plot::y#2 [phi:circle::@7->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- register_copy jsr plot jmp __b8 // circle::@8 @@ -1486,7 +1486,7 @@ circle: { // [55] phi from circle::@8 to plot [phi:circle::@8->plot] plot_from___b8: // [55] phi plot::y#8 = plot::y#3 [phi:circle::@8->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- register_copy jsr plot jmp __b9 // circle::@9 @@ -1511,7 +1511,7 @@ circle: { // [55] phi from circle::@9 to plot [phi:circle::@9->plot] plot_from___b9: // [55] phi plot::y#8 = plot::y#4 [phi:circle::@9->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- register_copy jsr plot jmp __b10 // circle::@10 @@ -1536,7 +1536,7 @@ circle: { // [55] phi from circle::@10 to plot [phi:circle::@10->plot] plot_from___b10: // [55] phi plot::y#8 = plot::y#5 [phi:circle::@10->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- register_copy jsr plot jmp __b11 // circle::@11 @@ -1561,7 +1561,7 @@ circle: { // [55] phi from circle::@11 to plot [phi:circle::@11->plot] plot_from___b11: // [55] phi plot::y#8 = plot::y#6 [phi:circle::@11->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- register_copy jsr plot jmp __b12 // circle::@12 @@ -1586,7 +1586,7 @@ circle: { // [55] phi from circle::@12 to plot [phi:circle::@12->plot] plot_from___b12: // [55] phi plot::y#8 = plot::y#7 [phi:circle::@12->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- register_copy jsr plot jmp __b13 // circle::@13 @@ -1955,7 +1955,7 @@ main: { sta.z fill.size lda #>$28*$19*8 sta.z fill.size+1 - // [9] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- call_phi_near + // [9] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- pbuz1=pbuc1 lda #BITMAP @@ -1973,7 +1973,7 @@ main: { sta.z fill.size lda #>$28*$19 sta.z fill.size+1 - // [9] phi fill::addr#0 = SCREEN [phi:main::@2->fill#2] -- call_phi_near + // [9] phi fill::addr#0 = SCREEN [phi:main::@2->fill#2] -- pbuz1=pbuc1 lda #SCREEN @@ -1994,7 +1994,7 @@ main: { sta VICII_MEMORY // circle(100,100,50) // [7] call circle - // [16] phi from main::@3 to circle [phi:main::@3->circle] -- call_phi_near + // [16] phi from main::@3 to circle [phi:main::@3->circle] jsr circle // [8] phi from main::@1 main::@3 to main::@1 [phi:main::@1/main::@3->main::@1] // main::@1 @@ -2169,7 +2169,7 @@ circle: { // [29] call plot // [55] phi from circle::@4 to plot [phi:circle::@4->plot] // [55] phi plot::y#8 = plot::y#0 [phi:circle::@4->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- register_copy jsr plot // circle::@6 // plot(xc-x,yc-y) @@ -2192,7 +2192,7 @@ circle: { // [32] call plot // [55] phi from circle::@6 to plot [phi:circle::@6->plot] // [55] phi plot::y#8 = plot::y#1 [phi:circle::@6->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- register_copy jsr plot // circle::@7 // plot(xc+x,yc+y) @@ -2215,7 +2215,7 @@ circle: { // [35] call plot // [55] phi from circle::@7 to plot [phi:circle::@7->plot] // [55] phi plot::y#8 = plot::y#2 [phi:circle::@7->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- register_copy jsr plot // circle::@8 // plot(xc-x,yc+y) @@ -2238,7 +2238,7 @@ circle: { // [38] call plot // [55] phi from circle::@8 to plot [phi:circle::@8->plot] // [55] phi plot::y#8 = plot::y#3 [phi:circle::@8->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- register_copy jsr plot // circle::@9 // plot(xc+y,yc-x) @@ -2261,7 +2261,7 @@ circle: { // [41] call plot // [55] phi from circle::@9 to plot [phi:circle::@9->plot] // [55] phi plot::y#8 = plot::y#4 [phi:circle::@9->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- register_copy jsr plot // circle::@10 // plot(xc-y,yc-x) @@ -2284,7 +2284,7 @@ circle: { // [44] call plot // [55] phi from circle::@10 to plot [phi:circle::@10->plot] // [55] phi plot::y#8 = plot::y#5 [phi:circle::@10->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- register_copy jsr plot // circle::@11 // plot(xc+y,yc+x) @@ -2307,7 +2307,7 @@ circle: { // [47] call plot // [55] phi from circle::@11 to plot [phi:circle::@11->plot] // [55] phi plot::y#8 = plot::y#6 [phi:circle::@11->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- register_copy jsr plot // circle::@12 // plot(xc-y,yc+x) @@ -2330,7 +2330,7 @@ circle: { // [50] call plot // [55] phi from circle::@12 to plot [phi:circle::@12->plot] // [55] phi plot::y#8 = plot::y#7 [phi:circle::@12->plot#0] -- register_copy - // [55] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- call_phi_near + // [55] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- register_copy jsr plot // circle::@13 // for(int x = 0; x <= y; x ++) diff --git a/src/test/ref/bitmap-line-anim-1.log b/src/test/ref/bitmap-line-anim-1.log index ec14390c3..a9ee08268 100644 --- a/src/test/ref/bitmap-line-anim-1.log +++ b/src/test/ref/bitmap-line-anim-1.log @@ -2327,7 +2327,7 @@ main: { lda #(SCREEN&$3fff)/$40|(BITMAP&$3fff)/$400 sta VICII_MEMORY // [4] call bitmap_init - // [13] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near + // [13] phi from main to bitmap_init [phi:main->bitmap_init] bitmap_init_from_main: jsr bitmap_init // [5] phi from main to main::@2 [phi:main->main::@2] @@ -2336,7 +2336,7 @@ main: { // main::@2 __b2: // [6] call bitmap_clear - // [35] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] -- call_phi_near + // [35] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] bitmap_clear_from___b2: jsr bitmap_clear // [7] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -2345,7 +2345,7 @@ main: { // main::@3 __b3: // [8] call init_screen - // [40] phi from main::@3 to init_screen [phi:main::@3->init_screen] -- call_phi_near + // [40] phi from main::@3 to init_screen [phi:main::@3->init_screen] init_screen_from___b3: jsr init_screen // [9] phi from main::@3 to main::@1 [phi:main::@3->main::@1] @@ -2361,7 +2361,7 @@ main: { sta.z bitmap_line.x2 lda #0 sta.z bitmap_line.x2+1 - // [11] call bitmap_line -- call_phi_near + // [11] call bitmap_line jsr bitmap_line jmp __b4 // main::@4 @@ -2501,7 +2501,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [94] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near + // [94] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -2522,7 +2522,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [94] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near + // [94] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -2599,7 +2599,7 @@ bitmap_line: { // [47] call abs_u16 // [103] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] abs_u16_from_bitmap_line: - // [103] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near + // [103] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy jsr abs_u16 // [48] abs_u16::return#0 = abs_u16::return#4 jmp __b12 @@ -2613,7 +2613,7 @@ bitmap_line: { // [50] call abs_u16 // [103] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] abs_u16_from___b12: - // [103] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near + // [103] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- vwuz1=vwuc1 lda #y2 @@ -2646,7 +2646,7 @@ bitmap_line: { // [56] call sgn_u16 // [110] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] sgn_u16_from___b1: - // [110] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near + // [110] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy jsr sgn_u16 // [57] sgn_u16::return#0 = sgn_u16::return#4 jmp __b14 @@ -2660,7 +2660,7 @@ bitmap_line: { // [59] call sgn_u16 // [110] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] sgn_u16_from___b14: - // [110] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near + // [110] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- vwuz1=vwuc1 lda #y2 @@ -2720,7 +2720,7 @@ bitmap_line: { // [117] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] bitmap_plot_from___b6: // [117] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [117] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near + // [117] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __b16 // bitmap_line::@16 @@ -2799,7 +2799,7 @@ bitmap_line: { // [117] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] bitmap_plot_from___b3: // [117] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [117] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near + // [117] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __breturn // bitmap_line::@return @@ -2845,7 +2845,7 @@ bitmap_line: { // [117] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] bitmap_plot_from___b9: // [117] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [117] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near + // [117] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __b17 // bitmap_line::@17 @@ -2923,7 +2923,7 @@ bitmap_line: { sta.z bitmap_plot.x lda #>x1 sta.z bitmap_plot.x+1 - // [117] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near + // [117] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- vbuxx=vbuc1 ldx #0 jsr bitmap_plot jmp __breturn @@ -3494,19 +3494,19 @@ main: { sta VICII_MEMORY // bitmap_init(BITMAP, SCREEN) // [4] call bitmap_init - // [13] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near + // [13] phi from main to bitmap_init [phi:main->bitmap_init] jsr bitmap_init // [5] phi from main to main::@2 [phi:main->main::@2] // main::@2 // bitmap_clear(BLACK, WHITE) // [6] call bitmap_clear - // [35] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] -- call_phi_near + // [35] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] jsr bitmap_clear // [7] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // init_screen() // [8] call init_screen - // [40] phi from main::@3 to init_screen [phi:main::@3->init_screen] -- call_phi_near + // [40] phi from main::@3 to init_screen [phi:main::@3->init_screen] jsr init_screen // [9] phi from main::@3 to main::@1 [phi:main::@3->main::@1] // [9] phi next#5 = 0 [phi:main::@3->main::@1#0] -- vbuz1=vbuc1 @@ -3520,7 +3520,7 @@ main: { sta.z bitmap_line.x2 lda #0 sta.z bitmap_line.x2+1 - // [11] call bitmap_line -- call_phi_near + // [11] call bitmap_line jsr bitmap_line // main::@4 // next++; @@ -3650,7 +3650,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [94] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near + // [94] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -3668,7 +3668,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [94] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near + // [94] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -3743,7 +3743,7 @@ bitmap_line: { sta.z abs_u16.w+1 // [47] call abs_u16 // [103] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] - // [103] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near + // [103] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy jsr abs_u16 // unsigned int dx = abs_u16(x2-x1) // [48] abs_u16::return#0 = abs_u16::return#4 @@ -3756,7 +3756,7 @@ bitmap_line: { // unsigned int dy = abs_u16(y2-y1) // [50] call abs_u16 // [103] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] - // [103] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near + // [103] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- vwuz1=vwuc1 lda #y2 @@ -3788,7 +3788,7 @@ bitmap_line: { sta.z sgn_u16.w+1 // [56] call sgn_u16 // [110] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] - // [110] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near + // [110] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy jsr sgn_u16 // unsigned int sx = sgn_u16(x2-x1) // [57] sgn_u16::return#0 = sgn_u16::return#4 @@ -3801,7 +3801,7 @@ bitmap_line: { // unsigned int sy = sgn_u16(y2-y1) // [59] call sgn_u16 // [110] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] - // [110] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near + // [110] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- vwuz1=vwuc1 lda #y2 @@ -3856,7 +3856,7 @@ bitmap_line: { // [67] call bitmap_plot // [117] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] // [117] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [117] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near + // [117] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy jsr bitmap_plot // bitmap_line::@16 // y += sy @@ -3930,7 +3930,7 @@ bitmap_line: { // [78] call bitmap_plot // [117] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] // [117] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [117] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near + // [117] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy jsr bitmap_plot // bitmap_line::@return // } @@ -3972,7 +3972,7 @@ bitmap_line: { // [84] call bitmap_plot // [117] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] // [117] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [117] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near + // [117] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy jsr bitmap_plot // bitmap_line::@17 // x += sx @@ -4046,7 +4046,7 @@ bitmap_line: { sta.z bitmap_plot.x lda #>x1 sta.z bitmap_plot.x+1 - // [117] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near + // [117] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- vbuxx=vbuc1 ldx #0 jsr bitmap_plot rts diff --git a/src/test/ref/bitmap-line-anim-2.log b/src/test/ref/bitmap-line-anim-2.log index cbb073377..4a8593ac2 100644 --- a/src/test/ref/bitmap-line-anim-2.log +++ b/src/test/ref/bitmap-line-anim-2.log @@ -2293,7 +2293,7 @@ main: { lda #(SCREEN&$3fff)/$40|(BITMAP&$3fff)/$400 sta VICII_MEMORY // [4] call bitmap_init - // [14] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near + // [14] phi from main to bitmap_init [phi:main->bitmap_init] bitmap_init_from_main: jsr bitmap_init // [5] phi from main to main::@3 [phi:main->main::@3] @@ -2302,7 +2302,7 @@ main: { // main::@3 __b3: // [6] call bitmap_clear - // [36] phi from main::@3 to bitmap_clear [phi:main::@3->bitmap_clear] -- call_phi_near + // [36] phi from main::@3 to bitmap_clear [phi:main::@3->bitmap_clear] bitmap_clear_from___b3: jsr bitmap_clear // [7] phi from main::@3 to main::@1 [phi:main::@3->main::@1] @@ -2316,7 +2316,7 @@ main: { // main::@1 __b1: // [8] bitmap_line::x2#0 = next#6 - // [9] call bitmap_line -- call_phi_near + // [9] call bitmap_line jsr bitmap_line jmp __b4 // main::@4 @@ -2485,7 +2485,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [89] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near + // [89] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -2506,7 +2506,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [89] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near + // [89] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -2542,7 +2542,7 @@ bitmap_line: { // [42] call abs_u16 // [98] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] abs_u16_from_bitmap_line: - // [98] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near + // [98] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy jsr abs_u16 // [43] abs_u16::return#0 = abs_u16::return#4 jmp __b12 @@ -2556,7 +2556,7 @@ bitmap_line: { // [45] call abs_u16 // [98] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] abs_u16_from___b12: - // [98] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near + // [98] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- vwuz1=vwuc1 lda #y2 @@ -2589,7 +2589,7 @@ bitmap_line: { // [51] call sgn_u16 // [105] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] sgn_u16_from___b1: - // [105] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near + // [105] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy jsr sgn_u16 // [52] sgn_u16::return#0 = sgn_u16::return#4 jmp __b14 @@ -2603,7 +2603,7 @@ bitmap_line: { // [54] call sgn_u16 // [105] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] sgn_u16_from___b14: - // [105] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near + // [105] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- vwuz1=vwuc1 lda #y2 @@ -2663,7 +2663,7 @@ bitmap_line: { // [112] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] bitmap_plot_from___b6: // [112] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [112] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near + // [112] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __b16 // bitmap_line::@16 @@ -2742,7 +2742,7 @@ bitmap_line: { // [112] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] bitmap_plot_from___b3: // [112] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [112] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near + // [112] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __breturn // bitmap_line::@return @@ -2788,7 +2788,7 @@ bitmap_line: { // [112] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] bitmap_plot_from___b9: // [112] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [112] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near + // [112] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __b17 // bitmap_line::@17 @@ -2866,7 +2866,7 @@ bitmap_line: { sta.z bitmap_plot.x lda #>x1 sta.z bitmap_plot.x+1 - // [112] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near + // [112] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- vbuxx=vbuc1 ldx #0 jsr bitmap_plot jmp __breturn @@ -3443,13 +3443,13 @@ main: { sta VICII_MEMORY // bitmap_init(BITMAP, SCREEN) // [4] call bitmap_init - // [14] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near + // [14] phi from main to bitmap_init [phi:main->bitmap_init] jsr bitmap_init // [5] phi from main to main::@3 [phi:main->main::@3] // main::@3 // bitmap_clear(PURPLE, WHITE) // [6] call bitmap_clear - // [36] phi from main::@3 to bitmap_clear [phi:main::@3->bitmap_clear] -- call_phi_near + // [36] phi from main::@3 to bitmap_clear [phi:main::@3->bitmap_clear] jsr bitmap_clear // [7] phi from main::@3 to main::@1 [phi:main::@3->main::@1] // [7] phi next#6 = 0 [phi:main::@3->main::@1#0] -- vwuz1=vwuc1 @@ -3460,7 +3460,7 @@ main: { __b1: // bitmap_line(0,0,next,100) // [8] bitmap_line::x2#0 = next#6 - // [9] call bitmap_line -- call_phi_near + // [9] call bitmap_line jsr bitmap_line // main::@4 // next++; @@ -3611,7 +3611,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [89] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near + // [89] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -3629,7 +3629,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [89] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near + // [89] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -3664,7 +3664,7 @@ bitmap_line: { sta.z abs_u16.w+1 // [42] call abs_u16 // [98] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] - // [98] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near + // [98] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy jsr abs_u16 // unsigned int dx = abs_u16(x2-x1) // [43] abs_u16::return#0 = abs_u16::return#4 @@ -3677,7 +3677,7 @@ bitmap_line: { // unsigned int dy = abs_u16(y2-y1) // [45] call abs_u16 // [98] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] - // [98] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near + // [98] phi abs_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@12->abs_u16#0] -- vwuz1=vwuc1 lda #y2 @@ -3709,7 +3709,7 @@ bitmap_line: { sta.z sgn_u16.w+1 // [51] call sgn_u16 // [105] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] - // [105] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near + // [105] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy jsr sgn_u16 // unsigned int sx = sgn_u16(x2-x1) // [52] sgn_u16::return#0 = sgn_u16::return#4 @@ -3722,7 +3722,7 @@ bitmap_line: { // unsigned int sy = sgn_u16(y2-y1) // [54] call sgn_u16 // [105] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] - // [105] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near + // [105] phi sgn_u16::w#2 = bitmap_line::y2#0 [phi:bitmap_line::@14->sgn_u16#0] -- vwuz1=vwuc1 lda #y2 @@ -3777,7 +3777,7 @@ bitmap_line: { // [62] call bitmap_plot // [112] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] // [112] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [112] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near + // [112] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy jsr bitmap_plot // bitmap_line::@16 // y += sy @@ -3851,7 +3851,7 @@ bitmap_line: { // [73] call bitmap_plot // [112] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] // [112] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [112] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near + // [112] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy jsr bitmap_plot // bitmap_line::@return // } @@ -3893,7 +3893,7 @@ bitmap_line: { // [79] call bitmap_plot // [112] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] // [112] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [112] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near + // [112] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy jsr bitmap_plot // bitmap_line::@17 // x += sx @@ -3967,7 +3967,7 @@ bitmap_line: { sta.z bitmap_plot.x lda #>x1 sta.z bitmap_plot.x+1 - // [112] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near + // [112] phi bitmap_plot::y#4 = 0 [phi:bitmap_line::@4->bitmap_plot#1] -- vbuxx=vbuc1 ldx #0 jsr bitmap_plot rts diff --git a/src/test/ref/bitmap-plot-0.log b/src/test/ref/bitmap-plot-0.log index 6436ef53c..656e0bd4e 100644 --- a/src/test/ref/bitmap-plot-0.log +++ b/src/test/ref/bitmap-plot-0.log @@ -1730,7 +1730,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [11] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -1782,7 +1782,7 @@ main: { .label vx = $a .label vy = 9 // [12] call bitmap_init - // [34] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near + // [34] phi from main to bitmap_init [phi:main->bitmap_init] bitmap_init_from_main: jsr bitmap_init // [13] phi from main to main::@8 [phi:main->main::@8] @@ -1791,7 +1791,7 @@ main: { // main::@8 __b8: // [14] call bitmap_clear - // [56] phi from main::@8 to bitmap_clear [phi:main::@8->bitmap_clear] -- call_phi_near + // [56] phi from main::@8 to bitmap_clear [phi:main::@8->bitmap_clear] bitmap_clear_from___b8: jsr bitmap_clear jmp __b9 @@ -1811,7 +1811,7 @@ main: { // [17] *D018 = main::toD0181_return#0 -- _deref_pbuc1=vbuc2 lda #toD0181_return sta D018 - // [18] call init_irq -- call_phi_near + // [18] call init_irq jsr init_irq // [19] phi from main::@7 to main::@1 [phi:main::@7->main::@1] __b1_from___b7: @@ -1840,7 +1840,7 @@ main: { // [20] bitmap_plot::x#0 = main::x#2 // [21] bitmap_plot::y#0 = main::y#2 -- vbuxx=vbuz1 ldx.z y - // [22] call bitmap_plot -- call_phi_near + // [22] call bitmap_plot jsr bitmap_plot jmp __b10 // main::@10 @@ -2056,7 +2056,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [77] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near + // [77] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -2077,7 +2077,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [77] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near + // [77] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -2562,7 +2562,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [11] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return @@ -2613,13 +2613,13 @@ main: { .label vy = 9 // bitmap_init(BITMAP, SCREEN) // [12] call bitmap_init - // [34] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near + // [34] phi from main to bitmap_init [phi:main->bitmap_init] jsr bitmap_init // [13] phi from main to main::@8 [phi:main->main::@8] // main::@8 // bitmap_clear(BLACK, WHITE) // [14] call bitmap_clear - // [56] phi from main::@8 to bitmap_clear [phi:main::@8->bitmap_clear] -- call_phi_near + // [56] phi from main::@8 to bitmap_clear [phi:main::@8->bitmap_clear] jsr bitmap_clear // main::@9 // *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 @@ -2634,7 +2634,7 @@ main: { lda #toD0181_return sta D018 // init_irq() - // [18] call init_irq -- call_phi_near + // [18] call init_irq jsr init_irq // [19] phi from main::@7 to main::@1 [phi:main::@7->main::@1] // [19] phi main::vy#2 = 1 [phi:main::@7->main::@1#0] -- vbuz1=vbuc1 @@ -2656,7 +2656,7 @@ main: { // [20] bitmap_plot::x#0 = main::x#2 // [21] bitmap_plot::y#0 = main::y#2 -- vbuxx=vbuz1 ldx.z y - // [22] call bitmap_plot -- call_phi_near + // [22] call bitmap_plot jsr bitmap_plot // main::@10 // x += vx @@ -2856,7 +2856,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [77] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near + // [77] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -2874,7 +2874,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [77] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near + // [77] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 diff --git a/src/test/ref/bitmap-plot-3.log b/src/test/ref/bitmap-plot-3.log index 4b3924927..fbdff3656 100644 --- a/src/test/ref/bitmap-plot-3.log +++ b/src/test/ref/bitmap-plot-3.log @@ -2524,7 +2524,7 @@ main: { .label a = $1c .label i = $1b // [1] call bitmap_init - // [19] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near + // [19] phi from main to bitmap_init [phi:main->bitmap_init] bitmap_init_from_main: jsr bitmap_init // [2] phi from main to main::@5 [phi:main->main::@5] @@ -2533,7 +2533,7 @@ main: { // main::@5 __b5: // [3] call bitmap_clear - // [41] phi from main::@5 to bitmap_clear [phi:main::@5->bitmap_clear] -- call_phi_near + // [41] phi from main::@5 to bitmap_clear [phi:main::@5->bitmap_clear] bitmap_clear_from___b5: jsr bitmap_clear jmp __b6 @@ -2616,7 +2616,7 @@ main: { sta.z bitmap_line.y2 lda #0 sta.z bitmap_line.y2+1 - // [16] call bitmap_line -- call_phi_near + // [16] call bitmap_line jsr bitmap_line jmp __b7 // main::@7 @@ -2761,7 +2761,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [97] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near + // [97] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -2782,7 +2782,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [97] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near + // [97] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -2821,7 +2821,7 @@ bitmap_line: { // [47] call abs_u16 // [106] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] abs_u16_from_bitmap_line: - // [106] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near + // [106] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy jsr abs_u16 // [48] abs_u16::return#0 = abs_u16::return#4 jmp __b12 @@ -2843,7 +2843,7 @@ bitmap_line: { // [51] call abs_u16 // [106] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] abs_u16_from___b12: - // [106] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near + // [106] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- register_copy jsr abs_u16 // [52] abs_u16::return#1 = abs_u16::return#4 jmp __b13 @@ -2875,7 +2875,7 @@ bitmap_line: { // [57] call sgn_u16 // [113] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] sgn_u16_from___b1: - // [113] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near + // [113] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy jsr sgn_u16 // [58] sgn_u16::return#0 = sgn_u16::return#4 jmp __b14 @@ -2897,7 +2897,7 @@ bitmap_line: { // [61] call sgn_u16 // [113] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] sgn_u16_from___b14: - // [113] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near + // [113] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- register_copy jsr sgn_u16 // [62] sgn_u16::return#1 = sgn_u16::return#4 jmp __b15 @@ -2940,7 +2940,7 @@ bitmap_line: { // [120] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] bitmap_plot_from___b6: // [120] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __b16 // bitmap_line::@16 @@ -3019,7 +3019,7 @@ bitmap_line: { // [120] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] bitmap_plot_from___b3: // [120] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __breturn // bitmap_line::@return @@ -3052,7 +3052,7 @@ bitmap_line: { // [120] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] bitmap_plot_from___b9: // [120] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __b17 // bitmap_line::@17 @@ -3126,7 +3126,7 @@ bitmap_line: { // [120] phi from bitmap_line::@4 to bitmap_plot [phi:bitmap_line::@4->bitmap_plot] bitmap_plot_from___b4: // [120] phi bitmap_plot::x#4 = bitmap_plot::x#0 [phi:bitmap_line::@4->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __breturn } @@ -3699,13 +3699,13 @@ main: { .label i = $1b // bitmap_init(BITMAP, SCREEN) // [1] call bitmap_init - // [19] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near + // [19] phi from main to bitmap_init [phi:main->bitmap_init] jsr bitmap_init // [2] phi from main to main::@5 [phi:main->main::@5] // main::@5 // bitmap_clear(BLACK, WHITE) // [3] call bitmap_clear - // [41] phi from main::@5 to bitmap_clear [phi:main::@5->bitmap_clear] -- call_phi_near + // [41] phi from main::@5 to bitmap_clear [phi:main::@5->bitmap_clear] jsr bitmap_clear // main::@6 // *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 @@ -3783,7 +3783,7 @@ main: { sta.z bitmap_line.y2 lda #0 sta.z bitmap_line.y2+1 - // [16] call bitmap_line -- call_phi_near + // [16] call bitmap_line jsr bitmap_line // main::@7 // a+=32 @@ -3919,7 +3919,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [97] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near + // [97] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -3937,7 +3937,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [97] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near + // [97] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -3975,7 +3975,7 @@ bitmap_line: { sta.z abs_u16.w+1 // [47] call abs_u16 // [106] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] - // [106] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near + // [106] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy jsr abs_u16 // unsigned int dx = abs_u16(x2-x1) // [48] abs_u16::return#0 = abs_u16::return#4 @@ -3996,7 +3996,7 @@ bitmap_line: { sta.z abs_u16.w+1 // [51] call abs_u16 // [106] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] - // [106] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near + // [106] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- register_copy jsr abs_u16 // unsigned int dy = abs_u16(y2-y1) // [52] abs_u16::return#1 = abs_u16::return#4 @@ -4027,7 +4027,7 @@ bitmap_line: { sta.z sgn_u16.w+1 // [57] call sgn_u16 // [113] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] - // [113] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near + // [113] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy jsr sgn_u16 // unsigned int sx = sgn_u16(x2-x1) // [58] sgn_u16::return#0 = sgn_u16::return#4 @@ -4048,7 +4048,7 @@ bitmap_line: { sta.z sgn_u16.w+1 // [61] call sgn_u16 // [113] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] - // [113] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near + // [113] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- register_copy jsr sgn_u16 // unsigned int sy = sgn_u16(y2-y1) // [62] sgn_u16::return#1 = sgn_u16::return#4 @@ -4087,7 +4087,7 @@ bitmap_line: { // [69] call bitmap_plot // [120] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] // [120] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy jsr bitmap_plot // bitmap_line::@16 // y += sy @@ -4161,7 +4161,7 @@ bitmap_line: { // [80] call bitmap_plot // [120] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] // [120] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy jsr bitmap_plot // bitmap_line::@return // } @@ -4191,7 +4191,7 @@ bitmap_line: { // [86] call bitmap_plot // [120] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] // [120] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy jsr bitmap_plot // bitmap_line::@17 // x += sx @@ -4263,7 +4263,7 @@ bitmap_line: { // [96] call bitmap_plot // [120] phi from bitmap_line::@4 to bitmap_plot [phi:bitmap_line::@4->bitmap_plot] // [120] phi bitmap_plot::x#4 = bitmap_plot::x#0 [phi:bitmap_line::@4->bitmap_plot#0] -- register_copy - // [120] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near + // [120] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- register_copy jsr bitmap_plot rts } diff --git a/src/test/ref/bitmap-plotter.log b/src/test/ref/bitmap-plotter.log index dafc94580..ba502c020 100644 --- a/src/test/ref/bitmap-plotter.log +++ b/src/test/ref/bitmap-plotter.log @@ -980,7 +980,7 @@ main: { lda #SCREEN/$40|BITMAP/$400 sta D018 // [4] call init_screen - // [11] phi from main to init_screen [phi:main->init_screen] -- call_phi_near + // [11] phi from main to init_screen [phi:main->init_screen] init_screen_from_main: jsr init_screen // [5] phi from main to main::@3 [phi:main->main::@3] @@ -989,7 +989,7 @@ main: { // main::@3 __b3: // [6] call init_plot_tables - // [21] phi from main::@3 to init_plot_tables [phi:main::@3->init_plot_tables] -- call_phi_near + // [21] phi from main::@3 to init_plot_tables [phi:main::@3->init_plot_tables] init_plot_tables_from___b3: jsr init_plot_tables jmp __b1 @@ -1005,7 +1005,7 @@ main: { // [8] *BG_COLOR = ++ *BG_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 inc BG_COLOR // [9] call plots - // [46] phi from main::@2 to plots [phi:main::@2->plots] -- call_phi_near + // [46] phi from main::@2 to plots [phi:main::@2->plots] plots_from___b2: jsr plots jmp __b4 @@ -1234,7 +1234,7 @@ plots: { // [51] plot::y#0 = plots_y[plots::i#2] -- vbuz1=pbuc1_derefidx_vbuxx lda plots_y,x sta.z plot.y - // [52] call plot -- call_phi_near + // [52] call plot jsr plot jmp __b3 // plots::@3 @@ -1511,13 +1511,13 @@ main: { sta D018 // init_screen() // [4] call init_screen - // [11] phi from main to init_screen [phi:main->init_screen] -- call_phi_near + // [11] phi from main to init_screen [phi:main->init_screen] jsr init_screen // [5] phi from main to main::@3 [phi:main->main::@3] // main::@3 // init_plot_tables() // [6] call init_plot_tables - // [21] phi from main::@3 to init_plot_tables [phi:main::@3->init_plot_tables] -- call_phi_near + // [21] phi from main::@3 to init_plot_tables [phi:main::@3->init_plot_tables] jsr init_plot_tables // main::@1 __b1: @@ -1532,7 +1532,7 @@ main: { inc BG_COLOR // plots() // [9] call plots - // [46] phi from main::@2 to plots [phi:main::@2->plots] -- call_phi_near + // [46] phi from main::@2 to plots [phi:main::@2->plots] jsr plots // main::@4 // (*BG_COLOR)--; @@ -1751,7 +1751,7 @@ plots: { // [51] plot::y#0 = plots_y[plots::i#2] -- vbuz1=pbuc1_derefidx_vbuxx lda plots_y,x sta.z plot.y - // [52] call plot -- call_phi_near + // [52] call plot jsr plot // plots::@3 // for(byte i=0; ibool_const_if] -- call_phi_near + // [7] phi from main to bool_const_if [phi:main->bool_const_if] bool_const_if_from_main: jsr bool_const_if // [2] phi from main to main::@1 [phi:main->main::@1] @@ -377,7 +377,7 @@ main: { // main::@1 __b1: // [3] call bool_const_vars - // [10] phi from main::@1 to bool_const_vars [phi:main::@1->bool_const_vars] -- call_phi_near + // [10] phi from main::@1 to bool_const_vars [phi:main::@1->bool_const_vars] bool_const_vars_from___b1: jsr bool_const_vars // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -386,7 +386,7 @@ main: { // main::@2 __b2: // [5] call bool_const_inline - // [13] phi from main::@2 to bool_const_inline [phi:main::@2->bool_const_inline] -- call_phi_near + // [13] phi from main::@2 to bool_const_inline [phi:main::@2->bool_const_inline] bool_const_inline_from___b2: jsr bool_const_inline jmp __breturn @@ -503,19 +503,19 @@ Score: 60 main: { // bool_const_if() // [1] call bool_const_if - // [7] phi from main to bool_const_if [phi:main->bool_const_if] -- call_phi_near + // [7] phi from main to bool_const_if [phi:main->bool_const_if] jsr bool_const_if // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // bool_const_vars() // [3] call bool_const_vars - // [10] phi from main::@1 to bool_const_vars [phi:main::@1->bool_const_vars] -- call_phi_near + // [10] phi from main::@1 to bool_const_vars [phi:main::@1->bool_const_vars] jsr bool_const_vars // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // bool_const_inline() // [5] call bool_const_inline - // [13] phi from main::@2 to bool_const_inline [phi:main::@2->bool_const_inline] -- call_phi_near + // [13] phi from main::@2 to bool_const_inline [phi:main::@2->bool_const_inline] jsr bool_const_inline // main::@return // } diff --git a/src/test/ref/bool-function.log b/src/test/ref/bool-function.log index 4e2a534ae..9eefa4f55 100644 --- a/src/test/ref/bool-function.log +++ b/src/test/ref/bool-function.log @@ -325,7 +325,7 @@ main: { tay // [4] isSet::i#0 = main::i#2 -- vbuaa=vbuxx txa - // [5] call isSet -- call_phi_near + // [5] call isSet jsr isSet // [6] isSet::return#0 = isSet::return#1 jmp __b5 @@ -474,7 +474,7 @@ main: { tay // [4] isSet::i#0 = main::i#2 -- vbuaa=vbuxx txa - // [5] call isSet -- call_phi_near + // [5] call isSet jsr isSet // [6] isSet::return#0 = isSet::return#1 // main::@5 diff --git a/src/test/ref/bool-ifs.log b/src/test/ref/bool-ifs.log index 85068d2b7..93674d607 100644 --- a/src/test/ref/bool-ifs.log +++ b/src/test/ref/bool-ifs.log @@ -655,7 +655,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call bool_and - // [9] phi from main to bool_and [phi:main->bool_and] -- call_phi_near + // [9] phi from main to bool_and [phi:main->bool_and] bool_and_from_main: jsr bool_and // [2] phi from main to main::@1 [phi:main->main::@1] @@ -664,7 +664,7 @@ main: { // main::@1 __b1: // [3] call bool_or - // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] -- call_phi_near + // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] bool_or_from___b1: jsr bool_or // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -673,7 +673,7 @@ main: { // main::@2 __b2: // [5] call bool_not - // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] -- call_phi_near + // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] bool_not_from___b2: jsr bool_not // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -682,7 +682,7 @@ main: { // main::@3 __b3: // [7] call bool_complex - // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] -- call_phi_near + // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] bool_complex_from___b3: jsr bool_complex jmp __breturn @@ -1040,25 +1040,25 @@ Score: 1684 main: { // bool_and() // [1] call bool_and - // [9] phi from main to bool_and [phi:main->bool_and] -- call_phi_near + // [9] phi from main to bool_and [phi:main->bool_and] jsr bool_and // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // bool_or() // [3] call bool_or - // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] -- call_phi_near + // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] jsr bool_or // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // bool_not() // [5] call bool_not - // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] -- call_phi_near + // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] jsr bool_not // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // bool_complex() // [7] call bool_complex - // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] -- call_phi_near + // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] jsr bool_complex // main::@return // } diff --git a/src/test/ref/bool-vars.log b/src/test/ref/bool-vars.log index df8e0e9a3..afc8566b2 100644 --- a/src/test/ref/bool-vars.log +++ b/src/test/ref/bool-vars.log @@ -689,7 +689,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call bool_and - // [9] phi from main to bool_and [phi:main->bool_and] -- call_phi_near + // [9] phi from main to bool_and [phi:main->bool_and] bool_and_from_main: jsr bool_and // [2] phi from main to main::@1 [phi:main->main::@1] @@ -698,7 +698,7 @@ main: { // main::@1 __b1: // [3] call bool_or - // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] -- call_phi_near + // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] bool_or_from___b1: jsr bool_or // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -707,7 +707,7 @@ main: { // main::@2 __b2: // [5] call bool_not - // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] -- call_phi_near + // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] bool_not_from___b2: jsr bool_not // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -716,7 +716,7 @@ main: { // main::@3 __b3: // [7] call bool_complex - // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] -- call_phi_near + // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] bool_complex_from___b3: jsr bool_complex jmp __breturn @@ -1102,25 +1102,25 @@ Score: 1899 main: { // bool_and() // [1] call bool_and - // [9] phi from main to bool_and [phi:main->bool_and] -- call_phi_near + // [9] phi from main to bool_and [phi:main->bool_and] jsr bool_and // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // bool_or() // [3] call bool_or - // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] -- call_phi_near + // [19] phi from main::@1 to bool_or [phi:main::@1->bool_or] jsr bool_or // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // bool_not() // [5] call bool_not - // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] -- call_phi_near + // [29] phi from main::@2 to bool_not [phi:main::@2->bool_not] jsr bool_not // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // bool_complex() // [7] call bool_complex - // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] -- call_phi_near + // [39] phi from main::@3 to bool_complex [phi:main::@3->bool_complex] jsr bool_complex // main::@return // } diff --git a/src/test/ref/c-types.log b/src/test/ref/c-types.log index aae73a3d4..cdea0bfb0 100644 --- a/src/test/ref/c-types.log +++ b/src/test/ref/c-types.log @@ -2212,7 +2212,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call print_cls - // [11] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [11] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -2221,7 +2221,7 @@ main: { // main::@1 __b1: // [3] call testChar - // [14] phi from main::@1 to testChar [phi:main::@1->testChar] -- call_phi_near + // [14] phi from main::@1 to testChar [phi:main::@1->testChar] testChar_from___b1: jsr testChar // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -2229,21 +2229,21 @@ main: { jmp __b2 // main::@2 __b2: - // [5] call testShort -- call_phi_near + // [5] call testShort jsr testShort // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: jmp __b3 // main::@3 __b3: - // [7] call testInt -- call_phi_near + // [7] call testInt jsr testInt // [8] phi from main::@3 to main::@4 [phi:main::@3->main::@4] __b4_from___b3: jmp __b4 // main::@4 __b4: - // [9] call testLong -- call_phi_near + // [9] call testLong jsr testLong jmp __breturn // main::@return @@ -2255,7 +2255,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [12] call memset - // [74] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [74] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -2277,7 +2277,7 @@ testChar: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [80] phi print_str::str#8 = testChar::str [phi:testChar->print_str#1] -- call_phi_near + // [80] phi print_str::str#8 = testChar::str [phi:testChar->print_str#1] -- pbuz1=pbuc1 lda #str @@ -2292,7 +2292,7 @@ testChar: { // [87] phi from testChar::@1 to print_uchar [phi:testChar::@1->print_uchar] print_uchar_from___b1: // [87] phi print_char_cursor#152 = print_char_cursor#1 [phi:testChar::@1->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = testChar::u [phi:testChar::@1->print_uchar#1] -- call_phi_near + // [87] phi print_uchar::b#5 = testChar::u [phi:testChar::@1->print_uchar#1] -- vbuxx=vbuc1 ldx #u jsr print_uchar // [18] phi from testChar::@1 to testChar::@2 [phi:testChar::@1->testChar::@2] @@ -2304,7 +2304,7 @@ testChar: { // [95] phi from testChar::@2 to print_char [phi:testChar::@2->print_char] print_char_from___b2: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testChar::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testChar::@2->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testChar::@2->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [20] phi from testChar::@2 to testChar::@3 [phi:testChar::@2->testChar::@3] @@ -2316,7 +2316,7 @@ testChar: { // [87] phi from testChar::@3 to print_uchar [phi:testChar::@3->print_uchar] print_uchar_from___b3: // [87] phi print_char_cursor#152 = print_char_cursor#25 [phi:testChar::@3->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = testChar::n [phi:testChar::@3->print_uchar#1] -- call_phi_near + // [87] phi print_uchar::b#5 = testChar::n [phi:testChar::@3->print_uchar#1] -- vbuxx=vbuc1 ldx #n jsr print_uchar // [22] phi from testChar::@3 to testChar::@4 [phi:testChar::@3->testChar::@4] @@ -2328,7 +2328,7 @@ testChar: { // [95] phi from testChar::@4 to print_char [phi:testChar::@4->print_char] print_char_from___b4: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testChar::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testChar::@4->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testChar::@4->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [24] phi from testChar::@4 to testChar::@5 [phi:testChar::@4->testChar::@5] @@ -2337,7 +2337,7 @@ testChar: { // testChar::@5 __b5: // [25] call print_schar - // [99] phi from testChar::@5 to print_schar [phi:testChar::@5->print_schar] -- call_phi_near + // [99] phi from testChar::@5 to print_schar [phi:testChar::@5->print_schar] print_schar_from___b5: jsr print_schar // [26] phi from testChar::@5 to testChar::@6 [phi:testChar::@5->testChar::@6] @@ -2348,7 +2348,7 @@ testChar: { // [27] call print_ln // [105] phi from testChar::@6 to print_ln [phi:testChar::@6->print_ln] print_ln_from___b6: - // [105] phi print_line_cursor#41 = print_screen#0 [phi:testChar::@6->print_ln#0] -- call_phi_near + // [105] phi print_line_cursor#41 = print_screen#0 [phi:testChar::@6->print_ln#0] -- pbuz1=pbuc1 lda #print_screen @@ -2378,7 +2378,7 @@ testShort: { // [80] phi from testShort to print_str [phi:testShort->print_str] print_str_from_testShort: // [80] phi print_char_cursor#159 = print_char_cursor#165 [phi:testShort->print_str#0] -- register_copy - // [80] phi print_str::str#8 = testShort::str [phi:testShort->print_str#1] -- call_phi_near + // [80] phi print_str::str#8 = testShort::str [phi:testShort->print_str#1] -- pbuz1=pbuc1 lda #str @@ -2393,7 +2393,7 @@ testShort: { // [110] phi from testShort::@1 to print_uint [phi:testShort::@1->print_uint] print_uint_from___b1: // [110] phi print_char_cursor#147 = print_char_cursor#1 [phi:testShort::@1->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = testShort::u [phi:testShort::@1->print_uint#1] -- call_phi_near + // [110] phi print_uint::w#5 = testShort::u [phi:testShort::@1->print_uint#1] -- vwuz1=vwuc1 lda #u @@ -2408,7 +2408,7 @@ testShort: { // [95] phi from testShort::@2 to print_char [phi:testShort::@2->print_char] print_char_from___b2: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testShort::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testShort::@2->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testShort::@2->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [35] phi from testShort::@2 to testShort::@3 [phi:testShort::@2->testShort::@3] @@ -2419,7 +2419,7 @@ testShort: { // [36] call print_sint // [116] phi from testShort::@3 to print_sint [phi:testShort::@3->print_sint] print_sint_from___b3: - // [116] phi print_sint::w#10 = testShort::n [phi:testShort::@3->print_sint#0] -- call_phi_near + // [116] phi print_sint::w#10 = testShort::n [phi:testShort::@3->print_sint#0] -- vwsz1=vwsc1 lda #n @@ -2434,7 +2434,7 @@ testShort: { // [95] phi from testShort::@4 to print_char [phi:testShort::@4->print_char] print_char_from___b4: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testShort::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testShort::@4->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testShort::@4->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [39] phi from testShort::@4 to testShort::@5 [phi:testShort::@4->testShort::@5] @@ -2445,7 +2445,7 @@ testShort: { // [40] call print_sint // [116] phi from testShort::@5 to print_sint [phi:testShort::@5->print_sint] print_sint_from___b5: - // [116] phi print_sint::w#10 = testShort::s [phi:testShort::@5->print_sint#0] -- call_phi_near + // [116] phi print_sint::w#10 = testShort::s [phi:testShort::@5->print_sint#0] -- vwsz1=vwsc1 lda #s @@ -2459,7 +2459,7 @@ testShort: { // [42] call print_ln // [105] phi from testShort::@6 to print_ln [phi:testShort::@6->print_ln] print_ln_from___b6: - // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testShort::@6->print_ln#0] -- call_phi_near + // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testShort::@6->print_ln#0] -- register_copy jsr print_ln jmp __breturn // testShort::@return @@ -2485,7 +2485,7 @@ testInt: { // [80] phi from testInt to print_str [phi:testInt->print_str] print_str_from_testInt: // [80] phi print_char_cursor#159 = print_char_cursor#163 [phi:testInt->print_str#0] -- register_copy - // [80] phi print_str::str#8 = testInt::str [phi:testInt->print_str#1] -- call_phi_near + // [80] phi print_str::str#8 = testInt::str [phi:testInt->print_str#1] -- pbuz1=pbuc1 lda #str @@ -2500,7 +2500,7 @@ testInt: { // [110] phi from testInt::@1 to print_uint [phi:testInt::@1->print_uint] print_uint_from___b1: // [110] phi print_char_cursor#147 = print_char_cursor#1 [phi:testInt::@1->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = testInt::u [phi:testInt::@1->print_uint#1] -- call_phi_near + // [110] phi print_uint::w#5 = testInt::u [phi:testInt::@1->print_uint#1] -- vwuz1=vwuc1 lda #u @@ -2515,7 +2515,7 @@ testInt: { // [95] phi from testInt::@2 to print_char [phi:testInt::@2->print_char] print_char_from___b2: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testInt::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testInt::@2->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testInt::@2->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [50] phi from testInt::@2 to testInt::@3 [phi:testInt::@2->testInt::@3] @@ -2526,7 +2526,7 @@ testInt: { // [51] call print_sint // [116] phi from testInt::@3 to print_sint [phi:testInt::@3->print_sint] print_sint_from___b3: - // [116] phi print_sint::w#10 = testInt::n [phi:testInt::@3->print_sint#0] -- call_phi_near + // [116] phi print_sint::w#10 = testInt::n [phi:testInt::@3->print_sint#0] -- vwsz1=vwsc1 lda #n @@ -2541,7 +2541,7 @@ testInt: { // [95] phi from testInt::@4 to print_char [phi:testInt::@4->print_char] print_char_from___b4: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testInt::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testInt::@4->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testInt::@4->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [54] phi from testInt::@4 to testInt::@5 [phi:testInt::@4->testInt::@5] @@ -2552,7 +2552,7 @@ testInt: { // [55] call print_sint // [116] phi from testInt::@5 to print_sint [phi:testInt::@5->print_sint] print_sint_from___b5: - // [116] phi print_sint::w#10 = testInt::s [phi:testInt::@5->print_sint#0] -- call_phi_near + // [116] phi print_sint::w#10 = testInt::s [phi:testInt::@5->print_sint#0] -- vwsz1=vwsc1 lda #s @@ -2566,7 +2566,7 @@ testInt: { // [57] call print_ln // [105] phi from testInt::@6 to print_ln [phi:testInt::@6->print_ln] print_ln_from___b6: - // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testInt::@6->print_ln#0] -- call_phi_near + // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testInt::@6->print_ln#0] -- register_copy jsr print_ln jmp __breturn // testInt::@return @@ -2592,7 +2592,7 @@ testLong: { // [80] phi from testLong to print_str [phi:testLong->print_str] print_str_from_testLong: // [80] phi print_char_cursor#159 = print_char_cursor#164 [phi:testLong->print_str#0] -- register_copy - // [80] phi print_str::str#8 = testLong::str [phi:testLong->print_str#1] -- call_phi_near + // [80] phi print_str::str#8 = testLong::str [phi:testLong->print_str#1] -- pbuz1=pbuc1 lda #str @@ -2607,7 +2607,7 @@ testLong: { // [127] phi from testLong::@1 to print_ulong [phi:testLong::@1->print_ulong] print_ulong_from___b1: // [127] phi print_char_cursor#148 = print_char_cursor#1 [phi:testLong::@1->print_ulong#0] -- register_copy - // [127] phi print_ulong::dw#2 = testLong::u [phi:testLong::@1->print_ulong#1] -- call_phi_near + // [127] phi print_ulong::dw#2 = testLong::u [phi:testLong::@1->print_ulong#1] -- vduz1=vduc1 lda #u @@ -2626,7 +2626,7 @@ testLong: { // [95] phi from testLong::@2 to print_char [phi:testLong::@2->print_char] print_char_from___b2: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testLong::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testLong::@2->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testLong::@2->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [65] phi from testLong::@2 to testLong::@3 [phi:testLong::@2->testLong::@3] @@ -2637,7 +2637,7 @@ testLong: { // [66] call print_slong // [133] phi from testLong::@3 to print_slong [phi:testLong::@3->print_slong] print_slong_from___b3: - // [133] phi print_slong::dw#3 = testLong::n [phi:testLong::@3->print_slong#0] -- call_phi_near + // [133] phi print_slong::dw#3 = testLong::n [phi:testLong::@3->print_slong#0] -- vdsz1=vdsc1 lda #n @@ -2656,7 +2656,7 @@ testLong: { // [95] phi from testLong::@4 to print_char [phi:testLong::@4->print_char] print_char_from___b4: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testLong::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testLong::@4->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testLong::@4->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [69] phi from testLong::@4 to testLong::@5 [phi:testLong::@4->testLong::@5] @@ -2667,7 +2667,7 @@ testLong: { // [70] call print_slong // [133] phi from testLong::@5 to print_slong [phi:testLong::@5->print_slong] print_slong_from___b5: - // [133] phi print_slong::dw#3 = testLong::s [phi:testLong::@5->print_slong#0] -- call_phi_near + // [133] phi print_slong::dw#3 = testLong::s [phi:testLong::@5->print_slong#0] -- vdsz1=vdsc1 lda #s @@ -2685,7 +2685,7 @@ testLong: { // [72] call print_ln // [105] phi from testLong::@6 to print_ln [phi:testLong::@6->print_ln] print_ln_from___b6: - // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testLong::@6->print_ln#0] -- call_phi_near + // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testLong::@6->print_ln#0] -- register_copy jsr print_ln jmp __breturn // testLong::@return @@ -2776,7 +2776,7 @@ print_str: { // [95] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [95] phi print_char_cursor#95 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char jmp __b3 // print_str::@3 @@ -2806,7 +2806,7 @@ print_uchar: { // [95] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [95] phi print_char_cursor#95 = print_char_cursor#152 [phi:print_uchar->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = print_char::ch#7 [phi:print_uchar->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = print_char::ch#7 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -2820,7 +2820,7 @@ print_uchar: { // [95] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_uchar::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = print_char::ch#8 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = print_char::ch#8 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -2860,7 +2860,7 @@ print_schar: { // [95] phi from print_schar::@1 to print_char [phi:print_schar::@1->print_char] print_char_from___b1: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_schar::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = '-' [phi:print_schar::@1->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = '-' [phi:print_schar::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char // [102] phi from print_schar::@1 to print_schar::@2 [phi:print_schar::@1->print_schar::@2] @@ -2872,7 +2872,7 @@ print_schar: { // [87] phi from print_schar::@2 to print_uchar [phi:print_schar::@2->print_uchar] print_uchar_from___b2: // [87] phi print_char_cursor#152 = print_char_cursor#25 [phi:print_schar::@2->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = (char)print_schar::b#0 [phi:print_schar::@2->print_uchar#1] -- call_phi_near + // [87] phi print_uchar::b#5 = (char)print_schar::b#0 [phi:print_schar::@2->print_uchar#1] -- vbuxx=vbuc1 ldx #b jsr print_uchar jmp __breturn @@ -2925,7 +2925,7 @@ print_uint: { // [87] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [87] phi print_char_cursor#152 = print_char_cursor#147 [phi:print_uint->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = print_uchar::b#1 [phi:print_uint->print_uchar#1] -- call_phi_near + // [87] phi print_uchar::b#5 = print_uchar::b#1 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -2936,7 +2936,7 @@ print_uint: { // [87] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [87] phi print_char_cursor#152 = print_char_cursor#25 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = print_uchar::b#2 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [87] phi print_uchar::b#5 = print_uchar::b#2 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -2961,7 +2961,7 @@ print_sint: { // [95] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] print_char_from___b3: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_sint::@3->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [120] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -2976,7 +2976,7 @@ print_sint: { // [110] phi from print_sint::@2 to print_uint [phi:print_sint::@2->print_uint] print_uint_from___b2: // [110] phi print_char_cursor#147 = print_char_cursor#25 [phi:print_sint::@2->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = print_uint::w#0 [phi:print_sint::@2->print_uint#1] -- call_phi_near + // [110] phi print_uint::w#5 = print_uint::w#0 [phi:print_sint::@2->print_uint#1] -- register_copy jsr print_uint jmp __breturn // print_sint::@return @@ -2992,7 +2992,7 @@ print_sint: { // [95] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] print_char_from___b1: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_sint::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char jmp __b4 @@ -3022,7 +3022,7 @@ print_ulong: { // [110] phi from print_ulong to print_uint [phi:print_ulong->print_uint] print_uint_from_print_ulong: // [110] phi print_char_cursor#147 = print_char_cursor#148 [phi:print_ulong->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = print_uint::w#1 [phi:print_ulong->print_uint#1] -- call_phi_near + // [110] phi print_uint::w#5 = print_uint::w#1 [phi:print_ulong->print_uint#1] -- register_copy jsr print_uint jmp __b1 // print_ulong::@1 @@ -3036,7 +3036,7 @@ print_ulong: { // [110] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] print_uint_from___b1: // [110] phi print_char_cursor#147 = print_char_cursor#25 [phi:print_ulong::@1->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = print_uint::w#2 [phi:print_ulong::@1->print_uint#1] -- call_phi_near + // [110] phi print_uint::w#5 = print_uint::w#2 [phi:print_ulong::@1->print_uint#1] -- register_copy jsr print_uint jmp __breturn // print_ulong::@return @@ -3061,7 +3061,7 @@ print_slong: { // [95] phi from print_slong::@3 to print_char [phi:print_slong::@3->print_char] print_char_from___b3: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_slong::@3->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:print_slong::@3->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:print_slong::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [137] phi from print_slong::@3 print_slong::@4 to print_slong::@2 [phi:print_slong::@3/print_slong::@4->print_slong::@2] @@ -3076,7 +3076,7 @@ print_slong: { // [127] phi from print_slong::@2 to print_ulong [phi:print_slong::@2->print_ulong] print_ulong_from___b2: // [127] phi print_char_cursor#148 = print_char_cursor#25 [phi:print_slong::@2->print_ulong#0] -- register_copy - // [127] phi print_ulong::dw#2 = print_ulong::dw#0 [phi:print_slong::@2->print_ulong#1] -- call_phi_near + // [127] phi print_ulong::dw#2 = print_ulong::dw#0 [phi:print_slong::@2->print_ulong#1] -- register_copy jsr print_ulong jmp __breturn // print_slong::@return @@ -3092,7 +3092,7 @@ print_slong: { // [95] phi from print_slong::@1 to print_char [phi:print_slong::@1->print_char] print_char_from___b1: // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_slong::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = '-' [phi:print_slong::@1->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = '-' [phi:print_slong::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char jmp __b4 @@ -3473,28 +3473,28 @@ Score: 2013 main: { // print_cls() // [1] call print_cls - // [11] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [11] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // testChar() // [3] call testChar - // [14] phi from main::@1 to testChar [phi:main::@1->testChar] -- call_phi_near + // [14] phi from main::@1 to testChar [phi:main::@1->testChar] jsr testChar // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // testShort() - // [5] call testShort -- call_phi_near + // [5] call testShort jsr testShort // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // testInt() - // [7] call testInt -- call_phi_near + // [7] call testInt jsr testInt // [8] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // testLong() - // [9] call testLong -- call_phi_near + // [9] call testLong jsr testLong // main::@return // } @@ -3506,7 +3506,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [12] call memset - // [74] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [74] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -3526,7 +3526,7 @@ testChar: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [80] phi print_str::str#8 = testChar::str [phi:testChar->print_str#1] -- call_phi_near + // [80] phi print_str::str#8 = testChar::str [phi:testChar->print_str#1] -- pbuz1=pbuc1 lda #str @@ -3538,7 +3538,7 @@ testChar: { // [17] call print_uchar // [87] phi from testChar::@1 to print_uchar [phi:testChar::@1->print_uchar] // [87] phi print_char_cursor#152 = print_char_cursor#1 [phi:testChar::@1->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = testChar::u [phi:testChar::@1->print_uchar#1] -- call_phi_near + // [87] phi print_uchar::b#5 = testChar::u [phi:testChar::@1->print_uchar#1] -- vbuxx=vbuc1 ldx #u jsr print_uchar // [18] phi from testChar::@1 to testChar::@2 [phi:testChar::@1->testChar::@2] @@ -3547,7 +3547,7 @@ testChar: { // [19] call print_char // [95] phi from testChar::@2 to print_char [phi:testChar::@2->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testChar::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testChar::@2->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testChar::@2->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [20] phi from testChar::@2 to testChar::@3 [phi:testChar::@2->testChar::@3] @@ -3556,7 +3556,7 @@ testChar: { // [21] call print_uchar // [87] phi from testChar::@3 to print_uchar [phi:testChar::@3->print_uchar] // [87] phi print_char_cursor#152 = print_char_cursor#25 [phi:testChar::@3->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = testChar::n [phi:testChar::@3->print_uchar#1] -- call_phi_near + // [87] phi print_uchar::b#5 = testChar::n [phi:testChar::@3->print_uchar#1] -- vbuxx=vbuc1 ldx #n jsr print_uchar // [22] phi from testChar::@3 to testChar::@4 [phi:testChar::@3->testChar::@4] @@ -3565,21 +3565,21 @@ testChar: { // [23] call print_char // [95] phi from testChar::@4 to print_char [phi:testChar::@4->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testChar::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testChar::@4->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testChar::@4->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [24] phi from testChar::@4 to testChar::@5 [phi:testChar::@4->testChar::@5] // testChar::@5 // print_schar(s) // [25] call print_schar - // [99] phi from testChar::@5 to print_schar [phi:testChar::@5->print_schar] -- call_phi_near + // [99] phi from testChar::@5 to print_schar [phi:testChar::@5->print_schar] jsr print_schar // [26] phi from testChar::@5 to testChar::@6 [phi:testChar::@5->testChar::@6] // testChar::@6 // print_ln() // [27] call print_ln // [105] phi from testChar::@6 to print_ln [phi:testChar::@6->print_ln] - // [105] phi print_line_cursor#41 = print_screen#0 [phi:testChar::@6->print_ln#0] -- call_phi_near + // [105] phi print_line_cursor#41 = print_screen#0 [phi:testChar::@6->print_ln#0] -- pbuz1=pbuc1 lda #print_screen @@ -3608,7 +3608,7 @@ testShort: { // [30] call print_str // [80] phi from testShort to print_str [phi:testShort->print_str] // [80] phi print_char_cursor#159 = print_char_cursor#165 [phi:testShort->print_str#0] -- register_copy - // [80] phi print_str::str#8 = testShort::str [phi:testShort->print_str#1] -- call_phi_near + // [80] phi print_str::str#8 = testShort::str [phi:testShort->print_str#1] -- pbuz1=pbuc1 lda #str @@ -3620,7 +3620,7 @@ testShort: { // [32] call print_uint // [110] phi from testShort::@1 to print_uint [phi:testShort::@1->print_uint] // [110] phi print_char_cursor#147 = print_char_cursor#1 [phi:testShort::@1->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = testShort::u [phi:testShort::@1->print_uint#1] -- call_phi_near + // [110] phi print_uint::w#5 = testShort::u [phi:testShort::@1->print_uint#1] -- vwuz1=vwuc1 lda #u @@ -3632,7 +3632,7 @@ testShort: { // [34] call print_char // [95] phi from testShort::@2 to print_char [phi:testShort::@2->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testShort::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testShort::@2->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testShort::@2->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [35] phi from testShort::@2 to testShort::@3 [phi:testShort::@2->testShort::@3] @@ -3640,7 +3640,7 @@ testShort: { // print_sint(n) // [36] call print_sint // [116] phi from testShort::@3 to print_sint [phi:testShort::@3->print_sint] - // [116] phi print_sint::w#10 = testShort::n [phi:testShort::@3->print_sint#0] -- call_phi_near + // [116] phi print_sint::w#10 = testShort::n [phi:testShort::@3->print_sint#0] -- vwsz1=vwsc1 lda #n @@ -3652,7 +3652,7 @@ testShort: { // [38] call print_char // [95] phi from testShort::@4 to print_char [phi:testShort::@4->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testShort::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testShort::@4->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testShort::@4->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [39] phi from testShort::@4 to testShort::@5 [phi:testShort::@4->testShort::@5] @@ -3660,7 +3660,7 @@ testShort: { // print_sint(s) // [40] call print_sint // [116] phi from testShort::@5 to print_sint [phi:testShort::@5->print_sint] - // [116] phi print_sint::w#10 = testShort::s [phi:testShort::@5->print_sint#0] -- call_phi_near + // [116] phi print_sint::w#10 = testShort::s [phi:testShort::@5->print_sint#0] -- vwsz1=vwsc1 lda #s @@ -3671,7 +3671,7 @@ testShort: { // print_ln() // [42] call print_ln // [105] phi from testShort::@6 to print_ln [phi:testShort::@6->print_ln] - // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testShort::@6->print_ln#0] -- call_phi_near + // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testShort::@6->print_ln#0] -- register_copy jsr print_ln // testShort::@return // } @@ -3696,7 +3696,7 @@ testInt: { // [45] call print_str // [80] phi from testInt to print_str [phi:testInt->print_str] // [80] phi print_char_cursor#159 = print_char_cursor#163 [phi:testInt->print_str#0] -- register_copy - // [80] phi print_str::str#8 = testInt::str [phi:testInt->print_str#1] -- call_phi_near + // [80] phi print_str::str#8 = testInt::str [phi:testInt->print_str#1] -- pbuz1=pbuc1 lda #str @@ -3708,7 +3708,7 @@ testInt: { // [47] call print_uint // [110] phi from testInt::@1 to print_uint [phi:testInt::@1->print_uint] // [110] phi print_char_cursor#147 = print_char_cursor#1 [phi:testInt::@1->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = testInt::u [phi:testInt::@1->print_uint#1] -- call_phi_near + // [110] phi print_uint::w#5 = testInt::u [phi:testInt::@1->print_uint#1] -- vwuz1=vwuc1 lda #u @@ -3720,7 +3720,7 @@ testInt: { // [49] call print_char // [95] phi from testInt::@2 to print_char [phi:testInt::@2->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testInt::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testInt::@2->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testInt::@2->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [50] phi from testInt::@2 to testInt::@3 [phi:testInt::@2->testInt::@3] @@ -3728,7 +3728,7 @@ testInt: { // print_sint(n) // [51] call print_sint // [116] phi from testInt::@3 to print_sint [phi:testInt::@3->print_sint] - // [116] phi print_sint::w#10 = testInt::n [phi:testInt::@3->print_sint#0] -- call_phi_near + // [116] phi print_sint::w#10 = testInt::n [phi:testInt::@3->print_sint#0] -- vwsz1=vwsc1 lda #n @@ -3740,7 +3740,7 @@ testInt: { // [53] call print_char // [95] phi from testInt::@4 to print_char [phi:testInt::@4->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testInt::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testInt::@4->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testInt::@4->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [54] phi from testInt::@4 to testInt::@5 [phi:testInt::@4->testInt::@5] @@ -3748,7 +3748,7 @@ testInt: { // print_sint(s) // [55] call print_sint // [116] phi from testInt::@5 to print_sint [phi:testInt::@5->print_sint] - // [116] phi print_sint::w#10 = testInt::s [phi:testInt::@5->print_sint#0] -- call_phi_near + // [116] phi print_sint::w#10 = testInt::s [phi:testInt::@5->print_sint#0] -- vwsz1=vwsc1 lda #s @@ -3759,7 +3759,7 @@ testInt: { // print_ln() // [57] call print_ln // [105] phi from testInt::@6 to print_ln [phi:testInt::@6->print_ln] - // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testInt::@6->print_ln#0] -- call_phi_near + // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testInt::@6->print_ln#0] -- register_copy jsr print_ln // testInt::@return // } @@ -3784,7 +3784,7 @@ testLong: { // [60] call print_str // [80] phi from testLong to print_str [phi:testLong->print_str] // [80] phi print_char_cursor#159 = print_char_cursor#164 [phi:testLong->print_str#0] -- register_copy - // [80] phi print_str::str#8 = testLong::str [phi:testLong->print_str#1] -- call_phi_near + // [80] phi print_str::str#8 = testLong::str [phi:testLong->print_str#1] -- pbuz1=pbuc1 lda #str @@ -3796,7 +3796,7 @@ testLong: { // [62] call print_ulong // [127] phi from testLong::@1 to print_ulong [phi:testLong::@1->print_ulong] // [127] phi print_char_cursor#148 = print_char_cursor#1 [phi:testLong::@1->print_ulong#0] -- register_copy - // [127] phi print_ulong::dw#2 = testLong::u [phi:testLong::@1->print_ulong#1] -- call_phi_near + // [127] phi print_ulong::dw#2 = testLong::u [phi:testLong::@1->print_ulong#1] -- vduz1=vduc1 lda #u @@ -3812,7 +3812,7 @@ testLong: { // [64] call print_char // [95] phi from testLong::@2 to print_char [phi:testLong::@2->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testLong::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testLong::@2->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testLong::@2->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [65] phi from testLong::@2 to testLong::@3 [phi:testLong::@2->testLong::@3] @@ -3820,7 +3820,7 @@ testLong: { // print_slong(n) // [66] call print_slong // [133] phi from testLong::@3 to print_slong [phi:testLong::@3->print_slong] - // [133] phi print_slong::dw#3 = testLong::n [phi:testLong::@3->print_slong#0] -- call_phi_near + // [133] phi print_slong::dw#3 = testLong::n [phi:testLong::@3->print_slong#0] -- vdsz1=vdsc1 lda #n @@ -3836,7 +3836,7 @@ testLong: { // [68] call print_char // [95] phi from testLong::@4 to print_char [phi:testLong::@4->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:testLong::@4->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:testLong::@4->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:testLong::@4->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [69] phi from testLong::@4 to testLong::@5 [phi:testLong::@4->testLong::@5] @@ -3844,7 +3844,7 @@ testLong: { // print_slong(s) // [70] call print_slong // [133] phi from testLong::@5 to print_slong [phi:testLong::@5->print_slong] - // [133] phi print_slong::dw#3 = testLong::s [phi:testLong::@5->print_slong#0] -- call_phi_near + // [133] phi print_slong::dw#3 = testLong::s [phi:testLong::@5->print_slong#0] -- vdsz1=vdsc1 lda #s @@ -3859,7 +3859,7 @@ testLong: { // print_ln() // [72] call print_ln // [105] phi from testLong::@6 to print_ln [phi:testLong::@6->print_ln] - // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testLong::@6->print_ln#0] -- call_phi_near + // [105] phi print_line_cursor#41 = print_line_cursor#0 [phi:testLong::@6->print_ln#0] -- register_copy jsr print_ln // testLong::@return // } @@ -3945,7 +3945,7 @@ print_str: { // [85] call print_char // [95] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char // print_str::@3 // print_char(*(str++)); @@ -3975,7 +3975,7 @@ print_uchar: { // Table of hexadecimal digits // [95] phi from print_uchar to print_char [phi:print_uchar->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#152 [phi:print_uchar->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = print_char::ch#7 [phi:print_uchar->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = print_char::ch#7 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -3988,7 +3988,7 @@ print_uchar: { // [93] call print_char // [95] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_uchar::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = print_char::ch#8 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = print_char::ch#8 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } @@ -4025,7 +4025,7 @@ print_schar: { // [101] call print_char // [95] phi from print_schar::@1 to print_char [phi:print_schar::@1->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_schar::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = '-' [phi:print_schar::@1->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = '-' [phi:print_schar::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char // [102] phi from print_schar::@1 to print_schar::@2 [phi:print_schar::@1->print_schar::@2] @@ -4034,7 +4034,7 @@ print_schar: { // [103] call print_uchar // [87] phi from print_schar::@2 to print_uchar [phi:print_schar::@2->print_uchar] // [87] phi print_char_cursor#152 = print_char_cursor#25 [phi:print_schar::@2->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = (char)print_schar::b#0 [phi:print_schar::@2->print_uchar#1] -- call_phi_near + // [87] phi print_uchar::b#5 = (char)print_schar::b#0 [phi:print_schar::@2->print_uchar#1] -- vbuxx=vbuc1 ldx #b jsr print_uchar // print_schar::@return @@ -4084,7 +4084,7 @@ print_uint: { // [112] call print_uchar // [87] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [87] phi print_char_cursor#152 = print_char_cursor#147 [phi:print_uint->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = print_uchar::b#1 [phi:print_uint->print_uchar#1] -- call_phi_near + // [87] phi print_uchar::b#5 = print_uchar::b#1 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -4093,7 +4093,7 @@ print_uint: { // [114] call print_uchar // [87] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [87] phi print_char_cursor#152 = print_char_cursor#25 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [87] phi print_uchar::b#5 = print_uchar::b#2 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [87] phi print_uchar::b#5 = print_uchar::b#2 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@return // } @@ -4115,7 +4115,7 @@ print_sint: { // [119] call print_char // [95] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_sint::@3->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [120] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -4127,7 +4127,7 @@ print_sint: { // [122] call print_uint // [110] phi from print_sint::@2 to print_uint [phi:print_sint::@2->print_uint] // [110] phi print_char_cursor#147 = print_char_cursor#25 [phi:print_sint::@2->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = print_uint::w#0 [phi:print_sint::@2->print_uint#1] -- call_phi_near + // [110] phi print_uint::w#5 = print_uint::w#0 [phi:print_sint::@2->print_uint#1] -- register_copy jsr print_uint // print_sint::@return // } @@ -4140,7 +4140,7 @@ print_sint: { // [125] call print_char // [95] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_sint::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char // print_sint::@4 @@ -4169,7 +4169,7 @@ print_ulong: { // [129] call print_uint // [110] phi from print_ulong to print_uint [phi:print_ulong->print_uint] // [110] phi print_char_cursor#147 = print_char_cursor#148 [phi:print_ulong->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = print_uint::w#1 [phi:print_ulong->print_uint#1] -- call_phi_near + // [110] phi print_uint::w#5 = print_uint::w#1 [phi:print_ulong->print_uint#1] -- register_copy jsr print_uint // print_ulong::@1 // print_uint(WORD0(dw)) @@ -4181,7 +4181,7 @@ print_ulong: { // [131] call print_uint // [110] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] // [110] phi print_char_cursor#147 = print_char_cursor#25 [phi:print_ulong::@1->print_uint#0] -- register_copy - // [110] phi print_uint::w#5 = print_uint::w#2 [phi:print_ulong::@1->print_uint#1] -- call_phi_near + // [110] phi print_uint::w#5 = print_uint::w#2 [phi:print_ulong::@1->print_uint#1] -- register_copy jsr print_uint // print_ulong::@return // } @@ -4203,7 +4203,7 @@ print_slong: { // [136] call print_char // [95] phi from print_slong::@3 to print_char [phi:print_slong::@3->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_slong::@3->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = ' ' [phi:print_slong::@3->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = ' ' [phi:print_slong::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [137] phi from print_slong::@3 print_slong::@4 to print_slong::@2 [phi:print_slong::@3/print_slong::@4->print_slong::@2] @@ -4215,7 +4215,7 @@ print_slong: { // [139] call print_ulong // [127] phi from print_slong::@2 to print_ulong [phi:print_slong::@2->print_ulong] // [127] phi print_char_cursor#148 = print_char_cursor#25 [phi:print_slong::@2->print_ulong#0] -- register_copy - // [127] phi print_ulong::dw#2 = print_ulong::dw#0 [phi:print_slong::@2->print_ulong#1] -- call_phi_near + // [127] phi print_ulong::dw#2 = print_ulong::dw#0 [phi:print_slong::@2->print_ulong#1] -- register_copy jsr print_ulong // print_slong::@return // } @@ -4228,7 +4228,7 @@ print_slong: { // [142] call print_char // [95] phi from print_slong::@1 to print_char [phi:print_slong::@1->print_char] // [95] phi print_char_cursor#95 = print_char_cursor#25 [phi:print_slong::@1->print_char#0] -- register_copy - // [95] phi print_char::ch#17 = '-' [phi:print_slong::@1->print_char#1] -- call_phi_near + // [95] phi print_char::ch#17 = '-' [phi:print_slong::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char // print_slong::@4 diff --git a/src/test/ref/c64dtv-8bppcharstretch.log b/src/test/ref/c64dtv-8bppcharstretch.log index f7b3c6de1..9e674183c 100644 --- a/src/test/ref/c64dtv-8bppcharstretch.log +++ b/src/test/ref/c64dtv-8bppcharstretch.log @@ -1380,7 +1380,7 @@ main: { lda #PROCPORT_RAM_IO sta.z PROCPORT // [3] call gfx_init - // [40] phi from main to gfx_init [phi:main->gfx_init] -- call_phi_near + // [40] phi from main to gfx_init [phi:main->gfx_init] gfx_init_from_main: jsr gfx_init jmp __b6 @@ -1592,7 +1592,7 @@ main: { // Initialize the different graphics in the memory gfx_init: { // [41] call gfx_init_screen0 - // [45] phi from gfx_init to gfx_init_screen0 [phi:gfx_init->gfx_init_screen0] -- call_phi_near + // [45] phi from gfx_init to gfx_init_screen0 [phi:gfx_init->gfx_init_screen0] gfx_init_screen0_from_gfx_init: jsr gfx_init_screen0 // [42] phi from gfx_init to gfx_init::@1 [phi:gfx_init->gfx_init::@1] @@ -1601,7 +1601,7 @@ gfx_init: { // gfx_init::@1 __b1: // [43] call gfx_init_plane_charset8 - // [59] phi from gfx_init::@1 to gfx_init_plane_charset8 [phi:gfx_init::@1->gfx_init_plane_charset8] -- call_phi_near + // [59] phi from gfx_init::@1 to gfx_init_plane_charset8 [phi:gfx_init::@1->gfx_init_plane_charset8] gfx_init_plane_charset8_from___b1: jsr gfx_init_plane_charset8 jmp __breturn @@ -1703,7 +1703,7 @@ gfx_init_plane_charset8: { // [60] call dtvSetCpuBankSegment1 // [84] phi from gfx_init_plane_charset8 to dtvSetCpuBankSegment1 [phi:gfx_init_plane_charset8->dtvSetCpuBankSegment1] dtvSetCpuBankSegment1_from_gfx_init_plane_charset8: - // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = gfx_init_plane_charset8::gfxbCpuBank#0 [phi:gfx_init_plane_charset8->dtvSetCpuBankSegment1#0] -- call_phi_near + // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = gfx_init_plane_charset8::gfxbCpuBank#0 [phi:gfx_init_plane_charset8->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 lda #gfxbCpuBank jsr dtvSetCpuBankSegment1 jmp __b9 @@ -1850,7 +1850,7 @@ gfx_init_plane_charset8: { // Reset CPU BANK segment to $4000 // [84] phi from gfx_init_plane_charset8::@8 to dtvSetCpuBankSegment1 [phi:gfx_init_plane_charset8::@8->dtvSetCpuBankSegment1] dtvSetCpuBankSegment1_from___b8: - // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = (char)$4000/$4000 [phi:gfx_init_plane_charset8::@8->dtvSetCpuBankSegment1#0] -- call_phi_near + // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = (char)$4000/$4000 [phi:gfx_init_plane_charset8::@8->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 lda #$4000/$4000 jsr dtvSetCpuBankSegment1 jmp __breturn @@ -2224,7 +2224,7 @@ main: { sta.z PROCPORT // gfx_init() // [3] call gfx_init - // [40] phi from main to gfx_init [phi:main->gfx_init] -- call_phi_near + // [40] phi from main to gfx_init [phi:main->gfx_init] jsr gfx_init // main::@6 // *DTV_FEATURE = DTV_FEATURE_ENABLE @@ -2454,13 +2454,13 @@ main: { gfx_init: { // gfx_init_screen0() // [41] call gfx_init_screen0 - // [45] phi from gfx_init to gfx_init_screen0 [phi:gfx_init->gfx_init_screen0] -- call_phi_near + // [45] phi from gfx_init to gfx_init_screen0 [phi:gfx_init->gfx_init_screen0] jsr gfx_init_screen0 // [42] phi from gfx_init to gfx_init::@1 [phi:gfx_init->gfx_init::@1] // gfx_init::@1 // gfx_init_plane_charset8() // [43] call gfx_init_plane_charset8 - // [59] phi from gfx_init::@1 to gfx_init_plane_charset8 [phi:gfx_init::@1->gfx_init_plane_charset8] -- call_phi_near + // [59] phi from gfx_init::@1 to gfx_init_plane_charset8 [phi:gfx_init::@1->gfx_init_plane_charset8] jsr gfx_init_plane_charset8 // gfx_init::@return // } @@ -2557,7 +2557,7 @@ gfx_init_plane_charset8: { // dtvSetCpuBankSegment1(gfxbCpuBank++) // [60] call dtvSetCpuBankSegment1 // [84] phi from gfx_init_plane_charset8 to dtvSetCpuBankSegment1 [phi:gfx_init_plane_charset8->dtvSetCpuBankSegment1] - // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = gfx_init_plane_charset8::gfxbCpuBank#0 [phi:gfx_init_plane_charset8->dtvSetCpuBankSegment1#0] -- call_phi_near + // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = gfx_init_plane_charset8::gfxbCpuBank#0 [phi:gfx_init_plane_charset8->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 lda #gfxbCpuBank jsr dtvSetCpuBankSegment1 // gfx_init_plane_charset8::@9 @@ -2691,7 +2691,7 @@ gfx_init_plane_charset8: { // [82] call dtvSetCpuBankSegment1 // Reset CPU BANK segment to $4000 // [84] phi from gfx_init_plane_charset8::@8 to dtvSetCpuBankSegment1 [phi:gfx_init_plane_charset8::@8->dtvSetCpuBankSegment1] - // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = (char)$4000/$4000 [phi:gfx_init_plane_charset8::@8->dtvSetCpuBankSegment1#0] -- call_phi_near + // [84] phi dtvSetCpuBankSegment1::cpuBankIdx#2 = (char)$4000/$4000 [phi:gfx_init_plane_charset8::@8->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 lda #$4000/$4000 jsr dtvSetCpuBankSegment1 // gfx_init_plane_charset8::@return diff --git a/src/test/ref/c64dtv-8bppchunkystretch.log b/src/test/ref/c64dtv-8bppchunkystretch.log index 5f14475bb..932a1908c 100644 --- a/src/test/ref/c64dtv-8bppchunkystretch.log +++ b/src/test/ref/c64dtv-8bppchunkystretch.log @@ -911,7 +911,7 @@ main: { lda #PROCPORT_RAM_IO sta.z PROCPORT // [3] call gfx_init_chunky - // [34] phi from main to gfx_init_chunky [phi:main->gfx_init_chunky] -- call_phi_near + // [34] phi from main to gfx_init_chunky [phi:main->gfx_init_chunky] gfx_init_chunky_from_main: jsr gfx_init_chunky jmp __b6 @@ -1110,7 +1110,7 @@ gfx_init_chunky: { // [35] call dtvSetCpuBankSegment1 // [54] phi from gfx_init_chunky to dtvSetCpuBankSegment1 [phi:gfx_init_chunky->dtvSetCpuBankSegment1] dtvSetCpuBankSegment1_from_gfx_init_chunky: - // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)CHUNKY/$4000 [phi:gfx_init_chunky->dtvSetCpuBankSegment1#0] -- call_phi_near + // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)CHUNKY/$4000 [phi:gfx_init_chunky->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 lda #CHUNKY/$4000 jsr dtvSetCpuBankSegment1 // [36] phi from gfx_init_chunky to gfx_init_chunky::@1 [phi:gfx_init_chunky->gfx_init_chunky::@1] @@ -1167,7 +1167,7 @@ gfx_init_chunky: { // [40] call dtvSetCpuBankSegment1 // [54] phi from gfx_init_chunky::@4 to dtvSetCpuBankSegment1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1] dtvSetCpuBankSegment1_from___b4: - // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = dtvSetCpuBankSegment1::cpuBankIdx#1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1#0] -- call_phi_near + // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = dtvSetCpuBankSegment1::cpuBankIdx#1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1#0] -- register_copy jsr dtvSetCpuBankSegment1 jmp __b7 // gfx_init_chunky::@7 @@ -1238,7 +1238,7 @@ gfx_init_chunky: { // Reset CPU BANK segment to $4000 // [54] phi from gfx_init_chunky::@6 to dtvSetCpuBankSegment1 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1] dtvSetCpuBankSegment1_from___b6: - // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)$4000/$4000 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1#0] -- call_phi_near + // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)$4000/$4000 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 lda #$4000/$4000 jsr dtvSetCpuBankSegment1 jmp __breturn @@ -1530,7 +1530,7 @@ main: { sta.z PROCPORT // gfx_init_chunky() // [3] call gfx_init_chunky - // [34] phi from main to gfx_init_chunky [phi:main->gfx_init_chunky] -- call_phi_near + // [34] phi from main to gfx_init_chunky [phi:main->gfx_init_chunky] jsr gfx_init_chunky // main::@6 // *DTV_FEATURE = DTV_FEATURE_ENABLE @@ -1744,7 +1744,7 @@ gfx_init_chunky: { // dtvSetCpuBankSegment1(gfxbCpuBank++) // [35] call dtvSetCpuBankSegment1 // [54] phi from gfx_init_chunky to dtvSetCpuBankSegment1 [phi:gfx_init_chunky->dtvSetCpuBankSegment1] - // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)CHUNKY/$4000 [phi:gfx_init_chunky->dtvSetCpuBankSegment1#0] -- call_phi_near + // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)CHUNKY/$4000 [phi:gfx_init_chunky->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 lda #CHUNKY/$4000 jsr dtvSetCpuBankSegment1 // [36] phi from gfx_init_chunky to gfx_init_chunky::@1 [phi:gfx_init_chunky->gfx_init_chunky::@1] @@ -1791,7 +1791,7 @@ gfx_init_chunky: { txa // [40] call dtvSetCpuBankSegment1 // [54] phi from gfx_init_chunky::@4 to dtvSetCpuBankSegment1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1] - // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = dtvSetCpuBankSegment1::cpuBankIdx#1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1#0] -- call_phi_near + // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = dtvSetCpuBankSegment1::cpuBankIdx#1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1#0] -- register_copy jsr dtvSetCpuBankSegment1 // gfx_init_chunky::@7 // dtvSetCpuBankSegment1(gfxbCpuBank++); @@ -1858,7 +1858,7 @@ gfx_init_chunky: { // [52] call dtvSetCpuBankSegment1 // Reset CPU BANK segment to $4000 // [54] phi from gfx_init_chunky::@6 to dtvSetCpuBankSegment1 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1] - // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)$4000/$4000 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1#0] -- call_phi_near + // [54] phi dtvSetCpuBankSegment1::cpuBankIdx#3 = (char)$4000/$4000 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 lda #$4000/$4000 jsr dtvSetCpuBankSegment1 // gfx_init_chunky::@return diff --git a/src/test/ref/call-banked-phi-case-1-near-0.log b/src/test/ref/call-banked-phi-case-1-near-0.log index 32bf16c0b..6cc252f0c 100644 --- a/src/test/ref/call-banked-phi-case-1-near-0.log +++ b/src/test/ref/call-banked-phi-case-1-near-0.log @@ -204,7 +204,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_near + // [4] phi from main to plus [phi:main->plus] plus_from_main: jsr plus jmp __b1 @@ -309,7 +309,7 @@ Score: 24 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_near + // [4] phi from main to plus [phi:main->plus] jsr plus // main::@1 // SCREEN[0] = plus('0', 7) diff --git a/src/test/ref/call-banked-phi-case-1-near-1.log b/src/test/ref/call-banked-phi-case-1-near-1.log index ff7923bbf..6d479c599 100644 --- a/src/test/ref/call-banked-phi-case-1-near-1.log +++ b/src/test/ref/call-banked-phi-case-1-near-1.log @@ -273,7 +273,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_near + // [4] phi from main to plus [phi:main->plus] plus_from_main: jsr plus jmp __b1 @@ -294,7 +294,7 @@ plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_near + // [7] phi from plus to min [phi:plus->min] min_from_plus: jsr min jmp __breturn @@ -398,7 +398,7 @@ Score: 36 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_near + // [4] phi from main to plus [phi:main->plus] jsr plus // main::@1 // SCREEN[0] = plus('0', 7) @@ -417,7 +417,7 @@ plus: { .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_near + // [7] phi from plus to min [phi:plus->min] jsr min // plus::@return // } diff --git a/src/test/ref/call-banked-phi-case-2-close-0.asm b/src/test/ref/call-banked-phi-case-2-close-0.asm index f867223cc..992a24726 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.asm +++ b/src/test/ref/call-banked-phi-case-2-close-0.asm @@ -58,7 +58,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .const a = '0' .const b = 7 diff --git a/src/test/ref/call-banked-phi-case-2-close-0.log b/src/test/ref/call-banked-phi-case-2-close-0.log index 8d78e1673..2fb184a72 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.log +++ b/src/test/ref/call-banked-phi-case-2-close-0.log @@ -230,7 +230,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .const a = '0' .const b = 7 @@ -341,7 +341,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .const a = '0' .const b = 7 diff --git a/src/test/ref/call-banked-phi-case-2-close-1.asm b/src/test/ref/call-banked-phi-case-2-close-1.asm index 3074c08e3..937d2243f 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.asm +++ b/src/test/ref/call-banked-phi-case-2-close-1.asm @@ -58,7 +58,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .const a = '0' .const b = 7 diff --git a/src/test/ref/call-banked-phi-case-2-close-1.log b/src/test/ref/call-banked-phi-case-2-close-1.log index 3ac501458..3738f423b 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.log +++ b/src/test/ref/call-banked-phi-case-2-close-1.log @@ -230,7 +230,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .const a = '0' .const b = 7 @@ -341,7 +341,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .const a = '0' .const b = 7 diff --git a/src/test/ref/call-banked-phi-case-3-near-0.asm b/src/test/ref/call-banked-phi-case-3-near-0.asm index 135a22afc..36effde7d 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.asm +++ b/src/test/ref/call-banked-phi-case-3-near-0.asm @@ -58,7 +58,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 diff --git a/src/test/ref/call-banked-phi-case-3-near-0.log b/src/test/ref/call-banked-phi-case-3-near-0.log index e5e80a97d..7b0249d61 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.log +++ b/src/test/ref/call-banked-phi-case-3-near-0.log @@ -299,12 +299,12 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_near + // [7] phi from plus to min [phi:plus->min] min_from_plus: jsr min jmp __breturn @@ -431,13 +431,13 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_near + // [7] phi from plus to min [phi:plus->min] jsr min // plus::@return // } diff --git a/src/test/ref/call-banked-phi-case-3-near-1.asm b/src/test/ref/call-banked-phi-case-3-near-1.asm index 39b32a2d9..dc45fa7ff 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.asm +++ b/src/test/ref/call-banked-phi-case-3-near-1.asm @@ -58,7 +58,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -69,7 +69,6 @@ plus: { } .segment Code // char min(char a, char b) -// banked : bank area='cx16_ram', bank=1 min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-3-near-1.cfg b/src/test/ref/call-banked-phi-case-3-near-1.cfg index 3a2aea220..4a0b60f9d 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.cfg +++ b/src/test/ref/call-banked-phi-case-3-near-1.cfg @@ -20,7 +20,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return diff --git a/src/test/ref/call-banked-phi-case-3-near-1.log b/src/test/ref/call-banked-phi-case-3-near-1.log index ee40560bd..6409550db 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.log +++ b/src/test/ref/call-banked-phi-case-3-near-1.log @@ -38,7 +38,7 @@ plus::@return: scope:[plus] from plus::@1 return to:@return -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) min: scope:[min] from plus min::b#1 = phi( plus/min::b#0 ) min::a#1 = phi( plus/min::a#0 ) @@ -66,7 +66,7 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) char min::$0 char min::a char min::a#0 @@ -188,7 +188,7 @@ plus::@return: scope:[plus] from plus [6] return to:@return -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) min: scope:[min] from plus [7] phi() to:min::@return @@ -199,7 +199,7 @@ min::@return: scope:[min] from min VARIABLE REGISTER WEIGHTS void main() -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) char min::a char min::b char min::return @@ -299,12 +299,12 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_near + // [7] phi from plus to min [phi:plus->min] min_from_plus: jsr min jmp __breturn @@ -316,7 +316,6 @@ plus: { .segment Code // min // char min(char a, char b) -// banked : bank area='cx16_ram', bank=1 min: { .label return = plus.a+plus.b jmp __breturn @@ -344,7 +343,7 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) char min::a char min::b char min::return @@ -432,13 +431,13 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_near + // [7] phi from plus to min [phi:plus->min] jsr min // plus::@return // } @@ -448,7 +447,6 @@ plus: { .segment Code // min // char min(char a, char b) -// banked : bank area='cx16_ram', bank=1 min: { .label return = plus.a+plus.b // min::@return diff --git a/src/test/ref/call-banked-phi-case-3-near-1.sym b/src/test/ref/call-banked-phi-case-3-near-1.sym index 09b563343..9e4219f22 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.sym +++ b/src/test/ref/call-banked-phi-case-3-near-1.sym @@ -1,6 +1,6 @@ __constant char * const SCREEN = (char *) 1024 void main() -__bank(cx16_ram, 1) char min(char a , char b) +char min(char a , char b) char min::a char min::b char min::return diff --git a/src/test/ref/call-banked-phi-case-4-near-0.asm b/src/test/ref/call-banked-phi-case-4-near-0.asm index 9eda4af17..d9e6ece5d 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.asm +++ b/src/test/ref/call-banked-phi-case-4-near-0.asm @@ -58,7 +58,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -68,7 +68,7 @@ plus: { rts } // char min(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-4-near-0.log b/src/test/ref/call-banked-phi-case-4-near-0.log index 8fff4dd12..c5c7e65c3 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.log +++ b/src/test/ref/call-banked-phi-case-4-near-0.log @@ -299,12 +299,12 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_near + // [7] phi from plus to min [phi:plus->min] min_from_plus: jsr min jmp __breturn @@ -315,7 +315,7 @@ plus: { } // min // char min(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) min: { .label return = plus.a+plus.b jmp __breturn @@ -431,13 +431,13 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_near + // [7] phi from plus to min [phi:plus->min] jsr min // plus::@return // } @@ -446,7 +446,7 @@ plus: { } // min // char min(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) min: { .label return = plus.a+plus.b // min::@return diff --git a/src/test/ref/call-banked-phi-case-4-near-1.asm b/src/test/ref/call-banked-phi-case-4-near-1.asm index 7a009fb12..961e21569 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.asm +++ b/src/test/ref/call-banked-phi-case-4-near-1.asm @@ -58,7 +58,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -68,7 +68,7 @@ plus: { rts } // char min(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-4-near-1.log b/src/test/ref/call-banked-phi-case-4-near-1.log index 355d2d82c..fd0d233ce 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.log +++ b/src/test/ref/call-banked-phi-case-4-near-1.log @@ -299,12 +299,12 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_near + // [7] phi from plus to min [phi:plus->min] min_from_plus: jsr min jmp __breturn @@ -315,7 +315,7 @@ plus: { } // min // char min(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) min: { .label return = plus.a+plus.b jmp __breturn @@ -431,13 +431,13 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 // min(a, b) // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_near + // [7] phi from plus to min [phi:plus->min] jsr min // plus::@return // } @@ -446,7 +446,7 @@ plus: { } // min // char min(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) min: { .label return = plus.a+plus.b // min::@return diff --git a/src/test/ref/call-banked-phi-case-5-far-0.asm b/src/test/ref/call-banked-phi-case-5-far-0.asm index f492f49fe..d4144fb7c 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.asm +++ b/src/test/ref/call-banked-phi-case-5-far-0.asm @@ -58,7 +58,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -72,7 +72,7 @@ plus: { } .segment RAM_Bank2 // char min(char a, char b) -// banked : bank area='cx16_ram', bank=2 +// __bank(cx16_ram, 2) min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-5-far-0.log b/src/test/ref/call-banked-phi-case-5-far-0.log index c7fde5e3d..b4699672c 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.log +++ b/src/test/ref/call-banked-phi-case-5-far-0.log @@ -299,7 +299,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -319,7 +319,7 @@ plus: { .segment RAM_Bank2 // min // char min(char a, char b) -// banked : bank area='cx16_ram', bank=2 +// __bank(cx16_ram, 2) min: { .label return = plus.a+plus.b jmp __breturn @@ -435,7 +435,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -454,7 +454,7 @@ plus: { .segment RAM_Bank2 // min // char min(char a, char b) -// banked : bank area='cx16_ram', bank=2 +// __bank(cx16_ram, 2) min: { .label return = plus.a+plus.b // min::@return diff --git a/src/test/ref/call-banked-phi-case-5-far-1.asm b/src/test/ref/call-banked-phi-case-5-far-1.asm index 002273c5d..3f168055b 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.asm +++ b/src/test/ref/call-banked-phi-case-5-far-1.asm @@ -58,7 +58,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -72,7 +72,7 @@ plus: { } .segment RAM_Bank2 // char min(char a, char b) -// banked : bank area='cx16_ram', bank=2 +// __bank(cx16_ram, 2) min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-5-far-1.log b/src/test/ref/call-banked-phi-case-5-far-1.log index d8beab3fb..0be8f5ff7 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.log +++ b/src/test/ref/call-banked-phi-case-5-far-1.log @@ -299,7 +299,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -319,7 +319,7 @@ plus: { .segment RAM_Bank2 // min // char min(char a, char b) -// banked : bank area='cx16_ram', bank=2 +// __bank(cx16_ram, 2) min: { .label return = plus.a+plus.b jmp __breturn @@ -435,7 +435,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -454,7 +454,7 @@ plus: { .segment RAM_Bank2 // min // char min(char a, char b) -// banked : bank area='cx16_ram', bank=2 +// __bank(cx16_ram, 2) min: { .label return = plus.a+plus.b // min::@return diff --git a/src/test/ref/call-banked-phi-case-6-close-0.asm b/src/test/ref/call-banked-phi-case-6-close-0.asm index bed31d08c..32a709284 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.asm +++ b/src/test/ref/call-banked-phi-case-6-close-0.asm @@ -58,7 +58,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -75,7 +75,7 @@ plus: { } .segment ROM_Bank1 // char min(char a, char b) -// banked : bank area='cx16_rom', bank=1 +// __bank(cx16_rom, 1) min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-6-close-0.log b/src/test/ref/call-banked-phi-case-6-close-0.log index 8dd9b182a..d18801d0d 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.log +++ b/src/test/ref/call-banked-phi-case-6-close-0.log @@ -300,7 +300,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -323,7 +323,7 @@ plus: { .segment ROM_Bank1 // min // char min(char a, char b) -// banked : bank area='cx16_rom', bank=1 +// __bank(cx16_rom, 1) min: { .label return = plus.a+plus.b jmp __breturn @@ -439,7 +439,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -461,7 +461,7 @@ plus: { .segment ROM_Bank1 // min // char min(char a, char b) -// banked : bank area='cx16_rom', bank=1 +// __bank(cx16_rom, 1) min: { .label return = plus.a+plus.b // min::@return diff --git a/src/test/ref/call-banked-phi-case-6-close-1.asm b/src/test/ref/call-banked-phi-case-6-close-1.asm index b924a7a81..15769f0b8 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.asm +++ b/src/test/ref/call-banked-phi-case-6-close-1.asm @@ -58,7 +58,7 @@ main: { } .segment RAM_Bank1 // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -75,7 +75,7 @@ plus: { } .segment ROM_Bank1 // char min(char a, char b) -// banked : bank area='cx16_rom', bank=1 +// __bank(cx16_rom, 1) min: { .label return = plus.a+plus.b rts diff --git a/src/test/ref/call-banked-phi-case-6-close-1.log b/src/test/ref/call-banked-phi-case-6-close-1.log index 4228f15f1..ffe2cc66e 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.log +++ b/src/test/ref/call-banked-phi-case-6-close-1.log @@ -300,7 +300,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -323,7 +323,7 @@ plus: { .segment ROM_Bank1 // min // char min(char a, char b) -// banked : bank area='cx16_rom', bank=1 +// __bank(cx16_rom, 1) min: { .label return = plus.a+plus.b jmp __breturn @@ -439,7 +439,7 @@ main: { .segment RAM_Bank1 // plus // char plus(char a, char b) -// banked : bank area='cx16_ram', bank=1 +// __bank(cx16_ram, 1) plus: { .label a = '0' .label b = 7 @@ -461,7 +461,7 @@ plus: { .segment ROM_Bank1 // min // char min(char a, char b) -// banked : bank area='cx16_rom', bank=1 +// __bank(cx16_rom, 1) min: { .label return = plus.a+plus.b // min::@return diff --git a/src/test/ref/call-parameter-autocast.log b/src/test/ref/call-parameter-autocast.log index 51c9246e2..c86f830af 100644 --- a/src/test/ref/call-parameter-autocast.log +++ b/src/test/ref/call-parameter-autocast.log @@ -261,7 +261,7 @@ main: { sta.z print.w lda #>$1234 sta.z print.w+1 - // [7] phi idx#13 = 0 [phi:main->print#1] -- call_phi_near + // [7] phi idx#13 = 0 [phi:main->print#1] -- vbuxx=vbuc1 ldx #0 jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -277,7 +277,7 @@ main: { sta.z print.w lda #>w sta.z print.w+1 - // [7] phi idx#13 = idx#14 [phi:main::@1->print#1] -- call_phi_near + // [7] phi idx#13 = idx#14 [phi:main::@1->print#1] -- register_copy jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -292,7 +292,7 @@ main: { sta.z print.w lda #>$12*$100+$34 sta.z print.w+1 - // [7] phi idx#13 = idx#14 [phi:main::@2->print#1] -- call_phi_near + // [7] phi idx#13 = idx#14 [phi:main::@2->print#1] -- register_copy jsr print jmp __breturn // main::@return @@ -386,7 +386,7 @@ main: { sta.z print.w lda #>$1234 sta.z print.w+1 - // [7] phi idx#13 = 0 [phi:main->print#1] -- call_phi_near + // [7] phi idx#13 = 0 [phi:main->print#1] -- vbuxx=vbuc1 ldx #0 jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -399,7 +399,7 @@ main: { sta.z print.w lda #>w sta.z print.w+1 - // [7] phi idx#13 = idx#14 [phi:main::@1->print#1] -- call_phi_near + // [7] phi idx#13 = idx#14 [phi:main::@1->print#1] -- register_copy jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 @@ -411,7 +411,7 @@ main: { sta.z print.w lda #>$12*$100+$34 sta.z print.w+1 - // [7] phi idx#13 = idx#14 [phi:main::@2->print#1] -- call_phi_near + // [7] phi idx#13 = idx#14 [phi:main::@2->print#1] -- register_copy jsr print // main::@return // } diff --git a/src/test/ref/callconstparam.log b/src/test/ref/callconstparam.log index ae33a22d0..f93f9d39a 100644 --- a/src/test/ref/callconstparam.log +++ b/src/test/ref/callconstparam.log @@ -307,7 +307,7 @@ main: { // [5] phi line::x1#3 = 2 [phi:main->line#1] -- vbuz1=vbuc1 lda #2 sta.z line.x1 - // [5] phi line::x#0 = 1 [phi:main->line#2] -- call_phi_near + // [5] phi line::x#0 = 1 [phi:main->line#2] -- vbuxx=vbuc1 ldx #1 jsr line // [2] phi from main to main::@1 [phi:main->main::@1] @@ -322,7 +322,7 @@ main: { // [5] phi line::x1#3 = 5 [phi:main::@1->line#1] -- vbuz1=vbuc1 lda #5 sta.z line.x1 - // [5] phi line::x#0 = 3 [phi:main::@1->line#2] -- call_phi_near + // [5] phi line::x#0 = 3 [phi:main::@1->line#2] -- vbuxx=vbuc1 ldx #3 jsr line jmp __breturn @@ -438,7 +438,7 @@ main: { // [5] phi line::x1#3 = 2 [phi:main->line#1] -- vbuz1=vbuc1 lda #2 sta.z line.x1 - // [5] phi line::x#0 = 1 [phi:main->line#2] -- call_phi_near + // [5] phi line::x#0 = 1 [phi:main->line#2] -- vbuxx=vbuc1 ldx #1 jsr line // [2] phi from main to main::@1 [phi:main->main::@1] @@ -450,7 +450,7 @@ main: { // [5] phi line::x1#3 = 5 [phi:main::@1->line#1] -- vbuz1=vbuc1 lda #5 sta.z line.x1 - // [5] phi line::x#0 = 3 [phi:main::@1->line#2] -- call_phi_near + // [5] phi line::x#0 = 3 [phi:main::@1->line#2] -- vbuxx=vbuc1 ldx #3 jsr line // main::@return diff --git a/src/test/ref/casting-negative.log b/src/test/ref/casting-negative.log index 1ec60bd76..cfa761d3c 100644 --- a/src/test/ref/casting-negative.log +++ b/src/test/ref/casting-negative.log @@ -3802,7 +3802,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -3810,7 +3810,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -3846,7 +3846,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -3887,7 +3887,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln jmp __breturn // cputc::@return @@ -3899,7 +3899,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln jmp __breturn } @@ -3907,7 +3907,7 @@ cputc: { main: { .label signed_char_value = $17 // [28] call clrscr - // [55] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [55] phi from main to clrscr [phi:main->clrscr] clrscr_from_main: jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] @@ -3939,7 +3939,7 @@ main: { lda #$ff !: sta.z test_casting.signed_short_value+1 - // [34] call test_casting -- call_phi_near + // [34] call test_casting jsr test_casting // [29] phi from main::@2 to main::@1 [phi:main::@2->main::@1] __b1_from___b2: @@ -4069,7 +4069,7 @@ cputln: { sta.z conio_cursor_x // [52] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [53] call cscroll -- call_phi_near + // [53] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -4183,7 +4183,7 @@ clrscr: { test_casting: { .label signed_short_value = 4 // [71] printf_sint::value#1 = test_casting::signed_short_value#0 - // [72] call printf_sint -- call_phi_near + // [72] call printf_sint jsr printf_sint // [73] phi from test_casting to test_casting::@1 [phi:test_casting->test_casting::@1] __b1_from_test_casting: @@ -4198,7 +4198,7 @@ test_casting: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [99] phi printf_str::s#4 = test_casting::s [phi:test_casting::@1->printf_str#1] -- call_phi_near + // [99] phi printf_str::s#4 = test_casting::s [phi:test_casting::@1->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -4234,7 +4234,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [108] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [108] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -4253,7 +4253,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [108] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [108] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -4269,7 +4269,7 @@ cscroll: { memset_from___b3: // [118] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [118] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [118] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -4285,7 +4285,7 @@ cscroll: { memset_from___b4: // [118] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [118] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [118] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -4354,7 +4354,7 @@ printf_sint: { __b2: // [94] utoa::value#1 = (unsigned int)printf_sint::value#4 // [95] call utoa - // [126] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] -- call_phi_near + // [126] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] utoa_from___b2: jsr utoa jmp __b3 @@ -4364,7 +4364,7 @@ printf_sint: { lda printf_buffer // [97] call printf_number_buffer // Print using format - // [147] phi from printf_sint::@3 to printf_number_buffer [phi:printf_sint::@3->printf_number_buffer] -- call_phi_near + // [147] phi from printf_sint::@3 to printf_number_buffer [phi:printf_sint::@3->printf_number_buffer] printf_number_buffer_from___b3: jsr printf_number_buffer jmp __breturn @@ -4630,7 +4630,7 @@ utoa: { // [141] utoa_append::value#0 = utoa::value#2 // [142] utoa_append::sub#0 = utoa::digit_value#0 // [143] call utoa_append - // [155] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near + // [155] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] utoa_append_from___b5: jsr utoa_append // [144] utoa_append::return#0 = utoa_append::value#2 @@ -4686,7 +4686,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>printf_sint.putc sta.z printf_str.putc+1 - // [99] phi printf_str::s#4 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near + // [99] phi printf_str::s#4 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 lda #buffer_digits @@ -5199,12 +5199,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [8] return @@ -5233,7 +5233,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy // conio_c64_init::@return // } @@ -5272,7 +5272,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln // cputc::@return __breturn: @@ -5283,7 +5283,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln rts } @@ -5292,7 +5292,7 @@ main: { .label signed_char_value = $17 // clrscr() // [28] call clrscr - // [55] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [55] phi from main to clrscr [phi:main->clrscr] jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] // [29] phi main::signed_char_value#2 = -5 [phi:main->main::@1#0] -- vbsz1=vbsc1 @@ -5323,7 +5323,7 @@ main: { lda #$ff !: sta.z test_casting.signed_short_value+1 - // [34] call test_casting -- call_phi_near + // [34] call test_casting jsr test_casting // [29] phi from main::@2 to main::@1 [phi:main::@2->main::@1] // [29] phi main::signed_char_value#2 = main::signed_char_value#1 [phi:main::@2->main::@1#0] -- register_copy @@ -5455,7 +5455,7 @@ cputln: { // [52] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [53] call cscroll -- call_phi_near + // [53] call cscroll jsr cscroll // cputln::@return // } @@ -5570,7 +5570,7 @@ test_casting: { .label signed_short_value = 4 // printf("%d\n", signed_short_value) // [71] printf_sint::value#1 = test_casting::signed_short_value#0 - // [72] call printf_sint -- call_phi_near + // [72] call printf_sint jsr printf_sint // [73] phi from test_casting to test_casting::@1 [phi:test_casting->test_casting::@1] // test_casting::@1 @@ -5582,7 +5582,7 @@ test_casting: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [99] phi printf_str::s#4 = test_casting::s [phi:test_casting::@1->printf_str#1] -- call_phi_near + // [99] phi printf_str::s#4 = test_casting::s [phi:test_casting::@1->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -5615,7 +5615,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [108] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [108] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -5631,7 +5631,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [108] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [108] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -5644,7 +5644,7 @@ cscroll: { // [118] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [118] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [118] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [118] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -5657,7 +5657,7 @@ cscroll: { // [118] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [118] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [118] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [118] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -5729,7 +5729,7 @@ printf_sint: { // utoa(uvalue, printf_buffer.digits, format.radix) // [94] utoa::value#1 = (unsigned int)printf_sint::value#4 // [95] call utoa - // [126] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] -- call_phi_near + // [126] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] jsr utoa // printf_sint::@3 // printf_number_buffer(putc, printf_buffer, format) @@ -5737,7 +5737,7 @@ printf_sint: { lda printf_buffer // [97] call printf_number_buffer // Print using format - // [147] phi from printf_sint::@3 to printf_number_buffer [phi:printf_sint::@3->printf_number_buffer] -- call_phi_near + // [147] phi from printf_sint::@3 to printf_number_buffer [phi:printf_sint::@3->printf_number_buffer] jsr printf_number_buffer // printf_sint::@return // } @@ -5993,7 +5993,7 @@ utoa: { // [141] utoa_append::value#0 = utoa::value#2 // [142] utoa_append::sub#0 = utoa::digit_value#0 // [143] call utoa_append - // [155] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near + // [155] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] jsr utoa_append // utoa_append(buffer++, value, digit_value) // [144] utoa_append::return#0 = utoa_append::value#2 @@ -6043,7 +6043,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>printf_sint.putc sta.z printf_str.putc+1 - // [99] phi printf_str::s#4 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near + // [99] phi printf_str::s#4 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 lda #buffer_digits diff --git a/src/test/ref/casting.log b/src/test/ref/casting.log index 0e79411dd..83d5fabb2 100644 --- a/src/test/ref/casting.log +++ b/src/test/ref/casting.log @@ -413,7 +413,7 @@ main: { // main::@2 __b2: // [9] call w - // [11] phi from main::@2 to w [phi:main::@2->w] -- call_phi_near + // [11] phi from main::@2 to w [phi:main::@2->w] w_from___b2: jsr w jmp __breturn @@ -577,7 +577,7 @@ main: { // main::@2 // w() // [9] call w - // [11] phi from main::@2 to w [phi:main::@2->w] -- call_phi_near + // [11] phi from main::@2 to w [phi:main::@2->w] jsr w // main::@return // } diff --git a/src/test/ref/cbm-keyboard.log b/src/test/ref/cbm-keyboard.log index 07b7d51e5..0ffec3780 100644 --- a/src/test/ref/cbm-keyboard.log +++ b/src/test/ref/cbm-keyboard.log @@ -4473,7 +4473,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -4481,7 +4481,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -4517,7 +4517,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -4558,7 +4558,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln jmp __breturn // cputc::@return @@ -4570,7 +4570,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln jmp __breturn } @@ -4593,7 +4593,7 @@ main: { lda #toD0181_return sta VICII+OFFSET_STRUCT_MOS6569_VICII_MEMORY // [30] call clrscr - // [71] phi from main::@3 to clrscr [phi:main::@3->clrscr] -- call_phi_near + // [71] phi from main::@3 to clrscr [phi:main::@3->clrscr] clrscr_from___b3: jsr clrscr // [31] phi from main::@3 to main::@1 [phi:main::@3->main::@1] @@ -4609,7 +4609,7 @@ main: { jmp __b1 // main::@1 __b1: - // [32] call GETIN -- call_phi_near + // [32] call GETIN jsr GETIN // [33] GETIN::return#0 = GETIN::return#1 jmp __b4 @@ -4634,7 +4634,7 @@ main: { __b2: // [37] petscii_to_screencode::petscii#0 = main::ch#0 -- vbuaa=vbuz1 lda.z ch - // [38] call petscii_to_screencode -- call_phi_near + // [38] call petscii_to_screencode jsr petscii_to_screencode // [39] petscii_to_screencode::return#0 = petscii_to_screencode::return#10 jmp __b5 @@ -4650,7 +4650,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = main::s [phi:main::@5->printf_str#1] -- call_phi_near + // [103] phi printf_str::s#6 = main::s [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -4674,7 +4674,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = main::s1 [phi:main::@6->printf_str#1] -- call_phi_near + // [103] phi printf_str::s#6 = main::s1 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -4686,7 +4686,7 @@ main: { // [46] printf_uchar::uvalue#0 = main::ch#0 -- vbuxx=vbuz1 ldx.z ch // [47] call printf_uchar - // [112] phi from main::@7 to printf_uchar [phi:main::@7->printf_uchar] -- call_phi_near + // [112] phi from main::@7 to printf_uchar [phi:main::@7->printf_uchar] printf_uchar_from___b7: jsr printf_uchar // [48] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -4702,7 +4702,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = main::s2 [phi:main::@8->printf_str#1] -- call_phi_near + // [103] phi printf_str::s#6 = main::s2 [phi:main::@8->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -4847,7 +4847,7 @@ cputln: { sta.z conio_cursor_x // [68] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [69] call cscroll -- call_phi_near + // [69] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -5115,7 +5115,7 @@ printf_uchar: { // [114] uctoa::value#1 = printf_uchar::uvalue#0 // [115] call uctoa // Format number into buffer - // [132] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] -- call_phi_near + // [132] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] uctoa_from___b1: jsr uctoa jmp __b2 @@ -5126,7 +5126,7 @@ printf_uchar: { sta.z printf_number_buffer.buffer_sign // [117] call printf_number_buffer // Print using format - // [151] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] -- call_phi_near + // [151] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] printf_number_buffer_from___b2: jsr printf_number_buffer jmp __breturn @@ -5155,7 +5155,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [174] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [174] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -5174,7 +5174,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [174] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [174] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -5190,7 +5190,7 @@ cscroll: { memset_from___b3: // [184] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [184] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [184] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -5206,7 +5206,7 @@ cscroll: { memset_from___b4: // [184] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [184] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [184] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -5332,7 +5332,7 @@ uctoa: { // [145] uctoa_append::value#0 = uctoa::value#2 // [146] uctoa_append::sub#0 = uctoa::digit_value#0 // [147] call uctoa_append - // [192] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near + // [192] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] uctoa_append_from___b5: jsr uctoa_append // [148] uctoa_append::return#0 = uctoa_append::value#2 @@ -5368,7 +5368,7 @@ printf_number_buffer: { // printf_number_buffer::@4 __b4: // [153] call strlen - // [199] phi from printf_number_buffer::@4 to strlen [phi:printf_number_buffer::@4->strlen] -- call_phi_near + // [199] phi from printf_number_buffer::@4 to strlen [phi:printf_number_buffer::@4->strlen] strlen_from___b4: jsr strlen // [154] strlen::return#2 = strlen::len#2 @@ -5430,7 +5430,7 @@ printf_number_buffer: { // [165] printf_padding::length#0 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuaa sta.z printf_padding.length // [166] call printf_padding - // [205] phi from printf_number_buffer::@6 to printf_padding [phi:printf_number_buffer::@6->printf_padding] -- call_phi_near + // [205] phi from printf_number_buffer::@6 to printf_padding [phi:printf_number_buffer::@6->printf_padding] printf_padding_from___b6: jsr printf_padding jmp __b2 @@ -5463,7 +5463,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>printf_uchar.putc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@3->printf_str#1] -- call_phi_near + // [103] phi printf_str::s#6 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@3->printf_str#1] -- pbuz1=pbuc1 lda #buffer_digits @@ -6310,12 +6310,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [8] return @@ -6344,7 +6344,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy // conio_c64_init::@return // } @@ -6383,7 +6383,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln // cputc::@return __breturn: @@ -6394,7 +6394,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln rts } @@ -6414,7 +6414,7 @@ main: { sta VICII+OFFSET_STRUCT_MOS6569_VICII_MEMORY // clrscr() // [30] call clrscr - // [71] phi from main::@3 to clrscr [phi:main::@3->clrscr] -- call_phi_near + // [71] phi from main::@3 to clrscr [phi:main::@3->clrscr] jsr clrscr // [31] phi from main::@3 to main::@1 [phi:main::@3->main::@1] // [31] phi main::current#2 = 0 [phi:main::@3->main::@1#0] -- vbuz1=vbuc1 @@ -6425,7 +6425,7 @@ main: { // main::@1 __b1: // char ch = GETIN() - // [32] call GETIN -- call_phi_near + // [32] call GETIN jsr GETIN // [33] GETIN::return#0 = GETIN::return#1 // main::@4 @@ -6445,7 +6445,7 @@ main: { // petscii_to_screencode(ch) // [37] petscii_to_screencode::petscii#0 = main::ch#0 -- vbuaa=vbuz1 lda.z ch - // [38] call petscii_to_screencode -- call_phi_near + // [38] call petscii_to_screencode jsr petscii_to_screencode // [39] petscii_to_screencode::return#0 = petscii_to_screencode::return#10 // main::@5 @@ -6459,7 +6459,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = main::s [phi:main::@5->printf_str#1] -- call_phi_near + // [103] phi printf_str::s#6 = main::s [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -6481,7 +6481,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = main::s1 [phi:main::@6->printf_str#1] -- call_phi_near + // [103] phi printf_str::s#6 = main::s1 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -6492,7 +6492,7 @@ main: { // [46] printf_uchar::uvalue#0 = main::ch#0 -- vbuxx=vbuz1 ldx.z ch // [47] call printf_uchar - // [112] phi from main::@7 to printf_uchar [phi:main::@7->printf_uchar] -- call_phi_near + // [112] phi from main::@7 to printf_uchar [phi:main::@7->printf_uchar] jsr printf_uchar // [48] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 @@ -6504,7 +6504,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = main::s2 [phi:main::@8->printf_str#1] -- call_phi_near + // [103] phi printf_str::s#6 = main::s2 [phi:main::@8->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -6650,7 +6650,7 @@ cputln: { // [68] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [69] call cscroll -- call_phi_near + // [69] call cscroll jsr cscroll // cputln::@return // } @@ -6910,7 +6910,7 @@ printf_uchar: { // [114] uctoa::value#1 = printf_uchar::uvalue#0 // [115] call uctoa // Format number into buffer - // [132] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] -- call_phi_near + // [132] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] jsr uctoa // printf_uchar::@2 // printf_number_buffer(putc, printf_buffer, format) @@ -6919,7 +6919,7 @@ printf_uchar: { sta.z printf_number_buffer.buffer_sign // [117] call printf_number_buffer // Print using format - // [151] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] -- call_phi_near + // [151] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] jsr printf_number_buffer // printf_uchar::@return // } @@ -6944,7 +6944,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [174] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [174] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -6960,7 +6960,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [174] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [174] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -6973,7 +6973,7 @@ cscroll: { // [184] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [184] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [184] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [184] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -6986,7 +6986,7 @@ cscroll: { // [184] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [184] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [184] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [184] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -7110,7 +7110,7 @@ uctoa: { // [145] uctoa_append::value#0 = uctoa::value#2 // [146] uctoa_append::sub#0 = uctoa::digit_value#0 // [147] call uctoa_append - // [192] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near + // [192] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] jsr uctoa_append // uctoa_append(buffer++, value, digit_value) // [148] uctoa_append::return#0 = uctoa_append::value#2 @@ -7143,7 +7143,7 @@ printf_number_buffer: { // printf_number_buffer::@4 // strlen(buffer.digits) // [153] call strlen - // [199] phi from printf_number_buffer::@4 to strlen [phi:printf_number_buffer::@4->strlen] -- call_phi_near + // [199] phi from printf_number_buffer::@4 to strlen [phi:printf_number_buffer::@4->strlen] jsr strlen // strlen(buffer.digits) // [154] strlen::return#2 = strlen::len#2 @@ -7196,7 +7196,7 @@ printf_number_buffer: { // [165] printf_padding::length#0 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuaa sta.z printf_padding.length // [166] call printf_padding - // [205] phi from printf_number_buffer::@6 to printf_padding [phi:printf_number_buffer::@6->printf_padding] -- call_phi_near + // [205] phi from printf_number_buffer::@6 to printf_padding [phi:printf_number_buffer::@6->printf_padding] jsr printf_padding // printf_number_buffer::@2 __b2: @@ -7223,7 +7223,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>printf_uchar.putc sta.z printf_str.putc+1 - // [103] phi printf_str::s#6 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@3->printf_str#1] -- call_phi_near + // [103] phi printf_str::s#6 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@3->printf_str#1] -- pbuz1=pbuc1 lda #buffer_digits diff --git a/src/test/ref/cia-timer-cyclecount.log b/src/test/ref/cia-timer-cyclecount.log index 825e359ca..d0f1acec5 100644 --- a/src/test/ref/cia-timer-cyclecount.log +++ b/src/test/ref/cia-timer-cyclecount.log @@ -694,7 +694,7 @@ main: { jmp __b1 // main::@1 __b1: - // [2] call clock_start -- call_phi_near + // [2] call clock_start // Reset & start the CIA#2 timer A+B jsr clock_start jmp __b2 @@ -702,7 +702,7 @@ main: { __b2: // asm { nop } nop - // [4] call clock -- call_phi_near + // [4] call clock jsr clock // [5] clock::return#2 = clock::return#0 jmp __b3 @@ -725,7 +725,7 @@ main: { sbc #>CLOCKS_PER_INIT>>$10 sta.z cyclecount+3 // [8] print_ulong_at::dw#0 = main::cyclecount#0 - // [9] call print_ulong_at -- call_phi_near + // [9] call print_ulong_at // Print cycle count jsr print_ulong_at jmp __b1_from___b3 @@ -813,7 +813,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN sta.z print_uint_at.at+1 - // [25] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- call_phi_near + // [25] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- register_copy jsr print_uint_at jmp __b1 // print_ulong_at::@1 @@ -831,7 +831,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN+4 sta.z print_uint_at.at+1 - // [25] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- call_phi_near + // [25] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- register_copy jsr print_uint_at jmp __breturn // print_ulong_at::@return @@ -853,7 +853,7 @@ print_uint_at: { // [33] phi from print_uint_at to print_uchar_at [phi:print_uint_at->print_uchar_at] print_uchar_at_from_print_uint_at: // [33] phi print_uchar_at::at#2 = print_uchar_at::at#0 [phi:print_uint_at->print_uchar_at#0] -- register_copy - // [33] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- call_phi_near + // [33] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- register_copy jsr print_uchar_at jmp __b1 // print_uint_at::@1 @@ -873,7 +873,7 @@ print_uint_at: { // [33] phi from print_uint_at::@1 to print_uchar_at [phi:print_uint_at::@1->print_uchar_at] print_uchar_at_from___b1: // [33] phi print_uchar_at::at#2 = print_uchar_at::at#1 [phi:print_uint_at::@1->print_uchar_at#0] -- register_copy - // [33] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- call_phi_near + // [33] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- register_copy jsr print_uchar_at jmp __breturn // print_uint_at::@return @@ -906,7 +906,7 @@ print_uchar_at: { // [43] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at] print_char_at_from_print_uchar_at: // [43] phi print_char_at::at#2 = print_char_at::at#0 [phi:print_uchar_at->print_char_at#0] -- register_copy - // [43] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- call_phi_near + // [43] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- register_copy jsr print_char_at jmp __b1 // print_uchar_at::@1 @@ -929,7 +929,7 @@ print_uchar_at: { // [43] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at] print_char_at_from___b1: // [43] phi print_char_at::at#2 = print_char_at::at#1 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy - // [43] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- call_phi_near + // [43] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy jsr print_char_at jmp __breturn // print_uchar_at::@return @@ -1097,7 +1097,7 @@ main: { // main::@1 __b1: // clock_start() - // [2] call clock_start -- call_phi_near + // [2] call clock_start // Reset & start the CIA#2 timer A+B jsr clock_start // main::@2 @@ -1105,7 +1105,7 @@ main: { // asm { nop } nop // clock() - // [4] call clock -- call_phi_near + // [4] call clock jsr clock // [5] clock::return#2 = clock::return#0 // main::@3 @@ -1128,7 +1128,7 @@ main: { sta.z cyclecount+3 // print_ulong_at(cyclecount, SCREEN) // [8] print_ulong_at::dw#0 = main::cyclecount#0 - // [9] call print_ulong_at -- call_phi_near + // [9] call print_ulong_at // Print cycle count jsr print_ulong_at jmp __b1 @@ -1222,7 +1222,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN sta.z print_uint_at.at+1 - // [25] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- call_phi_near + // [25] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- register_copy jsr print_uint_at // print_ulong_at::@1 // print_uint_at(WORD0(dw), at+4) @@ -1238,7 +1238,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN+4 sta.z print_uint_at.at+1 - // [25] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- call_phi_near + // [25] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- register_copy jsr print_uint_at // print_ulong_at::@return // } @@ -1259,7 +1259,7 @@ print_uint_at: { // [28] call print_uchar_at // [33] phi from print_uint_at to print_uchar_at [phi:print_uint_at->print_uchar_at] // [33] phi print_uchar_at::at#2 = print_uchar_at::at#0 [phi:print_uint_at->print_uchar_at#0] -- register_copy - // [33] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- call_phi_near + // [33] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- register_copy jsr print_uchar_at // print_uint_at::@1 // print_uchar_at(BYTE0(w), at+2) @@ -1277,7 +1277,7 @@ print_uint_at: { // [31] call print_uchar_at // [33] phi from print_uint_at::@1 to print_uchar_at [phi:print_uint_at::@1->print_uchar_at] // [33] phi print_uchar_at::at#2 = print_uchar_at::at#1 [phi:print_uint_at::@1->print_uchar_at#0] -- register_copy - // [33] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- call_phi_near + // [33] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- register_copy jsr print_uchar_at // print_uint_at::@return // } @@ -1310,7 +1310,7 @@ print_uchar_at: { // Table of hexadecimal digits // [43] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at] // [43] phi print_char_at::at#2 = print_char_at::at#0 [phi:print_uchar_at->print_char_at#0] -- register_copy - // [43] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- call_phi_near + // [43] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- register_copy jsr print_char_at // print_uchar_at::@1 // b&$f @@ -1332,7 +1332,7 @@ print_uchar_at: { // [41] call print_char_at // [43] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at] // [43] phi print_char_at::at#2 = print_char_at::at#1 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy - // [43] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- call_phi_near + // [43] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy jsr print_char_at // print_uchar_at::@return // } diff --git a/src/test/ref/cia-timer-simple.log b/src/test/ref/cia-timer-simple.log index cc00daf4c..eff475044 100644 --- a/src/test/ref/cia-timer-simple.log +++ b/src/test/ref/cia-timer-simple.log @@ -657,7 +657,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call clock_start -- call_phi_near + // [1] call clock_start // Reset & start the CIA#2 timer A+B jsr clock_start // [2] phi from main main::@2 to main::@1 [phi:main/main::@2->main::@1] @@ -666,14 +666,14 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call clock -- call_phi_near + // [3] call clock jsr clock // [4] clock::return#2 = clock::return#0 jmp __b2 // main::@2 __b2: // [5] print_ulong_at::dw#0 = clock::return#2 - // [6] call print_ulong_at -- call_phi_near + // [6] call print_ulong_at jsr print_ulong_at jmp __b1_from___b2 } @@ -760,7 +760,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN sta.z print_uint_at.at+1 - // [22] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- call_phi_near + // [22] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- register_copy jsr print_uint_at jmp __b1 // print_ulong_at::@1 @@ -778,7 +778,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN+4 sta.z print_uint_at.at+1 - // [22] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- call_phi_near + // [22] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- register_copy jsr print_uint_at jmp __breturn // print_ulong_at::@return @@ -800,7 +800,7 @@ print_uint_at: { // [30] phi from print_uint_at to print_uchar_at [phi:print_uint_at->print_uchar_at] print_uchar_at_from_print_uint_at: // [30] phi print_uchar_at::at#2 = print_uchar_at::at#0 [phi:print_uint_at->print_uchar_at#0] -- register_copy - // [30] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- call_phi_near + // [30] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- register_copy jsr print_uchar_at jmp __b1 // print_uint_at::@1 @@ -820,7 +820,7 @@ print_uint_at: { // [30] phi from print_uint_at::@1 to print_uchar_at [phi:print_uint_at::@1->print_uchar_at] print_uchar_at_from___b1: // [30] phi print_uchar_at::at#2 = print_uchar_at::at#1 [phi:print_uint_at::@1->print_uchar_at#0] -- register_copy - // [30] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- call_phi_near + // [30] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- register_copy jsr print_uchar_at jmp __breturn // print_uint_at::@return @@ -853,7 +853,7 @@ print_uchar_at: { // [40] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at] print_char_at_from_print_uchar_at: // [40] phi print_char_at::at#2 = print_char_at::at#0 [phi:print_uchar_at->print_char_at#0] -- register_copy - // [40] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- call_phi_near + // [40] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- register_copy jsr print_char_at jmp __b1 // print_uchar_at::@1 @@ -876,7 +876,7 @@ print_uchar_at: { // [40] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at] print_char_at_from___b1: // [40] phi print_char_at::at#2 = print_char_at::at#1 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy - // [40] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- call_phi_near + // [40] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy jsr print_char_at jmp __breturn // print_uchar_at::@return @@ -1030,20 +1030,20 @@ Score: 467 // main main: { // clock_start() - // [1] call clock_start -- call_phi_near + // [1] call clock_start // Reset & start the CIA#2 timer A+B jsr clock_start // [2] phi from main main::@2 to main::@1 [phi:main/main::@2->main::@1] // main::@1 __b1: // clock() - // [3] call clock -- call_phi_near + // [3] call clock jsr clock // [4] clock::return#2 = clock::return#0 // main::@2 // print_ulong_at(clock(), SCREEN) // [5] print_ulong_at::dw#0 = clock::return#2 - // [6] call print_ulong_at -- call_phi_near + // [6] call print_ulong_at jsr print_ulong_at jmp __b1 } @@ -1136,7 +1136,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN sta.z print_uint_at.at+1 - // [22] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- call_phi_near + // [22] phi print_uint_at::w#2 = print_uint_at::w#0 [phi:print_ulong_at->print_uint_at#1] -- register_copy jsr print_uint_at // print_ulong_at::@1 // print_uint_at(WORD0(dw), at+4) @@ -1152,7 +1152,7 @@ print_ulong_at: { sta.z print_uint_at.at lda #>SCREEN+4 sta.z print_uint_at.at+1 - // [22] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- call_phi_near + // [22] phi print_uint_at::w#2 = print_uint_at::w#1 [phi:print_ulong_at::@1->print_uint_at#1] -- register_copy jsr print_uint_at // print_ulong_at::@return // } @@ -1173,7 +1173,7 @@ print_uint_at: { // [25] call print_uchar_at // [30] phi from print_uint_at to print_uchar_at [phi:print_uint_at->print_uchar_at] // [30] phi print_uchar_at::at#2 = print_uchar_at::at#0 [phi:print_uint_at->print_uchar_at#0] -- register_copy - // [30] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- call_phi_near + // [30] phi print_uchar_at::b#2 = print_uchar_at::b#0 [phi:print_uint_at->print_uchar_at#1] -- register_copy jsr print_uchar_at // print_uint_at::@1 // print_uchar_at(BYTE0(w), at+2) @@ -1191,7 +1191,7 @@ print_uint_at: { // [28] call print_uchar_at // [30] phi from print_uint_at::@1 to print_uchar_at [phi:print_uint_at::@1->print_uchar_at] // [30] phi print_uchar_at::at#2 = print_uchar_at::at#1 [phi:print_uint_at::@1->print_uchar_at#0] -- register_copy - // [30] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- call_phi_near + // [30] phi print_uchar_at::b#2 = print_uchar_at::b#1 [phi:print_uint_at::@1->print_uchar_at#1] -- register_copy jsr print_uchar_at // print_uint_at::@return // } @@ -1224,7 +1224,7 @@ print_uchar_at: { // Table of hexadecimal digits // [40] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at] // [40] phi print_char_at::at#2 = print_char_at::at#0 [phi:print_uchar_at->print_char_at#0] -- register_copy - // [40] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- call_phi_near + // [40] phi print_char_at::ch#2 = print_char_at::ch#0 [phi:print_uchar_at->print_char_at#1] -- register_copy jsr print_char_at // print_uchar_at::@1 // b&$f @@ -1246,7 +1246,7 @@ print_uchar_at: { // [38] call print_char_at // [40] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at] // [40] phi print_char_at::at#2 = print_char_at::at#1 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy - // [40] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- call_phi_near + // [40] phi print_char_at::ch#2 = print_char_at::ch#1 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy jsr print_char_at // print_uchar_at::@return // } diff --git a/src/test/ref/clobber-a-problem.log b/src/test/ref/clobber-a-problem.log index d30d271a5..e5d4baccd 100644 --- a/src/test/ref/clobber-a-problem.log +++ b/src/test/ref/clobber-a-problem.log @@ -236,7 +236,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -383,7 +383,7 @@ __start: { sta.z irq_raster_next // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/complex/includes/includes-1.log b/src/test/ref/complex/includes/includes-1.log index e9853d55d..f9b16c089 100644 --- a/src/test/ref/complex/includes/includes-1.log +++ b/src/test/ref/complex/includes/includes-1.log @@ -235,7 +235,7 @@ ASSEMBLER BEFORE OPTIMIZATION main: { .label __0 = 4 // [1] call strlen - // [6] phi from main to strlen [phi:main->strlen] -- call_phi_near + // [6] phi from main to strlen [phi:main->strlen] strlen_from_main: jsr strlen // [2] strlen::return#2 = strlen::len#2 @@ -364,7 +364,7 @@ main: { .label __0 = 4 // strlen(STR) // [1] call strlen - // [6] phi from main to strlen [phi:main->strlen] -- call_phi_near + // [6] phi from main to strlen [phi:main->strlen] jsr strlen // strlen(STR) // [2] strlen::return#2 = strlen::len#2 diff --git a/src/test/ref/complex/includes/includes-2.log b/src/test/ref/complex/includes/includes-2.log index 51cbad9f1..ba9264981 100644 --- a/src/test/ref/complex/includes/includes-2.log +++ b/src/test/ref/complex/includes/includes-2.log @@ -164,7 +164,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call strlen - // [4] phi from main to strlen [phi:main->strlen] -- call_phi_near + // [4] phi from main to strlen [phi:main->strlen] strlen_from_main: jsr strlen jmp __b1 @@ -234,7 +234,7 @@ Score: 24 main: { // strlen(STR) // [1] call strlen - // [4] phi from main to strlen [phi:main->strlen] -- call_phi_near + // [4] phi from main to strlen [phi:main->strlen] jsr strlen // main::@1 // SCREEN [0] = (char) strlen(STR) diff --git a/src/test/ref/complex/xmega65/xmega65.log b/src/test/ref/complex/xmega65/xmega65.log index 82f78053f..0610788ff 100644 --- a/src/test/ref/complex/xmega65/xmega65.log +++ b/src/test/ref/complex/xmega65/xmega65.log @@ -569,7 +569,7 @@ main: { memset_from_main: // [17] phi memset::c#4 = ' ' [phi:main->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [17] phi memset::str#3 = (void *)SCREEN [phi:main->memset#1] -- call_phi_near + // [17] phi memset::str#3 = (void *)SCREEN [phi:main->memset#1] -- pvoz1=pvoc1 lda #SCREEN @@ -585,7 +585,7 @@ main: { memset_from___b6: // [17] phi memset::c#4 = WHITE [phi:main::@6->memset#0] -- vbuxx=vbuc1 ldx #WHITE - // [17] phi memset::str#3 = (void *)COLS [phi:main::@6->memset#1] -- call_phi_near + // [17] phi memset::str#3 = (void *)COLS [phi:main::@6->memset#1] -- pvoz1=pvoc1 lda #COLS @@ -866,7 +866,7 @@ main: { // [17] phi from main to memset [phi:main->memset] // [17] phi memset::c#4 = ' ' [phi:main->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [17] phi memset::str#3 = (void *)SCREEN [phi:main->memset#1] -- call_phi_near + // [17] phi memset::str#3 = (void *)SCREEN [phi:main->memset#1] -- pvoz1=pvoc1 lda #SCREEN @@ -879,7 +879,7 @@ main: { // [17] phi from main::@6 to memset [phi:main::@6->memset] // [17] phi memset::c#4 = WHITE [phi:main::@6->memset#0] -- vbuxx=vbuc1 ldx #WHITE - // [17] phi memset::str#3 = (void *)COLS [phi:main::@6->memset#1] -- call_phi_near + // [17] phi memset::str#3 = (void *)COLS [phi:main::@6->memset#1] -- pvoz1=pvoc1 lda #COLS diff --git a/src/test/ref/const-bool-return-problem.log b/src/test/ref/const-bool-return-problem.log index 8825ee589..0c1be65c9 100644 --- a/src/test/ref/const-bool-return-problem.log +++ b/src/test/ref/const-bool-return-problem.log @@ -420,7 +420,7 @@ main: { __b3: // [7] OBJ_is_solid::oy#0 = main::oy#2 -- vbuaa=vbuz1 lda.z oy - // [8] call OBJ_is_solid -- call_phi_near + // [8] call OBJ_is_solid jsr OBJ_is_solid // [9] OBJ_is_solid::return#0 = OBJ_is_solid::return#3 jmp __b7 @@ -467,7 +467,7 @@ OBJ_is_solid: { // OBJ_is_solid::@1 __b1: // [16] call tile_flag_at - // [19] phi from OBJ_is_solid::@1 to tile_flag_at [phi:OBJ_is_solid::@1->tile_flag_at] -- call_phi_near + // [19] phi from OBJ_is_solid::@1 to tile_flag_at [phi:OBJ_is_solid::@1->tile_flag_at] tile_flag_at_from___b1: jsr tile_flag_at // [17] phi from OBJ_is_solid::@1 to OBJ_is_solid::@return [phi:OBJ_is_solid::@1->OBJ_is_solid::@return] @@ -612,7 +612,7 @@ main: { // OBJ_is_solid(ox,oy) // [7] OBJ_is_solid::oy#0 = main::oy#2 -- vbuaa=vbuz1 lda.z oy - // [8] call OBJ_is_solid -- call_phi_near + // [8] call OBJ_is_solid jsr OBJ_is_solid // [9] OBJ_is_solid::return#0 = OBJ_is_solid::return#3 // main::@7 @@ -657,7 +657,7 @@ OBJ_is_solid: { __b1: // tile_flag_at() // [16] call tile_flag_at - // [19] phi from OBJ_is_solid::@1 to tile_flag_at [phi:OBJ_is_solid::@1->tile_flag_at] -- call_phi_near + // [19] phi from OBJ_is_solid::@1 to tile_flag_at [phi:OBJ_is_solid::@1->tile_flag_at] jsr tile_flag_at // [17] phi from OBJ_is_solid::@1 to OBJ_is_solid::@return [phi:OBJ_is_solid::@1->OBJ_is_solid::@return] // [17] phi OBJ_is_solid::return#3 = tile_flag_at::return#1 [phi:OBJ_is_solid::@1->OBJ_is_solid::@return#0] -- vboaa=vboc1 diff --git a/src/test/ref/const-early-identification.log b/src/test/ref/const-early-identification.log index 3a12e4591..267852183 100644 --- a/src/test/ref/const-early-identification.log +++ b/src/test/ref/const-early-identification.log @@ -206,7 +206,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -227,7 +227,7 @@ main: { // [7] *(SCREEN+2) = *main::addrA -- _deref_pbuc1=_deref_pbuc2 lda.z addrA sta SCREEN+2 - // [8] call sub -- call_phi_near + // [8] call sub jsr sub jmp __breturn // main::@return @@ -315,7 +315,7 @@ __start: { sta.z A // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return @@ -338,7 +338,7 @@ main: { lda.z addrA sta SCREEN+2 // sub() - // [8] call sub -- call_phi_near + // [8] call sub jsr sub // main::@return // } diff --git a/src/test/ref/const-identification.log b/src/test/ref/const-identification.log index bcf87ce92..c27bca22e 100644 --- a/src/test/ref/const-identification.log +++ b/src/test/ref/const-identification.log @@ -377,7 +377,7 @@ main: { // main::@2 __b2: // [7] call line - // [8] phi from main::@2 to line [phi:main::@2->line] -- call_phi_near + // [8] phi from main::@2 to line [phi:main::@2->line] line_from___b2: jsr line jmp __b2_from___b2 @@ -405,7 +405,7 @@ line: { // line::@2 __b2: // [12] plot::x#1 = line::x#2 - // [13] call plot -- call_phi_near + // [13] call plot jsr plot jmp __b3 // line::@3 @@ -535,7 +535,7 @@ main: { __b2: // line(0, 10) // [7] call line - // [8] phi from main::@2 to line [phi:main::@2->line] -- call_phi_near + // [8] phi from main::@2 to line [phi:main::@2->line] jsr line jmp __b2 } @@ -561,7 +561,7 @@ line: { __b2: // plot(x) // [12] plot::x#1 = line::x#2 - // [13] call plot -- call_phi_near + // [13] call plot jsr plot // line::@3 // for(byte x = x0; x<=x1; x++) diff --git a/src/test/ref/const-param.log b/src/test/ref/const-param.log index f950c9ac6..d169c1ccf 100644 --- a/src/test/ref/const-param.log +++ b/src/test/ref/const-param.log @@ -269,7 +269,7 @@ main: { // [1] call sum // [14] phi from main to sum [phi:main->sum] sum_from_main: - // [14] phi sum::b#3 = 'c' [phi:main->sum#0] -- call_phi_near + // [14] phi sum::b#3 = 'c' [phi:main->sum#0] -- vbuaa=vbuc1 lda #'c' jsr sum // [2] sum::return#0 = sum::return#3 @@ -282,7 +282,7 @@ main: { // [5] call sum // [14] phi from main::@1 to sum [phi:main::@1->sum] sum_from___b1: - // [14] phi sum::b#3 = 'm' [phi:main::@1->sum#0] -- call_phi_near + // [14] phi sum::b#3 = 'm' [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #'m' jsr sum // [6] sum::return#1 = sum::return#3 @@ -295,7 +295,7 @@ main: { // [9] call sum // [14] phi from main::@2 to sum [phi:main::@2->sum] sum_from___b2: - // [14] phi sum::b#3 = 'l' [phi:main::@2->sum#0] -- call_phi_near + // [14] phi sum::b#3 = 'l' [phi:main::@2->sum#0] -- vbuaa=vbuc1 lda #'l' jsr sum // [10] sum::return#2 = sum::return#3 @@ -392,7 +392,7 @@ main: { // sum(reverse, 'c') // [1] call sum // [14] phi from main to sum [phi:main->sum] - // [14] phi sum::b#3 = 'c' [phi:main->sum#0] -- call_phi_near + // [14] phi sum::b#3 = 'c' [phi:main->sum#0] -- vbuaa=vbuc1 lda #'c' jsr sum // sum(reverse, 'c') @@ -405,7 +405,7 @@ main: { // sum(reverse, 'm') // [5] call sum // [14] phi from main::@1 to sum [phi:main::@1->sum] - // [14] phi sum::b#3 = 'm' [phi:main::@1->sum#0] -- call_phi_near + // [14] phi sum::b#3 = 'm' [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #'m' jsr sum // sum(reverse, 'm') @@ -418,7 +418,7 @@ main: { // sum(reverse, 'l') // [9] call sum // [14] phi from main::@2 to sum [phi:main::@2->sum] - // [14] phi sum::b#3 = 'l' [phi:main::@2->sum#0] -- call_phi_near + // [14] phi sum::b#3 = 'l' [phi:main::@2->sum#0] -- vbuaa=vbuc1 lda #'l' jsr sum // sum(reverse, 'l') diff --git a/src/test/ref/const-volatile-problem.log b/src/test/ref/const-volatile-problem.log index d40481e85..19557408a 100644 --- a/src/test/ref/const-volatile-problem.log +++ b/src/test/ref/const-volatile-problem.log @@ -204,7 +204,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -313,7 +313,7 @@ __start: { sta.z idx // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/constants.log b/src/test/ref/constants.log index d5b216b61..b1c1bb33f 100644 --- a/src/test/ref/constants.log +++ b/src/test/ref/constants.log @@ -1647,7 +1647,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call print_cls - // [7] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [7] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls jmp __b1 @@ -1657,7 +1657,7 @@ main: { lda #GREEN sta BG_COLOR // [3] call test_bytes - // [10] phi from main::@1 to test_bytes [phi:main::@1->test_bytes] -- call_phi_near + // [10] phi from main::@1 to test_bytes [phi:main::@1->test_bytes] test_bytes_from___b1: jsr test_bytes // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -1666,7 +1666,7 @@ main: { // main::@2 __b2: // [5] call test_sbytes - // [17] phi from main::@2 to test_sbytes [phi:main::@2->test_sbytes] -- call_phi_near + // [17] phi from main::@2 to test_sbytes [phi:main::@2->test_sbytes] test_sbytes_from___b2: jsr test_sbytes jmp __breturn @@ -1679,7 +1679,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [8] call memset - // [28] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [28] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -1712,7 +1712,7 @@ test_bytes: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [34] phi assert_byte::msg#3 = msg [phi:test_bytes->assert_byte#4] -- call_phi_near + // [34] phi assert_byte::msg#3 = msg [phi:test_bytes->assert_byte#4] -- pbuz1=pbuc1 lda #msg @@ -1736,7 +1736,7 @@ test_bytes: { // [34] phi assert_byte::b#3 = test_bytes::bc#0 [phi:test_bytes::@1->assert_byte#2] -- vbuxx=vbuc1 ldx #bc // [34] phi print_char_cursor#77 = print_char_cursor#98 [phi:test_bytes::@1->assert_byte#3] -- register_copy - // [34] phi assert_byte::msg#3 = msg1 [phi:test_bytes::@1->assert_byte#4] -- call_phi_near + // [34] phi assert_byte::msg#3 = msg1 [phi:test_bytes::@1->assert_byte#4] -- pbuz1=pbuc1 lda #msg1 @@ -1760,7 +1760,7 @@ test_bytes: { // [34] phi assert_byte::b#3 = test_bytes::bd#0 [phi:test_bytes::@2->assert_byte#2] -- vbuxx=vbuc1 ldx #bd // [34] phi print_char_cursor#77 = print_char_cursor#99 [phi:test_bytes::@2->assert_byte#3] -- register_copy - // [34] phi assert_byte::msg#3 = test_bytes::msg2 [phi:test_bytes::@2->assert_byte#4] -- call_phi_near + // [34] phi assert_byte::msg#3 = test_bytes::msg2 [phi:test_bytes::@2->assert_byte#4] -- pbuz1=pbuc1 lda #msg2 @@ -1792,7 +1792,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bb [phi:test_sbytes->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bb - // [47] phi assert_sbyte::msg#5 = msg [phi:test_sbytes->assert_sbyte#2] -- call_phi_near + // [47] phi assert_sbyte::msg#5 = msg [phi:test_sbytes->assert_sbyte#2] -- pbuz1=pbuc1 lda #msg @@ -1811,7 +1811,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bc#0 [phi:test_sbytes::@1->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bc - // [47] phi assert_sbyte::msg#5 = msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- call_phi_near + // [47] phi assert_sbyte::msg#5 = msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- pbuz1=pbuc1 lda #msg1 @@ -1830,7 +1830,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bd#0 [phi:test_sbytes::@2->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bd - // [47] phi assert_sbyte::msg#5 = test_sbytes::msg2 [phi:test_sbytes::@2->assert_sbyte#2] -- call_phi_near + // [47] phi assert_sbyte::msg#5 = test_sbytes::msg2 [phi:test_sbytes::@2->assert_sbyte#2] -- pbuz1=pbuc1 lda #msg2 @@ -1849,7 +1849,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::be#0 [phi:test_sbytes::@3->assert_sbyte#1] -- vbsxx=vbsc1 ldx #be - // [47] phi assert_sbyte::msg#5 = test_sbytes::msg3 [phi:test_sbytes::@3->assert_sbyte#2] -- call_phi_near + // [47] phi assert_sbyte::msg#5 = test_sbytes::msg3 [phi:test_sbytes::@3->assert_sbyte#2] -- pbuz1=pbuc1 lda #msg3 @@ -1868,7 +1868,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bf [phi:test_sbytes::@4->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bf - // [47] phi assert_sbyte::msg#5 = test_sbytes::msg4 [phi:test_sbytes::@4->assert_sbyte#2] -- call_phi_near + // [47] phi assert_sbyte::msg#5 = test_sbytes::msg4 [phi:test_sbytes::@4->assert_sbyte#2] -- pbuz1=pbuc1 lda #msg4 @@ -1945,7 +1945,7 @@ assert_byte: { // [61] phi from assert_byte to print_str [phi:assert_byte->print_str] print_str_from_assert_byte: // [61] phi print_char_cursor#87 = print_char_cursor#77 [phi:assert_byte->print_str#0] -- register_copy - // [61] phi print_str::str#12 = print_str::str#1 [phi:assert_byte->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = print_str::str#1 [phi:assert_byte->print_str#1] -- register_copy jsr print_str // [37] phi from assert_byte to assert_byte::@4 [phi:assert_byte->assert_byte::@4] __b4_from_assert_byte: @@ -1956,7 +1956,7 @@ assert_byte: { // [61] phi from assert_byte::@4 to print_str [phi:assert_byte::@4->print_str] print_str_from___b4: // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_byte::@4->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str [phi:assert_byte::@4->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = str [phi:assert_byte::@4->print_str#1] -- pbuz1=pbuc1 lda #str @@ -1977,7 +1977,7 @@ assert_byte: { // [61] phi from assert_byte::@3 to print_str [phi:assert_byte::@3->print_str] print_str_from___b3: // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_byte::@3->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str2 [phi:assert_byte::@3->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = str2 [phi:assert_byte::@3->print_str#1] -- pbuz1=pbuc1 lda #str2 @@ -1992,7 +1992,7 @@ assert_byte: { // [43] call print_ln // [68] phi from assert_byte::@2 to print_ln [phi:assert_byte::@2->print_ln] print_ln_from___b2: - // [68] phi print_line_cursor#49 = print_line_cursor#52 [phi:assert_byte::@2->print_ln#0] -- call_phi_near + // [68] phi print_line_cursor#49 = print_line_cursor#52 [phi:assert_byte::@2->print_ln#0] -- register_copy jsr print_ln jmp __breturn // assert_byte::@return @@ -2008,7 +2008,7 @@ assert_byte: { // [61] phi from assert_byte::@1 to print_str [phi:assert_byte::@1->print_str] print_str_from___b1: // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_byte::@1->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str1 [phi:assert_byte::@1->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = str1 [phi:assert_byte::@1->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2031,7 +2031,7 @@ assert_sbyte: { // [61] phi from assert_sbyte to print_str [phi:assert_sbyte->print_str] print_str_from_assert_sbyte: // [61] phi print_char_cursor#87 = print_char_cursor#92 [phi:assert_sbyte->print_str#0] -- register_copy - // [61] phi print_str::str#12 = print_str::str#5 [phi:assert_sbyte->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = print_str::str#5 [phi:assert_sbyte->print_str#1] -- register_copy jsr print_str // [51] phi from assert_sbyte to assert_sbyte::@4 [phi:assert_sbyte->assert_sbyte::@4] __b4_from_assert_sbyte: @@ -2042,7 +2042,7 @@ assert_sbyte: { // [61] phi from assert_sbyte::@4 to print_str [phi:assert_sbyte::@4->print_str] print_str_from___b4: // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_sbyte::@4->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str [phi:assert_sbyte::@4->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = str [phi:assert_sbyte::@4->print_str#1] -- pbuz1=pbuc1 lda #str @@ -2063,7 +2063,7 @@ assert_sbyte: { // [61] phi from assert_sbyte::@3 to print_str [phi:assert_sbyte::@3->print_str] print_str_from___b3: // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_sbyte::@3->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str2 [phi:assert_sbyte::@3->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = str2 [phi:assert_sbyte::@3->print_str#1] -- pbuz1=pbuc1 lda #str2 @@ -2078,7 +2078,7 @@ assert_sbyte: { // [57] call print_ln // [68] phi from assert_sbyte::@2 to print_ln [phi:assert_sbyte::@2->print_ln] print_ln_from___b2: - // [68] phi print_line_cursor#49 = print_line_cursor#0 [phi:assert_sbyte::@2->print_ln#0] -- call_phi_near + // [68] phi print_line_cursor#49 = print_line_cursor#0 [phi:assert_sbyte::@2->print_ln#0] -- register_copy jsr print_ln jmp __breturn // assert_sbyte::@return @@ -2094,7 +2094,7 @@ assert_sbyte: { // [61] phi from assert_sbyte::@1 to print_str [phi:assert_sbyte::@1->print_str] print_str_from___b1: // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_sbyte::@1->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str1 [phi:assert_sbyte::@1->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = str1 [phi:assert_sbyte::@1->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2130,7 +2130,7 @@ print_str: { // [65] print_char::ch#0 = *print_str::str#10 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [66] call print_char -- call_phi_near + // [66] call print_char jsr print_char jmp __b3 // print_str::@3 @@ -2438,7 +2438,7 @@ Score: 1783 main: { // print_cls() // [1] call print_cls - // [7] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [7] phi from main to print_cls [phi:main->print_cls] jsr print_cls // main::@1 // *BG_COLOR = GREEN @@ -2447,13 +2447,13 @@ main: { sta BG_COLOR // test_bytes() // [3] call test_bytes - // [10] phi from main::@1 to test_bytes [phi:main::@1->test_bytes] -- call_phi_near + // [10] phi from main::@1 to test_bytes [phi:main::@1->test_bytes] jsr test_bytes // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // test_sbytes() // [5] call test_sbytes - // [17] phi from main::@2 to test_sbytes [phi:main::@2->test_sbytes] -- call_phi_near + // [17] phi from main::@2 to test_sbytes [phi:main::@2->test_sbytes] jsr test_sbytes // main::@return // } @@ -2465,7 +2465,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [8] call memset - // [28] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [28] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -2496,7 +2496,7 @@ test_bytes: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [34] phi assert_byte::msg#3 = msg [phi:test_bytes->assert_byte#4] -- call_phi_near + // [34] phi assert_byte::msg#3 = msg [phi:test_bytes->assert_byte#4] -- pbuz1=pbuc1 lda #msg @@ -2518,7 +2518,7 @@ test_bytes: { // [34] phi assert_byte::b#3 = test_bytes::bc#0 [phi:test_bytes::@1->assert_byte#2] -- vbuxx=vbuc1 ldx #bc // [34] phi print_char_cursor#77 = print_char_cursor#98 [phi:test_bytes::@1->assert_byte#3] -- register_copy - // [34] phi assert_byte::msg#3 = msg1 [phi:test_bytes::@1->assert_byte#4] -- call_phi_near + // [34] phi assert_byte::msg#3 = msg1 [phi:test_bytes::@1->assert_byte#4] -- pbuz1=pbuc1 lda #msg1 @@ -2540,7 +2540,7 @@ test_bytes: { // [34] phi assert_byte::b#3 = test_bytes::bd#0 [phi:test_bytes::@2->assert_byte#2] -- vbuxx=vbuc1 ldx #bd // [34] phi print_char_cursor#77 = print_char_cursor#99 [phi:test_bytes::@2->assert_byte#3] -- register_copy - // [34] phi assert_byte::msg#3 = test_bytes::msg2 [phi:test_bytes::@2->assert_byte#4] -- call_phi_near + // [34] phi assert_byte::msg#3 = test_bytes::msg2 [phi:test_bytes::@2->assert_byte#4] -- pbuz1=pbuc1 lda #msg2 @@ -2571,7 +2571,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bb [phi:test_sbytes->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bb - // [47] phi assert_sbyte::msg#5 = msg [phi:test_sbytes->assert_sbyte#2] -- call_phi_near + // [47] phi assert_sbyte::msg#5 = msg [phi:test_sbytes->assert_sbyte#2] -- pbuz1=pbuc1 lda #msg @@ -2587,7 +2587,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bc#0 [phi:test_sbytes::@1->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bc - // [47] phi assert_sbyte::msg#5 = msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- call_phi_near + // [47] phi assert_sbyte::msg#5 = msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- pbuz1=pbuc1 lda #msg1 @@ -2603,7 +2603,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bd#0 [phi:test_sbytes::@2->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bd - // [47] phi assert_sbyte::msg#5 = test_sbytes::msg2 [phi:test_sbytes::@2->assert_sbyte#2] -- call_phi_near + // [47] phi assert_sbyte::msg#5 = test_sbytes::msg2 [phi:test_sbytes::@2->assert_sbyte#2] -- pbuz1=pbuc1 lda #msg2 @@ -2619,7 +2619,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::be#0 [phi:test_sbytes::@3->assert_sbyte#1] -- vbsxx=vbsc1 ldx #be - // [47] phi assert_sbyte::msg#5 = test_sbytes::msg3 [phi:test_sbytes::@3->assert_sbyte#2] -- call_phi_near + // [47] phi assert_sbyte::msg#5 = test_sbytes::msg3 [phi:test_sbytes::@3->assert_sbyte#2] -- pbuz1=pbuc1 lda #msg3 @@ -2635,7 +2635,7 @@ test_sbytes: { sta.z assert_sbyte.c // [47] phi assert_sbyte::b#5 = test_sbytes::bf [phi:test_sbytes::@4->assert_sbyte#1] -- vbsxx=vbsc1 ldx #bf - // [47] phi assert_sbyte::msg#5 = test_sbytes::msg4 [phi:test_sbytes::@4->assert_sbyte#2] -- call_phi_near + // [47] phi assert_sbyte::msg#5 = test_sbytes::msg4 [phi:test_sbytes::@4->assert_sbyte#2] -- pbuz1=pbuc1 lda #msg4 @@ -2710,7 +2710,7 @@ assert_byte: { // [36] call print_str // [61] phi from assert_byte to print_str [phi:assert_byte->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#77 [phi:assert_byte->print_str#0] -- register_copy - // [61] phi print_str::str#12 = print_str::str#1 [phi:assert_byte->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = print_str::str#1 [phi:assert_byte->print_str#1] -- register_copy jsr print_str // [37] phi from assert_byte to assert_byte::@4 [phi:assert_byte->assert_byte::@4] // assert_byte::@4 @@ -2718,7 +2718,7 @@ assert_byte: { // [38] call print_str // [61] phi from assert_byte::@4 to print_str [phi:assert_byte::@4->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_byte::@4->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str [phi:assert_byte::@4->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = str [phi:assert_byte::@4->print_str#1] -- pbuz1=pbuc1 lda #str @@ -2735,7 +2735,7 @@ assert_byte: { // [41] call print_str // [61] phi from assert_byte::@3 to print_str [phi:assert_byte::@3->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_byte::@3->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str2 [phi:assert_byte::@3->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = str2 [phi:assert_byte::@3->print_str#1] -- pbuz1=pbuc1 lda #str2 @@ -2747,7 +2747,7 @@ assert_byte: { // print_ln() // [43] call print_ln // [68] phi from assert_byte::@2 to print_ln [phi:assert_byte::@2->print_ln] - // [68] phi print_line_cursor#49 = print_line_cursor#52 [phi:assert_byte::@2->print_ln#0] -- call_phi_near + // [68] phi print_line_cursor#49 = print_line_cursor#52 [phi:assert_byte::@2->print_ln#0] -- register_copy jsr print_ln // assert_byte::@return // } @@ -2763,7 +2763,7 @@ assert_byte: { // [46] call print_str // [61] phi from assert_byte::@1 to print_str [phi:assert_byte::@1->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_byte::@1->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str1 [phi:assert_byte::@1->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = str1 [phi:assert_byte::@1->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2787,7 +2787,7 @@ assert_sbyte: { // [50] call print_str // [61] phi from assert_sbyte to print_str [phi:assert_sbyte->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#92 [phi:assert_sbyte->print_str#0] -- register_copy - // [61] phi print_str::str#12 = print_str::str#5 [phi:assert_sbyte->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = print_str::str#5 [phi:assert_sbyte->print_str#1] -- register_copy jsr print_str // [51] phi from assert_sbyte to assert_sbyte::@4 [phi:assert_sbyte->assert_sbyte::@4] // assert_sbyte::@4 @@ -2795,7 +2795,7 @@ assert_sbyte: { // [52] call print_str // [61] phi from assert_sbyte::@4 to print_str [phi:assert_sbyte::@4->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_sbyte::@4->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str [phi:assert_sbyte::@4->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = str [phi:assert_sbyte::@4->print_str#1] -- pbuz1=pbuc1 lda #str @@ -2812,7 +2812,7 @@ assert_sbyte: { // [55] call print_str // [61] phi from assert_sbyte::@3 to print_str [phi:assert_sbyte::@3->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_sbyte::@3->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str2 [phi:assert_sbyte::@3->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = str2 [phi:assert_sbyte::@3->print_str#1] -- pbuz1=pbuc1 lda #str2 @@ -2824,7 +2824,7 @@ assert_sbyte: { // print_ln() // [57] call print_ln // [68] phi from assert_sbyte::@2 to print_ln [phi:assert_sbyte::@2->print_ln] - // [68] phi print_line_cursor#49 = print_line_cursor#0 [phi:assert_sbyte::@2->print_ln#0] -- call_phi_near + // [68] phi print_line_cursor#49 = print_line_cursor#0 [phi:assert_sbyte::@2->print_ln#0] -- register_copy jsr print_ln // assert_sbyte::@return // } @@ -2840,7 +2840,7 @@ assert_sbyte: { // [60] call print_str // [61] phi from assert_sbyte::@1 to print_str [phi:assert_sbyte::@1->print_str] // [61] phi print_char_cursor#87 = print_char_cursor#1 [phi:assert_sbyte::@1->print_str#0] -- register_copy - // [61] phi print_str::str#12 = str1 [phi:assert_sbyte::@1->print_str#1] -- call_phi_near + // [61] phi print_str::str#12 = str1 [phi:assert_sbyte::@1->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2874,7 +2874,7 @@ print_str: { // [65] print_char::ch#0 = *print_str::str#10 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [66] call print_char -- call_phi_near + // [66] call print_char jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/constref-not-literal-problem.log b/src/test/ref/constref-not-literal-problem.log index 5e11f1540..4068dc7e4 100644 --- a/src/test/ref/constref-not-literal-problem.log +++ b/src/test/ref/constref-not-literal-problem.log @@ -180,7 +180,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call copy -- call_phi_near + // [1] call copy jsr copy jmp __breturn // main::@return @@ -267,7 +267,7 @@ Score: 41 // main main: { // copy(B, A) - // [1] call copy -- call_phi_near + // [1] call copy jsr copy // main::@return // } diff --git a/src/test/ref/cordic-atan2-16.log b/src/test/ref/cordic-atan2-16.log index 42ef0d493..02d896823 100644 --- a/src/test/ref/cordic-atan2-16.log +++ b/src/test/ref/cordic-atan2-16.log @@ -1758,7 +1758,7 @@ main: { .label x = $f .label y = $17 // [1] call init_font_hex - // [22] phi from main to init_font_hex [phi:main->init_font_hex] -- call_phi_near + // [22] phi from main to init_font_hex [phi:main->init_font_hex] init_font_hex_from_main: jsr init_font_hex // [2] phi from main to main::toD0181 [phi:main->main::toD0181] @@ -1816,7 +1816,7 @@ main: { sta.z yw // [8] atan2_16::x#0 = (int)main::xw#0 // [9] atan2_16::y#0 = (int)main::yw#0 - // [10] call atan2_16 -- call_phi_near + // [10] call atan2_16 jsr atan2_16 // [11] atan2_16::return#2 = atan2_16::return#0 jmp __b6 @@ -2636,7 +2636,7 @@ main: { .label y = $17 // init_font_hex(CHARSET) // [1] call init_font_hex - // [22] phi from main to init_font_hex [phi:main->init_font_hex] -- call_phi_near + // [22] phi from main to init_font_hex [phi:main->init_font_hex] jsr init_font_hex // [2] phi from main to main::toD0181 [phi:main->main::toD0181] // main::toD0181 @@ -2683,7 +2683,7 @@ main: { // word angle_w = atan2_16(xw, yw) // [8] atan2_16::x#0 = (int)main::xw#0 // [9] atan2_16::y#0 = (int)main::yw#0 - // [10] call atan2_16 -- call_phi_near + // [10] call atan2_16 jsr atan2_16 // [11] atan2_16::return#2 = atan2_16::return#0 // main::@6 diff --git a/src/test/ref/cordic-atan2-clear.log b/src/test/ref/cordic-atan2-clear.log index 827cd2778..9f4227d9a 100644 --- a/src/test/ref/cordic-atan2-clear.log +++ b/src/test/ref/cordic-atan2-clear.log @@ -2027,7 +2027,7 @@ main: { // Clear the screen by modifying the charset .label clear_char = $18 // [1] call init_font_hex - // [10] phi from main to init_font_hex [phi:main->init_font_hex] -- call_phi_near + // [10] phi from main to init_font_hex [phi:main->init_font_hex] init_font_hex_from_main: jsr init_font_hex // [2] phi from main to main::toD0181 [phi:main->main::toD0181] @@ -2042,7 +2042,7 @@ main: { lda #toD0181_return sta D018 // [4] call init_angle_screen - // [33] phi from main::@5 to init_angle_screen [phi:main::@5->init_angle_screen] -- call_phi_near + // [33] phi from main::@5 to init_angle_screen [phi:main::@5->init_angle_screen] init_angle_screen_from___b5: jsr init_angle_screen // [5] phi from main::@5 to main::@1 [phi:main::@5->main::@1] @@ -2357,7 +2357,7 @@ init_angle_screen: { sty.z yw // [47] atan2_16::x#0 = (int)init_angle_screen::xw#0 // [48] atan2_16::y#0 = (int)init_angle_screen::yw#0 - // [49] call atan2_16 -- call_phi_near + // [49] call atan2_16 jsr atan2_16 // [50] atan2_16::return#2 = atan2_16::return#0 jmp __b5 @@ -3059,7 +3059,7 @@ main: { .label clear_char = $18 // init_font_hex(CHARSET) // [1] call init_font_hex - // [10] phi from main to init_font_hex [phi:main->init_font_hex] -- call_phi_near + // [10] phi from main to init_font_hex [phi:main->init_font_hex] jsr init_font_hex // [2] phi from main to main::toD0181 [phi:main->main::toD0181] // main::toD0181 @@ -3070,7 +3070,7 @@ main: { sta D018 // init_angle_screen(SCREEN) // [4] call init_angle_screen - // [33] phi from main::@5 to init_angle_screen [phi:main::@5->init_angle_screen] -- call_phi_near + // [33] phi from main::@5 to init_angle_screen [phi:main::@5->init_angle_screen] jsr init_angle_screen // [5] phi from main::@5 to main::@1 [phi:main::@5->main::@1] // [5] phi main::clear_char#5 = CHARSET [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 @@ -3373,7 +3373,7 @@ init_angle_screen: { // word angle_w = atan2_16(xw, yw) // [47] atan2_16::x#0 = (int)init_angle_screen::xw#0 // [48] atan2_16::y#0 = (int)init_angle_screen::yw#0 - // [49] call atan2_16 -- call_phi_near + // [49] call atan2_16 jsr atan2_16 // [50] atan2_16::return#2 = atan2_16::return#0 // init_angle_screen::@5 diff --git a/src/test/ref/cordic-atan2.log b/src/test/ref/cordic-atan2.log index c4712c1a2..2e53e0d27 100644 --- a/src/test/ref/cordic-atan2.log +++ b/src/test/ref/cordic-atan2.log @@ -1440,7 +1440,7 @@ main: { .label x = $c .label y = $d // [1] call init_font_hex - // [18] phi from main to init_font_hex [phi:main->init_font_hex] -- call_phi_near + // [18] phi from main to init_font_hex [phi:main->init_font_hex] init_font_hex_from_main: jsr init_font_hex // [2] phi from main to main::toD0181 [phi:main->main::toD0181] @@ -1488,7 +1488,7 @@ main: { __b2: // [6] atan2_8::x#0 = main::x#2 // [7] atan2_8::y#0 = main::y#4 - // [8] call atan2_8 -- call_phi_near + // [8] call atan2_8 jsr atan2_8 // [9] atan2_8::return#2 = atan2_8::return#0 -- vbuaa=vbuxx txa @@ -2171,7 +2171,7 @@ main: { .label y = $d // init_font_hex(CHARSET) // [1] call init_font_hex - // [18] phi from main to init_font_hex [phi:main->init_font_hex] -- call_phi_near + // [18] phi from main to init_font_hex [phi:main->init_font_hex] jsr init_font_hex // [2] phi from main to main::toD0181 [phi:main->main::toD0181] // main::toD0181 @@ -2207,7 +2207,7 @@ main: { // byte angle = atan2_8(x, y) // [6] atan2_8::x#0 = main::x#2 // [7] atan2_8::y#0 = main::y#4 - // [8] call atan2_8 -- call_phi_near + // [8] call atan2_8 jsr atan2_8 // [9] atan2_8::return#2 = atan2_8::return#0 -- vbuaa=vbuxx txa diff --git a/src/test/ref/cstyle-decl-function.log b/src/test/ref/cstyle-decl-function.log index beb959f12..85b67ab57 100644 --- a/src/test/ref/cstyle-decl-function.log +++ b/src/test/ref/cstyle-decl-function.log @@ -243,7 +243,7 @@ main: { sum_from_main: // [10] phi sum::b#2 = 2 [phi:main->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- call_phi_near + // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 ldx #'a' jsr sum // [2] sum::return#0 = sum::return#2 @@ -258,7 +258,7 @@ main: { sum_from___b1: // [10] phi sum::b#2 = $c [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #$c - // [10] phi sum::a#2 = 'a' [phi:main::@1->sum#1] -- call_phi_near + // [10] phi sum::a#2 = 'a' [phi:main::@1->sum#1] -- vbuxx=vbuc1 ldx #'a' jsr sum // [6] sum::return#1 = sum::return#2 @@ -353,7 +353,7 @@ main: { // [10] phi from main to sum [phi:main->sum] // [10] phi sum::b#2 = 2 [phi:main->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- call_phi_near + // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 ldx #'a' jsr sum // sum('a', 2) @@ -368,7 +368,7 @@ main: { // [10] phi from main::@1 to sum [phi:main::@1->sum] // [10] phi sum::b#2 = $c [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #$c - // [10] phi sum::a#2 = 'a' [phi:main::@1->sum#1] -- call_phi_near + // [10] phi sum::a#2 = 'a' [phi:main::@1->sum#1] -- vbuxx=vbuc1 ldx #'a' jsr sum // sum('a', 12) diff --git a/src/test/ref/declared-memory-var-6.log b/src/test/ref/declared-memory-var-6.log index b629987ff..5a8d4a8da 100644 --- a/src/test/ref/declared-memory-var-6.log +++ b/src/test/ref/declared-memory-var-6.log @@ -438,7 +438,7 @@ main: { out_from_main: // [24] phi i#27 = 0 [phi:main->out#0] -- vbuyy=vbuc1 ldy #0 - // [24] phi out::c#10 = main::reg_zp_flex [phi:main->out#1] -- call_phi_near + // [24] phi out::c#10 = main::reg_zp_flex [phi:main->out#1] -- vbuxx=vbuc1 ldx #reg_zp_flex jsr out jmp __b1 @@ -450,7 +450,7 @@ main: { // [24] phi from main::@1 to out [phi:main::@1->out] out_from___b1: // [24] phi i#27 = i#11 [phi:main::@1->out#0] -- register_copy - // [24] phi out::c#10 = out::c#1 [phi:main::@1->out#1] -- call_phi_near + // [24] phi out::c#10 = out::c#1 [phi:main::@1->out#1] -- register_copy jsr out // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -461,7 +461,7 @@ main: { // [24] phi from main::@2 to out [phi:main::@2->out] out_from___b2: // [24] phi i#27 = i#11 [phi:main::@2->out#0] -- register_copy - // [24] phi out::c#10 = main::reg_mem_flex [phi:main::@2->out#1] -- call_phi_near + // [24] phi out::c#10 = main::reg_mem_flex [phi:main::@2->out#1] -- vbuxx=vbuc1 ldx #reg_mem_flex jsr out jmp __b3 @@ -473,7 +473,7 @@ main: { // [24] phi from main::@3 to out [phi:main::@3->out] out_from___b3: // [24] phi i#27 = i#11 [phi:main::@3->out#0] -- register_copy - // [24] phi out::c#10 = out::c#3 [phi:main::@3->out#1] -- call_phi_near + // [24] phi out::c#10 = out::c#3 [phi:main::@3->out#1] -- register_copy jsr out // [11] phi from main::@3 to main::@4 [phi:main::@3->main::@4] __b4_from___b3: @@ -484,7 +484,7 @@ main: { // [24] phi from main::@4 to out [phi:main::@4->out] out_from___b4: // [24] phi i#27 = i#11 [phi:main::@4->out#0] -- register_copy - // [24] phi out::c#10 = main::default_default [phi:main::@4->out#1] -- call_phi_near + // [24] phi out::c#10 = main::default_default [phi:main::@4->out#1] -- vbuxx=vbuc1 ldx #default_default jsr out // [13] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -496,7 +496,7 @@ main: { // [24] phi from main::@5 to out [phi:main::@5->out] out_from___b5: // [24] phi i#27 = i#11 [phi:main::@5->out#0] -- register_copy - // [24] phi out::c#10 = main::reg_default [phi:main::@5->out#1] -- call_phi_near + // [24] phi out::c#10 = main::reg_default [phi:main::@5->out#1] -- vbuxx=vbuc1 ldx #reg_default jsr out // [15] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -508,7 +508,7 @@ main: { // [24] phi from main::@6 to out [phi:main::@6->out] out_from___b6: // [24] phi i#27 = i#11 [phi:main::@6->out#0] -- register_copy - // [24] phi out::c#10 = main::default_zp_flex [phi:main::@6->out#1] -- call_phi_near + // [24] phi out::c#10 = main::default_zp_flex [phi:main::@6->out#1] -- vbuxx=vbuc1 ldx #default_zp_flex jsr out jmp __b7 @@ -520,7 +520,7 @@ main: { // [24] phi from main::@7 to out [phi:main::@7->out] out_from___b7: // [24] phi i#27 = i#11 [phi:main::@7->out#0] -- register_copy - // [24] phi out::c#10 = out::c#7 [phi:main::@7->out#1] -- call_phi_near + // [24] phi out::c#10 = out::c#7 [phi:main::@7->out#1] -- register_copy jsr out // [19] phi from main::@7 to main::@8 [phi:main::@7->main::@8] __b8_from___b7: @@ -531,7 +531,7 @@ main: { // [24] phi from main::@8 to out [phi:main::@8->out] out_from___b8: // [24] phi i#27 = i#11 [phi:main::@8->out#0] -- register_copy - // [24] phi out::c#10 = main::default_mem_flex [phi:main::@8->out#1] -- call_phi_near + // [24] phi out::c#10 = main::default_mem_flex [phi:main::@8->out#1] -- vbuxx=vbuc1 ldx #default_mem_flex jsr out jmp __b9 @@ -543,7 +543,7 @@ main: { // [24] phi from main::@9 to out [phi:main::@9->out] out_from___b9: // [24] phi i#27 = i#11 [phi:main::@9->out#0] -- register_copy - // [24] phi out::c#10 = out::c#9 [phi:main::@9->out#1] -- call_phi_near + // [24] phi out::c#10 = out::c#9 [phi:main::@9->out#1] -- register_copy jsr out jmp __breturn // main::@return @@ -694,7 +694,7 @@ main: { // [24] phi from main to out [phi:main->out] // [24] phi i#27 = 0 [phi:main->out#0] -- vbuyy=vbuc1 ldy #0 - // [24] phi out::c#10 = main::reg_zp_flex [phi:main->out#1] -- call_phi_near + // [24] phi out::c#10 = main::reg_zp_flex [phi:main->out#1] -- vbuxx=vbuc1 ldx #reg_zp_flex jsr out // main::@1 @@ -704,7 +704,7 @@ main: { // [6] call out // [24] phi from main::@1 to out [phi:main::@1->out] // [24] phi i#27 = i#11 [phi:main::@1->out#0] -- register_copy - // [24] phi out::c#10 = out::c#1 [phi:main::@1->out#1] -- call_phi_near + // [24] phi out::c#10 = out::c#1 [phi:main::@1->out#1] -- register_copy jsr out // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 @@ -712,7 +712,7 @@ main: { // [8] call out // [24] phi from main::@2 to out [phi:main::@2->out] // [24] phi i#27 = i#11 [phi:main::@2->out#0] -- register_copy - // [24] phi out::c#10 = main::reg_mem_flex [phi:main::@2->out#1] -- call_phi_near + // [24] phi out::c#10 = main::reg_mem_flex [phi:main::@2->out#1] -- vbuxx=vbuc1 ldx #reg_mem_flex jsr out // main::@3 @@ -722,7 +722,7 @@ main: { // [10] call out // [24] phi from main::@3 to out [phi:main::@3->out] // [24] phi i#27 = i#11 [phi:main::@3->out#0] -- register_copy - // [24] phi out::c#10 = out::c#3 [phi:main::@3->out#1] -- call_phi_near + // [24] phi out::c#10 = out::c#3 [phi:main::@3->out#1] -- register_copy jsr out // [11] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 @@ -730,7 +730,7 @@ main: { // [12] call out // [24] phi from main::@4 to out [phi:main::@4->out] // [24] phi i#27 = i#11 [phi:main::@4->out#0] -- register_copy - // [24] phi out::c#10 = main::default_default [phi:main::@4->out#1] -- call_phi_near + // [24] phi out::c#10 = main::default_default [phi:main::@4->out#1] -- vbuxx=vbuc1 ldx #default_default jsr out // [13] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -739,7 +739,7 @@ main: { // [14] call out // [24] phi from main::@5 to out [phi:main::@5->out] // [24] phi i#27 = i#11 [phi:main::@5->out#0] -- register_copy - // [24] phi out::c#10 = main::reg_default [phi:main::@5->out#1] -- call_phi_near + // [24] phi out::c#10 = main::reg_default [phi:main::@5->out#1] -- vbuxx=vbuc1 ldx #reg_default jsr out // [15] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -748,7 +748,7 @@ main: { // [16] call out // [24] phi from main::@6 to out [phi:main::@6->out] // [24] phi i#27 = i#11 [phi:main::@6->out#0] -- register_copy - // [24] phi out::c#10 = main::default_zp_flex [phi:main::@6->out#1] -- call_phi_near + // [24] phi out::c#10 = main::default_zp_flex [phi:main::@6->out#1] -- vbuxx=vbuc1 ldx #default_zp_flex jsr out // main::@7 @@ -758,7 +758,7 @@ main: { // [18] call out // [24] phi from main::@7 to out [phi:main::@7->out] // [24] phi i#27 = i#11 [phi:main::@7->out#0] -- register_copy - // [24] phi out::c#10 = out::c#7 [phi:main::@7->out#1] -- call_phi_near + // [24] phi out::c#10 = out::c#7 [phi:main::@7->out#1] -- register_copy jsr out // [19] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 @@ -766,7 +766,7 @@ main: { // [20] call out // [24] phi from main::@8 to out [phi:main::@8->out] // [24] phi i#27 = i#11 [phi:main::@8->out#0] -- register_copy - // [24] phi out::c#10 = main::default_mem_flex [phi:main::@8->out#1] -- call_phi_near + // [24] phi out::c#10 = main::default_mem_flex [phi:main::@8->out#1] -- vbuxx=vbuc1 ldx #default_mem_flex jsr out // main::@9 @@ -776,7 +776,7 @@ main: { // [22] call out // [24] phi from main::@9 to out [phi:main::@9->out] // [24] phi i#27 = i#11 [phi:main::@9->out#0] -- register_copy - // [24] phi out::c#10 = out::c#9 [phi:main::@9->out#1] -- call_phi_near + // [24] phi out::c#10 = out::c#9 [phi:main::@9->out#1] -- register_copy jsr out // main::@return // } diff --git a/src/test/ref/declared-memory-var-7.log b/src/test/ref/declared-memory-var-7.log index 7718eb181..943be5261 100644 --- a/src/test/ref/declared-memory-var-7.log +++ b/src/test/ref/declared-memory-var-7.log @@ -181,7 +181,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -287,7 +287,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return diff --git a/src/test/ref/declared-memory-var-8.log b/src/test/ref/declared-memory-var-8.log index 76c66804b..f5d839898 100644 --- a/src/test/ref/declared-memory-var-8.log +++ b/src/test/ref/declared-memory-var-8.log @@ -179,7 +179,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -285,7 +285,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return diff --git a/src/test/ref/declared-ssa-var-0.log b/src/test/ref/declared-ssa-var-0.log index 2f7d9e2f8..77a968616 100644 --- a/src/test/ref/declared-ssa-var-0.log +++ b/src/test/ref/declared-ssa-var-0.log @@ -518,7 +518,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -791,7 +791,7 @@ __start: { sta.z idx_nssa_g // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/default-font.log b/src/test/ref/default-font.log index ce1a6dbd9..099802ad4 100644 --- a/src/test/ref/default-font.log +++ b/src/test/ref/default-font.log @@ -469,7 +469,7 @@ main: { .label ch = 6 .label x = 7 // [1] call memset - // [13] phi from main to memset [phi:main->memset] -- call_phi_near + // [13] phi from main to memset [phi:main->memset] memset_from_main: jsr memset // [2] phi from main to main::@1 [phi:main->main::@1] @@ -686,7 +686,7 @@ main: { .label x = 7 // memset(SCREEN, ' ', 1000) // [1] call memset - // [13] phi from main to memset [phi:main->memset] -- call_phi_near + // [13] phi from main to memset [phi:main->memset] jsr memset // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::x#4 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 diff --git a/src/test/ref/deref-to-derefidx-2.log b/src/test/ref/deref-to-derefidx-2.log index 7996b0807..4d3b92685 100644 --- a/src/test/ref/deref-to-derefidx-2.log +++ b/src/test/ref/deref-to-derefidx-2.log @@ -245,7 +245,7 @@ main: { // [5] phi screen_idx#11 = 0 [phi:main->print#0] -- vbuz1=vbuc1 lda #0 sta.z screen_idx - // [5] phi print::m#2 = msg1 [phi:main->print#1] -- call_phi_near + // [5] phi print::m#2 = msg1 [phi:main->print#1] -- pbuz1=pbuc1 lda #msg1 @@ -260,7 +260,7 @@ main: { // [5] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [5] phi screen_idx#11 = screen_idx#12 [phi:main::@1->print#0] -- register_copy - // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- call_phi_near + // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- pbuz1=pbuc1 lda #msg2 @@ -358,7 +358,7 @@ main: { // [5] phi screen_idx#11 = 0 [phi:main->print#0] -- vbuz1=vbuc1 lda #0 sta.z screen_idx - // [5] phi print::m#2 = msg1 [phi:main->print#1] -- call_phi_near + // [5] phi print::m#2 = msg1 [phi:main->print#1] -- pbuz1=pbuc1 lda #msg1 @@ -370,7 +370,7 @@ main: { // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] // [5] phi screen_idx#11 = screen_idx#12 [phi:main::@1->print#0] -- register_copy - // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- call_phi_near + // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- pbuz1=pbuc1 lda #msg2 diff --git a/src/test/ref/deref-to-derefidx.log b/src/test/ref/deref-to-derefidx.log index c68e6aed2..272e2ec42 100644 --- a/src/test/ref/deref-to-derefidx.log +++ b/src/test/ref/deref-to-derefidx.log @@ -225,7 +225,7 @@ main: { print_from_main: // [5] phi idx#11 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print::m#2 = msg1 [phi:main->print#1] -- call_phi_near + // [5] phi print::m#2 = msg1 [phi:main->print#1] -- pbuz1=pbuc1 lda #msg1 @@ -240,7 +240,7 @@ main: { // [5] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [5] phi idx#11 = idx#12 [phi:main::@1->print#0] -- register_copy - // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- call_phi_near + // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- pbuz1=pbuc1 lda #msg2 @@ -327,7 +327,7 @@ main: { // [5] phi from main to print [phi:main->print] // [5] phi idx#11 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print::m#2 = msg1 [phi:main->print#1] -- call_phi_near + // [5] phi print::m#2 = msg1 [phi:main->print#1] -- pbuz1=pbuc1 lda #msg1 @@ -339,7 +339,7 @@ main: { // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] // [5] phi idx#11 = idx#12 [phi:main::@1->print#0] -- register_copy - // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- call_phi_near + // [5] phi print::m#2 = msg2 [phi:main::@1->print#1] -- pbuz1=pbuc1 lda #msg2 diff --git a/src/test/ref/ducks-array.log b/src/test/ref/ducks-array.log index 246dd736f..52b0efcee 100644 --- a/src/test/ref/ducks-array.log +++ b/src/test/ref/ducks-array.log @@ -360,7 +360,7 @@ main: { // [0] chrout::petscii = $95 -- vbuz1=vbuc1 lda #$95 sta.z chrout.petscii - // [1] call chrout -- call_phi_near + // [1] call chrout jsr chrout jmp __b1 // main::@1 @@ -368,7 +368,7 @@ main: { // [2] chrout::petscii = *points -- vbuz1=_deref_pbuc1 lda points sta.z chrout.petscii - // [3] call chrout -- call_phi_near + // [3] call chrout jsr chrout jmp __b2 // main::@2 @@ -376,7 +376,7 @@ main: { // [4] chrout::petscii = *(points+1) -- vbuz1=_deref_pbuc1 lda points+1 sta.z chrout.petscii - // [5] call chrout -- call_phi_near + // [5] call chrout jsr chrout jmp __b3 // main::@3 @@ -384,7 +384,7 @@ main: { // [6] chrout::petscii = *(points+2) -- vbuz1=_deref_pbuc1 lda points+2 sta.z chrout.petscii - // [7] call chrout -- call_phi_near + // [7] call chrout jsr chrout jmp __b4 // main::@4 @@ -392,7 +392,7 @@ main: { // [8] chrout::petscii = *(points+3) -- vbuz1=_deref_pbuc1 lda points+3 sta.z chrout.petscii - // [9] call chrout -- call_phi_near + // [9] call chrout jsr chrout jmp __breturn // main::@return @@ -468,35 +468,35 @@ main: { // [0] chrout::petscii = $95 -- vbuz1=vbuc1 lda #$95 sta.z chrout.petscii - // [1] call chrout -- call_phi_near + // [1] call chrout jsr chrout // main::@1 // chrout(points[0]) // [2] chrout::petscii = *points -- vbuz1=_deref_pbuc1 lda points sta.z chrout.petscii - // [3] call chrout -- call_phi_near + // [3] call chrout jsr chrout // main::@2 // chrout(points[1]) // [4] chrout::petscii = *(points+1) -- vbuz1=_deref_pbuc1 lda points+1 sta.z chrout.petscii - // [5] call chrout -- call_phi_near + // [5] call chrout jsr chrout // main::@3 // chrout(points[2]) // [6] chrout::petscii = *(points+2) -- vbuz1=_deref_pbuc1 lda points+2 sta.z chrout.petscii - // [7] call chrout -- call_phi_near + // [7] call chrout jsr chrout // main::@4 // chrout(points[3]) // [8] chrout::petscii = *(points+3) -- vbuz1=_deref_pbuc1 lda points+3 sta.z chrout.petscii - // [9] call chrout -- call_phi_near + // [9] call chrout jsr chrout // main::@return // } diff --git a/src/test/ref/ducks-loop211.log b/src/test/ref/ducks-loop211.log index 2cfcc151f..66f3d5dd8 100644 --- a/src/test/ref/ducks-loop211.log +++ b/src/test/ref/ducks-loop211.log @@ -214,7 +214,7 @@ main: { // [4] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [5] call chrout -- call_phi_near + // [5] call chrout jsr chrout jmp __b2 // main::@2 @@ -320,7 +320,7 @@ main: { // [4] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [5] call chrout -- call_phi_near + // [5] call chrout jsr chrout // main::@2 // ++k; diff --git a/src/test/ref/ducks-total.log b/src/test/ref/ducks-total.log index 731814936..b2ef90b84 100644 --- a/src/test/ref/ducks-total.log +++ b/src/test/ref/ducks-total.log @@ -9588,14 +9588,14 @@ __start: { // [7] m = 0 -- vbuz1=vbuc1 lda #0 sta.z m - // [8] call conio_c64_init -- call_phi_near + // [8] call conio_c64_init jsr conio_c64_init // [9] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [10] call main -- call_phi_near + // [10] call main jsr main jmp __breturn // __start::@return @@ -9637,7 +9637,7 @@ conio_c64_init: { // [17] call gotoxy // [304] phi from conio_c64_init::@1 to gotoxy [phi:conio_c64_init::@1->gotoxy] gotoxy_from___b1: - // [304] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- call_phi_near + // [304] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- register_copy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -9700,7 +9700,7 @@ main: { // [20] chrout::petscii = lock -- vbuz1=vbuc1 lda #lock sta.z chrout.petscii - // [21] call chrout -- call_phi_near + // [21] call chrout // border and black paper jsr chrout jmp __b50 @@ -9709,7 +9709,7 @@ main: { // [22] chrout::petscii = lower -- vbuz1=vbuc1 lda #lower sta.z chrout.petscii - // [23] call chrout -- call_phi_near + // [23] call chrout //Lock UpperCase to Lowercase key jsr chrout jmp __b51 @@ -9751,7 +9751,7 @@ main: { // [27] call clear_screen // [321] phi from main::@3 to clear_screen [phi:main::@3->clear_screen] clear_screen_from___b3: - // [321] phi clear_screen::n#5 = $20 [phi:main::@3->clear_screen#0] -- call_phi_near + // [321] phi clear_screen::n#5 = $20 [phi:main::@3->clear_screen#0] -- vbuz1=vbuc1 lda #$20 sta.z clear_screen.n jsr clear_screen @@ -9764,7 +9764,7 @@ main: { // Clear Screen with spaces & black ink // [334] phi from main::@52 to textcolor [phi:main::@52->textcolor] textcolor_from___b52: - // [334] phi textcolor::color#7 = 7 [phi:main::@52->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 7 [phi:main::@52->textcolor#0] -- vbuz1=vbuc1 lda #7 sta.z textcolor.color jsr textcolor @@ -9776,7 +9776,7 @@ main: { // [31] call cputs // [337] phi from main::@53 to cputs [phi:main::@53->cputs] cputs_from___b53: - // [337] phi cputs::s#11 = intro [phi:main::@53->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = intro [phi:main::@53->cputs#0] -- pbuz1=pbuc1 lda #intro @@ -9791,7 +9791,7 @@ main: { // Yellow ink // [334] phi from main::@54 to textcolor [phi:main::@54->textcolor] textcolor_from___b54: - // [334] phi textcolor::color#7 = 1 [phi:main::@54->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 1 [phi:main::@54->textcolor#0] -- vbuz1=vbuc1 lda #1 sta.z textcolor.color jsr textcolor @@ -9803,7 +9803,7 @@ main: { // [35] call cputs // [337] phi from main::@55 to cputs [phi:main::@55->cputs] cputs_from___b55: - // [337] phi cputs::s#11 = levels [phi:main::@55->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = levels [phi:main::@55->cputs#0] -- pbuz1=pbuc1 lda #levels @@ -9818,7 +9818,7 @@ main: { // White // [334] phi from main::@56 to textcolor [phi:main::@56->textcolor] textcolor_from___b56: - // [334] phi textcolor::color#7 = 2 [phi:main::@56->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 2 [phi:main::@56->textcolor#0] -- vbuz1=vbuc1 lda #2 sta.z textcolor.color jsr textcolor @@ -9830,7 +9830,7 @@ main: { // [39] call cputs // [337] phi from main::@57 to cputs [phi:main::@57->cputs] cputs_from___b57: - // [337] phi cputs::s#11 = foot [phi:main::@57->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = foot [phi:main::@57->cputs#0] -- pbuz1=pbuc1 lda #foot @@ -9858,7 +9858,7 @@ main: { // wait for 1-3-5-7-9 keys only // [321] phi from main::@5 to clear_screen [phi:main::@5->clear_screen] clear_screen_from___b5: - // [321] phi clear_screen::n#5 = 4 [phi:main::@5->clear_screen#0] -- call_phi_near + // [321] phi clear_screen::n#5 = 4 [phi:main::@5->clear_screen#0] -- vbuz1=vbuc1 lda #4 sta.z clear_screen.n jsr clear_screen @@ -9871,7 +9871,7 @@ main: { // [46] chrout::petscii = reverse_on -- vbuz1=vbuc1 lda #reverse_on sta.z chrout.petscii - // [47] call chrout -- call_phi_near + // [47] call chrout // Graphic mode jsr chrout jmp __b59 @@ -9880,7 +9880,7 @@ main: { // [48] chrout::petscii = red -- vbuz1=vbuc1 lda #red sta.z chrout.petscii - // [49] call chrout -- call_phi_near + // [49] call chrout jsr chrout jmp __b60 // main::@60 @@ -9888,7 +9888,7 @@ main: { // [50] chrout::petscii = down -- vbuz1=vbuc1 lda #down sta.z chrout.petscii - // [51] call chrout -- call_phi_near + // [51] call chrout jsr chrout // [52] phi from main::@60 to main::@6 [phi:main::@60->main::@6] __b6_from___b60: @@ -9912,7 +9912,7 @@ main: { // [54] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [55] call chrout -- call_phi_near + // [55] call chrout // 23 rows * 22 columns (7680 to 8185). 506 positions. jsr chrout jmp __b61 @@ -9927,7 +9927,7 @@ main: { // [58] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [59] call chrout -- call_phi_near + // [59] call chrout //last brick from last line (#23) to avoid scrolling jsr chrout jmp __b62 @@ -9975,7 +9975,7 @@ main: { // [345] phi from main::@13 to random [phi:main::@13->random] random_from___b13: // [345] phi random::n#4 = random::n#0 [phi:main::@13->random#0] -- register_copy - // [345] phi random::k#4 = random::k#0 [phi:main::@13->random#1] -- call_phi_near + // [345] phi random::k#4 = random::k#0 [phi:main::@13->random#1] -- register_copy jsr random jmp __b71 // main::@71 @@ -10018,7 +10018,7 @@ main: { // [71] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [72] call chrout -- call_phi_near + // [72] call chrout // Duck #1 jsr chrout jmp __b65 @@ -10027,7 +10027,7 @@ main: { // [73] chrout::petscii = yellow -- vbuz1=vbuc1 lda #yellow sta.z chrout.petscii - // [74] call chrout -- call_phi_near + // [74] call chrout jsr chrout jmp __b66 // main::@66 @@ -10035,7 +10035,7 @@ main: { // [75] chrout::petscii = $50 -- vbuz1=vbuc1 lda #$50 sta.z chrout.petscii - // [76] call chrout -- call_phi_near + // [76] call chrout jsr chrout jmp __b67 // main::@67 @@ -10043,7 +10043,7 @@ main: { // [77] chrout::petscii = $54 -- vbuz1=vbuc1 lda #$54 sta.z chrout.petscii - // [78] call chrout -- call_phi_near + // [78] call chrout jsr chrout jmp __b68 // main::@68 @@ -10051,7 +10051,7 @@ main: { // [79] chrout::petscii = $53 -- vbuz1=vbuc1 lda #$53 sta.z chrout.petscii - // [80] call chrout -- call_phi_near + // [80] call chrout jsr chrout jmp __b69 // main::@69 @@ -10059,7 +10059,7 @@ main: { // [81] chrout::petscii = $3a -- vbuz1=vbuc1 lda #$3a sta.z chrout.petscii - // [82] call chrout -- call_phi_near + // [82] call chrout jsr chrout jmp __b70 // main::@70 @@ -10089,7 +10089,7 @@ main: { // Write 'TM:9', yellow // [351] phi from main::@19 to write_score [phi:main::@19->write_score] write_score_from___b19: - // [351] phi score#13 = 0 [phi:main::@19->write_score#0] -- call_phi_near + // [351] phi score#13 = 0 [phi:main::@19->write_score#0] -- vwuz1=vbuc1 lda #<0 sta.z score lda #>0 @@ -10101,7 +10101,7 @@ main: { // [88] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [89] call chrout -- call_phi_near + // [89] call chrout // Write Score (yellow) jsr chrout jmp __b76 @@ -10110,7 +10110,7 @@ main: { // [90] chrout::petscii = green -- vbuz1=vbuc1 lda #green sta.z chrout.petscii - // [91] call chrout -- call_phi_near + // [91] call chrout jsr chrout jmp __b77 // main::@77 @@ -10163,7 +10163,7 @@ main: { // [96] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [97] call chrout -- call_phi_near + // [97] call chrout jsr chrout jmp __b79 // main::@79 @@ -10171,7 +10171,7 @@ main: { // [98] chrout::petscii = green -- vbuz1=vbuc1 lda #green sta.z chrout.petscii - // [99] call chrout -- call_phi_near + // [99] call chrout jsr chrout jmp __b80 // main::@80 @@ -10179,7 +10179,7 @@ main: { // [100] chrout::petscii = reverse_on -- vbuz1=vbuc1 lda #reverse_on sta.z chrout.petscii - // [101] call chrout -- call_phi_near + // [101] call chrout jsr chrout jmp __b81 // main::@81 @@ -10201,7 +10201,7 @@ main: { // [104] chrout::petscii = $31 -- vbuz1=vbuc1 lda #$31 sta.z chrout.petscii - // [105] call chrout -- call_phi_near + // [105] call chrout jsr chrout jmp __b82 // main::@82 @@ -10209,7 +10209,7 @@ main: { // [106] chrout::petscii = $30 -- vbuz1=vbuc1 lda #$30 sta.z chrout.petscii - // [107] call chrout -- call_phi_near + // [107] call chrout jsr chrout // [108] phi from main::@103 main::@104 main::@105 main::@106 main::@23 main::@82 main::@84 to main::@24 [phi:main::@103/main::@104/main::@105/main::@106/main::@23/main::@82/main::@84->main::@24] __b24_from___b103: @@ -10229,7 +10229,7 @@ main: { // [345] phi random::n#4 = $ff [phi:main::@24->random#0] -- vbuz1=vbuc1 lda #$ff sta.z random.n - // [345] phi random::k#4 = 0 [phi:main::@24->random#1] -- call_phi_near + // [345] phi random::k#4 = 0 [phi:main::@24->random#1] -- vbuz1=vbuc1 lda #0 sta.z random.k jsr random @@ -10247,7 +10247,7 @@ main: { // [345] phi random::n#4 = $ff [phi:main::@83->random#0] -- vbuz1=vbuc1 lda #$ff sta.z random.n - // [345] phi random::k#4 = 0 [phi:main::@83->random#1] -- call_phi_near + // [345] phi random::k#4 = 0 [phi:main::@83->random#1] -- vbuz1=vbuc1 lda #0 sta.z random.k jsr random @@ -10340,7 +10340,7 @@ main: { jmp __b25 // main::@25 __b25: - // [123] call chrono_restart -- call_phi_near + // [123] call chrono_restart jsr chrono_restart // [124] phi from main::@25 to main::@26 [phi:main::@25->main::@26] __b26_from___b25: @@ -10384,7 +10384,7 @@ main: { // [128] call write_score // [351] phi from main::@28 to write_score [phi:main::@28->write_score] write_score_from___b28: - // [351] phi score#13 = score#4 [phi:main::@28->write_score#0] -- call_phi_near + // [351] phi score#13 = score#4 [phi:main::@28->write_score#0] -- register_copy jsr write_score jmp __b86 // main::@86 @@ -10396,7 +10396,7 @@ main: { // [381] phi from main::@86 to wait [phi:main::@86->wait] wait_from___b86: // [381] phi z#53 = z#100 [phi:main::@86->wait#0] -- register_copy - // [381] phi wait::n#6 = $14 [phi:main::@86->wait#1] -- call_phi_near + // [381] phi wait::n#6 = $14 [phi:main::@86->wait#1] -- vbuz1=vbuc1 lda #$14 sta.z wait.n jsr wait @@ -10485,7 +10485,7 @@ main: { // 10 ducks // [321] phi from main::@44 to clear_screen [phi:main::@44->clear_screen] clear_screen_from___b44: - // [321] phi clear_screen::n#5 = 4 [phi:main::@44->clear_screen#0] -- call_phi_near + // [321] phi clear_screen::n#5 = 4 [phi:main::@44->clear_screen#0] -- vbuz1=vbuc1 lda #4 sta.z clear_screen.n jsr clear_screen @@ -10498,7 +10498,7 @@ main: { // [147] chrout::petscii = lower -- vbuz1=vbuc1 lda #lower sta.z chrout.petscii - // [148] call chrout -- call_phi_near + // [148] call chrout jsr chrout // [149] phi from main::@91 to main::@92 [phi:main::@91->main::@92] __b92_from___b91: @@ -10509,7 +10509,7 @@ main: { // Return to text mode, lowcase // [334] phi from main::@92 to textcolor [phi:main::@92->textcolor] textcolor_from___b92: - // [334] phi textcolor::color#7 = 7 [phi:main::@92->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 7 [phi:main::@92->textcolor#0] -- vbuz1=vbuc1 lda #7 sta.z textcolor.color jsr textcolor @@ -10521,7 +10521,7 @@ main: { // [152] call cputs // [337] phi from main::@93 to cputs [phi:main::@93->cputs] cputs_from___b93: - // [337] phi cputs::s#11 = game_over [phi:main::@93->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = game_over [phi:main::@93->cputs#0] -- pbuz1=pbuc1 lda #game_over @@ -10536,7 +10536,7 @@ main: { // Yellow // [334] phi from main::@94 to textcolor [phi:main::@94->textcolor] textcolor_from___b94: - // [334] phi textcolor::color#7 = 2 [phi:main::@94->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 2 [phi:main::@94->textcolor#0] -- vbuz1=vbuc1 lda #2 sta.z textcolor.color jsr textcolor @@ -10548,7 +10548,7 @@ main: { // [156] call cputs // [337] phi from main::@95 to cputs [phi:main::@95->cputs] cputs_from___b95: - // [337] phi cputs::s#11 = your_score [phi:main::@95->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = your_score [phi:main::@95->cputs#0] -- pbuz1=pbuc1 lda #your_score @@ -10562,7 +10562,7 @@ main: { // [158] call cputs // [337] phi from main::@96 to cputs [phi:main::@96->cputs] cputs_from___b96: - // [337] phi cputs::s#11 = buffer [phi:main::@96->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = buffer [phi:main::@96->cputs#0] -- pbuz1=pbuc1 lda #buffer @@ -10577,7 +10577,7 @@ main: { // Red // [334] phi from main::@97 to textcolor [phi:main::@97->textcolor] textcolor_from___b97: - // [334] phi textcolor::color#7 = 3 [phi:main::@97->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 3 [phi:main::@97->textcolor#0] -- vbuz1=vbuc1 lda #3 sta.z textcolor.color jsr textcolor @@ -10589,7 +10589,7 @@ main: { // [162] call cputs // [337] phi from main::@98 to cputs [phi:main::@98->cputs] cputs_from___b98: - // [337] phi cputs::s#11 = high_score [phi:main::@98->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = high_score [phi:main::@98->cputs#0] -- pbuz1=pbuc1 lda #high_score @@ -10630,7 +10630,7 @@ main: { // [167] call utoa // [390] phi from main::@46 to utoa [phi:main::@46->utoa] utoa_from___b46: - // [390] phi utoa::value#10 = utoa::value#2 [phi:main::@46->utoa#0] -- call_phi_near + // [390] phi utoa::value#10 = utoa::value#2 [phi:main::@46->utoa#0] -- register_copy jsr utoa // [168] phi from main::@46 to main::@100 [phi:main::@46->main::@100] __b100_from___b46: @@ -10640,7 +10640,7 @@ main: { // [169] call cputs // [337] phi from main::@100 to cputs [phi:main::@100->cputs] cputs_from___b100: - // [337] phi cputs::s#11 = buffer [phi:main::@100->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = buffer [phi:main::@100->cputs#0] -- pbuz1=pbuc1 lda #buffer @@ -10655,7 +10655,7 @@ main: { // Cyan // [334] phi from main::@101 to textcolor [phi:main::@101->textcolor] textcolor_from___b101: - // [334] phi textcolor::color#7 = 1 [phi:main::@101->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 1 [phi:main::@101->textcolor#0] -- vbuz1=vbuc1 lda #1 sta.z textcolor.color jsr textcolor @@ -10667,7 +10667,7 @@ main: { // [173] call cputs // [337] phi from main::@102 to cputs [phi:main::@102->cputs] cputs_from___b102: - // [337] phi cputs::s#11 = play_again [phi:main::@102->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = play_again [phi:main::@102->cputs#0] -- pbuz1=pbuc1 lda #play_again @@ -10728,7 +10728,7 @@ main: { jmp __b27 // main::@27 __b27: - // [182] call read_chrono -- call_phi_near + // [182] call read_chrono jsr read_chrono jmp __b85 // main::@85 @@ -10904,7 +10904,7 @@ main: { // [381] phi from main::@42 to wait [phi:main::@42->wait] wait_from___b42: // [381] phi z#53 = z#100 [phi:main::@42->wait#0] -- register_copy - // [381] phi wait::n#6 = $a [phi:main::@42->wait#1] -- call_phi_near + // [381] phi wait::n#6 = $a [phi:main::@42->wait#1] -- vbuz1=vbuc1 lda #$a sta.z wait.n jsr wait @@ -11083,7 +11083,7 @@ main: { // [381] phi from main::@36 to wait [phi:main::@36->wait] wait_from___b36: // [381] phi z#53 = z#48 [phi:main::@36->wait#0] -- register_copy - // [381] phi wait::n#6 = 5 [phi:main::@36->wait#1] -- call_phi_near + // [381] phi wait::n#6 = 5 [phi:main::@36->wait#1] -- vbuz1=vbuc1 lda #5 sta.z wait.n jsr wait @@ -11182,7 +11182,7 @@ main: { // [381] phi from main::@89 to wait [phi:main::@89->wait] wait_from___b89: // [381] phi z#53 = z#25 [phi:main::@89->wait#0] -- register_copy - // [381] phi wait::n#6 = 5 [phi:main::@89->wait#1] -- call_phi_near + // [381] phi wait::n#6 = 5 [phi:main::@89->wait#1] -- vbuz1=vbuc1 lda #5 sta.z wait.n jsr wait @@ -11305,7 +11305,7 @@ main: { // [269] call write_score // [351] phi from main::@34 to write_score [phi:main::@34->write_score] write_score_from___b34: - // [351] phi score#13 = score#6 [phi:main::@34->write_score#0] -- call_phi_near + // [351] phi score#13 = score#6 [phi:main::@34->write_score#0] -- register_copy jsr write_score // [270] phi from main::@34 to main::@88 [phi:main::@34->main::@88] __b88_from___b34: @@ -11316,7 +11316,7 @@ main: { // [381] phi from main::@88 to wait [phi:main::@88->wait] wait_from___b88: // [381] phi z#53 = z#100 [phi:main::@88->wait#0] -- register_copy - // [381] phi wait::n#6 = $a [phi:main::@88->wait#1] -- call_phi_near + // [381] phi wait::n#6 = $a [phi:main::@88->wait#1] -- vbuz1=vbuc1 lda #$a sta.z wait.n jsr wait @@ -11338,7 +11338,7 @@ main: { // [273] chrout::petscii = main::$57 -- vbuz1=vwuz2 lda.z __57 sta.z chrout.petscii - // [274] call chrout -- call_phi_near + // [274] call chrout jsr chrout jmp __b24_from___b23 // main::@21 @@ -11347,7 +11347,7 @@ main: { ldy.z j_2 lda ducknumber,y sta.z chrout.petscii - // [276] call chrout -- call_phi_near + // [276] call chrout jsr chrout jmp __b78 // main::@78 @@ -11364,7 +11364,7 @@ main: { ldy.z j_1 lda chrono,y sta.z chrout.petscii - // [279] call chrout -- call_phi_near + // [279] call chrout jsr chrout jmp __b74 // main::@74 @@ -11393,7 +11393,7 @@ main: { // [283] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [284] call chrout -- call_phi_near + // [284] call chrout jsr chrout jmp __b73 // main::@73 @@ -11429,7 +11429,7 @@ main: { // [288] chrout::petscii = right -- vbuz1=vbuc1 lda #right sta.z chrout.petscii - // [289] call chrout -- call_phi_near + // [289] call chrout jsr chrout jmp __b72 // main::@72 @@ -11445,7 +11445,7 @@ main: { // [291] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [292] call chrout -- call_phi_near + // [292] call chrout jsr chrout // [293] phi from main::@7 to main::@9 [phi:main::@7->main::@9] __b9_from___b7: @@ -11465,7 +11465,7 @@ main: { // [295] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [296] call chrout -- call_phi_near + // [296] call chrout jsr chrout jmp __b64 // main::@64 @@ -11482,7 +11482,7 @@ main: { // [298] chrout::petscii = right -- vbuz1=vbuc1 lda #right sta.z chrout.petscii - // [299] call chrout -- call_phi_near + // [299] call chrout jsr chrout jmp __b63 // main::@63 @@ -11661,7 +11661,7 @@ clear_screen: { // From 0-->505 (506 bytes). ClearScreen with byte 'n' with color 'm' // [304] phi from clear_screen::@3 to gotoxy [phi:clear_screen::@3->gotoxy] gotoxy_from___b3: - // [304] phi gotoxy::y#4 = 0 [phi:clear_screen::@3->gotoxy#0] -- call_phi_near + // [304] phi gotoxy::y#4 = 0 [phi:clear_screen::@3->gotoxy#0] -- vbuz1=vbuc1 lda #0 sta.z gotoxy.y jsr gotoxy @@ -11671,7 +11671,7 @@ clear_screen: { // [326] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [327] call chrout -- call_phi_near + // [327] call chrout jsr chrout jmp __breturn // clear_screen::@return @@ -11761,7 +11761,7 @@ cputs: { // cputs::@2 __b2: // [343] cputc::c#0 = cputs::c#1 - // [344] call cputc -- call_phi_near + // [344] call cputc jsr cputc jmp __b1_from___b2 } @@ -11850,7 +11850,7 @@ write_score: { // (!!) Needed. Possibly a bug // [390] phi from write_score::@7 to utoa [phi:write_score::@7->utoa] utoa_from___b7: - // [390] phi utoa::value#10 = utoa::value#1 [phi:write_score::@7->utoa#0] -- call_phi_near + // [390] phi utoa::value#10 = utoa::value#1 [phi:write_score::@7->utoa#0] -- register_copy jsr utoa jmp __b11 // write_score::@11 @@ -11899,7 +11899,7 @@ write_score: { // [366] chrout::petscii = yellow -- vbuz1=vbuc1 lda #yellow sta.z chrout.petscii - // [367] call chrout -- call_phi_near + // [367] call chrout jsr chrout jmp __b12 // write_score::@12 @@ -11907,7 +11907,7 @@ write_score: { // [368] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [369] call chrout -- call_phi_near + // [369] call chrout jsr chrout jmp __b13 // write_score::@13 @@ -11936,7 +11936,7 @@ write_score: { ldy.z m lda points,y sta.z chrout.petscii - // [375] call chrout -- call_phi_near + // [375] call chrout jsr chrout jmp __b14 // write_score::@14 @@ -12138,7 +12138,7 @@ utoa: { // [405] utoa_append::value#0 = utoa::value#3 // [406] utoa_append::sub#0 = utoa::digit_value#0 // [407] call utoa_append - // [432] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near + // [432] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] utoa_append_from___b5: jsr utoa_append // [408] utoa_append::return#0 = utoa_append::value#2 @@ -12181,7 +12181,7 @@ read_chrono: { bcc !+ inc.z div16u8u.dividend+1 !: - // [414] call div16u8u -- call_phi_near + // [414] call div16u8u jsr div16u8u // [415] div16u8u::return#2 = div16u8u::return#0 -- vwuz1=vwuz2 lda.z div16u8u.return @@ -12256,7 +12256,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [428] call cputln -- call_phi_near + // [428] call cputln jsr cputln jmp __breturn // cputc::@return @@ -12268,7 +12268,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [431] call cputln -- call_phi_near + // [431] call cputln jsr cputln jmp __breturn } @@ -12355,7 +12355,7 @@ div16u8u: { // [456] phi from div16u8u to divr8u [phi:div16u8u->divr8u] divr8u_from_div16u8u: // [456] phi divr8u::dividend#5 = divr8u::dividend#1 [phi:div16u8u->divr8u#0] -- register_copy - // [456] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#1] -- call_phi_near + // [456] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#1] -- vbuz1=vbuc1 lda #0 sta.z divr8u.rem jsr divr8u @@ -12374,7 +12374,7 @@ div16u8u: { // [456] phi from div16u8u::@1 to divr8u [phi:div16u8u::@1->divr8u] divr8u_from___b1: // [456] phi divr8u::dividend#5 = divr8u::dividend#2 [phi:div16u8u::@1->divr8u#0] -- register_copy - // [456] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#1] -- call_phi_near + // [456] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#1] -- register_copy jsr divr8u // [446] divr8u::return#3 = divr8u::return#0 jmp __b2 @@ -12416,7 +12416,7 @@ cputln: { sta.z conio_cursor_x // [453] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [454] call cscroll -- call_phi_near + // [454] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -12537,7 +12537,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [485] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [485] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -12556,7 +12556,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [485] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [485] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -12573,7 +12573,7 @@ cscroll: { // [495] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuz1=vbuc1 lda #' ' sta.z memset.c - // [495] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [495] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -12589,7 +12589,7 @@ cscroll: { // [495] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] memset_from___b4: // [495] phi memset::c#4 = memset::c#1 [phi:cscroll::@4->memset#0] -- register_copy - // [495] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [495] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -13931,11 +13931,11 @@ __start: { // [7] m = 0 -- vbuz1=vbuc1 sta.z m // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [8] call conio_c64_init -- call_phi_near + // [8] call conio_c64_init jsr conio_c64_init // [9] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [10] call main -- call_phi_near + // [10] call main jsr main // __start::@return // [11] return @@ -13969,7 +13969,7 @@ conio_c64_init: { // [16] gotoxy::y#2 = conio_c64_init::line#2 // [17] call gotoxy // [304] phi from conio_c64_init::@1 to gotoxy [phi:conio_c64_init::@1->gotoxy] - // [304] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- call_phi_near + // [304] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- register_copy jsr gotoxy // conio_c64_init::@return // } @@ -14033,7 +14033,7 @@ main: { // [20] chrout::petscii = lock -- vbuz1=vbuc1 lda #lock sta.z chrout.petscii - // [21] call chrout -- call_phi_near + // [21] call chrout // border and black paper jsr chrout // main::@50 @@ -14041,7 +14041,7 @@ main: { // [22] chrout::petscii = lower -- vbuz1=vbuc1 lda #lower sta.z chrout.petscii - // [23] call chrout -- call_phi_near + // [23] call chrout //Lock UpperCase to Lowercase key jsr chrout // main::@51 @@ -14077,7 +14077,7 @@ main: { // clear_screen(32,0) // [27] call clear_screen // [321] phi from main::@3 to clear_screen [phi:main::@3->clear_screen] - // [321] phi clear_screen::n#5 = $20 [phi:main::@3->clear_screen#0] -- call_phi_near + // [321] phi clear_screen::n#5 = $20 [phi:main::@3->clear_screen#0] -- vbuz1=vbuc1 lda #$20 sta.z clear_screen.n jsr clear_screen @@ -14087,7 +14087,7 @@ main: { // [29] call textcolor // Clear Screen with spaces & black ink // [334] phi from main::@52 to textcolor [phi:main::@52->textcolor] - // [334] phi textcolor::color#7 = 7 [phi:main::@52->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 7 [phi:main::@52->textcolor#0] -- vbuz1=vbuc1 lda #7 sta.z textcolor.color jsr textcolor @@ -14096,7 +14096,7 @@ main: { // cputs(intro) // [31] call cputs // [337] phi from main::@53 to cputs [phi:main::@53->cputs] - // [337] phi cputs::s#11 = intro [phi:main::@53->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = intro [phi:main::@53->cputs#0] -- pbuz1=pbuc1 lda #intro @@ -14108,7 +14108,7 @@ main: { // [33] call textcolor // Yellow ink // [334] phi from main::@54 to textcolor [phi:main::@54->textcolor] - // [334] phi textcolor::color#7 = 1 [phi:main::@54->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 1 [phi:main::@54->textcolor#0] -- vbuz1=vbuc1 lda #1 sta.z textcolor.color jsr textcolor @@ -14117,7 +14117,7 @@ main: { // cputs(levels) // [35] call cputs // [337] phi from main::@55 to cputs [phi:main::@55->cputs] - // [337] phi cputs::s#11 = levels [phi:main::@55->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = levels [phi:main::@55->cputs#0] -- pbuz1=pbuc1 lda #levels @@ -14129,7 +14129,7 @@ main: { // [37] call textcolor // White // [334] phi from main::@56 to textcolor [phi:main::@56->textcolor] - // [334] phi textcolor::color#7 = 2 [phi:main::@56->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 2 [phi:main::@56->textcolor#0] -- vbuz1=vbuc1 lda #2 sta.z textcolor.color jsr textcolor @@ -14138,7 +14138,7 @@ main: { // cputs(foot) // [39] call cputs // [337] phi from main::@57 to cputs [phi:main::@57->cputs] - // [337] phi cputs::s#11 = foot [phi:main::@57->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = foot [phi:main::@57->cputs#0] -- pbuz1=pbuc1 lda #foot @@ -14165,7 +14165,7 @@ main: { // [44] call clear_screen // wait for 1-3-5-7-9 keys only // [321] phi from main::@5 to clear_screen [phi:main::@5->clear_screen] - // [321] phi clear_screen::n#5 = 4 [phi:main::@5->clear_screen#0] -- call_phi_near + // [321] phi clear_screen::n#5 = 4 [phi:main::@5->clear_screen#0] -- vbuz1=vbuc1 lda #4 sta.z clear_screen.n jsr clear_screen @@ -14178,7 +14178,7 @@ main: { // [46] chrout::petscii = reverse_on -- vbuz1=vbuc1 lda #reverse_on sta.z chrout.petscii - // [47] call chrout -- call_phi_near + // [47] call chrout // Graphic mode jsr chrout // main::@59 @@ -14186,14 +14186,14 @@ main: { // [48] chrout::petscii = red -- vbuz1=vbuc1 lda #red sta.z chrout.petscii - // [49] call chrout -- call_phi_near + // [49] call chrout jsr chrout // main::@60 // chrout(down) // [50] chrout::petscii = down -- vbuz1=vbuc1 lda #down sta.z chrout.petscii - // [51] call chrout -- call_phi_near + // [51] call chrout jsr chrout // [52] phi from main::@60 to main::@6 [phi:main::@60->main::@6] // [52] phi n#89 = n#109 [phi:main::@60->main::@6#0] -- register_copy @@ -14217,7 +14217,7 @@ main: { // [54] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [55] call chrout -- call_phi_near + // [55] call chrout // 23 rows * 22 columns (7680 to 8185). 506 positions. jsr chrout // main::@61 @@ -14232,7 +14232,7 @@ main: { // [58] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [59] call chrout -- call_phi_near + // [59] call chrout //last brick from last line (#23) to avoid scrolling jsr chrout // main::@62 @@ -14277,7 +14277,7 @@ main: { // Write differential random bricks depending on 'l' level choosen // [345] phi from main::@13 to random [phi:main::@13->random] // [345] phi random::n#4 = random::n#0 [phi:main::@13->random#0] -- register_copy - // [345] phi random::k#4 = random::k#0 [phi:main::@13->random#1] -- call_phi_near + // [345] phi random::k#4 = random::k#0 [phi:main::@13->random#1] -- register_copy jsr random // main::@71 // z+m @@ -14322,7 +14322,7 @@ main: { // [71] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [72] call chrout -- call_phi_near + // [72] call chrout // Duck #1 jsr chrout // main::@65 @@ -14330,35 +14330,35 @@ main: { // [73] chrout::petscii = yellow -- vbuz1=vbuc1 lda #yellow sta.z chrout.petscii - // [74] call chrout -- call_phi_near + // [74] call chrout jsr chrout // main::@66 // chrout(80) // [75] chrout::petscii = $50 -- vbuz1=vbuc1 lda #$50 sta.z chrout.petscii - // [76] call chrout -- call_phi_near + // [76] call chrout jsr chrout // main::@67 // chrout(84) // [77] chrout::petscii = $54 -- vbuz1=vbuc1 lda #$54 sta.z chrout.petscii - // [78] call chrout -- call_phi_near + // [78] call chrout jsr chrout // main::@68 // chrout(83) // [79] chrout::petscii = $53 -- vbuz1=vbuc1 lda #$53 sta.z chrout.petscii - // [80] call chrout -- call_phi_near + // [80] call chrout jsr chrout // main::@69 // chrout(58) // [81] chrout::petscii = $3a -- vbuz1=vbuc1 lda #$3a sta.z chrout.petscii - // [82] call chrout -- call_phi_near + // [82] call chrout jsr chrout // main::@70 // POKE @@ -14385,7 +14385,7 @@ main: { // [87] call write_score // Write 'TM:9', yellow // [351] phi from main::@19 to write_score [phi:main::@19->write_score] - // [351] phi score#13 = 0 [phi:main::@19->write_score#0] -- call_phi_near + // [351] phi score#13 = 0 [phi:main::@19->write_score#0] -- vwuz1=vbuc1 lda #<0 sta.z score sta.z score+1 @@ -14395,7 +14395,7 @@ main: { // [88] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [89] call chrout -- call_phi_near + // [89] call chrout // Write Score (yellow) jsr chrout // main::@76 @@ -14403,7 +14403,7 @@ main: { // [90] chrout::petscii = green -- vbuz1=vbuc1 lda #green sta.z chrout.petscii - // [91] call chrout -- call_phi_near + // [91] call chrout jsr chrout // main::@77 // POKE @@ -14453,21 +14453,21 @@ main: { // [96] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [97] call chrout -- call_phi_near + // [97] call chrout jsr chrout // main::@79 // chrout(green) // [98] chrout::petscii = green -- vbuz1=vbuc1 lda #green sta.z chrout.petscii - // [99] call chrout -- call_phi_near + // [99] call chrout jsr chrout // main::@80 // chrout(reverse_on) // [100] chrout::petscii = reverse_on -- vbuz1=vbuc1 lda #reverse_on sta.z chrout.petscii - // [101] call chrout -- call_phi_near + // [101] call chrout jsr chrout // main::@81 // POKE @@ -14490,14 +14490,14 @@ main: { // [104] chrout::petscii = $31 -- vbuz1=vbuc1 lda #$31 sta.z chrout.petscii - // [105] call chrout -- call_phi_near + // [105] call chrout jsr chrout // main::@82 // chrout(48) // [106] chrout::petscii = $30 -- vbuz1=vbuc1 lda #$30 sta.z chrout.petscii - // [107] call chrout -- call_phi_near + // [107] call chrout jsr chrout // [108] phi from main::@103 main::@104 main::@105 main::@106 main::@23 main::@82 main::@84 to main::@24 [phi:main::@103/main::@104/main::@105/main::@106/main::@23/main::@82/main::@84->main::@24] __b11: @@ -14509,7 +14509,7 @@ main: { // [345] phi random::n#4 = $ff [phi:main::@24->random#0] -- vbuz1=vbuc1 lda #$ff sta.z random.n - // [345] phi random::k#4 = 0 [phi:main::@24->random#1] -- call_phi_near + // [345] phi random::k#4 = 0 [phi:main::@24->random#1] -- vbuz1=vbuc1 lda #0 sta.z random.k jsr random @@ -14526,7 +14526,7 @@ main: { // [345] phi random::n#4 = $ff [phi:main::@83->random#0] -- vbuz1=vbuc1 lda #$ff sta.z random.n - // [345] phi random::k#4 = 0 [phi:main::@83->random#1] -- call_phi_near + // [345] phi random::k#4 = 0 [phi:main::@83->random#1] -- vbuz1=vbuc1 lda #0 sta.z random.k jsr random @@ -14607,7 +14607,7 @@ main: { // [122] phi from main::@103 to main::@25 [phi:main::@103->main::@25] // main::@25 // chrono_restart() - // [123] call chrono_restart -- call_phi_near + // [123] call chrono_restart jsr chrono_restart // [124] phi from main::@25 to main::@26 [phi:main::@25->main::@26] // [124] phi n#20 = n#52 [phi:main::@25->main::@26#0] -- register_copy @@ -14651,7 +14651,7 @@ main: { // write_score() // [128] call write_score // [351] phi from main::@28 to write_score [phi:main::@28->write_score] - // [351] phi score#13 = score#4 [phi:main::@28->write_score#0] -- call_phi_near + // [351] phi score#13 = score#4 [phi:main::@28->write_score#0] -- register_copy jsr write_score // main::@86 // POKE @@ -14662,7 +14662,7 @@ main: { // [130] call wait // [381] phi from main::@86 to wait [phi:main::@86->wait] // [381] phi z#53 = z#100 [phi:main::@86->wait#0] -- register_copy - // [381] phi wait::n#6 = $14 [phi:main::@86->wait#1] -- call_phi_near + // [381] phi wait::n#6 = $14 [phi:main::@86->wait#1] -- vbuz1=vbuc1 lda #$14 sta.z wait.n jsr wait @@ -14747,7 +14747,7 @@ main: { // [145] call clear_screen // 10 ducks // [321] phi from main::@44 to clear_screen [phi:main::@44->clear_screen] - // [321] phi clear_screen::n#5 = 4 [phi:main::@44->clear_screen#0] -- call_phi_near + // [321] phi clear_screen::n#5 = 4 [phi:main::@44->clear_screen#0] -- vbuz1=vbuc1 lda #4 sta.z clear_screen.n jsr clear_screen @@ -14760,7 +14760,7 @@ main: { // [147] chrout::petscii = lower -- vbuz1=vbuc1 lda #lower sta.z chrout.petscii - // [148] call chrout -- call_phi_near + // [148] call chrout jsr chrout // [149] phi from main::@91 to main::@92 [phi:main::@91->main::@92] // main::@92 @@ -14768,7 +14768,7 @@ main: { // [150] call textcolor // Return to text mode, lowcase // [334] phi from main::@92 to textcolor [phi:main::@92->textcolor] - // [334] phi textcolor::color#7 = 7 [phi:main::@92->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 7 [phi:main::@92->textcolor#0] -- vbuz1=vbuc1 lda #7 sta.z textcolor.color jsr textcolor @@ -14777,7 +14777,7 @@ main: { // cputs(game_over) // [152] call cputs // [337] phi from main::@93 to cputs [phi:main::@93->cputs] - // [337] phi cputs::s#11 = game_over [phi:main::@93->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = game_over [phi:main::@93->cputs#0] -- pbuz1=pbuc1 lda #game_over @@ -14789,7 +14789,7 @@ main: { // [154] call textcolor // Yellow // [334] phi from main::@94 to textcolor [phi:main::@94->textcolor] - // [334] phi textcolor::color#7 = 2 [phi:main::@94->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 2 [phi:main::@94->textcolor#0] -- vbuz1=vbuc1 lda #2 sta.z textcolor.color jsr textcolor @@ -14798,7 +14798,7 @@ main: { // cputs(your_score) // [156] call cputs // [337] phi from main::@95 to cputs [phi:main::@95->cputs] - // [337] phi cputs::s#11 = your_score [phi:main::@95->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = your_score [phi:main::@95->cputs#0] -- pbuz1=pbuc1 lda #your_score @@ -14809,7 +14809,7 @@ main: { // cputs(buffer) // [158] call cputs // [337] phi from main::@96 to cputs [phi:main::@96->cputs] - // [337] phi cputs::s#11 = buffer [phi:main::@96->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = buffer [phi:main::@96->cputs#0] -- pbuz1=pbuc1 lda #buffer @@ -14821,7 +14821,7 @@ main: { // [160] call textcolor // Red // [334] phi from main::@97 to textcolor [phi:main::@97->textcolor] - // [334] phi textcolor::color#7 = 3 [phi:main::@97->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 3 [phi:main::@97->textcolor#0] -- vbuz1=vbuc1 lda #3 sta.z textcolor.color jsr textcolor @@ -14830,7 +14830,7 @@ main: { // cputs(high_score) // [162] call cputs // [337] phi from main::@98 to cputs [phi:main::@98->cputs] - // [337] phi cputs::s#11 = high_score [phi:main::@98->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = high_score [phi:main::@98->cputs#0] -- pbuz1=pbuc1 lda #high_score @@ -14867,14 +14867,14 @@ main: { sta.z utoa.value+1 // [167] call utoa // [390] phi from main::@46 to utoa [phi:main::@46->utoa] - // [390] phi utoa::value#10 = utoa::value#2 [phi:main::@46->utoa#0] -- call_phi_near + // [390] phi utoa::value#10 = utoa::value#2 [phi:main::@46->utoa#0] -- register_copy jsr utoa // [168] phi from main::@46 to main::@100 [phi:main::@46->main::@100] // main::@100 // cputs(buffer) // [169] call cputs // [337] phi from main::@100 to cputs [phi:main::@100->cputs] - // [337] phi cputs::s#11 = buffer [phi:main::@100->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = buffer [phi:main::@100->cputs#0] -- pbuz1=pbuc1 lda #buffer @@ -14886,7 +14886,7 @@ main: { // [171] call textcolor // Cyan // [334] phi from main::@101 to textcolor [phi:main::@101->textcolor] - // [334] phi textcolor::color#7 = 1 [phi:main::@101->textcolor#0] -- call_phi_near + // [334] phi textcolor::color#7 = 1 [phi:main::@101->textcolor#0] -- vbuz1=vbuc1 lda #1 sta.z textcolor.color jsr textcolor @@ -14895,7 +14895,7 @@ main: { // cputs(play_again) // [173] call cputs // [337] phi from main::@102 to cputs [phi:main::@102->cputs] - // [337] phi cputs::s#11 = play_again [phi:main::@102->cputs#0] -- call_phi_near + // [337] phi cputs::s#11 = play_again [phi:main::@102->cputs#0] -- pbuz1=pbuc1 lda #play_again @@ -14951,7 +14951,7 @@ main: { // main::@27 __b27: // read_chrono() - // [182] call read_chrono -- call_phi_near + // [182] call read_chrono jsr read_chrono // main::@85 // m=PEEK @@ -15123,7 +15123,7 @@ main: { // [212] call wait // [381] phi from main::@42 to wait [phi:main::@42->wait] // [381] phi z#53 = z#100 [phi:main::@42->wait#0] -- register_copy - // [381] phi wait::n#6 = $a [phi:main::@42->wait#1] -- call_phi_near + // [381] phi wait::n#6 = $a [phi:main::@42->wait#1] -- vbuz1=vbuc1 lda #$a sta.z wait.n jsr wait @@ -15280,7 +15280,7 @@ main: { // Clear peephole if there is not bricks contact // [381] phi from main::@36 to wait [phi:main::@36->wait] // [381] phi z#53 = z#48 [phi:main::@36->wait#0] -- register_copy - // [381] phi wait::n#6 = 5 [phi:main::@36->wait#1] -- call_phi_near + // [381] phi wait::n#6 = 5 [phi:main::@36->wait#1] -- vbuz1=vbuc1 lda #5 sta.z wait.n jsr wait @@ -15371,7 +15371,7 @@ main: { // [254] call wait // [381] phi from main::@89 to wait [phi:main::@89->wait] // [381] phi z#53 = z#25 [phi:main::@89->wait#0] -- register_copy - // [381] phi wait::n#6 = 5 [phi:main::@89->wait#1] -- call_phi_near + // [381] phi wait::n#6 = 5 [phi:main::@89->wait#1] -- vbuz1=vbuc1 lda #5 sta.z wait.n jsr wait @@ -15494,7 +15494,7 @@ main: { // write_score() // [269] call write_score // [351] phi from main::@34 to write_score [phi:main::@34->write_score] - // [351] phi score#13 = score#6 [phi:main::@34->write_score#0] -- call_phi_near + // [351] phi score#13 = score#6 [phi:main::@34->write_score#0] -- register_copy jsr write_score // [270] phi from main::@34 to main::@88 [phi:main::@34->main::@88] // main::@88 @@ -15502,7 +15502,7 @@ main: { // [271] call wait // [381] phi from main::@88 to wait [phi:main::@88->wait] // [381] phi z#53 = z#100 [phi:main::@88->wait#0] -- register_copy - // [381] phi wait::n#6 = $a [phi:main::@88->wait#1] -- call_phi_near + // [381] phi wait::n#6 = $a [phi:main::@88->wait#1] -- vbuz1=vbuc1 lda #$a sta.z wait.n jsr wait @@ -15525,7 +15525,7 @@ main: { // [273] chrout::petscii = main::$57 -- vbuz1=vwuz2 lda.z __57 sta.z chrout.petscii - // [274] call chrout -- call_phi_near + // [274] call chrout jsr chrout jmp __b11 // main::@21 @@ -15535,7 +15535,7 @@ main: { ldy.z j_2 lda ducknumber,y sta.z chrout.petscii - // [276] call chrout -- call_phi_near + // [276] call chrout jsr chrout // main::@78 // for (j=0; j<5; j++) @@ -15551,7 +15551,7 @@ main: { ldy.z j_1 lda chrono,y sta.z chrout.petscii - // [279] call chrout -- call_phi_near + // [279] call chrout jsr chrout // main::@74 // for (j=0; j<4; ++j) @@ -15577,7 +15577,7 @@ main: { // [283] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [284] call chrout -- call_phi_near + // [284] call chrout jsr chrout // main::@73 // z+m @@ -15618,7 +15618,7 @@ main: { // [288] chrout::petscii = right -- vbuz1=vbuc1 lda #right sta.z chrout.petscii - // [289] call chrout -- call_phi_near + // [289] call chrout jsr chrout // main::@72 // for (j=1; j<=m; ++j) @@ -15633,7 +15633,7 @@ main: { // [291] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [292] call chrout -- call_phi_near + // [292] call chrout jsr chrout // [293] phi from main::@7 to main::@9 [phi:main::@7->main::@9] // [293] phi n#101 = 2 [phi:main::@7->main::@9#0] -- vbuz1=vbuc1 @@ -15651,7 +15651,7 @@ main: { // [295] chrout::petscii = brick -- vbuz1=vbuc1 lda #brick sta.z chrout.petscii - // [296] call chrout -- call_phi_near + // [296] call chrout jsr chrout // main::@64 // for (k=1;k<22;k++) @@ -15667,7 +15667,7 @@ main: { // [298] chrout::petscii = right -- vbuz1=vbuc1 lda #right sta.z chrout.petscii - // [299] call chrout -- call_phi_near + // [299] call chrout jsr chrout // main::@63 // for(n=2;n<22;++n) @@ -15839,7 +15839,7 @@ clear_screen: { // [325] call gotoxy // From 0-->505 (506 bytes). ClearScreen with byte 'n' with color 'm' // [304] phi from clear_screen::@3 to gotoxy [phi:clear_screen::@3->gotoxy] - // [304] phi gotoxy::y#4 = 0 [phi:clear_screen::@3->gotoxy#0] -- call_phi_near + // [304] phi gotoxy::y#4 = 0 [phi:clear_screen::@3->gotoxy#0] -- vbuz1=vbuc1 lda #0 sta.z gotoxy.y jsr gotoxy @@ -15848,7 +15848,7 @@ clear_screen: { // [326] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [327] call chrout -- call_phi_near + // [327] call chrout jsr chrout // clear_screen::@return // } @@ -15935,7 +15935,7 @@ cputs: { __b2: // cputc(c) // [343] cputc::c#0 = cputs::c#1 - // [344] call cputc -- call_phi_near + // [344] call cputc jsr cputc jmp __b1 } @@ -16014,7 +16014,7 @@ write_score: { // [358] call utoa // (!!) Needed. Possibly a bug // [390] phi from write_score::@7 to utoa [phi:write_score::@7->utoa] - // [390] phi utoa::value#10 = utoa::value#1 [phi:write_score::@7->utoa#0] -- call_phi_near + // [390] phi utoa::value#10 = utoa::value#1 [phi:write_score::@7->utoa#0] -- register_copy jsr utoa // write_score::@11 // if (score>9) @@ -16063,14 +16063,14 @@ write_score: { // [366] chrout::petscii = yellow -- vbuz1=vbuc1 lda #yellow sta.z chrout.petscii - // [367] call chrout -- call_phi_near + // [367] call chrout jsr chrout // write_score::@12 // chrout(home) // [368] chrout::petscii = home -- vbuz1=vbuc1 lda #home sta.z chrout.petscii - // [369] call chrout -- call_phi_near + // [369] call chrout jsr chrout // write_score::@13 // POKE @@ -16099,7 +16099,7 @@ write_score: { ldy.z m lda points,y sta.z chrout.petscii - // [375] call chrout -- call_phi_near + // [375] call chrout jsr chrout // write_score::@14 // for (m=0;m<4;m++) @@ -16295,7 +16295,7 @@ utoa: { // [405] utoa_append::value#0 = utoa::value#3 // [406] utoa_append::sub#0 = utoa::digit_value#0 // [407] call utoa_append - // [432] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near + // [432] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] jsr utoa_append // utoa_append(buffer++, value, digit_value) // [408] utoa_append::return#0 = utoa_append::value#2 @@ -16340,7 +16340,7 @@ read_chrono: { bcc !+ inc.z div16u8u.dividend+1 !: - // [414] call div16u8u -- call_phi_near + // [414] call div16u8u jsr div16u8u // [415] div16u8u::return#2 = div16u8u::return#0 -- vwuz1=vwuz2 lda.z div16u8u.return @@ -16413,7 +16413,7 @@ cputc: { // [427] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [428] call cputln -- call_phi_near + // [428] call cputln jsr cputln // cputc::@return __breturn: @@ -16424,7 +16424,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [431] call cputln -- call_phi_near + // [431] call cputln jsr cputln rts } @@ -16509,7 +16509,7 @@ div16u8u: { // [440] call divr8u // [456] phi from div16u8u to divr8u [phi:div16u8u->divr8u] // [456] phi divr8u::dividend#5 = divr8u::dividend#1 [phi:div16u8u->divr8u#0] -- register_copy - // [456] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#1] -- call_phi_near + // [456] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#1] -- vbuz1=vbuc1 lda #0 sta.z divr8u.rem jsr divr8u @@ -16527,7 +16527,7 @@ div16u8u: { // [445] call divr8u // [456] phi from div16u8u::@1 to divr8u [phi:div16u8u::@1->divr8u] // [456] phi divr8u::dividend#5 = divr8u::dividend#2 [phi:div16u8u::@1->divr8u#0] -- register_copy - // [456] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#1] -- call_phi_near + // [456] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#1] -- register_copy jsr divr8u // unsigned char quotient_lo = divr8u(BYTE0(dividend), divisor, rem8u) // [446] divr8u::return#3 = divr8u::return#0 @@ -16573,7 +16573,7 @@ cputln: { // [453] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [454] call cscroll -- call_phi_near + // [454] call cscroll jsr cscroll // cputln::@return // } @@ -16684,7 +16684,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [485] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [485] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -16700,7 +16700,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [485] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [485] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -16714,7 +16714,7 @@ cscroll: { // [495] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuz1=vbuc1 lda #' ' sta.z memset.c - // [495] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [495] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -16728,7 +16728,7 @@ cscroll: { // [480] call memset // [495] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [495] phi memset::c#4 = memset::c#1 [phi:cscroll::@4->memset#0] -- register_copy - // [495] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [495] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/emptyblock-error.log b/src/test/ref/emptyblock-error.log index e0cecc608..94603b9c6 100644 --- a/src/test/ref/emptyblock-error.log +++ b/src/test/ref/emptyblock-error.log @@ -210,7 +210,7 @@ main: { // main::@1 __b1: // [2] call menu - // [3] phi from main::@1 to menu [phi:main::@1->menu] -- call_phi_near + // [3] phi from main::@1 to menu [phi:main::@1->menu] menu_from___b1: jsr menu jmp __b1_from___b1 @@ -223,7 +223,7 @@ menu: { // menu::@1 __b1: // [5] call mode - // [7] phi from menu::@1 to mode [phi:menu::@1->mode] -- call_phi_near + // [7] phi from menu::@1 to mode [phi:menu::@1->mode] mode_from___b1: jsr mode jmp __breturn @@ -301,7 +301,7 @@ main: { __b1: // menu() // [2] call menu - // [3] phi from main::@1 to menu [phi:main::@1->menu] -- call_phi_near + // [3] phi from main::@1 to menu [phi:main::@1->menu] jsr menu jmp __b1 } @@ -311,7 +311,7 @@ menu: { // menu::@1 // mode() // [5] call mode - // [7] phi from menu::@1 to mode [phi:menu::@1->mode] -- call_phi_near + // [7] phi from menu::@1 to mode [phi:menu::@1->mode] jsr mode // menu::@return // } diff --git a/src/test/ref/enum-5.log b/src/test/ref/enum-5.log index 22495f37d..de8d812af 100644 --- a/src/test/ref/enum-5.log +++ b/src/test/ref/enum-5.log @@ -120,7 +120,7 @@ main: { // [0] *main::SCREEN = main::ON -- _deref_pbuc1=vbuc2 lda #ON sta SCREEN - // [1] call test -- call_phi_near + // [1] call test jsr test jmp __breturn // main::@return @@ -186,7 +186,7 @@ main: { lda #ON sta SCREEN // test() - // [1] call test -- call_phi_near + // [1] call test jsr test // main::@return // } diff --git a/src/test/ref/euclid-3.log b/src/test/ref/euclid-3.log index 2f5eec06d..1fad1e5a5 100644 --- a/src/test/ref/euclid-3.log +++ b/src/test/ref/euclid-3.log @@ -1274,7 +1274,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call print_cls - // [15] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [15] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1298,7 +1298,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [18] phi print_euclid::a#10 = $80 [phi:main::@1->print_euclid#3] -- call_phi_near + // [18] phi print_euclid::a#10 = $80 [phi:main::@1->print_euclid#3] -- vbuz1=vbuc1 lda #$80 sta.z print_euclid.a jsr print_euclid @@ -1318,7 +1318,7 @@ main: { lda #$45 sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#65 [phi:main::@2->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $a9 [phi:main::@2->print_euclid#3] -- call_phi_near + // [18] phi print_euclid::a#10 = $a9 [phi:main::@2->print_euclid#3] -- vbuz1=vbuc1 lda #$a9 sta.z print_euclid.a jsr print_euclid @@ -1338,7 +1338,7 @@ main: { lda #$37 sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#66 [phi:main::@3->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $9b [phi:main::@3->print_euclid#3] -- call_phi_near + // [18] phi print_euclid::a#10 = $9b [phi:main::@3->print_euclid#3] -- vbuz1=vbuc1 lda #$9b sta.z print_euclid.a jsr print_euclid @@ -1358,7 +1358,7 @@ main: { lda #3 sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#67 [phi:main::@4->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $c7 [phi:main::@4->print_euclid#3] -- call_phi_near + // [18] phi print_euclid::a#10 = $c7 [phi:main::@4->print_euclid#3] -- vbuz1=vbuc1 lda #$c7 sta.z print_euclid.a jsr print_euclid @@ -1378,7 +1378,7 @@ main: { lda #$1a sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#68 [phi:main::@5->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $5b [phi:main::@5->print_euclid#3] -- call_phi_near + // [18] phi print_euclid::a#10 = $5b [phi:main::@5->print_euclid#3] -- vbuz1=vbuc1 lda #$5b sta.z print_euclid.a jsr print_euclid @@ -1398,7 +1398,7 @@ main: { lda #$bb sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#69 [phi:main::@6->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $77 [phi:main::@6->print_euclid#3] -- call_phi_near + // [18] phi print_euclid::a#10 = $77 [phi:main::@6->print_euclid#3] -- vbuz1=vbuc1 lda #$77 sta.z print_euclid.a jsr print_euclid @@ -1412,7 +1412,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [16] call memset - // [36] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [36] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -1432,7 +1432,7 @@ print_euclid: { // [42] phi from print_euclid to print_uchar [phi:print_euclid->print_uchar] print_uchar_from_print_euclid: // [42] phi print_char_cursor#53 = print_char_cursor#55 [phi:print_euclid->print_uchar#0] -- register_copy - // [42] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_euclid->print_uchar#1] -- call_phi_near + // [42] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_euclid->print_uchar#1] -- register_copy jsr print_uchar // [21] phi from print_euclid to print_euclid::@1 [phi:print_euclid->print_euclid::@1] __b1_from_print_euclid: @@ -1443,7 +1443,7 @@ print_euclid: { // [50] phi from print_euclid::@1 to print_char [phi:print_euclid::@1->print_char] print_char_from___b1: // [50] phi print_char_cursor#32 = print_char_cursor#33 [phi:print_euclid::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@1->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@1->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b2 @@ -1455,7 +1455,7 @@ print_euclid: { // [42] phi from print_euclid::@2 to print_uchar [phi:print_euclid::@2->print_uchar] print_uchar_from___b2: // [42] phi print_char_cursor#53 = print_char_cursor#33 [phi:print_euclid::@2->print_uchar#0] -- register_copy - // [42] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_euclid::@2->print_uchar#1] -- call_phi_near + // [42] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_euclid::@2->print_uchar#1] -- register_copy jsr print_uchar // [25] phi from print_euclid::@2 to print_euclid::@3 [phi:print_euclid::@2->print_euclid::@3] __b3_from___b2: @@ -1466,7 +1466,7 @@ print_euclid: { // [50] phi from print_euclid::@3 to print_char [phi:print_euclid::@3->print_char] print_char_from___b3: // [50] phi print_char_cursor#32 = print_char_cursor#33 [phi:print_euclid::@3->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@3->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b4 @@ -1476,7 +1476,7 @@ print_euclid: { // [28] euclid::b#0 = print_euclid::b#10 -- vbuxx=vbuz1 ldx.z b // [29] call euclid - // [54] phi from print_euclid::@4 to euclid [phi:print_euclid::@4->euclid] -- call_phi_near + // [54] phi from print_euclid::@4 to euclid [phi:print_euclid::@4->euclid] euclid_from___b4: jsr euclid // [30] euclid::return#0 = euclid::a#2 -- vbuaa=vbuz1 @@ -1490,7 +1490,7 @@ print_euclid: { // [42] phi from print_euclid::@5 to print_uchar [phi:print_euclid::@5->print_uchar] print_uchar_from___b5: // [42] phi print_char_cursor#53 = print_char_cursor#33 [phi:print_euclid::@5->print_uchar#0] -- register_copy - // [42] phi print_uchar::b#3 = print_uchar::b#2 [phi:print_euclid::@5->print_uchar#1] -- call_phi_near + // [42] phi print_uchar::b#3 = print_uchar::b#2 [phi:print_euclid::@5->print_uchar#1] -- register_copy jsr print_uchar // [33] phi from print_euclid::@5 to print_euclid::@6 [phi:print_euclid::@5->print_euclid::@6] __b6_from___b5: @@ -1498,7 +1498,7 @@ print_euclid: { // print_euclid::@6 __b6: // [34] call print_ln - // [61] phi from print_euclid::@6 to print_ln [phi:print_euclid::@6->print_ln] -- call_phi_near + // [61] phi from print_euclid::@6 to print_ln [phi:print_euclid::@6->print_ln] print_ln_from___b6: jsr print_ln jmp __breturn @@ -1572,7 +1572,7 @@ print_uchar: { // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [50] phi print_char_cursor#32 = print_char_cursor#53 [phi:print_uchar->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -1586,7 +1586,7 @@ print_uchar: { // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [50] phi print_char_cursor#32 = print_char_cursor#33 [phi:print_uchar::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -1885,7 +1885,7 @@ Score: 1607 main: { // print_cls() // [1] call print_cls - // [15] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [15] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 @@ -1905,7 +1905,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [18] phi print_euclid::a#10 = $80 [phi:main::@1->print_euclid#3] -- call_phi_near + // [18] phi print_euclid::a#10 = $80 [phi:main::@1->print_euclid#3] -- vbuz1=vbuc1 lda #$80 sta.z print_euclid.a jsr print_euclid @@ -1923,7 +1923,7 @@ main: { lda #$45 sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#65 [phi:main::@2->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $a9 [phi:main::@2->print_euclid#3] -- call_phi_near + // [18] phi print_euclid::a#10 = $a9 [phi:main::@2->print_euclid#3] -- vbuz1=vbuc1 lda #$a9 sta.z print_euclid.a jsr print_euclid @@ -1941,7 +1941,7 @@ main: { lda #$37 sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#66 [phi:main::@3->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $9b [phi:main::@3->print_euclid#3] -- call_phi_near + // [18] phi print_euclid::a#10 = $9b [phi:main::@3->print_euclid#3] -- vbuz1=vbuc1 lda #$9b sta.z print_euclid.a jsr print_euclid @@ -1959,7 +1959,7 @@ main: { lda #3 sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#67 [phi:main::@4->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $c7 [phi:main::@4->print_euclid#3] -- call_phi_near + // [18] phi print_euclid::a#10 = $c7 [phi:main::@4->print_euclid#3] -- vbuz1=vbuc1 lda #$c7 sta.z print_euclid.a jsr print_euclid @@ -1977,7 +1977,7 @@ main: { lda #$1a sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#68 [phi:main::@5->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $5b [phi:main::@5->print_euclid#3] -- call_phi_near + // [18] phi print_euclid::a#10 = $5b [phi:main::@5->print_euclid#3] -- vbuz1=vbuc1 lda #$5b sta.z print_euclid.a jsr print_euclid @@ -1995,7 +1995,7 @@ main: { lda #$bb sta.z print_euclid.b // [18] phi print_char_cursor#55 = print_char_cursor#69 [phi:main::@6->print_euclid#2] -- register_copy - // [18] phi print_euclid::a#10 = $77 [phi:main::@6->print_euclid#3] -- call_phi_near + // [18] phi print_euclid::a#10 = $77 [phi:main::@6->print_euclid#3] -- vbuz1=vbuc1 lda #$77 sta.z print_euclid.a jsr print_euclid @@ -2009,7 +2009,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [16] call memset - // [36] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [36] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -2027,7 +2027,7 @@ print_euclid: { // [20] call print_uchar // [42] phi from print_euclid to print_uchar [phi:print_euclid->print_uchar] // [42] phi print_char_cursor#53 = print_char_cursor#55 [phi:print_euclid->print_uchar#0] -- register_copy - // [42] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_euclid->print_uchar#1] -- call_phi_near + // [42] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_euclid->print_uchar#1] -- register_copy jsr print_uchar // [21] phi from print_euclid to print_euclid::@1 [phi:print_euclid->print_euclid::@1] // print_euclid::@1 @@ -2035,7 +2035,7 @@ print_euclid: { // [22] call print_char // [50] phi from print_euclid::@1 to print_char [phi:print_euclid::@1->print_char] // [50] phi print_char_cursor#32 = print_char_cursor#33 [phi:print_euclid::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@1->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@1->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // print_euclid::@2 @@ -2045,7 +2045,7 @@ print_euclid: { // [24] call print_uchar // [42] phi from print_euclid::@2 to print_uchar [phi:print_euclid::@2->print_uchar] // [42] phi print_char_cursor#53 = print_char_cursor#33 [phi:print_euclid::@2->print_uchar#0] -- register_copy - // [42] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_euclid::@2->print_uchar#1] -- call_phi_near + // [42] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_euclid::@2->print_uchar#1] -- register_copy jsr print_uchar // [25] phi from print_euclid::@2 to print_euclid::@3 [phi:print_euclid::@2->print_euclid::@3] // print_euclid::@3 @@ -2053,7 +2053,7 @@ print_euclid: { // [26] call print_char // [50] phi from print_euclid::@3 to print_char [phi:print_euclid::@3->print_char] // [50] phi print_char_cursor#32 = print_char_cursor#33 [phi:print_euclid::@3->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@3->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = ' ' [phi:print_euclid::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // print_euclid::@4 @@ -2062,7 +2062,7 @@ print_euclid: { // [28] euclid::b#0 = print_euclid::b#10 -- vbuxx=vbuz1 ldx.z b // [29] call euclid - // [54] phi from print_euclid::@4 to euclid [phi:print_euclid::@4->euclid] -- call_phi_near + // [54] phi from print_euclid::@4 to euclid [phi:print_euclid::@4->euclid] jsr euclid // euclid(a,b) // [30] euclid::return#0 = euclid::a#2 -- vbuaa=vbuz1 @@ -2074,13 +2074,13 @@ print_euclid: { // [32] call print_uchar // [42] phi from print_euclid::@5 to print_uchar [phi:print_euclid::@5->print_uchar] // [42] phi print_char_cursor#53 = print_char_cursor#33 [phi:print_euclid::@5->print_uchar#0] -- register_copy - // [42] phi print_uchar::b#3 = print_uchar::b#2 [phi:print_euclid::@5->print_uchar#1] -- call_phi_near + // [42] phi print_uchar::b#3 = print_uchar::b#2 [phi:print_euclid::@5->print_uchar#1] -- register_copy jsr print_uchar // [33] phi from print_euclid::@5 to print_euclid::@6 [phi:print_euclid::@5->print_euclid::@6] // print_euclid::@6 // print_ln() // [34] call print_ln - // [61] phi from print_euclid::@6 to print_ln [phi:print_euclid::@6->print_ln] -- call_phi_near + // [61] phi from print_euclid::@6 to print_ln [phi:print_euclid::@6->print_ln] jsr print_ln // print_euclid::@return // } @@ -2152,7 +2152,7 @@ print_uchar: { // Table of hexadecimal digits // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] // [50] phi print_char_cursor#32 = print_char_cursor#53 [phi:print_uchar->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -2165,7 +2165,7 @@ print_uchar: { // [48] call print_char // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [50] phi print_char_cursor#32 = print_char_cursor#33 [phi:print_uchar::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/euclid-problem-2.log b/src/test/ref/euclid-problem-2.log index 697c007eb..4bd995818 100644 --- a/src/test/ref/euclid-problem-2.log +++ b/src/test/ref/euclid-problem-2.log @@ -499,7 +499,7 @@ main: { euclid_from_main: // [18] phi euclid::b#9 = 2 [phi:main->euclid#0] -- vbuxx=vbuc1 ldx #2 - // [18] phi euclid::a#10 = $80 [phi:main->euclid#1] -- call_phi_near + // [18] phi euclid::a#10 = $80 [phi:main->euclid#1] -- vbuz1=vbuc1 lda #$80 sta.z euclid.a jsr euclid @@ -516,7 +516,7 @@ main: { euclid_from___b1: // [18] phi euclid::b#9 = $45 [phi:main::@1->euclid#0] -- vbuxx=vbuc1 ldx #$45 - // [18] phi euclid::a#10 = $a9 [phi:main::@1->euclid#1] -- call_phi_near + // [18] phi euclid::a#10 = $a9 [phi:main::@1->euclid#1] -- vbuz1=vbuc1 lda #$a9 sta.z euclid.a jsr euclid @@ -533,7 +533,7 @@ main: { euclid_from___b2: // [18] phi euclid::b#9 = $9b [phi:main::@2->euclid#0] -- vbuxx=vbuc1 ldx #$9b - // [18] phi euclid::a#10 = $ff [phi:main::@2->euclid#1] -- call_phi_near + // [18] phi euclid::a#10 = $ff [phi:main::@2->euclid#1] -- vbuz1=vbuc1 lda #$ff sta.z euclid.a jsr euclid @@ -550,7 +550,7 @@ main: { euclid_from___b3: // [18] phi euclid::b#9 = 3 [phi:main::@3->euclid#0] -- vbuxx=vbuc1 ldx #3 - // [18] phi euclid::a#10 = $63 [phi:main::@3->euclid#1] -- call_phi_near + // [18] phi euclid::a#10 = $63 [phi:main::@3->euclid#1] -- vbuz1=vbuc1 lda #$63 sta.z euclid.a jsr euclid @@ -705,7 +705,7 @@ main: { // [18] phi from main to euclid [phi:main->euclid] // [18] phi euclid::b#9 = 2 [phi:main->euclid#0] -- vbuxx=vbuc1 ldx #2 - // [18] phi euclid::a#10 = $80 [phi:main->euclid#1] -- call_phi_near + // [18] phi euclid::a#10 = $80 [phi:main->euclid#1] -- vbuz1=vbuc1 lda #$80 sta.z euclid.a jsr euclid @@ -722,7 +722,7 @@ main: { // [18] phi from main::@1 to euclid [phi:main::@1->euclid] // [18] phi euclid::b#9 = $45 [phi:main::@1->euclid#0] -- vbuxx=vbuc1 ldx #$45 - // [18] phi euclid::a#10 = $a9 [phi:main::@1->euclid#1] -- call_phi_near + // [18] phi euclid::a#10 = $a9 [phi:main::@1->euclid#1] -- vbuz1=vbuc1 lda #$a9 sta.z euclid.a jsr euclid @@ -739,7 +739,7 @@ main: { // [18] phi from main::@2 to euclid [phi:main::@2->euclid] // [18] phi euclid::b#9 = $9b [phi:main::@2->euclid#0] -- vbuxx=vbuc1 ldx #$9b - // [18] phi euclid::a#10 = $ff [phi:main::@2->euclid#1] -- call_phi_near + // [18] phi euclid::a#10 = $ff [phi:main::@2->euclid#1] -- vbuz1=vbuc1 lda #$ff sta.z euclid.a jsr euclid @@ -756,7 +756,7 @@ main: { // [18] phi from main::@3 to euclid [phi:main::@3->euclid] // [18] phi euclid::b#9 = 3 [phi:main::@3->euclid#0] -- vbuxx=vbuc1 ldx #3 - // [18] phi euclid::a#10 = $63 [phi:main::@3->euclid#1] -- call_phi_near + // [18] phi euclid::a#10 = $63 [phi:main::@3->euclid#1] -- vbuz1=vbuc1 lda #$63 sta.z euclid.a jsr euclid diff --git a/src/test/ref/examples/atari2600/atari2600-sprites.log b/src/test/ref/examples/atari2600/atari2600-sprites.log index b2b4eda99..21d78081a 100644 --- a/src/test/ref/examples/atari2600/atari2600-sprites.log +++ b/src/test/ref/examples/atari2600/atari2600-sprites.log @@ -869,7 +869,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -1279,7 +1279,7 @@ __start: { sta.z p0_xpos // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/examples/c64/3d/perspective.log b/src/test/ref/examples/c64/3d/perspective.log index 0e9259487..75d6e8d72 100644 --- a/src/test/ref/examples/c64/3d/perspective.log +++ b/src/test/ref/examples/c64/3d/perspective.log @@ -1781,7 +1781,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [7] call main -- call_phi_near + // [7] call main jsr main jmp __breturn // __start::@return @@ -1794,7 +1794,7 @@ main: { // asm { sei } sei // [10] call mulf_init - // [17] phi from main to mulf_init [phi:main->mulf_init] -- call_phi_near + // [17] phi from main to mulf_init [phi:main->mulf_init] mulf_init_from_main: jsr mulf_init jmp __b1 @@ -1811,7 +1811,7 @@ main: { lda #>mulf_sqr2 sta.z psp2+1 // [13] call print_cls - // [35] phi from main::@1 to print_cls [phi:main::@1->print_cls] -- call_phi_near + // [35] phi from main::@1 to print_cls [phi:main::@1->print_cls] print_cls_from___b1: jsr print_cls // [14] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -1820,7 +1820,7 @@ main: { // main::@2 __b2: // [15] call do_perspective - // [38] phi from main::@2 to do_perspective [phi:main::@2->do_perspective] -- call_phi_near + // [38] phi from main::@2 to do_perspective [phi:main::@2->do_perspective] do_perspective_from___b2: jsr do_perspective jmp __breturn @@ -1926,7 +1926,7 @@ mulf_init: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [36] call memset - // [65] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [65] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -1949,7 +1949,7 @@ do_perspective: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [71] phi print_str::str#10 = do_perspective::str [phi:do_perspective->print_str#1] -- call_phi_near + // [71] phi print_str::str#10 = do_perspective::str [phi:do_perspective->print_str#1] -- pbuz1=pbuc1 lda #str @@ -1963,7 +1963,7 @@ do_perspective: { // [41] call print_schar // [78] phi from do_perspective::@1 to print_schar [phi:do_perspective::@1->print_schar] print_schar_from___b1: - // [78] phi print_schar::b#4 = do_perspective::x#0 [phi:do_perspective::@1->print_schar#0] -- call_phi_near + // [78] phi print_schar::b#4 = do_perspective::x#0 [phi:do_perspective::@1->print_schar#0] -- vbsxx=vbsc1 ldx #x jsr print_schar // [42] phi from do_perspective::@1 to do_perspective::@2 [phi:do_perspective::@1->do_perspective::@2] @@ -1975,7 +1975,7 @@ do_perspective: { // [71] phi from do_perspective::@2 to print_str [phi:do_perspective::@2->print_str] print_str_from___b2: // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@2->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@2->print_str#1] -- call_phi_near + // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@2->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -1989,7 +1989,7 @@ do_perspective: { // [45] call print_schar // [78] phi from do_perspective::@3 to print_schar [phi:do_perspective::@3->print_schar] print_schar_from___b3: - // [78] phi print_schar::b#4 = do_perspective::y#0 [phi:do_perspective::@3->print_schar#0] -- call_phi_near + // [78] phi print_schar::b#4 = do_perspective::y#0 [phi:do_perspective::@3->print_schar#0] -- vbsxx=vbsc1 ldx #y jsr print_schar // [46] phi from do_perspective::@3 to do_perspective::@4 [phi:do_perspective::@3->do_perspective::@4] @@ -2001,7 +2001,7 @@ do_perspective: { // [71] phi from do_perspective::@4 to print_str [phi:do_perspective::@4->print_str] print_str_from___b4: // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@4->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@4->print_str#1] -- call_phi_near + // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@4->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2015,7 +2015,7 @@ do_perspective: { // [49] call print_schar // [78] phi from do_perspective::@5 to print_schar [phi:do_perspective::@5->print_schar] print_schar_from___b5: - // [78] phi print_schar::b#4 = do_perspective::z#0 [phi:do_perspective::@5->print_schar#0] -- call_phi_near + // [78] phi print_schar::b#4 = do_perspective::z#0 [phi:do_perspective::@5->print_schar#0] -- vbsxx=vbsc1 ldx #z jsr print_schar // [50] phi from do_perspective::@5 to do_perspective::@6 [phi:do_perspective::@5->do_perspective::@6] @@ -2027,7 +2027,7 @@ do_perspective: { // [71] phi from do_perspective::@6 to print_str [phi:do_perspective::@6->print_str] print_str_from___b6: // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@6->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str3 [phi:do_perspective::@6->print_str#1] -- call_phi_near + // [71] phi print_str::str#10 = do_perspective::str3 [phi:do_perspective::@6->print_str#1] -- pbuz1=pbuc1 lda #str3 @@ -2038,7 +2038,7 @@ do_perspective: { jmp __b7 // do_perspective::@7 __b7: - // [53] call perspective -- call_phi_near + // [53] call perspective jsr perspective jmp __b8 // do_perspective::@8 @@ -2049,7 +2049,7 @@ do_perspective: { // [94] phi from do_perspective::@8 to print_uchar [phi:do_perspective::@8->print_uchar] print_uchar_from___b8: // [94] phi print_char_cursor#72 = print_char_cursor#1 [phi:do_perspective::@8->print_uchar#0] -- register_copy - // [94] phi print_uchar::b#3 = print_uchar::b#1 [phi:do_perspective::@8->print_uchar#1] -- call_phi_near + // [94] phi print_uchar::b#3 = print_uchar::b#1 [phi:do_perspective::@8->print_uchar#1] -- register_copy jsr print_uchar // [56] phi from do_perspective::@8 to do_perspective::@9 [phi:do_perspective::@8->do_perspective::@9] __b9_from___b8: @@ -2060,7 +2060,7 @@ do_perspective: { // [71] phi from do_perspective::@9 to print_str [phi:do_perspective::@9->print_str] print_str_from___b9: // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@9->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@9->print_str#1] -- call_phi_near + // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@9->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2075,7 +2075,7 @@ do_perspective: { // [94] phi from do_perspective::@10 to print_uchar [phi:do_perspective::@10->print_uchar] print_uchar_from___b10: // [94] phi print_char_cursor#72 = print_char_cursor#1 [phi:do_perspective::@10->print_uchar#0] -- register_copy - // [94] phi print_uchar::b#3 = print_uchar::b#2 [phi:do_perspective::@10->print_uchar#1] -- call_phi_near + // [94] phi print_uchar::b#3 = print_uchar::b#2 [phi:do_perspective::@10->print_uchar#1] -- register_copy jsr print_uchar // [60] phi from do_perspective::@10 to do_perspective::@11 [phi:do_perspective::@10->do_perspective::@11] __b11_from___b10: @@ -2086,7 +2086,7 @@ do_perspective: { // [71] phi from do_perspective::@11 to print_str [phi:do_perspective::@11->print_str] print_str_from___b11: // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@11->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str5 [phi:do_perspective::@11->print_str#1] -- call_phi_near + // [71] phi print_str::str#10 = do_perspective::str5 [phi:do_perspective::@11->print_str#1] -- pbuz1=pbuc1 lda #str5 @@ -2098,7 +2098,7 @@ do_perspective: { // do_perspective::@12 __b12: // [63] call print_ln - // [102] phi from do_perspective::@12 to print_ln [phi:do_perspective::@12->print_ln] -- call_phi_near + // [102] phi from do_perspective::@12 to print_ln [phi:do_perspective::@12->print_ln] print_ln_from___b12: jsr print_ln jmp __breturn @@ -2196,7 +2196,7 @@ print_str: { // [107] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [107] phi print_char_cursor#45 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [107] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char jmp __b3 // print_str::@3 @@ -2224,7 +2224,7 @@ print_schar: { // [107] phi from print_schar::@3 to print_char [phi:print_schar::@3->print_char] print_char_from___b3: // [107] phi print_char_cursor#45 = print_char_cursor#1 [phi:print_schar::@3->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = ' ' [phi:print_schar::@3->print_char#1] -- call_phi_near + // [107] phi print_char::ch#5 = ' ' [phi:print_schar::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [82] phi from print_schar::@3 print_schar::@4 to print_schar::@2 [phi:print_schar::@3/print_schar::@4->print_schar::@2] @@ -2239,7 +2239,7 @@ print_schar: { // [94] phi from print_schar::@2 to print_uchar [phi:print_schar::@2->print_uchar] print_uchar_from___b2: // [94] phi print_char_cursor#72 = print_char_cursor#11 [phi:print_schar::@2->print_uchar#0] -- register_copy - // [94] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_schar::@2->print_uchar#1] -- call_phi_near + // [94] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_schar::@2->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_schar::@return @@ -2255,7 +2255,7 @@ print_schar: { // [107] phi from print_schar::@1 to print_char [phi:print_schar::@1->print_char] print_char_from___b1: // [107] phi print_char_cursor#45 = print_char_cursor#1 [phi:print_schar::@1->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = '-' [phi:print_schar::@1->print_char#1] -- call_phi_near + // [107] phi print_char::ch#5 = '-' [phi:print_schar::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char jmp __b4 @@ -2327,7 +2327,7 @@ print_uchar: { // [107] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [107] phi print_char_cursor#45 = print_char_cursor#72 [phi:print_uchar->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- call_phi_near + // [107] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -2341,7 +2341,7 @@ print_uchar: { // [107] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [107] phi print_char_cursor#45 = print_char_cursor#11 [phi:print_uchar::@1->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [107] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -2772,7 +2772,7 @@ __start: { sta.z psp2+1 // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [7] call main -- call_phi_near + // [7] call main jsr main // __start::@return // [8] return @@ -2785,7 +2785,7 @@ main: { sei // mulf_init() // [10] call mulf_init - // [17] phi from main to mulf_init [phi:main->mulf_init] -- call_phi_near + // [17] phi from main to mulf_init [phi:main->mulf_init] jsr mulf_init // main::@1 // psp1 = (unsigned int)mulf_sqr1 @@ -2802,13 +2802,13 @@ main: { sta.z psp2+1 // print_cls() // [13] call print_cls - // [35] phi from main::@1 to print_cls [phi:main::@1->print_cls] -- call_phi_near + // [35] phi from main::@1 to print_cls [phi:main::@1->print_cls] jsr print_cls // [14] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // do_perspective($39, -$47, $36) // [15] call do_perspective - // [38] phi from main::@2 to do_perspective [phi:main::@2->do_perspective] -- call_phi_near + // [38] phi from main::@2 to do_perspective [phi:main::@2->do_perspective] jsr do_perspective // main::@return // } @@ -2914,7 +2914,7 @@ mulf_init: { print_cls: { // memset(print_screen, ' ', 1000) // [36] call memset - // [65] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [65] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -2935,7 +2935,7 @@ do_perspective: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [71] phi print_str::str#10 = do_perspective::str [phi:do_perspective->print_str#1] -- call_phi_near + // [71] phi print_str::str#10 = do_perspective::str [phi:do_perspective->print_str#1] -- pbuz1=pbuc1 lda #str @@ -2946,7 +2946,7 @@ do_perspective: { // print_schar(x) // [41] call print_schar // [78] phi from do_perspective::@1 to print_schar [phi:do_perspective::@1->print_schar] - // [78] phi print_schar::b#4 = do_perspective::x#0 [phi:do_perspective::@1->print_schar#0] -- call_phi_near + // [78] phi print_schar::b#4 = do_perspective::x#0 [phi:do_perspective::@1->print_schar#0] -- vbsxx=vbsc1 ldx #x jsr print_schar // [42] phi from do_perspective::@1 to do_perspective::@2 [phi:do_perspective::@1->do_perspective::@2] @@ -2955,7 +2955,7 @@ do_perspective: { // [43] call print_str // [71] phi from do_perspective::@2 to print_str [phi:do_perspective::@2->print_str] // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@2->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@2->print_str#1] -- call_phi_near + // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@2->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2966,7 +2966,7 @@ do_perspective: { // print_schar(y) // [45] call print_schar // [78] phi from do_perspective::@3 to print_schar [phi:do_perspective::@3->print_schar] - // [78] phi print_schar::b#4 = do_perspective::y#0 [phi:do_perspective::@3->print_schar#0] -- call_phi_near + // [78] phi print_schar::b#4 = do_perspective::y#0 [phi:do_perspective::@3->print_schar#0] -- vbsxx=vbsc1 ldx #y jsr print_schar // [46] phi from do_perspective::@3 to do_perspective::@4 [phi:do_perspective::@3->do_perspective::@4] @@ -2975,7 +2975,7 @@ do_perspective: { // [47] call print_str // [71] phi from do_perspective::@4 to print_str [phi:do_perspective::@4->print_str] // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@4->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@4->print_str#1] -- call_phi_near + // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@4->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2986,7 +2986,7 @@ do_perspective: { // print_schar(z) // [49] call print_schar // [78] phi from do_perspective::@5 to print_schar [phi:do_perspective::@5->print_schar] - // [78] phi print_schar::b#4 = do_perspective::z#0 [phi:do_perspective::@5->print_schar#0] -- call_phi_near + // [78] phi print_schar::b#4 = do_perspective::z#0 [phi:do_perspective::@5->print_schar#0] -- vbsxx=vbsc1 ldx #z jsr print_schar // [50] phi from do_perspective::@5 to do_perspective::@6 [phi:do_perspective::@5->do_perspective::@6] @@ -2995,7 +2995,7 @@ do_perspective: { // [51] call print_str // [71] phi from do_perspective::@6 to print_str [phi:do_perspective::@6->print_str] // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@6->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str3 [phi:do_perspective::@6->print_str#1] -- call_phi_near + // [71] phi print_str::str#10 = do_perspective::str3 [phi:do_perspective::@6->print_str#1] -- pbuz1=pbuc1 lda #str3 @@ -3004,7 +3004,7 @@ do_perspective: { // [52] phi from do_perspective::@6 to do_perspective::@7 [phi:do_perspective::@6->do_perspective::@7] // do_perspective::@7 // perspective(x, y, z) - // [53] call perspective -- call_phi_near + // [53] call perspective jsr perspective // do_perspective::@8 // print_uchar((char)xr) @@ -3013,7 +3013,7 @@ do_perspective: { // [55] call print_uchar // [94] phi from do_perspective::@8 to print_uchar [phi:do_perspective::@8->print_uchar] // [94] phi print_char_cursor#72 = print_char_cursor#1 [phi:do_perspective::@8->print_uchar#0] -- register_copy - // [94] phi print_uchar::b#3 = print_uchar::b#1 [phi:do_perspective::@8->print_uchar#1] -- call_phi_near + // [94] phi print_uchar::b#3 = print_uchar::b#1 [phi:do_perspective::@8->print_uchar#1] -- register_copy jsr print_uchar // [56] phi from do_perspective::@8 to do_perspective::@9 [phi:do_perspective::@8->do_perspective::@9] // do_perspective::@9 @@ -3021,7 +3021,7 @@ do_perspective: { // [57] call print_str // [71] phi from do_perspective::@9 to print_str [phi:do_perspective::@9->print_str] // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@9->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@9->print_str#1] -- call_phi_near + // [71] phi print_str::str#10 = do_perspective::str1 [phi:do_perspective::@9->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -3034,7 +3034,7 @@ do_perspective: { // [59] call print_uchar // [94] phi from do_perspective::@10 to print_uchar [phi:do_perspective::@10->print_uchar] // [94] phi print_char_cursor#72 = print_char_cursor#1 [phi:do_perspective::@10->print_uchar#0] -- register_copy - // [94] phi print_uchar::b#3 = print_uchar::b#2 [phi:do_perspective::@10->print_uchar#1] -- call_phi_near + // [94] phi print_uchar::b#3 = print_uchar::b#2 [phi:do_perspective::@10->print_uchar#1] -- register_copy jsr print_uchar // [60] phi from do_perspective::@10 to do_perspective::@11 [phi:do_perspective::@10->do_perspective::@11] // do_perspective::@11 @@ -3042,7 +3042,7 @@ do_perspective: { // [61] call print_str // [71] phi from do_perspective::@11 to print_str [phi:do_perspective::@11->print_str] // [71] phi print_char_cursor#77 = print_char_cursor#11 [phi:do_perspective::@11->print_str#0] -- register_copy - // [71] phi print_str::str#10 = do_perspective::str5 [phi:do_perspective::@11->print_str#1] -- call_phi_near + // [71] phi print_str::str#10 = do_perspective::str5 [phi:do_perspective::@11->print_str#1] -- pbuz1=pbuc1 lda #str5 @@ -3052,7 +3052,7 @@ do_perspective: { // do_perspective::@12 // print_ln() // [63] call print_ln - // [102] phi from do_perspective::@12 to print_ln [phi:do_perspective::@12->print_ln] -- call_phi_near + // [102] phi from do_perspective::@12 to print_ln [phi:do_perspective::@12->print_ln] jsr print_ln // do_perspective::@return // } @@ -3144,7 +3144,7 @@ print_str: { // [76] call print_char // [107] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [107] phi print_char_cursor#45 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [107] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char // print_str::@3 // print_char(*(str++)); @@ -3169,7 +3169,7 @@ print_schar: { // [81] call print_char // [107] phi from print_schar::@3 to print_char [phi:print_schar::@3->print_char] // [107] phi print_char_cursor#45 = print_char_cursor#1 [phi:print_schar::@3->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = ' ' [phi:print_schar::@3->print_char#1] -- call_phi_near + // [107] phi print_char::ch#5 = ' ' [phi:print_schar::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [82] phi from print_schar::@3 print_schar::@4 to print_schar::@2 [phi:print_schar::@3/print_schar::@4->print_schar::@2] @@ -3181,7 +3181,7 @@ print_schar: { // [84] call print_uchar // [94] phi from print_schar::@2 to print_uchar [phi:print_schar::@2->print_uchar] // [94] phi print_char_cursor#72 = print_char_cursor#11 [phi:print_schar::@2->print_uchar#0] -- register_copy - // [94] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_schar::@2->print_uchar#1] -- call_phi_near + // [94] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_schar::@2->print_uchar#1] -- register_copy jsr print_uchar // print_schar::@return // } @@ -3194,7 +3194,7 @@ print_schar: { // [87] call print_char // [107] phi from print_schar::@1 to print_char [phi:print_schar::@1->print_char] // [107] phi print_char_cursor#45 = print_char_cursor#1 [phi:print_schar::@1->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = '-' [phi:print_schar::@1->print_char#1] -- call_phi_near + // [107] phi print_char::ch#5 = '-' [phi:print_schar::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char // print_schar::@4 @@ -3268,7 +3268,7 @@ print_uchar: { // Table of hexadecimal digits // [107] phi from print_uchar to print_char [phi:print_uchar->print_char] // [107] phi print_char_cursor#45 = print_char_cursor#72 [phi:print_uchar->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- call_phi_near + // [107] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -3281,7 +3281,7 @@ print_uchar: { // [100] call print_char // [107] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [107] phi print_char_cursor#45 = print_char_cursor#11 [phi:print_uchar::@1->print_char#0] -- register_copy - // [107] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [107] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/examples/c64/bresenham/bitmap-bresenham.log b/src/test/ref/examples/c64/bresenham/bitmap-bresenham.log index 8995c17ed..78e8ae48d 100644 --- a/src/test/ref/examples/c64/bresenham/bitmap-bresenham.log +++ b/src/test/ref/examples/c64/bresenham/bitmap-bresenham.log @@ -2379,7 +2379,7 @@ main: { lda #(SCREEN&$3fff)/$40|(BITMAP&$3fff)/$400 sta VICII_MEMORY // [4] call bitmap_init - // [11] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near + // [11] phi from main to bitmap_init [phi:main->bitmap_init] bitmap_init_from_main: jsr bitmap_init // [5] phi from main to main::@2 [phi:main->main::@2] @@ -2388,7 +2388,7 @@ main: { // main::@2 __b2: // [6] call bitmap_clear - // [33] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] -- call_phi_near + // [33] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] bitmap_clear_from___b2: jsr bitmap_clear // [7] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -2397,7 +2397,7 @@ main: { // main::@3 __b3: // [8] call init_screen - // [38] phi from main::@3 to init_screen [phi:main::@3->init_screen] -- call_phi_near + // [38] phi from main::@3 to init_screen [phi:main::@3->init_screen] init_screen_from___b3: jsr init_screen // [9] phi from main::@1 main::@3 to main::@1 [phi:main::@1/main::@3->main::@1] @@ -2407,7 +2407,7 @@ main: { // main::@1 __b1: // [10] call lines - // [44] phi from main::@1 to lines [phi:main::@1->lines] -- call_phi_near + // [44] phi from main::@1 to lines [phi:main::@1->lines] lines_from___b1: jsr lines jmp __b1_from___b1 @@ -2540,7 +2540,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [54] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near + // [54] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -2561,7 +2561,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [54] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near + // [54] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -2660,7 +2660,7 @@ lines: { sta.z bitmap_line.y2 lda #0 sta.z bitmap_line.y2+1 - // [52] call bitmap_line -- call_phi_near + // [52] call bitmap_line jsr bitmap_line jmp __b3 // lines::@3 @@ -2757,7 +2757,7 @@ bitmap_line: { // [64] call abs_u16 // [114] phi from bitmap_line to abs_u16 [phi:bitmap_line->abs_u16] abs_u16_from_bitmap_line: - // [114] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near + // [114] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy jsr abs_u16 // [65] abs_u16::return#0 = abs_u16::return#4 jmp __b12 @@ -2779,7 +2779,7 @@ bitmap_line: { // [68] call abs_u16 // [114] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] abs_u16_from___b12: - // [114] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near + // [114] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- register_copy jsr abs_u16 // [69] abs_u16::return#1 = abs_u16::return#4 jmp __b13 @@ -2811,7 +2811,7 @@ bitmap_line: { // [74] call sgn_u16 // [121] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] sgn_u16_from___b1: - // [121] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near + // [121] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy jsr sgn_u16 // [75] sgn_u16::return#0 = sgn_u16::return#4 jmp __b14 @@ -2833,7 +2833,7 @@ bitmap_line: { // [78] call sgn_u16 // [121] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] sgn_u16_from___b14: - // [121] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near + // [121] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- register_copy jsr sgn_u16 // [79] sgn_u16::return#1 = sgn_u16::return#4 jmp __b15 @@ -2876,7 +2876,7 @@ bitmap_line: { // [128] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] bitmap_plot_from___b6: // [128] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __b16 // bitmap_line::@16 @@ -2955,7 +2955,7 @@ bitmap_line: { // [128] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] bitmap_plot_from___b3: // [128] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __breturn // bitmap_line::@return @@ -2988,7 +2988,7 @@ bitmap_line: { // [128] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] bitmap_plot_from___b9: // [128] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __b17 // bitmap_line::@17 @@ -3062,7 +3062,7 @@ bitmap_line: { // [128] phi from bitmap_line::@4 to bitmap_plot [phi:bitmap_line::@4->bitmap_plot] bitmap_plot_from___b4: // [128] phi bitmap_plot::x#4 = bitmap_plot::x#0 [phi:bitmap_line::@4->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- register_copy jsr bitmap_plot jmp __breturn } @@ -3595,26 +3595,26 @@ main: { sta VICII_MEMORY // bitmap_init(BITMAP, SCREEN) // [4] call bitmap_init - // [11] phi from main to bitmap_init [phi:main->bitmap_init] -- call_phi_near + // [11] phi from main to bitmap_init [phi:main->bitmap_init] jsr bitmap_init // [5] phi from main to main::@2 [phi:main->main::@2] // main::@2 // bitmap_clear(BLACK, WHITE) // [6] call bitmap_clear - // [33] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] -- call_phi_near + // [33] phi from main::@2 to bitmap_clear [phi:main::@2->bitmap_clear] jsr bitmap_clear // [7] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // init_screen() // [8] call init_screen - // [38] phi from main::@3 to init_screen [phi:main::@3->init_screen] -- call_phi_near + // [38] phi from main::@3 to init_screen [phi:main::@3->init_screen] jsr init_screen // [9] phi from main::@1 main::@3 to main::@1 [phi:main::@1/main::@3->main::@1] // main::@1 __b1: // lines() // [10] call lines - // [44] phi from main::@1 to lines [phi:main::@1->lines] -- call_phi_near + // [44] phi from main::@1 to lines [phi:main::@1->lines] jsr lines jmp __b1 } @@ -3738,7 +3738,7 @@ bitmap_clear: { sta.z memset.str lda #>SCREEN sta.z memset.str+1 - // [54] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- call_phi_near + // [54] phi memset::num#2 = $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 @@ -3756,7 +3756,7 @@ bitmap_clear: { sta.z memset.str lda #>BITMAP sta.z memset.str+1 - // [54] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- call_phi_near + // [54] phi memset::num#2 = $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -3849,7 +3849,7 @@ lines: { sta.z bitmap_line.y2 lda #0 sta.z bitmap_line.y2+1 - // [52] call bitmap_line -- call_phi_near + // [52] call bitmap_line jsr bitmap_line // lines::@3 // for(char l=0; labs_u16] - // [114] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- call_phi_near + // [114] phi abs_u16::w#2 = abs_u16::w#0 [phi:bitmap_line->abs_u16#0] -- register_copy jsr abs_u16 // unsigned int dx = abs_u16(x2-x1) // [65] abs_u16::return#0 = abs_u16::return#4 @@ -3965,7 +3965,7 @@ bitmap_line: { sta.z abs_u16.w+1 // [68] call abs_u16 // [114] phi from bitmap_line::@12 to abs_u16 [phi:bitmap_line::@12->abs_u16] - // [114] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- call_phi_near + // [114] phi abs_u16::w#2 = abs_u16::w#1 [phi:bitmap_line::@12->abs_u16#0] -- register_copy jsr abs_u16 // unsigned int dy = abs_u16(y2-y1) // [69] abs_u16::return#1 = abs_u16::return#4 @@ -3996,7 +3996,7 @@ bitmap_line: { sta.z sgn_u16.w+1 // [74] call sgn_u16 // [121] phi from bitmap_line::@1 to sgn_u16 [phi:bitmap_line::@1->sgn_u16] - // [121] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- call_phi_near + // [121] phi sgn_u16::w#2 = sgn_u16::w#0 [phi:bitmap_line::@1->sgn_u16#0] -- register_copy jsr sgn_u16 // unsigned int sx = sgn_u16(x2-x1) // [75] sgn_u16::return#0 = sgn_u16::return#4 @@ -4017,7 +4017,7 @@ bitmap_line: { sta.z sgn_u16.w+1 // [78] call sgn_u16 // [121] phi from bitmap_line::@14 to sgn_u16 [phi:bitmap_line::@14->sgn_u16] - // [121] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- call_phi_near + // [121] phi sgn_u16::w#2 = sgn_u16::w#1 [phi:bitmap_line::@14->sgn_u16#0] -- register_copy jsr sgn_u16 // unsigned int sy = sgn_u16(y2-y1) // [79] sgn_u16::return#1 = sgn_u16::return#4 @@ -4056,7 +4056,7 @@ bitmap_line: { // [86] call bitmap_plot // [128] phi from bitmap_line::@6 to bitmap_plot [phi:bitmap_line::@6->bitmap_plot] // [128] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line::@6->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- call_phi_near + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line::@6->bitmap_plot#1] -- register_copy jsr bitmap_plot // bitmap_line::@16 // y += sy @@ -4130,7 +4130,7 @@ bitmap_line: { // [97] call bitmap_plot // [128] phi from bitmap_line::@3 to bitmap_plot [phi:bitmap_line::@3->bitmap_plot] // [128] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line::@3->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- call_phi_near + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line::@3->bitmap_plot#1] -- register_copy jsr bitmap_plot // bitmap_line::@return // } @@ -4160,7 +4160,7 @@ bitmap_line: { // [103] call bitmap_plot // [128] phi from bitmap_line::@9 to bitmap_plot [phi:bitmap_line::@9->bitmap_plot] // [128] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line::@9->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- call_phi_near + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line::@9->bitmap_plot#1] -- register_copy jsr bitmap_plot // bitmap_line::@17 // x += sx @@ -4232,7 +4232,7 @@ bitmap_line: { // [113] call bitmap_plot // [128] phi from bitmap_line::@4 to bitmap_plot [phi:bitmap_line::@4->bitmap_plot] // [128] phi bitmap_plot::x#4 = bitmap_plot::x#0 [phi:bitmap_line::@4->bitmap_plot#0] -- register_copy - // [128] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- call_phi_near + // [128] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line::@4->bitmap_plot#1] -- register_copy jsr bitmap_plot rts } diff --git a/src/test/ref/examples/c64/crunching/test-byteboozer.log b/src/test/ref/examples/c64/crunching/test-byteboozer.log index d603107b2..7d5cb9d8f 100644 --- a/src/test/ref/examples/c64/crunching/test-byteboozer.log +++ b/src/test/ref/examples/c64/crunching/test-byteboozer.log @@ -281,7 +281,7 @@ main: { sta.z byteboozer_decrunch.crunched lda #>CRUNCHED_SPRITE sta.z byteboozer_decrunch.crunched+1 - // [1] call byteboozer_decrunch -- call_phi_near + // [1] call byteboozer_decrunch // Decrunch sprite file into memory jsr byteboozer_decrunch jmp __b2 @@ -445,7 +445,7 @@ main: { sta.z byteboozer_decrunch.crunched lda #>CRUNCHED_SPRITE sta.z byteboozer_decrunch.crunched+1 - // [1] call byteboozer_decrunch -- call_phi_near + // [1] call byteboozer_decrunch // Decrunch sprite file into memory jsr byteboozer_decrunch // main::@2 diff --git a/src/test/ref/examples/c64/fastmultiply/fastmultiply8.log b/src/test/ref/examples/c64/fastmultiply/fastmultiply8.log index 4b8b3bda8..6bb624ab9 100644 --- a/src/test/ref/examples/c64/fastmultiply/fastmultiply8.log +++ b/src/test/ref/examples/c64/fastmultiply/fastmultiply8.log @@ -1327,7 +1327,7 @@ main: { .label i = $f .label at_line = $d // [1] call init_screen - // [30] phi from main to init_screen [phi:main->init_screen] -- call_phi_near + // [30] phi from main to init_screen [phi:main->init_screen] init_screen_from_main: jsr init_screen // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1361,7 +1361,7 @@ main: { // [45] phi from main::@1 to print_schar_at [phi:main::@1->print_schar_at] print_schar_at_from___b1: // [45] phi print_schar_at::at#3 = print_schar_at::at#0 [phi:main::@1->print_schar_at#0] -- register_copy - // [45] phi print_schar_at::b#4 = print_schar_at::b#1 [phi:main::@1->print_schar_at#1] -- call_phi_near + // [45] phi print_schar_at::b#4 = print_schar_at::b#1 [phi:main::@1->print_schar_at#1] -- register_copy jsr print_schar_at jmp __b5 // main::@5 @@ -1419,7 +1419,7 @@ main: { // [45] phi from main::@2 to print_schar_at [phi:main::@2->print_schar_at] print_schar_at_from___b2: // [45] phi print_schar_at::at#3 = print_schar_at::at#1 [phi:main::@2->print_schar_at#0] -- register_copy - // [45] phi print_schar_at::b#4 = print_schar_at::b#2 [phi:main::@2->print_schar_at#1] -- call_phi_near + // [45] phi print_schar_at::b#4 = print_schar_at::b#2 [phi:main::@2->print_schar_at#1] -- register_copy jsr print_schar_at jmp __b6 // main::@6 @@ -1459,7 +1459,7 @@ main: { ldy.z j lda vals,y sta.z fmul8.bb - // [19] call fmul8 -- call_phi_near + // [19] call fmul8 jsr fmul8 // [20] fmul8::return#0 = fmul8::return#2 jmp __b7 @@ -1477,7 +1477,7 @@ main: { // [45] phi from main::@7 to print_schar_at [phi:main::@7->print_schar_at] print_schar_at_from___b7: // [45] phi print_schar_at::at#3 = print_schar_at::at#2 [phi:main::@7->print_schar_at#0] -- register_copy - // [45] phi print_schar_at::b#4 = print_schar_at::b#3 [phi:main::@7->print_schar_at#1] -- call_phi_near + // [45] phi print_schar_at::b#4 = print_schar_at::b#3 [phi:main::@7->print_schar_at#1] -- register_copy jsr print_schar_at jmp __b8 // main::@8 @@ -1508,7 +1508,7 @@ init_screen: { .const WHITE = 1 .label COLS = 2 // [31] call print_cls - // [62] phi from init_screen to print_cls [phi:init_screen->print_cls] -- call_phi_near + // [62] phi from init_screen to print_cls [phi:init_screen->print_cls] print_cls_from_init_screen: jsr print_cls // [32] phi from init_screen to init_screen::@1 [phi:init_screen->init_screen::@1] @@ -1599,7 +1599,7 @@ print_schar_at: { // [65] phi from print_schar_at::@3 to print_char_at [phi:print_schar_at::@3->print_char_at] print_char_at_from___b3: // [65] phi print_char_at::at#4 = print_char_at::at#1 [phi:print_schar_at::@3->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = ' ' [phi:print_schar_at::@3->print_char_at#1] -- call_phi_near + // [65] phi print_char_at::ch#4 = ' ' [phi:print_schar_at::@3->print_char_at#1] -- vbuxx=vbuc1 ldx #' ' jsr print_char_at // [49] phi from print_schar_at::@3 print_schar_at::@4 to print_schar_at::@2 [phi:print_schar_at::@3/print_schar_at::@4->print_schar_at::@2] @@ -1615,7 +1615,7 @@ print_schar_at: { inc.z print_uchar_at.at+1 !: // [51] print_uchar_at::b#0 = (char)print_schar_at::b#6 - // [52] call print_uchar_at -- call_phi_near + // [52] call print_uchar_at jsr print_uchar_at jmp __breturn // print_schar_at::@return @@ -1629,7 +1629,7 @@ print_schar_at: { // [65] phi from print_schar_at::@1 to print_char_at [phi:print_schar_at::@1->print_char_at] print_char_at_from___b1: // [65] phi print_char_at::at#4 = print_char_at::at#0 [phi:print_schar_at::@1->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = '-' [phi:print_schar_at::@1->print_char_at#1] -- call_phi_near + // [65] phi print_char_at::ch#4 = '-' [phi:print_schar_at::@1->print_char_at#1] -- vbuxx=vbuc1 ldx #'-' jsr print_char_at jmp __b4 @@ -1677,7 +1677,7 @@ fmul8: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [63] call memset - // [77] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [77] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -1722,7 +1722,7 @@ print_uchar_at: { // [65] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at] print_char_at_from_print_uchar_at: // [65] phi print_char_at::at#4 = print_char_at::at#2 [phi:print_uchar_at->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = print_char_at::ch#2 [phi:print_uchar_at->print_char_at#1] -- call_phi_near + // [65] phi print_char_at::ch#4 = print_char_at::ch#2 [phi:print_uchar_at->print_char_at#1] -- register_copy jsr print_char_at jmp __b1 // print_uchar_at::@1 @@ -1742,7 +1742,7 @@ print_uchar_at: { // [65] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at] print_char_at_from___b1: // [65] phi print_char_at::at#4 = print_char_at::at#3 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = print_char_at::ch#3 [phi:print_uchar_at::@1->print_char_at#1] -- call_phi_near + // [65] phi print_char_at::ch#4 = print_char_at::ch#3 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy jsr print_char_at jmp __breturn // print_uchar_at::@return @@ -2072,7 +2072,7 @@ main: { .label at_line = $d // init_screen() // [1] call init_screen - // [30] phi from main to init_screen [phi:main->init_screen] -- call_phi_near + // [30] phi from main to init_screen [phi:main->init_screen] jsr init_screen // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::at#4 = (char *) 1024+4 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -2101,7 +2101,7 @@ main: { // [5] call print_schar_at // [45] phi from main::@1 to print_schar_at [phi:main::@1->print_schar_at] // [45] phi print_schar_at::at#3 = print_schar_at::at#0 [phi:main::@1->print_schar_at#0] -- register_copy - // [45] phi print_schar_at::b#4 = print_schar_at::b#1 [phi:main::@1->print_schar_at#1] -- call_phi_near + // [45] phi print_schar_at::b#4 = print_schar_at::b#1 [phi:main::@1->print_schar_at#1] -- register_copy jsr print_schar_at // main::@5 // at += 4 @@ -2156,7 +2156,7 @@ main: { // [13] call print_schar_at // [45] phi from main::@2 to print_schar_at [phi:main::@2->print_schar_at] // [45] phi print_schar_at::at#3 = print_schar_at::at#1 [phi:main::@2->print_schar_at#0] -- register_copy - // [45] phi print_schar_at::b#4 = print_schar_at::b#2 [phi:main::@2->print_schar_at#1] -- call_phi_near + // [45] phi print_schar_at::b#4 = print_schar_at::b#2 [phi:main::@2->print_schar_at#1] -- register_copy jsr print_schar_at // main::@6 // [14] main::at#12 = main::at#2 -- pbuz1=pbuz2 @@ -2192,7 +2192,7 @@ main: { ldy.z j lda vals,y sta.z fmul8.bb - // [19] call fmul8 -- call_phi_near + // [19] call fmul8 jsr fmul8 // [20] fmul8::return#0 = fmul8::return#2 // main::@7 @@ -2208,7 +2208,7 @@ main: { // [24] call print_schar_at // [45] phi from main::@7 to print_schar_at [phi:main::@7->print_schar_at] // [45] phi print_schar_at::at#3 = print_schar_at::at#2 [phi:main::@7->print_schar_at#0] -- register_copy - // [45] phi print_schar_at::b#4 = print_schar_at::b#3 [phi:main::@7->print_schar_at#1] -- call_phi_near + // [45] phi print_schar_at::b#4 = print_schar_at::b#3 [phi:main::@7->print_schar_at#1] -- register_copy jsr print_schar_at // main::@8 // for(char j: 0..8) @@ -2236,7 +2236,7 @@ init_screen: { .label COLS = 2 // print_cls() // [31] call print_cls - // [62] phi from init_screen to print_cls [phi:init_screen->print_cls] -- call_phi_near + // [62] phi from init_screen to print_cls [phi:init_screen->print_cls] jsr print_cls // [32] phi from init_screen to init_screen::@1 [phi:init_screen->init_screen::@1] // [32] phi init_screen::l#2 = 0 [phi:init_screen->init_screen::@1#0] -- vbuxx=vbuc1 @@ -2321,7 +2321,7 @@ print_schar_at: { // [48] call print_char_at // [65] phi from print_schar_at::@3 to print_char_at [phi:print_schar_at::@3->print_char_at] // [65] phi print_char_at::at#4 = print_char_at::at#1 [phi:print_schar_at::@3->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = ' ' [phi:print_schar_at::@3->print_char_at#1] -- call_phi_near + // [65] phi print_char_at::ch#4 = ' ' [phi:print_schar_at::@3->print_char_at#1] -- vbuxx=vbuc1 ldx #' ' jsr print_char_at // [49] phi from print_schar_at::@3 print_schar_at::@4 to print_schar_at::@2 [phi:print_schar_at::@3/print_schar_at::@4->print_schar_at::@2] @@ -2335,7 +2335,7 @@ print_schar_at: { inc.z print_uchar_at.at+1 !: // [51] print_uchar_at::b#0 = (char)print_schar_at::b#6 - // [52] call print_uchar_at -- call_phi_near + // [52] call print_uchar_at jsr print_uchar_at // print_schar_at::@return // } @@ -2348,7 +2348,7 @@ print_schar_at: { // [55] call print_char_at // [65] phi from print_schar_at::@1 to print_char_at [phi:print_schar_at::@1->print_char_at] // [65] phi print_char_at::at#4 = print_char_at::at#0 [phi:print_schar_at::@1->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = '-' [phi:print_schar_at::@1->print_char_at#1] -- call_phi_near + // [65] phi print_char_at::ch#4 = '-' [phi:print_schar_at::@1->print_char_at#1] -- vbuxx=vbuc1 ldx #'-' jsr print_char_at // print_schar_at::@4 @@ -2397,7 +2397,7 @@ fmul8: { print_cls: { // memset(print_screen, ' ', 1000) // [63] call memset - // [77] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [77] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -2441,7 +2441,7 @@ print_uchar_at: { // Table of hexadecimal digits // [65] phi from print_uchar_at to print_char_at [phi:print_uchar_at->print_char_at] // [65] phi print_char_at::at#4 = print_char_at::at#2 [phi:print_uchar_at->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = print_char_at::ch#2 [phi:print_uchar_at->print_char_at#1] -- call_phi_near + // [65] phi print_char_at::ch#4 = print_char_at::ch#2 [phi:print_uchar_at->print_char_at#1] -- register_copy jsr print_char_at // print_uchar_at::@1 // b&$f @@ -2460,7 +2460,7 @@ print_uchar_at: { // [75] call print_char_at // [65] phi from print_uchar_at::@1 to print_char_at [phi:print_uchar_at::@1->print_char_at] // [65] phi print_char_at::at#4 = print_char_at::at#3 [phi:print_uchar_at::@1->print_char_at#0] -- register_copy - // [65] phi print_char_at::ch#4 = print_char_at::ch#3 [phi:print_uchar_at::@1->print_char_at#1] -- call_phi_near + // [65] phi print_char_at::ch#4 = print_char_at::ch#3 [phi:print_uchar_at::@1->print_char_at#1] -- register_copy jsr print_char_at // print_uchar_at::@return // } diff --git a/src/test/ref/examples/c64/fire/fire.log b/src/test/ref/examples/c64/fire/fire.log index e59bb1d91..04aa6b997 100644 --- a/src/test/ref/examples/c64/fire/fire.log +++ b/src/test/ref/examples/c64/fire/fire.log @@ -1695,7 +1695,7 @@ main: { sta.z fillscreen.screen lda #>BUFFER sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = 0 [phi:main->fillscreen#1] -- call_phi_near + // [21] phi fillscreen::fill#5 = 0 [phi:main->fillscreen#1] -- vbuxx=vbuc1 ldx #0 jsr fillscreen // [4] phi from main to main::@5 [phi:main->main::@5] @@ -1711,7 +1711,7 @@ main: { sta.z fillscreen.screen lda #>SCREEN1 sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = 0 [phi:main::@5->fillscreen#1] -- call_phi_near + // [21] phi fillscreen::fill#5 = 0 [phi:main::@5->fillscreen#1] -- vbuxx=vbuc1 ldx #0 jsr fillscreen // [6] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -1727,7 +1727,7 @@ main: { sta.z fillscreen.screen lda #>SCREEN2 sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = 0 [phi:main::@6->fillscreen#1] -- call_phi_near + // [21] phi fillscreen::fill#5 = 0 [phi:main::@6->fillscreen#1] -- vbuxx=vbuc1 ldx #0 jsr fillscreen // [8] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -1743,7 +1743,7 @@ main: { sta.z fillscreen.screen lda #>COLS sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = YELLOW [phi:main::@7->fillscreen#1] -- call_phi_near + // [21] phi fillscreen::fill#5 = YELLOW [phi:main::@7->fillscreen#1] -- vbuxx=vbuc1 ldx #YELLOW jsr fillscreen jmp sid_rnd_init1 @@ -1763,7 +1763,7 @@ main: { // main::@2 __b2: // [13] call makecharset - // [28] phi from main::@2 to makecharset [phi:main::@2->makecharset] -- call_phi_near + // [28] phi from main::@2 to makecharset [phi:main::@2->makecharset] makecharset_from___b2: jsr makecharset // [14] phi from main::@2 main::@4 to main::@1 [phi:main::@2/main::@4->main::@1] @@ -1775,7 +1775,7 @@ main: { // [15] call fire // [60] phi from main::@1 to fire [phi:main::@1->fire] fire_from___b1: - // [60] phi fire::screen#0 = SCREEN1 [phi:main::@1->fire#0] -- call_phi_near + // [60] phi fire::screen#0 = SCREEN1 [phi:main::@1->fire#0] -- pbuz1=pbuc1 lda #SCREEN1 @@ -1795,7 +1795,7 @@ main: { // [18] call fire // [60] phi from main::@3 to fire [phi:main::@3->fire] fire_from___b3: - // [60] phi fire::screen#0 = SCREEN2 [phi:main::@3->fire#0] -- call_phi_near + // [60] phi fire::screen#0 = SCREEN2 [phi:main::@3->fire#0] -- pbuz1=pbuc1 lda #SCREEN2 @@ -2546,7 +2546,7 @@ main: { sta.z fillscreen.screen lda #>BUFFER sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = 0 [phi:main->fillscreen#1] -- call_phi_near + // [21] phi fillscreen::fill#5 = 0 [phi:main->fillscreen#1] -- vbuxx=vbuc1 ldx #0 jsr fillscreen // [4] phi from main to main::@5 [phi:main->main::@5] @@ -2559,7 +2559,7 @@ main: { sta.z fillscreen.screen lda #>SCREEN1 sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = 0 [phi:main::@5->fillscreen#1] -- call_phi_near + // [21] phi fillscreen::fill#5 = 0 [phi:main::@5->fillscreen#1] -- vbuxx=vbuc1 ldx #0 jsr fillscreen // [6] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -2572,7 +2572,7 @@ main: { sta.z fillscreen.screen lda #>SCREEN2 sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = 0 [phi:main::@6->fillscreen#1] -- call_phi_near + // [21] phi fillscreen::fill#5 = 0 [phi:main::@6->fillscreen#1] -- vbuxx=vbuc1 ldx #0 jsr fillscreen // [8] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -2585,7 +2585,7 @@ main: { sta.z fillscreen.screen lda #>COLS sta.z fillscreen.screen+1 - // [21] phi fillscreen::fill#5 = YELLOW [phi:main::@7->fillscreen#1] -- call_phi_near + // [21] phi fillscreen::fill#5 = YELLOW [phi:main::@7->fillscreen#1] -- vbuxx=vbuc1 ldx #YELLOW jsr fillscreen // main::sid_rnd_init1 @@ -2603,7 +2603,7 @@ main: { // main::@2 // makecharset(CHARSET) // [13] call makecharset - // [28] phi from main::@2 to makecharset [phi:main::@2->makecharset] -- call_phi_near + // [28] phi from main::@2 to makecharset [phi:main::@2->makecharset] jsr makecharset // [14] phi from main::@2 main::@4 to main::@1 [phi:main::@2/main::@4->main::@1] // main::@1 @@ -2611,7 +2611,7 @@ main: { // fire(SCREEN1) // [15] call fire // [60] phi from main::@1 to fire [phi:main::@1->fire] - // [60] phi fire::screen#0 = SCREEN1 [phi:main::@1->fire#0] -- call_phi_near + // [60] phi fire::screen#0 = SCREEN1 [phi:main::@1->fire#0] -- pbuz1=pbuc1 lda #SCREEN1 @@ -2627,7 +2627,7 @@ main: { // fire(SCREEN2) // [18] call fire // [60] phi from main::@3 to fire [phi:main::@3->fire] - // [60] phi fire::screen#0 = SCREEN2 [phi:main::@3->fire#0] -- call_phi_near + // [60] phi fire::screen#0 = SCREEN2 [phi:main::@3->fire#0] -- pbuz1=pbuc1 lda #SCREEN2 diff --git a/src/test/ref/examples/c64/font-2x2/font-2x2.log b/src/test/ref/examples/c64/font-2x2/font-2x2.log index 610d18dbd..54e8fc78d 100644 --- a/src/test/ref/examples/c64/font-2x2/font-2x2.log +++ b/src/test/ref/examples/c64/font-2x2/font-2x2.log @@ -2350,7 +2350,7 @@ main: { lda #PROCPORT_RAM_CHARROM sta.z PROCPORT // [2] call font_2x2 - // [22] phi from main to font_2x2 [phi:main->font_2x2] -- call_phi_near + // [22] phi from main to font_2x2 [phi:main->font_2x2] font_2x2_from_main: jsr font_2x2 jmp __b6 @@ -2363,7 +2363,7 @@ main: { cli // [5] call font_compress // Compress the font finding identical characters - // [62] phi from main::@6 to font_compress [phi:main::@6->font_compress] -- call_phi_near + // [62] phi from main::@6 to font_compress [phi:main::@6->font_compress] font_compress_from___b6: jsr font_compress // [6] phi from main::@6 to main::toD0181 [phi:main::@6->main::toD0181] @@ -2382,7 +2382,7 @@ main: { ldx FONT_COMPRESSED_MAP+' ' // [9] call memset // Clear the screen - // [85] phi from main::@5 to memset [phi:main::@5->memset] -- call_phi_near + // [85] phi from main::@5 to memset [phi:main::@5->memset] memset_from___b5: jsr memset // [10] phi from main::@5 to main::@1 [phi:main::@5->main::@1] @@ -2420,7 +2420,7 @@ main: { ldx.z x // [14] show::y#0 = main::y#4 -- vbuaa=vbuz1 lda.z y - // [15] call show -- call_phi_near + // [15] call show jsr show jmp __b7 // main::@7 @@ -2735,7 +2735,7 @@ font_compress: { // [65] font_find::font_size#0 = font_compress::font_size#2 // [66] call font_find // Look for the char in font_compressed - // [106] phi from font_compress::@1 to font_find [phi:font_compress::@1->font_find] -- call_phi_near + // [106] phi from font_compress::@1 to font_find [phi:font_compress::@1->font_find] font_find_from___b1: jsr font_find // [67] font_find::return#0 = font_find::return#3 -- vbuaa=vbuxx @@ -3428,7 +3428,7 @@ main: { sta.z PROCPORT // font_2x2(CHARGEN, FONT_ORIGINAL) // [2] call font_2x2 - // [22] phi from main to font_2x2 [phi:main->font_2x2] -- call_phi_near + // [22] phi from main to font_2x2 [phi:main->font_2x2] jsr font_2x2 // main::@6 // *PROCPORT = PROCPORT_BASIC_KERNEL_IO @@ -3441,7 +3441,7 @@ main: { // char size = font_compress(FONT_ORIGINAL, FONT_COMPRESSED, FONT_COMPRESSED_MAP) // [5] call font_compress // Compress the font finding identical characters - // [62] phi from main::@6 to font_compress [phi:main::@6->font_compress] -- call_phi_near + // [62] phi from main::@6 to font_compress [phi:main::@6->font_compress] jsr font_compress // [6] phi from main::@6 to main::toD0181 [phi:main::@6->main::toD0181] // main::toD0181 @@ -3456,7 +3456,7 @@ main: { ldx FONT_COMPRESSED_MAP+' ' // [9] call memset // Clear the screen - // [85] phi from main::@5 to memset [phi:main::@5->memset] -- call_phi_near + // [85] phi from main::@5 to memset [phi:main::@5->memset] jsr memset // [10] phi from main::@5 to main::@1 [phi:main::@5->main::@1] // [10] phi main::y#4 = 0 [phi:main::@5->main::@1#0] -- vbuz1=vbuc1 @@ -3485,7 +3485,7 @@ main: { ldx.z x // [14] show::y#0 = main::y#4 -- vbuaa=vbuz1 lda.z y - // [15] call show -- call_phi_near + // [15] call show jsr show // main::@7 // show(c++, x, y, FONT_COMPRESSED_MAP); @@ -3792,7 +3792,7 @@ font_compress: { // [65] font_find::font_size#0 = font_compress::font_size#2 // [66] call font_find // Look for the char in font_compressed - // [106] phi from font_compress::@1 to font_find [phi:font_compress::@1->font_find] -- call_phi_near + // [106] phi from font_compress::@1 to font_find [phi:font_compress::@1->font_find] jsr font_find // char found = font_find(next_original, font_compressed, font_size) // [67] font_find::return#0 = font_find::return#3 -- vbuaa=vbuxx diff --git a/src/test/ref/examples/c64/kernalload/kernalload.log b/src/test/ref/examples/c64/kernalload/kernalload.log index f2753c471..b0fba1a3b 100644 --- a/src/test/ref/examples/c64/kernalload/kernalload.log +++ b/src/test/ref/examples/c64/kernalload/kernalload.log @@ -763,7 +763,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { .const toSpritePtr1_return = LOAD_SPRITE/$40 - // [1] call loadFileToMemory -- call_phi_near + // [1] call loadFileToMemory // Load sprite file into memory jsr loadFileToMemory // [2] loadFileToMemory::return#0 = loadFileToMemory::return#1 @@ -783,7 +783,7 @@ main: { sta VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // [6] error::err = main::status#0 -- vbuz1=vbuxx stx.z error.err - // [7] call error -- call_phi_near + // [7] call error jsr error jmp __b1 // main::@1 @@ -835,7 +835,7 @@ loadFileToMemory: { sta.z setnam.filename lda #>main.filename sta.z setnam.filename+1 - // [16] call setnam -- call_phi_near + // [16] call setnam jsr setnam jmp __b1 // loadFileToMemory::@1 @@ -843,7 +843,7 @@ loadFileToMemory: { // [17] setlfs::device = loadFileToMemory::device#0 -- vbuz1=vbuc1 lda #device sta.z setlfs.device - // [18] call setlfs -- call_phi_near + // [18] call setlfs jsr setlfs jmp __b2 // loadFileToMemory::@2 @@ -856,7 +856,7 @@ loadFileToMemory: { // [20] load::verify = 0 -- vbuz1=vbuc1 lda #0 sta.z load.verify - // [21] call load -- call_phi_near + // [21] call load jsr load // [22] load::return#0 = load::return#2 jmp __b3 @@ -898,7 +898,7 @@ setnam: { lda.z filename+1 sta.z strlen.str+1 // [28] call strlen - // [41] phi from setnam to strlen [phi:setnam->strlen] -- call_phi_near + // [41] phi from setnam to strlen [phi:setnam->strlen] strlen_from_setnam: jsr strlen // [29] strlen::return#2 = strlen::len#2 @@ -1187,7 +1187,7 @@ Score: 720 main: { .const toSpritePtr1_return = LOAD_SPRITE/$40 // char status = loadFileToMemory(8, "SPRITE", LOAD_SPRITE) - // [1] call loadFileToMemory -- call_phi_near + // [1] call loadFileToMemory // Load sprite file into memory jsr loadFileToMemory // [2] loadFileToMemory::return#0 = loadFileToMemory::return#1 @@ -1206,7 +1206,7 @@ main: { // error(status) // [6] error::err = main::status#0 -- vbuz1=vbuxx stx.z error.err - // [7] call error -- call_phi_near + // [7] call error jsr error // main::@1 __b1: @@ -1257,14 +1257,14 @@ loadFileToMemory: { sta.z setnam.filename lda #>main.filename sta.z setnam.filename+1 - // [16] call setnam -- call_phi_near + // [16] call setnam jsr setnam // loadFileToMemory::@1 // setlfs(device) // [17] setlfs::device = loadFileToMemory::device#0 -- vbuz1=vbuc1 lda #device sta.z setlfs.device - // [18] call setlfs -- call_phi_near + // [18] call setlfs jsr setlfs // loadFileToMemory::@2 // load(address, 0) @@ -1276,7 +1276,7 @@ loadFileToMemory: { // [20] load::verify = 0 -- vbuz1=vbuc1 lda #0 sta.z load.verify - // [21] call load -- call_phi_near + // [21] call load jsr load // [22] load::return#0 = load::return#2 // loadFileToMemory::@3 @@ -1316,7 +1316,7 @@ setnam: { lda.z filename+1 sta.z strlen.str+1 // [28] call strlen - // [41] phi from setnam to strlen [phi:setnam->strlen] -- call_phi_near + // [41] phi from setnam to strlen [phi:setnam->strlen] jsr strlen // strlen(filename) // [29] strlen::return#2 = strlen::len#2 diff --git a/src/test/ref/examples/c64/krillload/krillload.log b/src/test/ref/examples/c64/krillload/krillload.log index c9c97817f..665ca6f4e 100644 --- a/src/test/ref/examples/c64/krillload/krillload.log +++ b/src/test/ref/examples/c64/krillload/krillload.log @@ -461,7 +461,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { .const toSpritePtr1_return = $ff&SPRITE/$40 - // [1] call krill_install -- call_phi_near + // [1] call krill_install // Install the Krill drive code jsr krill_install // [2] krill_install::return#2 = krill_install::return#0 @@ -488,7 +488,7 @@ main: { jmp __b1 // main::@1 __b1: - // [8] call krill_loadraw -- call_phi_near + // [8] call krill_loadraw jsr krill_loadraw // [9] krill_loadraw::return#2 = krill_loadraw::return#0 jmp __b7 @@ -744,7 +744,7 @@ Score: 128 main: { .const toSpritePtr1_return = $ff&SPRITE/$40 // char status = krill_install() - // [1] call krill_install -- call_phi_near + // [1] call krill_install // Install the Krill drive code jsr krill_install // [2] krill_install::return#2 = krill_install::return#0 @@ -767,7 +767,7 @@ main: { // main::@1 __b1: // krill_loadraw("sprite") - // [8] call krill_loadraw -- call_phi_near + // [8] call krill_loadraw jsr krill_loadraw // [9] krill_loadraw::return#2 = krill_loadraw::return#0 // main::@7 diff --git a/src/test/ref/examples/c64/linking/linking.log b/src/test/ref/examples/c64/linking/linking.log index 8cb2caf14..fadfb0a08 100644 --- a/src/test/ref/examples/c64/linking/linking.log +++ b/src/test/ref/examples/c64/linking/linking.log @@ -330,7 +330,7 @@ main: { lda BG_COLOR sta.z fillscreen.c // [6] call fillscreen - // [8] phi from main::@2 to fillscreen [phi:main::@2->fillscreen] -- call_phi_near + // [8] phi from main::@2 to fillscreen [phi:main::@2->fillscreen] fillscreen_from___b2: jsr fillscreen jmp __b3 @@ -496,7 +496,7 @@ main: { lda BG_COLOR sta.z fillscreen.c // [6] call fillscreen - // [8] phi from main::@2 to fillscreen [phi:main::@2->fillscreen] -- call_phi_near + // [8] phi from main::@2 to fillscreen [phi:main::@2->fillscreen] jsr fillscreen // main::@3 // (*BG_COLOR)++; diff --git a/src/test/ref/examples/c64/multiplexer/simple-multiplexer.log b/src/test/ref/examples/c64/multiplexer/simple-multiplexer.log index 09f17dcee..e8051dc8f 100644 --- a/src/test/ref/examples/c64/multiplexer/simple-multiplexer.log +++ b/src/test/ref/examples/c64/multiplexer/simple-multiplexer.log @@ -1674,7 +1674,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [7] call main -- call_phi_near + // [7] call main jsr main jmp __breturn // __start::@return @@ -1686,7 +1686,7 @@ __start: { main: { // asm { sei } sei - // [10] call init -- call_phi_near + // [10] call init jsr init // [11] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -1694,7 +1694,7 @@ main: { // main::@1 __b1: // [12] call loop - // [29] phi from main::@1 to loop [phi:main::@1->loop] -- call_phi_near + // [29] phi from main::@1 to loop [phi:main::@1->loop] loop_from___b1: jsr loop jmp __breturn @@ -1713,7 +1713,7 @@ init: { sta D011 // [15] call plexInit // Initialize the multiplexer - // [54] phi from init to plexInit [phi:init->plexInit] -- call_phi_near + // [54] phi from init to plexInit [phi:init->plexInit] plexInit_from_init: jsr plexInit // [16] phi from init to init::@1 [phi:init->init::@1] @@ -1850,7 +1850,7 @@ loop: { // [40] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // [41] call plexSort - // [61] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] -- call_phi_near + // [61] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] plexSort_from___b5: jsr plexSort jmp __b11 @@ -1903,7 +1903,7 @@ loop: { __b9: // [49] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR - // [50] call plexShowSprite -- call_phi_near + // [50] call plexShowSprite jsr plexShowSprite jmp __b12 // loop::@12 @@ -2583,7 +2583,7 @@ __start: { sta.z plex_free_next // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [7] call main -- call_phi_near + // [7] call main jsr main // __start::@return // [8] return @@ -2595,13 +2595,13 @@ main: { // asm { sei } sei // init() - // [10] call init -- call_phi_near + // [10] call init jsr init // [11] phi from main to main::@1 [phi:main->main::@1] // main::@1 // loop() // [12] call loop - // [29] phi from main::@1 to loop [phi:main::@1->loop] -- call_phi_near + // [29] phi from main::@1 to loop [phi:main::@1->loop] jsr loop // main::@return // } @@ -2620,7 +2620,7 @@ init: { // plexInit(SCREEN) // [15] call plexInit // Initialize the multiplexer - // [54] phi from init to plexInit [phi:init->plexInit] -- call_phi_near + // [54] phi from init to plexInit [phi:init->plexInit] jsr plexInit // [16] phi from init to init::@1 [phi:init->init::@1] // [16] phi init::xp#2 = $20 [phi:init->init::@1#0] -- vwuz1=vwuc1 @@ -2748,7 +2748,7 @@ loop: { inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // plexSort() // [41] call plexSort - // [61] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] -- call_phi_near + // [61] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] jsr plexSort // loop::@11 // VICII->BORDER_COLOR = BLACK @@ -2796,7 +2796,7 @@ loop: { // [49] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) = ++ *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // plexShowSprite() - // [50] call plexShowSprite -- call_phi_near + // [50] call plexShowSprite jsr plexShowSprite // loop::@12 // for( char ss: 0..PLEX_COUNT-1) diff --git a/src/test/ref/examples/c64/nmisamples/nmisamples.log b/src/test/ref/examples/c64/nmisamples/nmisamples.log index 3943b2d56..3b7a48291 100644 --- a/src/test/ref/examples/c64/nmisamples/nmisamples.log +++ b/src/test/ref/examples/c64/nmisamples/nmisamples.log @@ -329,7 +329,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -573,7 +573,7 @@ __start: { sta.z sample+1 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/examples/c64/rasterbars/raster-bars.log b/src/test/ref/examples/c64/rasterbars/raster-bars.log index df81be3ca..c46d54f43 100644 --- a/src/test/ref/examples/c64/rasterbars/raster-bars.log +++ b/src/test/ref/examples/c64/rasterbars/raster-bars.log @@ -248,7 +248,7 @@ main: { jmp __b3 // main::@3 __b3: - // [4] call raster -- call_phi_near + // [4] call raster jsr raster jmp __b1 } @@ -419,7 +419,7 @@ main: { // [3] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // raster() - // [4] call raster -- call_phi_near + // [4] call raster jsr raster jmp __b1 } diff --git a/src/test/ref/examples/c64/scroll/scroll.log b/src/test/ref/examples/c64/scroll/scroll.log index 5cdde9acf..0369e4d2d 100644 --- a/src/test/ref/examples/c64/scroll/scroll.log +++ b/src/test/ref/examples/c64/scroll/scroll.log @@ -517,7 +517,7 @@ main: { .label line = SCREEN+$28 .label nxt = 4 // [1] call fillscreen - // [21] phi from main to fillscreen [phi:main->fillscreen] -- call_phi_near + // [21] phi from main to fillscreen [phi:main->fillscreen] fillscreen_from_main: jsr fillscreen // [2] phi from main to main::@1 [phi:main->main::@1] @@ -802,7 +802,7 @@ main: { .label nxt = 4 // fillscreen(SCREEN, $20) // [1] call fillscreen - // [21] phi from main to fillscreen [phi:main->fillscreen] -- call_phi_near + // [21] phi from main to fillscreen [phi:main->fillscreen] jsr fillscreen // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::nxt#10 = TEXT [phi:main->main::@1#0] -- pbuz1=pbuc1 diff --git a/src/test/ref/examples/c64/scrollbig/scrollbig.log b/src/test/ref/examples/c64/scrollbig/scrollbig.log index ef0ad24ba..8c184af4f 100644 --- a/src/test/ref/examples/c64/scrollbig/scrollbig.log +++ b/src/test/ref/examples/c64/scrollbig/scrollbig.log @@ -1466,7 +1466,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call fillscreen - // [8] phi from main to fillscreen [phi:main->fillscreen] -- call_phi_near + // [8] phi from main to fillscreen [phi:main->fillscreen] fillscreen_from_main: jsr fillscreen // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1514,7 +1514,7 @@ main: { __b3: // [5] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) = ++ *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR - // [6] call scroll_soft -- call_phi_near + // [6] call scroll_soft jsr scroll_soft jmp __b4 // main::@4 @@ -1581,7 +1581,7 @@ scroll_soft: { jmp __b2 // scroll_soft::@2 __b2: - // [17] call scroll_bit -- call_phi_near + // [17] call scroll_bit jsr scroll_bit // [18] phi from scroll_soft::@2 to scroll_soft::@1 [phi:scroll_soft::@2->scroll_soft::@1] __b1_from___b2: @@ -1623,7 +1623,7 @@ scroll_bit: { jmp __b2 // scroll_bit::@2 __b2: - // [24] call next_char -- call_phi_near + // [24] call next_char jsr next_char // [25] next_char::return#0 = next_char::return#1 -- vbuaa=vbuxx txa @@ -1666,7 +1666,7 @@ scroll_bit: { // scroll_bit::@1 __b1: // [30] call scroll_hard - // [52] phi from scroll_bit::@1 to scroll_hard [phi:scroll_bit::@1->scroll_hard] -- call_phi_near + // [52] phi from scroll_bit::@1 to scroll_hard [phi:scroll_bit::@1->scroll_hard] scroll_hard_from___b1: jsr scroll_hard jmp __b7 @@ -2044,7 +2044,7 @@ Score: 20882 main: { // fillscreen(SCREEN, $20) // [1] call fillscreen - // [8] phi from main to fillscreen [phi:main->fillscreen] -- call_phi_near + // [8] phi from main to fillscreen [phi:main->fillscreen] jsr fillscreen // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi current_chargen#28 = CHARGEN [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -2087,7 +2087,7 @@ main: { // [5] *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) = ++ *((char *)VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR) -- _deref_pbuc1=_inc__deref_pbuc1 inc VICII+OFFSET_STRUCT_MOS6569_VICII_BG_COLOR // scroll_soft() - // [6] call scroll_soft -- call_phi_near + // [6] call scroll_soft jsr scroll_soft // main::@4 // --VICII->BG_COLOR; @@ -2151,7 +2151,7 @@ scroll_soft: { // [16] phi from scroll_soft to scroll_soft::@2 [phi:scroll_soft->scroll_soft::@2] // scroll_soft::@2 // scroll_bit() - // [17] call scroll_bit -- call_phi_near + // [17] call scroll_bit jsr scroll_bit // [18] phi from scroll_soft::@2 to scroll_soft::@1 [phi:scroll_soft::@2->scroll_soft::@1] // [18] phi current_chargen#12 = current_chargen#21 [phi:scroll_soft::@2->scroll_soft::@1#0] -- register_copy @@ -2189,7 +2189,7 @@ scroll_bit: { // [23] phi from scroll_bit to scroll_bit::@2 [phi:scroll_bit->scroll_bit::@2] // scroll_bit::@2 // unsigned int c = next_char() - // [24] call next_char -- call_phi_near + // [24] call next_char jsr next_char // [25] next_char::return#0 = next_char::return#1 -- vbuaa=vbuxx txa @@ -2229,7 +2229,7 @@ scroll_bit: { __b1: // scroll_hard() // [30] call scroll_hard - // [52] phi from scroll_bit::@1 to scroll_hard [phi:scroll_bit::@1->scroll_hard] -- call_phi_near + // [52] phi from scroll_bit::@1 to scroll_hard [phi:scroll_bit::@1->scroll_hard] jsr scroll_hard // scroll_bit::@7 // asm diff --git a/src/test/ref/examples/c64/showlogo/showlogo.log b/src/test/ref/examples/c64/showlogo/showlogo.log index a73435332..ec8afeea4 100644 --- a/src/test/ref/examples/c64/showlogo/showlogo.log +++ b/src/test/ref/examples/c64/showlogo/showlogo.log @@ -641,7 +641,7 @@ main: { memset_from___b3: // [16] phi memset::c#4 = BLACK [phi:main::@3->memset#0] -- vbuxx=vbuc1 ldx #BLACK - // [16] phi memset::str#3 = (void *)SCREEN [phi:main::@3->memset#1] -- call_phi_near + // [16] phi memset::str#3 = (void *)SCREEN [phi:main::@3->memset#1] -- pvoz1=pvoc1 lda #SCREEN @@ -657,7 +657,7 @@ main: { memset_from___b4: // [16] phi memset::c#4 = WHITE|8 [phi:main::@4->memset#0] -- vbuxx=vbuc1 ldx #WHITE|8 - // [16] phi memset::str#3 = (void *)COLS [phi:main::@4->memset#1] -- call_phi_near + // [16] phi memset::str#3 = (void *)COLS [phi:main::@4->memset#1] -- pvoz1=pvoc1 lda #COLS @@ -916,7 +916,7 @@ main: { // [16] phi from main::@3 to memset [phi:main::@3->memset] // [16] phi memset::c#4 = BLACK [phi:main::@3->memset#0] -- vbuxx=vbuc1 ldx #BLACK - // [16] phi memset::str#3 = (void *)SCREEN [phi:main::@3->memset#1] -- call_phi_near + // [16] phi memset::str#3 = (void *)SCREEN [phi:main::@3->memset#1] -- pvoz1=pvoc1 lda #SCREEN @@ -929,7 +929,7 @@ main: { // [16] phi from main::@4 to memset [phi:main::@4->memset] // [16] phi memset::c#4 = WHITE|8 [phi:main::@4->memset#0] -- vbuxx=vbuc1 ldx #WHITE|8 - // [16] phi memset::str#3 = (void *)COLS [phi:main::@4->memset#1] -- call_phi_near + // [16] phi memset::str#3 = (void *)COLS [phi:main::@4->memset#1] -- pvoz1=pvoc1 lda #COLS diff --git a/src/test/ref/examples/c64/zpcode/zpcode.log b/src/test/ref/examples/c64/zpcode/zpcode.log index ba4f154fd..5de3e625f 100644 --- a/src/test/ref/examples/c64/zpcode/zpcode.log +++ b/src/test/ref/examples/c64/zpcode/zpcode.log @@ -382,7 +382,7 @@ main: { __b4: // [11] call loop // Call code in normal memory - // [17] phi from main::@4 to loop [phi:main::@4->loop] -- call_phi_near + // [17] phi from main::@4 to loop [phi:main::@4->loop] loop_from___b4: jsr loop // [12] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -392,7 +392,7 @@ main: { __b5: // [13] call zpLoop // Call code on zeropage - // [0] phi from main::@5 to zpLoop [phi:main::@5->zpLoop] -- call_phi_near + // [0] phi from main::@5 to zpLoop [phi:main::@5->zpLoop] zpLoop_from___b5: jsr zpLoop jmp __b6 @@ -581,14 +581,14 @@ main: { // loop() // [11] call loop // Call code in normal memory - // [17] phi from main::@4 to loop [phi:main::@4->loop] -- call_phi_near + // [17] phi from main::@4 to loop [phi:main::@4->loop] jsr loop // [12] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 // zpLoop() // [13] call zpLoop // Call code on zeropage - // [0] phi from main::@5 to zpLoop [phi:main::@5->zpLoop] -- call_phi_near + // [0] phi from main::@5 to zpLoop [phi:main::@5->zpLoop] jsr zpLoop // main::@6 // *BG_COLOR = 0 diff --git a/src/test/ref/examples/cx16/cx16-rasterbars.log b/src/test/ref/examples/cx16/cx16-rasterbars.log index 10ffb8032..18cd7a889 100644 --- a/src/test/ref/examples/cx16/cx16-rasterbars.log +++ b/src/test/ref/examples/cx16/cx16-rasterbars.log @@ -998,7 +998,7 @@ __start: { // __start::@1 __b1: // [8] call main - // [51] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [51] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -1083,7 +1083,7 @@ irq_line: { __b1: // [27] call memset // Animate the bars - // [58] phi from irq_line::@1 to memset [phi:irq_line::@1->memset] -- call_phi_near + // [58] phi from irq_line::@1 to memset [phi:irq_line::@1->memset] memset_from___b1: jsr memset jmp __b19 @@ -1567,7 +1567,7 @@ __start: { // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [8] call main - // [51] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [51] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [9] return @@ -1652,7 +1652,7 @@ irq_line: { // memset(BARS, 0, sizeof(BARS)) // [27] call memset // Animate the bars - // [58] phi from irq_line::@1 to memset [phi:irq_line::@1->memset] -- call_phi_near + // [58] phi from irq_line::@1 to memset [phi:irq_line::@1->memset] jsr memset // irq_line::@19 // char idx = sin_idx-- diff --git a/src/test/ref/examples/helloworld/helloworld.log b/src/test/ref/examples/helloworld/helloworld.log index 4fa87ecd3..06f0e6a9a 100644 --- a/src/test/ref/examples/helloworld/helloworld.log +++ b/src/test/ref/examples/helloworld/helloworld.log @@ -1423,7 +1423,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -1431,7 +1431,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -1467,7 +1467,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -1508,7 +1508,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln jmp __breturn // cputc::@return @@ -1520,14 +1520,14 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln jmp __breturn } // main main: { // [28] call printf_str - // [50] phi from main to printf_str [phi:main->printf_str] -- call_phi_near + // [50] phi from main to printf_str [phi:main->printf_str] printf_str_from_main: jsr printf_str jmp __breturn @@ -1663,7 +1663,7 @@ cputln: { sta.z conio_cursor_x // [47] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [48] call cscroll -- call_phi_near + // [48] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -1735,7 +1735,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [72] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [72] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -1754,7 +1754,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [72] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [72] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -1770,7 +1770,7 @@ cscroll: { memset_from___b3: // [82] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [82] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [82] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -1786,7 +1786,7 @@ cscroll: { memset_from___b4: // [82] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [82] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [82] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -2178,12 +2178,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [8] return @@ -2212,7 +2212,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy // conio_c64_init::@return // } @@ -2251,7 +2251,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln // cputc::@return __breturn: @@ -2262,7 +2262,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln rts } @@ -2270,7 +2270,7 @@ cputc: { main: { // printf("hello world!\n") // [28] call printf_str - // [50] phi from main to printf_str [phi:main->printf_str] -- call_phi_near + // [50] phi from main to printf_str [phi:main->printf_str] jsr printf_str // main::@return // } @@ -2407,7 +2407,7 @@ cputln: { // [47] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [48] call cscroll -- call_phi_near + // [48] call cscroll jsr cscroll // cputln::@return // } @@ -2474,7 +2474,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [72] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [72] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -2490,7 +2490,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [72] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [72] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -2503,7 +2503,7 @@ cscroll: { // [82] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [82] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [82] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [82] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -2516,7 +2516,7 @@ cscroll: { // [82] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [82] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [82] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [82] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/examples/mega65/32bit-addressing-mega65.log b/src/test/ref/examples/mega65/32bit-addressing-mega65.log index 3a5303669..f50f22628 100644 --- a/src/test/ref/examples/mega65/32bit-addressing-mega65.log +++ b/src/test/ref/examples/mega65/32bit-addressing-mega65.log @@ -151,7 +151,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -267,7 +267,7 @@ __start: { sta.z ADDR32+3 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/examples/mega65/banked-music.log b/src/test/ref/examples/mega65/banked-music.log index 1f4c72627..483f214bb 100644 --- a/src/test/ref/examples/mega65/banked-music.log +++ b/src/test/ref/examples/mega65/banked-music.log @@ -1140,7 +1140,7 @@ irq: { inc VICII+OFFSET_STRUCT_MOS6569_VICII_BORDER_COLOR // [2] call memoryRemapBlock // Remap memory to put music at $4000 - // [40] phi from irq to memoryRemapBlock [phi:irq->memoryRemapBlock] -- call_phi_near + // [40] phi from irq to memoryRemapBlock [phi:irq->memoryRemapBlock] memoryRemapBlock_from_irq: jsr memoryRemapBlock // [3] phi from irq to irq::@4 [phi:irq->irq::@4] @@ -1167,7 +1167,7 @@ irq: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = 0 [phi:irq::@1->memoryRemap#1] -- vbuzz=vbuc1 ldz #0 - // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:irq::@1->memoryRemap#2] -- call_phi_near + // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:irq::@1->memoryRemap#2] -- vwuz1=vbuc1 lda #<0 sta.z memoryRemap.lowerPageOffset lda #>0 @@ -1217,7 +1217,7 @@ main: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = 0 [phi:main->memoryRemap#1] -- vbuzz=vbuc1 ldz #0 - // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main->memoryRemap#2] -- call_phi_near + // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main->memoryRemap#2] -- vwuz1=vbuc1 lda #<0 sta.z memoryRemap.lowerPageOffset lda #>0 @@ -1253,7 +1253,7 @@ main: { // open sideborder ldz #1 stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO - // [20] call memcpy_dma4 -- call_phi_near + // [20] call memcpy_dma4 // Transfer banked code/data to upper memory ($10000) jsr memcpy_dma4 // [21] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -1263,7 +1263,7 @@ main: { __b6: // [22] call memoryRemapBlock // Remap [$4000-$5fff] to point to [$10000-$11fff] - // [40] phi from main::@6 to memoryRemapBlock [phi:main::@6->memoryRemapBlock] -- call_phi_near + // [40] phi from main::@6 to memoryRemapBlock [phi:main::@6->memoryRemapBlock] memoryRemapBlock_from___b6: jsr memoryRemapBlock jmp __b7 @@ -1290,7 +1290,7 @@ main: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = 0 [phi:main::@1->memoryRemap#1] -- vbuzz=vbuc1 ldz #0 - // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main::@1->memoryRemap#2] -- call_phi_near + // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main::@1->memoryRemap#2] -- vwuz1=vbuc1 lda #<0 sta.z memoryRemap.lowerPageOffset lda #>0 @@ -1386,7 +1386,7 @@ memoryRemapBlock: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = memoryRemapBlock::blockBits#0 [phi:memoryRemapBlock->memoryRemap#1] -- vbuzz=vbuc1 ldz #blockBits - // [43] phi memoryRemap::lowerPageOffset#4 = memoryRemapBlock::pageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- call_phi_near + // [43] phi memoryRemap::lowerPageOffset#4 = memoryRemapBlock::pageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- vwuz1=vwuc1 lda #pageOffset @@ -1847,7 +1847,7 @@ irq: { // memoryRemapBlock(0x40, 0x100) // [2] call memoryRemapBlock // Remap memory to put music at $4000 - // [40] phi from irq to memoryRemapBlock [phi:irq->memoryRemapBlock] -- call_phi_near + // [40] phi from irq to memoryRemapBlock [phi:irq->memoryRemapBlock] jsr memoryRemapBlock // [3] phi from irq to irq::@4 [phi:irq->irq::@4] // irq::@4 @@ -1867,7 +1867,7 @@ irq: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = 0 [phi:irq::@1->memoryRemap#1] -- vbuzz=vbuc1 taz - // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:irq::@1->memoryRemap#2] -- call_phi_near + // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:irq::@1->memoryRemap#2] -- vwuz1=vbuc1 sta.z memoryRemap.lowerPageOffset sta.z memoryRemap.lowerPageOffset+1 jsr memoryRemap @@ -1912,7 +1912,7 @@ main: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = 0 [phi:main->memoryRemap#1] -- vbuzz=vbuc1 taz - // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main->memoryRemap#2] -- call_phi_near + // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main->memoryRemap#2] -- vwuz1=vbuc1 sta.z memoryRemap.lowerPageOffset sta.z memoryRemap.lowerPageOffset+1 jsr memoryRemap @@ -1952,7 +1952,7 @@ main: { ldz #1 stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_SIDBDRWD_LO // memcpy_dma4(1, (void*)0x0000, 0, upperCodeData, MUSIC_END-MUSIC) - // [20] call memcpy_dma4 -- call_phi_near + // [20] call memcpy_dma4 // Transfer banked code/data to upper memory ($10000) jsr memcpy_dma4 // [21] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -1960,7 +1960,7 @@ main: { // memoryRemapBlock(0x40, 0x100) // [22] call memoryRemapBlock // Remap [$4000-$5fff] to point to [$10000-$11fff] - // [40] phi from main::@6 to memoryRemapBlock [phi:main::@6->memoryRemapBlock] -- call_phi_near + // [40] phi from main::@6 to memoryRemapBlock [phi:main::@6->memoryRemapBlock] jsr memoryRemapBlock // main::@7 // asm @@ -1982,7 +1982,7 @@ main: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = 0 [phi:main::@1->memoryRemap#1] -- vbuzz=vbuc1 taz - // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main::@1->memoryRemap#2] -- call_phi_near + // [43] phi memoryRemap::lowerPageOffset#4 = 0 [phi:main::@1->memoryRemap#2] -- vwuz1=vbuc1 sta.z memoryRemap.lowerPageOffset sta.z memoryRemap.lowerPageOffset+1 jsr memoryRemap @@ -2078,7 +2078,7 @@ memoryRemapBlock: { sta.z memoryRemap.upperPageOffset+1 // [43] phi memoryRemap::remapBlocks#4 = memoryRemapBlock::blockBits#0 [phi:memoryRemapBlock->memoryRemap#1] -- vbuzz=vbuc1 ldz #blockBits - // [43] phi memoryRemap::lowerPageOffset#4 = memoryRemapBlock::pageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- call_phi_near + // [43] phi memoryRemap::lowerPageOffset#4 = memoryRemapBlock::pageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- vwuz1=vwuc1 lda #pageOffset diff --git a/src/test/ref/examples/mega65/camelot-1536dots.log b/src/test/ref/examples/mega65/camelot-1536dots.log index 5966d3c76..516889aad 100644 --- a/src/test/ref/examples/mega65/camelot-1536dots.log +++ b/src/test/ref/examples/mega65/camelot-1536dots.log @@ -2901,7 +2901,7 @@ __start: { // __start::@1 __b1: // [8] call main - // [10] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [10] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -2927,7 +2927,7 @@ main: { jmp __b6 // main::@6 __b6: - // [13] call memoryRemap -- call_phi_near + // [13] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap jmp __b10 @@ -2960,7 +2960,7 @@ main: { lda #VICIV_VFAST ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC - // [21] call graphics_mode -- call_phi_near + // [21] call graphics_mode // Initialize graphics jsr graphics_mode jmp __b11 @@ -3053,7 +3053,7 @@ main: { stz SPRITES_XMSB // [43] call init_plot // Initialize plotter - // [110] phi from main::@9 to init_plot [phi:main::@9->init_plot] -- call_phi_near + // [110] phi from main::@9 to init_plot [phi:main::@9->init_plot] init_plot_from___b9: jsr init_plot jmp __b12 @@ -3116,7 +3116,7 @@ main: { // Clear the graphics // [122] phi from main::@5 to memset_dma [phi:main::@5->memset_dma] memset_dma_from___b5: - // [122] phi memset_dma::dest#3 = memset_dma::dest#0 [phi:main::@5->memset_dma#0] -- call_phi_near + // [122] phi memset_dma::dest#3 = memset_dma::dest#0 [phi:main::@5->memset_dma#0] -- register_copy jsr memset_dma jmp __b13 // main::@13 @@ -3124,7 +3124,7 @@ main: { // [56] *((char *)VICIV+OFFSET_STRUCT_MEGA65_VICIV_BORDER_COLOR) = PURPLE -- _deref_pbuc1=vbuc2 ldz #PURPLE stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_BORDER_COLOR - // [57] call render_dots -- call_phi_near + // [57] call render_dots // Render some dots jsr render_dots jmp __b14 @@ -3327,7 +3327,7 @@ graphics_mode: { // Clear the graphics // [122] phi from graphics_mode::@8 to memset_dma [phi:graphics_mode::@8->memset_dma] memset_dma_from___b8: - // [122] phi memset_dma::dest#3 = (void *)GRAPHICS1 [phi:graphics_mode::@8->memset_dma#0] -- call_phi_near + // [122] phi memset_dma::dest#3 = (void *)GRAPHICS1 [phi:graphics_mode::@8->memset_dma#0] -- pvoz1=pvoc1 lda #GRAPHICS1 @@ -3341,7 +3341,7 @@ graphics_mode: { // [89] call memset_dma // [122] phi from graphics_mode::@11 to memset_dma [phi:graphics_mode::@11->memset_dma] memset_dma_from___b11: - // [122] phi memset_dma::dest#3 = (void *)GRAPHICS2 [phi:graphics_mode::@11->memset_dma#0] -- call_phi_near + // [122] phi memset_dma::dest#3 = (void *)GRAPHICS2 [phi:graphics_mode::@11->memset_dma#0] -- pvoz1=pvoc1 lda #GRAPHICS2 @@ -3360,7 +3360,7 @@ graphics_mode: { // [92] lpoke::val = 0 -- vbuz1=vbuc1 ldz #0 stz.z lpoke.val - // [93] call lpoke -- call_phi_near + // [93] call lpoke jsr lpoke jmp __b9 // graphics_mode::@9 @@ -3373,7 +3373,7 @@ graphics_mode: { // [96] lpoke::val = WHITE -- vbuz1=vbuc1 ldz #WHITE stz.z lpoke.val - // [97] call lpoke -- call_phi_near + // [97] call lpoke // No extended attributes jsr lpoke jmp __b10 @@ -3840,7 +3840,7 @@ render_dots: { ldy #0 adc (__25),y taz - // [161] call plot -- call_phi_near + // [161] call plot jsr plot jmp __b18 // render_dots::@18 @@ -4681,7 +4681,7 @@ __start: { // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [8] call main - // [10] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [10] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [9] return @@ -4701,7 +4701,7 @@ main: { // [12] phi from main::SEI1 to main::@6 [phi:main::SEI1->main::@6] // main::@6 // memoryRemap(0x00,0,0) - // [13] call memoryRemap -- call_phi_near + // [13] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // main::@10 @@ -4740,7 +4740,7 @@ main: { ora VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC sta VICIV+OFFSET_STRUCT_MEGA65_VICIV_CONTROLC // graphics_mode() - // [21] call graphics_mode -- call_phi_near + // [21] call graphics_mode // Initialize graphics jsr graphics_mode // main::@11 @@ -4831,7 +4831,7 @@ main: { // init_plot() // [43] call init_plot // Initialize plotter - // [110] phi from main::@9 to init_plot [phi:main::@9->init_plot] -- call_phi_near + // [110] phi from main::@9 to init_plot [phi:main::@9->init_plot] jsr init_plot // main::@12 // asm @@ -4894,7 +4894,7 @@ main: { // [55] call memset_dma // Clear the graphics // [122] phi from main::@5 to memset_dma [phi:main::@5->memset_dma] - // [122] phi memset_dma::dest#3 = memset_dma::dest#0 [phi:main::@5->memset_dma#0] -- call_phi_near + // [122] phi memset_dma::dest#3 = memset_dma::dest#0 [phi:main::@5->memset_dma#0] -- register_copy jsr memset_dma // main::@13 // VICIV->BORDER_COLOR = PURPLE @@ -4902,7 +4902,7 @@ main: { ldz #PURPLE stz VICIV+OFFSET_STRUCT_MEGA65_VICIV_BORDER_COLOR // render_dots() - // [57] call render_dots -- call_phi_near + // [57] call render_dots // Render some dots jsr render_dots // main::@14 @@ -5114,7 +5114,7 @@ graphics_mode: { // [87] call memset_dma // Clear the graphics // [122] phi from graphics_mode::@8 to memset_dma [phi:graphics_mode::@8->memset_dma] - // [122] phi memset_dma::dest#3 = (void *)GRAPHICS1 [phi:graphics_mode::@8->memset_dma#0] -- call_phi_near + // [122] phi memset_dma::dest#3 = (void *)GRAPHICS1 [phi:graphics_mode::@8->memset_dma#0] -- pvoz1=pvoc1 lda #GRAPHICS1 @@ -5125,7 +5125,7 @@ graphics_mode: { // memset_dma(GRAPHICS2, 0x00, 40*25*8) // [89] call memset_dma // [122] phi from graphics_mode::@11 to memset_dma [phi:graphics_mode::@11->memset_dma] - // [122] phi memset_dma::dest#3 = (void *)GRAPHICS2 [phi:graphics_mode::@11->memset_dma#0] -- call_phi_near + // [122] phi memset_dma::dest#3 = (void *)GRAPHICS2 [phi:graphics_mode::@11->memset_dma#0] -- pvoz1=pvoc1 lda #GRAPHICS2 @@ -5144,7 +5144,7 @@ graphics_mode: { // [92] lpoke::val = 0 -- vbuz1=vbuc1 ldz #0 stz.z lpoke.val - // [93] call lpoke -- call_phi_near + // [93] call lpoke jsr lpoke // graphics_mode::@9 // lpoke(cols++, 0); @@ -5157,7 +5157,7 @@ graphics_mode: { // [96] lpoke::val = WHITE -- vbuz1=vbuc1 ldz #WHITE stz.z lpoke.val - // [97] call lpoke -- call_phi_near + // [97] call lpoke // No extended attributes jsr lpoke // graphics_mode::@10 @@ -5626,7 +5626,7 @@ render_dots: { clc adc (__25),y taz - // [161] call plot -- call_phi_near + // [161] call plot jsr plot // render_dots::@18 // idx_x1 -= 11 diff --git a/src/test/ref/examples/mega65/dma-test.log b/src/test/ref/examples/mega65/dma-test.log index 1357cda42..6b118ed53 100644 --- a/src/test/ref/examples/mega65/dma-test.log +++ b/src/test/ref/examples/mega65/dma-test.log @@ -384,7 +384,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memoryRemap -- call_phi_near + // [1] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap jmp __b1 @@ -570,7 +570,7 @@ Score: 81 // main main: { // memoryRemap(0,0,0) - // [1] call memoryRemap -- call_phi_near + // [1] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // main::@1 diff --git a/src/test/ref/examples/mega65/dma-test2.log b/src/test/ref/examples/mega65/dma-test2.log index 57c7da4f7..620a9ffa2 100644 --- a/src/test/ref/examples/mega65/dma-test2.log +++ b/src/test/ref/examples/mega65/dma-test2.log @@ -511,7 +511,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memoryRemap -- call_phi_near + // [1] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] @@ -519,7 +519,7 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call memcpy_dma -- call_phi_near + // [3] call memcpy_dma // Move screen up using DMA jsr memcpy_dma jmp __breturn @@ -759,13 +759,13 @@ Score: 131 // main main: { // memoryRemap(0,0,0) - // [1] call memoryRemap -- call_phi_near + // [1] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // memcpy_dma(DEFAULT_SCREEN, DEFAULT_SCREEN+80, 24*80) - // [3] call memcpy_dma -- call_phi_near + // [3] call memcpy_dma // Move screen up using DMA jsr memcpy_dma // main::@return diff --git a/src/test/ref/examples/mega65/dma-test3.log b/src/test/ref/examples/mega65/dma-test3.log index 8673a5c03..f4fb1aa35 100644 --- a/src/test/ref/examples/mega65/dma-test3.log +++ b/src/test/ref/examples/mega65/dma-test3.log @@ -547,7 +547,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memoryRemap -- call_phi_near + // [1] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] @@ -555,7 +555,7 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call memcpy_dma4 -- call_phi_near + // [3] call memcpy_dma4 // Move screen up using DMA jsr memcpy_dma4 jmp __breturn @@ -813,13 +813,13 @@ Score: 143 // main main: { // memoryRemap(0,0,0) - // [1] call memoryRemap -- call_phi_near + // [1] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // memcpy_dma4(0, DEFAULT_SCREEN, 0, DEFAULT_SCREEN+80, 24*80) - // [3] call memcpy_dma4 -- call_phi_near + // [3] call memcpy_dma4 // Move screen up using DMA jsr memcpy_dma4 // main::@return diff --git a/src/test/ref/examples/mega65/dma-test4.log b/src/test/ref/examples/mega65/dma-test4.log index 9499054f2..4b42f4f75 100644 --- a/src/test/ref/examples/mega65/dma-test4.log +++ b/src/test/ref/examples/mega65/dma-test4.log @@ -665,7 +665,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memoryRemap -- call_phi_near + // [1] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] @@ -673,7 +673,7 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call memcpy_dma256 -- call_phi_near + // [3] call memcpy_dma256 // Move screen up using DMA jsr memcpy_dma256 jmp __breturn @@ -957,13 +957,13 @@ Score: 155 // main main: { // memoryRemap(0,0,0) - // [1] call memoryRemap -- call_phi_near + // [1] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // memcpy_dma256(0,0, DEFAULT_SCREEN, 0,0, DEFAULT_SCREEN+80, 24*80) - // [3] call memcpy_dma256 -- call_phi_near + // [3] call memcpy_dma256 // Move screen up using DMA jsr memcpy_dma256 // main::@return diff --git a/src/test/ref/examples/mega65/dma-test5.log b/src/test/ref/examples/mega65/dma-test5.log index b77b5b6cf..d58be21be 100644 --- a/src/test/ref/examples/mega65/dma-test5.log +++ b/src/test/ref/examples/mega65/dma-test5.log @@ -507,7 +507,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memoryRemap -- call_phi_near + // [1] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] @@ -515,7 +515,7 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call memset_dma -- call_phi_near + // [3] call memset_dma // Fill screen up using DMA jsr memset_dma jmp __breturn @@ -755,13 +755,13 @@ Score: 131 // main main: { // memoryRemap(0,0,0) - // [1] call memoryRemap -- call_phi_near + // [1] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // memset_dma(DEFAULT_SCREEN, '*', 80*10) - // [3] call memset_dma -- call_phi_near + // [3] call memset_dma // Fill screen up using DMA jsr memset_dma // main::@return diff --git a/src/test/ref/examples/mega65/dma-test6.log b/src/test/ref/examples/mega65/dma-test6.log index 632c2b1ea..3145ecb9f 100644 --- a/src/test/ref/examples/mega65/dma-test6.log +++ b/src/test/ref/examples/mega65/dma-test6.log @@ -611,7 +611,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memoryRemap -- call_phi_near + // [1] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] @@ -619,7 +619,7 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call memset_dma256 -- call_phi_near + // [3] call memset_dma256 // Fill screen up using 256MB DMA jsr memset_dma256 jmp __breturn @@ -884,13 +884,13 @@ Score: 143 // main main: { // memoryRemap(0,0,0) - // [1] call memoryRemap -- call_phi_near + // [1] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // memset_dma256(0, 0, DEFAULT_SCREEN, '*', 80*10) - // [3] call memset_dma256 -- call_phi_near + // [3] call memset_dma256 // Fill screen up using 256MB DMA jsr memset_dma256 // main::@return diff --git a/src/test/ref/examples/mega65/dypp65.log b/src/test/ref/examples/mega65/dypp65.log index 178673d08..164eb0c8e 100644 --- a/src/test/ref/examples/mega65/dypp65.log +++ b/src/test/ref/examples/mega65/dypp65.log @@ -1460,7 +1460,7 @@ main: { jmp __b11 // main::@11 __b11: - // [3] call memoryRemap -- call_phi_near + // [3] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap jmp __b12 @@ -1563,7 +1563,7 @@ main: { sta.z memset_dma.dest+1 // [60] phi memset_dma::fill#2 = 0 [phi:main::@12->memset_dma#1] -- vbuzz=vbuc1 ldz #0 - // [60] phi memset_dma::num#2 = (unsigned int)$2d*$19*2 [phi:main::@12->memset_dma#2] -- call_phi_near + // [60] phi memset_dma::num#2 = (unsigned int)$2d*$19*2 [phi:main::@12->memset_dma#2] -- vwuz1=vwuc1 lda #<$2d*$19*2 sta.z memset_dma.num lda #>$2d*$19*2 @@ -1574,7 +1574,7 @@ main: { jmp __b13 // main::@13 __b13: - // [30] call memset_dma256 -- call_phi_near + // [30] call memset_dma256 // Fill the colours with WHITE - directly into $ff80000 jsr memset_dma256 // [31] phi from main::@13 to main::@14 [phi:main::@13->main::@14] @@ -1593,7 +1593,7 @@ main: { sta.z memset_dma.dest+1 // [60] phi memset_dma::fill#2 = $55 [phi:main::@14->memset_dma#1] -- vbuzz=vbuc1 ldz #$55 - // [60] phi memset_dma::num#2 = (unsigned int)$2d*$20*8 [phi:main::@14->memset_dma#2] -- call_phi_near + // [60] phi memset_dma::num#2 = (unsigned int)$2d*$20*8 [phi:main::@14->memset_dma#2] -- vwuz1=vwuc1 lda #<$2d*$20*8 sta.z memset_dma.num lda #>$2d*$20*8 @@ -2236,7 +2236,7 @@ main: { // [2] phi from main::SEI1 to main::@11 [phi:main::SEI1->main::@11] // main::@11 // memoryRemap(0,0,0) - // [3] call memoryRemap -- call_phi_near + // [3] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // main::@12 @@ -2354,7 +2354,7 @@ main: { lda #>SCREEN sta.z memset_dma.dest+1 // [60] phi memset_dma::fill#2 = 0 [phi:main::@12->memset_dma#1] -- vbuzz=vbuc1 - // [60] phi memset_dma::num#2 = (unsigned int)$2d*$19*2 [phi:main::@12->memset_dma#2] -- call_phi_near + // [60] phi memset_dma::num#2 = (unsigned int)$2d*$19*2 [phi:main::@12->memset_dma#2] -- vwuz1=vwuc1 lda #<$2d*$19*2 sta.z memset_dma.num lda #>$2d*$19*2 @@ -2363,7 +2363,7 @@ main: { // [29] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 // memset_dma256(0xff,0x08,(void*)0x0000, WHITE, 45*25*2) - // [30] call memset_dma256 -- call_phi_near + // [30] call memset_dma256 // Fill the colours with WHITE - directly into $ff80000 jsr memset_dma256 // [31] phi from main::@13 to main::@14 [phi:main::@13->main::@14] @@ -2379,7 +2379,7 @@ main: { sta.z memset_dma.dest+1 // [60] phi memset_dma::fill#2 = $55 [phi:main::@14->memset_dma#1] -- vbuzz=vbuc1 ldz #$55 - // [60] phi memset_dma::num#2 = (unsigned int)$2d*$20*8 [phi:main::@14->memset_dma#2] -- call_phi_near + // [60] phi memset_dma::num#2 = (unsigned int)$2d*$20*8 [phi:main::@14->memset_dma#2] -- vwuz1=vwuc1 lda #<$2d*$20*8 sta.z memset_dma.num lda #>$2d*$20*8 diff --git a/src/test/ref/examples/mega65/helloworld-mega65.log b/src/test/ref/examples/mega65/helloworld-mega65.log index 3d741a72b..f4fcca264 100644 --- a/src/test/ref/examples/mega65/helloworld-mega65.log +++ b/src/test/ref/examples/mega65/helloworld-mega65.log @@ -1699,7 +1699,7 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // [5] call conio_mega65_init - // [9] phi from __start::__init1 to conio_mega65_init [phi:__start::__init1->conio_mega65_init] -- call_phi_near + // [9] phi from __start::__init1 to conio_mega65_init [phi:__start::__init1->conio_mega65_init] conio_mega65_init_from___init1: jsr conio_mega65_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] @@ -1708,7 +1708,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [34] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [34] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -1732,7 +1732,7 @@ conio_mega65_init: { jmp __b2 // conio_mega65_init::@2 __b2: - // [12] call memoryRemap -- call_phi_near + // [12] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap jmp __b3 @@ -1773,7 +1773,7 @@ conio_mega65_init: { // conio_mega65_init::@1 __b1: // [20] gotoxy::y#2 = conio_mega65_init::line#2 - // [21] call gotoxy -- call_phi_near + // [21] call gotoxy jsr gotoxy jmp __breturn // conio_mega65_init::@return @@ -1814,7 +1814,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [30] call cputln -- call_phi_near + // [30] call cputln jsr cputln jmp __breturn // cputc::@return @@ -1826,14 +1826,14 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [33] call cputln -- call_phi_near + // [33] call cputln jsr cputln jmp __breturn } // main main: { // [35] call printf_str - // [63] phi from main to printf_str [phi:main->printf_str] -- call_phi_near + // [63] phi from main to printf_str [phi:main->printf_str] printf_str_from_main: jsr printf_str jmp __breturn @@ -2026,7 +2026,7 @@ cputln: { stz.z conio_cursor_x // [60] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [61] call cscroll -- call_phi_near + // [61] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -2095,7 +2095,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [85] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$50 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [85] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$50 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$50 @@ -2114,7 +2114,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [85] phi memcpy::source#2 = (void *)COLORRAM+$50 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [85] phi memcpy::source#2 = (void *)COLORRAM+$50 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$50 @@ -2130,7 +2130,7 @@ cscroll: { memset_from___b3: // [95] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuzz=vbuc1 ldz #' ' - // [95] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$50-$50 [phi:cscroll::@3->memset#1] -- call_phi_near + // [95] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$50-$50 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$50-$50 @@ -2146,7 +2146,7 @@ cscroll: { memset_from___b4: // [95] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuzz=vbuc1 ldz #LIGHT_BLUE - // [95] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$50-$50 [phi:cscroll::@4->memset#1] -- call_phi_near + // [95] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$50-$50 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$50-$50 @@ -2569,12 +2569,12 @@ __start: { sta.z conio_line_color+1 // #pragma constructor_for(conio_mega65_init, cputc, clrscr, cscroll) // [5] call conio_mega65_init - // [9] phi from __start::__init1 to conio_mega65_init [phi:__start::__init1->conio_mega65_init] -- call_phi_near + // [9] phi from __start::__init1 to conio_mega65_init [phi:__start::__init1->conio_mega65_init] jsr conio_mega65_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [34] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [34] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [8] return @@ -2592,7 +2592,7 @@ conio_mega65_init: { // [11] phi from conio_mega65_init::SEI1 to conio_mega65_init::@2 [phi:conio_mega65_init::SEI1->conio_mega65_init::@2] // conio_mega65_init::@2 // memoryRemap(0,0,0) - // [12] call memoryRemap -- call_phi_near + // [12] call memoryRemap // Map memory to BANK 0 : 0x00XXXX - giving access to I/O jsr memoryRemap // conio_mega65_init::@3 @@ -2630,7 +2630,7 @@ conio_mega65_init: { __b1: // gotoxy(0, line) // [20] gotoxy::y#2 = conio_mega65_init::line#2 - // [21] call gotoxy -- call_phi_near + // [21] call gotoxy jsr gotoxy // conio_mega65_init::@return // } @@ -2669,7 +2669,7 @@ cputc: { // [29] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [30] call cputln -- call_phi_near + // [30] call cputln jsr cputln // cputc::@return __breturn: @@ -2680,7 +2680,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [33] call cputln -- call_phi_near + // [33] call cputln jsr cputln rts } @@ -2688,7 +2688,7 @@ cputc: { main: { // printf("hello world!") // [35] call printf_str - // [63] phi from main to printf_str [phi:main->printf_str] -- call_phi_near + // [63] phi from main to printf_str [phi:main->printf_str] jsr printf_str // main::@return // } @@ -2882,7 +2882,7 @@ cputln: { // [60] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [61] call cscroll -- call_phi_near + // [61] call cscroll jsr cscroll // cputln::@return // } @@ -2946,7 +2946,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [85] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$50 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [85] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$50 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$50 @@ -2962,7 +2962,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [85] phi memcpy::source#2 = (void *)COLORRAM+$50 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [85] phi memcpy::source#2 = (void *)COLORRAM+$50 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$50 @@ -2975,7 +2975,7 @@ cscroll: { // [95] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [95] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuzz=vbuc1 ldz #' ' - // [95] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$50-$50 [phi:cscroll::@3->memset#1] -- call_phi_near + // [95] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$50-$50 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$50-$50 @@ -2988,7 +2988,7 @@ cscroll: { // [95] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [95] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuzz=vbuc1 ldz #LIGHT_BLUE - // [95] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$50-$50 [phi:cscroll::@4->memset#1] -- call_phi_near + // [95] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$50-$50 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$50-$50 diff --git a/src/test/ref/examples/mega65/memorymap-test.log b/src/test/ref/examples/mega65/memorymap-test.log index e9f734cad..34e9e57ef 100644 --- a/src/test/ref/examples/mega65/memorymap-test.log +++ b/src/test/ref/examples/mega65/memorymap-test.log @@ -1023,7 +1023,7 @@ main: { // Remap [$4000-$5fff] to point to [$10000-$11fff] // [24] phi from main to memoryRemapBlock [phi:main->memoryRemapBlock] memoryRemapBlock_from_main: - // [24] phi memoryRemapBlock::blockPage#2 = $40 [phi:main->memoryRemapBlock#0] -- call_phi_near + // [24] phi memoryRemapBlock::blockPage#2 = $40 [phi:main->memoryRemapBlock#0] -- vbuxx=vbuc1 ldx #$40 jsr memoryRemapBlock jmp __b7 @@ -1040,7 +1040,7 @@ main: { // Remap [$8000-$9fff] to point to [$10000-$11fff] // [24] phi from main::@7 to memoryRemapBlock [phi:main::@7->memoryRemapBlock] memoryRemapBlock_from___b7: - // [24] phi memoryRemapBlock::blockPage#2 = $80 [phi:main::@7->memoryRemapBlock#0] -- call_phi_near + // [24] phi memoryRemapBlock::blockPage#2 = $80 [phi:main::@7->memoryRemapBlock#0] -- vbuxx=vbuc1 ldx #$80 jsr memoryRemapBlock jmp __b8 @@ -1064,7 +1064,7 @@ main: { sta.z memoryRemap.upperPageOffset+1 // [33] phi memoryRemap::remapBlocks#2 = MEMORYBLOCK_4000|MEMORYBLOCK_8000 [phi:main::@8->memoryRemap#1] -- vbuzz=vbuc1 ldz #MEMORYBLOCK_4000|MEMORYBLOCK_8000 - // [33] phi memoryRemap::lowerPageOffset#2 = $c0 [phi:main::@8->memoryRemap#2] -- call_phi_near + // [33] phi memoryRemap::lowerPageOffset#2 = $c0 [phi:main::@8->memoryRemap#2] -- vwuz1=vbuc1 lda #<$c0 sta.z memoryRemap.lowerPageOffset lda #>$c0 @@ -1102,7 +1102,7 @@ main: { memoryRemap256M_from___b3: // [46] phi memoryRemap256M::remapBlocks#2 = MEMORYBLOCK_4000 [phi:main::@3->memoryRemap256M#0] -- vbuxx=vbuc1 ldx #MEMORYBLOCK_4000 - // [46] phi memoryRemap256M::lowerPageOffset#2 = $ff800-$40 [phi:main::@3->memoryRemap256M#1] -- call_phi_near + // [46] phi memoryRemap256M::lowerPageOffset#2 = $ff800-$40 [phi:main::@3->memoryRemap256M#1] -- vduz1=vduc1 lda #<$ff800-$40 sta.z memoryRemap256M.lowerPageOffset lda #>$ff800-$40 @@ -1134,7 +1134,7 @@ main: { memoryRemap256M_from___b6: // [46] phi memoryRemap256M::remapBlocks#2 = 0 [phi:main::@6->memoryRemap256M#0] -- vbuxx=vbuc1 ldx #0 - // [46] phi memoryRemap256M::lowerPageOffset#2 = 0 [phi:main::@6->memoryRemap256M#1] -- call_phi_near + // [46] phi memoryRemap256M::lowerPageOffset#2 = 0 [phi:main::@6->memoryRemap256M#1] -- vduz1=vbuc1 lda #0 sta.z memoryRemap256M.lowerPageOffset lda #0 @@ -1223,7 +1223,7 @@ memoryRemapBlock: { memoryRemap_from_memoryRemapBlock: // [33] phi memoryRemap::upperPageOffset#2 = memoryRemap::upperPageOffset#0 [phi:memoryRemapBlock->memoryRemap#0] -- register_copy // [33] phi memoryRemap::remapBlocks#2 = memoryRemap::remapBlocks#0 [phi:memoryRemapBlock->memoryRemap#1] -- register_copy - // [33] phi memoryRemap::lowerPageOffset#2 = memoryRemap::lowerPageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- call_phi_near + // [33] phi memoryRemap::lowerPageOffset#2 = memoryRemap::lowerPageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- register_copy jsr memoryRemap jmp __breturn // memoryRemapBlock::@return @@ -1611,7 +1611,7 @@ main: { // [1] call memoryRemapBlock // Remap [$4000-$5fff] to point to [$10000-$11fff] // [24] phi from main to memoryRemapBlock [phi:main->memoryRemapBlock] - // [24] phi memoryRemapBlock::blockPage#2 = $40 [phi:main->memoryRemapBlock#0] -- call_phi_near + // [24] phi memoryRemapBlock::blockPage#2 = $40 [phi:main->memoryRemapBlock#0] -- vbuxx=vbuc1 ldx #$40 jsr memoryRemapBlock // main::@7 @@ -1628,7 +1628,7 @@ main: { // [4] call memoryRemapBlock // Remap [$8000-$9fff] to point to [$10000-$11fff] // [24] phi from main::@7 to memoryRemapBlock [phi:main::@7->memoryRemapBlock] - // [24] phi memoryRemapBlock::blockPage#2 = $80 [phi:main::@7->memoryRemapBlock#0] -- call_phi_near + // [24] phi memoryRemapBlock::blockPage#2 = $80 [phi:main::@7->memoryRemapBlock#0] -- vbuxx=vbuc1 ldx #$80 jsr memoryRemapBlock // main::@8 @@ -1652,7 +1652,7 @@ main: { sta.z memoryRemap.upperPageOffset+1 // [33] phi memoryRemap::remapBlocks#2 = MEMORYBLOCK_4000|MEMORYBLOCK_8000 [phi:main::@8->memoryRemap#1] -- vbuzz=vbuc1 ldz #MEMORYBLOCK_4000|MEMORYBLOCK_8000 - // [33] phi memoryRemap::lowerPageOffset#2 = $c0 [phi:main::@8->memoryRemap#2] -- call_phi_near + // [33] phi memoryRemap::lowerPageOffset#2 = $c0 [phi:main::@8->memoryRemap#2] -- vwuz1=vbuc1 lda #<$c0 sta.z memoryRemap.lowerPageOffset lda #>$c0 @@ -1686,7 +1686,7 @@ main: { // [46] phi from main::@3 to memoryRemap256M [phi:main::@3->memoryRemap256M] // [46] phi memoryRemap256M::remapBlocks#2 = MEMORYBLOCK_4000 [phi:main::@3->memoryRemap256M#0] -- vbuxx=vbuc1 ldx #MEMORYBLOCK_4000 - // [46] phi memoryRemap256M::lowerPageOffset#2 = $ff800-$40 [phi:main::@3->memoryRemap256M#1] -- call_phi_near + // [46] phi memoryRemap256M::lowerPageOffset#2 = $ff800-$40 [phi:main::@3->memoryRemap256M#1] -- vduz1=vduc1 lda #<$ff800-$40 sta.z memoryRemap256M.lowerPageOffset lda #>$ff800-$40 @@ -1714,7 +1714,7 @@ main: { // [46] phi from main::@6 to memoryRemap256M [phi:main::@6->memoryRemap256M] // [46] phi memoryRemap256M::remapBlocks#2 = 0 [phi:main::@6->memoryRemap256M#0] -- vbuxx=vbuc1 ldx #0 - // [46] phi memoryRemap256M::lowerPageOffset#2 = 0 [phi:main::@6->memoryRemap256M#1] -- call_phi_near + // [46] phi memoryRemap256M::lowerPageOffset#2 = 0 [phi:main::@6->memoryRemap256M#1] -- vduz1=vbuc1 txa sta.z memoryRemap256M.lowerPageOffset sta.z memoryRemap256M.lowerPageOffset+1 @@ -1807,7 +1807,7 @@ memoryRemapBlock: { // [33] phi from memoryRemapBlock to memoryRemap [phi:memoryRemapBlock->memoryRemap] // [33] phi memoryRemap::upperPageOffset#2 = memoryRemap::upperPageOffset#0 [phi:memoryRemapBlock->memoryRemap#0] -- register_copy // [33] phi memoryRemap::remapBlocks#2 = memoryRemap::remapBlocks#0 [phi:memoryRemapBlock->memoryRemap#1] -- register_copy - // [33] phi memoryRemap::lowerPageOffset#2 = memoryRemap::lowerPageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- call_phi_near + // [33] phi memoryRemap::lowerPageOffset#2 = memoryRemap::lowerPageOffset#0 [phi:memoryRemapBlock->memoryRemap#2] -- register_copy jsr memoryRemap // memoryRemapBlock::@return // } diff --git a/src/test/ref/examples/mega65/raster65.log b/src/test/ref/examples/mega65/raster65.log index 6c6c84084..a3be84bda 100644 --- a/src/test/ref/examples/mega65/raster65.log +++ b/src/test/ref/examples/mega65/raster65.log @@ -2201,7 +2201,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [7] call main -- call_phi_near + // [7] call main jsr main jmp __breturn // __start::@return @@ -2747,7 +2747,7 @@ main: { __b1: // [118] call memset // Clear screen - // [144] phi from main::@1 to memset [phi:main::@1->memset] -- call_phi_near + // [144] phi from main::@1 to memset [phi:main::@1->memset] memset_from___b1: jsr memset // [119] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -3403,7 +3403,7 @@ __start: { stz.z greet_idx // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [7] call main -- call_phi_near + // [7] call main jsr main // __start::@return // [8] return @@ -3965,7 +3965,7 @@ main: { // memset(SCREEN, ' ', 40*25) // [118] call memset // Clear screen - // [144] phi from main::@1 to memset [phi:main::@1->memset] -- call_phi_near + // [144] phi from main::@1 to memset [phi:main::@1->memset] jsr memset // [119] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // [119] phi main::i1#2 = 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1 diff --git a/src/test/ref/examples/nes/nes-dxycp.log b/src/test/ref/examples/nes/nes-dxycp.log index 7640dad65..fdccbdbe3 100644 --- a/src/test/ref/examples/nes/nes-dxycp.log +++ b/src/test/ref/examples/nes/nes-dxycp.log @@ -2194,7 +2194,7 @@ __start: { // __start::@1 __b1: // [5] call main - // [45] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [45] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -2242,7 +2242,7 @@ vblank: { jmp __b14 // vblank::@14 __b14: - // [12] call readJoy1 -- call_phi_near + // [12] call readJoy1 // Read controller 1 jsr readJoy1 // [13] readJoy1::return#2 = readJoy1::joy#2 @@ -2538,7 +2538,7 @@ main: { __b4: // [71] call ppuDataTransfer // Transfer the palette - // [96] phi from main::@4 to ppuDataTransfer [phi:main::@4->ppuDataTransfer] -- call_phi_near + // [96] phi from main::@4 to ppuDataTransfer [phi:main::@4->ppuDataTransfer] ppuDataTransfer_from___b4: jsr ppuDataTransfer // [72] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -2557,7 +2557,7 @@ main: { sta.z ppuDataFill.size lda #>$20*$1e sta.z ppuDataFill.size+1 - // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_NAME_TABLE_0 [phi:main::@5->ppuDataFill#2] -- call_phi_near + // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_NAME_TABLE_0 [phi:main::@5->ppuDataFill#2] -- pvoz1=pvoc1 lda #PPU_NAME_TABLE_0 @@ -2578,7 +2578,7 @@ main: { sta.z ppuDataFill.size lda #>$40 sta.z ppuDataFill.size+1 - // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_ATTRIBUTE_TABLE_0 [phi:main::@6->ppuDataFill#2] -- call_phi_near + // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_ATTRIBUTE_TABLE_0 [phi:main::@6->ppuDataFill#2] -- pvoz1=pvoc1 lda #PPU_ATTRIBUTE_TABLE_0 @@ -3276,7 +3276,7 @@ __start: { // [4] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [5] call main - // [45] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [45] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [6] return @@ -3318,7 +3318,7 @@ vblank: { // [11] phi from vblank::ppuSpriteBufferDmaTransfer1 to vblank::@14 [phi:vblank::ppuSpriteBufferDmaTransfer1->vblank::@14] // vblank::@14 // char joy = readJoy1() - // [12] call readJoy1 -- call_phi_near + // [12] call readJoy1 // Read controller 1 jsr readJoy1 // [13] readJoy1::return#2 = readJoy1::joy#2 @@ -3596,7 +3596,7 @@ main: { // ppuDataTransfer(PPU_PALETTE, PALETTE, sizeof(PALETTE)) // [71] call ppuDataTransfer // Transfer the palette - // [96] phi from main::@4 to ppuDataTransfer [phi:main::@4->ppuDataTransfer] -- call_phi_near + // [96] phi from main::@4 to ppuDataTransfer [phi:main::@4->ppuDataTransfer] jsr ppuDataTransfer // [72] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 @@ -3611,7 +3611,7 @@ main: { sta.z ppuDataFill.size lda #>$20*$1e sta.z ppuDataFill.size+1 - // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_NAME_TABLE_0 [phi:main::@5->ppuDataFill#2] -- call_phi_near + // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_NAME_TABLE_0 [phi:main::@5->ppuDataFill#2] -- pvoz1=pvoc1 lda #PPU_NAME_TABLE_0 @@ -3629,7 +3629,7 @@ main: { sta.z ppuDataFill.size lda #>$40 sta.z ppuDataFill.size+1 - // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_ATTRIBUTE_TABLE_0 [phi:main::@6->ppuDataFill#2] -- call_phi_near + // [106] phi ppuDataFill::ppuDataPrepare1_ppuData#0 = (void * const )PPU_ATTRIBUTE_TABLE_0 [phi:main::@6->ppuDataFill#2] -- pvoz1=pvoc1 lda #PPU_ATTRIBUTE_TABLE_0 diff --git a/src/test/ref/examples/plus4/plus4-randomwalk.log b/src/test/ref/examples/plus4/plus4-randomwalk.log index 9b13addd0..91996d03d 100644 --- a/src/test/ref/examples/plus4/plus4-randomwalk.log +++ b/src/test/ref/examples/plus4/plus4-randomwalk.log @@ -1195,7 +1195,7 @@ main: { memset_from_main: // [44] phi memset::c#5 = $a0 [phi:main->memset#0] -- vbuxx=vbuc1 ldx #$a0 - // [44] phi memset::str#4 = (void *)DEFAULT_SCREEN [phi:main->memset#1] -- call_phi_near + // [44] phi memset::str#4 = (void *)DEFAULT_SCREEN [phi:main->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN @@ -1211,7 +1211,7 @@ main: { memset_from___b10: // [44] phi memset::c#5 = 0 [phi:main::@10->memset#0] -- vbuxx=vbuc1 ldx #0 - // [44] phi memset::str#4 = (void *)DEFAULT_COLORRAM [phi:main::@10->memset#1] -- call_phi_near + // [44] phi memset::str#4 = (void *)DEFAULT_COLORRAM [phi:main::@10->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_COLORRAM @@ -1227,7 +1227,7 @@ main: { memset_from___b11: // [44] phi memset::c#5 = 0 [phi:main::@11->memset#0] -- vbuxx=vbuc1 ldx #0 - // [44] phi memset::str#4 = (void *)VISITS [phi:main::@11->memset#1] -- call_phi_near + // [44] phi memset::str#4 = (void *)VISITS [phi:main::@11->memset#1] -- pvoz1=pvoc1 lda #VISITS @@ -1332,7 +1332,7 @@ main: { lda FADE,y ldy #0 sta (__8),y - // [20] call rand -- call_phi_near + // [20] call rand jsr rand // [21] rand::return#2 = rand::return#0 jmp __b13 @@ -1814,7 +1814,7 @@ main: { // [44] phi from main to memset [phi:main->memset] // [44] phi memset::c#5 = $a0 [phi:main->memset#0] -- vbuxx=vbuc1 ldx #$a0 - // [44] phi memset::str#4 = (void *)DEFAULT_SCREEN [phi:main->memset#1] -- call_phi_near + // [44] phi memset::str#4 = (void *)DEFAULT_SCREEN [phi:main->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN @@ -1827,7 +1827,7 @@ main: { // [44] phi from main::@10 to memset [phi:main::@10->memset] // [44] phi memset::c#5 = 0 [phi:main::@10->memset#0] -- vbuxx=vbuc1 ldx #0 - // [44] phi memset::str#4 = (void *)DEFAULT_COLORRAM [phi:main::@10->memset#1] -- call_phi_near + // [44] phi memset::str#4 = (void *)DEFAULT_COLORRAM [phi:main::@10->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_COLORRAM @@ -1840,7 +1840,7 @@ main: { // [44] phi from main::@11 to memset [phi:main::@11->memset] // [44] phi memset::c#5 = 0 [phi:main::@11->memset#0] -- vbuxx=vbuc1 ldx #0 - // [44] phi memset::str#4 = (void *)VISITS [phi:main::@11->memset#1] -- call_phi_near + // [44] phi memset::str#4 = (void *)VISITS [phi:main::@11->memset#1] -- pvoz1=pvoc1 lda #VISITS @@ -1946,7 +1946,7 @@ main: { ldy #0 sta (__8),y // rand() - // [20] call rand -- call_phi_near + // [20] call rand jsr rand // [21] rand::return#2 = rand::return#0 // main::@13 diff --git a/src/test/ref/examples/rom/rom.log b/src/test/ref/examples/rom/rom.log index 6fc4558a9..42362a5cd 100644 --- a/src/test/ref/examples/rom/rom.log +++ b/src/test/ref/examples/rom/rom.log @@ -567,7 +567,7 @@ main: { call2_from_main: // [34] phi call2::param2#2 = 2 [phi:main->call2#0] -- vbuaa=vbuc1 lda #2 - // [34] phi call2::param1#2 = 1 [phi:main->call2#1] -- call_phi_near + // [34] phi call2::param1#2 = 1 [phi:main->call2#1] -- vbuxx=vbuc1 ldx #1 jsr call2 // [13] call2::return = call2::return @@ -583,7 +583,7 @@ main: { call2_from___b1: // [34] phi call2::param2#2 = 4 [phi:main::@1->call2#0] -- vbuaa=vbuc1 lda #4 - // [34] phi call2::param1#2 = 3 [phi:main::@1->call2#1] -- call_phi_near + // [34] phi call2::param1#2 = 3 [phi:main::@1->call2#1] -- vbuxx=vbuc1 ldx #3 jsr call2 // [17] call2::return = call2::return @@ -599,7 +599,7 @@ main: { call3_from___b2: // [38] phi call3::param2#2 = 2 [phi:main::@2->call3#0] -- vbuaa=vbuc1 lda #2 - // [38] phi call3::param1#2 = 1 [phi:main::@2->call3#1] -- call_phi_near + // [38] phi call3::param1#2 = 1 [phi:main::@2->call3#1] -- vbuxx=vbuc1 ldx #1 jsr call3 // [21] call3::return#2 = call3::return#0 @@ -614,7 +614,7 @@ main: { call3_from___b3: // [38] phi call3::param2#2 = 4 [phi:main::@3->call3#0] -- vbuaa=vbuc1 lda #4 - // [38] phi call3::param1#2 = 3 [phi:main::@3->call3#1] -- call_phi_near + // [38] phi call3::param1#2 = 3 [phi:main::@3->call3#1] -- vbuxx=vbuc1 ldx #3 jsr call3 // [25] call3::return#3 = call3::return#0 @@ -828,7 +828,7 @@ main: { // [34] phi from main to call2 [phi:main->call2] // [34] phi call2::param2#2 = 2 [phi:main->call2#0] -- vbuaa=vbuc1 lda #2 - // [34] phi call2::param1#2 = 1 [phi:main->call2#1] -- call_phi_near + // [34] phi call2::param1#2 = 1 [phi:main->call2#1] -- vbuxx=vbuc1 ldx #1 jsr call2 // call2(1,2) @@ -844,7 +844,7 @@ main: { // [34] phi from main::@1 to call2 [phi:main::@1->call2] // [34] phi call2::param2#2 = 4 [phi:main::@1->call2#0] -- vbuaa=vbuc1 lda #4 - // [34] phi call2::param1#2 = 3 [phi:main::@1->call2#1] -- call_phi_near + // [34] phi call2::param1#2 = 3 [phi:main::@1->call2#1] -- vbuxx=vbuc1 ldx #3 jsr call2 // call2(3,4) @@ -860,7 +860,7 @@ main: { // [38] phi from main::@2 to call3 [phi:main::@2->call3] // [38] phi call3::param2#2 = 2 [phi:main::@2->call3#0] -- vbuaa=vbuc1 lda #2 - // [38] phi call3::param1#2 = 1 [phi:main::@2->call3#1] -- call_phi_near + // [38] phi call3::param1#2 = 1 [phi:main::@2->call3#1] -- vbuxx=vbuc1 ldx #1 jsr call3 // call3(1,2) @@ -875,7 +875,7 @@ main: { // [38] phi from main::@3 to call3 [phi:main::@3->call3] // [38] phi call3::param2#2 = 4 [phi:main::@3->call3#0] -- vbuaa=vbuc1 lda #4 - // [38] phi call3::param1#2 = 3 [phi:main::@3->call3#1] -- call_phi_near + // [38] phi call3::param1#2 = 3 [phi:main::@3->call3#1] -- vbuxx=vbuc1 ldx #3 jsr call3 // call3(3,4) diff --git a/src/test/ref/flipper-rex2.log b/src/test/ref/flipper-rex2.log index d38c416eb..317adebed 100644 --- a/src/test/ref/flipper-rex2.log +++ b/src/test/ref/flipper-rex2.log @@ -718,7 +718,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call prepare - // [11] phi from main to prepare [phi:main->prepare] -- call_phi_near + // [11] phi from main to prepare [phi:main->prepare] prepare_from_main: jsr prepare // [2] phi from main main::@5 to main::@1 [phi:main/main::@5->main::@1] @@ -759,7 +759,7 @@ main: { // main::@4 __b4: // [8] call flip - // [17] phi from main::@4 to flip [phi:main::@4->flip] -- call_phi_near + // [17] phi from main::@4 to flip [phi:main::@4->flip] flip_from___b4: jsr flip // [9] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -768,7 +768,7 @@ main: { // main::@5 __b5: // [10] call plot - // [33] phi from main::@5 to plot [phi:main::@5->plot] -- call_phi_near + // [33] phi from main::@5 to plot [phi:main::@5->plot] plot_from___b5: jsr plot jmp __b1_from___b5 @@ -1111,7 +1111,7 @@ Score: 83294 main: { // prepare() // [1] call prepare - // [11] phi from main to prepare [phi:main->prepare] -- call_phi_near + // [11] phi from main to prepare [phi:main->prepare] jsr prepare // [2] phi from main main::@5 to main::@1 [phi:main/main::@5->main::@1] __b3: @@ -1144,13 +1144,13 @@ main: { // main::@4 // flip() // [8] call flip - // [17] phi from main::@4 to flip [phi:main::@4->flip] -- call_phi_near + // [17] phi from main::@4 to flip [phi:main::@4->flip] jsr flip // [9] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 // plot() // [10] call plot - // [33] phi from main::@5 to plot [phi:main::@5->plot] -- call_phi_near + // [33] phi from main::@5 to plot [phi:main::@5->plot] jsr plot jmp __b3 } diff --git a/src/test/ref/font-hex-show.log b/src/test/ref/font-hex-show.log index 8ee442525..d0df97974 100644 --- a/src/test/ref/font-hex-show.log +++ b/src/test/ref/font-hex-show.log @@ -696,7 +696,7 @@ main: { lda #toD0181_return sta D018 // [3] call init_font_hex - // [9] phi from main::@2 to init_font_hex [phi:main::@2->init_font_hex] -- call_phi_near + // [9] phi from main::@2 to init_font_hex [phi:main::@2->init_font_hex] init_font_hex_from___b2: jsr init_font_hex // [4] phi from main::@2 to main::@1 [phi:main::@2->main::@1] @@ -1026,7 +1026,7 @@ main: { sta D018 // init_font_hex(CHARSET) // [3] call init_font_hex - // [9] phi from main::@2 to init_font_hex [phi:main::@2->init_font_hex] -- call_phi_near + // [9] phi from main::@2 to init_font_hex [phi:main::@2->init_font_hex] jsr init_font_hex // [4] phi from main::@2 to main::@1 [phi:main::@2->main::@1] // [4] phi main::c#2 = 0 [phi:main::@2->main::@1#0] -- vbuxx=vbuc1 diff --git a/src/test/ref/fragment-synth.log b/src/test/ref/fragment-synth.log index 0c290d92f..408bca681 100644 --- a/src/test/ref/fragment-synth.log +++ b/src/test/ref/fragment-synth.log @@ -311,7 +311,7 @@ main: { sta.z fct.z lda #>$450 sta.z fct.z+1 - // [11] phi fct::x#2 = $aa [phi:main->fct#1] -- call_phi_near + // [11] phi fct::x#2 = $aa [phi:main->fct#1] -- vbuxx=vbuc1 ldx #$aa jsr fct // [3] fct::return#0 = fct::return#2 @@ -329,7 +329,7 @@ main: { sta.z fct.z lda #>$450+1 sta.z fct.z+1 - // [11] phi fct::x#2 = $55 [phi:main::@1->fct#1] -- call_phi_near + // [11] phi fct::x#2 = $55 [phi:main::@1->fct#1] -- vbuxx=vbuc1 ldx #$55 jsr fct // [7] fct::return#1 = fct::return#2 @@ -440,7 +440,7 @@ main: { sta.z fct.z lda #>$450 sta.z fct.z+1 - // [11] phi fct::x#2 = $aa [phi:main->fct#1] -- call_phi_near + // [11] phi fct::x#2 = $aa [phi:main->fct#1] -- vbuxx=vbuc1 ldx #$aa jsr fct // byte a1 = fct(x, z) @@ -458,7 +458,7 @@ main: { sta.z fct.z lda #>$450+1 sta.z fct.z+1 - // [11] phi fct::x#2 = $55 [phi:main::@1->fct#1] -- call_phi_near + // [11] phi fct::x#2 = $55 [phi:main::@1->fct#1] -- vbuxx=vbuc1 ldx #$55 jsr fct // byte a2 = fct(x, z) diff --git a/src/test/ref/fragment-variations.log b/src/test/ref/fragment-variations.log index c97d8efa9..ad1a43be9 100644 --- a/src/test/ref/fragment-variations.log +++ b/src/test/ref/fragment-variations.log @@ -298,7 +298,7 @@ main: { sta.z mul16u.a lda #>$a sta.z mul16u.a+1 - // [10] phi mul16u::b#2 = $a [phi:main->mul16u#1] -- call_phi_near + // [10] phi mul16u::b#2 = $a [phi:main->mul16u#1] -- vwuz1=vwuc1 lda #<$a sta.z mul16u.b lda #>$a @@ -326,7 +326,7 @@ main: { sta.z mul16u.a lda #>$3e8 sta.z mul16u.a+1 - // [10] phi mul16u::b#2 = $3e8 [phi:main::@1->mul16u#1] -- call_phi_near + // [10] phi mul16u::b#2 = $3e8 [phi:main::@1->mul16u#1] -- vwuz1=vwuc1 lda #<$3e8 sta.z mul16u.b lda #>$3e8 @@ -458,7 +458,7 @@ main: { sta.z mul16u.a lda #>$a sta.z mul16u.a+1 - // [10] phi mul16u::b#2 = $a [phi:main->mul16u#1] -- call_phi_near + // [10] phi mul16u::b#2 = $a [phi:main->mul16u#1] -- vwuz1=vwuc1 lda #<$a sta.z mul16u.b lda #>$a @@ -486,7 +486,7 @@ main: { sta.z mul16u.a lda #>$3e8 sta.z mul16u.a+1 - // [10] phi mul16u::b#2 = $3e8 [phi:main::@1->mul16u#1] -- call_phi_near + // [10] phi mul16u::b#2 = $3e8 [phi:main::@1->mul16u#1] -- vwuz1=vwuc1 lda #<$3e8 sta.z mul16u.b lda #>$3e8 diff --git a/src/test/ref/function-pointer-advanced-1.log b/src/test/ref/function-pointer-advanced-1.log index 1692d8760..73b175d3d 100644 --- a/src/test/ref/function-pointer-advanced-1.log +++ b/src/test/ref/function-pointer-advanced-1.log @@ -1256,7 +1256,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [29] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [29] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -1409,7 +1409,7 @@ main: { jmp __b3 // main::@3 __b3: - // [33] call ln -- call_phi_near + // [33] call ln jsr ln // [34] phi from main::@3 to main::@6 [phi:main::@3->main::@6] __b6_from___b3: @@ -1419,7 +1419,7 @@ main: { // [35] call exec // [56] phi from main::@6 to exec [phi:main::@6->exec] exec_from___b6: - // [56] phi exec::collect#10 = &sum [phi:main::@6->exec#0] -- call_phi_near + // [56] phi exec::collect#10 = &sum [phi:main::@6->exec#0] -- pprz1=pprc1 lda #sum @@ -1430,7 +1430,7 @@ main: { jmp __b7 // main::@7 __b7: - // [37] call ln -- call_phi_near + // [37] call ln jsr ln // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] __b8_from___b7: @@ -1440,7 +1440,7 @@ main: { // [39] call exec // [56] phi from main::@8 to exec [phi:main::@8->exec] exec_from___b8: - // [56] phi exec::collect#10 = &min [phi:main::@8->exec#0] -- call_phi_near + // [56] phi exec::collect#10 = &min [phi:main::@8->exec#0] -- pprz1=pprc1 lda #min @@ -1451,7 +1451,7 @@ main: { jmp __b9 // main::@9 __b9: - // [41] call ln -- call_phi_near + // [41] call ln jsr ln // [42] phi from main::@9 to main::@10 [phi:main::@9->main::@10] __b10_from___b9: @@ -1461,7 +1461,7 @@ main: { // [43] call exec // [56] phi from main::@10 to exec [phi:main::@10->exec] exec_from___b10: - // [56] phi exec::collect#10 = &max [phi:main::@10->exec#0] -- call_phi_near + // [56] phi exec::collect#10 = &max [phi:main::@10->exec#0] -- pprz1=pprc1 lda #max @@ -1472,7 +1472,7 @@ main: { jmp __b11 // main::@11 __b11: - // [45] call ln -- call_phi_near + // [45] call ln jsr ln // [46] phi from main::@11 to main::@12 [phi:main::@11->main::@12] __b12_from___b11: @@ -1482,7 +1482,7 @@ main: { // [47] call exec // [56] phi from main::@12 to exec [phi:main::@12->exec] exec_from___b12: - // [56] phi exec::collect#10 = &xor [phi:main::@12->exec#0] -- call_phi_near + // [56] phi exec::collect#10 = &xor [phi:main::@12->exec#0] -- pprz1=pprc1 lda #xor @@ -1503,7 +1503,7 @@ main: { // [76] phi from main::@2 to print [phi:main::@2->print] print_from___b2: // [76] phi idx#53 = idx#54 [phi:main::@2->print#0] -- register_copy - // [76] phi print::i#2 = print::i#0 [phi:main::@2->print#1] -- call_phi_near + // [76] phi print::i#2 = print::i#0 [phi:main::@2->print#1] -- register_copy jsr print // [51] phi from main::@2 to main::@4 [phi:main::@2->main::@4] __b4_from___b2: @@ -1514,7 +1514,7 @@ main: { // [84] phi from main::@4 to cout [phi:main::@4->cout] cout_from___b4: // [84] phi idx#27 = idx#0 [phi:main::@4->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:main::@4->cout#1] -- call_phi_near + // [84] phi cout::c#7 = ' ' [phi:main::@4->cout#1] -- vbuxx=vbuc1 ldx #' ' jsr cout jmp __b5 @@ -1556,7 +1556,7 @@ exec: { // [84] phi idx#27 = 0 [phi:exec->cout#0] -- vbuz1=vbuc1 lda #0 sta.z idx - // [84] phi cout::c#7 = ' ' [phi:exec->cout#1] -- call_phi_near + // [84] phi cout::c#7 = ' ' [phi:exec->cout#1] -- vbuxx=vbuc1 ldx #' ' jsr cout // [58] phi from exec to exec::@4 [phi:exec->exec::@4] @@ -1568,7 +1568,7 @@ exec: { // [84] phi from exec::@4 to cout [phi:exec::@4->cout] cout_from___b4: // [84] phi idx#27 = idx#0 [phi:exec::@4->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:exec::@4->cout#1] -- call_phi_near + // [84] phi cout::c#7 = ' ' [phi:exec::@4->cout#1] -- vbuxx=vbuc1 ldx #' ' jsr cout // [60] phi from exec::@4 to exec::@5 [phi:exec::@4->exec::@5] @@ -1580,7 +1580,7 @@ exec: { // [84] phi from exec::@5 to cout [phi:exec::@5->cout] cout_from___b5: // [84] phi idx#27 = idx#0 [phi:exec::@5->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:exec::@5->cout#1] -- call_phi_near + // [84] phi cout::c#7 = ' ' [phi:exec::@5->cout#1] -- vbuxx=vbuc1 ldx #' ' jsr cout jmp __b6 @@ -1631,7 +1631,7 @@ exec: { // [76] phi from exec::@3 to print [phi:exec::@3->print] print_from___b3: // [76] phi idx#53 = idx#0 [phi:exec::@3->print#0] -- register_copy - // [76] phi print::i#2 = print::i#1 [phi:exec::@3->print#1] -- call_phi_near + // [76] phi print::i#2 = print::i#1 [phi:exec::@3->print#1] -- register_copy jsr print // [73] phi from exec::@3 to exec::@7 [phi:exec::@3->exec::@7] __b7_from___b3: @@ -1642,7 +1642,7 @@ exec: { // [84] phi from exec::@7 to cout [phi:exec::@7->cout] cout_from___b7: // [84] phi idx#27 = idx#0 [phi:exec::@7->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:exec::@7->cout#1] -- call_phi_near + // [84] phi cout::c#7 = ' ' [phi:exec::@7->cout#1] -- vbuxx=vbuc1 ldx #' ' jsr cout jmp __b8 @@ -1676,7 +1676,7 @@ print: { // [84] phi from print to cout [phi:print->cout] cout_from_print: // [84] phi idx#27 = idx#53 [phi:print->cout#0] -- register_copy - // [84] phi cout::c#7 = cout::c#0 [phi:print->cout#1] -- call_phi_near + // [84] phi cout::c#7 = cout::c#0 [phi:print->cout#1] -- register_copy jsr cout jmp __b1 // print::@1 @@ -1691,7 +1691,7 @@ print: { // [84] phi from print::@1 to cout [phi:print::@1->cout] cout_from___b1: // [84] phi idx#27 = idx#0 [phi:print::@1->cout#0] -- register_copy - // [84] phi cout::c#7 = cout::c#1 [phi:print::@1->cout#1] -- call_phi_near + // [84] phi cout::c#7 = cout::c#1 [phi:print::@1->cout#1] -- register_copy jsr cout jmp __breturn // print::@return @@ -1965,7 +1965,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [29] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [29] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return @@ -2113,14 +2113,14 @@ main: { // [32] phi from main::@1 to main::@3 [phi:main::@1->main::@3] // main::@3 // ln() - // [33] call ln -- call_phi_near + // [33] call ln jsr ln // [34] phi from main::@3 to main::@6 [phi:main::@3->main::@6] // main::@6 // exec(&sum) // [35] call exec // [56] phi from main::@6 to exec [phi:main::@6->exec] - // [56] phi exec::collect#10 = &sum [phi:main::@6->exec#0] -- call_phi_near + // [56] phi exec::collect#10 = &sum [phi:main::@6->exec#0] -- pprz1=pprc1 lda #sum @@ -2129,14 +2129,14 @@ main: { // [36] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 // ln() - // [37] call ln -- call_phi_near + // [37] call ln jsr ln // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 // exec(&min) // [39] call exec // [56] phi from main::@8 to exec [phi:main::@8->exec] - // [56] phi exec::collect#10 = &min [phi:main::@8->exec#0] -- call_phi_near + // [56] phi exec::collect#10 = &min [phi:main::@8->exec#0] -- pprz1=pprc1 lda #min @@ -2145,14 +2145,14 @@ main: { // [40] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 // ln() - // [41] call ln -- call_phi_near + // [41] call ln jsr ln // [42] phi from main::@9 to main::@10 [phi:main::@9->main::@10] // main::@10 // exec(&max) // [43] call exec // [56] phi from main::@10 to exec [phi:main::@10->exec] - // [56] phi exec::collect#10 = &max [phi:main::@10->exec#0] -- call_phi_near + // [56] phi exec::collect#10 = &max [phi:main::@10->exec#0] -- pprz1=pprc1 lda #max @@ -2161,14 +2161,14 @@ main: { // [44] phi from main::@10 to main::@11 [phi:main::@10->main::@11] // main::@11 // ln() - // [45] call ln -- call_phi_near + // [45] call ln jsr ln // [46] phi from main::@11 to main::@12 [phi:main::@11->main::@12] // main::@12 // exec(&xor) // [47] call exec // [56] phi from main::@12 to exec [phi:main::@12->exec] - // [56] phi exec::collect#10 = &xor [phi:main::@12->exec#0] -- call_phi_near + // [56] phi exec::collect#10 = &xor [phi:main::@12->exec#0] -- pprz1=pprc1 lda #xor @@ -2188,7 +2188,7 @@ main: { // [50] call print // [76] phi from main::@2 to print [phi:main::@2->print] // [76] phi idx#53 = idx#54 [phi:main::@2->print#0] -- register_copy - // [76] phi print::i#2 = print::i#0 [phi:main::@2->print#1] -- call_phi_near + // [76] phi print::i#2 = print::i#0 [phi:main::@2->print#1] -- register_copy jsr print // [51] phi from main::@2 to main::@4 [phi:main::@2->main::@4] // main::@4 @@ -2196,7 +2196,7 @@ main: { // [52] call cout // [84] phi from main::@4 to cout [phi:main::@4->cout] // [84] phi idx#27 = idx#0 [phi:main::@4->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:main::@4->cout#1] -- call_phi_near + // [84] phi cout::c#7 = ' ' [phi:main::@4->cout#1] -- vbuxx=vbuc1 ldx #' ' jsr cout // main::@5 @@ -2236,7 +2236,7 @@ exec: { // [84] phi idx#27 = 0 [phi:exec->cout#0] -- vbuz1=vbuc1 lda #0 sta.z idx - // [84] phi cout::c#7 = ' ' [phi:exec->cout#1] -- call_phi_near + // [84] phi cout::c#7 = ' ' [phi:exec->cout#1] -- vbuxx=vbuc1 ldx #' ' jsr cout // [58] phi from exec to exec::@4 [phi:exec->exec::@4] @@ -2245,7 +2245,7 @@ exec: { // [59] call cout // [84] phi from exec::@4 to cout [phi:exec::@4->cout] // [84] phi idx#27 = idx#0 [phi:exec::@4->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:exec::@4->cout#1] -- call_phi_near + // [84] phi cout::c#7 = ' ' [phi:exec::@4->cout#1] -- vbuxx=vbuc1 ldx #' ' jsr cout // [60] phi from exec::@4 to exec::@5 [phi:exec::@4->exec::@5] @@ -2254,7 +2254,7 @@ exec: { // [61] call cout // [84] phi from exec::@5 to cout [phi:exec::@5->cout] // [84] phi idx#27 = idx#0 [phi:exec::@5->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:exec::@5->cout#1] -- call_phi_near + // [84] phi cout::c#7 = ' ' [phi:exec::@5->cout#1] -- vbuxx=vbuc1 ldx #' ' jsr cout // exec::@6 @@ -2302,7 +2302,7 @@ exec: { // [72] call print // [76] phi from exec::@3 to print [phi:exec::@3->print] // [76] phi idx#53 = idx#0 [phi:exec::@3->print#0] -- register_copy - // [76] phi print::i#2 = print::i#1 [phi:exec::@3->print#1] -- call_phi_near + // [76] phi print::i#2 = print::i#1 [phi:exec::@3->print#1] -- register_copy jsr print // [73] phi from exec::@3 to exec::@7 [phi:exec::@3->exec::@7] // exec::@7 @@ -2310,7 +2310,7 @@ exec: { // [74] call cout // [84] phi from exec::@7 to cout [phi:exec::@7->cout] // [84] phi idx#27 = idx#0 [phi:exec::@7->cout#0] -- register_copy - // [84] phi cout::c#7 = ' ' [phi:exec::@7->cout#1] -- call_phi_near + // [84] phi cout::c#7 = ' ' [phi:exec::@7->cout#1] -- vbuxx=vbuc1 ldx #' ' jsr cout // exec::@8 @@ -2343,7 +2343,7 @@ print: { // [79] call cout // [84] phi from print to cout [phi:print->cout] // [84] phi idx#27 = idx#53 [phi:print->cout#0] -- register_copy - // [84] phi cout::c#7 = cout::c#0 [phi:print->cout#1] -- call_phi_near + // [84] phi cout::c#7 = cout::c#0 [phi:print->cout#1] -- register_copy jsr cout // print::@1 // i&0x0f @@ -2357,7 +2357,7 @@ print: { // [82] call cout // [84] phi from print::@1 to cout [phi:print::@1->cout] // [84] phi idx#27 = idx#0 [phi:print::@1->cout#0] -- register_copy - // [84] phi cout::c#7 = cout::c#1 [phi:print::@1->cout#1] -- call_phi_near + // [84] phi cout::c#7 = cout::c#1 [phi:print::@1->cout#1] -- register_copy jsr cout // print::@return // } diff --git a/src/test/ref/function-pointer-noarg-call-10.log b/src/test/ref/function-pointer-noarg-call-10.log index 1d2198ef8..e0cc8628d 100644 --- a/src/test/ref/function-pointer-noarg-call-10.log +++ b/src/test/ref/function-pointer-noarg-call-10.log @@ -400,7 +400,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [11] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -414,7 +414,7 @@ world: { // [6] call print // [16] phi from world to print [phi:world->print] print_from_world: - // [16] phi print::msg#3 = world::msg [phi:world->print#0] -- call_phi_near + // [16] phi print::msg#3 = world::msg [phi:world->print#0] -- pbuz1=pbuc1 lda #msg @@ -435,7 +435,7 @@ hello: { // [9] call print // [16] phi from hello to print [phi:hello->print] print_from_hello: - // [16] phi print::msg#3 = hello::msg [phi:hello->print#0] -- call_phi_near + // [16] phi print::msg#3 = hello::msg [phi:hello->print#0] -- pbuz1=pbuc1 lda #msg @@ -456,7 +456,7 @@ main: { // [12] call do10 // [23] phi from main to do10 [phi:main->do10] do10_from_main: - // [23] phi do10::fn#3 = &hello [phi:main->do10#0] -- call_phi_near + // [23] phi do10::fn#3 = &hello [phi:main->do10#0] -- pprz1=pprc1 lda #hello @@ -470,7 +470,7 @@ main: { // [14] call do10 // [23] phi from main::@1 to do10 [phi:main::@1->do10] do10_from___b1: - // [23] phi do10::fn#3 = &world [phi:main::@1->do10#0] -- call_phi_near + // [23] phi do10::fn#3 = &world [phi:main::@1->do10#0] -- pprz1=pprc1 lda #world @@ -654,7 +654,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [11] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return @@ -665,7 +665,7 @@ world: { // print("world ") // [6] call print // [16] phi from world to print [phi:world->print] - // [16] phi print::msg#3 = world::msg [phi:world->print#0] -- call_phi_near + // [16] phi print::msg#3 = world::msg [phi:world->print#0] -- pbuz1=pbuc1 lda #msg @@ -685,7 +685,7 @@ hello: { // print("hello ") // [9] call print // [16] phi from hello to print [phi:hello->print] - // [16] phi print::msg#3 = hello::msg [phi:hello->print#0] -- call_phi_near + // [16] phi print::msg#3 = hello::msg [phi:hello->print#0] -- pbuz1=pbuc1 lda #msg @@ -705,7 +705,7 @@ main: { // do10(&hello) // [12] call do10 // [23] phi from main to do10 [phi:main->do10] - // [23] phi do10::fn#3 = &hello [phi:main->do10#0] -- call_phi_near + // [23] phi do10::fn#3 = &hello [phi:main->do10#0] -- pprz1=pprc1 lda #hello @@ -716,7 +716,7 @@ main: { // do10(&world) // [14] call do10 // [23] phi from main::@1 to do10 [phi:main::@1->do10] - // [23] phi do10::fn#3 = &world [phi:main::@1->do10#0] -- call_phi_near + // [23] phi do10::fn#3 = &world [phi:main::@1->do10#0] -- pprz1=pprc1 lda #world diff --git a/src/test/ref/function-pointer-noarg-call-13.log b/src/test/ref/function-pointer-noarg-call-13.log index 34209ef12..8035feb5b 100644 --- a/src/test/ref/function-pointer-noarg-call-13.log +++ b/src/test/ref/function-pointer-noarg-call-13.log @@ -213,7 +213,7 @@ main: { sta.z enableDLI.dliptr lda #>fn1 sta.z enableDLI.dliptr+1 - // [5] call enableDLI -- call_phi_near + // [5] call enableDLI jsr enableDLI jmp __b1 // main::@1 @@ -223,7 +223,7 @@ main: { sta.z enableDLI.dliptr lda #>fn2 sta.z enableDLI.dliptr+1 - // [7] call enableDLI -- call_phi_near + // [7] call enableDLI jsr enableDLI jmp __breturn // main::@return @@ -325,7 +325,7 @@ main: { sta.z enableDLI.dliptr lda #>fn1 sta.z enableDLI.dliptr+1 - // [5] call enableDLI -- call_phi_near + // [5] call enableDLI jsr enableDLI // main::@1 // enableDLI(&fn2) @@ -334,7 +334,7 @@ main: { sta.z enableDLI.dliptr lda #>fn2 sta.z enableDLI.dliptr+1 - // [7] call enableDLI -- call_phi_near + // [7] call enableDLI jsr enableDLI // main::@return // } diff --git a/src/test/ref/function-pointer-noarg-call-14.log b/src/test/ref/function-pointer-noarg-call-14.log index 154ebc78d..da9ae74fb 100644 --- a/src/test/ref/function-pointer-noarg-call-14.log +++ b/src/test/ref/function-pointer-noarg-call-14.log @@ -1541,7 +1541,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -1549,7 +1549,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [33] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [33] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -1563,7 +1563,7 @@ world: { // [10] call printf_str // [38] phi from world to printf_str [phi:world->printf_str] printf_str_from_world: - // [38] phi printf_str::s#4 = world::s [phi:world->printf_str#0] -- call_phi_near + // [38] phi printf_str::s#4 = world::s [phi:world->printf_str#0] -- pbuz1=pbuc1 lda #s @@ -1584,7 +1584,7 @@ hello: { // [13] call printf_str // [38] phi from hello to printf_str [phi:hello->printf_str] printf_str_from_hello: - // [38] phi printf_str::s#4 = hello::s [phi:hello->printf_str#0] -- call_phi_near + // [38] phi printf_str::s#4 = hello::s [phi:hello->printf_str#0] -- pbuz1=pbuc1 lda #s @@ -1627,7 +1627,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [19] gotoxy::y#2 = conio_c64_init::line#2 - // [20] call gotoxy -- call_phi_near + // [20] call gotoxy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -1668,7 +1668,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [29] call cputln -- call_phi_near + // [29] call cputln jsr cputln jmp __breturn // cputc::@return @@ -1680,7 +1680,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [32] call cputln -- call_phi_near + // [32] call cputln jsr cputln jmp __breturn } @@ -1689,7 +1689,7 @@ main: { // [34] call f1 // [67] phi from main to f1 [phi:main->f1] f1_from_main: - // [67] phi f1::fn#2 = &hello [phi:main->f1#0] -- call_phi_near + // [67] phi f1::fn#2 = &hello [phi:main->f1#0] -- pprz1=pprc1 lda #hello @@ -1703,7 +1703,7 @@ main: { // [36] call f1 // [67] phi from main::@1 to f1 [phi:main::@1->f1] f1_from___b1: - // [67] phi f1::fn#2 = &world [phi:main::@1->f1#0] -- call_phi_near + // [67] phi f1::fn#2 = &world [phi:main::@1->f1#0] -- pprz1=pprc1 lda #world @@ -1876,7 +1876,7 @@ cputln: { sta.z conio_cursor_x // [64] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [65] call cscroll -- call_phi_near + // [65] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -1919,7 +1919,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [83] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [83] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -1938,7 +1938,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [83] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [83] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -1954,7 +1954,7 @@ cscroll: { memset_from___b3: // [93] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [93] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [93] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -1970,7 +1970,7 @@ cscroll: { memset_from___b4: // [93] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [93] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [93] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -2381,12 +2381,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [33] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [33] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [8] return @@ -2397,7 +2397,7 @@ world: { // printf("world!") // [10] call printf_str // [38] phi from world to printf_str [phi:world->printf_str] - // [38] phi printf_str::s#4 = world::s [phi:world->printf_str#0] -- call_phi_near + // [38] phi printf_str::s#4 = world::s [phi:world->printf_str#0] -- pbuz1=pbuc1 lda #s @@ -2417,7 +2417,7 @@ hello: { // printf("hello ") // [13] call printf_str // [38] phi from hello to printf_str [phi:hello->printf_str] - // [38] phi printf_str::s#4 = hello::s [phi:hello->printf_str#0] -- call_phi_near + // [38] phi printf_str::s#4 = hello::s [phi:hello->printf_str#0] -- pbuz1=pbuc1 lda #s @@ -2455,7 +2455,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [19] gotoxy::y#2 = conio_c64_init::line#2 - // [20] call gotoxy -- call_phi_near + // [20] call gotoxy jsr gotoxy // conio_c64_init::@return // } @@ -2494,7 +2494,7 @@ cputc: { // [28] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [29] call cputln -- call_phi_near + // [29] call cputln jsr cputln // cputc::@return __breturn: @@ -2505,7 +2505,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [32] call cputln -- call_phi_near + // [32] call cputln jsr cputln rts } @@ -2514,7 +2514,7 @@ main: { // f1(&hello) // [34] call f1 // [67] phi from main to f1 [phi:main->f1] - // [67] phi f1::fn#2 = &hello [phi:main->f1#0] -- call_phi_near + // [67] phi f1::fn#2 = &hello [phi:main->f1#0] -- pprz1=pprc1 lda #hello @@ -2525,7 +2525,7 @@ main: { // f1(&world) // [36] call f1 // [67] phi from main::@1 to f1 [phi:main::@1->f1] - // [67] phi f1::fn#2 = &world [phi:main::@1->f1#0] -- call_phi_near + // [67] phi f1::fn#2 = &world [phi:main::@1->f1#0] -- pprz1=pprc1 lda #world @@ -2698,7 +2698,7 @@ cputln: { // [64] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [65] call cscroll -- call_phi_near + // [65] call cscroll jsr cscroll // cputln::@return // } @@ -2738,7 +2738,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [83] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [83] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -2754,7 +2754,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [83] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [83] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -2767,7 +2767,7 @@ cscroll: { // [93] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [93] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [93] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [93] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -2780,7 +2780,7 @@ cscroll: { // [93] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [93] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [93] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [93] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/function-pointer-noarg-call-3.log b/src/test/ref/function-pointer-noarg-call-3.log index 293123223..1aff2dbc6 100644 --- a/src/test/ref/function-pointer-noarg-call-3.log +++ b/src/test/ref/function-pointer-noarg-call-3.log @@ -334,7 +334,7 @@ main: { inc.z i // [7] getfn::b#0 = main::i#1 -- vbuaa=vbuz1 lda.z i - // [8] call getfn -- call_phi_near + // [8] call getfn jsr getfn // [9] getfn::return#0 = getfn::return#3 jmp __b3 @@ -495,7 +495,7 @@ main: { // getfn(++i) // [7] getfn::b#0 = main::i#1 -- vbuaa=vbuz1 lda.z i - // [8] call getfn -- call_phi_near + // [8] call getfn jsr getfn // [9] getfn::return#0 = getfn::return#3 // main::@3 diff --git a/src/test/ref/function-pointer-noarg-call-7.log b/src/test/ref/function-pointer-noarg-call-7.log index 6fd6ebde6..2cf1501c4 100644 --- a/src/test/ref/function-pointer-noarg-call-7.log +++ b/src/test/ref/function-pointer-noarg-call-7.log @@ -307,7 +307,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [12] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [12] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -350,7 +350,7 @@ hello: { // main main: { // [13] call do10 - // [15] phi from main to do10 [phi:main->do10] -- call_phi_near + // [15] phi from main to do10 [phi:main->do10] do10_from_main: jsr do10 jmp __breturn @@ -479,7 +479,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [12] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [12] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return @@ -518,7 +518,7 @@ hello: { main: { // do10(f) // [13] call do10 - // [15] phi from main to do10 [phi:main->do10] -- call_phi_near + // [15] phi from main to do10 [phi:main->do10] jsr do10 // main::@return // } diff --git a/src/test/ref/function-pointer-noarg-call-8.log b/src/test/ref/function-pointer-noarg-call-8.log index 339af3fa2..c5d6cde97 100644 --- a/src/test/ref/function-pointer-noarg-call-8.log +++ b/src/test/ref/function-pointer-noarg-call-8.log @@ -341,7 +341,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [4] call main -- call_phi_near + // [4] call main jsr main jmp __breturn // __start::@return @@ -388,7 +388,7 @@ main: { lda #>msg1 sta.z msg+1 // [14] call do10 - // [18] phi from main to do10 [phi:main->do10] -- call_phi_near + // [18] phi from main to do10 [phi:main->do10] do10_from_main: jsr do10 jmp __b1 @@ -400,7 +400,7 @@ main: { lda #>msg2 sta.z msg+1 // [16] call do10 - // [18] phi from main::@1 to do10 [phi:main::@1->do10] -- call_phi_near + // [18] phi from main::@1 to do10 [phi:main::@1->do10] do10_from___b1: jsr do10 jmp __breturn @@ -543,7 +543,7 @@ __start: { sta.z idx // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [4] call main -- call_phi_near + // [4] call main jsr main // __start::@return // [5] return @@ -588,7 +588,7 @@ main: { sta.z msg+1 // do10(f) // [14] call do10 - // [18] phi from main to do10 [phi:main->do10] -- call_phi_near + // [18] phi from main to do10 [phi:main->do10] jsr do10 // main::@1 // msg = msg2 @@ -599,7 +599,7 @@ main: { sta.z msg+1 // do10(f) // [16] call do10 - // [18] phi from main::@1 to do10 [phi:main::@1->do10] -- call_phi_near + // [18] phi from main::@1 to do10 [phi:main::@1->do10] jsr do10 // main::@return // } diff --git a/src/test/ref/function-pointer-noarg-call-9.log b/src/test/ref/function-pointer-noarg-call-9.log index 7547a463a..e11a1a25c 100644 --- a/src/test/ref/function-pointer-noarg-call-9.log +++ b/src/test/ref/function-pointer-noarg-call-9.log @@ -174,7 +174,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [7] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [7] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -280,7 +280,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [7] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [7] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return diff --git a/src/test/ref/function-pointer-param-workaround.log b/src/test/ref/function-pointer-param-workaround.log index e3173e1e5..98cb9eeeb 100644 --- a/src/test/ref/function-pointer-param-workaround.log +++ b/src/test/ref/function-pointer-param-workaround.log @@ -550,7 +550,7 @@ __start: { // __start::@1 __b1: // [4] call main - // [32] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [32] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -880,7 +880,7 @@ __start: { // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [4] call main - // [32] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [32] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [5] return diff --git a/src/test/ref/function-pointer-problem-1.log b/src/test/ref/function-pointer-problem-1.log index 485a6a16d..33a272696 100644 --- a/src/test/ref/function-pointer-problem-1.log +++ b/src/test/ref/function-pointer-problem-1.log @@ -167,7 +167,7 @@ main: { sta.z enableDLI.dliptr lda #>fn1 sta.z enableDLI.dliptr+1 - // [3] call enableDLI -- call_phi_near + // [3] call enableDLI jsr enableDLI jmp __breturn // main::@return @@ -253,7 +253,7 @@ main: { sta.z enableDLI.dliptr lda #>fn1 sta.z enableDLI.dliptr+1 - // [3] call enableDLI -- call_phi_near + // [3] call enableDLI jsr enableDLI // main::@return // } diff --git a/src/test/ref/function-pointer-return-2.log b/src/test/ref/function-pointer-return-2.log index 87123a32f..3016e22f8 100644 --- a/src/test/ref/function-pointer-return-2.log +++ b/src/test/ref/function-pointer-return-2.log @@ -267,7 +267,7 @@ main: { // Create pointer to function without & // [11] phi from main::@1 to set_border [phi:main::@1->set_border] set_border_from___b1: - // [11] phi set_border::fn#2 = &fn1 [phi:main::@1->set_border#0] -- call_phi_near + // [11] phi set_border::fn#2 = &fn1 [phi:main::@1->set_border#0] -- pprz1=pprc1 lda #fn1 @@ -281,7 +281,7 @@ main: { // [4] call set_border // [11] phi from main::@2 to set_border [phi:main::@2->set_border] set_border_from___b2: - // [11] phi set_border::fn#2 = &fn2 [phi:main::@2->set_border#0] -- call_phi_near + // [11] phi set_border::fn#2 = &fn2 [phi:main::@2->set_border#0] -- pprz1=pprc1 lda #fn2 @@ -418,7 +418,7 @@ main: { // [2] call set_border // Create pointer to function without & // [11] phi from main::@1 to set_border [phi:main::@1->set_border] - // [11] phi set_border::fn#2 = &fn1 [phi:main::@1->set_border#0] -- call_phi_near + // [11] phi set_border::fn#2 = &fn1 [phi:main::@1->set_border#0] -- pprz1=pprc1 lda #fn1 @@ -429,7 +429,7 @@ main: { // set_border(fn2) // [4] call set_border // [11] phi from main::@2 to set_border [phi:main::@2->set_border] - // [11] phi set_border::fn#2 = &fn2 [phi:main::@2->set_border#0] -- call_phi_near + // [11] phi set_border::fn#2 = &fn2 [phi:main::@2->set_border#0] -- pprz1=pprc1 lda #fn2 diff --git a/src/test/ref/function-pointer-return-3.log b/src/test/ref/function-pointer-return-3.log index 0e4451486..e4f571d97 100644 --- a/src/test/ref/function-pointer-return-3.log +++ b/src/test/ref/function-pointer-return-3.log @@ -384,7 +384,7 @@ main: { lda #>tasks adc #0 sta.z run.task+1 - // [6] call run -- call_phi_near + // [6] call run jsr run jmp __b3 // main::@3 @@ -569,7 +569,7 @@ main: { lda #>tasks adc #0 sta.z run.task+1 - // [6] call run -- call_phi_near + // [6] call run jsr run // main::@3 // for(char i=0; i < sizeof(tasks)/sizeof(struct Task); i++) diff --git a/src/test/ref/global-label-problem.log b/src/test/ref/global-label-problem.log index 64d27f2cf..630fe9e72 100644 --- a/src/test/ref/global-label-problem.log +++ b/src/test/ref/global-label-problem.log @@ -344,7 +344,7 @@ main: { print_from_main: // [7] phi idx#27 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [7] phi print::msg#7 = msg [phi:main->print#1] -- call_phi_near + // [7] phi print::msg#7 = msg [phi:main->print#1] -- pbuz1=pbuc1 lda #msg @@ -359,7 +359,7 @@ main: { // [7] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [7] phi idx#27 = idx#19 [phi:main::@1->print#0] -- register_copy - // [7] phi print::msg#7 = main::msg1 [phi:main::@1->print#1] -- call_phi_near + // [7] phi print::msg#7 = main::msg1 [phi:main::@1->print#1] -- pbuz1=pbuc1 lda #msg1 @@ -371,7 +371,7 @@ main: { // main::@2 __b2: // [5] call print1 - // [14] phi from main::@2 to print1 [phi:main::@2->print1] -- call_phi_near + // [14] phi from main::@2 to print1 [phi:main::@2->print1] print1_from___b2: jsr print1 jmp __breturn @@ -427,7 +427,7 @@ print1: { // [7] phi from print1 to print [phi:print1->print] print_from_print1: // [7] phi idx#27 = idx#19 [phi:print1->print#0] -- register_copy - // [7] phi print::msg#7 = print1::msg [phi:print1->print#1] -- call_phi_near + // [7] phi print::msg#7 = print1::msg [phi:print1->print#1] -- pbuz1=pbuc1 lda #msg @@ -442,7 +442,7 @@ print1: { // [7] phi from print1::@1 to print [phi:print1::@1->print] print_from___b1: // [7] phi idx#27 = idx#19 [phi:print1::@1->print#0] -- register_copy - // [7] phi print::msg#7 = msg [phi:print1::@1->print#1] -- call_phi_near + // [7] phi print::msg#7 = msg [phi:print1::@1->print#1] -- pbuz1=pbuc1 lda #<@msg sta.z print.msg lda #>@msg @@ -537,7 +537,7 @@ main: { // [7] phi from main to print [phi:main->print] // [7] phi idx#27 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [7] phi print::msg#7 = msg [phi:main->print#1] -- call_phi_near + // [7] phi print::msg#7 = msg [phi:main->print#1] -- pbuz1=pbuc1 lda #msg @@ -549,7 +549,7 @@ main: { // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] // [7] phi idx#27 = idx#19 [phi:main::@1->print#0] -- register_copy - // [7] phi print::msg#7 = main::msg1 [phi:main::@1->print#1] -- call_phi_near + // [7] phi print::msg#7 = main::msg1 [phi:main::@1->print#1] -- pbuz1=pbuc1 lda #msg1 @@ -559,7 +559,7 @@ main: { // main::@2 // print1() // [5] call print1 - // [14] phi from main::@2 to print1 [phi:main::@2->print1] -- call_phi_near + // [14] phi from main::@2 to print1 [phi:main::@2->print1] jsr print1 // main::@return // } @@ -612,7 +612,7 @@ print1: { // [15] call print // [7] phi from print1 to print [phi:print1->print] // [7] phi idx#27 = idx#19 [phi:print1->print#0] -- register_copy - // [7] phi print::msg#7 = print1::msg [phi:print1->print#1] -- call_phi_near + // [7] phi print::msg#7 = print1::msg [phi:print1->print#1] -- pbuz1=pbuc1 lda #msg @@ -624,7 +624,7 @@ print1: { // [17] call print // [7] phi from print1::@1 to print [phi:print1::@1->print] // [7] phi idx#27 = idx#19 [phi:print1::@1->print#0] -- register_copy - // [7] phi print::msg#7 = msg [phi:print1::@1->print#1] -- call_phi_near + // [7] phi print::msg#7 = msg [phi:print1::@1->print#1] -- pbuz1=pbuc1 lda #<@msg sta.z print.msg lda #>@msg diff --git a/src/test/ref/global-pc-multiple.log b/src/test/ref/global-pc-multiple.log index 5587b71f0..f2c01c47e 100644 --- a/src/test/ref/global-pc-multiple.log +++ b/src/test/ref/global-pc-multiple.log @@ -174,7 +174,7 @@ main: { jmp __b2 // main::@2 __b2: - // [4] call incScreen -- call_phi_near + // [4] call incScreen jsr incScreen jmp __b1 } @@ -252,7 +252,7 @@ main: { // main::@2 __b2: // incScreen() - // [4] call incScreen -- call_phi_near + // [4] call incScreen jsr incScreen jmp __b1 } diff --git a/src/test/ref/helloworld2.log b/src/test/ref/helloworld2.log index acd112cb5..d80d75484 100644 --- a/src/test/ref/helloworld2.log +++ b/src/test/ref/helloworld2.log @@ -260,7 +260,7 @@ main: { // [1] call print2 // [5] phi from main to print2 [phi:main->print2] print2_from_main: - // [5] phi print2::at#4 = screen [phi:main->print2#0] -- call_phi_near + // [5] phi print2::at#4 = screen [phi:main->print2#0] -- pbuz1=pbuc1 lda #screen @@ -274,7 +274,7 @@ main: { // [3] call print2 // [5] phi from main::@1 to print2 [phi:main::@1->print2] print2_from___b1: - // [5] phi print2::at#4 = screen+$50 [phi:main::@1->print2#0] -- call_phi_near + // [5] phi print2::at#4 = screen+$50 [phi:main::@1->print2#0] -- pbuz1=pbuc1 lda #screen+$50 @@ -388,7 +388,7 @@ main: { // print2(screen, hello) // [1] call print2 // [5] phi from main to print2 [phi:main->print2] - // [5] phi print2::at#4 = screen [phi:main->print2#0] -- call_phi_near + // [5] phi print2::at#4 = screen [phi:main->print2#0] -- pbuz1=pbuc1 lda #screen @@ -399,7 +399,7 @@ main: { // print2(screen+80, hello) // [3] call print2 // [5] phi from main::@1 to print2 [phi:main::@1->print2] - // [5] phi print2::at#4 = screen+$50 [phi:main::@1->print2#0] -- call_phi_near + // [5] phi print2::at#4 = screen+$50 [phi:main::@1->print2#0] -- pbuz1=pbuc1 lda #screen+$50 diff --git a/src/test/ref/hex2dec-ptrptr.log b/src/test/ref/hex2dec-ptrptr.log index a6584ab71..39f626dc1 100644 --- a/src/test/ref/hex2dec-ptrptr.log +++ b/src/test/ref/hex2dec-ptrptr.log @@ -757,7 +757,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call cls - // [13] phi from main to cls [phi:main->cls] -- call_phi_near + // [13] phi from main to cls [phi:main->cls] cls_from_main: jsr cls jmp __b1 @@ -771,7 +771,7 @@ main: { // [3] call utoa16w // [19] phi from main::@1 to utoa16w [phi:main::@1->utoa16w] utoa16w_from___b1: - // [19] phi utoa16w::value#5 = 0 [phi:main::@1->utoa16w#0] -- call_phi_near + // [19] phi utoa16w::value#5 = 0 [phi:main::@1->utoa16w#0] -- vwuz1=vbuc1 lda #<0 sta.z utoa16w.value lda #>0 @@ -788,7 +788,7 @@ main: { // [5] call utoa16w // [19] phi from main::@2 to utoa16w [phi:main::@2->utoa16w] utoa16w_from___b2: - // [19] phi utoa16w::value#5 = $4d2 [phi:main::@2->utoa16w#0] -- call_phi_near + // [19] phi utoa16w::value#5 = $4d2 [phi:main::@2->utoa16w#0] -- vwuz1=vwuc1 lda #<$4d2 sta.z utoa16w.value lda #>$4d2 @@ -805,7 +805,7 @@ main: { // [7] call utoa16w // [19] phi from main::@3 to utoa16w [phi:main::@3->utoa16w] utoa16w_from___b3: - // [19] phi utoa16w::value#5 = $162e [phi:main::@3->utoa16w#0] -- call_phi_near + // [19] phi utoa16w::value#5 = $162e [phi:main::@3->utoa16w#0] -- vwuz1=vwuc1 lda #<$162e sta.z utoa16w.value lda #>$162e @@ -822,7 +822,7 @@ main: { // [9] call utoa16w // [19] phi from main::@4 to utoa16w [phi:main::@4->utoa16w] utoa16w_from___b4: - // [19] phi utoa16w::value#5 = $270f [phi:main::@4->utoa16w#0] -- call_phi_near + // [19] phi utoa16w::value#5 = $270f [phi:main::@4->utoa16w#0] -- vwuz1=vwuc1 lda #<$270f sta.z utoa16w.value lda #>$270f @@ -839,7 +839,7 @@ main: { // [11] call utoa16w // [19] phi from main::@5 to utoa16w [phi:main::@5->utoa16w] utoa16w_from___b5: - // [19] phi utoa16w::value#5 = $e608 [phi:main::@5->utoa16w#0] -- call_phi_near + // [19] phi utoa16w::value#5 = $e608 [phi:main::@5->utoa16w#0] -- vwuz1=vwuc1 lda #<$e608 sta.z utoa16w.value lda #>$e608 @@ -909,7 +909,7 @@ utoa16w: { utoa16n_from_utoa16w: // [40] phi utoa16n::started#7 = 0 [phi:utoa16w->utoa16n#0] -- vbuxx=vbuc1 ldx #0 - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- call_phi_near + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- register_copy jsr utoa16n // [23] utoa16n::return#0 = utoa16n::return#4 jmp __b1 @@ -925,7 +925,7 @@ utoa16w: { // [40] phi from utoa16w::@1 to utoa16n [phi:utoa16w::@1->utoa16n] utoa16n_from___b1: // [40] phi utoa16n::started#7 = utoa16n::started#1 [phi:utoa16w::@1->utoa16n#0] -- register_copy - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- call_phi_near + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- register_copy jsr utoa16n // [29] utoa16n::return#1 = utoa16n::return#4 jmp __b2 @@ -944,7 +944,7 @@ utoa16w: { // [40] phi from utoa16w::@2 to utoa16n [phi:utoa16w::@2->utoa16n] utoa16n_from___b2: // [40] phi utoa16n::started#7 = utoa16n::started#2 [phi:utoa16w::@2->utoa16n#0] -- register_copy - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- call_phi_near + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- register_copy jsr utoa16n jmp __b3 // utoa16w::@3 @@ -958,7 +958,7 @@ utoa16w: { utoa16n_from___b3: // [40] phi utoa16n::started#7 = 1 [phi:utoa16w::@3->utoa16n#0] -- vbuxx=vbuc1 ldx #1 - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- call_phi_near + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- register_copy jsr utoa16n jmp __b4 // utoa16w::@4 @@ -1159,7 +1159,7 @@ Score: 751 main: { // cls() // [1] call cls - // [13] phi from main to cls [phi:main->cls] -- call_phi_near + // [13] phi from main to cls [phi:main->cls] jsr cls // main::@1 // utoa16w(00000, screen) @@ -1170,7 +1170,7 @@ main: { sta.z utoa16w.dst+1 // [3] call utoa16w // [19] phi from main::@1 to utoa16w [phi:main::@1->utoa16w] - // [19] phi utoa16w::value#5 = 0 [phi:main::@1->utoa16w#0] -- call_phi_near + // [19] phi utoa16w::value#5 = 0 [phi:main::@1->utoa16w#0] -- vwuz1=vbuc1 lda #<0 sta.z utoa16w.value sta.z utoa16w.value+1 @@ -1184,7 +1184,7 @@ main: { sta.z utoa16w.dst+1 // [5] call utoa16w // [19] phi from main::@2 to utoa16w [phi:main::@2->utoa16w] - // [19] phi utoa16w::value#5 = $4d2 [phi:main::@2->utoa16w#0] -- call_phi_near + // [19] phi utoa16w::value#5 = $4d2 [phi:main::@2->utoa16w#0] -- vwuz1=vwuc1 lda #<$4d2 sta.z utoa16w.value lda #>$4d2 @@ -1199,7 +1199,7 @@ main: { sta.z utoa16w.dst+1 // [7] call utoa16w // [19] phi from main::@3 to utoa16w [phi:main::@3->utoa16w] - // [19] phi utoa16w::value#5 = $162e [phi:main::@3->utoa16w#0] -- call_phi_near + // [19] phi utoa16w::value#5 = $162e [phi:main::@3->utoa16w#0] -- vwuz1=vwuc1 lda #<$162e sta.z utoa16w.value lda #>$162e @@ -1214,7 +1214,7 @@ main: { sta.z utoa16w.dst+1 // [9] call utoa16w // [19] phi from main::@4 to utoa16w [phi:main::@4->utoa16w] - // [19] phi utoa16w::value#5 = $270f [phi:main::@4->utoa16w#0] -- call_phi_near + // [19] phi utoa16w::value#5 = $270f [phi:main::@4->utoa16w#0] -- vwuz1=vwuc1 lda #<$270f sta.z utoa16w.value lda #>$270f @@ -1229,7 +1229,7 @@ main: { sta.z utoa16w.dst+1 // [11] call utoa16w // [19] phi from main::@5 to utoa16w [phi:main::@5->utoa16w] - // [19] phi utoa16w::value#5 = $e608 [phi:main::@5->utoa16w#0] -- call_phi_near + // [19] phi utoa16w::value#5 = $e608 [phi:main::@5->utoa16w#0] -- vwuz1=vwuc1 lda #<$e608 sta.z utoa16w.value lda #>$e608 @@ -1296,7 +1296,7 @@ utoa16w: { // [40] phi from utoa16w to utoa16n [phi:utoa16w->utoa16n] // [40] phi utoa16n::started#7 = 0 [phi:utoa16w->utoa16n#0] -- vbuxx=vbuc1 ldx #0 - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- call_phi_near + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- register_copy jsr utoa16n // utoa16n(BYTE1(value)>>4, &dst, started) // [23] utoa16n::return#0 = utoa16n::return#4 @@ -1313,7 +1313,7 @@ utoa16w: { // [28] call utoa16n // [40] phi from utoa16w::@1 to utoa16n [phi:utoa16w::@1->utoa16n] // [40] phi utoa16n::started#7 = utoa16n::started#1 [phi:utoa16w::@1->utoa16n#0] -- register_copy - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- call_phi_near + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- register_copy jsr utoa16n // utoa16n(BYTE1(value)&0x0f, &dst, started) // [29] utoa16n::return#1 = utoa16n::return#4 @@ -1333,7 +1333,7 @@ utoa16w: { // [34] call utoa16n // [40] phi from utoa16w::@2 to utoa16n [phi:utoa16w::@2->utoa16n] // [40] phi utoa16n::started#7 = utoa16n::started#2 [phi:utoa16w::@2->utoa16n#0] -- register_copy - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- call_phi_near + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- register_copy jsr utoa16n // utoa16w::@3 // BYTE0(value) @@ -1346,7 +1346,7 @@ utoa16w: { // [40] phi from utoa16w::@3 to utoa16n [phi:utoa16w::@3->utoa16n] // [40] phi utoa16n::started#7 = 1 [phi:utoa16w::@3->utoa16n#0] -- vbuxx=vbuc1 ldx #1 - // [40] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- call_phi_near + // [40] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- register_copy jsr utoa16n // utoa16w::@4 // *dst = 0 diff --git a/src/test/ref/hex2dec.log b/src/test/ref/hex2dec.log index 42d4de639..458bec309 100644 --- a/src/test/ref/hex2dec.log +++ b/src/test/ref/hex2dec.log @@ -1415,7 +1415,7 @@ main: { // asm { sei } sei // [1] call cls - // [31] phi from main to cls [phi:main->cls] -- call_phi_near + // [31] phi from main to cls [phi:main->cls] cls_from_main: jsr cls jmp __b1 @@ -1450,7 +1450,7 @@ main: { // [9] call utoa16w // [37] phi from main::@2 to utoa16w [phi:main::@2->utoa16w] utoa16w_from___b2: - // [37] phi utoa16w::value#5 = 0 [phi:main::@2->utoa16w#0] -- call_phi_near + // [37] phi utoa16w::value#5 = 0 [phi:main::@2->utoa16w#0] -- vwuz1=vbuc1 lda #<0 sta.z utoa16w.value lda #>0 @@ -1469,7 +1469,7 @@ main: { // [12] call utoa16w // [37] phi from main::@5 to utoa16w [phi:main::@5->utoa16w] utoa16w_from___b5: - // [37] phi utoa16w::value#5 = $4d2 [phi:main::@5->utoa16w#0] -- call_phi_near + // [37] phi utoa16w::value#5 = $4d2 [phi:main::@5->utoa16w#0] -- vwuz1=vwuc1 lda #<$4d2 sta.z utoa16w.value lda #>$4d2 @@ -1488,7 +1488,7 @@ main: { // [15] call utoa16w // [37] phi from main::@6 to utoa16w [phi:main::@6->utoa16w] utoa16w_from___b6: - // [37] phi utoa16w::value#5 = $162e [phi:main::@6->utoa16w#0] -- call_phi_near + // [37] phi utoa16w::value#5 = $162e [phi:main::@6->utoa16w#0] -- vwuz1=vwuc1 lda #<$162e sta.z utoa16w.value lda #>$162e @@ -1507,7 +1507,7 @@ main: { // [18] call utoa16w // [37] phi from main::@7 to utoa16w [phi:main::@7->utoa16w] utoa16w_from___b7: - // [37] phi utoa16w::value#5 = $270f [phi:main::@7->utoa16w#0] -- call_phi_near + // [37] phi utoa16w::value#5 = $270f [phi:main::@7->utoa16w#0] -- vwuz1=vwuc1 lda #<$270f sta.z utoa16w.value lda #>$270f @@ -1526,7 +1526,7 @@ main: { // [21] call utoa16w // [37] phi from main::@8 to utoa16w [phi:main::@8->utoa16w] utoa16w_from___b8: - // [37] phi utoa16w::value#5 = $e608 [phi:main::@8->utoa16w#0] -- call_phi_near + // [37] phi utoa16w::value#5 = $e608 [phi:main::@8->utoa16w#0] -- vwuz1=vwuc1 lda #<$e608 sta.z utoa16w.value lda #>$e608 @@ -1549,7 +1549,7 @@ main: { lda #0 sta.z utoa10w.value+1 // [26] call utoa10w - // [58] phi from main::@9 to utoa10w [phi:main::@9->utoa10w] -- call_phi_near + // [58] phi from main::@9 to utoa10w [phi:main::@9->utoa10w] utoa10w_from___b9: jsr utoa10w // [27] phi from main::@9 to main::@3 [phi:main::@9->main::@3] @@ -1638,7 +1638,7 @@ utoa16w: { utoa16n_from_utoa16w: // [78] phi utoa16n::started#7 = 0 [phi:utoa16w->utoa16n#0] -- vbuxx=vbuc1 ldx #0 - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- call_phi_near + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- register_copy jsr utoa16n // [41] utoa16n::return#0 = utoa16n::return#4 jmp __b1 @@ -1654,7 +1654,7 @@ utoa16w: { // [78] phi from utoa16w::@1 to utoa16n [phi:utoa16w::@1->utoa16n] utoa16n_from___b1: // [78] phi utoa16n::started#7 = utoa16n::started#1 [phi:utoa16w::@1->utoa16n#0] -- register_copy - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- call_phi_near + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- register_copy jsr utoa16n // [47] utoa16n::return#1 = utoa16n::return#4 jmp __b2 @@ -1673,7 +1673,7 @@ utoa16w: { // [78] phi from utoa16w::@2 to utoa16n [phi:utoa16w::@2->utoa16n] utoa16n_from___b2: // [78] phi utoa16n::started#7 = utoa16n::started#2 [phi:utoa16w::@2->utoa16n#0] -- register_copy - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- call_phi_near + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- register_copy jsr utoa16n jmp __b3 // utoa16w::@3 @@ -1687,7 +1687,7 @@ utoa16w: { utoa16n_from___b3: // [78] phi utoa16n::started#7 = 1 [phi:utoa16w::@3->utoa16n#0] -- vbuxx=vbuc1 ldx #1 - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- call_phi_near + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- register_copy jsr utoa16n jmp __b4 // utoa16w::@4 @@ -2138,7 +2138,7 @@ main: { sei // cls() // [1] call cls - // [31] phi from main to cls [phi:main->cls] -- call_phi_near + // [31] phi from main to cls [phi:main->cls] jsr cls // main::@1 __b1: @@ -2175,7 +2175,7 @@ main: { sta.z utoa16w.dst+1 // [9] call utoa16w // [37] phi from main::@2 to utoa16w [phi:main::@2->utoa16w] - // [37] phi utoa16w::value#5 = 0 [phi:main::@2->utoa16w#0] -- call_phi_near + // [37] phi utoa16w::value#5 = 0 [phi:main::@2->utoa16w#0] -- vwuz1=vbuc1 lda #<0 sta.z utoa16w.value sta.z utoa16w.value+1 @@ -2192,7 +2192,7 @@ main: { sta.z utoa16w.dst+1 // [12] call utoa16w // [37] phi from main::@5 to utoa16w [phi:main::@5->utoa16w] - // [37] phi utoa16w::value#5 = $4d2 [phi:main::@5->utoa16w#0] -- call_phi_near + // [37] phi utoa16w::value#5 = $4d2 [phi:main::@5->utoa16w#0] -- vwuz1=vwuc1 lda #<$4d2 sta.z utoa16w.value lda #>$4d2 @@ -2210,7 +2210,7 @@ main: { sta.z utoa16w.dst+1 // [15] call utoa16w // [37] phi from main::@6 to utoa16w [phi:main::@6->utoa16w] - // [37] phi utoa16w::value#5 = $162e [phi:main::@6->utoa16w#0] -- call_phi_near + // [37] phi utoa16w::value#5 = $162e [phi:main::@6->utoa16w#0] -- vwuz1=vwuc1 lda #<$162e sta.z utoa16w.value lda #>$162e @@ -2228,7 +2228,7 @@ main: { sta.z utoa16w.dst+1 // [18] call utoa16w // [37] phi from main::@7 to utoa16w [phi:main::@7->utoa16w] - // [37] phi utoa16w::value#5 = $270f [phi:main::@7->utoa16w#0] -- call_phi_near + // [37] phi utoa16w::value#5 = $270f [phi:main::@7->utoa16w#0] -- vwuz1=vwuc1 lda #<$270f sta.z utoa16w.value lda #>$270f @@ -2246,7 +2246,7 @@ main: { sta.z utoa16w.dst+1 // [21] call utoa16w // [37] phi from main::@8 to utoa16w [phi:main::@8->utoa16w] - // [37] phi utoa16w::value#5 = $e608 [phi:main::@8->utoa16w#0] -- call_phi_near + // [37] phi utoa16w::value#5 = $e608 [phi:main::@8->utoa16w#0] -- vwuz1=vwuc1 lda #<$e608 sta.z utoa16w.value lda #>$e608 @@ -2271,7 +2271,7 @@ main: { lda #0 sta.z utoa10w.value+1 // [26] call utoa10w - // [58] phi from main::@9 to utoa10w [phi:main::@9->utoa10w] -- call_phi_near + // [58] phi from main::@9 to utoa10w [phi:main::@9->utoa10w] jsr utoa10w // [27] phi from main::@9 to main::@3 [phi:main::@9->main::@3] // [27] phi main::i#2 = 0 [phi:main::@9->main::@3#0] -- vbuxx=vbuc1 @@ -2357,7 +2357,7 @@ utoa16w: { // [78] phi from utoa16w to utoa16n [phi:utoa16w->utoa16n] // [78] phi utoa16n::started#7 = 0 [phi:utoa16w->utoa16n#0] -- vbuxx=vbuc1 ldx #0 - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- call_phi_near + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#0 [phi:utoa16w->utoa16n#1] -- register_copy jsr utoa16n // utoa16n(BYTE1(value)>>4, &dst, started) // [41] utoa16n::return#0 = utoa16n::return#4 @@ -2374,7 +2374,7 @@ utoa16w: { // [46] call utoa16n // [78] phi from utoa16w::@1 to utoa16n [phi:utoa16w::@1->utoa16n] // [78] phi utoa16n::started#7 = utoa16n::started#1 [phi:utoa16w::@1->utoa16n#0] -- register_copy - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- call_phi_near + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#1 [phi:utoa16w::@1->utoa16n#1] -- register_copy jsr utoa16n // utoa16n(BYTE1(value)&0x0f, &dst, started) // [47] utoa16n::return#1 = utoa16n::return#4 @@ -2394,7 +2394,7 @@ utoa16w: { // [52] call utoa16n // [78] phi from utoa16w::@2 to utoa16n [phi:utoa16w::@2->utoa16n] // [78] phi utoa16n::started#7 = utoa16n::started#2 [phi:utoa16w::@2->utoa16n#0] -- register_copy - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- call_phi_near + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#2 [phi:utoa16w::@2->utoa16n#1] -- register_copy jsr utoa16n // utoa16w::@3 // BYTE0(value) @@ -2407,7 +2407,7 @@ utoa16w: { // [78] phi from utoa16w::@3 to utoa16n [phi:utoa16w::@3->utoa16n] // [78] phi utoa16n::started#7 = 1 [phi:utoa16w::@3->utoa16n#0] -- vbuxx=vbuc1 ldx #1 - // [78] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- call_phi_near + // [78] phi utoa16n::nybble#4 = utoa16n::nybble#3 [phi:utoa16w::@3->utoa16n#1] -- register_copy jsr utoa16n // utoa16w::@4 // *dst = 0 diff --git a/src/test/ref/incrementinarray.log b/src/test/ref/incrementinarray.log index df198b8fa..e7e0c5e28 100644 --- a/src/test/ref/incrementinarray.log +++ b/src/test/ref/incrementinarray.log @@ -757,7 +757,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call print_cls - // [11] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [11] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -778,7 +778,7 @@ main: { // main::@1 __b1: // [3] call print_str - // [14] phi from main::@1 to print_str [phi:main::@1->print_str] -- call_phi_near + // [14] phi from main::@1 to print_str [phi:main::@1->print_str] print_str_from___b1: jsr print_str // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -787,7 +787,7 @@ main: { // main::@2 __b2: // [5] call print_ln - // [21] phi from main::@2 to print_ln [phi:main::@2->print_ln] -- call_phi_near + // [21] phi from main::@2 to print_ln [phi:main::@2->print_ln] print_ln_from___b2: jsr print_ln jmp __b3 @@ -823,7 +823,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [12] call memset - // [26] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [26] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -863,7 +863,7 @@ print_str: { // [18] print_char::ch#0 = *print_str::str#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [19] call print_char -- call_phi_near + // [19] call print_char jsr print_char jmp __b3 // print_str::@3 @@ -1101,7 +1101,7 @@ Score: 9880 main: { // print_cls() // [1] call print_cls - // [11] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [11] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 @@ -1120,13 +1120,13 @@ main: { __b1: // print_str(txt) // [3] call print_str - // [14] phi from main::@1 to print_str [phi:main::@1->print_str] -- call_phi_near + // [14] phi from main::@1 to print_str [phi:main::@1->print_str] jsr print_str // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // print_ln() // [5] call print_ln - // [21] phi from main::@2 to print_ln [phi:main::@2->print_ln] -- call_phi_near + // [21] phi from main::@2 to print_ln [phi:main::@2->print_ln] jsr print_ln // main::@3 // txt[1]++; @@ -1160,7 +1160,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [12] call memset - // [26] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [26] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -1197,7 +1197,7 @@ print_str: { // [18] print_char::ch#0 = *print_str::str#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [19] call print_char -- call_phi_near + // [19] call print_char jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/init-value-npe.log b/src/test/ref/init-value-npe.log index 605953a1e..0934bf1d1 100644 --- a/src/test/ref/init-value-npe.log +++ b/src/test/ref/init-value-npe.log @@ -238,7 +238,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call memset -- call_phi_near + // [1] call memset jsr memset jmp __breturn // main::@return @@ -302,7 +302,7 @@ Score: 24 // main main: { // memset(myscreen) - // [1] call memset -- call_phi_near + // [1] call memset jsr memset // main::@return // } diff --git a/src/test/ref/init-volatiles.log b/src/test/ref/init-volatiles.log index 28a4e887d..479f85898 100644 --- a/src/test/ref/init-volatiles.log +++ b/src/test/ref/init-volatiles.log @@ -154,7 +154,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -241,7 +241,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return diff --git a/src/test/ref/inline-asm-ref-scoped.log b/src/test/ref/inline-asm-ref-scoped.log index 321189d27..87605b4e1 100644 --- a/src/test/ref/inline-asm-ref-scoped.log +++ b/src/test/ref/inline-asm-ref-scoped.log @@ -106,7 +106,7 @@ main: { // asm { lda#'c' stasub.ll+1 } lda #'c' sta sub.ll+1 - // [1] call sub -- call_phi_near + // [1] call sub jsr sub jmp __breturn // main::@return @@ -165,7 +165,7 @@ main: { lda #'c' sta sub.ll+1 // sub() - // [1] call sub -- call_phi_near + // [1] call sub jsr sub // main::@return // } diff --git a/src/test/ref/inline-asm-uses-1.log b/src/test/ref/inline-asm-uses-1.log index 746828cb6..f1456dbff 100644 --- a/src/test/ref/inline-asm-uses-1.log +++ b/src/test/ref/inline-asm-uses-1.log @@ -201,7 +201,7 @@ main: { // [0] fgetc::channel = 7 -- vbuz1=vbuc1 lda #7 sta.z fgetc.channel - // [1] call fgetc -- call_phi_near + // [1] call fgetc jsr fgetc // [2] fgetc::return#0 = fgetc::return#2 jmp __b1 @@ -301,7 +301,7 @@ main: { // [0] fgetc::channel = 7 -- vbuz1=vbuc1 lda #7 sta.z fgetc.channel - // [1] call fgetc -- call_phi_near + // [1] call fgetc jsr fgetc // [2] fgetc::return#0 = fgetc::return#2 // main::@1 diff --git a/src/test/ref/inline-kickasm-uses-problem.log b/src/test/ref/inline-kickasm-uses-problem.log index 66bedbc96..e583b0c27 100644 --- a/src/test/ref/inline-kickasm-uses-problem.log +++ b/src/test/ref/inline-kickasm-uses-problem.log @@ -187,7 +187,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call foo -- call_phi_near + // [1] call foo jsr foo jmp __breturn // main::@return @@ -291,7 +291,7 @@ Score: 320 // main main: { // foo(a, b) - // [1] call foo -- call_phi_near + // [1] call foo jsr foo // main::@return // } diff --git a/src/test/ref/inline-pointer-1.log b/src/test/ref/inline-pointer-1.log index 04e35a32f..edca90a05 100644 --- a/src/test/ref/inline-pointer-1.log +++ b/src/test/ref/inline-pointer-1.log @@ -194,7 +194,7 @@ main: { puta_from_main: // [5] phi puta::pl#2 = 0 [phi:main->puta#0] -- vbuaa=vbuc1 lda #0 - // [5] phi puta::ph#2 = 4 [phi:main->puta#1] -- call_phi_near + // [5] phi puta::ph#2 = 4 [phi:main->puta#1] -- vbuxx=vbuc1 ldx #4 jsr puta // [2] phi from main to main::@1 [phi:main->main::@1] @@ -207,7 +207,7 @@ main: { puta_from___b1: // [5] phi puta::pl#2 = $18 [phi:main::@1->puta#0] -- vbuaa=vbuc1 lda #$18 - // [5] phi puta::ph#2 = 5 [phi:main::@1->puta#1] -- call_phi_near + // [5] phi puta::ph#2 = 5 [phi:main::@1->puta#1] -- vbuxx=vbuc1 ldx #5 jsr puta jmp __breturn @@ -287,7 +287,7 @@ main: { // [5] phi from main to puta [phi:main->puta] // [5] phi puta::pl#2 = 0 [phi:main->puta#0] -- vbuaa=vbuc1 lda #0 - // [5] phi puta::ph#2 = 4 [phi:main->puta#1] -- call_phi_near + // [5] phi puta::ph#2 = 4 [phi:main->puta#1] -- vbuxx=vbuc1 ldx #4 jsr puta // [2] phi from main to main::@1 [phi:main->main::@1] @@ -297,7 +297,7 @@ main: { // [5] phi from main::@1 to puta [phi:main::@1->puta] // [5] phi puta::pl#2 = $18 [phi:main::@1->puta#0] -- vbuaa=vbuc1 lda #$18 - // [5] phi puta::ph#2 = 5 [phi:main::@1->puta#1] -- call_phi_near + // [5] phi puta::ph#2 = 5 [phi:main::@1->puta#1] -- vbuxx=vbuc1 ldx #5 jsr puta // main::@return diff --git a/src/test/ref/inline-string-2.log b/src/test/ref/inline-string-2.log index 1eaae4ccd..cd5c7f730 100644 --- a/src/test/ref/inline-string-2.log +++ b/src/test/ref/inline-string-2.log @@ -379,7 +379,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [5] phi print_msg::idx#2 = 1 [phi:main->print_msg#1] -- call_phi_near + // [5] phi print_msg::idx#2 = 1 [phi:main->print_msg#1] -- vbuxx=vbuc1 ldx #1 jsr print_msg // [2] phi from main to main::@1 [phi:main->main::@1] @@ -391,7 +391,7 @@ main: { // [5] phi from main::@1 to print_msg [phi:main::@1->print_msg] print_msg_from___b1: // [5] phi screen#20 = screen#15 [phi:main::@1->print_msg#0] -- register_copy - // [5] phi print_msg::idx#2 = 2 [phi:main::@1->print_msg#1] -- call_phi_near + // [5] phi print_msg::idx#2 = 2 [phi:main::@1->print_msg#1] -- vbuxx=vbuc1 ldx #2 jsr print_msg jmp __breturn @@ -432,7 +432,7 @@ print_msg: { __b2: // [9] print::msg#0 = print_msg::msg#3 // [10] call print - // [12] phi from print_msg::@2 to print [phi:print_msg::@2->print] -- call_phi_near + // [12] phi from print_msg::@2 to print [phi:print_msg::@2->print] print_from___b2: jsr print jmp __breturn @@ -570,7 +570,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [5] phi print_msg::idx#2 = 1 [phi:main->print_msg#1] -- call_phi_near + // [5] phi print_msg::idx#2 = 1 [phi:main->print_msg#1] -- vbuxx=vbuc1 ldx #1 jsr print_msg // [2] phi from main to main::@1 [phi:main->main::@1] @@ -579,7 +579,7 @@ main: { // [3] call print_msg // [5] phi from main::@1 to print_msg [phi:main::@1->print_msg] // [5] phi screen#20 = screen#15 [phi:main::@1->print_msg#0] -- register_copy - // [5] phi print_msg::idx#2 = 2 [phi:main::@1->print_msg#1] -- call_phi_near + // [5] phi print_msg::idx#2 = 2 [phi:main::@1->print_msg#1] -- vbuxx=vbuc1 ldx #2 jsr print_msg // main::@return @@ -616,7 +616,7 @@ print_msg: { // print(msg) // [9] print::msg#0 = print_msg::msg#3 // [10] call print - // [12] phi from print_msg::@2 to print [phi:print_msg::@2->print] -- call_phi_near + // [12] phi from print_msg::@2 to print [phi:print_msg::@2->print] jsr print // print_msg::@return // } diff --git a/src/test/ref/inline-string-4.log b/src/test/ref/inline-string-4.log index 4880aa4b8..e46adc6d2 100644 --- a/src/test/ref/inline-string-4.log +++ b/src/test/ref/inline-string-4.log @@ -122,7 +122,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { .label dw = msg - // [1] call output -- call_phi_near + // [1] call output jsr output jmp __breturn // main::@return @@ -193,7 +193,7 @@ Score: 42 main: { .label dw = msg // output(dw) - // [1] call output -- call_phi_near + // [1] call output jsr output // main::@return // } diff --git a/src/test/ref/inline-string.log b/src/test/ref/inline-string.log index 6c4793398..5662d1b07 100644 --- a/src/test/ref/inline-string.log +++ b/src/test/ref/inline-string.log @@ -274,7 +274,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [7] phi print::msg#6 = msg1 [phi:main->print#1] -- call_phi_near + // [7] phi print::msg#6 = msg1 [phi:main->print#1] -- pbuz1=pbuc1 lda #msg1 @@ -289,7 +289,7 @@ main: { // [7] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- register_copy - // [7] phi print::msg#6 = main::msg2 [phi:main::@1->print#1] -- call_phi_near + // [7] phi print::msg#6 = main::msg2 [phi:main::@1->print#1] -- pbuz1=pbuc1 lda #msg2 @@ -304,7 +304,7 @@ main: { // [7] phi from main::@2 to print [phi:main::@2->print] print_from___b2: // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- register_copy - // [7] phi print::msg#6 = main::msg [phi:main::@2->print#1] -- call_phi_near + // [7] phi print::msg#6 = main::msg [phi:main::@2->print#1] -- pbuz1=pbuc1 lda #msg @@ -438,7 +438,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [7] phi print::msg#6 = msg1 [phi:main->print#1] -- call_phi_near + // [7] phi print::msg#6 = msg1 [phi:main->print#1] -- pbuz1=pbuc1 lda #msg1 @@ -450,7 +450,7 @@ main: { // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- register_copy - // [7] phi print::msg#6 = main::msg2 [phi:main::@1->print#1] -- call_phi_near + // [7] phi print::msg#6 = main::msg2 [phi:main::@1->print#1] -- pbuz1=pbuc1 lda #msg2 @@ -462,7 +462,7 @@ main: { // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- register_copy - // [7] phi print::msg#6 = main::msg [phi:main::@2->print#1] -- call_phi_near + // [7] phi print::msg#6 = main::msg [phi:main::@2->print#1] -- pbuz1=pbuc1 lda #msg diff --git a/src/test/ref/int-conversion.log b/src/test/ref/int-conversion.log index 9bc0b5d39..cd6b3338f 100644 --- a/src/test/ref/int-conversion.log +++ b/src/test/ref/int-conversion.log @@ -1663,7 +1663,7 @@ main: { // main::@3 __b3: // [4] call testUnaryOperator - // [10] phi from main::@3 to testUnaryOperator [phi:main::@3->testUnaryOperator] -- call_phi_near + // [10] phi from main::@3 to testUnaryOperator [phi:main::@3->testUnaryOperator] testUnaryOperator_from___b3: jsr testUnaryOperator // [5] phi from main::@3 to main::@4 [phi:main::@3->main::@4] @@ -1672,7 +1672,7 @@ main: { // main::@4 __b4: // [6] call testBinaryOperator - // [23] phi from main::@4 to testBinaryOperator [phi:main::@4->testBinaryOperator] -- call_phi_near + // [23] phi from main::@4 to testBinaryOperator [phi:main::@4->testBinaryOperator] testBinaryOperator_from___b4: jsr testBinaryOperator jmp __breturn @@ -1707,7 +1707,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testUnaryOperator->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testUnaryOperator->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testUnaryOperator->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_CHAR jsr assertType // [12] phi from testUnaryOperator to testUnaryOperator::@1 [phi:testUnaryOperator->testUnaryOperator::@1] @@ -1722,7 +1722,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_SIGNED_CHAR [phi:testUnaryOperator::@1->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_SIGNED_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testUnaryOperator::@1->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testUnaryOperator::@1->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_SIGNED_CHAR jsr assertType // [14] phi from testUnaryOperator::@1 to testUnaryOperator::@2 [phi:testUnaryOperator::@1->testUnaryOperator::@2] @@ -1737,7 +1737,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testUnaryOperator::@2->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testUnaryOperator::@2->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testUnaryOperator::@2->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [16] phi from testUnaryOperator::@2 to testUnaryOperator::@3 [phi:testUnaryOperator::@2->testUnaryOperator::@3] @@ -1752,7 +1752,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testUnaryOperator::@3->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testUnaryOperator::@3->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testUnaryOperator::@3->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_INT jsr assertType // [18] phi from testUnaryOperator::@3 to testUnaryOperator::@4 [phi:testUnaryOperator::@3->testUnaryOperator::@4] @@ -1767,7 +1767,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testUnaryOperator::@4->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testUnaryOperator::@4->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testUnaryOperator::@4->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [20] phi from testUnaryOperator::@4 to testUnaryOperator::@5 [phi:testUnaryOperator::@4->testUnaryOperator::@5] @@ -1782,7 +1782,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testUnaryOperator::@5->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testUnaryOperator::@5->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testUnaryOperator::@5->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType jmp __breturn @@ -1802,7 +1802,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testBinaryOperator->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_CHAR jsr assertType // [25] phi from testBinaryOperator to testBinaryOperator::@1 [phi:testBinaryOperator->testBinaryOperator::@1] @@ -1817,7 +1817,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testBinaryOperator::@1->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@1->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@1->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_CHAR jsr assertType // [27] phi from testBinaryOperator::@1 to testBinaryOperator::@2 [phi:testBinaryOperator::@1->testBinaryOperator::@2] @@ -1832,7 +1832,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@2->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@2->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@2->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [29] phi from testBinaryOperator::@2 to testBinaryOperator::@3 [phi:testBinaryOperator::@2->testBinaryOperator::@3] @@ -1847,7 +1847,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@3->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@3->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@3->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_INT jsr assertType // [31] phi from testBinaryOperator::@3 to testBinaryOperator::@4 [phi:testBinaryOperator::@3->testBinaryOperator::@4] @@ -1862,7 +1862,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@4->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@4->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@4->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [33] phi from testBinaryOperator::@4 to testBinaryOperator::@5 [phi:testBinaryOperator::@4->testBinaryOperator::@5] @@ -1877,7 +1877,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@5->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@5->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@5->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType jmp __b6 @@ -1893,7 +1893,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testBinaryOperator::@6->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@6->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@6->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_CHAR jsr assertType // [37] phi from testBinaryOperator::@6 to testBinaryOperator::@7 [phi:testBinaryOperator::@6->testBinaryOperator::@7] @@ -1908,7 +1908,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_SIGNED_CHAR [phi:testBinaryOperator::@7->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_SIGNED_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testBinaryOperator::@7->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testBinaryOperator::@7->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_SIGNED_CHAR jsr assertType // [39] phi from testBinaryOperator::@7 to testBinaryOperator::@8 [phi:testBinaryOperator::@7->testBinaryOperator::@8] @@ -1923,7 +1923,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@8->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@8->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@8->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [41] phi from testBinaryOperator::@8 to testBinaryOperator::@9 [phi:testBinaryOperator::@8->testBinaryOperator::@9] @@ -1938,7 +1938,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@9->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@9->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@9->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_INT jsr assertType // [43] phi from testBinaryOperator::@9 to testBinaryOperator::@10 [phi:testBinaryOperator::@9->testBinaryOperator::@10] @@ -1953,7 +1953,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@10->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@10->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@10->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [45] phi from testBinaryOperator::@10 to testBinaryOperator::@11 [phi:testBinaryOperator::@10->testBinaryOperator::@11] @@ -1968,7 +1968,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@11->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@11->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@11->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType jmp __b12 @@ -1984,7 +1984,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@12->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@12->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@12->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [49] phi from testBinaryOperator::@12 to testBinaryOperator::@13 [phi:testBinaryOperator::@12->testBinaryOperator::@13] @@ -1999,7 +1999,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@13->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@13->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@13->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [51] phi from testBinaryOperator::@13 to testBinaryOperator::@14 [phi:testBinaryOperator::@13->testBinaryOperator::@14] @@ -2014,7 +2014,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@14->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@14->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@14->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [53] phi from testBinaryOperator::@14 to testBinaryOperator::@15 [phi:testBinaryOperator::@14->testBinaryOperator::@15] @@ -2029,7 +2029,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@15->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@15->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@15->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [55] phi from testBinaryOperator::@15 to testBinaryOperator::@16 [phi:testBinaryOperator::@15->testBinaryOperator::@16] @@ -2044,7 +2044,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@16->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@16->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@16->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [57] phi from testBinaryOperator::@16 to testBinaryOperator::@17 [phi:testBinaryOperator::@16->testBinaryOperator::@17] @@ -2059,7 +2059,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@17->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@17->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@17->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType // [59] phi from testBinaryOperator::@17 to testBinaryOperator::@18 [phi:testBinaryOperator::@17->testBinaryOperator::@18] @@ -2076,7 +2076,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@18->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@18->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@18->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_INT jsr assertType // [61] phi from testBinaryOperator::@18 to testBinaryOperator::@19 [phi:testBinaryOperator::@18->testBinaryOperator::@19] @@ -2091,7 +2091,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@19->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@19->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@19->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_INT jsr assertType // [63] phi from testBinaryOperator::@19 to testBinaryOperator::@20 [phi:testBinaryOperator::@19->testBinaryOperator::@20] @@ -2106,7 +2106,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@20->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@20->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@20->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [65] phi from testBinaryOperator::@20 to testBinaryOperator::@21 [phi:testBinaryOperator::@20->testBinaryOperator::@21] @@ -2121,7 +2121,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@21->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@21->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@21->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_INT jsr assertType // [67] phi from testBinaryOperator::@21 to testBinaryOperator::@22 [phi:testBinaryOperator::@21->testBinaryOperator::@22] @@ -2136,7 +2136,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@22->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@22->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@22->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [69] phi from testBinaryOperator::@22 to testBinaryOperator::@23 [phi:testBinaryOperator::@22->testBinaryOperator::@23] @@ -2151,7 +2151,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@23->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@23->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@23->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType jmp __b24 @@ -2167,7 +2167,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@24->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@24->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@24->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [73] phi from testBinaryOperator::@24 to testBinaryOperator::@25 [phi:testBinaryOperator::@24->testBinaryOperator::@25] @@ -2182,7 +2182,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@25->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@25->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@25->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [75] phi from testBinaryOperator::@25 to testBinaryOperator::@26 [phi:testBinaryOperator::@25->testBinaryOperator::@26] @@ -2197,7 +2197,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@26->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@26->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@26->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [77] phi from testBinaryOperator::@26 to testBinaryOperator::@27 [phi:testBinaryOperator::@26->testBinaryOperator::@27] @@ -2212,7 +2212,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@27->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@27->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@27->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [79] phi from testBinaryOperator::@27 to testBinaryOperator::@28 [phi:testBinaryOperator::@27->testBinaryOperator::@28] @@ -2227,7 +2227,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@28->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@28->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@28->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [81] phi from testBinaryOperator::@28 to testBinaryOperator::@29 [phi:testBinaryOperator::@28->testBinaryOperator::@29] @@ -2242,7 +2242,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@29->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@29->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@29->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType jmp __b30 @@ -2258,7 +2258,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@30->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@30->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@30->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType // [85] phi from testBinaryOperator::@30 to testBinaryOperator::@31 [phi:testBinaryOperator::@30->testBinaryOperator::@31] @@ -2273,7 +2273,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@31->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@31->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@31->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType // [87] phi from testBinaryOperator::@31 to testBinaryOperator::@32 [phi:testBinaryOperator::@31->testBinaryOperator::@32] @@ -2288,7 +2288,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@32->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@32->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@32->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType // [89] phi from testBinaryOperator::@32 to testBinaryOperator::@33 [phi:testBinaryOperator::@32->testBinaryOperator::@33] @@ -2303,7 +2303,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@33->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@33->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@33->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType // [91] phi from testBinaryOperator::@33 to testBinaryOperator::@34 [phi:testBinaryOperator::@33->testBinaryOperator::@34] @@ -2318,7 +2318,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@34->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@34->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@34->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [93] phi from testBinaryOperator::@34 to testBinaryOperator::@35 [phi:testBinaryOperator::@34->testBinaryOperator::@35] @@ -2333,7 +2333,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@35->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@35->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@35->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType jmp __breturn @@ -2695,13 +2695,13 @@ main: { // main::@3 // testUnaryOperator() // [4] call testUnaryOperator - // [10] phi from main::@3 to testUnaryOperator [phi:main::@3->testUnaryOperator] -- call_phi_near + // [10] phi from main::@3 to testUnaryOperator [phi:main::@3->testUnaryOperator] jsr testUnaryOperator // [5] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // testBinaryOperator() // [6] call testBinaryOperator - // [23] phi from main::@4 to testBinaryOperator [phi:main::@4->testBinaryOperator] -- call_phi_near + // [23] phi from main::@4 to testBinaryOperator [phi:main::@4->testBinaryOperator] jsr testBinaryOperator // main::@return // } @@ -2735,7 +2735,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testUnaryOperator->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testUnaryOperator->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testUnaryOperator->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [12] phi from testUnaryOperator to testUnaryOperator::@1 [phi:testUnaryOperator->testUnaryOperator::@1] @@ -2747,7 +2747,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_SIGNED_CHAR [phi:testUnaryOperator::@1->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_SIGNED_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testUnaryOperator::@1->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testUnaryOperator::@1->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [14] phi from testUnaryOperator::@1 to testUnaryOperator::@2 [phi:testUnaryOperator::@1->testUnaryOperator::@2] @@ -2759,7 +2759,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testUnaryOperator::@2->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testUnaryOperator::@2->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testUnaryOperator::@2->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [16] phi from testUnaryOperator::@2 to testUnaryOperator::@3 [phi:testUnaryOperator::@2->testUnaryOperator::@3] @@ -2771,7 +2771,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testUnaryOperator::@3->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testUnaryOperator::@3->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testUnaryOperator::@3->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [18] phi from testUnaryOperator::@3 to testUnaryOperator::@4 [phi:testUnaryOperator::@3->testUnaryOperator::@4] @@ -2783,7 +2783,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testUnaryOperator::@4->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testUnaryOperator::@4->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testUnaryOperator::@4->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [20] phi from testUnaryOperator::@4 to testUnaryOperator::@5 [phi:testUnaryOperator::@4->testUnaryOperator::@5] @@ -2795,7 +2795,7 @@ testUnaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testUnaryOperator::@5->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testUnaryOperator::@5->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testUnaryOperator::@5->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // testUnaryOperator::@return @@ -2814,7 +2814,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testBinaryOperator->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [25] phi from testBinaryOperator to testBinaryOperator::@1 [phi:testBinaryOperator->testBinaryOperator::@1] @@ -2826,7 +2826,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testBinaryOperator::@1->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@1->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@1->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [27] phi from testBinaryOperator::@1 to testBinaryOperator::@2 [phi:testBinaryOperator::@1->testBinaryOperator::@2] @@ -2838,7 +2838,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@2->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@2->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@2->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [29] phi from testBinaryOperator::@2 to testBinaryOperator::@3 [phi:testBinaryOperator::@2->testBinaryOperator::@3] @@ -2850,7 +2850,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@3->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@3->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@3->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [31] phi from testBinaryOperator::@3 to testBinaryOperator::@4 [phi:testBinaryOperator::@3->testBinaryOperator::@4] @@ -2862,7 +2862,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@4->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@4->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@4->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [33] phi from testBinaryOperator::@4 to testBinaryOperator::@5 [phi:testBinaryOperator::@4->testBinaryOperator::@5] @@ -2874,7 +2874,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@5->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@5->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@5->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // testBinaryOperator::@6 @@ -2889,7 +2889,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_CHAR [phi:testBinaryOperator::@6->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@6->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_CHAR [phi:testBinaryOperator::@6->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [37] phi from testBinaryOperator::@6 to testBinaryOperator::@7 [phi:testBinaryOperator::@6->testBinaryOperator::@7] @@ -2901,7 +2901,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_SIGNED_CHAR [phi:testBinaryOperator::@7->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_SIGNED_CHAR sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testBinaryOperator::@7->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_SIGNED_CHAR [phi:testBinaryOperator::@7->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [39] phi from testBinaryOperator::@7 to testBinaryOperator::@8 [phi:testBinaryOperator::@7->testBinaryOperator::@8] @@ -2913,7 +2913,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@8->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@8->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@8->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [41] phi from testBinaryOperator::@8 to testBinaryOperator::@9 [phi:testBinaryOperator::@8->testBinaryOperator::@9] @@ -2925,7 +2925,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@9->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@9->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@9->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [43] phi from testBinaryOperator::@9 to testBinaryOperator::@10 [phi:testBinaryOperator::@9->testBinaryOperator::@10] @@ -2937,7 +2937,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@10->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@10->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@10->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [45] phi from testBinaryOperator::@10 to testBinaryOperator::@11 [phi:testBinaryOperator::@10->testBinaryOperator::@11] @@ -2949,7 +2949,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@11->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@11->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@11->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // testBinaryOperator::@12 @@ -2964,7 +2964,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@12->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@12->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@12->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [49] phi from testBinaryOperator::@12 to testBinaryOperator::@13 [phi:testBinaryOperator::@12->testBinaryOperator::@13] @@ -2976,7 +2976,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@13->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@13->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@13->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [51] phi from testBinaryOperator::@13 to testBinaryOperator::@14 [phi:testBinaryOperator::@13->testBinaryOperator::@14] @@ -2988,7 +2988,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@14->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@14->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@14->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [53] phi from testBinaryOperator::@14 to testBinaryOperator::@15 [phi:testBinaryOperator::@14->testBinaryOperator::@15] @@ -3000,7 +3000,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@15->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@15->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@15->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [55] phi from testBinaryOperator::@15 to testBinaryOperator::@16 [phi:testBinaryOperator::@15->testBinaryOperator::@16] @@ -3012,7 +3012,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@16->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@16->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@16->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [57] phi from testBinaryOperator::@16 to testBinaryOperator::@17 [phi:testBinaryOperator::@16->testBinaryOperator::@17] @@ -3024,7 +3024,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@17->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@17->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@17->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [59] phi from testBinaryOperator::@17 to testBinaryOperator::@18 [phi:testBinaryOperator::@17->testBinaryOperator::@18] @@ -3038,7 +3038,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@18->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@18->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@18->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [61] phi from testBinaryOperator::@18 to testBinaryOperator::@19 [phi:testBinaryOperator::@18->testBinaryOperator::@19] @@ -3050,7 +3050,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@19->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@19->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@19->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [63] phi from testBinaryOperator::@19 to testBinaryOperator::@20 [phi:testBinaryOperator::@19->testBinaryOperator::@20] @@ -3062,7 +3062,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@20->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@20->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_INT [phi:testBinaryOperator::@20->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [65] phi from testBinaryOperator::@20 to testBinaryOperator::@21 [phi:testBinaryOperator::@20->testBinaryOperator::@21] @@ -3074,7 +3074,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_INT [phi:testBinaryOperator::@21->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@21->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_INT [phi:testBinaryOperator::@21->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [67] phi from testBinaryOperator::@21 to testBinaryOperator::@22 [phi:testBinaryOperator::@21->testBinaryOperator::@22] @@ -3086,7 +3086,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@22->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@22->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@22->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [69] phi from testBinaryOperator::@22 to testBinaryOperator::@23 [phi:testBinaryOperator::@22->testBinaryOperator::@23] @@ -3098,7 +3098,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@23->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@23->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@23->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // testBinaryOperator::@24 @@ -3113,7 +3113,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@24->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@24->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@24->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [73] phi from testBinaryOperator::@24 to testBinaryOperator::@25 [phi:testBinaryOperator::@24->testBinaryOperator::@25] @@ -3125,7 +3125,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@25->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@25->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@25->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [75] phi from testBinaryOperator::@25 to testBinaryOperator::@26 [phi:testBinaryOperator::@25->testBinaryOperator::@26] @@ -3137,7 +3137,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@26->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@26->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@26->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [77] phi from testBinaryOperator::@26 to testBinaryOperator::@27 [phi:testBinaryOperator::@26->testBinaryOperator::@27] @@ -3149,7 +3149,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@27->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@27->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@27->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [79] phi from testBinaryOperator::@27 to testBinaryOperator::@28 [phi:testBinaryOperator::@27->testBinaryOperator::@28] @@ -3161,7 +3161,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@28->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@28->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@28->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [81] phi from testBinaryOperator::@28 to testBinaryOperator::@29 [phi:testBinaryOperator::@28->testBinaryOperator::@29] @@ -3173,7 +3173,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@29->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@29->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@29->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // testBinaryOperator::@30 @@ -3188,7 +3188,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@30->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@30->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@30->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [85] phi from testBinaryOperator::@30 to testBinaryOperator::@31 [phi:testBinaryOperator::@30->testBinaryOperator::@31] @@ -3200,7 +3200,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@31->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@31->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@31->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [87] phi from testBinaryOperator::@31 to testBinaryOperator::@32 [phi:testBinaryOperator::@31->testBinaryOperator::@32] @@ -3212,7 +3212,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@32->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@32->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@32->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [89] phi from testBinaryOperator::@32 to testBinaryOperator::@33 [phi:testBinaryOperator::@32->testBinaryOperator::@33] @@ -3224,7 +3224,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@33->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@33->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@33->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [91] phi from testBinaryOperator::@33 to testBinaryOperator::@34 [phi:testBinaryOperator::@33->testBinaryOperator::@34] @@ -3236,7 +3236,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@34->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@34->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_UNSIGNED_LONG [phi:testBinaryOperator::@34->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [93] phi from testBinaryOperator::@34 to testBinaryOperator::@35 [phi:testBinaryOperator::@34->testBinaryOperator::@35] @@ -3248,7 +3248,7 @@ testBinaryOperator: { // [96] phi assertType::t2#42 = TYPEID_LONG [phi:testBinaryOperator::@35->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@35->assertType#2] -- call_phi_near + // [96] phi assertType::t1#42 = TYPEID_LONG [phi:testBinaryOperator::@35->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // testBinaryOperator::@return diff --git a/src/test/ref/int-literals.log b/src/test/ref/int-literals.log index 21f38a123..7e001ef35 100644 --- a/src/test/ref/int-literals.log +++ b/src/test/ref/int-literals.log @@ -836,7 +836,7 @@ main: { // main::@3 __b3: // [4] call testSimpleTypes - // [8] phi from main::@3 to testSimpleTypes [phi:main::@3->testSimpleTypes] -- call_phi_near + // [8] phi from main::@3 to testSimpleTypes [phi:main::@3->testSimpleTypes] testSimpleTypes_from___b3: jsr testSimpleTypes jmp __breturn @@ -871,7 +871,7 @@ testSimpleTypes: { sta.z idx // [41] phi assertType::t2#16 = TYPEID_CHAR [phi:testSimpleTypes->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_CHAR - // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_CHAR jsr assertType // [10] phi from testSimpleTypes to testSimpleTypes::@1 [phi:testSimpleTypes->testSimpleTypes::@1] @@ -885,7 +885,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@1->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_CHAR [phi:testSimpleTypes::@1->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_CHAR - // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes::@1->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes::@1->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_CHAR jsr assertType // [12] phi from testSimpleTypes::@1 to testSimpleTypes::@2 [phi:testSimpleTypes::@1->testSimpleTypes::@2] @@ -899,7 +899,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@2->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@2->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_SIGNED_CHAR - // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@2->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@2->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_SIGNED_CHAR jsr assertType // [14] phi from testSimpleTypes::@2 to testSimpleTypes::@3 [phi:testSimpleTypes::@2->testSimpleTypes::@3] @@ -913,7 +913,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@3->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@3->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_SIGNED_CHAR - // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@3->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@3->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_SIGNED_CHAR jsr assertType // [16] phi from testSimpleTypes::@3 to testSimpleTypes::@4 [phi:testSimpleTypes::@3->testSimpleTypes::@4] @@ -927,7 +927,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@4->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@4->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@4->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@4->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_UNSIGNED_INT jsr assertType // [18] phi from testSimpleTypes::@4 to testSimpleTypes::@5 [phi:testSimpleTypes::@4->testSimpleTypes::@5] @@ -941,7 +941,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@5->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@5->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@5->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@5->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_UNSIGNED_INT jsr assertType // [20] phi from testSimpleTypes::@5 to testSimpleTypes::@6 [phi:testSimpleTypes::@5->testSimpleTypes::@6] @@ -955,7 +955,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@6->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@6->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@6->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@6->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_UNSIGNED_INT jsr assertType // [22] phi from testSimpleTypes::@6 to testSimpleTypes::@7 [phi:testSimpleTypes::@6->testSimpleTypes::@7] @@ -969,7 +969,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@7->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_INT [phi:testSimpleTypes::@7->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_INT - // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@7->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@7->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_INT jsr assertType // [24] phi from testSimpleTypes::@7 to testSimpleTypes::@8 [phi:testSimpleTypes::@7->testSimpleTypes::@8] @@ -983,7 +983,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@8->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_INT [phi:testSimpleTypes::@8->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_INT - // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@8->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@8->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_INT jsr assertType // [26] phi from testSimpleTypes::@8 to testSimpleTypes::@9 [phi:testSimpleTypes::@8->testSimpleTypes::@9] @@ -997,7 +997,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@9->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_INT [phi:testSimpleTypes::@9->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_INT - // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@9->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@9->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_INT jsr assertType // [28] phi from testSimpleTypes::@9 to testSimpleTypes::@10 [phi:testSimpleTypes::@9->testSimpleTypes::@10] @@ -1011,7 +1011,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@10->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@10->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@10->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@10->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_UNSIGNED_LONG jsr assertType // [30] phi from testSimpleTypes::@10 to testSimpleTypes::@11 [phi:testSimpleTypes::@10->testSimpleTypes::@11] @@ -1025,7 +1025,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@11->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@11->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@11->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@11->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_UNSIGNED_LONG jsr assertType // [32] phi from testSimpleTypes::@11 to testSimpleTypes::@12 [phi:testSimpleTypes::@11->testSimpleTypes::@12] @@ -1039,7 +1039,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@12->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_LONG [phi:testSimpleTypes::@12->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_LONG - // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@12->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@12->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_LONG jsr assertType // [34] phi from testSimpleTypes::@12 to testSimpleTypes::@13 [phi:testSimpleTypes::@12->testSimpleTypes::@13] @@ -1053,7 +1053,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@13->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_LONG [phi:testSimpleTypes::@13->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_LONG - // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@13->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@13->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_LONG jsr assertType // [36] phi from testSimpleTypes::@13 to testSimpleTypes::@14 [phi:testSimpleTypes::@13->testSimpleTypes::@14] @@ -1067,7 +1067,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@14->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_LONG [phi:testSimpleTypes::@14->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_LONG - // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@14->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@14->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_LONG jsr assertType // [38] phi from testSimpleTypes::@14 to testSimpleTypes::@15 [phi:testSimpleTypes::@14->testSimpleTypes::@15] @@ -1081,7 +1081,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@15->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@15->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@15->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@15->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_UNSIGNED_INT jsr assertType jmp __breturn @@ -1296,7 +1296,7 @@ main: { // main::@3 // testSimpleTypes() // [4] call testSimpleTypes - // [8] phi from main::@3 to testSimpleTypes [phi:main::@3->testSimpleTypes] -- call_phi_near + // [8] phi from main::@3 to testSimpleTypes [phi:main::@3->testSimpleTypes] jsr testSimpleTypes // main::@return // } @@ -1330,7 +1330,7 @@ testSimpleTypes: { sta.z idx // [41] phi assertType::t2#16 = TYPEID_CHAR [phi:testSimpleTypes->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_CHAR - // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_CHAR jsr assertType // [10] phi from testSimpleTypes to testSimpleTypes::@1 [phi:testSimpleTypes->testSimpleTypes::@1] @@ -1341,7 +1341,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@1->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_CHAR [phi:testSimpleTypes::@1->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_CHAR - // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes::@1->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_CHAR [phi:testSimpleTypes::@1->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_CHAR jsr assertType // [12] phi from testSimpleTypes::@1 to testSimpleTypes::@2 [phi:testSimpleTypes::@1->testSimpleTypes::@2] @@ -1352,7 +1352,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@2->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@2->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_SIGNED_CHAR - // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@2->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@2->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_SIGNED_CHAR jsr assertType // [14] phi from testSimpleTypes::@2 to testSimpleTypes::@3 [phi:testSimpleTypes::@2->testSimpleTypes::@3] @@ -1363,7 +1363,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@3->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@3->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_SIGNED_CHAR - // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@3->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_SIGNED_CHAR [phi:testSimpleTypes::@3->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_SIGNED_CHAR jsr assertType // [16] phi from testSimpleTypes::@3 to testSimpleTypes::@4 [phi:testSimpleTypes::@3->testSimpleTypes::@4] @@ -1374,7 +1374,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@4->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@4->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@4->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@4->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_UNSIGNED_INT jsr assertType // [18] phi from testSimpleTypes::@4 to testSimpleTypes::@5 [phi:testSimpleTypes::@4->testSimpleTypes::@5] @@ -1385,7 +1385,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@5->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@5->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@5->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@5->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_UNSIGNED_INT jsr assertType // [20] phi from testSimpleTypes::@5 to testSimpleTypes::@6 [phi:testSimpleTypes::@5->testSimpleTypes::@6] @@ -1396,7 +1396,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@6->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@6->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@6->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@6->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_UNSIGNED_INT jsr assertType // [22] phi from testSimpleTypes::@6 to testSimpleTypes::@7 [phi:testSimpleTypes::@6->testSimpleTypes::@7] @@ -1407,7 +1407,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@7->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_INT [phi:testSimpleTypes::@7->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_INT - // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@7->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@7->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_INT jsr assertType // [24] phi from testSimpleTypes::@7 to testSimpleTypes::@8 [phi:testSimpleTypes::@7->testSimpleTypes::@8] @@ -1418,7 +1418,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@8->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_INT [phi:testSimpleTypes::@8->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_INT - // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@8->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@8->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_INT jsr assertType // [26] phi from testSimpleTypes::@8 to testSimpleTypes::@9 [phi:testSimpleTypes::@8->testSimpleTypes::@9] @@ -1429,7 +1429,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@9->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_INT [phi:testSimpleTypes::@9->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_INT - // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@9->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_INT [phi:testSimpleTypes::@9->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_INT jsr assertType // [28] phi from testSimpleTypes::@9 to testSimpleTypes::@10 [phi:testSimpleTypes::@9->testSimpleTypes::@10] @@ -1440,7 +1440,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@10->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@10->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@10->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@10->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_UNSIGNED_LONG jsr assertType // [30] phi from testSimpleTypes::@10 to testSimpleTypes::@11 [phi:testSimpleTypes::@10->testSimpleTypes::@11] @@ -1451,7 +1451,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@11->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@11->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@11->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_LONG [phi:testSimpleTypes::@11->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_UNSIGNED_LONG jsr assertType // [32] phi from testSimpleTypes::@11 to testSimpleTypes::@12 [phi:testSimpleTypes::@11->testSimpleTypes::@12] @@ -1462,7 +1462,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@12->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_LONG [phi:testSimpleTypes::@12->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_LONG - // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@12->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@12->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_LONG jsr assertType // [34] phi from testSimpleTypes::@12 to testSimpleTypes::@13 [phi:testSimpleTypes::@12->testSimpleTypes::@13] @@ -1473,7 +1473,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@13->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_LONG [phi:testSimpleTypes::@13->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_LONG - // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@13->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@13->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_LONG jsr assertType // [36] phi from testSimpleTypes::@13 to testSimpleTypes::@14 [phi:testSimpleTypes::@13->testSimpleTypes::@14] @@ -1484,7 +1484,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@14->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_LONG [phi:testSimpleTypes::@14->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_LONG - // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@14->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_LONG [phi:testSimpleTypes::@14->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_LONG jsr assertType // [38] phi from testSimpleTypes::@14 to testSimpleTypes::@15 [phi:testSimpleTypes::@14->testSimpleTypes::@15] @@ -1495,7 +1495,7 @@ testSimpleTypes: { // [41] phi idx#44 = idx#20 [phi:testSimpleTypes::@15->assertType#0] -- register_copy // [41] phi assertType::t2#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@15->assertType#1] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT - // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@15->assertType#2] -- call_phi_near + // [41] phi assertType::t1#16 = TYPEID_UNSIGNED_INT [phi:testSimpleTypes::@15->assertType#2] -- vbuxx=vbuc1 ldx #TYPEID_UNSIGNED_INT jsr assertType // testSimpleTypes::@return diff --git a/src/test/ref/intermediates-simple.log b/src/test/ref/intermediates-simple.log index e7f494d08..e1c27b801 100644 --- a/src/test/ref/intermediates-simple.log +++ b/src/test/ref/intermediates-simple.log @@ -427,7 +427,7 @@ main: { // [10] sum::a#0 = main::i#2 -- vbuaa=vbuz1 lda.z i // [11] sum::b#0 = main::j#2 - // [12] call sum -- call_phi_near + // [12] call sum jsr sum // [13] sum::return#0 = sum::return#1 jmp __b5 @@ -593,7 +593,7 @@ main: { // [10] sum::a#0 = main::i#2 -- vbuaa=vbuz1 lda.z i // [11] sum::b#0 = main::j#2 - // [12] call sum -- call_phi_near + // [12] call sum jsr sum // [13] sum::return#0 = sum::return#1 // main::@5 diff --git a/src/test/ref/intermediates-struct.log b/src/test/ref/intermediates-struct.log index 87e4ff885..e5d380194 100644 --- a/src/test/ref/intermediates-struct.log +++ b/src/test/ref/intermediates-struct.log @@ -322,7 +322,7 @@ main: { sum_from_main: // [8] phi sum::b#2 = 2 [phi:main->sum#0] -- vbuxx=vbuc1 ldx #2 - // [8] phi sum::a#2 = 1 [phi:main->sum#1] -- call_phi_near + // [8] phi sum::a#2 = 1 [phi:main->sum#1] -- vbuaa=vbuc1 lda #1 jsr sum jmp __b1 @@ -343,7 +343,7 @@ main: { sum_from___b1: // [8] phi sum::b#2 = 4 [phi:main::@1->sum#0] -- vbuxx=vbuc1 ldx #4 - // [8] phi sum::a#2 = 3 [phi:main::@1->sum#1] -- call_phi_near + // [8] phi sum::a#2 = 3 [phi:main::@1->sum#1] -- vbuaa=vbuc1 lda #3 jsr sum jmp __b2 @@ -461,7 +461,7 @@ main: { // [8] phi from main to sum [phi:main->sum] // [8] phi sum::b#2 = 2 [phi:main->sum#0] -- vbuxx=vbuc1 ldx #2 - // [8] phi sum::a#2 = 1 [phi:main->sum#1] -- call_phi_near + // [8] phi sum::a#2 = 1 [phi:main->sum#1] -- vbuaa=vbuc1 lda #1 jsr sum // main::@1 @@ -482,7 +482,7 @@ main: { // [8] phi from main::@1 to sum [phi:main::@1->sum] // [8] phi sum::b#2 = 4 [phi:main::@1->sum#0] -- vbuxx=vbuc1 ldx #4 - // [8] phi sum::a#2 = 3 [phi:main::@1->sum#1] -- call_phi_near + // [8] phi sum::a#2 = 3 [phi:main::@1->sum#1] -- vbuaa=vbuc1 lda #3 jsr sum // main::@2 diff --git a/src/test/ref/interrupt-volatile-reuse-problem1.log b/src/test/ref/interrupt-volatile-reuse-problem1.log index 8888465a9..60e6229f4 100644 --- a/src/test/ref/interrupt-volatile-reuse-problem1.log +++ b/src/test/ref/interrupt-volatile-reuse-problem1.log @@ -184,7 +184,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [4] call main -- call_phi_near + // [4] call main jsr main jmp __breturn // __start::@return @@ -289,7 +289,7 @@ __start: { sta.z col2 // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [4] call main -- call_phi_near + // [4] call main jsr main // __start::@return // [5] return diff --git a/src/test/ref/interrupt-volatile-reuse-problem2.log b/src/test/ref/interrupt-volatile-reuse-problem2.log index 02cc05904..3922bcedf 100644 --- a/src/test/ref/interrupt-volatile-reuse-problem2.log +++ b/src/test/ref/interrupt-volatile-reuse-problem2.log @@ -360,7 +360,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -567,7 +567,7 @@ __start: { sta.z col1 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/irq-hardware-clobber-jsr.log b/src/test/ref/irq-hardware-clobber-jsr.log index 879ac1b96..c4418d11e 100644 --- a/src/test/ref/irq-hardware-clobber-jsr.log +++ b/src/test/ref/irq-hardware-clobber-jsr.log @@ -271,7 +271,7 @@ ASSEMBLER BEFORE OPTIMIZATION irq: { // interrupt(isr_hardware_clobber_entry) -- isr_hardware_all_entry sta rega+1 - // [1] call do_irq -- call_phi_near + // [1] call do_irq jsr do_irq jmp __breturn // irq::@return @@ -455,7 +455,7 @@ irq: { // interrupt(isr_hardware_clobber_entry) -- isr_hardware_all_entry sta rega+1 // do_irq() - // [1] call do_irq -- call_phi_near + // [1] call do_irq jsr do_irq // irq::@return // } diff --git a/src/test/ref/irq-idx-problem.log b/src/test/ref/irq-idx-problem.log index b1e8a310d..2b82b1652 100644 --- a/src/test/ref/irq-idx-problem.log +++ b/src/test/ref/irq-idx-problem.log @@ -407,7 +407,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -649,7 +649,7 @@ __start: { sta.z irq_idx // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/irq-local-var-overlap-problem.log b/src/test/ref/irq-local-var-overlap-problem.log index d373a75d5..e6cb4199f 100644 --- a/src/test/ref/irq-local-var-overlap-problem.log +++ b/src/test/ref/irq-local-var-overlap-problem.log @@ -977,7 +977,7 @@ irq: { // [6] *FGCOL = irq::$3 -- _deref_pbuc1=vbuaa sta FGCOL // [7] call sub_irq - // [38] phi from irq::@3 to sub_irq [phi:irq::@3->sub_irq] -- call_phi_near + // [38] phi from irq::@3 to sub_irq [phi:irq::@3->sub_irq] sub_irq_from___b3: jsr sub_irq jmp __b7 @@ -1096,7 +1096,7 @@ main: { // [29] *FGCOL = main::$1 -- _deref_pbuc1=vbuaa sta FGCOL // [30] call sub_main - // [52] phi from main::@3 to sub_main [phi:main::@3->sub_main] -- call_phi_near + // [52] phi from main::@3 to sub_main [phi:main::@3->sub_main] sub_main_from___b3: jsr sub_main jmp __b6 @@ -1554,7 +1554,7 @@ irq: { sta FGCOL // sub_irq() // [7] call sub_irq - // [38] phi from irq::@3 to sub_irq [phi:irq::@3->sub_irq] -- call_phi_near + // [38] phi from irq::@3 to sub_irq [phi:irq::@3->sub_irq] jsr sub_irq // irq::@7 // for( byte k: 0..10 ) @@ -1667,7 +1667,7 @@ main: { sta FGCOL // sub_main() // [30] call sub_main - // [52] phi from main::@3 to sub_main [phi:main::@3->sub_main] -- call_phi_near + // [52] phi from main::@3 to sub_main [phi:main::@3->sub_main] jsr sub_main // main::@6 // for( byte k: 0..10 ) diff --git a/src/test/ref/keyboard-glitch.log b/src/test/ref/keyboard-glitch.log index 81329ce03..4d3548707 100644 --- a/src/test/ref/keyboard-glitch.log +++ b/src/test/ref/keyboard-glitch.log @@ -670,7 +670,7 @@ main: { // main::@1 __b1: // [2] call menu - // [3] phi from main::@1 to menu [phi:main::@1->menu] -- call_phi_near + // [3] phi from main::@1 to menu [phi:main::@1->menu] menu_from___b1: jsr menu jmp __b1_from___b1 @@ -686,7 +686,7 @@ menu: { // [5] call keyboard_key_pressed // [27] phi from menu::@1 to keyboard_key_pressed [phi:menu::@1->keyboard_key_pressed] keyboard_key_pressed_from___b1: - // [27] phi keyboard_key_pressed::key#4 = KEY_C [phi:menu::@1->keyboard_key_pressed#0] -- call_phi_near + // [27] phi keyboard_key_pressed::key#4 = KEY_C [phi:menu::@1->keyboard_key_pressed#0] -- vbuxx=vbuc1 ldx #KEY_C jsr keyboard_key_pressed // [6] keyboard_key_pressed::return#2 = keyboard_key_pressed::return#0 @@ -702,7 +702,7 @@ menu: { jmp __b5 // menu::@5 __b5: - // [10] call pressed -- call_phi_near + // [10] call pressed jsr pressed jmp __breturn // menu::@return @@ -717,7 +717,7 @@ menu: { // [13] call keyboard_key_pressed // [27] phi from menu::@2 to keyboard_key_pressed [phi:menu::@2->keyboard_key_pressed] keyboard_key_pressed_from___b2: - // [27] phi keyboard_key_pressed::key#4 = KEY_I [phi:menu::@2->keyboard_key_pressed#0] -- call_phi_near + // [27] phi keyboard_key_pressed::key#4 = KEY_I [phi:menu::@2->keyboard_key_pressed#0] -- vbuxx=vbuc1 ldx #KEY_I jsr keyboard_key_pressed // [14] keyboard_key_pressed::return#3 = keyboard_key_pressed::return#0 @@ -745,7 +745,7 @@ menu: { // [20] call keyboard_key_pressed // [27] phi from menu::@3 to keyboard_key_pressed [phi:menu::@3->keyboard_key_pressed] keyboard_key_pressed_from___b3: - // [27] phi keyboard_key_pressed::key#4 = KEY_E [phi:menu::@3->keyboard_key_pressed#0] -- call_phi_near + // [27] phi keyboard_key_pressed::key#4 = KEY_E [phi:menu::@3->keyboard_key_pressed#0] -- vbuxx=vbuc1 ldx #KEY_E jsr keyboard_key_pressed // [21] keyboard_key_pressed::return#4 = keyboard_key_pressed::return#0 @@ -789,7 +789,7 @@ keyboard_key_pressed: { lsr // [30] keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 -- vbuxx=vbuaa tax - // [31] call keyboard_matrix_read -- call_phi_near + // [31] call keyboard_matrix_read jsr keyboard_matrix_read // [32] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 jmp __b1 @@ -817,7 +817,7 @@ pressed: { // [38] call keyboard_key_pressed // [27] phi from pressed::@1 to keyboard_key_pressed [phi:pressed::@1->keyboard_key_pressed] keyboard_key_pressed_from___b1: - // [27] phi keyboard_key_pressed::key#4 = KEY_SPACE [phi:pressed::@1->keyboard_key_pressed#0] -- call_phi_near + // [27] phi keyboard_key_pressed::key#4 = KEY_SPACE [phi:pressed::@1->keyboard_key_pressed#0] -- vbuxx=vbuc1 ldx #KEY_SPACE jsr keyboard_key_pressed // [39] keyboard_key_pressed::return#10 = keyboard_key_pressed::return#0 @@ -1043,7 +1043,7 @@ main: { __b1: // menu() // [2] call menu - // [3] phi from main::@1 to menu [phi:main::@1->menu] -- call_phi_near + // [3] phi from main::@1 to menu [phi:main::@1->menu] jsr menu jmp __b1 } @@ -1055,7 +1055,7 @@ menu: { // keyboard_key_pressed(KEY_C) // [5] call keyboard_key_pressed // [27] phi from menu::@1 to keyboard_key_pressed [phi:menu::@1->keyboard_key_pressed] - // [27] phi keyboard_key_pressed::key#4 = KEY_C [phi:menu::@1->keyboard_key_pressed#0] -- call_phi_near + // [27] phi keyboard_key_pressed::key#4 = KEY_C [phi:menu::@1->keyboard_key_pressed#0] -- vbuxx=vbuc1 ldx #KEY_C jsr keyboard_key_pressed // keyboard_key_pressed(KEY_C) @@ -1069,7 +1069,7 @@ menu: { // [9] phi from menu::@8 to menu::@5 [phi:menu::@8->menu::@5] // menu::@5 // pressed() - // [10] call pressed -- call_phi_near + // [10] call pressed jsr pressed // menu::@return // } @@ -1081,7 +1081,7 @@ menu: { // keyboard_key_pressed(KEY_I) // [13] call keyboard_key_pressed // [27] phi from menu::@2 to keyboard_key_pressed [phi:menu::@2->keyboard_key_pressed] - // [27] phi keyboard_key_pressed::key#4 = KEY_I [phi:menu::@2->keyboard_key_pressed#0] -- call_phi_near + // [27] phi keyboard_key_pressed::key#4 = KEY_I [phi:menu::@2->keyboard_key_pressed#0] -- vbuxx=vbuc1 ldx #KEY_I jsr keyboard_key_pressed // keyboard_key_pressed(KEY_I) @@ -1107,7 +1107,7 @@ menu: { // keyboard_key_pressed(KEY_E) // [20] call keyboard_key_pressed // [27] phi from menu::@3 to keyboard_key_pressed [phi:menu::@3->keyboard_key_pressed] - // [27] phi keyboard_key_pressed::key#4 = KEY_E [phi:menu::@3->keyboard_key_pressed#0] -- call_phi_near + // [27] phi keyboard_key_pressed::key#4 = KEY_E [phi:menu::@3->keyboard_key_pressed#0] -- vbuxx=vbuc1 ldx #KEY_E jsr keyboard_key_pressed // keyboard_key_pressed(KEY_E) @@ -1155,7 +1155,7 @@ keyboard_key_pressed: { // keyboard_matrix_read(rowidx) // [30] keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 -- vbuxx=vbuaa tax - // [31] call keyboard_matrix_read -- call_phi_near + // [31] call keyboard_matrix_read jsr keyboard_matrix_read // [32] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 // keyboard_key_pressed::@1 @@ -1179,7 +1179,7 @@ pressed: { // keyboard_key_pressed(KEY_SPACE) // [38] call keyboard_key_pressed // [27] phi from pressed::@1 to keyboard_key_pressed [phi:pressed::@1->keyboard_key_pressed] - // [27] phi keyboard_key_pressed::key#4 = KEY_SPACE [phi:pressed::@1->keyboard_key_pressed#0] -- call_phi_near + // [27] phi keyboard_key_pressed::key#4 = KEY_SPACE [phi:pressed::@1->keyboard_key_pressed#0] -- vbuxx=vbuc1 ldx #KEY_SPACE jsr keyboard_key_pressed // keyboard_key_pressed(KEY_SPACE) diff --git a/src/test/ref/library-constructor-1.log b/src/test/ref/library-constructor-1.log index 4b87ac3cb..0b755e7a0 100644 --- a/src/test/ref/library-constructor-1.log +++ b/src/test/ref/library-constructor-1.log @@ -177,7 +177,7 @@ __start: { // [1] my_value = 0 -- vbuz1=vbuc1 lda #0 sta.z my_value - // [2] call my_init -- call_phi_near + // [2] call my_init jsr my_init // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -185,7 +185,7 @@ __start: { // __start::@1 __b1: // [4] call main - // [8] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [8] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -207,7 +207,7 @@ my_init: { } // main main: { - // [9] call print -- call_phi_near + // [9] call print jsr print jmp __breturn // main::@return @@ -285,12 +285,12 @@ __start: { lda #0 sta.z my_value // #pragma constructor_for(my_init, print) - // [2] call my_init -- call_phi_near + // [2] call my_init jsr my_init // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [4] call main - // [8] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [8] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [5] return @@ -310,7 +310,7 @@ my_init: { // main main: { // print() - // [9] call print -- call_phi_near + // [9] call print jsr print // main::@return // } diff --git a/src/test/ref/library-constructor-3.log b/src/test/ref/library-constructor-3.log index 9319d815b..9e70da966 100644 --- a/src/test/ref/library-constructor-3.log +++ b/src/test/ref/library-constructor-3.log @@ -220,14 +220,14 @@ __start: { sta.z SCREEN lda #>0 sta.z SCREEN+1 - // [3] call init_1 -- call_phi_near + // [3] call init_1 jsr init_1 // [4] phi from __start::__init1 to __start::@2 [phi:__start::__init1->__start::@2] __b2_from___init1: jmp __b2 // __start::@2 __b2: - // [5] call init_2 -- call_phi_near + // [5] call init_2 jsr init_2 // [6] phi from __start::@2 to __start::@1 [phi:__start::@2->__start::@1] __b1_from___b2: @@ -235,7 +235,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [13] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [13] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -270,7 +270,7 @@ init_1: { } // main main: { - // [14] call print -- call_phi_near + // [14] call print jsr print jmp __breturn // main::@return @@ -363,17 +363,17 @@ __start: { sta.z SCREEN sta.z SCREEN+1 // #pragma constructor_for(init_1, print) - // [3] call init_1 -- call_phi_near + // [3] call init_1 jsr init_1 // [4] phi from __start::__init1 to __start::@2 [phi:__start::__init1->__start::@2] // __start::@2 // #pragma constructor_for(init_2, print) - // [5] call init_2 -- call_phi_near + // [5] call init_2 jsr init_2 // [6] phi from __start::@2 to __start::@1 [phi:__start::@2->__start::@1] // __start::@1 // [7] call main - // [13] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [13] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [8] return @@ -406,7 +406,7 @@ init_1: { // main main: { // print() - // [14] call print -- call_phi_near + // [14] call print jsr print // main::@return // } diff --git a/src/test/ref/linegen.log b/src/test/ref/linegen.log index 3862c529e..a5ce9bad7 100644 --- a/src/test/ref/linegen.log +++ b/src/test/ref/linegen.log @@ -2465,7 +2465,7 @@ main: { sta.z lin16u_gen.min lda #>$22d sta.z lin16u_gen.min+1 - // [58] phi lin16u_gen::max#3 = $7461 [phi:main->lin16u_gen#2] -- call_phi_near + // [58] phi lin16u_gen::max#3 = $7461 [phi:main->lin16u_gen#2] -- vwuz1=vwuc1 lda #<$7461 sta.z lin16u_gen.max lda #>$7461 @@ -2489,7 +2489,7 @@ main: { sta.z lin16u_gen.min lda #>$79cb sta.z lin16u_gen.min+1 - // [58] phi lin16u_gen::max#3 = $f781 [phi:main::@4->lin16u_gen#2] -- call_phi_near + // [58] phi lin16u_gen::max#3 = $f781 [phi:main::@4->lin16u_gen#2] -- vwuz1=vwuc1 lda #<$f781 sta.z lin16u_gen.max lda #>$f781 @@ -2513,7 +2513,7 @@ main: { sta.z lin16u_gen.min lda #>0 sta.z lin16u_gen.min+1 - // [58] phi lin16u_gen::max#3 = $6488 [phi:main::@5->lin16u_gen#2] -- call_phi_near + // [58] phi lin16u_gen::max#3 = $6488 [phi:main::@5->lin16u_gen#2] -- vwuz1=vwuc1 lda #<$6488 sta.z lin16u_gen.max lda #>$6488 @@ -2525,7 +2525,7 @@ main: { // main::@6 __b6: // [7] call print_cls - // [78] phi from main::@6 to print_cls [phi:main::@6->print_cls] -- call_phi_near + // [78] phi from main::@6 to print_cls [phi:main::@6->print_cls] print_cls_from___b6: jsr print_cls // [8] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -2541,7 +2541,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [81] phi print_str::str#13 = main::str [phi:main::@7->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str [phi:main::@7->print_str#1] -- pbuz1=pbuc1 lda #str @@ -2555,7 +2555,7 @@ main: { // [11] call print_uint // [88] phi from main::@8 to print_uint [phi:main::@8->print_uint] print_uint_from___b8: - // [88] phi print_uint::w#10 = $22d [phi:main::@8->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = $22d [phi:main::@8->print_uint#0] -- vwuz1=vwuc1 lda #<$22d sta.z print_uint.w lda #>$22d @@ -2570,7 +2570,7 @@ main: { // [81] phi from main::@9 to print_str [phi:main::@9->print_str] print_str_from___b9: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@9->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@9->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@9->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2584,7 +2584,7 @@ main: { // [15] call print_uint // [88] phi from main::@10 to print_uint [phi:main::@10->print_uint] print_uint_from___b10: - // [88] phi print_uint::w#10 = $79cb [phi:main::@10->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = $79cb [phi:main::@10->print_uint#0] -- vwuz1=vwuc1 lda #<$79cb sta.z print_uint.w lda #>$79cb @@ -2599,7 +2599,7 @@ main: { // [81] phi from main::@11 to print_str [phi:main::@11->print_str] print_str_from___b11: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@11->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@11->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@11->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2613,7 +2613,7 @@ main: { // [19] call print_uint // [88] phi from main::@12 to print_uint [phi:main::@12->print_uint] print_uint_from___b12: - // [88] phi print_uint::w#10 = 0 [phi:main::@12->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = 0 [phi:main::@12->print_uint#0] -- vwuz1=vbuc1 lda #<0 sta.z print_uint.w lda #>0 @@ -2627,7 +2627,7 @@ main: { // [21] call print_ln // [94] phi from main::@13 to print_ln [phi:main::@13->print_ln] print_ln_from___b13: - // [94] phi print_line_cursor#23 = print_screen#0 [phi:main::@13->print_ln#0] -- call_phi_near + // [94] phi print_line_cursor#23 = print_screen#0 [phi:main::@13->print_ln#0] -- pbuz1=pbuc1 lda #print_screen @@ -2657,7 +2657,7 @@ main: { // [81] phi from main::@3 to print_str [phi:main::@3->print_str] print_str_from___b3: // [81] phi print_char_cursor#89 = print_char_cursor#100 [phi:main::@3->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str [phi:main::@3->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str [phi:main::@3->print_str#1] -- pbuz1=pbuc1 lda #str @@ -2671,7 +2671,7 @@ main: { // [27] call print_uint // [88] phi from main::@22 to print_uint [phi:main::@22->print_uint] print_uint_from___b22: - // [88] phi print_uint::w#10 = $7461 [phi:main::@22->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = $7461 [phi:main::@22->print_uint#0] -- vwuz1=vwuc1 lda #<$7461 sta.z print_uint.w lda #>$7461 @@ -2686,7 +2686,7 @@ main: { // [81] phi from main::@23 to print_str [phi:main::@23->print_str] print_str_from___b23: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@23->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@23->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@23->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2700,7 +2700,7 @@ main: { // [31] call print_uint // [88] phi from main::@24 to print_uint [phi:main::@24->print_uint] print_uint_from___b24: - // [88] phi print_uint::w#10 = $f781 [phi:main::@24->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = $f781 [phi:main::@24->print_uint#0] -- vwuz1=vwuc1 lda #<$f781 sta.z print_uint.w lda #>$f781 @@ -2715,7 +2715,7 @@ main: { // [81] phi from main::@25 to print_str [phi:main::@25->print_str] print_str_from___b25: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@25->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@25->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@25->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2729,7 +2729,7 @@ main: { // [35] call print_uint // [88] phi from main::@26 to print_uint [phi:main::@26->print_uint] print_uint_from___b26: - // [88] phi print_uint::w#10 = $6488 [phi:main::@26->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = $6488 [phi:main::@26->print_uint#0] -- vwuz1=vwuc1 lda #<$6488 sta.z print_uint.w lda #>$6488 @@ -2743,7 +2743,7 @@ main: { // [37] call print_ln // [94] phi from main::@27 to print_ln [phi:main::@27->print_ln] print_ln_from___b27: - // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@27->print_ln#0] -- call_phi_near + // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@27->print_ln#0] -- register_copy jsr print_ln jmp __breturn // main::@return @@ -2763,7 +2763,7 @@ main: { // [99] phi from main::@2 to print_uchar [phi:main::@2->print_uchar] print_uchar_from___b2: // [99] phi print_char_cursor#84 = print_char_cursor#104 [phi:main::@2->print_uchar#0] -- register_copy - // [99] phi print_uchar::b#3 = print_uchar::b#2 [phi:main::@2->print_uchar#1] -- call_phi_near + // [99] phi print_uchar::b#3 = print_uchar::b#2 [phi:main::@2->print_uchar#1] -- register_copy jsr print_uchar // [42] phi from main::@2 to main::@14 [phi:main::@2->main::@14] __b14_from___b2: @@ -2774,7 +2774,7 @@ main: { // [81] phi from main::@14 to print_str [phi:main::@14->print_str] print_str_from___b14: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@14->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@14->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@14->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2796,7 +2796,7 @@ main: { // [46] call print_uint // [88] phi from main::@15 to print_uint [phi:main::@15->print_uint] print_uint_from___b15: - // [88] phi print_uint::w#10 = print_uint::w#3 [phi:main::@15->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = print_uint::w#3 [phi:main::@15->print_uint#0] -- register_copy jsr print_uint // [47] phi from main::@15 to main::@16 [phi:main::@15->main::@16] __b16_from___b15: @@ -2807,7 +2807,7 @@ main: { // [81] phi from main::@16 to print_str [phi:main::@16->print_str] print_str_from___b16: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@16->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@16->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@16->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2825,7 +2825,7 @@ main: { // [50] call print_uint // [88] phi from main::@17 to print_uint [phi:main::@17->print_uint] print_uint_from___b17: - // [88] phi print_uint::w#10 = print_uint::w#4 [phi:main::@17->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = print_uint::w#4 [phi:main::@17->print_uint#0] -- register_copy jsr print_uint // [51] phi from main::@17 to main::@18 [phi:main::@17->main::@18] __b18_from___b17: @@ -2836,7 +2836,7 @@ main: { // [81] phi from main::@18 to print_str [phi:main::@18->print_str] print_str_from___b18: // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@18->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@18->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@18->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2854,7 +2854,7 @@ main: { // [54] call print_uint // [88] phi from main::@19 to print_uint [phi:main::@19->print_uint] print_uint_from___b19: - // [88] phi print_uint::w#10 = print_uint::w#5 [phi:main::@19->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = print_uint::w#5 [phi:main::@19->print_uint#0] -- register_copy jsr print_uint // [55] phi from main::@19 to main::@20 [phi:main::@19->main::@20] __b20_from___b19: @@ -2864,7 +2864,7 @@ main: { // [56] call print_ln // [94] phi from main::@20 to print_ln [phi:main::@20->print_ln] print_ln_from___b20: - // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@20->print_ln#0] -- call_phi_near + // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@20->print_ln#0] -- register_copy jsr print_ln jmp __b21 // main::@21 @@ -2914,7 +2914,7 @@ lin16u_gen: { // [107] phi from lin16u_gen to divr16u [phi:lin16u_gen->divr16u] divr16u_from_lin16u_gen: // [107] phi divr16u::dividend#5 = divr16u::dividend#1 [phi:lin16u_gen->divr16u#0] -- register_copy - // [107] phi divr16u::rem#10 = 0 [phi:lin16u_gen->divr16u#1] -- call_phi_near + // [107] phi divr16u::rem#10 = 0 [phi:lin16u_gen->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta.z divr16u.rem lda #>0 @@ -2938,7 +2938,7 @@ lin16u_gen: { sta.z divr16u.dividend lda #>0 sta.z divr16u.dividend+1 - // [107] phi divr16u::rem#10 = divr16u::rem#4 [phi:lin16u_gen::@3->divr16u#1] -- call_phi_near + // [107] phi divr16u::rem#10 = divr16u::rem#4 [phi:lin16u_gen::@3->divr16u#1] -- register_copy jsr divr16u // [66] divr16u::return#3 = divr16u::return#0 jmp __b4 @@ -3039,7 +3039,7 @@ lin16u_gen: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [79] call memset - // [125] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [125] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -3080,7 +3080,7 @@ print_str: { // [131] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [131] phi print_char_cursor#51 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [131] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [131] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char jmp __b3 // print_str::@3 @@ -3103,7 +3103,7 @@ print_uint: { // [99] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [99] phi print_char_cursor#84 = print_char_cursor#1 [phi:print_uint->print_uchar#0] -- register_copy - // [99] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [99] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -3114,7 +3114,7 @@ print_uint: { // [99] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [99] phi print_char_cursor#84 = print_char_cursor#10 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [99] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [99] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -3173,7 +3173,7 @@ print_uchar: { // [131] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [131] phi print_char_cursor#51 = print_char_cursor#84 [phi:print_uchar->print_char#0] -- register_copy - // [131] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near + // [131] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -3187,7 +3187,7 @@ print_uchar: { // [131] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [131] phi print_char_cursor#51 = print_char_cursor#10 [phi:print_uchar::@1->print_char#0] -- register_copy - // [131] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [131] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -3755,7 +3755,7 @@ main: { sta.z lin16u_gen.min lda #>$22d sta.z lin16u_gen.min+1 - // [58] phi lin16u_gen::max#3 = $7461 [phi:main->lin16u_gen#2] -- call_phi_near + // [58] phi lin16u_gen::max#3 = $7461 [phi:main->lin16u_gen#2] -- vwuz1=vwuc1 lda #<$7461 sta.z lin16u_gen.max lda #>$7461 @@ -3776,7 +3776,7 @@ main: { sta.z lin16u_gen.min lda #>$79cb sta.z lin16u_gen.min+1 - // [58] phi lin16u_gen::max#3 = $f781 [phi:main::@4->lin16u_gen#2] -- call_phi_near + // [58] phi lin16u_gen::max#3 = $f781 [phi:main::@4->lin16u_gen#2] -- vwuz1=vwuc1 lda #<$f781 sta.z lin16u_gen.max lda #>$f781 @@ -3796,7 +3796,7 @@ main: { lda #<0 sta.z lin16u_gen.min sta.z lin16u_gen.min+1 - // [58] phi lin16u_gen::max#3 = $6488 [phi:main::@5->lin16u_gen#2] -- call_phi_near + // [58] phi lin16u_gen::max#3 = $6488 [phi:main::@5->lin16u_gen#2] -- vwuz1=vwuc1 lda #<$6488 sta.z lin16u_gen.max lda #>$6488 @@ -3806,7 +3806,7 @@ main: { // main::@6 // print_cls() // [7] call print_cls - // [78] phi from main::@6 to print_cls [phi:main::@6->print_cls] -- call_phi_near + // [78] phi from main::@6 to print_cls [phi:main::@6->print_cls] jsr print_cls // [8] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 @@ -3818,7 +3818,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [81] phi print_str::str#13 = main::str [phi:main::@7->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str [phi:main::@7->print_str#1] -- pbuz1=pbuc1 lda #str @@ -3829,7 +3829,7 @@ main: { // print_uint(557) // [11] call print_uint // [88] phi from main::@8 to print_uint [phi:main::@8->print_uint] - // [88] phi print_uint::w#10 = $22d [phi:main::@8->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = $22d [phi:main::@8->print_uint#0] -- vwuz1=vwuc1 lda #<$22d sta.z print_uint.w lda #>$22d @@ -3841,7 +3841,7 @@ main: { // [13] call print_str // [81] phi from main::@9 to print_str [phi:main::@9->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@9->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@9->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@9->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -3852,7 +3852,7 @@ main: { // print_uint(31179) // [15] call print_uint // [88] phi from main::@10 to print_uint [phi:main::@10->print_uint] - // [88] phi print_uint::w#10 = $79cb [phi:main::@10->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = $79cb [phi:main::@10->print_uint#0] -- vwuz1=vwuc1 lda #<$79cb sta.z print_uint.w lda #>$79cb @@ -3864,7 +3864,7 @@ main: { // [17] call print_str // [81] phi from main::@11 to print_str [phi:main::@11->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@11->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@11->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@11->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -3875,7 +3875,7 @@ main: { // print_uint(0) // [19] call print_uint // [88] phi from main::@12 to print_uint [phi:main::@12->print_uint] - // [88] phi print_uint::w#10 = 0 [phi:main::@12->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = 0 [phi:main::@12->print_uint#0] -- vwuz1=vbuc1 lda #<0 sta.z print_uint.w sta.z print_uint.w+1 @@ -3885,7 +3885,7 @@ main: { // print_ln() // [21] call print_ln // [94] phi from main::@13 to print_ln [phi:main::@13->print_ln] - // [94] phi print_line_cursor#23 = print_screen#0 [phi:main::@13->print_ln#0] -- call_phi_near + // [94] phi print_line_cursor#23 = print_screen#0 [phi:main::@13->print_ln#0] -- pbuz1=pbuc1 lda #print_screen @@ -3912,7 +3912,7 @@ main: { // [25] call print_str // [81] phi from main::@3 to print_str [phi:main::@3->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#100 [phi:main::@3->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str [phi:main::@3->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str [phi:main::@3->print_str#1] -- pbuz1=pbuc1 lda #str @@ -3923,7 +3923,7 @@ main: { // print_uint(29793) // [27] call print_uint // [88] phi from main::@22 to print_uint [phi:main::@22->print_uint] - // [88] phi print_uint::w#10 = $7461 [phi:main::@22->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = $7461 [phi:main::@22->print_uint#0] -- vwuz1=vwuc1 lda #<$7461 sta.z print_uint.w lda #>$7461 @@ -3935,7 +3935,7 @@ main: { // [29] call print_str // [81] phi from main::@23 to print_str [phi:main::@23->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@23->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@23->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@23->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -3946,7 +3946,7 @@ main: { // print_uint(63361) // [31] call print_uint // [88] phi from main::@24 to print_uint [phi:main::@24->print_uint] - // [88] phi print_uint::w#10 = $f781 [phi:main::@24->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = $f781 [phi:main::@24->print_uint#0] -- vwuz1=vwuc1 lda #<$f781 sta.z print_uint.w lda #>$f781 @@ -3958,7 +3958,7 @@ main: { // [33] call print_str // [81] phi from main::@25 to print_str [phi:main::@25->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@25->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@25->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@25->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -3969,7 +3969,7 @@ main: { // print_uint($6488) // [35] call print_uint // [88] phi from main::@26 to print_uint [phi:main::@26->print_uint] - // [88] phi print_uint::w#10 = $6488 [phi:main::@26->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = $6488 [phi:main::@26->print_uint#0] -- vwuz1=vwuc1 lda #<$6488 sta.z print_uint.w lda #>$6488 @@ -3980,7 +3980,7 @@ main: { // print_ln() // [37] call print_ln // [94] phi from main::@27 to print_ln [phi:main::@27->print_ln] - // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@27->print_ln#0] -- call_phi_near + // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@27->print_ln#0] -- register_copy jsr print_ln // main::@return // } @@ -4000,7 +4000,7 @@ main: { // [41] call print_uchar // [99] phi from main::@2 to print_uchar [phi:main::@2->print_uchar] // [99] phi print_char_cursor#84 = print_char_cursor#104 [phi:main::@2->print_uchar#0] -- register_copy - // [99] phi print_uchar::b#3 = print_uchar::b#2 [phi:main::@2->print_uchar#1] -- call_phi_near + // [99] phi print_uchar::b#3 = print_uchar::b#2 [phi:main::@2->print_uchar#1] -- register_copy jsr print_uchar // [42] phi from main::@2 to main::@14 [phi:main::@2->main::@14] // main::@14 @@ -4008,7 +4008,7 @@ main: { // [43] call print_str // [81] phi from main::@14 to print_str [phi:main::@14->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@14->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@14->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@14->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -4028,7 +4028,7 @@ main: { sta.z print_uint.w+1 // [46] call print_uint // [88] phi from main::@15 to print_uint [phi:main::@15->print_uint] - // [88] phi print_uint::w#10 = print_uint::w#3 [phi:main::@15->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = print_uint::w#3 [phi:main::@15->print_uint#0] -- register_copy jsr print_uint // [47] phi from main::@15 to main::@16 [phi:main::@15->main::@16] // main::@16 @@ -4036,7 +4036,7 @@ main: { // [48] call print_str // [81] phi from main::@16 to print_str [phi:main::@16->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@16->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@16->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@16->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -4052,7 +4052,7 @@ main: { sta.z print_uint.w+1 // [50] call print_uint // [88] phi from main::@17 to print_uint [phi:main::@17->print_uint] - // [88] phi print_uint::w#10 = print_uint::w#4 [phi:main::@17->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = print_uint::w#4 [phi:main::@17->print_uint#0] -- register_copy jsr print_uint // [51] phi from main::@17 to main::@18 [phi:main::@17->main::@18] // main::@18 @@ -4060,7 +4060,7 @@ main: { // [52] call print_str // [81] phi from main::@18 to print_str [phi:main::@18->print_str] // [81] phi print_char_cursor#89 = print_char_cursor#10 [phi:main::@18->print_str#0] -- register_copy - // [81] phi print_str::str#13 = main::str1 [phi:main::@18->print_str#1] -- call_phi_near + // [81] phi print_str::str#13 = main::str1 [phi:main::@18->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -4076,14 +4076,14 @@ main: { sta.z print_uint.w+1 // [54] call print_uint // [88] phi from main::@19 to print_uint [phi:main::@19->print_uint] - // [88] phi print_uint::w#10 = print_uint::w#5 [phi:main::@19->print_uint#0] -- call_phi_near + // [88] phi print_uint::w#10 = print_uint::w#5 [phi:main::@19->print_uint#0] -- register_copy jsr print_uint // [55] phi from main::@19 to main::@20 [phi:main::@19->main::@20] // main::@20 // print_ln() // [56] call print_ln // [94] phi from main::@20 to print_ln [phi:main::@20->print_ln] - // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@20->print_ln#0] -- call_phi_near + // [94] phi print_line_cursor#23 = print_line_cursor#0 [phi:main::@20->print_ln#0] -- register_copy jsr print_ln // main::@21 // for(byte i=0; i<20; i++) @@ -4132,7 +4132,7 @@ lin16u_gen: { // [61] call divr16u // [107] phi from lin16u_gen to divr16u [phi:lin16u_gen->divr16u] // [107] phi divr16u::dividend#5 = divr16u::dividend#1 [phi:lin16u_gen->divr16u#0] -- register_copy - // [107] phi divr16u::rem#10 = 0 [phi:lin16u_gen->divr16u#1] -- call_phi_near + // [107] phi divr16u::rem#10 = 0 [phi:lin16u_gen->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta.z divr16u.rem sta.z divr16u.rem+1 @@ -4153,7 +4153,7 @@ lin16u_gen: { lda #<0 sta.z divr16u.dividend sta.z divr16u.dividend+1 - // [107] phi divr16u::rem#10 = divr16u::rem#4 [phi:lin16u_gen::@3->divr16u#1] -- call_phi_near + // [107] phi divr16u::rem#10 = divr16u::rem#4 [phi:lin16u_gen::@3->divr16u#1] -- register_copy jsr divr16u // word stepf = divr16u(0, length-1, rem16u) // [66] divr16u::return#3 = divr16u::return#0 @@ -4255,7 +4255,7 @@ lin16u_gen: { print_cls: { // memset(print_screen, ' ', 1000) // [79] call memset - // [125] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [125] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -4291,7 +4291,7 @@ print_str: { // [86] call print_char // [131] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [131] phi print_char_cursor#51 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [131] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [131] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char // print_str::@3 // print_char(*(str++)); @@ -4313,7 +4313,7 @@ print_uint: { // [90] call print_uchar // [99] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [99] phi print_char_cursor#84 = print_char_cursor#1 [phi:print_uint->print_uchar#0] -- register_copy - // [99] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [99] phi print_uchar::b#3 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -4322,7 +4322,7 @@ print_uint: { // [92] call print_uchar // [99] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [99] phi print_char_cursor#84 = print_char_cursor#10 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [99] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [99] phi print_uchar::b#3 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@return // } @@ -4379,7 +4379,7 @@ print_uchar: { // Table of hexadecimal digits // [131] phi from print_uchar to print_char [phi:print_uchar->print_char] // [131] phi print_char_cursor#51 = print_char_cursor#84 [phi:print_uchar->print_char#0] -- register_copy - // [131] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near + // [131] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -4392,7 +4392,7 @@ print_uchar: { // [105] call print_char // [131] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [131] phi print_char_cursor#51 = print_char_cursor#10 [phi:print_uchar::@1->print_char#0] -- register_copy - // [131] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [131] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/literal-word-pointer-0.log b/src/test/ref/literal-word-pointer-0.log index f4f8a8669..cf77457ea 100644 --- a/src/test/ref/literal-word-pointer-0.log +++ b/src/test/ref/literal-word-pointer-0.log @@ -119,7 +119,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call print -- call_phi_near + // [1] call print jsr print jmp __breturn // main::@return @@ -182,7 +182,7 @@ Score: 28 // main main: { // print("qwe") - // [1] call print -- call_phi_near + // [1] call print jsr print // main::@return // } diff --git a/src/test/ref/literal-word-pointer-1.log b/src/test/ref/literal-word-pointer-1.log index d5311dfc3..1cbc5c0cf 100644 --- a/src/test/ref/literal-word-pointer-1.log +++ b/src/test/ref/literal-word-pointer-1.log @@ -120,7 +120,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call print -- call_phi_near + // [1] call print jsr print jmp __breturn // main::@return @@ -183,7 +183,7 @@ Score: 28 // main main: { // print("qwe") - // [1] call print -- call_phi_near + // [1] call print jsr print // main::@return // } diff --git a/src/test/ref/liverange-1.log b/src/test/ref/liverange-1.log index d04ec4df2..cf178a468 100644 --- a/src/test/ref/liverange-1.log +++ b/src/test/ref/liverange-1.log @@ -208,7 +208,7 @@ main: { out_from_main: // [5] phi idx#11 = 0 [phi:main->out#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi out::c#2 = 'c' [phi:main->out#1] -- call_phi_near + // [5] phi out::c#2 = 'c' [phi:main->out#1] -- vbuaa=vbuc1 lda #'c' jsr out // [2] phi from main to main::@1 [phi:main->main::@1] @@ -220,7 +220,7 @@ main: { // [5] phi from main::@1 to out [phi:main::@1->out] out_from___b1: // [5] phi idx#11 = idx#12 [phi:main::@1->out#0] -- register_copy - // [5] phi out::c#2 = 'm' [phi:main::@1->out#1] -- call_phi_near + // [5] phi out::c#2 = 'm' [phi:main::@1->out#1] -- vbuaa=vbuc1 lda #'m' jsr out jmp __breturn @@ -297,7 +297,7 @@ main: { // [5] phi from main to out [phi:main->out] // [5] phi idx#11 = 0 [phi:main->out#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi out::c#2 = 'c' [phi:main->out#1] -- call_phi_near + // [5] phi out::c#2 = 'c' [phi:main->out#1] -- vbuaa=vbuc1 lda #'c' jsr out // [2] phi from main to main::@1 [phi:main->main::@1] @@ -306,7 +306,7 @@ main: { // [3] call out // [5] phi from main::@1 to out [phi:main::@1->out] // [5] phi idx#11 = idx#12 [phi:main::@1->out#0] -- register_copy - // [5] phi out::c#2 = 'm' [phi:main::@1->out#1] -- call_phi_near + // [5] phi out::c#2 = 'm' [phi:main::@1->out#1] -- vbuaa=vbuc1 lda #'m' jsr out // main::@return diff --git a/src/test/ref/liverange-10.log b/src/test/ref/liverange-10.log index f43be339a..9d8e362be 100644 --- a/src/test/ref/liverange-10.log +++ b/src/test/ref/liverange-10.log @@ -678,7 +678,7 @@ main: { sta.z outsw.sw lda.z sw+1 sta.z outsw.sw+1 - // [3] call outsw -- call_phi_near + // [3] call outsw jsr outsw jmp __b3 // main::@3 @@ -714,7 +714,7 @@ main: { // [20] phi from main::@2 to outw [phi:main::@2->outw] outw_from___b2: // [20] phi idx#35 = idx#11 [phi:main::@2->outw#0] -- register_copy - // [20] phi outw::w#2 = outw::w#0 [phi:main::@2->outw#1] -- call_phi_near + // [20] phi outw::w#2 = outw::w#0 [phi:main::@2->outw#1] -- register_copy jsr outw jmp __b4 // main::@4 @@ -753,7 +753,7 @@ outsw: { out_from___b2: // [38] phi out::c#5 = '-' [phi:outsw::@2->out#0] -- vbuaa=vbuc1 lda #'-' - // [38] phi idx#27 = idx#31 [phi:outsw::@2->out#1] -- call_phi_near + // [38] phi idx#27 = idx#31 [phi:outsw::@2->out#1] -- register_copy jsr out jmp __b3 // outsw::@3 @@ -779,7 +779,7 @@ outsw: { // [20] phi from outsw::@1 to outw [phi:outsw::@1->outw] outw_from___b1: // [20] phi idx#35 = idx#33 [phi:outsw::@1->outw#0] -- register_copy - // [20] phi outw::w#2 = outw::w#1 [phi:outsw::@1->outw#1] -- call_phi_near + // [20] phi outw::w#2 = outw::w#1 [phi:outsw::@1->outw#1] -- register_copy jsr outw jmp __breturn // outsw::@return @@ -805,7 +805,7 @@ outw: { // [38] phi from outw to out [phi:outw->out] out_from_outw: // [38] phi out::c#5 = out::c#1 [phi:outw->out#0] -- register_copy - // [38] phi idx#27 = idx#35 [phi:outw->out#1] -- call_phi_near + // [38] phi idx#27 = idx#35 [phi:outw->out#1] -- register_copy jsr out jmp __b1 // outw::@1 @@ -821,7 +821,7 @@ outw: { // [38] phi from outw::@1 to out [phi:outw::@1->out] out_from___b1: // [38] phi out::c#5 = out::c#2 [phi:outw::@1->out#0] -- register_copy - // [38] phi idx#27 = idx#11 [phi:outw::@1->out#1] -- call_phi_near + // [38] phi idx#27 = idx#11 [phi:outw::@1->out#1] -- register_copy jsr out jmp __b2 // outw::@2 @@ -840,7 +840,7 @@ outw: { // [38] phi from outw::@2 to out [phi:outw::@2->out] out_from___b2: // [38] phi out::c#5 = out::c#3 [phi:outw::@2->out#0] -- register_copy - // [38] phi idx#27 = idx#11 [phi:outw::@2->out#1] -- call_phi_near + // [38] phi idx#27 = idx#11 [phi:outw::@2->out#1] -- register_copy jsr out jmp __b3 // outw::@3 @@ -856,7 +856,7 @@ outw: { // [38] phi from outw::@3 to out [phi:outw::@3->out] out_from___b3: // [38] phi out::c#5 = out::c#4 [phi:outw::@3->out#0] -- register_copy - // [38] phi idx#27 = idx#11 [phi:outw::@3->out#1] -- call_phi_near + // [38] phi idx#27 = idx#11 [phi:outw::@3->out#1] -- register_copy jsr out jmp __breturn // outw::@return @@ -1033,7 +1033,7 @@ main: { sta.z outsw.sw lda.z sw+1 sta.z outsw.sw+1 - // [3] call outsw -- call_phi_near + // [3] call outsw jsr outsw // main::@3 // for(signed int sw: -20..19 ) @@ -1063,7 +1063,7 @@ main: { // [8] call outw // [20] phi from main::@2 to outw [phi:main::@2->outw] // [20] phi idx#35 = idx#11 [phi:main::@2->outw#0] -- register_copy - // [20] phi outw::w#2 = outw::w#0 [phi:main::@2->outw#1] -- call_phi_near + // [20] phi outw::w#2 = outw::w#0 [phi:main::@2->outw#1] -- register_copy jsr outw // main::@4 // for(unsigned int w: 0..39 ) @@ -1098,7 +1098,7 @@ outsw: { // [38] phi from outsw::@2 to out [phi:outsw::@2->out] // [38] phi out::c#5 = '-' [phi:outsw::@2->out#0] -- vbuaa=vbuc1 lda #'-' - // [38] phi idx#27 = idx#31 [phi:outsw::@2->out#1] -- call_phi_near + // [38] phi idx#27 = idx#31 [phi:outsw::@2->out#1] -- register_copy jsr out // outsw::@3 // sw = -sw @@ -1120,7 +1120,7 @@ outsw: { // [18] call outw // [20] phi from outsw::@1 to outw [phi:outsw::@1->outw] // [20] phi idx#35 = idx#33 [phi:outsw::@1->outw#0] -- register_copy - // [20] phi outw::w#2 = outw::w#1 [phi:outsw::@1->outw#1] -- call_phi_near + // [20] phi outw::w#2 = outw::w#1 [phi:outsw::@1->outw#1] -- register_copy jsr outw // outsw::@return // } @@ -1147,7 +1147,7 @@ outw: { // [24] call out // [38] phi from outw to out [phi:outw->out] // [38] phi out::c#5 = out::c#1 [phi:outw->out#0] -- register_copy - // [38] phi idx#27 = idx#35 [phi:outw->out#1] -- call_phi_near + // [38] phi idx#27 = idx#35 [phi:outw->out#1] -- register_copy jsr out // outw::@1 // BYTE1(w) @@ -1163,7 +1163,7 @@ outw: { // [28] call out // [38] phi from outw::@1 to out [phi:outw::@1->out] // [38] phi out::c#5 = out::c#2 [phi:outw::@1->out#0] -- register_copy - // [38] phi idx#27 = idx#11 [phi:outw::@1->out#1] -- call_phi_near + // [38] phi idx#27 = idx#11 [phi:outw::@1->out#1] -- register_copy jsr out // outw::@2 // BYTE0(w) @@ -1182,7 +1182,7 @@ outw: { // [32] call out // [38] phi from outw::@2 to out [phi:outw::@2->out] // [38] phi out::c#5 = out::c#3 [phi:outw::@2->out#0] -- register_copy - // [38] phi idx#27 = idx#11 [phi:outw::@2->out#1] -- call_phi_near + // [38] phi idx#27 = idx#11 [phi:outw::@2->out#1] -- register_copy jsr out // outw::@3 // BYTE0(w) @@ -1198,7 +1198,7 @@ outw: { // [36] call out // [38] phi from outw::@3 to out [phi:outw::@3->out] // [38] phi out::c#5 = out::c#4 [phi:outw::@3->out#0] -- register_copy - // [38] phi idx#27 = idx#11 [phi:outw::@3->out#1] -- call_phi_near + // [38] phi idx#27 = idx#11 [phi:outw::@3->out#1] -- register_copy jsr out // outw::@return // } diff --git a/src/test/ref/liverange-2.log b/src/test/ref/liverange-2.log index 87bd1b501..5c92c0723 100644 --- a/src/test/ref/liverange-2.log +++ b/src/test/ref/liverange-2.log @@ -343,7 +343,7 @@ main: { adc.z a // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print -- call_phi_near + // [7] call print jsr print jmp __b6 // main::@6 @@ -499,7 +499,7 @@ main: { // print(b, ca) // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print -- call_phi_near + // [7] call print jsr print // main::@6 // for( char c: 0..100 ) diff --git a/src/test/ref/liverange-3.log b/src/test/ref/liverange-3.log index d434831cd..ba653de71 100644 --- a/src/test/ref/liverange-3.log +++ b/src/test/ref/liverange-3.log @@ -350,7 +350,7 @@ main: { adc.z a // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print -- call_phi_near + // [7] call print jsr print jmp __b6 // main::@6 @@ -508,7 +508,7 @@ main: { // print(b, ca) // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print -- call_phi_near + // [7] call print jsr print // main::@6 // for( char c: 0..100 ) diff --git a/src/test/ref/liverange-4.log b/src/test/ref/liverange-4.log index 8b05758c7..1a9b9083e 100644 --- a/src/test/ref/liverange-4.log +++ b/src/test/ref/liverange-4.log @@ -394,7 +394,7 @@ main: { adc.z a // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print -- call_phi_near + // [7] call print jsr print jmp __b6 // main::@6 @@ -432,7 +432,7 @@ main: { print: { // [15] out::b#0 = print::b#0 // [16] out::ca#0 = print::ca#0 - // [17] call out -- call_phi_near + // [17] call out jsr out jmp __breturn // print::@return @@ -572,7 +572,7 @@ main: { // print(b, ca) // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print -- call_phi_near + // [7] call print jsr print // main::@6 // for( char c: 0..100 ) @@ -607,7 +607,7 @@ print: { // out(b, ca) // [15] out::b#0 = print::b#0 // [16] out::ca#0 = print::ca#0 - // [17] call out -- call_phi_near + // [17] call out jsr out // print::@return // } diff --git a/src/test/ref/liverange-5.log b/src/test/ref/liverange-5.log index ff19a3bcd..1fd2e49e2 100644 --- a/src/test/ref/liverange-5.log +++ b/src/test/ref/liverange-5.log @@ -401,7 +401,7 @@ main: { adc.z a // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print -- call_phi_near + // [7] call print jsr print jmp __b6 // main::@6 @@ -439,7 +439,7 @@ main: { print: { // [15] out::b#0 = print::b#0 // [16] out::ca#0 = print::ca#0 - // [17] call out -- call_phi_near + // [17] call out jsr out jmp __breturn // print::@return @@ -581,7 +581,7 @@ main: { // print(b, ca) // [5] print::b#0 = main::b#4 // [6] print::ca#0 = main::ca#0 - // [7] call print -- call_phi_near + // [7] call print jsr print // main::@6 // for( char c: 0..100 ) @@ -616,7 +616,7 @@ print: { // out(b, ca) // [15] out::b#0 = print::b#0 // [16] out::ca#0 = print::ca#0 - // [17] call out -- call_phi_near + // [17] call out jsr out // print::@return // } diff --git a/src/test/ref/liverange-6.log b/src/test/ref/liverange-6.log index 5e9a05aed..74a12a553 100644 --- a/src/test/ref/liverange-6.log +++ b/src/test/ref/liverange-6.log @@ -245,7 +245,7 @@ main: { __b1: // [2] out::c#0 = msg[main::i#2] -- vbuaa=pbuc1_derefidx_vbuyy lda msg,y - // [3] call out -- call_phi_near + // [3] call out jsr out jmp __b2 // main::@2 @@ -348,7 +348,7 @@ main: { // out(msg[i]) // [2] out::c#0 = msg[main::i#2] -- vbuaa=pbuc1_derefidx_vbuyy lda msg,y - // [3] call out -- call_phi_near + // [3] call out jsr out // main::@2 // for( byte i: 0..11) diff --git a/src/test/ref/liverange-7.log b/src/test/ref/liverange-7.log index 5b899a517..674748c62 100644 --- a/src/test/ref/liverange-7.log +++ b/src/test/ref/liverange-7.log @@ -294,7 +294,7 @@ main: { // main::@1 __b1: // [2] out2::c#0 = main::c#2 - // [3] call out2 -- call_phi_near + // [3] call out2 jsr out2 jmp __b2 // main::@2 @@ -315,7 +315,7 @@ main: { // void out2(__register(A) char c) out2: { // [7] out::c#0 = out2::c#0 - // [8] call out -- call_phi_near + // [8] call out jsr out jmp __breturn // out2::@return @@ -412,7 +412,7 @@ main: { __b1: // out2(c) // [2] out2::c#0 = main::c#2 - // [3] call out2 -- call_phi_near + // [3] call out2 jsr out2 // main::@2 // for(char c: 0..39 ) @@ -432,7 +432,7 @@ main: { out2: { // out(c) // [7] out::c#0 = out2::c#0 - // [8] call out -- call_phi_near + // [8] call out jsr out // out2::@return // } diff --git a/src/test/ref/liverange-8.log b/src/test/ref/liverange-8.log index fc882b20b..860335293 100644 --- a/src/test/ref/liverange-8.log +++ b/src/test/ref/liverange-8.log @@ -319,7 +319,7 @@ main: { // main::@1 __b1: // [2] out2::c#0 = main::c#2 - // [3] call out2 -- call_phi_near + // [3] call out2 jsr out2 jmp __b2 // main::@2 @@ -344,7 +344,7 @@ out2: { // [12] phi from out2 to out [phi:out2->out] out_from_out2: // [12] phi out::c#2 = out::c#0 [phi:out2->out#0] -- register_copy - // [12] phi idx#15 = idx#19 [phi:out2->out#1] -- call_phi_near + // [12] phi idx#15 = idx#19 [phi:out2->out#1] -- register_copy jsr out jmp __b1 // out2::@1 @@ -354,7 +354,7 @@ out2: { // [12] phi from out2::@1 to out [phi:out2::@1->out] out_from___b1: // [12] phi out::c#2 = out::c#1 [phi:out2::@1->out#0] -- register_copy - // [12] phi idx#15 = idx#16 [phi:out2::@1->out#1] -- call_phi_near + // [12] phi idx#15 = idx#16 [phi:out2::@1->out#1] -- register_copy jsr out jmp __breturn // out2::@return @@ -458,7 +458,7 @@ main: { __b1: // out2(c) // [2] out2::c#0 = main::c#2 - // [3] call out2 -- call_phi_near + // [3] call out2 jsr out2 // main::@2 // for(char c: 0..39 ) @@ -481,7 +481,7 @@ out2: { // [8] call out // [12] phi from out2 to out [phi:out2->out] // [12] phi out::c#2 = out::c#0 [phi:out2->out#0] -- register_copy - // [12] phi idx#15 = idx#19 [phi:out2->out#1] -- call_phi_near + // [12] phi idx#15 = idx#19 [phi:out2->out#1] -- register_copy jsr out // out2::@1 // out(c) @@ -489,7 +489,7 @@ out2: { // [10] call out // [12] phi from out2::@1 to out [phi:out2::@1->out] // [12] phi out::c#2 = out::c#1 [phi:out2::@1->out#0] -- register_copy - // [12] phi idx#15 = idx#16 [phi:out2::@1->out#1] -- call_phi_near + // [12] phi idx#15 = idx#16 [phi:out2::@1->out#1] -- register_copy jsr out // out2::@return // } diff --git a/src/test/ref/liverange-9.log b/src/test/ref/liverange-9.log index fd8477728..090151016 100644 --- a/src/test/ref/liverange-9.log +++ b/src/test/ref/liverange-9.log @@ -417,7 +417,7 @@ main: { __b1: // [2] outsw::c#0 = main::c#2 // [3] call outsw - // [7] phi from main::@1 to outsw [phi:main::@1->outsw] -- call_phi_near + // [7] phi from main::@1 to outsw [phi:main::@1->outsw] outsw_from___b1: jsr outsw jmp __b2 @@ -442,13 +442,13 @@ outsw: { out_from_outsw: // [12] phi out::c#3 = '-' [phi:outsw->out#0] -- vbuaa=vbuc1 lda #'-' - // [12] phi idx#21 = idx#25 [phi:outsw->out#1] -- call_phi_near + // [12] phi idx#21 = idx#25 [phi:outsw->out#1] -- register_copy jsr out jmp __b1 // outsw::@1 __b1: // [9] outw::c#0 = outsw::c#0 - // [10] call outw -- call_phi_near + // [10] call outw jsr outw jmp __breturn // outsw::@return @@ -482,7 +482,7 @@ outw: { // [12] phi from outw to out [phi:outw->out] out_from_outw: // [12] phi out::c#3 = out::c#1 [phi:outw->out#0] -- register_copy - // [12] phi idx#21 = idx#22 [phi:outw->out#1] -- call_phi_near + // [12] phi idx#21 = idx#22 [phi:outw->out#1] -- register_copy jsr out jmp __b1 // outw::@1 @@ -494,7 +494,7 @@ outw: { // [12] phi from outw::@1 to out [phi:outw::@1->out] out_from___b1: // [12] phi out::c#3 = out::c#2 [phi:outw::@1->out#0] -- register_copy - // [12] phi idx#21 = idx#22 [phi:outw::@1->out#1] -- call_phi_near + // [12] phi idx#21 = idx#22 [phi:outw::@1->out#1] -- register_copy jsr out jmp __breturn // outw::@return @@ -595,7 +595,7 @@ main: { // outsw(c) // [2] outsw::c#0 = main::c#2 // [3] call outsw - // [7] phi from main::@1 to outsw [phi:main::@1->outsw] -- call_phi_near + // [7] phi from main::@1 to outsw [phi:main::@1->outsw] jsr outsw // main::@2 // for(char c: 0..39 ) @@ -617,12 +617,12 @@ outsw: { // [12] phi from outsw to out [phi:outsw->out] // [12] phi out::c#3 = '-' [phi:outsw->out#0] -- vbuaa=vbuc1 lda #'-' - // [12] phi idx#21 = idx#25 [phi:outsw->out#1] -- call_phi_near + // [12] phi idx#21 = idx#25 [phi:outsw->out#1] -- register_copy jsr out // outsw::@1 // outw(c) // [9] outw::c#0 = outsw::c#0 - // [10] call outw -- call_phi_near + // [10] call outw jsr outw // outsw::@return // } @@ -656,7 +656,7 @@ outw: { // [17] call out // [12] phi from outw to out [phi:outw->out] // [12] phi out::c#3 = out::c#1 [phi:outw->out#0] -- register_copy - // [12] phi idx#21 = idx#22 [phi:outw->out#1] -- call_phi_near + // [12] phi idx#21 = idx#22 [phi:outw->out#1] -- register_copy jsr out // outw::@1 // out(c&0x0f) @@ -666,7 +666,7 @@ outw: { // [19] call out // [12] phi from outw::@1 to out [phi:outw::@1->out] // [12] phi out::c#3 = out::c#2 [phi:outw::@1->out#0] -- register_copy - // [12] phi idx#21 = idx#22 [phi:outw::@1->out#1] -- call_phi_near + // [12] phi idx#21 = idx#22 [phi:outw::@1->out#1] -- register_copy jsr out // outw::@return // } diff --git a/src/test/ref/liverange-call-problem.log b/src/test/ref/liverange-call-problem.log index 87040feb9..e61f1eb79 100644 --- a/src/test/ref/liverange-call-problem.log +++ b/src/test/ref/liverange-call-problem.log @@ -325,7 +325,7 @@ main: { // [1] call incw1 // [11] phi from main to incw1 [phi:main->incw1] incw1_from_main: - // [11] phi w1#12 = 0 [phi:main->incw1#0] -- call_phi_near + // [11] phi w1#12 = 0 [phi:main->incw1#0] -- vwuz1=vwuc1 lda #<0 sta.z w1 lda #>0 @@ -339,7 +339,7 @@ main: { // [3] call incw2 // [14] phi from main::@1 to incw2 [phi:main::@1->incw2] incw2_from___b1: - // [14] phi w2#11 = 0 [phi:main::@1->incw2#0] -- call_phi_near + // [14] phi w2#11 = 0 [phi:main::@1->incw2#0] -- vwuz1=vwuc1 lda #<0 sta.z w2 lda #>0 @@ -353,7 +353,7 @@ main: { // [5] call incw1 // [11] phi from main::@2 to incw1 [phi:main::@2->incw1] incw1_from___b2: - // [11] phi w1#12 = w1#13 [phi:main::@2->incw1#0] -- call_phi_near + // [11] phi w1#12 = w1#13 [phi:main::@2->incw1#0] -- register_copy jsr incw1 // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -363,7 +363,7 @@ main: { // [7] call incw2 // [14] phi from main::@3 to incw2 [phi:main::@3->incw2] incw2_from___b3: - // [14] phi w2#11 = w2#12 [phi:main::@3->incw2#0] -- call_phi_near + // [14] phi w2#11 = w2#12 [phi:main::@3->incw2#0] -- register_copy jsr incw2 jmp __b4 // main::@4 @@ -484,7 +484,7 @@ main: { // incw1() // [1] call incw1 // [11] phi from main to incw1 [phi:main->incw1] - // [11] phi w1#12 = 0 [phi:main->incw1#0] -- call_phi_near + // [11] phi w1#12 = 0 [phi:main->incw1#0] -- vwuz1=vwuc1 lda #<0 sta.z w1 sta.z w1+1 @@ -494,7 +494,7 @@ main: { // incw2() // [3] call incw2 // [14] phi from main::@1 to incw2 [phi:main::@1->incw2] - // [14] phi w2#11 = 0 [phi:main::@1->incw2#0] -- call_phi_near + // [14] phi w2#11 = 0 [phi:main::@1->incw2#0] -- vwuz1=vwuc1 lda #<0 sta.z w2 sta.z w2+1 @@ -504,14 +504,14 @@ main: { // incw1() // [5] call incw1 // [11] phi from main::@2 to incw1 [phi:main::@2->incw1] - // [11] phi w1#12 = w1#13 [phi:main::@2->incw1#0] -- call_phi_near + // [11] phi w1#12 = w1#13 [phi:main::@2->incw1#0] -- register_copy jsr incw1 // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // incw2() // [7] call incw2 // [14] phi from main::@3 to incw2 [phi:main::@3->incw2] - // [14] phi w2#11 = w2#12 [phi:main::@3->incw2#0] -- call_phi_near + // [14] phi w2#11 = w2#12 [phi:main::@3->incw2#0] -- register_copy jsr incw2 // main::@4 // SCREEN[0] = w1 diff --git a/src/test/ref/liverange-problem-0.log b/src/test/ref/liverange-problem-0.log index 53d595e94..914eb6461 100644 --- a/src/test/ref/liverange-problem-0.log +++ b/src/test/ref/liverange-problem-0.log @@ -305,7 +305,7 @@ __start: { // [2] call malloc // [11] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] malloc_from___init1: - // [11] phi MEM#6 = (char *) 1024 [phi:__start::__init1->malloc#0] -- call_phi_near + // [11] phi MEM#6 = (char *) 1024 [phi:__start::__init1->malloc#0] -- pbuz1=pbuc1 lda #<$400 sta.z MEM lda #>$400 @@ -323,7 +323,7 @@ __start: { // [5] call malloc // [11] phi from __start::@2 to malloc [phi:__start::@2->malloc] malloc_from___b2: - // [11] phi MEM#6 = MEM#0 [phi:__start::@2->malloc#0] -- call_phi_near + // [11] phi MEM#6 = MEM#0 [phi:__start::@2->malloc#0] -- register_copy jsr malloc // [6] malloc::return#3 = malloc::return#0 jmp __b3 @@ -335,7 +335,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [9] call main -- call_phi_near + // [9] call main jsr main jmp __breturn // __start::@return @@ -458,7 +458,7 @@ __start: { // byte* SCREEN_1 = malloc() // [2] call malloc // [11] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] - // [11] phi MEM#6 = (char *) 1024 [phi:__start::__init1->malloc#0] -- call_phi_near + // [11] phi MEM#6 = (char *) 1024 [phi:__start::__init1->malloc#0] -- pbuz1=pbuc1 lda #<$400 sta.z MEM lda #>$400 @@ -475,7 +475,7 @@ __start: { // byte* SCREEN_2 = malloc() // [5] call malloc // [11] phi from __start::@2 to malloc [phi:__start::@2->malloc] - // [11] phi MEM#6 = MEM#0 [phi:__start::@2->malloc#0] -- call_phi_near + // [11] phi MEM#6 = MEM#0 [phi:__start::@2->malloc#0] -- register_copy jsr malloc // byte* SCREEN_2 = malloc() // [6] malloc::return#3 = malloc::return#0 @@ -483,7 +483,7 @@ __start: { // [7] SCREEN_2#0 = malloc::return#3 // [8] phi from __start::@3 to __start::@1 [phi:__start::@3->__start::@1] // __start::@1 - // [9] call main -- call_phi_near + // [9] call main jsr main // __start::@return // [10] return diff --git a/src/test/ref/liverange.log b/src/test/ref/liverange.log index 928b6882c..458f3370d 100644 --- a/src/test/ref/liverange.log +++ b/src/test/ref/liverange.log @@ -300,7 +300,7 @@ main: { // [1] call inci // [12] phi from main to inci [phi:main->inci] inci_from_main: - // [12] phi i#11 = 0 [phi:main->inci#0] -- call_phi_near + // [12] phi i#11 = 0 [phi:main->inci#0] -- vbuyy=vbuc1 ldy #0 jsr inci // [2] inci::return#0 = inci::return#2 @@ -315,7 +315,7 @@ main: { // [5] call inci // [12] phi from main::@1 to inci [phi:main::@1->inci] inci_from___b1: - // [12] phi i#11 = i#12 [phi:main::@1->inci#0] -- call_phi_near + // [12] phi i#11 = i#12 [phi:main::@1->inci#0] -- register_copy jsr inci // [6] inci::return#1 = inci::return#2 jmp __b2 @@ -415,7 +415,7 @@ main: { // inci() // [1] call inci // [12] phi from main to inci [phi:main->inci] - // [12] phi i#11 = 0 [phi:main->inci#0] -- call_phi_near + // [12] phi i#11 = 0 [phi:main->inci#0] -- vbuyy=vbuc1 ldy #0 jsr inci // inci() @@ -430,7 +430,7 @@ main: { // inci() // [5] call inci // [12] phi from main::@1 to inci [phi:main::@1->inci] - // [12] phi i#11 = i#12 [phi:main::@1->inci#0] -- call_phi_near + // [12] phi i#11 = i#12 [phi:main::@1->inci#0] -- register_copy jsr inci // inci() // [6] inci::return#1 = inci::return#2 diff --git a/src/test/ref/longbranch-interrupt-problem.log b/src/test/ref/longbranch-interrupt-problem.log index 1333b4a9d..c8bb0b78d 100644 --- a/src/test/ref/longbranch-interrupt-problem.log +++ b/src/test/ref/longbranch-interrupt-problem.log @@ -221,7 +221,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -338,7 +338,7 @@ __start: { sta.z col // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/longjump2.log b/src/test/ref/longjump2.log index 28d9a1199..124820e22 100644 --- a/src/test/ref/longjump2.log +++ b/src/test/ref/longjump2.log @@ -225,7 +225,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call long1 - // [5] phi from main to long1 [phi:main->long1] -- call_phi_near + // [5] phi from main to long1 [phi:main->long1] long1_from_main: jsr long1 // [2] phi from main to main::@1 [phi:main->main::@1] @@ -234,7 +234,7 @@ main: { // main::@1 __b1: // [3] call long2 - // [12] phi from main::@1 to long2 [phi:main::@1->long2] -- call_phi_near + // [12] phi from main::@1 to long2 [phi:main::@1->long2] long2_from___b1: jsr long2 jmp __breturn @@ -881,13 +881,13 @@ Score: 10640 main: { // long1() // [1] call long1 - // [5] phi from main to long1 [phi:main->long1] -- call_phi_near + // [5] phi from main to long1 [phi:main->long1] jsr long1 // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // long2() // [3] call long2 - // [12] phi from main::@1 to long2 [phi:main::@1->long2] -- call_phi_near + // [12] phi from main::@1 to long2 [phi:main::@1->long2] jsr long2 // main::@return // } diff --git a/src/test/ref/loop-memset-min.log b/src/test/ref/loop-memset-min.log index 050eaf119..58b097890 100644 --- a/src/test/ref/loop-memset-min.log +++ b/src/test/ref/loop-memset-min.log @@ -276,7 +276,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call memset - // [3] phi from main to memset [phi:main->memset] -- call_phi_near + // [3] phi from main to memset [phi:main->memset] memset_from_main: jsr memset jmp __breturn @@ -387,7 +387,7 @@ Score: 523 main: { // memset(SCREEN, 'c', 1000) // [1] call memset - // [3] phi from main to memset [phi:main->memset] -- call_phi_near + // [3] phi from main to memset [phi:main->memset] jsr memset // main::@return // } diff --git a/src/test/ref/loop-problem.log b/src/test/ref/loop-problem.log index 4a4be12eb..ea713553e 100644 --- a/src/test/ref/loop-problem.log +++ b/src/test/ref/loop-problem.log @@ -200,7 +200,7 @@ main: { // [0] *SCREEN = '0' -- _deref_pbuc1=vbuc2 lda #'0' sta SCREEN - // [1] call d -- call_phi_near + // [1] call d jsr d // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -208,7 +208,7 @@ main: { // main::@1 __b1: // [3] call b - // [7] phi from main::@1 to b [phi:main::@1->b] -- call_phi_near + // [7] phi from main::@1 to b [phi:main::@1->b] b_from___b1: jsr b jmp __breturn @@ -240,7 +240,7 @@ b: { jmp __b1 // b::@1 __b1: - // [9] call d -- call_phi_near + // [9] call d jsr d jmp __b2 // b::@2 @@ -317,13 +317,13 @@ main: { lda #'0' sta SCREEN // d() - // [1] call d -- call_phi_near + // [1] call d jsr d // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // b() // [3] call b - // [7] phi from main::@1 to b [phi:main::@1->b] -- call_phi_near + // [7] phi from main::@1 to b [phi:main::@1->b] jsr b // main::@return // } @@ -350,7 +350,7 @@ b: { // b::@1 __b1: // d() - // [9] call d -- call_phi_near + // [9] call d jsr d // b::@2 // for( byte i: 0..3) diff --git a/src/test/ref/loop-problem2.log b/src/test/ref/loop-problem2.log index 100d011b9..7a74d1625 100644 --- a/src/test/ref/loop-problem2.log +++ b/src/test/ref/loop-problem2.log @@ -243,7 +243,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call print_cls - // [5] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [5] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -252,7 +252,7 @@ main: { // main::@1 __b1: // [3] call mode_ctrl - // [11] phi from main::@1 to mode_ctrl [phi:main::@1->mode_ctrl] -- call_phi_near + // [11] phi from main::@1 to mode_ctrl [phi:main::@1->mode_ctrl] mode_ctrl_from___b1: jsr mode_ctrl jmp __breturn @@ -385,13 +385,13 @@ Score: 794 main: { // print_cls() // [1] call print_cls - // [5] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [5] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // mode_ctrl() // [3] call mode_ctrl - // [11] phi from main::@1 to mode_ctrl [phi:main::@1->mode_ctrl] -- call_phi_near + // [11] phi from main::@1 to mode_ctrl [phi:main::@1->mode_ctrl] jsr mode_ctrl // main::@return // } diff --git a/src/test/ref/loophead-problem-2.log b/src/test/ref/loophead-problem-2.log index c9022a575..290ef02b1 100644 --- a/src/test/ref/loophead-problem-2.log +++ b/src/test/ref/loophead-problem-2.log @@ -371,7 +371,7 @@ ASSEMBLER BEFORE OPTIMIZATION main: { .label screen = $400 // [1] call scan_for_lowest - // [11] phi from main to scan_for_lowest [phi:main->scan_for_lowest] -- call_phi_near + // [11] phi from main to scan_for_lowest [phi:main->scan_for_lowest] scan_for_lowest_from_main: jsr scan_for_lowest // [2] scan_for_lowest::return#0 = scan_for_lowest::lowest#2 -- vbuaa=vbuz1 @@ -552,7 +552,7 @@ main: { .label screen = $400 // char hit_check=scan_for_lowest() // [1] call scan_for_lowest - // [11] phi from main to scan_for_lowest [phi:main->scan_for_lowest] -- call_phi_near + // [11] phi from main to scan_for_lowest [phi:main->scan_for_lowest] jsr scan_for_lowest // char hit_check=scan_for_lowest() // [2] scan_for_lowest::return#0 = scan_for_lowest::lowest#2 -- vbuaa=vbuz1 diff --git a/src/test/ref/loophead-problem-3.log b/src/test/ref/loophead-problem-3.log index bf1dd5e41..637540734 100644 --- a/src/test/ref/loophead-problem-3.log +++ b/src/test/ref/loophead-problem-3.log @@ -384,7 +384,7 @@ main: { .label result = 2 .label kaputt = $a // [1] call mul16u - // [10] phi from main to mul16u [phi:main->mul16u] -- call_phi_near + // [10] phi from main to mul16u [phi:main->mul16u] mul16u_from_main: jsr mul16u // [2] mul16u::return#2 = mul16u::res#2 @@ -591,7 +591,7 @@ main: { .label kaputt = $a // dword result = mul16u(4,123) // [1] call mul16u - // [10] phi from main to mul16u [phi:main->mul16u] -- call_phi_near + // [10] phi from main to mul16u [phi:main->mul16u] jsr mul16u // dword result = mul16u(4,123) // [2] mul16u::return#2 = mul16u::res#2 diff --git a/src/test/ref/loophead-problem.log b/src/test/ref/loophead-problem.log index 20bd0994d..47c442d02 100644 --- a/src/test/ref/loophead-problem.log +++ b/src/test/ref/loophead-problem.log @@ -248,7 +248,7 @@ main: { lda #'a' sta screen+$28 // [1] call popup_selector - // [4] phi from main to popup_selector [phi:main->popup_selector] -- call_phi_near + // [4] phi from main to popup_selector [phi:main->popup_selector] popup_selector_from_main: jsr popup_selector jmp __b1 @@ -356,7 +356,7 @@ main: { sta screen+$28 // popup_selector() // [1] call popup_selector - // [4] phi from main to popup_selector [phi:main->popup_selector] -- call_phi_near + // [4] phi from main to popup_selector [phi:main->popup_selector] jsr popup_selector // main::@1 // screen[41] = opcode diff --git a/src/test/ref/loopnest.log b/src/test/ref/loopnest.log index deb69c6c0..7e7d6ce10 100644 --- a/src/test/ref/loopnest.log +++ b/src/test/ref/loopnest.log @@ -204,7 +204,7 @@ main: { // main::@1 __b1: // [2] call nest - // [6] phi from main::@1 to nest [phi:main::@1->nest] -- call_phi_near + // [6] phi from main::@1 to nest [phi:main::@1->nest] nest_from___b1: jsr nest jmp __b2 @@ -314,7 +314,7 @@ main: { __b1: // nest() // [2] call nest - // [6] phi from main::@1 to nest [phi:main::@1->nest] -- call_phi_near + // [6] phi from main::@1 to nest [phi:main::@1->nest] jsr nest // main::@2 // while (--i>0) diff --git a/src/test/ref/loopnest2.log b/src/test/ref/loopnest2.log index d661e5dd3..56e80a72b 100644 --- a/src/test/ref/loopnest2.log +++ b/src/test/ref/loopnest2.log @@ -430,7 +430,7 @@ main: { // main::@2 __b2: // [3] call nest1 - // [9] phi from main::@2 to nest1 [phi:main::@2->nest1] -- call_phi_near + // [9] phi from main::@2 to nest1 [phi:main::@2->nest1] nest1_from___b2: jsr nest1 jmp __b4 @@ -482,7 +482,7 @@ nest1: { // nest1::@2 __b2: // [12] call nest2 - // [18] phi from nest1::@2 to nest2 [phi:nest1::@2->nest2] -- call_phi_near + // [18] phi from nest1::@2 to nest2 [phi:nest1::@2->nest2] nest2_from___b2: jsr nest2 jmp __b4 @@ -679,7 +679,7 @@ main: { __b2: // nest1() // [3] call nest1 - // [9] phi from main::@2 to nest1 [phi:main::@2->nest1] -- call_phi_near + // [9] phi from main::@2 to nest1 [phi:main::@2->nest1] jsr nest1 // main::@4 // while (--j>0) @@ -720,7 +720,7 @@ nest1: { __b2: // nest2() // [12] call nest2 - // [18] phi from nest1::@2 to nest2 [phi:nest1::@2->nest2] -- call_phi_near + // [18] phi from nest1::@2 to nest2 [phi:nest1::@2->nest2] jsr nest2 // nest1::@4 // while (--j>0) diff --git a/src/test/ref/loopnest3.log b/src/test/ref/loopnest3.log index 24dc49f7e..71ea05214 100644 --- a/src/test/ref/loopnest3.log +++ b/src/test/ref/loopnest3.log @@ -257,7 +257,7 @@ main: { // main::@1 __b1: // [2] b::i#0 = main::i#2 - // [3] call b -- call_phi_near + // [3] call b jsr b jmp __b2 // main::@2 @@ -279,7 +279,7 @@ main: { b: { // [7] c::i#0 = b::i#0 // [8] call c - // [10] phi from b to c [phi:b->c] -- call_phi_near + // [10] phi from b to c [phi:b->c] c_from_b: jsr c jmp __breturn @@ -391,7 +391,7 @@ main: { __b1: // b(i) // [2] b::i#0 = main::i#2 - // [3] call b -- call_phi_near + // [3] call b jsr b // main::@2 // for(byte i:0..100) @@ -412,7 +412,7 @@ b: { // c(i) // [7] c::i#0 = b::i#0 // [8] call c - // [10] phi from b to c [phi:b->c] -- call_phi_near + // [10] phi from b to c [phi:b->c] jsr c // b::@return // } diff --git a/src/test/ref/malloc-0.log b/src/test/ref/malloc-0.log index 408edd611..0925f45ce 100644 --- a/src/test/ref/malloc-0.log +++ b/src/test/ref/malloc-0.log @@ -298,7 +298,7 @@ __start: { // __start::__init1 __init1: // [2] call malloc - // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] -- call_phi_near + // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] malloc_from___init1: jsr malloc // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] @@ -307,7 +307,7 @@ __start: { // __start::@1 __b1: // [4] call main - // [8] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [8] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -434,12 +434,12 @@ __start: { // __start::__init1 // byte* BYTES = malloc(0x100) // [2] call malloc - // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] -- call_phi_near + // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] jsr malloc // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [4] call main - // [8] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [8] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [5] return diff --git a/src/test/ref/malloc-1.log b/src/test/ref/malloc-1.log index 310f06395..72f6b7643 100644 --- a/src/test/ref/malloc-1.log +++ b/src/test/ref/malloc-1.log @@ -325,7 +325,7 @@ __start: { // __start::__init1 __init1: // [2] call malloc - // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] -- call_phi_near + // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] malloc_from___init1: jsr malloc // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] @@ -334,7 +334,7 @@ __start: { // __start::@1 __b1: // [4] call main - // [8] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [8] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -486,12 +486,12 @@ __start: { // __start::__init1 // word* WORDS = malloc(0x200) // [2] call malloc - // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] -- call_phi_near + // [6] phi from __start::__init1 to malloc [phi:__start::__init1->malloc] jsr malloc // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [4] call main - // [8] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [8] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [5] return diff --git a/src/test/ref/memcpy-0.log b/src/test/ref/memcpy-0.log index ea377248e..3a6c0f1db 100644 --- a/src/test/ref/memcpy-0.log +++ b/src/test/ref/memcpy-0.log @@ -496,7 +496,7 @@ main: { sta.z memcpy.destination lda #>SCREEN_COPY sta.z memcpy.destination+1 - // [10] phi memcpy::source#2 = (void *)SCREEN [phi:main::@1->memcpy#2] -- call_phi_near + // [10] phi memcpy::source#2 = (void *)SCREEN [phi:main::@1->memcpy#2] -- pvoz1=pvoc1 lda #SCREEN @@ -523,7 +523,7 @@ main: { sta.z memcpy.destination lda #>CHARSET sta.z memcpy.destination+1 - // [10] phi memcpy::source#2 = (void *)CHARGEN [phi:main::@2->memcpy#2] -- call_phi_near + // [10] phi memcpy::source#2 = (void *)CHARGEN [phi:main::@2->memcpy#2] -- pvoz1=pvoc1 lda #CHARGEN @@ -722,7 +722,7 @@ main: { sta.z memcpy.destination lda #>SCREEN_COPY sta.z memcpy.destination+1 - // [10] phi memcpy::source#2 = (void *)SCREEN [phi:main::@1->memcpy#2] -- call_phi_near + // [10] phi memcpy::source#2 = (void *)SCREEN [phi:main::@1->memcpy#2] -- pvoz1=pvoc1 lda #SCREEN @@ -749,7 +749,7 @@ main: { sta.z memcpy.destination lda #>CHARSET sta.z memcpy.destination+1 - // [10] phi memcpy::source#2 = (void *)CHARGEN [phi:main::@2->memcpy#2] -- call_phi_near + // [10] phi memcpy::source#2 = (void *)CHARGEN [phi:main::@2->memcpy#2] -- pvoz1=pvoc1 lda #CHARGEN diff --git a/src/test/ref/memcpy-1.log b/src/test/ref/memcpy-1.log index 65e8f759a..ff7dcf584 100644 --- a/src/test/ref/memcpy-1.log +++ b/src/test/ref/memcpy-1.log @@ -622,7 +622,7 @@ main: { sta.z memcpy.destination lda #>SCREEN+$a sta.z memcpy.destination+1 - // [18] phi memcpy::source#2 = (void *)CAMELOT [phi:main::@3->memcpy#2] -- call_phi_near + // [18] phi memcpy::source#2 = (void *)CAMELOT [phi:main::@3->memcpy#2] -- pvoz1=pvoc1 lda #CAMELOT @@ -646,7 +646,7 @@ main: { sta.z memcpy.destination lda #>SCREEN+$32 sta.z memcpy.destination+1 - // [18] phi memcpy::source#2 = (void *)main::$5 [phi:main::@4->memcpy#2] -- call_phi_near + // [18] phi memcpy::source#2 = (void *)main::$5 [phi:main::@4->memcpy#2] -- pvoz1=pvoc1 lda #<__5 sta.z memcpy.source lda #>__5 @@ -940,7 +940,7 @@ main: { sta.z memcpy.destination lda #>SCREEN+$a sta.z memcpy.destination+1 - // [18] phi memcpy::source#2 = (void *)CAMELOT [phi:main::@3->memcpy#2] -- call_phi_near + // [18] phi memcpy::source#2 = (void *)CAMELOT [phi:main::@3->memcpy#2] -- pvoz1=pvoc1 lda #CAMELOT @@ -961,7 +961,7 @@ main: { sta.z memcpy.destination lda #>SCREEN+$32 sta.z memcpy.destination+1 - // [18] phi memcpy::source#2 = (void *)main::$5 [phi:main::@4->memcpy#2] -- call_phi_near + // [18] phi memcpy::source#2 = (void *)main::$5 [phi:main::@4->memcpy#2] -- pvoz1=pvoc1 lda #<__5 sta.z memcpy.source lda #>__5 diff --git a/src/test/ref/memory-heap.log b/src/test/ref/memory-heap.log index b46ea16fc..a27fca8c9 100644 --- a/src/test/ref/memory-heap.log +++ b/src/test/ref/memory-heap.log @@ -451,7 +451,7 @@ main: { // [1] call malloc // [14] phi from main to malloc [phi:main->malloc] malloc_from_main: - // [14] phi heap_head#8 = HEAP_TOP [phi:main->malloc#0] -- call_phi_near + // [14] phi heap_head#8 = HEAP_TOP [phi:main->malloc#0] -- pbuz1=pbuc1 lda #HEAP_TOP @@ -468,7 +468,7 @@ main: { // [3] call malloc // [14] phi from main::@2 to malloc [phi:main::@2->malloc] malloc_from___b2: - // [14] phi heap_head#8 = heap_head#0 [phi:main::@2->malloc#0] -- call_phi_near + // [14] phi heap_head#8 = heap_head#0 [phi:main::@2->malloc#0] -- register_copy jsr malloc jmp __b3 // main::@3 @@ -629,7 +629,7 @@ main: { // unsigned char* buf1 = malloc(100) // [1] call malloc // [14] phi from main to malloc [phi:main->malloc] - // [14] phi heap_head#8 = HEAP_TOP [phi:main->malloc#0] -- call_phi_near + // [14] phi heap_head#8 = HEAP_TOP [phi:main->malloc#0] -- pbuz1=pbuc1 lda #HEAP_TOP @@ -645,7 +645,7 @@ main: { // unsigned char* buf2 = malloc(100) // [3] call malloc // [14] phi from main::@2 to malloc [phi:main::@2->malloc] - // [14] phi heap_head#8 = heap_head#0 [phi:main::@2->malloc#0] -- call_phi_near + // [14] phi heap_head#8 = heap_head#0 [phi:main::@2->malloc#0] -- register_copy jsr malloc // main::@3 // unsigned char* buf2 = malloc(100) diff --git a/src/test/ref/millfork-benchmarks/linkedlist-kc.log b/src/test/ref/millfork-benchmarks/linkedlist-kc.log index 8e9709be8..88b764718 100644 --- a/src/test/ref/millfork-benchmarks/linkedlist-kc.log +++ b/src/test/ref/millfork-benchmarks/linkedlist-kc.log @@ -1515,7 +1515,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -1528,7 +1528,7 @@ __start: { main: { .label __5 = 6 .label i = $a - // [6] call start -- call_phi_near + // [6] call start jsr start // [7] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -1575,7 +1575,7 @@ main: { __b2: // [9] prepend::x#0 = main::i#2 // [10] call prepend - // [26] phi from main::@2 to prepend [phi:main::@2->prepend] -- call_phi_near + // [26] phi from main::@2 to prepend [phi:main::@2->prepend] prepend_from___b2: jsr prepend jmp __b5 @@ -1598,7 +1598,7 @@ main: { jmp __b3 // main::@3 __b3: - // [14] call sum -- call_phi_near + // [14] call sum jsr sum // [15] sum::return#2 = sum::s#3 jmp __b6 @@ -1611,7 +1611,7 @@ main: { // [40] phi from main::@6 to print_char [phi:main::@6->print_char] print_char_from___b6: // [40] phi print_char_cursor#27 = print_char_cursor#48 [phi:main::@6->print_char#0] -- register_copy - // [40] phi print_char::ch#3 = print_char::ch#2 [phi:main::@6->print_char#1] -- call_phi_near + // [40] phi print_char::ch#3 = print_char::ch#2 [phi:main::@6->print_char#1] -- register_copy jsr print_char jmp __b7 // main::@7 @@ -1626,7 +1626,7 @@ main: { jmp __b4 // main::@4 __b4: - // [22] call end -- call_phi_near + // [22] call end jsr end jmp __breturn // main::@return @@ -1652,7 +1652,7 @@ start: { prepend: { .label new = 4 .label x = $a - // [27] call alloc -- call_phi_near + // [27] call alloc jsr alloc // [28] alloc::return#2 = alloc::return#0 jmp __b1 @@ -1765,7 +1765,7 @@ end: { sta.z Ticks lda.z last_time+1 sta.z Ticks+1 - // [45] call start -- call_phi_near + // [45] call start jsr start jmp __b1 // end::@1 @@ -1784,7 +1784,7 @@ end: { lda.z last_time+1 sta.z Ticks_1+1 // [48] print_uint::w#0 = Ticks#1 - // [49] call print_uint -- call_phi_near + // [49] call print_uint jsr print_uint // [50] phi from end::@1 to end::@2 [phi:end::@1->end::@2] __b2_from___b1: @@ -1792,7 +1792,7 @@ end: { // end::@2 __b2: // [51] call print_ln - // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] -- call_phi_near + // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] print_ln_from___b2: jsr print_ln jmp __breturn @@ -1843,7 +1843,7 @@ print_uint: { // [58] call print_uchar // [67] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: - // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near + // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -1853,7 +1853,7 @@ print_uint: { // [60] call print_uchar // [67] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: - // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near + // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -1919,7 +1919,7 @@ print_uchar: { // [40] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [40] phi print_char_cursor#27 = print_char_cursor#28 [phi:print_uchar->print_char#0] -- register_copy - // [40] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [40] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -1933,7 +1933,7 @@ print_uchar: { // [40] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [40] phi print_char_cursor#27 = print_char_cursor#28 [phi:print_uchar::@1->print_char#0] -- register_copy - // [40] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [40] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -2169,7 +2169,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return @@ -2180,7 +2180,7 @@ main: { .label __5 = 6 .label i = $a // start() - // [6] call start -- call_phi_near + // [6] call start jsr start // [7] phi from main to main::@1 [phi:main->main::@1] // [7] phi main::c#7 = 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 @@ -2215,7 +2215,7 @@ main: { // prepend(i) // [9] prepend::x#0 = main::i#2 // [10] call prepend - // [26] phi from main::@2 to prepend [phi:main::@2->prepend] -- call_phi_near + // [26] phi from main::@2 to prepend [phi:main::@2->prepend] jsr prepend // main::@5 // for(unsigned int i : 0..2999) @@ -2234,7 +2234,7 @@ main: { // [13] phi from main::@5 to main::@3 [phi:main::@5->main::@3] // main::@3 // sum() - // [14] call sum -- call_phi_near + // [14] call sum jsr sum // [15] sum::return#2 = sum::s#3 // main::@6 @@ -2245,7 +2245,7 @@ main: { // [18] call print_char // [40] phi from main::@6 to print_char [phi:main::@6->print_char] // [40] phi print_char_cursor#27 = print_char_cursor#48 [phi:main::@6->print_char#0] -- register_copy - // [40] phi print_char::ch#3 = print_char::ch#2 [phi:main::@6->print_char#1] -- call_phi_near + // [40] phi print_char::ch#3 = print_char::ch#2 [phi:main::@6->print_char#1] -- register_copy jsr print_char // main::@7 // for(unsigned char c : 0..4) @@ -2257,7 +2257,7 @@ main: { // [21] phi from main::@7 to main::@4 [phi:main::@7->main::@4] // main::@4 // end() - // [22] call end -- call_phi_near + // [22] call end jsr end // main::@return // } @@ -2283,7 +2283,7 @@ prepend: { .label new = 4 .label x = $a // alloc() - // [27] call alloc -- call_phi_near + // [27] call alloc jsr alloc // [28] alloc::return#2 = alloc::return#0 // prepend::@1 @@ -2399,7 +2399,7 @@ end: { lda.z last_time+1 sta.z Ticks+1 // start() - // [45] call start -- call_phi_near + // [45] call start jsr start // end::@1 // last_time -= Ticks @@ -2419,13 +2419,13 @@ end: { sta.z Ticks_1+1 // print_uint(Ticks) // [48] print_uint::w#0 = Ticks#1 - // [49] call print_uint -- call_phi_near + // [49] call print_uint jsr print_uint // [50] phi from end::@1 to end::@2 [phi:end::@1->end::@2] // end::@2 // print_ln() // [51] call print_ln - // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] -- call_phi_near + // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] jsr print_ln // end::@return // } @@ -2475,7 +2475,7 @@ print_uint: { ldx.z w+1 // [58] call print_uchar // [67] phi from print_uint to print_uchar [phi:print_uint->print_uchar] - // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near + // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -2483,7 +2483,7 @@ print_uint: { ldx.z w // [60] call print_uchar // [67] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] - // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near + // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy jsr print_uchar // print_uint::@return // } @@ -2546,7 +2546,7 @@ print_uchar: { // Table of hexadecimal digits // [40] phi from print_uchar to print_char [phi:print_uchar->print_char] // [40] phi print_char_cursor#27 = print_char_cursor#28 [phi:print_uchar->print_char#0] -- register_copy - // [40] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [40] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -2559,7 +2559,7 @@ print_uchar: { // [73] call print_char // [40] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [40] phi print_char_cursor#27 = print_char_cursor#28 [phi:print_uchar::@1->print_char#0] -- register_copy - // [40] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [40] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/millfork-benchmarks/plasma-kc.log b/src/test/ref/millfork-benchmarks/plasma-kc.log index 717ae4bad..6498dc65b 100644 --- a/src/test/ref/millfork-benchmarks/plasma-kc.log +++ b/src/test/ref/millfork-benchmarks/plasma-kc.log @@ -2315,7 +2315,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -2330,7 +2330,7 @@ main: { .label v = $19 .label count = 2 // [6] call makechar - // [25] phi from main to makechar [phi:main->makechar] -- call_phi_near + // [25] phi from main to makechar [phi:main->makechar] makechar_from_main: jsr makechar // [7] phi from main to main::@4 [phi:main->main::@4] @@ -2338,7 +2338,7 @@ main: { jmp __b4 // main::@4 __b4: - // [8] call start -- call_phi_near + // [8] call start jsr start jmp __b5 // main::@5 @@ -2378,7 +2378,7 @@ main: { // [16] *((char *)CIA2) = main::block#1 -- _deref_pbuc1=vbuz1 lda.z block sta CIA2 - // [17] call end -- call_phi_near + // [17] call end /* Reset screen colors */ jsr end jmp __breturn @@ -2395,7 +2395,7 @@ main: { /* Build page 1, then make it visible */ // [61] phi from main::@2 to doplasma [phi:main::@2->doplasma] doplasma_from___b2: - // [61] phi doplasma::scrn#13 = SCREEN1 [phi:main::@2->doplasma#0] -- call_phi_near + // [61] phi doplasma::scrn#13 = SCREEN1 [phi:main::@2->doplasma#0] -- pbuz1=pbuc1 lda #SCREEN1 @@ -2411,7 +2411,7 @@ main: { /* Build page 2, then make it visible */ // [61] phi from main::@6 to doplasma [phi:main::@6->doplasma] doplasma_from___b6: - // [61] phi doplasma::scrn#13 = SCREEN2 [phi:main::@6->doplasma#0] -- call_phi_near + // [61] phi doplasma::scrn#13 = SCREEN2 [phi:main::@6->doplasma#0] -- pbuz1=pbuc1 lda #SCREEN2 @@ -2565,7 +2565,7 @@ makechar: { jmp __b6 // makechar::@6 __b6: - // [42] call rand -- call_phi_near + // [42] call rand jsr rand // [43] rand::return#2 = rand::return#0 jmp __b10 @@ -2623,7 +2623,7 @@ end: { sta.z Ticks lda.z last_time+1 sta.z Ticks+1 - // [53] call start -- call_phi_near + // [53] call start jsr start jmp __b1 // end::@1 @@ -2642,7 +2642,7 @@ end: { lda.z last_time+1 sta.z Ticks_1+1 // [56] print_uint::w#0 = Ticks#1 - // [57] call print_uint -- call_phi_near + // [57] call print_uint jsr print_uint // [58] phi from end::@1 to end::@2 [phi:end::@1->end::@2] __b2_from___b1: @@ -2650,7 +2650,7 @@ end: { // end::@2 __b2: // [59] call print_ln - // [99] phi from end::@2 to print_ln [phi:end::@2->print_ln] -- call_phi_near + // [99] phi from end::@2 to print_ln [phi:end::@2->print_ln] print_ln_from___b2: jsr print_ln jmp __breturn @@ -2897,7 +2897,7 @@ print_uint: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [104] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [104] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -2908,7 +2908,7 @@ print_uint: { // [104] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [104] phi print_char_cursor#37 = print_char_cursor#27 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [104] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [104] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -2974,7 +2974,7 @@ print_uchar: { // [112] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [112] phi print_char_cursor#26 = print_char_cursor#37 [phi:print_uchar->print_char#0] -- register_copy - // [112] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [112] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -2988,7 +2988,7 @@ print_uchar: { // [112] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [112] phi print_char_cursor#26 = print_char_cursor#27 [phi:print_uchar::@1->print_char#0] -- register_copy - // [112] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [112] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -3361,7 +3361,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return @@ -3374,12 +3374,12 @@ main: { .label count = 2 // makechar() // [6] call makechar - // [25] phi from main to makechar [phi:main->makechar] -- call_phi_near + // [25] phi from main to makechar [phi:main->makechar] jsr makechar // [7] phi from main to main::@4 [phi:main->main::@4] // main::@4 // start() - // [8] call start -- call_phi_near + // [8] call start jsr start // main::@5 // block = CIA2->PORT_A @@ -3421,7 +3421,7 @@ main: { lda.z block sta CIA2 // end() - // [17] call end -- call_phi_near + // [17] call end /* Reset screen colors */ jsr end // main::@return @@ -3435,7 +3435,7 @@ main: { // [20] call doplasma /* Build page 1, then make it visible */ // [61] phi from main::@2 to doplasma [phi:main::@2->doplasma] - // [61] phi doplasma::scrn#13 = SCREEN1 [phi:main::@2->doplasma#0] -- call_phi_near + // [61] phi doplasma::scrn#13 = SCREEN1 [phi:main::@2->doplasma#0] -- pbuz1=pbuc1 lda #SCREEN1 @@ -3450,7 +3450,7 @@ main: { // [22] call doplasma /* Build page 2, then make it visible */ // [61] phi from main::@6 to doplasma [phi:main::@6->doplasma] - // [61] phi doplasma::scrn#13 = SCREEN2 [phi:main::@6->doplasma#0] -- call_phi_near + // [61] phi doplasma::scrn#13 = SCREEN2 [phi:main::@6->doplasma#0] -- pbuz1=pbuc1 lda #SCREEN2 @@ -3597,7 +3597,7 @@ makechar: { // makechar::@6 __b6: // rand() - // [42] call rand -- call_phi_near + // [42] call rand jsr rand // [43] rand::return#2 = rand::return#0 // makechar::@10 @@ -3653,7 +3653,7 @@ end: { lda.z last_time+1 sta.z Ticks+1 // start() - // [53] call start -- call_phi_near + // [53] call start jsr start // end::@1 // last_time -= Ticks @@ -3673,13 +3673,13 @@ end: { sta.z Ticks_1+1 // print_uint(Ticks) // [56] print_uint::w#0 = Ticks#1 - // [57] call print_uint -- call_phi_near + // [57] call print_uint jsr print_uint // [58] phi from end::@1 to end::@2 [phi:end::@1->end::@2] // end::@2 // print_ln() // [59] call print_ln - // [99] phi from end::@2 to print_ln [phi:end::@2->print_ln] -- call_phi_near + // [99] phi from end::@2 to print_ln [phi:end::@2->print_ln] jsr print_ln // end::@return // } @@ -3932,7 +3932,7 @@ print_uint: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [104] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [104] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -3941,7 +3941,7 @@ print_uint: { // [97] call print_uchar // [104] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [104] phi print_char_cursor#37 = print_char_cursor#27 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [104] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [104] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@return // } @@ -4004,7 +4004,7 @@ print_uchar: { // Table of hexadecimal digits // [112] phi from print_uchar to print_char [phi:print_uchar->print_char] // [112] phi print_char_cursor#26 = print_char_cursor#37 [phi:print_uchar->print_char#0] -- register_copy - // [112] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [112] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -4017,7 +4017,7 @@ print_uchar: { // [110] call print_char // [112] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [112] phi print_char_cursor#26 = print_char_cursor#27 [phi:print_uchar::@1->print_char#0] -- register_copy - // [112] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [112] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/millfork-benchmarks/romsum-kc.log b/src/test/ref/millfork-benchmarks/romsum-kc.log index f2b536ec9..a29fd50cf 100644 --- a/src/test/ref/millfork-benchmarks/romsum-kc.log +++ b/src/test/ref/millfork-benchmarks/romsum-kc.log @@ -2079,7 +2079,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -2091,7 +2091,7 @@ __start: { // main main: { .label i = $d - // [6] call start -- call_phi_near + // [6] call start jsr start // [7] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -2125,7 +2125,7 @@ main: { jmp __b3 // main::@3 __b3: - // [10] call end -- call_phi_near + // [10] call end jsr end jmp __breturn // main::@return @@ -2138,7 +2138,7 @@ main: { // main::@2 __b2: // [13] call sum - // [32] phi from main::@2 to sum [phi:main::@2->sum] -- call_phi_near + // [32] phi from main::@2 to sum [phi:main::@2->sum] sum_from___b2: jsr sum // [14] sum::return#2 = sum::s#3 @@ -2146,7 +2146,7 @@ main: { // main::@4 __b4: // [15] print_uint_decimal::w#0 = sum::return#2 - // [16] call print_uint_decimal -- call_phi_near + // [16] call print_uint_decimal jsr print_uint_decimal // [17] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: @@ -2156,7 +2156,7 @@ main: { // [18] call print_ln // [48] phi from main::@5 to print_ln [phi:main::@5->print_ln] print_ln_from___b5: - // [48] phi print_char_cursor#49 = print_char_cursor#1 [phi:main::@5->print_ln#0] -- call_phi_near + // [48] phi print_char_cursor#49 = print_char_cursor#1 [phi:main::@5->print_ln#0] -- register_copy jsr print_ln jmp __b6 // main::@6 @@ -2198,7 +2198,7 @@ end: { sta.z Ticks lda.z last_time+1 sta.z Ticks+1 - // [24] call start -- call_phi_near + // [24] call start jsr start jmp __b1 // end::@1 @@ -2217,7 +2217,7 @@ end: { lda.z last_time+1 sta.z Ticks_1+1 // [27] print_uint::w#0 = Ticks#1 - // [28] call print_uint -- call_phi_near + // [28] call print_uint jsr print_uint // [29] phi from end::@1 to end::@2 [phi:end::@1->end::@2] __b2_from___b1: @@ -2227,7 +2227,7 @@ end: { // [30] call print_ln // [48] phi from end::@2 to print_ln [phi:end::@2->print_ln] print_ln_from___b2: - // [48] phi print_char_cursor#49 = print_char_cursor#12 [phi:end::@2->print_ln#0] -- call_phi_near + // [48] phi print_char_cursor#49 = print_char_cursor#12 [phi:end::@2->print_ln#0] -- register_copy jsr print_ln jmp __breturn // end::@return @@ -2320,7 +2320,7 @@ print_uint_decimal: { .label w = 2 // [43] utoa::value#0 = print_uint_decimal::w#0 // [44] call utoa - // [58] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] -- call_phi_near + // [58] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] utoa_from_print_uint_decimal: jsr utoa // [45] phi from print_uint_decimal to print_uint_decimal::@1 [phi:print_uint_decimal->print_uint_decimal::@1] @@ -2329,7 +2329,7 @@ print_uint_decimal: { // print_uint_decimal::@1 __b1: // [46] call print_str - // [79] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] -- call_phi_near + // [79] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] print_str_from___b1: jsr print_str jmp __breturn @@ -2382,7 +2382,7 @@ print_uint: { // [86] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [86] phi print_char_cursor#52 = print_char_cursor#54 [phi:print_uint->print_uchar#0] -- register_copy - // [86] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [86] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -2393,7 +2393,7 @@ print_uint: { // [86] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [86] phi print_char_cursor#52 = print_char_cursor#12 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [86] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [86] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -2506,7 +2506,7 @@ utoa: { // [73] utoa_append::value#0 = utoa::value#2 // [74] utoa_append::sub#0 = utoa::digit_value#0 // [75] call utoa_append - // [94] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near + // [94] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] utoa_append_from___b5: jsr utoa_append // [76] utoa_append::return#0 = utoa_append::value#2 @@ -2562,7 +2562,7 @@ print_str: { // [101] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [101] phi print_char_cursor#36 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [101] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [101] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char jmp __b3 // print_str::@3 @@ -2596,7 +2596,7 @@ print_uchar: { // [101] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [101] phi print_char_cursor#36 = print_char_cursor#52 [phi:print_uchar->print_char#0] -- register_copy - // [101] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near + // [101] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -2610,7 +2610,7 @@ print_uchar: { // [101] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [101] phi print_char_cursor#36 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [101] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [101] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -3007,7 +3007,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return @@ -3017,7 +3017,7 @@ __start: { main: { .label i = $d // start() - // [6] call start -- call_phi_near + // [6] call start jsr start // [7] phi from main to main::@1 [phi:main->main::@1] // [7] phi print_line_cursor#22 = print_screen#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -3047,7 +3047,7 @@ main: { // [9] phi from main::@1 to main::@3 [phi:main::@1->main::@3] // main::@3 // end() - // [10] call end -- call_phi_near + // [10] call end jsr end // main::@return // } @@ -3058,21 +3058,21 @@ main: { __b2: // sum() // [13] call sum - // [32] phi from main::@2 to sum [phi:main::@2->sum] -- call_phi_near + // [32] phi from main::@2 to sum [phi:main::@2->sum] jsr sum // sum() // [14] sum::return#2 = sum::s#3 // main::@4 // print_uint_decimal(sum()) // [15] print_uint_decimal::w#0 = sum::return#2 - // [16] call print_uint_decimal -- call_phi_near + // [16] call print_uint_decimal jsr print_uint_decimal // [17] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 // print_ln() // [18] call print_ln // [48] phi from main::@5 to print_ln [phi:main::@5->print_ln] - // [48] phi print_char_cursor#49 = print_char_cursor#1 [phi:main::@5->print_ln#0] -- call_phi_near + // [48] phi print_char_cursor#49 = print_char_cursor#1 [phi:main::@5->print_ln#0] -- register_copy jsr print_ln // main::@6 // for(i=0;i<6;i++) @@ -3114,7 +3114,7 @@ end: { lda.z last_time+1 sta.z Ticks+1 // start() - // [24] call start -- call_phi_near + // [24] call start jsr start // end::@1 // last_time -= Ticks @@ -3134,14 +3134,14 @@ end: { sta.z Ticks_1+1 // print_uint(Ticks) // [27] print_uint::w#0 = Ticks#1 - // [28] call print_uint -- call_phi_near + // [28] call print_uint jsr print_uint // [29] phi from end::@1 to end::@2 [phi:end::@1->end::@2] // end::@2 // print_ln() // [30] call print_ln // [48] phi from end::@2 to print_ln [phi:end::@2->print_ln] - // [48] phi print_char_cursor#49 = print_char_cursor#12 [phi:end::@2->print_ln#0] -- call_phi_near + // [48] phi print_char_cursor#49 = print_char_cursor#12 [phi:end::@2->print_ln#0] -- register_copy jsr print_ln // end::@return // } @@ -3231,13 +3231,13 @@ print_uint_decimal: { // utoa(w, decimal_digits, DECIMAL) // [43] utoa::value#0 = print_uint_decimal::w#0 // [44] call utoa - // [58] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] -- call_phi_near + // [58] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] jsr utoa // [45] phi from print_uint_decimal to print_uint_decimal::@1 [phi:print_uint_decimal->print_uint_decimal::@1] // print_uint_decimal::@1 // print_str(decimal_digits) // [46] call print_str - // [79] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] -- call_phi_near + // [79] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] jsr print_str // print_uint_decimal::@return // } @@ -3286,7 +3286,7 @@ print_uint: { // [54] call print_uchar // [86] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [86] phi print_char_cursor#52 = print_char_cursor#54 [phi:print_uint->print_uchar#0] -- register_copy - // [86] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [86] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -3295,7 +3295,7 @@ print_uint: { // [56] call print_uchar // [86] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [86] phi print_char_cursor#52 = print_char_cursor#12 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [86] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [86] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@return // } @@ -3404,7 +3404,7 @@ utoa: { // [73] utoa_append::value#0 = utoa::value#2 // [74] utoa_append::sub#0 = utoa::digit_value#0 // [75] call utoa_append - // [94] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near + // [94] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] jsr utoa_append // utoa_append(buffer++, value, digit_value) // [76] utoa_append::return#0 = utoa_append::value#2 @@ -3457,7 +3457,7 @@ print_str: { // [84] call print_char // [101] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [101] phi print_char_cursor#36 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [101] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [101] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char // print_str::@3 // print_char(*(str++)); @@ -3490,7 +3490,7 @@ print_uchar: { // Table of hexadecimal digits // [101] phi from print_uchar to print_char [phi:print_uchar->print_char] // [101] phi print_char_cursor#36 = print_char_cursor#52 [phi:print_uchar->print_char#0] -- register_copy - // [101] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near + // [101] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -3503,7 +3503,7 @@ print_uchar: { // [92] call print_char // [101] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [101] phi print_char_cursor#36 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [101] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [101] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/millfork-benchmarks/sieve-kc.log b/src/test/ref/millfork-benchmarks/sieve-kc.log index c022d9e19..2d2c4c18b 100644 --- a/src/test/ref/millfork-benchmarks/sieve-kc.log +++ b/src/test/ref/millfork-benchmarks/sieve-kc.log @@ -1162,7 +1162,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -1173,7 +1173,7 @@ __start: { } // main main: { - // [6] call start -- call_phi_near + // [6] call start jsr start // [7] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -1181,7 +1181,7 @@ main: { // main::@1 __b1: // [8] call round - // [32] phi from main::@1 to round [phi:main::@1->round] -- call_phi_near + // [32] phi from main::@1 to round [phi:main::@1->round] round_from___b1: jsr round // [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -1190,7 +1190,7 @@ main: { // main::@2 __b2: // [10] call round - // [32] phi from main::@2 to round [phi:main::@2->round] -- call_phi_near + // [32] phi from main::@2 to round [phi:main::@2->round] round_from___b2: jsr round // [11] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -1199,7 +1199,7 @@ main: { // main::@3 __b3: // [12] call round - // [32] phi from main::@3 to round [phi:main::@3->round] -- call_phi_near + // [32] phi from main::@3 to round [phi:main::@3->round] round_from___b3: jsr round // [13] phi from main::@3 to main::@4 [phi:main::@3->main::@4] @@ -1208,7 +1208,7 @@ main: { // main::@4 __b4: // [14] call round - // [32] phi from main::@4 to round [phi:main::@4->round] -- call_phi_near + // [32] phi from main::@4 to round [phi:main::@4->round] round_from___b4: jsr round // [15] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -1217,7 +1217,7 @@ main: { // main::@5 __b5: // [16] call round - // [32] phi from main::@5 to round [phi:main::@5->round] -- call_phi_near + // [32] phi from main::@5 to round [phi:main::@5->round] round_from___b5: jsr round // [17] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -1226,7 +1226,7 @@ main: { // main::@6 __b6: // [18] call round - // [32] phi from main::@6 to round [phi:main::@6->round] -- call_phi_near + // [32] phi from main::@6 to round [phi:main::@6->round] round_from___b6: jsr round // [19] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -1235,7 +1235,7 @@ main: { // main::@7 __b7: // [20] call round - // [32] phi from main::@7 to round [phi:main::@7->round] -- call_phi_near + // [32] phi from main::@7 to round [phi:main::@7->round] round_from___b7: jsr round // [21] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -1244,7 +1244,7 @@ main: { // main::@8 __b8: // [22] call round - // [32] phi from main::@8 to round [phi:main::@8->round] -- call_phi_near + // [32] phi from main::@8 to round [phi:main::@8->round] round_from___b8: jsr round // [23] phi from main::@8 to main::@9 [phi:main::@8->main::@9] @@ -1253,7 +1253,7 @@ main: { // main::@9 __b9: // [24] call round - // [32] phi from main::@9 to round [phi:main::@9->round] -- call_phi_near + // [32] phi from main::@9 to round [phi:main::@9->round] round_from___b9: jsr round // [25] phi from main::@9 to main::@10 [phi:main::@9->main::@10] @@ -1262,7 +1262,7 @@ main: { // main::@10 __b10: // [26] call round - // [32] phi from main::@10 to round [phi:main::@10->round] -- call_phi_near + // [32] phi from main::@10 to round [phi:main::@10->round] round_from___b10: jsr round // [27] phi from main::@10 to main::@11 [phi:main::@10->main::@11] @@ -1270,7 +1270,7 @@ main: { jmp __b11 // main::@11 __b11: - // [28] call end -- call_phi_near + // [28] call end jsr end jmp __breturn // main::@return @@ -1411,7 +1411,7 @@ end: { sta.z Ticks lda.z last_time+1 sta.z Ticks+1 - // [49] call start -- call_phi_near + // [49] call start jsr start jmp __b1 // end::@1 @@ -1430,7 +1430,7 @@ end: { lda.z last_time+1 sta.z Ticks_1+1 // [52] print_uint::w#0 = Ticks#1 - // [53] call print_uint -- call_phi_near + // [53] call print_uint jsr print_uint // [54] phi from end::@1 to end::@2 [phi:end::@1->end::@2] __b2_from___b1: @@ -1438,7 +1438,7 @@ end: { // end::@2 __b2: // [55] call print_ln - // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] -- call_phi_near + // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] print_ln_from___b2: jsr print_ln jmp __breturn @@ -1462,7 +1462,7 @@ print_uint: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -1473,7 +1473,7 @@ print_uint: { // [67] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [67] phi print_char_cursor#37 = print_char_cursor#27 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -1539,7 +1539,7 @@ print_uchar: { // [75] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [75] phi print_char_cursor#26 = print_char_cursor#37 [phi:print_uchar->print_char#0] -- register_copy - // [75] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [75] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -1553,7 +1553,7 @@ print_uchar: { // [75] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [75] phi print_char_cursor#26 = print_char_cursor#27 [phi:print_uchar::@1->print_char#0] -- register_copy - // [75] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [75] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -1802,7 +1802,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return @@ -1811,72 +1811,72 @@ __start: { // main main: { // start() - // [6] call start -- call_phi_near + // [6] call start jsr start // [7] phi from main to main::@1 [phi:main->main::@1] // main::@1 // round() // [8] call round - // [32] phi from main::@1 to round [phi:main::@1->round] -- call_phi_near + // [32] phi from main::@1 to round [phi:main::@1->round] jsr round // [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // round() // [10] call round - // [32] phi from main::@2 to round [phi:main::@2->round] -- call_phi_near + // [32] phi from main::@2 to round [phi:main::@2->round] jsr round // [11] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // round() // [12] call round - // [32] phi from main::@3 to round [phi:main::@3->round] -- call_phi_near + // [32] phi from main::@3 to round [phi:main::@3->round] jsr round // [13] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // round() // [14] call round - // [32] phi from main::@4 to round [phi:main::@4->round] -- call_phi_near + // [32] phi from main::@4 to round [phi:main::@4->round] jsr round // [15] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 // round() // [16] call round - // [32] phi from main::@5 to round [phi:main::@5->round] -- call_phi_near + // [32] phi from main::@5 to round [phi:main::@5->round] jsr round // [17] phi from main::@5 to main::@6 [phi:main::@5->main::@6] // main::@6 // round() // [18] call round - // [32] phi from main::@6 to round [phi:main::@6->round] -- call_phi_near + // [32] phi from main::@6 to round [phi:main::@6->round] jsr round // [19] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 // round() // [20] call round - // [32] phi from main::@7 to round [phi:main::@7->round] -- call_phi_near + // [32] phi from main::@7 to round [phi:main::@7->round] jsr round // [21] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 // round() // [22] call round - // [32] phi from main::@8 to round [phi:main::@8->round] -- call_phi_near + // [32] phi from main::@8 to round [phi:main::@8->round] jsr round // [23] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 // round() // [24] call round - // [32] phi from main::@9 to round [phi:main::@9->round] -- call_phi_near + // [32] phi from main::@9 to round [phi:main::@9->round] jsr round // [25] phi from main::@9 to main::@10 [phi:main::@9->main::@10] // main::@10 // round() // [26] call round - // [32] phi from main::@10 to round [phi:main::@10->round] -- call_phi_near + // [32] phi from main::@10 to round [phi:main::@10->round] jsr round // [27] phi from main::@10 to main::@11 [phi:main::@10->main::@11] // main::@11 // end() - // [28] call end -- call_phi_near + // [28] call end jsr end // main::@return // } @@ -2016,7 +2016,7 @@ end: { lda.z last_time+1 sta.z Ticks+1 // start() - // [49] call start -- call_phi_near + // [49] call start jsr start // end::@1 // last_time -= Ticks @@ -2036,13 +2036,13 @@ end: { sta.z Ticks_1+1 // print_uint(Ticks) // [52] print_uint::w#0 = Ticks#1 - // [53] call print_uint -- call_phi_near + // [53] call print_uint jsr print_uint // [54] phi from end::@1 to end::@2 [phi:end::@1->end::@2] // end::@2 // print_ln() // [55] call print_ln - // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] -- call_phi_near + // [62] phi from end::@2 to print_ln [phi:end::@2->print_ln] jsr print_ln // end::@return // } @@ -2064,7 +2064,7 @@ print_uint: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [67] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -2073,7 +2073,7 @@ print_uint: { // [60] call print_uchar // [67] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [67] phi print_char_cursor#37 = print_char_cursor#27 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [67] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@return // } @@ -2136,7 +2136,7 @@ print_uchar: { // Table of hexadecimal digits // [75] phi from print_uchar to print_char [phi:print_uchar->print_char] // [75] phi print_char_cursor#26 = print_char_cursor#37 [phi:print_uchar->print_char#0] -- register_copy - // [75] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [75] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -2149,7 +2149,7 @@ print_uchar: { // [73] call print_char // [75] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [75] phi print_char_cursor#26 = print_char_cursor#27 [phi:print_uchar::@1->print_char#0] -- register_copy - // [75] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [75] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/min-fmul-16.log b/src/test/ref/min-fmul-16.log index c77e7eb9b..a5d1cdb6c 100644 --- a/src/test/ref/min-fmul-16.log +++ b/src/test/ref/min-fmul-16.log @@ -1304,7 +1304,7 @@ main: { .label b = $929 .label r = $a // [1] call mulf_init - // [12] phi from main to mulf_init [phi:main->mulf_init] -- call_phi_near + // [12] phi from main to mulf_init [phi:main->mulf_init] mulf_init_from_main: jsr mulf_init jmp __b4 @@ -1334,7 +1334,7 @@ main: { __b3: // [5] *BORDER_COLOR = ++ *BORDER_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 inc BORDER_COLOR - // [6] call mulf16u -- call_phi_near + // [6] call mulf16u jsr mulf16u // [7] mulf16u::return#0 = mulf16u::return#1 jmp __b5 @@ -1344,7 +1344,7 @@ main: { // [9] *BORDER_COLOR = -- *BORDER_COLOR -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDER_COLOR // [10] print_ulong::dw#0 = main::r#0 - // [11] call print_ulong -- call_phi_near + // [11] call print_ulong jsr print_ulong // [3] phi from main::@5 to main::@1 [phi:main::@5->main::@1] __b1_from___b5: @@ -1702,7 +1702,7 @@ print_ulong: { // [51] phi from print_ulong to print_uint [phi:print_ulong->print_uint] print_uint_from_print_ulong: // [51] phi print_char_cursor#36 = print_char_cursor#15 [phi:print_ulong->print_uint#0] -- register_copy - // [51] phi print_uint::w#2 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- call_phi_near + // [51] phi print_uint::w#2 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- register_copy jsr print_uint jmp __b1 // print_ulong::@1 @@ -1716,7 +1716,7 @@ print_ulong: { // [51] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] print_uint_from___b1: // [51] phi print_char_cursor#36 = print_char_cursor#10 [phi:print_ulong::@1->print_uint#0] -- register_copy - // [51] phi print_uint::w#2 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- call_phi_near + // [51] phi print_uint::w#2 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- register_copy jsr print_uint jmp __breturn // print_ulong::@return @@ -1735,7 +1735,7 @@ print_uint: { // [57] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [57] phi print_char_cursor#38 = print_char_cursor#36 [phi:print_uint->print_uchar#0] -- register_copy - // [57] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [57] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -1746,7 +1746,7 @@ print_uint: { // [57] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [57] phi print_char_cursor#38 = print_char_cursor#10 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [57] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [57] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -1772,7 +1772,7 @@ print_uchar: { // [65] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [65] phi print_char_cursor#28 = print_char_cursor#38 [phi:print_uchar->print_char#0] -- register_copy - // [65] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [65] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -1786,7 +1786,7 @@ print_uchar: { // [65] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [65] phi print_char_cursor#28 = print_char_cursor#10 [phi:print_uchar::@1->print_char#0] -- register_copy - // [65] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [65] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -2039,7 +2039,7 @@ main: { .label r = $a // mulf_init() // [1] call mulf_init - // [12] phi from main to mulf_init [phi:main->mulf_init] -- call_phi_near + // [12] phi from main to mulf_init [phi:main->mulf_init] jsr mulf_init // main::@4 // asm @@ -2064,7 +2064,7 @@ main: { // [5] *BORDER_COLOR = ++ *BORDER_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 inc BORDER_COLOR // dword r = mulf16u(a, b) - // [6] call mulf16u -- call_phi_near + // [6] call mulf16u jsr mulf16u // [7] mulf16u::return#0 = mulf16u::return#1 // main::@5 @@ -2074,7 +2074,7 @@ main: { dec BORDER_COLOR // print_ulong(r) // [10] print_ulong::dw#0 = main::r#0 - // [11] call print_ulong -- call_phi_near + // [11] call print_ulong jsr print_ulong // [3] phi from main::@5 to main::@1 [phi:main::@5->main::@1] // [3] phi print_char_cursor#15 = SCREEN [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 @@ -2431,7 +2431,7 @@ print_ulong: { // [47] call print_uint // [51] phi from print_ulong to print_uint [phi:print_ulong->print_uint] // [51] phi print_char_cursor#36 = print_char_cursor#15 [phi:print_ulong->print_uint#0] -- register_copy - // [51] phi print_uint::w#2 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- call_phi_near + // [51] phi print_uint::w#2 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- register_copy jsr print_uint // print_ulong::@1 // print_uint(WORD0(dw)) @@ -2443,7 +2443,7 @@ print_ulong: { // [49] call print_uint // [51] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] // [51] phi print_char_cursor#36 = print_char_cursor#10 [phi:print_ulong::@1->print_uint#0] -- register_copy - // [51] phi print_uint::w#2 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- call_phi_near + // [51] phi print_uint::w#2 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- register_copy jsr print_uint // print_ulong::@return // } @@ -2461,7 +2461,7 @@ print_uint: { // [53] call print_uchar // [57] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [57] phi print_char_cursor#38 = print_char_cursor#36 [phi:print_uint->print_uchar#0] -- register_copy - // [57] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [57] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -2470,7 +2470,7 @@ print_uint: { // [55] call print_uchar // [57] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [57] phi print_char_cursor#38 = print_char_cursor#10 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [57] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [57] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@return // } @@ -2496,7 +2496,7 @@ print_uchar: { // Table of hexadecimal digits // [65] phi from print_uchar to print_char [phi:print_uchar->print_char] // [65] phi print_char_cursor#28 = print_char_cursor#38 [phi:print_uchar->print_char#0] -- register_copy - // [65] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [65] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -2509,7 +2509,7 @@ print_uchar: { // [63] call print_char // [65] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [65] phi print_char_cursor#28 = print_char_cursor#10 [phi:print_uchar::@1->print_char#0] -- register_copy - // [65] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [65] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/missing-band.log b/src/test/ref/missing-band.log index f452c37cb..344b3707d 100644 --- a/src/test/ref/missing-band.log +++ b/src/test/ref/missing-band.log @@ -198,7 +198,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { .label a = 2 - // [1] call foo -- call_phi_near + // [1] call foo jsr foo // [2] foo::return#0 = foo::return#1 jmp __b1 @@ -287,7 +287,7 @@ Score: 39 main: { .label a = 2 // foo(1) - // [1] call foo -- call_phi_near + // [1] call foo jsr foo // [2] foo::return#0 = foo::return#1 // main::@1 diff --git a/src/test/ref/modglobal.log b/src/test/ref/modglobal.log index c76028bca..955b0c772 100644 --- a/src/test/ref/modglobal.log +++ b/src/test/ref/modglobal.log @@ -394,7 +394,7 @@ main: { ldx #0 // [13] phi cnt2#11 = 0 [phi:main->inccnt#1] -- vbuyy=vbuc1 ldy #0 - // [13] phi cnt#12 = 0 [phi:main->inccnt#2] -- call_phi_near + // [13] phi cnt#12 = 0 [phi:main->inccnt#2] -- vbuaa=vbuc1 lda #0 jsr inccnt // [2] inccnt::return#0 = inccnt::return#2 @@ -413,7 +413,7 @@ main: { inccnt_from___b1: // [13] phi cnt3#11 = cnt3#12 [phi:main::@1->inccnt#0] -- register_copy // [13] phi cnt2#11 = cnt2#12 [phi:main::@1->inccnt#1] -- register_copy - // [13] phi cnt#12 = cnt#1 [phi:main::@1->inccnt#2] -- call_phi_near + // [13] phi cnt#12 = cnt#1 [phi:main::@1->inccnt#2] -- register_copy jsr inccnt // [7] inccnt::return#1 = inccnt::return#2 jmp __b2 @@ -527,7 +527,7 @@ main: { ldx #0 // [13] phi cnt2#11 = 0 [phi:main->inccnt#1] -- vbuyy=vbuc1 ldy #0 - // [13] phi cnt#12 = 0 [phi:main->inccnt#2] -- call_phi_near + // [13] phi cnt#12 = 0 [phi:main->inccnt#2] -- vbuaa=vbuc1 txa jsr inccnt // inccnt() @@ -547,7 +547,7 @@ main: { // [13] phi from main::@1 to inccnt [phi:main::@1->inccnt] // [13] phi cnt3#11 = cnt3#12 [phi:main::@1->inccnt#0] -- register_copy // [13] phi cnt2#11 = cnt2#12 [phi:main::@1->inccnt#1] -- register_copy - // [13] phi cnt#12 = cnt#1 [phi:main::@1->inccnt#2] -- call_phi_near + // [13] phi cnt#12 = cnt#1 [phi:main::@1->inccnt#2] -- register_copy jsr inccnt // inccnt() // [7] inccnt::return#1 = inccnt::return#2 diff --git a/src/test/ref/modglobalmin.log b/src/test/ref/modglobalmin.log index 1868da3ec..be74abc80 100644 --- a/src/test/ref/modglobalmin.log +++ b/src/test/ref/modglobalmin.log @@ -215,7 +215,7 @@ main: { // [1] call inccnt // [8] phi from main to inccnt [phi:main->inccnt] inccnt_from_main: - // [8] phi cnt#13 = 0 [phi:main->inccnt#0] -- call_phi_near + // [8] phi cnt#13 = 0 [phi:main->inccnt#0] -- vbuxx=vbuc1 ldx #0 jsr inccnt jmp __b1 @@ -228,7 +228,7 @@ main: { // [4] call inccnt // [8] phi from main::@1 to inccnt [phi:main::@1->inccnt] inccnt_from___b1: - // [8] phi cnt#13 = cnt#1 [phi:main::@1->inccnt#0] -- call_phi_near + // [8] phi cnt#13 = cnt#1 [phi:main::@1->inccnt#0] -- register_copy jsr inccnt jmp __b2 // main::@2 @@ -305,7 +305,7 @@ main: { // inccnt() // [1] call inccnt // [8] phi from main to inccnt [phi:main->inccnt] - // [8] phi cnt#13 = 0 [phi:main->inccnt#0] -- call_phi_near + // [8] phi cnt#13 = 0 [phi:main->inccnt#0] -- vbuxx=vbuc1 ldx #0 jsr inccnt // main::@1 @@ -318,7 +318,7 @@ main: { // inccnt() // [4] call inccnt // [8] phi from main::@1 to inccnt [phi:main::@1->inccnt] - // [8] phi cnt#13 = cnt#1 [phi:main::@1->inccnt#0] -- call_phi_near + // [8] phi cnt#13 = cnt#1 [phi:main::@1->inccnt#0] -- register_copy jsr inccnt // main::@2 // SCREEN[1]=++cnt; diff --git a/src/test/ref/mul8u-min.log b/src/test/ref/mul8u-min.log index 7fc828d4b..200b2bb19 100644 --- a/src/test/ref/mul8u-min.log +++ b/src/test/ref/mul8u-min.log @@ -516,7 +516,7 @@ main: { ldx.z a // [4] mul8u::b#0 = main::b#2 -- vbuaa=vbuyy tya - // [5] call mul8u -- call_phi_near + // [5] call mul8u jsr mul8u // [6] mul8u::return#2 = mul8u::res#2 jmp __b4 @@ -757,7 +757,7 @@ main: { ldx.z a // [4] mul8u::b#0 = main::b#2 -- vbuaa=vbuyy tya - // [5] call mul8u -- call_phi_near + // [5] call mul8u jsr mul8u // [6] mul8u::return#2 = mul8u::res#2 // main::@4 diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log index 4028e59da..ba50c3453 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log @@ -1759,7 +1759,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [8] call main -- call_phi_near + // [8] call main jsr main jmp __breturn // __start::@return @@ -1782,7 +1782,7 @@ plex_irq: { jmp __b3 // plex_irq::@3 __b3: - // [13] call plexShowSprite -- call_phi_near + // [13] call plexShowSprite jsr plexShowSprite jmp plexFreeNextYpos1 // plex_irq::plexFreeNextYpos1 @@ -1851,7 +1851,7 @@ plex_irq: { main: { // asm { sei } sei - // [27] call init -- call_phi_near + // [27] call init jsr init // [28] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -1859,7 +1859,7 @@ main: { // main::@1 __b1: // [29] call loop - // [79] phi from main::@1 to loop [phi:main::@1->loop] -- call_phi_near + // [79] phi from main::@1 to loop [phi:main::@1->loop] loop_from___b1: jsr loop jmp __breturn @@ -1981,7 +1981,7 @@ init: { sta D011 // [57] call plexInit // Initialize the multiplexer - // [94] phi from init to plexInit [phi:init->plexInit] -- call_phi_near + // [94] phi from init to plexInit [phi:init->plexInit] plexInit_from_init: jsr plexInit // [58] phi from init to init::@1 [phi:init->init::@1] @@ -2147,7 +2147,7 @@ loop: { // [90] *BORDER_COLOR = ++ *BORDER_COLOR -- _deref_pbuc1=_inc__deref_pbuc1 inc BORDER_COLOR // [91] call plexSort - // [101] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] -- call_phi_near + // [101] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] plexSort_from___b5: jsr plexSort jmp __b6 @@ -2756,7 +2756,7 @@ __start: { sta.z framedone // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [8] call main -- call_phi_near + // [8] call main jsr main // __start::@return // [9] return @@ -2777,7 +2777,7 @@ plex_irq: { // plex_irq::@3 __b3: // plexShowSprite() - // [13] call plexShowSprite -- call_phi_near + // [13] call plexShowSprite jsr plexShowSprite // plex_irq::plexFreeNextYpos1 // return PLEX_FREE_YPOS[plex_free_next]; @@ -2847,13 +2847,13 @@ main: { // asm { sei } sei // init() - // [27] call init -- call_phi_near + // [27] call init jsr init // [28] phi from main to main::@1 [phi:main->main::@1] // main::@1 // loop() // [29] call loop - // [79] phi from main::@1 to loop [phi:main::@1->loop] -- call_phi_near + // [79] phi from main::@1 to loop [phi:main::@1->loop] jsr loop // main::@return // } @@ -2989,7 +2989,7 @@ init: { // plexInit(SCREEN) // [57] call plexInit // Initialize the multiplexer - // [94] phi from init to plexInit [phi:init->plexInit] -- call_phi_near + // [94] phi from init to plexInit [phi:init->plexInit] jsr plexInit // [58] phi from init to init::@1 [phi:init->init::@1] // [58] phi init::xp#2 = $20 [phi:init->init::@1#0] -- vwuz1=vwuc1 @@ -3153,7 +3153,7 @@ loop: { inc BORDER_COLOR // plexSort() // [91] call plexSort - // [101] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] -- call_phi_near + // [101] phi from loop::@5 to plexSort [phi:loop::@5->plexSort] jsr plexSort // loop::@6 // *BORDER_COLOR = GREEN diff --git a/src/test/ref/multiply-16bit-const.log b/src/test/ref/multiply-16bit-const.log index a2bb26f85..d043c37d7 100644 --- a/src/test/ref/multiply-16bit-const.log +++ b/src/test/ref/multiply-16bit-const.log @@ -1638,7 +1638,7 @@ main: { .label __10 = 2 .label __11 = 2 // [1] call print_cls - // [18] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [18] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1793,7 +1793,7 @@ main: { lda.z print_ulong_decimal.w+3 adc.z i+3 sta.z print_ulong_decimal.w+3 - // [13] call print_ulong_decimal -- call_phi_near + // [13] call print_ulong_decimal jsr print_ulong_decimal // [14] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -1801,7 +1801,7 @@ main: { // main::@3 __b3: // [15] call print_ln - // [26] phi from main::@3 to print_ln [phi:main::@3->print_ln] -- call_phi_near + // [26] phi from main::@3 to print_ln [phi:main::@3->print_ln] print_ln_from___b3: jsr print_ln jmp __b4 @@ -1837,7 +1837,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [19] call memset - // [32] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [32] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -1853,7 +1853,7 @@ print_ulong_decimal: { .label w = 2 // [21] ultoa::value#0 = print_ulong_decimal::w#0 // [22] call ultoa - // [38] phi from print_ulong_decimal to ultoa [phi:print_ulong_decimal->ultoa] -- call_phi_near + // [38] phi from print_ulong_decimal to ultoa [phi:print_ulong_decimal->ultoa] ultoa_from_print_ulong_decimal: jsr ultoa // [23] phi from print_ulong_decimal to print_ulong_decimal::@1 [phi:print_ulong_decimal->print_ulong_decimal::@1] @@ -1861,7 +1861,7 @@ print_ulong_decimal: { jmp __b1 // print_ulong_decimal::@1 __b1: - // [24] call print_str -- call_phi_near + // [24] call print_str jsr print_str jmp __breturn // print_ulong_decimal::@return @@ -2076,7 +2076,7 @@ ultoa: { // [53] ultoa_append::value#0 = ultoa::value#2 // [54] ultoa_append::sub#0 = ultoa::digit_value#0 // [55] call ultoa_append - // [66] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] -- call_phi_near + // [66] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] ultoa_append_from___b5: jsr ultoa_append // [56] ultoa_append::return#0 = ultoa_append::value#2 @@ -2133,7 +2133,7 @@ print_str: { // [63] print_char::ch#0 = *print_str::str#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [64] call print_char -- call_phi_near + // [64] call print_char jsr print_char jmp __b3 // print_str::@3 @@ -2473,7 +2473,7 @@ main: { .label __11 = 2 // print_cls() // [1] call print_cls - // [18] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [18] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi print_char_cursor#13 = print_screen#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -2625,13 +2625,13 @@ main: { lda.z print_ulong_decimal.w+3 adc.z i+3 sta.z print_ulong_decimal.w+3 - // [13] call print_ulong_decimal -- call_phi_near + // [13] call print_ulong_decimal jsr print_ulong_decimal // [14] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // print_ln() // [15] call print_ln - // [26] phi from main::@3 to print_ln [phi:main::@3->print_ln] -- call_phi_near + // [26] phi from main::@3 to print_ln [phi:main::@3->print_ln] jsr print_ln // main::@4 // i+=333 @@ -2665,7 +2665,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [19] call memset - // [32] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [32] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -2680,12 +2680,12 @@ print_ulong_decimal: { // ultoa(w, decimal_digits_long, DECIMAL) // [21] ultoa::value#0 = print_ulong_decimal::w#0 // [22] call ultoa - // [38] phi from print_ulong_decimal to ultoa [phi:print_ulong_decimal->ultoa] -- call_phi_near + // [38] phi from print_ulong_decimal to ultoa [phi:print_ulong_decimal->ultoa] jsr ultoa // [23] phi from print_ulong_decimal to print_ulong_decimal::@1 [phi:print_ulong_decimal->print_ulong_decimal::@1] // print_ulong_decimal::@1 // print_str(decimal_digits_long) - // [24] call print_str -- call_phi_near + // [24] call print_str jsr print_str // print_ulong_decimal::@return // } @@ -2893,7 +2893,7 @@ ultoa: { // [53] ultoa_append::value#0 = ultoa::value#2 // [54] ultoa_append::sub#0 = ultoa::digit_value#0 // [55] call ultoa_append - // [66] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] -- call_phi_near + // [66] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] jsr ultoa_append // ultoa_append(buffer++, value, digit_value) // [56] ultoa_append::return#0 = ultoa_append::value#2 @@ -2948,7 +2948,7 @@ print_str: { // [63] print_char::ch#0 = *print_str::str#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [64] call print_char -- call_phi_near + // [64] call print_char jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/nes-array.log b/src/test/ref/nes-array.log index 7aef83712..9730630ef 100644 --- a/src/test/ref/nes-array.log +++ b/src/test/ref/nes-array.log @@ -318,7 +318,7 @@ main: { sta.z foo.y lda #>y1 sta.z foo.y+1 - // [11] phi foo::x#2 = 1 [phi:main->foo#1] -- call_phi_near + // [11] phi foo::x#2 = 1 [phi:main->foo#1] -- vbuxx=vbuc1 ldx #1 jsr foo // [3] foo::return#2 = foo::return#0 @@ -339,7 +339,7 @@ main: { sta.z foo.y lda #>y2 sta.z foo.y+1 - // [11] phi foo::x#2 = 2 [phi:main::@1->foo#1] -- call_phi_near + // [11] phi foo::x#2 = 2 [phi:main::@1->foo#1] -- vbuxx=vbuc1 ldx #2 jsr foo // [7] foo::return#3 = foo::return#0 @@ -476,7 +476,7 @@ main: { sta.z foo.y lda #>y1 sta.z foo.y+1 - // [11] phi foo::x#2 = 1 [phi:main->foo#1] -- call_phi_near + // [11] phi foo::x#2 = 1 [phi:main->foo#1] -- vbuxx=vbuc1 ldx #1 jsr foo // foo(1, &y1) @@ -497,7 +497,7 @@ main: { sta.z foo.y lda #>y2 sta.z foo.y+1 - // [11] phi foo::x#2 = 2 [phi:main::@1->foo#1] -- call_phi_near + // [11] phi foo::x#2 = 2 [phi:main::@1->foo#1] -- vbuxx=vbuc1 ldx #2 jsr foo // foo(2, &y2) diff --git a/src/test/ref/nomodify-3.log b/src/test/ref/nomodify-3.log index c417d2987..54e25b59f 100644 --- a/src/test/ref/nomodify-3.log +++ b/src/test/ref/nomodify-3.log @@ -133,7 +133,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -204,7 +204,7 @@ __start: { sta.z i // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/nomodify-4.log b/src/test/ref/nomodify-4.log index 2967bc6f7..7acfaf501 100644 --- a/src/test/ref/nomodify-4.log +++ b/src/test/ref/nomodify-4.log @@ -140,7 +140,7 @@ main: { // [1] call print // [5] phi from main to print [phi:main->print] print_from_main: - // [5] phi print::c#2 = 'a' [phi:main->print#0] -- call_phi_near + // [5] phi print::c#2 = 'a' [phi:main->print#0] -- vbuaa=vbuc1 lda #'a' jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -151,7 +151,7 @@ main: { // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] print_from___b1: - // [5] phi print::c#2 = 'b' [phi:main::@1->print#0] -- call_phi_near + // [5] phi print::c#2 = 'b' [phi:main::@1->print#0] -- vbuaa=vbuc1 lda #'b' jsr print jmp __breturn @@ -219,7 +219,7 @@ main: { // print('a') // [1] call print // [5] phi from main to print [phi:main->print] - // [5] phi print::c#2 = 'a' [phi:main->print#0] -- call_phi_near + // [5] phi print::c#2 = 'a' [phi:main->print#0] -- vbuaa=vbuc1 lda #'a' jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -227,7 +227,7 @@ main: { // print('b') // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] - // [5] phi print::c#2 = 'b' [phi:main::@1->print#0] -- call_phi_near + // [5] phi print::c#2 = 'b' [phi:main::@1->print#0] -- vbuaa=vbuc1 lda #'b' jsr print // main::@return diff --git a/src/test/ref/norom-charset.log b/src/test/ref/norom-charset.log index 9004c2050..d4b232a12 100644 --- a/src/test/ref/norom-charset.log +++ b/src/test/ref/norom-charset.log @@ -606,7 +606,7 @@ main: { lda charset_spec_row+1,x sta.z gen_char3.spec+1 // [8] call gen_char3 - // [11] phi from main::@2 to gen_char3 [phi:main::@2->gen_char3] -- call_phi_near + // [11] phi from main::@2 to gen_char3 [phi:main::@2->gen_char3] gen_char3_from___b2: jsr gen_char3 jmp __b4 @@ -868,7 +868,7 @@ main: { lda charset_spec_row+1,x sta.z gen_char3.spec+1 // [8] call gen_char3 - // [11] phi from main::@2 to gen_char3 [phi:main::@2->gen_char3] -- call_phi_near + // [11] phi from main::@2 to gen_char3 [phi:main::@2->gen_char3] jsr gen_char3 // main::@4 // charset = charset+8 diff --git a/src/test/ref/null-constant-1.log b/src/test/ref/null-constant-1.log index 5927f14f1..1c2cc9f25 100644 --- a/src/test/ref/null-constant-1.log +++ b/src/test/ref/null-constant-1.log @@ -249,7 +249,7 @@ main: { // [1] call get // [10] phi from main to get [phi:main->get] get_from_main: - // [10] phi get::ptr#2 = main::SCREEN [phi:main->get#0] -- call_phi_near + // [10] phi get::ptr#2 = main::SCREEN [phi:main->get#0] -- pbuz1=pbuc1 lda #SCREEN @@ -265,7 +265,7 @@ main: { // [5] call get // [10] phi from main::@1 to get [phi:main::@1->get] get_from___b1: - // [10] phi get::ptr#2 = 0 [phi:main::@1->get#0] -- call_phi_near + // [10] phi get::ptr#2 = 0 [phi:main::@1->get#0] -- pbuz1=vbuc1 lda #<0 sta.z get.ptr lda #>0 @@ -379,7 +379,7 @@ main: { // get(SCREEN) // [1] call get // [10] phi from main to get [phi:main->get] - // [10] phi get::ptr#2 = main::SCREEN [phi:main->get#0] -- call_phi_near + // [10] phi get::ptr#2 = main::SCREEN [phi:main->get#0] -- pbuz1=pbuc1 lda #SCREEN @@ -395,7 +395,7 @@ main: { // get(NULL) // [5] call get // [10] phi from main::@1 to get [phi:main::@1->get] - // [10] phi get::ptr#2 = 0 [phi:main::@1->get#0] -- call_phi_near + // [10] phi get::ptr#2 = 0 [phi:main::@1->get#0] -- pbuz1=vbuc1 lda #<0 sta.z get.ptr sta.z get.ptr+1 diff --git a/src/test/ref/number-conversion.log b/src/test/ref/number-conversion.log index 7c834dd71..db482258b 100644 --- a/src/test/ref/number-conversion.log +++ b/src/test/ref/number-conversion.log @@ -1393,7 +1393,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_SIGNED_CHAR [phi:main->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_SIGNED_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_SIGNED_CHAR [phi:main->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_SIGNED_CHAR [phi:main->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_SIGNED_CHAR jsr assertType // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1408,7 +1408,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_INT [phi:main::@1->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@1->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@1->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_INT jsr assertType // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -1423,7 +1423,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@2->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@2->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@2->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -1438,7 +1438,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_INT [phi:main::@3->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@3->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@3->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_INT jsr assertType // [8] phi from main::@3 to main::@4 [phi:main::@3->main::@4] @@ -1453,7 +1453,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_INT [phi:main::@4->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@4->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@4->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_INT jsr assertType // [10] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -1468,7 +1468,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@5->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@5->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@5->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType // [12] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -1483,7 +1483,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@6->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@6->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@6->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType // [14] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -1498,7 +1498,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@7->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@7->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@7->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType // [16] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -1513,7 +1513,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@8->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@8->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@8->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType // [18] phi from main::@8 to main::@9 [phi:main::@8->main::@9] @@ -1529,7 +1529,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@9->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@9->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@9->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_CHAR jsr assertType // [20] phi from main::@9 to main::@10 [phi:main::@9->main::@10] @@ -1544,7 +1544,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@10->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@10->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@10->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_CHAR jsr assertType // [22] phi from main::@10 to main::@11 [phi:main::@10->main::@11] @@ -1559,7 +1559,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@11->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@11->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@11->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [24] phi from main::@11 to main::@12 [phi:main::@11->main::@12] @@ -1574,7 +1574,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@12->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@12->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@12->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [26] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -1589,7 +1589,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@13->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@13->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@13->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [28] phi from main::@13 to main::@14 [phi:main::@13->main::@14] @@ -1604,7 +1604,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@14->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@14->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@14->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [30] phi from main::@14 to main::@15 [phi:main::@14->main::@15] @@ -1619,7 +1619,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@15->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@15->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@15->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [32] phi from main::@15 to main::@16 [phi:main::@15->main::@16] @@ -1634,7 +1634,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@16->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@16->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@16->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [34] phi from main::@16 to main::@17 [phi:main::@16->main::@17] @@ -1649,7 +1649,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@17->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@17->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@17->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [36] phi from main::@17 to main::@18 [phi:main::@17->main::@18] @@ -1664,7 +1664,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@18->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@18->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@18->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [38] phi from main::@18 to main::@19 [phi:main::@18->main::@19] @@ -1679,7 +1679,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@19->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@19->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@19->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [40] phi from main::@19 to main::@20 [phi:main::@19->main::@20] @@ -1694,7 +1694,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@20->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@20->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@20->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [42] phi from main::@20 to main::@21 [phi:main::@20->main::@21] @@ -1710,7 +1710,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@21->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@21->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@21->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_CHAR jsr assertType // [44] phi from main::@21 to main::@22 [phi:main::@21->main::@22] @@ -1725,7 +1725,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@22->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@22->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@22->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_CHAR jsr assertType // [46] phi from main::@22 to main::@23 [phi:main::@22->main::@23] @@ -1740,7 +1740,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@23->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@23->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@23->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_CHAR jsr assertType // [48] phi from main::@23 to main::@24 [phi:main::@23->main::@24] @@ -1755,7 +1755,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@24->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@24->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@24->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [50] phi from main::@24 to main::@25 [phi:main::@24->main::@25] @@ -1770,7 +1770,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@25->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@25->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@25->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [52] phi from main::@25 to main::@26 [phi:main::@25->main::@26] @@ -1785,7 +1785,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@26->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@26->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@26->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [54] phi from main::@26 to main::@27 [phi:main::@26->main::@27] @@ -1800,7 +1800,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@27->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@27->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@27->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [56] phi from main::@27 to main::@28 [phi:main::@27->main::@28] @@ -1815,7 +1815,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@28->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@28->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@28->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [58] phi from main::@28 to main::@29 [phi:main::@28->main::@29] @@ -1830,7 +1830,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@29->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@29->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@29->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_INT jsr assertType // [60] phi from main::@29 to main::@30 [phi:main::@29->main::@30] @@ -1845,7 +1845,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@30->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@30->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@30->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [62] phi from main::@30 to main::@31 [phi:main::@30->main::@31] @@ -1860,7 +1860,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@31->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@31->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@31->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [64] phi from main::@31 to main::@32 [phi:main::@31->main::@32] @@ -1875,7 +1875,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@32->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@32->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@32->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [66] phi from main::@32 to main::@33 [phi:main::@32->main::@33] @@ -1890,7 +1890,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@33->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@33->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@33->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_UNSIGNED_LONG jsr assertType // [68] phi from main::@33 to main::@34 [phi:main::@33->main::@34] @@ -1905,7 +1905,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@34->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@34->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@34->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType jmp __breturn @@ -2199,7 +2199,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_SIGNED_CHAR [phi:main->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_SIGNED_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_SIGNED_CHAR [phi:main->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_SIGNED_CHAR [phi:main->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [2] phi from main to main::@1 [phi:main->main::@1] @@ -2211,7 +2211,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_INT [phi:main::@1->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@1->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@1->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -2223,7 +2223,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@2->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@2->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@2->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -2235,7 +2235,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_INT [phi:main::@3->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@3->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@3->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [8] phi from main::@3 to main::@4 [phi:main::@3->main::@4] @@ -2247,7 +2247,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_INT [phi:main::@4->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@4->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_INT [phi:main::@4->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [10] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -2259,7 +2259,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@5->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@5->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@5->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [12] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -2271,7 +2271,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@6->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@6->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@6->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [14] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -2283,7 +2283,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@7->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@7->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@7->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [16] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -2295,7 +2295,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_LONG [phi:main::@8->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@8->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@8->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [18] phi from main::@8 to main::@9 [phi:main::@8->main::@9] @@ -2308,7 +2308,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@9->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@9->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@9->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [20] phi from main::@9 to main::@10 [phi:main::@9->main::@10] @@ -2320,7 +2320,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@10->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@10->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@10->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [22] phi from main::@10 to main::@11 [phi:main::@10->main::@11] @@ -2332,7 +2332,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@11->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@11->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@11->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [24] phi from main::@11 to main::@12 [phi:main::@11->main::@12] @@ -2344,7 +2344,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@12->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@12->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@12->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [26] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -2356,7 +2356,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@13->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@13->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@13->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [28] phi from main::@13 to main::@14 [phi:main::@13->main::@14] @@ -2368,7 +2368,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@14->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@14->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@14->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [30] phi from main::@14 to main::@15 [phi:main::@14->main::@15] @@ -2380,7 +2380,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@15->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@15->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@15->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [32] phi from main::@15 to main::@16 [phi:main::@15->main::@16] @@ -2392,7 +2392,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@16->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@16->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@16->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [34] phi from main::@16 to main::@17 [phi:main::@16->main::@17] @@ -2404,7 +2404,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@17->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@17->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@17->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [36] phi from main::@17 to main::@18 [phi:main::@17->main::@18] @@ -2416,7 +2416,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@18->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@18->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@18->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [38] phi from main::@18 to main::@19 [phi:main::@18->main::@19] @@ -2428,7 +2428,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@19->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@19->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@19->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [40] phi from main::@19 to main::@20 [phi:main::@19->main::@20] @@ -2440,7 +2440,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@20->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@20->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@20->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [42] phi from main::@20 to main::@21 [phi:main::@20->main::@21] @@ -2453,7 +2453,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@21->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@21->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@21->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [44] phi from main::@21 to main::@22 [phi:main::@21->main::@22] @@ -2465,7 +2465,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@22->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@22->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@22->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [46] phi from main::@22 to main::@23 [phi:main::@22->main::@23] @@ -2477,7 +2477,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_CHAR [phi:main::@23->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_CHAR sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@23->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_CHAR [phi:main::@23->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [48] phi from main::@23 to main::@24 [phi:main::@23->main::@24] @@ -2489,7 +2489,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@24->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@24->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@24->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [50] phi from main::@24 to main::@25 [phi:main::@24->main::@25] @@ -2501,7 +2501,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@25->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@25->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@25->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [52] phi from main::@25 to main::@26 [phi:main::@25->main::@26] @@ -2513,7 +2513,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@26->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@26->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@26->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [54] phi from main::@26 to main::@27 [phi:main::@26->main::@27] @@ -2525,7 +2525,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@27->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@27->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@27->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [56] phi from main::@27 to main::@28 [phi:main::@27->main::@28] @@ -2537,7 +2537,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@28->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@28->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@28->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [58] phi from main::@28 to main::@29 [phi:main::@28->main::@29] @@ -2549,7 +2549,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_INT [phi:main::@29->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_INT sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@29->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_INT [phi:main::@29->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [60] phi from main::@29 to main::@30 [phi:main::@29->main::@30] @@ -2561,7 +2561,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@30->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@30->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@30->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [62] phi from main::@30 to main::@31 [phi:main::@30->main::@31] @@ -2573,7 +2573,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@31->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@31->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@31->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [64] phi from main::@31 to main::@32 [phi:main::@31->main::@32] @@ -2585,7 +2585,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@32->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@32->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@32->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [66] phi from main::@32 to main::@33 [phi:main::@32->main::@33] @@ -2597,7 +2597,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@33->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@33->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_UNSIGNED_LONG [phi:main::@33->assertType#2] -- vbuyy=vbuc1 tay jsr assertType // [68] phi from main::@33 to main::@34 [phi:main::@33->main::@34] @@ -2609,7 +2609,7 @@ main: { // [71] phi assertType::t2#35 = TYPEID_UNSIGNED_LONG [phi:main::@34->assertType#1] -- vbuz1=vbuc1 lda #TYPEID_UNSIGNED_LONG sta.z assertType.t2 - // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@34->assertType#2] -- call_phi_near + // [71] phi assertType::t1#35 = TYPEID_LONG [phi:main::@34->assertType#2] -- vbuyy=vbuc1 ldy #TYPEID_LONG jsr assertType // main::@return diff --git a/src/test/ref/number-ternary-fail-2.log b/src/test/ref/number-ternary-fail-2.log index da320d2ee..99ddb8acf 100644 --- a/src/test/ref/number-ternary-fail-2.log +++ b/src/test/ref/number-ternary-fail-2.log @@ -560,7 +560,7 @@ main: { .label height = 6*2+3 .label maze = malloc.return // [1] call malloc - // [6] phi from main to malloc [phi:main->malloc] -- call_phi_near + // [6] phi from main to malloc [phi:main->malloc] malloc_from_main: jsr malloc // [2] phi from main to main::@1 [phi:main->main::@1] @@ -569,7 +569,7 @@ main: { // main::@1 __b1: // [3] call SolveMaze - // [8] phi from main::@1 to SolveMaze [phi:main::@1->SolveMaze] -- call_phi_near + // [8] phi from main::@1 to SolveMaze [phi:main::@1->SolveMaze] SolveMaze_from___b1: jsr SolveMaze jmp __b2 @@ -742,13 +742,13 @@ main: { .label maze = malloc.return // malloc(width * height) // [1] call malloc - // [6] phi from main to malloc [phi:main->malloc] -- call_phi_near + // [6] phi from main to malloc [phi:main->malloc] jsr malloc // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // SolveMaze(maze, width, height) // [3] call SolveMaze - // [8] phi from main::@1 to SolveMaze [phi:main::@1->SolveMaze] -- call_phi_near + // [8] phi from main::@1 to SolveMaze [phi:main::@1->SolveMaze] jsr SolveMaze // main::@2 // asm diff --git a/src/test/ref/number-type.log b/src/test/ref/number-type.log index 78c5c6e98..88a159a46 100644 --- a/src/test/ref/number-type.log +++ b/src/test/ref/number-type.log @@ -609,14 +609,14 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call testBytes -- call_phi_near + // [1] call testBytes jsr testBytes // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: jmp __b1 // main::@1 __b1: - // [3] call testSBytes -- call_phi_near + // [3] call testSBytes jsr testSBytes jmp __breturn // main::@return @@ -765,12 +765,12 @@ Score: 180 // main main: { // testBytes() - // [1] call testBytes -- call_phi_near + // [1] call testBytes jsr testBytes // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // testSBytes() - // [3] call testSBytes -- call_phi_near + // [3] call testSBytes jsr testSBytes // main::@return // } diff --git a/src/test/ref/overlap-allocation-2.log b/src/test/ref/overlap-allocation-2.log index 349d1069a..3eeee67ea 100644 --- a/src/test/ref/overlap-allocation-2.log +++ b/src/test/ref/overlap-allocation-2.log @@ -318,7 +318,7 @@ main: { // [3] call line // [12] phi from main::@1 to line [phi:main::@1->line] line_from___b1: - // [12] phi line::l#2 = line::l#0 [phi:main::@1->line#0] -- call_phi_near + // [12] phi line::l#2 = line::l#0 [phi:main::@1->line#0] -- register_copy jsr line jmp __b3 // main::@3 @@ -345,7 +345,7 @@ main: { // [8] call line // [12] phi from main::@2 to line [phi:main::@2->line] line_from___b2: - // [12] phi line::l#2 = line::l#1 [phi:main::@2->line#0] -- call_phi_near + // [12] phi line::l#2 = line::l#1 [phi:main::@2->line#0] -- register_copy jsr line jmp __b4 // main::@4 @@ -368,7 +368,7 @@ line: { // [14] call plot // [18] phi from line to plot [phi:line->plot] plot_from_line: - // [18] phi plot::x#2 = plot::x#0 [phi:line->plot#0] -- call_phi_near + // [18] phi plot::x#2 = plot::x#0 [phi:line->plot#0] -- register_copy jsr plot jmp __b1 // line::@1 @@ -379,7 +379,7 @@ line: { // [16] call plot // [18] phi from line::@1 to plot [phi:line::@1->plot] plot_from___b1: - // [18] phi plot::x#2 = plot::x#1 [phi:line::@1->plot#0] -- call_phi_near + // [18] phi plot::x#2 = plot::x#1 [phi:line::@1->plot#0] -- register_copy jsr plot jmp __breturn // line::@return @@ -491,7 +491,7 @@ main: { tax // [3] call line // [12] phi from main::@1 to line [phi:main::@1->line] - // [12] phi line::l#2 = line::l#0 [phi:main::@1->line#0] -- call_phi_near + // [12] phi line::l#2 = line::l#0 [phi:main::@1->line#0] -- register_copy jsr line // main::@3 // for(byte i : 0..8) @@ -513,7 +513,7 @@ main: { tax // [8] call line // [12] phi from main::@2 to line [phi:main::@2->line] - // [12] phi line::l#2 = line::l#1 [phi:main::@2->line#0] -- call_phi_near + // [12] phi line::l#2 = line::l#1 [phi:main::@2->line#0] -- register_copy jsr line // main::@4 // for(byte j : 10..18) @@ -534,7 +534,7 @@ line: { // [13] plot::x#0 = line::l#2 // [14] call plot // [18] phi from line to plot [phi:line->plot] - // [18] phi plot::x#2 = plot::x#0 [phi:line->plot#0] -- call_phi_near + // [18] phi plot::x#2 = plot::x#0 [phi:line->plot#0] -- register_copy jsr plot // line::@1 // plot(l+20) @@ -543,7 +543,7 @@ line: { axs #-[$14] // [16] call plot // [18] phi from line::@1 to plot [phi:line::@1->plot] - // [18] phi plot::x#2 = plot::x#1 [phi:line::@1->plot#0] -- call_phi_near + // [18] phi plot::x#2 = plot::x#1 [phi:line::@1->plot#0] -- register_copy jsr plot // line::@return // } diff --git a/src/test/ref/overlap-allocation.log b/src/test/ref/overlap-allocation.log index 7fa4b33d3..52b2b1b17 100644 --- a/src/test/ref/overlap-allocation.log +++ b/src/test/ref/overlap-allocation.log @@ -308,7 +308,7 @@ main: { // [3] call plot // [17] phi from main::@1 to plot [phi:main::@1->plot] plot_from___b1: - // [17] phi plot::x#3 = plot::x#0 [phi:main::@1->plot#0] -- call_phi_near + // [17] phi plot::x#3 = plot::x#0 [phi:main::@1->plot#0] -- register_copy jsr plot jmp __b4 // main::@4 @@ -333,7 +333,7 @@ main: { // [8] call plot // [17] phi from main::@2 to plot [phi:main::@2->plot] plot_from___b2: - // [17] phi plot::x#3 = plot::x#1 [phi:main::@2->plot#0] -- call_phi_near + // [17] phi plot::x#3 = plot::x#1 [phi:main::@2->plot#0] -- register_copy jsr plot jmp __b5 // main::@5 @@ -358,7 +358,7 @@ main: { // [13] call plot // [17] phi from main::@3 to plot [phi:main::@3->plot] plot_from___b3: - // [17] phi plot::x#3 = plot::x#2 [phi:main::@3->plot#0] -- call_phi_near + // [17] phi plot::x#3 = plot::x#2 [phi:main::@3->plot#0] -- register_copy jsr plot jmp __b6 // main::@6 @@ -478,7 +478,7 @@ main: { // [2] plot::x#0 = main::i#2 // [3] call plot // [17] phi from main::@1 to plot [phi:main::@1->plot] - // [17] phi plot::x#3 = plot::x#0 [phi:main::@1->plot#0] -- call_phi_near + // [17] phi plot::x#3 = plot::x#0 [phi:main::@1->plot#0] -- register_copy jsr plot // main::@4 // for(byte i : 0..10) @@ -498,7 +498,7 @@ main: { // [7] plot::x#1 = main::j#2 // [8] call plot // [17] phi from main::@2 to plot [phi:main::@2->plot] - // [17] phi plot::x#3 = plot::x#1 [phi:main::@2->plot#0] -- call_phi_near + // [17] phi plot::x#3 = plot::x#1 [phi:main::@2->plot#0] -- register_copy jsr plot // main::@5 // for(byte j : 0..10) @@ -518,7 +518,7 @@ main: { // [12] plot::x#2 = main::k#2 // [13] call plot // [17] phi from main::@3 to plot [phi:main::@3->plot] - // [17] phi plot::x#3 = plot::x#2 [phi:main::@3->plot#0] -- call_phi_near + // [17] phi plot::x#3 = plot::x#2 [phi:main::@3->plot#0] -- register_copy jsr plot // main::@6 // for(byte k : 0..10) diff --git a/src/test/ref/plus-0.log b/src/test/ref/plus-0.log index 896fa94b1..3b95a5fc5 100644 --- a/src/test/ref/plus-0.log +++ b/src/test/ref/plus-0.log @@ -369,7 +369,7 @@ main: { fill_from_main: // [5] phi fill::ch#4 = 'a' [phi:main->fill#0] -- vbuxx=vbuc1 ldx #'a' - // [5] phi fill::screen#4 = (char *) 1024 [phi:main->fill#1] -- call_phi_near + // [5] phi fill::screen#4 = (char *) 1024 [phi:main->fill#1] -- pbuz1=pbuc1 lda #<$400 sta.z fill.screen lda #>$400 @@ -385,7 +385,7 @@ main: { fill_from___b1: // [5] phi fill::ch#4 = 'b' [phi:main::@1->fill#0] -- vbuxx=vbuc1 ldx #'b' - // [5] phi fill::screen#4 = (char *) 8192 [phi:main::@1->fill#1] -- call_phi_near + // [5] phi fill::screen#4 = (char *) 8192 [phi:main::@1->fill#1] -- pbuz1=pbuc1 lda #<$2000 sta.z fill.screen lda #>$2000 @@ -537,7 +537,7 @@ main: { // [5] phi from main to fill [phi:main->fill] // [5] phi fill::ch#4 = 'a' [phi:main->fill#0] -- vbuxx=vbuc1 ldx #'a' - // [5] phi fill::screen#4 = (char *) 1024 [phi:main->fill#1] -- call_phi_near + // [5] phi fill::screen#4 = (char *) 1024 [phi:main->fill#1] -- pbuz1=pbuc1 lda #<$400 sta.z fill.screen lda #>$400 @@ -550,7 +550,7 @@ main: { // [5] phi from main::@1 to fill [phi:main::@1->fill] // [5] phi fill::ch#4 = 'b' [phi:main::@1->fill#0] -- vbuxx=vbuc1 ldx #'b' - // [5] phi fill::screen#4 = (char *) 8192 [phi:main::@1->fill#1] -- call_phi_near + // [5] phi fill::screen#4 = (char *) 8192 [phi:main::@1->fill#1] -- pbuz1=pbuc1 lda #<$2000 sta.z fill.screen lda #>$2000 diff --git a/src/test/ref/plus4-kbhit.log b/src/test/ref/plus4-kbhit.log index 8fdc1fc16..88c782d0d 100644 --- a/src/test/ref/plus4-kbhit.log +++ b/src/test/ref/plus4-kbhit.log @@ -226,7 +226,7 @@ main: { jmp __b1 // main::@1 __b1: - // [2] call kbhit -- call_phi_near + // [2] call kbhit jsr kbhit // [3] kbhit::return#0 = kbhit::return#1 jmp __b2 @@ -338,7 +338,7 @@ main: { // main::@1 __b1: // kbhit() - // [2] call kbhit -- call_phi_near + // [2] call kbhit jsr kbhit // [3] kbhit::return#0 = kbhit::return#1 // main::@2 diff --git a/src/test/ref/plus4-keyboard-test.log b/src/test/ref/plus4-keyboard-test.log index 0fa8a6a96..3e88ecc22 100644 --- a/src/test/ref/plus4-keyboard-test.log +++ b/src/test/ref/plus4-keyboard-test.log @@ -573,7 +573,7 @@ main: { // asm { sei } sei // [1] call memset - // [18] phi from main to memset [phi:main->memset] -- call_phi_near + // [18] phi from main to memset [phi:main->memset] memset_from_main: jsr memset // [2] phi from main main::@1 to main::@1 [phi:main/main::@1->main::@1] @@ -830,7 +830,7 @@ main: { sei // memset(DEFAULT_SCREEN, ' ', 0x0400) // [1] call memset - // [18] phi from main to memset [phi:main->memset] -- call_phi_near + // [18] phi from main to memset [phi:main->memset] jsr memset // [2] phi from main main::@1 to main::@1 [phi:main/main::@1->main::@1] __b5: diff --git a/src/test/ref/pointer-plus-0.log b/src/test/ref/pointer-plus-0.log index 8240d1a2b..359e48e62 100644 --- a/src/test/ref/pointer-plus-0.log +++ b/src/test/ref/pointer-plus-0.log @@ -241,7 +241,7 @@ main: { // [1] call first // [10] phi from main to first [phi:main->first] first_from_main: - // [10] phi first::return#2 = msg1 [phi:main->first#0] -- call_phi_near + // [10] phi first::return#2 = msg1 [phi:main->first#0] -- pbuz1=pbuc1 lda #msg1 @@ -259,7 +259,7 @@ main: { // [5] call first // [10] phi from main::@1 to first [phi:main::@1->first] first_from___b1: - // [10] phi first::return#2 = msg2 [phi:main::@1->first#0] -- call_phi_near + // [10] phi first::return#2 = msg2 [phi:main::@1->first#0] -- pbuz1=pbuc1 lda #msg2 @@ -352,7 +352,7 @@ main: { // first(msg1) // [1] call first // [10] phi from main to first [phi:main->first] - // [10] phi first::return#2 = msg1 [phi:main->first#0] -- call_phi_near + // [10] phi first::return#2 = msg1 [phi:main->first#0] -- pbuz1=pbuc1 lda #msg1 @@ -370,7 +370,7 @@ main: { // first(msg2) // [5] call first // [10] phi from main::@1 to first [phi:main::@1->first] - // [10] phi first::return#2 = msg2 [phi:main::@1->first#0] -- call_phi_near + // [10] phi first::return#2 = msg2 [phi:main::@1->first#0] -- pbuz1=pbuc1 lda #msg2 diff --git a/src/test/ref/pointer-pointer-2.log b/src/test/ref/pointer-pointer-2.log index 618e61fe6..ddb2effb8 100644 --- a/src/test/ref/pointer-pointer-2.log +++ b/src/test/ref/pointer-pointer-2.log @@ -394,7 +394,7 @@ main: { jmp __b1 // main::@1 __b1: - // [2] call nexttext -- call_phi_near + // [2] call nexttext jsr nexttext // [3] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2] __b2_from___b1: @@ -584,7 +584,7 @@ main: { // main::@1 __b1: // nexttext(&text) - // [2] call nexttext -- call_phi_near + // [2] call nexttext jsr nexttext // [3] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2] // [3] phi main::screen#2 = main::screen#4 [phi:main::@1/main::@3->main::@2#0] -- register_copy diff --git a/src/test/ref/pointer-pointer-3.log b/src/test/ref/pointer-pointer-3.log index 78e4ba2e4..45197a30d 100644 --- a/src/test/ref/pointer-pointer-3.log +++ b/src/test/ref/pointer-pointer-3.log @@ -224,7 +224,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -238,7 +238,7 @@ main: { // [6] call setscreen // [11] phi from main to setscreen [phi:main->setscreen] setscreen_from_main: - // [11] phi setscreen::val#2 = screen1 [phi:main->setscreen#0] -- call_phi_near + // [11] phi setscreen::val#2 = screen1 [phi:main->setscreen#0] -- pbuz1=pbuc1 lda #screen1 @@ -254,7 +254,7 @@ main: { // [8] call setscreen // [11] phi from main::@1 to setscreen [phi:main::@1->setscreen] setscreen_from___b1: - // [11] phi setscreen::val#2 = screen2 [phi:main::@1->setscreen#0] -- call_phi_near + // [11] phi setscreen::val#2 = screen2 [phi:main::@1->setscreen#0] -- pbuz1=pbuc1 lda #screen2 @@ -359,7 +359,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return @@ -370,7 +370,7 @@ main: { // setscreen(&screen, screen1) // [6] call setscreen // [11] phi from main to setscreen [phi:main->setscreen] - // [11] phi setscreen::val#2 = screen1 [phi:main->setscreen#0] -- call_phi_near + // [11] phi setscreen::val#2 = screen1 [phi:main->setscreen#0] -- pbuz1=pbuc1 lda #screen1 @@ -385,7 +385,7 @@ main: { // setscreen(&screen, screen2) // [8] call setscreen // [11] phi from main::@1 to setscreen [phi:main::@1->setscreen] - // [11] phi setscreen::val#2 = screen2 [phi:main::@1->setscreen#0] -- call_phi_near + // [11] phi setscreen::val#2 = screen2 [phi:main::@1->setscreen#0] -- pbuz1=pbuc1 lda #screen2 diff --git a/src/test/ref/pointer-swap.log b/src/test/ref/pointer-swap.log index 25a014563..3044bc33c 100644 --- a/src/test/ref/pointer-swap.log +++ b/src/test/ref/pointer-swap.log @@ -611,7 +611,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [11] phi tempbuffer#9 = (char *) 0 [phi:main->print#3] -- call_phi_near + // [11] phi tempbuffer#9 = (char *) 0 [phi:main->print#3] -- pbuz1=pbuc1 lda #<0 sta.z tempbuffer_1 lda #>0 @@ -630,7 +630,7 @@ main: { sta.z newbuffer lda #>buffer2 sta.z newbuffer+1 - // [23] phi tempbuffer#0 = buffer1 [phi:main::@1->swap#1] -- call_phi_near + // [23] phi tempbuffer#0 = buffer1 [phi:main::@1->swap#1] -- pbuz1=pbuc1 lda #buffer1 @@ -653,7 +653,7 @@ main: { // [23] phi from main::@2 to swap [phi:main::@2->swap] swap_from___b2: // [23] phi newbuffer#0 = newbuffer#23 [phi:main::@2->swap#0] -- register_copy - // [23] phi tempbuffer#0 = tempbuffer#22 [phi:main::@2->swap#1] -- call_phi_near + // [23] phi tempbuffer#0 = tempbuffer#22 [phi:main::@2->swap#1] -- register_copy jsr swap jmp __b3 // main::@3 @@ -672,7 +672,7 @@ main: { // [23] phi from main::@3 to swap [phi:main::@3->swap] swap_from___b3: // [23] phi newbuffer#0 = newbuffer#24 [phi:main::@3->swap#0] -- register_copy - // [23] phi tempbuffer#0 = tempbuffer#23 [phi:main::@3->swap#1] -- call_phi_near + // [23] phi tempbuffer#0 = tempbuffer#23 [phi:main::@3->swap#1] -- register_copy jsr swap jmp __breturn // main::@return @@ -746,7 +746,7 @@ swap: { // [11] phi oldbuffer#9 = oldbuffer#22 [phi:swap->print#0] -- register_copy // [11] phi newbuffer#9 = newbuffer#22 [phi:swap->print#1] -- register_copy // [11] phi screen#12 = screen#0 [phi:swap->print#2] -- register_copy - // [11] phi tempbuffer#9 = tempbuffer#21 [phi:swap->print#3] -- call_phi_near + // [11] phi tempbuffer#9 = tempbuffer#21 [phi:swap->print#3] -- register_copy jsr print jmp __breturn // swap::@return @@ -872,7 +872,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [11] phi tempbuffer#9 = (char *) 0 [phi:main->print#3] -- call_phi_near + // [11] phi tempbuffer#9 = (char *) 0 [phi:main->print#3] -- pbuz1=pbuc1 lda #<0 sta.z tempbuffer_1 sta.z tempbuffer_1+1 @@ -887,7 +887,7 @@ main: { sta.z newbuffer lda #>buffer2 sta.z newbuffer+1 - // [23] phi tempbuffer#0 = buffer1 [phi:main::@1->swap#1] -- call_phi_near + // [23] phi tempbuffer#0 = buffer1 [phi:main::@1->swap#1] -- pbuz1=pbuc1 lda #buffer1 @@ -908,7 +908,7 @@ main: { // [6] call swap // [23] phi from main::@2 to swap [phi:main::@2->swap] // [23] phi newbuffer#0 = newbuffer#23 [phi:main::@2->swap#0] -- register_copy - // [23] phi tempbuffer#0 = tempbuffer#22 [phi:main::@2->swap#1] -- call_phi_near + // [23] phi tempbuffer#0 = tempbuffer#22 [phi:main::@2->swap#1] -- register_copy jsr swap // main::@3 // [7] tempbuffer#23 = newbuffer#0 -- pbuz1=pbuz2 @@ -925,7 +925,7 @@ main: { // [9] call swap // [23] phi from main::@3 to swap [phi:main::@3->swap] // [23] phi newbuffer#0 = newbuffer#24 [phi:main::@3->swap#0] -- register_copy - // [23] phi tempbuffer#0 = tempbuffer#23 [phi:main::@3->swap#1] -- call_phi_near + // [23] phi tempbuffer#0 = tempbuffer#23 [phi:main::@3->swap#1] -- register_copy jsr swap // main::@return // } @@ -1004,7 +1004,7 @@ swap: { // [11] phi oldbuffer#9 = oldbuffer#22 [phi:swap->print#0] -- register_copy // [11] phi newbuffer#9 = newbuffer#22 [phi:swap->print#1] -- register_copy // [11] phi screen#12 = screen#0 [phi:swap->print#2] -- register_copy - // [11] phi tempbuffer#9 = tempbuffer#21 [phi:swap->print#3] -- call_phi_near + // [11] phi tempbuffer#9 = tempbuffer#21 [phi:swap->print#3] -- register_copy jsr print // swap::@return // } diff --git a/src/test/ref/pointer-void-1.log b/src/test/ref/pointer-void-1.log index 1910db674..d8e90126b 100644 --- a/src/test/ref/pointer-void-1.log +++ b/src/test/ref/pointer-void-1.log @@ -290,7 +290,7 @@ main: { print_from_main: // [9] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [9] phi print::ptr#3 = main::vb [phi:main->print#1] -- call_phi_near + // [9] phi print::ptr#3 = main::vb [phi:main->print#1] -- pvoz1=pvoc1 lda #vb @@ -305,7 +305,7 @@ main: { // [9] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [9] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy - // [9] phi print::ptr#3 = main::vw [phi:main::@1->print#1] -- call_phi_near + // [9] phi print::ptr#3 = main::vw [phi:main::@1->print#1] -- pvoz1=pvoc1 lda #vw @@ -320,7 +320,7 @@ main: { // [9] phi from main::@2 to print [phi:main::@2->print] print_from___b2: // [9] phi idx#13 = idx#14 [phi:main::@2->print#0] -- register_copy - // [9] phi print::ptr#3 = main::vd [phi:main::@2->print#1] -- call_phi_near + // [9] phi print::ptr#3 = main::vd [phi:main::@2->print#1] -- pvoz1=pvoc1 lda #vd @@ -441,7 +441,7 @@ main: { // [9] phi from main to print [phi:main->print] // [9] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [9] phi print::ptr#3 = main::vb [phi:main->print#1] -- call_phi_near + // [9] phi print::ptr#3 = main::vb [phi:main->print#1] -- pvoz1=pvoc1 lda #vb @@ -453,7 +453,7 @@ main: { // [5] call print // [9] phi from main::@1 to print [phi:main::@1->print] // [9] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy - // [9] phi print::ptr#3 = main::vw [phi:main::@1->print#1] -- call_phi_near + // [9] phi print::ptr#3 = main::vw [phi:main::@1->print#1] -- pvoz1=pvoc1 lda #vw @@ -465,7 +465,7 @@ main: { // [7] call print // [9] phi from main::@2 to print [phi:main::@2->print] // [9] phi idx#13 = idx#14 [phi:main::@2->print#0] -- register_copy - // [9] phi print::ptr#3 = main::vd [phi:main::@2->print#1] -- call_phi_near + // [9] phi print::ptr#3 = main::vd [phi:main::@2->print#1] -- pvoz1=pvoc1 lda #vd diff --git a/src/test/ref/pointer-void-2.log b/src/test/ref/pointer-void-2.log index 36f96bc13..1ddbf6b8f 100644 --- a/src/test/ref/pointer-void-2.log +++ b/src/test/ref/pointer-void-2.log @@ -284,7 +284,7 @@ main: { print_from_main: // [9] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [9] phi print::ptr#3 = (void *)&main::b [phi:main->print#1] -- call_phi_near + // [9] phi print::ptr#3 = (void *)&main::b [phi:main->print#1] -- pvoz1=pvoc1 lda #b @@ -299,7 +299,7 @@ main: { // [9] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [9] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy - // [9] phi print::ptr#3 = (void *)&main::w [phi:main::@1->print#1] -- call_phi_near + // [9] phi print::ptr#3 = (void *)&main::w [phi:main::@1->print#1] -- pvoz1=pvoc1 lda #w @@ -314,7 +314,7 @@ main: { // [9] phi from main::@2 to print [phi:main::@2->print] print_from___b2: // [9] phi idx#13 = idx#14 [phi:main::@2->print#0] -- register_copy - // [9] phi print::ptr#3 = (void *)&main::d [phi:main::@2->print#1] -- call_phi_near + // [9] phi print::ptr#3 = (void *)&main::d [phi:main::@2->print#1] -- pvoz1=pvoc1 lda #d @@ -429,7 +429,7 @@ main: { // [9] phi from main to print [phi:main->print] // [9] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [9] phi print::ptr#3 = (void *)&main::b [phi:main->print#1] -- call_phi_near + // [9] phi print::ptr#3 = (void *)&main::b [phi:main->print#1] -- pvoz1=pvoc1 lda #b @@ -441,7 +441,7 @@ main: { // [5] call print // [9] phi from main::@1 to print [phi:main::@1->print] // [9] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy - // [9] phi print::ptr#3 = (void *)&main::w [phi:main::@1->print#1] -- call_phi_near + // [9] phi print::ptr#3 = (void *)&main::w [phi:main::@1->print#1] -- pvoz1=pvoc1 lda #w @@ -453,7 +453,7 @@ main: { // [7] call print // [9] phi from main::@2 to print [phi:main::@2->print] // [9] phi idx#13 = idx#14 [phi:main::@2->print#0] -- register_copy - // [9] phi print::ptr#3 = (void *)&main::d [phi:main::@2->print#1] -- call_phi_near + // [9] phi print::ptr#3 = (void *)&main::d [phi:main::@2->print#1] -- pvoz1=pvoc1 lda #d diff --git a/src/test/ref/pointer-void-3.log b/src/test/ref/pointer-void-3.log index 8c1aced57..e6393cae6 100644 --- a/src/test/ref/pointer-void-3.log +++ b/src/test/ref/pointer-void-3.log @@ -284,7 +284,7 @@ main: { // [1] call malloc // [12] phi from main to malloc [phi:main->malloc] malloc_from_main: - // [12] phi heap_head#11 = (char *) 49152 [phi:main->malloc#0] -- call_phi_near + // [12] phi heap_head#11 = (char *) 49152 [phi:main->malloc#0] -- pbuz1=pbuc1 lda #<$c000 sta.z heap_head lda #>$c000 @@ -302,7 +302,7 @@ main: { // [4] call malloc // [12] phi from main::@1 to malloc [phi:main::@1->malloc] malloc_from___b1: - // [12] phi heap_head#11 = heap_head#12 [phi:main::@1->malloc#0] -- call_phi_near + // [12] phi heap_head#11 = heap_head#12 [phi:main::@1->malloc#0] -- register_copy jsr malloc // [5] malloc::return#1 = malloc::return#2 jmp __b2 @@ -418,7 +418,7 @@ main: { // byte* buf1 = malloc() // [1] call malloc // [12] phi from main to malloc [phi:main->malloc] - // [12] phi heap_head#11 = (char *) 49152 [phi:main->malloc#0] -- call_phi_near + // [12] phi heap_head#11 = (char *) 49152 [phi:main->malloc#0] -- pbuz1=pbuc1 lda #<$c000 sta.z heap_head lda #>$c000 @@ -435,7 +435,7 @@ main: { // byte* buf2 = malloc() // [4] call malloc // [12] phi from main::@1 to malloc [phi:main::@1->malloc] - // [12] phi heap_head#11 = heap_head#12 [phi:main::@1->malloc#0] -- call_phi_near + // [12] phi heap_head#11 = heap_head#12 [phi:main::@1->malloc#0] -- register_copy jsr malloc // byte* buf2 = malloc() // [5] malloc::return#1 = malloc::return#2 diff --git a/src/test/ref/post-increment-problem-2.log b/src/test/ref/post-increment-problem-2.log index fb71a2f3d..0b912585f 100644 --- a/src/test/ref/post-increment-problem-2.log +++ b/src/test/ref/post-increment-problem-2.log @@ -245,7 +245,7 @@ main: { jmp __b2 // main::@2 __b2: - // [5] call incscreen -- call_phi_near + // [5] call incscreen jsr incscreen jmp __b3 // main::@3 @@ -342,7 +342,7 @@ main: { // main::@2 __b2: // incscreen(offset) - // [5] call incscreen -- call_phi_near + // [5] call incscreen jsr incscreen // main::@3 // for (char x=0;x<254;x++) diff --git a/src/test/ref/pragma-noparam-noparen.log b/src/test/ref/pragma-noparam-noparen.log index 68ccb3b9d..ec255c1a4 100644 --- a/src/test/ref/pragma-noparam-noparen.log +++ b/src/test/ref/pragma-noparam-noparen.log @@ -1,4 +1,3 @@ -Warning! Unknown #pragma nobank CONTROL FLOW GRAPH SSA diff --git a/src/test/ref/pragma-noparenthesis.log b/src/test/ref/pragma-noparenthesis.log index 7632e3d44..c12b0e992 100644 --- a/src/test/ref/pragma-noparenthesis.log +++ b/src/test/ref/pragma-noparenthesis.log @@ -150,14 +150,14 @@ __start: { jmp __init1 // __start::__init1 __init1: - // [2] call init -- call_phi_near + // [2] call init jsr init // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [4] call main -- call_phi_near + // [4] call main jsr main jmp __breturn // __start::@return @@ -235,11 +235,11 @@ Score: 42 __start: { // [1] phi from __start to __start::__init1 [phi:__start->__start::__init1] // __start::__init1 - // [2] call init -- call_phi_near + // [2] call init jsr init // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [4] call main -- call_phi_near + // [4] call main jsr main // __start::@return // [5] return diff --git a/src/test/ref/primes-1000-2.log b/src/test/ref/primes-1000-2.log index c6f05a9b7..178959548 100644 --- a/src/test/ref/primes-1000-2.log +++ b/src/test/ref/primes-1000-2.log @@ -2572,7 +2572,7 @@ main: { // [5] mul8u::a#1 = main::p#0 -- vbuxx=vbuaa tax // [6] mul8u::b#0 = main::p#0 - // [7] call mul8u -- call_phi_near + // [7] call mul8u jsr mul8u // [8] mul8u::return#2 = mul8u::res#2 jmp __b8 @@ -2630,7 +2630,7 @@ main: { // [17] div16u8u::divisor#0 = (char)PRIMES[main::$13] -- vbuz1=_byte_pwuc1_derefidx_vbuxx lda PRIMES,x sta.z div16u8u.divisor - // [18] call div16u8u -- call_phi_near + // [18] call div16u8u jsr div16u8u jmp __b9 // main::@9 @@ -2700,7 +2700,7 @@ main: { lda.z potential+1 sta (__15),y // [28] print_uint_decimal::w#0 = potential#11 - // [29] call print_uint_decimal -- call_phi_near + // [29] call print_uint_decimal jsr print_uint_decimal // [30] phi from main::@6 to main::@10 [phi:main::@6->main::@10] __b10_from___b6: @@ -2710,7 +2710,7 @@ main: { // [31] call print_char // [57] phi from main::@10 to print_char [phi:main::@10->print_char] print_char_from___b10: - // [57] phi print_char::ch#2 = ' ' [phi:main::@10->print_char#0] -- call_phi_near + // [57] phi print_char::ch#2 = ' ' [phi:main::@10->print_char#0] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b11 @@ -2818,7 +2818,7 @@ div16u8u: { divr8u_from_div16u8u: // [61] phi divr8u::divisor#6 = divr8u::divisor#0 [phi:div16u8u->divr8u#0] -- register_copy // [61] phi divr8u::dividend#5 = divr8u::dividend#1 [phi:div16u8u->divr8u#1] -- register_copy - // [61] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#2] -- call_phi_near + // [61] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#2] -- vbuyy=vbuc1 ldy #0 jsr divr8u jmp __b1 @@ -2834,7 +2834,7 @@ div16u8u: { divr8u_from___b1: // [61] phi divr8u::divisor#6 = divr8u::divisor#1 [phi:div16u8u::@1->divr8u#0] -- register_copy // [61] phi divr8u::dividend#5 = divr8u::dividend#2 [phi:div16u8u::@1->divr8u#1] -- register_copy - // [61] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#2] -- call_phi_near + // [61] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#2] -- register_copy jsr divr8u jmp __breturn // div16u8u::@return @@ -2853,7 +2853,7 @@ print_uint_decimal: { lda.z w+1 sta.z utoa.value+1 // [53] call utoa - // [78] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] -- call_phi_near + // [78] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] utoa_from_print_uint_decimal: jsr utoa // [54] phi from print_uint_decimal to print_uint_decimal::@1 [phi:print_uint_decimal->print_uint_decimal::@1] @@ -2862,7 +2862,7 @@ print_uint_decimal: { // print_uint_decimal::@1 __b1: // [55] call print_str - // [99] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] -- call_phi_near + // [99] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] print_str_from___b1: jsr print_str jmp __breturn @@ -3088,7 +3088,7 @@ utoa: { // [93] utoa_append::value#0 = utoa::value#2 // [94] utoa_append::sub#0 = utoa::digit_value#0 // [95] call utoa_append - // [106] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near + // [106] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] utoa_append_from___b5: jsr utoa_append // [96] utoa_append::return#0 = utoa_append::value#2 @@ -3143,7 +3143,7 @@ print_str: { // [104] call print_char // [57] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: - // [57] phi print_char::ch#2 = print_char::ch#0 [phi:print_str::@2->print_char#0] -- call_phi_near + // [57] phi print_char::ch#2 = print_char::ch#0 [phi:print_str::@2->print_char#0] -- register_copy jsr print_char jmp __b3 // print_str::@3 @@ -3628,7 +3628,7 @@ main: { // [5] mul8u::a#1 = main::p#0 -- vbuxx=vbuaa tax // [6] mul8u::b#0 = main::p#0 - // [7] call mul8u -- call_phi_near + // [7] call mul8u jsr mul8u // [8] mul8u::return#2 = mul8u::res#2 // main::@8 @@ -3679,7 +3679,7 @@ main: { // [17] div16u8u::divisor#0 = (char)PRIMES[main::$13] -- vbuz1=_byte_pwuc1_derefidx_vbuxx lda PRIMES,x sta.z div16u8u.divisor - // [18] call div16u8u -- call_phi_near + // [18] call div16u8u jsr div16u8u // main::@9 // div16u8u(potential, (char)PRIMES[test_idx++]); @@ -3746,14 +3746,14 @@ main: { sta (__15),y // print_uint_decimal(potential) // [28] print_uint_decimal::w#0 = potential#11 - // [29] call print_uint_decimal -- call_phi_near + // [29] call print_uint_decimal jsr print_uint_decimal // [30] phi from main::@6 to main::@10 [phi:main::@6->main::@10] // main::@10 // print_char(' ') // [31] call print_char // [57] phi from main::@10 to print_char [phi:main::@10->print_char] - // [57] phi print_char::ch#2 = ' ' [phi:main::@10->print_char#0] -- call_phi_near + // [57] phi print_char::ch#2 = ' ' [phi:main::@10->print_char#0] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@11 @@ -3859,7 +3859,7 @@ div16u8u: { // [61] phi from div16u8u to divr8u [phi:div16u8u->divr8u] // [61] phi divr8u::divisor#6 = divr8u::divisor#0 [phi:div16u8u->divr8u#0] -- register_copy // [61] phi divr8u::dividend#5 = divr8u::dividend#1 [phi:div16u8u->divr8u#1] -- register_copy - // [61] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#2] -- call_phi_near + // [61] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#2] -- vbuyy=vbuc1 ldy #0 jsr divr8u // div16u8u::@1 @@ -3873,7 +3873,7 @@ div16u8u: { // [61] phi from div16u8u::@1 to divr8u [phi:div16u8u::@1->divr8u] // [61] phi divr8u::divisor#6 = divr8u::divisor#1 [phi:div16u8u::@1->divr8u#0] -- register_copy // [61] phi divr8u::dividend#5 = divr8u::dividend#2 [phi:div16u8u::@1->divr8u#1] -- register_copy - // [61] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#2] -- call_phi_near + // [61] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#2] -- register_copy jsr divr8u // div16u8u::@return // } @@ -3892,13 +3892,13 @@ print_uint_decimal: { lda.z w+1 sta.z utoa.value+1 // [53] call utoa - // [78] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] -- call_phi_near + // [78] phi from print_uint_decimal to utoa [phi:print_uint_decimal->utoa] jsr utoa // [54] phi from print_uint_decimal to print_uint_decimal::@1 [phi:print_uint_decimal->print_uint_decimal::@1] // print_uint_decimal::@1 // print_str(decimal_digits) // [55] call print_str - // [99] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] -- call_phi_near + // [99] phi from print_uint_decimal::@1 to print_str [phi:print_uint_decimal::@1->print_str] jsr print_str // print_uint_decimal::@return // } @@ -4114,7 +4114,7 @@ utoa: { // [93] utoa_append::value#0 = utoa::value#2 // [94] utoa_append::sub#0 = utoa::digit_value#0 // [95] call utoa_append - // [106] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near + // [106] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] jsr utoa_append // utoa_append(buffer++, value, digit_value) // [96] utoa_append::return#0 = utoa_append::value#2 @@ -4166,7 +4166,7 @@ print_str: { lda (str),y // [104] call print_char // [57] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] - // [57] phi print_char::ch#2 = print_char::ch#0 [phi:print_str::@2->print_char#0] -- call_phi_near + // [57] phi print_char::ch#2 = print_char::ch#0 [phi:print_str::@2->print_char#0] -- register_copy jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/print-problem.log b/src/test/ref/print-problem.log index f20359e65..660c6d482 100644 --- a/src/test/ref/print-problem.log +++ b/src/test/ref/print-problem.log @@ -273,7 +273,7 @@ main: { // [1] call ln // [9] phi from main to ln [phi:main->ln] ln_from_main: - // [9] phi line#13 = $40 [phi:main->ln#0] -- call_phi_near + // [9] phi line#13 = $40 [phi:main->ln#0] -- vbuaa=vbuc1 lda #$40 jsr ln // [2] phi from main to main::@1 [phi:main->main::@1] @@ -284,7 +284,7 @@ main: { // [3] call ln // [9] phi from main::@1 to ln [phi:main::@1->ln] ln_from___b1: - // [9] phi line#13 = line#14 [phi:main::@1->ln#0] -- call_phi_near + // [9] phi line#13 = line#14 [phi:main::@1->ln#0] -- register_copy jsr ln // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -294,7 +294,7 @@ main: { // [5] call ln // [9] phi from main::@2 to ln [phi:main::@2->ln] ln_from___b2: - // [9] phi line#13 = line#14 [phi:main::@2->ln#0] -- call_phi_near + // [9] phi line#13 = line#14 [phi:main::@2->ln#0] -- register_copy jsr ln jmp __b3 // main::@3 @@ -375,7 +375,7 @@ main: { // ln() // [1] call ln // [9] phi from main to ln [phi:main->ln] - // [9] phi line#13 = $40 [phi:main->ln#0] -- call_phi_near + // [9] phi line#13 = $40 [phi:main->ln#0] -- vbuaa=vbuc1 lda #$40 jsr ln // [2] phi from main to main::@1 [phi:main->main::@1] @@ -383,14 +383,14 @@ main: { // ln() // [3] call ln // [9] phi from main::@1 to ln [phi:main::@1->ln] - // [9] phi line#13 = line#14 [phi:main::@1->ln#0] -- call_phi_near + // [9] phi line#13 = line#14 [phi:main::@1->ln#0] -- register_copy jsr ln // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // ln() // [5] call ln // [9] phi from main::@2 to ln [phi:main::@2->ln] - // [9] phi line#13 = line#14 [phi:main::@2->ln#0] -- call_phi_near + // [9] phi line#13 = line#14 [phi:main::@2->ln#0] -- register_copy jsr ln // main::@3 // *SCREEN = ch diff --git a/src/test/ref/printf-1.log b/src/test/ref/printf-1.log index 17ab790c4..697639266 100644 --- a/src/test/ref/printf-1.log +++ b/src/test/ref/printf-1.log @@ -2496,7 +2496,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -2504,7 +2504,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -2540,7 +2540,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -2581,7 +2581,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln jmp __breturn // cputc::@return @@ -2593,14 +2593,14 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln jmp __breturn } // main main: { // [28] call clrscr - // [64] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [64] phi from main to clrscr [phi:main->clrscr] clrscr_from_main: jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] @@ -2616,7 +2616,7 @@ main: { sta.z printf_string.str lda #>str sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@1->printf_string#1] -- call_phi_near + // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@1->printf_string#1] -- vbuz1=vbuc1 lda #0 sta.z printf_string.format_justify_left jsr printf_string @@ -2625,7 +2625,7 @@ main: { jmp __b2 // main::@2 __b2: - // [32] call cputln -- call_phi_near + // [32] call cputln jsr cputln // [33] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -2640,7 +2640,7 @@ main: { sta.z printf_string.str lda #>str1 sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@3->printf_string#1] -- call_phi_near + // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@3->printf_string#1] -- vbuz1=vbuc1 lda #0 sta.z printf_string.format_justify_left jsr printf_string @@ -2649,7 +2649,7 @@ main: { jmp __b4 // main::@4 __b4: - // [36] call cputln -- call_phi_near + // [36] call cputln jsr cputln // [37] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: @@ -2664,7 +2664,7 @@ main: { sta.z printf_string.str lda #>str sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@5->printf_string#1] -- call_phi_near + // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@5->printf_string#1] -- vbuz1=vbuc1 lda #1 sta.z printf_string.format_justify_left jsr printf_string @@ -2673,7 +2673,7 @@ main: { jmp __b6 // main::@6 __b6: - // [40] call cputln -- call_phi_near + // [40] call cputln jsr cputln // [41] phi from main::@6 to main::@7 [phi:main::@6->main::@7] __b7_from___b6: @@ -2688,7 +2688,7 @@ main: { sta.z printf_string.str lda #>str1 sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@7->printf_string#1] -- call_phi_near + // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@7->printf_string#1] -- vbuz1=vbuc1 lda #1 sta.z printf_string.format_justify_left jsr printf_string @@ -2827,7 +2827,7 @@ cputln: { sta.z conio_cursor_x // [61] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [62] call cscroll -- call_phi_near + // [62] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -2954,7 +2954,7 @@ printf_string: { lda.z str+1 sta.z strlen.str+1 // [82] call strlen - // [114] phi from printf_string::@3 to strlen [phi:printf_string::@3->strlen] -- call_phi_near + // [114] phi from printf_string::@3 to strlen [phi:printf_string::@3->strlen] strlen_from___b3: jsr strlen // [83] strlen::return#2 = strlen::len#2 @@ -3012,14 +3012,14 @@ printf_string: { // [120] phi printf_padding::pad#4 = ' ' [phi:printf_string::@4->printf_padding#0] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [120] phi printf_padding::length#3 = printf_padding::length#0 [phi:printf_string::@4->printf_padding#1] -- call_phi_near + // [120] phi printf_padding::length#3 = printf_padding::length#0 [phi:printf_string::@4->printf_padding#1] -- register_copy jsr printf_padding jmp __b2 // printf_string::@2 __b2: // [94] printf_str::s#1 = printf_string::str#10 // [95] call printf_str - // [128] phi from printf_string::@2 to printf_str [phi:printf_string::@2->printf_str] -- call_phi_near + // [128] phi from printf_string::@2 to printf_str [phi:printf_string::@2->printf_str] printf_str_from___b2: jsr printf_str jmp __b7 @@ -3047,7 +3047,7 @@ printf_string: { // [120] phi printf_padding::pad#4 = ' ' [phi:printf_string::@5->printf_padding#0] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [120] phi printf_padding::length#3 = printf_padding::length#1 [phi:printf_string::@5->printf_padding#1] -- call_phi_near + // [120] phi printf_padding::length#3 = printf_padding::length#1 [phi:printf_string::@5->printf_padding#1] -- register_copy jsr printf_padding jmp __breturn // printf_string::@return @@ -3075,7 +3075,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [137] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [137] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -3094,7 +3094,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [137] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [137] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -3110,7 +3110,7 @@ cscroll: { memset_from___b3: // [147] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [147] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [147] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -3126,7 +3126,7 @@ cscroll: { memset_from___b4: // [147] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [147] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [147] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -3782,12 +3782,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [8] return @@ -3816,7 +3816,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy // conio_c64_init::@return // } @@ -3855,7 +3855,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln // cputc::@return __breturn: @@ -3866,7 +3866,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln rts } @@ -3874,7 +3874,7 @@ cputc: { main: { // clrscr() // [28] call clrscr - // [64] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [64] phi from main to clrscr [phi:main->clrscr] jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] // main::@1 @@ -3886,14 +3886,14 @@ main: { sta.z printf_string.str lda #>str sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@1->printf_string#1] -- call_phi_near + // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@1->printf_string#1] -- vbuz1=vbuc1 lda #0 sta.z printf_string.format_justify_left jsr printf_string // [31] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // cputln() - // [32] call cputln -- call_phi_near + // [32] call cputln jsr cputln // [33] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 @@ -3905,14 +3905,14 @@ main: { sta.z printf_string.str lda #>str1 sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@3->printf_string#1] -- call_phi_near + // [80] phi printf_string::format_justify_left#10 = 0 [phi:main::@3->printf_string#1] -- vbuz1=vbuc1 lda #0 sta.z printf_string.format_justify_left jsr printf_string // [35] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // cputln() - // [36] call cputln -- call_phi_near + // [36] call cputln jsr cputln // [37] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 @@ -3924,14 +3924,14 @@ main: { sta.z printf_string.str lda #>str sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@5->printf_string#1] -- call_phi_near + // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@5->printf_string#1] -- vbuz1=vbuc1 lda #1 sta.z printf_string.format_justify_left jsr printf_string // [39] phi from main::@5 to main::@6 [phi:main::@5->main::@6] // main::@6 // cputln() - // [40] call cputln -- call_phi_near + // [40] call cputln jsr cputln // [41] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 @@ -3943,7 +3943,7 @@ main: { sta.z printf_string.str lda #>str1 sta.z printf_string.str+1 - // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@7->printf_string#1] -- call_phi_near + // [80] phi printf_string::format_justify_left#10 = 1 [phi:main::@7->printf_string#1] -- vbuz1=vbuc1 lda #1 sta.z printf_string.format_justify_left jsr printf_string @@ -4084,7 +4084,7 @@ cputln: { // [61] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [62] call cscroll -- call_phi_near + // [62] call cscroll jsr cscroll // cputln::@return // } @@ -4210,7 +4210,7 @@ printf_string: { lda.z str+1 sta.z strlen.str+1 // [82] call strlen - // [114] phi from printf_string::@3 to strlen [phi:printf_string::@3->strlen] -- call_phi_near + // [114] phi from printf_string::@3 to strlen [phi:printf_string::@3->strlen] jsr strlen // strlen(str) // [83] strlen::return#2 = strlen::len#2 @@ -4260,14 +4260,14 @@ printf_string: { // [120] phi printf_padding::pad#4 = ' ' [phi:printf_string::@4->printf_padding#0] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [120] phi printf_padding::length#3 = printf_padding::length#0 [phi:printf_string::@4->printf_padding#1] -- call_phi_near + // [120] phi printf_padding::length#3 = printf_padding::length#0 [phi:printf_string::@4->printf_padding#1] -- register_copy jsr printf_padding // printf_string::@2 __b2: // printf_str(putc, str) // [94] printf_str::s#1 = printf_string::str#10 // [95] call printf_str - // [128] phi from printf_string::@2 to printf_str [phi:printf_string::@2->printf_str] -- call_phi_near + // [128] phi from printf_string::@2 to printf_str [phi:printf_string::@2->printf_str] jsr printf_str // printf_string::@7 // if(format.justify_left && padding) @@ -4291,7 +4291,7 @@ printf_string: { // [120] phi printf_padding::pad#4 = ' ' [phi:printf_string::@5->printf_padding#0] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [120] phi printf_padding::length#3 = printf_padding::length#1 [phi:printf_string::@5->printf_padding#1] -- call_phi_near + // [120] phi printf_padding::length#3 = printf_padding::length#1 [phi:printf_string::@5->printf_padding#1] -- register_copy jsr printf_padding // printf_string::@return __breturn: @@ -4317,7 +4317,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [137] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [137] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -4333,7 +4333,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [137] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [137] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -4346,7 +4346,7 @@ cscroll: { // [147] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [147] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [147] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [147] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -4359,7 +4359,7 @@ cscroll: { // [147] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [147] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [147] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [147] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/printf-10.log b/src/test/ref/printf-10.log index dc91acd48..d9c32976a 100644 --- a/src/test/ref/printf-10.log +++ b/src/test/ref/printf-10.log @@ -394,7 +394,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [7] phi printf_str::str#6 = main::str [phi:main->printf_str#1] -- call_phi_near + // [7] phi printf_str::str#6 = main::str [phi:main->printf_str#1] -- pbuz1=pbuc1 lda #str @@ -406,7 +406,7 @@ main: { // main::@1 __b1: // [3] call printf_string - // [14] phi from main::@1 to printf_string [phi:main::@1->printf_string] -- call_phi_near + // [14] phi from main::@1 to printf_string [phi:main::@1->printf_string] printf_string_from___b1: jsr printf_string // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -418,7 +418,7 @@ main: { // [7] phi from main::@2 to printf_str [phi:main::@2->printf_str] printf_str_from___b2: // [7] phi screen#25 = screen#1 [phi:main::@2->printf_str#0] -- register_copy - // [7] phi printf_str::str#6 = main::str1 [phi:main::@2->printf_str#1] -- call_phi_near + // [7] phi printf_str::str#6 = main::str1 [phi:main::@2->printf_str#1] -- pbuz1=pbuc1 lda #str1 @@ -488,7 +488,7 @@ printf_string: { // [7] phi from printf_string to printf_str [phi:printf_string->printf_str] printf_str_from_printf_string: // [7] phi screen#25 = screen#1 [phi:printf_string->printf_str#0] -- register_copy - // [7] phi printf_str::str#6 = main::name [phi:printf_string->printf_str#1] -- call_phi_near + // [7] phi printf_str::str#6 = main::name [phi:printf_string->printf_str#1] -- pbuz1=pbuc1 lda #main.name @@ -585,7 +585,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [7] phi printf_str::str#6 = main::str [phi:main->printf_str#1] -- call_phi_near + // [7] phi printf_str::str#6 = main::str [phi:main->printf_str#1] -- pbuz1=pbuc1 lda #str @@ -595,7 +595,7 @@ main: { // main::@1 // printf("Hello, I am %s. who are you?", name) // [3] call printf_string - // [14] phi from main::@1 to printf_string [phi:main::@1->printf_string] -- call_phi_near + // [14] phi from main::@1 to printf_string [phi:main::@1->printf_string] jsr printf_string // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 @@ -603,7 +603,7 @@ main: { // [5] call printf_str // [7] phi from main::@2 to printf_str [phi:main::@2->printf_str] // [7] phi screen#25 = screen#1 [phi:main::@2->printf_str#0] -- register_copy - // [7] phi printf_str::str#6 = main::str1 [phi:main::@2->printf_str#1] -- call_phi_near + // [7] phi printf_str::str#6 = main::str1 [phi:main::@2->printf_str#1] -- pbuz1=pbuc1 lda #str1 @@ -670,7 +670,7 @@ printf_string: { // [15] call printf_str // [7] phi from printf_string to printf_str [phi:printf_string->printf_str] // [7] phi screen#25 = screen#1 [phi:printf_string->printf_str#0] -- register_copy - // [7] phi printf_str::str#6 = main::name [phi:printf_string->printf_str#1] -- call_phi_near + // [7] phi printf_str::str#6 = main::name [phi:printf_string->printf_str#1] -- pbuz1=pbuc1 lda #main.name diff --git a/src/test/ref/printf-11.log b/src/test/ref/printf-11.log index 7ebcbc0f7..9aa0d1b12 100644 --- a/src/test/ref/printf-11.log +++ b/src/test/ref/printf-11.log @@ -521,7 +521,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [7] phi printf_str::str#5 = main::str [phi:main->printf_str#1] -- call_phi_near + // [7] phi printf_str::str#5 = main::str [phi:main->printf_str#1] -- pbuz1=pbuc1 lda #str @@ -532,7 +532,7 @@ main: { jmp __b1 // main::@1 __b1: - // [3] call printf_uint -- call_phi_near + // [3] call printf_uint jsr printf_uint // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -543,7 +543,7 @@ main: { // [7] phi from main::@2 to printf_str [phi:main::@2->printf_str] printf_str_from___b2: // [7] phi screen#27 = screen#17 [phi:main::@2->printf_str#0] -- register_copy - // [7] phi printf_str::str#5 = main::str1 [phi:main::@2->printf_str#1] -- call_phi_near + // [7] phi printf_str::str#5 = main::str1 [phi:main::@2->printf_str#1] -- pbuz1=pbuc1 lda #str1 @@ -748,7 +748,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [7] phi printf_str::str#5 = main::str [phi:main->printf_str#1] -- call_phi_near + // [7] phi printf_str::str#5 = main::str [phi:main->printf_str#1] -- pbuz1=pbuc1 lda #str @@ -757,7 +757,7 @@ main: { // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // printf("Commodore is %x cool", pct) - // [3] call printf_uint -- call_phi_near + // [3] call printf_uint jsr printf_uint // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 @@ -765,7 +765,7 @@ main: { // [5] call printf_str // [7] phi from main::@2 to printf_str [phi:main::@2->printf_str] // [7] phi screen#27 = screen#17 [phi:main::@2->printf_str#0] -- register_copy - // [7] phi printf_str::str#5 = main::str1 [phi:main::@2->printf_str#1] -- call_phi_near + // [7] phi printf_str::str#5 = main::str1 [phi:main::@2->printf_str#1] -- pbuz1=pbuc1 lda #str1 diff --git a/src/test/ref/printf-12.log b/src/test/ref/printf-12.log index d8bb5d234..b25c502ae 100644 --- a/src/test/ref/printf-12.log +++ b/src/test/ref/printf-12.log @@ -7801,7 +7801,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -7809,7 +7809,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -7845,7 +7845,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -7886,7 +7886,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln jmp __breturn // cputc::@return @@ -7898,7 +7898,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln jmp __breturn } @@ -7912,7 +7912,7 @@ main: { .label ul = $8aa52 .label c = $2c // [28] call clrscr - // [104] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [104] phi from main to clrscr [phi:main->clrscr] clrscr_from_main: jsr clrscr jmp __b1 @@ -7929,7 +7929,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s [phi:main::@1->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -7953,7 +7953,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@2->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@2->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -7972,7 +7972,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s2 [phi:main::@3->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s2 [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -7988,7 +7988,7 @@ main: { printf_uint_from___b4: // [129] phi printf_uint::format_radix#2 = HEXADECIMAL [phi:main::@4->printf_uint#0] -- vbuxx=vbuc1 ldx #HEXADECIMAL - // [129] phi printf_uint::uvalue#2 = (unsigned int)&main::c [phi:main::@4->printf_uint#1] -- call_phi_near + // [129] phi printf_uint::uvalue#2 = (unsigned int)&main::c [phi:main::@4->printf_uint#1] -- vwuz1=vwuc1 lda #c @@ -8007,7 +8007,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@5->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -8026,7 +8026,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s4 [phi:main::@6->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s4 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 lda #s4 @@ -8050,7 +8050,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@7->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -8069,7 +8069,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s6 [phi:main::@8->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s6 [phi:main::@8->printf_str#1] -- pbuz1=pbuc1 lda #s6 @@ -8080,7 +8080,7 @@ main: { jmp __b9 // main::@9 __b9: - // [50] call printf_schar -- call_phi_near + // [50] call printf_schar jsr printf_schar // [51] phi from main::@9 to main::@10 [phi:main::@9->main::@10] __b10_from___b9: @@ -8095,7 +8095,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@10->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@10->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -8114,7 +8114,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s8 [phi:main::@11->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s8 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 lda #s8 @@ -8126,7 +8126,7 @@ main: { // main::@12 __b12: // [56] call printf_uchar - // [144] phi from main::@12 to printf_uchar [phi:main::@12->printf_uchar] -- call_phi_near + // [144] phi from main::@12 to printf_uchar [phi:main::@12->printf_uchar] printf_uchar_from___b12: jsr printf_uchar // [57] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -8142,7 +8142,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@13->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -8161,7 +8161,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s10 [phi:main::@14->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s10 [phi:main::@14->printf_str#1] -- pbuz1=pbuc1 lda #s10 @@ -8172,7 +8172,7 @@ main: { jmp __b15 // main::@15 __b15: - // [62] call printf_sint -- call_phi_near + // [62] call printf_sint jsr printf_sint // [63] phi from main::@15 to main::@16 [phi:main::@15->main::@16] __b16_from___b15: @@ -8187,7 +8187,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@16->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -8206,7 +8206,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s12 [phi:main::@17->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s12 [phi:main::@17->printf_str#1] -- pbuz1=pbuc1 lda #s12 @@ -8222,7 +8222,7 @@ main: { printf_uint_from___b18: // [129] phi printf_uint::format_radix#2 = DECIMAL [phi:main::@18->printf_uint#0] -- vbuxx=vbuc1 ldx #DECIMAL - // [129] phi printf_uint::uvalue#2 = main::ui [phi:main::@18->printf_uint#1] -- call_phi_near + // [129] phi printf_uint::uvalue#2 = main::ui [phi:main::@18->printf_uint#1] -- vwuz1=vwuc1 lda #ui @@ -8241,7 +8241,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@19->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@19->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -8260,7 +8260,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s14 [phi:main::@20->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s14 [phi:main::@20->printf_str#1] -- pbuz1=pbuc1 lda #s14 @@ -8271,7 +8271,7 @@ main: { jmp __b21 // main::@21 __b21: - // [74] call printf_slong -- call_phi_near + // [74] call printf_slong jsr printf_slong // [75] phi from main::@21 to main::@22 [phi:main::@21->main::@22] __b22_from___b21: @@ -8286,7 +8286,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@22->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@22->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -8305,7 +8305,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s16 [phi:main::@23->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s16 [phi:main::@23->printf_str#1] -- pbuz1=pbuc1 lda #s16 @@ -8317,7 +8317,7 @@ main: { // main::@24 __b24: // [80] call printf_ulong - // [164] phi from main::@24 to printf_ulong [phi:main::@24->printf_ulong] -- call_phi_near + // [164] phi from main::@24 to printf_ulong [phi:main::@24->printf_ulong] printf_ulong_from___b24: jsr printf_ulong // [81] phi from main::@24 to main::@25 [phi:main::@24->main::@25] @@ -8333,7 +8333,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@25->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@25->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -8490,7 +8490,7 @@ cputln: { sta.z conio_cursor_x // [101] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [102] call cscroll -- call_phi_near + // [102] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -8660,7 +8660,7 @@ printf_uint: { // [183] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] utoa_from___b1: // [183] phi utoa::value#10 = utoa::value#2 [phi:printf_uint::@1->utoa#0] -- register_copy - // [183] phi utoa::radix#2 = utoa::radix#1 [phi:printf_uint::@1->utoa#1] -- call_phi_near + // [183] phi utoa::radix#2 = utoa::radix#1 [phi:printf_uint::@1->utoa#1] -- register_copy jsr utoa jmp __b2 // printf_uint::@2 @@ -8687,7 +8687,7 @@ printf_uint: { // [214] phi printf_number_buffer::format_justify_left#10 = 0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #0 sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = 0 [phi:printf_uint::@2->printf_number_buffer#5] -- call_phi_near + // [214] phi printf_number_buffer::format_min_length#10 = 0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #0 jsr printf_number_buffer jmp __breturn @@ -8726,7 +8726,7 @@ printf_schar: { // [140] call uctoa // [255] phi from printf_schar::@2 to uctoa [phi:printf_schar::@2->uctoa] uctoa_from___b2: - // [255] phi uctoa::value#10 = printf_schar::uvalue#0 [phi:printf_schar::@2->uctoa#0] -- call_phi_near + // [255] phi uctoa::value#10 = printf_schar::uvalue#0 [phi:printf_schar::@2->uctoa#0] -- vbuxx=vbuc1 ldx #uvalue jsr uctoa jmp __b3 @@ -8754,7 +8754,7 @@ printf_schar: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_schar::format_justify_left#0 [phi:printf_schar::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_schar::format_min_length#0 [phi:printf_schar::@3->printf_number_buffer#5] -- call_phi_near + // [214] phi printf_number_buffer::format_min_length#10 = printf_schar::format_min_length#0 [phi:printf_schar::@3->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -8783,7 +8783,7 @@ printf_uchar: { // Format number into buffer // [255] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] uctoa_from___b1: - // [255] phi uctoa::value#10 = main::uc [phi:printf_uchar::@1->uctoa#0] -- call_phi_near + // [255] phi uctoa::value#10 = main::uc [phi:printf_uchar::@1->uctoa#0] -- vbuxx=vbuc1 ldx #main.uc jsr uctoa jmp __b2 @@ -8811,7 +8811,7 @@ printf_uchar: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_uchar::format_justify_left#0 [phi:printf_uchar::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_uchar::format_min_length#0 [phi:printf_uchar::@2->printf_number_buffer#5] -- call_phi_near + // [214] phi printf_number_buffer::format_min_length#10 = printf_uchar::format_min_length#0 [phi:printf_uchar::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -8855,7 +8855,7 @@ printf_sint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [183] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- call_phi_near + // [183] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- vbuxx=vbuc1 ldx #DECIMAL jsr utoa jmp __b3 @@ -8883,7 +8883,7 @@ printf_sint: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_sint::format_justify_left#0 [phi:printf_sint::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_sint::format_min_length#0 [phi:printf_sint::@3->printf_number_buffer#5] -- call_phi_near + // [214] phi printf_number_buffer::format_min_length#10 = printf_sint::format_min_length#0 [phi:printf_sint::@3->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -8922,7 +8922,7 @@ printf_slong: { // [160] call ultoa // [274] phi from printf_slong::@2 to ultoa [phi:printf_slong::@2->ultoa] ultoa_from___b2: - // [274] phi ultoa::value#10 = printf_slong::uvalue#0 [phi:printf_slong::@2->ultoa#0] -- call_phi_near + // [274] phi ultoa::value#10 = printf_slong::uvalue#0 [phi:printf_slong::@2->ultoa#0] -- vduz1=vduc1 lda #uvalue @@ -8957,7 +8957,7 @@ printf_slong: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_slong::format_justify_left#0 [phi:printf_slong::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_slong::format_min_length#0 [phi:printf_slong::@3->printf_number_buffer#5] -- call_phi_near + // [214] phi printf_number_buffer::format_min_length#10 = printf_slong::format_min_length#0 [phi:printf_slong::@3->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -8986,7 +8986,7 @@ printf_ulong: { // Format number into buffer // [274] phi from printf_ulong::@1 to ultoa [phi:printf_ulong::@1->ultoa] ultoa_from___b1: - // [274] phi ultoa::value#10 = main::ul [phi:printf_ulong::@1->ultoa#0] -- call_phi_near + // [274] phi ultoa::value#10 = main::ul [phi:printf_ulong::@1->ultoa#0] -- vduz1=vduc1 lda #main.ul @@ -9021,7 +9021,7 @@ printf_ulong: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_ulong::format_justify_left#0 [phi:printf_ulong::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_ulong::format_min_length#0 [phi:printf_ulong::@2->printf_number_buffer#5] -- call_phi_near + // [214] phi printf_number_buffer::format_min_length#10 = printf_ulong::format_min_length#0 [phi:printf_ulong::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -9050,7 +9050,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [295] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [295] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -9069,7 +9069,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [295] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [295] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -9085,7 +9085,7 @@ cscroll: { memset_from___b3: // [305] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [305] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [305] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -9101,7 +9101,7 @@ cscroll: { memset_from___b4: // [305] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [305] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [305] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -9330,7 +9330,7 @@ utoa: { // [208] utoa_append::value#0 = utoa::value#3 // [209] utoa_append::sub#0 = utoa::digit_value#0 // [210] call utoa_append - // [313] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] -- call_phi_near + // [313] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] utoa_append_from___b10: jsr utoa_append // [211] utoa_append::return#0 = utoa_append::value#2 @@ -9372,7 +9372,7 @@ printf_number_buffer: { // printf_number_buffer::@6 __b6: // [217] call strlen - // [320] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] -- call_phi_near + // [320] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] strlen_from___b6: jsr strlen // [218] strlen::return#2 = strlen::len#2 @@ -9456,7 +9456,7 @@ printf_number_buffer: { // [326] phi printf_padding::pad#5 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [326] phi printf_padding::length#4 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- call_phi_near + // [326] phi printf_padding::length#4 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy jsr printf_padding jmp __b2 // printf_number_buffer::@2 @@ -9501,7 +9501,7 @@ printf_number_buffer: { // [326] phi printf_padding::pad#5 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [326] phi printf_padding::length#4 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- call_phi_near + // [326] phi printf_padding::length#4 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy jsr printf_padding jmp __b4 // printf_number_buffer::@4 @@ -9515,7 +9515,7 @@ printf_number_buffer: { // printf_number_buffer::@11 __b11: // [245] call strupr - // [334] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] -- call_phi_near + // [334] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] strupr_from___b11: jsr strupr jmp __b5 @@ -9526,7 +9526,7 @@ printf_number_buffer: { // [120] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] printf_str_from___b5: // [120] phi printf_str::putc#21 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [120] phi printf_str::s#21 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -9565,7 +9565,7 @@ printf_number_buffer: { // [326] phi printf_padding::pad#5 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [326] phi printf_padding::length#4 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- call_phi_near + // [326] phi printf_padding::length#4 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy jsr printf_padding jmp __breturn // printf_number_buffer::@return @@ -9668,7 +9668,7 @@ uctoa: { // [268] uctoa_append::value#0 = uctoa::value#3 // [269] uctoa_append::sub#0 = uctoa::digit_value#0 // [270] call uctoa_append - // [344] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near + // [344] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] uctoa_append_from___b5: jsr uctoa_append // [271] uctoa_append::return#0 = uctoa_append::value#2 @@ -9808,7 +9808,7 @@ ultoa: { // [289] ultoa_append::value#0 = ultoa::value#3 // [290] ultoa_append::sub#0 = ultoa::digit_value#0 // [291] call ultoa_append - // [351] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] -- call_phi_near + // [351] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] ultoa_append_from___b5: jsr ultoa_append // [292] ultoa_append::return#0 = ultoa_append::value#2 @@ -10129,7 +10129,7 @@ strupr: { // [338] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [339] call toupper -- call_phi_near + // [339] call toupper jsr toupper // [340] toupper::return#3 = toupper::return#2 jmp __b3 @@ -11291,12 +11291,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [8] return @@ -11325,7 +11325,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy // conio_c64_init::@return // } @@ -11364,7 +11364,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln // cputc::@return __breturn: @@ -11375,7 +11375,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln rts } @@ -11390,7 +11390,7 @@ main: { .label c = $2c // clrscr() // [28] call clrscr - // [104] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [104] phi from main to clrscr [phi:main->clrscr] jsr clrscr // main::@1 // char c = 'x' @@ -11405,7 +11405,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s [phi:main::@1->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -11427,7 +11427,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@2->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@2->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -11443,7 +11443,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s2 [phi:main::@3->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s2 [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -11456,7 +11456,7 @@ main: { // [129] phi from main::@4 to printf_uint [phi:main::@4->printf_uint] // [129] phi printf_uint::format_radix#2 = HEXADECIMAL [phi:main::@4->printf_uint#0] -- vbuxx=vbuc1 ldx #HEXADECIMAL - // [129] phi printf_uint::uvalue#2 = (unsigned int)&main::c [phi:main::@4->printf_uint#1] -- call_phi_near + // [129] phi printf_uint::uvalue#2 = (unsigned int)&main::c [phi:main::@4->printf_uint#1] -- vwuz1=vwuc1 lda #c @@ -11472,7 +11472,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@5->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -11488,7 +11488,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s4 [phi:main::@6->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s4 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 lda #s4 @@ -11510,7 +11510,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@7->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -11526,7 +11526,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s6 [phi:main::@8->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s6 [phi:main::@8->printf_str#1] -- pbuz1=pbuc1 lda #s6 @@ -11535,7 +11535,7 @@ main: { // [49] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 // printf("A signed char: %hhd\n", sc) - // [50] call printf_schar -- call_phi_near + // [50] call printf_schar jsr printf_schar // [51] phi from main::@9 to main::@10 [phi:main::@9->main::@10] // main::@10 @@ -11547,7 +11547,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@10->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@10->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -11563,7 +11563,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s8 [phi:main::@11->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s8 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 lda #s8 @@ -11573,7 +11573,7 @@ main: { // main::@12 // printf("An unsigned char: %hhu\n", uc) // [56] call printf_uchar - // [144] phi from main::@12 to printf_uchar [phi:main::@12->printf_uchar] -- call_phi_near + // [144] phi from main::@12 to printf_uchar [phi:main::@12->printf_uchar] jsr printf_uchar // [57] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 @@ -11585,7 +11585,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@13->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -11601,7 +11601,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s10 [phi:main::@14->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s10 [phi:main::@14->printf_str#1] -- pbuz1=pbuc1 lda #s10 @@ -11610,7 +11610,7 @@ main: { // [61] phi from main::@14 to main::@15 [phi:main::@14->main::@15] // main::@15 // printf("A signed int: %d\n", si) - // [62] call printf_sint -- call_phi_near + // [62] call printf_sint jsr printf_sint // [63] phi from main::@15 to main::@16 [phi:main::@15->main::@16] // main::@16 @@ -11622,7 +11622,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@16->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -11638,7 +11638,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s12 [phi:main::@17->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s12 [phi:main::@17->printf_str#1] -- pbuz1=pbuc1 lda #s12 @@ -11651,7 +11651,7 @@ main: { // [129] phi from main::@18 to printf_uint [phi:main::@18->printf_uint] // [129] phi printf_uint::format_radix#2 = DECIMAL [phi:main::@18->printf_uint#0] -- vbuxx=vbuc1 ldx #DECIMAL - // [129] phi printf_uint::uvalue#2 = main::ui [phi:main::@18->printf_uint#1] -- call_phi_near + // [129] phi printf_uint::uvalue#2 = main::ui [phi:main::@18->printf_uint#1] -- vwuz1=vwuc1 lda #ui @@ -11667,7 +11667,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@19->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@19->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -11683,7 +11683,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s14 [phi:main::@20->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s14 [phi:main::@20->printf_str#1] -- pbuz1=pbuc1 lda #s14 @@ -11692,7 +11692,7 @@ main: { // [73] phi from main::@20 to main::@21 [phi:main::@20->main::@21] // main::@21 // printf("A signed long: %ld\n", sl) - // [74] call printf_slong -- call_phi_near + // [74] call printf_slong jsr printf_slong // [75] phi from main::@21 to main::@22 [phi:main::@21->main::@22] // main::@22 @@ -11704,7 +11704,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@22->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@22->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -11720,7 +11720,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s16 [phi:main::@23->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s16 [phi:main::@23->printf_str#1] -- pbuz1=pbuc1 lda #s16 @@ -11730,7 +11730,7 @@ main: { // main::@24 // printf("An unsigned long: %lu\n", ul) // [80] call printf_ulong - // [164] phi from main::@24 to printf_ulong [phi:main::@24->printf_ulong] -- call_phi_near + // [164] phi from main::@24 to printf_ulong [phi:main::@24->printf_ulong] jsr printf_ulong // [81] phi from main::@24 to main::@25 [phi:main::@24->main::@25] // main::@25 @@ -11742,7 +11742,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [120] phi printf_str::s#21 = main::s1 [phi:main::@25->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = main::s1 [phi:main::@25->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -11901,7 +11901,7 @@ cputln: { // [101] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [102] call cscroll -- call_phi_near + // [102] call cscroll jsr cscroll // cputln::@return // } @@ -12068,7 +12068,7 @@ printf_uint: { // Format number into buffer // [183] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] // [183] phi utoa::value#10 = utoa::value#2 [phi:printf_uint::@1->utoa#0] -- register_copy - // [183] phi utoa::radix#2 = utoa::radix#1 [phi:printf_uint::@1->utoa#1] -- call_phi_near + // [183] phi utoa::radix#2 = utoa::radix#1 [phi:printf_uint::@1->utoa#1] -- register_copy jsr utoa // printf_uint::@2 // printf_number_buffer(putc, printf_buffer, format) @@ -12092,7 +12092,7 @@ printf_uint: { sta.z printf_number_buffer.format_zero_padding // [214] phi printf_number_buffer::format_justify_left#10 = 0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = 0 [phi:printf_uint::@2->printf_number_buffer#5] -- call_phi_near + // [214] phi printf_number_buffer::format_min_length#10 = 0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 tax jsr printf_number_buffer // printf_uint::@return @@ -12127,7 +12127,7 @@ printf_schar: { // uctoa(uvalue, printf_buffer.digits, format.radix) // [140] call uctoa // [255] phi from printf_schar::@2 to uctoa [phi:printf_schar::@2->uctoa] - // [255] phi uctoa::value#10 = printf_schar::uvalue#0 [phi:printf_schar::@2->uctoa#0] -- call_phi_near + // [255] phi uctoa::value#10 = printf_schar::uvalue#0 [phi:printf_schar::@2->uctoa#0] -- vbuxx=vbuc1 ldx #uvalue jsr uctoa // printf_schar::@3 @@ -12153,7 +12153,7 @@ printf_schar: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_schar::format_justify_left#0 [phi:printf_schar::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_schar::format_min_length#0 [phi:printf_schar::@3->printf_number_buffer#5] -- call_phi_near + // [214] phi printf_number_buffer::format_min_length#10 = printf_schar::format_min_length#0 [phi:printf_schar::@3->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer // printf_schar::@return @@ -12180,7 +12180,7 @@ printf_uchar: { // [146] call uctoa // Format number into buffer // [255] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] - // [255] phi uctoa::value#10 = main::uc [phi:printf_uchar::@1->uctoa#0] -- call_phi_near + // [255] phi uctoa::value#10 = main::uc [phi:printf_uchar::@1->uctoa#0] -- vbuxx=vbuc1 ldx #main.uc jsr uctoa // printf_uchar::@2 @@ -12206,7 +12206,7 @@ printf_uchar: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_uchar::format_justify_left#0 [phi:printf_uchar::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_uchar::format_min_length#0 [phi:printf_uchar::@2->printf_number_buffer#5] -- call_phi_near + // [214] phi printf_number_buffer::format_min_length#10 = printf_uchar::format_min_length#0 [phi:printf_uchar::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer // printf_uchar::@return @@ -12246,7 +12246,7 @@ printf_sint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [183] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- call_phi_near + // [183] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- vbuxx=vbuc1 ldx #DECIMAL jsr utoa // printf_sint::@3 @@ -12272,7 +12272,7 @@ printf_sint: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_sint::format_justify_left#0 [phi:printf_sint::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_sint::format_min_length#0 [phi:printf_sint::@3->printf_number_buffer#5] -- call_phi_near + // [214] phi printf_number_buffer::format_min_length#10 = printf_sint::format_min_length#0 [phi:printf_sint::@3->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer // printf_sint::@return @@ -12307,7 +12307,7 @@ printf_slong: { // ultoa(uvalue, printf_buffer.digits, format.radix) // [160] call ultoa // [274] phi from printf_slong::@2 to ultoa [phi:printf_slong::@2->ultoa] - // [274] phi ultoa::value#10 = printf_slong::uvalue#0 [phi:printf_slong::@2->ultoa#0] -- call_phi_near + // [274] phi ultoa::value#10 = printf_slong::uvalue#0 [phi:printf_slong::@2->ultoa#0] -- vduz1=vduc1 lda #uvalue @@ -12340,7 +12340,7 @@ printf_slong: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_slong::format_justify_left#0 [phi:printf_slong::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_slong::format_min_length#0 [phi:printf_slong::@3->printf_number_buffer#5] -- call_phi_near + // [214] phi printf_number_buffer::format_min_length#10 = printf_slong::format_min_length#0 [phi:printf_slong::@3->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer // printf_slong::@return @@ -12367,7 +12367,7 @@ printf_ulong: { // [166] call ultoa // Format number into buffer // [274] phi from printf_ulong::@1 to ultoa [phi:printf_ulong::@1->ultoa] - // [274] phi ultoa::value#10 = main::ul [phi:printf_ulong::@1->ultoa#0] -- call_phi_near + // [274] phi ultoa::value#10 = main::ul [phi:printf_ulong::@1->ultoa#0] -- vduz1=vduc1 lda #main.ul @@ -12400,7 +12400,7 @@ printf_ulong: { // [214] phi printf_number_buffer::format_justify_left#10 = printf_ulong::format_justify_left#0 [phi:printf_ulong::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [214] phi printf_number_buffer::format_min_length#10 = printf_ulong::format_min_length#0 [phi:printf_ulong::@2->printf_number_buffer#5] -- call_phi_near + // [214] phi printf_number_buffer::format_min_length#10 = printf_ulong::format_min_length#0 [phi:printf_ulong::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer // printf_ulong::@return @@ -12426,7 +12426,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [295] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [295] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -12442,7 +12442,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [295] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [295] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -12455,7 +12455,7 @@ cscroll: { // [305] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [305] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [305] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [305] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -12468,7 +12468,7 @@ cscroll: { // [305] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [305] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [305] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [305] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -12693,7 +12693,7 @@ utoa: { // [208] utoa_append::value#0 = utoa::value#3 // [209] utoa_append::sub#0 = utoa::digit_value#0 // [210] call utoa_append - // [313] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] -- call_phi_near + // [313] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] jsr utoa_append // utoa_append(buffer++, value, digit_value) // [211] utoa_append::return#0 = utoa_append::value#2 @@ -12733,7 +12733,7 @@ printf_number_buffer: { // printf_number_buffer::@6 // strlen(buffer.digits) // [217] call strlen - // [320] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] -- call_phi_near + // [320] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] jsr strlen // strlen(buffer.digits) // [218] strlen::return#2 = strlen::len#2 @@ -12804,7 +12804,7 @@ printf_number_buffer: { // [326] phi printf_padding::pad#5 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [326] phi printf_padding::length#4 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- call_phi_near + // [326] phi printf_padding::length#4 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy jsr printf_padding // printf_number_buffer::@2 __b2: @@ -12845,7 +12845,7 @@ printf_number_buffer: { // [326] phi printf_padding::pad#5 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [326] phi printf_padding::length#4 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- call_phi_near + // [326] phi printf_padding::length#4 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy jsr printf_padding // printf_number_buffer::@4 __b4: @@ -12857,7 +12857,7 @@ printf_number_buffer: { // printf_number_buffer::@11 // strupr(buffer.digits) // [245] call strupr - // [334] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] -- call_phi_near + // [334] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] jsr strupr // printf_number_buffer::@5 __b5: @@ -12866,7 +12866,7 @@ printf_number_buffer: { // [247] call printf_str // [120] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] // [120] phi printf_str::putc#21 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [120] phi printf_str::s#21 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- call_phi_near + // [120] phi printf_str::s#21 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -12900,7 +12900,7 @@ printf_number_buffer: { // [326] phi printf_padding::pad#5 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [326] phi printf_padding::length#4 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- call_phi_near + // [326] phi printf_padding::length#4 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy jsr printf_padding // printf_number_buffer::@return __breturn: @@ -13000,7 +13000,7 @@ uctoa: { // [268] uctoa_append::value#0 = uctoa::value#3 // [269] uctoa_append::sub#0 = uctoa::digit_value#0 // [270] call uctoa_append - // [344] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near + // [344] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] jsr uctoa_append // uctoa_append(buffer++, value, digit_value) // [271] uctoa_append::return#0 = uctoa_append::value#2 @@ -13137,7 +13137,7 @@ ultoa: { // [289] ultoa_append::value#0 = ultoa::value#3 // [290] ultoa_append::sub#0 = ultoa::digit_value#0 // [291] call ultoa_append - // [351] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] -- call_phi_near + // [351] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] jsr ultoa_append // ultoa_append(buffer++, value, digit_value) // [292] ultoa_append::return#0 = ultoa_append::value#2 @@ -13446,7 +13446,7 @@ strupr: { // [338] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [339] call toupper -- call_phi_near + // [339] call toupper jsr toupper // [340] toupper::return#3 = toupper::return#2 // strupr::@3 diff --git a/src/test/ref/printf-14.log b/src/test/ref/printf-14.log index 4a61c0595..8ab5f163e 100644 --- a/src/test/ref/printf-14.log +++ b/src/test/ref/printf-14.log @@ -3645,7 +3645,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -3653,7 +3653,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -3689,7 +3689,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -3730,7 +3730,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln jmp __breturn // cputc::@return @@ -3742,7 +3742,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln jmp __breturn } @@ -3750,7 +3750,7 @@ cputc: { main: { .label c = 7 // [28] call clrscr - // [52] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [52] phi from main to clrscr [phi:main->clrscr] clrscr_from_main: jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] @@ -3759,7 +3759,7 @@ main: { // main::@1 __b1: // [30] call printf_uchar - // [68] phi from main::@1 to printf_uchar [phi:main::@1->printf_uchar] -- call_phi_near + // [68] phi from main::@1 to printf_uchar [phi:main::@1->printf_uchar] printf_uchar_from___b1: jsr printf_uchar jmp __breturn @@ -3891,7 +3891,7 @@ cputln: { sta.z conio_cursor_x // [49] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [50] call cscroll -- call_phi_near + // [50] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -4013,7 +4013,7 @@ printf_uchar: { sta printf_buffer // [70] call uctoa // Format number into buffer - // [87] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] -- call_phi_near + // [87] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] uctoa_from___b1: jsr uctoa jmp __b2 @@ -4023,7 +4023,7 @@ printf_uchar: { lda printf_buffer // [72] call printf_number_buffer // Print using format - // [106] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] -- call_phi_near + // [106] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] printf_number_buffer_from___b2: jsr printf_number_buffer jmp __breturn @@ -4052,7 +4052,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [114] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [114] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -4071,7 +4071,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [114] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [114] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -4087,7 +4087,7 @@ cscroll: { memset_from___b3: // [124] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [124] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [124] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -4103,7 +4103,7 @@ cscroll: { memset_from___b4: // [124] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [124] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [124] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -4230,7 +4230,7 @@ uctoa: { // [100] uctoa_append::value#0 = uctoa::value#2 // [101] uctoa_append::sub#0 = uctoa::digit_value#0 // [102] call uctoa_append - // [132] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near + // [132] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] uctoa_append_from___b5: jsr uctoa_append // [103] uctoa_append::return#0 = uctoa_append::value#2 @@ -4280,7 +4280,7 @@ printf_number_buffer: { // printf_number_buffer::@2 __b2: // [112] call printf_str - // [139] phi from printf_number_buffer::@2 to printf_str [phi:printf_number_buffer::@2->printf_str] -- call_phi_near + // [139] phi from printf_number_buffer::@2 to printf_str [phi:printf_number_buffer::@2->printf_str] printf_str_from___b2: jsr printf_str jmp __breturn @@ -4903,12 +4903,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [8] return @@ -4937,7 +4937,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy // conio_c64_init::@return // } @@ -4976,7 +4976,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln // cputc::@return __breturn: @@ -4987,7 +4987,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln rts } @@ -4996,13 +4996,13 @@ main: { .label c = 7 // clrscr() // [28] call clrscr - // [52] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [52] phi from main to clrscr [phi:main->clrscr] jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] // main::@1 // printf("%u", c) // [30] call printf_uchar - // [68] phi from main::@1 to printf_uchar [phi:main::@1->printf_uchar] -- call_phi_near + // [68] phi from main::@1 to printf_uchar [phi:main::@1->printf_uchar] jsr printf_uchar // main::@return // } @@ -5135,7 +5135,7 @@ cputln: { // [49] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [50] call cscroll -- call_phi_near + // [50] call cscroll jsr cscroll // cputln::@return // } @@ -5257,7 +5257,7 @@ printf_uchar: { // uctoa(uvalue, printf_buffer.digits, format.radix) // [70] call uctoa // Format number into buffer - // [87] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] -- call_phi_near + // [87] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] jsr uctoa // printf_uchar::@2 // printf_number_buffer(putc, printf_buffer, format) @@ -5265,7 +5265,7 @@ printf_uchar: { lda printf_buffer // [72] call printf_number_buffer // Print using format - // [106] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] -- call_phi_near + // [106] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] jsr printf_number_buffer // printf_uchar::@return // } @@ -5290,7 +5290,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [114] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [114] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -5306,7 +5306,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [114] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [114] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -5319,7 +5319,7 @@ cscroll: { // [124] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [124] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [124] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [124] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -5332,7 +5332,7 @@ cscroll: { // [124] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [124] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [124] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [124] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -5457,7 +5457,7 @@ uctoa: { // [100] uctoa_append::value#0 = uctoa::value#2 // [101] uctoa_append::sub#0 = uctoa::digit_value#0 // [102] call uctoa_append - // [132] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near + // [132] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] jsr uctoa_append // uctoa_append(buffer++, value, digit_value) // [103] uctoa_append::return#0 = uctoa_append::value#2 @@ -5502,7 +5502,7 @@ printf_number_buffer: { __b2: // printf_str(putc, buffer.digits) // [112] call printf_str - // [139] phi from printf_number_buffer::@2 to printf_str [phi:printf_number_buffer::@2->printf_str] -- call_phi_near + // [139] phi from printf_number_buffer::@2 to printf_str [phi:printf_number_buffer::@2->printf_str] jsr printf_str // printf_number_buffer::@return // } diff --git a/src/test/ref/printf-15.log b/src/test/ref/printf-15.log index dcca7d5bb..1717f7db4 100644 --- a/src/test/ref/printf-15.log +++ b/src/test/ref/printf-15.log @@ -1683,7 +1683,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -1691,7 +1691,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -1727,7 +1727,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -1768,7 +1768,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln jmp __breturn // cputc::@return @@ -1780,14 +1780,14 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln jmp __breturn } // main main: { // [28] call clrscr - // [54] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [54] phi from main to clrscr [phi:main->clrscr] clrscr_from_main: jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] @@ -1798,7 +1798,7 @@ main: { // [30] call printf_str // [70] phi from main::@1 to printf_str [phi:main::@1->printf_str] printf_str_from___b1: - // [70] phi printf_str::s#4 = main::s [phi:main::@1->printf_str#0] -- call_phi_near + // [70] phi printf_str::s#4 = main::s [phi:main::@1->printf_str#0] -- pbuz1=pbuc1 lda #s @@ -1812,7 +1812,7 @@ main: { // [32] call printf_str // [70] phi from main::@2 to printf_str [phi:main::@2->printf_str] printf_str_from___b2: - // [70] phi printf_str::s#4 = main::s1 [phi:main::@2->printf_str#0] -- call_phi_near + // [70] phi printf_str::s#4 = main::s1 [phi:main::@2->printf_str#0] -- pbuz1=pbuc1 lda #s1 @@ -1953,7 +1953,7 @@ cputln: { sta.z conio_cursor_x // [51] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [52] call cscroll -- call_phi_near + // [52] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -2120,7 +2120,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [92] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [92] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -2139,7 +2139,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [92] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [92] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -2155,7 +2155,7 @@ cscroll: { memset_from___b3: // [102] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [102] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [102] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -2171,7 +2171,7 @@ cscroll: { memset_from___b4: // [102] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [102] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [102] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -2604,12 +2604,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [8] return @@ -2638,7 +2638,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy // conio_c64_init::@return // } @@ -2677,7 +2677,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln // cputc::@return __breturn: @@ -2688,7 +2688,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln rts } @@ -2696,14 +2696,14 @@ cputc: { main: { // clrscr() // [28] call clrscr - // [54] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [54] phi from main to clrscr [phi:main->clrscr] jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] // main::@1 // printf("Lone 1\n") // [30] call printf_str // [70] phi from main::@1 to printf_str [phi:main::@1->printf_str] - // [70] phi printf_str::s#4 = main::s [phi:main::@1->printf_str#0] -- call_phi_near + // [70] phi printf_str::s#4 = main::s [phi:main::@1->printf_str#0] -- pbuz1=pbuc1 lda #s @@ -2714,7 +2714,7 @@ main: { // printf("Lone 2\n") // [32] call printf_str // [70] phi from main::@2 to printf_str [phi:main::@2->printf_str] - // [70] phi printf_str::s#4 = main::s1 [phi:main::@2->printf_str#0] -- call_phi_near + // [70] phi printf_str::s#4 = main::s1 [phi:main::@2->printf_str#0] -- pbuz1=pbuc1 lda #s1 @@ -2857,7 +2857,7 @@ cputln: { // [51] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [52] call cscroll -- call_phi_near + // [52] call cscroll jsr cscroll // cputln::@return // } @@ -3020,7 +3020,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [92] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [92] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -3036,7 +3036,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [92] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [92] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -3049,7 +3049,7 @@ cscroll: { // [102] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [102] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [102] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [102] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -3062,7 +3062,7 @@ cscroll: { // [102] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [102] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [102] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [102] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/printf-17.log b/src/test/ref/printf-17.log index dbf187967..234dffab6 100644 --- a/src/test/ref/printf-17.log +++ b/src/test/ref/printf-17.log @@ -4498,7 +4498,7 @@ __start: { // __start::@1 __b1: // [5] call main - // [16] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [16] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -4579,7 +4579,7 @@ main: { // [17] call snprintf_init // [67] phi from main to snprintf_init [phi:main->snprintf_init] snprintf_init_from_main: - // [67] phi snprintf_init::n#4 = $14 [phi:main->snprintf_init#0] -- call_phi_near + // [67] phi snprintf_init::n#4 = $14 [phi:main->snprintf_init#0] -- vwuz1=vbuc1 lda #<$14 sta.z snprintf_init.n lda #>$14 @@ -4598,7 +4598,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -4617,7 +4617,7 @@ main: { // [23] call print // [81] phi from main::@2 to print [phi:main::@2->print] print_from___b2: - // [81] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- call_phi_near + // [81] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- pbuz1=pbuc1 lda #<$400 sta.z screen lda #>$400 @@ -4631,7 +4631,7 @@ main: { // [25] call snprintf_init // [67] phi from main::@3 to snprintf_init [phi:main::@3->snprintf_init] snprintf_init_from___b3: - // [67] phi snprintf_init::n#4 = $14 [phi:main::@3->snprintf_init#0] -- call_phi_near + // [67] phi snprintf_init::n#4 = $14 [phi:main::@3->snprintf_init#0] -- vwuz1=vbuc1 lda #<$14 sta.z snprintf_init.n lda #>$14 @@ -4650,7 +4650,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -4662,7 +4662,7 @@ main: { // main::@5 __b5: // [29] call printf_string - // [88] phi from main::@5 to printf_string [phi:main::@5->printf_string] -- call_phi_near + // [88] phi from main::@5 to printf_string [phi:main::@5->printf_string] printf_string_from___b5: jsr printf_string jmp __b6 @@ -4683,7 +4683,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -4702,7 +4702,7 @@ main: { // [37] call print // [81] phi from main::@7 to print [phi:main::@7->print] print_from___b7: - // [81] phi screen#25 = screen#1 [phi:main::@7->print#0] -- call_phi_near + // [81] phi screen#25 = screen#1 [phi:main::@7->print#0] -- register_copy jsr print // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] __b8_from___b7: @@ -4712,7 +4712,7 @@ main: { // [39] call snprintf_init // [67] phi from main::@8 to snprintf_init [phi:main::@8->snprintf_init] snprintf_init_from___b8: - // [67] phi snprintf_init::n#4 = $14 [phi:main::@8->snprintf_init#0] -- call_phi_near + // [67] phi snprintf_init::n#4 = $14 [phi:main::@8->snprintf_init#0] -- vwuz1=vbuc1 lda #<$14 sta.z snprintf_init.n lda #>$14 @@ -4731,7 +4731,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -4745,7 +4745,7 @@ main: { // [43] call printf_sint // [92] phi from main::@10 to printf_sint [phi:main::@10->printf_sint] printf_sint_from___b10: - // [92] phi printf_sint::value#3 = 3 [phi:main::@10->printf_sint#0] -- call_phi_near + // [92] phi printf_sint::value#3 = 3 [phi:main::@10->printf_sint#0] -- vwsz1=vbsc1 lda #<3 sta.z printf_sint.value lda #>3 @@ -4764,7 +4764,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 lda #s4 @@ -4776,7 +4776,7 @@ main: { // main::@12 __b12: // [47] call printf_uint - // [103] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] -- call_phi_near + // [103] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] printf_uint_from___b12: jsr printf_uint // [48] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -4792,7 +4792,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 lda #s5 @@ -4811,7 +4811,7 @@ main: { // [53] call print // [81] phi from main::@14 to print [phi:main::@14->print] print_from___b14: - // [81] phi screen#25 = screen#1 [phi:main::@14->print#0] -- call_phi_near + // [81] phi screen#25 = screen#1 [phi:main::@14->print#0] -- register_copy jsr print // [54] phi from main::@14 to main::@15 [phi:main::@14->main::@15] __b15_from___b14: @@ -4821,7 +4821,7 @@ main: { // [55] call snprintf_init // [67] phi from main::@15 to snprintf_init [phi:main::@15->snprintf_init] snprintf_init_from___b15: - // [67] phi snprintf_init::n#4 = 6 [phi:main::@15->snprintf_init#0] -- call_phi_near + // [67] phi snprintf_init::n#4 = 6 [phi:main::@15->snprintf_init#0] -- vwuz1=vbuc1 lda #<6 sta.z snprintf_init.n lda #>6 @@ -4840,7 +4840,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 lda #s6 @@ -4854,7 +4854,7 @@ main: { // [59] call printf_sint // [92] phi from main::@17 to printf_sint [phi:main::@17->printf_sint] printf_sint_from___b17: - // [92] phi printf_sint::value#3 = $56ce [phi:main::@17->printf_sint#0] -- call_phi_near + // [92] phi printf_sint::value#3 = $56ce [phi:main::@17->printf_sint#0] -- vwsz1=vwsc1 lda #<$56ce sta.z printf_sint.value lda #>$56ce @@ -4873,7 +4873,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- pbuz1=pbuc1 lda #s5 @@ -4892,7 +4892,7 @@ main: { // [65] call print // [81] phi from main::@19 to print [phi:main::@19->print] print_from___b19: - // [81] phi screen#25 = screen#1 [phi:main::@19->print#0] -- call_phi_near + // [81] phi screen#25 = screen#1 [phi:main::@19->print#0] -- register_copy jsr print jmp __breturn // main::@return @@ -5051,7 +5051,7 @@ printf_string: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- pbuz1=pbuc1 lda #main.str @@ -5101,7 +5101,7 @@ printf_sint: { // [109] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] utoa_from___b2: // [109] phi utoa::value#10 = utoa::value#1 [phi:printf_sint::@2->utoa#0] -- register_copy - // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- call_phi_near + // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- vbuxx=vbuc1 ldx #DECIMAL jsr utoa jmp __b3 @@ -5129,7 +5129,7 @@ printf_sint: { // [140] phi printf_number_buffer::format_justify_left#10 = 0 [phi:printf_sint::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #0 sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#2 = 0 [phi:printf_sint::@3->printf_number_buffer#5] -- call_phi_near + // [140] phi printf_number_buffer::format_min_length#2 = 0 [phi:printf_sint::@3->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #0 jsr printf_number_buffer jmp __breturn @@ -5164,7 +5164,7 @@ printf_uint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- call_phi_near + // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- vbuxx=vbuc1 ldx #HEXADECIMAL jsr utoa jmp __b2 @@ -5192,7 +5192,7 @@ printf_uint: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#2 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- call_phi_near + // [140] phi printf_number_buffer::format_min_length#2 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -5397,7 +5397,7 @@ utoa: { // [134] utoa_append::value#0 = utoa::value#3 // [135] utoa_append::sub#0 = utoa::digit_value#0 // [136] call utoa_append - // [181] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] -- call_phi_near + // [181] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] utoa_append_from___b10: jsr utoa_append // [137] utoa_append::return#0 = utoa_append::value#2 @@ -5439,7 +5439,7 @@ printf_number_buffer: { // printf_number_buffer::@6 __b6: // [143] call strlen - // [188] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] -- call_phi_near + // [188] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] strlen_from___b6: jsr strlen // [144] strlen::return#2 = strlen::len#2 @@ -5523,7 +5523,7 @@ printf_number_buffer: { // [194] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- call_phi_near + // [194] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy jsr printf_padding jmp __b2 // printf_number_buffer::@2 @@ -5568,7 +5568,7 @@ printf_number_buffer: { // [194] phi printf_padding::pad#7 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- call_phi_near + // [194] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy jsr printf_padding jmp __b4 // printf_number_buffer::@4 @@ -5582,7 +5582,7 @@ printf_number_buffer: { // printf_number_buffer::@11 __b11: // [171] call strupr - // [202] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] -- call_phi_near + // [202] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] strupr_from___b11: jsr strupr jmp __b5 @@ -5593,7 +5593,7 @@ printf_number_buffer: { // [72] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] printf_str_from___b5: // [72] phi printf_str::putc#12 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [72] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -5632,7 +5632,7 @@ printf_number_buffer: { // [194] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- call_phi_near + // [194] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy jsr printf_padding jmp __breturn // printf_number_buffer::@return @@ -5833,7 +5833,7 @@ strupr: { // [206] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [207] call toupper -- call_phi_near + // [207] call toupper jsr toupper // [208] toupper::return#3 = toupper::return#2 jmp __b3 @@ -6471,7 +6471,7 @@ __start: { // [4] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [5] call main - // [16] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [16] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [6] return @@ -6546,7 +6546,7 @@ main: { // snprintf(BUF, 20, "hello world! ") // [17] call snprintf_init // [67] phi from main to snprintf_init [phi:main->snprintf_init] - // [67] phi snprintf_init::n#4 = $14 [phi:main->snprintf_init#0] -- call_phi_near + // [67] phi snprintf_init::n#4 = $14 [phi:main->snprintf_init#0] -- vwuz1=vbuc1 lda #<$14 sta.z snprintf_init.n lda #>$14 @@ -6562,7 +6562,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -6580,7 +6580,7 @@ main: { // print(BUF) // [23] call print // [81] phi from main::@2 to print [phi:main::@2->print] - // [81] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- call_phi_near + // [81] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- pbuz1=pbuc1 lda #<$400 sta.z screen lda #>$400 @@ -6591,7 +6591,7 @@ main: { // snprintf(BUF, 20, "hello %s%c ", "world", '!') // [25] call snprintf_init // [67] phi from main::@3 to snprintf_init [phi:main::@3->snprintf_init] - // [67] phi snprintf_init::n#4 = $14 [phi:main::@3->snprintf_init#0] -- call_phi_near + // [67] phi snprintf_init::n#4 = $14 [phi:main::@3->snprintf_init#0] -- vwuz1=vbuc1 lda #<$14 sta.z snprintf_init.n lda #>$14 @@ -6607,7 +6607,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -6617,7 +6617,7 @@ main: { // main::@5 // snprintf(BUF, 20, "hello %s%c ", "world", '!') // [29] call printf_string - // [88] phi from main::@5 to printf_string [phi:main::@5->printf_string] -- call_phi_near + // [88] phi from main::@5 to printf_string [phi:main::@5->printf_string] jsr printf_string // main::@6 // snprintf(BUF, 20, "hello %s%c ", "world", '!') @@ -6635,7 +6635,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -6653,14 +6653,14 @@ main: { // print(BUF) // [37] call print // [81] phi from main::@7 to print [phi:main::@7->print] - // [81] phi screen#25 = screen#1 [phi:main::@7->print#0] -- call_phi_near + // [81] phi screen#25 = screen#1 [phi:main::@7->print#0] -- register_copy jsr print // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 // snprintf(BUF, 20, "hello %d+%x! ", 3,11) // [39] call snprintf_init // [67] phi from main::@8 to snprintf_init [phi:main::@8->snprintf_init] - // [67] phi snprintf_init::n#4 = $14 [phi:main::@8->snprintf_init#0] -- call_phi_near + // [67] phi snprintf_init::n#4 = $14 [phi:main::@8->snprintf_init#0] -- vwuz1=vbuc1 lda #<$14 sta.z snprintf_init.n lda #>$14 @@ -6676,7 +6676,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -6687,7 +6687,7 @@ main: { // snprintf(BUF, 20, "hello %d+%x! ", 3,11) // [43] call printf_sint // [92] phi from main::@10 to printf_sint [phi:main::@10->printf_sint] - // [92] phi printf_sint::value#3 = 3 [phi:main::@10->printf_sint#0] -- call_phi_near + // [92] phi printf_sint::value#3 = 3 [phi:main::@10->printf_sint#0] -- vwsz1=vbsc1 lda #<3 sta.z printf_sint.value lda #>3 @@ -6703,7 +6703,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 lda #s4 @@ -6713,7 +6713,7 @@ main: { // main::@12 // snprintf(BUF, 20, "hello %d+%x! ", 3,11) // [47] call printf_uint - // [103] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] -- call_phi_near + // [103] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] jsr printf_uint // [48] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 @@ -6725,7 +6725,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 lda #s5 @@ -6743,14 +6743,14 @@ main: { // print(BUF) // [53] call print // [81] phi from main::@14 to print [phi:main::@14->print] - // [81] phi screen#25 = screen#1 [phi:main::@14->print#0] -- call_phi_near + // [81] phi screen#25 = screen#1 [phi:main::@14->print#0] -- register_copy jsr print // [54] phi from main::@14 to main::@15 [phi:main::@14->main::@15] // main::@15 // snprintf(BUF, 6, "hi %d! ", 22222) // [55] call snprintf_init // [67] phi from main::@15 to snprintf_init [phi:main::@15->snprintf_init] - // [67] phi snprintf_init::n#4 = 6 [phi:main::@15->snprintf_init#0] -- call_phi_near + // [67] phi snprintf_init::n#4 = 6 [phi:main::@15->snprintf_init#0] -- vwuz1=vbuc1 lda #<6 sta.z snprintf_init.n lda #>6 @@ -6766,7 +6766,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 lda #s6 @@ -6777,7 +6777,7 @@ main: { // snprintf(BUF, 6, "hi %d! ", 22222) // [59] call printf_sint // [92] phi from main::@17 to printf_sint [phi:main::@17->printf_sint] - // [92] phi printf_sint::value#3 = $56ce [phi:main::@17->printf_sint#0] -- call_phi_near + // [92] phi printf_sint::value#3 = $56ce [phi:main::@17->printf_sint#0] -- vwsz1=vwsc1 lda #<$56ce sta.z printf_sint.value lda #>$56ce @@ -6793,7 +6793,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- pbuz1=pbuc1 lda #s5 @@ -6811,7 +6811,7 @@ main: { // print(BUF) // [65] call print // [81] phi from main::@19 to print [phi:main::@19->print] - // [81] phi screen#25 = screen#1 [phi:main::@19->print#0] -- call_phi_near + // [81] phi screen#25 = screen#1 [phi:main::@19->print#0] -- register_copy jsr print // main::@return // } @@ -6963,7 +6963,7 @@ printf_string: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- pbuz1=pbuc1 lda #main.str @@ -7013,7 +7013,7 @@ printf_sint: { // [99] call utoa // [109] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] // [109] phi utoa::value#10 = utoa::value#1 [phi:printf_sint::@2->utoa#0] -- register_copy - // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- call_phi_near + // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- vbuxx=vbuc1 ldx #DECIMAL jsr utoa // printf_sint::@3 @@ -7038,7 +7038,7 @@ printf_sint: { sta.z printf_number_buffer.format_zero_padding // [140] phi printf_number_buffer::format_justify_left#10 = 0 [phi:printf_sint::@3->printf_number_buffer#4] -- vbuz1=vbuc1 sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#2 = 0 [phi:printf_sint::@3->printf_number_buffer#5] -- call_phi_near + // [140] phi printf_number_buffer::format_min_length#2 = 0 [phi:printf_sint::@3->printf_number_buffer#5] -- vbuxx=vbuc1 tax jsr printf_number_buffer // printf_sint::@return @@ -7071,7 +7071,7 @@ printf_uint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- call_phi_near + // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- vbuxx=vbuc1 ldx #HEXADECIMAL jsr utoa // printf_uint::@2 @@ -7097,7 +7097,7 @@ printf_uint: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#2 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- call_phi_near + // [140] phi printf_number_buffer::format_min_length#2 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer // printf_uint::@return @@ -7296,7 +7296,7 @@ utoa: { // [134] utoa_append::value#0 = utoa::value#3 // [135] utoa_append::sub#0 = utoa::digit_value#0 // [136] call utoa_append - // [181] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] -- call_phi_near + // [181] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] jsr utoa_append // utoa_append(buffer++, value, digit_value) // [137] utoa_append::return#0 = utoa_append::value#2 @@ -7336,7 +7336,7 @@ printf_number_buffer: { // printf_number_buffer::@6 // strlen(buffer.digits) // [143] call strlen - // [188] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] -- call_phi_near + // [188] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] jsr strlen // strlen(buffer.digits) // [144] strlen::return#2 = strlen::len#2 @@ -7407,7 +7407,7 @@ printf_number_buffer: { // [194] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- call_phi_near + // [194] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy jsr printf_padding // printf_number_buffer::@2 __b2: @@ -7448,7 +7448,7 @@ printf_number_buffer: { // [194] phi printf_padding::pad#7 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- call_phi_near + // [194] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy jsr printf_padding // printf_number_buffer::@4 __b4: @@ -7460,7 +7460,7 @@ printf_number_buffer: { // printf_number_buffer::@11 // strupr(buffer.digits) // [171] call strupr - // [202] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] -- call_phi_near + // [202] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] jsr strupr // printf_number_buffer::@5 __b5: @@ -7469,7 +7469,7 @@ printf_number_buffer: { // [173] call printf_str // [72] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] // [72] phi printf_str::putc#12 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [72] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- call_phi_near + // [72] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -7503,7 +7503,7 @@ printf_number_buffer: { // [194] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- call_phi_near + // [194] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy jsr printf_padding // printf_number_buffer::@return __breturn: @@ -7696,7 +7696,7 @@ strupr: { // [206] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [207] call toupper -- call_phi_near + // [207] call toupper jsr toupper // [208] toupper::return#3 = toupper::return#2 // strupr::@3 diff --git a/src/test/ref/printf-18.log b/src/test/ref/printf-18.log index 03e8f0b22..ef837a417 100644 --- a/src/test/ref/printf-18.log +++ b/src/test/ref/printf-18.log @@ -2389,7 +2389,7 @@ __start: { sta.z __snprintf_buffer lda #>0 sta.z __snprintf_buffer+1 - // [8] call conio_c64_init -- call_phi_near + // [8] call conio_c64_init jsr conio_c64_init // [9] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -2397,7 +2397,7 @@ __start: { // __start::@1 __b1: // [10] call main - // [39] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [39] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -2500,7 +2500,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [25] gotoxy::y#2 = conio_c64_init::line#2 - // [26] call gotoxy -- call_phi_near + // [26] call gotoxy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -2541,7 +2541,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [35] call cputln -- call_phi_near + // [35] call cputln jsr cputln jmp __breturn // cputc::@return @@ -2553,7 +2553,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [38] call cputln -- call_phi_near + // [38] call cputln jsr cputln jmp __breturn } @@ -2562,7 +2562,7 @@ main: { // [40] call snprintf_init // [87] phi from main to snprintf_init [phi:main->snprintf_init] snprintf_init_from_main: - // [87] phi snprintf_init::s#2 = BUF1 [phi:main->snprintf_init#0] -- call_phi_near + // [87] phi snprintf_init::s#2 = BUF1 [phi:main->snprintf_init#0] -- pbuz1=pbuc1 lda #BUF1 @@ -2581,7 +2581,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s [phi:main::@1->printf_str#1] -- call_phi_near + // [92] phi printf_str::s#8 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -2600,7 +2600,7 @@ main: { // [46] call snprintf_init // [87] phi from main::@2 to snprintf_init [phi:main::@2->snprintf_init] snprintf_init_from___b2: - // [87] phi snprintf_init::s#2 = BUF2 [phi:main::@2->snprintf_init#0] -- call_phi_near + // [87] phi snprintf_init::s#2 = BUF2 [phi:main::@2->snprintf_init#0] -- pbuz1=pbuc1 lda #BUF2 @@ -2619,7 +2619,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s1 [phi:main::@3->printf_str#1] -- call_phi_near + // [92] phi printf_str::s#8 = main::s1 [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -2638,7 +2638,7 @@ main: { sta.z printf_string.putc lda #>snputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = main::str [phi:main::@4->printf_string#1] -- call_phi_near + // [101] phi printf_string::str#10 = main::str [phi:main::@4->printf_string#1] -- pbuz1=pbuc1 lda #str @@ -2669,7 +2669,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s2 [phi:main::@5->printf_str#1] -- call_phi_near + // [92] phi printf_str::s#8 = main::s2 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -2688,7 +2688,7 @@ main: { sta.z printf_string.putc lda #>cputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = BUF1 [phi:main::@6->printf_string#1] -- call_phi_near + // [101] phi printf_string::str#10 = BUF1 [phi:main::@6->printf_string#1] -- pbuz1=pbuc1 lda #BUF1 @@ -2707,7 +2707,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s3 [phi:main::@7->printf_str#1] -- call_phi_near + // [92] phi printf_str::s#8 = main::s3 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 lda #s3 @@ -2726,7 +2726,7 @@ main: { sta.z printf_string.putc lda #>cputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = BUF2 [phi:main::@8->printf_string#1] -- call_phi_near + // [101] phi printf_string::str#10 = BUF2 [phi:main::@8->printf_string#1] -- pbuz1=pbuc1 lda #BUF2 @@ -2745,7 +2745,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s2 [phi:main::@9->printf_str#1] -- call_phi_near + // [92] phi printf_str::s#8 = main::s2 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -2892,7 +2892,7 @@ cputln: { sta.z conio_cursor_x // [84] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [85] call cscroll -- call_phi_near + // [85] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -2984,7 +2984,7 @@ printf_string: { // [92] phi from printf_string::@1 to printf_str [phi:printf_string::@1->printf_str] printf_str_from___b1: // [92] phi printf_str::putc#8 = printf_str::putc#0 [phi:printf_string::@1->printf_str#0] -- register_copy - // [92] phi printf_str::s#8 = printf_str::s#1 [phi:printf_string::@1->printf_str#1] -- call_phi_near + // [92] phi printf_str::s#8 = printf_str::s#1 [phi:printf_string::@1->printf_str#1] -- register_copy jsr printf_str jmp __breturn // printf_string::@return @@ -3012,7 +3012,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [119] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [119] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -3031,7 +3031,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [119] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [119] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -3047,7 +3047,7 @@ cscroll: { memset_from___b3: // [129] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [129] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [129] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -3063,7 +3063,7 @@ cscroll: { memset_from___b4: // [129] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [129] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [129] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -3577,12 +3577,12 @@ __start: { sta.z __snprintf_buffer sta.z __snprintf_buffer+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [8] call conio_c64_init -- call_phi_near + // [8] call conio_c64_init jsr conio_c64_init // [9] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [10] call main - // [39] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [39] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [11] return @@ -3675,7 +3675,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [25] gotoxy::y#2 = conio_c64_init::line#2 - // [26] call gotoxy -- call_phi_near + // [26] call gotoxy jsr gotoxy // conio_c64_init::@return // } @@ -3714,7 +3714,7 @@ cputc: { // [34] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [35] call cputln -- call_phi_near + // [35] call cputln jsr cputln // cputc::@return __breturn: @@ -3725,7 +3725,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [38] call cputln -- call_phi_near + // [38] call cputln jsr cputln rts } @@ -3734,7 +3734,7 @@ main: { // snprintf(BUF1, 20, "hello world!") // [40] call snprintf_init // [87] phi from main to snprintf_init [phi:main->snprintf_init] - // [87] phi snprintf_init::s#2 = BUF1 [phi:main->snprintf_init#0] -- call_phi_near + // [87] phi snprintf_init::s#2 = BUF1 [phi:main->snprintf_init#0] -- pbuz1=pbuc1 lda #BUF1 @@ -3750,7 +3750,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s [phi:main::@1->printf_str#1] -- call_phi_near + // [92] phi printf_str::s#8 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -3768,7 +3768,7 @@ main: { // snprintf(BUF2, 20, "hello %s%c", "world", '!') // [46] call snprintf_init // [87] phi from main::@2 to snprintf_init [phi:main::@2->snprintf_init] - // [87] phi snprintf_init::s#2 = BUF2 [phi:main::@2->snprintf_init#0] -- call_phi_near + // [87] phi snprintf_init::s#2 = BUF2 [phi:main::@2->snprintf_init#0] -- pbuz1=pbuc1 lda #BUF2 @@ -3784,7 +3784,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s1 [phi:main::@3->printf_str#1] -- call_phi_near + // [92] phi printf_str::s#8 = main::s1 [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -3800,7 +3800,7 @@ main: { sta.z printf_string.putc lda #>snputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = main::str [phi:main::@4->printf_string#1] -- call_phi_near + // [101] phi printf_string::str#10 = main::str [phi:main::@4->printf_string#1] -- pbuz1=pbuc1 lda #str @@ -3830,7 +3830,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s2 [phi:main::@5->printf_str#1] -- call_phi_near + // [92] phi printf_str::s#8 = main::s2 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -3846,7 +3846,7 @@ main: { sta.z printf_string.putc lda #>cputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = BUF1 [phi:main::@6->printf_string#1] -- call_phi_near + // [101] phi printf_string::str#10 = BUF1 [phi:main::@6->printf_string#1] -- pbuz1=pbuc1 lda #BUF1 @@ -3862,7 +3862,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s3 [phi:main::@7->printf_str#1] -- call_phi_near + // [92] phi printf_str::s#8 = main::s3 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 lda #s3 @@ -3878,7 +3878,7 @@ main: { sta.z printf_string.putc lda #>cputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = BUF2 [phi:main::@8->printf_string#1] -- call_phi_near + // [101] phi printf_string::str#10 = BUF2 [phi:main::@8->printf_string#1] -- pbuz1=pbuc1 lda #BUF2 @@ -3894,7 +3894,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s2 [phi:main::@9->printf_str#1] -- call_phi_near + // [92] phi printf_str::s#8 = main::s2 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -4043,7 +4043,7 @@ cputln: { // [84] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [85] call cscroll -- call_phi_near + // [85] call cscroll jsr cscroll // cputln::@return // } @@ -4131,7 +4131,7 @@ printf_string: { // [104] call printf_str // [92] phi from printf_string::@1 to printf_str [phi:printf_string::@1->printf_str] // [92] phi printf_str::putc#8 = printf_str::putc#0 [phi:printf_string::@1->printf_str#0] -- register_copy - // [92] phi printf_str::s#8 = printf_str::s#1 [phi:printf_string::@1->printf_str#1] -- call_phi_near + // [92] phi printf_str::s#8 = printf_str::s#1 [phi:printf_string::@1->printf_str#1] -- register_copy jsr printf_str // printf_string::@return // } @@ -4156,7 +4156,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [119] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [119] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -4172,7 +4172,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [119] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [119] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -4185,7 +4185,7 @@ cscroll: { // [129] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [129] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [129] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [129] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -4198,7 +4198,7 @@ cscroll: { // [129] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [129] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [129] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [129] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/printf-19.log b/src/test/ref/printf-19.log index df40a64fe..a8ac45c87 100644 --- a/src/test/ref/printf-19.log +++ b/src/test/ref/printf-19.log @@ -5428,7 +5428,7 @@ __start: { // __start::@1 __b1: // [5] call main - // [16] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [16] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -5506,7 +5506,7 @@ snputc: { } // main main: { - // [17] call snprintf_init -- call_phi_near + // [17] call snprintf_init jsr snprintf_init // [18] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -5521,7 +5521,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -5540,7 +5540,7 @@ main: { // [23] call print // [80] phi from main::@2 to print [phi:main::@2->print] print_from___b2: - // [80] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- call_phi_near + // [80] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- pbuz1=pbuc1 lda #<$400 sta.z screen lda #>$400 @@ -5551,7 +5551,7 @@ main: { jmp __b3 // main::@3 __b3: - // [25] call snprintf_init -- call_phi_near + // [25] call snprintf_init jsr snprintf_init // [26] phi from main::@3 to main::@4 [phi:main::@3->main::@4] __b4_from___b3: @@ -5566,7 +5566,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -5578,7 +5578,7 @@ main: { // main::@5 __b5: // [29] call printf_string - // [87] phi from main::@5 to printf_string [phi:main::@5->printf_string] -- call_phi_near + // [87] phi from main::@5 to printf_string [phi:main::@5->printf_string] printf_string_from___b5: jsr printf_string jmp __b6 @@ -5599,7 +5599,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -5618,14 +5618,14 @@ main: { // [37] call print // [80] phi from main::@7 to print [phi:main::@7->print] print_from___b7: - // [80] phi screen#25 = screen#1 [phi:main::@7->print#0] -- call_phi_near + // [80] phi screen#25 = screen#1 [phi:main::@7->print#0] -- register_copy jsr print // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] __b8_from___b7: jmp __b8 // main::@8 __b8: - // [39] call snprintf_init -- call_phi_near + // [39] call snprintf_init jsr snprintf_init // [40] phi from main::@8 to main::@9 [phi:main::@8->main::@9] __b9_from___b8: @@ -5640,7 +5640,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -5651,7 +5651,7 @@ main: { jmp __b10 // main::@10 __b10: - // [43] call printf_sint -- call_phi_near + // [43] call printf_sint jsr printf_sint // [44] phi from main::@10 to main::@11 [phi:main::@10->main::@11] __b11_from___b10: @@ -5666,7 +5666,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 lda #s4 @@ -5678,7 +5678,7 @@ main: { // main::@12 __b12: // [47] call printf_uint - // [97] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] -- call_phi_near + // [97] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] printf_uint_from___b12: jsr printf_uint // [48] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -5694,7 +5694,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 lda #s5 @@ -5713,14 +5713,14 @@ main: { // [53] call print // [80] phi from main::@14 to print [phi:main::@14->print] print_from___b14: - // [80] phi screen#25 = screen#1 [phi:main::@14->print#0] -- call_phi_near + // [80] phi screen#25 = screen#1 [phi:main::@14->print#0] -- register_copy jsr print // [54] phi from main::@14 to main::@15 [phi:main::@14->main::@15] __b15_from___b14: jmp __b15 // main::@15 __b15: - // [55] call snprintf_init -- call_phi_near + // [55] call snprintf_init jsr snprintf_init // [56] phi from main::@15 to main::@16 [phi:main::@15->main::@16] __b16_from___b15: @@ -5735,7 +5735,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 lda #s6 @@ -5746,7 +5746,7 @@ main: { jmp __b17 // main::@17 __b17: - // [59] call printf_slong -- call_phi_near + // [59] call printf_slong jsr printf_slong // [60] phi from main::@17 to main::@18 [phi:main::@17->main::@18] __b18_from___b17: @@ -5761,7 +5761,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- pbuz1=pbuc1 lda #s5 @@ -5780,7 +5780,7 @@ main: { // [65] call print // [80] phi from main::@19 to print [phi:main::@19->print] print_from___b19: - // [80] phi screen#25 = screen#1 [phi:main::@19->print#0] -- call_phi_near + // [80] phi screen#25 = screen#1 [phi:main::@19->print#0] -- register_copy jsr print jmp __breturn // main::@return @@ -5938,7 +5938,7 @@ printf_string: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- pbuz1=pbuc1 lda #main.str @@ -5979,7 +5979,7 @@ printf_sint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@1->utoa#1] -- call_phi_near + // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@1->utoa#1] -- vbuxx=vbuc1 ldx #DECIMAL jsr utoa jmp __b2 @@ -6007,7 +6007,7 @@ printf_sint: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_sint::format_justify_left#0 [phi:printf_sint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_sint::format_min_length#0 [phi:printf_sint::@2->printf_number_buffer#5] -- call_phi_near + // [140] phi printf_number_buffer::format_min_length#3 = printf_sint::format_min_length#0 [phi:printf_sint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -6042,7 +6042,7 @@ printf_uint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- call_phi_near + // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- vbuxx=vbuc1 ldx #HEXADECIMAL jsr utoa jmp __b2 @@ -6070,7 +6070,7 @@ printf_uint: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- call_phi_near + // [140] phi printf_number_buffer::format_min_length#3 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -6101,7 +6101,7 @@ printf_slong: { // printf_slong::@1 __b1: // [105] call ultoa - // [181] phi from printf_slong::@1 to ultoa [phi:printf_slong::@1->ultoa] -- call_phi_near + // [181] phi from printf_slong::@1 to ultoa [phi:printf_slong::@1->ultoa] ultoa_from___b1: jsr ultoa jmp __b2 @@ -6129,7 +6129,7 @@ printf_slong: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_slong::format_justify_left#0 [phi:printf_slong::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_slong::format_min_length#0 [phi:printf_slong::@2->printf_number_buffer#5] -- call_phi_near + // [140] phi printf_number_buffer::format_min_length#3 = printf_slong::format_min_length#0 [phi:printf_slong::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer jmp __breturn @@ -6334,7 +6334,7 @@ utoa: { // [134] utoa_append::value#0 = utoa::value#3 // [135] utoa_append::sub#0 = utoa::digit_value#0 // [136] call utoa_append - // [202] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] -- call_phi_near + // [202] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] utoa_append_from___b10: jsr utoa_append // [137] utoa_append::return#0 = utoa_append::value#2 @@ -6376,7 +6376,7 @@ printf_number_buffer: { // printf_number_buffer::@6 __b6: // [143] call strlen - // [209] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] -- call_phi_near + // [209] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] strlen_from___b6: jsr strlen // [144] strlen::return#2 = strlen::len#2 @@ -6460,7 +6460,7 @@ printf_number_buffer: { // [215] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- call_phi_near + // [215] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy jsr printf_padding jmp __b2 // printf_number_buffer::@2 @@ -6505,7 +6505,7 @@ printf_number_buffer: { // [215] phi printf_padding::pad#7 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- call_phi_near + // [215] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy jsr printf_padding jmp __b4 // printf_number_buffer::@4 @@ -6519,7 +6519,7 @@ printf_number_buffer: { // printf_number_buffer::@11 __b11: // [171] call strupr - // [223] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] -- call_phi_near + // [223] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] strupr_from___b11: jsr strupr jmp __b5 @@ -6530,7 +6530,7 @@ printf_number_buffer: { // [71] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] printf_str_from___b5: // [71] phi printf_str::putc#12 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [71] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -6569,7 +6569,7 @@ printf_number_buffer: { // [215] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- call_phi_near + // [215] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy jsr printf_padding jmp __breturn // printf_number_buffer::@return @@ -6707,7 +6707,7 @@ ultoa: { // [196] ultoa_append::value#0 = ultoa::value#2 // [197] ultoa_append::sub#0 = ultoa::digit_value#0 // [198] call ultoa_append - // [233] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] -- call_phi_near + // [233] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] ultoa_append_from___b5: jsr ultoa_append // [199] ultoa_append::return#0 = ultoa_append::value#2 @@ -6918,7 +6918,7 @@ strupr: { // [227] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [228] call toupper -- call_phi_near + // [228] call toupper jsr toupper // [229] toupper::return#3 = toupper::return#2 jmp __b3 @@ -7723,7 +7723,7 @@ __start: { // [4] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [5] call main - // [16] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [16] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [6] return @@ -7796,7 +7796,7 @@ snputc: { // main main: { // sprintf(BUF, "hello world! ") - // [17] call snprintf_init -- call_phi_near + // [17] call snprintf_init jsr snprintf_init // [18] phi from main to main::@1 [phi:main->main::@1] // main::@1 @@ -7808,7 +7808,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -7826,7 +7826,7 @@ main: { // print(BUF) // [23] call print // [80] phi from main::@2 to print [phi:main::@2->print] - // [80] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- call_phi_near + // [80] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- pbuz1=pbuc1 lda #<$400 sta.z screen lda #>$400 @@ -7835,7 +7835,7 @@ main: { // [24] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // sprintf(BUF, "hello %s%c ", "world", '!') - // [25] call snprintf_init -- call_phi_near + // [25] call snprintf_init jsr snprintf_init // [26] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 @@ -7847,7 +7847,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -7857,7 +7857,7 @@ main: { // main::@5 // sprintf(BUF, "hello %s%c ", "world", '!') // [29] call printf_string - // [87] phi from main::@5 to printf_string [phi:main::@5->printf_string] -- call_phi_near + // [87] phi from main::@5 to printf_string [phi:main::@5->printf_string] jsr printf_string // main::@6 // sprintf(BUF, "hello %s%c ", "world", '!') @@ -7875,7 +7875,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -7893,12 +7893,12 @@ main: { // print(BUF) // [37] call print // [80] phi from main::@7 to print [phi:main::@7->print] - // [80] phi screen#25 = screen#1 [phi:main::@7->print#0] -- call_phi_near + // [80] phi screen#25 = screen#1 [phi:main::@7->print#0] -- register_copy jsr print // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 // sprintf(BUF, "hello %d+%x! ", 3,11) - // [39] call snprintf_init -- call_phi_near + // [39] call snprintf_init jsr snprintf_init // [40] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 @@ -7910,7 +7910,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -7919,7 +7919,7 @@ main: { // [42] phi from main::@9 to main::@10 [phi:main::@9->main::@10] // main::@10 // sprintf(BUF, "hello %d+%x! ", 3,11) - // [43] call printf_sint -- call_phi_near + // [43] call printf_sint jsr printf_sint // [44] phi from main::@10 to main::@11 [phi:main::@10->main::@11] // main::@11 @@ -7931,7 +7931,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 lda #s4 @@ -7941,7 +7941,7 @@ main: { // main::@12 // sprintf(BUF, "hello %d+%x! ", 3,11) // [47] call printf_uint - // [97] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] -- call_phi_near + // [97] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] jsr printf_uint // [48] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 @@ -7953,7 +7953,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 lda #s5 @@ -7971,12 +7971,12 @@ main: { // print(BUF) // [53] call print // [80] phi from main::@14 to print [phi:main::@14->print] - // [80] phi screen#25 = screen#1 [phi:main::@14->print#0] -- call_phi_near + // [80] phi screen#25 = screen#1 [phi:main::@14->print#0] -- register_copy jsr print // [54] phi from main::@14 to main::@15 [phi:main::@14->main::@15] // main::@15 // sprintf(BUF, "hi %ld! ", 22222222l) - // [55] call snprintf_init -- call_phi_near + // [55] call snprintf_init jsr snprintf_init // [56] phi from main::@15 to main::@16 [phi:main::@15->main::@16] // main::@16 @@ -7988,7 +7988,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 lda #s6 @@ -7997,7 +7997,7 @@ main: { // [58] phi from main::@16 to main::@17 [phi:main::@16->main::@17] // main::@17 // sprintf(BUF, "hi %ld! ", 22222222l) - // [59] call printf_slong -- call_phi_near + // [59] call printf_slong jsr printf_slong // [60] phi from main::@17 to main::@18 [phi:main::@17->main::@18] // main::@18 @@ -8009,7 +8009,7 @@ main: { sta.z printf_str.putc lda #>snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- pbuz1=pbuc1 lda #s5 @@ -8027,7 +8027,7 @@ main: { // print(BUF) // [65] call print // [80] phi from main::@19 to print [phi:main::@19->print] - // [80] phi screen#25 = screen#1 [phi:main::@19->print#0] -- call_phi_near + // [80] phi screen#25 = screen#1 [phi:main::@19->print#0] -- register_copy jsr print // main::@return // } @@ -8178,7 +8178,7 @@ printf_string: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- pbuz1=pbuc1 lda #main.str @@ -8216,7 +8216,7 @@ printf_sint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@1->utoa#1] -- call_phi_near + // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@1->utoa#1] -- vbuxx=vbuc1 ldx #DECIMAL jsr utoa // printf_sint::@2 @@ -8242,7 +8242,7 @@ printf_sint: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_sint::format_justify_left#0 [phi:printf_sint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_sint::format_min_length#0 [phi:printf_sint::@2->printf_number_buffer#5] -- call_phi_near + // [140] phi printf_number_buffer::format_min_length#3 = printf_sint::format_min_length#0 [phi:printf_sint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer // printf_sint::@return @@ -8275,7 +8275,7 @@ printf_uint: { sta.z utoa.value lda #>uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- call_phi_near + // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- vbuxx=vbuc1 ldx #HEXADECIMAL jsr utoa // printf_uint::@2 @@ -8301,7 +8301,7 @@ printf_uint: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- call_phi_near + // [140] phi printf_number_buffer::format_min_length#3 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer // printf_uint::@return @@ -8330,7 +8330,7 @@ printf_slong: { // printf_slong::@1 // ultoa(uvalue, printf_buffer.digits, format.radix) // [105] call ultoa - // [181] phi from printf_slong::@1 to ultoa [phi:printf_slong::@1->ultoa] -- call_phi_near + // [181] phi from printf_slong::@1 to ultoa [phi:printf_slong::@1->ultoa] jsr ultoa // printf_slong::@2 // printf_number_buffer(putc, printf_buffer, format) @@ -8355,7 +8355,7 @@ printf_slong: { // [140] phi printf_number_buffer::format_justify_left#10 = printf_slong::format_justify_left#0 [phi:printf_slong::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_slong::format_min_length#0 [phi:printf_slong::@2->printf_number_buffer#5] -- call_phi_near + // [140] phi printf_number_buffer::format_min_length#3 = printf_slong::format_min_length#0 [phi:printf_slong::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer // printf_slong::@return @@ -8554,7 +8554,7 @@ utoa: { // [134] utoa_append::value#0 = utoa::value#3 // [135] utoa_append::sub#0 = utoa::digit_value#0 // [136] call utoa_append - // [202] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] -- call_phi_near + // [202] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] jsr utoa_append // utoa_append(buffer++, value, digit_value) // [137] utoa_append::return#0 = utoa_append::value#2 @@ -8594,7 +8594,7 @@ printf_number_buffer: { // printf_number_buffer::@6 // strlen(buffer.digits) // [143] call strlen - // [209] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] -- call_phi_near + // [209] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] jsr strlen // strlen(buffer.digits) // [144] strlen::return#2 = strlen::len#2 @@ -8665,7 +8665,7 @@ printf_number_buffer: { // [215] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- call_phi_near + // [215] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy jsr printf_padding // printf_number_buffer::@2 __b2: @@ -8706,7 +8706,7 @@ printf_number_buffer: { // [215] phi printf_padding::pad#7 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- call_phi_near + // [215] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy jsr printf_padding // printf_number_buffer::@4 __b4: @@ -8718,7 +8718,7 @@ printf_number_buffer: { // printf_number_buffer::@11 // strupr(buffer.digits) // [171] call strupr - // [223] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] -- call_phi_near + // [223] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] jsr strupr // printf_number_buffer::@5 __b5: @@ -8727,7 +8727,7 @@ printf_number_buffer: { // [173] call printf_str // [71] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] // [71] phi printf_str::putc#12 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [71] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- call_phi_near + // [71] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -8761,7 +8761,7 @@ printf_number_buffer: { // [215] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- call_phi_near + // [215] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy jsr printf_padding // printf_number_buffer::@return __breturn: @@ -8897,7 +8897,7 @@ ultoa: { // [196] ultoa_append::value#0 = ultoa::value#2 // [197] ultoa_append::sub#0 = ultoa::digit_value#0 // [198] call ultoa_append - // [233] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] -- call_phi_near + // [233] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] jsr ultoa_append // ultoa_append(buffer++, value, digit_value) // [199] ultoa_append::return#0 = ultoa_append::value#2 @@ -9099,7 +9099,7 @@ strupr: { // [227] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [228] call toupper -- call_phi_near + // [228] call toupper jsr toupper // [229] toupper::return#3 = toupper::return#2 // strupr::@3 diff --git a/src/test/ref/printmsg.log b/src/test/ref/printmsg.log index abad22ec3..292681b07 100644 --- a/src/test/ref/printmsg.log +++ b/src/test/ref/printmsg.log @@ -531,7 +531,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [13] phi print_str::str#7 = msg [phi:main->print_str#1] -- call_phi_near + // [13] phi print_str::str#7 = msg [phi:main->print_str#1] -- pbuz1=pbuc1 lda #msg @@ -545,7 +545,7 @@ main: { // [3] call print_ln // [20] phi from main::@1 to print_ln [phi:main::@1->print_ln] print_ln_from___b1: - // [20] phi print_line_cursor#18 = print_screen#0 [phi:main::@1->print_ln#0] -- call_phi_near + // [20] phi print_line_cursor#18 = print_screen#0 [phi:main::@1->print_ln#0] -- pbuz1=pbuc1 lda #print_screen @@ -563,7 +563,7 @@ main: { // [13] phi from main::@2 to print_str [phi:main::@2->print_str] print_str_from___b2: // [13] phi print_char_cursor#36 = print_char_cursor#37 [phi:main::@2->print_str#0] -- register_copy - // [13] phi print_str::str#7 = msg2 [phi:main::@2->print_str#1] -- call_phi_near + // [13] phi print_str::str#7 = msg2 [phi:main::@2->print_str#1] -- pbuz1=pbuc1 lda #msg2 @@ -577,7 +577,7 @@ main: { // [7] call print_ln // [20] phi from main::@3 to print_ln [phi:main::@3->print_ln] print_ln_from___b3: - // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@3->print_ln#0] -- call_phi_near + // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@3->print_ln#0] -- register_copy jsr print_ln jmp __b4 // main::@4 @@ -591,7 +591,7 @@ main: { // [13] phi from main::@4 to print_str [phi:main::@4->print_str] print_str_from___b4: // [13] phi print_char_cursor#36 = print_char_cursor#38 [phi:main::@4->print_str#0] -- register_copy - // [13] phi print_str::str#7 = msg3 [phi:main::@4->print_str#1] -- call_phi_near + // [13] phi print_str::str#7 = msg3 [phi:main::@4->print_str#1] -- pbuz1=pbuc1 lda #msg3 @@ -605,7 +605,7 @@ main: { // [11] call print_ln // [20] phi from main::@5 to print_ln [phi:main::@5->print_ln] print_ln_from___b5: - // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@5->print_ln#0] -- call_phi_near + // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@5->print_ln#0] -- register_copy jsr print_ln jmp __breturn // main::@return @@ -641,7 +641,7 @@ print_str: { // [17] print_char::ch#0 = *print_str::str#4 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [18] call print_char -- call_phi_near + // [18] call print_char jsr print_char jmp __b3 // print_str::@3 @@ -825,7 +825,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [13] phi print_str::str#7 = msg [phi:main->print_str#1] -- call_phi_near + // [13] phi print_str::str#7 = msg [phi:main->print_str#1] -- pbuz1=pbuc1 lda #msg @@ -836,7 +836,7 @@ main: { // print_ln() // [3] call print_ln // [20] phi from main::@1 to print_ln [phi:main::@1->print_ln] - // [20] phi print_line_cursor#18 = print_screen#0 [phi:main::@1->print_ln#0] -- call_phi_near + // [20] phi print_line_cursor#18 = print_screen#0 [phi:main::@1->print_ln#0] -- pbuz1=pbuc1 lda #print_screen @@ -852,7 +852,7 @@ main: { // [5] call print_str // [13] phi from main::@2 to print_str [phi:main::@2->print_str] // [13] phi print_char_cursor#36 = print_char_cursor#37 [phi:main::@2->print_str#0] -- register_copy - // [13] phi print_str::str#7 = msg2 [phi:main::@2->print_str#1] -- call_phi_near + // [13] phi print_str::str#7 = msg2 [phi:main::@2->print_str#1] -- pbuz1=pbuc1 lda #msg2 @@ -863,7 +863,7 @@ main: { // print_ln() // [7] call print_ln // [20] phi from main::@3 to print_ln [phi:main::@3->print_ln] - // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@3->print_ln#0] -- call_phi_near + // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@3->print_ln#0] -- register_copy jsr print_ln // main::@4 // [8] print_char_cursor#38 = print_line_cursor#0 -- pbuz1=pbuz2 @@ -875,7 +875,7 @@ main: { // [9] call print_str // [13] phi from main::@4 to print_str [phi:main::@4->print_str] // [13] phi print_char_cursor#36 = print_char_cursor#38 [phi:main::@4->print_str#0] -- register_copy - // [13] phi print_str::str#7 = msg3 [phi:main::@4->print_str#1] -- call_phi_near + // [13] phi print_str::str#7 = msg3 [phi:main::@4->print_str#1] -- pbuz1=pbuc1 lda #msg3 @@ -886,7 +886,7 @@ main: { // print_ln() // [11] call print_ln // [20] phi from main::@5 to print_ln [phi:main::@5->print_ln] - // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@5->print_ln#0] -- call_phi_near + // [20] phi print_line_cursor#18 = print_line_cursor#0 [phi:main::@5->print_ln#0] -- register_copy jsr print_ln // main::@return // } @@ -919,7 +919,7 @@ print_str: { // [17] print_char::ch#0 = *print_str::str#4 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [18] call print_char -- call_phi_near + // [18] call print_char jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/problem-ma-var-overwrite.log b/src/test/ref/problem-ma-var-overwrite.log index 5e3db2880..d18329c7a 100644 --- a/src/test/ref/problem-ma-var-overwrite.log +++ b/src/test/ref/problem-ma-var-overwrite.log @@ -252,7 +252,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -267,7 +267,7 @@ main: { sta.z test.videoMem lda.z h1+1 sta.z test.videoMem+1 - // [6] call test -- call_phi_near + // [6] call test jsr test jmp __breturn // main::@return @@ -396,7 +396,7 @@ __start: { sta.z h1+1 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return @@ -410,7 +410,7 @@ main: { sta.z test.videoMem lda.z h1+1 sta.z test.videoMem+1 - // [6] call test -- call_phi_near + // [6] call test jsr test // main::@return // } diff --git a/src/test/ref/problem-negate-const.log b/src/test/ref/problem-negate-const.log index 95d7df45e..31fdf120c 100644 --- a/src/test/ref/problem-negate-const.log +++ b/src/test/ref/problem-negate-const.log @@ -145,7 +145,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call printneg -- call_phi_near + // [1] call printneg jsr printneg jmp __breturn // main::@return @@ -204,7 +204,7 @@ Score: 24 // main main: { // printneg(-4) - // [1] call printneg -- call_phi_near + // [1] call printneg jsr printneg // main::@return // } diff --git a/src/test/ref/problem-struct-inline-parameter-1.log b/src/test/ref/problem-struct-inline-parameter-1.log index 083face16..288ce050f 100644 --- a/src/test/ref/problem-struct-inline-parameter-1.log +++ b/src/test/ref/problem-struct-inline-parameter-1.log @@ -224,7 +224,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call print -- call_phi_near + // [1] call print jsr print jmp __breturn // main::@return @@ -298,7 +298,7 @@ Score: 36 // main main: { // print('c', { '-', '-' } ) - // [1] call print -- call_phi_near + // [1] call print jsr print // main::@return // } diff --git a/src/test/ref/problem-struct-inline-parameter.log b/src/test/ref/problem-struct-inline-parameter.log index 9c2be3a86..90545c237 100644 --- a/src/test/ref/problem-struct-inline-parameter.log +++ b/src/test/ref/problem-struct-inline-parameter.log @@ -223,7 +223,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call print -- call_phi_near + // [1] call print jsr print jmp __breturn // main::@return @@ -297,7 +297,7 @@ Score: 36 // main main: { // print('c', (struct format){ '-', '-' } ) - // [1] call print -- call_phi_near + // [1] call print jsr print // main::@return // } diff --git a/src/test/ref/procedure-callingconvention-stack-4.log b/src/test/ref/procedure-callingconvention-stack-4.log index b45d2c468..b07b5e8a0 100644 --- a/src/test/ref/procedure-callingconvention-stack-4.log +++ b/src/test/ref/procedure-callingconvention-stack-4.log @@ -328,7 +328,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [11] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -503,7 +503,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [11] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [11] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return diff --git a/src/test/ref/procedure-callingconvention-stack-5.log b/src/test/ref/procedure-callingconvention-stack-5.log index dd9548762..31ccc9f71 100644 --- a/src/test/ref/procedure-callingconvention-stack-5.log +++ b/src/test/ref/procedure-callingconvention-stack-5.log @@ -245,7 +245,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -387,7 +387,7 @@ __start: { sta.z current+1 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/procedure-declare-10.log b/src/test/ref/procedure-declare-10.log index 3218ad121..5f3d5ca17 100644 --- a/src/test/ref/procedure-declare-10.log +++ b/src/test/ref/procedure-declare-10.log @@ -263,7 +263,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call memcpy - // [3] phi from main to memcpy [phi:main->memcpy] -- call_phi_near + // [3] phi from main to memcpy [phi:main->memcpy] memcpy_from_main: jsr memcpy jmp __breturn @@ -400,7 +400,7 @@ Score: 783 main: { // memcpy(SCREEN, STRING, sizeof(STRING)) // [1] call memcpy - // [3] phi from main to memcpy [phi:main->memcpy] -- call_phi_near + // [3] phi from main to memcpy [phi:main->memcpy] jsr memcpy // main::@return // } diff --git a/src/test/ref/procedure-declare-2.log b/src/test/ref/procedure-declare-2.log index 47974ca58..21d1bd4ac 100644 --- a/src/test/ref/procedure-declare-2.log +++ b/src/test/ref/procedure-declare-2.log @@ -257,7 +257,7 @@ main: { sum_from_main: // [10] phi sum::b#2 = 1 [phi:main->sum#0] -- vbuaa=vbuc1 lda #1 - // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- call_phi_near + // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 ldx #'a' jsr sum // [2] sum::return#2 = sum::return#0 @@ -272,7 +272,7 @@ main: { sum_from___b1: // [10] phi sum::b#2 = 2 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- call_phi_near + // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- vbuxx=vbuc1 ldx #'b' jsr sum // [6] sum::return#3 = sum::return#0 @@ -370,7 +370,7 @@ main: { // [10] phi from main to sum [phi:main->sum] // [10] phi sum::b#2 = 1 [phi:main->sum#0] -- vbuaa=vbuc1 lda #1 - // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- call_phi_near + // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 ldx #'a' jsr sum // sum('a', 1) @@ -385,7 +385,7 @@ main: { // [10] phi from main::@1 to sum [phi:main::@1->sum] // [10] phi sum::b#2 = 2 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- call_phi_near + // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- vbuxx=vbuc1 ldx #'b' jsr sum // sum('b', 2) diff --git a/src/test/ref/procedure-declare-3.log b/src/test/ref/procedure-declare-3.log index b5e6d9a40..bf558df5c 100644 --- a/src/test/ref/procedure-declare-3.log +++ b/src/test/ref/procedure-declare-3.log @@ -257,7 +257,7 @@ main: { sum_from_main: // [10] phi sum::b#2 = 1 [phi:main->sum#0] -- vbuaa=vbuc1 lda #1 - // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- call_phi_near + // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 ldx #'a' jsr sum // [2] sum::return#2 = sum::return#0 @@ -272,7 +272,7 @@ main: { sum_from___b1: // [10] phi sum::b#2 = 2 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- call_phi_near + // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- vbuxx=vbuc1 ldx #'b' jsr sum // [6] sum::return#3 = sum::return#0 @@ -370,7 +370,7 @@ main: { // [10] phi from main to sum [phi:main->sum] // [10] phi sum::b#2 = 1 [phi:main->sum#0] -- vbuaa=vbuc1 lda #1 - // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- call_phi_near + // [10] phi sum::a#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 ldx #'a' jsr sum // sum('a', 1) @@ -385,7 +385,7 @@ main: { // [10] phi from main::@1 to sum [phi:main::@1->sum] // [10] phi sum::b#2 = 2 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- call_phi_near + // [10] phi sum::a#2 = 'b' [phi:main::@1->sum#1] -- vbuxx=vbuc1 ldx #'b' jsr sum // sum('b', 2) diff --git a/src/test/ref/procedure-declare-4.log b/src/test/ref/procedure-declare-4.log index 91a28e0c1..15d26e0d7 100644 --- a/src/test/ref/procedure-declare-4.log +++ b/src/test/ref/procedure-declare-4.log @@ -257,7 +257,7 @@ main: { sum_from_main: // [10] phi sum::w#2 = 1 [phi:main->sum#0] -- vbuaa=vbuc1 lda #1 - // [10] phi sum::q#2 = 'a' [phi:main->sum#1] -- call_phi_near + // [10] phi sum::q#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 ldx #'a' jsr sum // [2] sum::return#2 = sum::return#0 @@ -272,7 +272,7 @@ main: { sum_from___b1: // [10] phi sum::w#2 = 2 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::q#2 = 'b' [phi:main::@1->sum#1] -- call_phi_near + // [10] phi sum::q#2 = 'b' [phi:main::@1->sum#1] -- vbuxx=vbuc1 ldx #'b' jsr sum // [6] sum::return#3 = sum::return#0 @@ -371,7 +371,7 @@ main: { // [10] phi from main to sum [phi:main->sum] // [10] phi sum::w#2 = 1 [phi:main->sum#0] -- vbuaa=vbuc1 lda #1 - // [10] phi sum::q#2 = 'a' [phi:main->sum#1] -- call_phi_near + // [10] phi sum::q#2 = 'a' [phi:main->sum#1] -- vbuxx=vbuc1 ldx #'a' jsr sum // sum('a', 1) @@ -386,7 +386,7 @@ main: { // [10] phi from main::@1 to sum [phi:main::@1->sum] // [10] phi sum::w#2 = 2 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #2 - // [10] phi sum::q#2 = 'b' [phi:main::@1->sum#1] -- call_phi_near + // [10] phi sum::q#2 = 'b' [phi:main::@1->sum#1] -- vbuxx=vbuc1 ldx #'b' jsr sum // sum('b', 2) diff --git a/src/test/ref/procedure-declare-5.log b/src/test/ref/procedure-declare-5.log index cd4778497..b7f393e78 100644 --- a/src/test/ref/procedure-declare-5.log +++ b/src/test/ref/procedure-declare-5.log @@ -150,7 +150,7 @@ ASSEMBLER BEFORE OPTIMIZATION main: { .label SCREEN = $400 // [1] call f - // [4] phi from main to f [phi:main->f] -- call_phi_near + // [4] phi from main to f [phi:main->f] f_from_main: jsr f jmp __b1 @@ -217,7 +217,7 @@ main: { .label SCREEN = $400 // f() // [1] call f - // [4] phi from main to f [phi:main->f] -- call_phi_near + // [4] phi from main to f [phi:main->f] jsr f // main::@1 // SCREEN[0] = f() diff --git a/src/test/ref/processor-port-test.log b/src/test/ref/processor-port-test.log index 5e5e887b4..77456ef24 100644 --- a/src/test/ref/processor-port-test.log +++ b/src/test/ref/processor-port-test.log @@ -2507,7 +2507,7 @@ main: { lda #$dd sta IO_RAM // [9] call print_cls - // [64] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [64] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [10] phi from main to main::@2 [phi:main->main::@2] @@ -2523,7 +2523,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [67] phi print_str::str#13 = main::str [phi:main::@2->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = main::str [phi:main::@2->print_str#1] -- pbuz1=pbuc1 lda #str @@ -2538,7 +2538,7 @@ main: { // [74] phi from main::@3 to print_ln [phi:main::@3->print_ln] print_ln_from___b3: // [74] phi print_char_cursor#118 = print_char_cursor#1 [phi:main::@3->print_ln#0] -- register_copy - // [74] phi print_line_cursor#69 = print_screen#0 [phi:main::@3->print_ln#1] -- call_phi_near + // [74] phi print_line_cursor#69 = print_screen#0 [phi:main::@3->print_ln#1] -- pbuz1=pbuc1 lda #print_screen @@ -2558,7 +2558,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_RAM_ALL [phi:main::@4->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_RAM_ALL sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@4->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@4->testProcport#2] -- vbuxx=vbuc1 ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [16] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -2575,7 +2575,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_RAM_IO [phi:main::@5->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_RAM_IO sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@5->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@5->testProcport#2] -- vbuxx=vbuc1 ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [18] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -2592,7 +2592,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_RAM_CHARROM [phi:main::@6->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_RAM_CHARROM sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@6->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@6->testProcport#2] -- vbuxx=vbuc1 ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [20] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -2609,7 +2609,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_KERNEL_IO [phi:main::@7->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_KERNEL_IO sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@7->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@7->testProcport#2] -- vbuxx=vbuc1 ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [22] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -2626,7 +2626,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_BASIC_KERNEL_IO [phi:main::@8->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_BASIC_KERNEL_IO sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@8->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@8->testProcport#2] -- vbuxx=vbuc1 ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [24] phi from main::@8 to main::@9 [phi:main::@8->main::@9] @@ -2643,7 +2643,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@9->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = 0 [phi:main::@9->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = 0 [phi:main::@9->testProcport#2] -- vbuxx=vbuc1 ldx #0 jsr testProcport // [26] phi from main::@9 to main::@10 [phi:main::@9->main::@10] @@ -2660,7 +2660,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@10->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@10->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@10->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [28] phi from main::@10 to main::@11 [phi:main::@10->main::@11] @@ -2677,7 +2677,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@11->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@11->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@11->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [30] phi from main::@11 to main::@12 [phi:main::@11->main::@12] @@ -2694,7 +2694,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@12->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@12->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@12->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [32] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -2711,7 +2711,7 @@ main: { // [79] phi testProcport::port#23 = $55 [phi:main::@13->testProcport#1] -- vbuz1=vbuc1 lda #$55 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@13->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@13->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [34] phi from main::@13 to main::@14 [phi:main::@13->main::@14] @@ -2728,7 +2728,7 @@ main: { // [79] phi testProcport::port#23 = $aa [phi:main::@14->testProcport#1] -- vbuz1=vbuc1 lda #$aa sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@14->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@14->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [36] phi from main::@14 to main::@15 [phi:main::@14->main::@15] @@ -2745,7 +2745,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@15->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@15->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@15->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [38] phi from main::@15 to main::@16 [phi:main::@15->main::@16] @@ -2762,7 +2762,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@16->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $55 [phi:main::@16->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $55 [phi:main::@16->testProcport#2] -- vbuxx=vbuc1 ldx #$55 jsr testProcport // [40] phi from main::@16 to main::@17 [phi:main::@16->main::@17] @@ -2779,7 +2779,7 @@ main: { // [79] phi testProcport::port#23 = $55 [phi:main::@17->testProcport#1] -- vbuz1=vbuc1 lda #$55 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $55 [phi:main::@17->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $55 [phi:main::@17->testProcport#2] -- vbuxx=vbuc1 ldx #$55 jsr testProcport // [42] phi from main::@17 to main::@18 [phi:main::@17->main::@18] @@ -2796,7 +2796,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@18->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $55 [phi:main::@18->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $55 [phi:main::@18->testProcport#2] -- vbuxx=vbuc1 ldx #$55 jsr testProcport // [44] phi from main::@18 to main::@19 [phi:main::@18->main::@19] @@ -2813,7 +2813,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@19->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $aa [phi:main::@19->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $aa [phi:main::@19->testProcport#2] -- vbuxx=vbuc1 ldx #$aa jsr testProcport // [46] phi from main::@19 to main::@20 [phi:main::@19->main::@20] @@ -2830,7 +2830,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@20->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $aa [phi:main::@20->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $aa [phi:main::@20->testProcport#2] -- vbuxx=vbuc1 ldx #$aa jsr testProcport // [48] phi from main::@20 to main::@21 [phi:main::@20->main::@21] @@ -2847,7 +2847,7 @@ main: { // [79] phi testProcport::port#23 = $aa [phi:main::@21->testProcport#1] -- vbuz1=vbuc1 lda #$aa sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $aa [phi:main::@21->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $aa [phi:main::@21->testProcport#2] -- vbuxx=vbuc1 ldx #$aa jsr testProcport // [50] phi from main::@21 to main::@22 [phi:main::@21->main::@22] @@ -2864,7 +2864,7 @@ main: { // [79] phi testProcport::port#23 = $d0 [phi:main::@22->testProcport#1] -- vbuz1=vbuc1 lda #$d0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@22->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@22->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [52] phi from main::@22 to main::@23 [phi:main::@22->main::@23] @@ -2881,7 +2881,7 @@ main: { // [79] phi testProcport::port#23 = $55 [phi:main::@23->testProcport#1] -- vbuz1=vbuc1 lda #$55 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@23->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@23->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [54] phi from main::@23 to main::@24 [phi:main::@23->main::@24] @@ -2898,7 +2898,7 @@ main: { // [79] phi testProcport::port#23 = $15 [phi:main::@24->testProcport#1] -- vbuz1=vbuc1 lda #$15 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $17 [phi:main::@24->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $17 [phi:main::@24->testProcport#2] -- vbuxx=vbuc1 ldx #$17 jsr testProcport // [56] phi from main::@24 to main::@25 [phi:main::@24->main::@25] @@ -2915,7 +2915,7 @@ main: { // [79] phi testProcport::port#23 = $15 [phi:main::@25->testProcport#1] -- vbuz1=vbuc1 lda #$15 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $17 [phi:main::@25->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $17 [phi:main::@25->testProcport#2] -- vbuxx=vbuc1 ldx #$17 jsr testProcport // [58] phi from main::@25 to main::@26 [phi:main::@25->main::@26] @@ -2932,7 +2932,7 @@ main: { // [79] phi testProcport::port#23 = $17 [phi:main::@26->testProcport#1] -- vbuz1=vbuc1 lda #$17 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $17 [phi:main::@26->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $17 [phi:main::@26->testProcport#2] -- vbuxx=vbuc1 ldx #$17 jsr testProcport jmp __b27 @@ -2963,7 +2963,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [65] call memset - // [120] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [120] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -3004,7 +3004,7 @@ print_str: { // [126] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [126] phi print_char_cursor#66 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [126] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [126] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char jmp __b3 // print_str::@3 @@ -3077,7 +3077,7 @@ testProcport: { // [67] phi from testProcport to print_str [phi:testProcport->print_str] print_str_from_testProcport: // [67] phi print_char_cursor#124 = print_char_cursor#126 [phi:testProcport->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str [phi:testProcport->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str [phi:testProcport->print_str#1] -- pbuz1=pbuc1 lda #str @@ -3090,7 +3090,7 @@ testProcport: { // [88] call print_uchar // [130] phi from testProcport::@1 to print_uchar [phi:testProcport::@1->print_uchar] print_uchar_from___b1: - // [130] phi print_uchar::b#8 = print_uchar::b#0 [phi:testProcport::@1->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#0 [phi:testProcport::@1->print_uchar#0] -- register_copy jsr print_uchar // [89] phi from testProcport::@1 to testProcport::@2 [phi:testProcport::@1->testProcport::@2] __b2_from___b1: @@ -3101,7 +3101,7 @@ testProcport: { // [67] phi from testProcport::@2 to print_str [phi:testProcport::@2->print_str] print_str_from___b2: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@2->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@2->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@2->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -3115,7 +3115,7 @@ testProcport: { // [92] call print_uchar // [130] phi from testProcport::@3 to print_uchar [phi:testProcport::@3->print_uchar] print_uchar_from___b3: - // [130] phi print_uchar::b#8 = print_uchar::b#1 [phi:testProcport::@3->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#1 [phi:testProcport::@3->print_uchar#0] -- register_copy jsr print_uchar // [93] phi from testProcport::@3 to testProcport::@4 [phi:testProcport::@3->testProcport::@4] __b4_from___b3: @@ -3126,7 +3126,7 @@ testProcport: { // [67] phi from testProcport::@4 to print_str [phi:testProcport::@4->print_str] print_str_from___b4: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@4->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@4->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@4->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -3140,7 +3140,7 @@ testProcport: { // [96] call print_uchar // [130] phi from testProcport::@5 to print_uchar [phi:testProcport::@5->print_uchar] print_uchar_from___b5: - // [130] phi print_uchar::b#8 = print_uchar::b#2 [phi:testProcport::@5->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#2 [phi:testProcport::@5->print_uchar#0] -- register_copy jsr print_uchar // [97] phi from testProcport::@5 to testProcport::@6 [phi:testProcport::@5->testProcport::@6] __b6_from___b5: @@ -3151,7 +3151,7 @@ testProcport: { // [67] phi from testProcport::@6 to print_str [phi:testProcport::@6->print_str] print_str_from___b6: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@6->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@6->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@6->print_str#1] -- pbuz1=pbuc1 lda #str3 @@ -3165,7 +3165,7 @@ testProcport: { // [100] call print_uchar // [130] phi from testProcport::@7 to print_uchar [phi:testProcport::@7->print_uchar] print_uchar_from___b7: - // [130] phi print_uchar::b#8 = print_uchar::b#3 [phi:testProcport::@7->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#3 [phi:testProcport::@7->print_uchar#0] -- register_copy jsr print_uchar // [101] phi from testProcport::@7 to testProcport::@8 [phi:testProcport::@7->testProcport::@8] __b8_from___b7: @@ -3176,7 +3176,7 @@ testProcport: { // [67] phi from testProcport::@8 to print_str [phi:testProcport::@8->print_str] print_str_from___b8: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@8->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@8->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@8->print_str#1] -- pbuz1=pbuc1 lda #str3 @@ -3190,7 +3190,7 @@ testProcport: { // [104] call print_uchar // [130] phi from testProcport::@9 to print_uchar [phi:testProcport::@9->print_uchar] print_uchar_from___b9: - // [130] phi print_uchar::b#8 = print_uchar::b#4 [phi:testProcport::@9->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#4 [phi:testProcport::@9->print_uchar#0] -- register_copy jsr print_uchar // [105] phi from testProcport::@9 to testProcport::@10 [phi:testProcport::@9->testProcport::@10] __b10_from___b9: @@ -3201,7 +3201,7 @@ testProcport: { // [67] phi from testProcport::@10 to print_str [phi:testProcport::@10->print_str] print_str_from___b10: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@10->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@10->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@10->print_str#1] -- pbuz1=pbuc1 lda #str5 @@ -3215,7 +3215,7 @@ testProcport: { // [108] call print_uchar // [130] phi from testProcport::@11 to print_uchar [phi:testProcport::@11->print_uchar] print_uchar_from___b11: - // [130] phi print_uchar::b#8 = print_uchar::b#5 [phi:testProcport::@11->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#5 [phi:testProcport::@11->print_uchar#0] -- register_copy jsr print_uchar // [109] phi from testProcport::@11 to testProcport::@12 [phi:testProcport::@11->testProcport::@12] __b12_from___b11: @@ -3226,7 +3226,7 @@ testProcport: { // [67] phi from testProcport::@12 to print_str [phi:testProcport::@12->print_str] print_str_from___b12: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@12->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@12->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@12->print_str#1] -- pbuz1=pbuc1 lda #str5 @@ -3240,7 +3240,7 @@ testProcport: { // [112] call print_uchar // [130] phi from testProcport::@13 to print_uchar [phi:testProcport::@13->print_uchar] print_uchar_from___b13: - // [130] phi print_uchar::b#8 = print_uchar::b#6 [phi:testProcport::@13->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#6 [phi:testProcport::@13->print_uchar#0] -- register_copy jsr print_uchar // [113] phi from testProcport::@13 to testProcport::@14 [phi:testProcport::@13->testProcport::@14] __b14_from___b13: @@ -3251,7 +3251,7 @@ testProcport: { // [67] phi from testProcport::@14 to print_str [phi:testProcport::@14->print_str] print_str_from___b14: // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@14->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@14->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@14->print_str#1] -- pbuz1=pbuc1 lda #str5 @@ -3265,7 +3265,7 @@ testProcport: { // [116] call print_uchar // [130] phi from testProcport::@15 to print_uchar [phi:testProcport::@15->print_uchar] print_uchar_from___b15: - // [130] phi print_uchar::b#8 = print_uchar::b#7 [phi:testProcport::@15->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#7 [phi:testProcport::@15->print_uchar#0] -- register_copy jsr print_uchar // [117] phi from testProcport::@15 to testProcport::@16 [phi:testProcport::@15->testProcport::@16] __b16_from___b15: @@ -3276,7 +3276,7 @@ testProcport: { // [74] phi from testProcport::@16 to print_ln [phi:testProcport::@16->print_ln] print_ln_from___b16: // [74] phi print_char_cursor#118 = print_char_cursor#67 [phi:testProcport::@16->print_ln#0] -- register_copy - // [74] phi print_line_cursor#69 = print_line_cursor#0 [phi:testProcport::@16->print_ln#1] -- call_phi_near + // [74] phi print_line_cursor#69 = print_line_cursor#0 [phi:testProcport::@16->print_ln#1] -- register_copy jsr print_ln jmp __breturn // testProcport::@return @@ -3377,7 +3377,7 @@ print_uchar: { // [126] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [126] phi print_char_cursor#66 = print_char_cursor#1 [phi:print_uchar->print_char#0] -- register_copy - // [126] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near + // [126] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -3391,7 +3391,7 @@ print_uchar: { // [126] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [126] phi print_char_cursor#66 = print_char_cursor#67 [phi:print_uchar::@1->print_char#0] -- register_copy - // [126] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [126] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -3795,7 +3795,7 @@ main: { sta IO_RAM // print_cls() // [9] call print_cls - // [64] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [64] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [10] phi from main to main::@2 [phi:main->main::@2] // main::@2 @@ -3807,7 +3807,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [67] phi print_str::str#13 = main::str [phi:main::@2->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = main::str [phi:main::@2->print_str#1] -- pbuz1=pbuc1 lda #str @@ -3819,7 +3819,7 @@ main: { // [13] call print_ln // [74] phi from main::@3 to print_ln [phi:main::@3->print_ln] // [74] phi print_char_cursor#118 = print_char_cursor#1 [phi:main::@3->print_ln#0] -- register_copy - // [74] phi print_line_cursor#69 = print_screen#0 [phi:main::@3->print_ln#1] -- call_phi_near + // [74] phi print_line_cursor#69 = print_screen#0 [phi:main::@3->print_ln#1] -- pbuz1=pbuc1 lda #print_screen @@ -3836,7 +3836,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_RAM_ALL [phi:main::@4->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_RAM_ALL sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@4->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@4->testProcport#2] -- vbuxx=vbuc1 ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [16] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -3850,7 +3850,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_RAM_IO [phi:main::@5->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_RAM_IO sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@5->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@5->testProcport#2] -- vbuxx=vbuc1 ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [18] phi from main::@5 to main::@6 [phi:main::@5->main::@6] @@ -3864,7 +3864,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_RAM_CHARROM [phi:main::@6->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_RAM_CHARROM sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@6->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@6->testProcport#2] -- vbuxx=vbuc1 ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [20] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -3878,7 +3878,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_KERNEL_IO [phi:main::@7->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_KERNEL_IO sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@7->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@7->testProcport#2] -- vbuxx=vbuc1 ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [22] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -3892,7 +3892,7 @@ main: { // [79] phi testProcport::port#23 = PROCPORT_BASIC_KERNEL_IO [phi:main::@8->testProcport#1] -- vbuz1=vbuc1 lda #PROCPORT_BASIC_KERNEL_IO sta.z testProcport.port - // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@8->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = PROCPORT_DDR_MEMORY_MASK [phi:main::@8->testProcport#2] -- vbuxx=vbuc1 ldx #PROCPORT_DDR_MEMORY_MASK jsr testProcport // [24] phi from main::@8 to main::@9 [phi:main::@8->main::@9] @@ -3905,7 +3905,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = 0 [phi:main::@9->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = 0 [phi:main::@9->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = 0 [phi:main::@9->testProcport#2] -- vbuxx=vbuc1 tax jsr testProcport // [26] phi from main::@9 to main::@10 [phi:main::@9->main::@10] @@ -3918,7 +3918,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = 0 [phi:main::@10->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@10->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@10->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [28] phi from main::@10 to main::@11 [phi:main::@10->main::@11] @@ -3932,7 +3932,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@11->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@11->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@11->testProcport#2] -- vbuxx=vbuc1 tax jsr testProcport // [30] phi from main::@11 to main::@12 [phi:main::@11->main::@12] @@ -3946,7 +3946,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@12->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@12->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@12->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [32] phi from main::@12 to main::@13 [phi:main::@12->main::@13] @@ -3960,7 +3960,7 @@ main: { // [79] phi testProcport::port#23 = $55 [phi:main::@13->testProcport#1] -- vbuz1=vbuc1 lda #$55 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@13->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@13->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [34] phi from main::@13 to main::@14 [phi:main::@13->main::@14] @@ -3974,7 +3974,7 @@ main: { // [79] phi testProcport::port#23 = $aa [phi:main::@14->testProcport#1] -- vbuz1=vbuc1 lda #$aa sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@14->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@14->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [36] phi from main::@14 to main::@15 [phi:main::@14->main::@15] @@ -3987,7 +3987,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = $ff [phi:main::@15->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@15->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@15->testProcport#2] -- vbuxx=vbuc1 tax jsr testProcport // [38] phi from main::@15 to main::@16 [phi:main::@15->main::@16] @@ -4001,7 +4001,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@16->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $55 [phi:main::@16->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $55 [phi:main::@16->testProcport#2] -- vbuxx=vbuc1 ldx #$55 jsr testProcport // [40] phi from main::@16 to main::@17 [phi:main::@16->main::@17] @@ -4014,7 +4014,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = $55 [phi:main::@17->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $55 [phi:main::@17->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $55 [phi:main::@17->testProcport#2] -- vbuxx=vbuc1 tax jsr testProcport // [42] phi from main::@17 to main::@18 [phi:main::@17->main::@18] @@ -4028,7 +4028,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@18->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $55 [phi:main::@18->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $55 [phi:main::@18->testProcport#2] -- vbuxx=vbuc1 ldx #$55 jsr testProcport // [44] phi from main::@18 to main::@19 [phi:main::@18->main::@19] @@ -4042,7 +4042,7 @@ main: { // [79] phi testProcport::port#23 = 0 [phi:main::@19->testProcport#1] -- vbuz1=vbuc1 lda #0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $aa [phi:main::@19->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $aa [phi:main::@19->testProcport#2] -- vbuxx=vbuc1 ldx #$aa jsr testProcport // [46] phi from main::@19 to main::@20 [phi:main::@19->main::@20] @@ -4056,7 +4056,7 @@ main: { // [79] phi testProcport::port#23 = $ff [phi:main::@20->testProcport#1] -- vbuz1=vbuc1 lda #$ff sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $aa [phi:main::@20->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $aa [phi:main::@20->testProcport#2] -- vbuxx=vbuc1 ldx #$aa jsr testProcport // [48] phi from main::@20 to main::@21 [phi:main::@20->main::@21] @@ -4069,7 +4069,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = $aa [phi:main::@21->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $aa [phi:main::@21->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $aa [phi:main::@21->testProcport#2] -- vbuxx=vbuc1 tax jsr testProcport // [50] phi from main::@21 to main::@22 [phi:main::@21->main::@22] @@ -4083,7 +4083,7 @@ main: { // [79] phi testProcport::port#23 = $d0 [phi:main::@22->testProcport#1] -- vbuz1=vbuc1 lda #$d0 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@22->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@22->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [52] phi from main::@22 to main::@23 [phi:main::@22->main::@23] @@ -4096,7 +4096,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = $55 [phi:main::@23->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $ff [phi:main::@23->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $ff [phi:main::@23->testProcport#2] -- vbuxx=vbuc1 ldx #$ff jsr testProcport // [54] phi from main::@23 to main::@24 [phi:main::@23->main::@24] @@ -4109,7 +4109,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = $15 [phi:main::@24->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $17 [phi:main::@24->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $17 [phi:main::@24->testProcport#2] -- vbuxx=vbuc1 ldx #$17 jsr testProcport // [56] phi from main::@24 to main::@25 [phi:main::@24->main::@25] @@ -4123,7 +4123,7 @@ main: { // [79] phi testProcport::port#23 = $15 [phi:main::@25->testProcport#1] -- vbuz1=vbuc1 lda #$15 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $17 [phi:main::@25->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $17 [phi:main::@25->testProcport#2] -- vbuxx=vbuc1 ldx #$17 jsr testProcport // [58] phi from main::@25 to main::@26 [phi:main::@25->main::@26] @@ -4136,7 +4136,7 @@ main: { sta.z testProcport.ddr2 // [79] phi testProcport::port#23 = $17 [phi:main::@26->testProcport#1] -- vbuz1=vbuc1 sta.z testProcport.port - // [79] phi testProcport::ddr#23 = $17 [phi:main::@26->testProcport#2] -- call_phi_near + // [79] phi testProcport::ddr#23 = $17 [phi:main::@26->testProcport#2] -- vbuxx=vbuc1 tax jsr testProcport // main::@27 @@ -4169,7 +4169,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [65] call memset - // [120] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [120] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -4205,7 +4205,7 @@ print_str: { // [72] call print_char // [126] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [126] phi print_char_cursor#66 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [126] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [126] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char // print_str::@3 // print_char(*(str++)); @@ -4280,7 +4280,7 @@ testProcport: { // [86] call print_str // [67] phi from testProcport to print_str [phi:testProcport->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#126 [phi:testProcport->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str [phi:testProcport->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str [phi:testProcport->print_str#1] -- pbuz1=pbuc1 lda #str @@ -4291,7 +4291,7 @@ testProcport: { // [87] print_uchar::b#0 = testProcport::ddr#23 // [88] call print_uchar // [130] phi from testProcport::@1 to print_uchar [phi:testProcport::@1->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#0 [phi:testProcport::@1->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#0 [phi:testProcport::@1->print_uchar#0] -- register_copy jsr print_uchar // [89] phi from testProcport::@1 to testProcport::@2 [phi:testProcport::@1->testProcport::@2] // testProcport::@2 @@ -4299,7 +4299,7 @@ testProcport: { // [90] call print_str // [67] phi from testProcport::@2 to print_str [phi:testProcport::@2->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@2->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@2->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@2->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -4311,7 +4311,7 @@ testProcport: { ldx.z port // [92] call print_uchar // [130] phi from testProcport::@3 to print_uchar [phi:testProcport::@3->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#1 [phi:testProcport::@3->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#1 [phi:testProcport::@3->print_uchar#0] -- register_copy jsr print_uchar // [93] phi from testProcport::@3 to testProcport::@4 [phi:testProcport::@3->testProcport::@4] // testProcport::@4 @@ -4319,7 +4319,7 @@ testProcport: { // [94] call print_str // [67] phi from testProcport::@4 to print_str [phi:testProcport::@4->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@4->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@4->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str1 [phi:testProcport::@4->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -4331,7 +4331,7 @@ testProcport: { ldx.z ddr2 // [96] call print_uchar // [130] phi from testProcport::@5 to print_uchar [phi:testProcport::@5->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#2 [phi:testProcport::@5->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#2 [phi:testProcport::@5->print_uchar#0] -- register_copy jsr print_uchar // [97] phi from testProcport::@5 to testProcport::@6 [phi:testProcport::@5->testProcport::@6] // testProcport::@6 @@ -4339,7 +4339,7 @@ testProcport: { // [98] call print_str // [67] phi from testProcport::@6 to print_str [phi:testProcport::@6->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@6->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@6->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@6->print_str#1] -- pbuz1=pbuc1 lda #str3 @@ -4351,7 +4351,7 @@ testProcport: { ldx.z PROCPORT_DDR // [100] call print_uchar // [130] phi from testProcport::@7 to print_uchar [phi:testProcport::@7->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#3 [phi:testProcport::@7->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#3 [phi:testProcport::@7->print_uchar#0] -- register_copy jsr print_uchar // [101] phi from testProcport::@7 to testProcport::@8 [phi:testProcport::@7->testProcport::@8] // testProcport::@8 @@ -4359,7 +4359,7 @@ testProcport: { // [102] call print_str // [67] phi from testProcport::@8 to print_str [phi:testProcport::@8->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@8->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@8->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str3 [phi:testProcport::@8->print_str#1] -- pbuz1=pbuc1 lda #str3 @@ -4371,7 +4371,7 @@ testProcport: { ldx.z PROCPORT // [104] call print_uchar // [130] phi from testProcport::@9 to print_uchar [phi:testProcport::@9->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#4 [phi:testProcport::@9->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#4 [phi:testProcport::@9->print_uchar#0] -- register_copy jsr print_uchar // [105] phi from testProcport::@9 to testProcport::@10 [phi:testProcport::@9->testProcport::@10] // testProcport::@10 @@ -4379,7 +4379,7 @@ testProcport: { // [106] call print_str // [67] phi from testProcport::@10 to print_str [phi:testProcport::@10->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@10->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@10->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@10->print_str#1] -- pbuz1=pbuc1 lda #str5 @@ -4391,7 +4391,7 @@ testProcport: { ldx BASIC_ROM // [108] call print_uchar // [130] phi from testProcport::@11 to print_uchar [phi:testProcport::@11->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#5 [phi:testProcport::@11->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#5 [phi:testProcport::@11->print_uchar#0] -- register_copy jsr print_uchar // [109] phi from testProcport::@11 to testProcport::@12 [phi:testProcport::@11->testProcport::@12] // testProcport::@12 @@ -4399,7 +4399,7 @@ testProcport: { // [110] call print_str // [67] phi from testProcport::@12 to print_str [phi:testProcport::@12->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@12->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@12->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@12->print_str#1] -- pbuz1=pbuc1 lda #str5 @@ -4411,7 +4411,7 @@ testProcport: { ldx IO_RAM // [112] call print_uchar // [130] phi from testProcport::@13 to print_uchar [phi:testProcport::@13->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#6 [phi:testProcport::@13->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#6 [phi:testProcport::@13->print_uchar#0] -- register_copy jsr print_uchar // [113] phi from testProcport::@13 to testProcport::@14 [phi:testProcport::@13->testProcport::@14] // testProcport::@14 @@ -4419,7 +4419,7 @@ testProcport: { // [114] call print_str // [67] phi from testProcport::@14 to print_str [phi:testProcport::@14->print_str] // [67] phi print_char_cursor#124 = print_char_cursor#67 [phi:testProcport::@14->print_str#0] -- register_copy - // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@14->print_str#1] -- call_phi_near + // [67] phi print_str::str#13 = testProcport::str5 [phi:testProcport::@14->print_str#1] -- pbuz1=pbuc1 lda #str5 @@ -4431,7 +4431,7 @@ testProcport: { ldx KERNAL_ROM // [116] call print_uchar // [130] phi from testProcport::@15 to print_uchar [phi:testProcport::@15->print_uchar] - // [130] phi print_uchar::b#8 = print_uchar::b#7 [phi:testProcport::@15->print_uchar#0] -- call_phi_near + // [130] phi print_uchar::b#8 = print_uchar::b#7 [phi:testProcport::@15->print_uchar#0] -- register_copy jsr print_uchar // [117] phi from testProcport::@15 to testProcport::@16 [phi:testProcport::@15->testProcport::@16] // testProcport::@16 @@ -4439,7 +4439,7 @@ testProcport: { // [118] call print_ln // [74] phi from testProcport::@16 to print_ln [phi:testProcport::@16->print_ln] // [74] phi print_char_cursor#118 = print_char_cursor#67 [phi:testProcport::@16->print_ln#0] -- register_copy - // [74] phi print_line_cursor#69 = print_line_cursor#0 [phi:testProcport::@16->print_ln#1] -- call_phi_near + // [74] phi print_line_cursor#69 = print_line_cursor#0 [phi:testProcport::@16->print_ln#1] -- register_copy jsr print_ln // testProcport::@return // } @@ -4540,7 +4540,7 @@ print_uchar: { // Table of hexadecimal digits // [126] phi from print_uchar to print_char [phi:print_uchar->print_char] // [126] phi print_char_cursor#66 = print_char_cursor#1 [phi:print_uchar->print_char#0] -- register_copy - // [126] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near + // [126] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -4553,7 +4553,7 @@ print_uchar: { // [136] call print_char // [126] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [126] phi print_char_cursor#66 = print_char_cursor#67 [phi:print_uchar::@1->print_char#0] -- register_copy - // [126] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [126] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/ptrptr-optimize-1.log b/src/test/ref/ptrptr-optimize-1.log index 467c93875..e4fffb39e 100644 --- a/src/test/ref/ptrptr-optimize-1.log +++ b/src/test/ref/ptrptr-optimize-1.log @@ -172,7 +172,7 @@ main: { // [1] call sub // [5] phi from main to sub [phi:main->sub] sub_from_main: - // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- call_phi_near + // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- vbuaa=vbuc1 lda #'a' jsr sub // [2] phi from main to main::@1 [phi:main->main::@1] @@ -183,7 +183,7 @@ main: { // [3] call sub // [5] phi from main::@1 to sub [phi:main::@1->sub] sub_from___b1: - // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- call_phi_near + // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- vbuaa=vbuc1 lda #'b' jsr sub jmp __breturn @@ -271,7 +271,7 @@ main: { // sub('a',pscreen) // [1] call sub // [5] phi from main to sub [phi:main->sub] - // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- call_phi_near + // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- vbuaa=vbuc1 lda #'a' jsr sub // [2] phi from main to main::@1 [phi:main->main::@1] @@ -279,7 +279,7 @@ main: { // sub('b',pscreen) // [3] call sub // [5] phi from main::@1 to sub [phi:main::@1->sub] - // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- call_phi_near + // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- vbuaa=vbuc1 lda #'b' jsr sub // main::@return diff --git a/src/test/ref/ptrptr-optimize-2.log b/src/test/ref/ptrptr-optimize-2.log index 112d4cd77..f569b5aab 100644 --- a/src/test/ref/ptrptr-optimize-2.log +++ b/src/test/ref/ptrptr-optimize-2.log @@ -172,7 +172,7 @@ main: { // [1] call sub // [5] phi from main to sub [phi:main->sub] sub_from_main: - // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- call_phi_near + // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- vbuaa=vbuc1 lda #'a' jsr sub // [2] phi from main to main::@1 [phi:main->main::@1] @@ -183,7 +183,7 @@ main: { // [3] call sub // [5] phi from main::@1 to sub [phi:main::@1->sub] sub_from___b1: - // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- call_phi_near + // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- vbuaa=vbuc1 lda #'b' jsr sub jmp __breturn @@ -270,7 +270,7 @@ main: { // sub('a',&screen) // [1] call sub // [5] phi from main to sub [phi:main->sub] - // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- call_phi_near + // [5] phi sub::ch#2 = 'a' [phi:main->sub#0] -- vbuaa=vbuc1 lda #'a' jsr sub // [2] phi from main to main::@1 [phi:main->main::@1] @@ -278,7 +278,7 @@ main: { // sub('b',&screen) // [3] call sub // [5] phi from main::@1 to sub [phi:main::@1->sub] - // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- call_phi_near + // [5] phi sub::ch#2 = 'b' [phi:main::@1->sub#0] -- vbuaa=vbuc1 lda #'b' jsr sub // main::@return diff --git a/src/test/ref/ptrtest.log b/src/test/ref/ptrtest.log index 9a333a160..42e5fb047 100644 --- a/src/test/ref/ptrtest.log +++ b/src/test/ref/ptrtest.log @@ -519,14 +519,14 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call lvalue -- call_phi_near + // [1] call lvalue jsr lvalue // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: jmp __b1 // main::@1 __b1: - // [3] call rvalue -- call_phi_near + // [3] call rvalue jsr rvalue // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -534,7 +534,7 @@ main: { // main::@2 __b2: // [5] call rvaluevar - // [23] phi from main::@2 to rvaluevar [phi:main::@2->rvaluevar] -- call_phi_near + // [23] phi from main::@2 to rvaluevar [phi:main::@2->rvaluevar] rvaluevar_from___b2: jsr rvaluevar // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -543,7 +543,7 @@ main: { // main::@3 __b3: // [7] call lvaluevar - // [31] phi from main::@3 to lvaluevar [phi:main::@3->lvaluevar] -- call_phi_near + // [31] phi from main::@3 to lvaluevar [phi:main::@3->lvaluevar] lvaluevar_from___b3: jsr lvaluevar jmp __breturn @@ -837,24 +837,24 @@ Score: 1318 // main main: { // lvalue() - // [1] call lvalue -- call_phi_near + // [1] call lvalue jsr lvalue // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // rvalue() - // [3] call rvalue -- call_phi_near + // [3] call rvalue jsr rvalue // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // rvaluevar() // [5] call rvaluevar - // [23] phi from main::@2 to rvaluevar [phi:main::@2->rvaluevar] -- call_phi_near + // [23] phi from main::@2 to rvaluevar [phi:main::@2->rvaluevar] jsr rvaluevar // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // lvaluevar() // [7] call lvaluevar - // [31] phi from main::@3 to lvaluevar [phi:main::@3->lvaluevar] -- call_phi_near + // [31] phi from main::@3 to lvaluevar [phi:main::@3->lvaluevar] jsr lvaluevar // main::@return // } diff --git a/src/test/ref/register-0.log b/src/test/ref/register-0.log index 539c7ec51..7b7e77db1 100644 --- a/src/test/ref/register-0.log +++ b/src/test/ref/register-0.log @@ -183,7 +183,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -196,7 +196,7 @@ main: { // [5] print::ch = 'c' -- vbuz1=vbuc1 lda #'c' sta.z print.ch - // [6] call print -- call_phi_near + // [6] call print jsr print jmp __b1 // main::@1 @@ -204,7 +204,7 @@ main: { // [7] print::ch = 'm' -- vbuz1=vbuc1 lda #'m' sta.z print.ch - // [8] call print -- call_phi_near + // [8] call print jsr print jmp __b2 // main::@2 @@ -212,7 +212,7 @@ main: { // [9] print::ch = 'l' -- vbuz1=vbuc1 lda #'l' sta.z print.ch - // [10] call print -- call_phi_near + // [10] call print jsr print jmp __breturn // main::@return @@ -299,7 +299,7 @@ __start: { sta.z idx // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return @@ -311,21 +311,21 @@ main: { // [5] print::ch = 'c' -- vbuz1=vbuc1 lda #'c' sta.z print.ch - // [6] call print -- call_phi_near + // [6] call print jsr print // main::@1 // print('m') // [7] print::ch = 'm' -- vbuz1=vbuc1 lda #'m' sta.z print.ch - // [8] call print -- call_phi_near + // [8] call print jsr print // main::@2 // print('l') // [9] print::ch = 'l' -- vbuz1=vbuc1 lda #'l' sta.z print.ch - // [10] call print -- call_phi_near + // [10] call print jsr print // main::@return // } diff --git a/src/test/ref/reserve-zp-global-range.log b/src/test/ref/reserve-zp-global-range.log index 8ca16bd1a..48726c166 100644 --- a/src/test/ref/reserve-zp-global-range.log +++ b/src/test/ref/reserve-zp-global-range.log @@ -198,7 +198,7 @@ main: { __b1: // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 -- call_phi_near + // [2] call sub1 jsr sub1 // [3] sub1::return#0 = sub1::return#1 jmp __b2 @@ -292,7 +292,7 @@ main: { // sub1(i) // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 -- call_phi_near + // [2] call sub1 jsr sub1 // [3] sub1::return#0 = sub1::return#1 // main::@2 diff --git a/src/test/ref/reserve-zp-global.log b/src/test/ref/reserve-zp-global.log index 6750f7002..1c39d5bee 100644 --- a/src/test/ref/reserve-zp-global.log +++ b/src/test/ref/reserve-zp-global.log @@ -198,7 +198,7 @@ main: { __b1: // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 -- call_phi_near + // [2] call sub1 jsr sub1 // [3] sub1::return#0 = sub1::return#1 jmp __b2 @@ -292,7 +292,7 @@ main: { // sub1(i) // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 -- call_phi_near + // [2] call sub1 jsr sub1 // [3] sub1::return#0 = sub1::return#1 // main::@2 diff --git a/src/test/ref/reserve-zp-procedure-1.log b/src/test/ref/reserve-zp-procedure-1.log index a4705e225..8d61803a7 100644 --- a/src/test/ref/reserve-zp-procedure-1.log +++ b/src/test/ref/reserve-zp-procedure-1.log @@ -198,7 +198,7 @@ main: { __b1: // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 -- call_phi_near + // [2] call sub1 jsr sub1 // [3] sub1::return#0 = sub1::return#1 jmp __b2 @@ -292,7 +292,7 @@ main: { // sub1(i) // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 -- call_phi_near + // [2] call sub1 jsr sub1 // [3] sub1::return#0 = sub1::return#1 // main::@2 diff --git a/src/test/ref/reserve-zp-procedure-2.log b/src/test/ref/reserve-zp-procedure-2.log index 6296a0655..869577f5f 100644 --- a/src/test/ref/reserve-zp-procedure-2.log +++ b/src/test/ref/reserve-zp-procedure-2.log @@ -298,7 +298,7 @@ main: { __b1: // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 -- call_phi_near + // [2] call sub1 jsr sub1 // [3] sub1::return#0 = sub1::return#1 jmp __b2 @@ -310,7 +310,7 @@ main: { sta SCREEN,y // [6] sub2::i#0 = main::i -- vbuxx=vbuz1 ldx.z i - // [7] call sub2 -- call_phi_near + // [7] call sub2 jsr sub2 // [8] sub2::return#0 = sub2::return#1 jmp __b3 @@ -437,7 +437,7 @@ main: { // sub1(i) // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 -- call_phi_near + // [2] call sub1 jsr sub1 // [3] sub1::return#0 = sub1::return#1 // main::@2 @@ -449,7 +449,7 @@ main: { // sub2(i) // [6] sub2::i#0 = main::i -- vbuxx=vbuz1 ldx.z i - // [7] call sub2 -- call_phi_near + // [7] call sub2 jsr sub2 // [8] sub2::return#0 = sub2::return#1 // main::@3 diff --git a/src/test/ref/reserve-zp-procedure-3.log b/src/test/ref/reserve-zp-procedure-3.log index 25f767086..73b02ba54 100644 --- a/src/test/ref/reserve-zp-procedure-3.log +++ b/src/test/ref/reserve-zp-procedure-3.log @@ -198,7 +198,7 @@ main: { __b1: // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 -- call_phi_near + // [2] call sub1 jsr sub1 // [3] sub1::return#0 = sub1::return#1 jmp __b2 @@ -292,7 +292,7 @@ main: { // sub1(i) // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 -- call_phi_near + // [2] call sub1 jsr sub1 // [3] sub1::return#0 = sub1::return#1 // main::@2 diff --git a/src/test/ref/reserve-zp-procedure-4.log b/src/test/ref/reserve-zp-procedure-4.log index bd9d8b75a..2f13f19d0 100644 --- a/src/test/ref/reserve-zp-procedure-4.log +++ b/src/test/ref/reserve-zp-procedure-4.log @@ -198,7 +198,7 @@ main: { __b1: // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 -- call_phi_near + // [2] call sub1 jsr sub1 // [3] sub1::return#0 = sub1::return#1 jmp __b2 @@ -292,7 +292,7 @@ main: { // sub1(i) // [1] sub1::i#0 = main::i -- vbuaa=vbuz1 lda.z i - // [2] call sub1 -- call_phi_near + // [2] call sub1 jsr sub1 // [3] sub1::return#0 = sub1::return#1 // main::@2 diff --git a/src/test/ref/robozzle64-label-problem.log b/src/test/ref/robozzle64-label-problem.log index d9ac26394..74249a35f 100644 --- a/src/test/ref/robozzle64-label-problem.log +++ b/src/test/ref/robozzle64-label-problem.log @@ -509,7 +509,7 @@ main: { // [3] call mul8u // [16] phi from main::@1 to mul8u [phi:main::@1->mul8u] mul8u_from___b1: - // [16] phi mul8u::a#6 = mul8u::a#1 [phi:main::@1->mul8u#0] -- call_phi_near + // [16] phi mul8u::a#6 = mul8u::a#1 [phi:main::@1->mul8u#0] -- register_copy jsr mul8u // [4] mul8u::return#2 = mul8u::res#2 jmp __b2 @@ -528,7 +528,7 @@ main: { // [8] call mul8u // [16] phi from main::@2 to mul8u [phi:main::@2->mul8u] mul8u_from___b2: - // [16] phi mul8u::a#6 = mul8u::a#2 [phi:main::@2->mul8u#0] -- call_phi_near + // [16] phi mul8u::a#6 = mul8u::a#2 [phi:main::@2->mul8u#0] -- register_copy jsr mul8u // [9] mul8u::return#3 = mul8u::res#2 jmp __b3 @@ -751,7 +751,7 @@ main: { ldx.z y // [3] call mul8u // [16] phi from main::@1 to mul8u [phi:main::@1->mul8u] - // [16] phi mul8u::a#6 = mul8u::a#1 [phi:main::@1->mul8u#0] -- call_phi_near + // [16] phi mul8u::a#6 = mul8u::a#1 [phi:main::@1->mul8u#0] -- register_copy jsr mul8u // word z1 = mul8u(y,40) // [4] mul8u::return#2 = mul8u::res#2 @@ -770,7 +770,7 @@ main: { ldx.z y // [8] call mul8u // [16] phi from main::@2 to mul8u [phi:main::@2->mul8u] - // [16] phi mul8u::a#6 = mul8u::a#2 [phi:main::@2->mul8u#0] -- call_phi_near + // [16] phi mul8u::a#6 = mul8u::a#2 [phi:main::@2->mul8u#0] -- register_copy jsr mul8u // word z2 = mul8u(y,40) // [9] mul8u::return#3 = mul8u::res#2 diff --git a/src/test/ref/roll-sprite-msb.log b/src/test/ref/roll-sprite-msb.log index d17638634..0e330842b 100644 --- a/src/test/ref/roll-sprite-msb.log +++ b/src/test/ref/roll-sprite-msb.log @@ -388,7 +388,7 @@ main: { // [2] position_sprite::spriteno#0 = main::s#2 -- vbuz1=vbuxx stx.z position_sprite.spriteno // [3] position_sprite::x#0 = main::xpos#2 - // [4] call position_sprite -- call_phi_near + // [4] call position_sprite jsr position_sprite jmp __b2 // main::@2 @@ -575,7 +575,7 @@ main: { // [2] position_sprite::spriteno#0 = main::s#2 -- vbuz1=vbuxx stx.z position_sprite.spriteno // [3] position_sprite::x#0 = main::xpos#2 - // [4] call position_sprite -- call_phi_near + // [4] call position_sprite jsr position_sprite // main::@2 // xpos += 10 diff --git a/src/test/ref/scan-desire-problem.log b/src/test/ref/scan-desire-problem.log index 618158d3f..1e41f8d2a 100644 --- a/src/test/ref/scan-desire-problem.log +++ b/src/test/ref/scan-desire-problem.log @@ -1413,7 +1413,7 @@ main: { .label y = $14 .label x = $15 // [1] call init - // [15] phi from main to init [phi:main->init] -- call_phi_near + // [15] phi from main to init [phi:main->init] init_from_main: jsr init // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1469,7 +1469,7 @@ main: { // [11] draw_block::x#0 = main::x#2 -- vbuxx=vbuz1 ldx.z x // [12] draw_block::y#0 = main::y#2 - // [13] call draw_block -- call_phi_near + // [13] call draw_block jsr draw_block jmp __b6 // main::@6 @@ -1484,7 +1484,7 @@ main: { // init init: { .const toD0181_return = (>(screen&$3fff)*4)|(>charset)/4&$f - // [16] call init_sprites -- call_phi_near + // [16] call init_sprites jsr init_sprites // [17] phi from init to init::@2 [phi:init->init::@2] __b2_from_init: @@ -1496,7 +1496,7 @@ init: { memset_from___b2: // [66] phi memset::c#4 = 0 [phi:init::@2->memset#0] -- vbuxx=vbuc1 ldx #0 - // [66] phi memset::str#3 = (void *)screen [phi:init::@2->memset#1] -- call_phi_near + // [66] phi memset::str#3 = (void *)screen [phi:init::@2->memset#1] -- pvoz1=pvoc1 lda #screen @@ -1512,7 +1512,7 @@ init: { memset_from___b3: // [66] phi memset::c#4 = BLACK [phi:init::@3->memset#0] -- vbuxx=vbuc1 ldx #BLACK - // [66] phi memset::str#3 = (void *)colors [phi:init::@3->memset#1] -- call_phi_near + // [66] phi memset::str#3 = (void *)colors [phi:init::@3->memset#1] -- pvoz1=pvoc1 lda #colors @@ -1589,7 +1589,7 @@ draw_block: { // [33] mul8u::a#1 = draw_block::y#1 -- vbuxx=vbuaa tax // [34] call mul8u - // [74] phi from draw_block to mul8u [phi:draw_block->mul8u] -- call_phi_near + // [74] phi from draw_block to mul8u [phi:draw_block->mul8u] mul8u_from_draw_block: jsr mul8u // [35] mul8u::return#2 = mul8u::res#2 @@ -2147,7 +2147,7 @@ main: { .label x = $15 // init() // [1] call init - // [15] phi from main to init [phi:main->init] -- call_phi_near + // [15] phi from main to init [phi:main->init] jsr init // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::x#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 @@ -2199,7 +2199,7 @@ main: { // [11] draw_block::x#0 = main::x#2 -- vbuxx=vbuz1 ldx.z x // [12] draw_block::y#0 = main::y#2 - // [13] call draw_block -- call_phi_near + // [13] call draw_block jsr draw_block // main::@6 // for (byte y = 0; y < 9; y++) @@ -2213,7 +2213,7 @@ main: { init: { .const toD0181_return = (>(screen&$3fff)*4)|(>charset)/4&$f // init_sprites() - // [16] call init_sprites -- call_phi_near + // [16] call init_sprites jsr init_sprites // [17] phi from init to init::@2 [phi:init->init::@2] // init::@2 @@ -2222,7 +2222,7 @@ init: { // [66] phi from init::@2 to memset [phi:init::@2->memset] // [66] phi memset::c#4 = 0 [phi:init::@2->memset#0] -- vbuxx=vbuc1 ldx #0 - // [66] phi memset::str#3 = (void *)screen [phi:init::@2->memset#1] -- call_phi_near + // [66] phi memset::str#3 = (void *)screen [phi:init::@2->memset#1] -- pvoz1=pvoc1 lda #screen @@ -2235,7 +2235,7 @@ init: { // [66] phi from init::@3 to memset [phi:init::@3->memset] // [66] phi memset::c#4 = BLACK [phi:init::@3->memset#0] -- vbuxx=vbuc1 ldx #BLACK - // [66] phi memset::str#3 = (void *)colors [phi:init::@3->memset#1] -- call_phi_near + // [66] phi memset::str#3 = (void *)colors [phi:init::@3->memset#1] -- pvoz1=pvoc1 lda #colors @@ -2316,7 +2316,7 @@ draw_block: { // [33] mul8u::a#1 = draw_block::y#1 -- vbuxx=vbuaa tax // [34] call mul8u - // [74] phi from draw_block to mul8u [phi:draw_block->mul8u] -- call_phi_near + // [74] phi from draw_block to mul8u [phi:draw_block->mul8u] jsr mul8u // word z = mul8u(y,40) // [35] mul8u::return#2 = mul8u::res#2 diff --git a/src/test/ref/scrollbig-clobber.log b/src/test/ref/scrollbig-clobber.log index 2b1e27aaa..dc0c56401 100644 --- a/src/test/ref/scrollbig-clobber.log +++ b/src/test/ref/scrollbig-clobber.log @@ -325,7 +325,7 @@ main: { jmp __b1 // main::@1 __b1: - // [2] call next_char -- call_phi_near + // [2] call next_char jsr next_char // [3] next_char::return#0 = next_char::return#1 jmp __b2 @@ -481,7 +481,7 @@ main: { // main::@1 __b1: // next_char() - // [2] call next_char -- call_phi_near + // [2] call next_char jsr next_char // [3] next_char::return#0 = next_char::return#1 // main::@2 diff --git a/src/test/ref/semi-struct-1.log b/src/test/ref/semi-struct-1.log index cb6b90aba..68e2418bd 100644 --- a/src/test/ref/semi-struct-1.log +++ b/src/test/ref/semi-struct-1.log @@ -1524,7 +1524,7 @@ ASSEMBLER BEFORE OPTIMIZATION // Initialize some points and print them main: { // [1] call init_points - // [5] phi from main to init_points [phi:main->init_points] -- call_phi_near + // [5] phi from main to init_points [phi:main->init_points] init_points_from_main: jsr init_points // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1533,7 +1533,7 @@ main: { // main::@1 __b1: // [3] call print_points - // [18] phi from main::@1 to print_points [phi:main::@1->print_points] -- call_phi_near + // [18] phi from main::@1 to print_points [phi:main::@1->print_points] print_points_from___b1: jsr print_points jmp __breturn @@ -1624,7 +1624,7 @@ print_points: { .label point = 9 .label i = 8 // [19] call print_cls - // [37] phi from print_points to print_cls [phi:print_points->print_cls] -- call_phi_near + // [37] phi from print_points to print_cls [phi:print_points->print_cls] print_cls_from_print_points: jsr print_cls // [20] phi from print_points to print_points::@1 [phi:print_points->print_points::@1] @@ -1674,7 +1674,7 @@ print_points: { // [40] phi from print_points::@2 to print_uchar [phi:print_points::@2->print_uchar] print_uchar_from___b2: // [40] phi print_char_cursor#45 = print_char_cursor#48 [phi:print_points::@2->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_points::@2->print_uchar#1] -- call_phi_near + // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_points::@2->print_uchar#1] -- register_copy jsr print_uchar // [26] phi from print_points::@2 to print_points::@4 [phi:print_points::@2->print_points::@4] __b4_from___b2: @@ -1682,7 +1682,7 @@ print_points: { // print_points::@4 __b4: // [27] call print_str - // [48] phi from print_points::@4 to print_str [phi:print_points::@4->print_str] -- call_phi_near + // [48] phi from print_points::@4 to print_str [phi:print_points::@4->print_str] print_str_from___b4: jsr print_str // [28] phi from print_points::@4 to print_points::pointYpos1 [phi:print_points::@4->print_points::pointYpos1] @@ -1701,7 +1701,7 @@ print_points: { // [40] phi from print_points::@3 to print_uchar [phi:print_points::@3->print_uchar] print_uchar_from___b3: // [40] phi print_char_cursor#45 = print_char_cursor#30 [phi:print_points::@3->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_points::@3->print_uchar#1] -- call_phi_near + // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_points::@3->print_uchar#1] -- register_copy jsr print_uchar // [31] phi from print_points::@3 to print_points::@5 [phi:print_points::@3->print_points::@5] __b5_from___b3: @@ -1709,7 +1709,7 @@ print_points: { // print_points::@5 __b5: // [32] call print_ln - // [55] phi from print_points::@5 to print_ln [phi:print_points::@5->print_ln] -- call_phi_near + // [55] phi from print_points::@5 to print_ln [phi:print_points::@5->print_ln] print_ln_from___b5: jsr print_ln jmp __b6 @@ -1748,7 +1748,7 @@ print_points: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [38] call memset - // [60] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [60] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -1775,7 +1775,7 @@ print_uchar: { // [66] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [66] phi print_char_cursor#29 = print_char_cursor#45 [phi:print_uchar->print_char#0] -- register_copy - // [66] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near + // [66] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -1789,7 +1789,7 @@ print_uchar: { // [66] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [66] phi print_char_cursor#29 = print_char_cursor#30 [phi:print_uchar::@1->print_char#0] -- register_copy - // [66] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [66] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -1831,7 +1831,7 @@ print_str: { // [66] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [66] phi print_char_cursor#29 = print_char_cursor#30 [phi:print_str::@2->print_char#0] -- register_copy - // [66] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [66] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char jmp __b3 // print_str::@3 @@ -2178,13 +2178,13 @@ Score: 10419 main: { // init_points() // [1] call init_points - // [5] phi from main to init_points [phi:main->init_points] -- call_phi_near + // [5] phi from main to init_points [phi:main->init_points] jsr init_points // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // print_points() // [3] call print_points - // [18] phi from main::@1 to print_points [phi:main::@1->print_points] -- call_phi_near + // [18] phi from main::@1 to print_points [phi:main::@1->print_points] jsr print_points // main::@return // } @@ -2264,7 +2264,7 @@ print_points: { .label i = 8 // print_cls() // [19] call print_cls - // [37] phi from print_points to print_cls [phi:print_points->print_cls] -- call_phi_near + // [37] phi from print_points to print_cls [phi:print_points->print_cls] jsr print_cls // [20] phi from print_points to print_points::@1 [phi:print_points->print_points::@1] // [20] phi print_line_cursor#26 = print_screen#0 [phi:print_points->print_points::@1#0] -- pbuz1=pbuc1 @@ -2306,13 +2306,13 @@ print_points: { // [25] call print_uchar // [40] phi from print_points::@2 to print_uchar [phi:print_points::@2->print_uchar] // [40] phi print_char_cursor#45 = print_char_cursor#48 [phi:print_points::@2->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_points::@2->print_uchar#1] -- call_phi_near + // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_points::@2->print_uchar#1] -- register_copy jsr print_uchar // [26] phi from print_points::@2 to print_points::@4 [phi:print_points::@2->print_points::@4] // print_points::@4 // print_str(" ") // [27] call print_str - // [48] phi from print_points::@4 to print_str [phi:print_points::@4->print_str] -- call_phi_near + // [48] phi from print_points::@4 to print_str [phi:print_points::@4->print_str] jsr print_str // [28] phi from print_points::@4 to print_points::pointYpos1 [phi:print_points::@4->print_points::pointYpos1] // print_points::pointYpos1 @@ -2325,13 +2325,13 @@ print_points: { // [30] call print_uchar // [40] phi from print_points::@3 to print_uchar [phi:print_points::@3->print_uchar] // [40] phi print_char_cursor#45 = print_char_cursor#30 [phi:print_points::@3->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_points::@3->print_uchar#1] -- call_phi_near + // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_points::@3->print_uchar#1] -- register_copy jsr print_uchar // [31] phi from print_points::@3 to print_points::@5 [phi:print_points::@3->print_points::@5] // print_points::@5 // print_ln() // [32] call print_ln - // [55] phi from print_points::@5 to print_ln [phi:print_points::@5->print_ln] -- call_phi_near + // [55] phi from print_points::@5 to print_ln [phi:print_points::@5->print_ln] jsr print_ln // print_points::@6 // for(byte i: 0..NUM_POINTS-1) @@ -2367,7 +2367,7 @@ print_points: { print_cls: { // memset(print_screen, ' ', 1000) // [38] call memset - // [60] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [60] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -2393,7 +2393,7 @@ print_uchar: { // Table of hexadecimal digits // [66] phi from print_uchar to print_char [phi:print_uchar->print_char] // [66] phi print_char_cursor#29 = print_char_cursor#45 [phi:print_uchar->print_char#0] -- register_copy - // [66] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near + // [66] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -2406,7 +2406,7 @@ print_uchar: { // [46] call print_char // [66] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [66] phi print_char_cursor#29 = print_char_cursor#30 [phi:print_uchar::@1->print_char#0] -- register_copy - // [66] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [66] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } @@ -2445,7 +2445,7 @@ print_str: { // [53] call print_char // [66] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [66] phi print_char_cursor#29 = print_char_cursor#30 [phi:print_str::@2->print_char#0] -- register_copy - // [66] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [66] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/sepa-optimize-problem-1.log b/src/test/ref/sepa-optimize-problem-1.log index 36fc38e6c..9af598909 100644 --- a/src/test/ref/sepa-optimize-problem-1.log +++ b/src/test/ref/sepa-optimize-problem-1.log @@ -408,7 +408,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [9] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [9] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -440,14 +440,14 @@ xputc: { } // main main: { - // [10] call _updatePotatoSprite -- call_phi_near + // [10] call _updatePotatoSprite jsr _updatePotatoSprite // [11] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: jmp __b1 // main::@1 __b1: - // [12] call _updateLupineSprite -- call_phi_near + // [12] call _updateLupineSprite jsr _updateLupineSprite jmp __breturn // main::@return @@ -474,7 +474,7 @@ _updatePotatoSprite: { sta.z _copyDigitToAnySprite.pointer lda #>SPR_POTATO_UI sta.z _copyDigitToAnySprite.pointer+1 - // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#0 [phi:_updatePotatoSprite->_copyDigitToAnySprite#1] -- call_phi_near + // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#0 [phi:_updatePotatoSprite->_copyDigitToAnySprite#1] -- register_copy jsr _copyDigitToAnySprite jmp __breturn // _updatePotatoSprite::@return @@ -501,7 +501,7 @@ _updateLupineSprite: { sta.z _copyDigitToAnySprite.pointer lda #>SPR_LUPINE_UI sta.z _copyDigitToAnySprite.pointer+1 - // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#1 [phi:_updateLupineSprite->_copyDigitToAnySprite#1] -- call_phi_near + // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#1 [phi:_updateLupineSprite->_copyDigitToAnySprite#1] -- register_copy jsr _copyDigitToAnySprite jmp __b1 // _updateLupineSprite::@1 @@ -516,7 +516,7 @@ _updateLupineSprite: { sta.z _copyDigitToAnySprite.pointer lda #>SPR_LUPINE_UI sta.z _copyDigitToAnySprite.pointer+1 - // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#2 [phi:_updateLupineSprite::@1->_copyDigitToAnySprite#1] -- call_phi_near + // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#2 [phi:_updateLupineSprite::@1->_copyDigitToAnySprite#1] -- register_copy jsr _copyDigitToAnySprite jmp __breturn // _updateLupineSprite::@return @@ -650,7 +650,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [9] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [9] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return @@ -681,12 +681,12 @@ xputc: { // main main: { // _updatePotatoSprite() - // [10] call _updatePotatoSprite -- call_phi_near + // [10] call _updatePotatoSprite jsr _updatePotatoSprite // [11] phi from main to main::@1 [phi:main->main::@1] // main::@1 // _updateLupineSprite() - // [12] call _updateLupineSprite -- call_phi_near + // [12] call _updateLupineSprite jsr _updateLupineSprite // main::@return // } @@ -713,7 +713,7 @@ _updatePotatoSprite: { sta.z _copyDigitToAnySprite.pointer lda #>SPR_POTATO_UI sta.z _copyDigitToAnySprite.pointer+1 - // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#0 [phi:_updatePotatoSprite->_copyDigitToAnySprite#1] -- call_phi_near + // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#0 [phi:_updatePotatoSprite->_copyDigitToAnySprite#1] -- register_copy jsr _copyDigitToAnySprite // _updatePotatoSprite::@return // } @@ -740,7 +740,7 @@ _updateLupineSprite: { sta.z _copyDigitToAnySprite.pointer lda #>SPR_LUPINE_UI sta.z _copyDigitToAnySprite.pointer+1 - // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#1 [phi:_updateLupineSprite->_copyDigitToAnySprite#1] -- call_phi_near + // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#1 [phi:_updateLupineSprite->_copyDigitToAnySprite#1] -- register_copy jsr _copyDigitToAnySprite // _updateLupineSprite::@1 // _copyDigitToAnySprite(SPR_LUPINE_UI, num2str[1]) @@ -753,7 +753,7 @@ _updateLupineSprite: { sta.z _copyDigitToAnySprite.pointer lda #>SPR_LUPINE_UI sta.z _copyDigitToAnySprite.pointer+1 - // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#2 [phi:_updateLupineSprite::@1->_copyDigitToAnySprite#1] -- call_phi_near + // [28] phi _copyDigitToAnySprite::c#3 = _copyDigitToAnySprite::c#2 [phi:_updateLupineSprite::@1->_copyDigitToAnySprite#1] -- register_copy jsr _copyDigitToAnySprite // _updateLupineSprite::@return // } diff --git a/src/test/ref/sieve-min.log b/src/test/ref/sieve-min.log index 7101f227f..230bd0d2d 100644 --- a/src/test/ref/sieve-min.log +++ b/src/test/ref/sieve-min.log @@ -1009,7 +1009,7 @@ main: { .label __16 = 4 // [1] call memset // Fill sieve with zeros - // [25] phi from main to memset [phi:main->memset] -- call_phi_near + // [25] phi from main to memset [phi:main->memset] memset_from_main: jsr memset // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1083,7 +1083,7 @@ main: { // main::@10 __b10: // [9] print_uint::w#0 = main::i#10 - // [10] call print_uint -- call_phi_near + // [10] call print_uint jsr print_uint // [11] phi from main::@10 to main::@12 [phi:main::@10->main::@12] __b12_from___b10: @@ -1094,7 +1094,7 @@ main: { // [36] phi from main::@12 to print_char [phi:main::@12->print_char] print_char_from___b12: // [36] phi print_char_cursor#20 = print_char_cursor#21 [phi:main::@12->print_char#0] -- register_copy - // [36] phi print_char::ch#3 = ' ' [phi:main::@12->print_char#1] -- call_phi_near + // [36] phi print_char::ch#3 = ' ' [phi:main::@12->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [13] phi from main::@12 main::@8 to main::@9 [phi:main::@12/main::@8->main::@9] @@ -1256,7 +1256,7 @@ print_uint: { // [40] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [40] phi print_char_cursor#28 = print_char_cursor#29 [phi:print_uint->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -1267,7 +1267,7 @@ print_uint: { // [40] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [40] phi print_char_cursor#28 = print_char_cursor#21 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -1311,7 +1311,7 @@ print_uchar: { // [36] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [36] phi print_char_cursor#20 = print_char_cursor#28 [phi:print_uchar->print_char#0] -- register_copy - // [36] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [36] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -1325,7 +1325,7 @@ print_uchar: { // [36] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [36] phi print_char_cursor#20 = print_char_cursor#21 [phi:print_uchar::@1->print_char#0] -- register_copy - // [36] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [36] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -1502,7 +1502,7 @@ main: { // memset(sieve, 0, COUNT) // [1] call memset // Fill sieve with zeros - // [25] phi from main to memset [phi:main->memset] -- call_phi_near + // [25] phi from main to memset [phi:main->memset] jsr memset // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::sieve_i#2 = sieve+2 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -1573,7 +1573,7 @@ main: { // main::@10 // print_uint(i) // [9] print_uint::w#0 = main::i#10 - // [10] call print_uint -- call_phi_near + // [10] call print_uint jsr print_uint // [11] phi from main::@10 to main::@12 [phi:main::@10->main::@12] // main::@12 @@ -1581,7 +1581,7 @@ main: { // [12] call print_char // [36] phi from main::@12 to print_char [phi:main::@12->print_char] // [36] phi print_char_cursor#20 = print_char_cursor#21 [phi:main::@12->print_char#0] -- register_copy - // [36] phi print_char::ch#3 = ' ' [phi:main::@12->print_char#1] -- call_phi_near + // [36] phi print_char::ch#3 = ' ' [phi:main::@12->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [13] phi from main::@12 main::@8 to main::@9 [phi:main::@12/main::@8->main::@9] @@ -1741,7 +1741,7 @@ print_uint: { // [32] call print_uchar // [40] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [40] phi print_char_cursor#28 = print_char_cursor#29 [phi:print_uint->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [40] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -1750,7 +1750,7 @@ print_uint: { // [34] call print_uchar // [40] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [40] phi print_char_cursor#28 = print_char_cursor#21 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [40] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@return // } @@ -1795,7 +1795,7 @@ print_uchar: { // Table of hexadecimal digits // [36] phi from print_uchar to print_char [phi:print_uchar->print_char] // [36] phi print_char_cursor#20 = print_char_cursor#28 [phi:print_uchar->print_char#0] -- register_copy - // [36] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [36] phi print_char::ch#3 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -1808,7 +1808,7 @@ print_uchar: { // [46] call print_char // [36] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [36] phi print_char_cursor#20 = print_char_cursor#21 [phi:print_uchar::@1->print_char#0] -- register_copy - // [36] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [36] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/signed-char-comparison.log b/src/test/ref/signed-char-comparison.log index ed3c75220..ae96661aa 100644 --- a/src/test/ref/signed-char-comparison.log +++ b/src/test/ref/signed-char-comparison.log @@ -224,7 +224,7 @@ main: { // main::@1 __b1: // [2] debug::dy#0 = main::dy#2 - // [3] call debug -- call_phi_near + // [3] call debug jsr debug jmp __b2 // main::@2 @@ -328,7 +328,7 @@ main: { __b1: // debug(dy) // [2] debug::dy#0 = main::dy#2 - // [3] call debug -- call_phi_near + // [3] call debug jsr debug // main::@2 // for(signed char dy:-128..127) diff --git a/src/test/ref/signed-indexed-subtract.log b/src/test/ref/signed-indexed-subtract.log index b877c1b21..b7ebd34f7 100644 --- a/src/test/ref/signed-indexed-subtract.log +++ b/src/test/ref/signed-indexed-subtract.log @@ -1219,7 +1219,7 @@ main: { sub_from___b1: // [22] phi sub::s#3 = $80 [phi:main::@1->sub#0] -- vbuxx=vbuc1 ldx #$80 - // [22] phi sub::idx#3 = sub::idx#0 [phi:main::@1->sub#1] -- call_phi_near + // [22] phi sub::idx#3 = sub::idx#0 [phi:main::@1->sub#1] -- register_copy jsr sub jmp __b4 // main::@4 @@ -1231,7 +1231,7 @@ main: { sub_from___b4: // [22] phi sub::s#3 = $40 [phi:main::@4->sub#0] -- vbuxx=vbuc1 ldx #$40 - // [22] phi sub::idx#3 = sub::idx#1 [phi:main::@4->sub#1] -- call_phi_near + // [22] phi sub::idx#3 = sub::idx#1 [phi:main::@4->sub#1] -- register_copy jsr sub jmp __b5 // main::@5 @@ -1243,7 +1243,7 @@ main: { sub_from___b5: // [22] phi sub::s#3 = $40 [phi:main::@5->sub#0] -- vbuxx=vbuc1 ldx #$40 - // [22] phi sub::idx#3 = sub::idx#2 [phi:main::@5->sub#1] -- call_phi_near + // [22] phi sub::idx#3 = sub::idx#2 [phi:main::@5->sub#1] -- register_copy jsr sub jmp __b6 // main::@6 @@ -1259,7 +1259,7 @@ main: { // main::@2 __b2: // [11] call print_cls - // [26] phi from main::@2 to print_cls [phi:main::@2->print_cls] -- call_phi_near + // [26] phi from main::@2 to print_cls [phi:main::@2->print_cls] print_cls_from___b2: jsr print_cls // [12] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -1289,7 +1289,7 @@ main: { sta.z print_sint.w lda words+1,y sta.z print_sint.w+1 - // [15] call print_sint -- call_phi_near + // [15] call print_sint jsr print_sint // [16] phi from main::@3 to main::@7 [phi:main::@3->main::@7] __b7_from___b3: @@ -1297,7 +1297,7 @@ main: { // main::@7 __b7: // [17] call print_ln - // [39] phi from main::@7 to print_ln [phi:main::@7->print_ln] -- call_phi_near + // [39] phi from main::@7 to print_ln [phi:main::@7->print_ln] print_ln_from___b7: jsr print_ln jmp __b8 @@ -1353,7 +1353,7 @@ sub: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [27] call memset - // [44] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [44] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -1379,7 +1379,7 @@ print_sint: { // [50] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] print_char_from___b3: // [50] phi print_char_cursor#35 = print_char_cursor#51 [phi:print_sint::@3->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [32] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -1390,7 +1390,7 @@ print_sint: { // print_sint::@2 __b2: // [33] print_uint::w#0 = (unsigned int)print_sint::w#4 - // [34] call print_uint -- call_phi_near + // [34] call print_uint jsr print_uint jmp __breturn // print_sint::@return @@ -1406,7 +1406,7 @@ print_sint: { // [50] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] print_char_from___b1: // [50] phi print_char_cursor#35 = print_char_cursor#51 [phi:print_sint::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char jmp __b4 @@ -1530,7 +1530,7 @@ print_uint: { // [55] call print_uchar // [59] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: - // [59] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near + // [59] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -1540,7 +1540,7 @@ print_uint: { // [57] call print_uchar // [59] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: - // [59] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near + // [59] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -1566,7 +1566,7 @@ print_uchar: { // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [50] phi print_char_cursor#35 = print_char_cursor#12 [phi:print_uchar->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#2 [phi:print_uchar->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = print_char::ch#2 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -1580,7 +1580,7 @@ print_uchar: { // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [50] phi print_char_cursor#35 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -1797,7 +1797,7 @@ main: { // [22] phi from main::@1 to sub [phi:main::@1->sub] // [22] phi sub::s#3 = $80 [phi:main::@1->sub#0] -- vbuxx=vbuc1 ldx #$80 - // [22] phi sub::idx#3 = sub::idx#0 [phi:main::@1->sub#1] -- call_phi_near + // [22] phi sub::idx#3 = sub::idx#0 [phi:main::@1->sub#1] -- register_copy jsr sub // main::@4 // sub(i, $40) @@ -1807,7 +1807,7 @@ main: { // [22] phi from main::@4 to sub [phi:main::@4->sub] // [22] phi sub::s#3 = $40 [phi:main::@4->sub#0] -- vbuxx=vbuc1 ldx #$40 - // [22] phi sub::idx#3 = sub::idx#1 [phi:main::@4->sub#1] -- call_phi_near + // [22] phi sub::idx#3 = sub::idx#1 [phi:main::@4->sub#1] -- register_copy jsr sub // main::@5 // sub(i, $40) @@ -1817,7 +1817,7 @@ main: { // [22] phi from main::@5 to sub [phi:main::@5->sub] // [22] phi sub::s#3 = $40 [phi:main::@5->sub#0] -- vbuxx=vbuc1 ldx #$40 - // [22] phi sub::idx#3 = sub::idx#2 [phi:main::@5->sub#1] -- call_phi_near + // [22] phi sub::idx#3 = sub::idx#2 [phi:main::@5->sub#1] -- register_copy jsr sub // main::@6 // for(byte i: 0..8) @@ -1830,7 +1830,7 @@ main: { // main::@2 // print_cls() // [11] call print_cls - // [26] phi from main::@2 to print_cls [phi:main::@2->print_cls] -- call_phi_near + // [26] phi from main::@2 to print_cls [phi:main::@2->print_cls] jsr print_cls // [12] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // [12] phi print_line_cursor#21 = print_screen#0 [phi:main::@2->main::@3#0] -- pbuz1=pbuc1 @@ -1858,13 +1858,13 @@ main: { sta.z print_sint.w lda words+1,y sta.z print_sint.w+1 - // [15] call print_sint -- call_phi_near + // [15] call print_sint jsr print_sint // [16] phi from main::@3 to main::@7 [phi:main::@3->main::@7] // main::@7 // print_ln() // [17] call print_ln - // [39] phi from main::@7 to print_ln [phi:main::@7->print_ln] -- call_phi_near + // [39] phi from main::@7 to print_ln [phi:main::@7->print_ln] jsr print_ln // main::@8 // for(byte j: 0..8) @@ -1917,7 +1917,7 @@ sub: { print_cls: { // memset(print_screen, ' ', 1000) // [27] call memset - // [44] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [44] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -1939,7 +1939,7 @@ print_sint: { // [31] call print_char // [50] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] // [50] phi print_char_cursor#35 = print_char_cursor#51 [phi:print_sint::@3->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [32] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -1948,7 +1948,7 @@ print_sint: { __b2: // print_uint((unsigned int)w) // [33] print_uint::w#0 = (unsigned int)print_sint::w#4 - // [34] call print_uint -- call_phi_near + // [34] call print_uint jsr print_uint // print_sint::@return // } @@ -1961,7 +1961,7 @@ print_sint: { // [37] call print_char // [50] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] // [50] phi print_char_cursor#35 = print_char_cursor#51 [phi:print_sint::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char // print_sint::@4 @@ -2082,7 +2082,7 @@ print_uint: { ldx.z w+1 // [55] call print_uchar // [59] phi from print_uint to print_uchar [phi:print_uint->print_uchar] - // [59] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near + // [59] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -2090,7 +2090,7 @@ print_uint: { ldx.z w // [57] call print_uchar // [59] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] - // [59] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near + // [59] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy jsr print_uchar // print_uint::@return // } @@ -2116,7 +2116,7 @@ print_uchar: { // Table of hexadecimal digits // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] // [50] phi print_char_cursor#35 = print_char_cursor#12 [phi:print_uchar->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#2 [phi:print_uchar->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = print_char::ch#2 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -2129,7 +2129,7 @@ print_uchar: { // [65] call print_char // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [50] phi print_char_cursor#35 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#4 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [50] phi print_char::ch#4 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/signed-words.log b/src/test/ref/signed-words.log index 3657fb28c..400f1a240 100644 --- a/src/test/ref/signed-words.log +++ b/src/test/ref/signed-words.log @@ -961,7 +961,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call init -- call_phi_near + // [1] call init jsr init // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -1011,7 +1011,7 @@ main: { jmp __b2 // main::@2 __b2: - // [5] call anim -- call_phi_near + // [5] call anim jsr anim jmp __b1_from___b2 } @@ -1443,7 +1443,7 @@ Score: 6364 // main main: { // init() - // [1] call init -- call_phi_near + // [1] call init jsr init // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi yvel_init#15 = $64 [phi:main->main::@1#0] -- vwsz1=vwsc1 @@ -1484,7 +1484,7 @@ main: { // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // anim() - // [5] call anim -- call_phi_near + // [5] call anim jsr anim jmp __b1 } diff --git a/src/test/ref/sinus-basic.log b/src/test/ref/sinus-basic.log index 5f8b3b043..a837a383f 100644 --- a/src/test/ref/sinus-basic.log +++ b/src/test/ref/sinus-basic.log @@ -1301,7 +1301,7 @@ main: { // [1] call setFAC // [34] phi from main to setFAC [phi:main->setFAC] setFAC_from_main: - // [34] phi setFAC::prepareMEM1_mem#0 = $4fb [phi:main->setFAC#0] -- call_phi_near + // [34] phi setFAC::prepareMEM1_mem#0 = $4fb [phi:main->setFAC#0] -- vwuz1=vwuc1 lda #<$4fb sta.z setFAC.prepareMEM1_mem lda #>$4fb @@ -1312,7 +1312,7 @@ main: { jmp __b2 // main::@2 __b2: - // [3] call divFACby10 -- call_phi_near + // [3] call divFACby10 jsr divFACby10 // [4] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -1322,7 +1322,7 @@ main: { // [5] call setMEMtoFAC // [43] phi from main::@3 to setMEMtoFAC [phi:main::@3->setMEMtoFAC] setMEMtoFAC_from___b3: - // [43] phi setMEMtoFAC::mem#2 = main::f_127 [phi:main::@3->setMEMtoFAC#0] -- call_phi_near + // [43] phi setMEMtoFAC::mem#2 = main::f_127 [phi:main::@3->setMEMtoFAC#0] -- pbuz1=pbuc1 lda #f_127 @@ -1354,7 +1354,7 @@ main: { // [8] call setFAC // [34] phi from main::@1 to setFAC [phi:main::@1->setFAC] setFAC_from___b1: - // [34] phi setFAC::prepareMEM1_mem#0 = setFAC::w#1 [phi:main::@1->setFAC#0] -- call_phi_near + // [34] phi setFAC::prepareMEM1_mem#0 = setFAC::w#1 [phi:main::@1->setFAC#0] -- register_copy jsr setFAC // [9] phi from main::@1 to main::@4 [phi:main::@1->main::@4] __b4_from___b1: @@ -1364,7 +1364,7 @@ main: { // [10] call mulFACbyMEM // [50] phi from main::@4 to mulFACbyMEM [phi:main::@4->mulFACbyMEM] mulFACbyMEM_from___b4: - // [50] phi mulFACbyMEM::mem#2 = main::f_2pi [phi:main::@4->mulFACbyMEM#0] -- call_phi_near + // [50] phi mulFACbyMEM::mem#2 = main::f_2pi [phi:main::@4->mulFACbyMEM#0] -- pbuz1=pbuc1 lda #f_2pi @@ -1378,7 +1378,7 @@ main: { // [12] call setMEMtoFAC // [43] phi from main::@5 to setMEMtoFAC [phi:main::@5->setMEMtoFAC] setMEMtoFAC_from___b5: - // [43] phi setMEMtoFAC::mem#2 = main::f_i [phi:main::@5->setMEMtoFAC#0] -- call_phi_near + // [43] phi setMEMtoFAC::mem#2 = main::f_i [phi:main::@5->setMEMtoFAC#0] -- pbuz1=pbuc1 lda #f_i @@ -1392,7 +1392,7 @@ main: { // [14] call setFAC // [34] phi from main::@6 to setFAC [phi:main::@6->setFAC] setFAC_from___b6: - // [34] phi setFAC::prepareMEM1_mem#0 = $19 [phi:main::@6->setFAC#0] -- call_phi_near + // [34] phi setFAC::prepareMEM1_mem#0 = $19 [phi:main::@6->setFAC#0] -- vwuz1=vbuc1 lda #<$19 sta.z setFAC.prepareMEM1_mem lda #>$19 @@ -1404,7 +1404,7 @@ main: { // main::@7 __b7: // [16] call divMEMbyFAC - // [57] phi from main::@7 to divMEMbyFAC [phi:main::@7->divMEMbyFAC] -- call_phi_near + // [57] phi from main::@7 to divMEMbyFAC [phi:main::@7->divMEMbyFAC] divMEMbyFAC_from___b7: jsr divMEMbyFAC // [17] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -1412,7 +1412,7 @@ main: { jmp __b8 // main::@8 __b8: - // [18] call sinFAC -- call_phi_near + // [18] call sinFAC jsr sinFAC // [19] phi from main::@8 to main::@9 [phi:main::@8->main::@9] __b9_from___b8: @@ -1422,7 +1422,7 @@ main: { // [20] call mulFACbyMEM // [50] phi from main::@9 to mulFACbyMEM [phi:main::@9->mulFACbyMEM] mulFACbyMEM_from___b9: - // [50] phi mulFACbyMEM::mem#2 = main::f_127 [phi:main::@9->mulFACbyMEM#0] -- call_phi_near + // [50] phi mulFACbyMEM::mem#2 = main::f_127 [phi:main::@9->mulFACbyMEM#0] -- pbuz1=pbuc1 lda #f_127 @@ -1434,7 +1434,7 @@ main: { // main::@10 __b10: // [22] call addMEMtoFAC - // [64] phi from main::@10 to addMEMtoFAC [phi:main::@10->addMEMtoFAC] -- call_phi_near + // [64] phi from main::@10 to addMEMtoFAC [phi:main::@10->addMEMtoFAC] addMEMtoFAC_from___b10: jsr addMEMtoFAC // [23] phi from main::@10 to main::@11 [phi:main::@10->main::@11] @@ -1442,14 +1442,14 @@ main: { jmp __b11 // main::@11 __b11: - // [24] call getFAC -- call_phi_near + // [24] call getFAC jsr getFAC // [25] getFAC::return#2 = getFAC::return#0 jmp __b12 // main::@12 __b12: // [26] print_uint::w#0 = getFAC::return#2 - // [27] call print_uint -- call_phi_near + // [27] call print_uint jsr print_uint // [28] phi from main::@12 to main::@13 [phi:main::@12->main::@13] __b13_from___b12: @@ -1457,7 +1457,7 @@ main: { // main::@13 __b13: // [29] call print_ln - // [77] phi from main::@13 to print_ln [phi:main::@13->print_ln] -- call_phi_near + // [77] phi from main::@13 to print_ln [phi:main::@13->print_ln] print_ln_from___b13: jsr print_ln jmp __b14 @@ -1702,7 +1702,7 @@ print_uint: { // [82] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [82] phi print_char_cursor#33 = print_char_cursor#34 [phi:print_uint->print_uchar#0] -- register_copy - // [82] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [82] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -1713,7 +1713,7 @@ print_uint: { // [82] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [82] phi print_char_cursor#33 = print_char_cursor#25 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [82] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [82] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -1772,7 +1772,7 @@ print_uchar: { // [90] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [90] phi print_char_cursor#24 = print_char_cursor#33 [phi:print_uchar->print_char#0] -- register_copy - // [90] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [90] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -1786,7 +1786,7 @@ print_uchar: { // [90] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [90] phi print_char_cursor#24 = print_char_cursor#25 [phi:print_uchar::@1->print_char#0] -- register_copy - // [90] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [90] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -2062,7 +2062,7 @@ main: { // setFAC(1275) // [1] call setFAC // [34] phi from main to setFAC [phi:main->setFAC] - // [34] phi setFAC::prepareMEM1_mem#0 = $4fb [phi:main->setFAC#0] -- call_phi_near + // [34] phi setFAC::prepareMEM1_mem#0 = $4fb [phi:main->setFAC#0] -- vwuz1=vwuc1 lda #<$4fb sta.z setFAC.prepareMEM1_mem lda #>$4fb @@ -2071,14 +2071,14 @@ main: { // [2] phi from main to main::@2 [phi:main->main::@2] // main::@2 // divFACby10() - // [3] call divFACby10 -- call_phi_near + // [3] call divFACby10 jsr divFACby10 // [4] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // setMEMtoFAC(f_127) // [5] call setMEMtoFAC // [43] phi from main::@3 to setMEMtoFAC [phi:main::@3->setMEMtoFAC] - // [43] phi setMEMtoFAC::mem#2 = main::f_127 [phi:main::@3->setMEMtoFAC#0] -- call_phi_near + // [43] phi setMEMtoFAC::mem#2 = main::f_127 [phi:main::@3->setMEMtoFAC#0] -- pbuz1=pbuc1 lda #f_127 @@ -2108,14 +2108,14 @@ main: { sta.z setFAC.w+1 // [8] call setFAC // [34] phi from main::@1 to setFAC [phi:main::@1->setFAC] - // [34] phi setFAC::prepareMEM1_mem#0 = setFAC::w#1 [phi:main::@1->setFAC#0] -- call_phi_near + // [34] phi setFAC::prepareMEM1_mem#0 = setFAC::w#1 [phi:main::@1->setFAC#0] -- register_copy jsr setFAC // [9] phi from main::@1 to main::@4 [phi:main::@1->main::@4] // main::@4 // mulFACbyMEM(f_2pi) // [10] call mulFACbyMEM // [50] phi from main::@4 to mulFACbyMEM [phi:main::@4->mulFACbyMEM] - // [50] phi mulFACbyMEM::mem#2 = main::f_2pi [phi:main::@4->mulFACbyMEM#0] -- call_phi_near + // [50] phi mulFACbyMEM::mem#2 = main::f_2pi [phi:main::@4->mulFACbyMEM#0] -- pbuz1=pbuc1 lda #f_2pi @@ -2126,7 +2126,7 @@ main: { // setMEMtoFAC(f_i) // [12] call setMEMtoFAC // [43] phi from main::@5 to setMEMtoFAC [phi:main::@5->setMEMtoFAC] - // [43] phi setMEMtoFAC::mem#2 = main::f_i [phi:main::@5->setMEMtoFAC#0] -- call_phi_near + // [43] phi setMEMtoFAC::mem#2 = main::f_i [phi:main::@5->setMEMtoFAC#0] -- pbuz1=pbuc1 lda #f_i @@ -2137,7 +2137,7 @@ main: { // setFAC(25) // [14] call setFAC // [34] phi from main::@6 to setFAC [phi:main::@6->setFAC] - // [34] phi setFAC::prepareMEM1_mem#0 = $19 [phi:main::@6->setFAC#0] -- call_phi_near + // [34] phi setFAC::prepareMEM1_mem#0 = $19 [phi:main::@6->setFAC#0] -- vwuz1=vbuc1 lda #<$19 sta.z setFAC.prepareMEM1_mem lda #>$19 @@ -2147,19 +2147,19 @@ main: { // main::@7 // divMEMbyFAC(f_i) // [16] call divMEMbyFAC - // [57] phi from main::@7 to divMEMbyFAC [phi:main::@7->divMEMbyFAC] -- call_phi_near + // [57] phi from main::@7 to divMEMbyFAC [phi:main::@7->divMEMbyFAC] jsr divMEMbyFAC // [17] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 // sinFAC() - // [18] call sinFAC -- call_phi_near + // [18] call sinFAC jsr sinFAC // [19] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 // mulFACbyMEM(f_127) // [20] call mulFACbyMEM // [50] phi from main::@9 to mulFACbyMEM [phi:main::@9->mulFACbyMEM] - // [50] phi mulFACbyMEM::mem#2 = main::f_127 [phi:main::@9->mulFACbyMEM#0] -- call_phi_near + // [50] phi mulFACbyMEM::mem#2 = main::f_127 [phi:main::@9->mulFACbyMEM#0] -- pbuz1=pbuc1 lda #f_127 @@ -2169,24 +2169,24 @@ main: { // main::@10 // addMEMtoFAC(f_127) // [22] call addMEMtoFAC - // [64] phi from main::@10 to addMEMtoFAC [phi:main::@10->addMEMtoFAC] -- call_phi_near + // [64] phi from main::@10 to addMEMtoFAC [phi:main::@10->addMEMtoFAC] jsr addMEMtoFAC // [23] phi from main::@10 to main::@11 [phi:main::@10->main::@11] // main::@11 // getFAC() - // [24] call getFAC -- call_phi_near + // [24] call getFAC jsr getFAC // [25] getFAC::return#2 = getFAC::return#0 // main::@12 // print_uint(getFAC()) // [26] print_uint::w#0 = getFAC::return#2 - // [27] call print_uint -- call_phi_near + // [27] call print_uint jsr print_uint // [28] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 // print_ln() // [29] call print_ln - // [77] phi from main::@13 to print_ln [phi:main::@13->print_ln] -- call_phi_near + // [77] phi from main::@13 to print_ln [phi:main::@13->print_ln] jsr print_ln // main::@14 // for(byte i : 1..25) @@ -2422,7 +2422,7 @@ print_uint: { // [73] call print_uchar // [82] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [82] phi print_char_cursor#33 = print_char_cursor#34 [phi:print_uint->print_uchar#0] -- register_copy - // [82] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [82] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -2431,7 +2431,7 @@ print_uint: { // [75] call print_uchar // [82] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [82] phi print_char_cursor#33 = print_char_cursor#25 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [82] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [82] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@return // } @@ -2488,7 +2488,7 @@ print_uchar: { // Table of hexadecimal digits // [90] phi from print_uchar to print_char [phi:print_uchar->print_char] // [90] phi print_char_cursor#24 = print_char_cursor#33 [phi:print_uchar->print_char#0] -- register_copy - // [90] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [90] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -2501,7 +2501,7 @@ print_uchar: { // [88] call print_char // [90] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [90] phi print_char_cursor#24 = print_char_cursor#25 [phi:print_uchar::@1->print_char#0] -- register_copy - // [90] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [90] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/sinusgen16.log b/src/test/ref/sinusgen16.log index 3136a40cd..03d6776c4 100644 --- a/src/test/ref/sinusgen16.log +++ b/src/test/ref/sinusgen16.log @@ -2907,7 +2907,7 @@ main: { .label sw = $1a .label st1 = $24 // [1] call sin16s_gen - // [17] phi from main to sin16s_gen [phi:main->sin16s_gen] -- call_phi_near + // [17] phi from main to sin16s_gen [phi:main->sin16s_gen] sin16s_gen_from_main: jsr sin16s_gen // [2] phi from main to main::@5 [phi:main->main::@5] @@ -2916,7 +2916,7 @@ main: { // main::@5 __b5: // [3] call print_cls - // [32] phi from main::@5 to print_cls [phi:main::@5->print_cls] -- call_phi_near + // [32] phi from main::@5 to print_cls [phi:main::@5->print_cls] print_cls_from___b5: jsr print_cls // [4] phi from main::@5 to main::@1 [phi:main::@5->main::@1] @@ -2969,7 +2969,7 @@ main: { // [35] phi from main::@4 to print_str [phi:main::@4->print_str] print_str_from___b4: // [35] phi print_char_cursor#58 = print_char_cursor#20 [phi:main::@4->print_str#0] -- register_copy - // [35] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- call_phi_near + // [35] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -2983,7 +2983,7 @@ main: { // main::@3 __b3: // [12] print_sint::w#1 = main::sw#0 - // [13] call print_sint -- call_phi_near + // [13] call print_sint jsr print_sint // [14] phi from main::@3 to main::@6 [phi:main::@3->main::@6] __b6_from___b3: @@ -2994,7 +2994,7 @@ main: { // [35] phi from main::@6 to print_str [phi:main::@6->print_str] print_str_from___b6: // [35] phi print_char_cursor#58 = print_char_cursor#12 [phi:main::@6->print_str#0] -- register_copy - // [35] phi print_str::str#6 = main::str [phi:main::@6->print_str#1] -- call_phi_near + // [35] phi print_str::str#6 = main::str [phi:main::@6->print_str#1] -- pbuz1=pbuc1 lda #str @@ -3039,7 +3039,7 @@ sin16s_gen: { .label i = $12 // [18] call div32u16u // u[4.28] step = PI*2/wavelength - // [52] phi from sin16s_gen to div32u16u [phi:sin16s_gen->div32u16u] -- call_phi_near + // [52] phi from sin16s_gen to div32u16u [phi:sin16s_gen->div32u16u] div32u16u_from_sin16s_gen: jsr div32u16u // [19] div32u16u::return#0 = div32u16u::return#1 @@ -3097,7 +3097,7 @@ sin16s_gen: { sta.z sin16s.x+2 lda.z x+3 sta.z sin16s.x+3 - // [25] call sin16s -- call_phi_near + // [25] call sin16s jsr sin16s // [26] sin16s::return#0 = sin16s::return#1 jmp __b4 @@ -3149,7 +3149,7 @@ sin16s_gen: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [33] call memset - // [102] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [102] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -3190,7 +3190,7 @@ print_str: { // [108] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [108] phi print_char_cursor#36 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [108] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char jmp __b3 // print_str::@3 @@ -3219,7 +3219,7 @@ print_sint: { // [108] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] print_char_from___b3: // [108] phi print_char_cursor#36 = print_char_cursor#54 [phi:print_sint::@3->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near + // [108] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [45] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -3230,7 +3230,7 @@ print_sint: { // print_sint::@2 __b2: // [46] print_uint::w#0 = (unsigned int)print_sint::w#4 - // [47] call print_uint -- call_phi_near + // [47] call print_uint jsr print_uint jmp __breturn // print_sint::@return @@ -3246,7 +3246,7 @@ print_sint: { // [108] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] print_char_from___b1: // [108] phi print_char_cursor#36 = print_char_cursor#54 [phi:print_sint::@1->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near + // [108] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char jmp __b4 @@ -3278,7 +3278,7 @@ div32u16u: { sta.z divr16u.dividend lda #>PI2_u4f28>>$10 sta.z divr16u.dividend+1 - // [117] phi divr16u::rem#10 = 0 [phi:div32u16u->divr16u#1] -- call_phi_near + // [117] phi divr16u::rem#10 = 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta.z divr16u.rem lda #>0 @@ -3302,7 +3302,7 @@ div32u16u: { sta.z divr16u.dividend lda #>PI2_u4f28&$ffff sta.z divr16u.dividend+1 - // [117] phi divr16u::rem#10 = divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- call_phi_near + // [117] phi divr16u::rem#10 = divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy jsr divr16u // [58] divr16u::return#3 = divr16u::return#0 jmp __b2 @@ -3475,7 +3475,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- call_phi_near + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy jsr mulu16_sel // [73] mulu16_sel::return#0 = mulu16_sel::return#12 jmp __b7 @@ -3499,7 +3499,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- call_phi_near + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy jsr mulu16_sel // [78] mulu16_sel::return#1 = mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return @@ -3522,7 +3522,7 @@ sin16s: { sta.z mulu16_sel.v2 lda #>$10000/6 sta.z mulu16_sel.v2+1 - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- call_phi_near + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy jsr mulu16_sel // [82] mulu16_sel::return#2 = mulu16_sel::return#12 jmp __b9 @@ -3551,7 +3551,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- call_phi_near + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy jsr mulu16_sel // [88] mulu16_sel::return#10 = mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return @@ -3575,7 +3575,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- call_phi_near + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy jsr mulu16_sel // [93] mulu16_sel::return#11 = mulu16_sel::return#12 jmp __b11 @@ -3706,7 +3706,7 @@ print_uint: { // [113] call print_uchar // [144] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: - // [144] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near + // [144] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -3716,7 +3716,7 @@ print_uint: { // [115] call print_uchar // [144] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: - // [144] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near + // [144] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -3851,7 +3851,7 @@ mulu16_sel: { lda.z v1+1 sta.z mul16u.a+1 // [137] mul16u::b#0 = mulu16_sel::v2#5 - // [138] call mul16u -- call_phi_near + // [138] call mul16u jsr mul16u // [139] mul16u::return#0 = mul16u::res#2 jmp __b1 @@ -3898,7 +3898,7 @@ print_uchar: { // [108] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [108] phi print_char_cursor#36 = print_char_cursor#12 [phi:print_uchar->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- call_phi_near + // [108] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -3912,7 +3912,7 @@ print_uchar: { // [108] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [108] phi print_char_cursor#36 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [108] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -4468,13 +4468,13 @@ main: { .label st1 = $24 // sin16s_gen(sintab1, wavelength) // [1] call sin16s_gen - // [17] phi from main to sin16s_gen [phi:main->sin16s_gen] -- call_phi_near + // [17] phi from main to sin16s_gen [phi:main->sin16s_gen] jsr sin16s_gen // [2] phi from main to main::@5 [phi:main->main::@5] // main::@5 // print_cls() // [3] call print_cls - // [32] phi from main::@5 to print_cls [phi:main::@5->print_cls] -- call_phi_near + // [32] phi from main::@5 to print_cls [phi:main::@5->print_cls] jsr print_cls // [4] phi from main::@5 to main::@1 [phi:main::@5->main::@1] // [4] phi print_char_cursor#20 = print_screen#0 [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 @@ -4522,7 +4522,7 @@ main: { // [10] call print_str // [35] phi from main::@4 to print_str [phi:main::@4->print_str] // [35] phi print_char_cursor#58 = print_char_cursor#20 [phi:main::@4->print_str#0] -- register_copy - // [35] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- call_phi_near + // [35] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -4534,7 +4534,7 @@ main: { __b3: // print_sint(sw) // [12] print_sint::w#1 = main::sw#0 - // [13] call print_sint -- call_phi_near + // [13] call print_sint jsr print_sint // [14] phi from main::@3 to main::@6 [phi:main::@3->main::@6] // main::@6 @@ -4542,7 +4542,7 @@ main: { // [15] call print_str // [35] phi from main::@6 to print_str [phi:main::@6->print_str] // [35] phi print_char_cursor#58 = print_char_cursor#12 [phi:main::@6->print_str#0] -- register_copy - // [35] phi print_str::str#6 = main::str [phi:main::@6->print_str#1] -- call_phi_near + // [35] phi print_str::str#6 = main::str [phi:main::@6->print_str#1] -- pbuz1=pbuc1 lda #str @@ -4586,7 +4586,7 @@ sin16s_gen: { // unsigned long step = div32u16u(PI2_u4f28, wavelength) // [18] call div32u16u // u[4.28] step = PI*2/wavelength - // [52] phi from sin16s_gen to div32u16u [phi:sin16s_gen->div32u16u] -- call_phi_near + // [52] phi from sin16s_gen to div32u16u [phi:sin16s_gen->div32u16u] jsr div32u16u // unsigned long step = div32u16u(PI2_u4f28, wavelength) // [19] div32u16u::return#0 = div32u16u::return#1 @@ -4639,7 +4639,7 @@ sin16s_gen: { sta.z sin16s.x+2 lda.z x+3 sta.z sin16s.x+3 - // [25] call sin16s -- call_phi_near + // [25] call sin16s jsr sin16s // [26] sin16s::return#0 = sin16s::return#1 // sin16s_gen::@4 @@ -4693,7 +4693,7 @@ sin16s_gen: { print_cls: { // memset(print_screen, ' ', 1000) // [33] call memset - // [102] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [102] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -4729,7 +4729,7 @@ print_str: { // [40] call print_char // [108] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [108] phi print_char_cursor#36 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [108] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char // print_str::@3 // print_char(*(str++)); @@ -4755,7 +4755,7 @@ print_sint: { // [44] call print_char // [108] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] // [108] phi print_char_cursor#36 = print_char_cursor#54 [phi:print_sint::@3->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near + // [108] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [45] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -4764,7 +4764,7 @@ print_sint: { __b2: // print_uint((unsigned int)w) // [46] print_uint::w#0 = (unsigned int)print_sint::w#4 - // [47] call print_uint -- call_phi_near + // [47] call print_uint jsr print_uint // print_sint::@return // } @@ -4777,7 +4777,7 @@ print_sint: { // [50] call print_char // [108] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] // [108] phi print_char_cursor#36 = print_char_cursor#54 [phi:print_sint::@1->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near + // [108] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char // print_sint::@4 @@ -4808,7 +4808,7 @@ div32u16u: { sta.z divr16u.dividend lda #>PI2_u4f28>>$10 sta.z divr16u.dividend+1 - // [117] phi divr16u::rem#10 = 0 [phi:div32u16u->divr16u#1] -- call_phi_near + // [117] phi divr16u::rem#10 = 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta.z divr16u.rem sta.z divr16u.rem+1 @@ -4830,7 +4830,7 @@ div32u16u: { sta.z divr16u.dividend lda #>PI2_u4f28&$ffff sta.z divr16u.dividend+1 - // [117] phi divr16u::rem#10 = divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- call_phi_near + // [117] phi divr16u::rem#10 = divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy jsr divr16u // unsigned int quotient_lo = divr16u(WORD0(dividend), divisor, rem16u) // [58] divr16u::return#3 = divr16u::return#0 @@ -4999,7 +4999,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- call_phi_near + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy jsr mulu16_sel // unsigned int x2 = mulu16_sel(x1, x1, 0) // [73] mulu16_sel::return#0 = mulu16_sel::return#12 @@ -5022,7 +5022,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- call_phi_near + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy jsr mulu16_sel // unsigned int x3 = mulu16_sel(x2, x1, 1) // [78] mulu16_sel::return#1 = mulu16_sel::return#12 -- vwuz1=vwuz2 @@ -5044,7 +5044,7 @@ sin16s: { sta.z mulu16_sel.v2 lda #>$10000/6 sta.z mulu16_sel.v2+1 - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- call_phi_near + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy jsr mulu16_sel // unsigned int x3_6 = mulu16_sel(x3, $10000/6, 1) // [82] mulu16_sel::return#2 = mulu16_sel::return#12 @@ -5073,7 +5073,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- call_phi_near + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy jsr mulu16_sel // unsigned int x4 = mulu16_sel(x3, x1, 0) // [88] mulu16_sel::return#10 = mulu16_sel::return#12 -- vwuz1=vwuz2 @@ -5096,7 +5096,7 @@ sin16s: { // [135] phi mulu16_sel::select#5 = 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [135] phi mulu16_sel::v2#5 = mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy - // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- call_phi_near + // [135] phi mulu16_sel::v1#5 = mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy jsr mulu16_sel // unsigned int x5 = mulu16_sel(x4, x1, 0) // [93] mulu16_sel::return#11 = mulu16_sel::return#12 @@ -5222,7 +5222,7 @@ print_uint: { ldx.z w+1 // [113] call print_uchar // [144] phi from print_uint to print_uchar [phi:print_uint->print_uchar] - // [144] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near + // [144] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -5230,7 +5230,7 @@ print_uint: { ldx.z w // [115] call print_uchar // [144] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] - // [144] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near + // [144] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy jsr print_uchar // print_uint::@return // } @@ -5359,7 +5359,7 @@ mulu16_sel: { lda.z v1+1 sta.z mul16u.a+1 // [137] mul16u::b#0 = mulu16_sel::v2#5 - // [138] call mul16u -- call_phi_near + // [138] call mul16u jsr mul16u // [139] mul16u::return#0 = mul16u::res#2 // mulu16_sel::@1 @@ -5406,7 +5406,7 @@ print_uchar: { // Table of hexadecimal digits // [108] phi from print_uchar to print_char [phi:print_uchar->print_char] // [108] phi print_char_cursor#36 = print_char_cursor#12 [phi:print_uchar->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- call_phi_near + // [108] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -5419,7 +5419,7 @@ print_uchar: { // [150] call print_char // [108] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [108] phi print_char_cursor#36 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [108] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [108] phi print_char::ch#5 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/sqr-delta.log b/src/test/ref/sqr-delta.log index a1c585f80..8e9d5d606 100644 --- a/src/test/ref/sqr-delta.log +++ b/src/test/ref/sqr-delta.log @@ -307,7 +307,7 @@ ASSEMBLER BEFORE OPTIMIZATION main: { .label __0 = $a // [1] call ifunc - // [6] phi from main to ifunc [phi:main->ifunc] -- call_phi_near + // [6] phi from main to ifunc [phi:main->ifunc] ifunc_from_main: jsr ifunc // [2] ifunc::return#2 = ifunc::return#0 @@ -517,7 +517,7 @@ main: { .label __0 = $a // ifunc(8) // [1] call ifunc - // [6] phi from main to ifunc [phi:main->ifunc] -- call_phi_near + // [6] phi from main to ifunc [phi:main->ifunc] jsr ifunc // ifunc(8) // [2] ifunc::return#2 = ifunc::return#0 diff --git a/src/test/ref/stack-relative-addressing.log b/src/test/ref/stack-relative-addressing.log index 997b6394f..086bef0c7 100644 --- a/src/test/ref/stack-relative-addressing.log +++ b/src/test/ref/stack-relative-addressing.log @@ -123,7 +123,7 @@ main: { pha lda #'3' pha - // [1] call peek_stack -- call_phi_near + // [1] call peek_stack // Then call a function jsr peek_stack jmp __b1 @@ -209,7 +209,7 @@ main: { lda #'3' pha // peek_stack() - // [1] call peek_stack -- call_phi_near + // [1] call peek_stack // Then call a function jsr peek_stack // main::@1 diff --git a/src/test/ref/stars-2.log b/src/test/ref/stars-2.log index 41f56edd7..ef8de9f69 100644 --- a/src/test/ref/stars-2.log +++ b/src/test/ref/stars-2.log @@ -3903,7 +3903,7 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -3911,7 +3911,7 @@ __start: { // __start::@1 __b1: // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -3947,7 +3947,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -3988,7 +3988,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln jmp __breturn // cputc::@return @@ -4000,7 +4000,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln jmp __breturn } @@ -4008,7 +4008,7 @@ cputc: { main: { .label i = $17 // [28] call clrscr - // [61] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [61] phi from main to clrscr [phi:main->clrscr] clrscr_from_main: jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] @@ -4036,7 +4036,7 @@ main: { // [33] call printf_uchar // [77] phi from main::@2 to printf_uchar [phi:main::@2->printf_uchar] printf_uchar_from___b2: - // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#0 [phi:main::@2->printf_uchar#0] -- call_phi_near + // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#0 [phi:main::@2->printf_uchar#0] -- register_copy jsr printf_uchar // [34] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -4051,7 +4051,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [84] phi printf_str::s#5 = main::s [phi:main::@3->printf_str#1] -- call_phi_near + // [84] phi printf_str::s#5 = main::s [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -4066,7 +4066,7 @@ main: { // [37] call printf_uchar // [77] phi from main::@4 to printf_uchar [phi:main::@4->printf_uchar] printf_uchar_from___b4: - // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#1 [phi:main::@4->printf_uchar#0] -- call_phi_near + // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#1 [phi:main::@4->printf_uchar#0] -- register_copy jsr printf_uchar // [38] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: @@ -4081,7 +4081,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [84] phi printf_str::s#5 = main::s1 [phi:main::@5->printf_str#1] -- call_phi_near + // [84] phi printf_str::s#5 = main::s1 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -4226,7 +4226,7 @@ cputln: { sta.z conio_cursor_x // [58] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [59] call cscroll -- call_phi_near + // [59] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -4349,7 +4349,7 @@ printf_uchar: { // [79] uctoa::value#1 = printf_uchar::uvalue#2 // [80] call uctoa // Format number into buffer - // [106] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] -- call_phi_near + // [106] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] uctoa_from___b1: jsr uctoa jmp __b2 @@ -4359,7 +4359,7 @@ printf_uchar: { lda printf_buffer // [82] call printf_number_buffer // Print using format - // [125] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] -- call_phi_near + // [125] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] printf_number_buffer_from___b2: jsr printf_number_buffer jmp __breturn @@ -4430,7 +4430,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [133] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [133] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -4449,7 +4449,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [133] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [133] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -4465,7 +4465,7 @@ cscroll: { memset_from___b3: // [143] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [143] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [143] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -4481,7 +4481,7 @@ cscroll: { memset_from___b4: // [143] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [143] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [143] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -4606,7 +4606,7 @@ uctoa: { // [119] uctoa_append::value#0 = uctoa::value#2 // [120] uctoa_append::sub#0 = uctoa::digit_value#0 // [121] call uctoa_append - // [151] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near + // [151] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] uctoa_append_from___b5: jsr uctoa_append // [122] uctoa_append::return#0 = uctoa_append::value#2 @@ -4664,7 +4664,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [84] phi printf_str::s#5 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near + // [84] phi printf_str::s#5 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 lda #buffer_digits @@ -5278,12 +5278,12 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [7] call main - // [27] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [27] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [8] return @@ -5312,7 +5312,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy // conio_c64_init::@return // } @@ -5351,7 +5351,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln // cputc::@return __breturn: @@ -5362,7 +5362,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln rts } @@ -5371,7 +5371,7 @@ main: { .label i = $17 // clrscr() // [28] call clrscr - // [61] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [61] phi from main to clrscr [phi:main->clrscr] jsr clrscr // [29] phi from main to main::@1 [phi:main->main::@1] // [29] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 @@ -5396,7 +5396,7 @@ main: { ldx stars,y // [33] call printf_uchar // [77] phi from main::@2 to printf_uchar [phi:main::@2->printf_uchar] - // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#0 [phi:main::@2->printf_uchar#0] -- call_phi_near + // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#0 [phi:main::@2->printf_uchar#0] -- register_copy jsr printf_uchar // [34] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 @@ -5408,7 +5408,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [84] phi printf_str::s#5 = main::s [phi:main::@3->printf_str#1] -- call_phi_near + // [84] phi printf_str::s#5 = main::s [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -5421,7 +5421,7 @@ main: { ldx stars+5,y // [37] call printf_uchar // [77] phi from main::@4 to printf_uchar [phi:main::@4->printf_uchar] - // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#1 [phi:main::@4->printf_uchar#0] -- call_phi_near + // [77] phi printf_uchar::uvalue#2 = printf_uchar::uvalue#1 [phi:main::@4->printf_uchar#0] -- register_copy jsr printf_uchar // [38] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 @@ -5433,7 +5433,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [84] phi printf_str::s#5 = main::s1 [phi:main::@5->printf_str#1] -- call_phi_near + // [84] phi printf_str::s#5 = main::s1 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -5579,7 +5579,7 @@ cputln: { // [58] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [59] call cscroll -- call_phi_near + // [59] call cscroll jsr cscroll // cputln::@return // } @@ -5702,7 +5702,7 @@ printf_uchar: { // [79] uctoa::value#1 = printf_uchar::uvalue#2 // [80] call uctoa // Format number into buffer - // [106] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] -- call_phi_near + // [106] phi from printf_uchar::@1 to uctoa [phi:printf_uchar::@1->uctoa] jsr uctoa // printf_uchar::@2 // printf_number_buffer(putc, printf_buffer, format) @@ -5710,7 +5710,7 @@ printf_uchar: { lda printf_buffer // [82] call printf_number_buffer // Print using format - // [125] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] -- call_phi_near + // [125] phi from printf_uchar::@2 to printf_number_buffer [phi:printf_uchar::@2->printf_number_buffer] jsr printf_number_buffer // printf_uchar::@return // } @@ -5775,7 +5775,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [133] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [133] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -5791,7 +5791,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [133] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [133] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -5804,7 +5804,7 @@ cscroll: { // [143] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [143] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [143] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [143] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -5817,7 +5817,7 @@ cscroll: { // [143] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [143] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [143] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [143] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -5940,7 +5940,7 @@ uctoa: { // [119] uctoa_append::value#0 = uctoa::value#2 // [120] uctoa_append::sub#0 = uctoa::digit_value#0 // [121] call uctoa_append - // [151] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near + // [151] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] jsr uctoa_append // uctoa_append(buffer++, value, digit_value) // [122] uctoa_append::return#0 = uctoa_append::value#2 @@ -5992,7 +5992,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [84] phi printf_str::s#5 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near + // [84] phi printf_str::s#5 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 lda #buffer_digits diff --git a/src/test/ref/static-init-code-0.log b/src/test/ref/static-init-code-0.log index 1f7fcb3d1..30a96a03e 100644 --- a/src/test/ref/static-init-code-0.log +++ b/src/test/ref/static-init-code-0.log @@ -161,7 +161,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [4] call main -- call_phi_near + // [4] call main jsr main jmp __breturn // __start::@return @@ -246,7 +246,7 @@ __start: { sta.z c2 // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [4] call main -- call_phi_near + // [4] call main jsr main // __start::@return // [5] return diff --git a/src/test/ref/strcmp-0.log b/src/test/ref/strcmp-0.log index 9481ebe15..3f97576c7 100644 --- a/src/test/ref/strcmp-0.log +++ b/src/test/ref/strcmp-0.log @@ -6231,7 +6231,7 @@ __start: { // [5] conio_textcolor = LIGHT_BLUE -- vbuz1=vbuc1 lda #LIGHT_BLUE sta.z conio_textcolor - // [6] call conio_c64_init -- call_phi_near + // [6] call conio_c64_init jsr conio_c64_init // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: @@ -6239,7 +6239,7 @@ __start: { // __start::@1 __b1: // [8] call main - // [28] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [28] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -6275,7 +6275,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [14] gotoxy::y#2 = conio_c64_init::line#2 - // [15] call gotoxy -- call_phi_near + // [15] call gotoxy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -6316,7 +6316,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [24] call cputln -- call_phi_near + // [24] call cputln jsr cputln jmp __breturn // cputc::@return @@ -6328,7 +6328,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [27] call cputln -- call_phi_near + // [27] call cputln jsr cputln jmp __breturn } @@ -6342,7 +6342,7 @@ main: { sta.z strcmp.s2 lda #>str2 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str1 [phi:main->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str1 [phi:main->strcmp#1] -- pbuz1=pbuc1 lda #str1 @@ -6364,7 +6364,7 @@ main: { lda #>message sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#0 [phi:main::@2->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@2->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@2->assert_cmp#2] -- vbsz1=vbsc1 lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -6381,7 +6381,7 @@ main: { sta.z strcmp.s2 lda #>str21 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str11 [phi:main::@3->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str11 [phi:main::@3->strcmp#1] -- pbuz1=pbuc1 lda #str11 @@ -6403,7 +6403,7 @@ main: { lda #>message1 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#1 [phi:main::@4->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@4->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@4->assert_cmp#2] -- vbsz1=vbsc1 lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -6420,7 +6420,7 @@ main: { sta.z strcmp.s2 lda #>str11 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str12 [phi:main::@5->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str12 [phi:main::@5->strcmp#1] -- pbuz1=pbuc1 lda #str12 @@ -6442,7 +6442,7 @@ main: { lda #>message2 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#2 [phi:main::@6->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@6->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@6->assert_cmp#2] -- vbsz1=vbsc1 lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -6459,7 +6459,7 @@ main: { sta.z strcmp.s2 lda #>str13 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str13 [phi:main::@7->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str13 [phi:main::@7->strcmp#1] -- pbuz1=pbuc1 lda #str13 @@ -6481,7 +6481,7 @@ main: { lda #>message3 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#3 [phi:main::@8->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@8->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@8->assert_cmp#2] -- vbsz1=vbsc1 lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -6498,7 +6498,7 @@ main: { sta.z strcmp.s2 lda #>str14 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str14 [phi:main::@9->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str14 [phi:main::@9->strcmp#1] -- pbuz1=pbuc1 lda #str14 @@ -6520,7 +6520,7 @@ main: { lda #>message4 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#4 [phi:main::@10->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@10->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@10->assert_cmp#2] -- vbsz1=vbsc1 lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -6537,7 +6537,7 @@ main: { sta.z strcmp.s2 lda #>str25 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str15 [phi:main::@11->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str15 [phi:main::@11->strcmp#1] -- pbuz1=pbuc1 lda #str15 @@ -6559,7 +6559,7 @@ main: { lda #>message5 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#5 [phi:main::@12->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@12->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@12->assert_cmp#2] -- vbsz1=vbsc1 lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -6576,7 +6576,7 @@ main: { sta.z strcmp.s2 lda #>str26 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str16 [phi:main::@13->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str16 [phi:main::@13->strcmp#1] -- pbuz1=pbuc1 lda #str16 @@ -6598,7 +6598,7 @@ main: { lda #>message6 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#6 [phi:main::@14->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@14->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@14->assert_cmp#2] -- vbsz1=vbsc1 lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -6615,7 +6615,7 @@ main: { sta.z strcmp.s2 lda #>str27 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str16 [phi:main::@15->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str16 [phi:main::@15->strcmp#1] -- pbuz1=pbuc1 lda #str16 @@ -6637,7 +6637,7 @@ main: { lda #>message7 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#7 [phi:main::@16->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@16->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@16->assert_cmp#2] -- vbsz1=vbsc1 lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -6659,7 +6659,7 @@ main: { sta.z strncmp.s2 lda #>str28 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str18 [phi:main::@17->strncmp#2] -- call_phi_near + // [181] phi strncmp::s1#0 = main::str18 [phi:main::@17->strncmp#2] -- pbuz1=pbuc1 lda #str18 @@ -6681,7 +6681,7 @@ main: { lda #>message8 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#8 [phi:main::@18->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@18->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@18->assert_cmp#2] -- vbsz1=vbsc1 lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -6703,7 +6703,7 @@ main: { sta.z strncmp.s2 lda #>str29 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str19 [phi:main::@19->strncmp#2] -- call_phi_near + // [181] phi strncmp::s1#0 = main::str19 [phi:main::@19->strncmp#2] -- pbuz1=pbuc1 lda #str19 @@ -6725,7 +6725,7 @@ main: { lda #>message9 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#9 [phi:main::@20->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@20->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@20->assert_cmp#2] -- vbsz1=vbsc1 lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -6747,7 +6747,7 @@ main: { sta.z strncmp.s2 lda #>str210 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str21 [phi:main::@21->strncmp#2] -- call_phi_near + // [181] phi strncmp::s1#0 = main::str21 [phi:main::@21->strncmp#2] -- pbuz1=pbuc1 lda #str21 @@ -6769,7 +6769,7 @@ main: { lda #>message10 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#10 [phi:main::@22->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@22->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@22->assert_cmp#2] -- vbsz1=vbsc1 lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -6791,7 +6791,7 @@ main: { sta.z strncmp.s2 lda #>str211 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str111 [phi:main::@23->strncmp#2] -- call_phi_near + // [181] phi strncmp::s1#0 = main::str111 [phi:main::@23->strncmp#2] -- pbuz1=pbuc1 lda #str111 @@ -6813,7 +6813,7 @@ main: { lda #>message11 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#11 [phi:main::@24->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@24->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@24->assert_cmp#2] -- vbsz1=vbsc1 lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -6835,7 +6835,7 @@ main: { sta.z strncmp.s2 lda #>str212 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str12 [phi:main::@25->strncmp#2] -- call_phi_near + // [181] phi strncmp::s1#0 = main::str12 [phi:main::@25->strncmp#2] -- pbuz1=pbuc1 lda #str12 @@ -6857,7 +6857,7 @@ main: { lda #>message12 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#12 [phi:main::@26->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@26->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@26->assert_cmp#2] -- vbsz1=vbsc1 lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -6879,7 +6879,7 @@ main: { sta.z memcmp.str2 lda #>__35 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::str12 [phi:main::@27->memcmp#2] -- call_phi_near + // [193] phi memcmp::str1#4 = (const void *)main::str12 [phi:main::@27->memcmp#2] -- pvoz1=pvoc1 lda #str12 @@ -6901,7 +6901,7 @@ main: { lda #>message13 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#13 [phi:main::@28->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@28->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@28->assert_cmp#2] -- vbsz1=vbsc1 lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -6923,7 +6923,7 @@ main: { sta.z memcmp.str2 lda #>str13 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::str13 [phi:main::@29->memcmp#2] -- call_phi_near + // [193] phi memcmp::str1#4 = (const void *)main::str13 [phi:main::@29->memcmp#2] -- pvoz1=pvoc1 lda #str13 @@ -6945,7 +6945,7 @@ main: { lda #>message14 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#14 [phi:main::@30->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@30->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@30->assert_cmp#2] -- vbsz1=vbsc1 lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -6967,7 +6967,7 @@ main: { sta.z memcmp.str2 lda #>__39 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::$38 [phi:main::@31->memcmp#2] -- call_phi_near + // [193] phi memcmp::str1#4 = (const void *)main::$38 [phi:main::@31->memcmp#2] -- pvoz1=pvoc1 lda #<__38 sta.z memcmp.str1 lda #>__38 @@ -6989,7 +6989,7 @@ main: { lda #>message15 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#15 [phi:main::@32->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@32->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@32->assert_cmp#2] -- vbsz1=vbsc1 lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -7011,7 +7011,7 @@ main: { sta.z memcmp.str2 lda #>str111 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::str14 [phi:main::@33->memcmp#2] -- call_phi_near + // [193] phi memcmp::str1#4 = (const void *)main::str14 [phi:main::@33->memcmp#2] -- pvoz1=pvoc1 lda #str14 @@ -7033,7 +7033,7 @@ main: { lda #>message16 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#16 [phi:main::@34->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@34->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@34->assert_cmp#2] -- vbsz1=vbsc1 lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -7250,7 +7250,7 @@ cputln: { sta.z conio_cursor_x // [131] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [132] call cscroll -- call_phi_near + // [132] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -7401,7 +7401,7 @@ assert_cmp: { // [153] call textcolor // [219] phi from assert_cmp::@8 to textcolor [phi:assert_cmp::@8->textcolor] textcolor_from___b8: - // [219] phi textcolor::color#2 = RED [phi:assert_cmp::@8->textcolor#0] -- call_phi_near + // [219] phi textcolor::color#2 = RED [phi:assert_cmp::@8->textcolor#0] -- vbuaa=vbuc1 lda #RED jsr textcolor // [154] phi from assert_cmp::@8 to assert_cmp::@12 [phi:assert_cmp::@8->assert_cmp::@12] @@ -7417,7 +7417,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s2 [phi:assert_cmp::@12->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = assert_cmp::s2 [phi:assert_cmp::@12->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -7431,7 +7431,7 @@ assert_cmp: { // [157] call printf_schar // [231] phi from assert_cmp::@13 to printf_schar [phi:assert_cmp::@13->printf_schar] printf_schar_from___b13: - // [231] phi printf_schar::value#3 = printf_schar::value#1 [phi:assert_cmp::@13->printf_schar#0] -- call_phi_near + // [231] phi printf_schar::value#3 = printf_schar::value#1 [phi:assert_cmp::@13->printf_schar#0] -- register_copy jsr printf_schar // [158] phi from assert_cmp::@13 to assert_cmp::@14 [phi:assert_cmp::@13->assert_cmp::@14] __b14_from___b13: @@ -7446,7 +7446,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s3 [phi:assert_cmp::@14->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = assert_cmp::s3 [phi:assert_cmp::@14->printf_str#1] -- pbuz1=pbuc1 lda #s3 @@ -7460,7 +7460,7 @@ assert_cmp: { // [161] call printf_schar // [231] phi from assert_cmp::@15 to printf_schar [phi:assert_cmp::@15->printf_schar] printf_schar_from___b15: - // [231] phi printf_schar::value#3 = printf_schar::value#2 [phi:assert_cmp::@15->printf_schar#0] -- call_phi_near + // [231] phi printf_schar::value#3 = printf_schar::value#2 [phi:assert_cmp::@15->printf_schar#0] -- register_copy jsr printf_schar // [162] phi from assert_cmp::@15 to assert_cmp::@16 [phi:assert_cmp::@15->assert_cmp::@16] __b16_from___b15: @@ -7475,7 +7475,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s4 [phi:assert_cmp::@16->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = assert_cmp::s4 [phi:assert_cmp::@16->printf_str#1] -- pbuz1=pbuc1 lda #s4 @@ -7488,7 +7488,7 @@ assert_cmp: { // [165] call printf_string // [242] phi from assert_cmp::@17 to printf_string [phi:assert_cmp::@17->printf_string] printf_string_from___b17: - // [242] phi printf_string::str#2 = printf_string::str#1 [phi:assert_cmp::@17->printf_string#0] -- call_phi_near + // [242] phi printf_string::str#2 = printf_string::str#1 [phi:assert_cmp::@17->printf_string#0] -- register_copy jsr printf_string // [166] phi from assert_cmp::@17 to assert_cmp::@18 [phi:assert_cmp::@17->assert_cmp::@18] __b18_from___b17: @@ -7503,7 +7503,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@18->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@18->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -7522,7 +7522,7 @@ assert_cmp: { // [170] call textcolor // [219] phi from assert_cmp::@1 to textcolor [phi:assert_cmp::@1->textcolor] textcolor_from___b1: - // [219] phi textcolor::color#2 = GREEN [phi:assert_cmp::@1->textcolor#0] -- call_phi_near + // [219] phi textcolor::color#2 = GREEN [phi:assert_cmp::@1->textcolor#0] -- vbuaa=vbuc1 lda #GREEN jsr textcolor // [171] phi from assert_cmp::@1 to assert_cmp::@9 [phi:assert_cmp::@1->assert_cmp::@9] @@ -7538,7 +7538,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s [phi:assert_cmp::@9->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = assert_cmp::s [phi:assert_cmp::@9->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -7551,7 +7551,7 @@ assert_cmp: { // [174] call printf_string // [242] phi from assert_cmp::@10 to printf_string [phi:assert_cmp::@10->printf_string] printf_string_from___b10: - // [242] phi printf_string::str#2 = printf_string::str#0 [phi:assert_cmp::@10->printf_string#0] -- call_phi_near + // [242] phi printf_string::str#2 = printf_string::str#0 [phi:assert_cmp::@10->printf_string#0] -- register_copy jsr printf_string // [175] phi from assert_cmp::@10 to assert_cmp::@11 [phi:assert_cmp::@10->assert_cmp::@11] __b11_from___b10: @@ -7566,7 +7566,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@11->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@11->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -7819,7 +7819,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [246] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [246] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -7838,7 +7838,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [246] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [246] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -7854,7 +7854,7 @@ cscroll: { memset_from___b3: // [256] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [256] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [256] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -7869,7 +7869,7 @@ cscroll: { // [256] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] memset_from___b4: // [256] phi memset::c#4 = memset::c#1 [phi:cscroll::@4->memset#0] -- register_copy - // [256] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [256] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -7988,7 +7988,7 @@ printf_schar: { __b2: // [237] uctoa::value#1 = (char)printf_schar::value#5 // [238] call uctoa - // [264] phi from printf_schar::@2 to uctoa [phi:printf_schar::@2->uctoa] -- call_phi_near + // [264] phi from printf_schar::@2 to uctoa [phi:printf_schar::@2->uctoa] uctoa_from___b2: jsr uctoa jmp __b3 @@ -7998,7 +7998,7 @@ printf_schar: { lda printf_buffer // [240] call printf_number_buffer // Print using format - // [283] phi from printf_schar::@3 to printf_number_buffer [phi:printf_schar::@3->printf_number_buffer] -- call_phi_near + // [283] phi from printf_schar::@3 to printf_number_buffer [phi:printf_schar::@3->printf_number_buffer] printf_number_buffer_from___b3: jsr printf_number_buffer jmp __breturn @@ -8029,7 +8029,7 @@ printf_string: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- register_copy jsr printf_str jmp __breturn // printf_string::@return @@ -8239,7 +8239,7 @@ uctoa: { // [277] uctoa_append::value#0 = uctoa::value#2 // [278] uctoa_append::sub#0 = uctoa::digit_value#0 // [279] call uctoa_append - // [291] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near + // [291] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] uctoa_append_from___b5: jsr uctoa_append // [280] uctoa_append::return#0 = uctoa_append::value#2 @@ -8297,7 +8297,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 lda #buffer_digits @@ -9187,12 +9187,12 @@ __start: { lda #LIGHT_BLUE sta.z conio_textcolor // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [6] call conio_c64_init -- call_phi_near + // [6] call conio_c64_init jsr conio_c64_init // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [8] call main - // [28] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [28] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [9] return @@ -9221,7 +9221,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [14] gotoxy::y#2 = conio_c64_init::line#2 - // [15] call gotoxy -- call_phi_near + // [15] call gotoxy jsr gotoxy // conio_c64_init::@return // } @@ -9260,7 +9260,7 @@ cputc: { // [23] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [24] call cputln -- call_phi_near + // [24] call cputln jsr cputln // cputc::@return __breturn: @@ -9271,7 +9271,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [27] call cputln -- call_phi_near + // [27] call cputln jsr cputln rts } @@ -9285,7 +9285,7 @@ main: { sta.z strcmp.s2 lda #>str2 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str1 [phi:main->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str1 [phi:main->strcmp#1] -- pbuz1=pbuc1 lda #str1 @@ -9306,7 +9306,7 @@ main: { lda #>message sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#0 [phi:main::@2->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@2->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@2->assert_cmp#2] -- vbsz1=vbsc1 lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -9320,7 +9320,7 @@ main: { sta.z strcmp.s2 lda #>str21 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str11 [phi:main::@3->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str11 [phi:main::@3->strcmp#1] -- pbuz1=pbuc1 lda #str11 @@ -9341,7 +9341,7 @@ main: { lda #>message1 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#1 [phi:main::@4->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@4->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@4->assert_cmp#2] -- vbsz1=vbsc1 lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -9355,7 +9355,7 @@ main: { sta.z strcmp.s2 lda #>str11 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str12 [phi:main::@5->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str12 [phi:main::@5->strcmp#1] -- pbuz1=pbuc1 lda #str12 @@ -9376,7 +9376,7 @@ main: { lda #>message2 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#2 [phi:main::@6->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@6->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@6->assert_cmp#2] -- vbsz1=vbsc1 lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -9390,7 +9390,7 @@ main: { sta.z strcmp.s2 lda #>str13 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str13 [phi:main::@7->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str13 [phi:main::@7->strcmp#1] -- pbuz1=pbuc1 lda #str13 @@ -9411,7 +9411,7 @@ main: { lda #>message3 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#3 [phi:main::@8->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@8->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@8->assert_cmp#2] -- vbsz1=vbsc1 lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -9425,7 +9425,7 @@ main: { sta.z strcmp.s2 lda #>str14 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str14 [phi:main::@9->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str14 [phi:main::@9->strcmp#1] -- pbuz1=pbuc1 lda #str14 @@ -9446,7 +9446,7 @@ main: { lda #>message4 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#4 [phi:main::@10->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@10->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@10->assert_cmp#2] -- vbsz1=vbsc1 lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -9460,7 +9460,7 @@ main: { sta.z strcmp.s2 lda #>str25 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str15 [phi:main::@11->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str15 [phi:main::@11->strcmp#1] -- pbuz1=pbuc1 lda #str15 @@ -9481,7 +9481,7 @@ main: { lda #>message5 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#5 [phi:main::@12->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@12->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@12->assert_cmp#2] -- vbsz1=vbsc1 lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -9495,7 +9495,7 @@ main: { sta.z strcmp.s2 lda #>str26 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str16 [phi:main::@13->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str16 [phi:main::@13->strcmp#1] -- pbuz1=pbuc1 lda #str16 @@ -9516,7 +9516,7 @@ main: { lda #>message6 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#6 [phi:main::@14->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@14->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@14->assert_cmp#2] -- vbsz1=vbsc1 lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -9530,7 +9530,7 @@ main: { sta.z strcmp.s2 lda #>str27 sta.z strcmp.s2+1 - // [134] phi strcmp::s1#0 = main::str16 [phi:main::@15->strcmp#1] -- call_phi_near + // [134] phi strcmp::s1#0 = main::str16 [phi:main::@15->strcmp#1] -- pbuz1=pbuc1 lda #str16 @@ -9551,7 +9551,7 @@ main: { lda #>message7 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#7 [phi:main::@16->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@16->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@16->assert_cmp#2] -- vbsz1=vbsc1 lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -9570,7 +9570,7 @@ main: { sta.z strncmp.s2 lda #>str28 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str18 [phi:main::@17->strncmp#2] -- call_phi_near + // [181] phi strncmp::s1#0 = main::str18 [phi:main::@17->strncmp#2] -- pbuz1=pbuc1 lda #str18 @@ -9591,7 +9591,7 @@ main: { lda #>message8 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#8 [phi:main::@18->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@18->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@18->assert_cmp#2] -- vbsz1=vbsc1 lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -9610,7 +9610,7 @@ main: { sta.z strncmp.s2 lda #>str29 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str19 [phi:main::@19->strncmp#2] -- call_phi_near + // [181] phi strncmp::s1#0 = main::str19 [phi:main::@19->strncmp#2] -- pbuz1=pbuc1 lda #str19 @@ -9631,7 +9631,7 @@ main: { lda #>message9 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#9 [phi:main::@20->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@20->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@20->assert_cmp#2] -- vbsz1=vbsc1 lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -9650,7 +9650,7 @@ main: { sta.z strncmp.s2 lda #>str210 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str21 [phi:main::@21->strncmp#2] -- call_phi_near + // [181] phi strncmp::s1#0 = main::str21 [phi:main::@21->strncmp#2] -- pbuz1=pbuc1 lda #str21 @@ -9671,7 +9671,7 @@ main: { lda #>message10 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#10 [phi:main::@22->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@22->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@22->assert_cmp#2] -- vbsz1=vbsc1 lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -9690,7 +9690,7 @@ main: { sta.z strncmp.s2 lda #>str211 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str111 [phi:main::@23->strncmp#2] -- call_phi_near + // [181] phi strncmp::s1#0 = main::str111 [phi:main::@23->strncmp#2] -- pbuz1=pbuc1 lda #str111 @@ -9711,7 +9711,7 @@ main: { lda #>message11 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#11 [phi:main::@24->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@24->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@24->assert_cmp#2] -- vbsz1=vbsc1 lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -9730,7 +9730,7 @@ main: { sta.z strncmp.s2 lda #>str212 sta.z strncmp.s2+1 - // [181] phi strncmp::s1#0 = main::str12 [phi:main::@25->strncmp#2] -- call_phi_near + // [181] phi strncmp::s1#0 = main::str12 [phi:main::@25->strncmp#2] -- pbuz1=pbuc1 lda #str12 @@ -9751,7 +9751,7 @@ main: { lda #>message12 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#12 [phi:main::@26->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@26->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@26->assert_cmp#2] -- vbsz1=vbsc1 lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -9770,7 +9770,7 @@ main: { sta.z memcmp.str2 lda #>__35 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::str12 [phi:main::@27->memcmp#2] -- call_phi_near + // [193] phi memcmp::str1#4 = (const void *)main::str12 [phi:main::@27->memcmp#2] -- pvoz1=pvoc1 lda #str12 @@ -9791,7 +9791,7 @@ main: { lda #>message13 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#13 [phi:main::@28->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = -1 [phi:main::@28->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = -1 [phi:main::@28->assert_cmp#2] -- vbsz1=vbsc1 lda #-1 sta.z assert_cmp.expect jsr assert_cmp @@ -9810,7 +9810,7 @@ main: { sta.z memcmp.str2 lda #>str13 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::str13 [phi:main::@29->memcmp#2] -- call_phi_near + // [193] phi memcmp::str1#4 = (const void *)main::str13 [phi:main::@29->memcmp#2] -- pvoz1=pvoc1 lda #str13 @@ -9831,7 +9831,7 @@ main: { lda #>message14 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#14 [phi:main::@30->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@30->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@30->assert_cmp#2] -- vbsz1=vbsc1 lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -9850,7 +9850,7 @@ main: { sta.z memcmp.str2 lda #>__39 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::$38 [phi:main::@31->memcmp#2] -- call_phi_near + // [193] phi memcmp::str1#4 = (const void *)main::$38 [phi:main::@31->memcmp#2] -- pvoz1=pvoc1 lda #<__38 sta.z memcmp.str1 lda #>__38 @@ -9871,7 +9871,7 @@ main: { lda #>message15 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#15 [phi:main::@32->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 0 [phi:main::@32->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 0 [phi:main::@32->assert_cmp#2] -- vbsz1=vbsc1 lda #0 sta.z assert_cmp.expect jsr assert_cmp @@ -9890,7 +9890,7 @@ main: { sta.z memcmp.str2 lda #>str111 sta.z memcmp.str2+1 - // [193] phi memcmp::str1#4 = (const void *)main::str14 [phi:main::@33->memcmp#2] -- call_phi_near + // [193] phi memcmp::str1#4 = (const void *)main::str14 [phi:main::@33->memcmp#2] -- pvoz1=pvoc1 lda #str14 @@ -9911,7 +9911,7 @@ main: { lda #>message16 sta.z assert_cmp.message+1 // [144] phi assert_cmp::actual#17 = assert_cmp::actual#16 [phi:main::@34->assert_cmp#1] -- register_copy - // [144] phi assert_cmp::expect#17 = 1 [phi:main::@34->assert_cmp#2] -- call_phi_near + // [144] phi assert_cmp::expect#17 = 1 [phi:main::@34->assert_cmp#2] -- vbsz1=vbsc1 lda #1 sta.z assert_cmp.expect jsr assert_cmp @@ -10128,7 +10128,7 @@ cputln: { // [131] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [132] call cscroll -- call_phi_near + // [132] call cscroll jsr cscroll // cputln::@return // } @@ -10275,7 +10275,7 @@ assert_cmp: { // textcolor(RED) // [153] call textcolor // [219] phi from assert_cmp::@8 to textcolor [phi:assert_cmp::@8->textcolor] - // [219] phi textcolor::color#2 = RED [phi:assert_cmp::@8->textcolor#0] -- call_phi_near + // [219] phi textcolor::color#2 = RED [phi:assert_cmp::@8->textcolor#0] -- vbuaa=vbuc1 lda #RED jsr textcolor // [154] phi from assert_cmp::@8 to assert_cmp::@12 [phi:assert_cmp::@8->assert_cmp::@12] @@ -10288,7 +10288,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s2 [phi:assert_cmp::@12->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = assert_cmp::s2 [phi:assert_cmp::@12->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -10300,7 +10300,7 @@ assert_cmp: { ldx.z expect // [157] call printf_schar // [231] phi from assert_cmp::@13 to printf_schar [phi:assert_cmp::@13->printf_schar] - // [231] phi printf_schar::value#3 = printf_schar::value#1 [phi:assert_cmp::@13->printf_schar#0] -- call_phi_near + // [231] phi printf_schar::value#3 = printf_schar::value#1 [phi:assert_cmp::@13->printf_schar#0] -- register_copy jsr printf_schar // [158] phi from assert_cmp::@13 to assert_cmp::@14 [phi:assert_cmp::@13->assert_cmp::@14] // assert_cmp::@14 @@ -10312,7 +10312,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s3 [phi:assert_cmp::@14->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = assert_cmp::s3 [phi:assert_cmp::@14->printf_str#1] -- pbuz1=pbuc1 lda #s3 @@ -10324,7 +10324,7 @@ assert_cmp: { ldx.z actual // [161] call printf_schar // [231] phi from assert_cmp::@15 to printf_schar [phi:assert_cmp::@15->printf_schar] - // [231] phi printf_schar::value#3 = printf_schar::value#2 [phi:assert_cmp::@15->printf_schar#0] -- call_phi_near + // [231] phi printf_schar::value#3 = printf_schar::value#2 [phi:assert_cmp::@15->printf_schar#0] -- register_copy jsr printf_schar // [162] phi from assert_cmp::@15 to assert_cmp::@16 [phi:assert_cmp::@15->assert_cmp::@16] // assert_cmp::@16 @@ -10336,7 +10336,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s4 [phi:assert_cmp::@16->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = assert_cmp::s4 [phi:assert_cmp::@16->printf_str#1] -- pbuz1=pbuc1 lda #s4 @@ -10347,7 +10347,7 @@ assert_cmp: { // [164] printf_string::str#1 = assert_cmp::message#17 // [165] call printf_string // [242] phi from assert_cmp::@17 to printf_string [phi:assert_cmp::@17->printf_string] - // [242] phi printf_string::str#2 = printf_string::str#1 [phi:assert_cmp::@17->printf_string#0] -- call_phi_near + // [242] phi printf_string::str#2 = printf_string::str#1 [phi:assert_cmp::@17->printf_string#0] -- register_copy jsr printf_string // [166] phi from assert_cmp::@17 to assert_cmp::@18 [phi:assert_cmp::@17->assert_cmp::@18] // assert_cmp::@18 @@ -10359,7 +10359,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@18->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@18->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -10375,7 +10375,7 @@ assert_cmp: { // textcolor(GREEN) // [170] call textcolor // [219] phi from assert_cmp::@1 to textcolor [phi:assert_cmp::@1->textcolor] - // [219] phi textcolor::color#2 = GREEN [phi:assert_cmp::@1->textcolor#0] -- call_phi_near + // [219] phi textcolor::color#2 = GREEN [phi:assert_cmp::@1->textcolor#0] -- vbuaa=vbuc1 lda #GREEN jsr textcolor // [171] phi from assert_cmp::@1 to assert_cmp::@9 [phi:assert_cmp::@1->assert_cmp::@9] @@ -10388,7 +10388,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s [phi:assert_cmp::@9->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = assert_cmp::s [phi:assert_cmp::@9->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -10399,7 +10399,7 @@ assert_cmp: { // [173] printf_string::str#0 = assert_cmp::message#17 // [174] call printf_string // [242] phi from assert_cmp::@10 to printf_string [phi:assert_cmp::@10->printf_string] - // [242] phi printf_string::str#2 = printf_string::str#0 [phi:assert_cmp::@10->printf_string#0] -- call_phi_near + // [242] phi printf_string::str#2 = printf_string::str#0 [phi:assert_cmp::@10->printf_string#0] -- register_copy jsr printf_string // [175] phi from assert_cmp::@10 to assert_cmp::@11 [phi:assert_cmp::@10->assert_cmp::@11] // assert_cmp::@11 @@ -10411,7 +10411,7 @@ assert_cmp: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@11->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = assert_cmp::s1 [phi:assert_cmp::@11->printf_str#1] -- pbuz1=pbuc1 lda #s1 @@ -10650,7 +10650,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [246] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [246] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -10666,7 +10666,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [246] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [246] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -10679,7 +10679,7 @@ cscroll: { // [256] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [256] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [256] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [256] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -10692,7 +10692,7 @@ cscroll: { // [214] call memset // [256] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [256] phi memset::c#4 = memset::c#1 [phi:cscroll::@4->memset#0] -- register_copy - // [256] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [256] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -10812,7 +10812,7 @@ printf_schar: { // uctoa(uvalue, printf_buffer.digits, format.radix) // [237] uctoa::value#1 = (char)printf_schar::value#5 // [238] call uctoa - // [264] phi from printf_schar::@2 to uctoa [phi:printf_schar::@2->uctoa] -- call_phi_near + // [264] phi from printf_schar::@2 to uctoa [phi:printf_schar::@2->uctoa] jsr uctoa // printf_schar::@3 // printf_number_buffer(putc, printf_buffer, format) @@ -10820,7 +10820,7 @@ printf_schar: { lda printf_buffer // [240] call printf_number_buffer // Print using format - // [283] phi from printf_schar::@3 to printf_number_buffer [phi:printf_schar::@3->printf_number_buffer] -- call_phi_near + // [283] phi from printf_schar::@3 to printf_number_buffer [phi:printf_schar::@3->printf_number_buffer] jsr printf_number_buffer // printf_schar::@return // } @@ -10847,7 +10847,7 @@ printf_string: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- register_copy jsr printf_str // printf_string::@return // } @@ -11050,7 +11050,7 @@ uctoa: { // [277] uctoa_append::value#0 = uctoa::value#2 // [278] uctoa_append::sub#0 = uctoa::digit_value#0 // [279] call uctoa_append - // [291] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] -- call_phi_near + // [291] phi from uctoa::@5 to uctoa_append [phi:uctoa::@5->uctoa_append] jsr uctoa_append // uctoa_append(buffer++, value, digit_value) // [280] uctoa_append::return#0 = uctoa_append::value#2 @@ -11102,7 +11102,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>putc sta.z printf_str.putc+1 - // [222] phi printf_str::s#10 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near + // [222] phi printf_str::s#10 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 lda #buffer_digits diff --git a/src/test/ref/strcpy-0.log b/src/test/ref/strcpy-0.log index aaa3b83f8..9303adf6e 100644 --- a/src/test/ref/strcpy-0.log +++ b/src/test/ref/strcpy-0.log @@ -223,7 +223,7 @@ main: { sta.z str_cpy.dst lda #>dst1 sta.z str_cpy.dst+1 - // [5] phi str_cpy::src#4 = main::src [phi:main->str_cpy#1] -- call_phi_near + // [5] phi str_cpy::src#4 = main::src [phi:main->str_cpy#1] -- pbuz1=pbuc1 lda #src @@ -242,7 +242,7 @@ main: { sta.z str_cpy.dst lda #>dst2 sta.z str_cpy.dst+1 - // [5] phi str_cpy::src#4 = main::src1 [phi:main::@1->str_cpy#1] -- call_phi_near + // [5] phi str_cpy::src#4 = main::src1 [phi:main::@1->str_cpy#1] -- pbuz1=pbuc1 lda #src1 @@ -372,7 +372,7 @@ main: { sta.z str_cpy.dst lda #>dst1 sta.z str_cpy.dst+1 - // [5] phi str_cpy::src#4 = main::src [phi:main->str_cpy#1] -- call_phi_near + // [5] phi str_cpy::src#4 = main::src [phi:main->str_cpy#1] -- pbuz1=pbuc1 lda #src @@ -388,7 +388,7 @@ main: { sta.z str_cpy.dst lda #>dst2 sta.z str_cpy.dst+1 - // [5] phi str_cpy::src#4 = main::src1 [phi:main::@1->str_cpy#1] -- call_phi_near + // [5] phi str_cpy::src#4 = main::src1 [phi:main::@1->str_cpy#1] -- pbuz1=pbuc1 lda #src1 diff --git a/src/test/ref/string-const-consolidation-noroot.log b/src/test/ref/string-const-consolidation-noroot.log index 5c73a3a86..3595bcc09 100644 --- a/src/test/ref/string-const-consolidation-noroot.log +++ b/src/test/ref/string-const-consolidation-noroot.log @@ -272,7 +272,7 @@ main: { // [1] call print // [7] phi from main to print [phi:main->print] print_from_main: - // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- call_phi_near + // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- pbuz1=pbuc1 lda #<$400 sta.z screen lda #>$400 @@ -286,7 +286,7 @@ main: { // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] print_from___b1: - // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- call_phi_near + // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- register_copy jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -296,7 +296,7 @@ main: { // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] print_from___b2: - // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- call_phi_near + // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- register_copy jsr print jmp __breturn // main::@return @@ -419,7 +419,7 @@ main: { // print(rex1) // [1] call print // [7] phi from main to print [phi:main->print] - // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- call_phi_near + // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- pbuz1=pbuc1 lda #<$400 sta.z screen lda #>$400 @@ -430,14 +430,14 @@ main: { // print(rex2) // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] - // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- call_phi_near + // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- register_copy jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // print("rex") // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] - // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- call_phi_near + // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- register_copy jsr print // main::@return // } diff --git a/src/test/ref/string-const-consolidation-root.log b/src/test/ref/string-const-consolidation-root.log index fde1b3fb2..6a83cad43 100644 --- a/src/test/ref/string-const-consolidation-root.log +++ b/src/test/ref/string-const-consolidation-root.log @@ -419,7 +419,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call print1 - // [5] phi from main to print1 [phi:main->print1] -- call_phi_near + // [5] phi from main to print1 [phi:main->print1] print1_from_main: jsr print1 // [2] phi from main to main::@1 [phi:main->main::@1] @@ -428,7 +428,7 @@ main: { // main::@1 __b1: // [3] call print2 - // [12] phi from main::@1 to print2 [phi:main::@1->print2] -- call_phi_near + // [12] phi from main::@1 to print2 [phi:main::@1->print2] print2_from___b1: jsr print2 jmp __breturn @@ -447,7 +447,7 @@ print1: { sta.z screen lda #>$400 sta.z screen+1 - // [19] phi print::s#9 = string_0 [phi:print1->print#1] -- call_phi_near + // [19] phi print::s#9 = string_0 [phi:print1->print#1] -- pbuz1=pbuc1 lda #string_0 @@ -462,7 +462,7 @@ print1: { // [19] phi from print1::@1 to print [phi:print1::@1->print] print_from___b1: // [19] phi screen#36 = screen#12 [phi:print1::@1->print#0] -- register_copy - // [19] phi print::s#9 = string_1 [phi:print1::@1->print#1] -- call_phi_near + // [19] phi print::s#9 = string_1 [phi:print1::@1->print#1] -- pbuz1=pbuc1 lda #string_1 @@ -477,7 +477,7 @@ print1: { // [19] phi from print1::@2 to print [phi:print1::@2->print] print_from___b2: // [19] phi screen#36 = screen#12 [phi:print1::@2->print#0] -- register_copy - // [19] phi print::s#9 = s [phi:print1::@2->print#1] -- call_phi_near + // [19] phi print::s#9 = s [phi:print1::@2->print#1] -- pbuz1=pbuc1 lda #s @@ -495,7 +495,7 @@ print2: { // [19] phi from print2 to print [phi:print2->print] print_from_print2: // [19] phi screen#36 = screen#12 [phi:print2->print#0] -- register_copy - // [19] phi print::s#9 = string_0 [phi:print2->print#1] -- call_phi_near + // [19] phi print::s#9 = string_0 [phi:print2->print#1] -- pbuz1=pbuc1 lda #string_0 @@ -510,7 +510,7 @@ print2: { // [19] phi from print2::@1 to print [phi:print2::@1->print] print_from___b1: // [19] phi screen#36 = screen#12 [phi:print2::@1->print#0] -- register_copy - // [19] phi print::s#9 = string_1 [phi:print2::@1->print#1] -- call_phi_near + // [19] phi print::s#9 = string_1 [phi:print2::@1->print#1] -- pbuz1=pbuc1 lda #string_1 @@ -525,7 +525,7 @@ print2: { // [19] phi from print2::@2 to print [phi:print2::@2->print] print_from___b2: // [19] phi screen#36 = screen#12 [phi:print2::@2->print#0] -- register_copy - // [19] phi print::s#9 = s1 [phi:print2::@2->print#1] -- call_phi_near + // [19] phi print::s#9 = s1 [phi:print2::@2->print#1] -- pbuz1=pbuc1 lda #s1 @@ -674,13 +674,13 @@ Score: 677 main: { // print1() // [1] call print1 - // [5] phi from main to print1 [phi:main->print1] -- call_phi_near + // [5] phi from main to print1 [phi:main->print1] jsr print1 // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // print2() // [3] call print2 - // [12] phi from main::@1 to print2 [phi:main::@1->print2] -- call_phi_near + // [12] phi from main::@1 to print2 [phi:main::@1->print2] jsr print2 // main::@return // } @@ -697,7 +697,7 @@ print1: { sta.z screen lda #>$400 sta.z screen+1 - // [19] phi print::s#9 = string_0 [phi:print1->print#1] -- call_phi_near + // [19] phi print::s#9 = string_0 [phi:print1->print#1] -- pbuz1=pbuc1 lda #string_0 @@ -709,7 +709,7 @@ print1: { // [8] call print // [19] phi from print1::@1 to print [phi:print1::@1->print] // [19] phi screen#36 = screen#12 [phi:print1::@1->print#0] -- register_copy - // [19] phi print::s#9 = string_1 [phi:print1::@1->print#1] -- call_phi_near + // [19] phi print::s#9 = string_1 [phi:print1::@1->print#1] -- pbuz1=pbuc1 lda #string_1 @@ -721,7 +721,7 @@ print1: { // [10] call print // [19] phi from print1::@2 to print [phi:print1::@2->print] // [19] phi screen#36 = screen#12 [phi:print1::@2->print#0] -- register_copy - // [19] phi print::s#9 = s [phi:print1::@2->print#1] -- call_phi_near + // [19] phi print::s#9 = s [phi:print1::@2->print#1] -- pbuz1=pbuc1 lda #s @@ -738,7 +738,7 @@ print2: { // [13] call print // [19] phi from print2 to print [phi:print2->print] // [19] phi screen#36 = screen#12 [phi:print2->print#0] -- register_copy - // [19] phi print::s#9 = string_0 [phi:print2->print#1] -- call_phi_near + // [19] phi print::s#9 = string_0 [phi:print2->print#1] -- pbuz1=pbuc1 lda #string_0 @@ -750,7 +750,7 @@ print2: { // [15] call print // [19] phi from print2::@1 to print [phi:print2::@1->print] // [19] phi screen#36 = screen#12 [phi:print2::@1->print#0] -- register_copy - // [19] phi print::s#9 = string_1 [phi:print2::@1->print#1] -- call_phi_near + // [19] phi print::s#9 = string_1 [phi:print2::@1->print#1] -- pbuz1=pbuc1 lda #string_1 @@ -762,7 +762,7 @@ print2: { // [17] call print // [19] phi from print2::@2 to print [phi:print2::@2->print] // [19] phi screen#36 = screen#12 [phi:print2::@2->print#0] -- register_copy - // [19] phi print::s#9 = s1 [phi:print2::@2->print#1] -- call_phi_near + // [19] phi print::s#9 = s1 [phi:print2::@2->print#1] -- pbuz1=pbuc1 lda #s1 diff --git a/src/test/ref/string-const-consolidation.log b/src/test/ref/string-const-consolidation.log index 3a4a13034..6861b8596 100644 --- a/src/test/ref/string-const-consolidation.log +++ b/src/test/ref/string-const-consolidation.log @@ -272,7 +272,7 @@ main: { // [1] call print // [7] phi from main to print [phi:main->print] print_from_main: - // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- call_phi_near + // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- pbuz1=pbuc1 lda #<$400 sta.z screen lda #>$400 @@ -286,7 +286,7 @@ main: { // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] print_from___b1: - // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- call_phi_near + // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- register_copy jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -296,7 +296,7 @@ main: { // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] print_from___b2: - // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- call_phi_near + // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- register_copy jsr print jmp __breturn // main::@return @@ -418,7 +418,7 @@ main: { // print(rex1) // [1] call print // [7] phi from main to print [phi:main->print] - // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- call_phi_near + // [7] phi screen#20 = (char *) 1024 [phi:main->print#0] -- pbuz1=pbuc1 lda #<$400 sta.z screen lda #>$400 @@ -429,14 +429,14 @@ main: { // print(rex2) // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] - // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- call_phi_near + // [7] phi screen#20 = screen#13 [phi:main::@1->print#0] -- register_copy jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // print("rex") // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] - // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- call_phi_near + // [7] phi screen#20 = screen#13 [phi:main::@2->print#0] -- register_copy jsr print // main::@return // } diff --git a/src/test/ref/string-escapes-2.log b/src/test/ref/string-escapes-2.log index 084de2ae1..7c799cfa5 100644 --- a/src/test/ref/string-escapes-2.log +++ b/src/test/ref/string-escapes-2.log @@ -206,7 +206,7 @@ main: { // [4] chrout::c#0 = MESSAGE[main::i#2] -- vbuaa=pbuc1_derefidx_vbuz1 ldy.z i lda MESSAGE,y - // [5] call chrout -- call_phi_near + // [5] call chrout jsr chrout jmp __b3 // main::@3 @@ -311,7 +311,7 @@ main: { // [4] chrout::c#0 = MESSAGE[main::i#2] -- vbuaa=pbuc1_derefidx_vbuz1 ldy.z i lda MESSAGE,y - // [5] call chrout -- call_phi_near + // [5] call chrout jsr chrout // main::@3 // chrout(MESSAGE[i++]); diff --git a/src/test/ref/string-escapes-4.log b/src/test/ref/string-escapes-4.log index 45c3b0f47..d3c3418c1 100644 --- a/src/test/ref/string-escapes-4.log +++ b/src/test/ref/string-escapes-4.log @@ -244,7 +244,7 @@ main: { // [5] chrout::petscii = MSG1[main::i#2] -- vbuz1=pbuc1_derefidx_vbuxx lda MSG1,x sta.z chrout.petscii - // [6] call chrout -- call_phi_near + // [6] call chrout jsr chrout jmp __b4 // main::@4 @@ -366,7 +366,7 @@ main: { // [5] chrout::petscii = MSG1[main::i#2] -- vbuz1=pbuc1_derefidx_vbuxx lda MSG1,x sta.z chrout.petscii - // [6] call chrout -- call_phi_near + // [6] call chrout jsr chrout // main::@4 // SCREEN1[i] = MSG2[i] diff --git a/src/test/ref/string-pointer-problem.log b/src/test/ref/string-pointer-problem.log index a696bea92..4d68344cc 100644 --- a/src/test/ref/string-pointer-problem.log +++ b/src/test/ref/string-pointer-problem.log @@ -199,7 +199,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call set_process_name - // [3] phi from main to set_process_name [phi:main->set_process_name] -- call_phi_near + // [3] phi from main to set_process_name [phi:main->set_process_name] set_process_name_from_main: jsr set_process_name jmp __breturn @@ -332,7 +332,7 @@ Score: 948 main: { // set_process_name("keyboard") // [1] call set_process_name - // [3] phi from main to set_process_name [phi:main->set_process_name] -- call_phi_near + // [3] phi from main to set_process_name [phi:main->set_process_name] jsr set_process_name // main::@return // } diff --git a/src/test/ref/strip.log b/src/test/ref/strip.log index 6e81e0dd7..5cea80c20 100644 --- a/src/test/ref/strip.log +++ b/src/test/ref/strip.log @@ -443,7 +443,7 @@ main: { strip_from_main: // [9] phi strip::c#3 = ' ' [phi:main->strip#0] -- vbuxx=vbuc1 ldx #' ' - // [9] phi strip::dest#0 = msg1 [phi:main->strip#1] -- call_phi_near + // [9] phi strip::dest#0 = msg1 [phi:main->strip#1] -- pbuz1=pbuc1 lda #msg1 @@ -462,7 +462,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [20] phi print::msg#4 = msg1 [phi:main::@1->print#1] -- call_phi_near + // [20] phi print::msg#4 = msg1 [phi:main::@1->print#1] -- pbuz1=pbuc1 lda #msg1 @@ -478,7 +478,7 @@ main: { strip_from___b2: // [9] phi strip::c#3 = 'y' [phi:main::@2->strip#0] -- vbuxx=vbuc1 ldx #'y' - // [9] phi strip::dest#0 = msg2 [phi:main::@2->strip#1] -- call_phi_near + // [9] phi strip::dest#0 = msg2 [phi:main::@2->strip#1] -- pbuz1=pbuc1 lda #msg2 @@ -493,7 +493,7 @@ main: { // [20] phi from main::@3 to print [phi:main::@3->print] print_from___b3: // [20] phi screen#17 = screen#12 [phi:main::@3->print#0] -- register_copy - // [20] phi print::msg#4 = msg2 [phi:main::@3->print#1] -- call_phi_near + // [20] phi print::msg#4 = msg2 [phi:main::@3->print#1] -- pbuz1=pbuc1 lda #msg2 @@ -722,7 +722,7 @@ main: { // [9] phi from main to strip [phi:main->strip] // [9] phi strip::c#3 = ' ' [phi:main->strip#0] -- vbuxx=vbuc1 ldx #' ' - // [9] phi strip::dest#0 = msg1 [phi:main->strip#1] -- call_phi_near + // [9] phi strip::dest#0 = msg1 [phi:main->strip#1] -- pbuz1=pbuc1 lda #msg1 @@ -738,7 +738,7 @@ main: { sta.z screen lda #>$400 sta.z screen+1 - // [20] phi print::msg#4 = msg1 [phi:main::@1->print#1] -- call_phi_near + // [20] phi print::msg#4 = msg1 [phi:main::@1->print#1] -- pbuz1=pbuc1 lda #msg1 @@ -751,7 +751,7 @@ main: { // [9] phi from main::@2 to strip [phi:main::@2->strip] // [9] phi strip::c#3 = 'y' [phi:main::@2->strip#0] -- vbuxx=vbuc1 ldx #'y' - // [9] phi strip::dest#0 = msg2 [phi:main::@2->strip#1] -- call_phi_near + // [9] phi strip::dest#0 = msg2 [phi:main::@2->strip#1] -- pbuz1=pbuc1 lda #msg2 @@ -763,7 +763,7 @@ main: { // [7] call print // [20] phi from main::@3 to print [phi:main::@3->print] // [20] phi screen#17 = screen#12 [phi:main::@3->print#0] -- register_copy - // [20] phi print::msg#4 = msg2 [phi:main::@3->print#1] -- call_phi_near + // [20] phi print::msg#4 = msg2 [phi:main::@3->print#1] -- pbuz1=pbuc1 lda #msg2 diff --git a/src/test/ref/strncat-0.log b/src/test/ref/strncat-0.log index 7b681effa..0e88b069b 100644 --- a/src/test/ref/strncat-0.log +++ b/src/test/ref/strncat-0.log @@ -446,7 +446,7 @@ main: { // [1] call strncat // [11] phi from main to strncat [phi:main->strncat] strncat_from_main: - // [11] phi strncat::source#7 = hello [phi:main->strncat#0] -- call_phi_near + // [11] phi strncat::source#7 = hello [phi:main->strncat#0] -- pbuz1=pbuc1 lda #hello @@ -460,7 +460,7 @@ main: { // [3] call strncat // [11] phi from main::@3 to strncat [phi:main::@3->strncat] strncat_from___b3: - // [11] phi strncat::source#7 = space [phi:main::@3->strncat#0] -- call_phi_near + // [11] phi strncat::source#7 = space [phi:main::@3->strncat#0] -- pbuz1=pbuc1 lda #space @@ -474,7 +474,7 @@ main: { // [5] call strncat // [11] phi from main::@4 to strncat [phi:main::@4->strncat] strncat_from___b4: - // [11] phi strncat::source#7 = world [phi:main::@4->strncat#0] -- call_phi_near + // [11] phi strncat::source#7 = world [phi:main::@4->strncat#0] -- pbuz1=pbuc1 lda #world @@ -709,7 +709,7 @@ main: { // strncat(build, hello, 5) // [1] call strncat // [11] phi from main to strncat [phi:main->strncat] - // [11] phi strncat::source#7 = hello [phi:main->strncat#0] -- call_phi_near + // [11] phi strncat::source#7 = hello [phi:main->strncat#0] -- pbuz1=pbuc1 lda #hello @@ -720,7 +720,7 @@ main: { // strncat(build, space, 5) // [3] call strncat // [11] phi from main::@3 to strncat [phi:main::@3->strncat] - // [11] phi strncat::source#7 = space [phi:main::@3->strncat#0] -- call_phi_near + // [11] phi strncat::source#7 = space [phi:main::@3->strncat#0] -- pbuz1=pbuc1 lda #space @@ -731,7 +731,7 @@ main: { // strncat(build, world, 5) // [5] call strncat // [11] phi from main::@4 to strncat [phi:main::@4->strncat] - // [11] phi strncat::source#7 = world [phi:main::@4->strncat#0] -- call_phi_near + // [11] phi strncat::source#7 = world [phi:main::@4->strncat#0] -- pbuz1=pbuc1 lda #world diff --git a/src/test/ref/struct-11.log b/src/test/ref/struct-11.log index a13b51663..a876813e0 100644 --- a/src/test/ref/struct-11.log +++ b/src/test/ref/struct-11.log @@ -368,7 +368,7 @@ main: { sta.z print_person.person_name+1 // [5] phi idx#14 = 0 [phi:main->print_person#1] -- vbuyy=vbuc1 ldy #0 - // [5] phi print_person::person_id#2 = print_person::person_id#0 [phi:main->print_person#2] -- call_phi_near + // [5] phi print_person::person_id#2 = print_person::person_id#0 [phi:main->print_person#2] -- register_copy jsr print_person jmp __b1 // main::@1 @@ -384,7 +384,7 @@ main: { lda #>henriette+OFFSET_STRUCT_PERSON_NAME sta.z print_person.person_name+1 // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#1] -- register_copy - // [5] phi print_person::person_id#2 = print_person::person_id#1 [phi:main::@1->print_person#2] -- call_phi_near + // [5] phi print_person::person_id#2 = print_person::person_id#1 [phi:main::@1->print_person#2] -- register_copy jsr print_person jmp __breturn // main::@return @@ -548,7 +548,7 @@ main: { sta.z print_person.person_name+1 // [5] phi idx#14 = 0 [phi:main->print_person#1] -- vbuyy=vbuc1 ldy #0 - // [5] phi print_person::person_id#2 = print_person::person_id#0 [phi:main->print_person#2] -- call_phi_near + // [5] phi print_person::person_id#2 = print_person::person_id#0 [phi:main->print_person#2] -- register_copy jsr print_person // main::@1 // print_person(henriette) @@ -562,7 +562,7 @@ main: { lda #>henriette+OFFSET_STRUCT_PERSON_NAME sta.z print_person.person_name+1 // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#1] -- register_copy - // [5] phi print_person::person_id#2 = print_person::person_id#1 [phi:main::@1->print_person#2] -- call_phi_near + // [5] phi print_person::person_id#2 = print_person::person_id#1 [phi:main::@1->print_person#2] -- register_copy jsr print_person // main::@return // } diff --git a/src/test/ref/struct-11b.log b/src/test/ref/struct-11b.log index 4ab349f17..6f04d1233 100644 --- a/src/test/ref/struct-11b.log +++ b/src/test/ref/struct-11b.log @@ -306,7 +306,7 @@ main: { print_person_from_main: // [5] phi idx#20 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person_initials#4 = jesper_initials [phi:main->print_person#1] -- call_phi_near + // [5] phi print_person::person_initials#4 = jesper_initials [phi:main->print_person#1] -- pbuz1=pbuc1 lda #jesper_initials @@ -321,7 +321,7 @@ main: { // [5] phi from main::@1 to print_person [phi:main::@1->print_person] print_person_from___b1: // [5] phi idx#20 = idx#14 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person_initials#4 = henry_initials [phi:main::@1->print_person#1] -- call_phi_near + // [5] phi print_person::person_initials#4 = henry_initials [phi:main::@1->print_person#1] -- pbuz1=pbuc1 lda #henry_initials @@ -452,7 +452,7 @@ main: { // [5] phi from main to print_person [phi:main->print_person] // [5] phi idx#20 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person_initials#4 = jesper_initials [phi:main->print_person#1] -- call_phi_near + // [5] phi print_person::person_initials#4 = jesper_initials [phi:main->print_person#1] -- pbuz1=pbuc1 lda #jesper_initials @@ -464,7 +464,7 @@ main: { // [3] call print_person // [5] phi from main::@1 to print_person [phi:main::@1->print_person] // [5] phi idx#20 = idx#14 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person_initials#4 = henry_initials [phi:main::@1->print_person#1] -- call_phi_near + // [5] phi print_person::person_initials#4 = henry_initials [phi:main::@1->print_person#1] -- pbuz1=pbuc1 lda #henry_initials diff --git a/src/test/ref/struct-12.log b/src/test/ref/struct-12.log index 9f897fa31..7a8731e6a 100644 --- a/src/test/ref/struct-12.log +++ b/src/test/ref/struct-12.log @@ -378,7 +378,7 @@ main: { // [5] phi idx#14 = 0 [phi:main->print_person#1] -- vbuz1=vbuc1 lda #0 sta.z idx - // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- call_phi_near + // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- vbuxx=vbuc1 ldx #jesper_id jsr print_person jmp __b1 @@ -400,7 +400,7 @@ main: { lda #>henriette_name sta.z print_person.person_name+1 // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#1] -- register_copy - // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- call_phi_near + // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- vbuxx=vbuc1 ldx #henriette_id jsr print_person jmp __breturn @@ -575,7 +575,7 @@ main: { // [5] phi idx#14 = 0 [phi:main->print_person#1] -- vbuz1=vbuc1 lda #0 sta.z idx - // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- call_phi_near + // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- vbuxx=vbuc1 ldx #jesper_id jsr print_person // main::@1 @@ -596,7 +596,7 @@ main: { lda #>henriette_name sta.z print_person.person_name+1 // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#1] -- register_copy - // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- call_phi_near + // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- vbuxx=vbuc1 ldx #henriette_id jsr print_person // main::@return diff --git a/src/test/ref/struct-22.log b/src/test/ref/struct-22.log index cd1a81ea7..d064fca8f 100644 --- a/src/test/ref/struct-22.log +++ b/src/test/ref/struct-22.log @@ -224,7 +224,7 @@ main: { // [9] phi from main to print [phi:main->print] print_from_main: // [9] phi print::p_y#2 = print::p_y#0 [phi:main->print#0] -- register_copy - // [9] phi print::p_x#2 = print::p_x#0 [phi:main->print#1] -- call_phi_near + // [9] phi print::p_x#2 = print::p_x#0 [phi:main->print#1] -- register_copy jsr print jmp __b1 // main::@1 @@ -237,7 +237,7 @@ main: { // [9] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [9] phi print::p_y#2 = print::p_y#1 [phi:main::@1->print#0] -- register_copy - // [9] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#1] -- call_phi_near + // [9] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#1] -- register_copy jsr print jmp __breturn // main::@return @@ -348,7 +348,7 @@ main: { // [4] call print // [9] phi from main to print [phi:main->print] // [9] phi print::p_y#2 = print::p_y#0 [phi:main->print#0] -- register_copy - // [9] phi print::p_x#2 = print::p_x#0 [phi:main->print#1] -- call_phi_near + // [9] phi print::p_x#2 = print::p_x#0 [phi:main->print#1] -- register_copy jsr print // main::@1 // print(point2) @@ -359,7 +359,7 @@ main: { // [7] call print // [9] phi from main::@1 to print [phi:main::@1->print] // [9] phi print::p_y#2 = print::p_y#1 [phi:main::@1->print#0] -- register_copy - // [9] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#1] -- call_phi_near + // [9] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#1] -- register_copy jsr print // main::@return // } diff --git a/src/test/ref/struct-23.log b/src/test/ref/struct-23.log index 963dfa9ad..2dac27139 100644 --- a/src/test/ref/struct-23.log +++ b/src/test/ref/struct-23.log @@ -329,7 +329,7 @@ main: { getPoint_from_main: // [16] phi getPoint::return_y#2 = 3 [phi:main->getPoint#0] -- vbuaa=vbuc1 lda #3 - // [16] phi getPoint::return_x#2 = 2 [phi:main->getPoint#1] -- call_phi_near + // [16] phi getPoint::return_x#2 = 2 [phi:main->getPoint#1] -- vbuxx=vbuc1 ldx #2 jsr getPoint // [2] getPoint::return_x#0 = getPoint::return_x#2 @@ -352,7 +352,7 @@ main: { getPoint_from___b1: // [16] phi getPoint::return_y#2 = 5 [phi:main::@1->getPoint#0] -- vbuaa=vbuc1 lda #5 - // [16] phi getPoint::return_x#2 = 4 [phi:main::@1->getPoint#1] -- call_phi_near + // [16] phi getPoint::return_x#2 = 4 [phi:main::@1->getPoint#1] -- vbuxx=vbuc1 ldx #4 jsr getPoint // [9] getPoint::return_x#1 = getPoint::return_x#2 @@ -461,7 +461,7 @@ main: { // [16] phi from main to getPoint [phi:main->getPoint] // [16] phi getPoint::return_y#2 = 3 [phi:main->getPoint#0] -- vbuaa=vbuc1 lda #3 - // [16] phi getPoint::return_x#2 = 2 [phi:main->getPoint#1] -- call_phi_near + // [16] phi getPoint::return_x#2 = 2 [phi:main->getPoint#1] -- vbuxx=vbuc1 ldx #2 jsr getPoint // __ma struct Point point1 = getPoint(2, 3) @@ -485,7 +485,7 @@ main: { // [16] phi from main::@1 to getPoint [phi:main::@1->getPoint] // [16] phi getPoint::return_y#2 = 5 [phi:main::@1->getPoint#0] -- vbuaa=vbuc1 lda #5 - // [16] phi getPoint::return_x#2 = 4 [phi:main::@1->getPoint#1] -- call_phi_near + // [16] phi getPoint::return_x#2 = 4 [phi:main::@1->getPoint#1] -- vbuxx=vbuc1 ldx #4 jsr getPoint // __ma struct Point point2 = getPoint(4, 5) diff --git a/src/test/ref/struct-3.log b/src/test/ref/struct-3.log index 5918d9eca..c55db1bdc 100644 --- a/src/test/ref/struct-3.log +++ b/src/test/ref/struct-3.log @@ -286,7 +286,7 @@ main: { print_from_main: // [5] phi idx#12 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print::p_x#2 = 1 [phi:main->print#1] -- call_phi_near + // [5] phi print::p_x#2 = 1 [phi:main->print#1] -- vbuaa=vbuc1 lda #1 jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -298,7 +298,7 @@ main: { // [5] phi from main::@1 to print [phi:main::@1->print] print_from___b1: // [5] phi idx#12 = idx#13 [phi:main::@1->print#0] -- register_copy - // [5] phi print::p_x#2 = 2 [phi:main::@1->print#1] -- call_phi_near + // [5] phi print::p_x#2 = 2 [phi:main::@1->print#1] -- vbuaa=vbuc1 lda #2 jsr print jmp __breturn @@ -387,7 +387,7 @@ main: { // [5] phi from main to print [phi:main->print] // [5] phi idx#12 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print::p_x#2 = 1 [phi:main->print#1] -- call_phi_near + // [5] phi print::p_x#2 = 1 [phi:main->print#1] -- vbuaa=vbuc1 lda #1 jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -396,7 +396,7 @@ main: { // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] // [5] phi idx#12 = idx#13 [phi:main::@1->print#0] -- register_copy - // [5] phi print::p_x#2 = 2 [phi:main::@1->print#1] -- call_phi_near + // [5] phi print::p_x#2 = 2 [phi:main::@1->print#1] -- vbuaa=vbuc1 lda #2 jsr print // main::@return diff --git a/src/test/ref/struct-44.log b/src/test/ref/struct-44.log index f8aac3cdb..da5547970 100644 --- a/src/test/ref/struct-44.log +++ b/src/test/ref/struct-44.log @@ -1316,7 +1316,7 @@ main: { // [13] phi print_circle::c_center_y#2 = print_circle::c_center_y#0 [phi:main->print_circle#1] -- register_copy // [13] phi print_circle::c_center_x#2 = print_circle::c_center_x#0 [phi:main->print_circle#2] -- register_copy // [13] phi print_circle::c_radius#2 = print_circle::c_radius#0 [phi:main->print_circle#3] -- register_copy - // [13] phi screen_line#61 = (char *) 1024+(unsigned int)$28*$a [phi:main->print_circle#4] -- call_phi_near + // [13] phi screen_line#61 = (char *) 1024+(unsigned int)$28*$a [phi:main->print_circle#4] -- pbuz1=pbuc1 lda #<$400+$28*$a sta.z screen_line lda #>$400+$28*$a @@ -1330,7 +1330,7 @@ main: { // [6] call print_ln // [30] phi from main::@1 to print_ln [phi:main::@1->print_ln] print_ln_from___b1: - // [30] phi screen_line#56 = screen_line#24 [phi:main::@1->print_ln#0] -- call_phi_near + // [30] phi screen_line#56 = screen_line#24 [phi:main::@1->print_ln#0] -- register_copy jsr print_ln jmp __b2 // main::@2 @@ -1360,7 +1360,7 @@ main: { // [13] phi print_circle::c_center_y#2 = print_circle::c_center_y#1 [phi:main::@2->print_circle#1] -- register_copy // [13] phi print_circle::c_center_x#2 = print_circle::c_center_x#1 [phi:main::@2->print_circle#2] -- register_copy // [13] phi print_circle::c_radius#2 = print_circle::c_radius#1 [phi:main::@2->print_circle#3] -- register_copy - // [13] phi screen_line#61 = screen_line#25 [phi:main::@2->print_circle#4] -- call_phi_near + // [13] phi screen_line#61 = screen_line#25 [phi:main::@2->print_circle#4] -- register_copy jsr print_circle jmp __breturn // main::@return @@ -1381,7 +1381,7 @@ print_circle: { // [33] phi screen_line#68 = screen_line#61 [phi:print_circle->print_str#0] -- register_copy // [33] phi screen_idx#68 = 0 [phi:print_circle->print_str#1] -- vbuxx=vbuc1 ldx #0 - // [33] phi print_str::str#8 = print_circle::str [phi:print_circle->print_str#2] -- call_phi_near + // [33] phi print_str::str#8 = print_circle::str [phi:print_circle->print_str#2] -- pbuz1=pbuc1 lda #str @@ -1394,7 +1394,7 @@ print_circle: { // [16] call print_uint // [40] phi from print_circle::@1 to print_uint [phi:print_circle::@1->print_uint] print_uint_from___b1: - // [40] phi print_uint::i#3 = print_uint::i#0 [phi:print_circle::@1->print_uint#0] -- call_phi_near + // [40] phi print_uint::i#3 = print_uint::i#0 [phi:print_circle::@1->print_uint#0] -- register_copy jsr print_uint // [17] phi from print_circle::@1 to print_circle::@2 [phi:print_circle::@1->print_circle::@2] __b2_from___b1: @@ -1406,7 +1406,7 @@ print_circle: { print_str_from___b2: // [33] phi screen_line#68 = screen_line#24 [phi:print_circle::@2->print_str#0] -- register_copy // [33] phi screen_idx#68 = screen_idx#25 [phi:print_circle::@2->print_str#1] -- register_copy - // [33] phi print_str::str#8 = print_circle::str1 [phi:print_circle::@2->print_str#2] -- call_phi_near + // [33] phi print_str::str#8 = print_circle::str1 [phi:print_circle::@2->print_str#2] -- pbuz1=pbuc1 lda #str1 @@ -1423,7 +1423,7 @@ print_circle: { // [20] call print_uint // [40] phi from print_circle::@3 to print_uint [phi:print_circle::@3->print_uint] print_uint_from___b3: - // [40] phi print_uint::i#3 = print_uint::i#1 [phi:print_circle::@3->print_uint#0] -- call_phi_near + // [40] phi print_uint::i#3 = print_uint::i#1 [phi:print_circle::@3->print_uint#0] -- register_copy jsr print_uint // [21] phi from print_circle::@3 to print_circle::@4 [phi:print_circle::@3->print_circle::@4] __b4_from___b3: @@ -1435,7 +1435,7 @@ print_circle: { print_str_from___b4: // [33] phi screen_line#68 = screen_line#24 [phi:print_circle::@4->print_str#0] -- register_copy // [33] phi screen_idx#68 = screen_idx#25 [phi:print_circle::@4->print_str#1] -- register_copy - // [33] phi print_str::str#8 = print_circle::str2 [phi:print_circle::@4->print_str#2] -- call_phi_near + // [33] phi print_str::str#8 = print_circle::str2 [phi:print_circle::@4->print_str#2] -- pbuz1=pbuc1 lda #str2 @@ -1452,7 +1452,7 @@ print_circle: { // [24] call print_uint // [40] phi from print_circle::@5 to print_uint [phi:print_circle::@5->print_uint] print_uint_from___b5: - // [40] phi print_uint::i#3 = print_uint::i#2 [phi:print_circle::@5->print_uint#0] -- call_phi_near + // [40] phi print_uint::i#3 = print_uint::i#2 [phi:print_circle::@5->print_uint#0] -- register_copy jsr print_uint // [25] phi from print_circle::@5 to print_circle::@6 [phi:print_circle::@5->print_circle::@6] __b6_from___b5: @@ -1464,7 +1464,7 @@ print_circle: { print_str_from___b6: // [33] phi screen_line#68 = screen_line#24 [phi:print_circle::@6->print_str#0] -- register_copy // [33] phi screen_idx#68 = screen_idx#25 [phi:print_circle::@6->print_str#1] -- register_copy - // [33] phi print_str::str#8 = print_circle::str3 [phi:print_circle::@6->print_str#2] -- call_phi_near + // [33] phi print_str::str#8 = print_circle::str3 [phi:print_circle::@6->print_str#2] -- pbuz1=pbuc1 lda #str3 @@ -1474,7 +1474,7 @@ print_circle: { // print_circle::@7 __b7: // [27] print_uchar::c#0 = print_circle::c_color#2 - // [28] call print_uchar -- call_phi_near + // [28] call print_uchar jsr print_uchar jmp __breturn // print_circle::@return @@ -1541,7 +1541,7 @@ print_str: { print_char_from___b2: // [65] phi screen_idx#54 = screen_idx#22 [phi:print_str::@2->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#22 [phi:print_str::@2->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#6 [phi:print_str::@2->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#6 [phi:print_str::@2->print_char#2] -- register_copy jsr print_char jmp __b3 // print_str::@3 @@ -1572,7 +1572,7 @@ print_uint: { print_char_from_print_uint: // [65] phi screen_idx#54 = screen_idx#22 [phi:print_uint->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#22 [phi:print_uint->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#0 [phi:print_uint->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#0 [phi:print_uint->print_char#2] -- register_copy jsr print_char jmp __b1 // print_uint::@1 @@ -1589,7 +1589,7 @@ print_uint: { print_char_from___b1: // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uint::@1->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uint::@1->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#1 [phi:print_uint::@1->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#1 [phi:print_uint::@1->print_char#2] -- register_copy jsr print_char jmp __b2 // print_uint::@2 @@ -1609,7 +1609,7 @@ print_uint: { print_char_from___b2: // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uint::@2->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uint::@2->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#2 [phi:print_uint::@2->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#2 [phi:print_uint::@2->print_char#2] -- register_copy jsr print_char jmp __b3 // print_uint::@3 @@ -1626,7 +1626,7 @@ print_uint: { print_char_from___b3: // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uint::@3->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uint::@3->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#3 [phi:print_uint::@3->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#3 [phi:print_uint::@3->print_char#2] -- register_copy jsr print_char jmp __breturn // print_uint::@return @@ -1652,7 +1652,7 @@ print_uchar: { print_char_from_print_uchar: // [65] phi screen_idx#54 = screen_idx#22 [phi:print_uchar->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#22 [phi:print_uchar->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#4 [phi:print_uchar->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#4 [phi:print_uchar->print_char#2] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -1668,7 +1668,7 @@ print_uchar: { print_char_from___b1: // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uchar::@1->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uchar::@1->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#5 [phi:print_uchar::@1->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#5 [phi:print_uchar::@1->print_char#2] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -1696,7 +1696,7 @@ print_char: { // [70] call print_ln // [30] phi from print_char::@1 to print_ln [phi:print_char::@1->print_ln] print_ln_from___b1: - // [30] phi screen_line#56 = screen_line#53 [phi:print_char::@1->print_ln#0] -- call_phi_near + // [30] phi screen_line#56 = screen_line#53 [phi:print_char::@1->print_ln#0] -- register_copy jsr print_ln // [71] phi from print_char::@1 to print_char::@return [phi:print_char::@1->print_char::@return] __breturn_from___b1: @@ -1957,7 +1957,7 @@ main: { // [13] phi print_circle::c_center_y#2 = print_circle::c_center_y#0 [phi:main->print_circle#1] -- register_copy // [13] phi print_circle::c_center_x#2 = print_circle::c_center_x#0 [phi:main->print_circle#2] -- register_copy // [13] phi print_circle::c_radius#2 = print_circle::c_radius#0 [phi:main->print_circle#3] -- register_copy - // [13] phi screen_line#61 = (char *) 1024+(unsigned int)$28*$a [phi:main->print_circle#4] -- call_phi_near + // [13] phi screen_line#61 = (char *) 1024+(unsigned int)$28*$a [phi:main->print_circle#4] -- pbuz1=pbuc1 lda #<$400+$28*$a sta.z screen_line lda #>$400+$28*$a @@ -1968,7 +1968,7 @@ main: { // print_ln() // [6] call print_ln // [30] phi from main::@1 to print_ln [phi:main::@1->print_ln] - // [30] phi screen_line#56 = screen_line#24 [phi:main::@1->print_ln#0] -- call_phi_near + // [30] phi screen_line#56 = screen_line#24 [phi:main::@1->print_ln#0] -- register_copy jsr print_ln // main::@2 // print_circle(c2) @@ -1996,7 +1996,7 @@ main: { // [13] phi print_circle::c_center_y#2 = print_circle::c_center_y#1 [phi:main::@2->print_circle#1] -- register_copy // [13] phi print_circle::c_center_x#2 = print_circle::c_center_x#1 [phi:main::@2->print_circle#2] -- register_copy // [13] phi print_circle::c_radius#2 = print_circle::c_radius#1 [phi:main::@2->print_circle#3] -- register_copy - // [13] phi screen_line#61 = screen_line#25 [phi:main::@2->print_circle#4] -- call_phi_near + // [13] phi screen_line#61 = screen_line#25 [phi:main::@2->print_circle#4] -- register_copy jsr print_circle // main::@return // } @@ -2016,7 +2016,7 @@ print_circle: { // [33] phi screen_line#68 = screen_line#61 [phi:print_circle->print_str#0] -- register_copy // [33] phi screen_idx#68 = 0 [phi:print_circle->print_str#1] -- vbuxx=vbuc1 ldx #0 - // [33] phi print_str::str#8 = print_circle::str [phi:print_circle->print_str#2] -- call_phi_near + // [33] phi print_str::str#8 = print_circle::str [phi:print_circle->print_str#2] -- pbuz1=pbuc1 lda #str @@ -2027,7 +2027,7 @@ print_circle: { // [15] print_uint::i#0 = print_circle::c_radius#2 // [16] call print_uint // [40] phi from print_circle::@1 to print_uint [phi:print_circle::@1->print_uint] - // [40] phi print_uint::i#3 = print_uint::i#0 [phi:print_circle::@1->print_uint#0] -- call_phi_near + // [40] phi print_uint::i#3 = print_uint::i#0 [phi:print_circle::@1->print_uint#0] -- register_copy jsr print_uint // [17] phi from print_circle::@1 to print_circle::@2 [phi:print_circle::@1->print_circle::@2] // print_circle::@2 @@ -2036,7 +2036,7 @@ print_circle: { // [33] phi from print_circle::@2 to print_str [phi:print_circle::@2->print_str] // [33] phi screen_line#68 = screen_line#24 [phi:print_circle::@2->print_str#0] -- register_copy // [33] phi screen_idx#68 = screen_idx#25 [phi:print_circle::@2->print_str#1] -- register_copy - // [33] phi print_str::str#8 = print_circle::str1 [phi:print_circle::@2->print_str#2] -- call_phi_near + // [33] phi print_str::str#8 = print_circle::str1 [phi:print_circle::@2->print_str#2] -- pbuz1=pbuc1 lda #str1 @@ -2051,7 +2051,7 @@ print_circle: { sta.z print_uint.i+1 // [20] call print_uint // [40] phi from print_circle::@3 to print_uint [phi:print_circle::@3->print_uint] - // [40] phi print_uint::i#3 = print_uint::i#1 [phi:print_circle::@3->print_uint#0] -- call_phi_near + // [40] phi print_uint::i#3 = print_uint::i#1 [phi:print_circle::@3->print_uint#0] -- register_copy jsr print_uint // [21] phi from print_circle::@3 to print_circle::@4 [phi:print_circle::@3->print_circle::@4] // print_circle::@4 @@ -2060,7 +2060,7 @@ print_circle: { // [33] phi from print_circle::@4 to print_str [phi:print_circle::@4->print_str] // [33] phi screen_line#68 = screen_line#24 [phi:print_circle::@4->print_str#0] -- register_copy // [33] phi screen_idx#68 = screen_idx#25 [phi:print_circle::@4->print_str#1] -- register_copy - // [33] phi print_str::str#8 = print_circle::str2 [phi:print_circle::@4->print_str#2] -- call_phi_near + // [33] phi print_str::str#8 = print_circle::str2 [phi:print_circle::@4->print_str#2] -- pbuz1=pbuc1 lda #str2 @@ -2075,7 +2075,7 @@ print_circle: { sta.z print_uint.i+1 // [24] call print_uint // [40] phi from print_circle::@5 to print_uint [phi:print_circle::@5->print_uint] - // [40] phi print_uint::i#3 = print_uint::i#2 [phi:print_circle::@5->print_uint#0] -- call_phi_near + // [40] phi print_uint::i#3 = print_uint::i#2 [phi:print_circle::@5->print_uint#0] -- register_copy jsr print_uint // [25] phi from print_circle::@5 to print_circle::@6 [phi:print_circle::@5->print_circle::@6] // print_circle::@6 @@ -2084,7 +2084,7 @@ print_circle: { // [33] phi from print_circle::@6 to print_str [phi:print_circle::@6->print_str] // [33] phi screen_line#68 = screen_line#24 [phi:print_circle::@6->print_str#0] -- register_copy // [33] phi screen_idx#68 = screen_idx#25 [phi:print_circle::@6->print_str#1] -- register_copy - // [33] phi print_str::str#8 = print_circle::str3 [phi:print_circle::@6->print_str#2] -- call_phi_near + // [33] phi print_str::str#8 = print_circle::str3 [phi:print_circle::@6->print_str#2] -- pbuz1=pbuc1 lda #str3 @@ -2093,7 +2093,7 @@ print_circle: { // print_circle::@7 // print_uchar(c.color) // [27] print_uchar::c#0 = print_circle::c_color#2 - // [28] call print_uchar -- call_phi_near + // [28] call print_uchar jsr print_uchar // print_circle::@return // } @@ -2156,7 +2156,7 @@ print_str: { // [65] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [65] phi screen_idx#54 = screen_idx#22 [phi:print_str::@2->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#22 [phi:print_str::@2->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#6 [phi:print_str::@2->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#6 [phi:print_str::@2->print_char#2] -- register_copy jsr print_char // print_str::@3 // print_char(*(str++)); @@ -2188,7 +2188,7 @@ print_uint: { // [65] phi from print_uint to print_char [phi:print_uint->print_char] // [65] phi screen_idx#54 = screen_idx#22 [phi:print_uint->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#22 [phi:print_uint->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#0 [phi:print_uint->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#0 [phi:print_uint->print_char#2] -- register_copy jsr print_char // print_uint::@1 // BYTE1(i) @@ -2205,7 +2205,7 @@ print_uint: { // [65] phi from print_uint::@1 to print_char [phi:print_uint::@1->print_char] // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uint::@1->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uint::@1->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#1 [phi:print_uint::@1->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#1 [phi:print_uint::@1->print_char#2] -- register_copy jsr print_char // print_uint::@2 // BYTE0(i) @@ -2225,7 +2225,7 @@ print_uint: { // [65] phi from print_uint::@2 to print_char [phi:print_uint::@2->print_char] // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uint::@2->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uint::@2->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#2 [phi:print_uint::@2->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#2 [phi:print_uint::@2->print_char#2] -- register_copy jsr print_char // print_uint::@3 // BYTE0(i) @@ -2242,7 +2242,7 @@ print_uint: { // [65] phi from print_uint::@3 to print_char [phi:print_uint::@3->print_char] // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uint::@3->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uint::@3->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#3 [phi:print_uint::@3->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#3 [phi:print_uint::@3->print_char#2] -- register_copy jsr print_char // print_uint::@return // } @@ -2268,7 +2268,7 @@ print_uchar: { // [65] phi from print_uchar to print_char [phi:print_uchar->print_char] // [65] phi screen_idx#54 = screen_idx#22 [phi:print_uchar->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#22 [phi:print_uchar->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#4 [phi:print_uchar->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#4 [phi:print_uchar->print_char#2] -- register_copy jsr print_char // print_uchar::@1 // c&0x0f @@ -2283,7 +2283,7 @@ print_uchar: { // [65] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [65] phi screen_idx#54 = screen_idx#25 [phi:print_uchar::@1->print_char#0] -- register_copy // [65] phi screen_line#53 = screen_line#24 [phi:print_uchar::@1->print_char#1] -- register_copy - // [65] phi print_char::c#7 = print_char::c#5 [phi:print_uchar::@1->print_char#2] -- call_phi_near + // [65] phi print_char::c#7 = print_char::c#5 [phi:print_uchar::@1->print_char#2] -- register_copy jsr print_char // print_uchar::@return // } @@ -2310,7 +2310,7 @@ print_char: { // print_ln() // [70] call print_ln // [30] phi from print_char::@1 to print_ln [phi:print_char::@1->print_ln] - // [30] phi screen_line#56 = screen_line#53 [phi:print_char::@1->print_ln#0] -- call_phi_near + // [30] phi screen_line#56 = screen_line#53 [phi:print_char::@1->print_ln#0] -- register_copy jsr print_ln // [71] phi from print_char::@1 to print_char::@return [phi:print_char::@1->print_char::@return] // [71] phi screen_line#24 = screen_line#25 [phi:print_char::@1->print_char::@return#0] -- register_copy diff --git a/src/test/ref/struct-5.log b/src/test/ref/struct-5.log index 160d184c7..562daa3bc 100644 --- a/src/test/ref/struct-5.log +++ b/src/test/ref/struct-5.log @@ -205,7 +205,7 @@ ASSEMBLER BEFORE OPTIMIZATION main: { .label SCREEN = $400 // [1] call point - // [5] phi from main to point [phi:main->point] -- call_phi_near + // [5] phi from main to point [phi:main->point] point_from_main: jsr point jmp __b1 @@ -281,7 +281,7 @@ main: { .label SCREEN = $400 // point() // [1] call point - // [5] phi from main to point [phi:main->point] -- call_phi_near + // [5] phi from main to point [phi:main->point] jsr point // main::@1 // SCREEN[0] = q.x diff --git a/src/test/ref/struct-pointer-ints.log b/src/test/ref/struct-pointer-ints.log index 929f043f6..439c9747a 100644 --- a/src/test/ref/struct-pointer-ints.log +++ b/src/test/ref/struct-pointer-ints.log @@ -198,7 +198,7 @@ main: { dey sta s,y bne !- - // [1] call update -- call_phi_near + // [1] call update jsr update jmp __breturn // main::@return @@ -279,7 +279,7 @@ main: { sta s,y bne !- // update(&s, 1000) - // [1] call update -- call_phi_near + // [1] call update jsr update // main::@return // } diff --git a/src/test/ref/struct-ptr-14.log b/src/test/ref/struct-ptr-14.log index 62e3627d2..f3667e527 100644 --- a/src/test/ref/struct-ptr-14.log +++ b/src/test/ref/struct-ptr-14.log @@ -219,7 +219,7 @@ main: { sta p-1,y dey bne !- - // [1] call set -- call_phi_near + // [1] call set jsr set jmp __b1 // main::@1 @@ -311,7 +311,7 @@ main: { dey bne !- // set(q) - // [1] call set -- call_phi_near + // [1] call set jsr set // main::@1 // SCREEN[0] = q->x diff --git a/src/test/ref/struct-ptr-16.log b/src/test/ref/struct-ptr-16.log index ae180a3ec..efca071e2 100644 --- a/src/test/ref/struct-ptr-16.log +++ b/src/test/ref/struct-ptr-16.log @@ -510,7 +510,7 @@ main: { // [1] call get // [21] phi from main to get [phi:main->get] get_from_main: - // [21] phi get::i#2 = 0 [phi:main->get#0] -- call_phi_near + // [21] phi get::i#2 = 0 [phi:main->get#0] -- vbuaa=vbuc1 lda #0 jsr get // [2] get::return_x#0 = get::return_x#7 @@ -540,7 +540,7 @@ main: { // [10] call get // [21] phi from main::@1 to get [phi:main::@1->get] get_from___b1: - // [21] phi get::i#2 = get::i#1 [phi:main::@1->get#0] -- call_phi_near + // [21] phi get::i#2 = get::i#1 [phi:main::@1->get#0] -- register_copy jsr get // [11] get::return_x#1 = get::return_x#7 // [12] get::return_y#1 = get::return_y#7 @@ -731,7 +731,7 @@ main: { // get(0) // [1] call get // [21] phi from main to get [phi:main->get] - // [21] phi get::i#2 = 0 [phi:main->get#0] -- call_phi_near + // [21] phi get::i#2 = 0 [phi:main->get#0] -- vbuaa=vbuc1 lda #0 jsr get // get(0) @@ -757,7 +757,7 @@ main: { tya // [10] call get // [21] phi from main::@1 to get [phi:main::@1->get] - // [21] phi get::i#2 = get::i#1 [phi:main::@1->get#0] -- call_phi_near + // [21] phi get::i#2 = get::i#1 [phi:main::@1->get#0] -- register_copy jsr get // get(i) // [11] get::return_x#1 = get::return_x#7 diff --git a/src/test/ref/struct-ptr-17.log b/src/test/ref/struct-ptr-17.log index 21ef57152..25a9edc1e 100644 --- a/src/test/ref/struct-ptr-17.log +++ b/src/test/ref/struct-ptr-17.log @@ -337,7 +337,7 @@ main: { // [1] call get // [17] phi from main to get [phi:main->get] get_from_main: - // [17] phi get::return_x#2 = 0 [phi:main->get#0] -- call_phi_near + // [17] phi get::return_x#2 = 0 [phi:main->get#0] -- vbuaa=vbuc1 lda #0 jsr get // [2] get::return_x#0 = get::return_x#2 @@ -366,7 +366,7 @@ main: { // [8] call get // [17] phi from main::@1 to get [phi:main::@1->get] get_from___b1: - // [17] phi get::return_x#2 = get::i#1 [phi:main::@1->get#0] -- call_phi_near + // [17] phi get::return_x#2 = get::i#1 [phi:main::@1->get#0] -- register_copy jsr get // [9] get::return_x#1 = get::return_x#2 jmp __b3 @@ -483,7 +483,7 @@ main: { // get(0) // [1] call get // [17] phi from main to get [phi:main->get] - // [17] phi get::return_x#2 = 0 [phi:main->get#0] -- call_phi_near + // [17] phi get::return_x#2 = 0 [phi:main->get#0] -- vbuaa=vbuc1 lda #0 jsr get // get(0) @@ -508,7 +508,7 @@ main: { tya // [8] call get // [17] phi from main::@1 to get [phi:main::@1->get] - // [17] phi get::return_x#2 = get::i#1 [phi:main::@1->get#0] -- call_phi_near + // [17] phi get::return_x#2 = get::i#1 [phi:main::@1->get#0] -- register_copy jsr get // get(i) // [9] get::return_x#1 = get::return_x#2 diff --git a/src/test/ref/struct-ptr-18.log b/src/test/ref/struct-ptr-18.log index aef25a7ae..01cd484ed 100644 --- a/src/test/ref/struct-ptr-18.log +++ b/src/test/ref/struct-ptr-18.log @@ -366,7 +366,7 @@ main: { // [5] print::p_y#0 = ((char *)points+OFFSET_STRUCT_POINT_Y)[main::$4] -- vbuyy=pbuc1_derefidx_vbuyy lda points+OFFSET_STRUCT_POINT_Y,y tay - // [6] call print -- call_phi_near + // [6] call print jsr print jmp __b2 // main::@2 @@ -518,7 +518,7 @@ main: { // [5] print::p_y#0 = ((char *)points+OFFSET_STRUCT_POINT_Y)[main::$4] -- vbuyy=pbuc1_derefidx_vbuyy lda points+OFFSET_STRUCT_POINT_Y,y tay - // [6] call print -- call_phi_near + // [6] call print jsr print // main::@2 // for ( char i: 0..1) diff --git a/src/test/ref/struct-ptr-19.log b/src/test/ref/struct-ptr-19.log index 1ce20220d..7fedae1e8 100644 --- a/src/test/ref/struct-ptr-19.log +++ b/src/test/ref/struct-ptr-19.log @@ -302,7 +302,7 @@ main: { // [8] phi idx#12 = 0 [phi:main->print#1] -- vbuz1=vbuc1 lda #0 sta.z idx - // [8] phi print::p_x#2 = print::p_x#0 [phi:main->print#2] -- call_phi_near + // [8] phi print::p_x#2 = print::p_x#0 [phi:main->print#2] -- register_copy jsr print jmp __b1 // main::@1 @@ -316,7 +316,7 @@ main: { print_from___b1: // [8] phi print::p_y#2 = print::p_y#1 [phi:main::@1->print#0] -- register_copy // [8] phi idx#12 = idx#13 [phi:main::@1->print#1] -- register_copy - // [8] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#2] -- call_phi_near + // [8] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#2] -- register_copy jsr print jmp __breturn // main::@return @@ -437,7 +437,7 @@ main: { // [8] phi idx#12 = 0 [phi:main->print#1] -- vbuz1=vbuc1 lda #0 sta.z idx - // [8] phi print::p_x#2 = print::p_x#0 [phi:main->print#2] -- call_phi_near + // [8] phi print::p_x#2 = print::p_x#0 [phi:main->print#2] -- register_copy jsr print // main::@1 // print(*ptr) @@ -449,7 +449,7 @@ main: { // [8] phi from main::@1 to print [phi:main::@1->print] // [8] phi print::p_y#2 = print::p_y#1 [phi:main::@1->print#0] -- register_copy // [8] phi idx#12 = idx#13 [phi:main::@1->print#1] -- register_copy - // [8] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#2] -- call_phi_near + // [8] phi print::p_x#2 = print::p_x#1 [phi:main::@1->print#2] -- register_copy jsr print // main::@return // } diff --git a/src/test/ref/struct-ptr-22.log b/src/test/ref/struct-ptr-22.log index 4c11521d2..a2ca0c0e0 100644 --- a/src/test/ref/struct-ptr-22.log +++ b/src/test/ref/struct-ptr-22.log @@ -1039,7 +1039,7 @@ main: { sta (__13),y // [4] call print_cls // writes address 0x4004 (right!) - // [18] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [18] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [5] phi from main to main::@1 [phi:main->main::@1] @@ -1055,7 +1055,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [21] phi print_str::str#6 = main::str [phi:main::@1->print_str#1] -- call_phi_near + // [21] phi print_str::str#6 = main::str [phi:main::@1->print_str#1] -- pbuz1=pbuc1 lda #str @@ -1069,7 +1069,7 @@ main: { // [8] call print_uchar // [28] phi from main::@2 to print_uchar [phi:main::@2->print_uchar] print_uchar_from___b2: - // [28] phi print_uchar::b#2 = print_uchar::b#0 [phi:main::@2->print_uchar#0] -- call_phi_near + // [28] phi print_uchar::b#2 = print_uchar::b#0 [phi:main::@2->print_uchar#0] -- register_copy jsr print_uchar // [9] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -1079,7 +1079,7 @@ main: { // [10] call print_ln // [36] phi from main::@3 to print_ln [phi:main::@3->print_ln] print_ln_from___b3: - // [36] phi print_line_cursor#21 = print_screen#0 [phi:main::@3->print_ln#0] -- call_phi_near + // [36] phi print_line_cursor#21 = print_screen#0 [phi:main::@3->print_ln#0] -- pbuz1=pbuc1 lda #print_screen @@ -1097,7 +1097,7 @@ main: { // [21] phi from main::@4 to print_str [phi:main::@4->print_str] print_str_from___b4: // [21] phi print_char_cursor#48 = print_char_cursor#49 [phi:main::@4->print_str#0] -- register_copy - // [21] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- call_phi_near + // [21] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -1111,7 +1111,7 @@ main: { // [14] call print_uchar // [28] phi from main::@5 to print_uchar [phi:main::@5->print_uchar] print_uchar_from___b5: - // [28] phi print_uchar::b#2 = print_uchar::b#1 [phi:main::@5->print_uchar#0] -- call_phi_near + // [28] phi print_uchar::b#2 = print_uchar::b#1 [phi:main::@5->print_uchar#0] -- register_copy jsr print_uchar // [15] phi from main::@5 to main::@6 [phi:main::@5->main::@6] __b6_from___b5: @@ -1121,7 +1121,7 @@ main: { // [16] call print_ln // [36] phi from main::@6 to print_ln [phi:main::@6->print_ln] print_ln_from___b6: - // [36] phi print_line_cursor#21 = print_line_cursor#0 [phi:main::@6->print_ln#0] -- call_phi_near + // [36] phi print_line_cursor#21 = print_line_cursor#0 [phi:main::@6->print_ln#0] -- register_copy jsr print_ln jmp __breturn // main::@return @@ -1139,7 +1139,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [19] call memset - // [41] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [41] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -1180,7 +1180,7 @@ print_str: { // [47] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [47] phi print_char_cursor#29 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [47] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [47] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char jmp __b3 // print_str::@3 @@ -1210,7 +1210,7 @@ print_uchar: { // [47] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [47] phi print_char_cursor#29 = print_char_cursor#1 [phi:print_uchar->print_char#0] -- register_copy - // [47] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near + // [47] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -1224,7 +1224,7 @@ print_uchar: { // [47] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [47] phi print_char_cursor#29 = print_char_cursor#30 [phi:print_uchar::@1->print_char#0] -- register_copy - // [47] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [47] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -1516,7 +1516,7 @@ main: { // print_cls() // [4] call print_cls // writes address 0x4004 (right!) - // [18] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [18] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [5] phi from main to main::@1 [phi:main->main::@1] // main::@1 @@ -1528,7 +1528,7 @@ main: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [21] phi print_str::str#6 = main::str [phi:main::@1->print_str#1] -- call_phi_near + // [21] phi print_str::str#6 = main::str [phi:main::@1->print_str#1] -- pbuz1=pbuc1 lda #str @@ -1540,14 +1540,14 @@ main: { ldx.z 0 // [8] call print_uchar // [28] phi from main::@2 to print_uchar [phi:main::@2->print_uchar] - // [28] phi print_uchar::b#2 = print_uchar::b#0 [phi:main::@2->print_uchar#0] -- call_phi_near + // [28] phi print_uchar::b#2 = print_uchar::b#0 [phi:main::@2->print_uchar#0] -- register_copy jsr print_uchar // [9] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // print_ln() // [10] call print_ln // [36] phi from main::@3 to print_ln [phi:main::@3->print_ln] - // [36] phi print_line_cursor#21 = print_screen#0 [phi:main::@3->print_ln#0] -- call_phi_near + // [36] phi print_line_cursor#21 = print_screen#0 [phi:main::@3->print_ln#0] -- pbuz1=pbuc1 lda #print_screen @@ -1563,7 +1563,7 @@ main: { // [12] call print_str // [21] phi from main::@4 to print_str [phi:main::@4->print_str] // [21] phi print_char_cursor#48 = print_char_cursor#49 [phi:main::@4->print_str#0] -- register_copy - // [21] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- call_phi_near + // [21] phi print_str::str#6 = main::str1 [phi:main::@4->print_str#1] -- pbuz1=pbuc1 lda #str1 @@ -1575,14 +1575,14 @@ main: { ldx $4004 // [14] call print_uchar // [28] phi from main::@5 to print_uchar [phi:main::@5->print_uchar] - // [28] phi print_uchar::b#2 = print_uchar::b#1 [phi:main::@5->print_uchar#0] -- call_phi_near + // [28] phi print_uchar::b#2 = print_uchar::b#1 [phi:main::@5->print_uchar#0] -- register_copy jsr print_uchar // [15] phi from main::@5 to main::@6 [phi:main::@5->main::@6] // main::@6 // print_ln() // [16] call print_ln // [36] phi from main::@6 to print_ln [phi:main::@6->print_ln] - // [36] phi print_line_cursor#21 = print_line_cursor#0 [phi:main::@6->print_ln#0] -- call_phi_near + // [36] phi print_line_cursor#21 = print_line_cursor#0 [phi:main::@6->print_ln#0] -- register_copy jsr print_ln // main::@return // } @@ -1600,7 +1600,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [19] call memset - // [41] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [41] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -1636,7 +1636,7 @@ print_str: { // [26] call print_char // [47] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [47] phi print_char_cursor#29 = print_char_cursor#1 [phi:print_str::@2->print_char#0] -- register_copy - // [47] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [47] phi print_char::ch#3 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char // print_str::@3 // print_char(*(str++)); @@ -1666,7 +1666,7 @@ print_uchar: { // Table of hexadecimal digits // [47] phi from print_uchar to print_char [phi:print_uchar->print_char] // [47] phi print_char_cursor#29 = print_char_cursor#1 [phi:print_uchar->print_char#0] -- register_copy - // [47] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near + // [47] phi print_char::ch#3 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -1679,7 +1679,7 @@ print_uchar: { // [34] call print_char // [47] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [47] phi print_char_cursor#29 = print_char_cursor#30 [phi:print_uchar::@1->print_char#0] -- register_copy - // [47] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [47] phi print_char::ch#3 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/struct-ptr-23.log b/src/test/ref/struct-ptr-23.log index 670db72d5..cbf14967f 100644 --- a/src/test/ref/struct-ptr-23.log +++ b/src/test/ref/struct-ptr-23.log @@ -391,7 +391,7 @@ main: { print_person_from_main: // [5] phi idx#16 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- pssz1=pssc1 lda #persons @@ -406,7 +406,7 @@ main: { // [5] phi from main::@1 to print_person [phi:main::@1->print_person] print_person_from___b1: // [5] phi idx#16 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = main::person#1 [phi:main::@1->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = main::person#1 [phi:main::@1->print_person#1] -- pssz1=pssc1 lda #person @@ -567,7 +567,7 @@ main: { // [5] phi from main to print_person [phi:main->print_person] // [5] phi idx#16 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- pssz1=pssc1 lda #persons @@ -579,7 +579,7 @@ main: { // [3] call print_person // [5] phi from main::@1 to print_person [phi:main::@1->print_person] // [5] phi idx#16 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = main::person#1 [phi:main::@1->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = main::person#1 [phi:main::@1->print_person#1] -- pssz1=pssc1 lda #person diff --git a/src/test/ref/struct-ptr-24.log b/src/test/ref/struct-ptr-24.log index 86e8070b3..612b6a134 100644 --- a/src/test/ref/struct-ptr-24.log +++ b/src/test/ref/struct-ptr-24.log @@ -227,7 +227,7 @@ main: { // main::@2 __b2: // [4] PrintName::file#0 = main::file#2 - // [5] call PrintName -- call_phi_near + // [5] call PrintName jsr PrintName jmp __b3 // main::@3 @@ -345,7 +345,7 @@ main: { __b2: // PrintName(file) // [4] PrintName::file#0 = main::file#2 - // [5] call PrintName -- call_phi_near + // [5] call PrintName jsr PrintName // main::@3 // ++file; diff --git a/src/test/ref/struct-ptr-26.log b/src/test/ref/struct-ptr-26.log index 00c214918..883b54c3a 100644 --- a/src/test/ref/struct-ptr-26.log +++ b/src/test/ref/struct-ptr-26.log @@ -501,7 +501,7 @@ main: { lda ($fe),y sta.z uSize+1 // [2] print_uint::w#0 = main::uSize#1 - // [3] call print_uint -- call_phi_near + // [3] call print_uint jsr print_uint jmp __breturn // main::@return @@ -524,7 +524,7 @@ print_uint: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [10] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [10] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -535,7 +535,7 @@ print_uint: { // [10] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [10] phi print_char_cursor#26 = print_char_cursor#20 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [10] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [10] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -561,7 +561,7 @@ print_uchar: { // [18] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [18] phi print_char_cursor#19 = print_char_cursor#26 [phi:print_uchar->print_char#0] -- register_copy - // [18] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [18] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -575,7 +575,7 @@ print_uchar: { // [18] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [18] phi print_char_cursor#19 = print_char_cursor#20 [phi:print_uchar::@1->print_char#0] -- register_copy - // [18] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [18] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -713,7 +713,7 @@ main: { sta.z uSize+1 // print_uint(uSize) // [2] print_uint::w#0 = main::uSize#1 - // [3] call print_uint -- call_phi_near + // [3] call print_uint jsr print_uint // main::@return // } @@ -735,7 +735,7 @@ print_uint: { sta.z print_char_cursor lda #>print_screen sta.z print_char_cursor+1 - // [10] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [10] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -744,7 +744,7 @@ print_uint: { // [8] call print_uchar // [10] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [10] phi print_char_cursor#26 = print_char_cursor#20 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [10] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [10] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@return // } @@ -770,7 +770,7 @@ print_uchar: { // Table of hexadecimal digits // [18] phi from print_uchar to print_char [phi:print_uchar->print_char] // [18] phi print_char_cursor#19 = print_char_cursor#26 [phi:print_uchar->print_char#0] -- register_copy - // [18] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [18] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -783,7 +783,7 @@ print_uchar: { // [16] call print_char // [18] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [18] phi print_char_cursor#19 = print_char_cursor#20 [phi:print_uchar::@1->print_char#0] -- register_copy - // [18] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [18] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/struct-ptr-28.log b/src/test/ref/struct-ptr-28.log index b55726613..16f789147 100644 --- a/src/test/ref/struct-ptr-28.log +++ b/src/test/ref/struct-ptr-28.log @@ -406,7 +406,7 @@ main: { print_person_from_main: // [5] phi idx#14 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = &main::jesper [phi:main->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = &main::jesper [phi:main->print_person#1] -- pssz1=pssc1 lda #jesper @@ -426,7 +426,7 @@ main: { // [5] phi from main::@1 to print_person [phi:main::@1->print_person] print_person_from___b1: // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = &main::henriette [phi:main::@1->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = &main::henriette [phi:main::@1->print_person#1] -- pssz1=pssc1 lda #henriette @@ -618,7 +618,7 @@ main: { // [5] phi from main to print_person [phi:main->print_person] // [5] phi idx#14 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = &main::jesper [phi:main->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = &main::jesper [phi:main->print_person#1] -- pssz1=pssc1 lda #jesper @@ -637,7 +637,7 @@ main: { // [3] call print_person // [5] phi from main::@1 to print_person [phi:main::@1->print_person] // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = &main::henriette [phi:main::@1->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = &main::henriette [phi:main::@1->print_person#1] -- pssz1=pssc1 lda #henriette diff --git a/src/test/ref/struct-ptr-29.log b/src/test/ref/struct-ptr-29.log index f5178c5fa..0851f3245 100644 --- a/src/test/ref/struct-ptr-29.log +++ b/src/test/ref/struct-ptr-29.log @@ -372,7 +372,7 @@ main: { print_person_from_main: // [5] phi idx#14 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- pssz1=pssc1 lda #persons @@ -387,7 +387,7 @@ main: { // [5] phi from main::@1 to print_person [phi:main::@1->print_person] print_person_from___b1: // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- pssz1=pssc1 lda #persons+1*SIZEOF_STRUCT_PERSON @@ -559,7 +559,7 @@ main: { // [5] phi from main to print_person [phi:main->print_person] // [5] phi idx#14 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- pssz1=pssc1 lda #persons @@ -571,7 +571,7 @@ main: { // [3] call print_person // [5] phi from main::@1 to print_person [phi:main::@1->print_person] // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- pssz1=pssc1 lda #persons+1*SIZEOF_STRUCT_PERSON diff --git a/src/test/ref/struct-ptr-30.log b/src/test/ref/struct-ptr-30.log index f5c1e15fd..ac2bddd57 100644 --- a/src/test/ref/struct-ptr-30.log +++ b/src/test/ref/struct-ptr-30.log @@ -375,7 +375,7 @@ main: { sta.z print.p_y lda points+OFFSET_STRUCT_POINT_Y+1,y sta.z print.p_y+1 - // [6] call print -- call_phi_near + // [6] call print jsr print jmp __b2 // main::@2 @@ -543,7 +543,7 @@ main: { sta.z print.p_y lda points+OFFSET_STRUCT_POINT_Y+1,y sta.z print.p_y+1 - // [6] call print -- call_phi_near + // [6] call print jsr print // main::@2 // for ( char i: 0..3) diff --git a/src/test/ref/struct-ptr-31.log b/src/test/ref/struct-ptr-31.log index 40b5b2919..6a4043e79 100644 --- a/src/test/ref/struct-ptr-31.log +++ b/src/test/ref/struct-ptr-31.log @@ -378,7 +378,7 @@ main: { print_person_from_main: // [5] phi idx#14 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- pssz1=pssc1 lda #persons @@ -393,7 +393,7 @@ main: { // [5] phi from main::@1 to print_person [phi:main::@1->print_person] print_person_from___b1: // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- pssz1=pssc1 lda #persons+1*SIZEOF_STRUCT_PERSON @@ -570,7 +570,7 @@ main: { // [5] phi from main to print_person [phi:main->print_person] // [5] phi idx#14 = 0 [phi:main->print_person#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = persons [phi:main->print_person#1] -- pssz1=pssc1 lda #persons @@ -582,7 +582,7 @@ main: { // [3] call print_person // [5] phi from main::@1 to print_person [phi:main::@1->print_person] // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#0] -- register_copy - // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- call_phi_near + // [5] phi print_person::person#2 = persons+1*SIZEOF_STRUCT_PERSON [phi:main::@1->print_person#1] -- pssz1=pssc1 lda #persons+1*SIZEOF_STRUCT_PERSON diff --git a/src/test/ref/struct-ptr-34.log b/src/test/ref/struct-ptr-34.log index a40dc698b..7c8268e35 100644 --- a/src/test/ref/struct-ptr-34.log +++ b/src/test/ref/struct-ptr-34.log @@ -377,7 +377,7 @@ main: { // [5] phi idx#14 = 0 [phi:main->print_person#1] -- vbuz1=vbuc1 lda #0 sta.z idx - // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- call_phi_near + // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- vbuxx=vbuc1 ldx #jesper_id jsr print_person jmp __b1 @@ -399,7 +399,7 @@ main: { lda #>henriette_name sta.z print_person.person_name+1 // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#1] -- register_copy - // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- call_phi_near + // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- vbuxx=vbuc1 ldx #henriette_id jsr print_person jmp __breturn @@ -573,7 +573,7 @@ main: { // [5] phi idx#14 = 0 [phi:main->print_person#1] -- vbuz1=vbuc1 lda #0 sta.z idx - // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- call_phi_near + // [5] phi print_person::person_id#2 = main::jesper_id [phi:main->print_person#2] -- vbuxx=vbuc1 ldx #jesper_id jsr print_person // main::@1 @@ -594,7 +594,7 @@ main: { lda #>henriette_name sta.z print_person.person_name+1 // [5] phi idx#14 = idx#17 [phi:main::@1->print_person#1] -- register_copy - // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- call_phi_near + // [5] phi print_person::person_id#2 = main::henriette_id [phi:main::@1->print_person#2] -- vbuxx=vbuc1 ldx #henriette_id jsr print_person // main::@return diff --git a/src/test/ref/struct-unwinding-2.log b/src/test/ref/struct-unwinding-2.log index bd3ca1afc..57b719231 100644 --- a/src/test/ref/struct-unwinding-2.log +++ b/src/test/ref/struct-unwinding-2.log @@ -391,7 +391,7 @@ main: { print1_from_main: // [12] phi print1::p_y#2 = print1::p_y#0 [phi:main->print1#0] -- register_copy // [12] phi print1::p_x#2 = print1::p_x#0 [phi:main->print1#1] -- register_copy - // [12] phi print1::idx#2 = 0 [phi:main->print1#2] -- call_phi_near + // [12] phi print1::idx#2 = 0 [phi:main->print1#2] -- vbuaa=vbuc1 lda #0 jsr print1 jmp __b1 @@ -407,7 +407,7 @@ main: { print2_from___b1: // [17] phi print2::p_y#2 = print2::p_y#0 [phi:main::@1->print2#0] -- register_copy // [17] phi print2::p_x#2 = print2::p_x#0 [phi:main::@1->print2#1] -- register_copy - // [17] phi print2::idx#2 = 2 [phi:main::@1->print2#2] -- call_phi_near + // [17] phi print2::idx#2 = 2 [phi:main::@1->print2#2] -- vbuaa=vbuc1 lda #2 jsr print2 // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -423,7 +423,7 @@ main: { ldx #p2_y // [12] phi print1::p_x#2 = main::p2_x [phi:main::@2->print1#1] -- vbuyy=vbuc1 ldy #p2_x - // [12] phi print1::idx#2 = 4 [phi:main::@2->print1#2] -- call_phi_near + // [12] phi print1::idx#2 = 4 [phi:main::@2->print1#2] -- vbuaa=vbuc1 lda #4 jsr print1 // [9] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -439,7 +439,7 @@ main: { ldx #p2_y // [17] phi print2::p_x#2 = main::p2_x [phi:main::@3->print2#1] -- vbuyy=vbuc1 ldy #p2_x - // [17] phi print2::idx#2 = 6 [phi:main::@3->print2#2] -- call_phi_near + // [17] phi print2::idx#2 = 6 [phi:main::@3->print2#2] -- vbuaa=vbuc1 lda #6 jsr print2 jmp __breturn @@ -607,7 +607,7 @@ main: { // [12] phi from main to print1 [phi:main->print1] // [12] phi print1::p_y#2 = print1::p_y#0 [phi:main->print1#0] -- register_copy // [12] phi print1::p_x#2 = print1::p_x#0 [phi:main->print1#1] -- register_copy - // [12] phi print1::idx#2 = 0 [phi:main->print1#2] -- call_phi_near + // [12] phi print1::idx#2 = 0 [phi:main->print1#2] -- vbuaa=vbuc1 lda #0 jsr print1 // main::@1 @@ -621,7 +621,7 @@ main: { // [17] phi from main::@1 to print2 [phi:main::@1->print2] // [17] phi print2::p_y#2 = print2::p_y#0 [phi:main::@1->print2#0] -- register_copy // [17] phi print2::p_x#2 = print2::p_x#0 [phi:main::@1->print2#1] -- register_copy - // [17] phi print2::idx#2 = 2 [phi:main::@1->print2#2] -- call_phi_near + // [17] phi print2::idx#2 = 2 [phi:main::@1->print2#2] -- vbuaa=vbuc1 lda #2 jsr print2 // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -634,7 +634,7 @@ main: { ldx #p2_y // [12] phi print1::p_x#2 = main::p2_x [phi:main::@2->print1#1] -- vbuyy=vbuc1 ldy #p2_x - // [12] phi print1::idx#2 = 4 [phi:main::@2->print1#2] -- call_phi_near + // [12] phi print1::idx#2 = 4 [phi:main::@2->print1#2] -- vbuaa=vbuc1 lda #4 jsr print1 // [9] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -647,7 +647,7 @@ main: { ldx #p2_y // [17] phi print2::p_x#2 = main::p2_x [phi:main::@3->print2#1] -- vbuyy=vbuc1 ldy #p2_x - // [17] phi print2::idx#2 = 6 [phi:main::@3->print2#2] -- call_phi_near + // [17] phi print2::idx#2 = 6 [phi:main::@3->print2#2] -- vbuaa=vbuc1 lda #6 jsr print2 // main::@return diff --git a/src/test/ref/summin.log b/src/test/ref/summin.log index fed3ac18d..72960af5a 100644 --- a/src/test/ref/summin.log +++ b/src/test/ref/summin.log @@ -344,7 +344,7 @@ main: { sum_from_main: // [14] phi sum::b#3 = 2 [phi:main->sum#0] -- vbuaa=vbuc1 lda #2 - // [14] phi sum::a#3 = 1 [phi:main->sum#1] -- call_phi_near + // [14] phi sum::a#3 = 1 [phi:main->sum#1] -- vbuxx=vbuc1 ldx #1 jsr sum // [2] sum::return#0 = sum::return#3 @@ -358,7 +358,7 @@ main: { sum_from___b1: // [14] phi sum::b#3 = 4 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #4 - // [14] phi sum::a#3 = 3 [phi:main::@1->sum#1] -- call_phi_near + // [14] phi sum::a#3 = 3 [phi:main::@1->sum#1] -- vbuxx=vbuc1 ldx #3 jsr sum // [5] sum::return#1 = sum::return#3 @@ -372,7 +372,7 @@ main: { sum_from___b2: // [14] phi sum::b#3 = $d [phi:main::@2->sum#0] -- vbuaa=vbuc1 lda #$d - // [14] phi sum::a#3 = 9 [phi:main::@2->sum#1] -- call_phi_near + // [14] phi sum::a#3 = 9 [phi:main::@2->sum#1] -- vbuxx=vbuc1 ldx #9 jsr sum // [8] sum::return#2 = sum::return#3 @@ -489,7 +489,7 @@ main: { // [14] phi from main to sum [phi:main->sum] // [14] phi sum::b#3 = 2 [phi:main->sum#0] -- vbuaa=vbuc1 lda #2 - // [14] phi sum::a#3 = 1 [phi:main->sum#1] -- call_phi_near + // [14] phi sum::a#3 = 1 [phi:main->sum#1] -- vbuxx=vbuc1 ldx #1 jsr sum // byte s1=sum(1,2) @@ -502,7 +502,7 @@ main: { // [14] phi from main::@1 to sum [phi:main::@1->sum] // [14] phi sum::b#3 = 4 [phi:main::@1->sum#0] -- vbuaa=vbuc1 lda #4 - // [14] phi sum::a#3 = 3 [phi:main::@1->sum#1] -- call_phi_near + // [14] phi sum::a#3 = 3 [phi:main::@1->sum#1] -- vbuxx=vbuc1 ldx #3 jsr sum // byte s2=sum(3,4) @@ -515,7 +515,7 @@ main: { // [14] phi from main::@2 to sum [phi:main::@2->sum] // [14] phi sum::b#3 = $d [phi:main::@2->sum#0] -- vbuaa=vbuc1 lda #$d - // [14] phi sum::a#3 = 9 [phi:main::@2->sum#1] -- call_phi_near + // [14] phi sum::a#3 = 9 [phi:main::@2->sum#1] -- vbuxx=vbuc1 ldx #9 jsr sum // byte s3=sum(9,13) diff --git a/src/test/ref/ternary-3.log b/src/test/ref/ternary-3.log index 9d783e981..e59a43842 100644 --- a/src/test/ref/ternary-3.log +++ b/src/test/ref/ternary-3.log @@ -413,7 +413,7 @@ main: { __b1: // [2] cond::b#0 = main::i#2 -- vbuaa=vbuxx txa - // [3] call cond -- call_phi_near + // [3] call cond jsr cond // [4] cond::return#0 = cond::return#1 jmp __b5 @@ -428,7 +428,7 @@ main: { __b3: // [7] m2::i#0 = main::i#2 -- vbuaa=vbuxx txa - // [8] call m2 -- call_phi_near + // [8] call m2 jsr m2 // [9] m2::return#0 = m2::return#1 jmp __b7 @@ -458,7 +458,7 @@ main: { __b2: // [16] m1::i#0 = main::i#2 -- vbuaa=vbuxx txa - // [17] call m1 -- call_phi_near + // [17] call m1 jsr m1 // [18] m1::return#0 = m1::return#1 jmp __b6 @@ -610,7 +610,7 @@ main: { // cond(i) // [2] cond::b#0 = main::i#2 -- vbuaa=vbuxx txa - // [3] call cond -- call_phi_near + // [3] call cond jsr cond // [4] cond::return#0 = cond::return#1 // main::@5 @@ -623,7 +623,7 @@ main: { // m2(i) // [7] m2::i#0 = main::i#2 -- vbuaa=vbuxx txa - // [8] call m2 -- call_phi_near + // [8] call m2 jsr m2 // [9] m2::return#0 = m2::return#1 // main::@7 @@ -651,7 +651,7 @@ main: { // m1(i) // [16] m1::i#0 = main::i#2 -- vbuaa=vbuxx txa - // [17] call m1 -- call_phi_near + // [17] call m1 jsr m1 // [18] m1::return#0 = m1::return#1 // main::@6 diff --git a/src/test/ref/test-comments-block.log b/src/test/ref/test-comments-block.log index fdd1384b5..39b585c7f 100644 --- a/src/test/ref/test-comments-block.log +++ b/src/test/ref/test-comments-block.log @@ -268,7 +268,7 @@ main: { __b1: // [2] sum::b#0 = main::b#2 -- vbuaa=vbuyy tya - // [3] call sum -- call_phi_near + // [3] call sum jsr sum // [4] sum::return#0 = sum::return#1 jmp __b2 @@ -395,7 +395,7 @@ main: { // sum(a, b) // [2] sum::b#0 = main::b#2 -- vbuaa=vbuyy tya - // [3] call sum -- call_phi_near + // [3] call sum jsr sum // [4] sum::return#0 = sum::return#1 // main::@2 diff --git a/src/test/ref/test-comments-global.log b/src/test/ref/test-comments-global.log index 593c45e1e..dd2286dbf 100644 --- a/src/test/ref/test-comments-global.log +++ b/src/test/ref/test-comments-global.log @@ -130,7 +130,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -215,7 +215,7 @@ __start: { sta.z screen+1 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/test-comments-single.log b/src/test/ref/test-comments-single.log index 438b8bb10..991fbf8ef 100644 --- a/src/test/ref/test-comments-single.log +++ b/src/test/ref/test-comments-single.log @@ -267,7 +267,7 @@ main: { __b1: // [2] sum::b#0 = main::b#2 -- vbuaa=vbuyy tya - // [3] call sum -- call_phi_near + // [3] call sum jsr sum // [4] sum::return#0 = sum::return#1 jmp __b2 @@ -392,7 +392,7 @@ main: { // sum(a, b) // [2] sum::b#0 = main::b#2 -- vbuaa=vbuyy tya - // [3] call sum -- call_phi_near + // [3] call sum jsr sum // [4] sum::return#0 = sum::return#1 // main::@2 diff --git a/src/test/ref/test-comparisons-sword.log b/src/test/ref/test-comparisons-sword.log index c9e36d50b..8ca79b5a4 100644 --- a/src/test/ref/test-comparisons-sword.log +++ b/src/test/ref/test-comparisons-sword.log @@ -2186,7 +2186,7 @@ main: { .label j = $f .label i = $12 // [1] call print_cls - // [26] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [26] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -2279,7 +2279,7 @@ main: { // [10] compare::w2#0 = main::w2#0 // [11] compare::op#0 = main::op#2 -- vbuaa=vbuz1 lda.z op - // [12] call compare -- call_phi_near + // [12] call compare jsr compare jmp __b9 // main::@9 @@ -2296,7 +2296,7 @@ main: { // main::@5 __b5: // [16] call print_ln - // [63] phi from main::@5 to print_ln [phi:main::@5->print_ln] -- call_phi_near + // [63] phi from main::@5 to print_ln [phi:main::@5->print_ln] print_ln_from___b5: jsr print_ln jmp __b10 @@ -2360,7 +2360,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [27] call memset - // [68] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [68] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -2467,14 +2467,14 @@ compare: { // [74] phi from compare::@6 to print_sint [phi:compare::@6->print_sint] print_sint_from___b6: // [74] phi print_char_cursor#61 = print_char_cursor#67 [phi:compare::@6->print_sint#0] -- register_copy - // [74] phi print_sint::w#3 = print_sint::w#1 [phi:compare::@6->print_sint#1] -- call_phi_near + // [74] phi print_sint::w#3 = print_sint::w#1 [phi:compare::@6->print_sint#1] -- register_copy jsr print_sint jmp __b25 // compare::@25 __b25: // [41] print_str::str#1 = compare::ops#7 // [42] call print_str - // [85] phi from compare::@25 to print_str [phi:compare::@25->print_str] -- call_phi_near + // [85] phi from compare::@25 to print_str [phi:compare::@25->print_str] print_str_from___b25: jsr print_str jmp __b26 @@ -2489,7 +2489,7 @@ compare: { // [74] phi from compare::@26 to print_sint [phi:compare::@26->print_sint] print_sint_from___b26: // [74] phi print_char_cursor#61 = print_char_cursor#14 [phi:compare::@26->print_sint#0] -- register_copy - // [74] phi print_sint::w#3 = print_sint::w#2 [phi:compare::@26->print_sint#1] -- call_phi_near + // [74] phi print_sint::w#3 = print_sint::w#2 [phi:compare::@26->print_sint#1] -- register_copy jsr print_sint jmp __b27 // compare::@27 @@ -2500,7 +2500,7 @@ compare: { // [92] phi from compare::@27 to print_char [phi:compare::@27->print_char] print_char_from___b27: // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:compare::@27->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#5 [phi:compare::@27->print_char#1] -- call_phi_near + // [92] phi print_char::ch#6 = print_char::ch#5 [phi:compare::@27->print_char#1] -- register_copy jsr print_char jmp __breturn // compare::@return @@ -2812,7 +2812,7 @@ print_sint: { // [92] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] print_char_from___b3: // [92] phi print_char_cursor#44 = print_char_cursor#61 [phi:print_sint::@3->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near + // [92] phi print_char::ch#6 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [78] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -2823,7 +2823,7 @@ print_sint: { // print_sint::@2 __b2: // [79] print_uint::w#0 = (unsigned int)print_sint::w#5 - // [80] call print_uint -- call_phi_near + // [80] call print_uint jsr print_uint jmp __breturn // print_sint::@return @@ -2839,7 +2839,7 @@ print_sint: { // [92] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] print_char_from___b1: // [92] phi print_char_cursor#44 = print_char_cursor#61 [phi:print_sint::@1->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near + // [92] phi print_char::ch#6 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char jmp __b4 @@ -2886,7 +2886,7 @@ print_str: { // [92] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:print_str::@2->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [92] phi print_char::ch#6 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char jmp __b3 // print_str::@3 @@ -2926,7 +2926,7 @@ print_uint: { // [97] call print_uchar // [101] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: - // [101] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near + // [101] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -2936,7 +2936,7 @@ print_uint: { // [99] call print_uchar // [101] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: - // [101] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near + // [101] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -2962,7 +2962,7 @@ print_uchar: { // [92] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:print_uchar->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#3 [phi:print_uchar->print_char#1] -- call_phi_near + // [92] phi print_char::ch#6 = print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -2976,7 +2976,7 @@ print_uchar: { // [92] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:print_uchar::@1->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [92] phi print_char::ch#6 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -3344,7 +3344,7 @@ main: { .label i = $12 // print_cls() // [1] call print_cls - // [26] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [26] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi print_line_cursor#30 = print_screen#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -3427,7 +3427,7 @@ main: { // [10] compare::w2#0 = main::w2#0 // [11] compare::op#0 = main::op#2 -- vbuaa=vbuz1 lda.z op - // [12] call compare -- call_phi_near + // [12] call compare jsr compare // main::@9 // if(++s==3) @@ -3441,7 +3441,7 @@ main: { // main::@5 // print_ln() // [16] call print_ln - // [63] phi from main::@5 to print_ln [phi:main::@5->print_ln] -- call_phi_near + // [63] phi from main::@5 to print_ln [phi:main::@5->print_ln] jsr print_ln // main::@10 // [17] print_char_cursor#117 = print_line_cursor#0 -- pbuz1=pbuz2 @@ -3494,7 +3494,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [27] call memset - // [68] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [68] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -3592,13 +3592,13 @@ compare: { // [40] call print_sint // [74] phi from compare::@6 to print_sint [phi:compare::@6->print_sint] // [74] phi print_char_cursor#61 = print_char_cursor#67 [phi:compare::@6->print_sint#0] -- register_copy - // [74] phi print_sint::w#3 = print_sint::w#1 [phi:compare::@6->print_sint#1] -- call_phi_near + // [74] phi print_sint::w#3 = print_sint::w#1 [phi:compare::@6->print_sint#1] -- register_copy jsr print_sint // compare::@25 // print_str(ops) // [41] print_str::str#1 = compare::ops#7 // [42] call print_str - // [85] phi from compare::@25 to print_str [phi:compare::@25->print_str] -- call_phi_near + // [85] phi from compare::@25 to print_str [phi:compare::@25->print_str] jsr print_str // compare::@26 // print_sint(w2) @@ -3610,7 +3610,7 @@ compare: { // [44] call print_sint // [74] phi from compare::@26 to print_sint [phi:compare::@26->print_sint] // [74] phi print_char_cursor#61 = print_char_cursor#14 [phi:compare::@26->print_sint#0] -- register_copy - // [74] phi print_sint::w#3 = print_sint::w#2 [phi:compare::@26->print_sint#1] -- call_phi_near + // [74] phi print_sint::w#3 = print_sint::w#2 [phi:compare::@26->print_sint#1] -- register_copy jsr print_sint // compare::@27 // print_char(r) @@ -3619,7 +3619,7 @@ compare: { // [46] call print_char // [92] phi from compare::@27 to print_char [phi:compare::@27->print_char] // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:compare::@27->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#5 [phi:compare::@27->print_char#1] -- call_phi_near + // [92] phi print_char::ch#6 = print_char::ch#5 [phi:compare::@27->print_char#1] -- register_copy jsr print_char // compare::@return // } @@ -3900,7 +3900,7 @@ print_sint: { // [77] call print_char // [92] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] // [92] phi print_char_cursor#44 = print_char_cursor#61 [phi:print_sint::@3->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near + // [92] phi print_char::ch#6 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [78] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -3909,7 +3909,7 @@ print_sint: { __b2: // print_uint((unsigned int)w) // [79] print_uint::w#0 = (unsigned int)print_sint::w#5 - // [80] call print_uint -- call_phi_near + // [80] call print_uint jsr print_uint // print_sint::@return // } @@ -3922,7 +3922,7 @@ print_sint: { // [83] call print_char // [92] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] // [92] phi print_char_cursor#44 = print_char_cursor#61 [phi:print_sint::@1->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near + // [92] phi print_char::ch#6 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char // print_sint::@4 @@ -3965,7 +3965,7 @@ print_str: { // [90] call print_char // [92] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:print_str::@2->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [92] phi print_char::ch#6 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char // print_str::@3 // print_char(*(str++)); @@ -4005,7 +4005,7 @@ print_uint: { ldx.z w+1 // [97] call print_uchar // [101] phi from print_uint to print_uchar [phi:print_uint->print_uchar] - // [101] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near + // [101] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -4013,7 +4013,7 @@ print_uint: { ldx.z w // [99] call print_uchar // [101] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] - // [101] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near + // [101] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy jsr print_uchar // print_uint::@return // } @@ -4039,7 +4039,7 @@ print_uchar: { // Table of hexadecimal digits // [92] phi from print_uchar to print_char [phi:print_uchar->print_char] // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:print_uchar->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#3 [phi:print_uchar->print_char#1] -- call_phi_near + // [92] phi print_char::ch#6 = print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -4052,7 +4052,7 @@ print_uchar: { // [107] call print_char // [92] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [92] phi print_char_cursor#44 = print_char_cursor#14 [phi:print_uchar::@1->print_char#0] -- register_copy - // [92] phi print_char::ch#6 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [92] phi print_char::ch#6 = print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/test-comparisons-word.log b/src/test/ref/test-comparisons-word.log index fc913e3fb..993118abf 100644 --- a/src/test/ref/test-comparisons-word.log +++ b/src/test/ref/test-comparisons-word.log @@ -2072,7 +2072,7 @@ main: { .label j = $f .label i = $12 // [1] call print_cls - // [26] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [26] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -2165,7 +2165,7 @@ main: { // [10] compare::w2#0 = main::w2#0 // [11] compare::op#0 = main::op#2 -- vbuaa=vbuz1 lda.z op - // [12] call compare -- call_phi_near + // [12] call compare jsr compare jmp __b9 // main::@9 @@ -2182,7 +2182,7 @@ main: { // main::@5 __b5: // [16] call print_ln - // [65] phi from main::@5 to print_ln [phi:main::@5->print_ln] -- call_phi_near + // [65] phi from main::@5 to print_ln [phi:main::@5->print_ln] print_ln_from___b5: jsr print_ln jmp __b10 @@ -2246,7 +2246,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [27] call memset - // [70] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [70] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -2353,14 +2353,14 @@ compare: { // [76] phi from compare::@6 to print_uint [phi:compare::@6->print_uint] print_uint_from___b6: // [76] phi print_char_cursor#55 = print_char_cursor#58 [phi:compare::@6->print_uint#0] -- register_copy - // [76] phi print_uint::w#2 = print_uint::w#0 [phi:compare::@6->print_uint#1] -- call_phi_near + // [76] phi print_uint::w#2 = print_uint::w#0 [phi:compare::@6->print_uint#1] -- register_copy jsr print_uint jmp __b25 // compare::@25 __b25: // [41] print_str::str#1 = compare::ops#7 // [42] call print_str - // [82] phi from compare::@25 to print_str [phi:compare::@25->print_str] -- call_phi_near + // [82] phi from compare::@25 to print_str [phi:compare::@25->print_str] print_str_from___b25: jsr print_str jmp __b26 @@ -2375,7 +2375,7 @@ compare: { // [76] phi from compare::@26 to print_uint [phi:compare::@26->print_uint] print_uint_from___b26: // [76] phi print_char_cursor#55 = print_char_cursor#10 [phi:compare::@26->print_uint#0] -- register_copy - // [76] phi print_uint::w#2 = print_uint::w#1 [phi:compare::@26->print_uint#1] -- call_phi_near + // [76] phi print_uint::w#2 = print_uint::w#1 [phi:compare::@26->print_uint#1] -- register_copy jsr print_uint jmp __b27 // compare::@27 @@ -2386,7 +2386,7 @@ compare: { // [89] phi from compare::@27 to print_char [phi:compare::@27->print_char] print_char_from___b27: // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:compare::@27->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#3 [phi:compare::@27->print_char#1] -- call_phi_near + // [89] phi print_char::ch#5 = print_char::ch#3 [phi:compare::@27->print_char#1] -- register_copy jsr print_char // [47] phi from compare::@27 to compare::@28 [phi:compare::@27->compare::@28] __b28_from___b27: @@ -2397,7 +2397,7 @@ compare: { // [89] phi from compare::@28 to print_char [phi:compare::@28->print_char] print_char_from___b28: // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:compare::@28->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = ' ' [phi:compare::@28->print_char#1] -- call_phi_near + // [89] phi print_char::ch#5 = ' ' [phi:compare::@28->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __breturn @@ -2704,7 +2704,7 @@ print_uint: { // [93] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [93] phi print_char_cursor#56 = print_char_cursor#55 [phi:print_uint->print_uchar#0] -- register_copy - // [93] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [93] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -2715,7 +2715,7 @@ print_uint: { // [93] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [93] phi print_char_cursor#56 = print_char_cursor#10 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [93] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [93] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -2754,7 +2754,7 @@ print_str: { // [89] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:print_str::@2->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [89] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char jmp __b3 // print_str::@3 @@ -2802,7 +2802,7 @@ print_uchar: { // [89] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [89] phi print_char_cursor#37 = print_char_cursor#56 [phi:print_uchar->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near + // [89] phi print_char::ch#5 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -2816,7 +2816,7 @@ print_uchar: { // [89] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:print_uchar::@1->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [89] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -3161,7 +3161,7 @@ main: { .label i = $12 // print_cls() // [1] call print_cls - // [26] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [26] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi print_line_cursor#30 = print_screen#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -3244,7 +3244,7 @@ main: { // [10] compare::w2#0 = main::w2#0 // [11] compare::op#0 = main::op#2 -- vbuaa=vbuz1 lda.z op - // [12] call compare -- call_phi_near + // [12] call compare jsr compare // main::@9 // if(++s==3) @@ -3258,7 +3258,7 @@ main: { // main::@5 // print_ln() // [16] call print_ln - // [65] phi from main::@5 to print_ln [phi:main::@5->print_ln] -- call_phi_near + // [65] phi from main::@5 to print_ln [phi:main::@5->print_ln] jsr print_ln // main::@10 // [17] print_char_cursor#108 = print_line_cursor#0 -- pbuz1=pbuz2 @@ -3311,7 +3311,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [27] call memset - // [70] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [70] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -3409,13 +3409,13 @@ compare: { // [40] call print_uint // [76] phi from compare::@6 to print_uint [phi:compare::@6->print_uint] // [76] phi print_char_cursor#55 = print_char_cursor#58 [phi:compare::@6->print_uint#0] -- register_copy - // [76] phi print_uint::w#2 = print_uint::w#0 [phi:compare::@6->print_uint#1] -- call_phi_near + // [76] phi print_uint::w#2 = print_uint::w#0 [phi:compare::@6->print_uint#1] -- register_copy jsr print_uint // compare::@25 // print_str(ops) // [41] print_str::str#1 = compare::ops#7 // [42] call print_str - // [82] phi from compare::@25 to print_str [phi:compare::@25->print_str] -- call_phi_near + // [82] phi from compare::@25 to print_str [phi:compare::@25->print_str] jsr print_str // compare::@26 // print_uint(w2) @@ -3427,7 +3427,7 @@ compare: { // [44] call print_uint // [76] phi from compare::@26 to print_uint [phi:compare::@26->print_uint] // [76] phi print_char_cursor#55 = print_char_cursor#10 [phi:compare::@26->print_uint#0] -- register_copy - // [76] phi print_uint::w#2 = print_uint::w#1 [phi:compare::@26->print_uint#1] -- call_phi_near + // [76] phi print_uint::w#2 = print_uint::w#1 [phi:compare::@26->print_uint#1] -- register_copy jsr print_uint // compare::@27 // print_char(r) @@ -3436,7 +3436,7 @@ compare: { // [46] call print_char // [89] phi from compare::@27 to print_char [phi:compare::@27->print_char] // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:compare::@27->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#3 [phi:compare::@27->print_char#1] -- call_phi_near + // [89] phi print_char::ch#5 = print_char::ch#3 [phi:compare::@27->print_char#1] -- register_copy jsr print_char // [47] phi from compare::@27 to compare::@28 [phi:compare::@27->compare::@28] // compare::@28 @@ -3444,7 +3444,7 @@ compare: { // [48] call print_char // [89] phi from compare::@28 to print_char [phi:compare::@28->print_char] // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:compare::@28->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = ' ' [phi:compare::@28->print_char#1] -- call_phi_near + // [89] phi print_char::ch#5 = ' ' [phi:compare::@28->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // compare::@return @@ -3722,7 +3722,7 @@ print_uint: { // [78] call print_uchar // [93] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [93] phi print_char_cursor#56 = print_char_cursor#55 [phi:print_uint->print_uchar#0] -- register_copy - // [93] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [93] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -3731,7 +3731,7 @@ print_uint: { // [80] call print_uchar // [93] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [93] phi print_char_cursor#56 = print_char_cursor#10 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [93] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [93] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@return // } @@ -3766,7 +3766,7 @@ print_str: { // [87] call print_char // [89] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:print_str::@2->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- call_phi_near + // [89] phi print_char::ch#5 = print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char // print_str::@3 // print_char(*(str++)); @@ -3815,7 +3815,7 @@ print_uchar: { // Table of hexadecimal digits // [89] phi from print_uchar to print_char [phi:print_uchar->print_char] // [89] phi print_char_cursor#37 = print_char_cursor#56 [phi:print_uchar->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#1 [phi:print_uchar->print_char#1] -- call_phi_near + // [89] phi print_char::ch#5 = print_char::ch#1 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -3828,7 +3828,7 @@ print_uchar: { // [99] call print_char // [89] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [89] phi print_char_cursor#37 = print_char_cursor#10 [phi:print_uchar::@1->print_char#0] -- register_copy - // [89] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [89] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/test-interrupt-volatile-write.log b/src/test/ref/test-interrupt-volatile-write.log index a984678bb..630c0dbb0 100644 --- a/src/test/ref/test-interrupt-volatile-write.log +++ b/src/test/ref/test-interrupt-volatile-write.log @@ -229,7 +229,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -356,7 +356,7 @@ __start: { sta.z col // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/test-interrupt-volatile.log b/src/test/ref/test-interrupt-volatile.log index c651e9cbc..20611a737 100644 --- a/src/test/ref/test-interrupt-volatile.log +++ b/src/test/ref/test-interrupt-volatile.log @@ -166,7 +166,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -258,7 +258,7 @@ __start: { sta.z col // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/test-keyboard-space.log b/src/test/ref/test-keyboard-space.log index 7fee032ec..d07a3e81f 100644 --- a/src/test/ref/test-keyboard-space.log +++ b/src/test/ref/test-keyboard-space.log @@ -421,7 +421,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call keyboard_init -- call_phi_near + // [1] call keyboard_init jsr keyboard_init jmp __b1 // main::@1 @@ -436,7 +436,7 @@ main: { // main::@2 __b2: // [4] call keyboard_key_pressed - // [13] phi from main::@2 to keyboard_key_pressed [phi:main::@2->keyboard_key_pressed] -- call_phi_near + // [13] phi from main::@2 to keyboard_key_pressed [phi:main::@2->keyboard_key_pressed] keyboard_key_pressed_from___b2: jsr keyboard_key_pressed // [5] keyboard_key_pressed::return#2 = keyboard_key_pressed::return#0 @@ -487,7 +487,7 @@ keyboard_init: { keyboard_key_pressed: { .const colidx = KEY_SPACE&7 .label rowidx = KEY_SPACE>>3 - // [14] call keyboard_matrix_read -- call_phi_near + // [14] call keyboard_matrix_read jsr keyboard_matrix_read // [15] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 jmp __b1 @@ -641,7 +641,7 @@ Score: 1141 // main main: { // keyboard_init() - // [1] call keyboard_init -- call_phi_near + // [1] call keyboard_init jsr keyboard_init // main::@1 __b1: @@ -654,7 +654,7 @@ main: { // main::@2 // keyboard_key_pressed(KEY_SPACE) // [4] call keyboard_key_pressed - // [13] phi from main::@2 to keyboard_key_pressed [phi:main::@2->keyboard_key_pressed] -- call_phi_near + // [13] phi from main::@2 to keyboard_key_pressed [phi:main::@2->keyboard_key_pressed] jsr keyboard_key_pressed // keyboard_key_pressed(KEY_SPACE) // [5] keyboard_key_pressed::return#2 = keyboard_key_pressed::return#0 @@ -706,7 +706,7 @@ keyboard_key_pressed: { .const colidx = KEY_SPACE&7 .label rowidx = KEY_SPACE>>3 // keyboard_matrix_read(rowidx) - // [14] call keyboard_matrix_read -- call_phi_near + // [14] call keyboard_matrix_read jsr keyboard_matrix_read // [15] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 // keyboard_key_pressed::@1 diff --git a/src/test/ref/test-keyboard.log b/src/test/ref/test-keyboard.log index af2450073..8ac6f08aa 100644 --- a/src/test/ref/test-keyboard.log +++ b/src/test/ref/test-keyboard.log @@ -1139,7 +1139,7 @@ main: { jmp __b3 // main::@3 __b3: - // [4] call keyboard_init -- call_phi_near + // [4] call keyboard_init // Init keyboard jsr keyboard_init jmp __b4 @@ -1173,7 +1173,7 @@ main: { // [8] call keyboard_matrix_read // [48] phi from main::@5 to keyboard_matrix_read [phi:main::@5->keyboard_matrix_read] keyboard_matrix_read_from___b5: - // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#1 [phi:main::@5->keyboard_matrix_read#0] -- call_phi_near + // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#1 [phi:main::@5->keyboard_matrix_read#0] -- register_copy jsr keyboard_matrix_read // [9] keyboard_matrix_read::return#3 = keyboard_matrix_read::return#0 jmp __b17 @@ -1264,7 +1264,7 @@ main: { __b12: // [23] keyboard_get_keycode::ch#0 = main::ch#2 -- vbuxx=vbuz1 ldx.z ch - // [24] call keyboard_get_keycode -- call_phi_near + // [24] call keyboard_get_keycode jsr keyboard_get_keycode // [25] keyboard_get_keycode::return#2 = keyboard_get_keycode::return#0 jmp __b18 @@ -1279,7 +1279,7 @@ main: { __b14: // [28] keyboard_key_pressed::key#0 = main::key#0 -- vbuxx=vbuaa tax - // [29] call keyboard_key_pressed -- call_phi_near + // [29] call keyboard_key_pressed jsr keyboard_key_pressed // [30] keyboard_key_pressed::return#2 = keyboard_key_pressed::return#0 jmp __b19 @@ -1426,7 +1426,7 @@ keyboard_key_pressed: { // [57] call keyboard_matrix_read // [48] phi from keyboard_key_pressed to keyboard_matrix_read [phi:keyboard_key_pressed->keyboard_matrix_read] keyboard_matrix_read_from_keyboard_key_pressed: - // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#0 [phi:keyboard_key_pressed->keyboard_matrix_read#0] -- call_phi_near + // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#0 [phi:keyboard_key_pressed->keyboard_matrix_read#0] -- register_copy jsr keyboard_matrix_read // [58] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 jmp __b1 @@ -1774,7 +1774,7 @@ main: { // [3] phi from main::@1 to main::@3 [phi:main::@1->main::@3] // main::@3 // keyboard_init() - // [4] call keyboard_init -- call_phi_near + // [4] call keyboard_init // Init keyboard jsr keyboard_init // main::@4 @@ -1804,7 +1804,7 @@ main: { ldx.z row // [8] call keyboard_matrix_read // [48] phi from main::@5 to keyboard_matrix_read [phi:main::@5->keyboard_matrix_read] - // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#1 [phi:main::@5->keyboard_matrix_read#0] -- call_phi_near + // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#1 [phi:main::@5->keyboard_matrix_read#0] -- register_copy jsr keyboard_matrix_read // byte row_pressed_bits = keyboard_matrix_read(row) // [9] keyboard_matrix_read::return#3 = keyboard_matrix_read::return#0 @@ -1887,7 +1887,7 @@ main: { // byte key = keyboard_get_keycode(ch) // [23] keyboard_get_keycode::ch#0 = main::ch#2 -- vbuxx=vbuz1 ldx.z ch - // [24] call keyboard_get_keycode -- call_phi_near + // [24] call keyboard_get_keycode jsr keyboard_get_keycode // [25] keyboard_get_keycode::return#2 = keyboard_get_keycode::return#0 // main::@18 @@ -1900,7 +1900,7 @@ main: { // keyboard_key_pressed(key) // [28] keyboard_key_pressed::key#0 = main::key#0 -- vbuxx=vbuaa tax - // [29] call keyboard_key_pressed -- call_phi_near + // [29] call keyboard_key_pressed jsr keyboard_key_pressed // [30] keyboard_key_pressed::return#2 = keyboard_key_pressed::return#0 // main::@19 @@ -2049,7 +2049,7 @@ keyboard_key_pressed: { tax // [57] call keyboard_matrix_read // [48] phi from keyboard_key_pressed to keyboard_matrix_read [phi:keyboard_key_pressed->keyboard_matrix_read] - // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#0 [phi:keyboard_key_pressed->keyboard_matrix_read#0] -- call_phi_near + // [48] phi keyboard_matrix_read::rowid#2 = keyboard_matrix_read::rowid#0 [phi:keyboard_key_pressed->keyboard_matrix_read#0] -- register_copy jsr keyboard_matrix_read // keyboard_matrix_read(rowidx) // [58] keyboard_matrix_read::return#2 = keyboard_matrix_read::return#0 diff --git a/src/test/ref/test-lowhigh.log b/src/test/ref/test-lowhigh.log index a719270ef..3bbd8dc31 100644 --- a/src/test/ref/test-lowhigh.log +++ b/src/test/ref/test-lowhigh.log @@ -1373,7 +1373,7 @@ main: { .label dw2 = $a .label dw = $e // [1] call print_cls - // [41] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [41] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1461,7 +1461,7 @@ main: { lda.z __29+1 sta.z dw2+1 // [11] print_ulong::dw#0 = main::dw2#10 - // [12] call print_ulong -- call_phi_near + // [12] call print_ulong // Test set/get low word of dword jsr print_ulong // [13] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -1473,7 +1473,7 @@ main: { // [50] phi from main::@3 to print_char [phi:main::@3->print_char] print_char_from___b3: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@3->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@3->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = ' ' [phi:main::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b4 @@ -1488,7 +1488,7 @@ main: { // [54] phi from main::@4 to print_uint [phi:main::@4->print_uint] print_uint_from___b4: // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@4->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#2 [phi:main::@4->print_uint#1] -- call_phi_near + // [54] phi print_uint::w#4 = print_uint::w#2 [phi:main::@4->print_uint#1] -- register_copy jsr print_uint // [17] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: @@ -1500,7 +1500,7 @@ main: { // [50] phi from main::@5 to print_char [phi:main::@5->print_char] print_char_from___b5: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@5->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@5->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = ' ' [phi:main::@5->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b6 @@ -1515,7 +1515,7 @@ main: { // [54] phi from main::@6 to print_uint [phi:main::@6->print_uint] print_uint_from___b6: // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@6->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#3 [phi:main::@6->print_uint#1] -- call_phi_near + // [54] phi print_uint::w#4 = print_uint::w#3 [phi:main::@6->print_uint#1] -- register_copy jsr print_uint // [21] phi from main::@6 to main::@7 [phi:main::@6->main::@7] __b7_from___b6: @@ -1527,7 +1527,7 @@ main: { // [50] phi from main::@7 to print_char [phi:main::@7->print_char] print_char_from___b7: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@7->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@7->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = ' ' [phi:main::@7->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b8 @@ -1539,7 +1539,7 @@ main: { // [60] phi from main::@8 to print_uchar [phi:main::@8->print_uchar] print_uchar_from___b8: // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@8->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#2 [phi:main::@8->print_uchar#1] -- call_phi_near + // [60] phi print_uchar::b#6 = print_uchar::b#2 [phi:main::@8->print_uchar#1] -- register_copy jsr print_uchar // [25] phi from main::@8 to main::@9 [phi:main::@8->main::@9] __b9_from___b8: @@ -1551,7 +1551,7 @@ main: { // [50] phi from main::@9 to print_char [phi:main::@9->print_char] print_char_from___b9: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@9->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@9->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = ' ' [phi:main::@9->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b10 @@ -1563,7 +1563,7 @@ main: { // [60] phi from main::@10 to print_uchar [phi:main::@10->print_uchar] print_uchar_from___b10: // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@10->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#3 [phi:main::@10->print_uchar#1] -- call_phi_near + // [60] phi print_uchar::b#6 = print_uchar::b#3 [phi:main::@10->print_uchar#1] -- register_copy jsr print_uchar // [29] phi from main::@10 to main::@11 [phi:main::@10->main::@11] __b11_from___b10: @@ -1575,7 +1575,7 @@ main: { // [50] phi from main::@11 to print_char [phi:main::@11->print_char] print_char_from___b11: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@11->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@11->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = ' ' [phi:main::@11->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b12 @@ -1587,7 +1587,7 @@ main: { // [60] phi from main::@12 to print_uchar [phi:main::@12->print_uchar] print_uchar_from___b12: // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@12->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#4 [phi:main::@12->print_uchar#1] -- call_phi_near + // [60] phi print_uchar::b#6 = print_uchar::b#4 [phi:main::@12->print_uchar#1] -- register_copy jsr print_uchar // [33] phi from main::@12 to main::@13 [phi:main::@12->main::@13] __b13_from___b12: @@ -1599,7 +1599,7 @@ main: { // [50] phi from main::@13 to print_char [phi:main::@13->print_char] print_char_from___b13: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@13->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@13->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = ' ' [phi:main::@13->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b14 @@ -1611,7 +1611,7 @@ main: { // [60] phi from main::@14 to print_uchar [phi:main::@14->print_uchar] print_uchar_from___b14: // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@14->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#5 [phi:main::@14->print_uchar#1] -- call_phi_near + // [60] phi print_uchar::b#6 = print_uchar::b#5 [phi:main::@14->print_uchar#1] -- register_copy jsr print_uchar // [37] phi from main::@14 to main::@15 [phi:main::@14->main::@15] __b15_from___b14: @@ -1620,7 +1620,7 @@ main: { __b15: // [38] call print_ln // Test get low low byte of dword - // [68] phi from main::@15 to print_ln [phi:main::@15->print_ln] -- call_phi_near + // [68] phi from main::@15 to print_ln [phi:main::@15->print_ln] print_ln_from___b15: jsr print_ln jmp __b16 @@ -1651,7 +1651,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [42] call memset - // [74] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [74] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -1679,7 +1679,7 @@ print_ulong: { // [54] phi from print_ulong to print_uint [phi:print_ulong->print_uint] print_uint_from_print_ulong: // [54] phi print_char_cursor#67 = print_char_cursor#76 [phi:print_ulong->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- call_phi_near + // [54] phi print_uint::w#4 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- register_copy jsr print_uint jmp __b1 // print_ulong::@1 @@ -1693,7 +1693,7 @@ print_ulong: { // [54] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] print_uint_from___b1: // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:print_ulong::@1->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- call_phi_near + // [54] phi print_uint::w#4 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- register_copy jsr print_uint jmp __breturn // print_ulong::@return @@ -1730,7 +1730,7 @@ print_uint: { // [60] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [60] phi print_char_cursor#69 = print_char_cursor#67 [phi:print_uint->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [60] phi print_uchar::b#6 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -1741,7 +1741,7 @@ print_uint: { // [60] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [60] phi print_uchar::b#6 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -1767,7 +1767,7 @@ print_uchar: { // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [50] phi print_char_cursor#45 = print_char_cursor#69 [phi:print_uchar->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -1781,7 +1781,7 @@ print_uchar: { // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:print_uchar::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -2096,7 +2096,7 @@ main: { .label dw = $e // print_cls() // [1] call print_cls - // [41] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [41] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi print_char_cursor#30 = print_screen#0 [phi:main->main::@1#0] -- pbuz1=pbuc1 @@ -2186,7 +2186,7 @@ main: { sta.z dw2+1 // print_ulong(dw2) // [11] print_ulong::dw#0 = main::dw2#10 - // [12] call print_ulong -- call_phi_near + // [12] call print_ulong // Test set/get low word of dword jsr print_ulong // [13] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -2195,7 +2195,7 @@ main: { // [14] call print_char // [50] phi from main::@3 to print_char [phi:main::@3->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@3->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@3->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = ' ' [phi:main::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@4 @@ -2208,7 +2208,7 @@ main: { // [16] call print_uint // [54] phi from main::@4 to print_uint [phi:main::@4->print_uint] // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@4->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#2 [phi:main::@4->print_uint#1] -- call_phi_near + // [54] phi print_uint::w#4 = print_uint::w#2 [phi:main::@4->print_uint#1] -- register_copy jsr print_uint // [17] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 @@ -2217,7 +2217,7 @@ main: { // Test get high word of dword // [50] phi from main::@5 to print_char [phi:main::@5->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@5->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@5->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = ' ' [phi:main::@5->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@6 @@ -2230,7 +2230,7 @@ main: { // [20] call print_uint // [54] phi from main::@6 to print_uint [phi:main::@6->print_uint] // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:main::@6->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#3 [phi:main::@6->print_uint#1] -- call_phi_near + // [54] phi print_uint::w#4 = print_uint::w#3 [phi:main::@6->print_uint#1] -- register_copy jsr print_uint // [21] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 @@ -2239,7 +2239,7 @@ main: { // Test get low word of dword // [50] phi from main::@7 to print_char [phi:main::@7->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@7->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@7->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = ' ' [phi:main::@7->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@8 @@ -2249,7 +2249,7 @@ main: { // [24] call print_uchar // [60] phi from main::@8 to print_uchar [phi:main::@8->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@8->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#2 [phi:main::@8->print_uchar#1] -- call_phi_near + // [60] phi print_uchar::b#6 = print_uchar::b#2 [phi:main::@8->print_uchar#1] -- register_copy jsr print_uchar // [25] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 @@ -2258,7 +2258,7 @@ main: { // Test get high high byte of dword // [50] phi from main::@9 to print_char [phi:main::@9->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@9->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@9->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = ' ' [phi:main::@9->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@10 @@ -2268,7 +2268,7 @@ main: { // [28] call print_uchar // [60] phi from main::@10 to print_uchar [phi:main::@10->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@10->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#3 [phi:main::@10->print_uchar#1] -- call_phi_near + // [60] phi print_uchar::b#6 = print_uchar::b#3 [phi:main::@10->print_uchar#1] -- register_copy jsr print_uchar // [29] phi from main::@10 to main::@11 [phi:main::@10->main::@11] // main::@11 @@ -2277,7 +2277,7 @@ main: { // Test get low high byte of dword // [50] phi from main::@11 to print_char [phi:main::@11->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@11->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@11->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = ' ' [phi:main::@11->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@12 @@ -2287,7 +2287,7 @@ main: { // [32] call print_uchar // [60] phi from main::@12 to print_uchar [phi:main::@12->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@12->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#4 [phi:main::@12->print_uchar#1] -- call_phi_near + // [60] phi print_uchar::b#6 = print_uchar::b#4 [phi:main::@12->print_uchar#1] -- register_copy jsr print_uchar // [33] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 @@ -2296,7 +2296,7 @@ main: { // Test get high low byte of dword // [50] phi from main::@13 to print_char [phi:main::@13->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:main::@13->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = ' ' [phi:main::@13->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = ' ' [phi:main::@13->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@14 @@ -2306,14 +2306,14 @@ main: { // [36] call print_uchar // [60] phi from main::@14 to print_uchar [phi:main::@14->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:main::@14->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#5 [phi:main::@14->print_uchar#1] -- call_phi_near + // [60] phi print_uchar::b#6 = print_uchar::b#5 [phi:main::@14->print_uchar#1] -- register_copy jsr print_uchar // [37] phi from main::@14 to main::@15 [phi:main::@14->main::@15] // main::@15 // print_ln() // [38] call print_ln // Test get low low byte of dword - // [68] phi from main::@15 to print_ln [phi:main::@15->print_ln] -- call_phi_near + // [68] phi from main::@15 to print_ln [phi:main::@15->print_ln] jsr print_ln // main::@16 // for( dword dw = $12345678; dw != $12345690; dw++ ) @@ -2342,7 +2342,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [42] call memset - // [74] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [74] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -2369,7 +2369,7 @@ print_ulong: { // [46] call print_uint // [54] phi from print_ulong to print_uint [phi:print_ulong->print_uint] // [54] phi print_char_cursor#67 = print_char_cursor#76 [phi:print_ulong->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- call_phi_near + // [54] phi print_uint::w#4 = print_uint::w#0 [phi:print_ulong->print_uint#1] -- register_copy jsr print_uint // print_ulong::@1 // print_uint(WORD0(dw)) @@ -2381,7 +2381,7 @@ print_ulong: { // [48] call print_uint // [54] phi from print_ulong::@1 to print_uint [phi:print_ulong::@1->print_uint] // [54] phi print_char_cursor#67 = print_char_cursor#11 [phi:print_ulong::@1->print_uint#0] -- register_copy - // [54] phi print_uint::w#4 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- call_phi_near + // [54] phi print_uint::w#4 = print_uint::w#1 [phi:print_ulong::@1->print_uint#1] -- register_copy jsr print_uint // print_ulong::@return // } @@ -2418,7 +2418,7 @@ print_uint: { // [56] call print_uchar // [60] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#67 [phi:print_uint->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- call_phi_near + // [60] phi print_uchar::b#6 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -2427,7 +2427,7 @@ print_uint: { // [58] call print_uchar // [60] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] // [60] phi print_char_cursor#69 = print_char_cursor#11 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [60] phi print_uchar::b#6 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- call_phi_near + // [60] phi print_uchar::b#6 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@return // } @@ -2453,7 +2453,7 @@ print_uchar: { // Table of hexadecimal digits // [50] phi from print_uchar to print_char [phi:print_uchar->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#69 [phi:print_uchar->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = print_char::ch#0 [phi:print_uchar->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -2466,7 +2466,7 @@ print_uchar: { // [66] call print_char // [50] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [50] phi print_char_cursor#45 = print_char_cursor#11 [phi:print_uchar::@1->print_char#0] -- register_copy - // [50] phi print_char::ch#8 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [50] phi print_char::ch#8 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/test-scroll-up.log b/src/test/ref/test-scroll-up.log index 59c9e835e..cbfe562da 100644 --- a/src/test/ref/test-scroll-up.log +++ b/src/test/ref/test-scroll-up.log @@ -650,7 +650,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call scrollup1 - // [7] phi from main to scrollup1 [phi:main->scrollup1] -- call_phi_near + // [7] phi from main to scrollup1 [phi:main->scrollup1] scrollup1_from_main: jsr scrollup1 // [2] phi from main to main::@1 [phi:main->main::@1] @@ -659,7 +659,7 @@ main: { // main::@1 __b1: // [3] call scrollup2 - // [19] phi from main::@1 to scrollup2 [phi:main::@1->scrollup2] -- call_phi_near + // [19] phi from main::@1 to scrollup2 [phi:main::@1->scrollup2] scrollup2_from___b1: jsr scrollup2 // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -668,7 +668,7 @@ main: { // main::@2 __b2: // [5] call scrollup3 - // [30] phi from main::@2 to scrollup3 [phi:main::@2->scrollup3] -- call_phi_near + // [30] phi from main::@2 to scrollup3 [phi:main::@2->scrollup3] scrollup3_from___b2: jsr scrollup3 jmp __breturn @@ -1081,19 +1081,19 @@ Score: 21407 main: { // scrollup1() // [1] call scrollup1 - // [7] phi from main to scrollup1 [phi:main->scrollup1] -- call_phi_near + // [7] phi from main to scrollup1 [phi:main->scrollup1] jsr scrollup1 // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // scrollup2() // [3] call scrollup2 - // [19] phi from main::@1 to scrollup2 [phi:main::@1->scrollup2] -- call_phi_near + // [19] phi from main::@1 to scrollup2 [phi:main::@1->scrollup2] jsr scrollup2 // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // scrollup3() // [5] call scrollup3 - // [30] phi from main::@2 to scrollup3 [phi:main::@2->scrollup3] -- call_phi_near + // [30] phi from main::@2 to scrollup3 [phi:main::@2->scrollup3] jsr scrollup3 // main::@return // } diff --git a/src/test/ref/test-signed-word-minus-byte.log b/src/test/ref/test-signed-word-minus-byte.log index da47eae51..ae2da3cb4 100644 --- a/src/test/ref/test-signed-word-minus-byte.log +++ b/src/test/ref/test-signed-word-minus-byte.log @@ -1105,7 +1105,7 @@ main: { .label w1 = 8 .label i = $a // [1] call print_cls - // [17] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [17] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] @@ -1156,7 +1156,7 @@ main: { // [20] phi from main::@1 to print_sint [phi:main::@1->print_sint] print_sint_from___b1: // [20] phi print_char_cursor#49 = print_char_cursor#55 [phi:main::@1->print_sint#0] -- register_copy - // [20] phi print_sint::w#3 = print_sint::w#1 [phi:main::@1->print_sint#1] -- call_phi_near + // [20] phi print_sint::w#3 = print_sint::w#1 [phi:main::@1->print_sint#1] -- register_copy jsr print_sint // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -1167,7 +1167,7 @@ main: { // [31] phi from main::@2 to print_char [phi:main::@2->print_char] print_char_from___b2: // [31] phi print_char_cursor#37 = print_char_cursor#12 [phi:main::@2->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = ' ' [phi:main::@2->print_char#1] -- call_phi_near + // [31] phi print_char::ch#5 = ' ' [phi:main::@2->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char jmp __b3 @@ -1182,7 +1182,7 @@ main: { // [20] phi from main::@3 to print_sint [phi:main::@3->print_sint] print_sint_from___b3: // [20] phi print_char_cursor#49 = print_char_cursor#12 [phi:main::@3->print_sint#0] -- register_copy - // [20] phi print_sint::w#3 = print_sint::w#2 [phi:main::@3->print_sint#1] -- call_phi_near + // [20] phi print_sint::w#3 = print_sint::w#2 [phi:main::@3->print_sint#1] -- register_copy jsr print_sint // [11] phi from main::@3 to main::@4 [phi:main::@3->main::@4] __b4_from___b3: @@ -1190,7 +1190,7 @@ main: { // main::@4 __b4: // [12] call print_ln - // [35] phi from main::@4 to print_ln [phi:main::@4->print_ln] -- call_phi_near + // [35] phi from main::@4 to print_ln [phi:main::@4->print_ln] print_ln_from___b4: jsr print_ln jmp __b5 @@ -1226,7 +1226,7 @@ main: { // Clear the screen. Also resets current line/char cursor. print_cls: { // [18] call memset - // [40] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [40] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn @@ -1252,7 +1252,7 @@ print_sint: { // [31] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] print_char_from___b3: // [31] phi print_char_cursor#37 = print_char_cursor#49 [phi:print_sint::@3->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near + // [31] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [24] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -1263,7 +1263,7 @@ print_sint: { // print_sint::@2 __b2: // [25] print_uint::w#0 = (unsigned int)print_sint::w#5 - // [26] call print_uint -- call_phi_near + // [26] call print_uint jsr print_uint jmp __breturn // print_sint::@return @@ -1279,7 +1279,7 @@ print_sint: { // [31] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] print_char_from___b1: // [31] phi print_char_cursor#37 = print_char_cursor#49 [phi:print_sint::@1->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near + // [31] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char jmp __b4 @@ -1403,7 +1403,7 @@ print_uint: { // [47] call print_uchar // [51] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: - // [51] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near + // [51] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 @@ -1413,7 +1413,7 @@ print_uint: { // [49] call print_uchar // [51] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: - // [51] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near + // [51] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return @@ -1439,7 +1439,7 @@ print_uchar: { // [31] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [31] phi print_char_cursor#37 = print_char_cursor#12 [phi:print_uchar->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar->print_char#1] -- call_phi_near + // [31] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 @@ -1453,7 +1453,7 @@ print_uchar: { // [31] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [31] phi print_char_cursor#37 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [31] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return @@ -1638,7 +1638,7 @@ main: { .label i = $a // print_cls() // [1] call print_cls - // [17] phi from main to print_cls [phi:main->print_cls] -- call_phi_near + // [17] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [2] phi from main to main::@1 [phi:main->main::@1] // [2] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 @@ -1688,7 +1688,7 @@ main: { // [6] call print_sint // [20] phi from main::@1 to print_sint [phi:main::@1->print_sint] // [20] phi print_char_cursor#49 = print_char_cursor#55 [phi:main::@1->print_sint#0] -- register_copy - // [20] phi print_sint::w#3 = print_sint::w#1 [phi:main::@1->print_sint#1] -- call_phi_near + // [20] phi print_sint::w#3 = print_sint::w#1 [phi:main::@1->print_sint#1] -- register_copy jsr print_sint // [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 @@ -1696,7 +1696,7 @@ main: { // [8] call print_char // [31] phi from main::@2 to print_char [phi:main::@2->print_char] // [31] phi print_char_cursor#37 = print_char_cursor#12 [phi:main::@2->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = ' ' [phi:main::@2->print_char#1] -- call_phi_near + // [31] phi print_char::ch#5 = ' ' [phi:main::@2->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // main::@3 @@ -1709,13 +1709,13 @@ main: { // [10] call print_sint // [20] phi from main::@3 to print_sint [phi:main::@3->print_sint] // [20] phi print_char_cursor#49 = print_char_cursor#12 [phi:main::@3->print_sint#0] -- register_copy - // [20] phi print_sint::w#3 = print_sint::w#2 [phi:main::@3->print_sint#1] -- call_phi_near + // [20] phi print_sint::w#3 = print_sint::w#2 [phi:main::@3->print_sint#1] -- register_copy jsr print_sint // [11] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // print_ln() // [12] call print_ln - // [35] phi from main::@4 to print_ln [phi:main::@4->print_ln] -- call_phi_near + // [35] phi from main::@4 to print_ln [phi:main::@4->print_ln] jsr print_ln // main::@5 // for( byte i: 0..10 ) @@ -1748,7 +1748,7 @@ main: { print_cls: { // memset(print_screen, ' ', 1000) // [18] call memset - // [40] phi from print_cls to memset [phi:print_cls->memset] -- call_phi_near + // [40] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } @@ -1770,7 +1770,7 @@ print_sint: { // [23] call print_char // [31] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] // [31] phi print_char_cursor#37 = print_char_cursor#49 [phi:print_sint::@3->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- call_phi_near + // [31] phi print_char::ch#5 = ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [24] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] @@ -1779,7 +1779,7 @@ print_sint: { __b2: // print_uint((unsigned int)w) // [25] print_uint::w#0 = (unsigned int)print_sint::w#5 - // [26] call print_uint -- call_phi_near + // [26] call print_uint jsr print_uint // print_sint::@return // } @@ -1792,7 +1792,7 @@ print_sint: { // [29] call print_char // [31] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] // [31] phi print_char_cursor#37 = print_char_cursor#49 [phi:print_sint::@1->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- call_phi_near + // [31] phi print_char::ch#5 = '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char // print_sint::@4 @@ -1913,7 +1913,7 @@ print_uint: { ldx.z w+1 // [47] call print_uchar // [51] phi from print_uint to print_uchar [phi:print_uint->print_uchar] - // [51] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- call_phi_near + // [51] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) @@ -1921,7 +1921,7 @@ print_uint: { ldx.z w // [49] call print_uchar // [51] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] - // [51] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- call_phi_near + // [51] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy jsr print_uchar // print_uint::@return // } @@ -1947,7 +1947,7 @@ print_uchar: { // Table of hexadecimal digits // [31] phi from print_uchar to print_char [phi:print_uchar->print_char] // [31] phi print_char_cursor#37 = print_char_cursor#12 [phi:print_uchar->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar->print_char#1] -- call_phi_near + // [31] phi print_char::ch#5 = print_char::ch#2 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f @@ -1960,7 +1960,7 @@ print_uchar: { // [57] call print_char // [31] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [31] phi print_char_cursor#37 = print_char_cursor#12 [phi:print_uchar::@1->print_char#0] -- register_copy - // [31] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- call_phi_near + // [31] phi print_char::ch#5 = print_char::ch#3 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } diff --git a/src/test/ref/tod-1.log b/src/test/ref/tod-1.log index d41b4ed6f..2a06ad9f5 100644 --- a/src/test/ref/tod-1.log +++ b/src/test/ref/tod-1.log @@ -2127,14 +2127,14 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [7] call main -- call_phi_near + // [7] call main jsr main jmp __breturn // __start::@return @@ -2172,7 +2172,7 @@ conio_c64_init: { // [14] call gotoxy // [36] phi from conio_c64_init::@1 to gotoxy [phi:conio_c64_init::@1->gotoxy] gotoxy_from___b1: - // [36] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- call_phi_near + // [36] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- register_copy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -2192,7 +2192,7 @@ main: { ldx TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_MIN // [19] tod_init::tod_HOURS#0 = *((char *)&TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_HOURS) -- vbuyy=_deref_pbuc1 ldy TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_HOURS - // [20] call tod_init -- call_phi_near + // [20] call tod_init jsr tod_init // [21] phi from main main::@4 to main::@1 [phi:main/main::@4->main::@1] __b1_from_main: @@ -2203,7 +2203,7 @@ main: { // [22] call gotoxy // [36] phi from main::@1 to gotoxy [phi:main::@1->gotoxy] gotoxy_from___b1: - // [36] phi gotoxy::y#4 = 0 [phi:main::@1->gotoxy#0] -- call_phi_near + // [36] phi gotoxy::y#4 = 0 [phi:main::@1->gotoxy#0] -- vbuxx=vbuc1 ldx #0 jsr gotoxy // [23] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -2211,7 +2211,7 @@ main: { jmp __b2 // main::@2 __b2: - // [24] call tod_read -- call_phi_near + // [24] call tod_read jsr tod_read // [25] tod_read::return_TENTHS#1 = tod_read::return_TENTHS#0 // [26] tod_read::return_SEC#1 = tod_read::return_SEC#0 @@ -2230,7 +2230,7 @@ main: { ldy.z tod_read.return_MIN // [32] tod_str::tod_HOURS#0 = tod_read::return_HOURS#1 -- vbuxx=vbuaa tax - // [33] call tod_str -- call_phi_near + // [33] call tod_str jsr tod_str // [34] phi from main::@3 to main::@4 [phi:main::@3->main::@4] __b4_from___b3: @@ -2238,7 +2238,7 @@ main: { // main::@4 __b4: // [35] call cputs - // [88] phi from main::@4 to cputs [phi:main::@4->cputs] -- call_phi_near + // [88] phi from main::@4 to cputs [phi:main::@4->cputs] cputs_from___b4: jsr cputs jmp __b1_from___b4 @@ -2519,7 +2519,7 @@ cputs: { // cputs::@2 __b2: // [94] cputc::c#0 = cputs::c#1 - // [95] call cputc -- call_phi_near + // [95] call cputc jsr cputc // [89] phi from cputs::@2 to cputs::@1 [phi:cputs::@2->cputs::@1] __b1_from___b2: @@ -2555,7 +2555,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [102] call cputln -- call_phi_near + // [102] call cputln jsr cputln jmp __breturn // cputc::@return @@ -2567,7 +2567,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [105] call cputln -- call_phi_near + // [105] call cputln jsr cputln jmp __breturn } @@ -2595,7 +2595,7 @@ cputln: { sta.z conio_cursor_x // [109] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [110] call cscroll -- call_phi_near + // [110] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -2623,7 +2623,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [125] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [125] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -2642,7 +2642,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [125] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [125] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -2658,7 +2658,7 @@ cscroll: { memset_from___b3: // [135] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [135] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [135] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -2674,7 +2674,7 @@ cscroll: { memset_from___b4: // [135] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [135] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [135] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -3197,11 +3197,11 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [7] call main -- call_phi_near + // [7] call main jsr main // __start::@return // [8] return @@ -3232,7 +3232,7 @@ conio_c64_init: { // [13] gotoxy::y#2 = conio_c64_init::line#2 // [14] call gotoxy // [36] phi from conio_c64_init::@1 to gotoxy [phi:conio_c64_init::@1->gotoxy] - // [36] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- call_phi_near + // [36] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- register_copy jsr gotoxy // conio_c64_init::@return // } @@ -3252,7 +3252,7 @@ main: { ldx TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_MIN // [19] tod_init::tod_HOURS#0 = *((char *)&TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_HOURS) -- vbuyy=_deref_pbuc1 ldy TOD_ZERO+OFFSET_STRUCT_TIME_OF_DAY_HOURS - // [20] call tod_init -- call_phi_near + // [20] call tod_init jsr tod_init // [21] phi from main main::@4 to main::@1 [phi:main/main::@4->main::@1] // main::@1 @@ -3260,13 +3260,13 @@ main: { // gotoxy(0,0) // [22] call gotoxy // [36] phi from main::@1 to gotoxy [phi:main::@1->gotoxy] - // [36] phi gotoxy::y#4 = 0 [phi:main::@1->gotoxy#0] -- call_phi_near + // [36] phi gotoxy::y#4 = 0 [phi:main::@1->gotoxy#0] -- vbuxx=vbuc1 ldx #0 jsr gotoxy // [23] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // tod_read() - // [24] call tod_read -- call_phi_near + // [24] call tod_read jsr tod_read // [25] tod_read::return_TENTHS#1 = tod_read::return_TENTHS#0 // [26] tod_read::return_SEC#1 = tod_read::return_SEC#0 @@ -3284,13 +3284,13 @@ main: { ldy.z tod_read.return_MIN // [32] tod_str::tod_HOURS#0 = tod_read::return_HOURS#1 -- vbuxx=vbuaa tax - // [33] call tod_str -- call_phi_near + // [33] call tod_str jsr tod_str // [34] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // cputs(tod_str(tod_read())) // [35] call cputs - // [88] phi from main::@4 to cputs [phi:main::@4->cputs] -- call_phi_near + // [88] phi from main::@4 to cputs [phi:main::@4->cputs] jsr cputs jmp __b1 } @@ -3598,7 +3598,7 @@ cputs: { __b2: // cputc(c) // [94] cputc::c#0 = cputs::c#1 - // [95] call cputc -- call_phi_near + // [95] call cputc jsr cputc // [89] phi from cputs::@2 to cputs::@1 [phi:cputs::@2->cputs::@1] // [89] phi cputs::s#2 = cputs::s#0 [phi:cputs::@2->cputs::@1#0] -- register_copy @@ -3632,7 +3632,7 @@ cputc: { // [101] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [102] call cputln -- call_phi_near + // [102] call cputln jsr cputln // cputc::@return __breturn: @@ -3643,7 +3643,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [105] call cputln -- call_phi_near + // [105] call cputln jsr cputln rts } @@ -3676,7 +3676,7 @@ cputln: { // [109] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [110] call cscroll -- call_phi_near + // [110] call cscroll jsr cscroll // cputln::@return // } @@ -3701,7 +3701,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [125] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [125] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -3717,7 +3717,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [125] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [125] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -3730,7 +3730,7 @@ cscroll: { // [135] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [135] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [135] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [135] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -3743,7 +3743,7 @@ cscroll: { // [135] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [135] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [135] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [135] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/toupper-1.log b/src/test/ref/toupper-1.log index cb5c3a047..a3c406731 100644 --- a/src/test/ref/toupper-1.log +++ b/src/test/ref/toupper-1.log @@ -1780,14 +1780,14 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [7] call main -- call_phi_near + // [7] call main jsr main jmp __breturn // __start::@return @@ -1825,7 +1825,7 @@ conio_c64_init: { // [14] call gotoxy // [35] phi from conio_c64_init::@1 to gotoxy [phi:conio_c64_init::@1->gotoxy] gotoxy_from___b1: - // [35] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- call_phi_near + // [35] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- register_copy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -1843,7 +1843,7 @@ main: { sta $d018 // [17] call clrscr // Clear screen - // [50] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [50] phi from main to clrscr [phi:main->clrscr] clrscr_from_main: jsr clrscr // [18] phi from main to main::@1 [phi:main->main::@1] @@ -1864,7 +1864,7 @@ main: { // [20] call cputc // [66] phi from main::@1 to cputc [phi:main::@1->cputc] cputc_from___b1: - // [66] phi cputc::c#2 = cputc::c#0 [phi:main::@1->cputc#0] -- call_phi_near + // [66] phi cputc::c#2 = cputc::c#0 [phi:main::@1->cputc#0] -- register_copy jsr cputc jmp __b4 // main::@4 @@ -1888,7 +1888,7 @@ main: { // [25] call gotoxy // [35] phi from main::@3 to gotoxy [phi:main::@3->gotoxy] gotoxy_from___b3: - // [35] phi gotoxy::y#4 = gotoxy::y#3 [phi:main::@3->gotoxy#0] -- call_phi_near + // [35] phi gotoxy::y#4 = gotoxy::y#3 [phi:main::@3->gotoxy#0] -- register_copy jsr gotoxy // [26] phi from main::@3 to main::@2 [phi:main::@3->main::@2] __b2_from___b3: @@ -1905,7 +1905,7 @@ main: { __b2: // [27] toupper::ch#0 = main::c1#2 -- vbuaa=vbuz1 lda.z c1 - // [28] call toupper -- call_phi_near + // [28] call toupper jsr toupper // [29] toupper::return#3 = toupper::return#2 jmp __b5 @@ -1915,7 +1915,7 @@ main: { // [31] call cputc // [66] phi from main::@5 to cputc [phi:main::@5->cputc] cputc_from___b5: - // [66] phi cputc::c#2 = cputc::c#1 [phi:main::@5->cputc#0] -- call_phi_near + // [66] phi cputc::c#2 = cputc::c#1 [phi:main::@5->cputc#0] -- register_copy jsr cputc jmp __b6 // main::@6 @@ -2159,7 +2159,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [73] call cputln -- call_phi_near + // [73] call cputln jsr cputln jmp __breturn // cputc::@return @@ -2171,7 +2171,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [76] call cputln -- call_phi_near + // [76] call cputln jsr cputln jmp __breturn } @@ -2231,7 +2231,7 @@ cputln: { sta.z conio_cursor_x // [85] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [86] call cscroll -- call_phi_near + // [86] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -2259,7 +2259,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [101] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [101] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -2278,7 +2278,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [101] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [101] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -2294,7 +2294,7 @@ cscroll: { memset_from___b3: // [111] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [111] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [111] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -2310,7 +2310,7 @@ cscroll: { memset_from___b4: // [111] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [111] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [111] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -2766,11 +2766,11 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [7] call main -- call_phi_near + // [7] call main jsr main // __start::@return // [8] return @@ -2801,7 +2801,7 @@ conio_c64_init: { // [13] gotoxy::y#2 = conio_c64_init::line#2 // [14] call gotoxy // [35] phi from conio_c64_init::@1 to gotoxy [phi:conio_c64_init::@1->gotoxy] - // [35] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- call_phi_near + // [35] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- register_copy jsr gotoxy // conio_c64_init::@return // } @@ -2820,7 +2820,7 @@ main: { // clrscr() // [17] call clrscr // Clear screen - // [50] phi from main to clrscr [phi:main->clrscr] -- call_phi_near + // [50] phi from main to clrscr [phi:main->clrscr] jsr clrscr // [18] phi from main to main::@1 [phi:main->main::@1] // [18] phi main::c#2 = 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 @@ -2836,7 +2836,7 @@ main: { lda.z c // [20] call cputc // [66] phi from main::@1 to cputc [phi:main::@1->cputc] - // [66] phi cputc::c#2 = cputc::c#0 [phi:main::@1->cputc#0] -- call_phi_near + // [66] phi cputc::c#2 = cputc::c#0 [phi:main::@1->cputc#0] -- register_copy jsr cputc // main::@4 // for(char c:0..0xff) @@ -2856,7 +2856,7 @@ main: { inx // [25] call gotoxy // [35] phi from main::@3 to gotoxy [phi:main::@3->gotoxy] - // [35] phi gotoxy::y#4 = gotoxy::y#3 [phi:main::@3->gotoxy#0] -- call_phi_near + // [35] phi gotoxy::y#4 = gotoxy::y#3 [phi:main::@3->gotoxy#0] -- register_copy jsr gotoxy // [26] phi from main::@3 to main::@2 [phi:main::@3->main::@2] // [26] phi main::c1#2 = 0 [phi:main::@3->main::@2#0] -- vbuz1=vbuc1 @@ -2870,7 +2870,7 @@ main: { // toupper(c) // [27] toupper::ch#0 = main::c1#2 -- vbuaa=vbuz1 lda.z c1 - // [28] call toupper -- call_phi_near + // [28] call toupper jsr toupper // [29] toupper::return#3 = toupper::return#2 // main::@5 @@ -2878,7 +2878,7 @@ main: { // [30] cputc::c#1 = toupper::return#3 // [31] call cputc // [66] phi from main::@5 to cputc [phi:main::@5->cputc] - // [66] phi cputc::c#2 = cputc::c#1 [phi:main::@5->cputc#0] -- call_phi_near + // [66] phi cputc::c#2 = cputc::c#1 [phi:main::@5->cputc#0] -- register_copy jsr cputc // main::@6 // for(char c:0..0xff) @@ -3118,7 +3118,7 @@ cputc: { // [72] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [73] call cputln -- call_phi_near + // [73] call cputln jsr cputln // cputc::@return __breturn: @@ -3129,7 +3129,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [76] call cputln -- call_phi_near + // [76] call cputln jsr cputln rts } @@ -3191,7 +3191,7 @@ cputln: { // [85] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [86] call cscroll -- call_phi_near + // [86] call cscroll jsr cscroll // cputln::@return // } @@ -3216,7 +3216,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [101] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [101] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -3232,7 +3232,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [101] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [101] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -3245,7 +3245,7 @@ cscroll: { // [111] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [111] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [111] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [111] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -3258,7 +3258,7 @@ cscroll: { // [111] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [111] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [111] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [111] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 diff --git a/src/test/ref/travis1.log b/src/test/ref/travis1.log index 1d1caf5d6..3097d73f5 100644 --- a/src/test/ref/travis1.log +++ b/src/test/ref/travis1.log @@ -866,7 +866,7 @@ main: { jmp __b1 // main::@1 __b1: - // [2] call game_ready -- call_phi_near + // [2] call game_ready jsr game_ready // [3] game_ready::return#0 = game_ready::return#1 jmp __b4 @@ -889,7 +889,7 @@ main: { print_str_ln_from___b3: // [19] phi print_line_cursor#24 = print_line_cursor#15 [phi:main::@3->print_str_ln#0] -- register_copy // [19] phi print_char_cursor#33 = print_char_cursor#47 [phi:main::@3->print_str_ln#1] -- register_copy - // [19] phi print_str_ln::str#2 = main::str [phi:main::@3->print_str_ln#2] -- call_phi_near + // [19] phi print_str_ln::str#2 = main::str [phi:main::@3->print_str_ln#2] -- pbuz1=pbuc1 lda #str @@ -954,7 +954,7 @@ game_ready: { print_str_ln_from___b1: // [19] phi print_line_cursor#24 = print_line_cursor#26 [phi:game_ready::@1->print_str_ln#0] -- register_copy // [19] phi print_char_cursor#33 = print_char_cursor#37 [phi:game_ready::@1->print_str_ln#1] -- register_copy - // [19] phi print_str_ln::str#2 = game_ready::str [phi:game_ready::@1->print_str_ln#2] -- call_phi_near + // [19] phi print_str_ln::str#2 = game_ready::str [phi:game_ready::@1->print_str_ln#2] -- pbuz1=pbuc1 lda #str @@ -988,7 +988,7 @@ print_str_ln: { .label str = 4 // [20] print_str::str#0 = print_str_ln::str#2 // [21] call print_str - // [25] phi from print_str_ln to print_str [phi:print_str_ln->print_str] -- call_phi_near + // [25] phi from print_str_ln to print_str [phi:print_str_ln->print_str] print_str_from_print_str_ln: jsr print_str // [22] phi from print_str_ln to print_str_ln::@1 [phi:print_str_ln->print_str_ln::@1] @@ -997,7 +997,7 @@ print_str_ln: { // print_str_ln::@1 __b1: // [23] call print_ln - // [32] phi from print_str_ln::@1 to print_ln [phi:print_str_ln::@1->print_ln] -- call_phi_near + // [32] phi from print_str_ln::@1 to print_ln [phi:print_str_ln::@1->print_ln] print_ln_from___b1: jsr print_ln jmp __breturn @@ -1034,7 +1034,7 @@ print_str: { // [29] print_char::ch#0 = *print_str::str#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [30] call print_char -- call_phi_near + // [30] call print_char jsr print_char jmp __b3 // print_str::@3 @@ -1253,7 +1253,7 @@ main: { // main::@1 __b1: // game_ready() - // [2] call game_ready -- call_phi_near + // [2] call game_ready jsr game_ready // [3] game_ready::return#0 = game_ready::return#1 // main::@4 @@ -1275,7 +1275,7 @@ main: { // [19] phi from main::@3 to print_str_ln [phi:main::@3->print_str_ln] // [19] phi print_line_cursor#24 = print_line_cursor#15 [phi:main::@3->print_str_ln#0] -- register_copy // [19] phi print_char_cursor#33 = print_char_cursor#47 [phi:main::@3->print_str_ln#1] -- register_copy - // [19] phi print_str_ln::str#2 = main::str [phi:main::@3->print_str_ln#2] -- call_phi_near + // [19] phi print_str_ln::str#2 = main::str [phi:main::@3->print_str_ln#2] -- pbuz1=pbuc1 lda #str @@ -1332,7 +1332,7 @@ game_ready: { // [19] phi from game_ready::@1 to print_str_ln [phi:game_ready::@1->print_str_ln] // [19] phi print_line_cursor#24 = print_line_cursor#26 [phi:game_ready::@1->print_str_ln#0] -- register_copy // [19] phi print_char_cursor#33 = print_char_cursor#37 [phi:game_ready::@1->print_str_ln#1] -- register_copy - // [19] phi print_str_ln::str#2 = game_ready::str [phi:game_ready::@1->print_str_ln#2] -- call_phi_near + // [19] phi print_str_ln::str#2 = game_ready::str [phi:game_ready::@1->print_str_ln#2] -- pbuz1=pbuc1 lda #str @@ -1366,13 +1366,13 @@ print_str_ln: { // print_str(str) // [20] print_str::str#0 = print_str_ln::str#2 // [21] call print_str - // [25] phi from print_str_ln to print_str [phi:print_str_ln->print_str] -- call_phi_near + // [25] phi from print_str_ln to print_str [phi:print_str_ln->print_str] jsr print_str // [22] phi from print_str_ln to print_str_ln::@1 [phi:print_str_ln->print_str_ln::@1] // print_str_ln::@1 // print_ln() // [23] call print_ln - // [32] phi from print_str_ln::@1 to print_ln [phi:print_str_ln::@1->print_ln] -- call_phi_near + // [32] phi from print_str_ln::@1 to print_ln [phi:print_str_ln::@1->print_ln] jsr print_ln // print_str_ln::@return // } @@ -1405,7 +1405,7 @@ print_str: { // [29] print_char::ch#0 = *print_str::str#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y - // [30] call print_char -- call_phi_near + // [30] call print_char jsr print_char // print_str::@3 // print_char(*(str++)); diff --git a/src/test/ref/typedef-2.log b/src/test/ref/typedef-2.log index b687fafe3..b0794ff9f 100644 --- a/src/test/ref/typedef-2.log +++ b/src/test/ref/typedef-2.log @@ -161,7 +161,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -234,7 +234,7 @@ __start: { sta.z ptr+1 // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/typedef-4.log b/src/test/ref/typedef-4.log index 6f11f1843..a7149e8a3 100644 --- a/src/test/ref/typedef-4.log +++ b/src/test/ref/typedef-4.log @@ -143,7 +143,7 @@ __start: { jmp __b1 // __start::@1 __b1: - // [3] call main -- call_phi_near + // [3] call main jsr main jmp __breturn // __start::@return @@ -219,7 +219,7 @@ __start: { sta.z v // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main -- call_phi_near + // [3] call main jsr main // __start::@return // [4] return diff --git a/src/test/ref/typeid-plus-bytes.log b/src/test/ref/typeid-plus-bytes.log index e8c0b9553..178f9f3fd 100644 --- a/src/test/ref/typeid-plus-bytes.log +++ b/src/test/ref/typeid-plus-bytes.log @@ -1214,28 +1214,28 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call testUnsigned -- call_phi_near + // [1] call testUnsigned jsr testUnsigned // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: jmp __b1 // main::@1 __b1: - // [3] call testUnsignedVals -- call_phi_near + // [3] call testUnsignedVals jsr testUnsignedVals // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: jmp __b2 // main::@2 __b2: - // [5] call testSigned -- call_phi_near + // [5] call testSigned jsr testSigned // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: jmp __b3 // main::@3 __b3: - // [7] call testSignedVals -- call_phi_near + // [7] call testSignedVals jsr testSignedVals jmp __breturn // main::@return @@ -1547,22 +1547,22 @@ Score: 336 // main main: { // testUnsigned() - // [1] call testUnsigned -- call_phi_near + // [1] call testUnsigned jsr testUnsigned // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // testUnsignedVals() - // [3] call testUnsignedVals -- call_phi_near + // [3] call testUnsignedVals jsr testUnsignedVals // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // testSigned() - // [5] call testSigned -- call_phi_near + // [5] call testSigned jsr testSigned // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // testSignedVals() - // [7] call testSignedVals -- call_phi_near + // [7] call testSignedVals jsr testSignedVals // main::@return // } diff --git a/src/test/ref/union-7.log b/src/test/ref/union-7.log index 7c32c5599..03cd69c4e 100644 --- a/src/test/ref/union-7.log +++ b/src/test/ref/union-7.log @@ -264,7 +264,7 @@ main: { // [1] call print // [5] phi from main to print [phi:main->print] print_from_main: - // [5] phi idx#13 = 0 [phi:main->print#0] -- call_phi_near + // [5] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 jsr print jmp __b1 @@ -280,7 +280,7 @@ main: { // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] print_from___b1: - // [5] phi idx#13 = idx#14 [phi:main::@1->print#0] -- call_phi_near + // [5] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy jsr print jmp __breturn // main::@return @@ -387,7 +387,7 @@ main: { bne !- // [1] call print // [5] phi from main to print [phi:main->print] - // [5] phi idx#13 = 0 [phi:main->print#0] -- call_phi_near + // [5] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 jsr print // main::@1 @@ -401,7 +401,7 @@ main: { bne !- // [3] call print // [5] phi from main::@1 to print [phi:main::@1->print] - // [5] phi idx#13 = idx#14 [phi:main::@1->print#0] -- call_phi_near + // [5] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy jsr print // main::@return // } diff --git a/src/test/ref/union-8.log b/src/test/ref/union-8.log index 719799d32..2293bd594 100644 --- a/src/test/ref/union-8.log +++ b/src/test/ref/union-8.log @@ -262,7 +262,7 @@ main: { // [1] call data // [8] phi from main to data [phi:main->data] data_from_main: - // [8] phi data::i#2 = $1234 [phi:main->data#0] -- call_phi_near + // [8] phi data::i#2 = $1234 [phi:main->data#0] -- vwuz1=vwuc1 lda #<$1234 sta.z data.i lda #>$1234 @@ -284,7 +284,7 @@ main: { // [4] call data // [8] phi from main::@1 to data [phi:main::@1->data] data_from___b1: - // [8] phi data::i#2 = $5678 [phi:main::@1->data#0] -- call_phi_near + // [8] phi data::i#2 = $5678 [phi:main::@1->data#0] -- vwuz1=vwuc1 lda #<$5678 sta.z data.i lda #>$5678 @@ -384,7 +384,7 @@ main: { // union Data d1 = data(0x1234) // [1] call data // [8] phi from main to data [phi:main->data] - // [8] phi data::i#2 = $1234 [phi:main->data#0] -- call_phi_near + // [8] phi data::i#2 = $1234 [phi:main->data#0] -- vwuz1=vwuc1 lda #<$1234 sta.z data.i lda #>$1234 @@ -406,7 +406,7 @@ main: { // union Data d2 = data(0x5678) // [4] call data // [8] phi from main::@1 to data [phi:main::@1->data] - // [8] phi data::i#2 = $5678 [phi:main::@1->data#0] -- call_phi_near + // [8] phi data::i#2 = $5678 [phi:main::@1->data#0] -- vwuz1=vwuc1 lda #<$5678 sta.z data.i lda #>$5678 diff --git a/src/test/ref/var-register-zp-3.log b/src/test/ref/var-register-zp-3.log index 6d05b64b9..7515037a5 100644 --- a/src/test/ref/var-register-zp-3.log +++ b/src/test/ref/var-register-zp-3.log @@ -351,7 +351,7 @@ main: { sta.z print2.at lda #>screen sta.z print2.at+1 - // [5] phi print2::msg#4 = main::msg [phi:main->print2#1] -- call_phi_near + // [5] phi print2::msg#4 = main::msg [phi:main->print2#1] -- pbuz1=pbuc1 lda #msg @@ -370,7 +370,7 @@ main: { sta.z print2.at lda #>screen+$50 sta.z print2.at+1 - // [5] phi print2::msg#4 = main::msg1 [phi:main::@1->print2#1] -- call_phi_near + // [5] phi print2::msg#4 = main::msg1 [phi:main::@1->print2#1] -- pbuz1=pbuc1 lda #msg1 @@ -421,7 +421,7 @@ print2: { // [11] print_char::ch#0 = print2::msg#4[print2::i#2] -- vbuaa=pbuz1_derefidx_vbuz2 ldy.z i lda (msg),y - // [12] call print_char -- call_phi_near + // [12] call print_char jsr print_char jmp __b3 // print2::@3 @@ -534,7 +534,7 @@ main: { sta.z print2.at lda #>screen sta.z print2.at+1 - // [5] phi print2::msg#4 = main::msg [phi:main->print2#1] -- call_phi_near + // [5] phi print2::msg#4 = main::msg [phi:main->print2#1] -- pbuz1=pbuc1 lda #msg @@ -550,7 +550,7 @@ main: { sta.z print2.at lda #>screen+$50 sta.z print2.at+1 - // [5] phi print2::msg#4 = main::msg1 [phi:main::@1->print2#1] -- call_phi_near + // [5] phi print2::msg#4 = main::msg1 [phi:main::@1->print2#1] -- pbuz1=pbuc1 lda #msg1 @@ -599,7 +599,7 @@ print2: { // [11] print_char::ch#0 = print2::msg#4[print2::i#2] -- vbuaa=pbuz1_derefidx_vbuz2 ldy.z i lda (msg),y - // [12] call print_char -- call_phi_near + // [12] call print_char jsr print_char // print2::@3 // j += 2 diff --git a/src/test/ref/var-register.log b/src/test/ref/var-register.log index c188609ed..104745bbf 100644 --- a/src/test/ref/var-register.log +++ b/src/test/ref/var-register.log @@ -340,7 +340,7 @@ main: { adc.z x // [5] print::idx#0 = main::y#4 // [6] print::val#0 = main::val1#0 - // [7] call print -- call_phi_near + // [7] call print jsr print jmp __b6 // main::@6 @@ -494,7 +494,7 @@ main: { // print(y, val1) // [5] print::idx#0 = main::y#4 // [6] print::val#0 = main::val1#0 - // [7] call print -- call_phi_near + // [7] call print jsr print // main::@6 // for( byte a: 0..100 ) diff --git a/src/test/ref/varmodel-ma_mem-3.log b/src/test/ref/varmodel-ma_mem-3.log index 1acef1711..d685aab73 100644 --- a/src/test/ref/varmodel-ma_mem-3.log +++ b/src/test/ref/varmodel-ma_mem-3.log @@ -248,7 +248,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call model_ma_mem -- call_phi_near + // [1] call model_ma_mem jsr model_ma_mem // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -256,7 +256,7 @@ main: { // main::@1 __b1: // [3] call model_ssa_zp - // [12] phi from main::@1 to model_ssa_zp [phi:main::@1->model_ssa_zp] -- call_phi_near + // [12] phi from main::@1 to model_ssa_zp [phi:main::@1->model_ssa_zp] model_ssa_zp_from___b1: jsr model_ssa_zp jmp __breturn @@ -413,13 +413,13 @@ Score: 988 // main main: { // model_ma_mem() - // [1] call model_ma_mem -- call_phi_near + // [1] call model_ma_mem jsr model_ma_mem // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // model_ssa_zp() // [3] call model_ssa_zp - // [12] phi from main::@1 to model_ssa_zp [phi:main::@1->model_ssa_zp] -- call_phi_near + // [12] phi from main::@1 to model_ssa_zp [phi:main::@1->model_ssa_zp] jsr model_ssa_zp // main::@return // } diff --git a/src/test/ref/varmodel-mem-1.log b/src/test/ref/varmodel-mem-1.log index f7fb80684..b7d15ea15 100644 --- a/src/test/ref/varmodel-mem-1.log +++ b/src/test/ref/varmodel-mem-1.log @@ -306,7 +306,7 @@ main: { // [17] phi from main::@1 to sum [phi:main::@1->sum] sum_from___b1: // [17] phi sum::b#2 = sum::b#0 [phi:main::@1->sum#0] -- register_copy - // [17] phi sum::a#2 = sum::a#0 [phi:main::@1->sum#1] -- call_phi_near + // [17] phi sum::a#2 = sum::a#0 [phi:main::@1->sum#1] -- register_copy jsr sum // [5] sum::return#0 = sum::return#2 jmp __b2 @@ -321,7 +321,7 @@ main: { // [17] phi from main::@2 to sum [phi:main::@2->sum] sum_from___b2: // [17] phi sum::b#2 = sum::b#1 [phi:main::@2->sum#0] -- register_copy - // [17] phi sum::a#2 = sum::a#1 [phi:main::@2->sum#1] -- call_phi_near + // [17] phi sum::a#2 = sum::a#1 [phi:main::@2->sum#1] -- register_copy jsr sum // [10] sum::return#1 = sum::return#2 jmp __b3 @@ -453,7 +453,7 @@ main: { // [4] call sum // [17] phi from main::@1 to sum [phi:main::@1->sum] // [17] phi sum::b#2 = sum::b#0 [phi:main::@1->sum#0] -- register_copy - // [17] phi sum::a#2 = sum::a#0 [phi:main::@1->sum#1] -- call_phi_near + // [17] phi sum::a#2 = sum::a#0 [phi:main::@1->sum#1] -- register_copy jsr sum // sum(i,i) // [5] sum::return#0 = sum::return#2 @@ -466,7 +466,7 @@ main: { // [9] call sum // [17] phi from main::@2 to sum [phi:main::@2->sum] // [17] phi sum::b#2 = sum::b#1 [phi:main::@2->sum#0] -- register_copy - // [17] phi sum::a#2 = sum::a#1 [phi:main::@2->sum#1] -- call_phi_near + // [17] phi sum::a#2 = sum::a#1 [phi:main::@2->sum#1] -- register_copy jsr sum // sum(i,i) // [10] sum::return#1 = sum::return#2 diff --git a/src/test/ref/void-parameter.log b/src/test/ref/void-parameter.log index bb2e46799..874323b60 100644 --- a/src/test/ref/void-parameter.log +++ b/src/test/ref/void-parameter.log @@ -204,7 +204,7 @@ main: { // [1] call print // [7] phi from main to print [phi:main->print] print_from_main: - // [7] phi idx#13 = 0 [phi:main->print#0] -- call_phi_near + // [7] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -215,7 +215,7 @@ main: { // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] print_from___b1: - // [7] phi idx#13 = idx#14 [phi:main::@1->print#0] -- call_phi_near + // [7] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: @@ -225,7 +225,7 @@ main: { // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] print_from___b2: - // [7] phi idx#13 = idx#14 [phi:main::@2->print#0] -- call_phi_near + // [7] phi idx#13 = idx#14 [phi:main::@2->print#0] -- register_copy jsr print jmp __breturn // main::@return @@ -300,7 +300,7 @@ main: { // print() // [1] call print // [7] phi from main to print [phi:main->print] - // [7] phi idx#13 = 0 [phi:main->print#0] -- call_phi_near + // [7] phi idx#13 = 0 [phi:main->print#0] -- vbuxx=vbuc1 ldx #0 jsr print // [2] phi from main to main::@1 [phi:main->main::@1] @@ -308,14 +308,14 @@ main: { // print() // [3] call print // [7] phi from main::@1 to print [phi:main::@1->print] - // [7] phi idx#13 = idx#14 [phi:main::@1->print#0] -- call_phi_near + // [7] phi idx#13 = idx#14 [phi:main::@1->print#0] -- register_copy jsr print // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // print() // [5] call print // [7] phi from main::@2 to print [phi:main::@2->print] - // [7] phi idx#13 = idx#14 [phi:main::@2->print#0] -- call_phi_near + // [7] phi idx#13 = idx#14 [phi:main::@2->print#0] -- register_copy jsr print // main::@return // } diff --git a/src/test/ref/volatile-0.log b/src/test/ref/volatile-0.log index 94f5e8e54..d95bbac39 100644 --- a/src/test/ref/volatile-0.log +++ b/src/test/ref/volatile-0.log @@ -152,7 +152,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -240,7 +240,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return diff --git a/src/test/ref/volatile-2.log b/src/test/ref/volatile-2.log index ededfb26d..49b880883 100644 --- a/src/test/ref/volatile-2.log +++ b/src/test/ref/volatile-2.log @@ -179,7 +179,7 @@ __start: { // __start::@1 __b1: // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn @@ -278,7 +278,7 @@ __start: { // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] -- call_phi_near + // [5] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return // [4] return diff --git a/src/test/ref/voronoi.log b/src/test/ref/voronoi.log index 9a71eb20b..cac577834 100644 --- a/src/test/ref/voronoi.log +++ b/src/test/ref/voronoi.log @@ -1349,7 +1349,7 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call initscreen - // [6] phi from main to initscreen [phi:main->initscreen] -- call_phi_near + // [6] phi from main to initscreen [phi:main->initscreen] initscreen_from_main: jsr initscreen // [2] phi from main main::@2 to main::@1 [phi:main/main::@2->main::@1] @@ -1359,7 +1359,7 @@ main: { // main::@1 __b1: // [3] call render - // [12] phi from main::@1 to render [phi:main::@1->render] -- call_phi_near + // [12] phi from main::@1 to render [phi:main::@1->render] render_from___b1: jsr render // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -1367,7 +1367,7 @@ main: { jmp __b2 // main::@2 __b2: - // [5] call animate -- call_phi_near + // [5] call animate jsr animate jmp __b1_from___b2 } @@ -1452,7 +1452,7 @@ render: { // [15] findcol::x#0 = render::x#2 // [16] findcol::y#0 = render::y#4 // [17] call findcol - // [53] phi from render::@2 to findcol [phi:render::@2->findcol] -- call_phi_near + // [53] phi from render::@2 to findcol [phi:render::@2->findcol] findcol_from___b2: jsr findcol // [18] findcol::return#0 = findcol::return#3 -- vbuaa=vbuxx @@ -1976,19 +1976,19 @@ Score: 1568620 main: { // initscreen() // [1] call initscreen - // [6] phi from main to initscreen [phi:main->initscreen] -- call_phi_near + // [6] phi from main to initscreen [phi:main->initscreen] jsr initscreen // [2] phi from main main::@2 to main::@1 [phi:main/main::@2->main::@1] // main::@1 __b1: // render() // [3] call render - // [12] phi from main::@1 to render [phi:main::@1->render] -- call_phi_near + // [12] phi from main::@1 to render [phi:main::@1->render] jsr render // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // animate() - // [5] call animate -- call_phi_near + // [5] call animate jsr animate jmp __b1 } @@ -2065,7 +2065,7 @@ render: { // [15] findcol::x#0 = render::x#2 // [16] findcol::y#0 = render::y#4 // [17] call findcol - // [53] phi from render::@2 to findcol [phi:render::@2->findcol] -- call_phi_near + // [53] phi from render::@2 to findcol [phi:render::@2->findcol] jsr findcol // byte col = findcol(x, y) // [18] findcol::return#0 = findcol::return#3 -- vbuaa=vbuxx diff --git a/src/test/ref/weeip-bbslist.log b/src/test/ref/weeip-bbslist.log index 943137694..b8f240724 100644 --- a/src/test/ref/weeip-bbslist.log +++ b/src/test/ref/weeip-bbslist.log @@ -4093,14 +4093,14 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [7] call main -- call_phi_near + // [7] call main jsr main jmp __breturn // __start::@return @@ -4135,7 +4135,7 @@ conio_c64_init: { // conio_c64_init::@1 __b1: // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy jmp __breturn // conio_c64_init::@return @@ -4176,7 +4176,7 @@ cputc: { jmp __b3 // cputc::@3 __b3: - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln jmp __breturn // cputc::@return @@ -4188,7 +4188,7 @@ cputc: { jmp __b1 // cputc::@1 __b1: - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln jmp __breturn } @@ -4234,7 +4234,7 @@ main: { // [32] call printf_string // [64] phi from main::@2 to printf_string [phi:main::@2->printf_string] printf_string_from___b2: - // [64] phi printf_string::str#2 = printf_string::str#0 [phi:main::@2->printf_string#0] -- call_phi_near + // [64] phi printf_string::str#2 = printf_string::str#0 [phi:main::@2->printf_string#0] -- register_copy jsr printf_string // [33] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: @@ -4249,7 +4249,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = main::s [phi:main::@3->printf_str#1] -- call_phi_near + // [68] phi printf_str::s#7 = main::s [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -4268,7 +4268,7 @@ main: { // [36] call printf_string // [64] phi from main::@4 to printf_string [phi:main::@4->printf_string] printf_string_from___b4: - // [64] phi printf_string::str#2 = printf_string::str#1 [phi:main::@4->printf_string#0] -- call_phi_near + // [64] phi printf_string::str#2 = printf_string::str#1 [phi:main::@4->printf_string#0] -- register_copy jsr printf_string // [37] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: @@ -4283,7 +4283,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = main::s [phi:main::@5->printf_str#1] -- call_phi_near + // [68] phi printf_str::s#7 = main::s [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -4300,7 +4300,7 @@ main: { lda (bbs),y sta.z printf_uint.uvalue+1 // [40] call printf_uint - // [77] phi from main::@6 to printf_uint [phi:main::@6->printf_uint] -- call_phi_near + // [77] phi from main::@6 to printf_uint [phi:main::@6->printf_uint] printf_uint_from___b6: jsr printf_uint // [41] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -4316,7 +4316,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = main::s2 [phi:main::@7->printf_str#1] -- call_phi_near + // [68] phi printf_str::s#7 = main::s2 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -4467,7 +4467,7 @@ cputln: { sta.z conio_cursor_x // [61] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [62] call cscroll -- call_phi_near + // [62] call cscroll jsr cscroll jmp __breturn // cputln::@return @@ -4493,7 +4493,7 @@ printf_string: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- call_phi_near + // [68] phi printf_str::s#7 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- register_copy jsr printf_str jmp __breturn // printf_string::@return @@ -4559,7 +4559,7 @@ printf_uint: { // [79] utoa::value#1 = printf_uint::uvalue#0 // [80] call utoa // Format number into buffer - // [97] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] -- call_phi_near + // [97] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] utoa_from___b1: jsr utoa jmp __b2 @@ -4569,7 +4569,7 @@ printf_uint: { lda printf_buffer // [82] call printf_number_buffer // Print using format - // [118] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] -- call_phi_near + // [118] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] printf_number_buffer_from___b2: jsr printf_number_buffer jmp __breturn @@ -4598,7 +4598,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [126] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [126] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -4617,7 +4617,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [126] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [126] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -4633,7 +4633,7 @@ cscroll: { memset_from___b3: // [136] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [136] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [136] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -4649,7 +4649,7 @@ cscroll: { memset_from___b4: // [136] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [136] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [136] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -4787,7 +4787,7 @@ utoa: { // [112] utoa_append::value#0 = utoa::value#2 // [113] utoa_append::sub#0 = utoa::digit_value#0 // [114] call utoa_append - // [144] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near + // [144] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] utoa_append_from___b5: jsr utoa_append // [115] utoa_append::return#0 = utoa_append::value#2 @@ -4843,7 +4843,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>printf_uint.putc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near + // [68] phi printf_str::s#7 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 lda #buffer_digits @@ -5622,11 +5622,11 @@ __start: { lda #>COLORRAM sta.z conio_line_color+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [5] call conio_c64_init -- call_phi_near + // [5] call conio_c64_init jsr conio_c64_init // [6] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [7] call main -- call_phi_near + // [7] call main jsr main // __start::@return // [8] return @@ -5655,7 +5655,7 @@ conio_c64_init: { __b1: // gotoxy(0, line) // [13] gotoxy::y#2 = conio_c64_init::line#2 - // [14] call gotoxy -- call_phi_near + // [14] call gotoxy jsr gotoxy // conio_c64_init::@return // } @@ -5694,7 +5694,7 @@ cputc: { // [22] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [23] call cputln -- call_phi_near + // [23] call cputln jsr cputln // cputc::@return __breturn: @@ -5705,7 +5705,7 @@ cputc: { // cputc::@1 __b1: // cputln() - // [26] call cputln -- call_phi_near + // [26] call cputln jsr cputln rts } @@ -5749,7 +5749,7 @@ main: { sta.z printf_string.str+1 // [32] call printf_string // [64] phi from main::@2 to printf_string [phi:main::@2->printf_string] - // [64] phi printf_string::str#2 = printf_string::str#0 [phi:main::@2->printf_string#0] -- call_phi_near + // [64] phi printf_string::str#2 = printf_string::str#0 [phi:main::@2->printf_string#0] -- register_copy jsr printf_string // [33] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 @@ -5761,7 +5761,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = main::s [phi:main::@3->printf_str#1] -- call_phi_near + // [68] phi printf_str::s#7 = main::s [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -5778,7 +5778,7 @@ main: { sta.z printf_string.str+1 // [36] call printf_string // [64] phi from main::@4 to printf_string [phi:main::@4->printf_string] - // [64] phi printf_string::str#2 = printf_string::str#1 [phi:main::@4->printf_string#0] -- call_phi_near + // [64] phi printf_string::str#2 = printf_string::str#1 [phi:main::@4->printf_string#0] -- register_copy jsr printf_string // [37] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 @@ -5790,7 +5790,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = main::s [phi:main::@5->printf_str#1] -- call_phi_near + // [68] phi printf_str::s#7 = main::s [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -5806,7 +5806,7 @@ main: { lda (bbs),y sta.z printf_uint.uvalue+1 // [40] call printf_uint - // [77] phi from main::@6 to printf_uint [phi:main::@6->printf_uint] -- call_phi_near + // [77] phi from main::@6 to printf_uint [phi:main::@6->printf_uint] jsr printf_uint // [41] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 @@ -5818,7 +5818,7 @@ main: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = main::s2 [phi:main::@7->printf_str#1] -- call_phi_near + // [68] phi printf_str::s#7 = main::s2 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -5970,7 +5970,7 @@ cputln: { // [61] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [62] call cscroll -- call_phi_near + // [62] call cscroll jsr cscroll // cputln::@return // } @@ -5993,7 +5993,7 @@ printf_string: { sta.z printf_str.putc lda #>cputc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- call_phi_near + // [68] phi printf_str::s#7 = printf_str::s#2 [phi:printf_string::@1->printf_str#1] -- register_copy jsr printf_str // printf_string::@return // } @@ -6056,7 +6056,7 @@ printf_uint: { // [79] utoa::value#1 = printf_uint::uvalue#0 // [80] call utoa // Format number into buffer - // [97] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] -- call_phi_near + // [97] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] jsr utoa // printf_uint::@2 // printf_number_buffer(putc, printf_buffer, format) @@ -6064,7 +6064,7 @@ printf_uint: { lda printf_buffer // [82] call printf_number_buffer // Print using format - // [118] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] -- call_phi_near + // [118] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] jsr printf_number_buffer // printf_uint::@return // } @@ -6089,7 +6089,7 @@ cscroll: { sta.z memcpy.destination lda #>DEFAULT_SCREEN sta.z memcpy.destination+1 - // [126] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- call_phi_near + // [126] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 @@ -6105,7 +6105,7 @@ cscroll: { sta.z memcpy.destination lda #>COLORRAM sta.z memcpy.destination+1 - // [126] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- call_phi_near + // [126] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 @@ -6118,7 +6118,7 @@ cscroll: { // [136] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] // [136] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [136] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- call_phi_near + // [136] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 @@ -6131,7 +6131,7 @@ cscroll: { // [136] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] // [136] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [136] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- call_phi_near + // [136] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -6267,7 +6267,7 @@ utoa: { // [112] utoa_append::value#0 = utoa::value#2 // [113] utoa_append::sub#0 = utoa::digit_value#0 // [114] call utoa_append - // [144] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] -- call_phi_near + // [144] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] jsr utoa_append // utoa_append(buffer++, value, digit_value) // [115] utoa_append::return#0 = utoa_append::value#2 @@ -6317,7 +6317,7 @@ printf_number_buffer: { sta.z printf_str.putc lda #>printf_uint.putc sta.z printf_str.putc+1 - // [68] phi printf_str::s#7 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- call_phi_near + // [68] phi printf_str::s#7 = printf_number_buffer::buffer_digits#0 [phi:printf_number_buffer::@2->printf_str#1] -- pbuz1=pbuc1 lda #buffer_digits diff --git a/src/test/ref/weeip-checksum.log b/src/test/ref/weeip-checksum.log index d1766bac7..000ab670d 100644 --- a/src/test/ref/weeip-checksum.log +++ b/src/test/ref/weeip-checksum.log @@ -729,7 +729,7 @@ main: { // [1] call add_checksum // [8] phi from main to add_checksum [phi:main->add_checksum] add_checksum_from_main: - // [8] phi add_checksum::v#3 = $1234 [phi:main->add_checksum#0] -- call_phi_near + // [8] phi add_checksum::v#3 = $1234 [phi:main->add_checksum#0] -- vwuz1=vwuc1 lda #<$1234 sta.z add_checksum.v lda #>$1234 @@ -746,7 +746,7 @@ main: { // [3] call add_checksum // [8] phi from main::@1 to add_checksum [phi:main::@1->add_checksum] add_checksum_from___b1: - // [8] phi add_checksum::v#3 = $2345 [phi:main::@1->add_checksum#0] -- call_phi_near + // [8] phi add_checksum::v#3 = $2345 [phi:main::@1->add_checksum#0] -- vwuz1=vwuc1 lda #<$2345 sta.z add_checksum.v lda #>$2345 @@ -763,7 +763,7 @@ main: { // [5] call add_checksum // [8] phi from main::@2 to add_checksum [phi:main::@2->add_checksum] add_checksum_from___b2: - // [8] phi add_checksum::v#3 = $3456 [phi:main::@2->add_checksum#0] -- call_phi_near + // [8] phi add_checksum::v#3 = $3456 [phi:main::@2->add_checksum#0] -- vwuz1=vwuc1 lda #<$3456 sta.z add_checksum.v lda #>$3456 @@ -991,7 +991,7 @@ main: { // add_checksum(0x1234) // [1] call add_checksum // [8] phi from main to add_checksum [phi:main->add_checksum] - // [8] phi add_checksum::v#3 = $1234 [phi:main->add_checksum#0] -- call_phi_near + // [8] phi add_checksum::v#3 = $1234 [phi:main->add_checksum#0] -- vwuz1=vwuc1 lda #<$1234 sta.z add_checksum.v lda #>$1234 @@ -1007,7 +1007,7 @@ main: { // add_checksum(0x2345) // [3] call add_checksum // [8] phi from main::@1 to add_checksum [phi:main::@1->add_checksum] - // [8] phi add_checksum::v#3 = $2345 [phi:main::@1->add_checksum#0] -- call_phi_near + // [8] phi add_checksum::v#3 = $2345 [phi:main::@1->add_checksum#0] -- vwuz1=vwuc1 lda #<$2345 sta.z add_checksum.v lda #>$2345 @@ -1023,7 +1023,7 @@ main: { // add_checksum(0x3456) // [5] call add_checksum // [8] phi from main::@2 to add_checksum [phi:main::@2->add_checksum] - // [8] phi add_checksum::v#3 = $3456 [phi:main::@2->add_checksum#0] -- call_phi_near + // [8] phi add_checksum::v#3 = $3456 [phi:main::@2->add_checksum#0] -- vwuz1=vwuc1 lda #<$3456 sta.z add_checksum.v lda #>$3456 diff --git a/src/test/ref/wfragment1.log b/src/test/ref/wfragment1.log index 7010c4f71..cb6bee255 100644 --- a/src/test/ref/wfragment1.log +++ b/src/test/ref/wfragment1.log @@ -238,7 +238,7 @@ main: { __b1: // [2] move_enemy::obj_slot#0 = main::i#2 -- vbuaa=vbuyy tya - // [3] call move_enemy -- call_phi_near + // [3] call move_enemy jsr move_enemy jmp __b2 // main::@2 @@ -344,7 +344,7 @@ main: { // move_enemy(i) // [2] move_enemy::obj_slot#0 = main::i#2 -- vbuaa=vbuyy tya - // [3] call move_enemy -- call_phi_near + // [3] call move_enemy jsr move_enemy // main::@2 // for(byte i:0..5) diff --git a/src/test/ref/zeropage-sinus.log b/src/test/ref/zeropage-sinus.log index 58a5e6075..c0c2ed378 100644 --- a/src/test/ref/zeropage-sinus.log +++ b/src/test/ref/zeropage-sinus.log @@ -323,28 +323,28 @@ main: { // [4] *(SCREEN+OFFSET_SPRITE_PTRS) = (char)SPRITE/$40 -- _deref_pbuc1=vbuc2 lda #$ff&SPRITE/$40 sta SCREEN+OFFSET_SPRITE_PTRS - // [5] call saveZeropage -- call_phi_near + // [5] call saveZeropage jsr saveZeropage // [6] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: jmp __b1 // main::@1 __b1: - // [7] call sinZeropage -- call_phi_near + // [7] call sinZeropage jsr sinZeropage // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: jmp __b2 // main::@2 __b2: - // [9] call animSprite -- call_phi_near + // [9] call animSprite jsr animSprite // [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: jmp __b3 // main::@3 __b3: - // [11] call restoreZeropage -- call_phi_near + // [11] call restoreZeropage jsr restoreZeropage jmp __breturn // main::@return @@ -541,22 +541,22 @@ main: { lda #$ff&SPRITE/$40 sta SCREEN+OFFSET_SPRITE_PTRS // saveZeropage() - // [5] call saveZeropage -- call_phi_near + // [5] call saveZeropage jsr saveZeropage // [6] phi from main to main::@1 [phi:main->main::@1] // main::@1 // sinZeropage() - // [7] call sinZeropage -- call_phi_near + // [7] call sinZeropage jsr sinZeropage // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // animSprite() - // [9] call animSprite -- call_phi_near + // [9] call animSprite jsr animSprite // [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // restoreZeropage() - // [11] call restoreZeropage -- call_phi_near + // [11] call restoreZeropage jsr restoreZeropage // main::@return // } diff --git a/src/test/ref/zp-reserve-coalesce-problem.log b/src/test/ref/zp-reserve-coalesce-problem.log index c32198dec..8eb06440f 100644 --- a/src/test/ref/zp-reserve-coalesce-problem.log +++ b/src/test/ref/zp-reserve-coalesce-problem.log @@ -663,7 +663,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // [1] call benchmarkCountdownFor -- call_phi_near + // [1] call benchmarkCountdownFor jsr benchmarkCountdownFor // [2] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: @@ -671,7 +671,7 @@ main: { // main::@1 __b1: // [3] call benchmarkLandscape - // [14] phi from main::@1 to benchmarkLandscape [phi:main::@1->benchmarkLandscape] -- call_phi_near + // [14] phi from main::@1 to benchmarkLandscape [phi:main::@1->benchmarkLandscape] benchmarkLandscape_from___b1: jsr benchmarkLandscape jmp __breturn @@ -1022,13 +1022,13 @@ Score: 649273 // main main: { // benchmarkCountdownFor() - // [1] call benchmarkCountdownFor -- call_phi_near + // [1] call benchmarkCountdownFor jsr benchmarkCountdownFor // [2] phi from main to main::@1 [phi:main->main::@1] // main::@1 // benchmarkLandscape() // [3] call benchmarkLandscape - // [14] phi from main::@1 to benchmarkLandscape [phi:main::@1->benchmarkLandscape] -- call_phi_near + // [14] phi from main::@1 to benchmarkLandscape [phi:main::@1->benchmarkLandscape] jsr benchmarkLandscape // main::@return // } diff --git a/src/test/ref/zpparammin.log b/src/test/ref/zpparammin.log index 9e7ddaf99..93b37706c 100644 --- a/src/test/ref/zpparammin.log +++ b/src/test/ref/zpparammin.log @@ -440,7 +440,7 @@ main: { inx // [4] sum::a#0 = main::i#2 -- vbuyy=vbuz1 ldy.z i - // [5] call sum -- call_phi_near + // [5] call sum jsr sum // [6] sum::return#0 = sum::return#1 jmp __b2 @@ -460,7 +460,7 @@ main: { inx // [11] sum2::a#0 = main::i#2 -- vbuyy=vbuz1 ldy.z i - // [12] call sum2 -- call_phi_near + // [12] call sum2 jsr sum2 // [13] sum2::return#0 = sum2::return#1 jmp __b3 @@ -630,7 +630,7 @@ main: { inx // [4] sum::a#0 = main::i#2 -- vbuyy=vbuz1 ldy.z i - // [5] call sum -- call_phi_near + // [5] call sum jsr sum // [6] sum::return#0 = sum::return#1 // main::@2 @@ -649,7 +649,7 @@ main: { inx inx // [11] sum2::a#0 = main::i#2 -- vbuyy=vbuz1 - // [12] call sum2 -- call_phi_near + // [12] call sum2 jsr sum2 // [13] sum2::return#0 = sum2::return#1 // main::@3 From 2b1bc3c11df9bd57f7ebd77fffc805cddabf256f Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 23 Apr 2023 16:00:52 +0200 Subject: [PATCH 57/66] Increased complexity of examples. Fixed A-clobber problems. --- .../call_phi_close_cx16_ram.asm | 6 +- .../call_phi_close_cx16_rom.asm | 6 +- .../kickc/test/TestProgramsFast.java | 5 + src/test/kc/call-banked-phi-case-1-near-0.c | 1 + src/test/kc/call-banked-phi-case-1-near-1.c | 5 +- src/test/kc/call-banked-phi-case-2-close-0.c | 4 +- src/test/kc/call-banked-phi-case-2-close-1.c | 9 +- src/test/kc/call-banked-phi-case-3-near-0.c | 6 +- src/test/kc/call-banked-phi-case-3-near-1.c | 5 +- src/test/kc/call-banked-phi-case-4-near-0.c | 6 +- src/test/kc/call-banked-phi-case-4-near-1.c | 8 +- src/test/kc/call-banked-phi-case-5-far-0.c | 5 +- src/test/kc/call-banked-phi-case-5-far-1.c | 8 +- src/test/kc/call-banked-phi-case-6-close-0.c | 5 +- src/test/kc/call-banked-phi-case-6-close-1.c | 8 +- .../banking/cx16-banking-recursive-near.c | 38 -- .../kc/examples/cx16/banking/cx16-banking.c | 1 + .../ref/call-banked-phi-case-1-near-0.asm | 22 +- .../ref/call-banked-phi-case-1-near-0.cfg | 22 +- .../ref/call-banked-phi-case-1-near-0.log | 259 ++++++--- .../ref/call-banked-phi-case-1-near-0.sym | 17 +- .../ref/call-banked-phi-case-1-near-1.asm | 31 +- .../ref/call-banked-phi-case-1-near-1.cfg | 43 +- .../ref/call-banked-phi-case-1-near-1.log | 467 +++++++++++----- .../ref/call-banked-phi-case-1-near-1.sym | 33 +- .../ref/call-banked-phi-case-2-close-0.asm | 39 +- .../ref/call-banked-phi-case-2-close-0.cfg | 22 +- .../ref/call-banked-phi-case-2-close-0.log | 300 +++++++--- .../ref/call-banked-phi-case-2-close-0.sym | 17 +- .../ref/call-banked-phi-case-2-close-1.asm | 39 +- .../ref/call-banked-phi-case-2-close-1.cfg | 22 +- .../ref/call-banked-phi-case-2-close-1.log | 300 +++++++--- .../ref/call-banked-phi-case-2-close-1.sym | 17 +- .../ref/call-banked-phi-case-3-near-0.asm | 49 +- .../ref/call-banked-phi-case-3-near-0.cfg | 43 +- .../ref/call-banked-phi-case-3-near-0.log | 507 ++++++++++++----- .../ref/call-banked-phi-case-3-near-0.sym | 33 +- .../ref/call-banked-phi-case-3-near-1.asm | 49 +- .../ref/call-banked-phi-case-3-near-1.cfg | 43 +- .../ref/call-banked-phi-case-3-near-1.log | 507 ++++++++++++----- .../ref/call-banked-phi-case-3-near-1.sym | 33 +- .../ref/call-banked-phi-case-4-near-0.asm | 49 +- .../ref/call-banked-phi-case-4-near-0.cfg | 43 +- .../ref/call-banked-phi-case-4-near-0.log | 507 ++++++++++++----- .../ref/call-banked-phi-case-4-near-0.sym | 33 +- .../ref/call-banked-phi-case-4-near-1.asm | 49 +- .../ref/call-banked-phi-case-4-near-1.cfg | 43 +- .../ref/call-banked-phi-case-4-near-1.log | 507 ++++++++++++----- .../ref/call-banked-phi-case-4-near-1.sym | 33 +- src/test/ref/call-banked-phi-case-5-far-0.asm | 51 +- src/test/ref/call-banked-phi-case-5-far-0.cfg | 43 +- src/test/ref/call-banked-phi-case-5-far-0.log | 511 +++++++++++------ src/test/ref/call-banked-phi-case-5-far-0.sym | 33 +- src/test/ref/call-banked-phi-case-5-far-1.asm | 51 +- src/test/ref/call-banked-phi-case-5-far-1.cfg | 43 +- src/test/ref/call-banked-phi-case-5-far-1.log | 511 +++++++++++------ src/test/ref/call-banked-phi-case-5-far-1.sym | 33 +- .../ref/call-banked-phi-case-6-close-0.asm | 55 +- .../ref/call-banked-phi-case-6-close-0.cfg | 43 +- .../ref/call-banked-phi-case-6-close-0.log | 523 +++++++++++++----- .../ref/call-banked-phi-case-6-close-0.sym | 33 +- .../ref/call-banked-phi-case-6-close-1.asm | 55 +- .../ref/call-banked-phi-case-6-close-1.cfg | 43 +- .../ref/call-banked-phi-case-6-close-1.log | 523 +++++++++++++----- .../ref/call-banked-phi-case-6-close-1.sym | 33 +- 65 files changed, 4923 insertions(+), 1965 deletions(-) delete mode 100644 src/test/kc/examples/cx16/banking/cx16-banking-recursive-near.c diff --git a/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm b/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm index fda09c03e..87678c012 100644 --- a/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm +++ b/src/main/fragment/mos6502-common/call_phi_close_cx16_ram.asm @@ -1,7 +1,11 @@ +sta $ff lda $0 pha lda #{c1} sta $0 +lda $ff jsr {la1} +sta $ff pla -sta $0 \ No newline at end of file +sta $0 +lda $ff \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm b/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm index 6d0c8e9c2..5eb46e849 100644 --- a/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm +++ b/src/main/fragment/mos6502-common/call_phi_close_cx16_rom.asm @@ -1,7 +1,11 @@ +sta $ff lda $1 pha lda #{c1} sta $1 +lda $ff jsr {la1} +sta $ff pla -sta $1 \ No newline at end of file +sta $1 +lda $ff \ No newline at end of file diff --git a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java index 95ae83112..7b2bc53a8 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java +++ b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java @@ -767,6 +767,11 @@ public class TestProgramsFast extends TestPrograms { compileAndCompare("examples/cx16/cx16-rasterbars.c"); } + //@Test + //public void testCx16Banking() throws IOException { + // compileAndCompare("examples/cx16/banking/cx16-banking.c"); + //} + @Test public void testMega65Camelot1536Dots() throws IOException { compileAndCompare("examples/mega65/camelot-1536dots.c"); diff --git a/src/test/kc/call-banked-phi-case-1-near-0.c b/src/test/kc/call-banked-phi-case-1-near-0.c index 090483c52..07b4a9513 100644 --- a/src/test/kc/call-banked-phi-case-1-near-0.c +++ b/src/test/kc/call-banked-phi-case-1-near-0.c @@ -32,6 +32,7 @@ char* const SCREEN = (char*)0x0400; #pragma code_seg(Code) void main(void) { SCREEN[0] = plus('0', 7); // near call + SCREEN[1] = plus('1', 6); // near call } #pragma code_seg(Code) diff --git a/src/test/kc/call-banked-phi-case-1-near-1.c b/src/test/kc/call-banked-phi-case-1-near-1.c index e33afe4ea..7b5b79ef6 100644 --- a/src/test/kc/call-banked-phi-case-1-near-1.c +++ b/src/test/kc/call-banked-phi-case-1-near-1.c @@ -32,14 +32,15 @@ char* const SCREEN = (char*)0x0400; #pragma code_seg(Code) void main(void) { SCREEN[0] = plus('0', 7); // near call + SCREEN[1] = plus('1', 6); // near call } #pragma code_seg(Code) char plus(char a, char b) { - return min(a, b); // near call + return add(a, b); // near call } #pragma code_seg(Code) -char min(char a, char b) { +char add(char a, char b) { return a+b; } diff --git a/src/test/kc/call-banked-phi-case-2-close-0.c b/src/test/kc/call-banked-phi-case-2-close-0.c index b82015898..ed836b407 100644 --- a/src/test/kc/call-banked-phi-case-2-close-0.c +++ b/src/test/kc/call-banked-phi-case-2-close-0.c @@ -33,10 +33,10 @@ char* const SCREEN = (char*)0x0400; #pragma code_seg(Code) void main(void) { SCREEN[0] = plus('0', 7); // close call + SCREEN[1] = plus('1', 6); // close call } #pragma code_seg(RAM_Bank1) __bank(cx16_ram,1) char plus(char a, char b) { return a+b; -} - +} \ No newline at end of file diff --git a/src/test/kc/call-banked-phi-case-2-close-1.c b/src/test/kc/call-banked-phi-case-2-close-1.c index 86512ae43..038007c95 100644 --- a/src/test/kc/call-banked-phi-case-2-close-1.c +++ b/src/test/kc/call-banked-phi-case-2-close-1.c @@ -28,21 +28,16 @@ #pragma link("call-banked-phi.ld") - char* const SCREEN = (char*)0x0400; #pragma code_seg(Code) void main(void) { SCREEN[0] = plus('0', 7); // close call + SCREEN[1] = plus('1', 6); // close call } #pragma code_seg(RAM_Bank1) #pragma bank(cx16_ram, 1) char plus(char a, char b) { return a+b; -} - -#pragma code_seg(Code) -#pragma nobank - - +} \ No newline at end of file diff --git a/src/test/kc/call-banked-phi-case-3-near-0.c b/src/test/kc/call-banked-phi-case-3-near-0.c index 30229c425..76812ead5 100644 --- a/src/test/kc/call-banked-phi-case-3-near-0.c +++ b/src/test/kc/call-banked-phi-case-3-near-0.c @@ -33,15 +33,17 @@ char* const SCREEN = (char*)0x0400; #pragma code_seg(Code) void main(void) { SCREEN[0] = plus('0', 7); // close call + SCREEN[1] = plus('1', 6); // close call } #pragma code_seg(RAM_Bank1) __bank(cx16_ram,1) char plus(char a, char b) { - return min(a, b); // near call + return add(a, b); // near call } #pragma code_seg(Code) -char min(char a, char b) { +#pragma nobank +char add(char a, char b) { return a+b; } diff --git a/src/test/kc/call-banked-phi-case-3-near-1.c b/src/test/kc/call-banked-phi-case-3-near-1.c index 2743d4b5c..25bce37f7 100644 --- a/src/test/kc/call-banked-phi-case-3-near-1.c +++ b/src/test/kc/call-banked-phi-case-3-near-1.c @@ -33,17 +33,18 @@ char* const SCREEN = (char*)0x0400; #pragma code_seg(Code) void main(void) { SCREEN[0] = plus('0', 7); // close call + SCREEN[1] = plus('1', 6); // close call } #pragma code_seg(RAM_Bank1) #pragma bank(cx16_ram, 1) char plus(char a, char b) { - return min(a, b); // near call + return add(a, b); // near call } #pragma code_seg(Code) #pragma nobank -char min(char a, char b) { +char add(char a, char b) { return a+b; } diff --git a/src/test/kc/call-banked-phi-case-4-near-0.c b/src/test/kc/call-banked-phi-case-4-near-0.c index 2bf1f4c8a..5c7ffc1f0 100644 --- a/src/test/kc/call-banked-phi-case-4-near-0.c +++ b/src/test/kc/call-banked-phi-case-4-near-0.c @@ -28,20 +28,20 @@ #pragma link("call-banked-phi.ld") - char* const SCREEN = (char*)0x0400; #pragma code_seg(Code) void main(void) { SCREEN[0] = plus('0', 7); // close call + SCREEN[1] = plus('1', 6); // close call } #pragma code_seg(RAM_Bank1) char __bank(cx16_ram, 1) plus(char a, char b) { - return min(a, b); // near call + return add(a, b); // near call } #pragma code_seg(RAM_Bank1) -char __bank(cx16_ram, 1) min(char a, char b) { +char __bank(cx16_ram, 1) add(char a, char b) { return a+b; } diff --git a/src/test/kc/call-banked-phi-case-4-near-1.c b/src/test/kc/call-banked-phi-case-4-near-1.c index 369c1d675..319ac2483 100644 --- a/src/test/kc/call-banked-phi-case-4-near-1.c +++ b/src/test/kc/call-banked-phi-case-4-near-1.c @@ -33,19 +33,17 @@ char* const SCREEN = (char*)0x0400; #pragma code_seg(Code) void main(void) { SCREEN[0] = plus('0', 7); // close call + SCREEN[1] = plus('1', 6); // close call } #pragma code_seg(RAM_Bank1) #pragma bank(cx16_ram, 1) char plus(char a, char b) { - return min(a, b); // near call + return add(a, b); // near call } #pragma code_seg(RAM_Bank1) #pragma bank(cx16_ram, 1) -char min(char a, char b) { +char add(char a, char b) { return a+b; } - -#pragma code_seg(Code) -#pragma nobank diff --git a/src/test/kc/call-banked-phi-case-5-far-0.c b/src/test/kc/call-banked-phi-case-5-far-0.c index 7ae33a034..dceba3f63 100644 --- a/src/test/kc/call-banked-phi-case-5-far-0.c +++ b/src/test/kc/call-banked-phi-case-5-far-0.c @@ -33,14 +33,15 @@ char* const SCREEN = (char*)0x0400; #pragma code_seg(Code) void main(void) { SCREEN[0] = plus('0', 7); // close call + SCREEN[1] = plus('1', 6); // close call } #pragma code_seg(RAM_Bank1) __bank(cx16_ram, 1) char plus(char a, char b) { - return min(a, b); // far call + return add(a, b); // far call } #pragma code_seg(RAM_Bank2) -__bank(cx16_ram, 2) char min(char a, char b) { +__bank(cx16_ram, 2) char add(char a, char b) { return a+b; } diff --git a/src/test/kc/call-banked-phi-case-5-far-1.c b/src/test/kc/call-banked-phi-case-5-far-1.c index 3c1e3fbc9..754dd1402 100644 --- a/src/test/kc/call-banked-phi-case-5-far-1.c +++ b/src/test/kc/call-banked-phi-case-5-far-1.c @@ -33,19 +33,17 @@ char* const SCREEN = (char*)0x0400; #pragma code_seg(Code) void main(void) { SCREEN[0] = plus('0', 7); // close call + SCREEN[1] = plus('1', 6); // close call } #pragma code_seg(RAM_Bank1) #pragma bank(cx16_ram, 1) char plus(char a, char b) { - return min(a, b); // far call + return add(a, b); // far call } #pragma code_seg(RAM_Bank2) #pragma bank(cx16_ram, 2) -char min(char a, char b) { +char add(char a, char b) { return a+b; } - -#pragma code_seg(RAM_Bank2) -#pragma nobank diff --git a/src/test/kc/call-banked-phi-case-6-close-0.c b/src/test/kc/call-banked-phi-case-6-close-0.c index db2dc5973..8fada9193 100644 --- a/src/test/kc/call-banked-phi-case-6-close-0.c +++ b/src/test/kc/call-banked-phi-case-6-close-0.c @@ -33,14 +33,15 @@ char* const SCREEN = (char*)0x0400; #pragma code_seg(Code) void main(void) { SCREEN[0] = plus('0', 7); // close call + SCREEN[1] = plus('1', 6); // close call } #pragma code_seg(RAM_Bank1) __bank(cx16_ram, 1) char plus(char a, char b) { - return min(a, b); // close call + return add(a, b); // close call } #pragma code_seg(ROM_Bank1) -__bank(cx16_rom, 1) char min(char a, char b) { +__bank(cx16_rom, 1) char add(char a, char b) { return a+b; } diff --git a/src/test/kc/call-banked-phi-case-6-close-1.c b/src/test/kc/call-banked-phi-case-6-close-1.c index 484ad2c06..5f8141443 100644 --- a/src/test/kc/call-banked-phi-case-6-close-1.c +++ b/src/test/kc/call-banked-phi-case-6-close-1.c @@ -33,19 +33,17 @@ char* const SCREEN = (char*)0x0400; #pragma code_seg(Code) void main(void) { SCREEN[0] = plus('0', 7); // close call + SCREEN[1] = plus('1', 6); // close call } #pragma code_seg(RAM_Bank1) #pragma bank(cx16_ram, 1) char plus(char a, char b) { - return min(a, b); // close call + return add(a, b); // close call } #pragma code_seg(ROM_Bank1) #pragma bank(cx16_rom, 1) -char min(char a, char b) { +char add(char a, char b) { return a+b; } - -#pragma code_seg(Code) -#pragma nobank diff --git a/src/test/kc/examples/cx16/banking/cx16-banking-recursive-near.c b/src/test/kc/examples/cx16/banking/cx16-banking-recursive-near.c deleted file mode 100644 index e1987ae9d..000000000 --- a/src/test/kc/examples/cx16/banking/cx16-banking-recursive-near.c +++ /dev/null @@ -1,38 +0,0 @@ -/** - * @file cx16-banking-1.c - * @author your name (you@domain.com) - * @brief This program demonstrates a simple example of a banked call. - * @version 0.1 - * @date 2023-04-05 - * - * @copyright Copyright (c) 2023 - * - */ - -// The linker specification of the different segments. -#pragma var_model(mem) - -#include -#include -#include -#include - -// The target computer platform is the Commander X16, -// which implements banking in ram between 0xA0000 and 0xBFFF, -// and in ram between 0xC000 and 0xFFFF. -#pragma target(cx16) - -char __stackcall plus(char a, char b) { - if (a > 0) { - return a + plus(a - b, b); - } else { - return 0; - } -} - -void main(void) { - - char result = plus(4, 1); - printf("result = %u\n", result); -} - diff --git a/src/test/kc/examples/cx16/banking/cx16-banking.c b/src/test/kc/examples/cx16/banking/cx16-banking.c index a9726c229..8648d45d1 100644 --- a/src/test/kc/examples/cx16/banking/cx16-banking.c +++ b/src/test/kc/examples/cx16/banking/cx16-banking.c @@ -10,6 +10,7 @@ */ // The linker specification of the different segments. +#pragma target(cx16) #pragma link("cx16-banking.ld") #pragma var_model(mem) diff --git a/src/test/ref/call-banked-phi-case-1-near-0.asm b/src/test/ref/call-banked-phi-case-1-near-0.asm index 0b157633e..9c88aba31 100644 --- a/src/test/ref/call-banked-phi-case-1-near-0.asm +++ b/src/test/ref/call-banked-phi-case-1-near-0.asm @@ -42,17 +42,29 @@ .segment Code main: { // plus('0', 7) + lda #7 + ldx #'0' jsr plus + // plus('0', 7) // SCREEN[0] = plus('0', 7) - lda #plus.return sta SCREEN + // plus('1', 6) + lda #6 + ldx #'1' + jsr plus + // plus('1', 6) + // SCREEN[1] = plus('1', 6) + // near call + sta SCREEN+1 // } rts } -// char plus(char a, char b) +// __register(A) char plus(__register(X) char a, __register(A) char b) plus: { - .const a = '0' - .const b = 7 - .label return = a+b + // a+b + stx.z $ff + clc + adc.z $ff + // } rts } diff --git a/src/test/ref/call-banked-phi-case-1-near-0.cfg b/src/test/ref/call-banked-phi-case-1-near-0.cfg index bfaa7082a..936abd391 100644 --- a/src/test/ref/call-banked-phi-case-1-near-0.cfg +++ b/src/test/ref/call-banked-phi-case-1-near-0.cfg @@ -3,18 +3,28 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = plus::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] plus::return#2 = plus::a#2 + plus::b#2 to:plus::@return plus::@return: scope:[plus] from plus - [5] return + [12] return to:@return diff --git a/src/test/ref/call-banked-phi-case-1-near-0.log b/src/test/ref/call-banked-phi-case-1-near-0.log index 6cc252f0c..2ffa84883 100644 --- a/src/test/ref/call-banked-phi-case-1-near-0.log +++ b/src/test/ref/call-banked-phi-case-1-near-0.log @@ -7,27 +7,36 @@ main: scope:[main] from __start plus::a#0 = '0' plus::b#0 = 7 call plus - plus::return#0 = plus::return#2 + plus::return#0 = plus::return#3 to:main::@1 main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 + plus::return#4 = phi( main/plus::return#0 ) + main::$0 = plus::return#4 SCREEN[0] = main::$0 + plus::a#1 = '1' + plus::b#1 = 6 + call plus + plus::return#1 = plus::return#3 + to:main::@2 +main::@2: scope:[main] from main::@1 + plus::return#5 = phi( main::@1/plus::return#1 ) + main::$1 = plus::return#5 + SCREEN[1] = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 +main::@return: scope:[main] from main::@2 return to:@return char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - plus::$0 = plus::a#1 + plus::b#1 - plus::return#1 = plus::$0 +plus: scope:[plus] from main main::@1 + plus::b#2 = phi( main/plus::b#0, main::@1/plus::b#1 ) + plus::a#2 = phi( main/plus::a#0, main::@1/plus::a#1 ) + plus::$0 = plus::a#2 + plus::b#2 + plus::return#2 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus - plus::return#4 = phi( plus/plus::return#1 ) - plus::return#2 = plus::return#4 + plus::return#6 = phi( plus/plus::return#2 ) + plus::return#3 = plus::return#6 return to:@return @@ -46,41 +55,53 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 +char main::$1 char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 char plus::a#1 +char plus::a#2 char plus::b char plus::b#0 char plus::b#1 +char plus::b#2 char plus::return char plus::return#0 char plus::return#1 char plus::return#2 char plus::return#3 char plus::return#4 +char plus::return#5 +char plus::return#6 Adding number conversion cast (unumber) 7 in plus::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Adding number conversion cast (unumber) 6 in plus::b#1 = 6 +Adding number conversion cast (unumber) 1 in SCREEN[1] = main::$1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast plus::b#0 = (unumber)7 +Inlining cast plus::b#1 = (unumber)6 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (char *) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 0 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Alias plus::return#0 = plus::return#4 +Alias plus::return#1 = plus::return#5 +Alias plus::return#2 = plus::$0 plus::return#6 plus::return#3 Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Successful SSA optimization Pass2IdenticalPhiElimination Constant plus::a#0 = '0' Constant plus::b#0 = 7 +Constant plus::a#1 = '1' +Constant plus::b#1 = 6 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero @@ -89,27 +110,24 @@ Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [5] plus::return#1 = plus::a#0 + plus::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant plus::return#1 = plus::a#0+plus::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings plus::return#0 -Constant inlined plus::return#0 = plus::return#1 -Constant inlined main::$0 = plus::return#1 +Inlining constant with var siblings plus::a#0 +Inlining constant with var siblings plus::b#0 +Inlining constant with var siblings plus::a#1 +Inlining constant with var siblings plus::b#1 +Constant inlined plus::b#1 = 6 +Constant inlined plus::b#0 = 7 +Constant inlined plus::a#1 = '1' +Constant inlined plus::a#0 = '0' Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN+1) +Successful SSA optimization Pass2ConstantAdditionElimination Adding NOP phi() at start of main -Adding NOP phi() at start of plus CALL GRAPH -Calls in [main] to plus:1 +Calls in [main] to plus:1 plus:5 -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes +Created 2 initial phi equivalence classes +Coalesced down to 2 phi equivalence classes Adding NOP phi() at start of main -Adding NOP phi() at start of plus FINAL CONTROL FLOW GRAPH @@ -117,43 +135,91 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = plus::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] plus::return#2 = plus::a#2 + plus::b#2 to:plus::@return plus::@return: scope:[plus] from plus - [5] return + [12] return to:@return VARIABLE REGISTER WEIGHTS void main() +char main::$0 // 4.0 +char main::$1 // 4.0 char plus(char a , char b) char plus::a +char plus::a#2 // 11.0 char plus::b +char plus::b#2 // 11.0 char plus::return +char plus::return#0 // 4.0 +char plus::return#1 // 4.0 +char plus::return#2 // 3.75 Initial phi equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable plus::return#1 to live range equivalence class [ plus::return#1 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable plus::return#2 to live range equivalence class [ plus::return#2 ] Complete equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +[ plus::return#0 ] +[ main::$0 ] +[ plus::return#1 ] +[ main::$1 ] +[ plus::return#2 ] +Allocated zp[1]:2 [ plus::a#2 ] +Allocated zp[1]:3 [ plus::b#2 ] +Allocated zp[1]:4 [ plus::return#0 ] +Allocated zp[1]:5 [ main::$0 ] +Allocated zp[1]:6 [ plus::return#1 ] +Allocated zp[1]:7 [ main::$1 ] +Allocated zp[1]:8 [ plus::return#2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [11] plus::return#2 = plus::a#2 + plus::b#2 [ plus::return#2 ] ( plus:1 [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } plus:5 [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Potential registers zp[1]:2 [ plus::a#2 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ plus::b#2 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:4 [ plus::return#0 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ main::$0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:6 [ plus::return#1 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ main::$1 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ plus::return#2 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] -Uplift Scope [plus] +Uplift Scope [plus] 11: zp[1]:2 [ plus::a#2 ] 11: zp[1]:3 [ plus::b#2 ] 4: zp[1]:4 [ plus::return#0 ] 4: zp[1]:6 [ plus::return#1 ] 3.75: zp[1]:8 [ plus::return#2 ] +Uplift Scope [main] 4: zp[1]:5 [ main::$0 ] 4: zp[1]:7 [ main::$1 ] Uplift Scope [] -Uplifting [main] best 60 combination -Uplifting [plus] best 60 combination -Uplifting [] best 60 combination +Uplifting [plus] best 81 combination reg byte x [ plus::a#2 ] reg byte a [ plus::b#2 ] reg byte a [ plus::return#0 ] reg byte a [ plus::return#1 ] zp[1]:8 [ plus::return#2 ] +Limited combination testing to 100 combinations of 1024 possible. +Uplifting [main] best 69 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] +Uplifting [] best 69 combination +Attempting to uplift remaining variables inzp[1]:8 [ plus::return#2 ] +Uplifting [plus] best 60 combination reg byte a [ plus::return#2 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -204,42 +270,67 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] + // [10] phi from main to plus [phi:main->plus] plus_from_main: + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuaa=vbuc1 + lda #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- vbuxx=vbuc1 + ldx #'0' jsr plus + // [2] plus::return#0 = plus::return#2 jmp __b1 // main::@1 __b1: - // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 - lda #plus.return + // [3] main::$0 = plus::return#0 + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + plus_from___b1: + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuaa=vbuc1 + lda #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- vbuxx=vbuc1 + ldx #'1' + jsr plus + // [6] plus::return#1 = plus::return#2 + jmp __b2 + // main::@2 + __b2: + // [7] main::$1 = plus::return#1 + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // near call + sta SCREEN+1 jmp __breturn // main::@return __breturn: - // [3] return + // [9] return rts } // plus -// char plus(char a, char b) +// __register(A) char plus(__register(X) char a, __register(A) char b) plus: { - .const a = '0' - .const b = 7 - .label return = a+b + // [11] plus::return#2 = plus::a#2 + plus::b#2 -- vbuaa=vbuxx_plus_vbuaa + stx.z $ff + clc + adc.z $ff jmp __breturn // plus::@return __breturn: - // [5] return + // [12] return rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 +Removing instruction jmp __b2 Removing instruction jmp __breturn Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction plus_from_main: Removing instruction __b1: +Removing instruction plus_from___b1: +Removing instruction __b2: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination @@ -247,18 +338,29 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte x 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte a 11.0 char plus::return -__constant char plus::return#1 = plus::a#0+plus::b#0 // return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte a 3.75 +reg byte x [ plus::a#2 ] +reg byte a [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +reg byte a [ plus::return#2 ] FINAL ASSEMBLER -Score: 24 +Score: 48 // File Comments /** @@ -309,26 +411,51 @@ Score: 24 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] + // [10] phi from main to plus [phi:main->plus] + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuaa=vbuc1 + lda #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- vbuxx=vbuc1 + ldx #'0' jsr plus + // plus('0', 7) + // [2] plus::return#0 = plus::return#2 // main::@1 + // [3] main::$0 = plus::return#0 // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 - lda #plus.return + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // plus('1', 6) + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuaa=vbuc1 + lda #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- vbuxx=vbuc1 + ldx #'1' + jsr plus + // plus('1', 6) + // [6] plus::return#1 = plus::return#2 + // main::@2 + // [7] main::$1 = plus::return#1 + // SCREEN[1] = plus('1', 6) + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // near call + sta SCREEN+1 // main::@return // } - // [3] return + // [9] return rts } // plus -// char plus(char a, char b) +// __register(A) char plus(__register(X) char a, __register(A) char b) plus: { - .const a = '0' - .const b = 7 - .label return = a+b + // a+b + // [11] plus::return#2 = plus::a#2 + plus::b#2 -- vbuaa=vbuxx_plus_vbuaa + stx.z $ff + clc + adc.z $ff // plus::@return - // [5] return + // } + // [12] return rts } // File Data diff --git a/src/test/ref/call-banked-phi-case-1-near-0.sym b/src/test/ref/call-banked-phi-case-1-near-0.sym index 70d3c4d1f..aad9eb173 100644 --- a/src/test/ref/call-banked-phi-case-1-near-0.sym +++ b/src/test/ref/call-banked-phi-case-1-near-0.sym @@ -1,10 +1,21 @@ __constant char * const SCREEN = (char *) 1024 void main() +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte x 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte a 11.0 char plus::return -__constant char plus::return#1 = plus::a#0+plus::b#0 // return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte a 3.75 +reg byte x [ plus::a#2 ] +reg byte a [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +reg byte a [ plus::return#2 ] diff --git a/src/test/ref/call-banked-phi-case-1-near-1.asm b/src/test/ref/call-banked-phi-case-1-near-1.asm index 3f285d651..c5395e6ac 100644 --- a/src/test/ref/call-banked-phi-case-1-near-1.asm +++ b/src/test/ref/call-banked-phi-case-1-near-1.asm @@ -42,24 +42,37 @@ .segment Code main: { // plus('0', 7) + lda #7 + ldx #'0' jsr plus + // plus('0', 7) // SCREEN[0] = plus('0', 7) - lda #min.return sta SCREEN + // plus('1', 6) + lda #6 + ldx #'1' + jsr plus + // plus('1', 6) + // SCREEN[1] = plus('1', 6) + // near call + sta SCREEN+1 // } rts } -// char plus(char a, char b) +// __register(A) char plus(__register(X) char a, __register(A) char b) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - jsr min + // add(a, b) + stx.z add.a + jsr add // } rts } -// char min(char a, char b) -min: { - .label return = plus.a+plus.b +// __register(A) char add(__zp(2) char a, __register(A) char b) +add: { + .label a = 2 + // a+b + clc + adc.z a + // } rts } diff --git a/src/test/ref/call-banked-phi-case-1-near-1.cfg b/src/test/ref/call-banked-phi-case-1-near-1.cfg index 0ae888575..bd8833228 100644 --- a/src/test/ref/call-banked-phi-case-1-near-1.cfg +++ b/src/test/ref/call-banked-phi-case-1-near-1.cfg @@ -3,27 +3,42 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return diff --git a/src/test/ref/call-banked-phi-case-1-near-1.log b/src/test/ref/call-banked-phi-case-1-near-1.log index 6d479c599..916bd8ab3 100644 --- a/src/test/ref/call-banked-phi-case-1-near-1.log +++ b/src/test/ref/call-banked-phi-case-1-near-1.log @@ -7,47 +7,56 @@ main: scope:[main] from __start plus::a#0 = '0' plus::b#0 = 7 call plus - plus::return#0 = plus::return#2 + plus::return#0 = plus::return#3 to:main::@1 main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 + plus::return#4 = phi( main/plus::return#0 ) + main::$0 = plus::return#4 SCREEN[0] = main::$0 + plus::a#1 = '1' + plus::b#1 = 6 + call plus + plus::return#1 = plus::return#3 + to:main::@2 +main::@2: scope:[main] from main::@1 + plus::return#5 = phi( main::@1/plus::return#1 ) + main::$1 = plus::return#5 + SCREEN[1] = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 +main::@return: scope:[main] from main::@2 return to:@return char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - min::a#0 = plus::a#1 - min::b#0 = plus::b#1 - call min - min::return#0 = min::return#2 +plus: scope:[plus] from main main::@1 + plus::b#2 = phi( main/plus::b#0, main::@1/plus::b#1 ) + plus::a#2 = phi( main/plus::a#0, main::@1/plus::a#1 ) + add::a#0 = plus::a#2 + add::b#0 = plus::b#2 + call add + add::return#0 = add::return#2 to:plus::@1 plus::@1: scope:[plus] from plus - min::return#3 = phi( plus/min::return#0 ) - plus::$0 = min::return#3 - plus::return#1 = plus::$0 + add::return#3 = phi( plus/add::return#0 ) + plus::$0 = add::return#3 + plus::return#2 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus::@1 - plus::return#4 = phi( plus::@1/plus::return#1 ) - plus::return#2 = plus::return#4 + plus::return#6 = phi( plus::@1/plus::return#2 ) + plus::return#3 = plus::return#6 return to:@return -char min(char a , char b) -min: scope:[min] from plus - min::b#1 = phi( plus/min::b#0 ) - min::a#1 = phi( plus/min::a#0 ) - min::$0 = min::a#1 + min::b#1 - min::return#1 = min::$0 - to:min::@return -min::@return: scope:[min] from min - min::return#4 = phi( min/min::return#1 ) - min::return#2 = min::return#4 +char add(char a , char b) +add: scope:[add] from plus + add::b#1 = phi( plus/add::b#0 ) + add::a#1 = phi( plus/add::a#0 ) + add::$0 = add::a#1 + add::b#1 + add::return#1 = add::$0 + to:add::@return +add::@return: scope:[add] from add + add::return#4 = phi( add/add::return#1 ) + add::return#2 = add::return#4 return to:@return @@ -64,64 +73,74 @@ __start::@return: scope:[__start] from __start::@1 SYMBOL TABLE SSA __constant char * const SCREEN = (char *)$400 void __start() +char add(char a , char b) +char add::$0 +char add::a +char add::a#0 +char add::a#1 +char add::b +char add::b#0 +char add::b#1 +char add::return +char add::return#0 +char add::return#1 +char add::return#2 +char add::return#3 +char add::return#4 void main() char main::$0 -char min(char a , char b) -char min::$0 -char min::a -char min::a#0 -char min::a#1 -char min::b -char min::b#0 -char min::b#1 -char min::return -char min::return#0 -char min::return#1 -char min::return#2 -char min::return#3 -char min::return#4 +char main::$1 char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 char plus::a#1 +char plus::a#2 char plus::b char plus::b#0 char plus::b#1 +char plus::b#2 char plus::return char plus::return#0 char plus::return#1 char plus::return#2 char plus::return#3 char plus::return#4 +char plus::return#5 +char plus::return#6 Adding number conversion cast (unumber) 7 in plus::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Adding number conversion cast (unumber) 6 in plus::b#1 = 6 +Adding number conversion cast (unumber) 1 in SCREEN[1] = main::$1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast plus::b#0 = (unumber)7 +Inlining cast plus::b#1 = (unumber)6 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (char *) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 0 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 -Alias min::return#0 = min::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 -Alias min::return#1 = min::$0 min::return#4 min::return#2 +Alias plus::return#0 = plus::return#4 +Alias plus::return#1 = plus::return#5 +Alias add::return#0 = add::return#3 +Alias plus::return#2 = plus::$0 plus::return#6 plus::return#3 +Alias add::return#1 = add::$0 add::return#4 add::return#2 Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Identical Phi Values min::a#1 min::a#0 -Identical Phi Values min::b#1 min::b#0 +Identical Phi Values add::a#1 add::a#0 +Identical Phi Values add::b#1 add::b#0 Successful SSA optimization Pass2IdenticalPhiElimination Constant plus::a#0 = '0' Constant plus::b#0 = 7 -Successful SSA optimization Pass2ConstantIdentification -Constant min::a#0 = plus::a#0 -Constant min::b#0 = plus::b#0 +Constant plus::a#1 = '1' +Constant plus::b#1 = 6 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero @@ -130,40 +149,25 @@ Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant min::return#1 = min::a#0+min::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant min::return#0 = min::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#1 = min::return#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings min::return#0 -Constant inlined plus::return#0 = min::return#1 -Constant inlined main::$0 = min::return#1 -Constant inlined plus::return#1 = min::return#1 -Constant inlined min::a#0 = plus::a#0 -Constant inlined min::return#0 = min::return#1 -Constant inlined min::b#0 = plus::b#0 +Inlining constant with var siblings plus::a#0 +Inlining constant with var siblings plus::b#0 +Inlining constant with var siblings plus::a#1 +Inlining constant with var siblings plus::b#1 +Constant inlined plus::b#1 = 6 +Constant inlined plus::b#0 = 7 +Constant inlined plus::a#1 = '1' +Constant inlined plus::a#0 = '0' Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN+1) +Successful SSA optimization Pass2ConstantAdditionElimination Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of plus::@1 -Adding NOP phi() at start of min CALL GRAPH -Calls in [main] to plus:1 -Calls in [plus] to min:5 +Calls in [main] to plus:1 plus:5 +Calls in [plus] to add:13 -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes -Culled Empty Block label plus::@1 +Created 2 initial phi equivalence classes +Coalesced down to 2 phi equivalence classes Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of min FINAL CONTROL FLOW GRAPH @@ -171,58 +175,135 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return VARIABLE REGISTER WEIGHTS +char add(char a , char b) +char add::a +char add::a#0 // 56.0 +char add::b +char add::b#0 // 112.0 +char add::return +char add::return#0 // 22.0 +char add::return#1 // 37.33333333333333 void main() -char min(char a , char b) -char min::a -char min::b -char min::return +char main::$0 // 4.0 +char main::$1 // 4.0 char plus(char a , char b) char plus::a +char plus::a#2 // 11.0 char plus::b +char plus::b#2 // 5.5 char plus::return +char plus::return#0 // 4.0 +char plus::return#1 // 4.0 +char plus::return#2 // 3.75 Initial phi equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable plus::return#1 to live range equivalence class [ plus::return#1 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable add::a#0 to live range equivalence class [ add::a#0 ] +Added variable add::b#0 to live range equivalence class [ add::b#0 ] +Added variable add::return#0 to live range equivalence class [ add::return#0 ] +Added variable plus::return#2 to live range equivalence class [ plus::return#2 ] +Added variable add::return#1 to live range equivalence class [ add::return#1 ] Complete equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +[ plus::return#0 ] +[ main::$0 ] +[ plus::return#1 ] +[ main::$1 ] +[ add::a#0 ] +[ add::b#0 ] +[ add::return#0 ] +[ plus::return#2 ] +[ add::return#1 ] +Allocated zp[1]:2 [ add::b#0 ] +Allocated zp[1]:3 [ add::a#0 ] +Allocated zp[1]:4 [ add::return#1 ] +Allocated zp[1]:5 [ add::return#0 ] +Allocated zp[1]:6 [ plus::a#2 ] +Allocated zp[1]:7 [ plus::b#2 ] +Allocated zp[1]:8 [ plus::return#0 ] +Allocated zp[1]:9 [ main::$0 ] +Allocated zp[1]:10 [ plus::return#1 ] +Allocated zp[1]:11 [ main::$1 ] +Allocated zp[1]:12 [ plus::return#2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Potential registers zp[1]:6 [ plus::a#2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ plus::b#2 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ plus::return#0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ main::$0 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:10 [ plus::return#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:11 [ main::$1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ add::a#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ add::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ add::return#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:12 [ plus::return#2 ] : zp[1]:12 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:4 [ add::return#1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] -Uplift Scope [plus] -Uplift Scope [min] +Uplift Scope [add] 112: zp[1]:2 [ add::b#0 ] 56: zp[1]:3 [ add::a#0 ] 37.33: zp[1]:4 [ add::return#1 ] 22: zp[1]:5 [ add::return#0 ] +Uplift Scope [plus] 11: zp[1]:6 [ plus::a#2 ] 5.5: zp[1]:7 [ plus::b#2 ] 4: zp[1]:8 [ plus::return#0 ] 4: zp[1]:10 [ plus::return#1 ] 3.75: zp[1]:12 [ plus::return#2 ] +Uplift Scope [main] 4: zp[1]:9 [ main::$0 ] 4: zp[1]:11 [ main::$1 ] Uplift Scope [] -Uplifting [main] best 75 combination -Uplifting [plus] best 75 combination -Uplifting [min] best 75 combination -Uplifting [] best 75 combination +Uplifting [add] best 129 combination reg byte a [ add::b#0 ] zp[1]:3 [ add::a#0 ] reg byte a [ add::return#1 ] reg byte a [ add::return#0 ] +Limited combination testing to 100 combinations of 256 possible. +Uplifting [plus] best 99 combination reg byte x [ plus::a#2 ] reg byte a [ plus::b#2 ] reg byte a [ plus::return#0 ] reg byte a [ plus::return#1 ] zp[1]:12 [ plus::return#2 ] +Limited combination testing to 100 combinations of 1024 possible. +Uplifting [main] best 87 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] +Uplifting [] best 87 combination +Attempting to uplift remaining variables inzp[1]:3 [ add::a#0 ] +Uplifting [add] best 87 combination zp[1]:3 [ add::a#0 ] +Attempting to uplift remaining variables inzp[1]:12 [ plus::return#2 ] +Uplifting [plus] best 78 combination reg byte a [ plus::return#2 ] +Allocated (was zp[1]:3) zp[1]:2 [ add::a#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -273,81 +354,133 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] + // [10] phi from main to plus [phi:main->plus] plus_from_main: + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuaa=vbuc1 + lda #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- vbuxx=vbuc1 + ldx #'0' jsr plus + // [2] plus::return#0 = plus::return#2 jmp __b1 // main::@1 __b1: - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [3] main::$0 = plus::return#0 + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + plus_from___b1: + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuaa=vbuc1 + lda #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- vbuxx=vbuc1 + ldx #'1' + jsr plus + // [6] plus::return#1 = plus::return#2 + jmp __b2 + // main::@2 + __b2: + // [7] main::$1 = plus::return#1 + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // near call + sta SCREEN+1 jmp __breturn // main::@return __breturn: - // [3] return + // [9] return rts } // plus -// char plus(char a, char b) +// __register(A) char plus(__register(X) char a, __register(A) char b) plus: { - .label a = '0' - .label b = 7 - // [5] call min - // [7] phi from plus to min [phi:plus->min] - min_from_plus: - jsr min + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuxx + stx.z add.a + // [12] add::b#0 = plus::b#2 + // [13] call add + jsr add + // [14] add::return#0 = add::return#1 + jmp __b1 + // plus::@1 + __b1: + // [15] plus::return#2 = add::return#0 jmp __breturn // plus::@return __breturn: - // [6] return + // [16] return rts } - // min -// char min(char a, char b) -min: { - .label return = plus.a+plus.b + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) +add: { + .label a = 2 + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a jmp __breturn - // min::@return + // add::@return __breturn: - // [8] return + // [18] return rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 +Removing instruction jmp __b2 Removing instruction jmp __breturn +Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __breturn: +Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction plus_from_main: Removing instruction __b1: +Removing instruction plus_from___b1: +Removing instruction __b2: Removing instruction __breturn: -Removing instruction min_from_plus: -Removing instruction __breturn: +Removing instruction __b1: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 +char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte x 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte a 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte a 3.75 +reg byte x [ plus::a#2 ] +reg byte a [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte a [ plus::return#2 ] +reg byte a [ add::return#1 ] FINAL ASSEMBLER -Score: 36 +Score: 60 // File Comments /** @@ -398,38 +531,68 @@ Score: 36 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] + // [10] phi from main to plus [phi:main->plus] + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuaa=vbuc1 + lda #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- vbuxx=vbuc1 + ldx #'0' jsr plus + // plus('0', 7) + // [2] plus::return#0 = plus::return#2 // main::@1 + // [3] main::$0 = plus::return#0 // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // plus('1', 6) + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuaa=vbuc1 + lda #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- vbuxx=vbuc1 + ldx #'1' + jsr plus + // plus('1', 6) + // [6] plus::return#1 = plus::return#2 + // main::@2 + // [7] main::$1 = plus::return#1 + // SCREEN[1] = plus('1', 6) + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // near call + sta SCREEN+1 // main::@return // } - // [3] return + // [9] return rts } // plus -// char plus(char a, char b) +// __register(A) char plus(__register(X) char a, __register(A) char b) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - // [5] call min - // [7] phi from plus to min [phi:plus->min] - jsr min + // add(a, b) + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuxx + stx.z add.a + // [12] add::b#0 = plus::b#2 + // [13] call add + jsr add + // [14] add::return#0 = add::return#1 + // plus::@1 + // [15] plus::return#2 = add::return#0 // plus::@return // } - // [6] return + // [16] return rts } - // min -// char min(char a, char b) -min: { - .label return = plus.a+plus.b - // min::@return - // [8] return + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) +add: { + .label a = 2 + // a+b + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + // add::@return + // } + // [18] return rts } // File Data diff --git a/src/test/ref/call-banked-phi-case-1-near-1.sym b/src/test/ref/call-banked-phi-case-1-near-1.sym index 168bcee58..bfa554ac0 100644 --- a/src/test/ref/call-banked-phi-case-1-near-1.sym +++ b/src/test/ref/call-banked-phi-case-1-near-1.sym @@ -1,14 +1,33 @@ __constant char * const SCREEN = (char *) 1024 +char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte x 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte a 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte a 3.75 +reg byte x [ plus::a#2 ] +reg byte a [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte a [ plus::return#2 ] +reg byte a [ add::return#1 ] diff --git a/src/test/ref/call-banked-phi-case-2-close-0.asm b/src/test/ref/call-banked-phi-case-2-close-0.asm index 992a24726..efdf5fdb6 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.asm +++ b/src/test/ref/call-banked-phi-case-2-close-0.asm @@ -43,25 +43,54 @@ .segment Code main: { // plus('0', 7) + ldx #7 + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + txa // SCREEN[0] = plus('0', 7) - lda #plus.return sta SCREEN + // plus('1', 6) + ldx #6 + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + txa + // SCREEN[1] = plus('1', 6) + // close call + sta SCREEN+1 // } rts } .segment RAM_Bank1 -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .const a = '0' - .const b = 7 - .label return = a+b + // a+b + stx.z $ff + clc + adc.z $ff + tax + // } rts } diff --git a/src/test/ref/call-banked-phi-case-2-close-0.cfg b/src/test/ref/call-banked-phi-case-2-close-0.cfg index 47114a8a3..b5f3a4af5 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.cfg +++ b/src/test/ref/call-banked-phi-case-2-close-0.cfg @@ -3,18 +3,28 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = plus::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] plus::return#2 = plus::a#2 + plus::b#2 to:plus::@return plus::@return: scope:[plus] from plus - [5] return + [12] return to:@return diff --git a/src/test/ref/call-banked-phi-case-2-close-0.log b/src/test/ref/call-banked-phi-case-2-close-0.log index 2fb184a72..96e2fadd5 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.log +++ b/src/test/ref/call-banked-phi-case-2-close-0.log @@ -7,27 +7,36 @@ main: scope:[main] from __start plus::a#0 = '0' plus::b#0 = 7 call plus - plus::return#0 = plus::return#2 + plus::return#0 = plus::return#3 to:main::@1 main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 + plus::return#4 = phi( main/plus::return#0 ) + main::$0 = plus::return#4 SCREEN[0] = main::$0 + plus::a#1 = '1' + plus::b#1 = 6 + call plus + plus::return#1 = plus::return#3 + to:main::@2 +main::@2: scope:[main] from main::@1 + plus::return#5 = phi( main::@1/plus::return#1 ) + main::$1 = plus::return#5 + SCREEN[1] = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 +main::@return: scope:[main] from main::@2 return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - plus::$0 = plus::a#1 + plus::b#1 - plus::return#1 = plus::$0 +plus: scope:[plus] from main main::@1 + plus::b#2 = phi( main/plus::b#0, main::@1/plus::b#1 ) + plus::a#2 = phi( main/plus::a#0, main::@1/plus::a#1 ) + plus::$0 = plus::a#2 + plus::b#2 + plus::return#2 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus - plus::return#4 = phi( plus/plus::return#1 ) - plus::return#2 = plus::return#4 + plus::return#6 = phi( plus/plus::return#2 ) + plus::return#3 = plus::return#6 return to:@return @@ -46,41 +55,53 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 +char main::$1 __bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 char plus::a#1 +char plus::a#2 char plus::b char plus::b#0 char plus::b#1 +char plus::b#2 char plus::return char plus::return#0 char plus::return#1 char plus::return#2 char plus::return#3 char plus::return#4 +char plus::return#5 +char plus::return#6 Adding number conversion cast (unumber) 7 in plus::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Adding number conversion cast (unumber) 6 in plus::b#1 = 6 +Adding number conversion cast (unumber) 1 in SCREEN[1] = main::$1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast plus::b#0 = (unumber)7 +Inlining cast plus::b#1 = (unumber)6 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (char *) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 0 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Alias plus::return#0 = plus::return#4 +Alias plus::return#1 = plus::return#5 +Alias plus::return#2 = plus::$0 plus::return#6 plus::return#3 Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Successful SSA optimization Pass2IdenticalPhiElimination Constant plus::a#0 = '0' Constant plus::b#0 = 7 +Constant plus::a#1 = '1' +Constant plus::b#1 = 6 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero @@ -89,27 +110,24 @@ Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [5] plus::return#1 = plus::a#0 + plus::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant plus::return#1 = plus::a#0+plus::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings plus::return#0 -Constant inlined plus::return#0 = plus::return#1 -Constant inlined main::$0 = plus::return#1 +Inlining constant with var siblings plus::a#0 +Inlining constant with var siblings plus::b#0 +Inlining constant with var siblings plus::a#1 +Inlining constant with var siblings plus::b#1 +Constant inlined plus::b#1 = 6 +Constant inlined plus::b#0 = 7 +Constant inlined plus::a#1 = '1' +Constant inlined plus::a#0 = '0' Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN+1) +Successful SSA optimization Pass2ConstantAdditionElimination Adding NOP phi() at start of main -Adding NOP phi() at start of plus CALL GRAPH -Calls in [main] to plus:1 +Calls in [main] to plus:1 plus:5 -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes +Created 2 initial phi equivalence classes +Coalesced down to 2 phi equivalence classes Adding NOP phi() at start of main -Adding NOP phi() at start of plus FINAL CONTROL FLOW GRAPH @@ -117,44 +135,97 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = plus::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] plus::return#2 = plus::a#2 + plus::b#2 to:plus::@return plus::@return: scope:[plus] from plus - [5] return + [12] return to:@return VARIABLE REGISTER WEIGHTS void main() +char main::$0 // 4.0 +char main::$1 // 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a +char plus::a#2 // 11.0 char plus::b +char plus::b#2 // 11.0 char plus::return +char plus::return#0 // 4.0 +char plus::return#1 // 4.0 +char plus::return#2 // 3.75 Initial phi equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable plus::return#1 to live range equivalence class [ plus::return#1 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable plus::return#2 to live range equivalence class [ plus::return#2 ] Complete equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +[ plus::return#0 ] +[ main::$0 ] +[ plus::return#1 ] +[ main::$1 ] +[ plus::return#2 ] +Allocated zp[1]:2 [ plus::a#2 ] +Allocated zp[1]:3 [ plus::b#2 ] +Allocated zp[1]:4 [ plus::return#0 ] +Allocated zp[1]:5 [ main::$0 ] +Allocated zp[1]:6 [ plus::return#1 ] +Allocated zp[1]:7 [ main::$1 ] +Allocated zp[1]:8 [ plus::return#2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:8 [ plus::return#2 ] +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [11] plus::return#2 = plus::a#2 + plus::b#2 [ plus::return#2 ] ( plus:1 [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } plus:5 [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [11] plus::return#2 = plus::a#2 + plus::b#2 [ plus::return#2 ] ( plus:1 [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } plus:5 [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Potential registers zp[1]:2 [ plus::a#2 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ plus::b#2 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:4 [ plus::return#0 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ main::$0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:6 [ plus::return#1 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ main::$1 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ plus::return#2 ] : zp[1]:8 , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] -Uplift Scope [plus] +Uplift Scope [plus] 11: zp[1]:2 [ plus::a#2 ] 11: zp[1]:3 [ plus::b#2 ] 4: zp[1]:4 [ plus::return#0 ] 4: zp[1]:6 [ plus::return#1 ] 3.75: zp[1]:8 [ plus::return#2 ] +Uplift Scope [main] 4: zp[1]:5 [ main::$0 ] 4: zp[1]:7 [ main::$1 ] Uplift Scope [] -Uplifting [main] best 78 combination -Uplifting [plus] best 78 combination -Uplifting [] best 78 combination +Uplifting [plus] best 141 combination reg byte a [ plus::a#2 ] reg byte x [ plus::b#2 ] reg byte a [ plus::return#0 ] reg byte a [ plus::return#1 ] zp[1]:8 [ plus::return#2 ] +Limited combination testing to 100 combinations of 768 possible. +Uplifting [main] best 129 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] +Uplifting [] best 129 combination +Attempting to uplift remaining variables inzp[1]:8 [ plus::return#2 ] +Uplifting [plus] best 126 combination reg byte x [ plus::return#2 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -206,50 +277,92 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] plus_from_main: + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa jmp __b1 // main::@1 __b1: - // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 - lda #plus.return + // [3] main::$0 = plus::return#0 + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + plus_from___b1: + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + jmp __b2 + // main::@2 + __b2: + // [7] main::$1 = plus::return#1 + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 jmp __breturn // main::@return __breturn: - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .const a = '0' - .const b = 7 - .label return = a+b + // [11] plus::return#2 = plus::a#2 + plus::b#2 -- vbuxx=vbuaa_plus_vbuxx + stx.z $ff + clc + adc.z $ff + tax jmp __breturn // plus::@return __breturn: - // [5] return + // [12] return rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 +Removing instruction jmp __b2 Removing instruction jmp __breturn Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction plus_from_main: Removing instruction __b1: +Removing instruction plus_from___b1: +Removing instruction __b2: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination @@ -257,18 +370,29 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 11.0 char plus::return -__constant char plus::return#1 = plus::a#0+plus::b#0 // return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +reg byte x [ plus::return#2 ] FINAL ASSEMBLER -Score: 42 +Score: 114 // File Comments /** @@ -320,34 +444,76 @@ Score: 42 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa // main::@1 + // [3] main::$0 = plus::return#0 // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 - lda #plus.return + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // plus('1', 6) + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + // main::@2 + // [7] main::$1 = plus::return#1 + // SCREEN[1] = plus('1', 6) + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 // main::@return // } - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .const a = '0' - .const b = 7 - .label return = a+b + // a+b + // [11] plus::return#2 = plus::a#2 + plus::b#2 -- vbuxx=vbuaa_plus_vbuxx + stx.z $ff + clc + adc.z $ff + tax // plus::@return - // [5] return + // } + // [12] return rts } // File Data diff --git a/src/test/ref/call-banked-phi-case-2-close-0.sym b/src/test/ref/call-banked-phi-case-2-close-0.sym index 45d8d7108..00ee4aca5 100644 --- a/src/test/ref/call-banked-phi-case-2-close-0.sym +++ b/src/test/ref/call-banked-phi-case-2-close-0.sym @@ -1,10 +1,21 @@ __constant char * const SCREEN = (char *) 1024 void main() +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 11.0 char plus::return -__constant char plus::return#1 = plus::a#0+plus::b#0 // return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +reg byte x [ plus::return#2 ] diff --git a/src/test/ref/call-banked-phi-case-2-close-1.asm b/src/test/ref/call-banked-phi-case-2-close-1.asm index 937d2243f..5a15ee9a6 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.asm +++ b/src/test/ref/call-banked-phi-case-2-close-1.asm @@ -43,25 +43,54 @@ .segment Code main: { // plus('0', 7) + ldx #7 + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + txa // SCREEN[0] = plus('0', 7) - lda #plus.return sta SCREEN + // plus('1', 6) + ldx #6 + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + txa + // SCREEN[1] = plus('1', 6) + // close call + sta SCREEN+1 // } rts } .segment RAM_Bank1 -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .const a = '0' - .const b = 7 - .label return = a+b + // a+b + stx.z $ff + clc + adc.z $ff + tax + // } rts } diff --git a/src/test/ref/call-banked-phi-case-2-close-1.cfg b/src/test/ref/call-banked-phi-case-2-close-1.cfg index 47114a8a3..b5f3a4af5 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.cfg +++ b/src/test/ref/call-banked-phi-case-2-close-1.cfg @@ -3,18 +3,28 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = plus::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] plus::return#2 = plus::a#2 + plus::b#2 to:plus::@return plus::@return: scope:[plus] from plus - [5] return + [12] return to:@return diff --git a/src/test/ref/call-banked-phi-case-2-close-1.log b/src/test/ref/call-banked-phi-case-2-close-1.log index 3738f423b..9f7544ae5 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.log +++ b/src/test/ref/call-banked-phi-case-2-close-1.log @@ -7,27 +7,36 @@ main: scope:[main] from __start plus::a#0 = '0' plus::b#0 = 7 call plus - plus::return#0 = plus::return#2 + plus::return#0 = plus::return#3 to:main::@1 main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 + plus::return#4 = phi( main/plus::return#0 ) + main::$0 = plus::return#4 SCREEN[0] = main::$0 + plus::a#1 = '1' + plus::b#1 = 6 + call plus + plus::return#1 = plus::return#3 + to:main::@2 +main::@2: scope:[main] from main::@1 + plus::return#5 = phi( main::@1/plus::return#1 ) + main::$1 = plus::return#5 + SCREEN[1] = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 +main::@return: scope:[main] from main::@2 return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - plus::$0 = plus::a#1 + plus::b#1 - plus::return#1 = plus::$0 +plus: scope:[plus] from main main::@1 + plus::b#2 = phi( main/plus::b#0, main::@1/plus::b#1 ) + plus::a#2 = phi( main/plus::a#0, main::@1/plus::a#1 ) + plus::$0 = plus::a#2 + plus::b#2 + plus::return#2 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus - plus::return#4 = phi( plus/plus::return#1 ) - plus::return#2 = plus::return#4 + plus::return#6 = phi( plus/plus::return#2 ) + plus::return#3 = plus::return#6 return to:@return @@ -46,41 +55,53 @@ __constant char * const SCREEN = (char *)$400 void __start() void main() char main::$0 +char main::$1 __bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 char plus::a#1 +char plus::a#2 char plus::b char plus::b#0 char plus::b#1 +char plus::b#2 char plus::return char plus::return#0 char plus::return#1 char plus::return#2 char plus::return#3 char plus::return#4 +char plus::return#5 +char plus::return#6 Adding number conversion cast (unumber) 7 in plus::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Adding number conversion cast (unumber) 6 in plus::b#1 = 6 +Adding number conversion cast (unumber) 1 in SCREEN[1] = main::$1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast plus::b#0 = (unumber)7 +Inlining cast plus::b#1 = (unumber)6 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (char *) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 0 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 +Alias plus::return#0 = plus::return#4 +Alias plus::return#1 = plus::return#5 +Alias plus::return#2 = plus::$0 plus::return#6 plus::return#3 Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Successful SSA optimization Pass2IdenticalPhiElimination Constant plus::a#0 = '0' Constant plus::b#0 = 7 +Constant plus::a#1 = '1' +Constant plus::b#1 = 6 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero @@ -89,27 +110,24 @@ Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [5] plus::return#1 = plus::a#0 + plus::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant plus::return#1 = plus::a#0+plus::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings plus::return#0 -Constant inlined plus::return#0 = plus::return#1 -Constant inlined main::$0 = plus::return#1 +Inlining constant with var siblings plus::a#0 +Inlining constant with var siblings plus::b#0 +Inlining constant with var siblings plus::a#1 +Inlining constant with var siblings plus::b#1 +Constant inlined plus::b#1 = 6 +Constant inlined plus::b#0 = 7 +Constant inlined plus::a#1 = '1' +Constant inlined plus::a#0 = '0' Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN+1) +Successful SSA optimization Pass2ConstantAdditionElimination Adding NOP phi() at start of main -Adding NOP phi() at start of plus CALL GRAPH -Calls in [main] to plus:1 +Calls in [main] to plus:1 plus:5 -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes +Created 2 initial phi equivalence classes +Coalesced down to 2 phi equivalence classes Adding NOP phi() at start of main -Adding NOP phi() at start of plus FINAL CONTROL FLOW GRAPH @@ -117,44 +135,97 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = plus::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] plus::return#2 = plus::a#2 + plus::b#2 to:plus::@return plus::@return: scope:[plus] from plus - [5] return + [12] return to:@return VARIABLE REGISTER WEIGHTS void main() +char main::$0 // 4.0 +char main::$1 // 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a +char plus::a#2 // 11.0 char plus::b +char plus::b#2 // 11.0 char plus::return +char plus::return#0 // 4.0 +char plus::return#1 // 4.0 +char plus::return#2 // 3.75 Initial phi equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable plus::return#1 to live range equivalence class [ plus::return#1 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable plus::return#2 to live range equivalence class [ plus::return#2 ] Complete equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +[ plus::return#0 ] +[ main::$0 ] +[ plus::return#1 ] +[ main::$1 ] +[ plus::return#2 ] +Allocated zp[1]:2 [ plus::a#2 ] +Allocated zp[1]:3 [ plus::b#2 ] +Allocated zp[1]:4 [ plus::return#0 ] +Allocated zp[1]:5 [ main::$0 ] +Allocated zp[1]:6 [ plus::return#1 ] +Allocated zp[1]:7 [ main::$1 ] +Allocated zp[1]:8 [ plus::return#2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] *SCREEN = plus::return#1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:8 [ plus::return#2 ] +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [11] plus::return#2 = plus::a#2 + plus::b#2 [ plus::return#2 ] ( plus:1 [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } plus:5 [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [11] plus::return#2 = plus::a#2 + plus::b#2 [ plus::return#2 ] ( plus:1 [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } plus:5 [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Potential registers zp[1]:2 [ plus::a#2 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ plus::b#2 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:4 [ plus::return#0 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ main::$0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:6 [ plus::return#1 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ main::$1 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ plus::return#2 ] : zp[1]:8 , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] -Uplift Scope [plus] +Uplift Scope [plus] 11: zp[1]:2 [ plus::a#2 ] 11: zp[1]:3 [ plus::b#2 ] 4: zp[1]:4 [ plus::return#0 ] 4: zp[1]:6 [ plus::return#1 ] 3.75: zp[1]:8 [ plus::return#2 ] +Uplift Scope [main] 4: zp[1]:5 [ main::$0 ] 4: zp[1]:7 [ main::$1 ] Uplift Scope [] -Uplifting [main] best 78 combination -Uplifting [plus] best 78 combination -Uplifting [] best 78 combination +Uplifting [plus] best 141 combination reg byte a [ plus::a#2 ] reg byte x [ plus::b#2 ] reg byte a [ plus::return#0 ] reg byte a [ plus::return#1 ] zp[1]:8 [ plus::return#2 ] +Limited combination testing to 100 combinations of 768 possible. +Uplifting [main] best 129 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] +Uplifting [] best 129 combination +Attempting to uplift remaining variables inzp[1]:8 [ plus::return#2 ] +Uplifting [plus] best 126 combination reg byte x [ plus::return#2 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -206,50 +277,92 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] plus_from_main: + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa jmp __b1 // main::@1 __b1: - // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 - lda #plus.return + // [3] main::$0 = plus::return#0 + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + plus_from___b1: + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + jmp __b2 + // main::@2 + __b2: + // [7] main::$1 = plus::return#1 + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 jmp __breturn // main::@return __breturn: - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .const a = '0' - .const b = 7 - .label return = a+b + // [11] plus::return#2 = plus::a#2 + plus::b#2 -- vbuxx=vbuaa_plus_vbuxx + stx.z $ff + clc + adc.z $ff + tax jmp __breturn // plus::@return __breturn: - // [5] return + // [12] return rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 +Removing instruction jmp __b2 Removing instruction jmp __breturn Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction plus_from_main: Removing instruction __b1: +Removing instruction plus_from___b1: +Removing instruction __b2: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination @@ -257,18 +370,29 @@ Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 void main() +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 11.0 char plus::return -__constant char plus::return#1 = plus::a#0+plus::b#0 // return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +reg byte x [ plus::return#2 ] FINAL ASSEMBLER -Score: 42 +Score: 114 // File Comments /** @@ -320,34 +444,76 @@ Score: 42 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa // main::@1 + // [3] main::$0 = plus::return#0 // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = plus::return#1 -- _deref_pbuc1=vbuc2 - lda #plus.return + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // plus('1', 6) + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + // main::@2 + // [7] main::$1 = plus::return#1 + // SCREEN[1] = plus('1', 6) + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 // main::@return // } - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .const a = '0' - .const b = 7 - .label return = a+b + // a+b + // [11] plus::return#2 = plus::a#2 + plus::b#2 -- vbuxx=vbuaa_plus_vbuxx + stx.z $ff + clc + adc.z $ff + tax // plus::@return - // [5] return + // } + // [12] return rts } // File Data diff --git a/src/test/ref/call-banked-phi-case-2-close-1.sym b/src/test/ref/call-banked-phi-case-2-close-1.sym index 45d8d7108..00ee4aca5 100644 --- a/src/test/ref/call-banked-phi-case-2-close-1.sym +++ b/src/test/ref/call-banked-phi-case-2-close-1.sym @@ -1,10 +1,21 @@ __constant char * const SCREEN = (char *) 1024 void main() +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 11.0 char plus::return -__constant char plus::return#1 = plus::a#0+plus::b#0 // return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +reg byte x [ plus::return#2 ] diff --git a/src/test/ref/call-banked-phi-case-3-near-0.asm b/src/test/ref/call-banked-phi-case-3-near-0.asm index 36effde7d..60fa654fa 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.asm +++ b/src/test/ref/call-banked-phi-case-3-near-0.asm @@ -43,33 +43,64 @@ .segment Code main: { // plus('0', 7) + ldx #7 + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + txa // SCREEN[0] = plus('0', 7) - lda #min.return sta SCREEN + // plus('1', 6) + ldx #6 + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + txa + // SCREEN[1] = plus('1', 6) + // close call + sta SCREEN+1 // } rts } .segment RAM_Bank1 -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - jsr min + // add(a, b) + sta.z add.a + txa + jsr add + tax // } rts } .segment Code -// char min(char a, char b) -min: { - .label return = plus.a+plus.b +// __register(A) char add(__zp(2) char a, __register(A) char b) +add: { + .label a = 2 + // a+b + clc + adc.z a + // } rts } diff --git a/src/test/ref/call-banked-phi-case-3-near-0.cfg b/src/test/ref/call-banked-phi-case-3-near-0.cfg index 4a0b60f9d..f7ec35c09 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.cfg +++ b/src/test/ref/call-banked-phi-case-3-near-0.cfg @@ -3,27 +3,42 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return diff --git a/src/test/ref/call-banked-phi-case-3-near-0.log b/src/test/ref/call-banked-phi-case-3-near-0.log index 7b0249d61..63c05360e 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.log +++ b/src/test/ref/call-banked-phi-case-3-near-0.log @@ -7,47 +7,56 @@ main: scope:[main] from __start plus::a#0 = '0' plus::b#0 = 7 call plus - plus::return#0 = plus::return#2 + plus::return#0 = plus::return#3 to:main::@1 main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 + plus::return#4 = phi( main/plus::return#0 ) + main::$0 = plus::return#4 SCREEN[0] = main::$0 + plus::a#1 = '1' + plus::b#1 = 6 + call plus + plus::return#1 = plus::return#3 + to:main::@2 +main::@2: scope:[main] from main::@1 + plus::return#5 = phi( main::@1/plus::return#1 ) + main::$1 = plus::return#5 + SCREEN[1] = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 +main::@return: scope:[main] from main::@2 return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - min::a#0 = plus::a#1 - min::b#0 = plus::b#1 - call min - min::return#0 = min::return#2 +plus: scope:[plus] from main main::@1 + plus::b#2 = phi( main/plus::b#0, main::@1/plus::b#1 ) + plus::a#2 = phi( main/plus::a#0, main::@1/plus::a#1 ) + add::a#0 = plus::a#2 + add::b#0 = plus::b#2 + call add + add::return#0 = add::return#2 to:plus::@1 plus::@1: scope:[plus] from plus - min::return#3 = phi( plus/min::return#0 ) - plus::$0 = min::return#3 - plus::return#1 = plus::$0 + add::return#3 = phi( plus/add::return#0 ) + plus::$0 = add::return#3 + plus::return#2 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus::@1 - plus::return#4 = phi( plus::@1/plus::return#1 ) - plus::return#2 = plus::return#4 + plus::return#6 = phi( plus::@1/plus::return#2 ) + plus::return#3 = plus::return#6 return to:@return -char min(char a , char b) -min: scope:[min] from plus - min::b#1 = phi( plus/min::b#0 ) - min::a#1 = phi( plus/min::a#0 ) - min::$0 = min::a#1 + min::b#1 - min::return#1 = min::$0 - to:min::@return -min::@return: scope:[min] from min - min::return#4 = phi( min/min::return#1 ) - min::return#2 = min::return#4 +char add(char a , char b) +add: scope:[add] from plus + add::b#1 = phi( plus/add::b#0 ) + add::a#1 = phi( plus/add::a#0 ) + add::$0 = add::a#1 + add::b#1 + add::return#1 = add::$0 + to:add::@return +add::@return: scope:[add] from add + add::return#4 = phi( add/add::return#1 ) + add::return#2 = add::return#4 return to:@return @@ -64,64 +73,74 @@ __start::@return: scope:[__start] from __start::@1 SYMBOL TABLE SSA __constant char * const SCREEN = (char *)$400 void __start() +char add(char a , char b) +char add::$0 +char add::a +char add::a#0 +char add::a#1 +char add::b +char add::b#0 +char add::b#1 +char add::return +char add::return#0 +char add::return#1 +char add::return#2 +char add::return#3 +char add::return#4 void main() char main::$0 -char min(char a , char b) -char min::$0 -char min::a -char min::a#0 -char min::a#1 -char min::b -char min::b#0 -char min::b#1 -char min::return -char min::return#0 -char min::return#1 -char min::return#2 -char min::return#3 -char min::return#4 +char main::$1 __bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 char plus::a#1 +char plus::a#2 char plus::b char plus::b#0 char plus::b#1 +char plus::b#2 char plus::return char plus::return#0 char plus::return#1 char plus::return#2 char plus::return#3 char plus::return#4 +char plus::return#5 +char plus::return#6 Adding number conversion cast (unumber) 7 in plus::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Adding number conversion cast (unumber) 6 in plus::b#1 = 6 +Adding number conversion cast (unumber) 1 in SCREEN[1] = main::$1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast plus::b#0 = (unumber)7 +Inlining cast plus::b#1 = (unumber)6 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (char *) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 0 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 -Alias min::return#0 = min::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 -Alias min::return#1 = min::$0 min::return#4 min::return#2 +Alias plus::return#0 = plus::return#4 +Alias plus::return#1 = plus::return#5 +Alias add::return#0 = add::return#3 +Alias plus::return#2 = plus::$0 plus::return#6 plus::return#3 +Alias add::return#1 = add::$0 add::return#4 add::return#2 Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Identical Phi Values min::a#1 min::a#0 -Identical Phi Values min::b#1 min::b#0 +Identical Phi Values add::a#1 add::a#0 +Identical Phi Values add::b#1 add::b#0 Successful SSA optimization Pass2IdenticalPhiElimination Constant plus::a#0 = '0' Constant plus::b#0 = 7 -Successful SSA optimization Pass2ConstantIdentification -Constant min::a#0 = plus::a#0 -Constant min::b#0 = plus::b#0 +Constant plus::a#1 = '1' +Constant plus::b#1 = 6 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero @@ -130,40 +149,25 @@ Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant min::return#1 = min::a#0+min::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant min::return#0 = min::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#1 = min::return#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings min::return#0 -Constant inlined plus::return#0 = min::return#1 -Constant inlined main::$0 = min::return#1 -Constant inlined plus::return#1 = min::return#1 -Constant inlined min::a#0 = plus::a#0 -Constant inlined min::return#0 = min::return#1 -Constant inlined min::b#0 = plus::b#0 +Inlining constant with var siblings plus::a#0 +Inlining constant with var siblings plus::b#0 +Inlining constant with var siblings plus::a#1 +Inlining constant with var siblings plus::b#1 +Constant inlined plus::b#1 = 6 +Constant inlined plus::b#0 = 7 +Constant inlined plus::a#1 = '1' +Constant inlined plus::a#0 = '0' Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN+1) +Successful SSA optimization Pass2ConstantAdditionElimination Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of plus::@1 -Adding NOP phi() at start of min CALL GRAPH -Calls in [main] to plus:1 -Calls in [plus] to min:5 +Calls in [main] to plus:1 plus:5 +Calls in [plus] to add:13 -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes -Culled Empty Block label plus::@1 +Created 2 initial phi equivalence classes +Coalesced down to 2 phi equivalence classes Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of min FINAL CONTROL FLOW GRAPH @@ -171,59 +175,141 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return VARIABLE REGISTER WEIGHTS +char add(char a , char b) +char add::a +char add::a#0 // 56.0 +char add::b +char add::b#0 // 112.0 +char add::return +char add::return#0 // 22.0 +char add::return#1 // 37.33333333333333 void main() -char min(char a , char b) -char min::a -char min::b -char min::return +char main::$0 // 4.0 +char main::$1 // 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a +char plus::a#2 // 11.0 char plus::b +char plus::b#2 // 5.5 char plus::return +char plus::return#0 // 4.0 +char plus::return#1 // 4.0 +char plus::return#2 // 3.75 Initial phi equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable plus::return#1 to live range equivalence class [ plus::return#1 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable add::a#0 to live range equivalence class [ add::a#0 ] +Added variable add::b#0 to live range equivalence class [ add::b#0 ] +Added variable add::return#0 to live range equivalence class [ add::return#0 ] +Added variable plus::return#2 to live range equivalence class [ plus::return#2 ] +Added variable add::return#1 to live range equivalence class [ add::return#1 ] Complete equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +[ plus::return#0 ] +[ main::$0 ] +[ plus::return#1 ] +[ main::$1 ] +[ add::a#0 ] +[ add::b#0 ] +[ add::return#0 ] +[ plus::return#2 ] +[ add::return#1 ] +Allocated zp[1]:2 [ add::b#0 ] +Allocated zp[1]:3 [ add::a#0 ] +Allocated zp[1]:4 [ add::return#1 ] +Allocated zp[1]:5 [ add::return#0 ] +Allocated zp[1]:6 [ plus::a#2 ] +Allocated zp[1]:7 [ plus::b#2 ] +Allocated zp[1]:8 [ plus::return#0 ] +Allocated zp[1]:9 [ main::$0 ] +Allocated zp[1]:10 [ plus::return#1 ] +Allocated zp[1]:11 [ main::$1 ] +Allocated zp[1]:12 [ plus::return#2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:12 [ plus::return#2 ] +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Potential registers zp[1]:6 [ plus::a#2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ plus::b#2 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ plus::return#0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ main::$0 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:10 [ plus::return#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:11 [ main::$1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ add::a#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ add::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ add::return#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:12 [ plus::return#2 ] : zp[1]:12 , reg byte x , reg byte y , +Potential registers zp[1]:4 [ add::return#1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] -Uplift Scope [plus] -Uplift Scope [min] +Uplift Scope [add] 112: zp[1]:2 [ add::b#0 ] 56: zp[1]:3 [ add::a#0 ] 37.33: zp[1]:4 [ add::return#1 ] 22: zp[1]:5 [ add::return#0 ] +Uplift Scope [plus] 11: zp[1]:6 [ plus::a#2 ] 5.5: zp[1]:7 [ plus::b#2 ] 4: zp[1]:8 [ plus::return#0 ] 4: zp[1]:10 [ plus::return#1 ] 3.75: zp[1]:12 [ plus::return#2 ] +Uplift Scope [main] 4: zp[1]:9 [ main::$0 ] 4: zp[1]:11 [ main::$1 ] Uplift Scope [] -Uplifting [main] best 93 combination -Uplifting [plus] best 93 combination -Uplifting [min] best 93 combination -Uplifting [] best 93 combination +Uplifting [add] best 189 combination reg byte a [ add::b#0 ] zp[1]:3 [ add::a#0 ] reg byte a [ add::return#1 ] reg byte a [ add::return#0 ] +Limited combination testing to 100 combinations of 256 possible. +Uplifting [plus] best 161 combination reg byte a [ plus::a#2 ] reg byte x [ plus::b#2 ] reg byte a [ plus::return#0 ] reg byte a [ plus::return#1 ] zp[1]:12 [ plus::return#2 ] +Limited combination testing to 100 combinations of 768 possible. +Uplifting [main] best 149 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] +Uplifting [] best 149 combination +Attempting to uplift remaining variables inzp[1]:3 [ add::a#0 ] +Uplifting [add] best 149 combination zp[1]:3 [ add::a#0 ] +Attempting to uplift remaining variables inzp[1]:12 [ plus::return#2 ] +Uplifting [plus] best 146 combination reg byte x [ plus::return#2 ] +Allocated (was zp[1]:3) zp[1]:2 [ add::a#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -275,90 +361,159 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] plus_from_main: + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa jmp __b1 // main::@1 __b1: - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [3] main::$0 = plus::return#0 + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + plus_from___b1: + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + jmp __b2 + // main::@2 + __b2: + // [7] main::$1 = plus::return#1 + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 jmp __breturn // main::@return __breturn: - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // [5] call min - // [7] phi from plus to min [phi:plus->min] - min_from_plus: - jsr min + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add + jsr add + // [14] add::return#0 = add::return#1 + jmp __b1 + // plus::@1 + __b1: + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax jmp __breturn // plus::@return __breturn: - // [6] return + // [16] return rts } .segment Code - // min -// char min(char a, char b) -min: { - .label return = plus.a+plus.b + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) +add: { + .label a = 2 + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a jmp __breturn - // min::@return + // add::@return __breturn: - // [8] return + // [18] return rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 +Removing instruction jmp __b2 Removing instruction jmp __breturn +Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction plus_from_main: Removing instruction __b1: +Removing instruction plus_from___b1: +Removing instruction __b2: Removing instruction __breturn: -Removing instruction min_from_plus: +Removing instruction __b1: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 +char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte a [ add::return#1 ] FINAL ASSEMBLER -Score: 54 +Score: 128 // File Comments /** @@ -410,47 +565,95 @@ Score: 54 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa // main::@1 + // [3] main::$0 = plus::return#0 // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // plus('1', 6) + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + // main::@2 + // [7] main::$1 = plus::return#1 + // SCREEN[1] = plus('1', 6) + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 // main::@return // } - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - // [5] call min - // [7] phi from plus to min [phi:plus->min] - jsr min + // add(a, b) + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add + jsr add + // [14] add::return#0 = add::return#1 + // plus::@1 + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax // plus::@return // } - // [6] return + // [16] return rts } .segment Code - // min -// char min(char a, char b) -min: { - .label return = plus.a+plus.b - // min::@return - // [8] return + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) +add: { + .label a = 2 + // a+b + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + // add::@return + // } + // [18] return rts } // File Data diff --git a/src/test/ref/call-banked-phi-case-3-near-0.sym b/src/test/ref/call-banked-phi-case-3-near-0.sym index 9e4219f22..658eb6563 100644 --- a/src/test/ref/call-banked-phi-case-3-near-0.sym +++ b/src/test/ref/call-banked-phi-case-3-near-0.sym @@ -1,14 +1,33 @@ __constant char * const SCREEN = (char *) 1024 +char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte a [ add::return#1 ] diff --git a/src/test/ref/call-banked-phi-case-3-near-1.asm b/src/test/ref/call-banked-phi-case-3-near-1.asm index dc45fa7ff..9ffca6b4a 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.asm +++ b/src/test/ref/call-banked-phi-case-3-near-1.asm @@ -43,33 +43,64 @@ .segment Code main: { // plus('0', 7) + ldx #7 + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + txa // SCREEN[0] = plus('0', 7) - lda #min.return sta SCREEN + // plus('1', 6) + ldx #6 + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + txa + // SCREEN[1] = plus('1', 6) + // close call + sta SCREEN+1 // } rts } .segment RAM_Bank1 -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - jsr min + // add(a, b) + sta.z add.a + txa + jsr add + tax // } rts } .segment Code -// char min(char a, char b) -min: { - .label return = plus.a+plus.b +// __register(A) char add(__zp(2) char a, __register(A) char b) +add: { + .label a = 2 + // a+b + clc + adc.z a + // } rts } diff --git a/src/test/ref/call-banked-phi-case-3-near-1.cfg b/src/test/ref/call-banked-phi-case-3-near-1.cfg index 4a0b60f9d..f7ec35c09 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.cfg +++ b/src/test/ref/call-banked-phi-case-3-near-1.cfg @@ -3,27 +3,42 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return diff --git a/src/test/ref/call-banked-phi-case-3-near-1.log b/src/test/ref/call-banked-phi-case-3-near-1.log index 6409550db..7b34ab84a 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.log +++ b/src/test/ref/call-banked-phi-case-3-near-1.log @@ -7,47 +7,56 @@ main: scope:[main] from __start plus::a#0 = '0' plus::b#0 = 7 call plus - plus::return#0 = plus::return#2 + plus::return#0 = plus::return#3 to:main::@1 main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 + plus::return#4 = phi( main/plus::return#0 ) + main::$0 = plus::return#4 SCREEN[0] = main::$0 + plus::a#1 = '1' + plus::b#1 = 6 + call plus + plus::return#1 = plus::return#3 + to:main::@2 +main::@2: scope:[main] from main::@1 + plus::return#5 = phi( main::@1/plus::return#1 ) + main::$1 = plus::return#5 + SCREEN[1] = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 +main::@return: scope:[main] from main::@2 return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - min::a#0 = plus::a#1 - min::b#0 = plus::b#1 - call min - min::return#0 = min::return#2 +plus: scope:[plus] from main main::@1 + plus::b#2 = phi( main/plus::b#0, main::@1/plus::b#1 ) + plus::a#2 = phi( main/plus::a#0, main::@1/plus::a#1 ) + add::a#0 = plus::a#2 + add::b#0 = plus::b#2 + call add + add::return#0 = add::return#2 to:plus::@1 plus::@1: scope:[plus] from plus - min::return#3 = phi( plus/min::return#0 ) - plus::$0 = min::return#3 - plus::return#1 = plus::$0 + add::return#3 = phi( plus/add::return#0 ) + plus::$0 = add::return#3 + plus::return#2 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus::@1 - plus::return#4 = phi( plus::@1/plus::return#1 ) - plus::return#2 = plus::return#4 + plus::return#6 = phi( plus::@1/plus::return#2 ) + plus::return#3 = plus::return#6 return to:@return -char min(char a , char b) -min: scope:[min] from plus - min::b#1 = phi( plus/min::b#0 ) - min::a#1 = phi( plus/min::a#0 ) - min::$0 = min::a#1 + min::b#1 - min::return#1 = min::$0 - to:min::@return -min::@return: scope:[min] from min - min::return#4 = phi( min/min::return#1 ) - min::return#2 = min::return#4 +char add(char a , char b) +add: scope:[add] from plus + add::b#1 = phi( plus/add::b#0 ) + add::a#1 = phi( plus/add::a#0 ) + add::$0 = add::a#1 + add::b#1 + add::return#1 = add::$0 + to:add::@return +add::@return: scope:[add] from add + add::return#4 = phi( add/add::return#1 ) + add::return#2 = add::return#4 return to:@return @@ -64,64 +73,74 @@ __start::@return: scope:[__start] from __start::@1 SYMBOL TABLE SSA __constant char * const SCREEN = (char *)$400 void __start() +char add(char a , char b) +char add::$0 +char add::a +char add::a#0 +char add::a#1 +char add::b +char add::b#0 +char add::b#1 +char add::return +char add::return#0 +char add::return#1 +char add::return#2 +char add::return#3 +char add::return#4 void main() char main::$0 -char min(char a , char b) -char min::$0 -char min::a -char min::a#0 -char min::a#1 -char min::b -char min::b#0 -char min::b#1 -char min::return -char min::return#0 -char min::return#1 -char min::return#2 -char min::return#3 -char min::return#4 +char main::$1 __bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 char plus::a#1 +char plus::a#2 char plus::b char plus::b#0 char plus::b#1 +char plus::b#2 char plus::return char plus::return#0 char plus::return#1 char plus::return#2 char plus::return#3 char plus::return#4 +char plus::return#5 +char plus::return#6 Adding number conversion cast (unumber) 7 in plus::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Adding number conversion cast (unumber) 6 in plus::b#1 = 6 +Adding number conversion cast (unumber) 1 in SCREEN[1] = main::$1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast plus::b#0 = (unumber)7 +Inlining cast plus::b#1 = (unumber)6 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (char *) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 0 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 -Alias min::return#0 = min::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 -Alias min::return#1 = min::$0 min::return#4 min::return#2 +Alias plus::return#0 = plus::return#4 +Alias plus::return#1 = plus::return#5 +Alias add::return#0 = add::return#3 +Alias plus::return#2 = plus::$0 plus::return#6 plus::return#3 +Alias add::return#1 = add::$0 add::return#4 add::return#2 Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Identical Phi Values min::a#1 min::a#0 -Identical Phi Values min::b#1 min::b#0 +Identical Phi Values add::a#1 add::a#0 +Identical Phi Values add::b#1 add::b#0 Successful SSA optimization Pass2IdenticalPhiElimination Constant plus::a#0 = '0' Constant plus::b#0 = 7 -Successful SSA optimization Pass2ConstantIdentification -Constant min::a#0 = plus::a#0 -Constant min::b#0 = plus::b#0 +Constant plus::a#1 = '1' +Constant plus::b#1 = 6 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero @@ -130,40 +149,25 @@ Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant min::return#1 = min::a#0+min::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant min::return#0 = min::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#1 = min::return#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings min::return#0 -Constant inlined plus::return#0 = min::return#1 -Constant inlined main::$0 = min::return#1 -Constant inlined plus::return#1 = min::return#1 -Constant inlined min::a#0 = plus::a#0 -Constant inlined min::return#0 = min::return#1 -Constant inlined min::b#0 = plus::b#0 +Inlining constant with var siblings plus::a#0 +Inlining constant with var siblings plus::b#0 +Inlining constant with var siblings plus::a#1 +Inlining constant with var siblings plus::b#1 +Constant inlined plus::b#1 = 6 +Constant inlined plus::b#0 = 7 +Constant inlined plus::a#1 = '1' +Constant inlined plus::a#0 = '0' Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN+1) +Successful SSA optimization Pass2ConstantAdditionElimination Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of plus::@1 -Adding NOP phi() at start of min CALL GRAPH -Calls in [main] to plus:1 -Calls in [plus] to min:5 +Calls in [main] to plus:1 plus:5 +Calls in [plus] to add:13 -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes -Culled Empty Block label plus::@1 +Created 2 initial phi equivalence classes +Coalesced down to 2 phi equivalence classes Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of min FINAL CONTROL FLOW GRAPH @@ -171,59 +175,141 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return VARIABLE REGISTER WEIGHTS +char add(char a , char b) +char add::a +char add::a#0 // 56.0 +char add::b +char add::b#0 // 112.0 +char add::return +char add::return#0 // 22.0 +char add::return#1 // 37.33333333333333 void main() -char min(char a , char b) -char min::a -char min::b -char min::return +char main::$0 // 4.0 +char main::$1 // 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a +char plus::a#2 // 11.0 char plus::b +char plus::b#2 // 5.5 char plus::return +char plus::return#0 // 4.0 +char plus::return#1 // 4.0 +char plus::return#2 // 3.75 Initial phi equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable plus::return#1 to live range equivalence class [ plus::return#1 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable add::a#0 to live range equivalence class [ add::a#0 ] +Added variable add::b#0 to live range equivalence class [ add::b#0 ] +Added variable add::return#0 to live range equivalence class [ add::return#0 ] +Added variable plus::return#2 to live range equivalence class [ plus::return#2 ] +Added variable add::return#1 to live range equivalence class [ add::return#1 ] Complete equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +[ plus::return#0 ] +[ main::$0 ] +[ plus::return#1 ] +[ main::$1 ] +[ add::a#0 ] +[ add::b#0 ] +[ add::return#0 ] +[ plus::return#2 ] +[ add::return#1 ] +Allocated zp[1]:2 [ add::b#0 ] +Allocated zp[1]:3 [ add::a#0 ] +Allocated zp[1]:4 [ add::return#1 ] +Allocated zp[1]:5 [ add::return#0 ] +Allocated zp[1]:6 [ plus::a#2 ] +Allocated zp[1]:7 [ plus::b#2 ] +Allocated zp[1]:8 [ plus::return#0 ] +Allocated zp[1]:9 [ main::$0 ] +Allocated zp[1]:10 [ plus::return#1 ] +Allocated zp[1]:11 [ main::$1 ] +Allocated zp[1]:12 [ plus::return#2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:12 [ plus::return#2 ] +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Potential registers zp[1]:6 [ plus::a#2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ plus::b#2 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ plus::return#0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ main::$0 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:10 [ plus::return#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:11 [ main::$1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ add::a#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ add::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ add::return#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:12 [ plus::return#2 ] : zp[1]:12 , reg byte x , reg byte y , +Potential registers zp[1]:4 [ add::return#1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] -Uplift Scope [plus] -Uplift Scope [min] +Uplift Scope [add] 112: zp[1]:2 [ add::b#0 ] 56: zp[1]:3 [ add::a#0 ] 37.33: zp[1]:4 [ add::return#1 ] 22: zp[1]:5 [ add::return#0 ] +Uplift Scope [plus] 11: zp[1]:6 [ plus::a#2 ] 5.5: zp[1]:7 [ plus::b#2 ] 4: zp[1]:8 [ plus::return#0 ] 4: zp[1]:10 [ plus::return#1 ] 3.75: zp[1]:12 [ plus::return#2 ] +Uplift Scope [main] 4: zp[1]:9 [ main::$0 ] 4: zp[1]:11 [ main::$1 ] Uplift Scope [] -Uplifting [main] best 93 combination -Uplifting [plus] best 93 combination -Uplifting [min] best 93 combination -Uplifting [] best 93 combination +Uplifting [add] best 189 combination reg byte a [ add::b#0 ] zp[1]:3 [ add::a#0 ] reg byte a [ add::return#1 ] reg byte a [ add::return#0 ] +Limited combination testing to 100 combinations of 256 possible. +Uplifting [plus] best 161 combination reg byte a [ plus::a#2 ] reg byte x [ plus::b#2 ] reg byte a [ plus::return#0 ] reg byte a [ plus::return#1 ] zp[1]:12 [ plus::return#2 ] +Limited combination testing to 100 combinations of 768 possible. +Uplifting [main] best 149 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] +Uplifting [] best 149 combination +Attempting to uplift remaining variables inzp[1]:3 [ add::a#0 ] +Uplifting [add] best 149 combination zp[1]:3 [ add::a#0 ] +Attempting to uplift remaining variables inzp[1]:12 [ plus::return#2 ] +Uplifting [plus] best 146 combination reg byte x [ plus::return#2 ] +Allocated (was zp[1]:3) zp[1]:2 [ add::a#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -275,90 +361,159 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] plus_from_main: + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa jmp __b1 // main::@1 __b1: - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [3] main::$0 = plus::return#0 + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + plus_from___b1: + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + jmp __b2 + // main::@2 + __b2: + // [7] main::$1 = plus::return#1 + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 jmp __breturn // main::@return __breturn: - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // [5] call min - // [7] phi from plus to min [phi:plus->min] - min_from_plus: - jsr min + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add + jsr add + // [14] add::return#0 = add::return#1 + jmp __b1 + // plus::@1 + __b1: + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax jmp __breturn // plus::@return __breturn: - // [6] return + // [16] return rts } .segment Code - // min -// char min(char a, char b) -min: { - .label return = plus.a+plus.b + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) +add: { + .label a = 2 + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a jmp __breturn - // min::@return + // add::@return __breturn: - // [8] return + // [18] return rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 +Removing instruction jmp __b2 Removing instruction jmp __breturn +Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction plus_from_main: Removing instruction __b1: +Removing instruction plus_from___b1: +Removing instruction __b2: Removing instruction __breturn: -Removing instruction min_from_plus: +Removing instruction __b1: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 +char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte a [ add::return#1 ] FINAL ASSEMBLER -Score: 54 +Score: 128 // File Comments /** @@ -410,47 +565,95 @@ Score: 54 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa // main::@1 + // [3] main::$0 = plus::return#0 // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // plus('1', 6) + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + // main::@2 + // [7] main::$1 = plus::return#1 + // SCREEN[1] = plus('1', 6) + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 // main::@return // } - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - // [5] call min - // [7] phi from plus to min [phi:plus->min] - jsr min + // add(a, b) + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add + jsr add + // [14] add::return#0 = add::return#1 + // plus::@1 + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax // plus::@return // } - // [6] return + // [16] return rts } .segment Code - // min -// char min(char a, char b) -min: { - .label return = plus.a+plus.b - // min::@return - // [8] return + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) +add: { + .label a = 2 + // a+b + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + // add::@return + // } + // [18] return rts } // File Data diff --git a/src/test/ref/call-banked-phi-case-3-near-1.sym b/src/test/ref/call-banked-phi-case-3-near-1.sym index 9e4219f22..658eb6563 100644 --- a/src/test/ref/call-banked-phi-case-3-near-1.sym +++ b/src/test/ref/call-banked-phi-case-3-near-1.sym @@ -1,14 +1,33 @@ __constant char * const SCREEN = (char *) 1024 +char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte a [ add::return#1 ] diff --git a/src/test/ref/call-banked-phi-case-4-near-0.asm b/src/test/ref/call-banked-phi-case-4-near-0.asm index d9e6ece5d..a7a1cbbf4 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.asm +++ b/src/test/ref/call-banked-phi-case-4-near-0.asm @@ -43,33 +43,64 @@ .segment Code main: { // plus('0', 7) + ldx #7 + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + txa // SCREEN[0] = plus('0', 7) - lda #min.return sta SCREEN + // plus('1', 6) + ldx #6 + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + txa + // SCREEN[1] = plus('1', 6) + // close call + sta SCREEN+1 // } rts } .segment RAM_Bank1 -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - jsr min + // add(a, b) + sta.z add.a + txa + jsr add + tax // } rts } -// char min(char a, char b) +// __register(A) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_ram, 1) -min: { - .label return = plus.a+plus.b +add: { + .label a = 2 + // a+b + clc + adc.z a + // } rts } diff --git a/src/test/ref/call-banked-phi-case-4-near-0.cfg b/src/test/ref/call-banked-phi-case-4-near-0.cfg index 3a2aea220..bb224fbfe 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.cfg +++ b/src/test/ref/call-banked-phi-case-4-near-0.cfg @@ -3,27 +3,42 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -__bank(cx16_ram, 1) char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +__bank(cx16_ram, 1) char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return diff --git a/src/test/ref/call-banked-phi-case-4-near-0.log b/src/test/ref/call-banked-phi-case-4-near-0.log index c5c7e65c3..5532553ee 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.log +++ b/src/test/ref/call-banked-phi-case-4-near-0.log @@ -7,47 +7,56 @@ main: scope:[main] from __start plus::a#0 = '0' plus::b#0 = 7 call plus - plus::return#0 = plus::return#2 + plus::return#0 = plus::return#3 to:main::@1 main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 + plus::return#4 = phi( main/plus::return#0 ) + main::$0 = plus::return#4 SCREEN[0] = main::$0 + plus::a#1 = '1' + plus::b#1 = 6 + call plus + plus::return#1 = plus::return#3 + to:main::@2 +main::@2: scope:[main] from main::@1 + plus::return#5 = phi( main::@1/plus::return#1 ) + main::$1 = plus::return#5 + SCREEN[1] = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 +main::@return: scope:[main] from main::@2 return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - min::a#0 = plus::a#1 - min::b#0 = plus::b#1 - call min - min::return#0 = min::return#2 +plus: scope:[plus] from main main::@1 + plus::b#2 = phi( main/plus::b#0, main::@1/plus::b#1 ) + plus::a#2 = phi( main/plus::a#0, main::@1/plus::a#1 ) + add::a#0 = plus::a#2 + add::b#0 = plus::b#2 + call add + add::return#0 = add::return#2 to:plus::@1 plus::@1: scope:[plus] from plus - min::return#3 = phi( plus/min::return#0 ) - plus::$0 = min::return#3 - plus::return#1 = plus::$0 + add::return#3 = phi( plus/add::return#0 ) + plus::$0 = add::return#3 + plus::return#2 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus::@1 - plus::return#4 = phi( plus::@1/plus::return#1 ) - plus::return#2 = plus::return#4 + plus::return#6 = phi( plus::@1/plus::return#2 ) + plus::return#3 = plus::return#6 return to:@return -__bank(cx16_ram, 1) char min(char a , char b) -min: scope:[min] from plus - min::b#1 = phi( plus/min::b#0 ) - min::a#1 = phi( plus/min::a#0 ) - min::$0 = min::a#1 + min::b#1 - min::return#1 = min::$0 - to:min::@return -min::@return: scope:[min] from min - min::return#4 = phi( min/min::return#1 ) - min::return#2 = min::return#4 +__bank(cx16_ram, 1) char add(char a , char b) +add: scope:[add] from plus + add::b#1 = phi( plus/add::b#0 ) + add::a#1 = phi( plus/add::a#0 ) + add::$0 = add::a#1 + add::b#1 + add::return#1 = add::$0 + to:add::@return +add::@return: scope:[add] from add + add::return#4 = phi( add/add::return#1 ) + add::return#2 = add::return#4 return to:@return @@ -64,64 +73,74 @@ __start::@return: scope:[__start] from __start::@1 SYMBOL TABLE SSA __constant char * const SCREEN = (char *)$400 void __start() +__bank(cx16_ram, 1) char add(char a , char b) +char add::$0 +char add::a +char add::a#0 +char add::a#1 +char add::b +char add::b#0 +char add::b#1 +char add::return +char add::return#0 +char add::return#1 +char add::return#2 +char add::return#3 +char add::return#4 void main() char main::$0 -__bank(cx16_ram, 1) char min(char a , char b) -char min::$0 -char min::a -char min::a#0 -char min::a#1 -char min::b -char min::b#0 -char min::b#1 -char min::return -char min::return#0 -char min::return#1 -char min::return#2 -char min::return#3 -char min::return#4 +char main::$1 __bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 char plus::a#1 +char plus::a#2 char plus::b char plus::b#0 char plus::b#1 +char plus::b#2 char plus::return char plus::return#0 char plus::return#1 char plus::return#2 char plus::return#3 char plus::return#4 +char plus::return#5 +char plus::return#6 Adding number conversion cast (unumber) 7 in plus::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Adding number conversion cast (unumber) 6 in plus::b#1 = 6 +Adding number conversion cast (unumber) 1 in SCREEN[1] = main::$1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast plus::b#0 = (unumber)7 +Inlining cast plus::b#1 = (unumber)6 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (char *) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 0 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 -Alias min::return#0 = min::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 -Alias min::return#1 = min::$0 min::return#4 min::return#2 +Alias plus::return#0 = plus::return#4 +Alias plus::return#1 = plus::return#5 +Alias add::return#0 = add::return#3 +Alias plus::return#2 = plus::$0 plus::return#6 plus::return#3 +Alias add::return#1 = add::$0 add::return#4 add::return#2 Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Identical Phi Values min::a#1 min::a#0 -Identical Phi Values min::b#1 min::b#0 +Identical Phi Values add::a#1 add::a#0 +Identical Phi Values add::b#1 add::b#0 Successful SSA optimization Pass2IdenticalPhiElimination Constant plus::a#0 = '0' Constant plus::b#0 = 7 -Successful SSA optimization Pass2ConstantIdentification -Constant min::a#0 = plus::a#0 -Constant min::b#0 = plus::b#0 +Constant plus::a#1 = '1' +Constant plus::b#1 = 6 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero @@ -130,40 +149,25 @@ Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant min::return#1 = min::a#0+min::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant min::return#0 = min::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#1 = min::return#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings min::return#0 -Constant inlined plus::return#0 = min::return#1 -Constant inlined main::$0 = min::return#1 -Constant inlined plus::return#1 = min::return#1 -Constant inlined min::a#0 = plus::a#0 -Constant inlined min::return#0 = min::return#1 -Constant inlined min::b#0 = plus::b#0 +Inlining constant with var siblings plus::a#0 +Inlining constant with var siblings plus::b#0 +Inlining constant with var siblings plus::a#1 +Inlining constant with var siblings plus::b#1 +Constant inlined plus::b#1 = 6 +Constant inlined plus::b#0 = 7 +Constant inlined plus::a#1 = '1' +Constant inlined plus::a#0 = '0' Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN+1) +Successful SSA optimization Pass2ConstantAdditionElimination Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of plus::@1 -Adding NOP phi() at start of min CALL GRAPH -Calls in [main] to plus:1 -Calls in [plus] to min:5 +Calls in [main] to plus:1 plus:5 +Calls in [plus] to add:13 -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes -Culled Empty Block label plus::@1 +Created 2 initial phi equivalence classes +Coalesced down to 2 phi equivalence classes Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of min FINAL CONTROL FLOW GRAPH @@ -171,59 +175,141 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -__bank(cx16_ram, 1) char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +__bank(cx16_ram, 1) char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return VARIABLE REGISTER WEIGHTS +__bank(cx16_ram, 1) char add(char a , char b) +char add::a +char add::a#0 // 56.0 +char add::b +char add::b#0 // 112.0 +char add::return +char add::return#0 // 22.0 +char add::return#1 // 37.33333333333333 void main() -__bank(cx16_ram, 1) char min(char a , char b) -char min::a -char min::b -char min::return +char main::$0 // 4.0 +char main::$1 // 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a +char plus::a#2 // 11.0 char plus::b +char plus::b#2 // 5.5 char plus::return +char plus::return#0 // 4.0 +char plus::return#1 // 4.0 +char plus::return#2 // 3.75 Initial phi equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable plus::return#1 to live range equivalence class [ plus::return#1 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable add::a#0 to live range equivalence class [ add::a#0 ] +Added variable add::b#0 to live range equivalence class [ add::b#0 ] +Added variable add::return#0 to live range equivalence class [ add::return#0 ] +Added variable plus::return#2 to live range equivalence class [ plus::return#2 ] +Added variable add::return#1 to live range equivalence class [ add::return#1 ] Complete equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +[ plus::return#0 ] +[ main::$0 ] +[ plus::return#1 ] +[ main::$1 ] +[ add::a#0 ] +[ add::b#0 ] +[ add::return#0 ] +[ plus::return#2 ] +[ add::return#1 ] +Allocated zp[1]:2 [ add::b#0 ] +Allocated zp[1]:3 [ add::a#0 ] +Allocated zp[1]:4 [ add::return#1 ] +Allocated zp[1]:5 [ add::return#0 ] +Allocated zp[1]:6 [ plus::a#2 ] +Allocated zp[1]:7 [ plus::b#2 ] +Allocated zp[1]:8 [ plus::return#0 ] +Allocated zp[1]:9 [ main::$0 ] +Allocated zp[1]:10 [ plus::return#1 ] +Allocated zp[1]:11 [ main::$1 ] +Allocated zp[1]:12 [ plus::return#2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:12 [ plus::return#2 ] +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Potential registers zp[1]:6 [ plus::a#2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ plus::b#2 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ plus::return#0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ main::$0 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:10 [ plus::return#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:11 [ main::$1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ add::a#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ add::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ add::return#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:12 [ plus::return#2 ] : zp[1]:12 , reg byte x , reg byte y , +Potential registers zp[1]:4 [ add::return#1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] -Uplift Scope [plus] -Uplift Scope [min] +Uplift Scope [add] 112: zp[1]:2 [ add::b#0 ] 56: zp[1]:3 [ add::a#0 ] 37.33: zp[1]:4 [ add::return#1 ] 22: zp[1]:5 [ add::return#0 ] +Uplift Scope [plus] 11: zp[1]:6 [ plus::a#2 ] 5.5: zp[1]:7 [ plus::b#2 ] 4: zp[1]:8 [ plus::return#0 ] 4: zp[1]:10 [ plus::return#1 ] 3.75: zp[1]:12 [ plus::return#2 ] +Uplift Scope [main] 4: zp[1]:9 [ main::$0 ] 4: zp[1]:11 [ main::$1 ] Uplift Scope [] -Uplifting [main] best 93 combination -Uplifting [plus] best 93 combination -Uplifting [min] best 93 combination -Uplifting [] best 93 combination +Uplifting [add] best 189 combination reg byte a [ add::b#0 ] zp[1]:3 [ add::a#0 ] reg byte a [ add::return#1 ] reg byte a [ add::return#0 ] +Limited combination testing to 100 combinations of 256 possible. +Uplifting [plus] best 161 combination reg byte a [ plus::a#2 ] reg byte x [ plus::b#2 ] reg byte a [ plus::return#0 ] reg byte a [ plus::return#1 ] zp[1]:12 [ plus::return#2 ] +Limited combination testing to 100 combinations of 768 possible. +Uplifting [main] best 149 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] +Uplifting [] best 149 combination +Attempting to uplift remaining variables inzp[1]:3 [ add::a#0 ] +Uplifting [add] best 149 combination zp[1]:3 [ add::a#0 ] +Attempting to uplift remaining variables inzp[1]:12 [ plus::return#2 ] +Uplifting [plus] best 146 combination reg byte x [ plus::return#2 ] +Allocated (was zp[1]:3) zp[1]:2 [ add::a#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -275,90 +361,159 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] plus_from_main: + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa jmp __b1 // main::@1 __b1: - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [3] main::$0 = plus::return#0 + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + plus_from___b1: + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + jmp __b2 + // main::@2 + __b2: + // [7] main::$1 = plus::return#1 + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 jmp __breturn // main::@return __breturn: - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // [5] call min - // [7] phi from plus to min [phi:plus->min] - min_from_plus: - jsr min + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add + jsr add + // [14] add::return#0 = add::return#1 + jmp __b1 + // plus::@1 + __b1: + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax jmp __breturn // plus::@return __breturn: - // [6] return + // [16] return rts } - // min -// char min(char a, char b) + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_ram, 1) -min: { - .label return = plus.a+plus.b +add: { + .label a = 2 + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a jmp __breturn - // min::@return + // add::@return __breturn: - // [8] return + // [18] return rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 +Removing instruction jmp __b2 Removing instruction jmp __breturn +Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction plus_from_main: Removing instruction __b1: +Removing instruction plus_from___b1: +Removing instruction __b2: Removing instruction __breturn: -Removing instruction min_from_plus: +Removing instruction __b1: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 +__bank(cx16_ram, 1) char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -__bank(cx16_ram, 1) char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte a [ add::return#1 ] FINAL ASSEMBLER -Score: 54 +Score: 128 // File Comments /** @@ -410,47 +565,95 @@ Score: 54 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa // main::@1 + // [3] main::$0 = plus::return#0 // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // plus('1', 6) + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + // main::@2 + // [7] main::$1 = plus::return#1 + // SCREEN[1] = plus('1', 6) + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 // main::@return // } - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - // [5] call min - // [7] phi from plus to min [phi:plus->min] - jsr min + // add(a, b) + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add + jsr add + // [14] add::return#0 = add::return#1 + // plus::@1 + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax // plus::@return // } - // [6] return + // [16] return rts } - // min -// char min(char a, char b) + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_ram, 1) -min: { - .label return = plus.a+plus.b - // min::@return - // [8] return +add: { + .label a = 2 + // a+b + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + // add::@return + // } + // [18] return rts } // File Data diff --git a/src/test/ref/call-banked-phi-case-4-near-0.sym b/src/test/ref/call-banked-phi-case-4-near-0.sym index 09b563343..4267f6a35 100644 --- a/src/test/ref/call-banked-phi-case-4-near-0.sym +++ b/src/test/ref/call-banked-phi-case-4-near-0.sym @@ -1,14 +1,33 @@ __constant char * const SCREEN = (char *) 1024 +__bank(cx16_ram, 1) char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -__bank(cx16_ram, 1) char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte a [ add::return#1 ] diff --git a/src/test/ref/call-banked-phi-case-4-near-1.asm b/src/test/ref/call-banked-phi-case-4-near-1.asm index 961e21569..97f10c7d0 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.asm +++ b/src/test/ref/call-banked-phi-case-4-near-1.asm @@ -43,33 +43,64 @@ .segment Code main: { // plus('0', 7) + ldx #7 + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + txa // SCREEN[0] = plus('0', 7) - lda #min.return sta SCREEN + // plus('1', 6) + ldx #6 + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + txa + // SCREEN[1] = plus('1', 6) + // close call + sta SCREEN+1 // } rts } .segment RAM_Bank1 -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - jsr min + // add(a, b) + sta.z add.a + txa + jsr add + tax // } rts } -// char min(char a, char b) +// __register(A) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_ram, 1) -min: { - .label return = plus.a+plus.b +add: { + .label a = 2 + // a+b + clc + adc.z a + // } rts } diff --git a/src/test/ref/call-banked-phi-case-4-near-1.cfg b/src/test/ref/call-banked-phi-case-4-near-1.cfg index 3a2aea220..bb224fbfe 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.cfg +++ b/src/test/ref/call-banked-phi-case-4-near-1.cfg @@ -3,27 +3,42 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -__bank(cx16_ram, 1) char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +__bank(cx16_ram, 1) char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return diff --git a/src/test/ref/call-banked-phi-case-4-near-1.log b/src/test/ref/call-banked-phi-case-4-near-1.log index fd0d233ce..4205fd77c 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.log +++ b/src/test/ref/call-banked-phi-case-4-near-1.log @@ -7,47 +7,56 @@ main: scope:[main] from __start plus::a#0 = '0' plus::b#0 = 7 call plus - plus::return#0 = plus::return#2 + plus::return#0 = plus::return#3 to:main::@1 main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 + plus::return#4 = phi( main/plus::return#0 ) + main::$0 = plus::return#4 SCREEN[0] = main::$0 + plus::a#1 = '1' + plus::b#1 = 6 + call plus + plus::return#1 = plus::return#3 + to:main::@2 +main::@2: scope:[main] from main::@1 + plus::return#5 = phi( main::@1/plus::return#1 ) + main::$1 = plus::return#5 + SCREEN[1] = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 +main::@return: scope:[main] from main::@2 return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - min::a#0 = plus::a#1 - min::b#0 = plus::b#1 - call min - min::return#0 = min::return#2 +plus: scope:[plus] from main main::@1 + plus::b#2 = phi( main/plus::b#0, main::@1/plus::b#1 ) + plus::a#2 = phi( main/plus::a#0, main::@1/plus::a#1 ) + add::a#0 = plus::a#2 + add::b#0 = plus::b#2 + call add + add::return#0 = add::return#2 to:plus::@1 plus::@1: scope:[plus] from plus - min::return#3 = phi( plus/min::return#0 ) - plus::$0 = min::return#3 - plus::return#1 = plus::$0 + add::return#3 = phi( plus/add::return#0 ) + plus::$0 = add::return#3 + plus::return#2 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus::@1 - plus::return#4 = phi( plus::@1/plus::return#1 ) - plus::return#2 = plus::return#4 + plus::return#6 = phi( plus::@1/plus::return#2 ) + plus::return#3 = plus::return#6 return to:@return -__bank(cx16_ram, 1) char min(char a , char b) -min: scope:[min] from plus - min::b#1 = phi( plus/min::b#0 ) - min::a#1 = phi( plus/min::a#0 ) - min::$0 = min::a#1 + min::b#1 - min::return#1 = min::$0 - to:min::@return -min::@return: scope:[min] from min - min::return#4 = phi( min/min::return#1 ) - min::return#2 = min::return#4 +__bank(cx16_ram, 1) char add(char a , char b) +add: scope:[add] from plus + add::b#1 = phi( plus/add::b#0 ) + add::a#1 = phi( plus/add::a#0 ) + add::$0 = add::a#1 + add::b#1 + add::return#1 = add::$0 + to:add::@return +add::@return: scope:[add] from add + add::return#4 = phi( add/add::return#1 ) + add::return#2 = add::return#4 return to:@return @@ -64,64 +73,74 @@ __start::@return: scope:[__start] from __start::@1 SYMBOL TABLE SSA __constant char * const SCREEN = (char *)$400 void __start() +__bank(cx16_ram, 1) char add(char a , char b) +char add::$0 +char add::a +char add::a#0 +char add::a#1 +char add::b +char add::b#0 +char add::b#1 +char add::return +char add::return#0 +char add::return#1 +char add::return#2 +char add::return#3 +char add::return#4 void main() char main::$0 -__bank(cx16_ram, 1) char min(char a , char b) -char min::$0 -char min::a -char min::a#0 -char min::a#1 -char min::b -char min::b#0 -char min::b#1 -char min::return -char min::return#0 -char min::return#1 -char min::return#2 -char min::return#3 -char min::return#4 +char main::$1 __bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 char plus::a#1 +char plus::a#2 char plus::b char plus::b#0 char plus::b#1 +char plus::b#2 char plus::return char plus::return#0 char plus::return#1 char plus::return#2 char plus::return#3 char plus::return#4 +char plus::return#5 +char plus::return#6 Adding number conversion cast (unumber) 7 in plus::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Adding number conversion cast (unumber) 6 in plus::b#1 = 6 +Adding number conversion cast (unumber) 1 in SCREEN[1] = main::$1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast plus::b#0 = (unumber)7 +Inlining cast plus::b#1 = (unumber)6 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (char *) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 0 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 -Alias min::return#0 = min::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 -Alias min::return#1 = min::$0 min::return#4 min::return#2 +Alias plus::return#0 = plus::return#4 +Alias plus::return#1 = plus::return#5 +Alias add::return#0 = add::return#3 +Alias plus::return#2 = plus::$0 plus::return#6 plus::return#3 +Alias add::return#1 = add::$0 add::return#4 add::return#2 Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Identical Phi Values min::a#1 min::a#0 -Identical Phi Values min::b#1 min::b#0 +Identical Phi Values add::a#1 add::a#0 +Identical Phi Values add::b#1 add::b#0 Successful SSA optimization Pass2IdenticalPhiElimination Constant plus::a#0 = '0' Constant plus::b#0 = 7 -Successful SSA optimization Pass2ConstantIdentification -Constant min::a#0 = plus::a#0 -Constant min::b#0 = plus::b#0 +Constant plus::a#1 = '1' +Constant plus::b#1 = 6 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero @@ -130,40 +149,25 @@ Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant min::return#1 = min::a#0+min::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant min::return#0 = min::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#1 = min::return#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings min::return#0 -Constant inlined plus::return#0 = min::return#1 -Constant inlined main::$0 = min::return#1 -Constant inlined plus::return#1 = min::return#1 -Constant inlined min::a#0 = plus::a#0 -Constant inlined min::return#0 = min::return#1 -Constant inlined min::b#0 = plus::b#0 +Inlining constant with var siblings plus::a#0 +Inlining constant with var siblings plus::b#0 +Inlining constant with var siblings plus::a#1 +Inlining constant with var siblings plus::b#1 +Constant inlined plus::b#1 = 6 +Constant inlined plus::b#0 = 7 +Constant inlined plus::a#1 = '1' +Constant inlined plus::a#0 = '0' Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN+1) +Successful SSA optimization Pass2ConstantAdditionElimination Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of plus::@1 -Adding NOP phi() at start of min CALL GRAPH -Calls in [main] to plus:1 -Calls in [plus] to min:5 +Calls in [main] to plus:1 plus:5 +Calls in [plus] to add:13 -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes -Culled Empty Block label plus::@1 +Created 2 initial phi equivalence classes +Coalesced down to 2 phi equivalence classes Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of min FINAL CONTROL FLOW GRAPH @@ -171,59 +175,141 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -__bank(cx16_ram, 1) char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +__bank(cx16_ram, 1) char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return VARIABLE REGISTER WEIGHTS +__bank(cx16_ram, 1) char add(char a , char b) +char add::a +char add::a#0 // 56.0 +char add::b +char add::b#0 // 112.0 +char add::return +char add::return#0 // 22.0 +char add::return#1 // 37.33333333333333 void main() -__bank(cx16_ram, 1) char min(char a , char b) -char min::a -char min::b -char min::return +char main::$0 // 4.0 +char main::$1 // 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a +char plus::a#2 // 11.0 char plus::b +char plus::b#2 // 5.5 char plus::return +char plus::return#0 // 4.0 +char plus::return#1 // 4.0 +char plus::return#2 // 3.75 Initial phi equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable plus::return#1 to live range equivalence class [ plus::return#1 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable add::a#0 to live range equivalence class [ add::a#0 ] +Added variable add::b#0 to live range equivalence class [ add::b#0 ] +Added variable add::return#0 to live range equivalence class [ add::return#0 ] +Added variable plus::return#2 to live range equivalence class [ plus::return#2 ] +Added variable add::return#1 to live range equivalence class [ add::return#1 ] Complete equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +[ plus::return#0 ] +[ main::$0 ] +[ plus::return#1 ] +[ main::$1 ] +[ add::a#0 ] +[ add::b#0 ] +[ add::return#0 ] +[ plus::return#2 ] +[ add::return#1 ] +Allocated zp[1]:2 [ add::b#0 ] +Allocated zp[1]:3 [ add::a#0 ] +Allocated zp[1]:4 [ add::return#1 ] +Allocated zp[1]:5 [ add::return#0 ] +Allocated zp[1]:6 [ plus::a#2 ] +Allocated zp[1]:7 [ plus::b#2 ] +Allocated zp[1]:8 [ plus::return#0 ] +Allocated zp[1]:9 [ main::$0 ] +Allocated zp[1]:10 [ plus::return#1 ] +Allocated zp[1]:11 [ main::$1 ] +Allocated zp[1]:12 [ plus::return#2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:12 [ plus::return#2 ] +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Potential registers zp[1]:6 [ plus::a#2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ plus::b#2 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ plus::return#0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ main::$0 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:10 [ plus::return#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:11 [ main::$1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ add::a#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ add::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ add::return#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:12 [ plus::return#2 ] : zp[1]:12 , reg byte x , reg byte y , +Potential registers zp[1]:4 [ add::return#1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] -Uplift Scope [plus] -Uplift Scope [min] +Uplift Scope [add] 112: zp[1]:2 [ add::b#0 ] 56: zp[1]:3 [ add::a#0 ] 37.33: zp[1]:4 [ add::return#1 ] 22: zp[1]:5 [ add::return#0 ] +Uplift Scope [plus] 11: zp[1]:6 [ plus::a#2 ] 5.5: zp[1]:7 [ plus::b#2 ] 4: zp[1]:8 [ plus::return#0 ] 4: zp[1]:10 [ plus::return#1 ] 3.75: zp[1]:12 [ plus::return#2 ] +Uplift Scope [main] 4: zp[1]:9 [ main::$0 ] 4: zp[1]:11 [ main::$1 ] Uplift Scope [] -Uplifting [main] best 93 combination -Uplifting [plus] best 93 combination -Uplifting [min] best 93 combination -Uplifting [] best 93 combination +Uplifting [add] best 189 combination reg byte a [ add::b#0 ] zp[1]:3 [ add::a#0 ] reg byte a [ add::return#1 ] reg byte a [ add::return#0 ] +Limited combination testing to 100 combinations of 256 possible. +Uplifting [plus] best 161 combination reg byte a [ plus::a#2 ] reg byte x [ plus::b#2 ] reg byte a [ plus::return#0 ] reg byte a [ plus::return#1 ] zp[1]:12 [ plus::return#2 ] +Limited combination testing to 100 combinations of 768 possible. +Uplifting [main] best 149 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] +Uplifting [] best 149 combination +Attempting to uplift remaining variables inzp[1]:3 [ add::a#0 ] +Uplifting [add] best 149 combination zp[1]:3 [ add::a#0 ] +Attempting to uplift remaining variables inzp[1]:12 [ plus::return#2 ] +Uplifting [plus] best 146 combination reg byte x [ plus::return#2 ] +Allocated (was zp[1]:3) zp[1]:2 [ add::a#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -275,90 +361,159 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] plus_from_main: + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa jmp __b1 // main::@1 __b1: - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [3] main::$0 = plus::return#0 + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + plus_from___b1: + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + jmp __b2 + // main::@2 + __b2: + // [7] main::$1 = plus::return#1 + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 jmp __breturn // main::@return __breturn: - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // [5] call min - // [7] phi from plus to min [phi:plus->min] - min_from_plus: - jsr min + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add + jsr add + // [14] add::return#0 = add::return#1 + jmp __b1 + // plus::@1 + __b1: + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax jmp __breturn // plus::@return __breturn: - // [6] return + // [16] return rts } - // min -// char min(char a, char b) + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_ram, 1) -min: { - .label return = plus.a+plus.b +add: { + .label a = 2 + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a jmp __breturn - // min::@return + // add::@return __breturn: - // [8] return + // [18] return rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 +Removing instruction jmp __b2 Removing instruction jmp __breturn +Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction plus_from_main: Removing instruction __b1: +Removing instruction plus_from___b1: +Removing instruction __b2: Removing instruction __breturn: -Removing instruction min_from_plus: +Removing instruction __b1: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 +__bank(cx16_ram, 1) char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -__bank(cx16_ram, 1) char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte a [ add::return#1 ] FINAL ASSEMBLER -Score: 54 +Score: 128 // File Comments /** @@ -410,47 +565,95 @@ Score: 54 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa // main::@1 + // [3] main::$0 = plus::return#0 // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // plus('1', 6) + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + // main::@2 + // [7] main::$1 = plus::return#1 + // SCREEN[1] = plus('1', 6) + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 // main::@return // } - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - // [5] call min - // [7] phi from plus to min [phi:plus->min] - jsr min + // add(a, b) + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add + jsr add + // [14] add::return#0 = add::return#1 + // plus::@1 + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax // plus::@return // } - // [6] return + // [16] return rts } - // min -// char min(char a, char b) + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_ram, 1) -min: { - .label return = plus.a+plus.b - // min::@return - // [8] return +add: { + .label a = 2 + // a+b + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + // add::@return + // } + // [18] return rts } // File Data diff --git a/src/test/ref/call-banked-phi-case-4-near-1.sym b/src/test/ref/call-banked-phi-case-4-near-1.sym index 09b563343..4267f6a35 100644 --- a/src/test/ref/call-banked-phi-case-4-near-1.sym +++ b/src/test/ref/call-banked-phi-case-4-near-1.sym @@ -1,14 +1,33 @@ __constant char * const SCREEN = (char *) 1024 +__bank(cx16_ram, 1) char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -__bank(cx16_ram, 1) char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte a [ add::return#1 ] diff --git a/src/test/ref/call-banked-phi-case-5-far-0.asm b/src/test/ref/call-banked-phi-case-5-far-0.asm index d4144fb7c..c8603afdc 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.asm +++ b/src/test/ref/call-banked-phi-case-5-far-0.asm @@ -43,37 +43,68 @@ .segment Code main: { // plus('0', 7) + ldx #7 + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + txa // SCREEN[0] = plus('0', 7) - lda #min.return sta SCREEN + // plus('1', 6) + ldx #6 + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + txa + // SCREEN[1] = plus('1', 6) + // close call + sta SCREEN+1 // } rts } .segment RAM_Bank1 -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) + // add(a, b) + sta.z add.a + txa jsr $ff6e - .byte min + .byte add .byte 2 + tax // } rts } .segment RAM_Bank2 -// char min(char a, char b) +// __register(A) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_ram, 2) -min: { - .label return = plus.a+plus.b +add: { + .label a = 2 + // a+b + clc + adc.z a + // } rts } diff --git a/src/test/ref/call-banked-phi-case-5-far-0.cfg b/src/test/ref/call-banked-phi-case-5-far-0.cfg index 1bdaac9fb..03dfaf36c 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.cfg +++ b/src/test/ref/call-banked-phi-case-5-far-0.cfg @@ -3,27 +3,42 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -__bank(cx16_ram, 2) char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +__bank(cx16_ram, 2) char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return diff --git a/src/test/ref/call-banked-phi-case-5-far-0.log b/src/test/ref/call-banked-phi-case-5-far-0.log index b4699672c..d1d83e6e3 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.log +++ b/src/test/ref/call-banked-phi-case-5-far-0.log @@ -7,47 +7,56 @@ main: scope:[main] from __start plus::a#0 = '0' plus::b#0 = 7 call plus - plus::return#0 = plus::return#2 + plus::return#0 = plus::return#3 to:main::@1 main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 + plus::return#4 = phi( main/plus::return#0 ) + main::$0 = plus::return#4 SCREEN[0] = main::$0 + plus::a#1 = '1' + plus::b#1 = 6 + call plus + plus::return#1 = plus::return#3 + to:main::@2 +main::@2: scope:[main] from main::@1 + plus::return#5 = phi( main::@1/plus::return#1 ) + main::$1 = plus::return#5 + SCREEN[1] = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 +main::@return: scope:[main] from main::@2 return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - min::a#0 = plus::a#1 - min::b#0 = plus::b#1 - call min - min::return#0 = min::return#2 +plus: scope:[plus] from main main::@1 + plus::b#2 = phi( main/plus::b#0, main::@1/plus::b#1 ) + plus::a#2 = phi( main/plus::a#0, main::@1/plus::a#1 ) + add::a#0 = plus::a#2 + add::b#0 = plus::b#2 + call add + add::return#0 = add::return#2 to:plus::@1 plus::@1: scope:[plus] from plus - min::return#3 = phi( plus/min::return#0 ) - plus::$0 = min::return#3 - plus::return#1 = plus::$0 + add::return#3 = phi( plus/add::return#0 ) + plus::$0 = add::return#3 + plus::return#2 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus::@1 - plus::return#4 = phi( plus::@1/plus::return#1 ) - plus::return#2 = plus::return#4 + plus::return#6 = phi( plus::@1/plus::return#2 ) + plus::return#3 = plus::return#6 return to:@return -__bank(cx16_ram, 2) char min(char a , char b) -min: scope:[min] from plus - min::b#1 = phi( plus/min::b#0 ) - min::a#1 = phi( plus/min::a#0 ) - min::$0 = min::a#1 + min::b#1 - min::return#1 = min::$0 - to:min::@return -min::@return: scope:[min] from min - min::return#4 = phi( min/min::return#1 ) - min::return#2 = min::return#4 +__bank(cx16_ram, 2) char add(char a , char b) +add: scope:[add] from plus + add::b#1 = phi( plus/add::b#0 ) + add::a#1 = phi( plus/add::a#0 ) + add::$0 = add::a#1 + add::b#1 + add::return#1 = add::$0 + to:add::@return +add::@return: scope:[add] from add + add::return#4 = phi( add/add::return#1 ) + add::return#2 = add::return#4 return to:@return @@ -64,64 +73,74 @@ __start::@return: scope:[__start] from __start::@1 SYMBOL TABLE SSA __constant char * const SCREEN = (char *)$400 void __start() +__bank(cx16_ram, 2) char add(char a , char b) +char add::$0 +char add::a +char add::a#0 +char add::a#1 +char add::b +char add::b#0 +char add::b#1 +char add::return +char add::return#0 +char add::return#1 +char add::return#2 +char add::return#3 +char add::return#4 void main() char main::$0 -__bank(cx16_ram, 2) char min(char a , char b) -char min::$0 -char min::a -char min::a#0 -char min::a#1 -char min::b -char min::b#0 -char min::b#1 -char min::return -char min::return#0 -char min::return#1 -char min::return#2 -char min::return#3 -char min::return#4 +char main::$1 __bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 char plus::a#1 +char plus::a#2 char plus::b char plus::b#0 char plus::b#1 +char plus::b#2 char plus::return char plus::return#0 char plus::return#1 char plus::return#2 char plus::return#3 char plus::return#4 +char plus::return#5 +char plus::return#6 Adding number conversion cast (unumber) 7 in plus::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Adding number conversion cast (unumber) 6 in plus::b#1 = 6 +Adding number conversion cast (unumber) 1 in SCREEN[1] = main::$1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast plus::b#0 = (unumber)7 +Inlining cast plus::b#1 = (unumber)6 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (char *) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 0 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 -Alias min::return#0 = min::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 -Alias min::return#1 = min::$0 min::return#4 min::return#2 +Alias plus::return#0 = plus::return#4 +Alias plus::return#1 = plus::return#5 +Alias add::return#0 = add::return#3 +Alias plus::return#2 = plus::$0 plus::return#6 plus::return#3 +Alias add::return#1 = add::$0 add::return#4 add::return#2 Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Identical Phi Values min::a#1 min::a#0 -Identical Phi Values min::b#1 min::b#0 +Identical Phi Values add::a#1 add::a#0 +Identical Phi Values add::b#1 add::b#0 Successful SSA optimization Pass2IdenticalPhiElimination Constant plus::a#0 = '0' Constant plus::b#0 = 7 -Successful SSA optimization Pass2ConstantIdentification -Constant min::a#0 = plus::a#0 -Constant min::b#0 = plus::b#0 +Constant plus::a#1 = '1' +Constant plus::b#1 = 6 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero @@ -130,40 +149,25 @@ Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant min::return#1 = min::a#0+min::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant min::return#0 = min::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#1 = min::return#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings min::return#0 -Constant inlined plus::return#0 = min::return#1 -Constant inlined main::$0 = min::return#1 -Constant inlined plus::return#1 = min::return#1 -Constant inlined min::a#0 = plus::a#0 -Constant inlined min::return#0 = min::return#1 -Constant inlined min::b#0 = plus::b#0 +Inlining constant with var siblings plus::a#0 +Inlining constant with var siblings plus::b#0 +Inlining constant with var siblings plus::a#1 +Inlining constant with var siblings plus::b#1 +Constant inlined plus::b#1 = 6 +Constant inlined plus::b#0 = 7 +Constant inlined plus::a#1 = '1' +Constant inlined plus::a#0 = '0' Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN+1) +Successful SSA optimization Pass2ConstantAdditionElimination Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of plus::@1 -Adding NOP phi() at start of min CALL GRAPH -Calls in [main] to plus:1 -Calls in [plus] to min:5 +Calls in [main] to plus:1 plus:5 +Calls in [plus] to add:13 -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes -Culled Empty Block label plus::@1 +Created 2 initial phi equivalence classes +Coalesced down to 2 phi equivalence classes Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of min FINAL CONTROL FLOW GRAPH @@ -171,59 +175,141 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -__bank(cx16_ram, 2) char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +__bank(cx16_ram, 2) char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return VARIABLE REGISTER WEIGHTS +__bank(cx16_ram, 2) char add(char a , char b) +char add::a +char add::a#0 // 56.0 +char add::b +char add::b#0 // 112.0 +char add::return +char add::return#0 // 22.0 +char add::return#1 // 37.33333333333333 void main() -__bank(cx16_ram, 2) char min(char a , char b) -char min::a -char min::b -char min::return +char main::$0 // 4.0 +char main::$1 // 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a +char plus::a#2 // 11.0 char plus::b +char plus::b#2 // 5.5 char plus::return +char plus::return#0 // 4.0 +char plus::return#1 // 4.0 +char plus::return#2 // 3.75 Initial phi equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable plus::return#1 to live range equivalence class [ plus::return#1 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable add::a#0 to live range equivalence class [ add::a#0 ] +Added variable add::b#0 to live range equivalence class [ add::b#0 ] +Added variable add::return#0 to live range equivalence class [ add::return#0 ] +Added variable plus::return#2 to live range equivalence class [ plus::return#2 ] +Added variable add::return#1 to live range equivalence class [ add::return#1 ] Complete equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +[ plus::return#0 ] +[ main::$0 ] +[ plus::return#1 ] +[ main::$1 ] +[ add::a#0 ] +[ add::b#0 ] +[ add::return#0 ] +[ plus::return#2 ] +[ add::return#1 ] +Allocated zp[1]:2 [ add::b#0 ] +Allocated zp[1]:3 [ add::a#0 ] +Allocated zp[1]:4 [ add::return#1 ] +Allocated zp[1]:5 [ add::return#0 ] +Allocated zp[1]:6 [ plus::a#2 ] +Allocated zp[1]:7 [ plus::b#2 ] +Allocated zp[1]:8 [ plus::return#0 ] +Allocated zp[1]:9 [ main::$0 ] +Allocated zp[1]:10 [ plus::return#1 ] +Allocated zp[1]:11 [ main::$1 ] +Allocated zp[1]:12 [ plus::return#2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:12 [ plus::return#2 ] +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Potential registers zp[1]:6 [ plus::a#2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ plus::b#2 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ plus::return#0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ main::$0 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:10 [ plus::return#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:11 [ main::$1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ add::a#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ add::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ add::return#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:12 [ plus::return#2 ] : zp[1]:12 , reg byte x , reg byte y , +Potential registers zp[1]:4 [ add::return#1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] -Uplift Scope [plus] -Uplift Scope [min] +Uplift Scope [add] 112: zp[1]:2 [ add::b#0 ] 56: zp[1]:3 [ add::a#0 ] 37.33: zp[1]:4 [ add::return#1 ] 22: zp[1]:5 [ add::return#0 ] +Uplift Scope [plus] 11: zp[1]:6 [ plus::a#2 ] 5.5: zp[1]:7 [ plus::b#2 ] 4: zp[1]:8 [ plus::return#0 ] 4: zp[1]:10 [ plus::return#1 ] 3.75: zp[1]:12 [ plus::return#2 ] +Uplift Scope [main] 4: zp[1]:9 [ main::$0 ] 4: zp[1]:11 [ main::$1 ] Uplift Scope [] -Uplifting [main] best 93 combination -Uplifting [plus] best 93 combination -Uplifting [min] best 93 combination -Uplifting [] best 93 combination +Uplifting [add] best 189 combination reg byte a [ add::b#0 ] zp[1]:3 [ add::a#0 ] reg byte a [ add::return#1 ] reg byte a [ add::return#0 ] +Limited combination testing to 100 combinations of 256 possible. +Uplifting [plus] best 161 combination reg byte a [ plus::a#2 ] reg byte x [ plus::b#2 ] reg byte a [ plus::return#0 ] reg byte a [ plus::return#1 ] zp[1]:12 [ plus::return#2 ] +Limited combination testing to 100 combinations of 768 possible. +Uplifting [main] best 149 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] +Uplifting [] best 149 combination +Attempting to uplift remaining variables inzp[1]:3 [ add::a#0 ] +Uplifting [add] best 149 combination zp[1]:3 [ add::a#0 ] +Attempting to uplift remaining variables inzp[1]:12 [ plus::return#2 ] +Uplifting [plus] best 146 combination reg byte x [ plus::return#2 ] +Allocated (was zp[1]:3) zp[1]:2 [ add::a#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -275,94 +361,163 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] plus_from_main: + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa jmp __b1 // main::@1 __b1: - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [3] main::$0 = plus::return#0 + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + plus_from___b1: + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + jmp __b2 + // main::@2 + __b2: + // [7] main::$1 = plus::return#1 + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 jmp __breturn // main::@return __breturn: - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_far_cx16_ram - min_from_plus: + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add -- call_phi_far_cx16_ram jsr $ff6e - .byte min + .byte add .byte 2 + // [14] add::return#0 = add::return#1 + jmp __b1 + // plus::@1 + __b1: + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax jmp __breturn // plus::@return __breturn: - // [6] return + // [16] return rts } .segment RAM_Bank2 - // min -// char min(char a, char b) + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_ram, 2) -min: { - .label return = plus.a+plus.b +add: { + .label a = 2 + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a jmp __breturn - // min::@return + // add::@return __breturn: - // [8] return + // [18] return rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 +Removing instruction jmp __b2 Removing instruction jmp __breturn +Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction plus_from_main: Removing instruction __b1: +Removing instruction plus_from___b1: +Removing instruction __b2: Removing instruction __breturn: -Removing instruction min_from_plus: +Removing instruction __b1: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 +__bank(cx16_ram, 2) char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -__bank(cx16_ram, 2) char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte a [ add::return#1 ] FINAL ASSEMBLER -Score: 54 +Score: 128 // File Comments /** @@ -414,51 +569,99 @@ Score: 54 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa // main::@1 + // [3] main::$0 = plus::return#0 // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // plus('1', 6) + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + // main::@2 + // [7] main::$1 = plus::return#1 + // SCREEN[1] = plus('1', 6) + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 // main::@return // } - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_far_cx16_ram + // add(a, b) + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add -- call_phi_far_cx16_ram jsr $ff6e - .byte min + .byte add .byte 2 + // [14] add::return#0 = add::return#1 + // plus::@1 + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax // plus::@return // } - // [6] return + // [16] return rts } .segment RAM_Bank2 - // min -// char min(char a, char b) + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_ram, 2) -min: { - .label return = plus.a+plus.b - // min::@return - // [8] return +add: { + .label a = 2 + // a+b + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + // add::@return + // } + // [18] return rts } // File Data diff --git a/src/test/ref/call-banked-phi-case-5-far-0.sym b/src/test/ref/call-banked-phi-case-5-far-0.sym index 7c061e559..f777cf8ef 100644 --- a/src/test/ref/call-banked-phi-case-5-far-0.sym +++ b/src/test/ref/call-banked-phi-case-5-far-0.sym @@ -1,14 +1,33 @@ __constant char * const SCREEN = (char *) 1024 +__bank(cx16_ram, 2) char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -__bank(cx16_ram, 2) char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte a [ add::return#1 ] diff --git a/src/test/ref/call-banked-phi-case-5-far-1.asm b/src/test/ref/call-banked-phi-case-5-far-1.asm index 3f168055b..93f4f13c5 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.asm +++ b/src/test/ref/call-banked-phi-case-5-far-1.asm @@ -43,37 +43,68 @@ .segment Code main: { // plus('0', 7) + ldx #7 + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + txa // SCREEN[0] = plus('0', 7) - lda #min.return sta SCREEN + // plus('1', 6) + ldx #6 + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + txa + // SCREEN[1] = plus('1', 6) + // close call + sta SCREEN+1 // } rts } .segment RAM_Bank1 -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) + // add(a, b) + sta.z add.a + txa jsr $ff6e - .byte min + .byte add .byte 2 + tax // } rts } .segment RAM_Bank2 -// char min(char a, char b) +// __register(A) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_ram, 2) -min: { - .label return = plus.a+plus.b +add: { + .label a = 2 + // a+b + clc + adc.z a + // } rts } diff --git a/src/test/ref/call-banked-phi-case-5-far-1.cfg b/src/test/ref/call-banked-phi-case-5-far-1.cfg index 1bdaac9fb..03dfaf36c 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.cfg +++ b/src/test/ref/call-banked-phi-case-5-far-1.cfg @@ -3,27 +3,42 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -__bank(cx16_ram, 2) char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +__bank(cx16_ram, 2) char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return diff --git a/src/test/ref/call-banked-phi-case-5-far-1.log b/src/test/ref/call-banked-phi-case-5-far-1.log index 0be8f5ff7..8844e959f 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.log +++ b/src/test/ref/call-banked-phi-case-5-far-1.log @@ -7,47 +7,56 @@ main: scope:[main] from __start plus::a#0 = '0' plus::b#0 = 7 call plus - plus::return#0 = plus::return#2 + plus::return#0 = plus::return#3 to:main::@1 main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 + plus::return#4 = phi( main/plus::return#0 ) + main::$0 = plus::return#4 SCREEN[0] = main::$0 + plus::a#1 = '1' + plus::b#1 = 6 + call plus + plus::return#1 = plus::return#3 + to:main::@2 +main::@2: scope:[main] from main::@1 + plus::return#5 = phi( main::@1/plus::return#1 ) + main::$1 = plus::return#5 + SCREEN[1] = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 +main::@return: scope:[main] from main::@2 return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - min::a#0 = plus::a#1 - min::b#0 = plus::b#1 - call min - min::return#0 = min::return#2 +plus: scope:[plus] from main main::@1 + plus::b#2 = phi( main/plus::b#0, main::@1/plus::b#1 ) + plus::a#2 = phi( main/plus::a#0, main::@1/plus::a#1 ) + add::a#0 = plus::a#2 + add::b#0 = plus::b#2 + call add + add::return#0 = add::return#2 to:plus::@1 plus::@1: scope:[plus] from plus - min::return#3 = phi( plus/min::return#0 ) - plus::$0 = min::return#3 - plus::return#1 = plus::$0 + add::return#3 = phi( plus/add::return#0 ) + plus::$0 = add::return#3 + plus::return#2 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus::@1 - plus::return#4 = phi( plus::@1/plus::return#1 ) - plus::return#2 = plus::return#4 + plus::return#6 = phi( plus::@1/plus::return#2 ) + plus::return#3 = plus::return#6 return to:@return -__bank(cx16_ram, 2) char min(char a , char b) -min: scope:[min] from plus - min::b#1 = phi( plus/min::b#0 ) - min::a#1 = phi( plus/min::a#0 ) - min::$0 = min::a#1 + min::b#1 - min::return#1 = min::$0 - to:min::@return -min::@return: scope:[min] from min - min::return#4 = phi( min/min::return#1 ) - min::return#2 = min::return#4 +__bank(cx16_ram, 2) char add(char a , char b) +add: scope:[add] from plus + add::b#1 = phi( plus/add::b#0 ) + add::a#1 = phi( plus/add::a#0 ) + add::$0 = add::a#1 + add::b#1 + add::return#1 = add::$0 + to:add::@return +add::@return: scope:[add] from add + add::return#4 = phi( add/add::return#1 ) + add::return#2 = add::return#4 return to:@return @@ -64,64 +73,74 @@ __start::@return: scope:[__start] from __start::@1 SYMBOL TABLE SSA __constant char * const SCREEN = (char *)$400 void __start() +__bank(cx16_ram, 2) char add(char a , char b) +char add::$0 +char add::a +char add::a#0 +char add::a#1 +char add::b +char add::b#0 +char add::b#1 +char add::return +char add::return#0 +char add::return#1 +char add::return#2 +char add::return#3 +char add::return#4 void main() char main::$0 -__bank(cx16_ram, 2) char min(char a , char b) -char min::$0 -char min::a -char min::a#0 -char min::a#1 -char min::b -char min::b#0 -char min::b#1 -char min::return -char min::return#0 -char min::return#1 -char min::return#2 -char min::return#3 -char min::return#4 +char main::$1 __bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 char plus::a#1 +char plus::a#2 char plus::b char plus::b#0 char plus::b#1 +char plus::b#2 char plus::return char plus::return#0 char plus::return#1 char plus::return#2 char plus::return#3 char plus::return#4 +char plus::return#5 +char plus::return#6 Adding number conversion cast (unumber) 7 in plus::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Adding number conversion cast (unumber) 6 in plus::b#1 = 6 +Adding number conversion cast (unumber) 1 in SCREEN[1] = main::$1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast plus::b#0 = (unumber)7 +Inlining cast plus::b#1 = (unumber)6 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (char *) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 0 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 -Alias min::return#0 = min::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 -Alias min::return#1 = min::$0 min::return#4 min::return#2 +Alias plus::return#0 = plus::return#4 +Alias plus::return#1 = plus::return#5 +Alias add::return#0 = add::return#3 +Alias plus::return#2 = plus::$0 plus::return#6 plus::return#3 +Alias add::return#1 = add::$0 add::return#4 add::return#2 Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Identical Phi Values min::a#1 min::a#0 -Identical Phi Values min::b#1 min::b#0 +Identical Phi Values add::a#1 add::a#0 +Identical Phi Values add::b#1 add::b#0 Successful SSA optimization Pass2IdenticalPhiElimination Constant plus::a#0 = '0' Constant plus::b#0 = 7 -Successful SSA optimization Pass2ConstantIdentification -Constant min::a#0 = plus::a#0 -Constant min::b#0 = plus::b#0 +Constant plus::a#1 = '1' +Constant plus::b#1 = 6 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero @@ -130,40 +149,25 @@ Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant min::return#1 = min::a#0+min::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant min::return#0 = min::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#1 = min::return#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings min::return#0 -Constant inlined plus::return#0 = min::return#1 -Constant inlined main::$0 = min::return#1 -Constant inlined plus::return#1 = min::return#1 -Constant inlined min::a#0 = plus::a#0 -Constant inlined min::return#0 = min::return#1 -Constant inlined min::b#0 = plus::b#0 +Inlining constant with var siblings plus::a#0 +Inlining constant with var siblings plus::b#0 +Inlining constant with var siblings plus::a#1 +Inlining constant with var siblings plus::b#1 +Constant inlined plus::b#1 = 6 +Constant inlined plus::b#0 = 7 +Constant inlined plus::a#1 = '1' +Constant inlined plus::a#0 = '0' Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN+1) +Successful SSA optimization Pass2ConstantAdditionElimination Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of plus::@1 -Adding NOP phi() at start of min CALL GRAPH -Calls in [main] to plus:1 -Calls in [plus] to min:5 +Calls in [main] to plus:1 plus:5 +Calls in [plus] to add:13 -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes -Culled Empty Block label plus::@1 +Created 2 initial phi equivalence classes +Coalesced down to 2 phi equivalence classes Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of min FINAL CONTROL FLOW GRAPH @@ -171,59 +175,141 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -__bank(cx16_ram, 2) char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +__bank(cx16_ram, 2) char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return VARIABLE REGISTER WEIGHTS +__bank(cx16_ram, 2) char add(char a , char b) +char add::a +char add::a#0 // 56.0 +char add::b +char add::b#0 // 112.0 +char add::return +char add::return#0 // 22.0 +char add::return#1 // 37.33333333333333 void main() -__bank(cx16_ram, 2) char min(char a , char b) -char min::a -char min::b -char min::return +char main::$0 // 4.0 +char main::$1 // 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a +char plus::a#2 // 11.0 char plus::b +char plus::b#2 // 5.5 char plus::return +char plus::return#0 // 4.0 +char plus::return#1 // 4.0 +char plus::return#2 // 3.75 Initial phi equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable plus::return#1 to live range equivalence class [ plus::return#1 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable add::a#0 to live range equivalence class [ add::a#0 ] +Added variable add::b#0 to live range equivalence class [ add::b#0 ] +Added variable add::return#0 to live range equivalence class [ add::return#0 ] +Added variable plus::return#2 to live range equivalence class [ plus::return#2 ] +Added variable add::return#1 to live range equivalence class [ add::return#1 ] Complete equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +[ plus::return#0 ] +[ main::$0 ] +[ plus::return#1 ] +[ main::$1 ] +[ add::a#0 ] +[ add::b#0 ] +[ add::return#0 ] +[ plus::return#2 ] +[ add::return#1 ] +Allocated zp[1]:2 [ add::b#0 ] +Allocated zp[1]:3 [ add::a#0 ] +Allocated zp[1]:4 [ add::return#1 ] +Allocated zp[1]:5 [ add::return#0 ] +Allocated zp[1]:6 [ plus::a#2 ] +Allocated zp[1]:7 [ plus::b#2 ] +Allocated zp[1]:8 [ plus::return#0 ] +Allocated zp[1]:9 [ main::$0 ] +Allocated zp[1]:10 [ plus::return#1 ] +Allocated zp[1]:11 [ main::$1 ] +Allocated zp[1]:12 [ plus::return#2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:12 [ plus::return#2 ] +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Potential registers zp[1]:6 [ plus::a#2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ plus::b#2 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ plus::return#0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ main::$0 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:10 [ plus::return#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:11 [ main::$1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ add::a#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ add::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ add::return#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:12 [ plus::return#2 ] : zp[1]:12 , reg byte x , reg byte y , +Potential registers zp[1]:4 [ add::return#1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] -Uplift Scope [plus] -Uplift Scope [min] +Uplift Scope [add] 112: zp[1]:2 [ add::b#0 ] 56: zp[1]:3 [ add::a#0 ] 37.33: zp[1]:4 [ add::return#1 ] 22: zp[1]:5 [ add::return#0 ] +Uplift Scope [plus] 11: zp[1]:6 [ plus::a#2 ] 5.5: zp[1]:7 [ plus::b#2 ] 4: zp[1]:8 [ plus::return#0 ] 4: zp[1]:10 [ plus::return#1 ] 3.75: zp[1]:12 [ plus::return#2 ] +Uplift Scope [main] 4: zp[1]:9 [ main::$0 ] 4: zp[1]:11 [ main::$1 ] Uplift Scope [] -Uplifting [main] best 93 combination -Uplifting [plus] best 93 combination -Uplifting [min] best 93 combination -Uplifting [] best 93 combination +Uplifting [add] best 189 combination reg byte a [ add::b#0 ] zp[1]:3 [ add::a#0 ] reg byte a [ add::return#1 ] reg byte a [ add::return#0 ] +Limited combination testing to 100 combinations of 256 possible. +Uplifting [plus] best 161 combination reg byte a [ plus::a#2 ] reg byte x [ plus::b#2 ] reg byte a [ plus::return#0 ] reg byte a [ plus::return#1 ] zp[1]:12 [ plus::return#2 ] +Limited combination testing to 100 combinations of 768 possible. +Uplifting [main] best 149 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] +Uplifting [] best 149 combination +Attempting to uplift remaining variables inzp[1]:3 [ add::a#0 ] +Uplifting [add] best 149 combination zp[1]:3 [ add::a#0 ] +Attempting to uplift remaining variables inzp[1]:12 [ plus::return#2 ] +Uplifting [plus] best 146 combination reg byte x [ plus::return#2 ] +Allocated (was zp[1]:3) zp[1]:2 [ add::a#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -275,94 +361,163 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] plus_from_main: + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa jmp __b1 // main::@1 __b1: - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [3] main::$0 = plus::return#0 + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + plus_from___b1: + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + jmp __b2 + // main::@2 + __b2: + // [7] main::$1 = plus::return#1 + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 jmp __breturn // main::@return __breturn: - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_far_cx16_ram - min_from_plus: + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add -- call_phi_far_cx16_ram jsr $ff6e - .byte min + .byte add .byte 2 + // [14] add::return#0 = add::return#1 + jmp __b1 + // plus::@1 + __b1: + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax jmp __breturn // plus::@return __breturn: - // [6] return + // [16] return rts } .segment RAM_Bank2 - // min -// char min(char a, char b) + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_ram, 2) -min: { - .label return = plus.a+plus.b +add: { + .label a = 2 + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a jmp __breturn - // min::@return + // add::@return __breturn: - // [8] return + // [18] return rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 +Removing instruction jmp __b2 Removing instruction jmp __breturn +Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction plus_from_main: Removing instruction __b1: +Removing instruction plus_from___b1: +Removing instruction __b2: Removing instruction __breturn: -Removing instruction min_from_plus: +Removing instruction __b1: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 +__bank(cx16_ram, 2) char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -__bank(cx16_ram, 2) char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte a [ add::return#1 ] FINAL ASSEMBLER -Score: 54 +Score: 128 // File Comments /** @@ -414,51 +569,99 @@ Score: 54 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa // main::@1 + // [3] main::$0 = plus::return#0 // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // plus('1', 6) + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + // main::@2 + // [7] main::$1 = plus::return#1 + // SCREEN[1] = plus('1', 6) + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 // main::@return // } - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_far_cx16_ram + // add(a, b) + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add -- call_phi_far_cx16_ram jsr $ff6e - .byte min + .byte add .byte 2 + // [14] add::return#0 = add::return#1 + // plus::@1 + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax // plus::@return // } - // [6] return + // [16] return rts } .segment RAM_Bank2 - // min -// char min(char a, char b) + // add +// __register(A) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_ram, 2) -min: { - .label return = plus.a+plus.b - // min::@return - // [8] return +add: { + .label a = 2 + // a+b + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuaa=vbuz1_plus_vbuaa + clc + adc.z a + // add::@return + // } + // [18] return rts } // File Data diff --git a/src/test/ref/call-banked-phi-case-5-far-1.sym b/src/test/ref/call-banked-phi-case-5-far-1.sym index 7c061e559..f777cf8ef 100644 --- a/src/test/ref/call-banked-phi-case-5-far-1.sym +++ b/src/test/ref/call-banked-phi-case-5-far-1.sym @@ -1,14 +1,33 @@ __constant char * const SCREEN = (char *) 1024 +__bank(cx16_ram, 2) char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte a 37.33333333333333 void main() -__bank(cx16_ram, 2) char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte a [ add::return#1 ] diff --git a/src/test/ref/call-banked-phi-case-6-close-0.asm b/src/test/ref/call-banked-phi-case-6-close-0.asm index 32a709284..160ff45fa 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.asm +++ b/src/test/ref/call-banked-phi-case-6-close-0.asm @@ -43,40 +43,77 @@ .segment Code main: { // plus('0', 7) + ldx #7 + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + txa // SCREEN[0] = plus('0', 7) - lda #min.return sta SCREEN + // plus('1', 6) + ldx #6 + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + txa + // SCREEN[1] = plus('1', 6) + // close call + sta SCREEN+1 // } rts } .segment RAM_Bank1 -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) + // add(a, b) + sta.z add.a + txa + sta.z $ff lda.z 1 pha lda #1 sta.z 1 - jsr min + lda.z $ff + jsr add + sta.z $ff pla sta.z 1 + lda.z $ff + txa + tax // } rts } .segment ROM_Bank1 -// char min(char a, char b) +// __register(X) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_rom, 1) -min: { - .label return = plus.a+plus.b +add: { + .label a = 2 + // a+b + clc + adc.z a + tax + // } rts } diff --git a/src/test/ref/call-banked-phi-case-6-close-0.cfg b/src/test/ref/call-banked-phi-case-6-close-0.cfg index 62e999ce1..c10c5c2f7 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.cfg +++ b/src/test/ref/call-banked-phi-case-6-close-0.cfg @@ -3,27 +3,42 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -__bank(cx16_rom, 1) char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +__bank(cx16_rom, 1) char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return diff --git a/src/test/ref/call-banked-phi-case-6-close-0.log b/src/test/ref/call-banked-phi-case-6-close-0.log index d18801d0d..b81bf7d9a 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.log +++ b/src/test/ref/call-banked-phi-case-6-close-0.log @@ -7,47 +7,56 @@ main: scope:[main] from __start plus::a#0 = '0' plus::b#0 = 7 call plus - plus::return#0 = plus::return#2 + plus::return#0 = plus::return#3 to:main::@1 main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 + plus::return#4 = phi( main/plus::return#0 ) + main::$0 = plus::return#4 SCREEN[0] = main::$0 + plus::a#1 = '1' + plus::b#1 = 6 + call plus + plus::return#1 = plus::return#3 + to:main::@2 +main::@2: scope:[main] from main::@1 + plus::return#5 = phi( main::@1/plus::return#1 ) + main::$1 = plus::return#5 + SCREEN[1] = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 +main::@return: scope:[main] from main::@2 return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - min::a#0 = plus::a#1 - min::b#0 = plus::b#1 - call min - min::return#0 = min::return#2 +plus: scope:[plus] from main main::@1 + plus::b#2 = phi( main/plus::b#0, main::@1/plus::b#1 ) + plus::a#2 = phi( main/plus::a#0, main::@1/plus::a#1 ) + add::a#0 = plus::a#2 + add::b#0 = plus::b#2 + call add + add::return#0 = add::return#2 to:plus::@1 plus::@1: scope:[plus] from plus - min::return#3 = phi( plus/min::return#0 ) - plus::$0 = min::return#3 - plus::return#1 = plus::$0 + add::return#3 = phi( plus/add::return#0 ) + plus::$0 = add::return#3 + plus::return#2 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus::@1 - plus::return#4 = phi( plus::@1/plus::return#1 ) - plus::return#2 = plus::return#4 + plus::return#6 = phi( plus::@1/plus::return#2 ) + plus::return#3 = plus::return#6 return to:@return -__bank(cx16_rom, 1) char min(char a , char b) -min: scope:[min] from plus - min::b#1 = phi( plus/min::b#0 ) - min::a#1 = phi( plus/min::a#0 ) - min::$0 = min::a#1 + min::b#1 - min::return#1 = min::$0 - to:min::@return -min::@return: scope:[min] from min - min::return#4 = phi( min/min::return#1 ) - min::return#2 = min::return#4 +__bank(cx16_rom, 1) char add(char a , char b) +add: scope:[add] from plus + add::b#1 = phi( plus/add::b#0 ) + add::a#1 = phi( plus/add::a#0 ) + add::$0 = add::a#1 + add::b#1 + add::return#1 = add::$0 + to:add::@return +add::@return: scope:[add] from add + add::return#4 = phi( add/add::return#1 ) + add::return#2 = add::return#4 return to:@return @@ -64,64 +73,74 @@ __start::@return: scope:[__start] from __start::@1 SYMBOL TABLE SSA __constant char * const SCREEN = (char *)$400 void __start() +__bank(cx16_rom, 1) char add(char a , char b) +char add::$0 +char add::a +char add::a#0 +char add::a#1 +char add::b +char add::b#0 +char add::b#1 +char add::return +char add::return#0 +char add::return#1 +char add::return#2 +char add::return#3 +char add::return#4 void main() char main::$0 -__bank(cx16_rom, 1) char min(char a , char b) -char min::$0 -char min::a -char min::a#0 -char min::a#1 -char min::b -char min::b#0 -char min::b#1 -char min::return -char min::return#0 -char min::return#1 -char min::return#2 -char min::return#3 -char min::return#4 +char main::$1 __bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 char plus::a#1 +char plus::a#2 char plus::b char plus::b#0 char plus::b#1 +char plus::b#2 char plus::return char plus::return#0 char plus::return#1 char plus::return#2 char plus::return#3 char plus::return#4 +char plus::return#5 +char plus::return#6 Adding number conversion cast (unumber) 7 in plus::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Adding number conversion cast (unumber) 6 in plus::b#1 = 6 +Adding number conversion cast (unumber) 1 in SCREEN[1] = main::$1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast plus::b#0 = (unumber)7 +Inlining cast plus::b#1 = (unumber)6 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (char *) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 0 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 -Alias min::return#0 = min::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 -Alias min::return#1 = min::$0 min::return#4 min::return#2 +Alias plus::return#0 = plus::return#4 +Alias plus::return#1 = plus::return#5 +Alias add::return#0 = add::return#3 +Alias plus::return#2 = plus::$0 plus::return#6 plus::return#3 +Alias add::return#1 = add::$0 add::return#4 add::return#2 Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Identical Phi Values min::a#1 min::a#0 -Identical Phi Values min::b#1 min::b#0 +Identical Phi Values add::a#1 add::a#0 +Identical Phi Values add::b#1 add::b#0 Successful SSA optimization Pass2IdenticalPhiElimination Constant plus::a#0 = '0' Constant plus::b#0 = 7 -Successful SSA optimization Pass2ConstantIdentification -Constant min::a#0 = plus::a#0 -Constant min::b#0 = plus::b#0 +Constant plus::a#1 = '1' +Constant plus::b#1 = 6 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero @@ -130,40 +149,25 @@ Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant min::return#1 = min::a#0+min::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant min::return#0 = min::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#1 = min::return#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings min::return#0 -Constant inlined plus::return#0 = min::return#1 -Constant inlined main::$0 = min::return#1 -Constant inlined plus::return#1 = min::return#1 -Constant inlined min::a#0 = plus::a#0 -Constant inlined min::return#0 = min::return#1 -Constant inlined min::b#0 = plus::b#0 +Inlining constant with var siblings plus::a#0 +Inlining constant with var siblings plus::b#0 +Inlining constant with var siblings plus::a#1 +Inlining constant with var siblings plus::b#1 +Constant inlined plus::b#1 = 6 +Constant inlined plus::b#0 = 7 +Constant inlined plus::a#1 = '1' +Constant inlined plus::a#0 = '0' Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN+1) +Successful SSA optimization Pass2ConstantAdditionElimination Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of plus::@1 -Adding NOP phi() at start of min CALL GRAPH -Calls in [main] to plus:1 -Calls in [plus] to min:5 +Calls in [main] to plus:1 plus:5 +Calls in [plus] to add:13 -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes -Culled Empty Block label plus::@1 +Created 2 initial phi equivalence classes +Coalesced down to 2 phi equivalence classes Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of min FINAL CONTROL FLOW GRAPH @@ -171,60 +175,144 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -__bank(cx16_rom, 1) char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +__bank(cx16_rom, 1) char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return VARIABLE REGISTER WEIGHTS +__bank(cx16_rom, 1) char add(char a , char b) +char add::a +char add::a#0 // 56.0 +char add::b +char add::b#0 // 112.0 +char add::return +char add::return#0 // 22.0 +char add::return#1 // 37.33333333333333 void main() -__bank(cx16_rom, 1) char min(char a , char b) -char min::a -char min::b -char min::return +char main::$0 // 4.0 +char main::$1 // 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a +char plus::a#2 // 11.0 char plus::b +char plus::b#2 // 5.5 char plus::return +char plus::return#0 // 4.0 +char plus::return#1 // 4.0 +char plus::return#2 // 3.75 Initial phi equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable plus::return#1 to live range equivalence class [ plus::return#1 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable add::a#0 to live range equivalence class [ add::a#0 ] +Added variable add::b#0 to live range equivalence class [ add::b#0 ] +Added variable add::return#0 to live range equivalence class [ add::return#0 ] +Added variable plus::return#2 to live range equivalence class [ plus::return#2 ] +Added variable add::return#1 to live range equivalence class [ add::return#1 ] Complete equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +[ plus::return#0 ] +[ main::$0 ] +[ plus::return#1 ] +[ main::$1 ] +[ add::a#0 ] +[ add::b#0 ] +[ add::return#0 ] +[ plus::return#2 ] +[ add::return#1 ] +Allocated zp[1]:2 [ add::b#0 ] +Allocated zp[1]:3 [ add::a#0 ] +Allocated zp[1]:4 [ add::return#1 ] +Allocated zp[1]:5 [ add::return#0 ] +Allocated zp[1]:6 [ plus::a#2 ] +Allocated zp[1]:7 [ plus::b#2 ] +Allocated zp[1]:8 [ plus::return#0 ] +Allocated zp[1]:9 [ main::$0 ] +Allocated zp[1]:10 [ plus::return#1 ] +Allocated zp[1]:11 [ main::$1 ] +Allocated zp[1]:12 [ plus::return#2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [5] call min [ ] ( plus:1 [ ] { } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:12 [ plus::return#2 ] +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [13] call add [ add::return#1 ] ( plus:1 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:4 [ add::return#1 ] +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [13] call add [ add::return#1 ] ( plus:1 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Potential registers zp[1]:6 [ plus::a#2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ plus::b#2 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ plus::return#0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ main::$0 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:10 [ plus::return#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:11 [ main::$1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ add::a#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ add::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ add::return#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:12 [ plus::return#2 ] : zp[1]:12 , reg byte x , reg byte y , +Potential registers zp[1]:4 [ add::return#1 ] : zp[1]:4 , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] -Uplift Scope [plus] -Uplift Scope [min] +Uplift Scope [add] 112: zp[1]:2 [ add::b#0 ] 56: zp[1]:3 [ add::a#0 ] 37.33: zp[1]:4 [ add::return#1 ] 22: zp[1]:5 [ add::return#0 ] +Uplift Scope [plus] 11: zp[1]:6 [ plus::a#2 ] 5.5: zp[1]:7 [ plus::b#2 ] 4: zp[1]:8 [ plus::return#0 ] 4: zp[1]:10 [ plus::return#1 ] 3.75: zp[1]:12 [ plus::return#2 ] +Uplift Scope [main] 4: zp[1]:9 [ main::$0 ] 4: zp[1]:11 [ main::$1 ] Uplift Scope [] -Uplifting [main] best 111 combination -Uplifting [plus] best 111 combination -Uplifting [min] best 111 combination -Uplifting [] best 111 combination +Uplifting [add] best 223 combination reg byte a [ add::b#0 ] zp[1]:3 [ add::a#0 ] reg byte x [ add::return#1 ] reg byte a [ add::return#0 ] +Limited combination testing to 100 combinations of 192 possible. +Uplifting [plus] best 195 combination reg byte a [ plus::a#2 ] reg byte x [ plus::b#2 ] reg byte a [ plus::return#0 ] reg byte a [ plus::return#1 ] zp[1]:12 [ plus::return#2 ] +Limited combination testing to 100 combinations of 768 possible. +Uplifting [main] best 183 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] +Uplifting [] best 183 combination +Attempting to uplift remaining variables inzp[1]:3 [ add::a#0 ] +Uplifting [add] best 183 combination zp[1]:3 [ add::a#0 ] +Attempting to uplift remaining variables inzp[1]:12 [ plus::return#2 ] +Uplifting [plus] best 180 combination reg byte x [ plus::return#2 ] +Allocated (was zp[1]:3) zp[1]:2 [ add::a#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -276,97 +364,172 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] plus_from_main: + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa jmp __b1 // main::@1 __b1: - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [3] main::$0 = plus::return#0 + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + plus_from___b1: + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + jmp __b2 + // main::@2 + __b2: + // [7] main::$1 = plus::return#1 + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 jmp __breturn // main::@return __breturn: - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_close_cx16_rom - min_from_plus: + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add -- call_phi_close_cx16_rom + sta.z $ff lda.z 1 pha lda #1 sta.z 1 - jsr min + lda.z $ff + jsr add + sta.z $ff pla sta.z 1 + lda.z $ff + // [14] add::return#0 = add::return#1 -- vbuaa=vbuxx + txa + jmp __b1 + // plus::@1 + __b1: + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax jmp __breturn // plus::@return __breturn: - // [6] return + // [16] return rts } .segment ROM_Bank1 - // min -// char min(char a, char b) + // add +// __register(X) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_rom, 1) -min: { - .label return = plus.a+plus.b +add: { + .label a = 2 + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuxx=vbuz1_plus_vbuaa + clc + adc.z a + tax jmp __breturn - // min::@return + // add::@return __breturn: - // [8] return + // [18] return rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 +Removing instruction jmp __b2 Removing instruction jmp __breturn +Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction plus_from_main: Removing instruction __b1: +Removing instruction plus_from___b1: +Removing instruction __b2: Removing instruction __breturn: -Removing instruction min_from_plus: +Removing instruction __b1: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 +__bank(cx16_rom, 1) char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte x 37.33333333333333 void main() -__bank(cx16_rom, 1) char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte x [ add::return#1 ] FINAL ASSEMBLER -Score: 72 +Score: 162 // File Comments /** @@ -418,54 +581,108 @@ Score: 72 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa // main::@1 + // [3] main::$0 = plus::return#0 // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // plus('1', 6) + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + // main::@2 + // [7] main::$1 = plus::return#1 + // SCREEN[1] = plus('1', 6) + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 // main::@return // } - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_close_cx16_rom + // add(a, b) + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add -- call_phi_close_cx16_rom + sta.z $ff lda.z 1 pha lda #1 sta.z 1 - jsr min + lda.z $ff + jsr add + sta.z $ff pla sta.z 1 + lda.z $ff + // [14] add::return#0 = add::return#1 -- vbuaa=vbuxx + txa + // plus::@1 + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax // plus::@return // } - // [6] return + // [16] return rts } .segment ROM_Bank1 - // min -// char min(char a, char b) + // add +// __register(X) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_rom, 1) -min: { - .label return = plus.a+plus.b - // min::@return - // [8] return +add: { + .label a = 2 + // a+b + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuxx=vbuz1_plus_vbuaa + clc + adc.z a + tax + // add::@return + // } + // [18] return rts } // File Data diff --git a/src/test/ref/call-banked-phi-case-6-close-0.sym b/src/test/ref/call-banked-phi-case-6-close-0.sym index ada067df8..26eed0f1c 100644 --- a/src/test/ref/call-banked-phi-case-6-close-0.sym +++ b/src/test/ref/call-banked-phi-case-6-close-0.sym @@ -1,14 +1,33 @@ __constant char * const SCREEN = (char *) 1024 +__bank(cx16_rom, 1) char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte x 37.33333333333333 void main() -__bank(cx16_rom, 1) char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte x [ add::return#1 ] diff --git a/src/test/ref/call-banked-phi-case-6-close-1.asm b/src/test/ref/call-banked-phi-case-6-close-1.asm index 15769f0b8..89f99c527 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.asm +++ b/src/test/ref/call-banked-phi-case-6-close-1.asm @@ -43,40 +43,77 @@ .segment Code main: { // plus('0', 7) + ldx #7 + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + txa // SCREEN[0] = plus('0', 7) - lda #min.return sta SCREEN + // plus('1', 6) + ldx #6 + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + txa + // SCREEN[1] = plus('1', 6) + // close call + sta SCREEN+1 // } rts } .segment RAM_Bank1 -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) + // add(a, b) + sta.z add.a + txa + sta.z $ff lda.z 1 pha lda #1 sta.z 1 - jsr min + lda.z $ff + jsr add + sta.z $ff pla sta.z 1 + lda.z $ff + txa + tax // } rts } .segment ROM_Bank1 -// char min(char a, char b) +// __register(X) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_rom, 1) -min: { - .label return = plus.a+plus.b +add: { + .label a = 2 + // a+b + clc + adc.z a + tax + // } rts } diff --git a/src/test/ref/call-banked-phi-case-6-close-1.cfg b/src/test/ref/call-banked-phi-case-6-close-1.cfg index 62e999ce1..c10c5c2f7 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.cfg +++ b/src/test/ref/call-banked-phi-case-6-close-1.cfg @@ -3,27 +3,42 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -__bank(cx16_rom, 1) char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +__bank(cx16_rom, 1) char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return diff --git a/src/test/ref/call-banked-phi-case-6-close-1.log b/src/test/ref/call-banked-phi-case-6-close-1.log index ffe2cc66e..c64b16fba 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.log +++ b/src/test/ref/call-banked-phi-case-6-close-1.log @@ -7,47 +7,56 @@ main: scope:[main] from __start plus::a#0 = '0' plus::b#0 = 7 call plus - plus::return#0 = plus::return#2 + plus::return#0 = plus::return#3 to:main::@1 main::@1: scope:[main] from main - plus::return#3 = phi( main/plus::return#0 ) - main::$0 = plus::return#3 + plus::return#4 = phi( main/plus::return#0 ) + main::$0 = plus::return#4 SCREEN[0] = main::$0 + plus::a#1 = '1' + plus::b#1 = 6 + call plus + plus::return#1 = plus::return#3 + to:main::@2 +main::@2: scope:[main] from main::@1 + plus::return#5 = phi( main::@1/plus::return#1 ) + main::$1 = plus::return#5 + SCREEN[1] = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 +main::@return: scope:[main] from main::@2 return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - plus::b#1 = phi( main/plus::b#0 ) - plus::a#1 = phi( main/plus::a#0 ) - min::a#0 = plus::a#1 - min::b#0 = plus::b#1 - call min - min::return#0 = min::return#2 +plus: scope:[plus] from main main::@1 + plus::b#2 = phi( main/plus::b#0, main::@1/plus::b#1 ) + plus::a#2 = phi( main/plus::a#0, main::@1/plus::a#1 ) + add::a#0 = plus::a#2 + add::b#0 = plus::b#2 + call add + add::return#0 = add::return#2 to:plus::@1 plus::@1: scope:[plus] from plus - min::return#3 = phi( plus/min::return#0 ) - plus::$0 = min::return#3 - plus::return#1 = plus::$0 + add::return#3 = phi( plus/add::return#0 ) + plus::$0 = add::return#3 + plus::return#2 = plus::$0 to:plus::@return plus::@return: scope:[plus] from plus::@1 - plus::return#4 = phi( plus::@1/plus::return#1 ) - plus::return#2 = plus::return#4 + plus::return#6 = phi( plus::@1/plus::return#2 ) + plus::return#3 = plus::return#6 return to:@return -__bank(cx16_rom, 1) char min(char a , char b) -min: scope:[min] from plus - min::b#1 = phi( plus/min::b#0 ) - min::a#1 = phi( plus/min::a#0 ) - min::$0 = min::a#1 + min::b#1 - min::return#1 = min::$0 - to:min::@return -min::@return: scope:[min] from min - min::return#4 = phi( min/min::return#1 ) - min::return#2 = min::return#4 +__bank(cx16_rom, 1) char add(char a , char b) +add: scope:[add] from plus + add::b#1 = phi( plus/add::b#0 ) + add::a#1 = phi( plus/add::a#0 ) + add::$0 = add::a#1 + add::b#1 + add::return#1 = add::$0 + to:add::@return +add::@return: scope:[add] from add + add::return#4 = phi( add/add::return#1 ) + add::return#2 = add::return#4 return to:@return @@ -64,64 +73,74 @@ __start::@return: scope:[__start] from __start::@1 SYMBOL TABLE SSA __constant char * const SCREEN = (char *)$400 void __start() +__bank(cx16_rom, 1) char add(char a , char b) +char add::$0 +char add::a +char add::a#0 +char add::a#1 +char add::b +char add::b#0 +char add::b#1 +char add::return +char add::return#0 +char add::return#1 +char add::return#2 +char add::return#3 +char add::return#4 void main() char main::$0 -__bank(cx16_rom, 1) char min(char a , char b) -char min::$0 -char min::a -char min::a#0 -char min::a#1 -char min::b -char min::b#0 -char min::b#1 -char min::return -char min::return#0 -char min::return#1 -char min::return#2 -char min::return#3 -char min::return#4 +char main::$1 __bank(cx16_ram, 1) char plus(char a , char b) char plus::$0 char plus::a char plus::a#0 char plus::a#1 +char plus::a#2 char plus::b char plus::b#0 char plus::b#1 +char plus::b#2 char plus::return char plus::return#0 char plus::return#1 char plus::return#2 char plus::return#3 char plus::return#4 +char plus::return#5 +char plus::return#6 Adding number conversion cast (unumber) 7 in plus::b#0 = 7 Adding number conversion cast (unumber) 0 in SCREEN[0] = main::$0 +Adding number conversion cast (unumber) 6 in plus::b#1 = 6 +Adding number conversion cast (unumber) 1 in SCREEN[1] = main::$1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast plus::b#0 = (unumber)7 +Inlining cast plus::b#1 = (unumber)6 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (char *) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 0 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (char) 7 Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias plus::return#0 = plus::return#3 -Alias min::return#0 = min::return#3 -Alias plus::return#1 = plus::$0 plus::return#4 plus::return#2 -Alias min::return#1 = min::$0 min::return#4 min::return#2 +Alias plus::return#0 = plus::return#4 +Alias plus::return#1 = plus::return#5 +Alias add::return#0 = add::return#3 +Alias plus::return#2 = plus::$0 plus::return#6 plus::return#3 +Alias add::return#1 = add::$0 add::return#4 add::return#2 Successful SSA optimization Pass2AliasElimination -Identical Phi Values plus::a#1 plus::a#0 -Identical Phi Values plus::b#1 plus::b#0 -Identical Phi Values min::a#1 min::a#0 -Identical Phi Values min::b#1 min::b#0 +Identical Phi Values add::a#1 add::a#0 +Identical Phi Values add::b#1 add::b#0 Successful SSA optimization Pass2IdenticalPhiElimination Constant plus::a#0 = '0' Constant plus::b#0 = 7 -Successful SSA optimization Pass2ConstantIdentification -Constant min::a#0 = plus::a#0 -Constant min::b#0 = plus::b#0 +Constant plus::a#1 = '1' +Constant plus::b#1 = 6 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero SCREEN in [5] SCREEN[0] = main::$0 Successful SSA optimization PassNSimplifyExpressionWithZero @@ -130,40 +149,25 @@ Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart -Constant right-side identified [9] min::return#1 = min::a#0 + min::b#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant min::return#1 = min::a#0+min::b#0 -Successful SSA optimization Pass2ConstantIdentification -Constant min::return#0 = min::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#1 = min::return#0 -Successful SSA optimization Pass2ConstantIdentification -Constant plus::return#0 = plus::return#1 -Successful SSA optimization Pass2ConstantIdentification -Constant main::$0 = plus::return#0 -Successful SSA optimization Pass2ConstantIdentification -Inlining constant with different constant siblings min::return#0 -Constant inlined plus::return#0 = min::return#1 -Constant inlined main::$0 = min::return#1 -Constant inlined plus::return#1 = min::return#1 -Constant inlined min::a#0 = plus::a#0 -Constant inlined min::return#0 = min::return#1 -Constant inlined min::b#0 = plus::b#0 +Inlining constant with var siblings plus::a#0 +Inlining constant with var siblings plus::b#0 +Inlining constant with var siblings plus::a#1 +Inlining constant with var siblings plus::b#1 +Constant inlined plus::b#1 = 6 +Constant inlined plus::b#0 = 7 +Constant inlined plus::a#1 = '1' +Constant inlined plus::a#0 = '0' Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN+1) +Successful SSA optimization Pass2ConstantAdditionElimination Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of plus::@1 -Adding NOP phi() at start of min CALL GRAPH -Calls in [main] to plus:1 -Calls in [plus] to min:5 +Calls in [main] to plus:1 plus:5 +Calls in [plus] to add:13 -Created 0 initial phi equivalence classes -Coalesced down to 0 phi equivalence classes -Culled Empty Block label plus::@1 +Created 2 initial phi equivalence classes +Coalesced down to 2 phi equivalence classes Adding NOP phi() at start of main -Adding NOP phi() at start of plus -Adding NOP phi() at start of min FINAL CONTROL FLOW GRAPH @@ -171,60 +175,144 @@ void main() main: scope:[main] from [0] phi() [1] call plus + [2] plus::return#0 = plus::return#2 to:main::@1 main::@1: scope:[main] from main - [2] *SCREEN = min::return#1 + [3] main::$0 = plus::return#0 + [4] *SCREEN = main::$0 + [5] call plus + [6] plus::return#1 = plus::return#2 + to:main::@2 +main::@2: scope:[main] from main::@1 + [7] main::$1 = plus::return#1 + [8] *(SCREEN+1) = main::$1 to:main::@return -main::@return: scope:[main] from main::@1 - [3] return +main::@return: scope:[main] from main::@2 + [9] return to:@return __bank(cx16_ram, 1) char plus(char a , char b) -plus: scope:[plus] from main - [4] phi() - [5] call min +plus: scope:[plus] from main main::@1 + [10] plus::b#2 = phi( main/7, main::@1/6 ) + [10] plus::a#2 = phi( main/'0', main::@1/'1' ) + [11] add::a#0 = plus::a#2 + [12] add::b#0 = plus::b#2 + [13] call add + [14] add::return#0 = add::return#1 + to:plus::@1 +plus::@1: scope:[plus] from plus + [15] plus::return#2 = add::return#0 to:plus::@return -plus::@return: scope:[plus] from plus - [6] return +plus::@return: scope:[plus] from plus::@1 + [16] return to:@return -__bank(cx16_rom, 1) char min(char a , char b) -min: scope:[min] from plus - [7] phi() - to:min::@return -min::@return: scope:[min] from min - [8] return +__bank(cx16_rom, 1) char add(char a , char b) +add: scope:[add] from plus + [17] add::return#1 = add::a#0 + add::b#0 + to:add::@return +add::@return: scope:[add] from add + [18] return to:@return VARIABLE REGISTER WEIGHTS +__bank(cx16_rom, 1) char add(char a , char b) +char add::a +char add::a#0 // 56.0 +char add::b +char add::b#0 // 112.0 +char add::return +char add::return#0 // 22.0 +char add::return#1 // 37.33333333333333 void main() -__bank(cx16_rom, 1) char min(char a , char b) -char min::a -char min::b -char min::return +char main::$0 // 4.0 +char main::$1 // 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a +char plus::a#2 // 11.0 char plus::b +char plus::b#2 // 5.5 char plus::return +char plus::return#0 // 4.0 +char plus::return#1 // 4.0 +char plus::return#2 // 3.75 Initial phi equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable plus::return#1 to live range equivalence class [ plus::return#1 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable add::a#0 to live range equivalence class [ add::a#0 ] +Added variable add::b#0 to live range equivalence class [ add::b#0 ] +Added variable add::return#0 to live range equivalence class [ add::return#0 ] +Added variable plus::return#2 to live range equivalence class [ plus::return#2 ] +Added variable add::return#1 to live range equivalence class [ add::return#1 ] Complete equivalence classes +[ plus::a#2 ] +[ plus::b#2 ] +[ plus::return#0 ] +[ main::$0 ] +[ plus::return#1 ] +[ main::$1 ] +[ add::a#0 ] +[ add::b#0 ] +[ add::return#0 ] +[ plus::return#2 ] +[ add::return#1 ] +Allocated zp[1]:2 [ add::b#0 ] +Allocated zp[1]:3 [ add::a#0 ] +Allocated zp[1]:4 [ add::return#1 ] +Allocated zp[1]:5 [ add::return#0 ] +Allocated zp[1]:6 [ plus::a#2 ] +Allocated zp[1]:7 [ plus::b#2 ] +Allocated zp[1]:8 [ plus::return#0 ] +Allocated zp[1]:9 [ main::$0 ] +Allocated zp[1]:10 [ plus::return#1 ] +Allocated zp[1]:11 [ main::$1 ] +Allocated zp[1]:12 [ plus::return#2 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] call plus [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] *SCREEN = min::return#1 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [5] call min [ ] ( plus:1 [ ] { } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:12 [ plus::return#2 ] +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [13] call add [ add::return#1 ] ( plus:1 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:4 [ add::return#1 ] +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Statement [1] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [5] call plus [ plus::return#2 ] ( [ plus::return#2 ] { { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [13] call add [ add::return#1 ] ( plus:1 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Statement [17] add::return#1 = add::a#0 + add::b#0 [ add::return#1 ] ( plus:1::add:13 [ add::return#1 ] { { plus::return#0 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } plus:5::add:13 [ add::return#1 ] { { plus::return#1 = plus::return#2 } { add::a#0 = plus::a#2 } { add::b#0 = plus::b#2 } { add::return#0 = add::return#1 } } ) always clobbers reg byte a +Potential registers zp[1]:6 [ plus::a#2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ plus::b#2 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:8 [ plus::return#0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:9 [ main::$0 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:10 [ plus::return#1 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:11 [ main::$1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ add::a#0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:2 [ add::b#0 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ add::return#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:12 [ plus::return#2 ] : zp[1]:12 , reg byte x , reg byte y , +Potential registers zp[1]:4 [ add::return#1 ] : zp[1]:4 , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] -Uplift Scope [plus] -Uplift Scope [min] +Uplift Scope [add] 112: zp[1]:2 [ add::b#0 ] 56: zp[1]:3 [ add::a#0 ] 37.33: zp[1]:4 [ add::return#1 ] 22: zp[1]:5 [ add::return#0 ] +Uplift Scope [plus] 11: zp[1]:6 [ plus::a#2 ] 5.5: zp[1]:7 [ plus::b#2 ] 4: zp[1]:8 [ plus::return#0 ] 4: zp[1]:10 [ plus::return#1 ] 3.75: zp[1]:12 [ plus::return#2 ] +Uplift Scope [main] 4: zp[1]:9 [ main::$0 ] 4: zp[1]:11 [ main::$1 ] Uplift Scope [] -Uplifting [main] best 111 combination -Uplifting [plus] best 111 combination -Uplifting [min] best 111 combination -Uplifting [] best 111 combination +Uplifting [add] best 223 combination reg byte a [ add::b#0 ] zp[1]:3 [ add::a#0 ] reg byte x [ add::return#1 ] reg byte a [ add::return#0 ] +Limited combination testing to 100 combinations of 192 possible. +Uplifting [plus] best 195 combination reg byte a [ plus::a#2 ] reg byte x [ plus::b#2 ] reg byte a [ plus::return#0 ] reg byte a [ plus::return#1 ] zp[1]:12 [ plus::return#2 ] +Limited combination testing to 100 combinations of 768 possible. +Uplifting [main] best 183 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] +Uplifting [] best 183 combination +Attempting to uplift remaining variables inzp[1]:3 [ add::a#0 ] +Uplifting [add] best 183 combination zp[1]:3 [ add::a#0 ] +Attempting to uplift remaining variables inzp[1]:12 [ plus::return#2 ] +Uplifting [plus] best 180 combination reg byte x [ plus::return#2 ] +Allocated (was zp[1]:3) zp[1]:2 [ add::a#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -276,97 +364,172 @@ ASSEMBLER BEFORE OPTIMIZATION // main main: { // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] plus_from_main: + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa jmp __b1 // main::@1 __b1: - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [3] main::$0 = plus::return#0 + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + plus_from___b1: + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + jmp __b2 + // main::@2 + __b2: + // [7] main::$1 = plus::return#1 + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 jmp __breturn // main::@return __breturn: - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_close_cx16_rom - min_from_plus: + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add -- call_phi_close_cx16_rom + sta.z $ff lda.z 1 pha lda #1 sta.z 1 - jsr min + lda.z $ff + jsr add + sta.z $ff pla sta.z 1 + lda.z $ff + // [14] add::return#0 = add::return#1 -- vbuaa=vbuxx + txa + jmp __b1 + // plus::@1 + __b1: + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax jmp __breturn // plus::@return __breturn: - // [6] return + // [16] return rts } .segment ROM_Bank1 - // min -// char min(char a, char b) + // add +// __register(X) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_rom, 1) -min: { - .label return = plus.a+plus.b +add: { + .label a = 2 + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuxx=vbuz1_plus_vbuaa + clc + adc.z a + tax jmp __breturn - // min::@return + // add::@return __breturn: - // [8] return + // [18] return rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 +Removing instruction jmp __b2 Removing instruction jmp __breturn +Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction plus_from_main: Removing instruction __b1: +Removing instruction plus_from___b1: +Removing instruction __b2: Removing instruction __breturn: -Removing instruction min_from_plus: +Removing instruction __b1: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 +__bank(cx16_rom, 1) char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte x 37.33333333333333 void main() -__bank(cx16_rom, 1) char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte x [ add::return#1 ] FINAL ASSEMBLER -Score: 72 +Score: 162 // File Comments /** @@ -418,54 +581,108 @@ Score: 72 main: { // plus('0', 7) // [1] call plus - // [4] phi from main to plus [phi:main->plus] -- call_phi_close_cx16_ram + // [10] phi from main to plus [phi:main->plus] + // [10] phi plus::b#2 = 7 [phi:main->plus#0] -- vbuxx=vbuc1 + ldx #7 + // [10] phi plus::a#2 = '0' [phi:main->plus#1] -- call_phi_close_cx16_ram + lda #'0' + sta.z $ff lda.z 0 pha lda #1 sta.z 0 + lda.z $ff jsr plus + sta.z $ff pla sta.z 0 + lda.z $ff + // plus('0', 7) + // [2] plus::return#0 = plus::return#2 -- vbuaa=vbuxx + txa // main::@1 + // [3] main::$0 = plus::return#0 // SCREEN[0] = plus('0', 7) - // [2] *SCREEN = min::return#1 -- _deref_pbuc1=vbuc2 - lda #min.return + // [4] *SCREEN = main::$0 -- _deref_pbuc1=vbuaa sta SCREEN + // plus('1', 6) + // [5] call plus + // [10] phi from main::@1 to plus [phi:main::@1->plus] + // [10] phi plus::b#2 = 6 [phi:main::@1->plus#0] -- vbuxx=vbuc1 + ldx #6 + // [10] phi plus::a#2 = '1' [phi:main::@1->plus#1] -- call_phi_close_cx16_ram + lda #'1' + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus('1', 6) + // [6] plus::return#1 = plus::return#2 -- vbuaa=vbuxx + txa + // main::@2 + // [7] main::$1 = plus::return#1 + // SCREEN[1] = plus('1', 6) + // [8] *(SCREEN+1) = main::$1 -- _deref_pbuc1=vbuaa + // close call + sta SCREEN+1 // main::@return // } - // [3] return + // [9] return rts } .segment RAM_Bank1 // plus -// char plus(char a, char b) +// __register(X) char plus(__register(A) char a, __register(X) char b) // __bank(cx16_ram, 1) plus: { - .label a = '0' - .label b = 7 - // min(a, b) - // [5] call min - // [7] phi from plus to min [phi:plus->min] -- call_phi_close_cx16_rom + // add(a, b) + // [11] add::a#0 = plus::a#2 -- vbuz1=vbuaa + sta.z add.a + // [12] add::b#0 = plus::b#2 -- vbuaa=vbuxx + txa + // [13] call add -- call_phi_close_cx16_rom + sta.z $ff lda.z 1 pha lda #1 sta.z 1 - jsr min + lda.z $ff + jsr add + sta.z $ff pla sta.z 1 + lda.z $ff + // [14] add::return#0 = add::return#1 -- vbuaa=vbuxx + txa + // plus::@1 + // [15] plus::return#2 = add::return#0 -- vbuxx=vbuaa + tax // plus::@return // } - // [6] return + // [16] return rts } .segment ROM_Bank1 - // min -// char min(char a, char b) + // add +// __register(X) char add(__zp(2) char a, __register(A) char b) // __bank(cx16_rom, 1) -min: { - .label return = plus.a+plus.b - // min::@return - // [8] return +add: { + .label a = 2 + // a+b + // [17] add::return#1 = add::a#0 + add::b#0 -- vbuxx=vbuz1_plus_vbuaa + clc + adc.z a + tax + // add::@return + // } + // [18] return rts } // File Data diff --git a/src/test/ref/call-banked-phi-case-6-close-1.sym b/src/test/ref/call-banked-phi-case-6-close-1.sym index ada067df8..26eed0f1c 100644 --- a/src/test/ref/call-banked-phi-case-6-close-1.sym +++ b/src/test/ref/call-banked-phi-case-6-close-1.sym @@ -1,14 +1,33 @@ __constant char * const SCREEN = (char *) 1024 +__bank(cx16_rom, 1) char add(char a , char b) +char add::a +char add::a#0 // a zp[1]:2 56.0 +char add::b +char add::b#0 // reg byte a 112.0 +char add::return +char add::return#0 // reg byte a 22.0 +char add::return#1 // reg byte x 37.33333333333333 void main() -__bank(cx16_rom, 1) char min(char a , char b) -char min::a -char min::b -char min::return -__constant char min::return#1 = plus::a#0+plus::b#0 // return +char main::$0 // reg byte a 4.0 +char main::$1 // reg byte a 4.0 __bank(cx16_ram, 1) char plus(char a , char b) char plus::a -__constant char plus::a#0 = '0' // a +char plus::a#2 // reg byte a 11.0 char plus::b -__constant char plus::b#0 = 7 // b +char plus::b#2 // reg byte x 5.5 char plus::return +char plus::return#0 // reg byte a 4.0 +char plus::return#1 // reg byte a 4.0 +char plus::return#2 // reg byte x 3.75 +reg byte a [ plus::a#2 ] +reg byte x [ plus::b#2 ] +reg byte a [ plus::return#0 ] +reg byte a [ main::$0 ] +reg byte a [ plus::return#1 ] +reg byte a [ main::$1 ] +zp[1]:2 [ add::a#0 ] +reg byte a [ add::b#0 ] +reg byte a [ add::return#0 ] +reg byte x [ plus::return#2 ] +reg byte x [ add::return#1 ] From 9f3ca81e6a518773efb5b256300756da0f653c07 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 23 Apr 2023 20:37:37 +0200 Subject: [PATCH 58/66] Refactored proximity. --- .../AsmFragmentInstanceSpecBuilder.java | 9 +- .../signature/AsmFragmentSignature.java | 17 ++-- .../kickc/model/symbols/Procedure.java | 99 +++++-------------- .../kickc/passes/Pass4CodeGeneration.java | 16 ++- 4 files changed, 44 insertions(+), 97 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java index a3ca5bddc..30afba97c 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java @@ -13,6 +13,7 @@ import dk.camelot64.kickc.model.operators.OperatorBinary; import dk.camelot64.kickc.model.operators.OperatorUnary; import dk.camelot64.kickc.model.operators.Operators; import dk.camelot64.kickc.model.statements.*; +import dk.camelot64.kickc.model.symbols.Bank; import dk.camelot64.kickc.model.symbols.Label; import dk.camelot64.kickc.model.symbols.Procedure; import dk.camelot64.kickc.model.symbols.Symbol; @@ -51,17 +52,15 @@ final public class AsmFragmentInstanceSpecBuilder { * @param program The program * @return the fragment instance spec factory */ - public static AsmFragmentInstanceSpec callBanked(Procedure.CallingDistance callingDistance, String callingConvention, String procedureName, Program program) { + public static AsmFragmentInstanceSpec callBanked(String callingConvention, Procedure.CallingProximity proximity, Bank toBank, String procedureName, Program program) { AsmFragmentBindings bindings = new AsmFragmentBindings(program); - AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked(callingDistance, callingConvention); + AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked(callingConvention, proximity, toBank); ScopeRef codeScope = program.getScope().getRef(); - bindings.bind("c1", new ConstantInteger(callingDistance.getBankNumber())); + bindings.bind("c1", new ConstantInteger(toBank.bankNumber())); bindings.bind("la1", new LabelRef(procedureName)); return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); } - - /** * Create a fragment instance spec factory for an interrupt routine entry * diff --git a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java index 509680120..4b37b89a5 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java +++ b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java @@ -2,6 +2,7 @@ package dk.camelot64.kickc.fragment.signature; import dk.camelot64.kickc.asm.fragment.signature.AsmFragmentSignatureLexer; import dk.camelot64.kickc.asm.fragment.signature.AsmFragmentSignatureParser; +import dk.camelot64.kickc.model.symbols.Bank; import dk.camelot64.kickc.model.symbols.Procedure; import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.CharStreams; @@ -55,7 +56,7 @@ public interface AsmFragmentSignature { } /** - * ASM fragment signature for a conditional jump if(A) goto B. + * ASM fragment signature for a call */ class Call implements AsmFragmentSignature { @@ -72,21 +73,25 @@ public interface AsmFragmentSignature { } /** - * ASM fragment signature for a banked jsr if(A) goto B. + * ASM fragment signature for a banked call */ class CallBanked implements AsmFragmentSignature { - final private Procedure.CallingDistance callingDistance; final private String callingConvention; - public CallBanked(Procedure.CallingDistance callingDistance, String callingConvention) { - this.callingDistance = callingDistance; + final private Procedure.CallingProximity proximity; + + final private Bank toBank; + + public CallBanked(String callingConvention, Procedure.CallingProximity proximity, Bank toBank) { this.callingConvention = callingConvention; + this.proximity = proximity; + this.toBank = toBank; } @Override public String getName() { - return "call_" + callingConvention.toLowerCase() + "_" + callingDistance.getFragmentName().toLowerCase(); + return "call_" + callingConvention.toLowerCase() + "_" + proximity.toString().toLowerCase() + (proximity.equals(Procedure.CallingProximity.NEAR)?"":("_"+toBank.bankArea())); } } 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 40da8c1d2..4252fb9d6 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -65,88 +65,33 @@ public class Procedure extends Scope { this.bank = bank; } + /** The different distances between banked code, which will determine the type of call needed. */ public enum CallingProximity { - NEAR("near"), - CLOSE("close"), - FAR("far"); + /** No bank change is needed. Caller and callee are both in the same bank or in the common bank. */ + NEAR, + /** A direct bank change is needed. Caller is in the common bank or a different banking area. */ + CLOSE, + /** A trampoline bank change is needed. Caller and callee are different banks of the same banking area. */ + FAR; - public String getProximity() { - return proximity; - } - - private final String proximity; - - CallingProximity(String proximity) { - this.proximity = proximity; - } - } - - /** The method for expressing the call distance to implement banking - * - * The following variations exist related to banked calls: - * - #1 - unbanked to unbanked and no banking areas - * - #2 - unbanked to banked to any bank area - * - #3 - banked to unbanked from any bank area - * - #4 - banked to same bank in same bank area - * - #5 - banked to different bank in same bank area - * - #6 - banked to any bank between different bank areas - * - * This brings us to the call types: - * - CallingDistance.NEAR - case #1, #3, #4 - * - CallingDistance.CLOSE - case #2, #6 - * - CallingDistance.FAR - case #5 - */ - public static class CallingDistance { - - private CallingProximity proximity; - private String bankArea; - private Long bank; - - public CallingProximity getProximity() { - return proximity; - } - - public String getBankArea() { - return bankArea; - } - - public Long getBankNumber() { - return bank; - } - - - public CallingDistance(Procedure from, Procedure to) { - if (((!from.isBanked() && !to.isBanked())) || - ((from.isBanked() && !to.isBanked())) || - ((from.isBanked() && to.isBanked()) && - (from.getBankNumber() == to.getBankNumber()) && - (from.getBankArea().contentEquals(to.getBankArea())) - ) - ) { - // near call - case #1, #3, #4 - this.proximity = CallingProximity.NEAR; - this.bankArea = ""; - this.bank = 0L; + public static CallingProximity forCall(Bank from, Bank to) { + if(to==null) { + // NEAR: call to the common bank + return NEAR; + } else if(to.equals(from)) { + // NEAR: call to the same bank in the same banking area + return NEAR; + } else if(from==null) { + // CLOSE: call from common bank to any bank + return CLOSE; + } else if(!from.bankArea().equals(to.bankArea())) { + // CLOSE: from one banking area to another + return CLOSE; } else { - if ((!from.isBanked() && to.isBanked()) || - ((from.isBanked() && to.isBanked()) && (!from.getBankArea().contentEquals(to.getBankArea()))) - ) { - // close call - case #2, #6 - this.proximity = CallingProximity.CLOSE; - this.bankArea = to.getBankArea(); - this.bank = to.getBankNumber(); - } else { - // far call - case #5 - this.proximity = CallingProximity.FAR; - this.bankArea = to.getBankArea(); - this.bank = to.getBankNumber(); - } + // FAR: banked to different bank in same bank area + return FAR; } } - - public String getFragmentName() { - return this.proximity.getProximity() + (this.bankArea.isEmpty() ? "" : "_" + this.bankArea); - } } /** The method for passing parameters and return value to the procedure. */ diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 1aaaa8c49..2211d4fd1 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -891,7 +891,6 @@ public class Pass4CodeGeneration { } } else if (Procedure.CallingConvention.PHI_CALL.equals(toProcedure.getCallingConvention())) { // Generate PHI transition - boolean generatedPhis = false; if (genCallPhiEntry) { ControlFlowBlock callSuccessor = getGraph().getCallSuccessor(block); if (callSuccessor != null && callSuccessor.hasPhiBlock()) { @@ -900,18 +899,17 @@ public class Pass4CodeGeneration { throw new InternalError("Error! JSR transition already generated. Must modify PhiTransitions code to ensure this does not happen."); } genBlockPhiTransition(asm, block, callSuccessor, block.getScope()); - generatedPhis = true; } } - final Procedure.CallingDistance callingDistance = new Procedure.CallingDistance(fromProcedure, toProcedure); - if(Procedure.CallingProximity.NEAR.equals(callingDistance.getProximity())) { + final Procedure.CallingProximity callingProximity = Procedure.CallingProximity.forCall(fromProcedure.getBank(), toProcedure.getBank()); + if(Procedure.CallingProximity.NEAR.equals(callingProximity)) { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } else { - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked(callingDistance,"phi", call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked("phi", callingProximity, toProcedure.getBank(), call.getProcedure().getFullName(), program), program); } } else if (Procedure.CallingConvention.STACK_CALL.equals(toProcedure.getCallingConvention())) { - final Procedure.CallingDistance callingDistance = new Procedure.CallingDistance(fromProcedure, toProcedure); - if(Procedure.CallingProximity.NEAR.equals(callingDistance.getProximity())) { + final Procedure.CallingProximity callingProximity = Procedure.CallingProximity.forCall(fromProcedure.getBank(), toProcedure.getBank()); + if(Procedure.CallingProximity.NEAR.equals(callingProximity)) { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } else { throw new CompileError("Stack Call procedure not supported in banked mode " + toProcedure.toString(program)); @@ -924,8 +922,8 @@ public class Pass4CodeGeneration { ProgramScope scope = getScope(); Procedure toProcedure = scope.getProcedure(procedureRef); Procedure fromProcedure = block.getProcedure(this.program); - final Procedure.CallingDistance callingDistance = new Procedure.CallingDistance(fromProcedure, toProcedure); - if(Procedure.CallingProximity.NEAR.equals(callingDistance.getProximity())) { + final Procedure.CallingProximity callingProximity = Procedure.CallingProximity.forCall(fromProcedure.getBank(), toProcedure.getBank()); + if(Procedure.CallingProximity.NEAR.equals(callingProximity)) { AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); } else { throw new CompileError("Stack Call procedure not supported in banked mode " + toProcedure.toString(program)); From eb69af8fe7b6f14124167854cfadcf36fe4897ee Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 23 Apr 2023 20:54:22 +0200 Subject: [PATCH 59/66] Refactored calling convention. --- .../AsmFragmentInstanceSpecBuilder.java | 18 ++++++++------ .../signature/AsmFragmentSignature.java | 12 ++++------ .../kickc/model/symbols/Procedure.java | 24 +++++++++++++++---- .../kickc/passes/Pass4CodeGeneration.java | 2 +- 4 files changed, 36 insertions(+), 20 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java index 30afba97c..280c4811d 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java @@ -44,17 +44,21 @@ final public class AsmFragmentInstanceSpecBuilder { } /** - * Create a fragment instance spec factory for a subroutine call + * Create a fragment instance spec factory for a banked call * - * @param callingDistance The class expressing the distance of the call: "near", "close", "far" plus bankArea and bank information calculated from the from and to procedure. - * @param callingConvention The string expressing the calling convention supported by the fragment. - * @param procedureName The full name of the procedure. - * @param program The program + * @param callingConvention The calling convention + * @param proximity The calling distance of the call + * @param toBank The bank of the procedure being called + * @param procedureName The full name of the procedure being called. + * @param program The program * @return the fragment instance spec factory */ - public static AsmFragmentInstanceSpec callBanked(String callingConvention, Procedure.CallingProximity proximity, Bank toBank, String procedureName, Program program) { + public static AsmFragmentInstanceSpec callBanked(Procedure.CallingConvention callingConvention, Procedure.CallingProximity proximity, Bank toBank, String procedureName, Program program) { AsmFragmentBindings bindings = new AsmFragmentBindings(program); - AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked(callingConvention, proximity, toBank); + AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked( + callingConvention.getShortName(), + proximity.toString(), + (proximity.equals(Procedure.CallingProximity.NEAR)?null:toBank.bankArea())); ScopeRef codeScope = program.getScope().getRef(); bindings.bind("c1", new ConstantInteger(toBank.bankNumber())); bindings.bind("la1", new LabelRef(procedureName)); diff --git a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java index 4b37b89a5..1a4a3f596 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java +++ b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java @@ -2,8 +2,6 @@ package dk.camelot64.kickc.fragment.signature; import dk.camelot64.kickc.asm.fragment.signature.AsmFragmentSignatureLexer; import dk.camelot64.kickc.asm.fragment.signature.AsmFragmentSignatureParser; -import dk.camelot64.kickc.model.symbols.Bank; -import dk.camelot64.kickc.model.symbols.Procedure; import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; @@ -79,19 +77,19 @@ public interface AsmFragmentSignature { final private String callingConvention; - final private Procedure.CallingProximity proximity; + final private String proximity; - final private Bank toBank; + final private String toBankArea; - public CallBanked(String callingConvention, Procedure.CallingProximity proximity, Bank toBank) { + public CallBanked(String callingConvention, String proximity, String toBankArea) { this.callingConvention = callingConvention; this.proximity = proximity; - this.toBank = toBank; + this.toBankArea = toBankArea; } @Override public String getName() { - return "call_" + callingConvention.toLowerCase() + "_" + proximity.toString().toLowerCase() + (proximity.equals(Procedure.CallingProximity.NEAR)?"":("_"+toBank.bankArea())); + return "call_" + callingConvention + "_" + proximity + ((toBankArea==null)?"":("_"+toBankArea)); } } 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 4252fb9d6..ac2599c55 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -74,6 +74,7 @@ public class Procedure extends Scope { /** A trampoline bank change is needed. Caller and callee are different banks of the same banking area. */ FAR; + public static CallingProximity forCall(Bank from, Bank to) { if(to==null) { // NEAR: call to the common bank @@ -92,29 +93,42 @@ public class Procedure extends Scope { return FAR; } } + + @Override + public String toString() { + return name().toLowerCase(); + } + } /** The method for passing parameters and return value to the procedure. */ public enum CallingConvention { /** Parameters and return value handled through PHI-transitions. */ - PHI_CALL("__phicall"), + PHI_CALL("__phicall", "phi"), /** Parameters and return value over the stack. */ - STACK_CALL("__stackcall"), + STACK_CALL("__stackcall", "stack"), /** Parameters and return value handled through shared variables. */ - VAR_CALL("__varcall"), + VAR_CALL("__varcall", "var"), /** Intrinsic calling. Will be converted to intrinsic ASM late in the compile. */ - INTRINSIC_CALL("__intrinsiccall"); + INTRINSIC_CALL("__intrinsiccall", "intrinsic"); private final String name; - CallingConvention(String name) { + private final String shortName; + + CallingConvention(String name, String shortName) { this.name = name; + this.shortName = shortName; } public String getName() { return name; } + public String getShortName() { + return shortName; + } + /** Get a calling convention by name. */ public static CallingConvention getCallingConvension(String name) { for(CallingConvention value : CallingConvention.values()) { diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 2211d4fd1..81fefaad9 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -905,7 +905,7 @@ public class Pass4CodeGeneration { if(Procedure.CallingProximity.NEAR.equals(callingProximity)) { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } else { - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked("phi", callingProximity, toProcedure.getBank(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked(Procedure.CallingConvention.PHI_CALL, callingProximity, toProcedure.getBank(), call.getProcedure().getFullName(), program), program); } } else if (Procedure.CallingConvention.STACK_CALL.equals(toProcedure.getCallingConvention())) { final Procedure.CallingProximity callingProximity = Procedure.CallingProximity.forCall(fromProcedure.getBank(), toProcedure.getBank()); From 8c7a144579979bd2d0eb053e8f2ff463dc7f9ada Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 23 Apr 2023 21:07:16 +0200 Subject: [PATCH 60/66] Refactored calling distance. --- .../AsmFragmentInstanceSpecBuilder.java | 17 ++++++++--------- .../signature/AsmFragmentSignature.java | 8 ++++---- .../kickc/model/symbols/Procedure.java | 17 ++++++++--------- .../kickc/passes/Pass4CodeGeneration.java | 14 +++++++------- 4 files changed, 27 insertions(+), 29 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java index 280c4811d..a3dc6c1c9 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java @@ -46,22 +46,21 @@ final public class AsmFragmentInstanceSpecBuilder { /** * Create a fragment instance spec factory for a banked call * - * @param callingConvention The calling convention - * @param proximity The calling distance of the call - * @param toBank The bank of the procedure being called - * @param procedureName The full name of the procedure being called. + * @param toProcedure The procedure being called + * @param callingDistance The calling distance of the call * @param program The program * @return the fragment instance spec factory */ - public static AsmFragmentInstanceSpec callBanked(Procedure.CallingConvention callingConvention, Procedure.CallingProximity proximity, Bank toBank, String procedureName, Program program) { + public static AsmFragmentInstanceSpec callBanked(Procedure toProcedure, Procedure.CallingDistance callingDistance, Program program) { + final Bank toBank = toProcedure.getBank(); AsmFragmentBindings bindings = new AsmFragmentBindings(program); AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked( - callingConvention.getShortName(), - proximity.toString(), - (proximity.equals(Procedure.CallingProximity.NEAR)?null:toBank.bankArea())); + toProcedure.getCallingConvention().getShortName(), + callingDistance.toString(), + (callingDistance.equals(Procedure.CallingDistance.NEAR)?null:toBank.bankArea())); ScopeRef codeScope = program.getScope().getRef(); bindings.bind("c1", new ConstantInteger(toBank.bankNumber())); - bindings.bind("la1", new LabelRef(procedureName)); + bindings.bind("la1", new LabelRef(toProcedure.getFullName())); return new AsmFragmentInstanceSpec(program, signature, bindings, codeScope); } diff --git a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java index 1a4a3f596..16c8b76a9 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java +++ b/src/main/java/dk/camelot64/kickc/fragment/signature/AsmFragmentSignature.java @@ -77,19 +77,19 @@ public interface AsmFragmentSignature { final private String callingConvention; - final private String proximity; + final private String callingDistance; final private String toBankArea; - public CallBanked(String callingConvention, String proximity, String toBankArea) { + public CallBanked(String callingConvention, String callingDistance, String toBankArea) { this.callingConvention = callingConvention; - this.proximity = proximity; + this.callingDistance = callingDistance; this.toBankArea = toBankArea; } @Override public String getName() { - return "call_" + callingConvention + "_" + proximity + ((toBankArea==null)?"":("_"+toBankArea)); + return "call_" + callingConvention + "_" + callingDistance + ((toBankArea==null)?"":("_"+toBankArea)); } } 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 ac2599c55..ab3b78f0f 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -33,7 +33,7 @@ public class Procedure extends Scope { private List comments; /** Reserved zeropage addresses. */ private List reservedZps; - /** The data and code segment to put the procedure into. When null the procedure is not assigned to the code segment. */ + /** The code segment to put the procedure code into. When null the procedure is not assigned to the code segment. */ private String segmentCode; /** The list of constructor procedures for this procedure. The constructor procedures are called during program initialization. */ private final List constructorRefs; @@ -43,7 +43,7 @@ public class Procedure extends Scope { private StatementSource definitionSource; /** * The bank that the procedure code is placed in. - * Used to decide whether to produce near, close or far call when generating code. + * Used to decide whether to produce near, close or far call code when generating calls. * If null, the procedure is in a common bank (always visible) and all calls will be near. */ private Bank bank; @@ -65,17 +65,16 @@ public class Procedure extends Scope { this.bank = bank; } - /** The different distances between banked code, which will determine the type of call needed. */ - public enum CallingProximity { - /** No bank change is needed. Caller and callee are both in the same bank or in the common bank. */ + /** The bank distance between a caller and callee, which will determine the type of call needed. */ + public enum CallingDistance { + /** Caller and callee are both in the same bank or in the common bank. No bank change is needed. */ NEAR, - /** A direct bank change is needed. Caller is in the common bank or a different banking area. */ + /** Caller is in the common bank or a different banking area. A direct bank change is needed. */ CLOSE, - /** A trampoline bank change is needed. Caller and callee are different banks of the same banking area. */ + /** Caller and callee are different banks of the same banking area. A trampoline bank change is needed. */ FAR; - - public static CallingProximity forCall(Bank from, Bank to) { + public static CallingDistance forCall(Bank from, Bank to) { if(to==null) { // NEAR: call to the common bank return NEAR; diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 81fefaad9..9cf76b0d2 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -901,15 +901,15 @@ public class Pass4CodeGeneration { genBlockPhiTransition(asm, block, callSuccessor, block.getScope()); } } - final Procedure.CallingProximity callingProximity = Procedure.CallingProximity.forCall(fromProcedure.getBank(), toProcedure.getBank()); - if(Procedure.CallingProximity.NEAR.equals(callingProximity)) { + final Procedure.CallingDistance callingDistance = Procedure.CallingDistance.forCall(fromProcedure.getBank(), toProcedure.getBank()); + if(Procedure.CallingDistance.NEAR.equals(callingDistance)) { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } else { - AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked(Procedure.CallingConvention.PHI_CALL, callingProximity, toProcedure.getBank(), call.getProcedure().getFullName(), program), program); + AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked(toProcedure, callingDistance, program), program); } } else if (Procedure.CallingConvention.STACK_CALL.equals(toProcedure.getCallingConvention())) { - final Procedure.CallingProximity callingProximity = Procedure.CallingProximity.forCall(fromProcedure.getBank(), toProcedure.getBank()); - if(Procedure.CallingProximity.NEAR.equals(callingProximity)) { + final Procedure.CallingDistance callingDistance = Procedure.CallingDistance.forCall(fromProcedure.getBank(), toProcedure.getBank()); + if(Procedure.CallingDistance.NEAR.equals(callingDistance)) { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } else { throw new CompileError("Stack Call procedure not supported in banked mode " + toProcedure.toString(program)); @@ -922,8 +922,8 @@ public class Pass4CodeGeneration { ProgramScope scope = getScope(); Procedure toProcedure = scope.getProcedure(procedureRef); Procedure fromProcedure = block.getProcedure(this.program); - final Procedure.CallingProximity callingProximity = Procedure.CallingProximity.forCall(fromProcedure.getBank(), toProcedure.getBank()); - if(Procedure.CallingProximity.NEAR.equals(callingProximity)) { + final Procedure.CallingDistance callingDistance = Procedure.CallingDistance.forCall(fromProcedure.getBank(), toProcedure.getBank()); + if(Procedure.CallingDistance.NEAR.equals(callingDistance)) { AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); } else { throw new CompileError("Stack Call procedure not supported in banked mode " + toProcedure.toString(program)); From 8b7afa4ad0f4458a387e186169053ef413e3b26f Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 23 Apr 2023 22:04:23 +0200 Subject: [PATCH 61/66] Procedure.bank is now never null. --- .../camelot64/kickc/model/symbols/Bank.java | 17 ++++++- .../kickc/model/symbols/Procedure.java | 34 +++---------- .../camelot64/kickc/model/symbols/Scope.java | 2 +- .../Pass0GenerateStatementSequence.java | 18 +++---- .../kickc/passes/Pass4CodeGeneration.java | 51 +++++++++---------- 5 files changed, 57 insertions(+), 65 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Bank.java b/src/main/java/dk/camelot64/kickc/model/symbols/Bank.java index ce1ace201..446f08eb6 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Bank.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Bank.java @@ -116,8 +116,23 @@ public record Bank(String bankArea, Long bankNumber) { public Bank { } + /** The common/shared bank which is always visible. */ + public static Bank COMMON = new Bank("", 0L); + + /** + * Is this the common/shared bank which is always visible. + * @return True if this is the common bank + */ + public boolean isCommon() { + return COMMON.equals(this); + } + @Override public String toString() { - return "__bank(" + this.bankArea() + ", " + this.bankNumber() + ") "; + if(isCommon()) { + return ""; + } else { + return "__bank(" + this.bankArea() + ", " + this.bankNumber() + ") "; + } } } 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 ab3b78f0f..3bcedd63e 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -44,11 +44,9 @@ public class Procedure extends Scope { /** * The bank that the procedure code is placed in. * Used to decide whether to produce near, close or far call code when generating calls. - * If null, the procedure is in a common bank (always visible) and all calls will be near. */ private Bank bank; - /** The names of all legal intrinsic procedures. */ final public static List INTRINSIC_PROCEDURES = Arrays.asList( Pass1PrintfIntrinsicRewrite.INTRINSIC_PRINTF_NAME, @@ -62,7 +60,7 @@ public class Procedure extends Scope { } public void setBank(Bank bank) { - this.bank = bank; + this.bank = Objects.requireNonNull(bank); } /** The bank distance between a caller and callee, which will determine the type of call needed. */ @@ -75,13 +73,13 @@ public class Procedure extends Scope { FAR; public static CallingDistance forCall(Bank from, Bank to) { - if(to==null) { + if(to.isCommon()) { // NEAR: call to the common bank return NEAR; } else if(to.equals(from)) { // NEAR: call to the same bank in the same banking area return NEAR; - } else if(from==null) { + } else if(from.isCommon()) { // CLOSE: call from common bank to any bank return CLOSE; } else if(!from.bankArea().equals(to.bankArea())) { @@ -146,10 +144,10 @@ public class Procedure extends Scope { super(name, parentScope, segmentData); this.procedureType = procedureType; this.declaredInline = false; - this.bank = bank; + this.bank = Objects.requireNonNull(bank); this.interruptType = null; this.comments = new ArrayList<>(); - this.segmentCode = segmentCode; + this.segmentCode = Objects.requireNonNull(segmentCode); this.callingConvention = callingConvention; this.constructorRefs = new ArrayList<>(); this.isConstructor = false; @@ -260,24 +258,6 @@ public class Procedure extends Scope { this.declaredInline = declaredInline; } - public boolean isBanked() { - return bank != null; - } - - public Long getBankNumber() { - if(bank != null) - return bank.bankNumber(); - else - return 0L; - } - - public String getBankArea() { - if(bank != null) - return bank.bankArea(); - else - return ""; - } - public String getInterruptType() { return interruptType; } @@ -338,9 +318,7 @@ public class Procedure extends Scope { if(declaredIntrinsic) { res.append("__intrinsic "); } - if(isBanked()) { - res.append("__bank(").append(this.getBankArea()).append(", ").append(this.getBankNumber()).append(") "); - } + res.append(bank.toString()); if(!callingConvention.equals(CallingConvention.PHI_CALL)) { res.append(getCallingConvention().getName()).append(" "); } diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java b/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java index b73ae4353..a4b6e0736 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java @@ -30,7 +30,7 @@ public abstract class Scope implements Symbol { this.name = name; this.parentScope = parentScope; this.symbols = new LinkedHashMap<>(); - this.segmentData = segmentData; + this.segmentData = Objects.requireNonNull(segmentData); setFullName(); } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 9d4cf7357..a62082a72 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -130,7 +130,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor()), program.getScope(), Scope.SEGMENT_CODE_DEFAULT, Scope.SEGMENT_DATA_DEFAULT, Procedure.CallingConvention.PHI_CALL, null); + initProc = new Procedure(SymbolRef.INIT_PROC_NAME, new SymbolTypeProcedure(SymbolType.VOID, new ArrayList<>()), program.getScope(), Scope.SEGMENT_CODE_DEFAULT, Scope.SEGMENT_DATA_DEFAULT, Procedure.CallingConvention.PHI_CALL, Bank.COMMON); initProc.setDeclaredInline(true); initProc.setParameters(new ArrayList<>()); program.getScope().add(initProc); @@ -187,7 +187,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor()), program.getScope(), Scope.SEGMENT_CODE_DEFAULT, Scope.SEGMENT_DATA_DEFAULT, Procedure.CallingConvention.PHI_CALL, null); + final Procedure startProcedure = new Procedure(SymbolRef.START_PROC_NAME, new SymbolTypeProcedure(SymbolType.VOID, new ArrayList<>()), program.getScope(), Scope.SEGMENT_CODE_DEFAULT, Scope.SEGMENT_DATA_DEFAULT, Procedure.CallingConvention.PHI_CALL, Bank.COMMON); startProcedure.setParameters(new ArrayList<>()); program.getScope().add(startProcedure); final ProcedureCompilation startProcedureCompilation = program.createProcedureCompilation(startProcedure.getRef()); @@ -305,7 +305,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor 0) { asm.addComment(signature.toString(), false); } - if(procedure.getBank() != null) { + if(!procedure.getBank().isCommon()) { asm.addComment(" " + procedure.getBank(), false); } } @@ -583,31 +583,30 @@ public class Pass4CodeGeneration { if (registerMainMem.getAddress() == null) { // Generate into the data segment // Set segment - // We check first the bank of the variable. Only local variables can be stored in the bank. - // Parameters must be stored in main memory. - if(!variable.getDataSegment().equals(Scope.SEGMENT_DATA_DEFAULT)) { - if(scope instanceof Procedure) { - Procedure procedure = (Procedure) scope; - List parameters = procedure.getParameters(); - if (variable.isKindPhiVersion()) { - Variable master = variable.getPhiMaster(); - if (master != null) { - if (parameters.contains(master) || master.getLocalName().equals("return")) { - variable.setDataSegment(Scope.SEGMENT_DATA_DEFAULT); - } - } - } - } - } - - // Intermediate variables are placed at the banked data segment, but parameters and return values are kept untouched. - if (variable.isKindIntermediate()) { - if (scope instanceof Procedure) { - Procedure procedure = (Procedure) scope; - variable.setDataSegment(procedure.getSegmentData()); - } - } - setCurrentSegment(variable.getDataSegment(), asm); +// // We check first the bank of the variable. Only local variables can be stored in the bank. +// // Parameters must be stored in main memory. +// if(!variable.getDataSegment().equals(Scope.SEGMENT_DATA_DEFAULT)) { +// if(scope instanceof Procedure) { +// Procedure procedure = (Procedure) scope; +// List parameters = procedure.getParameters(); +// if (variable.isKindPhiVersion()) { +// Variable master = variable.getPhiMaster(); +// if (master != null) { +// if (parameters.contains(master) || master.getLocalName().equals("return")) { +// variable.setDataSegment(Scope.SEGMENT_DATA_DEFAULT); +// } +// } +// } +// } +// } +// +// // Intermediate variables are placed at the banked data segment, but parameters and return values are kept untouched. +// if (variable.isKindIntermediate()) { +// if (scope instanceof Procedure) { +// Procedure procedure = (Procedure) scope; +// variable.setDataSegment(procedure.getSegmentData()); +// } +// } setCurrentSegment(variable.getDataSegment(), asm); // Add any comments generateComments(asm, variable.getComments()); From 606ea29132c21b3ed3bf96c470be132e2d7e6632 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 23 Apr 2023 22:20:13 +0200 Subject: [PATCH 62/66] Moved calling distance to bank. --- .../AsmFragmentInstanceSpecBuilder.java | 4 +- .../dk/camelot64/kickc/model/Directive.java | 9 ++-- .../camelot64/kickc/model/symbols/Bank.java | 35 +++++++++++++ .../kickc/model/symbols/Procedure.java | 51 +++++-------------- .../dk/camelot64/kickc/parser/CParser.java | 2 +- .../kickc/passes/Pass4CodeGeneration.java | 14 ++--- 6 files changed, 62 insertions(+), 53 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java index a3dc6c1c9..acd60c256 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstanceSpecBuilder.java @@ -51,13 +51,13 @@ final public class AsmFragmentInstanceSpecBuilder { * @param program The program * @return the fragment instance spec factory */ - public static AsmFragmentInstanceSpec callBanked(Procedure toProcedure, Procedure.CallingDistance callingDistance, Program program) { + public static AsmFragmentInstanceSpec callBanked(Procedure toProcedure, Bank.CallingDistance callingDistance, Program program) { final Bank toBank = toProcedure.getBank(); AsmFragmentBindings bindings = new AsmFragmentBindings(program); AsmFragmentSignature signature = new AsmFragmentSignature.CallBanked( toProcedure.getCallingConvention().getShortName(), callingDistance.toString(), - (callingDistance.equals(Procedure.CallingDistance.NEAR)?null:toBank.bankArea())); + (callingDistance.equals(Bank.CallingDistance.NEAR)?null:toBank.bankArea())); ScopeRef codeScope = program.getScope().getRef(); bindings.bind("c1", new ConstantInteger(toBank.bankNumber())); bindings.bind("la1", new LabelRef(toProcedure.getFullName())); diff --git a/src/main/java/dk/camelot64/kickc/model/Directive.java b/src/main/java/dk/camelot64/kickc/model/Directive.java index 850933e44..248a554e9 100644 --- a/src/main/java/dk/camelot64/kickc/model/Directive.java +++ b/src/main/java/dk/camelot64/kickc/model/Directive.java @@ -44,15 +44,12 @@ public class Directive { } /** - * Creates a new Bank which collects the necessary data to handle banking. - * For example, on the Commander X16, RAM is banked from address 0xA000 till 0xBFFF. - * Zeropage 0x00 configures this banked RAM, with a number from 0x00 till 0xff. - * So banked RAM is is a bankArea, and the bank is a configurable bank number in the bankArea. + * Bank to place code into. Used for determining call distance. */ static public class Bank extends Directive { - private String bankArea; // A bank area is a memory range that is banked on a target platform. - private Long bankNumber; // A bank is a number that defines a bank configuration in a bank area. + private String bankArea; + private Long bankNumber; public Bank(String bankArea, Long bankNumber) { super("bank" ); diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Bank.java b/src/main/java/dk/camelot64/kickc/model/symbols/Bank.java index 446f08eb6..8c2796371 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Bank.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Bank.java @@ -135,4 +135,39 @@ public record Bank(String bankArea, Long bankNumber) { return "__bank(" + this.bankArea() + ", " + this.bankNumber() + ") "; } } + + /** The bank distance between a caller and callee, which will determine the type of call needed. */ + public enum CallingDistance { + /** Caller and callee are both in the same bank or in the common bank. No bank change is needed. */ + NEAR, + /** Caller is in the common bank or a different banking area. A direct bank change is needed. */ + CLOSE, + /** Caller and callee are different banks of the same banking area. A trampoline bank change is needed. */ + FAR; + + public static CallingDistance forCall(Bank from, Bank to) { + if(to.isCommon()) { + // NEAR: call to the common bank + return NEAR; + } else if(to.equals(from)) { + // NEAR: call to the same bank in the same banking area + return NEAR; + } else if(from.isCommon()) { + // CLOSE: call from common bank to any bank + return CLOSE; + } else if(!from.bankArea().equals(to.bankArea())) { + // CLOSE: from one banking area to another + return CLOSE; + } else { + // FAR: banked to different bank in same bank area + return FAR; + } + } + + @Override + public String toString() { + return name().toLowerCase(); + } + + } } 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 3bcedd63e..0f59f17a3 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Procedure.java @@ -63,41 +63,6 @@ public class Procedure extends Scope { this.bank = Objects.requireNonNull(bank); } - /** The bank distance between a caller and callee, which will determine the type of call needed. */ - public enum CallingDistance { - /** Caller and callee are both in the same bank or in the common bank. No bank change is needed. */ - NEAR, - /** Caller is in the common bank or a different banking area. A direct bank change is needed. */ - CLOSE, - /** Caller and callee are different banks of the same banking area. A trampoline bank change is needed. */ - FAR; - - public static CallingDistance forCall(Bank from, Bank to) { - if(to.isCommon()) { - // NEAR: call to the common bank - return NEAR; - } else if(to.equals(from)) { - // NEAR: call to the same bank in the same banking area - return NEAR; - } else if(from.isCommon()) { - // CLOSE: call from common bank to any bank - return CLOSE; - } else if(!from.bankArea().equals(to.bankArea())) { - // CLOSE: from one banking area to another - return CLOSE; - } else { - // FAR: banked to different bank in same bank area - return FAR; - } - } - - @Override - public String toString() { - return name().toLowerCase(); - } - - } - /** The method for passing parameters and return value to the procedure. */ public enum CallingConvention { /** Parameters and return value handled through PHI-transitions. */ @@ -355,11 +320,23 @@ public class Procedure extends Scope { if(o == null || getClass() != o.getClass()) return false; if(!super.equals(o)) return false; Procedure procedure = (Procedure) o; - return variableLengthParameterList == procedure.variableLengthParameterList && declaredInline == procedure.declaredInline && declaredIntrinsic == procedure.declaredIntrinsic && isConstructor == procedure.isConstructor && Objects.equals(procedureType, procedure.procedureType) && Objects.equals(parameterNames, procedure.parameterNames) && Objects.equals(interruptType, procedure.interruptType) && Objects.equals(comments, procedure.comments) && Objects.equals(reservedZps, procedure.reservedZps) && Objects.equals(segmentCode, procedure.segmentCode) && Objects.equals(constructorRefs, procedure.constructorRefs) && Objects.equals(definitionSource, procedure.definitionSource) && Objects.equals(bank, procedure.bank) && callingConvention == procedure.callingConvention; + return variableLengthParameterList == procedure.variableLengthParameterList && + declaredInline == procedure.declaredInline && + declaredIntrinsic == procedure.declaredIntrinsic && + isConstructor == procedure.isConstructor && + Objects.equals(procedureType, procedure.procedureType) && + Objects.equals(parameterNames, procedure.parameterNames) && + Objects.equals(interruptType, procedure.interruptType) && + Objects.equals(comments, procedure.comments) && + Objects.equals(reservedZps, procedure.reservedZps) && + Objects.equals(segmentCode, procedure.segmentCode) && + Objects.equals(constructorRefs, procedure.constructorRefs) && + Objects.equals(bank, procedure.bank) && + callingConvention == procedure.callingConvention; } @Override public int hashCode() { - return Objects.hash(super.hashCode(), procedureType, parameterNames, variableLengthParameterList, declaredInline, declaredIntrinsic, interruptType, comments, reservedZps, segmentCode, constructorRefs, isConstructor, definitionSource, bank, callingConvention); + return Objects.hash(super.hashCode(), procedureType, parameterNames, variableLengthParameterList, declaredInline, declaredIntrinsic, interruptType, comments, reservedZps, segmentCode, constructorRefs, isConstructor, bank, callingConvention); } } diff --git a/src/main/java/dk/camelot64/kickc/parser/CParser.java b/src/main/java/dk/camelot64/kickc/parser/CParser.java index d15b8d800..76b52a81c 100644 --- a/src/main/java/dk/camelot64/kickc/parser/CParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/CParser.java @@ -111,7 +111,7 @@ public class CParser { */ public static final String PRAGMA_BANK = "bank"; /** - * #pragma nobank Changes the current bank to the default/common bank. + * #pragma nobank Changes the current bank to the default/common/shared bank. */ public static final String PRAGMA_NOBANK = "nobank"; diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 2e441d520..0246ab25e 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -900,15 +900,15 @@ public class Pass4CodeGeneration { genBlockPhiTransition(asm, block, callSuccessor, block.getScope()); } } - final Procedure.CallingDistance callingDistance = Procedure.CallingDistance.forCall(fromProcedure.getBank(), toProcedure.getBank()); - if(Procedure.CallingDistance.NEAR.equals(callingDistance)) { + final Bank.CallingDistance callingDistance = Bank.CallingDistance.forCall(fromProcedure.getBank(), toProcedure.getBank()); + if(Bank.CallingDistance.NEAR.equals(callingDistance)) { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } else { AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.callBanked(toProcedure, callingDistance, program), program); } } else if (Procedure.CallingConvention.STACK_CALL.equals(toProcedure.getCallingConvention())) { - final Procedure.CallingDistance callingDistance = Procedure.CallingDistance.forCall(fromProcedure.getBank(), toProcedure.getBank()); - if(Procedure.CallingDistance.NEAR.equals(callingDistance)) { + final Bank.CallingDistance callingDistance = Bank.CallingDistance.forCall(fromProcedure.getBank(), toProcedure.getBank()); + if(Bank.CallingDistance.NEAR.equals(callingDistance)) { asm.addInstruction("jsr", CpuAddressingMode.ABS, call.getProcedure().getFullName(), false); } else { throw new CompileError("Stack Call procedure not supported in banked mode " + toProcedure.toString(program)); @@ -921,11 +921,11 @@ public class Pass4CodeGeneration { ProgramScope scope = getScope(); Procedure toProcedure = scope.getProcedure(procedureRef); Procedure fromProcedure = block.getProcedure(this.program); - final Procedure.CallingDistance callingDistance = Procedure.CallingDistance.forCall(fromProcedure.getBank(), toProcedure.getBank()); - if(Procedure.CallingDistance.NEAR.equals(callingDistance)) { + final Bank.CallingDistance callingDistance = Bank.CallingDistance.forCall(fromProcedure.getBank(), toProcedure.getBank()); + if(Bank.CallingDistance.NEAR.equals(callingDistance)) { AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); } else { - throw new CompileError("Stack Call procedure not supported in banked mode " + toProcedure.toString(program)); + throw new CompileError("Call procedure not supported in banked mode " + toProcedure.toString(program)); } RValue procedureRVal = call.getProcedureRVal(); if (!(procedureRVal instanceof ProcedureRef)) { From 11c86793d3afbb22822b1acc5c3ba8c1597e98c8 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 23 Apr 2023 23:25:28 +0200 Subject: [PATCH 63/66] Ensured we do not coalesce across segments. --- .../kickc/passes/Pass4CodeGeneration.java | 50 +++++++++---------- .../kickc/passes/Pass4MemoryCoalesce.java | 16 ++++++ .../kickc/test/TestProgramsFast.java | 6 +++ src/test/kc/call-banked-phi-memvars.c | 30 +++++++++++ 4 files changed, 77 insertions(+), 25 deletions(-) create mode 100644 src/test/kc/call-banked-phi-memvars.c diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 0246ab25e..8d7426a3b 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -583,30 +583,30 @@ public class Pass4CodeGeneration { if (registerMainMem.getAddress() == null) { // Generate into the data segment // Set segment -// // We check first the bank of the variable. Only local variables can be stored in the bank. -// // Parameters must be stored in main memory. -// if(!variable.getDataSegment().equals(Scope.SEGMENT_DATA_DEFAULT)) { -// if(scope instanceof Procedure) { -// Procedure procedure = (Procedure) scope; -// List parameters = procedure.getParameters(); -// if (variable.isKindPhiVersion()) { -// Variable master = variable.getPhiMaster(); -// if (master != null) { -// if (parameters.contains(master) || master.getLocalName().equals("return")) { -// variable.setDataSegment(Scope.SEGMENT_DATA_DEFAULT); -// } -// } -// } -// } -// } -// -// // Intermediate variables are placed at the banked data segment, but parameters and return values are kept untouched. -// if (variable.isKindIntermediate()) { -// if (scope instanceof Procedure) { -// Procedure procedure = (Procedure) scope; -// variable.setDataSegment(procedure.getSegmentData()); -// } -// } + // We check first the bank of the variable. Only local variables can be stored in the bank. + // Parameters must be stored in main memory. + if(!variable.getDataSegment().equals(Scope.SEGMENT_DATA_DEFAULT)) { + if(scope instanceof Procedure) { + Procedure procedure = (Procedure) scope; + List parameters = procedure.getParameters(); + if (variable.isKindPhiVersion()) { + Variable master = variable.getPhiMaster(); + if (master != null) { + if (parameters.contains(master) || master.getLocalName().equals("return")) { + variable.setDataSegment(Scope.SEGMENT_DATA_DEFAULT); + } + } + } + } + } + + // Intermediate variables are placed at the banked data segment, but parameters and return values are kept untouched. + if (variable.isKindIntermediate()) { + if (scope instanceof Procedure) { + Procedure procedure = (Procedure) scope; + variable.setDataSegment(procedure.getSegmentData()); + } + } setCurrentSegment(variable.getDataSegment(), asm); // Add any comments generateComments(asm, variable.getComments()); @@ -925,7 +925,7 @@ public class Pass4CodeGeneration { if(Bank.CallingDistance.NEAR.equals(callingDistance)) { AsmFragmentCodeGenerator.generateAsm(asm, AsmFragmentInstanceSpecBuilder.call(call, indirectCallCount++, program), program); } else { - throw new CompileError("Call procedure not supported in banked mode " + toProcedure.toString(program)); + throw new CompileError("Stack Call procedure not supported in banked mode " + toProcedure.toString(program)); } RValue procedureRVal = call.getProcedureRVal(); if (!(procedureRVal instanceof ProcedureRef)) { diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4MemoryCoalesce.java b/src/main/java/dk/camelot64/kickc/passes/Pass4MemoryCoalesce.java index c229e98fe..03c531702 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4MemoryCoalesce.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4MemoryCoalesce.java @@ -53,6 +53,7 @@ public abstract class Pass4MemoryCoalesce extends Pass2Base { return canCoalesceNotEqual(ec1, ec2) && canCoalesceCompatible(ec1, ec2, program) && + canCoalesceSegments(ec1, ec2, program) && canCoalesceVolatile(ec1, ec2, program) && canCoalesceThreads(ec1, ec2, threadHeads, program) && canCoalesceClobber(ec1, ec2, unknownFragments, program); @@ -69,6 +70,21 @@ public abstract class Pass4MemoryCoalesce extends Pass2Base { return !ec1.equals(ec2); } + /** + * Determines if two live range equivalence classes are candidates for coalescing by ensuring they are not from different data segments. + * @param ec1 One equivalence class + * @param ec2 Another equivalence class + * @param program The program + * @return True if the two equivalence classes can be coalesced into one without problems. + */ + private static boolean canCoalesceSegments(LiveRangeEquivalenceClass ec1, LiveRangeEquivalenceClass ec2, Program program) { + final VariableRef variableRef1 = ec1.getVariables().get(0); + final String dataSegment1 = program.getScope().getVar(variableRef1).getDataSegment(); + final VariableRef variableRef2 = ec2.getVariables().get(0); + final String dataSegment2 = program.getScope().getVar(variableRef2).getDataSegment(); + return dataSegment1.equals(dataSegment2); + } + /** * Determines if two live range equivalence classes can be coalesced without cross-thread clobber. * This is possible if they are both only called from the same thread head. diff --git a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java index 7b2bc53a8..f85993677 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java +++ b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java @@ -1581,6 +1581,12 @@ public class TestProgramsFast extends TestPrograms { compileAndCompare("call-banked-phi-case-6-close-1.c"); } + @Test + public void testBankedPhiMemvars() throws IOException { + compileAndCompare("call-banked-phi-memvars.c", log()); + } + + @Test public void testBankedStackCase2Close0() throws IOException { assertError("call-banked-stack-case-2-close-0.c", "Stack Call procedure not supported in banked mode"); diff --git a/src/test/kc/call-banked-phi-memvars.c b/src/test/kc/call-banked-phi-memvars.c new file mode 100644 index 000000000..420b2796f --- /dev/null +++ b/src/test/kc/call-banked-phi-memvars.c @@ -0,0 +1,30 @@ +/** + * Test banked calls with memory variables. + * The parameters & return should end up in the shared/common bank. + */ + +#pragma link("call-banked-phi.ld") +#pragma var_model(mem) + +int* const SCREEN = (int*)0x0400; + +#pragma code_seg(Code) +#pragma nobank +void main(void) { + for(char i=0;i<5; i++) { + SCREEN[i] = plus(100, (int)i); + SCREEN[10+i] = plus(200, (int)i); + } +} + +#pragma code_seg(RAM_Bank1) +#pragma data_seg(RAM_Bank1) +#pragma bank(cx16_ram, 1) +int plus(int a, int b) { + int r = 2; + r += a; + r += b; + r += a; + r += b; + return r; +} From 8193688eecf987e40c5efdc82d29880ecd6eaf71 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 23 Apr 2023 23:26:26 +0200 Subject: [PATCH 64/66] added test refs --- src/test/ref/call-banked-phi-memvars.asm | 144 ++++ src/test/ref/call-banked-phi-memvars.cfg | 45 ++ src/test/ref/call-banked-phi-memvars.log | 800 +++++++++++++++++++++++ src/test/ref/call-banked-phi-memvars.sym | 34 + 4 files changed, 1023 insertions(+) create mode 100644 src/test/ref/call-banked-phi-memvars.asm create mode 100644 src/test/ref/call-banked-phi-memvars.cfg create mode 100644 src/test/ref/call-banked-phi-memvars.log create mode 100644 src/test/ref/call-banked-phi-memvars.sym diff --git a/src/test/ref/call-banked-phi-memvars.asm b/src/test/ref/call-banked-phi-memvars.asm new file mode 100644 index 000000000..1a15757b6 --- /dev/null +++ b/src/test/ref/call-banked-phi-memvars.asm @@ -0,0 +1,144 @@ +/** + * Test banked calls with memory variables. + * The parameters & return should end up in the shared/common bank. + */ + .file [name="call-banked-phi-memvars.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + .label SCREEN = $400 +.segment Code +main: { + ldy #0 + __b1: + // for(char i=0;i<5; i++) + cpy #5 + bcc __b2 + // } + rts + __b2: + // plus(100, (int)i) + tya + sta plus.b + lda #0 + sta plus.b+1 + lda #<$64 + sta plus.a + lda #>$64 + sta plus.a+1 + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus(100, (int)i) + // SCREEN[i] = plus(100, (int)i) + tya + asl + tax + lda __1 + sta SCREEN,x + lda __1+1 + sta SCREEN+1,x + // 10+i + tya + tax + axs #-[$a] + // plus(200, (int)i) + tya + sta plus.b + lda #0 + sta plus.b+1 + lda #<$c8 + sta plus.a + lda #>$c8 + sta plus.a+1 + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus(200, (int)i) + // SCREEN[10+i] = plus(200, (int)i) + txa + asl + tax + lda __3 + sta SCREEN,x + lda __3+1 + sta SCREEN+1,x + // for(char i=0;i<5; i++) + iny + jmp __b1 + .segment Data + .label __1 = plus.return + .label __3 = plus.return +} +.segment RAM_Bank1 +// __mem() int plus(__mem() int a, __mem() int b) +// __bank(cx16_ram, 1) +plus: { + // r += a + clc + lda a + adc #<2 + sta r + lda a+1 + adc #>2 + sta r+1 + // r += b + clc + lda r + adc b + sta r + lda r+1 + adc b+1 + sta r+1 + // r += a + clc + lda r + adc a + sta r + lda r+1 + adc a+1 + sta r+1 + // r += b + lda r + clc + adc b + sta return + lda r+1 + adc b+1 + sta return+1 + // } + rts + .segment Data + b: .word 0 + return: .word 0 + .segment RAM_Bank1 + r: .word 0 + .segment Data + a: .word 0 +} diff --git a/src/test/ref/call-banked-phi-memvars.cfg b/src/test/ref/call-banked-phi-memvars.cfg new file mode 100644 index 000000000..4cb2646a1 --- /dev/null +++ b/src/test/ref/call-banked-phi-memvars.cfg @@ -0,0 +1,45 @@ + +void main() +main: scope:[main] from + [0] phi() + to:main::@1 +main::@1: scope:[main] from main main::@4 + [1] main::i#2 = phi( main/0, main::@4/main::i#1 ) + [2] if(main::i#2<5) goto main::@2 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return +main::@2: scope:[main] from main::@1 + [4] plus::b#0 = (int)main::i#2 + [5] call plus + [6] plus::return#0 = plus::return#2 + to:main::@3 +main::@3: scope:[main] from main::@2 + [7] main::$1 = plus::return#0 + [8] main::$4 = main::i#2 << 1 + [9] SCREEN[main::$4] = main::$1 + [10] main::$2 = $a + main::i#2 + [11] plus::b#1 = (int)main::i#2 + [12] call plus + [13] plus::return#1 = plus::return#2 + to:main::@4 +main::@4: scope:[main] from main::@3 + [14] main::$3 = plus::return#1 + [15] main::$5 = main::$2 << 1 + [16] SCREEN[main::$5] = main::$3 + [17] main::i#1 = ++ main::i#2 + to:main::@1 + +__bank(cx16_ram, 1) int plus(int a , int b) +plus: scope:[plus] from main::@2 main::@3 + [18] plus::b#2 = phi( main::@2/plus::b#0, main::@3/plus::b#1 ) + [18] plus::a#2 = phi( main::@2/$64, main::@3/$c8 ) + [19] plus::r#1 = 2 + plus::a#2 + [20] plus::r#2 = plus::r#1 + plus::b#2 + [21] plus::r#3 = plus::r#2 + plus::a#2 + [22] plus::return#2 = plus::r#3 + plus::b#2 + to:plus::@return +plus::@return: scope:[plus] from plus + [23] return + to:@return diff --git a/src/test/ref/call-banked-phi-memvars.log b/src/test/ref/call-banked-phi-memvars.log new file mode 100644 index 000000000..ad6a75b41 --- /dev/null +++ b/src/test/ref/call-banked-phi-memvars.log @@ -0,0 +1,800 @@ +Loading link script "call-banked-phi.ld" +Updating intermediate variable memory area to MAIN_MEMORY main::$0 +Updating intermediate variable memory area to MAIN_MEMORY main::$1 +Updating intermediate variable memory area to MAIN_MEMORY main::$2 +Updating intermediate variable memory area to MAIN_MEMORY main::$3 + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + main::i#0 = 0 + to:main::@1 +main::@1: scope:[main] from main main::@4 + main::i#2 = phi( main/main::i#0, main::@4/main::i#1 ) + main::$0 = main::i#2 < 5 + if(main::$0) goto main::@2 + to:main::@return +main::@2: scope:[main] from main::@1 + main::i#3 = phi( main::@1/main::i#2 ) + plus::a#0 = $64 + plus::b#0 = (int)main::i#3 + call plus + plus::return#0 = plus::return#3 + to:main::@3 +main::@3: scope:[main] from main::@2 + main::i#4 = phi( main::@2/main::i#3 ) + plus::return#4 = phi( main::@2/plus::return#0 ) + main::$1 = plus::return#4 + main::$4 = main::i#4 * SIZEOF_INT + SCREEN[main::$4] = main::$1 + main::$2 = $a + main::i#4 + plus::a#1 = $c8 + plus::b#1 = (int)main::i#4 + call plus + plus::return#1 = plus::return#3 + to:main::@4 +main::@4: scope:[main] from main::@3 + main::i#5 = phi( main::@3/main::i#4 ) + plus::return#5 = phi( main::@3/plus::return#1 ) + main::$3 = plus::return#5 + main::$5 = main::$2 * SIZEOF_INT + SCREEN[main::$5] = main::$3 + main::i#1 = ++ main::i#5 + to:main::@1 +main::@return: scope:[main] from main::@1 + return + to:@return + +__bank(cx16_ram, 1) int plus(int a , int b) +plus: scope:[plus] from main::@2 main::@3 + plus::b#2 = phi( main::@2/plus::b#0, main::@3/plus::b#1 ) + plus::a#2 = phi( main::@2/plus::a#0, main::@3/plus::a#1 ) + plus::r#0 = 2 + plus::r#1 = plus::r#0 + plus::a#2 + plus::r#2 = plus::r#1 + plus::b#2 + plus::r#3 = plus::r#2 + plus::a#2 + plus::r#4 = plus::r#3 + plus::b#2 + plus::return#2 = plus::r#4 + to:plus::@return +plus::@return: scope:[plus] from plus + plus::return#6 = phi( plus/plus::return#2 ) + plus::return#3 = plus::return#6 + 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 +__constant int * const SCREEN = (int *)$400 +__constant char SIZEOF_INT = 2 +void __start() +void main() +bool main::$0 +int main::$1 +number main::$2 +int main::$3 +char main::$4 +number main::$5 +char main::i +char main::i#0 +char main::i#1 +char main::i#2 +char main::i#3 +char main::i#4 +char main::i#5 +__bank(cx16_ram, 1) int plus(int a , int b) +int plus::a +int plus::a#0 +int plus::a#1 +int plus::a#2 +int plus::b +int plus::b#0 +int plus::b#1 +int plus::b#2 +int plus::r +int plus::r#0 +int plus::r#1 +int plus::r#2 +int plus::r#3 +int plus::r#4 +int plus::return +int plus::return#0 +int plus::return#1 +int plus::return#2 +int plus::return#3 +int plus::return#4 +int plus::return#5 +int plus::return#6 + +Adding number conversion cast (unumber) 5 in main::$0 = main::i#2 < 5 +Adding number conversion cast (snumber) $64 in plus::a#0 = $64 +Adding number conversion cast (unumber) $a in main::$2 = $a + main::i#4 +Adding number conversion cast (unumber) main::$2 in main::$2 = (unumber)$a + main::i#4 +Adding number conversion cast (snumber) $c8 in plus::a#1 = $c8 +Adding number conversion cast (unumber) main::$5 in main::$5 = main::$2 * SIZEOF_INT +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast plus::a#0 = (snumber)$64 +Inlining cast plus::a#1 = (snumber)$c8 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (int *) 1024 +Simplifying constant integer cast 5 +Simplifying constant integer cast $64 +Simplifying constant integer cast $a +Simplifying constant integer cast $c8 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 5 +Finalized signed number type (signed char) $64 +Finalized unsigned number type (char) $a +Finalized signed number type (int) $c8 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to char in main::$2 = $a + main::i#4 +Inferred type updated to char in main::$5 = main::$2 * SIZEOF_INT +Alias main::i#2 = main::i#3 main::i#4 main::i#5 +Alias plus::return#0 = plus::return#4 +Alias plus::return#1 = plus::return#5 +Alias plus::return#2 = plus::r#4 plus::return#6 plus::return#3 +Successful SSA optimization Pass2AliasElimination +Simple Condition main::$0 [3] if(main::i#2<5) goto main::@2 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant main::i#0 = 0 +Constant plus::a#0 = $64 +Constant plus::a#1 = $c8 +Constant plus::r#0 = 2 +Successful SSA optimization Pass2ConstantIdentification +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 +Rewriting multiplication to use shift [6] main::$4 = main::i#2 * SIZEOF_INT +Rewriting multiplication to use shift [13] main::$5 = main::$2 * SIZEOF_INT +Successful SSA optimization Pass2MultiplyToShiftRewriting +Inlining constant with var siblings main::i#0 +Inlining constant with var siblings plus::a#0 +Inlining constant with var siblings plus::a#1 +Inlining constant with var siblings plus::r#0 +Constant inlined main::i#0 = 0 +Constant inlined plus::a#1 = $c8 +Constant inlined plus::r#0 = 2 +Constant inlined plus::a#0 = $64 +Successful SSA optimization Pass2ConstantInlining +Eliminating unused constant SIZEOF_INT +Successful SSA optimization PassNEliminateUnusedVars +Adding NOP phi() at start of main +CALL GRAPH +Calls in [main] to plus:6 plus:14 + +Created 3 initial phi equivalence classes +Coalesced [5] plus::b#3 = plus::b#0 +Coalesced [13] plus::b#4 = plus::b#1 +Coalesced [20] main::i#6 = main::i#1 +Coalesced down to 3 phi equivalence classes +Adding NOP phi() at start of main + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + to:main::@1 +main::@1: scope:[main] from main main::@4 + [1] main::i#2 = phi( main/0, main::@4/main::i#1 ) + [2] if(main::i#2<5) goto main::@2 + to:main::@return +main::@return: scope:[main] from main::@1 + [3] return + to:@return +main::@2: scope:[main] from main::@1 + [4] plus::b#0 = (int)main::i#2 + [5] call plus + [6] plus::return#0 = plus::return#2 + to:main::@3 +main::@3: scope:[main] from main::@2 + [7] main::$1 = plus::return#0 + [8] main::$4 = main::i#2 << 1 + [9] SCREEN[main::$4] = main::$1 + [10] main::$2 = $a + main::i#2 + [11] plus::b#1 = (int)main::i#2 + [12] call plus + [13] plus::return#1 = plus::return#2 + to:main::@4 +main::@4: scope:[main] from main::@3 + [14] main::$3 = plus::return#1 + [15] main::$5 = main::$2 << 1 + [16] SCREEN[main::$5] = main::$3 + [17] main::i#1 = ++ main::i#2 + to:main::@1 + +__bank(cx16_ram, 1) int plus(int a , int b) +plus: scope:[plus] from main::@2 main::@3 + [18] plus::b#2 = phi( main::@2/plus::b#0, main::@3/plus::b#1 ) + [18] plus::a#2 = phi( main::@2/$64, main::@3/$c8 ) + [19] plus::r#1 = 2 + plus::a#2 + [20] plus::r#2 = plus::r#1 + plus::b#2 + [21] plus::r#3 = plus::r#2 + plus::a#2 + [22] plus::return#2 = plus::r#3 + plus::b#2 + to:plus::@return +plus::@return: scope:[plus] from plus + [23] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +int main::$1 // 11.0 +char main::$2 // 4.4 +int main::$3 // 11.0 +char main::$4 // 22.0 +char main::$5 // 22.0 +char main::i +char main::i#1 // 22.0 +char main::i#2 // 3.6666666666666665 +__bank(cx16_ram, 1) int plus(int a , int b) +int plus::a +int plus::a#2 // 67.33333333333333 +int plus::b +int plus::b#0 // 22.0 +int plus::b#1 // 22.0 +int plus::b#2 // 56.0 +int plus::r +int plus::r#1 // 202.0 +int plus::r#2 // 202.0 +int plus::r#3 // 202.0 +int plus::return +int plus::return#0 // 22.0 +int plus::return#1 // 22.0 +int plus::return#2 // 30.75 + +Initial phi equivalence classes +[ main::i#2 main::i#1 ] +[ plus::a#2 ] +[ plus::b#2 plus::b#0 plus::b#1 ] +Added variable plus::return#0 to live range equivalence class [ plus::return#0 ] +Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable main::$4 to live range equivalence class [ main::$4 ] +Added variable main::$2 to live range equivalence class [ main::$2 ] +Added variable plus::return#1 to live range equivalence class [ plus::return#1 ] +Added variable main::$3 to live range equivalence class [ main::$3 ] +Added variable main::$5 to live range equivalence class [ main::$5 ] +Added variable plus::r#1 to live range equivalence class [ plus::r#1 ] +Added variable plus::r#2 to live range equivalence class [ plus::r#2 ] +Added variable plus::r#3 to live range equivalence class [ plus::r#3 ] +Added variable plus::return#2 to live range equivalence class [ plus::return#2 ] +Complete equivalence classes +[ main::i#2 main::i#1 ] +[ plus::a#2 ] +[ plus::b#2 plus::b#0 plus::b#1 ] +[ plus::return#0 ] +[ main::$1 ] +[ main::$4 ] +[ main::$2 ] +[ plus::return#1 ] +[ main::$3 ] +[ main::$5 ] +[ plus::r#1 ] +[ plus::r#2 ] +[ plus::r#3 ] +[ plus::return#2 ] +Allocated mem[2] [ plus::r#1 ] +Allocated mem[2] [ plus::r#2 ] +Allocated mem[2] [ plus::r#3 ] +Allocated mem[2] [ plus::b#2 plus::b#0 plus::b#1 ] +Allocated mem[2] [ plus::a#2 ] +Allocated mem[2] [ plus::return#2 ] +Allocated mem[1] [ main::i#2 main::i#1 ] +Allocated mem[2] [ plus::return#0 ] +Allocated mem[1] [ main::$4 ] +Allocated mem[2] [ plus::return#1 ] +Allocated mem[1] [ main::$5 ] +Allocated mem[2] [ main::$1 ] +Allocated mem[2] [ main::$3 ] +Allocated mem[1] [ main::$2 ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [4] plus::b#0 = (int)main::i#2 [ main::i#2 plus::b#0 ] ( [ main::i#2 plus::b#0 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for mem[1] [ main::i#2 main::i#1 ] +Statement [5] call plus [ main::i#2 plus::return#2 ] ( [ main::i#2 plus::return#2 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [6] plus::return#0 = plus::return#2 [ main::i#2 plus::return#0 ] ( [ main::i#2 plus::return#0 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [7] main::$1 = plus::return#0 [ main::i#2 main::$1 ] ( [ main::i#2 main::$1 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [8] main::$4 = main::i#2 << 1 [ main::i#2 main::$1 main::$4 ] ( [ main::i#2 main::$1 main::$4 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [9] SCREEN[main::$4] = main::$1 [ main::i#2 ] ( [ main::i#2 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [10] main::$2 = $a + main::i#2 [ main::i#2 main::$2 ] ( [ main::i#2 main::$2 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [11] plus::b#1 = (int)main::i#2 [ main::i#2 main::$2 plus::b#1 ] ( [ main::i#2 main::$2 plus::b#1 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for mem[1] [ main::$2 ] +Statement [12] call plus [ main::i#2 plus::return#2 main::$2 ] ( [ main::i#2 plus::return#2 main::$2 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [13] plus::return#1 = plus::return#2 [ main::i#2 main::$2 plus::return#1 ] ( [ main::i#2 main::$2 plus::return#1 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [14] main::$3 = plus::return#1 [ main::i#2 main::$2 main::$3 ] ( [ main::i#2 main::$2 main::$3 ] { } ) always clobbers reg byte a +Statement [15] main::$5 = main::$2 << 1 [ main::i#2 main::$3 main::$5 ] ( [ main::i#2 main::$3 main::$5 ] { } ) always clobbers reg byte a +Statement [16] SCREEN[main::$5] = main::$3 [ main::i#2 ] ( [ main::i#2 ] { } ) always clobbers reg byte a +Statement [19] plus::r#1 = 2 + plus::a#2 [ plus::a#2 plus::b#2 plus::r#1 ] ( plus:5 [ main::i#2 plus::a#2 plus::b#2 plus::r#1 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } plus:12 [ main::i#2 main::$2 plus::a#2 plus::b#2 plus::r#1 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [20] plus::r#2 = plus::r#1 + plus::b#2 [ plus::a#2 plus::b#2 plus::r#2 ] ( plus:5 [ main::i#2 plus::a#2 plus::b#2 plus::r#2 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } plus:12 [ main::i#2 main::$2 plus::a#2 plus::b#2 plus::r#2 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [21] plus::r#3 = plus::r#2 + plus::a#2 [ plus::b#2 plus::r#3 ] ( plus:5 [ main::i#2 plus::b#2 plus::r#3 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } plus:12 [ main::i#2 main::$2 plus::b#2 plus::r#3 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [22] plus::return#2 = plus::r#3 + plus::b#2 [ plus::return#2 ] ( plus:5 [ main::i#2 plus::return#2 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } plus:12 [ main::i#2 main::$2 plus::return#2 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [4] plus::b#0 = (int)main::i#2 [ main::i#2 plus::b#0 ] ( [ main::i#2 plus::b#0 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [5] call plus [ main::i#2 plus::return#2 ] ( [ main::i#2 plus::return#2 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [6] plus::return#0 = plus::return#2 [ main::i#2 plus::return#0 ] ( [ main::i#2 plus::return#0 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } ) always clobbers reg byte a +Statement [7] main::$1 = plus::return#0 [ main::i#2 main::$1 ] ( [ main::i#2 main::$1 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [8] main::$4 = main::i#2 << 1 [ main::i#2 main::$1 main::$4 ] ( [ main::i#2 main::$1 main::$4 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [9] SCREEN[main::$4] = main::$1 [ main::i#2 ] ( [ main::i#2 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [10] main::$2 = $a + main::i#2 [ main::i#2 main::$2 ] ( [ main::i#2 main::$2 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [11] plus::b#1 = (int)main::i#2 [ main::i#2 main::$2 plus::b#1 ] ( [ main::i#2 main::$2 plus::b#1 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [12] call plus [ main::i#2 plus::return#2 main::$2 ] ( [ main::i#2 plus::return#2 main::$2 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [13] plus::return#1 = plus::return#2 [ main::i#2 main::$2 plus::return#1 ] ( [ main::i#2 main::$2 plus::return#1 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [14] main::$3 = plus::return#1 [ main::i#2 main::$2 main::$3 ] ( [ main::i#2 main::$2 main::$3 ] { } ) always clobbers reg byte a +Statement [15] main::$5 = main::$2 << 1 [ main::i#2 main::$3 main::$5 ] ( [ main::i#2 main::$3 main::$5 ] { } ) always clobbers reg byte a +Statement [16] SCREEN[main::$5] = main::$3 [ main::i#2 ] ( [ main::i#2 ] { } ) always clobbers reg byte a +Statement [19] plus::r#1 = 2 + plus::a#2 [ plus::a#2 plus::b#2 plus::r#1 ] ( plus:5 [ main::i#2 plus::a#2 plus::b#2 plus::r#1 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } plus:12 [ main::i#2 main::$2 plus::a#2 plus::b#2 plus::r#1 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [20] plus::r#2 = plus::r#1 + plus::b#2 [ plus::a#2 plus::b#2 plus::r#2 ] ( plus:5 [ main::i#2 plus::a#2 plus::b#2 plus::r#2 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } plus:12 [ main::i#2 main::$2 plus::a#2 plus::b#2 plus::r#2 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [21] plus::r#3 = plus::r#2 + plus::a#2 [ plus::b#2 plus::r#3 ] ( plus:5 [ main::i#2 plus::b#2 plus::r#3 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } plus:12 [ main::i#2 main::$2 plus::b#2 plus::r#3 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Statement [22] plus::return#2 = plus::r#3 + plus::b#2 [ plus::return#2 ] ( plus:5 [ main::i#2 plus::return#2 ] { { plus::b#0 = plus::b#2 } { plus::return#0 = plus::return#2 } } plus:12 [ main::i#2 main::$2 plus::return#2 ] { { plus::b#1 = plus::b#2 } { plus::return#1 = plus::return#2 } } ) always clobbers reg byte a +Potential registers mem[1] [ main::i#2 main::i#1 ] : mem[1] , reg byte x , reg byte y , +Potential registers mem[2] [ plus::a#2 ] : mem[2] , +Potential registers mem[2] [ plus::b#2 plus::b#0 plus::b#1 ] : mem[2] , +Potential registers mem[2] [ plus::return#0 ] : mem[2] , +Potential registers mem[2] [ main::$1 ] : mem[2] , +Potential registers mem[1] [ main::$4 ] : mem[1] , reg byte a , reg byte x , reg byte y , +Potential registers mem[1] [ main::$2 ] : mem[1] , reg byte x , reg byte y , +Potential registers mem[2] [ plus::return#1 ] : mem[2] , +Potential registers mem[2] [ main::$3 ] : mem[2] , +Potential registers mem[1] [ main::$5 ] : mem[1] , reg byte a , reg byte x , reg byte y , +Potential registers mem[2] [ plus::r#1 ] : mem[2] , +Potential registers mem[2] [ plus::r#2 ] : mem[2] , +Potential registers mem[2] [ plus::r#3 ] : mem[2] , +Potential registers mem[2] [ plus::return#2 ] : mem[2] , + +REGISTER UPLIFT SCOPES +Uplift Scope [plus] 202: mem[2] [ plus::r#1 ] 202: mem[2] [ plus::r#2 ] 202: mem[2] [ plus::r#3 ] 100: mem[2] [ plus::b#2 plus::b#0 plus::b#1 ] 67.33: mem[2] [ plus::a#2 ] 30.75: mem[2] [ plus::return#2 ] 22: mem[2] [ plus::return#0 ] 22: mem[2] [ plus::return#1 ] +Uplift Scope [main] 25.67: mem[1] [ main::i#2 main::i#1 ] 22: mem[1] [ main::$4 ] 22: mem[1] [ main::$5 ] 11: mem[2] [ main::$1 ] 11: mem[2] [ main::$3 ] 4.4: mem[1] [ main::$2 ] +Uplift Scope [] + +Uplifting [plus] best 2226 combination mem[2] [ plus::r#1 ] mem[2] [ plus::r#2 ] mem[2] [ plus::r#3 ] mem[2] [ plus::b#2 plus::b#0 plus::b#1 ] mem[2] [ plus::a#2 ] mem[2] [ plus::return#2 ] mem[2] [ plus::return#0 ] mem[2] [ plus::return#1 ] +Uplifting [main] best 1866 combination reg byte y [ main::i#2 main::i#1 ] reg byte x [ main::$4 ] reg byte x [ main::$5 ] mem[2] [ main::$1 ] mem[2] [ main::$3 ] reg byte x [ main::$2 ] +Limited combination testing to 100 combinations of 144 possible. +Uplifting [] best 1866 combination +Coalescing zero page register [ mem[2] [ plus::return#0 ] ] with [ mem[2] [ main::$1 ] ] - score: 1 +Coalescing zero page register [ mem[2] [ plus::return#0 main::$1 ] ] with [ mem[2] [ plus::return#2 ] ] - score: 1 +Coalescing zero page register [ mem[2] [ plus::return#1 ] ] with [ mem[2] [ main::$3 ] ] - score: 1 +Coalescing zero page register [ mem[2] [ plus::r#1 ] ] with [ mem[2] [ plus::r#2 ] ] - score: 1 +Coalescing zero page register [ mem[2] [ plus::return#0 main::$1 plus::return#2 ] ] with [ mem[2] [ plus::return#1 main::$3 ] ] - score: 1 +Coalescing zero page register [ mem[2] [ plus::r#1 plus::r#2 ] ] with [ mem[2] [ plus::r#3 ] ] - score: 1 + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +/** + * Test banked calls with memory variables. + * The parameters & return should end up in the shared/common bank. + */ + // Upstart + .file [name="call-banked-phi-memvars.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [1] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + // [1] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 + ldy #0 + jmp __b1 + // main::@1 + __b1: + // [2] if(main::i#2<5) goto main::@2 -- vbuyy_lt_vbuc1_then_la1 + cpy #5 + bcc __b2 + jmp __breturn + // main::@return + __breturn: + // [3] return + rts + // main::@2 + __b2: + // [4] plus::b#0 = (int)main::i#2 -- vwsm1=_sword_vbuyy + tya + sta plus.b + lda #0 + sta plus.b+1 + // [5] call plus + // [18] phi from main::@2 to plus [phi:main::@2->plus] + plus_from___b2: + // [18] phi plus::b#2 = plus::b#0 [phi:main::@2->plus#0] -- register_copy + // [18] phi plus::a#2 = $64 [phi:main::@2->plus#1] -- call_phi_close_cx16_ram + lda #<$64 + sta plus.a + lda #>$64 + sta plus.a+1 + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // [6] plus::return#0 = plus::return#2 + jmp __b3 + // main::@3 + __b3: + // [7] main::$1 = plus::return#0 + // [8] main::$4 = main::i#2 << 1 -- vbuxx=vbuyy_rol_1 + tya + asl + tax + // [9] SCREEN[main::$4] = main::$1 -- pwsc1_derefidx_vbuxx=vwsm1 + lda __1 + sta SCREEN,x + lda __1+1 + sta SCREEN+1,x + // [10] main::$2 = $a + main::i#2 -- vbuxx=vbuc1_plus_vbuyy + tya + tax + axs #-[$a] + // [11] plus::b#1 = (int)main::i#2 -- vwsm1=_sword_vbuyy + tya + sta plus.b + lda #0 + sta plus.b+1 + // [12] call plus + // [18] phi from main::@3 to plus [phi:main::@3->plus] + plus_from___b3: + // [18] phi plus::b#2 = plus::b#1 [phi:main::@3->plus#0] -- register_copy + // [18] phi plus::a#2 = $c8 [phi:main::@3->plus#1] -- call_phi_close_cx16_ram + lda #<$c8 + sta plus.a + lda #>$c8 + sta plus.a+1 + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // [13] plus::return#1 = plus::return#2 + jmp __b4 + // main::@4 + __b4: + // [14] main::$3 = plus::return#1 + // [15] main::$5 = main::$2 << 1 -- vbuxx=vbuxx_rol_1 + txa + asl + tax + // [16] SCREEN[main::$5] = main::$3 -- pwsc1_derefidx_vbuxx=vwsm1 + lda __3 + sta SCREEN,x + lda __3+1 + sta SCREEN+1,x + // [17] main::i#1 = ++ main::i#2 -- vbuyy=_inc_vbuyy + iny + // [1] phi from main::@4 to main::@1 [phi:main::@4->main::@1] + __b1_from___b4: + // [1] phi main::i#2 = main::i#1 [phi:main::@4->main::@1#0] -- register_copy + jmp __b1 + .segment Data + .label __1 = plus.return + .label __3 = plus.return +} +.segment RAM_Bank1 + // plus +// __mem() int plus(__mem() int a, __mem() int b) +// __bank(cx16_ram, 1) +plus: { + // [19] plus::r#1 = 2 + plus::a#2 -- vwsm1=vwsc1_plus_vwsm2 + clc + lda a + adc #<2 + sta r + lda a+1 + adc #>2 + sta r+1 + // [20] plus::r#2 = plus::r#1 + plus::b#2 -- vwsm1=vwsm1_plus_vwsm2 + clc + lda r + adc b + sta r + lda r+1 + adc b+1 + sta r+1 + // [21] plus::r#3 = plus::r#2 + plus::a#2 -- vwsm1=vwsm1_plus_vwsm2 + clc + lda r + adc a + sta r + lda r+1 + adc a+1 + sta r+1 + // [22] plus::return#2 = plus::r#3 + plus::b#2 -- vwsm1=vwsm2_plus_vwsm3 + lda r + clc + adc b + sta return + lda r+1 + adc b+1 + sta return+1 + jmp __breturn + // plus::@return + __breturn: + // [23] return + rts + .segment Data + b: .word 0 + return: .word 0 + .segment RAM_Bank1 + r: .word 0 + .segment Data + a: .word 0 +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b3 +Removing instruction jmp __b4 +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __b1_from_main: +Removing instruction __breturn: +Removing instruction plus_from___b2: +Removing instruction __b3: +Removing instruction plus_from___b3: +Removing instruction __b4: +Removing instruction __b1_from___b4: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant int * const SCREEN = (int *) 1024 +void main() +int main::$1 // mem[2] 11.0 +char main::$2 // reg byte x 4.4 +int main::$3 // mem[2] 11.0 +char main::$4 // reg byte x 22.0 +char main::$5 // reg byte x 22.0 +char main::i +char main::i#1 // reg byte y 22.0 +char main::i#2 // reg byte y 3.6666666666666665 +__bank(cx16_ram, 1) int plus(int a , int b) +int plus::a +int plus::a#2 // a mem[2] 67.33333333333333 +int plus::b +int plus::b#0 // b mem[2] 22.0 +int plus::b#1 // b mem[2] 22.0 +int plus::b#2 // b mem[2] 56.0 +int plus::r +int plus::r#1 // r mem[2] 202.0 +int plus::r#2 // r mem[2] 202.0 +int plus::r#3 // r mem[2] 202.0 +int plus::return +int plus::return#0 // return mem[2] 22.0 +int plus::return#1 // return mem[2] 22.0 +int plus::return#2 // return mem[2] 30.75 + +reg byte y [ main::i#2 main::i#1 ] +mem[2] [ plus::a#2 ] +mem[2] [ plus::b#2 plus::b#0 plus::b#1 ] +mem[2] [ plus::return#0 main::$1 plus::return#2 plus::return#1 main::$3 ] +reg byte x [ main::$4 ] +reg byte x [ main::$2 ] +reg byte x [ main::$5 ] +mem[2] [ plus::r#1 plus::r#2 plus::r#3 ] + + +FINAL ASSEMBLER +Score: 1103 + + // File Comments +/** + * Test banked calls with memory variables. + * The parameters & return should end up in the shared/common bank. + */ + // Upstart + .file [name="call-banked-phi-memvars.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segmentdef RAM_Bank1 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef RAM_Bank2 [start=$A000, min=$A000, max=$BFFF, align=$100] +.segmentdef ROM_Bank1 [start=$C000, min=$C000, max=$FFFF, align=$100] +.segment Basic +:BasicUpstart(main) +.segment Code +.segment Data + + + // Global Constants & labels + .label SCREEN = $400 +.segment Code + // main +main: { + // [1] phi from main to main::@1 [phi:main->main::@1] + // [1] phi main::i#2 = 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 + ldy #0 + // main::@1 + __b1: + // for(char i=0;i<5; i++) + // [2] if(main::i#2<5) goto main::@2 -- vbuyy_lt_vbuc1_then_la1 + cpy #5 + bcc __b2 + // main::@return + // } + // [3] return + rts + // main::@2 + __b2: + // plus(100, (int)i) + // [4] plus::b#0 = (int)main::i#2 -- vwsm1=_sword_vbuyy + tya + sta plus.b + lda #0 + sta plus.b+1 + // [5] call plus + // [18] phi from main::@2 to plus [phi:main::@2->plus] + // [18] phi plus::b#2 = plus::b#0 [phi:main::@2->plus#0] -- register_copy + // [18] phi plus::a#2 = $64 [phi:main::@2->plus#1] -- call_phi_close_cx16_ram + lda #<$64 + sta plus.a + lda #>$64 + sta plus.a+1 + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus(100, (int)i) + // [6] plus::return#0 = plus::return#2 + // main::@3 + // [7] main::$1 = plus::return#0 + // SCREEN[i] = plus(100, (int)i) + // [8] main::$4 = main::i#2 << 1 -- vbuxx=vbuyy_rol_1 + tya + asl + tax + // [9] SCREEN[main::$4] = main::$1 -- pwsc1_derefidx_vbuxx=vwsm1 + lda __1 + sta SCREEN,x + lda __1+1 + sta SCREEN+1,x + // 10+i + // [10] main::$2 = $a + main::i#2 -- vbuxx=vbuc1_plus_vbuyy + tya + tax + axs #-[$a] + // plus(200, (int)i) + // [11] plus::b#1 = (int)main::i#2 -- vwsm1=_sword_vbuyy + tya + sta plus.b + lda #0 + sta plus.b+1 + // [12] call plus + // [18] phi from main::@3 to plus [phi:main::@3->plus] + // [18] phi plus::b#2 = plus::b#1 [phi:main::@3->plus#0] -- register_copy + // [18] phi plus::a#2 = $c8 [phi:main::@3->plus#1] -- call_phi_close_cx16_ram + lda #<$c8 + sta plus.a + lda #>$c8 + sta plus.a+1 + sta.z $ff + lda.z 0 + pha + lda #1 + sta.z 0 + lda.z $ff + jsr plus + sta.z $ff + pla + sta.z 0 + lda.z $ff + // plus(200, (int)i) + // [13] plus::return#1 = plus::return#2 + // main::@4 + // [14] main::$3 = plus::return#1 + // SCREEN[10+i] = plus(200, (int)i) + // [15] main::$5 = main::$2 << 1 -- vbuxx=vbuxx_rol_1 + txa + asl + tax + // [16] SCREEN[main::$5] = main::$3 -- pwsc1_derefidx_vbuxx=vwsm1 + lda __3 + sta SCREEN,x + lda __3+1 + sta SCREEN+1,x + // for(char i=0;i<5; i++) + // [17] main::i#1 = ++ main::i#2 -- vbuyy=_inc_vbuyy + iny + // [1] phi from main::@4 to main::@1 [phi:main::@4->main::@1] + // [1] phi main::i#2 = main::i#1 [phi:main::@4->main::@1#0] -- register_copy + jmp __b1 + .segment Data + .label __1 = plus.return + .label __3 = plus.return +} +.segment RAM_Bank1 + // plus +// __mem() int plus(__mem() int a, __mem() int b) +// __bank(cx16_ram, 1) +plus: { + // r += a + // [19] plus::r#1 = 2 + plus::a#2 -- vwsm1=vwsc1_plus_vwsm2 + clc + lda a + adc #<2 + sta r + lda a+1 + adc #>2 + sta r+1 + // r += b + // [20] plus::r#2 = plus::r#1 + plus::b#2 -- vwsm1=vwsm1_plus_vwsm2 + clc + lda r + adc b + sta r + lda r+1 + adc b+1 + sta r+1 + // r += a + // [21] plus::r#3 = plus::r#2 + plus::a#2 -- vwsm1=vwsm1_plus_vwsm2 + clc + lda r + adc a + sta r + lda r+1 + adc a+1 + sta r+1 + // r += b + // [22] plus::return#2 = plus::r#3 + plus::b#2 -- vwsm1=vwsm2_plus_vwsm3 + lda r + clc + adc b + sta return + lda r+1 + adc b+1 + sta return+1 + // plus::@return + // } + // [23] return + rts + .segment Data + b: .word 0 + return: .word 0 + .segment RAM_Bank1 + r: .word 0 + .segment Data + a: .word 0 +} + // File Data + diff --git a/src/test/ref/call-banked-phi-memvars.sym b/src/test/ref/call-banked-phi-memvars.sym new file mode 100644 index 000000000..e7554762e --- /dev/null +++ b/src/test/ref/call-banked-phi-memvars.sym @@ -0,0 +1,34 @@ +__constant int * const SCREEN = (int *) 1024 +void main() +int main::$1 // mem[2] 11.0 +char main::$2 // reg byte x 4.4 +int main::$3 // mem[2] 11.0 +char main::$4 // reg byte x 22.0 +char main::$5 // reg byte x 22.0 +char main::i +char main::i#1 // reg byte y 22.0 +char main::i#2 // reg byte y 3.6666666666666665 +__bank(cx16_ram, 1) int plus(int a , int b) +int plus::a +int plus::a#2 // a mem[2] 67.33333333333333 +int plus::b +int plus::b#0 // b mem[2] 22.0 +int plus::b#1 // b mem[2] 22.0 +int plus::b#2 // b mem[2] 56.0 +int plus::r +int plus::r#1 // r mem[2] 202.0 +int plus::r#2 // r mem[2] 202.0 +int plus::r#3 // r mem[2] 202.0 +int plus::return +int plus::return#0 // return mem[2] 22.0 +int plus::return#1 // return mem[2] 22.0 +int plus::return#2 // return mem[2] 30.75 + +reg byte y [ main::i#2 main::i#1 ] +mem[2] [ plus::a#2 ] +mem[2] [ plus::b#2 plus::b#0 plus::b#1 ] +mem[2] [ plus::return#0 main::$1 plus::return#2 plus::return#1 main::$3 ] +reg byte x [ main::$4 ] +reg byte x [ main::$2 ] +reg byte x [ main::$5 ] +mem[2] [ plus::r#1 plus::r#2 plus::r#3 ] From d4040e30a0dbfa6b36310d0d14b9f45433cd8d68 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Mon, 24 Apr 2023 00:36:36 +0200 Subject: [PATCH 65/66] Moved handling of banked param/return to pass 1. --- .../java/dk/camelot64/kickc/Compiler.java | 1 + .../passes/Pass1FixProcedureParamSegment.java | 46 +++++++++++++++++++ .../kickc/passes/Pass4CodeGeneration.java | 24 ---------- .../kickc/test/TestProgramsFast.java | 2 +- src/test/ref/call-banked-phi-memvars.asm | 14 +++--- src/test/ref/call-banked-phi-memvars.log | 43 +++++++++-------- src/test/ref/call-banked-phi-memvars.sym | 3 +- 7 files changed, 79 insertions(+), 54 deletions(-) create mode 100644 src/main/java/dk/camelot64/kickc/passes/Pass1FixProcedureParamSegment.java diff --git a/src/main/java/dk/camelot64/kickc/Compiler.java b/src/main/java/dk/camelot64/kickc/Compiler.java index cc8b197cd..f5a16b1d9 100644 --- a/src/main/java/dk/camelot64/kickc/Compiler.java +++ b/src/main/java/dk/camelot64/kickc/Compiler.java @@ -224,6 +224,7 @@ public class Compiler { new Pass1Procedures(program).execute(); new PassNTypeInference(program).execute(); new PassNFixIntermediateMemoryArea(program).execute(); + new Pass1FixProcedureParamSegment(program).execute(); new PassNTypeIdSimplification(program).execute(); new Pass1StructTypeSizeFix(program).execute(); new Pass1PrintfIntrinsicRewrite(program).execute(); diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass1FixProcedureParamSegment.java b/src/main/java/dk/camelot64/kickc/passes/Pass1FixProcedureParamSegment.java new file mode 100644 index 000000000..3935b5729 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/passes/Pass1FixProcedureParamSegment.java @@ -0,0 +1,46 @@ +package dk.camelot64.kickc.passes; + +import dk.camelot64.kickc.model.Program; +import dk.camelot64.kickc.model.Registers; +import dk.camelot64.kickc.model.symbols.Procedure; +import dk.camelot64.kickc.model.symbols.Scope; +import dk.camelot64.kickc.model.symbols.Variable; + +import java.util.Collection; +import java.util.List; + +/** + * Ensure banked procedure parameters/return values in main memory are placed in the default data segment. + * This is needed to support banking, since it is otherwise impossible to access them across bank boundaries during calls. + */ +public class Pass1FixProcedureParamSegment extends Pass2SsaOptimization { + + public Pass1FixProcedureParamSegment(Program program) { + super(program); + } + + @Override + public boolean step() { + final Collection allVariables = getScope().getAllVariables(true); + for(Variable variable : allVariables) { + if(variable.isKindLoadStore() || variable.isKindPhiMaster() || variable.isKindIntermediate()) { + if(variable.getRegister() instanceof Registers.RegisterMainMem registerMainMem && registerMainMem.isAddressHardcoded()) + continue; + if(variable.getDataSegment().equals(Scope.SEGMENT_DATA_DEFAULT)) + continue; + + final Scope scope = variable.getScope(); + if(scope instanceof Procedure procedure) { + if(!procedure.getBank().isCommon()) { + List parameters = procedure.getParameters(); + if(parameters.contains(variable) || variable.getLocalName().equals("return")) { + variable.setDataSegment(Scope.SEGMENT_DATA_DEFAULT); + getLog().append("Fixing banked procedure parameter/return value to default segment " + variable.getFullName()); + } + } + } + } + } + return false; + } +} diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 8d7426a3b..29000ba0b 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -583,30 +583,6 @@ public class Pass4CodeGeneration { if (registerMainMem.getAddress() == null) { // Generate into the data segment // Set segment - // We check first the bank of the variable. Only local variables can be stored in the bank. - // Parameters must be stored in main memory. - if(!variable.getDataSegment().equals(Scope.SEGMENT_DATA_DEFAULT)) { - if(scope instanceof Procedure) { - Procedure procedure = (Procedure) scope; - List parameters = procedure.getParameters(); - if (variable.isKindPhiVersion()) { - Variable master = variable.getPhiMaster(); - if (master != null) { - if (parameters.contains(master) || master.getLocalName().equals("return")) { - variable.setDataSegment(Scope.SEGMENT_DATA_DEFAULT); - } - } - } - } - } - - // Intermediate variables are placed at the banked data segment, but parameters and return values are kept untouched. - if (variable.isKindIntermediate()) { - if (scope instanceof Procedure) { - Procedure procedure = (Procedure) scope; - variable.setDataSegment(procedure.getSegmentData()); - } - } setCurrentSegment(variable.getDataSegment(), asm); // Add any comments generateComments(asm, variable.getComments()); diff --git a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java index f85993677..df4514641 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java +++ b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java @@ -1583,7 +1583,7 @@ public class TestProgramsFast extends TestPrograms { @Test public void testBankedPhiMemvars() throws IOException { - compileAndCompare("call-banked-phi-memvars.c", log()); + compileAndCompare("call-banked-phi-memvars.c"); } diff --git a/src/test/ref/call-banked-phi-memvars.asm b/src/test/ref/call-banked-phi-memvars.asm index 1a15757b6..bd4556180 100644 --- a/src/test/ref/call-banked-phi-memvars.asm +++ b/src/test/ref/call-banked-phi-memvars.asm @@ -93,8 +93,8 @@ main: { iny jmp __b1 .segment Data - .label __1 = plus.return - .label __3 = plus.return + .label __1 = plus.b + .label __3 = plus.b } .segment RAM_Bank1 // __mem() int plus(__mem() int a, __mem() int b) @@ -125,18 +125,18 @@ plus: { adc a+1 sta r+1 // r += b - lda r clc - adc b + lda return + adc r sta return - lda r+1 - adc b+1 + lda return+1 + adc r+1 sta return+1 // } rts .segment Data b: .word 0 - return: .word 0 + .label return = b .segment RAM_Bank1 r: .word 0 .segment Data diff --git a/src/test/ref/call-banked-phi-memvars.log b/src/test/ref/call-banked-phi-memvars.log index ad6a75b41..6aea5faca 100644 --- a/src/test/ref/call-banked-phi-memvars.log +++ b/src/test/ref/call-banked-phi-memvars.log @@ -3,6 +3,9 @@ Updating intermediate variable memory area to MAIN_MEMORY main::$0 Updating intermediate variable memory area to MAIN_MEMORY main::$1 Updating intermediate variable memory area to MAIN_MEMORY main::$2 Updating intermediate variable memory area to MAIN_MEMORY main::$3 +Fixing banked procedure parameter/return value to default segment plus::a +Fixing banked procedure parameter/return value to default segment plus::b +Fixing banked procedure parameter/return value to default segment plus::return CONTROL FLOW GRAPH SSA @@ -359,11 +362,12 @@ Uplifting [plus] best 2226 combination mem[2] [ plus::r#1 ] mem[2] [ plus::r#2 ] Uplifting [main] best 1866 combination reg byte y [ main::i#2 main::i#1 ] reg byte x [ main::$4 ] reg byte x [ main::$5 ] mem[2] [ main::$1 ] mem[2] [ main::$3 ] reg byte x [ main::$2 ] Limited combination testing to 100 combinations of 144 possible. Uplifting [] best 1866 combination +Coalescing zero page register [ mem[2] [ plus::b#2 plus::b#0 plus::b#1 ] ] with [ mem[2] [ plus::return#2 ] ] - score: 1 Coalescing zero page register [ mem[2] [ plus::return#0 ] ] with [ mem[2] [ main::$1 ] ] - score: 1 -Coalescing zero page register [ mem[2] [ plus::return#0 main::$1 ] ] with [ mem[2] [ plus::return#2 ] ] - score: 1 Coalescing zero page register [ mem[2] [ plus::return#1 ] ] with [ mem[2] [ main::$3 ] ] - score: 1 Coalescing zero page register [ mem[2] [ plus::r#1 ] ] with [ mem[2] [ plus::r#2 ] ] - score: 1 -Coalescing zero page register [ mem[2] [ plus::return#0 main::$1 plus::return#2 ] ] with [ mem[2] [ plus::return#1 main::$3 ] ] - score: 1 +Coalescing zero page register [ mem[2] [ plus::b#2 plus::b#0 plus::b#1 plus::return#2 ] ] with [ mem[2] [ plus::return#0 main::$1 ] ] - score: 1 +Coalescing zero page register [ mem[2] [ plus::b#2 plus::b#0 plus::b#1 plus::return#2 plus::return#0 main::$1 ] ] with [ mem[2] [ plus::return#1 main::$3 ] ] - score: 1 Coalescing zero page register [ mem[2] [ plus::r#1 plus::r#2 ] ] with [ mem[2] [ plus::r#3 ] ] - score: 1 ASSEMBLER BEFORE OPTIMIZATION @@ -498,8 +502,8 @@ main: { // [1] phi main::i#2 = main::i#1 [phi:main::@4->main::@1#0] -- register_copy jmp __b1 .segment Data - .label __1 = plus.return - .label __3 = plus.return + .label __1 = plus.b + .label __3 = plus.b } .segment RAM_Bank1 // plus @@ -530,13 +534,13 @@ plus: { lda r+1 adc a+1 sta r+1 - // [22] plus::return#2 = plus::r#3 + plus::b#2 -- vwsm1=vwsm2_plus_vwsm3 - lda r + // [22] plus::return#2 = plus::r#3 + plus::b#2 -- vwsm1=vwsm2_plus_vwsm1 clc - adc b + lda return + adc r sta return - lda r+1 - adc b+1 + lda return+1 + adc r+1 sta return+1 jmp __breturn // plus::@return @@ -545,7 +549,7 @@ plus: { rts .segment Data b: .word 0 - return: .word 0 + .label return = b .segment RAM_Bank1 r: .word 0 .segment Data @@ -599,8 +603,7 @@ int plus::return#2 // return mem[2] 30.75 reg byte y [ main::i#2 main::i#1 ] mem[2] [ plus::a#2 ] -mem[2] [ plus::b#2 plus::b#0 plus::b#1 ] -mem[2] [ plus::return#0 main::$1 plus::return#2 plus::return#1 main::$3 ] +mem[2] [ plus::b#2 plus::b#0 plus::b#1 plus::return#2 plus::return#0 main::$1 plus::return#1 main::$3 ] reg byte x [ main::$4 ] reg byte x [ main::$2 ] reg byte x [ main::$5 ] @@ -740,8 +743,8 @@ main: { // [1] phi main::i#2 = main::i#1 [phi:main::@4->main::@1#0] -- register_copy jmp __b1 .segment Data - .label __1 = plus.return - .label __3 = plus.return + .label __1 = plus.b + .label __3 = plus.b } .segment RAM_Bank1 // plus @@ -776,13 +779,13 @@ plus: { adc a+1 sta r+1 // r += b - // [22] plus::return#2 = plus::r#3 + plus::b#2 -- vwsm1=vwsm2_plus_vwsm3 - lda r + // [22] plus::return#2 = plus::r#3 + plus::b#2 -- vwsm1=vwsm2_plus_vwsm1 clc - adc b + lda return + adc r sta return - lda r+1 - adc b+1 + lda return+1 + adc r+1 sta return+1 // plus::@return // } @@ -790,7 +793,7 @@ plus: { rts .segment Data b: .word 0 - return: .word 0 + .label return = b .segment RAM_Bank1 r: .word 0 .segment Data diff --git a/src/test/ref/call-banked-phi-memvars.sym b/src/test/ref/call-banked-phi-memvars.sym index e7554762e..4300fc0bd 100644 --- a/src/test/ref/call-banked-phi-memvars.sym +++ b/src/test/ref/call-banked-phi-memvars.sym @@ -26,8 +26,7 @@ int plus::return#2 // return mem[2] 30.75 reg byte y [ main::i#2 main::i#1 ] mem[2] [ plus::a#2 ] -mem[2] [ plus::b#2 plus::b#0 plus::b#1 ] -mem[2] [ plus::return#0 main::$1 plus::return#2 plus::return#1 main::$3 ] +mem[2] [ plus::b#2 plus::b#0 plus::b#1 plus::return#2 plus::return#0 main::$1 plus::return#1 main::$3 ] reg byte x [ main::$4 ] reg byte x [ main::$2 ] reg byte x [ main::$5 ] From 46079f3ec2deb2b5911dd211a7a7738ad5975c14 Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Mon, 24 Apr 2023 05:27:26 +0000 Subject: [PATCH 66/66] #819 C-code baseline with CX16 developments --- .gitignore | 18 +- .../cache/fragment-cache-wdc65c02.asm | 4580 ++ .../_stackidxbool_vbuc1=vboaa.asm | 2 + .../_stackidxbool_vbuc1=vboyy.asm | 3 + ...pushdword_=_dword_pwuc1_derefidx_vbum1.asm | 9 + .../mos6502-common/_stackpushdword_=vwum1.asm | 8 + .../mos6502-common/isr_rom_sys_cx16_exit.asm | 2 +- .../pbuc1_eq__deref_qbuc2_then_la1.asm | 7 + .../pbuc1_eq_pbuc2_then_la1.asm | 7 + ...pbuc1_eq_qbuz1_derefidx_vbuyy_then_la1.asm | 8 + .../pbuc1_neq__deref_qbuc2_then_la1.asm | 6 + ...idx_vbuyy=pbuz1_derefidx_vbuyy_minus_1.asm | 4 + .../pbuz1_neq__deref_qbuc1_then_la1.asm | 6 + .../pduc1_derefidx_vbum1=vbuc2.asm | 7 + .../pduc1_derefidx_vbum1=vwuc2.asm | 8 + .../pduc1_derefidx_vbuyy=vduc2.asm | 8 + .../pssc1_derefidx_vbuxx=_deref_qssz1.asm | 6 + .../mos6502-common/pssm1=_deref_qssm1.asm | 10 + .../pssz1=qssz2_derefidx_vbuc1_plus_vbuc2.asm | 11 + ...refidx_vbuyy=_deref_pvoc1_memcpy_vbuc2.asm | 8 + ...x_vbuyy=_deref_pvoz2_memcpy_vbuc2 temp.asm | 8 + ...refidx_vbuxx_plus_pbsc2_derefidx_vbuyy.asm | 13 + ..._vbuxx=pwsc1_derefidx_vbuxx_plus_vbsm1.asm | 7 + ...c1_derefidx_vbuxx=pwsz1_derefidx_vbuc2.asm | 6 + ...refidx_vbuyy_plus_pbsc2_derefidx_vbuxx.asm | 13 + ...y=pwsc1_derefidx_vbuyy_plus_vbsm1_temp.asm | 7 + .../pwsz1_derefidx_vbuyy=_deref_pwsc2.asm | 5 + .../pwsz1_derefidx_vbuyy=_sword_vbum2.asm | 8 + ...z1_derefidx_vbuyy=pwsz2_derefidx_vbuyy.asm | 5 + .../pwsz1_derefidx_vbuyy_gt_0_then_la1.asm | 10 + ...pwsz1_derefidx_vbuyy_le_vwsc1_then_la1.asm | 10 + ...vbum1=pwuc1_derefidx_vbum1_minus_vwum2.asm | 8 + ..._vbum1=pwuc1_derefidx_vbum1_plus_vwum2.asm | 8 + ..._vbuxx=pwuc1_derefidx_vbuxx_band_vwuc2.asm | 6 + ...x_vbuxx=pwuc1_derefidx_vbuxx_bor_vwuc2.asm | 6 + ..._vbuxx=pwuc1_derefidx_vbuxx_bxor_vwuc2.asm | 6 + ...vbuxx=pwuc1_derefidx_vbuxx_minus_vwum1.asm | 7 + ...vbuxx=pwuc1_derefidx_vbuxx_minus_vwuz1.asm | 7 + ..._vbuxx=pwuc1_derefidx_vbuxx_plus_vwum1.asm | 7 + ..._vbuxx=pwuc1_derefidx_vbuxx_plus_vwuz1.asm | 7 + ..._vbuyy=pwuc1_derefidx_vbuyy_band_vwuc2.asm | 6 + ...x_vbuyy=pwuc1_derefidx_vbuyy_bor_vwuc2.asm | 6 + ...vbuyy=pwuc1_derefidx_vbuyy_minus_vwum1.asm | 7 + ..._vbuyy=pwuc1_derefidx_vbuyy_plus_vwum1.asm | 7 + ...wuc1_derefidx_vbuyy_neq_vbum1_then_la1.asm | 6 + ...vbuz1=pwuc1_derefidx_vbuz1_minus_vwuz2.asm | 8 + ..._vbuz1=pwuc1_derefidx_vbuz1_plus_vwuz2.asm | 8 + .../pwum1_derefidx_vbuyy=vwum2_temp.asm | 9 + ...vbuc1=pwuz1_derefidx_vbuc1_minus_vwum2.asm | 10 + ..._vbuc1=pwuz1_derefidx_vbuc1_plus_vwum2.asm | 10 + ...refidx_vbuc1=pwuz1_derefidx_vbuc1_temp.asm | 8 + ...z1_derefidx_vbuc1=pwuz1_derefidx_vbuc2.asm | 8 + .../pwuz1_derefidx_vbuyy=_deref_pwuc2.asm | 5 + ..._vbuz2=pwuz3_derefidx_vbuz2_band_vwuc1.asm | 8 + ...x_vbuz2=pwuz3_derefidx_vbuz2_bor_vwuc1.asm | 8 + .../mos6502-common/qbuz1=qbuz1_plus_1.asm | 6 + .../mos6502-common/qbuz1=qbuz2_plus_1.asm | 6 + .../qssc1_derefidx_vbuxx=_deref_qssz1.asm | 6 + ...c1_derefidx_vbuxx=qssz1_derefidx_vbuc2.asm | 6 + ...qssc1_derefidx_vbuxx_eq_pssz1_then_la1.asm | 7 + ...qssc1_derefidx_vbuyy_eq_pssz1_then_la1.asm | 7 + .../mos6502-common/qssz1=qssz1_plus_1.asm | 8 + .../mos6502-common/qssz1=qssz2_plus_1.asm | 7 + .../qssz1_derefidx_vbuc1_eq_0_then_la1.asm | 7 + .../qssz1_derefidx_vbuc1_neq_0_then_la1.asm | 7 + .../mos6502-common/vboaa=_stackpullbool_.asm | 1 + .../mos6502-common/vboaa=vbuaa_ge_vbuc1.asm | 7 + .../mos6502-common/vboaa=vbuaa_gt_vbuc1.asm | 3 + ...1=pbum2_derefidx_vbuyy_band_vbuc1_temp.asm | 7 + .../vbum1=pbum2_derefidx_vbuyy_temp.asm | 2 + .../vdum1=_dword_pwuc1_derefidx_vbuxx.asm | 8 + .../vdum1=_dword_pwuc1_derefidx_vbuyy.asm | 8 + .../vdum1=_dword_pwuz2_derefidx_vbuc1.asm | 9 + ...elong4_(vbuc1)_(vbuaa)_(vbuxx)_(vbuaa).asm | 5 + ...elong4_(vbuc1)_(vbuaa)_(vbuxx)_(vbuxx).asm | 5 + ...elong4_(vbuc1)_(vbuaa)_(vbuxx)_(vbuyy).asm | 5 + .../mos6502-common/vdum1=_neg_vdum1.asm | 13 + .../mos6502-common/vdum1=_neg_vdum2.asm | 13 + .../mos6502-common/vdum1=vdum1_ror_3.asm | 12 + .../mos6502-common/vdum1=vdum2_minus_1.asm | 13 + .../vdum1=vdum2_minus_vdum1.asm | 13 + .../mos6502-common/vdum1=vwum2_rol_3.asm | 2 +- .../mos6502-common/vdum1=vwum2_rol_5.asm | 20 + .../vdum1_gt_vduc1_then_la1.asm | 16 + .../vdum1_le_vduc1_then_la1.asm | 17 + .../vdum1_neq_vdum2_then_la1.asm | 12 + .../vduz1=_dword_pwuc1_derefidx_vbuxx.asm | 8 + .../vduz1=_dword_pwuc1_derefidx_vbuyy.asm | 8 + .../vduz1=_dword_pwuz2_derefidx_vbuc1.asm | 9 + .../vwsm1=pwsz2_derefidx_vbuyy_plus_vbsc2.asm | 8 + .../vwsm1=vwsm1_plus_pbsz2_derefidx_vbuyy.asm | 11 + .../mos6502-common/vwsm1=vwsm1_rol_vbum2.asm | 8 + .../mos6502-common/vwsm1=vwsm1_rol_vbuxx.asm | 7 + .../mos6502-common/vwsm1=vwsm1_rol_vbuyy.asm | 7 + .../vwsm1=vwsm2_plus_pbsz3_derefidx_vbuyy.asm | 7 + .../mos6502-common/vwsm1=vwsm2_rol_vbuxx.asm | 12 + .../mos6502-common/vwsm1=vwsm2_rol_vbuyy.asm | 12 + .../mos6502-common/vwum1=_byte0_vwum1.asm | 2 + .../mos6502-common/vwum1=_byte0_vwum2.asm | 2 + .../mos6502-common/vwum1=_byte1_vwum2.asm | 2 + .../mos6502-common/vwum1=_dec_vwum2.asm | 7 + .../vwum1=_deref_pwuc1_minus__deref_pwuc2.asm | 7 + .../vwum1=_deref_pwum2_band_vwuc1_temp.asm | 12 + .../vwum1=_deref_pwuz2_band_vwuc1.asm | 9 + .../vwum1=_deref_pwuz2_bor_vwuc1.asm | 9 + .../vwum1=_deref_pwuz2_plus_vwuc1.asm | 9 + .../vwum1=_deref_pwuz2_plus_vwum1.asm | 9 + .../vwum1=_word1_pduc1_derefidx_vbuyy.asm | 4 + ...efidx_vbuxx_minus_pwuc2_derefidx_vbuxx.asm | 7 + ...efidx_vbuyy_minus_pwuc2_derefidx_vbuyy.asm | 7 + ...vwum1=pwuz2_derefidx_vbuyy_minus_vwum1.asm | 8 + .../mos6502-common/vwum1=vbuaa_minus_2.asm | 5 + .../mos6502-common/vwum1=vwum1_rol_9.asm | 5 + .../mos6502-common/vwum1=vwum1_ror_7.asm | 14 + .../mos6502-common/vwum1=vwum1_ror_vbum2.asm | 8 + .../mos6502-common/vwum1=vwum1_ror_vbuxx.asm | 6 + .../mos6502-common/vwum1=vwum1_ror_vbuyy.asm | 6 + ...vwum1=vwum2_minus_pwuc1_derefidx_vbuxx.asm | 7 + ...vwum1=vwum2_minus_pwuc1_derefidx_vbuyy.asm | 7 + .../mos6502-common/vwum1=vwum2_rol_9.asm | 5 + .../vwum1_lt_vbuyy_then_la1.asm | 7 - .../vwum1_neq__deref_pwuc1_then_la1.asm | 8 + .../vwum1_neq_vbum2_then_la1.asm | 5 + .../vwuz1=_deref_pwuz1_band_vwuc1.asm | 10 + .../vwuz1=_deref_pwuz1_bor_vwuc1.asm | 11 + .../vwuz1=_deref_pwuz1_bxor_vwuc1.asm | 10 + ...efidx_vbuz2_minus_pwuc2_derefidx_vbuz2.asm | 8 + .../vwuz1=pwuz1_derefidx_vbuyy_band_vwuc1.asm | 9 + .../vwuz1=pwuz1_derefidx_vbuyy_bor_vwuc1.asm | 9 + .../vwuz1=pwuz1_derefidx_vbuyy_bxor_vwuc1.asm | 9 + ...=pwuz1_derefidx_vbuyy_minus_vwum2 copy.asm | 10 + .../vwuz1=pwuz2_derefidx_vbuyy_band_vwuc1.asm | 7 + .../vwuz1=pwuz2_derefidx_vbuyy_band_vwuc2.asm | 7 + ...vwuz1=pwuz2_derefidx_vbuyy_minus_vwuz3.asm | 12 + .../mos6502-common/vwuz1=vwuz1_ror_vbuxx.asm | 6 + .../mos6502-common/vwuz1=vwuz1_ror_vbuyy.asm | 6 + src/main/kc/include/c128.h | 74 + src/main/kc/include/conio.h | 2 +- src/main/kc/include/cx16-bitmap.h | 2 +- src/main/kc/include/cx16-conio.h | 6 + src/main/kc/include/cx16-kernal.h | 33 +- src/main/kc/include/cx16-mouse.h | 18 + src/main/kc/include/cx16-typedefs.h | 26 + src/main/kc/include/cx16-vera.h | 291 +- src/main/kc/include/cx16-veramem.h | 50 + src/main/kc/include/cx16.h | 174 +- src/main/kc/include/errno.h | 17 + src/main/kc/include/kernal.h | 47 + src/main/kc/include/pet-kernal.h | 10 + src/main/kc/include/pet.h | 32 + src/main/kc/include/stdio.h | 34 +- src/main/kc/include/string.h | 22 +- src/main/kc/lib/conio-c128.c | 63 + src/main/kc/lib/conio-cbm-shared.c | 28 + src/main/kc/lib/conio-cx16.c | 378 - src/main/kc/lib/conio.c | 6 +- src/main/kc/lib/cx16-bitmap.c | 181 +- src/main/kc/lib/cx16-conio.c | 390 + src/main/kc/lib/cx16-kernal.c | 115 +- src/main/kc/lib/cx16-mouse.c | 94 + src/main/kc/lib/cx16.c | 721 +- src/main/kc/lib/errno.c | 14 + src/main/kc/lib/kernal.c | 220 + src/main/kc/lib/pet-conio.c | 59 + src/main/kc/lib/sprintf.c | 4 +- src/main/kc/lib/stdio.c | 340 + src/main/kc/lib/stdlib.c | 6 +- src/main/kc/lib/string.c | 76 +- .../kc/target/c128.ld} | 8 +- src/main/kc/target/c128.tgt | 13 + src/main/kc/target/cx16.ld | 2 +- src/main/kc/target/pet8032.ld | 8 + src/main/kc/target/pet8032.tgt | 13 + .../kickc/test/TestProgramsFast.java | 5 + src/test/kc/examples/c128/sprites.c | 404 + .../kc/examples/cx16/cx16-bankaddressing.c | 36 - src/test/kc/examples/cx16/cx16-bankload.c | 99 - src/test/kc/examples/cx16/cx16-input.c | 6 +- src/test/kc/examples/cx16/cx16-sprites.c | 9 +- src/test/kc/examples/cx16/cx16-text.c | 4 +- src/test/kc/examples/cx16/cx16-tilemap.c | 145 - src/test/kc/examples/cx16/cx16-veralayers.c | 135 - src/test/kc/examples/cx16/cx16-veramodes.c | 1230 - src/test/kc/examples/cx16/ship.png | Bin 1142 -> 0 bytes .../cx16/spacedemo/Metal_1/frame_1.png | Bin 556 -> 0 bytes .../cx16/spacedemo/Metal_1/frame_2.png | Bin 609 -> 0 bytes .../cx16/spacedemo/Metal_1/frame_3.png | Bin 574 -> 0 bytes .../cx16/spacedemo/Metal_1/frame_4.png | Bin 590 -> 0 bytes .../cx16/spacedemo/Metal_1/metal_1.png | Bin 1494 -> 0 bytes .../cx16/spacedemo/Metal_1/metal_2.png | Bin 1418 -> 0 bytes .../cx16/spacedemo/Metal_1/metal_3.png | Bin 1420 -> 0 bytes .../cx16/spacedemo/Metal_1/metal_4.png | Bin 1418 -> 0 bytes .../cx16/spacedemo/Ship_1/ship_1_360_1.png | Bin 1142 -> 0 bytes .../cx16/spacedemo/Ship_1/ship_1_360_10.png | Bin 502 -> 0 bytes .../cx16/spacedemo/Ship_1/ship_1_360_11.png | Bin 831 -> 0 bytes .../cx16/spacedemo/Ship_1/ship_1_360_12.png | Bin 1091 -> 0 bytes .../cx16/spacedemo/Ship_1/ship_1_360_2.png | Bin 1097 -> 0 bytes .../cx16/spacedemo/Ship_1/ship_1_360_3.png | Bin 844 -> 0 bytes .../cx16/spacedemo/Ship_1/ship_1_360_4.png | Bin 517 -> 0 bytes .../cx16/spacedemo/Ship_1/ship_1_360_5.png | Bin 730 -> 0 bytes .../cx16/spacedemo/Ship_1/ship_1_360_6.png | Bin 1144 -> 0 bytes .../cx16/spacedemo/Ship_1/ship_1_360_7.png | Bin 1158 -> 0 bytes .../cx16/spacedemo/Ship_1/ship_1_360_8.png | Bin 1066 -> 0 bytes .../cx16/spacedemo/Ship_1/ship_1_360_9.png | Bin 748 -> 0 bytes .../kc/examples/cx16/spacedemo/spacedemo.c | 383 - .../kc/examples/cx16/spacedemo/spacedemo.ld | 16 - .../cx16/veralib/bitmap_1bpp_320_x_240.c | 79 - .../cx16/veralib/bitmap_1bpp_640_x_480.c | 79 - .../cx16/veralib/bitmap_2bpp_320_x_240.c | 79 - .../cx16/veralib/bitmap_2bpp_640_x_480.c | 79 - .../cx16/veralib/bitmap_4bpp_320_x_240.c | 80 - .../cx16/veralib/bitmap_8bpp_320_x_240.c | 83 - .../veralib/tilemap_1bpp_8_x_8_16_color.c | 43 - .../veralib/tilemap_1bpp_8_x_8_256_color.c | 43 - .../cx16/veralib/tilemap_2bpp_16_x_16.c | 88 - .../cx16/veralib/tilemap_2bpp_8_x_8.c | 70 - .../cx16/veralib/tilemap_4bpp_16_x_16.c | 218 - .../cx16/veralib/tilemap_4bpp_8_x_8.c | 120 - .../cx16/veralib/tilemap_8bpp_16_x_16.c | 133 - .../cx16/veralib/tilemap_8bpp_8_x_8.c | 87 - src/test/kc/examples/memfast/memfast.c | 39 + src/test/ref/casting-negative.log | 2 + src/test/ref/cbm-keyboard.log | 2 + src/test/ref/complex/xmega65/xmega65.log | 15 +- src/test/ref/ducks-array.log | 2 + src/test/ref/ducks-total.log | 2 + .../ref/examples/c64/font-2x2/font-2x2.log | 15 +- .../examples/c64/kernalload/kernalload.log | 15 +- .../ref/examples/cx16/cx16-rasterbars.asm | 34 +- .../ref/examples/cx16/cx16-rasterbars.cfg | 124 +- .../ref/examples/cx16/cx16-rasterbars.log | 1001 +- .../ref/examples/cx16/cx16-rasterbars.sym | 50 +- .../cx16/veralib/bitmap_8bpp_320_x_240.asm | 3510 - .../cx16/veralib/bitmap_8bpp_320_x_240.cfg | 1605 - .../cx16/veralib/bitmap_8bpp_320_x_240.log | 55445 ---------------- .../cx16/veralib/bitmap_8bpp_320_x_240.sym | 1121 - .../cx16/veralib/tilemap_8bpp_16_x_16.asm | 2339 - .../cx16/veralib/tilemap_8bpp_16_x_16.cfg | 1045 - .../cx16/veralib/tilemap_8bpp_16_x_16.log | 16699 ----- .../cx16/veralib/tilemap_8bpp_16_x_16.sym | 718 - .../cx16/veralib/tilemap_8bpp_8_x_8.asm | 2150 - .../cx16/veralib/tilemap_8bpp_8_x_8.cfg | 979 - .../cx16/veralib/tilemap_8bpp_8_x_8.log | 15083 ----- .../cx16/veralib/tilemap_8bpp_8_x_8.sym | 698 - .../ref/examples/helloworld/helloworld.log | 2 + src/test/ref/examples/mega65/dypp65.log | 15 +- .../ref/examples/mega65/helloworld-mega65.log | 2 + src/test/ref/examples/memfast/memfast.asm | 170 + src/test/ref/examples/memfast/memfast.cfg | 115 + src/test/ref/examples/memfast/memfast.log | 1506 + src/test/ref/examples/memfast/memfast.sym | 54 + .../ref/examples/plus4/plus4-randomwalk.asm | 31 +- .../ref/examples/plus4/plus4-randomwalk.cfg | 160 +- .../ref/examples/plus4/plus4-randomwalk.log | 1226 +- .../ref/examples/plus4/plus4-randomwalk.sym | 79 +- .../ref/function-pointer-noarg-call-14.log | 2 + src/test/ref/memcpy-0.log | 15 +- src/test/ref/memcpy-1.log | 15 +- .../ref/millfork-benchmarks/plasma-kc.asm | 69 +- .../ref/millfork-benchmarks/plasma-kc.cfg | 248 +- .../ref/millfork-benchmarks/plasma-kc.log | 1943 +- .../ref/millfork-benchmarks/plasma-kc.sym | 119 +- src/test/ref/plus4-keyboard-test.log | 15 +- src/test/ref/printf-17.asm | 50 +- src/test/ref/printf-17.cfg | 450 +- src/test/ref/printf-17.log | 2608 +- src/test/ref/printf-17.sym | 12 +- src/test/ref/printf-18.asm | 56 +- src/test/ref/printf-18.cfg | 264 +- src/test/ref/printf-18.log | 1472 +- src/test/ref/printf-18.sym | 24 +- src/test/ref/printf-19.asm | 50 +- src/test/ref/printf-19.cfg | 518 +- src/test/ref/printf-19.log | 2966 +- src/test/ref/printf-19.sym | 12 +- src/test/ref/stars-2.log | 2 + src/test/ref/strcmp-0.log | 2 + src/test/ref/tod-1.asm | 2 +- src/test/ref/tod-1.log | 4 +- src/test/ref/weeip-bbslist.log | 2 + 280 files changed, 17430 insertions(+), 112505 deletions(-) create mode 100644 src/main/fragment/cache/fragment-cache-wdc65c02.asm create mode 100644 src/main/fragment/mos6502-common/_stackidxbool_vbuc1=vboaa.asm create mode 100644 src/main/fragment/mos6502-common/_stackidxbool_vbuc1=vboyy.asm create mode 100644 src/main/fragment/mos6502-common/_stackpushdword_=_dword_pwuc1_derefidx_vbum1.asm create mode 100644 src/main/fragment/mos6502-common/_stackpushdword_=vwum1.asm create mode 100644 src/main/fragment/mos6502-common/pbuc1_eq__deref_qbuc2_then_la1.asm create mode 100644 src/main/fragment/mos6502-common/pbuc1_eq_pbuc2_then_la1.asm create mode 100644 src/main/fragment/mos6502-common/pbuc1_eq_qbuz1_derefidx_vbuyy_then_la1.asm create mode 100644 src/main/fragment/mos6502-common/pbuc1_neq__deref_qbuc2_then_la1.asm create mode 100644 src/main/fragment/mos6502-common/pbuz1_derefidx_vbuyy=pbuz1_derefidx_vbuyy_minus_1.asm create mode 100644 src/main/fragment/mos6502-common/pbuz1_neq__deref_qbuc1_then_la1.asm create mode 100644 src/main/fragment/mos6502-common/pduc1_derefidx_vbum1=vbuc2.asm create mode 100644 src/main/fragment/mos6502-common/pduc1_derefidx_vbum1=vwuc2.asm create mode 100644 src/main/fragment/mos6502-common/pduc1_derefidx_vbuyy=vduc2.asm create mode 100644 src/main/fragment/mos6502-common/pssc1_derefidx_vbuxx=_deref_qssz1.asm create mode 100644 src/main/fragment/mos6502-common/pssm1=_deref_qssm1.asm create mode 100644 src/main/fragment/mos6502-common/pssz1=qssz2_derefidx_vbuc1_plus_vbuc2.asm create mode 100644 src/main/fragment/mos6502-common/pvoz1_derefidx_vbuyy=_deref_pvoc1_memcpy_vbuc2.asm create mode 100644 src/main/fragment/mos6502-common/pvoz1_derefidx_vbuyy=_deref_pvoz2_memcpy_vbuc2 temp.asm create mode 100644 src/main/fragment/mos6502-common/pwsc1_derefidx_vbuxx=pwsc1_derefidx_vbuxx_plus_pbsc2_derefidx_vbuyy.asm create mode 100644 src/main/fragment/mos6502-common/pwsc1_derefidx_vbuxx=pwsc1_derefidx_vbuxx_plus_vbsm1.asm create mode 100644 src/main/fragment/mos6502-common/pwsc1_derefidx_vbuxx=pwsz1_derefidx_vbuc2.asm create mode 100644 src/main/fragment/mos6502-common/pwsc1_derefidx_vbuyy=pwsc1_derefidx_vbuyy_plus_pbsc2_derefidx_vbuxx.asm create mode 100644 src/main/fragment/mos6502-common/pwsc1_derefidx_vbuyy=pwsc1_derefidx_vbuyy_plus_vbsm1_temp.asm create mode 100644 src/main/fragment/mos6502-common/pwsz1_derefidx_vbuyy=_deref_pwsc2.asm create mode 100644 src/main/fragment/mos6502-common/pwsz1_derefidx_vbuyy=_sword_vbum2.asm create mode 100644 src/main/fragment/mos6502-common/pwsz1_derefidx_vbuyy=pwsz2_derefidx_vbuyy.asm create mode 100644 src/main/fragment/mos6502-common/pwsz1_derefidx_vbuyy_gt_0_then_la1.asm create mode 100644 src/main/fragment/mos6502-common/pwsz1_derefidx_vbuyy_le_vwsc1_then_la1.asm create mode 100644 src/main/fragment/mos6502-common/pwuc1_derefidx_vbum1=pwuc1_derefidx_vbum1_minus_vwum2.asm create mode 100644 src/main/fragment/mos6502-common/pwuc1_derefidx_vbum1=pwuc1_derefidx_vbum1_plus_vwum2.asm create mode 100644 src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_band_vwuc2.asm create mode 100644 src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_bor_vwuc2.asm create mode 100644 src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_bxor_vwuc2.asm create mode 100644 src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_minus_vwum1.asm create mode 100644 src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_minus_vwuz1.asm create mode 100644 src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_plus_vwum1.asm create mode 100644 src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_plus_vwuz1.asm create mode 100644 src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_band_vwuc2.asm create mode 100644 src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_bor_vwuc2.asm create mode 100644 src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_minus_vwum1.asm create mode 100644 src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_plus_vwum1.asm create mode 100644 src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy_neq_vbum1_then_la1.asm create mode 100644 src/main/fragment/mos6502-common/pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_minus_vwuz2.asm create mode 100644 src/main/fragment/mos6502-common/pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_plus_vwuz2.asm create mode 100644 src/main/fragment/mos6502-common/pwum1_derefidx_vbuyy=vwum2_temp.asm create mode 100644 src/main/fragment/mos6502-common/pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_minus_vwum2.asm create mode 100644 src/main/fragment/mos6502-common/pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_vwum2.asm create mode 100644 src/main/fragment/mos6502-common/pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_temp.asm create mode 100644 src/main/fragment/mos6502-common/pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc2.asm create mode 100644 src/main/fragment/mos6502-common/pwuz1_derefidx_vbuyy=_deref_pwuc2.asm create mode 100644 src/main/fragment/mos6502-common/pwuz1_derefidx_vbuz2=pwuz3_derefidx_vbuz2_band_vwuc1.asm create mode 100644 src/main/fragment/mos6502-common/pwuz1_derefidx_vbuz2=pwuz3_derefidx_vbuz2_bor_vwuc1.asm create mode 100644 src/main/fragment/mos6502-common/qbuz1=qbuz1_plus_1.asm create mode 100644 src/main/fragment/mos6502-common/qbuz1=qbuz2_plus_1.asm create mode 100644 src/main/fragment/mos6502-common/qssc1_derefidx_vbuxx=_deref_qssz1.asm create mode 100644 src/main/fragment/mos6502-common/qssc1_derefidx_vbuxx=qssz1_derefidx_vbuc2.asm create mode 100644 src/main/fragment/mos6502-common/qssc1_derefidx_vbuxx_eq_pssz1_then_la1.asm create mode 100644 src/main/fragment/mos6502-common/qssc1_derefidx_vbuyy_eq_pssz1_then_la1.asm create mode 100644 src/main/fragment/mos6502-common/qssz1=qssz1_plus_1.asm create mode 100644 src/main/fragment/mos6502-common/qssz1=qssz2_plus_1.asm create mode 100644 src/main/fragment/mos6502-common/qssz1_derefidx_vbuc1_eq_0_then_la1.asm create mode 100644 src/main/fragment/mos6502-common/qssz1_derefidx_vbuc1_neq_0_then_la1.asm create mode 100644 src/main/fragment/mos6502-common/vboaa=_stackpullbool_.asm create mode 100644 src/main/fragment/mos6502-common/vboaa=vbuaa_ge_vbuc1.asm create mode 100644 src/main/fragment/mos6502-common/vboaa=vbuaa_gt_vbuc1.asm create mode 100644 src/main/fragment/mos6502-common/vbum1=pbum2_derefidx_vbuyy_band_vbuc1_temp.asm create mode 100644 src/main/fragment/mos6502-common/vbum1=pbum2_derefidx_vbuyy_temp.asm create mode 100644 src/main/fragment/mos6502-common/vdum1=_dword_pwuc1_derefidx_vbuxx.asm create mode 100644 src/main/fragment/mos6502-common/vdum1=_dword_pwuc1_derefidx_vbuyy.asm create mode 100644 src/main/fragment/mos6502-common/vdum1=_dword_pwuz2_derefidx_vbuc1.asm create mode 100644 src/main/fragment/mos6502-common/vdum1=_makelong4_(vbuc1)_(vbuaa)_(vbuxx)_(vbuaa).asm create mode 100644 src/main/fragment/mos6502-common/vdum1=_makelong4_(vbuc1)_(vbuaa)_(vbuxx)_(vbuxx).asm create mode 100644 src/main/fragment/mos6502-common/vdum1=_makelong4_(vbuc1)_(vbuaa)_(vbuxx)_(vbuyy).asm create mode 100644 src/main/fragment/mos6502-common/vdum1=_neg_vdum1.asm create mode 100644 src/main/fragment/mos6502-common/vdum1=_neg_vdum2.asm create mode 100644 src/main/fragment/mos6502-common/vdum1=vdum1_ror_3.asm create mode 100644 src/main/fragment/mos6502-common/vdum1=vdum2_minus_1.asm create mode 100644 src/main/fragment/mos6502-common/vdum1=vdum2_minus_vdum1.asm create mode 100644 src/main/fragment/mos6502-common/vdum1=vwum2_rol_5.asm create mode 100644 src/main/fragment/mos6502-common/vdum1_gt_vduc1_then_la1.asm create mode 100644 src/main/fragment/mos6502-common/vdum1_le_vduc1_then_la1.asm create mode 100644 src/main/fragment/mos6502-common/vdum1_neq_vdum2_then_la1.asm create mode 100644 src/main/fragment/mos6502-common/vduz1=_dword_pwuc1_derefidx_vbuxx.asm create mode 100644 src/main/fragment/mos6502-common/vduz1=_dword_pwuc1_derefidx_vbuyy.asm create mode 100644 src/main/fragment/mos6502-common/vduz1=_dword_pwuz2_derefidx_vbuc1.asm create mode 100644 src/main/fragment/mos6502-common/vwsm1=pwsz2_derefidx_vbuyy_plus_vbsc2.asm create mode 100644 src/main/fragment/mos6502-common/vwsm1=vwsm1_plus_pbsz2_derefidx_vbuyy.asm create mode 100644 src/main/fragment/mos6502-common/vwsm1=vwsm1_rol_vbum2.asm create mode 100644 src/main/fragment/mos6502-common/vwsm1=vwsm1_rol_vbuxx.asm create mode 100644 src/main/fragment/mos6502-common/vwsm1=vwsm1_rol_vbuyy.asm create mode 100644 src/main/fragment/mos6502-common/vwsm1=vwsm2_plus_pbsz3_derefidx_vbuyy.asm create mode 100644 src/main/fragment/mos6502-common/vwsm1=vwsm2_rol_vbuxx.asm create mode 100644 src/main/fragment/mos6502-common/vwsm1=vwsm2_rol_vbuyy.asm create mode 100644 src/main/fragment/mos6502-common/vwum1=_byte0_vwum1.asm create mode 100644 src/main/fragment/mos6502-common/vwum1=_byte0_vwum2.asm create mode 100644 src/main/fragment/mos6502-common/vwum1=_byte1_vwum2.asm create mode 100644 src/main/fragment/mos6502-common/vwum1=_dec_vwum2.asm create mode 100644 src/main/fragment/mos6502-common/vwum1=_deref_pwuc1_minus__deref_pwuc2.asm create mode 100644 src/main/fragment/mos6502-common/vwum1=_deref_pwum2_band_vwuc1_temp.asm create mode 100644 src/main/fragment/mos6502-common/vwum1=_deref_pwuz2_band_vwuc1.asm create mode 100644 src/main/fragment/mos6502-common/vwum1=_deref_pwuz2_bor_vwuc1.asm create mode 100644 src/main/fragment/mos6502-common/vwum1=_deref_pwuz2_plus_vwuc1.asm create mode 100644 src/main/fragment/mos6502-common/vwum1=_deref_pwuz2_plus_vwum1.asm create mode 100644 src/main/fragment/mos6502-common/vwum1=_word1_pduc1_derefidx_vbuyy.asm create mode 100644 src/main/fragment/mos6502-common/vwum1=pwuc1_derefidx_vbuxx_minus_pwuc2_derefidx_vbuxx.asm create mode 100644 src/main/fragment/mos6502-common/vwum1=pwuc1_derefidx_vbuyy_minus_pwuc2_derefidx_vbuyy.asm create mode 100644 src/main/fragment/mos6502-common/vwum1=pwuz2_derefidx_vbuyy_minus_vwum1.asm create mode 100644 src/main/fragment/mos6502-common/vwum1=vbuaa_minus_2.asm create mode 100644 src/main/fragment/mos6502-common/vwum1=vwum1_rol_9.asm create mode 100644 src/main/fragment/mos6502-common/vwum1=vwum1_ror_7.asm create mode 100644 src/main/fragment/mos6502-common/vwum1=vwum1_ror_vbum2.asm create mode 100644 src/main/fragment/mos6502-common/vwum1=vwum1_ror_vbuxx.asm create mode 100644 src/main/fragment/mos6502-common/vwum1=vwum1_ror_vbuyy.asm create mode 100644 src/main/fragment/mos6502-common/vwum1=vwum2_minus_pwuc1_derefidx_vbuxx.asm create mode 100644 src/main/fragment/mos6502-common/vwum1=vwum2_minus_pwuc1_derefidx_vbuyy.asm create mode 100644 src/main/fragment/mos6502-common/vwum1=vwum2_rol_9.asm delete mode 100644 src/main/fragment/mos6502-common/vwum1_lt_vbuyy_then_la1.asm create mode 100644 src/main/fragment/mos6502-common/vwum1_neq__deref_pwuc1_then_la1.asm create mode 100644 src/main/fragment/mos6502-common/vwum1_neq_vbum2_then_la1.asm create mode 100644 src/main/fragment/mos6502-common/vwuz1=_deref_pwuz1_band_vwuc1.asm create mode 100644 src/main/fragment/mos6502-common/vwuz1=_deref_pwuz1_bor_vwuc1.asm create mode 100644 src/main/fragment/mos6502-common/vwuz1=_deref_pwuz1_bxor_vwuc1.asm create mode 100644 src/main/fragment/mos6502-common/vwuz1=pwuc1_derefidx_vbuz2_minus_pwuc2_derefidx_vbuz2.asm create mode 100644 src/main/fragment/mos6502-common/vwuz1=pwuz1_derefidx_vbuyy_band_vwuc1.asm create mode 100644 src/main/fragment/mos6502-common/vwuz1=pwuz1_derefidx_vbuyy_bor_vwuc1.asm create mode 100644 src/main/fragment/mos6502-common/vwuz1=pwuz1_derefidx_vbuyy_bxor_vwuc1.asm create mode 100644 src/main/fragment/mos6502-common/vwuz1=pwuz1_derefidx_vbuyy_minus_vwum2 copy.asm create mode 100644 src/main/fragment/mos6502-common/vwuz1=pwuz2_derefidx_vbuyy_band_vwuc1.asm create mode 100644 src/main/fragment/mos6502-common/vwuz1=pwuz2_derefidx_vbuyy_band_vwuc2.asm create mode 100644 src/main/fragment/mos6502-common/vwuz1=pwuz2_derefidx_vbuyy_minus_vwuz3.asm create mode 100644 src/main/fragment/mos6502-common/vwuz1=vwuz1_ror_vbuxx.asm create mode 100644 src/main/fragment/mos6502-common/vwuz1=vwuz1_ror_vbuyy.asm create mode 100644 src/main/kc/include/cx16-conio.h create mode 100644 src/main/kc/include/cx16-mouse.h create mode 100644 src/main/kc/include/cx16-typedefs.h create mode 100644 src/main/kc/include/cx16-veramem.h create mode 100644 src/main/kc/include/errno.h create mode 100644 src/main/kc/include/kernal.h create mode 100644 src/main/kc/include/pet-kernal.h create mode 100644 src/main/kc/include/pet.h create mode 100644 src/main/kc/lib/conio-c128.c delete mode 100644 src/main/kc/lib/conio-cx16.c create mode 100644 src/main/kc/lib/cx16-conio.c create mode 100644 src/main/kc/lib/cx16-mouse.c create mode 100644 src/main/kc/lib/errno.c create mode 100644 src/main/kc/lib/kernal.c create mode 100644 src/main/kc/lib/pet-conio.c create mode 100644 src/main/kc/lib/stdio.c rename src/{test/kc/examples/cx16/cx16-bankload.ld => main/kc/target/c128.ld} (54%) create mode 100644 src/main/kc/target/c128.tgt create mode 100644 src/main/kc/target/pet8032.ld create mode 100644 src/main/kc/target/pet8032.tgt create mode 100644 src/test/kc/examples/c128/sprites.c delete mode 100644 src/test/kc/examples/cx16/cx16-bankaddressing.c delete mode 100644 src/test/kc/examples/cx16/cx16-bankload.c delete mode 100644 src/test/kc/examples/cx16/cx16-tilemap.c delete mode 100644 src/test/kc/examples/cx16/cx16-veralayers.c delete mode 100644 src/test/kc/examples/cx16/cx16-veramodes.c delete mode 100644 src/test/kc/examples/cx16/ship.png delete mode 100644 src/test/kc/examples/cx16/spacedemo/Metal_1/frame_1.png delete mode 100644 src/test/kc/examples/cx16/spacedemo/Metal_1/frame_2.png delete mode 100644 src/test/kc/examples/cx16/spacedemo/Metal_1/frame_3.png delete mode 100644 src/test/kc/examples/cx16/spacedemo/Metal_1/frame_4.png delete mode 100644 src/test/kc/examples/cx16/spacedemo/Metal_1/metal_1.png delete mode 100644 src/test/kc/examples/cx16/spacedemo/Metal_1/metal_2.png delete mode 100644 src/test/kc/examples/cx16/spacedemo/Metal_1/metal_3.png delete mode 100644 src/test/kc/examples/cx16/spacedemo/Metal_1/metal_4.png delete mode 100644 src/test/kc/examples/cx16/spacedemo/Ship_1/ship_1_360_1.png delete mode 100644 src/test/kc/examples/cx16/spacedemo/Ship_1/ship_1_360_10.png delete mode 100644 src/test/kc/examples/cx16/spacedemo/Ship_1/ship_1_360_11.png delete mode 100644 src/test/kc/examples/cx16/spacedemo/Ship_1/ship_1_360_12.png delete mode 100644 src/test/kc/examples/cx16/spacedemo/Ship_1/ship_1_360_2.png delete mode 100644 src/test/kc/examples/cx16/spacedemo/Ship_1/ship_1_360_3.png delete mode 100644 src/test/kc/examples/cx16/spacedemo/Ship_1/ship_1_360_4.png delete mode 100644 src/test/kc/examples/cx16/spacedemo/Ship_1/ship_1_360_5.png delete mode 100644 src/test/kc/examples/cx16/spacedemo/Ship_1/ship_1_360_6.png delete mode 100644 src/test/kc/examples/cx16/spacedemo/Ship_1/ship_1_360_7.png delete mode 100644 src/test/kc/examples/cx16/spacedemo/Ship_1/ship_1_360_8.png delete mode 100644 src/test/kc/examples/cx16/spacedemo/Ship_1/ship_1_360_9.png delete mode 100644 src/test/kc/examples/cx16/spacedemo/spacedemo.c delete mode 100644 src/test/kc/examples/cx16/spacedemo/spacedemo.ld delete mode 100644 src/test/kc/examples/cx16/veralib/bitmap_1bpp_320_x_240.c delete mode 100644 src/test/kc/examples/cx16/veralib/bitmap_1bpp_640_x_480.c delete mode 100644 src/test/kc/examples/cx16/veralib/bitmap_2bpp_320_x_240.c delete mode 100644 src/test/kc/examples/cx16/veralib/bitmap_2bpp_640_x_480.c delete mode 100644 src/test/kc/examples/cx16/veralib/bitmap_4bpp_320_x_240.c delete mode 100644 src/test/kc/examples/cx16/veralib/bitmap_8bpp_320_x_240.c delete mode 100644 src/test/kc/examples/cx16/veralib/tilemap_1bpp_8_x_8_16_color.c delete mode 100644 src/test/kc/examples/cx16/veralib/tilemap_1bpp_8_x_8_256_color.c delete mode 100644 src/test/kc/examples/cx16/veralib/tilemap_2bpp_16_x_16.c delete mode 100644 src/test/kc/examples/cx16/veralib/tilemap_2bpp_8_x_8.c delete mode 100644 src/test/kc/examples/cx16/veralib/tilemap_4bpp_16_x_16.c delete mode 100644 src/test/kc/examples/cx16/veralib/tilemap_4bpp_8_x_8.c delete mode 100644 src/test/kc/examples/cx16/veralib/tilemap_8bpp_16_x_16.c delete mode 100644 src/test/kc/examples/cx16/veralib/tilemap_8bpp_8_x_8.c create mode 100644 src/test/kc/examples/memfast/memfast.c delete mode 100644 src/test/ref/examples/cx16/veralib/bitmap_8bpp_320_x_240.asm delete mode 100644 src/test/ref/examples/cx16/veralib/bitmap_8bpp_320_x_240.cfg delete mode 100644 src/test/ref/examples/cx16/veralib/bitmap_8bpp_320_x_240.log delete mode 100644 src/test/ref/examples/cx16/veralib/bitmap_8bpp_320_x_240.sym delete mode 100644 src/test/ref/examples/cx16/veralib/tilemap_8bpp_16_x_16.asm delete mode 100644 src/test/ref/examples/cx16/veralib/tilemap_8bpp_16_x_16.cfg delete mode 100644 src/test/ref/examples/cx16/veralib/tilemap_8bpp_16_x_16.log delete mode 100644 src/test/ref/examples/cx16/veralib/tilemap_8bpp_16_x_16.sym delete mode 100644 src/test/ref/examples/cx16/veralib/tilemap_8bpp_8_x_8.asm delete mode 100644 src/test/ref/examples/cx16/veralib/tilemap_8bpp_8_x_8.cfg delete mode 100644 src/test/ref/examples/cx16/veralib/tilemap_8bpp_8_x_8.log delete mode 100644 src/test/ref/examples/cx16/veralib/tilemap_8bpp_8_x_8.sym create mode 100644 src/test/ref/examples/memfast/memfast.asm create mode 100644 src/test/ref/examples/memfast/memfast.cfg create mode 100644 src/test/ref/examples/memfast/memfast.log create mode 100644 src/test/ref/examples/memfast/memfast.sym diff --git a/.gitignore b/.gitignore index 0ae827ae2..90d59c325 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ +.project +.tmpdirs /gen -**/.vscode/* */*.mon */*.vs */*.brk @@ -7,12 +8,13 @@ */*.sym */.tmpdirs */bin/ +**/.DS_Store +kickc.iml +/.idea/* +/.vscode/* +**/.vscode/* +**/.vscode/*.log **/target/* */workspace.xml -**/.DS_Store -.project -.tmpdirs -**/.vscode/*.log -/.idea/* -kickc.iml -/src/main/fragment/cache +/gen/* +/src/main/fragment/cache \ No newline at end of file diff --git a/src/main/fragment/cache/fragment-cache-wdc65c02.asm b/src/main/fragment/cache/fragment-cache-wdc65c02.asm new file mode 100644 index 000000000..55d574597 --- /dev/null +++ b/src/main/fragment/cache/fragment-cache-wdc65c02.asm @@ -0,0 +1,4580 @@ +//KICKC FRAGMENT CACHE 14b9f12c75 14b9f1558b +//FRAGMENT vbuz1=vbuc1 +lda #{c1} +sta {z1} +//FRAGMENT vwuz1=vwuz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vbuz1=_byte1_vwuz2 +lda {z2}+1 +sta {z1} +//FRAGMENT _deref_pbuc1=vbuz1 +lda {z1} +sta {c1} +//FRAGMENT vbuz1=_byte0_vwuz2 +lda {z2} +sta {z1} +//FRAGMENT vbuz1=_deref_pbuc1 +lda {c1} +sta {z1} +//FRAGMENT _deref_pbuc1=vbuc2 +lda #{c2} +sta {c1} +//FRAGMENT vbuz1=_stackidxbyte_vbuc1 +tsx +lda STACK_BASE+{c1},x +sta {z1} +//FRAGMENT vbuz1_eq_vbuc1_then_la1 +lda #{c1} +cmp {z1} +beq {la1} +//FRAGMENT _deref_pbuc1=_deref_pbuc1_band_vbuc2 +lda #{c2} +and {c1} +sta {c1} +//FRAGMENT vbuz1=_byte0__deref_pwuc1 +lda {c1} +sta {z1} +//FRAGMENT vbuz1=_byte1__deref_pwuc1 +lda {c1}+1 +sta {z1} +//FRAGMENT vbuz1=_deref_pbuc1_bor_vbuc2 +lda #{c2} +ora {c1} +sta {z1} +//FRAGMENT _deref_pbuc1=_deref_pbuc2 +lda {c2} +sta {c1} +//FRAGMENT 0_eq_pbuc1_derefidx_(_deref_pbuc2)_then_la1 +ldy {c2} +lda {c1},y +cmp #0 +beq {la1} +//FRAGMENT _deref_pbuc1_ge__deref_pbuc2_then_la1 +lda {c1} +cmp {c2} +bcs {la1} +//FRAGMENT _deref_pbuc1=_inc__deref_pbuc1 +inc {c1} +//FRAGMENT _deref_pwuc1=_inc__deref_pwuc1 +inc {c1} +bne !+ +inc {c1}+1 +!: +//FRAGMENT pbuz1=pbuc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT vwsz1=vwsc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT pssz1=pssz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT pssc1_eq_pssz1_then_la1 +lda {z1} +cmp #<{c1} +bne !+ +lda {z1}+1 +cmp #>{c1} +beq {la1} +!: +//FRAGMENT vwuz1=vbuc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT 0_neq_vwuz1_then_la1 +lda {z1} +ora {z1}+1 +bne {la1} +//FRAGMENT vwsz1=vwsz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT 0_eq_vwsz1_then_la1 +lda {z1} +ora {z1}+1 +beq {la1} +//FRAGMENT pprz1=pprc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT vbuz1=vbuz2 +lda {z2} +sta {z1} +//FRAGMENT 0_eq_vbuz1_then_la1 +lda {z1} +beq {la1} +//FRAGMENT 0_eq_vwuz1_then_la1 +lda {z1} +ora {z1}+1 +beq {la1} +//FRAGMENT vbuz1=_deref_pbuc1_band_vbuc2 +lda #{c2} +and {c1} +sta {z1} +//FRAGMENT vbuz1=vbuz2_bor_vbuc1 +lda #{c1} +ora {z2} +sta {z1} +//FRAGMENT vbum1=vbuc1 +lda #{c1} +sta {m1} +//FRAGMENT vwuz1=vbum2_word_vbum3 +lda {m2} +sta {z1}+1 +lda {m3} +sta {z1} +//FRAGMENT vbuz1_ge__deref_pbuc1_then_la1 +lda {z1} +cmp {c1} +bcs {la1} +//FRAGMENT vbuz1=_deref_pbuc1_rol_1 +lda {c1} +asl +sta {z1} +//FRAGMENT vbuz1=vbuz2_rol_1 +lda {z2} +asl +sta {z1} +//FRAGMENT vwuz1=pwuc1_derefidx_vbuz2_plus_vbuz3 +lda {z3} +ldy {z2} +clc +adc {c1},y +sta {z1} +lda {c1}+1,y +adc #0 +sta {z1}+1 +//FRAGMENT _deref_pwuc1=vwuz1 +lda {z1} +sta {c1} +lda {z1}+1 +sta {c1}+1 +//FRAGMENT _deref_pwuc1=pwuc2_derefidx_vbuz1 +ldy {z1} +lda {c2},y +sta {c1} +lda {c2}+1,y +sta {c1}+1 +//FRAGMENT vwuz1=_deref_pwuc1 +lda {c1} +sta {z1} +lda {c1}+1 +sta {z1}+1 +//FRAGMENT vbuz1=_dec_vbuz1 +dec {z1} +//FRAGMENT 0_neq_vbuz1_then_la1 +lda {z1} +bne {la1} +//FRAGMENT vwuz1=vwuz1_plus__deref_pwuc1 +clc +lda {z1} +adc {c1} +sta {z1} +lda {z1}+1 +adc {c1}+1 +sta {z1}+1 +//FRAGMENT _deref_pwuc1=_deref_pwuc2 +lda {c2} +sta {c1} +lda {c2}+1 +sta {c1}+1 +//FRAGMENT vwuz1=_word_vbuz2 +lda {z2} +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vwuz1=vwuz2_bor_vwuc1 +lda {z2} +ora #<{c1} +sta {z1} +lda {z2}+1 +ora #>{c1} +sta {z1}+1 +//FRAGMENT vbuz1=vbuz2_rol_2 +lda {z2} +asl +asl +sta {z1} +//FRAGMENT pbuc1_derefidx_vbuz1=vbuc2 +lda #{c2} +ldy {z1} +sta {c1},y +//FRAGMENT pbuz1=pbuz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT _deref_pbuz1_eq_vbuc1_then_la1 +lda #{c1} +ldy #0 +cmp ({z1}),y +beq {la1} +//FRAGMENT vbuz1_neq_0_then_la1 +lda {z1} +bne {la1} +//FRAGMENT pbuc1_derefidx_vbuz1=_deref_pbuz2 +ldy #0 +lda ({z2}),y +ldy {z1} +sta {c1},y +//FRAGMENT vbuz1=_inc_vbuz1 +inc {z1} +//FRAGMENT pbuz1=_inc_pbuz1 +inc {z1} +bne !+ +inc {z1}+1 +!: +//FRAGMENT pbuz1=pbuz2_minus_1 +lda {z2} +sec +sbc #1 +sta {z1} +lda {z2}+1 +sbc #0 +sta {z1}+1 +//FRAGMENT 0_neq__deref_pbuz1_then_la1 +ldy #0 +lda ({z1}),y +cmp #0 +bne {la1} +//FRAGMENT 0_neq_pbuc1_derefidx_vbuz1_then_la1 +ldy {z1} +lda {c1},y +cmp #0 +bne {la1} +//FRAGMENT vbuz1=vbuz2_plus_1 +lda {z2} +inc +sta {z1} +//FRAGMENT pbuc1_derefidx_vbuz1=vbuz2 +lda {z2} +ldy {z1} +sta {c1},y +//FRAGMENT vbuz1=vbuz2_plus_2 +lda {z2} +clc +adc #2 +sta {z1} +//FRAGMENT pbuz1=pbuc1_plus_vbuz2 +lda {z2} +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2 +ldy {z2} +lda {c1},y +sta {z1} +//FRAGMENT vbuz1=_byte_vwuz2 +lda {z2} +sta {z1} +//FRAGMENT pssz1=vbuc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT vbuz1_gt_0_then_la1 +lda {z1} +bne {la1} +//FRAGMENT pbuz1=pbuz2_plus_1 +clc +lda {z2} +adc #1 +sta {z1} +lda {z2}+1 +adc #0 +sta {z1}+1 +//FRAGMENT vbuz1=_deref_pbuz2 +ldy #0 +lda ({z2}),y +sta {z1} +//FRAGMENT vbuz1_neq_vbuc1_then_la1 +lda #{c1} +cmp {z1} +bne {la1} +//FRAGMENT vbuz1=_byte_vwsz2 +lda {z2} +sta {z1} +//FRAGMENT vbuz1=_byte_pssz2 +lda {z2} +sta {z1} +//FRAGMENT vwuz1=vwuc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT 0_eq_pbuc1_derefidx_vbuz1_then_la1 +ldy {z1} +lda {c1},y +cmp #0 +beq {la1} +//FRAGMENT vwuz1_ge_vbuc1_then_la1 +lda {z1}+1 +bne {la1} +lda {z1} +cmp #{c1} +bcs {la1} +!: +//FRAGMENT vbuz1=vwuz2 +lda {z2} +sta {z1} +//FRAGMENT pvoz1=pvoz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz2_band_vbuc2 +lda #{c2} +ldy {z2} +and {c1},y +sta {z1} +//FRAGMENT vwuz1_neq_vwuc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bne {la1} +lda {z1} +cmp #<{c1} +bne {la1} +//FRAGMENT vwuz1=vwuz1_plus_vwuz2 +clc +lda {z1} +adc {z2} +sta {z1} +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1=pbuz1_plus_vwuz2 +clc +lda {z1} +adc {z2} +sta {z1} +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vbuz1=_byte1_pbuz2 +lda {z2}+1 +sta {z1} +//FRAGMENT pbuz1=pbuz1_minus_vwuc1 +lda {z1} +sec +sbc #<{c1} +sta {z1} +lda {z1}+1 +sbc #>{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 pbuc1_derefidx_vbuz1_eq_0_then_la1 +ldy {z1} +lda {c1},y +cmp #0 +beq {la1} +//FRAGMENT vwuz1=vbuz2_plus_1 +lda {z2} +clc +adc #1 +sta {z1} +lda #0 +adc #0 +sta {z1}+1 +//FRAGMENT pbuc1_eq_pbuz1_then_la1 +lda {z1} +cmp #<{c1} +bne !+ +lda {z1}+1 +cmp #>{c1} +beq {la1} +!: +//FRAGMENT _stackpushbyte_=vbuc1 +lda #{c1} +pha +//FRAGMENT call_vprc1 +jsr {c1} +//FRAGMENT _stackpullpadding_1 +pla +//FRAGMENT _stackpushbyte_=vbuz1 +lda {z1} +pha +//FRAGMENT call__deref_pprz1 +jsr {la1} +{la1}: @outside_flow +jmp ({z1}) @outside_flow +//FRAGMENT vwsz1=vbsc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT vwsz1_lt_0_then_la1 +lda {z1}+1 +bmi {la1} +//FRAGMENT vwsz1=_neg_vwsz1 +lda #0 +sec +sbc {z1} +sta {z1} +lda #0 +sbc {z1}+1 +sta {z1}+1 +//FRAGMENT vbum1=_deref_pbuc1 +lda {c1} +sta {m1} +//FRAGMENT vbuz1=vbuz2_ror_7 +lda {z2} +rol +rol +and #$01 +sta {z1} +//FRAGMENT vwuz1=vbuz2_word_vbuc1 +lda #{c1} +ldy {z2} +sty {z1}+1 +sta {z1} +//FRAGMENT vbuz1=vbuz2_band_vbuc1 +lda #{c1} +and {z2} +sta {z1} +//FRAGMENT vbuz1=vbuz2_ror_4 +lda {z2} +lsr +lsr +lsr +lsr +sta {z1} +//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbuz1 +ldy {z1} +lda {c2},y +sta {c1} +//FRAGMENT vbuz1=vbuz2_ror_6 +lda {z2} +rol +rol +rol +and #$03 +sta {z1} +//FRAGMENT vboz1=vbum2_eq_vbuc1 +lda {m2} +eor #{c1} +beq !+ +lda #1 +!: +eor #1 +sta {z1} +//FRAGMENT vbuz1=vbuc1_rol_vbuz2 +lda #{c1} +ldy {z2} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +sta {z1} +//FRAGMENT vbuz1=vbuz2_minus_1 +ldx {z2} +dex +stx {z1} +//FRAGMENT vbuz1_le__deref_pbuc1_then_la1 +lda {c1} +cmp {z1} +bcs {la1} +//FRAGMENT pwuc1_derefidx_vbuz1=vwuz2 +ldy {z1} +lda {z2} +sta {c1},y +lda {z2}+1 +sta {c1}+1,y +//FRAGMENT _deref_pbuc1_le__deref_pbuc2_then_la1 +lda {c2} +cmp {c1} +bcs {la1} +//FRAGMENT 0_neq_pbuc1_derefidx_(_deref_pbuc2)_then_la1 +ldy {c2} +lda {c1},y +cmp #0 +bne {la1} +//FRAGMENT vwuz1=_inc_vwuz1 +inc {z1} +bne !+ +inc {z1}+1 +!: +//FRAGMENT _deref_pbuz1_neq_vbuc1_then_la1 +ldy #0 +lda ({z1}),y +cmp #{c1} +bne {la1} +//FRAGMENT pbuz1_derefidx_vbuz2_lt_vbuc1_then_la1 +ldy {z2} +lda ({z1}),y + +cmp #{c1} +bcc {la1} +//FRAGMENT pbuz1_derefidx_vbuz2_le_vbuc1_then_la1 +ldy {z2} +lda ({z1}),y + +cmp #{c1} +bcc {la1} +beq {la1} +//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_rol_1 +lda {z2} +asl +sta {z1} +lda {z2}+1 +rol +sta {z1}+1 +//FRAGMENT vwsz1=vwsz2_plus_pbuz3_derefidx_vbuz4 +ldy {z4} +lda {z2} +clc +adc ({z3}),y +sta {z1} +bcc !+ +inc {z2}+1 +!: +//FRAGMENT vwsz1=vwsz2_minus_vbuc1 +lda {z2} +sec +sbc #{c1} +sta {z1} +lda {z2}+1 +sbc #0 +sta {z1}+1 +//FRAGMENT vwuz1_lt_vwuz2_then_la1 +lda {z1}+1 +cmp {z2}+1 +bcc {la1} +bne !+ +lda {z1} +cmp {z2} +bcc {la1} +!: +//FRAGMENT _deref_pbuz1=vbuz2 +lda {z2} +ldy #0 +sta ({z1}),y +//FRAGMENT pwuz1=pwuc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT vbuz1_lt_vbuz2_then_la1 +lda {z1} +cmp {z2} +bcc {la1} +//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 _deref_pbuz1=vbuc1 +lda #{c1} +ldy #0 +sta ({z1}),y +//FRAGMENT vwuz1=pwuz2_derefidx_vbuz3 +ldy {z3} +lda ({z2}),y +sta {z1} +iny +lda ({z2}),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 vbsz1=_sbyte_vwuz2 +lda {z2} +sta {z1} +//FRAGMENT vbsz1=_inc_vbsz1 +inc {z1} +//FRAGMENT vbsz1=vbsz2_minus_vbsz3 +lda {z2} +sec +sbc {z3} +sta {z1} +//FRAGMENT vbsz1_ge_0_then_la1 +lda {z1} +cmp #0 +bpl {la1} +//FRAGMENT vbsz1=vbsc1 +lda #{c1} +sta {z1} +//FRAGMENT 0_neq_vbsz1_then_la1 +lda {z1} +cmp #0 +bne {la1} +//FRAGMENT pprz1=pprz2 +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +//FRAGMENT vbuz1=_deref_pbuc1_plus_1 +lda {c1} +inc +sta {z1} +//FRAGMENT vbuz1_lt__deref_pbuc1_then_la1 +lda {z1} +cmp {c1} +bcc {la1} +//FRAGMENT vwuz1=pwuc1_derefidx_vbuz2 +ldy {z2} +lda {c1},y +sta {z1} +lda {c1}+1,y +sta {z1}+1 +//FRAGMENT vbuz1=pbuz2_derefidx_vbuz3 +ldy {z3} +lda ({z2}),y +sta {z1} +//FRAGMENT vbuz1_ge_vbuz2_then_la1 +lda {z1} +cmp {z2} +bcs {la1} +//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbuc2 +lda #{c2} +ora {c1} +sta {c1} +//FRAGMENT vbuz1=_dec_vbuz2 +ldy {z2} +dey +sty {z1} +//FRAGMENT vbuz1=vbuz1_minus_vbuz2 +lda {z1} +sec +sbc {z2} +sta {z1} +//FRAGMENT vbuz1_lt_vbuc1_then_la1 +lda {z1} +cmp #{c1} +bcc {la1} +//FRAGMENT vbuz1_le_vbuc1_then_la1 +lda #{c1} +cmp {z1} +bcs {la1} +//FRAGMENT vbuz1=vbuz1_plus_vbuc1 +lda #{c1} +clc +adc {z1} +sta {z1} +//FRAGMENT vbuz1=vbuz1_rol_1 +asl {z1} +//FRAGMENT pbuz1=pbuz1_plus_1 +inc {z1} +bne !+ +inc {z1}+1 +!: +//FRAGMENT vwsz1=vwsz2_plus_vwsz1 +clc +lda {z1} +adc {z2} +sta {z1} +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vwsz1=vwsz1_minus_vbuc1 +lda {z1} +sec +sbc #{c1} +sta {z1} +bcs !+ +dec {z1}+1 +!: +//FRAGMENT vbsz1=vbsz1_minus_vbsz2 +lda {z1} +sec +sbc {z2} +sta {z1} +//FRAGMENT vbuz1=vbuz1_band_vbuc1 +lda #{c1} +and {z1} +sta {z1} +//FRAGMENT vbuz1=vbuz1_bor_vbuc1 +lda #{c1} +ora {z1} +sta {z1} +//FRAGMENT vbuz1=vbuz1_rol_2 +lda {z1} +asl +asl +sta {z1} +//FRAGMENT vbuz1=vbuz1_ror_4 +lda {z1} +lsr +lsr +lsr +lsr +sta {z1} +//FRAGMENT vbuz1=vbuz1_minus_1 +dec {z1} +//FRAGMENT vwsz1=vwsz1_rol_1 +asl {z1} +rol {z1}+1 +//FRAGMENT vwsz1=vwsz1_plus_pbuz2_derefidx_vbuz3 +ldy {z3} +lda {z1} +clc +adc ({z2}),y +sta {z1} +bcc !+ +inc {z1}+1 +!: +//FRAGMENT vwuz1=vwuz1_bor_vwuc1 +lda {z1} +ora #<{c1} +sta {z1} +lda {z1}+1 +ora #>{c1} +sta {z1}+1 +//FRAGMENT vbuz1=vbuz1_ror_6 +lda {z1} +rol +rol +rol +and #$03 +sta {z1} +//FRAGMENT vbuz1=vbuc1_rol_vbuz1 +lda #{c1} +ldy {z1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +sta {z1} +//FRAGMENT vwum1=vwum2 +lda {m2} +sta {m1} +lda {m2}+1 +sta {m1}+1 +//FRAGMENT vbum1=_byte1_vwum2 +lda {m2}+1 +sta {m1} +//FRAGMENT _deref_pbuc1=vbum1 +lda {m1} +sta {c1} +//FRAGMENT vbum1=_byte0_vwum2 +lda {m2} +sta {m1} +//FRAGMENT vbum1=_stackidxbyte_vbuc1 +tsx +lda STACK_BASE+{c1},x +sta {m1} +//FRAGMENT vbum1_eq_vbuc1_then_la1 +lda #{c1} +cmp {m1} +beq {la1} +//FRAGMENT vbum1=_byte0__deref_pwuc1 +lda {c1} +sta {m1} +//FRAGMENT vbum1=_byte1__deref_pwuc1 +lda {c1}+1 +sta {m1} +//FRAGMENT vbum1=_deref_pbuc1_bor_vbuc2 +lda #{c2} +ora {c1} +sta {m1} +//FRAGMENT vdum1=vduc1 +lda #<{c1} +sta {m1} +lda #>{c1} +sta {m1}+1 +lda #<{c1}>>$10 +sta {m1}+2 +lda #>{c1}>>$10 +sta {m1}+3 +//FRAGMENT vdum1_lt_vduc1_then_la1 +lda {m1}+3 +cmp #>{c1}>>$10 +bcc {la1} +bne !+ +lda {m1}+2 +cmp #<{c1}>>$10 +bcc {la1} +bne !+ +lda {m1}+1 +cmp #>{c1} +bcc {la1} +bne !+ +lda {m1} +cmp #<{c1} +bcc {la1} +!: +//FRAGMENT vwsm1=vwsc1 +lda #<{c1} +sta {m1} +lda #>{c1} +sta {m1}+1 +//FRAGMENT vbum1_neq_vbuc1_then_la1 +lda #{c1} +cmp {m1} +bne {la1} +//FRAGMENT vwsm1_ge_0_then_la1 +lda {m1}+1 +bpl {la1} +//FRAGMENT vwum1=vwuc1 +lda #<{c1} +sta {m1} +lda #>{c1} +sta {m1}+1 +//FRAGMENT vwum1_lt_vwuc1_then_la1 +lda {m1}+1 +cmp #>{c1} +bcc {la1} +bne !+ +lda {m1} +cmp #<{c1} +bcc {la1} +!: +//FRAGMENT vwsm1=vwsm2 +lda {m2} +sta {m1} +lda {m2}+1 +sta {m1}+1 +//FRAGMENT vwsm1=_dec_vwsm1 +lda {m1} +bne !+ +dec {m1}+1 +!: +dec {m1} +//FRAGMENT vwum1=_inc_vwum1 +inc {m1} +bne !+ +inc {m1}+1 +!: +//FRAGMENT pbuc1_derefidx_vbum1_eq_vbuc2_then_la1 +ldy {m1} +lda {c1},y +cmp #{c2} +beq {la1} +//FRAGMENT vbum1_eq_0_then_la1 +lda {m1} +beq {la1} +//FRAGMENT vbum1=vbuc1_plus_vbum2 +lda #{c1} +clc +adc {m2} +sta {m1} +//FRAGMENT pbuz1=pbuc1_plus_vwum2 +lda {m2} +clc +adc #<{c1} +sta {z1} +lda {m2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT _deref_pbuz1=vbum2 +lda {m2} +ldy #0 +sta ({z1}),y +//FRAGMENT vbum1=vbum2_rol_5 +lda {m2} +asl +asl +asl +asl +asl +sta {m1} +//FRAGMENT pssc1_neq_pssz1_then_la1 +lda {z1}+1 +cmp #>{c1} +bne {la1} +lda {z1} +cmp #<{c1} +bne {la1} +//FRAGMENT vbum1=vbum2 +lda {m2} +sta {m1} +//FRAGMENT vbum1=vbum2_rol_2 +lda {m2} +asl +asl +sta {m1} +//FRAGMENT vbum1=vbum2_plus_vbum3 +lda {m2} +clc +adc {m3} +sta {m1} +//FRAGMENT vbum1=vbum2_rol_1 +lda {m2} +asl +sta {m1} +//FRAGMENT vbum1=_dec_vbum1 +dec {m1} +//FRAGMENT vdum1=vdum2 +lda {m2} +sta {m1} +lda {m2}+1 +sta {m1}+1 +lda {m2}+2 +sta {m1}+2 +lda {m2}+3 +sta {m1}+3 +//FRAGMENT vdum1_eq_vduc1_then_la1 +lda {m1}+3 +cmp #>{c1}>>$10 +bne !+ +lda {m1}+2 +cmp #<{c1}>>$10 +bne !+ +lda {m1}+1 +cmp #>{c1} +bne !+ +lda {m1} +cmp #<{c1} +beq {la1} +!: +//FRAGMENT vdum1=vdum2_plus_vdum3 +lda {m2} +clc +adc {m3} +sta {m1} +lda {m2}+1 +adc {m3}+1 +sta {m1}+1 +lda {m2}+2 +adc {m3}+2 +sta {m1}+2 +lda {m2}+3 +adc {m3}+3 +sta {m1}+3 +//FRAGMENT vdum1=pduc1_derefidx_vbum2 +ldy {m2} +lda {c1},y +sta {m1} +lda {c1}+1,y +sta {m1}+1 +lda {c1}+2,y +sta {m1}+2 +lda {c1}+3,y +sta {m1}+3 +//FRAGMENT vdum1=vdum2_minus_vwuc1 +NO_SYNTHESIS +//FRAGMENT vdum1=vdum2_minus_vwsc1 +NO_SYNTHESIS +//FRAGMENT vdum1=vdum2_minus_vduc1 +lda {m2} +sec +sbc #<{c1} +sta {m1} +lda {m2}+1 +sbc #>{c1} +sta {m1}+1 +lda {m2}+2 +sbc #<{c1}>>$10 +sta {m1}+2 +lda {m2}+3 +sbc #>{c1}>>$10 +sta {m1}+3 +//FRAGMENT vbum1=vbum2_plus_1 +lda {m2} +inc +sta {m1} +//FRAGMENT vdum1_lt_vdum2_then_la1 +lda {m1}+3 +cmp {m2}+3 +bcc {la1} +bne !+ +lda {m1}+2 +cmp {m2}+2 +bcc {la1} +bne !+ +lda {m1}+1 +cmp {m2}+1 +bcc {la1} +bne !+ +lda {m1} +cmp {m2} +bcc {la1} +!: +//FRAGMENT vwum1_neq_vwuc1_then_la1 +lda {m1}+1 +cmp #>{c1} +bne {la1} +lda {m1} +cmp #<{c1} +bne {la1} +//FRAGMENT pbuz1=pbuz1_plus_vwuc1 +lda {z1} +clc +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vdum1=vdum1_plus_vwuc1 +clc +lda {m1} +adc #<{c1} +sta {m1} +lda {m1}+1 +adc #>{c1} +sta {m1}+1 +lda {m1}+2 +adc #0 +sta {m1}+2 +lda {m1}+3 +adc #0 +sta {m1}+3 +//FRAGMENT pbuz1_neq_vwuc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bne {la1} +lda {z1} +cmp #<{c1} +bne {la1} +//FRAGMENT vbum1=_inc_vbum1 +inc {m1} +//FRAGMENT vbum1=vbum1_plus_vbuc1 +lda #{c1} +clc +adc {m1} +sta {m1} +//FRAGMENT vdum1=vdum2_band_vwuc1 +NO_SYNTHESIS +//FRAGMENT vdum1=vdum2_band_vwsc1 +NO_SYNTHESIS +//FRAGMENT vdum1=vdum2_band_vduc1 +lda {m2} +and #<{c1} +sta {m1} +lda {m2}+1 +and #>{c1} +sta {m1}+1 +lda {m2}+2 +and #<{c1}>>$10 +sta {m1}+2 +lda {m2}+3 +and #>{c1}>>$10 +sta {m1}+3 +//FRAGMENT 0_neq_vdum1_then_la1 +lda {m1} +ora {m1}+1 +ora {m1}+2 +ora {m1}+3 +bne {la1} +//FRAGMENT vdum1=vdum2_plus_vwuc1 +clc +lda {m2} +adc #<{c1} +sta {m1} +lda {m2}+1 +adc #>{c1} +sta {m1}+1 +lda {m2}+2 +adc #0 +sta {m1}+2 +lda {m2}+3 +adc #0 +sta {m1}+3 +//FRAGMENT pbuc1_derefidx_vbum1=vbuc2 +lda #{c2} +ldy {m1} +sta {c1},y +//FRAGMENT vdum1_neq_0_then_la1 +lda {m1} +ora {m1}+1 +ora {m1}+2 +ora {m1}+3 +bne {la1} +//FRAGMENT vdum1_neq_vduc1_then_la1 +lda {m1}+3 +cmp #>{c1}>>$10 +bne {la1} +lda {m1}+2 +cmp #<{c1}>>$10 +bne {la1} +lda {m1}+1 +cmp #>{c1} +bne {la1} +lda {m1} +cmp #<{c1} +bne {la1} +//FRAGMENT vbum1=pbuc1_derefidx_vbum2 +ldy {m2} +lda {c1},y +sta {m1} +//FRAGMENT vdum1=vdum1_plus_vduc1 +clc +lda {m1} +adc #<{c1} +sta {m1} +lda {m1}+1 +adc #>{c1} +sta {m1}+1 +lda {m1}+2 +adc #<{c1}>>$10 +sta {m1}+2 +lda {m1}+3 +adc #>{c1}>>$10 +sta {m1}+3 +//FRAGMENT pduc1_derefidx_vbum1=vduc2 +ldy {m1} +lda #<{c2} +sta {c1},y +lda #>{c2} +sta {c1}+1,y +lda #<{c2}>>$10 +sta {c1}+2,y +lda #>{c2}>>$10 +sta {c1}+3,y +//FRAGMENT vbum1=_deref_pbuc1_band_vbuc2 +lda #{c2} +and {c1} +sta {m1} +//FRAGMENT vbum1=vbum2_bor_vbum3 +lda {m2} +ora {m3} +sta {m1} +//FRAGMENT vbum1=vbum2_rol_4 +lda {m2} +asl +asl +asl +asl +sta {m1} +//FRAGMENT vwum1=vbum2_word_vbum3 +lda {m2} +sta {m1}+1 +lda {m3} +sta {m1} +//FRAGMENT vbum1_ge__deref_pbuc1_then_la1 +lda {m1} +cmp {c1} +bcs {la1} +//FRAGMENT vbum1=_deref_pbuc1_rol_1 +lda {c1} +asl +sta {m1} +//FRAGMENT vwum1=pwuc1_derefidx_vbum2_plus_vbum3 +lda {m3} +ldy {m2} +clc +adc {c1},y +sta {m1} +lda {c1}+1,y +adc #0 +sta {m1}+1 +//FRAGMENT _deref_pwuc1=vwum1 +lda {m1} +sta {c1} +lda {m1}+1 +sta {c1}+1 +//FRAGMENT _deref_pwuc1=pwuc2_derefidx_vbum1 +ldy {m1} +lda {c2},y +sta {c1} +lda {c2}+1,y +sta {c1}+1 +//FRAGMENT pbuc1_derefidx_(_deref_pbuc2)=vbuc3 +lda #{c3} +ldy {c2} +sta {c1},y +//FRAGMENT vwum1=_deref_pwuc1 +lda {c1} +sta {m1} +lda {c1}+1 +sta {m1}+1 +//FRAGMENT 0_neq_vbum1_then_la1 +lda {m1} +bne {la1} +//FRAGMENT vwum1=vwum1_plus__deref_pwuc1 +clc +lda {m1} +adc {c1} +sta {m1} +lda {m1}+1 +adc {c1}+1 +sta {m1}+1 +//FRAGMENT vbum1_lt_vbuc1_then_la1 +lda {m1} +cmp #{c1} +bcc {la1} +//FRAGMENT vbum1=_inc_vbum2 +lda {m2} +inc +sta {m1} +//FRAGMENT vbum1=_deref_pbuz2 +ldy #0 +lda ({z2}),y +sta {m1} +//FRAGMENT _stackpushbyte_=vbum1 +lda {m1} +pha +//FRAGMENT 0_eq_vbum1_then_la1 +lda {m1} +beq {la1} +//FRAGMENT vbsm1=_sbyte_vwum2 +lda {m2} +sta {m1} +//FRAGMENT vbsm1=vbsm2_minus_vbsm3 +lda {m2} +sec +sbc {m3} +sta {m1} +//FRAGMENT vbsm1_ge_0_then_la1 +lda {m1} +cmp #0 +bpl {la1} +//FRAGMENT vbsm1=vbsc1 +lda #{c1} +sta {m1} +//FRAGMENT 0_neq_vbsm1_then_la1 +lda {m1} +cmp #0 +bne {la1} +//FRAGMENT vwum1=vbum2 +lda {m2} +sta {m1} +lda #0 +sta {m1}+1 +//FRAGMENT 0_eq_vwum1_then_la1 +lda {m1} +ora {m1}+1 +beq {la1} +//FRAGMENT vbuz1=vbum2 +lda {m2} +sta {z1} +//FRAGMENT vwsm1_lt_0_then_la1 +lda {m1}+1 +bmi {la1} +//FRAGMENT vwsm1=_neg_vwsm1 +lda #0 +sec +sbc {m1} +sta {m1} +lda #0 +sbc {m1}+1 +sta {m1}+1 +//FRAGMENT _deref_pbuz1=_deref_pbuz2 +ldy #0 +lda ({z2}),y +ldy #0 +sta ({z1}),y +//FRAGMENT vwum1=_word_vbum2 +lda {m2} +sta {m1} +lda #0 +sta {m1}+1 +//FRAGMENT vwuz1=vwum2_bor_vwuc1 +lda {m2} +ora #<{c1} +sta {z1} +lda {m2}+1 +ora #>{c1} +sta {z1}+1 +//FRAGMENT vbum1_neq_0_then_la1 +lda {m1} +bne {la1} +//FRAGMENT pbuc1_derefidx_vbum1=_deref_pbuz2 +ldy #0 +lda ({z2}),y +ldy {m1} +sta {c1},y +//FRAGMENT 0_neq_pbuc1_derefidx_vbum1_then_la1 +ldy {m1} +lda {c1},y +cmp #0 +bne {la1} +//FRAGMENT pbuc1_derefidx_vbum1=vbum2 +lda {m2} +ldy {m1} +sta {c1},y +//FRAGMENT vbum1=vbum2_plus_2 +lda {m2} +clc +adc #2 +sta {m1} +//FRAGMENT pbuz1=pbuc1_plus_vbum2 +lda {m2} +clc +adc #<{c1} +sta {z1} +lda #>{c1} +adc #0 +sta {z1}+1 +//FRAGMENT vbum1=_byte_vwum2 +lda {m2} +sta {m1} +//FRAGMENT 0_eq_vwsm1_then_la1 +lda {m1} +ora {m1}+1 +beq {la1} +//FRAGMENT vbum1_gt_0_then_la1 +lda {m1} +bne {la1} +//FRAGMENT vbum1=_byte_vwsm2 +lda {m2} +sta {m1} +//FRAGMENT vdum1=_dword_vbum2 +lda {m2} +sta {m1} +lda #0 +sta {m1}+1 +sta {m1}+2 +sta {m1}+3 +//FRAGMENT vdum1=vdum2_rol_vbuc1 +ldy #{c1} +lda {m2} +sta {m1} +lda {m2}+1 +sta {m1}+1 +lda {m2}+2 +sta {m1}+2 +lda {m2}+3 +sta {m1}+3 +cpy #0 +beq !e+ +!: +asl {m1} +rol {m1}+1 +rol {m1}+2 +rol {m1}+3 +dey +bne !- +!e: +//FRAGMENT vbum1=vbum2_band_vbuc1 +lda #{c1} +and {m2} +sta {m1} +//FRAGMENT 0_neq_vwum1_then_la1 +lda {m1} +ora {m1}+1 +bne {la1} +//FRAGMENT pbuz1=pbuz1_plus_vwum2 +clc +lda {z1} +adc {m2} +sta {z1} +lda {z1}+1 +adc {m2}+1 +sta {z1}+1 +//FRAGMENT vdum1=vdum1_plus_vwum2 +lda {m1} +clc +adc {m2} +sta {m1} +lda {m1}+1 +adc {m2}+1 +sta {m1}+1 +lda {m1}+2 +adc #0 +sta {m1}+2 +lda {m1}+3 +adc #0 +sta {m1}+3 +//FRAGMENT pbuz1_lt_vwuc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bcc {la1} +bne !+ +lda {z1} +cmp #<{c1} +bcc {la1} +!: +//FRAGMENT vbum1=_byte_pssz2 +lda {z2} +sta {m1} +//FRAGMENT 0_eq_pbuc1_derefidx_vbum1_then_la1 +ldy {m1} +lda {c1},y +cmp #0 +beq {la1} +//FRAGMENT vbum1=_byte2_vdum2 +lda {m2}+2 +sta {m1} +//FRAGMENT vbum1=_byte1_vdum2 +lda {m2}+1 +sta {m1} +//FRAGMENT vwum1=vwum2_rol_2 +lda {m2} +asl +sta {m1} +lda {m2}+1 +rol +sta {m1}+1 +asl {m1} +rol {m1}+1 +//FRAGMENT vwum1=_word_vdum2 +lda {m2} +sta {m1} +lda {m2}+1 +sta {m1}+1 +//FRAGMENT vwum1=vwum2_band_vwuc1 +lda {m2} +and #<{c1} +sta {m1} +lda {m2}+1 +and #>{c1} +sta {m1}+1 +//FRAGMENT vwuz1=vwum2_plus_vwuc1 +lda {m2} +clc +adc #<{c1} +sta {z1} +lda {m2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vwum1_lt_vwum2_then_la1 +lda {m1}+1 +cmp {m2}+1 +bcc {la1} +bne !+ +lda {m1} +cmp {m2} +bcc {la1} +!: +//FRAGMENT vwum1=vwuz2 +lda {z2} +sta {m1} +lda {z2}+1 +sta {m1}+1 +//FRAGMENT vdum1_lt_vwuc1_then_la1 +NO_SYNTHESIS +//FRAGMENT vdum1_lt_vwsc1_then_la1 +NO_SYNTHESIS +//FRAGMENT vdum1=_inc_vdum1 +inc {m1} +bne !+ +inc {m1}+1 +bne !+ +inc {m1}+2 +bne !+ +inc {m1}+3 +!: +//FRAGMENT vbum1=pbuz2_derefidx_vbuc1 +ldy #{c1} +lda ({z2}),y +sta {m1} +//FRAGMENT vbum1=vbum2_ror_7 +lda {m2} +rol +rol +and #$01 +sta {m1} +//FRAGMENT vwum1=vbum2_word_vbuc1 +lda #{c1} +ldy {m2} +sty {m1}+1 +sta {m1} +//FRAGMENT vbum1=vbum2_ror_4 +lda {m2} +lsr +lsr +lsr +lsr +sta {m1} +//FRAGMENT _deref_pbuc1=pbuc2_derefidx_vbum1 +ldy {m1} +lda {c2},y +sta {c1} +//FRAGMENT vbum1=vbum2_ror_6 +lda {m2} +rol +rol +rol +and #$03 +sta {m1} +//FRAGMENT vbom1=vbum2_eq_vbuc1 +lda {m2} +eor #{c1} +beq !+ +lda #1 +!: +eor #1 +sta {m1} +//FRAGMENT vbum1=vbuc1_rol_vbum2 +lda #{c1} +ldy {m2} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +sta {m1} +//FRAGMENT vbum1=vbum2_minus_1 +ldx {m2} +dex +stx {m1} +//FRAGMENT vbum1=vbuz2_rol_1 +lda {z2} +asl +sta {m1} +//FRAGMENT pwuc1_derefidx_vbum1=vwum2 +ldy {m1} +lda {m2} +sta {c1},y +lda {m2}+1 +sta {c1}+1,y +//FRAGMENT vbum1_lt_vbum2_then_la1 +lda {m1} +cmp {m2} +bcc {la1} +//FRAGMENT _deref_pbuz1=pbuc1_derefidx_vbum2 +ldy {m2} +lda {c1},y +ldy #0 +sta ({z1}),y +//FRAGMENT vwum1=pwuz2_derefidx_vbum3 +ldy {m3} +lda ({z2}),y +sta {m1} +iny +lda ({z2}),y +sta {m1}+1 +//FRAGMENT vwum1_ge_vwum2_then_la1 +lda {m2}+1 +cmp {m1}+1 +bne !+ +lda {m2} +cmp {m1} +beq {la1} +!: +bcc {la1} +//FRAGMENT vbsm1=_inc_vbsm1 +inc {m1} +//FRAGMENT vwum1=vbuz2_plus_1 +lda {z2} +clc +adc #1 +sta {m1} +lda #0 +adc #0 +sta {m1}+1 +//FRAGMENT pbuc1_derefidx_vbuz1=vbum2 +lda {m2} +ldy {z1} +sta {c1},y +//FRAGMENT pbuz1_derefidx_vbum2_lt_vbuc1_then_la1 +ldy {m2} +lda ({z1}),y + +cmp #{c1} +bcc {la1} +//FRAGMENT pbuz1_derefidx_vbum2_le_vbuc1_then_la1 +ldy {m2} +lda ({z1}),y + +cmp #{c1} +bcc {la1} +beq {la1} +//FRAGMENT vwsm1=vwsm2_rol_2 +lda {m2} +asl +sta {m1} +lda {m2}+1 +rol +sta {m1}+1 +asl {m1} +rol {m1}+1 +//FRAGMENT vwsm1=vwsm2_plus_vwsm3 +lda {m2} +clc +adc {m3} +sta {m1} +lda {m2}+1 +adc {m3}+1 +sta {m1}+1 +//FRAGMENT vwsm1=vwsm2_rol_1 +lda {m2} +asl +sta {m1} +lda {m2}+1 +rol +sta {m1}+1 +//FRAGMENT vwsm1=vwsm2_plus_pbuz3_derefidx_vbum4 +ldy {m4} +lda {m2} +clc +adc ({z3}),y +sta {m1} +bcc !+ +inc {m2}+1 +!: +//FRAGMENT vwsm1=vwsm2_minus_vbuc1 +lda {m2} +sec +sbc #{c1} +sta {m1} +lda {m2}+1 +sbc #0 +sta {m1}+1 +//FRAGMENT vbum1=pbuz2_derefidx_vbum3 +ldy {m3} +lda ({z2}),y +sta {m1} +//FRAGMENT vbum1_ge_vbum2_then_la1 +lda {m1} +cmp {m2} +bcs {la1} +//FRAGMENT vwum1=vbuc1 +lda #<{c1} +sta {m1} +lda #>{c1} +sta {m1}+1 +//FRAGMENT vwum1_ge_vbuc1_then_la1 +lda {m1}+1 +bne {la1} +lda {m1} +cmp #{c1} +bcs {la1} +!: +//FRAGMENT vbum1=vwum2 +lda {m2} +sta {m1} +//FRAGMENT vbum1=pbuc1_derefidx_vbum2_band_vbuc2 +lda #{c2} +ldy {m2} +and {c1},y +sta {m1} +//FRAGMENT vwum1=vwum1_plus_vwum2 +clc +lda {m1} +adc {m2} +sta {m1} +lda {m1}+1 +adc {m2}+1 +sta {m1}+1 +//FRAGMENT vbum1=_byte1_pbuz2 +lda {z2}+1 +sta {m1} +//FRAGMENT vwum1=vwum1_minus_vwum2 +lda {m1} +sec +sbc {m2} +sta {m1} +lda {m1}+1 +sbc {m2}+1 +sta {m1}+1 +//FRAGMENT pbuc1_derefidx_vbum1_eq_0_then_la1 +ldy {m1} +lda {c1},y +cmp #0 +beq {la1} +//FRAGMENT _deref_pbuz1_eq_vbum2_then_la1 +lda {m2} +ldy #0 +cmp ({z1}),y +beq {la1} +//FRAGMENT vbum1_neq_vbum2_then_la1 +lda {m1} +cmp {m2} +bne {la1} +//FRAGMENT vbum1=_deref_pbuc1_plus_1 +lda {c1} +inc +sta {m1} +//FRAGMENT vbum1_lt__deref_pbuc1_then_la1 +lda {m1} +cmp {c1} +bcc {la1} +//FRAGMENT vwum1=pwuc1_derefidx_vbum2 +ldy {m2} +lda {c1},y +sta {m1} +lda {c1}+1,y +sta {m1}+1 +//FRAGMENT vbum1=vbum1_minus_vbum2 +lda {m1} +sec +sbc {m2} +sta {m1} +//FRAGMENT vbum1=_byte_vdum2 +lda {m2} +sta {m1} +//FRAGMENT vdum1_ge_vdum2_then_la1 +lda {m1}+3 +cmp {m2}+3 +bcc !+ +bne {la1} +lda {m1}+2 +cmp {m2}+2 +bcc !+ +bne {la1} +lda {m1}+1 +cmp {m2}+1 +bcc !+ +bne {la1} +lda {m1} +cmp {m2} +bcs {la1} +!: +//FRAGMENT vbum1=vbum2_bor_vbuc1 +lda #{c1} +ora {m2} +sta {m1} +//FRAGMENT vbum1=_dec_vbum2 +ldy {m2} +dey +sty {m1} +//FRAGMENT vbum1_le_vbuc1_then_la1 +lda #{c1} +cmp {m1} +bcs {la1} +//FRAGMENT vdum1=vdum1_minus_vdum2 +lda {m1} +sec +sbc {m2} +sta {m1} +lda {m1}+1 +sbc {m2}+1 +sta {m1}+1 +lda {m1}+2 +sbc {m2}+2 +sta {m1}+2 +lda {m1}+3 +sbc {m2}+3 +sta {m1}+3 +//FRAGMENT vbum1=vbum2_bor_vbum1 +lda {m1} +ora {m2} +sta {m1} +//FRAGMENT vbum1=vbum1_rol_4 +lda {m1} +asl +asl +asl +asl +sta {m1} +//FRAGMENT vbum1=vbum1_rol_1 +asl {m1} +//FRAGMENT vbsm1=vbsm1_minus_vbsm2 +lda {m1} +sec +sbc {m2} +sta {m1} +//FRAGMENT vbum1=vbum2_plus_vbum1 +lda {m1} +clc +adc {m2} +sta {m1} +//FRAGMENT vbsm1=vbsm2_minus_vbsm1 +lda {m2} +sec +sbc {m1} +sta {m1} +//FRAGMENT vwsm1=vwsm2_plus_vwsm1 +clc +lda {m1} +adc {m2} +sta {m1} +lda {m1}+1 +adc {m2}+1 +sta {m1}+1 +//FRAGMENT vwsm1=vwsm1_minus_vbuc1 +lda {m1} +sec +sbc #{c1} +sta {m1} +bcs !+ +dec {m1}+1 +!: +//FRAGMENT vbum1=vbum1_plus_vbum2 +lda {m1} +clc +adc {m2} +sta {m1} +//FRAGMENT vdum1=vdum2_plus_vdum1 +clc +lda {m1} +adc {m2} +sta {m1} +lda {m1}+1 +adc {m2}+1 +sta {m1}+1 +lda {m1}+2 +adc {m2}+2 +sta {m1}+2 +lda {m1}+3 +adc {m2}+3 +sta {m1}+3 +//FRAGMENT vbum1=vbum1_band_vbuc1 +lda #{c1} +and {m1} +sta {m1} +//FRAGMENT vbum1=vbum1_bor_vbum2 +lda {m1} +ora {m2} +sta {m1} +//FRAGMENT vbum1=vbuc1_plus_vbum1 +lda #{c1} +clc +adc {m1} +sta {m1} +//FRAGMENT vwum1=vwum1_rol_2 +asl {m1} +rol {m1}+1 +asl {m1} +rol {m1}+1 +//FRAGMENT vwum1=vwum1_band_vwuc1 +lda {m1} +and #<{c1} +sta {m1} +lda {m1}+1 +and #>{c1} +sta {m1}+1 +//FRAGMENT vbom1=vbum1_eq_vbuc1 +lda {m1} +eor #{c1} +beq !+ +lda #1 +!: +eor #1 +sta {m1} +//FRAGMENT vbum1=vbum1_ror_4 +lda {m1} +lsr +lsr +lsr +lsr +sta {m1} +//FRAGMENT vbum1=vbuc1_rol_vbum1 +lda #{c1} +ldy {m1} +cpy #0 +beq !e+ +!: +asl +dey +bne !- +!e: +sta {m1} +//FRAGMENT vbum1=vbum1_bor_vbuc1 +lda #{c1} +ora {m1} +sta {m1} +//FRAGMENT vwsm1=vwsm1_rol_1 +asl {m1} +rol {m1}+1 +//FRAGMENT vwsm1=vwsm1_plus_pbuz2_derefidx_vbum3 +ldy {m3} +lda {m1} +clc +adc ({z2}),y +sta {m1} +bcc !+ +inc {m1}+1 +!: +//FRAGMENT vdum1=vdum1_minus_vwuc1 +NO_SYNTHESIS +//FRAGMENT vdum1=vdum1_minus_vwsc1 +NO_SYNTHESIS +//FRAGMENT vdum1=vdum1_minus_vduc1 +lda {m1} +sec +sbc #<{c1} +sta {m1} +lda {m1}+1 +sbc #>{c1} +sta {m1}+1 +lda {m1}+2 +sbc #<{c1}>>$10 +sta {m1}+2 +lda {m1}+3 +sbc #>{c1}>>$10 +sta {m1}+3 +//FRAGMENT vbum1=vbum1_ror_6 +lda {m1} +rol +rol +rol +and #$03 +sta {m1} +//FRAGMENT vdum1=vdum1_rol_vbuc1 +ldx #{c1} +cpx #0 +beq !e+ +!: +asl {m1} +rol {m1}+1 +rol {m1}+2 +rol {m1}+3 +dex +bne !- +!e: +//FRAGMENT vbum1=vbum1_minus_1 +dec {m1} +//FRAGMENT vbuz1=vbuz2_plus_vbuc1 +lda #{c1} +clc +adc {z2} +sta {z1} +//FRAGMENT vbuz1=vbuz2_bor_vbuz3 +lda {z2} +ora {z3} +sta {z1} +//FRAGMENT vbuz1=vbuz2_rol_4 +lda {z2} +asl +asl +asl +asl +sta {z1} +//FRAGMENT vbuz1=_deref_pbuc1_minus_1 +ldx {c1} +dex +stx {z1} +//FRAGMENT _deref_pbuc1_le_vbuz1_then_la1 +lda {z1} +cmp {c1} +bcs {la1} +//FRAGMENT vbuz1=_deref_pbuc1_minus__deref_pbuc2 +lda {c1} +sec +sbc {c2} +sta {z1} +//FRAGMENT vbuz1_gt__deref_pbuc1_then_la1 +lda {c1} +cmp {z1} +bcc {la1} +//FRAGMENT vbuz1=vbuz2_bor_vbuz1 +lda {z1} +ora {z2} +sta {z1} +//FRAGMENT vbuz1=vbuz1_rol_4 +lda {z1} +asl +asl +asl +asl +sta {z1} +//FRAGMENT vbuz1=vbuz1_plus_1 +inc {z1} +//FRAGMENT vbuz1=vbuz1_bor_vbuz2 +lda {z1} +ora {z2} +sta {z1} +//FRAGMENT pbuz1_neq_pbuc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bne {la1} +lda {z1} +cmp #<{c1} +bne {la1} +//FRAGMENT pwuc1_derefidx_vbuz1_eq_vwuc2_then_la1 +ldy {z1} +lda {c1},y +cmp #<{c2} +bne !+ +lda {c1}+1,y +cmp #>{c2} +beq {la1} +!: +//FRAGMENT vbuz1_eq_vbuz2_then_la1 +lda {z1} +cmp {z2} +beq {la1} +//FRAGMENT _deref_pbuc1_neq_vbuc2_then_la1 +lda #{c2} +cmp {c1} +bne {la1} +//FRAGMENT pbuc1_derefidx_vbuz1=_deref_pbuc2 +lda {c2} +ldy {z1} +sta {c1},y +//FRAGMENT pbuc1_derefidx_(_deref_pbuc2)=vbuz1 +lda {z1} +ldy {c2} +sta {c1},y +//FRAGMENT _deref_pbuc1_neq_vbuz1_then_la1 +lda {c1} +cmp {z1} +bne {la1} +//FRAGMENT pwuc1_derefidx_vbuz1=vwuc2 +ldy {z1} +lda #<{c2} +sta {c1},y +lda #>{c2} +sta {c1}+1,y +//FRAGMENT vbuz1=vbuz2_ror_3 +lda {z2} +lsr +lsr +lsr +sta {z1} +//FRAGMENT pwuc1_derefidx_vbuz1_neq_vwuc2_then_la1 +ldy {z1} +lda {c1}+1,y +cmp #>{c2} +bne {la1} +lda {c1},y +cmp #<{c2} +bne {la1} +//FRAGMENT pwuc1_derefidx_vbuz1_neq_vwuz2_then_la1 +ldy {z1} +lda {z2}+1 +cmp {c1}+1,y +bne {la1} +lda {z2} +cmp {c1},y +bne {la1} +//FRAGMENT pbuc1_derefidx_vbuz1_eq_vbuz1_then_la1 +ldy {z1} +lda {c1},y +cmp {z1} +beq {la1} +//FRAGMENT vbuz1_neq__deref_pbuc1_then_la1 +lda {c1} +cmp {z1} +bne {la1} +//FRAGMENT _deref_pbuc1=_dec__deref_pbuc1 +dec {c1} +//FRAGMENT vbuz1=pbuc1_derefidx_vbuz1 +ldy {z1} +lda {c1},y +sta {z1} +//FRAGMENT vwuz1=vwuz2_band_vbuc1 +lda #{c1} +and {z2} +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vbuz1_neq_vbuz2_then_la1 +lda {z1} +cmp {z2} +bne {la1} +//FRAGMENT pbuc1_derefidx_vbuz1_eq_vbuz2_then_la1 +ldy {z1} +lda {c1},y +cmp {z2} +beq {la1} +//FRAGMENT pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1 +lda #{c2} +ldy {z1} +cmp {c1},y +bne {la1} +//FRAGMENT vbuz1=_inc_vbuz2 +lda {z2} +inc +sta {z1} +//FRAGMENT vwuz1=vbuz2_plus_vbuc1 +lda #{c1} +clc +adc {z2} +sta {z1} +lda #0 +adc #0 +sta {z1}+1 +//FRAGMENT vbsz1=vbsz2_minus_vbsz1 +lda {z2} +sec +sbc {z1} +sta {z1} +//FRAGMENT vwuz1=vwuz1_band_vbuc1 +lda #{c1} +and {z1} +sta {z1} +lda #0 +sta {z1}+1 +//FRAGMENT vbuz1_eq_0_then_la1 +lda {z1} +beq {la1} +//FRAGMENT isr_rom_sys_cx16_entry + +//FRAGMENT vwuz1_neq_vbuc1_then_la1 +lda {z1}+1 +bne {la1} +lda {z1} +cmp #{c1} +bne {la1} +//FRAGMENT vwuz1=_dec_vwuz1 +lda {z1} +bne !+ +dec {z1}+1 +!: +dec {z1} +//FRAGMENT isr_rom_sys_cx16_exit +jmp (isr_vsync) +//FRAGMENT vwuz1=vwuz2_rol_1 +lda {z2} +asl +sta {z1} +lda {z2}+1 +rol +sta {z1}+1 +//FRAGMENT pwuz1=pwuc1_plus_vwuz2 +lda {z2} +clc +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 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 _deref_qprc1=pprc2 +lda #<{c2} +sta {c1} +lda #>{c2} +sta {c1}+1 +//FRAGMENT _deref_pwuc1=_deref_pwuc1_plus_vbuc2 +lda #{c2} +clc +adc {c1} +sta {c1} +bcc !+ +inc {c1}+1 +!: +//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 +sta {c1} +//FRAGMENT pbuz1=pbuz2_plus_vwuz1 +clc +lda {z1} +adc {z2} +sta {z1} +lda {z1}+1 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT pwuz1=pwuc1_plus_vwuz1 +lda {z1} +clc +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vwuz1=_inc_vwuz2 +clc +lda {z2} +adc #1 +sta {z1} +lda {z2}+1 +adc #0 +sta {z1}+1 +//FRAGMENT vdum1=vwuc1 +NO_SYNTHESIS +//FRAGMENT vdum1=vwsc1 +NO_SYNTHESIS +//FRAGMENT pssz1=pssc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT vbum1=vbuz2 +lda {z2} +sta {m1} +//FRAGMENT vbum1=vwuc1 +lda #<{c1} +sta {m1} +//FRAGMENT _deref_pwsc1=_deref_pwsc2 +lda {c2} +sta {c1} +lda {c2}+1 +sta {c1}+1 +//FRAGMENT _deref_pwsc1=vwsz1 +lda {z1} +sta {c1} +lda {z1}+1 +sta {c1}+1 +//FRAGMENT _deref_pwuc1_ge__deref_pbuc2_then_la1 +lda {c1}+1 +bne {la1} +lda {c1} +cmp {c2} +bcs {la1} +!: +//FRAGMENT _deref_pwuc1_lt__deref_pwuc2_then_la1 +lda {c1}+1 +cmp {c2}+1 +bcc {la1} +bne !+ +lda {c1} +cmp {c2} +bcc {la1} +!: +//FRAGMENT pssz1=_deref_qssc1 +lda {c1} +sta {z1} +lda {c1}+1 +sta {z1}+1 +//FRAGMENT vwum1=_deref_pwuc1_rol_2 +lda {c1} +asl +sta {m1} +lda {c1}+1 +rol +sta {m1}+1 +asl {m1} +rol {m1}+1 +//FRAGMENT vwum1=vwum2_plus__deref_pwuc1 +lda {m2} +clc +adc {c1} +sta {m1} +lda {m2}+1 +adc {c1}+1 +sta {m1}+1 +//FRAGMENT vwum1=vwum2_rol_1 +lda {m2} +asl +sta {m1} +lda {m2}+1 +rol +sta {m1}+1 +//FRAGMENT pssz1=pssz2_plus_vwum3 +lda {m3} +clc +adc {z2} +sta {z1} +lda {m3}+1 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT _deref_pssc1=_deref_pssz1_memcpy_vbuc2 +ldx #{c2} +ldy #0 +!: +lda ({z1}),y +sta {c1},y +iny +dex +bne !- +//FRAGMENT _deref_pwuc1=_deref_pbuc2 +lda {c2} +sta {c1} +lda #0 +sta {c1}+1 +//FRAGMENT _deref_pwuc1=vbuc2 +lda #<{c2} +sta {c1} +lda #>{c2} +sta {c1}+1 +//FRAGMENT 0_eq__deref_pbuc1_then_la1 +lda {c1} +beq {la1} +//FRAGMENT 0_neq__deref_pbuc1_then_la1 +lda {c1} +bne {la1} +//FRAGMENT pssz1=qssz2_derefidx_vbuc1 +ldy #{c1} +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +//FRAGMENT vwum1_lt__deref_pwuc1_then_la1 +lda {m1}+1 +cmp {c1}+1 +bcc {la1} +bne !+ +lda {m1} +cmp {c1} +bcc {la1} +!: +//FRAGMENT qssz1=qssz2_plus_1 +clc +lda {z2} +adc #1 +sta {z1} +lda {z2}+1 +adc #0 +sta {z1}+1 +//FRAGMENT qssz1=qssz2_plus_vwum3 +lda {z2} +clc +adc {m3} +sta {z1} +lda {z2}+1 +adc {m3}+1 +sta {z1}+1 +//FRAGMENT pssz1=_deref_qssz2 +ldy #0 +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +//FRAGMENT vwum1=vwum2_plus_vwum3 +lda {m2} +clc +adc {m3} +sta {m1} +lda {m2}+1 +adc {m3}+1 +sta {m1}+1 +//FRAGMENT pbuz1=pbuz2_plus_vbuc1 +lda #{c1} +clc +adc {z2} +sta {z1} +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT pbuz1=pbuz2_plus_vwum3 +lda {z2} +clc +adc {m3} +sta {z1} +lda {z2}+1 +adc {m3}+1 +sta {z1}+1 +//FRAGMENT vwum1=_word__deref_pbuz2 +ldy #0 +lda ({z2}),y +sta {m1} +lda #0 +sta {m1}+1 +//FRAGMENT vwum1_neq_vwum2_then_la1 +lda {m1}+1 +cmp {m2}+1 +bne {la1} +lda {m1} +cmp {m2} +bne {la1} +//FRAGMENT vwum1=_deref_pwuc1_plus_1 +clc +lda {c1} +adc #1 +sta {m1} +lda {c1}+1 +adc #0 +sta {m1}+1 +//FRAGMENT vbum1=vwum2_band_vbuc1 +lda #{c1} +and {m2} +sta {m1} +//FRAGMENT _deref_pwuc1=vbum1 +lda {m1} +sta {c1} +lda #0 +sta {c1}+1 +//FRAGMENT vbum1=_deref_pwuc1 +lda {c1} +sta {m1} +//FRAGMENT pbuc1_derefidx_vbum1=_dec_pbuc1_derefidx_vbum1 +ldx {m1} +dec {c1},x +//FRAGMENT pbuc1_derefidx_vbum1_le_0_then_la1 +ldy {m1} +lda {c1},y +cmp #0 +beq {la1} +//FRAGMENT pbuc1_derefidx_vbum1=pbuc2_derefidx_vbum1 +ldy {m1} +lda {c2},y +sta {c1},y +//FRAGMENT _deref_pwsc1_ge__deref_pwsc2_then_la1 +lda {c1} +cmp {c2} +lda {c1}+1 +sbc {c2}+1 +bvc !+ +eor #$80 +!: +bpl {la1} +//FRAGMENT pbuc1_derefidx_vbum1=pbuc1_derefidx_vbum1_minus_1 +ldy {m1} +lda {c1},y +sec +sbc #1 +sta {c1},y +//FRAGMENT _deref_pwsc1_le__deref_pwsc2_then_la1 +lda {c2} +cmp {c1} +lda {c2}+1 +sbc {c1}+1 +bvc !+ +eor #$80 +!: +bpl {la1} +//FRAGMENT pbuc1_derefidx_vbum1_ge_vbuc2_then_la1 +ldy {m1} +lda {c1},y +cmp #{c2} +bcs {la1} +//FRAGMENT pbuc1_derefidx_vbum1=pbuc1_derefidx_vbum1_plus_1 +ldy {m1} +lda {c1},y +inc +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbum1_neq_vbuc2_then_la1 +lda #{c2} +ldy {m1} +cmp {c1},y +bne {la1} +//FRAGMENT pbuc1_derefidx_vbum1_lt_vbuc2_then_la1 +ldy {m1} +lda {c1},y +cmp #{c2} +bcc {la1} +//FRAGMENT pbuc1_derefidx_vbum1=_inc_pbuc1_derefidx_vbum1 +ldx {m1} +inc {c1},x +//FRAGMENT pbuc1_derefidx_vbum1=pbuc1_derefidx_vbum1_band_vbuc2 +lda #{c2} +ldy {m1} +and {c1},y +sta {c1},y +//FRAGMENT vdum1=_deref_pwuc1_dword_vbuc2 +lda {c1} +sta {m1}+2 +lda {c1}+1 +sta {m1}+3 +lda #{c2} +sta {m1} +lda #0 +sta {m1}+1 +//FRAGMENT pduc1_derefidx_vbum1=vdum2 +ldy {m1} +lda {m2} +sta {c1},y +lda {m2}+1 +sta {c1}+1,y +lda {m2}+2 +sta {c1}+2,y +lda {m2}+3 +sta {c1}+3,y +//FRAGMENT vwum1=_word1_pduc1_derefidx_vbum2 +ldy {m2} +lda {c1}+2,y +sta {m1} +lda {c1}+3,y +sta {m1}+1 +//FRAGMENT vwsm1_le_vwsc1_then_la1 +lda #<{c1} +cmp {m1} +lda #>{c1} +sbc {m1}+1 +bvc !+ +eor #$80 +!: +bpl {la1} +//FRAGMENT vwsm1=vbsc1 +lda #<{c1} +sta {m1} +lda #>{c1} +sta {m1}+1 +//FRAGMENT vwum1=vwum2_plus_vbuc1 +lda #{c1} +clc +adc {m2} +sta {m1} +lda #0 +adc {m2}+1 +sta {m1}+1 +//FRAGMENT vbum1=_byte0_vwsm2 +lda {m2} +sta {m1} +//FRAGMENT vbum1=_byte1_vwsm2 +lda {m2}+1 +sta {m1} +//FRAGMENT vwsm1=vwsm2_plus_vbsc1 +lda {m2} +clc +adc #<{c1} +sta {m1} +lda {m2}+1 +adc #>{c1} +sta {m1}+1 +//FRAGMENT pduc1_derefidx_vbum1=pduc1_derefidx_vbum1_plus_pduc2_derefidx_vbum1 +ldy {m1} +lda {c1},y +clc +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 vwsm1_le_vbsc1_then_la1 +NO_SYNTHESIS +//FRAGMENT vwsm1_gt_vbsc1_then_la1 +NO_SYNTHESIS +//FRAGMENT vwsm1_gt_vwsc1_then_la1 +lda #<{c1} +cmp {m1} +lda #>{c1} +sbc {m1}+1 +bvc !+ +eor #$80 +!: +bmi {la1} +//FRAGMENT vwsm1_ge_vwsc1_then_la1 +lda {m1} +cmp #<{c1} +lda {m1}+1 +sbc #>{c1} +bvc !+ +eor #$80 +!: +bpl {la1} +//FRAGMENT vwsm1_lt_vwsc1_then_la1 +lda {m1} +cmp #<{c1} +lda {m1}+1 +sbc #>{c1} +bvc !+ +eor #$80 +!: +bmi {la1} +//FRAGMENT vbum1=pbuc1_derefidx_(pbuc2_derefidx_vbum2) +ldx {m2} +ldy {c2},x +ldx {c1},y +stx {m1} +//FRAGMENT vwsm1=vwsm2_ror_2 +lda {m2}+1 +cmp #$80 +ror +sta {m1}+1 +lda {m2} +ror +sta {m1} +lda {m1}+1 +cmp #$80 +ror {m1}+1 +ror {m1} +//FRAGMENT vbum1=vbuc1_bor_vbum2 +lda #{c1} +ora {m2} +sta {m1} +//FRAGMENT 0_eq_pwuc1_derefidx_vbum1_then_la1 +ldy {m1} +lda {c1},y +ora {c1}+1,y +beq {la1} +//FRAGMENT pwuc1_derefidx_vbum1=_dec_pwuc1_derefidx_vbum1 +ldx {m1} +lda {c1},x +bne !+ +dec {c1}+1,x +!: +dec {c1},x +//FRAGMENT vwsm1=pwsc1_derefidx_vbum2 +ldy {m2} +lda {c1},y +sta {m1} +lda {c1}+1,y +sta {m1}+1 +//FRAGMENT vwsm1=vwsm1_rol_vbum2 +ldy {m2} +beq !e+ +!: +asl {m1} +rol {m1}+1 +dey +bne !- +!e: +//FRAGMENT vdum1=_dword_vwsm2 +lda {m2} +sta {m1} +lda {m2}+1 +sta {m1}+1 +ora #$7f +bmi !+ +lda #0 +!: +sta {m1}+2 +sta {m1}+3 +//FRAGMENT vdum1=vdum2_rol_8 +lda #0 +sta {m1} +lda {m2} +sta {m1}+1 +lda {m2}+1 +sta {m1}+2 +lda {m2}+2 +sta {m1}+3 +//FRAGMENT pbuc1_derefidx_vbum1=pbuc1_derefidx_vbum1_plus_pbuc2_derefidx_vbum1 +ldy {m1} +lda {c1},y +clc +adc {c2},y +sta {c1},y +//FRAGMENT vwsm1_lt_vbsc1_then_la1 +NO_SYNTHESIS +//FRAGMENT pssz1=qssc1_derefidx_vbum2 +ldy {m2} +lda {c1},y +sta {z1} +lda {c1}+1,y +sta {z1}+1 +//FRAGMENT pvoz1=qvoz2_derefidx_vbum3 +ldy {m3} +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +//FRAGMENT vbsm1=_deref_pbsz2 +ldy #0 +lda ({z2}),y +sta {m1} +//FRAGMENT vwum1=_deref_pwuz2 +ldy #0 +lda ({z2}),y +sta {m1} +iny +lda ({z2}),y +sta {m1}+1 +//FRAGMENT vbsm1=pbsz2_derefidx_vbuc1 +ldy #{c1} +lda ({z2}),y +sta {m1} +//FRAGMENT pbsc1_derefidx_vbum1_le_0_then_la1 +ldy {m1} +lda {c1},y +cmp #1 +bmi {la1} +//FRAGMENT pbuc1_derefidx_vbum1_lt_pbuc2_derefidx_vbum1_then_la1 +ldy {m1} +lda {c1},y +cmp {c2},y +bcc {la1} +//FRAGMENT pbsc1_derefidx_vbum1_ge_0_then_la1 +ldy {m1} +lda {c1},y +cmp #0 +bpl {la1} +//FRAGMENT pbuc1_derefidx_vbum1_gt_pbuc2_derefidx_vbum1_then_la1 +ldy {m1} +lda {c2},y +cmp {c1},y +bcc {la1} +//FRAGMENT pbsc1_derefidx_vbum1=vbsc2 +lda #{c2} +ldy {m1} +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbum1=pbuc1_derefidx_vbum1_plus_pbsc2_derefidx_vbum1 +ldx {m1} +lda {c1},x +ldy {c2},x +sty $ff +clc +adc $ff +sta {c1},x +//FRAGMENT vbum1=vbuz2_rol_4 +lda {z2} +asl +asl +asl +asl +sta {m1} +//FRAGMENT _deref_pwuc1=vwuc2 +lda #<{c2} +sta {c1} +lda #>{c2} +sta {c1}+1 +//FRAGMENT 0_eq__deref_pwuc1_then_la1 +lda {c1} +ora {c1}+1 +beq {la1} +//FRAGMENT pwuz1_derefidx_vbuc1=vwum2 +ldy #{c1} +lda {m2} +sta ({z1}),y +iny +lda {m2}+1 +sta ({z1}),y +//FRAGMENT pduz1_derefidx_vbuc1=vdum2 +ldy #{c1} +lda {m2} +sta ({z1}),y +iny +lda {m2}+1 +sta ({z1}),y +iny +lda {m2}+2 +sta ({z1}),y +iny +lda {m2}+3 +sta ({z1}),y +//FRAGMENT pwuz1_derefidx_vbuc1=vbuc2 +lda #{c2} +ldy #{c1} +sta ({z1}),y +lda #0 +iny +sta ({z1}),y +//FRAGMENT vwum1=pwuz2_derefidx_vbuc1 +ldy #{c1} +lda ({z2}),y +sta {m1} +iny +lda ({z2}),y +sta {m1}+1 +//FRAGMENT qssc1_derefidx_vbum1=pssz2 +ldy {m1} +lda {z2} +sta {c1},y +lda {z2}+1 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbum1=vbuc2 +lda #{c2} +ldy {m1} +sta {c1},y +lda #0 +sta {c1}+1,y +//FRAGMENT vwum1=vwum2_minus_pwuc1_derefidx_vbum3 +ldy {m3} +lda {m2} +sec +sbc {c1},y +sta {m1} +lda {m2}+1 +sbc {c1}+1,y +sta {m1}+1 +//FRAGMENT vwum1=pwuc1_derefidx_vbum2_minus_pwuc2_derefidx_vbum2 +ldy {m2} +lda {c1},y +sec +sbc {c2},y +sta {m1} +lda {c1}+1,y +sbc {c2}+1,y +sta {m1}+1 +//FRAGMENT pbuc1_derefidx_vbum1=vbum1 +ldy {m1} +tya +sta {c1},y +//FRAGMENT pwuc1_derefidx_vbum1=_inc_pwuc1_derefidx_vbum1 +ldx {m1} +inc {c1},x +bne !+ +inc {c1}+1,x +!: +//FRAGMENT pvoz1=pvoc1 +lda #<{c1} +sta {z1} +lda #>{c1} +sta {z1}+1 +//FRAGMENT _deref_qssc1=pssc2 +lda #<{c2} +sta {c1} +lda #>{c2} +sta {c1}+1 +//FRAGMENT pssz1=pssc1_plus_vwum2 +lda {m2} +clc +adc #<{c1} +sta {z1} +lda {m2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT pduc1_derefidx_vbum1=vbuc2 +ldy {m1} +lda #{c2} +sta {c1},y +lda #0 +sta {c1}+1,y +sta {c1}+2,y +sta {c1}+3,y +//FRAGMENT pbsz1=pbsz2_plus_vbuc1 +lda #{c1} +clc +adc {z2} +sta {z1} +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT pbsz1=pbsz2_plus_vwum3 +lda {z2} +clc +adc {m3} +sta {z1} +lda {z2}+1 +adc {m3}+1 +sta {z1}+1 +//FRAGMENT pbsc1_derefidx_vbum1=_deref_pbsz2 +ldy #0 +lda ({z2}),y +ldy {m1} +sta {c1},y +//FRAGMENT qssz1=qssz2_plus_vbuc1 +lda #{c1} +clc +adc {z2} +sta {z1} +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT qssc1_derefidx_vbum1=_deref_qssz2 +ldx {m1} +ldy #$00 +lda ({z2}),y +sta {c1},x +iny +lda ({z2}),y +sta {c1}+1,x +//FRAGMENT pbuc1_derefidx_vbum1=pbuz2_derefidx_vbuc2 +ldx {m1} +ldy #{c2} +lda ({z2}),y +sta {c1},x +//FRAGMENT pwsz1=pwsz2_plus_vbuc1 +lda #{c1} +clc +adc {z2} +sta {z1} +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT pwsz1=pwsz2_plus_vwum3 +lda {z2} +clc +adc {m3} +sta {z1} +lda {z2}+1 +adc {m3}+1 +sta {z1}+1 +//FRAGMENT pwsc1_derefidx_vbum1=_deref_pwsz2 +ldx {m1} +ldy #0 +lda ({z2}),y +sta {c1},x +iny +lda ({z2}),y +sta {c1}+1,x +//FRAGMENT pwsc1_derefidx_vbum1=pwsc1_derefidx_vbum1_plus_pbsc2_derefidx_vbum2 +ldx {m1} +ldy {m2} +lda {c2},y +sta $ff +clc +adc {c1},x +sta {c1},x +iny +lda $ff +ora #$7f +bmi !+ +lda #0 +!: +adc {c1}+1,x +sta {c1}+1,x +//FRAGMENT pbuc1_derefidx_vbum1=pbuc1_derefidx_vbum1_minus_vbuc2 +ldy {m1} +lda {c1},y +sec +sbc #{c2} +sta {c1},y +//FRAGMENT _deref_pbuc1_ge_vbuc2_then_la1 +lda {c1} +cmp #{c2} +bcs {la1} +//FRAGMENT vwum1=_deref_pwuc1_plus_vbsc2 +lda #{c2} +sta $ff +clc +adc {c1} +sta {m1} +lda $ff +ora #$7f +bmi !+ +lda #0 +!: +adc {c1}+1 +sta {m1}+1 +//FRAGMENT vbum1=pbuc1_derefidx_vbum2_bxor_vbuc2 +lda #{c2} +ldy {m2} +eor {c1},y +sta {m1} +//FRAGMENT vdum1=vwum2_dword_vbuc1 +lda {m2} +sta {m1}+2 +lda {m2}+1 +sta {m1}+3 +lda #{c1} +sta {m1} +lda #0 +sta {m1}+1 +//FRAGMENT pwuz1=pwuc1_plus_vwum2 +lda {m2} +clc +adc #<{c1} +sta {z1} +lda {m2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vwuz1=vwum2 +lda {m2} +sta {z1} +lda {m2}+1 +sta {z1}+1 +//FRAGMENT vdum1=vwum2 +lda {m2} +sta {m1} +lda {m2}+1 +sta {m1}+1 +lda #0 +sta {m1}+2 +sta {m1}+3 +//FRAGMENT vbom1=vbum2_neq_vbuc1 +lda {m2} +eor #{c1} +beq !+ +lda #1 +!: +sta {m1} +//FRAGMENT vboz1=_deref_pbuc1_ge_vbuc2 +lda {c1} +cmp #{c2} +bcs !+ +lda #0 +jmp !e+ +!: +lda #1 +!e: +sta {z1} +//FRAGMENT vbom1=vboz2 +lda {z2} +sta {m1} +//FRAGMENT vbom1_then_la1 +lda {m1} +cmp #0 +bne {la1} +//FRAGMENT vdum1=_dword_pwuc1_derefidx_vbum2 +ldy {m2} +lda {c1},y +sta {m1} +iny +lda {c1},y +sta {m1}+1 +lda #0 +sta {m1}+2 +sta {m1}+3 +//FRAGMENT vbum1=_deref_pbuz2_ror_5 +ldy #0 +lda ({z2}),y +lsr +lsr +lsr +lsr +lsr +sta {m1} +//FRAGMENT vwum1=vwum2_rol_3 +lda {m2} +asl +sta {m1} +lda {m2}+1 +rol +sta {m1}+1 +asl {m1} +rol {m1}+1 +asl {m1} +rol {m1}+1 +//FRAGMENT vbum1=vbum2_ror_2 +lda {m2} +lsr +lsr +sta {m1} +//FRAGMENT vwuz1=pwuc1_derefidx_vbum2 +ldy {m2} +lda {c1},y +sta {z1} +lda {c1}+1,y +sta {z1}+1 +//FRAGMENT vwum1=vwum2_ror_5 +lda {m2}+1 +lsr +sta {m1}+1 +lda {m2} +ror +sta {m1} +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +//FRAGMENT vwum1=vwum2_rol_vbuc1 +ldy #{c1} +lda {m2} +sta {m1} +lda {m2}+1 +sta {m1}+1 +cpy #0 +beq !e+ +!: +asl {m1} +rol {m1}+1 +dey +bne !- +!e: +//FRAGMENT vwum1=vwum2_bor_vwum3 +lda {m2} +ora {m3} +sta {m1} +lda {m2}+1 +ora {m3}+1 +sta {m1}+1 +//FRAGMENT vwum1=pbuc1_derefidx_(pbuc2_derefidx_vbum2) +ldx {m2} +ldy {c2},x +lda {c1},y +sta {m1} +lda #0 +sta {m1}+1 +//FRAGMENT 0_eq_pbsc1_derefidx_vbum1_then_la1 +ldy {m1} +lda {c1},y +cmp #0 +beq {la1} +//FRAGMENT vbum1=vbum2_plus_vbuc1 +lda #{c1} +clc +adc {m2} +sta {m1} +//FRAGMENT vbum1_le_vbum2_then_la1 +lda {m2} +cmp {m1} +bcs {la1} +//FRAGMENT vbum1=vbum1_plus_1 +inc {m1} +//FRAGMENT vwum1=vwum2_rol_7 +lda {m2}+1 +lsr +lda {m2} +ror +sta {m1}+1 +lda #0 +ror +sta {m1} +//FRAGMENT vwum1=vwum1_bxor_vwum2 +lda {m1} +eor {m2} +sta {m1} +lda {m1}+1 +eor {m2}+1 +sta {m1}+1 +//FRAGMENT vwum1=vwum2_ror_9 +lda {m2}+1 +lsr +sta {m1} +lda #0 +sta {m1}+1 +//FRAGMENT vwum1=vwum2_rol_8 +lda {m2} +sta {m1}+1 +lda #0 +sta {m1} +//FRAGMENT vwum1=vwum2_ror_2 +lda {m2}+1 +lsr +sta {m1}+1 +lda {m2} +ror +sta {m1} +lsr {m1}+1 +ror {m1} +//FRAGMENT vwum1=_deref_pwuc1_ror_2 +lda {c1}+1 +lsr +sta {m1}+1 +lda {c1} +ror +sta {m1} +lsr {m1}+1 +ror {m1} +//FRAGMENT vbum1=vbum2_minus_vbuc1 +lda {m2} +sec +sbc #{c1} +sta {m1} +//FRAGMENT vwsm1=vwsm2_rol_vbuc1 +ldy #{c1} +lda {m2} +sta {m1} +lda {m2}+1 +sta {m1}+1 +cpy #0 +beq !e+ +!: +asl {m1} +rol {m1}+1 +dey +bne !- +!e: +//FRAGMENT pbuc1_derefidx_vbum1=pbuc1_derefidx_vbum1_plus_vbuc2 +lda #{c2} +ldy {m1} +clc +adc {c1},y +sta {c1},y +//FRAGMENT vwum1=vwum1_ror_vbum2 +ldy {m2} +!: +lsr {m1}+1 +ror {m1} +dey +bne !- +!e: +//FRAGMENT vbum1=pbuc1_derefidx_vbum2_plus_vbum3 +lda {m3} +ldy {m2} +clc +adc {c1},y +sta {m1} +//FRAGMENT vbum1=vbuz2_ror_7 +lda {z2} +rol +rol +and #$01 +sta {m1} +//FRAGMENT vbum1=vbuz2_band_vbuc1 +lda #{c1} +and {z2} +sta {m1} +//FRAGMENT pwuc1_derefidx_vbum1=vwuz2 +ldy {m1} +lda {z2} +sta {c1},y +lda {z2}+1 +sta {c1}+1,y +//FRAGMENT _deref_pbuc1=_deref_pbuc1 +lda {c1} +sta {c1} +//FRAGMENT vbum1=_byte0_vwuz2 +lda {z2} +sta {m1} +//FRAGMENT vbum1=_byte1_vwuz2 +lda {z2}+1 +sta {m1} +//FRAGMENT vwuz1_le_0_then_la1 +lda {z1} +bne !+ +lda {z1}+1 +beq {la1} +!: +//FRAGMENT vdum1=vdum2_ror_3 +lda {m2}+3 +lsr +sta {m1}+3 +lda {m2}+2 +ror +sta {m1}+2 +lda {m2}+1 +ror +sta {m1}+1 +lda {m2} +ror +sta {m1} +lsr {m1}+3 +ror {m1}+2 +ror {m1}+1 +ror {m1} +lsr {m1}+3 +ror {m1}+2 +ror {m1}+1 +ror {m1} +//FRAGMENT vwum1=vwum2_ror_3 +lda {m2}+1 +lsr +sta {m1}+1 +lda {m2} +ror +sta {m1} +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +//FRAGMENT _deref_pbuc1=_deref_pbuc1_plus_1 +inc {c1} +//FRAGMENT pbuc1_derefidx_vbum1=pbuc1_derefidx_vbum1_band_vbum2 +lda {m2} +ldy {m1} +and {c1},y +sta {c1},y +//FRAGMENT pbuc1_derefidx_vbum1=pbuc1_derefidx_vbum1_bor_vbuc2 +lda #{c2} +ldy {m1} +ora {c1},y +sta {c1},y +//FRAGMENT vwum1_lt_vbuc1_then_la1 +lda {m1}+1 +bne !+ +lda {m1} +cmp #{c1} +bcc {la1} +!: +//FRAGMENT vwum1=vwum2_rol_5 +lda {m2} +asl +sta {m1} +lda {m2}+1 +rol +sta {m1}+1 +asl {m1} +rol {m1}+1 +asl {m1} +rol {m1}+1 +asl {m1} +rol {m1}+1 +asl {m1} +rol {m1}+1 +//FRAGMENT _deref_pwuz1=vwuz2 +ldy #0 +lda {z2} +sta ({z1}),y +iny +lda {z2}+1 +sta ({z1}),y +//FRAGMENT pbuz1=qbuc1_derefidx_vbum2 +ldy {m2} +lda {c1},y +sta {z1} +lda {c1}+1,y +sta {z1}+1 +//FRAGMENT vbum1=vbum2_ror_5 +lda {m2} +lsr +lsr +lsr +lsr +lsr +sta {m1} +//FRAGMENT vwum1=vwum2_plus_vbum3 +lda {m3} +clc +adc {m2} +sta {m1} +lda #0 +adc {m2}+1 +sta {m1}+1 +//FRAGMENT pbuz1=pbuz2_plus_vwuc1 +lda {z2} +clc +adc #<{c1} +sta {z1} +lda {z2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vbum1_eq_vbum2_then_la1 +lda {m1} +cmp {m2} +beq {la1} +//FRAGMENT pbuc1_derefidx_vbum1=pbuc2_derefidx_vbum2 +ldy {m2} +lda {c2},y +ldy {m1} +sta {c1},y +//FRAGMENT pwuc1_derefidx_vbum1=pwuc2_derefidx_vbum2 +ldx {m1} +ldy {m2} +lda {c2},y +sta {c1},x +lda {c2}+1,y +sta {c1}+1,x +//FRAGMENT 0_neq_pwuc1_derefidx_vbum1_then_la1 +ldy {m1} +lda {c1}+1,y +ora {c1},y +bne {la1} +//FRAGMENT vwum1=vwuc1_plus_vwum2 +lda {m2} +clc +adc #<{c1} +sta {m1} +lda {m2}+1 +adc #>{c1} +sta {m1}+1 +//FRAGMENT vwum1=vwum2_plus_1 +clc +lda {m2} +adc #1 +sta {m1} +lda {m2}+1 +adc #0 +sta {m1}+1 +//FRAGMENT _deref_pbuc1=_deref_pbuc1_bor_vbum1 +lda {c1} +ora {m1} +sta {c1} +//FRAGMENT vwum1=pbuc1_derefidx_vbum2 +ldy {m2} +lda {c1},y +sta {m1} +lda #0 +sta {m1}+1 +//FRAGMENT vbum1=pbuc1_derefidx_vbum2_minus_1 +ldy {m2} +ldx {c1},y +dex +stx {m1} +//FRAGMENT pwuc1_derefidx_vbum1_neq_vwuz2_then_la1 +ldy {m1} +lda {z2}+1 +cmp {c1}+1,y +bne {la1} +lda {z2} +cmp {c1},y +bne {la1} +//FRAGMENT vdum1=vdum2_minus_1 +sec +lda {m2} +sbc #1 +sta {m1} +lda {m2}+1 +sbc #0 +sta {m1}+1 +lda {m2}+2 +sbc #0 +sta {m1}+2 +lda {m2}+3 +sbc #0 +sta {m1}+3 +//FRAGMENT vbum1=pbuc1_derefidx_vbum1 +ldy {m1} +lda {c1},y +sta {m1} +//FRAGMENT vwum1_gt_vwum2_then_la1 +lda {m2}+1 +cmp {m1}+1 +bcc {la1} +bne !+ +lda {m2} +cmp {m1} +bcc {la1} +!: +//FRAGMENT pwuc1_derefidx_vbum1_neq_vwuc2_then_la1 +ldy {m1} +lda {c1}+1,y +cmp #>{c2} +bne {la1} +lda {c1},y +cmp #<{c2} +bne {la1} +//FRAGMENT pwuc1_derefidx_vbum1=vwuc2 +ldy {m1} +lda #<{c2} +sta {c1},y +lda #>{c2} +sta {c1}+1,y +//FRAGMENT _deref_pwuc1=_deref_pwuc1_plus_vwum1 +clc +lda {c1} +adc {m1} +sta {c1} +lda {c1}+1 +adc {m1}+1 +sta {c1}+1 +//FRAGMENT _deref_pwuc1=_deref_pwuc1_minus_vwum1 +lda {c1} +sec +sbc {m1} +sta {c1} +lda {c1}+1 +sbc {m1}+1 +sta {c1}+1 +//FRAGMENT vwum1=pbuc1_derefidx_vbum2_word_pbuc2_derefidx_vbum2 +ldy {m2} +lda {c1},y +sta {m1}+1 +lda {c2},y +sta {m1} +//FRAGMENT vbum1=vbuz2_bor_vbuc1 +lda #{c1} +ora {z2} +sta {m1} +//FRAGMENT vwum1=vwuz2_band_vwuc1 +lda {z2} +and #<{c1} +sta {m1} +lda {z2}+1 +and #>{c1} +sta {m1}+1 +//FRAGMENT pbuz1=pbum2 +lda {m2} +sta {z1} +lda {m2}+1 +sta {z1}+1 +//FRAGMENT vbuz1=_byte0_pbuz2 +lda {z2} +sta {z1} +//FRAGMENT vbum1=_byte0_pbuz2 +lda {z2} +sta {m1} +//FRAGMENT vbuz1=_neg_vbum2 +lda {m2} +eor #$ff +clc +adc #$01 +sta {z1} +//FRAGMENT vwum1=_word_vbuz2 +lda {z2} +sta {m1} +lda #0 +sta {m1}+1 +//FRAGMENT vwuz1_gt_vwum2_then_la1 +lda {m2}+1 +cmp {z1}+1 +bcc {la1} +bne !+ +lda {m2} +cmp {z1} +bcc {la1} +!: +//FRAGMENT vwuz1=vwuz1_minus_vbuz2 +sec +lda {z1} +sbc {z2} +sta {z1} +bcs !+ +dec {z1}+1 +!: +//FRAGMENT vwuz1=vwuz1_minus_vwuc1 +lda {z1} +sec +sbc #<{c1} +sta {z1} +lda {z1}+1 +sbc #>{c1} +sta {z1}+1 +//FRAGMENT pwuc1_derefidx_vbum1_eq_vwuc2_then_la1 +ldy {m1} +lda {c1},y +cmp #<{c2} +bne !+ +lda {c1}+1,y +cmp #>{c2} +beq {la1} +!: +//FRAGMENT vwum1=vwum2_minus_vwuc1 +sec +lda {m2} +sbc #<{c1} +sta {m1} +lda {m2}+1 +sbc #>{c1} +sta {m1}+1 +//FRAGMENT pbuc1_derefidx_vbum1=vbuz2 +lda {z2} +ldy {m1} +sta {c1},y +//FRAGMENT vbum1=_neg_vbum1 +lda {m1} +eor #$ff +clc +adc #$01 +sta {m1} +//FRAGMENT vbuz1=vbuz1_ror_1 +lsr {z1} +//FRAGMENT vwuz1=vwuz1_rol_1 +asl {z1} +rol {z1}+1 +//FRAGMENT vbum1=vbuz2_plus_1 +lda {z2} +inc +sta {m1} +//FRAGMENT vbum1=vbuz2_plus_2 +lda {z2} +clc +adc #2 +sta {m1} +//FRAGMENT vbuz1=_byte_vwum2 +lda {m2} +sta {z1} +//FRAGMENT vwsm1=vwsz2 +lda {z2} +sta {m1} +lda {z2}+1 +sta {m1}+1 +//FRAGMENT vbuz1=_byte_vwsm2 +lda {m2} +sta {z1} +//FRAGMENT vbum1=pbuc1_derefidx_vbuz2_band_vbuc2 +lda #{c2} +ldy {z2} +and {c1},y +sta {m1} +//FRAGMENT vbum1=vbuz2_rol_2 +lda {z2} +asl +asl +sta {m1} +//FRAGMENT pbuc1_derefidx_(pbuc2_derefidx_vbum1)=vbuc3 +lda #{c3} +ldy {m1} +ldx {c2},y +sta {c1},x +//FRAGMENT pbuc1_derefidx_vbum1=vwum2 +ldy {m1} +lda {m2} +sta {c1},y +//FRAGMENT _deref_pbuz1=_inc__deref_pbuz2 +ldy #0 +lda ({z2}),y +inc +ldy #0 +sta ({z1}),y +//FRAGMENT vwum1=vwuz2_band_vbuc1 +lda #{c1} +and {z2} +sta {m1} +lda #0 +sta {m1}+1 +//FRAGMENT vwum1=_word0_vdum2 +lda {m2} +sta {m1} +lda {m2}+1 +sta {m1}+1 +//FRAGMENT vwum1=vbum2_word_pbuc1_derefidx_vbum3 +lda {m2} +ldy {m3} +sta {m1}+1 +lda {c1},y +sta {m1} +//FRAGMENT _deref_pwuc1=_dec__deref_pwuc1 +lda {c1} +bne !+ +dec {c1}+1 +!: +dec {c1} +//FRAGMENT vbom1=vbom2 +lda {m2} +sta {m1} +//FRAGMENT vwum1_eq_vwum2_then_la1 +lda {m1} +cmp {m2} +bne !+ +lda {m1}+1 +cmp {m2}+1 +beq {la1} +!: +//FRAGMENT vwsm1=vwsz2_rol_2 +lda {z2} +asl +sta {m1} +lda {z2}+1 +rol +sta {m1}+1 +asl {m1} +rol {m1}+1 +//FRAGMENT vwsm1=vwsm2_plus_vwsz3 +lda {m2} +clc +adc {z3} +sta {m1} +lda {m2}+1 +adc {z3}+1 +sta {m1}+1 +//FRAGMENT vwsm1=vwsm2_plus_pbuz3_derefidx_vbuz4 +ldy {z4} +lda {m2} +clc +adc ({z3}),y +sta {m1} +bcc !+ +inc {m2}+1 +!: +//FRAGMENT vwsz1=vwsm2_minus_vbuc1 +lda {m2} +sec +sbc #{c1} +sta {z1} +lda {m2}+1 +sbc #0 +sta {z1}+1 +//FRAGMENT _deref_pssc1=_memset_vbuc2 +ldy #{c2} +lda #0 +!: +dey +sta {c1},y +bne !- +//FRAGMENT vbum1=pbuc1_derefidx_vbum2_plus__deref_pbuc2 +lda {c2} +ldy {m2} +clc +adc {c1},y +sta {m1} +//FRAGMENT vbum1_lt_pbuc1_derefidx_vbum2_then_la1 +lda {m1} +ldy {m2} +cmp {c1},y +bcc {la1} +//FRAGMENT 0_neq_vwsm1_then_la1 +lda {m1}+1 +ora {m1} +bne {la1} +//FRAGMENT _deref_pwuz1=vwum2 +ldy #0 +lda {m2} +sta ({z1}),y +iny +lda {m2}+1 +sta ({z1}),y +//FRAGMENT _deref_pbuc1_lt_vbuc2_then_la1 +lda {c1} +cmp #{c2} +bcc {la1} +//FRAGMENT vwum1=vwum2_minus_vwum3 +lda {m2} +sec +sbc {m3} +sta {m1} +lda {m2}+1 +sbc {m3}+1 +sta {m1}+1 +//FRAGMENT pbuc1_derefidx_vbum1=_deref_pbuc2 +lda {c2} +ldy {m1} +sta {c1},y +//FRAGMENT pwuc1_derefidx_vbum1=_deref_pwuc2 +ldy {m1} +lda {c2} +sta {c1},y +lda {c2}+1 +sta {c1}+1,y +//FRAGMENT vbum1=_deref_pbuc1_minus__deref_pbuc2 +lda {c1} +sec +sbc {c2} +sta {m1} +//FRAGMENT pwuz1_derefidx_vbuc1_lt_vwum2_then_la1 +ldy #{c1} +iny +lda ({z1}),y +cmp {m2}+1 +bcc {la1} +bne !+ +dey +lda ({z1}),y +cmp {m2} +bcc {la1} +!: +//FRAGMENT pwuz1_derefidx_vbuc1=_inc_pwuz1_derefidx_vbuc1 +ldy #{c1} +lda ({z1}),y +clc +adc #1 +sta ({z1}),y +bne !+ +iny +lda ({z1}),y +adc #0 +sta ({z1}),y +!: +//FRAGMENT vwum1_le_vwum2_then_la1 +lda {m1}+1 +cmp {m2}+1 +bne !+ +lda {m1} +cmp {m2} +beq {la1} +!: +bcc {la1} +//FRAGMENT pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc2 +ldy #{c2} +lda ({z1}),y +ldy #{c1} +sta ({z1}),y +ldy #{c2}+1 +lda ({z1}),y +ldy #{c1}+1 +sta ({z1}),y +//FRAGMENT vdum1=_dword_pwuz2_derefidx_vbuc1 +ldy #{c1} +lda ({z2}),y +sta {m1} +iny +lda ({z2}),y +sta {m1}+1 +lda #0 +sta {m1}+2 +sta {m1}+3 +//FRAGMENT vbom1=vbum1_neq_vbuc1 +lda {m1} +eor #{c1} +beq !+ +lda #1 +!: +sta {m1} +//FRAGMENT vwum1=vwum1_bor_vwum2 +lda {m1} +ora {m2} +sta {m1} +lda {m1}+1 +ora {m2}+1 +sta {m1}+1 +//FRAGMENT vdum1=vdum1_ror_3 +lsr {m1}+3 +ror {m1}+2 +ror {m1}+1 +ror {m1} +lsr {m1}+3 +ror {m1}+2 +ror {m1}+1 +ror {m1} +lsr {m1}+3 +ror {m1}+2 +ror {m1}+1 +ror {m1} +//FRAGMENT vbum1=vbum1_rol_5 +lda {m1} +asl +asl +asl +asl +asl +sta {m1} +//FRAGMENT vwum1=vwum1_plus_vbuc1 +lda #{c1} +clc +adc {m1} +sta {m1} +bcc !+ +inc {m1}+1 +!: +//FRAGMENT vdum1=vdum1_minus_1 +sec +lda {m1} +sbc #1 +sta {m1} +lda {m1}+1 +sbc #0 +sta {m1}+1 +lda {m1}+2 +sbc #0 +sta {m1}+2 +lda {m1}+3 +sbc #0 +sta {m1}+3 +//FRAGMENT vbum1=vbum1_ror_2 +lda {m1} +lsr +lsr +sta {m1} +//FRAGMENT vwum1=vwum1_minus_vwuc1 +lda {m1} +sec +sbc #<{c1} +sta {m1} +lda {m1}+1 +sbc #>{c1} +sta {m1}+1 +//FRAGMENT vbum1=pbuc1_derefidx_vbum1_band_vbuc2 +lda #{c2} +ldy {m1} +and {c1},y +sta {m1} +//FRAGMENT pssz1=pssz1_plus_vwum2 +clc +lda {z1} +adc {m2} +sta {z1} +lda {z1}+1 +adc {m2}+1 +sta {z1}+1 +//FRAGMENT qssz1=qssz1_plus_1 +clc +lda {z1} +adc #1 +sta {z1} +lda {z1}+1 +adc #0 +sta {z1}+1 +//FRAGMENT pssz1=_deref_qssz1 +ldy #0 +lda ({z1}),y +pha +iny +lda ({z1}),y +sta {z1}+1 +pla +sta {z1} +//FRAGMENT vdum1=vdum1_rol_8 +lda {m1}+2 +sta {m1}+3 +lda {m1}+1 +sta {m1}+2 +lda {m1} +sta {m1}+1 +lda #0 +sta {m1} +//FRAGMENT vwsm1=vwsm1_ror_2 +lda {m1}+1 +cmp #$80 +ror {m1}+1 +ror {m1} +lda {m1}+1 +cmp #$80 +ror {m1}+1 +ror {m1} +//FRAGMENT vbum1=vbum1_rol_2 +lda {m1} +asl +asl +sta {m1} +//FRAGMENT vwum1=vwum1_minus_pwuc1_derefidx_vbum2 +ldy {m2} +lda {m1} +sec +sbc {c1},y +sta {m1} +lda {m1}+1 +sbc {c1}+1,y +sta {m1}+1 +//FRAGMENT pwsz1=pwsz1_plus_vbuc1 +lda #{c1} +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 +!: +//FRAGMENT pbsz1=pbsz1_plus_vwum2 +clc +lda {z1} +adc {m2} +sta {z1} +lda {z1}+1 +adc {m2}+1 +sta {z1}+1 +//FRAGMENT qssz1=qssz1_plus_vwum2 +lda {z1} +clc +adc {m2} +sta {z1} +lda {z1}+1 +adc {m2}+1 +sta {z1}+1 +//FRAGMENT pwsz1=pwsz1_plus_vwum2 +clc +lda {z1} +adc {m2} +sta {z1} +lda {z1}+1 +adc {m2}+1 +sta {z1}+1 +//FRAGMENT vwum1=vwum1_rol_vbuc1 +ldy #{c1} +cpy #0 +beq !e+ +!: +asl {m1} +rol {m1}+1 +dey +bne !- +!e: +//FRAGMENT vwum1=vwum1_ror_2 +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +//FRAGMENT vwsm1=vwsm1_rol_vbuc1 +ldy #{c1} +beq !e+ +!: +asl {m1} +rol {m1}+1 +dey +bne !- +!e: +//FRAGMENT vwum1=vwum1_ror_5 +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +//FRAGMENT vbum1=vbum1_ror_5 +lda {m1} +lsr +lsr +lsr +lsr +lsr +sta {m1} +//FRAGMENT vwum1=vwum1_rol_5 +asl {m1} +rol {m1}+1 +asl {m1} +rol {m1}+1 +asl {m1} +rol {m1}+1 +asl {m1} +rol {m1}+1 +asl {m1} +rol {m1}+1 +//FRAGMENT pssz1=qssz1_derefidx_vbuc1 +ldy #{c1} +lda ({z1}),y +pha +iny +lda ({z1}),y +sta {z1}+1 +pla +sta {z1} +//FRAGMENT vwum1=vwum1_rol_3 +asl {m1} +rol {m1}+1 +asl {m1} +rol {m1}+1 +asl {m1} +rol {m1}+1 +//FRAGMENT vwum1=vwum1_ror_3 +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +//FRAGMENT vwsm1=vwsm1_plus_vwsz2 +clc +lda {m1} +adc {z2} +sta {m1} +lda {m1}+1 +adc {z2}+1 +sta {m1}+1 +//FRAGMENT vwsm1=vwsm1_plus_pbuz2_derefidx_vbuz3 +ldy {z3} +lda {m1} +clc +adc ({z2}),y +sta {m1} +bcc !+ +inc {m1}+1 +!: +//FRAGMENT vwum1=vwum1_rol_1 +asl {m1} +rol {m1}+1 +//FRAGMENT vbum1=pbuz2_derefidx_vbum1 +ldy {m1} +lda ({z2}),y +sta {m1} +//FRAGMENT vbum1=pbuc1_derefidx_vbum2_plus_vbum1 +lda {m1} +ldy {m2} +clc +adc {c1},y +sta {m1} +//FRAGMENT vwum1=vwuc1_plus_vwum1 +lda {m1} +clc +adc #<{c1} +sta {m1} +lda {m1}+1 +adc #>{c1} +sta {m1}+1 +//FRAGMENT vbum1=vbum1_minus_vbuc1 +lda {m1} +sec +sbc #{c1} +sta {m1} +//FRAGMENT vwum1=vwum1_plus_vbum2 +lda {m2} +clc +adc {m1} +sta {m1} +bcc !+ +inc {m1}+1 +!: +//FRAGMENT vwum1=vwum1_plus_1 +inc {m1} +bne !+ +inc {m1}+1 +!: +//FRAGMENT vwum1=_deref_pwuc1_minus_vbuc2 +sec +lda {c1} +sbc #{c2} +sta {m1} +lda {c1}+1 +sbc #0 +sta {m1}+1 +//FRAGMENT vwum1=vwum2_ror_4 +lda {m2}+1 +lsr +sta {m1}+1 +lda {m2} +ror +sta {m1} +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +//FRAGMENT vwum1=vwum2_band_vbuc1 +lda #{c1} +and {m2} +sta {m1} +lda #0 +sta {m1}+1 +//FRAGMENT _deref_pbuc1=vwum1 +lda {m1} +sta {c1} +//FRAGMENT vwsm1_le_0_then_la1 +lda {m1}+1 +bmi {la1} +bne !+ +lda {m1} +beq {la1} +!: +//FRAGMENT vbum1=vwuz2 +lda {z2} +sta {m1} +//FRAGMENT vbum1_ge_vbuc1_then_la1 +lda {m1} +cmp #{c1} +bcs {la1} +//FRAGMENT pbuc1_derefidx_vbum1_le_pbuc2_derefidx_vbum1_then_la1 +ldy {m1} +lda {c2},y +cmp {c1},y +bcs {la1} +//FRAGMENT pbuc1_derefidx_vbum1_ge_pbuc2_derefidx_vbum1_then_la1 +ldy {m1} +lda {c1},y +cmp {c2},y +bcs {la1} +//FRAGMENT vbuz1=pbuc1_derefidx_vbum2 +ldy {m2} +lda {c1},y +sta {z1} +//FRAGMENT vwum1=vwum2_plus_pbuc1_derefidx_vbum3 +ldy {m3} +lda {c1},y +clc +adc {m2} +sta {m1} +lda #0 +adc {m2}+1 +sta {m1}+1 +//FRAGMENT vbum1=vbum2_rol_7 +lda {m2} +asl +asl +asl +asl +asl +asl +asl +sta {m1} +//FRAGMENT vbum1=vbum2_ror_1 +lda {m2} +lsr +sta {m1} +//FRAGMENT vbum1=vbum2_ror_3 +lda {m2} +lsr +lsr +lsr +sta {m1} +//FRAGMENT vwsm1=_sword_vbum2 +lda {m2} +sta {m1} +lda #0 +sta {m1}+1 +//FRAGMENT vwsm1=vwsm2_rol_6 +lda {m2} +asl +sta {m1} +lda {m2}+1 +rol +sta {m1}+1 +asl {m1} +rol {m1}+1 +asl {m1} +rol {m1}+1 +asl {m1} +rol {m1}+1 +asl {m1} +rol {m1}+1 +asl {m1} +rol {m1}+1 +//FRAGMENT vwsm1=vwsm2_plus_vbsm3 +lda {m3} +sta $ff +clc +adc {m2} +sta {m1} +lda $ff +ora #$7f +bmi !+ +lda #0 +!: +adc {m2}+1 +sta {m1}+1 +//FRAGMENT vwsm1=_sword_vbsm2 +lda {m2} +sta {m1} +// sign-extend the byte +ora #$7f +bmi !+ +lda #0 +!: +sta {m1}+1 +//FRAGMENT vwsm1=vwsm2_minus_vwsc1 +lda {m2} +sec +sbc #<{c1} +sta {m1} +lda {m2}+1 +sbc #>{c1} +sta {m1}+1 +//FRAGMENT vwum1=_deref_pwuc1_band_vbuc2 +lda #{c2} +and {c1} +sta {m1} +lda #0 +sta {m1}+1 +//FRAGMENT vwsm1=vwsm2_minus_vwsm3 +lda {m2} +sec +sbc {m3} +sta {m1} +lda {m2}+1 +sbc {m3}+1 +sta {m1}+1 +//FRAGMENT vbsm1=vbsm2 +lda {m2} +sta {m1} +//FRAGMENT vwum1=vwum2_rol_vbum3 +lda {m2} +sta {m1} +lda {m2}+1 +sta {m1}+1 +ldy {m3} +beq !e+ +!: +asl {m1} +rol {m1}+1 +dey +bne !- +!e: +//FRAGMENT vbum1=vbum2_rol_3 +lda {m2} +asl +asl +asl +sta {m1} +//FRAGMENT vwum1=_word_pbuc1_derefidx_vbum2 +ldy {m2} +lda {c1},y +sta {m1} +lda #0 +sta {m1}+1 +//FRAGMENT pwuz1=pwuz2_plus_vbuc1 +lda #{c1} +clc +adc {z2} +sta {z1} +lda #0 +adc {z2}+1 +sta {z1}+1 +//FRAGMENT vwsm1=_inc_vwsm1 +inc {m1} +bne !+ +inc {m1}+1 +!: +//FRAGMENT pwsc1_derefidx_vbum1=vwsm2 +ldy {m1} +lda {m2} +sta {c1},y +lda {m2}+1 +sta {c1}+1,y +//FRAGMENT vwum1=_word_pbsc1_derefidx_vbum2 +ldy {m2} +lda {c1},y +sta {m1} +// sign-extend the byte +ora #$7f +bmi !+ +lda #0 +!: +sta {m1}+1 +//FRAGMENT vwum1=pwuc1_derefidx_vbum2_plus_vwum3 +ldy {m2} +clc +lda {m3} +adc {c1},y +sta {m1} +lda {m3}+1 +adc {c1}+1,y +sta {m1}+1 +//FRAGMENT pbuc1_derefidx_vbum1=pbuc1_derefidx_vbum1_plus_vbum2 +lda {m2} +ldy {m1} +clc +adc {c1},y +sta {c1},y +//FRAGMENT pbsc1_derefidx_vbum1=pbsc1_derefidx_vbum1_plus_pbsc2_derefidx_vbum2 +ldy {m2} +lda {c2},y +ldy {m1} +clc +adc {c1},y +sta {c1},y +//FRAGMENT pbsc1_derefidx_vbum1_gt_0_then_la1 +ldy {m1} +lda {c1},y +cmp #0 +beq !+ +bpl {la1} +!: +//FRAGMENT pbsc1_derefidx_vbum1=vbsm2 +lda {m2} +ldy {m1} +sta {c1},y +//FRAGMENT pwuc1_derefidx_vbum1=pwuc1_derefidx_vbum1_minus_vwum2 +ldy {m1} +lda {c1},y +sec +sbc {m2} +sta {c1},y +lda {c1}+1,y +sbc {m2}+1 +sta {c1}+1,y +//FRAGMENT pwuc1_derefidx_vbum1=pwuc1_derefidx_vbum1_plus_vwum2 +ldy {m1} +lda {c1},y +clc +adc {m2} +sta {c1},y +lda {c1}+1,y +adc {m2}+1 +sta {c1}+1,y +//FRAGMENT vbum1_lt__deref_pbuz2_then_la1 +ldy #0 +lda ({z2}),y +cmp {m1} +beq !+ +bcs {la1} +!: +//FRAGMENT vbum1_le__deref_pbuz2_then_la1 +ldy #0 +lda ({z2}),y +cmp {m1} +bcs {la1} +//FRAGMENT _deref_qssc1=pssz1 +lda {z1} +sta {c1} +lda {z1}+1 +sta {c1}+1 +//FRAGMENT pssz1=qssz2_derefidx_vbum3 +ldy {m3} +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +//FRAGMENT vbum1=pbuc1_derefidx_vbum2_ror_5 +ldy {m2} +lda {c1},y +lsr +lsr +lsr +lsr +lsr +sta {m1} +//FRAGMENT pwuz1=pwuz2_plus_vwuc1 +lda {z2} +clc +adc #<{c1} +sta {z1} +lda {z2}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT pwuz1_derefidx_vbuc1=_deref_pbuc2 +lda {c2} +ldy #{c1} +sta ({z1}),y +lda #0 +iny +sta ({z1}),y +//FRAGMENT vbum1_lt_pbuz2_derefidx_vbuc1_then_la1 +ldy #{c1} +lda ({z2}),y + +cmp {m1} +beq !+ +bcs {la1} +!: +//FRAGMENT pwuz1_derefidx_vbum2=vwum3 +ldy {m2} +lda {m3} +sta ({z1}),y +iny +lda {m3}+1 +sta ({z1}),y +//FRAGMENT qssz1_derefidx_vbum2=pssz3 +ldy {m2} +lda {z3} +sta ({z1}),y +iny +lda {z3}+1 +sta ({z1}),y +//FRAGMENT vwum1=_deref_pbuc1 +lda {c1} +sta {m1} +lda #0 +sta {m1}+1 +//FRAGMENT pbuz1_derefidx_vbum2=vwum3 +lda {m3} +ldy {m2} +sta ({z1}),y +//FRAGMENT vdum1=vbuc1 +lda #{c1} +sta {m1} +lda #0 +sta {m1}+1 +sta {m1}+2 +sta {m1}+3 +//FRAGMENT pbuz1_derefidx_vbum2=vbum3 +lda {m3} +ldy {m2} +sta ({z1}),y +//FRAGMENT vwum1=vwum1_ror_7 +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +//FRAGMENT vwuz1_lt_vwuc1_then_la1 +lda {z1}+1 +cmp #>{c1} +bcc {la1} +bne !+ +lda {z1} +cmp #<{c1} +bcc {la1} +!: +//FRAGMENT vwum1=vwum1_plus_pbuc1_derefidx_vbum2 +ldy {m2} +lda {c1},y +clc +adc {m1} +sta {m1} +bcc !+ +inc {m1}+1 +!: +//FRAGMENT vbum1=vbum1_rol_7 +lda {m1} +asl +asl +asl +asl +asl +asl +asl +sta {m1} +//FRAGMENT pwuz1=pwuz1_plus_vbuc1 +lda #{c1} +clc +adc {z1} +sta {z1} +bcc !+ +inc {z1}+1 +!: +//FRAGMENT vwum1=vwum1_ror_4 +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +//FRAGMENT vwum1=vwum1_band_vbuc1 +lda #{c1} +and {m1} +sta {m1} +lda #0 +sta {m1}+1 +//FRAGMENT vbum1=vbum1_ror_1 +lsr {m1} +//FRAGMENT vwsm1=vwsm1_rol_6 +lda {m1}+1 +sta $ff +lda {m1} +sta {m1}+1 +lda #0 +sta {m1} +lsr $ff +ror {m1}+1 +ror {m1} +lsr $ff +ror {m1}+1 +ror {m1} +//FRAGMENT vwsm1=vwsm1_minus_vwsc1 +lda {m1} +sec +sbc #<{c1} +sta {m1} +lda {m1}+1 +sbc #>{c1} +sta {m1}+1 +//FRAGMENT vwsm1=vwsm2_minus_vwsm1 +lda {m2} +sec +sbc {m1} +sta {m1} +lda {m2}+1 +sbc {m1}+1 +sta {m1}+1 +//FRAGMENT vwum1=vwum1_rol_vbum2 +ldy {m2} +beq !e+ +!: +asl {m1} +rol {m1}+1 +dey +bne !- +!e: +//FRAGMENT vwum1=pwuc1_derefidx_vbum2_plus_vwum1 +ldy {m2} +clc +lda {m1} +adc {c1},y +sta {m1} +lda {m1}+1 +adc {c1}+1,y +sta {m1}+1 +//FRAGMENT vbum1=pbuc1_derefidx_vbum1_ror_5 +ldy {m1} +lda {c1},y +lsr +lsr +lsr +lsr +lsr +sta {m1} +//FRAGMENT pwuz1=pwuz1_plus_vwuc1 +lda {z1} +clc +adc #<{c1} +sta {z1} +lda {z1}+1 +adc #>{c1} +sta {z1}+1 +//FRAGMENT vwsm1=vwsm1_plus_vbsm2 +lda {m2} +sta $ff +clc +adc {m1} +sta {m1} +lda $ff +ora #$7f +bmi !+ +lda #0 +!: +adc {m1}+1 +sta {m1}+1 diff --git a/src/main/fragment/mos6502-common/_stackidxbool_vbuc1=vboaa.asm b/src/main/fragment/mos6502-common/_stackidxbool_vbuc1=vboaa.asm new file mode 100644 index 000000000..a950d1216 --- /dev/null +++ b/src/main/fragment/mos6502-common/_stackidxbool_vbuc1=vboaa.asm @@ -0,0 +1,2 @@ +tsx +sta STACK_BASE+{c1},x \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/_stackidxbool_vbuc1=vboyy.asm b/src/main/fragment/mos6502-common/_stackidxbool_vbuc1=vboyy.asm new file mode 100644 index 000000000..f04b756b0 --- /dev/null +++ b/src/main/fragment/mos6502-common/_stackidxbool_vbuc1=vboyy.asm @@ -0,0 +1,3 @@ +tya +tsx +sta STACK_BASE+{c1},x \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/_stackpushdword_=_dword_pwuc1_derefidx_vbum1.asm b/src/main/fragment/mos6502-common/_stackpushdword_=_dword_pwuc1_derefidx_vbum1.asm new file mode 100644 index 000000000..e2911a52c --- /dev/null +++ b/src/main/fragment/mos6502-common/_stackpushdword_=_dword_pwuc1_derefidx_vbum1.asm @@ -0,0 +1,9 @@ +ldy {m1} +lda {c1}+3,y +pha +lda {c1}+2,y +pha +lda {c1}+1,y +pha +lda {c1},y +pha diff --git a/src/main/fragment/mos6502-common/_stackpushdword_=vwum1.asm b/src/main/fragment/mos6502-common/_stackpushdword_=vwum1.asm new file mode 100644 index 000000000..4cbb8912f --- /dev/null +++ b/src/main/fragment/mos6502-common/_stackpushdword_=vwum1.asm @@ -0,0 +1,8 @@ +lda #0 +pha +lda #0 +pha +lda {m1}+1 +pha +lda {m1} +pha 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 index 687d22213..6a1d4b077 100644 --- a/src/main/fragment/mos6502-common/isr_rom_sys_cx16_exit.asm +++ b/src/main/fragment/mos6502-common/isr_rom_sys_cx16_exit.asm @@ -1 +1 @@ -jmp $e034 \ No newline at end of file +jmp (isr_vsync) diff --git a/src/main/fragment/mos6502-common/pbuc1_eq__deref_qbuc2_then_la1.asm b/src/main/fragment/mos6502-common/pbuc1_eq__deref_qbuc2_then_la1.asm new file mode 100644 index 000000000..70fbc2407 --- /dev/null +++ b/src/main/fragment/mos6502-common/pbuc1_eq__deref_qbuc2_then_la1.asm @@ -0,0 +1,7 @@ +lda #<{c1} +cmp {c2} +bne !+ +lda #>{c1} +cmp {c2}+1 +beq {la1} +!: \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/pbuc1_eq_pbuc2_then_la1.asm b/src/main/fragment/mos6502-common/pbuc1_eq_pbuc2_then_la1.asm new file mode 100644 index 000000000..6007893cf --- /dev/null +++ b/src/main/fragment/mos6502-common/pbuc1_eq_pbuc2_then_la1.asm @@ -0,0 +1,7 @@ +lda #<{c1} +cmp #<{c2} +bne !+ +lda #>{c1} +cmp #>{c2} +beq {la1} +!: \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/pbuc1_eq_qbuz1_derefidx_vbuyy_then_la1.asm b/src/main/fragment/mos6502-common/pbuc1_eq_qbuz1_derefidx_vbuyy_then_la1.asm new file mode 100644 index 000000000..8d88c09d9 --- /dev/null +++ b/src/main/fragment/mos6502-common/pbuc1_eq_qbuz1_derefidx_vbuyy_then_la1.asm @@ -0,0 +1,8 @@ +lda ({z1}),y +cmp #<{c1} +bne !+ +iny +lda ({z1}),y +cmp #>{c1} +beq {la1} +!: diff --git a/src/main/fragment/mos6502-common/pbuc1_neq__deref_qbuc2_then_la1.asm b/src/main/fragment/mos6502-common/pbuc1_neq__deref_qbuc2_then_la1.asm new file mode 100644 index 000000000..6365dc981 --- /dev/null +++ b/src/main/fragment/mos6502-common/pbuc1_neq__deref_qbuc2_then_la1.asm @@ -0,0 +1,6 @@ +lda #<{c1} +cmp {c2} +bne {la1} +lda #>{c1} +cmp {c2}+1 +bne {la1} diff --git a/src/main/fragment/mos6502-common/pbuz1_derefidx_vbuyy=pbuz1_derefidx_vbuyy_minus_1.asm b/src/main/fragment/mos6502-common/pbuz1_derefidx_vbuyy=pbuz1_derefidx_vbuyy_minus_1.asm new file mode 100644 index 000000000..9d0fd27b6 --- /dev/null +++ b/src/main/fragment/mos6502-common/pbuz1_derefidx_vbuyy=pbuz1_derefidx_vbuyy_minus_1.asm @@ -0,0 +1,4 @@ +lda ({z1}),y +sec +sbc #1 +sta ({z1}),y diff --git a/src/main/fragment/mos6502-common/pbuz1_neq__deref_qbuc1_then_la1.asm b/src/main/fragment/mos6502-common/pbuz1_neq__deref_qbuc1_then_la1.asm new file mode 100644 index 000000000..8814b3be9 --- /dev/null +++ b/src/main/fragment/mos6502-common/pbuz1_neq__deref_qbuc1_then_la1.asm @@ -0,0 +1,6 @@ +lda {z1} +cmp {c1} +bne {la1} +lda {z1}+1 +cmp {c1}+1 +bne {la1} diff --git a/src/main/fragment/mos6502-common/pduc1_derefidx_vbum1=vbuc2.asm b/src/main/fragment/mos6502-common/pduc1_derefidx_vbum1=vbuc2.asm new file mode 100644 index 000000000..cda983591 --- /dev/null +++ b/src/main/fragment/mos6502-common/pduc1_derefidx_vbum1=vbuc2.asm @@ -0,0 +1,7 @@ +ldy {m1} +lda #{c2} +sta {c1},y +lda #0 +sta {c1}+1,y +sta {c1}+2,y +sta {c1}+3,y diff --git a/src/main/fragment/mos6502-common/pduc1_derefidx_vbum1=vwuc2.asm b/src/main/fragment/mos6502-common/pduc1_derefidx_vbum1=vwuc2.asm new file mode 100644 index 000000000..cef1aca99 --- /dev/null +++ b/src/main/fragment/mos6502-common/pduc1_derefidx_vbum1=vwuc2.asm @@ -0,0 +1,8 @@ +ldy {m1} +lda #<{c2} +sta {c1},y +lda #>{c2} +sta {c1}+1,y +lda #0 +sta {c1}+2,y +sta {c1}+3,y diff --git a/src/main/fragment/mos6502-common/pduc1_derefidx_vbuyy=vduc2.asm b/src/main/fragment/mos6502-common/pduc1_derefidx_vbuyy=vduc2.asm new file mode 100644 index 000000000..f0d4437e3 --- /dev/null +++ b/src/main/fragment/mos6502-common/pduc1_derefidx_vbuyy=vduc2.asm @@ -0,0 +1,8 @@ +lda #<{c2} +sta {c1},y +lda #>{c2} +sta {c1}+1,y +lda #<{c2}>>$10 +sta {c1}+2,y +lda #>{c2}>>$10 +sta {c1}+3,y diff --git a/src/main/fragment/mos6502-common/pssc1_derefidx_vbuxx=_deref_qssz1.asm b/src/main/fragment/mos6502-common/pssc1_derefidx_vbuxx=_deref_qssz1.asm new file mode 100644 index 000000000..23177a44b --- /dev/null +++ b/src/main/fragment/mos6502-common/pssc1_derefidx_vbuxx=_deref_qssz1.asm @@ -0,0 +1,6 @@ +ldy #$00 +lda ({z1}),y +sta {c1},x +iny +lda ({z1}),y +sta {c1}+1,x \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/pssm1=_deref_qssm1.asm b/src/main/fragment/mos6502-common/pssm1=_deref_qssm1.asm new file mode 100644 index 000000000..aa0eebacf --- /dev/null +++ b/src/main/fragment/mos6502-common/pssm1=_deref_qssm1.asm @@ -0,0 +1,10 @@ +ldy #0 +lda {m1} +sta $fe +lda {m1}+1 +sta $ff +lda ($fe),y +sta {m1} +iny +lda ($fe),y +sta {m1}+1 \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/pssz1=qssz2_derefidx_vbuc1_plus_vbuc2.asm b/src/main/fragment/mos6502-common/pssz1=qssz2_derefidx_vbuc1_plus_vbuc2.asm new file mode 100644 index 000000000..029ec6b6f --- /dev/null +++ b/src/main/fragment/mos6502-common/pssz1=qssz2_derefidx_vbuc1_plus_vbuc2.asm @@ -0,0 +1,11 @@ +lda #{c1} +tay +clc +lda ({z2}),y +adc #<{c2} +sta {z1} +iny +lda ({z2}),y +adc #>{c2} +sta {z1}+1 + diff --git a/src/main/fragment/mos6502-common/pvoz1_derefidx_vbuyy=_deref_pvoc1_memcpy_vbuc2.asm b/src/main/fragment/mos6502-common/pvoz1_derefidx_vbuyy=_deref_pvoc1_memcpy_vbuc2.asm new file mode 100644 index 000000000..6c9eb7457 --- /dev/null +++ b/src/main/fragment/mos6502-common/pvoz1_derefidx_vbuyy=_deref_pvoc1_memcpy_vbuc2.asm @@ -0,0 +1,8 @@ +ldx #0 +!: +lda {c1},x +sta ({z1}),y +iny +inx +cpx #{c2} +bne !- diff --git a/src/main/fragment/mos6502-common/pvoz1_derefidx_vbuyy=_deref_pvoz2_memcpy_vbuc2 temp.asm b/src/main/fragment/mos6502-common/pvoz1_derefidx_vbuyy=_deref_pvoz2_memcpy_vbuc2 temp.asm new file mode 100644 index 000000000..6c9eb7457 --- /dev/null +++ b/src/main/fragment/mos6502-common/pvoz1_derefidx_vbuyy=_deref_pvoz2_memcpy_vbuc2 temp.asm @@ -0,0 +1,8 @@ +ldx #0 +!: +lda {c1},x +sta ({z1}),y +iny +inx +cpx #{c2} +bne !- diff --git a/src/main/fragment/mos6502-common/pwsc1_derefidx_vbuxx=pwsc1_derefidx_vbuxx_plus_pbsc2_derefidx_vbuyy.asm b/src/main/fragment/mos6502-common/pwsc1_derefidx_vbuxx=pwsc1_derefidx_vbuxx_plus_pbsc2_derefidx_vbuyy.asm new file mode 100644 index 000000000..062933ddd --- /dev/null +++ b/src/main/fragment/mos6502-common/pwsc1_derefidx_vbuxx=pwsc1_derefidx_vbuxx_plus_pbsc2_derefidx_vbuyy.asm @@ -0,0 +1,13 @@ +lda {c2},y +sta $ff +clc +adc {c1},x +sta {c1},x +iny +lda $ff +ora #$7f +bmi !+ +lda #0 +!: +adc {c1}+1,x +sta {c1}+1,x \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/pwsc1_derefidx_vbuxx=pwsc1_derefidx_vbuxx_plus_vbsm1.asm b/src/main/fragment/mos6502-common/pwsc1_derefidx_vbuxx=pwsc1_derefidx_vbuxx_plus_vbsm1.asm new file mode 100644 index 000000000..94b959ef5 --- /dev/null +++ b/src/main/fragment/mos6502-common/pwsc1_derefidx_vbuxx=pwsc1_derefidx_vbuxx_plus_vbsm1.asm @@ -0,0 +1,7 @@ +lda {c1},x +clc +adc {m1} +sta {c1},x +bcc !+ +inc {c1}+1,x +!: \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/pwsc1_derefidx_vbuxx=pwsz1_derefidx_vbuc2.asm b/src/main/fragment/mos6502-common/pwsc1_derefidx_vbuxx=pwsz1_derefidx_vbuc2.asm new file mode 100644 index 000000000..f6825c847 --- /dev/null +++ b/src/main/fragment/mos6502-common/pwsc1_derefidx_vbuxx=pwsz1_derefidx_vbuc2.asm @@ -0,0 +1,6 @@ +ldy {c2} +lda ({z1}),y +sta {c1},x +iny +lda ({z1}),y +sta {c1}+1,x diff --git a/src/main/fragment/mos6502-common/pwsc1_derefidx_vbuyy=pwsc1_derefidx_vbuyy_plus_pbsc2_derefidx_vbuxx.asm b/src/main/fragment/mos6502-common/pwsc1_derefidx_vbuyy=pwsc1_derefidx_vbuyy_plus_pbsc2_derefidx_vbuxx.asm new file mode 100644 index 000000000..d60124417 --- /dev/null +++ b/src/main/fragment/mos6502-common/pwsc1_derefidx_vbuyy=pwsc1_derefidx_vbuyy_plus_pbsc2_derefidx_vbuxx.asm @@ -0,0 +1,13 @@ +lda {c2},x +sta $ff +clc +adc {c1},y +sta {c1},y +iny +lda $ff +ora #$7f +bmi !+ +lda #0 +!: +adc {c1}+1,y +sta {c1}+1,y \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/pwsc1_derefidx_vbuyy=pwsc1_derefidx_vbuyy_plus_vbsm1_temp.asm b/src/main/fragment/mos6502-common/pwsc1_derefidx_vbuyy=pwsc1_derefidx_vbuyy_plus_vbsm1_temp.asm new file mode 100644 index 000000000..372f9001a --- /dev/null +++ b/src/main/fragment/mos6502-common/pwsc1_derefidx_vbuyy=pwsc1_derefidx_vbuyy_plus_vbsm1_temp.asm @@ -0,0 +1,7 @@ +lda {c1},y +clc +adc {m1} +sta {c1},y +bcc !+ +inc {c1}+1,y +!: \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/pwsz1_derefidx_vbuyy=_deref_pwsc2.asm b/src/main/fragment/mos6502-common/pwsz1_derefidx_vbuyy=_deref_pwsc2.asm new file mode 100644 index 000000000..46ac5872f --- /dev/null +++ b/src/main/fragment/mos6502-common/pwsz1_derefidx_vbuyy=_deref_pwsc2.asm @@ -0,0 +1,5 @@ +lda {c2} +sta ({z1}),y +iny +lda {c2}+1 +sta ({z1}),y diff --git a/src/main/fragment/mos6502-common/pwsz1_derefidx_vbuyy=_sword_vbum2.asm b/src/main/fragment/mos6502-common/pwsz1_derefidx_vbuyy=_sword_vbum2.asm new file mode 100644 index 000000000..f8bae1751 --- /dev/null +++ b/src/main/fragment/mos6502-common/pwsz1_derefidx_vbuyy=_sword_vbum2.asm @@ -0,0 +1,8 @@ +lda {m2} +sta ({z1}),y +ora #$7F +bmi !+ +lda #$00 +!: +iny +sta ({z1}),y \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/pwsz1_derefidx_vbuyy=pwsz2_derefidx_vbuyy.asm b/src/main/fragment/mos6502-common/pwsz1_derefidx_vbuyy=pwsz2_derefidx_vbuyy.asm new file mode 100644 index 000000000..28e46930d --- /dev/null +++ b/src/main/fragment/mos6502-common/pwsz1_derefidx_vbuyy=pwsz2_derefidx_vbuyy.asm @@ -0,0 +1,5 @@ +sta ({z2}),y +sta ({z1}),y +iny +sta ({z2}),y +sta ({z1}),y diff --git a/src/main/fragment/mos6502-common/pwsz1_derefidx_vbuyy_gt_0_then_la1.asm b/src/main/fragment/mos6502-common/pwsz1_derefidx_vbuyy_gt_0_then_la1.asm new file mode 100644 index 000000000..e3e989ba7 --- /dev/null +++ b/src/main/fragment/mos6502-common/pwsz1_derefidx_vbuyy_gt_0_then_la1.asm @@ -0,0 +1,10 @@ +iny +lda ({z1}),y +bne !+ +dey +lda ({z1}),y +beq !e+ +lsr +!: +bpl {la1} +!e: diff --git a/src/main/fragment/mos6502-common/pwsz1_derefidx_vbuyy_le_vwsc1_then_la1.asm b/src/main/fragment/mos6502-common/pwsz1_derefidx_vbuyy_le_vwsc1_then_la1.asm new file mode 100644 index 000000000..d913af1c9 --- /dev/null +++ b/src/main/fragment/mos6502-common/pwsz1_derefidx_vbuyy_le_vwsc1_then_la1.asm @@ -0,0 +1,10 @@ +iny +lda ({z1}),y +cmp #>{c1} +bne !+ +dey +lda ({z1}),y +cmp #<{c1} +beq {la1} +!: +bcc {la1} \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/pwuc1_derefidx_vbum1=pwuc1_derefidx_vbum1_minus_vwum2.asm b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbum1=pwuc1_derefidx_vbum1_minus_vwum2.asm new file mode 100644 index 000000000..d7d89bb97 --- /dev/null +++ b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbum1=pwuc1_derefidx_vbum1_minus_vwum2.asm @@ -0,0 +1,8 @@ +ldy {m1} +lda {c1},y +sec +sbc {m2} +sta {c1},y +lda {c1}+1,y +sbc {m2}+1 +sta {c1}+1,y diff --git a/src/main/fragment/mos6502-common/pwuc1_derefidx_vbum1=pwuc1_derefidx_vbum1_plus_vwum2.asm b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbum1=pwuc1_derefidx_vbum1_plus_vwum2.asm new file mode 100644 index 000000000..495ea5a19 --- /dev/null +++ b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbum1=pwuc1_derefidx_vbum1_plus_vwum2.asm @@ -0,0 +1,8 @@ +ldy {m1} +lda {c1},y +clc +adc {m2} +sta {c1},y +lda {c1}+1,y +adc {m2}+1 +sta {c1}+1,y diff --git a/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_band_vwuc2.asm b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_band_vwuc2.asm new file mode 100644 index 000000000..557be9c13 --- /dev/null +++ b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_band_vwuc2.asm @@ -0,0 +1,6 @@ +lda {c1},x +and #<{c2} +sta {c1},x +lda {c1}+1,x +and #>{c2} +sta {c1}+1,x diff --git a/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_bor_vwuc2.asm b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_bor_vwuc2.asm new file mode 100644 index 000000000..d56b2f090 --- /dev/null +++ b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_bor_vwuc2.asm @@ -0,0 +1,6 @@ +lda {c1},x +ora #<{c2} +sta {c1},x +lda {c1}+1,x +ora #>{c2} +sta {c1}+1,x diff --git a/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_bxor_vwuc2.asm b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_bxor_vwuc2.asm new file mode 100644 index 000000000..953cdef2b --- /dev/null +++ b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_bxor_vwuc2.asm @@ -0,0 +1,6 @@ +lda {c1},x +eor #<{c2} +sta {c1},x +lda {c1}+1,x +eor #>{c2} +sta {c1}+1,x diff --git a/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_minus_vwum1.asm b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_minus_vwum1.asm new file mode 100644 index 000000000..7723b62d0 --- /dev/null +++ b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_minus_vwum1.asm @@ -0,0 +1,7 @@ +lda {c1},x +sec +sbc {m1} +sta {c1},x +lda {c1}+1,x +sbc {m1}+1 +sta {c1}+1,x diff --git a/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_minus_vwuz1.asm b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_minus_vwuz1.asm new file mode 100644 index 000000000..574b6dc27 --- /dev/null +++ b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_minus_vwuz1.asm @@ -0,0 +1,7 @@ +lda {c1},x +sec +sbc {z1} +sta {c1},x +lda {c1}+1,x +sbc {z1}+1 +sta {c1}+1,x \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_plus_vwum1.asm b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_plus_vwum1.asm new file mode 100644 index 000000000..ce3ec16c0 --- /dev/null +++ b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_plus_vwum1.asm @@ -0,0 +1,7 @@ +lda {c1},x +clc +adc {m1} +sta {c1},x +lda {c1}+1,x +adc {m1}+1 +sta {c1}+1,x diff --git a/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_plus_vwuz1.asm b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_plus_vwuz1.asm new file mode 100644 index 000000000..1c83252f7 --- /dev/null +++ b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuxx=pwuc1_derefidx_vbuxx_plus_vwuz1.asm @@ -0,0 +1,7 @@ +clc +lda {c1},x +adc {z1} +sta {c1},x +lda {c1}+1,x +adc {z1}+1 +sta {c1}+1,x \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_band_vwuc2.asm b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_band_vwuc2.asm new file mode 100644 index 000000000..8bc08136e --- /dev/null +++ b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_band_vwuc2.asm @@ -0,0 +1,6 @@ +lda {c1},y +and #<{c2} +sta {c1},y +lda {c1}+1,y +and #>{c2} +sta {c1}+1,y diff --git a/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_bor_vwuc2.asm b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_bor_vwuc2.asm new file mode 100644 index 000000000..cf2407409 --- /dev/null +++ b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_bor_vwuc2.asm @@ -0,0 +1,6 @@ +lda {c1},y +ora #<{c2} +sta {c1},y +lda {c1}+1,y +ora #>{c2} +sta {c1}+1,y diff --git a/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_minus_vwum1.asm b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_minus_vwum1.asm new file mode 100644 index 000000000..a19f62e76 --- /dev/null +++ b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_minus_vwum1.asm @@ -0,0 +1,7 @@ +lda {c1},y +sec +sbc {m1} +sta {c1},y +lda {c1}+1,y +sbc {m1}+1 +sta {c1}+1,y diff --git a/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_plus_vwum1.asm b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_plus_vwum1.asm new file mode 100644 index 000000000..a41509efd --- /dev/null +++ b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy=pwuc1_derefidx_vbuyy_plus_vwum1.asm @@ -0,0 +1,7 @@ +lda {c1},y +clc +adc {m1} +sta {c1},y +lda {c1}+1,y +adc {m1}+1 +sta {c1}+1,y diff --git a/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy_neq_vbum1_then_la1.asm b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy_neq_vbum1_then_la1.asm new file mode 100644 index 000000000..3f9fcd10c --- /dev/null +++ b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuyy_neq_vbum1_then_la1.asm @@ -0,0 +1,6 @@ +lda {c1}+1,y +cmp {m1}+1 +bne {la1} +lda {c1},y +cmp {m1} +bne {la1} diff --git a/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_minus_vwuz2.asm b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_minus_vwuz2.asm new file mode 100644 index 000000000..f344c899a --- /dev/null +++ b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_minus_vwuz2.asm @@ -0,0 +1,8 @@ +ldy {z1} +lda {c1},y +sec +sbc {z2} +sta {c1},y +lda {c1}+1,y +sbc {z2}+1 +sta {c1}+1,y \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_plus_vwuz2.asm b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_plus_vwuz2.asm new file mode 100644 index 000000000..f1784c77a --- /dev/null +++ b/src/main/fragment/mos6502-common/pwuc1_derefidx_vbuz1=pwuc1_derefidx_vbuz1_plus_vwuz2.asm @@ -0,0 +1,8 @@ +ldy {z1} +lda {c1},y +clc +adc {z2} +sta {c1},y +lda {c1}+1,y +adc {z2}+1 +sta {c1}+1,y \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/pwum1_derefidx_vbuyy=vwum2_temp.asm b/src/main/fragment/mos6502-common/pwum1_derefidx_vbuyy=vwum2_temp.asm new file mode 100644 index 000000000..63d342a6b --- /dev/null +++ b/src/main/fragment/mos6502-common/pwum1_derefidx_vbuyy=vwum2_temp.asm @@ -0,0 +1,9 @@ +lda {m1} +sta $fe +lda {m1}+1 +sta $ff +lda {m2} +sta ($fe),y +iny +lda {m2}+1 +sta ($fe),y diff --git a/src/main/fragment/mos6502-common/pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_minus_vwum2.asm b/src/main/fragment/mos6502-common/pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_minus_vwum2.asm new file mode 100644 index 000000000..86a733a65 --- /dev/null +++ b/src/main/fragment/mos6502-common/pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_minus_vwum2.asm @@ -0,0 +1,10 @@ + +sec +ldy #{c1} +lda ({z1}),y +sbc {m2} +sta ({z1}),y +ldy #{c1}+1 +lda ({z1}),y +sbc {m2}+1 +sta ({z1}),y diff --git a/src/main/fragment/mos6502-common/pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_vwum2.asm b/src/main/fragment/mos6502-common/pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_vwum2.asm new file mode 100644 index 000000000..674693fc6 --- /dev/null +++ b/src/main/fragment/mos6502-common/pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_vwum2.asm @@ -0,0 +1,10 @@ + +clc +ldy #{c1} +lda ({z1}),y +adc {m2} +sta ({z1}),y +ldy #{c1}+1 +lda ({z1}),y +adc {m2}+1 +sta ({z1}),y diff --git a/src/main/fragment/mos6502-common/pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_temp.asm b/src/main/fragment/mos6502-common/pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_temp.asm new file mode 100644 index 000000000..e4cadd9c9 --- /dev/null +++ b/src/main/fragment/mos6502-common/pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_temp.asm @@ -0,0 +1,8 @@ +ldy #{c1} +lda ({z1}),y +ldy #{c1} +sta ({z1}),y +ldy #{c1}+1 +lda ({z1}),y +ldy #{c1}+1 +sta ({z1}),y diff --git a/src/main/fragment/mos6502-common/pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc2.asm b/src/main/fragment/mos6502-common/pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc2.asm new file mode 100644 index 000000000..cb675001a --- /dev/null +++ b/src/main/fragment/mos6502-common/pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc2.asm @@ -0,0 +1,8 @@ +ldy #{c2} +lda ({z1}),y +ldy #{c1} +sta ({z1}),y +ldy #{c2}+1 +lda ({z1}),y +ldy #{c1}+1 +sta ({z1}),y diff --git a/src/main/fragment/mos6502-common/pwuz1_derefidx_vbuyy=_deref_pwuc2.asm b/src/main/fragment/mos6502-common/pwuz1_derefidx_vbuyy=_deref_pwuc2.asm new file mode 100644 index 000000000..46ac5872f --- /dev/null +++ b/src/main/fragment/mos6502-common/pwuz1_derefidx_vbuyy=_deref_pwuc2.asm @@ -0,0 +1,5 @@ +lda {c2} +sta ({z1}),y +iny +lda {c2}+1 +sta ({z1}),y diff --git a/src/main/fragment/mos6502-common/pwuz1_derefidx_vbuz2=pwuz3_derefidx_vbuz2_band_vwuc1.asm b/src/main/fragment/mos6502-common/pwuz1_derefidx_vbuz2=pwuz3_derefidx_vbuz2_band_vwuc1.asm new file mode 100644 index 000000000..3fd5e13b6 --- /dev/null +++ b/src/main/fragment/mos6502-common/pwuz1_derefidx_vbuz2=pwuz3_derefidx_vbuz2_band_vwuc1.asm @@ -0,0 +1,8 @@ +ldy {z2} +lda ({z3}),y +and #<{c1} +sta ({z1}),y +iny +lda ({z3}),y +and #>{c1} +sta ({z1}),y diff --git a/src/main/fragment/mos6502-common/pwuz1_derefidx_vbuz2=pwuz3_derefidx_vbuz2_bor_vwuc1.asm b/src/main/fragment/mos6502-common/pwuz1_derefidx_vbuz2=pwuz3_derefidx_vbuz2_bor_vwuc1.asm new file mode 100644 index 000000000..02d2cc2b9 --- /dev/null +++ b/src/main/fragment/mos6502-common/pwuz1_derefidx_vbuz2=pwuz3_derefidx_vbuz2_bor_vwuc1.asm @@ -0,0 +1,8 @@ +ldy {z2} +lda ({z3}),y +ora #<{c1} +sta ({z1}),y +iny +lda ({z3}),y +ora #>{c1} +sta ({z1}),y diff --git a/src/main/fragment/mos6502-common/qbuz1=qbuz1_plus_1.asm b/src/main/fragment/mos6502-common/qbuz1=qbuz1_plus_1.asm new file mode 100644 index 000000000..ff3be2717 --- /dev/null +++ b/src/main/fragment/mos6502-common/qbuz1=qbuz1_plus_1.asm @@ -0,0 +1,6 @@ +lda {z1} +adc #1 +sta {z1} +lda {z1}+1 +adc #0 +sta {z1}+1 diff --git a/src/main/fragment/mos6502-common/qbuz1=qbuz2_plus_1.asm b/src/main/fragment/mos6502-common/qbuz1=qbuz2_plus_1.asm new file mode 100644 index 000000000..6a886e1b6 --- /dev/null +++ b/src/main/fragment/mos6502-common/qbuz1=qbuz2_plus_1.asm @@ -0,0 +1,6 @@ +lda {z2} +adc #1 +sta {z1} +lda {z2}+1 +adc #0 +sta {z1}+1 diff --git a/src/main/fragment/mos6502-common/qssc1_derefidx_vbuxx=_deref_qssz1.asm b/src/main/fragment/mos6502-common/qssc1_derefidx_vbuxx=_deref_qssz1.asm new file mode 100644 index 000000000..23177a44b --- /dev/null +++ b/src/main/fragment/mos6502-common/qssc1_derefidx_vbuxx=_deref_qssz1.asm @@ -0,0 +1,6 @@ +ldy #$00 +lda ({z1}),y +sta {c1},x +iny +lda ({z1}),y +sta {c1}+1,x \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/qssc1_derefidx_vbuxx=qssz1_derefidx_vbuc2.asm b/src/main/fragment/mos6502-common/qssc1_derefidx_vbuxx=qssz1_derefidx_vbuc2.asm new file mode 100644 index 000000000..f6825c847 --- /dev/null +++ b/src/main/fragment/mos6502-common/qssc1_derefidx_vbuxx=qssz1_derefidx_vbuc2.asm @@ -0,0 +1,6 @@ +ldy {c2} +lda ({z1}),y +sta {c1},x +iny +lda ({z1}),y +sta {c1}+1,x diff --git a/src/main/fragment/mos6502-common/qssc1_derefidx_vbuxx_eq_pssz1_then_la1.asm b/src/main/fragment/mos6502-common/qssc1_derefidx_vbuxx_eq_pssz1_then_la1.asm new file mode 100644 index 000000000..e3b264250 --- /dev/null +++ b/src/main/fragment/mos6502-common/qssc1_derefidx_vbuxx_eq_pssz1_then_la1.asm @@ -0,0 +1,7 @@ +lda {z1} +cmp {c1},x +bne !+ +lda {z1}+1 +cmp {c1}+1,x +beq {la1} +!: diff --git a/src/main/fragment/mos6502-common/qssc1_derefidx_vbuyy_eq_pssz1_then_la1.asm b/src/main/fragment/mos6502-common/qssc1_derefidx_vbuyy_eq_pssz1_then_la1.asm new file mode 100644 index 000000000..c8f6f6232 --- /dev/null +++ b/src/main/fragment/mos6502-common/qssc1_derefidx_vbuyy_eq_pssz1_then_la1.asm @@ -0,0 +1,7 @@ +lda {z1} +cmp {c1},y +bne !+ +lda {z1}+1 +cmp {c1}+1,y +beq {la1} +!: diff --git a/src/main/fragment/mos6502-common/qssz1=qssz1_plus_1.asm b/src/main/fragment/mos6502-common/qssz1=qssz1_plus_1.asm new file mode 100644 index 000000000..025f1f2a5 --- /dev/null +++ b/src/main/fragment/mos6502-common/qssz1=qssz1_plus_1.asm @@ -0,0 +1,8 @@ +clc +lda {z1} +adc #1 +sta {z1} +lda {z1}+1 +adc #0 +sta {z1}+1 + diff --git a/src/main/fragment/mos6502-common/qssz1=qssz2_plus_1.asm b/src/main/fragment/mos6502-common/qssz1=qssz2_plus_1.asm new file mode 100644 index 000000000..10bc833ff --- /dev/null +++ b/src/main/fragment/mos6502-common/qssz1=qssz2_plus_1.asm @@ -0,0 +1,7 @@ +clc +lda {z2} +adc #1 +sta {z1} +lda {z2}+1 +adc #0 +sta {z1}+1 diff --git a/src/main/fragment/mos6502-common/qssz1_derefidx_vbuc1_eq_0_then_la1.asm b/src/main/fragment/mos6502-common/qssz1_derefidx_vbuc1_eq_0_then_la1.asm new file mode 100644 index 000000000..2f75b39b4 --- /dev/null +++ b/src/main/fragment/mos6502-common/qssz1_derefidx_vbuc1_eq_0_then_la1.asm @@ -0,0 +1,7 @@ +ldy #<{c1} +lda ({z1}),y +bne !+ +iny +lda ({z1}),y +beq {la1} +!: diff --git a/src/main/fragment/mos6502-common/qssz1_derefidx_vbuc1_neq_0_then_la1.asm b/src/main/fragment/mos6502-common/qssz1_derefidx_vbuc1_neq_0_then_la1.asm new file mode 100644 index 000000000..9a01f20d6 --- /dev/null +++ b/src/main/fragment/mos6502-common/qssz1_derefidx_vbuc1_neq_0_then_la1.asm @@ -0,0 +1,7 @@ +ldy #<{c1} +lda ({z1}),y +bne {la1} +iny +lda ({z1}),y +bne {la1} +!: diff --git a/src/main/fragment/mos6502-common/vboaa=_stackpullbool_.asm b/src/main/fragment/mos6502-common/vboaa=_stackpullbool_.asm new file mode 100644 index 000000000..7a15a8b2d --- /dev/null +++ b/src/main/fragment/mos6502-common/vboaa=_stackpullbool_.asm @@ -0,0 +1 @@ +pla \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vboaa=vbuaa_ge_vbuc1.asm b/src/main/fragment/mos6502-common/vboaa=vbuaa_ge_vbuc1.asm new file mode 100644 index 000000000..ea9754f59 --- /dev/null +++ b/src/main/fragment/mos6502-common/vboaa=vbuaa_ge_vbuc1.asm @@ -0,0 +1,7 @@ +cmp #{c1} +bcs !+ +lda #0 +jmp !e+ +!: +lda #1 +!e: \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vboaa=vbuaa_gt_vbuc1.asm b/src/main/fragment/mos6502-common/vboaa=vbuaa_gt_vbuc1.asm new file mode 100644 index 000000000..6a7dea2c4 --- /dev/null +++ b/src/main/fragment/mos6502-common/vboaa=vbuaa_gt_vbuc1.asm @@ -0,0 +1,3 @@ +cmp #{c1} +lda #0 +rol diff --git a/src/main/fragment/mos6502-common/vbum1=pbum2_derefidx_vbuyy_band_vbuc1_temp.asm b/src/main/fragment/mos6502-common/vbum1=pbum2_derefidx_vbuyy_band_vbuc1_temp.asm new file mode 100644 index 000000000..2a268fa98 --- /dev/null +++ b/src/main/fragment/mos6502-common/vbum1=pbum2_derefidx_vbuyy_band_vbuc1_temp.asm @@ -0,0 +1,7 @@ +lda {m2} +sta $fe +lda {m2}+1 +sta $ff +lda ($fe),y +and #{c1} +sta {m1} \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vbum1=pbum2_derefidx_vbuyy_temp.asm b/src/main/fragment/mos6502-common/vbum1=pbum2_derefidx_vbuyy_temp.asm new file mode 100644 index 000000000..cdb3976e0 --- /dev/null +++ b/src/main/fragment/mos6502-common/vbum1=pbum2_derefidx_vbuyy_temp.asm @@ -0,0 +1,2 @@ +lda ({m2}),y +sta {m1} \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vdum1=_dword_pwuc1_derefidx_vbuxx.asm b/src/main/fragment/mos6502-common/vdum1=_dword_pwuc1_derefidx_vbuxx.asm new file mode 100644 index 000000000..192fe2a45 --- /dev/null +++ b/src/main/fragment/mos6502-common/vdum1=_dword_pwuc1_derefidx_vbuxx.asm @@ -0,0 +1,8 @@ +lda {c1},x +sta {m1} +inx +lda {c1},x +sta {m1}+1 +lda #0 +sta {m1}+2 +sta {m1}+3 diff --git a/src/main/fragment/mos6502-common/vdum1=_dword_pwuc1_derefidx_vbuyy.asm b/src/main/fragment/mos6502-common/vdum1=_dword_pwuc1_derefidx_vbuyy.asm new file mode 100644 index 000000000..462fcfc49 --- /dev/null +++ b/src/main/fragment/mos6502-common/vdum1=_dword_pwuc1_derefidx_vbuyy.asm @@ -0,0 +1,8 @@ +lda {c1},y +sta {m1} +iny +lda {c1},y +sta {m1}+1 +lda #0 +sta {m1}+2 +sta {m1}+3 diff --git a/src/main/fragment/mos6502-common/vdum1=_dword_pwuz2_derefidx_vbuc1.asm b/src/main/fragment/mos6502-common/vdum1=_dword_pwuz2_derefidx_vbuc1.asm new file mode 100644 index 000000000..7eabe72ba --- /dev/null +++ b/src/main/fragment/mos6502-common/vdum1=_dword_pwuz2_derefidx_vbuc1.asm @@ -0,0 +1,9 @@ +ldy #{c1} +lda ({z2}),y +sta {m1} +iny +lda ({z2}),y +sta {m1}+1 +lda #0 +sta {m1}+2 +sta {m1}+3 diff --git a/src/main/fragment/mos6502-common/vdum1=_makelong4_(vbuc1)_(vbuaa)_(vbuxx)_(vbuaa).asm b/src/main/fragment/mos6502-common/vdum1=_makelong4_(vbuc1)_(vbuaa)_(vbuxx)_(vbuaa).asm new file mode 100644 index 000000000..1f85e81a4 --- /dev/null +++ b/src/main/fragment/mos6502-common/vdum1=_makelong4_(vbuc1)_(vbuaa)_(vbuxx)_(vbuaa).asm @@ -0,0 +1,5 @@ +sta {m1}+1 +sta {m1}+3 +lda #{c1} +sta {m1} +stx {m1}+2 diff --git a/src/main/fragment/mos6502-common/vdum1=_makelong4_(vbuc1)_(vbuaa)_(vbuxx)_(vbuxx).asm b/src/main/fragment/mos6502-common/vdum1=_makelong4_(vbuc1)_(vbuaa)_(vbuxx)_(vbuxx).asm new file mode 100644 index 000000000..c8f89b99b --- /dev/null +++ b/src/main/fragment/mos6502-common/vdum1=_makelong4_(vbuc1)_(vbuaa)_(vbuxx)_(vbuxx).asm @@ -0,0 +1,5 @@ +sta {m1}+1 +lda #{c1} +sta {m1} +stx {m1}+2 +stx {m1}+3 diff --git a/src/main/fragment/mos6502-common/vdum1=_makelong4_(vbuc1)_(vbuaa)_(vbuxx)_(vbuyy).asm b/src/main/fragment/mos6502-common/vdum1=_makelong4_(vbuc1)_(vbuaa)_(vbuxx)_(vbuyy).asm new file mode 100644 index 000000000..c70476a36 --- /dev/null +++ b/src/main/fragment/mos6502-common/vdum1=_makelong4_(vbuc1)_(vbuaa)_(vbuxx)_(vbuyy).asm @@ -0,0 +1,5 @@ +sta {m1}+1 +lda #{c1} +sta {m1} +stx {m1}+2 +sty {m1}+3 diff --git a/src/main/fragment/mos6502-common/vdum1=_neg_vdum1.asm b/src/main/fragment/mos6502-common/vdum1=_neg_vdum1.asm new file mode 100644 index 000000000..e1bc0148f --- /dev/null +++ b/src/main/fragment/mos6502-common/vdum1=_neg_vdum1.asm @@ -0,0 +1,13 @@ +sec +lda #0 +sbc {m1} +sta {m1} +lda #0 +sbc {m1}+1 +sta {m1}+1 +lda #0 +sbc {m1}+2 +sta {m1}+2 +lda #0 +sbc {m1}+3 +sta {m1}+3 diff --git a/src/main/fragment/mos6502-common/vdum1=_neg_vdum2.asm b/src/main/fragment/mos6502-common/vdum1=_neg_vdum2.asm new file mode 100644 index 000000000..9070f3b57 --- /dev/null +++ b/src/main/fragment/mos6502-common/vdum1=_neg_vdum2.asm @@ -0,0 +1,13 @@ +sec +lda #0 +sbc {m2} +sta {m1} +lda #0 +sbc {m2}+1 +sta {m1}+1 +lda #0 +sbc {m2}+2 +sta {m1}+2 +lda #0 +sbc {m2}+3 +sta {m1}+3 diff --git a/src/main/fragment/mos6502-common/vdum1=vdum1_ror_3.asm b/src/main/fragment/mos6502-common/vdum1=vdum1_ror_3.asm new file mode 100644 index 000000000..490f38510 --- /dev/null +++ b/src/main/fragment/mos6502-common/vdum1=vdum1_ror_3.asm @@ -0,0 +1,12 @@ +lsr {m1}+3 +ror {m1}+2 +ror {m1}+1 +ror {m1} +lsr {m1}+3 +ror {m1}+2 +ror {m1}+1 +ror {m1} +lsr {m1}+3 +ror {m1}+2 +ror {m1}+1 +ror {m1} diff --git a/src/main/fragment/mos6502-common/vdum1=vdum2_minus_1.asm b/src/main/fragment/mos6502-common/vdum1=vdum2_minus_1.asm new file mode 100644 index 000000000..8873fc018 --- /dev/null +++ b/src/main/fragment/mos6502-common/vdum1=vdum2_minus_1.asm @@ -0,0 +1,13 @@ +sec +lda {m2} +sbc #1 +sta {m1} +lda {m2}+1 +sbc #0 +sta {m1}+1 +lda {m2}+2 +sbc #0 +sta {m1}+2 +lda {m2}+3 +sbc #0 +sta {m1}+3 diff --git a/src/main/fragment/mos6502-common/vdum1=vdum2_minus_vdum1.asm b/src/main/fragment/mos6502-common/vdum1=vdum2_minus_vdum1.asm new file mode 100644 index 000000000..6387156b2 --- /dev/null +++ b/src/main/fragment/mos6502-common/vdum1=vdum2_minus_vdum1.asm @@ -0,0 +1,13 @@ +sec +lda {m2} +sbc {m1} +sta {m1} +lda {m2}+1 +sbc {m1}+1 +sta {m1}+1 +lda {m2}+2 +sbc {m1}+2 +sta {m1}+2 +lda {m2}+3 +sbc {m1}+3 +sta {m1}+3 diff --git a/src/main/fragment/mos6502-common/vdum1=vwum2_rol_3.asm b/src/main/fragment/mos6502-common/vdum1=vwum2_rol_3.asm index 86bcdea76..c817c66f0 100644 --- a/src/main/fragment/mos6502-common/vdum1=vwum2_rol_3.asm +++ b/src/main/fragment/mos6502-common/vdum1=vwum2_rol_3.asm @@ -15,4 +15,4 @@ rol {m1}+3 asl {m1} rol {m1}+1 rol {m1}+2 -rol {m1}+3 \ No newline at end of file +rol {m1}+3 diff --git a/src/main/fragment/mos6502-common/vdum1=vwum2_rol_5.asm b/src/main/fragment/mos6502-common/vdum1=vwum2_rol_5.asm new file mode 100644 index 000000000..22cb9b1ba --- /dev/null +++ b/src/main/fragment/mos6502-common/vdum1=vwum2_rol_5.asm @@ -0,0 +1,20 @@ +lda {m2} +asl +sta {m1} +lda {m2}+1 +rol +sta {m1}+1 +lda {m2}+2 +rol +sta {m1}+2 +lda {m2}+3 +rol +sta {m1}+3 +asl {m1} +rol {m1}+1 +rol {m1}+2 +rol {m1}+3 +asl {m1} +rol {m1}+1 +rol {m1}+2 +rol {m1}+3 diff --git a/src/main/fragment/mos6502-common/vdum1_gt_vduc1_then_la1.asm b/src/main/fragment/mos6502-common/vdum1_gt_vduc1_then_la1.asm new file mode 100644 index 000000000..c8b42ec0f --- /dev/null +++ b/src/main/fragment/mos6502-common/vdum1_gt_vduc1_then_la1.asm @@ -0,0 +1,16 @@ +lda #>{c1}>>$10 +cmp {m1}+3 +bcc {la1} +bne !+ +lda #<{c1}>>$10 +cmp {m1}+2 +bcc {la1} +bne !+ +lda #>{c1} +cmp {m1}+1 +bcc {la1} +bne !+ +lda #<{c1} +cmp {m1} +bcc {la1} +!: diff --git a/src/main/fragment/mos6502-common/vdum1_le_vduc1_then_la1.asm b/src/main/fragment/mos6502-common/vdum1_le_vduc1_then_la1.asm new file mode 100644 index 000000000..0f513cd45 --- /dev/null +++ b/src/main/fragment/mos6502-common/vdum1_le_vduc1_then_la1.asm @@ -0,0 +1,17 @@ +lda {m1}+3 +cmp #>{c1}>>$10 +bcc {la1} +bne {la1} +lda {m1}+2 +cmp #<{c1}>>$10 +bcc {la1} +bne {la1} +lda {m1}+1 +cmp #>{c1} +bcc {la1} +bne {la1} +lda {m1} +cmp #<{c1} +bcc {la1} +bne {la1} +!: \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vdum1_neq_vdum2_then_la1.asm b/src/main/fragment/mos6502-common/vdum1_neq_vdum2_then_la1.asm new file mode 100644 index 000000000..b0c5f06da --- /dev/null +++ b/src/main/fragment/mos6502-common/vdum1_neq_vdum2_then_la1.asm @@ -0,0 +1,12 @@ +lda {m1}+3 +cmp {m2}+3 +bne {la1} +lda {m1}+2 +cmp {m2}+2 +bne {la1} +lda {m1}+1 +cmp {m2}+1 +bne {la1} +lda {m1} +cmp {m2} +bne {la1} \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vduz1=_dword_pwuc1_derefidx_vbuxx.asm b/src/main/fragment/mos6502-common/vduz1=_dword_pwuc1_derefidx_vbuxx.asm new file mode 100644 index 000000000..bf235fdd4 --- /dev/null +++ b/src/main/fragment/mos6502-common/vduz1=_dword_pwuc1_derefidx_vbuxx.asm @@ -0,0 +1,8 @@ +lda {c1},x +sta {z1} +inx +lda {c1},x +sta {z1}+1 +lda #0 +sta {z1}+2 +sta {z1}+3 diff --git a/src/main/fragment/mos6502-common/vduz1=_dword_pwuc1_derefidx_vbuyy.asm b/src/main/fragment/mos6502-common/vduz1=_dword_pwuc1_derefidx_vbuyy.asm new file mode 100644 index 000000000..b82c7225f --- /dev/null +++ b/src/main/fragment/mos6502-common/vduz1=_dword_pwuc1_derefidx_vbuyy.asm @@ -0,0 +1,8 @@ +lda {c1},y +sta {z1} +iny +lda {c1},y +sta {z1}+1 +lda #0 +sta {z1}+2 +sta {z1}+3 diff --git a/src/main/fragment/mos6502-common/vduz1=_dword_pwuz2_derefidx_vbuc1.asm b/src/main/fragment/mos6502-common/vduz1=_dword_pwuz2_derefidx_vbuc1.asm new file mode 100644 index 000000000..089c3ad0e --- /dev/null +++ b/src/main/fragment/mos6502-common/vduz1=_dword_pwuz2_derefidx_vbuc1.asm @@ -0,0 +1,9 @@ +ldy #{c1} +lda ({z2}),y +sta {z1} +iny +lda ({z2}),y +sta {z1}+1 +lda #0 +sta {z1}+2 +sta {z1}+3 diff --git a/src/main/fragment/mos6502-common/vwsm1=pwsz2_derefidx_vbuyy_plus_vbsc2.asm b/src/main/fragment/mos6502-common/vwsm1=pwsz2_derefidx_vbuyy_plus_vbsc2.asm new file mode 100644 index 000000000..c38d7856f --- /dev/null +++ b/src/main/fragment/mos6502-common/vwsm1=pwsz2_derefidx_vbuyy_plus_vbsc2.asm @@ -0,0 +1,8 @@ +lda ({z2}),y +clc +adc {c2} +sta {m1} +iny +lda ({z2}),y +adc #0 +sta {m1}+1 \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vwsm1=vwsm1_plus_pbsz2_derefidx_vbuyy.asm b/src/main/fragment/mos6502-common/vwsm1=vwsm1_plus_pbsz2_derefidx_vbuyy.asm new file mode 100644 index 000000000..a3f2ffe0b --- /dev/null +++ b/src/main/fragment/mos6502-common/vwsm1=vwsm1_plus_pbsz2_derefidx_vbuyy.asm @@ -0,0 +1,11 @@ +clc +lda ({z2}),y +adc {m1} +sta {m1} +lda ({z2}),y +ora #$7f +bmi !+ +lda #0 +!: +adc {m1}+1 +sta {m1}+1 diff --git a/src/main/fragment/mos6502-common/vwsm1=vwsm1_rol_vbum2.asm b/src/main/fragment/mos6502-common/vwsm1=vwsm1_rol_vbum2.asm new file mode 100644 index 000000000..713e4808e --- /dev/null +++ b/src/main/fragment/mos6502-common/vwsm1=vwsm1_rol_vbum2.asm @@ -0,0 +1,8 @@ +ldy {m2} +beq !e+ +!: +asl {m1} +rol {m1}+1 +dey +bne !- +!e: diff --git a/src/main/fragment/mos6502-common/vwsm1=vwsm1_rol_vbuxx.asm b/src/main/fragment/mos6502-common/vwsm1=vwsm1_rol_vbuxx.asm new file mode 100644 index 000000000..e355b076b --- /dev/null +++ b/src/main/fragment/mos6502-common/vwsm1=vwsm1_rol_vbuxx.asm @@ -0,0 +1,7 @@ +beq !e+ +!: +asl {m1} +rol {m1}+1 +dex +bne !- +!e: diff --git a/src/main/fragment/mos6502-common/vwsm1=vwsm1_rol_vbuyy.asm b/src/main/fragment/mos6502-common/vwsm1=vwsm1_rol_vbuyy.asm new file mode 100644 index 000000000..f731ac23f --- /dev/null +++ b/src/main/fragment/mos6502-common/vwsm1=vwsm1_rol_vbuyy.asm @@ -0,0 +1,7 @@ +beq !e+ +!: +asl {m1} +rol {m1}+1 +dey +bne !- +!e: diff --git a/src/main/fragment/mos6502-common/vwsm1=vwsm2_plus_pbsz3_derefidx_vbuyy.asm b/src/main/fragment/mos6502-common/vwsm1=vwsm2_plus_pbsz3_derefidx_vbuyy.asm new file mode 100644 index 000000000..48f73ee68 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwsm1=vwsm2_plus_pbsz3_derefidx_vbuyy.asm @@ -0,0 +1,7 @@ +clc +lda {m2} +adc ({z3}),y +sta {m1} +bcc !+ +inc {m1}+1 +!: \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vwsm1=vwsm2_rol_vbuxx.asm b/src/main/fragment/mos6502-common/vwsm1=vwsm2_rol_vbuxx.asm new file mode 100644 index 000000000..414f29b8c --- /dev/null +++ b/src/main/fragment/mos6502-common/vwsm1=vwsm2_rol_vbuxx.asm @@ -0,0 +1,12 @@ +lda {m2} +sta {m1} +lda {m2}+1 +sta {m1}+1 +cpx #0 +beq !e+ +!: +asl {m1} +rol {m1}+1 +dex +bne !- +!e: diff --git a/src/main/fragment/mos6502-common/vwsm1=vwsm2_rol_vbuyy.asm b/src/main/fragment/mos6502-common/vwsm1=vwsm2_rol_vbuyy.asm new file mode 100644 index 000000000..56f15a738 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwsm1=vwsm2_rol_vbuyy.asm @@ -0,0 +1,12 @@ +lda {m2} +sta {m1} +lda {m2}+1 +sta {m1}+1 +cpy #0 +beq !e+ +!: +asl {m1} +rol {m1}+1 +dey +bne !- +!e: diff --git a/src/main/fragment/mos6502-common/vwum1=_byte0_vwum1.asm b/src/main/fragment/mos6502-common/vwum1=_byte0_vwum1.asm new file mode 100644 index 000000000..02e3e716b --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1=_byte0_vwum1.asm @@ -0,0 +1,2 @@ +lda #0 +sta {m1}+1 \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vwum1=_byte0_vwum2.asm b/src/main/fragment/mos6502-common/vwum1=_byte0_vwum2.asm new file mode 100644 index 000000000..44bcd5606 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1=_byte0_vwum2.asm @@ -0,0 +1,2 @@ +lda {m2} +sta {m1} \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vwum1=_byte1_vwum2.asm b/src/main/fragment/mos6502-common/vwum1=_byte1_vwum2.asm new file mode 100644 index 000000000..313b715ef --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1=_byte1_vwum2.asm @@ -0,0 +1,2 @@ +lda {m2}+1 +sta {m1} \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vwum1=_dec_vwum2.asm b/src/main/fragment/mos6502-common/vwum1=_dec_vwum2.asm new file mode 100644 index 000000000..cbe3d0a97 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1=_dec_vwum2.asm @@ -0,0 +1,7 @@ +lda {m2} +sec +sbc #1 +sta {m1} +lda {m2}+1 +sbc #0 +sta {m1}+1 \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vwum1=_deref_pwuc1_minus__deref_pwuc2.asm b/src/main/fragment/mos6502-common/vwum1=_deref_pwuc1_minus__deref_pwuc2.asm new file mode 100644 index 000000000..4e9393919 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1=_deref_pwuc1_minus__deref_pwuc2.asm @@ -0,0 +1,7 @@ +sec +lda {c1} +sbc {c2} +sta {m1} +lda {c1}+1 +sbc {c2}+1 +sta {m1}+1 diff --git a/src/main/fragment/mos6502-common/vwum1=_deref_pwum2_band_vwuc1_temp.asm b/src/main/fragment/mos6502-common/vwum1=_deref_pwum2_band_vwuc1_temp.asm new file mode 100644 index 000000000..3fcccff1d --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1=_deref_pwum2_band_vwuc1_temp.asm @@ -0,0 +1,12 @@ +ldy #0 +lda {m2} +sta $fe +lda {m2}+1 +sta $ff +lda ($fe),y +and #<{c1} +sta {m1} +iny +lda ($fe),y +and #>{c1} +sta {m1} diff --git a/src/main/fragment/mos6502-common/vwum1=_deref_pwuz2_band_vwuc1.asm b/src/main/fragment/mos6502-common/vwum1=_deref_pwuz2_band_vwuc1.asm new file mode 100644 index 000000000..42df72f08 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1=_deref_pwuz2_band_vwuc1.asm @@ -0,0 +1,9 @@ +ldy #0 +clc +lda ({z2}),y +and #<{c1} +sta {m1} +iny +lda ({z2}),y +and #>{c1} +sta {m1}+1 \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vwum1=_deref_pwuz2_bor_vwuc1.asm b/src/main/fragment/mos6502-common/vwum1=_deref_pwuz2_bor_vwuc1.asm new file mode 100644 index 000000000..2d8bf0f1e --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1=_deref_pwuz2_bor_vwuc1.asm @@ -0,0 +1,9 @@ +ldy #0 +clc +lda ({z2}),y +ora #<{c1} +sta {m1} +iny +lda ({z2}),y +ora #>{c1} +sta {m1}+1 \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vwum1=_deref_pwuz2_plus_vwuc1.asm b/src/main/fragment/mos6502-common/vwum1=_deref_pwuz2_plus_vwuc1.asm new file mode 100644 index 000000000..211cc9041 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1=_deref_pwuz2_plus_vwuc1.asm @@ -0,0 +1,9 @@ +ldy #0 +clc +lda ({z2}),y +adc #<{c1} +sta {m1} +iny +lda ({z2}),y +adc #>{c1} +sta {m1}+1 \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vwum1=_deref_pwuz2_plus_vwum1.asm b/src/main/fragment/mos6502-common/vwum1=_deref_pwuz2_plus_vwum1.asm new file mode 100644 index 000000000..7a742e5ec --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1=_deref_pwuz2_plus_vwum1.asm @@ -0,0 +1,9 @@ +ldy #0 +clc +lda ({z2}),y +adc {m1} +sta {m1} +iny +lda ({z2}),y +adc {m1}+1 +sta {m1}+1 \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vwum1=_word1_pduc1_derefidx_vbuyy.asm b/src/main/fragment/mos6502-common/vwum1=_word1_pduc1_derefidx_vbuyy.asm new file mode 100644 index 000000000..d2300c98e --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1=_word1_pduc1_derefidx_vbuyy.asm @@ -0,0 +1,4 @@ +lda {c1}+2,y +sta {m1} +lda {c1}+3,y +sta {m1}+1 \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vwum1=pwuc1_derefidx_vbuxx_minus_pwuc2_derefidx_vbuxx.asm b/src/main/fragment/mos6502-common/vwum1=pwuc1_derefidx_vbuxx_minus_pwuc2_derefidx_vbuxx.asm new file mode 100644 index 000000000..760bde396 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1=pwuc1_derefidx_vbuxx_minus_pwuc2_derefidx_vbuxx.asm @@ -0,0 +1,7 @@ +lda {c1},x +sec +sbc {c2},x +sta {m1} +lda {c1}+1,x +sbc {c2}+1,x +sta {m1}+1 diff --git a/src/main/fragment/mos6502-common/vwum1=pwuc1_derefidx_vbuyy_minus_pwuc2_derefidx_vbuyy.asm b/src/main/fragment/mos6502-common/vwum1=pwuc1_derefidx_vbuyy_minus_pwuc2_derefidx_vbuyy.asm new file mode 100644 index 000000000..c6d8e2b40 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1=pwuc1_derefidx_vbuyy_minus_pwuc2_derefidx_vbuyy.asm @@ -0,0 +1,7 @@ +lda {c1},y +sec +sbc {c2},y +sta {m1} +lda {c1}+1,y +sbc {c2}+1,y +sta {m1}+1 diff --git a/src/main/fragment/mos6502-common/vwum1=pwuz2_derefidx_vbuyy_minus_vwum1.asm b/src/main/fragment/mos6502-common/vwum1=pwuz2_derefidx_vbuyy_minus_vwum1.asm new file mode 100644 index 000000000..1f2075bdd --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1=pwuz2_derefidx_vbuyy_minus_vwum1.asm @@ -0,0 +1,8 @@ +sec +lda ({z2}),y +sbc {m1} +sta {m1} +iny +lda ({z2}),y +sbc {m1}+1 +sta {m1}+1 \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vwum1=vbuaa_minus_2.asm b/src/main/fragment/mos6502-common/vwum1=vbuaa_minus_2.asm new file mode 100644 index 000000000..b3e4729d7 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1=vbuaa_minus_2.asm @@ -0,0 +1,5 @@ +sec +sbc #2 +sta {m1} +lda #0 +sta {m1}+1 \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vwum1=vwum1_rol_9.asm b/src/main/fragment/mos6502-common/vwum1=vwum1_rol_9.asm new file mode 100644 index 000000000..2cc172aac --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1=vwum1_rol_9.asm @@ -0,0 +1,5 @@ +lda {m1} +asl +sta {m1}+1 +lda #0 +sta {m1} diff --git a/src/main/fragment/mos6502-common/vwum1=vwum1_ror_7.asm b/src/main/fragment/mos6502-common/vwum1=vwum1_ror_7.asm new file mode 100644 index 000000000..d7806e844 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1=vwum1_ror_7.asm @@ -0,0 +1,14 @@ +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} +lsr {m1}+1 +ror {m1} diff --git a/src/main/fragment/mos6502-common/vwum1=vwum1_ror_vbum2.asm b/src/main/fragment/mos6502-common/vwum1=vwum1_ror_vbum2.asm new file mode 100644 index 000000000..1c5a291c5 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1=vwum1_ror_vbum2.asm @@ -0,0 +1,8 @@ +ldy {m2} +beq !e+ +!: +lsr {m1} +ror {m1}+1 +dey +bne !- +!e: diff --git a/src/main/fragment/mos6502-common/vwum1=vwum1_ror_vbuxx.asm b/src/main/fragment/mos6502-common/vwum1=vwum1_ror_vbuxx.asm new file mode 100644 index 000000000..53a92e033 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1=vwum1_ror_vbuxx.asm @@ -0,0 +1,6 @@ +!: +lsr {m1}+1 +ror {m1} +dex +bne !- +!e: diff --git a/src/main/fragment/mos6502-common/vwum1=vwum1_ror_vbuyy.asm b/src/main/fragment/mos6502-common/vwum1=vwum1_ror_vbuyy.asm new file mode 100644 index 000000000..cf73a41ad --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1=vwum1_ror_vbuyy.asm @@ -0,0 +1,6 @@ +!: +lsr {m1}+1 +ror {m1} +dey +bne !- +!e: diff --git a/src/main/fragment/mos6502-common/vwum1=vwum2_minus_pwuc1_derefidx_vbuxx.asm b/src/main/fragment/mos6502-common/vwum1=vwum2_minus_pwuc1_derefidx_vbuxx.asm new file mode 100644 index 000000000..21225e9f5 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1=vwum2_minus_pwuc1_derefidx_vbuxx.asm @@ -0,0 +1,7 @@ +lda {m2} +sec +sbc {c1},x +sta {m1} +lda {m2}+1 +sbc {c1}+1,x +sta {m1}+1 diff --git a/src/main/fragment/mos6502-common/vwum1=vwum2_minus_pwuc1_derefidx_vbuyy.asm b/src/main/fragment/mos6502-common/vwum1=vwum2_minus_pwuc1_derefidx_vbuyy.asm new file mode 100644 index 000000000..b777d0ab4 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1=vwum2_minus_pwuc1_derefidx_vbuyy.asm @@ -0,0 +1,7 @@ +lda {m2} +sec +sbc {c1},y +sta {m1} +lda {m2}+1 +sbc {c1}+1,y +sta {m1}+1 diff --git a/src/main/fragment/mos6502-common/vwum1=vwum2_rol_9.asm b/src/main/fragment/mos6502-common/vwum1=vwum2_rol_9.asm new file mode 100644 index 000000000..e3a0ed3bb --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1=vwum2_rol_9.asm @@ -0,0 +1,5 @@ +lda {m2} +asl +sta {m1}+1 +lda #0 +sta {m1} \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vwum1_lt_vbuyy_then_la1.asm b/src/main/fragment/mos6502-common/vwum1_lt_vbuyy_then_la1.asm deleted file mode 100644 index 8c1950567..000000000 --- a/src/main/fragment/mos6502-common/vwum1_lt_vbuyy_then_la1.asm +++ /dev/null @@ -1,7 +0,0 @@ -lda {m1}+1 -bne !+ -sty $ff -lda {m1} -cmp $ff -bcc {la1} -!: diff --git a/src/main/fragment/mos6502-common/vwum1_neq__deref_pwuc1_then_la1.asm b/src/main/fragment/mos6502-common/vwum1_neq__deref_pwuc1_then_la1.asm new file mode 100644 index 000000000..c2f2f4882 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1_neq__deref_pwuc1_then_la1.asm @@ -0,0 +1,8 @@ +ldy #1 +lda {m1}+1 +cmp {c1}+1 +bne {la1} +dey +lda {m1} +cmp {c1} +bne {la1} \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vwum1_neq_vbum2_then_la1.asm b/src/main/fragment/mos6502-common/vwum1_neq_vbum2_then_la1.asm new file mode 100644 index 000000000..eebef9d10 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwum1_neq_vbum2_then_la1.asm @@ -0,0 +1,5 @@ +lda {m1}+1 +bne {la1} +lda {m1} +cmp {m2} +bne {la1} \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vwuz1=_deref_pwuz1_band_vwuc1.asm b/src/main/fragment/mos6502-common/vwuz1=_deref_pwuz1_band_vwuc1.asm new file mode 100644 index 000000000..84605c40d --- /dev/null +++ b/src/main/fragment/mos6502-common/vwuz1=_deref_pwuz1_band_vwuc1.asm @@ -0,0 +1,10 @@ +ldy #0 +lda ({z1}),y +and #<{c1} +pha +iny +lda ({z1}),y +and #>{c1} +sta {z1}+1 +pla +sta {z1} diff --git a/src/main/fragment/mos6502-common/vwuz1=_deref_pwuz1_bor_vwuc1.asm b/src/main/fragment/mos6502-common/vwuz1=_deref_pwuz1_bor_vwuc1.asm new file mode 100644 index 000000000..db0801adb --- /dev/null +++ b/src/main/fragment/mos6502-common/vwuz1=_deref_pwuz1_bor_vwuc1.asm @@ -0,0 +1,11 @@ +ldy #0 +clc +lda ({z1}),y +ora #<{c1} +pha +iny +lda ({z1}),y +ora #>{c1} +sta {z1}+1 +pla +sta {z1} diff --git a/src/main/fragment/mos6502-common/vwuz1=_deref_pwuz1_bxor_vwuc1.asm b/src/main/fragment/mos6502-common/vwuz1=_deref_pwuz1_bxor_vwuc1.asm new file mode 100644 index 000000000..2bb4f3622 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwuz1=_deref_pwuz1_bxor_vwuc1.asm @@ -0,0 +1,10 @@ +ldy #0 +lda ({z1}),y +eor #<{c1} +pha +iny +lda ({z1}),y +eor #>{c1} +sta {z1}+1 +pla +sta {z1} diff --git a/src/main/fragment/mos6502-common/vwuz1=pwuc1_derefidx_vbuz2_minus_pwuc2_derefidx_vbuz2.asm b/src/main/fragment/mos6502-common/vwuz1=pwuc1_derefidx_vbuz2_minus_pwuc2_derefidx_vbuz2.asm new file mode 100644 index 000000000..9fb5901f0 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwuz1=pwuc1_derefidx_vbuz2_minus_pwuc2_derefidx_vbuz2.asm @@ -0,0 +1,8 @@ +ldy {z2} +lda {c1},y +sec +sbc {c2},y +sta {z1} +lda {c1}+1,y +sbc {c2}+1,y +sta {z1}+1 \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vwuz1=pwuz1_derefidx_vbuyy_band_vwuc1.asm b/src/main/fragment/mos6502-common/vwuz1=pwuz1_derefidx_vbuyy_band_vwuc1.asm new file mode 100644 index 000000000..ca8a78656 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwuz1=pwuz1_derefidx_vbuyy_band_vwuc1.asm @@ -0,0 +1,9 @@ +lda ({z1}),y +and #<{c1} +pha +iny +lda ({z1}),y +and #>{c1} +sta {z1}+1 +pla +sta {z1} diff --git a/src/main/fragment/mos6502-common/vwuz1=pwuz1_derefidx_vbuyy_bor_vwuc1.asm b/src/main/fragment/mos6502-common/vwuz1=pwuz1_derefidx_vbuyy_bor_vwuc1.asm new file mode 100644 index 000000000..6f9b0d480 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwuz1=pwuz1_derefidx_vbuyy_bor_vwuc1.asm @@ -0,0 +1,9 @@ +lda ({z1}),y +ora #<{c1} +pha +iny +lda ({z1}),y +ora #>{c1} +sta {z1}+1 +pla +sta {z1} diff --git a/src/main/fragment/mos6502-common/vwuz1=pwuz1_derefidx_vbuyy_bxor_vwuc1.asm b/src/main/fragment/mos6502-common/vwuz1=pwuz1_derefidx_vbuyy_bxor_vwuc1.asm new file mode 100644 index 000000000..17d4231f3 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwuz1=pwuz1_derefidx_vbuyy_bxor_vwuc1.asm @@ -0,0 +1,9 @@ +lda ({z1}),y +eor #<{c1} +pha +iny +lda ({z1}),y +eor #>{c1} +sta {z1}+1 +pla +sta {z1} diff --git a/src/main/fragment/mos6502-common/vwuz1=pwuz1_derefidx_vbuyy_minus_vwum2 copy.asm b/src/main/fragment/mos6502-common/vwuz1=pwuz1_derefidx_vbuyy_minus_vwum2 copy.asm new file mode 100644 index 000000000..562c568b6 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwuz1=pwuz1_derefidx_vbuyy_minus_vwum2 copy.asm @@ -0,0 +1,10 @@ +sec +lda ({z1}),y +sbc {m2} +pha +iny +lda ({z1}),y +sbc {m2}+1 +sta {z1}+1 +pla +sta {z1} \ No newline at end of file diff --git a/src/main/fragment/mos6502-common/vwuz1=pwuz2_derefidx_vbuyy_band_vwuc1.asm b/src/main/fragment/mos6502-common/vwuz1=pwuz2_derefidx_vbuyy_band_vwuc1.asm new file mode 100644 index 000000000..9f535d729 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwuz1=pwuz2_derefidx_vbuyy_band_vwuc1.asm @@ -0,0 +1,7 @@ +lda ({z2}),y +and #<{c1} +sta {z1} +iny +lda ({z2}),y +and #>{c1} +sta {z1}+1 diff --git a/src/main/fragment/mos6502-common/vwuz1=pwuz2_derefidx_vbuyy_band_vwuc2.asm b/src/main/fragment/mos6502-common/vwuz1=pwuz2_derefidx_vbuyy_band_vwuc2.asm new file mode 100644 index 000000000..769af06e9 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwuz1=pwuz2_derefidx_vbuyy_band_vwuc2.asm @@ -0,0 +1,7 @@ +lda ({z2}),y +and #<{c2} +sta {z1} +iny +lda ({z2}),y +and #>{c2} +sta {z1}+1 diff --git a/src/main/fragment/mos6502-common/vwuz1=pwuz2_derefidx_vbuyy_minus_vwuz3.asm b/src/main/fragment/mos6502-common/vwuz1=pwuz2_derefidx_vbuyy_minus_vwuz3.asm new file mode 100644 index 000000000..2e4b298a7 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwuz1=pwuz2_derefidx_vbuyy_minus_vwuz3.asm @@ -0,0 +1,12 @@ +sec +lda ({z2}),y +sty $ff +ldy #0 +sbc ({z3}),y +sta {z1} +ldy $ff +iny +lda ({z2}),y +ldy #1 +sbc ({z3}),y +sta {z1}+1 diff --git a/src/main/fragment/mos6502-common/vwuz1=vwuz1_ror_vbuxx.asm b/src/main/fragment/mos6502-common/vwuz1=vwuz1_ror_vbuxx.asm new file mode 100644 index 000000000..1617b24d7 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwuz1=vwuz1_ror_vbuxx.asm @@ -0,0 +1,6 @@ +!: +lsr {z1}+1 +ror {z1} +dex +bne !- +!e: diff --git a/src/main/fragment/mos6502-common/vwuz1=vwuz1_ror_vbuyy.asm b/src/main/fragment/mos6502-common/vwuz1=vwuz1_ror_vbuyy.asm new file mode 100644 index 000000000..412a06b23 --- /dev/null +++ b/src/main/fragment/mos6502-common/vwuz1=vwuz1_ror_vbuyy.asm @@ -0,0 +1,6 @@ +!: +lsr {z1}+1 +ror {z1} +dey +bne !- +!e: diff --git a/src/main/kc/include/c128.h b/src/main/kc/include/c128.h index f23967634..c1dce5163 100644 --- a/src/main/kc/include/c128.h +++ b/src/main/kc/include/c128.h @@ -8,3 +8,77 @@ #include #include #include + +/// Processor port data direction register +char* const PROCPORT_DDR = (char*)0x00; +/// Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written +const char PROCPORT_DDR_MEMORY_MASK = 0b00000111; +/// Processor Port Register controlling RAM/ROM configuration and the datasette +char* const PROCPORT = (char*)0x01; +/// RAM in all three areas 0xA000, 0xD000, 0xE000 +const char PROCPORT_RAM_ALL = 0b00000000; +/// RAM in 0xA000, 0xE000 I/O in 0xD000 +const char PROCPORT_RAM_IO = 0b00000101; +/// RAM in 0xA000, 0xE000 CHAR ROM in 0xD000 +const char PROCPORT_RAM_CHARROM = 0b00000001; +/// RAM in 0xA000, I/O in 0xD000, KERNEL in 0xE000 +const char PROCPORT_KERNEL_IO = 0b00000110; +/// BASIC in 0xA000, I/O in 0xD000, KERNEL in 0xE000 +const char PROCPORT_BASIC_KERNEL_IO = 0b00000111; + +/// The address of the CHARGEN character set +char* const CHARGEN = (char*)0xd000; +/// The SID MOS 6581/8580 +struct MOS6581_SID * const SID = (struct MOS6581_SID *)0xd400; +/// The VIC-II MOS 6567/6569 +struct MOS6569_VICII* const VICII = (struct MOS6569_VICII*)0xd000; +/// Color Ram +char * const COLORRAM = (char*)0xd800; +/// Color Ram +char * const COLS = (char*)0xd800; + +/// Default address of screen character matrix +char * const DEFAULT_SCREEN = (char*)0x0400; +/// Default address of the chargen font (upper case) +char * const DEFAULT_FONT_UPPER = (char*)0x1000; +/// Default address of the chargen font (mixed case) +char * const DEFAULT_FONT_MIXED = (char*)0x1800; + +/// The CIA#1: keyboard matrix, joystick #1/#2 +struct MOS6526_CIA * const CIA1 = (struct MOS6526_CIA *)0xdc00; +/// The CIA#2: Serial bus, RS-232, VIC memory bank +struct MOS6526_CIA * const CIA2 = (struct MOS6526_CIA *)0xdd00; +/// CIA#1 Interrupt for reading in ASM +char * const CIA1_INTERRUPT = (char*)0xdc0d; +/// CIA#2 timer A&B as one single 32-bit value +unsigned long* const CIA2_TIMER_AB = (unsigned long*)0xdd04; +/// CIA#2 Interrupt for reading in ASM +char * const CIA2_INTERRUPT = (char*)0xdd0d; + +/// Pointer to interrupt function +typedef void (*IRQ_TYPE)(void); + +/// The vector used when the KERNAL serves IRQ interrupts +IRQ_TYPE * const KERNEL_IRQ = (IRQ_TYPE*)0x0314; +/// The vector used when the KERNAL serves NMI interrupts +IRQ_TYPE * const KERNEL_NMI = (IRQ_TYPE*)0x0318; +/// The vector used when the HARDWARE serves IRQ interrupts +IRQ_TYPE * const HARDWARE_IRQ = (IRQ_TYPE*)0xfffe; + +/// The colors of the C64 +const char BLACK = 0x0; +const char WHITE = 0x1; +const char RED = 0x2; +const char CYAN = 0x3; +const char PURPLE = 0x4; +const char GREEN = 0x5; +const char BLUE = 0x6; +const char YELLOW = 0x7; +const char ORANGE = 0x8; +const char BROWN = 0x9; +const char PINK = 0xa; +const char DARK_GREY= 0xb; +const char GREY = 0xc; +const char LIGHT_GREEN = 0xd; +const char LIGHT_BLUE = 0xe; +const char LIGHT_GREY = 0xf; diff --git a/src/main/kc/include/conio.h b/src/main/kc/include/conio.h index 269817f16..cb79ae3eb 100644 --- a/src/main/kc/include/conio.h +++ b/src/main/kc/include/conio.h @@ -4,7 +4,7 @@ /// Implements similar functions as conio.h from CC65 for compatibility /// See https://github.com/cc65/cc65/blob/master/include/conio.h // -/// Currently C64/PLUS4/VIC20 platforms are supported +/// Currently CX16/C64/PLUS4/VIC20 platforms are supported /// clears the screen and moves the cursor to the upper left-hand corner of the screen. void clrscr(void); diff --git a/src/main/kc/include/cx16-bitmap.h b/src/main/kc/include/cx16-bitmap.h index 0584218fe..d0c3482ac 100644 --- a/src/main/kc/include/cx16-bitmap.h +++ b/src/main/kc/include/cx16-bitmap.h @@ -4,7 +4,7 @@ /// Currently it can only plot on the first 256 x-positions. /// Initialize the bitmap plotter tables for a specific bitmap -void bitmap_init(byte layer, dword address); +void bitmap_init(unsigned char layer, unsigned char bank, unsigned int offset); /// Clear all graphics on the bitmap void bitmap_clear(); diff --git a/src/main/kc/include/cx16-conio.h b/src/main/kc/include/cx16-conio.h new file mode 100644 index 000000000..ebd65e8a3 --- /dev/null +++ b/src/main/kc/include/cx16-conio.h @@ -0,0 +1,6 @@ +#include + +// structure to hold operational variables to operate conio for the X16, and make it code efficient. + +void screenlayer0(); +void screenlayer1(); \ No newline at end of file diff --git a/src/main/kc/include/cx16-kernal.h b/src/main/kc/include/cx16-kernal.h index b815572ba..778aaa422 100644 --- a/src/main/kc/include/cx16-kernal.h +++ b/src/main/kc/include/cx16-kernal.h @@ -1,18 +1,21 @@ -/// @file +/** + * @file cx16-kernal.h + * @author Sven Van de Velde (sven.van.de.velde@telenet.be) + * @brief CBM kernal API dialect and additions to the Commander X16 platform. + * Please refer to https://github.com/commanderx16/x16-docs/blob/master/X16%20Reference%20-%2004%20-%20KERNAL.md for the detailed list + * of APIs backward compatible with the C64. + * + * @version 1.0 + * @date 2023-03-22 + * + * @copyright Copyright (c) 2023 + * + */ + +const unsigned int CX16_SCREEN_SET_CHARSET = 0xFF62; ///< CX16 Set character set. +const unsigned int CX16_MACPTR = 0xFF44; ///< CX16 Faster loading from SDCARD. -/// Kernal SETNAM function -/// SETNAM. Set file name parameters. -void setnam(char* filename); +unsigned int cx16_k_macptr(unsigned char bytes, void* buffer); +void cx16_k_screen_set_charset(char charset, char *offset); -/// SETLFS. Set file parameters. -void setlfs(char device); - -/// LOAD. Load or verify file. (Must call SETLFS and SETNAM beforehands.) -/// - verify: 0 = Load, 1-255 = Verify -/// Returns a status, 0xff: Success other: Kernal Error Code -char load(char* address, char verify); - -/// GETIN. Read a byte from the input channel -/// return: next byte in buffer or 0 if buffer is empty. -char getin(); diff --git a/src/main/kc/include/cx16-mouse.h b/src/main/kc/include/cx16-mouse.h new file mode 100644 index 000000000..f8f901a3a --- /dev/null +++ b/src/main/kc/include/cx16-mouse.h @@ -0,0 +1,18 @@ +// CX16 CBM Mouse Routines +const word CX16_MOUSE_CONFIG = 0xFF68; // Mouse pointer configuration. +const word CX16_MOUSE_SCAN = 0xFF71; // ISR routine to scan the mouse state. +const word CX16_MOUSE_GET = 0xFF6B; // Get the mouse state; + +typedef struct { + int x; + int y; + int px; + int py; + unsigned char status; +} cx16_mouse_t; + +extern __mem cx16_mouse_t cx16_mouse; + +void cx16_mouse_config(char visible, char scalex, char scaley); +void cx16_mouse_scan(); +char cx16_mouse_get(); diff --git a/src/main/kc/include/cx16-typedefs.h b/src/main/kc/include/cx16-typedefs.h new file mode 100644 index 000000000..d13d5397b --- /dev/null +++ b/src/main/kc/include/cx16-typedefs.h @@ -0,0 +1,26 @@ +/** + * @file cx16.h + * @author Sven Van de Velde + * @brief Type definitions for the CX16 platform. + * @version 0.2 + * @date 2022-10-13 + * + * @copyright Copyright (c) 2022 + * + */ + +#ifndef __CX16__ +#error "Target platform must be cx16" +#endif + + +typedef void (*IRQ_TYPE)(void); ///< Pointer to interrupt function. + +typedef unsigned char bram_bank_t; ///< Represents a bank in banked ram. +typedef unsigned char brom_bank_t; ///< Represents a bank in banked rom. +typedef unsigned char vram_bank_t; ///< Represents a bank in vera ram. +typedef unsigned char* ram_ptr_t; ///< Expresses a pointer to a location in main ram of the CX16.. +typedef unsigned char* bram_ptr_t; ///< Expresses a pointer location in banked ram of the CX16, excluding any bank information! +typedef unsigned char* brom_ptr_t; ///< Expresses a pointer location in banked rom of the CX16, excluding any bank information! +typedef unsigned int vram_offset_t; ///< Expresses an offset location in vera ram, excluding any bank information! + diff --git a/src/main/kc/include/cx16-vera.h b/src/main/kc/include/cx16-vera.h index 76115069d..53b2de742 100644 --- a/src/main/kc/include/cx16-vera.h +++ b/src/main/kc/include/cx16-vera.h @@ -3,23 +3,9 @@ /// /// https://github.com/commanderx16/x16-docs/blob/master/VERA%20Programmer's%20Reference.md -/// The colors of the CX16 -const char BLACK = 0x0; -const char WHITE = 0x1; -const char RED = 0x2; -const char CYAN = 0x3; -const char PURPLE = 0x4; -const char GREEN = 0x5; -const char BLUE = 0x6; -const char YELLOW = 0x7; -const char ORANGE = 0x8; -const char BROWN = 0x9; -const char PINK = 0xa; -const char DARK_GREY = 0xb; -const char GREY = 0xc; -const char LIGHT_GREEN = 0xd; -const char LIGHT_BLUE = 0xe; -const char LIGHT_GREY = 0xf; +// Location of default PETSCII character tiles in the VERA +unsigned int const VERA_PETSCII_TILE = 0xF800; +unsigned int const VERA_PETSCII_TILE_SIZE = 0x0800; /// To access the VRAM (which is 128kB in size) an indirection mechanism is used. /// First the address to be accessed needs to be set (ADDRx_L/ADDRx_M/ADDRx_H) and @@ -31,69 +17,69 @@ const char LIGHT_GREY = 0xf; /// See https://github.com/commanderx16/x16-emulator/wiki/(VERA-0.8)-Registers-$9F23-and-$9F24-(and-$9F25) /// $9F20 VRAM Address (7:0) -char * const VERA_ADDRX_L = (char*)0x9f20; +char* const VERA_ADDRX_L = (char*)0x9f20; /// $9F21 VRAM Address (15:8) -char * const VERA_ADDRX_M = (char*)0x9f21; +char* const VERA_ADDRX_M = (char*)0x9f21; /// $9F22 VRAM Address (7:0) /// Bit 4-7: Address Increment The following is the amount incremented per value value:increment /// 0:0, 1:1, 2:2, 3:4, 4:8, 5:16, 6:32, 7:64, 8:128, 9:256, 10:512, 11:40, 12:80, 13:160, 14:320, 15:640 /// Bit 3: DECR Setting the DECR bit, will decrement instead of increment by the value set by the 'Address Increment' field. /// Bit 0: VRAM Address (16) -char * const VERA_ADDRX_H = (char*)0x9f22; -const char VERA_INC_0 = 0x00; -const char VERA_INC_1 = 0x10; -const char VERA_INC_2 = 0x20; -const char VERA_INC_4 = 0x30; -const char VERA_INC_8 = 0x40; -const char VERA_INC_16 = 0x50; -const char VERA_INC_32 = 0x60; -const char VERA_INC_64 = 0x70; -const char VERA_INC_128 = 0x80; -const char VERA_INC_256 = 0x90; -const char VERA_INC_512 = 0xa0; -const char VERA_INC_40 = 0xb0; -const char VERA_INC_80 = 0xc0; -const char VERA_INC_160 = 0xd0; -const char VERA_INC_320 = 0xe0; -const char VERA_INC_640 = 0xf0; -const char VERA_DECR_0 = 0x08; -const char VERA_DECR_1 = 0x18; -const char VERA_DECR_2 = 0x28; -const char VERA_DECR_4 = 0x38; -const char VERA_DECR_8 = 0x48; -const char VERA_DECR_16 = 0x58; -const char VERA_DECR_32 = 0x68; -const char VERA_DECR_64 = 0x78; -const char VERA_DECR_128 = 0x88; -const char VERA_DECR_256 = 0x98; -const char VERA_DECR_512 = 0xa8; -const char VERA_DECR_40 = 0xb8; -const char VERA_DECR_80 = 0xc8; -const char VERA_DECR_160 = 0xd8; -const char VERA_DECR_320 = 0xe8; -const char VERA_DECR_640 = 0xf8; +char* const VERA_ADDRX_H = (char*)0x9f22; +char const VERA_INC_0 = 0x00; +char const VERA_INC_1 = 0x10; +char const VERA_INC_2 = 0x20; +char const VERA_INC_4 = 0x30; +char const VERA_INC_8 = 0x40; +char const VERA_INC_16 = 0x50; +char const VERA_INC_32 = 0x60; +char const VERA_INC_64 = 0x70; +char const VERA_INC_128 = 0x80; +char const VERA_INC_256 = 0x90; +char const VERA_INC_512 = 0xa0; +char const VERA_INC_40 = 0xb0; +char const VERA_INC_80 = 0xc0; +char const VERA_INC_160 = 0xd0; +char const VERA_INC_320 = 0xe0; +char const VERA_INC_640 = 0xf0; +char const VERA_DECR_0 = 0x08; +char const VERA_DECR_1 = 0x18; +char const VERA_DECR_2 = 0x28; +char const VERA_DECR_4 = 0x38; +char const VERA_DECR_8 = 0x48; +char const VERA_DECR_16 = 0x58; +char const VERA_DECR_32 = 0x68; +char const VERA_DECR_64 = 0x78; +char const VERA_DECR_128 = 0x88; +char const VERA_DECR_256 = 0x98; +char const VERA_DECR_512 = 0xa8; +char const VERA_DECR_40 = 0xb8; +char const VERA_DECR_80 = 0xc8; +char const VERA_DECR_160 = 0xd8; +char const VERA_DECR_320 = 0xe8; +char const VERA_DECR_640 = 0xf8; /// $9F23 DATA0 VRAM Data port 0 -char * const VERA_DATA0 = (char*)0x9f23; +char* const VERA_DATA0 = (char*)0x9f23; /// $9F24 DATA1 VRAM Data port 1 -char * const VERA_DATA1 = (char*)0x9f24; +char* const VERA_DATA1 = (char*)0x9f24; /// $9F25 CTRL Control /// Bit 7: Reset /// Bit 1: DCSEL /// Bit 2: ADDRSEL -char * const VERA_CTRL = (char*)0x9f25; -const char VERA_DCSEL = 2; -const char VERA_ADDRSEL = 1; +char* const VERA_CTRL = (char*)0x9f25; +char const VERA_DCSEL = 2; +char const VERA_ADDRSEL = 1; /// $9F26 IEN Interrupt Enable /// Bit 7: IRQ line (8) /// Bit 3: AFLOW /// Bit 2: SPRCOL /// Bit 1: LINE /// Bit 0: VSYNC -char * const VERA_IEN = (char*)0x9f26; -const char VERA_AFLOW = 8; -const char VERA_SPRCOL = 4; -const char VERA_LINE = 2; -const char VERA_VSYNC = 1; +char* const VERA_IEN = (char*)0x9f26; +char const VERA_AFLOW = 8; +char const VERA_SPRCOL = 4; +char const VERA_LINE = 2; +char const VERA_VSYNC = 1; /// $9F27 ISR Interrupt Status /// Interrupts will be generated for the interrupt sources set in the lower 4 bits of IEN. ISR will indicate the interrupts that have occurred. /// Writing a 1 to one of the lower 3 bits in ISR will clear that interrupt status. AFLOW can only be cleared by filling the audio FIFO for at least 1/4. @@ -102,12 +88,12 @@ const char VERA_VSYNC = 1; /// Bit 2: SPRCOL /// Bit 1: LINE /// Bit 0: VSYNC -char * const VERA_ISR = (char*)0x9f27; +char* const VERA_ISR = (char*)0x9f27; /// $9F28 IRQLINE_L IRQ line (7:0) /// IRQ_LINE specifies at which line the LINE interrupt will be generated. /// Note that bit 8 of this value is present in the IEN register. /// For interlaced modes the interrupt will be generated each field and the bit 0 of IRQ_LINE is ignored. -char * const VERA_IRQLINE_L = (char*)0x9f28; +char* const VERA_IRQLINE_L = (char*)0x9f28; /// $9F29 DC_VIDEO (DCSEL=0) /// Bit 7: Current Field Read-only bit which reflects the active interlaced field in composite and RGB modes. (0: even, 1: odd) @@ -116,58 +102,61 @@ char * const VERA_IRQLINE_L = (char*)0x9f28; /// Bit 4: Layer0 Enable Enable output from the Layer0 renderer /// Bit 2: Chroma Disable Setting 'Chroma Disable' disables output of chroma in NTSC composite mode and will give a better picture on a monochrome display. (Setting this bit will also disable the chroma output on the S-video output.) /// Bit 0-1: Output Mode 0: Video disabled, 1: VGA output, 2: NTSC composite, 3: RGB interlaced, composite sync (via VGA connector) -char * const VERA_DC_VIDEO = (char*)0x9f29; -const char VERA_SPRITES_ENABLE = 0x40; -const char VERA_LAYER1_ENABLE = 0x20; -const char VERA_LAYER0_ENABLE = 0x10; -const char VERA_CROMA_DISABLE = 0x04; -const char VERA_OUTPUT_DISABLE = 0x00; -const char VERA_OUTPUT_VGA = 0x01; -const char VERA_OUTPUT_NTSC = 0x02; -const char VERA_OUTPUT_RGB = 0x03; +char* const VERA_DC_VIDEO = (char*)0x9f29; +char const VERA_SPRITES_ENABLE = 0x40; +char const VERA_SPRITES_COLLISIONS = 0x04; +char const VERA_LAYER1_ENABLE = 0x20; +char const VERA_LAYER0_ENABLE = 0x10; +char const VERA_CROMA_DISABLE = 0x04; +char const VERA_OUTPUT_DISABLE = 0x00; +char const VERA_OUTPUT_VGA = 0x01; +char const VERA_OUTPUT_NTSC = 0x02; +char const VERA_OUTPUT_RGB = 0x03; /// $9F2A DC_HSCALE (DCSEL=0) Active Display H-Scale -char * const VERA_DC_HSCALE = (char*)0x9f2a; +char* const VERA_DC_HSCALE = (char*)0x9f2a; /// $9F2B DC_VSCALE (DCSEL=0) Active Display V-Scale -char * const VERA_DC_VSCALE = (char*)0x9f2b; +char* const VERA_DC_VSCALE = (char*)0x9f2b; /// $9F2C DC_BORDER (DCSEL=0) Border Color -char * const VERA_DC_BORDER = (char*)0x9f2c; +char* const VERA_DC_BORDER = (char*)0x9f2c; /// $9F29 DC_HSTART (DCSEL=1) Active Display H-Start (9:2) -char * const VERA_DC_HSTART = (char*)0x9f29; +char* const VERA_DC_HSTART = (char*)0x9f29; /// $9F2A DC_HSTOP (DCSEL=1) Active Display H-Stop (9:2) -char * const VERA_DC_HSTOP = (char*)0x9f2a; +char* const VERA_DC_HSTOP = (char*)0x9f2a; /// $9F2B DC_VSTART (DCSEL=1) Active Display V-Start (8:1) -char * const VERA_DC_VSTART = (char*)0x9f2b; +char* const VERA_DC_VSTART = (char*)0x9f2b; /// $9F2C DC_VSTOP (DCSEL=1) Active Display V-Stop (8:1) -char * const VERA_DC_VSTOP = (char*)0x9f2c; +char* const VERA_DC_VSTOP = (char*)0x9f2c; /// Configuration work tables /// Bit 4-5. Map Width (0:32 tiles, 1:64 tiles, 2:128 tiles, 3:256 tiles) -byte const VERA_LAYER_WIDTH_32 = 0x00; -byte const VERA_LAYER_WIDTH_64 = 0x10; -byte const VERA_LAYER_WIDTH_128 = 0x20; -byte const VERA_LAYER_WIDTH_256 = 0x30; -byte const VERA_LAYER_WIDTH_MASK = 0x30; -word const VERA_LAYER_WIDTH[4] = {32, 64, 128, 256}; +char const VERA_LAYER_WIDTH_32 = 0x00; +char const VERA_LAYER_WIDTH_64 = 0x10; +char const VERA_LAYER_WIDTH_128 = 0x20; +char const VERA_LAYER_WIDTH_256 = 0x30; +char const VERA_LAYER_WIDTH_MASK = 0x30; +unsigned int const VERA_LAYER_WIDTH[4] = {32, 64, 128, 256}; /// Bit 6-7: Map Height (0:32 tiles, 1:64 tiles, 2:128 tiles, 3:256 tiles) -byte const VERA_LAYER_HEIGHT_32 = 0x00; -byte const VERA_LAYER_HEIGHT_64 = 0x40; -byte const VERA_LAYER_HEIGHT_128 = 0x80; -byte const VERA_LAYER_HEIGHT_256 = 0xC0; -byte const VERA_LAYER_HEIGHT_MASK = 0xC0; -word const VERA_LAYER_HEIGHT[4] = {32, 64, 128, 256}; +char const VERA_LAYER_HEIGHT_32 = 0x00; +char const VERA_LAYER_HEIGHT_64 = 0x40; +char const VERA_LAYER_HEIGHT_128 = 0x80; +char const VERA_LAYER_HEIGHT_256 = 0xC0; +char const VERA_LAYER_HEIGHT_MASK = 0xC0; +unsigned int const VERA_LAYER_HEIGHT[4] = {32, 64, 128, 256}; + +const unsigned int VERA_LAYER_SKIP[4] = {64, 128, 256, 512}; /// Bit 0-1: Color Depth (0: 1 bpp, 1: 2 bpp, 2: 4 bpp, 3: 8 bpp) -byte const VERA_LAYER_COLOR_DEPTH_1BPP = 0x00; -byte const VERA_LAYER_COLOR_DEPTH_2BPP = 0x01; -byte const VERA_LAYER_COLOR_DEPTH_4BPP = 0x02; -byte const VERA_LAYER_COLOR_DEPTH_8BPP = 0x03; -byte const VERA_LAYER_COLOR_DEPTH_MASK = 0x03; -byte const VERA_LAYER_COLOR_DEPTH[4] = {1, 2, 4, 8}; +char const VERA_LAYER_COLOR_DEPTH_1BPP = 0x00; +char const VERA_LAYER_COLOR_DEPTH_2BPP = 0x01; +char const VERA_LAYER_COLOR_DEPTH_4BPP = 0x02; +char const VERA_LAYER_COLOR_DEPTH_8BPP = 0x03; +char const VERA_LAYER_COLOR_DEPTH_MASK = 0x03; +char const VERA_LAYER_COLOR_DEPTH[4] = {1, 2, 4, 8}; /// $9F2D L0_CONFIG Layer 0 Configuration -char * const VERA_L0_CONFIG = (char*)0x9f2d; +char* const VERA_L0_CONFIG = (char*)0x9f2d; /// Bit 2: Bitmap Mode (0:tile mode, 1: bitmap mode) char const VERA_LAYER_CONFIG_MODE_TILE = 0x00; char const VERA_LAYER_CONFIG_MODE_BITMAP = 0x04; @@ -175,71 +164,73 @@ char const VERA_LAYER_CONFIG_MODE_BITMAP = 0x04; char const VERA_LAYER_CONFIG_16C = 0x00; char const VERA_LAYER_CONFIG_256C = 0x08; /// $9F2E L0_MAPBASE Layer 0 Map Base Address (16:9) -char * const VERA_L0_MAPBASE = (char*)0x9f2e; +char* const VERA_L0_MAPBASE = (char*)0x9f2e; /// $9F2F L0_TILEBASE Layer 0 Tile Base /// Bit 2-7: Tile Base Address (16:11) /// Bit 1: Tile Height (0:8 pixels, 1:16 pixels) -byte const VERA_TILEBASE_WIDTH_8 = 0x00; -byte const VERA_TILEBASE_WIDTH_16 = 0x01; -byte const VERA_TILEBASE_WIDTH_MASK = 0x01; -byte const VERA_TILEBASE_HEIGHT_8 = 0x00; -byte const VERA_TILEBASE_HEIGHT_16 = 0x02; -byte const VERA_TILEBASE_HEIGHT_MASK = 0x02; -byte const VERA_LAYER_TILEBASE_MASK = 0xfC; +char const VERA_TILEBASE_WIDTH_8 = 0x00; +char const VERA_TILEBASE_WIDTH_16 = 0x01; +char const VERA_TILEBASE_WIDTH_MASK = 0x01; +char const VERA_TILEBASE_HEIGHT_8 = 0x00; +char const VERA_TILEBASE_HEIGHT_16 = 0x02; +char const VERA_TILEBASE_HEIGHT_MASK = 0x02; +char const VERA_LAYER_TILEBASE_MASK = 0xfC; /// Bit 0: Tile Width (0:8 pixels, 1:16 pixels) -char * const VERA_L0_TILEBASE = (char*)0x9f2f; +char* const VERA_L0_TILEBASE = (char*)0x9f2f; /// $9F30 L0_HSCROLL_L Layer 0 H-Scroll (7:0) -char * const VERA_L0_HSCROLL_L = (char*)0x9f30; +char* const VERA_L0_HSCROLL_L = (char*)0x9f30; /// $9F31 L0_HSCROLL_H Layer 0 H-Scroll (11:8) -char * const VERA_L0_HSCROLL_H = (char*)0x9f31; +char* const VERA_L0_HSCROLL_H = (char*)0x9f31; /// $9F32 L0_VSCROLL_L Layer 0 V-Scroll (7:0) -char * const VERA_L0_VSCROLL_L = (char*)0x9f32; +char* const VERA_L0_VSCROLL_L = (char*)0x9f32; /// $9F33 L0_VSCROLL_H Layer 0 V-Scroll (11:8) -char * const VERA_L0_VSCROLL_H = (char*)0x9f33; +char* const VERA_L0_VSCROLL_H = (char*)0x9f33; /// $9F34 L1_CONFIG Layer 1 Configuration -char * const VERA_L1_CONFIG = (char*)0x9f34; +char* const VERA_L1_CONFIG = (char*)0x9f34; /// $9F35 L1_MAPBASE Layer 1 Map Base Address (16:9) -char * const VERA_L1_MAPBASE = (char*)0x9f35; +char* const VERA_L1_MAPBASE = (char*)0x9f35; /// $9F36 L1_TILEBASE Layer 1 Tile Base /// Bit 2-7: Tile Base Address (16:11) /// Bit 1: Tile Height (0:8 pixels, 1:16 pixels) /// Bit 0: Tile Width (0:8 pixels, 1:16 pixels) -char * const VERA_L1_TILEBASE = (char*)0x9f36; +char* const VERA_L1_TILEBASE = (char*)0x9f36; /// $9F37 L1_HSCROLL_L Layer 1 H-Scroll (7:0) -char * const VERA_L1_HSCROLL_L = (char*)0x9f37; +char* const VERA_L1_HSCROLL_L = (char*)0x9f37; /// $9F38 L1_HSCROLL_H Layer 1 H-Scroll (11:8) -char * const VERA_L1_HSCROLL_H = (char*)0x9f38; +char* const VERA_L1_HSCROLL_H = (char*)0x9f38; /// $9F39 L1_VSCROLL_L Layer 1 V-Scroll (7:0) -char * const VERA_L1_VSCROLL_L = (char*)0x9f39; +char* const VERA_L1_VSCROLL_L = (char*)0x9f39; /// $9F3A L1_VSCROLL_H Layer 1 V-Scroll (11:8) -char * const VERA_L1_VSCROLL_H = (char*)0x9f3a; +char* const VERA_L1_VSCROLL_H = (char*)0x9f3a; /// $9F3B AUDIO_CTRL /// Bit 7: FIFO Full / FIFO Reset /// Bit 5: 16-Bit /// Bit 4: Stereo /// Bit 0-3: PCM Volume -char * const VERA_AUDIO_CTRL = (char*)0x9f3b; +char* const VERA_AUDIO_CTRL = (char*)0x9f3b; /// $9F3C AUDIO_RATE PCM Sample Rate -char * const VERA_AUDIO_RATE = (char*)0x9f3c; +char* const VERA_AUDIO_RATE = (char*)0x9f3c; /// $9F3D AUDIO_DATA Audio FIFO data (write-only) -char * const VERA_AUDIO_DATA = (char*)0x9f3d; +char* const VERA_AUDIO_DATA = (char*)0x9f3d; /// $9F3E SPI_DATA SPI Data -char * const VERA_SPI_DATA = (char*)0x9f3e; +char* const VERA_SPI_DATA = (char*)0x9f3e; /// $9F3F SPI_CTRL SPI Control /// Bit 7: Busy /// Bit 1: Slow clock /// Bit 0: Select -char * const VERA_SPI_CTRL = (char*)0x9f3f; +char* const VERA_SPI_CTRL = (char*)0x9f3f; -/// VERA Palette address in VRAM $1FA00 - $1FBFF -/// 256 entries of 2 bytes -/// byte 0 bits 4-7: Green -/// byte 0 bits 0-3: Blue -/// byte 1 bits 0-3: Red -const unsigned long VERA_PALETTE = 0x1fa00; +// VERA Palette address in VRAM $1FA00 - $1FBFF +// 256 entries of 2 bytes +// byte 0 bits 4-7: Green +// byte 0 bits 0-3: Blue +// byte 1 bits 0-3: Red +char const VERA_PALETTE_BANK = 0x1; +char* const VERA_PALETTE_PTR = (char*)0xFA00; +const unsigned long VERA_PALETTE = 0x1FA00; /// Sprite Attributes address in VERA VRAM $1FC00 - $1FFFF -const unsigned long VERA_SPRITE_ATTR = 0x1fc00; +const unsigned long VERA_SPRITE_ATTR = 0x1FC00; /// The VERA structure of a sprite (8 bytes) /// 128*8 bytes located at $1FC00-$1FFFF @@ -265,7 +256,37 @@ struct VERA_SPRITE { char CTRL2; }; -/// 4BPP sprite mode (add to VERA_SPRITE.ADDR to enable) -const unsigned int VERA_SPRITE_4BPP = 0x0000; -/// 8BPP sprite mode (add to VERA_SPRITE.ADDR to enable) -const unsigned int VERA_SPRITE_8BPP = 0x8000; +// xBPP sprite modes +#define VERA_SPRITE_4BPP 0x00 +#define VERA_SPRITE_8BPP 0x80 +#define VERA_SPRITE_MASKBPP 0x80 + +// Sprite flip +#define VERA_SPRITE_HFLIP 0x01 // Horizontal flip of sprite +#define VERA_SPRITE_VFLIP 0x02 // Vertical flip of sprite +#define VERA_SPRITE_NFLIP 0x00 // No flip of sprite + +// Sprite ZDepth +#define VERA_SPRITE_ZDEPTH_DISABLED 0x00 +#define VERA_SPRITE_ZDEPTH_BETWEEN_BACKGROUND_AND_LAYER0 0x04 +#define VERA_SPRITE_ZDEPTH_BETWEEN_LAYER0_AND_LAYER1 0x08 +#define VERA_SPRITE_ZDEPTH_IN_FRONT 0x0C +#define VERA_SPRITE_ZDEPTH_MASK 0x0C + +// Sprite width +#define VERA_SPRITE_WIDTH_8 0x00 +#define VERA_SPRITE_WIDTH_16 0x10 +#define VERA_SPRITE_WIDTH_32 0x20 +#define VERA_SPRITE_WIDTH_64 0x30 +#define VERA_SPRITE_WIDTH_MASK 0x30 + +// Sprite height +#define VERA_SPRITE_HEIGHT_8 0x00 +#define VERA_SPRITE_HEIGHT_16 0x40 +#define VERA_SPRITE_HEIGHT_32 0x80 +#define VERA_SPRITE_HEIGHT_64 0xC0 +#define VERA_SPRITE_HEIGHT_MASK 0xC0 + +char const VERA_SPRITE_PALETTE_OFFSET_MASK = 0x0F; + +char const VERA_SPRITE_COLLISION_MASK = 0xF0; diff --git a/src/main/kc/include/cx16-veramem.h b/src/main/kc/include/cx16-veramem.h new file mode 100644 index 000000000..438112433 --- /dev/null +++ b/src/main/kc/include/cx16-veramem.h @@ -0,0 +1,50 @@ +// Implements functions for static and dynamic memory management for VERA VRAM memory. + +const byte VERA_HEAP_STATIC = 0; +const byte VERA_HEAP_DYNAMIC = 1; + +struct vera_heap { + word address; + word size; + struct vera_heap *next; + struct vera_heap *prev; +}; + +struct vera_heap_segment { + dword size; + dword ceil_address; + dword next_address; + dword base_address; + struct vera_heap *head_block; + struct vera_heap *tail_block; + struct vera_heap *ceil_block; +}; + +word const VERA_HEAP_EMPTY = 0x0001; +word const VERA_HEAP_ADDRESS_16 = 0x0002; +word const VERA_HEAP_SIZE_16 = 0x0004; + +word const VERA_HEAP_SIZE_MASK = 0xFFE0; + +// byte vera_block_malloc(dword address, dword size); +// byte vera_block_free(byte block); + +dword vera_heap_segment_init( byte segmentid, dword base, dword size ); +dword vera_heap_segment_ceiling(byte segmentid); + +void vera_heap_base_address_set(struct vera_heap_segment *segment, dword base_address); +void vera_heap_ceil_address_set(struct vera_heap_segment *segment, dword ceil_address); +dword vera_heap_address(struct vera_heap_segment *segment, dword size); +dword vera_heap_block_address_get(struct vera_heap *block); +dword vera_heap_block_size_get(struct vera_heap *block); +word vera_heap_block_is_empty(struct vera_heap *block); +void vera_heap_block_address_set(struct vera_heap *block, dword *address); +void vera_heap_block_size_set(struct vera_heap *block, dword *size); +void vera_heap_block_empty_set(struct vera_heap *block, byte empty); +void vera_heap_ram_bank_set(byte ram_bank); + +struct vera_heap *vera_heap_block_find(struct vera_heap_segment *segment, struct vera_heap *block); +struct vera_heap *vera_heap_block_free_find(struct vera_heap_segment *segment, dword size); + +dword vera_heap_malloc(byte segmentid, word size); +dword vera_heap_free(byte segmentid, struct vera_heap *block); \ No newline at end of file diff --git a/src/main/kc/include/cx16.h b/src/main/kc/include/cx16.h index e5ff96098..e8ab9fc8c 100644 --- a/src/main/kc/include/cx16.h +++ b/src/main/kc/include/cx16.h @@ -1,39 +1,58 @@ -/// @file -/// Commander X16 -/// -/// https://www.commanderx16.com/forum/index.php?/about-faq/ -/// https://github.com/commanderx16/x16-docs/blob/master/Commander%20X16%20Programmer's%20Reference%20Guide.md +/** + * @file cx16.h + * @author Jesper Gravgaard / Sven Van de Velde + * @brief Contains functions to control the features of the Commander X16. + * Commander X16 Functions. + * https://www.commanderx16.com/forum/index.php?/about-faq/ + * https://github.com/commanderx16/x16-docs/blob/master/Commander%20X16%20Programmer's%20Reference%20Guide.md + * @version 0.2 + * @date 2022-01-29 + * + * @copyright Copyright (c) 2022 + * + */ + + + #ifndef __CX16__ #error "Target platform must be cx16" #endif -#include + +#include #include -/// The VIA#1: ROM/RAM Bank Control -/// Port A Bits 0-7 RAM bank -/// Port B Bits 0-2 ROM bank -/// Port B Bits 3-7 [TBD] -struct MOS6522_VIA * const VIA1 = (struct MOS6522_VIA *)0x9f60; -/// The VIA#2: Keyboard/Joy/Mouse -/// Port A Bit 0 KBD PS/2 DAT -/// Port A Bit 1 KBD PS/2 CLK -/// Port A Bit 2 [TBD] -/// Port A Bit 3 JOY1/2 LATCH -/// Port A Bit 4 JOY1 DATA -/// Port A Bit 5 JOY1/2 CLK -/// Port A Bit 6 JOY2 DATA -/// Port A Bit 7 [TBD] -/// Port B Bit 0 MOUSE PS/2 DAT -/// Port B Bit 1 MOUSE PS/2 CLK -/// Port B Bits 2-7 [TBD] -/// NOTE: The pin assignment of the NES/SNES controller is likely to change. -struct MOS6522_VIA * const VIA2 = (struct MOS6522_VIA *)0x9f70; +/** + * @brief The VIA#1: ROM/RAM Bank Control + * Port A Bits 0-7 RAM bank + * Port B Bits 0-2 ROM bank + * Port B Bits 3-7 [TBD] * * * * * + */ +struct MOS6522_VIA * const VIA1 = (struct MOS6522_VIA*)0x9f60; + +/** + * @brief The VIA#2: Peripherals control + * Port A Bit 0 KBD PS/2 DAT + * Port A Bit 1 KBD PS/2 CLK + * Port A Bit 2 [TBD] + * Port A Bit 3 JOY1/2 LATCH + * Port A Bit 4 JOY1 DATA + * Port A Bit 5 JOY1/2 CLK + * Port A Bit 6 JOY2 DATA + * Port A Bit 7 [TBD] + * Port B Bit 0 MOUSE PS/2 DAT + * Port B Bit 1 MOUSE PS/2 CLK + * Port B Bits 2-7 [TBD] + * kNOTE: The pin assignment of the NES/SNES controller is likely to change. + */ +struct MOS6522_VIA * const VIA2 = (struct MOS6522_VIA*)0x9f70; + +__export volatile __address(0x00) unsigned char BRAM = 0; +__export volatile __address(0x01) unsigned char BROM = 4; /// Interrupt Vectors /// https://github.com/commanderx16/x16-emulator/wiki/(ASM-Programming)-Interrupts-and-interrupt-handling -/// Pointer to interrupt function -typedef void (*IRQ_TYPE)(void); +// The vector used when the KERNAL serves IRQ interrupts /// $FFFE (ROM) Universal interrupt vector - The vector used when the HARDWARE serves IRQ interrupts IRQ_TYPE* const HARDWARE_IRQ = (IRQ_TYPE*)0xfffe; @@ -42,74 +61,53 @@ IRQ_TYPE* const KERNEL_IRQ = (IRQ_TYPE*)0x0314; /// $0316 (RAM) BRK vector - The vector used when the KERNAL serves IRQ caused by a BRK IRQ_TYPE* const KERNEL_BRK = (IRQ_TYPE*)0x0316; +void cx16_kernal_irq(IRQ_TYPE irq); + +byte const CX16_ROM_KERNAL = 0; +byte const CX16_ROM_BASIC = 4; /// VRAM Address of the default screen -char * const DEFAULT_SCREEN = (char*)0x0000; +vram_offset_t DEFAULT_SCREEN = (vram_offset_t)0xB000; /// VRAM Bank (0/1) of the default screen char * const DEFAULT_SCREEN_VBANK = (char*)0; -/// Put a single byte into VRAM. -/// Uses VERA DATA0 -/// @param vbank Which 64K VRAM bank to put data into (0/1) -/// @param vaddr The address in VRAM -/// @param data The data to put into VRAM -void vpoke(char vbank, char* vaddr, char data); -/// Read a single byte from VRAM. -/// Uses VERA DATA0 -/// @param bank Which 64K VRAM bank to put data into (0/1) -/// @param addr The address in VRAM -/// @param returns The data to put into VRAM -char vpeek(char vbank, char* vaddr); +/// The colors of the C64 +const char BLACK = 0x0; +const char WHITE = 0x1; +const char RED = 0x2; +const char CYAN = 0x3; +const char PURPLE = 0x4; +const char GREEN = 0x5; +const char BLUE = 0x6; +const char YELLOW = 0x7; +const char ORANGE = 0x8; +const char BROWN = 0x9; +const char PINK = 0xa; +const char DARK_GREY= 0xb; +const char GREY = 0xc; +const char LIGHT_GREEN = 0xd; +const char LIGHT_BLUE = 0xe; +const char LIGHT_GREY = 0xf; -/// Copy block of memory (from RAM to VRAM) -/// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination in VRAM. -/// @param vbank Which 64K VRAM bank to put data into (0/1) -/// @param vdest The destination address in VRAM -/// @param src The source address in RAM -/// @param num The number of bytes to copy -void memcpy_to_vram(char vbank, void* vdest, void* src, unsigned int num ); -/// Copy block of memory (from banked RAM to VRAM) -/// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination in VRAM. -/// @param vdest absolute address in VRAM -/// @param src absolute address in the banked RAM of the CX16. -/// @param num dword of the number of bytes to copy -/// Note: This function can switch RAM bank during copying to copy data from multiple RAM banks. -void memcpy_bank_to_vram(unsigned long vdest, unsigned long src, unsigned long num ); +inline void bank_push_set_bram(bram_bank_t bank); +inline void bank_push_bram(); +inline void bank_set_bram(bram_bank_t bank); +inline void bank_pull_bram(); +inline bram_bank_t bank_get_bram(); +inline bram_ptr_t bank_bram_ptr_inc(char bank, char* sptr, unsigned int inc); +void bank_set_brom(brom_bank_t bank); +inline brom_bank_t bank_get_brom(); -/// Copy block of memory (from VRAM to VRAM) -/// Copies the values from the location pointed by src to the location pointed by dest. -/// The method uses the VERA access ports 0 and 1 to copy data from and to in VRAM. -/// @param src_bank 64K VRAM bank number to copy from (0/1). -/// @param src pointer to the location to copy from. Note that the address is a 16 bit value! -/// @param src_increment the increment indicator, VERA needs this because addressing increment is automated by VERA at each access. -/// @param dest_bank 64K VRAM bank number to copy to (0/1). -/// @param dest pointer to the location to copy to. Note that the address is a 16 bit value! -/// @param dest_increment the increment indicator, VERA needs this because addressing increment is automated by VERA at each access. -/// @param num The number of bytes to copy -void memcpy_in_vram(char dest_bank, void *dest, char dest_increment, char src_bank, void *src, char src_increment, unsigned int num ); +void vpoke(vram_bank_t vbank, vram_offset_t vaddr, char data); +char vpeek(vram_bank_t vbank, vram_offset_t vaddr); -/// Set block of memory in VRAM to a value . -/// Sets num bytes to a value to the memory block pointed to by destination in VRAM. -/// @param vbank Which 64K VRAM bank to put data into (0/1) -/// @param vdest The destination address in VRAM -/// @param data The value to set the vram with. -/// @param num The number of bytes to set -void memset_vram(char vbank, void* vdest, char data, unsigned long num ); - -/// Set block of memory in VRAM to a word value . -/// Sets num words to a value to the memory block pointed to by destination in VRAM. -/// @param vbank Which 64K VRAM bank to put data into (0/1) -/// @param vdest The destination address in VRAM -/// @param data The value to set the vram with. -/// @param num The number of bytes to set -void memset_vram_word(char vbank, void* vdest, unsigned int data, unsigned long num ); - -/// Load a file into one of the 256 8KB RAM banks. -/// @param device The device to load from -/// @param filename The file name -/// @param address: The absolute address in banked memory to load the file too -/// @return 0xff: Success, other: Kernal Error Code (https://commodore.ca/manuals/pdfs/commodore_error_messages.pdf) -/// Note: This function only works if the entire file fits within the selected bank. The function cannot load to multiple banks. -char load_to_bank( char device, char* filename, unsigned long address); \ No newline at end of file +void memcpy_vram_ram(vram_bank_t dbank_vram, vram_offset_t doffset_vram, ram_ptr_t sptr_ram, unsigned int num); +void memcpy_ram_vram(ram_ptr_t dptr, vram_bank_t sbank_vram, vram_offset_t soffset_vram, unsigned int num); +void memcpy_vram_bram(vram_bank_t dbank_vram, vram_offset_t doffset_vram, bram_bank_t sbank_bram, bram_ptr_t sptr_bram, unsigned int num); +void memcpy8_vram_vram(vram_bank_t dbank_vram, vram_offset_t doffset_vram, vram_bank_t sbank_vram, vram_offset_t soffset_vram, unsigned char num8); +inline void memcpy_vram_bram_fast(vram_bank_t dbank_vram, vram_offset_t doffset_vram, bram_bank_t sbank_bram, bram_ptr_t sptr_bram, unsigned char num); +void memcpy_vram_vram(vram_bank_t dbank_vram, vram_offset_t doffset_vram, vram_bank_t sbank_vram, vram_offset_t soffset_vram, unsigned int num16); +void memcpy_vram_vram_inc(vram_bank_t dbank_vram, vram_offset_t doffset_vram, unsigned char dinc, vram_bank_t sbank_vram, vram_offset_t soffset_vram, unsigned char sinc, unsigned int num ); +void memset_vram(vram_bank_t dbank_vram, vram_offset_t doffset_vram, unsigned char data, unsigned int num); diff --git a/src/main/kc/include/errno.h b/src/main/kc/include/errno.h new file mode 100644 index 000000000..939f5a0fa --- /dev/null +++ b/src/main/kc/include/errno.h @@ -0,0 +1,17 @@ +/** + * @file errno.h + * @author Sven Van de Velde (sven.van.de.velde@telenet.be) + * @brief Contains the POSIX implementation of errno, which contains the last error detected. + * @version 0.1 + * @date 2023-03-18 + * + * @copyright Copyright (c) 2023 + * + */ + +/// @brief We POSIX standard specifies errno to be an int. We refer to it as part of the header file. +/// However, for practical purposes we don't keep errno but we keep a char array containing the last meaningful message. +/// Having the translate the error from errno would be too much memory consuming. +extern char __errno_error[32]; + +extern int __errno; \ No newline at end of file diff --git a/src/main/kc/include/kernal.h b/src/main/kc/include/kernal.h new file mode 100644 index 000000000..80934be8a --- /dev/null +++ b/src/main/kc/include/kernal.h @@ -0,0 +1,47 @@ +/** + * @file kernal.h + * @author your name (you@domain.com) + * @brief Most common CBM Kernal calls with it's dialects in the different CBM kernal family platforms. + * Please refer to http://sta.c64.org/cbm64krnfunc.html for the list of standard CBM C64 kernal functions. + * + * @version 1.0 + * @date 2023-03-22 + * + * @copyright Copyright (c) 2023 + * + */ + +const unsigned int CBM_SETNAM = 0xFFBD; ///< Set the name of a file. +const unsigned int CBM_SETLFS = 0xFFBA; ///< Set the logical file. +const unsigned int CBM_OPEN = 0xFFC0; ///< Open the file for the current logical file. +const unsigned int CBM_CHKIN = 0xFFC6; ///< Set the logical channel for input. +const unsigned int CBM_READST = 0xFFB7; ///< Check I/O errors. +const unsigned int CBM_CHRIN = 0xFFCF; ///< Read a character from the current channel for input. +const unsigned int CBM_GETIN = 0xFFE4; ///< Scan a character from the keyboard. +const unsigned int CBM_CLOSE = 0xFFC3; ///< Close a logical file. +const unsigned int CBM_CLRCHN = 0xFFCC; ///< Close all logical files. +const unsigned int CBM_LOAD = 0xFFD5; ///< Load a logical file. +const unsigned int CBM_PLOT = 0xFFF0; ///< Set or get current cursor location. +const unsigned int CBM_CHROUT = 0xFFD2; ///< Output a character. + + +/* inline */ void cbm_k_setlfs(char channel, char device, char command); +/* inline */ void cbm_k_setnam(char* filename); +/* inline */ void cbm_k_open(); +/* inline */ void cbm_k_close(char channel); +/* inline */ unsigned char cbm_k_chkin(char channel); +/* inline */ unsigned char cbm_k_chrin(); +/* inline */ void cbm_k_clrchn(); +/* inline */ unsigned char cbm_k_getin(); +/* inline */ unsigned char cbm_k_readst(); +/* inline */ unsigned char cbm_k_load(char* address, char verify); +/* inline */ unsigned int cbm_k_plot_get(); +/* inline */ void cbm_k_plot_set(unsigned char x, unsigned char y); +/* inline */ void cbm_k_chrout(char c); + + + + +#if defined(__CX16__) +#include +#endif diff --git a/src/main/kc/include/pet-kernal.h b/src/main/kc/include/pet-kernal.h new file mode 100644 index 000000000..03a110c2e --- /dev/null +++ b/src/main/kc/include/pet-kernal.h @@ -0,0 +1,10 @@ +/** + * @file pet-kernal.h + * @author your name (you@domain.com) + * @brief + * @version 0.1 + * @date 2022-12-13 + * + * @copyright Copyright (c) 2022 + * + */ \ No newline at end of file diff --git a/src/main/kc/include/pet.h b/src/main/kc/include/pet.h new file mode 100644 index 000000000..f096c4fdd --- /dev/null +++ b/src/main/kc/include/pet.h @@ -0,0 +1,32 @@ +/// @file +/// Commodore 64 Registers and Constants +#ifndef __PET8032__ +#error "Target platform must be PET" +#endif +#include +#include +#include + + +/// Default address of screen character matrix +char * const DEFAULT_SCREEN = (char*)0x8000; +/// Default address of the chargen font (upper case) +char * const DEFAULT_FONT_UPPER = (char*)0x1000; +/// Default address of the chargen font (mixed case) +char * const DEFAULT_FONT_MIXED = (char*)0x1800; + +/// Pointer to interrupt function +typedef void (*IRQ_TYPE)(void); + +/// The vector used when the KERNAL serves IRQ interrupts +IRQ_TYPE * const KERNEL_IRQ = (IRQ_TYPE*)0x0314; +/// The vector used when the KERNAL serves NMI interrupts +IRQ_TYPE * const KERNEL_NMI = (IRQ_TYPE*)0x0318; +/// The vector used when the HARDWARE serves IRQ interrupts +IRQ_TYPE * const HARDWARE_IRQ = (IRQ_TYPE*)0xfffe; + +/// The colors of the C64 +const char BLACK = 0x0; +const char WHITE = 0x1; + + diff --git a/src/main/kc/include/stdio.h b/src/main/kc/include/stdio.h index bf0e98238..dc284b7cb 100644 --- a/src/main/kc/include/stdio.h +++ b/src/main/kc/include/stdio.h @@ -2,5 +2,37 @@ /// Functions for performing input and output. #include +#include #include -#include \ No newline at end of file +#include + +#if defined(__CX16__) // For the moment only supported for the CX16 ... + + #ifndef __STDIO_FILELEN + #define __STDIO_FILELEN 32 + #endif + + #ifndef __STDIO_ERRORLEN + #define __STDIO_ERRORLEN 32 + #endif + + #ifndef __STDIO_FILECOUNT + #define __STDIO_FILECOUNT 4 + #endif + + typedef struct { + char filename[__STDIO_FILECOUNT*__STDIO_FILELEN]; + char channel[__STDIO_FILECOUNT]; + char device[__STDIO_FILECOUNT]; + char secondary[__STDIO_FILECOUNT]; + char status[__STDIO_FILECOUNT]; + } FILE; + + + + FILE *fopen(const char *path, const char *mode); + int fclose(FILE *stream); + unsigned int fgets(char *ptr, unsigned int size, FILE *stream); + int ferror(FILE *stream); + void perror(char* prefix); +#endif \ No newline at end of file diff --git a/src/main/kc/include/string.h b/src/main/kc/include/string.h index 8cd076d1f..cb78cc204 100644 --- a/src/main/kc/include/string.h +++ b/src/main/kc/include/string.h @@ -3,10 +3,12 @@ /// /// Functions to manipulate C strings and arrays. #include +#include /// Copy block of memory (forwards) /// Copies the values of num chars from the location pointed to by source directly to the memory block pointed to by destination. void* memcpy( void* destination, void* source, size_t num ); +char* memcpy_fast(char* destination, char* source, unsigned char num ); /// Move block of memory /// Copies the values of num chars from the location pointed by source to the memory block pointed by destination. Copying takes place as if an intermediate buffer were used, allowing the destination and source to overlap. @@ -14,6 +16,7 @@ void* memmove( void* destination, void* source, size_t num ); /// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. void *memset(void *str, char c, size_t num); +char* memset_fast(char* str, char c, unsigned char num); /// Compares the first n bytes of memory area str1 and memory area str2. /// @param str1 This is the pointer to a block of memory. @@ -27,6 +30,9 @@ int memcmp(const void *str1, const void *str2, size_t n); /// Copies the C string pointed by source into the array pointed by destination, including the terminating null character (and stopping at that point). char* strcpy( char* destination, char* source ); +/// Concatenates the C string pointed by source into the array pointed by destination, including the terminating null character (and stopping at that point). +char* strcat( char* destination, char* source ); + /// Copies up to n characters from the string pointed to, by src to dest. /// In a case where the length of src is less than that of n, the remainder of dest will be padded with null bytes. /// @param dst − This is the pointer to the destination array where the content is to be copied. @@ -60,4 +66,18 @@ int strcmp(const char *str1, const char *str2); /// @return if Return value < 0 then it indicates str1 is less than str2. /// if Return value > 0 then it indicates str2 is less than str1. /// if Return value = 0 then it indicates str1 is equal to str2. -int strncmp(const char *str1, const char *str2, size_t n); \ No newline at end of file +int strncmp(const char *str1, const char *str2, size_t n); + + +/** + * @brief The string-error function, strerror, + * is a C/C++ function which translates an error code, + * usually stored in the global variable errno, + * to a human-readable error message. + * + * However, the POSIX standard is not followed in kickc. strerror accepts the errno parameter, but it is not used. + * Instead strerror returns the last known error. + * This is done for performance reasons and pragmatism, not to make error handling too memory intensive. + * + */ +char* strerror(int errnum); diff --git a/src/main/kc/lib/conio-c128.c b/src/main/kc/lib/conio-c128.c new file mode 100644 index 000000000..be02b2733 --- /dev/null +++ b/src/main/kc/lib/conio-c128.c @@ -0,0 +1,63 @@ +// Commodore 64 conio.h implementation +#include +#include + +// The screen width +#define CONIO_WIDTH 40 +// The screen height +#define CONIO_HEIGHT 25 +// The text screen address +#ifndef CONIO_SCREEN_TEXT +#define CONIO_SCREEN_TEXT DEFAULT_SCREEN +#endif +// The color screen address +#ifndef CONIO_SCREEN_COLORS +#define CONIO_SCREEN_COLORS COLORRAM +#endif +// The default text color +#ifndef CONIO_TEXTCOLOR_DEFAULT +#define CONIO_TEXTCOLOR_DEFAULT LIGHT_BLUE +#endif + +// Use the shared CMB flat memory implementation +#include "conio-cbm-shared.c" + +// Initializer for conio.h on C128 +#pragma constructor_for(conio_c128_init, cputc, clrscr, cscroll) + +// Set initial cursor position +void conio_c128_init() { + // Position cursor at current line + char * const BASIC_CURSOR_LINE = (char*)0xD6; + char line = *BASIC_CURSOR_LINE; + if(line>=CONIO_HEIGHT) line=CONIO_HEIGHT-1; + gotoxy(0, line); +} + +// Return true if there's a key waiting, return false if not +unsigned char kbhit (void) { + // CIA#1 Port A: keyboard matrix columns and joystick #2 + char* const CIA1_PORT_A = (char*)0xdc00; + // CIA#1 Port B: keyboard matrix rows and joystick #1. + char* const CIA1_PORT_B = (char*)0xdc01; + *CIA1_PORT_A = 0; + return ~*CIA1_PORT_B; +} + +// Set the color for the background. The old color setting is returned. +unsigned char bgcolor(unsigned char color) { + // The background color register address + char * const CONIO_BGCOLOR = (char*)0xd021; + char old = *CONIO_BGCOLOR; + *CONIO_BGCOLOR = color; + return old; +} + +// Set the color for the border. The old color setting is returned. +unsigned char bordercolor(unsigned char color) { + // The border color register address + char * const CONIO_BORDERCOLOR = (char*)0xd020; + char old = *CONIO_BORDERCOLOR; + *CONIO_BORDERCOLOR = color; + return old; +} diff --git a/src/main/kc/lib/conio-cbm-shared.c b/src/main/kc/lib/conio-cbm-shared.c index 9b74bd8b3..05029fb5d 100644 --- a/src/main/kc/lib/conio-cbm-shared.c +++ b/src/main/kc/lib/conio-cbm-shared.c @@ -17,8 +17,12 @@ __ma char conio_cursor_x = 0; __ma char conio_cursor_y = 0; // The current text cursor line start __ma char *conio_line_text = CONIO_SCREEN_TEXT; + +#ifndef __PET8032__ // The current color cursor line start __ma char *conio_line_color = CONIO_SCREEN_COLORS; +#endif + // The current text color __ma char conio_textcolor = CONIO_TEXTCOLOR_DEFAULT; // Is a cursor whown when waiting for input (0: no, other: yes) @@ -30,19 +34,27 @@ __ma char conio_scroll_enable = 1; // clears the screen and moves the cursor to the upper left-hand corner of the screen. void clrscr(void) { char* line_text = CONIO_SCREEN_TEXT; + #ifndef __PET8032__ char* line_cols = CONIO_SCREEN_COLORS; + #endif for( char l=0;l -#include -#include - -// The screen width -#define CONIO_WIDTH conio_screen_width -// The screen height -#define CONIO_HEIGHT conio_screen_height -// The text screen base address, which is a 16:0 bit value in VERA VRAM. -// That is 128KB addressable space, thus 17 bits in total. -// CONIO_SCREEN_TEXT contains bits 15:0 of the address. -// CONIO_SCREEN_BANK contains bit 16, the the 64K memory bank in VERA VRAM (the upper 17th bit). -// !!! note that these values are not const for the cx16! -// This conio implements the two layers of VERA, which can be layer 0 or layer 1. -// Configuring conio to output to a different layer, will change these fields to the address base -// configured using VERA_L0_MAPBASE = 0x9f2e or VERA_L1_MAPBASE = 0x9f35. -// Using the function setscreenlayer(layer) will re-calculate using CONIO_SCREEN_TEXT and CONIO_SCREEN_BASE -// based on the values of VERA_L0_MAPBASE or VERA_L1_MAPBASE, mapping the base address of the selected layer. -// The function setscreenlayermapbase(layer,mapbase) allows to configure bit 16:9 of the -// mapbase address of the time map in VRAM of the selected layer VERA_L0_MAPBASE or VERA_L1_MAPBASE. -char* CONIO_SCREEN_TEXT = DEFAULT_SCREEN; -char CONIO_SCREEN_BANK = 0; // Default screen of the CX16 emulator uses memory bank 0 for text. -// The default text color -#ifndef CONIO_TEXTCOLOR_DEFAULT -#define CONIO_TEXTCOLOR_DEFAULT WHITE -#endif -// The default back color -#ifndef CONIO_BACKCOLOR_DEFAULT -#define CONIO_BACKCOLOR_DEFAULT BLUE -#endif - - -// This requires the following constants to be defined -// - CONIO_WIDTH - The screen width -// - CONIO_HEIGHT - The screen height -// - CONIO_SCREEN_TEXT - The text screen address -// - CONIO_SCREEN_COLORS - The color screen address -// - CONIO_TEXTCOLOR_DEFAULT - The default text color - -#include - -// The number of bytes on the screen -#define CONIO_BYTES CONIO_HEIGHT*CONIO_WIDTH - -// The current cursor x-position -unsigned byte conio_cursor_x[2] = {0,0}; -// The current cursor y-position -unsigned byte conio_cursor_y[2] = {0,0}; -// The current text cursor line start -unsigned word conio_line_text[2] = {0x0000,0x0000}; -// Is a cursor whown when waiting for input (0: no, other: yes) -__ma unsigned byte conio_display_cursor = 0; -// Is scrolling enabled when outputting beyond the end of the screen (1: yes, 0: no). -// If disabled the cursor just moves back to (0,0) instead -unsigned byte conio_scroll_enable[2] = {1,1}; -// Variable holding the screen width; -__ma unsigned byte conio_screen_width = 0; -// Variable holding the screen height; -__ma unsigned byte conio_screen_height = 0; -// Variable holding the screen layer on the VERA card with which conio interacts; -__ma unsigned byte conio_screen_layer = 1; - -// Variables holding the current map width and map height of the layer. -__ma word conio_width = 0; -__ma word conio_height = 0; -__ma byte conio_rowshift = 0; -__ma word conio_rowskip = 0; - -// Initializer for conio.h on X16 Commander. -#pragma constructor_for(conio_x16_init, cputc, clrscr, cscroll) - -// Set initial cursor position -void conio_x16_init() { - // Position cursor at current line - char * const BASIC_CURSOR_LINE = (char*)0xD6; - char line = *BASIC_CURSOR_LINE; - vera_layer_mode_text(1,(dword)0x00000,(dword)0x0F800,128,64,8,8,16); - screensize(&conio_screen_width, &conio_screen_height); - screenlayer(1); - vera_layer_set_textcolor(1, WHITE); - vera_layer_set_backcolor(1, BLUE); - vera_layer_set_mapbase(0,0x20); - vera_layer_set_mapbase(1,0x00); - if(line>=CONIO_HEIGHT) line=CONIO_HEIGHT-1; - gotoxy(0, line); -} - -// Return true if there's a key waiting, return false if not -unsigned char kbhit(void) { - - char ch = 0; - char* const chptr = &ch; - - char* const IN_DEV = (char*)$028A; // Current input device number - char* const GETIN = (char*)$FFE4; // CBM GETIN API - - kickasm(uses chptr, uses IN_DEV, uses GETIN) {{ - - jsr _kbhit - bne L3 - - jmp continue1 - - .var via1 = $9f60 //VIA#1 - .var d1pra = via1+1 - - _kbhit: - ldy d1pra // The count of keys pressed is stored in RAM bank 0. - stz d1pra // Set d1pra to zero to access RAM bank 0. - lda $A00A // Get number of characters from this address in the ROM of the CX16 (ROM 38). - sty d1pra // Set d1pra to previous value. - rts - - L3: - ldy IN_DEV // Save current input device - stz IN_DEV // Keyboard - phy - jsr GETIN // Read char, and return in .A - ply - sta chptr // Store the character read in ch - sty IN_DEV // Restore input device - ldx #>$0000 - rts - - continue1: - nop - }} - - return ch; -} - -// clears the screen and moves the cursor to the upper left-hand corner of the screen. -void clrscr(void) { - char* line_text = CONIO_SCREEN_TEXT; - char color = ( vera_layer_get_backcolor(conio_screen_layer) << 4 ) | vera_layer_get_textcolor(conio_screen_layer); - for( char l=0;lCONIO_HEIGHT) y = 0; - if(x>=CONIO_WIDTH) x = 0; - conio_cursor_x[conio_screen_layer] = x; - conio_cursor_y[conio_screen_layer] = y; - unsigned int line_offset = (unsigned int)y << conio_rowshift; - conio_line_text[conio_screen_layer] = line_offset; -} - -// Return the current screen size. -void screensize(unsigned byte* x, unsigned byte* y) { - // VERA returns in VERA_DC_HSCALE the value of 128 when 80 columns is used in text mode, - // and the value of 64 when 40 columns is used in text mode. - // Basically, 40 columns mode in the VERA is a double scan mode. - // Same for the VERA_DC_VSCALE mode, but then the subdivision is 60 or 30 rows. - // I still need to test the other modes, but this will suffice for now for the pure text modes. - char hscale = (*VERA_DC_HSCALE) >> 7; - *x = 40 << hscale; - char vscale = (*VERA_DC_VSCALE) >> 7; - *y = 30 << vscale; - //printf("%u, %u\n", *x, *y); -} - -// Return the current screen size X width. -inline unsigned byte screensizex() { - return conio_screen_width; -} - -// Return the current screen size Y height. -inline unsigned byte screensizey() { - return conio_screen_height; -} - -// Return the X position of the cursor -inline unsigned byte wherex(void) { - return conio_cursor_x[conio_screen_layer]; -} - -// Return the Y position of the cursor -inline unsigned byte wherey(void) { - return conio_cursor_y[conio_screen_layer]; -} - -// Output one character at the current cursor position -// Moves the cursor forward. Scrolls the entire screen if needed -void cputc(char c) { - char color = vera_layer_get_color( conio_screen_layer); - char* conio_addr = CONIO_SCREEN_TEXT + conio_line_text[conio_screen_layer]; - - conio_addr += conio_cursor_x[conio_screen_layer] << 1; - if(c=='\n') { - cputln(); - } else { - // Select DATA0 - *VERA_CTRL &= ~VERA_ADDRSEL; - // Set address - *VERA_ADDRX_L = BYTE0(conio_addr); - *VERA_ADDRX_M = BYTE1(conio_addr); - *VERA_ADDRX_H = CONIO_SCREEN_BANK | VERA_INC_1; - *VERA_DATA0 = c; - *VERA_DATA0 = color; - - conio_cursor_x[conio_screen_layer]++; - byte scroll_enable = conio_scroll_enable[conio_screen_layer]; - if(scroll_enable) { - if(conio_cursor_x[conio_screen_layer] == CONIO_WIDTH) - cputln(); - } else { - if((unsigned int)conio_cursor_x[conio_screen_layer] == conio_width) - cputln(); - } - } -} - -// Print a newline -void cputln() { - // TODO: This needs to be optimized! other variations don't compile because of sections not available! - word temp = conio_line_text[conio_screen_layer]; - temp += conio_rowskip; - conio_line_text[conio_screen_layer] = temp; - conio_cursor_x[conio_screen_layer] = 0; - conio_cursor_y[conio_screen_layer]++; - cscroll(); -} - -void clearline() { - // Select DATA0 - *VERA_CTRL &= ~VERA_ADDRSEL; - // Set address - byte* addr = CONIO_SCREEN_TEXT + conio_line_text[conio_screen_layer]; - *VERA_ADDRX_L = BYTE0(addr); - *VERA_ADDRX_M = BYTE1(addr); - *VERA_ADDRX_H = VERA_INC_1; - char color = vera_layer_get_color( conio_screen_layer); - for( unsigned int c=0;c0; i--) { - unsigned int line = (conio_cursor_y[conio_screen_layer] + i - 1) << conio_rowshift; - unsigned char* start = CONIO_SCREEN_TEXT + line; - memcpy_in_vram(0, start+conio_rowskip, VERA_INC_1, 0, start, VERA_INC_1, width); - } - clearline(); -} - -// Insert a new line, and scroll the upper part of the screen up. -void insertup() { - unsigned byte cy = conio_cursor_y[conio_screen_layer]; - unsigned byte width = CONIO_WIDTH * 2; - for(unsigned byte i=1; i<=cy; i++) { - unsigned int line = (i-1) << conio_rowshift; - unsigned char* start = CONIO_SCREEN_TEXT + line; - memcpy_in_vram(0, start, VERA_INC_1, 0, start+conio_rowskip, VERA_INC_1, width); - } - clearline(); -} - -// Scroll the entire screen if the cursor is beyond the last line -void cscroll() { - if(conio_cursor_y[conio_screen_layer]>=CONIO_HEIGHT) { - if(conio_scroll_enable[conio_screen_layer]) { - insertup(); - gotoxy( 0, CONIO_HEIGHT-1); - } else { - if(conio_cursor_y[conio_screen_layer]>=conio_height) { - //gotoxy(0,0); - } - } - } -} - - -// Output a NUL-terminated string at the current cursor position -void cputs(const char* s) { - char c; - while(c=*s++) - cputc(c); -} - -// Move cursor and output one character -// Same as "gotoxy (x, y); cputc (c);" -void cputcxy(unsigned byte x, unsigned byte y, char c) { - gotoxy(x, y); - cputc(c); -} - -// Move cursor and output a NUL-terminated string -// Same as "gotoxy (x, y); puts (s);" -void cputsxy(unsigned byte x, unsigned byte y, const char* s) { - gotoxy(x, y); - cputs(s); -} - -// If onoff is 1, a cursor is displayed when waiting for keyboard input. -// If onoff is 0, the cursor is hidden when waiting for keyboard input. -// The function returns the old cursor setting. -unsigned byte cursor(unsigned byte onoff) { - char old = conio_display_cursor; - conio_display_cursor = onoff; - return old; -} - -// If onoff is 1, scrolling is enabled when outputting past the end of the screen -// If onoff is 0, scrolling is disabled and the cursor instead moves to (0,0) -// The function returns the old scroll setting. -unsigned byte scroll(unsigned byte onoff) { - char old = conio_scroll_enable[conio_screen_layer]; - conio_scroll_enable[conio_screen_layer] = onoff; - return old; -} - -// --- Defined in cx16.c and cx16-vera.h --- - -// --- layer management in VERA --- - -// Set the layer with which the conio will interact. -// - layer: value of 0 or 1. -void screenlayer(unsigned byte layer) { - conio_screen_layer = layer; - CONIO_SCREEN_BANK = vera_layer_get_mapbase_bank(conio_screen_layer); - CONIO_SCREEN_TEXT = (char*)vera_layer_get_mapbase_offset(conio_screen_layer); - conio_width = vera_layer_get_width(conio_screen_layer); - conio_rowshift = vera_layer_get_rowshift(conio_screen_layer); - conio_rowskip = vera_layer_get_rowskip(conio_screen_layer); - conio_height = vera_layer_get_height(conio_screen_layer); -} - - -// Set the front color for text output. The old front text color setting is returned. -// - color: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -inline char textcolor(char color) { - return vera_layer_set_textcolor(conio_screen_layer, color); -} - -// Set the back color for text output. The old back text color setting is returned. -// - color: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -inline char bgcolor(char color) { - return vera_layer_set_backcolor(conio_screen_layer, color); -} - -// Set the color for the border. The old color setting is returned. -char bordercolor(unsigned char color) { - // The border color register address - char old = *VERA_DC_BORDER; - *VERA_DC_BORDER = color; - return old; -} - diff --git a/src/main/kc/lib/conio.c b/src/main/kc/lib/conio.c index c0e3c8823..fc3e7fe70 100644 --- a/src/main/kc/lib/conio.c +++ b/src/main/kc/lib/conio.c @@ -7,6 +7,8 @@ #if defined(__C64__) #include "conio-c64.c" +#elif defined(__C128__) +#include "conio-c128.c" #elif defined(__PLUS4__) #include "conio-plus4.c" #elif defined(__VIC20__) @@ -18,7 +20,9 @@ #elif defined(__ATARIXL__) #include "conio-atarixl.c" #elif defined(__CX16__) -#include "conio-cx16.c" +#include "cx16-conio.c" +#elif defined(__PET8032__) +#include "pet-conio.c" #else #error "Target platform does not support conio.h" #endif diff --git a/src/main/kc/lib/cx16-bitmap.c b/src/main/kc/lib/cx16-bitmap.c index 475f5ae42..d7750bc91 100644 --- a/src/main/kc/lib/cx16-bitmap.c +++ b/src/main/kc/lib/cx16-bitmap.c @@ -1,120 +1,159 @@ // Plot and line drawing routines for HIRES bitmaps // Currently it can only plot on the first 256 x-positions. +#include #include #include #include -// Tables for the plotter - initialized by calling bitmap_draw_init(); -const word __bitmap_plot_x[640]; -const dword __bitmap_plot_y[480]; -const byte __bitmap_plot_bitmask[640]; -const byte __bitmap_plot_bitshift[640]; +typedef struct { + // Tables for the plotter - initialized by calling bitmap_draw_init(); + unsigned int plot_x[640]; + unsigned long plot_y[480]; + unsigned char plot_bitmask[640]; + unsigned char plot_bitshift[640]; -__ma dword __bitmap_address = 0; -__ma byte __bitmap_layer = 0; -__ma byte __bitmap_hscale = 0; -__ma byte __bitmap_vscale = 0; -__ma byte __bitmap_color_depth = 0; + unsigned long address; + unsigned char layer; + unsigned char hscale; + unsigned char vscale; + unsigned char color_depth; +} bitmap_t; -word hdeltas[16] = { +bitmap_t __bitmap; + + +unsigned int hdeltas[16] = { 0, 80, 40, 20, // 1 BPP 0, 160, 80, 40, // 2 BPP 0, 320, 160, 80, // 4 BPP 0, 640, 320, 160 // 8 BPP }; -const word vdeltas[4] = {0, 480, 240, 160}; -const byte bitmasks[5] = {$80, $C0, $F0, $FF}; -const signed byte bitshifts[5] = {7, 6, 4, 0}; +const unsigned int vdeltas[4] = {0, 480, 240, 160}; +const unsigned char bitmasks[5] = {0x80, 0xC0, 0xF0, 0xFF}; +const signed char bitshifts[5] = {7, 6, 4, 0}; + + +unsigned char bitmap_hscale() +{ + unsigned char hscale[4] = {0,128,64,32}; + unsigned char scale = 0; + for(char s=1;s<=3;s++) { + if(*VERA_DC_HSCALE==hscale[s]) { + scale = s; + break; + } + } + return scale; +} + +unsigned char bitmap_vscale() +{ + unsigned char vscale[4] = {0,128,64,32}; + unsigned char scale = 0; + for(char s=1;s<=3;s++) { + if(*VERA_DC_VSCALE==vscale[s]) { + scale = s; + break; + } + } + return scale; +} // Initialize the bitmap plotter tables for a specific bitmap -void bitmap_init(byte layer, dword address) { - __bitmap_address = address; - __bitmap_layer = layer; - __bitmap_color_depth = vera_layer_get_color_depth(__bitmap_layer); - __bitmap_hscale = vera_display_get_hscale(); // Returns 1 when 640 and 2 when 320. - __bitmap_vscale = vera_display_get_vscale(); // Returns 1 when 480 and 2 when 240. +void bitmap_init(unsigned char layer, unsigned char bank, unsigned int offset) +{ + __bitmap.address = MAKELONG(offset, bank); + __bitmap.layer = layer; + if(layer) { + __bitmap.color_depth = (*VERA_L1_CONFIG & VERA_LAYER_COLOR_DEPTH_MASK); + } else { + __bitmap.color_depth = (*VERA_L0_CONFIG & VERA_LAYER_COLOR_DEPTH_MASK); + } + __bitmap.hscale = bitmap_hscale(); // Returns 1 when 640 and 2 when 320, 3 when 160. + __bitmap.vscale = bitmap_vscale(); // Returns 1 when 480 and 2 when 240, 3 when 160. - byte bitmask = bitmasks[__bitmap_color_depth]; - signed byte bitshift = bitshifts[__bitmap_color_depth]; + unsigned char bitmask = bitmasks[__bitmap.color_depth]; + signed char bitshift = bitshifts[__bitmap.color_depth]; - for(word x : 0..639) { + for(unsigned int x=0; x<630; x++) { // 1 BPP - if(__bitmap_color_depth==0) { - __bitmap_plot_x[x] = (x >> 3); - __bitmap_plot_bitmask[x] = bitmask; - __bitmap_plot_bitshift[x] = (byte)bitshift; + if(__bitmap.color_depth==0) { + __bitmap.plot_x[x] = (x >> 3); + __bitmap.plot_bitmask[x] = bitmask; + __bitmap.plot_bitshift[x] = (unsigned char)bitshift; bitshift -= 1; bitmask >>= 1; } // 2 BPP - if(__bitmap_color_depth==1) { - __bitmap_plot_x[x] = (x >> 2); - __bitmap_plot_bitmask[x] = bitmask; - __bitmap_plot_bitshift[x] = (byte)bitshift; + if(__bitmap.color_depth==1) { + __bitmap.plot_x[x] = (x >> 2); + __bitmap.plot_bitmask[x] = bitmask; + __bitmap.plot_bitshift[x] = (unsigned char)bitshift; bitshift -= 2; bitmask >>= 2; } // 4 BPP - if(__bitmap_color_depth==2) { - __bitmap_plot_x[x] = (x >> 1); - __bitmap_plot_bitmask[x] = bitmask; - __bitmap_plot_bitshift[x] = (byte)bitshift; + if(__bitmap.color_depth==2) { + __bitmap.plot_x[x] = (x >> 1); + __bitmap.plot_bitmask[x] = bitmask; + __bitmap.plot_bitshift[x] = (unsigned char)bitshift; bitshift -= 4; bitmask >>= 4; } // 8 BPP - if(__bitmap_color_depth==3) { - __bitmap_plot_x[x] = x; - __bitmap_plot_bitmask[x] = bitmask; - __bitmap_plot_bitshift[x] = (byte)bitshift; + if(__bitmap.color_depth==3) { + __bitmap.plot_x[x] = x; + __bitmap.plot_bitmask[x] = bitmask; + __bitmap.plot_bitshift[x] = (unsigned char)bitshift; } if(bitshift<0) { - bitshift = bitshifts[__bitmap_color_depth]; + bitshift = bitshifts[__bitmap.color_depth]; } if(bitmask==0) { - bitmask = bitmasks[__bitmap_color_depth]; + bitmask = bitmasks[__bitmap.color_depth]; } } // This sets the right delta to skip a whole line based on the scale, depending on the color depth. - word hdelta = hdeltas[(__bitmap_color_depth<<2)+__bitmap_hscale]; - // We start at the bitmap address; The plot_y contains the bitmap address embedded so we know where a line starts. - dword yoffs = __bitmap_address; - for(word y : 0..479) { - __bitmap_plot_y[y] = yoffs; + unsigned int hdelta = hdeltas[(__bitmap.color_depth<<2)+__bitmap.hscale]; + // We start at the bitmap offset; The plot_y contains the bitmap offset embedded so we know where a line starts. + unsigned long yoffs = __bitmap.address; + for(unsigned int y=0; y<479; y++) { + __bitmap.plot_y[y] = yoffs; yoffs = yoffs + hdelta; } } // Clear all graphics on the bitmap void bitmap_clear() { - byte bitmask = bitmasks[__bitmap_color_depth]; - word vdelta = vdeltas[__bitmap_vscale]; - word hdelta = hdeltas[(__bitmap_color_depth<<2)+__bitmap_hscale]; - dword count = mul16u(hdelta,vdelta); - char vbank = BYTE2(__bitmap_address); - void* vdest = (void*) WORD0(__bitmap_address); - memset_vram(vbank, vdest, 0, count); + unsigned char bitmask = bitmasks[__bitmap.color_depth]; + unsigned int vdelta = vdeltas[__bitmap.vscale]; + unsigned int hdelta = hdeltas[(__bitmap.color_depth<<2)+__bitmap.hscale]; + hdelta = hdelta >> 1; + unsigned int count = (unsigned int)mul16u(hdelta,vdelta); + vram_bank_t vbank = BYTE3(__bitmap.address); + vram_offset_t vdest = WORD0(__bitmap.address); + memset_vram(vbank, vdest, 0, count); // TODO: check this out if it still works properly. } -void bitmap_plot(word x, word y, byte c) { +void bitmap_plot(unsigned int x, unsigned int y, unsigned char c) { // Needs unsigned int arrays arranged as two underlying char arrays to allow char* plotter_x = plot_x[x]; - and eventually - char* plotter = plot_x[x] + plot_y[y]; - dword plot_x = __bitmap_plot_x[x]; - dword plot_y = __bitmap_plot_y[y]; - dword plotter = plot_x+plot_y; - byte bitshift = __bitmap_plot_bitshift[x]; + unsigned long plot_x = __bitmap.plot_x[x]; + unsigned long plot_y = __bitmap.plot_y[y]; + unsigned long plotter = plot_x+plot_y; + unsigned char bitshift = __bitmap.plot_bitshift[x]; c = bitshift?c<<(bitshift):c; - vera_vram_address0(plotter,VERA_INC_0); - *VERA_DATA0 = (*VERA_DATA0 & ~__bitmap_plot_bitmask[x]) | c; + vera_vram_data0_address(plotter,VERA_INC_0); + *VERA_DATA0 = (*VERA_DATA0 & ~__bitmap.plot_bitmask[x]) | c; } // Draw a line on the bitmap -void bitmap_line(word x0, word x1, word y0, word y1, byte c) { - word xd; - word yd; +void bitmap_line(unsigned int x0, unsigned int x1, unsigned int y0, unsigned int y1, unsigned char c) { + unsigned int xd; + unsigned int yd; if(x0>1; +void bitmap_line_xdyi(unsigned int x, unsigned int y, unsigned int x1, unsigned int xd, unsigned int yd,unsigned char c) { + unsigned int e = yd>>1; do { bitmap_plot(x,y,c); x++; @@ -165,8 +204,8 @@ void bitmap_line_xdyi(word x, word y, word x1, word xd, word yd,byte c) { } while (x!=(x1+1)); } -void bitmap_line_xdyd(word x, word y, word x1, word xd, word yd, byte c) { - word e = yd>>1; +void bitmap_line_xdyd(unsigned int x, unsigned int y, unsigned int x1, unsigned int xd, unsigned int yd, unsigned char c) { + unsigned int e = yd>>1; do { bitmap_plot(x,y,c); x++; @@ -178,8 +217,8 @@ void bitmap_line_xdyd(word x, word y, word x1, word xd, word yd, byte c) { } while (x!=(x1+1)); } -void bitmap_line_ydxi(word y, word x, word y1, word yd, word xd, byte c) { - word e = xd>>1; +void bitmap_line_ydxi(unsigned int y, unsigned int x, unsigned int y1, unsigned int yd, unsigned int xd, unsigned char c) { + unsigned int e = xd>>1; do { bitmap_plot(x,y,c); y++; @@ -191,8 +230,8 @@ void bitmap_line_ydxi(word y, word x, word y1, word yd, word xd, byte c) { } while (y!=(y1+1)); } -void bitmap_line_ydxd(word y, word x, word y1, word yd, word xd, byte c) { - word e = xd>>1; +void bitmap_line_ydxd(unsigned int y, unsigned int x, unsigned int y1, unsigned int yd, unsigned int xd, unsigned char c) { + unsigned int e = xd>>1; do { bitmap_plot(x,y,c); y = y++; diff --git a/src/main/kc/lib/cx16-conio.c b/src/main/kc/lib/cx16-conio.c new file mode 100644 index 000000000..a237dc257 --- /dev/null +++ b/src/main/kc/lib/cx16-conio.c @@ -0,0 +1,390 @@ +/** + * @file cx16-conio.c + * @author Sven Van de Velde (sven.van.de.velde@telenet.be) + * @brief conio for the cx16. These methods allow to print and get information from the console. + * + * Important notes: + * + * - There is a pre-compile option __CONIO_BSOUT which if set, + * will output every conio operation to the standard output using the kernal API BSOUT, + * instead of directly posting to the vera. This is useful to log information in the emulator terminal while running. + * + * @version 0.1 + * @date 2022-10-15 + * + * @copyright Copyright (c) 2022 + * + */ + +#include +#include +#include +#include +#include + +#define CONIO_TEXTCOLOR_DEFAULT WHITE // The default text color +#define CONIO_BACKCOLOR_DEFAULT BLUE // The default back color + +typedef struct { + unsigned char cursor_x; ///< current cursor x-position + unsigned char cursor_y; ///< current cursor y-position + unsigned char layer; + unsigned int mapbase_offset; // Base pointer to the tile map base of the conio screen. + char mapbase_bank; // Default screen of the CX16 emulator uses memory bank 0 for text. + + unsigned char width; ///< the screen width; + unsigned char height; ///< the screen height; + unsigned char mapwidth; ///< the map width; + unsigned char mapheight; ///< the map height; + unsigned int rowskip; ///< the amount of vram bytes needed to skip a row. + unsigned char cursor; ///< is a cursor whown when waiting for input (0: no, other: yes) + unsigned char color; ///< color of the foreground and background + unsigned char bordercolor; ///< color of the border + /// Is scrolling enabled when outputting beyond the end of the screen (1: yes, 0: no). + /// If disabled the cursor just moves back to (0,0) instead + unsigned char scroll[2]; + unsigned char hscroll[2]; + unsigned int offset; ///< The current offset + unsigned int offsets[61]; ///< Calculated offsets per line according the mapbase and the row width (scale). +} cx16_conio_t; + +cx16_conio_t __conio; + + +/// Initializer for conio.h on X16 Commander. +#pragma constructor_for(conio_x16_init, cputc, clrscr, cscroll) + +/// Set initial screen values. +void conio_x16_init() { + + screenlayer1(); + + textcolor(CONIO_TEXTCOLOR_DEFAULT); + bgcolor(CONIO_BACKCOLOR_DEFAULT); + + cursor(0); + + __conio.cursor_x = BYTE1(cbm_k_plot_get()); + __conio.cursor_y = BYTE0(cbm_k_plot_get()); + gotoxy(__conio.cursor_x, __conio.cursor_y); + + __conio.scroll[0] = 1; + __conio.scroll[1] = 1; +} + +// Returns a value if a key is pressed. +inline unsigned char kbhit(void) +{ + cbm_k_clrchn(); + return cbm_k_getin(); +} + +// clears the screen and moves the cursor to the upper left-hand corner of the screen. +void clrscr(void) +{ + unsigned int line_text = __conio.mapbase_offset; + + *VERA_CTRL &= ~VERA_ADDRSEL; + *VERA_ADDRX_H = __conio.mapbase_bank | VERA_INC_1; + + unsigned char l = __conio.mapheight; + do { + unsigned int ch = line_text; + // Set address + *VERA_ADDRX_L = BYTE0(ch); + *VERA_ADDRX_M = BYTE1(ch); + + unsigned char c = __conio.mapwidth; + do{ + *VERA_DATA0 = ' '; + *VERA_DATA0 = __conio.color; + c--; + } while(c); + + line_text += __conio.rowskip; + l--; + } while(l); + + __conio.cursor_x = 0; + __conio.cursor_y = 0; + __conio.offset = __conio.mapbase_offset; +} + +// Set the cursor to the specified position +void gotoxy(unsigned char x, unsigned char y) +{ +#ifndef __CONIO_BSOUT + __conio.cursor_x = (x>=__conio.width)?__conio.width:x; + __conio.cursor_y = (y>=__conio.height)?__conio.height:y; + __conio.offset = __conio.offsets[y] + __conio.cursor_x << 1; +#endif +} + +// Return the current screen size. +void screensize(unsigned char* x, unsigned char* y) { + // VERA returns in VERA_DC_HSCALE the value of 128 when 80 columns is used in text mode, + // and the value of 64 when 40 columns is used in text mode. + // Basically, 40 columns mode in the VERA is a double scan mode. + // Same for the VERA_DC_VSCALE mode, but then the subdivision is 60 or 30 rows. + // I still need to test the other modes, but this will suffice for now for the pure text modes. + char hscale = (*VERA_DC_HSCALE) >> 7; + *x = (40 << hscale)-1; + char vscale = (*VERA_DC_VSCALE) >> 7; + *y = (30 << vscale)-1; + //printf("%u, %u\n", *x, *y); +} + +// Return the current screen size x width. +unsigned char screensizex() { + return __conio.width; +} + +// Return the current screen size y height. +unsigned char screensizey() { + return __conio.height; +} + +// Return the x position of the cursor +unsigned char wherex(void) { + return __conio.cursor_x; +} + +// Return the y position of the cursor +unsigned char wherey(void) { + return __conio.cursor_y; +} + +// Output one character at the current cursor position +// Moves the cursor forward. Scrolls the entire screen if needed +void cputc(char c) { + + if(c=='\n') { + cputln(); + } else { + +#ifdef __CONIO_BSOUT + cbm_k_plot_set(0,0); + cbm_k_chrout(c); +#endif + +#ifndef __CONIO_BSOUT + *VERA_CTRL &= ~VERA_ADDRSEL; + *VERA_ADDRX_L = BYTE0(__conio.offset); + *VERA_ADDRX_M = BYTE1(__conio.offset); + *VERA_ADDRX_H = __conio.mapbase_bank | VERA_INC_1; + *VERA_DATA0 = c; + *VERA_DATA0 = __conio.color; +#endif + if(!__conio.hscroll[__conio.layer]) { + if(__conio.cursor_x >= __conio.width) + cputln(); + else { + __conio.cursor_x++; + __conio.offset++; + __conio.offset++; + } + } else { + if(__conio.cursor_x >= __conio.mapwidth) + cputln(); + else + __conio.cursor_x++; + __conio.offset++; + __conio.offset++; + } + } +} + +// Print a newline +void cputln() { + __conio.cursor_x = 0; + __conio.cursor_y++; + __conio.offset = __conio.offsets[__conio.cursor_y]; + if(__conio.scroll[__conio.layer]) { + cscroll(); + } +#ifdef __CONIO_BSOUT + cbm_k_plot_set(0,0); + cbm_k_chrout(13); +#endif +} + +void clearline() { +#ifndef __CONIO_BSOUT + unsigned int addr = __conio.offsets[__conio.cursor_y]; + *VERA_CTRL &= ~VERA_ADDRSEL; + *VERA_ADDRX_L = BYTE0(addr); + *VERA_ADDRX_M = BYTE1(addr); + *VERA_ADDRX_H = __conio.mapbase_bank | VERA_INC_1; + register unsigned char c=__conio.width; + do { + *VERA_DATA0 = ' '; + *VERA_DATA0 = __conio.color; + c--; + } while(c); +#endif +} + +// Insert a new line, and scroll the lower part of the screen down. +void insertdown(unsigned char rows) { + if(__conio.cursor_y>=0 && __conio.cursor_y <=__conio.height-1) { +#ifndef __CONIO_BSOUT + // {asm{.byte $db}} + unsigned char width = (__conio.width+1) * 2; + for(unsigned char y=__conio.height - __conio.cursor_y + 1; y>__conio.cursor_y; y--) { + memcpy8_vram_vram(__conio.mapbase_bank, __conio.offsets[y], __conio.mapbase_bank, __conio.offsets[y-1], width); + } + clearline(); +#endif + } +} + +// Insert a new line, and scroll the upper part of the screen up. +void insertup(unsigned char rows) { +#ifndef __CONIO_BSOUT + // {asm{.byte $db}} + unsigned char width = (__conio.width+1) * 2; + for(unsigned char y=0; y<__conio.cursor_y; y++) { + memcpy8_vram_vram(__conio.mapbase_bank, __conio.offsets[y], __conio.mapbase_bank, __conio.offsets[y+1], width); + } + clearline(); +#endif +} + +// Scroll the entire screen if the cursor is beyond the last line +void cscroll() { +#ifndef __CONIO_BSOUT + if(__conio.cursor_y>__conio.height) { + if(__conio.scroll[__conio.layer]) { + insertup(1); + gotoxy( 0, __conio.height); + clearline(); + } else { + if(__conio.cursor_y>__conio.height) { + gotoxy(0,0); + } + } + } +#endif +} + + +// Output a NUL-terminated string at the current cursor position +void cputs(const char* s) { +#ifndef __CONIO_BSOUT + char c; + while(c=*s++) + cputc(c); +#endif +} + +// Move cursor and output one character +// Same as "gotoxy (x, y); cputc (c);" +void cputcxy(unsigned char x, unsigned char y, char c) { +#ifndef __CONIO_BSOUT + gotoxy(x, y); + cputc(c); +#endif +} + +// Move cursor and output a NUL-terminated string +// Same as "gotoxy (x, y); puts (s);" +void cputsxy(unsigned char x, unsigned char y, const char* s) { +#ifndef __CONIO_BSOUT + gotoxy(x, y); + cputs(s); +#endif +} + +// If onoff is 1, a cursor is displayed when waiting for keyboard input. +// If onoff is 0, the cursor is hidden when waiting for keyboard input. +// The function returns the old cursor setting. +unsigned char cursor(unsigned char onoff) { + // not supported in CX16 + char old = __conio.cursor; + __conio.cursor = onoff; + return old; +} + +// If onoff is 1, scrolling is enabled when outputting past the end of the screen +// If onoff is 0, scrolling is disabled and the cursor instead moves to (0,0) +// The function returns the old scroll setting. +unsigned char scroll(unsigned char onoff) { + char old = __conio.scroll[__conio.layer]; + __conio.scroll[__conio.layer] = onoff; + return old; +} + +// If onoff is 1, scrolling is enabled when outputting past the end of the screen +// If onoff is 0, scrolling is disabled and the cursor instead moves to (0,0) +// The function returns the old scroll setting. +unsigned char hscroll(unsigned char onoff) { + char old = __conio.hscroll[__conio.layer]; + __conio.hscroll[__conio.layer] = onoff; + return old; +} + +// --- Defined in cx16.c and cx16-vera.h --- + +// --- layer management in VERA --- + + + +void screenlayer(char layer, char mapbase, char config) +{ + unsigned char const VERA_LAYER_DIM[4] = {31, 63, 127, 255}; + unsigned int const VERA_LAYER_SKIP[4] = {64, 128, 256, 512}; + + __mem char vera_dc_hscale_temp = *VERA_DC_HSCALE; + __mem char vera_dc_vscale_temp = *VERA_DC_VSCALE; + + __conio.layer = 0; + __conio.mapbase_bank = mapbase >> 7; + __conio.mapbase_offset = MAKEWORD((mapbase)<<1,0); + __conio.mapwidth = VERA_LAYER_DIM[ (config & VERA_LAYER_WIDTH_MASK) >> 4]; + __conio.mapheight = VERA_LAYER_DIM[ (config & VERA_LAYER_HEIGHT_MASK) >> 6]; + // __conio.rowshift = ((config & VERA_LAYER_WIDTH_MASK)>>4)+6; + __conio.rowskip = VERA_LAYER_SKIP[(config & VERA_LAYER_WIDTH_MASK)>>4]; + __conio.width = (40 << (char)(vera_dc_hscale_temp == 0x80))-1; + __conio.height = (30 << (char)(vera_dc_vscale_temp == 0x80))-1; + + unsigned int mapbase_offset = __conio.mapbase_offset; + for(register char y=0; y<=__conio.height; y++) { + __conio.offsets[y] = mapbase_offset; + mapbase_offset += __conio.rowskip; + } +} + +// Set the layer with which the conio will interact. +// - layer: value of 0 or 1. +void screenlayer0() { + screenlayer(0, *VERA_L0_MAPBASE, *VERA_L0_CONFIG); +} + + +// Set the layer with which the conio will interact. +void screenlayer1() { + screenlayer(1, *VERA_L1_MAPBASE, *VERA_L1_CONFIG); +} + + +// Set the front color for text output. The old front text color setting is returned. +// - color: a 4 bit value ( decimal between 0 and 15). +// This will only work when the VERA is in 16 color mode! +// Note that on the VERA, the transparent color has value 0. +char textcolor(char color) { + return __conio.color = __conio.color & 0xF0 | color; +} + +// Set the back color for text output. +// - color: a 4 bit value ( decimal between 0 and 15). +// This will only work when the VERA is in 16 color mode! +// Note that on the VERA, the transparent color has value 0. +char bgcolor(char color) { + return __conio.color = __conio.color & 0x0F | color << 4; +} + +// Set the color for the border. +char bordercolor(unsigned char color) { + return __conio.bordercolor = *VERA_DC_BORDER; +} + diff --git a/src/main/kc/lib/cx16-kernal.c b/src/main/kc/lib/cx16-kernal.c index 45cb67928..9bdbbb140 100644 --- a/src/main/kc/lib/cx16-kernal.c +++ b/src/main/kc/lib/cx16-kernal.c @@ -1,62 +1,67 @@ +/** + * @file cx16-kernal.c + * @author Sven Van de Velde (sven.van.de.velde@telenet.be) + * @brief + * Please refer to http://sta.c64.org/cbm64krnfunc.html for the list of standard CBM C64 kernal functions. + * Please refer to https://github.com/commanderx16/x16-docs/blob/master/Commander%20X16%20Programmer's%20Reference%20Guide.md for the detailed list + * of APIs backward compatible with the C64. + + * @version 0.1 + * @date 2022-01-29 + * + * @copyright Copyright (c) 2022 + * + */ + +#include #include -#include -// Kernal SETNAM function -// SETNAM. Set file name parameters. -void setnam(char* filename) { - char filename_len = (char)strlen(filename); - asm { - // Kernal SETNAM function - // SETNAM. Set file name parameters. - // Input: A = File name length; X/Y = Pointer to file name. - lda filename_len - ldx filename - ldy filename+1 - jsr $ffbd - } + +/** + * @brief Read a number of bytes from the sdcard using kernal macptr call. + * BRAM bank needs to be set properly before the load between adressed A000 and BFFF. + * + * @return x the size of bytes read + * @return y the size of bytes read + * @return if carry is set there is an error + */ +unsigned int cx16_k_macptr(unsigned char bytes, void* buffer) +{ + unsigned int bytes_read; + {asm { + lda bytes + ldx buffer + ldy buffer+1 + + clc // needed from R42 of the CX16 commander rom to ensure MACPTR is progressing the read address. + // .byte $db + jsr CX16_MACPTR + stx bytes_read + sty bytes_read+1 + bcc !+ + lda #$FF + sta bytes_read + sta bytes_read+1 + !: + }} + return bytes_read; } -// SETLFS. Set file parameters. -void setlfs(char device) { - asm { - // SETLFS. Set file parameters. - // Input: A = Logical number; X = Device number; Y = Secondary address. - ldx device - lda #1 - ldy #0 - jsr $ffba - } -} -// LOAD. Load or verify file. (Must call SETLFS and SETNAM beforehands.) -// - verify: 0 = Load, 1-255 = Verify -// -// Returns a status, 0xff: Success other: Kernal Error Code -char load(char* address, char verify) { - char status; - asm { - //LOAD. Load or verify file. (Must call SETLFS and SETNAM beforehands.) - // Input: A: 0 = Load, 1-255 = Verify; X/Y = Load address (if secondary address = 0). - // Output: Carry: 0 = No errors, 1 = Error; A = KERNAL error code (if Carry = 1); X/Y = Address of last byte loaded/verified (if Carry = 0). - ldx address - ldy address+1 - lda verify - jsr $ffd5 - bcs error - lda #$ff - error: - sta status - } - return status; -} -// GETIN. Read a byte from the input channel -// return: next byte in buffer or 0 if buffer is empty. -char getin() { - char ch; - asm { - jsr $ffe4 - sta ch - } - return ch; +/** + * @brief Sets the [character set](https://github.com/commanderx16/x16-docs/blob/master/X16%20Reference%20-%2004%20-%20KERNAL.md#function-name-screen_set_charset). + * + * @param charset The code of the charset to copy. + * @param offset The offset of the character set in ram. + */ +inline void cx16_k_screen_set_charset(char charset, char *offset) { + + + {asm { + lda charset + ldx offset + jsr CX16_SCREEN_SET_CHARSET + }} } diff --git a/src/main/kc/lib/cx16-mouse.c b/src/main/kc/lib/cx16-mouse.c new file mode 100644 index 000000000..bb9a4b133 --- /dev/null +++ b/src/main/kc/lib/cx16-mouse.c @@ -0,0 +1,94 @@ +/** + * @file cx16-mouse.c + * @author Sven Van de Velde (sven.van.de.velde@telenet.be) + * @brief See documentation of the [mouse pointer](https://github.com/commanderx16/x16-docs/blob/master/X16%20Reference%20-%2004%20-%20KERNAL.md#mouse) in the commander X16 manual: + * + * @note Compatible ONLY with the commander X16 version R39 ROM. + * + * @version 0.1 + * @date 2022-03-31 + * + * @copyright Copyright (c) 2022 + * + */ + +#include + +// The mouse work area. + +__mem cx16_mouse_t cx16_mouse; + +/** + * @brief Configures the mouse pointer. + * + * + * @param visible Turn the mouse pointer on or off. Provide a value of 0xFF to set your own mouse pointer graphic (sprite 0). + * @param scalex Specify x axis screen resolution in 8 pixel increments. + * @param scaley Specify y axis screen resolution in 8 pixel increments. + * + */ +void cx16_mouse_config(char visible, char scalex, char scaley) +{ + asm { + //.byte $db + lda visible + ldx scalex + ldy scaley + jsr CX16_MOUSE_CONFIG + } +} + +/** + * @brief Scan the mouse + * + */ +void cx16_mouse_scan() +{ + asm { + // .byte $db + jsr CX16_MOUSE_SCAN + } +} + +/** + * @brief Retrieves the status of the mouse pointer and will fill the mouse position in the defined mouse registers. + * + * @return char Current mouse status. + * + * The pre-defined variables cx16_mousex and cx16_mousey contain the position of the mouse pointer. + * + * volatile int cx16_mousex = 0; + * volatile int cx16_mousey = 0; + * + * The state of the mouse buttons is returned: + * + * |Bit|Description| + * |---|-----------| + * |0|Left Button| + * |1|Right Button| + * |2|Middle Button| + * + * If a button is pressed, the corresponding bit is set. + */ +char cx16_mouse_get() +{ + __mem char status; + __address(0xfc) int x; + __address(0xfe) int y; + + cx16_mouse.px = cx16_mouse.x; + cx16_mouse.py = cx16_mouse.y; + + asm { + // .byte $db + ldx #$fc + jsr CX16_MOUSE_GET + sta status + } + + cx16_mouse.x = x; + cx16_mouse.y = y; + cx16_mouse.status = status; + + return status; +} diff --git a/src/main/kc/lib/cx16.c b/src/main/kc/lib/cx16.c index a994da477..c8c1e1ed1 100644 --- a/src/main/kc/lib/cx16.c +++ b/src/main/kc/lib/cx16.c @@ -1,35 +1,230 @@ -// Commander X16 Functions -// https://www.commanderx16.com/forum/index.php?/about-faq/ -// https://github.com/commanderx16/x16-docs/blob/master/Commander%20X16%20Programmer's%20Reference%20Guide.md + +/** + * @file cx16.c + * @author Jesper Gravgaard / Sven Van de Velde + * @brief Contains functions to control the features of the Commander X16. + * Commander X16 Functions. + * https://www.commanderx16.com/forum/index.php?/about-faq/ + * https://github.com/commanderx16/x16-docs/blob/master/Commander%20X16%20Programmer's%20Reference%20Guide.md + * @version 0.1 + * @date 2021-06-13 + * + * @copyright Copyright (c) 2021 + * + */ + +#ifndef __CX16__ +#error "Target platform must be cx16" +#endif #include -#include +#include +#include +#include + +// Initializer for X16 Commander interrupt vector +#pragma constructor_for(cx16_init, cx16_kernal_irq) + +__mem __export word isr_vsync = 0x0314; + +void cx16_init() +{ + isr_vsync = *(word *)0x0314; +} + +void cx16_kernal_irq(IRQ_TYPE irq) +{ + *KERNEL_IRQ = irq; +} + +/** + * @brief Push the old bank on the stack and set the active bank of banked ram on the X16. + * Banked ram is the memory location between 0xA000 and 0xBFFF. + * + * @param bank Switch to this bank. + */ +inline void bank_push_set_bram(bram_bank_t bank) +{ + asm { + lda $00 + pha + } + BRAM = bank; +} + +/** + * @brief Set the active bank of banked ram on the X16. + * Banked ram is the memory location between 0xA000 and 0xBFFF. + * + * @param bank Switch to this bank. + */ +inline void bank_set_bram(bram_bank_t bank) +{ + BRAM = bank; +} + +/** + * @brief Set the active bank of banked ram on the X16. + * Banked ram is the memory location between 0xA000 and 0xBFFF. + * The old bank is pushed on the stack, and must be retrieved with bank_pop_bram!!! + * + * @param bank Switch to this bank. + */ +inline void bank_push_bram() +{ + asm { + lda $00 + pha + } +} + +/** + * @brief Get the active bank of banked ram on the X16. + * Banked ram is the memory location between 0xA000 and 0xBFFF. + * + * @return unsigned char The current active bank. + */ +inline unsigned char bank_get_bram() +{ + return BRAM; +} + +/** + * @brief Get the old bank of banked ram on the X16 from the stack. + * Banked ram is the memory location between 0xA000 and 0xBFFF. + * The old bank was set with bank_push_bram()!!! + */ +inline void bank_pull_bram() +{ + asm { + pla + sta $00 + } +} + +/** + * @brief Set the active banked rom on the X16. + * + * There are several banked roms available between 0xC000 and 0xFFFF. + * + * Bank Name Description + * 0 KERNAL character sets (uploaded into VRAM), MONITOR, KERNAL + * 1 KEYBD Keyboard layout tables + * 2 CBDOS The computer-based CBM-DOS for FAT32 SD cards + * 3 GEOS GEOS KERNAL + * 4 BASIC BASIC interpreter + * 5 MONITOR Machine Language Monitor + * + * Detailed documentation in the CX16 programmers reference: + * https://github.com/commanderx16/x16-docs/blob/master/Commander%20X16%20Programmer's%20Reference%20Guide.md + * + * Note: This method will change when R39 is released, + * as the bank is modified using zero page 0x01, instead of the VIA. + * + * @param bank Switch to this bank. + */ +inline void bank_set_brom(brom_bank_t bank) +{ + BROM = bank; +} + +/** + * @brief Get the active banked rom on the X16. + * There are several banked roms available between 0xC000 and 0xFFFF. + * + * Bank Name Description + * 0 KERNAL character sets (uploaded into VRAM), MONITOR, KERNAL + * 1 KEYBD Keyboard layout tables + * 2 CBDOS The computer-based CBM-DOS for FAT32 SD cards + * 3 GEOS GEOS KERNAL + * 4 BASIC BASIC interpreter + * 5 MONITOR Machine Language Monitor + * + * Detailed documentation in the CX16 programmers reference: + * https://github.com/commanderx16/x16-docs/blob/master/Commander%20X16%20Programmer's%20Reference%20Guide.md + * + * Note: This method will change when R39 is released, + * as the bank is modified using zero page 0x01, instead of the VIA. + * + * @return unsigned char The current active bank. + */ +brom_bank_t bank_get_brom() +{ +#ifdef X16_R38 + return VIA1->PORT_B; +#else + return BROM; +#endif +} + +/** + * Call a far routine in a bank. + * + */ +void call__far(bram_bank_t bank_func, bram_ptr_t ptr_func) +{ + +} + +// Increase a cx16 banked pointer, so that the bank setting evolves with the increment. +/** + * @brief Increase a banked pointer, located between 0xA000 and 0xBFFF, + * so that the bank setting evolves with the increment, increasing the bank and restaring at 0xA000 + * once the 0xBFFF boundary has been reached. + * + * @param bank Bank on which the pointer is mapped. + * @param sptr The pointer to increment. + * @param inc The increment. + * @return bram_ptr_t The new calculated pointer. + */ +bram_ptr_t bank_bram_ptr_inc(char bank, char *sptr, unsigned int inc) +{ + + char banks = BYTE1(inc) >> 5; // This returns the number of banks the increment will cover. + + sptr -= 0xA000; + unsigned int rptr = ((unsigned int)sptr + (inc & 0x1FFF)); + char diff = BYTE1(rptr) >> 5; // if the inc crosses the 0x2000 boundary, then this bit will be set. + + bank = bank + banks + diff; + bank_set_bram(bank); + + rptr = (rptr & 0x1FFF) + 0xA000; + + return (bram_ptr_t)rptr; +} + +/** + * @brief Put a single byte into VRAM. + * Uses VERA DATA0. + * + * @param vbank Which 64K VRAM bank to put data into (0/1). + * @param vaddr The address in VRAM. + * @param data The data to put into VRAM. + */ +void vpoke(vram_bank_t vbank, vram_offset_t vaddr, char data) +{ -// Put a single byte into VRAM. -// Uses VERA DATA0 -// - bank: Which 64K VRAM bank to put data into (0/1) -// - addr: The address in VRAM -// - data: The data to put into VRAM -void vpoke(char vbank, char* vaddr, char data) { - // Select DATA0 *VERA_CTRL &= ~VERA_ADDRSEL; - // Set address *VERA_ADDRX_L = BYTE0(vaddr); *VERA_ADDRX_M = BYTE1(vaddr); *VERA_ADDRX_H = VERA_INC_0 | vbank; - // Set data + *VERA_DATA0 = data; } -// Read a single byte from VRAM. -// Uses VERA DATA0 -// - bank: Which 64K VRAM bank to put data into (0/1) -// - addr: The address in VRAM -// - returns: The data to put into VRAM -char vpeek(char vbank, char* vaddr) { - // Select DATA0 +/** + * @brief Read a single byte from VRAM. + * Uses VERA DATA0. + * + * @param vbank Which 64K VRAM bank to put data into (0/1). + * @param vaddr The address in VRAM. + * @return char The data to put into VRAM. + */ +char vpeek(vram_bank_t vbank, vram_offset_t vaddr) +{ + *VERA_CTRL &= ~VERA_ADDRSEL; - // Set address *VERA_ADDRX_L = BYTE0(vaddr); *VERA_ADDRX_M = BYTE1(vaddr); *VERA_ADDRX_H = VERA_INC_0 | vbank; @@ -37,139 +232,389 @@ char vpeek(char vbank, char* vaddr) { return *VERA_DATA0; } -// Copy block of memory (from RAM to VRAM) -// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination in VRAM. -// - vbank: Which 64K VRAM bank to put data into (0/1) -// - vdest: The destination address in VRAM -// - src: The source address in RAM -// - num: The number of bytes to copy -void memcpy_to_vram(char vbank, void* vdest, void* src, unsigned int num ) { - // Select DATA0 +/** + * @brief Copy block of memory from ram to vram. + * Copies num bytes from the ram source pointer to the vram bank/offset. + * + * @param dbank_vram Destination vram bank. + * @param doffset_vram The destination vram offset, 0x0000 till 0xFFFF) + * @param sptr_ram Source pointer in ram. + * @param num Amount of bytes to copy. + */ +void memcpy_vram_ram(vram_bank_t dbank_vram, vram_offset_t doffset_vram, ram_ptr_t sptr_ram, unsigned int num) +{ + *VERA_CTRL &= ~VERA_ADDRSEL; - // Set address - *VERA_ADDRX_L = BYTE0(vdest); - *VERA_ADDRX_M = BYTE1(vdest); - *VERA_ADDRX_H = VERA_INC_1 | vbank; + *VERA_ADDRX_L = BYTE0(doffset_vram); + *VERA_ADDRX_M = BYTE1(doffset_vram); + *VERA_ADDRX_H = dbank_vram | VERA_INC_1; + // Transfer the data - char *end = (char*)src+num; - for(char *s = src; s!=end; s++) + unsigned char *end = (unsigned char *)sptr_ram + num; + for (char *s = sptr_ram; s != end; s++) *VERA_DATA0 = *s; } -// Copy block of memory (from banked RAM to VRAM) -// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination in VRAM. -// - vdest: absolute address in VRAM -// - src: absolute address in the banked RAM of the CX16. -// - num: dword of the number of bytes to copy -// Note: This function can switch RAM bank during copying to copy data from multiple RAM banks. -void memcpy_bank_to_vram(unsigned long vdest, unsigned long src, unsigned long num ) { - // Select DATA0 +/** + * @brief Copy block of memory from vram to ram. + * Copies num bytes from the source vram bank/offset to the ram destination pointer. + * + * @param dptr Destination vram pointer. + * @param sbank_vram Source vram bank. + * @param soffset_vram Source vram offset. + * @param num Amount of bytes to copy. + */ +void memcpy_ram_vram(ram_ptr_t dptr, vram_bank_t sbank_vram, vram_offset_t soffset_vram, unsigned int num) +{ + *VERA_CTRL &= ~VERA_ADDRSEL; - // Set address - *VERA_ADDRX_L = BYTE0(vdest); - *VERA_ADDRX_M = BYTE1(vdest); - *VERA_ADDRX_H = BYTE2(vdest); - *VERA_ADDRX_H |= VERA_INC_1; + *VERA_ADDRX_L = BYTE0(soffset_vram); + *VERA_ADDRX_M = BYTE1(soffset_vram); + *VERA_ADDRX_H = sbank_vram | VERA_INC_1; - unsigned long beg = src; - unsigned long end = src+num; - - char bank = BYTE2(beg)<<3 | BYTE1(beg)>>5 ; // (byte)(((((word)<(>beg)<<8)|>(>5)+((word)<(>beg)<<3)); - char* addr = (char*)(WORD0(beg)&0x1FFF); // stip off the top 3 bits, which are representing the bank of the word! - addr += 0xA000; - - VIA1->PORT_A = (char)bank; // select the bank - for(unsigned long pos=beg; posPORT_A = (char)++bank; // select the bank - addr = (char*)0xA000; - } - *VERA_DATA0 = *addr; - addr++; - } + // Get the data + unsigned char *end = (unsigned char *)dptr + num; + for (unsigned char *s = dptr; s != end; s++) + *s = *VERA_DATA0; } -// Set block of memory to a value in VRAM. -// Sets num bytes to a value to the memory block pointed to by destination in VRAM. -// - vbank: Which 64K VRAM bank to put data into (0/1) -// - vdest: The destination address in VRAM -// - data: The value to set the vram with. -// - num: The number of bytes to set -void memset_vram(char vbank, void* vdest, char data, unsigned long num ) { - // Select DATA0 - *VERA_CTRL &= ~VERA_ADDRSEL; - // Set address - *VERA_ADDRX_L = BYTE0(vdest); - *VERA_ADDRX_M = BYTE1(vdest); - *VERA_ADDRX_H = VERA_INC_1 | vbank; - // Transfer the data - for(unsigned long i = 0; i>5; //(byte)(((((word)<(>address)<<8)|>(>5)+((word)<(>address)<<3)); - char* addr = (char*)(WORD0(address)&0x1FFF); // stip off the top 3 bits, which are representing the bank of the word! - addr += 0xA000; - VIA1->PORT_A = (char)bank; // select the bank - return load(addr, 0); + +/** + * @brief Fast initialization of an area pointed by a destination memory address to one value c. + * Since the amount of bytes to be initialized is a byte long, it can be executed very fast. + * The parameter num can have a value 0, which in case is equal to 256, + * which allows 256 bytes to be copied using one single byte counter! + * Depending on the optimization of the compiler, this implementation can + * result in very fast code, but it should be inlined! + * + * @param destination The destination memory address as the start of the memory area. + * @param c The byte value initializing the memory area.. + * @param num The amount of bytes to be copied. A value of 0 will set an area of 256 bytes!!! + * @return void* The resulting destination memory address. + +/** + * @brief Fast and inline copy of memory from bram to vram. + * Copies num bytes (max 256) from the source bram bank/pointer to the destination vram bank/offset. + * Since the amount of bytes to be initialized is a byte long, it can be executed very fast. + * The parameter num can have a value 0, which in case is equal to 256, + * which allows 256 bytes to be copied using one single byte counter! + * Depending on the optimization of the compiler, this implementation can + * result in very fast code, but it should be inlined! + * NOTE! sptr_bram + amount of bytes to be copied must be between BRAM page boundaries! + * + * @param dbank_vram Destination vram bank between 0 and 1. + * @param doffset_vram Destination vram offset between 0x0000 and 0xFFFF. + * @param sbank_vram Source bram bank between 0 and 255 (Depending on banked ram availability, maxima can be 63, 127, 191 or 255). + * @param sptr_bram Source bram pointer between 0xA000 and 0xBFFF. + * @param num Amount of bytes to copy. + */ +inline void memcpy_vram_bram_fast(vram_bank_t dbank_vram, vram_offset_t doffset_vram, bram_bank_t sbank_bram, bram_ptr_t sptr_bram, unsigned char num) +{ + bank_push_set_bram(sbank_bram); + + *VERA_CTRL &= ~VERA_ADDRSEL; + *VERA_ADDRX_L = BYTE0(doffset_vram); + *VERA_ADDRX_M = BYTE1(doffset_vram); + *VERA_ADDRX_H = dbank_vram | VERA_INC_1; + + char add = 0; + do { + *VERA_DATA0 = sptr_bram[add]; + add++; + num--; + } while(num); + + bank_pull_bram(); +} + + + +/** + * @brief Copy block of memory from bram to vram. + * Copies num bytes from the source bram bank/pointer to the destination vram bank/offset. + * + * @param dbank_vram Destination vram bank between 0 and 1. + * @param doffset_vram Destination vram offset between 0x0000 and 0xFFFF. + * @param sbank_vram Source bram bank between 0 and 255 (Depending on banked ram availability, maxima can be 63, 127, 191 or 255). + * @param sptr_bram Source bram pointer between 0xA000 and 0xBFFF. + * @param num Amount of bytes to copy. + */ +void memcpy_vram_bram(vram_bank_t dbank_vram, vram_offset_t doffset_vram, bram_bank_t sbank_bram, bram_ptr_t sptr_bram, unsigned int num) +{ + + byte bank = bank_get_bram(); + bank_set_bram(sbank_bram); + + *VERA_CTRL &= ~VERA_ADDRSEL; + *VERA_ADDRX_L = BYTE0(doffset_vram); + *VERA_ADDRX_M = BYTE1(doffset_vram); + *VERA_ADDRX_H = dbank_vram | VERA_INC_1; + + + // byte* ptr = (byte*)sptr_bram; + // for(unsigned int i=0; i +#include +#include + +// The screen width +#define CONIO_WIDTH 80 +// The screen height +#define CONIO_HEIGHT 25 +// The text screen address +#ifndef CONIO_SCREEN_TEXT +#define CONIO_SCREEN_TEXT DEFAULT_SCREEN +#endif + +// The default text color +#ifndef CONIO_TEXTCOLOR_DEFAULT +#define CONIO_TEXTCOLOR_DEFAULT WHITE +#endif + +// Use the shared CMB flat memory implementation +#include "conio-cbm-shared.c" + +// Initializer for conio.h on C64 +#pragma constructor_for(conio_cpet_init, cputc, clrscr, cscroll) + +// Set initial cursor position +void conio_cpet_init() { + // // Position cursor at current line + // char * const BASIC_CURSOR_LINE = (char*)0xD6; + // char line = *BASIC_CURSOR_LINE; + // if(line>=CONIO_HEIGHT) line=CONIO_HEIGHT-1; + // gotoxy(0, line); +} + +// Return true if there's a key waiting, return false if not +unsigned char kbhit (void) { + // // CIA#1 Port A: keyboard matrix columns and joystick #2 + // char* const CIA1_PORT_A = (char*)0xdc00; + // // CIA#1 Port B: keyboard matrix rows and joystick #1. + // char* const CIA1_PORT_B = (char*)0xdc01; + // *CIA1_PORT_A = 0; + // return ~*CIA1_PORT_B; + return 0; +} + +// Set the color for the background. The old color setting is returned. +unsigned char bgcolor(unsigned char color) { + return 0; +} + +// Set the color for the border. The old color setting is returned. +unsigned char bordercolor(unsigned char color) { + return 0; +} + +// Get a charakter from the keyboard and return it. +unsigned char getch() { + return cbm_k_getin(); +} diff --git a/src/main/kc/lib/sprintf.c b/src/main/kc/lib/sprintf.c index 94d7176be..012d83175 100644 --- a/src/main/kc/lib/sprintf.c +++ b/src/main/kc/lib/sprintf.c @@ -23,10 +23,10 @@ __intrinsic int sprintf( char * s, const char * format, ... ); /// The capacity of the buffer (n passed to snprintf()) /// Used to hold state while printing -volatile size_t __snprintf_capacity; +__mem volatile size_t __snprintf_capacity; // The number of chars that would have been filled when printing without capacity. Grows even after size>capacity. /// Used to hold state while printing -volatile size_t __snprintf_size; +__mem volatile size_t __snprintf_size; /// Current position in the buffer being filled ( initially *s passed to snprintf() /// Used to hold state while printing char * __snprintf_buffer; diff --git a/src/main/kc/lib/stdio.c b/src/main/kc/lib/stdio.c new file mode 100644 index 000000000..895f3c75f --- /dev/null +++ b/src/main/kc/lib/stdio.c @@ -0,0 +1,340 @@ + +#include +#include + +#if defined(__CX16__) // For the moment only supported for the CX16 ... + +#include + +volatile FILE __stdio_file; +volatile unsigned char __stdio_filecount = 0; + +#define __filename (&__stdio_file.filename[sp * __STDIO_FILECOUNT]) +#define __logical (__stdio_file.channel[sp]) +#define __device (__stdio_file.device[sp]) +#define __channel (__stdio_file.secondary[sp]) +#define __status (__stdio_file.status[sp]) + +/** + * @brief Load a file to banked ram located between address 0xA000 and 0xBFFF incrementing the banks. + * + * @param channel Input channel. + * @param device Input device. + * @param secondary Secondary channel. + * @param filename Name of the file to be loaded. + * @return + * - 0x0000: Something is wrong! Kernal Error Code (https://commodore.ca/manuals/pdfs/commodore_error_messages.pdf) + * - other: OK! The last pointer between 0xA000 and 0xBFFF is returned. Note that the last pointer is indicating the first free byte. + */ +FILE *fopen(const char *path, const char *mode) { + + unsigned char sp = __stdio_filecount; + FILE *stream = (FILE *)((unsigned int)sp | 0x8000); // We set bit 7 of the high byte, to differentiate from NULL. + + // Parse path + char pathstep = 0; + char *pathtoken = path; + char pathlen = 0; + char pathpos = sp * __STDIO_FILECOUNT; + + __logical = 0; + __device = 0; + __channel = 0; + + char num; + + // Iterate while path is not \0. + do { + if (*pathtoken == ',' || *pathtoken == '\0') { + if (pathstep > 0) { + char pathcmp = *path; + switch (pathcmp) { + case 'D': + case 'L': + case 'C': + num = (char)atoi(path + 1); + path = pathtoken + 1; + } + switch (pathcmp) { + case 'L': + __logical = num; + break; + case 'D': + __device = num; + break; + case 'C': + __channel = num; + break; + } + } else { + __stdio_file.filename[pathpos] = '\0'; + path = pathtoken + 1; + } + pathstep++; + } else { + if (pathstep == 0) { + __stdio_file.filename[pathpos] = *pathtoken; + pathpos++; + } + } + pathtoken++; + } while (*(pathtoken - 1)); + + __status = 0; + + if(!__logical) + __logical = __stdio_filecount+1; + if(!__device) + __device = 8; + if(!__channel) + __channel = __stdio_filecount+2; + +#ifdef __DEBUG_FILE + printf("open file, l=%u, d=%u, c=%u, f=%s", __logical, __device, __channel, __filename); +#endif + + cbm_k_setnam(__filename); + cbm_k_setlfs(__logical, __device, __channel); + + cbm_k_open(); + + __status = cbm_k_readst(); + + if (ferror(stream)) { + // The POSIX standard specifies that in case of file not found, NULL is returned. + // However, the error needs to be cleared from the device. + // This needs to be done using ferror, but this function needs a FILE* stream. + // As fopen returns NULL in case file not found, the ferror must be called before return + // to clear the error from the device. Otherwise the device is left with a red blicking led. + cbm_k_close(__logical); + return NULL; + } + + __stdio_filecount++; + +#ifdef __DEBUG_FILE + while(!kbhit()); +#endif + + + return (FILE *)stream; +} + +/** + * @brief Load a file to ram or (banked ram located between address 0xA000 and 0xBFFF), incrementing the banks. + * This function uses the new CX16 macptr kernal API at address $FF44. + * + * @param sptr The pointer between 0xA000 and 0xBFFF in banked ram. + * @param size The amount of bytes to be read. + * @param filename Name of the file to be loaded. + * @return ptr the pointer advanced to the point where the stream ends. + */ +unsigned int fgets(char *ptr, unsigned int size, FILE *stream) { + unsigned char sp = (unsigned char)stream; + +#ifdef __DEBUG_FILE + printf("load file, l=%u, d=%u, c=%u, b=%x, p=%p, si=%u", __logical, __device, __channel, bank_get_bram(), ptr, size); +#endif + + unsigned int read = 0; + unsigned int remaining = size; + + cbm_k_chkin(__logical); + __status = cbm_k_readst(); +#ifdef __DEBUG_FILE + printf(", chkin s=%u", __status); +#endif + if (__status) + return 0; + + unsigned int bytes = 0; + do { + if (!size) { +#ifdef __DEBUG_FILE + printf(", reading max ptr=%p", ptr); +#endif + bytes = cx16_k_macptr(0, ptr); + } else { + if (remaining >= 128) { +#ifdef __DEBUG_FILE + printf(", reading 128 ptr=%p", ptr); +#endif + bytes = cx16_k_macptr(128, ptr); + } else { +#ifdef __DEBUG_FILE + printf(", reading remaining=%u ptr=%p", remaining, ptr); +#endif + bytes = cx16_k_macptr(remaining, ptr); + } + } + + __status = cbm_k_readst(); +#ifdef __DEBUG_FILE + printf(", macptr s=%u", __status); +#endif + if (__status & 0xBF) { +#ifdef __DEBUG_FILE + printf("macptr error s=%u", __status); +#endif + return 0; + } + + if (bytes == 0xFFFF) { +#ifdef __DEBUG_FILE + printf("read error in file %s, s=%u, bank=%u, ptr=%p\n", __filename, __status, bank_get_bram(), ptr); +#endif + return 0; + } + +#ifdef __DEBUG_FILE + printf(", bytes=%u", bytes); +#endif + + read += bytes; + ptr += bytes; + + if (BYTE1(ptr) == 0xC0) + ptr -= 0x2000; + remaining -= bytes; + +#ifdef __DEBUG_FILE + printf(", size=%u, remaining=%u, read=%u", size, remaining, read); +#endif + + } while ((__status == 0) && ((size && remaining) || !size)); + +#ifdef __DEBUG_FILE + printf(", read bytes r=%u, s=%u\n", read, __status); +#endif + +#ifdef __DEBUG_FILE + while (!kbhit()) + ; +#endif + + return read; +} + +/** + * @brief Close a file. + * + * @param fp The FILE pointer. + * @return + * - 0x0000: Something is wrong! Kernal Error Code (https://commodore.ca/manuals/pdfs/commodore_error_messages.pdf) + * - other: OK! The last pointer between 0xA000 and 0xBFFF is returned. Note that the last pointer is indicating the first free byte. + */ +int fclose(FILE *stream) { + + unsigned char sp = (unsigned char)stream; + +#ifdef __DEBUG_FILE + printf("close file, l=%u", __logical); +#endif + + cbm_k_chkin(__logical); + + __status = cbm_k_readst(); + +#ifdef __DEBUG_FILE + printf(", chkin s=%u", __status); +#endif + if (__status) + return 0; + + cbm_k_close(__logical); + __status = cbm_k_readst(); + +#ifdef __DEBUG_FILE + printf(", close s=%u", __status); +#endif + + if (__status) + return -1; + + // cbm_k_clrchn(); + // #ifdef __DEBUG_FILE + // printf(", status=%u\n", __stdio_file.status); + // #endif + +#ifdef __DEBUG_FILE + // cbm_k_chkin(0); + // while(!kbhit()); +#endif + + __logical = 0; + __device = 0; + __channel = 0; + *__filename = '\0'; + + __stdio_filecount--; + + return 0; +} + +/** + * @brief POSIX equivalent of ferror for the CBM C language. + * This routine reads from secondary 15 the error message from the device! + * The result is an error string, including the error code, message, track, sector. + * The error string can be a maximum of 32 characters. + * + * @param stream FILE* stream. + * @return int Contains a non-zero value if there is an error. + */ +int ferror(FILE *stream) { + + unsigned char sp = (unsigned char)stream; + + cbm_k_setlfs(15, 8, 15); + cbm_k_setnam(""); + cbm_k_open(); + cbm_k_chkin(15); + + unsigned char st; + unsigned char errno_parsed = 0; + register char errno_len = 0; + + char ch = cbm_k_chrin(); + while (!(st = cbm_k_readst())) { + if (!errno_parsed) { + if (ch == ',') { + errno_parsed++; + char temp[4]; + strncpy(temp, __errno_error, errno_len+1); + __errno = atoi(temp); + } + } + __errno_error[errno_len] = ch; + errno_len++; + ch = cbm_k_chrin(); + // {asm {.byte $DB}} + } + __status = st; + cbm_k_close(15); + +#ifdef __DEBUG_FILE + printf("error: %s ", __errno_error); +#endif + + return __errno; +} + +/** + * @brief The POSIX error function, + * [perror](https://en.wikibooks.org/wiki/C_Programming/stdio.h/perror), + * is used in C and C++ to print an error message to stderr, + * based on the error state stored in errno.[1]It prints str and an implementation-defined error message corresponding to the global variable errno. + * + * + * @param prefix If the parameter prefix is non-NULL, perror will first print prefix followed by a colon and a space to standard error. + * Then, it will print the result of strerror to standard error, followed by a newline character. + */ +void perror(char *prefix) { + if (prefix) { + cputs(prefix); + cputs(": "); + } + cputs(__errno_error); + cputc('\n'); +} + +#endif \ No newline at end of file diff --git a/src/main/kc/lib/stdlib.c b/src/main/kc/lib/stdlib.c index feaac76c8..554b68437 100644 --- a/src/main/kc/lib/stdlib.c +++ b/src/main/kc/lib/stdlib.c @@ -4,7 +4,7 @@ #include // Top of the heap used by malloc() -unsigned char* HEAP_TOP = (unsigned char*)0xa000; +unsigned char* HEAP_TOP = (char*)0xa000; // Head of the heap. Moved backward each malloc() unsigned char* heap_head = HEAP_TOP; @@ -260,7 +260,7 @@ int atoi(const char *str) { i++; } // Iterate through all digits and update the result - for (; str[i]; ++i) + for (; str[i]>='0' && str[i]<='9'; ++i) res = res * 10 + str[i] - '0'; // Return result with sign if(negative) @@ -286,7 +286,7 @@ inline long labs(long x) { } // The random state variable -unsigned int rand_state = 1; +volatile unsigned int rand_state = 1; // Returns a pseudo-random number in the range of 0 to RAND_MAX (65535) // Uses an xorshift pseudorandom number generator that hits all different values diff --git a/src/main/kc/lib/string.c b/src/main/kc/lib/string.c index dafe5b58d..f0b111bc4 100644 --- a/src/main/kc/lib/string.c +++ b/src/main/kc/lib/string.c @@ -3,6 +3,28 @@ #include #include +/** + * @brief Fast copy of data from a source to a destination memory address. + * Since the amount of bytes to be copied is a byte long, it can be executed very fast. + * The parameter num can have a value 0, which in case is equal to 256, + * which allows 256 bytes to be copied using one single byte counter! + * Depending on the optimization of the compiler, this implementation can + * result in very fast code, but it should be inlined! + * + * @param destination The memory address as the destination. + * @param source The memory address as the source. + * @param num The amount of bytes to be copied. A value of 0 will copy 256 bytes!!! + * @return void* The resulting destination memory address. + */ +char* memcpy_fast(char* destination, char* source, unsigned char num) { + do { + *(destination+num) = *(source+num); + num--; + } while(num); + + return destination; +} + // Copy block of memory (forwards) // Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination. void* memcpy( void* destination, void* source, size_t num ) { @@ -37,6 +59,28 @@ void *memset(void *str, char c, size_t num) { return str; } +/** + * @brief Fast initialization of an area pointed by a destination memory address to one value c. + * Since the amount of bytes to be initialized is a byte long, it can be executed very fast. + * The parameter num can have a value 0, which in case is equal to 256, + * which allows 256 bytes to be copied using one single byte counter! + * Depending on the optimization of the compiler, this implementation can + * result in very fast code, but it should be inlined! + * + * @param destination The destination memory address as the start of the memory area. + * @param c The byte value initializing the memory area.. + * @param num The amount of bytes to be copied. A value of 0 will set an area of 256 bytes!!! + * @return void* The resulting destination memory address. + */ +inline char* memset_fast(char* destination, char c, unsigned char num) { + do { + *(destination+num) = c; + num--; + } while(num); + + return destination; +} + // Copies the C string pointed by source into the array pointed by destination, including the terminating null character (and stopping at that point). char* strcpy( char* destination, char* source ) { char* src = source; @@ -61,6 +105,16 @@ char *strncpy(char *dst, const char *src, size_t n) { return dst; } +// Concatenates the C string pointed by source into the array pointed by destination, including the terminating null character (and stopping at that point). +char* strcat( char* destination, char* source ) { + char* src = source; + char* dst = destination + strlen(destination); + while(*src) *dst++ = *src++; + *dst = 0; + return destination; +} + + // Converts a string to uppercase. char * strupr(char *str) { char * src = str; @@ -142,4 +196,24 @@ int strncmp(const char *str1, const char *str2, size_t n) { s1++; s2++; } return (int)(signed char)(*s1-*s2); -} \ No newline at end of file +} + +/** + * @brief The string-error function, strerror, + * is a C/C++ function which translates an error code, + * usually stored in the global variable errno, + * to a human-readable error message. + * + * However, the POSIX standard is not followed in kickc. strerror accepts the errno parameter, but it is not used. + * Instead strerror returns the last known error. + * This is done for performance reasons and pragmatism, not to make error handling too memory intensive. + * + * + * @param errnum This variable is not used in the function, but kept for POSIX compatibility. + * @return char* the pointer to __errno_error, declared in errno.h (POSIX standard). + */ +char* strerror(int errnum) { + return __errno_error; +} + + diff --git a/src/test/kc/examples/cx16/cx16-bankload.ld b/src/main/kc/target/c128.ld similarity index 54% rename from src/test/kc/examples/cx16/cx16-bankload.ld rename to src/main/kc/target/c128.ld index 4ffbe5232..4c6920def 100644 --- a/src/test/kc/examples/cx16/cx16-bankload.ld +++ b/src/main/kc/target/c128.ld @@ -1,10 +1,8 @@ -// Create a bunch of files +// Commodore 128 PRG executable file .file [name="%O", type="prg", segments="Program"] -.file [name="SPRITE", type="bin", segments="Sprite"] .segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] +.segmentdef Basic [start=$1c01] .segmentdef Code [start=%P] .segmentdef Data [startAfter="Code"] .segment Basic -:BasicUpstart(%E) -.segmentdef Sprite +:BasicUpstart(%E) \ No newline at end of file diff --git a/src/main/kc/target/c128.tgt b/src/main/kc/target/c128.tgt new file mode 100644 index 000000000..8267260be --- /dev/null +++ b/src/main/kc/target/c128.tgt @@ -0,0 +1,13 @@ +{ + "description": "Commodore 128 PRG executable file.", + "extension": "prg", + "link": "c128.ld", + "start_address": "0x1c0d", + "cpu": "MOS6502X", + "interrupt": "rom_min_c64", + "zp_reserve": [ "0xfc..0xff" ], + "emulator": "x128", + "defines": { + "__C128__": 1 + } +} diff --git a/src/main/kc/target/cx16.ld b/src/main/kc/target/cx16.ld index 91922d13f..baa955af7 100644 --- a/src/main/kc/target/cx16.ld +++ b/src/main/kc/target/cx16.ld @@ -1,4 +1,4 @@ -// Commodore 64 PRG executable file +// Commander X16 PRG executable file .file [name="%O", type="prg", segments="Program"] .segmentdef Program [segments="Basic, Code, Data"] .segmentdef Basic [start=$0801] diff --git a/src/main/kc/target/pet8032.ld b/src/main/kc/target/pet8032.ld new file mode 100644 index 000000000..61a0b7e8c --- /dev/null +++ b/src/main/kc/target/pet8032.ld @@ -0,0 +1,8 @@ +// Commodore PET 8032 PRG executable file +.file [name="%O", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0401] +.segmentdef Code [start=%P] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(%E) \ No newline at end of file diff --git a/src/main/kc/target/pet8032.tgt b/src/main/kc/target/pet8032.tgt new file mode 100644 index 000000000..b83cdebe1 --- /dev/null +++ b/src/main/kc/target/pet8032.tgt @@ -0,0 +1,13 @@ +{ + "description": "Commodore PET 8032 PRG executable file.", + "extension": "prg", + "link": "pet8032.ld", + "start_address": "0x040d", + "cpu": "MOS6502X", + "interrupt": "rom_min_pet_8032", + "zp_reserve": [ "0xfc..0xff" ], + "emulator": "xpet", + "defines": { + "__PET8032__": 1 + } +} \ No newline at end of file diff --git a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java index df4514641..9962eb7e9 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java +++ b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java @@ -756,6 +756,11 @@ public class TestProgramsFast extends TestPrograms { compileAndCompare("examples/rom/rom.c"); } + @Test + public void testMemFast() throws IOException { + compileAndCompare("examples/memfast/memfast.c"); + } + @Test public void testNesDxycp() throws IOException { compileAndCompare("examples/nes/nes-dxycp.c"); diff --git a/src/test/kc/examples/c128/sprites.c b/src/test/kc/examples/c128/sprites.c new file mode 100644 index 000000000..d2559501d --- /dev/null +++ b/src/test/kc/examples/c128/sprites.c @@ -0,0 +1,404 @@ +/** + * @file sprites.c + * @author Sven Van de Velde (sven.van.de.velde@telenet.be) + * @brief This program is a little exercise we did in retro computer + * initiation in school on the Commodore 128 using the KICKC compiler! + * + * We play with sprites on the Commodore 128. + * The reason I chose the Commodore 128 for this exercise is because + * this machine contains commands in BASIC that help define sprites and + * that you can float around. + * However, this is all in BASIC and those commands are made for simple users, + * and these were only introduced very late by Commodore in the BASIC language. + * The Commodore 64 does not have these BASIC instructions. + * + * We are now going to learn how to use the C language to control the sprites ourselves. + * We do this by directly controlling the registers of the VIC II chip, + * who draws the screen on the Commodore 128 and in the Commodore 64. + * + * Follow the link below for a full description of the VIC II chip and its registers. + * It's all very technical, but in class we will see that it is not so bad and + * that it is very nice after you have practiced a bit! + * [VIC II chip registers](https://handwiki.org/wiki/Engineering:MOS_Technology_VIC-II). + * + * As mentioned, we work with sprites today. + * This link [sprites](https://codebase64.org/doku.php?id=base:spriteintro) explains how we control sprites in the VIC II chip. We learn how they are turned on and off. + * We position them on the x-axis and y-axis. We indicate where the bitmap of the sprite is located in the internet memory. + * We play with sprites. In class we will go over this explanation together. + * + * In this lesson we will learn: + * - What registers the VICII has for sprite operations. + * - How these registries work. + * - We learn to address them binary (with &, |, ~ operators). + * - We learn how to build C-functions to edit the sprite registers in a simple way. + * - We play with our C functions and learn to move sprites across the screen. + * - We learn how to make a scan line interrupt and how to make very smooth sprite movements. + * - We learn to animate sprites. + * - We learn all kinds of other properties of sprites. + * + * We create the following features and we learn how they work: + * + * inline void screen_color(char color) + * inline void border_color(char color) + * inline void sprite_enable(char sprite) + * inline void sprite_position_x(char sprite, unsigned int x) + * inline void sprite_position_y(char sprite, char y) + * inline void sprite_color(char sprite, char color) + * inline void sprite_bitmap(char sprite, char* bitmap) + * + * Note that you will type in your program yourself, but we make the exercises together, because it is all new. + * So don't worry, you will learn a lot and later you will be able to play with this yourself :-). + * + * + * EXERCISE 15.1: We give the screen a different color. + * - We use VIC II register 0xD020 to color the edge of the screen. + * - We use VIC II register 0xD021 to color the screen. + * - We complete functions screen_color and border_color. + * + * EXERCISE 15.2: Position the sprite in a different place on the x-axis and the y-axis! + * - Which VIC II registers do you use for this? + * - Do you understand how the registers work? + * - We complete function sprite_enable to turn on the sprite. + * - We complete function sprite_position_x to position the sprite on the x-axis. + * - We complete function sprite_position_y to position the sprite on the y-axis. + * - We complete function sprite_bitmap to refer the sprite to the sprite bitmap. + * - We position the sprite on x-axis at 100 and on y-axis at 100. + * + * EXERCISE 15.3: Now try to change the color of the sprite. + * - We use VIC II registers D027 to D02E. + * - We complete function sprite_color to give the sprite a color. + * + * EXERCISE 15.4: Draw your own sprite in the excel sheet, and cut/paste the binary data into your c program. + * - Recompile and run your program. Does it work? + * - Ideas for a sprite are spaceships, planes, faces. Keep it simple. + * + * EXERCISE 15.5: Now make a 2nd and a 3rd sprite, based on the 1st sprite, but change it a bit. + * - Declare and allocate the bitmap of the 2nd and 3rd sprite. + * - Now try to adjust your program so that the 2nd sprite appears after a random keystroke. + * - To achieve this, you need to use the function to adjust the sprite bitmap register. + * + * EXERCISE 15.6: Now try to switch the sprite bitmap every 16 frames between the 1st sprite and the 2nd and the 3rd sprite. + * - We use the "grid line" method. Let me explain. The code scheleton contains all this logic. + * - We have to declare a counter that adds up every time. + * - For every 16 frames, we adjust the sprite bitmap to the next bitmap. + * + * EXERCISE 15.7: Now try to move the sprite on the x-axis, from position 50 to position 255. + * - If the sprite has landed at position 255, the position should be set back to 50 and we start from scratch. + * - We use a scan line interrupt to do this. + * + * EXERCISE 15.8: Now try to put the sprite BEYOND the position 255 on the x-axis! + * - You need a special register here! + * - You have to ask Sven how this register works. + * - We will learn here how to create a '|' (OR), use a '&' (AND), and a '~' (NOT) operator. + * + * EXERCISE 15.9: Now we try to move the sprite on the y-axis as well... + * + * @version 0.1 + * @date 2022-01-13 + * + * @copyright Copyright (c) 2023 + * + */ + +#pragma encoding(petscii_mixed) +#pragma var_model(zp) +#pragma target(C128) + +#include +#include +#include + +#include + +// We declare and initialize the registers to give the screen and border a color. +// For the color of the screen we use VIC II register 0xD021. +// For the color of the border we use VIC II register 0xD020. +char* const vic_background_color_0 = (char*)0xD021; +char* const vic_border_color = (char*)0xD020; + +// We declare and initialize the registers that contain the sprite pointers. +// Sprite pointers refer to the addresses where the sprite drawing is located. +char* const vic_sprite_bitmap_base = (char*)0x07F8; + +// We declare the variables to place sprites on the x-axis and y-axis. +char* const vic_sprite_x_base = (char*)0xD000; +char* const vic_sprite_y_base = (char*)0xD001; +char* const vic_sprite_x_msb = (char*)0xD010; + +// We declare the variables to give sprites a color. +// There are 8 registers from D027 to D02E that contain the color of sprite 0 to 7. +char* const vic_sprite_color_base = (char*)0xD027; + +// We declare the VICII register to show or hide a sprite. +// Each bit represents 1 sprite. +char* const vic_sprite_enable = (char*)0xD015; + +// We declare the VIC II register which contains the current grid (character) line of the screen. +// This grid line register is at address 0xD012 in bit 0 to 7, +// But register 0xD011 in bit 7, contains the 8th grid line bit which can test the values after 255! +// In other words, if bit 7 of register is 0xD011 at 1, then the scan line is past the 255th line! +char* const vic_raster_low = (char*)0xD012; +char* const vic_raster_high = (char*)0xD011; // We gebruiken hier ENKEL de 7de bit! + +// spite_bitmap0 +// SOLUTION 15.4: +static __address(0x2000) char sprite_bitmap_0[3*21] = { +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b00011000, 0b00000000, +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b01111110, 0b00000000, +0b00000001, 0b11111111, 0b10000000, +0b00000011, 0b11111111, 0b11000000, +0b00000111, 0b11111111, 0b11100000, +0b00011100, 0b10010010, 0b01111000, +0b00000111, 0b11111111, 0b11100000, +0b00000001, 0b11111111, 0b10000000, +0b00000000, 0b01000010, 0b00000000, +0b00000000, 0b10000001, 0b00000000, +0b00000011, 0b00000000, 0b11000000, +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b00000000, 0b00000000 +}; + +// Ship1 +// SOLUTION 15.5: +static __address(0x2040) char sprite_bitmap_1[3*21] = { +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b00001100, 0b00000000, +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b01111110, 0b00000000, +0b00000001, 0b11111111, 0b10000000, +0b00000011, 0b11111111, 0b11000000, +0b00000111, 0b11111111, 0b11100000, +0b00011110, 0b01001001, 0b00111000, +0b00000111, 0b11111111, 0b11100000, +0b00000001, 0b11111111, 0b10000000, +0b00000000, 0b01000010, 0b00000000, +0b00000000, 0b10000001, 0b00000000, +0b00000011, 0b00000000, 0b11000000, +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b00000000, 0b00000000 +}; + +// Ship2 +// SOLUTION 15.5: +static __address(0x2080) char sprite_bitmap_2[3*21] = { +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b00110000, 0b00000000, +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b01111110, 0b00000000, +0b00000001, 0b11111111, 0b10000000, +0b00000011, 0b11111111, 0b11000000, +0b00000111, 0b11111111, 0b11100000, +0b00011101, 0b00100100, 0b10111000, +0b00000111, 0b11111111, 0b11100000, +0b00000001, 0b11111111, 0b10000000, +0b00000000, 0b01000010, 0b00000000, +0b00000000, 0b10000001, 0b00000000, +0b00000011, 0b00000000, 0b11000000, +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b00000000, 0b00000000, +0b00000000, 0b00000000, 0b00000000 +}; + +char* sprite_bitmap_array[3] = {sprite_bitmap_0, sprite_bitmap_1, sprite_bitmap_2}; + + +inline void screen_color(char color) { + // SOLUTION 15.1: + *vic_background_color_0 = color; +} + +inline void border_color(char color) { + // SOLUTION 15.1: + *vic_border_color = color; +} + +inline void sprite_enable(char sprite) { + // SOLUTION 15.2: + // We activate the sprite 0 and 1 by setting bit 0 and 1 to 1 in the enable register. + *vic_sprite_enable = 1 << sprite; +} + +inline void sprite_position_x(char sprite, unsigned int x) { + // SOLUTION 15.2: + char* vic_sprite_x = vic_sprite_x_base; + vic_sprite_x += sprite << 1; + *vic_sprite_x = BYTE0(x); + + // SOLUTION 15.8: + if(BYTE1(x)) + *vic_sprite_x_msb = *vic_sprite_x_msb | 1; + else + *vic_sprite_x_msb = *vic_sprite_x_msb & ~1; +} + +inline void sprite_position_y(char sprite, char y) { + // SOLUTION 15.2: + char* vic_sprite_y = vic_sprite_y_base; + vic_sprite_y += sprite; + *vic_sprite_y = y; +} + +inline void sprite_color(char sprite, char color) { + // SOLUTION 15.3: + char* vic_sprite_color = vic_sprite_color_base; + vic_sprite_color += sprite; + *vic_sprite_color = color; +} + +inline void sprite_bitmap(char sprite, char* bitmap) { + // SOLUTION 15.2: + char* vic_sprite_bitmap = vic_sprite_bitmap_base; + vic_sprite_bitmap += sprite; + *vic_sprite_bitmap = (char)((unsigned int)bitmap >> 6); +} + +int main() { + + // You can skip these 2 instructions (ignore). Here we just put on the Commodore 128 + // the BASIC logic out that the sprite control does. + // On the Commodore 64, these instructions are not necessary. + *((char*)0216) = 255; + *((char*)0xA04) = *((char*)0xA04) & ~1; + + // We clear the screen. + clrscr(); + + // We do a loop in the main logic of this program, and we tested if a key was pressed. + // The character of the last keystroke used we store in ch, + // But now we initialize this value with 0 to indicate that no key was pressed. + unsigned char ch = 0; + + // This is a work variable that we keep track of to make sure we have the grid line + // Run logic only if bit 8 of the grid line falls back to 0. + // I'll explain it in class, why we have and do this. + // We perform the main logic only if raster_test equals 1. + unsigned raster_test = 1; + + // We keep track of the x position in a counter. + // The type of the x position must be an int, + // Because the screen has 320 pixels on the x-axis. + // We only have 256 possible values in a char. + // So we count with 2 bytes, and we use the type int. + // SOLUTION 15.7: + unsigned int x = 24; + + // Here is the sprite telletje, we use it to change the array of sprite bitmaps. + // SOLUTION 15.6: + unsigned char sprite_counter = 0; + + // This is the counter that counts every frame. + // SOLUTION 15.6: + unsigned char frame = 0; + + + + + // We give the screen a color of your choice. + // SOLUTION 15.1: + screen_color(1); + + // We give the border a color of your choice. + // SOLUTION 15.1: + border_color(1); + + // We activate sprite 0. + // SOLUTION 15.2: + sprite_enable(0); + + // We set the sprite pointer to the address of the sprite bitmap. + // SOLUTION 15.2: + sprite_bitmap(0, sprite_bitmap_0); + + // We put the sprite at a position on the x-axis an y-axis. + // SOLUTION 15.2: + sprite_position_x(0, 100); + sprite_position_y(0, 100); + + // We set the color of the sprites to a color of your choice. + // SOLUTION 15.3: + sprite_color(0, 0); + + + // We continue to run this logic until a key is pressed. + while(!ch) { + + // We tested whether we can raster_lijn tested and whether the 8th bit of the grid is set to 1. + // If the value of this bit is on, then we execute the logic. + if(raster_test && *vic_raster_high & 0x80) { + + // We put the sprite 0 x-axis an y-axis. + // SOLUTION 15.7: + sprite_position_x(0, x); + + sprite_position_y(0, 100); + + // We put the sprite pointer at the address of the sprite_bitmap counter. + // SOLUTION 15.6: + sprite_bitmap(0, sprite_bitmap_array[sprite_counter]); + + + // We now position our sprite at position +1 on the x-axis. + // If the position is equal to 0 (EXERCISE 15.7), + // or equal to 320 (EXERCISE 15.8), + // Then we position our sprite at position 24, the starting position. + // SOLUTION 15.7 and 15.8 : + if(x < 320) { + x++; + } else { + x = 24; + } + + // Here we add 1 to frame to keep track of how many frames we have had. + // SOLUTION 15.6: + frame += 1; + + // To ensure that we sprite_bitmap increase every 16 frames, + // we calculate the current frame AND 0b00010000. + // If the result is not 0, then the logic of the if is executed. + if((frame & 0x0F) == 0x0F) { + sprite_counter++; // We now increase the counter sprite_bitmap by 1. + if(sprite_counter == 3) { // If sprite_bitmap equals 3? + sprite_counter = 0; // Then we put sprite_bitmap back to 0. + } + } + + // We just read a character from the keyboard. + ch = kbhit(); + + // To ensure that we only run the logic 1 time, we put it + // raster_test flag at 0. + // We perform the main logic only if raster_test equals 1. + raster_test = 0; + + } else { + // Otherwise... Now we tested whether we can test the current grid line. + // If we are allowed to test raster_lijn, so if raster_test equals 0 + // AND or bit 8 of grid line equals 0. + if(!raster_test && !(*vic_raster_high & 0x80)) { + raster_test = 1; // Then we put raster_test back to 1; + } + } + + } + + return 1; +} diff --git a/src/test/kc/examples/cx16/cx16-bankaddressing.c b/src/test/kc/examples/cx16/cx16-bankaddressing.c deleted file mode 100644 index 77989733a..000000000 --- a/src/test/kc/examples/cx16/cx16-bankaddressing.c +++ /dev/null @@ -1,36 +0,0 @@ -// Example program for the Commander X16 -// Demonstrates some bank addressing calculations - -#pragma target(cx16) - -#include -#include <6502.h> -#include -#include -#include -#include - -void main() { - - dword src = (dword)0x02000; - dword num = 64*64*2; - - word inc = 0x0123; - - for(dword src=0x0000;src<0x3F000;src+=num) { - - dword calcbeg = src; - dword calcend = src+num+(-1); - byte bankbeg = BYTE2(calcbeg)<<3 | BYTE1(calcbeg)>>5 ; //(byte)(((((word)<(>calcbeg)<<8)|>(>5)+((word)<(>calcbeg)<<3)); - byte bankend = BYTE2(calcend)<<3 | BYTE1(calcend)>>5 ; //(byte)(((((word)<(>calcend)<<8)|>(>5)+((word)<(>calcend)<<3)); - const word borderbeg = 0xA000; - const word borderend = 0xA000+0x1FFF; - word beg = (WORD0(calcbeg)&0x1FFF); // stip off the top 3 bits, which are representing the bank of the word! - word end = (WORD0(calcend)&0x1FFF); // same for the end; - beg += borderbeg; - end += borderbeg; - - printf("cbeg=%x, add=%x, cend=%x, bbeg=%x, bend=%x, beg=%x, end=%x\n", calcbeg, num, calcend, bankbeg, bankend, beg, end ); - num+=inc; - } -} \ No newline at end of file diff --git a/src/test/kc/examples/cx16/cx16-bankload.c b/src/test/kc/examples/cx16/cx16-bankload.c deleted file mode 100644 index 3f904a4c1..000000000 --- a/src/test/kc/examples/cx16/cx16-bankload.c +++ /dev/null @@ -1,99 +0,0 @@ -// Commander X16 Load a file to a memory bank - -#pragma target(cx16) -#pragma link("cx16-bankload.ld") - -#include -#include -#include -#include -#include <6502.h> -#include -#include -#include - -#pragma data_seg(Sprite) -__export char SPRITE_PIXELS[] = kickasm(resource "ship.png") {{ - .var pic = LoadPicture("ship.png") - // palette: rgb->idx - .var palette = Hashtable() - // RGB value for each palette index - .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) { - .eval idx = nxt_idx++; - .eval palette.put(rgb,idx); - .eval palList.add(rgb) - } - } - } - .if(nxt_idx>16) .error "Image has too many colours "+nxt_idx - - .for(var i=0;i<16;i++) { - .var rgb = palList.get(i) - .var red = floor(rgb / [256*256]) - .var green = floor(rgb/256) & 255 - .var blue = rgb & 255 - // bits 4-8: green, bits 0-3 blue - .byte green&$f0 | blue/16 - // bits bits 0-3 red - .byte red/16 - } - - .for (var y=0; y<64; y++) { - .for (var x=0;x<64; x+=2) { - // Find palette index (add if not known) - .var rgb = pic.getPixel(x,y); - .var idx1 = palette.get(rgb) - .if(idx1==null) { - .printnow "unknown rgb value!" - } - // Find palette index (add if not known) - .eval rgb = pic.getPixel(x+1,y); - .var idx2 = palette.get(rgb) - .if(idx2==null) { - .printnow "unknown rgb value!" - } - .byte idx1*16+idx2; - } - } -}}; - -#pragma data_seg(Data) - -void main() { - - vera_layer_set_text_color_mode( 1, VERA_LAYER_CONFIG_16C ); - screenlayer(1); - clrscr(); - printf("\n\nsprite banked file load and display demo.\n"); - - // RAM Bank where sprite is loaded - const dword BANK_SPRITE = 0x12000; - // VRAM address of sprite - const dword VRAM_SPRITE = 0x10000; - // Sprite attributes: 8bpp, in front, 64x64, address SPRITE_PIXELS_VRAM - struct VERA_SPRITE SPRITE_ATTR = { WORD0(VRAM_SPRITE/32)|VERA_SPRITE_8BPP, 320-32, 240-32, 0x0c, 0xf1 }; - - char status = load_to_bank(8, "SPRITE", BANK_SPRITE ); - - memcpy_bank_to_vram(VERA_PALETTE+32, BANK_SPRITE-2, 32); - memcpy_bank_to_vram(VRAM_SPRITE, BANK_SPRITE+32-2, 64*32); - - SPRITE_ATTR.ADDR = WORD0(VRAM_SPRITE/32)|VERA_SPRITE_4BPP; - SPRITE_ATTR.X = 100; - SPRITE_ATTR.Y = 100; - memcpy_to_vram(BYTE2(VERA_SPRITE_ATTR), (char*)WORD0(VERA_SPRITE_ATTR), &SPRITE_ATTR, sizeof(SPRITE_ATTR)); - - // Enable sprites - *VERA_CTRL &= ~VERA_DCSEL; - *VERA_DC_VIDEO |= VERA_SPRITES_ENABLE; - -} diff --git a/src/test/kc/examples/cx16/cx16-input.c b/src/test/kc/examples/cx16/cx16-input.c index 49715884d..8ce170b10 100644 --- a/src/test/kc/examples/cx16/cx16-input.c +++ b/src/test/kc/examples/cx16/cx16-input.c @@ -1,12 +1,12 @@ #pragma target(cx16) #include -#include +#include #include -// Find the value of a keypress as returned by kernal getin() +// Find the value of a keypress as returned by conio kbhit() void main() { printf("\npress a key\n"); char test = 0; - while(test==0) test=getin(); + while(test==0) test=kbhit(); printf("\nchar = %u\n", test); } \ No newline at end of file diff --git a/src/test/kc/examples/cx16/cx16-sprites.c b/src/test/kc/examples/cx16/cx16-sprites.c index ad6538f60..48afa5e72 100644 --- a/src/test/kc/examples/cx16/cx16-sprites.c +++ b/src/test/kc/examples/cx16/cx16-sprites.c @@ -4,6 +4,7 @@ #pragma target(cx16) #include #include <6502.h> +#include #define NUM_SPRITES 32 @@ -53,15 +54,15 @@ struct VERA_SPRITE SPRITE_ATTR = { WORD0(SPRITE_PIXELS_VRAM/32)|VERA_SPRITE_8BPP void main() { // Copy sprite data to VRAM - memcpy_to_vram(BYTE2(SPRITE_PIXELS_VRAM), (char*)WORD0(SPRITE_PIXELS_VRAM), SPRITE_PIXELS, 64*64); + memcpy_vram_ram((vram_bank_t)BYTE2(SPRITE_PIXELS_VRAM), (vram_offset_t)WORD0(SPRITE_PIXELS_VRAM), (ram_ptr_t)SPRITE_PIXELS, 64*64); // Copy sprite palette to VRAM - memcpy_to_vram(BYTE2(VERA_PALETTE), (char*)WORD0(VERA_PALETTE), SPRITE_PIXELS+64*64, 0x200); + memcpy_vram_ram((vram_bank_t)BYTE2(VERA_PALETTE), (vram_offset_t)WORD0(VERA_PALETTE), (ram_ptr_t)SPRITE_PIXELS+64*64, 0x200); // Copy 8* sprite attributes to VRAM char* vram_sprite_attr = (char*)WORD0(VERA_SPRITE_ATTR); for(char s=0;s=SINX_LEN) i_x -= SINX_LEN; i_y += 19; if(i_y>=SINY_LEN) i_y -= SINY_LEN; diff --git a/src/test/kc/examples/cx16/cx16-text.c b/src/test/kc/examples/cx16/cx16-text.c index c4d18cc11..b2e1bdfc4 100644 --- a/src/test/kc/examples/cx16/cx16-text.c +++ b/src/test/kc/examples/cx16/cx16-text.c @@ -7,14 +7,14 @@ void main() { // Copy message to screen one char at a time char MSG[] = "hello world!"; - char* vaddr = DEFAULT_SCREEN; + vram_offset_t vaddr = DEFAULT_SCREEN; for(char i=0;MSG[i];i++) { 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)); + memcpy_vram_ram(1, DEFAULT_SCREEN+0x100, MSG2, sizeof(MSG2)); } diff --git a/src/test/kc/examples/cx16/cx16-tilemap.c b/src/test/kc/examples/cx16/cx16-tilemap.c deleted file mode 100644 index d782d1017..000000000 --- a/src/test/kc/examples/cx16/cx16-tilemap.c +++ /dev/null @@ -1,145 +0,0 @@ -// Example program for the Commander X16. -// Demonstrates the usage of the VERA layer 0 and 1. - -// Author: Sven Van de Velde - -// The default layer of the CX16 is layer 1. -// The CX16 starts in tile map mode, 1BPP in 16 color mode, and uses 8x8 tiles. -// The map base is address 0x00000 in VERA VRAM, the tile map is address 0x0F800. - -#pragma target(cx16) -#include -#include -#include -#include -#include <6502.h> - -void main() { - - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - dword tilebase = vera_layer_get_tilebase_address(1); - - vera_layer_mode_tile(0, 0x10000, tilebase, 128, 128, 8, 8, 1); - - screenlayer(0); - scroll(0); // Scrolling on conio is deactivated, so conio will output beyond the borders of the visible screen. - textcolor(WHITE); - bgcolor(GREEN); - - draw_characters(tilebase); - - // Enable VSYNC IRQ (also set line bit 8 to 0) - SEI(); - *KERNEL_IRQ = &irq_vsync; - *VERA_IEN = VERA_VSYNC; - CLI(); - - vera_layer_show(0); - while(!kbhit()); - - vera_layer_hide(0); - textcolor(GREY); - bgcolor(GREEN); - draw_characters(tilebase); - vera_layer_show(0); - - screenlayer(1); - - textcolor(WHITE); - bgcolor(BLACK); - printf("\n\nthis demo displays the design of the standard x16 commander\n"); - printf("character set on the vera layer 0. it's the character set i grew up with :-).\n"); - printf("\nthe smooth scrolling is implemented by manipulating the scrolling \n"); - printf("registers of layer 0. at each raster line interrupt, \n"); - printf("the x and y scrolling registers are manipulated. the cx16 terminal \n"); - printf("works on layer 1. when layer 0 is enabled with the scrolling, \n"); - printf("it gives a nice background effect. this technique can be used to implement\n"); - printf("smooth scrolling backgrounds using tile layouts in games or demos.\n"); - - textcolor(YELLOW); - printf("\npress a key to continue ..."); - - while(!kbhit()); - - screenlayer(0); - vera_layer_hide(0); - textcolor(DARK_GREY); - bgcolor(BLACK); - draw_characters(tilebase); - vera_layer_show(0); - - screenlayer(1); - gotoxy(0,20); - -} - -void draw_characters(dword tilebase) { - dword tilecolumn = tilebase; - dword tilerow = tilebase; - clrscr(); - - for(byte y:0..15) { - tilerow = tilebase; - for(byte r:0..7) { - tilecolumn = tilerow; - for(byte x:0..15) { - vera_vram_address0(tilecolumn,VERA_INC_0); - byte data = *VERA_DATA0; - byte bit = data; - for(byte b:8..1) { - bit = (data >> (b-1)) & $1; - printf("%c", (char)((bit)?'*':'.')); - } - tilecolumn += 8; - printf(""); - } - //printf("\n"); - tilerow += 1; - } - tilebase += 8*16; - } -} - -// X sine index -volatile int scroll_x = 0; -volatile int scroll_y = 0; -volatile int delta_x = 2; -volatile int delta_y = 0; -volatile int speed = 2; - -// VSYNC Interrupt Routine -__interrupt(rom_sys_cx16) void irq_vsync() { - - scroll_x += delta_x; - scroll_y += delta_y; - - if( scroll_x>(128*8-80*8)) { - delta_x = 0; - delta_y = speed; - scroll_x = (128*8-80*8); - } - if( scroll_y>(128*8-60*8)) { - delta_x = -speed; - delta_y = 0; - scroll_y = (128*8-60*8); - } - if(scroll_x<0) { - delta_x = 0; - delta_y = -speed; - scroll_x = 0; - } - if(scroll_y<0) { - delta_x = speed; - delta_y = 0; - scroll_y = 0; - } - - vera_layer_set_horizontal_scroll(0,(word)scroll_x); - vera_layer_set_vertical_scroll(0,(word)scroll_y); - - // Reset the VSYNC interrupt - *VERA_ISR = VERA_VSYNC; -} \ No newline at end of file diff --git a/src/test/kc/examples/cx16/cx16-veralayers.c b/src/test/kc/examples/cx16/cx16-veralayers.c deleted file mode 100644 index 0bc8cdfe1..000000000 --- a/src/test/kc/examples/cx16/cx16-veralayers.c +++ /dev/null @@ -1,135 +0,0 @@ -// Example program for the Commander X16. -// Demonstrates the usage of the VERA layer 0 and 1. - -// Author: Sven Van de Velde - -// The default layer of the CX16 is layer 1. -// The CX16 starts in tile map mode, 1BPP in 16 color mode, and uses 8x8 tiles. -// The map base is address 0x00000 in VERA VRAM, the tile map is address 0x0F800. - -#pragma target(cx16) -#include -#include -#include -#include - -void main() { - - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - // Wait for a keypress and after clear the line! - textcolor(YELLOW); - printf("press a key"); - while(!kbhit()); - clearline(); - - screenlayer(1); - - gotoxy(0,16); - textcolor(GREEN); - - printf("this program demonstrates the layer functionality in text mode.\n"); - - // Here we use the screensizex and screensizey functions to show the width and height of the text screen. - printf("\nvera card width = %u; height = %u\n", screensizex(), screensizey()); - - // This is the content of the main controller registers of the VERA of layer 1. - // Layer 1 is the default layer that is activated in the CX16 at startup. - // It displays the characters in 1BPP 16x16 color mode! - unsigned byte dcvideo = *VERA_DC_VIDEO; - printf("\nvera dc video = %x\n", dcvideo); - unsigned byte config = vera_layer_get_config(1); - printf("\nvera layer 1 config = %x\n", config); - unsigned byte layershown = vera_layer_is_visible(1); - printf("vera layer 1 shown = %c\n", layershown); - unsigned byte mapbase = vera_layer_get_mapbase(1); - unsigned byte tilebase = vera_layer_get_tilebase(1); - printf("vera layer 1 mapbase = %hhx, tilebase = %hhx\n", mapbase, tilebase); - - // Wait for a keypress and after clear the line! - textcolor(YELLOW); - printf("press a key"); - while(!kbhit()); - clearline(); - - // Now we continue with demonstrating the layering! - // We set the mapbase of layer 0 to an address in VRAM. - // We copy the tilebase address from layer 1, so that we reference to the same tilebase. - // We print a text on layer 0, which of course, won't yet be displayed, - // because we haven't activated layer 0 on the VERA. - // But the text will be printed and awaiting to be displayer later, once we activate layer 0! - // But first, we also print the layer 0 VERA configuration. - // This statement sets the base of the display layer 1 at VRAM address 0x0200 - - vera_layer_set_mapbase(0,0x80); // Set the map base to address 0x10000 in VERA VRAM! - vera_layer_set_config(0, vera_layer_get_config(1)); - vera_layer_set_tilebase(0, vera_layer_get_tilebase(1)); - - textcolor(WHITE); - config = vera_layer_get_config(0); - printf("\nvera layer 0 config = %x\n", vera_layer_get_config(0)); - layershown = vera_layer_is_visible(0); - printf("vera layer 0 shown = %x\n", layershown); - mapbase = vera_layer_get_mapbase(0); - tilebase = vera_layer_get_tilebase(0); - printf("vera layer 0 mapbase = %x, tilebase = %x\n", mapbase, tilebase); - - // Now we print the layer 0 text on the layer 0! - screenlayer(0); // We set conio to output to layer 0 instead of layer 1! - textcolor(BLUE); - bgcolor(BLACK); - clrscr(); // We clear the screen of layer 0! - bgcolor(WHITE); - gotoxy(19,4); - printf(" "); - gotoxy(19,5); - printf(" this is printed on layer 0 !!! "); - gotoxy(19,6); - printf(" "); - - screenlayer(1); // Now we ask conio again to output to layer 1! - - // Wait for a keypress and after clear the line! - textcolor(YELLOW); - bgcolor(BLACK); - printf("press a key to show layer 0 and show the text!"); - while(!kbhit()); - clearline(); - - // Now we activate layer 0. - vera_layer_show(0); - textcolor(WHITE); - bgcolor(BLACK); - printf("vera layer 0 shown = %x. ", vera_layer_is_visible(0)); - - // Wait for a keypress and after clear the line! - textcolor(YELLOW); - bgcolor(BLACK); - printf("press a key to hide layer 0 and hide the text again"); - while(!kbhit()); - clearline(); - - vera_layer_hide(0); - textcolor(WHITE); - bgcolor(BLACK); - printf("vera layer 0 shown = %x. ", vera_layer_is_visible(0)); - - // Wait for a keypress and after clear the line! - textcolor(YELLOW); - bgcolor(BLACK); - printf("press a key to finish"); - while(!kbhit()); - clearline(); - - clrscr(); - textcolor(RED); - bgcolor(WHITE); - gotoxy(19,10); - printf(" "); - gotoxy(19,11); - printf(" analyze the code and learn! "); - gotoxy(19,12); - printf(" "); -} diff --git a/src/test/kc/examples/cx16/cx16-veramodes.c b/src/test/kc/examples/cx16/cx16-veramodes.c deleted file mode 100644 index fb283c974..000000000 --- a/src/test/kc/examples/cx16/cx16-veramodes.c +++ /dev/null @@ -1,1230 +0,0 @@ -// Example program for the Commander X16. -// Demonstrates the usage of the VERA tile map modes and layering. - -// Author: Sven Van de Velde - -#pragma target(cx16) -#include -#include -#include -#include - -#include -#include -#include - -void main() { - - do { - vera_layer_mode_text(1, 0x00000, 0x0f800, 64, 64, 8, 8, 4); - vera_display_set_scale_double(); - vera_layer_show(1); - screenlayer(1); - - textcolor(WHITE); - bgcolor(BLUE); - clrscr(); - - printf( "\n *** vera demo ***\n\n" ); - printf( "1. bitmap - 320x240 - 1 bpp.\n"); - printf( "2. bitmap - 640x480 - 1 bpp.\n"); - printf( "3. bitmap - 320x240 - 2 bpp.\n"); - printf( "4. bitmap - 640x480 - 2 bpp.\n"); - printf( "5. bitmap - 320x240 - 4 bpp.\n"); - printf( "6. bitmap - 320x240 - 8 bpp.\n"); - - printf( "\na. text - 8x8 - 1 bpp, 16c.\n"); - printf( "b. text - 8x8 - 1 bpp, 256c.\n"); - - printf( "\nc. tile - 8x8 - 2 bpp.\n"); - printf( "d. tile - 16x16 - 2 bpp.\n"); - printf( "e. tile - 8x8 - 4 bpp.\n"); - printf( "f. tile - 16x16 - 4 bpp.\n"); - printf( "g. tile - 8x8 - 8 bpp.\n"); - printf( "h. tile - 16x16 - 8 bpp.\n"); - - printf( "\n0. exit.\n"); - - byte menu = 0; - while(menu==0) { - menu = getin(); - } - - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - switch( menu ) { - case 49: - bitmap_320_x_240_1BPP(); - break; - case 50: - bitmap_640_x_480_1BPP(); - break; - case 51: - bitmap_320_x_240_2BPP(); - break; - case 52: - bitmap_640_x_480_2BPP(); - break; - case 53: - bitmap_320_x_240_4BPP(); - break; - case 54: - bitmap_320_x_240_8BPP(); - break; - case 65: - text_8_x_8_1BPP_16_color(); - break; - case 66: - text_8_x_8_1BPP_256_color(); - break; - case 67: - tile_8_x_8_2BPP_4_color(); - break; - case 68: - tile_16_x_16_2BPP_4_color(); - break; - case 69: - tile_8_x_8_4BPP_16_color(); - break; - case 70: - tile_16_x_16_4BPP_16_color(); - break; - case 71: - tile_8_x_8_8BPP_256_color(); - break; - case 72: - tile_16_x_16_8BPP_256_color(); - break; - } - - vera_layer_hide(0); - vera_layer_mode_text(1, 0x00000, 0x0f800, 64, 64, 8, 8, 4); - vera_layer_show(1); - - screenlayer(1); - textcolor(WHITE); - bgcolor(BLUE); - clrscr(); - - } while( menu != 48 ); - -} - -void tile_16_x_16_8BPP_256_color() { - - vera_layer_mode_text( 1, 0x00000, 0x0F800, 128, 128, 8, 8, 256 ); - screenlayer(1); - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - byte tiles[256] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - }; - - // Before we can load the tiles into memory we need to re-arrange a few things! - // The amount of tiles is 256, the color depth is 256, so each tile is 256 bytes! - // That is 65356 bytes of memory, which is 64K. Yup! One memory bank in VRAM. - // VERA VRAM holds in bank 1 many registers that interfere loading all of this data. - // So it is better to load all in bank 0, but then there is an other issue. - // So the default CX16 character set is located in bank 0, at address 0xF800. - // So we need to move this character set to bank 1, suggested is at address 0xF000. - // The CX16 by default writes textual output to layer 1 in text mode, so we need to - // realign the moved character set to 0xf000 as the new tile base for layer 1. - // We also will need to realign for layer 1 the map base from 0x00000 to 0x10000. - // This is now all easily done with a few statements in the new kickc vera lib ... - - memcpy_in_vram(1, 0xF000, VERA_INC_1, 0, 0xF800, VERA_INC_1, 256*8); // We copy the 128 character set of 8 bytes each. - vera_layer_mode_tile(1, 0x10000, 0x1F000, 128, 64, 8, 8, 1); - vera_display_set_scale_none(); - - screenlayer(1); - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - // Now we can use the full bank 0! - // We set the mapbase of the tile demo to output to 0x12000, - // and the tilebase is set to 0x0000! - vera_layer_mode_tile(0, 0x14000, 0x00000, 64, 64, 16, 16, 8); - - - word tilebase = 0x0000; - memcpy_to_vram(0, tilebase, tiles, 256); - tilebase+=256; - for(byte t:1..255) { - for(byte p:0..255) { - tiles[p]+=1; - } - memcpy_to_vram(0, tilebase, tiles, 256); - tilebase+=256; - } - - //vera_tile_area(byte layer, word tileindex, byte x, byte y, byte w, byte h, byte hflip, byte vflip, byte offset) - - vera_tile_area(0, 0, 0, 0, 40, 30, 0, 0, 0); - - word tile = 0; - - // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. - byte row = 1; - for(byte r:0..11) { - byte column = 0; - for(byte c:0..19) { - vera_tile_area(0, tile, column, row, 1, 1, 0, 0, 0); - column+=2; - tile++; - tile &= 0xff; - } - row += 2; - } - - gotoxy(0,50); - printf("vera in tile mode 8 x 8, color depth 8 bits per pixel.\n"); - - printf("in this mode, tiles are 8 pixels wide and 8 pixels tall.\n"); - printf("each tile can have a variation of 256 colors.\n"); - printf("the vera palette of 256 colors, can be used by setting the palette\n"); - printf("offset for each tile.\n"); - printf("here each column is displaying the same tile, but with different offsets!\n"); - printf("each offset aligns to multiples of 16 colors in the palette!.\n"); - printf("however, the first color will always be transparent (black).\n"); - - vera_layer_show(0); - - while(!getin()); - - vera_tile_area(0, 0, 0, 0, 40, 30, 0, 0, 0); - - tile = 0; - row = 0; - for(byte r:0..11) { - byte column = 0; - for(byte c:0..19) { - vera_tile_area(0, tile, column, row, 2, 2, 0, 0, 0); - column+=2; - tile++; - tile &= 0xff; - } - row += 2; - } - - while(!getin()); - - memcpy_in_vram(0, 0xF800, VERA_INC_1, 1, 0xF000, VERA_INC_1, 256*8); // We copy the 128 character set of 8 bytes each. -} - - -void tile_8_x_8_8BPP_256_color() { - - vera_layer_mode_tile(0, 0x04000, 0x14000, 128, 128, 8, 8, 8); - vera_display_set_scale_none(); - - vera_layer_mode_text( 1, 0x00000, 0x0F800, 128, 128, 8, 8, 256 ); - screenlayer(1); - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - byte tiles[64] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - }; - - word tilebase = 0x4000; - memcpy_to_vram(1, tilebase, tiles, 64); - tilebase+=64; - for(byte t:1..255) { - for(byte p:0..63) { - tiles[p]+=1; - } - memcpy_to_vram(1, tilebase, tiles, 64); - tilebase+=64; - } - - //vera_tile_area(byte layer, word tileindex, byte x, byte y, byte w, byte h, byte hflip, byte vflip, byte offset) - - vera_tile_area(0, 0, 0, 0, 80, 60, 0, 0, 0); - - word tile = 0; - - // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. - byte row = 1; - for(byte r:0..7) { - byte column = 1; - for(byte c:0..31) { - vera_tile_area(0, tile, column, row, 1, 1, 0, 0, 0); - column+=2; - tile++; - tile &= 0xff; - } - row += 2; - } - - tile = 0; - row = 20; - for(byte r:0..7) { - byte column = 1; - for(byte c:0..31) { - vera_tile_area(0, tile, column, row, 2, 2, 0, 0, 0); - column+=2; - tile++; - tile &= 0xff; - } - row += 2; - } - - vera_layer_show(0); - - gotoxy(0,50); - printf("vera in tile mode 8 x 8, color depth 8 bits per pixel.\n"); - - printf("in this mode, tiles are 8 pixels wide and 8 pixels tall.\n"); - printf("each tile can have a variation of 256 colors.\n"); - printf("the vera palette of 256 colors, can be used by setting the palette\n"); - printf("offset for each tile.\n"); - printf("here each column is displaying the same tile, but with different offsets!\n"); - printf("each offset aligns to multiples of 16 colors in the palette!.\n"); - printf("however, the first color will always be transparent (black).\n"); - - while(!getin()); - - memcpy_in_vram(0, 0xF800, VERA_INC_1, 1, 0xF000, VERA_INC_1, 256*8); // We copy the 128 character set of 8 bytes each. -} - - -void tile_16_x_16_4BPP_16_color() { - - vera_layer_mode_tile(0, 0x04000, 0x14000, 128, 128, 16, 16, 4); - vera_display_set_scale_none(); - - vera_layer_mode_text( 1, 0x00000, 0x0F800, 128, 128, 8, 8, 256 ); - screenlayer(1); - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - byte tiles[2048] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, - 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, - 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, - 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, - 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, - 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, - 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, - 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, - 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, - 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, - 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, - 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, - 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, - 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, - 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, - 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, - 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, - 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, - 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, - 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, - 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, - 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, - 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, - 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, - 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, - 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, - 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, - 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, - 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, - 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, - 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, - 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, - 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, - 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, - 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, - 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, - 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, - 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, - 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, - 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, - 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, - 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, - 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, - 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, - 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, - 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, - 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, - 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, - 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, - 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, - 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, - 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, - 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, - 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, - 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, - 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, - 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, - 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, - 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, - 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, - 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, - 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, - 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, - 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, - 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, - 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, - 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, - 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, - 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, - 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, - 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, - 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, - 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, - 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, - 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, - 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, - 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, - 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, - 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, - 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, - 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, - 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, - 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, - 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, - 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, - 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, - 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, - 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, - 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, - 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, - 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, - 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, - 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, - 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - }; - - memcpy_to_vram(1, 0x4000, tiles, 2048); - - //vera_tile_area(byte layer, word tileindex, byte x, byte y, byte w, byte h, byte hflip, byte vflip, byte offset) - - vera_tile_area(0, 0, 0, 0, 40, 30, 0, 0, 0); - - word tile = 0; - - // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. - tile = 0; - byte column = 1; - for(byte c:0..7) { - vera_tile_area(0, tile, column, 1, 1, 1, 0, 0, 0); - column+=4; - tile++; - } - column = 1; - for(byte c:0..7) { - vera_tile_area(0, tile, column, 3, 1, 1, 0, 0, 0); - column+=4; - tile++; - } - - tile = 0; - column = 1; - for(byte c:0..7) { - vera_tile_area(0, tile, column, 5, 3, 3, 0, 0, 0); - column+=4; - tile++; - } - column = 1; - for(byte c:0..7) { - vera_tile_area(0, tile, column, 9, 3, 3, 0, 0, 0); - column+=4; - tile++; - } - - tile = 0; - byte offset = 0; - - byte row = 13; - - for(byte r:0..7) { - byte column = 1; - for(byte c:0..31) { - vera_tile_area(0, tile, column, row, 1, 1, 0, 0, offset); - column+=1; - tile++; - if((c & 0x0f) == 0x0f) offset++; - tile &= 0x0f; - } - row += 1; - } - - vera_layer_show(0); - - gotoxy(0,50); - printf("vera in tile mode 16 x 16, color depth 4 bits per pixel.\n"); - - printf("in this mode, tiles are 16 pixels wide and 16 pixels tall.\n"); - printf("each tile can have a variation of 16 colors.\n"); - printf("the vera palette of 256 colors, can be used by setting the palette\n"); - printf("offset for each tile.\n"); - printf("here each column is displaying the same tile, but with different offsets!\n"); - printf("each offset aligns to multiples of 16 colors in the palette!.\n"); - printf("however, the first color will always be transparent (black).\n"); - - while(!getin()); -} - - -void tile_8_x_8_4BPP_16_color() { - - vera_layer_mode_tile(0, 0x04000, 0x14000, 128, 128, 8, 8, 4); - vera_display_set_scale_none(); - - vera_layer_mode_text( 1, 0x00000, 0x0F800, 128, 128, 8, 8, 256 ); - screenlayer(1); - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - byte tiles[512] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, - 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, - 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, - 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, - 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, - 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, - 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, - 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, - 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, - 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, - 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, - 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, - 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, - 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, - 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, - 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, - 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, - 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, - 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, - 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, - 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, - 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - }; - - memcpy_to_vram(1, 0x4000, tiles, 512); - - vera_tile_area(0, 0, 0, 0, 80, 60, 0, 0, 0); - - word tile = 0; - - // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. - tile = 0; - byte column = 1; - for(byte c:0..7) { - vera_tile_area(0, tile, column, 1, 1, 1, 0, 0, 0); - column+=8; - tile++; - } - column = 1; - for(byte c:0..7) { - vera_tile_area(0, tile, column, 3, 1, 1, 0, 0, 0); - column+=8; - tile++; - } - - tile = 0; - column = 1; - for(byte c:0..7) { - vera_tile_area(0, tile, column, 5, 6, 6, 0, 0, 0); - column+=8; - tile++; - } - column = 1; - for(byte c:0..7) { - vera_tile_area(0, tile, column, 12, 6, 6, 0, 0, 0); - column+=8; - tile++; - } - - tile = 0; - byte offset = 0; - - byte row = 20; - - for(byte r:0..7) { - byte column = 1; - for(byte c:0..31) { - vera_tile_area(0, tile, column, row, 2, 2, 0, 0, offset); - column+=2; - tile++; - if((c & 0x0f) == 0x0f) offset++; - tile &= 0x0f; - } - row += 2; - } - - vera_layer_show(0); - - gotoxy(0,50); - printf("vera in tile mode 8 x 8, color depth 4 bits per pixel.\n"); - - printf("in this mode, tiles are 8 pixels wide and 8 pixels tall.\n"); - printf("each tile can have a variation of 16 colors.\n"); - printf("the vera palette of 256 colors, can be used by setting the palette\n"); - printf("offset for each tile.\n"); - printf("here each column is displaying the same tile, but with different offsets!\n"); - printf("each offset aligns to multiples of 16 colors in the palette!.\n"); - printf("however, the first color will always be transparent (black).\n"); - - while(!getin()); -} - - -void tile_16_x_16_2BPP_4_color() { - - vera_layer_mode_tile(0, 0x04000, 0x14000, 128, 128, 16, 16, 2); - vera_display_set_scale_none(); - - vera_layer_mode_text( 1, 0x00000, 0x0F800, 128, 128, 8, 8, 256 ); - screenlayer(1); - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - byte tiles[256] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - }; - - memcpy_to_vram(1, 0x4000, tiles, 256); - - //vera_tile_area(byte layer, word tileindex, byte x, byte y, byte w, byte h, byte hflip, byte vflip, byte offset) - - vera_tile_area(0, 0, 0, 0, 40, 30, 0, 0, 0); - - // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. - vera_tile_area(0, 0, 4, 2, 1, 1, 0, 0, 0); - vera_tile_area(0, 1, 10, 2, 1, 1, 0, 0, 0); - vera_tile_area(0, 2, 16, 2, 1, 1, 0, 0, 0); - vera_tile_area(0, 3, 22, 2, 1, 1, 0, 0, 0); - - // Draw 4 squares with each tile, starting from row 6, width 4, height 4, separated by 2 characters. - vera_tile_area(0, 0, 4, 4, 4, 4, 0, 0, 0); - vera_tile_area(0, 1, 10, 4, 4, 4, 0, 0, 0); - vera_tile_area(0, 2, 16, 4, 4, 4, 0, 0, 0); - vera_tile_area(0, 3, 22, 4, 4, 4, 0, 0, 0); - - word tile = 0; - byte offset = 0; - - byte row = 10; - - for(byte r:0..3) { - byte column = 4; - for(byte c:0..16) { - vera_tile_area(0, tile, column, row, 1, 1, 0, 0, offset); - column+=2; - offset++; - } - tile++; - tile &= 0x3; - row += 2; - } - - vera_layer_show(0); - - gotoxy(0,50); - printf("vera in tile mode 8 x 8, color depth 2 bits per pixel.\n"); - - printf("in this mode, tiles are 8 pixels wide and 8 pixels tall.\n"); - printf("each tile can have a variation of 4 colors.\n"); - printf("the vera palette of 256 colors, can be used by setting the palette\n"); - printf("offset for each tile.\n"); - printf("here each column is displaying the same tile, but with different offsets!\n"); - printf("each offset aligns to multiples of 16 colors, and only the first 4 colors\n"); - printf("can be used per offset!\n"); - printf("however, the first color will always be transparent (black).\n"); - - while(!getin()); -} - -void tile_8_x_8_2BPP_4_color() { - - vera_layer_mode_tile(0, 0x04000, 0x14000, 128, 128, 8, 8, 2); - vera_display_set_scale_none(); - - vera_layer_mode_text( 1, 0x00000, 0x0F800, 128, 128, 8, 8, 256 ); - screenlayer(1); - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - byte tiles[64] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; - - byte map[16] = {0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x02,0x00,0x02,0x00,0x03,0x00,0x03,0x00}; - - memcpy_to_vram(1, 0x4000, tiles, 64); - - //vera_tile_area(byte layer, word tileindex, byte x, byte y, byte w, byte h, byte hflip, byte vflip, byte offset) - - vera_tile_area(0, 0, 0, 0, 80, 60, 0, 0, 0); - - // Draw 4 squares with each tile, staring from row 2, width 10, height 10, separated by 2 characters. - vera_tile_area(0, 0, 4, 4, 10, 10, 0, 0, 0); - vera_tile_area(0, 1, 16, 4, 10, 10, 0, 0, 0); - vera_tile_area(0, 2, 28, 4, 10, 10, 0, 0, 0); - vera_tile_area(0, 3, 40, 4, 10, 10, 0, 0, 0); - - word tile = 0; - byte offset = 0; - - byte row = 22; - - for(byte r:0..3) { - byte column = 4; - for(byte c:0..15) { - vera_tile_area(0, tile, column, row, 3, 3, 0, 0, offset); - column+=4; - offset++; - } - tile++; - tile &= 0x3; - row += 4; - } - - vera_layer_show(0); - - gotoxy(0,50); - printf("vera in tile mode 8 x 8, color depth 2 bits per pixel.\n"); - - printf("in this mode, tiles are 8 pixels wide and 8 pixels tall.\n"); - printf("each tile can have a variation of 4 colors.\n"); - printf("the vera palette of 256 colors, can be used by setting the palette\n"); - printf("offset for each tile.\n"); - printf("here each column is displaying the same tile, but with different offsets!\n"); - printf("each offset aligns to multiples of 16 colors, and only the first 4 colors\n"); - printf("can be used per offset!\n"); - printf("however, the first color will always be transparent (black).\n"); - - while(!getin()); -} - - -void text_8_x_8_1BPP_256_color() { - - // Configure the VERA card to work in text, 256 mode. - // The color mode is here 256 colors, (256 foreground on a black transparent background). - vera_layer_mode_text( 1, 0x00000, 0x0F800, 128, 128, 8, 8, 256 ); - vera_display_set_scale_none(); - screenlayer(1); - - for(byte c:0..255) { - textcolor(c); - printf(" ****** "); - } - - vera_layer_show(1); - - gotoxy(0,50); - textcolor(WHITE); - bgcolor(BLACK); - printf("vera in text mode 8 x 8, color depth 1 bits per pixel.\n"); - printf("in this mode, tiles are 8 pixels wide and 8 pixels tall.\n"); - printf("each character can have a variation of 256 foreground colors.\n"); - printf("here we display 6 stars (******) each with a different color.\n"); - printf("however, the first color will always be transparent (black).\n"); - printf("in this mode, the background color cannot be set and is always transparent.\n"); - - while(!getin()); -} - -void text_8_x_8_1BPP_16_color() { - - // Configure the VERA card to work in text. - // The color mode is here 16 colors, (16 foreground and 16 background colors). - vera_layer_mode_text(1, 0x00000, 0x0F800, 128, 128, 8, 8, 16); - vera_display_set_scale_none(); - screenlayer(1); - - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - - for(byte c:0..255) { - bgcolor(c); - printf(" ++++++ "); - } - - vera_layer_show(1); - - gotoxy(0,50); - textcolor(WHITE); - bgcolor(BLACK); - printf("vera in text mode 8 x 8, color depth 1 bits per pixel.\n"); - printf("in this mode, tiles are 8 pixels wide and 8 pixels tall.\n"); - printf("each character can have a variation of 16 foreground colors and 16 background colors.\n"); - printf("here we display 6 stars (******) each with a different color.\n"); - printf("however, the first color will always be transparent (black).\n"); - printf("in this mode, the background color cannot be set and is always transparent.\n"); - - while(!getin()); -} - - -void bitmap_320_x_240_1BPP() { - - // Before we configure the bitmap pane into vera memory we need to re-arrange a few things! - // It is better to load all in bank 0, but then there is an issue. - // So the default CX16 character set is located in bank 0, at address 0xF800. - // So we need to move this character set to bank 1, suggested is at address 0xF000. - // The CX16 by default writes textual output to layer 1 in text mode, so we need to - // realign the moved character set to 0xf000 as the new tile base for layer 1. - // We also will need to realign for layer 1 the map base from 0x00000 to 0x14000. - // This is now all easily done with a few statements in the new kickc vera lib ... - memcpy_in_vram(1, 0xF000, VERA_INC_1, 0, 0xF800, VERA_INC_1, 256*8); // We copy the 128 character set of 8 bytes each. - vera_layer_mode_bitmap(0, (dword)0x00000, 320, 1); - - vera_layer_mode_tile(1, 0x14000, 0x1F000, 128, 64, 8, 8, 1); - screenlayer(1); - - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - gotoxy(0,25); - printf("vera in bitmap mode,\n"); - printf("color depth 1 bits per pixel.\n"); - printf("in this mode, it is possible to display\n"); - printf("graphics in 2 colors (black or color).\n"); - - vera_layer_show(0); - - bitmap_init(0, 0x00000); - bitmap_clear(); - - gotoxy(0,29); - textcolor(YELLOW); - printf("press a key ..."); - - while(!getin()) { - bitmap_line(modr16u(rand(),320,0), modr16u(rand(),320,0), modr16u(rand(),200,0), modr16u(rand(),200,0), rand()&1); - }; - - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - gotoxy(0,26); - printf("here you see all the colors possible.\n"); - - gotoxy(0,29); - textcolor(YELLOW); - printf("press a key ..."); - - word x = 0; - byte color = 0; - while(!getin()) { - bitmap_line(x, x, 0, 199, color); - color++; - if(color>1) color=0; - x++; - if(x>319) x=0; - }; - memcpy_in_vram(0, 0xF800, VERA_INC_1, 1, 0xF000, VERA_INC_1, 256*8); // We copy the 128 character set of 8 bytes each. -} - -void bitmap_640_x_480_1BPP() { - - vera_display_set_scale_none(); - - // Before we configure the bitmap pane into vera memory we need to re-arrange a few things! - // It is better to load all in bank 0, but then there is an issue. - // So the default CX16 character set is located in bank 0, at address 0xF800. - // So we need to move this character set to bank 1, suggested is at address 0xF000. - // The CX16 by default writes textual output to layer 1 in text mode, so we need to - // realign the moved character set to 0xf000 as the new tile base for layer 1. - // We also will need to realign for layer 1 the map base from 0x00000 to 0x14000. - // This is now all easily done with a few statements in the new kickc vera lib ... - memcpy_in_vram(1, 0xF000, VERA_INC_1, 0, 0xF800, VERA_INC_1, 256*8); // We copy the 128 character set of 8 bytes each. - vera_layer_mode_tile(1, 0x14000, 0x1F000, 128, 64, 8, 8, 1); - - vera_layer_mode_bitmap(0, (dword)0x00000, 640, 1); - - screenlayer(1); - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - gotoxy(0,54); - printf("vera in bitmap mode,\n"); - printf("color depth 1 bits per pixel.\n"); - printf("in this mode, it is possible to display\n"); - printf("graphics in 2 colors (black or color).\n"); - - vera_layer_show(0); - - bitmap_init(0, 0x00000); - bitmap_clear(); - - gotoxy(0,59); - textcolor(YELLOW); - printf("press a key ..."); - - while(!getin()) { - bitmap_line(modr16u(rand(),639,0), modr16u(rand(),639,0), modr16u(rand(),399,0), modr16u(rand(),399,0), rand()&1); - }; - - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - gotoxy(0,54); - printf("here you see all the colors possible.\n"); - - gotoxy(0,59); - textcolor(YELLOW); - printf("press a key ..."); - - word x = 0; - byte color = 0; - while(!getin()) { - bitmap_line(x, x, 0, 399, color); - color++; - if(color>1) color=0; - x++; - if(x>639) x=0; - }; - memcpy_in_vram(0, 0xF800, VERA_INC_1, 1, 0xF000, VERA_INC_1, 256*8); // We copy the 128 character set of 8 bytes each. -} - -void bitmap_320_x_240_2BPP() { - - // Before we configure the bitmap pane into vera memory we need to re-arrange a few things! - // It is better to load all in bank 0, but then there is an issue. - // So the default CX16 character set is located in bank 0, at address 0xF800. - // So we need to move this character set to bank 1, suggested is at address 0xF000. - // The CX16 by default writes textual output to layer 1 in text mode, so we need to - // realign the moved character set to 0xf000 as the new tile base for layer 1. - // We also will need to realign for layer 1 the map base from 0x00000 to 0x14000. - // This is now all easily done with a few statements in the new kickc vera lib ... - memcpy_in_vram(1, 0xF000, VERA_INC_1, 0, 0xF800, VERA_INC_1, 256*8); // We copy the 128 character set of 8 bytes each. - vera_layer_mode_tile(1, 0x14000, 0x1F000, 128, 64, 8, 8, 1); - - vera_layer_mode_bitmap(0, (dword)0x00000, 320, 2); - - screenlayer(1); - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - gotoxy(0,25); - printf("vera in bitmap mode,\n"); - printf("color depth 2 bits per pixel.\n"); - printf("in this mode, it is possible to display\n"); - printf("graphics in 4 colors.\n"); - - vera_layer_show(0); - - bitmap_init(0, 0x00000); - bitmap_clear(); - - gotoxy(0,29); - textcolor(YELLOW); - printf("press a key ..."); - - while(!getin()) { - bitmap_line(modr16u(rand(),320,0), modr16u(rand(),320,0), modr16u(rand(),200,0), modr16u(rand(),200,0), rand()&3); - }; - - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - gotoxy(0,26); - printf("here you see all the colors possible.\n"); - - gotoxy(0,29); - textcolor(YELLOW); - printf("press a key ..."); - - word x = 0; - byte color = 0; - while(!getin()) { - bitmap_line(x, x, 0, 199, color); - color++; - if(color>3) color=0; - x++; - if(x>319) x=0; - }; - memcpy_in_vram(0, 0xF800, VERA_INC_1, 1, 0xF000, VERA_INC_1, 256*8); // We copy the 128 character set of 8 bytes each. -} - -void bitmap_640_x_480_2BPP() { - - // Before we configure the bitmap pane into vera memory we need to re-arrange a few things! - // It is better to load all in bank 0, but then there is an issue. - // So the default CX16 character set is located in bank 0, at address 0xF800. - // So we need to move this character set to bank 1, suggested is at address 0xF000. - // The CX16 by default writes textual output to layer 1 in text mode, so we need to - // realign the moved character set to 0xf000 as the new tile base for layer 1. - // We also will need to realign for layer 1 the map base from 0x00000 to 0x14000. - // This is now all easily done with a few statements in the new kickc vera lib ... - memcpy_in_vram(1, 0xF000, VERA_INC_1, 0, 0xF800, VERA_INC_1, 256*8); // We copy the 128 character set of 8 bytes each. - vera_layer_mode_tile(1, 0x14000, 0x1F000, 128, 64, 8, 8, 1); - - vera_layer_mode_bitmap(0, (dword)0x00000, 640, 2); - - screenlayer(1); - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - gotoxy(0,54); - printf("vera in bitmap mode,\n"); - printf("color depth 1 bits per pixel.\n"); - printf("in this mode, it is possible to display\n"); - printf("graphics in 2 colors (black or color).\n"); - - vera_layer_show(0); - - bitmap_init(0, 0x00000); - bitmap_clear(); - - gotoxy(0,59); - textcolor(YELLOW); - printf("press a key ..."); - - while(!getin()) { - bitmap_line(modr16u(rand(),639,0), modr16u(rand(),639,0), modr16u(rand(),399,0), modr16u(rand(),399,0), rand()&3); - }; - - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - gotoxy(0,54); - printf("here you see all the colors possible.\n"); - - gotoxy(0,59); - textcolor(YELLOW); - printf("press a key ..."); - - word x = 0; - byte color = 0; - while(!getin()) { - bitmap_line(x, x, 0, 399, color); - color++; - if(color>3) color=0; - x++; - if(x>639) x=0; - }; - memcpy_in_vram(0, 0xF800, VERA_INC_1, 1, 0xF000, VERA_INC_1, 256*8); // We copy the 128 character set of 8 bytes each. -} - -void bitmap_320_x_240_4BPP() { - - // Before we configure the bitmap pane into vera memory we need to re-arrange a few things! - // It is better to load all in bank 0, but then there is an issue. - // So the default CX16 character set is located in bank 0, at address 0xF800. - // So we need to move this character set to bank 1, suggested is at address 0xF000. - // The CX16 by default writes textual output to layer 1 in text mode, so we need to - // realign the moved character set to 0xf000 as the new tile base for layer 1. - // We also will need to realign for layer 1 the map base from 0x00000 to 0x14000. - // This is now all easily done with a few statements in the new kickc vera lib ... - - memcpy_in_vram(1, 0xF000, VERA_INC_1, 0, 0xF800, VERA_INC_1, 256*8); // We copy the 128 character set of 8 bytes each. - vera_layer_mode_tile(1, 0x14000, 0x1F000, 128, 64, 8, 8, 1); - - vera_layer_mode_bitmap(0, (dword)0x00000, 320, 4); - - screenlayer(1); - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - gotoxy(0,25); - printf("vera in bitmap mode,\n"); - printf("color depth 4 bits per pixel.\n"); - printf("in this mode, it is possible to display\n"); - printf("graphics in 16 colors.\n"); - - vera_layer_show(0); - - bitmap_init(0, 0x00000); - bitmap_clear(); - - gotoxy(0,29); - textcolor(YELLOW); - printf("press a key ..."); - - while(!getin()) { - bitmap_line(modr16u(rand(),320,0), modr16u(rand(),320,0), modr16u(rand(),200,0), modr16u(rand(),200,0), rand()&15); - }; - - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - gotoxy(0,26); - printf("here you see all the colors possible.\n"); - - gotoxy(0,29); - textcolor(YELLOW); - printf("press a key ..."); - - word x = 0; - byte color = 0; - while(!getin()) { - bitmap_line(x, x, 0, 199, color); - color++; - if(color>15) color=0; - x++; - if(x>319) x=0; - }; - - memcpy_in_vram(0, 0xF800, VERA_INC_1, 1, 0xF000, VERA_INC_1, 256*8); // We copy the 128 character set of 8 bytes each. -} - -void bitmap_320_x_240_8BPP() { - - // Before we configure the bitmap pane into vera memory we need to re-arrange a few things! - // It is better to load all in bank 0, but then there is an issue. - // So the default CX16 character set is located in bank 0, at address 0xF800. - // So we need to move this character set to bank 1, suggested is at address 0xF000. - // The CX16 by default writes textual output to layer 1 in text mode, so we need to - // realign the moved character set to 0xf000 as the new tile base for layer 1. - // We also will need to realign for layer 1 the map base from 0x00000 to 0x14000. - // This is now all easily done with a few statements in the new kickc vera lib ... - memcpy_in_vram(1, 0xF000, VERA_INC_1, 0, 0xF800, VERA_INC_1, 256*8); // We copy the 128 character set of 8 bytes each. - vera_layer_mode_tile(1, 0x14000, 0x1F000, 128, 64, 8, 8, 1); - - vera_layer_mode_bitmap(0, (dword)0x00000, 320, 8); - - screenlayer(1); - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - gotoxy(0,25); - printf("vera in bitmap mode,\n"); - printf("color depth 8 bits per pixel.\n"); - printf("in this mode, it is possible to display\n"); - printf("graphics in 256 colors.\n"); - - vera_layer_show(0); - - bitmap_init(0, 0x00000); - bitmap_clear(); - - gotoxy(0,29); - textcolor(YELLOW); - printf("press a key ..."); - - while(!getin()) { - bitmap_line(modr16u(rand(),320,0), modr16u(rand(),320,0), modr16u(rand(),200,0), modr16u(rand(),200,0), rand()&255); - }; - - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - gotoxy(0,26); - printf("here you see all the colors possible.\n"); - - gotoxy(0,29); - textcolor(YELLOW); - printf("press a key ..."); - - word x = 0; - byte color = 0; - while(!getin()) { - bitmap_line(x, x, 0, 199, color); - color++; - x++; - if(x>319) x=0; - }; - - memcpy_in_vram(0, 0xF800, VERA_INC_1, 1, 0xF000, VERA_INC_1, 256*8); // We copy the 128 character set of 8 bytes each. -} diff --git a/src/test/kc/examples/cx16/ship.png b/src/test/kc/examples/cx16/ship.png deleted file mode 100644 index 295195466e7cf2ca23fbde9f9b8d33f2ec4ad94d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1142 zcmV-+1d02JP);WN_#AGYF%pP%5%M)gIY`=-lY)c*40u~QWzWnvX%R@x|&+(@2Za;*8Xwg(kNkI649uXl@JtfyF zg4I>|DJ7BC+Q7fe)kOePmD`Z2CIhzURVH?sa<{uYR+j;!i?G5+{0tzC z2rU}X(sclxXCPcF{KF0@CgLwP_0_)Cxn6D6+>cLjWGeR!bgQa zVZ(TP{;pOtH+lThU(f*>)PZMk9ZK+A&F=5?*J8#^^TFZCT#?XgOzmp5qJLT;`#|-X zo2*Z5VRf=UQ} zo6Ck`(pnb>PM5aXA_2$sHvp(bB?wCZZC)~*h5*)@t0Jg%NG{%VXAwJ}0Wh1#qwD}= zLtLuRWay2V^OYi}@3SLoK!B+Me${x&0NDP=|41htfn(Hs7mnkE|_ z7$0gA`_O_o;6tY5?d^pRKCBmd{{-=|Lh;2!$3905+gI(*7LPNY0y@ z09zT*$mZf6LZ=g81`ldnDL$(W<-DN)zZGoB(-VW6bpe)BPOL5JyPr+{{~xRg+BP z{;r_yIyjuYG2lXRxxoFP@|v*%bc2gN=)WUCg-X|fvVpkp+}qFbBvq>0U()|J;V}bsOlxZZ;F3t(6u!0xSfb* zo!^FM(X$#%fR6iw>^%+j4xOgxc@6-;vqx8*DD9#Kt8UFsIp19YxQ$x&!bd;K0+3WM zk%$`#5&{)MS=3T0S4@~3tm&it$Q2T+mT^oUEqE0Dc)$7`;7A(ja)@QCK1*WD<-~a#s diff --git a/src/test/kc/examples/cx16/spacedemo/Metal_1/frame_1.png b/src/test/kc/examples/cx16/spacedemo/Metal_1/frame_1.png deleted file mode 100644 index 86a26465f98f7b37b845915a91b15a7a397fb5a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 556 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|j01c^T!AzT z3yYVF<-L7b)s;y>u~Adzc6<2*MHOaAs3@Ghb#=?3EtU?BXZKC{_Uqf4U2Bf+TcW<+ z31qlnNswPK!+$g&AnLFXXit}?i(`mIZ)tF6*R;taq;O&fxrWNU5E4+Ho3@d{^h~x7H|0DZQ`P(0ijN=fuRN0*>%f! zLeq0>IvQt}PU-$K|M$0^(iM$AYz!^5_AN2kzplx#W>4xv$=GcQf4a*a0k!dQubx+L ze?-LD@b6Xb`;5!>p5*##>c6>2Xv6KL(@&UoY~MLgFQIR)e2C7Q>Yi__bjk$O>vuAh z^C{0WT#zNXW5I`m3%^cvj^29G;Z$8f{n3!uVJBWK-xqcL3x7IS^1X7^?-#!Bc3EYY zl&zO-_4>gT!;`;Cgxuz8uesM$(5IRAroZUIh02sUsqeJ;)-SkvsOz63<2800AFIs) p+ddvkTj5qO@%PhHd&S*#j34Xdqt|`k77C0q22WQ%mvv4FO#p$!1`GfI diff --git a/src/test/kc/examples/cx16/spacedemo/Metal_1/frame_2.png b/src/test/kc/examples/cx16/spacedemo/Metal_1/frame_2.png deleted file mode 100644 index 2de84d9255762c65757873b3100115926309445e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 609 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|j01c^T!AzT z3yYVF<-L7b)s;y>u~Adzc6<2*MHOaAs3@Ghb#=?3EtU?BXZKC{_Uqf4U2Bf+TcW<+ z31qlnNswPK!+$g&AnLFXXwQC67sn8b-rV4aRm_SU)@ubbW^Vspe@iuE_um;`U$1Oo z5m;Z*|LythTh+&=-aKnzx~udB^IDS&Z#Sj=O#B)9R@XONtn{C`(uK(lOBNUAuSh;U z$vZ+qaLR(8>w;fhp7U${-zkq-89(tl$ko5qaB7<*uyD@DXX{O!O*}QC9&WVl*7{y% zEb!ofnkC0dPPr4O19)tl-$_`;K0Khs)>3&OCA4LO|04DWV$6k2*9)26EmCe(G0?fz ztS#5aTzr2K>x<-`2xB{zrFx5mQ!ZRgu5CRxH|`JPZ|_nsmM-T)nbpB%{bwCq%7t8( zw$EC3b=rfSn_O(<7g|mIx@4o|72bQD5ze`RN<41$E&*HsyD+e+Z(lh zR&iac-r1FH>ewBBKE^9W$n5G0mmf0Bc6}_uQ5Q3GMdL2_792fLwTOWy!LTvl`)T92 zJ1bYLVrH!BjMx{iHYMqt;Pa%b246m#O_Q6RVleaV^~2{L2fMEf&=qsd6H_!eex`k^ s?Sbt-&qSw2#Q5m`sTL|{I9tbXc8y$(R?C7{z<6fxboFyt=akR{01Gt`ApigX diff --git a/src/test/kc/examples/cx16/spacedemo/Metal_1/frame_3.png b/src/test/kc/examples/cx16/spacedemo/Metal_1/frame_3.png deleted file mode 100644 index 6e22143157967cc4df69b5b2cfcf55159cb1be38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 574 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|j01c^T!AzT z3yYVF<-L7b)s;y>u~Adzc6<2*MHOaAs3@Ghb#=?3EtU?BXZKC{_Uqf4U2Bf+TcW<+ z31qlnNswPK!+$g&AnLFXXwMu^7sn8b-qPUcqQ?e2-Xe}Fv0-Qb`tN4QTxuWfoBm{$ zL0pjBL^k7w*~#l1DqNnOTkq2HT=`AqdY`K($xt#*@xtoWI)ThbGf z8qUvoe}YpeR4RU=?!gI80cqYxpOl<@JN0OQv(O=%^=?o21!HzgTnRBYX*Yc&a#hHc ziM2re_>IWky1Naxn{GX;n0WZspc1bS~S+~$~HUBlshP?@QokdsL z2XfraT%YU5FlCXihsSxF4$H%Ts=b-4miwQ%^<%xjzI(eRpL}GS7{~J@LOk@Dov$3r z_g%3izZUVofBa0R-{-D_X?P?LZ^PGLDT1vZ6PV{ODoD|CSKTz{U$uPJjB82P)|L3y zt=>0ziqp2cJ*UJ^>t##;i+F3mTk@1zuoWDai#^T zn{4j9y71IO?cn`K^H(!``t|>4w*tRen}@q5zolg9r^Q@<+2d!(Df#YF(f~#xgQu&X J%Q~loCIJ261epK; diff --git a/src/test/kc/examples/cx16/spacedemo/Metal_1/frame_4.png b/src/test/kc/examples/cx16/spacedemo/Metal_1/frame_4.png deleted file mode 100644 index 0b142132fbe00c6272ebb716e7b643100d3f1a04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 590 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|j01c^T!AzT z3yYVF<-L7b)s;y>u~Adzc6<2*MHOaAs3@Ghb#=?3EtU?BXZKC{_Uqf4U2Bf+TcW<+ z31qlnNswPK!+$g&AnLFXXwMo?7sn8b-qPTUNi7OI&V50vX8!sgzkA8mx2ccc3FORL z(weRAr;wERTuI61SWH@;%)7ka_2Dh4cXo7S&rsZ!UZKqV`B9UY^rIQc50Xzf)+9?Y z8>i{^RZAXoPm+@L?Jv%o_WSdW+y|#06$)GvHt0WfqwgK_qF8)4bnWTC^o`LTS$B{m672D;HRzK>vc-yZ<%Jtujb32yrU*y5> zUtjh`GdjUw|GdxzbJxgaiQJ7>t2=KI$MExeNA$mw{+~5C{X6g5Dg5Qnl)js~k0E8j z0nyrur@|Y)Y@8zK@NfCX3eH70rvKd{m3yT0b4@$Dzy40ib$(GyNk;L%s+vQ2Hf;(J z`uyq3`OS%pPN}Mg6jv)qpYsn%ULzHvF|)+vWps#0XzgA1zlW-WlON^!ELER;^Ks+u z3kNkfruoHmGVCha_i=+UcN~MH%M#8?hWw(7;nl$}Yb#q7W(=p^^@C1F2frh zk5!v&w0tWhYxb=PYrRst=}oh}+#B7`$2+WUa({TgL43nsTcy)ACcDdhtFj8#`hL&< Y?JIXz=XYigFj5&jUHx3vIVCg!04drHYybcN diff --git a/src/test/kc/examples/cx16/spacedemo/Metal_1/metal_1.png b/src/test/kc/examples/cx16/spacedemo/Metal_1/metal_1.png deleted file mode 100644 index 7cbec374ef38d617a690fff7b0548da261253e18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1494 zcmV;{1u6Q8P)Px#Gf+%aMF0Q*5)cravb5gn?kOxOK}bPbT~c#>dyAQztir_!2?@p0)q9DHVrgP? zacT_=43wp;A=fak0000HbW%=J0RR90|NsC0|NsC0|NsC0{}2^Gp#T5{G)Y83R9JoQ&5Uyz508Yi-qy&RKcR6k zb8h!*#=9NIEP%iT!HSl<2`s=Oe60KP`9RD0bp`-~WuoG@=M8B=t-}IN0vi#7UpRAi zV&*ZPc+F{j_6rSP000N+2WN8z&mD7(m@b&S^YEu)mNj?rfBLR9?xXtW^s{ESptZ;q zTRI@x;m4Gpc+N+<9Q@+bb>J3c=VBqaCj1YWXMpEE(+|(517y${X|7BnUxQf7g6A{V z^u&R?I00k_=n^M&FNzjhv;}jYKGHnI^TCw}zeX|EIsnMSxi(Y}z?kw2{OG09CjJSqR`nMB#2+ z7fOKq-HmPm`SU%)0%D2bLiDb~$7Z7&Y;#e#IW5eZe&4&VwhLE7{!Fdn}G zzzgJ{yBiT$*hUv-Xb6$1^OnTa9&_xyX+VlcR>}`hdkph_+FC4Vb zI>4IRX@*>K0l#CvA@L+6kQluj9C?)mg1?LaM<%v&LSEUYDFM_dKev~)&C~>cP{Lq_ zxVM0n$*6P%@@?J@R07sGo zV^*S0Xa_F6H|B7BD|=AvmApS!1y{W}moXq3#@fQc%ie6diT< zi-L|413MJi8$8^st1c>%T$-SA%1vG-t4t&a5^zTA*IqKGeq77F1vX=A&z@ zl+efl&Ko*d+MvYMm^6RiohK-Ge7l{mgH-QeG3azXc7XmGjaUdJP|7x6#`AiuElAhk wdK+Uy`st&?`xay{4hr<#2L2_nnH(zr0SixExrsO=Y5)KL07*qoM6N<$g6}833;+NC diff --git a/src/test/kc/examples/cx16/spacedemo/Metal_1/metal_2.png b/src/test/kc/examples/cx16/spacedemo/Metal_1/metal_2.png deleted file mode 100644 index 162915e83f80e95c2aa81e451ebdb9a499d11da0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1418 zcmV;51$Fv~P)Px#Gf+%aMF0Q*5)cravb5gn?kOxOK}bPbT~c#>dyAQztir_!2?@p0)q9DHVrgP? zacT_=43wp;A=fak0000HbW%=J0RR90|NsC0|NsC0|NsC0{}2^Gp#T5`=t)FDR9J2{QuY9nE+~S>+YqyRjCfiOdj~qsB6SH&ZDl$0?qih>O#` z{Q#Eu;aJCgI2Zu%!*`Blu6Fnxmq3vSv_OlLaz$UG;QrnG6MqgA!K(n^Suhm;IFVA; zRq-nm(?#FO5P0M=Dmi%0dp`j@X{inQ_CVl(-~539u;6%d9WeKt0DR!$n7SH5U__!m zIpldh=zisE$|721a_(-7NQ4Vm?0LArrDHiP;9aj2yY5&tSR(yHItSo60qo8N05B0nkdIN)c*+6HV;mWK0{G~{PyrSs z1Io}&h9QblgJiN#fpi?0mA_@mrZLIEev!vYMM{?hf%E9MA=MV26c2e5~gRh!0D@aWM8Yo)7wP4P&k_ z1C_q1%$$!S2G@RdUWu+f68fciD35q5Vxi|QwYnR>hSieMxWS0twD8qy&UB;v3NT$5 z`@~T?P-fA)DkLGoos1_7e47`{-Ht603Al5mKq$?Tx##r4h0DiJ}$3}Vy#muj2UgMw)4s^8l+)EC4OtMQP(l<0AJ#YHvg~&cRl5y=1wEZ*~(YL8@ zfEKFXT_{I3vOB}+oHPktZ|u9$I`iXWn^_zm0805wHVzjmTYb(whs1P< zo=Y`jPxUpF%Sz|b+Ugc8(TNNIZ;*&-H{nuZ^<{z`);m)O8U)fT&KFfg>!FlesQA=xxs?)6Ab*dmba}z&dTx@a>?8bGCtrP^A2ytXaMI|M~g7` YAFdZzwr5$t5dZ)H07*qoM6N<$g2@?>YXATM diff --git a/src/test/kc/examples/cx16/spacedemo/Metal_1/metal_3.png b/src/test/kc/examples/cx16/spacedemo/Metal_1/metal_3.png deleted file mode 100644 index 6a08b28872fc44e2befa2d873d619447ac8519a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1420 zcmV;71#|j|P)Px#Gf+%aMF0Q*5)cravb5gn?kOxOK}bPbT~c#>dyAQztir_!2?@p0)q9DHVrgP? zacT_=43wp;A=fak0000HbW%=J0RR90|NsC0|NsC0|NsC0{}2^Gp#T5`>PbXFR9J8?ItWfx-`T3(c5T4TWe(-wW$hs zs{awIl~F4W#hPfZqi*BIR@Gz;?6;->G1cCBZ)$##E7!-~yC{)KDW$8lRyUm87+X5i ze!t@r|IdlmiZ^b9Iv&ur2CUI~t=d7Q-N>+D-Z9Qw&H!}h+QuL=STSmEwT?b|hmin) z3H1qZ#Q*>sF*6Zw3V_1W1~b=wg1kh^T8K_?XMttT(AUipepQ}CU4g{Q*Aq_-Imu++d00NZ^{82B) z9}Mo?i-Lg%w1g3W7}i+b2gP(calc=fa0hiQH5hD4#p<@zQU}uHM$#+7^BTri23W!Q zQgm825Pk&_Oc{lP!C!#WMBJ=wyZcJFLZx~l!x4}0fo2c@LHipM9AIZu!4SBCxe>CM z@LZ260OaX|{UQ&7LVc7$xSa_RL|*hNY!QVfVO)gkdg8_g@)D6obyj@#D5k0_jMq-| z1uKtMJvnf{)&fIlYyi;KFN)~};7$Z-r~?IUZU^eI(zb;YQ462S`2cVZNM-i2B&VX< z+=*UHpQ|xfJ0tfHK=I8G7W0#c0xy6Sg?B!{3j4rY>*j8>-rXHH*D;%UaKFxjoRCPZ z!TY))EKOWW-3LyA&eaGv%W2{)Oo@1Mg^)lC>m#EJJ#brQ828ImKKKA>pdz;i1RKJJ zC|E?{nFs%7;vbKI%NPP#c+^L$OAmg?gJb3PK#UqvsJahaCVmRza|+Ku%327@0kD54 zXAFD&l5+%rEm8i>gwrHmjR;moWcR-q6rZ_@3plc$?WbEX1gXqX;-5RyB?EQ<34rg# zB=1b<$zZ0P#nDsK+o*Yqmi;3GtIhzKC_KID9*J%brSuFlxvmV1TC_$!n;?T}TEvl?f&%w|d?wj>Q3 zvx}}jKft&z3{npuaUqja+^0V!1N;L(nh>Jk3xC1tW{tcJ0pSM#@mm96zOEUfAbm#V zU1{xSfXo9&;h69O=n$X~uKmJ*QxhrDk%EC)!~%|q7m6QD=m7AIL~HW!xca9PSN-wJ zl;xM@9I*}tacbFof&rfxyqkK4QS#B80DcG)eh8yVsPfr~3&3rO^#0~VSnB|`Oz>pj zcr8v7z9v%SKSerb7(LV7vA;*bZ?gjcC*4VuJP{Y5!ML z{arZ%5PdWm^bjLSdHQ04_XTu%o8EiYJH?sTI7cGgy|qXC&7J%FG8&7@3M0=-p86O? zz5w=QFn7KHz-Iwq^k;<1@SgpK(iPc(a)mitn`uToOL=Ky_RLia_tzrGX;q^o=TN{9 z#skB)Q!&YVfGM02K$(KV#|fbJKh;Rj-U-mCg>WLDi6_Xj@AAc<$zUq-`|-S8{zX`c z6eF|PkLr5j|7xpKM6zpM?~*s;XPf`%ify^Sdq2%o)|TJ7i?iQ&iKt(frFo8~_~nW< zMA%zoJY8d7;$*YR-_N+@zomQZ*2EV7y^s%zHWoEtvpF9E%QG^vV)GohexrYUBbP3F aH~t3=kXb$dCFJJ-0000Px#Gf+%aMF0Q*5)cravb5gn?kOxOK}bPbT~c#>dyAQztir_!2?@p0)q9DHVrgP? zacT_=43wp;A=fak0000HbW%=J0RR90|NsC0|NsC0|NsC0{}2^Gp#T5`=t)FDR9Jv9lfO{T8>?h(K3nBUbwSrDSOK~ zH`S)NXiWu6nT2tv;@>SDBbAhLZ+l5v#?E+zS}WO}Xt{UIY76HM3CI|VVc-Yht(8)= zr6euwdnO{=f=bDmUiIaR;#8j}VngFCL+RH0$f=A14F)!5%8iwlZaBj2@7Qy@ByGM0Fh<@0=bsQNGUZ4abaMK(e)GHhEoB+tX+(QmbHM!vSa&F z8ZfAW0;LZCv;f=-ys4BSGWLD!N+S>KPvDR{&BgX-ANE^zvR}=QfS@gB$&%V}fCEUw zKR8M^3chR5g*M5#40tfL0f%-ojSkSt7XW_%klvZMg4h9pdnpH{!S3Az*HHaKgI8#f z!Sr_6#v@rQC9)tz94DAS?m82n6O>x8PfY0rWcnqBy)XzFrm5yZUP>rtt6g8DX^bZI%NbyW4bMVcOr9Rh6#s`#Azq4-LfP`(a=_%76Z~iTzXN!rvuC4gV1+@< zqAa8+ETu8m&jE0EV{m|AP}{#D5v>emT))1UP**6M3Ekx@Gor6$f&RZj@B;_f-vGiT z$Ofxw(|?v~JipCdk&UvFGV&4t-8k5Hlw>4AQO=zw|G(4crh#dAnt(_|F&e0V1>!{Y zozl-ZxJ)o7&<1~u0{)D=`lAkiAwNGRF8}J!>Tjm{Kt9cI@S49WMc%COm`E0aiDx4#O+Zl;<|*Sl znf#WG9z;HONH`Hk%z{gU#@M=6t}EMWtyki`f?ao!=h--LH~v^&8%dW5EBarzBsg;+>X#p@sLtAa=7K-V4@tfNSeO6e zm2H+qrA4C18-VL{YX+wm9H9$GUpV99&6;WN_#AGYF%pP%5%M)gIY`=-lY)c*40u~QWzWnvX%R@x|&+(@2Za;*8Xwg(kNkI649uXl@JtfyF zg4I>|DJ7BC+Q7fe)kOePmD`Z2CIhzURVH?sa<{uYR+j;!i?G5+{0tzC z2rU}X(sclxXCPcF{KF0@CgLwP_0_)Cxn6D6+>cLjWGeR!bgQa zVZ(TP{;pOtH+lThU(f*>)PZMk9ZK+A&F=5?*J8#^^TFZCT#?XgOzmp5qJLT;`#|-X zo2*Z5VRf=UQ} zo6Ck`(pnb>PM5aXA_2$sHvp(bB?wCZZC)~*h5*)@t0Jg%NG{%VXAwJ}0Wh1#qwD}= zLtLuRWay2V^OYi}@3SLoK!B+Me${x&0NDP=|41htfn(Hs7mnkE|_ z7$0gA`_O_o;6tY5?d^pRKCBmd{{-=|Lh;2!$3905+gI(*7LPNY0y@ z09zT*$mZf6LZ=g81`ldnDL$(W<-DN)zZGoB(-VW6bpe)BPOL5JyPr+{{~xRg+BP z{;r_yIyjuYG2lXRxxoFP@|v*%bc2gN=)WUCg-X|fvVpkp+}qFbBvq>0U()|J;V}bsOlxZZ;F3t(6u!0xSfb* zo!^FM(X$#%fR6iw>^%+j4xOgxc@6-;vqx8*DD9#Kt8UFsIp19YxQ$x&!bd;K0+3WM zk%$`#5&{)MS=3T0S4@~3tm&it$Q2T+mT^oUEqE0Dc)$7`;7A(ja)@QCK1*WD<-~a#s diff --git a/src/test/kc/examples/cx16/spacedemo/Ship_1/ship_1_360_10.png b/src/test/kc/examples/cx16/spacedemo/Ship_1/ship_1_360_10.png deleted file mode 100644 index d40a2936fc844b41ff2c9e56475b41ebd919d092..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 502 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!j01c^T!AzvC+Cz(uWFs*tk|q) zr;7K^ZI1F$xVKc`*|n=dp+OQd5w- z?aFs~H~;TBXV{i)%@JsuHk-lamxR<`qbUll7uPc;?O<5O-=t^3YBBR9Lzl1Ob-SZ0 zK57L%d&7P3>hUEE>jH#C8IL(~>h6BNMCrm2hqHAoopLGP7?rZ)8%!CMIE`24hzG7w zXqJO3wz#?@(RIpZs l@yF8#-|X+~{~W(YpQVHANAUVZTELiK@O1TaS?83{1OShE(c=IB diff --git a/src/test/kc/examples/cx16/spacedemo/Ship_1/ship_1_360_11.png b/src/test/kc/examples/cx16/spacedemo/Ship_1/ship_1_360_11.png deleted file mode 100644 index 62ad7fb17bf1ca18135eed72a061edd90ea5c851..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 831 zcmV-F1Hk-=P);WN_#AGYF%pP%5%M)gIY`=-lY)c*40u~QWzWXd+`B#=nNfgEti zFBw;;m!3nuVxADBgeDTHnGBs4fg&(VRY4J0&{1~H5l9ojsX$meAnr*82u}vufD^Fu z%w*H^6QBTpjy%hjB!=7gdAl@*^ zB_&{-6L6I;Kn%oFG;~oE(P-qQ1KO^G3i9ir(GL~;Yt#W^@}=NY5*`2o?dF1p%q~Qn z-d_szGa%z(N1mS4q~{RN3-GZeabTn&5~hJlG4mGm1{nDX9tq%}vlLES%nrEs!72iv z7iH~2VeB=VNze>UEQXq33w#lBskwXlQEQh9sOF>7fTKkX{j3BxiC0-B<{9Y|ZtAMa zjSr?w-Ap`=)CUk4h}x}jaEu;+A#nzPK!Rvx=kp$@-y0w&2mpsK75p_hQA3{rU?m66 zPgjAh+J0)xICJ`uM+#`&m+db593YQ2n1WctdO->Ko~a@TE!~J3AZaOPa?f3suu(ay zkAXlUvJI|Tz?J8s9bv7VbWO!)7CZ^ox5LN`{|m@i_&OFmvZ2%0MF22S*bF%pF!$;0 zOp4i8F*rj4=I^VRrUSE-9wKv1_yWXnV81!c1>-Qe+8@BljznCPmH6o7{{=LoNI(f* zQ-F;W(am`gkhTm3>wtIw+cF^UsFt_HCBO#2vmwIT62KBbxrr7P*wOk;qXSl6IdC<5 zeTt=*o;QH<{4nB?zbIV%7vkTv=+Xie+=-O&mRv!9mKfwm@@zX002ov JPDHLkV1hB%YmEQ^ diff --git a/src/test/kc/examples/cx16/spacedemo/Ship_1/ship_1_360_12.png b/src/test/kc/examples/cx16/spacedemo/Ship_1/ship_1_360_12.png deleted file mode 100644 index c58128a1d0397243ff142f164fd12ee3d2317427..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1091 zcmV-J1ibr+P);WN_#AGYF%pP%5%M)gIY`=-lY)c*40u~QWzWKokTC1i{n~KdZ-}NCLSE-7??X;Q|49GmL`*B(ROvlpJ|bqa+ZIP{`4D45T6v zkswzZ=gGmzHtkb|0xsRwi5G&YDl7?rNf+JuQejcm>?{y~r!($e3||Q-@~~tGq_{6J z?tXE0f}VwviZ;PmO^zgh3H_@2XAJKM^6xDQu0}QCch$tA zD~MXVU9=^@zV`Sc&{+mP(slGguZCwdBbrKldLdeLnxHQxEP_ZpW+^5ru0$Qc3o5WS zeKkiRSTFChKsE`|Lrg%_EWQBaG{Zex0uS(>#<05Dx$}iA+fTENqH_u_sbIqKOr1+DB{a$+ z_(_5FYoeHBz{DknYRM3K)FR({=#@dQydgf|kE35@F}MVRK^QT+ z0124+{DjZFhSNP%UCuTPvhbU+RgAlzQg8s9Vfo@-guZ5rFX{K5dA?XBIx9 zW=yeLfZ{#-1b-X~1qG#85q4X6Y-?`zbW50S&BdnHbvxP!MZsD}k^qe`bnFo{D|2$uJ;d^zxu?MX zQm|l@Aw0)ZTOla65@hd|@T?COLBPcMpwTAWc0HhWD~~$_cu+P7D3*c)o5KBon%W_t z*Xw96gyS2*IQQ0VdY%1LHuv?{Pk)oNduadPu9vg@f8YP+`~eBgE2>HL_=5ld002ov JPDHLkV1h~o^R@s0 diff --git a/src/test/kc/examples/cx16/spacedemo/Ship_1/ship_1_360_2.png b/src/test/kc/examples/cx16/spacedemo/Ship_1/ship_1_360_2.png deleted file mode 100644 index b690978fb482c79c69ff59e7a48a3266635c6240..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1097 zcmV-P1h)H$P);WN_#AGYF%pP%5%M)gIY`=-lY)c*40u~QWzW+j1*82t@;?1uf_j z|NphKQ9G$~e2e9&c^Fm2c9Ld^%Ld6`U;ptUqJLxV+*%X=Y-?4e-nM<;_#-F6%$THY z8w-6Bh{T1N+|#`i@wykZnW@vj{+?vE3LpW%h+MP+uw@U3VQf{>X#Qu{V~F z0K~|ESO);PwB;B`gl%Ixb^!oU=n?=Hv2B~N3F^qG#abB%dyY!t##`F~;P*qIxgedK z05NW4<$%Ro1W1q682~SU6~JwJ^Og&THz-$nCrM)zvQGd$WBKnb;j#+=y+c4=Iw%0U zou4za%VWYfnpy$0CylIKF9<<809HxJNRj@CK)tJ?>s%V%vMU~SiWnmp-HZ^*1J+D= z>;fTZEbS~8_do;?ua*rb5)mG*kuf4!_|bUk-^j5E_#p^(g9@T^ zEBkCgL5hAvb9gyXfC}OkP)b6HQN_|>bspxap^t|%Vfa=25 zz(CnzmXF7f01Nu&1KU8T&su_JwiQW)5RnJYhG_5yQoKT>obufI>PD2TaVTJ(!>H^T zu0xbK>(C*u&8s0s3fzVG114>TAP5DHu~j->5lT_euk~Y84%oi|*qY|2wjXx|xC7w1 zI2wYt98fg=AQDml43}L~U&P=OAQp2Vn$B&3(7~q%+#VJ1PeN_j(ZCZxRXBJAElm$l zj?3kjp@t3=#i@+jMFf-wU_%kaZB}(0$7_3x)dF-s1?1>0bYjQv1{5ZP{|Z1J0LU}q z(iI5lC-A-n9tM%!x>oR2$T{GqJ#Jf=Bfs0vn*jvh8ciuACQ;NUNFv`nU=t&*gd|n@ zS^k=?_4DrWSb!4$H4`}C3I@P?_LERapvu~mQXTQUa#5pM1`Mig4g`$EnUDoQx!iEb zXOS=tB(>?oQ|%c5`QPi7AUKTb&1G8zgm0Lro~7wI-&Z|QSm=mqig_2-$TXj}o5`mTU87w|w{ zP19R|+;tw#g?JzE)p@`5_sIqC$;#YrpI`jiMfZRu`v-v4wfYU`|GfSIC=x3EF1uhL P00000NkvXXu0mjf@}2SI diff --git a/src/test/kc/examples/cx16/spacedemo/Ship_1/ship_1_360_3.png b/src/test/kc/examples/cx16/spacedemo/Ship_1/ship_1_360_3.png deleted file mode 100644 index e324623f20650171dd680a465dc057e167986cb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 844 zcmV-S1GD^zP);WN_#AGYF%pP%5%M)gIY`=-lY)c*40u~QWzWVh41_INARFN$ zz5mm8gnM(_Re_$CWRXSmdC<>*kK-RNBKn(HlUl3TF5tREYAJ;`MKG%}B(Q7(h?$Md ztl1U;JGfX(#JX&4VgQ)hW7hjVKud|>Jq6-K!j*g91iU#YRrdh&E=3hXxv$3uAp?T1 z5fu3H(=80)BEl}zS0|!1vTlMWi|CNC){M{7vH`oI71_D5t^usxk^sbC36Ocf$U6XM z0!S$3%bSX+ED$4gMvW7IJR0XfOG|*vbTa^B>608VLOZJIT}34(Mw0pqkkb-?KE8y5 zFQw>nfcR4I0;+X4Zbgxgh?oE%E(RcT7)(mdYK5tgX-ss}PXT@o05nLD-r5bZ?m>Sf zeC>dP#umaHS!@y*Cu%c*mms$S5Y;=ulpSM5)`%tmBMGQ}#ox^@*jcTGFpLz9Vg~Rc z#2DL`3wCxPg*qx~kT*AzNVuVU5TO@3u|)3a0^4{08_bsQ`{30}z+!{P~88`FR=@oU5j}FcBQn zDa@HdH>ZO1k`4t~l?4SLJoOw&l-vReVEFkw(}2UC`*d_*M`#L&JRuh14|?uLDZLQt z^8?g;3Wfv^hOMIt*?_odpc_}>QAq&cga8<}!MuD)K~PZ3V+jg4Z%c~+N*f*$94A|v z+gf}&bcEy$X{gu%z{oUb8U&czoY{}GX!wb~tG`vXER;Xt%BsyjweOi9vDmpT{@v$FD)bb>7Z=V`df0O&dYyH`Oq8J#KUpyGj?XGWr z*zpxt4v)|LmA4akZXJ+zllc;8(%0Cqh)K5Lp@b}JL4)vx^oGzK7c&kDNo;fGQ;lX> z;@`oNEO2FkxR;NJ_O=JJxu*tcZJKa2@5Ivpm5797eZ7z+Vp($-<+MMzdz;$)Qa+cg z=6Ud$W=%y~dv^HgBVJX8J9wj1WOTM0d4HcGa)a67S7ee})Pv9@l{uI z5<^N}&6nK5VsrZn>lV>3uXdh~bx@x4|J84n{PjGl*6Xup10#mP)78&qol`;+0E~Im A82|tP diff --git a/src/test/kc/examples/cx16/spacedemo/Ship_1/ship_1_360_5.png b/src/test/kc/examples/cx16/spacedemo/Ship_1/ship_1_360_5.png deleted file mode 100644 index 9a1920d036048da095bb33c41ed1b193e8fa1958..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 730 zcmV<00ww*4P);WN_#AGYF%pP%5%M)gIY`=-lY)c*40u~QWzWV$^ae;@1dx-mb`_Nby!T~*Ux0CC(1h|V09g6t zs2~9LvON7c0CT`2Vw!k-`6A#I8sc3PfN6nS1CTi`Vei7$dY{dV6ClqnA#TeDLCO1x z3~-xN0ALE`jmnv6;!6_nP)-r=D4d70_t5bN@K8893!EJs+e5+01FL1ooJD|Jm!T+QuJ0zg5EFjls;g@u0GjGS>~M%;IUete%mCXF zl=amZT8s?NoC($S_h{F|YfY>kSLK(nm3h`8^-a%R!l>zjoFlT&fZQLvXM&%MVT;dJrB_(du zt}t>f>EH*Tk4ijhxItL-HNYnmEXS_^+xkQMcM9@d{Px}d=f6Jx0K17Cs#0SHP);WN_#AGYF%pP%5%M)gIY`=-lY)c*40u~QWzW0s(AmpZ$rk(j{rL=DW0)7;2 zjNjh{wA!VK9vR7-06!$7Zv}voE{uBwVn+U(lWW88R``|%LJgK80Cd-M7A&pO6%s~%ec$PwXz z_g*^8Sr-6rk3o(u2EYsS467lQArP*3zLweVv2*vT%U)TLw}H8D`NL3xF=!fWE@`B|wLEgdT@6VyGbO7J>^L!s$ZKknq<&0Px{iFiK{e+Gi#>@@-1Os(zc9Lu3XAg~aJhUJF+OtySYefDU9H(h(Yr z=nLlxNfrX~wh@6b0O=h^9RQbZI_P`oT`5$ZS-`j^U`l5rT{|9+0YLWw0js~!x-|iI z^?1cFWa`*FQxQ2w2sa&+(&ghh65u%!a>g$}9#z+GYHl61i;WN_#AGYF%pP%5%M)gIY`=-lY)c*40u~QWzW=0cA_#zFuPZFd1mNgLjVbVPo_004z{$u)t%CjihOSt(Yz zuz4tQ695_%FNJI7;te&q>4qSkkcWw&o}2)6hXS(JwhzjJs~v_wMeleT_j52%PFz7_ z(kVCE!VFQda@q5aJW~8YdI5muf_c+i2Y{zQAhBN&oUt-9%)cQ703#2C1_34)F|0Qz zy75}Hvi@QawgLtGOT@>k_`&BI!2lc}C0k@Pr6}UXdX>2|?^m zf>ta8QwgjMsQ7n38R!XcNHYzexZA3_ zj9EJyU=d}AYb3Uw|8F}$qv8j`5camuT$y^ulf`-nGC?D>h(7D>5PEikLB_b3S&^Sb zj^=PykU$3Q_jmDgSLUWMz;HH*HLcfCRcx~AZ)fsaj{b|I zRZLbr2gg9S zU5E9v2#Rq+qxP%k15&P@o6rdmgG99Q8xQ{kP{QaKhYR9>a|fUSVD9Cx^-zgDq1^%q z25WG|V6^$!O$M31wmn(^RDbV-698UbTej@*_59Y6Q>%Qrj4K72SRyBv%2z1_13xdt zJ^+v}05tLefRS?fxQrBj2o45Udil7S^3Quc-#9Hl19;WN_#AGYF%pP%5%M)gIY`=-lY)c*40u~QWzW>u%dH424UY5@k_@ z`2J73L%Ha-tXU!h`!TgJ0>k`#c$NI|@sAe~-M9T9<65iOJ#%d=y_WMVd`kpzYt29? zEVulip+k)*%(|J*dkSEm@1LXbHh?dHiQ;0s9Y|UL#PKYUp}ZZ)1QYC0HhJ> zTbuw4sM%M5&@)^p!I4gE27$z)!3Sq#QUeM$)6j#`s`VxnVxYv{EhfAh&q8+3EWor{ zUJ=FjYALL%>KKt}fLTKf8!f4*Hu{#orgFafPvPNA!N)J%#x1HdVCj52uS4+(CRS^W~hX2 zLiH3vbS(c6T5~@*-FvKS;&Ckie2|=iGU$|pfSlDh=K=;3pNB6%JOVo6mVl`0!_2!S zAnn{5{tYYo)KfnJ4?bjk#}@#sz(7~(b$X8$3qXh>T$tYi(EURbA@%T;M6!yauHju0 zfXPbH({jqUfW^QQjr|jVDS$WjE(pFM{vhZw)n|akP}8f5NI3?!1pxs10m(whb;S5v zOCW5kmtYu!Riq~*vXCwX`l_Ko$UJxMF=5*U1NAs2BrF9l%&CVhXMxF?lpaVw;+V^; zkXIc|IZQMqBYZKJy?7|%0Iw+KeAnzXLvO0geSg9uR{L z<%;f%;OsT`S24`YGxmgm-3%J~BCNPFtDeWpp+*obxv8LuNnxMkDFqN*oAvu?@Vghq zz3IdhMH|B2U404Atf<%adA31CM*?7wQS~(e7_oiq;wOLr0B#@@9mCBRfRgtj13#U> z2<}=z$k~_y$iX5!$Ge+bG~}OCg1UL6gaHXpH-$e5NM8cblAjR(Kz5FcS&@QmS^Mfh zsK6Gzb4I~9LEY5MB0?}c?8KPgIinEcbb?(j%i!9ksPsKRFH{Hl6$6SwMfU()*3Pg- zB!<9g+klGgZlaAW?Wv3#3f3Ce2thBsTSmVC@`o-DFi|%Zpp-8K9eZ}%06>AP5vrF9 zBzpifZ(YwL2AA&`Q9FQvBkuLQ(lrERuaJx%OMml=fxZ-c-O(NU)e8@R&Er1K_j?9^ k67GF%{sOrF#rxl_A0{a<3tXd1h5!Hn07*qoM6N<$f;BSP(*OVf diff --git a/src/test/kc/examples/cx16/spacedemo/Ship_1/ship_1_360_9.png b/src/test/kc/examples/cx16/spacedemo/Ship_1/ship_1_360_9.png deleted file mode 100644 index 544b19308a4a2882c9cee089184ec253ac2381df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 748 zcmV;WN_#AGYF%pP%5%M)gIY`=-lY)c*40u~QWzWbws z{jYY)Bz<*1gGVz+EpE6P)+&|-v{sl)DV%kJMOABM$pS`eLT1*J z0BWtNbTLWBK#c*IYNmMrOD#T6riDkf-2BZO##RV(IbN{sU%QS>Z~vx za%}?$+w%y3qK^^-f#kW_@<7Bzwh7MN76A4=!r1M`Sx$cd+J(jKHGn)qW}fiCZ-8>N z#A^Ur7n_U46vgJK0Wz@xh~V9L0i>cA3`w+YK$uwPYAO(v!S5?c{)C`qUd+ba>oE5% zfCa$ioVA-{7@XW+cN5tIpgE~J*;S(z7vL4)0i4JI0l@5o4Q@@_0{9t?XaFDpcI|f% zFJnL!^aikpBC(?zXlxV$DY%v&Fs%|b!S=c{lYOjO2s~)+@gK5eJ13My-XenmFxVRJ zO*GuK1sLIgoExpY%-tS>)AXpL`5plCFaa1yAOISJu?tv@(E9=)2k%GW8^R3`j};%A zqKIZYRVKH96|BEWls9`+lMIGUn$8G5|* ziS|9f1`nZU*wp<1r;GGkA@_?AfXq59$KMuXw^99>`NYs;TQf^&ddVy%+k=Q)gFEzkr^6>U -#include -#include -#include <6502.h> -#include -#include -#include -#include - -const byte NUM_SPRITES = 12; -const byte NUM_TILES_SMALL = 4; -const byte NUM_TILES_LARGE = 4; - -#pragma data_seg(Palettes) -__export char* PALETTES; - -#pragma data_seg(Sprites) -__export char SPRITE_PIXELS[] = kickasm(resource "Ship_1/ship_1_360_1.png") {{ - .var pic = LoadPicture("Ship_1/ship_1_360_1.png") - // palette: rgb->idx - .var palette = Hashtable() - // RGB value for each palette index - .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) { - .eval idx = nxt_idx++; - .eval palette.put(rgb,idx); - .eval palList.add(rgb) - } - } - } - .if(nxt_idx>16) .error "Image has too many colours "+nxt_idx - - .segment Palettes - .for(var i=0;i<16;i++) { - .var rgb = palList.get(i) - .var red = floor(rgb / [256*256]) - .var green = floor(rgb/256) & 255 - .var blue = rgb & 255 - // bits 4-8: green, bits 0-3 blue - .byte green&$f0 | blue/16 - // bits bits 0-3 red - .byte red/16 - } - - .segment Sprites - .for(var p=1;p<=NUM_SPRITES;p++) { - .var pic = LoadPicture("Ship_1/ship_1_360_" + p + ".png") - .for (var y=0; y<64; y++) { - .for (var x=0;x<64; x+=2) { - // Find palette index (add if not known) - .var rgb = pic.getPixel(x,y); - .var idx1 = palette.get(rgb) - .if(idx1==null) { - .printnow "unknown rgb value!" - } - // Find palette index (add if not known) - .eval rgb = pic.getPixel(x+1,y); - .var idx2 = palette.get(rgb) - .if(idx2==null) { - .printnow "unknown rgb value!" - } - .byte idx1*16+idx2; - } - } - } -}}; - -#pragma data_seg(TileS) -__export char TILE_PIXELS_SMALL[] = kickasm(resource "Metal_1/frame_1.png") {{ - // palette: rgb->idx - .var palette2 = Hashtable() - // RGB value for each palette index - .var palList2 = List() - // Next palette index - // Extract palette while outputting pixels as palete index values - .var nxt_idx2 = 0; - .for(var p=1;p<=NUM_TILES_SMALL;p++) { - .var pic = LoadPicture("Metal_1/frame_" + p + ".png") - .for (var y=0; y<32; y++) { - .for (var x=0;x<32; x++) { - // Find palette index (add if not known) - .var rgb = pic.getPixel(x,y); - .var idx = palette2.get(rgb) - .if(idx==null) { - .eval idx = nxt_idx2++; - .eval palette2.put(rgb,idx); - .eval palList2.add(rgb) - } - } - } - } - .if(nxt_idx2>16) .error "Image has too many colours "+nxt_idx2 - - .segment Palettes - .for(var i=0;i<16;i++) { - .var rgb = 16*256*256+16*256+16 - .if(iidx - .var palette3 = Hashtable() - // RGB value for each palette index - .var palList3 = List() - // Next palette index - .var nxt_idx3 = 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 = pic3.getPixel(x,y); - .var idx = palette3.get(rgb) - .if(idx==null) { - .eval idx = nxt_idx3++; - .eval palette3.put(rgb,idx); - .eval palList3.add(rgb) - } - } - } - .if(nxt_idx3>16) .error "Image has too many colours "+nxt_idx3 - - .segment Palettes - .for(var i=0;i<16;i++) { - .var rgb = 0 - .if(iVERA_SPRITE_ATTR, vram_sprite_attr, &SPRITE_ATTR, sizeof(SPRITE_ATTR)); - vram_sprite_attr += sizeof(SPRITE_ATTR); - sprite_offset += 64; - } - // Enable sprites - *VERA_CTRL &= ~VERA_DCSEL; - *VERA_DC_VIDEO |= VERA_SPRITES_ENABLE; - // Enable VSYNC IRQ (also set line bit 8 to 0) - SEI(); - *KERNEL_IRQ = &irq_vsync; - *VERA_IEN = VERA_VSYNC; - CLI(); - - while(!getin()); -} - -volatile byte i = 0; -volatile byte a = 4; -volatile word vscroll = 0; -volatile word scroll_action = 2; - -// VSYNC Interrupt Routine -__interrupt(rom_sys_cx16) void irq_vsync() { - // Move the sprite around - - a--; - if(a==0) { - a=4; - const char vram_sprite_attr_bank = (char)>VERA_SPRITE_ATTR; - char *vram_sprite_attr = (char*)=NUM_SPRITES) { - x-=NUM_SPRITES; - } - SPRITE_ATTR.ADDR = sprites[x]; - SPRITE_ATTR.X = (word)40+((word)(s&03)<<7); - SPRITE_ATTR.Y = (word)100+((word)(s>>2)<<7); - // Copy sprite positions to VRAM (the 4 relevant bytes in VERA_SPRITE_ATTR) - memcpy_to_vram(vram_sprite_attr_bank, vram_sprite_attr, &SPRITE_ATTR, 6); - vram_sprite_attr += sizeof(SPRITE_ATTR); - } - - i++; - if(i>=NUM_SPRITES) i=0; - - } - - if(scroll_action--) { - scroll_action = 2; - vscroll++; - if(vscroll>(32+64)*2-1) vscroll=0; - vera_layer_set_vertical_scroll(0,vscroll); - } - - // Reset the VSYNC interrupt - *VERA_ISR = VERA_VSYNC; -} diff --git a/src/test/kc/examples/cx16/spacedemo/spacedemo.ld b/src/test/kc/examples/cx16/spacedemo/spacedemo.ld deleted file mode 100644 index 59bb4b240..000000000 --- a/src/test/kc/examples/cx16/spacedemo/spacedemo.ld +++ /dev/null @@ -1,16 +0,0 @@ -// Create a bunch of files -.file [name="%O", type="prg", segments="Program"] -.file [name="SPRITES", type="bin", segments="Sprites"] -.file [name="TILES", type="bin", segments="TileS"] -.file [name="TILEB", type="bin", segments="TileB"] -.file [name="PALETTES", type="bin", segments="Palettes"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=%P] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(%E) -.segmentdef Sprites -.segmentdef TileS -.segmentdef TileB -.segmentdef Palettes diff --git a/src/test/kc/examples/cx16/veralib/bitmap_1bpp_320_x_240.c b/src/test/kc/examples/cx16/veralib/bitmap_1bpp_320_x_240.c deleted file mode 100644 index 929041d74..000000000 --- a/src/test/kc/examples/cx16/veralib/bitmap_1bpp_320_x_240.c +++ /dev/null @@ -1,79 +0,0 @@ -// Example program for the Commander X16. -// Demonstrates the usage of the VERA graphic modes and layering. - -// Author: Sven Van de Velde - -#pragma target(cx16) -#include -#include -#include -#include -#include -#include - -void main() { - - // Before we configure the bitmap pane into vera memory we need to re-arrange a few things! - // It is better to load all in bank 0, but then there is an issue. - // So the default CX16 character set is located in bank 0, at address 0xF800. - // So we need to move this character set to bank 1, suggested is at address 0xF000. - // The CX16 by default writes textual output to layer 1 in text mode, so we need to - // realign the moved character set to 0xf000 as the new tile base for layer 1. - // We also will need to realign for layer 1 the map base from 0x00000 to 0x14000. - // This is now all easily done with a few statements in the new kickc vera lib ... - memcpy_in_vram(1, 0xF000, VERA_INC_1, 0, 0xF800, VERA_INC_1, 256*8); // We copy the 128 character set of 8 bytes each. - vera_layer_mode_tile(1, 0x14000, 0x1F000, 128, 64, 8, 8, 1); - - vera_layer_mode_bitmap(0, (dword)0x00000, 320, 1); - - screenlayer(1); - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - gotoxy(0,25); - printf("vera in bitmap mode,\n"); - printf("color depth 1 bits per pixel.\n"); - printf("in this mode, it is possible to display\n"); - printf("graphics in 2 colors (black or color).\n"); - - vera_layer_show(0); - - bitmap_init(0, 0x00000); - bitmap_clear(); - - gotoxy(0,29); - textcolor(YELLOW); - printf("press a key ..."); - - while(!kbhit()) { - bitmap_line(modr16u(rand(),320,0), modr16u(rand(),320,0), modr16u(rand(),200,0), modr16u(rand(),200,0), rand()&1); - }; - - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - gotoxy(0,26); - printf("here you see all the colors possible.\n"); - - gotoxy(0,29); - textcolor(YELLOW); - printf("press a key ..."); - - word x = 0; - byte color = 0; - while(!kbhit()) { - bitmap_line(x, x, 0, 199, color); - color++; - if(color>1) color=0; - x++; - if(x>319) x=0; - }; - - screenlayer(1); - textcolor(WHITE); - bgcolor(BLUE); - clrscr(); - -} diff --git a/src/test/kc/examples/cx16/veralib/bitmap_1bpp_640_x_480.c b/src/test/kc/examples/cx16/veralib/bitmap_1bpp_640_x_480.c deleted file mode 100644 index 486fe5175..000000000 --- a/src/test/kc/examples/cx16/veralib/bitmap_1bpp_640_x_480.c +++ /dev/null @@ -1,79 +0,0 @@ -// Example program for the Commander X16. -// Demonstrates the usage of the VERA graphic modes and layering. - -// Author: Sven Van de Velde - -#pragma target(cx16) -#include -#include -#include -#include -#include -#include - -void main() { - - // Before we configure the bitmap pane into vera memory we need to re-arrange a few things! - // It is better to load all in bank 0, but then there is an issue. - // So the default CX16 character set is located in bank 0, at address 0xF800. - // So we need to move this character set to bank 1, suggested is at address 0xF000. - // The CX16 by default writes textual output to layer 1 in text mode, so we need to - // realign the moved character set to 0xf000 as the new tile base for layer 1. - // We also will need to realign for layer 1 the map base from 0x00000 to 0x14000. - // This is now all easily done with a few statements in the new kickc vera lib ... - memcpy_in_vram(1, 0xF000, VERA_INC_1, 0, 0xF800, VERA_INC_1, 256*8); // We copy the 128 character set of 8 bytes each. - vera_layer_mode_tile(1, 0x14000, 0x1F000, 128, 64, 8, 8, 1); - - vera_layer_mode_bitmap(0, (dword)0x00000, 640, 1); - - screenlayer(1); - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - gotoxy(0,54); - printf("vera in bitmap mode,\n"); - printf("color depth 1 bits per pixel.\n"); - printf("in this mode, it is possible to display\n"); - printf("graphics in 2 colors (black or color).\n"); - - vera_layer_show(0); - - bitmap_init(0, 0x00000); - bitmap_clear(); - - gotoxy(0,59); - textcolor(YELLOW); - printf("press a key ..."); - - while(!kbhit()) { - bitmap_line(modr16u(rand(),639,0), modr16u(rand(),639,0), modr16u(rand(),399,0), modr16u(rand(),399,0), rand()&1); - }; - - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - gotoxy(0,54); - printf("here you see all the colors possible.\n"); - - gotoxy(0,59); - textcolor(YELLOW); - printf("press a key ..."); - - word x = 0; - byte color = 0; - while(!kbhit()) { - bitmap_line(x, x, 0, 399, color); - color++; - if(color>1) color=0; - x++; - if(x>639) x=0; - }; - - screenlayer(1); - textcolor(WHITE); - bgcolor(BLUE); - clrscr(); - -} diff --git a/src/test/kc/examples/cx16/veralib/bitmap_2bpp_320_x_240.c b/src/test/kc/examples/cx16/veralib/bitmap_2bpp_320_x_240.c deleted file mode 100644 index c2d3d0801..000000000 --- a/src/test/kc/examples/cx16/veralib/bitmap_2bpp_320_x_240.c +++ /dev/null @@ -1,79 +0,0 @@ -// Example program for the Commander X16. -// Demonstrates the usage of the VERA graphic modes and layering. - -// Author: Sven Van de Velde - -#pragma target(cx16) -#include -#include -#include -#include -#include -#include - -void main() { - - // Before we configure the bitmap pane into vera memory we need to re-arrange a few things! - // It is better to load all in bank 0, but then there is an issue. - // So the default CX16 character set is located in bank 0, at address 0xF800. - // So we need to move this character set to bank 1, suggested is at address 0xF000. - // The CX16 by default writes textual output to layer 1 in text mode, so we need to - // realign the moved character set to 0xf000 as the new tile base for layer 1. - // We also will need to realign for layer 1 the map base from 0x00000 to 0x14000. - // This is now all easily done with a few statements in the new kickc vera lib ... - memcpy_in_vram(1, 0xF000, VERA_INC_1, 0, 0xF800, VERA_INC_1, 256*8); // We copy the 128 character set of 8 bytes each. - vera_layer_mode_tile(1, 0x14000, 0x1F000, 128, 64, 8, 8, 1); - - vera_layer_mode_bitmap(0, (dword)0x00000, 320, 2); - - screenlayer(1); - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - gotoxy(0,25); - printf("vera in bitmap mode,\n"); - printf("color depth 2 bits per pixel.\n"); - printf("in this mode, it is possible to display\n"); - printf("graphics in 4 colors.\n"); - - vera_layer_show(0); - - bitmap_init(0, 0x00000); - bitmap_clear(); - - gotoxy(0,29); - textcolor(YELLOW); - printf("press a key ..."); - - while(!kbhit()) { - bitmap_line(modr16u(rand(),320,0), modr16u(rand(),320,0), modr16u(rand(),200,0), modr16u(rand(),200,0), rand()&3); - }; - - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - gotoxy(0,26); - printf("here you see all the colors possible.\n"); - - gotoxy(0,29); - textcolor(YELLOW); - printf("press a key ..."); - - word x = 0; - byte color = 0; - while(!kbhit()) { - bitmap_line(x, x, 0, 199, color); - color++; - if(color>3) color=0; - x++; - if(x>319) x=0; - }; - - screenlayer(1); - textcolor(WHITE); - bgcolor(BLUE); - clrscr(); - -} diff --git a/src/test/kc/examples/cx16/veralib/bitmap_2bpp_640_x_480.c b/src/test/kc/examples/cx16/veralib/bitmap_2bpp_640_x_480.c deleted file mode 100644 index e04945d8d..000000000 --- a/src/test/kc/examples/cx16/veralib/bitmap_2bpp_640_x_480.c +++ /dev/null @@ -1,79 +0,0 @@ -// Example program for the Commander X16. -// Demonstrates the usage of the VERA graphic modes and layering. - -// Author: Sven Van de Velde - -#pragma target(cx16) -#include -#include -#include -#include -#include -#include - -void main() { - - // Before we configure the bitmap pane into vera memory we need to re-arrange a few things! - // It is better to load all in bank 0, but then there is an issue. - // So the default CX16 character set is located in bank 0, at address 0xF800. - // So we need to move this character set to bank 1, suggested is at address 0xF000. - // The CX16 by default writes textual output to layer 1 in text mode, so we need to - // realign the moved character set to 0xf000 as the new tile base for layer 1. - // We also will need to realign for layer 1 the map base from 0x00000 to 0x14000. - // This is now all easily done with a few statements in the new kickc vera lib ... - memcpy_in_vram(1, 0xF000, VERA_INC_1, 0, 0xF800, VERA_INC_1, 256*8); // We copy the 128 character set of 8 bytes each. - vera_layer_mode_tile(1, 0x14000, 0x1F000, 128, 64, 8, 8, 1); - - vera_layer_mode_bitmap(0, (dword)0x00000, 640, 2); - - screenlayer(1); - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - gotoxy(0,54); - printf("vera in bitmap mode,\n"); - printf("color depth 1 bits per pixel.\n"); - printf("in this mode, it is possible to display\n"); - printf("graphics in 2 colors (black or color).\n"); - - vera_layer_show(0); - - bitmap_init(0, 0x00000); - bitmap_clear(); - - gotoxy(0,59); - textcolor(YELLOW); - printf("press a key ..."); - - while(!kbhit()) { - bitmap_line(modr16u(rand(),639,0), modr16u(rand(),639,0), modr16u(rand(),399,0), modr16u(rand(),399,0), rand()&3); - }; - - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - gotoxy(0,54); - printf("here you see all the colors possible.\n"); - - gotoxy(0,59); - textcolor(YELLOW); - printf("press a key ..."); - - word x = 0; - byte color = 0; - while(!kbhit()) { - bitmap_line(x, x, 0, 399, color); - color++; - if(color>3) color=0; - x++; - if(x>639) x=0; - }; - - screenlayer(1); - textcolor(WHITE); - bgcolor(BLUE); - clrscr(); - -} diff --git a/src/test/kc/examples/cx16/veralib/bitmap_4bpp_320_x_240.c b/src/test/kc/examples/cx16/veralib/bitmap_4bpp_320_x_240.c deleted file mode 100644 index e453a0a52..000000000 --- a/src/test/kc/examples/cx16/veralib/bitmap_4bpp_320_x_240.c +++ /dev/null @@ -1,80 +0,0 @@ -// Example program for the Commander X16. -// Demonstrates the usage of the VERA graphic modes and layering. - -// Author: Sven Van de Velde - -#pragma target(cx16) -#include -#include -#include -#include -#include -#include - -void main() { - - // Before we configure the bitmap pane into vera memory we need to re-arrange a few things! - // It is better to load all in bank 0, but then there is an issue. - // So the default CX16 character set is located in bank 0, at address 0xF800. - // So we need to move this character set to bank 1, suggested is at address 0xF000. - // The CX16 by default writes textual output to layer 1 in text mode, so we need to - // realign the moved character set to 0xf000 as the new tile base for layer 1. - // We also will need to realign for layer 1 the map base from 0x00000 to 0x14000. - // This is now all easily done with a few statements in the new kickc vera lib ... - - memcpy_in_vram(1, 0xF000, VERA_INC_1, 0, 0xF800, VERA_INC_1, 256*8); // We copy the 128 character set of 8 bytes each. - vera_layer_mode_tile(1, 0x14000, 0x1F000, 128, 64, 8, 8, 1); - - vera_layer_mode_bitmap(0, (dword)0x00000, 320, 4); - - screenlayer(1); - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - gotoxy(0,25); - printf("vera in bitmap mode,\n"); - printf("color depth 4 bits per pixel.\n"); - printf("in this mode, it is possible to display\n"); - printf("graphics in 16 colors.\n"); - - vera_layer_show(0); - - bitmap_init(0, 0x00000); - bitmap_clear(); - - gotoxy(0,29); - textcolor(YELLOW); - printf("press a key ..."); - - while(!kbhit()) { - bitmap_line(modr16u(rand(),320,0), modr16u(rand(),320,0), modr16u(rand(),200,0), modr16u(rand(),200,0), rand()&15); - }; - - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - gotoxy(0,26); - printf("here you see all the colors possible.\n"); - - gotoxy(0,29); - textcolor(YELLOW); - printf("press a key ..."); - - word x = 0; - byte color = 0; - while(!kbhit()) { - bitmap_line(x, x, 0, 199, color); - color++; - if(color>15) color=0; - x++; - if(x>319) x=0; - }; - - screenlayer(1); - textcolor(WHITE); - bgcolor(BLUE); - clrscr(); - -} diff --git a/src/test/kc/examples/cx16/veralib/bitmap_8bpp_320_x_240.c b/src/test/kc/examples/cx16/veralib/bitmap_8bpp_320_x_240.c deleted file mode 100644 index 2c278e44c..000000000 --- a/src/test/kc/examples/cx16/veralib/bitmap_8bpp_320_x_240.c +++ /dev/null @@ -1,83 +0,0 @@ -// Example program for the Commander X16. -// Demonstrates the usage of the VERA tile map modes and layering. - -// Author: Sven Van de Velde - -// The default layer of the CX16 is layer 1, but the tiles are written on layer 0. - -// An explanation is given how this mode is organized, and how the tiles display and coloring works. -// Pälette offsets are explained also. - -#pragma target(cx16) -#include -#include -#include -#include -#include -#include - -void main() { - - // Before we configure the bitmap pane into vera memory we need to re-arrange a few things! - // It is better to load all in bank 0, but then there is an issue. - // So the default CX16 character set is located in bank 0, at address 0xF800. - // So we need to move this character set to bank 1, suggested is at address 0xF000. - // The CX16 by default writes textual output to layer 1 in text mode, so we need to - // realign the moved character set to 0xf000 as the new tile base for layer 1. - // We also will need to realign for layer 1 the map base from 0x00000 to 0x14000. - // This is now all easily done with a few statements in the new kickc vera lib ... - memcpy_in_vram(1, (char*)0xF000, VERA_INC_1, 0, (char*)0xF800, VERA_INC_1, 256*8); // We copy the 128 character set of 8 bytes each. - vera_layer_mode_tile(1, 0x14000, 0x1F000, 128, 64, 8, 8, 1); - - vera_layer_mode_bitmap(0, (dword)0x00000, 320, 8); - - screenlayer(1); - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - gotoxy(0,25); - printf("vera in bitmap mode,\n"); - printf("color depth 8 bits per pixel.\n"); - printf("in this mode, it is possible to display\n"); - printf("graphics in 256 colors.\n"); - - vera_layer_show(0); - - bitmap_init(0, 0x00000); - bitmap_clear(); - - gotoxy(0,29); - textcolor(YELLOW); - printf("press a key ..."); - - while(!kbhit()) { - bitmap_line(modr16u(rand(),320,0), modr16u(rand(),320,0), modr16u(rand(),200,0), modr16u(rand(),200,0), rand()&255); - }; - - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - gotoxy(0,26); - printf("here you see all the colors possible.\n"); - - gotoxy(0,29); - textcolor(YELLOW); - printf("press a key ..."); - - word x = 0; - byte color = 0; - while(!kbhit()) { - bitmap_line(x, x, 0, 199, color); - color++; - x++; - if(x>319) x=0; - }; - - screenlayer(1); - textcolor(WHITE); - bgcolor(BLUE); - clrscr(); - -} diff --git a/src/test/kc/examples/cx16/veralib/tilemap_1bpp_8_x_8_16_color.c b/src/test/kc/examples/cx16/veralib/tilemap_1bpp_8_x_8_16_color.c deleted file mode 100644 index 60552bafe..000000000 --- a/src/test/kc/examples/cx16/veralib/tilemap_1bpp_8_x_8_16_color.c +++ /dev/null @@ -1,43 +0,0 @@ -// Example program for the Commander X16. -// Demonstrates the usage of the VERA tile map modes and layering. - -// Author: Sven Van de Velde - -#pragma target(cx16) -#include -#include -#include - -void main() { - - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - // Configure the VERA card to work in text, 16x16 mode. - // The color mode is here 16 colors, indicating 16x16 color mode, (16 foreground and 16 background colors). - vera_layer_set_text_color_mode( 1, VERA_LAYER_CONFIG_16C ); - - // or you can use the below statement, but that includes setting a "mode", including - // layer, map base address, tile base address, map width, map height, tile width, tile height, color mode. - //vera_layer_mode_text(1, 0x00000, 0x0F800, 128, 128, 8, 8, 16); - - for(byte c:0..255) { - bgcolor(c); - printf(" ****** "); - } - - vera_layer_show(1); - - gotoxy(0,50); - textcolor(WHITE); - bgcolor(BLACK); - printf("vera in text mode 8 x 8, color depth 1 bits per pixel.\n"); - printf("in this mode, tiles are 8 pixels wide and 8 pixels tall.\n"); - printf("each character can have a variation of 16 foreground colors and 16 background colors.\n"); - printf("here we display 6 stars (******) each with a different color.\n"); - printf("however, the first color will always be transparent (black).\n"); - printf("in this mode, the background color cannot be set and is always transparent.\n"); - - while(!kbhit()); -} diff --git a/src/test/kc/examples/cx16/veralib/tilemap_1bpp_8_x_8_256_color.c b/src/test/kc/examples/cx16/veralib/tilemap_1bpp_8_x_8_256_color.c deleted file mode 100644 index 878135d98..000000000 --- a/src/test/kc/examples/cx16/veralib/tilemap_1bpp_8_x_8_256_color.c +++ /dev/null @@ -1,43 +0,0 @@ -// Example program for the Commander X16. -// Demonstrates the usage of the VERA tile map modes and layering. - -// Author: Sven Van de Velde - -#pragma target(cx16) -#include -#include -#include - -void main() { - - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - // Configure the VERA card to work in text, 256 mode. - // The color mode is here 256 colors, (256 foreground on a black transparent background). - vera_layer_mode_text( 1, 0x00000, 0x0F800, 128, 128, 8, 8, 256 ); - - // or you can use the below statement, but that includes setting a "mode", including - // layer, map base address, tile base address, map width, map height, tile width, tile height, color mode. - //vera_layer_mode_text(1, 0x00000, 0x0F800, 128, 128, 8, 8, 256); - - for(byte c:0..255) { - textcolor(c); - printf(" ****** "); - } - - vera_layer_show(1); - - gotoxy(0,50); - textcolor(WHITE); - bgcolor(BLACK); - printf("vera in text mode 8 x 8, color depth 1 bits per pixel.\n"); - printf("in this mode, tiles are 8 pixels wide and 8 pixels tall.\n"); - printf("each character can have a variation of 256 foreground colors.\n"); - printf("here we display 6 stars (******) each with a different color.\n"); - printf("however, the first color will always be transparent (black).\n"); - printf("in this mode, the background color cannot be set and is always transparent.\n"); - - while(!kbhit()); -} diff --git a/src/test/kc/examples/cx16/veralib/tilemap_2bpp_16_x_16.c b/src/test/kc/examples/cx16/veralib/tilemap_2bpp_16_x_16.c deleted file mode 100644 index d7ef652ab..000000000 --- a/src/test/kc/examples/cx16/veralib/tilemap_2bpp_16_x_16.c +++ /dev/null @@ -1,88 +0,0 @@ -// Example program for the Commander X16. -// Demonstrates the usage of the VERA tile map modes and layering. - -// Author: Sven Van de Velde - -#pragma target(cx16) -#include -#include -#include - -void main() { - - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - vera_layer_mode_tile(0, 0x04000, 0x14000, 128, 128, 16, 16, 2); - - byte tiles[256] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - }; - - memcpy_to_vram(1, 0x4000, tiles, 256); - - //vera_tile_area(byte layer, word tileindex, byte x, byte y, byte w, byte h, byte hflip, byte vflip, byte offset) - - vera_tile_area(0, 0, 0, 0, 40, 30, 0, 0, 0); - - // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. - vera_tile_area(0, 0, 4, 2, 1, 1, 0, 0, 0); - vera_tile_area(0, 1, 10, 2, 1, 1, 0, 0, 0); - vera_tile_area(0, 2, 16, 2, 1, 1, 0, 0, 0); - vera_tile_area(0, 3, 22, 2, 1, 1, 0, 0, 0); - - // Draw 4 squares with each tile, starting from row 6, width 4, height 4, separated by 2 characters. - vera_tile_area(0, 0, 4, 4, 4, 4, 0, 0, 0); - vera_tile_area(0, 1, 10, 4, 4, 4, 0, 0, 0); - vera_tile_area(0, 2, 16, 4, 4, 4, 0, 0, 0); - vera_tile_area(0, 3, 22, 4, 4, 4, 0, 0, 0); - - word tile = 0; - byte offset = 0; - - byte row = 10; - - for(byte r:0..3) { - byte column = 4; - for(byte c:0..16) { - vera_tile_area(0, tile, column, row, 1, 1, 0, 0, offset); - column+=2; - offset++; - } - tile++; - tile &= 0x3; - row += 2; - } - - vera_layer_show(0); - - gotoxy(0,50); - printf("vera in tile mode 8 x 8, color depth 2 bits per pixel.\n"); - - printf("in this mode, tiles are 8 pixels wide and 8 pixels tall.\n"); - printf("each tile can have a variation of 4 colors.\n"); - printf("the vera palette of 256 colors, can be used by setting the palette\n"); - printf("offset for each tile.\n"); - printf("here each column is displaying the same tile, but with different offsets!\n"); - printf("each offset aligns to multiples of 16 colors, and only the first 4 colors\n"); - printf("can be used per offset!\n"); - printf("however, the first color will always be transparent (black).\n"); - - while(!kbhit()); -} diff --git a/src/test/kc/examples/cx16/veralib/tilemap_2bpp_8_x_8.c b/src/test/kc/examples/cx16/veralib/tilemap_2bpp_8_x_8.c deleted file mode 100644 index c5889a321..000000000 --- a/src/test/kc/examples/cx16/veralib/tilemap_2bpp_8_x_8.c +++ /dev/null @@ -1,70 +0,0 @@ -// Example program for the Commander X16. -// Demonstrates the usage of the VERA tile map modes and layering. - -// Author: Sven Van de Velde - -#pragma target(cx16) -#include -#include -#include - -void main() { - - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - vera_layer_mode_tile(0, 0x04000, 0x14000, 128, 128, 8, 8, 2); - - byte tiles[64] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; - - byte map[16] = {0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x02,0x00,0x02,0x00,0x03,0x00,0x03,0x00}; - - memcpy_to_vram(1, 0x4000, tiles, 64); - - //vera_tile_area(byte layer, word tileindex, byte x, byte y, byte w, byte h, byte hflip, byte vflip, byte offset) - - vera_tile_area(0, 0, 0, 0, 80, 60, 0, 0, 0); - - // Draw 4 squares with each tile, staring from row 2, width 10, height 10, separated by 2 characters. - vera_tile_area(0, 0, 4, 4, 10, 10, 0, 0, 0); - vera_tile_area(0, 1, 16, 4, 10, 10, 0, 0, 0); - vera_tile_area(0, 2, 28, 4, 10, 10, 0, 0, 0); - vera_tile_area(0, 3, 40, 4, 10, 10, 0, 0, 0); - - word tile = 0; - byte offset = 0; - - byte row = 22; - - for(byte r:0..3) { - byte column = 4; - for(byte c:0..15) { - vera_tile_area(0, tile, column, row, 3, 3, 0, 0, offset); - column+=4; - offset++; - } - tile++; - tile &= 0x3; - row += 4; - } - - vera_layer_show(0); - - gotoxy(0,50); - printf("vera in tile mode 8 x 8, color depth 2 bits per pixel.\n"); - - printf("in this mode, tiles are 8 pixels wide and 8 pixels tall.\n"); - printf("each tile can have a variation of 4 colors.\n"); - printf("the vera palette of 256 colors, can be used by setting the palette\n"); - printf("offset for each tile.\n"); - printf("here each column is displaying the same tile, but with different offsets!\n"); - printf("each offset aligns to multiples of 16 colors, and only the first 4 colors\n"); - printf("can be used per offset!\n"); - printf("however, the first color will always be transparent (black).\n"); - - while(!kbhit()); -} diff --git a/src/test/kc/examples/cx16/veralib/tilemap_4bpp_16_x_16.c b/src/test/kc/examples/cx16/veralib/tilemap_4bpp_16_x_16.c deleted file mode 100644 index b627f71d5..000000000 --- a/src/test/kc/examples/cx16/veralib/tilemap_4bpp_16_x_16.c +++ /dev/null @@ -1,218 +0,0 @@ -// Example program for the Commander X16. -// Demonstrates the usage of the VERA tile map modes and layering. - -// Author: Sven Van de Velde - -#pragma target(cx16) -#include -#include -#include - -void main() { - - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - vera_layer_mode_tile(0, 0x04000, 0x14000, 128, 128, 16, 16, 4); - - byte tiles[2048] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, - 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, - 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, - 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, - 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, - 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, - 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, - 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, - 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, - 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, - 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, - 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, - 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, - 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, - 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, - 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, - 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, - 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, - 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, - 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, - 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, - 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, - 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, - 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, - 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, - 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, - 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, - 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, - 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, - 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, - 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, - 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, - 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, - 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, - 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, - 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, - 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, - 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, - 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, - 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, - 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, - 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, - 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, - 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, - 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, - 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, - 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, - 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, - 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, - 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, - 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, - 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, - 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, - 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, - 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, - 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, - 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, - 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, - 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, - 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, - 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, - 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, - 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, - 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, - 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, - 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, - 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, - 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, - 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, - 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, - 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, - 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, - 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, - 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, - 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, - 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, - 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, - 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, - 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, - 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, - 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, - 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, - 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, - 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, - 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, - 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, - 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, - 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, - 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, - 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, - 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, - 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, - 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, - 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - }; - - memcpy_to_vram(1, 0x4000, tiles, 2048); - - //vera_tile_area(byte layer, word tileindex, byte x, byte y, byte w, byte h, byte hflip, byte vflip, byte offset) - - vera_tile_area(0, 0, 0, 0, 40, 30, 0, 0, 0); - - word tile = 0; - - // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. - tile = 0; - byte column = 1; - for(byte c:0..7) { - vera_tile_area(0, tile, column, 1, 1, 1, 0, 0, 0); - column+=4; - tile++; - } - column = 1; - for(byte c:0..7) { - vera_tile_area(0, tile, column, 3, 1, 1, 0, 0, 0); - column+=4; - tile++; - } - - tile = 0; - column = 1; - for(byte c:0..7) { - vera_tile_area(0, tile, column, 5, 3, 3, 0, 0, 0); - column+=4; - tile++; - } - column = 1; - for(byte c:0..7) { - vera_tile_area(0, tile, column, 9, 3, 3, 0, 0, 0); - column+=4; - tile++; - } - - tile = 0; - byte offset = 0; - - byte row = 13; - - for(byte r:0..7) { - byte column = 1; - for(byte c:0..31) { - vera_tile_area(0, tile, column, row, 1, 1, 0, 0, offset); - column+=1; - tile++; - if((c & 0x0f) == 0x0f) offset++; - tile &= 0x0f; - } - row += 1; - } - - vera_layer_show(0); - - gotoxy(0,50); - printf("vera in tile mode 16 x 16, color depth 4 bits per pixel.\n"); - - printf("in this mode, tiles are 16 pixels wide and 16 pixels tall.\n"); - printf("each tile can have a variation of 16 colors.\n"); - printf("the vera palette of 256 colors, can be used by setting the palette\n"); - printf("offset for each tile.\n"); - printf("here each column is displaying the same tile, but with different offsets!\n"); - printf("each offset aligns to multiples of 16 colors in the palette!.\n"); - printf("however, the first color will always be transparent (black).\n"); - - while(!kbhit()); -} diff --git a/src/test/kc/examples/cx16/veralib/tilemap_4bpp_8_x_8.c b/src/test/kc/examples/cx16/veralib/tilemap_4bpp_8_x_8.c deleted file mode 100644 index 437d609b4..000000000 --- a/src/test/kc/examples/cx16/veralib/tilemap_4bpp_8_x_8.c +++ /dev/null @@ -1,120 +0,0 @@ -// Example program for the Commander X16. -// Demonstrates the usage of the VERA tile map modes and layering. - -// Author: Sven Van de Velde - -#pragma target(cx16) -#include -#include -#include - -void main() { - - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - vera_layer_mode_tile(0, 0x04000, 0x14000, 128, 128, 8, 8, 4); - - byte tiles[512] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, - 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, - 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, - 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, - 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, - 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, - 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, - 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, - 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, - 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, - 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77, - 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, - 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88, - 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, - 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, - 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, - 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, - 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, - 0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, - 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, - 0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, - 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, - 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - }; - - memcpy_to_vram(1, 0x4000, tiles, 512); - - vera_tile_area(0, 0, 0, 0, 80, 60, 0, 0, 0); - - word tile = 0; - - // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. - tile = 0; - byte column = 1; - for(byte c:0..7) { - vera_tile_area(0, tile, column, 1, 1, 1, 0, 0, 0); - column+=8; - tile++; - } - column = 1; - for(byte c:0..7) { - vera_tile_area(0, tile, column, 3, 1, 1, 0, 0, 0); - column+=8; - tile++; - } - - tile = 0; - column = 1; - for(byte c:0..7) { - vera_tile_area(0, tile, column, 5, 6, 6, 0, 0, 0); - column+=8; - tile++; - } - column = 1; - for(byte c:0..7) { - vera_tile_area(0, tile, column, 12, 6, 6, 0, 0, 0); - column+=8; - tile++; - } - - tile = 0; - byte offset = 0; - - byte row = 20; - - for(byte r:0..7) { - byte column = 1; - for(byte c:0..31) { - vera_tile_area(0, tile, column, row, 2, 2, 0, 0, offset); - column+=2; - tile++; - if((c & 0x0f) == 0x0f) offset++; - tile &= 0x0f; - } - row += 2; - } - - vera_layer_show(0); - - gotoxy(0,50); - printf("vera in tile mode 8 x 8, color depth 4 bits per pixel.\n"); - - printf("in this mode, tiles are 8 pixels wide and 8 pixels tall.\n"); - printf("each tile can have a variation of 16 colors.\n"); - printf("the vera palette of 256 colors, can be used by setting the palette\n"); - printf("offset for each tile.\n"); - printf("here each column is displaying the same tile, but with different offsets!\n"); - printf("each offset aligns to multiples of 16 colors in the palette!.\n"); - printf("however, the first color will always be transparent (black).\n"); - - while(!kbhit()); -} diff --git a/src/test/kc/examples/cx16/veralib/tilemap_8bpp_16_x_16.c b/src/test/kc/examples/cx16/veralib/tilemap_8bpp_16_x_16.c deleted file mode 100644 index 0f151f3b3..000000000 --- a/src/test/kc/examples/cx16/veralib/tilemap_8bpp_16_x_16.c +++ /dev/null @@ -1,133 +0,0 @@ -// Example program for the Commander X16. -// Demonstrates the usage of the VERA tile map modes and layering. - -// Author: Sven Van de Velde - -#pragma target(cx16) -#include -#include -#include - -void main() { - - - byte tiles[256] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - }; - - // Before we can load the tiles into memory we need to re-arrange a few things! - // The amount of tiles is 256, the color depth is 256, so each tile is 256 bytes! - // That is 65356 bytes of memory, which is 64K. Yup! One memory bank in VRAM. - // VERA VRAM holds in bank 1 many registers that interfere loading all of this data. - // So it is better to load all in bank 0, but then there is an other issue. - // So the default CX16 character set is located in bank 0, at address 0xF800. - // So we need to move this character set to bank 1, suggested is at address 0xF000. - // The CX16 by default writes textual output to layer 1 in text mode, so we need to - // realign the moved character set to 0xf000 as the new tile base for layer 1. - // We also will need to realign for layer 1 the map base from 0x00000 to 0x10000. - // This is now all easily done with a few statements in the new kickc vera lib ... - - memcpy_in_vram(1, (char*)0xF000, VERA_INC_1, 0, (char*)0xF800, VERA_INC_1, 256*8); // We copy the 128 character set of 8 bytes each. - vera_layer_mode_tile(1, 0x10000, 0x1F000, 128, 64, 8, 8, 1); - - screenlayer(1); - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - // Now we can use the full bank 0! - // We set the mapbase of the tile demo to output to 0x12000, - // and the tilebase is set to 0x0000! - vera_layer_mode_tile(0, 0x14000, 0x00000, 64, 64, 16, 16, 8); - - - char* tilebase = (char*)0x0000; - memcpy_to_vram(0, tilebase, tiles, 256); - tilebase+=256; - for(byte t:1..255) { - for(byte p:0..255) { - tiles[p]+=1; - } - memcpy_to_vram(0, tilebase, tiles, 256); - tilebase+=256; - } - - //vera_tile_area(byte layer, word tileindex, byte x, byte y, byte w, byte h, byte hflip, byte vflip, byte offset) - - vera_tile_area(0, 0, 0, 0, 40, 30, 0, 0, 0); - - word tile = 0; - - // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. - byte row = 1; - for(byte r:0..11) { - byte column = 0; - for(byte c:0..19) { - vera_tile_area(0, tile, column, row, 1, 1, 0, 0, 0); - column+=2; - tile++; - tile &= 0xff; - } - row += 2; - } - - gotoxy(0,50); - printf("vera in tile mode 8 x 8, color depth 8 bits per pixel.\n"); - - printf("in this mode, tiles are 8 pixels wide and 8 pixels tall.\n"); - printf("each tile can have a variation of 256 colors.\n"); - printf("the vera palette of 256 colors, can be used by setting the palette\n"); - printf("offset for each tile.\n"); - printf("here each column is displaying the same tile, but with different offsets!\n"); - printf("each offset aligns to multiples of 16 colors in the palette!.\n"); - printf("however, the first color will always be transparent (black).\n"); - - vera_layer_show(0); - - while(!kbhit()); - - vera_tile_area(0, 0, 0, 0, 40, 30, 0, 0, 0); - - tile = 0; - row = 0; - for(byte r:0..11) { - byte column = 0; - for(byte c:0..19) { - vera_tile_area(0, tile, column, row, 2, 2, 0, 0, 0); - column+=2; - tile++; - tile &= 0xff; - } - row += 2; - } - - while(!kbhit()); - - // Now put back the defaults ... - vera_tile_area(0, 0, 0, 0, 40, 30, 0, 0, 0); - vera_layer_hide(0); - memcpy_in_vram(0, (char*)0xF800, VERA_INC_1, 1, (char*)0xF000, VERA_INC_1, 256*8); - vera_layer_mode_tile(1, 0x00000, 0x0F800, 128, 128, 8, 8, 1); - vera_layer_mode_tile(0, 0x00000, 0x0F800, 128, 128, 8, 8, 1); - - screenlayer(1); - textcolor(WHITE); - bgcolor(BLUE); - clrscr(); - -} diff --git a/src/test/kc/examples/cx16/veralib/tilemap_8bpp_8_x_8.c b/src/test/kc/examples/cx16/veralib/tilemap_8bpp_8_x_8.c deleted file mode 100644 index 6061005d6..000000000 --- a/src/test/kc/examples/cx16/veralib/tilemap_8bpp_8_x_8.c +++ /dev/null @@ -1,87 +0,0 @@ -// Example program for the Commander X16. -// Demonstrates the usage of the VERA tile map modes and layering. - -// Author: Sven Van de Velde - -#pragma target(cx16) -#include -#include -#include - -void main() { - - textcolor(WHITE); - bgcolor(BLACK); - clrscr(); - - vera_layer_mode_tile(0, 0x04000, 0x14000, 128, 128, 8, 8, 8); - - byte tiles[64] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - }; - - char* tilebase = (char*)0x4000; - memcpy_to_vram(1, tilebase, tiles, 64); - tilebase+=64; - for(byte t:1..255) { - for(byte p:0..63) { - tiles[p]+=1; - } - memcpy_to_vram(1, tilebase, tiles, 64); - tilebase+=64; - } - - //vera_tile_area(byte layer, word tileindex, byte x, byte y, byte w, byte h, byte hflip, byte vflip, byte offset) - - vera_tile_area(0, 0, 0, 0, 80, 60, 0, 0, 0); - - word tile = 0; - - // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. - byte row = 1; - for(byte r:0..7) { - byte column = 1; - for(byte c:0..31) { - vera_tile_area(0, tile, column, row, 1, 1, 0, 0, 0); - column+=2; - tile++; - tile &= 0xff; - } - row += 2; - } - - tile = 0; - row = 20; - for(byte r:0..7) { - byte column = 1; - for(byte c:0..31) { - vera_tile_area(0, tile, column, row, 2, 2, 0, 0, 0); - column+=2; - tile++; - tile &= 0xff; - } - row += 2; - } - - vera_layer_show(0); - - gotoxy(0,50); - printf("vera in tile mode 8 x 8, color depth 8 bits per pixel.\n"); - - printf("in this mode, tiles are 8 pixels wide and 8 pixels tall.\n"); - printf("each tile can have a variation of 256 colors.\n"); - printf("the vera palette of 256 colors, can be used by setting the palette\n"); - printf("offset for each tile.\n"); - printf("here each column is displaying the same tile, but with different offsets!\n"); - printf("each offset aligns to multiples of 16 colors in the palette!.\n"); - printf("however, the first color will always be transparent (black).\n"); - - while(!kbhit()); -} diff --git a/src/test/kc/examples/memfast/memfast.c b/src/test/kc/examples/memfast/memfast.c new file mode 100644 index 000000000..0023f4da3 --- /dev/null +++ b/src/test/kc/examples/memfast/memfast.c @@ -0,0 +1,39 @@ +/** + * @file memfast.c + * @author Sven Van de Velde (sven.van.de.velde@telenet.be) + * @brief Demonstration of functions memcpy_fast and memset_fast + * for 8 bit architectures. + * @version 0.1 + * @date 2023-04-14 + * + * @copyright Copyright (c) 2023 + * + */ + +#include +#include +#include + + +void main() { + const char* screen = (char*)0x0400; + const char* bottom = (char*)0x0400 + 40*12; + + // Show mixed chars on screen + *((char*)0xd018) = 0x17; + + // Clear screen + clrscr(); + + for(char i:0..255) { + memset_fast(screen, i, 256); // 256 will be truncated to 0, which will copy 256 bytes! + memcpy_fast(bottom, screen, 256); + } + + // There is a longer term plan to allow these calls to be written as "inline" ... + // Which would give the programmer the means to decide how the code should + // be generated for these copy functions. + // inline memset_fast(screen, i, 256); // 256 will be truncated to 0, which will copy 256 bytes! + // inline memcpy_fast(bottom, screen, 256); + +} \ No newline at end of file diff --git a/src/test/ref/casting-negative.log b/src/test/ref/casting-negative.log index cfa761d3c..2dc403ae1 100644 --- a/src/test/ref/casting-negative.log +++ b/src/test/ref/casting-negative.log @@ -13,6 +13,8 @@ Inlined call call __init Eliminating unused variable with no statement gotoxy::$4 Eliminating unused variable with no statement memcpy::$0 Eliminating unused variable with no statement memset::$2 +Eliminating unused variable with no statement __snprintf_capacity +Eliminating unused variable with no statement __snprintf_size Eliminating unused variable with no statement test_casting::$0 Calling convention STACK_CALL adding prepare/execute/finalize for call *printf_str::putc printf_str::c Calling convention STACK_CALL adding prepare/execute/finalize for call *printf_padding::putc printf_padding::pad diff --git a/src/test/ref/cbm-keyboard.log b/src/test/ref/cbm-keyboard.log index 0ffec3780..951995af8 100644 --- a/src/test/ref/cbm-keyboard.log +++ b/src/test/ref/cbm-keyboard.log @@ -15,6 +15,8 @@ Inlined call call __init Eliminating unused variable with no statement memcpy::$0 Eliminating unused variable with no statement memset::$2 Eliminating unused variable with no statement gotoxy::$4 +Eliminating unused variable with no statement __snprintf_capacity +Eliminating unused variable with no statement __snprintf_size Eliminating unused variable with no statement main::$2 Eliminating unused variable with no statement main::$7 Calling convention STACK_CALL adding prepare/execute/finalize for call *printf_str::putc printf_str::c diff --git a/src/test/ref/complex/xmega65/xmega65.log b/src/test/ref/complex/xmega65/xmega65.log index 0610788ff..c7b45bec3 100644 --- a/src/test/ref/complex/xmega65/xmega65.log +++ b/src/test/ref/complex/xmega65/xmega65.log @@ -1,4 +1,5 @@ Loading link script "xmega65.ld" +Inlined call call __init Eliminating unused variable with no statement memset::$2 CONTROL FLOW GRAPH SSA @@ -47,7 +48,7 @@ memset::@return: scope:[memset] from memset::@1 to:@return void main() -main: scope:[main] from __start +main: scope:[main] from __start::@1 *VICII_MEMORY = $14 memset::str#0 = (void *)SCREEN memset::c#0 = ' ' @@ -116,11 +117,15 @@ syscall2::@return: scope:[syscall2] from syscall2 void __start() __start: scope:[__start] from - call main + to:__start::__init1 +__start::__init1: scope:[__start] from __start to:__start::@1 -__start::@1: scope:[__start] from __start +__start::@1: scope:[__start] from __start::__init1 + call main + to:__start::@2 +__start::@2: scope:[__start] from __start::@1 to:__start::@return -__start::@return: scope:[__start] from __start::@1 +__start::@return: scope:[__start] from __start::@2 return to:@return @@ -281,7 +286,9 @@ Eliminating unused variable memset::return#3 and assignment [14] memset::return# Successful SSA optimization PassNEliminateUnusedVars Removing unused procedure __start Removing unused procedure block __start +Removing unused procedure block __start::__init1 Removing unused procedure block __start::@1 +Removing unused procedure block __start::@2 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart Simple Condition main::$2 [20] if(*RASTER==$36) goto main::@5 diff --git a/src/test/ref/ducks-array.log b/src/test/ref/ducks-array.log index 52b0efcee..200ca1e29 100644 --- a/src/test/ref/ducks-array.log +++ b/src/test/ref/ducks-array.log @@ -7,6 +7,8 @@ Inlined call vicSelectGfxBank::$0 = call toDd00(vicSelectGfxBank::gfx) Inlined call call __init Eliminating unused variable with no statement gotoxy::$4 Eliminating unused variable with no statement printf_buffer +Eliminating unused variable with no statement __snprintf_capacity +Eliminating unused variable with no statement __snprintf_size CONTROL FLOW GRAPH SSA diff --git a/src/test/ref/ducks-total.log b/src/test/ref/ducks-total.log index b2ef90b84..65e8f8939 100644 --- a/src/test/ref/ducks-total.log +++ b/src/test/ref/ducks-total.log @@ -11,6 +11,8 @@ Eliminating unused variable with no statement memcpy::$0 Eliminating unused variable with no statement memset::$2 Eliminating unused variable with no statement gotoxy::$4 Eliminating unused variable with no statement printf_buffer +Eliminating unused variable with no statement __snprintf_capacity +Eliminating unused variable with no statement __snprintf_size Eliminating unused variable with no statement div16u8u::$1 Eliminating unused variable with no statement div16u8u::$3 Eliminating unused variable with no statement div16u8u::$4 diff --git a/src/test/ref/examples/c64/font-2x2/font-2x2.log b/src/test/ref/examples/c64/font-2x2/font-2x2.log index 54e8fc78d..f89e3df56 100644 --- a/src/test/ref/examples/c64/font-2x2/font-2x2.log +++ b/src/test/ref/examples/c64/font-2x2/font-2x2.log @@ -1,5 +1,6 @@ Inlined call vicSelectGfxBank::$0 = call toDd00(vicSelectGfxBank::gfx) Inlined call main::$2 = call toD018(SCREEN, FONT_COMPRESSED) +Inlined call call __init Eliminating unused variable with no statement memset::$2 Eliminating unused variable with no statement main::$1 Eliminating unused variable with no statement show::$3 @@ -52,7 +53,7 @@ memset::@return: scope:[memset] from memset::@1 to:@return void main() -main: scope:[main] from __start +main: scope:[main] from __start::@1 asm { sei } *PROCPORT = PROCPORT_RAM_CHARROM font_2x2::font_original#0 = CHARGEN @@ -500,11 +501,15 @@ font_find::@return: scope:[font_find] from font_find::@3 font_find::@8 void __start() __start: scope:[__start] from - call main + to:__start::__init1 +__start::__init1: scope:[__start] from __start to:__start::@1 -__start::@1: scope:[__start] from __start +__start::@1: scope:[__start] from __start::__init1 + call main + to:__start::@2 +__start::@2: scope:[__start] from __start::@1 to:__start::@return -__start::@return: scope:[__start] from __start::@1 +__start::@return: scope:[__start] from __start::@2 return to:@return @@ -1278,7 +1283,9 @@ Eliminating unused constant memset::return#2 Successful SSA optimization PassNEliminateUnusedVars Removing unused procedure __start Removing unused procedure block __start +Removing unused procedure block __start::__init1 Removing unused procedure block __start::@1 +Removing unused procedure block __start::@2 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart Adding number conversion cast (unumber) 8 in [30] if(main::x#1!=8) goto main::@2 diff --git a/src/test/ref/examples/c64/kernalload/kernalload.log b/src/test/ref/examples/c64/kernalload/kernalload.log index b0fba1a3b..dd29f2926 100644 --- a/src/test/ref/examples/c64/kernalload/kernalload.log +++ b/src/test/ref/examples/c64/kernalload/kernalload.log @@ -8,6 +8,7 @@ Setting inferred volatile on symbol affected by address-of: load::verify in asm Setting inferred volatile on symbol affected by address-of: load::status in asm { ldxaddress ldyaddress+1 ldaverify jsr$ffd5 bcserror lda#$ff error: stastatus } Inlined call vicSelectGfxBank::$0 = call toDd00(vicSelectGfxBank::gfx) Inlined call main::$3 = call toSpritePtr(LOAD_SPRITE) +Inlined call call __init Eliminating unused variable with no statement main::$0 CONTROL FLOW GRAPH SSA @@ -40,7 +41,7 @@ strlen::@return: scope:[strlen] from strlen::@3 to:@return void main() -main: scope:[main] from __start +main: scope:[main] from __start::@1 loadFileToMemory::device#0 = 8 loadFileToMemory::filename#0 = main::filename loadFileToMemory::address#0 = LOAD_SPRITE @@ -166,11 +167,15 @@ load::@return: scope:[load] from load void __start() __start: scope:[__start] from - call main + to:__start::__init1 +__start::__init1: scope:[__start] from __start to:__start::@1 -__start::@1: scope:[__start] from __start +__start::@1: scope:[__start] from __start::__init1 + call main + to:__start::@2 +__start::@2: scope:[__start] from __start::@1 to:__start::@return -__start::@return: scope:[__start] from __start::@1 +__start::@return: scope:[__start] from __start::@2 return to:@return @@ -366,7 +371,9 @@ Simplifying expression containing zero SPRITES_YPOS in [24] SPRITES_YPOS[0] = $3 Successful SSA optimization PassNSimplifyExpressionWithZero Removing unused procedure __start Removing unused procedure block __start +Removing unused procedure block __start::__init1 Removing unused procedure block __start::@1 +Removing unused procedure block __start::@2 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart Alias candidate removed (volatile)load::return#1 = load::status load::return#2 diff --git a/src/test/ref/examples/cx16/cx16-rasterbars.asm b/src/test/ref/examples/cx16/cx16-rasterbars.asm index 0cedde062..465ab6799 100644 --- a/src/test/ref/examples/cx16/cx16-rasterbars.asm +++ b/src/test/ref/examples/cx16/cx16-rasterbars.asm @@ -1,7 +1,7 @@ // Example program for the Commander X16 // Displays raster bars in the border .cpu _65c02 - // Commodore 64 PRG executable file + // Commander X16 PRG executable file .file [name="cx16-rasterbars.prg", type="prg", segments="Program"] .segmentdef Program [segments="Basic, Code, Data"] .segmentdef Basic [start=$0801] @@ -9,9 +9,13 @@ .segmentdef Data [startAfter="Code"] .segment Basic :BasicUpstart(__start) + .const VERA_DCSEL = 2 .const VERA_LINE = 2 + .const isr_vsync = $314 .const SIZEOF_CHAR = 1 + /// $0314 (RAM) IRQ vector - The vector used when the KERNAL serves IRQ interrupts + .label KERNEL_IRQ = $314 /// $9F25 CTRL Control /// Bit 7: Reset /// Bit 1: DCSEL @@ -48,22 +52,28 @@ .label VERA_DC_VSTART = $9f2b /// $9F2C DC_VSTOP (DCSEL=1) Active Display V-Stop (8:1) .label VERA_DC_VSTOP = $9f2c - /// $0314 (RAM) IRQ vector - The vector used when the KERNAL serves IRQ interrupts - .label KERNEL_IRQ = $314 + .label BRAM = 0 + .label BROM = 1 // The horizontal start - .label hstart = 6 + .label hstart = $26 // The horizontal stop - .label hstop = 7 + .label hstop = $27 // The vertical start - .label vstart = 8 + .label vstart = $28 // The vertical stop - .label vstop = 9 + .label vstop = $29 // The countdown - .label cnt = 5 + .label cnt = $25 // The sin idx - .label sin_idx = $a + .label sin_idx = $2a .segment Code __start: { + // __export volatile __address(0x00) unsigned char BRAM = 0 + lda #0 + sta.z BRAM + // __export volatile __address(0x01) unsigned char BROM = 4 + lda #4 + sta.z BROM // volatile char hstart = 0/4 lda #0 sta.z hstart @@ -87,8 +97,8 @@ __start: { } // LINE Interrupt Routine irq_line: { - .label idx = 4 - .label bar = 2 + .label idx = $24 + .label bar = $22 // *VERA_CTRL |= VERA_DCSEL // Update the border lda #VERA_DCSEL @@ -243,7 +253,7 @@ memset: { .const c = 0 .label str = BARS .label end = str+num - .label dst = 2 + .label dst = $22 lda #str diff --git a/src/test/ref/examples/cx16/cx16-rasterbars.cfg b/src/test/ref/examples/cx16/cx16-rasterbars.cfg index 76233912a..ffa1c2b84 100644 --- a/src/test/ref/examples/cx16/cx16-rasterbars.cfg +++ b/src/test/ref/examples/cx16/cx16-rasterbars.cfg @@ -4,138 +4,140 @@ __start: scope:[__start] from [0] phi() to:__start::__init1 __start::__init1: scope:[__start] from __start - [1] hstart = 0 - [2] hstop = (char)$280/4 - [3] vstart = 0 - [4] vstop = (char)$1e0/2 - [5] cnt = 2 - [6] sin_idx = $64 + [1] BRAM = 0 + [2] BROM = 4 + [3] hstart = 0 + [4] hstop = (char)$280/4 + [5] vstart = 0 + [6] vstop = (char)$1e0/2 + [7] cnt = 2 + [8] sin_idx = $64 to:__start::@1 __start::@1: scope:[__start] from __start::__init1 - [7] phi() - [8] call main + [9] phi() + [10] call main to:__start::@return __start::@return: scope:[__start] from __start::@1 - [9] return + [11] return to:@return __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 - [12] *VERA_DC_HSTOP = hstop - [13] *VERA_DC_VSTART = vstart - [14] *VERA_DC_VSTOP = vstop - [15] *VERA_CTRL = *VERA_CTRL & ~VERA_DCSEL + [12] *VERA_CTRL = *VERA_CTRL | VERA_DCSEL + [13] *VERA_DC_HSTART = hstart + [14] *VERA_DC_HSTOP = hstop + [15] *VERA_DC_VSTART = vstart + [16] *VERA_DC_VSTOP = vstop + [17] *VERA_CTRL = *VERA_CTRL & ~VERA_DCSEL to:irq_line::@2 irq_line::@2: scope:[irq_line] from irq_line irq_line::@10 - [16] irq_line::l#2 = phi( irq_line/0, irq_line::@10/irq_line::l#1 ) - [17] if(irq_line::l#2!=$e6) goto irq_line::@3 + [18] irq_line::l#2 = phi( irq_line/0, irq_line::@10/irq_line::l#1 ) + [19] if(irq_line::l#2!=$e6) goto irq_line::@3 to:irq_line::@4 irq_line::@4: scope:[irq_line] from irq_line::@2 - [18] cnt = -- cnt - [19] if(cnt!=0) goto irq_line::@1 + [20] cnt = -- cnt + [21] if(cnt!=0) goto irq_line::@1 to:irq_line::@11 irq_line::@11: scope:[irq_line] from irq_line::@4 - [20] cnt = 2 - [21] if(hstart>=(char)$140/4+1) goto irq_line::@1 + [22] cnt = 2 + [23] if(hstart>=(char)$140/4+1) goto irq_line::@1 to:irq_line::@12 irq_line::@12: scope:[irq_line] from irq_line::@11 - [22] hstart = ++ hstart - [23] hstop = -- hstop - [24] vstart = ++ vstart - [25] vstop = -- vstop + [24] hstart = ++ hstart + [25] hstop = -- hstop + [26] vstart = ++ vstart + [27] vstop = -- vstop to:irq_line::@1 irq_line::@1: scope:[irq_line] from irq_line::@11 irq_line::@12 irq_line::@4 - [26] phi() - [27] call memset + [28] phi() + [29] call memset to:irq_line::@19 irq_line::@19: scope:[irq_line] from irq_line::@1 - [28] irq_line::idx#0 = sin_idx - [29] sin_idx = -- sin_idx + [30] irq_line::idx#0 = sin_idx + [31] sin_idx = -- sin_idx to:irq_line::@13 irq_line::@13: scope:[irq_line] from irq_line::@18 irq_line::@19 - [30] irq_line::idx#2 = phi( irq_line::@18/irq_line::idx#1, irq_line::@19/irq_line::idx#0 ) - [30] irq_line::b#2 = phi( irq_line::@18/irq_line::b#1, irq_line::@19/0 ) - [31] if(irq_line::b#2<8) goto irq_line::@14 + [32] irq_line::idx#2 = phi( irq_line::@18/irq_line::idx#1, irq_line::@19/irq_line::idx#0 ) + [32] irq_line::b#2 = phi( irq_line::@18/irq_line::b#1, irq_line::@19/0 ) + [33] if(irq_line::b#2<8) goto irq_line::@14 to:irq_line::@15 irq_line::@15: scope:[irq_line] from irq_line::@13 - [32] *VERA_ISR = VERA_LINE + [34] *VERA_ISR = VERA_LINE to:irq_line::@return irq_line::@return: scope:[irq_line] from irq_line::@15 - [33] return + [35] return to:@return irq_line::@14: scope:[irq_line] from irq_line::@13 - [34] irq_line::bar#0 = BARS + SIN[irq_line::idx#2] + [36] 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 - [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_CHAR) goto irq_line::@17 + [37] irq_line::i2#2 = phi( irq_line::@14/0, irq_line::@17/irq_line::i2#1 ) + [38] if(irq_line::i2#2<$20*SIZEOF_CHAR) goto irq_line::@17 to:irq_line::@18 irq_line::@18: scope:[irq_line] from irq_line::@16 - [37] irq_line::idx#1 = irq_line::idx#2 + $d - [38] irq_line::b#1 = ++ irq_line::b#2 + [39] irq_line::idx#1 = irq_line::idx#2 + $d + [40] irq_line::b#1 = ++ irq_line::b#2 to:irq_line::@13 irq_line::@17: scope:[irq_line] from irq_line::@16 - [39] irq_line::bar#0[irq_line::i2#2] = BAR[irq_line::i2#2] - [40] irq_line::i2#1 = ++ irq_line::i2#2 + [41] irq_line::bar#0[irq_line::i2#2] = BAR[irq_line::i2#2] + [42] irq_line::i2#1 = ++ irq_line::i2#2 to:irq_line::@16 irq_line::@3: scope:[irq_line] from irq_line::@2 - [41] *VERA_DC_BORDER = BARS[irq_line::l#2] + [43] *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 - [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 + [44] irq_line::i#2 = phi( irq_line::@3/0, irq_line::@6/irq_line::i#1 ) + [45] if(irq_line::i#2<$18) goto irq_line::@6 to:irq_line::@7 irq_line::@7: scope:[irq_line] from irq_line::@5 - [44] *VERA_DC_BORDER = 0 + [46] *VERA_DC_BORDER = 0 to:irq_line::@8 irq_line::@8: scope:[irq_line] from irq_line::@7 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 + [47] irq_line::i1#2 = phi( irq_line::@7/0, irq_line::@9/irq_line::i1#1 ) + [48] 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 } - [48] irq_line::l#1 = ++ irq_line::l#2 + [50] irq_line::l#1 = ++ irq_line::l#2 to:irq_line::@2 irq_line::@9: scope:[irq_line] from irq_line::@8 - [49] irq_line::i1#1 = ++ irq_line::i1#2 + [51] irq_line::i1#1 = ++ irq_line::i1#2 to:irq_line::@8 irq_line::@6: scope:[irq_line] from irq_line::@5 - [50] irq_line::i#1 = ++ irq_line::i#2 + [52] irq_line::i#1 = ++ irq_line::i#2 to:irq_line::@5 void main() main: scope:[main] from __start::@1 - [51] phi() + [53] phi() to:main::SEI1 main::SEI1: scope:[main] from main asm { sei } to:main::@2 main::@2: scope:[main] from main::SEI1 - [53] *KERNEL_IRQ = &irq_line - [54] *VERA_IEN = VERA_LINE - [55] *VERA_IRQLINE_L = 5 + [55] *KERNEL_IRQ = &irq_line + [56] *VERA_IEN = VERA_LINE + [57] *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 - [57] phi() + [59] phi() to:main::@1 void * memset(void *str , char c , unsigned int num) memset: scope:[memset] from irq_line::@1 - [58] phi() + [60] phi() to:memset::@1 memset::@1: scope:[memset] from memset memset::@2 - [59] memset::dst#2 = phi( memset/(char *)memset::str#0, memset::@2/memset::dst#1 ) - [60] if(memset::dst#2!=memset::end#0) goto memset::@2 + [61] memset::dst#2 = phi( memset/(char *)memset::str#0, memset::@2/memset::dst#1 ) + [62] if(memset::dst#2!=memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [61] return + [63] return to:@return memset::@2: scope:[memset] from memset::@1 - [62] *memset::dst#2 = memset::c#0 - [63] memset::dst#1 = ++ memset::dst#2 + [64] *memset::dst#2 = memset::c#0 + [65] memset::dst#1 = ++ memset::dst#2 to:memset::@1 diff --git a/src/test/ref/examples/cx16/cx16-rasterbars.log b/src/test/ref/examples/cx16/cx16-rasterbars.log index 18cd7a889..933993238 100644 --- a/src/test/ref/examples/cx16/cx16-rasterbars.log +++ b/src/test/ref/examples/cx16/cx16-rasterbars.log @@ -1,11 +1,54 @@ Resolved forward reference irq_line to __interrupt(rom_min_cx16) void irq_line() -Setting inferred volatile on symbol affected by address-of: setnam::filename_len in asm { ldafilename_len ldxfilename ldyfilename+1 jsr$ffbd } -Setting inferred volatile on symbol affected by address-of: setnam::filename in asm { ldafilename_len ldxfilename ldyfilename+1 jsr$ffbd } -Setting inferred volatile on symbol affected by address-of: setlfs::device in asm { ldxdevice lda#1 ldy#0 jsr$ffba } -Setting inferred volatile on symbol affected by address-of: load::address in asm { ldxaddress ldyaddress+1 ldaverify jsr$ffd5 bcserror lda#$ff error: stastatus } -Setting inferred volatile on symbol affected by address-of: load::verify in asm { ldxaddress ldyaddress+1 ldaverify jsr$ffd5 bcserror lda#$ff error: stastatus } -Setting inferred volatile on symbol affected by address-of: load::status in asm { ldxaddress ldyaddress+1 ldaverify jsr$ffd5 bcserror lda#$ff error: stastatus } -Setting inferred volatile on symbol affected by address-of: getin::ch in asm { jsr$ffe4 stach } +Setting inferred volatile on symbol affected by address-of: memcpy_vram_bram::pos in asm { ldypos ldxlen inx ldaptr sta!ptr++1 ldaptr+1 sta!ptr++2 !ptr: lda$ffff,y staVERA_DATA0 iny dex bne!ptr- } +Setting inferred volatile on symbol affected by address-of: memcpy_vram_bram::len in asm { ldypos ldxlen inx ldaptr sta!ptr++1 ldaptr+1 sta!ptr++2 !ptr: lda$ffff,y staVERA_DATA0 iny dex bne!ptr- } +Setting inferred volatile on symbol affected by address-of: memcpy_vram_bram::ptr in asm { ldypos ldxlen inx ldaptr sta!ptr++1 ldaptr+1 sta!ptr++2 !ptr: lda$ffff,y staVERA_DATA0 iny dex bne!ptr- } +Setting inferred volatile on symbol affected by address-of: memcpy_vram_bram::num in asm { ldy#0 ldxnum inx ldaptr sta!ptr++1 ldaptr+1 sta!ptr++2 !ptr: lda$ffff,y staVERA_DATA0 iny dex bne!ptr- } +Setting inferred volatile on symbol affected by address-of: cbm_k_setlfs::device in asm { ldxdevice ldachannel ldycommand jsrCBM_SETLFS } +Setting inferred volatile on symbol affected by address-of: cbm_k_setlfs::channel in asm { ldxdevice ldachannel ldycommand jsrCBM_SETLFS } +Setting inferred volatile on symbol affected by address-of: cbm_k_setlfs::command in asm { ldxdevice ldachannel ldycommand jsrCBM_SETLFS } +Setting inferred volatile on symbol affected by address-of: cbm_k_setnam::filename_len in asm { ldafilename_len ldxfilename ldyfilename+1 jsrCBM_SETNAM } +Setting inferred volatile on symbol affected by address-of: cbm_k_setnam::filename in asm { ldafilename_len ldxfilename ldyfilename+1 jsrCBM_SETNAM } +Setting inferred volatile on symbol affected by address-of: cbm_k_close::channel in asm { ldachannel jsrCBM_CLOSE } +Setting inferred volatile on symbol affected by address-of: cbm_k_chkin::channel in asm { ldxchannel jsrCBM_CHKIN stastatus } +Setting inferred volatile on symbol affected by address-of: cbm_k_chkin::status in asm { ldxchannel jsrCBM_CHKIN stastatus } +Setting inferred volatile on symbol affected by address-of: cbm_k_chrin::ch in asm { jsrCBM_CHRIN stach } +Setting inferred volatile on symbol affected by address-of: cbm_k_getin::ch in asm { jsrCBM_GETIN stach } +Setting inferred volatile on symbol affected by address-of: cbm_k_readst::status in asm { jsrCBM_READST stastatus } +Setting inferred volatile on symbol affected by address-of: cbm_k_load::address in asm { .byte$db ldxaddress ldyaddress+1 ldaverify jsr$ffd5 bcs!error+ lda#$ff !error: stastatus } +Setting inferred volatile on symbol affected by address-of: cbm_k_load::verify in asm { .byte$db ldxaddress ldyaddress+1 ldaverify jsr$ffd5 bcs!error+ lda#$ff !error: stastatus } +Setting inferred volatile on symbol affected by address-of: cbm_k_load::status in asm { .byte$db ldxaddress ldyaddress+1 ldaverify jsr$ffd5 bcs!error+ lda#$ff !error: stastatus } +Setting inferred volatile on symbol affected by address-of: cbm_k_plot_get::x in kickasm( uses cbm_k_plot_get::x uses cbm_k_plot_get::y uses CBM_PLOT) {{ sec + jsr CBM_PLOT + stx y + sty x + }} +Setting inferred volatile on symbol affected by address-of: cbm_k_plot_get::y in kickasm( uses cbm_k_plot_get::x uses cbm_k_plot_get::y uses CBM_PLOT) {{ sec + jsr CBM_PLOT + stx y + sty x + }} +Setting inferred volatile on symbol affected by address-of: cbm_k_plot_set::x in kickasm( uses cbm_k_plot_set::x uses cbm_k_plot_set::y uses CBM_PLOT) {{ ldx y + ldy x + clc + jsr CBM_PLOT + }} +Setting inferred volatile on symbol affected by address-of: cbm_k_plot_set::y in kickasm( uses cbm_k_plot_set::x uses cbm_k_plot_set::y uses CBM_PLOT) {{ ldx y + ldy x + clc + jsr CBM_PLOT + }} +Setting inferred volatile on symbol affected by address-of: cbm_k_chrout::ch in asm { ldach jsrCBM_CHROUT } +Setting inferred volatile on symbol affected by address-of: cx16_k_macptr::bytes in asm { ldabytes ldxbuffer ldybuffer+1 clc jsrCX16_MACPTR stxbytes_read stybytes_read+1 bcc!+ lda#$FF stabytes_read stabytes_read+1 !: } +Setting inferred volatile on symbol affected by address-of: cx16_k_macptr::buffer in asm { ldabytes ldxbuffer ldybuffer+1 clc jsrCX16_MACPTR stxbytes_read stybytes_read+1 bcc!+ lda#$FF stabytes_read stabytes_read+1 !: } +Setting inferred volatile on symbol affected by address-of: cx16_k_macptr::bytes_read in asm { ldabytes ldxbuffer ldybuffer+1 clc jsrCX16_MACPTR stxbytes_read stybytes_read+1 bcc!+ lda#$FF stabytes_read stabytes_read+1 !: } +Setting inferred volatile on symbol affected by address-of: cx16_k_screen_set_charset::charset in asm { ldacharset ldxoffset jsrCX16_SCREEN_SET_CHARSET } +Setting inferred volatile on symbol affected by address-of: cx16_k_screen_set_charset::offset in asm { ldacharset ldxoffset jsrCX16_SCREEN_SET_CHARSET } +Inlined call call bank_set_bram(bank_bram_ptr_inc::bank) +Inlined call memcpy_vram_bram::bank = call bank_get_bram +Inlined call call bank_set_bram(memcpy_vram_bram::sbank_bram) +Inlined call call bank_set_bram(memcpy_vram_bram::sbank_bram) +Inlined call call bank_set_bram(memcpy_vram_bram::sbank_bram) +Inlined call call bank_set_bram(memcpy_vram_bram::bank) Inlined call call SEI Inlined call call CLI Inlined call call __init @@ -57,6 +100,16 @@ memset::@return: scope:[memset] from memset::@1 return to:@return +void cx16_init() +cx16_init: scope:[cx16_init] from __start::__init1 + isr_vsync#0 = *((unsigned int *)$314) + to:cx16_init::@return +cx16_init::@return: scope:[cx16_init] from cx16_init + isr_vsync#5 = phi( cx16_init/isr_vsync#0 ) + isr_vsync#1 = isr_vsync#5 + return + to:@return + void main() main: scope:[main] from __start::@1 to:main::SEI1 @@ -206,26 +259,44 @@ void __start() __start: scope:[__start] from to:__start::__init1 __start::__init1: scope:[__start] from __start + BRAM = 0 + BROM = 4 + isr_vsync#2 = $314 hstart = (char)0/4 hstop = (char)$280/4 vstart = (char)0/2 vstop = (char)$1e0/2 cnt = 2 sin_idx = $64 - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - call main + call cx16_init to:__start::@2 -__start::@2: scope:[__start] from __start::@1 +__start::@2: scope:[__start] from __start::__init1 + isr_vsync#6 = phi( __start::__init1/isr_vsync#1 ) + isr_vsync#3 = isr_vsync#6 + to:__start::@1 +__start::@1: scope:[__start] from __start::@2 + isr_vsync#9 = phi( __start::@2/isr_vsync#3 ) + call main + to:__start::@3 +__start::@3: scope:[__start] from __start::@1 + isr_vsync#8 = phi( __start::@1/isr_vsync#9 ) to:__start::@return -__start::@return: scope:[__start] from __start::@2 +__start::@return: scope:[__start] from __start::@3 + isr_vsync#7 = phi( __start::@3/isr_vsync#8 ) + isr_vsync#4 = isr_vsync#7 return to:@return SYMBOL TABLE SSA __constant char BAR[$20] = { $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $1a, $1b, $1c, $1d, $1e, $1f, $1f, $1e, $1d, $1c, $1b, $1a, $19, $18, $17, $16, $15, $14, $13, $12, $11, $10 } __constant char BARS[$e6] = { fill( $e6, 0) } +__loadstore volatile char BRAM // !zp[-1]:0 +__loadstore volatile char BROM // !zp[-1]:1 __constant void (** const KERNEL_IRQ)() = (void (**)())$314 +__constant char RADIX::BINARY = 2 +__constant char RADIX::DECIMAL = $a +__constant char RADIX::HEXADECIMAL = $10 +__constant char RADIX::OCTAL = 8 __constant char SIN[$100] = kickasm {{ .fill 256, 99+99*sin(i*2*PI/256) }} __constant char * const VERA_CTRL = (char *)$9f25 @@ -241,6 +312,7 @@ __constant char * const VERA_ISR = (char *)$9f27 __constant const char VERA_LINE = 2 void __start() __loadstore volatile char cnt +void cx16_init() __loadstore volatile char hstart __loadstore volatile char hstop __interrupt(rom_min_cx16) void irq_line() @@ -301,6 +373,17 @@ char irq_line::l#6 char irq_line::l#7 char irq_line::l#8 char irq_line::l#9 +unsigned int isr_vsync +unsigned int isr_vsync#0 +unsigned int isr_vsync#1 +unsigned int isr_vsync#2 +unsigned int isr_vsync#3 +unsigned int isr_vsync#4 +unsigned int isr_vsync#5 +unsigned int isr_vsync#6 +unsigned int isr_vsync#7 +unsigned int isr_vsync#8 +unsigned int isr_vsync#9 void main() void * memset(void *str , char c , unsigned int num) bool memset::$0 @@ -361,6 +444,7 @@ Inlining cast *VERA_DC_BORDER = (unumber)0 Inlining cast memset::c#0 = (unumber)0 Inlining cast cnt = (unumber)2 Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (void (**)()) 788 Simplifying constant pointer cast (char *) 40741 Simplifying constant pointer cast (char *) 40742 Simplifying constant pointer cast (char *) 40743 @@ -370,8 +454,8 @@ Simplifying constant pointer cast (char *) 40745 Simplifying constant pointer cast (char *) 40746 Simplifying constant pointer cast (char *) 40747 Simplifying constant pointer cast (char *) 40748 -Simplifying constant pointer cast (void (**)()) 788 Simplifying constant integer cast 0 +Simplifying constant pointer cast (unsigned int *) 788 Simplifying constant integer cast 5 Simplifying constant integer cast $e6 Simplifying constant integer cast 0 @@ -396,8 +480,8 @@ Finalized unsigned number type (char) 8 Finalized unsigned number type (char) $d Successful SSA optimization PassNFinalizeNumberTypeConversions Inversing boolean not [2] memset::$1 = memset::num#1 <= 0 from [1] memset::$0 = memset::num#1 > 0 -Inversing boolean not [40] irq_line::$1 = cnt != 0 from [39] irq_line::$0 = cnt == 0 -Inversing boolean not [69] irq_line::$8 = hstart > (char)$140/4 from [68] irq_line::$7 = hstart <= (char)$140/4 +Inversing boolean not [44] irq_line::$1 = cnt != 0 from [43] irq_line::$0 = cnt == 0 +Inversing boolean not [73] irq_line::$8 = hstart > (char)$140/4 from [72] irq_line::$7 = hstart <= (char)$140/4 Successful SSA optimization Pass2UnaryNotSimplification Alias memset::return#0 = memset::str#1 memset::return#3 memset::return#1 Alias memset::str#2 = memset::str#3 @@ -407,6 +491,7 @@ Alias memset::c#1 = memset::c#2 Alias memset::dst#2 = memset::dst#3 Alias memset::end#1 = memset::end#2 Alias memset::str#4 = memset::str#5 +Alias isr_vsync#0 = isr_vsync#5 isr_vsync#1 Alias irq_line::l#2 = irq_line::l#3 Alias irq_line::i#2 = irq_line::i#3 Alias irq_line::l#6 = irq_line::l#9 irq_line::l#8 @@ -419,6 +504,7 @@ Alias irq_line::i2#2 = irq_line::i2#3 Alias irq_line::bar#1 = irq_line::bar#2 Alias irq_line::idx#3 = irq_line::idx#6 irq_line::idx#5 Alias irq_line::b#3 = irq_line::b#6 irq_line::b#4 +Alias isr_vsync#3 = isr_vsync#6 isr_vsync#9 isr_vsync#8 isr_vsync#7 isr_vsync#4 Successful SSA optimization Pass2AliasElimination Identical Phi Values memset::num#1 memset::num#0 Identical Phi Values memset::str#2 memset::str#0 @@ -431,21 +517,22 @@ Identical Phi Values irq_line::l#4 irq_line::l#6 Identical Phi Values irq_line::bar#1 irq_line::bar#0 Identical Phi Values irq_line::idx#3 irq_line::idx#2 Identical Phi Values irq_line::b#3 irq_line::b#2 +Identical Phi Values isr_vsync#3 isr_vsync#0 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values memset::return#0 memset::str#0 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition memset::$1 [2] if(memset::num#0<=0) goto memset::@1 Simple Condition memset::$3 [9] if(memset::dst#2!=memset::end#0) goto memset::@4 -Simple Condition irq_line::$4 [28] if(irq_line::l#2!=$e6) goto irq_line::@3 -Simple Condition irq_line::$1 [33] if(cnt!=0) goto irq_line::@1 -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>(char)$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 [70] if(irq_line::i2#2(char)$140/4) goto irq_line::@1 +Simple Condition irq_line::$9 [65] if(irq_line::b#2<8) goto irq_line::@14 +Simple Condition irq_line::$12 [72] if(irq_line::i2#2(char)$140/4) goto irq_line::@1 -Simplifying constant evaluating to zero (char)0/4 in [76] hstart = (char)0/4 -Simplifying constant evaluating to zero (char)0/2 in [78] vstart = (char)0/2 +Rewriting conditional comparison [58] if(hstart>(char)$140/4) goto irq_line::@1 +Simplifying constant evaluating to zero (char)0/4 in [81] hstart = (char)0/4 +Simplifying constant evaluating to zero (char)0/2 in [83] vstart = (char)0/2 Successful SSA optimization PassNSimplifyConstantZero +Removing call to empty/unused procedure [87] call cx16_init +Successful SSA optimization PassNEliminateUnusedConstructors +Eliminating variable isr_vsync#0 from unused block cx16_init +Removing unused procedure cx16_init +Removing unused procedure block cx16_init +Removing unused procedure block cx16_init::@return Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks Eliminating unused constant memset::return#2 @@ -510,6 +604,10 @@ Constant inlined irq_line::i1#0 = 0 Constant inlined memset::dst#0 = (char *)memset::str#0 Constant inlined irq_line::b#0 = 0 Successful SSA optimization Pass2ConstantInlining +Finalized unsigned number type (char) 2 +Finalized unsigned number type (char) 8 +Finalized unsigned number type (char) $a +Finalized unsigned number type (char) $10 Finalized unsigned number type (unsigned int) $100 Finalized unsigned number type (char) $e6 Finalized unsigned number type (char) $e6 @@ -522,8 +620,9 @@ Finalized unsigned number type (unsigned int) $1e0 Finalized unsigned number type (char) 2 Successful SSA optimization PassNFinalizeNumberTypeConversions Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@1 Adding NOP phi() at start of __start::@2 +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of __start::@3 Adding NOP phi() at start of irq_line::@1 Adding NOP phi() at start of main Adding NOP phi() at start of main::@1 @@ -531,20 +630,21 @@ Adding NOP phi() at start of memset Adding NOP phi() at start of memset::@2 Adding NOP phi() at start of memset::@1 CALL GRAPH -Calls in [__start] to main:8 -Calls in [irq_line] to memset:28 +Calls in [__start] to main:11 +Calls in [irq_line] to memset:31 Created 7 initial phi equivalence classes -Coalesced [31] irq_line::idx#8 = irq_line::idx#0 -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 [34] irq_line::idx#8 = irq_line::idx#0 +Coalesced [44] irq_line::b#7 = irq_line::b#1 +Coalesced [45] irq_line::idx#7 = irq_line::idx#1 +Coalesced [48] irq_line::i2#4 = irq_line::i2#1 +Coalesced [57] irq_line::l#10 = irq_line::l#1 +Coalesced [59] irq_line::i1#4 = irq_line::i1#1 +Coalesced [61] irq_line::i#4 = irq_line::i#1 +Coalesced [77] memset::dst#4 = memset::dst#1 Coalesced down to 7 phi equivalence classes Culled Empty Block label __start::@2 +Culled Empty Block label __start::@3 Culled Empty Block label memset::@2 Culled Empty Block label memset::@1 Renumbering block memset::@3 to memset::@1 @@ -563,144 +663,148 @@ __start: scope:[__start] from [0] phi() to:__start::__init1 __start::__init1: scope:[__start] from __start - [1] hstart = 0 - [2] hstop = (char)$280/4 - [3] vstart = 0 - [4] vstop = (char)$1e0/2 - [5] cnt = 2 - [6] sin_idx = $64 + [1] BRAM = 0 + [2] BROM = 4 + [3] hstart = 0 + [4] hstop = (char)$280/4 + [5] vstart = 0 + [6] vstop = (char)$1e0/2 + [7] cnt = 2 + [8] sin_idx = $64 to:__start::@1 __start::@1: scope:[__start] from __start::__init1 - [7] phi() - [8] call main + [9] phi() + [10] call main to:__start::@return __start::@return: scope:[__start] from __start::@1 - [9] return + [11] return to:@return __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 - [12] *VERA_DC_HSTOP = hstop - [13] *VERA_DC_VSTART = vstart - [14] *VERA_DC_VSTOP = vstop - [15] *VERA_CTRL = *VERA_CTRL & ~VERA_DCSEL + [12] *VERA_CTRL = *VERA_CTRL | VERA_DCSEL + [13] *VERA_DC_HSTART = hstart + [14] *VERA_DC_HSTOP = hstop + [15] *VERA_DC_VSTART = vstart + [16] *VERA_DC_VSTOP = vstop + [17] *VERA_CTRL = *VERA_CTRL & ~VERA_DCSEL to:irq_line::@2 irq_line::@2: scope:[irq_line] from irq_line irq_line::@10 - [16] irq_line::l#2 = phi( irq_line/0, irq_line::@10/irq_line::l#1 ) - [17] if(irq_line::l#2!=$e6) goto irq_line::@3 + [18] irq_line::l#2 = phi( irq_line/0, irq_line::@10/irq_line::l#1 ) + [19] if(irq_line::l#2!=$e6) goto irq_line::@3 to:irq_line::@4 irq_line::@4: scope:[irq_line] from irq_line::@2 - [18] cnt = -- cnt - [19] if(cnt!=0) goto irq_line::@1 + [20] cnt = -- cnt + [21] if(cnt!=0) goto irq_line::@1 to:irq_line::@11 irq_line::@11: scope:[irq_line] from irq_line::@4 - [20] cnt = 2 - [21] if(hstart>=(char)$140/4+1) goto irq_line::@1 + [22] cnt = 2 + [23] if(hstart>=(char)$140/4+1) goto irq_line::@1 to:irq_line::@12 irq_line::@12: scope:[irq_line] from irq_line::@11 - [22] hstart = ++ hstart - [23] hstop = -- hstop - [24] vstart = ++ vstart - [25] vstop = -- vstop + [24] hstart = ++ hstart + [25] hstop = -- hstop + [26] vstart = ++ vstart + [27] vstop = -- vstop to:irq_line::@1 irq_line::@1: scope:[irq_line] from irq_line::@11 irq_line::@12 irq_line::@4 - [26] phi() - [27] call memset + [28] phi() + [29] call memset to:irq_line::@19 irq_line::@19: scope:[irq_line] from irq_line::@1 - [28] irq_line::idx#0 = sin_idx - [29] sin_idx = -- sin_idx + [30] irq_line::idx#0 = sin_idx + [31] sin_idx = -- sin_idx to:irq_line::@13 irq_line::@13: scope:[irq_line] from irq_line::@18 irq_line::@19 - [30] irq_line::idx#2 = phi( irq_line::@18/irq_line::idx#1, irq_line::@19/irq_line::idx#0 ) - [30] irq_line::b#2 = phi( irq_line::@18/irq_line::b#1, irq_line::@19/0 ) - [31] if(irq_line::b#2<8) goto irq_line::@14 + [32] irq_line::idx#2 = phi( irq_line::@18/irq_line::idx#1, irq_line::@19/irq_line::idx#0 ) + [32] irq_line::b#2 = phi( irq_line::@18/irq_line::b#1, irq_line::@19/0 ) + [33] if(irq_line::b#2<8) goto irq_line::@14 to:irq_line::@15 irq_line::@15: scope:[irq_line] from irq_line::@13 - [32] *VERA_ISR = VERA_LINE + [34] *VERA_ISR = VERA_LINE to:irq_line::@return irq_line::@return: scope:[irq_line] from irq_line::@15 - [33] return + [35] return to:@return irq_line::@14: scope:[irq_line] from irq_line::@13 - [34] irq_line::bar#0 = BARS + SIN[irq_line::idx#2] + [36] 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 - [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_CHAR) goto irq_line::@17 + [37] irq_line::i2#2 = phi( irq_line::@14/0, irq_line::@17/irq_line::i2#1 ) + [38] if(irq_line::i2#2<$20*SIZEOF_CHAR) goto irq_line::@17 to:irq_line::@18 irq_line::@18: scope:[irq_line] from irq_line::@16 - [37] irq_line::idx#1 = irq_line::idx#2 + $d - [38] irq_line::b#1 = ++ irq_line::b#2 + [39] irq_line::idx#1 = irq_line::idx#2 + $d + [40] irq_line::b#1 = ++ irq_line::b#2 to:irq_line::@13 irq_line::@17: scope:[irq_line] from irq_line::@16 - [39] irq_line::bar#0[irq_line::i2#2] = BAR[irq_line::i2#2] - [40] irq_line::i2#1 = ++ irq_line::i2#2 + [41] irq_line::bar#0[irq_line::i2#2] = BAR[irq_line::i2#2] + [42] irq_line::i2#1 = ++ irq_line::i2#2 to:irq_line::@16 irq_line::@3: scope:[irq_line] from irq_line::@2 - [41] *VERA_DC_BORDER = BARS[irq_line::l#2] + [43] *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 - [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 + [44] irq_line::i#2 = phi( irq_line::@3/0, irq_line::@6/irq_line::i#1 ) + [45] if(irq_line::i#2<$18) goto irq_line::@6 to:irq_line::@7 irq_line::@7: scope:[irq_line] from irq_line::@5 - [44] *VERA_DC_BORDER = 0 + [46] *VERA_DC_BORDER = 0 to:irq_line::@8 irq_line::@8: scope:[irq_line] from irq_line::@7 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 + [47] irq_line::i1#2 = phi( irq_line::@7/0, irq_line::@9/irq_line::i1#1 ) + [48] 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 } - [48] irq_line::l#1 = ++ irq_line::l#2 + [50] irq_line::l#1 = ++ irq_line::l#2 to:irq_line::@2 irq_line::@9: scope:[irq_line] from irq_line::@8 - [49] irq_line::i1#1 = ++ irq_line::i1#2 + [51] irq_line::i1#1 = ++ irq_line::i1#2 to:irq_line::@8 irq_line::@6: scope:[irq_line] from irq_line::@5 - [50] irq_line::i#1 = ++ irq_line::i#2 + [52] irq_line::i#1 = ++ irq_line::i#2 to:irq_line::@5 void main() main: scope:[main] from __start::@1 - [51] phi() + [53] phi() to:main::SEI1 main::SEI1: scope:[main] from main asm { sei } to:main::@2 main::@2: scope:[main] from main::SEI1 - [53] *KERNEL_IRQ = &irq_line - [54] *VERA_IEN = VERA_LINE - [55] *VERA_IRQLINE_L = 5 + [55] *KERNEL_IRQ = &irq_line + [56] *VERA_IEN = VERA_LINE + [57] *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 - [57] phi() + [59] phi() to:main::@1 void * memset(void *str , char c , unsigned int num) memset: scope:[memset] from irq_line::@1 - [58] phi() + [60] phi() to:memset::@1 memset::@1: scope:[memset] from memset memset::@2 - [59] memset::dst#2 = phi( memset/(char *)memset::str#0, memset::@2/memset::dst#1 ) - [60] if(memset::dst#2!=memset::end#0) goto memset::@2 + [61] memset::dst#2 = phi( memset/(char *)memset::str#0, memset::@2/memset::dst#1 ) + [62] if(memset::dst#2!=memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [61] return + [63] return to:@return memset::@2: scope:[memset] from memset::@1 - [62] *memset::dst#2 = memset::c#0 - [63] memset::dst#1 = ++ memset::dst#2 + [64] *memset::dst#2 = memset::c#0 + [65] memset::dst#1 = ++ memset::dst#2 to:memset::@1 VARIABLE REGISTER WEIGHTS +__loadstore volatile char BRAM // !zp[-1]:0 20.0 +__loadstore volatile char BROM // !zp[-1]:1 20.0 void __start() __loadstore volatile char cnt // 0.5263157894736842 __loadstore volatile char hstart // 0.4545454545454546 @@ -727,6 +831,7 @@ char irq_line::idx#2 // 5.0 char irq_line::l char irq_line::l#1 // 22.0 char irq_line::l#2 // 4.0 +unsigned int isr_vsync void main() void * memset(void *str , char c , unsigned int num) char memset::c @@ -749,6 +854,8 @@ Initial phi equivalence classes [ irq_line::i#2 irq_line::i#1 ] [ irq_line::i1#2 irq_line::i1#1 ] [ memset::dst#2 memset::dst#1 ] +Added variable BRAM to live range equivalence class [ BRAM ] +Added variable BROM to live range equivalence class [ BROM ] Added variable hstart to live range equivalence class [ hstart ] Added variable hstop to live range equivalence class [ hstop ] Added variable vstart to live range equivalence class [ vstart ] @@ -764,6 +871,8 @@ Complete equivalence classes [ irq_line::i#2 irq_line::i#1 ] [ irq_line::i1#2 irq_line::i1#1 ] [ memset::dst#2 memset::dst#1 ] +[ BRAM ] +[ BROM ] [ hstart ] [ hstop ] [ vstart ] @@ -771,134 +880,146 @@ Complete equivalence classes [ cnt ] [ sin_idx ] [ irq_line::bar#0 ] -Allocated zp[1]:2 [ irq_line::i2#2 irq_line::i2#1 ] -Allocated zp[1]:3 [ irq_line::i#2 irq_line::i#1 ] -Allocated zp[1]:4 [ irq_line::i1#2 irq_line::i1#1 ] -Allocated zp[2]:5 [ memset::dst#2 memset::dst#1 ] -Allocated zp[1]:7 [ irq_line::b#2 irq_line::b#1 ] -Allocated zp[1]:8 [ irq_line::l#2 irq_line::l#1 ] -Allocated zp[2]:9 [ irq_line::bar#0 ] -Allocated zp[1]:11 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] -Allocated zp[1]:12 [ cnt ] -Allocated zp[1]:13 [ hstart ] -Allocated zp[1]:14 [ hstop ] -Allocated zp[1]:15 [ vstart ] -Allocated zp[1]:16 [ vstop ] -Allocated zp[1]:17 [ sin_idx ] +Allocated zp[1]:34 [ irq_line::i2#2 irq_line::i2#1 ] +Allocated zp[1]:35 [ irq_line::i#2 irq_line::i#1 ] +Allocated zp[1]:36 [ irq_line::i1#2 irq_line::i1#1 ] +Allocated zp[2]:37 [ memset::dst#2 memset::dst#1 ] +Allocated zp[1]:39 [ irq_line::b#2 irq_line::b#1 ] +Allocated zp[1]:40 [ irq_line::l#2 irq_line::l#1 ] +Allocated zp[2]:41 [ irq_line::bar#0 ] +Allocated zp[1]:43 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] +Allocated zp[1]:44 [ cnt ] +Allocated zp[1]:45 [ hstart ] +Allocated zp[1]:46 [ hstop ] +Allocated zp[1]:47 [ vstart ] +Allocated zp[1]:48 [ vstop ] +Allocated zp[1]:49 [ sin_idx ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] hstart = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [2] hstop = (char)$280/4 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [3] vstart = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [4] vstop = (char)$1e0/2 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [5] cnt = 2 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [6] sin_idx = $64 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [10] *VERA_CTRL = *VERA_CTRL | VERA_DCSEL [ hstart hstop vstart vstop cnt sin_idx ] ( [ hstart hstop vstart vstop cnt sin_idx ] { } ) always clobbers reg byte a -Statement [11] *VERA_DC_HSTART = hstart [ hstart hstop vstart vstop cnt sin_idx ] ( [ hstart hstop vstart vstop cnt sin_idx ] { } ) always clobbers reg byte a -Statement [12] *VERA_DC_HSTOP = hstop [ hstart hstop vstart vstop cnt sin_idx ] ( [ hstart hstop vstart vstop cnt sin_idx ] { } ) always clobbers reg byte a -Statement [13] *VERA_DC_VSTART = vstart [ hstart hstop vstart vstop cnt sin_idx ] ( [ hstart hstop vstart vstop cnt sin_idx ] { } ) always clobbers reg byte a -Statement [14] *VERA_DC_VSTOP = vstop [ hstart hstop vstart vstop cnt sin_idx ] ( [ hstart hstop vstart vstop cnt sin_idx ] { } ) always clobbers reg byte a -Statement [15] *VERA_CTRL = *VERA_CTRL & ~VERA_DCSEL [ hstart hstop vstart vstop cnt sin_idx ] ( [ hstart hstop vstart vstop cnt sin_idx ] { } ) always clobbers reg byte a -Statement [19] if(cnt!=0) goto irq_line::@1 [ hstart hstop vstart vstop sin_idx ] ( [ hstart hstop vstart vstop sin_idx ] { } ) always clobbers reg byte a -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>=(char)$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 [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]:7 [ irq_line::b#2 irq_line::b#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:11 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] -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]:2 [ irq_line::i2#2 irq_line::i2#1 ] -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]:8 [ irq_line::l#2 irq_line::l#1 ] -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 = (char)$280/4 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [3] vstart = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [4] vstop = (char)$1e0/2 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [5] cnt = 2 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [6] sin_idx = $64 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [10] *VERA_CTRL = *VERA_CTRL | VERA_DCSEL [ hstart hstop vstart vstop cnt sin_idx ] ( [ hstart hstop vstart vstop cnt sin_idx ] { } ) always clobbers reg byte a -Statement [11] *VERA_DC_HSTART = hstart [ hstart hstop vstart vstop cnt sin_idx ] ( [ hstart hstop vstart vstop cnt sin_idx ] { } ) always clobbers reg byte a -Statement [12] *VERA_DC_HSTOP = hstop [ hstart hstop vstart vstop cnt sin_idx ] ( [ hstart hstop vstart vstop cnt sin_idx ] { } ) always clobbers reg byte a -Statement [13] *VERA_DC_VSTART = vstart [ hstart hstop vstart vstop cnt sin_idx ] ( [ hstart hstop vstart vstop cnt sin_idx ] { } ) always clobbers reg byte a -Statement [14] *VERA_DC_VSTOP = vstop [ hstart hstop vstart vstop cnt sin_idx ] ( [ hstart hstop vstart vstop cnt sin_idx ] { } ) always clobbers reg byte a -Statement [15] *VERA_CTRL = *VERA_CTRL & ~VERA_DCSEL [ hstart hstop vstart vstop cnt sin_idx ] ( [ hstart hstop vstart vstop cnt sin_idx ] { } ) always clobbers reg byte a -Statement [19] if(cnt!=0) goto irq_line::@1 [ hstart hstop vstart vstop sin_idx ] ( [ hstart hstop vstart vstop sin_idx ] { } ) always clobbers reg byte a -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>=(char)$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 [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]:8 [ irq_line::l#2 irq_line::l#1 ] : zp[1]:8 , reg byte x , reg byte y , -Potential registers zp[1]:7 [ irq_line::b#2 irq_line::b#1 ] : zp[1]:7 , reg byte x , reg byte y , -Potential registers zp[1]:11 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] : zp[1]:11 , reg byte x , reg byte y , -Potential registers zp[1]:2 [ irq_line::i2#2 irq_line::i2#1 ] : zp[1]:2 , reg byte x , reg byte y , -Potential registers zp[1]:3 [ irq_line::i#2 irq_line::i#1 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:4 [ irq_line::i1#2 irq_line::i1#1 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:5 [ memset::dst#2 memset::dst#1 ] : zp[2]:5 , -Potential registers zp[1]:13 [ hstart ] : zp[1]:13 , -Potential registers zp[1]:14 [ hstop ] : zp[1]:14 , -Potential registers zp[1]:15 [ vstart ] : zp[1]:15 , -Potential registers zp[1]:16 [ vstop ] : zp[1]:16 , -Potential registers zp[1]:12 [ cnt ] : zp[1]:12 , -Potential registers zp[1]:17 [ sin_idx ] : zp[1]:17 , -Potential registers zp[2]:9 [ irq_line::bar#0 ] : zp[2]:9 , +Statement [1] BRAM = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] BROM = 4 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [3] hstart = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [4] hstop = (char)$280/4 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [5] vstart = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [6] vstop = (char)$1e0/2 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [7] cnt = 2 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [8] sin_idx = $64 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [12] *VERA_CTRL = *VERA_CTRL | VERA_DCSEL [ hstart hstop vstart vstop cnt sin_idx ] ( [ hstart hstop vstart vstop cnt sin_idx ] { } ) always clobbers reg byte a +Statement [13] *VERA_DC_HSTART = hstart [ hstart hstop vstart vstop cnt sin_idx ] ( [ hstart hstop vstart vstop cnt sin_idx ] { } ) always clobbers reg byte a +Statement [14] *VERA_DC_HSTOP = hstop [ hstart hstop vstart vstop cnt sin_idx ] ( [ hstart hstop vstart vstop cnt sin_idx ] { } ) always clobbers reg byte a +Statement [15] *VERA_DC_VSTART = vstart [ hstart hstop vstart vstop cnt sin_idx ] ( [ hstart hstop vstart vstop cnt sin_idx ] { } ) always clobbers reg byte a +Statement [16] *VERA_DC_VSTOP = vstop [ hstart hstop vstart vstop cnt sin_idx ] ( [ hstart hstop vstart vstop cnt sin_idx ] { } ) always clobbers reg byte a +Statement [17] *VERA_CTRL = *VERA_CTRL & ~VERA_DCSEL [ hstart hstop vstart vstop cnt sin_idx ] ( [ hstart hstop vstart vstop cnt sin_idx ] { } ) always clobbers reg byte a +Statement [21] if(cnt!=0) goto irq_line::@1 [ hstart hstop vstart vstop sin_idx ] ( [ hstart hstop vstart vstop sin_idx ] { } ) always clobbers reg byte a +Statement [22] cnt = 2 [ hstart hstop vstart vstop sin_idx ] ( [ hstart hstop vstart vstop sin_idx ] { } ) always clobbers reg byte a +Statement [23] if(hstart>=(char)$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 [34] *VERA_ISR = VERA_LINE [ ] ( [ ] { } ) always clobbers reg byte a +Statement [36] 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]:39 [ irq_line::b#2 irq_line::b#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:43 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] +Statement [39] 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 [41] 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]:34 [ irq_line::i2#2 irq_line::i2#1 ] +Statement [43] *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]:40 [ irq_line::l#2 irq_line::l#1 ] +Statement [46] *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 [55] *KERNEL_IRQ = &irq_line [ ] ( main:10 [ ] { } ) always clobbers reg byte a +Statement [56] *VERA_IEN = VERA_LINE [ ] ( main:10 [ ] { } ) always clobbers reg byte a +Statement [57] *VERA_IRQLINE_L = 5 [ ] ( main:10 [ ] { } ) always clobbers reg byte a +Statement [62] if(memset::dst#2!=memset::end#0) goto memset::@2 [ memset::dst#2 ] ( memset:29 [ sin_idx memset::dst#2 ] { } ) always clobbers reg byte a +Statement [64] *memset::dst#2 = memset::c#0 [ memset::dst#2 ] ( memset:29 [ sin_idx memset::dst#2 ] { } ) always clobbers reg byte a reg byte y +Statement [1] BRAM = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] BROM = 4 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [3] hstart = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [4] hstop = (char)$280/4 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [5] vstart = 0 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [6] vstop = (char)$1e0/2 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [7] cnt = 2 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [8] sin_idx = $64 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [12] *VERA_CTRL = *VERA_CTRL | VERA_DCSEL [ hstart hstop vstart vstop cnt sin_idx ] ( [ hstart hstop vstart vstop cnt sin_idx ] { } ) always clobbers reg byte a +Statement [13] *VERA_DC_HSTART = hstart [ hstart hstop vstart vstop cnt sin_idx ] ( [ hstart hstop vstart vstop cnt sin_idx ] { } ) always clobbers reg byte a +Statement [14] *VERA_DC_HSTOP = hstop [ hstart hstop vstart vstop cnt sin_idx ] ( [ hstart hstop vstart vstop cnt sin_idx ] { } ) always clobbers reg byte a +Statement [15] *VERA_DC_VSTART = vstart [ hstart hstop vstart vstop cnt sin_idx ] ( [ hstart hstop vstart vstop cnt sin_idx ] { } ) always clobbers reg byte a +Statement [16] *VERA_DC_VSTOP = vstop [ hstart hstop vstart vstop cnt sin_idx ] ( [ hstart hstop vstart vstop cnt sin_idx ] { } ) always clobbers reg byte a +Statement [17] *VERA_CTRL = *VERA_CTRL & ~VERA_DCSEL [ hstart hstop vstart vstop cnt sin_idx ] ( [ hstart hstop vstart vstop cnt sin_idx ] { } ) always clobbers reg byte a +Statement [21] if(cnt!=0) goto irq_line::@1 [ hstart hstop vstart vstop sin_idx ] ( [ hstart hstop vstart vstop sin_idx ] { } ) always clobbers reg byte a +Statement [22] cnt = 2 [ hstart hstop vstart vstop sin_idx ] ( [ hstart hstop vstart vstop sin_idx ] { } ) always clobbers reg byte a +Statement [23] if(hstart>=(char)$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 [34] *VERA_ISR = VERA_LINE [ ] ( [ ] { } ) always clobbers reg byte a +Statement [36] 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 [39] 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 [41] 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 [43] *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 [46] *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 [55] *KERNEL_IRQ = &irq_line [ ] ( main:10 [ ] { } ) always clobbers reg byte a +Statement [56] *VERA_IEN = VERA_LINE [ ] ( main:10 [ ] { } ) always clobbers reg byte a +Statement [57] *VERA_IRQLINE_L = 5 [ ] ( main:10 [ ] { } ) always clobbers reg byte a +Statement [62] if(memset::dst#2!=memset::end#0) goto memset::@2 [ memset::dst#2 ] ( memset:29 [ sin_idx memset::dst#2 ] { } ) always clobbers reg byte a +Statement [64] *memset::dst#2 = memset::c#0 [ memset::dst#2 ] ( memset:29 [ sin_idx memset::dst#2 ] { } ) always clobbers reg byte a reg byte y +Potential registers zp[1]:40 [ irq_line::l#2 irq_line::l#1 ] : zp[1]:40 , reg byte x , reg byte y , +Potential registers zp[1]:39 [ irq_line::b#2 irq_line::b#1 ] : zp[1]:39 , reg byte x , reg byte y , +Potential registers zp[1]:43 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] : zp[1]:43 , reg byte x , reg byte y , +Potential registers zp[1]:34 [ irq_line::i2#2 irq_line::i2#1 ] : zp[1]:34 , reg byte x , reg byte y , +Potential registers zp[1]:35 [ irq_line::i#2 irq_line::i#1 ] : zp[1]:35 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:36 [ irq_line::i1#2 irq_line::i1#1 ] : zp[1]:36 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:37 [ memset::dst#2 memset::dst#1 ] : zp[2]:37 , +Potential registers zp[1]:0 [ BRAM ] : zp[1]:0 , +Potential registers zp[1]:1 [ BROM ] : zp[1]:1 , +Potential registers zp[1]:45 [ hstart ] : zp[1]:45 , +Potential registers zp[1]:46 [ hstop ] : zp[1]:46 , +Potential registers zp[1]:47 [ vstart ] : zp[1]:47 , +Potential registers zp[1]:48 [ vstop ] : zp[1]:48 , +Potential registers zp[1]:44 [ cnt ] : zp[1]:44 , +Potential registers zp[1]:49 [ sin_idx ] : zp[1]:49 , +Potential registers zp[2]:41 [ irq_line::bar#0 ] : zp[2]:41 , REGISTER UPLIFT SCOPES -Uplift Scope [irq_line] 370.33: zp[1]:2 [ irq_line::i2#2 irq_line::i2#1 ] 353.5: zp[1]:3 [ irq_line::i#2 irq_line::i#1 ] 353.5: zp[1]:4 [ irq_line::i1#2 irq_line::i1#1 ] 26.12: zp[1]:7 [ irq_line::b#2 irq_line::b#1 ] 26: zp[1]:8 [ irq_line::l#2 irq_line::l#1 ] 22.4: zp[2]:9 [ irq_line::bar#0 ] 18: zp[1]:11 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] -Uplift Scope [memset] 336.67: zp[2]:5 [ memset::dst#2 memset::dst#1 ] -Uplift Scope [] 0.53: zp[1]:12 [ cnt ] 0.45: zp[1]:13 [ hstart ] 0.35: zp[1]:14 [ hstop ] 0.33: zp[1]:15 [ vstart ] 0.32: zp[1]:16 [ vstop ] 0.28: zp[1]:17 [ sin_idx ] -Uplift Scope [VERA_SPRITE] +Uplift Scope [irq_line] 370.33: zp[1]:34 [ irq_line::i2#2 irq_line::i2#1 ] 353.5: zp[1]:35 [ irq_line::i#2 irq_line::i#1 ] 353.5: zp[1]:36 [ irq_line::i1#2 irq_line::i1#1 ] 26.12: zp[1]:39 [ irq_line::b#2 irq_line::b#1 ] 26: zp[1]:40 [ irq_line::l#2 irq_line::l#1 ] 22.4: zp[2]:41 [ irq_line::bar#0 ] 18: zp[1]:43 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] +Uplift Scope [memset] 336.67: zp[2]:37 [ memset::dst#2 memset::dst#1 ] +Uplift Scope [] 20: zp[1]:0 [ BRAM ] 20: zp[1]:1 [ BROM ] 0.53: zp[1]:44 [ cnt ] 0.45: zp[1]:45 [ hstart ] 0.35: zp[1]:46 [ hstop ] 0.33: zp[1]:47 [ vstart ] 0.32: zp[1]:48 [ vstop ] 0.28: zp[1]:49 [ sin_idx ] Uplift Scope [MOS6522_VIA] +Uplift Scope [RADIX] +Uplift Scope [VERA_SPRITE] Uplift Scope [main] Uplift Scope [__start] -Uplifting [irq_line] best 8201 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]:8 [ irq_line::l#2 irq_line::l#1 ] zp[2]:9 [ irq_line::bar#0 ] zp[1]:11 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] +Uplifting [irq_line] best 8211 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]:40 [ irq_line::l#2 irq_line::l#1 ] zp[2]:41 [ irq_line::bar#0 ] zp[1]:43 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] Limited combination testing to 100 combinations of 1296 possible. -Uplifting [memset] best 8201 combination zp[2]:5 [ memset::dst#2 memset::dst#1 ] -Uplifting [] best 8201 combination zp[1]:12 [ cnt ] zp[1]:13 [ hstart ] zp[1]:14 [ hstop ] zp[1]:15 [ vstart ] zp[1]:16 [ vstop ] zp[1]:17 [ sin_idx ] -Uplifting [VERA_SPRITE] best 8201 combination -Uplifting [MOS6522_VIA] best 8201 combination -Uplifting [main] best 8201 combination -Uplifting [__start] best 8201 combination -Attempting to uplift remaining variables inzp[1]:8 [ irq_line::l#2 irq_line::l#1 ] -Uplifting [irq_line] best 8081 combination reg byte x [ irq_line::l#2 irq_line::l#1 ] -Attempting to uplift remaining variables inzp[1]:11 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] -Uplifting [irq_line] best 8081 combination zp[1]:11 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] -Attempting to uplift remaining variables inzp[1]:12 [ cnt ] -Uplifting [] best 8081 combination zp[1]:12 [ cnt ] -Attempting to uplift remaining variables inzp[1]:13 [ hstart ] -Uplifting [] best 8081 combination zp[1]:13 [ hstart ] -Attempting to uplift remaining variables inzp[1]:14 [ hstop ] -Uplifting [] best 8081 combination zp[1]:14 [ hstop ] -Attempting to uplift remaining variables inzp[1]:15 [ vstart ] -Uplifting [] best 8081 combination zp[1]:15 [ vstart ] -Attempting to uplift remaining variables inzp[1]:16 [ vstop ] -Uplifting [] best 8081 combination zp[1]:16 [ vstop ] -Attempting to uplift remaining variables inzp[1]:17 [ sin_idx ] -Uplifting [] best 8081 combination zp[1]:17 [ sin_idx ] -Coalescing zero page register [ zp[2]:9 [ irq_line::bar#0 ] ] with [ zp[2]:5 [ memset::dst#2 memset::dst#1 ] ] -Allocated (was zp[2]:9) zp[2]:2 [ irq_line::bar#0 memset::dst#2 memset::dst#1 ] -Allocated (was zp[1]:11) zp[1]:4 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] -Allocated (was zp[1]:12) zp[1]:5 [ cnt ] -Allocated (was zp[1]:13) zp[1]:6 [ hstart ] -Allocated (was zp[1]:14) zp[1]:7 [ hstop ] -Allocated (was zp[1]:15) zp[1]:8 [ vstart ] -Allocated (was zp[1]:16) zp[1]:9 [ vstop ] -Allocated (was zp[1]:17) zp[1]:10 [ sin_idx ] +Uplifting [memset] best 8211 combination zp[2]:37 [ memset::dst#2 memset::dst#1 ] +Uplifting [] best 8211 combination zp[1]:0 [ BRAM ] zp[1]:1 [ BROM ] zp[1]:44 [ cnt ] zp[1]:45 [ hstart ] zp[1]:46 [ hstop ] zp[1]:47 [ vstart ] zp[1]:48 [ vstop ] zp[1]:49 [ sin_idx ] +Uplifting [MOS6522_VIA] best 8211 combination +Uplifting [RADIX] best 8211 combination +Uplifting [VERA_SPRITE] best 8211 combination +Uplifting [main] best 8211 combination +Uplifting [__start] best 8211 combination +Attempting to uplift remaining variables inzp[1]:40 [ irq_line::l#2 irq_line::l#1 ] +Uplifting [irq_line] best 8091 combination reg byte x [ irq_line::l#2 irq_line::l#1 ] +Attempting to uplift remaining variables inzp[1]:0 [ BRAM ] +Uplifting [] best 8091 combination zp[1]:0 [ BRAM ] +Attempting to uplift remaining variables inzp[1]:1 [ BROM ] +Uplifting [] best 8091 combination zp[1]:1 [ BROM ] +Attempting to uplift remaining variables inzp[1]:43 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] +Uplifting [irq_line] best 8091 combination zp[1]:43 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] +Attempting to uplift remaining variables inzp[1]:44 [ cnt ] +Uplifting [] best 8091 combination zp[1]:44 [ cnt ] +Attempting to uplift remaining variables inzp[1]:45 [ hstart ] +Uplifting [] best 8091 combination zp[1]:45 [ hstart ] +Attempting to uplift remaining variables inzp[1]:46 [ hstop ] +Uplifting [] best 8091 combination zp[1]:46 [ hstop ] +Attempting to uplift remaining variables inzp[1]:47 [ vstart ] +Uplifting [] best 8091 combination zp[1]:47 [ vstart ] +Attempting to uplift remaining variables inzp[1]:48 [ vstop ] +Uplifting [] best 8091 combination zp[1]:48 [ vstop ] +Attempting to uplift remaining variables inzp[1]:49 [ sin_idx ] +Uplifting [] best 8091 combination zp[1]:49 [ sin_idx ] +Coalescing zero page register [ zp[2]:41 [ irq_line::bar#0 ] ] with [ zp[2]:37 [ memset::dst#2 memset::dst#1 ] ] +Allocated (was zp[2]:41) zp[2]:34 [ irq_line::bar#0 memset::dst#2 memset::dst#1 ] +Allocated (was zp[1]:43) zp[1]:36 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] +Allocated (was zp[1]:44) zp[1]:37 [ cnt ] +Allocated (was zp[1]:45) zp[1]:38 [ hstart ] +Allocated (was zp[1]:46) zp[1]:39 [ hstop ] +Allocated (was zp[1]:47) zp[1]:40 [ vstart ] +Allocated (was zp[1]:48) zp[1]:41 [ vstop ] +Allocated (was zp[1]:49) zp[1]:42 [ sin_idx ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -906,7 +1027,7 @@ ASSEMBLER BEFORE OPTIMIZATION // Displays raster bars in the border // Upstart .cpu _65c02 - // Commodore 64 PRG executable file + // Commander X16 PRG executable file .file [name="cx16-rasterbars.prg", type="prg", segments="Program"] .segmentdef Program [segments="Basic, Code, Data"] .segmentdef Basic [start=$0801] @@ -914,10 +1035,14 @@ ASSEMBLER BEFORE OPTIMIZATION .segmentdef Data [startAfter="Code"] .segment Basic :BasicUpstart(__start) + // Global Constants & labels .const VERA_DCSEL = 2 .const VERA_LINE = 2 + .const isr_vsync = $314 .const SIZEOF_CHAR = 1 + /// $0314 (RAM) IRQ vector - The vector used when the KERNAL serves IRQ interrupts + .label KERNEL_IRQ = $314 /// $9F25 CTRL Control /// Bit 7: Reset /// Bit 1: DCSEL @@ -954,173 +1079,179 @@ ASSEMBLER BEFORE OPTIMIZATION .label VERA_DC_VSTART = $9f2b /// $9F2C DC_VSTOP (DCSEL=1) Active Display V-Stop (8:1) .label VERA_DC_VSTOP = $9f2c - /// $0314 (RAM) IRQ vector - The vector used when the KERNAL serves IRQ interrupts - .label KERNEL_IRQ = $314 + .label BRAM = 0 + .label BROM = 1 // The horizontal start - .label hstart = 6 + .label hstart = $26 // The horizontal stop - .label hstop = 7 + .label hstop = $27 // The vertical start - .label vstart = 8 + .label vstart = $28 // The vertical stop - .label vstop = 9 + .label vstop = $29 // The countdown - .label cnt = 5 + .label cnt = $25 // The sin idx - .label sin_idx = $a + .label sin_idx = $2a .segment Code // __start __start: { jmp __init1 // __start::__init1 __init1: - // [1] hstart = 0 -- vbuz1=vbuc1 + // [1] BRAM = 0 -- vbuz1=vbuc1 + lda #0 + sta.z BRAM + // [2] BROM = 4 -- vbuz1=vbuc1 + lda #4 + sta.z BROM + // [3] hstart = 0 -- vbuz1=vbuc1 lda #0 sta.z hstart - // [2] hstop = (char)$280/4 -- vbuz1=vbuc1 + // [4] hstop = (char)$280/4 -- vbuz1=vbuc1 lda #$280/4 sta.z hstop - // [3] vstart = 0 -- vbuz1=vbuc1 + // [5] vstart = 0 -- vbuz1=vbuc1 lda #0 sta.z vstart - // [4] vstop = (char)$1e0/2 -- vbuz1=vbuc1 + // [6] vstop = (char)$1e0/2 -- vbuz1=vbuc1 lda #$1e0/2 sta.z vstop - // [5] cnt = 2 -- vbuz1=vbuc1 + // [7] cnt = 2 -- vbuz1=vbuc1 lda #2 sta.z cnt - // [6] sin_idx = $64 -- vbuz1=vbuc1 + // [8] sin_idx = $64 -- vbuz1=vbuc1 lda #$64 sta.z sin_idx - // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // [9] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [8] call main - // [51] phi from __start::@1 to main [phi:__start::@1->main] + // [10] call main + // [53] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn // __start::@return __breturn: - // [9] return + // [11] return rts } // irq_line // LINE Interrupt Routine irq_line: { - .label idx = 4 - .label bar = 2 + .label idx = $24 + .label bar = $22 // interrupt(isr_rom_min_cx16_entry) -- isr_rom_min_cx16_entry - // [10] *VERA_CTRL = *VERA_CTRL | VERA_DCSEL -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 + // [12] *VERA_CTRL = *VERA_CTRL | VERA_DCSEL -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // Update the border lda #VERA_DCSEL ora VERA_CTRL sta VERA_CTRL - // [11] *VERA_DC_HSTART = hstart -- _deref_pbuc1=vbuz1 + // [13] *VERA_DC_HSTART = hstart -- _deref_pbuc1=vbuz1 lda.z hstart sta VERA_DC_HSTART - // [12] *VERA_DC_HSTOP = hstop -- _deref_pbuc1=vbuz1 + // [14] *VERA_DC_HSTOP = hstop -- _deref_pbuc1=vbuz1 lda.z hstop sta VERA_DC_HSTOP - // [13] *VERA_DC_VSTART = vstart -- _deref_pbuc1=vbuz1 + // [15] *VERA_DC_VSTART = vstart -- _deref_pbuc1=vbuz1 lda.z vstart sta VERA_DC_VSTART - // [14] *VERA_DC_VSTOP = vstop -- _deref_pbuc1=vbuz1 + // [16] *VERA_DC_VSTOP = vstop -- _deref_pbuc1=vbuz1 lda.z vstop sta VERA_DC_VSTOP - // [15] *VERA_CTRL = *VERA_CTRL & ~VERA_DCSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 + // [17] *VERA_CTRL = *VERA_CTRL & ~VERA_DCSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Show color raster bars in the border lda #VERA_DCSEL^$ff and VERA_CTRL sta VERA_CTRL - // [16] phi from irq_line to irq_line::@2 [phi:irq_line->irq_line::@2] + // [18] phi from irq_line to irq_line::@2 [phi:irq_line->irq_line::@2] __b2_from_irq_line: - // [16] phi irq_line::l#2 = 0 [phi:irq_line->irq_line::@2#0] -- vbuxx=vbuc1 + // [18] phi irq_line::l#2 = 0 [phi:irq_line->irq_line::@2#0] -- vbuxx=vbuc1 ldx #0 jmp __b2 // irq_line::@2 __b2: - // [17] if(irq_line::l#2!=$e6) goto irq_line::@3 -- vbuxx_neq_vbuc1_then_la1 + // [19] if(irq_line::l#2!=$e6) goto irq_line::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #$e6 bne __b3 jmp __b4 // irq_line::@4 __b4: - // [18] cnt = -- cnt -- vbuz1=_dec_vbuz1 + // [20] cnt = -- cnt -- vbuz1=_dec_vbuz1 dec.z cnt - // [19] if(cnt!=0) goto irq_line::@1 -- vbuz1_neq_0_then_la1 + // [21] if(cnt!=0) goto irq_line::@1 -- vbuz1_neq_0_then_la1 lda.z cnt bne __b1_from___b4 jmp __b11 // irq_line::@11 __b11: - // [20] cnt = 2 -- vbuz1=vbuc1 + // [22] cnt = 2 -- vbuz1=vbuc1 lda #2 sta.z cnt - // [21] if(hstart>=(char)$140/4+1) goto irq_line::@1 -- vbuz1_ge_vbuc1_then_la1 + // [23] if(hstart>=(char)$140/4+1) goto irq_line::@1 -- vbuz1_ge_vbuc1_then_la1 lda.z hstart cmp #$140/4+1 bcs __b1_from___b11 jmp __b12 // irq_line::@12 __b12: - // [22] hstart = ++ hstart -- vbuz1=_inc_vbuz1 + // [24] hstart = ++ hstart -- vbuz1=_inc_vbuz1 inc.z hstart - // [23] hstop = -- hstop -- vbuz1=_dec_vbuz1 + // [25] hstop = -- hstop -- vbuz1=_dec_vbuz1 dec.z hstop - // [24] vstart = ++ vstart -- vbuz1=_inc_vbuz1 + // [26] vstart = ++ vstart -- vbuz1=_inc_vbuz1 inc.z vstart - // [25] vstop = -- vstop -- vbuz1=_dec_vbuz1 + // [27] vstop = -- vstop -- vbuz1=_dec_vbuz1 dec.z vstop - // [26] phi from irq_line::@11 irq_line::@12 irq_line::@4 to irq_line::@1 [phi:irq_line::@11/irq_line::@12/irq_line::@4->irq_line::@1] + // [28] phi from irq_line::@11 irq_line::@12 irq_line::@4 to irq_line::@1 [phi:irq_line::@11/irq_line::@12/irq_line::@4->irq_line::@1] __b1_from___b11: __b1_from___b12: __b1_from___b4: jmp __b1 // irq_line::@1 __b1: - // [27] call memset + // [29] call memset // Animate the bars - // [58] phi from irq_line::@1 to memset [phi:irq_line::@1->memset] + // [60] phi from irq_line::@1 to memset [phi:irq_line::@1->memset] memset_from___b1: jsr memset jmp __b19 // irq_line::@19 __b19: - // [28] irq_line::idx#0 = sin_idx -- vbuz1=vbuz2 + // [30] irq_line::idx#0 = sin_idx -- vbuz1=vbuz2 lda.z sin_idx sta.z idx - // [29] sin_idx = -- sin_idx -- vbuz1=_dec_vbuz1 + // [31] sin_idx = -- sin_idx -- vbuz1=_dec_vbuz1 dec.z sin_idx - // [30] phi from irq_line::@19 to irq_line::@13 [phi:irq_line::@19->irq_line::@13] + // [32] phi from irq_line::@19 to irq_line::@13 [phi:irq_line::@19->irq_line::@13] __b13_from___b19: - // [30] phi irq_line::idx#2 = irq_line::idx#0 [phi:irq_line::@19->irq_line::@13#0] -- register_copy - // [30] phi irq_line::b#2 = 0 [phi:irq_line::@19->irq_line::@13#1] -- vbuxx=vbuc1 + // [32] phi irq_line::idx#2 = irq_line::idx#0 [phi:irq_line::@19->irq_line::@13#0] -- register_copy + // [32] phi irq_line::b#2 = 0 [phi:irq_line::@19->irq_line::@13#1] -- vbuxx=vbuc1 ldx #0 jmp __b13 // irq_line::@13 __b13: - // [31] if(irq_line::b#2<8) goto irq_line::@14 -- vbuxx_lt_vbuc1_then_la1 + // [33] if(irq_line::b#2<8) goto irq_line::@14 -- vbuxx_lt_vbuc1_then_la1 cpx #8 bcc __b14 jmp __b15 // irq_line::@15 __b15: - // [32] *VERA_ISR = VERA_LINE -- _deref_pbuc1=vbuc2 + // [34] *VERA_ISR = VERA_LINE -- _deref_pbuc1=vbuc2 // Reset the LINE interrupt lda #VERA_LINE sta VERA_ISR jmp __breturn // irq_line::@return __breturn: - // [33] return + // [35] return // interrupt(isr_rom_min_cx16_exit) -- isr_rom_min_cx16_exit jmp $e049 // irq_line::@14 __b14: - // [34] irq_line::bar#0 = BARS + SIN[irq_line::idx#2] -- pbuz1=pbuc1_plus_pbuc2_derefidx_vbuz2 + // [36] irq_line::bar#0 = BARS + SIN[irq_line::idx#2] -- pbuz1=pbuc1_plus_pbuc2_derefidx_vbuz2 ldy.z idx lda SIN,y clc @@ -1129,72 +1260,72 @@ irq_line: { lda #>BARS adc #0 sta.z bar+1 - // [35] phi from irq_line::@14 to irq_line::@16 [phi:irq_line::@14->irq_line::@16] + // [37] phi from irq_line::@14 to irq_line::@16 [phi:irq_line::@14->irq_line::@16] __b16_from___b14: - // [35] phi irq_line::i2#2 = 0 [phi:irq_line::@14->irq_line::@16#0] -- vbuyy=vbuc1 + // [37] phi irq_line::i2#2 = 0 [phi:irq_line::@14->irq_line::@16#0] -- vbuyy=vbuc1 ldy #0 jmp __b16 // irq_line::@16 __b16: - // [36] if(irq_line::i2#2<$20*SIZEOF_CHAR) goto irq_line::@17 -- vbuyy_lt_vbuc1_then_la1 + // [38] if(irq_line::i2#2<$20*SIZEOF_CHAR) goto irq_line::@17 -- vbuyy_lt_vbuc1_then_la1 cpy #$20*SIZEOF_CHAR bcc __b17 jmp __b18 // irq_line::@18 __b18: - // [37] irq_line::idx#1 = irq_line::idx#2 + $d -- vbuz1=vbuz1_plus_vbuc1 + // [39] irq_line::idx#1 = irq_line::idx#2 + $d -- vbuz1=vbuz1_plus_vbuc1 lda #$d clc adc.z idx sta.z idx - // [38] irq_line::b#1 = ++ irq_line::b#2 -- vbuxx=_inc_vbuxx + // [40] 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] + // [32] phi from irq_line::@18 to irq_line::@13 [phi:irq_line::@18->irq_line::@13] __b13_from___b18: - // [30] phi irq_line::idx#2 = irq_line::idx#1 [phi:irq_line::@18->irq_line::@13#0] -- register_copy - // [30] phi irq_line::b#2 = irq_line::b#1 [phi:irq_line::@18->irq_line::@13#1] -- register_copy + // [32] phi irq_line::idx#2 = irq_line::idx#1 [phi:irq_line::@18->irq_line::@13#0] -- register_copy + // [32] phi irq_line::b#2 = irq_line::b#1 [phi:irq_line::@18->irq_line::@13#1] -- register_copy jmp __b13 // irq_line::@17 __b17: - // [39] irq_line::bar#0[irq_line::i2#2] = BAR[irq_line::i2#2] -- pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuyy + // [41] 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 - // [40] irq_line::i2#1 = ++ irq_line::i2#2 -- vbuyy=_inc_vbuyy + // [42] irq_line::i2#1 = ++ irq_line::i2#2 -- vbuyy=_inc_vbuyy iny - // [35] phi from irq_line::@17 to irq_line::@16 [phi:irq_line::@17->irq_line::@16] + // [37] phi from irq_line::@17 to irq_line::@16 [phi:irq_line::@17->irq_line::@16] __b16_from___b17: - // [35] phi irq_line::i2#2 = irq_line::i2#1 [phi:irq_line::@17->irq_line::@16#0] -- register_copy + // [37] 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: - // [41] *VERA_DC_BORDER = BARS[irq_line::l#2] -- _deref_pbuc1=pbuc2_derefidx_vbuxx + // [43] *VERA_DC_BORDER = BARS[irq_line::l#2] -- _deref_pbuc1=pbuc2_derefidx_vbuxx lda BARS,x sta VERA_DC_BORDER - // [42] phi from irq_line::@3 to irq_line::@5 [phi:irq_line::@3->irq_line::@5] + // [44] phi from irq_line::@3 to irq_line::@5 [phi:irq_line::@3->irq_line::@5] __b5_from___b3: - // [42] phi irq_line::i#2 = 0 [phi:irq_line::@3->irq_line::@5#0] -- vbuaa=vbuc1 + // [44] phi irq_line::i#2 = 0 [phi:irq_line::@3->irq_line::@5#0] -- vbuaa=vbuc1 lda #0 jmp __b5 // irq_line::@5 __b5: - // [43] if(irq_line::i#2<$18) goto irq_line::@6 -- vbuaa_lt_vbuc1_then_la1 + // [45] 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: - // [44] *VERA_DC_BORDER = 0 -- _deref_pbuc1=vbuc2 + // [46] *VERA_DC_BORDER = 0 -- _deref_pbuc1=vbuc2 // Wait exactly long enough to go to the next raster line lda #0 sta VERA_DC_BORDER - // [45] phi from irq_line::@7 to irq_line::@8 [phi:irq_line::@7->irq_line::@8] + // [47] phi from irq_line::@7 to irq_line::@8 [phi:irq_line::@7->irq_line::@8] __b8_from___b7: - // [45] phi irq_line::i1#2 = 0 [phi:irq_line::@7->irq_line::@8#0] -- vbuaa=vbuc1 + // [47] phi irq_line::i1#2 = 0 [phi:irq_line::@7->irq_line::@8#0] -- vbuaa=vbuc1 lda #0 jmp __b8 // irq_line::@8 __b8: - // [46] if(irq_line::i1#2<$17) goto irq_line::@9 -- vbuaa_lt_vbuc1_then_la1 + // [48] if(irq_line::i1#2<$17) goto irq_line::@9 -- vbuaa_lt_vbuc1_then_la1 cmp #$17 bcc __b9 jmp __b10 @@ -1204,27 +1335,27 @@ irq_line: { // Wait exactly long enough to go to the next raster line nop nop - // [48] irq_line::l#1 = ++ irq_line::l#2 -- vbuxx=_inc_vbuxx + // [50] 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] + // [18] phi from irq_line::@10 to irq_line::@2 [phi:irq_line::@10->irq_line::@2] __b2_from___b10: - // [16] phi irq_line::l#2 = irq_line::l#1 [phi:irq_line::@10->irq_line::@2#0] -- register_copy + // [18] phi irq_line::l#2 = irq_line::l#1 [phi:irq_line::@10->irq_line::@2#0] -- register_copy jmp __b2 // irq_line::@9 __b9: - // [49] irq_line::i1#1 = ++ irq_line::i1#2 -- vbuaa=_inc_vbuaa + // [51] irq_line::i1#1 = ++ irq_line::i1#2 -- vbuaa=_inc_vbuaa inc - // [45] phi from irq_line::@9 to irq_line::@8 [phi:irq_line::@9->irq_line::@8] + // [47] phi from irq_line::@9 to irq_line::@8 [phi:irq_line::@9->irq_line::@8] __b8_from___b9: - // [45] phi irq_line::i1#2 = irq_line::i1#1 [phi:irq_line::@9->irq_line::@8#0] -- register_copy + // [47] 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: - // [50] irq_line::i#1 = ++ irq_line::i#2 -- vbuaa=_inc_vbuaa + // [52] irq_line::i#1 = ++ irq_line::i#2 -- vbuaa=_inc_vbuaa inc - // [42] phi from irq_line::@6 to irq_line::@5 [phi:irq_line::@6->irq_line::@5] + // [44] phi from irq_line::@6 to irq_line::@5 [phi:irq_line::@6->irq_line::@5] __b5_from___b6: - // [42] phi irq_line::i#2 = irq_line::i#1 [phi:irq_line::@6->irq_line::@5#0] -- register_copy + // [44] phi irq_line::i#2 = irq_line::i#1 [phi:irq_line::@6->irq_line::@5#0] -- register_copy jmp __b5 } // main @@ -1237,15 +1368,15 @@ main: { jmp __b2 // main::@2 __b2: - // [53] *KERNEL_IRQ = &irq_line -- _deref_qprc1=pprc2 + // [55] *KERNEL_IRQ = &irq_line -- _deref_qprc1=pprc2 lda #irq_line sta KERNEL_IRQ+1 - // [54] *VERA_IEN = VERA_LINE -- _deref_pbuc1=vbuc2 + // [56] *VERA_IEN = VERA_LINE -- _deref_pbuc1=vbuc2 lda #VERA_LINE sta VERA_IEN - // [55] *VERA_IRQLINE_L = 5 -- _deref_pbuc1=vbuc2 + // [57] *VERA_IRQLINE_L = 5 -- _deref_pbuc1=vbuc2 lda #5 sta VERA_IRQLINE_L jmp CLI1 @@ -1253,7 +1384,7 @@ main: { CLI1: // asm { cli } cli - // [57] phi from main::@1 main::CLI1 to main::@1 [phi:main::@1/main::CLI1->main::@1] + // [59] phi from main::@1 main::CLI1 to main::@1 [phi:main::@1/main::CLI1->main::@1] __b1_from___b1: __b1_from_CLI1: jmp __b1 @@ -1269,10 +1400,10 @@ memset: { .const c = 0 .label str = BARS .label end = str+num - .label dst = 2 - // [59] phi from memset to memset::@1 [phi:memset->memset::@1] + .label dst = $22 + // [61] phi from memset to memset::@1 [phi:memset->memset::@1] __b1_from_memset: - // [59] phi memset::dst#2 = (char *)memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [61] phi memset::dst#2 = (char *)memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str @@ -1280,7 +1411,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [60] if(memset::dst#2!=memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [62] if(memset::dst#2!=memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z dst+1 cmp #>end bne __b2 @@ -1290,22 +1421,22 @@ memset: { jmp __breturn // memset::@return __breturn: - // [61] return + // [63] return rts // memset::@2 __b2: - // [62] *memset::dst#2 = memset::c#0 -- _deref_pbuz1=vbuc1 + // [64] *memset::dst#2 = memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [63] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 + // [65] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: - // [59] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] + // [61] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] __b1_from___b2: - // [59] phi memset::dst#2 = memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + // [61] phi memset::dst#2 = memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // File Data @@ -1392,7 +1523,13 @@ Succesful ASM optimization Pass5UnnecesaryLoadElimination FINAL SYMBOL TABLE __constant char BAR[$20] = { $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $1a, $1b, $1c, $1d, $1e, $1f, $1f, $1e, $1d, $1c, $1b, $1a, $19, $18, $17, $16, $15, $14, $13, $12, $11, $10 } __constant char BARS[$e6] = { fill( $e6, 0) } +__loadstore volatile char BRAM // !zp[-1]:0 zp[1]:0 20.0 +__loadstore volatile char BROM // !zp[-1]:1 zp[1]:1 20.0 __constant void (** const KERNEL_IRQ)() = (void (**)()) 788 +__constant char RADIX::BINARY = 2 +__constant char RADIX::DECIMAL = $a +__constant char RADIX::HEXADECIMAL = $10 +__constant char RADIX::OCTAL = 8 __constant char SIN[$100] = kickasm {{ .fill 256, 99+99*sin(i*2*PI/256) }} __constant char SIZEOF_CHAR = 1 @@ -1408,15 +1545,15 @@ __constant char * const VERA_IRQLINE_L = (char *) 40744 __constant char * const VERA_ISR = (char *) 40743 __constant const char VERA_LINE = 2 void __start() -__loadstore volatile char cnt // zp[1]:5 0.5263157894736842 -__loadstore volatile char hstart // zp[1]:6 0.4545454545454546 -__loadstore volatile char hstop // zp[1]:7 0.34782608695652173 +__loadstore volatile char cnt // zp[1]:37 0.5263157894736842 +__loadstore volatile char hstart // zp[1]:38 0.4545454545454546 +__loadstore volatile char hstop // zp[1]:39 0.34782608695652173 __interrupt(rom_min_cx16) void irq_line() char irq_line::b char irq_line::b#1 // reg byte x 22.0 char irq_line::b#2 // reg byte x 4.125 char *irq_line::bar -char *irq_line::bar#0 // bar zp[2]:2 22.4 +char *irq_line::bar#0 // bar zp[2]:34 22.4 char irq_line::i char irq_line::i#1 // reg byte a 202.0 char irq_line::i#2 // reg byte a 151.5 @@ -1427,19 +1564,21 @@ char irq_line::i2 char irq_line::i2#1 // reg byte y 202.0 char irq_line::i2#2 // reg byte y 168.33333333333331 char irq_line::idx -char irq_line::idx#0 // idx zp[1]:4 2.0 -char irq_line::idx#1 // idx zp[1]:4 11.0 -char irq_line::idx#2 // idx zp[1]:4 5.0 +char irq_line::idx#0 // idx zp[1]:36 2.0 +char irq_line::idx#1 // idx zp[1]:36 11.0 +char irq_line::idx#2 // idx zp[1]:36 5.0 char irq_line::l char irq_line::l#1 // reg byte x 22.0 char irq_line::l#2 // reg byte x 4.0 +unsigned int isr_vsync +__constant unsigned int isr_vsync#2 = $314 // isr_vsync void main() void * memset(void *str , char c , unsigned int num) char memset::c __constant char memset::c#0 = 0 // c char *memset::dst -char *memset::dst#1 // dst zp[2]:2 202.0 -char *memset::dst#2 // dst zp[2]:2 134.66666666666666 +char *memset::dst#1 // dst zp[2]:34 202.0 +char *memset::dst#2 // dst zp[2]:34 134.66666666666666 char *memset::end __constant char *memset::end#0 = (char *)memset::str#0+memset::num#0 // end unsigned int memset::num @@ -1447,34 +1586,36 @@ __constant unsigned int memset::num#0 = $e6*SIZEOF_CHAR // num void *memset::return void *memset::str __constant void *memset::str#0 = (void *)BARS // str -__loadstore volatile char sin_idx // zp[1]:10 0.27586206896551724 -__loadstore volatile char vstart // zp[1]:8 0.3333333333333333 -__loadstore volatile char vstop // zp[1]:9 0.32 +__loadstore volatile char sin_idx // zp[1]:42 0.27586206896551724 +__loadstore volatile char vstart // zp[1]:40 0.3333333333333333 +__loadstore volatile char vstop // zp[1]:41 0.32 reg byte x [ irq_line::l#2 irq_line::l#1 ] reg byte x [ irq_line::b#2 irq_line::b#1 ] -zp[1]:4 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] +zp[1]:36 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] 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 ] -zp[1]:6 [ hstart ] -zp[1]:7 [ hstop ] -zp[1]:8 [ vstart ] -zp[1]:9 [ vstop ] -zp[1]:5 [ cnt ] -zp[1]:10 [ sin_idx ] -zp[2]:2 [ irq_line::bar#0 memset::dst#2 memset::dst#1 ] +zp[1]:0 [ BRAM ] +zp[1]:1 [ BROM ] +zp[1]:38 [ hstart ] +zp[1]:39 [ hstop ] +zp[1]:40 [ vstart ] +zp[1]:41 [ vstop ] +zp[1]:37 [ cnt ] +zp[1]:42 [ sin_idx ] +zp[2]:34 [ irq_line::bar#0 memset::dst#2 memset::dst#1 ] FINAL ASSEMBLER -Score: 5784 +Score: 5794 // File Comments // Example program for the Commander X16 // Displays raster bars in the border // Upstart .cpu _65c02 - // Commodore 64 PRG executable file + // Commander X16 PRG executable file .file [name="cx16-rasterbars.prg", type="prg", segments="Program"] .segmentdef Program [segments="Basic, Code, Data"] .segmentdef Basic [start=$0801] @@ -1482,10 +1623,14 @@ Score: 5784 .segmentdef Data [startAfter="Code"] .segment Basic :BasicUpstart(__start) + // Global Constants & labels .const VERA_DCSEL = 2 .const VERA_LINE = 2 + .const isr_vsync = $314 .const SIZEOF_CHAR = 1 + /// $0314 (RAM) IRQ vector - The vector used when the KERNAL serves IRQ interrupts + .label KERNEL_IRQ = $314 /// $9F25 CTRL Control /// Bit 7: Reset /// Bit 1: DCSEL @@ -1522,170 +1667,178 @@ Score: 5784 .label VERA_DC_VSTART = $9f2b /// $9F2C DC_VSTOP (DCSEL=1) Active Display V-Stop (8:1) .label VERA_DC_VSTOP = $9f2c - /// $0314 (RAM) IRQ vector - The vector used when the KERNAL serves IRQ interrupts - .label KERNEL_IRQ = $314 + .label BRAM = 0 + .label BROM = 1 // The horizontal start - .label hstart = 6 + .label hstart = $26 // The horizontal stop - .label hstop = 7 + .label hstop = $27 // The vertical start - .label vstart = 8 + .label vstart = $28 // The vertical stop - .label vstop = 9 + .label vstop = $29 // The countdown - .label cnt = 5 + .label cnt = $25 // The sin idx - .label sin_idx = $a + .label sin_idx = $2a .segment Code // __start __start: { // __start::__init1 + // __export volatile __address(0x00) unsigned char BRAM = 0 + // [1] BRAM = 0 -- vbuz1=vbuc1 + lda #0 + sta.z BRAM + // __export volatile __address(0x01) unsigned char BROM = 4 + // [2] BROM = 4 -- vbuz1=vbuc1 + lda #4 + sta.z BROM // volatile char hstart = 0/4 - // [1] hstart = 0 -- vbuz1=vbuc1 + // [3] hstart = 0 -- vbuz1=vbuc1 lda #0 sta.z hstart // volatile char hstop = 640/4 - // [2] hstop = (char)$280/4 -- vbuz1=vbuc1 + // [4] hstop = (char)$280/4 -- vbuz1=vbuc1 lda #$280/4 sta.z hstop // volatile char vstart = 0/2 - // [3] vstart = 0 -- vbuz1=vbuc1 + // [5] vstart = 0 -- vbuz1=vbuc1 lda #0 sta.z vstart // volatile char vstop = 480/2 - // [4] vstop = (char)$1e0/2 -- vbuz1=vbuc1 + // [6] vstop = (char)$1e0/2 -- vbuz1=vbuc1 lda #$1e0/2 sta.z vstop // volatile char cnt = 2 - // [5] cnt = 2 -- vbuz1=vbuc1 + // [7] cnt = 2 -- vbuz1=vbuc1 lda #2 sta.z cnt // volatile char sin_idx = 100 - // [6] sin_idx = $64 -- vbuz1=vbuc1 + // [8] sin_idx = $64 -- vbuz1=vbuc1 lda #$64 sta.z sin_idx - // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // [9] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [8] call main - // [51] phi from __start::@1 to main [phi:__start::@1->main] + // [10] call main + // [53] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return - // [9] return + // [11] return rts } // irq_line // LINE Interrupt Routine irq_line: { - .label idx = 4 - .label bar = 2 + .label idx = $24 + .label bar = $22 // 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 + // [12] *VERA_CTRL = *VERA_CTRL | VERA_DCSEL -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // Update the border lda #VERA_DCSEL ora VERA_CTRL sta VERA_CTRL // *VERA_DC_HSTART = hstart - // [11] *VERA_DC_HSTART = hstart -- _deref_pbuc1=vbuz1 + // [13] *VERA_DC_HSTART = hstart -- _deref_pbuc1=vbuz1 lda.z hstart sta VERA_DC_HSTART // *VERA_DC_HSTOP = hstop - // [12] *VERA_DC_HSTOP = hstop -- _deref_pbuc1=vbuz1 + // [14] *VERA_DC_HSTOP = hstop -- _deref_pbuc1=vbuz1 lda.z hstop sta VERA_DC_HSTOP // *VERA_DC_VSTART = vstart - // [13] *VERA_DC_VSTART = vstart -- _deref_pbuc1=vbuz1 + // [15] *VERA_DC_VSTART = vstart -- _deref_pbuc1=vbuz1 lda.z vstart sta VERA_DC_VSTART // *VERA_DC_VSTOP = vstop - // [14] *VERA_DC_VSTOP = vstop -- _deref_pbuc1=vbuz1 + // [16] *VERA_DC_VSTOP = vstop -- _deref_pbuc1=vbuz1 lda.z vstop sta VERA_DC_VSTOP // *VERA_CTRL &= ~VERA_DCSEL - // [15] *VERA_CTRL = *VERA_CTRL & ~VERA_DCSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 + // [17] *VERA_CTRL = *VERA_CTRL & ~VERA_DCSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Show color raster bars in the border lda #VERA_DCSEL^$ff and VERA_CTRL sta VERA_CTRL - // [16] phi from irq_line to irq_line::@2 [phi:irq_line->irq_line::@2] - // [16] phi irq_line::l#2 = 0 [phi:irq_line->irq_line::@2#0] -- vbuxx=vbuc1 + // [18] phi from irq_line to irq_line::@2 [phi:irq_line->irq_line::@2] + // [18] phi irq_line::l#2 = 0 [phi:irq_line->irq_line::@2#0] -- vbuxx=vbuc1 ldx #0 // irq_line::@2 __b2: // for(char l=0;l!=230;l++) - // [17] if(irq_line::l#2!=$e6) goto irq_line::@3 -- vbuxx_neq_vbuc1_then_la1 + // [19] if(irq_line::l#2!=$e6) goto irq_line::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #$e6 bne __b3 // irq_line::@4 // if(--cnt==0) - // [18] cnt = -- cnt -- vbuz1=_dec_vbuz1 + // [20] cnt = -- cnt -- vbuz1=_dec_vbuz1 dec.z cnt - // [19] if(cnt!=0) goto irq_line::@1 -- vbuz1_neq_0_then_la1 + // [21] if(cnt!=0) goto irq_line::@1 -- vbuz1_neq_0_then_la1 lda.z cnt bne __b1 // irq_line::@11 // cnt = 2 - // [20] cnt = 2 -- vbuz1=vbuc1 + // [22] cnt = 2 -- vbuz1=vbuc1 lda #2 sta.z cnt // if(hstart<=320/4) - // [21] if(hstart>=(char)$140/4+1) goto irq_line::@1 -- vbuz1_ge_vbuc1_then_la1 + // [23] if(hstart>=(char)$140/4+1) goto irq_line::@1 -- vbuz1_ge_vbuc1_then_la1 lda.z hstart cmp #$140/4+1 bcs __b1 // irq_line::@12 // hstart++; - // [22] hstart = ++ hstart -- vbuz1=_inc_vbuz1 + // [24] hstart = ++ hstart -- vbuz1=_inc_vbuz1 inc.z hstart // hstop--; - // [23] hstop = -- hstop -- vbuz1=_dec_vbuz1 + // [25] hstop = -- hstop -- vbuz1=_dec_vbuz1 dec.z hstop // vstart++; - // [24] vstart = ++ vstart -- vbuz1=_inc_vbuz1 + // [26] vstart = ++ vstart -- vbuz1=_inc_vbuz1 inc.z vstart // vstop--; - // [25] vstop = -- vstop -- vbuz1=_dec_vbuz1 + // [27] vstop = -- vstop -- vbuz1=_dec_vbuz1 dec.z vstop - // [26] phi from irq_line::@11 irq_line::@12 irq_line::@4 to irq_line::@1 [phi:irq_line::@11/irq_line::@12/irq_line::@4->irq_line::@1] + // [28] phi from irq_line::@11 irq_line::@12 irq_line::@4 to irq_line::@1 [phi:irq_line::@11/irq_line::@12/irq_line::@4->irq_line::@1] // irq_line::@1 __b1: // memset(BARS, 0, sizeof(BARS)) - // [27] call memset + // [29] call memset // Animate the bars - // [58] phi from irq_line::@1 to memset [phi:irq_line::@1->memset] + // [60] phi from irq_line::@1 to memset [phi:irq_line::@1->memset] jsr memset // irq_line::@19 // char idx = sin_idx-- - // [28] irq_line::idx#0 = sin_idx -- vbuz1=vbuz2 + // [30] irq_line::idx#0 = sin_idx -- vbuz1=vbuz2 lda.z sin_idx sta.z idx - // [29] sin_idx = -- sin_idx -- vbuz1=_dec_vbuz1 + // [31] sin_idx = -- sin_idx -- vbuz1=_dec_vbuz1 dec.z sin_idx - // [30] phi from irq_line::@19 to irq_line::@13 [phi:irq_line::@19->irq_line::@13] - // [30] phi irq_line::idx#2 = irq_line::idx#0 [phi:irq_line::@19->irq_line::@13#0] -- register_copy - // [30] phi irq_line::b#2 = 0 [phi:irq_line::@19->irq_line::@13#1] -- vbuxx=vbuc1 + // [32] phi from irq_line::@19 to irq_line::@13 [phi:irq_line::@19->irq_line::@13] + // [32] phi irq_line::idx#2 = irq_line::idx#0 [phi:irq_line::@19->irq_line::@13#0] -- register_copy + // [32] phi irq_line::b#2 = 0 [phi:irq_line::@19->irq_line::@13#1] -- vbuxx=vbuc1 ldx #0 // irq_line::@13 __b13: // for(char b=0;b<8;b++) - // [31] if(irq_line::b#2<8) goto irq_line::@14 -- vbuxx_lt_vbuc1_then_la1 + // [33] if(irq_line::b#2<8) goto irq_line::@14 -- vbuxx_lt_vbuc1_then_la1 cpx #8 bcc __b14 // irq_line::@15 // *VERA_ISR = VERA_LINE - // [32] *VERA_ISR = VERA_LINE -- _deref_pbuc1=vbuc2 + // [34] *VERA_ISR = VERA_LINE -- _deref_pbuc1=vbuc2 // Reset the LINE interrupt lda #VERA_LINE sta VERA_ISR // irq_line::@return // } - // [33] return + // [35] return // interrupt(isr_rom_min_cx16_exit) -- isr_rom_min_cx16_exit jmp $e049 // irq_line::@14 __b14: // char * bar = BARS + SIN[idx] - // [34] irq_line::bar#0 = BARS + SIN[irq_line::idx#2] -- pbuz1=pbuc1_plus_pbuc2_derefidx_vbuz2 + // [36] irq_line::bar#0 = BARS + SIN[irq_line::idx#2] -- pbuz1=pbuc1_plus_pbuc2_derefidx_vbuz2 ldy.z idx lda SIN,y clc @@ -1694,68 +1847,68 @@ irq_line: { lda #>BARS adc #0 sta.z bar+1 - // [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 + // [37] phi from irq_line::@14 to irq_line::@16 [phi:irq_line::@14->irq_line::@16] + // [37] 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 - // [30] phi irq_line::b#2 = irq_line::b#1 [phi:irq_line::@18->irq_line::@13#1] -- register_copy + // [32] phi from irq_line::@18 to irq_line::@13 [phi:irq_line::@18->irq_line::@13] + // [32] phi irq_line::idx#2 = irq_line::idx#1 [phi:irq_line::@18->irq_line::@13#0] -- register_copy + // [32] phi irq_line::b#2 = irq_line::b#1 [phi:irq_line::@18->irq_line::@13#1] -- register_copy jmp __b13 // irq_line::@17 __b17: // bar[i] = BAR[i] - // [39] irq_line::bar#0[irq_line::i2#2] = BAR[irq_line::i2#2] -- pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuyy + // [41] 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] - // [35] phi irq_line::i2#2 = irq_line::i2#1 [phi:irq_line::@17->irq_line::@16#0] -- register_copy + // [37] phi from irq_line::@17 to irq_line::@16 [phi:irq_line::@17->irq_line::@16] + // [37] 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] - // [41] *VERA_DC_BORDER = BARS[irq_line::l#2] -- _deref_pbuc1=pbuc2_derefidx_vbuxx + // [43] *VERA_DC_BORDER = BARS[irq_line::l#2] -- _deref_pbuc1=pbuc2_derefidx_vbuxx lda BARS,x sta VERA_DC_BORDER - // [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 + // [44] phi from irq_line::@3 to irq_line::@5 [phi:irq_line::@3->irq_line::@5] + // [44] 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++) - // [43] if(irq_line::i#2<$18) goto irq_line::@6 -- vbuaa_lt_vbuc1_then_la1 + // [45] 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 - // [44] *VERA_DC_BORDER = 0 -- _deref_pbuc1=vbuc2 + // [46] *VERA_DC_BORDER = 0 -- _deref_pbuc1=vbuc2 // Wait exactly long enough to go to the next raster line lda #0 sta VERA_DC_BORDER - // [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 + // [47] phi from irq_line::@7 to irq_line::@8 [phi:irq_line::@7->irq_line::@8] + // [47] 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++) - // [46] if(irq_line::i1#2<$17) goto irq_line::@9 -- vbuaa_lt_vbuc1_then_la1 + // [48] if(irq_line::i1#2<$17) goto irq_line::@9 -- vbuaa_lt_vbuc1_then_la1 cmp #$17 bcc __b9 // irq_line::@10 @@ -1765,26 +1918,26 @@ irq_line: { nop nop // for(char l=0;l!=230;l++) - // [48] irq_line::l#1 = ++ irq_line::l#2 -- vbuxx=_inc_vbuxx + // [50] 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 + // [18] phi from irq_line::@10 to irq_line::@2 [phi:irq_line::@10->irq_line::@2] + // [18] phi irq_line::l#2 = irq_line::l#1 [phi:irq_line::@10->irq_line::@2#0] -- register_copy jmp __b2 // irq_line::@9 __b9: // for(char i=0;i<23;i++) - // [49] irq_line::i1#1 = ++ irq_line::i1#2 -- vbuaa=_inc_vbuaa + // [51] irq_line::i1#1 = ++ irq_line::i1#2 -- vbuaa=_inc_vbuaa inc - // [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 + // [47] phi from irq_line::@9 to irq_line::@8 [phi:irq_line::@9->irq_line::@8] + // [47] 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++) - // [50] irq_line::i#1 = ++ irq_line::i#2 -- vbuaa=_inc_vbuaa + // [52] irq_line::i#1 = ++ irq_line::i#2 -- vbuaa=_inc_vbuaa inc - // [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 + // [44] phi from irq_line::@6 to irq_line::@5 [phi:irq_line::@6->irq_line::@5] + // [44] phi irq_line::i#2 = irq_line::i#1 [phi:irq_line::@6->irq_line::@5#0] -- register_copy jmp __b5 } // main @@ -1795,24 +1948,24 @@ main: { sei // main::@2 // *KERNEL_IRQ = &irq_line - // [53] *KERNEL_IRQ = &irq_line -- _deref_qprc1=pprc2 + // [55] *KERNEL_IRQ = &irq_line -- _deref_qprc1=pprc2 lda #irq_line sta KERNEL_IRQ+1 // *VERA_IEN = VERA_LINE - // [54] *VERA_IEN = VERA_LINE -- _deref_pbuc1=vbuc2 + // [56] *VERA_IEN = VERA_LINE -- _deref_pbuc1=vbuc2 lda #VERA_LINE sta VERA_IEN // *VERA_IRQLINE_L = 5 - // [55] *VERA_IRQLINE_L = 5 -- _deref_pbuc1=vbuc2 + // [57] *VERA_IRQLINE_L = 5 -- _deref_pbuc1=vbuc2 lda #5 sta VERA_IRQLINE_L // main::CLI1 // asm // asm { cli } cli - // [57] phi from main::@1 main::CLI1 to main::@1 [phi:main::@1/main::CLI1->main::@1] + // [59] phi from main::@1 main::CLI1 to main::@1 [phi:main::@1/main::CLI1->main::@1] // main::@1 __b1: jmp __b1 @@ -1825,9 +1978,9 @@ memset: { .const c = 0 .label str = BARS .label end = str+num - .label dst = 2 - // [59] phi from memset to memset::@1 [phi:memset->memset::@1] - // [59] phi memset::dst#2 = (char *)memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + .label dst = $22 + // [61] phi from memset to memset::@1 [phi:memset->memset::@1] + // [61] phi memset::dst#2 = (char *)memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str @@ -1835,7 +1988,7 @@ memset: { // memset::@1 __b1: // for(char* dst = str; dst!=end; dst++) - // [60] if(memset::dst#2!=memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [62] if(memset::dst#2!=memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z dst+1 cmp #>end bne __b2 @@ -1844,23 +1997,23 @@ memset: { bne __b2 // memset::@return // } - // [61] return + // [63] return rts // memset::@2 __b2: // *dst = c - // [62] *memset::dst#2 = memset::c#0 -- _deref_pbuz1=vbuc1 + // [64] *memset::dst#2 = memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [63] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 + // [65] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: - // [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 + // [61] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] + // [61] 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/cx16-rasterbars.sym b/src/test/ref/examples/cx16/cx16-rasterbars.sym index b6ea05022..09568ee77 100644 --- a/src/test/ref/examples/cx16/cx16-rasterbars.sym +++ b/src/test/ref/examples/cx16/cx16-rasterbars.sym @@ -1,6 +1,12 @@ __constant char BAR[$20] = { $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $1a, $1b, $1c, $1d, $1e, $1f, $1f, $1e, $1d, $1c, $1b, $1a, $19, $18, $17, $16, $15, $14, $13, $12, $11, $10 } __constant char BARS[$e6] = { fill( $e6, 0) } +__loadstore volatile char BRAM // !zp[-1]:0 zp[1]:0 20.0 +__loadstore volatile char BROM // !zp[-1]:1 zp[1]:1 20.0 __constant void (** const KERNEL_IRQ)() = (void (**)()) 788 +__constant char RADIX::BINARY = 2 +__constant char RADIX::DECIMAL = $a +__constant char RADIX::HEXADECIMAL = $10 +__constant char RADIX::OCTAL = 8 __constant char SIN[$100] = kickasm {{ .fill 256, 99+99*sin(i*2*PI/256) }} __constant char SIZEOF_CHAR = 1 @@ -16,15 +22,15 @@ __constant char * const VERA_IRQLINE_L = (char *) 40744 __constant char * const VERA_ISR = (char *) 40743 __constant const char VERA_LINE = 2 void __start() -__loadstore volatile char cnt // zp[1]:5 0.5263157894736842 -__loadstore volatile char hstart // zp[1]:6 0.4545454545454546 -__loadstore volatile char hstop // zp[1]:7 0.34782608695652173 +__loadstore volatile char cnt // zp[1]:37 0.5263157894736842 +__loadstore volatile char hstart // zp[1]:38 0.4545454545454546 +__loadstore volatile char hstop // zp[1]:39 0.34782608695652173 __interrupt(rom_min_cx16) void irq_line() char irq_line::b char irq_line::b#1 // reg byte x 22.0 char irq_line::b#2 // reg byte x 4.125 char *irq_line::bar -char *irq_line::bar#0 // bar zp[2]:2 22.4 +char *irq_line::bar#0 // bar zp[2]:34 22.4 char irq_line::i char irq_line::i#1 // reg byte a 202.0 char irq_line::i#2 // reg byte a 151.5 @@ -35,19 +41,21 @@ char irq_line::i2 char irq_line::i2#1 // reg byte y 202.0 char irq_line::i2#2 // reg byte y 168.33333333333331 char irq_line::idx -char irq_line::idx#0 // idx zp[1]:4 2.0 -char irq_line::idx#1 // idx zp[1]:4 11.0 -char irq_line::idx#2 // idx zp[1]:4 5.0 +char irq_line::idx#0 // idx zp[1]:36 2.0 +char irq_line::idx#1 // idx zp[1]:36 11.0 +char irq_line::idx#2 // idx zp[1]:36 5.0 char irq_line::l char irq_line::l#1 // reg byte x 22.0 char irq_line::l#2 // reg byte x 4.0 +unsigned int isr_vsync +__constant unsigned int isr_vsync#2 = $314 // isr_vsync void main() void * memset(void *str , char c , unsigned int num) char memset::c __constant char memset::c#0 = 0 // c char *memset::dst -char *memset::dst#1 // dst zp[2]:2 202.0 -char *memset::dst#2 // dst zp[2]:2 134.66666666666666 +char *memset::dst#1 // dst zp[2]:34 202.0 +char *memset::dst#2 // dst zp[2]:34 134.66666666666666 char *memset::end __constant char *memset::end#0 = (char *)memset::str#0+memset::num#0 // end unsigned int memset::num @@ -55,20 +63,22 @@ __constant unsigned int memset::num#0 = $e6*SIZEOF_CHAR // num void *memset::return void *memset::str __constant void *memset::str#0 = (void *)BARS // str -__loadstore volatile char sin_idx // zp[1]:10 0.27586206896551724 -__loadstore volatile char vstart // zp[1]:8 0.3333333333333333 -__loadstore volatile char vstop // zp[1]:9 0.32 +__loadstore volatile char sin_idx // zp[1]:42 0.27586206896551724 +__loadstore volatile char vstart // zp[1]:40 0.3333333333333333 +__loadstore volatile char vstop // zp[1]:41 0.32 reg byte x [ irq_line::l#2 irq_line::l#1 ] reg byte x [ irq_line::b#2 irq_line::b#1 ] -zp[1]:4 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] +zp[1]:36 [ irq_line::idx#2 irq_line::idx#1 irq_line::idx#0 ] 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 ] -zp[1]:6 [ hstart ] -zp[1]:7 [ hstop ] -zp[1]:8 [ vstart ] -zp[1]:9 [ vstop ] -zp[1]:5 [ cnt ] -zp[1]:10 [ sin_idx ] -zp[2]:2 [ irq_line::bar#0 memset::dst#2 memset::dst#1 ] +zp[1]:0 [ BRAM ] +zp[1]:1 [ BROM ] +zp[1]:38 [ hstart ] +zp[1]:39 [ hstop ] +zp[1]:40 [ vstart ] +zp[1]:41 [ vstop ] +zp[1]:37 [ cnt ] +zp[1]:42 [ sin_idx ] +zp[2]:34 [ irq_line::bar#0 memset::dst#2 memset::dst#1 ] diff --git a/src/test/ref/examples/cx16/veralib/bitmap_8bpp_320_x_240.asm b/src/test/ref/examples/cx16/veralib/bitmap_8bpp_320_x_240.asm deleted file mode 100644 index 9930fed7a..000000000 --- a/src/test/ref/examples/cx16/veralib/bitmap_8bpp_320_x_240.asm +++ /dev/null @@ -1,3510 +0,0 @@ -// Example program for the Commander X16. -// Demonstrates the usage of the VERA tile map modes and layering. -.cpu _65c02 - // Commodore 64 PRG executable file -.file [name="bitmap_8bpp_320_x_240.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(__start) - /// The colors of the CX16 - .const BLACK = 0 - .const WHITE = 1 - .const BLUE = 6 - .const YELLOW = 7 - .const VERA_INC_1 = $10 - .const VERA_ADDRSEL = 1 - .const VERA_LAYER1_ENABLE = $20 - .const VERA_LAYER0_ENABLE = $10 - .const VERA_LAYER_WIDTH_64 = $10 - .const VERA_LAYER_WIDTH_128 = $20 - .const VERA_LAYER_WIDTH_256 = $30 - .const VERA_LAYER_WIDTH_MASK = $30 - .const VERA_LAYER_HEIGHT_64 = $40 - .const VERA_LAYER_HEIGHT_128 = $80 - .const VERA_LAYER_HEIGHT_256 = $c0 - .const VERA_LAYER_HEIGHT_MASK = $c0 - /// Bit 0-1: Color Depth (0: 1 bpp, 1: 2 bpp, 2: 4 bpp, 3: 8 bpp) - .const VERA_LAYER_COLOR_DEPTH_1BPP = 0 - .const VERA_LAYER_COLOR_DEPTH_8BPP = 3 - .const VERA_LAYER_COLOR_DEPTH_MASK = 3 - .const VERA_LAYER_CONFIG_MODE_BITMAP = 4 - .const VERA_LAYER_CONFIG_256C = 8 - .const VERA_TILEBASE_WIDTH_16 = 1 - .const VERA_TILEBASE_HEIGHT_16 = 2 - .const VERA_LAYER_TILEBASE_MASK = $fc - .const SIZEOF_POINTER = 2 - .const STACK_BASE = $103 - /// $9F20 VRAM Address (7:0) - .label VERA_ADDRX_L = $9f20 - /// $9F21 VRAM Address (15:8) - .label VERA_ADDRX_M = $9f21 - /// $9F22 VRAM Address (7:0) - /// Bit 4-7: Address Increment The following is the amount incremented per value value:increment - /// 0:0, 1:1, 2:2, 3:4, 4:8, 5:16, 6:32, 7:64, 8:128, 9:256, 10:512, 11:40, 12:80, 13:160, 14:320, 15:640 - /// Bit 3: DECR Setting the DECR bit, will decrement instead of increment by the value set by the 'Address Increment' field. - /// Bit 0: VRAM Address (16) - .label VERA_ADDRX_H = $9f22 - /// $9F23 DATA0 VRAM Data port 0 - .label VERA_DATA0 = $9f23 - /// $9F24 DATA1 VRAM Data port 1 - .label VERA_DATA1 = $9f24 - /// $9F25 CTRL Control - /// Bit 7: Reset - /// Bit 1: DCSEL - /// Bit 2: ADDRSEL - .label VERA_CTRL = $9f25 - /// $9F29 DC_VIDEO (DCSEL=0) - /// Bit 7: Current Field Read-only bit which reflects the active interlaced field in composite and RGB modes. (0: even, 1: odd) - /// Bit 6: Sprites Enable Enable output from the Sprites renderer - /// Bit 5: Layer1 Enable Enable output from the Layer1 renderer - /// Bit 4: Layer0 Enable Enable output from the Layer0 renderer - /// Bit 2: Chroma Disable Setting 'Chroma Disable' disables output of chroma in NTSC composite mode and will give a better picture on a monochrome display. (Setting this bit will also disable the chroma output on the S-video output.) - /// Bit 0-1: Output Mode 0: Video disabled, 1: VGA output, 2: NTSC composite, 3: RGB interlaced, composite sync (via VGA connector) - .label VERA_DC_VIDEO = $9f29 - /// $9F2A DC_HSCALE (DCSEL=0) Active Display H-Scale - .label VERA_DC_HSCALE = $9f2a - /// $9F2B DC_VSCALE (DCSEL=0) Active Display V-Scale - .label VERA_DC_VSCALE = $9f2b - /// $9F2D L0_CONFIG Layer 0 Configuration - .label VERA_L0_CONFIG = $9f2d - /// $9F2E L0_MAPBASE Layer 0 Map Base Address (16:9) - .label VERA_L0_MAPBASE = $9f2e - /// Bit 0: Tile Width (0:8 pixels, 1:16 pixels) - .label VERA_L0_TILEBASE = $9f2f - /// $9F34 L1_CONFIG Layer 1 Configuration - .label VERA_L1_CONFIG = $9f34 - /// $9F35 L1_MAPBASE Layer 1 Map Base Address (16:9) - .label VERA_L1_MAPBASE = $9f35 - /// $9F36 L1_TILEBASE Layer 1 Tile Base - /// Bit 2-7: Tile Base Address (16:11) - /// Bit 1: Tile Height (0:8 pixels, 1:16 pixels) - /// Bit 0: Tile Width (0:8 pixels, 1:16 pixels) - .label VERA_L1_TILEBASE = $9f36 - // Variable holding the screen width; - .label conio_screen_width = $24 - // Variable holding the screen height; - .label conio_screen_height = $31 - // Variable holding the screen layer on the VERA card with which conio interacts; - .label conio_screen_layer = $30 - // Variables holding the current map width and map height of the layer. - .label conio_width = $a5 - .label conio_height = $33 - .label conio_rowshift = $2d - .label conio_rowskip = $2e - .label __bitmap_address = $ac - .label __bitmap_layer = $96 - .label __bitmap_hscale = $b0 - .label __bitmap_vscale = $b1 - .label __bitmap_color_depth = $a7 - // The random state variable - .label rand_state = $35 - // Remainder after unsigned 16-bit division - .label rem16u = $41 - // The screen width - // The screen height - // The text screen base address, which is a 16:0 bit value in VERA VRAM. - // That is 128KB addressable space, thus 17 bits in total. - // CONIO_SCREEN_TEXT contains bits 15:0 of the address. - // CONIO_SCREEN_BANK contains bit 16, the the 64K memory bank in VERA VRAM (the upper 17th bit). - // !!! note that these values are not const for the cx16! - // This conio implements the two layers of VERA, which can be layer 0 or layer 1. - // Configuring conio to output to a different layer, will change these fields to the address base - // configured using VERA_L0_MAPBASE = 0x9f2e or VERA_L1_MAPBASE = 0x9f35. - // Using the function setscreenlayer(layer) will re-calculate using CONIO_SCREEN_TEXT and CONIO_SCREEN_BASE - // based on the values of VERA_L0_MAPBASE or VERA_L1_MAPBASE, mapping the base address of the selected layer. - // The function setscreenlayermapbase(layer,mapbase) allows to configure bit 16:9 of the - // mapbase address of the time map in VRAM of the selected layer VERA_L0_MAPBASE or VERA_L1_MAPBASE. - .label CONIO_SCREEN_TEXT = $2b - .label CONIO_SCREEN_BANK = $88 - .label CONIO_SCREEN_BANK_1 = $ab - // The screen width - // The screen height - // The text screen base address, which is a 16:0 bit value in VERA VRAM. - // That is 128KB addressable space, thus 17 bits in total. - // CONIO_SCREEN_TEXT contains bits 15:0 of the address. - // CONIO_SCREEN_BANK contains bit 16, the the 64K memory bank in VERA VRAM (the upper 17th bit). - // !!! note that these values are not const for the cx16! - // This conio implements the two layers of VERA, which can be layer 0 or layer 1. - // Configuring conio to output to a different layer, will change these fields to the address base - // configured using VERA_L0_MAPBASE = 0x9f2e or VERA_L1_MAPBASE = 0x9f35. - // Using the function setscreenlayer(layer) will re-calculate using CONIO_SCREEN_TEXT and CONIO_SCREEN_BASE - // based on the values of VERA_L0_MAPBASE or VERA_L1_MAPBASE, mapping the base address of the selected layer. - // The function setscreenlayermapbase(layer,mapbase) allows to configure bit 16:9 of the - // mapbase address of the time map in VRAM of the selected layer VERA_L0_MAPBASE or VERA_L1_MAPBASE. - .label CONIO_SCREEN_TEXT_1 = $b2 -.segment Code -__start: { - // __ma unsigned byte conio_screen_width = 0 - lda #0 - sta.z conio_screen_width - // __ma unsigned byte conio_screen_height = 0 - sta.z conio_screen_height - // __ma unsigned byte conio_screen_layer = 1 - lda #1 - sta.z conio_screen_layer - // __ma word conio_width = 0 - lda #<0 - sta.z conio_width - sta.z conio_width+1 - // __ma word conio_height = 0 - sta.z conio_height - sta.z conio_height+1 - // __ma byte conio_rowshift = 0 - sta.z conio_rowshift - // __ma word conio_rowskip = 0 - sta.z conio_rowskip - sta.z conio_rowskip+1 - // __ma dword __bitmap_address = 0 - sta.z __bitmap_address - sta.z __bitmap_address+1 - lda #<0>>$10 - sta.z __bitmap_address+2 - lda #>0>>$10 - sta.z __bitmap_address+3 - // __ma byte __bitmap_layer = 0 - lda #0 - sta.z __bitmap_layer - // __ma byte __bitmap_hscale = 0 - sta.z __bitmap_hscale - // __ma byte __bitmap_vscale = 0 - sta.z __bitmap_vscale - // __ma byte __bitmap_color_depth = 0 - sta.z __bitmap_color_depth - // #pragma constructor_for(conio_x16_init, cputc, clrscr, cscroll) - jsr conio_x16_init - jsr main - rts -} -// Set initial cursor position -conio_x16_init: { - // Position cursor at current line - .label BASIC_CURSOR_LINE = $d6 - .label line = $a8 - // char line = *BASIC_CURSOR_LINE - lda.z BASIC_CURSOR_LINE - sta.z line - // vera_layer_mode_text(1,(dword)0x00000,(dword)0x0F800,128,64,8,8,16) - jsr vera_layer_mode_text - // screensize(&conio_screen_width, &conio_screen_height) - jsr screensize - // screenlayer(1) - jsr screenlayer - // vera_layer_set_textcolor(1, WHITE) - lda #WHITE - ldx #1 - jsr vera_layer_set_textcolor - // vera_layer_set_backcolor(1, BLUE) - lda #BLUE - ldx #1 - jsr vera_layer_set_backcolor - // vera_layer_set_mapbase(0,0x20) - ldx #$20 - lda #0 - jsr vera_layer_set_mapbase - // vera_layer_set_mapbase(1,0x00) - ldx #0 - lda #1 - jsr vera_layer_set_mapbase - // if(line>=CONIO_HEIGHT) - lda.z line - cmp.z conio_screen_height - bcc __b1 - // line=CONIO_HEIGHT-1 - ldx.z conio_screen_height - dex - stx.z line - __b1: - // gotoxy(0, line) - ldx.z line - jsr gotoxy - // } - rts -} -// Output one character at the current cursor position -// Moves the cursor forward. Scrolls the entire screen if needed -// void cputc(__zp($69) char c) -cputc: { - .const OFFSET_STACK_C = 0 - .label __16 = $29 - .label c = $69 - .label conio_addr = $1e - tsx - lda STACK_BASE+OFFSET_STACK_C,x - sta.z c - // char color = vera_layer_get_color( conio_screen_layer) - ldx.z conio_screen_layer - jsr vera_layer_get_color - // char color = vera_layer_get_color( conio_screen_layer) - tax - // char* conio_addr = CONIO_SCREEN_TEXT + conio_line_text[conio_screen_layer] - lda.z conio_screen_layer - asl - tay - clc - lda.z CONIO_SCREEN_TEXT - adc conio_line_text,y - sta.z conio_addr - lda.z CONIO_SCREEN_TEXT+1 - adc conio_line_text+1,y - sta.z conio_addr+1 - // conio_cursor_x[conio_screen_layer] << 1 - ldy.z conio_screen_layer - lda conio_cursor_x,y - asl - // conio_addr += conio_cursor_x[conio_screen_layer] << 1 - clc - adc.z conio_addr - sta.z conio_addr - bcc !+ - inc.z conio_addr+1 - !: - // if(c=='\n') - lda #'\n' - cmp.z c - beq __b1 - // *VERA_CTRL &= ~VERA_ADDRSEL - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // BYTE0(conio_addr) - lda.z conio_addr - // *VERA_ADDRX_L = BYTE0(conio_addr) - // Set address - sta VERA_ADDRX_L - // BYTE1(conio_addr) - lda.z conio_addr+1 - // *VERA_ADDRX_M = BYTE1(conio_addr) - sta VERA_ADDRX_M - // CONIO_SCREEN_BANK | VERA_INC_1 - lda #VERA_INC_1 - ora.z CONIO_SCREEN_BANK - // *VERA_ADDRX_H = CONIO_SCREEN_BANK | VERA_INC_1 - sta VERA_ADDRX_H - // *VERA_DATA0 = c - lda.z c - sta VERA_DATA0 - // *VERA_DATA0 = color - stx VERA_DATA0 - // conio_cursor_x[conio_screen_layer]++; - ldx.z conio_screen_layer - inc conio_cursor_x,x - // byte scroll_enable = conio_scroll_enable[conio_screen_layer] - ldy.z conio_screen_layer - lda conio_scroll_enable,y - // if(scroll_enable) - cmp #0 - bne __b5 - // (unsigned int)conio_cursor_x[conio_screen_layer] == conio_width - lda conio_cursor_x,y - sta.z __16 - lda #0 - sta.z __16+1 - // if((unsigned int)conio_cursor_x[conio_screen_layer] == conio_width) - cmp.z conio_width+1 - bne __breturn - lda.z __16 - cmp.z conio_width - bne __breturn - // cputln() - jsr cputln - __breturn: - // } - rts - __b5: - // if(conio_cursor_x[conio_screen_layer] == CONIO_WIDTH) - lda.z conio_screen_width - ldy.z conio_screen_layer - cmp conio_cursor_x,y - bne __breturn - // cputln() - jsr cputln - rts - __b1: - // cputln() - jsr cputln - rts -} -main: { - .label __40 = $6e - .label color = $7e - .label x = $78 - // memcpy_in_vram(1, (char*)0xF000, VERA_INC_1, 0, (char*)0xF800, VERA_INC_1, 256*8) - // Before we configure the bitmap pane into vera memory we need to re-arrange a few things! - // It is better to load all in bank 0, but then there is an issue. - // So the default CX16 character set is located in bank 0, at address 0xF800. - // So we need to move this character set to bank 1, suggested is at address 0xF000. - // The CX16 by default writes textual output to layer 1 in text mode, so we need to - // realign the moved character set to 0xf000 as the new tile base for layer 1. - // We also will need to realign for layer 1 the map base from 0x00000 to 0x14000. - // This is now all easily done with a few statements in the new kickc vera lib ... - lda #<$100*8 - sta.z memcpy_in_vram.num - lda #>$100*8 - sta.z memcpy_in_vram.num+1 - ldy #1 - lda #<$f000 - sta.z memcpy_in_vram.dest - lda #>$f000 - sta.z memcpy_in_vram.dest+1 - lda #<$f800 - sta.z memcpy_in_vram.src - lda #>$f800 - sta.z memcpy_in_vram.src+1 - jsr memcpy_in_vram - // vera_layer_mode_tile(1, 0x14000, 0x1F000, 128, 64, 8, 8, 1) - // We copy the 128 character set of 8 bytes each. - lda #8 - sta.z vera_layer_mode_tile.tileheight - sta.z vera_layer_mode_tile.tilewidth - lda #<$1f000 - sta.z vera_layer_mode_tile.tilebase_address - lda #>$1f000 - sta.z vera_layer_mode_tile.tilebase_address+1 - lda #<$1f000>>$10 - sta.z vera_layer_mode_tile.tilebase_address+2 - lda #>$1f000>>$10 - sta.z vera_layer_mode_tile.tilebase_address+3 - lda #<$14000 - sta.z vera_layer_mode_tile.mapbase_address - lda #>$14000 - sta.z vera_layer_mode_tile.mapbase_address+1 - lda #<$14000>>$10 - sta.z vera_layer_mode_tile.mapbase_address+2 - lda #>$14000>>$10 - sta.z vera_layer_mode_tile.mapbase_address+3 - lda #<$40 - sta.z vera_layer_mode_tile.mapheight - lda #>$40 - sta.z vera_layer_mode_tile.mapheight+1 - lda #1 - sta.z vera_layer_mode_tile.layer - lda #<$80 - sta.z vera_layer_mode_tile.mapwidth - lda #>$80 - sta.z vera_layer_mode_tile.mapwidth+1 - jsr vera_layer_mode_tile - // vera_layer_mode_bitmap(0, (dword)0x00000, 320, 8) - jsr vera_layer_mode_bitmap - // screenlayer(1) - jsr screenlayer - // vera_layer_set_textcolor(conio_screen_layer, color) - ldx.z conio_screen_layer - lda #WHITE - jsr vera_layer_set_textcolor - // vera_layer_set_backcolor(conio_screen_layer, color) - ldx.z conio_screen_layer - lda #BLACK - jsr vera_layer_set_backcolor - // clrscr() - jsr clrscr - // gotoxy(0,25) - ldx #$19 - jsr gotoxy - // printf("vera in bitmap mode,\n") - lda #s - sta.z printf_str.s+1 - jsr printf_str - // printf("color depth 8 bits per pixel.\n") - lda #s1 - sta.z printf_str.s+1 - jsr printf_str - // printf("in this mode, it is possible to display\n") - lda #s2 - sta.z printf_str.s+1 - jsr printf_str - // printf("graphics in 256 colors.\n") - lda #s3 - sta.z printf_str.s+1 - jsr printf_str - // *VERA_DC_VIDEO |= vera_layer_enable[layer] - lda VERA_DC_VIDEO - ora vera_layer_enable - sta VERA_DC_VIDEO - // bitmap_init(0, 0x00000) - jsr bitmap_init - // bitmap_clear() - jsr bitmap_clear - // gotoxy(0,29) - ldx #$1d - jsr gotoxy - // vera_layer_set_textcolor(conio_screen_layer, color) - ldx.z conio_screen_layer - lda #YELLOW - jsr vera_layer_set_textcolor - // printf("press a key ...") - lda #s4 - sta.z printf_str.s+1 - jsr printf_str - lda #<1 - sta.z rand_state - lda #>1 - sta.z rand_state+1 - __b1: - // kbhit() - jsr kbhit - // while(!kbhit()) - cmp #0 - bne !__b2+ - jmp __b2 - !__b2: - // vera_layer_set_textcolor(conio_screen_layer, color) - ldx.z conio_screen_layer - lda #WHITE - jsr vera_layer_set_textcolor - // vera_layer_set_backcolor(conio_screen_layer, color) - ldx.z conio_screen_layer - lda #BLACK - jsr vera_layer_set_backcolor - // clrscr() - jsr clrscr - // gotoxy(0,26) - ldx #$1a - jsr gotoxy - // printf("here you see all the colors possible.\n") - lda #s5 - sta.z printf_str.s+1 - jsr printf_str - // gotoxy(0,29) - ldx #$1d - jsr gotoxy - // vera_layer_set_textcolor(conio_screen_layer, color) - ldx.z conio_screen_layer - lda #YELLOW - jsr vera_layer_set_textcolor - // printf("press a key ...") - lda #s4 - sta.z printf_str.s+1 - jsr printf_str - lda #0 - sta.z color - sta.z x - sta.z x+1 - __b3: - // kbhit() - jsr kbhit - // while(!kbhit()) - cmp #0 - beq __b4 - // screenlayer(1) - jsr screenlayer - // vera_layer_set_textcolor(conio_screen_layer, color) - ldx.z conio_screen_layer - lda #WHITE - jsr vera_layer_set_textcolor - // vera_layer_set_backcolor(conio_screen_layer, color) - ldx.z conio_screen_layer - lda #BLUE - jsr vera_layer_set_backcolor - // clrscr() - jsr clrscr - // } - rts - __b4: - // bitmap_line(x, x, 0, 199, color) - lda.z x - sta.z bitmap_line.x0 - lda.z x+1 - sta.z bitmap_line.x0+1 - lda.z x - sta.z bitmap_line.x1 - lda.z x+1 - sta.z bitmap_line.x1+1 - ldx.z color - lda #<$c7 - sta.z bitmap_line.y1 - lda #>$c7 - sta.z bitmap_line.y1+1 - lda #<0 - sta.z bitmap_line.y0 - sta.z bitmap_line.y0+1 - jsr bitmap_line - // color++; - inc.z color - // x++; - inc.z x - bne !+ - inc.z x+1 - !: - // if(x>319) - lda.z x+1 - cmp #>$13f - bne !+ - lda.z x - cmp #<$13f - !: - bcc __b3 - beq __b3 - lda #<0 - sta.z x - sta.z x+1 - jmp __b3 - __b2: - // rand() - jsr rand - // rand() - // modr16u(rand(),320,0) - lda.z rand.return - sta.z modr16u.dividend - lda.z rand.return+1 - sta.z modr16u.dividend+1 - lda #<$140 - sta.z modr16u.divisor - lda #>$140 - sta.z modr16u.divisor+1 - jsr modr16u - // modr16u(rand(),320,0) - // bitmap_line(modr16u(rand(),320,0), modr16u(rand(),320,0), modr16u(rand(),200,0), modr16u(rand(),200,0), rand()&255) - lda.z modr16u.return - sta.z bitmap_line.x0 - lda.z modr16u.return+1 - sta.z bitmap_line.x0+1 - // rand() - jsr rand - // rand() - // modr16u(rand(),320,0) - lda.z rand.return - sta.z modr16u.dividend - lda.z rand.return+1 - sta.z modr16u.dividend+1 - lda #<$140 - sta.z modr16u.divisor - lda #>$140 - sta.z modr16u.divisor+1 - jsr modr16u - // modr16u(rand(),320,0) - // bitmap_line(modr16u(rand(),320,0), modr16u(rand(),320,0), modr16u(rand(),200,0), modr16u(rand(),200,0), rand()&255) - lda.z modr16u.return - sta.z bitmap_line.x1 - lda.z modr16u.return+1 - sta.z bitmap_line.x1+1 - // rand() - jsr rand - // rand() - // modr16u(rand(),200,0) - lda.z rand.return - sta.z modr16u.dividend - lda.z rand.return+1 - sta.z modr16u.dividend+1 - lda #<$c8 - sta.z modr16u.divisor - lda #>$c8 - sta.z modr16u.divisor+1 - jsr modr16u - // modr16u(rand(),200,0) - // bitmap_line(modr16u(rand(),320,0), modr16u(rand(),320,0), modr16u(rand(),200,0), modr16u(rand(),200,0), rand()&255) - lda.z modr16u.return - sta.z bitmap_line.y0 - lda.z modr16u.return+1 - sta.z bitmap_line.y0+1 - // rand() - jsr rand - // rand() - // modr16u(rand(),200,0) - lda.z rand.return - sta.z modr16u.dividend - lda.z rand.return+1 - sta.z modr16u.dividend+1 - lda #<$c8 - sta.z modr16u.divisor - lda #>$c8 - sta.z modr16u.divisor+1 - jsr modr16u - // modr16u(rand(),200,0) - // bitmap_line(modr16u(rand(),320,0), modr16u(rand(),320,0), modr16u(rand(),200,0), modr16u(rand(),200,0), rand()&255) - lda.z modr16u.return - sta.z bitmap_line.y1 - lda.z modr16u.return+1 - sta.z bitmap_line.y1+1 - // rand() - jsr rand - // rand() - // bitmap_line(modr16u(rand(),320,0), modr16u(rand(),320,0), modr16u(rand(),200,0), modr16u(rand(),200,0), rand()&255) - lda #$ff - and.z __40 - tax - jsr bitmap_line - jmp __b1 - .segment Data - s: .text @"vera in bitmap mode,\n" - .byte 0 - s1: .text @"color depth 8 bits per pixel.\n" - .byte 0 - s2: .text @"in this mode, it is possible to display\n" - .byte 0 - s3: .text @"graphics in 256 colors.\n" - .byte 0 - s4: .text "press a key ..." - .byte 0 - s5: .text @"here you see all the colors possible.\n" - .byte 0 -} -.segment Code -// Set a vera layer in text mode and configure the: -// - layer: Value of 0 or 1. -// - mapbase_address: A dword typed address (4 bytes), that specifies the full address of the map base. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective mapbase vera register. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// - tilebase_address: A dword typed address (4 bytes), that specifies the base address of the tile map. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective tilebase vera register. -// Note that the resulting vera register holds only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// - mapwidth: The width of the map in number of tiles. -// - mapheight: The height of the map in number of tiles. -// - tilewidth: The width of a tile, which can be 8 or 16 pixels. -// - tileheight: The height of a tile, which can be 8 or 16 pixels. -// - color_mode: The color mode, which can be 16 or 256. -// void vera_layer_mode_text(char layer, unsigned long mapbase_address, unsigned long tilebase_address, unsigned int mapwidth, unsigned int mapheight, char tilewidth, char tileheight, unsigned int color_mode) -vera_layer_mode_text: { - .const mapbase_address = 0 - .const tilebase_address = $f800 - .const mapwidth = $80 - .const mapheight = $40 - .const tilewidth = 8 - .const tileheight = 8 - .label layer = 1 - // vera_layer_mode_tile( layer, mapbase_address, tilebase_address, mapwidth, mapheight, tilewidth, tileheight, 1 ) - lda #tileheight - sta.z vera_layer_mode_tile.tileheight - lda #tilewidth - sta.z vera_layer_mode_tile.tilewidth - lda #tilebase_address - sta.z vera_layer_mode_tile.tilebase_address+1 - lda #>$10 - sta.z vera_layer_mode_tile.tilebase_address+2 - lda #>tilebase_address>>$10 - sta.z vera_layer_mode_tile.tilebase_address+3 - lda #mapbase_address - sta.z vera_layer_mode_tile.mapbase_address+1 - lda #>$10 - sta.z vera_layer_mode_tile.mapbase_address+2 - lda #>mapbase_address>>$10 - sta.z vera_layer_mode_tile.mapbase_address+3 - lda #mapheight - sta.z vera_layer_mode_tile.mapheight+1 - lda #layer - sta.z vera_layer_mode_tile.layer - lda #mapwidth - sta.z vera_layer_mode_tile.mapwidth+1 - jsr vera_layer_mode_tile - // vera_layer_set_text_color_mode( layer, VERA_LAYER_CONFIG_16C ) - jsr vera_layer_set_text_color_mode - // } - rts -} -// Return the current screen size. -// void screensize(char *x, char *y) -screensize: { - .label x = conio_screen_width - .label y = conio_screen_height - // char hscale = (*VERA_DC_HSCALE) >> 7 - // VERA returns in VERA_DC_HSCALE the value of 128 when 80 columns is used in text mode, - // and the value of 64 when 40 columns is used in text mode. - // Basically, 40 columns mode in the VERA is a double scan mode. - // Same for the VERA_DC_VSCALE mode, but then the subdivision is 60 or 30 rows. - // I still need to test the other modes, but this will suffice for now for the pure text modes. - lda VERA_DC_HSCALE - rol - rol - and #1 - // 40 << hscale - tay - lda #$28 - cpy #0 - beq !e+ - !: - asl - dey - bne !- - !e: - // *x = 40 << hscale - sta.z x - // char vscale = (*VERA_DC_VSCALE) >> 7 - lda VERA_DC_VSCALE - rol - rol - and #1 - // 30 << vscale - tay - lda #$1e - cpy #0 - beq !e+ - !: - asl - dey - bne !- - !e: - // *y = 30 << vscale - sta.z y - // } - rts -} -// Set the layer with which the conio will interact. -// - layer: value of 0 or 1. -// void screenlayer(char layer) -screenlayer: { - .label __2 = $89 - .label __4 = $7f - .label __5 = $8b - .label vera_layer_get_width1_config = $97 - .label vera_layer_get_width1_return = $89 - .label vera_layer_get_height1_config = $99 - .label vera_layer_get_height1_return = $8b - // conio_screen_layer = layer - lda #1 - sta.z conio_screen_layer - // vera_layer_get_mapbase_bank(conio_screen_layer) - tax - jsr vera_layer_get_mapbase_bank - sta.z CONIO_SCREEN_BANK_1 - // vera_layer_get_mapbase_offset(conio_screen_layer) - lda.z conio_screen_layer - jsr vera_layer_get_mapbase_offset - lda.z vera_layer_get_mapbase_offset.return - sta.z CONIO_SCREEN_TEXT_1 - lda.z vera_layer_get_mapbase_offset.return+1 - sta.z CONIO_SCREEN_TEXT_1+1 - // vera_layer_get_width(conio_screen_layer) - lda.z conio_screen_layer - // byte* config = vera_layer_config[layer] - asl - tay - lda vera_layer_config,y - sta.z vera_layer_get_width1_config - lda vera_layer_config+1,y - sta.z vera_layer_get_width1_config+1 - // *config & VERA_LAYER_WIDTH_MASK - lda #VERA_LAYER_WIDTH_MASK - ldy #0 - and (vera_layer_get_width1_config),y - // (*config & VERA_LAYER_WIDTH_MASK) >> 4 - lsr - lsr - lsr - lsr - // return VERA_LAYER_WIDTH[ (*config & VERA_LAYER_WIDTH_MASK) >> 4]; - asl - tay - lda VERA_LAYER_WIDTH,y - sta.z vera_layer_get_width1_return - lda VERA_LAYER_WIDTH+1,y - sta.z vera_layer_get_width1_return+1 - // } - // vera_layer_get_width(conio_screen_layer) - // conio_width = vera_layer_get_width(conio_screen_layer) - lda.z __2 - sta.z conio_width - lda.z __2+1 - sta.z conio_width+1 - // vera_layer_get_rowshift(conio_screen_layer) - ldx.z conio_screen_layer - jsr vera_layer_get_rowshift - // conio_rowshift = vera_layer_get_rowshift(conio_screen_layer) - sta.z conio_rowshift - // vera_layer_get_rowskip(conio_screen_layer) - lda.z conio_screen_layer - jsr vera_layer_get_rowskip - // conio_rowskip = vera_layer_get_rowskip(conio_screen_layer) - lda.z __4 - sta.z conio_rowskip - lda.z __4+1 - sta.z conio_rowskip+1 - // vera_layer_get_height(conio_screen_layer) - lda.z conio_screen_layer - // byte* config = vera_layer_config[layer] - asl - tay - lda vera_layer_config,y - sta.z vera_layer_get_height1_config - lda vera_layer_config+1,y - sta.z vera_layer_get_height1_config+1 - // *config & VERA_LAYER_HEIGHT_MASK - lda #VERA_LAYER_HEIGHT_MASK - ldy #0 - and (vera_layer_get_height1_config),y - // (*config & VERA_LAYER_HEIGHT_MASK) >> 6 - rol - rol - rol - and #3 - // return VERA_LAYER_HEIGHT[ (*config & VERA_LAYER_HEIGHT_MASK) >> 6]; - asl - tay - lda VERA_LAYER_HEIGHT,y - sta.z vera_layer_get_height1_return - lda VERA_LAYER_HEIGHT+1,y - sta.z vera_layer_get_height1_return+1 - // } - // vera_layer_get_height(conio_screen_layer) - // conio_height = vera_layer_get_height(conio_screen_layer) - lda.z __5 - sta.z conio_height - lda.z __5+1 - sta.z conio_height+1 - // } - rts -} -// Set the front color for text output. The old front text color setting is returned. -// - layer: Value of 0 or 1. -// - color: a 4 bit value ( decimal between 0 and 15) when the VERA works in 16x16 color text mode. -// An 8 bit value (decimal between 0 and 255) when the VERA works in 256 text mode. -// Note that on the VERA, the transparent color has value 0. -// char vera_layer_set_textcolor(__register(X) char layer, __register(A) char color) -vera_layer_set_textcolor: { - // vera_layer_textcolor[layer] = color - sta vera_layer_textcolor,x - // } - rts -} -// Set the back color for text output. The old back text color setting is returned. -// - layer: Value of 0 or 1. -// - color: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// char vera_layer_set_backcolor(__register(X) char layer, __register(A) char color) -vera_layer_set_backcolor: { - // vera_layer_backcolor[layer] = color - sta vera_layer_backcolor,x - // } - rts -} -// Set the base of the map layer with which the conio will interact. -// - layer: Value of 0 or 1. -// - mapbase: Specifies the base address of the tile map. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// void vera_layer_set_mapbase(__register(A) char layer, __register(X) char mapbase) -vera_layer_set_mapbase: { - .label addr = $25 - // byte* addr = vera_layer_mapbase[layer] - asl - tay - lda vera_layer_mapbase,y - sta.z addr - lda vera_layer_mapbase+1,y - sta.z addr+1 - // *addr = mapbase - txa - ldy #0 - sta (addr),y - // } - rts -} -// Set the cursor to the specified position -// void gotoxy(char x, __register(X) char y) -gotoxy: { - .label __6 = $25 - .label line_offset = $25 - // if(y>CONIO_HEIGHT) - lda.z conio_screen_height - stx.z $ff - cmp.z $ff - bcs __b1 - ldx #0 - __b1: - // if(x>=CONIO_WIDTH) - lda.z conio_screen_width - // conio_cursor_x[conio_screen_layer] = x - lda #0 - ldy.z conio_screen_layer - sta conio_cursor_x,y - // conio_cursor_y[conio_screen_layer] = y - txa - sta conio_cursor_y,y - // unsigned int line_offset = (unsigned int)y << conio_rowshift - txa - sta.z __6 - lda #0 - sta.z __6+1 - ldy.z conio_rowshift - beq !e+ - !: - asl.z line_offset - rol.z line_offset+1 - dey - bne !- - !e: - // conio_line_text[conio_screen_layer] = line_offset - lda.z conio_screen_layer - asl - tay - lda.z line_offset - sta conio_line_text,y - lda.z line_offset+1 - sta conio_line_text+1,y - // } - rts -} -// Get the text and back color for text output in 16 color mode. -// - layer: Value of 0 or 1. -// - return: an 8 bit value with bit 7:4 containing the back color and bit 3:0 containing the front color. -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_color(__register(X) char layer) -vera_layer_get_color: { - .label addr = 6 - // byte* addr = vera_layer_config[layer] - txa - asl - tay - lda vera_layer_config,y - sta.z addr - lda vera_layer_config+1,y - sta.z addr+1 - // *addr & VERA_LAYER_CONFIG_256C - lda #VERA_LAYER_CONFIG_256C - ldy #0 - and (addr),y - // if( *addr & VERA_LAYER_CONFIG_256C ) - cmp #0 - bne __b1 - // vera_layer_backcolor[layer] << 4 - lda vera_layer_backcolor,x - asl - asl - asl - asl - // return ((vera_layer_backcolor[layer] << 4) | vera_layer_textcolor[layer]); - ora vera_layer_textcolor,x - // } - rts - __b1: - // return (vera_layer_textcolor[layer]); - lda vera_layer_textcolor,x - rts -} -// Print a newline -cputln: { - .label temp = 6 - // word temp = conio_line_text[conio_screen_layer] - lda.z conio_screen_layer - asl - // TODO: This needs to be optimized! other variations don't compile because of sections not available! - tay - lda conio_line_text,y - sta.z temp - lda conio_line_text+1,y - sta.z temp+1 - // temp += conio_rowskip - clc - lda.z temp - adc.z conio_rowskip - sta.z temp - lda.z temp+1 - adc.z conio_rowskip+1 - sta.z temp+1 - // conio_line_text[conio_screen_layer] = temp - lda.z conio_screen_layer - asl - tay - lda.z temp - sta conio_line_text,y - lda.z temp+1 - sta conio_line_text+1,y - // conio_cursor_x[conio_screen_layer] = 0 - lda #0 - ldy.z conio_screen_layer - sta conio_cursor_x,y - // conio_cursor_y[conio_screen_layer]++; - ldx.z conio_screen_layer - inc conio_cursor_y,x - // cscroll() - jsr cscroll - // } - rts -} -// Copy block of memory (from VRAM to VRAM) -// Copies the values from the location pointed by src to the location pointed by dest. -// The method uses the VERA access ports 0 and 1 to copy data from and to in VRAM. -// - src_bank: 64K VRAM bank number to copy from (0/1). -// - src: pointer to the location to copy from. Note that the address is a 16 bit value! -// - src_increment: the increment indicator, VERA needs this because addressing increment is automated by VERA at each access. -// - dest_bank: 64K VRAM bank number to copy to (0/1). -// - dest: pointer to the location to copy to. Note that the address is a 16 bit value! -// - dest_increment: the increment indicator, VERA needs this because addressing increment is automated by VERA at each access. -// - num: The number of bytes to copy -// void memcpy_in_vram(__register(Y) char dest_bank, __zp($a) void *dest, char dest_increment, char src_bank, __zp(6) char *src, char src_increment, __zp(8) unsigned int num) -memcpy_in_vram: { - .label i = 2 - .label dest = $a - .label src = 6 - .label num = 8 - // *VERA_CTRL &= ~VERA_ADDRSEL - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // BYTE0(src) - lda.z src - // *VERA_ADDRX_L = BYTE0(src) - // Set address - sta VERA_ADDRX_L - // BYTE1(src) - lda.z src+1 - // *VERA_ADDRX_M = BYTE1(src) - sta VERA_ADDRX_M - // *VERA_ADDRX_H = src_increment | src_bank - lda #VERA_INC_1 - sta VERA_ADDRX_H - // *VERA_CTRL |= VERA_ADDRSEL - // Select DATA1 - lda #VERA_ADDRSEL - ora VERA_CTRL - sta VERA_CTRL - // BYTE0(dest) - lda.z dest - // *VERA_ADDRX_L = BYTE0(dest) - // Set address - sta VERA_ADDRX_L - // BYTE1(dest) - lda.z dest+1 - // *VERA_ADDRX_M = BYTE1(dest) - sta VERA_ADDRX_M - // dest_increment | dest_bank - tya - ora #VERA_INC_1 - // *VERA_ADDRX_H = dest_increment | dest_bank - sta VERA_ADDRX_H - lda #<0 - sta.z i - sta.z i+1 - // Transfer the data - __b1: - // for(unsigned int i=0; i$100 - bne __b1 - lda.z mapwidth - cmp #<$100 - bne __b1 - // vera_layer_rowshift[layer] = 9 - lda #9 - ldy.z layer - sta vera_layer_rowshift,y - // vera_layer_rowskip[layer] = 512 - tya - asl - tay - lda #<$200 - sta vera_layer_rowskip,y - lda #>$200 - sta vera_layer_rowskip+1,y - ldx #VERA_LAYER_WIDTH_256 - jmp __b9 - __b1: - ldx #VERA_LAYER_COLOR_DEPTH_1BPP - __b9: - // case 32: - // config |= VERA_LAYER_HEIGHT_32; - // break; - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$20 - beq __b16 - !: - // case 64: - // config |= VERA_LAYER_HEIGHT_64; - // break; - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$40 - bne !__b13+ - jmp __b13 - !__b13: - !: - // case 128: - // config |= VERA_LAYER_HEIGHT_128; - // break; - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$80 - bne !__b14+ - jmp __b14 - !__b14: - !: - // case 256: - // config |= VERA_LAYER_HEIGHT_256; - // break; - lda.z mapheight+1 - cmp #>$100 - bne __b16 - lda.z mapheight - cmp #<$100 - bne __b16 - // config |= VERA_LAYER_HEIGHT_256 - txa - ora #VERA_LAYER_HEIGHT_256 - tax - __b16: - // vera_layer_set_config(layer, config) - lda.z layer - jsr vera_layer_set_config - // WORD0(mapbase_address) - lda.z mapbase_address - sta.z __1 - lda.z mapbase_address+1 - sta.z __1+1 - // vera_mapbase_offset[layer] = WORD0(mapbase_address) - lda.z layer - asl - sta.z __17 - // mapbase - tay - lda.z __1 - sta vera_mapbase_offset,y - lda.z __1+1 - sta vera_mapbase_offset+1,y - // BYTE2(mapbase_address) - lda.z mapbase_address+2 - // vera_mapbase_bank[layer] = BYTE2(mapbase_address) - ldy.z layer - sta vera_mapbase_bank,y - // vera_mapbase_address[layer] = mapbase_address - tya - asl - asl - sta.z __18 - tay - lda.z mapbase_address - sta vera_mapbase_address,y - lda.z mapbase_address+1 - sta vera_mapbase_address+1,y - lda.z mapbase_address+2 - sta vera_mapbase_address+2,y - lda.z mapbase_address+3 - sta vera_mapbase_address+3,y - // mapbase_address = mapbase_address >> 1 - lsr.z mapbase_address+3 - ror.z mapbase_address+2 - ror.z mapbase_address+1 - ror.z mapbase_address - // byte mapbase = BYTE1(mapbase_address) - ldx.z mapbase_address+1 - // vera_layer_set_mapbase(layer,mapbase) - lda.z layer - jsr vera_layer_set_mapbase - // WORD0(tilebase_address) - lda.z tilebase_address - sta.z __6 - lda.z tilebase_address+1 - sta.z __6+1 - // vera_tilebase_offset[layer] = WORD0(tilebase_address) - // tilebase - ldy.z __17 - lda.z __6 - sta vera_tilebase_offset,y - lda.z __6+1 - sta vera_tilebase_offset+1,y - // BYTE2(tilebase_address) - lda.z tilebase_address+2 - // vera_tilebase_bank[layer] = BYTE2(tilebase_address) - ldy.z layer - sta vera_tilebase_bank,y - // vera_tilebase_address[layer] = tilebase_address - ldy.z __18 - lda.z tilebase_address - sta vera_tilebase_address,y - lda.z tilebase_address+1 - sta vera_tilebase_address+1,y - lda.z tilebase_address+2 - sta vera_tilebase_address+2,y - lda.z tilebase_address+3 - sta vera_tilebase_address+3,y - // tilebase_address = tilebase_address >> 1 - lsr.z tilebase_address+3 - ror.z tilebase_address+2 - ror.z tilebase_address+1 - ror.z tilebase_address - // byte tilebase = BYTE1(tilebase_address) - lda.z tilebase_address+1 - // tilebase &= VERA_LAYER_TILEBASE_MASK - and #VERA_LAYER_TILEBASE_MASK - tax - // case 8: - // tilebase |= VERA_TILEBASE_WIDTH_8; - // break; - lda #8 - cmp.z tilewidth - beq __b19 - // case 16: - // tilebase |= VERA_TILEBASE_WIDTH_16; - // break; - lda #$10 - cmp.z tilewidth - bne __b19 - // tilebase |= VERA_TILEBASE_WIDTH_16 - txa - ora #VERA_TILEBASE_WIDTH_16 - tax - __b19: - // case 8: - // tilebase |= VERA_TILEBASE_HEIGHT_8; - // break; - lda #8 - cmp.z tileheight - beq __b22 - // case 16: - // tilebase |= VERA_TILEBASE_HEIGHT_16; - // break; - lda #$10 - cmp.z tileheight - bne __b22 - // tilebase |= VERA_TILEBASE_HEIGHT_16 - txa - ora #VERA_TILEBASE_HEIGHT_16 - tax - __b22: - // vera_layer_set_tilebase(layer,tilebase) - lda.z layer - jsr vera_layer_set_tilebase - // } - rts - __b14: - // config |= VERA_LAYER_HEIGHT_128 - txa - ora #VERA_LAYER_HEIGHT_128 - tax - jmp __b16 - __b13: - // config |= VERA_LAYER_HEIGHT_64 - txa - ora #VERA_LAYER_HEIGHT_64 - tax - jmp __b16 - __b7: - // vera_layer_rowshift[layer] = 8 - lda #8 - ldy.z layer - sta vera_layer_rowshift,y - // vera_layer_rowskip[layer] = 256 - tya - asl - tay - lda #<$100 - sta vera_layer_rowskip,y - lda #>$100 - sta vera_layer_rowskip+1,y - ldx #VERA_LAYER_WIDTH_128 - jmp __b9 - __b6: - // vera_layer_rowshift[layer] = 7 - lda #7 - ldy.z layer - sta vera_layer_rowshift,y - // vera_layer_rowskip[layer] = 128 - tya - asl - tay - lda #$80 - sta vera_layer_rowskip,y - lda #0 - sta vera_layer_rowskip+1,y - ldx #VERA_LAYER_WIDTH_64 - jmp __b9 - __b5: - // vera_layer_rowshift[layer] = 6 - lda #6 - ldy.z layer - sta vera_layer_rowshift,y - // vera_layer_rowskip[layer] = 64 - tya - asl - tay - lda #$40 - sta vera_layer_rowskip,y - lda #0 - sta vera_layer_rowskip+1,y - jmp __b1 -} -// Set a vera layer in bitmap mode and configure the: -// - layer: Value of 0 or 1. -// - mapbase_address: A dword typed address (4 bytes), that specifies the full address of the map base. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective mapbase vera register. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// - tilebase_address: A dword typed address (4 bytes), that specifies the base address of the tile map. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective tilebase vera register. -// Note that the resulting vera register holds only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// - mapwidth: The width of the map in number of tiles. -// - mapheight: The height of the map in number of tiles. -// - tilewidth: The width of a tile, which can be 8 or 16 pixels. -// - tileheight: The height of a tile, which can be 8 or 16 pixels. -// - color_mode: The color mode, which can be 16 or 256. -// void vera_layer_mode_bitmap(char layer, unsigned long bitmap_address, unsigned int mapwidth, unsigned int color_depth) -vera_layer_mode_bitmap: { - .const layer = 0 - .const bitmap_address = 0 - // config - .const config = VERA_LAYER_COLOR_DEPTH_8BPP|VERA_LAYER_CONFIG_MODE_BITMAP - .const tilebase = 0 - // vera_tilebase_offset[layer] = WORD0(bitmap_address) - // tilebase - lda #<0 - sta vera_tilebase_offset - sta vera_tilebase_offset+1 - // vera_tilebase_bank[layer] = BYTE2(bitmap_address) - sta vera_tilebase_bank - // vera_tilebase_address[layer] = bitmap_address - lda #bitmap_address - sta vera_tilebase_address+1 - lda #>$10 - sta vera_tilebase_address+2 - lda #>bitmap_address>>$10 - sta vera_tilebase_address+3 - // *VERA_DC_HSCALE = 64 - lda #$40 - sta VERA_DC_HSCALE - // *VERA_DC_VSCALE = 64 - sta VERA_DC_VSCALE - // vera_layer_set_config(layer, config) - ldx #config - lda #layer - jsr vera_layer_set_config - // vera_layer_set_tilebase(layer,tilebase) - ldx #tilebase - lda #layer - jsr vera_layer_set_tilebase - // } - rts -} -// clears the screen and moves the cursor to the upper left-hand corner of the screen. -clrscr: { - .label __1 = $87 - .label line_text = $70 - .label color = $87 - // char* line_text = CONIO_SCREEN_TEXT - lda.z CONIO_SCREEN_TEXT_1 - sta.z line_text - lda.z CONIO_SCREEN_TEXT_1+1 - sta.z line_text+1 - // vera_layer_get_backcolor(conio_screen_layer) - ldx.z conio_screen_layer - jsr vera_layer_get_backcolor - // vera_layer_get_backcolor(conio_screen_layer) << 4 - asl - asl - asl - asl - sta.z __1 - // vera_layer_get_textcolor(conio_screen_layer) - ldx.z conio_screen_layer - jsr vera_layer_get_textcolor - // char color = ( vera_layer_get_backcolor(conio_screen_layer) << 4 ) | vera_layer_get_textcolor(conio_screen_layer) - ora.z color - sta.z color - ldx #0 - __b1: - // for( char l=0;laddress - sta.z __bitmap_address+1 - lda #

>$10 - sta.z __bitmap_address+2 - lda #>address>>$10 - sta.z __bitmap_address+3 - // __bitmap_layer = layer - lda #layer - sta.z __bitmap_layer - // vera_layer_get_color_depth(__bitmap_layer) - // byte* config = vera_layer_config[layer] - asl - tay - lda vera_layer_config,y - sta.z vera_layer_get_color_depth1_config - lda vera_layer_config+1,y - sta.z vera_layer_get_color_depth1_config+1 - // *config & VERA_LAYER_COLOR_DEPTH_MASK - lda #VERA_LAYER_COLOR_DEPTH_MASK - ldy #0 - and (vera_layer_get_color_depth1_config),y - // return (*config & VERA_LAYER_COLOR_DEPTH_MASK); - // } - // vera_layer_get_color_depth(__bitmap_layer) - // __bitmap_color_depth = vera_layer_get_color_depth(__bitmap_layer) - sta.z __bitmap_color_depth - // vera_display_get_hscale() - jsr vera_display_get_hscale - // vera_display_get_hscale() - // __bitmap_hscale = vera_display_get_hscale() - stx.z __bitmap_hscale - // vera_display_get_vscale() - jsr vera_display_get_vscale - // vera_display_get_vscale() - // __bitmap_vscale = vera_display_get_vscale() - // Returns 1 when 640 and 2 when 320. - stx.z __bitmap_vscale - // byte bitmask = bitmasks[__bitmap_color_depth] - // Returns 1 when 480 and 2 when 240. - ldy.z __bitmap_color_depth - lda bitmasks,y - sta.z bitmask - // signed byte bitshift = bitshifts[__bitmap_color_depth] - lda bitshifts,y - sta.z bitshift - lda #<0 - sta.z x - sta.z x+1 - __b1: - // if(__bitmap_color_depth==0) - lda.z __bitmap_color_depth - bne __b2 - // x >> 3 - lda.z x+1 - lsr - sta.z __7+1 - lda.z x - ror - sta.z __7 - lsr.z __7+1 - ror.z __7 - lsr.z __7+1 - ror.z __7 - // __bitmap_plot_x[x] = (x >> 3) - lda.z x - asl - sta.z __23 - lda.z x+1 - rol - sta.z __23+1 - lda.z __29 - clc - adc #<__bitmap_plot_x - sta.z __29 - lda.z __29+1 - adc #>__bitmap_plot_x - sta.z __29+1 - ldy #0 - lda.z __7 - sta (__29),y - iny - lda.z __7+1 - sta (__29),y - // __bitmap_plot_bitmask[x] = bitmask - lda.z x - clc - adc #<__bitmap_plot_bitmask - sta.z __30 - lda.z x+1 - adc #>__bitmap_plot_bitmask - sta.z __30+1 - lda.z bitmask - ldy #0 - sta (__30),y - // __bitmap_plot_bitshift[x] = (byte)bitshift - lda.z x - clc - adc #<__bitmap_plot_bitshift - sta.z __31 - lda.z x+1 - adc #>__bitmap_plot_bitshift - sta.z __31+1 - lda.z bitshift - sta (__31),y - // bitshift -= 1 - dec.z bitshift - // bitmask >>= 1 - lsr.z bitmask - __b2: - // if(__bitmap_color_depth==1) - lda #1 - cmp.z __bitmap_color_depth - bne __b3 - // x >> 2 - lda.z x+1 - lsr - sta.z __10+1 - lda.z x - ror - sta.z __10 - lsr.z __10+1 - ror.z __10 - // __bitmap_plot_x[x] = (x >> 2) - lda.z x - asl - sta.z __24 - lda.z x+1 - rol - sta.z __24+1 - lda.z __32 - clc - adc #<__bitmap_plot_x - sta.z __32 - lda.z __32+1 - adc #>__bitmap_plot_x - sta.z __32+1 - ldy #0 - lda.z __10 - sta (__32),y - iny - lda.z __10+1 - sta (__32),y - // __bitmap_plot_bitmask[x] = bitmask - lda.z x - clc - adc #<__bitmap_plot_bitmask - sta.z __33 - lda.z x+1 - adc #>__bitmap_plot_bitmask - sta.z __33+1 - lda.z bitmask - ldy #0 - sta (__33),y - // __bitmap_plot_bitshift[x] = (byte)bitshift - lda.z x - clc - adc #<__bitmap_plot_bitshift - sta.z __34 - lda.z x+1 - adc #>__bitmap_plot_bitshift - sta.z __34+1 - lda.z bitshift - sta (__34),y - // bitshift -= 2 - dec.z bitshift - dec.z bitshift - // bitmask >>= 2 - lda.z bitmask - lsr - lsr - sta.z bitmask - __b3: - // if(__bitmap_color_depth==2) - lda #2 - cmp.z __bitmap_color_depth - bne __b4 - // x >> 1 - lda.z x+1 - lsr - sta.z __13+1 - lda.z x - ror - sta.z __13 - // __bitmap_plot_x[x] = (x >> 1) - lda.z x - asl - sta.z __25 - lda.z x+1 - rol - sta.z __25+1 - lda.z __35 - clc - adc #<__bitmap_plot_x - sta.z __35 - lda.z __35+1 - adc #>__bitmap_plot_x - sta.z __35+1 - ldy #0 - lda.z __13 - sta (__35),y - iny - lda.z __13+1 - sta (__35),y - // __bitmap_plot_bitmask[x] = bitmask - lda.z x - clc - adc #<__bitmap_plot_bitmask - sta.z __36 - lda.z x+1 - adc #>__bitmap_plot_bitmask - sta.z __36+1 - lda.z bitmask - ldy #0 - sta (__36),y - // __bitmap_plot_bitshift[x] = (byte)bitshift - lda.z x - clc - adc #<__bitmap_plot_bitshift - sta.z __37 - lda.z x+1 - adc #>__bitmap_plot_bitshift - sta.z __37+1 - lda.z bitshift - sta (__37),y - // bitshift -= 4 - sec - sbc #4 - sta.z bitshift - // bitmask >>= 4 - lda.z bitmask - lsr - lsr - lsr - lsr - sta.z bitmask - __b4: - // if(__bitmap_color_depth==3) - lda #3 - cmp.z __bitmap_color_depth - bne __b5 - // __bitmap_plot_x[x] = x - lda.z x - asl - sta.z __26 - lda.z x+1 - rol - sta.z __26+1 - lda.z __38 - clc - adc #<__bitmap_plot_x - sta.z __38 - lda.z __38+1 - adc #>__bitmap_plot_x - sta.z __38+1 - ldy #0 - lda.z x - sta (__38),y - iny - lda.z x+1 - sta (__38),y - // __bitmap_plot_bitmask[x] = bitmask - lda.z x - clc - adc #<__bitmap_plot_bitmask - sta.z __39 - lda.z x+1 - adc #>__bitmap_plot_bitmask - sta.z __39+1 - lda.z bitmask - ldy #0 - sta (__39),y - // __bitmap_plot_bitshift[x] = (byte)bitshift - lda.z x - clc - adc #<__bitmap_plot_bitshift - sta.z __40 - lda.z x+1 - adc #>__bitmap_plot_bitshift - sta.z __40+1 - lda.z bitshift - sta (__40),y - __b5: - // if(bitshift<0) - lda.z bitshift - cmp #0 - bpl __b6 - // bitshift = bitshifts[__bitmap_color_depth] - ldy.z __bitmap_color_depth - lda bitshifts,y - sta.z bitshift - __b6: - // if(bitmask==0) - lda.z bitmask - bne __b7 - // bitmask = bitmasks[__bitmap_color_depth] - ldy.z __bitmap_color_depth - lda bitmasks,y - sta.z bitmask - __b7: - // for(word x : 0..639) - inc.z x - bne !+ - inc.z x+1 - !: - lda.z x+1 - cmp #>$280 - beq !__b1+ - jmp __b1 - !__b1: - lda.z x - cmp #<$280 - beq !__b1+ - jmp __b1 - !__b1: - // __bitmap_color_depth<<2 - lda.z __bitmap_color_depth - asl - asl - // (__bitmap_color_depth<<2)+__bitmap_hscale - clc - adc.z __bitmap_hscale - // word hdelta = hdeltas[(__bitmap_color_depth<<2)+__bitmap_hscale] - asl - // This sets the right delta to skip a whole line based on the scale, depending on the color depth. - tay - lda hdeltas,y - sta.z hdelta - lda hdeltas+1,y - sta.z hdelta+1 - // dword yoffs = __bitmap_address - // We start at the bitmap address; The plot_y contains the bitmap address embedded so we know where a line starts. - lda.z __bitmap_address - sta.z yoffs - lda.z __bitmap_address+1 - sta.z yoffs+1 - lda.z __bitmap_address+2 - sta.z yoffs+2 - lda.z __bitmap_address+3 - sta.z yoffs+3 - lda #<0 - sta.z y - sta.z y+1 - __b15: - // __bitmap_plot_y[y] = yoffs - lda.z y - asl - sta.z __28 - lda.z y+1 - rol - sta.z __28+1 - asl.z __28 - rol.z __28+1 - lda.z __41 - clc - adc #<__bitmap_plot_y - sta.z __41 - lda.z __41+1 - adc #>__bitmap_plot_y - sta.z __41+1 - ldy #0 - lda.z yoffs - sta (__41),y - iny - lda.z yoffs+1 - sta (__41),y - iny - lda.z yoffs+2 - sta (__41),y - iny - lda.z yoffs+3 - sta (__41),y - // yoffs = yoffs + hdelta - lda.z yoffs - clc - adc.z hdelta - sta.z yoffs - lda.z yoffs+1 - adc.z hdelta+1 - sta.z yoffs+1 - lda.z yoffs+2 - adc #0 - sta.z yoffs+2 - lda.z yoffs+3 - adc #0 - sta.z yoffs+3 - // for(word y : 0..479) - inc.z y - bne !+ - inc.z y+1 - !: - lda.z y+1 - cmp #>$1e0 - bne __b15 - lda.z y - cmp #<$1e0 - bne __b15 - // } - rts -} -// Clear all graphics on the bitmap -bitmap_clear: { - .label vdelta = $a1 - .label hdelta = $9d - .label count = $72 - .label vdest = $91 - // word vdelta = vdeltas[__bitmap_vscale] - lda.z __bitmap_vscale - asl - tay - lda vdeltas,y - sta.z vdelta - lda vdeltas+1,y - sta.z vdelta+1 - // __bitmap_color_depth<<2 - lda.z __bitmap_color_depth - asl - asl - // (__bitmap_color_depth<<2)+__bitmap_hscale - clc - adc.z __bitmap_hscale - // word hdelta = hdeltas[(__bitmap_color_depth<<2)+__bitmap_hscale] - asl - tay - lda hdeltas,y - sta.z hdelta - lda hdeltas+1,y - sta.z hdelta+1 - // dword count = mul16u(hdelta,vdelta) - lda.z hdelta - sta.z mul16u.a - lda.z hdelta+1 - sta.z mul16u.a+1 - jsr mul16u - lda.z mul16u.res - sta.z mul16u.return - lda.z mul16u.res+1 - sta.z mul16u.return+1 - lda.z mul16u.res+2 - sta.z mul16u.return+2 - lda.z mul16u.res+3 - sta.z mul16u.return+3 - // char vbank = BYTE2(__bitmap_address) - ldx.z __bitmap_address+2 - // WORD0(__bitmap_address) - lda.z __bitmap_address - sta.z vdest - lda.z __bitmap_address+1 - sta.z vdest+1 - // memset_vram(vbank, vdest, 0, count) - jsr memset_vram - // } - rts -} -// Return true if there's a key waiting, return false if not -kbhit: { - .label chptr = ch - .label IN_DEV = $28a - // Current input device number - .label GETIN = $ffe4 - .label ch = $32 - // char ch = 0 - lda #0 - sta.z ch - // kickasm - // CBM GETIN API - jsr _kbhit - bne L3 - - jmp continue1 - - .var via1 = $9f60 //VIA#1 - .var d1pra = via1+1 - - _kbhit: - ldy d1pra // The count of keys pressed is stored in RAM bank 0. - stz d1pra // Set d1pra to zero to access RAM bank 0. - lda $A00A // Get number of characters from this address in the ROM of the CX16 (ROM 38). - sty d1pra // Set d1pra to previous value. - rts - - L3: - ldy IN_DEV // Save current input device - stz IN_DEV // Keyboard - phy - jsr GETIN // Read char, and return in .A - ply - sta chptr // Store the character read in ch - sty IN_DEV // Restore input device - ldx #>$0000 - rts - - continue1: - nop - - // return ch; - lda.z ch - // } - rts -} -// Draw a line on the bitmap -// void bitmap_line(__zp(6) unsigned int x0, __zp($a) unsigned int x1, __zp(8) unsigned int y0, __zp(2) unsigned int y1, __register(X) char c) -bitmap_line: { - .label xd = $22 - .label yd = $29 - .label yd_1 = $27 - .label x0 = 6 - .label x1 = $a - .label y0 = 8 - .label y1 = 2 - // if(x0> 9 - lsr - sta.z __1 - lda #0 - sta.z __1+1 - // rand_state ^= rand_state >> 9 - lda.z rand_state - eor.z __1 - sta.z rand_state - lda.z rand_state+1 - eor.z __1+1 - sta.z rand_state+1 - // rand_state << 8 - lda.z rand_state - sta.z __2+1 - lda #0 - sta.z __2 - // rand_state ^= rand_state << 8 - lda.z rand_state - eor.z __2 - sta.z rand_state - lda.z rand_state+1 - eor.z __2+1 - sta.z rand_state+1 - // return rand_state; - lda.z rand_state - sta.z return - lda.z rand_state+1 - sta.z return+1 - // } - rts -} -// Performs modulo on two 16 bit unsigned ints and an initial remainder -// Returns the remainder. -// Implemented using simple binary division -// __zp($76) unsigned int modr16u(__zp(2) unsigned int dividend, __zp($8f) unsigned int divisor, unsigned int rem) -modr16u: { - .label return = $76 - .label dividend = 2 - .label divisor = $8f - // divr16u(dividend, divisor, rem) - lda.z divisor - sta.z divr16u.divisor - lda.z divisor+1 - sta.z divr16u.divisor+1 - jsr divr16u - // return rem16u; - lda.z rem16u - sta.z return - lda.z rem16u+1 - sta.z return+1 - // } - rts -} -// Set the configuration of the layer text color mode. -// - layer: Value of 0 or 1. -// - color_mode: Specifies the color mode to be VERA_LAYER_CONFIG_16 or VERA_LAYER_CONFIG_256 for text mode. -// void vera_layer_set_text_color_mode(char layer, char color_mode) -vera_layer_set_text_color_mode: { - .label addr = $25 - // byte* addr = vera_layer_config[layer] - lda vera_layer_config+vera_layer_mode_text.layer*SIZEOF_POINTER - sta.z addr - lda vera_layer_config+vera_layer_mode_text.layer*SIZEOF_POINTER+1 - sta.z addr+1 - // *addr &= ~VERA_LAYER_CONFIG_256C - lda #VERA_LAYER_CONFIG_256C^$ff - ldy #0 - and (addr),y - sta (addr),y - // *addr |= color_mode - lda (addr),y - sta (addr),y - // } - rts -} -// Get the map base bank of the tiles for the layer. -// - layer: Value of 0 or 1. -// - return: Bank in vera vram. -// __register(A) char vera_layer_get_mapbase_bank(__register(X) char layer) -vera_layer_get_mapbase_bank: { - // return vera_mapbase_bank[layer]; - lda vera_mapbase_bank,x - // } - rts -} -// Get the map base lower 16-bit address (offset) of the tiles for the layer. -// - layer: Value of 0 or 1. -// - return: Offset in vera vram of the specified bank. -// __zp($8d) unsigned int vera_layer_get_mapbase_offset(__register(A) char layer) -vera_layer_get_mapbase_offset: { - .label return = $8d - // return vera_mapbase_offset[layer]; - asl - tay - lda vera_mapbase_offset,y - sta.z return - lda vera_mapbase_offset+1,y - sta.z return+1 - // } - rts -} -// Get the bit shift value required to skip a whole line fast. -// - layer: Value of 0 or 1. -// - return: Rowshift value to calculate fast from a y value to line offset in tile mode. -// __register(A) char vera_layer_get_rowshift(__register(X) char layer) -vera_layer_get_rowshift: { - // return vera_layer_rowshift[layer]; - lda vera_layer_rowshift,x - // } - rts -} -// Get the value required to skip a whole line fast. -// - layer: Value of 0 or 1. -// - return: Skip value to calculate fast from a y value to line offset in tile mode. -// __zp($7f) unsigned int vera_layer_get_rowskip(__register(A) char layer) -vera_layer_get_rowskip: { - .label return = $7f - // return vera_layer_rowskip[layer]; - asl - tay - lda vera_layer_rowskip,y - sta.z return - lda vera_layer_rowskip+1,y - sta.z return+1 - // } - rts -} -// Scroll the entire screen if the cursor is beyond the last line -cscroll: { - // if(conio_cursor_y[conio_screen_layer]>=CONIO_HEIGHT) - ldy.z conio_screen_layer - lda conio_cursor_y,y - cmp.z conio_screen_height - bcc __b3 - // if(conio_scroll_enable[conio_screen_layer]) - lda conio_scroll_enable,y - cmp #0 - bne __b4 - // if(conio_cursor_y[conio_screen_layer]>=conio_height) - lda conio_cursor_y,y - ldy.z conio_height+1 - bne __b3 - cmp.z conio_height - __b3: - // } - rts - __b4: - // insertup() - jsr insertup - // gotoxy( 0, CONIO_HEIGHT-1) - ldx.z conio_screen_height - dex - jsr gotoxy - rts -} -// Set the configuration of the layer. -// - layer: Value of 0 or 1. -// - config: Specifies the modes which are specified using T256C / 'Bitmap Mode' / 'Color Depth'. -// void vera_layer_set_config(__register(A) char layer, __register(X) char config) -vera_layer_set_config: { - .label addr = $25 - // byte* addr = vera_layer_config[layer] - asl - tay - lda vera_layer_config,y - sta.z addr - lda vera_layer_config+1,y - sta.z addr+1 - // *addr = config - txa - ldy #0 - sta (addr),y - // } - rts -} -// Set the base of the tiles for the layer with which the conio will interact. -// - layer: Value of 0 or 1. -// - tilebase: Specifies the base address of the tile map. -// Note that the register only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// void vera_layer_set_tilebase(__register(A) char layer, __register(X) char tilebase) -vera_layer_set_tilebase: { - .label addr = $25 - // byte* addr = vera_layer_tilebase[layer] - asl - tay - lda vera_layer_tilebase,y - sta.z addr - lda vera_layer_tilebase+1,y - sta.z addr+1 - // *addr = tilebase - txa - ldy #0 - sta (addr),y - // } - rts -} -// Get the back color for text output. The old back text color setting is returned. -// - layer: Value of 0 or 1. -// - return: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_backcolor(__register(X) char layer) -vera_layer_get_backcolor: { - // return vera_layer_backcolor[layer]; - lda vera_layer_backcolor,x - // } - rts -} -// Get the front color for text output. The old front text color setting is returned. -// - layer: Value of 0 or 1. -// - return: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_textcolor(__register(X) char layer) -vera_layer_get_textcolor: { - // return vera_layer_textcolor[layer]; - lda vera_layer_textcolor,x - // } - rts -} -vera_display_get_hscale: { - .const scale = 0 - ldx #1 - __b1: - // if(*VERA_DC_HSCALE==hscale[s]) - lda hscale,x - cmp VERA_DC_HSCALE - bne __b2 - rts - __b2: - // for(byte s:1..3) - inx - cpx #4 - bne __b1 - ldx #scale - // } - rts - .segment Data - hscale: .byte 0, $80, $40, $20 -} -.segment Code -vera_display_get_vscale: { - .const scale = 0 - ldx #1 - __b1: - // if(*VERA_DC_VSCALE==vscale[s]) - lda vscale,x - cmp VERA_DC_VSCALE - bne __b2 - rts - __b2: - // for(byte s:1..3) - inx - cpx #4 - bne __b1 - ldx #scale - // } - rts - .segment Data - vscale: .byte 0, $80, $40, $20 -} -.segment Code -// Perform binary multiplication of two unsigned 16-bit unsigned ints into a 32-bit unsigned long -// __zp($72) unsigned long mul16u(__zp(2) unsigned int a, __zp($a1) unsigned int b) -mul16u: { - .label a = 2 - .label b = $a1 - .label return = $72 - .label mb = $1a - .label res = $10 - // unsigned long mb = b - lda.z b - sta.z mb - lda.z b+1 - sta.z mb+1 - lda #0 - sta.z mb+2 - sta.z mb+3 - sta.z res - sta.z res+1 - lda #<0>>$10 - sta.z res+2 - lda #>0>>$10 - sta.z res+3 - __b1: - // while(a!=0) - lda.z a - ora.z a+1 - bne __b2 - // } - rts - __b2: - // a&1 - lda #1 - and.z a - // if( (a&1) != 0) - cmp #0 - beq __b3 - // res = res + mb - clc - lda.z res - adc.z mb - sta.z res - lda.z res+1 - adc.z mb+1 - sta.z res+1 - lda.z res+2 - adc.z mb+2 - sta.z res+2 - lda.z res+3 - adc.z mb+3 - sta.z res+3 - __b3: - // a = a>>1 - lsr.z a+1 - ror.z a - // mb = mb<<1 - asl.z mb - rol.z mb+1 - rol.z mb+2 - rol.z mb+3 - jmp __b1 -} -// Set block of memory to a value in VRAM. -// Sets num bytes to a value to the memory block pointed to by destination in VRAM. -// - vbank: Which 64K VRAM bank to put data into (0/1) -// - vdest: The destination address in VRAM -// - data: The value to set the vram with. -// - num: The number of bytes to set -// void memset_vram(__register(X) char vbank, __zp($91) void *vdest, char data, __zp($72) unsigned long num) -memset_vram: { - .const data = 0 - .label i = $10 - .label vdest = $91 - .label num = $72 - // *VERA_CTRL &= ~VERA_ADDRSEL - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // BYTE0(vdest) - lda.z vdest - // *VERA_ADDRX_L = BYTE0(vdest) - // Set address - sta VERA_ADDRX_L - // BYTE1(vdest) - lda.z vdest+1 - // *VERA_ADDRX_M = BYTE1(vdest) - sta VERA_ADDRX_M - // VERA_INC_1 | vbank - txa - ora #VERA_INC_1 - // *VERA_ADDRX_H = VERA_INC_1 | vbank - sta VERA_ADDRX_H - lda #<0 - sta.z i - sta.z i+1 - lda #<0>>$10 - sta.z i+2 - lda #>0>>$10 - sta.z i+3 - // Transfer the data - __b1: - // for(unsigned long i = 0; i>1 - lda.z xd+1 - lsr - sta.z e+1 - lda.z xd - ror - sta.z e - __b1: - // bitmap_plot(x,y,c) - lda.z x - sta.z bitmap_plot.x - lda.z x+1 - sta.z bitmap_plot.x+1 - ldx.z c - jsr bitmap_plot - // y++; - inc.z y - bne !+ - inc.z y+1 - !: - // e = e+xd - clc - lda.z e - adc.z xd - sta.z e - lda.z e+1 - adc.z xd+1 - sta.z e+1 - // if(yd>1 - lda.z yd+1 - lsr - sta.z e+1 - lda.z yd - ror - sta.z e - __b1: - // bitmap_plot(x,y,c) - lda.z y - sta.z bitmap_plot.y - lda.z y+1 - sta.z bitmap_plot.y+1 - ldx.z c - jsr bitmap_plot - // x++; - inc.z x - bne !+ - inc.z x+1 - !: - // e = e+yd - clc - lda.z e - adc.z yd - sta.z e - lda.z e+1 - adc.z yd+1 - sta.z e+1 - // if(xd>1 - lda.z xd+1 - lsr - sta.z e+1 - lda.z xd - ror - sta.z e - __b1: - // bitmap_plot(x,y,c) - lda.z x - sta.z bitmap_plot.x - lda.z x+1 - sta.z bitmap_plot.x+1 - ldx.z c - jsr bitmap_plot - // y = y++; - inc.z y - bne !+ - inc.z y+1 - !: - // e = e+xd - clc - lda.z e - adc.z xd - sta.z e - lda.z e+1 - adc.z xd+1 - sta.z e+1 - // if(yd>1 - lda.z yd+1 - lsr - sta.z e+1 - lda.z yd - ror - sta.z e - __b1: - // bitmap_plot(x,y,c) - lda.z y - sta.z bitmap_plot.y - lda.z y+1 - sta.z bitmap_plot.y+1 - ldx.z c - jsr bitmap_plot - // x++; - inc.z x - bne !+ - inc.z x+1 - !: - // e = e+yd - clc - lda.z e - adc.z yd - sta.z e - lda.z e+1 - adc.z yd+1 - sta.z e+1 - // if(xd=divisor) - lda.z rem+1 - cmp.z divisor+1 - bcc __b3 - bne !+ - lda.z rem - cmp.z divisor - bcc __b3 - !: - // quotient++; - inc.z quotient - bne !+ - inc.z quotient+1 - !: - // rem = rem - divisor - lda.z rem - sec - sbc.z divisor - sta.z rem - lda.z rem+1 - sbc.z divisor+1 - sta.z rem+1 - __b3: - // for( char i : 0..15) - inx - cpx #$10 - bne __b1 - // rem16u = rem - lda.z rem - sta.z rem16u - lda.z rem+1 - sta.z rem16u+1 - // } - rts -} -// Insert a new line, and scroll the upper part of the screen up. -insertup: { - .label cy = $21 - .label width = $20 - .label line = $a - .label start = $a - // unsigned byte cy = conio_cursor_y[conio_screen_layer] - ldy.z conio_screen_layer - lda conio_cursor_y,y - sta.z cy - // unsigned byte width = CONIO_WIDTH * 2 - lda.z conio_screen_width - asl - sta.z width - ldx #1 - __b1: - // for(unsigned byte i=1; i<=cy; i++) - lda.z cy - stx.z $ff - cmp.z $ff - bcs __b2 - // clearline() - jsr clearline - // } - rts - __b2: - // i-1 - txa - sec - sbc #1 - // unsigned int line = (i-1) << conio_rowshift - ldy.z conio_rowshift - sta.z line - lda #0 - sta.z line+1 - cpy #0 - beq !e+ - !: - asl.z line - rol.z line+1 - dey - bne !- - !e: - // unsigned char* start = CONIO_SCREEN_TEXT + line - clc - lda.z start - adc.z CONIO_SCREEN_TEXT - sta.z start - lda.z start+1 - adc.z CONIO_SCREEN_TEXT+1 - sta.z start+1 - // start+conio_rowskip - lda.z start - clc - adc.z conio_rowskip - sta.z memcpy_in_vram.src - lda.z start+1 - adc.z conio_rowskip+1 - sta.z memcpy_in_vram.src+1 - // memcpy_in_vram(0, start, VERA_INC_1, 0, start+conio_rowskip, VERA_INC_1, width) - lda.z width - sta.z memcpy_in_vram.num - lda #0 - sta.z memcpy_in_vram.num+1 - // memcpy_in_vram(0, start, VERA_INC_1, 0, start+conio_rowskip, VERA_INC_1, width) - tay - jsr memcpy_in_vram - // for(unsigned byte i=1; i<=cy; i++) - inx - jmp __b1 -} -// void bitmap_plot(__zp($1e) unsigned int x, __zp(4) unsigned int y, __register(X) char c) -bitmap_plot: { - .label __9 = $e - .label __10 = $c - .label plot_x = $1a - .label plot_y = $10 - .label vera_vram_address01_bankaddr = $1a - .label x = $1e - .label y = 4 - .label __12 = $e - .label __13 = $c - .label __14 = $14 - .label __15 = $16 - // dword plot_x = __bitmap_plot_x[x] - lda.z x - asl - sta.z __9 - lda.z x+1 - rol - sta.z __9+1 - lda.z __12 - clc - adc #<__bitmap_plot_x - sta.z __12 - lda.z __12+1 - adc #>__bitmap_plot_x - sta.z __12+1 - // Needs unsigned int arrays arranged as two underlying char arrays to allow char* plotter_x = plot_x[x]; - and eventually - char* plotter = plot_x[x] + plot_y[y]; - ldy #0 - sty.z plot_x+2 - sty.z plot_x+3 - lda (__12),y - sta.z plot_x - iny - lda (__12),y - sta.z plot_x+1 - // dword plot_y = __bitmap_plot_y[y] - lda.z y - asl - sta.z __10 - lda.z y+1 - rol - sta.z __10+1 - asl.z __10 - rol.z __10+1 - lda.z __13 - clc - adc #<__bitmap_plot_y - sta.z __13 - lda.z __13+1 - adc #>__bitmap_plot_y - sta.z __13+1 - ldy #0 - lda (__13),y - sta.z plot_y - iny - lda (__13),y - sta.z plot_y+1 - iny - lda (__13),y - sta.z plot_y+2 - iny - lda (__13),y - sta.z plot_y+3 - // dword plotter = plot_x+plot_y - clc - lda.z vera_vram_address01_bankaddr - adc.z plot_y - sta.z vera_vram_address01_bankaddr - lda.z vera_vram_address01_bankaddr+1 - adc.z plot_y+1 - sta.z vera_vram_address01_bankaddr+1 - lda.z vera_vram_address01_bankaddr+2 - adc.z plot_y+2 - sta.z vera_vram_address01_bankaddr+2 - lda.z vera_vram_address01_bankaddr+3 - adc.z plot_y+3 - sta.z vera_vram_address01_bankaddr+3 - // byte bitshift = __bitmap_plot_bitshift[x] - lda.z x - clc - adc #<__bitmap_plot_bitshift - sta.z __14 - lda.z x+1 - adc #>__bitmap_plot_bitshift - sta.z __14+1 - ldy #0 - lda (__14),y - // bitshift?c<<(bitshift):c - cmp #0 - bne __b1 - jmp __b2 - __b1: - tay - txa - cpy #0 - beq !e+ - !: - asl - dey - bne !- - !e: - tax - __b2: - // *VERA_CTRL &= ~VERA_ADDRSEL - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // BYTE0(bankaddr) - lda.z vera_vram_address01_bankaddr - // *VERA_ADDRX_L = BYTE0(bankaddr) - sta VERA_ADDRX_L - // BYTE1(bankaddr) - lda.z vera_vram_address01_bankaddr+1 - // *VERA_ADDRX_M = BYTE1(bankaddr) - sta VERA_ADDRX_M - // BYTE2(bankaddr) | incr - lda.z vera_vram_address01_bankaddr+2 - // *VERA_ADDRX_H = BYTE2(bankaddr) | incr - sta VERA_ADDRX_H - // ~__bitmap_plot_bitmask[x] - lda.z x - clc - adc #<__bitmap_plot_bitmask - sta.z __15 - lda.z x+1 - adc #>__bitmap_plot_bitmask - sta.z __15+1 - ldy #0 - lda (__15),y - eor #$ff - // *VERA_DATA0 & ~__bitmap_plot_bitmask[x] - and VERA_DATA0 - // (*VERA_DATA0 & ~__bitmap_plot_bitmask[x]) | c - stx.z $ff - ora.z $ff - // *VERA_DATA0 = (*VERA_DATA0 & ~__bitmap_plot_bitmask[x]) | c - sta VERA_DATA0 - // } - rts -} -clearline: { - .label addr = $e - .label c = 4 - // *VERA_CTRL &= ~VERA_ADDRSEL - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // byte* addr = CONIO_SCREEN_TEXT + conio_line_text[conio_screen_layer] - lda.z conio_screen_layer - asl - // Set address - tay - clc - lda.z CONIO_SCREEN_TEXT - adc conio_line_text,y - sta.z addr - lda.z CONIO_SCREEN_TEXT+1 - adc conio_line_text+1,y - sta.z addr+1 - // BYTE0(addr) - lda.z addr - // *VERA_ADDRX_L = BYTE0(addr) - sta VERA_ADDRX_L - // BYTE1(addr) - lda.z addr+1 - // *VERA_ADDRX_M = BYTE1(addr) - sta VERA_ADDRX_M - // *VERA_ADDRX_H = VERA_INC_1 - lda #VERA_INC_1 - sta VERA_ADDRX_H - // char color = vera_layer_get_color( conio_screen_layer) - ldx.z conio_screen_layer - jsr vera_layer_get_color - // char color = vera_layer_get_color( conio_screen_layer) - tax - lda #<0 - sta.z c - sta.z c+1 - __b1: - // for( unsigned int c=0;c> 7 - [184] screensize::$1 = $28 << screensize::hscale#0 - [185] *screensize::x#0 = screensize::$1 - [186] screensize::vscale#0 = *VERA_DC_VSCALE >> 7 - [187] screensize::$3 = $1e << screensize::vscale#0 - [188] *screensize::y#0 = screensize::$3 - to:screensize::@return -screensize::@return: scope:[screensize] from screensize - [189] return - to:@return - -void screenlayer(char layer) -screenlayer: scope:[screenlayer] from conio_x16_init::@4 main::@14 main::@5 - [190] conio_screen_layer = 1 - [191] vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer - [192] call vera_layer_get_mapbase_bank - [193] vera_layer_get_mapbase_bank::return#2 = vera_layer_get_mapbase_bank::return#0 - to:screenlayer::@3 -screenlayer::@3: scope:[screenlayer] from screenlayer - [194] CONIO_SCREEN_BANK#15 = vera_layer_get_mapbase_bank::return#2 - [195] vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer - [196] call vera_layer_get_mapbase_offset - [197] vera_layer_get_mapbase_offset::return#2 = vera_layer_get_mapbase_offset::return#0 - to:screenlayer::@4 -screenlayer::@4: scope:[screenlayer] from screenlayer::@3 - [198] CONIO_SCREEN_TEXT#17 = vera_layer_get_mapbase_offset::return#2 - [199] screenlayer::vera_layer_get_width1_layer#0 = conio_screen_layer - to:screenlayer::vera_layer_get_width1 -screenlayer::vera_layer_get_width1: scope:[screenlayer] from screenlayer::@4 - [200] screenlayer::vera_layer_get_width1_$2 = screenlayer::vera_layer_get_width1_layer#0 << 1 - [201] screenlayer::vera_layer_get_width1_config#0 = vera_layer_config[screenlayer::vera_layer_get_width1_$2] - [202] screenlayer::vera_layer_get_width1_$0 = *screenlayer::vera_layer_get_width1_config#0 & VERA_LAYER_WIDTH_MASK - [203] screenlayer::vera_layer_get_width1_$1 = screenlayer::vera_layer_get_width1_$0 >> 4 - [204] screenlayer::vera_layer_get_width1_$3 = screenlayer::vera_layer_get_width1_$1 << 1 - [205] screenlayer::vera_layer_get_width1_return#0 = VERA_LAYER_WIDTH[screenlayer::vera_layer_get_width1_$3] - to:screenlayer::vera_layer_get_width1_@return -screenlayer::vera_layer_get_width1_@return: scope:[screenlayer] from screenlayer::vera_layer_get_width1 - [206] screenlayer::vera_layer_get_width1_return#1 = screenlayer::vera_layer_get_width1_return#0 - to:screenlayer::@1 -screenlayer::@1: scope:[screenlayer] from screenlayer::vera_layer_get_width1_@return - [207] screenlayer::$2 = screenlayer::vera_layer_get_width1_return#1 - [208] conio_width = screenlayer::$2 - [209] vera_layer_get_rowshift::layer#0 = conio_screen_layer - [210] call vera_layer_get_rowshift - [211] vera_layer_get_rowshift::return#2 = vera_layer_get_rowshift::return#0 - to:screenlayer::@5 -screenlayer::@5: scope:[screenlayer] from screenlayer::@1 - [212] screenlayer::$3 = vera_layer_get_rowshift::return#2 - [213] conio_rowshift = screenlayer::$3 - [214] vera_layer_get_rowskip::layer#0 = conio_screen_layer - [215] call vera_layer_get_rowskip - [216] vera_layer_get_rowskip::return#2 = vera_layer_get_rowskip::return#0 - to:screenlayer::@6 -screenlayer::@6: scope:[screenlayer] from screenlayer::@5 - [217] screenlayer::$4 = vera_layer_get_rowskip::return#2 - [218] conio_rowskip = screenlayer::$4 - [219] screenlayer::vera_layer_get_height1_layer#0 = conio_screen_layer - to:screenlayer::vera_layer_get_height1 -screenlayer::vera_layer_get_height1: scope:[screenlayer] from screenlayer::@6 - [220] screenlayer::vera_layer_get_height1_$2 = screenlayer::vera_layer_get_height1_layer#0 << 1 - [221] screenlayer::vera_layer_get_height1_config#0 = vera_layer_config[screenlayer::vera_layer_get_height1_$2] - [222] screenlayer::vera_layer_get_height1_$0 = *screenlayer::vera_layer_get_height1_config#0 & VERA_LAYER_HEIGHT_MASK - [223] screenlayer::vera_layer_get_height1_$1 = screenlayer::vera_layer_get_height1_$0 >> 6 - [224] screenlayer::vera_layer_get_height1_$3 = screenlayer::vera_layer_get_height1_$1 << 1 - [225] screenlayer::vera_layer_get_height1_return#0 = VERA_LAYER_HEIGHT[screenlayer::vera_layer_get_height1_$3] - to:screenlayer::vera_layer_get_height1_@return -screenlayer::vera_layer_get_height1_@return: scope:[screenlayer] from screenlayer::vera_layer_get_height1 - [226] screenlayer::vera_layer_get_height1_return#1 = screenlayer::vera_layer_get_height1_return#0 - to:screenlayer::@2 -screenlayer::@2: scope:[screenlayer] from screenlayer::vera_layer_get_height1_@return - [227] screenlayer::$5 = screenlayer::vera_layer_get_height1_return#1 - [228] conio_height = screenlayer::$5 - to:screenlayer::@return -screenlayer::@return: scope:[screenlayer] from screenlayer::@2 - [229] return - to:@return - -char vera_layer_set_textcolor(char layer , char color) -vera_layer_set_textcolor: scope:[vera_layer_set_textcolor] from conio_x16_init::@5 main::textcolor1 main::textcolor2 main::textcolor3 main::textcolor4 main::textcolor5 - [230] vera_layer_set_textcolor::color#6 = phi( conio_x16_init::@5/WHITE, main::textcolor1/WHITE, main::textcolor2/YELLOW, main::textcolor3/WHITE, main::textcolor4/YELLOW, main::textcolor5/WHITE ) - [230] vera_layer_set_textcolor::layer#6 = phi( conio_x16_init::@5/1, main::textcolor1/vera_layer_set_textcolor::layer#1, main::textcolor2/vera_layer_set_textcolor::layer#2, main::textcolor3/vera_layer_set_textcolor::layer#3, main::textcolor4/vera_layer_set_textcolor::layer#4, main::textcolor5/vera_layer_set_textcolor::layer#5 ) - [231] vera_layer_textcolor[vera_layer_set_textcolor::layer#6] = vera_layer_set_textcolor::color#6 - to:vera_layer_set_textcolor::@return -vera_layer_set_textcolor::@return: scope:[vera_layer_set_textcolor] from vera_layer_set_textcolor - [232] return - to:@return - -char vera_layer_set_backcolor(char layer , char color) -vera_layer_set_backcolor: scope:[vera_layer_set_backcolor] from conio_x16_init::@6 main::bgcolor1 main::bgcolor2 main::bgcolor3 - [233] vera_layer_set_backcolor::color#4 = phi( conio_x16_init::@6/BLUE, main::bgcolor1/BLACK, main::bgcolor2/BLACK, main::bgcolor3/BLUE ) - [233] vera_layer_set_backcolor::layer#4 = phi( conio_x16_init::@6/1, main::bgcolor1/vera_layer_set_backcolor::layer#1, main::bgcolor2/vera_layer_set_backcolor::layer#2, main::bgcolor3/vera_layer_set_backcolor::layer#3 ) - [234] vera_layer_backcolor[vera_layer_set_backcolor::layer#4] = vera_layer_set_backcolor::color#4 - to:vera_layer_set_backcolor::@return -vera_layer_set_backcolor::@return: scope:[vera_layer_set_backcolor] from vera_layer_set_backcolor - [235] return - to:@return - -void vera_layer_set_mapbase(char layer , char mapbase) -vera_layer_set_mapbase: scope:[vera_layer_set_mapbase] from conio_x16_init::@7 conio_x16_init::@8 vera_layer_mode_tile::@23 - [236] vera_layer_set_mapbase::mapbase#3 = phi( conio_x16_init::@7/$20, conio_x16_init::@8/0, vera_layer_mode_tile::@23/vera_layer_set_mapbase::mapbase#0 ) - [236] vera_layer_set_mapbase::layer#3 = phi( conio_x16_init::@7/0, conio_x16_init::@8/1, vera_layer_mode_tile::@23/vera_layer_set_mapbase::layer#0 ) - [237] vera_layer_set_mapbase::$0 = vera_layer_set_mapbase::layer#3 << 1 - [238] vera_layer_set_mapbase::addr#0 = vera_layer_mapbase[vera_layer_set_mapbase::$0] - [239] *vera_layer_set_mapbase::addr#0 = vera_layer_set_mapbase::mapbase#3 - to:vera_layer_set_mapbase::@return -vera_layer_set_mapbase::@return: scope:[vera_layer_set_mapbase] from vera_layer_set_mapbase - [240] return - to:@return - -void gotoxy(char x , char y) -gotoxy: scope:[gotoxy] from conio_x16_init::@1 cscroll::@5 main::@15 main::@21 main::@32 main::@34 - [241] gotoxy::y#7 = phi( conio_x16_init::@1/gotoxy::y#1, cscroll::@5/gotoxy::y#2, main::@15/$19, main::@21/$1d, main::@32/$1a, main::@34/$1d ) - [242] if(gotoxy::y#7<=conio_screen_height) goto gotoxy::@4 - to:gotoxy::@1 -gotoxy::@4: scope:[gotoxy] from gotoxy - [243] phi() - to:gotoxy::@1 -gotoxy::@1: scope:[gotoxy] from gotoxy gotoxy::@4 - [244] gotoxy::y#10 = phi( gotoxy::@4/gotoxy::y#7, gotoxy/0 ) - [245] if(0> 1 - [318] vera_layer_mode_tile::mapbase#0 = byte1 vera_layer_mode_tile::mapbase_address#0 - [319] vera_layer_set_mapbase::layer#0 = vera_layer_mode_tile::layer#10 - [320] vera_layer_set_mapbase::mapbase#0 = vera_layer_mode_tile::mapbase#0 - [321] call vera_layer_set_mapbase - to:vera_layer_mode_tile::@24 -vera_layer_mode_tile::@24: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@23 - [322] vera_layer_mode_tile::$6 = word0 vera_layer_mode_tile::tilebase_address#10 - [323] vera_tilebase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$6 - [324] vera_layer_mode_tile::$7 = byte2 vera_layer_mode_tile::tilebase_address#10 - [325] vera_tilebase_bank[vera_layer_mode_tile::layer#10] = vera_layer_mode_tile::$7 - [326] vera_tilebase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::tilebase_address#10 - [327] vera_layer_mode_tile::tilebase_address#0 = vera_layer_mode_tile::tilebase_address#10 >> 1 - [328] vera_layer_mode_tile::tilebase#0 = byte1 vera_layer_mode_tile::tilebase_address#0 - [329] vera_layer_mode_tile::tilebase#1 = vera_layer_mode_tile::tilebase#0 & VERA_LAYER_TILEBASE_MASK - [330] if(vera_layer_mode_tile::tilewidth#10==8) goto vera_layer_mode_tile::@19 - to:vera_layer_mode_tile::@17 -vera_layer_mode_tile::@17: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@24 - [331] if(vera_layer_mode_tile::tilewidth#10!=$10) goto vera_layer_mode_tile::@19 - to:vera_layer_mode_tile::@18 -vera_layer_mode_tile::@18: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@17 - [332] vera_layer_mode_tile::tilebase#3 = vera_layer_mode_tile::tilebase#1 | VERA_TILEBASE_WIDTH_16 - to:vera_layer_mode_tile::@19 -vera_layer_mode_tile::@19: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@17 vera_layer_mode_tile::@18 vera_layer_mode_tile::@24 - [333] vera_layer_mode_tile::tilebase#12 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::tilebase#1, vera_layer_mode_tile::@24/vera_layer_mode_tile::tilebase#1, vera_layer_mode_tile::@18/vera_layer_mode_tile::tilebase#3 ) - [334] if(vera_layer_mode_tile::tileheight#10==8) goto vera_layer_mode_tile::@22 - to:vera_layer_mode_tile::@20 -vera_layer_mode_tile::@20: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@19 - [335] if(vera_layer_mode_tile::tileheight#10!=$10) goto vera_layer_mode_tile::@22 - to:vera_layer_mode_tile::@21 -vera_layer_mode_tile::@21: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@20 - [336] vera_layer_mode_tile::tilebase#5 = vera_layer_mode_tile::tilebase#12 | VERA_TILEBASE_HEIGHT_16 - to:vera_layer_mode_tile::@22 -vera_layer_mode_tile::@22: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@19 vera_layer_mode_tile::@20 vera_layer_mode_tile::@21 - [337] vera_layer_mode_tile::tilebase#10 = phi( vera_layer_mode_tile::@20/vera_layer_mode_tile::tilebase#12, vera_layer_mode_tile::@19/vera_layer_mode_tile::tilebase#12, vera_layer_mode_tile::@21/vera_layer_mode_tile::tilebase#5 ) - [338] vera_layer_set_tilebase::layer#0 = vera_layer_mode_tile::layer#10 - [339] vera_layer_set_tilebase::tilebase#0 = vera_layer_mode_tile::tilebase#10 - [340] call vera_layer_set_tilebase - to:vera_layer_mode_tile::@return -vera_layer_mode_tile::@return: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@22 - [341] return - to:@return -vera_layer_mode_tile::@14: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@11 - [342] vera_layer_mode_tile::config#11 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_128 - to:vera_layer_mode_tile::@16 -vera_layer_mode_tile::@13: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@10 - [343] vera_layer_mode_tile::config#10 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_64 - to:vera_layer_mode_tile::@16 -vera_layer_mode_tile::@7: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@3 - [344] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 8 - [345] vera_layer_mode_tile::$13 = vera_layer_mode_tile::layer#10 << 1 - [346] vera_layer_rowskip[vera_layer_mode_tile::$13] = $100 - to:vera_layer_mode_tile::@9 -vera_layer_mode_tile::@6: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@2 - [347] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 7 - [348] vera_layer_mode_tile::$12 = vera_layer_mode_tile::layer#10 << 1 - [349] vera_layer_rowskip[vera_layer_mode_tile::$12] = $80 - to:vera_layer_mode_tile::@9 -vera_layer_mode_tile::@5: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@1 - [350] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 6 - [351] vera_layer_mode_tile::$11 = vera_layer_mode_tile::layer#10 << 1 - [352] vera_layer_rowskip[vera_layer_mode_tile::$11] = $40 - to:vera_layer_mode_tile::@9 - -void vera_layer_mode_bitmap(char layer , unsigned long bitmap_address , unsigned int mapwidth , unsigned int color_depth) -vera_layer_mode_bitmap: scope:[vera_layer_mode_bitmap] from main::@13 - [353] phi() - to:vera_layer_mode_bitmap::@1 -vera_layer_mode_bitmap::@1: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap - [354] *vera_tilebase_offset = 0 - [355] *vera_tilebase_bank = 0 - [356] *vera_tilebase_address = vera_layer_mode_bitmap::bitmap_address#1 - to:vera_layer_mode_bitmap::vera_display_set_scale_double1 -vera_layer_mode_bitmap::vera_display_set_scale_double1: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap::@1 - [357] *VERA_DC_HSCALE = $40 - [358] *VERA_DC_VSCALE = $40 - to:vera_layer_mode_bitmap::@2 -vera_layer_mode_bitmap::@2: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap::vera_display_set_scale_double1 - [359] phi() - [360] call vera_layer_set_config - to:vera_layer_mode_bitmap::@3 -vera_layer_mode_bitmap::@3: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap::@2 - [361] phi() - [362] call vera_layer_set_tilebase - to:vera_layer_mode_bitmap::@return -vera_layer_mode_bitmap::@return: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap::@3 - [363] return - to:@return - -void clrscr() -clrscr: scope:[clrscr] from main::@11 main::@6 main::@9 - [364] clrscr::line_text#0 = (char *)CONIO_SCREEN_TEXT#17 - [365] vera_layer_get_backcolor::layer#0 = conio_screen_layer - [366] call vera_layer_get_backcolor - [367] vera_layer_get_backcolor::return#0 = vera_layer_get_backcolor::return#1 - to:clrscr::@7 -clrscr::@7: scope:[clrscr] from clrscr - [368] clrscr::$0 = vera_layer_get_backcolor::return#0 - [369] clrscr::$1 = clrscr::$0 << 4 - [370] vera_layer_get_textcolor::layer#0 = conio_screen_layer - [371] call vera_layer_get_textcolor - [372] vera_layer_get_textcolor::return#0 = vera_layer_get_textcolor::return#1 - to:clrscr::@8 -clrscr::@8: scope:[clrscr] from clrscr::@7 - [373] clrscr::$2 = vera_layer_get_textcolor::return#0 - [374] clrscr::color#0 = clrscr::$1 | clrscr::$2 - to:clrscr::@1 -clrscr::@1: scope:[clrscr] from clrscr::@6 clrscr::@8 - [375] clrscr::line_text#2 = phi( clrscr::@6/clrscr::line_text#1, clrscr::@8/clrscr::line_text#0 ) - [375] clrscr::l#2 = phi( clrscr::@6/clrscr::l#1, clrscr::@8/0 ) - [376] if(clrscr::l#2> 3 - [428] bitmap_init::$23 = bitmap_init::x#10 << 1 - [429] bitmap_init::$29 = __bitmap_plot_x + bitmap_init::$23 - [430] *bitmap_init::$29 = bitmap_init::$7 - [431] bitmap_init::$30 = __bitmap_plot_bitmask + bitmap_init::x#10 - [432] *bitmap_init::$30 = bitmap_init::bitmask#10 - [433] bitmap_init::$31 = __bitmap_plot_bitshift + bitmap_init::x#10 - [434] *bitmap_init::$31 = (char)bitmap_init::bitshift#10 - [435] bitmap_init::bitshift#1 = bitmap_init::bitshift#10 - 1 - [436] bitmap_init::bitmask#1 = bitmap_init::bitmask#10 >> 1 - to:bitmap_init::@2 -bitmap_init::@2: scope:[bitmap_init] from bitmap_init::@1 bitmap_init::@8 - [437] bitmap_init::bitshift#11 = phi( bitmap_init::@1/bitmap_init::bitshift#10, bitmap_init::@8/bitmap_init::bitshift#1 ) - [437] bitmap_init::bitmask#11 = phi( bitmap_init::@1/bitmap_init::bitmask#10, bitmap_init::@8/bitmap_init::bitmask#1 ) - [438] if(__bitmap_color_depth!=1) goto bitmap_init::@3 - to:bitmap_init::@9 -bitmap_init::@9: scope:[bitmap_init] from bitmap_init::@2 - [439] bitmap_init::$10 = bitmap_init::x#10 >> 2 - [440] bitmap_init::$24 = bitmap_init::x#10 << 1 - [441] bitmap_init::$32 = __bitmap_plot_x + bitmap_init::$24 - [442] *bitmap_init::$32 = bitmap_init::$10 - [443] bitmap_init::$33 = __bitmap_plot_bitmask + bitmap_init::x#10 - [444] *bitmap_init::$33 = bitmap_init::bitmask#11 - [445] bitmap_init::$34 = __bitmap_plot_bitshift + bitmap_init::x#10 - [446] *bitmap_init::$34 = (char)bitmap_init::bitshift#11 - [447] bitmap_init::bitshift#2 = bitmap_init::bitshift#11 - 2 - [448] bitmap_init::bitmask#2 = bitmap_init::bitmask#11 >> 2 - to:bitmap_init::@3 -bitmap_init::@3: scope:[bitmap_init] from bitmap_init::@2 bitmap_init::@9 - [449] bitmap_init::bitshift#12 = phi( bitmap_init::@2/bitmap_init::bitshift#11, bitmap_init::@9/bitmap_init::bitshift#2 ) - [449] bitmap_init::bitmask#12 = phi( bitmap_init::@2/bitmap_init::bitmask#11, bitmap_init::@9/bitmap_init::bitmask#2 ) - [450] if(__bitmap_color_depth!=2) goto bitmap_init::@4 - to:bitmap_init::@10 -bitmap_init::@10: scope:[bitmap_init] from bitmap_init::@3 - [451] bitmap_init::$13 = bitmap_init::x#10 >> 1 - [452] bitmap_init::$25 = bitmap_init::x#10 << 1 - [453] bitmap_init::$35 = __bitmap_plot_x + bitmap_init::$25 - [454] *bitmap_init::$35 = bitmap_init::$13 - [455] bitmap_init::$36 = __bitmap_plot_bitmask + bitmap_init::x#10 - [456] *bitmap_init::$36 = bitmap_init::bitmask#12 - [457] bitmap_init::$37 = __bitmap_plot_bitshift + bitmap_init::x#10 - [458] *bitmap_init::$37 = (char)bitmap_init::bitshift#12 - [459] bitmap_init::bitshift#3 = bitmap_init::bitshift#12 - 4 - [460] bitmap_init::bitmask#3 = bitmap_init::bitmask#12 >> 4 - to:bitmap_init::@4 -bitmap_init::@4: scope:[bitmap_init] from bitmap_init::@10 bitmap_init::@3 - [461] bitmap_init::bitmask#13 = phi( bitmap_init::@10/bitmap_init::bitmask#3, bitmap_init::@3/bitmap_init::bitmask#12 ) - [461] bitmap_init::bitshift#13 = phi( bitmap_init::@10/bitmap_init::bitshift#3, bitmap_init::@3/bitmap_init::bitshift#12 ) - [462] if(__bitmap_color_depth!=3) goto bitmap_init::@5 - to:bitmap_init::@11 -bitmap_init::@11: scope:[bitmap_init] from bitmap_init::@4 - [463] bitmap_init::$26 = bitmap_init::x#10 << 1 - [464] bitmap_init::$38 = __bitmap_plot_x + bitmap_init::$26 - [465] *bitmap_init::$38 = bitmap_init::x#10 - [466] bitmap_init::$39 = __bitmap_plot_bitmask + bitmap_init::x#10 - [467] *bitmap_init::$39 = bitmap_init::bitmask#13 - [468] bitmap_init::$40 = __bitmap_plot_bitshift + bitmap_init::x#10 - [469] *bitmap_init::$40 = (char)bitmap_init::bitshift#13 - to:bitmap_init::@5 -bitmap_init::@5: scope:[bitmap_init] from bitmap_init::@11 bitmap_init::@4 - [470] if(bitmap_init::bitshift#13>=0) goto bitmap_init::@6 - to:bitmap_init::@12 -bitmap_init::@12: scope:[bitmap_init] from bitmap_init::@5 - [471] bitmap_init::bitshift#4 = bitshifts[__bitmap_color_depth] - to:bitmap_init::@6 -bitmap_init::@6: scope:[bitmap_init] from bitmap_init::@12 bitmap_init::@5 - [472] bitmap_init::bitshift#14 = phi( bitmap_init::@12/bitmap_init::bitshift#4, bitmap_init::@5/bitmap_init::bitshift#13 ) - [473] if(bitmap_init::bitmask#13!=0) goto bitmap_init::@7 - to:bitmap_init::@13 -bitmap_init::@13: scope:[bitmap_init] from bitmap_init::@6 - [474] bitmap_init::bitmask#4 = bitmasks[__bitmap_color_depth] - to:bitmap_init::@7 -bitmap_init::@7: scope:[bitmap_init] from bitmap_init::@13 bitmap_init::@6 - [475] bitmap_init::bitmask#16 = phi( bitmap_init::@13/bitmap_init::bitmask#4, bitmap_init::@6/bitmap_init::bitmask#13 ) - [476] bitmap_init::x#1 = ++ bitmap_init::x#10 - [477] if(bitmap_init::x#1!=$280) goto bitmap_init::@1 - to:bitmap_init::@14 -bitmap_init::@14: scope:[bitmap_init] from bitmap_init::@7 - [478] bitmap_init::$3 = __bitmap_color_depth << 2 - [479] bitmap_init::$4 = bitmap_init::$3 + __bitmap_hscale - [480] bitmap_init::$27 = bitmap_init::$4 << 1 - [481] bitmap_init::hdelta#0 = hdeltas[bitmap_init::$27] - [482] bitmap_init::yoffs#0 = __bitmap_address - to:bitmap_init::@15 -bitmap_init::@15: scope:[bitmap_init] from bitmap_init::@14 bitmap_init::@15 - [483] bitmap_init::yoffs#2 = phi( bitmap_init::@14/bitmap_init::yoffs#0, bitmap_init::@15/bitmap_init::yoffs#1 ) - [483] bitmap_init::y#2 = phi( bitmap_init::@14/0, bitmap_init::@15/bitmap_init::y#1 ) - [484] bitmap_init::$28 = bitmap_init::y#2 << 2 - [485] bitmap_init::$41 = __bitmap_plot_y + bitmap_init::$28 - [486] *bitmap_init::$41 = bitmap_init::yoffs#2 - [487] bitmap_init::yoffs#1 = bitmap_init::yoffs#2 + bitmap_init::hdelta#0 - [488] bitmap_init::y#1 = ++ bitmap_init::y#2 - [489] if(bitmap_init::y#1!=$1e0) goto bitmap_init::@15 - to:bitmap_init::@return -bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@15 - [490] return - to:@return - -void bitmap_clear() -bitmap_clear: scope:[bitmap_clear] from main::@20 - [491] bitmap_clear::$6 = __bitmap_vscale << 1 - [492] bitmap_clear::vdelta#0 = vdeltas[bitmap_clear::$6] - [493] bitmap_clear::$0 = __bitmap_color_depth << 2 - [494] bitmap_clear::$1 = bitmap_clear::$0 + __bitmap_hscale - [495] bitmap_clear::$7 = bitmap_clear::$1 << 1 - [496] bitmap_clear::hdelta#0 = hdeltas[bitmap_clear::$7] - [497] mul16u::a#0 = bitmap_clear::hdelta#0 - [498] mul16u::b#0 = bitmap_clear::vdelta#0 - [499] call mul16u - [500] mul16u::return#0 = mul16u::res#2 - to:bitmap_clear::@1 -bitmap_clear::@1: scope:[bitmap_clear] from bitmap_clear - [501] bitmap_clear::count#0 = mul16u::return#0 - [502] bitmap_clear::vbank#0 = byte2 __bitmap_address - [503] bitmap_clear::vdest#0 = word0 __bitmap_address - [504] memset_vram::vbank#0 = bitmap_clear::vbank#0 - [505] memset_vram::vdest#0 = (void *)bitmap_clear::vdest#0 - [506] memset_vram::num#0 = bitmap_clear::count#0 - [507] call memset_vram - to:bitmap_clear::@return -bitmap_clear::@return: scope:[bitmap_clear] from bitmap_clear::@1 - [508] return - to:@return - -char kbhit() -kbhit: scope:[kbhit] from main::@1 main::@3 - [509] kbhit::ch = 0 - kickasm( uses kbhit::chptr uses kbhit::IN_DEV uses kbhit::GETIN) {{ jsr _kbhit - bne L3 - - jmp continue1 - - .var via1 = $9f60 //VIA#1 - .var d1pra = via1+1 - - _kbhit: - ldy d1pra // The count of keys pressed is stored in RAM bank 0. - stz d1pra // Set d1pra to zero to access RAM bank 0. - lda $A00A // Get number of characters from this address in the ROM of the CX16 (ROM 38). - sty d1pra // Set d1pra to previous value. - rts - - L3: - ldy IN_DEV // Save current input device - stz IN_DEV // Keyboard - phy - jsr GETIN // Read char, and return in .A - ply - sta chptr // Store the character read in ch - sty IN_DEV // Restore input device - ldx #>$0000 - rts - - continue1: - nop - }} - [511] kbhit::return#0 = kbhit::ch - to:kbhit::@return -kbhit::@return: scope:[kbhit] from kbhit - [512] kbhit::return#1 = kbhit::return#0 - [513] return - to:@return - -void bitmap_line(unsigned int x0 , unsigned int x1 , unsigned int y0 , unsigned int y1 , char c) -bitmap_line: scope:[bitmap_line] from main::@31 main::@4 - [514] bitmap_line::c#10 = phi( main::@31/bitmap_line::c#0, main::@4/bitmap_line::c#1 ) - [514] bitmap_line::y1#10 = phi( main::@31/bitmap_line::y1#0, main::@4/$c7 ) - [514] bitmap_line::y0#10 = phi( main::@31/bitmap_line::y0#0, main::@4/0 ) - [514] bitmap_line::x1#10 = phi( main::@31/bitmap_line::x1#0, main::@4/bitmap_line::x1#1 ) - [514] bitmap_line::x0#10 = phi( main::@31/bitmap_line::x0#0, main::@4/bitmap_line::x0#1 ) - [515] if(bitmap_line::x0#10> 9 - [589] rand_state#1 = rand_state#0 ^ rand::$1 - [590] rand::$2 = rand_state#1 << 8 - [591] rand_state#14 = rand_state#1 ^ rand::$2 - [592] rand::return#0 = rand_state#14 - to:rand::@return -rand::@return: scope:[rand] from rand - [593] return - to:@return - -unsigned int modr16u(unsigned int dividend , unsigned int divisor , unsigned int rem) -modr16u: scope:[modr16u] from main::@23 main::@25 main::@27 main::@29 - [594] modr16u::divisor#4 = phi( main::@23/$140, main::@25/$140, main::@27/$c8, main::@29/$c8 ) - [594] modr16u::dividend#4 = phi( main::@23/modr16u::dividend#0, main::@25/modr16u::dividend#1, main::@27/modr16u::dividend#2, main::@29/modr16u::dividend#3 ) - [595] divr16u::dividend#1 = modr16u::dividend#4 - [596] divr16u::divisor#0 = modr16u::divisor#4 - [597] call divr16u - to:modr16u::@1 -modr16u::@1: scope:[modr16u] from modr16u - [598] modr16u::return#0 = rem16u#0 - to:modr16u::@return -modr16u::@return: scope:[modr16u] from modr16u::@1 - [599] return - to:@return - -void vera_layer_set_text_color_mode(char layer , char color_mode) -vera_layer_set_text_color_mode: scope:[vera_layer_set_text_color_mode] from vera_layer_mode_text::@1 - [600] vera_layer_set_text_color_mode::addr#0 = *(vera_layer_config+vera_layer_mode_text::layer#0*SIZEOF_POINTER) - [601] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 & ~VERA_LAYER_CONFIG_256C - [602] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 - to:vera_layer_set_text_color_mode::@return -vera_layer_set_text_color_mode::@return: scope:[vera_layer_set_text_color_mode] from vera_layer_set_text_color_mode - [603] return - to:@return - -char vera_layer_get_mapbase_bank(char layer) -vera_layer_get_mapbase_bank: scope:[vera_layer_get_mapbase_bank] from screenlayer - [604] vera_layer_get_mapbase_bank::return#0 = vera_mapbase_bank[vera_layer_get_mapbase_bank::layer#0] - to:vera_layer_get_mapbase_bank::@return -vera_layer_get_mapbase_bank::@return: scope:[vera_layer_get_mapbase_bank] from vera_layer_get_mapbase_bank - [605] return - to:@return - -unsigned int vera_layer_get_mapbase_offset(char layer) -vera_layer_get_mapbase_offset: scope:[vera_layer_get_mapbase_offset] from screenlayer::@3 - [606] vera_layer_get_mapbase_offset::$0 = vera_layer_get_mapbase_offset::layer#0 << 1 - [607] vera_layer_get_mapbase_offset::return#0 = vera_mapbase_offset[vera_layer_get_mapbase_offset::$0] - to:vera_layer_get_mapbase_offset::@return -vera_layer_get_mapbase_offset::@return: scope:[vera_layer_get_mapbase_offset] from vera_layer_get_mapbase_offset - [608] return - to:@return - -char vera_layer_get_rowshift(char layer) -vera_layer_get_rowshift: scope:[vera_layer_get_rowshift] from screenlayer::@1 - [609] vera_layer_get_rowshift::return#0 = vera_layer_rowshift[vera_layer_get_rowshift::layer#0] - to:vera_layer_get_rowshift::@return -vera_layer_get_rowshift::@return: scope:[vera_layer_get_rowshift] from vera_layer_get_rowshift - [610] return - to:@return - -unsigned int vera_layer_get_rowskip(char layer) -vera_layer_get_rowskip: scope:[vera_layer_get_rowskip] from screenlayer::@5 - [611] vera_layer_get_rowskip::$0 = vera_layer_get_rowskip::layer#0 << 1 - [612] vera_layer_get_rowskip::return#0 = vera_layer_rowskip[vera_layer_get_rowskip::$0] - to:vera_layer_get_rowskip::@return -vera_layer_get_rowskip::@return: scope:[vera_layer_get_rowskip] from vera_layer_get_rowskip - [613] return - to:@return - -void cscroll() -cscroll: scope:[cscroll] from cputln - [614] if(conio_cursor_y[conio_screen_layer]> 1 - [660] mul16u::mb#1 = mul16u::mb#2 << 1 - to:mul16u::@1 - -void memset_vram(char vbank , void *vdest , char data , unsigned long num) -memset_vram: scope:[memset_vram] from bitmap_clear::@1 - [661] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL - [662] memset_vram::$0 = byte0 memset_vram::vdest#0 - [663] *VERA_ADDRX_L = memset_vram::$0 - [664] memset_vram::$1 = byte1 memset_vram::vdest#0 - [665] *VERA_ADDRX_M = memset_vram::$1 - [666] memset_vram::$2 = VERA_INC_1 | memset_vram::vbank#0 - [667] *VERA_ADDRX_H = memset_vram::$2 - to:memset_vram::@1 -memset_vram::@1: scope:[memset_vram] from memset_vram memset_vram::@2 - [668] memset_vram::i#2 = phi( memset_vram/0, memset_vram::@2/memset_vram::i#1 ) - [669] if(memset_vram::i#2> 1 - to:bitmap_line_ydxi::@1 -bitmap_line_ydxi::@1: scope:[bitmap_line_ydxi] from bitmap_line_ydxi bitmap_line_ydxi::@2 - [675] bitmap_line_ydxi::e#3 = phi( bitmap_line_ydxi/bitmap_line_ydxi::e#0, bitmap_line_ydxi::@2/bitmap_line_ydxi::e#6 ) - [675] bitmap_line_ydxi::y#3 = phi( bitmap_line_ydxi/bitmap_line_ydxi::y#6, bitmap_line_ydxi::@2/bitmap_line_ydxi::y#2 ) - [675] bitmap_line_ydxi::x#3 = phi( bitmap_line_ydxi/bitmap_line_ydxi::x#5, bitmap_line_ydxi::@2/bitmap_line_ydxi::x#6 ) - [676] bitmap_plot::x#2 = bitmap_line_ydxi::x#3 - [677] bitmap_plot::y#2 = bitmap_line_ydxi::y#3 - [678] bitmap_plot::c#3 = bitmap_line_ydxi::c#3 - [679] call bitmap_plot - to:bitmap_line_ydxi::@4 -bitmap_line_ydxi::@4: scope:[bitmap_line_ydxi] from bitmap_line_ydxi::@1 - [680] bitmap_line_ydxi::y#2 = ++ bitmap_line_ydxi::y#3 - [681] bitmap_line_ydxi::e#1 = bitmap_line_ydxi::e#3 + bitmap_line_ydxi::xd#2 - [682] if(bitmap_line_ydxi::yd#5>=bitmap_line_ydxi::e#1) goto bitmap_line_ydxi::@2 - to:bitmap_line_ydxi::@3 -bitmap_line_ydxi::@3: scope:[bitmap_line_ydxi] from bitmap_line_ydxi::@4 - [683] bitmap_line_ydxi::x#2 = ++ bitmap_line_ydxi::x#3 - [684] bitmap_line_ydxi::e#2 = bitmap_line_ydxi::e#1 - bitmap_line_ydxi::yd#5 - to:bitmap_line_ydxi::@2 -bitmap_line_ydxi::@2: scope:[bitmap_line_ydxi] from bitmap_line_ydxi::@3 bitmap_line_ydxi::@4 - [685] bitmap_line_ydxi::e#6 = phi( bitmap_line_ydxi::@3/bitmap_line_ydxi::e#2, bitmap_line_ydxi::@4/bitmap_line_ydxi::e#1 ) - [685] bitmap_line_ydxi::x#6 = phi( bitmap_line_ydxi::@3/bitmap_line_ydxi::x#2, bitmap_line_ydxi::@4/bitmap_line_ydxi::x#3 ) - [686] bitmap_line_ydxi::$6 = bitmap_line_ydxi::y1#6 + 1 - [687] if(bitmap_line_ydxi::y#2!=bitmap_line_ydxi::$6) goto bitmap_line_ydxi::@1 - to:bitmap_line_ydxi::@return -bitmap_line_ydxi::@return: scope:[bitmap_line_ydxi] from bitmap_line_ydxi::@2 - [688] return - to:@return - -void bitmap_line_xdyi(unsigned int x , unsigned int y , unsigned int x1 , unsigned int xd , unsigned int yd , char c) -bitmap_line_xdyi: scope:[bitmap_line_xdyi] from bitmap_line::@13 bitmap_line::@8 - [689] bitmap_line_xdyi::x1#6 = phi( bitmap_line::@13/bitmap_line_xdyi::x1#1, bitmap_line::@8/bitmap_line_xdyi::x1#0 ) - [689] bitmap_line_xdyi::xd#5 = phi( bitmap_line::@13/bitmap_line_xdyi::xd#1, bitmap_line::@8/bitmap_line_xdyi::xd#0 ) - [689] bitmap_line_xdyi::c#3 = phi( bitmap_line::@13/bitmap_line_xdyi::c#1, bitmap_line::@8/bitmap_line_xdyi::c#0 ) - [689] bitmap_line_xdyi::y#5 = phi( bitmap_line::@13/bitmap_line_xdyi::y#1, bitmap_line::@8/bitmap_line_xdyi::y#0 ) - [689] bitmap_line_xdyi::x#6 = phi( bitmap_line::@13/bitmap_line_xdyi::x#1, bitmap_line::@8/bitmap_line_xdyi::x#0 ) - [689] bitmap_line_xdyi::yd#2 = phi( bitmap_line::@13/bitmap_line_xdyi::yd#1, bitmap_line::@8/bitmap_line_xdyi::yd#0 ) - [690] bitmap_line_xdyi::e#0 = bitmap_line_xdyi::yd#2 >> 1 - to:bitmap_line_xdyi::@1 -bitmap_line_xdyi::@1: scope:[bitmap_line_xdyi] from bitmap_line_xdyi bitmap_line_xdyi::@2 - [691] bitmap_line_xdyi::e#3 = phi( bitmap_line_xdyi/bitmap_line_xdyi::e#0, bitmap_line_xdyi::@2/bitmap_line_xdyi::e#6 ) - [691] bitmap_line_xdyi::y#3 = phi( bitmap_line_xdyi/bitmap_line_xdyi::y#5, bitmap_line_xdyi::@2/bitmap_line_xdyi::y#6 ) - [691] bitmap_line_xdyi::x#3 = phi( bitmap_line_xdyi/bitmap_line_xdyi::x#6, bitmap_line_xdyi::@2/bitmap_line_xdyi::x#2 ) - [692] bitmap_plot::x#0 = bitmap_line_xdyi::x#3 - [693] bitmap_plot::y#0 = bitmap_line_xdyi::y#3 - [694] bitmap_plot::c#1 = bitmap_line_xdyi::c#3 - [695] call bitmap_plot - to:bitmap_line_xdyi::@4 -bitmap_line_xdyi::@4: scope:[bitmap_line_xdyi] from bitmap_line_xdyi::@1 - [696] bitmap_line_xdyi::x#2 = ++ bitmap_line_xdyi::x#3 - [697] bitmap_line_xdyi::e#1 = bitmap_line_xdyi::e#3 + bitmap_line_xdyi::yd#2 - [698] if(bitmap_line_xdyi::xd#5>=bitmap_line_xdyi::e#1) goto bitmap_line_xdyi::@2 - to:bitmap_line_xdyi::@3 -bitmap_line_xdyi::@3: scope:[bitmap_line_xdyi] from bitmap_line_xdyi::@4 - [699] bitmap_line_xdyi::y#2 = ++ bitmap_line_xdyi::y#3 - [700] bitmap_line_xdyi::e#2 = bitmap_line_xdyi::e#1 - bitmap_line_xdyi::xd#5 - to:bitmap_line_xdyi::@2 -bitmap_line_xdyi::@2: scope:[bitmap_line_xdyi] from bitmap_line_xdyi::@3 bitmap_line_xdyi::@4 - [701] bitmap_line_xdyi::e#6 = phi( bitmap_line_xdyi::@3/bitmap_line_xdyi::e#2, bitmap_line_xdyi::@4/bitmap_line_xdyi::e#1 ) - [701] bitmap_line_xdyi::y#6 = phi( bitmap_line_xdyi::@3/bitmap_line_xdyi::y#2, bitmap_line_xdyi::@4/bitmap_line_xdyi::y#3 ) - [702] bitmap_line_xdyi::$6 = bitmap_line_xdyi::x1#6 + 1 - [703] if(bitmap_line_xdyi::x#2!=bitmap_line_xdyi::$6) goto bitmap_line_xdyi::@1 - to:bitmap_line_xdyi::@return -bitmap_line_xdyi::@return: scope:[bitmap_line_xdyi] from bitmap_line_xdyi::@2 - [704] return - to:@return - -void bitmap_line_ydxd(unsigned int y , unsigned int x , unsigned int y1 , unsigned int yd , unsigned int xd , char c) -bitmap_line_ydxd: scope:[bitmap_line_ydxd] from bitmap_line::@10 bitmap_line::@6 - [705] bitmap_line_ydxd::y1#6 = phi( bitmap_line::@10/bitmap_line_ydxd::y1#0, bitmap_line::@6/bitmap_line_ydxd::y1#1 ) - [705] bitmap_line_ydxd::yd#5 = phi( bitmap_line::@10/bitmap_line_ydxd::yd#0, bitmap_line::@6/bitmap_line_ydxd::yd#1 ) - [705] bitmap_line_ydxd::c#3 = phi( bitmap_line::@10/bitmap_line_ydxd::c#0, bitmap_line::@6/bitmap_line_ydxd::c#1 ) - [705] bitmap_line_ydxd::y#7 = phi( bitmap_line::@10/bitmap_line_ydxd::y#0, bitmap_line::@6/bitmap_line_ydxd::y#1 ) - [705] bitmap_line_ydxd::x#5 = phi( bitmap_line::@10/bitmap_line_ydxd::x#0, bitmap_line::@6/bitmap_line_ydxd::x#1 ) - [705] bitmap_line_ydxd::xd#2 = phi( bitmap_line::@10/bitmap_line_ydxd::xd#0, bitmap_line::@6/bitmap_line_ydxd::xd#1 ) - [706] bitmap_line_ydxd::e#0 = bitmap_line_ydxd::xd#2 >> 1 - to:bitmap_line_ydxd::@1 -bitmap_line_ydxd::@1: scope:[bitmap_line_ydxd] from bitmap_line_ydxd bitmap_line_ydxd::@2 - [707] bitmap_line_ydxd::e#3 = phi( bitmap_line_ydxd/bitmap_line_ydxd::e#0, bitmap_line_ydxd::@2/bitmap_line_ydxd::e#6 ) - [707] bitmap_line_ydxd::y#2 = phi( bitmap_line_ydxd/bitmap_line_ydxd::y#7, bitmap_line_ydxd::@2/bitmap_line_ydxd::y#3 ) - [707] bitmap_line_ydxd::x#3 = phi( bitmap_line_ydxd/bitmap_line_ydxd::x#5, bitmap_line_ydxd::@2/bitmap_line_ydxd::x#6 ) - [708] bitmap_plot::x#3 = bitmap_line_ydxd::x#3 - [709] bitmap_plot::y#3 = bitmap_line_ydxd::y#2 - [710] bitmap_plot::c#4 = bitmap_line_ydxd::c#3 - [711] call bitmap_plot - to:bitmap_line_ydxd::@4 -bitmap_line_ydxd::@4: scope:[bitmap_line_ydxd] from bitmap_line_ydxd::@1 - [712] bitmap_line_ydxd::y#3 = ++ bitmap_line_ydxd::y#2 - [713] bitmap_line_ydxd::e#1 = bitmap_line_ydxd::e#3 + bitmap_line_ydxd::xd#2 - [714] if(bitmap_line_ydxd::yd#5>=bitmap_line_ydxd::e#1) goto bitmap_line_ydxd::@2 - to:bitmap_line_ydxd::@3 -bitmap_line_ydxd::@3: scope:[bitmap_line_ydxd] from bitmap_line_ydxd::@4 - [715] bitmap_line_ydxd::x#2 = -- bitmap_line_ydxd::x#3 - [716] bitmap_line_ydxd::e#2 = bitmap_line_ydxd::e#1 - bitmap_line_ydxd::yd#5 - to:bitmap_line_ydxd::@2 -bitmap_line_ydxd::@2: scope:[bitmap_line_ydxd] from bitmap_line_ydxd::@3 bitmap_line_ydxd::@4 - [717] bitmap_line_ydxd::e#6 = phi( bitmap_line_ydxd::@3/bitmap_line_ydxd::e#2, bitmap_line_ydxd::@4/bitmap_line_ydxd::e#1 ) - [717] bitmap_line_ydxd::x#6 = phi( bitmap_line_ydxd::@3/bitmap_line_ydxd::x#2, bitmap_line_ydxd::@4/bitmap_line_ydxd::x#3 ) - [718] bitmap_line_ydxd::$6 = bitmap_line_ydxd::y1#6 + 1 - [719] if(bitmap_line_ydxd::y#3!=bitmap_line_ydxd::$6) goto bitmap_line_ydxd::@1 - to:bitmap_line_ydxd::@return -bitmap_line_ydxd::@return: scope:[bitmap_line_ydxd] from bitmap_line_ydxd::@2 - [720] return - to:@return - -void bitmap_line_xdyd(unsigned int x , unsigned int y , unsigned int x1 , unsigned int xd , unsigned int yd , char c) -bitmap_line_xdyd: scope:[bitmap_line_xdyd] from bitmap_line::@12 bitmap_line::@9 - [721] bitmap_line_xdyd::x1#6 = phi( bitmap_line::@12/bitmap_line_xdyd::x1#1, bitmap_line::@9/bitmap_line_xdyd::x1#0 ) - [721] bitmap_line_xdyd::xd#5 = phi( bitmap_line::@12/bitmap_line_xdyd::xd#1, bitmap_line::@9/bitmap_line_xdyd::xd#0 ) - [721] bitmap_line_xdyd::c#3 = phi( bitmap_line::@12/bitmap_line_xdyd::c#1, bitmap_line::@9/bitmap_line_xdyd::c#0 ) - [721] bitmap_line_xdyd::y#5 = phi( bitmap_line::@12/bitmap_line_xdyd::y#1, bitmap_line::@9/bitmap_line_xdyd::y#0 ) - [721] bitmap_line_xdyd::x#6 = phi( bitmap_line::@12/bitmap_line_xdyd::x#1, bitmap_line::@9/bitmap_line_xdyd::x#0 ) - [721] bitmap_line_xdyd::yd#2 = phi( bitmap_line::@12/bitmap_line_xdyd::yd#1, bitmap_line::@9/bitmap_line_xdyd::yd#0 ) - [722] bitmap_line_xdyd::e#0 = bitmap_line_xdyd::yd#2 >> 1 - to:bitmap_line_xdyd::@1 -bitmap_line_xdyd::@1: scope:[bitmap_line_xdyd] from bitmap_line_xdyd bitmap_line_xdyd::@2 - [723] bitmap_line_xdyd::e#3 = phi( bitmap_line_xdyd/bitmap_line_xdyd::e#0, bitmap_line_xdyd::@2/bitmap_line_xdyd::e#6 ) - [723] bitmap_line_xdyd::y#3 = phi( bitmap_line_xdyd/bitmap_line_xdyd::y#5, bitmap_line_xdyd::@2/bitmap_line_xdyd::y#6 ) - [723] bitmap_line_xdyd::x#3 = phi( bitmap_line_xdyd/bitmap_line_xdyd::x#6, bitmap_line_xdyd::@2/bitmap_line_xdyd::x#2 ) - [724] bitmap_plot::x#1 = bitmap_line_xdyd::x#3 - [725] bitmap_plot::y#1 = bitmap_line_xdyd::y#3 - [726] bitmap_plot::c#2 = bitmap_line_xdyd::c#3 - [727] call bitmap_plot - to:bitmap_line_xdyd::@4 -bitmap_line_xdyd::@4: scope:[bitmap_line_xdyd] from bitmap_line_xdyd::@1 - [728] bitmap_line_xdyd::x#2 = ++ bitmap_line_xdyd::x#3 - [729] bitmap_line_xdyd::e#1 = bitmap_line_xdyd::e#3 + bitmap_line_xdyd::yd#2 - [730] if(bitmap_line_xdyd::xd#5>=bitmap_line_xdyd::e#1) goto bitmap_line_xdyd::@2 - to:bitmap_line_xdyd::@3 -bitmap_line_xdyd::@3: scope:[bitmap_line_xdyd] from bitmap_line_xdyd::@4 - [731] bitmap_line_xdyd::y#2 = -- bitmap_line_xdyd::y#3 - [732] bitmap_line_xdyd::e#2 = bitmap_line_xdyd::e#1 - bitmap_line_xdyd::xd#5 - to:bitmap_line_xdyd::@2 -bitmap_line_xdyd::@2: scope:[bitmap_line_xdyd] from bitmap_line_xdyd::@3 bitmap_line_xdyd::@4 - [733] bitmap_line_xdyd::e#6 = phi( bitmap_line_xdyd::@3/bitmap_line_xdyd::e#2, bitmap_line_xdyd::@4/bitmap_line_xdyd::e#1 ) - [733] bitmap_line_xdyd::y#6 = phi( bitmap_line_xdyd::@3/bitmap_line_xdyd::y#2, bitmap_line_xdyd::@4/bitmap_line_xdyd::y#3 ) - [734] bitmap_line_xdyd::$6 = bitmap_line_xdyd::x1#6 + 1 - [735] if(bitmap_line_xdyd::x#2!=bitmap_line_xdyd::$6) goto bitmap_line_xdyd::@1 - to:bitmap_line_xdyd::@return -bitmap_line_xdyd::@return: scope:[bitmap_line_xdyd] from bitmap_line_xdyd::@2 - [736] return - to:@return - -unsigned int divr16u(unsigned int dividend , unsigned int divisor , unsigned int rem) -divr16u: scope:[divr16u] from modr16u - [737] phi() - to:divr16u::@1 -divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 - [738] divr16u::i#2 = phi( divr16u/0, divr16u::@3/divr16u::i#1 ) - [738] divr16u::quotient#3 = phi( divr16u/0, divr16u::@3/divr16u::return#0 ) - [738] divr16u::dividend#2 = phi( divr16u/divr16u::dividend#1, divr16u::@3/divr16u::dividend#0 ) - [738] divr16u::rem#4 = phi( divr16u/0, divr16u::@3/divr16u::rem#10 ) - [739] divr16u::rem#0 = divr16u::rem#4 << 1 - [740] divr16u::$1 = byte1 divr16u::dividend#2 - [741] divr16u::$2 = divr16u::$1 & $80 - [742] if(divr16u::$2==0) goto divr16u::@2 - to:divr16u::@4 -divr16u::@4: scope:[divr16u] from divr16u::@1 - [743] divr16u::rem#1 = divr16u::rem#0 | 1 - to:divr16u::@2 -divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 - [744] divr16u::rem#5 = phi( divr16u::@1/divr16u::rem#0, divr16u::@4/divr16u::rem#1 ) - [745] divr16u::dividend#0 = divr16u::dividend#2 << 1 - [746] divr16u::quotient#1 = divr16u::quotient#3 << 1 - [747] if(divr16u::rem#5 conio_screen_height - gotoxy::$1 = ! gotoxy::$0 - if(gotoxy::$1) goto gotoxy::@1 - to:gotoxy::@3 -gotoxy::@1: scope:[gotoxy] from gotoxy gotoxy::@3 - gotoxy::y#9 = phi( gotoxy/gotoxy::y#7, gotoxy::@3/gotoxy::y#0 ) - gotoxy::x#7 = phi( gotoxy/gotoxy::x#9, gotoxy::@3/gotoxy::x#10 ) - gotoxy::$2 = gotoxy::x#7 >= conio_screen_width - gotoxy::$3 = ! gotoxy::$2 - if(gotoxy::$3) goto gotoxy::@2 - to:gotoxy::@4 -gotoxy::@3: scope:[gotoxy] from gotoxy - gotoxy::x#10 = phi( gotoxy/gotoxy::x#9 ) - gotoxy::y#0 = 0 - to:gotoxy::@1 -gotoxy::@2: scope:[gotoxy] from gotoxy::@1 gotoxy::@4 - gotoxy::y#8 = phi( gotoxy::@1/gotoxy::y#9, gotoxy::@4/gotoxy::y#10 ) - gotoxy::x#8 = phi( gotoxy::@1/gotoxy::x#7, gotoxy::@4/gotoxy::x#0 ) - conio_cursor_x[conio_screen_layer] = gotoxy::x#8 - conio_cursor_y[conio_screen_layer] = gotoxy::y#8 - gotoxy::$6 = (unsigned int)gotoxy::y#8 - gotoxy::line_offset#0 = gotoxy::$6 << conio_rowshift - gotoxy::$5 = conio_screen_layer * SIZEOF_UNSIGNED_INT - conio_line_text[gotoxy::$5] = gotoxy::line_offset#0 - to:gotoxy::@return -gotoxy::@4: scope:[gotoxy] from gotoxy::@1 - gotoxy::y#10 = phi( gotoxy::@1/gotoxy::y#9 ) - gotoxy::x#0 = 0 - to:gotoxy::@2 -gotoxy::@return: scope:[gotoxy] from gotoxy::@2 - return - to:@return - -void screensize(char *x , char *y) -screensize: scope:[screensize] from conio_x16_init::@3 - screensize::y#1 = phi( conio_x16_init::@3/screensize::y#0 ) - screensize::x#1 = phi( conio_x16_init::@3/screensize::x#0 ) - screensize::hscale#0 = *VERA_DC_HSCALE >> 7 - screensize::$1 = $28 << screensize::hscale#0 - *screensize::x#1 = screensize::$1 - screensize::vscale#0 = *VERA_DC_VSCALE >> 7 - screensize::$3 = $1e << screensize::vscale#0 - *screensize::y#1 = screensize::$3 - to:screensize::@return -screensize::@return: scope:[screensize] from screensize - return - to:@return - -__stackcall void cputc(char c) -cputc: scope:[cputc] from - CONIO_SCREEN_BANK#33 = phi( ) - CONIO_SCREEN_TEXT#27 = phi( ) - cputc::c#0 = stackidx(char,cputc::OFFSET_STACK_C) - vera_layer_get_color::layer#0 = conio_screen_layer - call vera_layer_get_color - vera_layer_get_color::return#0 = vera_layer_get_color::return#3 - to:cputc::@7 -cputc::@7: scope:[cputc] from cputc - CONIO_SCREEN_BANK#23 = phi( cputc/CONIO_SCREEN_BANK#33 ) - cputc::c#1 = phi( cputc/cputc::c#0 ) - CONIO_SCREEN_TEXT#12 = phi( cputc/CONIO_SCREEN_TEXT#27 ) - vera_layer_get_color::return#5 = phi( cputc/vera_layer_get_color::return#0 ) - cputc::color#0 = vera_layer_get_color::return#5 - cputc::$15 = conio_screen_layer * SIZEOF_UNSIGNED_INT - cputc::conio_addr#0 = CONIO_SCREEN_TEXT#12 + conio_line_text[cputc::$15] - cputc::$2 = conio_cursor_x[conio_screen_layer] << 1 - cputc::conio_addr#1 = cputc::conio_addr#0 + cputc::$2 - cputc::$3 = cputc::c#1 == ' -' - if(cputc::$3) goto cputc::@1 - to:cputc::@2 -cputc::@1: scope:[cputc] from cputc::@7 - CONIO_SCREEN_TEXT#82 = phi( cputc::@7/CONIO_SCREEN_TEXT#12 ) - call cputln - to:cputc::@8 -cputc::@8: scope:[cputc] from cputc::@1 - to:cputc::@return -cputc::@2: scope:[cputc] from cputc::@7 - CONIO_SCREEN_TEXT#93 = phi( cputc::@7/CONIO_SCREEN_TEXT#12 ) - cputc::color#1 = phi( cputc::@7/cputc::color#0 ) - cputc::c#2 = phi( cputc::@7/cputc::c#1 ) - CONIO_SCREEN_BANK#12 = phi( cputc::@7/CONIO_SCREEN_BANK#23 ) - cputc::conio_addr#2 = phi( cputc::@7/cputc::conio_addr#1 ) - *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL - cputc::$4 = byte0 cputc::conio_addr#2 - *VERA_ADDRX_L = cputc::$4 - cputc::$5 = byte1 cputc::conio_addr#2 - *VERA_ADDRX_M = cputc::$5 - cputc::$6 = CONIO_SCREEN_BANK#12 | VERA_INC_1 - *VERA_ADDRX_H = cputc::$6 - *VERA_DATA0 = cputc::c#2 - *VERA_DATA0 = cputc::color#1 - conio_cursor_x[conio_screen_layer] = ++ conio_cursor_x[conio_screen_layer] - cputc::scroll_enable#0 = conio_scroll_enable[conio_screen_layer] - cputc::$17 = 0 != cputc::scroll_enable#0 - if(cputc::$17) goto cputc::@5 - to:cputc::@3 -cputc::@5: scope:[cputc] from cputc::@2 - CONIO_SCREEN_TEXT#89 = phi( cputc::@2/CONIO_SCREEN_TEXT#93 ) - cputc::$11 = conio_cursor_x[conio_screen_layer] == conio_screen_width - cputc::$12 = ! cputc::$11 - if(cputc::$12) goto cputc::@return - to:cputc::@6 -cputc::@3: scope:[cputc] from cputc::@2 - CONIO_SCREEN_TEXT#88 = phi( cputc::@2/CONIO_SCREEN_TEXT#93 ) - cputc::$16 = (unsigned int)conio_cursor_x[conio_screen_layer] - cputc::$8 = cputc::$16 == conio_width - cputc::$9 = ! cputc::$8 - if(cputc::$9) goto cputc::@return - to:cputc::@4 -cputc::@4: scope:[cputc] from cputc::@3 - CONIO_SCREEN_TEXT#83 = phi( cputc::@3/CONIO_SCREEN_TEXT#88 ) - call cputln - to:cputc::@9 -cputc::@9: scope:[cputc] from cputc::@4 - to:cputc::@return -cputc::@6: scope:[cputc] from cputc::@5 - CONIO_SCREEN_TEXT#84 = phi( cputc::@5/CONIO_SCREEN_TEXT#89 ) - call cputln - to:cputc::@10 -cputc::@10: scope:[cputc] from cputc::@6 - to:cputc::@return -cputc::@return: scope:[cputc] from cputc::@10 cputc::@3 cputc::@5 cputc::@8 cputc::@9 - return - to:@return - -void cputln() -cputln: scope:[cputln] from cputc::@1 cputc::@4 cputc::@6 - CONIO_SCREEN_TEXT#76 = phi( cputc::@1/CONIO_SCREEN_TEXT#82, cputc::@4/CONIO_SCREEN_TEXT#83, cputc::@6/CONIO_SCREEN_TEXT#84 ) - cputln::$2 = conio_screen_layer * SIZEOF_UNSIGNED_INT - cputln::temp#0 = conio_line_text[cputln::$2] - cputln::temp#1 = cputln::temp#0 + conio_rowskip - cputln::$3 = conio_screen_layer * SIZEOF_UNSIGNED_INT - conio_line_text[cputln::$3] = cputln::temp#1 - conio_cursor_x[conio_screen_layer] = 0 - conio_cursor_y[conio_screen_layer] = ++ conio_cursor_y[conio_screen_layer] - call cscroll - to:cputln::@1 -cputln::@1: scope:[cputln] from cputln - to:cputln::@return -cputln::@return: scope:[cputln] from cputln::@1 - return - to:@return - -char kbhit() -kbhit: scope:[kbhit] from main::@1 main::@4 - kbhit::ch = 0 - kickasm( uses kbhit::chptr uses kbhit::IN_DEV uses kbhit::GETIN) {{ jsr _kbhit - bne L3 - - jmp continue1 - - .var via1 = $9f60 //VIA#1 - .var d1pra = via1+1 - - _kbhit: - ldy d1pra // The count of keys pressed is stored in RAM bank 0. - stz d1pra // Set d1pra to zero to access RAM bank 0. - lda $A00A // Get number of characters from this address in the ROM of the CX16 (ROM 38). - sty d1pra // Set d1pra to previous value. - rts - - L3: - ldy IN_DEV // Save current input device - stz IN_DEV // Keyboard - phy - jsr GETIN // Read char, and return in .A - ply - sta chptr // Store the character read in ch - sty IN_DEV // Restore input device - ldx #>$0000 - rts - - continue1: - nop - }} - kbhit::return#0 = kbhit::ch - to:kbhit::@return -kbhit::@return: scope:[kbhit] from kbhit - kbhit::return#4 = phi( kbhit/kbhit::return#0 ) - kbhit::return#1 = kbhit::return#4 - return - to:@return - -char vera_display_get_hscale() -vera_display_get_hscale: scope:[vera_display_get_hscale] from bitmap_init::@16 - vera_display_get_hscale::scale#0 = 0 - vera_display_get_hscale::s#0 = 1 - to:vera_display_get_hscale::@1 -vera_display_get_hscale::@1: scope:[vera_display_get_hscale] from vera_display_get_hscale vera_display_get_hscale::@2 - vera_display_get_hscale::scale#4 = phi( vera_display_get_hscale/vera_display_get_hscale::scale#0, vera_display_get_hscale::@2/vera_display_get_hscale::scale#3 ) - vera_display_get_hscale::s#2 = phi( vera_display_get_hscale/vera_display_get_hscale::s#0, vera_display_get_hscale::@2/vera_display_get_hscale::s#1 ) - vera_display_get_hscale::$0 = *VERA_DC_HSCALE == vera_display_get_hscale::hscale[vera_display_get_hscale::s#2] - vera_display_get_hscale::$1 = ! vera_display_get_hscale::$0 - if(vera_display_get_hscale::$1) goto vera_display_get_hscale::@2 - to:vera_display_get_hscale::@4 -vera_display_get_hscale::@2: scope:[vera_display_get_hscale] from vera_display_get_hscale::@1 - vera_display_get_hscale::scale#3 = phi( vera_display_get_hscale::@1/vera_display_get_hscale::scale#4 ) - vera_display_get_hscale::s#3 = phi( vera_display_get_hscale::@1/vera_display_get_hscale::s#2 ) - vera_display_get_hscale::s#1 = vera_display_get_hscale::s#3 + rangenext(1,3) - vera_display_get_hscale::$2 = vera_display_get_hscale::s#1 != rangelast(1,3) - if(vera_display_get_hscale::$2) goto vera_display_get_hscale::@1 - to:vera_display_get_hscale::@3 -vera_display_get_hscale::@4: scope:[vera_display_get_hscale] from vera_display_get_hscale::@1 - vera_display_get_hscale::s#4 = phi( vera_display_get_hscale::@1/vera_display_get_hscale::s#2 ) - vera_display_get_hscale::scale#1 = vera_display_get_hscale::s#4 - to:vera_display_get_hscale::@3 -vera_display_get_hscale::@3: scope:[vera_display_get_hscale] from vera_display_get_hscale::@2 vera_display_get_hscale::@4 - vera_display_get_hscale::scale#2 = phi( vera_display_get_hscale::@2/vera_display_get_hscale::scale#3, vera_display_get_hscale::@4/vera_display_get_hscale::scale#1 ) - vera_display_get_hscale::return#0 = vera_display_get_hscale::scale#2 - to:vera_display_get_hscale::@return -vera_display_get_hscale::@return: scope:[vera_display_get_hscale] from vera_display_get_hscale::@3 - vera_display_get_hscale::return#3 = phi( vera_display_get_hscale::@3/vera_display_get_hscale::return#0 ) - vera_display_get_hscale::return#1 = vera_display_get_hscale::return#3 - return - to:@return - -char vera_display_get_vscale() -vera_display_get_vscale: scope:[vera_display_get_vscale] from bitmap_init::@17 - vera_display_get_vscale::scale#0 = 0 - vera_display_get_vscale::s#0 = 1 - to:vera_display_get_vscale::@1 -vera_display_get_vscale::@1: scope:[vera_display_get_vscale] from vera_display_get_vscale vera_display_get_vscale::@2 - vera_display_get_vscale::scale#4 = phi( vera_display_get_vscale/vera_display_get_vscale::scale#0, vera_display_get_vscale::@2/vera_display_get_vscale::scale#3 ) - vera_display_get_vscale::s#2 = phi( vera_display_get_vscale/vera_display_get_vscale::s#0, vera_display_get_vscale::@2/vera_display_get_vscale::s#1 ) - vera_display_get_vscale::$0 = *VERA_DC_VSCALE == vera_display_get_vscale::vscale[vera_display_get_vscale::s#2] - vera_display_get_vscale::$1 = ! vera_display_get_vscale::$0 - if(vera_display_get_vscale::$1) goto vera_display_get_vscale::@2 - to:vera_display_get_vscale::@4 -vera_display_get_vscale::@2: scope:[vera_display_get_vscale] from vera_display_get_vscale::@1 - vera_display_get_vscale::scale#3 = phi( vera_display_get_vscale::@1/vera_display_get_vscale::scale#4 ) - vera_display_get_vscale::s#3 = phi( vera_display_get_vscale::@1/vera_display_get_vscale::s#2 ) - vera_display_get_vscale::s#1 = vera_display_get_vscale::s#3 + rangenext(1,3) - vera_display_get_vscale::$2 = vera_display_get_vscale::s#1 != rangelast(1,3) - if(vera_display_get_vscale::$2) goto vera_display_get_vscale::@1 - to:vera_display_get_vscale::@3 -vera_display_get_vscale::@4: scope:[vera_display_get_vscale] from vera_display_get_vscale::@1 - vera_display_get_vscale::s#4 = phi( vera_display_get_vscale::@1/vera_display_get_vscale::s#2 ) - vera_display_get_vscale::scale#1 = vera_display_get_vscale::s#4 - to:vera_display_get_vscale::@3 -vera_display_get_vscale::@3: scope:[vera_display_get_vscale] from vera_display_get_vscale::@2 vera_display_get_vscale::@4 - vera_display_get_vscale::scale#2 = phi( vera_display_get_vscale::@2/vera_display_get_vscale::scale#3, vera_display_get_vscale::@4/vera_display_get_vscale::scale#1 ) - vera_display_get_vscale::return#0 = vera_display_get_vscale::scale#2 - to:vera_display_get_vscale::@return -vera_display_get_vscale::@return: scope:[vera_display_get_vscale] from vera_display_get_vscale::@3 - vera_display_get_vscale::return#3 = phi( vera_display_get_vscale::@3/vera_display_get_vscale::return#0 ) - vera_display_get_vscale::return#1 = vera_display_get_vscale::return#3 - return - to:@return - -void vera_layer_set_config(char layer , char config) -vera_layer_set_config: scope:[vera_layer_set_config] from vera_layer_mode_bitmap::@10 vera_layer_mode_tile::@24 - vera_layer_set_config::config#2 = phi( vera_layer_mode_bitmap::@10/vera_layer_set_config::config#1, vera_layer_mode_tile::@24/vera_layer_set_config::config#0 ) - vera_layer_set_config::layer#2 = phi( vera_layer_mode_bitmap::@10/vera_layer_set_config::layer#1, vera_layer_mode_tile::@24/vera_layer_set_config::layer#0 ) - vera_layer_set_config::$0 = vera_layer_set_config::layer#2 * SIZEOF_POINTER - vera_layer_set_config::addr#0 = vera_layer_config[vera_layer_set_config::$0] - *vera_layer_set_config::addr#0 = vera_layer_set_config::config#2 - to:vera_layer_set_config::@return -vera_layer_set_config::@return: scope:[vera_layer_set_config] from vera_layer_set_config - return - to:@return - -void vera_layer_set_text_color_mode(char layer , char color_mode) -vera_layer_set_text_color_mode: scope:[vera_layer_set_text_color_mode] from vera_layer_mode_text::@2 vera_layer_mode_text::@3 - vera_layer_set_text_color_mode::color_mode#2 = phi( vera_layer_mode_text::@2/vera_layer_set_text_color_mode::color_mode#0, vera_layer_mode_text::@3/vera_layer_set_text_color_mode::color_mode#1 ) - vera_layer_set_text_color_mode::layer#2 = phi( vera_layer_mode_text::@2/vera_layer_set_text_color_mode::layer#0, vera_layer_mode_text::@3/vera_layer_set_text_color_mode::layer#1 ) - vera_layer_set_text_color_mode::$0 = vera_layer_set_text_color_mode::layer#2 * SIZEOF_POINTER - vera_layer_set_text_color_mode::addr#0 = vera_layer_config[vera_layer_set_text_color_mode::$0] - *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 & ~VERA_LAYER_CONFIG_256C - *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 | vera_layer_set_text_color_mode::color_mode#2 - to:vera_layer_set_text_color_mode::@return -vera_layer_set_text_color_mode::@return: scope:[vera_layer_set_text_color_mode] from vera_layer_set_text_color_mode - return - to:@return - -void vera_layer_set_mapbase(char layer , char mapbase) -vera_layer_set_mapbase: scope:[vera_layer_set_mapbase] from conio_x16_init::@7 conio_x16_init::@8 vera_layer_mode_tile::@33 - vera_layer_set_mapbase::mapbase#3 = phi( conio_x16_init::@7/vera_layer_set_mapbase::mapbase#1, conio_x16_init::@8/vera_layer_set_mapbase::mapbase#2, vera_layer_mode_tile::@33/vera_layer_set_mapbase::mapbase#0 ) - vera_layer_set_mapbase::layer#3 = phi( conio_x16_init::@7/vera_layer_set_mapbase::layer#1, conio_x16_init::@8/vera_layer_set_mapbase::layer#2, vera_layer_mode_tile::@33/vera_layer_set_mapbase::layer#0 ) - vera_layer_set_mapbase::$0 = vera_layer_set_mapbase::layer#3 * SIZEOF_POINTER - vera_layer_set_mapbase::addr#0 = vera_layer_mapbase[vera_layer_set_mapbase::$0] - *vera_layer_set_mapbase::addr#0 = vera_layer_set_mapbase::mapbase#3 - to:vera_layer_set_mapbase::@return -vera_layer_set_mapbase::@return: scope:[vera_layer_set_mapbase] from vera_layer_set_mapbase - return - to:@return - -char vera_layer_get_mapbase_bank(char layer) -vera_layer_get_mapbase_bank: scope:[vera_layer_get_mapbase_bank] from screenlayer - vera_layer_get_mapbase_bank::layer#1 = phi( screenlayer/vera_layer_get_mapbase_bank::layer#0 ) - vera_layer_get_mapbase_bank::return#0 = vera_mapbase_bank[vera_layer_get_mapbase_bank::layer#1] - to:vera_layer_get_mapbase_bank::@return -vera_layer_get_mapbase_bank::@return: scope:[vera_layer_get_mapbase_bank] from vera_layer_get_mapbase_bank - vera_layer_get_mapbase_bank::return#3 = phi( vera_layer_get_mapbase_bank/vera_layer_get_mapbase_bank::return#0 ) - vera_layer_get_mapbase_bank::return#1 = vera_layer_get_mapbase_bank::return#3 - return - to:@return - -unsigned int vera_layer_get_mapbase_offset(char layer) -vera_layer_get_mapbase_offset: scope:[vera_layer_get_mapbase_offset] from screenlayer::@3 - vera_layer_get_mapbase_offset::layer#1 = phi( screenlayer::@3/vera_layer_get_mapbase_offset::layer#0 ) - vera_layer_get_mapbase_offset::$0 = vera_layer_get_mapbase_offset::layer#1 * SIZEOF_UNSIGNED_INT - vera_layer_get_mapbase_offset::return#0 = vera_mapbase_offset[vera_layer_get_mapbase_offset::$0] - to:vera_layer_get_mapbase_offset::@return -vera_layer_get_mapbase_offset::@return: scope:[vera_layer_get_mapbase_offset] from vera_layer_get_mapbase_offset - vera_layer_get_mapbase_offset::return#3 = phi( vera_layer_get_mapbase_offset/vera_layer_get_mapbase_offset::return#0 ) - vera_layer_get_mapbase_offset::return#1 = vera_layer_get_mapbase_offset::return#3 - return - to:@return - -void vera_layer_set_tilebase(char layer , char tilebase) -vera_layer_set_tilebase: scope:[vera_layer_set_tilebase] from vera_layer_mode_bitmap::@13 vera_layer_mode_tile::@32 - vera_layer_set_tilebase::tilebase#2 = phi( vera_layer_mode_bitmap::@13/vera_layer_set_tilebase::tilebase#1, vera_layer_mode_tile::@32/vera_layer_set_tilebase::tilebase#0 ) - vera_layer_set_tilebase::layer#2 = phi( vera_layer_mode_bitmap::@13/vera_layer_set_tilebase::layer#1, vera_layer_mode_tile::@32/vera_layer_set_tilebase::layer#0 ) - vera_layer_set_tilebase::$0 = vera_layer_set_tilebase::layer#2 * SIZEOF_POINTER - vera_layer_set_tilebase::addr#0 = vera_layer_tilebase[vera_layer_set_tilebase::$0] - *vera_layer_set_tilebase::addr#0 = vera_layer_set_tilebase::tilebase#2 - to:vera_layer_set_tilebase::@return -vera_layer_set_tilebase::@return: scope:[vera_layer_set_tilebase] from vera_layer_set_tilebase - return - to:@return - -char vera_layer_set_textcolor(char layer , char color) -vera_layer_set_textcolor: scope:[vera_layer_set_textcolor] from conio_x16_init::@5 main::textcolor1 main::textcolor2 main::textcolor3 main::textcolor4 main::textcolor5 - vera_layer_set_textcolor::color#6 = phi( conio_x16_init::@5/vera_layer_set_textcolor::color#0, main::textcolor1/vera_layer_set_textcolor::color#1, main::textcolor2/vera_layer_set_textcolor::color#2, main::textcolor3/vera_layer_set_textcolor::color#3, main::textcolor4/vera_layer_set_textcolor::color#4, main::textcolor5/vera_layer_set_textcolor::color#5 ) - vera_layer_set_textcolor::layer#6 = phi( conio_x16_init::@5/vera_layer_set_textcolor::layer#0, main::textcolor1/vera_layer_set_textcolor::layer#1, main::textcolor2/vera_layer_set_textcolor::layer#2, main::textcolor3/vera_layer_set_textcolor::layer#3, main::textcolor4/vera_layer_set_textcolor::layer#4, main::textcolor5/vera_layer_set_textcolor::layer#5 ) - vera_layer_set_textcolor::old#0 = vera_layer_textcolor[vera_layer_set_textcolor::layer#6] - vera_layer_textcolor[vera_layer_set_textcolor::layer#6] = vera_layer_set_textcolor::color#6 - vera_layer_set_textcolor::return#0 = vera_layer_set_textcolor::old#0 - to:vera_layer_set_textcolor::@return -vera_layer_set_textcolor::@return: scope:[vera_layer_set_textcolor] from vera_layer_set_textcolor - vera_layer_set_textcolor::return#8 = phi( vera_layer_set_textcolor/vera_layer_set_textcolor::return#0 ) - vera_layer_set_textcolor::return#1 = vera_layer_set_textcolor::return#8 - return - to:@return - -char vera_layer_get_textcolor(char layer) -vera_layer_get_textcolor: scope:[vera_layer_get_textcolor] from clrscr::@7 - vera_layer_get_textcolor::layer#1 = phi( clrscr::@7/vera_layer_get_textcolor::layer#0 ) - vera_layer_get_textcolor::return#1 = vera_layer_textcolor[vera_layer_get_textcolor::layer#1] - to:vera_layer_get_textcolor::@return -vera_layer_get_textcolor::@return: scope:[vera_layer_get_textcolor] from vera_layer_get_textcolor - vera_layer_get_textcolor::return#4 = phi( vera_layer_get_textcolor/vera_layer_get_textcolor::return#1 ) - vera_layer_get_textcolor::return#2 = vera_layer_get_textcolor::return#4 - return - to:@return - -char vera_layer_set_backcolor(char layer , char color) -vera_layer_set_backcolor: scope:[vera_layer_set_backcolor] from conio_x16_init::@6 main::bgcolor1 main::bgcolor2 main::bgcolor3 - vera_layer_set_backcolor::color#4 = phi( conio_x16_init::@6/vera_layer_set_backcolor::color#0, main::bgcolor1/vera_layer_set_backcolor::color#1, main::bgcolor2/vera_layer_set_backcolor::color#2, main::bgcolor3/vera_layer_set_backcolor::color#3 ) - vera_layer_set_backcolor::layer#4 = phi( conio_x16_init::@6/vera_layer_set_backcolor::layer#0, main::bgcolor1/vera_layer_set_backcolor::layer#1, main::bgcolor2/vera_layer_set_backcolor::layer#2, main::bgcolor3/vera_layer_set_backcolor::layer#3 ) - vera_layer_set_backcolor::old#0 = vera_layer_backcolor[vera_layer_set_backcolor::layer#4] - vera_layer_backcolor[vera_layer_set_backcolor::layer#4] = vera_layer_set_backcolor::color#4 - vera_layer_set_backcolor::return#0 = vera_layer_set_backcolor::old#0 - to:vera_layer_set_backcolor::@return -vera_layer_set_backcolor::@return: scope:[vera_layer_set_backcolor] from vera_layer_set_backcolor - vera_layer_set_backcolor::return#6 = phi( vera_layer_set_backcolor/vera_layer_set_backcolor::return#0 ) - vera_layer_set_backcolor::return#1 = vera_layer_set_backcolor::return#6 - return - to:@return - -char vera_layer_get_backcolor(char layer) -vera_layer_get_backcolor: scope:[vera_layer_get_backcolor] from clrscr - vera_layer_get_backcolor::layer#1 = phi( clrscr/vera_layer_get_backcolor::layer#0 ) - vera_layer_get_backcolor::return#1 = vera_layer_backcolor[vera_layer_get_backcolor::layer#1] - to:vera_layer_get_backcolor::@return -vera_layer_get_backcolor::@return: scope:[vera_layer_get_backcolor] from vera_layer_get_backcolor - vera_layer_get_backcolor::return#4 = phi( vera_layer_get_backcolor/vera_layer_get_backcolor::return#1 ) - vera_layer_get_backcolor::return#2 = vera_layer_get_backcolor::return#4 - return - to:@return - -char vera_layer_get_color(char layer) -vera_layer_get_color: scope:[vera_layer_get_color] from clearline cputc - vera_layer_get_color::layer#2 = phi( clearline/vera_layer_get_color::layer#1, cputc/vera_layer_get_color::layer#0 ) - vera_layer_get_color::$3 = vera_layer_get_color::layer#2 * SIZEOF_POINTER - vera_layer_get_color::addr#0 = vera_layer_config[vera_layer_get_color::$3] - vera_layer_get_color::$0 = *vera_layer_get_color::addr#0 & VERA_LAYER_CONFIG_256C - vera_layer_get_color::$4 = 0 != vera_layer_get_color::$0 - if(vera_layer_get_color::$4) goto vera_layer_get_color::@1 - to:vera_layer_get_color::@2 -vera_layer_get_color::@1: scope:[vera_layer_get_color] from vera_layer_get_color - vera_layer_get_color::layer#3 = phi( vera_layer_get_color/vera_layer_get_color::layer#2 ) - vera_layer_get_color::return#1 = vera_layer_textcolor[vera_layer_get_color::layer#3] - to:vera_layer_get_color::@return -vera_layer_get_color::@2: scope:[vera_layer_get_color] from vera_layer_get_color - vera_layer_get_color::layer#4 = phi( vera_layer_get_color/vera_layer_get_color::layer#2 ) - vera_layer_get_color::$1 = vera_layer_backcolor[vera_layer_get_color::layer#4] << 4 - vera_layer_get_color::$2 = vera_layer_get_color::$1 | vera_layer_textcolor[vera_layer_get_color::layer#4] - vera_layer_get_color::return#2 = vera_layer_get_color::$2 - to:vera_layer_get_color::@return -vera_layer_get_color::@return: scope:[vera_layer_get_color] from vera_layer_get_color::@1 vera_layer_get_color::@2 - vera_layer_get_color::return#6 = phi( vera_layer_get_color::@1/vera_layer_get_color::return#1, vera_layer_get_color::@2/vera_layer_get_color::return#2 ) - vera_layer_get_color::return#3 = vera_layer_get_color::return#6 - return - to:@return - -char vera_layer_get_rowshift(char layer) -vera_layer_get_rowshift: scope:[vera_layer_get_rowshift] from screenlayer::@1 - vera_layer_get_rowshift::layer#1 = phi( screenlayer::@1/vera_layer_get_rowshift::layer#0 ) - vera_layer_get_rowshift::return#0 = vera_layer_rowshift[vera_layer_get_rowshift::layer#1] - to:vera_layer_get_rowshift::@return -vera_layer_get_rowshift::@return: scope:[vera_layer_get_rowshift] from vera_layer_get_rowshift - vera_layer_get_rowshift::return#3 = phi( vera_layer_get_rowshift/vera_layer_get_rowshift::return#0 ) - vera_layer_get_rowshift::return#1 = vera_layer_get_rowshift::return#3 - return - to:@return - -unsigned int vera_layer_get_rowskip(char layer) -vera_layer_get_rowskip: scope:[vera_layer_get_rowskip] from screenlayer::@5 - vera_layer_get_rowskip::layer#1 = phi( screenlayer::@5/vera_layer_get_rowskip::layer#0 ) - vera_layer_get_rowskip::$0 = vera_layer_get_rowskip::layer#1 * SIZEOF_UNSIGNED_INT - vera_layer_get_rowskip::return#0 = vera_layer_rowskip[vera_layer_get_rowskip::$0] - to:vera_layer_get_rowskip::@return -vera_layer_get_rowskip::@return: scope:[vera_layer_get_rowskip] from vera_layer_get_rowskip - vera_layer_get_rowskip::return#3 = phi( vera_layer_get_rowskip/vera_layer_get_rowskip::return#0 ) - vera_layer_get_rowskip::return#1 = vera_layer_get_rowskip::return#3 - return - to:@return - -void vera_layer_mode_tile(char layer , unsigned long mapbase_address , unsigned long tilebase_address , unsigned int mapwidth , unsigned int mapheight , char tilewidth , char tileheight , char color_depth) -vera_layer_mode_tile: scope:[vera_layer_mode_tile] from main::@17 vera_layer_mode_text - vera_layer_mode_tile::tileheight#31 = phi( main::@17/vera_layer_mode_tile::tileheight#1, vera_layer_mode_text/vera_layer_mode_tile::tileheight#0 ) - vera_layer_mode_tile::tilewidth#27 = phi( main::@17/vera_layer_mode_tile::tilewidth#1, vera_layer_mode_text/vera_layer_mode_tile::tilewidth#0 ) - vera_layer_mode_tile::tilebase_address#27 = phi( main::@17/vera_layer_mode_tile::tilebase_address#2, vera_layer_mode_text/vera_layer_mode_tile::tilebase_address#1 ) - vera_layer_mode_tile::mapbase_address#26 = phi( main::@17/vera_layer_mode_tile::mapbase_address#2, vera_layer_mode_text/vera_layer_mode_tile::mapbase_address#1 ) - vera_layer_mode_tile::mapheight#19 = phi( main::@17/vera_layer_mode_tile::mapheight#1, vera_layer_mode_text/vera_layer_mode_tile::mapheight#0 ) - vera_layer_mode_tile::layer#31 = phi( main::@17/vera_layer_mode_tile::layer#1, vera_layer_mode_text/vera_layer_mode_tile::layer#0 ) - vera_layer_mode_tile::mapwidth#11 = phi( main::@17/vera_layer_mode_tile::mapwidth#1, vera_layer_mode_text/vera_layer_mode_tile::mapwidth#0 ) - vera_layer_mode_tile::color_depth#2 = phi( main::@17/vera_layer_mode_tile::color_depth#1, vera_layer_mode_text/vera_layer_mode_tile::color_depth#0 ) - vera_layer_mode_tile::config#0 = 0 - if(vera_layer_mode_tile::color_depth#2==1) goto vera_layer_mode_tile::@4 - to:vera_layer_mode_tile::@1 -vera_layer_mode_tile::@4: scope:[vera_layer_mode_tile] from vera_layer_mode_tile - vera_layer_mode_tile::tileheight#27 = phi( vera_layer_mode_tile/vera_layer_mode_tile::tileheight#31 ) - vera_layer_mode_tile::tilewidth#23 = phi( vera_layer_mode_tile/vera_layer_mode_tile::tilewidth#27 ) - vera_layer_mode_tile::tilebase_address#23 = phi( vera_layer_mode_tile/vera_layer_mode_tile::tilebase_address#27 ) - vera_layer_mode_tile::mapbase_address#22 = phi( vera_layer_mode_tile/vera_layer_mode_tile::mapbase_address#26 ) - vera_layer_mode_tile::mapheight#15 = phi( vera_layer_mode_tile/vera_layer_mode_tile::mapheight#19 ) - vera_layer_mode_tile::layer#23 = phi( vera_layer_mode_tile/vera_layer_mode_tile::layer#31 ) - vera_layer_mode_tile::mapwidth#7 = phi( vera_layer_mode_tile/vera_layer_mode_tile::mapwidth#11 ) - vera_layer_mode_tile::config#13 = phi( vera_layer_mode_tile/vera_layer_mode_tile::config#0 ) - vera_layer_mode_tile::config#1 = vera_layer_mode_tile::config#13 | VERA_LAYER_COLOR_DEPTH_1BPP - to:vera_layer_mode_tile::@8 -vera_layer_mode_tile::@1: scope:[vera_layer_mode_tile] from vera_layer_mode_tile - vera_layer_mode_tile::tileheight#32 = phi( vera_layer_mode_tile/vera_layer_mode_tile::tileheight#31 ) - vera_layer_mode_tile::tilewidth#28 = phi( vera_layer_mode_tile/vera_layer_mode_tile::tilewidth#27 ) - vera_layer_mode_tile::tilebase_address#28 = phi( vera_layer_mode_tile/vera_layer_mode_tile::tilebase_address#27 ) - vera_layer_mode_tile::mapbase_address#27 = phi( vera_layer_mode_tile/vera_layer_mode_tile::mapbase_address#26 ) - vera_layer_mode_tile::mapheight#20 = phi( vera_layer_mode_tile/vera_layer_mode_tile::mapheight#19 ) - vera_layer_mode_tile::layer#32 = phi( vera_layer_mode_tile/vera_layer_mode_tile::layer#31 ) - vera_layer_mode_tile::mapwidth#12 = phi( vera_layer_mode_tile/vera_layer_mode_tile::mapwidth#11 ) - vera_layer_mode_tile::config#26 = phi( vera_layer_mode_tile/vera_layer_mode_tile::config#0 ) - vera_layer_mode_tile::color_depth#3 = phi( vera_layer_mode_tile/vera_layer_mode_tile::color_depth#2 ) - if(vera_layer_mode_tile::color_depth#3==2) goto vera_layer_mode_tile::@5 - to:vera_layer_mode_tile::@2 -vera_layer_mode_tile::@5: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@1 - vera_layer_mode_tile::tileheight#28 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::tileheight#32 ) - vera_layer_mode_tile::tilewidth#24 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::tilewidth#28 ) - vera_layer_mode_tile::tilebase_address#24 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::tilebase_address#28 ) - vera_layer_mode_tile::mapbase_address#23 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::mapbase_address#27 ) - vera_layer_mode_tile::mapheight#16 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::mapheight#20 ) - vera_layer_mode_tile::layer#24 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::layer#32 ) - vera_layer_mode_tile::mapwidth#8 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::mapwidth#12 ) - vera_layer_mode_tile::config#14 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::config#26 ) - vera_layer_mode_tile::config#2 = vera_layer_mode_tile::config#14 | VERA_LAYER_COLOR_DEPTH_2BPP - to:vera_layer_mode_tile::@8 -vera_layer_mode_tile::@2: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@1 - vera_layer_mode_tile::tileheight#33 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::tileheight#32 ) - vera_layer_mode_tile::tilewidth#29 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::tilewidth#28 ) - vera_layer_mode_tile::tilebase_address#29 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::tilebase_address#28 ) - vera_layer_mode_tile::mapbase_address#28 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::mapbase_address#27 ) - vera_layer_mode_tile::mapheight#21 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::mapheight#20 ) - vera_layer_mode_tile::layer#33 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::layer#32 ) - vera_layer_mode_tile::mapwidth#13 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::mapwidth#12 ) - vera_layer_mode_tile::config#27 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::config#26 ) - vera_layer_mode_tile::color_depth#4 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::color_depth#3 ) - if(vera_layer_mode_tile::color_depth#4==4) goto vera_layer_mode_tile::@6 - to:vera_layer_mode_tile::@3 -vera_layer_mode_tile::@6: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@2 - vera_layer_mode_tile::tileheight#29 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::tileheight#33 ) - vera_layer_mode_tile::tilewidth#25 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::tilewidth#29 ) - vera_layer_mode_tile::tilebase_address#25 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::tilebase_address#29 ) - vera_layer_mode_tile::mapbase_address#24 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::mapbase_address#28 ) - vera_layer_mode_tile::mapheight#17 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::mapheight#21 ) - vera_layer_mode_tile::layer#25 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::layer#33 ) - vera_layer_mode_tile::mapwidth#9 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::mapwidth#13 ) - vera_layer_mode_tile::config#15 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::config#27 ) - vera_layer_mode_tile::config#3 = vera_layer_mode_tile::config#15 | VERA_LAYER_COLOR_DEPTH_4BPP - to:vera_layer_mode_tile::@8 -vera_layer_mode_tile::@3: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@2 - vera_layer_mode_tile::tileheight#26 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::tileheight#33 ) - vera_layer_mode_tile::tilewidth#22 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::tilewidth#29 ) - vera_layer_mode_tile::tilebase_address#22 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::tilebase_address#29 ) - vera_layer_mode_tile::mapbase_address#21 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::mapbase_address#28 ) - vera_layer_mode_tile::mapheight#14 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::mapheight#21 ) - vera_layer_mode_tile::layer#22 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::layer#33 ) - vera_layer_mode_tile::mapwidth#6 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::mapwidth#13 ) - vera_layer_mode_tile::config#28 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::config#27 ) - vera_layer_mode_tile::color_depth#5 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::color_depth#4 ) - if(vera_layer_mode_tile::color_depth#5==8) goto vera_layer_mode_tile::@7 - to:vera_layer_mode_tile::@8 -vera_layer_mode_tile::@7: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@3 - vera_layer_mode_tile::tileheight#30 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::tileheight#26 ) - vera_layer_mode_tile::tilewidth#26 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::tilewidth#22 ) - vera_layer_mode_tile::tilebase_address#26 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::tilebase_address#22 ) - vera_layer_mode_tile::mapbase_address#25 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::mapbase_address#21 ) - vera_layer_mode_tile::mapheight#18 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::mapheight#14 ) - vera_layer_mode_tile::layer#26 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::layer#22 ) - vera_layer_mode_tile::mapwidth#10 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::mapwidth#6 ) - vera_layer_mode_tile::config#16 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::config#28 ) - vera_layer_mode_tile::config#4 = vera_layer_mode_tile::config#16 | VERA_LAYER_COLOR_DEPTH_8BPP - to:vera_layer_mode_tile::@8 -vera_layer_mode_tile::@8: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@3 vera_layer_mode_tile::@4 vera_layer_mode_tile::@5 vera_layer_mode_tile::@6 vera_layer_mode_tile::@7 - vera_layer_mode_tile::tileheight#23 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::tileheight#26, vera_layer_mode_tile::@4/vera_layer_mode_tile::tileheight#27, vera_layer_mode_tile::@5/vera_layer_mode_tile::tileheight#28, vera_layer_mode_tile::@6/vera_layer_mode_tile::tileheight#29, vera_layer_mode_tile::@7/vera_layer_mode_tile::tileheight#30 ) - vera_layer_mode_tile::tilewidth#19 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::tilewidth#22, vera_layer_mode_tile::@4/vera_layer_mode_tile::tilewidth#23, vera_layer_mode_tile::@5/vera_layer_mode_tile::tilewidth#24, vera_layer_mode_tile::@6/vera_layer_mode_tile::tilewidth#25, vera_layer_mode_tile::@7/vera_layer_mode_tile::tilewidth#26 ) - vera_layer_mode_tile::tilebase_address#19 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::tilebase_address#22, vera_layer_mode_tile::@4/vera_layer_mode_tile::tilebase_address#23, vera_layer_mode_tile::@5/vera_layer_mode_tile::tilebase_address#24, vera_layer_mode_tile::@6/vera_layer_mode_tile::tilebase_address#25, vera_layer_mode_tile::@7/vera_layer_mode_tile::tilebase_address#26 ) - vera_layer_mode_tile::mapbase_address#18 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::mapbase_address#21, vera_layer_mode_tile::@4/vera_layer_mode_tile::mapbase_address#22, vera_layer_mode_tile::@5/vera_layer_mode_tile::mapbase_address#23, vera_layer_mode_tile::@6/vera_layer_mode_tile::mapbase_address#24, vera_layer_mode_tile::@7/vera_layer_mode_tile::mapbase_address#25 ) - vera_layer_mode_tile::mapheight#11 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::mapheight#14, vera_layer_mode_tile::@4/vera_layer_mode_tile::mapheight#15, vera_layer_mode_tile::@5/vera_layer_mode_tile::mapheight#16, vera_layer_mode_tile::@6/vera_layer_mode_tile::mapheight#17, vera_layer_mode_tile::@7/vera_layer_mode_tile::mapheight#18 ) - vera_layer_mode_tile::layer#10 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::layer#22, vera_layer_mode_tile::@4/vera_layer_mode_tile::layer#23, vera_layer_mode_tile::@5/vera_layer_mode_tile::layer#24, vera_layer_mode_tile::@6/vera_layer_mode_tile::layer#25, vera_layer_mode_tile::@7/vera_layer_mode_tile::layer#26 ) - vera_layer_mode_tile::config#29 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::config#28, vera_layer_mode_tile::@4/vera_layer_mode_tile::config#1, vera_layer_mode_tile::@5/vera_layer_mode_tile::config#2, vera_layer_mode_tile::@6/vera_layer_mode_tile::config#3, vera_layer_mode_tile::@7/vera_layer_mode_tile::config#4 ) - vera_layer_mode_tile::mapwidth#2 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::mapwidth#6, vera_layer_mode_tile::@4/vera_layer_mode_tile::mapwidth#7, vera_layer_mode_tile::@5/vera_layer_mode_tile::mapwidth#8, vera_layer_mode_tile::@6/vera_layer_mode_tile::mapwidth#9, vera_layer_mode_tile::@7/vera_layer_mode_tile::mapwidth#10 ) - if(vera_layer_mode_tile::mapwidth#2==$20) goto vera_layer_mode_tile::@12 - to:vera_layer_mode_tile::@9 -vera_layer_mode_tile::@12: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@8 - vera_layer_mode_tile::tileheight#19 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::tileheight#23 ) - vera_layer_mode_tile::tilewidth#15 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::tilewidth#19 ) - vera_layer_mode_tile::tilebase_address#15 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::tilebase_address#19 ) - vera_layer_mode_tile::mapbase_address#14 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::mapbase_address#18 ) - vera_layer_mode_tile::mapheight#7 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::mapheight#11 ) - vera_layer_mode_tile::layer#2 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::layer#10 ) - vera_layer_mode_tile::config#17 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::config#29 ) - vera_layer_mode_tile::config#5 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_32 - vera_layer_rowshift[vera_layer_mode_tile::layer#2] = 6 - vera_layer_mode_tile::$11 = vera_layer_mode_tile::layer#2 * SIZEOF_UNSIGNED_INT - vera_layer_rowskip[vera_layer_mode_tile::$11] = $40 - to:vera_layer_mode_tile::@16 -vera_layer_mode_tile::@9: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@8 - vera_layer_mode_tile::tileheight#24 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::tileheight#23 ) - vera_layer_mode_tile::tilewidth#20 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::tilewidth#19 ) - vera_layer_mode_tile::tilebase_address#20 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::tilebase_address#19 ) - vera_layer_mode_tile::mapbase_address#19 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::mapbase_address#18 ) - vera_layer_mode_tile::mapheight#12 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::mapheight#11 ) - vera_layer_mode_tile::layer#11 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::layer#10 ) - vera_layer_mode_tile::config#30 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::config#29 ) - vera_layer_mode_tile::mapwidth#3 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::mapwidth#2 ) - if(vera_layer_mode_tile::mapwidth#3==$40) goto vera_layer_mode_tile::@13 - to:vera_layer_mode_tile::@10 -vera_layer_mode_tile::@13: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@9 - vera_layer_mode_tile::tileheight#20 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::tileheight#24 ) - vera_layer_mode_tile::tilewidth#16 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::tilewidth#20 ) - vera_layer_mode_tile::tilebase_address#16 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::tilebase_address#20 ) - vera_layer_mode_tile::mapbase_address#15 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::mapbase_address#19 ) - vera_layer_mode_tile::mapheight#8 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::mapheight#12 ) - vera_layer_mode_tile::layer#3 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::layer#11 ) - vera_layer_mode_tile::config#18 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::config#30 ) - vera_layer_mode_tile::config#6 = vera_layer_mode_tile::config#18 | VERA_LAYER_WIDTH_64 - vera_layer_rowshift[vera_layer_mode_tile::layer#3] = 7 - vera_layer_mode_tile::$12 = vera_layer_mode_tile::layer#3 * SIZEOF_UNSIGNED_INT - vera_layer_rowskip[vera_layer_mode_tile::$12] = $80 - to:vera_layer_mode_tile::@16 -vera_layer_mode_tile::@10: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@9 - vera_layer_mode_tile::tileheight#25 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::tileheight#24 ) - vera_layer_mode_tile::tilewidth#21 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::tilewidth#20 ) - vera_layer_mode_tile::tilebase_address#21 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::tilebase_address#20 ) - vera_layer_mode_tile::mapbase_address#20 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::mapbase_address#19 ) - vera_layer_mode_tile::mapheight#13 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::mapheight#12 ) - vera_layer_mode_tile::layer#12 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::layer#11 ) - vera_layer_mode_tile::config#31 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::config#30 ) - vera_layer_mode_tile::mapwidth#4 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::mapwidth#3 ) - if(vera_layer_mode_tile::mapwidth#4==$80) goto vera_layer_mode_tile::@14 - to:vera_layer_mode_tile::@11 -vera_layer_mode_tile::@14: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@10 - vera_layer_mode_tile::tileheight#21 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::tileheight#25 ) - vera_layer_mode_tile::tilewidth#17 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::tilewidth#21 ) - vera_layer_mode_tile::tilebase_address#17 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::tilebase_address#21 ) - vera_layer_mode_tile::mapbase_address#16 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::mapbase_address#20 ) - vera_layer_mode_tile::mapheight#9 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::mapheight#13 ) - vera_layer_mode_tile::layer#4 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::layer#12 ) - vera_layer_mode_tile::config#19 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::config#31 ) - vera_layer_mode_tile::config#7 = vera_layer_mode_tile::config#19 | VERA_LAYER_WIDTH_128 - vera_layer_rowshift[vera_layer_mode_tile::layer#4] = 8 - vera_layer_mode_tile::$13 = vera_layer_mode_tile::layer#4 * SIZEOF_UNSIGNED_INT - vera_layer_rowskip[vera_layer_mode_tile::$13] = $100 - to:vera_layer_mode_tile::@16 -vera_layer_mode_tile::@11: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@10 - vera_layer_mode_tile::tileheight#18 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::tileheight#25 ) - vera_layer_mode_tile::tilewidth#14 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::tilewidth#21 ) - vera_layer_mode_tile::tilebase_address#14 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::tilebase_address#21 ) - vera_layer_mode_tile::mapbase_address#13 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::mapbase_address#20 ) - vera_layer_mode_tile::mapheight#6 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::mapheight#13 ) - vera_layer_mode_tile::layer#13 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::layer#12 ) - vera_layer_mode_tile::config#32 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::config#31 ) - vera_layer_mode_tile::mapwidth#5 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::mapwidth#4 ) - if(vera_layer_mode_tile::mapwidth#5==$100) goto vera_layer_mode_tile::@15 - to:vera_layer_mode_tile::@16 -vera_layer_mode_tile::@15: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@11 - vera_layer_mode_tile::tileheight#22 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::tileheight#18 ) - vera_layer_mode_tile::tilewidth#18 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::tilewidth#14 ) - vera_layer_mode_tile::tilebase_address#18 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::tilebase_address#14 ) - vera_layer_mode_tile::mapbase_address#17 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::mapbase_address#13 ) - vera_layer_mode_tile::mapheight#10 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::mapheight#6 ) - vera_layer_mode_tile::layer#5 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::layer#13 ) - vera_layer_mode_tile::config#20 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::config#32 ) - vera_layer_mode_tile::config#8 = vera_layer_mode_tile::config#20 | VERA_LAYER_WIDTH_256 - vera_layer_rowshift[vera_layer_mode_tile::layer#5] = 9 - vera_layer_mode_tile::$14 = vera_layer_mode_tile::layer#5 * SIZEOF_UNSIGNED_INT - vera_layer_rowskip[vera_layer_mode_tile::$14] = $200 - to:vera_layer_mode_tile::@16 -vera_layer_mode_tile::@16: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@11 vera_layer_mode_tile::@12 vera_layer_mode_tile::@13 vera_layer_mode_tile::@14 vera_layer_mode_tile::@15 - vera_layer_mode_tile::tileheight#15 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::tileheight#18, vera_layer_mode_tile::@12/vera_layer_mode_tile::tileheight#19, vera_layer_mode_tile::@13/vera_layer_mode_tile::tileheight#20, vera_layer_mode_tile::@14/vera_layer_mode_tile::tileheight#21, vera_layer_mode_tile::@15/vera_layer_mode_tile::tileheight#22 ) - vera_layer_mode_tile::tilewidth#11 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::tilewidth#14, vera_layer_mode_tile::@12/vera_layer_mode_tile::tilewidth#15, vera_layer_mode_tile::@13/vera_layer_mode_tile::tilewidth#16, vera_layer_mode_tile::@14/vera_layer_mode_tile::tilewidth#17, vera_layer_mode_tile::@15/vera_layer_mode_tile::tilewidth#18 ) - vera_layer_mode_tile::tilebase_address#11 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::tilebase_address#14, vera_layer_mode_tile::@12/vera_layer_mode_tile::tilebase_address#15, vera_layer_mode_tile::@13/vera_layer_mode_tile::tilebase_address#16, vera_layer_mode_tile::@14/vera_layer_mode_tile::tilebase_address#17, vera_layer_mode_tile::@15/vera_layer_mode_tile::tilebase_address#18 ) - vera_layer_mode_tile::mapbase_address#10 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::mapbase_address#13, vera_layer_mode_tile::@12/vera_layer_mode_tile::mapbase_address#14, vera_layer_mode_tile::@13/vera_layer_mode_tile::mapbase_address#15, vera_layer_mode_tile::@14/vera_layer_mode_tile::mapbase_address#16, vera_layer_mode_tile::@15/vera_layer_mode_tile::mapbase_address#17 ) - vera_layer_mode_tile::layer#27 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::layer#13, vera_layer_mode_tile::@12/vera_layer_mode_tile::layer#2, vera_layer_mode_tile::@13/vera_layer_mode_tile::layer#3, vera_layer_mode_tile::@14/vera_layer_mode_tile::layer#4, vera_layer_mode_tile::@15/vera_layer_mode_tile::layer#5 ) - vera_layer_mode_tile::config#33 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::config#32, vera_layer_mode_tile::@12/vera_layer_mode_tile::config#5, vera_layer_mode_tile::@13/vera_layer_mode_tile::config#6, vera_layer_mode_tile::@14/vera_layer_mode_tile::config#7, vera_layer_mode_tile::@15/vera_layer_mode_tile::config#8 ) - vera_layer_mode_tile::mapheight#2 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::mapheight#6, vera_layer_mode_tile::@12/vera_layer_mode_tile::mapheight#7, vera_layer_mode_tile::@13/vera_layer_mode_tile::mapheight#8, vera_layer_mode_tile::@14/vera_layer_mode_tile::mapheight#9, vera_layer_mode_tile::@15/vera_layer_mode_tile::mapheight#10 ) - if(vera_layer_mode_tile::mapheight#2==$20) goto vera_layer_mode_tile::@20 - to:vera_layer_mode_tile::@17 -vera_layer_mode_tile::@20: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@16 - vera_layer_mode_tile::tileheight#11 = phi( vera_layer_mode_tile::@16/vera_layer_mode_tile::tileheight#15 ) - vera_layer_mode_tile::tilewidth#7 = phi( vera_layer_mode_tile::@16/vera_layer_mode_tile::tilewidth#11 ) - vera_layer_mode_tile::tilebase_address#7 = phi( vera_layer_mode_tile::@16/vera_layer_mode_tile::tilebase_address#11 ) - vera_layer_mode_tile::mapbase_address#6 = phi( vera_layer_mode_tile::@16/vera_layer_mode_tile::mapbase_address#10 ) - vera_layer_mode_tile::layer#15 = phi( vera_layer_mode_tile::@16/vera_layer_mode_tile::layer#27 ) - vera_layer_mode_tile::config#21 = phi( vera_layer_mode_tile::@16/vera_layer_mode_tile::config#33 ) - vera_layer_mode_tile::config#9 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_32 - to:vera_layer_mode_tile::@24 -vera_layer_mode_tile::@17: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@16 - vera_layer_mode_tile::tileheight#16 = phi( vera_layer_mode_tile::@16/vera_layer_mode_tile::tileheight#15 ) - vera_layer_mode_tile::tilewidth#12 = phi( vera_layer_mode_tile::@16/vera_layer_mode_tile::tilewidth#11 ) - vera_layer_mode_tile::tilebase_address#12 = phi( vera_layer_mode_tile::@16/vera_layer_mode_tile::tilebase_address#11 ) - vera_layer_mode_tile::mapbase_address#11 = phi( vera_layer_mode_tile::@16/vera_layer_mode_tile::mapbase_address#10 ) - vera_layer_mode_tile::layer#28 = phi( vera_layer_mode_tile::@16/vera_layer_mode_tile::layer#27 ) - vera_layer_mode_tile::config#34 = phi( vera_layer_mode_tile::@16/vera_layer_mode_tile::config#33 ) - vera_layer_mode_tile::mapheight#3 = phi( vera_layer_mode_tile::@16/vera_layer_mode_tile::mapheight#2 ) - if(vera_layer_mode_tile::mapheight#3==$40) goto vera_layer_mode_tile::@21 - to:vera_layer_mode_tile::@18 -vera_layer_mode_tile::@21: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@17 - vera_layer_mode_tile::tileheight#12 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::tileheight#16 ) - vera_layer_mode_tile::tilewidth#8 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::tilewidth#12 ) - vera_layer_mode_tile::tilebase_address#8 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::tilebase_address#12 ) - vera_layer_mode_tile::mapbase_address#7 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::mapbase_address#11 ) - vera_layer_mode_tile::layer#16 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::layer#28 ) - vera_layer_mode_tile::config#22 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::config#34 ) - vera_layer_mode_tile::config#10 = vera_layer_mode_tile::config#22 | VERA_LAYER_HEIGHT_64 - to:vera_layer_mode_tile::@24 -vera_layer_mode_tile::@18: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@17 - vera_layer_mode_tile::tileheight#17 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::tileheight#16 ) - vera_layer_mode_tile::tilewidth#13 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::tilewidth#12 ) - vera_layer_mode_tile::tilebase_address#13 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::tilebase_address#12 ) - vera_layer_mode_tile::mapbase_address#12 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::mapbase_address#11 ) - vera_layer_mode_tile::layer#29 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::layer#28 ) - vera_layer_mode_tile::config#35 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::config#34 ) - vera_layer_mode_tile::mapheight#4 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::mapheight#3 ) - if(vera_layer_mode_tile::mapheight#4==$80) goto vera_layer_mode_tile::@22 - to:vera_layer_mode_tile::@19 -vera_layer_mode_tile::@22: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@18 - vera_layer_mode_tile::tileheight#13 = phi( vera_layer_mode_tile::@18/vera_layer_mode_tile::tileheight#17 ) - vera_layer_mode_tile::tilewidth#9 = phi( vera_layer_mode_tile::@18/vera_layer_mode_tile::tilewidth#13 ) - vera_layer_mode_tile::tilebase_address#9 = phi( vera_layer_mode_tile::@18/vera_layer_mode_tile::tilebase_address#13 ) - vera_layer_mode_tile::mapbase_address#8 = phi( vera_layer_mode_tile::@18/vera_layer_mode_tile::mapbase_address#12 ) - vera_layer_mode_tile::layer#17 = phi( vera_layer_mode_tile::@18/vera_layer_mode_tile::layer#29 ) - vera_layer_mode_tile::config#23 = phi( vera_layer_mode_tile::@18/vera_layer_mode_tile::config#35 ) - vera_layer_mode_tile::config#11 = vera_layer_mode_tile::config#23 | VERA_LAYER_HEIGHT_128 - to:vera_layer_mode_tile::@24 -vera_layer_mode_tile::@19: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@18 - vera_layer_mode_tile::tileheight#10 = phi( vera_layer_mode_tile::@18/vera_layer_mode_tile::tileheight#17 ) - vera_layer_mode_tile::tilewidth#6 = phi( vera_layer_mode_tile::@18/vera_layer_mode_tile::tilewidth#13 ) - vera_layer_mode_tile::tilebase_address#6 = phi( vera_layer_mode_tile::@18/vera_layer_mode_tile::tilebase_address#13 ) - vera_layer_mode_tile::mapbase_address#5 = phi( vera_layer_mode_tile::@18/vera_layer_mode_tile::mapbase_address#12 ) - vera_layer_mode_tile::layer#14 = phi( vera_layer_mode_tile::@18/vera_layer_mode_tile::layer#29 ) - vera_layer_mode_tile::config#36 = phi( vera_layer_mode_tile::@18/vera_layer_mode_tile::config#35 ) - vera_layer_mode_tile::mapheight#5 = phi( vera_layer_mode_tile::@18/vera_layer_mode_tile::mapheight#4 ) - if(vera_layer_mode_tile::mapheight#5==$100) goto vera_layer_mode_tile::@23 - to:vera_layer_mode_tile::@24 -vera_layer_mode_tile::@23: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@19 - vera_layer_mode_tile::tileheight#14 = phi( vera_layer_mode_tile::@19/vera_layer_mode_tile::tileheight#10 ) - vera_layer_mode_tile::tilewidth#10 = phi( vera_layer_mode_tile::@19/vera_layer_mode_tile::tilewidth#6 ) - vera_layer_mode_tile::tilebase_address#10 = phi( vera_layer_mode_tile::@19/vera_layer_mode_tile::tilebase_address#6 ) - vera_layer_mode_tile::mapbase_address#9 = phi( vera_layer_mode_tile::@19/vera_layer_mode_tile::mapbase_address#5 ) - vera_layer_mode_tile::layer#18 = phi( vera_layer_mode_tile::@19/vera_layer_mode_tile::layer#14 ) - vera_layer_mode_tile::config#24 = phi( vera_layer_mode_tile::@19/vera_layer_mode_tile::config#36 ) - vera_layer_mode_tile::config#12 = vera_layer_mode_tile::config#24 | VERA_LAYER_HEIGHT_256 - to:vera_layer_mode_tile::@24 -vera_layer_mode_tile::@24: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@19 vera_layer_mode_tile::@20 vera_layer_mode_tile::@21 vera_layer_mode_tile::@22 vera_layer_mode_tile::@23 - vera_layer_mode_tile::tileheight#9 = phi( vera_layer_mode_tile::@19/vera_layer_mode_tile::tileheight#10, vera_layer_mode_tile::@20/vera_layer_mode_tile::tileheight#11, vera_layer_mode_tile::@21/vera_layer_mode_tile::tileheight#12, vera_layer_mode_tile::@22/vera_layer_mode_tile::tileheight#13, vera_layer_mode_tile::@23/vera_layer_mode_tile::tileheight#14 ) - vera_layer_mode_tile::tilewidth#5 = phi( vera_layer_mode_tile::@19/vera_layer_mode_tile::tilewidth#6, vera_layer_mode_tile::@20/vera_layer_mode_tile::tilewidth#7, vera_layer_mode_tile::@21/vera_layer_mode_tile::tilewidth#8, vera_layer_mode_tile::@22/vera_layer_mode_tile::tilewidth#9, vera_layer_mode_tile::@23/vera_layer_mode_tile::tilewidth#10 ) - vera_layer_mode_tile::tilebase_address#5 = phi( vera_layer_mode_tile::@19/vera_layer_mode_tile::tilebase_address#6, vera_layer_mode_tile::@20/vera_layer_mode_tile::tilebase_address#7, vera_layer_mode_tile::@21/vera_layer_mode_tile::tilebase_address#8, vera_layer_mode_tile::@22/vera_layer_mode_tile::tilebase_address#9, vera_layer_mode_tile::@23/vera_layer_mode_tile::tilebase_address#10 ) - vera_layer_mode_tile::mapbase_address#4 = phi( vera_layer_mode_tile::@19/vera_layer_mode_tile::mapbase_address#5, vera_layer_mode_tile::@20/vera_layer_mode_tile::mapbase_address#6, vera_layer_mode_tile::@21/vera_layer_mode_tile::mapbase_address#7, vera_layer_mode_tile::@22/vera_layer_mode_tile::mapbase_address#8, vera_layer_mode_tile::@23/vera_layer_mode_tile::mapbase_address#9 ) - vera_layer_mode_tile::config#25 = phi( vera_layer_mode_tile::@19/vera_layer_mode_tile::config#36, vera_layer_mode_tile::@20/vera_layer_mode_tile::config#9, vera_layer_mode_tile::@21/vera_layer_mode_tile::config#10, vera_layer_mode_tile::@22/vera_layer_mode_tile::config#11, vera_layer_mode_tile::@23/vera_layer_mode_tile::config#12 ) - vera_layer_mode_tile::layer#6 = phi( vera_layer_mode_tile::@19/vera_layer_mode_tile::layer#14, vera_layer_mode_tile::@20/vera_layer_mode_tile::layer#15, vera_layer_mode_tile::@21/vera_layer_mode_tile::layer#16, vera_layer_mode_tile::@22/vera_layer_mode_tile::layer#17, vera_layer_mode_tile::@23/vera_layer_mode_tile::layer#18 ) - vera_layer_set_config::layer#0 = vera_layer_mode_tile::layer#6 - vera_layer_set_config::config#0 = vera_layer_mode_tile::config#25 - call vera_layer_set_config - to:vera_layer_mode_tile::@33 -vera_layer_mode_tile::@33: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@24 - vera_layer_mode_tile::tileheight#8 = phi( vera_layer_mode_tile::@24/vera_layer_mode_tile::tileheight#9 ) - vera_layer_mode_tile::tilewidth#4 = phi( vera_layer_mode_tile::@24/vera_layer_mode_tile::tilewidth#5 ) - vera_layer_mode_tile::tilebase_address#4 = phi( vera_layer_mode_tile::@24/vera_layer_mode_tile::tilebase_address#5 ) - vera_layer_mode_tile::layer#7 = phi( vera_layer_mode_tile::@24/vera_layer_mode_tile::layer#6 ) - vera_layer_mode_tile::mapbase_address#3 = phi( vera_layer_mode_tile::@24/vera_layer_mode_tile::mapbase_address#4 ) - vera_layer_mode_tile::$1 = word0 vera_layer_mode_tile::mapbase_address#3 - vera_layer_mode_tile::$15 = vera_layer_mode_tile::layer#7 * SIZEOF_UNSIGNED_INT - vera_mapbase_offset[vera_layer_mode_tile::$15] = vera_layer_mode_tile::$1 - vera_layer_mode_tile::$2 = byte2 vera_layer_mode_tile::mapbase_address#3 - vera_mapbase_bank[vera_layer_mode_tile::layer#7] = vera_layer_mode_tile::$2 - vera_layer_mode_tile::$16 = vera_layer_mode_tile::layer#7 * SIZEOF_UNSIGNED_LONG - vera_mapbase_address[vera_layer_mode_tile::$16] = vera_layer_mode_tile::mapbase_address#3 - vera_layer_mode_tile::$3 = vera_layer_mode_tile::mapbase_address#3 >> 1 - vera_layer_mode_tile::mapbase_address#0 = vera_layer_mode_tile::$3 - vera_layer_mode_tile::mapbase#0 = byte1 vera_layer_mode_tile::mapbase_address#0 - vera_layer_set_mapbase::layer#0 = vera_layer_mode_tile::layer#7 - vera_layer_set_mapbase::mapbase#0 = vera_layer_mode_tile::mapbase#0 - call vera_layer_set_mapbase - to:vera_layer_mode_tile::@34 -vera_layer_mode_tile::@34: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@33 - vera_layer_mode_tile::tileheight#7 = phi( vera_layer_mode_tile::@33/vera_layer_mode_tile::tileheight#8 ) - vera_layer_mode_tile::tilewidth#2 = phi( vera_layer_mode_tile::@33/vera_layer_mode_tile::tilewidth#4 ) - vera_layer_mode_tile::layer#8 = phi( vera_layer_mode_tile::@33/vera_layer_mode_tile::layer#7 ) - vera_layer_mode_tile::tilebase_address#3 = phi( vera_layer_mode_tile::@33/vera_layer_mode_tile::tilebase_address#4 ) - vera_layer_mode_tile::$6 = word0 vera_layer_mode_tile::tilebase_address#3 - vera_layer_mode_tile::$17 = vera_layer_mode_tile::layer#8 * SIZEOF_UNSIGNED_INT - vera_tilebase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$6 - vera_layer_mode_tile::$7 = byte2 vera_layer_mode_tile::tilebase_address#3 - vera_tilebase_bank[vera_layer_mode_tile::layer#8] = vera_layer_mode_tile::$7 - vera_layer_mode_tile::$18 = vera_layer_mode_tile::layer#8 * SIZEOF_UNSIGNED_LONG - vera_tilebase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::tilebase_address#3 - vera_layer_mode_tile::$8 = vera_layer_mode_tile::tilebase_address#3 >> 1 - vera_layer_mode_tile::tilebase_address#0 = vera_layer_mode_tile::$8 - vera_layer_mode_tile::tilebase#0 = byte1 vera_layer_mode_tile::tilebase_address#0 - vera_layer_mode_tile::tilebase#1 = vera_layer_mode_tile::tilebase#0 & VERA_LAYER_TILEBASE_MASK - if(vera_layer_mode_tile::tilewidth#2==8) goto vera_layer_mode_tile::@26 - to:vera_layer_mode_tile::@25 -vera_layer_mode_tile::@26: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@34 - vera_layer_mode_tile::layer#35 = phi( vera_layer_mode_tile::@34/vera_layer_mode_tile::layer#8 ) - vera_layer_mode_tile::tileheight#5 = phi( vera_layer_mode_tile::@34/vera_layer_mode_tile::tileheight#7 ) - vera_layer_mode_tile::tilebase#6 = phi( vera_layer_mode_tile::@34/vera_layer_mode_tile::tilebase#1 ) - vera_layer_mode_tile::tilebase#2 = vera_layer_mode_tile::tilebase#6 | VERA_TILEBASE_WIDTH_8 - to:vera_layer_mode_tile::@28 -vera_layer_mode_tile::@25: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@34 - vera_layer_mode_tile::layer#34 = phi( vera_layer_mode_tile::@34/vera_layer_mode_tile::layer#8 ) - vera_layer_mode_tile::tileheight#4 = phi( vera_layer_mode_tile::@34/vera_layer_mode_tile::tileheight#7 ) - vera_layer_mode_tile::tilebase#11 = phi( vera_layer_mode_tile::@34/vera_layer_mode_tile::tilebase#1 ) - vera_layer_mode_tile::tilewidth#3 = phi( vera_layer_mode_tile::@34/vera_layer_mode_tile::tilewidth#2 ) - if(vera_layer_mode_tile::tilewidth#3==$10) goto vera_layer_mode_tile::@27 - to:vera_layer_mode_tile::@28 -vera_layer_mode_tile::@27: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@25 - vera_layer_mode_tile::layer#36 = phi( vera_layer_mode_tile::@25/vera_layer_mode_tile::layer#34 ) - vera_layer_mode_tile::tileheight#6 = phi( vera_layer_mode_tile::@25/vera_layer_mode_tile::tileheight#4 ) - vera_layer_mode_tile::tilebase#7 = phi( vera_layer_mode_tile::@25/vera_layer_mode_tile::tilebase#11 ) - vera_layer_mode_tile::tilebase#3 = vera_layer_mode_tile::tilebase#7 | VERA_TILEBASE_WIDTH_16 - to:vera_layer_mode_tile::@28 -vera_layer_mode_tile::@28: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@25 vera_layer_mode_tile::@26 vera_layer_mode_tile::@27 - vera_layer_mode_tile::layer#30 = phi( vera_layer_mode_tile::@25/vera_layer_mode_tile::layer#34, vera_layer_mode_tile::@26/vera_layer_mode_tile::layer#35, vera_layer_mode_tile::@27/vera_layer_mode_tile::layer#36 ) - vera_layer_mode_tile::tilebase#12 = phi( vera_layer_mode_tile::@25/vera_layer_mode_tile::tilebase#11, vera_layer_mode_tile::@26/vera_layer_mode_tile::tilebase#2, vera_layer_mode_tile::@27/vera_layer_mode_tile::tilebase#3 ) - vera_layer_mode_tile::tileheight#2 = phi( vera_layer_mode_tile::@25/vera_layer_mode_tile::tileheight#4, vera_layer_mode_tile::@26/vera_layer_mode_tile::tileheight#5, vera_layer_mode_tile::@27/vera_layer_mode_tile::tileheight#6 ) - if(vera_layer_mode_tile::tileheight#2==8) goto vera_layer_mode_tile::@30 - to:vera_layer_mode_tile::@29 -vera_layer_mode_tile::@30: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@28 - vera_layer_mode_tile::layer#20 = phi( vera_layer_mode_tile::@28/vera_layer_mode_tile::layer#30 ) - vera_layer_mode_tile::tilebase#8 = phi( vera_layer_mode_tile::@28/vera_layer_mode_tile::tilebase#12 ) - vera_layer_mode_tile::tilebase#4 = vera_layer_mode_tile::tilebase#8 | VERA_TILEBASE_HEIGHT_8 - to:vera_layer_mode_tile::@32 -vera_layer_mode_tile::@29: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@28 - vera_layer_mode_tile::layer#19 = phi( vera_layer_mode_tile::@28/vera_layer_mode_tile::layer#30 ) - vera_layer_mode_tile::tilebase#13 = phi( vera_layer_mode_tile::@28/vera_layer_mode_tile::tilebase#12 ) - vera_layer_mode_tile::tileheight#3 = phi( vera_layer_mode_tile::@28/vera_layer_mode_tile::tileheight#2 ) - if(vera_layer_mode_tile::tileheight#3==$10) goto vera_layer_mode_tile::@31 - to:vera_layer_mode_tile::@32 -vera_layer_mode_tile::@31: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@29 - vera_layer_mode_tile::layer#21 = phi( vera_layer_mode_tile::@29/vera_layer_mode_tile::layer#19 ) - vera_layer_mode_tile::tilebase#9 = phi( vera_layer_mode_tile::@29/vera_layer_mode_tile::tilebase#13 ) - vera_layer_mode_tile::tilebase#5 = vera_layer_mode_tile::tilebase#9 | VERA_TILEBASE_HEIGHT_16 - to:vera_layer_mode_tile::@32 -vera_layer_mode_tile::@32: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@29 vera_layer_mode_tile::@30 vera_layer_mode_tile::@31 - vera_layer_mode_tile::tilebase#10 = phi( vera_layer_mode_tile::@29/vera_layer_mode_tile::tilebase#13, vera_layer_mode_tile::@30/vera_layer_mode_tile::tilebase#4, vera_layer_mode_tile::@31/vera_layer_mode_tile::tilebase#5 ) - vera_layer_mode_tile::layer#9 = phi( vera_layer_mode_tile::@29/vera_layer_mode_tile::layer#19, vera_layer_mode_tile::@30/vera_layer_mode_tile::layer#20, vera_layer_mode_tile::@31/vera_layer_mode_tile::layer#21 ) - vera_layer_set_tilebase::layer#0 = vera_layer_mode_tile::layer#9 - vera_layer_set_tilebase::tilebase#0 = vera_layer_mode_tile::tilebase#10 - call vera_layer_set_tilebase - to:vera_layer_mode_tile::@35 -vera_layer_mode_tile::@35: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@32 - to:vera_layer_mode_tile::@return -vera_layer_mode_tile::@return: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@35 - return - to:@return - -void vera_layer_mode_text(char layer , unsigned long mapbase_address , unsigned long tilebase_address , unsigned int mapwidth , unsigned int mapheight , char tilewidth , char tileheight , unsigned int color_mode) -vera_layer_mode_text: scope:[vera_layer_mode_text] from conio_x16_init - vera_layer_mode_text::color_mode#3 = phi( conio_x16_init/vera_layer_mode_text::color_mode#0 ) - vera_layer_mode_text::tileheight#1 = phi( conio_x16_init/vera_layer_mode_text::tileheight#0 ) - vera_layer_mode_text::tilewidth#1 = phi( conio_x16_init/vera_layer_mode_text::tilewidth#0 ) - vera_layer_mode_text::mapheight#1 = phi( conio_x16_init/vera_layer_mode_text::mapheight#0 ) - vera_layer_mode_text::mapwidth#1 = phi( conio_x16_init/vera_layer_mode_text::mapwidth#0 ) - vera_layer_mode_text::tilebase_address#1 = phi( conio_x16_init/vera_layer_mode_text::tilebase_address#0 ) - vera_layer_mode_text::mapbase_address#1 = phi( conio_x16_init/vera_layer_mode_text::mapbase_address#0 ) - vera_layer_mode_text::layer#1 = phi( conio_x16_init/vera_layer_mode_text::layer#0 ) - vera_layer_mode_tile::layer#0 = vera_layer_mode_text::layer#1 - vera_layer_mode_tile::mapbase_address#1 = vera_layer_mode_text::mapbase_address#1 - vera_layer_mode_tile::tilebase_address#1 = vera_layer_mode_text::tilebase_address#1 - vera_layer_mode_tile::mapwidth#0 = vera_layer_mode_text::mapwidth#1 - vera_layer_mode_tile::mapheight#0 = vera_layer_mode_text::mapheight#1 - vera_layer_mode_tile::tilewidth#0 = vera_layer_mode_text::tilewidth#1 - vera_layer_mode_tile::tileheight#0 = vera_layer_mode_text::tileheight#1 - vera_layer_mode_tile::color_depth#0 = 1 - call vera_layer_mode_tile - to:vera_layer_mode_text::@4 -vera_layer_mode_text::@4: scope:[vera_layer_mode_text] from vera_layer_mode_text - vera_layer_mode_text::layer#4 = phi( vera_layer_mode_text/vera_layer_mode_text::layer#1 ) - vera_layer_mode_text::color_mode#1 = phi( vera_layer_mode_text/vera_layer_mode_text::color_mode#3 ) - if(vera_layer_mode_text::color_mode#1==$10) goto vera_layer_mode_text::@2 - to:vera_layer_mode_text::@1 -vera_layer_mode_text::@2: scope:[vera_layer_mode_text] from vera_layer_mode_text::@4 - vera_layer_mode_text::layer#2 = phi( vera_layer_mode_text::@4/vera_layer_mode_text::layer#4 ) - vera_layer_set_text_color_mode::layer#0 = vera_layer_mode_text::layer#2 - vera_layer_set_text_color_mode::color_mode#0 = VERA_LAYER_CONFIG_16C - call vera_layer_set_text_color_mode - to:vera_layer_mode_text::@5 -vera_layer_mode_text::@5: scope:[vera_layer_mode_text] from vera_layer_mode_text::@2 - to:vera_layer_mode_text::@return -vera_layer_mode_text::@1: scope:[vera_layer_mode_text] from vera_layer_mode_text::@4 - vera_layer_mode_text::layer#5 = phi( vera_layer_mode_text::@4/vera_layer_mode_text::layer#4 ) - vera_layer_mode_text::color_mode#2 = phi( vera_layer_mode_text::@4/vera_layer_mode_text::color_mode#1 ) - if(vera_layer_mode_text::color_mode#2==$100) goto vera_layer_mode_text::@3 - to:vera_layer_mode_text::@return -vera_layer_mode_text::@3: scope:[vera_layer_mode_text] from vera_layer_mode_text::@1 - vera_layer_mode_text::layer#3 = phi( vera_layer_mode_text::@1/vera_layer_mode_text::layer#5 ) - vera_layer_set_text_color_mode::layer#1 = vera_layer_mode_text::layer#3 - vera_layer_set_text_color_mode::color_mode#1 = VERA_LAYER_CONFIG_256C - call vera_layer_set_text_color_mode - to:vera_layer_mode_text::@6 -vera_layer_mode_text::@6: scope:[vera_layer_mode_text] from vera_layer_mode_text::@3 - to:vera_layer_mode_text::@return -vera_layer_mode_text::@return: scope:[vera_layer_mode_text] from vera_layer_mode_text::@1 vera_layer_mode_text::@5 vera_layer_mode_text::@6 - return - to:@return - -void vera_layer_mode_bitmap(char layer , unsigned long bitmap_address , unsigned int mapwidth , unsigned int color_depth) -vera_layer_mode_bitmap: scope:[vera_layer_mode_bitmap] from main::@18 - vera_layer_mode_bitmap::mapwidth#8 = phi( main::@18/vera_layer_mode_bitmap::mapwidth#0 ) - vera_layer_mode_bitmap::layer#12 = phi( main::@18/vera_layer_mode_bitmap::layer#0 ) - vera_layer_mode_bitmap::bitmap_address#8 = phi( main::@18/vera_layer_mode_bitmap::bitmap_address#1 ) - vera_layer_mode_bitmap::color_depth#1 = phi( main::@18/vera_layer_mode_bitmap::color_depth#0 ) - vera_layer_mode_bitmap::config#0 = 0 - if(vera_layer_mode_bitmap::color_depth#1==1) goto vera_layer_mode_bitmap::@4 - to:vera_layer_mode_bitmap::@1 -vera_layer_mode_bitmap::@4: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap - vera_layer_mode_bitmap::mapwidth#4 = phi( vera_layer_mode_bitmap/vera_layer_mode_bitmap::mapwidth#8 ) - vera_layer_mode_bitmap::layer#5 = phi( vera_layer_mode_bitmap/vera_layer_mode_bitmap::layer#12 ) - vera_layer_mode_bitmap::bitmap_address#4 = phi( vera_layer_mode_bitmap/vera_layer_mode_bitmap::bitmap_address#8 ) - vera_layer_mode_bitmap::config#6 = phi( vera_layer_mode_bitmap/vera_layer_mode_bitmap::config#0 ) - vera_layer_mode_bitmap::config#1 = vera_layer_mode_bitmap::config#6 | VERA_LAYER_COLOR_DEPTH_1BPP - to:vera_layer_mode_bitmap::@8 -vera_layer_mode_bitmap::@1: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap - vera_layer_mode_bitmap::mapwidth#9 = phi( vera_layer_mode_bitmap/vera_layer_mode_bitmap::mapwidth#8 ) - vera_layer_mode_bitmap::layer#13 = phi( vera_layer_mode_bitmap/vera_layer_mode_bitmap::layer#12 ) - vera_layer_mode_bitmap::bitmap_address#9 = phi( vera_layer_mode_bitmap/vera_layer_mode_bitmap::bitmap_address#8 ) - vera_layer_mode_bitmap::config#12 = phi( vera_layer_mode_bitmap/vera_layer_mode_bitmap::config#0 ) - vera_layer_mode_bitmap::color_depth#2 = phi( vera_layer_mode_bitmap/vera_layer_mode_bitmap::color_depth#1 ) - if(vera_layer_mode_bitmap::color_depth#2==2) goto vera_layer_mode_bitmap::@5 - to:vera_layer_mode_bitmap::@2 -vera_layer_mode_bitmap::@5: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap::@1 - vera_layer_mode_bitmap::mapwidth#5 = phi( vera_layer_mode_bitmap::@1/vera_layer_mode_bitmap::mapwidth#9 ) - vera_layer_mode_bitmap::layer#6 = phi( vera_layer_mode_bitmap::@1/vera_layer_mode_bitmap::layer#13 ) - vera_layer_mode_bitmap::bitmap_address#5 = phi( vera_layer_mode_bitmap::@1/vera_layer_mode_bitmap::bitmap_address#9 ) - vera_layer_mode_bitmap::config#7 = phi( vera_layer_mode_bitmap::@1/vera_layer_mode_bitmap::config#12 ) - vera_layer_mode_bitmap::config#2 = vera_layer_mode_bitmap::config#7 | VERA_LAYER_COLOR_DEPTH_2BPP - to:vera_layer_mode_bitmap::@8 -vera_layer_mode_bitmap::@2: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap::@1 - vera_layer_mode_bitmap::mapwidth#10 = phi( vera_layer_mode_bitmap::@1/vera_layer_mode_bitmap::mapwidth#9 ) - vera_layer_mode_bitmap::layer#14 = phi( vera_layer_mode_bitmap::@1/vera_layer_mode_bitmap::layer#13 ) - vera_layer_mode_bitmap::bitmap_address#10 = phi( vera_layer_mode_bitmap::@1/vera_layer_mode_bitmap::bitmap_address#9 ) - vera_layer_mode_bitmap::config#13 = phi( vera_layer_mode_bitmap::@1/vera_layer_mode_bitmap::config#12 ) - vera_layer_mode_bitmap::color_depth#3 = phi( vera_layer_mode_bitmap::@1/vera_layer_mode_bitmap::color_depth#2 ) - if(vera_layer_mode_bitmap::color_depth#3==4) goto vera_layer_mode_bitmap::@6 - to:vera_layer_mode_bitmap::@3 -vera_layer_mode_bitmap::@6: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap::@2 - vera_layer_mode_bitmap::mapwidth#6 = phi( vera_layer_mode_bitmap::@2/vera_layer_mode_bitmap::mapwidth#10 ) - vera_layer_mode_bitmap::layer#7 = phi( vera_layer_mode_bitmap::@2/vera_layer_mode_bitmap::layer#14 ) - vera_layer_mode_bitmap::bitmap_address#6 = phi( vera_layer_mode_bitmap::@2/vera_layer_mode_bitmap::bitmap_address#10 ) - vera_layer_mode_bitmap::config#8 = phi( vera_layer_mode_bitmap::@2/vera_layer_mode_bitmap::config#13 ) - vera_layer_mode_bitmap::config#3 = vera_layer_mode_bitmap::config#8 | VERA_LAYER_COLOR_DEPTH_4BPP - to:vera_layer_mode_bitmap::@8 -vera_layer_mode_bitmap::@3: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap::@2 - vera_layer_mode_bitmap::mapwidth#3 = phi( vera_layer_mode_bitmap::@2/vera_layer_mode_bitmap::mapwidth#10 ) - vera_layer_mode_bitmap::layer#4 = phi( vera_layer_mode_bitmap::@2/vera_layer_mode_bitmap::layer#14 ) - vera_layer_mode_bitmap::bitmap_address#3 = phi( vera_layer_mode_bitmap::@2/vera_layer_mode_bitmap::bitmap_address#10 ) - vera_layer_mode_bitmap::config#14 = phi( vera_layer_mode_bitmap::@2/vera_layer_mode_bitmap::config#13 ) - vera_layer_mode_bitmap::color_depth#4 = phi( vera_layer_mode_bitmap::@2/vera_layer_mode_bitmap::color_depth#3 ) - if(vera_layer_mode_bitmap::color_depth#4==8) goto vera_layer_mode_bitmap::@7 - to:vera_layer_mode_bitmap::@8 -vera_layer_mode_bitmap::@7: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap::@3 - vera_layer_mode_bitmap::mapwidth#7 = phi( vera_layer_mode_bitmap::@3/vera_layer_mode_bitmap::mapwidth#3 ) - vera_layer_mode_bitmap::layer#8 = phi( vera_layer_mode_bitmap::@3/vera_layer_mode_bitmap::layer#4 ) - vera_layer_mode_bitmap::bitmap_address#7 = phi( vera_layer_mode_bitmap::@3/vera_layer_mode_bitmap::bitmap_address#3 ) - vera_layer_mode_bitmap::config#9 = phi( vera_layer_mode_bitmap::@3/vera_layer_mode_bitmap::config#14 ) - vera_layer_mode_bitmap::config#4 = vera_layer_mode_bitmap::config#9 | VERA_LAYER_COLOR_DEPTH_8BPP - to:vera_layer_mode_bitmap::@8 -vera_layer_mode_bitmap::@8: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap::@3 vera_layer_mode_bitmap::@4 vera_layer_mode_bitmap::@5 vera_layer_mode_bitmap::@6 vera_layer_mode_bitmap::@7 - vera_layer_mode_bitmap::mapwidth#1 = phi( vera_layer_mode_bitmap::@3/vera_layer_mode_bitmap::mapwidth#3, vera_layer_mode_bitmap::@4/vera_layer_mode_bitmap::mapwidth#4, vera_layer_mode_bitmap::@5/vera_layer_mode_bitmap::mapwidth#5, vera_layer_mode_bitmap::@6/vera_layer_mode_bitmap::mapwidth#6, vera_layer_mode_bitmap::@7/vera_layer_mode_bitmap::mapwidth#7 ) - vera_layer_mode_bitmap::layer#1 = phi( vera_layer_mode_bitmap::@3/vera_layer_mode_bitmap::layer#4, vera_layer_mode_bitmap::@4/vera_layer_mode_bitmap::layer#5, vera_layer_mode_bitmap::@5/vera_layer_mode_bitmap::layer#6, vera_layer_mode_bitmap::@6/vera_layer_mode_bitmap::layer#7, vera_layer_mode_bitmap::@7/vera_layer_mode_bitmap::layer#8 ) - vera_layer_mode_bitmap::bitmap_address#2 = phi( vera_layer_mode_bitmap::@3/vera_layer_mode_bitmap::bitmap_address#3, vera_layer_mode_bitmap::@4/vera_layer_mode_bitmap::bitmap_address#4, vera_layer_mode_bitmap::@5/vera_layer_mode_bitmap::bitmap_address#5, vera_layer_mode_bitmap::@6/vera_layer_mode_bitmap::bitmap_address#6, vera_layer_mode_bitmap::@7/vera_layer_mode_bitmap::bitmap_address#7 ) - vera_layer_mode_bitmap::config#10 = phi( vera_layer_mode_bitmap::@3/vera_layer_mode_bitmap::config#14, vera_layer_mode_bitmap::@4/vera_layer_mode_bitmap::config#1, vera_layer_mode_bitmap::@5/vera_layer_mode_bitmap::config#2, vera_layer_mode_bitmap::@6/vera_layer_mode_bitmap::config#3, vera_layer_mode_bitmap::@7/vera_layer_mode_bitmap::config#4 ) - vera_layer_mode_bitmap::$0 = vera_layer_mode_bitmap::config#10 | VERA_LAYER_CONFIG_MODE_BITMAP - vera_layer_mode_bitmap::config#5 = vera_layer_mode_bitmap::$0 - vera_layer_mode_bitmap::$1 = word0 vera_layer_mode_bitmap::bitmap_address#2 - vera_layer_mode_bitmap::$9 = vera_layer_mode_bitmap::layer#1 * SIZEOF_UNSIGNED_INT - vera_tilebase_offset[vera_layer_mode_bitmap::$9] = vera_layer_mode_bitmap::$1 - vera_layer_mode_bitmap::$2 = byte2 vera_layer_mode_bitmap::bitmap_address#2 - vera_tilebase_bank[vera_layer_mode_bitmap::layer#1] = vera_layer_mode_bitmap::$2 - vera_layer_mode_bitmap::$10 = vera_layer_mode_bitmap::layer#1 * SIZEOF_UNSIGNED_LONG - vera_tilebase_address[vera_layer_mode_bitmap::$10] = vera_layer_mode_bitmap::bitmap_address#2 - vera_layer_mode_bitmap::$3 = vera_layer_mode_bitmap::bitmap_address#2 >> 1 - vera_layer_mode_bitmap::bitmap_address#0 = vera_layer_mode_bitmap::$3 - vera_layer_mode_bitmap::tilebase#0 = byte1 vera_layer_mode_bitmap::bitmap_address#0 - vera_layer_mode_bitmap::tilebase#1 = vera_layer_mode_bitmap::tilebase#0 & VERA_LAYER_TILEBASE_MASK - if(vera_layer_mode_bitmap::mapwidth#1==$140) goto vera_layer_mode_bitmap::vera_display_set_scale_double1 - to:vera_layer_mode_bitmap::@9 -vera_layer_mode_bitmap::vera_display_set_scale_double1: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap::@8 - vera_layer_mode_bitmap::config#18 = phi( vera_layer_mode_bitmap::@8/vera_layer_mode_bitmap::config#5 ) - vera_layer_mode_bitmap::layer#15 = phi( vera_layer_mode_bitmap::@8/vera_layer_mode_bitmap::layer#1 ) - vera_layer_mode_bitmap::tilebase#7 = phi( vera_layer_mode_bitmap::@8/vera_layer_mode_bitmap::tilebase#1 ) - *VERA_DC_HSCALE = $40 - *VERA_DC_VSCALE = $40 - to:vera_layer_mode_bitmap::@11 -vera_layer_mode_bitmap::@11: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap::vera_display_set_scale_double1 - vera_layer_mode_bitmap::config#15 = phi( vera_layer_mode_bitmap::vera_display_set_scale_double1/vera_layer_mode_bitmap::config#18 ) - vera_layer_mode_bitmap::layer#9 = phi( vera_layer_mode_bitmap::vera_display_set_scale_double1/vera_layer_mode_bitmap::layer#15 ) - vera_layer_mode_bitmap::tilebase#4 = phi( vera_layer_mode_bitmap::vera_display_set_scale_double1/vera_layer_mode_bitmap::tilebase#7 ) - vera_layer_mode_bitmap::tilebase#2 = vera_layer_mode_bitmap::tilebase#4 | VERA_TILEBASE_WIDTH_8 - to:vera_layer_mode_bitmap::@10 -vera_layer_mode_bitmap::@9: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap::@8 - vera_layer_mode_bitmap::tilebase#10 = phi( vera_layer_mode_bitmap::@8/vera_layer_mode_bitmap::tilebase#1 ) - vera_layer_mode_bitmap::config#17 = phi( vera_layer_mode_bitmap::@8/vera_layer_mode_bitmap::config#5 ) - vera_layer_mode_bitmap::layer#11 = phi( vera_layer_mode_bitmap::@8/vera_layer_mode_bitmap::layer#1 ) - vera_layer_mode_bitmap::mapwidth#2 = phi( vera_layer_mode_bitmap::@8/vera_layer_mode_bitmap::mapwidth#1 ) - if(vera_layer_mode_bitmap::mapwidth#2==$280) goto vera_layer_mode_bitmap::vera_display_set_scale_none1 - to:vera_layer_mode_bitmap::@10 -vera_layer_mode_bitmap::vera_display_set_scale_none1: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap::@9 - vera_layer_mode_bitmap::config#19 = phi( vera_layer_mode_bitmap::@9/vera_layer_mode_bitmap::config#17 ) - vera_layer_mode_bitmap::layer#16 = phi( vera_layer_mode_bitmap::@9/vera_layer_mode_bitmap::layer#11 ) - vera_layer_mode_bitmap::tilebase#8 = phi( vera_layer_mode_bitmap::@9/vera_layer_mode_bitmap::tilebase#10 ) - *VERA_DC_HSCALE = $80 - *VERA_DC_VSCALE = $80 - to:vera_layer_mode_bitmap::@12 -vera_layer_mode_bitmap::@12: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap::vera_display_set_scale_none1 - vera_layer_mode_bitmap::config#16 = phi( vera_layer_mode_bitmap::vera_display_set_scale_none1/vera_layer_mode_bitmap::config#19 ) - vera_layer_mode_bitmap::layer#10 = phi( vera_layer_mode_bitmap::vera_display_set_scale_none1/vera_layer_mode_bitmap::layer#16 ) - vera_layer_mode_bitmap::tilebase#5 = phi( vera_layer_mode_bitmap::vera_display_set_scale_none1/vera_layer_mode_bitmap::tilebase#8 ) - vera_layer_mode_bitmap::tilebase#3 = vera_layer_mode_bitmap::tilebase#5 | VERA_TILEBASE_WIDTH_16 - to:vera_layer_mode_bitmap::@10 -vera_layer_mode_bitmap::@10: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap::@11 vera_layer_mode_bitmap::@12 vera_layer_mode_bitmap::@9 - vera_layer_mode_bitmap::tilebase#9 = phi( vera_layer_mode_bitmap::@11/vera_layer_mode_bitmap::tilebase#2, vera_layer_mode_bitmap::@12/vera_layer_mode_bitmap::tilebase#3, vera_layer_mode_bitmap::@9/vera_layer_mode_bitmap::tilebase#10 ) - vera_layer_mode_bitmap::config#11 = phi( vera_layer_mode_bitmap::@11/vera_layer_mode_bitmap::config#15, vera_layer_mode_bitmap::@12/vera_layer_mode_bitmap::config#16, vera_layer_mode_bitmap::@9/vera_layer_mode_bitmap::config#17 ) - vera_layer_mode_bitmap::layer#2 = phi( vera_layer_mode_bitmap::@11/vera_layer_mode_bitmap::layer#9, vera_layer_mode_bitmap::@12/vera_layer_mode_bitmap::layer#10, vera_layer_mode_bitmap::@9/vera_layer_mode_bitmap::layer#11 ) - vera_layer_set_config::layer#1 = vera_layer_mode_bitmap::layer#2 - vera_layer_set_config::config#1 = vera_layer_mode_bitmap::config#11 - call vera_layer_set_config - to:vera_layer_mode_bitmap::@13 -vera_layer_mode_bitmap::@13: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap::@10 - vera_layer_mode_bitmap::tilebase#6 = phi( vera_layer_mode_bitmap::@10/vera_layer_mode_bitmap::tilebase#9 ) - vera_layer_mode_bitmap::layer#3 = phi( vera_layer_mode_bitmap::@10/vera_layer_mode_bitmap::layer#2 ) - vera_layer_set_tilebase::layer#1 = vera_layer_mode_bitmap::layer#3 - vera_layer_set_tilebase::tilebase#1 = vera_layer_mode_bitmap::tilebase#6 - call vera_layer_set_tilebase - to:vera_layer_mode_bitmap::@14 -vera_layer_mode_bitmap::@14: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap::@13 - to:vera_layer_mode_bitmap::@return -vera_layer_mode_bitmap::@return: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap::@14 - return - to:@return - -void conio_x16_init() -conio_x16_init: scope:[conio_x16_init] from __start::__init1 - CONIO_SCREEN_TEXT#47 = phi( __start::__init1/CONIO_SCREEN_TEXT#7 ) - CONIO_SCREEN_BANK#42 = phi( __start::__init1/CONIO_SCREEN_BANK#7 ) - conio_x16_init::line#0 = *conio_x16_init::BASIC_CURSOR_LINE - vera_layer_mode_text::layer#0 = 1 - vera_layer_mode_text::mapbase_address#0 = (unsigned long)0 - vera_layer_mode_text::tilebase_address#0 = (unsigned long)$f800 - vera_layer_mode_text::mapwidth#0 = $80 - vera_layer_mode_text::mapheight#0 = $40 - vera_layer_mode_text::tilewidth#0 = 8 - vera_layer_mode_text::tileheight#0 = 8 - vera_layer_mode_text::color_mode#0 = $10 - call vera_layer_mode_text - to:conio_x16_init::@3 -conio_x16_init::@3: scope:[conio_x16_init] from conio_x16_init - conio_x16_init::line#9 = phi( conio_x16_init/conio_x16_init::line#0 ) - CONIO_SCREEN_TEXT#37 = phi( conio_x16_init/CONIO_SCREEN_TEXT#47 ) - CONIO_SCREEN_BANK#34 = phi( conio_x16_init/CONIO_SCREEN_BANK#42 ) - screensize::x#0 = &conio_screen_width - screensize::y#0 = &conio_screen_height - call screensize - to:conio_x16_init::@4 -conio_x16_init::@4: scope:[conio_x16_init] from conio_x16_init::@3 - conio_x16_init::line#8 = phi( conio_x16_init::@3/conio_x16_init::line#9 ) - CONIO_SCREEN_TEXT#28 = phi( conio_x16_init::@3/CONIO_SCREEN_TEXT#37 ) - CONIO_SCREEN_BANK#24 = phi( conio_x16_init::@3/CONIO_SCREEN_BANK#34 ) - screenlayer::layer#0 = 1 - call screenlayer - to:conio_x16_init::@5 -conio_x16_init::@5: scope:[conio_x16_init] from conio_x16_init::@4 - conio_x16_init::line#7 = phi( conio_x16_init::@4/conio_x16_init::line#8 ) - CONIO_SCREEN_TEXT#13 = phi( conio_x16_init::@4/CONIO_SCREEN_TEXT#3 ) - CONIO_SCREEN_BANK#13 = phi( conio_x16_init::@4/CONIO_SCREEN_BANK#3 ) - CONIO_SCREEN_BANK#0 = CONIO_SCREEN_BANK#13 - CONIO_SCREEN_TEXT#0 = CONIO_SCREEN_TEXT#13 - vera_layer_set_textcolor::layer#0 = 1 - vera_layer_set_textcolor::color#0 = WHITE - call vera_layer_set_textcolor - vera_layer_set_textcolor::return#2 = vera_layer_set_textcolor::return#1 - to:conio_x16_init::@6 -conio_x16_init::@6: scope:[conio_x16_init] from conio_x16_init::@5 - CONIO_SCREEN_TEXT#75 = phi( conio_x16_init::@5/CONIO_SCREEN_TEXT#0 ) - CONIO_SCREEN_BANK#65 = phi( conio_x16_init::@5/CONIO_SCREEN_BANK#0 ) - conio_x16_init::line#6 = phi( conio_x16_init::@5/conio_x16_init::line#7 ) - vera_layer_set_backcolor::layer#0 = 1 - vera_layer_set_backcolor::color#0 = BLUE - call vera_layer_set_backcolor - vera_layer_set_backcolor::return#2 = vera_layer_set_backcolor::return#1 - to:conio_x16_init::@7 -conio_x16_init::@7: scope:[conio_x16_init] from conio_x16_init::@6 - CONIO_SCREEN_TEXT#67 = phi( conio_x16_init::@6/CONIO_SCREEN_TEXT#75 ) - CONIO_SCREEN_BANK#60 = phi( conio_x16_init::@6/CONIO_SCREEN_BANK#65 ) - conio_x16_init::line#5 = phi( conio_x16_init::@6/conio_x16_init::line#6 ) - vera_layer_set_mapbase::layer#1 = 0 - vera_layer_set_mapbase::mapbase#1 = $20 - call vera_layer_set_mapbase - to:conio_x16_init::@8 -conio_x16_init::@8: scope:[conio_x16_init] from conio_x16_init::@7 - CONIO_SCREEN_TEXT#57 = phi( conio_x16_init::@7/CONIO_SCREEN_TEXT#67 ) - CONIO_SCREEN_BANK#51 = phi( conio_x16_init::@7/CONIO_SCREEN_BANK#60 ) - conio_x16_init::line#4 = phi( conio_x16_init::@7/conio_x16_init::line#5 ) - vera_layer_set_mapbase::layer#2 = 1 - vera_layer_set_mapbase::mapbase#2 = 0 - call vera_layer_set_mapbase - to:conio_x16_init::@9 -conio_x16_init::@9: scope:[conio_x16_init] from conio_x16_init::@8 - CONIO_SCREEN_TEXT#49 = phi( conio_x16_init::@8/CONIO_SCREEN_TEXT#57 ) - CONIO_SCREEN_BANK#44 = phi( conio_x16_init::@8/CONIO_SCREEN_BANK#51 ) - conio_x16_init::line#2 = phi( conio_x16_init::@8/conio_x16_init::line#4 ) - conio_x16_init::$7 = conio_x16_init::line#2 >= conio_screen_height - conio_x16_init::$8 = ! conio_x16_init::$7 - if(conio_x16_init::$8) goto conio_x16_init::@1 - to:conio_x16_init::@2 -conio_x16_init::@1: scope:[conio_x16_init] from conio_x16_init::@2 conio_x16_init::@9 - CONIO_SCREEN_TEXT#38 = phi( conio_x16_init::@2/CONIO_SCREEN_TEXT#48, conio_x16_init::@9/CONIO_SCREEN_TEXT#49 ) - CONIO_SCREEN_BANK#35 = phi( conio_x16_init::@2/CONIO_SCREEN_BANK#43, conio_x16_init::@9/CONIO_SCREEN_BANK#44 ) - conio_x16_init::line#3 = phi( conio_x16_init::@2/conio_x16_init::line#1, conio_x16_init::@9/conio_x16_init::line#2 ) - gotoxy::x#1 = 0 - gotoxy::y#1 = conio_x16_init::line#3 - call gotoxy - to:conio_x16_init::@10 -conio_x16_init::@10: scope:[conio_x16_init] from conio_x16_init::@1 - CONIO_SCREEN_TEXT#29 = phi( conio_x16_init::@1/CONIO_SCREEN_TEXT#38 ) - CONIO_SCREEN_BANK#25 = phi( conio_x16_init::@1/CONIO_SCREEN_BANK#35 ) - to:conio_x16_init::@return -conio_x16_init::@2: scope:[conio_x16_init] from conio_x16_init::@9 - CONIO_SCREEN_TEXT#48 = phi( conio_x16_init::@9/CONIO_SCREEN_TEXT#49 ) - CONIO_SCREEN_BANK#43 = phi( conio_x16_init::@9/CONIO_SCREEN_BANK#44 ) - conio_x16_init::$9 = conio_screen_height - 1 - conio_x16_init::line#1 = conio_x16_init::$9 - to:conio_x16_init::@1 -conio_x16_init::@return: scope:[conio_x16_init] from conio_x16_init::@10 - CONIO_SCREEN_TEXT#14 = phi( conio_x16_init::@10/CONIO_SCREEN_TEXT#29 ) - CONIO_SCREEN_BANK#14 = phi( conio_x16_init::@10/CONIO_SCREEN_BANK#25 ) - CONIO_SCREEN_BANK#1 = CONIO_SCREEN_BANK#14 - CONIO_SCREEN_TEXT#1 = CONIO_SCREEN_TEXT#14 - return - to:@return - -void clearline() -clearline: scope:[clearline] from insertup::@3 - CONIO_SCREEN_TEXT#15 = phi( insertup::@3/CONIO_SCREEN_TEXT#30 ) - *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL - clearline::$5 = conio_screen_layer * SIZEOF_UNSIGNED_INT - clearline::addr#0 = CONIO_SCREEN_TEXT#15 + conio_line_text[clearline::$5] - clearline::$1 = byte0 clearline::addr#0 - *VERA_ADDRX_L = clearline::$1 - clearline::$2 = byte1 clearline::addr#0 - *VERA_ADDRX_M = clearline::$2 - *VERA_ADDRX_H = VERA_INC_1 - vera_layer_get_color::layer#1 = conio_screen_layer - call vera_layer_get_color - vera_layer_get_color::return#4 = vera_layer_get_color::return#3 - to:clearline::@4 -clearline::@4: scope:[clearline] from clearline - vera_layer_get_color::return#7 = phi( clearline/vera_layer_get_color::return#4 ) - clearline::color#0 = vera_layer_get_color::return#7 - clearline::c#0 = 0 - to:clearline::@1 -clearline::@1: scope:[clearline] from clearline::@2 clearline::@4 - clearline::color#2 = phi( clearline::@2/clearline::color#1, clearline::@4/clearline::color#0 ) - clearline::c#2 = phi( clearline::@2/clearline::c#1, clearline::@4/clearline::c#0 ) - clearline::$4 = clearline::c#2 < conio_screen_width - if(clearline::$4) goto clearline::@2 - to:clearline::@3 -clearline::@2: scope:[clearline] from clearline::@1 - clearline::c#3 = phi( clearline::@1/clearline::c#2 ) - clearline::color#1 = phi( clearline::@1/clearline::color#2 ) - *VERA_DATA0 = ' ' - *VERA_DATA0 = clearline::color#1 - clearline::c#1 = ++ clearline::c#3 - to:clearline::@1 -clearline::@3: scope:[clearline] from clearline::@1 - conio_cursor_x[conio_screen_layer] = 0 - to:clearline::@return -clearline::@return: scope:[clearline] from clearline::@3 - return - to:@return - -void insertup() -insertup: scope:[insertup] from cscroll::@4 - CONIO_SCREEN_TEXT#39 = phi( cscroll::@4/CONIO_SCREEN_TEXT#50 ) - insertup::cy#0 = conio_cursor_y[conio_screen_layer] - insertup::width#0 = conio_screen_width * 2 - insertup::i#0 = 1 - to:insertup::@1 -insertup::@1: scope:[insertup] from insertup insertup::@4 - insertup::width#2 = phi( insertup/insertup::width#0, insertup::@4/insertup::width#3 ) - CONIO_SCREEN_TEXT#31 = phi( insertup/CONIO_SCREEN_TEXT#39, insertup::@4/CONIO_SCREEN_TEXT#40 ) - insertup::cy#1 = phi( insertup/insertup::cy#0, insertup::@4/insertup::cy#2 ) - insertup::i#2 = phi( insertup/insertup::i#0, insertup::@4/insertup::i#1 ) - insertup::$2 = insertup::i#2 <= insertup::cy#1 - if(insertup::$2) goto insertup::@2 - to:insertup::@3 -insertup::@2: scope:[insertup] from insertup::@1 - insertup::cy#3 = phi( insertup::@1/insertup::cy#1 ) - insertup::width#1 = phi( insertup::@1/insertup::width#2 ) - CONIO_SCREEN_TEXT#16 = phi( insertup::@1/CONIO_SCREEN_TEXT#31 ) - insertup::i#3 = phi( insertup::@1/insertup::i#2 ) - insertup::$3 = insertup::i#3 - 1 - insertup::line#0 = insertup::$3 << conio_rowshift - insertup::start#0 = CONIO_SCREEN_TEXT#16 + insertup::line#0 - insertup::$6 = insertup::start#0 + conio_rowskip - memcpy_in_vram::dest_bank#0 = 0 - memcpy_in_vram::dest#0 = (void *)insertup::start#0 - memcpy_in_vram::dest_increment#0 = VERA_INC_1 - memcpy_in_vram::src_bank#0 = 0 - memcpy_in_vram::src#0 = (void *)insertup::$6 - memcpy_in_vram::src_increment#0 = VERA_INC_1 - memcpy_in_vram::num#0 = insertup::width#1 - call memcpy_in_vram - to:insertup::@4 -insertup::@4: scope:[insertup] from insertup::@2 - insertup::width#3 = phi( insertup::@2/insertup::width#1 ) - CONIO_SCREEN_TEXT#40 = phi( insertup::@2/CONIO_SCREEN_TEXT#16 ) - insertup::cy#2 = phi( insertup::@2/insertup::cy#3 ) - insertup::i#4 = phi( insertup::@2/insertup::i#3 ) - insertup::i#1 = ++ insertup::i#4 - to:insertup::@1 -insertup::@3: scope:[insertup] from insertup::@1 - CONIO_SCREEN_TEXT#30 = phi( insertup::@1/CONIO_SCREEN_TEXT#31 ) - call clearline - to:insertup::@5 -insertup::@5: scope:[insertup] from insertup::@3 - to:insertup::@return -insertup::@return: scope:[insertup] from insertup::@5 - return - to:@return - -void cscroll() -cscroll: scope:[cscroll] from cputln - CONIO_SCREEN_TEXT#68 = phi( cputln/CONIO_SCREEN_TEXT#76 ) - cscroll::$0 = conio_cursor_y[conio_screen_layer] >= conio_screen_height - cscroll::$1 = ! cscroll::$0 - if(cscroll::$1) goto cscroll::@return - to:cscroll::@1 -cscroll::@1: scope:[cscroll] from cscroll - CONIO_SCREEN_TEXT#58 = phi( cscroll/CONIO_SCREEN_TEXT#68 ) - cscroll::$7 = 0 != conio_scroll_enable[conio_screen_layer] - if(cscroll::$7) goto cscroll::@4 - to:cscroll::@2 -cscroll::@4: scope:[cscroll] from cscroll::@1 - CONIO_SCREEN_TEXT#50 = phi( cscroll::@1/CONIO_SCREEN_TEXT#58 ) - call insertup - to:cscroll::@5 -cscroll::@5: scope:[cscroll] from cscroll::@4 - cscroll::$5 = conio_screen_height - 1 - gotoxy::x#2 = 0 - gotoxy::y#2 = cscroll::$5 - call gotoxy - to:cscroll::@6 -cscroll::@6: scope:[cscroll] from cscroll::@5 - to:cscroll::@return -cscroll::@2: scope:[cscroll] from cscroll::@1 - cscroll::$2 = conio_cursor_y[conio_screen_layer] >= conio_height - cscroll::$3 = ! cscroll::$2 - if(cscroll::$3) goto cscroll::@return - to:cscroll::@3 -cscroll::@3: scope:[cscroll] from cscroll::@2 - to:cscroll::@return -cscroll::@return: scope:[cscroll] from cscroll cscroll::@2 cscroll::@3 cscroll::@6 - return - to:@return - -void screenlayer(char layer) -screenlayer: scope:[screenlayer] from conio_x16_init::@4 main::@19 main::@6 - screenlayer::layer#3 = phi( conio_x16_init::@4/screenlayer::layer#0, main::@19/screenlayer::layer#1, main::@6/screenlayer::layer#2 ) - conio_screen_layer = screenlayer::layer#3 - vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer - call vera_layer_get_mapbase_bank - vera_layer_get_mapbase_bank::return#2 = vera_layer_get_mapbase_bank::return#1 - to:screenlayer::@3 -screenlayer::@3: scope:[screenlayer] from screenlayer - vera_layer_get_mapbase_bank::return#4 = phi( screenlayer/vera_layer_get_mapbase_bank::return#2 ) - screenlayer::$0 = vera_layer_get_mapbase_bank::return#4 - CONIO_SCREEN_BANK#2 = screenlayer::$0 - vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer - call vera_layer_get_mapbase_offset - vera_layer_get_mapbase_offset::return#2 = vera_layer_get_mapbase_offset::return#1 - to:screenlayer::@4 -screenlayer::@4: scope:[screenlayer] from screenlayer::@3 - CONIO_SCREEN_BANK#80 = phi( screenlayer::@3/CONIO_SCREEN_BANK#2 ) - vera_layer_get_mapbase_offset::return#4 = phi( screenlayer::@3/vera_layer_get_mapbase_offset::return#2 ) - screenlayer::$1 = vera_layer_get_mapbase_offset::return#4 - CONIO_SCREEN_TEXT#2 = (char *)screenlayer::$1 - screenlayer::vera_layer_get_width1_layer#0 = conio_screen_layer - to:screenlayer::vera_layer_get_width1 -screenlayer::vera_layer_get_width1: scope:[screenlayer] from screenlayer::@4 - CONIO_SCREEN_TEXT#90 = phi( screenlayer::@4/CONIO_SCREEN_TEXT#2 ) - CONIO_SCREEN_BANK#76 = phi( screenlayer::@4/CONIO_SCREEN_BANK#80 ) - screenlayer::vera_layer_get_width1_layer#1 = phi( screenlayer::@4/screenlayer::vera_layer_get_width1_layer#0 ) - screenlayer::vera_layer_get_width1_$2 = screenlayer::vera_layer_get_width1_layer#1 * SIZEOF_POINTER - screenlayer::vera_layer_get_width1_config#0 = vera_layer_config[screenlayer::vera_layer_get_width1_$2] - screenlayer::vera_layer_get_width1_$0 = *screenlayer::vera_layer_get_width1_config#0 & VERA_LAYER_WIDTH_MASK - screenlayer::vera_layer_get_width1_$1 = screenlayer::vera_layer_get_width1_$0 >> 4 - screenlayer::vera_layer_get_width1_$3 = screenlayer::vera_layer_get_width1_$1 * SIZEOF_UNSIGNED_INT - screenlayer::vera_layer_get_width1_return#0 = VERA_LAYER_WIDTH[screenlayer::vera_layer_get_width1_$3] - to:screenlayer::vera_layer_get_width1_@return -screenlayer::vera_layer_get_width1_@return: scope:[screenlayer] from screenlayer::vera_layer_get_width1 - CONIO_SCREEN_TEXT#85 = phi( screenlayer::vera_layer_get_width1/CONIO_SCREEN_TEXT#90 ) - CONIO_SCREEN_BANK#71 = phi( screenlayer::vera_layer_get_width1/CONIO_SCREEN_BANK#76 ) - screenlayer::vera_layer_get_width1_return#2 = phi( screenlayer::vera_layer_get_width1/screenlayer::vera_layer_get_width1_return#0 ) - screenlayer::vera_layer_get_width1_return#1 = screenlayer::vera_layer_get_width1_return#2 - to:screenlayer::@1 -screenlayer::@1: scope:[screenlayer] from screenlayer::vera_layer_get_width1_@return - CONIO_SCREEN_TEXT#77 = phi( screenlayer::vera_layer_get_width1_@return/CONIO_SCREEN_TEXT#85 ) - CONIO_SCREEN_BANK#66 = phi( screenlayer::vera_layer_get_width1_@return/CONIO_SCREEN_BANK#71 ) - screenlayer::vera_layer_get_width1_return#3 = phi( screenlayer::vera_layer_get_width1_@return/screenlayer::vera_layer_get_width1_return#1 ) - screenlayer::$2 = screenlayer::vera_layer_get_width1_return#3 - conio_width = screenlayer::$2 - vera_layer_get_rowshift::layer#0 = conio_screen_layer - call vera_layer_get_rowshift - vera_layer_get_rowshift::return#2 = vera_layer_get_rowshift::return#1 - to:screenlayer::@5 -screenlayer::@5: scope:[screenlayer] from screenlayer::@1 - CONIO_SCREEN_TEXT#69 = phi( screenlayer::@1/CONIO_SCREEN_TEXT#77 ) - CONIO_SCREEN_BANK#61 = phi( screenlayer::@1/CONIO_SCREEN_BANK#66 ) - vera_layer_get_rowshift::return#4 = phi( screenlayer::@1/vera_layer_get_rowshift::return#2 ) - screenlayer::$3 = vera_layer_get_rowshift::return#4 - conio_rowshift = screenlayer::$3 - vera_layer_get_rowskip::layer#0 = conio_screen_layer - call vera_layer_get_rowskip - vera_layer_get_rowskip::return#2 = vera_layer_get_rowskip::return#1 - to:screenlayer::@6 -screenlayer::@6: scope:[screenlayer] from screenlayer::@5 - CONIO_SCREEN_TEXT#59 = phi( screenlayer::@5/CONIO_SCREEN_TEXT#69 ) - CONIO_SCREEN_BANK#52 = phi( screenlayer::@5/CONIO_SCREEN_BANK#61 ) - vera_layer_get_rowskip::return#4 = phi( screenlayer::@5/vera_layer_get_rowskip::return#2 ) - screenlayer::$4 = vera_layer_get_rowskip::return#4 - conio_rowskip = screenlayer::$4 - screenlayer::vera_layer_get_height1_layer#0 = conio_screen_layer - to:screenlayer::vera_layer_get_height1 -screenlayer::vera_layer_get_height1: scope:[screenlayer] from screenlayer::@6 - CONIO_SCREEN_TEXT#51 = phi( screenlayer::@6/CONIO_SCREEN_TEXT#59 ) - CONIO_SCREEN_BANK#45 = phi( screenlayer::@6/CONIO_SCREEN_BANK#52 ) - screenlayer::vera_layer_get_height1_layer#1 = phi( screenlayer::@6/screenlayer::vera_layer_get_height1_layer#0 ) - screenlayer::vera_layer_get_height1_$2 = screenlayer::vera_layer_get_height1_layer#1 * SIZEOF_POINTER - screenlayer::vera_layer_get_height1_config#0 = vera_layer_config[screenlayer::vera_layer_get_height1_$2] - screenlayer::vera_layer_get_height1_$0 = *screenlayer::vera_layer_get_height1_config#0 & VERA_LAYER_HEIGHT_MASK - screenlayer::vera_layer_get_height1_$1 = screenlayer::vera_layer_get_height1_$0 >> 6 - screenlayer::vera_layer_get_height1_$3 = screenlayer::vera_layer_get_height1_$1 * SIZEOF_UNSIGNED_INT - screenlayer::vera_layer_get_height1_return#0 = VERA_LAYER_HEIGHT[screenlayer::vera_layer_get_height1_$3] - to:screenlayer::vera_layer_get_height1_@return -screenlayer::vera_layer_get_height1_@return: scope:[screenlayer] from screenlayer::vera_layer_get_height1 - CONIO_SCREEN_TEXT#41 = phi( screenlayer::vera_layer_get_height1/CONIO_SCREEN_TEXT#51 ) - CONIO_SCREEN_BANK#36 = phi( screenlayer::vera_layer_get_height1/CONIO_SCREEN_BANK#45 ) - screenlayer::vera_layer_get_height1_return#2 = phi( screenlayer::vera_layer_get_height1/screenlayer::vera_layer_get_height1_return#0 ) - screenlayer::vera_layer_get_height1_return#1 = screenlayer::vera_layer_get_height1_return#2 - to:screenlayer::@2 -screenlayer::@2: scope:[screenlayer] from screenlayer::vera_layer_get_height1_@return - CONIO_SCREEN_TEXT#32 = phi( screenlayer::vera_layer_get_height1_@return/CONIO_SCREEN_TEXT#41 ) - CONIO_SCREEN_BANK#26 = phi( screenlayer::vera_layer_get_height1_@return/CONIO_SCREEN_BANK#36 ) - screenlayer::vera_layer_get_height1_return#3 = phi( screenlayer::vera_layer_get_height1_@return/screenlayer::vera_layer_get_height1_return#1 ) - screenlayer::$5 = screenlayer::vera_layer_get_height1_return#3 - conio_height = screenlayer::$5 - to:screenlayer::@return -screenlayer::@return: scope:[screenlayer] from screenlayer::@2 - CONIO_SCREEN_TEXT#17 = phi( screenlayer::@2/CONIO_SCREEN_TEXT#32 ) - CONIO_SCREEN_BANK#15 = phi( screenlayer::@2/CONIO_SCREEN_BANK#26 ) - CONIO_SCREEN_BANK#3 = CONIO_SCREEN_BANK#15 - CONIO_SCREEN_TEXT#3 = CONIO_SCREEN_TEXT#17 - return - to:@return - -unsigned int rand() -rand: scope:[rand] from main::@2 main::@36 main::@38 main::@40 main::@42 - rand_state#13 = phi( main::@2/rand_state#23, main::@36/rand_state#24, main::@38/rand_state#25, main::@40/rand_state#26, main::@42/rand_state#27 ) - rand::$0 = rand_state#13 << 7 - rand_state#0 = rand_state#13 ^ rand::$0 - rand::$1 = rand_state#0 >> 9 - rand_state#1 = rand_state#0 ^ rand::$1 - rand::$2 = rand_state#1 << 8 - rand_state#2 = rand_state#1 ^ rand::$2 - rand::return#0 = rand_state#2 - to:rand::@return -rand::@return: scope:[rand] from rand - rand_state#14 = phi( rand/rand_state#2 ) - rand::return#7 = phi( rand/rand::return#0 ) - rand::return#1 = rand::return#7 - rand_state#3 = rand_state#14 - return - to:@return - -void printf_str(void (*putc)(char) , const char *s) -printf_str: scope:[printf_str] from main::@11 main::@14 main::@24 main::@25 main::@26 main::@27 main::@48 - printf_str::putc#9 = phi( main::@11/printf_str::putc#4, main::@14/printf_str::putc#6, main::@24/printf_str::putc#0, main::@25/printf_str::putc#1, main::@26/printf_str::putc#2, main::@27/printf_str::putc#3, main::@48/printf_str::putc#5 ) - printf_str::s#9 = phi( main::@11/printf_str::s#5, main::@14/printf_str::s#7, main::@24/printf_str::s#1, main::@25/printf_str::s#2, main::@26/printf_str::s#3, main::@27/printf_str::s#4, main::@48/printf_str::s#6 ) - printf_str::c#0 = 0 - to:printf_str::@1 -printf_str::@1: scope:[printf_str] from printf_str printf_str::@2 - printf_str::putc#8 = phi( printf_str/printf_str::putc#9, printf_str::@2/printf_str::putc#7 ) - printf_str::s#8 = phi( printf_str/printf_str::s#9, printf_str::@2/printf_str::s#10 ) - printf_str::c#1 = *printf_str::s#8 - printf_str::$0 = printf_str::c#1 - printf_str::s#0 = ++ printf_str::s#8 - printf_str::$2 = 0 != printf_str::$0 - if(printf_str::$2) goto printf_str::@2 - to:printf_str::@return -printf_str::@2: scope:[printf_str] from printf_str::@1 - printf_str::s#10 = phi( printf_str::@1/printf_str::s#0 ) - printf_str::putc#7 = phi( printf_str::@1/printf_str::putc#8 ) - printf_str::c#2 = phi( printf_str::@1/printf_str::c#1 ) - stackpush(char) = printf_str::c#2 - callexecute *printf_str::putc#7 - sideeffect stackpullpadding(1) - to:printf_str::@1 -printf_str::@return: scope:[printf_str] from printf_str::@1 - return - to:@return - -void bitmap_init(char layer , unsigned long address) -bitmap_init: scope:[bitmap_init] from main::@10 - bitmap_init::layer#1 = phi( main::@10/bitmap_init::layer#0 ) - bitmap_init::address#1 = phi( main::@10/bitmap_init::address#0 ) - __bitmap_address = bitmap_init::address#1 - __bitmap_layer = bitmap_init::layer#1 - bitmap_init::vera_layer_get_color_depth1_layer#0 = __bitmap_layer - to:bitmap_init::vera_layer_get_color_depth1 -bitmap_init::vera_layer_get_color_depth1: scope:[bitmap_init] from bitmap_init - bitmap_init::vera_layer_get_color_depth1_layer#1 = phi( bitmap_init/bitmap_init::vera_layer_get_color_depth1_layer#0 ) - bitmap_init::vera_layer_get_color_depth1_$1 = bitmap_init::vera_layer_get_color_depth1_layer#1 * SIZEOF_POINTER - bitmap_init::vera_layer_get_color_depth1_config#0 = vera_layer_config[bitmap_init::vera_layer_get_color_depth1_$1] - bitmap_init::vera_layer_get_color_depth1_$0 = *bitmap_init::vera_layer_get_color_depth1_config#0 & VERA_LAYER_COLOR_DEPTH_MASK - bitmap_init::vera_layer_get_color_depth1_return#0 = bitmap_init::vera_layer_get_color_depth1_$0 - to:bitmap_init::vera_layer_get_color_depth1_@return -bitmap_init::vera_layer_get_color_depth1_@return: scope:[bitmap_init] from bitmap_init::vera_layer_get_color_depth1 - bitmap_init::vera_layer_get_color_depth1_return#2 = phi( bitmap_init::vera_layer_get_color_depth1/bitmap_init::vera_layer_get_color_depth1_return#0 ) - bitmap_init::vera_layer_get_color_depth1_return#1 = bitmap_init::vera_layer_get_color_depth1_return#2 - to:bitmap_init::@16 -bitmap_init::@16: scope:[bitmap_init] from bitmap_init::vera_layer_get_color_depth1_@return - bitmap_init::vera_layer_get_color_depth1_return#3 = phi( bitmap_init::vera_layer_get_color_depth1_@return/bitmap_init::vera_layer_get_color_depth1_return#1 ) - bitmap_init::$0 = bitmap_init::vera_layer_get_color_depth1_return#3 - __bitmap_color_depth = bitmap_init::$0 - call vera_display_get_hscale - vera_display_get_hscale::return#2 = vera_display_get_hscale::return#1 - to:bitmap_init::@17 -bitmap_init::@17: scope:[bitmap_init] from bitmap_init::@16 - vera_display_get_hscale::return#4 = phi( bitmap_init::@16/vera_display_get_hscale::return#2 ) - bitmap_init::$1 = vera_display_get_hscale::return#4 - __bitmap_hscale = bitmap_init::$1 - call vera_display_get_vscale - vera_display_get_vscale::return#2 = vera_display_get_vscale::return#1 - to:bitmap_init::@18 -bitmap_init::@18: scope:[bitmap_init] from bitmap_init::@17 - vera_display_get_vscale::return#4 = phi( bitmap_init::@17/vera_display_get_vscale::return#2 ) - bitmap_init::$2 = vera_display_get_vscale::return#4 - __bitmap_vscale = bitmap_init::$2 - bitmap_init::bitmask#0 = bitmasks[__bitmap_color_depth] - bitmap_init::bitshift#0 = bitshifts[__bitmap_color_depth] - bitmap_init::x#0 = 0 - to:bitmap_init::@1 -bitmap_init::@1: scope:[bitmap_init] from bitmap_init::@18 bitmap_init::@7 - bitmap_init::bitshift#10 = phi( bitmap_init::@18/bitmap_init::bitshift#0, bitmap_init::@7/bitmap_init::bitshift#14 ) - bitmap_init::bitmask#10 = phi( bitmap_init::@18/bitmap_init::bitmask#0, bitmap_init::@7/bitmap_init::bitmask#16 ) - bitmap_init::x#7 = phi( bitmap_init::@18/bitmap_init::x#0, bitmap_init::@7/bitmap_init::x#1 ) - bitmap_init::$5 = __bitmap_color_depth == 0 - bitmap_init::$6 = ! bitmap_init::$5 - if(bitmap_init::$6) goto bitmap_init::@2 - to:bitmap_init::@8 -bitmap_init::@2: scope:[bitmap_init] from bitmap_init::@1 bitmap_init::@8 - bitmap_init::bitshift#11 = phi( bitmap_init::@1/bitmap_init::bitshift#10, bitmap_init::@8/bitmap_init::bitshift#1 ) - bitmap_init::bitmask#11 = phi( bitmap_init::@1/bitmap_init::bitmask#10, bitmap_init::@8/bitmap_init::bitmask#1 ) - bitmap_init::x#8 = phi( bitmap_init::@1/bitmap_init::x#7, bitmap_init::@8/bitmap_init::x#2 ) - bitmap_init::$8 = __bitmap_color_depth == 1 - bitmap_init::$9 = ! bitmap_init::$8 - if(bitmap_init::$9) goto bitmap_init::@3 - to:bitmap_init::@9 -bitmap_init::@8: scope:[bitmap_init] from bitmap_init::@1 - bitmap_init::bitshift#5 = phi( bitmap_init::@1/bitmap_init::bitshift#10 ) - bitmap_init::bitmask#5 = phi( bitmap_init::@1/bitmap_init::bitmask#10 ) - bitmap_init::x#2 = phi( bitmap_init::@1/bitmap_init::x#7 ) - bitmap_init::$7 = bitmap_init::x#2 >> 3 - bitmap_init::$23 = bitmap_init::x#2 * SIZEOF_UNSIGNED_INT - __bitmap_plot_x[bitmap_init::$23] = bitmap_init::$7 - __bitmap_plot_bitmask[bitmap_init::x#2] = bitmap_init::bitmask#5 - __bitmap_plot_bitshift[bitmap_init::x#2] = (char)bitmap_init::bitshift#5 - bitmap_init::bitshift#1 = bitmap_init::bitshift#5 - 1 - bitmap_init::bitmask#1 = bitmap_init::bitmask#5 >> 1 - to:bitmap_init::@2 -bitmap_init::@3: scope:[bitmap_init] from bitmap_init::@2 bitmap_init::@9 - bitmap_init::bitshift#12 = phi( bitmap_init::@2/bitmap_init::bitshift#11, bitmap_init::@9/bitmap_init::bitshift#2 ) - bitmap_init::bitmask#12 = phi( bitmap_init::@2/bitmap_init::bitmask#11, bitmap_init::@9/bitmap_init::bitmask#2 ) - bitmap_init::x#9 = phi( bitmap_init::@2/bitmap_init::x#8, bitmap_init::@9/bitmap_init::x#3 ) - bitmap_init::$11 = __bitmap_color_depth == 2 - bitmap_init::$12 = ! bitmap_init::$11 - if(bitmap_init::$12) goto bitmap_init::@4 - to:bitmap_init::@10 -bitmap_init::@9: scope:[bitmap_init] from bitmap_init::@2 - bitmap_init::bitshift#6 = phi( bitmap_init::@2/bitmap_init::bitshift#11 ) - bitmap_init::bitmask#6 = phi( bitmap_init::@2/bitmap_init::bitmask#11 ) - bitmap_init::x#3 = phi( bitmap_init::@2/bitmap_init::x#8 ) - bitmap_init::$10 = bitmap_init::x#3 >> 2 - bitmap_init::$24 = bitmap_init::x#3 * SIZEOF_UNSIGNED_INT - __bitmap_plot_x[bitmap_init::$24] = bitmap_init::$10 - __bitmap_plot_bitmask[bitmap_init::x#3] = bitmap_init::bitmask#6 - __bitmap_plot_bitshift[bitmap_init::x#3] = (char)bitmap_init::bitshift#6 - bitmap_init::bitshift#2 = bitmap_init::bitshift#6 - 2 - bitmap_init::bitmask#2 = bitmap_init::bitmask#6 >> 2 - to:bitmap_init::@3 -bitmap_init::@4: scope:[bitmap_init] from bitmap_init::@10 bitmap_init::@3 - bitmap_init::bitmask#13 = phi( bitmap_init::@10/bitmap_init::bitmask#3, bitmap_init::@3/bitmap_init::bitmask#12 ) - bitmap_init::x#10 = phi( bitmap_init::@10/bitmap_init::x#4, bitmap_init::@3/bitmap_init::x#9 ) - bitmap_init::bitshift#13 = phi( bitmap_init::@10/bitmap_init::bitshift#3, bitmap_init::@3/bitmap_init::bitshift#12 ) - bitmap_init::$14 = __bitmap_color_depth == 3 - bitmap_init::$15 = ! bitmap_init::$14 - if(bitmap_init::$15) goto bitmap_init::@5 - to:bitmap_init::@11 -bitmap_init::@10: scope:[bitmap_init] from bitmap_init::@3 - bitmap_init::bitshift#7 = phi( bitmap_init::@3/bitmap_init::bitshift#12 ) - bitmap_init::bitmask#7 = phi( bitmap_init::@3/bitmap_init::bitmask#12 ) - bitmap_init::x#4 = phi( bitmap_init::@3/bitmap_init::x#9 ) - bitmap_init::$13 = bitmap_init::x#4 >> 1 - bitmap_init::$25 = bitmap_init::x#4 * SIZEOF_UNSIGNED_INT - __bitmap_plot_x[bitmap_init::$25] = bitmap_init::$13 - __bitmap_plot_bitmask[bitmap_init::x#4] = bitmap_init::bitmask#7 - __bitmap_plot_bitshift[bitmap_init::x#4] = (char)bitmap_init::bitshift#7 - bitmap_init::bitshift#3 = bitmap_init::bitshift#7 - 4 - bitmap_init::bitmask#3 = bitmap_init::bitmask#7 >> 4 - to:bitmap_init::@4 -bitmap_init::@5: scope:[bitmap_init] from bitmap_init::@11 bitmap_init::@4 - bitmap_init::x#14 = phi( bitmap_init::@11/bitmap_init::x#5, bitmap_init::@4/bitmap_init::x#10 ) - bitmap_init::bitmask#15 = phi( bitmap_init::@11/bitmap_init::bitmask#8, bitmap_init::@4/bitmap_init::bitmask#13 ) - bitmap_init::bitshift#8 = phi( bitmap_init::@11/bitmap_init::bitshift#9, bitmap_init::@4/bitmap_init::bitshift#13 ) - bitmap_init::$16 = bitmap_init::bitshift#8 < 0 - bitmap_init::$17 = ! bitmap_init::$16 - if(bitmap_init::$17) goto bitmap_init::@6 - to:bitmap_init::@12 -bitmap_init::@11: scope:[bitmap_init] from bitmap_init::@4 - bitmap_init::bitshift#9 = phi( bitmap_init::@4/bitmap_init::bitshift#13 ) - bitmap_init::bitmask#8 = phi( bitmap_init::@4/bitmap_init::bitmask#13 ) - bitmap_init::x#5 = phi( bitmap_init::@4/bitmap_init::x#10 ) - bitmap_init::$26 = bitmap_init::x#5 * SIZEOF_UNSIGNED_INT - __bitmap_plot_x[bitmap_init::$26] = bitmap_init::x#5 - __bitmap_plot_bitmask[bitmap_init::x#5] = bitmap_init::bitmask#8 - __bitmap_plot_bitshift[bitmap_init::x#5] = (char)bitmap_init::bitshift#9 - to:bitmap_init::@5 -bitmap_init::@6: scope:[bitmap_init] from bitmap_init::@12 bitmap_init::@5 - bitmap_init::bitshift#16 = phi( bitmap_init::@12/bitmap_init::bitshift#4, bitmap_init::@5/bitmap_init::bitshift#8 ) - bitmap_init::x#12 = phi( bitmap_init::@12/bitmap_init::x#13, bitmap_init::@5/bitmap_init::x#14 ) - bitmap_init::bitmask#9 = phi( bitmap_init::@12/bitmap_init::bitmask#14, bitmap_init::@5/bitmap_init::bitmask#15 ) - bitmap_init::$18 = bitmap_init::bitmask#9 == 0 - bitmap_init::$19 = ! bitmap_init::$18 - if(bitmap_init::$19) goto bitmap_init::@7 - to:bitmap_init::@13 -bitmap_init::@12: scope:[bitmap_init] from bitmap_init::@5 - bitmap_init::x#13 = phi( bitmap_init::@5/bitmap_init::x#14 ) - bitmap_init::bitmask#14 = phi( bitmap_init::@5/bitmap_init::bitmask#15 ) - bitmap_init::bitshift#4 = bitshifts[__bitmap_color_depth] - to:bitmap_init::@6 -bitmap_init::@7: scope:[bitmap_init] from bitmap_init::@13 bitmap_init::@6 - bitmap_init::bitshift#14 = phi( bitmap_init::@13/bitmap_init::bitshift#15, bitmap_init::@6/bitmap_init::bitshift#16 ) - bitmap_init::bitmask#16 = phi( bitmap_init::@13/bitmap_init::bitmask#4, bitmap_init::@6/bitmap_init::bitmask#9 ) - bitmap_init::x#6 = phi( bitmap_init::@13/bitmap_init::x#11, bitmap_init::@6/bitmap_init::x#12 ) - bitmap_init::x#1 = bitmap_init::x#6 + rangenext(0,$27f) - bitmap_init::$20 = bitmap_init::x#1 != rangelast(0,$27f) - if(bitmap_init::$20) goto bitmap_init::@1 - to:bitmap_init::@14 -bitmap_init::@13: scope:[bitmap_init] from bitmap_init::@6 - bitmap_init::bitshift#15 = phi( bitmap_init::@6/bitmap_init::bitshift#16 ) - bitmap_init::x#11 = phi( bitmap_init::@6/bitmap_init::x#12 ) - bitmap_init::bitmask#4 = bitmasks[__bitmap_color_depth] - to:bitmap_init::@7 -bitmap_init::@14: scope:[bitmap_init] from bitmap_init::@7 - bitmap_init::$3 = __bitmap_color_depth << 2 - bitmap_init::$4 = bitmap_init::$3 + __bitmap_hscale - bitmap_init::$27 = bitmap_init::$4 * SIZEOF_UNSIGNED_INT - bitmap_init::hdelta#0 = hdeltas[bitmap_init::$27] - bitmap_init::yoffs#0 = __bitmap_address - bitmap_init::y#0 = 0 - to:bitmap_init::@15 -bitmap_init::@15: scope:[bitmap_init] from bitmap_init::@14 bitmap_init::@15 - bitmap_init::hdelta#1 = phi( bitmap_init::@14/bitmap_init::hdelta#0, bitmap_init::@15/bitmap_init::hdelta#1 ) - bitmap_init::yoffs#2 = phi( bitmap_init::@14/bitmap_init::yoffs#0, bitmap_init::@15/bitmap_init::yoffs#1 ) - bitmap_init::y#2 = phi( bitmap_init::@14/bitmap_init::y#0, bitmap_init::@15/bitmap_init::y#1 ) - bitmap_init::$28 = bitmap_init::y#2 * SIZEOF_UNSIGNED_LONG - __bitmap_plot_y[bitmap_init::$28] = bitmap_init::yoffs#2 - bitmap_init::$21 = bitmap_init::yoffs#2 + bitmap_init::hdelta#1 - bitmap_init::yoffs#1 = bitmap_init::$21 - bitmap_init::y#1 = bitmap_init::y#2 + rangenext(0,$1df) - bitmap_init::$22 = bitmap_init::y#1 != rangelast(0,$1df) - if(bitmap_init::$22) goto bitmap_init::@15 - to:bitmap_init::@return -bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@15 - return - to:@return - -void bitmap_clear() -bitmap_clear: scope:[bitmap_clear] from main::@29 - bitmap_clear::$6 = __bitmap_vscale * SIZEOF_UNSIGNED_INT - bitmap_clear::vdelta#0 = vdeltas[bitmap_clear::$6] - bitmap_clear::$0 = __bitmap_color_depth << 2 - bitmap_clear::$1 = bitmap_clear::$0 + __bitmap_hscale - bitmap_clear::$7 = bitmap_clear::$1 * SIZEOF_UNSIGNED_INT - bitmap_clear::hdelta#0 = hdeltas[bitmap_clear::$7] - mul16u::a#0 = bitmap_clear::hdelta#0 - mul16u::b#0 = bitmap_clear::vdelta#0 - call mul16u - mul16u::return#0 = mul16u::return#2 - to:bitmap_clear::@1 -bitmap_clear::@1: scope:[bitmap_clear] from bitmap_clear - mul16u::return#3 = phi( bitmap_clear/mul16u::return#0 ) - bitmap_clear::count#0 = mul16u::return#3 - bitmap_clear::vbank#0 = byte2 __bitmap_address - bitmap_clear::$4 = word0 __bitmap_address - bitmap_clear::vdest#0 = (void *)bitmap_clear::$4 - memset_vram::vbank#0 = bitmap_clear::vbank#0 - memset_vram::vdest#0 = bitmap_clear::vdest#0 - memset_vram::data#0 = 0 - memset_vram::num#0 = bitmap_clear::count#0 - call memset_vram - to:bitmap_clear::@2 -bitmap_clear::@2: scope:[bitmap_clear] from bitmap_clear::@1 - to:bitmap_clear::@return -bitmap_clear::@return: scope:[bitmap_clear] from bitmap_clear::@2 - return - to:@return - -void bitmap_plot(unsigned int x , unsigned int y , char c) -bitmap_plot: scope:[bitmap_plot] from bitmap_line_xdyd::@1 bitmap_line_xdyi::@1 bitmap_line_ydxd::@1 bitmap_line_ydxi::@1 - bitmap_plot::c#8 = phi( bitmap_line_xdyd::@1/bitmap_plot::c#2, bitmap_line_xdyi::@1/bitmap_plot::c#1, bitmap_line_ydxd::@1/bitmap_plot::c#4, bitmap_line_ydxi::@1/bitmap_plot::c#3 ) - bitmap_plot::y#4 = phi( bitmap_line_xdyd::@1/bitmap_plot::y#1, bitmap_line_xdyi::@1/bitmap_plot::y#0, bitmap_line_ydxd::@1/bitmap_plot::y#3, bitmap_line_ydxi::@1/bitmap_plot::y#2 ) - bitmap_plot::x#4 = phi( bitmap_line_xdyd::@1/bitmap_plot::x#1, bitmap_line_xdyi::@1/bitmap_plot::x#0, bitmap_line_ydxd::@1/bitmap_plot::x#3, bitmap_line_ydxi::@1/bitmap_plot::x#2 ) - bitmap_plot::$9 = bitmap_plot::x#4 * SIZEOF_UNSIGNED_INT - bitmap_plot::plot_x#0 = (unsigned long)__bitmap_plot_x[bitmap_plot::$9] - bitmap_plot::$10 = bitmap_plot::y#4 * SIZEOF_UNSIGNED_LONG - bitmap_plot::plot_y#0 = __bitmap_plot_y[bitmap_plot::$10] - bitmap_plot::plotter#0 = bitmap_plot::plot_x#0 + bitmap_plot::plot_y#0 - bitmap_plot::bitshift#0 = __bitmap_plot_bitshift[bitmap_plot::x#4] - bitmap_plot::$11 = 0 != bitmap_plot::bitshift#0 - if(bitmap_plot::$11) goto bitmap_plot::@1 - to:bitmap_plot::@2 -bitmap_plot::@1: scope:[bitmap_plot] from bitmap_plot - bitmap_plot::x#8 = phi( bitmap_plot/bitmap_plot::x#4 ) - bitmap_plot::plotter#2 = phi( bitmap_plot/bitmap_plot::plotter#0 ) - bitmap_plot::bitshift#1 = phi( bitmap_plot/bitmap_plot::bitshift#0 ) - bitmap_plot::c#5 = phi( bitmap_plot/bitmap_plot::c#8 ) - bitmap_plot::$2 = bitmap_plot::c#5 << bitmap_plot::bitshift#1 - bitmap_plot::$3 = bitmap_plot::$2 - to:bitmap_plot::@3 -bitmap_plot::@2: scope:[bitmap_plot] from bitmap_plot - bitmap_plot::x#9 = phi( bitmap_plot/bitmap_plot::x#4 ) - bitmap_plot::plotter#3 = phi( bitmap_plot/bitmap_plot::plotter#0 ) - bitmap_plot::c#6 = phi( bitmap_plot/bitmap_plot::c#8 ) - bitmap_plot::$1 = bitmap_plot::c#6 - to:bitmap_plot::@3 -bitmap_plot::@3: scope:[bitmap_plot] from bitmap_plot::@1 bitmap_plot::@2 - bitmap_plot::x#7 = phi( bitmap_plot::@1/bitmap_plot::x#8, bitmap_plot::@2/bitmap_plot::x#9 ) - bitmap_plot::plotter#1 = phi( bitmap_plot::@1/bitmap_plot::plotter#2, bitmap_plot::@2/bitmap_plot::plotter#3 ) - bitmap_plot::$4 = phi( bitmap_plot::@1/bitmap_plot::$3, bitmap_plot::@2/bitmap_plot::$1 ) - bitmap_plot::c#0 = bitmap_plot::$4 - bitmap_plot::vera_vram_address01_bankaddr#0 = bitmap_plot::plotter#1 - bitmap_plot::vera_vram_address01_incr#0 = VERA_INC_0 - to:bitmap_plot::vera_vram_address01 -bitmap_plot::vera_vram_address01: scope:[bitmap_plot] from bitmap_plot::@3 - bitmap_plot::c#9 = phi( bitmap_plot::@3/bitmap_plot::c#0 ) - bitmap_plot::x#6 = phi( bitmap_plot::@3/bitmap_plot::x#7 ) - bitmap_plot::vera_vram_address01_incr#1 = phi( bitmap_plot::@3/bitmap_plot::vera_vram_address01_incr#0 ) - bitmap_plot::vera_vram_address01_bankaddr#1 = phi( bitmap_plot::@3/bitmap_plot::vera_vram_address01_bankaddr#0 ) - *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL - bitmap_plot::vera_vram_address01_$0 = byte0 bitmap_plot::vera_vram_address01_bankaddr#1 - *VERA_ADDRX_L = bitmap_plot::vera_vram_address01_$0 - bitmap_plot::vera_vram_address01_$1 = byte1 bitmap_plot::vera_vram_address01_bankaddr#1 - *VERA_ADDRX_M = bitmap_plot::vera_vram_address01_$1 - bitmap_plot::vera_vram_address01_$2 = byte2 bitmap_plot::vera_vram_address01_bankaddr#1 - bitmap_plot::vera_vram_address01_$3 = bitmap_plot::vera_vram_address01_$2 | bitmap_plot::vera_vram_address01_incr#1 - *VERA_ADDRX_H = bitmap_plot::vera_vram_address01_$3 - to:bitmap_plot::@4 -bitmap_plot::@4: scope:[bitmap_plot] from bitmap_plot::vera_vram_address01 - bitmap_plot::c#7 = phi( bitmap_plot::vera_vram_address01/bitmap_plot::c#9 ) - bitmap_plot::x#5 = phi( bitmap_plot::vera_vram_address01/bitmap_plot::x#6 ) - bitmap_plot::$6 = ~ __bitmap_plot_bitmask[bitmap_plot::x#5] - bitmap_plot::$7 = *VERA_DATA0 & bitmap_plot::$6 - bitmap_plot::$8 = bitmap_plot::$7 | bitmap_plot::c#7 - *VERA_DATA0 = bitmap_plot::$8 - to:bitmap_plot::@return -bitmap_plot::@return: scope:[bitmap_plot] from bitmap_plot::@4 - return - to:@return - -void bitmap_line(unsigned int x0 , unsigned int x1 , unsigned int y0 , unsigned int y1 , char c) -bitmap_line: scope:[bitmap_line] from main::@43 main::@5 - bitmap_line::c#16 = phi( main::@43/bitmap_line::c#0, main::@5/bitmap_line::c#1 ) - bitmap_line::y1#14 = phi( main::@43/bitmap_line::y1#0, main::@5/bitmap_line::y1#1 ) - bitmap_line::y0#14 = phi( main::@43/bitmap_line::y0#0, main::@5/bitmap_line::y0#1 ) - bitmap_line::x1#2 = phi( main::@43/bitmap_line::x1#0, main::@5/bitmap_line::x1#1 ) - bitmap_line::x0#2 = phi( main::@43/bitmap_line::x0#0, main::@5/bitmap_line::x0#1 ) - bitmap_line::xd#0 = 0 - bitmap_line::yd#0 = 0 - bitmap_line::$0 = bitmap_line::x0#2 < bitmap_line::x1#2 - if(bitmap_line::$0) goto bitmap_line::@1 - to:bitmap_line::@2 -bitmap_line::@1: scope:[bitmap_line] from bitmap_line - bitmap_line::c#15 = phi( bitmap_line/bitmap_line::c#16 ) - bitmap_line::y1#2 = phi( bitmap_line/bitmap_line::y1#14 ) - bitmap_line::y0#2 = phi( bitmap_line/bitmap_line::y0#14 ) - bitmap_line::x0#3 = phi( bitmap_line/bitmap_line::x0#2 ) - bitmap_line::x1#3 = phi( bitmap_line/bitmap_line::x1#2 ) - bitmap_line::$11 = bitmap_line::x1#3 - bitmap_line::x0#3 - bitmap_line::xd#1 = bitmap_line::$11 - bitmap_line::$12 = bitmap_line::y0#2 < bitmap_line::y1#2 - if(bitmap_line::$12) goto bitmap_line::@11 - to:bitmap_line::@5 -bitmap_line::@2: scope:[bitmap_line] from bitmap_line - bitmap_line::c#14 = phi( bitmap_line/bitmap_line::c#16 ) - bitmap_line::y1#3 = phi( bitmap_line/bitmap_line::y1#14 ) - bitmap_line::y0#3 = phi( bitmap_line/bitmap_line::y0#14 ) - bitmap_line::x1#4 = phi( bitmap_line/bitmap_line::x1#2 ) - bitmap_line::x0#4 = phi( bitmap_line/bitmap_line::x0#2 ) - bitmap_line::$1 = bitmap_line::x0#4 - bitmap_line::x1#4 - bitmap_line::xd#2 = bitmap_line::$1 - bitmap_line::$2 = bitmap_line::y0#3 < bitmap_line::y1#3 - if(bitmap_line::$2) goto bitmap_line::@7 - to:bitmap_line::@3 -bitmap_line::@7: scope:[bitmap_line] from bitmap_line::@2 - bitmap_line::c#11 = phi( bitmap_line::@2/bitmap_line::c#14 ) - bitmap_line::x0#12 = phi( bitmap_line::@2/bitmap_line::x0#4 ) - bitmap_line::x1#12 = phi( bitmap_line::@2/bitmap_line::x1#4 ) - bitmap_line::xd#3 = phi( bitmap_line::@2/bitmap_line::xd#2 ) - bitmap_line::y0#4 = phi( bitmap_line::@2/bitmap_line::y0#3 ) - bitmap_line::y1#4 = phi( bitmap_line::@2/bitmap_line::y1#3 ) - bitmap_line::$7 = bitmap_line::y1#4 - bitmap_line::y0#4 - bitmap_line::yd#1 = bitmap_line::$7 - bitmap_line::$8 = bitmap_line::yd#1 < bitmap_line::xd#3 - if(bitmap_line::$8) goto bitmap_line::@9 - to:bitmap_line::@10 -bitmap_line::@3: scope:[bitmap_line] from bitmap_line::@2 - bitmap_line::c#10 = phi( bitmap_line::@2/bitmap_line::c#14 ) - bitmap_line::x0#11 = phi( bitmap_line::@2/bitmap_line::x0#4 ) - bitmap_line::x1#11 = phi( bitmap_line::@2/bitmap_line::x1#4 ) - bitmap_line::xd#4 = phi( bitmap_line::@2/bitmap_line::xd#2 ) - bitmap_line::y1#5 = phi( bitmap_line::@2/bitmap_line::y1#3 ) - bitmap_line::y0#5 = phi( bitmap_line::@2/bitmap_line::y0#3 ) - bitmap_line::$3 = bitmap_line::y0#5 - bitmap_line::y1#5 - bitmap_line::yd#2 = bitmap_line::$3 - bitmap_line::$4 = bitmap_line::yd#2 < bitmap_line::xd#4 - if(bitmap_line::$4) goto bitmap_line::@8 - to:bitmap_line::@4 -bitmap_line::@8: scope:[bitmap_line] from bitmap_line::@3 - bitmap_line::c#2 = phi( bitmap_line::@3/bitmap_line::c#10 ) - bitmap_line::yd#5 = phi( bitmap_line::@3/bitmap_line::yd#2 ) - bitmap_line::xd#5 = phi( bitmap_line::@3/bitmap_line::xd#4 ) - bitmap_line::x0#5 = phi( bitmap_line::@3/bitmap_line::x0#11 ) - bitmap_line::y1#6 = phi( bitmap_line::@3/bitmap_line::y1#5 ) - bitmap_line::x1#5 = phi( bitmap_line::@3/bitmap_line::x1#11 ) - bitmap_line_xdyi::x#0 = bitmap_line::x1#5 - bitmap_line_xdyi::y#0 = bitmap_line::y1#6 - bitmap_line_xdyi::x1#0 = bitmap_line::x0#5 - bitmap_line_xdyi::xd#0 = bitmap_line::xd#5 - bitmap_line_xdyi::yd#0 = bitmap_line::yd#5 - bitmap_line_xdyi::c#0 = bitmap_line::c#2 - call bitmap_line_xdyi - to:bitmap_line::@15 -bitmap_line::@15: scope:[bitmap_line] from bitmap_line::@8 - to:bitmap_line::@return -bitmap_line::@4: scope:[bitmap_line] from bitmap_line::@3 - bitmap_line::c#3 = phi( bitmap_line::@3/bitmap_line::c#10 ) - bitmap_line::xd#6 = phi( bitmap_line::@3/bitmap_line::xd#4 ) - bitmap_line::yd#6 = phi( bitmap_line::@3/bitmap_line::yd#2 ) - bitmap_line::y0#6 = phi( bitmap_line::@3/bitmap_line::y0#5 ) - bitmap_line::x1#6 = phi( bitmap_line::@3/bitmap_line::x1#11 ) - bitmap_line::y1#7 = phi( bitmap_line::@3/bitmap_line::y1#5 ) - bitmap_line_ydxi::y#0 = bitmap_line::y1#7 - bitmap_line_ydxi::x#0 = bitmap_line::x1#6 - bitmap_line_ydxi::y1#0 = bitmap_line::y0#6 - bitmap_line_ydxi::yd#0 = bitmap_line::yd#6 - bitmap_line_ydxi::xd#0 = bitmap_line::xd#6 - bitmap_line_ydxi::c#0 = bitmap_line::c#3 - call bitmap_line_ydxi - to:bitmap_line::@16 -bitmap_line::@16: scope:[bitmap_line] from bitmap_line::@4 - to:bitmap_line::@return -bitmap_line::@9: scope:[bitmap_line] from bitmap_line::@7 - bitmap_line::c#4 = phi( bitmap_line::@7/bitmap_line::c#11 ) - bitmap_line::yd#7 = phi( bitmap_line::@7/bitmap_line::yd#1 ) - bitmap_line::xd#7 = phi( bitmap_line::@7/bitmap_line::xd#3 ) - bitmap_line::x0#6 = phi( bitmap_line::@7/bitmap_line::x0#12 ) - bitmap_line::y1#8 = phi( bitmap_line::@7/bitmap_line::y1#4 ) - bitmap_line::x1#7 = phi( bitmap_line::@7/bitmap_line::x1#12 ) - bitmap_line_xdyd::x#0 = bitmap_line::x1#7 - bitmap_line_xdyd::y#0 = bitmap_line::y1#8 - bitmap_line_xdyd::x1#0 = bitmap_line::x0#6 - bitmap_line_xdyd::xd#0 = bitmap_line::xd#7 - bitmap_line_xdyd::yd#0 = bitmap_line::yd#7 - bitmap_line_xdyd::c#0 = bitmap_line::c#4 - call bitmap_line_xdyd - to:bitmap_line::@17 -bitmap_line::@17: scope:[bitmap_line] from bitmap_line::@9 - to:bitmap_line::@return -bitmap_line::@10: scope:[bitmap_line] from bitmap_line::@7 - bitmap_line::c#5 = phi( bitmap_line::@7/bitmap_line::c#11 ) - bitmap_line::xd#8 = phi( bitmap_line::@7/bitmap_line::xd#3 ) - bitmap_line::yd#8 = phi( bitmap_line::@7/bitmap_line::yd#1 ) - bitmap_line::y1#9 = phi( bitmap_line::@7/bitmap_line::y1#4 ) - bitmap_line::x0#7 = phi( bitmap_line::@7/bitmap_line::x0#12 ) - bitmap_line::y0#7 = phi( bitmap_line::@7/bitmap_line::y0#4 ) - bitmap_line_ydxd::y#0 = bitmap_line::y0#7 - bitmap_line_ydxd::x#0 = bitmap_line::x0#7 - bitmap_line_ydxd::y1#0 = bitmap_line::y1#9 - bitmap_line_ydxd::yd#0 = bitmap_line::yd#8 - bitmap_line_ydxd::xd#0 = bitmap_line::xd#8 - bitmap_line_ydxd::c#0 = bitmap_line::c#5 - call bitmap_line_ydxd - to:bitmap_line::@18 -bitmap_line::@18: scope:[bitmap_line] from bitmap_line::@10 - to:bitmap_line::@return -bitmap_line::@11: scope:[bitmap_line] from bitmap_line::@1 - bitmap_line::c#13 = phi( bitmap_line::@1/bitmap_line::c#15 ) - bitmap_line::x1#14 = phi( bitmap_line::@1/bitmap_line::x1#3 ) - bitmap_line::x0#14 = phi( bitmap_line::@1/bitmap_line::x0#3 ) - bitmap_line::xd#9 = phi( bitmap_line::@1/bitmap_line::xd#1 ) - bitmap_line::y0#8 = phi( bitmap_line::@1/bitmap_line::y0#2 ) - bitmap_line::y1#10 = phi( bitmap_line::@1/bitmap_line::y1#2 ) - bitmap_line::$17 = bitmap_line::y1#10 - bitmap_line::y0#8 - bitmap_line::yd#3 = bitmap_line::$17 - bitmap_line::$18 = bitmap_line::yd#3 < bitmap_line::xd#9 - if(bitmap_line::$18) goto bitmap_line::@13 - to:bitmap_line::@14 -bitmap_line::@5: scope:[bitmap_line] from bitmap_line::@1 - bitmap_line::c#12 = phi( bitmap_line::@1/bitmap_line::c#15 ) - bitmap_line::x1#13 = phi( bitmap_line::@1/bitmap_line::x1#3 ) - bitmap_line::x0#13 = phi( bitmap_line::@1/bitmap_line::x0#3 ) - bitmap_line::xd#10 = phi( bitmap_line::@1/bitmap_line::xd#1 ) - bitmap_line::y1#11 = phi( bitmap_line::@1/bitmap_line::y1#2 ) - bitmap_line::y0#9 = phi( bitmap_line::@1/bitmap_line::y0#2 ) - bitmap_line::$13 = bitmap_line::y0#9 - bitmap_line::y1#11 - bitmap_line::yd#4 = bitmap_line::$13 - bitmap_line::$14 = bitmap_line::yd#4 < bitmap_line::xd#10 - if(bitmap_line::$14) goto bitmap_line::@12 - to:bitmap_line::@6 -bitmap_line::@12: scope:[bitmap_line] from bitmap_line::@5 - bitmap_line::c#6 = phi( bitmap_line::@5/bitmap_line::c#12 ) - bitmap_line::yd#9 = phi( bitmap_line::@5/bitmap_line::yd#4 ) - bitmap_line::xd#11 = phi( bitmap_line::@5/bitmap_line::xd#10 ) - bitmap_line::x1#8 = phi( bitmap_line::@5/bitmap_line::x1#13 ) - bitmap_line::y0#10 = phi( bitmap_line::@5/bitmap_line::y0#9 ) - bitmap_line::x0#8 = phi( bitmap_line::@5/bitmap_line::x0#13 ) - bitmap_line_xdyd::x#1 = bitmap_line::x0#8 - bitmap_line_xdyd::y#1 = bitmap_line::y0#10 - bitmap_line_xdyd::x1#1 = bitmap_line::x1#8 - bitmap_line_xdyd::xd#1 = bitmap_line::xd#11 - bitmap_line_xdyd::yd#1 = bitmap_line::yd#9 - bitmap_line_xdyd::c#1 = bitmap_line::c#6 - call bitmap_line_xdyd - to:bitmap_line::@19 -bitmap_line::@19: scope:[bitmap_line] from bitmap_line::@12 - to:bitmap_line::@return -bitmap_line::@6: scope:[bitmap_line] from bitmap_line::@5 - bitmap_line::c#7 = phi( bitmap_line::@5/bitmap_line::c#12 ) - bitmap_line::xd#12 = phi( bitmap_line::@5/bitmap_line::xd#10 ) - bitmap_line::yd#10 = phi( bitmap_line::@5/bitmap_line::yd#4 ) - bitmap_line::y0#11 = phi( bitmap_line::@5/bitmap_line::y0#9 ) - bitmap_line::x1#9 = phi( bitmap_line::@5/bitmap_line::x1#13 ) - bitmap_line::y1#12 = phi( bitmap_line::@5/bitmap_line::y1#11 ) - bitmap_line_ydxd::y#1 = bitmap_line::y1#12 - bitmap_line_ydxd::x#1 = bitmap_line::x1#9 - bitmap_line_ydxd::y1#1 = bitmap_line::y0#11 - bitmap_line_ydxd::yd#1 = bitmap_line::yd#10 - bitmap_line_ydxd::xd#1 = bitmap_line::xd#12 - bitmap_line_ydxd::c#1 = bitmap_line::c#7 - call bitmap_line_ydxd - to:bitmap_line::@20 -bitmap_line::@20: scope:[bitmap_line] from bitmap_line::@6 - to:bitmap_line::@return -bitmap_line::@13: scope:[bitmap_line] from bitmap_line::@11 - bitmap_line::c#8 = phi( bitmap_line::@11/bitmap_line::c#13 ) - bitmap_line::yd#11 = phi( bitmap_line::@11/bitmap_line::yd#3 ) - bitmap_line::xd#13 = phi( bitmap_line::@11/bitmap_line::xd#9 ) - bitmap_line::x1#10 = phi( bitmap_line::@11/bitmap_line::x1#14 ) - bitmap_line::y0#12 = phi( bitmap_line::@11/bitmap_line::y0#8 ) - bitmap_line::x0#9 = phi( bitmap_line::@11/bitmap_line::x0#14 ) - bitmap_line_xdyi::x#1 = bitmap_line::x0#9 - bitmap_line_xdyi::y#1 = bitmap_line::y0#12 - bitmap_line_xdyi::x1#1 = bitmap_line::x1#10 - bitmap_line_xdyi::xd#1 = bitmap_line::xd#13 - bitmap_line_xdyi::yd#1 = bitmap_line::yd#11 - bitmap_line_xdyi::c#1 = bitmap_line::c#8 - call bitmap_line_xdyi - to:bitmap_line::@21 -bitmap_line::@21: scope:[bitmap_line] from bitmap_line::@13 - to:bitmap_line::@return -bitmap_line::@14: scope:[bitmap_line] from bitmap_line::@11 - bitmap_line::c#9 = phi( bitmap_line::@11/bitmap_line::c#13 ) - bitmap_line::xd#14 = phi( bitmap_line::@11/bitmap_line::xd#9 ) - bitmap_line::yd#12 = phi( bitmap_line::@11/bitmap_line::yd#3 ) - bitmap_line::y1#13 = phi( bitmap_line::@11/bitmap_line::y1#10 ) - bitmap_line::x0#10 = phi( bitmap_line::@11/bitmap_line::x0#14 ) - bitmap_line::y0#13 = phi( bitmap_line::@11/bitmap_line::y0#8 ) - bitmap_line_ydxi::y#1 = bitmap_line::y0#13 - bitmap_line_ydxi::x#1 = bitmap_line::x0#10 - bitmap_line_ydxi::y1#1 = bitmap_line::y1#13 - bitmap_line_ydxi::yd#1 = bitmap_line::yd#12 - bitmap_line_ydxi::xd#1 = bitmap_line::xd#14 - bitmap_line_ydxi::c#1 = bitmap_line::c#9 - call bitmap_line_ydxi - to:bitmap_line::@22 -bitmap_line::@22: scope:[bitmap_line] from bitmap_line::@14 - to:bitmap_line::@return -bitmap_line::@return: scope:[bitmap_line] from bitmap_line::@15 bitmap_line::@16 bitmap_line::@17 bitmap_line::@18 bitmap_line::@19 bitmap_line::@20 bitmap_line::@21 bitmap_line::@22 - return - to:@return - -unsigned long mul16u(unsigned int a , unsigned int b) -mul16u: scope:[mul16u] from bitmap_clear - mul16u::a#5 = phi( bitmap_clear/mul16u::a#0 ) - mul16u::b#1 = phi( bitmap_clear/mul16u::b#0 ) - mul16u::res#0 = 0 - mul16u::mb#0 = (unsigned long)mul16u::b#1 - to:mul16u::@1 -mul16u::@1: scope:[mul16u] from mul16u mul16u::@4 - mul16u::mb#5 = phi( mul16u/mul16u::mb#0, mul16u::@4/mul16u::mb#1 ) - mul16u::res#4 = phi( mul16u/mul16u::res#0, mul16u::@4/mul16u::res#6 ) - mul16u::a#2 = phi( mul16u/mul16u::a#5, mul16u::@4/mul16u::a#1 ) - mul16u::$0 = mul16u::a#2 != 0 - if(mul16u::$0) goto mul16u::@2 - to:mul16u::@3 -mul16u::@2: scope:[mul16u] from mul16u::@1 - mul16u::res#5 = phi( mul16u::@1/mul16u::res#4 ) - mul16u::mb#4 = phi( mul16u::@1/mul16u::mb#5 ) - mul16u::a#3 = phi( mul16u::@1/mul16u::a#2 ) - mul16u::$1 = mul16u::a#3 & 1 - mul16u::$2 = mul16u::$1 != 0 - mul16u::$3 = ! mul16u::$2 - if(mul16u::$3) goto mul16u::@4 - to:mul16u::@5 -mul16u::@3: scope:[mul16u] from mul16u::@1 - mul16u::res#2 = phi( mul16u::@1/mul16u::res#4 ) - mul16u::return#1 = mul16u::res#2 - to:mul16u::@return -mul16u::@4: scope:[mul16u] from mul16u::@2 mul16u::@5 - mul16u::res#6 = phi( mul16u::@2/mul16u::res#5, mul16u::@5/mul16u::res#1 ) - mul16u::mb#2 = phi( mul16u::@2/mul16u::mb#4, mul16u::@5/mul16u::mb#3 ) - mul16u::a#4 = phi( mul16u::@2/mul16u::a#3, mul16u::@5/mul16u::a#6 ) - mul16u::$5 = mul16u::a#4 >> 1 - mul16u::a#1 = mul16u::$5 - mul16u::$6 = mul16u::mb#2 << 1 - mul16u::mb#1 = mul16u::$6 - to:mul16u::@1 -mul16u::@5: scope:[mul16u] from mul16u::@2 - mul16u::a#6 = phi( mul16u::@2/mul16u::a#3 ) - mul16u::mb#3 = phi( mul16u::@2/mul16u::mb#4 ) - mul16u::res#3 = phi( mul16u::@2/mul16u::res#5 ) - mul16u::$4 = mul16u::res#3 + mul16u::mb#3 - mul16u::res#1 = mul16u::$4 - to:mul16u::@4 -mul16u::@return: scope:[mul16u] from mul16u::@3 - mul16u::return#4 = phi( mul16u::@3/mul16u::return#1 ) - mul16u::return#2 = mul16u::return#4 - return - to:@return - -void bitmap_line_xdyi(unsigned int x , unsigned int y , unsigned int x1 , unsigned int xd , unsigned int yd , char c) -bitmap_line_xdyi: scope:[bitmap_line_xdyi] from bitmap_line::@13 bitmap_line::@8 - bitmap_line_xdyi::x1#6 = phi( bitmap_line::@13/bitmap_line_xdyi::x1#1, bitmap_line::@8/bitmap_line_xdyi::x1#0 ) - bitmap_line_xdyi::xd#5 = phi( bitmap_line::@13/bitmap_line_xdyi::xd#1, bitmap_line::@8/bitmap_line_xdyi::xd#0 ) - bitmap_line_xdyi::c#3 = phi( bitmap_line::@13/bitmap_line_xdyi::c#1, bitmap_line::@8/bitmap_line_xdyi::c#0 ) - bitmap_line_xdyi::y#5 = phi( bitmap_line::@13/bitmap_line_xdyi::y#1, bitmap_line::@8/bitmap_line_xdyi::y#0 ) - bitmap_line_xdyi::x#6 = phi( bitmap_line::@13/bitmap_line_xdyi::x#1, bitmap_line::@8/bitmap_line_xdyi::x#0 ) - bitmap_line_xdyi::yd#2 = phi( bitmap_line::@13/bitmap_line_xdyi::yd#1, bitmap_line::@8/bitmap_line_xdyi::yd#0 ) - bitmap_line_xdyi::e#0 = bitmap_line_xdyi::yd#2 >> 1 - to:bitmap_line_xdyi::@1 -bitmap_line_xdyi::@1: scope:[bitmap_line_xdyi] from bitmap_line_xdyi bitmap_line_xdyi::@2 - bitmap_line_xdyi::x1#5 = phi( bitmap_line_xdyi/bitmap_line_xdyi::x1#6, bitmap_line_xdyi::@2/bitmap_line_xdyi::x1#2 ) - bitmap_line_xdyi::xd#4 = phi( bitmap_line_xdyi/bitmap_line_xdyi::xd#5, bitmap_line_xdyi::@2/bitmap_line_xdyi::xd#6 ) - bitmap_line_xdyi::yd#4 = phi( bitmap_line_xdyi/bitmap_line_xdyi::yd#2, bitmap_line_xdyi::@2/bitmap_line_xdyi::yd#5 ) - bitmap_line_xdyi::e#5 = phi( bitmap_line_xdyi/bitmap_line_xdyi::e#0, bitmap_line_xdyi::@2/bitmap_line_xdyi::e#6 ) - bitmap_line_xdyi::c#2 = phi( bitmap_line_xdyi/bitmap_line_xdyi::c#3, bitmap_line_xdyi::@2/bitmap_line_xdyi::c#4 ) - bitmap_line_xdyi::y#3 = phi( bitmap_line_xdyi/bitmap_line_xdyi::y#5, bitmap_line_xdyi::@2/bitmap_line_xdyi::y#6 ) - bitmap_line_xdyi::x#3 = phi( bitmap_line_xdyi/bitmap_line_xdyi::x#6, bitmap_line_xdyi::@2/bitmap_line_xdyi::x#5 ) - bitmap_plot::x#0 = bitmap_line_xdyi::x#3 - bitmap_plot::y#0 = bitmap_line_xdyi::y#3 - bitmap_plot::c#1 = bitmap_line_xdyi::c#2 - call bitmap_plot - to:bitmap_line_xdyi::@4 -bitmap_line_xdyi::@4: scope:[bitmap_line_xdyi] from bitmap_line_xdyi::@1 - bitmap_line_xdyi::c#6 = phi( bitmap_line_xdyi::@1/bitmap_line_xdyi::c#2 ) - bitmap_line_xdyi::y#7 = phi( bitmap_line_xdyi::@1/bitmap_line_xdyi::y#3 ) - bitmap_line_xdyi::x1#4 = phi( bitmap_line_xdyi::@1/bitmap_line_xdyi::x1#5 ) - bitmap_line_xdyi::xd#2 = phi( bitmap_line_xdyi::@1/bitmap_line_xdyi::xd#4 ) - bitmap_line_xdyi::yd#3 = phi( bitmap_line_xdyi::@1/bitmap_line_xdyi::yd#4 ) - bitmap_line_xdyi::e#3 = phi( bitmap_line_xdyi::@1/bitmap_line_xdyi::e#5 ) - bitmap_line_xdyi::x#4 = phi( bitmap_line_xdyi::@1/bitmap_line_xdyi::x#3 ) - bitmap_line_xdyi::x#2 = ++ bitmap_line_xdyi::x#4 - bitmap_line_xdyi::$2 = bitmap_line_xdyi::e#3 + bitmap_line_xdyi::yd#3 - bitmap_line_xdyi::e#1 = bitmap_line_xdyi::$2 - bitmap_line_xdyi::$3 = bitmap_line_xdyi::xd#2 < bitmap_line_xdyi::e#1 - bitmap_line_xdyi::$4 = ! bitmap_line_xdyi::$3 - if(bitmap_line_xdyi::$4) goto bitmap_line_xdyi::@2 - to:bitmap_line_xdyi::@3 -bitmap_line_xdyi::@2: scope:[bitmap_line_xdyi] from bitmap_line_xdyi::@3 bitmap_line_xdyi::@4 - bitmap_line_xdyi::xd#6 = phi( bitmap_line_xdyi::@3/bitmap_line_xdyi::xd#3, bitmap_line_xdyi::@4/bitmap_line_xdyi::xd#2 ) - bitmap_line_xdyi::yd#5 = phi( bitmap_line_xdyi::@3/bitmap_line_xdyi::yd#6, bitmap_line_xdyi::@4/bitmap_line_xdyi::yd#3 ) - bitmap_line_xdyi::e#6 = phi( bitmap_line_xdyi::@3/bitmap_line_xdyi::e#2, bitmap_line_xdyi::@4/bitmap_line_xdyi::e#1 ) - bitmap_line_xdyi::c#4 = phi( bitmap_line_xdyi::@3/bitmap_line_xdyi::c#5, bitmap_line_xdyi::@4/bitmap_line_xdyi::c#6 ) - bitmap_line_xdyi::y#6 = phi( bitmap_line_xdyi::@3/bitmap_line_xdyi::y#2, bitmap_line_xdyi::@4/bitmap_line_xdyi::y#7 ) - bitmap_line_xdyi::x#5 = phi( bitmap_line_xdyi::@3/bitmap_line_xdyi::x#7, bitmap_line_xdyi::@4/bitmap_line_xdyi::x#2 ) - bitmap_line_xdyi::x1#2 = phi( bitmap_line_xdyi::@3/bitmap_line_xdyi::x1#3, bitmap_line_xdyi::@4/bitmap_line_xdyi::x1#4 ) - bitmap_line_xdyi::$6 = bitmap_line_xdyi::x1#2 + 1 - bitmap_line_xdyi::$7 = bitmap_line_xdyi::x#5 != bitmap_line_xdyi::$6 - if(bitmap_line_xdyi::$7) goto bitmap_line_xdyi::@1 - to:bitmap_line_xdyi::@return -bitmap_line_xdyi::@3: scope:[bitmap_line_xdyi] from bitmap_line_xdyi::@4 - bitmap_line_xdyi::yd#6 = phi( bitmap_line_xdyi::@4/bitmap_line_xdyi::yd#3 ) - bitmap_line_xdyi::c#5 = phi( bitmap_line_xdyi::@4/bitmap_line_xdyi::c#6 ) - bitmap_line_xdyi::x#7 = phi( bitmap_line_xdyi::@4/bitmap_line_xdyi::x#2 ) - bitmap_line_xdyi::x1#3 = phi( bitmap_line_xdyi::@4/bitmap_line_xdyi::x1#4 ) - bitmap_line_xdyi::xd#3 = phi( bitmap_line_xdyi::@4/bitmap_line_xdyi::xd#2 ) - bitmap_line_xdyi::e#4 = phi( bitmap_line_xdyi::@4/bitmap_line_xdyi::e#1 ) - bitmap_line_xdyi::y#4 = phi( bitmap_line_xdyi::@4/bitmap_line_xdyi::y#7 ) - bitmap_line_xdyi::y#2 = ++ bitmap_line_xdyi::y#4 - bitmap_line_xdyi::$5 = bitmap_line_xdyi::e#4 - bitmap_line_xdyi::xd#3 - bitmap_line_xdyi::e#2 = bitmap_line_xdyi::$5 - to:bitmap_line_xdyi::@2 -bitmap_line_xdyi::@return: scope:[bitmap_line_xdyi] from bitmap_line_xdyi::@2 - return - to:@return - -void bitmap_line_xdyd(unsigned int x , unsigned int y , unsigned int x1 , unsigned int xd , unsigned int yd , char c) -bitmap_line_xdyd: scope:[bitmap_line_xdyd] from bitmap_line::@12 bitmap_line::@9 - bitmap_line_xdyd::x1#6 = phi( bitmap_line::@12/bitmap_line_xdyd::x1#1, bitmap_line::@9/bitmap_line_xdyd::x1#0 ) - bitmap_line_xdyd::xd#5 = phi( bitmap_line::@12/bitmap_line_xdyd::xd#1, bitmap_line::@9/bitmap_line_xdyd::xd#0 ) - bitmap_line_xdyd::c#3 = phi( bitmap_line::@12/bitmap_line_xdyd::c#1, bitmap_line::@9/bitmap_line_xdyd::c#0 ) - bitmap_line_xdyd::y#5 = phi( bitmap_line::@12/bitmap_line_xdyd::y#1, bitmap_line::@9/bitmap_line_xdyd::y#0 ) - bitmap_line_xdyd::x#6 = phi( bitmap_line::@12/bitmap_line_xdyd::x#1, bitmap_line::@9/bitmap_line_xdyd::x#0 ) - bitmap_line_xdyd::yd#2 = phi( bitmap_line::@12/bitmap_line_xdyd::yd#1, bitmap_line::@9/bitmap_line_xdyd::yd#0 ) - bitmap_line_xdyd::e#0 = bitmap_line_xdyd::yd#2 >> 1 - to:bitmap_line_xdyd::@1 -bitmap_line_xdyd::@1: scope:[bitmap_line_xdyd] from bitmap_line_xdyd bitmap_line_xdyd::@2 - bitmap_line_xdyd::x1#5 = phi( bitmap_line_xdyd/bitmap_line_xdyd::x1#6, bitmap_line_xdyd::@2/bitmap_line_xdyd::x1#2 ) - bitmap_line_xdyd::xd#4 = phi( bitmap_line_xdyd/bitmap_line_xdyd::xd#5, bitmap_line_xdyd::@2/bitmap_line_xdyd::xd#6 ) - bitmap_line_xdyd::yd#4 = phi( bitmap_line_xdyd/bitmap_line_xdyd::yd#2, bitmap_line_xdyd::@2/bitmap_line_xdyd::yd#5 ) - bitmap_line_xdyd::e#5 = phi( bitmap_line_xdyd/bitmap_line_xdyd::e#0, bitmap_line_xdyd::@2/bitmap_line_xdyd::e#6 ) - bitmap_line_xdyd::c#2 = phi( bitmap_line_xdyd/bitmap_line_xdyd::c#3, bitmap_line_xdyd::@2/bitmap_line_xdyd::c#4 ) - bitmap_line_xdyd::y#3 = phi( bitmap_line_xdyd/bitmap_line_xdyd::y#5, bitmap_line_xdyd::@2/bitmap_line_xdyd::y#6 ) - bitmap_line_xdyd::x#3 = phi( bitmap_line_xdyd/bitmap_line_xdyd::x#6, bitmap_line_xdyd::@2/bitmap_line_xdyd::x#5 ) - bitmap_plot::x#1 = bitmap_line_xdyd::x#3 - bitmap_plot::y#1 = bitmap_line_xdyd::y#3 - bitmap_plot::c#2 = bitmap_line_xdyd::c#2 - call bitmap_plot - to:bitmap_line_xdyd::@4 -bitmap_line_xdyd::@4: scope:[bitmap_line_xdyd] from bitmap_line_xdyd::@1 - bitmap_line_xdyd::c#6 = phi( bitmap_line_xdyd::@1/bitmap_line_xdyd::c#2 ) - bitmap_line_xdyd::y#7 = phi( bitmap_line_xdyd::@1/bitmap_line_xdyd::y#3 ) - bitmap_line_xdyd::x1#4 = phi( bitmap_line_xdyd::@1/bitmap_line_xdyd::x1#5 ) - bitmap_line_xdyd::xd#2 = phi( bitmap_line_xdyd::@1/bitmap_line_xdyd::xd#4 ) - bitmap_line_xdyd::yd#3 = phi( bitmap_line_xdyd::@1/bitmap_line_xdyd::yd#4 ) - bitmap_line_xdyd::e#3 = phi( bitmap_line_xdyd::@1/bitmap_line_xdyd::e#5 ) - bitmap_line_xdyd::x#4 = phi( bitmap_line_xdyd::@1/bitmap_line_xdyd::x#3 ) - bitmap_line_xdyd::x#2 = ++ bitmap_line_xdyd::x#4 - bitmap_line_xdyd::$2 = bitmap_line_xdyd::e#3 + bitmap_line_xdyd::yd#3 - bitmap_line_xdyd::e#1 = bitmap_line_xdyd::$2 - bitmap_line_xdyd::$3 = bitmap_line_xdyd::xd#2 < bitmap_line_xdyd::e#1 - bitmap_line_xdyd::$4 = ! bitmap_line_xdyd::$3 - if(bitmap_line_xdyd::$4) goto bitmap_line_xdyd::@2 - to:bitmap_line_xdyd::@3 -bitmap_line_xdyd::@2: scope:[bitmap_line_xdyd] from bitmap_line_xdyd::@3 bitmap_line_xdyd::@4 - bitmap_line_xdyd::xd#6 = phi( bitmap_line_xdyd::@3/bitmap_line_xdyd::xd#3, bitmap_line_xdyd::@4/bitmap_line_xdyd::xd#2 ) - bitmap_line_xdyd::yd#5 = phi( bitmap_line_xdyd::@3/bitmap_line_xdyd::yd#6, bitmap_line_xdyd::@4/bitmap_line_xdyd::yd#3 ) - bitmap_line_xdyd::e#6 = phi( bitmap_line_xdyd::@3/bitmap_line_xdyd::e#2, bitmap_line_xdyd::@4/bitmap_line_xdyd::e#1 ) - bitmap_line_xdyd::c#4 = phi( bitmap_line_xdyd::@3/bitmap_line_xdyd::c#5, bitmap_line_xdyd::@4/bitmap_line_xdyd::c#6 ) - bitmap_line_xdyd::y#6 = phi( bitmap_line_xdyd::@3/bitmap_line_xdyd::y#2, bitmap_line_xdyd::@4/bitmap_line_xdyd::y#7 ) - bitmap_line_xdyd::x#5 = phi( bitmap_line_xdyd::@3/bitmap_line_xdyd::x#7, bitmap_line_xdyd::@4/bitmap_line_xdyd::x#2 ) - bitmap_line_xdyd::x1#2 = phi( bitmap_line_xdyd::@3/bitmap_line_xdyd::x1#3, bitmap_line_xdyd::@4/bitmap_line_xdyd::x1#4 ) - bitmap_line_xdyd::$6 = bitmap_line_xdyd::x1#2 + 1 - bitmap_line_xdyd::$7 = bitmap_line_xdyd::x#5 != bitmap_line_xdyd::$6 - if(bitmap_line_xdyd::$7) goto bitmap_line_xdyd::@1 - to:bitmap_line_xdyd::@return -bitmap_line_xdyd::@3: scope:[bitmap_line_xdyd] from bitmap_line_xdyd::@4 - bitmap_line_xdyd::yd#6 = phi( bitmap_line_xdyd::@4/bitmap_line_xdyd::yd#3 ) - bitmap_line_xdyd::c#5 = phi( bitmap_line_xdyd::@4/bitmap_line_xdyd::c#6 ) - bitmap_line_xdyd::x#7 = phi( bitmap_line_xdyd::@4/bitmap_line_xdyd::x#2 ) - bitmap_line_xdyd::x1#3 = phi( bitmap_line_xdyd::@4/bitmap_line_xdyd::x1#4 ) - bitmap_line_xdyd::xd#3 = phi( bitmap_line_xdyd::@4/bitmap_line_xdyd::xd#2 ) - bitmap_line_xdyd::e#4 = phi( bitmap_line_xdyd::@4/bitmap_line_xdyd::e#1 ) - bitmap_line_xdyd::y#4 = phi( bitmap_line_xdyd::@4/bitmap_line_xdyd::y#7 ) - bitmap_line_xdyd::y#2 = -- bitmap_line_xdyd::y#4 - bitmap_line_xdyd::$5 = bitmap_line_xdyd::e#4 - bitmap_line_xdyd::xd#3 - bitmap_line_xdyd::e#2 = bitmap_line_xdyd::$5 - to:bitmap_line_xdyd::@2 -bitmap_line_xdyd::@return: scope:[bitmap_line_xdyd] from bitmap_line_xdyd::@2 - return - to:@return - -void bitmap_line_ydxi(unsigned int y , unsigned int x , unsigned int y1 , unsigned int yd , unsigned int xd , char c) -bitmap_line_ydxi: scope:[bitmap_line_ydxi] from bitmap_line::@14 bitmap_line::@4 - bitmap_line_ydxi::y1#6 = phi( bitmap_line::@14/bitmap_line_ydxi::y1#1, bitmap_line::@4/bitmap_line_ydxi::y1#0 ) - bitmap_line_ydxi::yd#5 = phi( bitmap_line::@14/bitmap_line_ydxi::yd#1, bitmap_line::@4/bitmap_line_ydxi::yd#0 ) - bitmap_line_ydxi::c#3 = phi( bitmap_line::@14/bitmap_line_ydxi::c#1, bitmap_line::@4/bitmap_line_ydxi::c#0 ) - bitmap_line_ydxi::y#6 = phi( bitmap_line::@14/bitmap_line_ydxi::y#1, bitmap_line::@4/bitmap_line_ydxi::y#0 ) - bitmap_line_ydxi::x#5 = phi( bitmap_line::@14/bitmap_line_ydxi::x#1, bitmap_line::@4/bitmap_line_ydxi::x#0 ) - bitmap_line_ydxi::xd#2 = phi( bitmap_line::@14/bitmap_line_ydxi::xd#1, bitmap_line::@4/bitmap_line_ydxi::xd#0 ) - bitmap_line_ydxi::e#0 = bitmap_line_ydxi::xd#2 >> 1 - to:bitmap_line_ydxi::@1 -bitmap_line_ydxi::@1: scope:[bitmap_line_ydxi] from bitmap_line_ydxi bitmap_line_ydxi::@2 - bitmap_line_ydxi::y1#5 = phi( bitmap_line_ydxi/bitmap_line_ydxi::y1#6, bitmap_line_ydxi::@2/bitmap_line_ydxi::y1#2 ) - bitmap_line_ydxi::yd#4 = phi( bitmap_line_ydxi/bitmap_line_ydxi::yd#5, bitmap_line_ydxi::@2/bitmap_line_ydxi::yd#6 ) - bitmap_line_ydxi::xd#4 = phi( bitmap_line_ydxi/bitmap_line_ydxi::xd#2, bitmap_line_ydxi::@2/bitmap_line_ydxi::xd#5 ) - bitmap_line_ydxi::e#5 = phi( bitmap_line_ydxi/bitmap_line_ydxi::e#0, bitmap_line_ydxi::@2/bitmap_line_ydxi::e#6 ) - bitmap_line_ydxi::c#2 = phi( bitmap_line_ydxi/bitmap_line_ydxi::c#3, bitmap_line_ydxi::@2/bitmap_line_ydxi::c#4 ) - bitmap_line_ydxi::y#3 = phi( bitmap_line_ydxi/bitmap_line_ydxi::y#6, bitmap_line_ydxi::@2/bitmap_line_ydxi::y#5 ) - bitmap_line_ydxi::x#3 = phi( bitmap_line_ydxi/bitmap_line_ydxi::x#5, bitmap_line_ydxi::@2/bitmap_line_ydxi::x#6 ) - bitmap_plot::x#2 = bitmap_line_ydxi::x#3 - bitmap_plot::y#2 = bitmap_line_ydxi::y#3 - bitmap_plot::c#3 = bitmap_line_ydxi::c#2 - call bitmap_plot - to:bitmap_line_ydxi::@4 -bitmap_line_ydxi::@4: scope:[bitmap_line_ydxi] from bitmap_line_ydxi::@1 - bitmap_line_ydxi::c#6 = phi( bitmap_line_ydxi::@1/bitmap_line_ydxi::c#2 ) - bitmap_line_ydxi::x#7 = phi( bitmap_line_ydxi::@1/bitmap_line_ydxi::x#3 ) - bitmap_line_ydxi::y1#4 = phi( bitmap_line_ydxi::@1/bitmap_line_ydxi::y1#5 ) - bitmap_line_ydxi::yd#2 = phi( bitmap_line_ydxi::@1/bitmap_line_ydxi::yd#4 ) - bitmap_line_ydxi::xd#3 = phi( bitmap_line_ydxi::@1/bitmap_line_ydxi::xd#4 ) - bitmap_line_ydxi::e#3 = phi( bitmap_line_ydxi::@1/bitmap_line_ydxi::e#5 ) - bitmap_line_ydxi::y#4 = phi( bitmap_line_ydxi::@1/bitmap_line_ydxi::y#3 ) - bitmap_line_ydxi::y#2 = ++ bitmap_line_ydxi::y#4 - bitmap_line_ydxi::$2 = bitmap_line_ydxi::e#3 + bitmap_line_ydxi::xd#3 - bitmap_line_ydxi::e#1 = bitmap_line_ydxi::$2 - bitmap_line_ydxi::$3 = bitmap_line_ydxi::yd#2 < bitmap_line_ydxi::e#1 - bitmap_line_ydxi::$4 = ! bitmap_line_ydxi::$3 - if(bitmap_line_ydxi::$4) goto bitmap_line_ydxi::@2 - to:bitmap_line_ydxi::@3 -bitmap_line_ydxi::@2: scope:[bitmap_line_ydxi] from bitmap_line_ydxi::@3 bitmap_line_ydxi::@4 - bitmap_line_ydxi::yd#6 = phi( bitmap_line_ydxi::@3/bitmap_line_ydxi::yd#3, bitmap_line_ydxi::@4/bitmap_line_ydxi::yd#2 ) - bitmap_line_ydxi::xd#5 = phi( bitmap_line_ydxi::@3/bitmap_line_ydxi::xd#6, bitmap_line_ydxi::@4/bitmap_line_ydxi::xd#3 ) - bitmap_line_ydxi::e#6 = phi( bitmap_line_ydxi::@3/bitmap_line_ydxi::e#2, bitmap_line_ydxi::@4/bitmap_line_ydxi::e#1 ) - bitmap_line_ydxi::c#4 = phi( bitmap_line_ydxi::@3/bitmap_line_ydxi::c#5, bitmap_line_ydxi::@4/bitmap_line_ydxi::c#6 ) - bitmap_line_ydxi::x#6 = phi( bitmap_line_ydxi::@3/bitmap_line_ydxi::x#2, bitmap_line_ydxi::@4/bitmap_line_ydxi::x#7 ) - bitmap_line_ydxi::y#5 = phi( bitmap_line_ydxi::@3/bitmap_line_ydxi::y#7, bitmap_line_ydxi::@4/bitmap_line_ydxi::y#2 ) - bitmap_line_ydxi::y1#2 = phi( bitmap_line_ydxi::@3/bitmap_line_ydxi::y1#3, bitmap_line_ydxi::@4/bitmap_line_ydxi::y1#4 ) - bitmap_line_ydxi::$6 = bitmap_line_ydxi::y1#2 + 1 - bitmap_line_ydxi::$7 = bitmap_line_ydxi::y#5 != bitmap_line_ydxi::$6 - if(bitmap_line_ydxi::$7) goto bitmap_line_ydxi::@1 - to:bitmap_line_ydxi::@return -bitmap_line_ydxi::@3: scope:[bitmap_line_ydxi] from bitmap_line_ydxi::@4 - bitmap_line_ydxi::xd#6 = phi( bitmap_line_ydxi::@4/bitmap_line_ydxi::xd#3 ) - bitmap_line_ydxi::c#5 = phi( bitmap_line_ydxi::@4/bitmap_line_ydxi::c#6 ) - bitmap_line_ydxi::y#7 = phi( bitmap_line_ydxi::@4/bitmap_line_ydxi::y#2 ) - bitmap_line_ydxi::y1#3 = phi( bitmap_line_ydxi::@4/bitmap_line_ydxi::y1#4 ) - bitmap_line_ydxi::yd#3 = phi( bitmap_line_ydxi::@4/bitmap_line_ydxi::yd#2 ) - bitmap_line_ydxi::e#4 = phi( bitmap_line_ydxi::@4/bitmap_line_ydxi::e#1 ) - bitmap_line_ydxi::x#4 = phi( bitmap_line_ydxi::@4/bitmap_line_ydxi::x#7 ) - bitmap_line_ydxi::x#2 = ++ bitmap_line_ydxi::x#4 - bitmap_line_ydxi::$5 = bitmap_line_ydxi::e#4 - bitmap_line_ydxi::yd#3 - bitmap_line_ydxi::e#2 = bitmap_line_ydxi::$5 - to:bitmap_line_ydxi::@2 -bitmap_line_ydxi::@return: scope:[bitmap_line_ydxi] from bitmap_line_ydxi::@2 - return - to:@return - -void bitmap_line_ydxd(unsigned int y , unsigned int x , unsigned int y1 , unsigned int yd , unsigned int xd , char c) -bitmap_line_ydxd: scope:[bitmap_line_ydxd] from bitmap_line::@10 bitmap_line::@6 - bitmap_line_ydxd::y1#6 = phi( bitmap_line::@10/bitmap_line_ydxd::y1#0, bitmap_line::@6/bitmap_line_ydxd::y1#1 ) - bitmap_line_ydxd::yd#5 = phi( bitmap_line::@10/bitmap_line_ydxd::yd#0, bitmap_line::@6/bitmap_line_ydxd::yd#1 ) - bitmap_line_ydxd::c#3 = phi( bitmap_line::@10/bitmap_line_ydxd::c#0, bitmap_line::@6/bitmap_line_ydxd::c#1 ) - bitmap_line_ydxd::y#7 = phi( bitmap_line::@10/bitmap_line_ydxd::y#0, bitmap_line::@6/bitmap_line_ydxd::y#1 ) - bitmap_line_ydxd::x#5 = phi( bitmap_line::@10/bitmap_line_ydxd::x#0, bitmap_line::@6/bitmap_line_ydxd::x#1 ) - bitmap_line_ydxd::xd#2 = phi( bitmap_line::@10/bitmap_line_ydxd::xd#0, bitmap_line::@6/bitmap_line_ydxd::xd#1 ) - bitmap_line_ydxd::e#0 = bitmap_line_ydxd::xd#2 >> 1 - to:bitmap_line_ydxd::@1 -bitmap_line_ydxd::@1: scope:[bitmap_line_ydxd] from bitmap_line_ydxd bitmap_line_ydxd::@2 - bitmap_line_ydxd::y1#5 = phi( bitmap_line_ydxd/bitmap_line_ydxd::y1#6, bitmap_line_ydxd::@2/bitmap_line_ydxd::y1#2 ) - bitmap_line_ydxd::yd#4 = phi( bitmap_line_ydxd/bitmap_line_ydxd::yd#5, bitmap_line_ydxd::@2/bitmap_line_ydxd::yd#6 ) - bitmap_line_ydxd::xd#4 = phi( bitmap_line_ydxd/bitmap_line_ydxd::xd#2, bitmap_line_ydxd::@2/bitmap_line_ydxd::xd#5 ) - bitmap_line_ydxd::e#5 = phi( bitmap_line_ydxd/bitmap_line_ydxd::e#0, bitmap_line_ydxd::@2/bitmap_line_ydxd::e#6 ) - bitmap_line_ydxd::c#2 = phi( bitmap_line_ydxd/bitmap_line_ydxd::c#3, bitmap_line_ydxd::@2/bitmap_line_ydxd::c#4 ) - bitmap_line_ydxd::y#4 = phi( bitmap_line_ydxd/bitmap_line_ydxd::y#7, bitmap_line_ydxd::@2/bitmap_line_ydxd::y#6 ) - bitmap_line_ydxd::x#3 = phi( bitmap_line_ydxd/bitmap_line_ydxd::x#5, bitmap_line_ydxd::@2/bitmap_line_ydxd::x#6 ) - bitmap_plot::x#3 = bitmap_line_ydxd::x#3 - bitmap_plot::y#3 = bitmap_line_ydxd::y#4 - bitmap_plot::c#4 = bitmap_line_ydxd::c#2 - call bitmap_plot - to:bitmap_line_ydxd::@4 -bitmap_line_ydxd::@4: scope:[bitmap_line_ydxd] from bitmap_line_ydxd::@1 - bitmap_line_ydxd::c#6 = phi( bitmap_line_ydxd::@1/bitmap_line_ydxd::c#2 ) - bitmap_line_ydxd::x#7 = phi( bitmap_line_ydxd::@1/bitmap_line_ydxd::x#3 ) - bitmap_line_ydxd::y1#4 = phi( bitmap_line_ydxd::@1/bitmap_line_ydxd::y1#5 ) - bitmap_line_ydxd::yd#2 = phi( bitmap_line_ydxd::@1/bitmap_line_ydxd::yd#4 ) - bitmap_line_ydxd::xd#3 = phi( bitmap_line_ydxd::@1/bitmap_line_ydxd::xd#4 ) - bitmap_line_ydxd::e#3 = phi( bitmap_line_ydxd::@1/bitmap_line_ydxd::e#5 ) - bitmap_line_ydxd::y#5 = phi( bitmap_line_ydxd::@1/bitmap_line_ydxd::y#4 ) - bitmap_line_ydxd::y#2 = bitmap_line_ydxd::y#5 - bitmap_line_ydxd::y#3 = ++ bitmap_line_ydxd::y#2 - bitmap_line_ydxd::$2 = bitmap_line_ydxd::e#3 + bitmap_line_ydxd::xd#3 - bitmap_line_ydxd::e#1 = bitmap_line_ydxd::$2 - bitmap_line_ydxd::$3 = bitmap_line_ydxd::yd#2 < bitmap_line_ydxd::e#1 - bitmap_line_ydxd::$4 = ! bitmap_line_ydxd::$3 - if(bitmap_line_ydxd::$4) goto bitmap_line_ydxd::@2 - to:bitmap_line_ydxd::@3 -bitmap_line_ydxd::@2: scope:[bitmap_line_ydxd] from bitmap_line_ydxd::@3 bitmap_line_ydxd::@4 - bitmap_line_ydxd::yd#6 = phi( bitmap_line_ydxd::@3/bitmap_line_ydxd::yd#3, bitmap_line_ydxd::@4/bitmap_line_ydxd::yd#2 ) - bitmap_line_ydxd::xd#5 = phi( bitmap_line_ydxd::@3/bitmap_line_ydxd::xd#6, bitmap_line_ydxd::@4/bitmap_line_ydxd::xd#3 ) - bitmap_line_ydxd::e#6 = phi( bitmap_line_ydxd::@3/bitmap_line_ydxd::e#2, bitmap_line_ydxd::@4/bitmap_line_ydxd::e#1 ) - bitmap_line_ydxd::c#4 = phi( bitmap_line_ydxd::@3/bitmap_line_ydxd::c#5, bitmap_line_ydxd::@4/bitmap_line_ydxd::c#6 ) - bitmap_line_ydxd::x#6 = phi( bitmap_line_ydxd::@3/bitmap_line_ydxd::x#2, bitmap_line_ydxd::@4/bitmap_line_ydxd::x#7 ) - bitmap_line_ydxd::y#6 = phi( bitmap_line_ydxd::@3/bitmap_line_ydxd::y#8, bitmap_line_ydxd::@4/bitmap_line_ydxd::y#3 ) - bitmap_line_ydxd::y1#2 = phi( bitmap_line_ydxd::@3/bitmap_line_ydxd::y1#3, bitmap_line_ydxd::@4/bitmap_line_ydxd::y1#4 ) - bitmap_line_ydxd::$6 = bitmap_line_ydxd::y1#2 + 1 - bitmap_line_ydxd::$7 = bitmap_line_ydxd::y#6 != bitmap_line_ydxd::$6 - if(bitmap_line_ydxd::$7) goto bitmap_line_ydxd::@1 - to:bitmap_line_ydxd::@return -bitmap_line_ydxd::@3: scope:[bitmap_line_ydxd] from bitmap_line_ydxd::@4 - bitmap_line_ydxd::xd#6 = phi( bitmap_line_ydxd::@4/bitmap_line_ydxd::xd#3 ) - bitmap_line_ydxd::c#5 = phi( bitmap_line_ydxd::@4/bitmap_line_ydxd::c#6 ) - bitmap_line_ydxd::y#8 = phi( bitmap_line_ydxd::@4/bitmap_line_ydxd::y#3 ) - bitmap_line_ydxd::y1#3 = phi( bitmap_line_ydxd::@4/bitmap_line_ydxd::y1#4 ) - bitmap_line_ydxd::yd#3 = phi( bitmap_line_ydxd::@4/bitmap_line_ydxd::yd#2 ) - bitmap_line_ydxd::e#4 = phi( bitmap_line_ydxd::@4/bitmap_line_ydxd::e#1 ) - bitmap_line_ydxd::x#4 = phi( bitmap_line_ydxd::@4/bitmap_line_ydxd::x#7 ) - bitmap_line_ydxd::x#2 = -- bitmap_line_ydxd::x#4 - bitmap_line_ydxd::$5 = bitmap_line_ydxd::e#4 - bitmap_line_ydxd::yd#3 - bitmap_line_ydxd::e#2 = bitmap_line_ydxd::$5 - to:bitmap_line_ydxd::@2 -bitmap_line_ydxd::@return: scope:[bitmap_line_ydxd] from bitmap_line_ydxd::@2 - return - to:@return - -unsigned int divr16u(unsigned int dividend , unsigned int divisor , unsigned int rem) -divr16u: scope:[divr16u] from modr16u - divr16u::divisor#5 = phi( modr16u/divr16u::divisor#0 ) - divr16u::dividend#4 = phi( modr16u/divr16u::dividend#1 ) - divr16u::rem#9 = phi( modr16u/divr16u::rem#3 ) - divr16u::quotient#0 = 0 - divr16u::i#0 = 0 - to:divr16u::@1 -divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 - divr16u::i#5 = phi( divr16u/divr16u::i#0, divr16u::@3/divr16u::i#1 ) - divr16u::divisor#3 = phi( divr16u/divr16u::divisor#5, divr16u::@3/divr16u::divisor#6 ) - divr16u::quotient#6 = phi( divr16u/divr16u::quotient#0, divr16u::@3/divr16u::quotient#8 ) - divr16u::dividend#2 = phi( divr16u/divr16u::dividend#4, divr16u::@3/divr16u::dividend#5 ) - divr16u::rem#4 = phi( divr16u/divr16u::rem#9, divr16u::@3/divr16u::rem#10 ) - divr16u::$0 = divr16u::rem#4 << 1 - divr16u::rem#0 = divr16u::$0 - divr16u::$1 = byte1 divr16u::dividend#2 - divr16u::$2 = divr16u::$1 & $80 - divr16u::$3 = divr16u::$2 != 0 - divr16u::$4 = ! divr16u::$3 - if(divr16u::$4) goto divr16u::@2 - to:divr16u::@4 -divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 - divr16u::i#3 = phi( divr16u::@1/divr16u::i#5, divr16u::@4/divr16u::i#6 ) - divr16u::divisor#1 = phi( divr16u::@1/divr16u::divisor#3, divr16u::@4/divr16u::divisor#4 ) - divr16u::rem#5 = phi( divr16u::@1/divr16u::rem#0, divr16u::@4/divr16u::rem#1 ) - divr16u::quotient#3 = phi( divr16u::@1/divr16u::quotient#6, divr16u::@4/divr16u::quotient#7 ) - divr16u::dividend#3 = phi( divr16u::@1/divr16u::dividend#2, divr16u::@4/divr16u::dividend#6 ) - divr16u::$6 = divr16u::dividend#3 << 1 - divr16u::dividend#0 = divr16u::$6 - divr16u::$7 = divr16u::quotient#3 << 1 - divr16u::quotient#1 = divr16u::$7 - divr16u::$8 = divr16u::rem#5 >= divr16u::divisor#1 - divr16u::$9 = ! divr16u::$8 - if(divr16u::$9) goto divr16u::@3 - to:divr16u::@5 -divr16u::@4: scope:[divr16u] from divr16u::@1 - divr16u::i#6 = phi( divr16u::@1/divr16u::i#5 ) - divr16u::divisor#4 = phi( divr16u::@1/divr16u::divisor#3 ) - divr16u::quotient#7 = phi( divr16u::@1/divr16u::quotient#6 ) - divr16u::dividend#6 = phi( divr16u::@1/divr16u::dividend#2 ) - divr16u::rem#6 = phi( divr16u::@1/divr16u::rem#0 ) - divr16u::$5 = divr16u::rem#6 | 1 - divr16u::rem#1 = divr16u::$5 - to:divr16u::@2 -divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 - divr16u::divisor#6 = phi( divr16u::@2/divr16u::divisor#1, divr16u::@5/divr16u::divisor#2 ) - divr16u::quotient#8 = phi( divr16u::@2/divr16u::quotient#1, divr16u::@5/divr16u::quotient#2 ) - divr16u::dividend#5 = phi( divr16u::@2/divr16u::dividend#0, divr16u::@5/divr16u::dividend#7 ) - divr16u::rem#10 = phi( divr16u::@2/divr16u::rem#5, divr16u::@5/divr16u::rem#2 ) - divr16u::i#2 = phi( divr16u::@2/divr16u::i#3, divr16u::@5/divr16u::i#4 ) - divr16u::i#1 = divr16u::i#2 + rangenext(0,$f) - divr16u::$11 = divr16u::i#1 != rangelast(0,$f) - if(divr16u::$11) goto divr16u::@1 - to:divr16u::@6 -divr16u::@5: scope:[divr16u] from divr16u::@2 - divr16u::dividend#7 = phi( divr16u::@2/divr16u::dividend#0 ) - divr16u::i#4 = phi( divr16u::@2/divr16u::i#3 ) - divr16u::divisor#2 = phi( divr16u::@2/divr16u::divisor#1 ) - divr16u::rem#7 = phi( divr16u::@2/divr16u::rem#5 ) - divr16u::quotient#4 = phi( divr16u::@2/divr16u::quotient#1 ) - divr16u::quotient#2 = ++ divr16u::quotient#4 - divr16u::$10 = divr16u::rem#7 - divr16u::divisor#2 - divr16u::rem#2 = divr16u::$10 - to:divr16u::@3 -divr16u::@6: scope:[divr16u] from divr16u::@3 - divr16u::quotient#5 = phi( divr16u::@3/divr16u::quotient#8 ) - divr16u::rem#8 = phi( divr16u::@3/divr16u::rem#10 ) - rem16u#0 = divr16u::rem#8 - divr16u::return#0 = divr16u::quotient#5 - to:divr16u::@return -divr16u::@return: scope:[divr16u] from divr16u::@6 - rem16u#12 = phi( divr16u::@6/rem16u#0 ) - divr16u::return#3 = phi( divr16u::@6/divr16u::return#0 ) - divr16u::return#1 = divr16u::return#3 - rem16u#1 = rem16u#12 - return - to:@return - -unsigned int modr16u(unsigned int dividend , unsigned int divisor , unsigned int rem) -modr16u: scope:[modr16u] from main::@35 main::@37 main::@39 main::@41 - rem16u#22 = phi( main::@35/rem16u#23, main::@37/rem16u#24, main::@39/rem16u#25, main::@41/rem16u#26 ) - modr16u::rem#4 = phi( main::@35/modr16u::rem#0, main::@37/modr16u::rem#1, main::@39/modr16u::rem#2, main::@41/modr16u::rem#3 ) - modr16u::divisor#4 = phi( main::@35/modr16u::divisor#0, main::@37/modr16u::divisor#1, main::@39/modr16u::divisor#2, main::@41/modr16u::divisor#3 ) - modr16u::dividend#4 = phi( main::@35/modr16u::dividend#0, main::@37/modr16u::dividend#1, main::@39/modr16u::dividend#2, main::@41/modr16u::dividend#3 ) - divr16u::dividend#1 = modr16u::dividend#4 - divr16u::divisor#0 = modr16u::divisor#4 - divr16u::rem#3 = modr16u::rem#4 - call divr16u - divr16u::return#2 = divr16u::return#1 - to:modr16u::@1 -modr16u::@1: scope:[modr16u] from modr16u - rem16u#13 = phi( modr16u/rem16u#1 ) - rem16u#2 = rem16u#13 - modr16u::return#0 = rem16u#2 - to:modr16u::@return -modr16u::@return: scope:[modr16u] from modr16u::@1 - rem16u#14 = phi( modr16u::@1/rem16u#2 ) - modr16u::return#6 = phi( modr16u::@1/modr16u::return#0 ) - modr16u::return#1 = modr16u::return#6 - rem16u#3 = rem16u#14 - return - to:@return - -void main() -main: scope:[main] from __start::@1 - rem16u#88 = phi( __start::@1/rem16u#28 ) - rand_state#87 = phi( __start::@1/rand_state#29 ) - CONIO_SCREEN_TEXT#60 = phi( __start::@1/CONIO_SCREEN_TEXT#36 ) - CONIO_SCREEN_BANK#53 = phi( __start::@1/CONIO_SCREEN_BANK#30 ) - memcpy_in_vram::dest_bank#1 = 1 - memcpy_in_vram::dest#1 = (void *)(char *)$f000 - memcpy_in_vram::dest_increment#1 = VERA_INC_1 - memcpy_in_vram::src_bank#1 = 0 - memcpy_in_vram::src#1 = (void *)(char *)$f800 - memcpy_in_vram::src_increment#1 = VERA_INC_1 - memcpy_in_vram::num#1 = $100*8 - call memcpy_in_vram - to:main::@17 -main::@17: scope:[main] from main - rem16u#87 = phi( main/rem16u#88 ) - rand_state#86 = phi( main/rand_state#87 ) - CONIO_SCREEN_TEXT#52 = phi( main/CONIO_SCREEN_TEXT#60 ) - CONIO_SCREEN_BANK#46 = phi( main/CONIO_SCREEN_BANK#53 ) - vera_layer_mode_tile::layer#1 = 1 - vera_layer_mode_tile::mapbase_address#2 = $14000 - vera_layer_mode_tile::tilebase_address#2 = $1f000 - vera_layer_mode_tile::mapwidth#1 = $80 - vera_layer_mode_tile::mapheight#1 = $40 - vera_layer_mode_tile::tilewidth#1 = 8 - vera_layer_mode_tile::tileheight#1 = 8 - vera_layer_mode_tile::color_depth#1 = 1 - call vera_layer_mode_tile - to:main::@18 -main::@18: scope:[main] from main::@17 - rem16u#86 = phi( main::@17/rem16u#87 ) - rand_state#85 = phi( main::@17/rand_state#86 ) - CONIO_SCREEN_TEXT#42 = phi( main::@17/CONIO_SCREEN_TEXT#52 ) - CONIO_SCREEN_BANK#37 = phi( main::@17/CONIO_SCREEN_BANK#46 ) - vera_layer_mode_bitmap::layer#0 = 0 - vera_layer_mode_bitmap::bitmap_address#1 = (unsigned long)0 - vera_layer_mode_bitmap::mapwidth#0 = $140 - vera_layer_mode_bitmap::color_depth#0 = 8 - call vera_layer_mode_bitmap - to:main::@19 -main::@19: scope:[main] from main::@18 - rem16u#85 = phi( main::@18/rem16u#86 ) - rand_state#83 = phi( main::@18/rand_state#85 ) - CONIO_SCREEN_TEXT#33 = phi( main::@18/CONIO_SCREEN_TEXT#42 ) - CONIO_SCREEN_BANK#27 = phi( main::@18/CONIO_SCREEN_BANK#37 ) - screenlayer::layer#1 = 1 - call screenlayer - to:main::@20 -main::@20: scope:[main] from main::@19 - rem16u#83 = phi( main::@19/rem16u#85 ) - rand_state#81 = phi( main::@19/rand_state#83 ) - CONIO_SCREEN_TEXT#18 = phi( main::@19/CONIO_SCREEN_TEXT#3 ) - CONIO_SCREEN_BANK#16 = phi( main::@19/CONIO_SCREEN_BANK#3 ) - CONIO_SCREEN_BANK#4 = CONIO_SCREEN_BANK#16 - CONIO_SCREEN_TEXT#4 = CONIO_SCREEN_TEXT#18 - main::textcolor1_color#0 = WHITE - to:main::textcolor1 -main::textcolor1: scope:[main] from main::@20 - rem16u#81 = phi( main::@20/rem16u#83 ) - rand_state#79 = phi( main::@20/rand_state#81 ) - CONIO_SCREEN_BANK#84 = phi( main::@20/CONIO_SCREEN_BANK#4 ) - CONIO_SCREEN_TEXT#78 = phi( main::@20/CONIO_SCREEN_TEXT#4 ) - main::textcolor1_color#1 = phi( main::@20/main::textcolor1_color#0 ) - vera_layer_set_textcolor::layer#1 = conio_screen_layer - vera_layer_set_textcolor::color#1 = main::textcolor1_color#1 - call vera_layer_set_textcolor - vera_layer_set_textcolor::return#3 = vera_layer_set_textcolor::return#1 - to:main::@21 -main::@21: scope:[main] from main::textcolor1 - rem16u#79 = phi( main::textcolor1/rem16u#81 ) - rand_state#77 = phi( main::textcolor1/rand_state#79 ) - CONIO_SCREEN_BANK#81 = phi( main::textcolor1/CONIO_SCREEN_BANK#84 ) - CONIO_SCREEN_TEXT#70 = phi( main::textcolor1/CONIO_SCREEN_TEXT#78 ) - to:main::@8 -main::@8: scope:[main] from main::@21 - rem16u#77 = phi( main::@21/rem16u#79 ) - rand_state#75 = phi( main::@21/rand_state#77 ) - CONIO_SCREEN_BANK#77 = phi( main::@21/CONIO_SCREEN_BANK#81 ) - CONIO_SCREEN_TEXT#61 = phi( main::@21/CONIO_SCREEN_TEXT#70 ) - main::bgcolor1_color#0 = BLACK - to:main::bgcolor1 -main::bgcolor1: scope:[main] from main::@8 - rem16u#75 = phi( main::@8/rem16u#77 ) - rand_state#73 = phi( main::@8/rand_state#75 ) - CONIO_SCREEN_BANK#72 = phi( main::@8/CONIO_SCREEN_BANK#77 ) - CONIO_SCREEN_TEXT#53 = phi( main::@8/CONIO_SCREEN_TEXT#61 ) - main::bgcolor1_color#1 = phi( main::@8/main::bgcolor1_color#0 ) - vera_layer_set_backcolor::layer#1 = conio_screen_layer - vera_layer_set_backcolor::color#1 = main::bgcolor1_color#1 - call vera_layer_set_backcolor - vera_layer_set_backcolor::return#3 = vera_layer_set_backcolor::return#1 - to:main::@22 -main::@22: scope:[main] from main::bgcolor1 - rem16u#73 = phi( main::bgcolor1/rem16u#75 ) - rand_state#71 = phi( main::bgcolor1/rand_state#73 ) - CONIO_SCREEN_BANK#67 = phi( main::bgcolor1/CONIO_SCREEN_BANK#72 ) - CONIO_SCREEN_TEXT#43 = phi( main::bgcolor1/CONIO_SCREEN_TEXT#53 ) - to:main::@9 -main::@9: scope:[main] from main::@22 - rem16u#71 = phi( main::@22/rem16u#73 ) - rand_state#69 = phi( main::@22/rand_state#71 ) - CONIO_SCREEN_BANK#59 = phi( main::@22/CONIO_SCREEN_BANK#67 ) - CONIO_SCREEN_TEXT#26 = phi( main::@22/CONIO_SCREEN_TEXT#43 ) - call clrscr - to:main::@23 -main::@23: scope:[main] from main::@9 - CONIO_SCREEN_BANK#116 = phi( main::@9/CONIO_SCREEN_BANK#59 ) - CONIO_SCREEN_TEXT#123 = phi( main::@9/CONIO_SCREEN_TEXT#26 ) - rem16u#69 = phi( main::@9/rem16u#71 ) - rand_state#67 = phi( main::@9/rand_state#69 ) - gotoxy::x#3 = 0 - gotoxy::y#3 = $19 - call gotoxy - to:main::@24 -main::@24: scope:[main] from main::@23 - CONIO_SCREEN_BANK#115 = phi( main::@23/CONIO_SCREEN_BANK#116 ) - CONIO_SCREEN_TEXT#122 = phi( main::@23/CONIO_SCREEN_TEXT#123 ) - rem16u#67 = phi( main::@23/rem16u#69 ) - rand_state#65 = phi( main::@23/rand_state#67 ) - printf_str::putc#0 = &cputc - printf_str::s#1 = main::s - call printf_str - to:main::@25 -main::@25: scope:[main] from main::@24 - CONIO_SCREEN_BANK#114 = phi( main::@24/CONIO_SCREEN_BANK#115 ) - CONIO_SCREEN_TEXT#121 = phi( main::@24/CONIO_SCREEN_TEXT#122 ) - rem16u#65 = phi( main::@24/rem16u#67 ) - rand_state#63 = phi( main::@24/rand_state#65 ) - printf_str::putc#1 = &cputc - printf_str::s#2 = main::s1 - call printf_str - to:main::@26 -main::@26: scope:[main] from main::@25 - CONIO_SCREEN_BANK#113 = phi( main::@25/CONIO_SCREEN_BANK#114 ) - CONIO_SCREEN_TEXT#120 = phi( main::@25/CONIO_SCREEN_TEXT#121 ) - rem16u#63 = phi( main::@25/rem16u#65 ) - rand_state#61 = phi( main::@25/rand_state#63 ) - printf_str::putc#2 = &cputc - printf_str::s#3 = main::s2 - call printf_str - to:main::@27 -main::@27: scope:[main] from main::@26 - CONIO_SCREEN_BANK#111 = phi( main::@26/CONIO_SCREEN_BANK#113 ) - CONIO_SCREEN_TEXT#118 = phi( main::@26/CONIO_SCREEN_TEXT#120 ) - rem16u#61 = phi( main::@26/rem16u#63 ) - rand_state#59 = phi( main::@26/rand_state#61 ) - printf_str::putc#3 = &cputc - printf_str::s#4 = main::s3 - call printf_str - to:main::@28 -main::@28: scope:[main] from main::@27 - CONIO_SCREEN_BANK#109 = phi( main::@27/CONIO_SCREEN_BANK#111 ) - CONIO_SCREEN_TEXT#116 = phi( main::@27/CONIO_SCREEN_TEXT#118 ) - rem16u#59 = phi( main::@27/rem16u#61 ) - rand_state#56 = phi( main::@27/rand_state#59 ) - main::vera_layer_show1_layer#0 = 0 - to:main::vera_layer_show1 -main::vera_layer_show1: scope:[main] from main::@28 - CONIO_SCREEN_BANK#107 = phi( main::@28/CONIO_SCREEN_BANK#109 ) - CONIO_SCREEN_TEXT#114 = phi( main::@28/CONIO_SCREEN_TEXT#116 ) - rem16u#56 = phi( main::@28/rem16u#59 ) - rand_state#52 = phi( main::@28/rand_state#56 ) - main::vera_layer_show1_layer#1 = phi( main::@28/main::vera_layer_show1_layer#0 ) - *VERA_DC_VIDEO = *VERA_DC_VIDEO | vera_layer_enable[main::vera_layer_show1_layer#1] - to:main::@10 -main::@10: scope:[main] from main::vera_layer_show1 - CONIO_SCREEN_BANK#105 = phi( main::vera_layer_show1/CONIO_SCREEN_BANK#107 ) - CONIO_SCREEN_TEXT#112 = phi( main::vera_layer_show1/CONIO_SCREEN_TEXT#114 ) - rem16u#52 = phi( main::vera_layer_show1/rem16u#56 ) - rand_state#50 = phi( main::vera_layer_show1/rand_state#52 ) - bitmap_init::layer#0 = 0 - bitmap_init::address#0 = 0 - call bitmap_init - to:main::@29 -main::@29: scope:[main] from main::@10 - CONIO_SCREEN_BANK#103 = phi( main::@10/CONIO_SCREEN_BANK#105 ) - CONIO_SCREEN_TEXT#110 = phi( main::@10/CONIO_SCREEN_TEXT#112 ) - rem16u#50 = phi( main::@10/rem16u#52 ) - rand_state#48 = phi( main::@10/rand_state#50 ) - call bitmap_clear - to:main::@30 -main::@30: scope:[main] from main::@29 - CONIO_SCREEN_BANK#101 = phi( main::@29/CONIO_SCREEN_BANK#103 ) - CONIO_SCREEN_TEXT#108 = phi( main::@29/CONIO_SCREEN_TEXT#110 ) - rem16u#48 = phi( main::@29/rem16u#50 ) - rand_state#46 = phi( main::@29/rand_state#48 ) - gotoxy::x#4 = 0 - gotoxy::y#4 = $1d - call gotoxy - to:main::@31 -main::@31: scope:[main] from main::@30 - CONIO_SCREEN_BANK#99 = phi( main::@30/CONIO_SCREEN_BANK#101 ) - CONIO_SCREEN_TEXT#106 = phi( main::@30/CONIO_SCREEN_TEXT#108 ) - rem16u#46 = phi( main::@30/rem16u#48 ) - rand_state#44 = phi( main::@30/rand_state#46 ) - main::textcolor2_color#0 = YELLOW - to:main::textcolor2 -main::textcolor2: scope:[main] from main::@31 - CONIO_SCREEN_BANK#97 = phi( main::@31/CONIO_SCREEN_BANK#99 ) - CONIO_SCREEN_TEXT#104 = phi( main::@31/CONIO_SCREEN_TEXT#106 ) - rem16u#44 = phi( main::@31/rem16u#46 ) - rand_state#42 = phi( main::@31/rand_state#44 ) - main::textcolor2_color#1 = phi( main::@31/main::textcolor2_color#0 ) - vera_layer_set_textcolor::layer#2 = conio_screen_layer - vera_layer_set_textcolor::color#2 = main::textcolor2_color#1 - call vera_layer_set_textcolor - vera_layer_set_textcolor::return#4 = vera_layer_set_textcolor::return#1 - to:main::@32 -main::@32: scope:[main] from main::textcolor2 - CONIO_SCREEN_BANK#95 = phi( main::textcolor2/CONIO_SCREEN_BANK#97 ) - CONIO_SCREEN_TEXT#102 = phi( main::textcolor2/CONIO_SCREEN_TEXT#104 ) - rem16u#42 = phi( main::textcolor2/rem16u#44 ) - rand_state#40 = phi( main::textcolor2/rand_state#42 ) - to:main::@11 -main::@11: scope:[main] from main::@32 - CONIO_SCREEN_BANK#93 = phi( main::@32/CONIO_SCREEN_BANK#95 ) - CONIO_SCREEN_TEXT#99 = phi( main::@32/CONIO_SCREEN_TEXT#102 ) - rem16u#39 = phi( main::@32/rem16u#42 ) - rand_state#38 = phi( main::@32/rand_state#40 ) - printf_str::putc#4 = &cputc - printf_str::s#5 = main::s4 - call printf_str - to:main::@33 -main::@33: scope:[main] from main::@11 - CONIO_SCREEN_BANK#91 = phi( main::@11/CONIO_SCREEN_BANK#93 ) - CONIO_SCREEN_TEXT#96 = phi( main::@11/CONIO_SCREEN_TEXT#99 ) - rem16u#36 = phi( main::@11/rem16u#39 ) - rand_state#35 = phi( main::@11/rand_state#38 ) - to:main::@1 -main::@1: scope:[main] from main::@33 main::@44 - CONIO_SCREEN_BANK#90 = phi( main::@33/CONIO_SCREEN_BANK#91, main::@44/CONIO_SCREEN_BANK#92 ) - CONIO_SCREEN_TEXT#94 = phi( main::@33/CONIO_SCREEN_TEXT#96, main::@44/CONIO_SCREEN_TEXT#97 ) - rem16u#34 = phi( main::@33/rem16u#36, main::@44/rem16u#37 ) - rand_state#33 = phi( main::@33/rand_state#35, main::@44/rand_state#36 ) - call kbhit - kbhit::return#2 = kbhit::return#1 - to:main::@34 -main::@34: scope:[main] from main::@1 - CONIO_SCREEN_BANK#89 = phi( main::@1/CONIO_SCREEN_BANK#90 ) - CONIO_SCREEN_TEXT#91 = phi( main::@1/CONIO_SCREEN_TEXT#94 ) - rem16u#32 = phi( main::@1/rem16u#34 ) - rand_state#30 = phi( main::@1/rand_state#33 ) - kbhit::return#5 = phi( main::@1/kbhit::return#2 ) - main::$30 = kbhit::return#5 - main::$48 = 0 != main::$30 - main::$31 = ! main::$48 - if(main::$31) goto main::@2 - to:main::@3 -main::@2: scope:[main] from main::@34 - CONIO_SCREEN_BANK#112 = phi( main::@34/CONIO_SCREEN_BANK#89 ) - CONIO_SCREEN_TEXT#119 = phi( main::@34/CONIO_SCREEN_TEXT#91 ) - rem16u#29 = phi( main::@34/rem16u#32 ) - rand_state#23 = phi( main::@34/rand_state#30 ) - call rand - rand::return#2 = rand::return#1 - to:main::@35 -main::@35: scope:[main] from main::@2 - CONIO_SCREEN_BANK#110 = phi( main::@2/CONIO_SCREEN_BANK#112 ) - CONIO_SCREEN_TEXT#117 = phi( main::@2/CONIO_SCREEN_TEXT#119 ) - rem16u#23 = phi( main::@2/rem16u#29 ) - rand_state#15 = phi( main::@2/rand_state#3 ) - rand::return#8 = phi( main::@2/rand::return#2 ) - main::$32 = rand::return#8 - rand_state#4 = rand_state#15 - modr16u::dividend#0 = main::$32 - modr16u::divisor#0 = $140 - modr16u::rem#0 = 0 - call modr16u - modr16u::return#2 = modr16u::return#1 - to:main::@36 -main::@36: scope:[main] from main::@35 - CONIO_SCREEN_BANK#108 = phi( main::@35/CONIO_SCREEN_BANK#110 ) - CONIO_SCREEN_TEXT#115 = phi( main::@35/CONIO_SCREEN_TEXT#117 ) - rand_state#24 = phi( main::@35/rand_state#4 ) - rem16u#15 = phi( main::@35/rem16u#3 ) - modr16u::return#7 = phi( main::@35/modr16u::return#2 ) - main::$33 = modr16u::return#7 - rem16u#4 = rem16u#15 - call rand - rand::return#3 = rand::return#1 - to:main::@37 -main::@37: scope:[main] from main::@36 - CONIO_SCREEN_BANK#106 = phi( main::@36/CONIO_SCREEN_BANK#108 ) - CONIO_SCREEN_TEXT#113 = phi( main::@36/CONIO_SCREEN_TEXT#115 ) - rem16u#24 = phi( main::@36/rem16u#4 ) - rand_state#16 = phi( main::@36/rand_state#3 ) - rand::return#9 = phi( main::@36/rand::return#3 ) - main::$34 = rand::return#9 - rand_state#5 = rand_state#16 - modr16u::dividend#1 = main::$34 - modr16u::divisor#1 = $140 - modr16u::rem#1 = 0 - call modr16u - modr16u::return#3 = modr16u::return#1 - to:main::@38 -main::@38: scope:[main] from main::@37 - CONIO_SCREEN_BANK#104 = phi( main::@37/CONIO_SCREEN_BANK#106 ) - CONIO_SCREEN_TEXT#111 = phi( main::@37/CONIO_SCREEN_TEXT#113 ) - rand_state#25 = phi( main::@37/rand_state#5 ) - rem16u#16 = phi( main::@37/rem16u#3 ) - modr16u::return#8 = phi( main::@37/modr16u::return#3 ) - main::$35 = modr16u::return#8 - rem16u#5 = rem16u#16 - call rand - rand::return#4 = rand::return#1 - to:main::@39 -main::@39: scope:[main] from main::@38 - CONIO_SCREEN_BANK#102 = phi( main::@38/CONIO_SCREEN_BANK#104 ) - CONIO_SCREEN_TEXT#109 = phi( main::@38/CONIO_SCREEN_TEXT#111 ) - rem16u#25 = phi( main::@38/rem16u#5 ) - rand_state#17 = phi( main::@38/rand_state#3 ) - rand::return#10 = phi( main::@38/rand::return#4 ) - main::$36 = rand::return#10 - rand_state#6 = rand_state#17 - modr16u::dividend#2 = main::$36 - modr16u::divisor#2 = $c8 - modr16u::rem#2 = 0 - call modr16u - modr16u::return#4 = modr16u::return#1 - to:main::@40 -main::@40: scope:[main] from main::@39 - CONIO_SCREEN_BANK#100 = phi( main::@39/CONIO_SCREEN_BANK#102 ) - CONIO_SCREEN_TEXT#107 = phi( main::@39/CONIO_SCREEN_TEXT#109 ) - rand_state#26 = phi( main::@39/rand_state#6 ) - rem16u#17 = phi( main::@39/rem16u#3 ) - modr16u::return#9 = phi( main::@39/modr16u::return#4 ) - main::$37 = modr16u::return#9 - rem16u#6 = rem16u#17 - call rand - rand::return#5 = rand::return#1 - to:main::@41 -main::@41: scope:[main] from main::@40 - CONIO_SCREEN_BANK#98 = phi( main::@40/CONIO_SCREEN_BANK#100 ) - CONIO_SCREEN_TEXT#105 = phi( main::@40/CONIO_SCREEN_TEXT#107 ) - rem16u#26 = phi( main::@40/rem16u#6 ) - rand_state#18 = phi( main::@40/rand_state#3 ) - rand::return#11 = phi( main::@40/rand::return#5 ) - main::$38 = rand::return#11 - rand_state#7 = rand_state#18 - modr16u::dividend#3 = main::$38 - modr16u::divisor#3 = $c8 - modr16u::rem#3 = 0 - call modr16u - modr16u::return#5 = modr16u::return#1 - to:main::@42 -main::@42: scope:[main] from main::@41 - CONIO_SCREEN_BANK#96 = phi( main::@41/CONIO_SCREEN_BANK#98 ) - CONIO_SCREEN_TEXT#103 = phi( main::@41/CONIO_SCREEN_TEXT#105 ) - rand_state#27 = phi( main::@41/rand_state#7 ) - rem16u#18 = phi( main::@41/rem16u#3 ) - modr16u::return#10 = phi( main::@41/modr16u::return#5 ) - main::$39 = modr16u::return#10 - rem16u#7 = rem16u#18 - call rand - rand::return#6 = rand::return#1 - to:main::@43 -main::@43: scope:[main] from main::@42 - CONIO_SCREEN_BANK#94 = phi( main::@42/CONIO_SCREEN_BANK#96 ) - CONIO_SCREEN_TEXT#100 = phi( main::@42/CONIO_SCREEN_TEXT#103 ) - rem16u#40 = phi( main::@42/rem16u#7 ) - rand_state#19 = phi( main::@42/rand_state#3 ) - rand::return#12 = phi( main::@42/rand::return#6 ) - main::$40 = rand::return#12 - rand_state#8 = rand_state#19 - main::$41 = main::$40 & $ff - bitmap_line::x0#0 = main::$33 - bitmap_line::x1#0 = main::$35 - bitmap_line::y0#0 = main::$37 - bitmap_line::y1#0 = main::$39 - bitmap_line::c#0 = main::$41 - call bitmap_line - to:main::@44 -main::@44: scope:[main] from main::@43 - CONIO_SCREEN_BANK#92 = phi( main::@43/CONIO_SCREEN_BANK#94 ) - CONIO_SCREEN_TEXT#97 = phi( main::@43/CONIO_SCREEN_TEXT#100 ) - rem16u#37 = phi( main::@43/rem16u#40 ) - rand_state#36 = phi( main::@43/rand_state#8 ) - to:main::@1 -main::@3: scope:[main] from main::@34 - rem16u#84 = phi( main::@34/rem16u#32 ) - rand_state#84 = phi( main::@34/rand_state#30 ) - CONIO_SCREEN_BANK#87 = phi( main::@34/CONIO_SCREEN_BANK#89 ) - CONIO_SCREEN_TEXT#86 = phi( main::@34/CONIO_SCREEN_TEXT#91 ) - main::textcolor3_color#0 = WHITE - to:main::textcolor3 -main::textcolor3: scope:[main] from main::@3 - rem16u#82 = phi( main::@3/rem16u#84 ) - rand_state#82 = phi( main::@3/rand_state#84 ) - CONIO_SCREEN_BANK#85 = phi( main::@3/CONIO_SCREEN_BANK#87 ) - CONIO_SCREEN_TEXT#79 = phi( main::@3/CONIO_SCREEN_TEXT#86 ) - main::textcolor3_color#1 = phi( main::@3/main::textcolor3_color#0 ) - vera_layer_set_textcolor::layer#3 = conio_screen_layer - vera_layer_set_textcolor::color#3 = main::textcolor3_color#1 - call vera_layer_set_textcolor - vera_layer_set_textcolor::return#5 = vera_layer_set_textcolor::return#1 - to:main::@45 -main::@45: scope:[main] from main::textcolor3 - rem16u#80 = phi( main::textcolor3/rem16u#82 ) - rand_state#80 = phi( main::textcolor3/rand_state#82 ) - CONIO_SCREEN_BANK#82 = phi( main::textcolor3/CONIO_SCREEN_BANK#85 ) - CONIO_SCREEN_TEXT#71 = phi( main::textcolor3/CONIO_SCREEN_TEXT#79 ) - to:main::@12 -main::@12: scope:[main] from main::@45 - rem16u#78 = phi( main::@45/rem16u#80 ) - rand_state#78 = phi( main::@45/rand_state#80 ) - CONIO_SCREEN_BANK#78 = phi( main::@45/CONIO_SCREEN_BANK#82 ) - CONIO_SCREEN_TEXT#62 = phi( main::@45/CONIO_SCREEN_TEXT#71 ) - main::bgcolor2_color#0 = BLACK - to:main::bgcolor2 -main::bgcolor2: scope:[main] from main::@12 - rem16u#76 = phi( main::@12/rem16u#78 ) - rand_state#76 = phi( main::@12/rand_state#78 ) - CONIO_SCREEN_BANK#73 = phi( main::@12/CONIO_SCREEN_BANK#78 ) - CONIO_SCREEN_TEXT#54 = phi( main::@12/CONIO_SCREEN_TEXT#62 ) - main::bgcolor2_color#1 = phi( main::@12/main::bgcolor2_color#0 ) - vera_layer_set_backcolor::layer#2 = conio_screen_layer - vera_layer_set_backcolor::color#2 = main::bgcolor2_color#1 - call vera_layer_set_backcolor - vera_layer_set_backcolor::return#4 = vera_layer_set_backcolor::return#1 - to:main::@46 -main::@46: scope:[main] from main::bgcolor2 - rem16u#74 = phi( main::bgcolor2/rem16u#76 ) - rand_state#74 = phi( main::bgcolor2/rand_state#76 ) - CONIO_SCREEN_BANK#68 = phi( main::bgcolor2/CONIO_SCREEN_BANK#73 ) - CONIO_SCREEN_TEXT#44 = phi( main::bgcolor2/CONIO_SCREEN_TEXT#54 ) - to:main::@13 -main::@13: scope:[main] from main::@46 - rem16u#72 = phi( main::@46/rem16u#74 ) - rand_state#72 = phi( main::@46/rand_state#74 ) - CONIO_SCREEN_BANK#58 = phi( main::@46/CONIO_SCREEN_BANK#68 ) - CONIO_SCREEN_TEXT#24 = phi( main::@46/CONIO_SCREEN_TEXT#44 ) - call clrscr - to:main::@47 -main::@47: scope:[main] from main::@13 - rem16u#70 = phi( main::@13/rem16u#72 ) - rand_state#70 = phi( main::@13/rand_state#72 ) - CONIO_SCREEN_TEXT#101 = phi( main::@13/CONIO_SCREEN_TEXT#24 ) - CONIO_SCREEN_BANK#88 = phi( main::@13/CONIO_SCREEN_BANK#58 ) - gotoxy::x#5 = 0 - gotoxy::y#5 = $1a - call gotoxy - to:main::@48 -main::@48: scope:[main] from main::@47 - rem16u#68 = phi( main::@47/rem16u#70 ) - rand_state#68 = phi( main::@47/rand_state#70 ) - CONIO_SCREEN_TEXT#98 = phi( main::@47/CONIO_SCREEN_TEXT#101 ) - CONIO_SCREEN_BANK#86 = phi( main::@47/CONIO_SCREEN_BANK#88 ) - printf_str::putc#5 = &cputc - printf_str::s#6 = main::s5 - call printf_str - to:main::@49 -main::@49: scope:[main] from main::@48 - rem16u#66 = phi( main::@48/rem16u#68 ) - rand_state#66 = phi( main::@48/rand_state#68 ) - CONIO_SCREEN_TEXT#95 = phi( main::@48/CONIO_SCREEN_TEXT#98 ) - CONIO_SCREEN_BANK#83 = phi( main::@48/CONIO_SCREEN_BANK#86 ) - gotoxy::x#6 = 0 - gotoxy::y#6 = $1d - call gotoxy - to:main::@50 -main::@50: scope:[main] from main::@49 - rem16u#64 = phi( main::@49/rem16u#66 ) - rand_state#64 = phi( main::@49/rand_state#66 ) - CONIO_SCREEN_TEXT#92 = phi( main::@49/CONIO_SCREEN_TEXT#95 ) - CONIO_SCREEN_BANK#79 = phi( main::@49/CONIO_SCREEN_BANK#83 ) - main::textcolor4_color#0 = YELLOW - to:main::textcolor4 -main::textcolor4: scope:[main] from main::@50 - rem16u#62 = phi( main::@50/rem16u#64 ) - rand_state#62 = phi( main::@50/rand_state#64 ) - CONIO_SCREEN_TEXT#87 = phi( main::@50/CONIO_SCREEN_TEXT#92 ) - CONIO_SCREEN_BANK#74 = phi( main::@50/CONIO_SCREEN_BANK#79 ) - main::textcolor4_color#1 = phi( main::@50/main::textcolor4_color#0 ) - vera_layer_set_textcolor::layer#4 = conio_screen_layer - vera_layer_set_textcolor::color#4 = main::textcolor4_color#1 - call vera_layer_set_textcolor - vera_layer_set_textcolor::return#6 = vera_layer_set_textcolor::return#1 - to:main::@51 -main::@51: scope:[main] from main::textcolor4 - rem16u#60 = phi( main::textcolor4/rem16u#62 ) - rand_state#60 = phi( main::textcolor4/rand_state#62 ) - CONIO_SCREEN_TEXT#80 = phi( main::textcolor4/CONIO_SCREEN_TEXT#87 ) - CONIO_SCREEN_BANK#69 = phi( main::textcolor4/CONIO_SCREEN_BANK#74 ) - to:main::@14 -main::@14: scope:[main] from main::@51 - rem16u#57 = phi( main::@51/rem16u#60 ) - rand_state#57 = phi( main::@51/rand_state#60 ) - CONIO_SCREEN_TEXT#72 = phi( main::@51/CONIO_SCREEN_TEXT#80 ) - CONIO_SCREEN_BANK#62 = phi( main::@51/CONIO_SCREEN_BANK#69 ) - printf_str::putc#6 = &cputc - printf_str::s#7 = main::s6 - call printf_str - to:main::@52 -main::@52: scope:[main] from main::@14 - rem16u#53 = phi( main::@14/rem16u#57 ) - rand_state#53 = phi( main::@14/rand_state#57 ) - CONIO_SCREEN_TEXT#63 = phi( main::@14/CONIO_SCREEN_TEXT#72 ) - CONIO_SCREEN_BANK#54 = phi( main::@14/CONIO_SCREEN_BANK#62 ) - main::x#0 = 0 - main::color#0 = 0 - to:main::@4 -main::@4: scope:[main] from main::@52 main::@54 main::@7 - rem16u#51 = phi( main::@52/rem16u#53, main::@54/rem16u#54, main::@7/rem16u#55 ) - rand_state#51 = phi( main::@52/rand_state#53, main::@54/rand_state#54, main::@7/rand_state#55 ) - CONIO_SCREEN_TEXT#55 = phi( main::@52/CONIO_SCREEN_TEXT#63, main::@54/CONIO_SCREEN_TEXT#64, main::@7/CONIO_SCREEN_TEXT#65 ) - CONIO_SCREEN_BANK#47 = phi( main::@52/CONIO_SCREEN_BANK#54, main::@54/CONIO_SCREEN_BANK#55, main::@7/CONIO_SCREEN_BANK#56 ) - main::color#5 = phi( main::@52/main::color#0, main::@54/main::color#1, main::@7/main::color#6 ) - main::x#6 = phi( main::@52/main::x#0, main::@54/main::x#1, main::@7/main::x#2 ) - call kbhit - kbhit::return#3 = kbhit::return#1 - to:main::@53 -main::@53: scope:[main] from main::@4 - rem16u#49 = phi( main::@4/rem16u#51 ) - rand_state#49 = phi( main::@4/rand_state#51 ) - CONIO_SCREEN_TEXT#45 = phi( main::@4/CONIO_SCREEN_TEXT#55 ) - CONIO_SCREEN_BANK#38 = phi( main::@4/CONIO_SCREEN_BANK#47 ) - main::color#4 = phi( main::@4/main::color#5 ) - main::x#5 = phi( main::@4/main::x#6 ) - kbhit::return#6 = phi( main::@4/kbhit::return#3 ) - main::$43 = kbhit::return#6 - main::$49 = 0 != main::$43 - main::$44 = ! main::$49 - if(main::$44) goto main::@5 - to:main::@6 -main::@5: scope:[main] from main::@53 - rem16u#58 = phi( main::@53/rem16u#49 ) - rand_state#58 = phi( main::@53/rand_state#49 ) - CONIO_SCREEN_TEXT#73 = phi( main::@53/CONIO_SCREEN_TEXT#45 ) - CONIO_SCREEN_BANK#63 = phi( main::@53/CONIO_SCREEN_BANK#38 ) - main::color#2 = phi( main::@53/main::color#4 ) - main::x#3 = phi( main::@53/main::x#5 ) - bitmap_line::x0#1 = main::x#3 - bitmap_line::x1#1 = main::x#3 - bitmap_line::y0#1 = 0 - bitmap_line::y1#1 = $c7 - bitmap_line::c#1 = main::color#2 - call bitmap_line - to:main::@54 -main::@54: scope:[main] from main::@5 - rem16u#54 = phi( main::@5/rem16u#58 ) - rand_state#54 = phi( main::@5/rand_state#58 ) - CONIO_SCREEN_TEXT#64 = phi( main::@5/CONIO_SCREEN_TEXT#73 ) - CONIO_SCREEN_BANK#55 = phi( main::@5/CONIO_SCREEN_BANK#63 ) - main::x#4 = phi( main::@5/main::x#3 ) - main::color#3 = phi( main::@5/main::color#2 ) - main::color#1 = ++ main::color#3 - main::x#1 = ++ main::x#4 - main::$46 = main::x#1 > $13f - main::$47 = ! main::$46 - if(main::$47) goto main::@4 - to:main::@7 -main::@6: scope:[main] from main::@53 - rem16u#47 = phi( main::@53/rem16u#49 ) - rand_state#47 = phi( main::@53/rand_state#49 ) - CONIO_SCREEN_TEXT#34 = phi( main::@53/CONIO_SCREEN_TEXT#45 ) - CONIO_SCREEN_BANK#28 = phi( main::@53/CONIO_SCREEN_BANK#38 ) - screenlayer::layer#2 = 1 - call screenlayer - to:main::@55 -main::@55: scope:[main] from main::@6 - rem16u#45 = phi( main::@6/rem16u#47 ) - rand_state#45 = phi( main::@6/rand_state#47 ) - CONIO_SCREEN_TEXT#19 = phi( main::@6/CONIO_SCREEN_TEXT#3 ) - CONIO_SCREEN_BANK#17 = phi( main::@6/CONIO_SCREEN_BANK#3 ) - CONIO_SCREEN_BANK#5 = CONIO_SCREEN_BANK#17 - CONIO_SCREEN_TEXT#5 = CONIO_SCREEN_TEXT#19 - main::textcolor5_color#0 = WHITE - to:main::textcolor5 -main::textcolor5: scope:[main] from main::@55 - rem16u#43 = phi( main::@55/rem16u#45 ) - rand_state#43 = phi( main::@55/rand_state#45 ) - CONIO_SCREEN_BANK#75 = phi( main::@55/CONIO_SCREEN_BANK#5 ) - CONIO_SCREEN_TEXT#81 = phi( main::@55/CONIO_SCREEN_TEXT#5 ) - main::textcolor5_color#1 = phi( main::@55/main::textcolor5_color#0 ) - vera_layer_set_textcolor::layer#5 = conio_screen_layer - vera_layer_set_textcolor::color#5 = main::textcolor5_color#1 - call vera_layer_set_textcolor - vera_layer_set_textcolor::return#7 = vera_layer_set_textcolor::return#1 - to:main::@56 -main::@56: scope:[main] from main::textcolor5 - rem16u#41 = phi( main::textcolor5/rem16u#43 ) - rand_state#41 = phi( main::textcolor5/rand_state#43 ) - CONIO_SCREEN_BANK#70 = phi( main::textcolor5/CONIO_SCREEN_BANK#75 ) - CONIO_SCREEN_TEXT#74 = phi( main::textcolor5/CONIO_SCREEN_TEXT#81 ) - to:main::@15 -main::@15: scope:[main] from main::@56 - rem16u#38 = phi( main::@56/rem16u#41 ) - rand_state#39 = phi( main::@56/rand_state#41 ) - CONIO_SCREEN_BANK#64 = phi( main::@56/CONIO_SCREEN_BANK#70 ) - CONIO_SCREEN_TEXT#66 = phi( main::@56/CONIO_SCREEN_TEXT#74 ) - main::bgcolor3_color#0 = BLUE - to:main::bgcolor3 -main::bgcolor3: scope:[main] from main::@15 - rem16u#35 = phi( main::@15/rem16u#38 ) - rand_state#37 = phi( main::@15/rand_state#39 ) - CONIO_SCREEN_BANK#57 = phi( main::@15/CONIO_SCREEN_BANK#64 ) - CONIO_SCREEN_TEXT#56 = phi( main::@15/CONIO_SCREEN_TEXT#66 ) - main::bgcolor3_color#1 = phi( main::@15/main::bgcolor3_color#0 ) - vera_layer_set_backcolor::layer#3 = conio_screen_layer - vera_layer_set_backcolor::color#3 = main::bgcolor3_color#1 - call vera_layer_set_backcolor - vera_layer_set_backcolor::return#5 = vera_layer_set_backcolor::return#1 - to:main::@57 -main::@57: scope:[main] from main::bgcolor3 - rem16u#33 = phi( main::bgcolor3/rem16u#35 ) - rand_state#34 = phi( main::bgcolor3/rand_state#37 ) - CONIO_SCREEN_BANK#48 = phi( main::bgcolor3/CONIO_SCREEN_BANK#57 ) - CONIO_SCREEN_TEXT#46 = phi( main::bgcolor3/CONIO_SCREEN_TEXT#56 ) - to:main::@16 -main::@16: scope:[main] from main::@57 - rem16u#30 = phi( main::@57/rem16u#33 ) - rand_state#31 = phi( main::@57/rand_state#34 ) - CONIO_SCREEN_BANK#39 = phi( main::@57/CONIO_SCREEN_BANK#48 ) - CONIO_SCREEN_TEXT#25 = phi( main::@57/CONIO_SCREEN_TEXT#46 ) - call clrscr - to:main::@58 -main::@58: scope:[main] from main::@16 - rem16u#27 = phi( main::@16/rem16u#30 ) - rand_state#28 = phi( main::@16/rand_state#31 ) - CONIO_SCREEN_TEXT#35 = phi( main::@16/CONIO_SCREEN_TEXT#25 ) - CONIO_SCREEN_BANK#29 = phi( main::@16/CONIO_SCREEN_BANK#39 ) - to:main::@return -main::@7: scope:[main] from main::@54 - rem16u#55 = phi( main::@54/rem16u#54 ) - rand_state#55 = phi( main::@54/rand_state#54 ) - CONIO_SCREEN_TEXT#65 = phi( main::@54/CONIO_SCREEN_TEXT#64 ) - CONIO_SCREEN_BANK#56 = phi( main::@54/CONIO_SCREEN_BANK#55 ) - main::color#6 = phi( main::@54/main::color#1 ) - main::x#2 = 0 - to:main::@4 -main::@return: scope:[main] from main::@58 - rem16u#19 = phi( main::@58/rem16u#27 ) - rand_state#20 = phi( main::@58/rand_state#28 ) - CONIO_SCREEN_TEXT#20 = phi( main::@58/CONIO_SCREEN_TEXT#35 ) - CONIO_SCREEN_BANK#18 = phi( main::@58/CONIO_SCREEN_BANK#29 ) - CONIO_SCREEN_BANK#6 = CONIO_SCREEN_BANK#18 - CONIO_SCREEN_TEXT#6 = CONIO_SCREEN_TEXT#20 - rand_state#9 = rand_state#20 - rem16u#8 = rem16u#19 - return - to:@return - -void __start() -__start: scope:[__start] from - to:__start::__init1 -__start::__init1: scope:[__start] from __start - CONIO_SCREEN_TEXT#7 = DEFAULT_SCREEN - CONIO_SCREEN_BANK#7 = 0 - conio_screen_width = 0 - conio_screen_height = 0 - conio_screen_layer = 1 - conio_width = 0 - conio_height = 0 - conio_rowshift = 0 - conio_rowskip = 0 - rand_state#10 = 1 - __bitmap_address = 0 - __bitmap_layer = 0 - __bitmap_hscale = 0 - __bitmap_vscale = 0 - __bitmap_color_depth = 0 - rem16u#9 = 0 - call conio_x16_init - to:__start::@2 -__start::@2: scope:[__start] from __start::__init1 - rem16u#31 = phi( __start::__init1/rem16u#9 ) - rand_state#32 = phi( __start::__init1/rand_state#10 ) - CONIO_SCREEN_TEXT#21 = phi( __start::__init1/CONIO_SCREEN_TEXT#1 ) - CONIO_SCREEN_BANK#19 = phi( __start::__init1/CONIO_SCREEN_BANK#1 ) - CONIO_SCREEN_BANK#8 = CONIO_SCREEN_BANK#19 - CONIO_SCREEN_TEXT#8 = CONIO_SCREEN_TEXT#21 - to:__start::@1 -__start::@1: scope:[__start] from __start::@2 - rem16u#28 = phi( __start::@2/rem16u#31 ) - rand_state#29 = phi( __start::@2/rand_state#32 ) - CONIO_SCREEN_TEXT#36 = phi( __start::@2/CONIO_SCREEN_TEXT#8 ) - CONIO_SCREEN_BANK#30 = phi( __start::@2/CONIO_SCREEN_BANK#8 ) - call main - to:__start::@3 -__start::@3: scope:[__start] from __start::@1 - rem16u#20 = phi( __start::@1/rem16u#8 ) - rand_state#21 = phi( __start::@1/rand_state#9 ) - CONIO_SCREEN_TEXT#22 = phi( __start::@1/CONIO_SCREEN_TEXT#6 ) - CONIO_SCREEN_BANK#20 = phi( __start::@1/CONIO_SCREEN_BANK#6 ) - CONIO_SCREEN_BANK#9 = CONIO_SCREEN_BANK#20 - CONIO_SCREEN_TEXT#9 = CONIO_SCREEN_TEXT#22 - rand_state#11 = rand_state#21 - rem16u#10 = rem16u#20 - to:__start::@return -__start::@return: scope:[__start] from __start::@3 - rem16u#21 = phi( __start::@3/rem16u#10 ) - rand_state#22 = phi( __start::@3/rand_state#11 ) - CONIO_SCREEN_BANK#21 = phi( __start::@3/CONIO_SCREEN_BANK#9 ) - CONIO_SCREEN_TEXT#23 = phi( __start::@3/CONIO_SCREEN_TEXT#9 ) - CONIO_SCREEN_TEXT#10 = CONIO_SCREEN_TEXT#23 - CONIO_SCREEN_BANK#10 = CONIO_SCREEN_BANK#21 - rand_state#12 = rand_state#22 - rem16u#11 = rem16u#21 - return - to:@return - -SYMBOL TABLE SSA -__constant const char BLACK = 0 -__constant const char BLUE = 6 -char CONIO_SCREEN_BANK -char CONIO_SCREEN_BANK#0 -char CONIO_SCREEN_BANK#1 -char CONIO_SCREEN_BANK#10 -char CONIO_SCREEN_BANK#100 -char CONIO_SCREEN_BANK#101 -char CONIO_SCREEN_BANK#102 -char CONIO_SCREEN_BANK#103 -char CONIO_SCREEN_BANK#104 -char CONIO_SCREEN_BANK#105 -char CONIO_SCREEN_BANK#106 -char CONIO_SCREEN_BANK#107 -char CONIO_SCREEN_BANK#108 -char CONIO_SCREEN_BANK#109 -char CONIO_SCREEN_BANK#11 -char CONIO_SCREEN_BANK#110 -char CONIO_SCREEN_BANK#111 -char CONIO_SCREEN_BANK#112 -char CONIO_SCREEN_BANK#113 -char CONIO_SCREEN_BANK#114 -char CONIO_SCREEN_BANK#115 -char CONIO_SCREEN_BANK#116 -char CONIO_SCREEN_BANK#12 -char CONIO_SCREEN_BANK#13 -char CONIO_SCREEN_BANK#14 -char CONIO_SCREEN_BANK#15 -char CONIO_SCREEN_BANK#16 -char CONIO_SCREEN_BANK#17 -char CONIO_SCREEN_BANK#18 -char CONIO_SCREEN_BANK#19 -char CONIO_SCREEN_BANK#2 -char CONIO_SCREEN_BANK#20 -char CONIO_SCREEN_BANK#21 -char CONIO_SCREEN_BANK#22 -char CONIO_SCREEN_BANK#23 -char CONIO_SCREEN_BANK#24 -char CONIO_SCREEN_BANK#25 -char CONIO_SCREEN_BANK#26 -char CONIO_SCREEN_BANK#27 -char CONIO_SCREEN_BANK#28 -char CONIO_SCREEN_BANK#29 -char CONIO_SCREEN_BANK#3 -char CONIO_SCREEN_BANK#30 -char CONIO_SCREEN_BANK#31 -char CONIO_SCREEN_BANK#32 -char CONIO_SCREEN_BANK#33 -char CONIO_SCREEN_BANK#34 -char CONIO_SCREEN_BANK#35 -char CONIO_SCREEN_BANK#36 -char CONIO_SCREEN_BANK#37 -char CONIO_SCREEN_BANK#38 -char CONIO_SCREEN_BANK#39 -char CONIO_SCREEN_BANK#4 -char CONIO_SCREEN_BANK#40 -char CONIO_SCREEN_BANK#41 -char CONIO_SCREEN_BANK#42 -char CONIO_SCREEN_BANK#43 -char CONIO_SCREEN_BANK#44 -char CONIO_SCREEN_BANK#45 -char CONIO_SCREEN_BANK#46 -char CONIO_SCREEN_BANK#47 -char CONIO_SCREEN_BANK#48 -char CONIO_SCREEN_BANK#49 -char CONIO_SCREEN_BANK#5 -char CONIO_SCREEN_BANK#50 -char CONIO_SCREEN_BANK#51 -char CONIO_SCREEN_BANK#52 -char CONIO_SCREEN_BANK#53 -char CONIO_SCREEN_BANK#54 -char CONIO_SCREEN_BANK#55 -char CONIO_SCREEN_BANK#56 -char CONIO_SCREEN_BANK#57 -char CONIO_SCREEN_BANK#58 -char CONIO_SCREEN_BANK#59 -char CONIO_SCREEN_BANK#6 -char CONIO_SCREEN_BANK#60 -char CONIO_SCREEN_BANK#61 -char CONIO_SCREEN_BANK#62 -char CONIO_SCREEN_BANK#63 -char CONIO_SCREEN_BANK#64 -char CONIO_SCREEN_BANK#65 -char CONIO_SCREEN_BANK#66 -char CONIO_SCREEN_BANK#67 -char CONIO_SCREEN_BANK#68 -char CONIO_SCREEN_BANK#69 -char CONIO_SCREEN_BANK#7 -char CONIO_SCREEN_BANK#70 -char CONIO_SCREEN_BANK#71 -char CONIO_SCREEN_BANK#72 -char CONIO_SCREEN_BANK#73 -char CONIO_SCREEN_BANK#74 -char CONIO_SCREEN_BANK#75 -char CONIO_SCREEN_BANK#76 -char CONIO_SCREEN_BANK#77 -char CONIO_SCREEN_BANK#78 -char CONIO_SCREEN_BANK#79 -char CONIO_SCREEN_BANK#8 -char CONIO_SCREEN_BANK#80 -char CONIO_SCREEN_BANK#81 -char CONIO_SCREEN_BANK#82 -char CONIO_SCREEN_BANK#83 -char CONIO_SCREEN_BANK#84 -char CONIO_SCREEN_BANK#85 -char CONIO_SCREEN_BANK#86 -char CONIO_SCREEN_BANK#87 -char CONIO_SCREEN_BANK#88 -char CONIO_SCREEN_BANK#89 -char CONIO_SCREEN_BANK#9 -char CONIO_SCREEN_BANK#90 -char CONIO_SCREEN_BANK#91 -char CONIO_SCREEN_BANK#92 -char CONIO_SCREEN_BANK#93 -char CONIO_SCREEN_BANK#94 -char CONIO_SCREEN_BANK#95 -char CONIO_SCREEN_BANK#96 -char CONIO_SCREEN_BANK#97 -char CONIO_SCREEN_BANK#98 -char CONIO_SCREEN_BANK#99 -char *CONIO_SCREEN_TEXT -char *CONIO_SCREEN_TEXT#0 -char *CONIO_SCREEN_TEXT#1 -char *CONIO_SCREEN_TEXT#10 -char *CONIO_SCREEN_TEXT#100 -char *CONIO_SCREEN_TEXT#101 -char *CONIO_SCREEN_TEXT#102 -char *CONIO_SCREEN_TEXT#103 -char *CONIO_SCREEN_TEXT#104 -char *CONIO_SCREEN_TEXT#105 -char *CONIO_SCREEN_TEXT#106 -char *CONIO_SCREEN_TEXT#107 -char *CONIO_SCREEN_TEXT#108 -char *CONIO_SCREEN_TEXT#109 -char *CONIO_SCREEN_TEXT#11 -char *CONIO_SCREEN_TEXT#110 -char *CONIO_SCREEN_TEXT#111 -char *CONIO_SCREEN_TEXT#112 -char *CONIO_SCREEN_TEXT#113 -char *CONIO_SCREEN_TEXT#114 -char *CONIO_SCREEN_TEXT#115 -char *CONIO_SCREEN_TEXT#116 -char *CONIO_SCREEN_TEXT#117 -char *CONIO_SCREEN_TEXT#118 -char *CONIO_SCREEN_TEXT#119 -char *CONIO_SCREEN_TEXT#12 -char *CONIO_SCREEN_TEXT#120 -char *CONIO_SCREEN_TEXT#121 -char *CONIO_SCREEN_TEXT#122 -char *CONIO_SCREEN_TEXT#123 -char *CONIO_SCREEN_TEXT#13 -char *CONIO_SCREEN_TEXT#14 -char *CONIO_SCREEN_TEXT#15 -char *CONIO_SCREEN_TEXT#16 -char *CONIO_SCREEN_TEXT#17 -char *CONIO_SCREEN_TEXT#18 -char *CONIO_SCREEN_TEXT#19 -char *CONIO_SCREEN_TEXT#2 -char *CONIO_SCREEN_TEXT#20 -char *CONIO_SCREEN_TEXT#21 -char *CONIO_SCREEN_TEXT#22 -char *CONIO_SCREEN_TEXT#23 -char *CONIO_SCREEN_TEXT#24 -char *CONIO_SCREEN_TEXT#25 -char *CONIO_SCREEN_TEXT#26 -char *CONIO_SCREEN_TEXT#27 -char *CONIO_SCREEN_TEXT#28 -char *CONIO_SCREEN_TEXT#29 -char *CONIO_SCREEN_TEXT#3 -char *CONIO_SCREEN_TEXT#30 -char *CONIO_SCREEN_TEXT#31 -char *CONIO_SCREEN_TEXT#32 -char *CONIO_SCREEN_TEXT#33 -char *CONIO_SCREEN_TEXT#34 -char *CONIO_SCREEN_TEXT#35 -char *CONIO_SCREEN_TEXT#36 -char *CONIO_SCREEN_TEXT#37 -char *CONIO_SCREEN_TEXT#38 -char *CONIO_SCREEN_TEXT#39 -char *CONIO_SCREEN_TEXT#4 -char *CONIO_SCREEN_TEXT#40 -char *CONIO_SCREEN_TEXT#41 -char *CONIO_SCREEN_TEXT#42 -char *CONIO_SCREEN_TEXT#43 -char *CONIO_SCREEN_TEXT#44 -char *CONIO_SCREEN_TEXT#45 -char *CONIO_SCREEN_TEXT#46 -char *CONIO_SCREEN_TEXT#47 -char *CONIO_SCREEN_TEXT#48 -char *CONIO_SCREEN_TEXT#49 -char *CONIO_SCREEN_TEXT#5 -char *CONIO_SCREEN_TEXT#50 -char *CONIO_SCREEN_TEXT#51 -char *CONIO_SCREEN_TEXT#52 -char *CONIO_SCREEN_TEXT#53 -char *CONIO_SCREEN_TEXT#54 -char *CONIO_SCREEN_TEXT#55 -char *CONIO_SCREEN_TEXT#56 -char *CONIO_SCREEN_TEXT#57 -char *CONIO_SCREEN_TEXT#58 -char *CONIO_SCREEN_TEXT#59 -char *CONIO_SCREEN_TEXT#6 -char *CONIO_SCREEN_TEXT#60 -char *CONIO_SCREEN_TEXT#61 -char *CONIO_SCREEN_TEXT#62 -char *CONIO_SCREEN_TEXT#63 -char *CONIO_SCREEN_TEXT#64 -char *CONIO_SCREEN_TEXT#65 -char *CONIO_SCREEN_TEXT#66 -char *CONIO_SCREEN_TEXT#67 -char *CONIO_SCREEN_TEXT#68 -char *CONIO_SCREEN_TEXT#69 -char *CONIO_SCREEN_TEXT#7 -char *CONIO_SCREEN_TEXT#70 -char *CONIO_SCREEN_TEXT#71 -char *CONIO_SCREEN_TEXT#72 -char *CONIO_SCREEN_TEXT#73 -char *CONIO_SCREEN_TEXT#74 -char *CONIO_SCREEN_TEXT#75 -char *CONIO_SCREEN_TEXT#76 -char *CONIO_SCREEN_TEXT#77 -char *CONIO_SCREEN_TEXT#78 -char *CONIO_SCREEN_TEXT#79 -char *CONIO_SCREEN_TEXT#8 -char *CONIO_SCREEN_TEXT#80 -char *CONIO_SCREEN_TEXT#81 -char *CONIO_SCREEN_TEXT#82 -char *CONIO_SCREEN_TEXT#83 -char *CONIO_SCREEN_TEXT#84 -char *CONIO_SCREEN_TEXT#85 -char *CONIO_SCREEN_TEXT#86 -char *CONIO_SCREEN_TEXT#87 -char *CONIO_SCREEN_TEXT#88 -char *CONIO_SCREEN_TEXT#89 -char *CONIO_SCREEN_TEXT#9 -char *CONIO_SCREEN_TEXT#90 -char *CONIO_SCREEN_TEXT#91 -char *CONIO_SCREEN_TEXT#92 -char *CONIO_SCREEN_TEXT#93 -char *CONIO_SCREEN_TEXT#94 -char *CONIO_SCREEN_TEXT#95 -char *CONIO_SCREEN_TEXT#96 -char *CONIO_SCREEN_TEXT#97 -char *CONIO_SCREEN_TEXT#98 -char *CONIO_SCREEN_TEXT#99 -__constant char * const DEFAULT_SCREEN = (char *)0 -__constant char RADIX::BINARY = 2 -__constant char RADIX::DECIMAL = $a -__constant char RADIX::HEXADECIMAL = $10 -__constant char RADIX::OCTAL = 8 -__constant char SIZEOF_POINTER = 2 -__constant char SIZEOF_UNSIGNED_INT = 2 -__constant char SIZEOF_UNSIGNED_LONG = 4 -__constant unsigned int STACK_BASE = $103 -__constant const char VERA_ADDRSEL = 1 -__constant char * const VERA_ADDRX_H = (char *)$9f22 -__constant char * const VERA_ADDRX_L = (char *)$9f20 -__constant char * const VERA_ADDRX_M = (char *)$9f21 -__constant char * const VERA_CTRL = (char *)$9f25 -__constant char * const VERA_DATA0 = (char *)$9f23 -__constant char * const VERA_DATA1 = (char *)$9f24 -__constant char * const VERA_DC_HSCALE = (char *)$9f2a -__constant char * const VERA_DC_VIDEO = (char *)$9f29 -__constant char * const VERA_DC_VSCALE = (char *)$9f2b -__constant const char VERA_INC_0 = 0 -__constant const char VERA_INC_1 = $10 -__constant char * const VERA_L0_CONFIG = (char *)$9f2d -__constant char * const VERA_L0_MAPBASE = (char *)$9f2e -__constant char * const VERA_L0_TILEBASE = (char *)$9f2f -__constant char * const VERA_L1_CONFIG = (char *)$9f34 -__constant char * const VERA_L1_MAPBASE = (char *)$9f35 -__constant char * const VERA_L1_TILEBASE = (char *)$9f36 -__constant const char VERA_LAYER0_ENABLE = $10 -__constant const char VERA_LAYER1_ENABLE = $20 -__constant const char VERA_LAYER_COLOR_DEPTH_1BPP = 0 -__constant const char VERA_LAYER_COLOR_DEPTH_2BPP = 1 -__constant const char VERA_LAYER_COLOR_DEPTH_4BPP = 2 -__constant const char VERA_LAYER_COLOR_DEPTH_8BPP = 3 -__constant const char VERA_LAYER_COLOR_DEPTH_MASK = 3 -__constant const char VERA_LAYER_CONFIG_16C = 0 -__constant const char VERA_LAYER_CONFIG_256C = 8 -__constant const char VERA_LAYER_CONFIG_MODE_BITMAP = 4 -__constant const unsigned int VERA_LAYER_HEIGHT[4] = { $20, $40, $80, $100 } -__constant const char VERA_LAYER_HEIGHT_128 = $80 -__constant const char VERA_LAYER_HEIGHT_256 = $c0 -__constant const char VERA_LAYER_HEIGHT_32 = 0 -__constant const char VERA_LAYER_HEIGHT_64 = $40 -__constant const char VERA_LAYER_HEIGHT_MASK = $c0 -__constant const char VERA_LAYER_TILEBASE_MASK = $fc -__constant const unsigned int VERA_LAYER_WIDTH[4] = { $20, $40, $80, $100 } -__constant const char VERA_LAYER_WIDTH_128 = $20 -__constant const char VERA_LAYER_WIDTH_256 = $30 -__constant const char VERA_LAYER_WIDTH_32 = 0 -__constant const char VERA_LAYER_WIDTH_64 = $10 -__constant const char VERA_LAYER_WIDTH_MASK = $30 -__constant const char VERA_TILEBASE_HEIGHT_16 = 2 -__constant const char VERA_TILEBASE_HEIGHT_8 = 0 -__constant const char VERA_TILEBASE_WIDTH_16 = 1 -__constant const char VERA_TILEBASE_WIDTH_8 = 0 -__constant const char WHITE = 1 -__constant const char YELLOW = 7 -__loadstore unsigned long __bitmap_address -__loadstore char __bitmap_color_depth -__loadstore char __bitmap_hscale -__loadstore char __bitmap_layer -__constant const char __bitmap_plot_bitmask[$280] = { fill( $280, 0) } -__constant const char __bitmap_plot_bitshift[$280] = { fill( $280, 0) } -__constant const unsigned int __bitmap_plot_x[$280] = { fill( $280, 0) } -__constant const unsigned long __bitmap_plot_y[$1e0] = { fill( $1e0, 0) } -__loadstore char __bitmap_vscale -void __start() -void bitmap_clear() -char bitmap_clear::$0 -char bitmap_clear::$1 -unsigned int bitmap_clear::$4 -char bitmap_clear::$6 -char bitmap_clear::$7 -unsigned long bitmap_clear::count -unsigned long bitmap_clear::count#0 -unsigned int bitmap_clear::hdelta -unsigned int bitmap_clear::hdelta#0 -char bitmap_clear::vbank -char bitmap_clear::vbank#0 -unsigned int bitmap_clear::vdelta -unsigned int bitmap_clear::vdelta#0 -void *bitmap_clear::vdest -void *bitmap_clear::vdest#0 -void bitmap_init(char layer , unsigned long address) -char bitmap_init::$0 -char bitmap_init::$1 -unsigned int bitmap_init::$10 -bool bitmap_init::$11 -bool bitmap_init::$12 -unsigned int bitmap_init::$13 -bool bitmap_init::$14 -bool bitmap_init::$15 -bool bitmap_init::$16 -bool bitmap_init::$17 -bool bitmap_init::$18 -bool bitmap_init::$19 -char bitmap_init::$2 -bool bitmap_init::$20 -unsigned long bitmap_init::$21 -bool bitmap_init::$22 -unsigned int bitmap_init::$23 -unsigned int bitmap_init::$24 -unsigned int bitmap_init::$25 -unsigned int bitmap_init::$26 -char bitmap_init::$27 -unsigned int bitmap_init::$28 -char bitmap_init::$3 -char bitmap_init::$4 -bool bitmap_init::$5 -bool bitmap_init::$6 -unsigned int bitmap_init::$7 -bool bitmap_init::$8 -bool bitmap_init::$9 -unsigned long bitmap_init::address -unsigned long bitmap_init::address#0 -unsigned long bitmap_init::address#1 -char bitmap_init::bitmask -char bitmap_init::bitmask#0 -char bitmap_init::bitmask#1 -char bitmap_init::bitmask#10 -char bitmap_init::bitmask#11 -char bitmap_init::bitmask#12 -char bitmap_init::bitmask#13 -char bitmap_init::bitmask#14 -char bitmap_init::bitmask#15 -char bitmap_init::bitmask#16 -char bitmap_init::bitmask#2 -char bitmap_init::bitmask#3 -char bitmap_init::bitmask#4 -char bitmap_init::bitmask#5 -char bitmap_init::bitmask#6 -char bitmap_init::bitmask#7 -char bitmap_init::bitmask#8 -char bitmap_init::bitmask#9 -signed char bitmap_init::bitshift -signed char bitmap_init::bitshift#0 -signed char bitmap_init::bitshift#1 -signed char bitmap_init::bitshift#10 -signed char bitmap_init::bitshift#11 -signed char bitmap_init::bitshift#12 -signed char bitmap_init::bitshift#13 -signed char bitmap_init::bitshift#14 -signed char bitmap_init::bitshift#15 -signed char bitmap_init::bitshift#16 -signed char bitmap_init::bitshift#2 -signed char bitmap_init::bitshift#3 -signed char bitmap_init::bitshift#4 -signed char bitmap_init::bitshift#5 -signed char bitmap_init::bitshift#6 -signed char bitmap_init::bitshift#7 -signed char bitmap_init::bitshift#8 -signed char bitmap_init::bitshift#9 -unsigned int bitmap_init::hdelta -unsigned int bitmap_init::hdelta#0 -unsigned int bitmap_init::hdelta#1 -char bitmap_init::layer -char bitmap_init::layer#0 -char bitmap_init::layer#1 -char bitmap_init::vera_layer_get_color_depth1_$0 -char bitmap_init::vera_layer_get_color_depth1_$1 -char *bitmap_init::vera_layer_get_color_depth1_config -char *bitmap_init::vera_layer_get_color_depth1_config#0 -char bitmap_init::vera_layer_get_color_depth1_layer -char bitmap_init::vera_layer_get_color_depth1_layer#0 -char bitmap_init::vera_layer_get_color_depth1_layer#1 -char bitmap_init::vera_layer_get_color_depth1_return -char bitmap_init::vera_layer_get_color_depth1_return#0 -char bitmap_init::vera_layer_get_color_depth1_return#1 -char bitmap_init::vera_layer_get_color_depth1_return#2 -char bitmap_init::vera_layer_get_color_depth1_return#3 -unsigned int bitmap_init::x -unsigned int bitmap_init::x#0 -unsigned int bitmap_init::x#1 -unsigned int bitmap_init::x#10 -unsigned int bitmap_init::x#11 -unsigned int bitmap_init::x#12 -unsigned int bitmap_init::x#13 -unsigned int bitmap_init::x#14 -unsigned int bitmap_init::x#2 -unsigned int bitmap_init::x#3 -unsigned int bitmap_init::x#4 -unsigned int bitmap_init::x#5 -unsigned int bitmap_init::x#6 -unsigned int bitmap_init::x#7 -unsigned int bitmap_init::x#8 -unsigned int bitmap_init::x#9 -unsigned int bitmap_init::y -unsigned int bitmap_init::y#0 -unsigned int bitmap_init::y#1 -unsigned int bitmap_init::y#2 -unsigned long bitmap_init::yoffs -unsigned long bitmap_init::yoffs#0 -unsigned long bitmap_init::yoffs#1 -unsigned long bitmap_init::yoffs#2 -void bitmap_line(unsigned int x0 , unsigned int x1 , unsigned int y0 , unsigned int y1 , char c) -bool bitmap_line::$0 -unsigned int bitmap_line::$1 -unsigned int bitmap_line::$11 -bool bitmap_line::$12 -unsigned int bitmap_line::$13 -bool bitmap_line::$14 -unsigned int bitmap_line::$17 -bool bitmap_line::$18 -bool bitmap_line::$2 -unsigned int bitmap_line::$3 -bool bitmap_line::$4 -unsigned int bitmap_line::$7 -bool bitmap_line::$8 -char bitmap_line::c -char bitmap_line::c#0 -char bitmap_line::c#1 -char bitmap_line::c#10 -char bitmap_line::c#11 -char bitmap_line::c#12 -char bitmap_line::c#13 -char bitmap_line::c#14 -char bitmap_line::c#15 -char bitmap_line::c#16 -char bitmap_line::c#2 -char bitmap_line::c#3 -char bitmap_line::c#4 -char bitmap_line::c#5 -char bitmap_line::c#6 -char bitmap_line::c#7 -char bitmap_line::c#8 -char bitmap_line::c#9 -unsigned int bitmap_line::x0 -unsigned int bitmap_line::x0#0 -unsigned int bitmap_line::x0#1 -unsigned int bitmap_line::x0#10 -unsigned int bitmap_line::x0#11 -unsigned int bitmap_line::x0#12 -unsigned int bitmap_line::x0#13 -unsigned int bitmap_line::x0#14 -unsigned int bitmap_line::x0#2 -unsigned int bitmap_line::x0#3 -unsigned int bitmap_line::x0#4 -unsigned int bitmap_line::x0#5 -unsigned int bitmap_line::x0#6 -unsigned int bitmap_line::x0#7 -unsigned int bitmap_line::x0#8 -unsigned int bitmap_line::x0#9 -unsigned int bitmap_line::x1 -unsigned int bitmap_line::x1#0 -unsigned int bitmap_line::x1#1 -unsigned int bitmap_line::x1#10 -unsigned int bitmap_line::x1#11 -unsigned int bitmap_line::x1#12 -unsigned int bitmap_line::x1#13 -unsigned int bitmap_line::x1#14 -unsigned int bitmap_line::x1#2 -unsigned int bitmap_line::x1#3 -unsigned int bitmap_line::x1#4 -unsigned int bitmap_line::x1#5 -unsigned int bitmap_line::x1#6 -unsigned int bitmap_line::x1#7 -unsigned int bitmap_line::x1#8 -unsigned int bitmap_line::x1#9 -unsigned int bitmap_line::xd -unsigned int bitmap_line::xd#0 -unsigned int bitmap_line::xd#1 -unsigned int bitmap_line::xd#10 -unsigned int bitmap_line::xd#11 -unsigned int bitmap_line::xd#12 -unsigned int bitmap_line::xd#13 -unsigned int bitmap_line::xd#14 -unsigned int bitmap_line::xd#2 -unsigned int bitmap_line::xd#3 -unsigned int bitmap_line::xd#4 -unsigned int bitmap_line::xd#5 -unsigned int bitmap_line::xd#6 -unsigned int bitmap_line::xd#7 -unsigned int bitmap_line::xd#8 -unsigned int bitmap_line::xd#9 -unsigned int bitmap_line::y0 -unsigned int bitmap_line::y0#0 -unsigned int bitmap_line::y0#1 -unsigned int bitmap_line::y0#10 -unsigned int bitmap_line::y0#11 -unsigned int bitmap_line::y0#12 -unsigned int bitmap_line::y0#13 -unsigned int bitmap_line::y0#14 -unsigned int bitmap_line::y0#2 -unsigned int bitmap_line::y0#3 -unsigned int bitmap_line::y0#4 -unsigned int bitmap_line::y0#5 -unsigned int bitmap_line::y0#6 -unsigned int bitmap_line::y0#7 -unsigned int bitmap_line::y0#8 -unsigned int bitmap_line::y0#9 -unsigned int bitmap_line::y1 -unsigned int bitmap_line::y1#0 -unsigned int bitmap_line::y1#1 -unsigned int bitmap_line::y1#10 -unsigned int bitmap_line::y1#11 -unsigned int bitmap_line::y1#12 -unsigned int bitmap_line::y1#13 -unsigned int bitmap_line::y1#14 -unsigned int bitmap_line::y1#2 -unsigned int bitmap_line::y1#3 -unsigned int bitmap_line::y1#4 -unsigned int bitmap_line::y1#5 -unsigned int bitmap_line::y1#6 -unsigned int bitmap_line::y1#7 -unsigned int bitmap_line::y1#8 -unsigned int bitmap_line::y1#9 -unsigned int bitmap_line::yd -unsigned int bitmap_line::yd#0 -unsigned int bitmap_line::yd#1 -unsigned int bitmap_line::yd#10 -unsigned int bitmap_line::yd#11 -unsigned int bitmap_line::yd#12 -unsigned int bitmap_line::yd#2 -unsigned int bitmap_line::yd#3 -unsigned int bitmap_line::yd#4 -unsigned int bitmap_line::yd#5 -unsigned int bitmap_line::yd#6 -unsigned int bitmap_line::yd#7 -unsigned int bitmap_line::yd#8 -unsigned int bitmap_line::yd#9 -void bitmap_line_xdyd(unsigned int x , unsigned int y , unsigned int x1 , unsigned int xd , unsigned int yd , char c) -unsigned int bitmap_line_xdyd::$2 -bool bitmap_line_xdyd::$3 -bool bitmap_line_xdyd::$4 -unsigned int bitmap_line_xdyd::$5 -number bitmap_line_xdyd::$6 -bool bitmap_line_xdyd::$7 -char bitmap_line_xdyd::c -char bitmap_line_xdyd::c#0 -char bitmap_line_xdyd::c#1 -char bitmap_line_xdyd::c#2 -char bitmap_line_xdyd::c#3 -char bitmap_line_xdyd::c#4 -char bitmap_line_xdyd::c#5 -char bitmap_line_xdyd::c#6 -unsigned int bitmap_line_xdyd::e -unsigned int bitmap_line_xdyd::e#0 -unsigned int bitmap_line_xdyd::e#1 -unsigned int bitmap_line_xdyd::e#2 -unsigned int bitmap_line_xdyd::e#3 -unsigned int bitmap_line_xdyd::e#4 -unsigned int bitmap_line_xdyd::e#5 -unsigned int bitmap_line_xdyd::e#6 -unsigned int bitmap_line_xdyd::x -unsigned int bitmap_line_xdyd::x#0 -unsigned int bitmap_line_xdyd::x#1 -unsigned int bitmap_line_xdyd::x#2 -unsigned int bitmap_line_xdyd::x#3 -unsigned int bitmap_line_xdyd::x#4 -unsigned int bitmap_line_xdyd::x#5 -unsigned int bitmap_line_xdyd::x#6 -unsigned int bitmap_line_xdyd::x#7 -unsigned int bitmap_line_xdyd::x1 -unsigned int bitmap_line_xdyd::x1#0 -unsigned int bitmap_line_xdyd::x1#1 -unsigned int bitmap_line_xdyd::x1#2 -unsigned int bitmap_line_xdyd::x1#3 -unsigned int bitmap_line_xdyd::x1#4 -unsigned int bitmap_line_xdyd::x1#5 -unsigned int bitmap_line_xdyd::x1#6 -unsigned int bitmap_line_xdyd::xd -unsigned int bitmap_line_xdyd::xd#0 -unsigned int bitmap_line_xdyd::xd#1 -unsigned int bitmap_line_xdyd::xd#2 -unsigned int bitmap_line_xdyd::xd#3 -unsigned int bitmap_line_xdyd::xd#4 -unsigned int bitmap_line_xdyd::xd#5 -unsigned int bitmap_line_xdyd::xd#6 -unsigned int bitmap_line_xdyd::y -unsigned int bitmap_line_xdyd::y#0 -unsigned int bitmap_line_xdyd::y#1 -unsigned int bitmap_line_xdyd::y#2 -unsigned int bitmap_line_xdyd::y#3 -unsigned int bitmap_line_xdyd::y#4 -unsigned int bitmap_line_xdyd::y#5 -unsigned int bitmap_line_xdyd::y#6 -unsigned int bitmap_line_xdyd::y#7 -unsigned int bitmap_line_xdyd::yd -unsigned int bitmap_line_xdyd::yd#0 -unsigned int bitmap_line_xdyd::yd#1 -unsigned int bitmap_line_xdyd::yd#2 -unsigned int bitmap_line_xdyd::yd#3 -unsigned int bitmap_line_xdyd::yd#4 -unsigned int bitmap_line_xdyd::yd#5 -unsigned int bitmap_line_xdyd::yd#6 -void bitmap_line_xdyi(unsigned int x , unsigned int y , unsigned int x1 , unsigned int xd , unsigned int yd , char c) -unsigned int bitmap_line_xdyi::$2 -bool bitmap_line_xdyi::$3 -bool bitmap_line_xdyi::$4 -unsigned int bitmap_line_xdyi::$5 -number bitmap_line_xdyi::$6 -bool bitmap_line_xdyi::$7 -char bitmap_line_xdyi::c -char bitmap_line_xdyi::c#0 -char bitmap_line_xdyi::c#1 -char bitmap_line_xdyi::c#2 -char bitmap_line_xdyi::c#3 -char bitmap_line_xdyi::c#4 -char bitmap_line_xdyi::c#5 -char bitmap_line_xdyi::c#6 -unsigned int bitmap_line_xdyi::e -unsigned int bitmap_line_xdyi::e#0 -unsigned int bitmap_line_xdyi::e#1 -unsigned int bitmap_line_xdyi::e#2 -unsigned int bitmap_line_xdyi::e#3 -unsigned int bitmap_line_xdyi::e#4 -unsigned int bitmap_line_xdyi::e#5 -unsigned int bitmap_line_xdyi::e#6 -unsigned int bitmap_line_xdyi::x -unsigned int bitmap_line_xdyi::x#0 -unsigned int bitmap_line_xdyi::x#1 -unsigned int bitmap_line_xdyi::x#2 -unsigned int bitmap_line_xdyi::x#3 -unsigned int bitmap_line_xdyi::x#4 -unsigned int bitmap_line_xdyi::x#5 -unsigned int bitmap_line_xdyi::x#6 -unsigned int bitmap_line_xdyi::x#7 -unsigned int bitmap_line_xdyi::x1 -unsigned int bitmap_line_xdyi::x1#0 -unsigned int bitmap_line_xdyi::x1#1 -unsigned int bitmap_line_xdyi::x1#2 -unsigned int bitmap_line_xdyi::x1#3 -unsigned int bitmap_line_xdyi::x1#4 -unsigned int bitmap_line_xdyi::x1#5 -unsigned int bitmap_line_xdyi::x1#6 -unsigned int bitmap_line_xdyi::xd -unsigned int bitmap_line_xdyi::xd#0 -unsigned int bitmap_line_xdyi::xd#1 -unsigned int bitmap_line_xdyi::xd#2 -unsigned int bitmap_line_xdyi::xd#3 -unsigned int bitmap_line_xdyi::xd#4 -unsigned int bitmap_line_xdyi::xd#5 -unsigned int bitmap_line_xdyi::xd#6 -unsigned int bitmap_line_xdyi::y -unsigned int bitmap_line_xdyi::y#0 -unsigned int bitmap_line_xdyi::y#1 -unsigned int bitmap_line_xdyi::y#2 -unsigned int bitmap_line_xdyi::y#3 -unsigned int bitmap_line_xdyi::y#4 -unsigned int bitmap_line_xdyi::y#5 -unsigned int bitmap_line_xdyi::y#6 -unsigned int bitmap_line_xdyi::y#7 -unsigned int bitmap_line_xdyi::yd -unsigned int bitmap_line_xdyi::yd#0 -unsigned int bitmap_line_xdyi::yd#1 -unsigned int bitmap_line_xdyi::yd#2 -unsigned int bitmap_line_xdyi::yd#3 -unsigned int bitmap_line_xdyi::yd#4 -unsigned int bitmap_line_xdyi::yd#5 -unsigned int bitmap_line_xdyi::yd#6 -void bitmap_line_ydxd(unsigned int y , unsigned int x , unsigned int y1 , unsigned int yd , unsigned int xd , char c) -unsigned int bitmap_line_ydxd::$2 -bool bitmap_line_ydxd::$3 -bool bitmap_line_ydxd::$4 -unsigned int bitmap_line_ydxd::$5 -number bitmap_line_ydxd::$6 -bool bitmap_line_ydxd::$7 -char bitmap_line_ydxd::c -char bitmap_line_ydxd::c#0 -char bitmap_line_ydxd::c#1 -char bitmap_line_ydxd::c#2 -char bitmap_line_ydxd::c#3 -char bitmap_line_ydxd::c#4 -char bitmap_line_ydxd::c#5 -char bitmap_line_ydxd::c#6 -unsigned int bitmap_line_ydxd::e -unsigned int bitmap_line_ydxd::e#0 -unsigned int bitmap_line_ydxd::e#1 -unsigned int bitmap_line_ydxd::e#2 -unsigned int bitmap_line_ydxd::e#3 -unsigned int bitmap_line_ydxd::e#4 -unsigned int bitmap_line_ydxd::e#5 -unsigned int bitmap_line_ydxd::e#6 -unsigned int bitmap_line_ydxd::x -unsigned int bitmap_line_ydxd::x#0 -unsigned int bitmap_line_ydxd::x#1 -unsigned int bitmap_line_ydxd::x#2 -unsigned int bitmap_line_ydxd::x#3 -unsigned int bitmap_line_ydxd::x#4 -unsigned int bitmap_line_ydxd::x#5 -unsigned int bitmap_line_ydxd::x#6 -unsigned int bitmap_line_ydxd::x#7 -unsigned int bitmap_line_ydxd::xd -unsigned int bitmap_line_ydxd::xd#0 -unsigned int bitmap_line_ydxd::xd#1 -unsigned int bitmap_line_ydxd::xd#2 -unsigned int bitmap_line_ydxd::xd#3 -unsigned int bitmap_line_ydxd::xd#4 -unsigned int bitmap_line_ydxd::xd#5 -unsigned int bitmap_line_ydxd::xd#6 -unsigned int bitmap_line_ydxd::y -unsigned int bitmap_line_ydxd::y#0 -unsigned int bitmap_line_ydxd::y#1 -unsigned int bitmap_line_ydxd::y#2 -unsigned int bitmap_line_ydxd::y#3 -unsigned int bitmap_line_ydxd::y#4 -unsigned int bitmap_line_ydxd::y#5 -unsigned int bitmap_line_ydxd::y#6 -unsigned int bitmap_line_ydxd::y#7 -unsigned int bitmap_line_ydxd::y#8 -unsigned int bitmap_line_ydxd::y1 -unsigned int bitmap_line_ydxd::y1#0 -unsigned int bitmap_line_ydxd::y1#1 -unsigned int bitmap_line_ydxd::y1#2 -unsigned int bitmap_line_ydxd::y1#3 -unsigned int bitmap_line_ydxd::y1#4 -unsigned int bitmap_line_ydxd::y1#5 -unsigned int bitmap_line_ydxd::y1#6 -unsigned int bitmap_line_ydxd::yd -unsigned int bitmap_line_ydxd::yd#0 -unsigned int bitmap_line_ydxd::yd#1 -unsigned int bitmap_line_ydxd::yd#2 -unsigned int bitmap_line_ydxd::yd#3 -unsigned int bitmap_line_ydxd::yd#4 -unsigned int bitmap_line_ydxd::yd#5 -unsigned int bitmap_line_ydxd::yd#6 -void bitmap_line_ydxi(unsigned int y , unsigned int x , unsigned int y1 , unsigned int yd , unsigned int xd , char c) -unsigned int bitmap_line_ydxi::$2 -bool bitmap_line_ydxi::$3 -bool bitmap_line_ydxi::$4 -unsigned int bitmap_line_ydxi::$5 -number bitmap_line_ydxi::$6 -bool bitmap_line_ydxi::$7 -char bitmap_line_ydxi::c -char bitmap_line_ydxi::c#0 -char bitmap_line_ydxi::c#1 -char bitmap_line_ydxi::c#2 -char bitmap_line_ydxi::c#3 -char bitmap_line_ydxi::c#4 -char bitmap_line_ydxi::c#5 -char bitmap_line_ydxi::c#6 -unsigned int bitmap_line_ydxi::e -unsigned int bitmap_line_ydxi::e#0 -unsigned int bitmap_line_ydxi::e#1 -unsigned int bitmap_line_ydxi::e#2 -unsigned int bitmap_line_ydxi::e#3 -unsigned int bitmap_line_ydxi::e#4 -unsigned int bitmap_line_ydxi::e#5 -unsigned int bitmap_line_ydxi::e#6 -unsigned int bitmap_line_ydxi::x -unsigned int bitmap_line_ydxi::x#0 -unsigned int bitmap_line_ydxi::x#1 -unsigned int bitmap_line_ydxi::x#2 -unsigned int bitmap_line_ydxi::x#3 -unsigned int bitmap_line_ydxi::x#4 -unsigned int bitmap_line_ydxi::x#5 -unsigned int bitmap_line_ydxi::x#6 -unsigned int bitmap_line_ydxi::x#7 -unsigned int bitmap_line_ydxi::xd -unsigned int bitmap_line_ydxi::xd#0 -unsigned int bitmap_line_ydxi::xd#1 -unsigned int bitmap_line_ydxi::xd#2 -unsigned int bitmap_line_ydxi::xd#3 -unsigned int bitmap_line_ydxi::xd#4 -unsigned int bitmap_line_ydxi::xd#5 -unsigned int bitmap_line_ydxi::xd#6 -unsigned int bitmap_line_ydxi::y -unsigned int bitmap_line_ydxi::y#0 -unsigned int bitmap_line_ydxi::y#1 -unsigned int bitmap_line_ydxi::y#2 -unsigned int bitmap_line_ydxi::y#3 -unsigned int bitmap_line_ydxi::y#4 -unsigned int bitmap_line_ydxi::y#5 -unsigned int bitmap_line_ydxi::y#6 -unsigned int bitmap_line_ydxi::y#7 -unsigned int bitmap_line_ydxi::y1 -unsigned int bitmap_line_ydxi::y1#0 -unsigned int bitmap_line_ydxi::y1#1 -unsigned int bitmap_line_ydxi::y1#2 -unsigned int bitmap_line_ydxi::y1#3 -unsigned int bitmap_line_ydxi::y1#4 -unsigned int bitmap_line_ydxi::y1#5 -unsigned int bitmap_line_ydxi::y1#6 -unsigned int bitmap_line_ydxi::yd -unsigned int bitmap_line_ydxi::yd#0 -unsigned int bitmap_line_ydxi::yd#1 -unsigned int bitmap_line_ydxi::yd#2 -unsigned int bitmap_line_ydxi::yd#3 -unsigned int bitmap_line_ydxi::yd#4 -unsigned int bitmap_line_ydxi::yd#5 -unsigned int bitmap_line_ydxi::yd#6 -void bitmap_plot(unsigned int x , unsigned int y , char c) -char bitmap_plot::$1 -unsigned int bitmap_plot::$10 -bool bitmap_plot::$11 -char bitmap_plot::$2 -char bitmap_plot::$3 -char bitmap_plot::$4 -char bitmap_plot::$6 -char bitmap_plot::$7 -char bitmap_plot::$8 -unsigned int bitmap_plot::$9 -char bitmap_plot::bitshift -char bitmap_plot::bitshift#0 -char bitmap_plot::bitshift#1 -char bitmap_plot::c -char bitmap_plot::c#0 -char bitmap_plot::c#1 -char bitmap_plot::c#2 -char bitmap_plot::c#3 -char bitmap_plot::c#4 -char bitmap_plot::c#5 -char bitmap_plot::c#6 -char bitmap_plot::c#7 -char bitmap_plot::c#8 -char bitmap_plot::c#9 -unsigned long bitmap_plot::plot_x -unsigned long bitmap_plot::plot_x#0 -unsigned long bitmap_plot::plot_y -unsigned long bitmap_plot::plot_y#0 -unsigned long bitmap_plot::plotter -unsigned long bitmap_plot::plotter#0 -unsigned long bitmap_plot::plotter#1 -unsigned long bitmap_plot::plotter#2 -unsigned long bitmap_plot::plotter#3 -char bitmap_plot::vera_vram_address01_$0 -char bitmap_plot::vera_vram_address01_$1 -char bitmap_plot::vera_vram_address01_$2 -char bitmap_plot::vera_vram_address01_$3 -unsigned long bitmap_plot::vera_vram_address01_bankaddr -unsigned long bitmap_plot::vera_vram_address01_bankaddr#0 -unsigned long bitmap_plot::vera_vram_address01_bankaddr#1 -char bitmap_plot::vera_vram_address01_incr -char bitmap_plot::vera_vram_address01_incr#0 -char bitmap_plot::vera_vram_address01_incr#1 -unsigned int bitmap_plot::x -unsigned int bitmap_plot::x#0 -unsigned int bitmap_plot::x#1 -unsigned int bitmap_plot::x#2 -unsigned int bitmap_plot::x#3 -unsigned int bitmap_plot::x#4 -unsigned int bitmap_plot::x#5 -unsigned int bitmap_plot::x#6 -unsigned int bitmap_plot::x#7 -unsigned int bitmap_plot::x#8 -unsigned int bitmap_plot::x#9 -unsigned int bitmap_plot::y -unsigned int bitmap_plot::y#0 -unsigned int bitmap_plot::y#1 -unsigned int bitmap_plot::y#2 -unsigned int bitmap_plot::y#3 -unsigned int bitmap_plot::y#4 -__constant const char bitmasks[5] = { $80, $c0, $f0, $ff } -__constant const signed char bitshifts[5] = { 7, 6, 4, 0 } -void clearline() -char clearline::$1 -char clearline::$2 -bool clearline::$4 -char clearline::$5 -char *clearline::addr -char *clearline::addr#0 -unsigned int clearline::c -unsigned int clearline::c#0 -unsigned int clearline::c#1 -unsigned int clearline::c#2 -unsigned int clearline::c#3 -char clearline::color -char clearline::color#0 -char clearline::color#1 -char clearline::color#2 -void clrscr() -char clrscr::$0 -char clrscr::$1 -char clrscr::$2 -bool clrscr::$4 -char clrscr::$5 -char clrscr::$6 -char clrscr::$7 -bool clrscr::$8 -char clrscr::$9 -char clrscr::c -char clrscr::c#0 -char clrscr::c#1 -char clrscr::c#2 -char clrscr::c#3 -char *clrscr::ch -char *clrscr::ch#0 -char clrscr::color -char clrscr::color#0 -char clrscr::color#1 -char clrscr::color#2 -char clrscr::color#3 -char clrscr::color#4 -char clrscr::color#5 -char clrscr::l -char clrscr::l#0 -char clrscr::l#1 -char clrscr::l#2 -char clrscr::l#3 -char clrscr::l#4 -char clrscr::l#5 -char clrscr::l#6 -char *clrscr::line_text -char *clrscr::line_text#0 -char *clrscr::line_text#1 -char *clrscr::line_text#2 -char *clrscr::line_text#3 -char *clrscr::line_text#4 -char *clrscr::line_text#5 -char *clrscr::line_text#6 -char *clrscr::line_text#7 -char *clrscr::line_text#8 -__constant char conio_cursor_x[2] = { 0, 0 } -__constant char conio_cursor_y[2] = { 0, 0 } -__loadstore unsigned int conio_height -__constant unsigned int conio_line_text[2] = { 0, 0 } -__loadstore char conio_rowshift -__loadstore unsigned int conio_rowskip -__loadstore volatile char conio_screen_height -__loadstore char conio_screen_layer -__loadstore volatile char conio_screen_width -__constant char conio_scroll_enable[2] = { 1, 1 } -__loadstore unsigned int conio_width -void conio_x16_init() -bool conio_x16_init::$7 -bool conio_x16_init::$8 -number conio_x16_init::$9 -__constant char * const conio_x16_init::BASIC_CURSOR_LINE = (char *)$d6 -char conio_x16_init::line -char conio_x16_init::line#0 -char conio_x16_init::line#1 -char conio_x16_init::line#2 -char conio_x16_init::line#3 -char conio_x16_init::line#4 -char conio_x16_init::line#5 -char conio_x16_init::line#6 -char conio_x16_init::line#7 -char conio_x16_init::line#8 -char conio_x16_init::line#9 -__stackcall void cputc(char c) -bool cputc::$11 -bool cputc::$12 -char cputc::$15 -unsigned int cputc::$16 -bool cputc::$17 -char cputc::$2 -bool cputc::$3 -char cputc::$4 -char cputc::$5 -char cputc::$6 -bool cputc::$8 -bool cputc::$9 -__constant char cputc::OFFSET_STACK_C = 0 -char cputc::c -char cputc::c#0 -char cputc::c#1 -char cputc::c#2 -char cputc::color -char cputc::color#0 -char cputc::color#1 -char *cputc::conio_addr -char *cputc::conio_addr#0 -char *cputc::conio_addr#1 -char *cputc::conio_addr#2 -char cputc::scroll_enable -char cputc::scroll_enable#0 -void cputln() -char cputln::$2 -char cputln::$3 -unsigned int cputln::temp -unsigned int cputln::temp#0 -unsigned int cputln::temp#1 -void cscroll() -bool cscroll::$0 -bool cscroll::$1 -bool cscroll::$2 -bool cscroll::$3 -number cscroll::$5 -bool cscroll::$7 -unsigned int divr16u(unsigned int dividend , unsigned int divisor , unsigned int rem) -unsigned int divr16u::$0 -char divr16u::$1 -unsigned int divr16u::$10 -bool divr16u::$11 -number divr16u::$2 -bool divr16u::$3 -bool divr16u::$4 -number divr16u::$5 -unsigned int divr16u::$6 -unsigned int divr16u::$7 -bool divr16u::$8 -bool divr16u::$9 -unsigned int divr16u::dividend -unsigned int divr16u::dividend#0 -unsigned int divr16u::dividend#1 -unsigned int divr16u::dividend#2 -unsigned int divr16u::dividend#3 -unsigned int divr16u::dividend#4 -unsigned int divr16u::dividend#5 -unsigned int divr16u::dividend#6 -unsigned int divr16u::dividend#7 -unsigned int divr16u::divisor -unsigned int divr16u::divisor#0 -unsigned int divr16u::divisor#1 -unsigned int divr16u::divisor#2 -unsigned int divr16u::divisor#3 -unsigned int divr16u::divisor#4 -unsigned int divr16u::divisor#5 -unsigned int divr16u::divisor#6 -char divr16u::i -char divr16u::i#0 -char divr16u::i#1 -char divr16u::i#2 -char divr16u::i#3 -char divr16u::i#4 -char divr16u::i#5 -char divr16u::i#6 -unsigned int divr16u::quotient -unsigned int divr16u::quotient#0 -unsigned int divr16u::quotient#1 -unsigned int divr16u::quotient#2 -unsigned int divr16u::quotient#3 -unsigned int divr16u::quotient#4 -unsigned int divr16u::quotient#5 -unsigned int divr16u::quotient#6 -unsigned int divr16u::quotient#7 -unsigned int divr16u::quotient#8 -unsigned int divr16u::rem -unsigned int divr16u::rem#0 -unsigned int divr16u::rem#1 -unsigned int divr16u::rem#10 -unsigned int divr16u::rem#2 -unsigned int divr16u::rem#3 -unsigned int divr16u::rem#4 -unsigned int divr16u::rem#5 -unsigned int divr16u::rem#6 -unsigned int divr16u::rem#7 -unsigned int divr16u::rem#8 -unsigned int divr16u::rem#9 -unsigned int divr16u::return -unsigned int divr16u::return#0 -unsigned int divr16u::return#1 -unsigned int divr16u::return#2 -unsigned int divr16u::return#3 -void gotoxy(char x , char y) -bool gotoxy::$0 -bool gotoxy::$1 -bool gotoxy::$2 -bool gotoxy::$3 -char gotoxy::$5 -unsigned int gotoxy::$6 -unsigned int gotoxy::line_offset -unsigned int gotoxy::line_offset#0 -char gotoxy::x -char gotoxy::x#0 -char gotoxy::x#1 -char gotoxy::x#10 -char gotoxy::x#2 -char gotoxy::x#3 -char gotoxy::x#4 -char gotoxy::x#5 -char gotoxy::x#6 -char gotoxy::x#7 -char gotoxy::x#8 -char gotoxy::x#9 -char gotoxy::y -char gotoxy::y#0 -char gotoxy::y#1 -char gotoxy::y#10 -char gotoxy::y#2 -char gotoxy::y#3 -char gotoxy::y#4 -char gotoxy::y#5 -char gotoxy::y#6 -char gotoxy::y#7 -char gotoxy::y#8 -char gotoxy::y#9 -__constant unsigned int hdeltas[$10] = { 0, $50, $28, $14, 0, $a0, $50, $28, 0, $140, $a0, $50, 0, $280, $140, $a0 } -void insertup() -bool insertup::$2 -number insertup::$3 -char *insertup::$6 -char insertup::cy -char insertup::cy#0 -char insertup::cy#1 -char insertup::cy#2 -char insertup::cy#3 -char insertup::i -char insertup::i#0 -char insertup::i#1 -char insertup::i#2 -char insertup::i#3 -char insertup::i#4 -unsigned int insertup::line -unsigned int insertup::line#0 -char *insertup::start -char *insertup::start#0 -char insertup::width -char insertup::width#0 -char insertup::width#1 -char insertup::width#2 -char insertup::width#3 -char kbhit() -__constant char * const kbhit::GETIN = (char *)$ffe4 -__constant char * const kbhit::IN_DEV = (char *)$28a -__loadstore volatile char kbhit::ch -__constant char * const kbhit::chptr = &kbhit::ch -char kbhit::return -char kbhit::return#0 -char kbhit::return#1 -char kbhit::return#2 -char kbhit::return#3 -char kbhit::return#4 -char kbhit::return#5 -char kbhit::return#6 -void main() -char main::$30 -bool main::$31 -unsigned int main::$32 -unsigned int main::$33 -unsigned int main::$34 -unsigned int main::$35 -unsigned int main::$36 -unsigned int main::$37 -unsigned int main::$38 -unsigned int main::$39 -unsigned int main::$40 -number main::$41 -char main::$43 -bool main::$44 -bool main::$46 -bool main::$47 -bool main::$48 -bool main::$49 -char main::bgcolor1_color -char main::bgcolor1_color#0 -char main::bgcolor1_color#1 -char main::bgcolor2_color -char main::bgcolor2_color#0 -char main::bgcolor2_color#1 -char main::bgcolor3_color -char main::bgcolor3_color#0 -char main::bgcolor3_color#1 -char main::color -char main::color#0 -char main::color#1 -char main::color#2 -char main::color#3 -char main::color#4 -char main::color#5 -char main::color#6 -__constant char main::s[$16] = "vera in bitmap mode, -" -__constant char main::s1[$1f] = "color depth 8 bits per pixel. -" -__constant char main::s2[$29] = "in this mode, it is possible to display -" -__constant char main::s3[$19] = "graphics in 256 colors. -" -__constant char main::s4[$10] = "press a key ..." -__constant char main::s5[$27] = "here you see all the colors possible. -" -__constant char main::s6[$10] = "press a key ..." -char main::textcolor1_color -char main::textcolor1_color#0 -char main::textcolor1_color#1 -char main::textcolor2_color -char main::textcolor2_color#0 -char main::textcolor2_color#1 -char main::textcolor3_color -char main::textcolor3_color#0 -char main::textcolor3_color#1 -char main::textcolor4_color -char main::textcolor4_color#0 -char main::textcolor4_color#1 -char main::textcolor5_color -char main::textcolor5_color#0 -char main::textcolor5_color#1 -char main::vera_layer_show1_layer -char main::vera_layer_show1_layer#0 -char main::vera_layer_show1_layer#1 -unsigned int main::x -unsigned int main::x#0 -unsigned int main::x#1 -unsigned int main::x#2 -unsigned int main::x#3 -unsigned int main::x#4 -unsigned int main::x#5 -unsigned int main::x#6 -void memcpy_in_vram(char dest_bank , void *dest , char dest_increment , char src_bank , void *src , char src_increment , unsigned int num) -char memcpy_in_vram::$0 -char memcpy_in_vram::$1 -char memcpy_in_vram::$2 -char memcpy_in_vram::$3 -char memcpy_in_vram::$4 -char memcpy_in_vram::$5 -bool memcpy_in_vram::$6 -void *memcpy_in_vram::dest -void *memcpy_in_vram::dest#0 -void *memcpy_in_vram::dest#1 -void *memcpy_in_vram::dest#2 -char memcpy_in_vram::dest_bank -char memcpy_in_vram::dest_bank#0 -char memcpy_in_vram::dest_bank#1 -char memcpy_in_vram::dest_bank#2 -char memcpy_in_vram::dest_increment -char memcpy_in_vram::dest_increment#0 -char memcpy_in_vram::dest_increment#1 -char memcpy_in_vram::dest_increment#2 -unsigned int memcpy_in_vram::i -unsigned int memcpy_in_vram::i#0 -unsigned int memcpy_in_vram::i#1 -unsigned int memcpy_in_vram::i#2 -unsigned int memcpy_in_vram::i#3 -unsigned int memcpy_in_vram::num -unsigned int memcpy_in_vram::num#0 -unsigned int memcpy_in_vram::num#1 -unsigned int memcpy_in_vram::num#2 -unsigned int memcpy_in_vram::num#3 -unsigned int memcpy_in_vram::num#4 -void *memcpy_in_vram::src -void *memcpy_in_vram::src#0 -void *memcpy_in_vram::src#1 -void *memcpy_in_vram::src#2 -char memcpy_in_vram::src_bank -char memcpy_in_vram::src_bank#0 -char memcpy_in_vram::src_bank#1 -char memcpy_in_vram::src_bank#2 -char memcpy_in_vram::src_increment -char memcpy_in_vram::src_increment#0 -char memcpy_in_vram::src_increment#1 -char memcpy_in_vram::src_increment#2 -void memset_vram(char vbank , void *vdest , char data , unsigned long num) -char memset_vram::$0 -char memset_vram::$1 -char memset_vram::$2 -bool memset_vram::$3 -char memset_vram::data -char memset_vram::data#0 -char memset_vram::data#1 -char memset_vram::data#2 -char memset_vram::data#3 -unsigned long memset_vram::i -unsigned long memset_vram::i#0 -unsigned long memset_vram::i#1 -unsigned long memset_vram::i#2 -unsigned long memset_vram::i#3 -unsigned long memset_vram::num -unsigned long memset_vram::num#0 -unsigned long memset_vram::num#1 -unsigned long memset_vram::num#2 -unsigned long memset_vram::num#3 -char memset_vram::vbank -char memset_vram::vbank#0 -char memset_vram::vbank#1 -void *memset_vram::vdest -void *memset_vram::vdest#0 -void *memset_vram::vdest#1 -unsigned int modr16u(unsigned int dividend , unsigned int divisor , unsigned int rem) -unsigned int modr16u::dividend -unsigned int modr16u::dividend#0 -unsigned int modr16u::dividend#1 -unsigned int modr16u::dividend#2 -unsigned int modr16u::dividend#3 -unsigned int modr16u::dividend#4 -unsigned int modr16u::divisor -unsigned int modr16u::divisor#0 -unsigned int modr16u::divisor#1 -unsigned int modr16u::divisor#2 -unsigned int modr16u::divisor#3 -unsigned int modr16u::divisor#4 -unsigned int modr16u::rem -unsigned int modr16u::rem#0 -unsigned int modr16u::rem#1 -unsigned int modr16u::rem#2 -unsigned int modr16u::rem#3 -unsigned int modr16u::rem#4 -unsigned int modr16u::return -unsigned int modr16u::return#0 -unsigned int modr16u::return#1 -unsigned int modr16u::return#10 -unsigned int modr16u::return#2 -unsigned int modr16u::return#3 -unsigned int modr16u::return#4 -unsigned int modr16u::return#5 -unsigned int modr16u::return#6 -unsigned int modr16u::return#7 -unsigned int modr16u::return#8 -unsigned int modr16u::return#9 -unsigned long mul16u(unsigned int a , unsigned int b) -bool mul16u::$0 -number mul16u::$1 -bool mul16u::$2 -bool mul16u::$3 -unsigned long mul16u::$4 -unsigned int mul16u::$5 -unsigned long mul16u::$6 -unsigned int mul16u::a -unsigned int mul16u::a#0 -unsigned int mul16u::a#1 -unsigned int mul16u::a#2 -unsigned int mul16u::a#3 -unsigned int mul16u::a#4 -unsigned int mul16u::a#5 -unsigned int mul16u::a#6 -unsigned int mul16u::b -unsigned int mul16u::b#0 -unsigned int mul16u::b#1 -unsigned long mul16u::mb -unsigned long mul16u::mb#0 -unsigned long mul16u::mb#1 -unsigned long mul16u::mb#2 -unsigned long mul16u::mb#3 -unsigned long mul16u::mb#4 -unsigned long mul16u::mb#5 -unsigned long mul16u::res -unsigned long mul16u::res#0 -unsigned long mul16u::res#1 -unsigned long mul16u::res#2 -unsigned long mul16u::res#3 -unsigned long mul16u::res#4 -unsigned long mul16u::res#5 -unsigned long mul16u::res#6 -unsigned long mul16u::return -unsigned long mul16u::return#0 -unsigned long mul16u::return#1 -unsigned long mul16u::return#2 -unsigned long mul16u::return#3 -unsigned long mul16u::return#4 -void printf_str(void (*putc)(char) , const char *s) -char printf_str::$0 -bool printf_str::$2 -char printf_str::c -char printf_str::c#0 -char printf_str::c#1 -char printf_str::c#2 -void (*printf_str::putc)(char) -void (*printf_str::putc#0)(char) -void (*printf_str::putc#1)(char) -void (*printf_str::putc#2)(char) -void (*printf_str::putc#3)(char) -void (*printf_str::putc#4)(char) -void (*printf_str::putc#5)(char) -void (*printf_str::putc#6)(char) -void (*printf_str::putc#7)(char) -void (*printf_str::putc#8)(char) -void (*printf_str::putc#9)(char) -const char *printf_str::s -const char *printf_str::s#0 -const char *printf_str::s#1 -const char *printf_str::s#10 -const char *printf_str::s#2 -const char *printf_str::s#3 -const char *printf_str::s#4 -const char *printf_str::s#5 -const char *printf_str::s#6 -const char *printf_str::s#7 -const char *printf_str::s#8 -const char *printf_str::s#9 -unsigned int rand() -unsigned int rand::$0 -unsigned int rand::$1 -unsigned int rand::$2 -unsigned int rand::return -unsigned int rand::return#0 -unsigned int rand::return#1 -unsigned int rand::return#10 -unsigned int rand::return#11 -unsigned int rand::return#12 -unsigned int rand::return#2 -unsigned int rand::return#3 -unsigned int rand::return#4 -unsigned int rand::return#5 -unsigned int rand::return#6 -unsigned int rand::return#7 -unsigned int rand::return#8 -unsigned int rand::return#9 -unsigned int rand_state -unsigned int rand_state#0 -unsigned int rand_state#1 -unsigned int rand_state#10 -unsigned int rand_state#11 -unsigned int rand_state#12 -unsigned int rand_state#13 -unsigned int rand_state#14 -unsigned int rand_state#15 -unsigned int rand_state#16 -unsigned int rand_state#17 -unsigned int rand_state#18 -unsigned int rand_state#19 -unsigned int rand_state#2 -unsigned int rand_state#20 -unsigned int rand_state#21 -unsigned int rand_state#22 -unsigned int rand_state#23 -unsigned int rand_state#24 -unsigned int rand_state#25 -unsigned int rand_state#26 -unsigned int rand_state#27 -unsigned int rand_state#28 -unsigned int rand_state#29 -unsigned int rand_state#3 -unsigned int rand_state#30 -unsigned int rand_state#31 -unsigned int rand_state#32 -unsigned int rand_state#33 -unsigned int rand_state#34 -unsigned int rand_state#35 -unsigned int rand_state#36 -unsigned int rand_state#37 -unsigned int rand_state#38 -unsigned int rand_state#39 -unsigned int rand_state#4 -unsigned int rand_state#40 -unsigned int rand_state#41 -unsigned int rand_state#42 -unsigned int rand_state#43 -unsigned int rand_state#44 -unsigned int rand_state#45 -unsigned int rand_state#46 -unsigned int rand_state#47 -unsigned int rand_state#48 -unsigned int rand_state#49 -unsigned int rand_state#5 -unsigned int rand_state#50 -unsigned int rand_state#51 -unsigned int rand_state#52 -unsigned int rand_state#53 -unsigned int rand_state#54 -unsigned int rand_state#55 -unsigned int rand_state#56 -unsigned int rand_state#57 -unsigned int rand_state#58 -unsigned int rand_state#59 -unsigned int rand_state#6 -unsigned int rand_state#60 -unsigned int rand_state#61 -unsigned int rand_state#62 -unsigned int rand_state#63 -unsigned int rand_state#64 -unsigned int rand_state#65 -unsigned int rand_state#66 -unsigned int rand_state#67 -unsigned int rand_state#68 -unsigned int rand_state#69 -unsigned int rand_state#7 -unsigned int rand_state#70 -unsigned int rand_state#71 -unsigned int rand_state#72 -unsigned int rand_state#73 -unsigned int rand_state#74 -unsigned int rand_state#75 -unsigned int rand_state#76 -unsigned int rand_state#77 -unsigned int rand_state#78 -unsigned int rand_state#79 -unsigned int rand_state#8 -unsigned int rand_state#80 -unsigned int rand_state#81 -unsigned int rand_state#82 -unsigned int rand_state#83 -unsigned int rand_state#84 -unsigned int rand_state#85 -unsigned int rand_state#86 -unsigned int rand_state#87 -unsigned int rand_state#9 -unsigned int rem16u -unsigned int rem16u#0 -unsigned int rem16u#1 -unsigned int rem16u#10 -unsigned int rem16u#11 -unsigned int rem16u#12 -unsigned int rem16u#13 -unsigned int rem16u#14 -unsigned int rem16u#15 -unsigned int rem16u#16 -unsigned int rem16u#17 -unsigned int rem16u#18 -unsigned int rem16u#19 -unsigned int rem16u#2 -unsigned int rem16u#20 -unsigned int rem16u#21 -unsigned int rem16u#22 -unsigned int rem16u#23 -unsigned int rem16u#24 -unsigned int rem16u#25 -unsigned int rem16u#26 -unsigned int rem16u#27 -unsigned int rem16u#28 -unsigned int rem16u#29 -unsigned int rem16u#3 -unsigned int rem16u#30 -unsigned int rem16u#31 -unsigned int rem16u#32 -unsigned int rem16u#33 -unsigned int rem16u#34 -unsigned int rem16u#35 -unsigned int rem16u#36 -unsigned int rem16u#37 -unsigned int rem16u#38 -unsigned int rem16u#39 -unsigned int rem16u#4 -unsigned int rem16u#40 -unsigned int rem16u#41 -unsigned int rem16u#42 -unsigned int rem16u#43 -unsigned int rem16u#44 -unsigned int rem16u#45 -unsigned int rem16u#46 -unsigned int rem16u#47 -unsigned int rem16u#48 -unsigned int rem16u#49 -unsigned int rem16u#5 -unsigned int rem16u#50 -unsigned int rem16u#51 -unsigned int rem16u#52 -unsigned int rem16u#53 -unsigned int rem16u#54 -unsigned int rem16u#55 -unsigned int rem16u#56 -unsigned int rem16u#57 -unsigned int rem16u#58 -unsigned int rem16u#59 -unsigned int rem16u#6 -unsigned int rem16u#60 -unsigned int rem16u#61 -unsigned int rem16u#62 -unsigned int rem16u#63 -unsigned int rem16u#64 -unsigned int rem16u#65 -unsigned int rem16u#66 -unsigned int rem16u#67 -unsigned int rem16u#68 -unsigned int rem16u#69 -unsigned int rem16u#7 -unsigned int rem16u#70 -unsigned int rem16u#71 -unsigned int rem16u#72 -unsigned int rem16u#73 -unsigned int rem16u#74 -unsigned int rem16u#75 -unsigned int rem16u#76 -unsigned int rem16u#77 -unsigned int rem16u#78 -unsigned int rem16u#79 -unsigned int rem16u#8 -unsigned int rem16u#80 -unsigned int rem16u#81 -unsigned int rem16u#82 -unsigned int rem16u#83 -unsigned int rem16u#84 -unsigned int rem16u#85 -unsigned int rem16u#86 -unsigned int rem16u#87 -unsigned int rem16u#88 -unsigned int rem16u#9 -void screenlayer(char layer) -char screenlayer::$0 -unsigned int screenlayer::$1 -unsigned int screenlayer::$2 -char screenlayer::$3 -unsigned int screenlayer::$4 -unsigned int screenlayer::$5 -char screenlayer::layer -char screenlayer::layer#0 -char screenlayer::layer#1 -char screenlayer::layer#2 -char screenlayer::layer#3 -char screenlayer::vera_layer_get_height1_$0 -char screenlayer::vera_layer_get_height1_$1 -char screenlayer::vera_layer_get_height1_$2 -char screenlayer::vera_layer_get_height1_$3 -char *screenlayer::vera_layer_get_height1_config -char *screenlayer::vera_layer_get_height1_config#0 -char screenlayer::vera_layer_get_height1_layer -char screenlayer::vera_layer_get_height1_layer#0 -char screenlayer::vera_layer_get_height1_layer#1 -unsigned int screenlayer::vera_layer_get_height1_return -unsigned int screenlayer::vera_layer_get_height1_return#0 -unsigned int screenlayer::vera_layer_get_height1_return#1 -unsigned int screenlayer::vera_layer_get_height1_return#2 -unsigned int screenlayer::vera_layer_get_height1_return#3 -char screenlayer::vera_layer_get_width1_$0 -char screenlayer::vera_layer_get_width1_$1 -char screenlayer::vera_layer_get_width1_$2 -char screenlayer::vera_layer_get_width1_$3 -char *screenlayer::vera_layer_get_width1_config -char *screenlayer::vera_layer_get_width1_config#0 -char screenlayer::vera_layer_get_width1_layer -char screenlayer::vera_layer_get_width1_layer#0 -char screenlayer::vera_layer_get_width1_layer#1 -unsigned int screenlayer::vera_layer_get_width1_return -unsigned int screenlayer::vera_layer_get_width1_return#0 -unsigned int screenlayer::vera_layer_get_width1_return#1 -unsigned int screenlayer::vera_layer_get_width1_return#2 -unsigned int screenlayer::vera_layer_get_width1_return#3 -void screensize(char *x , char *y) -number screensize::$1 -number screensize::$3 -char screensize::hscale -char screensize::hscale#0 -char screensize::vscale -char screensize::vscale#0 -char *screensize::x -char *screensize::x#0 -char *screensize::x#1 -char *screensize::y -char *screensize::y#0 -char *screensize::y#1 -__constant const unsigned int vdeltas[4] = { 0, $1e0, $f0, $a0 } -char vera_display_get_hscale() -bool vera_display_get_hscale::$0 -bool vera_display_get_hscale::$1 -bool vera_display_get_hscale::$2 -__constant char vera_display_get_hscale::hscale[4] = { 0, $80, $40, $20 } -char vera_display_get_hscale::return -char vera_display_get_hscale::return#0 -char vera_display_get_hscale::return#1 -char vera_display_get_hscale::return#2 -char vera_display_get_hscale::return#3 -char vera_display_get_hscale::return#4 -char vera_display_get_hscale::s -char vera_display_get_hscale::s#0 -char vera_display_get_hscale::s#1 -char vera_display_get_hscale::s#2 -char vera_display_get_hscale::s#3 -char vera_display_get_hscale::s#4 -char vera_display_get_hscale::scale -char vera_display_get_hscale::scale#0 -char vera_display_get_hscale::scale#1 -char vera_display_get_hscale::scale#2 -char vera_display_get_hscale::scale#3 -char vera_display_get_hscale::scale#4 -char vera_display_get_vscale() -bool vera_display_get_vscale::$0 -bool vera_display_get_vscale::$1 -bool vera_display_get_vscale::$2 -char vera_display_get_vscale::return -char vera_display_get_vscale::return#0 -char vera_display_get_vscale::return#1 -char vera_display_get_vscale::return#2 -char vera_display_get_vscale::return#3 -char vera_display_get_vscale::return#4 -char vera_display_get_vscale::s -char vera_display_get_vscale::s#0 -char vera_display_get_vscale::s#1 -char vera_display_get_vscale::s#2 -char vera_display_get_vscale::s#3 -char vera_display_get_vscale::s#4 -char vera_display_get_vscale::scale -char vera_display_get_vscale::scale#0 -char vera_display_get_vscale::scale#1 -char vera_display_get_vscale::scale#2 -char vera_display_get_vscale::scale#3 -char vera_display_get_vscale::scale#4 -__constant char vera_display_get_vscale::vscale[4] = { 0, $80, $40, $20 } -__constant char vera_layer_backcolor[2] = { BLUE, BLUE } -__constant char *vera_layer_config[2] = { VERA_L0_CONFIG, VERA_L1_CONFIG } -__constant char vera_layer_enable[2] = { VERA_LAYER0_ENABLE, VERA_LAYER1_ENABLE } -char vera_layer_get_backcolor(char layer) -char vera_layer_get_backcolor::layer -char vera_layer_get_backcolor::layer#0 -char vera_layer_get_backcolor::layer#1 -char vera_layer_get_backcolor::return -char vera_layer_get_backcolor::return#0 -char vera_layer_get_backcolor::return#1 -char vera_layer_get_backcolor::return#2 -char vera_layer_get_backcolor::return#3 -char vera_layer_get_backcolor::return#4 -char vera_layer_get_color(char layer) -char vera_layer_get_color::$0 -char vera_layer_get_color::$1 -char vera_layer_get_color::$2 -char vera_layer_get_color::$3 -bool vera_layer_get_color::$4 -char *vera_layer_get_color::addr -char *vera_layer_get_color::addr#0 -char vera_layer_get_color::layer -char vera_layer_get_color::layer#0 -char vera_layer_get_color::layer#1 -char vera_layer_get_color::layer#2 -char vera_layer_get_color::layer#3 -char vera_layer_get_color::layer#4 -char vera_layer_get_color::return -char vera_layer_get_color::return#0 -char vera_layer_get_color::return#1 -char vera_layer_get_color::return#2 -char vera_layer_get_color::return#3 -char vera_layer_get_color::return#4 -char vera_layer_get_color::return#5 -char vera_layer_get_color::return#6 -char vera_layer_get_color::return#7 -char vera_layer_get_mapbase_bank(char layer) -char vera_layer_get_mapbase_bank::layer -char vera_layer_get_mapbase_bank::layer#0 -char vera_layer_get_mapbase_bank::layer#1 -char vera_layer_get_mapbase_bank::return -char vera_layer_get_mapbase_bank::return#0 -char vera_layer_get_mapbase_bank::return#1 -char vera_layer_get_mapbase_bank::return#2 -char vera_layer_get_mapbase_bank::return#3 -char vera_layer_get_mapbase_bank::return#4 -unsigned int vera_layer_get_mapbase_offset(char layer) -char vera_layer_get_mapbase_offset::$0 -char vera_layer_get_mapbase_offset::layer -char vera_layer_get_mapbase_offset::layer#0 -char vera_layer_get_mapbase_offset::layer#1 -unsigned int vera_layer_get_mapbase_offset::return -unsigned int vera_layer_get_mapbase_offset::return#0 -unsigned int vera_layer_get_mapbase_offset::return#1 -unsigned int vera_layer_get_mapbase_offset::return#2 -unsigned int vera_layer_get_mapbase_offset::return#3 -unsigned int vera_layer_get_mapbase_offset::return#4 -char vera_layer_get_rowshift(char layer) -char vera_layer_get_rowshift::layer -char vera_layer_get_rowshift::layer#0 -char vera_layer_get_rowshift::layer#1 -char vera_layer_get_rowshift::return -char vera_layer_get_rowshift::return#0 -char vera_layer_get_rowshift::return#1 -char vera_layer_get_rowshift::return#2 -char vera_layer_get_rowshift::return#3 -char vera_layer_get_rowshift::return#4 -unsigned int vera_layer_get_rowskip(char layer) -char vera_layer_get_rowskip::$0 -char vera_layer_get_rowskip::layer -char vera_layer_get_rowskip::layer#0 -char vera_layer_get_rowskip::layer#1 -unsigned int vera_layer_get_rowskip::return -unsigned int vera_layer_get_rowskip::return#0 -unsigned int vera_layer_get_rowskip::return#1 -unsigned int vera_layer_get_rowskip::return#2 -unsigned int vera_layer_get_rowskip::return#3 -unsigned int vera_layer_get_rowskip::return#4 -char vera_layer_get_textcolor(char layer) -char vera_layer_get_textcolor::layer -char vera_layer_get_textcolor::layer#0 -char vera_layer_get_textcolor::layer#1 -char vera_layer_get_textcolor::return -char vera_layer_get_textcolor::return#0 -char vera_layer_get_textcolor::return#1 -char vera_layer_get_textcolor::return#2 -char vera_layer_get_textcolor::return#3 -char vera_layer_get_textcolor::return#4 -__constant char *vera_layer_mapbase[2] = { VERA_L0_MAPBASE, VERA_L1_MAPBASE } -void vera_layer_mode_bitmap(char layer , unsigned long bitmap_address , unsigned int mapwidth , unsigned int color_depth) -char vera_layer_mode_bitmap::$0 -unsigned int vera_layer_mode_bitmap::$1 -char vera_layer_mode_bitmap::$10 -char vera_layer_mode_bitmap::$2 -unsigned long vera_layer_mode_bitmap::$3 -char vera_layer_mode_bitmap::$9 -unsigned long vera_layer_mode_bitmap::bitmap_address -unsigned long vera_layer_mode_bitmap::bitmap_address#0 -unsigned long vera_layer_mode_bitmap::bitmap_address#1 -unsigned long vera_layer_mode_bitmap::bitmap_address#10 -unsigned long vera_layer_mode_bitmap::bitmap_address#2 -unsigned long vera_layer_mode_bitmap::bitmap_address#3 -unsigned long vera_layer_mode_bitmap::bitmap_address#4 -unsigned long vera_layer_mode_bitmap::bitmap_address#5 -unsigned long vera_layer_mode_bitmap::bitmap_address#6 -unsigned long vera_layer_mode_bitmap::bitmap_address#7 -unsigned long vera_layer_mode_bitmap::bitmap_address#8 -unsigned long vera_layer_mode_bitmap::bitmap_address#9 -unsigned int vera_layer_mode_bitmap::color_depth -unsigned int vera_layer_mode_bitmap::color_depth#0 -unsigned int vera_layer_mode_bitmap::color_depth#1 -unsigned int vera_layer_mode_bitmap::color_depth#2 -unsigned int vera_layer_mode_bitmap::color_depth#3 -unsigned int vera_layer_mode_bitmap::color_depth#4 -char vera_layer_mode_bitmap::config -char vera_layer_mode_bitmap::config#0 -char vera_layer_mode_bitmap::config#1 -char vera_layer_mode_bitmap::config#10 -char vera_layer_mode_bitmap::config#11 -char vera_layer_mode_bitmap::config#12 -char vera_layer_mode_bitmap::config#13 -char vera_layer_mode_bitmap::config#14 -char vera_layer_mode_bitmap::config#15 -char vera_layer_mode_bitmap::config#16 -char vera_layer_mode_bitmap::config#17 -char vera_layer_mode_bitmap::config#18 -char vera_layer_mode_bitmap::config#19 -char vera_layer_mode_bitmap::config#2 -char vera_layer_mode_bitmap::config#3 -char vera_layer_mode_bitmap::config#4 -char vera_layer_mode_bitmap::config#5 -char vera_layer_mode_bitmap::config#6 -char vera_layer_mode_bitmap::config#7 -char vera_layer_mode_bitmap::config#8 -char vera_layer_mode_bitmap::config#9 -char vera_layer_mode_bitmap::layer -char vera_layer_mode_bitmap::layer#0 -char vera_layer_mode_bitmap::layer#1 -char vera_layer_mode_bitmap::layer#10 -char vera_layer_mode_bitmap::layer#11 -char vera_layer_mode_bitmap::layer#12 -char vera_layer_mode_bitmap::layer#13 -char vera_layer_mode_bitmap::layer#14 -char vera_layer_mode_bitmap::layer#15 -char vera_layer_mode_bitmap::layer#16 -char vera_layer_mode_bitmap::layer#2 -char vera_layer_mode_bitmap::layer#3 -char vera_layer_mode_bitmap::layer#4 -char vera_layer_mode_bitmap::layer#5 -char vera_layer_mode_bitmap::layer#6 -char vera_layer_mode_bitmap::layer#7 -char vera_layer_mode_bitmap::layer#8 -char vera_layer_mode_bitmap::layer#9 -unsigned int vera_layer_mode_bitmap::mapwidth -unsigned int vera_layer_mode_bitmap::mapwidth#0 -unsigned int vera_layer_mode_bitmap::mapwidth#1 -unsigned int vera_layer_mode_bitmap::mapwidth#10 -unsigned int vera_layer_mode_bitmap::mapwidth#2 -unsigned int vera_layer_mode_bitmap::mapwidth#3 -unsigned int vera_layer_mode_bitmap::mapwidth#4 -unsigned int vera_layer_mode_bitmap::mapwidth#5 -unsigned int vera_layer_mode_bitmap::mapwidth#6 -unsigned int vera_layer_mode_bitmap::mapwidth#7 -unsigned int vera_layer_mode_bitmap::mapwidth#8 -unsigned int vera_layer_mode_bitmap::mapwidth#9 -char vera_layer_mode_bitmap::tilebase -char vera_layer_mode_bitmap::tilebase#0 -char vera_layer_mode_bitmap::tilebase#1 -char vera_layer_mode_bitmap::tilebase#10 -char vera_layer_mode_bitmap::tilebase#2 -char vera_layer_mode_bitmap::tilebase#3 -char vera_layer_mode_bitmap::tilebase#4 -char vera_layer_mode_bitmap::tilebase#5 -char vera_layer_mode_bitmap::tilebase#6 -char vera_layer_mode_bitmap::tilebase#7 -char vera_layer_mode_bitmap::tilebase#8 -char vera_layer_mode_bitmap::tilebase#9 -void vera_layer_mode_text(char layer , unsigned long mapbase_address , unsigned long tilebase_address , unsigned int mapwidth , unsigned int mapheight , char tilewidth , char tileheight , unsigned int color_mode) -unsigned int vera_layer_mode_text::color_mode -unsigned int vera_layer_mode_text::color_mode#0 -unsigned int vera_layer_mode_text::color_mode#1 -unsigned int vera_layer_mode_text::color_mode#2 -unsigned int vera_layer_mode_text::color_mode#3 -char vera_layer_mode_text::layer -char vera_layer_mode_text::layer#0 -char vera_layer_mode_text::layer#1 -char vera_layer_mode_text::layer#2 -char vera_layer_mode_text::layer#3 -char vera_layer_mode_text::layer#4 -char vera_layer_mode_text::layer#5 -unsigned long vera_layer_mode_text::mapbase_address -unsigned long vera_layer_mode_text::mapbase_address#0 -unsigned long vera_layer_mode_text::mapbase_address#1 -unsigned int vera_layer_mode_text::mapheight -unsigned int vera_layer_mode_text::mapheight#0 -unsigned int vera_layer_mode_text::mapheight#1 -unsigned int vera_layer_mode_text::mapwidth -unsigned int vera_layer_mode_text::mapwidth#0 -unsigned int vera_layer_mode_text::mapwidth#1 -unsigned long vera_layer_mode_text::tilebase_address -unsigned long vera_layer_mode_text::tilebase_address#0 -unsigned long vera_layer_mode_text::tilebase_address#1 -char vera_layer_mode_text::tileheight -char vera_layer_mode_text::tileheight#0 -char vera_layer_mode_text::tileheight#1 -char vera_layer_mode_text::tilewidth -char vera_layer_mode_text::tilewidth#0 -char vera_layer_mode_text::tilewidth#1 -void vera_layer_mode_tile(char layer , unsigned long mapbase_address , unsigned long tilebase_address , unsigned int mapwidth , unsigned int mapheight , char tilewidth , char tileheight , char color_depth) -unsigned int vera_layer_mode_tile::$1 -char vera_layer_mode_tile::$11 -char vera_layer_mode_tile::$12 -char vera_layer_mode_tile::$13 -char vera_layer_mode_tile::$14 -char vera_layer_mode_tile::$15 -char vera_layer_mode_tile::$16 -char vera_layer_mode_tile::$17 -char vera_layer_mode_tile::$18 -char vera_layer_mode_tile::$2 -unsigned long vera_layer_mode_tile::$3 -unsigned int vera_layer_mode_tile::$6 -char vera_layer_mode_tile::$7 -unsigned long vera_layer_mode_tile::$8 -char vera_layer_mode_tile::color_depth -char vera_layer_mode_tile::color_depth#0 -char vera_layer_mode_tile::color_depth#1 -char vera_layer_mode_tile::color_depth#2 -char vera_layer_mode_tile::color_depth#3 -char vera_layer_mode_tile::color_depth#4 -char vera_layer_mode_tile::color_depth#5 -char vera_layer_mode_tile::config -char vera_layer_mode_tile::config#0 -char vera_layer_mode_tile::config#1 -char vera_layer_mode_tile::config#10 -char vera_layer_mode_tile::config#11 -char vera_layer_mode_tile::config#12 -char vera_layer_mode_tile::config#13 -char vera_layer_mode_tile::config#14 -char vera_layer_mode_tile::config#15 -char vera_layer_mode_tile::config#16 -char vera_layer_mode_tile::config#17 -char vera_layer_mode_tile::config#18 -char vera_layer_mode_tile::config#19 -char vera_layer_mode_tile::config#2 -char vera_layer_mode_tile::config#20 -char vera_layer_mode_tile::config#21 -char vera_layer_mode_tile::config#22 -char vera_layer_mode_tile::config#23 -char vera_layer_mode_tile::config#24 -char vera_layer_mode_tile::config#25 -char vera_layer_mode_tile::config#26 -char vera_layer_mode_tile::config#27 -char vera_layer_mode_tile::config#28 -char vera_layer_mode_tile::config#29 -char vera_layer_mode_tile::config#3 -char vera_layer_mode_tile::config#30 -char vera_layer_mode_tile::config#31 -char vera_layer_mode_tile::config#32 -char vera_layer_mode_tile::config#33 -char vera_layer_mode_tile::config#34 -char vera_layer_mode_tile::config#35 -char vera_layer_mode_tile::config#36 -char vera_layer_mode_tile::config#4 -char vera_layer_mode_tile::config#5 -char vera_layer_mode_tile::config#6 -char vera_layer_mode_tile::config#7 -char vera_layer_mode_tile::config#8 -char vera_layer_mode_tile::config#9 -char vera_layer_mode_tile::layer -char vera_layer_mode_tile::layer#0 -char vera_layer_mode_tile::layer#1 -char vera_layer_mode_tile::layer#10 -char vera_layer_mode_tile::layer#11 -char vera_layer_mode_tile::layer#12 -char vera_layer_mode_tile::layer#13 -char vera_layer_mode_tile::layer#14 -char vera_layer_mode_tile::layer#15 -char vera_layer_mode_tile::layer#16 -char vera_layer_mode_tile::layer#17 -char vera_layer_mode_tile::layer#18 -char vera_layer_mode_tile::layer#19 -char vera_layer_mode_tile::layer#2 -char vera_layer_mode_tile::layer#20 -char vera_layer_mode_tile::layer#21 -char vera_layer_mode_tile::layer#22 -char vera_layer_mode_tile::layer#23 -char vera_layer_mode_tile::layer#24 -char vera_layer_mode_tile::layer#25 -char vera_layer_mode_tile::layer#26 -char vera_layer_mode_tile::layer#27 -char vera_layer_mode_tile::layer#28 -char vera_layer_mode_tile::layer#29 -char vera_layer_mode_tile::layer#3 -char vera_layer_mode_tile::layer#30 -char vera_layer_mode_tile::layer#31 -char vera_layer_mode_tile::layer#32 -char vera_layer_mode_tile::layer#33 -char vera_layer_mode_tile::layer#34 -char vera_layer_mode_tile::layer#35 -char vera_layer_mode_tile::layer#36 -char vera_layer_mode_tile::layer#4 -char vera_layer_mode_tile::layer#5 -char vera_layer_mode_tile::layer#6 -char vera_layer_mode_tile::layer#7 -char vera_layer_mode_tile::layer#8 -char vera_layer_mode_tile::layer#9 -char vera_layer_mode_tile::mapbase -char vera_layer_mode_tile::mapbase#0 -unsigned long vera_layer_mode_tile::mapbase_address -unsigned long vera_layer_mode_tile::mapbase_address#0 -unsigned long vera_layer_mode_tile::mapbase_address#1 -unsigned long vera_layer_mode_tile::mapbase_address#10 -unsigned long vera_layer_mode_tile::mapbase_address#11 -unsigned long vera_layer_mode_tile::mapbase_address#12 -unsigned long vera_layer_mode_tile::mapbase_address#13 -unsigned long vera_layer_mode_tile::mapbase_address#14 -unsigned long vera_layer_mode_tile::mapbase_address#15 -unsigned long vera_layer_mode_tile::mapbase_address#16 -unsigned long vera_layer_mode_tile::mapbase_address#17 -unsigned long vera_layer_mode_tile::mapbase_address#18 -unsigned long vera_layer_mode_tile::mapbase_address#19 -unsigned long vera_layer_mode_tile::mapbase_address#2 -unsigned long vera_layer_mode_tile::mapbase_address#20 -unsigned long vera_layer_mode_tile::mapbase_address#21 -unsigned long vera_layer_mode_tile::mapbase_address#22 -unsigned long vera_layer_mode_tile::mapbase_address#23 -unsigned long vera_layer_mode_tile::mapbase_address#24 -unsigned long vera_layer_mode_tile::mapbase_address#25 -unsigned long vera_layer_mode_tile::mapbase_address#26 -unsigned long vera_layer_mode_tile::mapbase_address#27 -unsigned long vera_layer_mode_tile::mapbase_address#28 -unsigned long vera_layer_mode_tile::mapbase_address#3 -unsigned long vera_layer_mode_tile::mapbase_address#4 -unsigned long vera_layer_mode_tile::mapbase_address#5 -unsigned long vera_layer_mode_tile::mapbase_address#6 -unsigned long vera_layer_mode_tile::mapbase_address#7 -unsigned long vera_layer_mode_tile::mapbase_address#8 -unsigned long vera_layer_mode_tile::mapbase_address#9 -unsigned int vera_layer_mode_tile::mapheight -unsigned int vera_layer_mode_tile::mapheight#0 -unsigned int vera_layer_mode_tile::mapheight#1 -unsigned int vera_layer_mode_tile::mapheight#10 -unsigned int vera_layer_mode_tile::mapheight#11 -unsigned int vera_layer_mode_tile::mapheight#12 -unsigned int vera_layer_mode_tile::mapheight#13 -unsigned int vera_layer_mode_tile::mapheight#14 -unsigned int vera_layer_mode_tile::mapheight#15 -unsigned int vera_layer_mode_tile::mapheight#16 -unsigned int vera_layer_mode_tile::mapheight#17 -unsigned int vera_layer_mode_tile::mapheight#18 -unsigned int vera_layer_mode_tile::mapheight#19 -unsigned int vera_layer_mode_tile::mapheight#2 -unsigned int vera_layer_mode_tile::mapheight#20 -unsigned int vera_layer_mode_tile::mapheight#21 -unsigned int vera_layer_mode_tile::mapheight#3 -unsigned int vera_layer_mode_tile::mapheight#4 -unsigned int vera_layer_mode_tile::mapheight#5 -unsigned int vera_layer_mode_tile::mapheight#6 -unsigned int vera_layer_mode_tile::mapheight#7 -unsigned int vera_layer_mode_tile::mapheight#8 -unsigned int vera_layer_mode_tile::mapheight#9 -unsigned int vera_layer_mode_tile::mapwidth -unsigned int vera_layer_mode_tile::mapwidth#0 -unsigned int vera_layer_mode_tile::mapwidth#1 -unsigned int vera_layer_mode_tile::mapwidth#10 -unsigned int vera_layer_mode_tile::mapwidth#11 -unsigned int vera_layer_mode_tile::mapwidth#12 -unsigned int vera_layer_mode_tile::mapwidth#13 -unsigned int vera_layer_mode_tile::mapwidth#2 -unsigned int vera_layer_mode_tile::mapwidth#3 -unsigned int vera_layer_mode_tile::mapwidth#4 -unsigned int vera_layer_mode_tile::mapwidth#5 -unsigned int vera_layer_mode_tile::mapwidth#6 -unsigned int vera_layer_mode_tile::mapwidth#7 -unsigned int vera_layer_mode_tile::mapwidth#8 -unsigned int vera_layer_mode_tile::mapwidth#9 -char vera_layer_mode_tile::tilebase -char vera_layer_mode_tile::tilebase#0 -char vera_layer_mode_tile::tilebase#1 -char vera_layer_mode_tile::tilebase#10 -char vera_layer_mode_tile::tilebase#11 -char vera_layer_mode_tile::tilebase#12 -char vera_layer_mode_tile::tilebase#13 -char vera_layer_mode_tile::tilebase#2 -char vera_layer_mode_tile::tilebase#3 -char vera_layer_mode_tile::tilebase#4 -char vera_layer_mode_tile::tilebase#5 -char vera_layer_mode_tile::tilebase#6 -char vera_layer_mode_tile::tilebase#7 -char vera_layer_mode_tile::tilebase#8 -char vera_layer_mode_tile::tilebase#9 -unsigned long vera_layer_mode_tile::tilebase_address -unsigned long vera_layer_mode_tile::tilebase_address#0 -unsigned long vera_layer_mode_tile::tilebase_address#1 -unsigned long vera_layer_mode_tile::tilebase_address#10 -unsigned long vera_layer_mode_tile::tilebase_address#11 -unsigned long vera_layer_mode_tile::tilebase_address#12 -unsigned long vera_layer_mode_tile::tilebase_address#13 -unsigned long vera_layer_mode_tile::tilebase_address#14 -unsigned long vera_layer_mode_tile::tilebase_address#15 -unsigned long vera_layer_mode_tile::tilebase_address#16 -unsigned long vera_layer_mode_tile::tilebase_address#17 -unsigned long vera_layer_mode_tile::tilebase_address#18 -unsigned long vera_layer_mode_tile::tilebase_address#19 -unsigned long vera_layer_mode_tile::tilebase_address#2 -unsigned long vera_layer_mode_tile::tilebase_address#20 -unsigned long vera_layer_mode_tile::tilebase_address#21 -unsigned long vera_layer_mode_tile::tilebase_address#22 -unsigned long vera_layer_mode_tile::tilebase_address#23 -unsigned long vera_layer_mode_tile::tilebase_address#24 -unsigned long vera_layer_mode_tile::tilebase_address#25 -unsigned long vera_layer_mode_tile::tilebase_address#26 -unsigned long vera_layer_mode_tile::tilebase_address#27 -unsigned long vera_layer_mode_tile::tilebase_address#28 -unsigned long vera_layer_mode_tile::tilebase_address#29 -unsigned long vera_layer_mode_tile::tilebase_address#3 -unsigned long vera_layer_mode_tile::tilebase_address#4 -unsigned long vera_layer_mode_tile::tilebase_address#5 -unsigned long vera_layer_mode_tile::tilebase_address#6 -unsigned long vera_layer_mode_tile::tilebase_address#7 -unsigned long vera_layer_mode_tile::tilebase_address#8 -unsigned long vera_layer_mode_tile::tilebase_address#9 -char vera_layer_mode_tile::tileheight -char vera_layer_mode_tile::tileheight#0 -char vera_layer_mode_tile::tileheight#1 -char vera_layer_mode_tile::tileheight#10 -char vera_layer_mode_tile::tileheight#11 -char vera_layer_mode_tile::tileheight#12 -char vera_layer_mode_tile::tileheight#13 -char vera_layer_mode_tile::tileheight#14 -char vera_layer_mode_tile::tileheight#15 -char vera_layer_mode_tile::tileheight#16 -char vera_layer_mode_tile::tileheight#17 -char vera_layer_mode_tile::tileheight#18 -char vera_layer_mode_tile::tileheight#19 -char vera_layer_mode_tile::tileheight#2 -char vera_layer_mode_tile::tileheight#20 -char vera_layer_mode_tile::tileheight#21 -char vera_layer_mode_tile::tileheight#22 -char vera_layer_mode_tile::tileheight#23 -char vera_layer_mode_tile::tileheight#24 -char vera_layer_mode_tile::tileheight#25 -char vera_layer_mode_tile::tileheight#26 -char vera_layer_mode_tile::tileheight#27 -char vera_layer_mode_tile::tileheight#28 -char vera_layer_mode_tile::tileheight#29 -char vera_layer_mode_tile::tileheight#3 -char vera_layer_mode_tile::tileheight#30 -char vera_layer_mode_tile::tileheight#31 -char vera_layer_mode_tile::tileheight#32 -char vera_layer_mode_tile::tileheight#33 -char vera_layer_mode_tile::tileheight#4 -char vera_layer_mode_tile::tileheight#5 -char vera_layer_mode_tile::tileheight#6 -char vera_layer_mode_tile::tileheight#7 -char vera_layer_mode_tile::tileheight#8 -char vera_layer_mode_tile::tileheight#9 -char vera_layer_mode_tile::tilewidth -char vera_layer_mode_tile::tilewidth#0 -char vera_layer_mode_tile::tilewidth#1 -char vera_layer_mode_tile::tilewidth#10 -char vera_layer_mode_tile::tilewidth#11 -char vera_layer_mode_tile::tilewidth#12 -char vera_layer_mode_tile::tilewidth#13 -char vera_layer_mode_tile::tilewidth#14 -char vera_layer_mode_tile::tilewidth#15 -char vera_layer_mode_tile::tilewidth#16 -char vera_layer_mode_tile::tilewidth#17 -char vera_layer_mode_tile::tilewidth#18 -char vera_layer_mode_tile::tilewidth#19 -char vera_layer_mode_tile::tilewidth#2 -char vera_layer_mode_tile::tilewidth#20 -char vera_layer_mode_tile::tilewidth#21 -char vera_layer_mode_tile::tilewidth#22 -char vera_layer_mode_tile::tilewidth#23 -char vera_layer_mode_tile::tilewidth#24 -char vera_layer_mode_tile::tilewidth#25 -char vera_layer_mode_tile::tilewidth#26 -char vera_layer_mode_tile::tilewidth#27 -char vera_layer_mode_tile::tilewidth#28 -char vera_layer_mode_tile::tilewidth#29 -char vera_layer_mode_tile::tilewidth#3 -char vera_layer_mode_tile::tilewidth#4 -char vera_layer_mode_tile::tilewidth#5 -char vera_layer_mode_tile::tilewidth#6 -char vera_layer_mode_tile::tilewidth#7 -char vera_layer_mode_tile::tilewidth#8 -char vera_layer_mode_tile::tilewidth#9 -__constant char vera_layer_rowshift[2] = { 0, 0 } -__constant unsigned int vera_layer_rowskip[2] = { 0, 0 } -char vera_layer_set_backcolor(char layer , char color) -char vera_layer_set_backcolor::color -char vera_layer_set_backcolor::color#0 -char vera_layer_set_backcolor::color#1 -char vera_layer_set_backcolor::color#2 -char vera_layer_set_backcolor::color#3 -char vera_layer_set_backcolor::color#4 -char vera_layer_set_backcolor::layer -char vera_layer_set_backcolor::layer#0 -char vera_layer_set_backcolor::layer#1 -char vera_layer_set_backcolor::layer#2 -char vera_layer_set_backcolor::layer#3 -char vera_layer_set_backcolor::layer#4 -char vera_layer_set_backcolor::old -char vera_layer_set_backcolor::old#0 -char vera_layer_set_backcolor::return -char vera_layer_set_backcolor::return#0 -char vera_layer_set_backcolor::return#1 -char vera_layer_set_backcolor::return#2 -char vera_layer_set_backcolor::return#3 -char vera_layer_set_backcolor::return#4 -char vera_layer_set_backcolor::return#5 -char vera_layer_set_backcolor::return#6 -void vera_layer_set_config(char layer , char config) -char vera_layer_set_config::$0 -char *vera_layer_set_config::addr -char *vera_layer_set_config::addr#0 -char vera_layer_set_config::config -char vera_layer_set_config::config#0 -char vera_layer_set_config::config#1 -char vera_layer_set_config::config#2 -char vera_layer_set_config::layer -char vera_layer_set_config::layer#0 -char vera_layer_set_config::layer#1 -char vera_layer_set_config::layer#2 -void vera_layer_set_mapbase(char layer , char mapbase) -char vera_layer_set_mapbase::$0 -char *vera_layer_set_mapbase::addr -char *vera_layer_set_mapbase::addr#0 -char vera_layer_set_mapbase::layer -char vera_layer_set_mapbase::layer#0 -char vera_layer_set_mapbase::layer#1 -char vera_layer_set_mapbase::layer#2 -char vera_layer_set_mapbase::layer#3 -char vera_layer_set_mapbase::mapbase -char vera_layer_set_mapbase::mapbase#0 -char vera_layer_set_mapbase::mapbase#1 -char vera_layer_set_mapbase::mapbase#2 -char vera_layer_set_mapbase::mapbase#3 -void vera_layer_set_text_color_mode(char layer , char color_mode) -char vera_layer_set_text_color_mode::$0 -char *vera_layer_set_text_color_mode::addr -char *vera_layer_set_text_color_mode::addr#0 -char vera_layer_set_text_color_mode::color_mode -char vera_layer_set_text_color_mode::color_mode#0 -char vera_layer_set_text_color_mode::color_mode#1 -char vera_layer_set_text_color_mode::color_mode#2 -char vera_layer_set_text_color_mode::layer -char vera_layer_set_text_color_mode::layer#0 -char vera_layer_set_text_color_mode::layer#1 -char vera_layer_set_text_color_mode::layer#2 -char vera_layer_set_textcolor(char layer , char color) -char vera_layer_set_textcolor::color -char vera_layer_set_textcolor::color#0 -char vera_layer_set_textcolor::color#1 -char vera_layer_set_textcolor::color#2 -char vera_layer_set_textcolor::color#3 -char vera_layer_set_textcolor::color#4 -char vera_layer_set_textcolor::color#5 -char vera_layer_set_textcolor::color#6 -char vera_layer_set_textcolor::layer -char vera_layer_set_textcolor::layer#0 -char vera_layer_set_textcolor::layer#1 -char vera_layer_set_textcolor::layer#2 -char vera_layer_set_textcolor::layer#3 -char vera_layer_set_textcolor::layer#4 -char vera_layer_set_textcolor::layer#5 -char vera_layer_set_textcolor::layer#6 -char vera_layer_set_textcolor::old -char vera_layer_set_textcolor::old#0 -char vera_layer_set_textcolor::return -char vera_layer_set_textcolor::return#0 -char vera_layer_set_textcolor::return#1 -char vera_layer_set_textcolor::return#2 -char vera_layer_set_textcolor::return#3 -char vera_layer_set_textcolor::return#4 -char vera_layer_set_textcolor::return#5 -char vera_layer_set_textcolor::return#6 -char vera_layer_set_textcolor::return#7 -char vera_layer_set_textcolor::return#8 -void vera_layer_set_tilebase(char layer , char tilebase) -char vera_layer_set_tilebase::$0 -char *vera_layer_set_tilebase::addr -char *vera_layer_set_tilebase::addr#0 -char vera_layer_set_tilebase::layer -char vera_layer_set_tilebase::layer#0 -char vera_layer_set_tilebase::layer#1 -char vera_layer_set_tilebase::layer#2 -char vera_layer_set_tilebase::tilebase -char vera_layer_set_tilebase::tilebase#0 -char vera_layer_set_tilebase::tilebase#1 -char vera_layer_set_tilebase::tilebase#2 -__constant char vera_layer_textcolor[2] = { WHITE, WHITE } -__constant char *vera_layer_tilebase[2] = { VERA_L0_TILEBASE, VERA_L1_TILEBASE } -__constant unsigned long vera_mapbase_address[2] = { 0, 0 } -__constant char vera_mapbase_bank[2] = { 0, 0 } -__constant unsigned int vera_mapbase_offset[2] = { 0, 0 } -__constant unsigned long vera_tilebase_address[2] = { 0, 0 } -__constant char vera_tilebase_bank[2] = { 0, 0 } -__constant unsigned int vera_tilebase_offset[2] = { 0, 0 } - -Adding number conversion cast (unumber) 4 in clrscr::$1 = clrscr::$0 << 4 -Adding number conversion cast (unumber) 0 in conio_cursor_x[conio_screen_layer] = 0 -Adding number conversion cast (unumber) 0 in conio_cursor_y[conio_screen_layer] = 0 -Adding number conversion cast (unumber) 0 in conio_line_text[clrscr::$9] = 0 -Adding number conversion cast (unumber) 0 in gotoxy::y#0 = 0 -Adding number conversion cast (unumber) 0 in gotoxy::x#0 = 0 -Adding number conversion cast (unumber) 7 in screensize::hscale#0 = *VERA_DC_HSCALE >> 7 -Adding number conversion cast (unumber) $28 in screensize::$1 = $28 << screensize::hscale#0 -Adding number conversion cast (unumber) screensize::$1 in screensize::$1 = (unumber)$28 << screensize::hscale#0 -Adding number conversion cast (unumber) 7 in screensize::vscale#0 = *VERA_DC_VSCALE >> 7 -Adding number conversion cast (unumber) $1e in screensize::$3 = $1e << screensize::vscale#0 -Adding number conversion cast (unumber) screensize::$3 in screensize::$3 = (unumber)$1e << screensize::vscale#0 -Adding number conversion cast (unumber) 1 in cputc::$2 = conio_cursor_x[conio_screen_layer] << 1 -Adding number conversion cast (unumber) 0 in cputc::$17 = 0 != cputc::scroll_enable#0 -Adding number conversion cast (unumber) 0 in conio_cursor_x[conio_screen_layer] = 0 -Adding number conversion cast (unumber) 0 in vera_layer_get_color::$4 = 0 != vera_layer_get_color::$0 -Adding number conversion cast (unumber) 4 in vera_layer_get_color::$1 = vera_layer_backcolor[vera_layer_get_color::layer#4] << 4 -Adding number conversion cast (unumber) 1 in if(vera_layer_mode_tile::color_depth#2==1) goto vera_layer_mode_tile::@4 -Adding number conversion cast (unumber) 2 in if(vera_layer_mode_tile::color_depth#3==2) goto vera_layer_mode_tile::@5 -Adding number conversion cast (unumber) 4 in if(vera_layer_mode_tile::color_depth#4==4) goto vera_layer_mode_tile::@6 -Adding number conversion cast (unumber) 8 in if(vera_layer_mode_tile::color_depth#5==8) goto vera_layer_mode_tile::@7 -Adding number conversion cast (unumber) $20 in if(vera_layer_mode_tile::mapwidth#2==$20) goto vera_layer_mode_tile::@12 -Adding number conversion cast (unumber) 6 in vera_layer_rowshift[vera_layer_mode_tile::layer#2] = 6 -Adding number conversion cast (unumber) $40 in vera_layer_rowskip[vera_layer_mode_tile::$11] = $40 -Adding number conversion cast (unumber) $40 in if(vera_layer_mode_tile::mapwidth#3==$40) goto vera_layer_mode_tile::@13 -Adding number conversion cast (unumber) 7 in vera_layer_rowshift[vera_layer_mode_tile::layer#3] = 7 -Adding number conversion cast (unumber) $80 in vera_layer_rowskip[vera_layer_mode_tile::$12] = $80 -Adding number conversion cast (unumber) $80 in if(vera_layer_mode_tile::mapwidth#4==$80) goto vera_layer_mode_tile::@14 -Adding number conversion cast (unumber) 8 in vera_layer_rowshift[vera_layer_mode_tile::layer#4] = 8 -Adding number conversion cast (unumber) $100 in vera_layer_rowskip[vera_layer_mode_tile::$13] = $100 -Adding number conversion cast (unumber) $100 in if(vera_layer_mode_tile::mapwidth#5==$100) goto vera_layer_mode_tile::@15 -Adding number conversion cast (unumber) 9 in vera_layer_rowshift[vera_layer_mode_tile::layer#5] = 9 -Adding number conversion cast (unumber) $200 in vera_layer_rowskip[vera_layer_mode_tile::$14] = $200 -Adding number conversion cast (unumber) $20 in if(vera_layer_mode_tile::mapheight#2==$20) goto vera_layer_mode_tile::@20 -Adding number conversion cast (unumber) $40 in if(vera_layer_mode_tile::mapheight#3==$40) goto vera_layer_mode_tile::@21 -Adding number conversion cast (unumber) $80 in if(vera_layer_mode_tile::mapheight#4==$80) goto vera_layer_mode_tile::@22 -Adding number conversion cast (unumber) $100 in if(vera_layer_mode_tile::mapheight#5==$100) goto vera_layer_mode_tile::@23 -Adding number conversion cast (unumber) 1 in vera_layer_mode_tile::$3 = vera_layer_mode_tile::mapbase_address#3 >> 1 -Adding number conversion cast (unumber) 1 in vera_layer_mode_tile::$8 = vera_layer_mode_tile::tilebase_address#3 >> 1 -Adding number conversion cast (unumber) 8 in if(vera_layer_mode_tile::tilewidth#2==8) goto vera_layer_mode_tile::@26 -Adding number conversion cast (unumber) $10 in if(vera_layer_mode_tile::tilewidth#3==$10) goto vera_layer_mode_tile::@27 -Adding number conversion cast (unumber) 8 in if(vera_layer_mode_tile::tileheight#2==8) goto vera_layer_mode_tile::@30 -Adding number conversion cast (unumber) $10 in if(vera_layer_mode_tile::tileheight#3==$10) goto vera_layer_mode_tile::@31 -Adding number conversion cast (unumber) 1 in vera_layer_mode_tile::color_depth#0 = 1 -Adding number conversion cast (unumber) $10 in if(vera_layer_mode_text::color_mode#1==$10) goto vera_layer_mode_text::@2 -Adding number conversion cast (unumber) $100 in if(vera_layer_mode_text::color_mode#2==$100) goto vera_layer_mode_text::@3 -Adding number conversion cast (unumber) 1 in if(vera_layer_mode_bitmap::color_depth#1==1) goto vera_layer_mode_bitmap::@4 -Adding number conversion cast (unumber) 2 in if(vera_layer_mode_bitmap::color_depth#2==2) goto vera_layer_mode_bitmap::@5 -Adding number conversion cast (unumber) 4 in if(vera_layer_mode_bitmap::color_depth#3==4) goto vera_layer_mode_bitmap::@6 -Adding number conversion cast (unumber) 8 in if(vera_layer_mode_bitmap::color_depth#4==8) goto vera_layer_mode_bitmap::@7 -Adding number conversion cast (unumber) 1 in vera_layer_mode_bitmap::$3 = vera_layer_mode_bitmap::bitmap_address#2 >> 1 -Adding number conversion cast (unumber) $140 in if(vera_layer_mode_bitmap::mapwidth#1==$140) goto vera_layer_mode_bitmap::vera_display_set_scale_double1 -Adding number conversion cast (unumber) $40 in *VERA_DC_HSCALE = $40 -Adding number conversion cast (unumber) $40 in *VERA_DC_VSCALE = $40 -Adding number conversion cast (unumber) $280 in if(vera_layer_mode_bitmap::mapwidth#2==$280) goto vera_layer_mode_bitmap::vera_display_set_scale_none1 -Adding number conversion cast (unumber) $80 in *VERA_DC_HSCALE = $80 -Adding number conversion cast (unumber) $80 in *VERA_DC_VSCALE = $80 -Adding number conversion cast (unumber) 1 in vera_layer_mode_text::layer#0 = 1 -Adding number conversion cast (unumber) $80 in vera_layer_mode_text::mapwidth#0 = $80 -Adding number conversion cast (unumber) $40 in vera_layer_mode_text::mapheight#0 = $40 -Adding number conversion cast (unumber) 8 in vera_layer_mode_text::tilewidth#0 = 8 -Adding number conversion cast (unumber) 8 in vera_layer_mode_text::tileheight#0 = 8 -Adding number conversion cast (unumber) $10 in vera_layer_mode_text::color_mode#0 = $10 -Adding number conversion cast (unumber) 1 in screenlayer::layer#0 = 1 -Adding number conversion cast (unumber) 1 in vera_layer_set_textcolor::layer#0 = 1 -Adding number conversion cast (unumber) 1 in vera_layer_set_backcolor::layer#0 = 1 -Adding number conversion cast (unumber) 0 in vera_layer_set_mapbase::layer#1 = 0 -Adding number conversion cast (unumber) $20 in vera_layer_set_mapbase::mapbase#1 = $20 -Adding number conversion cast (unumber) 1 in vera_layer_set_mapbase::layer#2 = 1 -Adding number conversion cast (unumber) 0 in vera_layer_set_mapbase::mapbase#2 = 0 -Adding number conversion cast (unumber) 0 in gotoxy::x#1 = 0 -Adding number conversion cast (unumber) 1 in conio_x16_init::$9 = conio_screen_height - 1 -Adding number conversion cast (unumber) conio_x16_init::$9 in conio_x16_init::$9 = conio_screen_height - (unumber)1 -Adding number conversion cast (unumber) 0 in conio_cursor_x[conio_screen_layer] = 0 -Adding number conversion cast (unumber) 2 in insertup::width#0 = conio_screen_width * 2 -Adding number conversion cast (unumber) 1 in insertup::$3 = insertup::i#3 - 1 -Adding number conversion cast (unumber) insertup::$3 in insertup::$3 = insertup::i#3 - (unumber)1 -Adding number conversion cast (unumber) 0 in memcpy_in_vram::dest_bank#0 = 0 -Adding number conversion cast (unumber) 0 in memcpy_in_vram::src_bank#0 = 0 -Adding number conversion cast (unumber) 0 in cscroll::$7 = 0 != conio_scroll_enable[conio_screen_layer] -Adding number conversion cast (unumber) 1 in cscroll::$5 = conio_screen_height - 1 -Adding number conversion cast (unumber) cscroll::$5 in cscroll::$5 = conio_screen_height - (unumber)1 -Adding number conversion cast (unumber) 0 in gotoxy::x#2 = 0 -Adding number conversion cast (unumber) 4 in screenlayer::vera_layer_get_width1_$1 = screenlayer::vera_layer_get_width1_$0 >> 4 -Adding number conversion cast (unumber) 6 in screenlayer::vera_layer_get_height1_$1 = screenlayer::vera_layer_get_height1_$0 >> 6 -Adding number conversion cast (unumber) 7 in rand::$0 = rand_state#13 << 7 -Adding number conversion cast (unumber) 9 in rand::$1 = rand_state#0 >> 9 -Adding number conversion cast (unumber) 8 in rand::$2 = rand_state#1 << 8 -Adding number conversion cast (unumber) 0 in printf_str::$2 = 0 != printf_str::$0 -Adding number conversion cast (unumber) 0 in bitmap_init::$5 = __bitmap_color_depth == 0 -Adding number conversion cast (unumber) 1 in bitmap_init::$8 = __bitmap_color_depth == 1 -Adding number conversion cast (unumber) 3 in bitmap_init::$7 = bitmap_init::x#2 >> 3 -Adding number conversion cast (snumber) 1 in bitmap_init::bitshift#1 = bitmap_init::bitshift#5 - 1 -Adding number conversion cast (unumber) 1 in bitmap_init::bitmask#1 = bitmap_init::bitmask#5 >> 1 -Adding number conversion cast (unumber) 2 in bitmap_init::$11 = __bitmap_color_depth == 2 -Adding number conversion cast (unumber) 2 in bitmap_init::$10 = bitmap_init::x#3 >> 2 -Adding number conversion cast (snumber) 2 in bitmap_init::bitshift#2 = bitmap_init::bitshift#6 - 2 -Adding number conversion cast (unumber) 2 in bitmap_init::bitmask#2 = bitmap_init::bitmask#6 >> 2 -Adding number conversion cast (unumber) 3 in bitmap_init::$14 = __bitmap_color_depth == 3 -Adding number conversion cast (unumber) 1 in bitmap_init::$13 = bitmap_init::x#4 >> 1 -Adding number conversion cast (snumber) 4 in bitmap_init::bitshift#3 = bitmap_init::bitshift#7 - 4 -Adding number conversion cast (unumber) 4 in bitmap_init::bitmask#3 = bitmap_init::bitmask#7 >> 4 -Adding number conversion cast (snumber) 0 in bitmap_init::$16 = bitmap_init::bitshift#8 < 0 -Adding number conversion cast (unumber) 0 in bitmap_init::$18 = bitmap_init::bitmask#9 == 0 -Adding number conversion cast (unumber) 2 in bitmap_init::$3 = __bitmap_color_depth << 2 -Adding number conversion cast (unumber) 2 in bitmap_clear::$0 = __bitmap_color_depth << 2 -Adding number conversion cast (unumber) 0 in memset_vram::data#0 = 0 -Adding number conversion cast (unumber) 0 in bitmap_plot::$11 = 0 != bitmap_plot::bitshift#0 -Adding number conversion cast (unumber) 0 in mul16u::$0 = mul16u::a#2 != 0 -Adding number conversion cast (unumber) 1 in mul16u::$1 = mul16u::a#3 & 1 -Adding number conversion cast (unumber) mul16u::$1 in mul16u::$1 = mul16u::a#3 & (unumber)1 -Adding number conversion cast (unumber) 0 in mul16u::$2 = mul16u::$1 != 0 -Adding number conversion cast (unumber) 1 in mul16u::$5 = mul16u::a#4 >> 1 -Adding number conversion cast (unumber) 1 in mul16u::$6 = mul16u::mb#2 << 1 -Adding number conversion cast (unumber) 1 in bitmap_line_xdyi::e#0 = bitmap_line_xdyi::yd#2 >> 1 -Adding number conversion cast (unumber) 1 in bitmap_line_xdyi::$6 = bitmap_line_xdyi::x1#2 + 1 -Adding number conversion cast (unumber) bitmap_line_xdyi::$6 in bitmap_line_xdyi::$6 = bitmap_line_xdyi::x1#2 + (unumber)1 -Adding number conversion cast (unumber) 1 in bitmap_line_xdyd::e#0 = bitmap_line_xdyd::yd#2 >> 1 -Adding number conversion cast (unumber) 1 in bitmap_line_xdyd::$6 = bitmap_line_xdyd::x1#2 + 1 -Adding number conversion cast (unumber) bitmap_line_xdyd::$6 in bitmap_line_xdyd::$6 = bitmap_line_xdyd::x1#2 + (unumber)1 -Adding number conversion cast (unumber) 1 in bitmap_line_ydxi::e#0 = bitmap_line_ydxi::xd#2 >> 1 -Adding number conversion cast (unumber) 1 in bitmap_line_ydxi::$6 = bitmap_line_ydxi::y1#2 + 1 -Adding number conversion cast (unumber) bitmap_line_ydxi::$6 in bitmap_line_ydxi::$6 = bitmap_line_ydxi::y1#2 + (unumber)1 -Adding number conversion cast (unumber) 1 in bitmap_line_ydxd::e#0 = bitmap_line_ydxd::xd#2 >> 1 -Adding number conversion cast (unumber) 1 in bitmap_line_ydxd::$6 = bitmap_line_ydxd::y1#2 + 1 -Adding number conversion cast (unumber) bitmap_line_ydxd::$6 in bitmap_line_ydxd::$6 = bitmap_line_ydxd::y1#2 + (unumber)1 -Adding number conversion cast (unumber) 1 in divr16u::$0 = divr16u::rem#4 << 1 -Adding number conversion cast (unumber) $80 in divr16u::$2 = divr16u::$1 & $80 -Adding number conversion cast (unumber) divr16u::$2 in divr16u::$2 = divr16u::$1 & (unumber)$80 -Adding number conversion cast (unumber) 0 in divr16u::$3 = divr16u::$2 != 0 -Adding number conversion cast (unumber) 1 in divr16u::$6 = divr16u::dividend#3 << 1 -Adding number conversion cast (unumber) 1 in divr16u::$7 = divr16u::quotient#3 << 1 -Adding number conversion cast (unumber) 1 in divr16u::$5 = divr16u::rem#6 | 1 -Adding number conversion cast (unumber) divr16u::$5 in divr16u::$5 = divr16u::rem#6 | (unumber)1 -Adding number conversion cast (unumber) 1 in memcpy_in_vram::dest_bank#1 = 1 -Adding number conversion cast (unumber) 0 in memcpy_in_vram::src_bank#1 = 0 -Adding number conversion cast (unumber) $100*8 in memcpy_in_vram::num#1 = $100*8 -Adding number conversion cast (unumber) 1 in vera_layer_mode_tile::layer#1 = 1 -Adding number conversion cast (unumber) $14000 in vera_layer_mode_tile::mapbase_address#2 = $14000 -Adding number conversion cast (unumber) $1f000 in vera_layer_mode_tile::tilebase_address#2 = $1f000 -Adding number conversion cast (unumber) $80 in vera_layer_mode_tile::mapwidth#1 = $80 -Adding number conversion cast (unumber) $40 in vera_layer_mode_tile::mapheight#1 = $40 -Adding number conversion cast (unumber) 8 in vera_layer_mode_tile::tilewidth#1 = 8 -Adding number conversion cast (unumber) 8 in vera_layer_mode_tile::tileheight#1 = 8 -Adding number conversion cast (unumber) 1 in vera_layer_mode_tile::color_depth#1 = 1 -Adding number conversion cast (unumber) 0 in vera_layer_mode_bitmap::layer#0 = 0 -Adding number conversion cast (unumber) $140 in vera_layer_mode_bitmap::mapwidth#0 = $140 -Adding number conversion cast (unumber) 8 in vera_layer_mode_bitmap::color_depth#0 = 8 -Adding number conversion cast (unumber) 1 in screenlayer::layer#1 = 1 -Adding number conversion cast (unumber) 0 in gotoxy::x#3 = 0 -Adding number conversion cast (unumber) $19 in gotoxy::y#3 = $19 -Adding number conversion cast (unumber) 0 in main::vera_layer_show1_layer#0 = 0 -Adding number conversion cast (unumber) 0 in bitmap_init::layer#0 = 0 -Adding number conversion cast (unumber) 0 in bitmap_init::address#0 = 0 -Adding number conversion cast (unumber) 0 in gotoxy::x#4 = 0 -Adding number conversion cast (unumber) $1d in gotoxy::y#4 = $1d -Adding number conversion cast (unumber) 0 in main::$48 = 0 != main::$30 -Adding number conversion cast (unumber) $140 in modr16u::divisor#0 = $140 -Adding number conversion cast (unumber) 0 in modr16u::rem#0 = 0 -Adding number conversion cast (unumber) $140 in modr16u::divisor#1 = $140 -Adding number conversion cast (unumber) 0 in modr16u::rem#1 = 0 -Adding number conversion cast (unumber) $c8 in modr16u::divisor#2 = $c8 -Adding number conversion cast (unumber) 0 in modr16u::rem#2 = 0 -Adding number conversion cast (unumber) $c8 in modr16u::divisor#3 = $c8 -Adding number conversion cast (unumber) 0 in modr16u::rem#3 = 0 -Adding number conversion cast (unumber) $ff in main::$41 = main::$40 & $ff -Adding number conversion cast (unumber) main::$41 in main::$41 = main::$40 & (unumber)$ff -Adding number conversion cast (unumber) 0 in gotoxy::x#5 = 0 -Adding number conversion cast (unumber) $1a in gotoxy::y#5 = $1a -Adding number conversion cast (unumber) 0 in gotoxy::x#6 = 0 -Adding number conversion cast (unumber) $1d in gotoxy::y#6 = $1d -Adding number conversion cast (unumber) 0 in main::$49 = 0 != main::$43 -Adding number conversion cast (unumber) 0 in bitmap_line::y0#1 = 0 -Adding number conversion cast (unumber) $c7 in bitmap_line::y1#1 = $c7 -Adding number conversion cast (unumber) $13f in main::$46 = main::x#1 > $13f -Adding number conversion cast (unumber) 1 in screenlayer::layer#2 = 1 -Adding number conversion cast (unumber) 0 in main::x#2 = 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast conio_cursor_x[conio_screen_layer] = (unumber)0 -Inlining cast conio_cursor_y[conio_screen_layer] = (unumber)0 -Inlining cast conio_line_text[clrscr::$9] = (unumber)0 -Inlining cast gotoxy::y#0 = (unumber)0 -Inlining cast gotoxy::x#0 = (unumber)0 -Inlining cast conio_cursor_x[conio_screen_layer] = (unumber)0 -Inlining cast vera_layer_rowshift[vera_layer_mode_tile::layer#2] = (unumber)6 -Inlining cast vera_layer_rowskip[vera_layer_mode_tile::$11] = (unumber)$40 -Inlining cast vera_layer_rowshift[vera_layer_mode_tile::layer#3] = (unumber)7 -Inlining cast vera_layer_rowskip[vera_layer_mode_tile::$12] = (unumber)$80 -Inlining cast vera_layer_rowshift[vera_layer_mode_tile::layer#4] = (unumber)8 -Inlining cast vera_layer_rowskip[vera_layer_mode_tile::$13] = (unumber)$100 -Inlining cast vera_layer_rowshift[vera_layer_mode_tile::layer#5] = (unumber)9 -Inlining cast vera_layer_rowskip[vera_layer_mode_tile::$14] = (unumber)$200 -Inlining cast vera_layer_mode_tile::color_depth#0 = (unumber)1 -Inlining cast *VERA_DC_HSCALE = (unumber)$40 -Inlining cast *VERA_DC_VSCALE = (unumber)$40 -Inlining cast *VERA_DC_HSCALE = (unumber)$80 -Inlining cast *VERA_DC_VSCALE = (unumber)$80 -Inlining cast vera_layer_mode_text::layer#0 = (unumber)1 -Inlining cast vera_layer_mode_text::mapwidth#0 = (unumber)$80 -Inlining cast vera_layer_mode_text::mapheight#0 = (unumber)$40 -Inlining cast vera_layer_mode_text::tilewidth#0 = (unumber)8 -Inlining cast vera_layer_mode_text::tileheight#0 = (unumber)8 -Inlining cast vera_layer_mode_text::color_mode#0 = (unumber)$10 -Inlining cast screenlayer::layer#0 = (unumber)1 -Inlining cast vera_layer_set_textcolor::layer#0 = (unumber)1 -Inlining cast vera_layer_set_backcolor::layer#0 = (unumber)1 -Inlining cast vera_layer_set_mapbase::layer#1 = (unumber)0 -Inlining cast vera_layer_set_mapbase::mapbase#1 = (unumber)$20 -Inlining cast vera_layer_set_mapbase::layer#2 = (unumber)1 -Inlining cast vera_layer_set_mapbase::mapbase#2 = (unumber)0 -Inlining cast gotoxy::x#1 = (unumber)0 -Inlining cast conio_cursor_x[conio_screen_layer] = (unumber)0 -Inlining cast memcpy_in_vram::dest_bank#0 = (unumber)0 -Inlining cast memcpy_in_vram::src_bank#0 = (unumber)0 -Inlining cast gotoxy::x#2 = (unumber)0 -Inlining cast memset_vram::data#0 = (unumber)0 -Inlining cast memcpy_in_vram::dest_bank#1 = (unumber)1 -Inlining cast memcpy_in_vram::src_bank#1 = (unumber)0 -Inlining cast memcpy_in_vram::num#1 = (unumber)$100*8 -Inlining cast vera_layer_mode_tile::layer#1 = (unumber)1 -Inlining cast vera_layer_mode_tile::mapbase_address#2 = (unumber)$14000 -Inlining cast vera_layer_mode_tile::tilebase_address#2 = (unumber)$1f000 -Inlining cast vera_layer_mode_tile::mapwidth#1 = (unumber)$80 -Inlining cast vera_layer_mode_tile::mapheight#1 = (unumber)$40 -Inlining cast vera_layer_mode_tile::tilewidth#1 = (unumber)8 -Inlining cast vera_layer_mode_tile::tileheight#1 = (unumber)8 -Inlining cast vera_layer_mode_tile::color_depth#1 = (unumber)1 -Inlining cast vera_layer_mode_bitmap::layer#0 = (unumber)0 -Inlining cast vera_layer_mode_bitmap::mapwidth#0 = (unumber)$140 -Inlining cast vera_layer_mode_bitmap::color_depth#0 = (unumber)8 -Inlining cast screenlayer::layer#1 = (unumber)1 -Inlining cast gotoxy::x#3 = (unumber)0 -Inlining cast gotoxy::y#3 = (unumber)$19 -Inlining cast main::vera_layer_show1_layer#0 = (unumber)0 -Inlining cast bitmap_init::layer#0 = (unumber)0 -Inlining cast bitmap_init::address#0 = (unumber)0 -Inlining cast gotoxy::x#4 = (unumber)0 -Inlining cast gotoxy::y#4 = (unumber)$1d -Inlining cast modr16u::divisor#0 = (unumber)$140 -Inlining cast modr16u::rem#0 = (unumber)0 -Inlining cast modr16u::divisor#1 = (unumber)$140 -Inlining cast modr16u::rem#1 = (unumber)0 -Inlining cast modr16u::divisor#2 = (unumber)$c8 -Inlining cast modr16u::rem#2 = (unumber)0 -Inlining cast modr16u::divisor#3 = (unumber)$c8 -Inlining cast modr16u::rem#3 = (unumber)0 -Inlining cast gotoxy::x#5 = (unumber)0 -Inlining cast gotoxy::y#5 = (unumber)$1a -Inlining cast gotoxy::x#6 = (unumber)0 -Inlining cast gotoxy::y#6 = (unumber)$1d -Inlining cast bitmap_line::y0#1 = (unumber)0 -Inlining cast bitmap_line::y1#1 = (unumber)$c7 -Inlining cast screenlayer::layer#2 = (unumber)1 -Inlining cast main::x#2 = (unumber)0 -Successful SSA optimization Pass2InlineCast -Simplifying constant pointer cast (char *) 40736 -Simplifying constant pointer cast (char *) 40737 -Simplifying constant pointer cast (char *) 40738 -Simplifying constant pointer cast (char *) 40739 -Simplifying constant pointer cast (char *) 40740 -Simplifying constant pointer cast (char *) 40741 -Simplifying constant pointer cast (char *) 40745 -Simplifying constant pointer cast (char *) 40746 -Simplifying constant pointer cast (char *) 40747 -Simplifying constant pointer cast (char *) 40749 -Simplifying constant pointer cast (char *) 40750 -Simplifying constant pointer cast (char *) 40751 -Simplifying constant pointer cast (char *) 40756 -Simplifying constant pointer cast (char *) 40757 -Simplifying constant pointer cast (char *) 40758 -Simplifying constant pointer cast (char *) 0 -Simplifying constant pointer cast (char *) 650 -Simplifying constant pointer cast (char *) 65508 -Simplifying constant pointer cast (char *) 214 -Simplifying constant integer cast 4 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast $28 -Simplifying constant integer cast 7 -Simplifying constant integer cast $1e -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 4 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 4 -Simplifying constant integer cast 8 -Simplifying constant integer cast $20 -Simplifying constant integer cast 6 -Simplifying constant integer cast $40 -Simplifying constant integer cast $40 -Simplifying constant integer cast 7 -Simplifying constant integer cast $80 -Simplifying constant integer cast $80 -Simplifying constant integer cast 8 -Simplifying constant integer cast $100 -Simplifying constant integer cast $100 -Simplifying constant integer cast 9 -Simplifying constant integer cast $200 -Simplifying constant integer cast $20 -Simplifying constant integer cast $40 -Simplifying constant integer cast $80 -Simplifying constant integer cast $100 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 8 -Simplifying constant integer cast $10 -Simplifying constant integer cast 8 -Simplifying constant integer cast $10 -Simplifying constant integer cast 1 -Simplifying constant integer cast $10 -Simplifying constant integer cast $100 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 4 -Simplifying constant integer cast 8 -Simplifying constant integer cast 1 -Simplifying constant integer cast $140 -Simplifying constant integer cast $40 -Simplifying constant integer cast $40 -Simplifying constant integer cast $280 -Simplifying constant integer cast $80 -Simplifying constant integer cast $80 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast $f800 -Simplifying constant integer cast $80 -Simplifying constant integer cast $40 -Simplifying constant integer cast 8 -Simplifying constant integer cast 8 -Simplifying constant integer cast $10 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast $20 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 2 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 7 -Simplifying constant integer cast 9 -Simplifying constant integer cast 8 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 3 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 3 -Simplifying constant integer cast 1 -Simplifying constant integer cast 4 -Simplifying constant integer cast 4 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast $80 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant pointer cast (char *) 61440 -Simplifying constant integer cast 0 -Simplifying constant pointer cast (char *) 63488 -Simplifying constant integer cast 1 -Simplifying constant integer cast $14000 -Simplifying constant integer cast $1f000 -Simplifying constant integer cast $80 -Simplifying constant integer cast $40 -Simplifying constant integer cast 8 -Simplifying constant integer cast 8 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $140 -Simplifying constant integer cast 8 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast $19 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $1d -Simplifying constant integer cast 0 -Simplifying constant integer cast $140 -Simplifying constant integer cast 0 -Simplifying constant integer cast $140 -Simplifying constant integer cast 0 -Simplifying constant integer cast $c8 -Simplifying constant integer cast 0 -Simplifying constant integer cast $c8 -Simplifying constant integer cast 0 -Simplifying constant integer cast $ff -Simplifying constant integer cast 0 -Simplifying constant integer cast $1a -Simplifying constant integer cast 0 -Simplifying constant integer cast $1d -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $c7 -Simplifying constant integer cast $13f -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 4 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) $28 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) $1e -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 4 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 4 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) $20 -Finalized unsigned number type (char) 6 -Finalized unsigned number type (char) $40 -Finalized unsigned number type (char) $40 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) $80 -Finalized unsigned number type (char) $80 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (unsigned int) $100 -Finalized unsigned number type (unsigned int) $100 -Finalized unsigned number type (char) 9 -Finalized unsigned number type (unsigned int) $200 -Finalized unsigned number type (char) $20 -Finalized unsigned number type (char) $40 -Finalized unsigned number type (char) $80 -Finalized unsigned number type (unsigned int) $100 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) $10 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) $10 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) $10 -Finalized unsigned number type (unsigned int) $100 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 4 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (unsigned int) $140 -Finalized unsigned number type (char) $40 -Finalized unsigned number type (char) $40 -Finalized unsigned number type (unsigned int) $280 -Finalized unsigned number type (char) $80 -Finalized unsigned number type (char) $80 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) $80 -Finalized unsigned number type (char) $40 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) $10 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) $20 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 4 -Finalized unsigned number type (char) 6 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) 9 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 3 -Finalized signed number type (signed char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 2 -Finalized signed number type (signed char) 2 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 3 -Finalized unsigned number type (char) 1 -Finalized signed number type (signed char) 4 -Finalized unsigned number type (char) 4 -Finalized signed number type (signed char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) $80 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (unsigned long) $14000 -Finalized unsigned number type (unsigned long) $1f000 -Finalized unsigned number type (char) $80 -Finalized unsigned number type (char) $40 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (unsigned int) $140 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) $19 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) $1d -Finalized unsigned number type (char) 0 -Finalized unsigned number type (unsigned int) $140 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (unsigned int) $140 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) $c8 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) $c8 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) $ff -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) $1a -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) $1d -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) $c7 -Finalized unsigned number type (unsigned int) $13f -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Inferred type updated to char in screensize::$1 = $28 << screensize::hscale#0 -Inferred type updated to char in screensize::$3 = $1e << screensize::vscale#0 -Inferred type updated to char in conio_x16_init::$9 = conio_screen_height - 1 -Inferred type updated to char in insertup::$3 = insertup::i#3 - 1 -Inferred type updated to char in cscroll::$5 = conio_screen_height - 1 -Inferred type updated to char in mul16u::$1 = mul16u::a#3 & 1 -Inferred type updated to unsigned int in bitmap_line_xdyi::$6 = bitmap_line_xdyi::x1#2 + 1 -Inferred type updated to unsigned int in bitmap_line_xdyd::$6 = bitmap_line_xdyd::x1#2 + 1 -Inferred type updated to unsigned int in bitmap_line_ydxi::$6 = bitmap_line_ydxi::y1#2 + 1 -Inferred type updated to unsigned int in bitmap_line_ydxd::$6 = bitmap_line_ydxd::y1#2 + 1 -Inferred type updated to char in divr16u::$2 = divr16u::$1 & $80 -Inferred type updated to unsigned int in divr16u::$5 = divr16u::rem#6 | 1 -Inferred type updated to char in main::$41 = main::$40 & $ff -Inversing boolean not [84] gotoxy::$1 = gotoxy::y#7 <= conio_screen_height from [83] gotoxy::$0 = gotoxy::y#7 > conio_screen_height -Inversing boolean not [88] gotoxy::$3 = gotoxy::x#7 < conio_screen_width from [87] gotoxy::$2 = gotoxy::x#7 >= conio_screen_width -Inversing boolean not [141] cputc::$12 = conio_cursor_x[conio_screen_layer] != conio_screen_width from [140] cputc::$11 = conio_cursor_x[conio_screen_layer] == conio_screen_width -Inversing boolean not [146] cputc::$9 = cputc::$16 != conio_width from [145] cputc::$8 = cputc::$16 == conio_width -Inversing boolean not [173] vera_display_get_hscale::$1 = *VERA_DC_HSCALE != vera_display_get_hscale::hscale[vera_display_get_hscale::s#2] from [172] vera_display_get_hscale::$0 = *VERA_DC_HSCALE == vera_display_get_hscale::hscale[vera_display_get_hscale::s#2] -Inversing boolean not [190] vera_display_get_vscale::$1 = *VERA_DC_VSCALE != vera_display_get_vscale::vscale[vera_display_get_vscale::s#2] from [189] vera_display_get_vscale::$0 = *VERA_DC_VSCALE == vera_display_get_vscale::vscale[vera_display_get_vscale::s#2] -Inversing boolean not [512] conio_x16_init::$8 = conio_x16_init::line#2 < conio_screen_height from [511] conio_x16_init::$7 = conio_x16_init::line#2 >= conio_screen_height -Inversing boolean not [577] cscroll::$1 = conio_cursor_y[conio_screen_layer] < conio_screen_height from [576] cscroll::$0 = conio_cursor_y[conio_screen_layer] >= conio_screen_height -Inversing boolean not [589] cscroll::$3 = conio_cursor_y[conio_screen_layer] < conio_height from [588] cscroll::$2 = conio_cursor_y[conio_screen_layer] >= conio_height -Inversing boolean not [702] bitmap_init::$6 = __bitmap_color_depth != 0 from [701] bitmap_init::$5 = __bitmap_color_depth == 0 -Inversing boolean not [706] bitmap_init::$9 = __bitmap_color_depth != 1 from [705] bitmap_init::$8 = __bitmap_color_depth == 1 -Inversing boolean not [718] bitmap_init::$12 = __bitmap_color_depth != 2 from [717] bitmap_init::$11 = __bitmap_color_depth == 2 -Inversing boolean not [730] bitmap_init::$15 = __bitmap_color_depth != 3 from [729] bitmap_init::$14 = __bitmap_color_depth == 3 -Inversing boolean not [742] bitmap_init::$17 = bitmap_init::bitshift#8 >= 0 from [741] bitmap_init::$16 = bitmap_init::bitshift#8 < 0 -Inversing boolean not [751] bitmap_init::$19 = bitmap_init::bitmask#9 != 0 from [750] bitmap_init::$18 = bitmap_init::bitmask#9 == 0 -Inversing boolean not [939] mul16u::$3 = mul16u::$1 == 0 from [938] mul16u::$2 = mul16u::$1 != 0 -Inversing boolean not [966] bitmap_line_xdyi::$4 = bitmap_line_xdyi::xd#2 >= bitmap_line_xdyi::e#1 from [965] bitmap_line_xdyi::$3 = bitmap_line_xdyi::xd#2 < bitmap_line_xdyi::e#1 -Inversing boolean not [989] bitmap_line_xdyd::$4 = bitmap_line_xdyd::xd#2 >= bitmap_line_xdyd::e#1 from [988] bitmap_line_xdyd::$3 = bitmap_line_xdyd::xd#2 < bitmap_line_xdyd::e#1 -Inversing boolean not [1012] bitmap_line_ydxi::$4 = bitmap_line_ydxi::yd#2 >= bitmap_line_ydxi::e#1 from [1011] bitmap_line_ydxi::$3 = bitmap_line_ydxi::yd#2 < bitmap_line_ydxi::e#1 -Inversing boolean not [1036] bitmap_line_ydxd::$4 = bitmap_line_ydxd::yd#2 >= bitmap_line_ydxd::e#1 from [1035] bitmap_line_ydxd::$3 = bitmap_line_ydxd::yd#2 < bitmap_line_ydxd::e#1 -Inversing boolean not [1056] divr16u::$4 = divr16u::$2 == 0 from [1055] divr16u::$3 = divr16u::$2 != 0 -Inversing boolean not [1064] divr16u::$9 = divr16u::rem#5 < divr16u::divisor#1 from [1063] divr16u::$8 = divr16u::rem#5 >= divr16u::divisor#1 -Inversing boolean not [1198] main::$31 = 0 == main::$30 from [1197] main::$48 = 0 != main::$30 -Inversing boolean not [1317] main::$44 = 0 == main::$43 from [1316] main::$49 = 0 != main::$43 -Inversing boolean not [1330] main::$47 = main::x#1 <= $13f from [1329] main::$46 = main::x#1 > $13f -Successful SSA optimization Pass2UnaryNotSimplification -Alias candidate removed (volatile)kbhit::return#0 = kbhit::ch kbhit::return#4 kbhit::return#1 -Alias candidate removed (volatile)screenlayer::vera_layer_get_width1_return#0 = screenlayer::vera_layer_get_width1_return#2 screenlayer::vera_layer_get_width1_return#1 screenlayer::vera_layer_get_width1_return#3 screenlayer::$2 conio_width -Alias candidate removed (volatile)conio_rowshift = screenlayer::$3 -Alias candidate removed (volatile)conio_rowskip = screenlayer::$4 -Alias candidate removed (volatile)screenlayer::vera_layer_get_height1_return#0 = screenlayer::vera_layer_get_height1_return#2 screenlayer::vera_layer_get_height1_return#1 screenlayer::vera_layer_get_height1_return#3 screenlayer::$5 conio_height -Alias candidate removed (volatile)bitmap_init::vera_layer_get_color_depth1_return#0 = bitmap_init::vera_layer_get_color_depth1_$0 bitmap_init::vera_layer_get_color_depth1_return#2 bitmap_init::vera_layer_get_color_depth1_return#1 bitmap_init::vera_layer_get_color_depth1_return#3 bitmap_init::$0 __bitmap_color_depth -Alias candidate removed (volatile)__bitmap_hscale = bitmap_init::$1 -Alias candidate removed (volatile)__bitmap_vscale = bitmap_init::$2 -Alias memcpy_in_vram::i#2 = memcpy_in_vram::i#3 -Alias memcpy_in_vram::num#2 = memcpy_in_vram::num#4 -Alias memset_vram::data#1 = memset_vram::data#2 -Alias memset_vram::i#2 = memset_vram::i#3 -Alias memset_vram::num#1 = memset_vram::num#3 -Alias vera_layer_get_backcolor::return#0 = vera_layer_get_backcolor::return#3 -Alias clrscr::line_text#0 = clrscr::line_text#8 clrscr::line_text#6 -Alias CONIO_SCREEN_BANK#32 = CONIO_SCREEN_BANK#40 CONIO_SCREEN_BANK#49 -Alias vera_layer_get_textcolor::return#0 = vera_layer_get_textcolor::return#3 -Alias clrscr::line_text#2 = clrscr::line_text#4 clrscr::ch#0 -Alias CONIO_SCREEN_BANK#11 = CONIO_SCREEN_BANK#22 -Alias clrscr::color#3 = clrscr::color#4 -Alias clrscr::l#2 = clrscr::l#5 -Alias clrscr::color#1 = clrscr::color#2 clrscr::color#5 -Alias clrscr::c#2 = clrscr::c#3 -Alias clrscr::line_text#3 = clrscr::line_text#7 clrscr::line_text#5 -Alias clrscr::l#3 = clrscr::l#6 clrscr::l#4 -Alias CONIO_SCREEN_BANK#31 = CONIO_SCREEN_BANK#50 CONIO_SCREEN_BANK#41 -Alias gotoxy::x#10 = gotoxy::x#9 -Alias gotoxy::y#10 = gotoxy::y#9 -Alias vera_layer_get_color::return#0 = vera_layer_get_color::return#5 -Alias CONIO_SCREEN_TEXT#12 = CONIO_SCREEN_TEXT#27 CONIO_SCREEN_TEXT#82 CONIO_SCREEN_TEXT#93 CONIO_SCREEN_TEXT#89 CONIO_SCREEN_TEXT#88 CONIO_SCREEN_TEXT#83 CONIO_SCREEN_TEXT#84 -Alias cputc::c#0 = cputc::c#1 cputc::c#2 -Alias CONIO_SCREEN_BANK#12 = CONIO_SCREEN_BANK#23 CONIO_SCREEN_BANK#33 -Alias cputc::conio_addr#1 = cputc::conio_addr#2 -Alias cputc::color#0 = cputc::color#1 -Alias vera_display_get_hscale::s#2 = vera_display_get_hscale::s#3 vera_display_get_hscale::s#4 vera_display_get_hscale::scale#1 -Alias vera_display_get_hscale::scale#3 = vera_display_get_hscale::scale#4 -Alias vera_display_get_hscale::return#0 = vera_display_get_hscale::scale#2 vera_display_get_hscale::return#3 vera_display_get_hscale::return#1 -Alias vera_display_get_vscale::s#2 = vera_display_get_vscale::s#3 vera_display_get_vscale::s#4 vera_display_get_vscale::scale#1 -Alias vera_display_get_vscale::scale#3 = vera_display_get_vscale::scale#4 -Alias vera_display_get_vscale::return#0 = vera_display_get_vscale::scale#2 vera_display_get_vscale::return#3 vera_display_get_vscale::return#1 -Alias vera_layer_get_mapbase_bank::return#0 = vera_layer_get_mapbase_bank::return#3 vera_layer_get_mapbase_bank::return#1 -Alias vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#3 vera_layer_get_mapbase_offset::return#1 -Alias vera_layer_set_textcolor::return#0 = vera_layer_set_textcolor::old#0 vera_layer_set_textcolor::return#8 vera_layer_set_textcolor::return#1 -Alias vera_layer_get_textcolor::return#1 = vera_layer_get_textcolor::return#4 vera_layer_get_textcolor::return#2 -Alias vera_layer_set_backcolor::return#0 = vera_layer_set_backcolor::old#0 vera_layer_set_backcolor::return#6 vera_layer_set_backcolor::return#1 -Alias vera_layer_get_backcolor::return#1 = vera_layer_get_backcolor::return#4 vera_layer_get_backcolor::return#2 -Alias vera_layer_get_color::layer#2 = vera_layer_get_color::layer#3 vera_layer_get_color::layer#4 -Alias vera_layer_get_color::return#2 = vera_layer_get_color::$2 -Alias vera_layer_get_color::return#3 = vera_layer_get_color::return#6 -Alias vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#3 vera_layer_get_rowshift::return#1 -Alias vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#3 vera_layer_get_rowskip::return#1 -Alias vera_layer_mode_tile::config#0 = vera_layer_mode_tile::config#13 vera_layer_mode_tile::config#26 vera_layer_mode_tile::config#14 vera_layer_mode_tile::config#27 vera_layer_mode_tile::config#15 vera_layer_mode_tile::config#28 vera_layer_mode_tile::config#16 -Alias vera_layer_mode_tile::mapwidth#10 = vera_layer_mode_tile::mapwidth#7 vera_layer_mode_tile::mapwidth#11 vera_layer_mode_tile::mapwidth#12 vera_layer_mode_tile::mapwidth#8 vera_layer_mode_tile::mapwidth#13 vera_layer_mode_tile::mapwidth#9 vera_layer_mode_tile::mapwidth#6 -Alias vera_layer_mode_tile::layer#22 = vera_layer_mode_tile::layer#23 vera_layer_mode_tile::layer#31 vera_layer_mode_tile::layer#32 vera_layer_mode_tile::layer#24 vera_layer_mode_tile::layer#33 vera_layer_mode_tile::layer#25 vera_layer_mode_tile::layer#26 -Alias vera_layer_mode_tile::mapheight#14 = vera_layer_mode_tile::mapheight#15 vera_layer_mode_tile::mapheight#19 vera_layer_mode_tile::mapheight#20 vera_layer_mode_tile::mapheight#16 vera_layer_mode_tile::mapheight#21 vera_layer_mode_tile::mapheight#17 vera_layer_mode_tile::mapheight#18 -Alias vera_layer_mode_tile::mapbase_address#21 = vera_layer_mode_tile::mapbase_address#22 vera_layer_mode_tile::mapbase_address#26 vera_layer_mode_tile::mapbase_address#27 vera_layer_mode_tile::mapbase_address#23 vera_layer_mode_tile::mapbase_address#28 vera_layer_mode_tile::mapbase_address#24 vera_layer_mode_tile::mapbase_address#25 -Alias vera_layer_mode_tile::tilebase_address#22 = vera_layer_mode_tile::tilebase_address#23 vera_layer_mode_tile::tilebase_address#27 vera_layer_mode_tile::tilebase_address#28 vera_layer_mode_tile::tilebase_address#24 vera_layer_mode_tile::tilebase_address#29 vera_layer_mode_tile::tilebase_address#25 vera_layer_mode_tile::tilebase_address#26 -Alias vera_layer_mode_tile::tilewidth#22 = vera_layer_mode_tile::tilewidth#23 vera_layer_mode_tile::tilewidth#27 vera_layer_mode_tile::tilewidth#28 vera_layer_mode_tile::tilewidth#24 vera_layer_mode_tile::tilewidth#29 vera_layer_mode_tile::tilewidth#25 vera_layer_mode_tile::tilewidth#26 -Alias vera_layer_mode_tile::tileheight#26 = vera_layer_mode_tile::tileheight#27 vera_layer_mode_tile::tileheight#31 vera_layer_mode_tile::tileheight#32 vera_layer_mode_tile::tileheight#28 vera_layer_mode_tile::tileheight#33 vera_layer_mode_tile::tileheight#29 vera_layer_mode_tile::tileheight#30 -Alias vera_layer_mode_tile::color_depth#2 = vera_layer_mode_tile::color_depth#3 vera_layer_mode_tile::color_depth#4 vera_layer_mode_tile::color_depth#5 -Alias vera_layer_mode_tile::config#17 = vera_layer_mode_tile::config#29 vera_layer_mode_tile::config#30 vera_layer_mode_tile::config#18 vera_layer_mode_tile::config#31 vera_layer_mode_tile::config#19 vera_layer_mode_tile::config#32 vera_layer_mode_tile::config#20 -Alias vera_layer_mode_tile::layer#10 = vera_layer_mode_tile::layer#2 vera_layer_mode_tile::layer#11 vera_layer_mode_tile::layer#3 vera_layer_mode_tile::layer#12 vera_layer_mode_tile::layer#4 vera_layer_mode_tile::layer#13 vera_layer_mode_tile::layer#5 -Alias vera_layer_mode_tile::mapheight#10 = vera_layer_mode_tile::mapheight#7 vera_layer_mode_tile::mapheight#11 vera_layer_mode_tile::mapheight#12 vera_layer_mode_tile::mapheight#8 vera_layer_mode_tile::mapheight#13 vera_layer_mode_tile::mapheight#9 vera_layer_mode_tile::mapheight#6 -Alias vera_layer_mode_tile::mapbase_address#13 = vera_layer_mode_tile::mapbase_address#14 vera_layer_mode_tile::mapbase_address#18 vera_layer_mode_tile::mapbase_address#19 vera_layer_mode_tile::mapbase_address#15 vera_layer_mode_tile::mapbase_address#20 vera_layer_mode_tile::mapbase_address#16 vera_layer_mode_tile::mapbase_address#17 -Alias vera_layer_mode_tile::tilebase_address#14 = vera_layer_mode_tile::tilebase_address#15 vera_layer_mode_tile::tilebase_address#19 vera_layer_mode_tile::tilebase_address#20 vera_layer_mode_tile::tilebase_address#16 vera_layer_mode_tile::tilebase_address#21 vera_layer_mode_tile::tilebase_address#17 vera_layer_mode_tile::tilebase_address#18 -Alias vera_layer_mode_tile::tilewidth#14 = vera_layer_mode_tile::tilewidth#15 vera_layer_mode_tile::tilewidth#19 vera_layer_mode_tile::tilewidth#20 vera_layer_mode_tile::tilewidth#16 vera_layer_mode_tile::tilewidth#21 vera_layer_mode_tile::tilewidth#17 vera_layer_mode_tile::tilewidth#18 -Alias vera_layer_mode_tile::tileheight#18 = vera_layer_mode_tile::tileheight#19 vera_layer_mode_tile::tileheight#23 vera_layer_mode_tile::tileheight#24 vera_layer_mode_tile::tileheight#20 vera_layer_mode_tile::tileheight#25 vera_layer_mode_tile::tileheight#21 vera_layer_mode_tile::tileheight#22 -Alias vera_layer_mode_tile::mapwidth#2 = vera_layer_mode_tile::mapwidth#3 vera_layer_mode_tile::mapwidth#4 vera_layer_mode_tile::mapwidth#5 -Alias vera_layer_mode_tile::config#21 = vera_layer_mode_tile::config#33 vera_layer_mode_tile::config#34 vera_layer_mode_tile::config#22 vera_layer_mode_tile::config#35 vera_layer_mode_tile::config#23 vera_layer_mode_tile::config#36 vera_layer_mode_tile::config#24 -Alias vera_layer_mode_tile::layer#14 = vera_layer_mode_tile::layer#15 vera_layer_mode_tile::layer#27 vera_layer_mode_tile::layer#28 vera_layer_mode_tile::layer#16 vera_layer_mode_tile::layer#29 vera_layer_mode_tile::layer#17 vera_layer_mode_tile::layer#18 -Alias vera_layer_mode_tile::mapbase_address#10 = vera_layer_mode_tile::mapbase_address#6 vera_layer_mode_tile::mapbase_address#11 vera_layer_mode_tile::mapbase_address#7 vera_layer_mode_tile::mapbase_address#12 vera_layer_mode_tile::mapbase_address#8 vera_layer_mode_tile::mapbase_address#5 vera_layer_mode_tile::mapbase_address#9 -Alias vera_layer_mode_tile::tilebase_address#10 = vera_layer_mode_tile::tilebase_address#7 vera_layer_mode_tile::tilebase_address#11 vera_layer_mode_tile::tilebase_address#12 vera_layer_mode_tile::tilebase_address#8 vera_layer_mode_tile::tilebase_address#13 vera_layer_mode_tile::tilebase_address#9 vera_layer_mode_tile::tilebase_address#6 -Alias vera_layer_mode_tile::tilewidth#10 = vera_layer_mode_tile::tilewidth#7 vera_layer_mode_tile::tilewidth#11 vera_layer_mode_tile::tilewidth#12 vera_layer_mode_tile::tilewidth#8 vera_layer_mode_tile::tilewidth#13 vera_layer_mode_tile::tilewidth#9 vera_layer_mode_tile::tilewidth#6 -Alias vera_layer_mode_tile::tileheight#10 = vera_layer_mode_tile::tileheight#11 vera_layer_mode_tile::tileheight#15 vera_layer_mode_tile::tileheight#16 vera_layer_mode_tile::tileheight#12 vera_layer_mode_tile::tileheight#17 vera_layer_mode_tile::tileheight#13 vera_layer_mode_tile::tileheight#14 -Alias vera_layer_mode_tile::mapheight#2 = vera_layer_mode_tile::mapheight#3 vera_layer_mode_tile::mapheight#4 vera_layer_mode_tile::mapheight#5 -Alias vera_layer_mode_tile::mapbase_address#3 = vera_layer_mode_tile::mapbase_address#4 -Alias vera_layer_mode_tile::layer#34 = vera_layer_mode_tile::layer#7 vera_layer_mode_tile::layer#6 vera_layer_mode_tile::layer#8 vera_layer_mode_tile::layer#35 vera_layer_mode_tile::layer#36 -Alias vera_layer_mode_tile::tilebase_address#3 = vera_layer_mode_tile::tilebase_address#4 vera_layer_mode_tile::tilebase_address#5 -Alias vera_layer_mode_tile::tilewidth#2 = vera_layer_mode_tile::tilewidth#4 vera_layer_mode_tile::tilewidth#5 vera_layer_mode_tile::tilewidth#3 -Alias vera_layer_mode_tile::tileheight#4 = vera_layer_mode_tile::tileheight#8 vera_layer_mode_tile::tileheight#9 vera_layer_mode_tile::tileheight#7 vera_layer_mode_tile::tileheight#5 vera_layer_mode_tile::tileheight#6 -Alias vera_layer_mode_tile::mapbase_address#0 = vera_layer_mode_tile::$3 -Alias vera_layer_mode_tile::tilebase_address#0 = vera_layer_mode_tile::$8 -Alias vera_layer_mode_tile::tilebase#1 = vera_layer_mode_tile::tilebase#6 vera_layer_mode_tile::tilebase#11 vera_layer_mode_tile::tilebase#7 -Alias vera_layer_mode_tile::tilebase#12 = vera_layer_mode_tile::tilebase#8 vera_layer_mode_tile::tilebase#13 vera_layer_mode_tile::tilebase#9 -Alias vera_layer_mode_tile::layer#19 = vera_layer_mode_tile::layer#20 vera_layer_mode_tile::layer#30 vera_layer_mode_tile::layer#21 -Alias vera_layer_mode_tile::tileheight#2 = vera_layer_mode_tile::tileheight#3 -Alias vera_layer_mode_text::color_mode#1 = vera_layer_mode_text::color_mode#3 vera_layer_mode_text::color_mode#2 -Alias vera_layer_mode_text::layer#1 = vera_layer_mode_text::layer#4 vera_layer_mode_text::layer#2 vera_layer_mode_text::layer#5 vera_layer_mode_text::layer#3 -Alias vera_layer_mode_bitmap::config#0 = vera_layer_mode_bitmap::config#6 vera_layer_mode_bitmap::config#12 vera_layer_mode_bitmap::config#7 vera_layer_mode_bitmap::config#13 vera_layer_mode_bitmap::config#8 vera_layer_mode_bitmap::config#14 vera_layer_mode_bitmap::config#9 -Alias vera_layer_mode_bitmap::bitmap_address#10 = vera_layer_mode_bitmap::bitmap_address#4 vera_layer_mode_bitmap::bitmap_address#8 vera_layer_mode_bitmap::bitmap_address#9 vera_layer_mode_bitmap::bitmap_address#5 vera_layer_mode_bitmap::bitmap_address#6 vera_layer_mode_bitmap::bitmap_address#3 vera_layer_mode_bitmap::bitmap_address#7 -Alias vera_layer_mode_bitmap::layer#12 = vera_layer_mode_bitmap::layer#5 vera_layer_mode_bitmap::layer#13 vera_layer_mode_bitmap::layer#6 vera_layer_mode_bitmap::layer#14 vera_layer_mode_bitmap::layer#7 vera_layer_mode_bitmap::layer#4 vera_layer_mode_bitmap::layer#8 -Alias vera_layer_mode_bitmap::mapwidth#10 = vera_layer_mode_bitmap::mapwidth#4 vera_layer_mode_bitmap::mapwidth#8 vera_layer_mode_bitmap::mapwidth#9 vera_layer_mode_bitmap::mapwidth#5 vera_layer_mode_bitmap::mapwidth#6 vera_layer_mode_bitmap::mapwidth#3 vera_layer_mode_bitmap::mapwidth#7 -Alias vera_layer_mode_bitmap::color_depth#1 = vera_layer_mode_bitmap::color_depth#2 vera_layer_mode_bitmap::color_depth#3 vera_layer_mode_bitmap::color_depth#4 -Alias vera_layer_mode_bitmap::config#15 = vera_layer_mode_bitmap::config#5 vera_layer_mode_bitmap::$0 vera_layer_mode_bitmap::config#18 vera_layer_mode_bitmap::config#17 vera_layer_mode_bitmap::config#19 vera_layer_mode_bitmap::config#16 -Alias vera_layer_mode_bitmap::bitmap_address#0 = vera_layer_mode_bitmap::$3 -Alias vera_layer_mode_bitmap::tilebase#1 = vera_layer_mode_bitmap::tilebase#7 vera_layer_mode_bitmap::tilebase#4 vera_layer_mode_bitmap::tilebase#10 vera_layer_mode_bitmap::tilebase#8 vera_layer_mode_bitmap::tilebase#5 -Alias vera_layer_mode_bitmap::layer#1 = vera_layer_mode_bitmap::layer#15 vera_layer_mode_bitmap::layer#9 vera_layer_mode_bitmap::layer#11 vera_layer_mode_bitmap::layer#16 vera_layer_mode_bitmap::layer#10 -Alias vera_layer_mode_bitmap::mapwidth#1 = vera_layer_mode_bitmap::mapwidth#2 -Alias vera_layer_mode_bitmap::layer#2 = vera_layer_mode_bitmap::layer#3 -Alias vera_layer_mode_bitmap::tilebase#6 = vera_layer_mode_bitmap::tilebase#9 -Alias CONIO_SCREEN_BANK#24 = CONIO_SCREEN_BANK#34 CONIO_SCREEN_BANK#42 -Alias CONIO_SCREEN_TEXT#28 = CONIO_SCREEN_TEXT#37 CONIO_SCREEN_TEXT#47 -Alias conio_x16_init::line#0 = conio_x16_init::line#9 conio_x16_init::line#8 conio_x16_init::line#7 conio_x16_init::line#6 conio_x16_init::line#5 conio_x16_init::line#4 conio_x16_init::line#2 -Alias CONIO_SCREEN_BANK#0 = CONIO_SCREEN_BANK#13 CONIO_SCREEN_BANK#65 CONIO_SCREEN_BANK#60 CONIO_SCREEN_BANK#51 CONIO_SCREEN_BANK#44 CONIO_SCREEN_BANK#43 -Alias CONIO_SCREEN_TEXT#0 = CONIO_SCREEN_TEXT#13 CONIO_SCREEN_TEXT#75 CONIO_SCREEN_TEXT#67 CONIO_SCREEN_TEXT#57 CONIO_SCREEN_TEXT#49 CONIO_SCREEN_TEXT#48 -Alias CONIO_SCREEN_BANK#1 = CONIO_SCREEN_BANK#25 CONIO_SCREEN_BANK#35 CONIO_SCREEN_BANK#14 -Alias CONIO_SCREEN_TEXT#1 = CONIO_SCREEN_TEXT#29 CONIO_SCREEN_TEXT#38 CONIO_SCREEN_TEXT#14 -Alias conio_x16_init::line#1 = conio_x16_init::$9 -Alias vera_layer_get_color::return#4 = vera_layer_get_color::return#7 -Alias clearline::color#1 = clearline::color#2 -Alias clearline::c#2 = clearline::c#3 -Alias insertup::i#2 = insertup::i#3 insertup::i#4 -Alias CONIO_SCREEN_TEXT#16 = CONIO_SCREEN_TEXT#31 CONIO_SCREEN_TEXT#40 CONIO_SCREEN_TEXT#30 -Alias insertup::width#1 = insertup::width#2 insertup::width#3 -Alias insertup::cy#1 = insertup::cy#3 insertup::cy#2 -Alias CONIO_SCREEN_TEXT#50 = CONIO_SCREEN_TEXT#58 CONIO_SCREEN_TEXT#68 -Alias gotoxy::y#2 = cscroll::$5 -Alias vera_layer_get_mapbase_bank::return#2 = vera_layer_get_mapbase_bank::return#4 -Alias CONIO_SCREEN_BANK#15 = CONIO_SCREEN_BANK#2 screenlayer::$0 CONIO_SCREEN_BANK#80 CONIO_SCREEN_BANK#76 CONIO_SCREEN_BANK#71 CONIO_SCREEN_BANK#66 CONIO_SCREEN_BANK#61 CONIO_SCREEN_BANK#52 CONIO_SCREEN_BANK#45 CONIO_SCREEN_BANK#36 CONIO_SCREEN_BANK#26 CONIO_SCREEN_BANK#3 -Alias vera_layer_get_mapbase_offset::return#2 = vera_layer_get_mapbase_offset::return#4 -Alias screenlayer::vera_layer_get_width1_layer#0 = screenlayer::vera_layer_get_width1_layer#1 -Alias CONIO_SCREEN_TEXT#17 = CONIO_SCREEN_TEXT#90 CONIO_SCREEN_TEXT#2 CONIO_SCREEN_TEXT#85 CONIO_SCREEN_TEXT#77 CONIO_SCREEN_TEXT#69 CONIO_SCREEN_TEXT#59 CONIO_SCREEN_TEXT#51 CONIO_SCREEN_TEXT#41 CONIO_SCREEN_TEXT#32 CONIO_SCREEN_TEXT#3 -Alias vera_layer_get_rowshift::return#2 = vera_layer_get_rowshift::return#4 -Alias vera_layer_get_rowskip::return#2 = vera_layer_get_rowskip::return#4 -Alias screenlayer::vera_layer_get_height1_layer#0 = screenlayer::vera_layer_get_height1_layer#1 -Alias rand::return#0 = rand::return#7 rand::return#1 -Alias rand_state#14 = rand_state#2 rand_state#3 -Alias printf_str::c#1 = printf_str::$0 printf_str::c#2 -Alias printf_str::putc#7 = printf_str::putc#8 -Alias printf_str::s#0 = printf_str::s#10 -Alias bitmap_init::vera_layer_get_color_depth1_layer#0 = bitmap_init::vera_layer_get_color_depth1_layer#1 -Alias vera_display_get_hscale::return#2 = vera_display_get_hscale::return#4 -Alias vera_display_get_vscale::return#2 = vera_display_get_vscale::return#4 -Alias bitmap_init::x#2 = bitmap_init::x#7 -Alias bitmap_init::bitmask#10 = bitmap_init::bitmask#5 -Alias bitmap_init::bitshift#10 = bitmap_init::bitshift#5 -Alias bitmap_init::x#3 = bitmap_init::x#8 -Alias bitmap_init::bitmask#11 = bitmap_init::bitmask#6 -Alias bitmap_init::bitshift#11 = bitmap_init::bitshift#6 -Alias bitmap_init::x#4 = bitmap_init::x#9 -Alias bitmap_init::bitmask#12 = bitmap_init::bitmask#7 -Alias bitmap_init::bitshift#12 = bitmap_init::bitshift#7 -Alias bitmap_init::x#10 = bitmap_init::x#5 -Alias bitmap_init::bitmask#13 = bitmap_init::bitmask#8 -Alias bitmap_init::bitshift#13 = bitmap_init::bitshift#9 -Alias bitmap_init::bitmask#14 = bitmap_init::bitmask#15 -Alias bitmap_init::x#13 = bitmap_init::x#14 -Alias bitmap_init::x#11 = bitmap_init::x#12 -Alias bitmap_init::bitshift#15 = bitmap_init::bitshift#16 -Alias bitmap_init::yoffs#1 = bitmap_init::$21 -Alias mul16u::return#0 = mul16u::return#3 -Alias bitmap_plot::c#5 = bitmap_plot::c#8 bitmap_plot::c#6 bitmap_plot::$1 -Alias bitmap_plot::bitshift#0 = bitmap_plot::bitshift#1 -Alias bitmap_plot::plotter#0 = bitmap_plot::plotter#2 bitmap_plot::plotter#3 -Alias bitmap_plot::x#4 = bitmap_plot::x#8 bitmap_plot::x#9 -Alias bitmap_plot::$3 = bitmap_plot::$2 -Alias bitmap_plot::c#0 = bitmap_plot::$4 bitmap_plot::c#9 bitmap_plot::c#7 -Alias bitmap_plot::vera_vram_address01_bankaddr#0 = bitmap_plot::plotter#1 bitmap_plot::vera_vram_address01_bankaddr#1 -Alias bitmap_plot::vera_vram_address01_incr#0 = bitmap_plot::vera_vram_address01_incr#1 -Alias bitmap_plot::x#5 = bitmap_plot::x#6 bitmap_plot::x#7 -Alias bitmap_line::x1#10 = bitmap_line::x1#3 bitmap_line::x1#2 bitmap_line::x1#4 bitmap_line::x1#12 bitmap_line::x1#11 bitmap_line::x1#5 bitmap_line::x1#6 bitmap_line::x1#7 bitmap_line::x1#14 bitmap_line::x1#13 bitmap_line::x1#8 bitmap_line::x1#9 -Alias bitmap_line::x0#10 = bitmap_line::x0#3 bitmap_line::x0#2 bitmap_line::x0#4 bitmap_line::x0#12 bitmap_line::x0#11 bitmap_line::x0#5 bitmap_line::x0#6 bitmap_line::x0#7 bitmap_line::x0#14 bitmap_line::x0#13 bitmap_line::x0#8 bitmap_line::x0#9 -Alias bitmap_line::y0#10 = bitmap_line::y0#2 bitmap_line::y0#14 bitmap_line::y0#3 bitmap_line::y0#4 bitmap_line::y0#5 bitmap_line::y0#6 bitmap_line::y0#7 bitmap_line::y0#8 bitmap_line::y0#9 bitmap_line::y0#11 bitmap_line::y0#12 bitmap_line::y0#13 -Alias bitmap_line::y1#10 = bitmap_line::y1#2 bitmap_line::y1#14 bitmap_line::y1#3 bitmap_line::y1#4 bitmap_line::y1#5 bitmap_line::y1#6 bitmap_line::y1#7 bitmap_line::y1#8 bitmap_line::y1#9 bitmap_line::y1#11 bitmap_line::y1#12 bitmap_line::y1#13 -Alias bitmap_line::c#10 = bitmap_line::c#15 bitmap_line::c#16 bitmap_line::c#14 bitmap_line::c#11 bitmap_line::c#2 bitmap_line::c#3 bitmap_line::c#4 bitmap_line::c#5 bitmap_line::c#13 bitmap_line::c#12 bitmap_line::c#6 bitmap_line::c#7 bitmap_line::c#8 bitmap_line::c#9 -Alias bitmap_line::xd#1 = bitmap_line::$11 bitmap_line::xd#9 bitmap_line::xd#10 bitmap_line::xd#11 bitmap_line::xd#12 bitmap_line::xd#13 bitmap_line::xd#14 -Alias bitmap_line::xd#2 = bitmap_line::$1 bitmap_line::xd#3 bitmap_line::xd#4 bitmap_line::xd#5 bitmap_line::xd#6 bitmap_line::xd#7 bitmap_line::xd#8 -Alias bitmap_line::yd#1 = bitmap_line::$7 bitmap_line::yd#7 bitmap_line::yd#8 -Alias bitmap_line::yd#2 = bitmap_line::$3 bitmap_line::yd#5 bitmap_line::yd#6 -Alias bitmap_line::yd#11 = bitmap_line::yd#3 bitmap_line::$17 bitmap_line::yd#12 -Alias bitmap_line::yd#10 = bitmap_line::yd#4 bitmap_line::$13 bitmap_line::yd#9 -Alias mul16u::a#2 = mul16u::a#3 mul16u::a#6 -Alias mul16u::mb#3 = mul16u::mb#4 mul16u::mb#5 -Alias mul16u::res#2 = mul16u::res#5 mul16u::res#4 mul16u::return#1 mul16u::res#3 mul16u::return#4 mul16u::return#2 -Alias mul16u::a#1 = mul16u::$5 -Alias mul16u::mb#1 = mul16u::$6 -Alias mul16u::res#1 = mul16u::$4 -Alias bitmap_line_xdyi::x#3 = bitmap_line_xdyi::x#4 -Alias bitmap_line_xdyi::e#3 = bitmap_line_xdyi::e#5 -Alias bitmap_line_xdyi::yd#3 = bitmap_line_xdyi::yd#4 bitmap_line_xdyi::yd#6 -Alias bitmap_line_xdyi::xd#2 = bitmap_line_xdyi::xd#4 bitmap_line_xdyi::xd#3 -Alias bitmap_line_xdyi::x1#3 = bitmap_line_xdyi::x1#4 bitmap_line_xdyi::x1#5 -Alias bitmap_line_xdyi::y#3 = bitmap_line_xdyi::y#7 bitmap_line_xdyi::y#4 -Alias bitmap_line_xdyi::c#2 = bitmap_line_xdyi::c#6 bitmap_line_xdyi::c#5 -Alias bitmap_line_xdyi::e#1 = bitmap_line_xdyi::$2 bitmap_line_xdyi::e#4 -Alias bitmap_line_xdyi::x#2 = bitmap_line_xdyi::x#7 -Alias bitmap_line_xdyi::e#2 = bitmap_line_xdyi::$5 -Alias bitmap_line_xdyd::x#3 = bitmap_line_xdyd::x#4 -Alias bitmap_line_xdyd::e#3 = bitmap_line_xdyd::e#5 -Alias bitmap_line_xdyd::yd#3 = bitmap_line_xdyd::yd#4 bitmap_line_xdyd::yd#6 -Alias bitmap_line_xdyd::xd#2 = bitmap_line_xdyd::xd#4 bitmap_line_xdyd::xd#3 -Alias bitmap_line_xdyd::x1#3 = bitmap_line_xdyd::x1#4 bitmap_line_xdyd::x1#5 -Alias bitmap_line_xdyd::y#3 = bitmap_line_xdyd::y#7 bitmap_line_xdyd::y#4 -Alias bitmap_line_xdyd::c#2 = bitmap_line_xdyd::c#6 bitmap_line_xdyd::c#5 -Alias bitmap_line_xdyd::e#1 = bitmap_line_xdyd::$2 bitmap_line_xdyd::e#4 -Alias bitmap_line_xdyd::x#2 = bitmap_line_xdyd::x#7 -Alias bitmap_line_xdyd::e#2 = bitmap_line_xdyd::$5 -Alias bitmap_line_ydxi::y#3 = bitmap_line_ydxi::y#4 -Alias bitmap_line_ydxi::e#3 = bitmap_line_ydxi::e#5 -Alias bitmap_line_ydxi::xd#3 = bitmap_line_ydxi::xd#4 bitmap_line_ydxi::xd#6 -Alias bitmap_line_ydxi::yd#2 = bitmap_line_ydxi::yd#4 bitmap_line_ydxi::yd#3 -Alias bitmap_line_ydxi::y1#3 = bitmap_line_ydxi::y1#4 bitmap_line_ydxi::y1#5 -Alias bitmap_line_ydxi::x#3 = bitmap_line_ydxi::x#7 bitmap_line_ydxi::x#4 -Alias bitmap_line_ydxi::c#2 = bitmap_line_ydxi::c#6 bitmap_line_ydxi::c#5 -Alias bitmap_line_ydxi::e#1 = bitmap_line_ydxi::$2 bitmap_line_ydxi::e#4 -Alias bitmap_line_ydxi::y#2 = bitmap_line_ydxi::y#7 -Alias bitmap_line_ydxi::e#2 = bitmap_line_ydxi::$5 -Alias bitmap_line_ydxd::y#2 = bitmap_line_ydxd::y#5 bitmap_line_ydxd::y#4 -Alias bitmap_line_ydxd::e#3 = bitmap_line_ydxd::e#5 -Alias bitmap_line_ydxd::xd#3 = bitmap_line_ydxd::xd#4 bitmap_line_ydxd::xd#6 -Alias bitmap_line_ydxd::yd#2 = bitmap_line_ydxd::yd#4 bitmap_line_ydxd::yd#3 -Alias bitmap_line_ydxd::y1#3 = bitmap_line_ydxd::y1#4 bitmap_line_ydxd::y1#5 -Alias bitmap_line_ydxd::x#3 = bitmap_line_ydxd::x#7 bitmap_line_ydxd::x#4 -Alias bitmap_line_ydxd::c#2 = bitmap_line_ydxd::c#6 bitmap_line_ydxd::c#5 -Alias bitmap_line_ydxd::e#1 = bitmap_line_ydxd::$2 bitmap_line_ydxd::e#4 -Alias bitmap_line_ydxd::y#3 = bitmap_line_ydxd::y#8 -Alias bitmap_line_ydxd::e#2 = bitmap_line_ydxd::$5 -Alias divr16u::rem#0 = divr16u::$0 divr16u::rem#6 -Alias divr16u::dividend#0 = divr16u::$6 divr16u::dividend#7 -Alias divr16u::quotient#1 = divr16u::$7 divr16u::quotient#4 -Alias divr16u::dividend#2 = divr16u::dividend#6 -Alias divr16u::quotient#6 = divr16u::quotient#7 -Alias divr16u::divisor#3 = divr16u::divisor#4 -Alias divr16u::i#5 = divr16u::i#6 -Alias divr16u::rem#1 = divr16u::$5 -Alias divr16u::rem#5 = divr16u::rem#7 -Alias divr16u::divisor#1 = divr16u::divisor#2 -Alias divr16u::i#3 = divr16u::i#4 -Alias divr16u::rem#2 = divr16u::$10 -Alias divr16u::rem#10 = divr16u::rem#8 -Alias divr16u::return#0 = divr16u::quotient#5 divr16u::quotient#8 divr16u::return#3 divr16u::return#1 -Alias rem16u#0 = rem16u#12 rem16u#1 -Alias rem16u#13 = rem16u#2 rem16u#14 rem16u#3 -Alias modr16u::return#0 = modr16u::return#6 modr16u::return#1 -Alias CONIO_SCREEN_BANK#27 = CONIO_SCREEN_BANK#46 CONIO_SCREEN_BANK#53 CONIO_SCREEN_BANK#37 -Alias CONIO_SCREEN_TEXT#33 = CONIO_SCREEN_TEXT#52 CONIO_SCREEN_TEXT#60 CONIO_SCREEN_TEXT#42 -Alias rand_state#35 = rand_state#86 rand_state#87 rand_state#85 rand_state#83 rand_state#81 rand_state#79 rand_state#77 rand_state#75 rand_state#73 rand_state#71 rand_state#69 rand_state#67 rand_state#65 rand_state#63 rand_state#61 rand_state#59 rand_state#56 rand_state#52 rand_state#50 rand_state#48 rand_state#46 rand_state#44 rand_state#42 rand_state#40 rand_state#38 -Alias rem16u#36 = rem16u#87 rem16u#88 rem16u#86 rem16u#85 rem16u#83 rem16u#81 rem16u#79 rem16u#77 rem16u#75 rem16u#73 rem16u#71 rem16u#69 rem16u#67 rem16u#65 rem16u#63 rem16u#61 rem16u#59 rem16u#56 rem16u#52 rem16u#50 rem16u#48 rem16u#46 rem16u#44 rem16u#42 rem16u#39 -Alias CONIO_SCREEN_BANK#101 = CONIO_SCREEN_BANK#4 CONIO_SCREEN_BANK#16 CONIO_SCREEN_BANK#84 CONIO_SCREEN_BANK#81 CONIO_SCREEN_BANK#77 CONIO_SCREEN_BANK#72 CONIO_SCREEN_BANK#67 CONIO_SCREEN_BANK#59 CONIO_SCREEN_BANK#116 CONIO_SCREEN_BANK#115 CONIO_SCREEN_BANK#114 CONIO_SCREEN_BANK#113 CONIO_SCREEN_BANK#111 CONIO_SCREEN_BANK#109 CONIO_SCREEN_BANK#107 CONIO_SCREEN_BANK#105 CONIO_SCREEN_BANK#103 CONIO_SCREEN_BANK#99 CONIO_SCREEN_BANK#97 CONIO_SCREEN_BANK#95 CONIO_SCREEN_BANK#93 CONIO_SCREEN_BANK#91 -Alias CONIO_SCREEN_TEXT#102 = CONIO_SCREEN_TEXT#4 CONIO_SCREEN_TEXT#18 CONIO_SCREEN_TEXT#78 CONIO_SCREEN_TEXT#70 CONIO_SCREEN_TEXT#61 CONIO_SCREEN_TEXT#53 CONIO_SCREEN_TEXT#43 CONIO_SCREEN_TEXT#26 CONIO_SCREEN_TEXT#123 CONIO_SCREEN_TEXT#122 CONIO_SCREEN_TEXT#121 CONIO_SCREEN_TEXT#120 CONIO_SCREEN_TEXT#118 CONIO_SCREEN_TEXT#116 CONIO_SCREEN_TEXT#114 CONIO_SCREEN_TEXT#112 CONIO_SCREEN_TEXT#110 CONIO_SCREEN_TEXT#108 CONIO_SCREEN_TEXT#106 CONIO_SCREEN_TEXT#104 CONIO_SCREEN_TEXT#99 CONIO_SCREEN_TEXT#96 -Alias main::textcolor1_color#0 = main::textcolor1_color#1 -Alias main::bgcolor1_color#0 = main::bgcolor1_color#1 -Alias main::vera_layer_show1_layer#0 = main::vera_layer_show1_layer#1 -Alias main::textcolor2_color#0 = main::textcolor2_color#1 -Alias kbhit::return#2 = kbhit::return#5 -Alias rand_state#23 = rand_state#30 rand_state#33 rand_state#84 rand_state#82 rand_state#80 rand_state#78 rand_state#76 rand_state#74 rand_state#72 rand_state#70 rand_state#68 rand_state#66 rand_state#64 rand_state#62 rand_state#60 rand_state#57 rand_state#53 -Alias rem16u#23 = rem16u#32 rem16u#34 rem16u#29 rem16u#84 rem16u#82 rem16u#80 rem16u#78 rem16u#76 rem16u#74 rem16u#72 rem16u#70 rem16u#68 rem16u#66 rem16u#64 rem16u#62 rem16u#60 rem16u#57 rem16u#53 -Alias CONIO_SCREEN_TEXT#100 = CONIO_SCREEN_TEXT#91 CONIO_SCREEN_TEXT#94 CONIO_SCREEN_TEXT#119 CONIO_SCREEN_TEXT#117 CONIO_SCREEN_TEXT#115 CONIO_SCREEN_TEXT#113 CONIO_SCREEN_TEXT#111 CONIO_SCREEN_TEXT#109 CONIO_SCREEN_TEXT#107 CONIO_SCREEN_TEXT#105 CONIO_SCREEN_TEXT#103 CONIO_SCREEN_TEXT#97 CONIO_SCREEN_TEXT#86 CONIO_SCREEN_TEXT#79 CONIO_SCREEN_TEXT#71 CONIO_SCREEN_TEXT#62 CONIO_SCREEN_TEXT#54 CONIO_SCREEN_TEXT#44 CONIO_SCREEN_TEXT#24 CONIO_SCREEN_TEXT#101 CONIO_SCREEN_TEXT#98 CONIO_SCREEN_TEXT#95 CONIO_SCREEN_TEXT#92 CONIO_SCREEN_TEXT#87 CONIO_SCREEN_TEXT#80 CONIO_SCREEN_TEXT#72 CONIO_SCREEN_TEXT#63 -Alias CONIO_SCREEN_BANK#100 = CONIO_SCREEN_BANK#89 CONIO_SCREEN_BANK#90 CONIO_SCREEN_BANK#112 CONIO_SCREEN_BANK#110 CONIO_SCREEN_BANK#108 CONIO_SCREEN_BANK#106 CONIO_SCREEN_BANK#104 CONIO_SCREEN_BANK#102 CONIO_SCREEN_BANK#98 CONIO_SCREEN_BANK#96 CONIO_SCREEN_BANK#94 CONIO_SCREEN_BANK#92 CONIO_SCREEN_BANK#87 CONIO_SCREEN_BANK#85 CONIO_SCREEN_BANK#82 CONIO_SCREEN_BANK#78 CONIO_SCREEN_BANK#73 CONIO_SCREEN_BANK#68 CONIO_SCREEN_BANK#58 CONIO_SCREEN_BANK#88 CONIO_SCREEN_BANK#86 CONIO_SCREEN_BANK#83 CONIO_SCREEN_BANK#79 CONIO_SCREEN_BANK#74 CONIO_SCREEN_BANK#69 CONIO_SCREEN_BANK#62 CONIO_SCREEN_BANK#54 -Alias rand::return#2 = rand::return#8 -Alias rand_state#15 = rand_state#4 rand_state#24 -Alias modr16u::dividend#0 = main::$32 -Alias modr16u::return#2 = modr16u::return#7 -Alias rem16u#15 = rem16u#4 rem16u#24 -Alias rand::return#3 = rand::return#9 -Alias rand_state#16 = rand_state#5 rand_state#25 -Alias modr16u::dividend#1 = main::$34 -Alias modr16u::return#3 = modr16u::return#8 -Alias rem16u#16 = rem16u#5 rem16u#25 -Alias rand::return#10 = rand::return#4 -Alias rand_state#17 = rand_state#6 rand_state#26 -Alias modr16u::dividend#2 = main::$36 -Alias modr16u::return#4 = modr16u::return#9 -Alias rem16u#17 = rem16u#6 rem16u#26 -Alias rand::return#11 = rand::return#5 -Alias rand_state#18 = rand_state#7 rand_state#27 -Alias modr16u::dividend#3 = main::$38 -Alias modr16u::return#10 = modr16u::return#5 -Alias rem16u#18 = rem16u#7 rem16u#40 rem16u#37 -Alias rand::return#12 = rand::return#6 -Alias rand_state#19 = rand_state#8 rand_state#36 -Alias bitmap_line::x0#0 = main::$33 -Alias bitmap_line::x1#0 = main::$35 -Alias bitmap_line::y0#0 = main::$37 -Alias bitmap_line::y1#0 = main::$39 -Alias bitmap_line::c#0 = main::$41 -Alias main::textcolor3_color#0 = main::textcolor3_color#1 -Alias main::bgcolor2_color#0 = main::bgcolor2_color#1 -Alias main::textcolor4_color#0 = main::textcolor4_color#1 -Alias kbhit::return#3 = kbhit::return#6 -Alias main::x#3 = main::x#5 main::x#6 main::x#4 -Alias main::color#2 = main::color#4 main::color#5 main::color#3 -Alias CONIO_SCREEN_BANK#28 = CONIO_SCREEN_BANK#38 CONIO_SCREEN_BANK#47 CONIO_SCREEN_BANK#63 CONIO_SCREEN_BANK#55 CONIO_SCREEN_BANK#56 -Alias CONIO_SCREEN_TEXT#34 = CONIO_SCREEN_TEXT#45 CONIO_SCREEN_TEXT#55 CONIO_SCREEN_TEXT#73 CONIO_SCREEN_TEXT#64 CONIO_SCREEN_TEXT#65 -Alias rand_state#20 = rand_state#49 rand_state#51 rand_state#58 rand_state#54 rand_state#47 rand_state#45 rand_state#43 rand_state#41 rand_state#39 rand_state#37 rand_state#34 rand_state#31 rand_state#28 rand_state#55 rand_state#9 -Alias rem16u#19 = rem16u#49 rem16u#51 rem16u#58 rem16u#54 rem16u#47 rem16u#45 rem16u#43 rem16u#41 rem16u#38 rem16u#35 rem16u#33 rem16u#30 rem16u#27 rem16u#55 rem16u#8 -Alias CONIO_SCREEN_BANK#17 = CONIO_SCREEN_BANK#5 CONIO_SCREEN_BANK#75 CONIO_SCREEN_BANK#70 CONIO_SCREEN_BANK#64 CONIO_SCREEN_BANK#57 CONIO_SCREEN_BANK#48 CONIO_SCREEN_BANK#39 CONIO_SCREEN_BANK#29 CONIO_SCREEN_BANK#18 CONIO_SCREEN_BANK#6 -Alias CONIO_SCREEN_TEXT#19 = CONIO_SCREEN_TEXT#5 CONIO_SCREEN_TEXT#81 CONIO_SCREEN_TEXT#74 CONIO_SCREEN_TEXT#66 CONIO_SCREEN_TEXT#56 CONIO_SCREEN_TEXT#46 CONIO_SCREEN_TEXT#25 CONIO_SCREEN_TEXT#35 CONIO_SCREEN_TEXT#20 CONIO_SCREEN_TEXT#6 -Alias main::textcolor5_color#0 = main::textcolor5_color#1 -Alias main::bgcolor3_color#0 = main::bgcolor3_color#1 -Alias main::color#1 = main::color#6 -Alias rand_state#10 = rand_state#32 rand_state#29 -Alias rem16u#28 = rem16u#31 rem16u#9 -Alias CONIO_SCREEN_BANK#19 = CONIO_SCREEN_BANK#8 CONIO_SCREEN_BANK#30 -Alias CONIO_SCREEN_TEXT#21 = CONIO_SCREEN_TEXT#8 CONIO_SCREEN_TEXT#36 -Alias CONIO_SCREEN_BANK#10 = CONIO_SCREEN_BANK#9 CONIO_SCREEN_BANK#20 CONIO_SCREEN_BANK#21 -Alias CONIO_SCREEN_TEXT#10 = CONIO_SCREEN_TEXT#9 CONIO_SCREEN_TEXT#22 CONIO_SCREEN_TEXT#23 -Alias rand_state#11 = rand_state#21 rand_state#22 rand_state#12 -Alias rem16u#10 = rem16u#20 rem16u#21 rem16u#11 -Successful SSA optimization Pass2AliasElimination -Alias candidate removed (volatile)kbhit::return#0 = kbhit::ch kbhit::return#4 kbhit::return#1 -Alias candidate removed (volatile)screenlayer::vera_layer_get_width1_return#0 = screenlayer::vera_layer_get_width1_return#2 screenlayer::vera_layer_get_width1_return#1 screenlayer::vera_layer_get_width1_return#3 screenlayer::$2 conio_width -Alias candidate removed (volatile)conio_rowshift = screenlayer::$3 -Alias candidate removed (volatile)conio_rowskip = screenlayer::$4 -Alias candidate removed (volatile)screenlayer::vera_layer_get_height1_return#0 = screenlayer::vera_layer_get_height1_return#2 screenlayer::vera_layer_get_height1_return#1 screenlayer::vera_layer_get_height1_return#3 screenlayer::$5 conio_height -Alias candidate removed (volatile)bitmap_init::vera_layer_get_color_depth1_return#0 = bitmap_init::vera_layer_get_color_depth1_$0 bitmap_init::vera_layer_get_color_depth1_return#2 bitmap_init::vera_layer_get_color_depth1_return#1 bitmap_init::vera_layer_get_color_depth1_return#3 bitmap_init::$0 __bitmap_color_depth -Alias candidate removed (volatile)__bitmap_hscale = bitmap_init::$1 -Alias candidate removed (volatile)__bitmap_vscale = bitmap_init::$2 -Alias gotoxy::x#10 = gotoxy::x#7 -Alias gotoxy::y#10 = gotoxy::y#8 -Alias vera_layer_mode_tile::mapwidth#10 = vera_layer_mode_tile::mapwidth#2 -Alias vera_layer_mode_tile::layer#10 = vera_layer_mode_tile::layer#22 vera_layer_mode_tile::layer#14 vera_layer_mode_tile::layer#34 vera_layer_mode_tile::layer#19 vera_layer_mode_tile::layer#9 -Alias vera_layer_mode_tile::mapheight#10 = vera_layer_mode_tile::mapheight#14 vera_layer_mode_tile::mapheight#2 -Alias vera_layer_mode_tile::mapbase_address#10 = vera_layer_mode_tile::mapbase_address#13 vera_layer_mode_tile::mapbase_address#21 vera_layer_mode_tile::mapbase_address#3 -Alias vera_layer_mode_tile::tilebase_address#10 = vera_layer_mode_tile::tilebase_address#14 vera_layer_mode_tile::tilebase_address#22 vera_layer_mode_tile::tilebase_address#3 -Alias vera_layer_mode_tile::tilewidth#10 = vera_layer_mode_tile::tilewidth#14 vera_layer_mode_tile::tilewidth#22 vera_layer_mode_tile::tilewidth#2 -Alias vera_layer_mode_tile::tileheight#10 = vera_layer_mode_tile::tileheight#18 vera_layer_mode_tile::tileheight#26 vera_layer_mode_tile::tileheight#4 vera_layer_mode_tile::tileheight#2 -Alias vera_layer_mode_bitmap::bitmap_address#10 = vera_layer_mode_bitmap::bitmap_address#2 -Alias vera_layer_mode_bitmap::layer#1 = vera_layer_mode_bitmap::layer#12 vera_layer_mode_bitmap::layer#2 -Alias vera_layer_mode_bitmap::mapwidth#1 = vera_layer_mode_bitmap::mapwidth#10 -Alias vera_layer_mode_bitmap::config#11 = vera_layer_mode_bitmap::config#15 -Alias CONIO_SCREEN_BANK#0 = CONIO_SCREEN_BANK#1 -Alias CONIO_SCREEN_TEXT#0 = CONIO_SCREEN_TEXT#1 -Alias bitmap_init::x#10 = bitmap_init::x#3 bitmap_init::x#2 bitmap_init::x#4 bitmap_init::x#13 bitmap_init::x#11 bitmap_init::x#6 -Alias bitmap_init::bitshift#13 = bitmap_init::bitshift#8 -Alias bitmap_init::bitmask#13 = bitmap_init::bitmask#14 bitmap_init::bitmask#9 -Alias bitmap_init::bitshift#14 = bitmap_init::bitshift#15 -Alias bitmap_plot::vera_vram_address01_bankaddr#0 = bitmap_plot::plotter#0 -Alias bitmap_plot::x#4 = bitmap_plot::x#5 -Alias mul16u::a#2 = mul16u::a#4 -Alias mul16u::mb#2 = mul16u::mb#3 -Alias bitmap_line_xdyi::x1#2 = bitmap_line_xdyi::x1#3 -Alias bitmap_line_xdyi::x#2 = bitmap_line_xdyi::x#5 -Alias bitmap_line_xdyi::c#2 = bitmap_line_xdyi::c#4 -Alias bitmap_line_xdyi::yd#3 = bitmap_line_xdyi::yd#5 -Alias bitmap_line_xdyi::xd#2 = bitmap_line_xdyi::xd#6 -Alias bitmap_line_xdyd::x1#2 = bitmap_line_xdyd::x1#3 -Alias bitmap_line_xdyd::x#2 = bitmap_line_xdyd::x#5 -Alias bitmap_line_xdyd::c#2 = bitmap_line_xdyd::c#4 -Alias bitmap_line_xdyd::yd#3 = bitmap_line_xdyd::yd#5 -Alias bitmap_line_xdyd::xd#2 = bitmap_line_xdyd::xd#6 -Alias bitmap_line_ydxi::y1#2 = bitmap_line_ydxi::y1#3 -Alias bitmap_line_ydxi::y#2 = bitmap_line_ydxi::y#5 -Alias bitmap_line_ydxi::c#2 = bitmap_line_ydxi::c#4 -Alias bitmap_line_ydxi::xd#3 = bitmap_line_ydxi::xd#5 -Alias bitmap_line_ydxi::yd#2 = bitmap_line_ydxi::yd#6 -Alias bitmap_line_ydxd::y1#2 = bitmap_line_ydxd::y1#3 -Alias bitmap_line_ydxd::y#3 = bitmap_line_ydxd::y#6 -Alias bitmap_line_ydxd::c#2 = bitmap_line_ydxd::c#4 -Alias bitmap_line_ydxd::xd#3 = bitmap_line_ydxd::xd#5 -Alias bitmap_line_ydxd::yd#2 = bitmap_line_ydxd::yd#6 -Alias divr16u::dividend#2 = divr16u::dividend#3 -Alias divr16u::quotient#3 = divr16u::quotient#6 -Alias divr16u::divisor#1 = divr16u::divisor#3 divr16u::divisor#6 -Alias divr16u::i#2 = divr16u::i#3 divr16u::i#5 -Alias divr16u::dividend#0 = divr16u::dividend#5 -Successful SSA optimization Pass2AliasElimination -Alias candidate removed (volatile)kbhit::return#0 = kbhit::ch kbhit::return#4 kbhit::return#1 -Alias candidate removed (volatile)screenlayer::vera_layer_get_width1_return#0 = screenlayer::vera_layer_get_width1_return#2 screenlayer::vera_layer_get_width1_return#1 screenlayer::vera_layer_get_width1_return#3 screenlayer::$2 conio_width -Alias candidate removed (volatile)conio_rowshift = screenlayer::$3 -Alias candidate removed (volatile)conio_rowskip = screenlayer::$4 -Alias candidate removed (volatile)screenlayer::vera_layer_get_height1_return#0 = screenlayer::vera_layer_get_height1_return#2 screenlayer::vera_layer_get_height1_return#1 screenlayer::vera_layer_get_height1_return#3 screenlayer::$5 conio_height -Alias candidate removed (volatile)bitmap_init::vera_layer_get_color_depth1_return#0 = bitmap_init::vera_layer_get_color_depth1_$0 bitmap_init::vera_layer_get_color_depth1_return#2 bitmap_init::vera_layer_get_color_depth1_return#1 bitmap_init::vera_layer_get_color_depth1_return#3 bitmap_init::$0 __bitmap_color_depth -Alias candidate removed (volatile)__bitmap_hscale = bitmap_init::$1 -Alias candidate removed (volatile)__bitmap_vscale = bitmap_init::$2 -Identical Phi Values memcpy_in_vram::num#2 memcpy_in_vram::num#3 -Identical Phi Values memset_vram::vdest#1 memset_vram::vdest#0 -Identical Phi Values memset_vram::vbank#1 memset_vram::vbank#0 -Identical Phi Values memset_vram::num#2 memset_vram::num#0 -Identical Phi Values memset_vram::data#3 memset_vram::data#0 -Identical Phi Values memset_vram::num#1 memset_vram::num#2 -Identical Phi Values memset_vram::data#1 memset_vram::data#3 -Identical Phi Values clrscr::color#1 clrscr::color#3 -Identical Phi Values clrscr::line_text#3 clrscr::line_text#2 -Identical Phi Values clrscr::l#3 clrscr::l#2 -Identical Phi Values CONIO_SCREEN_BANK#31 CONIO_SCREEN_BANK#11 -Identical Phi Values screensize::x#1 screensize::x#0 -Identical Phi Values screensize::y#1 screensize::y#0 -Identical Phi Values CONIO_SCREEN_TEXT#76 CONIO_SCREEN_TEXT#12 -Identical Phi Values kbhit::return#4 kbhit::return#0 -Identical Phi Values vera_display_get_hscale::scale#3 vera_display_get_hscale::scale#0 -Identical Phi Values vera_display_get_vscale::scale#3 vera_display_get_vscale::scale#0 -Identical Phi Values vera_layer_get_mapbase_bank::layer#1 vera_layer_get_mapbase_bank::layer#0 -Identical Phi Values vera_layer_get_mapbase_offset::layer#1 vera_layer_get_mapbase_offset::layer#0 -Identical Phi Values vera_layer_get_textcolor::layer#1 vera_layer_get_textcolor::layer#0 -Identical Phi Values vera_layer_get_backcolor::layer#1 vera_layer_get_backcolor::layer#0 -Identical Phi Values vera_layer_get_rowshift::layer#1 vera_layer_get_rowshift::layer#0 -Identical Phi Values vera_layer_get_rowskip::layer#1 vera_layer_get_rowskip::layer#0 -Identical Phi Values vera_layer_mode_text::layer#1 vera_layer_mode_text::layer#0 -Identical Phi Values vera_layer_mode_text::mapbase_address#1 vera_layer_mode_text::mapbase_address#0 -Identical Phi Values vera_layer_mode_text::tilebase_address#1 vera_layer_mode_text::tilebase_address#0 -Identical Phi Values vera_layer_mode_text::mapwidth#1 vera_layer_mode_text::mapwidth#0 -Identical Phi Values vera_layer_mode_text::mapheight#1 vera_layer_mode_text::mapheight#0 -Identical Phi Values vera_layer_mode_text::tilewidth#1 vera_layer_mode_text::tilewidth#0 -Identical Phi Values vera_layer_mode_text::tileheight#1 vera_layer_mode_text::tileheight#0 -Identical Phi Values vera_layer_mode_text::color_mode#1 vera_layer_mode_text::color_mode#0 -Identical Phi Values vera_layer_mode_bitmap::color_depth#1 vera_layer_mode_bitmap::color_depth#0 -Identical Phi Values vera_layer_mode_bitmap::bitmap_address#10 vera_layer_mode_bitmap::bitmap_address#1 -Identical Phi Values vera_layer_mode_bitmap::layer#1 vera_layer_mode_bitmap::layer#0 -Identical Phi Values vera_layer_mode_bitmap::mapwidth#1 vera_layer_mode_bitmap::mapwidth#0 -Identical Phi Values CONIO_SCREEN_BANK#24 CONIO_SCREEN_BANK#7 -Identical Phi Values CONIO_SCREEN_TEXT#28 CONIO_SCREEN_TEXT#7 -Identical Phi Values CONIO_SCREEN_BANK#0 CONIO_SCREEN_BANK#15 -Identical Phi Values CONIO_SCREEN_TEXT#0 CONIO_SCREEN_TEXT#17 -Identical Phi Values CONIO_SCREEN_TEXT#15 CONIO_SCREEN_TEXT#16 -Identical Phi Values clearline::color#1 clearline::color#0 -Identical Phi Values CONIO_SCREEN_TEXT#39 CONIO_SCREEN_TEXT#50 -Identical Phi Values insertup::cy#1 insertup::cy#0 -Identical Phi Values CONIO_SCREEN_TEXT#16 CONIO_SCREEN_TEXT#39 -Identical Phi Values insertup::width#1 insertup::width#0 -Identical Phi Values CONIO_SCREEN_TEXT#50 CONIO_SCREEN_TEXT#76 -Identical Phi Values screenlayer::vera_layer_get_width1_return#2 screenlayer::vera_layer_get_width1_return#0 -Identical Phi Values screenlayer::vera_layer_get_width1_return#3 screenlayer::vera_layer_get_width1_return#1 -Identical Phi Values screenlayer::vera_layer_get_height1_return#2 screenlayer::vera_layer_get_height1_return#0 -Identical Phi Values screenlayer::vera_layer_get_height1_return#3 screenlayer::vera_layer_get_height1_return#1 -Identical Phi Values printf_str::putc#7 printf_str::putc#9 -Identical Phi Values bitmap_init::address#1 bitmap_init::address#0 -Identical Phi Values bitmap_init::layer#1 bitmap_init::layer#0 -Identical Phi Values bitmap_init::vera_layer_get_color_depth1_return#2 bitmap_init::vera_layer_get_color_depth1_return#0 -Identical Phi Values bitmap_init::vera_layer_get_color_depth1_return#3 bitmap_init::vera_layer_get_color_depth1_return#1 -Identical Phi Values bitmap_init::hdelta#1 bitmap_init::hdelta#0 -Identical Phi Values mul16u::b#1 mul16u::b#0 -Identical Phi Values mul16u::a#5 mul16u::a#0 -Identical Phi Values bitmap_line_xdyi::c#2 bitmap_line_xdyi::c#3 -Identical Phi Values bitmap_line_xdyi::yd#3 bitmap_line_xdyi::yd#2 -Identical Phi Values bitmap_line_xdyi::xd#2 bitmap_line_xdyi::xd#5 -Identical Phi Values bitmap_line_xdyi::x1#2 bitmap_line_xdyi::x1#6 -Identical Phi Values bitmap_line_xdyd::c#2 bitmap_line_xdyd::c#3 -Identical Phi Values bitmap_line_xdyd::yd#3 bitmap_line_xdyd::yd#2 -Identical Phi Values bitmap_line_xdyd::xd#2 bitmap_line_xdyd::xd#5 -Identical Phi Values bitmap_line_xdyd::x1#2 bitmap_line_xdyd::x1#6 -Identical Phi Values bitmap_line_ydxi::c#2 bitmap_line_ydxi::c#3 -Identical Phi Values bitmap_line_ydxi::xd#3 bitmap_line_ydxi::xd#2 -Identical Phi Values bitmap_line_ydxi::yd#2 bitmap_line_ydxi::yd#5 -Identical Phi Values bitmap_line_ydxi::y1#2 bitmap_line_ydxi::y1#6 -Identical Phi Values bitmap_line_ydxd::c#2 bitmap_line_ydxd::c#3 -Identical Phi Values bitmap_line_ydxd::xd#3 bitmap_line_ydxd::xd#2 -Identical Phi Values bitmap_line_ydxd::yd#2 bitmap_line_ydxd::yd#5 -Identical Phi Values bitmap_line_ydxd::y1#2 bitmap_line_ydxd::y1#6 -Identical Phi Values divr16u::rem#9 divr16u::rem#3 -Identical Phi Values divr16u::dividend#4 divr16u::dividend#1 -Identical Phi Values divr16u::divisor#5 divr16u::divisor#0 -Identical Phi Values divr16u::divisor#1 divr16u::divisor#5 -Identical Phi Values rem16u#13 rem16u#0 -Identical Phi Values CONIO_SCREEN_BANK#27 CONIO_SCREEN_BANK#19 -Identical Phi Values CONIO_SCREEN_TEXT#33 CONIO_SCREEN_TEXT#21 -Identical Phi Values rand_state#35 rand_state#10 -Identical Phi Values rem16u#36 rem16u#28 -Identical Phi Values CONIO_SCREEN_BANK#101 CONIO_SCREEN_BANK#15 -Identical Phi Values CONIO_SCREEN_TEXT#102 CONIO_SCREEN_TEXT#17 -Identical Phi Values CONIO_SCREEN_TEXT#100 CONIO_SCREEN_TEXT#102 -Identical Phi Values CONIO_SCREEN_BANK#100 CONIO_SCREEN_BANK#101 -Identical Phi Values rand_state#15 rand_state#14 -Identical Phi Values rem16u#15 rem16u#13 -Identical Phi Values rand_state#16 rand_state#14 -Identical Phi Values rem16u#16 rem16u#13 -Identical Phi Values rand_state#17 rand_state#14 -Identical Phi Values rem16u#17 rem16u#13 -Identical Phi Values rand_state#18 rand_state#14 -Identical Phi Values rem16u#18 rem16u#13 -Identical Phi Values rand_state#19 rand_state#14 -Identical Phi Values CONIO_SCREEN_BANK#28 CONIO_SCREEN_BANK#100 -Identical Phi Values CONIO_SCREEN_TEXT#34 CONIO_SCREEN_TEXT#100 -Identical Phi Values rand_state#20 rand_state#23 -Identical Phi Values rem16u#19 rem16u#23 -Identical Phi Values CONIO_SCREEN_BANK#17 CONIO_SCREEN_BANK#15 -Identical Phi Values CONIO_SCREEN_TEXT#19 CONIO_SCREEN_TEXT#17 -Identical Phi Values CONIO_SCREEN_BANK#19 CONIO_SCREEN_BANK#0 -Identical Phi Values CONIO_SCREEN_TEXT#21 CONIO_SCREEN_TEXT#0 -Identical Phi Values CONIO_SCREEN_BANK#10 CONIO_SCREEN_BANK#17 -Identical Phi Values CONIO_SCREEN_TEXT#10 CONIO_SCREEN_TEXT#19 -Identical Phi Values rand_state#11 rand_state#20 -Identical Phi Values rem16u#10 rem16u#19 -Successful SSA optimization Pass2IdenticalPhiElimination -Identical Phi Values CONIO_SCREEN_TEXT#11 CONIO_SCREEN_TEXT#17 -Identical Phi Values CONIO_SCREEN_BANK#32 CONIO_SCREEN_BANK#15 -Identical Phi Values CONIO_SCREEN_BANK#11 CONIO_SCREEN_BANK#32 -Identical Phi Values clrscr::color#3 clrscr::color#0 -Successful SSA optimization Pass2IdenticalPhiElimination -Simple Condition memcpy_in_vram::$6 [18] if(memcpy_in_vram::i#2=0) goto bitmap_init::@6 -Simple Condition bitmap_init::$19 [591] if(bitmap_init::bitmask#13!=0) goto bitmap_init::@7 -Simple Condition bitmap_init::$20 [596] if(bitmap_init::x#1!=rangelast(0,$27f)) goto bitmap_init::@1 -Simple Condition bitmap_init::$22 [610] if(bitmap_init::y#1!=rangelast(0,$1df)) goto bitmap_init::@15 -Simple Condition bitmap_plot::$11 [640] if(0!=bitmap_plot::bitshift#0) goto bitmap_plot::@1 -Simple Condition bitmap_line::$0 [661] if(bitmap_line::x0#10=bitmap_line_xdyi::e#1) goto bitmap_line_xdyi::@2 -Simple Condition bitmap_line_xdyi::$7 [765] if(bitmap_line_xdyi::x#2!=bitmap_line_xdyi::$6) goto bitmap_line_xdyi::@1 -Simple Condition bitmap_line_xdyd::$4 [779] if(bitmap_line_xdyd::xd#5>=bitmap_line_xdyd::e#1) goto bitmap_line_xdyd::@2 -Simple Condition bitmap_line_xdyd::$7 [783] if(bitmap_line_xdyd::x#2!=bitmap_line_xdyd::$6) goto bitmap_line_xdyd::@1 -Simple Condition bitmap_line_ydxi::$4 [797] if(bitmap_line_ydxi::yd#5>=bitmap_line_ydxi::e#1) goto bitmap_line_ydxi::@2 -Simple Condition bitmap_line_ydxi::$7 [801] if(bitmap_line_ydxi::y#2!=bitmap_line_ydxi::$6) goto bitmap_line_ydxi::@1 -Simple Condition bitmap_line_ydxd::$4 [815] if(bitmap_line_ydxd::yd#5>=bitmap_line_ydxd::e#1) goto bitmap_line_ydxd::@2 -Simple Condition bitmap_line_ydxd::$7 [819] if(bitmap_line_ydxd::y#3!=bitmap_line_ydxd::$6) goto bitmap_line_ydxd::@1 -Simple Condition divr16u::$4 [831] if(divr16u::$2==0) goto divr16u::@2 -Simple Condition divr16u::$9 [836] if(divr16u::rem#5> 1 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant vera_layer_set_text_color_mode::$0 = vera_layer_set_text_color_mode::layer#0*SIZEOF_POINTER -Constant vera_layer_mode_tile::config#1 = VERA_LAYER_COLOR_DEPTH_1BPP -Constant vera_layer_mode_tile::config#2 = VERA_LAYER_COLOR_DEPTH_2BPP -Constant vera_layer_mode_tile::config#3 = VERA_LAYER_COLOR_DEPTH_4BPP -Constant vera_layer_mode_tile::config#4 = VERA_LAYER_COLOR_DEPTH_8BPP -Constant vera_layer_mode_bitmap::config#10 = VERA_LAYER_COLOR_DEPTH_8BPP -Constant vera_layer_mode_bitmap::$1 = word0 vera_layer_mode_bitmap::bitmap_address#1 -Constant vera_layer_mode_bitmap::$9 = vera_layer_mode_bitmap::layer#0*SIZEOF_UNSIGNED_INT -Constant vera_layer_mode_bitmap::$2 = byte2 vera_layer_mode_bitmap::bitmap_address#1 -Constant vera_layer_mode_bitmap::$10 = vera_layer_mode_bitmap::layer#0*SIZEOF_UNSIGNED_LONG -Constant vera_layer_mode_bitmap::bitmap_address#0 = vera_layer_mode_bitmap::bitmap_address#1>>1 -Successful SSA optimization Pass2ConstantIdentification -Simplifying constant evaluating to zero word0 vera_layer_mode_bitmap::bitmap_address#1 in -Simplifying constant evaluating to zero vera_layer_mode_bitmap::layer#0*SIZEOF_UNSIGNED_INT in -Simplifying constant evaluating to zero byte2 vera_layer_mode_bitmap::bitmap_address#1 in -Simplifying constant evaluating to zero vera_layer_mode_bitmap::layer#0*SIZEOF_UNSIGNED_LONG in -Simplifying constant evaluating to zero vera_layer_mode_bitmap::bitmap_address#1>>1 in -Successful SSA optimization PassNSimplifyConstantZero -Simplifying expression containing zero *vera_layer_set_text_color_mode::addr#0 in [148] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 | vera_layer_set_text_color_mode::color_mode#0 -Simplifying expression containing zero vera_tilebase_offset in [272] vera_tilebase_offset[vera_layer_mode_bitmap::$9] = vera_layer_mode_bitmap::$1 -Simplifying expression containing zero vera_tilebase_address in [276] vera_tilebase_address[vera_layer_mode_bitmap::$10] = vera_layer_mode_bitmap::bitmap_address#1 -Successful SSA optimization PassNSimplifyExpressionWithZero -Eliminating unused constant vera_layer_set_text_color_mode::color_mode#0 -Eliminating unused constant vera_layer_mode_bitmap::$9 -Eliminating unused constant vera_layer_mode_bitmap::$10 -Successful SSA optimization PassNEliminateUnusedVars -Eliminating unused constant VERA_LAYER_CONFIG_16C -Successful SSA optimization PassNEliminateUnusedVars -Alias candidate removed (volatile)kbhit::return#0 = kbhit::ch kbhit::return#1 -Alias candidate removed (volatile)screenlayer::vera_layer_get_width1_return#0 = screenlayer::vera_layer_get_width1_return#1 screenlayer::$2 conio_width -Alias candidate removed (volatile)conio_rowshift = screenlayer::$3 -Alias candidate removed (volatile)conio_rowskip = screenlayer::$4 -Alias candidate removed (volatile)screenlayer::vera_layer_get_height1_return#0 = screenlayer::vera_layer_get_height1_return#1 screenlayer::$5 conio_height -Alias candidate removed (volatile)bitmap_init::vera_layer_get_color_depth1_return#0 = bitmap_init::vera_layer_get_color_depth1_$0 bitmap_init::vera_layer_get_color_depth1_return#1 bitmap_init::$0 __bitmap_color_depth -Alias candidate removed (volatile)__bitmap_hscale = bitmap_init::$1 -Alias candidate removed (volatile)__bitmap_vscale = bitmap_init::$2 -Constant right-side identified [262] vera_layer_mode_bitmap::config#11 = vera_layer_mode_bitmap::config#10 | VERA_LAYER_CONFIG_MODE_BITMAP -Constant right-side identified [266] vera_layer_mode_bitmap::tilebase#0 = byte1 vera_layer_mode_bitmap::bitmap_address#0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant vera_layer_mode_bitmap::config#11 = vera_layer_mode_bitmap::config#10|VERA_LAYER_CONFIG_MODE_BITMAP -Constant vera_layer_mode_bitmap::tilebase#0 = byte1 vera_layer_mode_bitmap::bitmap_address#0 -Successful SSA optimization Pass2ConstantIdentification -Constant vera_layer_set_config::config#1 = vera_layer_mode_bitmap::config#11 -Successful SSA optimization Pass2ConstantIdentification -Simplifying constant evaluating to zero byte1 vera_layer_mode_bitmap::bitmap_address#0 in -Successful SSA optimization PassNSimplifyConstantZero -Eliminating unused constant vera_layer_mode_bitmap::bitmap_address#0 -Successful SSA optimization PassNEliminateUnusedVars -Alias candidate removed (volatile)kbhit::return#0 = kbhit::ch kbhit::return#1 -Alias candidate removed (volatile)screenlayer::vera_layer_get_width1_return#0 = screenlayer::vera_layer_get_width1_return#1 screenlayer::$2 conio_width -Alias candidate removed (volatile)conio_rowshift = screenlayer::$3 -Alias candidate removed (volatile)conio_rowskip = screenlayer::$4 -Alias candidate removed (volatile)screenlayer::vera_layer_get_height1_return#0 = screenlayer::vera_layer_get_height1_return#1 screenlayer::$5 conio_height -Alias candidate removed (volatile)bitmap_init::vera_layer_get_color_depth1_return#0 = bitmap_init::vera_layer_get_color_depth1_$0 bitmap_init::vera_layer_get_color_depth1_return#1 bitmap_init::$0 __bitmap_color_depth -Alias candidate removed (volatile)__bitmap_hscale = bitmap_init::$1 -Alias candidate removed (volatile)__bitmap_vscale = bitmap_init::$2 -Constant right-side identified [265] vera_layer_mode_bitmap::tilebase#1 = vera_layer_mode_bitmap::tilebase#0 & VERA_LAYER_TILEBASE_MASK -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant vera_layer_mode_bitmap::tilebase#1 = vera_layer_mode_bitmap::tilebase#0&VERA_LAYER_TILEBASE_MASK -Successful SSA optimization Pass2ConstantIdentification -Constant vera_layer_set_tilebase::tilebase#1 = vera_layer_mode_bitmap::tilebase#1 -Successful SSA optimization Pass2ConstantIdentification -Simplifying constant evaluating to zero vera_layer_mode_bitmap::tilebase#0&VERA_LAYER_TILEBASE_MASK in -Successful SSA optimization PassNSimplifyConstantZero -Eliminating unused constant vera_layer_mode_bitmap::tilebase#0 -Successful SSA optimization PassNEliminateUnusedVars -Alias candidate removed (volatile)kbhit::return#0 = kbhit::ch kbhit::return#1 -Alias candidate removed (volatile)screenlayer::vera_layer_get_width1_return#0 = screenlayer::vera_layer_get_width1_return#1 screenlayer::$2 conio_width -Alias candidate removed (volatile)conio_rowshift = screenlayer::$3 -Alias candidate removed (volatile)conio_rowskip = screenlayer::$4 -Alias candidate removed (volatile)screenlayer::vera_layer_get_height1_return#0 = screenlayer::vera_layer_get_height1_return#1 screenlayer::$5 conio_height -Alias candidate removed (volatile)bitmap_init::vera_layer_get_color_depth1_return#0 = bitmap_init::vera_layer_get_color_depth1_$0 bitmap_init::vera_layer_get_color_depth1_return#1 bitmap_init::$0 __bitmap_color_depth -Alias candidate removed (volatile)__bitmap_hscale = bitmap_init::$1 -Alias candidate removed (volatile)__bitmap_vscale = bitmap_init::$2 -Inlining Noop Cast [312] memcpy_in_vram::src#0 = (void *)insertup::$6 keeping memcpy_in_vram::src#0 -Inlining Noop Cast [335] CONIO_SCREEN_TEXT#17 = (char *)screenlayer::$1 keeping CONIO_SCREEN_TEXT#17 -Inlining Noop Cast [484] bitmap_clear::vdest#0 = (void *)bitmap_clear::$4 keeping bitmap_clear::vdest#0 -Successful SSA optimization Pass2NopCastInlining -Rewriting multiplication to use shift [54] clrscr::$9 = conio_screen_layer * SIZEOF_UNSIGNED_INT -Rewriting multiplication to use shift [73] gotoxy::$5 = conio_screen_layer * SIZEOF_UNSIGNED_INT -Rewriting multiplication to use shift [89] cputc::$15 = conio_screen_layer * SIZEOF_UNSIGNED_INT -Rewriting multiplication to use shift [113] cputln::$2 = conio_screen_layer * SIZEOF_UNSIGNED_INT -Rewriting multiplication to use shift [116] cputln::$3 = conio_screen_layer * SIZEOF_UNSIGNED_INT -Rewriting multiplication to use shift [140] vera_layer_set_config::$0 = vera_layer_set_config::layer#2 * SIZEOF_POINTER -Rewriting multiplication to use shift [149] vera_layer_set_mapbase::$0 = vera_layer_set_mapbase::layer#3 * SIZEOF_POINTER -Rewriting multiplication to use shift [155] vera_layer_get_mapbase_offset::$0 = vera_layer_get_mapbase_offset::layer#0 * SIZEOF_UNSIGNED_INT -Rewriting multiplication to use shift [159] vera_layer_set_tilebase::$0 = vera_layer_set_tilebase::layer#2 * SIZEOF_POINTER -Rewriting multiplication to use shift [174] vera_layer_get_color::$3 = vera_layer_get_color::layer#2 * SIZEOF_POINTER -Rewriting multiplication to use shift [185] vera_layer_get_rowskip::$0 = vera_layer_get_rowskip::layer#0 * SIZEOF_UNSIGNED_INT -Rewriting multiplication to use shift [196] vera_layer_mode_tile::$11 = vera_layer_mode_tile::layer#10 * SIZEOF_UNSIGNED_INT -Rewriting multiplication to use shift [201] vera_layer_mode_tile::$12 = vera_layer_mode_tile::layer#10 * SIZEOF_UNSIGNED_INT -Rewriting multiplication to use shift [206] vera_layer_mode_tile::$13 = vera_layer_mode_tile::layer#10 * SIZEOF_UNSIGNED_INT -Rewriting multiplication to use shift [211] vera_layer_mode_tile::$14 = vera_layer_mode_tile::layer#10 * SIZEOF_UNSIGNED_INT -Rewriting multiplication to use shift [226] vera_layer_mode_tile::$15 = vera_layer_mode_tile::layer#10 * SIZEOF_UNSIGNED_INT -Rewriting multiplication to use shift [230] vera_layer_mode_tile::$16 = vera_layer_mode_tile::layer#10 * SIZEOF_UNSIGNED_LONG -Rewriting multiplication to use shift [238] vera_layer_mode_tile::$17 = vera_layer_mode_tile::layer#10 * SIZEOF_UNSIGNED_INT -Rewriting multiplication to use shift [242] vera_layer_mode_tile::$18 = vera_layer_mode_tile::layer#10 * SIZEOF_UNSIGNED_LONG -Rewriting multiplication to use shift [285] clearline::$5 = conio_screen_layer * SIZEOF_UNSIGNED_INT -Rewriting multiplication to use shift [304] insertup::width#0 = conio_screen_width * 2 -Rewriting multiplication to use shift [337] screenlayer::vera_layer_get_width1_$2 = screenlayer::vera_layer_get_width1_layer#0 * SIZEOF_POINTER -Rewriting multiplication to use shift [341] screenlayer::vera_layer_get_width1_$3 = screenlayer::vera_layer_get_width1_$1 * SIZEOF_UNSIGNED_INT -Rewriting multiplication to use shift [357] screenlayer::vera_layer_get_height1_$2 = screenlayer::vera_layer_get_height1_layer#0 * SIZEOF_POINTER -Rewriting multiplication to use shift [361] screenlayer::vera_layer_get_height1_$3 = screenlayer::vera_layer_get_height1_$1 * SIZEOF_UNSIGNED_INT -Rewriting multiplication to use shift [388] bitmap_init::vera_layer_get_color_depth1_$1 = bitmap_init::vera_layer_get_color_depth1_layer#0 * SIZEOF_POINTER -Rewriting multiplication to use shift [410] bitmap_init::$23 = bitmap_init::x#10 * SIZEOF_UNSIGNED_INT -Rewriting multiplication to use shift [422] bitmap_init::$24 = bitmap_init::x#10 * SIZEOF_UNSIGNED_INT -Rewriting multiplication to use shift [434] bitmap_init::$25 = bitmap_init::x#10 * SIZEOF_UNSIGNED_INT -Rewriting multiplication to use shift [444] bitmap_init::$26 = bitmap_init::x#10 * SIZEOF_UNSIGNED_INT -Rewriting multiplication to use shift [460] bitmap_init::$27 = bitmap_init::$4 * SIZEOF_UNSIGNED_INT -Rewriting multiplication to use shift [464] bitmap_init::$28 = bitmap_init::y#2 * SIZEOF_UNSIGNED_LONG -Rewriting multiplication to use shift [471] bitmap_clear::$6 = __bitmap_vscale * SIZEOF_UNSIGNED_INT -Rewriting multiplication to use shift [475] bitmap_clear::$7 = bitmap_clear::$1 * SIZEOF_UNSIGNED_INT -Rewriting multiplication to use shift [491] bitmap_plot::$9 = bitmap_plot::x#4 * SIZEOF_UNSIGNED_INT -Rewriting multiplication to use shift [494] bitmap_plot::$10 = bitmap_plot::y#4 * SIZEOF_UNSIGNED_LONG -Successful SSA optimization Pass2MultiplyToShiftRewriting -Inlining constant with var siblings memcpy_in_vram::i#0 -Inlining constant with var siblings memcpy_in_vram::dest_bank#0 -Inlining constant with var siblings memcpy_in_vram::dest_increment#0 -Inlining constant with var siblings memcpy_in_vram::src_bank#0 -Inlining constant with var siblings memcpy_in_vram::src_increment#0 -Inlining constant with var siblings memcpy_in_vram::dest_bank#1 -Inlining constant with var siblings memcpy_in_vram::dest#1 -Inlining constant with var siblings memcpy_in_vram::dest_increment#1 -Inlining constant with var siblings memcpy_in_vram::src_bank#1 -Inlining constant with var siblings memcpy_in_vram::src#1 -Inlining constant with var siblings memcpy_in_vram::src_increment#1 -Inlining constant with var siblings memcpy_in_vram::num#1 -Inlining constant with var siblings memset_vram::i#0 -Inlining constant with var siblings clrscr::l#0 -Inlining constant with var siblings clrscr::c#0 -Inlining constant with var siblings gotoxy::y#0 -Inlining constant with var siblings gotoxy::x#0 -Inlining constant with var siblings gotoxy::x#1 -Inlining constant with var siblings gotoxy::x#2 -Inlining constant with var siblings gotoxy::x#3 -Inlining constant with var siblings gotoxy::y#3 -Inlining constant with var siblings gotoxy::x#4 -Inlining constant with var siblings gotoxy::y#4 -Inlining constant with var siblings gotoxy::x#5 -Inlining constant with var siblings gotoxy::y#5 -Inlining constant with var siblings gotoxy::x#6 -Inlining constant with var siblings gotoxy::y#6 -Inlining constant with var siblings vera_display_get_hscale::s#0 -Inlining constant with var siblings vera_display_get_vscale::s#0 -Inlining constant with var siblings vera_layer_set_config::layer#1 -Inlining constant with var siblings vera_layer_set_config::config#1 -Inlining constant with var siblings vera_layer_set_mapbase::layer#1 -Inlining constant with var siblings vera_layer_set_mapbase::mapbase#1 -Inlining constant with var siblings vera_layer_set_mapbase::layer#2 -Inlining constant with var siblings vera_layer_set_mapbase::mapbase#2 -Inlining constant with var siblings vera_layer_set_tilebase::layer#1 -Inlining constant with var siblings vera_layer_set_tilebase::tilebase#1 -Inlining constant with var siblings vera_layer_set_textcolor::layer#0 -Inlining constant with var siblings vera_layer_set_textcolor::color#0 -Inlining constant with var siblings vera_layer_set_textcolor::color#1 -Inlining constant with var siblings vera_layer_set_textcolor::color#2 -Inlining constant with var siblings vera_layer_set_textcolor::color#3 -Inlining constant with var siblings vera_layer_set_textcolor::color#4 -Inlining constant with var siblings vera_layer_set_textcolor::color#5 -Inlining constant with var siblings vera_layer_set_backcolor::layer#0 -Inlining constant with var siblings vera_layer_set_backcolor::color#0 -Inlining constant with var siblings vera_layer_set_backcolor::color#1 -Inlining constant with var siblings vera_layer_set_backcolor::color#2 -Inlining constant with var siblings vera_layer_set_backcolor::color#3 -Inlining constant with var siblings vera_layer_mode_tile::config#0 -Inlining constant with var siblings vera_layer_mode_tile::color_depth#0 -Inlining constant with var siblings vera_layer_mode_tile::layer#1 -Inlining constant with var siblings vera_layer_mode_tile::mapbase_address#2 -Inlining constant with var siblings vera_layer_mode_tile::tilebase_address#2 -Inlining constant with var siblings vera_layer_mode_tile::mapwidth#1 -Inlining constant with var siblings vera_layer_mode_tile::mapheight#1 -Inlining constant with var siblings vera_layer_mode_tile::tilewidth#1 -Inlining constant with var siblings vera_layer_mode_tile::tileheight#1 -Inlining constant with var siblings vera_layer_mode_tile::color_depth#1 -Inlining constant with var siblings vera_layer_mode_tile::layer#0 -Inlining constant with var siblings vera_layer_mode_tile::mapbase_address#1 -Inlining constant with var siblings vera_layer_mode_tile::tilebase_address#1 -Inlining constant with var siblings vera_layer_mode_tile::mapwidth#0 -Inlining constant with var siblings vera_layer_mode_tile::mapheight#0 -Inlining constant with var siblings vera_layer_mode_tile::tilewidth#0 -Inlining constant with var siblings vera_layer_mode_tile::tileheight#0 -Inlining constant with var siblings vera_layer_mode_tile::config#1 -Inlining constant with var siblings vera_layer_mode_tile::config#2 -Inlining constant with var siblings vera_layer_mode_tile::config#3 -Inlining constant with var siblings vera_layer_mode_tile::config#4 -Inlining constant with different constant siblings vera_layer_mode_bitmap::config#10 -Inlining constant with var siblings clearline::c#0 -Inlining constant with var siblings insertup::i#0 -Inlining constant with var siblings screenlayer::layer#0 -Inlining constant with var siblings screenlayer::layer#1 -Inlining constant with var siblings screenlayer::layer#2 -Inlining constant with var siblings printf_str::putc#0 -Inlining constant with var siblings printf_str::s#1 -Inlining constant with var siblings printf_str::putc#1 -Inlining constant with var siblings printf_str::s#2 -Inlining constant with var siblings printf_str::putc#2 -Inlining constant with var siblings printf_str::s#3 -Inlining constant with var siblings printf_str::putc#3 -Inlining constant with var siblings printf_str::s#4 -Inlining constant with var siblings printf_str::putc#4 -Inlining constant with var siblings printf_str::s#5 -Inlining constant with var siblings printf_str::putc#5 -Inlining constant with var siblings printf_str::s#6 -Inlining constant with var siblings printf_str::putc#6 -Inlining constant with var siblings printf_str::s#7 -Inlining constant with var siblings bitmap_init::x#0 -Inlining constant with var siblings bitmap_init::y#0 -Inlining constant with var siblings bitmap_line::y0#1 -Inlining constant with var siblings bitmap_line::y1#1 -Inlining constant with var siblings mul16u::res#0 -Inlining constant with var siblings divr16u::quotient#0 -Inlining constant with var siblings divr16u::i#0 -Inlining constant with var siblings modr16u::divisor#0 -Inlining constant with var siblings modr16u::rem#0 -Inlining constant with var siblings modr16u::divisor#1 -Inlining constant with var siblings modr16u::rem#1 -Inlining constant with var siblings modr16u::divisor#2 -Inlining constant with var siblings modr16u::rem#2 -Inlining constant with var siblings modr16u::divisor#3 -Inlining constant with var siblings modr16u::rem#3 -Inlining constant with var siblings main::x#0 -Inlining constant with var siblings main::color#0 -Inlining constant with var siblings main::x#2 -Inlining constant with var siblings rand_state#10 -Constant inlined vera_layer_set_config::layer#1 = vera_layer_mode_bitmap::layer#0 -Constant inlined vera_layer_set_textcolor::color#1 = WHITE -Constant inlined vera_layer_set_textcolor::color#0 = WHITE -Constant inlined main::textcolor5_color#0 = WHITE -Constant inlined vera_layer_set_textcolor::color#3 = WHITE -Constant inlined clrscr::l#0 = 0 -Constant inlined vera_layer_set_textcolor::color#2 = YELLOW -Constant inlined vera_layer_set_textcolor::color#5 = WHITE -Constant inlined vera_layer_set_textcolor::color#4 = YELLOW -Constant inlined modr16u::divisor#0 = $140 -Constant inlined printf_str::s#7 = main::s4 -Constant inlined printf_str::s#5 = main::s4 -Constant inlined printf_str::s#6 = main::s5 -Constant inlined modr16u::divisor#3 = $c8 -Constant inlined printf_str::s#3 = main::s2 -Constant inlined modr16u::divisor#2 = $c8 -Constant inlined printf_str::s#4 = main::s3 -Constant inlined modr16u::divisor#1 = $140 -Constant inlined vera_layer_set_tilebase::tilebase#1 = vera_layer_mode_bitmap::tilebase#1 -Constant inlined printf_str::s#1 = main::s -Constant inlined printf_str::s#2 = main::s1 -Constant inlined memcpy_in_vram::src_increment#1 = VERA_INC_1 -Constant inlined vera_layer_mode_tile::layer#0 = vera_layer_mode_text::layer#0 -Constant inlined memcpy_in_vram::src_increment#0 = VERA_INC_1 -Constant inlined insertup::i#0 = 1 -Constant inlined vera_layer_mode_tile::layer#1 = 1 -Constant inlined vera_layer_set_config::config#1 = vera_layer_mode_bitmap::config#11 -Constant inlined main::bgcolor2_color#0 = BLACK -Constant inlined bitmap_line::y0#1 = 0 -Constant inlined main::textcolor1_color#0 = WHITE -Constant inlined vera_layer_mode_tile::color_depth#0 = 1 -Constant inlined vera_layer_mode_tile::color_depth#1 = 1 -Constant inlined main::textcolor4_color#0 = YELLOW -Constant inlined divr16u::i#0 = 0 -Constant inlined vera_layer_mode_tile::tileheight#0 = vera_layer_mode_text::tileheight#0 -Constant inlined vera_layer_mode_tile::tileheight#1 = 8 -Constant inlined vera_layer_set_mapbase::mapbase#1 = $20 -Constant inlined vera_layer_set_mapbase::mapbase#2 = 0 -Constant inlined vera_layer_mode_tile::tilewidth#1 = 8 -Constant inlined vera_layer_mode_tile::tilewidth#0 = vera_layer_mode_text::tilewidth#0 -Constant inlined memset_vram::i#0 = 0 -Constant inlined memcpy_in_vram::i#0 = 0 -Constant inlined vera_layer_set_text_color_mode::$0 = vera_layer_mode_text::layer#0*SIZEOF_POINTER -Constant inlined vera_layer_mode_tile::mapbase_address#2 = $14000 -Constant inlined vera_layer_mode_tile::mapbase_address#1 = vera_layer_mode_text::mapbase_address#0 -Constant inlined main::x#2 = 0 -Constant inlined main::x#0 = 0 -Constant inlined vera_layer_set_backcolor::color#2 = BLACK -Constant inlined main::bgcolor3_color#0 = BLUE -Constant inlined vera_layer_set_backcolor::color#3 = BLUE -Constant inlined vera_layer_set_backcolor::color#0 = BLUE -Constant inlined vera_layer_set_backcolor::color#1 = BLACK -Constant inlined modr16u::rem#3 = 0 -Constant inlined gotoxy::y#3 = $19 -Constant inlined memcpy_in_vram::dest_bank#1 = 1 -Constant inlined gotoxy::y#4 = $1d -Constant inlined bitmap_line::y1#1 = $c7 -Constant inlined modr16u::rem#1 = 0 -Constant inlined memcpy_in_vram::dest_bank#0 = 0 -Constant inlined gotoxy::y#5 = $1a -Constant inlined modr16u::rem#2 = 0 -Constant inlined vera_layer_set_text_color_mode::layer#0 = vera_layer_mode_text::layer#0 -Constant inlined gotoxy::y#0 = 0 -Constant inlined bitmap_init::y#0 = 0 -Constant inlined gotoxy::y#6 = $1d -Constant inlined modr16u::rem#0 = 0 -Constant inlined main::textcolor3_color#0 = WHITE -Constant inlined vera_layer_set_tilebase::layer#1 = vera_layer_mode_bitmap::layer#0 -Constant inlined printf_str::putc#0 = &cputc -Constant inlined vera_layer_mode_tile::mapheight#0 = vera_layer_mode_text::mapheight#0 -Constant inlined printf_str::putc#1 = &cputc -Constant inlined vera_layer_mode_tile::mapheight#1 = $40 -Constant inlined printf_str::putc#2 = &cputc -Constant inlined printf_str::putc#3 = &cputc -Constant inlined memcpy_in_vram::dest#1 = (void *)(char *) 61440 -Constant inlined printf_str::putc#4 = &cputc -Constant inlined memcpy_in_vram::dest_increment#0 = VERA_INC_1 -Constant inlined printf_str::putc#5 = &cputc -Constant inlined memcpy_in_vram::dest_increment#1 = VERA_INC_1 -Constant inlined printf_str::putc#6 = &cputc -Constant inlined vera_layer_mode_bitmap::$1 = 0 -Constant inlined vera_layer_set_textcolor::layer#0 = 1 -Constant inlined vera_layer_mode_bitmap::$2 = 0 -Constant inlined memcpy_in_vram::num#1 = (unsigned int)$100*8 -Constant inlined vera_display_get_vscale::s#0 = 1 -Constant inlined vera_layer_mode_bitmap::config#10 = VERA_LAYER_COLOR_DEPTH_8BPP -Constant inlined memcpy_in_vram::src_bank#1 = 0 -Constant inlined main::color#0 = 0 -Constant inlined memcpy_in_vram::src_bank#0 = 0 -Constant inlined gotoxy::x#3 = 0 -Constant inlined gotoxy::x#4 = 0 -Constant inlined gotoxy::x#5 = 0 -Constant inlined vera_layer_set_mapbase::layer#2 = 1 -Constant inlined gotoxy::x#6 = 0 -Constant inlined vera_layer_set_mapbase::layer#1 = 0 -Constant inlined gotoxy::x#0 = 0 -Constant inlined gotoxy::x#1 = 0 -Constant inlined gotoxy::x#2 = 0 -Constant inlined rand_state#10 = 1 -Constant inlined vera_layer_mode_tile::tilebase_address#1 = vera_layer_mode_text::tilebase_address#0 -Constant inlined vera_layer_mode_tile::tilebase_address#2 = $1f000 -Constant inlined vera_layer_set_backcolor::layer#0 = 1 -Constant inlined bitmap_init::x#0 = 0 -Constant inlined main::textcolor2_color#0 = YELLOW -Constant inlined vera_layer_mode_tile::mapwidth#0 = vera_layer_mode_text::mapwidth#0 -Constant inlined divr16u::quotient#0 = 0 -Constant inlined vera_layer_mode_tile::mapwidth#1 = $80 -Constant inlined mul16u::res#0 = 0 -Constant inlined clearline::c#0 = 0 -Constant inlined vera_layer_mode_tile::config#0 = 0 -Constant inlined vera_layer_mode_tile::config#1 = VERA_LAYER_COLOR_DEPTH_1BPP -Constant inlined vera_layer_mode_tile::config#2 = VERA_LAYER_COLOR_DEPTH_2BPP -Constant inlined vera_layer_mode_tile::config#3 = VERA_LAYER_COLOR_DEPTH_4BPP -Constant inlined vera_layer_mode_tile::config#4 = VERA_LAYER_COLOR_DEPTH_8BPP -Constant inlined main::s6 = main::s4 -Constant inlined vera_display_get_hscale::s#0 = 1 -Constant inlined memcpy_in_vram::src#1 = (void *)(char *) 63488 -Constant inlined screenlayer::layer#0 = 1 -Constant inlined screenlayer::layer#1 = 1 -Constant inlined screenlayer::layer#2 = 1 -Constant inlined main::bgcolor1_color#0 = BLACK -Constant inlined clrscr::c#0 = 0 -Successful SSA optimization Pass2ConstantInlining -Consolidated array index constant in *(vera_layer_config+vera_layer_mode_text::layer#0*SIZEOF_POINTER) -Successful SSA optimization Pass2ConstantAdditionElimination -Alias candidate removed (volatile)kbhit::return#0 = kbhit::ch kbhit::return#1 -Alias candidate removed (volatile)screenlayer::vera_layer_get_width1_return#0 = screenlayer::vera_layer_get_width1_return#1 screenlayer::$2 conio_width -Alias candidate removed (volatile)conio_rowshift = screenlayer::$3 -Alias candidate removed (volatile)conio_rowskip = screenlayer::$4 -Alias candidate removed (volatile)screenlayer::vera_layer_get_height1_return#0 = screenlayer::vera_layer_get_height1_return#1 screenlayer::$5 conio_height -Alias candidate removed (volatile)bitmap_init::vera_layer_get_color_depth1_return#0 = bitmap_init::vera_layer_get_color_depth1_$0 bitmap_init::vera_layer_get_color_depth1_return#1 bitmap_init::$0 __bitmap_color_depth -Alias candidate removed (volatile)__bitmap_hscale = bitmap_init::$1 -Alias candidate removed (volatile)__bitmap_vscale = bitmap_init::$2 -Identical Phi Values memcpy_in_vram::src_increment#2 VERA_INC_1 -Identical Phi Values memcpy_in_vram::src_bank#2 0 -Identical Phi Values memcpy_in_vram::dest_increment#2 VERA_INC_1 -Identical Phi Values gotoxy::x#10 0 -Identical Phi Values vera_layer_mode_tile::color_depth#2 1 -Identical Phi Values screenlayer::layer#3 1 -Identical Phi Values printf_str::putc#9 &cputc -Identical Phi Values modr16u::rem#4 0 -Successful SSA optimization Pass2IdenticalPhiElimination -Identical Phi Values gotoxy::x#8 0 -Successful SSA optimization Pass2IdenticalPhiElimination -Identified duplicate assignment right side [238] vera_layer_mode_tile::$17 = vera_layer_mode_tile::layer#10 << 1 -Identified duplicate assignment right side [242] vera_layer_mode_tile::$18 = vera_layer_mode_tile::layer#10 << 2 -Successful SSA optimization Pass2DuplicateRValueIdentification -Constant right-side identified [6] memcpy_in_vram::$2 = VERA_INC_1 | 0 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant memcpy_in_vram::$2 = VERA_INC_1|0 -Constant divr16u::rem#3 = 0 -Successful SSA optimization Pass2ConstantIdentification -Replacing constant pointer function [380] callexecute cputc -Successful SSA optimization Pass2ConstantCallPointerIdentification -if() condition always true - replacing block destination [189] if(1==1) goto vera_layer_mode_tile::@4 -if() condition always false - eliminating [190] if(1==2) goto vera_layer_mode_tile::@5 -if() condition always false - eliminating [191] if(1==4) goto vera_layer_mode_tile::@6 -if() condition always true - replacing block destination [192] if(1!=8) goto vera_layer_mode_tile::@8 -Successful SSA optimization Pass2ConstantIfs -Simplifying expression containing zero VERA_INC_1 in -Successful SSA optimization PassNSimplifyExpressionWithZero -Removing unused block vera_layer_mode_tile::@1 -Removing PHI-reference to removed block (vera_layer_mode_tile::@5) in block vera_layer_mode_tile::@8 -Removing unused block vera_layer_mode_tile::@5 -Removing unused block vera_layer_mode_tile::@2 -Removing PHI-reference to removed block (vera_layer_mode_tile::@6) in block vera_layer_mode_tile::@8 -Removing unused block vera_layer_mode_tile::@6 -Removing PHI-reference to removed block (vera_layer_mode_tile::@3) in block vera_layer_mode_tile::@8 -Removing unused block vera_layer_mode_tile::@3 -Removing PHI-reference to removed block (vera_layer_mode_tile::@7) in block vera_layer_mode_tile::@8 -Removing unused block vera_layer_mode_tile::@7 -Successful SSA optimization Pass2EliminateUnusedBlocks -Eliminating unused constant VERA_LAYER_COLOR_DEPTH_2BPP -Eliminating unused constant VERA_LAYER_COLOR_DEPTH_4BPP -Eliminating unused constant SIZEOF_UNSIGNED_INT -Eliminating unused constant SIZEOF_UNSIGNED_LONG -Successful SSA optimization PassNEliminateUnusedVars -Inlining constant with var siblings divr16u::rem#3 -Constant inlined memcpy_in_vram::$2 = VERA_INC_1 -Constant inlined divr16u::rem#3 = 0 -Successful SSA optimization Pass2ConstantInlining -Alias candidate removed (volatile)kbhit::return#0 = kbhit::ch kbhit::return#1 -Alias candidate removed (volatile)screenlayer::vera_layer_get_width1_return#0 = screenlayer::vera_layer_get_width1_return#1 screenlayer::$2 conio_width -Alias candidate removed (volatile)conio_rowshift = screenlayer::$3 -Alias candidate removed (volatile)conio_rowskip = screenlayer::$4 -Alias candidate removed (volatile)screenlayer::vera_layer_get_height1_return#0 = screenlayer::vera_layer_get_height1_return#1 screenlayer::$5 conio_height -Alias candidate removed (volatile)bitmap_init::vera_layer_get_color_depth1_return#0 = bitmap_init::vera_layer_get_color_depth1_$0 bitmap_init::vera_layer_get_color_depth1_return#1 bitmap_init::$0 __bitmap_color_depth -Alias candidate removed (volatile)__bitmap_hscale = bitmap_init::$1 -Alias candidate removed (volatile)__bitmap_vscale = bitmap_init::$2 -Alias vera_layer_mode_tile::$17 = vera_layer_mode_tile::$15 -Alias vera_layer_mode_tile::$18 = vera_layer_mode_tile::$16 -Successful SSA optimization Pass2AliasElimination -Alias candidate removed (volatile)kbhit::return#0 = kbhit::ch kbhit::return#1 -Alias candidate removed (volatile)screenlayer::vera_layer_get_width1_return#0 = screenlayer::vera_layer_get_width1_return#1 screenlayer::$2 conio_width -Alias candidate removed (volatile)conio_rowshift = screenlayer::$3 -Alias candidate removed (volatile)conio_rowskip = screenlayer::$4 -Alias candidate removed (volatile)screenlayer::vera_layer_get_height1_return#0 = screenlayer::vera_layer_get_height1_return#1 screenlayer::$5 conio_height -Alias candidate removed (volatile)bitmap_init::vera_layer_get_color_depth1_return#0 = bitmap_init::vera_layer_get_color_depth1_$0 bitmap_init::vera_layer_get_color_depth1_return#1 bitmap_init::$0 __bitmap_color_depth -Alias candidate removed (volatile)__bitmap_hscale = bitmap_init::$1 -Alias candidate removed (volatile)__bitmap_vscale = bitmap_init::$2 -Identical Phi Values vera_layer_mode_tile::config#17 VERA_LAYER_COLOR_DEPTH_1BPP -Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [193] vera_layer_mode_tile::config#6 = VERA_LAYER_COLOR_DEPTH_1BPP | VERA_LAYER_WIDTH_64 -Constant right-side identified [198] vera_layer_mode_tile::config#7 = VERA_LAYER_COLOR_DEPTH_1BPP | VERA_LAYER_WIDTH_128 -Constant right-side identified [203] vera_layer_mode_tile::config#8 = VERA_LAYER_COLOR_DEPTH_1BPP | VERA_LAYER_WIDTH_256 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant vera_layer_mode_tile::config#6 = VERA_LAYER_COLOR_DEPTH_1BPP|VERA_LAYER_WIDTH_64 -Constant vera_layer_mode_tile::config#7 = VERA_LAYER_COLOR_DEPTH_1BPP|VERA_LAYER_WIDTH_128 -Constant vera_layer_mode_tile::config#8 = VERA_LAYER_COLOR_DEPTH_1BPP|VERA_LAYER_WIDTH_256 -Successful SSA optimization Pass2ConstantIdentification -Simplifying expression containing zero VERA_LAYER_WIDTH_64 in -Simplifying expression containing zero VERA_LAYER_WIDTH_128 in -Simplifying expression containing zero VERA_LAYER_WIDTH_256 in -Successful SSA optimization PassNSimplifyExpressionWithZero -Inlining constant with var siblings vera_layer_mode_tile::config#6 -Inlining constant with var siblings vera_layer_mode_tile::config#7 -Inlining constant with var siblings vera_layer_mode_tile::config#8 -Constant inlined vera_layer_mode_tile::config#6 = VERA_LAYER_WIDTH_64 -Constant inlined vera_layer_mode_tile::config#7 = VERA_LAYER_WIDTH_128 -Constant inlined vera_layer_mode_tile::config#8 = VERA_LAYER_WIDTH_256 -Successful SSA optimization Pass2ConstantInlining -Alias candidate removed (volatile)kbhit::return#0 = kbhit::ch kbhit::return#1 -Alias candidate removed (volatile)screenlayer::vera_layer_get_width1_return#0 = screenlayer::vera_layer_get_width1_return#1 screenlayer::$2 conio_width -Alias candidate removed (volatile)conio_rowshift = screenlayer::$3 -Alias candidate removed (volatile)conio_rowskip = screenlayer::$4 -Alias candidate removed (volatile)screenlayer::vera_layer_get_height1_return#0 = screenlayer::vera_layer_get_height1_return#1 screenlayer::$5 conio_height -Alias candidate removed (volatile)bitmap_init::vera_layer_get_color_depth1_return#0 = bitmap_init::vera_layer_get_color_depth1_$0 bitmap_init::vera_layer_get_color_depth1_return#1 bitmap_init::$0 __bitmap_color_depth -Alias candidate removed (volatile)__bitmap_hscale = bitmap_init::$1 -Alias candidate removed (volatile)__bitmap_vscale = bitmap_init::$2 -Alias candidate removed (volatile)kbhit::return#0 = kbhit::ch kbhit::return#1 -Alias candidate removed (volatile)screenlayer::vera_layer_get_width1_return#0 = screenlayer::vera_layer_get_width1_return#1 screenlayer::$2 conio_width -Alias candidate removed (volatile)conio_rowshift = screenlayer::$3 -Alias candidate removed (volatile)conio_rowskip = screenlayer::$4 -Alias candidate removed (volatile)screenlayer::vera_layer_get_height1_return#0 = screenlayer::vera_layer_get_height1_return#1 screenlayer::$5 conio_height -Alias candidate removed (volatile)bitmap_init::vera_layer_get_color_depth1_return#0 = bitmap_init::vera_layer_get_color_depth1_$0 bitmap_init::vera_layer_get_color_depth1_return#1 bitmap_init::$0 __bitmap_color_depth -Alias candidate removed (volatile)__bitmap_hscale = bitmap_init::$1 -Alias candidate removed (volatile)__bitmap_vscale = bitmap_init::$2 -Finalized unsigned number type (char) 4 -Finalized unsigned number type (char) 4 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 4 -Finalized unsigned number type (char) 4 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) $a -Finalized unsigned number type (char) $10 -Finalized unsigned number type (char) $b -Finalized unsigned number type (char) $b -Finalized unsigned number type (unsigned int) $280 -Finalized unsigned number type (unsigned int) $280 -Finalized unsigned number type (unsigned int) $1e0 -Finalized unsigned number type (unsigned int) $1e0 -Finalized unsigned number type (unsigned int) $280 -Finalized unsigned number type (unsigned int) $280 -Finalized unsigned number type (unsigned int) $280 -Finalized unsigned number type (unsigned int) $280 -Finalized unsigned number type (char) $10 -Finalized unsigned number type (char) 4 -Finalized unsigned number type (char) 5 -Finalized unsigned number type (char) 5 -Finalized unsigned number type (unsigned int) $100 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) 1 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Simplifying constant integer cast $100*8 -Successful SSA optimization PassNCastSimplification -Alias candidate removed (volatile)kbhit::return#0 = kbhit::ch kbhit::return#1 -Alias candidate removed (volatile)screenlayer::vera_layer_get_width1_return#0 = screenlayer::vera_layer_get_width1_return#1 screenlayer::$2 conio_width -Alias candidate removed (volatile)conio_rowshift = screenlayer::$3 -Alias candidate removed (volatile)conio_rowskip = screenlayer::$4 -Alias candidate removed (volatile)screenlayer::vera_layer_get_height1_return#0 = screenlayer::vera_layer_get_height1_return#1 screenlayer::$5 conio_height -Alias candidate removed (volatile)bitmap_init::vera_layer_get_color_depth1_return#0 = bitmap_init::vera_layer_get_color_depth1_$0 bitmap_init::vera_layer_get_color_depth1_return#1 bitmap_init::$0 __bitmap_color_depth -Alias candidate removed (volatile)__bitmap_hscale = bitmap_init::$1 -Alias candidate removed (volatile)__bitmap_vscale = bitmap_init::$2 -Alias candidate removed (volatile)kbhit::return#0 = kbhit::ch kbhit::return#1 -Alias candidate removed (volatile)screenlayer::vera_layer_get_width1_return#0 = screenlayer::vera_layer_get_width1_return#1 screenlayer::$2 conio_width -Alias candidate removed (volatile)conio_rowshift = screenlayer::$3 -Alias candidate removed (volatile)conio_rowskip = screenlayer::$4 -Alias candidate removed (volatile)screenlayer::vera_layer_get_height1_return#0 = screenlayer::vera_layer_get_height1_return#1 screenlayer::$5 conio_height -Alias candidate removed (volatile)bitmap_init::vera_layer_get_color_depth1_return#0 = bitmap_init::vera_layer_get_color_depth1_$0 bitmap_init::vera_layer_get_color_depth1_return#1 bitmap_init::$0 __bitmap_color_depth -Alias candidate removed (volatile)__bitmap_hscale = bitmap_init::$1 -Alias candidate removed (volatile)__bitmap_vscale = bitmap_init::$2 -Added new block during phi lifting gotoxy::@5(between gotoxy and gotoxy::@1) -Added new block during phi lifting vera_display_get_hscale::@5(between vera_display_get_hscale::@2 and vera_display_get_hscale::@1) -Added new block during phi lifting vera_display_get_vscale::@5(between vera_display_get_vscale::@2 and vera_display_get_vscale::@1) -Added new block during phi lifting vera_layer_mode_tile::@36(between vera_layer_mode_tile::@19 and vera_layer_mode_tile::@24) -Added new block during phi lifting vera_layer_mode_tile::@37(between vera_layer_mode_tile::@25 and vera_layer_mode_tile::@28) -Added new block during phi lifting vera_layer_mode_tile::@38(between vera_layer_mode_tile::@29 and vera_layer_mode_tile::@32) -Added new block during phi lifting conio_x16_init::@11(between conio_x16_init::@9 and conio_x16_init::@1) -Added new block during phi lifting bitmap_init::@19(between bitmap_init::@7 and bitmap_init::@1) -Added new block during phi lifting bitmap_init::@20(between bitmap_init::@1 and bitmap_init::@2) -Added new block during phi lifting bitmap_init::@21(between bitmap_init::@2 and bitmap_init::@3) -Added new block during phi lifting bitmap_init::@22(between bitmap_init::@3 and bitmap_init::@4) -Added new block during phi lifting bitmap_init::@23(between bitmap_init::@5 and bitmap_init::@6) -Added new block during phi lifting bitmap_init::@24(between bitmap_init::@6 and bitmap_init::@7) -Added new block during phi lifting bitmap_init::@25(between bitmap_init::@15 and bitmap_init::@15) -Added new block during phi lifting mul16u::@6(between mul16u::@2 and mul16u::@4) -Added new block during phi lifting bitmap_line_xdyi::@5(between bitmap_line_xdyi::@2 and bitmap_line_xdyi::@1) -Added new block during phi lifting bitmap_line_xdyi::@6(between bitmap_line_xdyi::@4 and bitmap_line_xdyi::@2) -Added new block during phi lifting bitmap_line_xdyd::@5(between bitmap_line_xdyd::@2 and bitmap_line_xdyd::@1) -Added new block during phi lifting bitmap_line_xdyd::@6(between bitmap_line_xdyd::@4 and bitmap_line_xdyd::@2) -Added new block during phi lifting bitmap_line_ydxi::@5(between bitmap_line_ydxi::@2 and bitmap_line_ydxi::@1) -Added new block during phi lifting bitmap_line_ydxi::@6(between bitmap_line_ydxi::@4 and bitmap_line_ydxi::@2) -Added new block during phi lifting bitmap_line_ydxd::@5(between bitmap_line_ydxd::@2 and bitmap_line_ydxd::@1) -Added new block during phi lifting bitmap_line_ydxd::@6(between bitmap_line_ydxd::@4 and bitmap_line_ydxd::@2) -Added new block during phi lifting divr16u::@7(between divr16u::@3 and divr16u::@1) -Added new block during phi lifting divr16u::@8(between divr16u::@1 and divr16u::@2) -Added new block during phi lifting divr16u::@9(between divr16u::@2 and divr16u::@3) -Added new block during phi lifting main::@59(between main::@54 and main::@4) -Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@2 -Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of __start::@3 -Adding NOP phi() at start of conio_x16_init::@3 -Adding NOP phi() at start of conio_x16_init::@4 -Adding NOP phi() at start of conio_x16_init::@5 -Adding NOP phi() at start of conio_x16_init::@6 -Adding NOP phi() at start of conio_x16_init::@7 -Adding NOP phi() at start of conio_x16_init::@8 -Adding NOP phi() at start of conio_x16_init::@10 -Adding NOP phi() at start of cputc::@4 -Adding NOP phi() at start of cputc::@9 -Adding NOP phi() at start of cputc::@6 -Adding NOP phi() at start of cputc::@10 -Adding NOP phi() at start of cputc::@1 -Adding NOP phi() at start of cputc::@8 -Adding NOP phi() at start of main -Adding NOP phi() at start of main::@17 -Adding NOP phi() at start of main::@18 -Adding NOP phi() at start of main::@19 -Adding NOP phi() at start of main::@20 -Adding NOP phi() at start of main::@21 -Adding NOP phi() at start of main::@8 -Adding NOP phi() at start of main::@22 -Adding NOP phi() at start of main::@9 -Adding NOP phi() at start of main::@23 -Adding NOP phi() at start of main::@24 -Adding NOP phi() at start of main::@25 -Adding NOP phi() at start of main::@26 -Adding NOP phi() at start of main::@27 -Adding NOP phi() at start of main::@28 -Adding NOP phi() at start of main::@10 -Adding NOP phi() at start of main::@29 -Adding NOP phi() at start of main::@30 -Adding NOP phi() at start of main::@31 -Adding NOP phi() at start of main::@32 -Adding NOP phi() at start of main::@11 -Adding NOP phi() at start of main::@33 -Adding NOP phi() at start of main::@3 -Adding NOP phi() at start of main::@45 -Adding NOP phi() at start of main::@12 -Adding NOP phi() at start of main::@46 -Adding NOP phi() at start of main::@13 -Adding NOP phi() at start of main::@47 -Adding NOP phi() at start of main::@48 -Adding NOP phi() at start of main::@49 -Adding NOP phi() at start of main::@50 -Adding NOP phi() at start of main::@51 -Adding NOP phi() at start of main::@14 -Adding NOP phi() at start of main::@52 -Adding NOP phi() at start of main::@6 -Adding NOP phi() at start of main::@55 -Adding NOP phi() at start of main::@56 -Adding NOP phi() at start of main::@15 -Adding NOP phi() at start of main::@57 -Adding NOP phi() at start of main::@16 -Adding NOP phi() at start of main::@58 -Adding NOP phi() at start of vera_layer_mode_text -Adding NOP phi() at start of vera_layer_mode_text::@4 -Adding NOP phi() at start of vera_layer_mode_text::@2 -Adding NOP phi() at start of vera_layer_mode_text::@5 -Adding NOP phi() at start of gotoxy::@3 -Adding NOP phi() at start of gotoxy::@4 -Adding NOP phi() at start of cputln::@1 -Adding NOP phi() at start of vera_layer_mode_tile::@4 -Adding NOP phi() at start of vera_layer_mode_tile::@35 -Adding NOP phi() at start of vera_layer_mode_bitmap -Adding NOP phi() at start of vera_layer_mode_bitmap::@1 -Adding NOP phi() at start of vera_layer_mode_bitmap::@2 -Adding NOP phi() at start of vera_layer_mode_bitmap::@3 -Adding NOP phi() at start of vera_layer_mode_bitmap::@7 -Adding NOP phi() at start of vera_layer_mode_bitmap::@11 -Adding NOP phi() at start of vera_layer_mode_bitmap::@10 -Adding NOP phi() at start of vera_layer_mode_bitmap::@13 -Adding NOP phi() at start of vera_layer_mode_bitmap::@14 -Adding NOP phi() at start of bitmap_clear::@2 -Adding NOP phi() at start of bitmap_line::@16 -Adding NOP phi() at start of bitmap_line::@15 -Adding NOP phi() at start of bitmap_line::@18 -Adding NOP phi() at start of bitmap_line::@17 -Adding NOP phi() at start of bitmap_line::@20 -Adding NOP phi() at start of bitmap_line::@19 -Adding NOP phi() at start of bitmap_line::@22 -Adding NOP phi() at start of bitmap_line::@21 -Adding NOP phi() at start of cscroll::@3 -Adding NOP phi() at start of cscroll::@4 -Adding NOP phi() at start of cscroll::@6 -Adding NOP phi() at start of vera_display_get_hscale -Adding NOP phi() at start of vera_display_get_vscale -Adding NOP phi() at start of mul16u::@3 -Adding NOP phi() at start of insertup::@3 -Adding NOP phi() at start of insertup::@5 -CALL GRAPH -Calls in [__start] to conio_x16_init:13 main:16 -Calls in [conio_x16_init] to vera_layer_mode_text:20 screensize:22 screenlayer:24 vera_layer_set_textcolor:26 vera_layer_set_backcolor:28 vera_layer_set_mapbase:30 vera_layer_set_mapbase:32 gotoxy:39 -Calls in [cputc] to vera_layer_get_color:47 cputln:70 cputln:75 cputln:78 -Calls in [main] to memcpy_in_vram:81 vera_layer_mode_tile:83 vera_layer_mode_bitmap:85 screenlayer:87 vera_layer_set_textcolor:91 vera_layer_set_backcolor:96 clrscr:99 gotoxy:101 printf_str:103 printf_str:105 printf_str:107 printf_str:109 bitmap_init:113 bitmap_clear:115 gotoxy:117 vera_layer_set_textcolor:121 printf_str:124 kbhit:127 vera_layer_set_textcolor:134 vera_layer_set_backcolor:139 clrscr:142 gotoxy:144 printf_str:146 gotoxy:148 vera_layer_set_textcolor:152 printf_str:155 kbhit:158 screenlayer:163 vera_layer_set_textcolor:167 vera_layer_set_backcolor:172 clrscr:175 bitmap_line:184 rand:192 modr16u:196 rand:200 modr16u:204 rand:208 modr16u:212 rand:216 modr16u:220 rand:224 bitmap_line:233 -Calls in [vera_layer_mode_text] to vera_layer_mode_tile:236 vera_layer_set_text_color_mode:239 -Calls in [screenlayer] to vera_layer_get_mapbase_bank:251 vera_layer_get_mapbase_offset:255 vera_layer_get_rowshift:269 vera_layer_get_rowskip:274 -Calls in [cputln] to cscroll:333 -Calls in [vera_layer_mode_tile] to vera_layer_set_config:377 vera_layer_set_mapbase:391 vera_layer_set_tilebase:414 -Calls in [vera_layer_mode_bitmap] to vera_layer_set_config:448 vera_layer_set_tilebase:450 -Calls in [clrscr] to vera_layer_get_backcolor:455 vera_layer_get_textcolor:460 -Calls in [printf_str] to cputc:497 -Calls in [bitmap_init] to vera_display_get_hscale:510 vera_display_get_vscale:514 -Calls in [bitmap_clear] to mul16u:618 memset_vram:626 -Calls in [bitmap_line] to bitmap_line_ydxi:652 bitmap_line_xdyi:667 bitmap_line_ydxd:683 bitmap_line_xdyd:697 bitmap_line_ydxd:715 bitmap_line_xdyd:729 bitmap_line_ydxi:745 bitmap_line_xdyi:759 -Calls in [modr16u] to divr16u:773 -Calls in [cscroll] to insertup:796 gotoxy:799 -Calls in [bitmap_line_ydxi] to bitmap_plot:876 -Calls in [bitmap_line_xdyi] to bitmap_plot:905 -Calls in [bitmap_line_ydxd] to bitmap_plot:934 -Calls in [bitmap_line_xdyd] to bitmap_plot:963 -Calls in [insertup] to clearline:1013 memcpy_in_vram:1025 -Calls in [clearline] to vera_layer_get_color:1066 - -Created 128 initial phi equivalence classes -Coalesced [35] conio_x16_init::line#10 = conio_x16_init::line#1 -Coalesced [38] gotoxy::y#11 = gotoxy::y#1 -Coalesced [42] conio_x16_init::line#11 = conio_x16_init::line#0 -Coalesced [46] vera_layer_get_color::layer#6 = vera_layer_get_color::layer#0 -Coalesced [90] vera_layer_set_textcolor::layer#7 = vera_layer_set_textcolor::layer#1 -Coalesced [95] vera_layer_set_backcolor::layer#5 = vera_layer_set_backcolor::layer#1 -Coalesced [120] vera_layer_set_textcolor::layer#8 = vera_layer_set_textcolor::layer#2 -Coalesced [133] vera_layer_set_textcolor::layer#9 = vera_layer_set_textcolor::layer#3 -Coalesced [138] vera_layer_set_backcolor::layer#6 = vera_layer_set_backcolor::layer#2 -Coalesced [151] vera_layer_set_textcolor::layer#10 = vera_layer_set_textcolor::layer#4 -Coalesced [166] vera_layer_set_textcolor::layer#11 = vera_layer_set_textcolor::layer#5 -Coalesced [171] vera_layer_set_backcolor::layer#7 = vera_layer_set_backcolor::layer#3 -Coalesced [181] bitmap_line::x0#16 = bitmap_line::x0#1 -Coalesced [182] bitmap_line::x1#16 = bitmap_line::x1#1 -Coalesced [183] bitmap_line::c#18 = bitmap_line::c#1 -Coalesced [188] main::color#8 = main::color#1 -Coalesced [189] main::x#7 = main::x#1 -Coalesced (already) [190] main::color#7 = main::color#1 -Coalesced [191] rand_state#88 = rand_state#23 -Coalesced [195] modr16u::dividend#5 = modr16u::dividend#0 -Coalesced [199] rand_state#89 = rand_state#14 -Coalesced [203] modr16u::dividend#6 = modr16u::dividend#1 -Coalesced (already) [207] rand_state#90 = rand_state#14 -Coalesced [211] modr16u::dividend#7 = modr16u::dividend#2 -Coalesced (already) [215] rand_state#91 = rand_state#14 -Coalesced [219] modr16u::dividend#8 = modr16u::dividend#3 -Coalesced (already) [223] rand_state#92 = rand_state#14 -Coalesced [228] bitmap_line::x0#15 = bitmap_line::x0#0 -Coalesced [229] bitmap_line::x1#15 = bitmap_line::x1#0 -Coalesced [230] bitmap_line::y0#15 = bitmap_line::y0#0 -Coalesced [231] bitmap_line::y1#15 = bitmap_line::y1#0 -Coalesced [232] bitmap_line::c#17 = bitmap_line::c#0 -Coalesced (already) [234] rand_state#93 = rand_state#14 -Coalesced [313] gotoxy::y#13 = gotoxy::y#7 -Coalesced [321] vera_layer_get_color::return#9 = vera_layer_get_color::return#2 -Coalesced [325] vera_layer_get_color::return#8 = vera_layer_get_color::return#1 -Coalesced [355] memcpy_in_vram::i#4 = memcpy_in_vram::i#1 -Coalesced [371] vera_layer_mode_tile::config#41 = vera_layer_mode_tile::config#12 -Coalesced [375] vera_layer_set_config::layer#3 = vera_layer_set_config::layer#0 -Coalesced [376] vera_layer_set_config::config#3 = vera_layer_set_config::config#0 -Coalesced [389] vera_layer_set_mapbase::layer#4 = vera_layer_set_mapbase::layer#0 -Coalesced [390] vera_layer_set_mapbase::mapbase#4 = vera_layer_set_mapbase::mapbase#0 -Coalesced [403] vera_layer_mode_tile::tilebase#16 = vera_layer_mode_tile::tilebase#3 -Coalesced [408] vera_layer_mode_tile::tilebase#19 = vera_layer_mode_tile::tilebase#5 -Coalesced [412] vera_layer_set_tilebase::layer#3 = vera_layer_set_tilebase::layer#0 -Coalesced [413] vera_layer_set_tilebase::tilebase#3 = vera_layer_set_tilebase::tilebase#0 -Coalesced [417] vera_layer_mode_tile::tilebase#17 = vera_layer_mode_tile::tilebase#12 -Coalesced (already) [418] vera_layer_mode_tile::tilebase#18 = vera_layer_mode_tile::tilebase#12 -Coalesced [419] vera_layer_mode_tile::tilebase#14 = vera_layer_mode_tile::tilebase#1 -Coalesced (already) [420] vera_layer_mode_tile::tilebase#15 = vera_layer_mode_tile::tilebase#1 -Coalesced [421] vera_layer_mode_tile::config#37 = vera_layer_mode_tile::config#21 -Coalesced [423] vera_layer_mode_tile::config#40 = vera_layer_mode_tile::config#11 -Coalesced [425] vera_layer_mode_tile::config#39 = vera_layer_mode_tile::config#10 -Coalesced (already) [426] vera_layer_mode_tile::config#38 = vera_layer_mode_tile::config#21 -Coalesced [464] clrscr::line_text#10 = clrscr::line_text#0 -Coalesced [483] clrscr::l#7 = clrscr::l#1 -Coalesced [484] clrscr::line_text#9 = clrscr::line_text#1 -Coalesced [488] clrscr::c#4 = clrscr::c#1 -Coalesced [490] printf_str::s#11 = printf_str::s#9 -Coalesced [499] printf_str::s#12 = printf_str::s#0 -Coalesced [520] bitmap_init::bitmask#17 = bitmap_init::bitmask#0 -Coalesced [521] bitmap_init::bitshift#17 = bitmap_init::bitshift#0 -Coalesced [534] bitmap_init::bitmask#20 = bitmap_init::bitmask#1 -Coalesced [535] bitmap_init::bitshift#20 = bitmap_init::bitshift#1 -Coalesced [548] bitmap_init::bitmask#22 = bitmap_init::bitmask#2 -Coalesced [549] bitmap_init::bitshift#22 = bitmap_init::bitshift#2 -Coalesced [562] bitmap_init::bitshift#23 = bitmap_init::bitshift#3 -Coalesced [563] bitmap_init::bitmask#23 = bitmap_init::bitmask#3 -Coalesced [575] bitmap_init::bitshift#25 = bitmap_init::bitshift#4 -Coalesced [579] bitmap_init::bitmask#25 = bitmap_init::bitmask#4 -Coalesced [588] bitmap_init::yoffs#3 = bitmap_init::yoffs#0 -Coalesced [597] bitmap_init::y#3 = bitmap_init::y#1 -Coalesced [598] bitmap_init::yoffs#4 = bitmap_init::yoffs#1 -Coalesced [599] bitmap_init::x#15 = bitmap_init::x#1 -Coalesced [600] bitmap_init::bitmask#18 = bitmap_init::bitmask#16 -Coalesced [601] bitmap_init::bitshift#18 = bitmap_init::bitshift#14 -Coalesced [602] bitmap_init::bitmask#26 = bitmap_init::bitmask#13 -Coalesced [603] bitmap_init::bitshift#26 = bitmap_init::bitshift#13 -Coalesced [604] bitmap_init::bitshift#24 = bitmap_init::bitshift#12 -Coalesced [605] bitmap_init::bitmask#24 = bitmap_init::bitmask#12 -Coalesced [606] bitmap_init::bitmask#21 = bitmap_init::bitmask#11 -Coalesced [607] bitmap_init::bitshift#21 = bitmap_init::bitshift#11 -Coalesced (already) [608] bitmap_init::bitmask#19 = bitmap_init::bitmask#10 -Coalesced (already) [609] bitmap_init::bitshift#19 = bitmap_init::bitshift#10 -Coalesced [646] bitmap_line_ydxi::xd#8 = bitmap_line_ydxi::xd#0 -Coalesced [647] bitmap_line_ydxi::x#9 = bitmap_line_ydxi::x#0 -Coalesced [648] bitmap_line_ydxi::y#9 = bitmap_line_ydxi::y#0 -Coalesced [649] bitmap_line_ydxi::c#8 = bitmap_line_ydxi::c#0 -Coalesced [650] bitmap_line_ydxi::yd#8 = bitmap_line_ydxi::yd#0 -Coalesced [651] bitmap_line_ydxi::y1#8 = bitmap_line_ydxi::y1#0 -Coalesced [661] bitmap_line_xdyi::yd#8 = bitmap_line_xdyi::yd#0 -Coalesced [662] bitmap_line_xdyi::x#9 = bitmap_line_xdyi::x#0 -Coalesced [663] bitmap_line_xdyi::y#9 = bitmap_line_xdyi::y#0 -Coalesced [664] bitmap_line_xdyi::c#8 = bitmap_line_xdyi::c#0 -Coalesced [665] bitmap_line_xdyi::xd#8 = bitmap_line_xdyi::xd#0 -Coalesced [666] bitmap_line_xdyi::x1#8 = bitmap_line_xdyi::x1#0 -Coalesced [677] bitmap_line_ydxd::xd#7 = bitmap_line_ydxd::xd#0 -Coalesced [678] bitmap_line_ydxd::x#8 = bitmap_line_ydxd::x#0 -Coalesced [679] bitmap_line_ydxd::y#9 = bitmap_line_ydxd::y#0 -Coalesced [680] bitmap_line_ydxd::c#7 = bitmap_line_ydxd::c#0 -Coalesced [681] bitmap_line_ydxd::yd#7 = bitmap_line_ydxd::yd#0 -Coalesced [682] bitmap_line_ydxd::y1#7 = bitmap_line_ydxd::y1#0 -Coalesced [691] bitmap_line_xdyd::yd#8 = bitmap_line_xdyd::yd#0 -Coalesced [692] bitmap_line_xdyd::x#9 = bitmap_line_xdyd::x#0 -Coalesced [693] bitmap_line_xdyd::y#9 = bitmap_line_xdyd::y#0 -Coalesced [694] bitmap_line_xdyd::c#8 = bitmap_line_xdyd::c#0 -Coalesced [695] bitmap_line_xdyd::xd#8 = bitmap_line_xdyd::xd#0 -Coalesced [696] bitmap_line_xdyd::x1#8 = bitmap_line_xdyd::x1#0 -Coalesced [709] bitmap_line_ydxd::xd#8 = bitmap_line_ydxd::xd#1 -Coalesced [710] bitmap_line_ydxd::x#9 = bitmap_line_ydxd::x#1 -Coalesced [711] bitmap_line_ydxd::y#10 = bitmap_line_ydxd::y#1 -Coalesced [712] bitmap_line_ydxd::c#8 = bitmap_line_ydxd::c#1 -Coalesced [713] bitmap_line_ydxd::yd#8 = bitmap_line_ydxd::yd#1 -Coalesced [714] bitmap_line_ydxd::y1#8 = bitmap_line_ydxd::y1#1 -Coalesced [723] bitmap_line_xdyd::yd#7 = bitmap_line_xdyd::yd#1 -Coalesced [724] bitmap_line_xdyd::x#8 = bitmap_line_xdyd::x#1 -Coalesced [725] bitmap_line_xdyd::y#8 = bitmap_line_xdyd::y#1 -Coalesced [726] bitmap_line_xdyd::c#7 = bitmap_line_xdyd::c#1 -Coalesced [727] bitmap_line_xdyd::xd#7 = bitmap_line_xdyd::xd#1 -Coalesced [728] bitmap_line_xdyd::x1#7 = bitmap_line_xdyd::x1#1 -Coalesced [739] bitmap_line_ydxi::xd#7 = bitmap_line_ydxi::xd#1 -Coalesced [740] bitmap_line_ydxi::x#8 = bitmap_line_ydxi::x#1 -Coalesced [741] bitmap_line_ydxi::y#8 = bitmap_line_ydxi::y#1 -Coalesced [742] bitmap_line_ydxi::c#7 = bitmap_line_ydxi::c#1 -Coalesced [743] bitmap_line_ydxi::yd#7 = bitmap_line_ydxi::yd#1 -Coalesced [744] bitmap_line_ydxi::y1#7 = bitmap_line_ydxi::y1#1 -Coalesced [753] bitmap_line_xdyi::yd#7 = bitmap_line_xdyi::yd#1 -Coalesced [754] bitmap_line_xdyi::x#8 = bitmap_line_xdyi::x#1 -Coalesced [755] bitmap_line_xdyi::y#8 = bitmap_line_xdyi::y#1 -Coalesced [756] bitmap_line_xdyi::c#7 = bitmap_line_xdyi::c#1 -Coalesced [757] bitmap_line_xdyi::xd#7 = bitmap_line_xdyi::xd#1 -Coalesced [758] bitmap_line_xdyi::x1#7 = bitmap_line_xdyi::x1#1 -Coalesced [798] gotoxy::y#12 = gotoxy::y#2 -Coalesced [818] vera_display_get_hscale::return#5 = vera_display_get_hscale::s#2 -Coalesced [823] vera_display_get_hscale::s#5 = vera_display_get_hscale::s#1 -Coalesced [827] vera_display_get_vscale::return#5 = vera_display_get_vscale::s#2 -Coalesced [832] vera_display_get_vscale::s#5 = vera_display_get_vscale::s#1 -Coalesced [834] mul16u::a#7 = mul16u::a#0 -Coalesced [835] mul16u::mb#6 = mul16u::mb#0 -Coalesced [843] mul16u::res#9 = mul16u::res#1 -Coalesced [847] mul16u::a#8 = mul16u::a#1 -Coalesced [848] mul16u::res#7 = mul16u::res#6 -Coalesced [849] mul16u::mb#7 = mul16u::mb#1 -Coalesced (already) [850] mul16u::res#8 = mul16u::res#2 -Coalesced [863] memset_vram::i#4 = memset_vram::i#1 -Coalesced [866] bitmap_line_ydxi::x#10 = bitmap_line_ydxi::x#5 -Coalesced [867] bitmap_line_ydxi::y#10 = bitmap_line_ydxi::y#6 -Coalesced [868] bitmap_line_ydxi::e#7 = bitmap_line_ydxi::e#0 -Coalesced [873] bitmap_plot::x#13 = bitmap_plot::x#2 -Coalesced [874] bitmap_plot::y#8 = bitmap_plot::y#2 -Coalesced [875] bitmap_plot::c#13 = bitmap_plot::c#3 -Coalesced [882] bitmap_line_ydxi::x#12 = bitmap_line_ydxi::x#2 -Coalesced [883] bitmap_line_ydxi::e#9 = bitmap_line_ydxi::e#2 -Coalesced [888] bitmap_line_ydxi::x#11 = bitmap_line_ydxi::x#6 -Coalesced [889] bitmap_line_ydxi::y#11 = bitmap_line_ydxi::y#2 -Coalesced [890] bitmap_line_ydxi::e#8 = bitmap_line_ydxi::e#6 -Coalesced (already) [891] bitmap_line_ydxi::x#13 = bitmap_line_ydxi::x#3 -Coalesced [892] bitmap_line_ydxi::e#10 = bitmap_line_ydxi::e#1 -Coalesced [895] bitmap_line_xdyi::x#10 = bitmap_line_xdyi::x#6 -Coalesced [896] bitmap_line_xdyi::y#10 = bitmap_line_xdyi::y#5 -Coalesced [897] bitmap_line_xdyi::e#7 = bitmap_line_xdyi::e#0 -Coalesced [902] bitmap_plot::x#11 = bitmap_plot::x#0 -Coalesced [903] bitmap_plot::y#6 = bitmap_plot::y#0 -Coalesced [904] bitmap_plot::c#11 = bitmap_plot::c#1 -Coalesced [911] bitmap_line_xdyi::y#12 = bitmap_line_xdyi::y#2 -Coalesced [912] bitmap_line_xdyi::e#9 = bitmap_line_xdyi::e#2 -Coalesced [917] bitmap_line_xdyi::x#11 = bitmap_line_xdyi::x#2 -Coalesced [918] bitmap_line_xdyi::y#11 = bitmap_line_xdyi::y#6 -Coalesced [919] bitmap_line_xdyi::e#8 = bitmap_line_xdyi::e#6 -Coalesced (already) [920] bitmap_line_xdyi::y#13 = bitmap_line_xdyi::y#3 -Coalesced [921] bitmap_line_xdyi::e#10 = bitmap_line_xdyi::e#1 -Coalesced [924] bitmap_line_ydxd::x#10 = bitmap_line_ydxd::x#5 -Coalesced [925] bitmap_line_ydxd::y#11 = bitmap_line_ydxd::y#7 -Coalesced [926] bitmap_line_ydxd::e#7 = bitmap_line_ydxd::e#0 -Coalesced [931] bitmap_plot::x#12 = bitmap_plot::x#3 -Coalesced [932] bitmap_plot::y#7 = bitmap_plot::y#3 -Coalesced [933] bitmap_plot::c#12 = bitmap_plot::c#4 -Coalesced [940] bitmap_line_ydxd::x#12 = bitmap_line_ydxd::x#2 -Coalesced [941] bitmap_line_ydxd::e#9 = bitmap_line_ydxd::e#2 -Coalesced [946] bitmap_line_ydxd::x#11 = bitmap_line_ydxd::x#6 -Coalesced [947] bitmap_line_ydxd::y#12 = bitmap_line_ydxd::y#3 -Coalesced [948] bitmap_line_ydxd::e#8 = bitmap_line_ydxd::e#6 -Coalesced (already) [949] bitmap_line_ydxd::x#13 = bitmap_line_ydxd::x#3 -Coalesced [950] bitmap_line_ydxd::e#10 = bitmap_line_ydxd::e#1 -Coalesced [953] bitmap_line_xdyd::x#10 = bitmap_line_xdyd::x#6 -Coalesced [954] bitmap_line_xdyd::y#10 = bitmap_line_xdyd::y#5 -Coalesced [955] bitmap_line_xdyd::e#7 = bitmap_line_xdyd::e#0 -Coalesced [960] bitmap_plot::x#10 = bitmap_plot::x#1 -Coalesced [961] bitmap_plot::y#5 = bitmap_plot::y#1 -Coalesced [962] bitmap_plot::c#10 = bitmap_plot::c#2 -Coalesced [969] bitmap_line_xdyd::y#12 = bitmap_line_xdyd::y#2 -Coalesced [970] bitmap_line_xdyd::e#9 = bitmap_line_xdyd::e#2 -Coalesced [975] bitmap_line_xdyd::x#11 = bitmap_line_xdyd::x#2 -Coalesced [976] bitmap_line_xdyd::y#11 = bitmap_line_xdyd::y#6 -Coalesced [977] bitmap_line_xdyd::e#8 = bitmap_line_xdyd::e#6 -Coalesced (already) [978] bitmap_line_xdyd::y#13 = bitmap_line_xdyd::y#3 -Coalesced [979] bitmap_line_xdyd::e#10 = bitmap_line_xdyd::e#1 -Coalesced [980] divr16u::dividend#8 = divr16u::dividend#1 -Coalesced [987] divr16u::rem#13 = divr16u::rem#1 -Coalesced [994] divr16u::rem#15 = divr16u::rem#2 -Coalesced [995] divr16u::return#5 = divr16u::quotient#2 -Coalesced [1001] divr16u::rem#11 = divr16u::rem#10 -Coalesced [1002] divr16u::dividend#9 = divr16u::dividend#0 -Coalesced [1003] divr16u::quotient#9 = divr16u::return#0 -Coalesced [1004] divr16u::i#7 = divr16u::i#1 -Coalesced [1005] divr16u::rem#14 = divr16u::rem#5 -Coalesced [1006] divr16u::return#4 = divr16u::quotient#1 -Coalesced [1007] divr16u::rem#12 = divr16u::rem#0 -Coalesced [1023] memcpy_in_vram::dest#3 = memcpy_in_vram::dest#0 -Coalesced [1024] memcpy_in_vram::num#5 = memcpy_in_vram::num#0 -Coalesced [1027] insertup::i#5 = insertup::i#1 -Coalesced [1039] bitmap_plot::c#15 = bitmap_plot::c#5 -Coalesced [1055] bitmap_plot::c#14 = bitmap_plot::$3 -Coalesced [1065] vera_layer_get_color::layer#5 = vera_layer_get_color::layer#1 -Coalesced [1076] clearline::c#4 = clearline::c#1 -Coalesced down to 92 phi equivalence classes -Culled Empty Block label __start::@2 -Culled Empty Block label __start::@3 -Culled Empty Block label conio_x16_init::@10 -Culled Empty Block label conio_x16_init::@11 -Culled Empty Block label cputc::@9 -Culled Empty Block label cputc::@10 -Culled Empty Block label cputc::@8 -Culled Empty Block label main::@20 -Culled Empty Block label main::@21 -Culled Empty Block label main::@8 -Culled Empty Block label main::@22 -Culled Empty Block label main::@28 -Culled Empty Block label main::@31 -Culled Empty Block label main::@32 -Culled Empty Block label main::@33 -Culled Empty Block label main::@3 -Culled Empty Block label main::@45 -Culled Empty Block label main::@12 -Culled Empty Block label main::@46 -Culled Empty Block label main::@50 -Culled Empty Block label main::@51 -Culled Empty Block label main::@52 -Culled Empty Block label main::@55 -Culled Empty Block label main::@56 -Culled Empty Block label main::@15 -Culled Empty Block label main::@57 -Culled Empty Block label main::@58 -Culled Empty Block label main::@7 -Culled Empty Block label main::@44 -Culled Empty Block label vera_layer_mode_text::@4 -Culled Empty Block label vera_layer_mode_text::@5 -Culled Empty Block label gotoxy::@3 -Culled Empty Block label cputln::@1 -Culled Empty Block label vera_layer_mode_tile::@4 -Culled Empty Block label vera_layer_mode_tile::@35 -Culled Empty Block label vera_layer_mode_tile::@38 -Culled Empty Block label vera_layer_mode_tile::@30 -Culled Empty Block label vera_layer_mode_tile::@37 -Culled Empty Block label vera_layer_mode_tile::@26 -Culled Empty Block label vera_layer_mode_tile::@36 -Culled Empty Block label vera_layer_mode_tile::@20 -Culled Empty Block label vera_layer_mode_bitmap::@1 -Culled Empty Block label vera_layer_mode_bitmap::@2 -Culled Empty Block label vera_layer_mode_bitmap::@3 -Culled Empty Block label vera_layer_mode_bitmap::@7 -Culled Empty Block label vera_layer_mode_bitmap::@11 -Culled Empty Block label vera_layer_mode_bitmap::@14 -Culled Empty Block label bitmap_init::@25 -Culled Empty Block label bitmap_init::@19 -Culled Empty Block label bitmap_init::@24 -Culled Empty Block label bitmap_init::@23 -Culled Empty Block label bitmap_init::@22 -Culled Empty Block label bitmap_init::@21 -Culled Empty Block label bitmap_init::@20 -Culled Empty Block label bitmap_clear::@2 -Culled Empty Block label bitmap_line::@16 -Culled Empty Block label bitmap_line::@15 -Culled Empty Block label bitmap_line::@18 -Culled Empty Block label bitmap_line::@17 -Culled Empty Block label bitmap_line::@20 -Culled Empty Block label bitmap_line::@19 -Culled Empty Block label bitmap_line::@22 -Culled Empty Block label bitmap_line::@21 -Culled Empty Block label cscroll::@6 -Culled Empty Block label vera_display_get_hscale::@4 -Culled Empty Block label vera_display_get_hscale::@5 -Culled Empty Block label vera_display_get_vscale::@4 -Culled Empty Block label vera_display_get_vscale::@5 -Culled Empty Block label mul16u::@3 -Culled Empty Block label mul16u::@6 -Culled Empty Block label bitmap_line_ydxi::@5 -Culled Empty Block label bitmap_line_ydxi::@6 -Culled Empty Block label bitmap_line_xdyi::@5 -Culled Empty Block label bitmap_line_xdyi::@6 -Culled Empty Block label bitmap_line_ydxd::@5 -Culled Empty Block label bitmap_line_ydxd::@6 -Culled Empty Block label bitmap_line_xdyd::@5 -Culled Empty Block label bitmap_line_xdyd::@6 -Culled Empty Block label divr16u::@7 -Culled Empty Block label divr16u::@9 -Culled Empty Block label divr16u::@8 -Culled Empty Block label insertup::@5 -Culled Empty Block label bitmap_plot::@2 -Renumbering block gotoxy::@4 to gotoxy::@3 -Renumbering block gotoxy::@5 to gotoxy::@4 -Renumbering block vera_layer_mode_tile::@8 to vera_layer_mode_tile::@1 -Renumbering block vera_layer_mode_tile::@9 to vera_layer_mode_tile::@2 -Renumbering block vera_layer_mode_tile::@10 to vera_layer_mode_tile::@3 -Renumbering block vera_layer_mode_tile::@11 to vera_layer_mode_tile::@4 -Renumbering block vera_layer_mode_tile::@12 to vera_layer_mode_tile::@5 -Renumbering block vera_layer_mode_tile::@13 to vera_layer_mode_tile::@6 -Renumbering block vera_layer_mode_tile::@14 to vera_layer_mode_tile::@7 -Renumbering block vera_layer_mode_tile::@15 to vera_layer_mode_tile::@8 -Renumbering block vera_layer_mode_tile::@16 to vera_layer_mode_tile::@9 -Renumbering block vera_layer_mode_tile::@17 to vera_layer_mode_tile::@10 -Renumbering block vera_layer_mode_tile::@18 to vera_layer_mode_tile::@11 -Renumbering block vera_layer_mode_tile::@19 to vera_layer_mode_tile::@12 -Renumbering block vera_layer_mode_tile::@21 to vera_layer_mode_tile::@13 -Renumbering block vera_layer_mode_tile::@22 to vera_layer_mode_tile::@14 -Renumbering block vera_layer_mode_tile::@23 to vera_layer_mode_tile::@15 -Renumbering block vera_layer_mode_tile::@24 to vera_layer_mode_tile::@16 -Renumbering block vera_layer_mode_tile::@25 to vera_layer_mode_tile::@17 -Renumbering block vera_layer_mode_tile::@27 to vera_layer_mode_tile::@18 -Renumbering block vera_layer_mode_tile::@28 to vera_layer_mode_tile::@19 -Renumbering block vera_layer_mode_tile::@29 to vera_layer_mode_tile::@20 -Renumbering block vera_layer_mode_tile::@31 to vera_layer_mode_tile::@21 -Renumbering block vera_layer_mode_tile::@32 to vera_layer_mode_tile::@22 -Renumbering block vera_layer_mode_tile::@33 to vera_layer_mode_tile::@23 -Renumbering block vera_layer_mode_tile::@34 to vera_layer_mode_tile::@24 -Renumbering block vera_layer_mode_text::@2 to vera_layer_mode_text::@1 -Renumbering block vera_layer_mode_bitmap::@8 to vera_layer_mode_bitmap::@1 -Renumbering block vera_layer_mode_bitmap::@10 to vera_layer_mode_bitmap::@2 -Renumbering block vera_layer_mode_bitmap::@13 to vera_layer_mode_bitmap::@3 -Renumbering block bitmap_plot::@3 to bitmap_plot::@2 -Renumbering block bitmap_plot::@4 to bitmap_plot::@3 -Renumbering block mul16u::@4 to mul16u::@3 -Renumbering block mul16u::@5 to mul16u::@4 -Renumbering block main::@4 to main::@3 -Renumbering block main::@5 to main::@4 -Renumbering block main::@6 to main::@5 -Renumbering block main::@9 to main::@6 -Renumbering block main::@10 to main::@7 -Renumbering block main::@11 to main::@8 -Renumbering block main::@13 to main::@9 -Renumbering block main::@14 to main::@10 -Renumbering block main::@16 to main::@11 -Renumbering block main::@17 to main::@12 -Renumbering block main::@18 to main::@13 -Renumbering block main::@19 to main::@14 -Renumbering block main::@23 to main::@15 -Renumbering block main::@24 to main::@16 -Renumbering block main::@25 to main::@17 -Renumbering block main::@26 to main::@18 -Renumbering block main::@27 to main::@19 -Renumbering block main::@29 to main::@20 -Renumbering block main::@30 to main::@21 -Renumbering block main::@34 to main::@22 -Renumbering block main::@35 to main::@23 -Renumbering block main::@36 to main::@24 -Renumbering block main::@37 to main::@25 -Renumbering block main::@38 to main::@26 -Renumbering block main::@39 to main::@27 -Renumbering block main::@40 to main::@28 -Renumbering block main::@41 to main::@29 -Renumbering block main::@42 to main::@30 -Renumbering block main::@43 to main::@31 -Renumbering block main::@47 to main::@32 -Renumbering block main::@48 to main::@33 -Renumbering block main::@49 to main::@34 -Renumbering block main::@53 to main::@35 -Renumbering block main::@54 to main::@36 -Renumbering block main::@59 to main::@37 -Adding NOP phi() at start of __start -Adding NOP phi() at start of __start::@1 -Adding NOP phi() at start of conio_x16_init::@3 -Adding NOP phi() at start of conio_x16_init::@4 -Adding NOP phi() at start of conio_x16_init::@5 -Adding NOP phi() at start of conio_x16_init::@6 -Adding NOP phi() at start of conio_x16_init::@7 -Adding NOP phi() at start of conio_x16_init::@8 -Adding NOP phi() at start of cputc::@4 -Adding NOP phi() at start of cputc::@6 -Adding NOP phi() at start of cputc::@1 -Adding NOP phi() at start of main -Adding NOP phi() at start of main::@12 -Adding NOP phi() at start of main::@13 -Adding NOP phi() at start of main::@14 -Adding NOP phi() at start of main::@6 -Adding NOP phi() at start of main::@15 -Adding NOP phi() at start of main::@16 -Adding NOP phi() at start of main::@17 -Adding NOP phi() at start of main::@18 -Adding NOP phi() at start of main::@19 -Adding NOP phi() at start of main::@7 -Adding NOP phi() at start of main::@20 -Adding NOP phi() at start of main::@21 -Adding NOP phi() at start of main::@8 -Adding NOP phi() at start of main::@9 -Adding NOP phi() at start of main::@32 -Adding NOP phi() at start of main::@33 -Adding NOP phi() at start of main::@34 -Adding NOP phi() at start of main::@10 -Adding NOP phi() at start of main::@5 -Adding NOP phi() at start of main::@11 -Adding NOP phi() at start of main::@37 -Adding NOP phi() at start of main::@2 -Adding NOP phi() at start of vera_layer_mode_text -Adding NOP phi() at start of vera_layer_mode_text::@1 -Adding NOP phi() at start of gotoxy::@4 -Adding NOP phi() at start of gotoxy::@3 -Adding NOP phi() at start of vera_layer_mode_bitmap -Adding NOP phi() at start of vera_layer_mode_bitmap::@2 -Adding NOP phi() at start of vera_layer_mode_bitmap::@3 -Adding NOP phi() at start of cscroll::@3 -Adding NOP phi() at start of cscroll::@4 -Adding NOP phi() at start of vera_display_get_hscale -Adding NOP phi() at start of vera_display_get_vscale -Adding NOP phi() at start of divr16u -Adding NOP phi() at start of insertup::@3 - -FINAL CONTROL FLOW GRAPH - -void __start() -__start: scope:[__start] from - [0] phi() - to:__start::__init1 -__start::__init1: scope:[__start] from __start - [1] conio_screen_width = 0 - [2] conio_screen_height = 0 - [3] conio_screen_layer = 1 - [4] conio_width = 0 - [5] conio_height = 0 - [6] conio_rowshift = 0 - [7] conio_rowskip = 0 - [8] __bitmap_address = 0 - [9] __bitmap_layer = 0 - [10] __bitmap_hscale = 0 - [11] __bitmap_vscale = 0 - [12] __bitmap_color_depth = 0 - [13] call conio_x16_init - to:__start::@1 -__start::@1: scope:[__start] from __start::__init1 - [14] phi() - [15] call main - to:__start::@return -__start::@return: scope:[__start] from __start::@1 - [16] return - to:@return - -void conio_x16_init() -conio_x16_init: scope:[conio_x16_init] from __start::__init1 - [17] conio_x16_init::line#0 = *conio_x16_init::BASIC_CURSOR_LINE - [18] call vera_layer_mode_text - to:conio_x16_init::@3 -conio_x16_init::@3: scope:[conio_x16_init] from conio_x16_init - [19] phi() - [20] call screensize - to:conio_x16_init::@4 -conio_x16_init::@4: scope:[conio_x16_init] from conio_x16_init::@3 - [21] phi() - [22] call screenlayer - to:conio_x16_init::@5 -conio_x16_init::@5: scope:[conio_x16_init] from conio_x16_init::@4 - [23] phi() - [24] call vera_layer_set_textcolor - to:conio_x16_init::@6 -conio_x16_init::@6: scope:[conio_x16_init] from conio_x16_init::@5 - [25] phi() - [26] call vera_layer_set_backcolor - to:conio_x16_init::@7 -conio_x16_init::@7: scope:[conio_x16_init] from conio_x16_init::@6 - [27] phi() - [28] call vera_layer_set_mapbase - to:conio_x16_init::@8 -conio_x16_init::@8: scope:[conio_x16_init] from conio_x16_init::@7 - [29] phi() - [30] call vera_layer_set_mapbase - to:conio_x16_init::@9 -conio_x16_init::@9: scope:[conio_x16_init] from conio_x16_init::@8 - [31] if(conio_x16_init::line#0> 7 - [184] screensize::$1 = $28 << screensize::hscale#0 - [185] *screensize::x#0 = screensize::$1 - [186] screensize::vscale#0 = *VERA_DC_VSCALE >> 7 - [187] screensize::$3 = $1e << screensize::vscale#0 - [188] *screensize::y#0 = screensize::$3 - to:screensize::@return -screensize::@return: scope:[screensize] from screensize - [189] return - to:@return - -void screenlayer(char layer) -screenlayer: scope:[screenlayer] from conio_x16_init::@4 main::@14 main::@5 - [190] conio_screen_layer = 1 - [191] vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer - [192] call vera_layer_get_mapbase_bank - [193] vera_layer_get_mapbase_bank::return#2 = vera_layer_get_mapbase_bank::return#0 - to:screenlayer::@3 -screenlayer::@3: scope:[screenlayer] from screenlayer - [194] CONIO_SCREEN_BANK#15 = vera_layer_get_mapbase_bank::return#2 - [195] vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer - [196] call vera_layer_get_mapbase_offset - [197] vera_layer_get_mapbase_offset::return#2 = vera_layer_get_mapbase_offset::return#0 - to:screenlayer::@4 -screenlayer::@4: scope:[screenlayer] from screenlayer::@3 - [198] CONIO_SCREEN_TEXT#17 = vera_layer_get_mapbase_offset::return#2 - [199] screenlayer::vera_layer_get_width1_layer#0 = conio_screen_layer - to:screenlayer::vera_layer_get_width1 -screenlayer::vera_layer_get_width1: scope:[screenlayer] from screenlayer::@4 - [200] screenlayer::vera_layer_get_width1_$2 = screenlayer::vera_layer_get_width1_layer#0 << 1 - [201] screenlayer::vera_layer_get_width1_config#0 = vera_layer_config[screenlayer::vera_layer_get_width1_$2] - [202] screenlayer::vera_layer_get_width1_$0 = *screenlayer::vera_layer_get_width1_config#0 & VERA_LAYER_WIDTH_MASK - [203] screenlayer::vera_layer_get_width1_$1 = screenlayer::vera_layer_get_width1_$0 >> 4 - [204] screenlayer::vera_layer_get_width1_$3 = screenlayer::vera_layer_get_width1_$1 << 1 - [205] screenlayer::vera_layer_get_width1_return#0 = VERA_LAYER_WIDTH[screenlayer::vera_layer_get_width1_$3] - to:screenlayer::vera_layer_get_width1_@return -screenlayer::vera_layer_get_width1_@return: scope:[screenlayer] from screenlayer::vera_layer_get_width1 - [206] screenlayer::vera_layer_get_width1_return#1 = screenlayer::vera_layer_get_width1_return#0 - to:screenlayer::@1 -screenlayer::@1: scope:[screenlayer] from screenlayer::vera_layer_get_width1_@return - [207] screenlayer::$2 = screenlayer::vera_layer_get_width1_return#1 - [208] conio_width = screenlayer::$2 - [209] vera_layer_get_rowshift::layer#0 = conio_screen_layer - [210] call vera_layer_get_rowshift - [211] vera_layer_get_rowshift::return#2 = vera_layer_get_rowshift::return#0 - to:screenlayer::@5 -screenlayer::@5: scope:[screenlayer] from screenlayer::@1 - [212] screenlayer::$3 = vera_layer_get_rowshift::return#2 - [213] conio_rowshift = screenlayer::$3 - [214] vera_layer_get_rowskip::layer#0 = conio_screen_layer - [215] call vera_layer_get_rowskip - [216] vera_layer_get_rowskip::return#2 = vera_layer_get_rowskip::return#0 - to:screenlayer::@6 -screenlayer::@6: scope:[screenlayer] from screenlayer::@5 - [217] screenlayer::$4 = vera_layer_get_rowskip::return#2 - [218] conio_rowskip = screenlayer::$4 - [219] screenlayer::vera_layer_get_height1_layer#0 = conio_screen_layer - to:screenlayer::vera_layer_get_height1 -screenlayer::vera_layer_get_height1: scope:[screenlayer] from screenlayer::@6 - [220] screenlayer::vera_layer_get_height1_$2 = screenlayer::vera_layer_get_height1_layer#0 << 1 - [221] screenlayer::vera_layer_get_height1_config#0 = vera_layer_config[screenlayer::vera_layer_get_height1_$2] - [222] screenlayer::vera_layer_get_height1_$0 = *screenlayer::vera_layer_get_height1_config#0 & VERA_LAYER_HEIGHT_MASK - [223] screenlayer::vera_layer_get_height1_$1 = screenlayer::vera_layer_get_height1_$0 >> 6 - [224] screenlayer::vera_layer_get_height1_$3 = screenlayer::vera_layer_get_height1_$1 << 1 - [225] screenlayer::vera_layer_get_height1_return#0 = VERA_LAYER_HEIGHT[screenlayer::vera_layer_get_height1_$3] - to:screenlayer::vera_layer_get_height1_@return -screenlayer::vera_layer_get_height1_@return: scope:[screenlayer] from screenlayer::vera_layer_get_height1 - [226] screenlayer::vera_layer_get_height1_return#1 = screenlayer::vera_layer_get_height1_return#0 - to:screenlayer::@2 -screenlayer::@2: scope:[screenlayer] from screenlayer::vera_layer_get_height1_@return - [227] screenlayer::$5 = screenlayer::vera_layer_get_height1_return#1 - [228] conio_height = screenlayer::$5 - to:screenlayer::@return -screenlayer::@return: scope:[screenlayer] from screenlayer::@2 - [229] return - to:@return - -char vera_layer_set_textcolor(char layer , char color) -vera_layer_set_textcolor: scope:[vera_layer_set_textcolor] from conio_x16_init::@5 main::textcolor1 main::textcolor2 main::textcolor3 main::textcolor4 main::textcolor5 - [230] vera_layer_set_textcolor::color#6 = phi( conio_x16_init::@5/WHITE, main::textcolor1/WHITE, main::textcolor2/YELLOW, main::textcolor3/WHITE, main::textcolor4/YELLOW, main::textcolor5/WHITE ) - [230] vera_layer_set_textcolor::layer#6 = phi( conio_x16_init::@5/1, main::textcolor1/vera_layer_set_textcolor::layer#1, main::textcolor2/vera_layer_set_textcolor::layer#2, main::textcolor3/vera_layer_set_textcolor::layer#3, main::textcolor4/vera_layer_set_textcolor::layer#4, main::textcolor5/vera_layer_set_textcolor::layer#5 ) - [231] vera_layer_textcolor[vera_layer_set_textcolor::layer#6] = vera_layer_set_textcolor::color#6 - to:vera_layer_set_textcolor::@return -vera_layer_set_textcolor::@return: scope:[vera_layer_set_textcolor] from vera_layer_set_textcolor - [232] return - to:@return - -char vera_layer_set_backcolor(char layer , char color) -vera_layer_set_backcolor: scope:[vera_layer_set_backcolor] from conio_x16_init::@6 main::bgcolor1 main::bgcolor2 main::bgcolor3 - [233] vera_layer_set_backcolor::color#4 = phi( conio_x16_init::@6/BLUE, main::bgcolor1/BLACK, main::bgcolor2/BLACK, main::bgcolor3/BLUE ) - [233] vera_layer_set_backcolor::layer#4 = phi( conio_x16_init::@6/1, main::bgcolor1/vera_layer_set_backcolor::layer#1, main::bgcolor2/vera_layer_set_backcolor::layer#2, main::bgcolor3/vera_layer_set_backcolor::layer#3 ) - [234] vera_layer_backcolor[vera_layer_set_backcolor::layer#4] = vera_layer_set_backcolor::color#4 - to:vera_layer_set_backcolor::@return -vera_layer_set_backcolor::@return: scope:[vera_layer_set_backcolor] from vera_layer_set_backcolor - [235] return - to:@return - -void vera_layer_set_mapbase(char layer , char mapbase) -vera_layer_set_mapbase: scope:[vera_layer_set_mapbase] from conio_x16_init::@7 conio_x16_init::@8 vera_layer_mode_tile::@23 - [236] vera_layer_set_mapbase::mapbase#3 = phi( conio_x16_init::@7/$20, conio_x16_init::@8/0, vera_layer_mode_tile::@23/vera_layer_set_mapbase::mapbase#0 ) - [236] vera_layer_set_mapbase::layer#3 = phi( conio_x16_init::@7/0, conio_x16_init::@8/1, vera_layer_mode_tile::@23/vera_layer_set_mapbase::layer#0 ) - [237] vera_layer_set_mapbase::$0 = vera_layer_set_mapbase::layer#3 << 1 - [238] vera_layer_set_mapbase::addr#0 = vera_layer_mapbase[vera_layer_set_mapbase::$0] - [239] *vera_layer_set_mapbase::addr#0 = vera_layer_set_mapbase::mapbase#3 - to:vera_layer_set_mapbase::@return -vera_layer_set_mapbase::@return: scope:[vera_layer_set_mapbase] from vera_layer_set_mapbase - [240] return - to:@return - -void gotoxy(char x , char y) -gotoxy: scope:[gotoxy] from conio_x16_init::@1 cscroll::@5 main::@15 main::@21 main::@32 main::@34 - [241] gotoxy::y#7 = phi( conio_x16_init::@1/gotoxy::y#1, cscroll::@5/gotoxy::y#2, main::@15/$19, main::@21/$1d, main::@32/$1a, main::@34/$1d ) - [242] if(gotoxy::y#7<=conio_screen_height) goto gotoxy::@4 - to:gotoxy::@1 -gotoxy::@4: scope:[gotoxy] from gotoxy - [243] phi() - to:gotoxy::@1 -gotoxy::@1: scope:[gotoxy] from gotoxy gotoxy::@4 - [244] gotoxy::y#10 = phi( gotoxy::@4/gotoxy::y#7, gotoxy/0 ) - [245] if(0> 1 - [318] vera_layer_mode_tile::mapbase#0 = byte1 vera_layer_mode_tile::mapbase_address#0 - [319] vera_layer_set_mapbase::layer#0 = vera_layer_mode_tile::layer#10 - [320] vera_layer_set_mapbase::mapbase#0 = vera_layer_mode_tile::mapbase#0 - [321] call vera_layer_set_mapbase - to:vera_layer_mode_tile::@24 -vera_layer_mode_tile::@24: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@23 - [322] vera_layer_mode_tile::$6 = word0 vera_layer_mode_tile::tilebase_address#10 - [323] vera_tilebase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$6 - [324] vera_layer_mode_tile::$7 = byte2 vera_layer_mode_tile::tilebase_address#10 - [325] vera_tilebase_bank[vera_layer_mode_tile::layer#10] = vera_layer_mode_tile::$7 - [326] vera_tilebase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::tilebase_address#10 - [327] vera_layer_mode_tile::tilebase_address#0 = vera_layer_mode_tile::tilebase_address#10 >> 1 - [328] vera_layer_mode_tile::tilebase#0 = byte1 vera_layer_mode_tile::tilebase_address#0 - [329] vera_layer_mode_tile::tilebase#1 = vera_layer_mode_tile::tilebase#0 & VERA_LAYER_TILEBASE_MASK - [330] if(vera_layer_mode_tile::tilewidth#10==8) goto vera_layer_mode_tile::@19 - to:vera_layer_mode_tile::@17 -vera_layer_mode_tile::@17: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@24 - [331] if(vera_layer_mode_tile::tilewidth#10!=$10) goto vera_layer_mode_tile::@19 - to:vera_layer_mode_tile::@18 -vera_layer_mode_tile::@18: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@17 - [332] vera_layer_mode_tile::tilebase#3 = vera_layer_mode_tile::tilebase#1 | VERA_TILEBASE_WIDTH_16 - to:vera_layer_mode_tile::@19 -vera_layer_mode_tile::@19: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@17 vera_layer_mode_tile::@18 vera_layer_mode_tile::@24 - [333] vera_layer_mode_tile::tilebase#12 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::tilebase#1, vera_layer_mode_tile::@24/vera_layer_mode_tile::tilebase#1, vera_layer_mode_tile::@18/vera_layer_mode_tile::tilebase#3 ) - [334] if(vera_layer_mode_tile::tileheight#10==8) goto vera_layer_mode_tile::@22 - to:vera_layer_mode_tile::@20 -vera_layer_mode_tile::@20: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@19 - [335] if(vera_layer_mode_tile::tileheight#10!=$10) goto vera_layer_mode_tile::@22 - to:vera_layer_mode_tile::@21 -vera_layer_mode_tile::@21: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@20 - [336] vera_layer_mode_tile::tilebase#5 = vera_layer_mode_tile::tilebase#12 | VERA_TILEBASE_HEIGHT_16 - to:vera_layer_mode_tile::@22 -vera_layer_mode_tile::@22: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@19 vera_layer_mode_tile::@20 vera_layer_mode_tile::@21 - [337] vera_layer_mode_tile::tilebase#10 = phi( vera_layer_mode_tile::@20/vera_layer_mode_tile::tilebase#12, vera_layer_mode_tile::@19/vera_layer_mode_tile::tilebase#12, vera_layer_mode_tile::@21/vera_layer_mode_tile::tilebase#5 ) - [338] vera_layer_set_tilebase::layer#0 = vera_layer_mode_tile::layer#10 - [339] vera_layer_set_tilebase::tilebase#0 = vera_layer_mode_tile::tilebase#10 - [340] call vera_layer_set_tilebase - to:vera_layer_mode_tile::@return -vera_layer_mode_tile::@return: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@22 - [341] return - to:@return -vera_layer_mode_tile::@14: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@11 - [342] vera_layer_mode_tile::config#11 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_128 - to:vera_layer_mode_tile::@16 -vera_layer_mode_tile::@13: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@10 - [343] vera_layer_mode_tile::config#10 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_64 - to:vera_layer_mode_tile::@16 -vera_layer_mode_tile::@7: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@3 - [344] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 8 - [345] vera_layer_mode_tile::$13 = vera_layer_mode_tile::layer#10 << 1 - [346] vera_layer_rowskip[vera_layer_mode_tile::$13] = $100 - to:vera_layer_mode_tile::@9 -vera_layer_mode_tile::@6: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@2 - [347] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 7 - [348] vera_layer_mode_tile::$12 = vera_layer_mode_tile::layer#10 << 1 - [349] vera_layer_rowskip[vera_layer_mode_tile::$12] = $80 - to:vera_layer_mode_tile::@9 -vera_layer_mode_tile::@5: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@1 - [350] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 6 - [351] vera_layer_mode_tile::$11 = vera_layer_mode_tile::layer#10 << 1 - [352] vera_layer_rowskip[vera_layer_mode_tile::$11] = $40 - to:vera_layer_mode_tile::@9 - -void vera_layer_mode_bitmap(char layer , unsigned long bitmap_address , unsigned int mapwidth , unsigned int color_depth) -vera_layer_mode_bitmap: scope:[vera_layer_mode_bitmap] from main::@13 - [353] phi() - to:vera_layer_mode_bitmap::@1 -vera_layer_mode_bitmap::@1: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap - [354] *vera_tilebase_offset = 0 - [355] *vera_tilebase_bank = 0 - [356] *vera_tilebase_address = vera_layer_mode_bitmap::bitmap_address#1 - to:vera_layer_mode_bitmap::vera_display_set_scale_double1 -vera_layer_mode_bitmap::vera_display_set_scale_double1: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap::@1 - [357] *VERA_DC_HSCALE = $40 - [358] *VERA_DC_VSCALE = $40 - to:vera_layer_mode_bitmap::@2 -vera_layer_mode_bitmap::@2: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap::vera_display_set_scale_double1 - [359] phi() - [360] call vera_layer_set_config - to:vera_layer_mode_bitmap::@3 -vera_layer_mode_bitmap::@3: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap::@2 - [361] phi() - [362] call vera_layer_set_tilebase - to:vera_layer_mode_bitmap::@return -vera_layer_mode_bitmap::@return: scope:[vera_layer_mode_bitmap] from vera_layer_mode_bitmap::@3 - [363] return - to:@return - -void clrscr() -clrscr: scope:[clrscr] from main::@11 main::@6 main::@9 - [364] clrscr::line_text#0 = (char *)CONIO_SCREEN_TEXT#17 - [365] vera_layer_get_backcolor::layer#0 = conio_screen_layer - [366] call vera_layer_get_backcolor - [367] vera_layer_get_backcolor::return#0 = vera_layer_get_backcolor::return#1 - to:clrscr::@7 -clrscr::@7: scope:[clrscr] from clrscr - [368] clrscr::$0 = vera_layer_get_backcolor::return#0 - [369] clrscr::$1 = clrscr::$0 << 4 - [370] vera_layer_get_textcolor::layer#0 = conio_screen_layer - [371] call vera_layer_get_textcolor - [372] vera_layer_get_textcolor::return#0 = vera_layer_get_textcolor::return#1 - to:clrscr::@8 -clrscr::@8: scope:[clrscr] from clrscr::@7 - [373] clrscr::$2 = vera_layer_get_textcolor::return#0 - [374] clrscr::color#0 = clrscr::$1 | clrscr::$2 - to:clrscr::@1 -clrscr::@1: scope:[clrscr] from clrscr::@6 clrscr::@8 - [375] clrscr::line_text#2 = phi( clrscr::@6/clrscr::line_text#1, clrscr::@8/clrscr::line_text#0 ) - [375] clrscr::l#2 = phi( clrscr::@6/clrscr::l#1, clrscr::@8/0 ) - [376] if(clrscr::l#2> 3 - [428] bitmap_init::$23 = bitmap_init::x#10 << 1 - [429] bitmap_init::$29 = __bitmap_plot_x + bitmap_init::$23 - [430] *bitmap_init::$29 = bitmap_init::$7 - [431] bitmap_init::$30 = __bitmap_plot_bitmask + bitmap_init::x#10 - [432] *bitmap_init::$30 = bitmap_init::bitmask#10 - [433] bitmap_init::$31 = __bitmap_plot_bitshift + bitmap_init::x#10 - [434] *bitmap_init::$31 = (char)bitmap_init::bitshift#10 - [435] bitmap_init::bitshift#1 = bitmap_init::bitshift#10 - 1 - [436] bitmap_init::bitmask#1 = bitmap_init::bitmask#10 >> 1 - to:bitmap_init::@2 -bitmap_init::@2: scope:[bitmap_init] from bitmap_init::@1 bitmap_init::@8 - [437] bitmap_init::bitshift#11 = phi( bitmap_init::@1/bitmap_init::bitshift#10, bitmap_init::@8/bitmap_init::bitshift#1 ) - [437] bitmap_init::bitmask#11 = phi( bitmap_init::@1/bitmap_init::bitmask#10, bitmap_init::@8/bitmap_init::bitmask#1 ) - [438] if(__bitmap_color_depth!=1) goto bitmap_init::@3 - to:bitmap_init::@9 -bitmap_init::@9: scope:[bitmap_init] from bitmap_init::@2 - [439] bitmap_init::$10 = bitmap_init::x#10 >> 2 - [440] bitmap_init::$24 = bitmap_init::x#10 << 1 - [441] bitmap_init::$32 = __bitmap_plot_x + bitmap_init::$24 - [442] *bitmap_init::$32 = bitmap_init::$10 - [443] bitmap_init::$33 = __bitmap_plot_bitmask + bitmap_init::x#10 - [444] *bitmap_init::$33 = bitmap_init::bitmask#11 - [445] bitmap_init::$34 = __bitmap_plot_bitshift + bitmap_init::x#10 - [446] *bitmap_init::$34 = (char)bitmap_init::bitshift#11 - [447] bitmap_init::bitshift#2 = bitmap_init::bitshift#11 - 2 - [448] bitmap_init::bitmask#2 = bitmap_init::bitmask#11 >> 2 - to:bitmap_init::@3 -bitmap_init::@3: scope:[bitmap_init] from bitmap_init::@2 bitmap_init::@9 - [449] bitmap_init::bitshift#12 = phi( bitmap_init::@2/bitmap_init::bitshift#11, bitmap_init::@9/bitmap_init::bitshift#2 ) - [449] bitmap_init::bitmask#12 = phi( bitmap_init::@2/bitmap_init::bitmask#11, bitmap_init::@9/bitmap_init::bitmask#2 ) - [450] if(__bitmap_color_depth!=2) goto bitmap_init::@4 - to:bitmap_init::@10 -bitmap_init::@10: scope:[bitmap_init] from bitmap_init::@3 - [451] bitmap_init::$13 = bitmap_init::x#10 >> 1 - [452] bitmap_init::$25 = bitmap_init::x#10 << 1 - [453] bitmap_init::$35 = __bitmap_plot_x + bitmap_init::$25 - [454] *bitmap_init::$35 = bitmap_init::$13 - [455] bitmap_init::$36 = __bitmap_plot_bitmask + bitmap_init::x#10 - [456] *bitmap_init::$36 = bitmap_init::bitmask#12 - [457] bitmap_init::$37 = __bitmap_plot_bitshift + bitmap_init::x#10 - [458] *bitmap_init::$37 = (char)bitmap_init::bitshift#12 - [459] bitmap_init::bitshift#3 = bitmap_init::bitshift#12 - 4 - [460] bitmap_init::bitmask#3 = bitmap_init::bitmask#12 >> 4 - to:bitmap_init::@4 -bitmap_init::@4: scope:[bitmap_init] from bitmap_init::@10 bitmap_init::@3 - [461] bitmap_init::bitmask#13 = phi( bitmap_init::@10/bitmap_init::bitmask#3, bitmap_init::@3/bitmap_init::bitmask#12 ) - [461] bitmap_init::bitshift#13 = phi( bitmap_init::@10/bitmap_init::bitshift#3, bitmap_init::@3/bitmap_init::bitshift#12 ) - [462] if(__bitmap_color_depth!=3) goto bitmap_init::@5 - to:bitmap_init::@11 -bitmap_init::@11: scope:[bitmap_init] from bitmap_init::@4 - [463] bitmap_init::$26 = bitmap_init::x#10 << 1 - [464] bitmap_init::$38 = __bitmap_plot_x + bitmap_init::$26 - [465] *bitmap_init::$38 = bitmap_init::x#10 - [466] bitmap_init::$39 = __bitmap_plot_bitmask + bitmap_init::x#10 - [467] *bitmap_init::$39 = bitmap_init::bitmask#13 - [468] bitmap_init::$40 = __bitmap_plot_bitshift + bitmap_init::x#10 - [469] *bitmap_init::$40 = (char)bitmap_init::bitshift#13 - to:bitmap_init::@5 -bitmap_init::@5: scope:[bitmap_init] from bitmap_init::@11 bitmap_init::@4 - [470] if(bitmap_init::bitshift#13>=0) goto bitmap_init::@6 - to:bitmap_init::@12 -bitmap_init::@12: scope:[bitmap_init] from bitmap_init::@5 - [471] bitmap_init::bitshift#4 = bitshifts[__bitmap_color_depth] - to:bitmap_init::@6 -bitmap_init::@6: scope:[bitmap_init] from bitmap_init::@12 bitmap_init::@5 - [472] bitmap_init::bitshift#14 = phi( bitmap_init::@12/bitmap_init::bitshift#4, bitmap_init::@5/bitmap_init::bitshift#13 ) - [473] if(bitmap_init::bitmask#13!=0) goto bitmap_init::@7 - to:bitmap_init::@13 -bitmap_init::@13: scope:[bitmap_init] from bitmap_init::@6 - [474] bitmap_init::bitmask#4 = bitmasks[__bitmap_color_depth] - to:bitmap_init::@7 -bitmap_init::@7: scope:[bitmap_init] from bitmap_init::@13 bitmap_init::@6 - [475] bitmap_init::bitmask#16 = phi( bitmap_init::@13/bitmap_init::bitmask#4, bitmap_init::@6/bitmap_init::bitmask#13 ) - [476] bitmap_init::x#1 = ++ bitmap_init::x#10 - [477] if(bitmap_init::x#1!=$280) goto bitmap_init::@1 - to:bitmap_init::@14 -bitmap_init::@14: scope:[bitmap_init] from bitmap_init::@7 - [478] bitmap_init::$3 = __bitmap_color_depth << 2 - [479] bitmap_init::$4 = bitmap_init::$3 + __bitmap_hscale - [480] bitmap_init::$27 = bitmap_init::$4 << 1 - [481] bitmap_init::hdelta#0 = hdeltas[bitmap_init::$27] - [482] bitmap_init::yoffs#0 = __bitmap_address - to:bitmap_init::@15 -bitmap_init::@15: scope:[bitmap_init] from bitmap_init::@14 bitmap_init::@15 - [483] bitmap_init::yoffs#2 = phi( bitmap_init::@14/bitmap_init::yoffs#0, bitmap_init::@15/bitmap_init::yoffs#1 ) - [483] bitmap_init::y#2 = phi( bitmap_init::@14/0, bitmap_init::@15/bitmap_init::y#1 ) - [484] bitmap_init::$28 = bitmap_init::y#2 << 2 - [485] bitmap_init::$41 = __bitmap_plot_y + bitmap_init::$28 - [486] *bitmap_init::$41 = bitmap_init::yoffs#2 - [487] bitmap_init::yoffs#1 = bitmap_init::yoffs#2 + bitmap_init::hdelta#0 - [488] bitmap_init::y#1 = ++ bitmap_init::y#2 - [489] if(bitmap_init::y#1!=$1e0) goto bitmap_init::@15 - to:bitmap_init::@return -bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@15 - [490] return - to:@return - -void bitmap_clear() -bitmap_clear: scope:[bitmap_clear] from main::@20 - [491] bitmap_clear::$6 = __bitmap_vscale << 1 - [492] bitmap_clear::vdelta#0 = vdeltas[bitmap_clear::$6] - [493] bitmap_clear::$0 = __bitmap_color_depth << 2 - [494] bitmap_clear::$1 = bitmap_clear::$0 + __bitmap_hscale - [495] bitmap_clear::$7 = bitmap_clear::$1 << 1 - [496] bitmap_clear::hdelta#0 = hdeltas[bitmap_clear::$7] - [497] mul16u::a#0 = bitmap_clear::hdelta#0 - [498] mul16u::b#0 = bitmap_clear::vdelta#0 - [499] call mul16u - [500] mul16u::return#0 = mul16u::res#2 - to:bitmap_clear::@1 -bitmap_clear::@1: scope:[bitmap_clear] from bitmap_clear - [501] bitmap_clear::count#0 = mul16u::return#0 - [502] bitmap_clear::vbank#0 = byte2 __bitmap_address - [503] bitmap_clear::vdest#0 = word0 __bitmap_address - [504] memset_vram::vbank#0 = bitmap_clear::vbank#0 - [505] memset_vram::vdest#0 = (void *)bitmap_clear::vdest#0 - [506] memset_vram::num#0 = bitmap_clear::count#0 - [507] call memset_vram - to:bitmap_clear::@return -bitmap_clear::@return: scope:[bitmap_clear] from bitmap_clear::@1 - [508] return - to:@return - -char kbhit() -kbhit: scope:[kbhit] from main::@1 main::@3 - [509] kbhit::ch = 0 - kickasm( uses kbhit::chptr uses kbhit::IN_DEV uses kbhit::GETIN) {{ jsr _kbhit - bne L3 - - jmp continue1 - - .var via1 = $9f60 //VIA#1 - .var d1pra = via1+1 - - _kbhit: - ldy d1pra // The count of keys pressed is stored in RAM bank 0. - stz d1pra // Set d1pra to zero to access RAM bank 0. - lda $A00A // Get number of characters from this address in the ROM of the CX16 (ROM 38). - sty d1pra // Set d1pra to previous value. - rts - - L3: - ldy IN_DEV // Save current input device - stz IN_DEV // Keyboard - phy - jsr GETIN // Read char, and return in .A - ply - sta chptr // Store the character read in ch - sty IN_DEV // Restore input device - ldx #>$0000 - rts - - continue1: - nop - }} - [511] kbhit::return#0 = kbhit::ch - to:kbhit::@return -kbhit::@return: scope:[kbhit] from kbhit - [512] kbhit::return#1 = kbhit::return#0 - [513] return - to:@return - -void bitmap_line(unsigned int x0 , unsigned int x1 , unsigned int y0 , unsigned int y1 , char c) -bitmap_line: scope:[bitmap_line] from main::@31 main::@4 - [514] bitmap_line::c#10 = phi( main::@31/bitmap_line::c#0, main::@4/bitmap_line::c#1 ) - [514] bitmap_line::y1#10 = phi( main::@31/bitmap_line::y1#0, main::@4/$c7 ) - [514] bitmap_line::y0#10 = phi( main::@31/bitmap_line::y0#0, main::@4/0 ) - [514] bitmap_line::x1#10 = phi( main::@31/bitmap_line::x1#0, main::@4/bitmap_line::x1#1 ) - [514] bitmap_line::x0#10 = phi( main::@31/bitmap_line::x0#0, main::@4/bitmap_line::x0#1 ) - [515] if(bitmap_line::x0#10> 9 - [589] rand_state#1 = rand_state#0 ^ rand::$1 - [590] rand::$2 = rand_state#1 << 8 - [591] rand_state#14 = rand_state#1 ^ rand::$2 - [592] rand::return#0 = rand_state#14 - to:rand::@return -rand::@return: scope:[rand] from rand - [593] return - to:@return - -unsigned int modr16u(unsigned int dividend , unsigned int divisor , unsigned int rem) -modr16u: scope:[modr16u] from main::@23 main::@25 main::@27 main::@29 - [594] modr16u::divisor#4 = phi( main::@23/$140, main::@25/$140, main::@27/$c8, main::@29/$c8 ) - [594] modr16u::dividend#4 = phi( main::@23/modr16u::dividend#0, main::@25/modr16u::dividend#1, main::@27/modr16u::dividend#2, main::@29/modr16u::dividend#3 ) - [595] divr16u::dividend#1 = modr16u::dividend#4 - [596] divr16u::divisor#0 = modr16u::divisor#4 - [597] call divr16u - to:modr16u::@1 -modr16u::@1: scope:[modr16u] from modr16u - [598] modr16u::return#0 = rem16u#0 - to:modr16u::@return -modr16u::@return: scope:[modr16u] from modr16u::@1 - [599] return - to:@return - -void vera_layer_set_text_color_mode(char layer , char color_mode) -vera_layer_set_text_color_mode: scope:[vera_layer_set_text_color_mode] from vera_layer_mode_text::@1 - [600] vera_layer_set_text_color_mode::addr#0 = *(vera_layer_config+vera_layer_mode_text::layer#0*SIZEOF_POINTER) - [601] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 & ~VERA_LAYER_CONFIG_256C - [602] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 - to:vera_layer_set_text_color_mode::@return -vera_layer_set_text_color_mode::@return: scope:[vera_layer_set_text_color_mode] from vera_layer_set_text_color_mode - [603] return - to:@return - -char vera_layer_get_mapbase_bank(char layer) -vera_layer_get_mapbase_bank: scope:[vera_layer_get_mapbase_bank] from screenlayer - [604] vera_layer_get_mapbase_bank::return#0 = vera_mapbase_bank[vera_layer_get_mapbase_bank::layer#0] - to:vera_layer_get_mapbase_bank::@return -vera_layer_get_mapbase_bank::@return: scope:[vera_layer_get_mapbase_bank] from vera_layer_get_mapbase_bank - [605] return - to:@return - -unsigned int vera_layer_get_mapbase_offset(char layer) -vera_layer_get_mapbase_offset: scope:[vera_layer_get_mapbase_offset] from screenlayer::@3 - [606] vera_layer_get_mapbase_offset::$0 = vera_layer_get_mapbase_offset::layer#0 << 1 - [607] vera_layer_get_mapbase_offset::return#0 = vera_mapbase_offset[vera_layer_get_mapbase_offset::$0] - to:vera_layer_get_mapbase_offset::@return -vera_layer_get_mapbase_offset::@return: scope:[vera_layer_get_mapbase_offset] from vera_layer_get_mapbase_offset - [608] return - to:@return - -char vera_layer_get_rowshift(char layer) -vera_layer_get_rowshift: scope:[vera_layer_get_rowshift] from screenlayer::@1 - [609] vera_layer_get_rowshift::return#0 = vera_layer_rowshift[vera_layer_get_rowshift::layer#0] - to:vera_layer_get_rowshift::@return -vera_layer_get_rowshift::@return: scope:[vera_layer_get_rowshift] from vera_layer_get_rowshift - [610] return - to:@return - -unsigned int vera_layer_get_rowskip(char layer) -vera_layer_get_rowskip: scope:[vera_layer_get_rowskip] from screenlayer::@5 - [611] vera_layer_get_rowskip::$0 = vera_layer_get_rowskip::layer#0 << 1 - [612] vera_layer_get_rowskip::return#0 = vera_layer_rowskip[vera_layer_get_rowskip::$0] - to:vera_layer_get_rowskip::@return -vera_layer_get_rowskip::@return: scope:[vera_layer_get_rowskip] from vera_layer_get_rowskip - [613] return - to:@return - -void cscroll() -cscroll: scope:[cscroll] from cputln - [614] if(conio_cursor_y[conio_screen_layer]> 1 - [660] mul16u::mb#1 = mul16u::mb#2 << 1 - to:mul16u::@1 - -void memset_vram(char vbank , void *vdest , char data , unsigned long num) -memset_vram: scope:[memset_vram] from bitmap_clear::@1 - [661] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL - [662] memset_vram::$0 = byte0 memset_vram::vdest#0 - [663] *VERA_ADDRX_L = memset_vram::$0 - [664] memset_vram::$1 = byte1 memset_vram::vdest#0 - [665] *VERA_ADDRX_M = memset_vram::$1 - [666] memset_vram::$2 = VERA_INC_1 | memset_vram::vbank#0 - [667] *VERA_ADDRX_H = memset_vram::$2 - to:memset_vram::@1 -memset_vram::@1: scope:[memset_vram] from memset_vram memset_vram::@2 - [668] memset_vram::i#2 = phi( memset_vram/0, memset_vram::@2/memset_vram::i#1 ) - [669] if(memset_vram::i#2> 1 - to:bitmap_line_ydxi::@1 -bitmap_line_ydxi::@1: scope:[bitmap_line_ydxi] from bitmap_line_ydxi bitmap_line_ydxi::@2 - [675] bitmap_line_ydxi::e#3 = phi( bitmap_line_ydxi/bitmap_line_ydxi::e#0, bitmap_line_ydxi::@2/bitmap_line_ydxi::e#6 ) - [675] bitmap_line_ydxi::y#3 = phi( bitmap_line_ydxi/bitmap_line_ydxi::y#6, bitmap_line_ydxi::@2/bitmap_line_ydxi::y#2 ) - [675] bitmap_line_ydxi::x#3 = phi( bitmap_line_ydxi/bitmap_line_ydxi::x#5, bitmap_line_ydxi::@2/bitmap_line_ydxi::x#6 ) - [676] bitmap_plot::x#2 = bitmap_line_ydxi::x#3 - [677] bitmap_plot::y#2 = bitmap_line_ydxi::y#3 - [678] bitmap_plot::c#3 = bitmap_line_ydxi::c#3 - [679] call bitmap_plot - to:bitmap_line_ydxi::@4 -bitmap_line_ydxi::@4: scope:[bitmap_line_ydxi] from bitmap_line_ydxi::@1 - [680] bitmap_line_ydxi::y#2 = ++ bitmap_line_ydxi::y#3 - [681] bitmap_line_ydxi::e#1 = bitmap_line_ydxi::e#3 + bitmap_line_ydxi::xd#2 - [682] if(bitmap_line_ydxi::yd#5>=bitmap_line_ydxi::e#1) goto bitmap_line_ydxi::@2 - to:bitmap_line_ydxi::@3 -bitmap_line_ydxi::@3: scope:[bitmap_line_ydxi] from bitmap_line_ydxi::@4 - [683] bitmap_line_ydxi::x#2 = ++ bitmap_line_ydxi::x#3 - [684] bitmap_line_ydxi::e#2 = bitmap_line_ydxi::e#1 - bitmap_line_ydxi::yd#5 - to:bitmap_line_ydxi::@2 -bitmap_line_ydxi::@2: scope:[bitmap_line_ydxi] from bitmap_line_ydxi::@3 bitmap_line_ydxi::@4 - [685] bitmap_line_ydxi::e#6 = phi( bitmap_line_ydxi::@3/bitmap_line_ydxi::e#2, bitmap_line_ydxi::@4/bitmap_line_ydxi::e#1 ) - [685] bitmap_line_ydxi::x#6 = phi( bitmap_line_ydxi::@3/bitmap_line_ydxi::x#2, bitmap_line_ydxi::@4/bitmap_line_ydxi::x#3 ) - [686] bitmap_line_ydxi::$6 = bitmap_line_ydxi::y1#6 + 1 - [687] if(bitmap_line_ydxi::y#2!=bitmap_line_ydxi::$6) goto bitmap_line_ydxi::@1 - to:bitmap_line_ydxi::@return -bitmap_line_ydxi::@return: scope:[bitmap_line_ydxi] from bitmap_line_ydxi::@2 - [688] return - to:@return - -void bitmap_line_xdyi(unsigned int x , unsigned int y , unsigned int x1 , unsigned int xd , unsigned int yd , char c) -bitmap_line_xdyi: scope:[bitmap_line_xdyi] from bitmap_line::@13 bitmap_line::@8 - [689] bitmap_line_xdyi::x1#6 = phi( bitmap_line::@13/bitmap_line_xdyi::x1#1, bitmap_line::@8/bitmap_line_xdyi::x1#0 ) - [689] bitmap_line_xdyi::xd#5 = phi( bitmap_line::@13/bitmap_line_xdyi::xd#1, bitmap_line::@8/bitmap_line_xdyi::xd#0 ) - [689] bitmap_line_xdyi::c#3 = phi( bitmap_line::@13/bitmap_line_xdyi::c#1, bitmap_line::@8/bitmap_line_xdyi::c#0 ) - [689] bitmap_line_xdyi::y#5 = phi( bitmap_line::@13/bitmap_line_xdyi::y#1, bitmap_line::@8/bitmap_line_xdyi::y#0 ) - [689] bitmap_line_xdyi::x#6 = phi( bitmap_line::@13/bitmap_line_xdyi::x#1, bitmap_line::@8/bitmap_line_xdyi::x#0 ) - [689] bitmap_line_xdyi::yd#2 = phi( bitmap_line::@13/bitmap_line_xdyi::yd#1, bitmap_line::@8/bitmap_line_xdyi::yd#0 ) - [690] bitmap_line_xdyi::e#0 = bitmap_line_xdyi::yd#2 >> 1 - to:bitmap_line_xdyi::@1 -bitmap_line_xdyi::@1: scope:[bitmap_line_xdyi] from bitmap_line_xdyi bitmap_line_xdyi::@2 - [691] bitmap_line_xdyi::e#3 = phi( bitmap_line_xdyi/bitmap_line_xdyi::e#0, bitmap_line_xdyi::@2/bitmap_line_xdyi::e#6 ) - [691] bitmap_line_xdyi::y#3 = phi( bitmap_line_xdyi/bitmap_line_xdyi::y#5, bitmap_line_xdyi::@2/bitmap_line_xdyi::y#6 ) - [691] bitmap_line_xdyi::x#3 = phi( bitmap_line_xdyi/bitmap_line_xdyi::x#6, bitmap_line_xdyi::@2/bitmap_line_xdyi::x#2 ) - [692] bitmap_plot::x#0 = bitmap_line_xdyi::x#3 - [693] bitmap_plot::y#0 = bitmap_line_xdyi::y#3 - [694] bitmap_plot::c#1 = bitmap_line_xdyi::c#3 - [695] call bitmap_plot - to:bitmap_line_xdyi::@4 -bitmap_line_xdyi::@4: scope:[bitmap_line_xdyi] from bitmap_line_xdyi::@1 - [696] bitmap_line_xdyi::x#2 = ++ bitmap_line_xdyi::x#3 - [697] bitmap_line_xdyi::e#1 = bitmap_line_xdyi::e#3 + bitmap_line_xdyi::yd#2 - [698] if(bitmap_line_xdyi::xd#5>=bitmap_line_xdyi::e#1) goto bitmap_line_xdyi::@2 - to:bitmap_line_xdyi::@3 -bitmap_line_xdyi::@3: scope:[bitmap_line_xdyi] from bitmap_line_xdyi::@4 - [699] bitmap_line_xdyi::y#2 = ++ bitmap_line_xdyi::y#3 - [700] bitmap_line_xdyi::e#2 = bitmap_line_xdyi::e#1 - bitmap_line_xdyi::xd#5 - to:bitmap_line_xdyi::@2 -bitmap_line_xdyi::@2: scope:[bitmap_line_xdyi] from bitmap_line_xdyi::@3 bitmap_line_xdyi::@4 - [701] bitmap_line_xdyi::e#6 = phi( bitmap_line_xdyi::@3/bitmap_line_xdyi::e#2, bitmap_line_xdyi::@4/bitmap_line_xdyi::e#1 ) - [701] bitmap_line_xdyi::y#6 = phi( bitmap_line_xdyi::@3/bitmap_line_xdyi::y#2, bitmap_line_xdyi::@4/bitmap_line_xdyi::y#3 ) - [702] bitmap_line_xdyi::$6 = bitmap_line_xdyi::x1#6 + 1 - [703] if(bitmap_line_xdyi::x#2!=bitmap_line_xdyi::$6) goto bitmap_line_xdyi::@1 - to:bitmap_line_xdyi::@return -bitmap_line_xdyi::@return: scope:[bitmap_line_xdyi] from bitmap_line_xdyi::@2 - [704] return - to:@return - -void bitmap_line_ydxd(unsigned int y , unsigned int x , unsigned int y1 , unsigned int yd , unsigned int xd , char c) -bitmap_line_ydxd: scope:[bitmap_line_ydxd] from bitmap_line::@10 bitmap_line::@6 - [705] bitmap_line_ydxd::y1#6 = phi( bitmap_line::@10/bitmap_line_ydxd::y1#0, bitmap_line::@6/bitmap_line_ydxd::y1#1 ) - [705] bitmap_line_ydxd::yd#5 = phi( bitmap_line::@10/bitmap_line_ydxd::yd#0, bitmap_line::@6/bitmap_line_ydxd::yd#1 ) - [705] bitmap_line_ydxd::c#3 = phi( bitmap_line::@10/bitmap_line_ydxd::c#0, bitmap_line::@6/bitmap_line_ydxd::c#1 ) - [705] bitmap_line_ydxd::y#7 = phi( bitmap_line::@10/bitmap_line_ydxd::y#0, bitmap_line::@6/bitmap_line_ydxd::y#1 ) - [705] bitmap_line_ydxd::x#5 = phi( bitmap_line::@10/bitmap_line_ydxd::x#0, bitmap_line::@6/bitmap_line_ydxd::x#1 ) - [705] bitmap_line_ydxd::xd#2 = phi( bitmap_line::@10/bitmap_line_ydxd::xd#0, bitmap_line::@6/bitmap_line_ydxd::xd#1 ) - [706] bitmap_line_ydxd::e#0 = bitmap_line_ydxd::xd#2 >> 1 - to:bitmap_line_ydxd::@1 -bitmap_line_ydxd::@1: scope:[bitmap_line_ydxd] from bitmap_line_ydxd bitmap_line_ydxd::@2 - [707] bitmap_line_ydxd::e#3 = phi( bitmap_line_ydxd/bitmap_line_ydxd::e#0, bitmap_line_ydxd::@2/bitmap_line_ydxd::e#6 ) - [707] bitmap_line_ydxd::y#2 = phi( bitmap_line_ydxd/bitmap_line_ydxd::y#7, bitmap_line_ydxd::@2/bitmap_line_ydxd::y#3 ) - [707] bitmap_line_ydxd::x#3 = phi( bitmap_line_ydxd/bitmap_line_ydxd::x#5, bitmap_line_ydxd::@2/bitmap_line_ydxd::x#6 ) - [708] bitmap_plot::x#3 = bitmap_line_ydxd::x#3 - [709] bitmap_plot::y#3 = bitmap_line_ydxd::y#2 - [710] bitmap_plot::c#4 = bitmap_line_ydxd::c#3 - [711] call bitmap_plot - to:bitmap_line_ydxd::@4 -bitmap_line_ydxd::@4: scope:[bitmap_line_ydxd] from bitmap_line_ydxd::@1 - [712] bitmap_line_ydxd::y#3 = ++ bitmap_line_ydxd::y#2 - [713] bitmap_line_ydxd::e#1 = bitmap_line_ydxd::e#3 + bitmap_line_ydxd::xd#2 - [714] if(bitmap_line_ydxd::yd#5>=bitmap_line_ydxd::e#1) goto bitmap_line_ydxd::@2 - to:bitmap_line_ydxd::@3 -bitmap_line_ydxd::@3: scope:[bitmap_line_ydxd] from bitmap_line_ydxd::@4 - [715] bitmap_line_ydxd::x#2 = -- bitmap_line_ydxd::x#3 - [716] bitmap_line_ydxd::e#2 = bitmap_line_ydxd::e#1 - bitmap_line_ydxd::yd#5 - to:bitmap_line_ydxd::@2 -bitmap_line_ydxd::@2: scope:[bitmap_line_ydxd] from bitmap_line_ydxd::@3 bitmap_line_ydxd::@4 - [717] bitmap_line_ydxd::e#6 = phi( bitmap_line_ydxd::@3/bitmap_line_ydxd::e#2, bitmap_line_ydxd::@4/bitmap_line_ydxd::e#1 ) - [717] bitmap_line_ydxd::x#6 = phi( bitmap_line_ydxd::@3/bitmap_line_ydxd::x#2, bitmap_line_ydxd::@4/bitmap_line_ydxd::x#3 ) - [718] bitmap_line_ydxd::$6 = bitmap_line_ydxd::y1#6 + 1 - [719] if(bitmap_line_ydxd::y#3!=bitmap_line_ydxd::$6) goto bitmap_line_ydxd::@1 - to:bitmap_line_ydxd::@return -bitmap_line_ydxd::@return: scope:[bitmap_line_ydxd] from bitmap_line_ydxd::@2 - [720] return - to:@return - -void bitmap_line_xdyd(unsigned int x , unsigned int y , unsigned int x1 , unsigned int xd , unsigned int yd , char c) -bitmap_line_xdyd: scope:[bitmap_line_xdyd] from bitmap_line::@12 bitmap_line::@9 - [721] bitmap_line_xdyd::x1#6 = phi( bitmap_line::@12/bitmap_line_xdyd::x1#1, bitmap_line::@9/bitmap_line_xdyd::x1#0 ) - [721] bitmap_line_xdyd::xd#5 = phi( bitmap_line::@12/bitmap_line_xdyd::xd#1, bitmap_line::@9/bitmap_line_xdyd::xd#0 ) - [721] bitmap_line_xdyd::c#3 = phi( bitmap_line::@12/bitmap_line_xdyd::c#1, bitmap_line::@9/bitmap_line_xdyd::c#0 ) - [721] bitmap_line_xdyd::y#5 = phi( bitmap_line::@12/bitmap_line_xdyd::y#1, bitmap_line::@9/bitmap_line_xdyd::y#0 ) - [721] bitmap_line_xdyd::x#6 = phi( bitmap_line::@12/bitmap_line_xdyd::x#1, bitmap_line::@9/bitmap_line_xdyd::x#0 ) - [721] bitmap_line_xdyd::yd#2 = phi( bitmap_line::@12/bitmap_line_xdyd::yd#1, bitmap_line::@9/bitmap_line_xdyd::yd#0 ) - [722] bitmap_line_xdyd::e#0 = bitmap_line_xdyd::yd#2 >> 1 - to:bitmap_line_xdyd::@1 -bitmap_line_xdyd::@1: scope:[bitmap_line_xdyd] from bitmap_line_xdyd bitmap_line_xdyd::@2 - [723] bitmap_line_xdyd::e#3 = phi( bitmap_line_xdyd/bitmap_line_xdyd::e#0, bitmap_line_xdyd::@2/bitmap_line_xdyd::e#6 ) - [723] bitmap_line_xdyd::y#3 = phi( bitmap_line_xdyd/bitmap_line_xdyd::y#5, bitmap_line_xdyd::@2/bitmap_line_xdyd::y#6 ) - [723] bitmap_line_xdyd::x#3 = phi( bitmap_line_xdyd/bitmap_line_xdyd::x#6, bitmap_line_xdyd::@2/bitmap_line_xdyd::x#2 ) - [724] bitmap_plot::x#1 = bitmap_line_xdyd::x#3 - [725] bitmap_plot::y#1 = bitmap_line_xdyd::y#3 - [726] bitmap_plot::c#2 = bitmap_line_xdyd::c#3 - [727] call bitmap_plot - to:bitmap_line_xdyd::@4 -bitmap_line_xdyd::@4: scope:[bitmap_line_xdyd] from bitmap_line_xdyd::@1 - [728] bitmap_line_xdyd::x#2 = ++ bitmap_line_xdyd::x#3 - [729] bitmap_line_xdyd::e#1 = bitmap_line_xdyd::e#3 + bitmap_line_xdyd::yd#2 - [730] if(bitmap_line_xdyd::xd#5>=bitmap_line_xdyd::e#1) goto bitmap_line_xdyd::@2 - to:bitmap_line_xdyd::@3 -bitmap_line_xdyd::@3: scope:[bitmap_line_xdyd] from bitmap_line_xdyd::@4 - [731] bitmap_line_xdyd::y#2 = -- bitmap_line_xdyd::y#3 - [732] bitmap_line_xdyd::e#2 = bitmap_line_xdyd::e#1 - bitmap_line_xdyd::xd#5 - to:bitmap_line_xdyd::@2 -bitmap_line_xdyd::@2: scope:[bitmap_line_xdyd] from bitmap_line_xdyd::@3 bitmap_line_xdyd::@4 - [733] bitmap_line_xdyd::e#6 = phi( bitmap_line_xdyd::@3/bitmap_line_xdyd::e#2, bitmap_line_xdyd::@4/bitmap_line_xdyd::e#1 ) - [733] bitmap_line_xdyd::y#6 = phi( bitmap_line_xdyd::@3/bitmap_line_xdyd::y#2, bitmap_line_xdyd::@4/bitmap_line_xdyd::y#3 ) - [734] bitmap_line_xdyd::$6 = bitmap_line_xdyd::x1#6 + 1 - [735] if(bitmap_line_xdyd::x#2!=bitmap_line_xdyd::$6) goto bitmap_line_xdyd::@1 - to:bitmap_line_xdyd::@return -bitmap_line_xdyd::@return: scope:[bitmap_line_xdyd] from bitmap_line_xdyd::@2 - [736] return - to:@return - -unsigned int divr16u(unsigned int dividend , unsigned int divisor , unsigned int rem) -divr16u: scope:[divr16u] from modr16u - [737] phi() - to:divr16u::@1 -divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 - [738] divr16u::i#2 = phi( divr16u/0, divr16u::@3/divr16u::i#1 ) - [738] divr16u::quotient#3 = phi( divr16u/0, divr16u::@3/divr16u::return#0 ) - [738] divr16u::dividend#2 = phi( divr16u/divr16u::dividend#1, divr16u::@3/divr16u::dividend#0 ) - [738] divr16u::rem#4 = phi( divr16u/0, divr16u::@3/divr16u::rem#10 ) - [739] divr16u::rem#0 = divr16u::rem#4 << 1 - [740] divr16u::$1 = byte1 divr16u::dividend#2 - [741] divr16u::$2 = divr16u::$1 & $80 - [742] if(divr16u::$2==0) goto divr16u::@2 - to:divr16u::@4 -divr16u::@4: scope:[divr16u] from divr16u::@1 - [743] divr16u::rem#1 = divr16u::rem#0 | 1 - to:divr16u::@2 -divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 - [744] divr16u::rem#5 = phi( divr16u::@1/divr16u::rem#0, divr16u::@4/divr16u::rem#1 ) - [745] divr16u::dividend#0 = divr16u::dividend#2 << 1 - [746] divr16u::quotient#1 = divr16u::quotient#3 << 1 - [747] if(divr16u::rem#5> 7 [ screensize::hscale#0 ] ( screensize:20 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::hscale#0 ] { } conio_x16_init:13::screensize:20 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::hscale#0 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ conio_x16_init::line#3 conio_x16_init::line#1 conio_x16_init::line#0 ] -Statement [184] screensize::$1 = $28 << screensize::hscale#0 [ screensize::$1 ] ( screensize:20 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$1 ] { } conio_x16_init:13::screensize:20 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$1 ] { } ) always clobbers reg byte a -Statement [186] screensize::vscale#0 = *VERA_DC_VSCALE >> 7 [ screensize::vscale#0 ] ( screensize:20 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::vscale#0 ] { } conio_x16_init:13::screensize:20 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::vscale#0 ] { } ) always clobbers reg byte a -Statement [187] screensize::$3 = $1e << screensize::vscale#0 [ screensize::$3 ] ( screensize:20 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$3 ] { } conio_x16_init:13::screensize:20 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$3 ] { } ) always clobbers reg byte a -Statement [190] conio_screen_layer = 1 [ conio_screen_layer ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer ] { { vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_bank::return#0 = vera_layer_get_mapbase_bank::return#2 } } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer ] { { vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_bank::return#0 = vera_layer_get_mapbase_bank::return#2 } } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer ] { { vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_bank::return#0 = vera_layer_get_mapbase_bank::return#2 } } main:15::screenlayer:132 [ conio_screen_layer ] { { vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_bank::return#0 = vera_layer_get_mapbase_bank::return#2 } } ) always clobbers reg byte a -Statement [197] vera_layer_get_mapbase_offset::return#2 = vera_layer_get_mapbase_offset::return#0 [ conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#2 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#2 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#2 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#2 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } main:15::screenlayer:132 [ conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#2 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } ) always clobbers reg byte a -Statement [198] CONIO_SCREEN_TEXT#17 = vera_layer_get_mapbase_offset::return#2 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:15::screenlayer:132 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } ) always clobbers reg byte a -Statement [200] screenlayer::vera_layer_get_width1_$2 = screenlayer::vera_layer_get_width1_layer#0 << 1 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$2 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$2 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$2 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$2 ] { } main:15::screenlayer:132 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$2 ] { } ) always clobbers reg byte a -Statement [201] screenlayer::vera_layer_get_width1_config#0 = vera_layer_config[screenlayer::vera_layer_get_width1_$2] [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_config#0 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_config#0 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_config#0 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_config#0 ] { } main:15::screenlayer:132 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_config#0 ] { } ) always clobbers reg byte a -Statement [202] screenlayer::vera_layer_get_width1_$0 = *screenlayer::vera_layer_get_width1_config#0 & VERA_LAYER_WIDTH_MASK [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$0 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$0 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$0 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$0 ] { } main:15::screenlayer:132 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$0 ] { } ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for mem[1] [ conio_x16_init::line#3 conio_x16_init::line#1 conio_x16_init::line#0 ] -Statement [203] screenlayer::vera_layer_get_width1_$1 = screenlayer::vera_layer_get_width1_$0 >> 4 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$1 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$1 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$1 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$1 ] { } main:15::screenlayer:132 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$1 ] { } ) always clobbers reg byte a -Statement [204] screenlayer::vera_layer_get_width1_$3 = screenlayer::vera_layer_get_width1_$1 << 1 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$3 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$3 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$3 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$3 ] { } main:15::screenlayer:132 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$3 ] { } ) always clobbers reg byte a -Statement [205] screenlayer::vera_layer_get_width1_return#0 = VERA_LAYER_WIDTH[screenlayer::vera_layer_get_width1_$3] [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#0 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#0 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#0 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#0 ] { } main:15::screenlayer:132 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#0 ] { } ) always clobbers reg byte a -Statement [206] screenlayer::vera_layer_get_width1_return#1 = screenlayer::vera_layer_get_width1_return#0 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#1 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#1 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#1 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#1 ] { } main:15::screenlayer:132 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#1 ] { } ) always clobbers reg byte a -Statement [207] screenlayer::$2 = screenlayer::vera_layer_get_width1_return#1 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$2 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$2 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$2 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$2 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } main:15::screenlayer:132 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$2 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } ) always clobbers reg byte a -Statement [208] conio_width = screenlayer::$2 [ conio_screen_layer conio_width CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer conio_width CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } main:15::screenlayer:132 [ conio_screen_layer conio_width CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } ) always clobbers reg byte a -Statement [216] vera_layer_get_rowskip::return#2 = vera_layer_get_rowskip::return#0 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#2 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#2 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#2 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#2 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } main:15::screenlayer:132 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#2 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } ) always clobbers reg byte a -Statement [217] screenlayer::$4 = vera_layer_get_rowskip::return#2 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$4 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$4 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$4 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$4 ] { } main:15::screenlayer:132 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$4 ] { } ) always clobbers reg byte a -Statement [218] conio_rowskip = screenlayer::$4 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:15::screenlayer:132 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } ) always clobbers reg byte a -Statement [220] screenlayer::vera_layer_get_height1_$2 = screenlayer::vera_layer_get_height1_layer#0 << 1 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$2 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$2 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$2 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$2 ] { } main:15::screenlayer:132 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$2 ] { } ) always clobbers reg byte a -Statement [221] screenlayer::vera_layer_get_height1_config#0 = vera_layer_config[screenlayer::vera_layer_get_height1_$2] [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_config#0 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_config#0 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_config#0 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_config#0 ] { } main:15::screenlayer:132 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_config#0 ] { } ) always clobbers reg byte a -Statement [222] screenlayer::vera_layer_get_height1_$0 = *screenlayer::vera_layer_get_height1_config#0 & VERA_LAYER_HEIGHT_MASK [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$0 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$0 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$0 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$0 ] { } main:15::screenlayer:132 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$0 ] { } ) always clobbers reg byte a reg byte y -Statement [223] screenlayer::vera_layer_get_height1_$1 = screenlayer::vera_layer_get_height1_$0 >> 6 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$1 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$1 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$1 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$1 ] { } main:15::screenlayer:132 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$1 ] { } ) always clobbers reg byte a -Statement [224] screenlayer::vera_layer_get_height1_$3 = screenlayer::vera_layer_get_height1_$1 << 1 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$3 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$3 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$3 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$3 ] { } main:15::screenlayer:132 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$3 ] { } ) always clobbers reg byte a -Statement [225] screenlayer::vera_layer_get_height1_return#0 = VERA_LAYER_HEIGHT[screenlayer::vera_layer_get_height1_$3] [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#0 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#0 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#0 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#0 ] { } main:15::screenlayer:132 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#0 ] { } ) always clobbers reg byte a -Statement [226] screenlayer::vera_layer_get_height1_return#1 = screenlayer::vera_layer_get_height1_return#0 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#1 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#1 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#1 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#1 ] { } main:15::screenlayer:132 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#1 ] { } ) always clobbers reg byte a -Statement [227] screenlayer::$5 = screenlayer::vera_layer_get_height1_return#1 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$5 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$5 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$5 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$5 ] { } main:15::screenlayer:132 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$5 ] { } ) always clobbers reg byte a -Statement [228] conio_height = screenlayer::$5 [ conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:15::screenlayer:132 [ conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } ) always clobbers reg byte a -Statement [237] vera_layer_set_mapbase::$0 = vera_layer_set_mapbase::layer#3 << 1 [ vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] ( vera_layer_set_mapbase:28 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } conio_x16_init:13::vera_layer_set_mapbase:28 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } vera_layer_set_mapbase:30 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } conio_x16_init:13::vera_layer_set_mapbase:30 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } main:15::vera_layer_mode_tile:73::vera_layer_set_mapbase:321 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:18::vera_layer_mode_tile:179::vera_layer_set_mapbase:321 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179::vera_layer_set_mapbase:321 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:222 [ vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::mapbase#0 ] -Removing always clobbered register reg byte a as potential for mem[1] [ vera_layer_mode_tile::layer#10 ] -Removing always clobbered register reg byte a as potential for mem[1] [ vera_layer_mode_tile::tilewidth#10 ] -Removing always clobbered register reg byte a as potential for mem[1] [ vera_layer_mode_tile::tileheight#10 ] -Removing always clobbered register reg byte a as potential for mem[1] [ vera_layer_mode_tile::$17 ] -Removing always clobbered register reg byte a as potential for mem[1] [ vera_layer_mode_tile::$18 ] -Statement [238] vera_layer_set_mapbase::addr#0 = vera_layer_mapbase[vera_layer_set_mapbase::$0] [ vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] ( vera_layer_set_mapbase:28 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } conio_x16_init:13::vera_layer_set_mapbase:28 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } vera_layer_set_mapbase:30 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } conio_x16_init:13::vera_layer_set_mapbase:30 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } main:15::vera_layer_mode_tile:73::vera_layer_set_mapbase:321 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:18::vera_layer_mode_tile:179::vera_layer_set_mapbase:321 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179::vera_layer_set_mapbase:321 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a -Statement [239] *vera_layer_set_mapbase::addr#0 = vera_layer_set_mapbase::mapbase#3 [ ] ( vera_layer_set_mapbase:28 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 ] { } conio_x16_init:13::vera_layer_set_mapbase:28 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 ] { } vera_layer_set_mapbase:30 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 ] { } conio_x16_init:13::vera_layer_set_mapbase:30 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 ] { } main:15::vera_layer_mode_tile:73::vera_layer_set_mapbase:321 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:18::vera_layer_mode_tile:179::vera_layer_set_mapbase:321 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179::vera_layer_set_mapbase:321 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for mem[1] [ vera_layer_mode_tile::layer#10 ] -Removing always clobbered register reg byte y as potential for mem[1] [ vera_layer_mode_tile::tilewidth#10 ] -Removing always clobbered register reg byte y as potential for mem[1] [ vera_layer_mode_tile::tileheight#10 ] -Removing always clobbered register reg byte y as potential for mem[1] [ vera_layer_mode_tile::$17 ] -Removing always clobbered register reg byte y as potential for mem[1] [ vera_layer_mode_tile::$18 ] -Statement [245] if(0> 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a -Statement [322] vera_layer_mode_tile::$6 = word0 vera_layer_mode_tile::tilebase_address#10 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } ) always clobbers reg byte a -Statement [323] vera_tilebase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$6 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } ) always clobbers reg byte a -Statement [326] vera_tilebase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::tilebase_address#10 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } ) always clobbers reg byte a -Statement [327] vera_layer_mode_tile::tilebase_address#0 = vera_layer_mode_tile::tilebase_address#10 >> 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } ) always clobbers reg byte a -Statement [329] vera_layer_mode_tile::tilebase#1 = vera_layer_mode_tile::tilebase#0 & VERA_LAYER_TILEBASE_MASK [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } ) always clobbers reg byte a -Statement [332] vera_layer_mode_tile::tilebase#3 = vera_layer_mode_tile::tilebase#1 | VERA_TILEBASE_WIDTH_16 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } ) always clobbers reg byte a -Statement [336] vera_layer_mode_tile::tilebase#5 = vera_layer_mode_tile::tilebase#12 | VERA_TILEBASE_HEIGHT_16 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } ) always clobbers reg byte a -Statement [342] vera_layer_mode_tile::config#11 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_128 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } ) always clobbers reg byte a -Statement [343] vera_layer_mode_tile::config#10 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_64 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } ) always clobbers reg byte a -Statement [344] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 8 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } ) always clobbers reg byte a -Statement [345] vera_layer_mode_tile::$13 = vera_layer_mode_tile::layer#10 << 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$13 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$13 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$13 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$13 ] { } ) always clobbers reg byte a -Statement [346] vera_layer_rowskip[vera_layer_mode_tile::$13] = $100 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } ) always clobbers reg byte a -Statement [347] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 7 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } ) always clobbers reg byte a -Statement [348] vera_layer_mode_tile::$12 = vera_layer_mode_tile::layer#10 << 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$12 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$12 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$12 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$12 ] { } ) always clobbers reg byte a -Statement [349] vera_layer_rowskip[vera_layer_mode_tile::$12] = $80 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } ) always clobbers reg byte a -Statement [350] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 6 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } ) always clobbers reg byte a -Statement [351] vera_layer_mode_tile::$11 = vera_layer_mode_tile::layer#10 << 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$11 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$11 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$11 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$11 ] { } ) always clobbers reg byte a -Statement [352] vera_layer_rowskip[vera_layer_mode_tile::$11] = $40 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } ) always clobbers reg byte a -Statement [354] *vera_tilebase_offset = 0 [ ] ( main:15::vera_layer_mode_bitmap:75 [ conio_screen_width conio_screen_height ] { } ) always clobbers reg byte a -Statement [355] *vera_tilebase_bank = 0 [ ] ( main:15::vera_layer_mode_bitmap:75 [ conio_screen_width conio_screen_height ] { } ) always clobbers reg byte a -Statement [356] *vera_tilebase_address = vera_layer_mode_bitmap::bitmap_address#1 [ ] ( main:15::vera_layer_mode_bitmap:75 [ conio_screen_width conio_screen_height ] { } ) always clobbers reg byte a -Statement [357] *VERA_DC_HSCALE = $40 [ ] ( main:15::vera_layer_mode_bitmap:75 [ conio_screen_width conio_screen_height ] { } ) always clobbers reg byte a -Statement [358] *VERA_DC_VSCALE = $40 [ ] ( main:15::vera_layer_mode_bitmap:75 [ conio_screen_width conio_screen_height ] { } ) always clobbers reg byte a -Statement [364] clrscr::line_text#0 = (char *)CONIO_SCREEN_TEXT#17 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::line_text#0 ] ( main:15::clrscr:83 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::line_text#0 ] { { vera_layer_get_backcolor::layer#0 = conio_screen_layer } { vera_layer_get_backcolor::return#0 = vera_layer_get_backcolor::return#1 } } main:15::clrscr:115 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::line_text#0 ] { { vera_layer_get_backcolor::layer#0 = conio_screen_layer } { vera_layer_get_backcolor::return#0 = vera_layer_get_backcolor::return#1 } } main:15::clrscr:138 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::line_text#0 ] { { vera_layer_get_backcolor::layer#0 = conio_screen_layer } { vera_layer_get_backcolor::return#0 = vera_layer_get_backcolor::return#1 } } ) always clobbers reg byte a -Statement [369] clrscr::$1 = clrscr::$0 << 4 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::line_text#0 clrscr::$1 ] ( main:15::clrscr:83 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::line_text#0 clrscr::$1 ] { { vera_layer_get_textcolor::layer#0 = conio_screen_layer } { vera_layer_get_textcolor::return#0 = vera_layer_get_textcolor::return#1 } } main:15::clrscr:115 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::line_text#0 clrscr::$1 ] { { vera_layer_get_textcolor::layer#0 = conio_screen_layer } { vera_layer_get_textcolor::return#0 = vera_layer_get_textcolor::return#1 } } main:15::clrscr:138 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::line_text#0 clrscr::$1 ] { { vera_layer_get_textcolor::layer#0 = conio_screen_layer } { vera_layer_get_textcolor::return#0 = vera_layer_get_textcolor::return#1 } } ) always clobbers reg byte a -Statement [377] conio_cursor_x[conio_screen_layer] = 0 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] ( main:15::clrscr:83 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:15::clrscr:115 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:15::clrscr:138 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } ) always clobbers reg byte a reg byte y -Statement [378] conio_cursor_y[conio_screen_layer] = 0 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] ( main:15::clrscr:83 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:15::clrscr:115 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:15::clrscr:138 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } ) always clobbers reg byte a reg byte y -Statement [379] clrscr::$9 = conio_screen_layer << 1 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::$9 ] ( main:15::clrscr:83 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::$9 ] { } main:15::clrscr:115 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::$9 ] { } main:15::clrscr:138 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::$9 ] { } ) always clobbers reg byte a -Statement [380] conio_line_text[clrscr::$9] = 0 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] ( main:15::clrscr:83 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:15::clrscr:115 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:15::clrscr:138 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } ) always clobbers reg byte a -Statement [382] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::color#0 clrscr::l#2 clrscr::line_text#2 ] ( main:15::clrscr:83 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::color#0 clrscr::l#2 clrscr::line_text#2 ] { } main:15::clrscr:115 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::color#0 clrscr::l#2 clrscr::line_text#2 ] { } main:15::clrscr:138 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::color#0 clrscr::l#2 clrscr::line_text#2 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ clrscr::color#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:251 [ clrscr::l#2 clrscr::l#1 ] -Statement [387] clrscr::$7 = CONIO_SCREEN_BANK#15 | VERA_INC_1 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::color#0 clrscr::l#2 clrscr::line_text#2 clrscr::$7 ] ( main:15::clrscr:83 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::color#0 clrscr::l#2 clrscr::line_text#2 clrscr::$7 ] { } main:15::clrscr:115 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::color#0 clrscr::l#2 clrscr::line_text#2 clrscr::$7 ] { } main:15::clrscr:138 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::color#0 clrscr::l#2 clrscr::line_text#2 clrscr::$7 ] { } ) always clobbers reg byte a -Statement [391] clrscr::line_text#1 = clrscr::line_text#2 + conio_rowskip [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::color#0 clrscr::l#2 clrscr::line_text#1 ] ( main:15::clrscr:83 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::color#0 clrscr::l#2 clrscr::line_text#1 ] { } main:15::clrscr:115 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::color#0 clrscr::l#2 clrscr::line_text#1 ] { } main:15::clrscr:138 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::color#0 clrscr::l#2 clrscr::line_text#1 ] { } ) always clobbers reg byte a -Statement [393] *VERA_DATA0 = ' ' [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::color#0 clrscr::l#2 clrscr::line_text#2 clrscr::c#2 ] ( main:15::clrscr:83 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::color#0 clrscr::l#2 clrscr::line_text#2 clrscr::c#2 ] { } main:15::clrscr:115 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::color#0 clrscr::l#2 clrscr::line_text#2 clrscr::c#2 ] { } main:15::clrscr:138 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::color#0 clrscr::l#2 clrscr::line_text#2 clrscr::c#2 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:179 [ clrscr::c#2 clrscr::c#1 ] -Statement [398] printf_str::c#1 = *printf_str::s#8 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#8 printf_str::c#1 ] ( main:15::printf_str:87 [ CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#8 printf_str::c#1 ] { } main:15::printf_str:89 [ CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#8 printf_str::c#1 ] { } main:15::printf_str:91 [ CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#8 printf_str::c#1 ] { } main:15::printf_str:93 [ CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#8 printf_str::c#1 ] { } main:15::printf_str:104 [ CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#8 printf_str::c#1 ] { } main:15::printf_str:119 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#8 printf_str::c#1 ] { } main:15::printf_str:125 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#8 printf_str::c#1 ] { } ) always clobbers reg byte a reg byte y -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [405] __bitmap_address = bitmap_init::address#0 [ __bitmap_address ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address ] { } ) always clobbers reg byte a -Statement [406] __bitmap_layer = bitmap_init::layer#0 [ __bitmap_address __bitmap_layer ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_layer ] { } ) always clobbers reg byte a -Statement [408] bitmap_init::vera_layer_get_color_depth1_$1 = bitmap_init::vera_layer_get_color_depth1_layer#0 << 1 [ __bitmap_address bitmap_init::vera_layer_get_color_depth1_$1 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address bitmap_init::vera_layer_get_color_depth1_$1 ] { } ) always clobbers reg byte a -Statement [409] bitmap_init::vera_layer_get_color_depth1_config#0 = vera_layer_config[bitmap_init::vera_layer_get_color_depth1_$1] [ __bitmap_address bitmap_init::vera_layer_get_color_depth1_config#0 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address bitmap_init::vera_layer_get_color_depth1_config#0 ] { } ) always clobbers reg byte a -Statement [410] bitmap_init::vera_layer_get_color_depth1_$0 = *bitmap_init::vera_layer_get_color_depth1_config#0 & VERA_LAYER_COLOR_DEPTH_MASK [ __bitmap_address bitmap_init::vera_layer_get_color_depth1_$0 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address bitmap_init::vera_layer_get_color_depth1_$0 ] { } ) always clobbers reg byte a reg byte y -Statement [423] bitmap_init::bitmask#0 = bitmasks[__bitmap_color_depth] [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::bitmask#0 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::bitmask#0 ] { } ) always clobbers reg byte y -Statement [424] bitmap_init::bitshift#0 = bitshifts[__bitmap_color_depth] [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::bitmask#0 bitmap_init::bitshift#0 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::bitmask#0 bitmap_init::bitshift#0 ] { } ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:209 [ bitmap_init::bitmask#13 bitmap_init::bitmask#3 bitmap_init::bitmask#12 bitmap_init::bitmask#11 bitmap_init::bitmask#10 bitmap_init::bitmask#0 bitmap_init::bitmask#16 bitmap_init::bitmask#1 bitmap_init::bitmask#2 bitmap_init::bitmask#4 ] -Statement [426] if(__bitmap_color_depth!=0) goto bitmap_init::@2 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:209 [ bitmap_init::bitmask#13 bitmap_init::bitmask#3 bitmap_init::bitmask#12 bitmap_init::bitmask#11 bitmap_init::bitmask#10 bitmap_init::bitmask#0 bitmap_init::bitmask#16 bitmap_init::bitmask#1 bitmap_init::bitmask#2 bitmap_init::bitmask#4 ] -Removing always clobbered register reg byte a as potential for zp[1]:215 [ bitmap_init::bitshift#13 bitmap_init::bitshift#3 bitmap_init::bitshift#12 bitmap_init::bitshift#11 bitmap_init::bitshift#10 bitmap_init::bitshift#0 bitmap_init::bitshift#14 bitmap_init::bitshift#1 bitmap_init::bitshift#2 bitmap_init::bitshift#4 ] -Statement [427] bitmap_init::$7 = bitmap_init::x#10 >> 3 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 bitmap_init::$7 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 bitmap_init::$7 ] { } ) always clobbers reg byte a -Statement [428] bitmap_init::$23 = bitmap_init::x#10 << 1 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 bitmap_init::$7 bitmap_init::$23 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 bitmap_init::$7 bitmap_init::$23 ] { } ) always clobbers reg byte a -Statement [429] bitmap_init::$29 = __bitmap_plot_x + bitmap_init::$23 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 bitmap_init::$7 bitmap_init::$29 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 bitmap_init::$7 bitmap_init::$29 ] { } ) always clobbers reg byte a -Potential register analysis [430] *bitmap_init::$29 = bitmap_init::$7 missing fragment Fragment not found _deref_pwum1=vwum2. Attempted variations _deref_pwum1=vwum2 allocation: mem[2] [ bitmap_init::$29 ] mem[2] [ bitmap_init::$7 ] -MISSING FRAGMENTS - Fragment not found _deref_pwum1=vwum2. Attempted variations _deref_pwum1=vwum2 -Statement [430] *bitmap_init::$29 = bitmap_init::$7 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 ] { } ) always clobbers reg byte a reg byte x reg byte y -Removing always clobbered register reg byte x as potential for zp[1]:209 [ bitmap_init::bitmask#13 bitmap_init::bitmask#3 bitmap_init::bitmask#12 bitmap_init::bitmask#11 bitmap_init::bitmask#10 bitmap_init::bitmask#0 bitmap_init::bitmask#16 bitmap_init::bitmask#1 bitmap_init::bitmask#2 bitmap_init::bitmask#4 ] -Removing always clobbered register reg byte x as potential for zp[1]:215 [ bitmap_init::bitshift#13 bitmap_init::bitshift#3 bitmap_init::bitshift#12 bitmap_init::bitshift#11 bitmap_init::bitshift#10 bitmap_init::bitshift#0 bitmap_init::bitshift#14 bitmap_init::bitshift#1 bitmap_init::bitshift#2 bitmap_init::bitshift#4 ] -Removing always clobbered register reg byte y as potential for zp[1]:215 [ bitmap_init::bitshift#13 bitmap_init::bitshift#3 bitmap_init::bitshift#12 bitmap_init::bitshift#11 bitmap_init::bitshift#10 bitmap_init::bitshift#0 bitmap_init::bitshift#14 bitmap_init::bitshift#1 bitmap_init::bitshift#2 bitmap_init::bitshift#4 ] -Statement [431] bitmap_init::$30 = __bitmap_plot_bitmask + bitmap_init::x#10 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 bitmap_init::$30 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 bitmap_init::$30 ] { } ) always clobbers reg byte a -Statement [432] *bitmap_init::$30 = bitmap_init::bitmask#10 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 ] { } ) always clobbers reg byte a reg byte y -Statement [433] bitmap_init::$31 = __bitmap_plot_bitshift + bitmap_init::x#10 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 bitmap_init::$31 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 bitmap_init::$31 ] { } ) always clobbers reg byte a -Statement [434] *bitmap_init::$31 = (char)bitmap_init::bitshift#10 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 ] { } ) always clobbers reg byte a reg byte y -Statement [438] if(__bitmap_color_depth!=1) goto bitmap_init::@3 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 ] { } ) always clobbers reg byte a -Statement [439] bitmap_init::$10 = bitmap_init::x#10 >> 2 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 bitmap_init::$10 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 bitmap_init::$10 ] { } ) always clobbers reg byte a -Statement [440] bitmap_init::$24 = bitmap_init::x#10 << 1 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 bitmap_init::$10 bitmap_init::$24 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 bitmap_init::$10 bitmap_init::$24 ] { } ) always clobbers reg byte a -Statement [441] bitmap_init::$32 = __bitmap_plot_x + bitmap_init::$24 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 bitmap_init::$10 bitmap_init::$32 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 bitmap_init::$10 bitmap_init::$32 ] { } ) always clobbers reg byte a -Potential register analysis [442] *bitmap_init::$32 = bitmap_init::$10 missing fragment Fragment not found _deref_pwum1=vwum2. Attempted variations _deref_pwum1=vwum2 allocation: mem[2] [ bitmap_init::$32 ] mem[2] [ bitmap_init::$10 ] -MISSING FRAGMENTS - Fragment not found _deref_pwum1=vwum2. Attempted variations _deref_pwum1=vwum2 -Statement [442] *bitmap_init::$32 = bitmap_init::$10 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [443] bitmap_init::$33 = __bitmap_plot_bitmask + bitmap_init::x#10 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 bitmap_init::$33 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 bitmap_init::$33 ] { } ) always clobbers reg byte a -Statement [444] *bitmap_init::$33 = bitmap_init::bitmask#11 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 ] { } ) always clobbers reg byte a reg byte y -Statement [445] bitmap_init::$34 = __bitmap_plot_bitshift + bitmap_init::x#10 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 bitmap_init::$34 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 bitmap_init::$34 ] { } ) always clobbers reg byte a -Statement [446] *bitmap_init::$34 = (char)bitmap_init::bitshift#11 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 ] { } ) always clobbers reg byte a reg byte y -Statement [448] bitmap_init::bitmask#2 = bitmap_init::bitmask#11 >> 2 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#2 bitmap_init::bitmask#2 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#2 bitmap_init::bitmask#2 ] { } ) always clobbers reg byte a -Statement [450] if(__bitmap_color_depth!=2) goto bitmap_init::@4 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 ] { } ) always clobbers reg byte a -Statement [451] bitmap_init::$13 = bitmap_init::x#10 >> 1 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 bitmap_init::$13 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 bitmap_init::$13 ] { } ) always clobbers reg byte a -Statement [452] bitmap_init::$25 = bitmap_init::x#10 << 1 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 bitmap_init::$13 bitmap_init::$25 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 bitmap_init::$13 bitmap_init::$25 ] { } ) always clobbers reg byte a -Statement [453] bitmap_init::$35 = __bitmap_plot_x + bitmap_init::$25 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 bitmap_init::$13 bitmap_init::$35 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 bitmap_init::$13 bitmap_init::$35 ] { } ) always clobbers reg byte a -Potential register analysis [454] *bitmap_init::$35 = bitmap_init::$13 missing fragment Fragment not found _deref_pwum1=vwum2. Attempted variations _deref_pwum1=vwum2 allocation: mem[2] [ bitmap_init::$13 ] mem[2] [ bitmap_init::$35 ] -MISSING FRAGMENTS - Fragment not found _deref_pwum1=vwum2. Attempted variations _deref_pwum1=vwum2 -Statement [454] *bitmap_init::$35 = bitmap_init::$13 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [455] bitmap_init::$36 = __bitmap_plot_bitmask + bitmap_init::x#10 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 bitmap_init::$36 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 bitmap_init::$36 ] { } ) always clobbers reg byte a -Statement [456] *bitmap_init::$36 = bitmap_init::bitmask#12 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 ] { } ) always clobbers reg byte a reg byte y -Statement [457] bitmap_init::$37 = __bitmap_plot_bitshift + bitmap_init::x#10 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 bitmap_init::$37 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 bitmap_init::$37 ] { } ) always clobbers reg byte a -Statement [458] *bitmap_init::$37 = (char)bitmap_init::bitshift#12 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 ] { } ) always clobbers reg byte a reg byte y -Statement [459] bitmap_init::bitshift#3 = bitmap_init::bitshift#12 - 4 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#3 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#3 ] { } ) always clobbers reg byte a -Statement [460] bitmap_init::bitmask#3 = bitmap_init::bitmask#12 >> 4 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#3 bitmap_init::bitmask#3 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#3 bitmap_init::bitmask#3 ] { } ) always clobbers reg byte a -Statement [462] if(__bitmap_color_depth!=3) goto bitmap_init::@5 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 ] { } ) always clobbers reg byte a -Statement [463] bitmap_init::$26 = bitmap_init::x#10 << 1 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 bitmap_init::$26 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 bitmap_init::$26 ] { } ) always clobbers reg byte a -Statement [464] bitmap_init::$38 = __bitmap_plot_x + bitmap_init::$26 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 bitmap_init::$38 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 bitmap_init::$38 ] { } ) always clobbers reg byte a -Potential register analysis [465] *bitmap_init::$38 = bitmap_init::x#10 missing fragment Fragment not found _deref_pwum1=vwum2. Attempted variations _deref_pwum1=vwum2 allocation: mem[2] [ bitmap_init::x#10 bitmap_init::x#1 ] mem[2] [ bitmap_init::$38 ] -MISSING FRAGMENTS - Fragment not found _deref_pwum1=vwum2. Attempted variations _deref_pwum1=vwum2 -Statement [465] *bitmap_init::$38 = bitmap_init::x#10 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [466] bitmap_init::$39 = __bitmap_plot_bitmask + bitmap_init::x#10 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 bitmap_init::$39 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 bitmap_init::$39 ] { } ) always clobbers reg byte a -Statement [467] *bitmap_init::$39 = bitmap_init::bitmask#13 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 ] { } ) always clobbers reg byte a reg byte y -Statement [468] bitmap_init::$40 = __bitmap_plot_bitshift + bitmap_init::x#10 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 bitmap_init::$40 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 bitmap_init::$40 ] { } ) always clobbers reg byte a -Statement [469] *bitmap_init::$40 = (char)bitmap_init::bitshift#13 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 ] { } ) always clobbers reg byte a reg byte y -Statement [470] if(bitmap_init::bitshift#13>=0) goto bitmap_init::@6 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 ] { } ) always clobbers reg byte a -Statement [471] bitmap_init::bitshift#4 = bitshifts[__bitmap_color_depth] [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#13 bitmap_init::bitshift#4 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#13 bitmap_init::bitshift#4 ] { } ) always clobbers reg byte a reg byte y -Statement [473] if(bitmap_init::bitmask#13!=0) goto bitmap_init::@7 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#14 bitmap_init::bitmask#13 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#14 bitmap_init::bitmask#13 ] { } ) always clobbers reg byte a -Statement [474] bitmap_init::bitmask#4 = bitmasks[__bitmap_color_depth] [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#14 bitmap_init::bitmask#4 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#14 bitmap_init::bitmask#4 ] { } ) always clobbers reg byte a reg byte y -Statement [477] if(bitmap_init::x#1!=$280) goto bitmap_init::@1 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#1 bitmap_init::bitmask#16 bitmap_init::bitshift#14 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#1 bitmap_init::bitmask#16 bitmap_init::bitshift#14 ] { } ) always clobbers reg byte a -Statement [478] bitmap_init::$3 = __bitmap_color_depth << 2 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::$3 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::$3 ] { } ) always clobbers reg byte a -Statement [479] bitmap_init::$4 = bitmap_init::$3 + __bitmap_hscale [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::$4 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::$4 ] { } ) always clobbers reg byte a -Statement [480] bitmap_init::$27 = bitmap_init::$4 << 1 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::$27 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::$27 ] { } ) always clobbers reg byte a -Statement [481] bitmap_init::hdelta#0 = hdeltas[bitmap_init::$27] [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 ] { } ) always clobbers reg byte a -Statement [482] bitmap_init::yoffs#0 = __bitmap_address [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 bitmap_init::yoffs#0 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 bitmap_init::yoffs#0 ] { } ) always clobbers reg byte a -Statement [484] bitmap_init::$28 = bitmap_init::y#2 << 2 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$28 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$28 ] { } ) always clobbers reg byte a -Statement [485] bitmap_init::$41 = __bitmap_plot_y + bitmap_init::$28 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$41 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$41 ] { } ) always clobbers reg byte a -Potential register analysis [486] *bitmap_init::$41 = bitmap_init::yoffs#2 missing fragment Fragment not found _deref_pdum1=vdum2. Attempted variations _deref_pdum1=vdum2 allocation: mem[4] [ bitmap_init::yoffs#2 bitmap_init::yoffs#0 bitmap_init::yoffs#1 ] mem[2] [ bitmap_init::$41 ] -MISSING FRAGMENTS - Fragment not found _deref_pdum1=vdum2. Attempted variations _deref_pdum1=vdum2 -Statement [486] *bitmap_init::$41 = bitmap_init::yoffs#2 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 bitmap_init::y#2 bitmap_init::yoffs#2 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [487] bitmap_init::yoffs#1 = bitmap_init::yoffs#2 + bitmap_init::hdelta#0 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 bitmap_init::y#2 bitmap_init::yoffs#1 ] { } ) always clobbers reg byte a -Statement [489] if(bitmap_init::y#1!=$1e0) goto bitmap_init::@15 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 bitmap_init::y#1 bitmap_init::yoffs#1 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 bitmap_init::y#1 bitmap_init::yoffs#1 ] { } ) always clobbers reg byte a -Statement [491] bitmap_clear::$6 = __bitmap_vscale << 1 [ __bitmap_address __bitmap_hscale __bitmap_color_depth bitmap_clear::$6 ] ( main:15::bitmap_clear:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_color_depth bitmap_clear::$6 ] { { mul16u::a#0 = bitmap_clear::hdelta#0 } { mul16u::b#0 = bitmap_clear::vdelta#0 } { mul16u::return#0 = mul16u::res#2 } } ) always clobbers reg byte a -Statement [492] bitmap_clear::vdelta#0 = vdeltas[bitmap_clear::$6] [ __bitmap_address __bitmap_hscale __bitmap_color_depth bitmap_clear::vdelta#0 ] ( main:15::bitmap_clear:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_color_depth bitmap_clear::vdelta#0 ] { { mul16u::a#0 = bitmap_clear::hdelta#0 } { mul16u::b#0 = bitmap_clear::vdelta#0 } { mul16u::return#0 = mul16u::res#2 } } ) always clobbers reg byte a -Statement [493] bitmap_clear::$0 = __bitmap_color_depth << 2 [ __bitmap_address __bitmap_hscale bitmap_clear::vdelta#0 bitmap_clear::$0 ] ( main:15::bitmap_clear:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale bitmap_clear::vdelta#0 bitmap_clear::$0 ] { { mul16u::a#0 = bitmap_clear::hdelta#0 } { mul16u::b#0 = bitmap_clear::vdelta#0 } { mul16u::return#0 = mul16u::res#2 } } ) always clobbers reg byte a -Statement [494] bitmap_clear::$1 = bitmap_clear::$0 + __bitmap_hscale [ __bitmap_address bitmap_clear::vdelta#0 bitmap_clear::$1 ] ( main:15::bitmap_clear:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address bitmap_clear::vdelta#0 bitmap_clear::$1 ] { { mul16u::a#0 = bitmap_clear::hdelta#0 } { mul16u::b#0 = bitmap_clear::vdelta#0 } { mul16u::return#0 = mul16u::res#2 } } ) always clobbers reg byte a -Statement [495] bitmap_clear::$7 = bitmap_clear::$1 << 1 [ __bitmap_address bitmap_clear::vdelta#0 bitmap_clear::$7 ] ( main:15::bitmap_clear:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address bitmap_clear::vdelta#0 bitmap_clear::$7 ] { { mul16u::a#0 = bitmap_clear::hdelta#0 } { mul16u::b#0 = bitmap_clear::vdelta#0 } { mul16u::return#0 = mul16u::res#2 } } ) always clobbers reg byte a -Statement [496] bitmap_clear::hdelta#0 = hdeltas[bitmap_clear::$7] [ __bitmap_address bitmap_clear::vdelta#0 bitmap_clear::hdelta#0 ] ( main:15::bitmap_clear:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address bitmap_clear::vdelta#0 bitmap_clear::hdelta#0 ] { { mul16u::a#0 = bitmap_clear::hdelta#0 } { mul16u::b#0 = bitmap_clear::vdelta#0 } { mul16u::return#0 = mul16u::res#2 } } ) always clobbers reg byte a -Statement [497] mul16u::a#0 = bitmap_clear::hdelta#0 [ __bitmap_address bitmap_clear::vdelta#0 mul16u::a#0 ] ( main:15::bitmap_clear:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address bitmap_clear::vdelta#0 mul16u::a#0 ] { { mul16u::a#0 = bitmap_clear::hdelta#0 } { mul16u::b#0 = bitmap_clear::vdelta#0 } { mul16u::return#0 = mul16u::res#2 } } ) always clobbers reg byte a -Statement [498] mul16u::b#0 = bitmap_clear::vdelta#0 [ __bitmap_address mul16u::a#0 mul16u::b#0 ] ( main:15::bitmap_clear:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address mul16u::a#0 mul16u::b#0 ] { { mul16u::a#0 = bitmap_clear::hdelta#0 } { mul16u::b#0 = bitmap_clear::vdelta#0 } { mul16u::return#0 = mul16u::res#2 } } ) always clobbers reg byte a -Statement [500] mul16u::return#0 = mul16u::res#2 [ __bitmap_address mul16u::return#0 ] ( main:15::bitmap_clear:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address mul16u::return#0 ] { { mul16u::a#0 = bitmap_clear::hdelta#0 } { mul16u::b#0 = bitmap_clear::vdelta#0 } { mul16u::return#0 = mul16u::res#2 } } ) always clobbers reg byte a -Statement [501] bitmap_clear::count#0 = mul16u::return#0 [ __bitmap_address bitmap_clear::count#0 ] ( main:15::bitmap_clear:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address bitmap_clear::count#0 ] { { memset_vram::vbank#0 = bitmap_clear::vbank#0 } { memset_vram::num#0 = bitmap_clear::count#0 } } ) always clobbers reg byte a -Statement [503] bitmap_clear::vdest#0 = word0 __bitmap_address [ bitmap_clear::count#0 bitmap_clear::vbank#0 bitmap_clear::vdest#0 ] ( main:15::bitmap_clear:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_clear::count#0 bitmap_clear::vbank#0 bitmap_clear::vdest#0 ] { { memset_vram::vbank#0 = bitmap_clear::vbank#0 } { memset_vram::num#0 = bitmap_clear::count#0 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ bitmap_clear::vbank#0 ] -Statement [505] memset_vram::vdest#0 = (void *)bitmap_clear::vdest#0 [ bitmap_clear::count#0 memset_vram::vbank#0 memset_vram::vdest#0 ] ( main:15::bitmap_clear:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_clear::count#0 memset_vram::vbank#0 memset_vram::vdest#0 ] { { memset_vram::vbank#0 = bitmap_clear::vbank#0 } { memset_vram::num#0 = bitmap_clear::count#0 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ memset_vram::vbank#0 ] -Statement [506] memset_vram::num#0 = bitmap_clear::count#0 [ memset_vram::vbank#0 memset_vram::vdest#0 memset_vram::num#0 ] ( main:15::bitmap_clear:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 memset_vram::vbank#0 memset_vram::vdest#0 memset_vram::num#0 ] { { memset_vram::vbank#0 = bitmap_clear::vbank#0 } { memset_vram::num#0 = bitmap_clear::count#0 } } ) always clobbers reg byte a -Statement [509] kbhit::ch = 0 [ kbhit::ch ] ( main:15::kbhit:106 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#23 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 kbhit::ch ] { { kbhit::return#1 = kbhit::return#2 } } main:15::kbhit:127 [ main::x#3 main::color#2 kbhit::ch ] { { kbhit::return#1 = kbhit::return#3 } } ) always clobbers reg byte a -Statement [515] if(bitmap_line::x0#10> 9 [ rand_state#0 rand::$1 ] ( main:15::rand:149 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#0 rand::$1 ] { { rand_state#13 = rand_state#23 } { rand::return#0 = rand::return#2 } } main:15::rand:155 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#0 rand::$1 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#3 } } main:15::rand:161 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#0 rand::$1 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#10 } } main:15::rand:167 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#0 rand::$1 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#11 } } main:15::rand:173 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#0 rand::$1 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#12 } } ) always clobbers reg byte a -Statement [589] rand_state#1 = rand_state#0 ^ rand::$1 [ rand_state#1 ] ( main:15::rand:149 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#1 ] { { rand_state#13 = rand_state#23 } { rand::return#0 = rand::return#2 } } main:15::rand:155 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#1 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#3 } } main:15::rand:161 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#1 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#10 } } main:15::rand:167 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#1 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#11 } } main:15::rand:173 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#1 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#12 } } ) always clobbers reg byte a -Statement [590] rand::$2 = rand_state#1 << 8 [ rand_state#1 rand::$2 ] ( main:15::rand:149 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#1 rand::$2 ] { { rand_state#13 = rand_state#23 } { rand::return#0 = rand::return#2 } } main:15::rand:155 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#1 rand::$2 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#3 } } main:15::rand:161 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#1 rand::$2 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#10 } } main:15::rand:167 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#1 rand::$2 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#11 } } main:15::rand:173 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#1 rand::$2 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#12 } } ) always clobbers reg byte a -Statement [591] rand_state#14 = rand_state#1 ^ rand::$2 [ rand_state#14 ] ( main:15::rand:149 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#14 ] { { rand_state#13 = rand_state#23 } { rand::return#0 = rand::return#2 } } main:15::rand:155 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#14 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#3 } } main:15::rand:161 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#14 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#10 } } main:15::rand:167 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#14 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#11 } } main:15::rand:173 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#14 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#12 } } ) always clobbers reg byte a -Statement [592] rand::return#0 = rand_state#14 [ rand_state#14 rand::return#0 ] ( main:15::rand:149 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#14 rand::return#0 ] { { rand_state#13 = rand_state#23 } { rand::return#0 = rand::return#2 } } main:15::rand:155 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#14 rand::return#0 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#3 } } main:15::rand:161 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#14 rand::return#0 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#10 } } main:15::rand:167 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#14 rand::return#0 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#11 } } main:15::rand:173 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#14 rand::return#0 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#12 } } ) always clobbers reg byte a -Statement [595] divr16u::dividend#1 = modr16u::dividend#4 [ modr16u::divisor#4 divr16u::dividend#1 ] ( main:15::modr16u:152 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 modr16u::divisor#4 divr16u::dividend#1 ] { { modr16u::dividend#0 = modr16u::dividend#4 rand::return#2 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#2 } { divr16u::divisor#0 = modr16u::divisor#4 } } main:15::modr16u:158 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 modr16u::divisor#4 divr16u::dividend#1 ] { { modr16u::dividend#1 = modr16u::dividend#4 rand::return#3 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#3 } { divr16u::divisor#0 = modr16u::divisor#4 } } main:15::modr16u:164 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 bitmap_line::x1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 modr16u::divisor#4 divr16u::dividend#1 ] { { modr16u::dividend#2 = modr16u::dividend#4 rand::return#10 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#4 } { divr16u::divisor#0 = modr16u::divisor#4 } } main:15::modr16u:170 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 modr16u::divisor#4 divr16u::dividend#1 ] { { modr16u::dividend#3 = modr16u::dividend#4 rand::return#11 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#10 } { divr16u::divisor#0 = modr16u::divisor#4 } } ) always clobbers reg byte a -Statement [596] divr16u::divisor#0 = modr16u::divisor#4 [ divr16u::dividend#1 divr16u::divisor#0 ] ( main:15::modr16u:152 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 divr16u::dividend#1 divr16u::divisor#0 ] { { modr16u::dividend#0 = modr16u::dividend#4 rand::return#2 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#2 } { divr16u::divisor#0 = modr16u::divisor#4 } } main:15::modr16u:158 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 divr16u::dividend#1 divr16u::divisor#0 ] { { modr16u::dividend#1 = modr16u::dividend#4 rand::return#3 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#3 } { divr16u::divisor#0 = modr16u::divisor#4 } } main:15::modr16u:164 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 bitmap_line::x1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 divr16u::dividend#1 divr16u::divisor#0 ] { { modr16u::dividend#2 = modr16u::dividend#4 rand::return#10 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#4 } { divr16u::divisor#0 = modr16u::divisor#4 } } main:15::modr16u:170 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 divr16u::dividend#1 divr16u::divisor#0 ] { { modr16u::dividend#3 = modr16u::dividend#4 rand::return#11 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#10 } { divr16u::divisor#0 = modr16u::divisor#4 } } ) always clobbers reg byte a -Statement [598] modr16u::return#0 = rem16u#0 [ modr16u::return#0 ] ( main:15::modr16u:152 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 modr16u::return#0 ] { { modr16u::dividend#0 = modr16u::dividend#4 rand::return#2 } { modr16u::return#0 = modr16u::return#2 } } main:15::modr16u:158 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 modr16u::return#0 ] { { modr16u::dividend#1 = modr16u::dividend#4 rand::return#3 } { modr16u::return#0 = modr16u::return#3 } } main:15::modr16u:164 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 bitmap_line::x1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 modr16u::return#0 ] { { modr16u::dividend#2 = modr16u::dividend#4 rand::return#10 } { modr16u::return#0 = modr16u::return#4 } } main:15::modr16u:170 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 modr16u::return#0 ] { { modr16u::dividend#3 = modr16u::dividend#4 rand::return#11 } { modr16u::return#0 = modr16u::return#10 } } ) always clobbers reg byte a -Statement [600] vera_layer_set_text_color_mode::addr#0 = *(vera_layer_config+vera_layer_mode_text::layer#0*SIZEOF_POINTER) [ vera_layer_set_text_color_mode::addr#0 ] ( vera_layer_mode_text:18::vera_layer_set_text_color_mode:181 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_set_text_color_mode::addr#0 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_set_text_color_mode:181 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_set_text_color_mode::addr#0 ] { } ) always clobbers reg byte a -Statement [601] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 & ~VERA_LAYER_CONFIG_256C [ vera_layer_set_text_color_mode::addr#0 ] ( vera_layer_mode_text:18::vera_layer_set_text_color_mode:181 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_set_text_color_mode::addr#0 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_set_text_color_mode:181 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_set_text_color_mode::addr#0 ] { } ) always clobbers reg byte a reg byte y -Statement [602] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 [ ] ( vera_layer_mode_text:18::vera_layer_set_text_color_mode:181 [ conio_screen_width conio_screen_height conio_x16_init::line#0 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_set_text_color_mode:181 [ conio_screen_width conio_screen_height conio_x16_init::line#0 ] { } ) always clobbers reg byte a reg byte y -Statement [606] vera_layer_get_mapbase_offset::$0 = vera_layer_get_mapbase_offset::layer#0 << 1 [ vera_layer_get_mapbase_offset::$0 ] ( screenlayer:22::vera_layer_get_mapbase_offset:196 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::$0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } conio_x16_init:13::screenlayer:22::vera_layer_get_mapbase_offset:196 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::$0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } main:15::screenlayer:77::vera_layer_get_mapbase_offset:196 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::$0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } main:15::screenlayer:132::vera_layer_get_mapbase_offset:196 [ conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::$0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } ) always clobbers reg byte a -Statement [607] vera_layer_get_mapbase_offset::return#0 = vera_mapbase_offset[vera_layer_get_mapbase_offset::$0] [ vera_layer_get_mapbase_offset::return#0 ] ( screenlayer:22::vera_layer_get_mapbase_offset:196 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } conio_x16_init:13::screenlayer:22::vera_layer_get_mapbase_offset:196 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } main:15::screenlayer:77::vera_layer_get_mapbase_offset:196 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } main:15::screenlayer:132::vera_layer_get_mapbase_offset:196 [ conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } ) always clobbers reg byte a -Statement [611] vera_layer_get_rowskip::$0 = vera_layer_get_rowskip::layer#0 << 1 [ vera_layer_get_rowskip::$0 ] ( screenlayer:22::vera_layer_get_rowskip:215 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::$0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } conio_x16_init:13::screenlayer:22::vera_layer_get_rowskip:215 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::$0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } main:15::screenlayer:77::vera_layer_get_rowskip:215 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::$0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } main:15::screenlayer:132::vera_layer_get_rowskip:215 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::$0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } ) always clobbers reg byte a -Statement [612] vera_layer_get_rowskip::return#0 = vera_layer_rowskip[vera_layer_get_rowskip::$0] [ vera_layer_get_rowskip::return#0 ] ( screenlayer:22::vera_layer_get_rowskip:215 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } conio_x16_init:13::screenlayer:22::vera_layer_get_rowskip:215 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } main:15::screenlayer:77::vera_layer_get_rowskip:215 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } main:15::screenlayer:132::vera_layer_get_rowskip:215 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } ) always clobbers reg byte a -Statement [614] if(conio_cursor_y[conio_screen_layer]> 1 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ( main:15::bitmap_line:143::bitmap_line_ydxi:526 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] { { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 } { bitmap_line_ydxi::c#0 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 } } main:15::bitmap_line:177::bitmap_line_ydxi:526 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxi::c#0 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } } main:15::bitmap_line:143::bitmap_line_ydxi:577 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] { { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 } { bitmap_line_ydxi::c#1 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 } } main:15::bitmap_line:177::bitmap_line_ydxi:577 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxi::c#1 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:129 [ bitmap_line_ydxi::c#3 bitmap_line_ydxi::c#1 bitmap_line_ydxi::c#0 ] -Statement [676] bitmap_plot::x#2 = bitmap_line_ydxi::x#3 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#2 ] ( main:15::bitmap_line:143::bitmap_line_ydxi:526 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#2 ] { { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line_ydxi::x#3 } { bitmap_plot::y#2 = bitmap_plot::y#4 bitmap_line_ydxi::y#3 } { bitmap_plot::c#3 = bitmap_plot::c#5 bitmap_line_ydxi::c#3 bitmap_line_ydxi::c#0 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_ydxi:526 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#2 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line_ydxi::x#3 } { bitmap_plot::y#2 = bitmap_plot::y#4 bitmap_line_ydxi::y#3 } { bitmap_plot::c#3 = bitmap_plot::c#5 bitmap_line_ydxi::c#3 bitmap_line_ydxi::c#0 bitmap_line::c#10 bitmap_line::c#0 } } main:15::bitmap_line:143::bitmap_line_ydxi:577 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#2 ] { { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line_ydxi::x#3 } { bitmap_plot::y#2 = bitmap_plot::y#4 bitmap_line_ydxi::y#3 } { bitmap_plot::c#3 = bitmap_plot::c#5 bitmap_line_ydxi::c#3 bitmap_line_ydxi::c#1 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_ydxi:577 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#2 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line_ydxi::x#3 } { bitmap_plot::y#2 = bitmap_plot::y#4 bitmap_line_ydxi::y#3 } { bitmap_plot::c#3 = bitmap_plot::c#5 bitmap_line_ydxi::c#3 bitmap_line_ydxi::c#1 bitmap_line::c#10 bitmap_line::c#0 } } ) always clobbers reg byte a -Statement [677] bitmap_plot::y#2 = bitmap_line_ydxi::y#3 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#2 bitmap_plot::y#2 ] ( main:15::bitmap_line:143::bitmap_line_ydxi:526 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#2 bitmap_plot::y#2 ] { { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line_ydxi::x#3 } { bitmap_plot::y#2 = bitmap_plot::y#4 bitmap_line_ydxi::y#3 } { bitmap_plot::c#3 = bitmap_plot::c#5 bitmap_line_ydxi::c#3 bitmap_line_ydxi::c#0 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_ydxi:526 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#2 bitmap_plot::y#2 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line_ydxi::x#3 } { bitmap_plot::y#2 = bitmap_plot::y#4 bitmap_line_ydxi::y#3 } { bitmap_plot::c#3 = bitmap_plot::c#5 bitmap_line_ydxi::c#3 bitmap_line_ydxi::c#0 bitmap_line::c#10 bitmap_line::c#0 } } main:15::bitmap_line:143::bitmap_line_ydxi:577 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#2 bitmap_plot::y#2 ] { { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line_ydxi::x#3 } { bitmap_plot::y#2 = bitmap_plot::y#4 bitmap_line_ydxi::y#3 } { bitmap_plot::c#3 = bitmap_plot::c#5 bitmap_line_ydxi::c#3 bitmap_line_ydxi::c#1 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_ydxi:577 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#2 bitmap_plot::y#2 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line_ydxi::x#3 } { bitmap_plot::y#2 = bitmap_plot::y#4 bitmap_line_ydxi::y#3 } { bitmap_plot::c#3 = bitmap_plot::c#5 bitmap_line_ydxi::c#3 bitmap_line_ydxi::c#1 bitmap_line::c#10 bitmap_line::c#0 } } ) always clobbers reg byte a -Statement [681] bitmap_line_ydxi::e#1 = bitmap_line_ydxi::e#3 + bitmap_line_ydxi::xd#2 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ( main:15::bitmap_line:143::bitmap_line_ydxi:526 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] { { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 } { bitmap_line_ydxi::c#0 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 } } main:15::bitmap_line:177::bitmap_line_ydxi:526 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxi::c#0 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } } main:15::bitmap_line:143::bitmap_line_ydxi:577 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] { { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 } { bitmap_line_ydxi::c#1 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 } } main:15::bitmap_line:177::bitmap_line_ydxi:577 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxi::c#1 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } } ) always clobbers reg byte a -Statement [682] if(bitmap_line_ydxi::yd#5>=bitmap_line_ydxi::e#1) goto bitmap_line_ydxi::@2 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ( main:15::bitmap_line:143::bitmap_line_ydxi:526 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] { { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 } { bitmap_line_ydxi::c#0 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 } } main:15::bitmap_line:177::bitmap_line_ydxi:526 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxi::c#0 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } } main:15::bitmap_line:143::bitmap_line_ydxi:577 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] { { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 } { bitmap_line_ydxi::c#1 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 } } main:15::bitmap_line:177::bitmap_line_ydxi:577 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxi::c#1 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } } ) always clobbers reg byte a -Statement [684] bitmap_line_ydxi::e#2 = bitmap_line_ydxi::e#1 - bitmap_line_ydxi::yd#5 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ( main:15::bitmap_line:143::bitmap_line_ydxi:526 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] { { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 } { bitmap_line_ydxi::c#0 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 } } main:15::bitmap_line:177::bitmap_line_ydxi:526 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxi::c#0 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } } main:15::bitmap_line:143::bitmap_line_ydxi:577 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] { { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 } { bitmap_line_ydxi::c#1 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 } } main:15::bitmap_line:177::bitmap_line_ydxi:577 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxi::c#1 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } } ) always clobbers reg byte a -Statement [686] bitmap_line_ydxi::$6 = bitmap_line_ydxi::y1#6 + 1 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#6 bitmap_line_ydxi::$6 ] ( main:15::bitmap_line:143::bitmap_line_ydxi:526 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#6 bitmap_line_ydxi::$6 ] { { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 } { bitmap_line_ydxi::c#0 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 } } main:15::bitmap_line:177::bitmap_line_ydxi:526 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#6 bitmap_line_ydxi::$6 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxi::c#0 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } } main:15::bitmap_line:143::bitmap_line_ydxi:577 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#6 bitmap_line_ydxi::$6 ] { { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 } { bitmap_line_ydxi::c#1 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 } } main:15::bitmap_line:177::bitmap_line_ydxi:577 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#6 bitmap_line_ydxi::$6 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxi::c#1 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } } ) always clobbers reg byte a -Statement [687] if(bitmap_line_ydxi::y#2!=bitmap_line_ydxi::$6) goto bitmap_line_ydxi::@1 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#6 ] ( main:15::bitmap_line:143::bitmap_line_ydxi:526 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#6 ] { { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 } { bitmap_line_ydxi::c#0 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 } } main:15::bitmap_line:177::bitmap_line_ydxi:526 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#6 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxi::c#0 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } } main:15::bitmap_line:143::bitmap_line_ydxi:577 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#6 ] { { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 } { bitmap_line_ydxi::c#1 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 } } main:15::bitmap_line:177::bitmap_line_ydxi:577 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#6 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxi::c#1 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } } ) always clobbers reg byte a -Statement [690] bitmap_line_xdyi::e#0 = bitmap_line_xdyi::yd#2 >> 1 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ( main:15::bitmap_line:143::bitmap_line_xdyi:534 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] { { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 } { bitmap_line_xdyi::c#0 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyi:534 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::x#0 = bitmap_line_xdyi::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyi::c#0 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } } main:15::bitmap_line:143::bitmap_line_xdyi:584 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] { { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 } { bitmap_line_xdyi::c#1 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyi:584 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::x#1 = bitmap_line_xdyi::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyi::c#1 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:130 [ bitmap_line_xdyi::c#3 bitmap_line_xdyi::c#1 bitmap_line_xdyi::c#0 ] -Statement [692] bitmap_plot::x#0 = bitmap_line_xdyi::x#3 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#0 ] ( main:15::bitmap_line:143::bitmap_line_xdyi:534 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#0 ] { { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_plot::x#0 = bitmap_plot::x#4 bitmap_line_xdyi::x#3 } { bitmap_plot::y#0 = bitmap_plot::y#4 bitmap_line_xdyi::y#3 } { bitmap_plot::c#1 = bitmap_plot::c#5 bitmap_line_xdyi::c#3 bitmap_line_xdyi::c#0 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_xdyi:534 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#0 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::x#0 = bitmap_line_xdyi::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_plot::x#0 = bitmap_plot::x#4 bitmap_line_xdyi::x#3 } { bitmap_plot::y#0 = bitmap_plot::y#4 bitmap_line_xdyi::y#3 } { bitmap_plot::c#1 = bitmap_plot::c#5 bitmap_line_xdyi::c#3 bitmap_line_xdyi::c#0 bitmap_line::c#10 bitmap_line::c#0 } } main:15::bitmap_line:143::bitmap_line_xdyi:584 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#0 ] { { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_plot::x#0 = bitmap_plot::x#4 bitmap_line_xdyi::x#3 } { bitmap_plot::y#0 = bitmap_plot::y#4 bitmap_line_xdyi::y#3 } { bitmap_plot::c#1 = bitmap_plot::c#5 bitmap_line_xdyi::c#3 bitmap_line_xdyi::c#1 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_xdyi:584 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#0 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::x#1 = bitmap_line_xdyi::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_plot::x#0 = bitmap_plot::x#4 bitmap_line_xdyi::x#3 } { bitmap_plot::y#0 = bitmap_plot::y#4 bitmap_line_xdyi::y#3 } { bitmap_plot::c#1 = bitmap_plot::c#5 bitmap_line_xdyi::c#3 bitmap_line_xdyi::c#1 bitmap_line::c#10 bitmap_line::c#0 } } ) always clobbers reg byte a -Statement [693] bitmap_plot::y#0 = bitmap_line_xdyi::y#3 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#0 bitmap_plot::y#0 ] ( main:15::bitmap_line:143::bitmap_line_xdyi:534 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#0 bitmap_plot::y#0 ] { { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_plot::x#0 = bitmap_plot::x#4 bitmap_line_xdyi::x#3 } { bitmap_plot::y#0 = bitmap_plot::y#4 bitmap_line_xdyi::y#3 } { bitmap_plot::c#1 = bitmap_plot::c#5 bitmap_line_xdyi::c#3 bitmap_line_xdyi::c#0 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_xdyi:534 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#0 bitmap_plot::y#0 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::x#0 = bitmap_line_xdyi::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_plot::x#0 = bitmap_plot::x#4 bitmap_line_xdyi::x#3 } { bitmap_plot::y#0 = bitmap_plot::y#4 bitmap_line_xdyi::y#3 } { bitmap_plot::c#1 = bitmap_plot::c#5 bitmap_line_xdyi::c#3 bitmap_line_xdyi::c#0 bitmap_line::c#10 bitmap_line::c#0 } } main:15::bitmap_line:143::bitmap_line_xdyi:584 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#0 bitmap_plot::y#0 ] { { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_plot::x#0 = bitmap_plot::x#4 bitmap_line_xdyi::x#3 } { bitmap_plot::y#0 = bitmap_plot::y#4 bitmap_line_xdyi::y#3 } { bitmap_plot::c#1 = bitmap_plot::c#5 bitmap_line_xdyi::c#3 bitmap_line_xdyi::c#1 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_xdyi:584 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#0 bitmap_plot::y#0 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::x#1 = bitmap_line_xdyi::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_plot::x#0 = bitmap_plot::x#4 bitmap_line_xdyi::x#3 } { bitmap_plot::y#0 = bitmap_plot::y#4 bitmap_line_xdyi::y#3 } { bitmap_plot::c#1 = bitmap_plot::c#5 bitmap_line_xdyi::c#3 bitmap_line_xdyi::c#1 bitmap_line::c#10 bitmap_line::c#0 } } ) always clobbers reg byte a -Statement [697] bitmap_line_xdyi::e#1 = bitmap_line_xdyi::e#3 + bitmap_line_xdyi::yd#2 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ( main:15::bitmap_line:143::bitmap_line_xdyi:534 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] { { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 } { bitmap_line_xdyi::c#0 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyi:534 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::x#0 = bitmap_line_xdyi::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyi::c#0 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } } main:15::bitmap_line:143::bitmap_line_xdyi:584 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] { { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 } { bitmap_line_xdyi::c#1 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyi:584 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::x#1 = bitmap_line_xdyi::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyi::c#1 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } } ) always clobbers reg byte a -Statement [698] if(bitmap_line_xdyi::xd#5>=bitmap_line_xdyi::e#1) goto bitmap_line_xdyi::@2 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ( main:15::bitmap_line:143::bitmap_line_xdyi:534 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] { { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 } { bitmap_line_xdyi::c#0 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyi:534 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::x#0 = bitmap_line_xdyi::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyi::c#0 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } } main:15::bitmap_line:143::bitmap_line_xdyi:584 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] { { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 } { bitmap_line_xdyi::c#1 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyi:584 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::x#1 = bitmap_line_xdyi::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyi::c#1 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } } ) always clobbers reg byte a -Statement [700] bitmap_line_xdyi::e#2 = bitmap_line_xdyi::e#1 - bitmap_line_xdyi::xd#5 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ( main:15::bitmap_line:143::bitmap_line_xdyi:534 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] { { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 } { bitmap_line_xdyi::c#0 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyi:534 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::x#0 = bitmap_line_xdyi::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyi::c#0 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } } main:15::bitmap_line:143::bitmap_line_xdyi:584 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] { { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 } { bitmap_line_xdyi::c#1 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyi:584 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::x#1 = bitmap_line_xdyi::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyi::c#1 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } } ) always clobbers reg byte a -Statement [702] bitmap_line_xdyi::$6 = bitmap_line_xdyi::x1#6 + 1 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#6 bitmap_line_xdyi::e#6 bitmap_line_xdyi::$6 ] ( main:15::bitmap_line:143::bitmap_line_xdyi:534 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#6 bitmap_line_xdyi::e#6 bitmap_line_xdyi::$6 ] { { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 } { bitmap_line_xdyi::c#0 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyi:534 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#6 bitmap_line_xdyi::e#6 bitmap_line_xdyi::$6 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::x#0 = bitmap_line_xdyi::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyi::c#0 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } } main:15::bitmap_line:143::bitmap_line_xdyi:584 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#6 bitmap_line_xdyi::e#6 bitmap_line_xdyi::$6 ] { { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 } { bitmap_line_xdyi::c#1 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyi:584 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#6 bitmap_line_xdyi::e#6 bitmap_line_xdyi::$6 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::x#1 = bitmap_line_xdyi::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyi::c#1 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } } ) always clobbers reg byte a -Statement [703] if(bitmap_line_xdyi::x#2!=bitmap_line_xdyi::$6) goto bitmap_line_xdyi::@1 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#6 bitmap_line_xdyi::e#6 ] ( main:15::bitmap_line:143::bitmap_line_xdyi:534 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#6 bitmap_line_xdyi::e#6 ] { { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 } { bitmap_line_xdyi::c#0 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyi:534 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#6 bitmap_line_xdyi::e#6 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::x#0 = bitmap_line_xdyi::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyi::c#0 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } } main:15::bitmap_line:143::bitmap_line_xdyi:584 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#6 bitmap_line_xdyi::e#6 ] { { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 } { bitmap_line_xdyi::c#1 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyi:584 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#6 bitmap_line_xdyi::e#6 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::x#1 = bitmap_line_xdyi::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyi::c#1 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } } ) always clobbers reg byte a -Statement [706] bitmap_line_ydxd::e#0 = bitmap_line_ydxd::xd#2 >> 1 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ( main:15::bitmap_line:143::bitmap_line_ydxd:543 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] { { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:543 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } } main:15::bitmap_line:143::bitmap_line_ydxd:561 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] { { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:561 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:131 [ bitmap_line_ydxd::c#3 bitmap_line_ydxd::c#0 bitmap_line_ydxd::c#1 ] -Statement [708] bitmap_plot::x#3 = bitmap_line_ydxd::x#3 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#3 ] ( main:15::bitmap_line:143::bitmap_line_ydxd:543 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#3 ] { { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line_ydxd::x#3 } { bitmap_plot::y#3 = bitmap_plot::y#4 bitmap_line_ydxd::y#2 } { bitmap_plot::c#4 = bitmap_plot::c#5 bitmap_line_ydxd::c#3 bitmap_line_ydxd::c#0 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_ydxd:543 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#3 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line_ydxd::x#3 } { bitmap_plot::y#3 = bitmap_plot::y#4 bitmap_line_ydxd::y#2 } { bitmap_plot::c#4 = bitmap_plot::c#5 bitmap_line_ydxd::c#3 bitmap_line_ydxd::c#0 bitmap_line::c#10 bitmap_line::c#0 } } main:15::bitmap_line:143::bitmap_line_ydxd:561 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#3 ] { { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line_ydxd::x#3 } { bitmap_plot::y#3 = bitmap_plot::y#4 bitmap_line_ydxd::y#2 } { bitmap_plot::c#4 = bitmap_plot::c#5 bitmap_line_ydxd::c#3 bitmap_line_ydxd::c#1 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_ydxd:561 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#3 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line_ydxd::x#3 } { bitmap_plot::y#3 = bitmap_plot::y#4 bitmap_line_ydxd::y#2 } { bitmap_plot::c#4 = bitmap_plot::c#5 bitmap_line_ydxd::c#3 bitmap_line_ydxd::c#1 bitmap_line::c#10 bitmap_line::c#0 } } ) always clobbers reg byte a -Statement [709] bitmap_plot::y#3 = bitmap_line_ydxd::y#2 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#3 bitmap_plot::y#3 ] ( main:15::bitmap_line:143::bitmap_line_ydxd:543 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#3 bitmap_plot::y#3 ] { { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line_ydxd::x#3 } { bitmap_plot::y#3 = bitmap_plot::y#4 bitmap_line_ydxd::y#2 } { bitmap_plot::c#4 = bitmap_plot::c#5 bitmap_line_ydxd::c#3 bitmap_line_ydxd::c#0 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_ydxd:543 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#3 bitmap_plot::y#3 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line_ydxd::x#3 } { bitmap_plot::y#3 = bitmap_plot::y#4 bitmap_line_ydxd::y#2 } { bitmap_plot::c#4 = bitmap_plot::c#5 bitmap_line_ydxd::c#3 bitmap_line_ydxd::c#0 bitmap_line::c#10 bitmap_line::c#0 } } main:15::bitmap_line:143::bitmap_line_ydxd:561 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#3 bitmap_plot::y#3 ] { { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line_ydxd::x#3 } { bitmap_plot::y#3 = bitmap_plot::y#4 bitmap_line_ydxd::y#2 } { bitmap_plot::c#4 = bitmap_plot::c#5 bitmap_line_ydxd::c#3 bitmap_line_ydxd::c#1 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_ydxd:561 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#3 bitmap_plot::y#3 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line_ydxd::x#3 } { bitmap_plot::y#3 = bitmap_plot::y#4 bitmap_line_ydxd::y#2 } { bitmap_plot::c#4 = bitmap_plot::c#5 bitmap_line_ydxd::c#3 bitmap_line_ydxd::c#1 bitmap_line::c#10 bitmap_line::c#0 } } ) always clobbers reg byte a -Statement [713] bitmap_line_ydxd::e#1 = bitmap_line_ydxd::e#3 + bitmap_line_ydxd::xd#2 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ( main:15::bitmap_line:143::bitmap_line_ydxd:543 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] { { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:543 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } } main:15::bitmap_line:143::bitmap_line_ydxd:561 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] { { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:561 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } } ) always clobbers reg byte a -Statement [714] if(bitmap_line_ydxd::yd#5>=bitmap_line_ydxd::e#1) goto bitmap_line_ydxd::@2 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ( main:15::bitmap_line:143::bitmap_line_ydxd:543 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] { { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:543 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } } main:15::bitmap_line:143::bitmap_line_ydxd:561 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] { { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:561 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } } ) always clobbers reg byte a -Statement [715] bitmap_line_ydxd::x#2 = -- bitmap_line_ydxd::x#3 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 bitmap_line_ydxd::x#2 ] ( main:15::bitmap_line:143::bitmap_line_ydxd:543 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 bitmap_line_ydxd::x#2 ] { { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:543 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 bitmap_line_ydxd::x#2 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } } main:15::bitmap_line:143::bitmap_line_ydxd:561 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 bitmap_line_ydxd::x#2 ] { { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:561 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 bitmap_line_ydxd::x#2 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } } ) always clobbers reg byte a -Statement [716] bitmap_line_ydxd::e#2 = bitmap_line_ydxd::e#1 - bitmap_line_ydxd::yd#5 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ( main:15::bitmap_line:143::bitmap_line_ydxd:543 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] { { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:543 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } } main:15::bitmap_line:143::bitmap_line_ydxd:561 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] { { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:561 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } } ) always clobbers reg byte a -Statement [718] bitmap_line_ydxd::$6 = bitmap_line_ydxd::y1#6 + 1 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#6 bitmap_line_ydxd::$6 ] ( main:15::bitmap_line:143::bitmap_line_ydxd:543 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#6 bitmap_line_ydxd::$6 ] { { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:543 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#6 bitmap_line_ydxd::$6 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } } main:15::bitmap_line:143::bitmap_line_ydxd:561 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#6 bitmap_line_ydxd::$6 ] { { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:561 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#6 bitmap_line_ydxd::$6 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } } ) always clobbers reg byte a -Statement [719] if(bitmap_line_ydxd::y#3!=bitmap_line_ydxd::$6) goto bitmap_line_ydxd::@1 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#6 ] ( main:15::bitmap_line:143::bitmap_line_ydxd:543 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#6 ] { { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:543 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#6 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } } main:15::bitmap_line:143::bitmap_line_ydxd:561 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#6 ] { { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:561 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#6 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } } ) always clobbers reg byte a -Statement [722] bitmap_line_xdyd::e#0 = bitmap_line_xdyd::yd#2 >> 1 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ( main:15::bitmap_line:143::bitmap_line_xdyd:550 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] { { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:550 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::x#0 = bitmap_line_xdyd::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } } main:15::bitmap_line:143::bitmap_line_xdyd:568 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] { { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:568 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::x#1 = bitmap_line_xdyd::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:132 [ bitmap_line_xdyd::c#3 bitmap_line_xdyd::c#1 bitmap_line_xdyd::c#0 ] -Statement [724] bitmap_plot::x#1 = bitmap_line_xdyd::x#3 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#1 ] ( main:15::bitmap_line:143::bitmap_line_xdyd:550 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#1 ] { { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line_xdyd::x#3 } { bitmap_plot::y#1 = bitmap_plot::y#4 bitmap_line_xdyd::y#3 } { bitmap_plot::c#2 = bitmap_plot::c#5 bitmap_line_xdyd::c#3 bitmap_line_xdyd::c#0 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_xdyd:550 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#1 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::x#0 = bitmap_line_xdyd::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line_xdyd::x#3 } { bitmap_plot::y#1 = bitmap_plot::y#4 bitmap_line_xdyd::y#3 } { bitmap_plot::c#2 = bitmap_plot::c#5 bitmap_line_xdyd::c#3 bitmap_line_xdyd::c#0 bitmap_line::c#10 bitmap_line::c#0 } } main:15::bitmap_line:143::bitmap_line_xdyd:568 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#1 ] { { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line_xdyd::x#3 } { bitmap_plot::y#1 = bitmap_plot::y#4 bitmap_line_xdyd::y#3 } { bitmap_plot::c#2 = bitmap_plot::c#5 bitmap_line_xdyd::c#3 bitmap_line_xdyd::c#1 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_xdyd:568 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#1 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::x#1 = bitmap_line_xdyd::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line_xdyd::x#3 } { bitmap_plot::y#1 = bitmap_plot::y#4 bitmap_line_xdyd::y#3 } { bitmap_plot::c#2 = bitmap_plot::c#5 bitmap_line_xdyd::c#3 bitmap_line_xdyd::c#1 bitmap_line::c#10 bitmap_line::c#0 } } ) always clobbers reg byte a -Statement [725] bitmap_plot::y#1 = bitmap_line_xdyd::y#3 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#1 bitmap_plot::y#1 ] ( main:15::bitmap_line:143::bitmap_line_xdyd:550 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#1 bitmap_plot::y#1 ] { { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line_xdyd::x#3 } { bitmap_plot::y#1 = bitmap_plot::y#4 bitmap_line_xdyd::y#3 } { bitmap_plot::c#2 = bitmap_plot::c#5 bitmap_line_xdyd::c#3 bitmap_line_xdyd::c#0 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_xdyd:550 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#1 bitmap_plot::y#1 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::x#0 = bitmap_line_xdyd::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line_xdyd::x#3 } { bitmap_plot::y#1 = bitmap_plot::y#4 bitmap_line_xdyd::y#3 } { bitmap_plot::c#2 = bitmap_plot::c#5 bitmap_line_xdyd::c#3 bitmap_line_xdyd::c#0 bitmap_line::c#10 bitmap_line::c#0 } } main:15::bitmap_line:143::bitmap_line_xdyd:568 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#1 bitmap_plot::y#1 ] { { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line_xdyd::x#3 } { bitmap_plot::y#1 = bitmap_plot::y#4 bitmap_line_xdyd::y#3 } { bitmap_plot::c#2 = bitmap_plot::c#5 bitmap_line_xdyd::c#3 bitmap_line_xdyd::c#1 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_xdyd:568 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#1 bitmap_plot::y#1 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::x#1 = bitmap_line_xdyd::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line_xdyd::x#3 } { bitmap_plot::y#1 = bitmap_plot::y#4 bitmap_line_xdyd::y#3 } { bitmap_plot::c#2 = bitmap_plot::c#5 bitmap_line_xdyd::c#3 bitmap_line_xdyd::c#1 bitmap_line::c#10 bitmap_line::c#0 } } ) always clobbers reg byte a -Statement [729] bitmap_line_xdyd::e#1 = bitmap_line_xdyd::e#3 + bitmap_line_xdyd::yd#2 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ( main:15::bitmap_line:143::bitmap_line_xdyd:550 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] { { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:550 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::x#0 = bitmap_line_xdyd::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } } main:15::bitmap_line:143::bitmap_line_xdyd:568 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] { { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:568 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::x#1 = bitmap_line_xdyd::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } } ) always clobbers reg byte a -Statement [730] if(bitmap_line_xdyd::xd#5>=bitmap_line_xdyd::e#1) goto bitmap_line_xdyd::@2 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ( main:15::bitmap_line:143::bitmap_line_xdyd:550 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] { { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:550 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::x#0 = bitmap_line_xdyd::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } } main:15::bitmap_line:143::bitmap_line_xdyd:568 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] { { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:568 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::x#1 = bitmap_line_xdyd::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } } ) always clobbers reg byte a -Statement [731] bitmap_line_xdyd::y#2 = -- bitmap_line_xdyd::y#3 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 bitmap_line_xdyd::y#2 ] ( main:15::bitmap_line:143::bitmap_line_xdyd:550 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 bitmap_line_xdyd::y#2 ] { { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:550 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 bitmap_line_xdyd::y#2 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::x#0 = bitmap_line_xdyd::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } } main:15::bitmap_line:143::bitmap_line_xdyd:568 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 bitmap_line_xdyd::y#2 ] { { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:568 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 bitmap_line_xdyd::y#2 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::x#1 = bitmap_line_xdyd::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } } ) always clobbers reg byte a -Statement [732] bitmap_line_xdyd::e#2 = bitmap_line_xdyd::e#1 - bitmap_line_xdyd::xd#5 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ( main:15::bitmap_line:143::bitmap_line_xdyd:550 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] { { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:550 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::x#0 = bitmap_line_xdyd::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } } main:15::bitmap_line:143::bitmap_line_xdyd:568 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] { { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:568 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::x#1 = bitmap_line_xdyd::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } } ) always clobbers reg byte a -Statement [734] bitmap_line_xdyd::$6 = bitmap_line_xdyd::x1#6 + 1 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#6 bitmap_line_xdyd::e#6 bitmap_line_xdyd::$6 ] ( main:15::bitmap_line:143::bitmap_line_xdyd:550 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#6 bitmap_line_xdyd::e#6 bitmap_line_xdyd::$6 ] { { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:550 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#6 bitmap_line_xdyd::e#6 bitmap_line_xdyd::$6 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::x#0 = bitmap_line_xdyd::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } } main:15::bitmap_line:143::bitmap_line_xdyd:568 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#6 bitmap_line_xdyd::e#6 bitmap_line_xdyd::$6 ] { { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:568 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#6 bitmap_line_xdyd::e#6 bitmap_line_xdyd::$6 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::x#1 = bitmap_line_xdyd::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } } ) always clobbers reg byte a -Statement [735] if(bitmap_line_xdyd::x#2!=bitmap_line_xdyd::$6) goto bitmap_line_xdyd::@1 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#6 bitmap_line_xdyd::e#6 ] ( main:15::bitmap_line:143::bitmap_line_xdyd:550 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#6 bitmap_line_xdyd::e#6 ] { { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:550 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#6 bitmap_line_xdyd::e#6 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::x#0 = bitmap_line_xdyd::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } } main:15::bitmap_line:143::bitmap_line_xdyd:568 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#6 bitmap_line_xdyd::e#6 ] { { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:568 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#6 bitmap_line_xdyd::e#6 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::x#1 = bitmap_line_xdyd::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } } ) always clobbers reg byte a -Statement [741] divr16u::$2 = divr16u::$1 & $80 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:15::modr16u:152::divr16u:597 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] { { modr16u::dividend#0 = modr16u::dividend#4 rand::return#2 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#2 } { divr16u::divisor#0 = modr16u::divisor#4 } } main:15::modr16u:158::divr16u:597 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] { { modr16u::dividend#1 = modr16u::dividend#4 rand::return#3 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#3 } { divr16u::divisor#0 = modr16u::divisor#4 } } main:15::modr16u:164::divr16u:597 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 bitmap_line::x1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] { { modr16u::dividend#2 = modr16u::dividend#4 rand::return#10 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#4 } { divr16u::divisor#0 = modr16u::divisor#4 } } main:15::modr16u:170::divr16u:597 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] { { modr16u::dividend#3 = modr16u::dividend#4 rand::return#11 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#10 } { divr16u::divisor#0 = modr16u::divisor#4 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:156 [ divr16u::i#2 divr16u::i#1 ] -Statement [743] divr16u::rem#1 = divr16u::rem#0 | 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:15::modr16u:152::divr16u:597 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { modr16u::dividend#0 = modr16u::dividend#4 rand::return#2 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#2 } { divr16u::divisor#0 = modr16u::divisor#4 } } main:15::modr16u:158::divr16u:597 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { modr16u::dividend#1 = modr16u::dividend#4 rand::return#3 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#3 } { divr16u::divisor#0 = modr16u::divisor#4 } } main:15::modr16u:164::divr16u:597 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 bitmap_line::x1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { modr16u::dividend#2 = modr16u::dividend#4 rand::return#10 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#4 } { divr16u::divisor#0 = modr16u::divisor#4 } } main:15::modr16u:170::divr16u:597 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { modr16u::dividend#3 = modr16u::dividend#4 rand::return#11 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#10 } { divr16u::divisor#0 = modr16u::divisor#4 } } ) always clobbers reg byte a -Statement [747] if(divr16u::rem#5> 7 [ screensize::hscale#0 ] ( screensize:20 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::hscale#0 ] { } conio_x16_init:13::screensize:20 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::hscale#0 ] { } ) always clobbers reg byte a -Statement [184] screensize::$1 = $28 << screensize::hscale#0 [ screensize::$1 ] ( screensize:20 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$1 ] { } conio_x16_init:13::screensize:20 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$1 ] { } ) always clobbers reg byte a -Statement [186] screensize::vscale#0 = *VERA_DC_VSCALE >> 7 [ screensize::vscale#0 ] ( screensize:20 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::vscale#0 ] { } conio_x16_init:13::screensize:20 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::vscale#0 ] { } ) always clobbers reg byte a -Statement [187] screensize::$3 = $1e << screensize::vscale#0 [ screensize::$3 ] ( screensize:20 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$3 ] { } conio_x16_init:13::screensize:20 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$3 ] { } ) always clobbers reg byte a -Statement [190] conio_screen_layer = 1 [ conio_screen_layer ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer ] { { vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_bank::return#0 = vera_layer_get_mapbase_bank::return#2 } } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer ] { { vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_bank::return#0 = vera_layer_get_mapbase_bank::return#2 } } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer ] { { vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_bank::return#0 = vera_layer_get_mapbase_bank::return#2 } } main:15::screenlayer:132 [ conio_screen_layer ] { { vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_bank::return#0 = vera_layer_get_mapbase_bank::return#2 } } ) always clobbers reg byte a -Statement [197] vera_layer_get_mapbase_offset::return#2 = vera_layer_get_mapbase_offset::return#0 [ conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#2 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#2 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#2 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#2 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } main:15::screenlayer:132 [ conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#2 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } ) always clobbers reg byte a -Statement [198] CONIO_SCREEN_TEXT#17 = vera_layer_get_mapbase_offset::return#2 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:15::screenlayer:132 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } ) always clobbers reg byte a -Statement [200] screenlayer::vera_layer_get_width1_$2 = screenlayer::vera_layer_get_width1_layer#0 << 1 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$2 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$2 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$2 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$2 ] { } main:15::screenlayer:132 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$2 ] { } ) always clobbers reg byte a -Statement [201] screenlayer::vera_layer_get_width1_config#0 = vera_layer_config[screenlayer::vera_layer_get_width1_$2] [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_config#0 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_config#0 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_config#0 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_config#0 ] { } main:15::screenlayer:132 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_config#0 ] { } ) always clobbers reg byte a -Statement [202] screenlayer::vera_layer_get_width1_$0 = *screenlayer::vera_layer_get_width1_config#0 & VERA_LAYER_WIDTH_MASK [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$0 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$0 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$0 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$0 ] { } main:15::screenlayer:132 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$0 ] { } ) always clobbers reg byte a reg byte y -Statement [203] screenlayer::vera_layer_get_width1_$1 = screenlayer::vera_layer_get_width1_$0 >> 4 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$1 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$1 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$1 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$1 ] { } main:15::screenlayer:132 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$1 ] { } ) always clobbers reg byte a -Statement [204] screenlayer::vera_layer_get_width1_$3 = screenlayer::vera_layer_get_width1_$1 << 1 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$3 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$3 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$3 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$3 ] { } main:15::screenlayer:132 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$3 ] { } ) always clobbers reg byte a -Statement [205] screenlayer::vera_layer_get_width1_return#0 = VERA_LAYER_WIDTH[screenlayer::vera_layer_get_width1_$3] [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#0 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#0 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#0 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#0 ] { } main:15::screenlayer:132 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#0 ] { } ) always clobbers reg byte a -Statement [206] screenlayer::vera_layer_get_width1_return#1 = screenlayer::vera_layer_get_width1_return#0 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#1 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#1 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#1 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#1 ] { } main:15::screenlayer:132 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#1 ] { } ) always clobbers reg byte a -Statement [207] screenlayer::$2 = screenlayer::vera_layer_get_width1_return#1 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$2 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$2 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$2 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$2 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } main:15::screenlayer:132 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$2 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } ) always clobbers reg byte a -Statement [208] conio_width = screenlayer::$2 [ conio_screen_layer conio_width CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer conio_width CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } main:15::screenlayer:132 [ conio_screen_layer conio_width CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } ) always clobbers reg byte a -Statement [216] vera_layer_get_rowskip::return#2 = vera_layer_get_rowskip::return#0 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#2 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#2 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#2 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#2 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } main:15::screenlayer:132 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#2 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } ) always clobbers reg byte a -Statement [217] screenlayer::$4 = vera_layer_get_rowskip::return#2 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$4 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$4 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$4 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$4 ] { } main:15::screenlayer:132 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$4 ] { } ) always clobbers reg byte a -Statement [218] conio_rowskip = screenlayer::$4 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:15::screenlayer:132 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } ) always clobbers reg byte a -Statement [220] screenlayer::vera_layer_get_height1_$2 = screenlayer::vera_layer_get_height1_layer#0 << 1 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$2 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$2 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$2 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$2 ] { } main:15::screenlayer:132 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$2 ] { } ) always clobbers reg byte a -Statement [221] screenlayer::vera_layer_get_height1_config#0 = vera_layer_config[screenlayer::vera_layer_get_height1_$2] [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_config#0 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_config#0 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_config#0 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_config#0 ] { } main:15::screenlayer:132 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_config#0 ] { } ) always clobbers reg byte a -Statement [222] screenlayer::vera_layer_get_height1_$0 = *screenlayer::vera_layer_get_height1_config#0 & VERA_LAYER_HEIGHT_MASK [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$0 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$0 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$0 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$0 ] { } main:15::screenlayer:132 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$0 ] { } ) always clobbers reg byte a reg byte y -Statement [223] screenlayer::vera_layer_get_height1_$1 = screenlayer::vera_layer_get_height1_$0 >> 6 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$1 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$1 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$1 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$1 ] { } main:15::screenlayer:132 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$1 ] { } ) always clobbers reg byte a -Statement [224] screenlayer::vera_layer_get_height1_$3 = screenlayer::vera_layer_get_height1_$1 << 1 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$3 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$3 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$3 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$3 ] { } main:15::screenlayer:132 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$3 ] { } ) always clobbers reg byte a -Statement [225] screenlayer::vera_layer_get_height1_return#0 = VERA_LAYER_HEIGHT[screenlayer::vera_layer_get_height1_$3] [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#0 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#0 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#0 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#0 ] { } main:15::screenlayer:132 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#0 ] { } ) always clobbers reg byte a -Statement [226] screenlayer::vera_layer_get_height1_return#1 = screenlayer::vera_layer_get_height1_return#0 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#1 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#1 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#1 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#1 ] { } main:15::screenlayer:132 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#1 ] { } ) always clobbers reg byte a -Statement [227] screenlayer::$5 = screenlayer::vera_layer_get_height1_return#1 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$5 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$5 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$5 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$5 ] { } main:15::screenlayer:132 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$5 ] { } ) always clobbers reg byte a -Statement [228] conio_height = screenlayer::$5 [ conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] ( screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } conio_x16_init:13::screenlayer:22 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:15::screenlayer:77 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:15::screenlayer:132 [ conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } ) always clobbers reg byte a -Statement [237] vera_layer_set_mapbase::$0 = vera_layer_set_mapbase::layer#3 << 1 [ vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] ( vera_layer_set_mapbase:28 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } conio_x16_init:13::vera_layer_set_mapbase:28 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } vera_layer_set_mapbase:30 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } conio_x16_init:13::vera_layer_set_mapbase:30 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } main:15::vera_layer_mode_tile:73::vera_layer_set_mapbase:321 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:18::vera_layer_mode_tile:179::vera_layer_set_mapbase:321 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179::vera_layer_set_mapbase:321 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a -Statement [238] vera_layer_set_mapbase::addr#0 = vera_layer_mapbase[vera_layer_set_mapbase::$0] [ vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] ( vera_layer_set_mapbase:28 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } conio_x16_init:13::vera_layer_set_mapbase:28 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } vera_layer_set_mapbase:30 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } conio_x16_init:13::vera_layer_set_mapbase:30 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } main:15::vera_layer_mode_tile:73::vera_layer_set_mapbase:321 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:18::vera_layer_mode_tile:179::vera_layer_set_mapbase:321 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179::vera_layer_set_mapbase:321 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a -Statement [239] *vera_layer_set_mapbase::addr#0 = vera_layer_set_mapbase::mapbase#3 [ ] ( vera_layer_set_mapbase:28 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 ] { } conio_x16_init:13::vera_layer_set_mapbase:28 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 ] { } vera_layer_set_mapbase:30 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 ] { } conio_x16_init:13::vera_layer_set_mapbase:30 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 ] { } main:15::vera_layer_mode_tile:73::vera_layer_set_mapbase:321 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:18::vera_layer_mode_tile:179::vera_layer_set_mapbase:321 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179::vera_layer_set_mapbase:321 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a reg byte y -Statement [242] if(gotoxy::y#7<=conio_screen_height) goto gotoxy::@4 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] ( gotoxy:35 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { { gotoxy::y#1 = gotoxy::y#7 conio_x16_init::line#3 } } conio_x16_init:13::gotoxy:35 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { { gotoxy::y#1 = gotoxy::y#7 conio_x16_init::line#3 } } main:15::gotoxy:85 [ conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { } main:15::gotoxy:100 [ conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { } main:15::gotoxy:117 [ conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { } main:15::gotoxy:121 [ conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { } main:15::printf_str:87::cputc:403::cputln:63::cscroll:271::gotoxy:622 [ CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { { gotoxy::y#2 = gotoxy::y#7 } } main:15::printf_str:89::cputc:403::cputln:63::cscroll:271::gotoxy:622 [ CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { { gotoxy::y#2 = gotoxy::y#7 } } main:15::printf_str:91::cputc:403::cputln:63::cscroll:271::gotoxy:622 [ CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { { gotoxy::y#2 = gotoxy::y#7 } } main:15::printf_str:93::cputc:403::cputln:63::cscroll:271::gotoxy:622 [ CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { { gotoxy::y#2 = gotoxy::y#7 } } main:15::printf_str:104::cputc:403::cputln:63::cscroll:271::gotoxy:622 [ CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { { gotoxy::y#2 = gotoxy::y#7 } } main:15::printf_str:119::cputc:403::cputln:63::cscroll:271::gotoxy:622 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { { gotoxy::y#2 = gotoxy::y#7 } } main:15::printf_str:125::cputc:403::cputln:63::cscroll:271::gotoxy:622 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { { gotoxy::y#2 = gotoxy::y#7 } } main:15::printf_str:87::cputc:403::cputln:67::cscroll:271::gotoxy:622 [ CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { { gotoxy::y#2 = gotoxy::y#7 } } main:15::printf_str:89::cputc:403::cputln:67::cscroll:271::gotoxy:622 [ CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { { gotoxy::y#2 = gotoxy::y#7 } } main:15::printf_str:91::cputc:403::cputln:67::cscroll:271::gotoxy:622 [ CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { { gotoxy::y#2 = gotoxy::y#7 } } main:15::printf_str:93::cputc:403::cputln:67::cscroll:271::gotoxy:622 [ CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { { gotoxy::y#2 = gotoxy::y#7 } } main:15::printf_str:104::cputc:403::cputln:67::cscroll:271::gotoxy:622 [ CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { { gotoxy::y#2 = gotoxy::y#7 } } main:15::printf_str:119::cputc:403::cputln:67::cscroll:271::gotoxy:622 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { { gotoxy::y#2 = gotoxy::y#7 } } main:15::printf_str:125::cputc:403::cputln:67::cscroll:271::gotoxy:622 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { { gotoxy::y#2 = gotoxy::y#7 } } main:15::printf_str:87::cputc:403::cputln:69::cscroll:271::gotoxy:622 [ CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { { gotoxy::y#2 = gotoxy::y#7 } } main:15::printf_str:89::cputc:403::cputln:69::cscroll:271::gotoxy:622 [ CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { { gotoxy::y#2 = gotoxy::y#7 } } main:15::printf_str:91::cputc:403::cputln:69::cscroll:271::gotoxy:622 [ CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { { gotoxy::y#2 = gotoxy::y#7 } } main:15::printf_str:93::cputc:403::cputln:69::cscroll:271::gotoxy:622 [ CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { { gotoxy::y#2 = gotoxy::y#7 } } main:15::printf_str:104::cputc:403::cputln:69::cscroll:271::gotoxy:622 [ CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { { gotoxy::y#2 = gotoxy::y#7 } } main:15::printf_str:119::cputc:403::cputln:69::cscroll:271::gotoxy:622 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { { gotoxy::y#2 = gotoxy::y#7 } } main:15::printf_str:125::cputc:403::cputln:69::cscroll:271::gotoxy:622 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#7 ] { { gotoxy::y#2 = gotoxy::y#7 } } ) always clobbers reg byte a -Statement [245] if(0> 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a -Statement [322] vera_layer_mode_tile::$6 = word0 vera_layer_mode_tile::tilebase_address#10 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } ) always clobbers reg byte a -Statement [323] vera_tilebase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$6 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } ) always clobbers reg byte a -Statement [326] vera_tilebase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::tilebase_address#10 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } ) always clobbers reg byte a -Statement [327] vera_layer_mode_tile::tilebase_address#0 = vera_layer_mode_tile::tilebase_address#10 >> 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } ) always clobbers reg byte a -Statement [329] vera_layer_mode_tile::tilebase#1 = vera_layer_mode_tile::tilebase#0 & VERA_LAYER_TILEBASE_MASK [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } ) always clobbers reg byte a -Statement [332] vera_layer_mode_tile::tilebase#3 = vera_layer_mode_tile::tilebase#1 | VERA_TILEBASE_WIDTH_16 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } ) always clobbers reg byte a -Statement [336] vera_layer_mode_tile::tilebase#5 = vera_layer_mode_tile::tilebase#12 | VERA_TILEBASE_HEIGHT_16 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } ) always clobbers reg byte a -Statement [342] vera_layer_mode_tile::config#11 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_128 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } ) always clobbers reg byte a -Statement [343] vera_layer_mode_tile::config#10 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_64 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } ) always clobbers reg byte a -Statement [344] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 8 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } ) always clobbers reg byte a -Statement [345] vera_layer_mode_tile::$13 = vera_layer_mode_tile::layer#10 << 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$13 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$13 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$13 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$13 ] { } ) always clobbers reg byte a -Statement [346] vera_layer_rowskip[vera_layer_mode_tile::$13] = $100 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } ) always clobbers reg byte a -Statement [347] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 7 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } ) always clobbers reg byte a -Statement [348] vera_layer_mode_tile::$12 = vera_layer_mode_tile::layer#10 << 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$12 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$12 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$12 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$12 ] { } ) always clobbers reg byte a -Statement [349] vera_layer_rowskip[vera_layer_mode_tile::$12] = $80 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } ) always clobbers reg byte a -Statement [350] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 6 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } ) always clobbers reg byte a -Statement [351] vera_layer_mode_tile::$11 = vera_layer_mode_tile::layer#10 << 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$11 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$11 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$11 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$11 ] { } ) always clobbers reg byte a -Statement [352] vera_layer_rowskip[vera_layer_mode_tile::$11] = $40 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] ( main:15::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_mode_tile:179 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } ) always clobbers reg byte a -Statement [354] *vera_tilebase_offset = 0 [ ] ( main:15::vera_layer_mode_bitmap:75 [ conio_screen_width conio_screen_height ] { } ) always clobbers reg byte a -Statement [355] *vera_tilebase_bank = 0 [ ] ( main:15::vera_layer_mode_bitmap:75 [ conio_screen_width conio_screen_height ] { } ) always clobbers reg byte a -Statement [356] *vera_tilebase_address = vera_layer_mode_bitmap::bitmap_address#1 [ ] ( main:15::vera_layer_mode_bitmap:75 [ conio_screen_width conio_screen_height ] { } ) always clobbers reg byte a -Statement [357] *VERA_DC_HSCALE = $40 [ ] ( main:15::vera_layer_mode_bitmap:75 [ conio_screen_width conio_screen_height ] { } ) always clobbers reg byte a -Statement [358] *VERA_DC_VSCALE = $40 [ ] ( main:15::vera_layer_mode_bitmap:75 [ conio_screen_width conio_screen_height ] { } ) always clobbers reg byte a -Statement [364] clrscr::line_text#0 = (char *)CONIO_SCREEN_TEXT#17 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::line_text#0 ] ( main:15::clrscr:83 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::line_text#0 ] { { vera_layer_get_backcolor::layer#0 = conio_screen_layer } { vera_layer_get_backcolor::return#0 = vera_layer_get_backcolor::return#1 } } main:15::clrscr:115 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::line_text#0 ] { { vera_layer_get_backcolor::layer#0 = conio_screen_layer } { vera_layer_get_backcolor::return#0 = vera_layer_get_backcolor::return#1 } } main:15::clrscr:138 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::line_text#0 ] { { vera_layer_get_backcolor::layer#0 = conio_screen_layer } { vera_layer_get_backcolor::return#0 = vera_layer_get_backcolor::return#1 } } ) always clobbers reg byte a -Statement [369] clrscr::$1 = clrscr::$0 << 4 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::line_text#0 clrscr::$1 ] ( main:15::clrscr:83 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::line_text#0 clrscr::$1 ] { { vera_layer_get_textcolor::layer#0 = conio_screen_layer } { vera_layer_get_textcolor::return#0 = vera_layer_get_textcolor::return#1 } } main:15::clrscr:115 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::line_text#0 clrscr::$1 ] { { vera_layer_get_textcolor::layer#0 = conio_screen_layer } { vera_layer_get_textcolor::return#0 = vera_layer_get_textcolor::return#1 } } main:15::clrscr:138 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 clrscr::line_text#0 clrscr::$1 ] { { vera_layer_get_textcolor::layer#0 = conio_screen_layer } { vera_layer_get_textcolor::return#0 = vera_layer_get_textcolor::return#1 } } ) always clobbers reg byte a -Statement [376] if(clrscr::l#2> 3 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 bitmap_init::$7 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 bitmap_init::$7 ] { } ) always clobbers reg byte a -Statement [428] bitmap_init::$23 = bitmap_init::x#10 << 1 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 bitmap_init::$7 bitmap_init::$23 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 bitmap_init::$7 bitmap_init::$23 ] { } ) always clobbers reg byte a -Statement [429] bitmap_init::$29 = __bitmap_plot_x + bitmap_init::$23 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 bitmap_init::$7 bitmap_init::$29 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 bitmap_init::$7 bitmap_init::$29 ] { } ) always clobbers reg byte a -Potential register analysis [430] *bitmap_init::$29 = bitmap_init::$7 missing fragment Fragment not found _deref_pwum1=vwum2. Attempted variations _deref_pwum1=vwum2 allocation: mem[2] [ bitmap_init::$29 ] mem[2] [ bitmap_init::$7 ] -MISSING FRAGMENTS - Fragment not found _deref_pwum1=vwum2. Attempted variations _deref_pwum1=vwum2 -Statement [430] *bitmap_init::$29 = bitmap_init::$7 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [431] bitmap_init::$30 = __bitmap_plot_bitmask + bitmap_init::x#10 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 bitmap_init::$30 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 bitmap_init::$30 ] { } ) always clobbers reg byte a -Statement [432] *bitmap_init::$30 = bitmap_init::bitmask#10 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 ] { } ) always clobbers reg byte a reg byte y -Statement [433] bitmap_init::$31 = __bitmap_plot_bitshift + bitmap_init::x#10 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 bitmap_init::$31 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 bitmap_init::$31 ] { } ) always clobbers reg byte a -Statement [434] *bitmap_init::$31 = (char)bitmap_init::bitshift#10 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#10 bitmap_init::bitshift#10 ] { } ) always clobbers reg byte a reg byte y -Statement [438] if(__bitmap_color_depth!=1) goto bitmap_init::@3 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 ] { } ) always clobbers reg byte a -Statement [439] bitmap_init::$10 = bitmap_init::x#10 >> 2 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 bitmap_init::$10 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 bitmap_init::$10 ] { } ) always clobbers reg byte a -Statement [440] bitmap_init::$24 = bitmap_init::x#10 << 1 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 bitmap_init::$10 bitmap_init::$24 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 bitmap_init::$10 bitmap_init::$24 ] { } ) always clobbers reg byte a -Statement [441] bitmap_init::$32 = __bitmap_plot_x + bitmap_init::$24 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 bitmap_init::$10 bitmap_init::$32 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 bitmap_init::$10 bitmap_init::$32 ] { } ) always clobbers reg byte a -Potential register analysis [442] *bitmap_init::$32 = bitmap_init::$10 missing fragment Fragment not found _deref_pwum1=vwum2. Attempted variations _deref_pwum1=vwum2 allocation: mem[2] [ bitmap_init::$32 ] mem[2] [ bitmap_init::$10 ] -MISSING FRAGMENTS - Fragment not found _deref_pwum1=vwum2. Attempted variations _deref_pwum1=vwum2 -Statement [442] *bitmap_init::$32 = bitmap_init::$10 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [443] bitmap_init::$33 = __bitmap_plot_bitmask + bitmap_init::x#10 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 bitmap_init::$33 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 bitmap_init::$33 ] { } ) always clobbers reg byte a -Statement [444] *bitmap_init::$33 = bitmap_init::bitmask#11 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 ] { } ) always clobbers reg byte a reg byte y -Statement [445] bitmap_init::$34 = __bitmap_plot_bitshift + bitmap_init::x#10 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 bitmap_init::$34 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 bitmap_init::$34 ] { } ) always clobbers reg byte a -Statement [446] *bitmap_init::$34 = (char)bitmap_init::bitshift#11 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#11 bitmap_init::bitshift#11 ] { } ) always clobbers reg byte a reg byte y -Statement [448] bitmap_init::bitmask#2 = bitmap_init::bitmask#11 >> 2 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#2 bitmap_init::bitmask#2 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#2 bitmap_init::bitmask#2 ] { } ) always clobbers reg byte a -Statement [450] if(__bitmap_color_depth!=2) goto bitmap_init::@4 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 ] { } ) always clobbers reg byte a -Statement [451] bitmap_init::$13 = bitmap_init::x#10 >> 1 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 bitmap_init::$13 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 bitmap_init::$13 ] { } ) always clobbers reg byte a -Statement [452] bitmap_init::$25 = bitmap_init::x#10 << 1 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 bitmap_init::$13 bitmap_init::$25 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 bitmap_init::$13 bitmap_init::$25 ] { } ) always clobbers reg byte a -Statement [453] bitmap_init::$35 = __bitmap_plot_x + bitmap_init::$25 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 bitmap_init::$13 bitmap_init::$35 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 bitmap_init::$13 bitmap_init::$35 ] { } ) always clobbers reg byte a -Potential register analysis [454] *bitmap_init::$35 = bitmap_init::$13 missing fragment Fragment not found _deref_pwum1=vwum2. Attempted variations _deref_pwum1=vwum2 allocation: mem[2] [ bitmap_init::$13 ] mem[2] [ bitmap_init::$35 ] -MISSING FRAGMENTS - Fragment not found _deref_pwum1=vwum2. Attempted variations _deref_pwum1=vwum2 -Statement [454] *bitmap_init::$35 = bitmap_init::$13 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [455] bitmap_init::$36 = __bitmap_plot_bitmask + bitmap_init::x#10 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 bitmap_init::$36 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 bitmap_init::$36 ] { } ) always clobbers reg byte a -Statement [456] *bitmap_init::$36 = bitmap_init::bitmask#12 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 ] { } ) always clobbers reg byte a reg byte y -Statement [457] bitmap_init::$37 = __bitmap_plot_bitshift + bitmap_init::x#10 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 bitmap_init::$37 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 bitmap_init::$37 ] { } ) always clobbers reg byte a -Statement [458] *bitmap_init::$37 = (char)bitmap_init::bitshift#12 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#12 ] { } ) always clobbers reg byte a reg byte y -Statement [459] bitmap_init::bitshift#3 = bitmap_init::bitshift#12 - 4 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#3 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#12 bitmap_init::bitshift#3 ] { } ) always clobbers reg byte a -Statement [460] bitmap_init::bitmask#3 = bitmap_init::bitmask#12 >> 4 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#3 bitmap_init::bitmask#3 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#3 bitmap_init::bitmask#3 ] { } ) always clobbers reg byte a -Statement [462] if(__bitmap_color_depth!=3) goto bitmap_init::@5 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 ] { } ) always clobbers reg byte a -Statement [463] bitmap_init::$26 = bitmap_init::x#10 << 1 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 bitmap_init::$26 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 bitmap_init::$26 ] { } ) always clobbers reg byte a -Statement [464] bitmap_init::$38 = __bitmap_plot_x + bitmap_init::$26 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 bitmap_init::$38 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 bitmap_init::$38 ] { } ) always clobbers reg byte a -Potential register analysis [465] *bitmap_init::$38 = bitmap_init::x#10 missing fragment Fragment not found _deref_pwum1=vwum2. Attempted variations _deref_pwum1=vwum2 allocation: mem[2] [ bitmap_init::x#10 bitmap_init::x#1 ] mem[2] [ bitmap_init::$38 ] -MISSING FRAGMENTS - Fragment not found _deref_pwum1=vwum2. Attempted variations _deref_pwum1=vwum2 -Statement [465] *bitmap_init::$38 = bitmap_init::x#10 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [466] bitmap_init::$39 = __bitmap_plot_bitmask + bitmap_init::x#10 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 bitmap_init::$39 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 bitmap_init::$39 ] { } ) always clobbers reg byte a -Statement [467] *bitmap_init::$39 = bitmap_init::bitmask#13 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 ] { } ) always clobbers reg byte a reg byte y -Statement [468] bitmap_init::$40 = __bitmap_plot_bitshift + bitmap_init::x#10 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 bitmap_init::$40 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 bitmap_init::$40 ] { } ) always clobbers reg byte a -Statement [469] *bitmap_init::$40 = (char)bitmap_init::bitshift#13 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 ] { } ) always clobbers reg byte a reg byte y -Statement [470] if(bitmap_init::bitshift#13>=0) goto bitmap_init::@6 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#13 bitmap_init::bitmask#13 ] { } ) always clobbers reg byte a -Statement [471] bitmap_init::bitshift#4 = bitshifts[__bitmap_color_depth] [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#13 bitmap_init::bitshift#4 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitmask#13 bitmap_init::bitshift#4 ] { } ) always clobbers reg byte a reg byte y -Statement [473] if(bitmap_init::bitmask#13!=0) goto bitmap_init::@7 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#14 bitmap_init::bitmask#13 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#14 bitmap_init::bitmask#13 ] { } ) always clobbers reg byte a -Statement [474] bitmap_init::bitmask#4 = bitmasks[__bitmap_color_depth] [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#14 bitmap_init::bitmask#4 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#10 bitmap_init::bitshift#14 bitmap_init::bitmask#4 ] { } ) always clobbers reg byte a reg byte y -Statement [477] if(bitmap_init::x#1!=$280) goto bitmap_init::@1 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#1 bitmap_init::bitmask#16 bitmap_init::bitshift#14 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::x#1 bitmap_init::bitmask#16 bitmap_init::bitshift#14 ] { } ) always clobbers reg byte a -Statement [478] bitmap_init::$3 = __bitmap_color_depth << 2 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::$3 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::$3 ] { } ) always clobbers reg byte a -Statement [479] bitmap_init::$4 = bitmap_init::$3 + __bitmap_hscale [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::$4 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::$4 ] { } ) always clobbers reg byte a -Statement [480] bitmap_init::$27 = bitmap_init::$4 << 1 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::$27 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::$27 ] { } ) always clobbers reg byte a -Statement [481] bitmap_init::hdelta#0 = hdeltas[bitmap_init::$27] [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 ] { } ) always clobbers reg byte a -Statement [482] bitmap_init::yoffs#0 = __bitmap_address [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 bitmap_init::yoffs#0 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 bitmap_init::yoffs#0 ] { } ) always clobbers reg byte a -Statement [484] bitmap_init::$28 = bitmap_init::y#2 << 2 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$28 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$28 ] { } ) always clobbers reg byte a -Statement [485] bitmap_init::$41 = __bitmap_plot_y + bitmap_init::$28 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$41 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$41 ] { } ) always clobbers reg byte a -Potential register analysis [486] *bitmap_init::$41 = bitmap_init::yoffs#2 missing fragment Fragment not found _deref_pdum1=vdum2. Attempted variations _deref_pdum1=vdum2 allocation: mem[4] [ bitmap_init::yoffs#2 bitmap_init::yoffs#0 bitmap_init::yoffs#1 ] mem[2] [ bitmap_init::$41 ] -MISSING FRAGMENTS - Fragment not found _deref_pdum1=vdum2. Attempted variations _deref_pdum1=vdum2 -Statement [486] *bitmap_init::$41 = bitmap_init::yoffs#2 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 bitmap_init::y#2 bitmap_init::yoffs#2 ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [487] bitmap_init::yoffs#1 = bitmap_init::yoffs#2 + bitmap_init::hdelta#0 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 bitmap_init::y#2 bitmap_init::yoffs#1 ] { } ) always clobbers reg byte a -Statement [489] if(bitmap_init::y#1!=$1e0) goto bitmap_init::@15 [ __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 bitmap_init::y#1 bitmap_init::yoffs#1 ] ( main:15::bitmap_init:96 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_vscale __bitmap_color_depth bitmap_init::hdelta#0 bitmap_init::y#1 bitmap_init::yoffs#1 ] { } ) always clobbers reg byte a -Statement [491] bitmap_clear::$6 = __bitmap_vscale << 1 [ __bitmap_address __bitmap_hscale __bitmap_color_depth bitmap_clear::$6 ] ( main:15::bitmap_clear:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_color_depth bitmap_clear::$6 ] { { mul16u::a#0 = bitmap_clear::hdelta#0 } { mul16u::b#0 = bitmap_clear::vdelta#0 } { mul16u::return#0 = mul16u::res#2 } } ) always clobbers reg byte a -Statement [492] bitmap_clear::vdelta#0 = vdeltas[bitmap_clear::$6] [ __bitmap_address __bitmap_hscale __bitmap_color_depth bitmap_clear::vdelta#0 ] ( main:15::bitmap_clear:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale __bitmap_color_depth bitmap_clear::vdelta#0 ] { { mul16u::a#0 = bitmap_clear::hdelta#0 } { mul16u::b#0 = bitmap_clear::vdelta#0 } { mul16u::return#0 = mul16u::res#2 } } ) always clobbers reg byte a -Statement [493] bitmap_clear::$0 = __bitmap_color_depth << 2 [ __bitmap_address __bitmap_hscale bitmap_clear::vdelta#0 bitmap_clear::$0 ] ( main:15::bitmap_clear:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address __bitmap_hscale bitmap_clear::vdelta#0 bitmap_clear::$0 ] { { mul16u::a#0 = bitmap_clear::hdelta#0 } { mul16u::b#0 = bitmap_clear::vdelta#0 } { mul16u::return#0 = mul16u::res#2 } } ) always clobbers reg byte a -Statement [494] bitmap_clear::$1 = bitmap_clear::$0 + __bitmap_hscale [ __bitmap_address bitmap_clear::vdelta#0 bitmap_clear::$1 ] ( main:15::bitmap_clear:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address bitmap_clear::vdelta#0 bitmap_clear::$1 ] { { mul16u::a#0 = bitmap_clear::hdelta#0 } { mul16u::b#0 = bitmap_clear::vdelta#0 } { mul16u::return#0 = mul16u::res#2 } } ) always clobbers reg byte a -Statement [495] bitmap_clear::$7 = bitmap_clear::$1 << 1 [ __bitmap_address bitmap_clear::vdelta#0 bitmap_clear::$7 ] ( main:15::bitmap_clear:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address bitmap_clear::vdelta#0 bitmap_clear::$7 ] { { mul16u::a#0 = bitmap_clear::hdelta#0 } { mul16u::b#0 = bitmap_clear::vdelta#0 } { mul16u::return#0 = mul16u::res#2 } } ) always clobbers reg byte a -Statement [496] bitmap_clear::hdelta#0 = hdeltas[bitmap_clear::$7] [ __bitmap_address bitmap_clear::vdelta#0 bitmap_clear::hdelta#0 ] ( main:15::bitmap_clear:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address bitmap_clear::vdelta#0 bitmap_clear::hdelta#0 ] { { mul16u::a#0 = bitmap_clear::hdelta#0 } { mul16u::b#0 = bitmap_clear::vdelta#0 } { mul16u::return#0 = mul16u::res#2 } } ) always clobbers reg byte a -Statement [497] mul16u::a#0 = bitmap_clear::hdelta#0 [ __bitmap_address bitmap_clear::vdelta#0 mul16u::a#0 ] ( main:15::bitmap_clear:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address bitmap_clear::vdelta#0 mul16u::a#0 ] { { mul16u::a#0 = bitmap_clear::hdelta#0 } { mul16u::b#0 = bitmap_clear::vdelta#0 } { mul16u::return#0 = mul16u::res#2 } } ) always clobbers reg byte a -Statement [498] mul16u::b#0 = bitmap_clear::vdelta#0 [ __bitmap_address mul16u::a#0 mul16u::b#0 ] ( main:15::bitmap_clear:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address mul16u::a#0 mul16u::b#0 ] { { mul16u::a#0 = bitmap_clear::hdelta#0 } { mul16u::b#0 = bitmap_clear::vdelta#0 } { mul16u::return#0 = mul16u::res#2 } } ) always clobbers reg byte a -Statement [500] mul16u::return#0 = mul16u::res#2 [ __bitmap_address mul16u::return#0 ] ( main:15::bitmap_clear:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address mul16u::return#0 ] { { mul16u::a#0 = bitmap_clear::hdelta#0 } { mul16u::b#0 = bitmap_clear::vdelta#0 } { mul16u::return#0 = mul16u::res#2 } } ) always clobbers reg byte a -Statement [501] bitmap_clear::count#0 = mul16u::return#0 [ __bitmap_address bitmap_clear::count#0 ] ( main:15::bitmap_clear:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 __bitmap_address bitmap_clear::count#0 ] { { memset_vram::vbank#0 = bitmap_clear::vbank#0 } { memset_vram::num#0 = bitmap_clear::count#0 } } ) always clobbers reg byte a -Statement [503] bitmap_clear::vdest#0 = word0 __bitmap_address [ bitmap_clear::count#0 bitmap_clear::vbank#0 bitmap_clear::vdest#0 ] ( main:15::bitmap_clear:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_clear::count#0 bitmap_clear::vbank#0 bitmap_clear::vdest#0 ] { { memset_vram::vbank#0 = bitmap_clear::vbank#0 } { memset_vram::num#0 = bitmap_clear::count#0 } } ) always clobbers reg byte a -Statement [505] memset_vram::vdest#0 = (void *)bitmap_clear::vdest#0 [ bitmap_clear::count#0 memset_vram::vbank#0 memset_vram::vdest#0 ] ( main:15::bitmap_clear:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_clear::count#0 memset_vram::vbank#0 memset_vram::vdest#0 ] { { memset_vram::vbank#0 = bitmap_clear::vbank#0 } { memset_vram::num#0 = bitmap_clear::count#0 } } ) always clobbers reg byte a -Statement [506] memset_vram::num#0 = bitmap_clear::count#0 [ memset_vram::vbank#0 memset_vram::vdest#0 memset_vram::num#0 ] ( main:15::bitmap_clear:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 memset_vram::vbank#0 memset_vram::vdest#0 memset_vram::num#0 ] { { memset_vram::vbank#0 = bitmap_clear::vbank#0 } { memset_vram::num#0 = bitmap_clear::count#0 } } ) always clobbers reg byte a -Statement [509] kbhit::ch = 0 [ kbhit::ch ] ( main:15::kbhit:106 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#23 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 kbhit::ch ] { { kbhit::return#1 = kbhit::return#2 } } main:15::kbhit:127 [ main::x#3 main::color#2 kbhit::ch ] { { kbhit::return#1 = kbhit::return#3 } } ) always clobbers reg byte a -Statement [515] if(bitmap_line::x0#10> 9 [ rand_state#0 rand::$1 ] ( main:15::rand:149 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#0 rand::$1 ] { { rand_state#13 = rand_state#23 } { rand::return#0 = rand::return#2 } } main:15::rand:155 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#0 rand::$1 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#3 } } main:15::rand:161 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#0 rand::$1 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#10 } } main:15::rand:167 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#0 rand::$1 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#11 } } main:15::rand:173 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#0 rand::$1 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#12 } } ) always clobbers reg byte a -Statement [589] rand_state#1 = rand_state#0 ^ rand::$1 [ rand_state#1 ] ( main:15::rand:149 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#1 ] { { rand_state#13 = rand_state#23 } { rand::return#0 = rand::return#2 } } main:15::rand:155 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#1 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#3 } } main:15::rand:161 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#1 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#10 } } main:15::rand:167 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#1 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#11 } } main:15::rand:173 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#1 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#12 } } ) always clobbers reg byte a -Statement [590] rand::$2 = rand_state#1 << 8 [ rand_state#1 rand::$2 ] ( main:15::rand:149 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#1 rand::$2 ] { { rand_state#13 = rand_state#23 } { rand::return#0 = rand::return#2 } } main:15::rand:155 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#1 rand::$2 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#3 } } main:15::rand:161 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#1 rand::$2 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#10 } } main:15::rand:167 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#1 rand::$2 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#11 } } main:15::rand:173 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#1 rand::$2 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#12 } } ) always clobbers reg byte a -Statement [591] rand_state#14 = rand_state#1 ^ rand::$2 [ rand_state#14 ] ( main:15::rand:149 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#14 ] { { rand_state#13 = rand_state#23 } { rand::return#0 = rand::return#2 } } main:15::rand:155 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#14 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#3 } } main:15::rand:161 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#14 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#10 } } main:15::rand:167 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#14 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#11 } } main:15::rand:173 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#14 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#12 } } ) always clobbers reg byte a -Statement [592] rand::return#0 = rand_state#14 [ rand_state#14 rand::return#0 ] ( main:15::rand:149 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#14 rand::return#0 ] { { rand_state#13 = rand_state#23 } { rand::return#0 = rand::return#2 } } main:15::rand:155 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#14 rand::return#0 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#3 } } main:15::rand:161 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#14 rand::return#0 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#10 } } main:15::rand:167 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#14 rand::return#0 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#11 } } main:15::rand:173 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 bitmap_line::y1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 rand_state#14 rand::return#0 ] { { rand_state#13 = rand_state#14 } { rand::return#0 = rand::return#12 } } ) always clobbers reg byte a -Statement [595] divr16u::dividend#1 = modr16u::dividend#4 [ modr16u::divisor#4 divr16u::dividend#1 ] ( main:15::modr16u:152 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 modr16u::divisor#4 divr16u::dividend#1 ] { { modr16u::dividend#0 = modr16u::dividend#4 rand::return#2 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#2 } { divr16u::divisor#0 = modr16u::divisor#4 } } main:15::modr16u:158 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 modr16u::divisor#4 divr16u::dividend#1 ] { { modr16u::dividend#1 = modr16u::dividend#4 rand::return#3 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#3 } { divr16u::divisor#0 = modr16u::divisor#4 } } main:15::modr16u:164 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 bitmap_line::x1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 modr16u::divisor#4 divr16u::dividend#1 ] { { modr16u::dividend#2 = modr16u::dividend#4 rand::return#10 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#4 } { divr16u::divisor#0 = modr16u::divisor#4 } } main:15::modr16u:170 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 modr16u::divisor#4 divr16u::dividend#1 ] { { modr16u::dividend#3 = modr16u::dividend#4 rand::return#11 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#10 } { divr16u::divisor#0 = modr16u::divisor#4 } } ) always clobbers reg byte a -Statement [596] divr16u::divisor#0 = modr16u::divisor#4 [ divr16u::dividend#1 divr16u::divisor#0 ] ( main:15::modr16u:152 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 divr16u::dividend#1 divr16u::divisor#0 ] { { modr16u::dividend#0 = modr16u::dividend#4 rand::return#2 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#2 } { divr16u::divisor#0 = modr16u::divisor#4 } } main:15::modr16u:158 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 divr16u::dividend#1 divr16u::divisor#0 ] { { modr16u::dividend#1 = modr16u::dividend#4 rand::return#3 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#3 } { divr16u::divisor#0 = modr16u::divisor#4 } } main:15::modr16u:164 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 bitmap_line::x1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 divr16u::dividend#1 divr16u::divisor#0 ] { { modr16u::dividend#2 = modr16u::dividend#4 rand::return#10 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#4 } { divr16u::divisor#0 = modr16u::divisor#4 } } main:15::modr16u:170 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 divr16u::dividend#1 divr16u::divisor#0 ] { { modr16u::dividend#3 = modr16u::dividend#4 rand::return#11 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#10 } { divr16u::divisor#0 = modr16u::divisor#4 } } ) always clobbers reg byte a -Statement [598] modr16u::return#0 = rem16u#0 [ modr16u::return#0 ] ( main:15::modr16u:152 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 modr16u::return#0 ] { { modr16u::dividend#0 = modr16u::dividend#4 rand::return#2 } { modr16u::return#0 = modr16u::return#2 } } main:15::modr16u:158 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 modr16u::return#0 ] { { modr16u::dividend#1 = modr16u::dividend#4 rand::return#3 } { modr16u::return#0 = modr16u::return#3 } } main:15::modr16u:164 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 bitmap_line::x1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 modr16u::return#0 ] { { modr16u::dividend#2 = modr16u::dividend#4 rand::return#10 } { modr16u::return#0 = modr16u::return#4 } } main:15::modr16u:170 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 modr16u::return#0 ] { { modr16u::dividend#3 = modr16u::dividend#4 rand::return#11 } { modr16u::return#0 = modr16u::return#10 } } ) always clobbers reg byte a -Statement [600] vera_layer_set_text_color_mode::addr#0 = *(vera_layer_config+vera_layer_mode_text::layer#0*SIZEOF_POINTER) [ vera_layer_set_text_color_mode::addr#0 ] ( vera_layer_mode_text:18::vera_layer_set_text_color_mode:181 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_set_text_color_mode::addr#0 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_set_text_color_mode:181 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_set_text_color_mode::addr#0 ] { } ) always clobbers reg byte a -Statement [601] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 & ~VERA_LAYER_CONFIG_256C [ vera_layer_set_text_color_mode::addr#0 ] ( vera_layer_mode_text:18::vera_layer_set_text_color_mode:181 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_set_text_color_mode::addr#0 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_set_text_color_mode:181 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_set_text_color_mode::addr#0 ] { } ) always clobbers reg byte a reg byte y -Statement [602] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 [ ] ( vera_layer_mode_text:18::vera_layer_set_text_color_mode:181 [ conio_screen_width conio_screen_height conio_x16_init::line#0 ] { } conio_x16_init:13::vera_layer_mode_text:18::vera_layer_set_text_color_mode:181 [ conio_screen_width conio_screen_height conio_x16_init::line#0 ] { } ) always clobbers reg byte a reg byte y -Statement [606] vera_layer_get_mapbase_offset::$0 = vera_layer_get_mapbase_offset::layer#0 << 1 [ vera_layer_get_mapbase_offset::$0 ] ( screenlayer:22::vera_layer_get_mapbase_offset:196 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::$0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } conio_x16_init:13::screenlayer:22::vera_layer_get_mapbase_offset:196 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::$0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } main:15::screenlayer:77::vera_layer_get_mapbase_offset:196 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::$0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } main:15::screenlayer:132::vera_layer_get_mapbase_offset:196 [ conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::$0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } ) always clobbers reg byte a -Statement [607] vera_layer_get_mapbase_offset::return#0 = vera_mapbase_offset[vera_layer_get_mapbase_offset::$0] [ vera_layer_get_mapbase_offset::return#0 ] ( screenlayer:22::vera_layer_get_mapbase_offset:196 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } conio_x16_init:13::screenlayer:22::vera_layer_get_mapbase_offset:196 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } main:15::screenlayer:77::vera_layer_get_mapbase_offset:196 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } main:15::screenlayer:132::vera_layer_get_mapbase_offset:196 [ conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } ) always clobbers reg byte a -Statement [611] vera_layer_get_rowskip::$0 = vera_layer_get_rowskip::layer#0 << 1 [ vera_layer_get_rowskip::$0 ] ( screenlayer:22::vera_layer_get_rowskip:215 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::$0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } conio_x16_init:13::screenlayer:22::vera_layer_get_rowskip:215 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::$0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } main:15::screenlayer:77::vera_layer_get_rowskip:215 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::$0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } main:15::screenlayer:132::vera_layer_get_rowskip:215 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::$0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } ) always clobbers reg byte a -Statement [612] vera_layer_get_rowskip::return#0 = vera_layer_rowskip[vera_layer_get_rowskip::$0] [ vera_layer_get_rowskip::return#0 ] ( screenlayer:22::vera_layer_get_rowskip:215 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } conio_x16_init:13::screenlayer:22::vera_layer_get_rowskip:215 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } main:15::screenlayer:77::vera_layer_get_rowskip:215 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } main:15::screenlayer:132::vera_layer_get_rowskip:215 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } ) always clobbers reg byte a -Statement [614] if(conio_cursor_y[conio_screen_layer]> 1 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] ( main:15::bitmap_line:143::bitmap_line_ydxi:526 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] { { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 } { bitmap_line_ydxi::c#0 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 } } main:15::bitmap_line:177::bitmap_line_ydxi:526 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxi::c#0 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } } main:15::bitmap_line:143::bitmap_line_ydxi:577 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] { { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 } { bitmap_line_ydxi::c#1 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 } } main:15::bitmap_line:177::bitmap_line_ydxi:577 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::x#5 bitmap_line_ydxi::y#6 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::e#0 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxi::c#1 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } } ) always clobbers reg byte a -Statement [676] bitmap_plot::x#2 = bitmap_line_ydxi::x#3 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#2 ] ( main:15::bitmap_line:143::bitmap_line_ydxi:526 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#2 ] { { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line_ydxi::x#3 } { bitmap_plot::y#2 = bitmap_plot::y#4 bitmap_line_ydxi::y#3 } { bitmap_plot::c#3 = bitmap_plot::c#5 bitmap_line_ydxi::c#3 bitmap_line_ydxi::c#0 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_ydxi:526 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#2 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line_ydxi::x#3 } { bitmap_plot::y#2 = bitmap_plot::y#4 bitmap_line_ydxi::y#3 } { bitmap_plot::c#3 = bitmap_plot::c#5 bitmap_line_ydxi::c#3 bitmap_line_ydxi::c#0 bitmap_line::c#10 bitmap_line::c#0 } } main:15::bitmap_line:143::bitmap_line_ydxi:577 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#2 ] { { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line_ydxi::x#3 } { bitmap_plot::y#2 = bitmap_plot::y#4 bitmap_line_ydxi::y#3 } { bitmap_plot::c#3 = bitmap_plot::c#5 bitmap_line_ydxi::c#3 bitmap_line_ydxi::c#1 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_ydxi:577 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#2 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line_ydxi::x#3 } { bitmap_plot::y#2 = bitmap_plot::y#4 bitmap_line_ydxi::y#3 } { bitmap_plot::c#3 = bitmap_plot::c#5 bitmap_line_ydxi::c#3 bitmap_line_ydxi::c#1 bitmap_line::c#10 bitmap_line::c#0 } } ) always clobbers reg byte a -Statement [677] bitmap_plot::y#2 = bitmap_line_ydxi::y#3 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#2 bitmap_plot::y#2 ] ( main:15::bitmap_line:143::bitmap_line_ydxi:526 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#2 bitmap_plot::y#2 ] { { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line_ydxi::x#3 } { bitmap_plot::y#2 = bitmap_plot::y#4 bitmap_line_ydxi::y#3 } { bitmap_plot::c#3 = bitmap_plot::c#5 bitmap_line_ydxi::c#3 bitmap_line_ydxi::c#0 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_ydxi:526 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#2 bitmap_plot::y#2 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line_ydxi::x#3 } { bitmap_plot::y#2 = bitmap_plot::y#4 bitmap_line_ydxi::y#3 } { bitmap_plot::c#3 = bitmap_plot::c#5 bitmap_line_ydxi::c#3 bitmap_line_ydxi::c#0 bitmap_line::c#10 bitmap_line::c#0 } } main:15::bitmap_line:143::bitmap_line_ydxi:577 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#2 bitmap_plot::y#2 ] { { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line_ydxi::x#3 } { bitmap_plot::y#2 = bitmap_plot::y#4 bitmap_line_ydxi::y#3 } { bitmap_plot::c#3 = bitmap_plot::c#5 bitmap_line_ydxi::c#3 bitmap_line_ydxi::c#1 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_ydxi:577 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#3 bitmap_line_ydxi::e#3 bitmap_plot::x#2 bitmap_plot::y#2 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_plot::x#2 = bitmap_plot::x#4 bitmap_line_ydxi::x#3 } { bitmap_plot::y#2 = bitmap_plot::y#4 bitmap_line_ydxi::y#3 } { bitmap_plot::c#3 = bitmap_plot::c#5 bitmap_line_ydxi::c#3 bitmap_line_ydxi::c#1 bitmap_line::c#10 bitmap_line::c#0 } } ) always clobbers reg byte a -Statement [681] bitmap_line_ydxi::e#1 = bitmap_line_ydxi::e#3 + bitmap_line_ydxi::xd#2 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ( main:15::bitmap_line:143::bitmap_line_ydxi:526 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] { { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 } { bitmap_line_ydxi::c#0 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 } } main:15::bitmap_line:177::bitmap_line_ydxi:526 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxi::c#0 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } } main:15::bitmap_line:143::bitmap_line_ydxi:577 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] { { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 } { bitmap_line_ydxi::c#1 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 } } main:15::bitmap_line:177::bitmap_line_ydxi:577 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxi::c#1 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } } ) always clobbers reg byte a -Statement [682] if(bitmap_line_ydxi::yd#5>=bitmap_line_ydxi::e#1) goto bitmap_line_ydxi::@2 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] ( main:15::bitmap_line:143::bitmap_line_ydxi:526 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] { { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 } { bitmap_line_ydxi::c#0 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 } } main:15::bitmap_line:177::bitmap_line_ydxi:526 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxi::c#0 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } } main:15::bitmap_line:143::bitmap_line_ydxi:577 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] { { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 } { bitmap_line_ydxi::c#1 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 } } main:15::bitmap_line:177::bitmap_line_ydxi:577 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#3 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#1 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxi::c#1 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } } ) always clobbers reg byte a -Statement [684] bitmap_line_ydxi::e#2 = bitmap_line_ydxi::e#1 - bitmap_line_ydxi::yd#5 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] ( main:15::bitmap_line:143::bitmap_line_ydxi:526 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] { { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 } { bitmap_line_ydxi::c#0 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 } } main:15::bitmap_line:177::bitmap_line_ydxi:526 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxi::c#0 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } } main:15::bitmap_line:143::bitmap_line_ydxi:577 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] { { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 } { bitmap_line_ydxi::c#1 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 } } main:15::bitmap_line:177::bitmap_line_ydxi:577 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::x#2 bitmap_line_ydxi::e#2 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxi::c#1 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } } ) always clobbers reg byte a -Statement [686] bitmap_line_ydxi::$6 = bitmap_line_ydxi::y1#6 + 1 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#6 bitmap_line_ydxi::$6 ] ( main:15::bitmap_line:143::bitmap_line_ydxi:526 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#6 bitmap_line_ydxi::$6 ] { { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 } { bitmap_line_ydxi::c#0 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 } } main:15::bitmap_line:177::bitmap_line_ydxi:526 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#6 bitmap_line_ydxi::$6 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxi::c#0 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } } main:15::bitmap_line:143::bitmap_line_ydxi:577 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#6 bitmap_line_ydxi::$6 ] { { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 } { bitmap_line_ydxi::c#1 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 } } main:15::bitmap_line:177::bitmap_line_ydxi:577 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#6 bitmap_line_ydxi::$6 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxi::c#1 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } } ) always clobbers reg byte a -Statement [687] if(bitmap_line_ydxi::y#2!=bitmap_line_ydxi::$6) goto bitmap_line_ydxi::@1 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#6 ] ( main:15::bitmap_line:143::bitmap_line_ydxi:526 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#6 ] { { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 } { bitmap_line_ydxi::c#0 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 } } main:15::bitmap_line:177::bitmap_line_ydxi:526 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#6 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxi::xd#0 = bitmap_line_ydxi::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxi::x#0 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxi::y#0 = bitmap_line_ydxi::y#6 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxi::c#0 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxi::yd#0 = bitmap_line_ydxi::yd#5 bitmap_line::yd#2 } { bitmap_line_ydxi::y1#0 = bitmap_line_ydxi::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } } main:15::bitmap_line:143::bitmap_line_ydxi:577 [ main::x#3 main::color#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#6 ] { { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 } { bitmap_line_ydxi::c#1 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 } } main:15::bitmap_line:177::bitmap_line_ydxi:577 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::c#3 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::x#6 bitmap_line_ydxi::y#2 bitmap_line_ydxi::e#6 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxi::xd#1 = bitmap_line_ydxi::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxi::x#1 = bitmap_line_ydxi::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxi::y#1 = bitmap_line_ydxi::y#6 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxi::c#1 = bitmap_line_ydxi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxi::yd#1 = bitmap_line_ydxi::yd#5 bitmap_line::yd#11 } { bitmap_line_ydxi::y1#1 = bitmap_line_ydxi::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } } ) always clobbers reg byte a -Statement [690] bitmap_line_xdyi::e#0 = bitmap_line_xdyi::yd#2 >> 1 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] ( main:15::bitmap_line:143::bitmap_line_xdyi:534 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] { { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 } { bitmap_line_xdyi::c#0 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyi:534 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::x#0 = bitmap_line_xdyi::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyi::c#0 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } } main:15::bitmap_line:143::bitmap_line_xdyi:584 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] { { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 } { bitmap_line_xdyi::c#1 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyi:584 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::x#6 bitmap_line_xdyi::y#5 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::e#0 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::x#1 = bitmap_line_xdyi::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyi::c#1 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } } ) always clobbers reg byte a -Statement [692] bitmap_plot::x#0 = bitmap_line_xdyi::x#3 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#0 ] ( main:15::bitmap_line:143::bitmap_line_xdyi:534 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#0 ] { { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_plot::x#0 = bitmap_plot::x#4 bitmap_line_xdyi::x#3 } { bitmap_plot::y#0 = bitmap_plot::y#4 bitmap_line_xdyi::y#3 } { bitmap_plot::c#1 = bitmap_plot::c#5 bitmap_line_xdyi::c#3 bitmap_line_xdyi::c#0 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_xdyi:534 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#0 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::x#0 = bitmap_line_xdyi::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_plot::x#0 = bitmap_plot::x#4 bitmap_line_xdyi::x#3 } { bitmap_plot::y#0 = bitmap_plot::y#4 bitmap_line_xdyi::y#3 } { bitmap_plot::c#1 = bitmap_plot::c#5 bitmap_line_xdyi::c#3 bitmap_line_xdyi::c#0 bitmap_line::c#10 bitmap_line::c#0 } } main:15::bitmap_line:143::bitmap_line_xdyi:584 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#0 ] { { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_plot::x#0 = bitmap_plot::x#4 bitmap_line_xdyi::x#3 } { bitmap_plot::y#0 = bitmap_plot::y#4 bitmap_line_xdyi::y#3 } { bitmap_plot::c#1 = bitmap_plot::c#5 bitmap_line_xdyi::c#3 bitmap_line_xdyi::c#1 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_xdyi:584 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#0 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::x#1 = bitmap_line_xdyi::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_plot::x#0 = bitmap_plot::x#4 bitmap_line_xdyi::x#3 } { bitmap_plot::y#0 = bitmap_plot::y#4 bitmap_line_xdyi::y#3 } { bitmap_plot::c#1 = bitmap_plot::c#5 bitmap_line_xdyi::c#3 bitmap_line_xdyi::c#1 bitmap_line::c#10 bitmap_line::c#0 } } ) always clobbers reg byte a -Statement [693] bitmap_plot::y#0 = bitmap_line_xdyi::y#3 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#0 bitmap_plot::y#0 ] ( main:15::bitmap_line:143::bitmap_line_xdyi:534 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#0 bitmap_plot::y#0 ] { { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_plot::x#0 = bitmap_plot::x#4 bitmap_line_xdyi::x#3 } { bitmap_plot::y#0 = bitmap_plot::y#4 bitmap_line_xdyi::y#3 } { bitmap_plot::c#1 = bitmap_plot::c#5 bitmap_line_xdyi::c#3 bitmap_line_xdyi::c#0 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_xdyi:534 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#0 bitmap_plot::y#0 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::x#0 = bitmap_line_xdyi::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_plot::x#0 = bitmap_plot::x#4 bitmap_line_xdyi::x#3 } { bitmap_plot::y#0 = bitmap_plot::y#4 bitmap_line_xdyi::y#3 } { bitmap_plot::c#1 = bitmap_plot::c#5 bitmap_line_xdyi::c#3 bitmap_line_xdyi::c#0 bitmap_line::c#10 bitmap_line::c#0 } } main:15::bitmap_line:143::bitmap_line_xdyi:584 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#0 bitmap_plot::y#0 ] { { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_plot::x#0 = bitmap_plot::x#4 bitmap_line_xdyi::x#3 } { bitmap_plot::y#0 = bitmap_plot::y#4 bitmap_line_xdyi::y#3 } { bitmap_plot::c#1 = bitmap_plot::c#5 bitmap_line_xdyi::c#3 bitmap_line_xdyi::c#1 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_xdyi:584 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#3 bitmap_line_xdyi::y#3 bitmap_line_xdyi::e#3 bitmap_plot::x#0 bitmap_plot::y#0 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::x#1 = bitmap_line_xdyi::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_plot::x#0 = bitmap_plot::x#4 bitmap_line_xdyi::x#3 } { bitmap_plot::y#0 = bitmap_plot::y#4 bitmap_line_xdyi::y#3 } { bitmap_plot::c#1 = bitmap_plot::c#5 bitmap_line_xdyi::c#3 bitmap_line_xdyi::c#1 bitmap_line::c#10 bitmap_line::c#0 } } ) always clobbers reg byte a -Statement [697] bitmap_line_xdyi::e#1 = bitmap_line_xdyi::e#3 + bitmap_line_xdyi::yd#2 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ( main:15::bitmap_line:143::bitmap_line_xdyi:534 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] { { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 } { bitmap_line_xdyi::c#0 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyi:534 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::x#0 = bitmap_line_xdyi::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyi::c#0 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } } main:15::bitmap_line:143::bitmap_line_xdyi:584 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] { { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 } { bitmap_line_xdyi::c#1 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyi:584 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::x#1 = bitmap_line_xdyi::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyi::c#1 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } } ) always clobbers reg byte a -Statement [698] if(bitmap_line_xdyi::xd#5>=bitmap_line_xdyi::e#1) goto bitmap_line_xdyi::@2 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] ( main:15::bitmap_line:143::bitmap_line_xdyi:534 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] { { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 } { bitmap_line_xdyi::c#0 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyi:534 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::x#0 = bitmap_line_xdyi::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyi::c#0 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } } main:15::bitmap_line:143::bitmap_line_xdyi:584 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] { { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 } { bitmap_line_xdyi::c#1 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyi:584 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::y#3 bitmap_line_xdyi::x#2 bitmap_line_xdyi::e#1 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::x#1 = bitmap_line_xdyi::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyi::c#1 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } } ) always clobbers reg byte a -Statement [700] bitmap_line_xdyi::e#2 = bitmap_line_xdyi::e#1 - bitmap_line_xdyi::xd#5 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] ( main:15::bitmap_line:143::bitmap_line_xdyi:534 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] { { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 } { bitmap_line_xdyi::c#0 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyi:534 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::x#0 = bitmap_line_xdyi::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyi::c#0 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } } main:15::bitmap_line:143::bitmap_line_xdyi:584 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] { { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 } { bitmap_line_xdyi::c#1 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyi:584 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#2 bitmap_line_xdyi::e#2 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::x#1 = bitmap_line_xdyi::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyi::c#1 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } } ) always clobbers reg byte a -Statement [702] bitmap_line_xdyi::$6 = bitmap_line_xdyi::x1#6 + 1 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#6 bitmap_line_xdyi::e#6 bitmap_line_xdyi::$6 ] ( main:15::bitmap_line:143::bitmap_line_xdyi:534 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#6 bitmap_line_xdyi::e#6 bitmap_line_xdyi::$6 ] { { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 } { bitmap_line_xdyi::c#0 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyi:534 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#6 bitmap_line_xdyi::e#6 bitmap_line_xdyi::$6 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::x#0 = bitmap_line_xdyi::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyi::c#0 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } } main:15::bitmap_line:143::bitmap_line_xdyi:584 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#6 bitmap_line_xdyi::e#6 bitmap_line_xdyi::$6 ] { { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 } { bitmap_line_xdyi::c#1 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyi:584 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#6 bitmap_line_xdyi::e#6 bitmap_line_xdyi::$6 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::x#1 = bitmap_line_xdyi::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyi::c#1 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } } ) always clobbers reg byte a -Statement [703] if(bitmap_line_xdyi::x#2!=bitmap_line_xdyi::$6) goto bitmap_line_xdyi::@1 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#6 bitmap_line_xdyi::e#6 ] ( main:15::bitmap_line:143::bitmap_line_xdyi:534 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#6 bitmap_line_xdyi::e#6 ] { { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 } { bitmap_line_xdyi::c#0 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyi:534 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#6 bitmap_line_xdyi::e#6 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyi::yd#0 = bitmap_line_xdyi::yd#2 bitmap_line::yd#2 } { bitmap_line_xdyi::x#0 = bitmap_line_xdyi::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyi::y#0 = bitmap_line_xdyi::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyi::c#0 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyi::xd#0 = bitmap_line_xdyi::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyi::x1#0 = bitmap_line_xdyi::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } } main:15::bitmap_line:143::bitmap_line_xdyi:584 [ main::x#3 main::color#2 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#6 bitmap_line_xdyi::e#6 ] { { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 } { bitmap_line_xdyi::c#1 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyi:584 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::c#3 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x#2 bitmap_line_xdyi::y#6 bitmap_line_xdyi::e#6 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyi::yd#1 = bitmap_line_xdyi::yd#2 bitmap_line::yd#11 } { bitmap_line_xdyi::x#1 = bitmap_line_xdyi::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyi::y#1 = bitmap_line_xdyi::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyi::c#1 = bitmap_line_xdyi::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyi::xd#1 = bitmap_line_xdyi::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyi::x1#1 = bitmap_line_xdyi::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } } ) always clobbers reg byte a -Statement [706] bitmap_line_ydxd::e#0 = bitmap_line_ydxd::xd#2 >> 1 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] ( main:15::bitmap_line:143::bitmap_line_ydxd:543 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] { { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:543 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } } main:15::bitmap_line:143::bitmap_line_ydxd:561 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] { { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:561 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::x#5 bitmap_line_ydxd::y#7 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::e#0 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } } ) always clobbers reg byte a -Statement [708] bitmap_plot::x#3 = bitmap_line_ydxd::x#3 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#3 ] ( main:15::bitmap_line:143::bitmap_line_ydxd:543 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#3 ] { { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line_ydxd::x#3 } { bitmap_plot::y#3 = bitmap_plot::y#4 bitmap_line_ydxd::y#2 } { bitmap_plot::c#4 = bitmap_plot::c#5 bitmap_line_ydxd::c#3 bitmap_line_ydxd::c#0 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_ydxd:543 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#3 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line_ydxd::x#3 } { bitmap_plot::y#3 = bitmap_plot::y#4 bitmap_line_ydxd::y#2 } { bitmap_plot::c#4 = bitmap_plot::c#5 bitmap_line_ydxd::c#3 bitmap_line_ydxd::c#0 bitmap_line::c#10 bitmap_line::c#0 } } main:15::bitmap_line:143::bitmap_line_ydxd:561 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#3 ] { { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line_ydxd::x#3 } { bitmap_plot::y#3 = bitmap_plot::y#4 bitmap_line_ydxd::y#2 } { bitmap_plot::c#4 = bitmap_plot::c#5 bitmap_line_ydxd::c#3 bitmap_line_ydxd::c#1 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_ydxd:561 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#3 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line_ydxd::x#3 } { bitmap_plot::y#3 = bitmap_plot::y#4 bitmap_line_ydxd::y#2 } { bitmap_plot::c#4 = bitmap_plot::c#5 bitmap_line_ydxd::c#3 bitmap_line_ydxd::c#1 bitmap_line::c#10 bitmap_line::c#0 } } ) always clobbers reg byte a -Statement [709] bitmap_plot::y#3 = bitmap_line_ydxd::y#2 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#3 bitmap_plot::y#3 ] ( main:15::bitmap_line:143::bitmap_line_ydxd:543 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#3 bitmap_plot::y#3 ] { { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line_ydxd::x#3 } { bitmap_plot::y#3 = bitmap_plot::y#4 bitmap_line_ydxd::y#2 } { bitmap_plot::c#4 = bitmap_plot::c#5 bitmap_line_ydxd::c#3 bitmap_line_ydxd::c#0 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_ydxd:543 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#3 bitmap_plot::y#3 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line_ydxd::x#3 } { bitmap_plot::y#3 = bitmap_plot::y#4 bitmap_line_ydxd::y#2 } { bitmap_plot::c#4 = bitmap_plot::c#5 bitmap_line_ydxd::c#3 bitmap_line_ydxd::c#0 bitmap_line::c#10 bitmap_line::c#0 } } main:15::bitmap_line:143::bitmap_line_ydxd:561 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#3 bitmap_plot::y#3 ] { { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line_ydxd::x#3 } { bitmap_plot::y#3 = bitmap_plot::y#4 bitmap_line_ydxd::y#2 } { bitmap_plot::c#4 = bitmap_plot::c#5 bitmap_line_ydxd::c#3 bitmap_line_ydxd::c#1 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_ydxd:561 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#2 bitmap_line_ydxd::e#3 bitmap_plot::x#3 bitmap_plot::y#3 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_plot::x#3 = bitmap_plot::x#4 bitmap_line_ydxd::x#3 } { bitmap_plot::y#3 = bitmap_plot::y#4 bitmap_line_ydxd::y#2 } { bitmap_plot::c#4 = bitmap_plot::c#5 bitmap_line_ydxd::c#3 bitmap_line_ydxd::c#1 bitmap_line::c#10 bitmap_line::c#0 } } ) always clobbers reg byte a -Statement [713] bitmap_line_ydxd::e#1 = bitmap_line_ydxd::e#3 + bitmap_line_ydxd::xd#2 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ( main:15::bitmap_line:143::bitmap_line_ydxd:543 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] { { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:543 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } } main:15::bitmap_line:143::bitmap_line_ydxd:561 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] { { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:561 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } } ) always clobbers reg byte a -Statement [714] if(bitmap_line_ydxd::yd#5>=bitmap_line_ydxd::e#1) goto bitmap_line_ydxd::@2 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] ( main:15::bitmap_line:143::bitmap_line_ydxd:543 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] { { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:543 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } } main:15::bitmap_line:143::bitmap_line_ydxd:561 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] { { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:561 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#3 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } } ) always clobbers reg byte a -Statement [715] bitmap_line_ydxd::x#2 = -- bitmap_line_ydxd::x#3 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 bitmap_line_ydxd::x#2 ] ( main:15::bitmap_line:143::bitmap_line_ydxd:543 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 bitmap_line_ydxd::x#2 ] { { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:543 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 bitmap_line_ydxd::x#2 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } } main:15::bitmap_line:143::bitmap_line_ydxd:561 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 bitmap_line_ydxd::x#2 ] { { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:561 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#1 bitmap_line_ydxd::x#2 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } } ) always clobbers reg byte a -Statement [716] bitmap_line_ydxd::e#2 = bitmap_line_ydxd::e#1 - bitmap_line_ydxd::yd#5 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] ( main:15::bitmap_line:143::bitmap_line_ydxd:543 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] { { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:543 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } } main:15::bitmap_line:143::bitmap_line_ydxd:561 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] { { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:561 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::x#2 bitmap_line_ydxd::e#2 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } } ) always clobbers reg byte a -Statement [718] bitmap_line_ydxd::$6 = bitmap_line_ydxd::y1#6 + 1 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#6 bitmap_line_ydxd::$6 ] ( main:15::bitmap_line:143::bitmap_line_ydxd:543 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#6 bitmap_line_ydxd::$6 ] { { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:543 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#6 bitmap_line_ydxd::$6 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } } main:15::bitmap_line:143::bitmap_line_ydxd:561 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#6 bitmap_line_ydxd::$6 ] { { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:561 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#6 bitmap_line_ydxd::$6 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } } ) always clobbers reg byte a -Statement [719] if(bitmap_line_ydxd::y#3!=bitmap_line_ydxd::$6) goto bitmap_line_ydxd::@1 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#6 ] ( main:15::bitmap_line:143::bitmap_line_ydxd:543 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#6 ] { { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:543 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#6 ] { { bitmap_line::x1#0 = bitmap_line::x1#10 } { bitmap_line_ydxd::xd#0 = bitmap_line_ydxd::xd#2 bitmap_line::xd#2 } { bitmap_line_ydxd::x#0 = bitmap_line_ydxd::x#5 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_ydxd::y#0 = bitmap_line_ydxd::y#7 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_ydxd::c#0 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#0 = bitmap_line_ydxd::yd#5 bitmap_line::yd#1 } { bitmap_line_ydxd::y1#0 = bitmap_line_ydxd::y1#6 bitmap_line::y1#10 bitmap_line::y1#0 } } main:15::bitmap_line:143::bitmap_line_ydxd:561 [ main::x#3 main::color#2 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#6 ] { { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 } } main:15::bitmap_line:177::bitmap_line_ydxd:561 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::c#3 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::x#6 bitmap_line_ydxd::y#3 bitmap_line_ydxd::e#6 ] { { bitmap_line::x0#0 = bitmap_line::x0#10 } { bitmap_line_ydxd::xd#1 = bitmap_line_ydxd::xd#2 bitmap_line::xd#1 } { bitmap_line_ydxd::x#1 = bitmap_line_ydxd::x#5 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_ydxd::y#1 = bitmap_line_ydxd::y#7 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_ydxd::c#1 = bitmap_line_ydxd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_ydxd::yd#1 = bitmap_line_ydxd::yd#5 bitmap_line::yd#10 } { bitmap_line_ydxd::y1#1 = bitmap_line_ydxd::y1#6 bitmap_line::y0#10 bitmap_line::y0#0 } } ) always clobbers reg byte a -Statement [722] bitmap_line_xdyd::e#0 = bitmap_line_xdyd::yd#2 >> 1 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] ( main:15::bitmap_line:143::bitmap_line_xdyd:550 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] { { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:550 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::x#0 = bitmap_line_xdyd::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } } main:15::bitmap_line:143::bitmap_line_xdyd:568 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] { { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:568 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::x#6 bitmap_line_xdyd::y#5 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::e#0 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::x#1 = bitmap_line_xdyd::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } } ) always clobbers reg byte a -Statement [724] bitmap_plot::x#1 = bitmap_line_xdyd::x#3 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#1 ] ( main:15::bitmap_line:143::bitmap_line_xdyd:550 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#1 ] { { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line_xdyd::x#3 } { bitmap_plot::y#1 = bitmap_plot::y#4 bitmap_line_xdyd::y#3 } { bitmap_plot::c#2 = bitmap_plot::c#5 bitmap_line_xdyd::c#3 bitmap_line_xdyd::c#0 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_xdyd:550 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#1 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::x#0 = bitmap_line_xdyd::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line_xdyd::x#3 } { bitmap_plot::y#1 = bitmap_plot::y#4 bitmap_line_xdyd::y#3 } { bitmap_plot::c#2 = bitmap_plot::c#5 bitmap_line_xdyd::c#3 bitmap_line_xdyd::c#0 bitmap_line::c#10 bitmap_line::c#0 } } main:15::bitmap_line:143::bitmap_line_xdyd:568 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#1 ] { { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line_xdyd::x#3 } { bitmap_plot::y#1 = bitmap_plot::y#4 bitmap_line_xdyd::y#3 } { bitmap_plot::c#2 = bitmap_plot::c#5 bitmap_line_xdyd::c#3 bitmap_line_xdyd::c#1 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_xdyd:568 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#1 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::x#1 = bitmap_line_xdyd::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line_xdyd::x#3 } { bitmap_plot::y#1 = bitmap_plot::y#4 bitmap_line_xdyd::y#3 } { bitmap_plot::c#2 = bitmap_plot::c#5 bitmap_line_xdyd::c#3 bitmap_line_xdyd::c#1 bitmap_line::c#10 bitmap_line::c#0 } } ) always clobbers reg byte a -Statement [725] bitmap_plot::y#1 = bitmap_line_xdyd::y#3 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#1 bitmap_plot::y#1 ] ( main:15::bitmap_line:143::bitmap_line_xdyd:550 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#1 bitmap_plot::y#1 ] { { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line_xdyd::x#3 } { bitmap_plot::y#1 = bitmap_plot::y#4 bitmap_line_xdyd::y#3 } { bitmap_plot::c#2 = bitmap_plot::c#5 bitmap_line_xdyd::c#3 bitmap_line_xdyd::c#0 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_xdyd:550 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#1 bitmap_plot::y#1 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::x#0 = bitmap_line_xdyd::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line_xdyd::x#3 } { bitmap_plot::y#1 = bitmap_plot::y#4 bitmap_line_xdyd::y#3 } { bitmap_plot::c#2 = bitmap_plot::c#5 bitmap_line_xdyd::c#3 bitmap_line_xdyd::c#0 bitmap_line::c#10 bitmap_line::c#0 } } main:15::bitmap_line:143::bitmap_line_xdyd:568 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#1 bitmap_plot::y#1 ] { { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line_xdyd::x#3 } { bitmap_plot::y#1 = bitmap_plot::y#4 bitmap_line_xdyd::y#3 } { bitmap_plot::c#2 = bitmap_plot::c#5 bitmap_line_xdyd::c#3 bitmap_line_xdyd::c#1 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } } main:15::bitmap_line:177::bitmap_line_xdyd:568 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#3 bitmap_line_xdyd::y#3 bitmap_line_xdyd::e#3 bitmap_plot::x#1 bitmap_plot::y#1 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::x#1 = bitmap_line_xdyd::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_plot::x#1 = bitmap_plot::x#4 bitmap_line_xdyd::x#3 } { bitmap_plot::y#1 = bitmap_plot::y#4 bitmap_line_xdyd::y#3 } { bitmap_plot::c#2 = bitmap_plot::c#5 bitmap_line_xdyd::c#3 bitmap_line_xdyd::c#1 bitmap_line::c#10 bitmap_line::c#0 } } ) always clobbers reg byte a -Statement [729] bitmap_line_xdyd::e#1 = bitmap_line_xdyd::e#3 + bitmap_line_xdyd::yd#2 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ( main:15::bitmap_line:143::bitmap_line_xdyd:550 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] { { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:550 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::x#0 = bitmap_line_xdyd::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } } main:15::bitmap_line:143::bitmap_line_xdyd:568 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] { { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:568 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::x#1 = bitmap_line_xdyd::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } } ) always clobbers reg byte a -Statement [730] if(bitmap_line_xdyd::xd#5>=bitmap_line_xdyd::e#1) goto bitmap_line_xdyd::@2 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] ( main:15::bitmap_line:143::bitmap_line_xdyd:550 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] { { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:550 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::x#0 = bitmap_line_xdyd::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } } main:15::bitmap_line:143::bitmap_line_xdyd:568 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] { { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:568 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::y#3 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::x#1 = bitmap_line_xdyd::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } } ) always clobbers reg byte a -Statement [731] bitmap_line_xdyd::y#2 = -- bitmap_line_xdyd::y#3 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 bitmap_line_xdyd::y#2 ] ( main:15::bitmap_line:143::bitmap_line_xdyd:550 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 bitmap_line_xdyd::y#2 ] { { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:550 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 bitmap_line_xdyd::y#2 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::x#0 = bitmap_line_xdyd::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } } main:15::bitmap_line:143::bitmap_line_xdyd:568 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 bitmap_line_xdyd::y#2 ] { { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:568 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::e#1 bitmap_line_xdyd::y#2 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::x#1 = bitmap_line_xdyd::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } } ) always clobbers reg byte a -Statement [732] bitmap_line_xdyd::e#2 = bitmap_line_xdyd::e#1 - bitmap_line_xdyd::xd#5 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] ( main:15::bitmap_line:143::bitmap_line_xdyd:550 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] { { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:550 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::x#0 = bitmap_line_xdyd::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } } main:15::bitmap_line:143::bitmap_line_xdyd:568 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] { { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:568 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#2 bitmap_line_xdyd::e#2 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::x#1 = bitmap_line_xdyd::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } } ) always clobbers reg byte a -Statement [734] bitmap_line_xdyd::$6 = bitmap_line_xdyd::x1#6 + 1 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#6 bitmap_line_xdyd::e#6 bitmap_line_xdyd::$6 ] ( main:15::bitmap_line:143::bitmap_line_xdyd:550 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#6 bitmap_line_xdyd::e#6 bitmap_line_xdyd::$6 ] { { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:550 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#6 bitmap_line_xdyd::e#6 bitmap_line_xdyd::$6 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::x#0 = bitmap_line_xdyd::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } } main:15::bitmap_line:143::bitmap_line_xdyd:568 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#6 bitmap_line_xdyd::e#6 bitmap_line_xdyd::$6 ] { { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:568 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#6 bitmap_line_xdyd::e#6 bitmap_line_xdyd::$6 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::x#1 = bitmap_line_xdyd::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } } ) always clobbers reg byte a -Statement [735] if(bitmap_line_xdyd::x#2!=bitmap_line_xdyd::$6) goto bitmap_line_xdyd::@1 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#6 bitmap_line_xdyd::e#6 ] ( main:15::bitmap_line:143::bitmap_line_xdyd:550 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#6 bitmap_line_xdyd::e#6 ] { { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:550 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#6 bitmap_line_xdyd::e#6 ] { { bitmap_line::y0#0 = bitmap_line::y0#10 } { bitmap_line_xdyd::yd#0 = bitmap_line_xdyd::yd#2 bitmap_line::yd#1 } { bitmap_line_xdyd::x#0 = bitmap_line_xdyd::x#6 bitmap_line::x1#10 bitmap_line::x1#0 } { bitmap_line_xdyd::y#0 = bitmap_line_xdyd::y#5 bitmap_line::y1#10 bitmap_line::y1#0 } { bitmap_line_xdyd::c#0 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#0 = bitmap_line_xdyd::xd#5 bitmap_line::xd#2 } { bitmap_line_xdyd::x1#0 = bitmap_line_xdyd::x1#6 bitmap_line::x0#10 bitmap_line::x0#0 } } main:15::bitmap_line:143::bitmap_line_xdyd:568 [ main::x#3 main::color#2 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#6 bitmap_line_xdyd::e#6 ] { { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#1 main::color#2 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#1 bitmap_line::x1#10 bitmap_line::x1#1 bitmap_line::x0#10 bitmap_line::x0#1 main::x#3 } } main:15::bitmap_line:177::bitmap_line_xdyd:568 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::c#3 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x#2 bitmap_line_xdyd::y#6 bitmap_line_xdyd::e#6 ] { { bitmap_line::y1#0 = bitmap_line::y1#10 } { bitmap_line_xdyd::yd#1 = bitmap_line_xdyd::yd#2 bitmap_line::yd#10 } { bitmap_line_xdyd::x#1 = bitmap_line_xdyd::x#6 bitmap_line::x0#10 bitmap_line::x0#0 } { bitmap_line_xdyd::y#1 = bitmap_line_xdyd::y#5 bitmap_line::y0#10 bitmap_line::y0#0 } { bitmap_line_xdyd::c#1 = bitmap_line_xdyd::c#3 bitmap_line::c#10 bitmap_line::c#0 } { bitmap_line_xdyd::xd#1 = bitmap_line_xdyd::xd#5 bitmap_line::xd#1 } { bitmap_line_xdyd::x1#1 = bitmap_line_xdyd::x1#6 bitmap_line::x1#10 bitmap_line::x1#0 } } ) always clobbers reg byte a -Statement [741] divr16u::$2 = divr16u::$1 & $80 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:15::modr16u:152::divr16u:597 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] { { modr16u::dividend#0 = modr16u::dividend#4 rand::return#2 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#2 } { divr16u::divisor#0 = modr16u::divisor#4 } } main:15::modr16u:158::divr16u:597 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] { { modr16u::dividend#1 = modr16u::dividend#4 rand::return#3 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#3 } { divr16u::divisor#0 = modr16u::divisor#4 } } main:15::modr16u:164::divr16u:597 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 bitmap_line::x1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] { { modr16u::dividend#2 = modr16u::dividend#4 rand::return#10 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#4 } { divr16u::divisor#0 = modr16u::divisor#4 } } main:15::modr16u:170::divr16u:597 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] { { modr16u::dividend#3 = modr16u::dividend#4 rand::return#11 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#10 } { divr16u::divisor#0 = modr16u::divisor#4 } } ) always clobbers reg byte a -Statement [743] divr16u::rem#1 = divr16u::rem#0 | 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:15::modr16u:152::divr16u:597 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { modr16u::dividend#0 = modr16u::dividend#4 rand::return#2 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#2 } { divr16u::divisor#0 = modr16u::divisor#4 } } main:15::modr16u:158::divr16u:597 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { modr16u::dividend#1 = modr16u::dividend#4 rand::return#3 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#3 } { divr16u::divisor#0 = modr16u::divisor#4 } } main:15::modr16u:164::divr16u:597 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 bitmap_line::x1#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { modr16u::dividend#2 = modr16u::dividend#4 rand::return#10 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#4 } { divr16u::divisor#0 = modr16u::divisor#4 } } main:15::modr16u:170::divr16u:597 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip rand_state#14 bitmap_line::x0#0 bitmap_line::x1#0 bitmap_line::y0#0 CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { modr16u::dividend#3 = modr16u::dividend#4 rand::return#11 divr16u::dividend#1 } { modr16u::return#0 = modr16u::return#10 } { divr16u::divisor#0 = modr16u::divisor#4 } } ) always clobbers reg byte a -Statement [747] if(divr16u::rem#50 - sta.z conio_width+1 - // [5] conio_height = 0 -- vwuz1=vwuc1 - lda #<0 - sta.z conio_height - lda #>0 - sta.z conio_height+1 - // [6] conio_rowshift = 0 -- vbuz1=vbuc1 - lda #0 - sta.z conio_rowshift - // [7] conio_rowskip = 0 -- vwuz1=vwuc1 - lda #<0 - sta.z conio_rowskip - lda #>0 - sta.z conio_rowskip+1 - // [8] __bitmap_address = 0 -- vduz1=vduc1 - lda #<0 - sta.z __bitmap_address - lda #>0 - sta.z __bitmap_address+1 - lda #<0>>$10 - sta.z __bitmap_address+2 - lda #>0>>$10 - sta.z __bitmap_address+3 - // [9] __bitmap_layer = 0 -- vbuz1=vbuc1 - lda #0 - sta.z __bitmap_layer - // [10] __bitmap_hscale = 0 -- vbuz1=vbuc1 - lda #0 - sta.z __bitmap_hscale - // [11] __bitmap_vscale = 0 -- vbuz1=vbuc1 - lda #0 - sta.z __bitmap_vscale - // [12] __bitmap_color_depth = 0 -- vbuz1=vbuc1 - lda #0 - sta.z __bitmap_color_depth - // [13] call conio_x16_init - jsr conio_x16_init - // [14] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - __b1_from___init1: - jmp __b1 - // __start::@1 - __b1: - // [15] call main - // [70] phi from __start::@1 to main [phi:__start::@1->main] - main_from___b1: - jsr main - jmp __breturn - // __start::@return - __breturn: - // [16] return - rts -} - // conio_x16_init -// Set initial cursor position -conio_x16_init: { - // Position cursor at current line - .label BASIC_CURSOR_LINE = $d6 - .label line = $a8 - // [17] conio_x16_init::line#0 = *conio_x16_init::BASIC_CURSOR_LINE -- vbuz1=_deref_pbuc1 - lda.z BASIC_CURSOR_LINE - sta.z line - // [18] call vera_layer_mode_text - // [178] phi from conio_x16_init to vera_layer_mode_text [phi:conio_x16_init->vera_layer_mode_text] - vera_layer_mode_text_from_conio_x16_init: - jsr vera_layer_mode_text - // [19] phi from conio_x16_init to conio_x16_init::@3 [phi:conio_x16_init->conio_x16_init::@3] - __b3_from_conio_x16_init: - jmp __b3 - // conio_x16_init::@3 - __b3: - // [20] call screensize - jsr screensize - // [21] phi from conio_x16_init::@3 to conio_x16_init::@4 [phi:conio_x16_init::@3->conio_x16_init::@4] - __b4_from___b3: - jmp __b4 - // conio_x16_init::@4 - __b4: - // [22] call screenlayer - jsr screenlayer - // [23] phi from conio_x16_init::@4 to conio_x16_init::@5 [phi:conio_x16_init::@4->conio_x16_init::@5] - __b5_from___b4: - jmp __b5 - // conio_x16_init::@5 - __b5: - // [24] call vera_layer_set_textcolor - // [230] phi from conio_x16_init::@5 to vera_layer_set_textcolor [phi:conio_x16_init::@5->vera_layer_set_textcolor] - vera_layer_set_textcolor_from___b5: - // [230] phi vera_layer_set_textcolor::color#6 = WHITE [phi:conio_x16_init::@5->vera_layer_set_textcolor#0] -- vbuaa=vbuc1 - lda #WHITE - // [230] phi vera_layer_set_textcolor::layer#6 = 1 [phi:conio_x16_init::@5->vera_layer_set_textcolor#1] -- vbuxx=vbuc1 - ldx #1 - jsr vera_layer_set_textcolor - // [25] phi from conio_x16_init::@5 to conio_x16_init::@6 [phi:conio_x16_init::@5->conio_x16_init::@6] - __b6_from___b5: - jmp __b6 - // conio_x16_init::@6 - __b6: - // [26] call vera_layer_set_backcolor - // [233] phi from conio_x16_init::@6 to vera_layer_set_backcolor [phi:conio_x16_init::@6->vera_layer_set_backcolor] - vera_layer_set_backcolor_from___b6: - // [233] phi vera_layer_set_backcolor::color#4 = BLUE [phi:conio_x16_init::@6->vera_layer_set_backcolor#0] -- vbuaa=vbuc1 - lda #BLUE - // [233] phi vera_layer_set_backcolor::layer#4 = 1 [phi:conio_x16_init::@6->vera_layer_set_backcolor#1] -- vbuxx=vbuc1 - ldx #1 - jsr vera_layer_set_backcolor - // [27] phi from conio_x16_init::@6 to conio_x16_init::@7 [phi:conio_x16_init::@6->conio_x16_init::@7] - __b7_from___b6: - jmp __b7 - // conio_x16_init::@7 - __b7: - // [28] call vera_layer_set_mapbase - // [236] phi from conio_x16_init::@7 to vera_layer_set_mapbase [phi:conio_x16_init::@7->vera_layer_set_mapbase] - vera_layer_set_mapbase_from___b7: - // [236] phi vera_layer_set_mapbase::mapbase#3 = $20 [phi:conio_x16_init::@7->vera_layer_set_mapbase#0] -- vbuxx=vbuc1 - ldx #$20 - // [236] phi vera_layer_set_mapbase::layer#3 = 0 [phi:conio_x16_init::@7->vera_layer_set_mapbase#1] -- vbuaa=vbuc1 - lda #0 - jsr vera_layer_set_mapbase - // [29] phi from conio_x16_init::@7 to conio_x16_init::@8 [phi:conio_x16_init::@7->conio_x16_init::@8] - __b8_from___b7: - jmp __b8 - // conio_x16_init::@8 - __b8: - // [30] call vera_layer_set_mapbase - // [236] phi from conio_x16_init::@8 to vera_layer_set_mapbase [phi:conio_x16_init::@8->vera_layer_set_mapbase] - vera_layer_set_mapbase_from___b8: - // [236] phi vera_layer_set_mapbase::mapbase#3 = 0 [phi:conio_x16_init::@8->vera_layer_set_mapbase#0] -- vbuxx=vbuc1 - ldx #0 - // [236] phi vera_layer_set_mapbase::layer#3 = 1 [phi:conio_x16_init::@8->vera_layer_set_mapbase#1] -- vbuaa=vbuc1 - lda #1 - jsr vera_layer_set_mapbase - jmp __b9 - // conio_x16_init::@9 - __b9: - // [31] if(conio_x16_init::line#0conio_x16_init::@1] - __b1_from___b2: - __b1_from___b9: - // [33] phi conio_x16_init::line#3 = conio_x16_init::line#1 [phi:conio_x16_init::@2/conio_x16_init::@9->conio_x16_init::@1#0] -- register_copy - jmp __b1 - // conio_x16_init::@1 - __b1: - // [34] gotoxy::y#1 = conio_x16_init::line#3 -- vbuxx=vbuz1 - ldx.z line - // [35] call gotoxy - // [241] phi from conio_x16_init::@1 to gotoxy [phi:conio_x16_init::@1->gotoxy] - gotoxy_from___b1: - // [241] phi gotoxy::y#7 = gotoxy::y#1 [phi:conio_x16_init::@1->gotoxy#0] -- register_copy - jsr gotoxy - jmp __breturn - // conio_x16_init::@return - __breturn: - // [36] return - rts -} - // cputc -// Output one character at the current cursor position -// Moves the cursor forward. Scrolls the entire screen if needed -// void cputc(__zp($69) char c) -cputc: { - .const OFFSET_STACK_C = 0 - .label __16 = $29 - .label c = $69 - .label conio_addr = $1e - // [38] cputc::c#0 = stackidx(char,cputc::OFFSET_STACK_C) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_C,x - sta.z c - // [39] vera_layer_get_color::layer#0 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [40] call vera_layer_get_color - // [254] phi from cputc to vera_layer_get_color [phi:cputc->vera_layer_get_color] - vera_layer_get_color_from_cputc: - // [254] phi vera_layer_get_color::layer#2 = vera_layer_get_color::layer#0 [phi:cputc->vera_layer_get_color#0] -- register_copy - jsr vera_layer_get_color - // [41] vera_layer_get_color::return#0 = vera_layer_get_color::return#3 - jmp __b7 - // cputc::@7 - __b7: - // [42] cputc::color#0 = vera_layer_get_color::return#0 -- vbuxx=vbuaa - tax - // [43] cputc::$15 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [44] cputc::conio_addr#0 = CONIO_SCREEN_TEXT#12 + conio_line_text[cputc::$15] -- pbuz1=pbuz2_plus_pwuc1_derefidx_vbuaa - tay - clc - lda.z CONIO_SCREEN_TEXT - adc conio_line_text,y - sta.z conio_addr - lda.z CONIO_SCREEN_TEXT+1 - adc conio_line_text+1,y - sta.z conio_addr+1 - // [45] cputc::$2 = conio_cursor_x[conio_screen_layer] << 1 -- vbuaa=pbuc1_derefidx_vbuz1_rol_1 - ldy.z conio_screen_layer - lda conio_cursor_x,y - asl - // [46] cputc::conio_addr#1 = cputc::conio_addr#0 + cputc::$2 -- pbuz1=pbuz1_plus_vbuaa - clc - adc.z conio_addr - sta.z conio_addr - bcc !+ - inc.z conio_addr+1 - !: - // [47] if(cputc::c#0==' ') goto cputc::@1 -- vbuz1_eq_vbuc1_then_la1 - lda #'\n' - cmp.z c - beq __b1_from___b7 - jmp __b2 - // cputc::@2 - __b2: - // [48] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // [49] cputc::$4 = byte0 cputc::conio_addr#1 -- vbuaa=_byte0_pbuz1 - lda.z conio_addr - // [50] *VERA_ADDRX_L = cputc::$4 -- _deref_pbuc1=vbuaa - // Set address - sta VERA_ADDRX_L - // [51] cputc::$5 = byte1 cputc::conio_addr#1 -- vbuaa=_byte1_pbuz1 - lda.z conio_addr+1 - // [52] *VERA_ADDRX_M = cputc::$5 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // [53] cputc::$6 = CONIO_SCREEN_BANK#12 | VERA_INC_1 -- vbuaa=vbuz1_bor_vbuc1 - lda #VERA_INC_1 - ora.z CONIO_SCREEN_BANK - // [54] *VERA_ADDRX_H = cputc::$6 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_H - // [55] *VERA_DATA0 = cputc::c#0 -- _deref_pbuc1=vbuz1 - lda.z c - sta VERA_DATA0 - // [56] *VERA_DATA0 = cputc::color#0 -- _deref_pbuc1=vbuxx - stx VERA_DATA0 - // [57] conio_cursor_x[conio_screen_layer] = ++ conio_cursor_x[conio_screen_layer] -- pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 - ldx.z conio_screen_layer - inc conio_cursor_x,x - // [58] cputc::scroll_enable#0 = conio_scroll_enable[conio_screen_layer] -- vbuaa=pbuc1_derefidx_vbuz1 - ldy.z conio_screen_layer - lda conio_scroll_enable,y - // [59] if(0!=cputc::scroll_enable#0) goto cputc::@5 -- 0_neq_vbuaa_then_la1 - cmp #0 - bne __b5 - jmp __b3 - // cputc::@3 - __b3: - // [60] cputc::$16 = (unsigned int)conio_cursor_x[conio_screen_layer] -- vwuz1=_word_pbuc1_derefidx_vbuz2 - ldy.z conio_screen_layer - lda conio_cursor_x,y - sta.z __16 - lda #0 - sta.z __16+1 - // [61] if(cputc::$16!=conio_width) goto cputc::@return -- vwuz1_neq_vwuz2_then_la1 - lda.z __16+1 - cmp.z conio_width+1 - bne __breturn - lda.z __16 - cmp.z conio_width - bne __breturn - // [62] phi from cputc::@3 to cputc::@4 [phi:cputc::@3->cputc::@4] - __b4_from___b3: - jmp __b4 - // cputc::@4 - __b4: - // [63] call cputln - jsr cputln - jmp __breturn - // cputc::@return - __breturn: - // [64] return - rts - // cputc::@5 - __b5: - // [65] if(conio_cursor_x[conio_screen_layer]!=conio_screen_width) goto cputc::@return -- pbuc1_derefidx_vbuz1_neq_vbuz2_then_la1 - lda.z conio_screen_width - ldy.z conio_screen_layer - cmp conio_cursor_x,y - bne __breturn - // [66] phi from cputc::@5 to cputc::@6 [phi:cputc::@5->cputc::@6] - __b6_from___b5: - jmp __b6 - // cputc::@6 - __b6: - // [67] call cputln - jsr cputln - jmp __breturn - // [68] phi from cputc::@7 to cputc::@1 [phi:cputc::@7->cputc::@1] - __b1_from___b7: - jmp __b1 - // cputc::@1 - __b1: - // [69] call cputln - jsr cputln - jmp __breturn -} - // main -main: { - .label __40 = $6e - .label color = $7e - .label x = $78 - // [71] call memcpy_in_vram - // Before we configure the bitmap pane into vera memory we need to re-arrange a few things! - // It is better to load all in bank 0, but then there is an issue. - // So the default CX16 character set is located in bank 0, at address 0xF800. - // So we need to move this character set to bank 1, suggested is at address 0xF000. - // The CX16 by default writes textual output to layer 1 in text mode, so we need to - // realign the moved character set to 0xf000 as the new tile base for layer 1. - // We also will need to realign for layer 1 the map base from 0x00000 to 0x14000. - // This is now all easily done with a few statements in the new kickc vera lib ... - // [273] phi from main to memcpy_in_vram [phi:main->memcpy_in_vram] - memcpy_in_vram_from_main: - // [273] phi memcpy_in_vram::num#3 = $100*8 [phi:main->memcpy_in_vram#0] -- vwuz1=vwuc1 - lda #<$100*8 - sta.z memcpy_in_vram.num - lda #>$100*8 - sta.z memcpy_in_vram.num+1 - // [273] phi memcpy_in_vram::dest_bank#2 = 1 [phi:main->memcpy_in_vram#1] -- vbuyy=vbuc1 - ldy #1 - // [273] phi memcpy_in_vram::dest#2 = (void *)(char *) 61440 [phi:main->memcpy_in_vram#2] -- pvoz1=pvoc1 - lda #<$f000 - sta.z memcpy_in_vram.dest - lda #>$f000 - sta.z memcpy_in_vram.dest+1 - // [273] phi memcpy_in_vram::src#2 = (void *)(char *) 63488 [phi:main->memcpy_in_vram#3] -- pvoz1=pvoc1 - lda #<$f800 - sta.z memcpy_in_vram.src - lda #>$f800 - sta.z memcpy_in_vram.src+1 - jsr memcpy_in_vram - // [72] phi from main to main::@12 [phi:main->main::@12] - __b12_from_main: - jmp __b12 - // main::@12 - __b12: - // [73] call vera_layer_mode_tile - // We copy the 128 character set of 8 bytes each. - // [292] phi from main::@12 to vera_layer_mode_tile [phi:main::@12->vera_layer_mode_tile] - vera_layer_mode_tile_from___b12: - // [292] phi vera_layer_mode_tile::tileheight#10 = 8 [phi:main::@12->vera_layer_mode_tile#0] -- vbuz1=vbuc1 - lda #8 - sta.z vera_layer_mode_tile.tileheight - // [292] phi vera_layer_mode_tile::tilewidth#10 = 8 [phi:main::@12->vera_layer_mode_tile#1] -- vbuz1=vbuc1 - lda #8 - sta.z vera_layer_mode_tile.tilewidth - // [292] phi vera_layer_mode_tile::tilebase_address#10 = $1f000 [phi:main::@12->vera_layer_mode_tile#2] -- vduz1=vduc1 - lda #<$1f000 - sta.z vera_layer_mode_tile.tilebase_address - lda #>$1f000 - sta.z vera_layer_mode_tile.tilebase_address+1 - lda #<$1f000>>$10 - sta.z vera_layer_mode_tile.tilebase_address+2 - lda #>$1f000>>$10 - sta.z vera_layer_mode_tile.tilebase_address+3 - // [292] phi vera_layer_mode_tile::mapbase_address#10 = $14000 [phi:main::@12->vera_layer_mode_tile#3] -- vduz1=vduc1 - lda #<$14000 - sta.z vera_layer_mode_tile.mapbase_address - lda #>$14000 - sta.z vera_layer_mode_tile.mapbase_address+1 - lda #<$14000>>$10 - sta.z vera_layer_mode_tile.mapbase_address+2 - lda #>$14000>>$10 - sta.z vera_layer_mode_tile.mapbase_address+3 - // [292] phi vera_layer_mode_tile::mapheight#10 = $40 [phi:main::@12->vera_layer_mode_tile#4] -- vwuz1=vbuc1 - lda #<$40 - sta.z vera_layer_mode_tile.mapheight - lda #>$40 - sta.z vera_layer_mode_tile.mapheight+1 - // [292] phi vera_layer_mode_tile::layer#10 = 1 [phi:main::@12->vera_layer_mode_tile#5] -- vbuz1=vbuc1 - lda #1 - sta.z vera_layer_mode_tile.layer - // [292] phi vera_layer_mode_tile::mapwidth#10 = $80 [phi:main::@12->vera_layer_mode_tile#6] -- vwuz1=vbuc1 - lda #<$80 - sta.z vera_layer_mode_tile.mapwidth - lda #>$80 - sta.z vera_layer_mode_tile.mapwidth+1 - jsr vera_layer_mode_tile - // [74] phi from main::@12 to main::@13 [phi:main::@12->main::@13] - __b13_from___b12: - jmp __b13 - // main::@13 - __b13: - // [75] call vera_layer_mode_bitmap - // [353] phi from main::@13 to vera_layer_mode_bitmap [phi:main::@13->vera_layer_mode_bitmap] - vera_layer_mode_bitmap_from___b13: - jsr vera_layer_mode_bitmap - // [76] phi from main::@13 to main::@14 [phi:main::@13->main::@14] - __b14_from___b13: - jmp __b14 - // main::@14 - __b14: - // [77] call screenlayer - jsr screenlayer - jmp textcolor1 - // main::textcolor1 - textcolor1: - // [78] vera_layer_set_textcolor::layer#1 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [79] call vera_layer_set_textcolor - // [230] phi from main::textcolor1 to vera_layer_set_textcolor [phi:main::textcolor1->vera_layer_set_textcolor] - vera_layer_set_textcolor_from_textcolor1: - // [230] phi vera_layer_set_textcolor::color#6 = WHITE [phi:main::textcolor1->vera_layer_set_textcolor#0] -- vbuaa=vbuc1 - lda #WHITE - // [230] phi vera_layer_set_textcolor::layer#6 = vera_layer_set_textcolor::layer#1 [phi:main::textcolor1->vera_layer_set_textcolor#1] -- register_copy - jsr vera_layer_set_textcolor - jmp bgcolor1 - // main::bgcolor1 - bgcolor1: - // [80] vera_layer_set_backcolor::layer#1 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [81] call vera_layer_set_backcolor - // [233] phi from main::bgcolor1 to vera_layer_set_backcolor [phi:main::bgcolor1->vera_layer_set_backcolor] - vera_layer_set_backcolor_from_bgcolor1: - // [233] phi vera_layer_set_backcolor::color#4 = BLACK [phi:main::bgcolor1->vera_layer_set_backcolor#0] -- vbuaa=vbuc1 - lda #BLACK - // [233] phi vera_layer_set_backcolor::layer#4 = vera_layer_set_backcolor::layer#1 [phi:main::bgcolor1->vera_layer_set_backcolor#1] -- register_copy - jsr vera_layer_set_backcolor - // [82] phi from main::bgcolor1 to main::@6 [phi:main::bgcolor1->main::@6] - __b6_from_bgcolor1: - jmp __b6 - // main::@6 - __b6: - // [83] call clrscr - jsr clrscr - // [84] phi from main::@6 to main::@15 [phi:main::@6->main::@15] - __b15_from___b6: - jmp __b15 - // main::@15 - __b15: - // [85] call gotoxy - // [241] phi from main::@15 to gotoxy [phi:main::@15->gotoxy] - gotoxy_from___b15: - // [241] phi gotoxy::y#7 = $19 [phi:main::@15->gotoxy#0] -- vbuxx=vbuc1 - ldx #$19 - jsr gotoxy - // [86] phi from main::@15 to main::@16 [phi:main::@15->main::@16] - __b16_from___b15: - jmp __b16 - // main::@16 - __b16: - // [87] call printf_str - // [396] phi from main::@16 to printf_str [phi:main::@16->printf_str] - printf_str_from___b16: - // [396] phi printf_str::s#9 = main::s [phi:main::@16->printf_str#0] -- pbuz1=pbuc1 - lda #s - sta.z printf_str.s+1 - jsr printf_str - // [88] phi from main::@16 to main::@17 [phi:main::@16->main::@17] - __b17_from___b16: - jmp __b17 - // main::@17 - __b17: - // [89] call printf_str - // [396] phi from main::@17 to printf_str [phi:main::@17->printf_str] - printf_str_from___b17: - // [396] phi printf_str::s#9 = main::s1 [phi:main::@17->printf_str#0] -- pbuz1=pbuc1 - lda #s1 - sta.z printf_str.s+1 - jsr printf_str - // [90] phi from main::@17 to main::@18 [phi:main::@17->main::@18] - __b18_from___b17: - jmp __b18 - // main::@18 - __b18: - // [91] call printf_str - // [396] phi from main::@18 to printf_str [phi:main::@18->printf_str] - printf_str_from___b18: - // [396] phi printf_str::s#9 = main::s2 [phi:main::@18->printf_str#0] -- pbuz1=pbuc1 - lda #s2 - sta.z printf_str.s+1 - jsr printf_str - // [92] phi from main::@18 to main::@19 [phi:main::@18->main::@19] - __b19_from___b18: - jmp __b19 - // main::@19 - __b19: - // [93] call printf_str - // [396] phi from main::@19 to printf_str [phi:main::@19->printf_str] - printf_str_from___b19: - // [396] phi printf_str::s#9 = main::s3 [phi:main::@19->printf_str#0] -- pbuz1=pbuc1 - lda #s3 - sta.z printf_str.s+1 - jsr printf_str - jmp vera_layer_show1 - // main::vera_layer_show1 - vera_layer_show1: - // [94] *VERA_DC_VIDEO = *VERA_DC_VIDEO | *vera_layer_enable -- _deref_pbuc1=_deref_pbuc1_bor__deref_pbuc2 - lda VERA_DC_VIDEO - ora vera_layer_enable - sta VERA_DC_VIDEO - // [95] phi from main::vera_layer_show1 to main::@7 [phi:main::vera_layer_show1->main::@7] - __b7_from_vera_layer_show1: - jmp __b7 - // main::@7 - __b7: - // [96] call bitmap_init - jsr bitmap_init - // [97] phi from main::@7 to main::@20 [phi:main::@7->main::@20] - __b20_from___b7: - jmp __b20 - // main::@20 - __b20: - // [98] call bitmap_clear - jsr bitmap_clear - // [99] phi from main::@20 to main::@21 [phi:main::@20->main::@21] - __b21_from___b20: - jmp __b21 - // main::@21 - __b21: - // [100] call gotoxy - // [241] phi from main::@21 to gotoxy [phi:main::@21->gotoxy] - gotoxy_from___b21: - // [241] phi gotoxy::y#7 = $1d [phi:main::@21->gotoxy#0] -- vbuxx=vbuc1 - ldx #$1d - jsr gotoxy - jmp textcolor2 - // main::textcolor2 - textcolor2: - // [101] vera_layer_set_textcolor::layer#2 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [102] call vera_layer_set_textcolor - // [230] phi from main::textcolor2 to vera_layer_set_textcolor [phi:main::textcolor2->vera_layer_set_textcolor] - vera_layer_set_textcolor_from_textcolor2: - // [230] phi vera_layer_set_textcolor::color#6 = YELLOW [phi:main::textcolor2->vera_layer_set_textcolor#0] -- vbuaa=vbuc1 - lda #YELLOW - // [230] phi vera_layer_set_textcolor::layer#6 = vera_layer_set_textcolor::layer#2 [phi:main::textcolor2->vera_layer_set_textcolor#1] -- register_copy - jsr vera_layer_set_textcolor - // [103] phi from main::textcolor2 to main::@8 [phi:main::textcolor2->main::@8] - __b8_from_textcolor2: - jmp __b8 - // main::@8 - __b8: - // [104] call printf_str - // [396] phi from main::@8 to printf_str [phi:main::@8->printf_str] - printf_str_from___b8: - // [396] phi printf_str::s#9 = main::s4 [phi:main::@8->printf_str#0] -- pbuz1=pbuc1 - lda #s4 - sta.z printf_str.s+1 - jsr printf_str - // [105] phi from main::@8 to main::@1 [phi:main::@8->main::@1] - __b1_from___b8: - // [105] phi rand_state#23 = 1 [phi:main::@8->main::@1#0] -- vwuz1=vwuc1 - lda #<1 - sta.z rand_state - lda #>1 - sta.z rand_state+1 - jmp __b1 - // main::@1 - __b1: - // [106] call kbhit - jsr kbhit - // [107] kbhit::return#2 = kbhit::return#1 - jmp __b22 - // main::@22 - __b22: - // [108] main::$30 = kbhit::return#2 - // [109] if(0==main::$30) goto main::@2 -- 0_eq_vbuaa_then_la1 - cmp #0 - beq __b2_from___b22 - jmp textcolor3 - // main::textcolor3 - textcolor3: - // [110] vera_layer_set_textcolor::layer#3 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [111] call vera_layer_set_textcolor - // [230] phi from main::textcolor3 to vera_layer_set_textcolor [phi:main::textcolor3->vera_layer_set_textcolor] - vera_layer_set_textcolor_from_textcolor3: - // [230] phi vera_layer_set_textcolor::color#6 = WHITE [phi:main::textcolor3->vera_layer_set_textcolor#0] -- vbuaa=vbuc1 - lda #WHITE - // [230] phi vera_layer_set_textcolor::layer#6 = vera_layer_set_textcolor::layer#3 [phi:main::textcolor3->vera_layer_set_textcolor#1] -- register_copy - jsr vera_layer_set_textcolor - jmp bgcolor2 - // main::bgcolor2 - bgcolor2: - // [112] vera_layer_set_backcolor::layer#2 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [113] call vera_layer_set_backcolor - // [233] phi from main::bgcolor2 to vera_layer_set_backcolor [phi:main::bgcolor2->vera_layer_set_backcolor] - vera_layer_set_backcolor_from_bgcolor2: - // [233] phi vera_layer_set_backcolor::color#4 = BLACK [phi:main::bgcolor2->vera_layer_set_backcolor#0] -- vbuaa=vbuc1 - lda #BLACK - // [233] phi vera_layer_set_backcolor::layer#4 = vera_layer_set_backcolor::layer#2 [phi:main::bgcolor2->vera_layer_set_backcolor#1] -- register_copy - jsr vera_layer_set_backcolor - // [114] phi from main::bgcolor2 to main::@9 [phi:main::bgcolor2->main::@9] - __b9_from_bgcolor2: - jmp __b9 - // main::@9 - __b9: - // [115] call clrscr - jsr clrscr - // [116] phi from main::@9 to main::@32 [phi:main::@9->main::@32] - __b32_from___b9: - jmp __b32 - // main::@32 - __b32: - // [117] call gotoxy - // [241] phi from main::@32 to gotoxy [phi:main::@32->gotoxy] - gotoxy_from___b32: - // [241] phi gotoxy::y#7 = $1a [phi:main::@32->gotoxy#0] -- vbuxx=vbuc1 - ldx #$1a - jsr gotoxy - // [118] phi from main::@32 to main::@33 [phi:main::@32->main::@33] - __b33_from___b32: - jmp __b33 - // main::@33 - __b33: - // [119] call printf_str - // [396] phi from main::@33 to printf_str [phi:main::@33->printf_str] - printf_str_from___b33: - // [396] phi printf_str::s#9 = main::s5 [phi:main::@33->printf_str#0] -- pbuz1=pbuc1 - lda #s5 - sta.z printf_str.s+1 - jsr printf_str - // [120] phi from main::@33 to main::@34 [phi:main::@33->main::@34] - __b34_from___b33: - jmp __b34 - // main::@34 - __b34: - // [121] call gotoxy - // [241] phi from main::@34 to gotoxy [phi:main::@34->gotoxy] - gotoxy_from___b34: - // [241] phi gotoxy::y#7 = $1d [phi:main::@34->gotoxy#0] -- vbuxx=vbuc1 - ldx #$1d - jsr gotoxy - jmp textcolor4 - // main::textcolor4 - textcolor4: - // [122] vera_layer_set_textcolor::layer#4 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [123] call vera_layer_set_textcolor - // [230] phi from main::textcolor4 to vera_layer_set_textcolor [phi:main::textcolor4->vera_layer_set_textcolor] - vera_layer_set_textcolor_from_textcolor4: - // [230] phi vera_layer_set_textcolor::color#6 = YELLOW [phi:main::textcolor4->vera_layer_set_textcolor#0] -- vbuaa=vbuc1 - lda #YELLOW - // [230] phi vera_layer_set_textcolor::layer#6 = vera_layer_set_textcolor::layer#4 [phi:main::textcolor4->vera_layer_set_textcolor#1] -- register_copy - jsr vera_layer_set_textcolor - // [124] phi from main::textcolor4 to main::@10 [phi:main::textcolor4->main::@10] - __b10_from_textcolor4: - jmp __b10 - // main::@10 - __b10: - // [125] call printf_str - // [396] phi from main::@10 to printf_str [phi:main::@10->printf_str] - printf_str_from___b10: - // [396] phi printf_str::s#9 = main::s4 [phi:main::@10->printf_str#0] -- pbuz1=pbuc1 - lda #s4 - sta.z printf_str.s+1 - jsr printf_str - // [126] phi from main::@10 to main::@3 [phi:main::@10->main::@3] - __b3_from___b10: - // [126] phi main::color#2 = 0 [phi:main::@10->main::@3#0] -- vbuz1=vbuc1 - lda #0 - sta.z color - // [126] phi main::x#3 = 0 [phi:main::@10->main::@3#1] -- vwuz1=vwuc1 - lda #<0 - sta.z x - lda #>0 - sta.z x+1 - jmp __b3 - // main::@3 - __b3: - // [127] call kbhit - jsr kbhit - // [128] kbhit::return#3 = kbhit::return#1 - jmp __b35 - // main::@35 - __b35: - // [129] main::$43 = kbhit::return#3 - // [130] if(0==main::$43) goto main::@4 -- 0_eq_vbuaa_then_la1 - cmp #0 - beq __b4 - // [131] phi from main::@35 to main::@5 [phi:main::@35->main::@5] - __b5_from___b35: - jmp __b5 - // main::@5 - __b5: - // [132] call screenlayer - jsr screenlayer - jmp textcolor5 - // main::textcolor5 - textcolor5: - // [133] vera_layer_set_textcolor::layer#5 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [134] call vera_layer_set_textcolor - // [230] phi from main::textcolor5 to vera_layer_set_textcolor [phi:main::textcolor5->vera_layer_set_textcolor] - vera_layer_set_textcolor_from_textcolor5: - // [230] phi vera_layer_set_textcolor::color#6 = WHITE [phi:main::textcolor5->vera_layer_set_textcolor#0] -- vbuaa=vbuc1 - lda #WHITE - // [230] phi vera_layer_set_textcolor::layer#6 = vera_layer_set_textcolor::layer#5 [phi:main::textcolor5->vera_layer_set_textcolor#1] -- register_copy - jsr vera_layer_set_textcolor - jmp bgcolor3 - // main::bgcolor3 - bgcolor3: - // [135] vera_layer_set_backcolor::layer#3 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [136] call vera_layer_set_backcolor - // [233] phi from main::bgcolor3 to vera_layer_set_backcolor [phi:main::bgcolor3->vera_layer_set_backcolor] - vera_layer_set_backcolor_from_bgcolor3: - // [233] phi vera_layer_set_backcolor::color#4 = BLUE [phi:main::bgcolor3->vera_layer_set_backcolor#0] -- vbuaa=vbuc1 - lda #BLUE - // [233] phi vera_layer_set_backcolor::layer#4 = vera_layer_set_backcolor::layer#3 [phi:main::bgcolor3->vera_layer_set_backcolor#1] -- register_copy - jsr vera_layer_set_backcolor - // [137] phi from main::bgcolor3 to main::@11 [phi:main::bgcolor3->main::@11] - __b11_from_bgcolor3: - jmp __b11 - // main::@11 - __b11: - // [138] call clrscr - jsr clrscr - jmp __breturn - // main::@return - __breturn: - // [139] return - rts - // main::@4 - __b4: - // [140] bitmap_line::x0#1 = main::x#3 -- vwuz1=vwuz2 - lda.z x - sta.z bitmap_line.x0 - lda.z x+1 - sta.z bitmap_line.x0+1 - // [141] bitmap_line::x1#1 = main::x#3 -- vwuz1=vwuz2 - lda.z x - sta.z bitmap_line.x1 - lda.z x+1 - sta.z bitmap_line.x1+1 - // [142] bitmap_line::c#1 = main::color#2 -- vbuxx=vbuz1 - ldx.z color - // [143] call bitmap_line - // [514] phi from main::@4 to bitmap_line [phi:main::@4->bitmap_line] - bitmap_line_from___b4: - // [514] phi bitmap_line::c#10 = bitmap_line::c#1 [phi:main::@4->bitmap_line#0] -- register_copy - // [514] phi bitmap_line::y1#10 = $c7 [phi:main::@4->bitmap_line#1] -- vwuz1=vbuc1 - lda #<$c7 - sta.z bitmap_line.y1 - lda #>$c7 - sta.z bitmap_line.y1+1 - // [514] phi bitmap_line::y0#10 = 0 [phi:main::@4->bitmap_line#2] -- vwuz1=vbuc1 - lda #<0 - sta.z bitmap_line.y0 - lda #>0 - sta.z bitmap_line.y0+1 - // [514] phi bitmap_line::x1#10 = bitmap_line::x1#1 [phi:main::@4->bitmap_line#3] -- register_copy - // [514] phi bitmap_line::x0#10 = bitmap_line::x0#1 [phi:main::@4->bitmap_line#4] -- register_copy - jsr bitmap_line - jmp __b36 - // main::@36 - __b36: - // [144] main::color#1 = ++ main::color#2 -- vbuz1=_inc_vbuz1 - inc.z color - // [145] main::x#1 = ++ main::x#3 -- vwuz1=_inc_vwuz1 - inc.z x - bne !+ - inc.z x+1 - !: - // [146] if(main::x#1<=$13f) goto main::@37 -- vwuz1_le_vwuc1_then_la1 - lda.z x+1 - cmp #>$13f - bne !+ - lda.z x - cmp #<$13f - !: - bcc __b37_from___b36 - beq __b37_from___b36 - // [126] phi from main::@36 to main::@3 [phi:main::@36->main::@3] - __b3_from___b36: - // [126] phi main::color#2 = main::color#1 [phi:main::@36->main::@3#0] -- register_copy - // [126] phi main::x#3 = 0 [phi:main::@36->main::@3#1] -- vwuz1=vbuc1 - lda #<0 - sta.z x - lda #>0 - sta.z x+1 - jmp __b3 - // [147] phi from main::@36 to main::@37 [phi:main::@36->main::@37] - __b37_from___b36: - jmp __b37 - // main::@37 - __b37: - // [126] phi from main::@37 to main::@3 [phi:main::@37->main::@3] - __b3_from___b37: - // [126] phi main::color#2 = main::color#1 [phi:main::@37->main::@3#0] -- register_copy - // [126] phi main::x#3 = main::x#1 [phi:main::@37->main::@3#1] -- register_copy - jmp __b3 - // [148] phi from main::@22 to main::@2 [phi:main::@22->main::@2] - __b2_from___b22: - jmp __b2 - // main::@2 - __b2: - // [149] call rand - // [585] phi from main::@2 to rand [phi:main::@2->rand] - rand_from___b2: - // [585] phi rand_state#13 = rand_state#23 [phi:main::@2->rand#0] -- register_copy - jsr rand - // [150] rand::return#2 = rand::return#0 - jmp __b23 - // main::@23 - __b23: - // [151] modr16u::dividend#0 = rand::return#2 -- vwuz1=vwuz2 - lda.z rand.return - sta.z modr16u.dividend - lda.z rand.return+1 - sta.z modr16u.dividend+1 - // [152] call modr16u - // [594] phi from main::@23 to modr16u [phi:main::@23->modr16u] - modr16u_from___b23: - // [594] phi modr16u::divisor#4 = $140 [phi:main::@23->modr16u#0] -- vwuz1=vwuc1 - lda #<$140 - sta.z modr16u.divisor - lda #>$140 - sta.z modr16u.divisor+1 - // [594] phi modr16u::dividend#4 = modr16u::dividend#0 [phi:main::@23->modr16u#1] -- register_copy - jsr modr16u - // [153] modr16u::return#2 = modr16u::return#0 - jmp __b24 - // main::@24 - __b24: - // [154] bitmap_line::x0#0 = modr16u::return#2 -- vwuz1=vwuz2 - lda.z modr16u.return - sta.z bitmap_line.x0 - lda.z modr16u.return+1 - sta.z bitmap_line.x0+1 - // [155] call rand - // [585] phi from main::@24 to rand [phi:main::@24->rand] - rand_from___b24: - // [585] phi rand_state#13 = rand_state#14 [phi:main::@24->rand#0] -- register_copy - jsr rand - // [156] rand::return#3 = rand::return#0 - jmp __b25 - // main::@25 - __b25: - // [157] modr16u::dividend#1 = rand::return#3 -- vwuz1=vwuz2 - lda.z rand.return - sta.z modr16u.dividend - lda.z rand.return+1 - sta.z modr16u.dividend+1 - // [158] call modr16u - // [594] phi from main::@25 to modr16u [phi:main::@25->modr16u] - modr16u_from___b25: - // [594] phi modr16u::divisor#4 = $140 [phi:main::@25->modr16u#0] -- vwuz1=vwuc1 - lda #<$140 - sta.z modr16u.divisor - lda #>$140 - sta.z modr16u.divisor+1 - // [594] phi modr16u::dividend#4 = modr16u::dividend#1 [phi:main::@25->modr16u#1] -- register_copy - jsr modr16u - // [159] modr16u::return#3 = modr16u::return#0 - jmp __b26 - // main::@26 - __b26: - // [160] bitmap_line::x1#0 = modr16u::return#3 -- vwuz1=vwuz2 - lda.z modr16u.return - sta.z bitmap_line.x1 - lda.z modr16u.return+1 - sta.z bitmap_line.x1+1 - // [161] call rand - // [585] phi from main::@26 to rand [phi:main::@26->rand] - rand_from___b26: - // [585] phi rand_state#13 = rand_state#14 [phi:main::@26->rand#0] -- register_copy - jsr rand - // [162] rand::return#10 = rand::return#0 - jmp __b27 - // main::@27 - __b27: - // [163] modr16u::dividend#2 = rand::return#10 -- vwuz1=vwuz2 - lda.z rand.return - sta.z modr16u.dividend - lda.z rand.return+1 - sta.z modr16u.dividend+1 - // [164] call modr16u - // [594] phi from main::@27 to modr16u [phi:main::@27->modr16u] - modr16u_from___b27: - // [594] phi modr16u::divisor#4 = $c8 [phi:main::@27->modr16u#0] -- vwuz1=vbuc1 - lda #<$c8 - sta.z modr16u.divisor - lda #>$c8 - sta.z modr16u.divisor+1 - // [594] phi modr16u::dividend#4 = modr16u::dividend#2 [phi:main::@27->modr16u#1] -- register_copy - jsr modr16u - // [165] modr16u::return#4 = modr16u::return#0 - jmp __b28 - // main::@28 - __b28: - // [166] bitmap_line::y0#0 = modr16u::return#4 -- vwuz1=vwuz2 - lda.z modr16u.return - sta.z bitmap_line.y0 - lda.z modr16u.return+1 - sta.z bitmap_line.y0+1 - // [167] call rand - // [585] phi from main::@28 to rand [phi:main::@28->rand] - rand_from___b28: - // [585] phi rand_state#13 = rand_state#14 [phi:main::@28->rand#0] -- register_copy - jsr rand - // [168] rand::return#11 = rand::return#0 - jmp __b29 - // main::@29 - __b29: - // [169] modr16u::dividend#3 = rand::return#11 -- vwuz1=vwuz2 - lda.z rand.return - sta.z modr16u.dividend - lda.z rand.return+1 - sta.z modr16u.dividend+1 - // [170] call modr16u - // [594] phi from main::@29 to modr16u [phi:main::@29->modr16u] - modr16u_from___b29: - // [594] phi modr16u::divisor#4 = $c8 [phi:main::@29->modr16u#0] -- vwuz1=vbuc1 - lda #<$c8 - sta.z modr16u.divisor - lda #>$c8 - sta.z modr16u.divisor+1 - // [594] phi modr16u::dividend#4 = modr16u::dividend#3 [phi:main::@29->modr16u#1] -- register_copy - jsr modr16u - // [171] modr16u::return#10 = modr16u::return#0 - jmp __b30 - // main::@30 - __b30: - // [172] bitmap_line::y1#0 = modr16u::return#10 -- vwuz1=vwuz2 - lda.z modr16u.return - sta.z bitmap_line.y1 - lda.z modr16u.return+1 - sta.z bitmap_line.y1+1 - // [173] call rand - // [585] phi from main::@30 to rand [phi:main::@30->rand] - rand_from___b30: - // [585] phi rand_state#13 = rand_state#14 [phi:main::@30->rand#0] -- register_copy - jsr rand - // [174] rand::return#12 = rand::return#0 - jmp __b31 - // main::@31 - __b31: - // [175] main::$40 = rand::return#12 - // [176] bitmap_line::c#0 = main::$40 & $ff -- vbuxx=vwuz1_band_vbuc1 - lda #$ff - and.z __40 - tax - // [177] call bitmap_line - // [514] phi from main::@31 to bitmap_line [phi:main::@31->bitmap_line] - bitmap_line_from___b31: - // [514] phi bitmap_line::c#10 = bitmap_line::c#0 [phi:main::@31->bitmap_line#0] -- register_copy - // [514] phi bitmap_line::y1#10 = bitmap_line::y1#0 [phi:main::@31->bitmap_line#1] -- register_copy - // [514] phi bitmap_line::y0#10 = bitmap_line::y0#0 [phi:main::@31->bitmap_line#2] -- register_copy - // [514] phi bitmap_line::x1#10 = bitmap_line::x1#0 [phi:main::@31->bitmap_line#3] -- register_copy - // [514] phi bitmap_line::x0#10 = bitmap_line::x0#0 [phi:main::@31->bitmap_line#4] -- register_copy - jsr bitmap_line - // [105] phi from main::@31 to main::@1 [phi:main::@31->main::@1] - __b1_from___b31: - // [105] phi rand_state#23 = rand_state#14 [phi:main::@31->main::@1#0] -- register_copy - jmp __b1 - .segment Data - s: .text @"vera in bitmap mode,\n" - .byte 0 - s1: .text @"color depth 8 bits per pixel.\n" - .byte 0 - s2: .text @"in this mode, it is possible to display\n" - .byte 0 - s3: .text @"graphics in 256 colors.\n" - .byte 0 - s4: .text "press a key ..." - .byte 0 - s5: .text @"here you see all the colors possible.\n" - .byte 0 -} -.segment Code - // vera_layer_mode_text -// Set a vera layer in text mode and configure the: -// - layer: Value of 0 or 1. -// - mapbase_address: A dword typed address (4 bytes), that specifies the full address of the map base. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective mapbase vera register. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// - tilebase_address: A dword typed address (4 bytes), that specifies the base address of the tile map. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective tilebase vera register. -// Note that the resulting vera register holds only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// - mapwidth: The width of the map in number of tiles. -// - mapheight: The height of the map in number of tiles. -// - tilewidth: The width of a tile, which can be 8 or 16 pixels. -// - tileheight: The height of a tile, which can be 8 or 16 pixels. -// - color_mode: The color mode, which can be 16 or 256. -// void vera_layer_mode_text(char layer, unsigned long mapbase_address, unsigned long tilebase_address, unsigned int mapwidth, unsigned int mapheight, char tilewidth, char tileheight, unsigned int color_mode) -vera_layer_mode_text: { - .const mapbase_address = 0 - .const tilebase_address = $f800 - .const mapwidth = $80 - .const mapheight = $40 - .const tilewidth = 8 - .const tileheight = 8 - .label layer = 1 - // [179] call vera_layer_mode_tile - // [292] phi from vera_layer_mode_text to vera_layer_mode_tile [phi:vera_layer_mode_text->vera_layer_mode_tile] - vera_layer_mode_tile_from_vera_layer_mode_text: - // [292] phi vera_layer_mode_tile::tileheight#10 = vera_layer_mode_text::tileheight#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#0] -- vbuz1=vbuc1 - lda #tileheight - sta.z vera_layer_mode_tile.tileheight - // [292] phi vera_layer_mode_tile::tilewidth#10 = vera_layer_mode_text::tilewidth#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#1] -- vbuz1=vbuc1 - lda #tilewidth - sta.z vera_layer_mode_tile.tilewidth - // [292] phi vera_layer_mode_tile::tilebase_address#10 = vera_layer_mode_text::tilebase_address#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#2] -- vduz1=vduc1 - lda #tilebase_address - sta.z vera_layer_mode_tile.tilebase_address+1 - lda #>$10 - sta.z vera_layer_mode_tile.tilebase_address+2 - lda #>tilebase_address>>$10 - sta.z vera_layer_mode_tile.tilebase_address+3 - // [292] phi vera_layer_mode_tile::mapbase_address#10 = vera_layer_mode_text::mapbase_address#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#3] -- vduz1=vduc1 - lda #mapbase_address - sta.z vera_layer_mode_tile.mapbase_address+1 - lda #>$10 - sta.z vera_layer_mode_tile.mapbase_address+2 - lda #>mapbase_address>>$10 - sta.z vera_layer_mode_tile.mapbase_address+3 - // [292] phi vera_layer_mode_tile::mapheight#10 = vera_layer_mode_text::mapheight#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#4] -- vwuz1=vwuc1 - lda #mapheight - sta.z vera_layer_mode_tile.mapheight+1 - // [292] phi vera_layer_mode_tile::layer#10 = vera_layer_mode_text::layer#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#5] -- vbuz1=vbuc1 - lda #layer - sta.z vera_layer_mode_tile.layer - // [292] phi vera_layer_mode_tile::mapwidth#10 = vera_layer_mode_text::mapwidth#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#6] -- vwuz1=vwuc1 - lda #mapwidth - sta.z vera_layer_mode_tile.mapwidth+1 - jsr vera_layer_mode_tile - // [180] phi from vera_layer_mode_text to vera_layer_mode_text::@1 [phi:vera_layer_mode_text->vera_layer_mode_text::@1] - __b1_from_vera_layer_mode_text: - jmp __b1 - // vera_layer_mode_text::@1 - __b1: - // [181] call vera_layer_set_text_color_mode - jsr vera_layer_set_text_color_mode - jmp __breturn - // vera_layer_mode_text::@return - __breturn: - // [182] return - rts -} - // screensize -// Return the current screen size. -// void screensize(char *x, char *y) -screensize: { - .label x = conio_screen_width - .label y = conio_screen_height - // [183] screensize::hscale#0 = *VERA_DC_HSCALE >> 7 -- vbuaa=_deref_pbuc1_ror_7 - // VERA returns in VERA_DC_HSCALE the value of 128 when 80 columns is used in text mode, - // and the value of 64 when 40 columns is used in text mode. - // Basically, 40 columns mode in the VERA is a double scan mode. - // Same for the VERA_DC_VSCALE mode, but then the subdivision is 60 or 30 rows. - // I still need to test the other modes, but this will suffice for now for the pure text modes. - lda VERA_DC_HSCALE - rol - rol - and #1 - // [184] screensize::$1 = $28 << screensize::hscale#0 -- vbuaa=vbuc1_rol_vbuaa - tay - lda #$28 - cpy #0 - beq !e+ - !: - asl - dey - bne !- - !e: - // [185] *screensize::x#0 = screensize::$1 -- _deref_pbuc1=vbuaa - sta.z x - // [186] screensize::vscale#0 = *VERA_DC_VSCALE >> 7 -- vbuaa=_deref_pbuc1_ror_7 - lda VERA_DC_VSCALE - rol - rol - and #1 - // [187] screensize::$3 = $1e << screensize::vscale#0 -- vbuaa=vbuc1_rol_vbuaa - tay - lda #$1e - cpy #0 - beq !e+ - !: - asl - dey - bne !- - !e: - // [188] *screensize::y#0 = screensize::$3 -- _deref_pbuc1=vbuaa - sta.z y - jmp __breturn - // screensize::@return - __breturn: - // [189] return - rts -} - // screenlayer -// Set the layer with which the conio will interact. -// - layer: value of 0 or 1. -// void screenlayer(char layer) -screenlayer: { - .label __2 = $89 - .label __4 = $7f - .label __5 = $8b - .label vera_layer_get_width1_config = $97 - .label vera_layer_get_width1_return = $89 - .label vera_layer_get_height1_config = $99 - .label vera_layer_get_height1_return = $8b - // [190] conio_screen_layer = 1 -- vbuz1=vbuc1 - lda #1 - sta.z conio_screen_layer - // [191] vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [192] call vera_layer_get_mapbase_bank - jsr vera_layer_get_mapbase_bank - // [193] vera_layer_get_mapbase_bank::return#2 = vera_layer_get_mapbase_bank::return#0 - jmp __b3 - // screenlayer::@3 - __b3: - // [194] CONIO_SCREEN_BANK#15 = vera_layer_get_mapbase_bank::return#2 -- vbuz1=vbuaa - sta.z CONIO_SCREEN_BANK_1 - // [195] vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer -- vbuaa=vbuz1 - lda.z conio_screen_layer - // [196] call vera_layer_get_mapbase_offset - jsr vera_layer_get_mapbase_offset - // [197] vera_layer_get_mapbase_offset::return#2 = vera_layer_get_mapbase_offset::return#0 - jmp __b4 - // screenlayer::@4 - __b4: - // [198] CONIO_SCREEN_TEXT#17 = vera_layer_get_mapbase_offset::return#2 -- vwuz1=vwuz2 - lda.z vera_layer_get_mapbase_offset.return - sta.z CONIO_SCREEN_TEXT_1 - lda.z vera_layer_get_mapbase_offset.return+1 - sta.z CONIO_SCREEN_TEXT_1+1 - // [199] screenlayer::vera_layer_get_width1_layer#0 = conio_screen_layer -- vbuaa=vbuz1 - lda.z conio_screen_layer - jmp vera_layer_get_width1 - // screenlayer::vera_layer_get_width1 - vera_layer_get_width1: - // [200] screenlayer::vera_layer_get_width1_$2 = screenlayer::vera_layer_get_width1_layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [201] screenlayer::vera_layer_get_width1_config#0 = vera_layer_config[screenlayer::vera_layer_get_width1_$2] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_config,y - sta.z vera_layer_get_width1_config - lda vera_layer_config+1,y - sta.z vera_layer_get_width1_config+1 - // [202] screenlayer::vera_layer_get_width1_$0 = *screenlayer::vera_layer_get_width1_config#0 & VERA_LAYER_WIDTH_MASK -- vbuaa=_deref_pbuz1_band_vbuc1 - lda #VERA_LAYER_WIDTH_MASK - ldy #0 - and (vera_layer_get_width1_config),y - // [203] screenlayer::vera_layer_get_width1_$1 = screenlayer::vera_layer_get_width1_$0 >> 4 -- vbuaa=vbuaa_ror_4 - lsr - lsr - lsr - lsr - // [204] screenlayer::vera_layer_get_width1_$3 = screenlayer::vera_layer_get_width1_$1 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [205] screenlayer::vera_layer_get_width1_return#0 = VERA_LAYER_WIDTH[screenlayer::vera_layer_get_width1_$3] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda VERA_LAYER_WIDTH,y - sta.z vera_layer_get_width1_return - lda VERA_LAYER_WIDTH+1,y - sta.z vera_layer_get_width1_return+1 - jmp vera_layer_get_width1___breturn - // screenlayer::vera_layer_get_width1_@return - vera_layer_get_width1___breturn: - // [206] screenlayer::vera_layer_get_width1_return#1 = screenlayer::vera_layer_get_width1_return#0 - jmp __b1 - // screenlayer::@1 - __b1: - // [207] screenlayer::$2 = screenlayer::vera_layer_get_width1_return#1 - // [208] conio_width = screenlayer::$2 -- vwuz1=vwuz2 - lda.z __2 - sta.z conio_width - lda.z __2+1 - sta.z conio_width+1 - // [209] vera_layer_get_rowshift::layer#0 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [210] call vera_layer_get_rowshift - jsr vera_layer_get_rowshift - // [211] vera_layer_get_rowshift::return#2 = vera_layer_get_rowshift::return#0 - jmp __b5 - // screenlayer::@5 - __b5: - // [212] screenlayer::$3 = vera_layer_get_rowshift::return#2 - // [213] conio_rowshift = screenlayer::$3 -- vbuz1=vbuaa - sta.z conio_rowshift - // [214] vera_layer_get_rowskip::layer#0 = conio_screen_layer -- vbuaa=vbuz1 - lda.z conio_screen_layer - // [215] call vera_layer_get_rowskip - jsr vera_layer_get_rowskip - // [216] vera_layer_get_rowskip::return#2 = vera_layer_get_rowskip::return#0 - jmp __b6 - // screenlayer::@6 - __b6: - // [217] screenlayer::$4 = vera_layer_get_rowskip::return#2 - // [218] conio_rowskip = screenlayer::$4 -- vwuz1=vwuz2 - lda.z __4 - sta.z conio_rowskip - lda.z __4+1 - sta.z conio_rowskip+1 - // [219] screenlayer::vera_layer_get_height1_layer#0 = conio_screen_layer -- vbuaa=vbuz1 - lda.z conio_screen_layer - jmp vera_layer_get_height1 - // screenlayer::vera_layer_get_height1 - vera_layer_get_height1: - // [220] screenlayer::vera_layer_get_height1_$2 = screenlayer::vera_layer_get_height1_layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [221] screenlayer::vera_layer_get_height1_config#0 = vera_layer_config[screenlayer::vera_layer_get_height1_$2] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_config,y - sta.z vera_layer_get_height1_config - lda vera_layer_config+1,y - sta.z vera_layer_get_height1_config+1 - // [222] screenlayer::vera_layer_get_height1_$0 = *screenlayer::vera_layer_get_height1_config#0 & VERA_LAYER_HEIGHT_MASK -- vbuaa=_deref_pbuz1_band_vbuc1 - lda #VERA_LAYER_HEIGHT_MASK - ldy #0 - and (vera_layer_get_height1_config),y - // [223] screenlayer::vera_layer_get_height1_$1 = screenlayer::vera_layer_get_height1_$0 >> 6 -- vbuaa=vbuaa_ror_6 - rol - rol - rol - and #3 - // [224] screenlayer::vera_layer_get_height1_$3 = screenlayer::vera_layer_get_height1_$1 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [225] screenlayer::vera_layer_get_height1_return#0 = VERA_LAYER_HEIGHT[screenlayer::vera_layer_get_height1_$3] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda VERA_LAYER_HEIGHT,y - sta.z vera_layer_get_height1_return - lda VERA_LAYER_HEIGHT+1,y - sta.z vera_layer_get_height1_return+1 - jmp vera_layer_get_height1___breturn - // screenlayer::vera_layer_get_height1_@return - vera_layer_get_height1___breturn: - // [226] screenlayer::vera_layer_get_height1_return#1 = screenlayer::vera_layer_get_height1_return#0 - jmp __b2 - // screenlayer::@2 - __b2: - // [227] screenlayer::$5 = screenlayer::vera_layer_get_height1_return#1 - // [228] conio_height = screenlayer::$5 -- vwuz1=vwuz2 - lda.z __5 - sta.z conio_height - lda.z __5+1 - sta.z conio_height+1 - jmp __breturn - // screenlayer::@return - __breturn: - // [229] return - rts -} - // vera_layer_set_textcolor -// Set the front color for text output. The old front text color setting is returned. -// - layer: Value of 0 or 1. -// - color: a 4 bit value ( decimal between 0 and 15) when the VERA works in 16x16 color text mode. -// An 8 bit value (decimal between 0 and 255) when the VERA works in 256 text mode. -// Note that on the VERA, the transparent color has value 0. -// char vera_layer_set_textcolor(__register(X) char layer, __register(A) char color) -vera_layer_set_textcolor: { - // [231] vera_layer_textcolor[vera_layer_set_textcolor::layer#6] = vera_layer_set_textcolor::color#6 -- pbuc1_derefidx_vbuxx=vbuaa - sta vera_layer_textcolor,x - jmp __breturn - // vera_layer_set_textcolor::@return - __breturn: - // [232] return - rts -} - // vera_layer_set_backcolor -// Set the back color for text output. The old back text color setting is returned. -// - layer: Value of 0 or 1. -// - color: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// char vera_layer_set_backcolor(__register(X) char layer, __register(A) char color) -vera_layer_set_backcolor: { - // [234] vera_layer_backcolor[vera_layer_set_backcolor::layer#4] = vera_layer_set_backcolor::color#4 -- pbuc1_derefidx_vbuxx=vbuaa - sta vera_layer_backcolor,x - jmp __breturn - // vera_layer_set_backcolor::@return - __breturn: - // [235] return - rts -} - // vera_layer_set_mapbase -// Set the base of the map layer with which the conio will interact. -// - layer: Value of 0 or 1. -// - mapbase: Specifies the base address of the tile map. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// void vera_layer_set_mapbase(__register(A) char layer, __register(X) char mapbase) -vera_layer_set_mapbase: { - .label addr = $25 - // [237] vera_layer_set_mapbase::$0 = vera_layer_set_mapbase::layer#3 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [238] vera_layer_set_mapbase::addr#0 = vera_layer_mapbase[vera_layer_set_mapbase::$0] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_mapbase,y - sta.z addr - lda vera_layer_mapbase+1,y - sta.z addr+1 - // [239] *vera_layer_set_mapbase::addr#0 = vera_layer_set_mapbase::mapbase#3 -- _deref_pbuz1=vbuxx - txa - ldy #0 - sta (addr),y - jmp __breturn - // vera_layer_set_mapbase::@return - __breturn: - // [240] return - rts -} - // gotoxy -// Set the cursor to the specified position -// void gotoxy(char x, __register(X) char y) -gotoxy: { - .label __6 = $25 - .label line_offset = $25 - // [242] if(gotoxy::y#7<=conio_screen_height) goto gotoxy::@4 -- vbuxx_le_vbuz1_then_la1 - lda.z conio_screen_height - stx.z $ff - cmp.z $ff - bcs __b4_from_gotoxy - // [244] phi from gotoxy to gotoxy::@1 [phi:gotoxy->gotoxy::@1] - __b1_from_gotoxy: - // [244] phi gotoxy::y#10 = 0 [phi:gotoxy->gotoxy::@1#0] -- vbuxx=vbuc1 - ldx #0 - jmp __b1 - // [243] phi from gotoxy to gotoxy::@4 [phi:gotoxy->gotoxy::@4] - __b4_from_gotoxy: - jmp __b4 - // gotoxy::@4 - __b4: - // [244] phi from gotoxy::@4 to gotoxy::@1 [phi:gotoxy::@4->gotoxy::@1] - __b1_from___b4: - // [244] phi gotoxy::y#10 = gotoxy::y#7 [phi:gotoxy::@4->gotoxy::@1#0] -- register_copy - jmp __b1 - // gotoxy::@1 - __b1: - // [245] if(0gotoxy::@3] - __b3_from___b1: - jmp __b3 - // gotoxy::@3 - __b3: - jmp __b2 - // gotoxy::@2 - __b2: - // [247] conio_cursor_x[conio_screen_layer] = 0 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #0 - ldy.z conio_screen_layer - sta conio_cursor_x,y - // [248] conio_cursor_y[conio_screen_layer] = gotoxy::y#10 -- pbuc1_derefidx_vbuz1=vbuxx - ldy.z conio_screen_layer - txa - sta conio_cursor_y,y - // [249] gotoxy::$6 = (unsigned int)gotoxy::y#10 -- vwuz1=_word_vbuxx - txa - sta.z __6 - lda #0 - sta.z __6+1 - // [250] gotoxy::line_offset#0 = gotoxy::$6 << conio_rowshift -- vwuz1=vwuz1_rol_vbuz2 - ldy.z conio_rowshift - beq !e+ - !: - asl.z line_offset - rol.z line_offset+1 - dey - bne !- - !e: - // [251] gotoxy::$5 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [252] conio_line_text[gotoxy::$5] = gotoxy::line_offset#0 -- pwuc1_derefidx_vbuaa=vwuz1 - tay - lda.z line_offset - sta conio_line_text,y - lda.z line_offset+1 - sta conio_line_text+1,y - jmp __breturn - // gotoxy::@return - __breturn: - // [253] return - rts -} - // vera_layer_get_color -// Get the text and back color for text output in 16 color mode. -// - layer: Value of 0 or 1. -// - return: an 8 bit value with bit 7:4 containing the back color and bit 3:0 containing the front color. -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_color(__register(X) char layer) -vera_layer_get_color: { - .label addr = 6 - // [255] vera_layer_get_color::$3 = vera_layer_get_color::layer#2 << 1 -- vbuaa=vbuxx_rol_1 - txa - asl - // [256] vera_layer_get_color::addr#0 = vera_layer_config[vera_layer_get_color::$3] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_config,y - sta.z addr - lda vera_layer_config+1,y - sta.z addr+1 - // [257] vera_layer_get_color::$0 = *vera_layer_get_color::addr#0 & VERA_LAYER_CONFIG_256C -- vbuaa=_deref_pbuz1_band_vbuc1 - lda #VERA_LAYER_CONFIG_256C - ldy #0 - and (addr),y - // [258] if(0!=vera_layer_get_color::$0) goto vera_layer_get_color::@1 -- 0_neq_vbuaa_then_la1 - cmp #0 - bne __b1 - jmp __b2 - // vera_layer_get_color::@2 - __b2: - // [259] vera_layer_get_color::$1 = vera_layer_backcolor[vera_layer_get_color::layer#2] << 4 -- vbuaa=pbuc1_derefidx_vbuxx_rol_4 - lda vera_layer_backcolor,x - asl - asl - asl - asl - // [260] vera_layer_get_color::return#2 = vera_layer_get_color::$1 | vera_layer_textcolor[vera_layer_get_color::layer#2] -- vbuaa=vbuaa_bor_pbuc1_derefidx_vbuxx - ora vera_layer_textcolor,x - // [261] phi from vera_layer_get_color::@1 vera_layer_get_color::@2 to vera_layer_get_color::@return [phi:vera_layer_get_color::@1/vera_layer_get_color::@2->vera_layer_get_color::@return] - __breturn_from___b1: - __breturn_from___b2: - // [261] phi vera_layer_get_color::return#3 = vera_layer_get_color::return#1 [phi:vera_layer_get_color::@1/vera_layer_get_color::@2->vera_layer_get_color::@return#0] -- register_copy - jmp __breturn - // vera_layer_get_color::@return - __breturn: - // [262] return - rts - // vera_layer_get_color::@1 - __b1: - // [263] vera_layer_get_color::return#1 = vera_layer_textcolor[vera_layer_get_color::layer#2] -- vbuaa=pbuc1_derefidx_vbuxx - lda vera_layer_textcolor,x - jmp __breturn_from___b1 -} - // cputln -// Print a newline -cputln: { - .label temp = 6 - // [264] cputln::$2 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [265] cputln::temp#0 = conio_line_text[cputln::$2] -- vwuz1=pwuc1_derefidx_vbuaa - // TODO: This needs to be optimized! other variations don't compile because of sections not available! - tay - lda conio_line_text,y - sta.z temp - lda conio_line_text+1,y - sta.z temp+1 - // [266] cputln::temp#1 = cputln::temp#0 + conio_rowskip -- vwuz1=vwuz1_plus_vwuz2 - clc - lda.z temp - adc.z conio_rowskip - sta.z temp - lda.z temp+1 - adc.z conio_rowskip+1 - sta.z temp+1 - // [267] cputln::$3 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [268] conio_line_text[cputln::$3] = cputln::temp#1 -- pwuc1_derefidx_vbuaa=vwuz1 - tay - lda.z temp - sta conio_line_text,y - lda.z temp+1 - sta conio_line_text+1,y - // [269] conio_cursor_x[conio_screen_layer] = 0 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #0 - ldy.z conio_screen_layer - sta conio_cursor_x,y - // [270] conio_cursor_y[conio_screen_layer] = ++ conio_cursor_y[conio_screen_layer] -- pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 - ldx.z conio_screen_layer - inc conio_cursor_y,x - // [271] call cscroll - jsr cscroll - jmp __breturn - // cputln::@return - __breturn: - // [272] return - rts -} - // memcpy_in_vram -// Copy block of memory (from VRAM to VRAM) -// Copies the values from the location pointed by src to the location pointed by dest. -// The method uses the VERA access ports 0 and 1 to copy data from and to in VRAM. -// - src_bank: 64K VRAM bank number to copy from (0/1). -// - src: pointer to the location to copy from. Note that the address is a 16 bit value! -// - src_increment: the increment indicator, VERA needs this because addressing increment is automated by VERA at each access. -// - dest_bank: 64K VRAM bank number to copy to (0/1). -// - dest: pointer to the location to copy to. Note that the address is a 16 bit value! -// - dest_increment: the increment indicator, VERA needs this because addressing increment is automated by VERA at each access. -// - num: The number of bytes to copy -// void memcpy_in_vram(__register(Y) char dest_bank, __zp($a) void *dest, char dest_increment, char src_bank, __zp(6) char *src, char src_increment, __zp(8) unsigned int num) -memcpy_in_vram: { - .label i = 2 - .label dest = $a - .label src = 6 - .label num = 8 - // [274] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // [275] memcpy_in_vram::$0 = byte0 memcpy_in_vram::src#2 -- vbuaa=_byte0_pvoz1 - lda.z src - // [276] *VERA_ADDRX_L = memcpy_in_vram::$0 -- _deref_pbuc1=vbuaa - // Set address - sta VERA_ADDRX_L - // [277] memcpy_in_vram::$1 = byte1 memcpy_in_vram::src#2 -- vbuaa=_byte1_pvoz1 - lda.z src+1 - // [278] *VERA_ADDRX_M = memcpy_in_vram::$1 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // [279] *VERA_ADDRX_H = VERA_INC_1 -- _deref_pbuc1=vbuc2 - lda #VERA_INC_1 - sta VERA_ADDRX_H - // [280] *VERA_CTRL = *VERA_CTRL | VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 - // Select DATA1 - lda #VERA_ADDRSEL - ora VERA_CTRL - sta VERA_CTRL - // [281] memcpy_in_vram::$3 = byte0 memcpy_in_vram::dest#2 -- vbuaa=_byte0_pvoz1 - lda.z dest - // [282] *VERA_ADDRX_L = memcpy_in_vram::$3 -- _deref_pbuc1=vbuaa - // Set address - sta VERA_ADDRX_L - // [283] memcpy_in_vram::$4 = byte1 memcpy_in_vram::dest#2 -- vbuaa=_byte1_pvoz1 - lda.z dest+1 - // [284] *VERA_ADDRX_M = memcpy_in_vram::$4 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // [285] memcpy_in_vram::$5 = VERA_INC_1 | memcpy_in_vram::dest_bank#2 -- vbuaa=vbuc1_bor_vbuyy - tya - ora #VERA_INC_1 - // [286] *VERA_ADDRX_H = memcpy_in_vram::$5 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_H - // [287] phi from memcpy_in_vram to memcpy_in_vram::@1 [phi:memcpy_in_vram->memcpy_in_vram::@1] - __b1_from_memcpy_in_vram: - // [287] phi memcpy_in_vram::i#2 = 0 [phi:memcpy_in_vram->memcpy_in_vram::@1#0] -- vwuz1=vwuc1 - lda #<0 - sta.z i - lda #>0 - sta.z i+1 - jmp __b1 - // Transfer the data - // memcpy_in_vram::@1 - __b1: - // [288] if(memcpy_in_vram::i#2memcpy_in_vram::@1] - __b1_from___b2: - // [287] phi memcpy_in_vram::i#2 = memcpy_in_vram::i#1 [phi:memcpy_in_vram::@2->memcpy_in_vram::@1#0] -- register_copy - jmp __b1 -} - // vera_layer_mode_tile -// Set a vera layer in tile mode and configure the: -// - layer: Value of 0 or 1. -// - mapbase_address: A dword typed address (4 bytes), that specifies the full address of the map base. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective mapbase vera register. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// - tilebase_address: A dword typed address (4 bytes), that specifies the base address of the tile map. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective tilebase vera register. -// Note that the resulting vera register holds only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// - mapwidth: The width of the map in number of tiles. -// - mapheight: The height of the map in number of tiles. -// - tilewidth: The width of a tile, which can be 8 or 16 pixels. -// - tileheight: The height of a tile, which can be 8 or 16 pixels. -// - color_depth: The color depth in bits per pixel (BPP), which can be 1, 2, 4 or 8. -// void vera_layer_mode_tile(__zp($94) char layer, __zp($43) unsigned long mapbase_address, __zp($49) unsigned long tilebase_address, __zp($7a) unsigned int mapwidth, __zp($9f) unsigned int mapheight, __zp($a9) char tilewidth, __zp($aa) char tileheight, char color_depth) -vera_layer_mode_tile: { - .label __1 = $7c - .label __6 = $4f - .label __17 = $95 - .label __18 = $93 - .label mapbase_address = $43 - .label tilebase_address = $49 - .label mapwidth = $7a - .label layer = $94 - .label mapheight = $9f - .label tilewidth = $a9 - .label tileheight = $aa - jmp __b1 - // vera_layer_mode_tile::@1 - __b1: - // [293] if(vera_layer_mode_tile::mapwidth#10==$20) goto vera_layer_mode_tile::@5 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapwidth+1 - bne !+ - lda.z mapwidth - cmp #$20 - beq __b5 - !: - jmp __b2 - // vera_layer_mode_tile::@2 - __b2: - // [294] if(vera_layer_mode_tile::mapwidth#10==$40) goto vera_layer_mode_tile::@6 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapwidth+1 - bne !+ - lda.z mapwidth - cmp #$40 - beq __b6 - !: - jmp __b3 - // vera_layer_mode_tile::@3 - __b3: - // [295] if(vera_layer_mode_tile::mapwidth#10==$80) goto vera_layer_mode_tile::@7 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapwidth+1 - bne !+ - lda.z mapwidth - cmp #$80 - beq __b7 - !: - jmp __b4 - // vera_layer_mode_tile::@4 - __b4: - // [296] if(vera_layer_mode_tile::mapwidth#10!=$100) goto vera_layer_mode_tile::@9 -- vwuz1_neq_vwuc1_then_la1 - lda.z mapwidth+1 - cmp #>$100 - bne __b9_from___b4 - lda.z mapwidth - cmp #<$100 - bne __b9_from___b4 - jmp __b8 - // vera_layer_mode_tile::@8 - __b8: - // [297] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 9 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #9 - ldy.z layer - sta vera_layer_rowshift,y - // [298] vera_layer_mode_tile::$14 = vera_layer_mode_tile::layer#10 << 1 -- vbuaa=vbuz1_rol_1 - lda.z layer - asl - // [299] vera_layer_rowskip[vera_layer_mode_tile::$14] = $200 -- pwuc1_derefidx_vbuaa=vwuc2 - tay - lda #<$200 - sta vera_layer_rowskip,y - lda #>$200 - sta vera_layer_rowskip+1,y - // [300] phi from vera_layer_mode_tile::@8 to vera_layer_mode_tile::@9 [phi:vera_layer_mode_tile::@8->vera_layer_mode_tile::@9] - __b9_from___b8: - // [300] phi vera_layer_mode_tile::config#21 = VERA_LAYER_WIDTH_256 [phi:vera_layer_mode_tile::@8->vera_layer_mode_tile::@9#0] -- vbuxx=vbuc1 - ldx #VERA_LAYER_WIDTH_256 - jmp __b9 - // [300] phi from vera_layer_mode_tile::@4 vera_layer_mode_tile::@5 to vera_layer_mode_tile::@9 [phi:vera_layer_mode_tile::@4/vera_layer_mode_tile::@5->vera_layer_mode_tile::@9] - __b9_from___b4: - __b9_from___b5: - // [300] phi vera_layer_mode_tile::config#21 = VERA_LAYER_COLOR_DEPTH_1BPP [phi:vera_layer_mode_tile::@4/vera_layer_mode_tile::@5->vera_layer_mode_tile::@9#0] -- vbuxx=vbuc1 - ldx #VERA_LAYER_COLOR_DEPTH_1BPP - jmp __b9 - // vera_layer_mode_tile::@9 - __b9: - // [301] if(vera_layer_mode_tile::mapheight#10==$20) goto vera_layer_mode_tile::@16 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$20 - beq __b16_from___b9 - !: - jmp __b10 - // vera_layer_mode_tile::@10 - __b10: - // [302] if(vera_layer_mode_tile::mapheight#10==$40) goto vera_layer_mode_tile::@13 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$40 - beq __b13 - !: - jmp __b11 - // vera_layer_mode_tile::@11 - __b11: - // [303] if(vera_layer_mode_tile::mapheight#10==$80) goto vera_layer_mode_tile::@14 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$80 - beq __b14 - !: - jmp __b12 - // vera_layer_mode_tile::@12 - __b12: - // [304] if(vera_layer_mode_tile::mapheight#10!=$100) goto vera_layer_mode_tile::@16 -- vwuz1_neq_vwuc1_then_la1 - lda.z mapheight+1 - cmp #>$100 - bne __b16_from___b12 - lda.z mapheight - cmp #<$100 - bne __b16_from___b12 - jmp __b15 - // vera_layer_mode_tile::@15 - __b15: - // [305] vera_layer_mode_tile::config#12 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_256 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_HEIGHT_256 - tax - // [306] phi from vera_layer_mode_tile::@12 vera_layer_mode_tile::@13 vera_layer_mode_tile::@14 vera_layer_mode_tile::@15 vera_layer_mode_tile::@9 to vera_layer_mode_tile::@16 [phi:vera_layer_mode_tile::@12/vera_layer_mode_tile::@13/vera_layer_mode_tile::@14/vera_layer_mode_tile::@15/vera_layer_mode_tile::@9->vera_layer_mode_tile::@16] - __b16_from___b12: - __b16_from___b13: - __b16_from___b14: - __b16_from___b15: - __b16_from___b9: - // [306] phi vera_layer_mode_tile::config#25 = vera_layer_mode_tile::config#21 [phi:vera_layer_mode_tile::@12/vera_layer_mode_tile::@13/vera_layer_mode_tile::@14/vera_layer_mode_tile::@15/vera_layer_mode_tile::@9->vera_layer_mode_tile::@16#0] -- register_copy - jmp __b16 - // vera_layer_mode_tile::@16 - __b16: - // [307] vera_layer_set_config::layer#0 = vera_layer_mode_tile::layer#10 -- vbuaa=vbuz1 - lda.z layer - // [308] vera_layer_set_config::config#0 = vera_layer_mode_tile::config#25 - // [309] call vera_layer_set_config - // [623] phi from vera_layer_mode_tile::@16 to vera_layer_set_config [phi:vera_layer_mode_tile::@16->vera_layer_set_config] - vera_layer_set_config_from___b16: - // [623] phi vera_layer_set_config::config#2 = vera_layer_set_config::config#0 [phi:vera_layer_mode_tile::@16->vera_layer_set_config#0] -- register_copy - // [623] phi vera_layer_set_config::layer#2 = vera_layer_set_config::layer#0 [phi:vera_layer_mode_tile::@16->vera_layer_set_config#1] -- register_copy - jsr vera_layer_set_config - jmp __b23 - // vera_layer_mode_tile::@23 - __b23: - // [310] vera_layer_mode_tile::$1 = word0 vera_layer_mode_tile::mapbase_address#10 -- vwuz1=_word0_vduz2 - lda.z mapbase_address - sta.z __1 - lda.z mapbase_address+1 - sta.z __1+1 - // [311] vera_layer_mode_tile::$17 = vera_layer_mode_tile::layer#10 << 1 -- vbuz1=vbuz2_rol_1 - lda.z layer - asl - sta.z __17 - // [312] vera_mapbase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$1 -- pwuc1_derefidx_vbuz1=vwuz2 - // mapbase - ldy.z __17 - lda.z __1 - sta vera_mapbase_offset,y - lda.z __1+1 - sta vera_mapbase_offset+1,y - // [313] vera_layer_mode_tile::$2 = byte2 vera_layer_mode_tile::mapbase_address#10 -- vbuaa=_byte2_vduz1 - lda.z mapbase_address+2 - // [314] vera_mapbase_bank[vera_layer_mode_tile::layer#10] = vera_layer_mode_tile::$2 -- pbuc1_derefidx_vbuz1=vbuaa - ldy.z layer - sta vera_mapbase_bank,y - // [315] vera_layer_mode_tile::$18 = vera_layer_mode_tile::layer#10 << 2 -- vbuz1=vbuz2_rol_2 - lda.z layer - asl - asl - sta.z __18 - // [316] vera_mapbase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::mapbase_address#10 -- pduc1_derefidx_vbuz1=vduz2 - ldy.z __18 - lda.z mapbase_address - sta vera_mapbase_address,y - lda.z mapbase_address+1 - sta vera_mapbase_address+1,y - lda.z mapbase_address+2 - sta vera_mapbase_address+2,y - lda.z mapbase_address+3 - sta vera_mapbase_address+3,y - // [317] vera_layer_mode_tile::mapbase_address#0 = vera_layer_mode_tile::mapbase_address#10 >> 1 -- vduz1=vduz1_ror_1 - lsr.z mapbase_address+3 - ror.z mapbase_address+2 - ror.z mapbase_address+1 - ror.z mapbase_address - // [318] vera_layer_mode_tile::mapbase#0 = byte1 vera_layer_mode_tile::mapbase_address#0 -- vbuxx=_byte1_vduz1 - ldx.z mapbase_address+1 - // [319] vera_layer_set_mapbase::layer#0 = vera_layer_mode_tile::layer#10 -- vbuaa=vbuz1 - lda.z layer - // [320] vera_layer_set_mapbase::mapbase#0 = vera_layer_mode_tile::mapbase#0 - // [321] call vera_layer_set_mapbase - // [236] phi from vera_layer_mode_tile::@23 to vera_layer_set_mapbase [phi:vera_layer_mode_tile::@23->vera_layer_set_mapbase] - vera_layer_set_mapbase_from___b23: - // [236] phi vera_layer_set_mapbase::mapbase#3 = vera_layer_set_mapbase::mapbase#0 [phi:vera_layer_mode_tile::@23->vera_layer_set_mapbase#0] -- register_copy - // [236] phi vera_layer_set_mapbase::layer#3 = vera_layer_set_mapbase::layer#0 [phi:vera_layer_mode_tile::@23->vera_layer_set_mapbase#1] -- register_copy - jsr vera_layer_set_mapbase - jmp __b24 - // vera_layer_mode_tile::@24 - __b24: - // [322] vera_layer_mode_tile::$6 = word0 vera_layer_mode_tile::tilebase_address#10 -- vwuz1=_word0_vduz2 - lda.z tilebase_address - sta.z __6 - lda.z tilebase_address+1 - sta.z __6+1 - // [323] vera_tilebase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$6 -- pwuc1_derefidx_vbuz1=vwuz2 - // tilebase - ldy.z __17 - lda.z __6 - sta vera_tilebase_offset,y - lda.z __6+1 - sta vera_tilebase_offset+1,y - // [324] vera_layer_mode_tile::$7 = byte2 vera_layer_mode_tile::tilebase_address#10 -- vbuaa=_byte2_vduz1 - lda.z tilebase_address+2 - // [325] vera_tilebase_bank[vera_layer_mode_tile::layer#10] = vera_layer_mode_tile::$7 -- pbuc1_derefidx_vbuz1=vbuaa - ldy.z layer - sta vera_tilebase_bank,y - // [326] vera_tilebase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::tilebase_address#10 -- pduc1_derefidx_vbuz1=vduz2 - ldy.z __18 - lda.z tilebase_address - sta vera_tilebase_address,y - lda.z tilebase_address+1 - sta vera_tilebase_address+1,y - lda.z tilebase_address+2 - sta vera_tilebase_address+2,y - lda.z tilebase_address+3 - sta vera_tilebase_address+3,y - // [327] vera_layer_mode_tile::tilebase_address#0 = vera_layer_mode_tile::tilebase_address#10 >> 1 -- vduz1=vduz1_ror_1 - lsr.z tilebase_address+3 - ror.z tilebase_address+2 - ror.z tilebase_address+1 - ror.z tilebase_address - // [328] vera_layer_mode_tile::tilebase#0 = byte1 vera_layer_mode_tile::tilebase_address#0 -- vbuaa=_byte1_vduz1 - lda.z tilebase_address+1 - // [329] vera_layer_mode_tile::tilebase#1 = vera_layer_mode_tile::tilebase#0 & VERA_LAYER_TILEBASE_MASK -- vbuxx=vbuaa_band_vbuc1 - and #VERA_LAYER_TILEBASE_MASK - tax - // [330] if(vera_layer_mode_tile::tilewidth#10==8) goto vera_layer_mode_tile::@19 -- vbuz1_eq_vbuc1_then_la1 - lda #8 - cmp.z tilewidth - beq __b19_from___b24 - jmp __b17 - // vera_layer_mode_tile::@17 - __b17: - // [331] if(vera_layer_mode_tile::tilewidth#10!=$10) goto vera_layer_mode_tile::@19 -- vbuz1_neq_vbuc1_then_la1 - lda #$10 - cmp.z tilewidth - bne __b19_from___b17 - jmp __b18 - // vera_layer_mode_tile::@18 - __b18: - // [332] vera_layer_mode_tile::tilebase#3 = vera_layer_mode_tile::tilebase#1 | VERA_TILEBASE_WIDTH_16 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_TILEBASE_WIDTH_16 - tax - // [333] phi from vera_layer_mode_tile::@17 vera_layer_mode_tile::@18 vera_layer_mode_tile::@24 to vera_layer_mode_tile::@19 [phi:vera_layer_mode_tile::@17/vera_layer_mode_tile::@18/vera_layer_mode_tile::@24->vera_layer_mode_tile::@19] - __b19_from___b17: - __b19_from___b18: - __b19_from___b24: - // [333] phi vera_layer_mode_tile::tilebase#12 = vera_layer_mode_tile::tilebase#1 [phi:vera_layer_mode_tile::@17/vera_layer_mode_tile::@18/vera_layer_mode_tile::@24->vera_layer_mode_tile::@19#0] -- register_copy - jmp __b19 - // vera_layer_mode_tile::@19 - __b19: - // [334] if(vera_layer_mode_tile::tileheight#10==8) goto vera_layer_mode_tile::@22 -- vbuz1_eq_vbuc1_then_la1 - lda #8 - cmp.z tileheight - beq __b22_from___b19 - jmp __b20 - // vera_layer_mode_tile::@20 - __b20: - // [335] if(vera_layer_mode_tile::tileheight#10!=$10) goto vera_layer_mode_tile::@22 -- vbuz1_neq_vbuc1_then_la1 - lda #$10 - cmp.z tileheight - bne __b22_from___b20 - jmp __b21 - // vera_layer_mode_tile::@21 - __b21: - // [336] vera_layer_mode_tile::tilebase#5 = vera_layer_mode_tile::tilebase#12 | VERA_TILEBASE_HEIGHT_16 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_TILEBASE_HEIGHT_16 - tax - // [337] phi from vera_layer_mode_tile::@19 vera_layer_mode_tile::@20 vera_layer_mode_tile::@21 to vera_layer_mode_tile::@22 [phi:vera_layer_mode_tile::@19/vera_layer_mode_tile::@20/vera_layer_mode_tile::@21->vera_layer_mode_tile::@22] - __b22_from___b19: - __b22_from___b20: - __b22_from___b21: - // [337] phi vera_layer_mode_tile::tilebase#10 = vera_layer_mode_tile::tilebase#12 [phi:vera_layer_mode_tile::@19/vera_layer_mode_tile::@20/vera_layer_mode_tile::@21->vera_layer_mode_tile::@22#0] -- register_copy - jmp __b22 - // vera_layer_mode_tile::@22 - __b22: - // [338] vera_layer_set_tilebase::layer#0 = vera_layer_mode_tile::layer#10 -- vbuaa=vbuz1 - lda.z layer - // [339] vera_layer_set_tilebase::tilebase#0 = vera_layer_mode_tile::tilebase#10 - // [340] call vera_layer_set_tilebase - // [628] phi from vera_layer_mode_tile::@22 to vera_layer_set_tilebase [phi:vera_layer_mode_tile::@22->vera_layer_set_tilebase] - vera_layer_set_tilebase_from___b22: - // [628] phi vera_layer_set_tilebase::tilebase#2 = vera_layer_set_tilebase::tilebase#0 [phi:vera_layer_mode_tile::@22->vera_layer_set_tilebase#0] -- register_copy - // [628] phi vera_layer_set_tilebase::layer#2 = vera_layer_set_tilebase::layer#0 [phi:vera_layer_mode_tile::@22->vera_layer_set_tilebase#1] -- register_copy - jsr vera_layer_set_tilebase - jmp __breturn - // vera_layer_mode_tile::@return - __breturn: - // [341] return - rts - // vera_layer_mode_tile::@14 - __b14: - // [342] vera_layer_mode_tile::config#11 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_128 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_HEIGHT_128 - tax - jmp __b16_from___b14 - // vera_layer_mode_tile::@13 - __b13: - // [343] vera_layer_mode_tile::config#10 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_64 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_HEIGHT_64 - tax - jmp __b16_from___b13 - // vera_layer_mode_tile::@7 - __b7: - // [344] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 8 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #8 - ldy.z layer - sta vera_layer_rowshift,y - // [345] vera_layer_mode_tile::$13 = vera_layer_mode_tile::layer#10 << 1 -- vbuaa=vbuz1_rol_1 - lda.z layer - asl - // [346] vera_layer_rowskip[vera_layer_mode_tile::$13] = $100 -- pwuc1_derefidx_vbuaa=vwuc2 - tay - lda #<$100 - sta vera_layer_rowskip,y - lda #>$100 - sta vera_layer_rowskip+1,y - // [300] phi from vera_layer_mode_tile::@7 to vera_layer_mode_tile::@9 [phi:vera_layer_mode_tile::@7->vera_layer_mode_tile::@9] - __b9_from___b7: - // [300] phi vera_layer_mode_tile::config#21 = VERA_LAYER_WIDTH_128 [phi:vera_layer_mode_tile::@7->vera_layer_mode_tile::@9#0] -- vbuxx=vbuc1 - ldx #VERA_LAYER_WIDTH_128 - jmp __b9 - // vera_layer_mode_tile::@6 - __b6: - // [347] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 7 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #7 - ldy.z layer - sta vera_layer_rowshift,y - // [348] vera_layer_mode_tile::$12 = vera_layer_mode_tile::layer#10 << 1 -- vbuaa=vbuz1_rol_1 - lda.z layer - asl - // [349] vera_layer_rowskip[vera_layer_mode_tile::$12] = $80 -- pwuc1_derefidx_vbuaa=vbuc2 - tay - lda #$80 - sta vera_layer_rowskip,y - lda #0 - sta vera_layer_rowskip+1,y - // [300] phi from vera_layer_mode_tile::@6 to vera_layer_mode_tile::@9 [phi:vera_layer_mode_tile::@6->vera_layer_mode_tile::@9] - __b9_from___b6: - // [300] phi vera_layer_mode_tile::config#21 = VERA_LAYER_WIDTH_64 [phi:vera_layer_mode_tile::@6->vera_layer_mode_tile::@9#0] -- vbuxx=vbuc1 - ldx #VERA_LAYER_WIDTH_64 - jmp __b9 - // vera_layer_mode_tile::@5 - __b5: - // [350] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 6 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #6 - ldy.z layer - sta vera_layer_rowshift,y - // [351] vera_layer_mode_tile::$11 = vera_layer_mode_tile::layer#10 << 1 -- vbuaa=vbuz1_rol_1 - lda.z layer - asl - // [352] vera_layer_rowskip[vera_layer_mode_tile::$11] = $40 -- pwuc1_derefidx_vbuaa=vbuc2 - tay - lda #$40 - sta vera_layer_rowskip,y - lda #0 - sta vera_layer_rowskip+1,y - jmp __b9_from___b5 -} - // vera_layer_mode_bitmap -// Set a vera layer in bitmap mode and configure the: -// - layer: Value of 0 or 1. -// - mapbase_address: A dword typed address (4 bytes), that specifies the full address of the map base. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective mapbase vera register. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// - tilebase_address: A dword typed address (4 bytes), that specifies the base address of the tile map. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective tilebase vera register. -// Note that the resulting vera register holds only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// - mapwidth: The width of the map in number of tiles. -// - mapheight: The height of the map in number of tiles. -// - tilewidth: The width of a tile, which can be 8 or 16 pixels. -// - tileheight: The height of a tile, which can be 8 or 16 pixels. -// - color_mode: The color mode, which can be 16 or 256. -// void vera_layer_mode_bitmap(char layer, unsigned long bitmap_address, unsigned int mapwidth, unsigned int color_depth) -vera_layer_mode_bitmap: { - .const layer = 0 - .const bitmap_address = 0 - // config - .const config = VERA_LAYER_COLOR_DEPTH_8BPP|VERA_LAYER_CONFIG_MODE_BITMAP - .const tilebase = 0 - jmp __b1 - // vera_layer_mode_bitmap::@1 - __b1: - // [354] *vera_tilebase_offset = 0 -- _deref_pwuc1=vwuc2 - // tilebase - lda #<0 - sta vera_tilebase_offset - lda #>0 - sta vera_tilebase_offset+1 - // [355] *vera_tilebase_bank = 0 -- _deref_pbuc1=vbuc2 - lda #0 - sta vera_tilebase_bank - // [356] *vera_tilebase_address = vera_layer_mode_bitmap::bitmap_address#1 -- _deref_pduc1=vduc2 - lda #bitmap_address - sta vera_tilebase_address+1 - lda #>$10 - sta vera_tilebase_address+2 - lda #>bitmap_address>>$10 - sta vera_tilebase_address+3 - jmp vera_display_set_scale_double1 - // vera_layer_mode_bitmap::vera_display_set_scale_double1 - vera_display_set_scale_double1: - // [357] *VERA_DC_HSCALE = $40 -- _deref_pbuc1=vbuc2 - lda #$40 - sta VERA_DC_HSCALE - // [358] *VERA_DC_VSCALE = $40 -- _deref_pbuc1=vbuc2 - lda #$40 - sta VERA_DC_VSCALE - // [359] phi from vera_layer_mode_bitmap::vera_display_set_scale_double1 to vera_layer_mode_bitmap::@2 [phi:vera_layer_mode_bitmap::vera_display_set_scale_double1->vera_layer_mode_bitmap::@2] - __b2_from_vera_display_set_scale_double1: - jmp __b2 - // vera_layer_mode_bitmap::@2 - __b2: - // [360] call vera_layer_set_config - // [623] phi from vera_layer_mode_bitmap::@2 to vera_layer_set_config [phi:vera_layer_mode_bitmap::@2->vera_layer_set_config] - vera_layer_set_config_from___b2: - // [623] phi vera_layer_set_config::config#2 = vera_layer_mode_bitmap::config#11 [phi:vera_layer_mode_bitmap::@2->vera_layer_set_config#0] -- vbuxx=vbuc1 - ldx #config - // [623] phi vera_layer_set_config::layer#2 = vera_layer_mode_bitmap::layer#0 [phi:vera_layer_mode_bitmap::@2->vera_layer_set_config#1] -- vbuaa=vbuc1 - lda #layer - jsr vera_layer_set_config - // [361] phi from vera_layer_mode_bitmap::@2 to vera_layer_mode_bitmap::@3 [phi:vera_layer_mode_bitmap::@2->vera_layer_mode_bitmap::@3] - __b3_from___b2: - jmp __b3 - // vera_layer_mode_bitmap::@3 - __b3: - // [362] call vera_layer_set_tilebase - // [628] phi from vera_layer_mode_bitmap::@3 to vera_layer_set_tilebase [phi:vera_layer_mode_bitmap::@3->vera_layer_set_tilebase] - vera_layer_set_tilebase_from___b3: - // [628] phi vera_layer_set_tilebase::tilebase#2 = vera_layer_mode_bitmap::tilebase#1 [phi:vera_layer_mode_bitmap::@3->vera_layer_set_tilebase#0] -- vbuxx=vbuc1 - ldx #tilebase - // [628] phi vera_layer_set_tilebase::layer#2 = vera_layer_mode_bitmap::layer#0 [phi:vera_layer_mode_bitmap::@3->vera_layer_set_tilebase#1] -- vbuaa=vbuc1 - lda #layer - jsr vera_layer_set_tilebase - jmp __breturn - // vera_layer_mode_bitmap::@return - __breturn: - // [363] return - rts -} - // clrscr -// clears the screen and moves the cursor to the upper left-hand corner of the screen. -clrscr: { - .label __1 = $87 - .label line_text = $70 - .label color = $87 - // [364] clrscr::line_text#0 = (char *)CONIO_SCREEN_TEXT#17 -- pbuz1=pbuz2 - lda.z CONIO_SCREEN_TEXT_1 - sta.z line_text - lda.z CONIO_SCREEN_TEXT_1+1 - sta.z line_text+1 - // [365] vera_layer_get_backcolor::layer#0 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [366] call vera_layer_get_backcolor - jsr vera_layer_get_backcolor - // [367] vera_layer_get_backcolor::return#0 = vera_layer_get_backcolor::return#1 - jmp __b7 - // clrscr::@7 - __b7: - // [368] clrscr::$0 = vera_layer_get_backcolor::return#0 - // [369] clrscr::$1 = clrscr::$0 << 4 -- vbuz1=vbuaa_rol_4 - asl - asl - asl - asl - sta.z __1 - // [370] vera_layer_get_textcolor::layer#0 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [371] call vera_layer_get_textcolor - jsr vera_layer_get_textcolor - // [372] vera_layer_get_textcolor::return#0 = vera_layer_get_textcolor::return#1 - jmp __b8 - // clrscr::@8 - __b8: - // [373] clrscr::$2 = vera_layer_get_textcolor::return#0 - // [374] clrscr::color#0 = clrscr::$1 | clrscr::$2 -- vbuz1=vbuz1_bor_vbuaa - ora.z color - sta.z color - // [375] phi from clrscr::@8 to clrscr::@1 [phi:clrscr::@8->clrscr::@1] - __b1_from___b8: - // [375] phi clrscr::line_text#2 = clrscr::line_text#0 [phi:clrscr::@8->clrscr::@1#0] -- register_copy - // [375] phi clrscr::l#2 = 0 [phi:clrscr::@8->clrscr::@1#1] -- vbuxx=vbuc1 - ldx #0 - jmp __b1 - // clrscr::@1 - __b1: - // [376] if(clrscr::l#2clrscr::@4] - __b4_from___b2: - // [389] phi clrscr::c#2 = 0 [phi:clrscr::@2->clrscr::@4#0] -- vbuyy=vbuc1 - ldy #0 - jmp __b4 - // clrscr::@4 - __b4: - // [390] if(clrscr::c#2clrscr::@1] - __b1_from___b6: - // [375] phi clrscr::line_text#2 = clrscr::line_text#1 [phi:clrscr::@6->clrscr::@1#0] -- register_copy - // [375] phi clrscr::l#2 = clrscr::l#1 [phi:clrscr::@6->clrscr::@1#1] -- register_copy - jmp __b1 - // clrscr::@5 - __b5: - // [393] *VERA_DATA0 = ' ' -- _deref_pbuc1=vbuc2 - lda #' ' - sta VERA_DATA0 - // [394] *VERA_DATA0 = clrscr::color#0 -- _deref_pbuc1=vbuz1 - lda.z color - sta VERA_DATA0 - // [395] clrscr::c#1 = ++ clrscr::c#2 -- vbuyy=_inc_vbuyy - iny - // [389] phi from clrscr::@5 to clrscr::@4 [phi:clrscr::@5->clrscr::@4] - __b4_from___b5: - // [389] phi clrscr::c#2 = clrscr::c#1 [phi:clrscr::@5->clrscr::@4#0] -- register_copy - jmp __b4 -} - // printf_str -/// Print a NUL-terminated string -// void printf_str(void (*putc)(char), __zp($4d) const char *s) -printf_str: { - .label s = $4d - // [397] phi from printf_str printf_str::@2 to printf_str::@1 [phi:printf_str/printf_str::@2->printf_str::@1] - __b1_from_printf_str: - __b1_from___b2: - // [397] phi printf_str::s#8 = printf_str::s#9 [phi:printf_str/printf_str::@2->printf_str::@1#0] -- register_copy - jmp __b1 - // printf_str::@1 - __b1: - // [398] printf_str::c#1 = *printf_str::s#8 -- vbuaa=_deref_pbuz1 - ldy #0 - lda (s),y - // [399] printf_str::s#0 = ++ printf_str::s#8 -- pbuz1=_inc_pbuz1 - inc.z s - bne !+ - inc.z s+1 - !: - // [400] if(0!=printf_str::c#1) goto printf_str::@2 -- 0_neq_vbuaa_then_la1 - cmp #0 - bne __b2 - jmp __breturn - // printf_str::@return - __breturn: - // [401] return - rts - // printf_str::@2 - __b2: - // [402] stackpush(char) = printf_str::c#1 -- _stackpushbyte_=vbuaa - pha - // [403] callexecute cputc -- call_vprc1 - jsr cputc - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - jmp __b1_from___b2 -} - // bitmap_init -// Initialize the bitmap plotter tables for a specific bitmap -// void bitmap_init(char layer, unsigned long address) -bitmap_init: { - .const layer = 0 - .const address = 0 - .label __7 = $81 - .label __10 = $83 - .label __13 = $85 - .label __23 = $37 - .label __24 = $39 - .label __25 = $3b - .label __26 = $3d - .label __28 = $3f - .label vera_layer_get_color_depth1_config = $9b - .label bitmask = $21 - .label bitshift = $20 - .label x = $67 - .label hdelta = $a3 - .label yoffs = $6a - .label y = $47 - .label __29 = $37 - .label __30 = $51 - .label __31 = $53 - .label __32 = $39 - .label __33 = $55 - .label __34 = $57 - .label __35 = $3b - .label __36 = $59 - .label __37 = $5b - .label __38 = $3d - .label __39 = $5d - .label __40 = $5f - .label __41 = $3f - // [405] __bitmap_address = bitmap_init::address#0 -- vduz1=vduc1 - lda #
address - sta.z __bitmap_address+1 - lda #
>$10 - sta.z __bitmap_address+2 - lda #>address>>$10 - sta.z __bitmap_address+3 - // [406] __bitmap_layer = bitmap_init::layer#0 -- vbuz1=vbuc1 - lda #layer - sta.z __bitmap_layer - // [407] bitmap_init::vera_layer_get_color_depth1_layer#0 = __bitmap_layer -- vbuaa=vbuz1 - lda.z __bitmap_layer - jmp vera_layer_get_color_depth1 - // bitmap_init::vera_layer_get_color_depth1 - vera_layer_get_color_depth1: - // [408] bitmap_init::vera_layer_get_color_depth1_$1 = bitmap_init::vera_layer_get_color_depth1_layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [409] bitmap_init::vera_layer_get_color_depth1_config#0 = vera_layer_config[bitmap_init::vera_layer_get_color_depth1_$1] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_config,y - sta.z vera_layer_get_color_depth1_config - lda vera_layer_config+1,y - sta.z vera_layer_get_color_depth1_config+1 - // [410] bitmap_init::vera_layer_get_color_depth1_$0 = *bitmap_init::vera_layer_get_color_depth1_config#0 & VERA_LAYER_COLOR_DEPTH_MASK -- vbuaa=_deref_pbuz1_band_vbuc1 - lda #VERA_LAYER_COLOR_DEPTH_MASK - ldy #0 - and (vera_layer_get_color_depth1_config),y - // [411] bitmap_init::vera_layer_get_color_depth1_return#0 = bitmap_init::vera_layer_get_color_depth1_$0 - jmp vera_layer_get_color_depth1___breturn - // bitmap_init::vera_layer_get_color_depth1_@return - vera_layer_get_color_depth1___breturn: - // [412] bitmap_init::vera_layer_get_color_depth1_return#1 = bitmap_init::vera_layer_get_color_depth1_return#0 - jmp __b16 - // bitmap_init::@16 - __b16: - // [413] bitmap_init::$0 = bitmap_init::vera_layer_get_color_depth1_return#1 - // [414] __bitmap_color_depth = bitmap_init::$0 -- vbuz1=vbuaa - sta.z __bitmap_color_depth - // [415] call vera_display_get_hscale - // [637] phi from bitmap_init::@16 to vera_display_get_hscale [phi:bitmap_init::@16->vera_display_get_hscale] - vera_display_get_hscale_from___b16: - jsr vera_display_get_hscale - // [416] vera_display_get_hscale::return#2 = vera_display_get_hscale::return#0 - jmp __b17 - // bitmap_init::@17 - __b17: - // [417] bitmap_init::$1 = vera_display_get_hscale::return#2 - // [418] __bitmap_hscale = bitmap_init::$1 -- vbuz1=vbuxx - stx.z __bitmap_hscale - // [419] call vera_display_get_vscale - // [644] phi from bitmap_init::@17 to vera_display_get_vscale [phi:bitmap_init::@17->vera_display_get_vscale] - vera_display_get_vscale_from___b17: - jsr vera_display_get_vscale - // [420] vera_display_get_vscale::return#2 = vera_display_get_vscale::return#0 - jmp __b18 - // bitmap_init::@18 - __b18: - // [421] bitmap_init::$2 = vera_display_get_vscale::return#2 - // [422] __bitmap_vscale = bitmap_init::$2 -- vbuz1=vbuxx - // Returns 1 when 640 and 2 when 320. - stx.z __bitmap_vscale - // [423] bitmap_init::bitmask#0 = bitmasks[__bitmap_color_depth] -- vbuz1=pbuc1_derefidx_vbuz2 - // Returns 1 when 480 and 2 when 240. - ldy.z __bitmap_color_depth - lda bitmasks,y - sta.z bitmask - // [424] bitmap_init::bitshift#0 = bitshifts[__bitmap_color_depth] -- vbsz1=pbsc1_derefidx_vbuz2 - ldy.z __bitmap_color_depth - lda bitshifts,y - sta.z bitshift - // [425] phi from bitmap_init::@18 to bitmap_init::@1 [phi:bitmap_init::@18->bitmap_init::@1] - __b1_from___b18: - // [425] phi bitmap_init::bitshift#10 = bitmap_init::bitshift#0 [phi:bitmap_init::@18->bitmap_init::@1#0] -- register_copy - // [425] phi bitmap_init::bitmask#10 = bitmap_init::bitmask#0 [phi:bitmap_init::@18->bitmap_init::@1#1] -- register_copy - // [425] phi bitmap_init::x#10 = 0 [phi:bitmap_init::@18->bitmap_init::@1#2] -- vwuz1=vwuc1 - lda #<0 - sta.z x - lda #>0 - sta.z x+1 - jmp __b1 - // [425] phi from bitmap_init::@7 to bitmap_init::@1 [phi:bitmap_init::@7->bitmap_init::@1] - __b1_from___b7: - // [425] phi bitmap_init::bitshift#10 = bitmap_init::bitshift#14 [phi:bitmap_init::@7->bitmap_init::@1#0] -- register_copy - // [425] phi bitmap_init::bitmask#10 = bitmap_init::bitmask#16 [phi:bitmap_init::@7->bitmap_init::@1#1] -- register_copy - // [425] phi bitmap_init::x#10 = bitmap_init::x#1 [phi:bitmap_init::@7->bitmap_init::@1#2] -- register_copy - jmp __b1 - // bitmap_init::@1 - __b1: - // [426] if(__bitmap_color_depth!=0) goto bitmap_init::@2 -- vbuz1_neq_0_then_la1 - lda.z __bitmap_color_depth - bne __b2_from___b1 - jmp __b8 - // bitmap_init::@8 - __b8: - // [427] bitmap_init::$7 = bitmap_init::x#10 >> 3 -- vwuz1=vwuz2_ror_3 - lda.z x+1 - lsr - sta.z __7+1 - lda.z x - ror - sta.z __7 - lsr.z __7+1 - ror.z __7 - lsr.z __7+1 - ror.z __7 - // [428] bitmap_init::$23 = bitmap_init::x#10 << 1 -- vwuz1=vwuz2_rol_1 - lda.z x - asl - sta.z __23 - lda.z x+1 - rol - sta.z __23+1 - // [429] bitmap_init::$29 = __bitmap_plot_x + bitmap_init::$23 -- pwuz1=pwuc1_plus_vwuz1 - lda.z __29 - clc - adc #<__bitmap_plot_x - sta.z __29 - lda.z __29+1 - adc #>__bitmap_plot_x - sta.z __29+1 - // [430] *bitmap_init::$29 = bitmap_init::$7 -- _deref_pwuz1=vwuz2 - ldy #0 - lda.z __7 - sta (__29),y - iny - lda.z __7+1 - sta (__29),y - // [431] bitmap_init::$30 = __bitmap_plot_bitmask + bitmap_init::x#10 -- pbuz1=pbuc1_plus_vwuz2 - lda.z x - clc - adc #<__bitmap_plot_bitmask - sta.z __30 - lda.z x+1 - adc #>__bitmap_plot_bitmask - sta.z __30+1 - // [432] *bitmap_init::$30 = bitmap_init::bitmask#10 -- _deref_pbuz1=vbuz2 - lda.z bitmask - ldy #0 - sta (__30),y - // [433] bitmap_init::$31 = __bitmap_plot_bitshift + bitmap_init::x#10 -- pbuz1=pbuc1_plus_vwuz2 - lda.z x - clc - adc #<__bitmap_plot_bitshift - sta.z __31 - lda.z x+1 - adc #>__bitmap_plot_bitshift - sta.z __31+1 - // [434] *bitmap_init::$31 = (char)bitmap_init::bitshift#10 -- _deref_pbuz1=vbuz2 - lda.z bitshift - ldy #0 - sta (__31),y - // [435] bitmap_init::bitshift#1 = bitmap_init::bitshift#10 - 1 -- vbsz1=vbsz1_minus_1 - dec.z bitshift - // [436] bitmap_init::bitmask#1 = bitmap_init::bitmask#10 >> 1 -- vbuz1=vbuz1_ror_1 - lsr.z bitmask - // [437] phi from bitmap_init::@1 bitmap_init::@8 to bitmap_init::@2 [phi:bitmap_init::@1/bitmap_init::@8->bitmap_init::@2] - __b2_from___b1: - __b2_from___b8: - // [437] phi bitmap_init::bitshift#11 = bitmap_init::bitshift#10 [phi:bitmap_init::@1/bitmap_init::@8->bitmap_init::@2#0] -- register_copy - // [437] phi bitmap_init::bitmask#11 = bitmap_init::bitmask#10 [phi:bitmap_init::@1/bitmap_init::@8->bitmap_init::@2#1] -- register_copy - jmp __b2 - // bitmap_init::@2 - __b2: - // [438] if(__bitmap_color_depth!=1) goto bitmap_init::@3 -- vbuz1_neq_vbuc1_then_la1 - lda #1 - cmp.z __bitmap_color_depth - bne __b3_from___b2 - jmp __b9 - // bitmap_init::@9 - __b9: - // [439] bitmap_init::$10 = bitmap_init::x#10 >> 2 -- vwuz1=vwuz2_ror_2 - lda.z x+1 - lsr - sta.z __10+1 - lda.z x - ror - sta.z __10 - lsr.z __10+1 - ror.z __10 - // [440] bitmap_init::$24 = bitmap_init::x#10 << 1 -- vwuz1=vwuz2_rol_1 - lda.z x - asl - sta.z __24 - lda.z x+1 - rol - sta.z __24+1 - // [441] bitmap_init::$32 = __bitmap_plot_x + bitmap_init::$24 -- pwuz1=pwuc1_plus_vwuz1 - lda.z __32 - clc - adc #<__bitmap_plot_x - sta.z __32 - lda.z __32+1 - adc #>__bitmap_plot_x - sta.z __32+1 - // [442] *bitmap_init::$32 = bitmap_init::$10 -- _deref_pwuz1=vwuz2 - ldy #0 - lda.z __10 - sta (__32),y - iny - lda.z __10+1 - sta (__32),y - // [443] bitmap_init::$33 = __bitmap_plot_bitmask + bitmap_init::x#10 -- pbuz1=pbuc1_plus_vwuz2 - lda.z x - clc - adc #<__bitmap_plot_bitmask - sta.z __33 - lda.z x+1 - adc #>__bitmap_plot_bitmask - sta.z __33+1 - // [444] *bitmap_init::$33 = bitmap_init::bitmask#11 -- _deref_pbuz1=vbuz2 - lda.z bitmask - ldy #0 - sta (__33),y - // [445] bitmap_init::$34 = __bitmap_plot_bitshift + bitmap_init::x#10 -- pbuz1=pbuc1_plus_vwuz2 - lda.z x - clc - adc #<__bitmap_plot_bitshift - sta.z __34 - lda.z x+1 - adc #>__bitmap_plot_bitshift - sta.z __34+1 - // [446] *bitmap_init::$34 = (char)bitmap_init::bitshift#11 -- _deref_pbuz1=vbuz2 - lda.z bitshift - ldy #0 - sta (__34),y - // [447] bitmap_init::bitshift#2 = bitmap_init::bitshift#11 - 2 -- vbsz1=vbsz1_minus_2 - dec.z bitshift - dec.z bitshift - // [448] bitmap_init::bitmask#2 = bitmap_init::bitmask#11 >> 2 -- vbuz1=vbuz1_ror_2 - lda.z bitmask - lsr - lsr - sta.z bitmask - // [449] phi from bitmap_init::@2 bitmap_init::@9 to bitmap_init::@3 [phi:bitmap_init::@2/bitmap_init::@9->bitmap_init::@3] - __b3_from___b2: - __b3_from___b9: - // [449] phi bitmap_init::bitshift#12 = bitmap_init::bitshift#11 [phi:bitmap_init::@2/bitmap_init::@9->bitmap_init::@3#0] -- register_copy - // [449] phi bitmap_init::bitmask#12 = bitmap_init::bitmask#11 [phi:bitmap_init::@2/bitmap_init::@9->bitmap_init::@3#1] -- register_copy - jmp __b3 - // bitmap_init::@3 - __b3: - // [450] if(__bitmap_color_depth!=2) goto bitmap_init::@4 -- vbuz1_neq_vbuc1_then_la1 - lda #2 - cmp.z __bitmap_color_depth - bne __b4_from___b3 - jmp __b10 - // bitmap_init::@10 - __b10: - // [451] bitmap_init::$13 = bitmap_init::x#10 >> 1 -- vwuz1=vwuz2_ror_1 - lda.z x+1 - lsr - sta.z __13+1 - lda.z x - ror - sta.z __13 - // [452] bitmap_init::$25 = bitmap_init::x#10 << 1 -- vwuz1=vwuz2_rol_1 - lda.z x - asl - sta.z __25 - lda.z x+1 - rol - sta.z __25+1 - // [453] bitmap_init::$35 = __bitmap_plot_x + bitmap_init::$25 -- pwuz1=pwuc1_plus_vwuz1 - lda.z __35 - clc - adc #<__bitmap_plot_x - sta.z __35 - lda.z __35+1 - adc #>__bitmap_plot_x - sta.z __35+1 - // [454] *bitmap_init::$35 = bitmap_init::$13 -- _deref_pwuz1=vwuz2 - ldy #0 - lda.z __13 - sta (__35),y - iny - lda.z __13+1 - sta (__35),y - // [455] bitmap_init::$36 = __bitmap_plot_bitmask + bitmap_init::x#10 -- pbuz1=pbuc1_plus_vwuz2 - lda.z x - clc - adc #<__bitmap_plot_bitmask - sta.z __36 - lda.z x+1 - adc #>__bitmap_plot_bitmask - sta.z __36+1 - // [456] *bitmap_init::$36 = bitmap_init::bitmask#12 -- _deref_pbuz1=vbuz2 - lda.z bitmask - ldy #0 - sta (__36),y - // [457] bitmap_init::$37 = __bitmap_plot_bitshift + bitmap_init::x#10 -- pbuz1=pbuc1_plus_vwuz2 - lda.z x - clc - adc #<__bitmap_plot_bitshift - sta.z __37 - lda.z x+1 - adc #>__bitmap_plot_bitshift - sta.z __37+1 - // [458] *bitmap_init::$37 = (char)bitmap_init::bitshift#12 -- _deref_pbuz1=vbuz2 - lda.z bitshift - ldy #0 - sta (__37),y - // [459] bitmap_init::bitshift#3 = bitmap_init::bitshift#12 - 4 -- vbsz1=vbsz1_minus_vbsc1 - lda.z bitshift - sec - sbc #4 - sta.z bitshift - // [460] bitmap_init::bitmask#3 = bitmap_init::bitmask#12 >> 4 -- vbuz1=vbuz1_ror_4 - lda.z bitmask - lsr - lsr - lsr - lsr - sta.z bitmask - // [461] phi from bitmap_init::@10 bitmap_init::@3 to bitmap_init::@4 [phi:bitmap_init::@10/bitmap_init::@3->bitmap_init::@4] - __b4_from___b10: - __b4_from___b3: - // [461] phi bitmap_init::bitmask#13 = bitmap_init::bitmask#3 [phi:bitmap_init::@10/bitmap_init::@3->bitmap_init::@4#0] -- register_copy - // [461] phi bitmap_init::bitshift#13 = bitmap_init::bitshift#3 [phi:bitmap_init::@10/bitmap_init::@3->bitmap_init::@4#1] -- register_copy - jmp __b4 - // bitmap_init::@4 - __b4: - // [462] if(__bitmap_color_depth!=3) goto bitmap_init::@5 -- vbuz1_neq_vbuc1_then_la1 - lda #3 - cmp.z __bitmap_color_depth - bne __b5 - jmp __b11 - // bitmap_init::@11 - __b11: - // [463] bitmap_init::$26 = bitmap_init::x#10 << 1 -- vwuz1=vwuz2_rol_1 - lda.z x - asl - sta.z __26 - lda.z x+1 - rol - sta.z __26+1 - // [464] bitmap_init::$38 = __bitmap_plot_x + bitmap_init::$26 -- pwuz1=pwuc1_plus_vwuz1 - lda.z __38 - clc - adc #<__bitmap_plot_x - sta.z __38 - lda.z __38+1 - adc #>__bitmap_plot_x - sta.z __38+1 - // [465] *bitmap_init::$38 = bitmap_init::x#10 -- _deref_pwuz1=vwuz2 - ldy #0 - lda.z x - sta (__38),y - iny - lda.z x+1 - sta (__38),y - // [466] bitmap_init::$39 = __bitmap_plot_bitmask + bitmap_init::x#10 -- pbuz1=pbuc1_plus_vwuz2 - lda.z x - clc - adc #<__bitmap_plot_bitmask - sta.z __39 - lda.z x+1 - adc #>__bitmap_plot_bitmask - sta.z __39+1 - // [467] *bitmap_init::$39 = bitmap_init::bitmask#13 -- _deref_pbuz1=vbuz2 - lda.z bitmask - ldy #0 - sta (__39),y - // [468] bitmap_init::$40 = __bitmap_plot_bitshift + bitmap_init::x#10 -- pbuz1=pbuc1_plus_vwuz2 - lda.z x - clc - adc #<__bitmap_plot_bitshift - sta.z __40 - lda.z x+1 - adc #>__bitmap_plot_bitshift - sta.z __40+1 - // [469] *bitmap_init::$40 = (char)bitmap_init::bitshift#13 -- _deref_pbuz1=vbuz2 - lda.z bitshift - ldy #0 - sta (__40),y - jmp __b5 - // bitmap_init::@5 - __b5: - // [470] if(bitmap_init::bitshift#13>=0) goto bitmap_init::@6 -- vbsz1_ge_0_then_la1 - lda.z bitshift - cmp #0 - bpl __b6_from___b5 - jmp __b12 - // bitmap_init::@12 - __b12: - // [471] bitmap_init::bitshift#4 = bitshifts[__bitmap_color_depth] -- vbsz1=pbsc1_derefidx_vbuz2 - ldy.z __bitmap_color_depth - lda bitshifts,y - sta.z bitshift - // [472] phi from bitmap_init::@12 bitmap_init::@5 to bitmap_init::@6 [phi:bitmap_init::@12/bitmap_init::@5->bitmap_init::@6] - __b6_from___b12: - __b6_from___b5: - // [472] phi bitmap_init::bitshift#14 = bitmap_init::bitshift#4 [phi:bitmap_init::@12/bitmap_init::@5->bitmap_init::@6#0] -- register_copy - jmp __b6 - // bitmap_init::@6 - __b6: - // [473] if(bitmap_init::bitmask#13!=0) goto bitmap_init::@7 -- vbuz1_neq_0_then_la1 - lda.z bitmask - bne __b7_from___b6 - jmp __b13 - // bitmap_init::@13 - __b13: - // [474] bitmap_init::bitmask#4 = bitmasks[__bitmap_color_depth] -- vbuz1=pbuc1_derefidx_vbuz2 - ldy.z __bitmap_color_depth - lda bitmasks,y - sta.z bitmask - // [475] phi from bitmap_init::@13 bitmap_init::@6 to bitmap_init::@7 [phi:bitmap_init::@13/bitmap_init::@6->bitmap_init::@7] - __b7_from___b13: - __b7_from___b6: - // [475] phi bitmap_init::bitmask#16 = bitmap_init::bitmask#4 [phi:bitmap_init::@13/bitmap_init::@6->bitmap_init::@7#0] -- register_copy - jmp __b7 - // bitmap_init::@7 - __b7: - // [476] bitmap_init::x#1 = ++ bitmap_init::x#10 -- vwuz1=_inc_vwuz1 - inc.z x - bne !+ - inc.z x+1 - !: - // [477] if(bitmap_init::x#1!=$280) goto bitmap_init::@1 -- vwuz1_neq_vwuc1_then_la1 - lda.z x+1 - cmp #>$280 - bne __b1_from___b7 - lda.z x - cmp #<$280 - bne __b1_from___b7 - jmp __b14 - // bitmap_init::@14 - __b14: - // [478] bitmap_init::$3 = __bitmap_color_depth << 2 -- vbuaa=vbuz1_rol_2 - lda.z __bitmap_color_depth - asl - asl - // [479] bitmap_init::$4 = bitmap_init::$3 + __bitmap_hscale -- vbuaa=vbuaa_plus_vbuz1 - clc - adc.z __bitmap_hscale - // [480] bitmap_init::$27 = bitmap_init::$4 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [481] bitmap_init::hdelta#0 = hdeltas[bitmap_init::$27] -- vwuz1=pwuc1_derefidx_vbuaa - // This sets the right delta to skip a whole line based on the scale, depending on the color depth. - tay - lda hdeltas,y - sta.z hdelta - lda hdeltas+1,y - sta.z hdelta+1 - // [482] bitmap_init::yoffs#0 = __bitmap_address -- vduz1=vduz2 - // We start at the bitmap address; The plot_y contains the bitmap address embedded so we know where a line starts. - lda.z __bitmap_address - sta.z yoffs - lda.z __bitmap_address+1 - sta.z yoffs+1 - lda.z __bitmap_address+2 - sta.z yoffs+2 - lda.z __bitmap_address+3 - sta.z yoffs+3 - // [483] phi from bitmap_init::@14 to bitmap_init::@15 [phi:bitmap_init::@14->bitmap_init::@15] - __b15_from___b14: - // [483] phi bitmap_init::yoffs#2 = bitmap_init::yoffs#0 [phi:bitmap_init::@14->bitmap_init::@15#0] -- register_copy - // [483] phi bitmap_init::y#2 = 0 [phi:bitmap_init::@14->bitmap_init::@15#1] -- vwuz1=vwuc1 - lda #<0 - sta.z y - lda #>0 - sta.z y+1 - jmp __b15 - // [483] phi from bitmap_init::@15 to bitmap_init::@15 [phi:bitmap_init::@15->bitmap_init::@15] - __b15_from___b15: - // [483] phi bitmap_init::yoffs#2 = bitmap_init::yoffs#1 [phi:bitmap_init::@15->bitmap_init::@15#0] -- register_copy - // [483] phi bitmap_init::y#2 = bitmap_init::y#1 [phi:bitmap_init::@15->bitmap_init::@15#1] -- register_copy - jmp __b15 - // bitmap_init::@15 - __b15: - // [484] bitmap_init::$28 = bitmap_init::y#2 << 2 -- vwuz1=vwuz2_rol_2 - lda.z y - asl - sta.z __28 - lda.z y+1 - rol - sta.z __28+1 - asl.z __28 - rol.z __28+1 - // [485] bitmap_init::$41 = __bitmap_plot_y + bitmap_init::$28 -- pduz1=pduc1_plus_vwuz1 - lda.z __41 - clc - adc #<__bitmap_plot_y - sta.z __41 - lda.z __41+1 - adc #>__bitmap_plot_y - sta.z __41+1 - // [486] *bitmap_init::$41 = bitmap_init::yoffs#2 -- _deref_pduz1=vduz2 - ldy #0 - lda.z yoffs - sta (__41),y - iny - lda.z yoffs+1 - sta (__41),y - iny - lda.z yoffs+2 - sta (__41),y - iny - lda.z yoffs+3 - sta (__41),y - // [487] bitmap_init::yoffs#1 = bitmap_init::yoffs#2 + bitmap_init::hdelta#0 -- vduz1=vduz1_plus_vwuz2 - lda.z yoffs - clc - adc.z hdelta - sta.z yoffs - lda.z yoffs+1 - adc.z hdelta+1 - sta.z yoffs+1 - lda.z yoffs+2 - adc #0 - sta.z yoffs+2 - lda.z yoffs+3 - adc #0 - sta.z yoffs+3 - // [488] bitmap_init::y#1 = ++ bitmap_init::y#2 -- vwuz1=_inc_vwuz1 - inc.z y - bne !+ - inc.z y+1 - !: - // [489] if(bitmap_init::y#1!=$1e0) goto bitmap_init::@15 -- vwuz1_neq_vwuc1_then_la1 - lda.z y+1 - cmp #>$1e0 - bne __b15_from___b15 - lda.z y - cmp #<$1e0 - bne __b15_from___b15 - jmp __breturn - // bitmap_init::@return - __breturn: - // [490] return - rts -} - // bitmap_clear -// Clear all graphics on the bitmap -bitmap_clear: { - .label vdelta = $a1 - .label hdelta = $9d - .label count = $72 - .label vdest = $91 - // [491] bitmap_clear::$6 = __bitmap_vscale << 1 -- vbuaa=vbuz1_rol_1 - lda.z __bitmap_vscale - asl - // [492] bitmap_clear::vdelta#0 = vdeltas[bitmap_clear::$6] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda vdeltas,y - sta.z vdelta - lda vdeltas+1,y - sta.z vdelta+1 - // [493] bitmap_clear::$0 = __bitmap_color_depth << 2 -- vbuaa=vbuz1_rol_2 - lda.z __bitmap_color_depth - asl - asl - // [494] bitmap_clear::$1 = bitmap_clear::$0 + __bitmap_hscale -- vbuaa=vbuaa_plus_vbuz1 - clc - adc.z __bitmap_hscale - // [495] bitmap_clear::$7 = bitmap_clear::$1 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [496] bitmap_clear::hdelta#0 = hdeltas[bitmap_clear::$7] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda hdeltas,y - sta.z hdelta - lda hdeltas+1,y - sta.z hdelta+1 - // [497] mul16u::a#0 = bitmap_clear::hdelta#0 -- vwuz1=vwuz2 - lda.z hdelta - sta.z mul16u.a - lda.z hdelta+1 - sta.z mul16u.a+1 - // [498] mul16u::b#0 = bitmap_clear::vdelta#0 - // [499] call mul16u - jsr mul16u - // [500] mul16u::return#0 = mul16u::res#2 -- vduz1=vduz2 - lda.z mul16u.res - sta.z mul16u.return - lda.z mul16u.res+1 - sta.z mul16u.return+1 - lda.z mul16u.res+2 - sta.z mul16u.return+2 - lda.z mul16u.res+3 - sta.z mul16u.return+3 - jmp __b1 - // bitmap_clear::@1 - __b1: - // [501] bitmap_clear::count#0 = mul16u::return#0 - // [502] bitmap_clear::vbank#0 = byte2 __bitmap_address -- vbuxx=_byte2_vduz1 - ldx.z __bitmap_address+2 - // [503] bitmap_clear::vdest#0 = word0 __bitmap_address -- vwuz1=_word0_vduz2 - lda.z __bitmap_address - sta.z vdest - lda.z __bitmap_address+1 - sta.z vdest+1 - // [504] memset_vram::vbank#0 = bitmap_clear::vbank#0 - // [505] memset_vram::vdest#0 = (void *)bitmap_clear::vdest#0 - // [506] memset_vram::num#0 = bitmap_clear::count#0 - // [507] call memset_vram - jsr memset_vram - jmp __breturn - // bitmap_clear::@return - __breturn: - // [508] return - rts -} - // kbhit -// Return true if there's a key waiting, return false if not -kbhit: { - .label chptr = ch - .label IN_DEV = $28a - // Current input device number - .label GETIN = $ffe4 - .label ch = $32 - // [509] kbhit::ch = 0 -- vbuz1=vbuc1 - lda #0 - sta.z ch - // kickasm( uses kbhit::chptr uses kbhit::IN_DEV uses kbhit::GETIN) {{ jsr _kbhit bne L3 jmp continue1 .var via1 = $9f60 //VIA#1 .var d1pra = via1+1 _kbhit: ldy d1pra // The count of keys pressed is stored in RAM bank 0. stz d1pra // Set d1pra to zero to access RAM bank 0. lda $A00A // Get number of characters from this address in the ROM of the CX16 (ROM 38). sty d1pra // Set d1pra to previous value. rts L3: ldy IN_DEV // Save current input device stz IN_DEV // Keyboard phy jsr GETIN // Read char, and return in .A ply sta chptr // Store the character read in ch sty IN_DEV // Restore input device ldx #>$0000 rts continue1: nop }} - // CBM GETIN API - jsr _kbhit - bne L3 - - jmp continue1 - - .var via1 = $9f60 //VIA#1 - .var d1pra = via1+1 - - _kbhit: - ldy d1pra // The count of keys pressed is stored in RAM bank 0. - stz d1pra // Set d1pra to zero to access RAM bank 0. - lda $A00A // Get number of characters from this address in the ROM of the CX16 (ROM 38). - sty d1pra // Set d1pra to previous value. - rts - - L3: - ldy IN_DEV // Save current input device - stz IN_DEV // Keyboard - phy - jsr GETIN // Read char, and return in .A - ply - sta chptr // Store the character read in ch - sty IN_DEV // Restore input device - ldx #>$0000 - rts - - continue1: - nop - - // [511] kbhit::return#0 = kbhit::ch -- vbuaa=vbuz1 - lda.z ch - jmp __breturn - // kbhit::@return - __breturn: - // [512] kbhit::return#1 = kbhit::return#0 - // [513] return - rts -} - // bitmap_line -// Draw a line on the bitmap -// void bitmap_line(__zp(6) unsigned int x0, __zp($a) unsigned int x1, __zp(8) unsigned int y0, __zp(2) unsigned int y1, __register(X) char c) -bitmap_line: { - .label xd = $22 - .label yd = $29 - .label yd_1 = $27 - .label x0 = 6 - .label x1 = $a - .label y0 = 8 - .label y1 = 2 - // [515] if(bitmap_line::x0#10bitmap_line_ydxi] - bitmap_line_ydxi_from___b4: - // [673] phi bitmap_line_ydxi::y1#6 = bitmap_line_ydxi::y1#0 [phi:bitmap_line::@4->bitmap_line_ydxi#0] -- register_copy - // [673] phi bitmap_line_ydxi::yd#5 = bitmap_line_ydxi::yd#0 [phi:bitmap_line::@4->bitmap_line_ydxi#1] -- register_copy - // [673] phi bitmap_line_ydxi::c#3 = bitmap_line_ydxi::c#0 [phi:bitmap_line::@4->bitmap_line_ydxi#2] -- register_copy - // [673] phi bitmap_line_ydxi::y#6 = bitmap_line_ydxi::y#0 [phi:bitmap_line::@4->bitmap_line_ydxi#3] -- register_copy - // [673] phi bitmap_line_ydxi::x#5 = bitmap_line_ydxi::x#0 [phi:bitmap_line::@4->bitmap_line_ydxi#4] -- register_copy - // [673] phi bitmap_line_ydxi::xd#2 = bitmap_line_ydxi::xd#0 [phi:bitmap_line::@4->bitmap_line_ydxi#5] -- register_copy - jsr bitmap_line_ydxi - jmp __breturn - // bitmap_line::@return - __breturn: - // [527] return - rts - // bitmap_line::@8 - __b8: - // [528] bitmap_line_xdyi::x#0 = bitmap_line::x1#10 -- vwuz1=vwuz2 - lda.z x1 - sta.z bitmap_line_xdyi.x - lda.z x1+1 - sta.z bitmap_line_xdyi.x+1 - // [529] bitmap_line_xdyi::y#0 = bitmap_line::y1#10 -- vwuz1=vwuz2 - lda.z y1 - sta.z bitmap_line_xdyi.y - lda.z y1+1 - sta.z bitmap_line_xdyi.y+1 - // [530] bitmap_line_xdyi::x1#0 = bitmap_line::x0#10 - // [531] bitmap_line_xdyi::xd#0 = bitmap_line::xd#2 - // [532] bitmap_line_xdyi::yd#0 = bitmap_line::yd#2 - // [533] bitmap_line_xdyi::c#0 = bitmap_line::c#10 -- vbuz1=vbuxx - stx.z bitmap_line_xdyi.c - // [534] call bitmap_line_xdyi - // [689] phi from bitmap_line::@8 to bitmap_line_xdyi [phi:bitmap_line::@8->bitmap_line_xdyi] - bitmap_line_xdyi_from___b8: - // [689] phi bitmap_line_xdyi::x1#6 = bitmap_line_xdyi::x1#0 [phi:bitmap_line::@8->bitmap_line_xdyi#0] -- register_copy - // [689] phi bitmap_line_xdyi::xd#5 = bitmap_line_xdyi::xd#0 [phi:bitmap_line::@8->bitmap_line_xdyi#1] -- register_copy - // [689] phi bitmap_line_xdyi::c#3 = bitmap_line_xdyi::c#0 [phi:bitmap_line::@8->bitmap_line_xdyi#2] -- register_copy - // [689] phi bitmap_line_xdyi::y#5 = bitmap_line_xdyi::y#0 [phi:bitmap_line::@8->bitmap_line_xdyi#3] -- register_copy - // [689] phi bitmap_line_xdyi::x#6 = bitmap_line_xdyi::x#0 [phi:bitmap_line::@8->bitmap_line_xdyi#4] -- register_copy - // [689] phi bitmap_line_xdyi::yd#2 = bitmap_line_xdyi::yd#0 [phi:bitmap_line::@8->bitmap_line_xdyi#5] -- register_copy - jsr bitmap_line_xdyi - jmp __breturn - // bitmap_line::@7 - __b7: - // [535] bitmap_line::yd#1 = bitmap_line::y1#10 - bitmap_line::y0#10 -- vwuz1=vwuz2_minus_vwuz3 - lda.z y1 - sec - sbc.z y0 - sta.z yd - lda.z y1+1 - sbc.z y0+1 - sta.z yd+1 - // [536] if(bitmap_line::yd#1bitmap_line_ydxd] - bitmap_line_ydxd_from___b10: - // [705] phi bitmap_line_ydxd::y1#6 = bitmap_line_ydxd::y1#0 [phi:bitmap_line::@10->bitmap_line_ydxd#0] -- register_copy - // [705] phi bitmap_line_ydxd::yd#5 = bitmap_line_ydxd::yd#0 [phi:bitmap_line::@10->bitmap_line_ydxd#1] -- register_copy - // [705] phi bitmap_line_ydxd::c#3 = bitmap_line_ydxd::c#0 [phi:bitmap_line::@10->bitmap_line_ydxd#2] -- register_copy - // [705] phi bitmap_line_ydxd::y#7 = bitmap_line_ydxd::y#0 [phi:bitmap_line::@10->bitmap_line_ydxd#3] -- register_copy - // [705] phi bitmap_line_ydxd::x#5 = bitmap_line_ydxd::x#0 [phi:bitmap_line::@10->bitmap_line_ydxd#4] -- register_copy - // [705] phi bitmap_line_ydxd::xd#2 = bitmap_line_ydxd::xd#0 [phi:bitmap_line::@10->bitmap_line_ydxd#5] -- register_copy - jsr bitmap_line_ydxd - jmp __breturn - // bitmap_line::@9 - __b9: - // [544] bitmap_line_xdyd::x#0 = bitmap_line::x1#10 -- vwuz1=vwuz2 - lda.z x1 - sta.z bitmap_line_xdyd.x - lda.z x1+1 - sta.z bitmap_line_xdyd.x+1 - // [545] bitmap_line_xdyd::y#0 = bitmap_line::y1#10 -- vwuz1=vwuz2 - lda.z y1 - sta.z bitmap_line_xdyd.y - lda.z y1+1 - sta.z bitmap_line_xdyd.y+1 - // [546] bitmap_line_xdyd::x1#0 = bitmap_line::x0#10 - // [547] bitmap_line_xdyd::xd#0 = bitmap_line::xd#2 - // [548] bitmap_line_xdyd::yd#0 = bitmap_line::yd#1 - // [549] bitmap_line_xdyd::c#0 = bitmap_line::c#10 -- vbuz1=vbuxx - stx.z bitmap_line_xdyd.c - // [550] call bitmap_line_xdyd - // [721] phi from bitmap_line::@9 to bitmap_line_xdyd [phi:bitmap_line::@9->bitmap_line_xdyd] - bitmap_line_xdyd_from___b9: - // [721] phi bitmap_line_xdyd::x1#6 = bitmap_line_xdyd::x1#0 [phi:bitmap_line::@9->bitmap_line_xdyd#0] -- register_copy - // [721] phi bitmap_line_xdyd::xd#5 = bitmap_line_xdyd::xd#0 [phi:bitmap_line::@9->bitmap_line_xdyd#1] -- register_copy - // [721] phi bitmap_line_xdyd::c#3 = bitmap_line_xdyd::c#0 [phi:bitmap_line::@9->bitmap_line_xdyd#2] -- register_copy - // [721] phi bitmap_line_xdyd::y#5 = bitmap_line_xdyd::y#0 [phi:bitmap_line::@9->bitmap_line_xdyd#3] -- register_copy - // [721] phi bitmap_line_xdyd::x#6 = bitmap_line_xdyd::x#0 [phi:bitmap_line::@9->bitmap_line_xdyd#4] -- register_copy - // [721] phi bitmap_line_xdyd::yd#2 = bitmap_line_xdyd::yd#0 [phi:bitmap_line::@9->bitmap_line_xdyd#5] -- register_copy - jsr bitmap_line_xdyd - jmp __breturn - // bitmap_line::@1 - __b1: - // [551] bitmap_line::xd#1 = bitmap_line::x1#10 - bitmap_line::x0#10 -- vwuz1=vwuz2_minus_vwuz3 - lda.z x1 - sec - sbc.z x0 - sta.z xd - lda.z x1+1 - sbc.z x0+1 - sta.z xd+1 - // [552] if(bitmap_line::y0#10bitmap_line_ydxd] - bitmap_line_ydxd_from___b6: - // [705] phi bitmap_line_ydxd::y1#6 = bitmap_line_ydxd::y1#1 [phi:bitmap_line::@6->bitmap_line_ydxd#0] -- register_copy - // [705] phi bitmap_line_ydxd::yd#5 = bitmap_line_ydxd::yd#1 [phi:bitmap_line::@6->bitmap_line_ydxd#1] -- register_copy - // [705] phi bitmap_line_ydxd::c#3 = bitmap_line_ydxd::c#1 [phi:bitmap_line::@6->bitmap_line_ydxd#2] -- register_copy - // [705] phi bitmap_line_ydxd::y#7 = bitmap_line_ydxd::y#1 [phi:bitmap_line::@6->bitmap_line_ydxd#3] -- register_copy - // [705] phi bitmap_line_ydxd::x#5 = bitmap_line_ydxd::x#1 [phi:bitmap_line::@6->bitmap_line_ydxd#4] -- register_copy - // [705] phi bitmap_line_ydxd::xd#2 = bitmap_line_ydxd::xd#1 [phi:bitmap_line::@6->bitmap_line_ydxd#5] -- register_copy - jsr bitmap_line_ydxd - jmp __breturn - // bitmap_line::@12 - __b12: - // [562] bitmap_line_xdyd::x#1 = bitmap_line::x0#10 -- vwuz1=vwuz2 - lda.z x0 - sta.z bitmap_line_xdyd.x - lda.z x0+1 - sta.z bitmap_line_xdyd.x+1 - // [563] bitmap_line_xdyd::y#1 = bitmap_line::y0#10 - // [564] bitmap_line_xdyd::x1#1 = bitmap_line::x1#10 -- vwuz1=vwuz2 - lda.z x1 - sta.z bitmap_line_xdyd.x1 - lda.z x1+1 - sta.z bitmap_line_xdyd.x1+1 - // [565] bitmap_line_xdyd::xd#1 = bitmap_line::xd#1 - // [566] bitmap_line_xdyd::yd#1 = bitmap_line::yd#10 - // [567] bitmap_line_xdyd::c#1 = bitmap_line::c#10 -- vbuz1=vbuxx - stx.z bitmap_line_xdyd.c - // [568] call bitmap_line_xdyd - // [721] phi from bitmap_line::@12 to bitmap_line_xdyd [phi:bitmap_line::@12->bitmap_line_xdyd] - bitmap_line_xdyd_from___b12: - // [721] phi bitmap_line_xdyd::x1#6 = bitmap_line_xdyd::x1#1 [phi:bitmap_line::@12->bitmap_line_xdyd#0] -- register_copy - // [721] phi bitmap_line_xdyd::xd#5 = bitmap_line_xdyd::xd#1 [phi:bitmap_line::@12->bitmap_line_xdyd#1] -- register_copy - // [721] phi bitmap_line_xdyd::c#3 = bitmap_line_xdyd::c#1 [phi:bitmap_line::@12->bitmap_line_xdyd#2] -- register_copy - // [721] phi bitmap_line_xdyd::y#5 = bitmap_line_xdyd::y#1 [phi:bitmap_line::@12->bitmap_line_xdyd#3] -- register_copy - // [721] phi bitmap_line_xdyd::x#6 = bitmap_line_xdyd::x#1 [phi:bitmap_line::@12->bitmap_line_xdyd#4] -- register_copy - // [721] phi bitmap_line_xdyd::yd#2 = bitmap_line_xdyd::yd#1 [phi:bitmap_line::@12->bitmap_line_xdyd#5] -- register_copy - jsr bitmap_line_xdyd - jmp __breturn - // bitmap_line::@11 - __b11: - // [569] bitmap_line::yd#11 = bitmap_line::y1#10 - bitmap_line::y0#10 -- vwuz1=vwuz2_minus_vwuz3 - lda.z y1 - sec - sbc.z y0 - sta.z yd_1 - lda.z y1+1 - sbc.z y0+1 - sta.z yd_1+1 - // [570] if(bitmap_line::yd#11bitmap_line_ydxi] - bitmap_line_ydxi_from___b14: - // [673] phi bitmap_line_ydxi::y1#6 = bitmap_line_ydxi::y1#1 [phi:bitmap_line::@14->bitmap_line_ydxi#0] -- register_copy - // [673] phi bitmap_line_ydxi::yd#5 = bitmap_line_ydxi::yd#1 [phi:bitmap_line::@14->bitmap_line_ydxi#1] -- register_copy - // [673] phi bitmap_line_ydxi::c#3 = bitmap_line_ydxi::c#1 [phi:bitmap_line::@14->bitmap_line_ydxi#2] -- register_copy - // [673] phi bitmap_line_ydxi::y#6 = bitmap_line_ydxi::y#1 [phi:bitmap_line::@14->bitmap_line_ydxi#3] -- register_copy - // [673] phi bitmap_line_ydxi::x#5 = bitmap_line_ydxi::x#1 [phi:bitmap_line::@14->bitmap_line_ydxi#4] -- register_copy - // [673] phi bitmap_line_ydxi::xd#2 = bitmap_line_ydxi::xd#1 [phi:bitmap_line::@14->bitmap_line_ydxi#5] -- register_copy - jsr bitmap_line_ydxi - jmp __breturn - // bitmap_line::@13 - __b13: - // [578] bitmap_line_xdyi::x#1 = bitmap_line::x0#10 -- vwuz1=vwuz2 - lda.z x0 - sta.z bitmap_line_xdyi.x - lda.z x0+1 - sta.z bitmap_line_xdyi.x+1 - // [579] bitmap_line_xdyi::y#1 = bitmap_line::y0#10 - // [580] bitmap_line_xdyi::x1#1 = bitmap_line::x1#10 -- vwuz1=vwuz2 - lda.z x1 - sta.z bitmap_line_xdyi.x1 - lda.z x1+1 - sta.z bitmap_line_xdyi.x1+1 - // [581] bitmap_line_xdyi::xd#1 = bitmap_line::xd#1 - // [582] bitmap_line_xdyi::yd#1 = bitmap_line::yd#11 - // [583] bitmap_line_xdyi::c#1 = bitmap_line::c#10 -- vbuz1=vbuxx - stx.z bitmap_line_xdyi.c - // [584] call bitmap_line_xdyi - // [689] phi from bitmap_line::@13 to bitmap_line_xdyi [phi:bitmap_line::@13->bitmap_line_xdyi] - bitmap_line_xdyi_from___b13: - // [689] phi bitmap_line_xdyi::x1#6 = bitmap_line_xdyi::x1#1 [phi:bitmap_line::@13->bitmap_line_xdyi#0] -- register_copy - // [689] phi bitmap_line_xdyi::xd#5 = bitmap_line_xdyi::xd#1 [phi:bitmap_line::@13->bitmap_line_xdyi#1] -- register_copy - // [689] phi bitmap_line_xdyi::c#3 = bitmap_line_xdyi::c#1 [phi:bitmap_line::@13->bitmap_line_xdyi#2] -- register_copy - // [689] phi bitmap_line_xdyi::y#5 = bitmap_line_xdyi::y#1 [phi:bitmap_line::@13->bitmap_line_xdyi#3] -- register_copy - // [689] phi bitmap_line_xdyi::x#6 = bitmap_line_xdyi::x#1 [phi:bitmap_line::@13->bitmap_line_xdyi#4] -- register_copy - // [689] phi bitmap_line_xdyi::yd#2 = bitmap_line_xdyi::yd#1 [phi:bitmap_line::@13->bitmap_line_xdyi#5] -- register_copy - jsr bitmap_line_xdyi - jmp __breturn -} - // rand -// Returns a pseudo-random number in the range of 0 to RAND_MAX (65535) -// Uses an xorshift pseudorandom number generator that hits all different values -// Information https://en.wikipedia.org/wiki/Xorshift -// Source http://www.retroprogramming.com/2017/07/xorshift-pseudorandom-numbers-in-z80.html -rand: { - .label __0 = $61 - .label __1 = $63 - .label __2 = $65 - .label return = $6e - // [586] rand::$0 = rand_state#13 << 7 -- vwuz1=vwuz2_rol_7 - lda.z rand_state+1 - lsr - lda.z rand_state - ror - sta.z __0+1 - lda #0 - ror - sta.z __0 - // [587] rand_state#0 = rand_state#13 ^ rand::$0 -- vwuz1=vwuz1_bxor_vwuz2 - lda.z rand_state - eor.z __0 - sta.z rand_state - lda.z rand_state+1 - eor.z __0+1 - sta.z rand_state+1 - // [588] rand::$1 = rand_state#0 >> 9 -- vwuz1=vwuz2_ror_9 - lda.z rand_state+1 - lsr - sta.z __1 - lda #0 - sta.z __1+1 - // [589] rand_state#1 = rand_state#0 ^ rand::$1 -- vwuz1=vwuz1_bxor_vwuz2 - lda.z rand_state - eor.z __1 - sta.z rand_state - lda.z rand_state+1 - eor.z __1+1 - sta.z rand_state+1 - // [590] rand::$2 = rand_state#1 << 8 -- vwuz1=vwuz2_rol_8 - lda.z rand_state - sta.z __2+1 - lda #0 - sta.z __2 - // [591] rand_state#14 = rand_state#1 ^ rand::$2 -- vwuz1=vwuz1_bxor_vwuz2 - lda.z rand_state - eor.z __2 - sta.z rand_state - lda.z rand_state+1 - eor.z __2+1 - sta.z rand_state+1 - // [592] rand::return#0 = rand_state#14 -- vwuz1=vwuz2 - lda.z rand_state - sta.z return - lda.z rand_state+1 - sta.z return+1 - jmp __breturn - // rand::@return - __breturn: - // [593] return - rts -} - // modr16u -// Performs modulo on two 16 bit unsigned ints and an initial remainder -// Returns the remainder. -// Implemented using simple binary division -// __zp($76) unsigned int modr16u(__zp(2) unsigned int dividend, __zp($8f) unsigned int divisor, unsigned int rem) -modr16u: { - .label return = $76 - .label dividend = 2 - .label divisor = $8f - // [595] divr16u::dividend#1 = modr16u::dividend#4 - // [596] divr16u::divisor#0 = modr16u::divisor#4 -- vwuz1=vwuz2 - lda.z divisor - sta.z divr16u.divisor - lda.z divisor+1 - sta.z divr16u.divisor+1 - // [597] call divr16u - // [737] phi from modr16u to divr16u [phi:modr16u->divr16u] - divr16u_from_modr16u: - jsr divr16u - jmp __b1 - // modr16u::@1 - __b1: - // [598] modr16u::return#0 = rem16u#0 -- vwuz1=vwuz2 - lda.z rem16u - sta.z return - lda.z rem16u+1 - sta.z return+1 - jmp __breturn - // modr16u::@return - __breturn: - // [599] return - rts -} - // vera_layer_set_text_color_mode -// Set the configuration of the layer text color mode. -// - layer: Value of 0 or 1. -// - color_mode: Specifies the color mode to be VERA_LAYER_CONFIG_16 or VERA_LAYER_CONFIG_256 for text mode. -// void vera_layer_set_text_color_mode(char layer, char color_mode) -vera_layer_set_text_color_mode: { - .label addr = $25 - // [600] vera_layer_set_text_color_mode::addr#0 = *(vera_layer_config+vera_layer_mode_text::layer#0*SIZEOF_POINTER) -- pbuz1=_deref_qbuc1 - lda vera_layer_config+vera_layer_mode_text.layer*SIZEOF_POINTER - sta.z addr - lda vera_layer_config+vera_layer_mode_text.layer*SIZEOF_POINTER+1 - sta.z addr+1 - // [601] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 & ~VERA_LAYER_CONFIG_256C -- _deref_pbuz1=_deref_pbuz1_band_vbuc1 - lda #VERA_LAYER_CONFIG_256C^$ff - ldy #0 - and (addr),y - ldy #0 - sta (addr),y - // [602] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 -- _deref_pbuz1=_deref_pbuz1 - ldy #0 - lda (addr),y - ldy #0 - sta (addr),y - jmp __breturn - // vera_layer_set_text_color_mode::@return - __breturn: - // [603] return - rts -} - // vera_layer_get_mapbase_bank -// Get the map base bank of the tiles for the layer. -// - layer: Value of 0 or 1. -// - return: Bank in vera vram. -// __register(A) char vera_layer_get_mapbase_bank(__register(X) char layer) -vera_layer_get_mapbase_bank: { - // [604] vera_layer_get_mapbase_bank::return#0 = vera_mapbase_bank[vera_layer_get_mapbase_bank::layer#0] -- vbuaa=pbuc1_derefidx_vbuxx - lda vera_mapbase_bank,x - jmp __breturn - // vera_layer_get_mapbase_bank::@return - __breturn: - // [605] return - rts -} - // vera_layer_get_mapbase_offset -// Get the map base lower 16-bit address (offset) of the tiles for the layer. -// - layer: Value of 0 or 1. -// - return: Offset in vera vram of the specified bank. -// __zp($8d) unsigned int vera_layer_get_mapbase_offset(__register(A) char layer) -vera_layer_get_mapbase_offset: { - .label return = $8d - // [606] vera_layer_get_mapbase_offset::$0 = vera_layer_get_mapbase_offset::layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [607] vera_layer_get_mapbase_offset::return#0 = vera_mapbase_offset[vera_layer_get_mapbase_offset::$0] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda vera_mapbase_offset,y - sta.z return - lda vera_mapbase_offset+1,y - sta.z return+1 - jmp __breturn - // vera_layer_get_mapbase_offset::@return - __breturn: - // [608] return - rts -} - // vera_layer_get_rowshift -// Get the bit shift value required to skip a whole line fast. -// - layer: Value of 0 or 1. -// - return: Rowshift value to calculate fast from a y value to line offset in tile mode. -// __register(A) char vera_layer_get_rowshift(__register(X) char layer) -vera_layer_get_rowshift: { - // [609] vera_layer_get_rowshift::return#0 = vera_layer_rowshift[vera_layer_get_rowshift::layer#0] -- vbuaa=pbuc1_derefidx_vbuxx - lda vera_layer_rowshift,x - jmp __breturn - // vera_layer_get_rowshift::@return - __breturn: - // [610] return - rts -} - // vera_layer_get_rowskip -// Get the value required to skip a whole line fast. -// - layer: Value of 0 or 1. -// - return: Skip value to calculate fast from a y value to line offset in tile mode. -// __zp($7f) unsigned int vera_layer_get_rowskip(__register(A) char layer) -vera_layer_get_rowskip: { - .label return = $7f - // [611] vera_layer_get_rowskip::$0 = vera_layer_get_rowskip::layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [612] vera_layer_get_rowskip::return#0 = vera_layer_rowskip[vera_layer_get_rowskip::$0] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda vera_layer_rowskip,y - sta.z return - lda vera_layer_rowskip+1,y - sta.z return+1 - jmp __breturn - // vera_layer_get_rowskip::@return - __breturn: - // [613] return - rts -} - // cscroll -// Scroll the entire screen if the cursor is beyond the last line -cscroll: { - // [614] if(conio_cursor_y[conio_screen_layer]cscroll::@3] - __b3_from___b2: - jmp __b3 - // cscroll::@3 - __b3: - jmp __breturn - // cscroll::@return - __breturn: - // [618] return - rts - // [619] phi from cscroll::@1 to cscroll::@4 [phi:cscroll::@1->cscroll::@4] - __b4_from___b1: - jmp __b4 - // cscroll::@4 - __b4: - // [620] call insertup - jsr insertup - jmp __b5 - // cscroll::@5 - __b5: - // [621] gotoxy::y#2 = conio_screen_height - 1 -- vbuxx=vbuz1_minus_1 - ldx.z conio_screen_height - dex - // [622] call gotoxy - // [241] phi from cscroll::@5 to gotoxy [phi:cscroll::@5->gotoxy] - gotoxy_from___b5: - // [241] phi gotoxy::y#7 = gotoxy::y#2 [phi:cscroll::@5->gotoxy#0] -- register_copy - jsr gotoxy - jmp __breturn -} - // vera_layer_set_config -// Set the configuration of the layer. -// - layer: Value of 0 or 1. -// - config: Specifies the modes which are specified using T256C / 'Bitmap Mode' / 'Color Depth'. -// void vera_layer_set_config(__register(A) char layer, __register(X) char config) -vera_layer_set_config: { - .label addr = $25 - // [624] vera_layer_set_config::$0 = vera_layer_set_config::layer#2 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [625] vera_layer_set_config::addr#0 = vera_layer_config[vera_layer_set_config::$0] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_config,y - sta.z addr - lda vera_layer_config+1,y - sta.z addr+1 - // [626] *vera_layer_set_config::addr#0 = vera_layer_set_config::config#2 -- _deref_pbuz1=vbuxx - txa - ldy #0 - sta (addr),y - jmp __breturn - // vera_layer_set_config::@return - __breturn: - // [627] return - rts -} - // vera_layer_set_tilebase -// Set the base of the tiles for the layer with which the conio will interact. -// - layer: Value of 0 or 1. -// - tilebase: Specifies the base address of the tile map. -// Note that the register only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// void vera_layer_set_tilebase(__register(A) char layer, __register(X) char tilebase) -vera_layer_set_tilebase: { - .label addr = $25 - // [629] vera_layer_set_tilebase::$0 = vera_layer_set_tilebase::layer#2 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [630] vera_layer_set_tilebase::addr#0 = vera_layer_tilebase[vera_layer_set_tilebase::$0] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_tilebase,y - sta.z addr - lda vera_layer_tilebase+1,y - sta.z addr+1 - // [631] *vera_layer_set_tilebase::addr#0 = vera_layer_set_tilebase::tilebase#2 -- _deref_pbuz1=vbuxx - txa - ldy #0 - sta (addr),y - jmp __breturn - // vera_layer_set_tilebase::@return - __breturn: - // [632] return - rts -} - // vera_layer_get_backcolor -// Get the back color for text output. The old back text color setting is returned. -// - layer: Value of 0 or 1. -// - return: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_backcolor(__register(X) char layer) -vera_layer_get_backcolor: { - // [633] vera_layer_get_backcolor::return#1 = vera_layer_backcolor[vera_layer_get_backcolor::layer#0] -- vbuaa=pbuc1_derefidx_vbuxx - lda vera_layer_backcolor,x - jmp __breturn - // vera_layer_get_backcolor::@return - __breturn: - // [634] return - rts -} - // vera_layer_get_textcolor -// Get the front color for text output. The old front text color setting is returned. -// - layer: Value of 0 or 1. -// - return: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_textcolor(__register(X) char layer) -vera_layer_get_textcolor: { - // [635] vera_layer_get_textcolor::return#1 = vera_layer_textcolor[vera_layer_get_textcolor::layer#0] -- vbuaa=pbuc1_derefidx_vbuxx - lda vera_layer_textcolor,x - jmp __breturn - // vera_layer_get_textcolor::@return - __breturn: - // [636] return - rts -} - // vera_display_get_hscale -vera_display_get_hscale: { - .const scale = 0 - // [638] phi from vera_display_get_hscale to vera_display_get_hscale::@1 [phi:vera_display_get_hscale->vera_display_get_hscale::@1] - __b1_from_vera_display_get_hscale: - // [638] phi vera_display_get_hscale::s#2 = 1 [phi:vera_display_get_hscale->vera_display_get_hscale::@1#0] -- vbuxx=vbuc1 - ldx #1 - jmp __b1 - // [638] phi from vera_display_get_hscale::@2 to vera_display_get_hscale::@1 [phi:vera_display_get_hscale::@2->vera_display_get_hscale::@1] - __b1_from___b2: - // [638] phi vera_display_get_hscale::s#2 = vera_display_get_hscale::s#1 [phi:vera_display_get_hscale::@2->vera_display_get_hscale::@1#0] -- register_copy - jmp __b1 - // vera_display_get_hscale::@1 - __b1: - // [639] if(*VERA_DC_HSCALE!=vera_display_get_hscale::hscale[vera_display_get_hscale::s#2]) goto vera_display_get_hscale::@2 -- _deref_pbuc1_neq_pbuc2_derefidx_vbuxx_then_la1 - lda hscale,x - cmp VERA_DC_HSCALE - bne __b2 - // [642] phi from vera_display_get_hscale::@1 to vera_display_get_hscale::@3 [phi:vera_display_get_hscale::@1->vera_display_get_hscale::@3] - __b3_from___b1: - // [642] phi vera_display_get_hscale::return#0 = vera_display_get_hscale::s#2 [phi:vera_display_get_hscale::@1->vera_display_get_hscale::@3#0] -- register_copy - jmp __b3 - // vera_display_get_hscale::@2 - __b2: - // [640] vera_display_get_hscale::s#1 = ++ vera_display_get_hscale::s#2 -- vbuxx=_inc_vbuxx - inx - // [641] if(vera_display_get_hscale::s#1!=4) goto vera_display_get_hscale::@1 -- vbuxx_neq_vbuc1_then_la1 - cpx #4 - bne __b1_from___b2 - // [642] phi from vera_display_get_hscale::@2 to vera_display_get_hscale::@3 [phi:vera_display_get_hscale::@2->vera_display_get_hscale::@3] - __b3_from___b2: - // [642] phi vera_display_get_hscale::return#0 = vera_display_get_hscale::scale#0 [phi:vera_display_get_hscale::@2->vera_display_get_hscale::@3#0] -- vbuxx=vbuc1 - ldx #scale - jmp __b3 - // vera_display_get_hscale::@3 - __b3: - jmp __breturn - // vera_display_get_hscale::@return - __breturn: - // [643] return - rts - .segment Data - hscale: .byte 0, $80, $40, $20 -} -.segment Code - // vera_display_get_vscale -vera_display_get_vscale: { - .const scale = 0 - // [645] phi from vera_display_get_vscale to vera_display_get_vscale::@1 [phi:vera_display_get_vscale->vera_display_get_vscale::@1] - __b1_from_vera_display_get_vscale: - // [645] phi vera_display_get_vscale::s#2 = 1 [phi:vera_display_get_vscale->vera_display_get_vscale::@1#0] -- vbuxx=vbuc1 - ldx #1 - jmp __b1 - // [645] phi from vera_display_get_vscale::@2 to vera_display_get_vscale::@1 [phi:vera_display_get_vscale::@2->vera_display_get_vscale::@1] - __b1_from___b2: - // [645] phi vera_display_get_vscale::s#2 = vera_display_get_vscale::s#1 [phi:vera_display_get_vscale::@2->vera_display_get_vscale::@1#0] -- register_copy - jmp __b1 - // vera_display_get_vscale::@1 - __b1: - // [646] if(*VERA_DC_VSCALE!=vera_display_get_vscale::vscale[vera_display_get_vscale::s#2]) goto vera_display_get_vscale::@2 -- _deref_pbuc1_neq_pbuc2_derefidx_vbuxx_then_la1 - lda vscale,x - cmp VERA_DC_VSCALE - bne __b2 - // [649] phi from vera_display_get_vscale::@1 to vera_display_get_vscale::@3 [phi:vera_display_get_vscale::@1->vera_display_get_vscale::@3] - __b3_from___b1: - // [649] phi vera_display_get_vscale::return#0 = vera_display_get_vscale::s#2 [phi:vera_display_get_vscale::@1->vera_display_get_vscale::@3#0] -- register_copy - jmp __b3 - // vera_display_get_vscale::@2 - __b2: - // [647] vera_display_get_vscale::s#1 = ++ vera_display_get_vscale::s#2 -- vbuxx=_inc_vbuxx - inx - // [648] if(vera_display_get_vscale::s#1!=4) goto vera_display_get_vscale::@1 -- vbuxx_neq_vbuc1_then_la1 - cpx #4 - bne __b1_from___b2 - // [649] phi from vera_display_get_vscale::@2 to vera_display_get_vscale::@3 [phi:vera_display_get_vscale::@2->vera_display_get_vscale::@3] - __b3_from___b2: - // [649] phi vera_display_get_vscale::return#0 = vera_display_get_vscale::scale#0 [phi:vera_display_get_vscale::@2->vera_display_get_vscale::@3#0] -- vbuxx=vbuc1 - ldx #scale - jmp __b3 - // vera_display_get_vscale::@3 - __b3: - jmp __breturn - // vera_display_get_vscale::@return - __breturn: - // [650] return - rts - .segment Data - vscale: .byte 0, $80, $40, $20 -} -.segment Code - // mul16u -// Perform binary multiplication of two unsigned 16-bit unsigned ints into a 32-bit unsigned long -// __zp($72) unsigned long mul16u(__zp(2) unsigned int a, __zp($a1) unsigned int b) -mul16u: { - .label a = 2 - .label b = $a1 - .label return = $72 - .label mb = $1a - .label res = $10 - // [651] mul16u::mb#0 = (unsigned long)mul16u::b#0 -- vduz1=_dword_vwuz2 - lda.z b - sta.z mb - lda.z b+1 - sta.z mb+1 - lda #0 - sta.z mb+2 - sta.z mb+3 - // [652] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] - __b1_from_mul16u: - // [652] phi mul16u::mb#2 = mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy - // [652] phi mul16u::res#2 = 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 - lda #<0 - sta.z res - lda #>0 - sta.z res+1 - lda #<0>>$10 - sta.z res+2 - lda #>0>>$10 - sta.z res+3 - // [652] phi mul16u::a#2 = mul16u::a#0 [phi:mul16u->mul16u::@1#2] -- register_copy - jmp __b1 - // mul16u::@1 - __b1: - // [653] if(mul16u::a#2!=0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 - lda.z a - ora.z a+1 - bne __b2 - jmp __breturn - // mul16u::@return - __breturn: - // [654] return - rts - // mul16u::@2 - __b2: - // [655] mul16u::$1 = mul16u::a#2 & 1 -- vbuaa=vwuz1_band_vbuc1 - lda #1 - and.z a - // [656] if(mul16u::$1==0) goto mul16u::@3 -- vbuaa_eq_0_then_la1 - cmp #0 - beq __b3_from___b2 - jmp __b4 - // mul16u::@4 - __b4: - // [657] mul16u::res#1 = mul16u::res#2 + mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 - clc - lda.z res - adc.z mb - sta.z res - lda.z res+1 - adc.z mb+1 - sta.z res+1 - lda.z res+2 - adc.z mb+2 - sta.z res+2 - lda.z res+3 - adc.z mb+3 - sta.z res+3 - // [658] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] - __b3_from___b2: - __b3_from___b4: - // [658] phi mul16u::res#6 = mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy - jmp __b3 - // mul16u::@3 - __b3: - // [659] mul16u::a#1 = mul16u::a#2 >> 1 -- vwuz1=vwuz1_ror_1 - lsr.z a+1 - ror.z a - // [660] mul16u::mb#1 = mul16u::mb#2 << 1 -- vduz1=vduz1_rol_1 - asl.z mb - rol.z mb+1 - rol.z mb+2 - rol.z mb+3 - // [652] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] - __b1_from___b3: - // [652] phi mul16u::mb#2 = mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy - // [652] phi mul16u::res#2 = mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy - // [652] phi mul16u::a#2 = mul16u::a#1 [phi:mul16u::@3->mul16u::@1#2] -- register_copy - jmp __b1 -} - // memset_vram -// Set block of memory to a value in VRAM. -// Sets num bytes to a value to the memory block pointed to by destination in VRAM. -// - vbank: Which 64K VRAM bank to put data into (0/1) -// - vdest: The destination address in VRAM -// - data: The value to set the vram with. -// - num: The number of bytes to set -// void memset_vram(__register(X) char vbank, __zp($91) void *vdest, char data, __zp($72) unsigned long num) -memset_vram: { - .const data = 0 - .label i = $10 - .label vdest = $91 - .label num = $72 - // [661] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // [662] memset_vram::$0 = byte0 memset_vram::vdest#0 -- vbuaa=_byte0_pvoz1 - lda.z vdest - // [663] *VERA_ADDRX_L = memset_vram::$0 -- _deref_pbuc1=vbuaa - // Set address - sta VERA_ADDRX_L - // [664] memset_vram::$1 = byte1 memset_vram::vdest#0 -- vbuaa=_byte1_pvoz1 - lda.z vdest+1 - // [665] *VERA_ADDRX_M = memset_vram::$1 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // [666] memset_vram::$2 = VERA_INC_1 | memset_vram::vbank#0 -- vbuaa=vbuc1_bor_vbuxx - txa - ora #VERA_INC_1 - // [667] *VERA_ADDRX_H = memset_vram::$2 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_H - // [668] phi from memset_vram to memset_vram::@1 [phi:memset_vram->memset_vram::@1] - __b1_from_memset_vram: - // [668] phi memset_vram::i#2 = 0 [phi:memset_vram->memset_vram::@1#0] -- vduz1=vduc1 - lda #<0 - sta.z i - lda #>0 - sta.z i+1 - lda #<0>>$10 - sta.z i+2 - lda #>0>>$10 - sta.z i+3 - jmp __b1 - // Transfer the data - // memset_vram::@1 - __b1: - // [669] if(memset_vram::i#2memset_vram::@1] - __b1_from___b2: - // [668] phi memset_vram::i#2 = memset_vram::i#1 [phi:memset_vram::@2->memset_vram::@1#0] -- register_copy - jmp __b1 -} - // bitmap_line_ydxi -// void bitmap_line_ydxi(__zp(4) unsigned int y, __zp(6) unsigned int x, __zp(8) unsigned int y1, __zp($27) unsigned int yd, __zp($22) unsigned int xd, __zp($20) char c) -bitmap_line_ydxi: { - .label __6 = $1e - .label y = 4 - .label x = 6 - .label y1 = 8 - .label yd = $27 - .label xd = $22 - .label c = $20 - .label e = $18 - // [674] bitmap_line_ydxi::e#0 = bitmap_line_ydxi::xd#2 >> 1 -- vwuz1=vwuz2_ror_1 - lda.z xd+1 - lsr - sta.z e+1 - lda.z xd - ror - sta.z e - // [675] phi from bitmap_line_ydxi bitmap_line_ydxi::@2 to bitmap_line_ydxi::@1 [phi:bitmap_line_ydxi/bitmap_line_ydxi::@2->bitmap_line_ydxi::@1] - __b1_from_bitmap_line_ydxi: - __b1_from___b2: - // [675] phi bitmap_line_ydxi::e#3 = bitmap_line_ydxi::e#0 [phi:bitmap_line_ydxi/bitmap_line_ydxi::@2->bitmap_line_ydxi::@1#0] -- register_copy - // [675] phi bitmap_line_ydxi::y#3 = bitmap_line_ydxi::y#6 [phi:bitmap_line_ydxi/bitmap_line_ydxi::@2->bitmap_line_ydxi::@1#1] -- register_copy - // [675] phi bitmap_line_ydxi::x#3 = bitmap_line_ydxi::x#5 [phi:bitmap_line_ydxi/bitmap_line_ydxi::@2->bitmap_line_ydxi::@1#2] -- register_copy - jmp __b1 - // bitmap_line_ydxi::@1 - __b1: - // [676] bitmap_plot::x#2 = bitmap_line_ydxi::x#3 -- vwuz1=vwuz2 - lda.z x - sta.z bitmap_plot.x - lda.z x+1 - sta.z bitmap_plot.x+1 - // [677] bitmap_plot::y#2 = bitmap_line_ydxi::y#3 - // [678] bitmap_plot::c#3 = bitmap_line_ydxi::c#3 -- vbuxx=vbuz1 - ldx.z c - // [679] call bitmap_plot - // [771] phi from bitmap_line_ydxi::@1 to bitmap_plot [phi:bitmap_line_ydxi::@1->bitmap_plot] - bitmap_plot_from___b1: - // [771] phi bitmap_plot::c#5 = bitmap_plot::c#3 [phi:bitmap_line_ydxi::@1->bitmap_plot#0] -- register_copy - // [771] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line_ydxi::@1->bitmap_plot#1] -- register_copy - // [771] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line_ydxi::@1->bitmap_plot#2] -- register_copy - jsr bitmap_plot - jmp __b4 - // bitmap_line_ydxi::@4 - __b4: - // [680] bitmap_line_ydxi::y#2 = ++ bitmap_line_ydxi::y#3 -- vwuz1=_inc_vwuz1 - inc.z y - bne !+ - inc.z y+1 - !: - // [681] bitmap_line_ydxi::e#1 = bitmap_line_ydxi::e#3 + bitmap_line_ydxi::xd#2 -- vwuz1=vwuz1_plus_vwuz2 - clc - lda.z e - adc.z xd - sta.z e - lda.z e+1 - adc.z xd+1 - sta.z e+1 - // [682] if(bitmap_line_ydxi::yd#5>=bitmap_line_ydxi::e#1) goto bitmap_line_ydxi::@2 -- vwuz1_ge_vwuz2_then_la1 - lda.z e+1 - cmp.z yd+1 - bne !+ - lda.z e - cmp.z yd - beq __b2_from___b4 - !: - bcc __b2_from___b4 - jmp __b3 - // bitmap_line_ydxi::@3 - __b3: - // [683] bitmap_line_ydxi::x#2 = ++ bitmap_line_ydxi::x#3 -- vwuz1=_inc_vwuz1 - inc.z x - bne !+ - inc.z x+1 - !: - // [684] bitmap_line_ydxi::e#2 = bitmap_line_ydxi::e#1 - bitmap_line_ydxi::yd#5 -- vwuz1=vwuz1_minus_vwuz2 - lda.z e - sec - sbc.z yd - sta.z e - lda.z e+1 - sbc.z yd+1 - sta.z e+1 - // [685] phi from bitmap_line_ydxi::@3 bitmap_line_ydxi::@4 to bitmap_line_ydxi::@2 [phi:bitmap_line_ydxi::@3/bitmap_line_ydxi::@4->bitmap_line_ydxi::@2] - __b2_from___b3: - __b2_from___b4: - // [685] phi bitmap_line_ydxi::e#6 = bitmap_line_ydxi::e#2 [phi:bitmap_line_ydxi::@3/bitmap_line_ydxi::@4->bitmap_line_ydxi::@2#0] -- register_copy - // [685] phi bitmap_line_ydxi::x#6 = bitmap_line_ydxi::x#2 [phi:bitmap_line_ydxi::@3/bitmap_line_ydxi::@4->bitmap_line_ydxi::@2#1] -- register_copy - jmp __b2 - // bitmap_line_ydxi::@2 - __b2: - // [686] bitmap_line_ydxi::$6 = bitmap_line_ydxi::y1#6 + 1 -- vwuz1=vwuz2_plus_1 - clc - lda.z y1 - adc #1 - sta.z __6 - lda.z y1+1 - adc #0 - sta.z __6+1 - // [687] if(bitmap_line_ydxi::y#2!=bitmap_line_ydxi::$6) goto bitmap_line_ydxi::@1 -- vwuz1_neq_vwuz2_then_la1 - lda.z y+1 - cmp.z __6+1 - bne __b1_from___b2 - lda.z y - cmp.z __6 - bne __b1_from___b2 - jmp __breturn - // bitmap_line_ydxi::@return - __breturn: - // [688] return - rts -} - // bitmap_line_xdyi -// void bitmap_line_xdyi(__zp($1e) unsigned int x, __zp(8) unsigned int y, __zp(6) unsigned int x1, __zp($22) unsigned int xd, __zp($27) unsigned int yd, __zp($21) char c) -bitmap_line_xdyi: { - .label __6 = $e - .label x = $1e - .label y = 8 - .label x1 = 6 - .label xd = $22 - .label yd = $27 - .label c = $21 - .label e = $18 - // [690] bitmap_line_xdyi::e#0 = bitmap_line_xdyi::yd#2 >> 1 -- vwuz1=vwuz2_ror_1 - lda.z yd+1 - lsr - sta.z e+1 - lda.z yd - ror - sta.z e - // [691] phi from bitmap_line_xdyi bitmap_line_xdyi::@2 to bitmap_line_xdyi::@1 [phi:bitmap_line_xdyi/bitmap_line_xdyi::@2->bitmap_line_xdyi::@1] - __b1_from_bitmap_line_xdyi: - __b1_from___b2: - // [691] phi bitmap_line_xdyi::e#3 = bitmap_line_xdyi::e#0 [phi:bitmap_line_xdyi/bitmap_line_xdyi::@2->bitmap_line_xdyi::@1#0] -- register_copy - // [691] phi bitmap_line_xdyi::y#3 = bitmap_line_xdyi::y#5 [phi:bitmap_line_xdyi/bitmap_line_xdyi::@2->bitmap_line_xdyi::@1#1] -- register_copy - // [691] phi bitmap_line_xdyi::x#3 = bitmap_line_xdyi::x#6 [phi:bitmap_line_xdyi/bitmap_line_xdyi::@2->bitmap_line_xdyi::@1#2] -- register_copy - jmp __b1 - // bitmap_line_xdyi::@1 - __b1: - // [692] bitmap_plot::x#0 = bitmap_line_xdyi::x#3 - // [693] bitmap_plot::y#0 = bitmap_line_xdyi::y#3 -- vwuz1=vwuz2 - lda.z y - sta.z bitmap_plot.y - lda.z y+1 - sta.z bitmap_plot.y+1 - // [694] bitmap_plot::c#1 = bitmap_line_xdyi::c#3 -- vbuxx=vbuz1 - ldx.z c - // [695] call bitmap_plot - // [771] phi from bitmap_line_xdyi::@1 to bitmap_plot [phi:bitmap_line_xdyi::@1->bitmap_plot] - bitmap_plot_from___b1: - // [771] phi bitmap_plot::c#5 = bitmap_plot::c#1 [phi:bitmap_line_xdyi::@1->bitmap_plot#0] -- register_copy - // [771] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line_xdyi::@1->bitmap_plot#1] -- register_copy - // [771] phi bitmap_plot::x#4 = bitmap_plot::x#0 [phi:bitmap_line_xdyi::@1->bitmap_plot#2] -- register_copy - jsr bitmap_plot - jmp __b4 - // bitmap_line_xdyi::@4 - __b4: - // [696] bitmap_line_xdyi::x#2 = ++ bitmap_line_xdyi::x#3 -- vwuz1=_inc_vwuz1 - inc.z x - bne !+ - inc.z x+1 - !: - // [697] bitmap_line_xdyi::e#1 = bitmap_line_xdyi::e#3 + bitmap_line_xdyi::yd#2 -- vwuz1=vwuz1_plus_vwuz2 - clc - lda.z e - adc.z yd - sta.z e - lda.z e+1 - adc.z yd+1 - sta.z e+1 - // [698] if(bitmap_line_xdyi::xd#5>=bitmap_line_xdyi::e#1) goto bitmap_line_xdyi::@2 -- vwuz1_ge_vwuz2_then_la1 - lda.z e+1 - cmp.z xd+1 - bne !+ - lda.z e - cmp.z xd - beq __b2_from___b4 - !: - bcc __b2_from___b4 - jmp __b3 - // bitmap_line_xdyi::@3 - __b3: - // [699] bitmap_line_xdyi::y#2 = ++ bitmap_line_xdyi::y#3 -- vwuz1=_inc_vwuz1 - inc.z y - bne !+ - inc.z y+1 - !: - // [700] bitmap_line_xdyi::e#2 = bitmap_line_xdyi::e#1 - bitmap_line_xdyi::xd#5 -- vwuz1=vwuz1_minus_vwuz2 - lda.z e - sec - sbc.z xd - sta.z e - lda.z e+1 - sbc.z xd+1 - sta.z e+1 - // [701] phi from bitmap_line_xdyi::@3 bitmap_line_xdyi::@4 to bitmap_line_xdyi::@2 [phi:bitmap_line_xdyi::@3/bitmap_line_xdyi::@4->bitmap_line_xdyi::@2] - __b2_from___b3: - __b2_from___b4: - // [701] phi bitmap_line_xdyi::e#6 = bitmap_line_xdyi::e#2 [phi:bitmap_line_xdyi::@3/bitmap_line_xdyi::@4->bitmap_line_xdyi::@2#0] -- register_copy - // [701] phi bitmap_line_xdyi::y#6 = bitmap_line_xdyi::y#2 [phi:bitmap_line_xdyi::@3/bitmap_line_xdyi::@4->bitmap_line_xdyi::@2#1] -- register_copy - jmp __b2 - // bitmap_line_xdyi::@2 - __b2: - // [702] bitmap_line_xdyi::$6 = bitmap_line_xdyi::x1#6 + 1 -- vwuz1=vwuz2_plus_1 - clc - lda.z x1 - adc #1 - sta.z __6 - lda.z x1+1 - adc #0 - sta.z __6+1 - // [703] if(bitmap_line_xdyi::x#2!=bitmap_line_xdyi::$6) goto bitmap_line_xdyi::@1 -- vwuz1_neq_vwuz2_then_la1 - lda.z x+1 - cmp.z __6+1 - bne __b1_from___b2 - lda.z x - cmp.z __6 - bne __b1_from___b2 - jmp __breturn - // bitmap_line_xdyi::@return - __breturn: - // [704] return - rts -} - // bitmap_line_ydxd -// void bitmap_line_ydxd(__zp(4) unsigned int y, __zp(6) unsigned int x, __zp(8) unsigned int y1, __zp($29) unsigned int yd, __zp($22) unsigned int xd, __zp($20) char c) -bitmap_line_ydxd: { - .label __6 = $e - .label y = 4 - .label x = 6 - .label y1 = 8 - .label yd = $29 - .label xd = $22 - .label c = $20 - .label e = $18 - // [706] bitmap_line_ydxd::e#0 = bitmap_line_ydxd::xd#2 >> 1 -- vwuz1=vwuz2_ror_1 - lda.z xd+1 - lsr - sta.z e+1 - lda.z xd - ror - sta.z e - // [707] phi from bitmap_line_ydxd bitmap_line_ydxd::@2 to bitmap_line_ydxd::@1 [phi:bitmap_line_ydxd/bitmap_line_ydxd::@2->bitmap_line_ydxd::@1] - __b1_from_bitmap_line_ydxd: - __b1_from___b2: - // [707] phi bitmap_line_ydxd::e#3 = bitmap_line_ydxd::e#0 [phi:bitmap_line_ydxd/bitmap_line_ydxd::@2->bitmap_line_ydxd::@1#0] -- register_copy - // [707] phi bitmap_line_ydxd::y#2 = bitmap_line_ydxd::y#7 [phi:bitmap_line_ydxd/bitmap_line_ydxd::@2->bitmap_line_ydxd::@1#1] -- register_copy - // [707] phi bitmap_line_ydxd::x#3 = bitmap_line_ydxd::x#5 [phi:bitmap_line_ydxd/bitmap_line_ydxd::@2->bitmap_line_ydxd::@1#2] -- register_copy - jmp __b1 - // bitmap_line_ydxd::@1 - __b1: - // [708] bitmap_plot::x#3 = bitmap_line_ydxd::x#3 -- vwuz1=vwuz2 - lda.z x - sta.z bitmap_plot.x - lda.z x+1 - sta.z bitmap_plot.x+1 - // [709] bitmap_plot::y#3 = bitmap_line_ydxd::y#2 - // [710] bitmap_plot::c#4 = bitmap_line_ydxd::c#3 -- vbuxx=vbuz1 - ldx.z c - // [711] call bitmap_plot - // [771] phi from bitmap_line_ydxd::@1 to bitmap_plot [phi:bitmap_line_ydxd::@1->bitmap_plot] - bitmap_plot_from___b1: - // [771] phi bitmap_plot::c#5 = bitmap_plot::c#4 [phi:bitmap_line_ydxd::@1->bitmap_plot#0] -- register_copy - // [771] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line_ydxd::@1->bitmap_plot#1] -- register_copy - // [771] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line_ydxd::@1->bitmap_plot#2] -- register_copy - jsr bitmap_plot - jmp __b4 - // bitmap_line_ydxd::@4 - __b4: - // [712] bitmap_line_ydxd::y#3 = ++ bitmap_line_ydxd::y#2 -- vwuz1=_inc_vwuz1 - inc.z y - bne !+ - inc.z y+1 - !: - // [713] bitmap_line_ydxd::e#1 = bitmap_line_ydxd::e#3 + bitmap_line_ydxd::xd#2 -- vwuz1=vwuz1_plus_vwuz2 - clc - lda.z e - adc.z xd - sta.z e - lda.z e+1 - adc.z xd+1 - sta.z e+1 - // [714] if(bitmap_line_ydxd::yd#5>=bitmap_line_ydxd::e#1) goto bitmap_line_ydxd::@2 -- vwuz1_ge_vwuz2_then_la1 - lda.z e+1 - cmp.z yd+1 - bne !+ - lda.z e - cmp.z yd - beq __b2_from___b4 - !: - bcc __b2_from___b4 - jmp __b3 - // bitmap_line_ydxd::@3 - __b3: - // [715] bitmap_line_ydxd::x#2 = -- bitmap_line_ydxd::x#3 -- vwuz1=_dec_vwuz1 - lda.z x - bne !+ - dec.z x+1 - !: - dec.z x - // [716] bitmap_line_ydxd::e#2 = bitmap_line_ydxd::e#1 - bitmap_line_ydxd::yd#5 -- vwuz1=vwuz1_minus_vwuz2 - lda.z e - sec - sbc.z yd - sta.z e - lda.z e+1 - sbc.z yd+1 - sta.z e+1 - // [717] phi from bitmap_line_ydxd::@3 bitmap_line_ydxd::@4 to bitmap_line_ydxd::@2 [phi:bitmap_line_ydxd::@3/bitmap_line_ydxd::@4->bitmap_line_ydxd::@2] - __b2_from___b3: - __b2_from___b4: - // [717] phi bitmap_line_ydxd::e#6 = bitmap_line_ydxd::e#2 [phi:bitmap_line_ydxd::@3/bitmap_line_ydxd::@4->bitmap_line_ydxd::@2#0] -- register_copy - // [717] phi bitmap_line_ydxd::x#6 = bitmap_line_ydxd::x#2 [phi:bitmap_line_ydxd::@3/bitmap_line_ydxd::@4->bitmap_line_ydxd::@2#1] -- register_copy - jmp __b2 - // bitmap_line_ydxd::@2 - __b2: - // [718] bitmap_line_ydxd::$6 = bitmap_line_ydxd::y1#6 + 1 -- vwuz1=vwuz2_plus_1 - clc - lda.z y1 - adc #1 - sta.z __6 - lda.z y1+1 - adc #0 - sta.z __6+1 - // [719] if(bitmap_line_ydxd::y#3!=bitmap_line_ydxd::$6) goto bitmap_line_ydxd::@1 -- vwuz1_neq_vwuz2_then_la1 - lda.z y+1 - cmp.z __6+1 - bne __b1_from___b2 - lda.z y - cmp.z __6 - bne __b1_from___b2 - jmp __breturn - // bitmap_line_ydxd::@return - __breturn: - // [720] return - rts -} - // bitmap_line_xdyd -// void bitmap_line_xdyd(__zp($1e) unsigned int x, __zp(8) unsigned int y, __zp(6) unsigned int x1, __zp($22) unsigned int xd, __zp($29) unsigned int yd, __zp($20) char c) -bitmap_line_xdyd: { - .label __6 = $e - .label x = $1e - .label y = 8 - .label x1 = 6 - .label xd = $22 - .label yd = $29 - .label c = $20 - .label e = $18 - // [722] bitmap_line_xdyd::e#0 = bitmap_line_xdyd::yd#2 >> 1 -- vwuz1=vwuz2_ror_1 - lda.z yd+1 - lsr - sta.z e+1 - lda.z yd - ror - sta.z e - // [723] phi from bitmap_line_xdyd bitmap_line_xdyd::@2 to bitmap_line_xdyd::@1 [phi:bitmap_line_xdyd/bitmap_line_xdyd::@2->bitmap_line_xdyd::@1] - __b1_from_bitmap_line_xdyd: - __b1_from___b2: - // [723] phi bitmap_line_xdyd::e#3 = bitmap_line_xdyd::e#0 [phi:bitmap_line_xdyd/bitmap_line_xdyd::@2->bitmap_line_xdyd::@1#0] -- register_copy - // [723] phi bitmap_line_xdyd::y#3 = bitmap_line_xdyd::y#5 [phi:bitmap_line_xdyd/bitmap_line_xdyd::@2->bitmap_line_xdyd::@1#1] -- register_copy - // [723] phi bitmap_line_xdyd::x#3 = bitmap_line_xdyd::x#6 [phi:bitmap_line_xdyd/bitmap_line_xdyd::@2->bitmap_line_xdyd::@1#2] -- register_copy - jmp __b1 - // bitmap_line_xdyd::@1 - __b1: - // [724] bitmap_plot::x#1 = bitmap_line_xdyd::x#3 - // [725] bitmap_plot::y#1 = bitmap_line_xdyd::y#3 -- vwuz1=vwuz2 - lda.z y - sta.z bitmap_plot.y - lda.z y+1 - sta.z bitmap_plot.y+1 - // [726] bitmap_plot::c#2 = bitmap_line_xdyd::c#3 -- vbuxx=vbuz1 - ldx.z c - // [727] call bitmap_plot - // [771] phi from bitmap_line_xdyd::@1 to bitmap_plot [phi:bitmap_line_xdyd::@1->bitmap_plot] - bitmap_plot_from___b1: - // [771] phi bitmap_plot::c#5 = bitmap_plot::c#2 [phi:bitmap_line_xdyd::@1->bitmap_plot#0] -- register_copy - // [771] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line_xdyd::@1->bitmap_plot#1] -- register_copy - // [771] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line_xdyd::@1->bitmap_plot#2] -- register_copy - jsr bitmap_plot - jmp __b4 - // bitmap_line_xdyd::@4 - __b4: - // [728] bitmap_line_xdyd::x#2 = ++ bitmap_line_xdyd::x#3 -- vwuz1=_inc_vwuz1 - inc.z x - bne !+ - inc.z x+1 - !: - // [729] bitmap_line_xdyd::e#1 = bitmap_line_xdyd::e#3 + bitmap_line_xdyd::yd#2 -- vwuz1=vwuz1_plus_vwuz2 - clc - lda.z e - adc.z yd - sta.z e - lda.z e+1 - adc.z yd+1 - sta.z e+1 - // [730] if(bitmap_line_xdyd::xd#5>=bitmap_line_xdyd::e#1) goto bitmap_line_xdyd::@2 -- vwuz1_ge_vwuz2_then_la1 - lda.z e+1 - cmp.z xd+1 - bne !+ - lda.z e - cmp.z xd - beq __b2_from___b4 - !: - bcc __b2_from___b4 - jmp __b3 - // bitmap_line_xdyd::@3 - __b3: - // [731] bitmap_line_xdyd::y#2 = -- bitmap_line_xdyd::y#3 -- vwuz1=_dec_vwuz1 - lda.z y - bne !+ - dec.z y+1 - !: - dec.z y - // [732] bitmap_line_xdyd::e#2 = bitmap_line_xdyd::e#1 - bitmap_line_xdyd::xd#5 -- vwuz1=vwuz1_minus_vwuz2 - lda.z e - sec - sbc.z xd - sta.z e - lda.z e+1 - sbc.z xd+1 - sta.z e+1 - // [733] phi from bitmap_line_xdyd::@3 bitmap_line_xdyd::@4 to bitmap_line_xdyd::@2 [phi:bitmap_line_xdyd::@3/bitmap_line_xdyd::@4->bitmap_line_xdyd::@2] - __b2_from___b3: - __b2_from___b4: - // [733] phi bitmap_line_xdyd::e#6 = bitmap_line_xdyd::e#2 [phi:bitmap_line_xdyd::@3/bitmap_line_xdyd::@4->bitmap_line_xdyd::@2#0] -- register_copy - // [733] phi bitmap_line_xdyd::y#6 = bitmap_line_xdyd::y#2 [phi:bitmap_line_xdyd::@3/bitmap_line_xdyd::@4->bitmap_line_xdyd::@2#1] -- register_copy - jmp __b2 - // bitmap_line_xdyd::@2 - __b2: - // [734] bitmap_line_xdyd::$6 = bitmap_line_xdyd::x1#6 + 1 -- vwuz1=vwuz2_plus_1 - clc - lda.z x1 - adc #1 - sta.z __6 - lda.z x1+1 - adc #0 - sta.z __6+1 - // [735] if(bitmap_line_xdyd::x#2!=bitmap_line_xdyd::$6) goto bitmap_line_xdyd::@1 -- vwuz1_neq_vwuz2_then_la1 - lda.z x+1 - cmp.z __6+1 - bne __b1_from___b2 - lda.z x - cmp.z __6 - bne __b1_from___b2 - jmp __breturn - // bitmap_line_xdyd::@return - __breturn: - // [736] return - rts -} - // divr16u -// Performs division on two 16 bit unsigned ints and an initial remainder -// Returns the quotient dividend/divisor. -// The final remainder will be set into the global variable rem16u -// Implemented using simple binary division -// __zp($27) unsigned int divr16u(__zp(2) unsigned int dividend, __zp($1e) unsigned int divisor, __zp($22) unsigned int rem) -divr16u: { - .label rem = $22 - .label dividend = 2 - .label quotient = $27 - .label return = $27 - .label divisor = $1e - // [738] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] - __b1_from_divr16u: - // [738] phi divr16u::i#2 = 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 - ldx #0 - // [738] phi divr16u::quotient#3 = 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 - lda #<0 - sta.z quotient - lda #>0 - sta.z quotient+1 - // [738] phi divr16u::dividend#2 = divr16u::dividend#1 [phi:divr16u->divr16u::@1#2] -- register_copy - // [738] phi divr16u::rem#4 = 0 [phi:divr16u->divr16u::@1#3] -- vwuz1=vbuc1 - lda #<0 - sta.z rem - lda #>0 - sta.z rem+1 - jmp __b1 - // [738] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] - __b1_from___b3: - // [738] phi divr16u::i#2 = divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - // [738] phi divr16u::quotient#3 = divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - // [738] phi divr16u::dividend#2 = divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - // [738] phi divr16u::rem#4 = divr16u::rem#10 [phi:divr16u::@3->divr16u::@1#3] -- register_copy - jmp __b1 - // divr16u::@1 - __b1: - // [739] divr16u::rem#0 = divr16u::rem#4 << 1 -- vwuz1=vwuz1_rol_1 - asl.z rem - rol.z rem+1 - // [740] divr16u::$1 = byte1 divr16u::dividend#2 -- vbuaa=_byte1_vwuz1 - lda.z dividend+1 - // [741] divr16u::$2 = divr16u::$1 & $80 -- vbuaa=vbuaa_band_vbuc1 - and #$80 - // [742] if(divr16u::$2==0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 - cmp #0 - beq __b2_from___b1 - jmp __b4 - // divr16u::@4 - __b4: - // [743] divr16u::rem#1 = divr16u::rem#0 | 1 -- vwuz1=vwuz1_bor_vbuc1 - lda #1 - ora.z rem - sta.z rem - // [744] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] - __b2_from___b1: - __b2_from___b4: - // [744] phi divr16u::rem#5 = divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy - jmp __b2 - // divr16u::@2 - __b2: - // [745] divr16u::dividend#0 = divr16u::dividend#2 << 1 -- vwuz1=vwuz1_rol_1 - asl.z dividend - rol.z dividend+1 - // [746] divr16u::quotient#1 = divr16u::quotient#3 << 1 -- vwuz1=vwuz1_rol_1 - asl.z quotient - rol.z quotient+1 - // [747] if(divr16u::rem#5divr16u::@3] - __b3_from___b2: - __b3_from___b5: - // [750] phi divr16u::return#0 = divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - // [750] phi divr16u::rem#10 = divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy - jmp __b3 - // divr16u::@3 - __b3: - // [751] divr16u::i#1 = ++ divr16u::i#2 -- vbuxx=_inc_vbuxx - inx - // [752] if(divr16u::i#1!=$10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 - cpx #$10 - bne __b1_from___b3 - jmp __b6 - // divr16u::@6 - __b6: - // [753] rem16u#0 = divr16u::rem#10 -- vwuz1=vwuz2 - lda.z rem - sta.z rem16u - lda.z rem+1 - sta.z rem16u+1 - jmp __breturn - // divr16u::@return - __breturn: - // [754] return - rts -} - // insertup -// Insert a new line, and scroll the upper part of the screen up. -insertup: { - .label cy = $21 - .label width = $20 - .label line = $a - .label start = $a - // [755] insertup::cy#0 = conio_cursor_y[conio_screen_layer] -- vbuz1=pbuc1_derefidx_vbuz2 - ldy.z conio_screen_layer - lda conio_cursor_y,y - sta.z cy - // [756] insertup::width#0 = conio_screen_width << 1 -- vbuz1=vbuz2_rol_1 - lda.z conio_screen_width - asl - sta.z width - // [757] phi from insertup to insertup::@1 [phi:insertup->insertup::@1] - __b1_from_insertup: - // [757] phi insertup::i#2 = 1 [phi:insertup->insertup::@1#0] -- vbuxx=vbuc1 - ldx #1 - jmp __b1 - // insertup::@1 - __b1: - // [758] if(insertup::i#2<=insertup::cy#0) goto insertup::@2 -- vbuxx_le_vbuz1_then_la1 - lda.z cy - stx.z $ff - cmp.z $ff - bcs __b2 - // [759] phi from insertup::@1 to insertup::@3 [phi:insertup::@1->insertup::@3] - __b3_from___b1: - jmp __b3 - // insertup::@3 - __b3: - // [760] call clearline - jsr clearline - jmp __breturn - // insertup::@return - __breturn: - // [761] return - rts - // insertup::@2 - __b2: - // [762] insertup::$3 = insertup::i#2 - 1 -- vbuaa=vbuxx_minus_1 - txa - sec - sbc #1 - // [763] insertup::line#0 = insertup::$3 << conio_rowshift -- vwuz1=vbuaa_rol_vbuz2 - ldy.z conio_rowshift - sta.z line - lda #0 - sta.z line+1 - cpy #0 - beq !e+ - !: - asl.z line - rol.z line+1 - dey - bne !- - !e: - // [764] insertup::start#0 = CONIO_SCREEN_TEXT#12 + insertup::line#0 -- pbuz1=pbuz2_plus_vwuz1 - clc - lda.z start - adc.z CONIO_SCREEN_TEXT - sta.z start - lda.z start+1 - adc.z CONIO_SCREEN_TEXT+1 - sta.z start+1 - // [765] memcpy_in_vram::src#0 = insertup::start#0 + conio_rowskip -- pbuz1=pbuz2_plus_vwuz3 - lda.z start - clc - adc.z conio_rowskip - sta.z memcpy_in_vram.src - lda.z start+1 - adc.z conio_rowskip+1 - sta.z memcpy_in_vram.src+1 - // [766] memcpy_in_vram::dest#0 = (void *)insertup::start#0 - // [767] memcpy_in_vram::num#0 = insertup::width#0 -- vwuz1=vbuz2 - lda.z width - sta.z memcpy_in_vram.num - lda #0 - sta.z memcpy_in_vram.num+1 - // [768] memcpy_in_vram::src#3 = (void *)memcpy_in_vram::src#0 - // [769] call memcpy_in_vram - // [273] phi from insertup::@2 to memcpy_in_vram [phi:insertup::@2->memcpy_in_vram] - memcpy_in_vram_from___b2: - // [273] phi memcpy_in_vram::num#3 = memcpy_in_vram::num#0 [phi:insertup::@2->memcpy_in_vram#0] -- register_copy - // [273] phi memcpy_in_vram::dest_bank#2 = 0 [phi:insertup::@2->memcpy_in_vram#1] -- vbuyy=vbuc1 - ldy #0 - // [273] phi memcpy_in_vram::dest#2 = memcpy_in_vram::dest#0 [phi:insertup::@2->memcpy_in_vram#2] -- register_copy - // [273] phi memcpy_in_vram::src#2 = memcpy_in_vram::src#3 [phi:insertup::@2->memcpy_in_vram#3] -- register_copy - jsr memcpy_in_vram - jmp __b4 - // insertup::@4 - __b4: - // [770] insertup::i#1 = ++ insertup::i#2 -- vbuxx=_inc_vbuxx - inx - // [757] phi from insertup::@4 to insertup::@1 [phi:insertup::@4->insertup::@1] - __b1_from___b4: - // [757] phi insertup::i#2 = insertup::i#1 [phi:insertup::@4->insertup::@1#0] -- register_copy - jmp __b1 -} - // bitmap_plot -// void bitmap_plot(__zp($1e) unsigned int x, __zp(4) unsigned int y, __register(X) char c) -bitmap_plot: { - .label __9 = $e - .label __10 = $c - .label plot_x = $1a - .label plot_y = $10 - .label vera_vram_address01_bankaddr = $1a - .label x = $1e - .label y = 4 - .label __12 = $e - .label __13 = $c - .label __14 = $14 - .label __15 = $16 - // [772] bitmap_plot::$9 = bitmap_plot::x#4 << 1 -- vwuz1=vwuz2_rol_1 - lda.z x - asl - sta.z __9 - lda.z x+1 - rol - sta.z __9+1 - // [773] bitmap_plot::$12 = __bitmap_plot_x + bitmap_plot::$9 -- pwuz1=pwuc1_plus_vwuz1 - lda.z __12 - clc - adc #<__bitmap_plot_x - sta.z __12 - lda.z __12+1 - adc #>__bitmap_plot_x - sta.z __12+1 - // [774] bitmap_plot::plot_x#0 = (unsigned long)*bitmap_plot::$12 -- vduz1=_dword__deref_pwuz2 - // Needs unsigned int arrays arranged as two underlying char arrays to allow char* plotter_x = plot_x[x]; - and eventually - char* plotter = plot_x[x] + plot_y[y]; - ldy #0 - sty.z plot_x+2 - sty.z plot_x+3 - lda (__12),y - sta.z plot_x - iny - lda (__12),y - sta.z plot_x+1 - // [775] bitmap_plot::$10 = bitmap_plot::y#4 << 2 -- vwuz1=vwuz2_rol_2 - lda.z y - asl - sta.z __10 - lda.z y+1 - rol - sta.z __10+1 - asl.z __10 - rol.z __10+1 - // [776] bitmap_plot::$13 = __bitmap_plot_y + bitmap_plot::$10 -- pduz1=pduc1_plus_vwuz1 - lda.z __13 - clc - adc #<__bitmap_plot_y - sta.z __13 - lda.z __13+1 - adc #>__bitmap_plot_y - sta.z __13+1 - // [777] bitmap_plot::plot_y#0 = *bitmap_plot::$13 -- vduz1=_deref_pduz2 - ldy #0 - lda (__13),y - sta.z plot_y - iny - lda (__13),y - sta.z plot_y+1 - iny - lda (__13),y - sta.z plot_y+2 - iny - lda (__13),y - sta.z plot_y+3 - // [778] bitmap_plot::vera_vram_address01_bankaddr#0 = bitmap_plot::plot_x#0 + bitmap_plot::plot_y#0 -- vduz1=vduz1_plus_vduz2 - clc - lda.z vera_vram_address01_bankaddr - adc.z plot_y - sta.z vera_vram_address01_bankaddr - lda.z vera_vram_address01_bankaddr+1 - adc.z plot_y+1 - sta.z vera_vram_address01_bankaddr+1 - lda.z vera_vram_address01_bankaddr+2 - adc.z plot_y+2 - sta.z vera_vram_address01_bankaddr+2 - lda.z vera_vram_address01_bankaddr+3 - adc.z plot_y+3 - sta.z vera_vram_address01_bankaddr+3 - // [779] bitmap_plot::$14 = __bitmap_plot_bitshift + bitmap_plot::x#4 -- pbuz1=pbuc1_plus_vwuz2 - lda.z x - clc - adc #<__bitmap_plot_bitshift - sta.z __14 - lda.z x+1 - adc #>__bitmap_plot_bitshift - sta.z __14+1 - // [780] bitmap_plot::bitshift#0 = *bitmap_plot::$14 -- vbuaa=_deref_pbuz1 - ldy #0 - lda (__14),y - // [781] if(0!=bitmap_plot::bitshift#0) goto bitmap_plot::@1 -- 0_neq_vbuaa_then_la1 - cmp #0 - bne __b1 - // [783] phi from bitmap_plot bitmap_plot::@1 to bitmap_plot::@2 [phi:bitmap_plot/bitmap_plot::@1->bitmap_plot::@2] - __b2_from_bitmap_plot: - __b2_from___b1: - // [783] phi bitmap_plot::c#0 = bitmap_plot::c#5 [phi:bitmap_plot/bitmap_plot::@1->bitmap_plot::@2#0] -- register_copy - jmp __b2 - // bitmap_plot::@1 - __b1: - // [782] bitmap_plot::$3 = bitmap_plot::c#5 << bitmap_plot::bitshift#0 -- vbuxx=vbuxx_rol_vbuaa - tay - txa - cpy #0 - beq !e+ - !: - asl - dey - bne !- - !e: - tax - jmp __b2_from___b1 - // bitmap_plot::@2 - __b2: - jmp vera_vram_address01 - // bitmap_plot::vera_vram_address01 - vera_vram_address01: - // [784] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // [785] bitmap_plot::vera_vram_address01_$0 = byte0 bitmap_plot::vera_vram_address01_bankaddr#0 -- vbuaa=_byte0_vduz1 - lda.z vera_vram_address01_bankaddr - // [786] *VERA_ADDRX_L = bitmap_plot::vera_vram_address01_$0 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_L - // [787] bitmap_plot::vera_vram_address01_$1 = byte1 bitmap_plot::vera_vram_address01_bankaddr#0 -- vbuaa=_byte1_vduz1 - lda.z vera_vram_address01_bankaddr+1 - // [788] *VERA_ADDRX_M = bitmap_plot::vera_vram_address01_$1 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // [789] bitmap_plot::vera_vram_address01_$3 = byte2 bitmap_plot::vera_vram_address01_bankaddr#0 -- vbuaa=_byte2_vduz1 - lda.z vera_vram_address01_bankaddr+2 - // [790] *VERA_ADDRX_H = bitmap_plot::vera_vram_address01_$3 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_H - jmp __b3 - // bitmap_plot::@3 - __b3: - // [791] bitmap_plot::$15 = __bitmap_plot_bitmask + bitmap_plot::x#4 -- pbuz1=pbuc1_plus_vwuz2 - lda.z x - clc - adc #<__bitmap_plot_bitmask - sta.z __15 - lda.z x+1 - adc #>__bitmap_plot_bitmask - sta.z __15+1 - // [792] bitmap_plot::$6 = ~ *bitmap_plot::$15 -- vbuaa=_bnot__deref_pbuz1 - ldy #0 - lda (__15),y - eor #$ff - // [793] bitmap_plot::$7 = *VERA_DATA0 & bitmap_plot::$6 -- vbuaa=_deref_pbuc1_band_vbuaa - and VERA_DATA0 - // [794] bitmap_plot::$8 = bitmap_plot::$7 | bitmap_plot::c#0 -- vbuaa=vbuaa_bor_vbuxx - stx.z $ff - ora.z $ff - // [795] *VERA_DATA0 = bitmap_plot::$8 -- _deref_pbuc1=vbuaa - sta VERA_DATA0 - jmp __breturn - // bitmap_plot::@return - __breturn: - // [796] return - rts -} - // clearline -clearline: { - .label addr = $e - .label c = 4 - // [797] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // [798] clearline::$5 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [799] clearline::addr#0 = CONIO_SCREEN_TEXT#12 + conio_line_text[clearline::$5] -- pbuz1=pbuz2_plus_pwuc1_derefidx_vbuaa - // Set address - tay - clc - lda.z CONIO_SCREEN_TEXT - adc conio_line_text,y - sta.z addr - lda.z CONIO_SCREEN_TEXT+1 - adc conio_line_text+1,y - sta.z addr+1 - // [800] clearline::$1 = byte0 clearline::addr#0 -- vbuaa=_byte0_pbuz1 - lda.z addr - // [801] *VERA_ADDRX_L = clearline::$1 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_L - // [802] clearline::$2 = byte1 clearline::addr#0 -- vbuaa=_byte1_pbuz1 - lda.z addr+1 - // [803] *VERA_ADDRX_M = clearline::$2 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // [804] *VERA_ADDRX_H = VERA_INC_1 -- _deref_pbuc1=vbuc2 - lda #VERA_INC_1 - sta VERA_ADDRX_H - // [805] vera_layer_get_color::layer#1 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [806] call vera_layer_get_color - // [254] phi from clearline to vera_layer_get_color [phi:clearline->vera_layer_get_color] - vera_layer_get_color_from_clearline: - // [254] phi vera_layer_get_color::layer#2 = vera_layer_get_color::layer#1 [phi:clearline->vera_layer_get_color#0] -- register_copy - jsr vera_layer_get_color - // [807] vera_layer_get_color::return#4 = vera_layer_get_color::return#3 - jmp __b4 - // clearline::@4 - __b4: - // [808] clearline::color#0 = vera_layer_get_color::return#4 -- vbuxx=vbuaa - tax - // [809] phi from clearline::@4 to clearline::@1 [phi:clearline::@4->clearline::@1] - __b1_from___b4: - // [809] phi clearline::c#2 = 0 [phi:clearline::@4->clearline::@1#0] -- vwuz1=vwuc1 - lda #<0 - sta.z c - lda #>0 - sta.z c+1 - jmp __b1 - // clearline::@1 - __b1: - // [810] if(clearline::c#2clearline::@1] - __b1_from___b2: - // [809] phi clearline::c#2 = clearline::c#1 [phi:clearline::@2->clearline::@1#0] -- register_copy - jmp __b1 -} - // File Data -.segment Data - VERA_LAYER_WIDTH: .word $20, $40, $80, $100 - VERA_LAYER_HEIGHT: .word $20, $40, $80, $100 - /// --- VERA function encapsulation --- - vera_mapbase_offset: .word 0, 0 - vera_mapbase_bank: .byte 0, 0 - vera_mapbase_address: .dword 0, 0 - vera_tilebase_offset: .word 0, 0 - vera_tilebase_bank: .byte 0, 0 - vera_tilebase_address: .dword 0, 0 - vera_layer_rowshift: .byte 0, 0 - vera_layer_rowskip: .word 0, 0 - vera_layer_config: .word VERA_L0_CONFIG, VERA_L1_CONFIG - vera_layer_enable: .byte VERA_LAYER0_ENABLE, VERA_LAYER1_ENABLE - vera_layer_mapbase: .word VERA_L0_MAPBASE, VERA_L1_MAPBASE - vera_layer_tilebase: .word VERA_L0_TILEBASE, VERA_L1_TILEBASE - vera_layer_textcolor: .byte WHITE, WHITE - vera_layer_backcolor: .byte BLUE, BLUE - // The number of bytes on the screen - // The current cursor x-position - conio_cursor_x: .byte 0, 0 - // The current cursor y-position - conio_cursor_y: .byte 0, 0 - // The current text cursor line start - conio_line_text: .word 0, 0 - // Is scrolling enabled when outputting beyond the end of the screen (1: yes, 0: no). - // If disabled the cursor just moves back to (0,0) instead - conio_scroll_enable: .byte 1, 1 - // Tables for the plotter - initialized by calling bitmap_draw_init(); - __bitmap_plot_x: .fill 2*$280, 0 - __bitmap_plot_y: .fill 4*$1e0, 0 - __bitmap_plot_bitmask: .fill $280, 0 - __bitmap_plot_bitshift: .fill $280, 0 - hdeltas: .word 0, $50, $28, $14, 0, $a0, $50, $28, 0, $140, $a0, $50, 0, $280, $140, $a0 - vdeltas: .word 0, $1e0, $f0, $a0 - bitmasks: .byte $80, $c0, $f0, $ff - .fill 1, 0 - bitshifts: .byte 7, 6, 4, 0 - .fill 1, 0 - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __init1 -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b3 -Removing instruction jmp __b4 -Removing instruction jmp __b5 -Removing instruction jmp __b6 -Removing instruction jmp __b7 -Removing instruction jmp __b8 -Removing instruction jmp __b9 -Removing instruction jmp __b2 -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b7 -Removing instruction jmp __b2 -Removing instruction jmp __b3 -Removing instruction jmp __b4 -Removing instruction jmp __breturn -Removing instruction jmp __b6 -Removing instruction jmp __b1 -Removing instruction jmp __b12 -Removing instruction jmp __b13 -Removing instruction jmp __b14 -Removing instruction jmp textcolor1 -Removing instruction jmp bgcolor1 -Removing instruction jmp __b6 -Removing instruction jmp __b15 -Removing instruction jmp __b16 -Removing instruction jmp __b17 -Removing instruction jmp __b18 -Removing instruction jmp __b19 -Removing instruction jmp vera_layer_show1 -Removing instruction jmp __b7 -Removing instruction jmp __b20 -Removing instruction jmp __b21 -Removing instruction jmp textcolor2 -Removing instruction jmp __b8 -Removing instruction jmp __b1 -Removing instruction jmp __b22 -Removing instruction jmp textcolor3 -Removing instruction jmp bgcolor2 -Removing instruction jmp __b9 -Removing instruction jmp __b32 -Removing instruction jmp __b33 -Removing instruction jmp __b34 -Removing instruction jmp textcolor4 -Removing instruction jmp __b10 -Removing instruction jmp __b3 -Removing instruction jmp __b35 -Removing instruction jmp __b5 -Removing instruction jmp textcolor5 -Removing instruction jmp bgcolor3 -Removing instruction jmp __b11 -Removing instruction jmp __breturn -Removing instruction jmp __b36 -Removing instruction jmp __b37 -Removing instruction jmp __b2 -Removing instruction jmp __b23 -Removing instruction jmp __b24 -Removing instruction jmp __b25 -Removing instruction jmp __b26 -Removing instruction jmp __b27 -Removing instruction jmp __b28 -Removing instruction jmp __b29 -Removing instruction jmp __b30 -Removing instruction jmp __b31 -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b3 -Removing instruction jmp __b4 -Removing instruction jmp vera_layer_get_width1 -Removing instruction jmp vera_layer_get_width1___breturn -Removing instruction jmp __b1 -Removing instruction jmp __b5 -Removing instruction jmp __b6 -Removing instruction jmp vera_layer_get_height1 -Removing instruction jmp vera_layer_get_height1___breturn -Removing instruction jmp __b2 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b4 -Removing instruction jmp __b1 -Removing instruction jmp __b3 -Removing instruction jmp __b2 -Removing instruction jmp __breturn -Removing instruction jmp __b2 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __b2 -Removing instruction jmp __b3 -Removing instruction jmp __b4 -Removing instruction jmp __b8 -Removing instruction jmp __b9 -Removing instruction jmp __b10 -Removing instruction jmp __b11 -Removing instruction jmp __b12 -Removing instruction jmp __b15 -Removing instruction jmp __b16 -Removing instruction jmp __b23 -Removing instruction jmp __b24 -Removing instruction jmp __b17 -Removing instruction jmp __b18 -Removing instruction jmp __b19 -Removing instruction jmp __b20 -Removing instruction jmp __b21 -Removing instruction jmp __b22 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp vera_display_set_scale_double1 -Removing instruction jmp __b2 -Removing instruction jmp __b3 -Removing instruction jmp __breturn -Removing instruction jmp __b7 -Removing instruction jmp __b8 -Removing instruction jmp __b1 -Removing instruction jmp __b3 -Removing instruction jmp __breturn -Removing instruction jmp __b4 -Removing instruction jmp __b6 -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp vera_layer_get_color_depth1 -Removing instruction jmp vera_layer_get_color_depth1___breturn -Removing instruction jmp __b16 -Removing instruction jmp __b17 -Removing instruction jmp __b18 -Removing instruction jmp __b1 -Removing instruction jmp __b8 -Removing instruction jmp __b2 -Removing instruction jmp __b9 -Removing instruction jmp __b3 -Removing instruction jmp __b10 -Removing instruction jmp __b4 -Removing instruction jmp __b11 -Removing instruction jmp __b5 -Removing instruction jmp __b12 -Removing instruction jmp __b6 -Removing instruction jmp __b13 -Removing instruction jmp __b7 -Removing instruction jmp __b14 -Removing instruction jmp __b15 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b2 -Removing instruction jmp __b3 -Removing instruction jmp __b4 -Removing instruction jmp __breturn -Removing instruction jmp __b10 -Removing instruction jmp __b5 -Removing instruction jmp __b6 -Removing instruction jmp __b14 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __b2 -Removing instruction jmp __b3 -Removing instruction jmp __breturn -Removing instruction jmp __b4 -Removing instruction jmp __b5 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __b3 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __b3 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b4 -Removing instruction jmp __b3 -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __b4 -Removing instruction jmp __b3 -Removing instruction jmp __b2 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __b4 -Removing instruction jmp __b3 -Removing instruction jmp __b2 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __b4 -Removing instruction jmp __b3 -Removing instruction jmp __b2 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __b4 -Removing instruction jmp __b3 -Removing instruction jmp __b2 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __b4 -Removing instruction jmp __b2 -Removing instruction jmp __b5 -Removing instruction jmp __b3 -Removing instruction jmp __b6 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __b3 -Removing instruction jmp __breturn -Removing instruction jmp __b4 -Removing instruction jmp vera_vram_address01 -Removing instruction jmp __b3 -Removing instruction jmp __breturn -Removing instruction jmp __b4 -Removing instruction jmp __b1 -Removing instruction jmp __b3 -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction lda #0 -Removing instruction lda #>0 -Removing instruction lda #<0 -Removing instruction lda #>0 -Removing instruction lda #0 -Removing instruction lda #<0 -Removing instruction lda #>0 -Removing instruction lda #<0 -Removing instruction lda #>0 -Removing instruction lda #0 -Removing instruction lda #0 -Removing instruction lda #0 -Removing instruction lda.z __16+1 -Removing instruction lda #8 -Removing instruction lda #<0 -Removing instruction lda #>0 -Removing instruction lda #>0 -Removing instruction lda #>0 -Replacing instruction ldx.z conio_screen_layer with TAX -Removing instruction ldy.z conio_screen_layer -Removing instruction lda #>0 -Replacing instruction lda.z layer with TYA -Replacing instruction ldy.z __17 with TAY -Replacing instruction lda.z layer with TYA -Replacing instruction ldy.z __18 with TAY -Replacing instruction lda.z layer with TYA -Replacing instruction lda.z layer with TYA -Replacing instruction lda.z layer with TYA -Removing instruction lda #>0 -Removing instruction lda #0 -Removing instruction lda #$40 -Removing instruction lda #0 -Removing instruction ldy.z conio_screen_layer -Replacing instruction lda.z conio_screen_layer with TYA -Removing instruction lda #0 -Removing instruction lda.z __bitmap_layer -Removing instruction ldy.z __bitmap_color_depth -Removing instruction lda #>0 -Removing instruction ldy #0 -Removing instruction ldy #0 -Removing instruction ldy #0 -Removing instruction lda.z bitshift -Removing instruction ldy #0 -Removing instruction lda #>0 -Removing instruction lda.z yd_1+1 -Removing instruction lda.z yd+1 -Removing instruction lda.z yd+1 -Removing instruction lda.z yd_1+1 -Removing instruction lda.z rand_state+1 -Removing instruction ldy #0 -Removing instruction ldy #0 -Removing instruction ldy #0 -Removing instruction lda #>0 -Removing instruction lda #>0 -Removing instruction lda.z e+1 -Removing instruction lda.z e+1 -Removing instruction lda.z e+1 -Removing instruction lda.z e+1 -Replacing instruction lda #<0 with TXA -Removing instruction lda #>0 -Removing instruction lda #<0 -Removing instruction lda #>0 -Removing instruction lda #>0 -Succesful ASM optimization Pass5UnnecesaryLoadElimination -Replacing label __b1_from___b9 with __b1 -Replacing label __b1_from___b7 with __b1 -Replacing label __b2_from___b22 with __b2 -Replacing label __b37_from___b36 with __b37 -Replacing label __b37_from___b36 with __b37 -Replacing label __b4_from_gotoxy with __b1 -Replacing label __breturn_from___b1 with __breturn -Replacing label __b9_from___b4 with __b9_from___b5 -Replacing label __b9_from___b4 with __b9_from___b5 -Replacing label __b16_from___b9 with __b16 -Replacing label __b16_from___b12 with __b16 -Replacing label __b16_from___b12 with __b16 -Replacing label __b19_from___b24 with __b19 -Replacing label __b19_from___b17 with __b19 -Replacing label __b22_from___b19 with __b22 -Replacing label __b22_from___b20 with __b22 -Replacing label __b16_from___b14 with __b16 -Replacing label __b16_from___b13 with __b16 -Replacing label __b1_from___b2 with __b1 -Replacing label __b2_from___b1 with __b2 -Replacing label __b3_from___b2 with __b3 -Replacing label __b4_from___b3 with __b4 -Replacing label __b6_from___b5 with __b6 -Replacing label __b7_from___b6 with __b7 -Replacing label __b1_from___b7 with __b1 -Replacing label __b1_from___b7 with __b1 -Replacing label __b15_from___b15 with __b15 -Replacing label __b15_from___b15 with __b15 -Replacing label __breturn with __b3 -Replacing label __b4_from___b1 with __b4 -Replacing label __breturn with __b3 -Replacing label __breturn with __b3 -Replacing label __breturn with __b3 -Replacing label __b1_from___b2 with __b1 -Replacing label __b1_from___b2 with __b1 -Replacing label __b3_from___b2 with __b3 -Replacing label __b2_from___b4 with __b2 -Replacing label __b2_from___b4 with __b2 -Replacing label __b1_from___b2 with __b1 -Replacing label __b1_from___b2 with __b1 -Replacing label __b2_from___b4 with __b2 -Replacing label __b2_from___b4 with __b2 -Replacing label __b1_from___b2 with __b1 -Replacing label __b1_from___b2 with __b1 -Replacing label __b2_from___b4 with __b2 -Replacing label __b2_from___b4 with __b2 -Replacing label __b1_from___b2 with __b1 -Replacing label __b1_from___b2 with __b1 -Replacing label __b2_from___b4 with __b2 -Replacing label __b2_from___b4 with __b2 -Replacing label __b1_from___b2 with __b1 -Replacing label __b1_from___b2 with __b1 -Replacing label __b2_from___b1 with __b2 -Replacing label __b3_from___b2 with __b3 -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 __b3_from_conio_x16_init: -Removing instruction __b4_from___b3: -Removing instruction __b5_from___b4: -Removing instruction vera_layer_set_textcolor_from___b5: -Removing instruction __b6_from___b5: -Removing instruction vera_layer_set_backcolor_from___b6: -Removing instruction __b7_from___b6: -Removing instruction vera_layer_set_mapbase_from___b7: -Removing instruction __b8_from___b7: -Removing instruction vera_layer_set_mapbase_from___b8: -Removing instruction __b1_from___b2: -Removing instruction __b1_from___b9: -Removing instruction __b4_from___b3: -Removing instruction __b6_from___b5: -Removing instruction __b1_from___b7: -Removing instruction __b12_from_main: -Removing instruction __b13_from___b12: -Removing instruction vera_layer_mode_bitmap_from___b13: -Removing instruction __b14_from___b13: -Removing instruction __b6_from_bgcolor1: -Removing instruction __b15_from___b6: -Removing instruction gotoxy_from___b15: -Removing instruction __b16_from___b15: -Removing instruction printf_str_from___b16: -Removing instruction __b17_from___b16: -Removing instruction printf_str_from___b17: -Removing instruction __b18_from___b17: -Removing instruction printf_str_from___b18: -Removing instruction __b19_from___b18: -Removing instruction printf_str_from___b19: -Removing instruction __b7_from_vera_layer_show1: -Removing instruction __b20_from___b7: -Removing instruction __b21_from___b20: -Removing instruction gotoxy_from___b21: -Removing instruction __b8_from_textcolor2: -Removing instruction printf_str_from___b8: -Removing instruction __b9_from_bgcolor2: -Removing instruction __b32_from___b9: -Removing instruction gotoxy_from___b32: -Removing instruction __b33_from___b32: -Removing instruction printf_str_from___b33: -Removing instruction __b34_from___b33: -Removing instruction gotoxy_from___b34: -Removing instruction __b10_from_textcolor4: -Removing instruction printf_str_from___b10: -Removing instruction __b5_from___b35: -Removing instruction __b11_from_bgcolor3: -Removing instruction __b37_from___b36: -Removing instruction __b3_from___b37: -Removing instruction __b2_from___b22: -Removing instruction rand_from___b2: -Removing instruction __b1_from_vera_layer_mode_text: -Removing instruction vera_layer_get_width1___breturn: -Removing instruction vera_layer_get_height1___breturn: -Removing instruction __b4_from_gotoxy: -Removing instruction __b4: -Removing instruction __b1_from___b4: -Removing instruction __b3_from___b1: -Removing instruction __b3: -Removing instruction __breturn_from___b1: -Removing instruction __breturn_from___b2: -Removing instruction __b9_from___b4: -Removing instruction __b16_from___b12: -Removing instruction __b16_from___b13: -Removing instruction __b16_from___b14: -Removing instruction __b16_from___b15: -Removing instruction __b16_from___b9: -Removing instruction __b19_from___b17: -Removing instruction __b19_from___b18: -Removing instruction __b19_from___b24: -Removing instruction __b22_from___b19: -Removing instruction __b22_from___b20: -Removing instruction __b22_from___b21: -Removing instruction __b2_from_vera_display_set_scale_double1: -Removing instruction vera_layer_set_config_from___b2: -Removing instruction __b3_from___b2: -Removing instruction vera_layer_set_tilebase_from___b3: -Removing instruction __b1_from_printf_str: -Removing instruction __b1_from___b2: -Removing instruction vera_layer_get_color_depth1___breturn: -Removing instruction __b1_from___b7: -Removing instruction __b2_from___b1: -Removing instruction __b2_from___b8: -Removing instruction __b3_from___b2: -Removing instruction __b3_from___b9: -Removing instruction __b4_from___b10: -Removing instruction __b4_from___b3: -Removing instruction __b6_from___b12: -Removing instruction __b6_from___b5: -Removing instruction __b7_from___b13: -Removing instruction __b7_from___b6: -Removing instruction __b15_from___b15: -Removing instruction __b3_from___b2: -Removing instruction __breturn: -Removing instruction __b4_from___b1: -Removing instruction __b1_from___b2: -Removing instruction __breturn: -Removing instruction __b1_from___b2: -Removing instruction __breturn: -Removing instruction __b3_from___b2: -Removing instruction __b3_from___b4: -Removing instruction __b1_from_bitmap_line_ydxi: -Removing instruction __b1_from___b2: -Removing instruction __b2_from___b3: -Removing instruction __b2_from___b4: -Removing instruction __b1_from_bitmap_line_xdyi: -Removing instruction __b1_from___b2: -Removing instruction __b2_from___b3: -Removing instruction __b2_from___b4: -Removing instruction __b1_from_bitmap_line_ydxd: -Removing instruction __b1_from___b2: -Removing instruction __b2_from___b3: -Removing instruction __b2_from___b4: -Removing instruction __b1_from_bitmap_line_xdyd: -Removing instruction __b1_from___b2: -Removing instruction __b2_from___b3: -Removing instruction __b2_from___b4: -Removing instruction __b1_from___b3: -Removing instruction __b2_from___b1: -Removing instruction __b2_from___b4: -Removing instruction __b3_from___b2: -Removing instruction __b3_from___b5: -Removing instruction __b3_from___b1: -Removing instruction __b2_from_bitmap_plot: -Removing instruction vera_vram_address01: -Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction __init1: -Removing instruction __b1: -Removing instruction __breturn: -Removing instruction vera_layer_mode_text_from_conio_x16_init: -Removing instruction __b3: -Removing instruction __b4: -Removing instruction __b5: -Removing instruction __b6: -Removing instruction __b7: -Removing instruction __b8: -Removing instruction __b9: -Removing instruction __b2: -Removing instruction gotoxy_from___b1: -Removing instruction __breturn: -Removing instruction vera_layer_get_color_from_cputc: -Removing instruction __b7: -Removing instruction __b2: -Removing instruction __b3: -Removing instruction __b4: -Removing instruction __b6: -Removing instruction memcpy_in_vram_from_main: -Removing instruction __b12: -Removing instruction vera_layer_mode_tile_from___b12: -Removing instruction __b13: -Removing instruction __b14: -Removing instruction textcolor1: -Removing instruction vera_layer_set_textcolor_from_textcolor1: -Removing instruction bgcolor1: -Removing instruction vera_layer_set_backcolor_from_bgcolor1: -Removing instruction __b6: -Removing instruction __b15: -Removing instruction __b16: -Removing instruction __b17: -Removing instruction __b18: -Removing instruction __b19: -Removing instruction vera_layer_show1: -Removing instruction __b7: -Removing instruction __b20: -Removing instruction __b21: -Removing instruction textcolor2: -Removing instruction vera_layer_set_textcolor_from_textcolor2: -Removing instruction __b8: -Removing instruction __b1_from___b8: -Removing instruction __b22: -Removing instruction textcolor3: -Removing instruction vera_layer_set_textcolor_from_textcolor3: -Removing instruction bgcolor2: -Removing instruction vera_layer_set_backcolor_from_bgcolor2: -Removing instruction __b9: -Removing instruction __b32: -Removing instruction __b33: -Removing instruction __b34: -Removing instruction textcolor4: -Removing instruction vera_layer_set_textcolor_from_textcolor4: -Removing instruction __b10: -Removing instruction __b3_from___b10: -Removing instruction __b35: -Removing instruction __b5: -Removing instruction textcolor5: -Removing instruction vera_layer_set_textcolor_from_textcolor5: -Removing instruction bgcolor3: -Removing instruction vera_layer_set_backcolor_from_bgcolor3: -Removing instruction __b11: -Removing instruction __breturn: -Removing instruction bitmap_line_from___b4: -Removing instruction __b36: -Removing instruction __b3_from___b36: -Removing instruction __b23: -Removing instruction modr16u_from___b23: -Removing instruction __b24: -Removing instruction rand_from___b24: -Removing instruction __b25: -Removing instruction modr16u_from___b25: -Removing instruction __b26: -Removing instruction rand_from___b26: -Removing instruction __b27: -Removing instruction modr16u_from___b27: -Removing instruction __b28: -Removing instruction rand_from___b28: -Removing instruction __b29: -Removing instruction modr16u_from___b29: -Removing instruction __b30: -Removing instruction rand_from___b30: -Removing instruction __b31: -Removing instruction bitmap_line_from___b31: -Removing instruction __b1_from___b31: -Removing instruction vera_layer_mode_tile_from_vera_layer_mode_text: -Removing instruction __b1: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __b3: -Removing instruction __b4: -Removing instruction vera_layer_get_width1: -Removing instruction __b1: -Removing instruction __b5: -Removing instruction __b6: -Removing instruction vera_layer_get_height1: -Removing instruction __b2: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __b1_from_gotoxy: -Removing instruction __breturn: -Removing instruction __b2: -Removing instruction __breturn: -Removing instruction __b1_from_memcpy_in_vram: -Removing instruction __breturn: -Removing instruction __b1_from___b2: -Removing instruction __b1: -Removing instruction __b2: -Removing instruction __b3: -Removing instruction __b4: -Removing instruction __b8: -Removing instruction __b9_from___b8: -Removing instruction __b10: -Removing instruction __b11: -Removing instruction __b12: -Removing instruction __b15: -Removing instruction vera_layer_set_config_from___b16: -Removing instruction __b23: -Removing instruction vera_layer_set_mapbase_from___b23: -Removing instruction __b24: -Removing instruction __b17: -Removing instruction __b18: -Removing instruction __b20: -Removing instruction __b21: -Removing instruction vera_layer_set_tilebase_from___b22: -Removing instruction __breturn: -Removing instruction __b9_from___b7: -Removing instruction __b9_from___b6: -Removing instruction __b1: -Removing instruction vera_display_set_scale_double1: -Removing instruction __b2: -Removing instruction __b3: -Removing instruction __breturn: -Removing instruction __b7: -Removing instruction __b8: -Removing instruction __b1_from___b8: -Removing instruction __b3: -Removing instruction __breturn: -Removing instruction __b4_from___b2: -Removing instruction __b6: -Removing instruction __b1_from___b6: -Removing instruction __b4_from___b5: -Removing instruction __breturn: -Removing instruction vera_layer_get_color_depth1: -Removing instruction __b16: -Removing instruction vera_display_get_hscale_from___b16: -Removing instruction __b17: -Removing instruction vera_display_get_vscale_from___b17: -Removing instruction __b18: -Removing instruction __b1_from___b18: -Removing instruction __b8: -Removing instruction __b9: -Removing instruction __b10: -Removing instruction __b11: -Removing instruction __b12: -Removing instruction __b13: -Removing instruction __b14: -Removing instruction __b15_from___b14: -Removing instruction __breturn: -Removing instruction __b1: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __b2: -Removing instruction __b3: -Removing instruction __b4: -Removing instruction bitmap_line_ydxi_from___b4: -Removing instruction bitmap_line_xdyi_from___b8: -Removing instruction __b10: -Removing instruction bitmap_line_ydxd_from___b10: -Removing instruction bitmap_line_xdyd_from___b9: -Removing instruction __b5: -Removing instruction __b6: -Removing instruction bitmap_line_ydxd_from___b6: -Removing instruction bitmap_line_xdyd_from___b12: -Removing instruction __b14: -Removing instruction bitmap_line_ydxi_from___b14: -Removing instruction bitmap_line_xdyi_from___b13: -Removing instruction __breturn: -Removing instruction divr16u_from_modr16u: -Removing instruction __b1: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __b1: -Removing instruction __b2: -Removing instruction __b5: -Removing instruction gotoxy_from___b5: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __b1_from_vera_display_get_hscale: -Removing instruction __b3_from___b1: -Removing instruction __b3_from___b2: -Removing instruction __b1_from_vera_display_get_vscale: -Removing instruction __b3_from___b1: -Removing instruction __b3_from___b2: -Removing instruction __b1_from_mul16u: -Removing instruction __breturn: -Removing instruction __b4: -Removing instruction __b1_from___b3: -Removing instruction __b1_from_memset_vram: -Removing instruction __breturn: -Removing instruction __b1_from___b2: -Removing instruction bitmap_plot_from___b1: -Removing instruction __b4: -Removing instruction __b3: -Removing instruction __breturn: -Removing instruction bitmap_plot_from___b1: -Removing instruction __b4: -Removing instruction __b3: -Removing instruction __breturn: -Removing instruction bitmap_plot_from___b1: -Removing instruction __b4: -Removing instruction __b3: -Removing instruction __breturn: -Removing instruction bitmap_plot_from___b1: -Removing instruction __b4: -Removing instruction __b3: -Removing instruction __breturn: -Removing instruction __b1_from_divr16u: -Removing instruction __b4: -Removing instruction __b5: -Removing instruction __b6: -Removing instruction __breturn: -Removing instruction __b1_from_insertup: -Removing instruction __b3: -Removing instruction __breturn: -Removing instruction memcpy_in_vram_from___b2: -Removing instruction __b4: -Removing instruction __b1_from___b4: -Removing instruction __b3: -Removing instruction __breturn: -Removing instruction vera_layer_get_color_from_clearline: -Removing instruction __b4: -Removing instruction __b1_from___b4: -Removing instruction __b3: -Removing instruction __breturn: -Removing instruction __b1_from___b2: -Succesful ASM optimization Pass5UnusedLabelElimination -Replacing jump to rts with rts in jmp __breturn -Replacing jump to rts with rts in jmp __breturn -Skipping double jump to __b3 in bcc __b37 -Skipping double jump to __b3 in beq __b37 -Replacing jump to rts with rts in jmp __breturn -Replacing jump to rts with rts in jmp __breturn -Replacing jump to rts with rts in jmp __breturn -Replacing jump to rts with rts in jmp __breturn -Replacing jump to rts with rts in jmp __breturn -Replacing jump to rts with rts in jmp __breturn -Replacing jump to rts with rts in jmp __breturn -Replacing jump to rts with rts in jmp __breturn -Replacing jump to rts with rts in jmp __b3 -Replacing jump to rts with rts in jmp __b3 -Replacing jump to rts with rts in jmp __b3 -Skipping double jump to __b2 in jmp __b2_from___b1 -Succesful ASM optimization Pass5DoubleJumpElimination -Relabelling long label __b9_from___b5 to __b1 -Relabelling long label __b2_from___b1 to __b3 -Succesful ASM optimization Pass5RelabelLongLabels -Removing instruction jmp __b1 -Removing instruction bne __b2 -Removing instruction jmp __b1 -Removing instruction jmp __b15 -Removing instruction bcc __b3 -Removing instruction jmp __b1 -Removing instruction jmp __b1 -Removing instruction jmp __b1 -Removing instruction jmp __b2 -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction ldy.z conio_screen_layer -Removing instruction ldy.z conio_screen_layer -Removing instruction ldy.z conio_screen_layer -Removing instruction lda #<0 -Replacing instruction ldy #0 with TAY -Succesful ASM optimization Pass5UnnecesaryLoadElimination -Removing instruction __b37: -Removing instruction __b2: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __b3: -Removing instruction __b3: -Removing instruction __b3: -Succesful ASM optimization Pass5UnusedLabelElimination -Removing unreachable instruction jmp __b3 -Succesful ASM optimization Pass5UnreachableCodeElimination -Fixing long branch [1601] bne __b1 to beq -Fixing long branch [1606] bne __b1 to beq -Fixing long branch [390] beq __b2 to bne -Fixing long branch [965] beq __b5 to bne -Fixing long branch [973] beq __b6 to bne -Fixing long branch [981] beq __b7 to bne -Fixing long branch [1016] beq __b13 to bne -Fixing long branch [1024] beq __b14 to bne -Fixing long branch [1797] bcc __b1 to bcs -Fixing long branch [1803] bcc __b1 to bcs - -FINAL SYMBOL TABLE -__constant const char BLACK = 0 -__constant const char BLUE = 6 -char CONIO_SCREEN_BANK -char CONIO_SCREEN_BANK#12 // CONIO_SCREEN_BANK zp[1]:136 625.0625 -char CONIO_SCREEN_BANK#15 // CONIO_SCREEN_BANK_1 zp[1]:171 7.76056338028169 -char *CONIO_SCREEN_TEXT -char *CONIO_SCREEN_TEXT#12 // CONIO_SCREEN_TEXT zp[2]:43 2.000018187272727E7 -unsigned int CONIO_SCREEN_TEXT#17 // CONIO_SCREEN_TEXT_1 zp[2]:178 0.7318840579710145 -__constant char RADIX::BINARY = 2 -__constant char RADIX::DECIMAL = $a -__constant char RADIX::HEXADECIMAL = $10 -__constant char RADIX::OCTAL = 8 -__constant char SIZEOF_POINTER = 2 -__constant unsigned int STACK_BASE = $103 -__constant const char VERA_ADDRSEL = 1 -__constant char * const VERA_ADDRX_H = (char *) 40738 -__constant char * const VERA_ADDRX_L = (char *) 40736 -__constant char * const VERA_ADDRX_M = (char *) 40737 -__constant char * const VERA_CTRL = (char *) 40741 -__constant char * const VERA_DATA0 = (char *) 40739 -__constant char * const VERA_DATA1 = (char *) 40740 -__constant char * const VERA_DC_HSCALE = (char *) 40746 -__constant char * const VERA_DC_VIDEO = (char *) 40745 -__constant char * const VERA_DC_VSCALE = (char *) 40747 -__constant const char VERA_INC_1 = $10 -__constant char * const VERA_L0_CONFIG = (char *) 40749 -__constant char * const VERA_L0_MAPBASE = (char *) 40750 -__constant char * const VERA_L0_TILEBASE = (char *) 40751 -__constant char * const VERA_L1_CONFIG = (char *) 40756 -__constant char * const VERA_L1_MAPBASE = (char *) 40757 -__constant char * const VERA_L1_TILEBASE = (char *) 40758 -__constant const char VERA_LAYER0_ENABLE = $10 -__constant const char VERA_LAYER1_ENABLE = $20 -__constant const char VERA_LAYER_COLOR_DEPTH_1BPP = 0 -__constant const char VERA_LAYER_COLOR_DEPTH_8BPP = 3 -__constant const char VERA_LAYER_COLOR_DEPTH_MASK = 3 -__constant const char VERA_LAYER_CONFIG_256C = 8 -__constant const char VERA_LAYER_CONFIG_MODE_BITMAP = 4 -__constant const unsigned int VERA_LAYER_HEIGHT[4] = { $20, $40, $80, $100 } -__constant const char VERA_LAYER_HEIGHT_128 = $80 -__constant const char VERA_LAYER_HEIGHT_256 = $c0 -__constant const char VERA_LAYER_HEIGHT_64 = $40 -__constant const char VERA_LAYER_HEIGHT_MASK = $c0 -__constant const char VERA_LAYER_TILEBASE_MASK = $fc -__constant const unsigned int VERA_LAYER_WIDTH[4] = { $20, $40, $80, $100 } -__constant const char VERA_LAYER_WIDTH_128 = $20 -__constant const char VERA_LAYER_WIDTH_256 = $30 -__constant const char VERA_LAYER_WIDTH_64 = $10 -__constant const char VERA_LAYER_WIDTH_MASK = $30 -__constant const char VERA_TILEBASE_HEIGHT_16 = 2 -__constant const char VERA_TILEBASE_WIDTH_16 = 1 -__constant const char WHITE = 1 -__constant const char YELLOW = 7 -__loadstore unsigned long __bitmap_address // zp[4]:172 4.06 -__loadstore char __bitmap_color_depth // zp[1]:167 80.4074074074074 -__loadstore char __bitmap_hscale // zp[1]:176 3.9102564102564106 -__loadstore char __bitmap_layer // zp[1]:150 204.0 -__constant const char __bitmap_plot_bitmask[$280] = { fill( $280, 0) } -__constant const char __bitmap_plot_bitshift[$280] = { fill( $280, 0) } -__constant const unsigned int __bitmap_plot_x[$280] = { fill( $280, 0) } -__constant const unsigned long __bitmap_plot_y[$1e0] = { fill( $1e0, 0) } -__loadstore char __bitmap_vscale // zp[1]:177 2.8732394366197185 -void __start() -void bitmap_clear() -char bitmap_clear::$0 // reg byte a 202.0 -char bitmap_clear::$1 // reg byte a 202.0 -char bitmap_clear::$6 // reg byte a 202.0 -char bitmap_clear::$7 // reg byte a 202.0 -unsigned long bitmap_clear::count -unsigned long bitmap_clear::count#0 // count zp[4]:114 40.4 -unsigned int bitmap_clear::hdelta -unsigned int bitmap_clear::hdelta#0 // hdelta zp[2]:157 202.0 -char bitmap_clear::vbank -char bitmap_clear::vbank#0 // reg byte x 101.0 -unsigned int bitmap_clear::vdelta -unsigned int bitmap_clear::vdelta#0 // vdelta zp[2]:161 33.666666666666664 -void *bitmap_clear::vdest -unsigned int bitmap_clear::vdest#0 // vdest zp[2]:145 50.5 -void bitmap_init(char layer , unsigned long address) -char bitmap_init::$0 // reg byte a 202.0 -char bitmap_init::$1 // reg byte x 202.0 -unsigned int bitmap_init::$10 // zp[2]:131 667.3333333333334 -unsigned int bitmap_init::$13 // zp[2]:133 667.3333333333334 -char bitmap_init::$2 // reg byte x 202.0 -unsigned int bitmap_init::$23 // zp[2]:55 2002.0 -unsigned int bitmap_init::$24 // zp[2]:57 2002.0 -unsigned int bitmap_init::$25 // zp[2]:59 2002.0 -unsigned int bitmap_init::$26 // zp[2]:61 2002.0 -char bitmap_init::$27 // reg byte a 202.0 -unsigned int bitmap_init::$28 // zp[2]:63 2002.0 -const unsigned int *bitmap_init::$29 // zp[2]:55 2002.0 -char bitmap_init::$3 // reg byte a 202.0 -const char *bitmap_init::$30 // zp[2]:81 2002.0 -const char *bitmap_init::$31 // zp[2]:83 2002.0 -const unsigned int *bitmap_init::$32 // zp[2]:57 2002.0 -const char *bitmap_init::$33 // zp[2]:85 2002.0 -const char *bitmap_init::$34 // zp[2]:87 2002.0 -const unsigned int *bitmap_init::$35 // zp[2]:59 2002.0 -const char *bitmap_init::$36 // zp[2]:89 2002.0 -const char *bitmap_init::$37 // zp[2]:91 2002.0 -const unsigned int *bitmap_init::$38 // zp[2]:61 2002.0 -const char *bitmap_init::$39 // zp[2]:93 2002.0 -char bitmap_init::$4 // reg byte a 202.0 -const char *bitmap_init::$40 // zp[2]:95 2002.0 -const unsigned long *bitmap_init::$41 // zp[2]:63 2002.0 -unsigned int bitmap_init::$7 // zp[2]:129 667.3333333333334 -unsigned long bitmap_init::address -__constant unsigned long bitmap_init::address#0 = 0 // address -char bitmap_init::bitmask -char bitmap_init::bitmask#0 // bitmask zp[1]:33 101.0 -char bitmap_init::bitmask#1 // bitmask zp[1]:33 2002.0 -char bitmap_init::bitmask#10 // bitmask zp[1]:33 373.1818181818182 -char bitmap_init::bitmask#11 // bitmask zp[1]:33 455.0 -char bitmap_init::bitmask#12 // bitmask zp[1]:33 455.0 -char bitmap_init::bitmask#13 // bitmask zp[1]:33 385.0 -char bitmap_init::bitmask#16 // bitmask zp[1]:33 1001.0 -char bitmap_init::bitmask#2 // bitmask zp[1]:33 2002.0 -char bitmap_init::bitmask#3 // bitmask zp[1]:33 2002.0 -char bitmap_init::bitmask#4 // bitmask zp[1]:33 2002.0 -signed char bitmap_init::bitshift -signed char bitmap_init::bitshift#0 // bitshift zp[1]:32 202.0 -signed char bitmap_init::bitshift#1 // bitshift zp[1]:32 1001.0 -signed char bitmap_init::bitshift#10 // bitshift zp[1]:32 310.4 -signed char bitmap_init::bitshift#11 // bitshift zp[1]:32 400.4 -signed char bitmap_init::bitshift#12 // bitshift zp[1]:32 400.4 -signed char bitmap_init::bitshift#13 // bitshift zp[1]:32 400.4 -signed char bitmap_init::bitshift#14 // bitshift zp[1]:32 500.5 -signed char bitmap_init::bitshift#2 // bitshift zp[1]:32 1001.0 -signed char bitmap_init::bitshift#3 // bitshift zp[1]:32 1001.0 -signed char bitmap_init::bitshift#4 // bitshift zp[1]:32 2002.0 -unsigned int bitmap_init::hdelta -unsigned int bitmap_init::hdelta#0 // hdelta zp[2]:163 122.44444444444446 -char bitmap_init::layer -__constant char bitmap_init::layer#0 = 0 // layer -char bitmap_init::vera_layer_get_color_depth1_$0 // reg byte a 202.0 -char bitmap_init::vera_layer_get_color_depth1_$1 // reg byte a 202.0 -char *bitmap_init::vera_layer_get_color_depth1_config -char *bitmap_init::vera_layer_get_color_depth1_config#0 // vera_layer_get_color_depth1_config zp[2]:155 202.0 -char bitmap_init::vera_layer_get_color_depth1_layer -char bitmap_init::vera_layer_get_color_depth1_layer#0 // reg byte a 202.0 -char bitmap_init::vera_layer_get_color_depth1_return -char bitmap_init::vera_layer_get_color_depth1_return#0 // reg byte a 202.0 -char bitmap_init::vera_layer_get_color_depth1_return#1 // reg byte a 202.0 -unsigned int bitmap_init::x -unsigned int bitmap_init::x#1 // x zp[2]:103 1501.5 -unsigned int bitmap_init::x#10 // x zp[2]:103 353.29411764705884 -unsigned int bitmap_init::y -unsigned int bitmap_init::y#1 // y zp[2]:71 1501.5 -unsigned int bitmap_init::y#2 // y zp[2]:71 600.5999999999999 -unsigned long bitmap_init::yoffs -unsigned long bitmap_init::yoffs#0 // yoffs zp[4]:106 202.0 -unsigned long bitmap_init::yoffs#1 // yoffs zp[4]:106 667.3333333333334 -unsigned long bitmap_init::yoffs#2 // yoffs zp[4]:106 776.0 -void bitmap_line(unsigned int x0 , unsigned int x1 , unsigned int y0 , unsigned int y1 , char c) -char bitmap_line::c -char bitmap_line::c#0 // reg byte x 202.0 -char bitmap_line::c#1 // reg byte x 2002.0 -char bitmap_line::c#10 // reg byte x 1502.037037037037 -unsigned int bitmap_line::x0 -unsigned int bitmap_line::x0#0 // x0 zp[2]:6 8.782608695652174 -unsigned int bitmap_line::x0#1 // x0 zp[2]:6 667.3333333333334 -unsigned int bitmap_line::x0#10 // x0 zp[2]:6 4555.550000000001 -unsigned int bitmap_line::x1 -unsigned int bitmap_line::x1#0 // x1 zp[2]:10 11.882352941176471 -unsigned int bitmap_line::x1#1 // x1 zp[2]:10 1001.0 -unsigned int bitmap_line::x1#10 // x1 zp[2]:10 4555.550000000001 -unsigned int bitmap_line::xd -unsigned int bitmap_line::xd#1 // xd zp[2]:34 3500.3500000000004 -unsigned int bitmap_line::xd#2 // xd zp[2]:34 3500.3500000000004 -unsigned int bitmap_line::y0 -unsigned int bitmap_line::y0#0 // y0 zp[2]:8 18.363636363636363 -unsigned int bitmap_line::y0#10 // y0 zp[2]:8 6005.6500000000015 -unsigned int bitmap_line::y1 -unsigned int bitmap_line::y1#0 // y1 zp[2]:2 40.4 -unsigned int bitmap_line::y1#10 // y1 zp[2]:2 6005.6500000000015 -unsigned int bitmap_line::yd -unsigned int bitmap_line::yd#1 // yd zp[2]:41 4444.888888888889 -unsigned int bitmap_line::yd#10 // yd zp[2]:41 4444.888888888889 -unsigned int bitmap_line::yd#11 // yd_1 zp[2]:39 4444.888888888889 -unsigned int bitmap_line::yd#2 // yd_1 zp[2]:39 4444.888888888889 -void bitmap_line_xdyd(unsigned int x , unsigned int y , unsigned int x1 , unsigned int xd , unsigned int yd , char c) -unsigned int bitmap_line_xdyd::$6 // zp[2]:14 2.00000002E8 -char bitmap_line_xdyd::c -char bitmap_line_xdyd::c#0 // c zp[1]:32 20002.0 -char bitmap_line_xdyd::c#1 // c zp[1]:32 20002.0 -char bitmap_line_xdyd::c#3 // c zp[1]:32 6668000.2 -unsigned int bitmap_line_xdyd::e -unsigned int bitmap_line_xdyd::e#0 // e zp[2]:24 200002.0 -unsigned int bitmap_line_xdyd::e#1 // e zp[2]:24 1.3333333466666667E8 -unsigned int bitmap_line_xdyd::e#2 // e zp[2]:24 2.00000002E8 -unsigned int bitmap_line_xdyd::e#3 // e zp[2]:24 3.33500005E7 -unsigned int bitmap_line_xdyd::e#6 // e zp[2]:24 1.00000001E8 -unsigned int bitmap_line_xdyd::x -unsigned int bitmap_line_xdyd::x#0 // x zp[2]:30 3333.6666666666665 -unsigned int bitmap_line_xdyd::x#1 // x zp[2]:30 3333.6666666666665 -unsigned int bitmap_line_xdyd::x#2 // x zp[2]:30 3.7500000375E7 -unsigned int bitmap_line_xdyd::x#3 // x zp[2]:30 6.00200008E7 -unsigned int bitmap_line_xdyd::x#6 // x zp[2]:30 60001.5 -unsigned int bitmap_line_xdyd::x1 -unsigned int bitmap_line_xdyd::x1#0 // x1 zp[2]:6 5000.5 -unsigned int bitmap_line_xdyd::x1#1 // x1 zp[2]:6 5000.5 -unsigned int bitmap_line_xdyd::x1#6 // x1 zp[2]:6 6668000.2 -unsigned int bitmap_line_xdyd::xd -unsigned int bitmap_line_xdyd::xd#0 // xd zp[2]:34 6667.333333333333 -unsigned int bitmap_line_xdyd::xd#1 // xd zp[2]:34 6667.333333333333 -unsigned int bitmap_line_xdyd::xd#5 // xd zp[2]:34 1.3334666933333334E7 -unsigned int bitmap_line_xdyd::y -unsigned int bitmap_line_xdyd::y#0 // y zp[2]:8 4000.4 -unsigned int bitmap_line_xdyd::y#1 // y zp[2]:8 4000.4 -unsigned int bitmap_line_xdyd::y#2 // y zp[2]:8 1.00000001E8 -unsigned int bitmap_line_xdyd::y#3 // y zp[2]:8 5.0012500625E7 -unsigned int bitmap_line_xdyd::y#5 // y zp[2]:8 60001.5 -unsigned int bitmap_line_xdyd::y#6 // y zp[2]:8 1.00000001E8 -unsigned int bitmap_line_xdyd::yd -unsigned int bitmap_line_xdyd::yd#0 // yd zp[2]:41 10001.0 -unsigned int bitmap_line_xdyd::yd#1 // yd zp[2]:41 10001.0 -unsigned int bitmap_line_xdyd::yd#2 // yd zp[2]:41 6674666.933333334 -void bitmap_line_xdyi(unsigned int x , unsigned int y , unsigned int x1 , unsigned int xd , unsigned int yd , char c) -unsigned int bitmap_line_xdyi::$6 // zp[2]:14 2.00000002E8 -char bitmap_line_xdyi::c -char bitmap_line_xdyi::c#0 // c zp[1]:33 20002.0 -char bitmap_line_xdyi::c#1 // c zp[1]:33 20002.0 -char bitmap_line_xdyi::c#3 // c zp[1]:33 6668000.2 -unsigned int bitmap_line_xdyi::e -unsigned int bitmap_line_xdyi::e#0 // e zp[2]:24 200002.0 -unsigned int bitmap_line_xdyi::e#1 // e zp[2]:24 1.3333333466666667E8 -unsigned int bitmap_line_xdyi::e#2 // e zp[2]:24 2.00000002E8 -unsigned int bitmap_line_xdyi::e#3 // e zp[2]:24 3.33500005E7 -unsigned int bitmap_line_xdyi::e#6 // e zp[2]:24 1.00000001E8 -unsigned int bitmap_line_xdyi::x -unsigned int bitmap_line_xdyi::x#0 // x zp[2]:30 3333.6666666666665 -unsigned int bitmap_line_xdyi::x#1 // x zp[2]:30 3333.6666666666665 -unsigned int bitmap_line_xdyi::x#2 // x zp[2]:30 3.7500000375E7 -unsigned int bitmap_line_xdyi::x#3 // x zp[2]:30 6.00200008E7 -unsigned int bitmap_line_xdyi::x#6 // x zp[2]:30 60001.5 -unsigned int bitmap_line_xdyi::x1 -unsigned int bitmap_line_xdyi::x1#0 // x1 zp[2]:6 5000.5 -unsigned int bitmap_line_xdyi::x1#1 // x1 zp[2]:6 5000.5 -unsigned int bitmap_line_xdyi::x1#6 // x1 zp[2]:6 6668000.2 -unsigned int bitmap_line_xdyi::xd -unsigned int bitmap_line_xdyi::xd#0 // xd zp[2]:34 6667.333333333333 -unsigned int bitmap_line_xdyi::xd#1 // xd zp[2]:34 6667.333333333333 -unsigned int bitmap_line_xdyi::xd#5 // xd zp[2]:34 1.3334666933333334E7 -unsigned int bitmap_line_xdyi::y -unsigned int bitmap_line_xdyi::y#0 // y zp[2]:8 4000.4 -unsigned int bitmap_line_xdyi::y#1 // y zp[2]:8 4000.4 -unsigned int bitmap_line_xdyi::y#2 // y zp[2]:8 1.00000001E8 -unsigned int bitmap_line_xdyi::y#3 // y zp[2]:8 5.0012500625E7 -unsigned int bitmap_line_xdyi::y#5 // y zp[2]:8 60001.5 -unsigned int bitmap_line_xdyi::y#6 // y zp[2]:8 1.00000001E8 -unsigned int bitmap_line_xdyi::yd -unsigned int bitmap_line_xdyi::yd#0 // yd zp[2]:39 10001.0 -unsigned int bitmap_line_xdyi::yd#1 // yd zp[2]:39 10001.0 -unsigned int bitmap_line_xdyi::yd#2 // yd zp[2]:39 6674666.933333334 -void bitmap_line_ydxd(unsigned int y , unsigned int x , unsigned int y1 , unsigned int yd , unsigned int xd , char c) -unsigned int bitmap_line_ydxd::$6 // zp[2]:14 2.00000002E8 -char bitmap_line_ydxd::c -char bitmap_line_ydxd::c#0 // c zp[1]:32 20002.0 -char bitmap_line_ydxd::c#1 // c zp[1]:32 20002.0 -char bitmap_line_ydxd::c#3 // c zp[1]:32 6668000.2 -unsigned int bitmap_line_ydxd::e -unsigned int bitmap_line_ydxd::e#0 // e zp[2]:24 200002.0 -unsigned int bitmap_line_ydxd::e#1 // e zp[2]:24 1.3333333466666667E8 -unsigned int bitmap_line_ydxd::e#2 // e zp[2]:24 2.00000002E8 -unsigned int bitmap_line_ydxd::e#3 // e zp[2]:24 3.33500005E7 -unsigned int bitmap_line_ydxd::e#6 // e zp[2]:24 1.00000001E8 -unsigned int bitmap_line_ydxd::x -unsigned int bitmap_line_ydxd::x#0 // x zp[2]:6 4000.4 -unsigned int bitmap_line_ydxd::x#1 // x zp[2]:6 4000.4 -unsigned int bitmap_line_ydxd::x#2 // x zp[2]:6 1.00000001E8 -unsigned int bitmap_line_ydxd::x#3 // x zp[2]:6 5.0012500625E7 -unsigned int bitmap_line_ydxd::x#5 // x zp[2]:6 60001.5 -unsigned int bitmap_line_ydxd::x#6 // x zp[2]:6 1.00000001E8 -unsigned int bitmap_line_ydxd::xd -unsigned int bitmap_line_ydxd::xd#0 // xd zp[2]:34 10001.0 -unsigned int bitmap_line_ydxd::xd#1 // xd zp[2]:34 10001.0 -unsigned int bitmap_line_ydxd::xd#2 // xd zp[2]:34 6674666.933333334 -unsigned int bitmap_line_ydxd::y -unsigned int bitmap_line_ydxd::y#0 // y zp[2]:4 3333.6666666666665 -unsigned int bitmap_line_ydxd::y#1 // y zp[2]:4 3333.6666666666665 -unsigned int bitmap_line_ydxd::y#2 // y zp[2]:4 6.00200008E7 -unsigned int bitmap_line_ydxd::y#3 // y zp[2]:4 3.7500000375E7 -unsigned int bitmap_line_ydxd::y#7 // y zp[2]:4 60001.5 -unsigned int bitmap_line_ydxd::y1 -unsigned int bitmap_line_ydxd::y1#0 // y1 zp[2]:8 5000.5 -unsigned int bitmap_line_ydxd::y1#1 // y1 zp[2]:8 5000.5 -unsigned int bitmap_line_ydxd::y1#6 // y1 zp[2]:8 6668000.2 -unsigned int bitmap_line_ydxd::yd -unsigned int bitmap_line_ydxd::yd#0 // yd zp[2]:41 6667.333333333333 -unsigned int bitmap_line_ydxd::yd#1 // yd zp[2]:41 6667.333333333333 -unsigned int bitmap_line_ydxd::yd#5 // yd zp[2]:41 1.3334666933333334E7 -void bitmap_line_ydxi(unsigned int y , unsigned int x , unsigned int y1 , unsigned int yd , unsigned int xd , char c) -unsigned int bitmap_line_ydxi::$6 // zp[2]:30 2.00000002E8 -char bitmap_line_ydxi::c -char bitmap_line_ydxi::c#0 // c zp[1]:32 20002.0 -char bitmap_line_ydxi::c#1 // c zp[1]:32 20002.0 -char bitmap_line_ydxi::c#3 // c zp[1]:32 6668000.2 -unsigned int bitmap_line_ydxi::e -unsigned int bitmap_line_ydxi::e#0 // e zp[2]:24 200002.0 -unsigned int bitmap_line_ydxi::e#1 // e zp[2]:24 1.3333333466666667E8 -unsigned int bitmap_line_ydxi::e#2 // e zp[2]:24 2.00000002E8 -unsigned int bitmap_line_ydxi::e#3 // e zp[2]:24 3.33500005E7 -unsigned int bitmap_line_ydxi::e#6 // e zp[2]:24 1.00000001E8 -unsigned int bitmap_line_ydxi::x -unsigned int bitmap_line_ydxi::x#0 // x zp[2]:6 4000.4 -unsigned int bitmap_line_ydxi::x#1 // x zp[2]:6 4000.4 -unsigned int bitmap_line_ydxi::x#2 // x zp[2]:6 1.00000001E8 -unsigned int bitmap_line_ydxi::x#3 // x zp[2]:6 5.0012500625E7 -unsigned int bitmap_line_ydxi::x#5 // x zp[2]:6 60001.5 -unsigned int bitmap_line_ydxi::x#6 // x zp[2]:6 1.00000001E8 -unsigned int bitmap_line_ydxi::xd -unsigned int bitmap_line_ydxi::xd#0 // xd zp[2]:34 10001.0 -unsigned int bitmap_line_ydxi::xd#1 // xd zp[2]:34 10001.0 -unsigned int bitmap_line_ydxi::xd#2 // xd zp[2]:34 6674666.933333334 -unsigned int bitmap_line_ydxi::y -unsigned int bitmap_line_ydxi::y#0 // y zp[2]:4 3333.6666666666665 -unsigned int bitmap_line_ydxi::y#1 // y zp[2]:4 3333.6666666666665 -unsigned int bitmap_line_ydxi::y#2 // y zp[2]:4 3.7500000375E7 -unsigned int bitmap_line_ydxi::y#3 // y zp[2]:4 6.00200008E7 -unsigned int bitmap_line_ydxi::y#6 // y zp[2]:4 60001.5 -unsigned int bitmap_line_ydxi::y1 -unsigned int bitmap_line_ydxi::y1#0 // y1 zp[2]:8 5000.5 -unsigned int bitmap_line_ydxi::y1#1 // y1 zp[2]:8 5000.5 -unsigned int bitmap_line_ydxi::y1#6 // y1 zp[2]:8 6668000.2 -unsigned int bitmap_line_ydxi::yd -unsigned int bitmap_line_ydxi::yd#0 // yd zp[2]:39 6667.333333333333 -unsigned int bitmap_line_ydxi::yd#1 // yd zp[2]:39 6667.333333333333 -unsigned int bitmap_line_ydxi::yd#5 // yd zp[2]:39 1.3334666933333334E7 -void bitmap_plot(unsigned int x , unsigned int y , char c) -unsigned int bitmap_plot::$10 // zp[2]:12 2.000000002E9 -const unsigned int *bitmap_plot::$12 // zp[2]:14 1.000000001E9 -const unsigned long *bitmap_plot::$13 // zp[2]:12 2.000000002E9 -const char *bitmap_plot::$14 // zp[2]:20 2.000000002E9 -const char *bitmap_plot::$15 // zp[2]:22 2.000000002E9 -char bitmap_plot::$3 // reg byte x 2.000000002E9 -char bitmap_plot::$6 // reg byte a 2.000000002E9 -char bitmap_plot::$7 // reg byte a 2.000000002E9 -char bitmap_plot::$8 // reg byte a 2.000000002E9 -unsigned int bitmap_plot::$9 // zp[2]:14 2.000000002E9 -char bitmap_plot::bitshift -char bitmap_plot::bitshift#0 // reg byte a 1.5000000015E9 -char bitmap_plot::c -char bitmap_plot::c#0 // reg byte x 2.72727273E8 -char bitmap_plot::c#1 // reg byte x 2.00000002E8 -char bitmap_plot::c#2 // reg byte x 2.00000002E8 -char bitmap_plot::c#3 // reg byte x 2.00000002E8 -char bitmap_plot::c#4 // reg byte x 2.00000002E8 -char bitmap_plot::c#5 // reg byte x 2.1818181872727272E8 -unsigned long bitmap_plot::plot_x -unsigned long bitmap_plot::plot_x#0 // plot_x zp[4]:26 5.000000005E8 -unsigned long bitmap_plot::plot_y -unsigned long bitmap_plot::plot_y#0 // plot_y zp[4]:16 2.000000002E9 -unsigned long bitmap_plot::plotter -char bitmap_plot::vera_vram_address01_$0 // reg byte a 2.000000002E9 -char bitmap_plot::vera_vram_address01_$1 // reg byte a 2.000000002E9 -char bitmap_plot::vera_vram_address01_$3 // reg byte a 2.000000002E9 -unsigned long bitmap_plot::vera_vram_address01_bankaddr -unsigned long bitmap_plot::vera_vram_address01_bankaddr#0 // vera_vram_address01_bankaddr zp[4]:26 3.63636364E8 -char bitmap_plot::vera_vram_address01_incr -unsigned int bitmap_plot::x -unsigned int bitmap_plot::x#0 // x zp[2]:30 6.6666667333333336E7 -unsigned int bitmap_plot::x#1 // x zp[2]:30 6.6666667333333336E7 -unsigned int bitmap_plot::x#2 // x zp[2]:30 6.6666667333333336E7 -unsigned int bitmap_plot::x#3 // x zp[2]:30 6.6666667333333336E7 -unsigned int bitmap_plot::x#4 // x zp[2]:30 1.7000000035E8 -unsigned int bitmap_plot::y -unsigned int bitmap_plot::y#0 // y zp[2]:4 1.00000001E8 -unsigned int bitmap_plot::y#1 // y zp[2]:4 1.00000001E8 -unsigned int bitmap_plot::y#2 // y zp[2]:4 1.00000001E8 -unsigned int bitmap_plot::y#3 // y zp[2]:4 1.00000001E8 -unsigned int bitmap_plot::y#4 // y zp[2]:4 3.5000000125E8 -__constant const char bitmasks[5] = { $80, $c0, $f0, $ff } -__constant const signed char bitshifts[5] = { 7, 6, 4, 0 } -void clearline() -char clearline::$1 // reg byte a 2.00000002E8 -char clearline::$2 // reg byte a 2.00000002E8 -char clearline::$5 // reg byte a 2.00000002E8 -char *clearline::addr -char *clearline::addr#0 // addr zp[2]:14 1.00000001E8 -unsigned int clearline::c -unsigned int clearline::c#1 // c zp[2]:4 2.0000000002E10 -unsigned int clearline::c#2 // c zp[2]:4 7.50000000075E9 -char clearline::color -char clearline::color#0 // reg byte x 1.6833333336666665E9 -void clrscr() -char clrscr::$0 // reg byte a 202.0 -char clrscr::$1 // zp[1]:135 40.4 -char clrscr::$2 // reg byte a 202.0 -char clrscr::$5 // reg byte a 2002.0 -char clrscr::$6 // reg byte a 2002.0 -char clrscr::$7 // reg byte a 2002.0 -char clrscr::$9 // reg byte a 202.0 -char clrscr::c -char clrscr::c#1 // reg byte y 20002.0 -char clrscr::c#2 // reg byte y 7500.75 -char *clrscr::ch -char clrscr::color -char clrscr::color#0 // color zp[1]:135 594.2352941176471 -char clrscr::l -char clrscr::l#1 // reg byte x 2002.0 -char clrscr::l#2 // reg byte x 200.2 -char *clrscr::line_text -char *clrscr::line_text#0 // line_text zp[2]:112 18.363636363636363 -char *clrscr::line_text#1 // line_text zp[2]:112 1001.0 -char *clrscr::line_text#2 // line_text zp[2]:112 293.2142857142857 -__constant char conio_cursor_x[2] = { 0, 0 } -__constant char conio_cursor_y[2] = { 0, 0 } -__loadstore unsigned int conio_height // zp[2]:51 5624.185393258427 -__constant unsigned int conio_line_text[2] = { 0, 0 } -__loadstore char conio_rowshift // zp[1]:45 5126904.086294416 -__loadstore unsigned int conio_rowskip // zp[2]:46 4902456.401960785 -__loadstore volatile char conio_screen_height // zp[1]:49 62827.3664921466 -__loadstore char conio_screen_layer // zp[1]:48 1240329.689530686 -__loadstore volatile char conio_screen_width // zp[1]:36 4.414101324229074E7 -__constant char conio_scroll_enable[2] = { 1, 1 } -__loadstore unsigned int conio_width // zp[2]:165 111.69444444444444 -void conio_x16_init() -__constant char * const conio_x16_init::BASIC_CURSOR_LINE = (char *) 214 -char conio_x16_init::line -char conio_x16_init::line#0 // line zp[1]:168 2.1999999999999997 -char conio_x16_init::line#1 // line zp[1]:168 22.0 -char conio_x16_init::line#3 // line zp[1]:168 33.0 -__stackcall void cputc(char c) -char cputc::$15 // reg byte a 20002.0 -unsigned int cputc::$16 // zp[2]:41 20002.0 -char cputc::$2 // reg byte a 20002.0 -char cputc::$4 // reg byte a 20002.0 -char cputc::$5 // reg byte a 20002.0 -char cputc::$6 // reg byte a 20002.0 -__constant char cputc::OFFSET_STACK_C = 0 -char cputc::c -char cputc::c#0 // c zp[1]:105 1764.8823529411764 -char cputc::color -char cputc::color#0 // reg byte x 1428.7142857142858 -char *cputc::conio_addr -char *cputc::conio_addr#0 // conio_addr zp[2]:30 10001.0 -char *cputc::conio_addr#1 // conio_addr zp[2]:30 6000.6 -char cputc::scroll_enable -char cputc::scroll_enable#0 // reg byte a 20002.0 -void cputln() -char cputln::$2 // reg byte a 200002.0 -char cputln::$3 // reg byte a 200002.0 -unsigned int cputln::temp -unsigned int cputln::temp#0 // temp zp[2]:6 200002.0 -unsigned int cputln::temp#1 // temp zp[2]:6 100001.0 -void cscroll() -unsigned int divr16u(unsigned int dividend , unsigned int divisor , unsigned int rem) -char divr16u::$1 // reg byte a 2000002.0 -char divr16u::$2 // reg byte a 2000002.0 -unsigned int divr16u::dividend -unsigned int divr16u::dividend#0 // dividend zp[2]:2 250000.25 -unsigned int divr16u::dividend#1 // dividend zp[2]:2 3667.333333333333 -unsigned int divr16u::dividend#2 // dividend zp[2]:2 430000.57142857136 -unsigned int divr16u::divisor -unsigned int divr16u::divisor#0 // divisor zp[2]:30 117706.05882352941 -char divr16u::i -char divr16u::i#1 // reg byte x 1500001.5 -char divr16u::i#2 // reg byte x 153846.3076923077 -unsigned int divr16u::quotient -unsigned int divr16u::quotient#1 // quotient zp[2]:39 1500001.5 -unsigned int divr16u::quotient#2 // quotient zp[2]:39 1000001.0 -unsigned int divr16u::quotient#3 // quotient zp[2]:39 250000.25 -unsigned int divr16u::rem -unsigned int divr16u::rem#0 // rem zp[2]:34 750000.75 -unsigned int divr16u::rem#1 // rem zp[2]:34 2000002.0 -unsigned int divr16u::rem#10 // rem zp[2]:34 1003334.6666666666 -unsigned int divr16u::rem#2 // rem zp[2]:34 2000002.0 -unsigned int divr16u::rem#4 // rem zp[2]:34 2000002.0 -unsigned int divr16u::rem#5 // rem zp[2]:34 1000001.0 -unsigned int divr16u::return -unsigned int divr16u::return#0 // return zp[2]:39 1000001.0 -void gotoxy(char x , char y) -char gotoxy::$5 // reg byte a 2.0000002E7 -unsigned int gotoxy::$6 // zp[2]:37 2.0000002E7 -unsigned int gotoxy::line_offset -unsigned int gotoxy::line_offset#0 // line_offset zp[2]:37 1.0000001E7 -char gotoxy::x -char gotoxy::y -char gotoxy::y#1 // reg byte x 22.0 -char gotoxy::y#10 // reg byte x 4000000.4 -char gotoxy::y#2 // reg byte x 2000002.0 -char gotoxy::y#7 // reg byte x 7000004.666666666 -__constant unsigned int hdeltas[$10] = { 0, $50, $28, $14, 0, $a0, $50, $28, 0, $140, $a0, $50, 0, $280, $140, $a0 } -void insertup() -char insertup::$3 // reg byte a 2.000000002E9 -char insertup::cy -char insertup::cy#0 // cy zp[1]:33 7.769230784615384E7 -char insertup::i -char insertup::i#1 // reg byte x 2.000000002E9 -char insertup::i#2 // reg byte x 4.000000004E8 -unsigned int insertup::line -unsigned int insertup::line#0 // line zp[2]:10 2.000000002E9 -char *insertup::start -char *insertup::start#0 // start zp[2]:10 1.000000001E9 -char insertup::width -char insertup::width#0 // width zp[1]:32 8.416666683333334E7 -char kbhit() -__constant char * const kbhit::GETIN = (char *) 65508 -__constant char * const kbhit::IN_DEV = (char *) 650 -__loadstore volatile char kbhit::ch // zp[1]:50 10001.0 -__constant char * const kbhit::chptr = &kbhit::ch -char kbhit::return -char kbhit::return#0 // reg byte a 20002.0 -char kbhit::return#1 // reg byte a 2775.75 -char kbhit::return#2 // reg byte a 202.0 -char kbhit::return#3 // reg byte a 2002.0 -void main() -char main::$30 // reg byte a 202.0 -unsigned int main::$40 // zp[2]:110 202.0 -char main::$43 // reg byte a 2002.0 -char main::bgcolor1_color -char main::bgcolor2_color -char main::bgcolor3_color -char main::color -char main::color#1 // color zp[1]:126 525.75 -char main::color#2 // color zp[1]:126 344.8888888888889 -__constant char main::s[$16] = "vera in bitmap mode, -" -__constant char main::s1[$1f] = "color depth 8 bits per pixel. -" -__constant char main::s2[$29] = "in this mode, it is possible to display -" -__constant char main::s3[$19] = "graphics in 256 colors. -" -__constant char main::s4[$10] = "press a key ..." -__constant char main::s5[$27] = "here you see all the colors possible. -" -char main::textcolor1_color -char main::textcolor2_color -char main::textcolor3_color -char main::textcolor4_color -char main::textcolor5_color -char main::vera_layer_show1_layer -unsigned int main::x -unsigned int main::x#1 // x zp[2]:120 701.0 -unsigned int main::x#3 // x zp[2]:120 310.4 -void memcpy_in_vram(char dest_bank , void *dest , char dest_increment , char src_bank , void *src , char src_increment , unsigned int num) -char memcpy_in_vram::$0 // reg byte a 2.0000000002E10 -char memcpy_in_vram::$1 // reg byte a 2.0000000002E10 -char memcpy_in_vram::$3 // reg byte a 2.0000000002E10 -char memcpy_in_vram::$4 // reg byte a 2.0000000002E10 -char memcpy_in_vram::$5 // reg byte a 2.0000000002E10 -void *memcpy_in_vram::dest -void *memcpy_in_vram::dest#0 // dest zp[2]:10 6.666666673333334E8 -void *memcpy_in_vram::dest#2 // dest zp[2]:10 2.1000000003000002E9 -char memcpy_in_vram::dest_bank -char memcpy_in_vram::dest_bank#2 // reg byte y 8.333333334166666E8 -char memcpy_in_vram::dest_increment -unsigned int memcpy_in_vram::i -unsigned int memcpy_in_vram::i#1 // i zp[2]:2 2.00000000002E11 -unsigned int memcpy_in_vram::i#2 // i zp[2]:2 1.00000000001E11 -unsigned int memcpy_in_vram::num -unsigned int memcpy_in_vram::num#0 // num zp[2]:8 1.000000001E9 -unsigned int memcpy_in_vram::num#3 // num zp[2]:8 5.611111111222221E9 -void *memcpy_in_vram::src -char *memcpy_in_vram::src#0 // src zp[2]:6 3.333333336666667E8 -void *memcpy_in_vram::src#2 // src zp[2]:6 5.25000000075E9 -void *memcpy_in_vram::src#3 // src zp[2]:6 2.000000002E9 -char memcpy_in_vram::src_bank -char memcpy_in_vram::src_increment -void memset_vram(char vbank , void *vdest , char data , unsigned long num) -char memset_vram::$0 // reg byte a 2002.0 -char memset_vram::$1 // reg byte a 2002.0 -char memset_vram::$2 // reg byte a 2002.0 -char memset_vram::data -__constant char memset_vram::data#0 = 0 // data -unsigned long memset_vram::i -unsigned long memset_vram::i#1 // i zp[4]:16 20002.0 -unsigned long memset_vram::i#2 // i zp[4]:16 10001.0 -unsigned long memset_vram::num -unsigned long memset_vram::num#0 // num zp[4]:114 841.8333333333333 -char memset_vram::vbank -char memset_vram::vbank#0 // reg byte x 137.75 -void *memset_vram::vdest -void *memset_vram::vdest#0 // vdest zp[2]:145 420.59999999999997 -unsigned int modr16u(unsigned int dividend , unsigned int divisor , unsigned int rem) -unsigned int modr16u::dividend -unsigned int modr16u::dividend#0 // dividend zp[2]:2 202.0 -unsigned int modr16u::dividend#1 // dividend zp[2]:2 202.0 -unsigned int modr16u::dividend#2 // dividend zp[2]:2 202.0 -unsigned int modr16u::dividend#3 // dividend zp[2]:2 202.0 -unsigned int modr16u::dividend#4 // dividend zp[2]:2 1405.0 -unsigned int modr16u::divisor -unsigned int modr16u::divisor#4 // divisor zp[2]:143 500.5 -unsigned int modr16u::rem -unsigned int modr16u::return -unsigned int modr16u::return#0 // return zp[2]:118 234.16666666666669 -unsigned int modr16u::return#10 // return zp[2]:118 202.0 -unsigned int modr16u::return#2 // return zp[2]:118 202.0 -unsigned int modr16u::return#3 // return zp[2]:118 202.0 -unsigned int modr16u::return#4 // return zp[2]:118 202.0 -unsigned long mul16u(unsigned int a , unsigned int b) -char mul16u::$1 // reg byte a 20002.0 -unsigned int mul16u::a -unsigned int mul16u::a#0 // a zp[2]:2 367.33333333333337 -unsigned int mul16u::a#1 // a zp[2]:2 10001.0 -unsigned int mul16u::a#2 // a zp[2]:2 6834.166666666666 -unsigned int mul16u::b -unsigned int mul16u::b#0 // b zp[2]:161 101.0 -unsigned long mul16u::mb -unsigned long mul16u::mb#0 // mb zp[4]:26 2002.0 -unsigned long mul16u::mb#1 // mb zp[4]:26 20002.0 -unsigned long mul16u::mb#2 // mb zp[4]:26 4429.142857142857 -unsigned long mul16u::res -unsigned long mul16u::res#1 // res zp[4]:16 20002.0 -unsigned long mul16u::res#2 // res zp[4]:16 5017.333333333333 -unsigned long mul16u::res#6 // res zp[4]:16 10001.0 -unsigned long mul16u::return -unsigned long mul16u::return#0 // return zp[4]:114 202.0 -void printf_str(void (*putc)(char) , const char *s) -char printf_str::c -char printf_str::c#1 // reg byte a 1001.0 -void (*printf_str::putc)(char) -const char *printf_str::s -const char *printf_str::s#0 // s zp[2]:77 400.4 -const char *printf_str::s#8 // s zp[2]:77 1552.0 -const char *printf_str::s#9 // s zp[2]:77 101.0 -unsigned int rand() -unsigned int rand::$0 // zp[2]:97 2002.0 -unsigned int rand::$1 // zp[2]:99 2002.0 -unsigned int rand::$2 // zp[2]:101 2002.0 -unsigned int rand::return -unsigned int rand::return#0 // return zp[2]:110 215.14285714285714 -unsigned int rand::return#10 // return zp[2]:110 202.0 -unsigned int rand::return#11 // return zp[2]:110 202.0 -unsigned int rand::return#12 // return zp[2]:110 202.0 -unsigned int rand::return#2 // return zp[2]:110 202.0 -unsigned int rand::return#3 // return zp[2]:110 202.0 -unsigned int rand_state -unsigned int rand_state#0 // rand_state zp[2]:53 1501.5 -unsigned int rand_state#1 // rand_state zp[2]:53 1501.5 -unsigned int rand_state#13 // rand_state zp[2]:53 1253.5 -unsigned int rand_state#14 // rand_state zp[2]:53 78.34375 -unsigned int rand_state#23 // rand_state zp[2]:53 33.666666666666664 -unsigned int rem16u -unsigned int rem16u#0 // rem16u zp[2]:65 3667.333333333333 -void screenlayer(char layer) -unsigned int screenlayer::$2 // zp[2]:137 202.0 -char screenlayer::$3 // reg byte a 202.0 -unsigned int screenlayer::$4 // zp[2]:127 202.0 -unsigned int screenlayer::$5 // zp[2]:139 202.0 -char screenlayer::layer -char screenlayer::vera_layer_get_height1_$0 // reg byte a 202.0 -char screenlayer::vera_layer_get_height1_$1 // reg byte a 202.0 -char screenlayer::vera_layer_get_height1_$2 // reg byte a 202.0 -char screenlayer::vera_layer_get_height1_$3 // reg byte a 202.0 -char *screenlayer::vera_layer_get_height1_config -char *screenlayer::vera_layer_get_height1_config#0 // vera_layer_get_height1_config zp[2]:153 202.0 -char screenlayer::vera_layer_get_height1_layer -char screenlayer::vera_layer_get_height1_layer#0 // reg byte a 202.0 -unsigned int screenlayer::vera_layer_get_height1_return -unsigned int screenlayer::vera_layer_get_height1_return#0 // vera_layer_get_height1_return zp[2]:139 202.0 -unsigned int screenlayer::vera_layer_get_height1_return#1 // vera_layer_get_height1_return zp[2]:139 202.0 -char screenlayer::vera_layer_get_width1_$0 // reg byte a 202.0 -char screenlayer::vera_layer_get_width1_$1 // reg byte a 202.0 -char screenlayer::vera_layer_get_width1_$2 // reg byte a 202.0 -char screenlayer::vera_layer_get_width1_$3 // reg byte a 202.0 -char *screenlayer::vera_layer_get_width1_config -char *screenlayer::vera_layer_get_width1_config#0 // vera_layer_get_width1_config zp[2]:151 202.0 -char screenlayer::vera_layer_get_width1_layer -char screenlayer::vera_layer_get_width1_layer#0 // reg byte a 202.0 -unsigned int screenlayer::vera_layer_get_width1_return -unsigned int screenlayer::vera_layer_get_width1_return#0 // vera_layer_get_width1_return zp[2]:137 202.0 -unsigned int screenlayer::vera_layer_get_width1_return#1 // vera_layer_get_width1_return zp[2]:137 202.0 -void screensize(char *x , char *y) -char screensize::$1 // reg byte a 202.0 -char screensize::$3 // reg byte a 202.0 -char screensize::hscale -char screensize::hscale#0 // reg byte a 202.0 -char screensize::vscale -char screensize::vscale#0 // reg byte a 202.0 -char *screensize::x -__constant char *screensize::x#0 = &conio_screen_width // x -char *screensize::y -__constant char *screensize::y#0 = &conio_screen_height // y -__constant const unsigned int vdeltas[4] = { 0, $1e0, $f0, $a0 } -char vera_display_get_hscale() -__constant char vera_display_get_hscale::hscale[4] = { 0, $80, $40, $20 } -char vera_display_get_hscale::return -char vera_display_get_hscale::return#0 // reg byte x 3367.333333333333 -char vera_display_get_hscale::return#2 // reg byte x 202.0 -char vera_display_get_hscale::s -char vera_display_get_hscale::s#1 // reg byte x 15001.5 -char vera_display_get_hscale::s#2 // reg byte x 20002.0 -char vera_display_get_hscale::scale -__constant char vera_display_get_hscale::scale#0 = 0 // scale -char vera_display_get_vscale() -char vera_display_get_vscale::return -char vera_display_get_vscale::return#0 // reg byte x 3367.333333333333 -char vera_display_get_vscale::return#2 // reg byte x 202.0 -char vera_display_get_vscale::s -char vera_display_get_vscale::s#1 // reg byte x 15001.5 -char vera_display_get_vscale::s#2 // reg byte x 20002.0 -char vera_display_get_vscale::scale -__constant char vera_display_get_vscale::scale#0 = 0 // scale -__constant char vera_display_get_vscale::vscale[4] = { 0, $80, $40, $20 } -__constant char vera_layer_backcolor[2] = { BLUE, BLUE } -__constant char *vera_layer_config[2] = { VERA_L0_CONFIG, VERA_L1_CONFIG } -__constant char vera_layer_enable[2] = { VERA_LAYER0_ENABLE, VERA_LAYER1_ENABLE } -char vera_layer_get_backcolor(char layer) -char vera_layer_get_backcolor::layer -char vera_layer_get_backcolor::layer#0 // reg byte x 1102.0 -char vera_layer_get_backcolor::return -char vera_layer_get_backcolor::return#0 // reg byte a 202.0 -char vera_layer_get_backcolor::return#1 // reg byte a 367.33333333333337 -char vera_layer_get_color(char layer) -char vera_layer_get_color::$0 // reg byte a 2.000000002E9 -char vera_layer_get_color::$1 // reg byte a 2.000000002E9 -char vera_layer_get_color::$3 // reg byte a 2.000000002E9 -char *vera_layer_get_color::addr -char *vera_layer_get_color::addr#0 // addr zp[2]:6 2.000000002E9 -char vera_layer_get_color::layer -char vera_layer_get_color::layer#0 // reg byte x 20002.0 -char vera_layer_get_color::layer#1 // reg byte x 2.00000002E8 -char vera_layer_get_color::layer#2 // reg byte x 6.833350010000001E8 -char vera_layer_get_color::return -char vera_layer_get_color::return#0 // reg byte a 20002.0 -char vera_layer_get_color::return#1 // reg byte a 2.000000002E9 -char vera_layer_get_color::return#2 // reg byte a 2.000000002E9 -char vera_layer_get_color::return#3 // reg byte a 5.25002501E8 -char vera_layer_get_color::return#4 // reg byte a 2.00000002E8 -char vera_layer_get_mapbase_bank(char layer) -char vera_layer_get_mapbase_bank::layer -char vera_layer_get_mapbase_bank::layer#0 // reg byte x 1102.0 -char vera_layer_get_mapbase_bank::return -char vera_layer_get_mapbase_bank::return#0 // reg byte a 367.33333333333337 -char vera_layer_get_mapbase_bank::return#2 // reg byte a 202.0 -unsigned int vera_layer_get_mapbase_offset(char layer) -char vera_layer_get_mapbase_offset::$0 // reg byte a 2002.0 -char vera_layer_get_mapbase_offset::layer -char vera_layer_get_mapbase_offset::layer#0 // reg byte a 1102.0 -unsigned int vera_layer_get_mapbase_offset::return -unsigned int vera_layer_get_mapbase_offset::return#0 // return zp[2]:141 367.33333333333337 -unsigned int vera_layer_get_mapbase_offset::return#2 // return zp[2]:141 202.0 -char vera_layer_get_rowshift(char layer) -char vera_layer_get_rowshift::layer -char vera_layer_get_rowshift::layer#0 // reg byte x 1102.0 -char vera_layer_get_rowshift::return -char vera_layer_get_rowshift::return#0 // reg byte a 367.33333333333337 -char vera_layer_get_rowshift::return#2 // reg byte a 202.0 -unsigned int vera_layer_get_rowskip(char layer) -char vera_layer_get_rowskip::$0 // reg byte a 2002.0 -char vera_layer_get_rowskip::layer -char vera_layer_get_rowskip::layer#0 // reg byte a 1102.0 -unsigned int vera_layer_get_rowskip::return -unsigned int vera_layer_get_rowskip::return#0 // return zp[2]:127 367.33333333333337 -unsigned int vera_layer_get_rowskip::return#2 // return zp[2]:127 202.0 -char vera_layer_get_textcolor(char layer) -char vera_layer_get_textcolor::layer -char vera_layer_get_textcolor::layer#0 // reg byte x 1102.0 -char vera_layer_get_textcolor::return -char vera_layer_get_textcolor::return#0 // reg byte a 202.0 -char vera_layer_get_textcolor::return#1 // reg byte a 367.33333333333337 -__constant char *vera_layer_mapbase[2] = { VERA_L0_MAPBASE, VERA_L1_MAPBASE } -void vera_layer_mode_bitmap(char layer , unsigned long bitmap_address , unsigned int mapwidth , unsigned int color_depth) -unsigned long vera_layer_mode_bitmap::bitmap_address -__constant unsigned long vera_layer_mode_bitmap::bitmap_address#1 = 0 // bitmap_address -unsigned int vera_layer_mode_bitmap::color_depth -char vera_layer_mode_bitmap::config -__constant char vera_layer_mode_bitmap::config#11 = VERA_LAYER_COLOR_DEPTH_8BPP|VERA_LAYER_CONFIG_MODE_BITMAP // config -char vera_layer_mode_bitmap::layer -__constant char vera_layer_mode_bitmap::layer#0 = 0 // layer -unsigned int vera_layer_mode_bitmap::mapwidth -char vera_layer_mode_bitmap::tilebase -__constant char vera_layer_mode_bitmap::tilebase#1 = 0 // tilebase -void vera_layer_mode_text(char layer , unsigned long mapbase_address , unsigned long tilebase_address , unsigned int mapwidth , unsigned int mapheight , char tilewidth , char tileheight , unsigned int color_mode) -unsigned int vera_layer_mode_text::color_mode -char vera_layer_mode_text::layer -__constant char vera_layer_mode_text::layer#0 = 1 // layer -unsigned long vera_layer_mode_text::mapbase_address -__constant unsigned long vera_layer_mode_text::mapbase_address#0 = 0 // mapbase_address -unsigned int vera_layer_mode_text::mapheight -__constant unsigned int vera_layer_mode_text::mapheight#0 = $40 // mapheight -unsigned int vera_layer_mode_text::mapwidth -__constant unsigned int vera_layer_mode_text::mapwidth#0 = $80 // mapwidth -unsigned long vera_layer_mode_text::tilebase_address -__constant unsigned long vera_layer_mode_text::tilebase_address#0 = $f800 // tilebase_address -char vera_layer_mode_text::tileheight -__constant char vera_layer_mode_text::tileheight#0 = 8 // tileheight -char vera_layer_mode_text::tilewidth -__constant char vera_layer_mode_text::tilewidth#0 = 8 // tilewidth -void vera_layer_mode_tile(char layer , unsigned long mapbase_address , unsigned long tilebase_address , unsigned int mapwidth , unsigned int mapheight , char tilewidth , char tileheight , char color_depth) -unsigned int vera_layer_mode_tile::$1 // zp[2]:124 1001.0 -char vera_layer_mode_tile::$11 // reg byte a 2002.0 -char vera_layer_mode_tile::$12 // reg byte a 2002.0 -char vera_layer_mode_tile::$13 // reg byte a 2002.0 -char vera_layer_mode_tile::$14 // reg byte a 2002.0 -char vera_layer_mode_tile::$17 // zp[1]:149 250.25 -char vera_layer_mode_tile::$18 // zp[1]:147 273.0 -char vera_layer_mode_tile::$2 // reg byte a 2002.0 -unsigned int vera_layer_mode_tile::$6 // zp[2]:79 2002.0 -char vera_layer_mode_tile::$7 // reg byte a 2002.0 -char vera_layer_mode_tile::color_depth -char vera_layer_mode_tile::config -char vera_layer_mode_tile::config#10 // reg byte x 2002.0 -char vera_layer_mode_tile::config#11 // reg byte x 2002.0 -char vera_layer_mode_tile::config#12 // reg byte x 2002.0 -char vera_layer_mode_tile::config#21 // reg byte x 1001.0 -char vera_layer_mode_tile::config#25 // reg byte x 3003.0 -char vera_layer_mode_tile::layer -char vera_layer_mode_tile::layer#10 // layer zp[1]:148 263.4210526315791 -char vera_layer_mode_tile::mapbase -char vera_layer_mode_tile::mapbase#0 // reg byte x 1001.0 -unsigned long vera_layer_mode_tile::mapbase_address -unsigned long vera_layer_mode_tile::mapbase_address#0 // mapbase_address zp[4]:67 2002.0 -unsigned long vera_layer_mode_tile::mapbase_address#10 // mapbase_address zp[4]:67 111.22222222222223 -unsigned int vera_layer_mode_tile::mapheight -unsigned int vera_layer_mode_tile::mapheight#10 // mapheight zp[2]:159 190.66666666666666 -unsigned int vera_layer_mode_tile::mapwidth -unsigned int vera_layer_mode_tile::mapwidth#10 // mapwidth zp[2]:122 1001.0 -char vera_layer_mode_tile::tilebase -char vera_layer_mode_tile::tilebase#0 // reg byte a 2002.0 -char vera_layer_mode_tile::tilebase#1 // reg byte x 1334.6666666666667 -char vera_layer_mode_tile::tilebase#10 // reg byte x 2002.0 -char vera_layer_mode_tile::tilebase#12 // reg byte x 2002.0000000000002 -char vera_layer_mode_tile::tilebase#3 // reg byte x 2002.0 -char vera_layer_mode_tile::tilebase#5 // reg byte x 2002.0 -unsigned long vera_layer_mode_tile::tilebase_address -unsigned long vera_layer_mode_tile::tilebase_address#0 // tilebase_address zp[4]:73 2002.0 -unsigned long vera_layer_mode_tile::tilebase_address#10 // tilebase_address zp[4]:73 87.04347826086956 -char vera_layer_mode_tile::tileheight -char vera_layer_mode_tile::tileheight#10 // tileheight zp[1]:170 37.074074074074076 -char vera_layer_mode_tile::tilewidth -char vera_layer_mode_tile::tilewidth#10 // tilewidth zp[1]:169 40.04 -__constant char vera_layer_rowshift[2] = { 0, 0 } -__constant unsigned int vera_layer_rowskip[2] = { 0, 0 } -char vera_layer_set_backcolor(char layer , char color) -char vera_layer_set_backcolor::color -char vera_layer_set_backcolor::color#4 // reg byte a 101.0 -char vera_layer_set_backcolor::layer -char vera_layer_set_backcolor::layer#1 // reg byte x 22.0 -char vera_layer_set_backcolor::layer#2 // reg byte x 22.0 -char vera_layer_set_backcolor::layer#3 // reg byte x 22.0 -char vera_layer_set_backcolor::layer#4 // reg byte x 134.0 -char vera_layer_set_backcolor::old -char vera_layer_set_backcolor::return -void vera_layer_set_config(char layer , char config) -char vera_layer_set_config::$0 // reg byte a 20002.0 -char *vera_layer_set_config::addr -char *vera_layer_set_config::addr#0 // addr zp[2]:37 20002.0 -char vera_layer_set_config::config -char vera_layer_set_config::config#0 // reg byte x 2002.0 -char vera_layer_set_config::config#2 // reg byte x 3667.333333333333 -char vera_layer_set_config::layer -char vera_layer_set_config::layer#0 // reg byte a 1001.0 -char vera_layer_set_config::layer#2 // reg byte a 11002.0 -void vera_layer_set_mapbase(char layer , char mapbase) -char vera_layer_set_mapbase::$0 // reg byte a 20002.0 -char *vera_layer_set_mapbase::addr -char *vera_layer_set_mapbase::addr#0 // addr zp[2]:37 20002.0 -char vera_layer_set_mapbase::layer -char vera_layer_set_mapbase::layer#0 // reg byte a 1001.0 -char vera_layer_set_mapbase::layer#3 // reg byte a 11002.0 -char vera_layer_set_mapbase::mapbase -char vera_layer_set_mapbase::mapbase#0 // reg byte x 2002.0 -char vera_layer_set_mapbase::mapbase#3 // reg byte x 3667.333333333333 -void vera_layer_set_text_color_mode(char layer , char color_mode) -char *vera_layer_set_text_color_mode::addr -char *vera_layer_set_text_color_mode::addr#0 // addr zp[2]:37 2502.5 -char vera_layer_set_text_color_mode::color_mode -char vera_layer_set_text_color_mode::layer -char vera_layer_set_textcolor(char layer , char color) -char vera_layer_set_textcolor::color -char vera_layer_set_textcolor::color#6 // reg byte a 101.0 -char vera_layer_set_textcolor::layer -char vera_layer_set_textcolor::layer#1 // reg byte x 22.0 -char vera_layer_set_textcolor::layer#2 // reg byte x 22.0 -char vera_layer_set_textcolor::layer#3 // reg byte x 22.0 -char vera_layer_set_textcolor::layer#4 // reg byte x 22.0 -char vera_layer_set_textcolor::layer#5 // reg byte x 22.0 -char vera_layer_set_textcolor::layer#6 // reg byte x 156.0 -char vera_layer_set_textcolor::old -char vera_layer_set_textcolor::return -void vera_layer_set_tilebase(char layer , char tilebase) -char vera_layer_set_tilebase::$0 // reg byte a 20002.0 -char *vera_layer_set_tilebase::addr -char *vera_layer_set_tilebase::addr#0 // addr zp[2]:37 20002.0 -char vera_layer_set_tilebase::layer -char vera_layer_set_tilebase::layer#0 // reg byte a 1001.0 -char vera_layer_set_tilebase::layer#2 // reg byte a 11002.0 -char vera_layer_set_tilebase::tilebase -char vera_layer_set_tilebase::tilebase#0 // reg byte x 2002.0 -char vera_layer_set_tilebase::tilebase#2 // reg byte x 3667.333333333333 -__constant char vera_layer_textcolor[2] = { WHITE, WHITE } -__constant char *vera_layer_tilebase[2] = { VERA_L0_TILEBASE, VERA_L1_TILEBASE } -__constant unsigned long vera_mapbase_address[2] = { 0, 0 } -__constant char vera_mapbase_bank[2] = { 0, 0 } -__constant unsigned int vera_mapbase_offset[2] = { 0, 0 } -__constant unsigned long vera_tilebase_address[2] = { 0, 0 } -__constant char vera_tilebase_bank[2] = { 0, 0 } -__constant unsigned int vera_tilebase_offset[2] = { 0, 0 } - -zp[1]:168 [ conio_x16_init::line#3 conio_x16_init::line#1 conio_x16_init::line#0 ] -zp[2]:43 [ CONIO_SCREEN_TEXT#12 ] -zp[1]:136 [ CONIO_SCREEN_BANK#12 ] -zp[2]:120 [ main::x#3 main::x#1 ] -zp[1]:126 [ main::color#2 main::color#1 ] -reg byte x [ vera_layer_set_textcolor::layer#6 vera_layer_set_textcolor::layer#1 vera_layer_set_textcolor::layer#2 vera_layer_set_textcolor::layer#3 vera_layer_set_textcolor::layer#4 vera_layer_set_textcolor::layer#5 ] -reg byte a [ vera_layer_set_textcolor::color#6 ] -reg byte x [ vera_layer_set_backcolor::layer#4 vera_layer_set_backcolor::layer#1 vera_layer_set_backcolor::layer#2 vera_layer_set_backcolor::layer#3 ] -reg byte a [ vera_layer_set_backcolor::color#4 ] -reg byte a [ vera_layer_set_mapbase::layer#3 vera_layer_set_mapbase::layer#0 ] -reg byte x [ vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::mapbase#0 ] -reg byte x [ gotoxy::y#10 gotoxy::y#7 gotoxy::y#1 gotoxy::y#2 ] -reg byte x [ vera_layer_get_color::layer#2 vera_layer_get_color::layer#1 vera_layer_get_color::layer#0 ] -reg byte a [ vera_layer_get_color::return#3 vera_layer_get_color::return#1 vera_layer_get_color::return#2 ] -reg byte y [ memcpy_in_vram::dest_bank#2 ] -zp[2]:122 [ vera_layer_mode_tile::mapwidth#10 ] -zp[1]:148 [ vera_layer_mode_tile::layer#10 ] -zp[2]:159 [ vera_layer_mode_tile::mapheight#10 ] -zp[4]:67 [ vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::mapbase_address#0 ] -zp[4]:73 [ vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilebase_address#0 ] -zp[1]:169 [ vera_layer_mode_tile::tilewidth#10 ] -zp[1]:170 [ vera_layer_mode_tile::tileheight#10 ] -reg byte x [ vera_layer_mode_tile::config#25 vera_layer_mode_tile::config#21 vera_layer_mode_tile::config#10 vera_layer_mode_tile::config#11 vera_layer_mode_tile::config#12 ] -reg byte x [ vera_layer_mode_tile::tilebase#10 vera_layer_mode_tile::tilebase#12 vera_layer_mode_tile::tilebase#1 vera_layer_mode_tile::tilebase#3 vera_layer_mode_tile::tilebase#5 ] -reg byte x [ clrscr::l#2 clrscr::l#1 ] -zp[2]:112 [ clrscr::line_text#2 clrscr::line_text#1 clrscr::line_text#0 ] -reg byte y [ clrscr::c#2 clrscr::c#1 ] -zp[2]:77 [ printf_str::s#8 printf_str::s#9 printf_str::s#0 ] -zp[2]:103 [ bitmap_init::x#10 bitmap_init::x#1 ] -zp[2]:71 [ bitmap_init::y#2 bitmap_init::y#1 ] -zp[4]:106 [ bitmap_init::yoffs#2 bitmap_init::yoffs#0 bitmap_init::yoffs#1 ] -zp[2]:10 [ bitmap_line::x1#10 bitmap_line::x1#0 bitmap_line::x1#1 memcpy_in_vram::dest#2 memcpy_in_vram::dest#0 insertup::start#0 insertup::line#0 ] -zp[2]:8 [ bitmap_line::y0#10 bitmap_line::y0#0 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 memcpy_in_vram::num#3 memcpy_in_vram::num#0 ] -reg byte x [ bitmap_line::c#10 bitmap_line::c#0 bitmap_line::c#1 ] -zp[2]:53 [ rand_state#13 rand_state#23 rand_state#14 rand_state#0 rand_state#1 ] -zp[2]:143 [ modr16u::divisor#4 ] -reg byte a [ vera_layer_set_config::layer#2 vera_layer_set_config::layer#0 ] -reg byte x [ vera_layer_set_config::config#2 vera_layer_set_config::config#0 ] -reg byte a [ vera_layer_set_tilebase::layer#2 vera_layer_set_tilebase::layer#0 ] -reg byte x [ vera_layer_set_tilebase::tilebase#2 vera_layer_set_tilebase::tilebase#0 ] -reg byte x [ vera_display_get_hscale::return#0 vera_display_get_hscale::s#2 vera_display_get_hscale::s#1 ] -reg byte x [ vera_display_get_vscale::return#0 vera_display_get_vscale::s#2 vera_display_get_vscale::s#1 ] -zp[2]:2 [ mul16u::a#2 mul16u::a#0 mul16u::a#1 modr16u::dividend#4 modr16u::dividend#0 modr16u::dividend#1 modr16u::dividend#2 modr16u::dividend#3 divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 bitmap_line::y1#10 bitmap_line::y1#0 memcpy_in_vram::i#2 memcpy_in_vram::i#1 ] -zp[2]:24 [ bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 ] -zp[2]:34 [ divr16u::rem#4 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 bitmap_line::xd#2 bitmap_line::xd#1 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#1 bitmap_line_xdyi::xd#0 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#1 bitmap_line_xdyd::xd#0 ] -zp[2]:39 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 bitmap_line::yd#2 bitmap_line::yd#11 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#1 bitmap_line_xdyi::yd#0 ] -reg byte x [ divr16u::i#2 divr16u::i#1 ] -reg byte x [ insertup::i#2 insertup::i#1 ] -reg byte x [ bitmap_plot::c#0 bitmap_plot::$3 bitmap_plot::c#5 bitmap_plot::c#2 bitmap_plot::c#1 bitmap_plot::c#4 bitmap_plot::c#3 ] -zp[2]:4 [ clearline::c#2 clearline::c#1 bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 bitmap_plot::y#4 bitmap_plot::y#1 bitmap_plot::y#0 bitmap_plot::y#3 bitmap_plot::y#2 bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] -zp[1]:36 [ conio_screen_width ] -zp[1]:49 [ conio_screen_height ] -zp[1]:48 [ conio_screen_layer ] -zp[2]:165 [ conio_width ] -zp[2]:51 [ conio_height ] -zp[1]:45 [ conio_rowshift ] -zp[2]:46 [ conio_rowskip ] -zp[4]:172 [ __bitmap_address ] -zp[1]:150 [ __bitmap_layer ] -zp[1]:176 [ __bitmap_hscale ] -zp[1]:177 [ __bitmap_vscale ] -zp[1]:167 [ __bitmap_color_depth ] -zp[1]:105 [ cputc::c#0 ] -reg byte a [ vera_layer_get_color::return#0 ] -reg byte x [ cputc::color#0 ] -reg byte a [ cputc::$15 ] -reg byte a [ cputc::$2 ] -reg byte a [ cputc::$4 ] -reg byte a [ cputc::$5 ] -reg byte a [ cputc::$6 ] -reg byte a [ cputc::scroll_enable#0 ] -zp[2]:41 [ cputc::$16 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 bitmap_line::yd#1 bitmap_line::yd#10 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#1 bitmap_line_xdyd::yd#0 ] -reg byte a [ kbhit::return#2 ] -reg byte a [ main::$30 ] -reg byte a [ kbhit::return#3 ] -reg byte a [ main::$43 ] -zp[2]:110 [ rand::return#2 rand::return#0 rand::return#3 rand::return#10 rand::return#11 rand::return#12 main::$40 ] -zp[2]:118 [ modr16u::return#2 modr16u::return#0 modr16u::return#3 modr16u::return#4 modr16u::return#10 ] -reg byte a [ screensize::hscale#0 ] -reg byte a [ screensize::$1 ] -reg byte a [ screensize::vscale#0 ] -reg byte a [ screensize::$3 ] -reg byte x [ vera_layer_get_mapbase_bank::layer#0 ] -reg byte a [ vera_layer_get_mapbase_bank::return#2 ] -zp[1]:171 [ CONIO_SCREEN_BANK#15 ] -reg byte a [ vera_layer_get_mapbase_offset::layer#0 ] -zp[2]:141 [ vera_layer_get_mapbase_offset::return#2 vera_layer_get_mapbase_offset::return#0 ] -zp[2]:178 [ CONIO_SCREEN_TEXT#17 ] -reg byte a [ screenlayer::vera_layer_get_width1_layer#0 ] -reg byte a [ screenlayer::vera_layer_get_width1_$2 ] -zp[2]:151 [ screenlayer::vera_layer_get_width1_config#0 ] -reg byte a [ screenlayer::vera_layer_get_width1_$0 ] -reg byte a [ screenlayer::vera_layer_get_width1_$1 ] -reg byte a [ screenlayer::vera_layer_get_width1_$3 ] -zp[2]:137 [ screenlayer::vera_layer_get_width1_return#0 screenlayer::vera_layer_get_width1_return#1 screenlayer::$2 ] -reg byte x [ vera_layer_get_rowshift::layer#0 ] -reg byte a [ vera_layer_get_rowshift::return#2 ] -reg byte a [ screenlayer::$3 ] -reg byte a [ vera_layer_get_rowskip::layer#0 ] -zp[2]:127 [ vera_layer_get_rowskip::return#2 screenlayer::$4 vera_layer_get_rowskip::return#0 ] -reg byte a [ screenlayer::vera_layer_get_height1_layer#0 ] -reg byte a [ screenlayer::vera_layer_get_height1_$2 ] -zp[2]:153 [ screenlayer::vera_layer_get_height1_config#0 ] -reg byte a [ screenlayer::vera_layer_get_height1_$0 ] -reg byte a [ screenlayer::vera_layer_get_height1_$1 ] -reg byte a [ screenlayer::vera_layer_get_height1_$3 ] -zp[2]:139 [ screenlayer::vera_layer_get_height1_return#0 screenlayer::vera_layer_get_height1_return#1 screenlayer::$5 ] -reg byte a [ vera_layer_set_mapbase::$0 ] -reg byte a [ gotoxy::$5 ] -reg byte a [ vera_layer_get_color::$3 ] -reg byte a [ vera_layer_get_color::$0 ] -reg byte a [ vera_layer_get_color::$1 ] -reg byte a [ cputln::$2 ] -zp[2]:6 [ cputln::temp#0 cputln::temp#1 vera_layer_get_color::addr#0 bitmap_line::x0#10 bitmap_line::x0#0 bitmap_line::x0#1 bitmap_line_ydxi::x#3 bitmap_line_ydxi::x#5 bitmap_line_ydxi::x#1 bitmap_line_ydxi::x#0 bitmap_line_ydxi::x#6 bitmap_line_ydxi::x#2 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#1 bitmap_line_xdyi::x1#0 bitmap_line_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#1 bitmap_line_xdyd::x1#0 memcpy_in_vram::src#2 memcpy_in_vram::src#3 memcpy_in_vram::src#0 ] -reg byte a [ cputln::$3 ] -reg byte a [ memcpy_in_vram::$0 ] -reg byte a [ memcpy_in_vram::$1 ] -reg byte a [ memcpy_in_vram::$3 ] -reg byte a [ memcpy_in_vram::$4 ] -reg byte a [ memcpy_in_vram::$5 ] -reg byte a [ vera_layer_mode_tile::$14 ] -zp[2]:124 [ vera_layer_mode_tile::$1 ] -zp[1]:149 [ vera_layer_mode_tile::$17 ] -reg byte a [ vera_layer_mode_tile::$2 ] -zp[1]:147 [ vera_layer_mode_tile::$18 ] -reg byte x [ vera_layer_mode_tile::mapbase#0 ] -zp[2]:79 [ vera_layer_mode_tile::$6 ] -reg byte a [ vera_layer_mode_tile::$7 ] -reg byte a [ vera_layer_mode_tile::tilebase#0 ] -reg byte a [ vera_layer_mode_tile::$13 ] -reg byte a [ vera_layer_mode_tile::$12 ] -reg byte a [ vera_layer_mode_tile::$11 ] -reg byte x [ vera_layer_get_backcolor::layer#0 ] -reg byte a [ vera_layer_get_backcolor::return#0 ] -reg byte a [ clrscr::$0 ] -zp[1]:135 [ clrscr::$1 clrscr::color#0 ] -reg byte x [ vera_layer_get_textcolor::layer#0 ] -reg byte a [ vera_layer_get_textcolor::return#0 ] -reg byte a [ clrscr::$2 ] -reg byte a [ clrscr::$9 ] -reg byte a [ clrscr::$5 ] -reg byte a [ clrscr::$6 ] -reg byte a [ clrscr::$7 ] -reg byte a [ printf_str::c#1 ] -reg byte a [ bitmap_init::vera_layer_get_color_depth1_layer#0 ] -reg byte a [ bitmap_init::vera_layer_get_color_depth1_$1 ] -zp[2]:155 [ bitmap_init::vera_layer_get_color_depth1_config#0 ] -reg byte a [ bitmap_init::vera_layer_get_color_depth1_$0 ] -reg byte a [ bitmap_init::vera_layer_get_color_depth1_return#0 ] -reg byte a [ bitmap_init::vera_layer_get_color_depth1_return#1 ] -reg byte a [ bitmap_init::$0 ] -reg byte x [ vera_display_get_hscale::return#2 ] -reg byte x [ bitmap_init::$1 ] -reg byte x [ vera_display_get_vscale::return#2 ] -reg byte x [ bitmap_init::$2 ] -zp[2]:129 [ bitmap_init::$7 ] -zp[2]:55 [ bitmap_init::$23 bitmap_init::$29 ] -zp[2]:81 [ bitmap_init::$30 ] -zp[2]:83 [ bitmap_init::$31 ] -zp[2]:131 [ bitmap_init::$10 ] -zp[2]:57 [ bitmap_init::$24 bitmap_init::$32 ] -zp[2]:85 [ bitmap_init::$33 ] -zp[2]:87 [ bitmap_init::$34 ] -zp[2]:133 [ bitmap_init::$13 ] -zp[2]:59 [ bitmap_init::$25 bitmap_init::$35 ] -zp[2]:89 [ bitmap_init::$36 ] -zp[2]:91 [ bitmap_init::$37 ] -zp[2]:61 [ bitmap_init::$26 bitmap_init::$38 ] -zp[2]:93 [ bitmap_init::$39 ] -zp[2]:95 [ bitmap_init::$40 ] -reg byte a [ bitmap_init::$3 ] -reg byte a [ bitmap_init::$4 ] -reg byte a [ bitmap_init::$27 ] -zp[2]:163 [ bitmap_init::hdelta#0 ] -zp[2]:63 [ bitmap_init::$28 bitmap_init::$41 ] -reg byte a [ bitmap_clear::$6 ] -zp[2]:161 [ bitmap_clear::vdelta#0 mul16u::b#0 ] -reg byte a [ bitmap_clear::$0 ] -reg byte a [ bitmap_clear::$1 ] -reg byte a [ bitmap_clear::$7 ] -zp[2]:157 [ bitmap_clear::hdelta#0 ] -zp[4]:114 [ mul16u::return#0 bitmap_clear::count#0 memset_vram::num#0 ] -reg byte x [ bitmap_clear::vbank#0 ] -zp[2]:145 [ bitmap_clear::vdest#0 memset_vram::vdest#0 ] -reg byte x [ memset_vram::vbank#0 ] -zp[1]:50 [ kbhit::ch ] -reg byte a [ kbhit::return#0 ] -reg byte a [ kbhit::return#1 ] -zp[2]:97 [ rand::$0 ] -zp[2]:99 [ rand::$1 ] -zp[2]:101 [ rand::$2 ] -reg byte a [ vera_layer_get_mapbase_bank::return#0 ] -reg byte a [ vera_layer_get_mapbase_offset::$0 ] -reg byte a [ vera_layer_get_rowshift::return#0 ] -reg byte a [ vera_layer_get_rowskip::$0 ] -reg byte a [ vera_layer_set_config::$0 ] -reg byte a [ vera_layer_set_tilebase::$0 ] -zp[2]:37 [ vera_layer_set_tilebase::addr#0 vera_layer_set_config::addr#0 vera_layer_set_text_color_mode::addr#0 gotoxy::$6 gotoxy::line_offset#0 vera_layer_set_mapbase::addr#0 ] -reg byte a [ vera_layer_get_backcolor::return#1 ] -reg byte a [ vera_layer_get_textcolor::return#1 ] -reg byte a [ mul16u::$1 ] -reg byte a [ memset_vram::$0 ] -reg byte a [ memset_vram::$1 ] -reg byte a [ memset_vram::$2 ] -zp[2]:30 [ bitmap_line_ydxi::$6 divr16u::divisor#0 cputc::conio_addr#0 cputc::conio_addr#1 bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#2 bitmap_plot::x#4 bitmap_plot::x#1 bitmap_plot::x#0 bitmap_plot::x#3 bitmap_plot::x#2 bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#2 ] -reg byte a [ divr16u::$1 ] -reg byte a [ divr16u::$2 ] -zp[2]:65 [ rem16u#0 ] -zp[1]:33 [ insertup::cy#0 bitmap_line_xdyi::c#3 bitmap_line_xdyi::c#1 bitmap_line_xdyi::c#0 bitmap_init::bitmask#13 bitmap_init::bitmask#3 bitmap_init::bitmask#12 bitmap_init::bitmask#11 bitmap_init::bitmask#10 bitmap_init::bitmask#0 bitmap_init::bitmask#16 bitmap_init::bitmask#1 bitmap_init::bitmask#2 bitmap_init::bitmask#4 ] -zp[1]:32 [ insertup::width#0 bitmap_line_xdyd::c#3 bitmap_line_xdyd::c#1 bitmap_line_xdyd::c#0 bitmap_line_ydxd::c#3 bitmap_line_ydxd::c#0 bitmap_line_ydxd::c#1 bitmap_line_ydxi::c#3 bitmap_line_ydxi::c#1 bitmap_line_ydxi::c#0 bitmap_init::bitshift#13 bitmap_init::bitshift#3 bitmap_init::bitshift#12 bitmap_init::bitshift#11 bitmap_init::bitshift#10 bitmap_init::bitshift#0 bitmap_init::bitshift#14 bitmap_init::bitshift#1 bitmap_init::bitshift#2 bitmap_init::bitshift#4 ] -reg byte a [ insertup::$3 ] -zp[4]:26 [ bitmap_plot::plot_x#0 bitmap_plot::vera_vram_address01_bankaddr#0 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] -zp[2]:12 [ bitmap_plot::$10 bitmap_plot::$13 ] -zp[4]:16 [ bitmap_plot::plot_y#0 memset_vram::i#2 memset_vram::i#1 mul16u::res#2 mul16u::res#6 mul16u::res#1 ] -zp[2]:20 [ bitmap_plot::$14 ] -reg byte a [ bitmap_plot::bitshift#0 ] -reg byte a [ bitmap_plot::vera_vram_address01_$0 ] -reg byte a [ bitmap_plot::vera_vram_address01_$1 ] -reg byte a [ bitmap_plot::vera_vram_address01_$3 ] -zp[2]:22 [ bitmap_plot::$15 ] -reg byte a [ bitmap_plot::$6 ] -reg byte a [ bitmap_plot::$7 ] -reg byte a [ bitmap_plot::$8 ] -reg byte a [ clearline::$5 ] -zp[2]:14 [ clearline::addr#0 bitmap_line_xdyd::$6 bitmap_line_ydxd::$6 bitmap_line_xdyi::$6 bitmap_plot::$9 bitmap_plot::$12 ] -reg byte a [ clearline::$1 ] -reg byte a [ clearline::$2 ] -reg byte a [ vera_layer_get_color::return#4 ] -reg byte x [ clearline::color#0 ] - - -FINAL ASSEMBLER -Score: 590386 - - // File Comments -// Example program for the Commander X16. -// Demonstrates the usage of the VERA tile map modes and layering. - // Upstart -.cpu _65c02 - // Commodore 64 PRG executable file -.file [name="bitmap_8bpp_320_x_240.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(__start) - // Global Constants & labels - /// The colors of the CX16 - .const BLACK = 0 - .const WHITE = 1 - .const BLUE = 6 - .const YELLOW = 7 - .const VERA_INC_1 = $10 - .const VERA_ADDRSEL = 1 - .const VERA_LAYER1_ENABLE = $20 - .const VERA_LAYER0_ENABLE = $10 - .const VERA_LAYER_WIDTH_64 = $10 - .const VERA_LAYER_WIDTH_128 = $20 - .const VERA_LAYER_WIDTH_256 = $30 - .const VERA_LAYER_WIDTH_MASK = $30 - .const VERA_LAYER_HEIGHT_64 = $40 - .const VERA_LAYER_HEIGHT_128 = $80 - .const VERA_LAYER_HEIGHT_256 = $c0 - .const VERA_LAYER_HEIGHT_MASK = $c0 - /// Bit 0-1: Color Depth (0: 1 bpp, 1: 2 bpp, 2: 4 bpp, 3: 8 bpp) - .const VERA_LAYER_COLOR_DEPTH_1BPP = 0 - .const VERA_LAYER_COLOR_DEPTH_8BPP = 3 - .const VERA_LAYER_COLOR_DEPTH_MASK = 3 - .const VERA_LAYER_CONFIG_MODE_BITMAP = 4 - .const VERA_LAYER_CONFIG_256C = 8 - .const VERA_TILEBASE_WIDTH_16 = 1 - .const VERA_TILEBASE_HEIGHT_16 = 2 - .const VERA_LAYER_TILEBASE_MASK = $fc - .const SIZEOF_POINTER = 2 - .const STACK_BASE = $103 - /// $9F20 VRAM Address (7:0) - .label VERA_ADDRX_L = $9f20 - /// $9F21 VRAM Address (15:8) - .label VERA_ADDRX_M = $9f21 - /// $9F22 VRAM Address (7:0) - /// Bit 4-7: Address Increment The following is the amount incremented per value value:increment - /// 0:0, 1:1, 2:2, 3:4, 4:8, 5:16, 6:32, 7:64, 8:128, 9:256, 10:512, 11:40, 12:80, 13:160, 14:320, 15:640 - /// Bit 3: DECR Setting the DECR bit, will decrement instead of increment by the value set by the 'Address Increment' field. - /// Bit 0: VRAM Address (16) - .label VERA_ADDRX_H = $9f22 - /// $9F23 DATA0 VRAM Data port 0 - .label VERA_DATA0 = $9f23 - /// $9F24 DATA1 VRAM Data port 1 - .label VERA_DATA1 = $9f24 - /// $9F25 CTRL Control - /// Bit 7: Reset - /// Bit 1: DCSEL - /// Bit 2: ADDRSEL - .label VERA_CTRL = $9f25 - /// $9F29 DC_VIDEO (DCSEL=0) - /// Bit 7: Current Field Read-only bit which reflects the active interlaced field in composite and RGB modes. (0: even, 1: odd) - /// Bit 6: Sprites Enable Enable output from the Sprites renderer - /// Bit 5: Layer1 Enable Enable output from the Layer1 renderer - /// Bit 4: Layer0 Enable Enable output from the Layer0 renderer - /// Bit 2: Chroma Disable Setting 'Chroma Disable' disables output of chroma in NTSC composite mode and will give a better picture on a monochrome display. (Setting this bit will also disable the chroma output on the S-video output.) - /// Bit 0-1: Output Mode 0: Video disabled, 1: VGA output, 2: NTSC composite, 3: RGB interlaced, composite sync (via VGA connector) - .label VERA_DC_VIDEO = $9f29 - /// $9F2A DC_HSCALE (DCSEL=0) Active Display H-Scale - .label VERA_DC_HSCALE = $9f2a - /// $9F2B DC_VSCALE (DCSEL=0) Active Display V-Scale - .label VERA_DC_VSCALE = $9f2b - /// $9F2D L0_CONFIG Layer 0 Configuration - .label VERA_L0_CONFIG = $9f2d - /// $9F2E L0_MAPBASE Layer 0 Map Base Address (16:9) - .label VERA_L0_MAPBASE = $9f2e - /// Bit 0: Tile Width (0:8 pixels, 1:16 pixels) - .label VERA_L0_TILEBASE = $9f2f - /// $9F34 L1_CONFIG Layer 1 Configuration - .label VERA_L1_CONFIG = $9f34 - /// $9F35 L1_MAPBASE Layer 1 Map Base Address (16:9) - .label VERA_L1_MAPBASE = $9f35 - /// $9F36 L1_TILEBASE Layer 1 Tile Base - /// Bit 2-7: Tile Base Address (16:11) - /// Bit 1: Tile Height (0:8 pixels, 1:16 pixels) - /// Bit 0: Tile Width (0:8 pixels, 1:16 pixels) - .label VERA_L1_TILEBASE = $9f36 - // Variable holding the screen width; - .label conio_screen_width = $24 - // Variable holding the screen height; - .label conio_screen_height = $31 - // Variable holding the screen layer on the VERA card with which conio interacts; - .label conio_screen_layer = $30 - // Variables holding the current map width and map height of the layer. - .label conio_width = $a5 - .label conio_height = $33 - .label conio_rowshift = $2d - .label conio_rowskip = $2e - .label __bitmap_address = $ac - .label __bitmap_layer = $96 - .label __bitmap_hscale = $b0 - .label __bitmap_vscale = $b1 - .label __bitmap_color_depth = $a7 - // The random state variable - .label rand_state = $35 - // Remainder after unsigned 16-bit division - .label rem16u = $41 - // The screen width - // The screen height - // The text screen base address, which is a 16:0 bit value in VERA VRAM. - // That is 128KB addressable space, thus 17 bits in total. - // CONIO_SCREEN_TEXT contains bits 15:0 of the address. - // CONIO_SCREEN_BANK contains bit 16, the the 64K memory bank in VERA VRAM (the upper 17th bit). - // !!! note that these values are not const for the cx16! - // This conio implements the two layers of VERA, which can be layer 0 or layer 1. - // Configuring conio to output to a different layer, will change these fields to the address base - // configured using VERA_L0_MAPBASE = 0x9f2e or VERA_L1_MAPBASE = 0x9f35. - // Using the function setscreenlayer(layer) will re-calculate using CONIO_SCREEN_TEXT and CONIO_SCREEN_BASE - // based on the values of VERA_L0_MAPBASE or VERA_L1_MAPBASE, mapping the base address of the selected layer. - // The function setscreenlayermapbase(layer,mapbase) allows to configure bit 16:9 of the - // mapbase address of the time map in VRAM of the selected layer VERA_L0_MAPBASE or VERA_L1_MAPBASE. - .label CONIO_SCREEN_TEXT = $2b - .label CONIO_SCREEN_BANK = $88 - .label CONIO_SCREEN_BANK_1 = $ab - // The screen width - // The screen height - // The text screen base address, which is a 16:0 bit value in VERA VRAM. - // That is 128KB addressable space, thus 17 bits in total. - // CONIO_SCREEN_TEXT contains bits 15:0 of the address. - // CONIO_SCREEN_BANK contains bit 16, the the 64K memory bank in VERA VRAM (the upper 17th bit). - // !!! note that these values are not const for the cx16! - // This conio implements the two layers of VERA, which can be layer 0 or layer 1. - // Configuring conio to output to a different layer, will change these fields to the address base - // configured using VERA_L0_MAPBASE = 0x9f2e or VERA_L1_MAPBASE = 0x9f35. - // Using the function setscreenlayer(layer) will re-calculate using CONIO_SCREEN_TEXT and CONIO_SCREEN_BASE - // based on the values of VERA_L0_MAPBASE or VERA_L1_MAPBASE, mapping the base address of the selected layer. - // The function setscreenlayermapbase(layer,mapbase) allows to configure bit 16:9 of the - // mapbase address of the time map in VRAM of the selected layer VERA_L0_MAPBASE or VERA_L1_MAPBASE. - .label CONIO_SCREEN_TEXT_1 = $b2 -.segment Code - // __start -__start: { - // __start::__init1 - // __ma unsigned byte conio_screen_width = 0 - // [1] conio_screen_width = 0 -- vbuz1=vbuc1 - lda #0 - sta.z conio_screen_width - // __ma unsigned byte conio_screen_height = 0 - // [2] conio_screen_height = 0 -- vbuz1=vbuc1 - sta.z conio_screen_height - // __ma unsigned byte conio_screen_layer = 1 - // [3] conio_screen_layer = 1 -- vbuz1=vbuc1 - lda #1 - sta.z conio_screen_layer - // __ma word conio_width = 0 - // [4] conio_width = 0 -- vwuz1=vwuc1 - lda #<0 - sta.z conio_width - sta.z conio_width+1 - // __ma word conio_height = 0 - // [5] conio_height = 0 -- vwuz1=vwuc1 - sta.z conio_height - sta.z conio_height+1 - // __ma byte conio_rowshift = 0 - // [6] conio_rowshift = 0 -- vbuz1=vbuc1 - sta.z conio_rowshift - // __ma word conio_rowskip = 0 - // [7] conio_rowskip = 0 -- vwuz1=vwuc1 - sta.z conio_rowskip - sta.z conio_rowskip+1 - // __ma dword __bitmap_address = 0 - // [8] __bitmap_address = 0 -- vduz1=vduc1 - sta.z __bitmap_address - sta.z __bitmap_address+1 - lda #<0>>$10 - sta.z __bitmap_address+2 - lda #>0>>$10 - sta.z __bitmap_address+3 - // __ma byte __bitmap_layer = 0 - // [9] __bitmap_layer = 0 -- vbuz1=vbuc1 - lda #0 - sta.z __bitmap_layer - // __ma byte __bitmap_hscale = 0 - // [10] __bitmap_hscale = 0 -- vbuz1=vbuc1 - sta.z __bitmap_hscale - // __ma byte __bitmap_vscale = 0 - // [11] __bitmap_vscale = 0 -- vbuz1=vbuc1 - sta.z __bitmap_vscale - // __ma byte __bitmap_color_depth = 0 - // [12] __bitmap_color_depth = 0 -- vbuz1=vbuc1 - sta.z __bitmap_color_depth - // #pragma constructor_for(conio_x16_init, cputc, clrscr, cscroll) - // [13] call conio_x16_init - jsr conio_x16_init - // [14] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - // __start::@1 - // [15] call main - // [70] phi from __start::@1 to main [phi:__start::@1->main] - jsr main - // __start::@return - // [16] return - rts -} - // conio_x16_init -// Set initial cursor position -conio_x16_init: { - // Position cursor at current line - .label BASIC_CURSOR_LINE = $d6 - .label line = $a8 - // char line = *BASIC_CURSOR_LINE - // [17] conio_x16_init::line#0 = *conio_x16_init::BASIC_CURSOR_LINE -- vbuz1=_deref_pbuc1 - lda.z BASIC_CURSOR_LINE - sta.z line - // vera_layer_mode_text(1,(dword)0x00000,(dword)0x0F800,128,64,8,8,16) - // [18] call vera_layer_mode_text - // [178] phi from conio_x16_init to vera_layer_mode_text [phi:conio_x16_init->vera_layer_mode_text] - jsr vera_layer_mode_text - // [19] phi from conio_x16_init to conio_x16_init::@3 [phi:conio_x16_init->conio_x16_init::@3] - // conio_x16_init::@3 - // screensize(&conio_screen_width, &conio_screen_height) - // [20] call screensize - jsr screensize - // [21] phi from conio_x16_init::@3 to conio_x16_init::@4 [phi:conio_x16_init::@3->conio_x16_init::@4] - // conio_x16_init::@4 - // screenlayer(1) - // [22] call screenlayer - jsr screenlayer - // [23] phi from conio_x16_init::@4 to conio_x16_init::@5 [phi:conio_x16_init::@4->conio_x16_init::@5] - // conio_x16_init::@5 - // vera_layer_set_textcolor(1, WHITE) - // [24] call vera_layer_set_textcolor - // [230] phi from conio_x16_init::@5 to vera_layer_set_textcolor [phi:conio_x16_init::@5->vera_layer_set_textcolor] - // [230] phi vera_layer_set_textcolor::color#6 = WHITE [phi:conio_x16_init::@5->vera_layer_set_textcolor#0] -- vbuaa=vbuc1 - lda #WHITE - // [230] phi vera_layer_set_textcolor::layer#6 = 1 [phi:conio_x16_init::@5->vera_layer_set_textcolor#1] -- vbuxx=vbuc1 - ldx #1 - jsr vera_layer_set_textcolor - // [25] phi from conio_x16_init::@5 to conio_x16_init::@6 [phi:conio_x16_init::@5->conio_x16_init::@6] - // conio_x16_init::@6 - // vera_layer_set_backcolor(1, BLUE) - // [26] call vera_layer_set_backcolor - // [233] phi from conio_x16_init::@6 to vera_layer_set_backcolor [phi:conio_x16_init::@6->vera_layer_set_backcolor] - // [233] phi vera_layer_set_backcolor::color#4 = BLUE [phi:conio_x16_init::@6->vera_layer_set_backcolor#0] -- vbuaa=vbuc1 - lda #BLUE - // [233] phi vera_layer_set_backcolor::layer#4 = 1 [phi:conio_x16_init::@6->vera_layer_set_backcolor#1] -- vbuxx=vbuc1 - ldx #1 - jsr vera_layer_set_backcolor - // [27] phi from conio_x16_init::@6 to conio_x16_init::@7 [phi:conio_x16_init::@6->conio_x16_init::@7] - // conio_x16_init::@7 - // vera_layer_set_mapbase(0,0x20) - // [28] call vera_layer_set_mapbase - // [236] phi from conio_x16_init::@7 to vera_layer_set_mapbase [phi:conio_x16_init::@7->vera_layer_set_mapbase] - // [236] phi vera_layer_set_mapbase::mapbase#3 = $20 [phi:conio_x16_init::@7->vera_layer_set_mapbase#0] -- vbuxx=vbuc1 - ldx #$20 - // [236] phi vera_layer_set_mapbase::layer#3 = 0 [phi:conio_x16_init::@7->vera_layer_set_mapbase#1] -- vbuaa=vbuc1 - lda #0 - jsr vera_layer_set_mapbase - // [29] phi from conio_x16_init::@7 to conio_x16_init::@8 [phi:conio_x16_init::@7->conio_x16_init::@8] - // conio_x16_init::@8 - // vera_layer_set_mapbase(1,0x00) - // [30] call vera_layer_set_mapbase - // [236] phi from conio_x16_init::@8 to vera_layer_set_mapbase [phi:conio_x16_init::@8->vera_layer_set_mapbase] - // [236] phi vera_layer_set_mapbase::mapbase#3 = 0 [phi:conio_x16_init::@8->vera_layer_set_mapbase#0] -- vbuxx=vbuc1 - ldx #0 - // [236] phi vera_layer_set_mapbase::layer#3 = 1 [phi:conio_x16_init::@8->vera_layer_set_mapbase#1] -- vbuaa=vbuc1 - lda #1 - jsr vera_layer_set_mapbase - // conio_x16_init::@9 - // if(line>=CONIO_HEIGHT) - // [31] if(conio_x16_init::line#0conio_x16_init::@1] - // [33] phi conio_x16_init::line#3 = conio_x16_init::line#1 [phi:conio_x16_init::@2/conio_x16_init::@9->conio_x16_init::@1#0] -- register_copy - // conio_x16_init::@1 - __b1: - // gotoxy(0, line) - // [34] gotoxy::y#1 = conio_x16_init::line#3 -- vbuxx=vbuz1 - ldx.z line - // [35] call gotoxy - // [241] phi from conio_x16_init::@1 to gotoxy [phi:conio_x16_init::@1->gotoxy] - // [241] phi gotoxy::y#7 = gotoxy::y#1 [phi:conio_x16_init::@1->gotoxy#0] -- register_copy - jsr gotoxy - // conio_x16_init::@return - // } - // [36] return - rts -} - // cputc -// Output one character at the current cursor position -// Moves the cursor forward. Scrolls the entire screen if needed -// void cputc(__zp($69) char c) -cputc: { - .const OFFSET_STACK_C = 0 - .label __16 = $29 - .label c = $69 - .label conio_addr = $1e - // [38] cputc::c#0 = stackidx(char,cputc::OFFSET_STACK_C) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_C,x - sta.z c - // char color = vera_layer_get_color( conio_screen_layer) - // [39] vera_layer_get_color::layer#0 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [40] call vera_layer_get_color - // [254] phi from cputc to vera_layer_get_color [phi:cputc->vera_layer_get_color] - // [254] phi vera_layer_get_color::layer#2 = vera_layer_get_color::layer#0 [phi:cputc->vera_layer_get_color#0] -- register_copy - jsr vera_layer_get_color - // char color = vera_layer_get_color( conio_screen_layer) - // [41] vera_layer_get_color::return#0 = vera_layer_get_color::return#3 - // cputc::@7 - // [42] cputc::color#0 = vera_layer_get_color::return#0 -- vbuxx=vbuaa - tax - // char* conio_addr = CONIO_SCREEN_TEXT + conio_line_text[conio_screen_layer] - // [43] cputc::$15 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [44] cputc::conio_addr#0 = CONIO_SCREEN_TEXT#12 + conio_line_text[cputc::$15] -- pbuz1=pbuz2_plus_pwuc1_derefidx_vbuaa - tay - clc - lda.z CONIO_SCREEN_TEXT - adc conio_line_text,y - sta.z conio_addr - lda.z CONIO_SCREEN_TEXT+1 - adc conio_line_text+1,y - sta.z conio_addr+1 - // conio_cursor_x[conio_screen_layer] << 1 - // [45] cputc::$2 = conio_cursor_x[conio_screen_layer] << 1 -- vbuaa=pbuc1_derefidx_vbuz1_rol_1 - ldy.z conio_screen_layer - lda conio_cursor_x,y - asl - // conio_addr += conio_cursor_x[conio_screen_layer] << 1 - // [46] cputc::conio_addr#1 = cputc::conio_addr#0 + cputc::$2 -- pbuz1=pbuz1_plus_vbuaa - clc - adc.z conio_addr - sta.z conio_addr - bcc !+ - inc.z conio_addr+1 - !: - // if(c=='\n') - // [47] if(cputc::c#0==' ') goto cputc::@1 -- vbuz1_eq_vbuc1_then_la1 - lda #'\n' - cmp.z c - beq __b1 - // cputc::@2 - // *VERA_CTRL &= ~VERA_ADDRSEL - // [48] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // BYTE0(conio_addr) - // [49] cputc::$4 = byte0 cputc::conio_addr#1 -- vbuaa=_byte0_pbuz1 - lda.z conio_addr - // *VERA_ADDRX_L = BYTE0(conio_addr) - // [50] *VERA_ADDRX_L = cputc::$4 -- _deref_pbuc1=vbuaa - // Set address - sta VERA_ADDRX_L - // BYTE1(conio_addr) - // [51] cputc::$5 = byte1 cputc::conio_addr#1 -- vbuaa=_byte1_pbuz1 - lda.z conio_addr+1 - // *VERA_ADDRX_M = BYTE1(conio_addr) - // [52] *VERA_ADDRX_M = cputc::$5 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // CONIO_SCREEN_BANK | VERA_INC_1 - // [53] cputc::$6 = CONIO_SCREEN_BANK#12 | VERA_INC_1 -- vbuaa=vbuz1_bor_vbuc1 - lda #VERA_INC_1 - ora.z CONIO_SCREEN_BANK - // *VERA_ADDRX_H = CONIO_SCREEN_BANK | VERA_INC_1 - // [54] *VERA_ADDRX_H = cputc::$6 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_H - // *VERA_DATA0 = c - // [55] *VERA_DATA0 = cputc::c#0 -- _deref_pbuc1=vbuz1 - lda.z c - sta VERA_DATA0 - // *VERA_DATA0 = color - // [56] *VERA_DATA0 = cputc::color#0 -- _deref_pbuc1=vbuxx - stx VERA_DATA0 - // conio_cursor_x[conio_screen_layer]++; - // [57] conio_cursor_x[conio_screen_layer] = ++ conio_cursor_x[conio_screen_layer] -- pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 - ldx.z conio_screen_layer - inc conio_cursor_x,x - // byte scroll_enable = conio_scroll_enable[conio_screen_layer] - // [58] cputc::scroll_enable#0 = conio_scroll_enable[conio_screen_layer] -- vbuaa=pbuc1_derefidx_vbuz1 - ldy.z conio_screen_layer - lda conio_scroll_enable,y - // if(scroll_enable) - // [59] if(0!=cputc::scroll_enable#0) goto cputc::@5 -- 0_neq_vbuaa_then_la1 - cmp #0 - bne __b5 - // cputc::@3 - // (unsigned int)conio_cursor_x[conio_screen_layer] == conio_width - // [60] cputc::$16 = (unsigned int)conio_cursor_x[conio_screen_layer] -- vwuz1=_word_pbuc1_derefidx_vbuz2 - lda conio_cursor_x,y - sta.z __16 - lda #0 - sta.z __16+1 - // if((unsigned int)conio_cursor_x[conio_screen_layer] == conio_width) - // [61] if(cputc::$16!=conio_width) goto cputc::@return -- vwuz1_neq_vwuz2_then_la1 - cmp.z conio_width+1 - bne __breturn - lda.z __16 - cmp.z conio_width - bne __breturn - // [62] phi from cputc::@3 to cputc::@4 [phi:cputc::@3->cputc::@4] - // cputc::@4 - // cputln() - // [63] call cputln - jsr cputln - // cputc::@return - __breturn: - // } - // [64] return - rts - // cputc::@5 - __b5: - // if(conio_cursor_x[conio_screen_layer] == CONIO_WIDTH) - // [65] if(conio_cursor_x[conio_screen_layer]!=conio_screen_width) goto cputc::@return -- pbuc1_derefidx_vbuz1_neq_vbuz2_then_la1 - lda.z conio_screen_width - ldy.z conio_screen_layer - cmp conio_cursor_x,y - bne __breturn - // [66] phi from cputc::@5 to cputc::@6 [phi:cputc::@5->cputc::@6] - // cputc::@6 - // cputln() - // [67] call cputln - jsr cputln - rts - // [68] phi from cputc::@7 to cputc::@1 [phi:cputc::@7->cputc::@1] - // cputc::@1 - __b1: - // cputln() - // [69] call cputln - jsr cputln - rts -} - // main -main: { - .label __40 = $6e - .label color = $7e - .label x = $78 - // memcpy_in_vram(1, (char*)0xF000, VERA_INC_1, 0, (char*)0xF800, VERA_INC_1, 256*8) - // [71] call memcpy_in_vram - // Before we configure the bitmap pane into vera memory we need to re-arrange a few things! - // It is better to load all in bank 0, but then there is an issue. - // So the default CX16 character set is located in bank 0, at address 0xF800. - // So we need to move this character set to bank 1, suggested is at address 0xF000. - // The CX16 by default writes textual output to layer 1 in text mode, so we need to - // realign the moved character set to 0xf000 as the new tile base for layer 1. - // We also will need to realign for layer 1 the map base from 0x00000 to 0x14000. - // This is now all easily done with a few statements in the new kickc vera lib ... - // [273] phi from main to memcpy_in_vram [phi:main->memcpy_in_vram] - // [273] phi memcpy_in_vram::num#3 = $100*8 [phi:main->memcpy_in_vram#0] -- vwuz1=vwuc1 - lda #<$100*8 - sta.z memcpy_in_vram.num - lda #>$100*8 - sta.z memcpy_in_vram.num+1 - // [273] phi memcpy_in_vram::dest_bank#2 = 1 [phi:main->memcpy_in_vram#1] -- vbuyy=vbuc1 - ldy #1 - // [273] phi memcpy_in_vram::dest#2 = (void *)(char *) 61440 [phi:main->memcpy_in_vram#2] -- pvoz1=pvoc1 - lda #<$f000 - sta.z memcpy_in_vram.dest - lda #>$f000 - sta.z memcpy_in_vram.dest+1 - // [273] phi memcpy_in_vram::src#2 = (void *)(char *) 63488 [phi:main->memcpy_in_vram#3] -- pvoz1=pvoc1 - lda #<$f800 - sta.z memcpy_in_vram.src - lda #>$f800 - sta.z memcpy_in_vram.src+1 - jsr memcpy_in_vram - // [72] phi from main to main::@12 [phi:main->main::@12] - // main::@12 - // vera_layer_mode_tile(1, 0x14000, 0x1F000, 128, 64, 8, 8, 1) - // [73] call vera_layer_mode_tile - // We copy the 128 character set of 8 bytes each. - // [292] phi from main::@12 to vera_layer_mode_tile [phi:main::@12->vera_layer_mode_tile] - // [292] phi vera_layer_mode_tile::tileheight#10 = 8 [phi:main::@12->vera_layer_mode_tile#0] -- vbuz1=vbuc1 - lda #8 - sta.z vera_layer_mode_tile.tileheight - // [292] phi vera_layer_mode_tile::tilewidth#10 = 8 [phi:main::@12->vera_layer_mode_tile#1] -- vbuz1=vbuc1 - sta.z vera_layer_mode_tile.tilewidth - // [292] phi vera_layer_mode_tile::tilebase_address#10 = $1f000 [phi:main::@12->vera_layer_mode_tile#2] -- vduz1=vduc1 - lda #<$1f000 - sta.z vera_layer_mode_tile.tilebase_address - lda #>$1f000 - sta.z vera_layer_mode_tile.tilebase_address+1 - lda #<$1f000>>$10 - sta.z vera_layer_mode_tile.tilebase_address+2 - lda #>$1f000>>$10 - sta.z vera_layer_mode_tile.tilebase_address+3 - // [292] phi vera_layer_mode_tile::mapbase_address#10 = $14000 [phi:main::@12->vera_layer_mode_tile#3] -- vduz1=vduc1 - lda #<$14000 - sta.z vera_layer_mode_tile.mapbase_address - lda #>$14000 - sta.z vera_layer_mode_tile.mapbase_address+1 - lda #<$14000>>$10 - sta.z vera_layer_mode_tile.mapbase_address+2 - lda #>$14000>>$10 - sta.z vera_layer_mode_tile.mapbase_address+3 - // [292] phi vera_layer_mode_tile::mapheight#10 = $40 [phi:main::@12->vera_layer_mode_tile#4] -- vwuz1=vbuc1 - lda #<$40 - sta.z vera_layer_mode_tile.mapheight - lda #>$40 - sta.z vera_layer_mode_tile.mapheight+1 - // [292] phi vera_layer_mode_tile::layer#10 = 1 [phi:main::@12->vera_layer_mode_tile#5] -- vbuz1=vbuc1 - lda #1 - sta.z vera_layer_mode_tile.layer - // [292] phi vera_layer_mode_tile::mapwidth#10 = $80 [phi:main::@12->vera_layer_mode_tile#6] -- vwuz1=vbuc1 - lda #<$80 - sta.z vera_layer_mode_tile.mapwidth - lda #>$80 - sta.z vera_layer_mode_tile.mapwidth+1 - jsr vera_layer_mode_tile - // [74] phi from main::@12 to main::@13 [phi:main::@12->main::@13] - // main::@13 - // vera_layer_mode_bitmap(0, (dword)0x00000, 320, 8) - // [75] call vera_layer_mode_bitmap - // [353] phi from main::@13 to vera_layer_mode_bitmap [phi:main::@13->vera_layer_mode_bitmap] - jsr vera_layer_mode_bitmap - // [76] phi from main::@13 to main::@14 [phi:main::@13->main::@14] - // main::@14 - // screenlayer(1) - // [77] call screenlayer - jsr screenlayer - // main::textcolor1 - // vera_layer_set_textcolor(conio_screen_layer, color) - // [78] vera_layer_set_textcolor::layer#1 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [79] call vera_layer_set_textcolor - // [230] phi from main::textcolor1 to vera_layer_set_textcolor [phi:main::textcolor1->vera_layer_set_textcolor] - // [230] phi vera_layer_set_textcolor::color#6 = WHITE [phi:main::textcolor1->vera_layer_set_textcolor#0] -- vbuaa=vbuc1 - lda #WHITE - // [230] phi vera_layer_set_textcolor::layer#6 = vera_layer_set_textcolor::layer#1 [phi:main::textcolor1->vera_layer_set_textcolor#1] -- register_copy - jsr vera_layer_set_textcolor - // main::bgcolor1 - // vera_layer_set_backcolor(conio_screen_layer, color) - // [80] vera_layer_set_backcolor::layer#1 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [81] call vera_layer_set_backcolor - // [233] phi from main::bgcolor1 to vera_layer_set_backcolor [phi:main::bgcolor1->vera_layer_set_backcolor] - // [233] phi vera_layer_set_backcolor::color#4 = BLACK [phi:main::bgcolor1->vera_layer_set_backcolor#0] -- vbuaa=vbuc1 - lda #BLACK - // [233] phi vera_layer_set_backcolor::layer#4 = vera_layer_set_backcolor::layer#1 [phi:main::bgcolor1->vera_layer_set_backcolor#1] -- register_copy - jsr vera_layer_set_backcolor - // [82] phi from main::bgcolor1 to main::@6 [phi:main::bgcolor1->main::@6] - // main::@6 - // clrscr() - // [83] call clrscr - jsr clrscr - // [84] phi from main::@6 to main::@15 [phi:main::@6->main::@15] - // main::@15 - // gotoxy(0,25) - // [85] call gotoxy - // [241] phi from main::@15 to gotoxy [phi:main::@15->gotoxy] - // [241] phi gotoxy::y#7 = $19 [phi:main::@15->gotoxy#0] -- vbuxx=vbuc1 - ldx #$19 - jsr gotoxy - // [86] phi from main::@15 to main::@16 [phi:main::@15->main::@16] - // main::@16 - // printf("vera in bitmap mode,\n") - // [87] call printf_str - // [396] phi from main::@16 to printf_str [phi:main::@16->printf_str] - // [396] phi printf_str::s#9 = main::s [phi:main::@16->printf_str#0] -- pbuz1=pbuc1 - lda #s - sta.z printf_str.s+1 - jsr printf_str - // [88] phi from main::@16 to main::@17 [phi:main::@16->main::@17] - // main::@17 - // printf("color depth 8 bits per pixel.\n") - // [89] call printf_str - // [396] phi from main::@17 to printf_str [phi:main::@17->printf_str] - // [396] phi printf_str::s#9 = main::s1 [phi:main::@17->printf_str#0] -- pbuz1=pbuc1 - lda #s1 - sta.z printf_str.s+1 - jsr printf_str - // [90] phi from main::@17 to main::@18 [phi:main::@17->main::@18] - // main::@18 - // printf("in this mode, it is possible to display\n") - // [91] call printf_str - // [396] phi from main::@18 to printf_str [phi:main::@18->printf_str] - // [396] phi printf_str::s#9 = main::s2 [phi:main::@18->printf_str#0] -- pbuz1=pbuc1 - lda #s2 - sta.z printf_str.s+1 - jsr printf_str - // [92] phi from main::@18 to main::@19 [phi:main::@18->main::@19] - // main::@19 - // printf("graphics in 256 colors.\n") - // [93] call printf_str - // [396] phi from main::@19 to printf_str [phi:main::@19->printf_str] - // [396] phi printf_str::s#9 = main::s3 [phi:main::@19->printf_str#0] -- pbuz1=pbuc1 - lda #s3 - sta.z printf_str.s+1 - jsr printf_str - // main::vera_layer_show1 - // *VERA_DC_VIDEO |= vera_layer_enable[layer] - // [94] *VERA_DC_VIDEO = *VERA_DC_VIDEO | *vera_layer_enable -- _deref_pbuc1=_deref_pbuc1_bor__deref_pbuc2 - lda VERA_DC_VIDEO - ora vera_layer_enable - sta VERA_DC_VIDEO - // [95] phi from main::vera_layer_show1 to main::@7 [phi:main::vera_layer_show1->main::@7] - // main::@7 - // bitmap_init(0, 0x00000) - // [96] call bitmap_init - jsr bitmap_init - // [97] phi from main::@7 to main::@20 [phi:main::@7->main::@20] - // main::@20 - // bitmap_clear() - // [98] call bitmap_clear - jsr bitmap_clear - // [99] phi from main::@20 to main::@21 [phi:main::@20->main::@21] - // main::@21 - // gotoxy(0,29) - // [100] call gotoxy - // [241] phi from main::@21 to gotoxy [phi:main::@21->gotoxy] - // [241] phi gotoxy::y#7 = $1d [phi:main::@21->gotoxy#0] -- vbuxx=vbuc1 - ldx #$1d - jsr gotoxy - // main::textcolor2 - // vera_layer_set_textcolor(conio_screen_layer, color) - // [101] vera_layer_set_textcolor::layer#2 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [102] call vera_layer_set_textcolor - // [230] phi from main::textcolor2 to vera_layer_set_textcolor [phi:main::textcolor2->vera_layer_set_textcolor] - // [230] phi vera_layer_set_textcolor::color#6 = YELLOW [phi:main::textcolor2->vera_layer_set_textcolor#0] -- vbuaa=vbuc1 - lda #YELLOW - // [230] phi vera_layer_set_textcolor::layer#6 = vera_layer_set_textcolor::layer#2 [phi:main::textcolor2->vera_layer_set_textcolor#1] -- register_copy - jsr vera_layer_set_textcolor - // [103] phi from main::textcolor2 to main::@8 [phi:main::textcolor2->main::@8] - // main::@8 - // printf("press a key ...") - // [104] call printf_str - // [396] phi from main::@8 to printf_str [phi:main::@8->printf_str] - // [396] phi printf_str::s#9 = main::s4 [phi:main::@8->printf_str#0] -- pbuz1=pbuc1 - lda #s4 - sta.z printf_str.s+1 - jsr printf_str - // [105] phi from main::@8 to main::@1 [phi:main::@8->main::@1] - // [105] phi rand_state#23 = 1 [phi:main::@8->main::@1#0] -- vwuz1=vwuc1 - lda #<1 - sta.z rand_state - lda #>1 - sta.z rand_state+1 - // main::@1 - __b1: - // kbhit() - // [106] call kbhit - jsr kbhit - // [107] kbhit::return#2 = kbhit::return#1 - // main::@22 - // [108] main::$30 = kbhit::return#2 - // while(!kbhit()) - // [109] if(0==main::$30) goto main::@2 -- 0_eq_vbuaa_then_la1 - cmp #0 - bne !__b2+ - jmp __b2 - !__b2: - // main::textcolor3 - // vera_layer_set_textcolor(conio_screen_layer, color) - // [110] vera_layer_set_textcolor::layer#3 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [111] call vera_layer_set_textcolor - // [230] phi from main::textcolor3 to vera_layer_set_textcolor [phi:main::textcolor3->vera_layer_set_textcolor] - // [230] phi vera_layer_set_textcolor::color#6 = WHITE [phi:main::textcolor3->vera_layer_set_textcolor#0] -- vbuaa=vbuc1 - lda #WHITE - // [230] phi vera_layer_set_textcolor::layer#6 = vera_layer_set_textcolor::layer#3 [phi:main::textcolor3->vera_layer_set_textcolor#1] -- register_copy - jsr vera_layer_set_textcolor - // main::bgcolor2 - // vera_layer_set_backcolor(conio_screen_layer, color) - // [112] vera_layer_set_backcolor::layer#2 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [113] call vera_layer_set_backcolor - // [233] phi from main::bgcolor2 to vera_layer_set_backcolor [phi:main::bgcolor2->vera_layer_set_backcolor] - // [233] phi vera_layer_set_backcolor::color#4 = BLACK [phi:main::bgcolor2->vera_layer_set_backcolor#0] -- vbuaa=vbuc1 - lda #BLACK - // [233] phi vera_layer_set_backcolor::layer#4 = vera_layer_set_backcolor::layer#2 [phi:main::bgcolor2->vera_layer_set_backcolor#1] -- register_copy - jsr vera_layer_set_backcolor - // [114] phi from main::bgcolor2 to main::@9 [phi:main::bgcolor2->main::@9] - // main::@9 - // clrscr() - // [115] call clrscr - jsr clrscr - // [116] phi from main::@9 to main::@32 [phi:main::@9->main::@32] - // main::@32 - // gotoxy(0,26) - // [117] call gotoxy - // [241] phi from main::@32 to gotoxy [phi:main::@32->gotoxy] - // [241] phi gotoxy::y#7 = $1a [phi:main::@32->gotoxy#0] -- vbuxx=vbuc1 - ldx #$1a - jsr gotoxy - // [118] phi from main::@32 to main::@33 [phi:main::@32->main::@33] - // main::@33 - // printf("here you see all the colors possible.\n") - // [119] call printf_str - // [396] phi from main::@33 to printf_str [phi:main::@33->printf_str] - // [396] phi printf_str::s#9 = main::s5 [phi:main::@33->printf_str#0] -- pbuz1=pbuc1 - lda #s5 - sta.z printf_str.s+1 - jsr printf_str - // [120] phi from main::@33 to main::@34 [phi:main::@33->main::@34] - // main::@34 - // gotoxy(0,29) - // [121] call gotoxy - // [241] phi from main::@34 to gotoxy [phi:main::@34->gotoxy] - // [241] phi gotoxy::y#7 = $1d [phi:main::@34->gotoxy#0] -- vbuxx=vbuc1 - ldx #$1d - jsr gotoxy - // main::textcolor4 - // vera_layer_set_textcolor(conio_screen_layer, color) - // [122] vera_layer_set_textcolor::layer#4 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [123] call vera_layer_set_textcolor - // [230] phi from main::textcolor4 to vera_layer_set_textcolor [phi:main::textcolor4->vera_layer_set_textcolor] - // [230] phi vera_layer_set_textcolor::color#6 = YELLOW [phi:main::textcolor4->vera_layer_set_textcolor#0] -- vbuaa=vbuc1 - lda #YELLOW - // [230] phi vera_layer_set_textcolor::layer#6 = vera_layer_set_textcolor::layer#4 [phi:main::textcolor4->vera_layer_set_textcolor#1] -- register_copy - jsr vera_layer_set_textcolor - // [124] phi from main::textcolor4 to main::@10 [phi:main::textcolor4->main::@10] - // main::@10 - // printf("press a key ...") - // [125] call printf_str - // [396] phi from main::@10 to printf_str [phi:main::@10->printf_str] - // [396] phi printf_str::s#9 = main::s4 [phi:main::@10->printf_str#0] -- pbuz1=pbuc1 - lda #s4 - sta.z printf_str.s+1 - jsr printf_str - // [126] phi from main::@10 to main::@3 [phi:main::@10->main::@3] - // [126] phi main::color#2 = 0 [phi:main::@10->main::@3#0] -- vbuz1=vbuc1 - lda #0 - sta.z color - // [126] phi main::x#3 = 0 [phi:main::@10->main::@3#1] -- vwuz1=vwuc1 - sta.z x - sta.z x+1 - // main::@3 - __b3: - // kbhit() - // [127] call kbhit - jsr kbhit - // [128] kbhit::return#3 = kbhit::return#1 - // main::@35 - // [129] main::$43 = kbhit::return#3 - // while(!kbhit()) - // [130] if(0==main::$43) goto main::@4 -- 0_eq_vbuaa_then_la1 - cmp #0 - beq __b4 - // [131] phi from main::@35 to main::@5 [phi:main::@35->main::@5] - // main::@5 - // screenlayer(1) - // [132] call screenlayer - jsr screenlayer - // main::textcolor5 - // vera_layer_set_textcolor(conio_screen_layer, color) - // [133] vera_layer_set_textcolor::layer#5 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [134] call vera_layer_set_textcolor - // [230] phi from main::textcolor5 to vera_layer_set_textcolor [phi:main::textcolor5->vera_layer_set_textcolor] - // [230] phi vera_layer_set_textcolor::color#6 = WHITE [phi:main::textcolor5->vera_layer_set_textcolor#0] -- vbuaa=vbuc1 - lda #WHITE - // [230] phi vera_layer_set_textcolor::layer#6 = vera_layer_set_textcolor::layer#5 [phi:main::textcolor5->vera_layer_set_textcolor#1] -- register_copy - jsr vera_layer_set_textcolor - // main::bgcolor3 - // vera_layer_set_backcolor(conio_screen_layer, color) - // [135] vera_layer_set_backcolor::layer#3 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [136] call vera_layer_set_backcolor - // [233] phi from main::bgcolor3 to vera_layer_set_backcolor [phi:main::bgcolor3->vera_layer_set_backcolor] - // [233] phi vera_layer_set_backcolor::color#4 = BLUE [phi:main::bgcolor3->vera_layer_set_backcolor#0] -- vbuaa=vbuc1 - lda #BLUE - // [233] phi vera_layer_set_backcolor::layer#4 = vera_layer_set_backcolor::layer#3 [phi:main::bgcolor3->vera_layer_set_backcolor#1] -- register_copy - jsr vera_layer_set_backcolor - // [137] phi from main::bgcolor3 to main::@11 [phi:main::bgcolor3->main::@11] - // main::@11 - // clrscr() - // [138] call clrscr - jsr clrscr - // main::@return - // } - // [139] return - rts - // main::@4 - __b4: - // bitmap_line(x, x, 0, 199, color) - // [140] bitmap_line::x0#1 = main::x#3 -- vwuz1=vwuz2 - lda.z x - sta.z bitmap_line.x0 - lda.z x+1 - sta.z bitmap_line.x0+1 - // [141] bitmap_line::x1#1 = main::x#3 -- vwuz1=vwuz2 - lda.z x - sta.z bitmap_line.x1 - lda.z x+1 - sta.z bitmap_line.x1+1 - // [142] bitmap_line::c#1 = main::color#2 -- vbuxx=vbuz1 - ldx.z color - // [143] call bitmap_line - // [514] phi from main::@4 to bitmap_line [phi:main::@4->bitmap_line] - // [514] phi bitmap_line::c#10 = bitmap_line::c#1 [phi:main::@4->bitmap_line#0] -- register_copy - // [514] phi bitmap_line::y1#10 = $c7 [phi:main::@4->bitmap_line#1] -- vwuz1=vbuc1 - lda #<$c7 - sta.z bitmap_line.y1 - lda #>$c7 - sta.z bitmap_line.y1+1 - // [514] phi bitmap_line::y0#10 = 0 [phi:main::@4->bitmap_line#2] -- vwuz1=vbuc1 - lda #<0 - sta.z bitmap_line.y0 - sta.z bitmap_line.y0+1 - // [514] phi bitmap_line::x1#10 = bitmap_line::x1#1 [phi:main::@4->bitmap_line#3] -- register_copy - // [514] phi bitmap_line::x0#10 = bitmap_line::x0#1 [phi:main::@4->bitmap_line#4] -- register_copy - jsr bitmap_line - // main::@36 - // color++; - // [144] main::color#1 = ++ main::color#2 -- vbuz1=_inc_vbuz1 - inc.z color - // x++; - // [145] main::x#1 = ++ main::x#3 -- vwuz1=_inc_vwuz1 - inc.z x - bne !+ - inc.z x+1 - !: - // if(x>319) - // [146] if(main::x#1<=$13f) goto main::@37 -- vwuz1_le_vwuc1_then_la1 - lda.z x+1 - cmp #>$13f - bne !+ - lda.z x - cmp #<$13f - !: - bcc __b3 - beq __b3 - // [126] phi from main::@36 to main::@3 [phi:main::@36->main::@3] - // [126] phi main::color#2 = main::color#1 [phi:main::@36->main::@3#0] -- register_copy - // [126] phi main::x#3 = 0 [phi:main::@36->main::@3#1] -- vwuz1=vbuc1 - lda #<0 - sta.z x - sta.z x+1 - jmp __b3 - // [147] phi from main::@36 to main::@37 [phi:main::@36->main::@37] - // main::@37 - // [126] phi from main::@37 to main::@3 [phi:main::@37->main::@3] - // [126] phi main::color#2 = main::color#1 [phi:main::@37->main::@3#0] -- register_copy - // [126] phi main::x#3 = main::x#1 [phi:main::@37->main::@3#1] -- register_copy - // [148] phi from main::@22 to main::@2 [phi:main::@22->main::@2] - // main::@2 - __b2: - // rand() - // [149] call rand - // [585] phi from main::@2 to rand [phi:main::@2->rand] - // [585] phi rand_state#13 = rand_state#23 [phi:main::@2->rand#0] -- register_copy - jsr rand - // rand() - // [150] rand::return#2 = rand::return#0 - // main::@23 - // modr16u(rand(),320,0) - // [151] modr16u::dividend#0 = rand::return#2 -- vwuz1=vwuz2 - lda.z rand.return - sta.z modr16u.dividend - lda.z rand.return+1 - sta.z modr16u.dividend+1 - // [152] call modr16u - // [594] phi from main::@23 to modr16u [phi:main::@23->modr16u] - // [594] phi modr16u::divisor#4 = $140 [phi:main::@23->modr16u#0] -- vwuz1=vwuc1 - lda #<$140 - sta.z modr16u.divisor - lda #>$140 - sta.z modr16u.divisor+1 - // [594] phi modr16u::dividend#4 = modr16u::dividend#0 [phi:main::@23->modr16u#1] -- register_copy - jsr modr16u - // modr16u(rand(),320,0) - // [153] modr16u::return#2 = modr16u::return#0 - // main::@24 - // bitmap_line(modr16u(rand(),320,0), modr16u(rand(),320,0), modr16u(rand(),200,0), modr16u(rand(),200,0), rand()&255) - // [154] bitmap_line::x0#0 = modr16u::return#2 -- vwuz1=vwuz2 - lda.z modr16u.return - sta.z bitmap_line.x0 - lda.z modr16u.return+1 - sta.z bitmap_line.x0+1 - // rand() - // [155] call rand - // [585] phi from main::@24 to rand [phi:main::@24->rand] - // [585] phi rand_state#13 = rand_state#14 [phi:main::@24->rand#0] -- register_copy - jsr rand - // rand() - // [156] rand::return#3 = rand::return#0 - // main::@25 - // modr16u(rand(),320,0) - // [157] modr16u::dividend#1 = rand::return#3 -- vwuz1=vwuz2 - lda.z rand.return - sta.z modr16u.dividend - lda.z rand.return+1 - sta.z modr16u.dividend+1 - // [158] call modr16u - // [594] phi from main::@25 to modr16u [phi:main::@25->modr16u] - // [594] phi modr16u::divisor#4 = $140 [phi:main::@25->modr16u#0] -- vwuz1=vwuc1 - lda #<$140 - sta.z modr16u.divisor - lda #>$140 - sta.z modr16u.divisor+1 - // [594] phi modr16u::dividend#4 = modr16u::dividend#1 [phi:main::@25->modr16u#1] -- register_copy - jsr modr16u - // modr16u(rand(),320,0) - // [159] modr16u::return#3 = modr16u::return#0 - // main::@26 - // bitmap_line(modr16u(rand(),320,0), modr16u(rand(),320,0), modr16u(rand(),200,0), modr16u(rand(),200,0), rand()&255) - // [160] bitmap_line::x1#0 = modr16u::return#3 -- vwuz1=vwuz2 - lda.z modr16u.return - sta.z bitmap_line.x1 - lda.z modr16u.return+1 - sta.z bitmap_line.x1+1 - // rand() - // [161] call rand - // [585] phi from main::@26 to rand [phi:main::@26->rand] - // [585] phi rand_state#13 = rand_state#14 [phi:main::@26->rand#0] -- register_copy - jsr rand - // rand() - // [162] rand::return#10 = rand::return#0 - // main::@27 - // modr16u(rand(),200,0) - // [163] modr16u::dividend#2 = rand::return#10 -- vwuz1=vwuz2 - lda.z rand.return - sta.z modr16u.dividend - lda.z rand.return+1 - sta.z modr16u.dividend+1 - // [164] call modr16u - // [594] phi from main::@27 to modr16u [phi:main::@27->modr16u] - // [594] phi modr16u::divisor#4 = $c8 [phi:main::@27->modr16u#0] -- vwuz1=vbuc1 - lda #<$c8 - sta.z modr16u.divisor - lda #>$c8 - sta.z modr16u.divisor+1 - // [594] phi modr16u::dividend#4 = modr16u::dividend#2 [phi:main::@27->modr16u#1] -- register_copy - jsr modr16u - // modr16u(rand(),200,0) - // [165] modr16u::return#4 = modr16u::return#0 - // main::@28 - // bitmap_line(modr16u(rand(),320,0), modr16u(rand(),320,0), modr16u(rand(),200,0), modr16u(rand(),200,0), rand()&255) - // [166] bitmap_line::y0#0 = modr16u::return#4 -- vwuz1=vwuz2 - lda.z modr16u.return - sta.z bitmap_line.y0 - lda.z modr16u.return+1 - sta.z bitmap_line.y0+1 - // rand() - // [167] call rand - // [585] phi from main::@28 to rand [phi:main::@28->rand] - // [585] phi rand_state#13 = rand_state#14 [phi:main::@28->rand#0] -- register_copy - jsr rand - // rand() - // [168] rand::return#11 = rand::return#0 - // main::@29 - // modr16u(rand(),200,0) - // [169] modr16u::dividend#3 = rand::return#11 -- vwuz1=vwuz2 - lda.z rand.return - sta.z modr16u.dividend - lda.z rand.return+1 - sta.z modr16u.dividend+1 - // [170] call modr16u - // [594] phi from main::@29 to modr16u [phi:main::@29->modr16u] - // [594] phi modr16u::divisor#4 = $c8 [phi:main::@29->modr16u#0] -- vwuz1=vbuc1 - lda #<$c8 - sta.z modr16u.divisor - lda #>$c8 - sta.z modr16u.divisor+1 - // [594] phi modr16u::dividend#4 = modr16u::dividend#3 [phi:main::@29->modr16u#1] -- register_copy - jsr modr16u - // modr16u(rand(),200,0) - // [171] modr16u::return#10 = modr16u::return#0 - // main::@30 - // bitmap_line(modr16u(rand(),320,0), modr16u(rand(),320,0), modr16u(rand(),200,0), modr16u(rand(),200,0), rand()&255) - // [172] bitmap_line::y1#0 = modr16u::return#10 -- vwuz1=vwuz2 - lda.z modr16u.return - sta.z bitmap_line.y1 - lda.z modr16u.return+1 - sta.z bitmap_line.y1+1 - // rand() - // [173] call rand - // [585] phi from main::@30 to rand [phi:main::@30->rand] - // [585] phi rand_state#13 = rand_state#14 [phi:main::@30->rand#0] -- register_copy - jsr rand - // rand() - // [174] rand::return#12 = rand::return#0 - // main::@31 - // [175] main::$40 = rand::return#12 - // bitmap_line(modr16u(rand(),320,0), modr16u(rand(),320,0), modr16u(rand(),200,0), modr16u(rand(),200,0), rand()&255) - // [176] bitmap_line::c#0 = main::$40 & $ff -- vbuxx=vwuz1_band_vbuc1 - lda #$ff - and.z __40 - tax - // [177] call bitmap_line - // [514] phi from main::@31 to bitmap_line [phi:main::@31->bitmap_line] - // [514] phi bitmap_line::c#10 = bitmap_line::c#0 [phi:main::@31->bitmap_line#0] -- register_copy - // [514] phi bitmap_line::y1#10 = bitmap_line::y1#0 [phi:main::@31->bitmap_line#1] -- register_copy - // [514] phi bitmap_line::y0#10 = bitmap_line::y0#0 [phi:main::@31->bitmap_line#2] -- register_copy - // [514] phi bitmap_line::x1#10 = bitmap_line::x1#0 [phi:main::@31->bitmap_line#3] -- register_copy - // [514] phi bitmap_line::x0#10 = bitmap_line::x0#0 [phi:main::@31->bitmap_line#4] -- register_copy - jsr bitmap_line - // [105] phi from main::@31 to main::@1 [phi:main::@31->main::@1] - // [105] phi rand_state#23 = rand_state#14 [phi:main::@31->main::@1#0] -- register_copy - jmp __b1 - .segment Data - s: .text @"vera in bitmap mode,\n" - .byte 0 - s1: .text @"color depth 8 bits per pixel.\n" - .byte 0 - s2: .text @"in this mode, it is possible to display\n" - .byte 0 - s3: .text @"graphics in 256 colors.\n" - .byte 0 - s4: .text "press a key ..." - .byte 0 - s5: .text @"here you see all the colors possible.\n" - .byte 0 -} -.segment Code - // vera_layer_mode_text -// Set a vera layer in text mode and configure the: -// - layer: Value of 0 or 1. -// - mapbase_address: A dword typed address (4 bytes), that specifies the full address of the map base. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective mapbase vera register. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// - tilebase_address: A dword typed address (4 bytes), that specifies the base address of the tile map. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective tilebase vera register. -// Note that the resulting vera register holds only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// - mapwidth: The width of the map in number of tiles. -// - mapheight: The height of the map in number of tiles. -// - tilewidth: The width of a tile, which can be 8 or 16 pixels. -// - tileheight: The height of a tile, which can be 8 or 16 pixels. -// - color_mode: The color mode, which can be 16 or 256. -// void vera_layer_mode_text(char layer, unsigned long mapbase_address, unsigned long tilebase_address, unsigned int mapwidth, unsigned int mapheight, char tilewidth, char tileheight, unsigned int color_mode) -vera_layer_mode_text: { - .const mapbase_address = 0 - .const tilebase_address = $f800 - .const mapwidth = $80 - .const mapheight = $40 - .const tilewidth = 8 - .const tileheight = 8 - .label layer = 1 - // vera_layer_mode_tile( layer, mapbase_address, tilebase_address, mapwidth, mapheight, tilewidth, tileheight, 1 ) - // [179] call vera_layer_mode_tile - // [292] phi from vera_layer_mode_text to vera_layer_mode_tile [phi:vera_layer_mode_text->vera_layer_mode_tile] - // [292] phi vera_layer_mode_tile::tileheight#10 = vera_layer_mode_text::tileheight#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#0] -- vbuz1=vbuc1 - lda #tileheight - sta.z vera_layer_mode_tile.tileheight - // [292] phi vera_layer_mode_tile::tilewidth#10 = vera_layer_mode_text::tilewidth#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#1] -- vbuz1=vbuc1 - lda #tilewidth - sta.z vera_layer_mode_tile.tilewidth - // [292] phi vera_layer_mode_tile::tilebase_address#10 = vera_layer_mode_text::tilebase_address#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#2] -- vduz1=vduc1 - lda #tilebase_address - sta.z vera_layer_mode_tile.tilebase_address+1 - lda #>$10 - sta.z vera_layer_mode_tile.tilebase_address+2 - lda #>tilebase_address>>$10 - sta.z vera_layer_mode_tile.tilebase_address+3 - // [292] phi vera_layer_mode_tile::mapbase_address#10 = vera_layer_mode_text::mapbase_address#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#3] -- vduz1=vduc1 - lda #mapbase_address - sta.z vera_layer_mode_tile.mapbase_address+1 - lda #>$10 - sta.z vera_layer_mode_tile.mapbase_address+2 - lda #>mapbase_address>>$10 - sta.z vera_layer_mode_tile.mapbase_address+3 - // [292] phi vera_layer_mode_tile::mapheight#10 = vera_layer_mode_text::mapheight#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#4] -- vwuz1=vwuc1 - lda #mapheight - sta.z vera_layer_mode_tile.mapheight+1 - // [292] phi vera_layer_mode_tile::layer#10 = vera_layer_mode_text::layer#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#5] -- vbuz1=vbuc1 - lda #layer - sta.z vera_layer_mode_tile.layer - // [292] phi vera_layer_mode_tile::mapwidth#10 = vera_layer_mode_text::mapwidth#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#6] -- vwuz1=vwuc1 - lda #mapwidth - sta.z vera_layer_mode_tile.mapwidth+1 - jsr vera_layer_mode_tile - // [180] phi from vera_layer_mode_text to vera_layer_mode_text::@1 [phi:vera_layer_mode_text->vera_layer_mode_text::@1] - // vera_layer_mode_text::@1 - // vera_layer_set_text_color_mode( layer, VERA_LAYER_CONFIG_16C ) - // [181] call vera_layer_set_text_color_mode - jsr vera_layer_set_text_color_mode - // vera_layer_mode_text::@return - // } - // [182] return - rts -} - // screensize -// Return the current screen size. -// void screensize(char *x, char *y) -screensize: { - .label x = conio_screen_width - .label y = conio_screen_height - // char hscale = (*VERA_DC_HSCALE) >> 7 - // [183] screensize::hscale#0 = *VERA_DC_HSCALE >> 7 -- vbuaa=_deref_pbuc1_ror_7 - // VERA returns in VERA_DC_HSCALE the value of 128 when 80 columns is used in text mode, - // and the value of 64 when 40 columns is used in text mode. - // Basically, 40 columns mode in the VERA is a double scan mode. - // Same for the VERA_DC_VSCALE mode, but then the subdivision is 60 or 30 rows. - // I still need to test the other modes, but this will suffice for now for the pure text modes. - lda VERA_DC_HSCALE - rol - rol - and #1 - // 40 << hscale - // [184] screensize::$1 = $28 << screensize::hscale#0 -- vbuaa=vbuc1_rol_vbuaa - tay - lda #$28 - cpy #0 - beq !e+ - !: - asl - dey - bne !- - !e: - // *x = 40 << hscale - // [185] *screensize::x#0 = screensize::$1 -- _deref_pbuc1=vbuaa - sta.z x - // char vscale = (*VERA_DC_VSCALE) >> 7 - // [186] screensize::vscale#0 = *VERA_DC_VSCALE >> 7 -- vbuaa=_deref_pbuc1_ror_7 - lda VERA_DC_VSCALE - rol - rol - and #1 - // 30 << vscale - // [187] screensize::$3 = $1e << screensize::vscale#0 -- vbuaa=vbuc1_rol_vbuaa - tay - lda #$1e - cpy #0 - beq !e+ - !: - asl - dey - bne !- - !e: - // *y = 30 << vscale - // [188] *screensize::y#0 = screensize::$3 -- _deref_pbuc1=vbuaa - sta.z y - // screensize::@return - // } - // [189] return - rts -} - // screenlayer -// Set the layer with which the conio will interact. -// - layer: value of 0 or 1. -// void screenlayer(char layer) -screenlayer: { - .label __2 = $89 - .label __4 = $7f - .label __5 = $8b - .label vera_layer_get_width1_config = $97 - .label vera_layer_get_width1_return = $89 - .label vera_layer_get_height1_config = $99 - .label vera_layer_get_height1_return = $8b - // conio_screen_layer = layer - // [190] conio_screen_layer = 1 -- vbuz1=vbuc1 - lda #1 - sta.z conio_screen_layer - // vera_layer_get_mapbase_bank(conio_screen_layer) - // [191] vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer -- vbuxx=vbuz1 - tax - // [192] call vera_layer_get_mapbase_bank - jsr vera_layer_get_mapbase_bank - // [193] vera_layer_get_mapbase_bank::return#2 = vera_layer_get_mapbase_bank::return#0 - // screenlayer::@3 - // [194] CONIO_SCREEN_BANK#15 = vera_layer_get_mapbase_bank::return#2 -- vbuz1=vbuaa - sta.z CONIO_SCREEN_BANK_1 - // vera_layer_get_mapbase_offset(conio_screen_layer) - // [195] vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer -- vbuaa=vbuz1 - lda.z conio_screen_layer - // [196] call vera_layer_get_mapbase_offset - jsr vera_layer_get_mapbase_offset - // [197] vera_layer_get_mapbase_offset::return#2 = vera_layer_get_mapbase_offset::return#0 - // screenlayer::@4 - // [198] CONIO_SCREEN_TEXT#17 = vera_layer_get_mapbase_offset::return#2 -- vwuz1=vwuz2 - lda.z vera_layer_get_mapbase_offset.return - sta.z CONIO_SCREEN_TEXT_1 - lda.z vera_layer_get_mapbase_offset.return+1 - sta.z CONIO_SCREEN_TEXT_1+1 - // vera_layer_get_width(conio_screen_layer) - // [199] screenlayer::vera_layer_get_width1_layer#0 = conio_screen_layer -- vbuaa=vbuz1 - lda.z conio_screen_layer - // screenlayer::vera_layer_get_width1 - // byte* config = vera_layer_config[layer] - // [200] screenlayer::vera_layer_get_width1_$2 = screenlayer::vera_layer_get_width1_layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [201] screenlayer::vera_layer_get_width1_config#0 = vera_layer_config[screenlayer::vera_layer_get_width1_$2] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_config,y - sta.z vera_layer_get_width1_config - lda vera_layer_config+1,y - sta.z vera_layer_get_width1_config+1 - // *config & VERA_LAYER_WIDTH_MASK - // [202] screenlayer::vera_layer_get_width1_$0 = *screenlayer::vera_layer_get_width1_config#0 & VERA_LAYER_WIDTH_MASK -- vbuaa=_deref_pbuz1_band_vbuc1 - lda #VERA_LAYER_WIDTH_MASK - ldy #0 - and (vera_layer_get_width1_config),y - // (*config & VERA_LAYER_WIDTH_MASK) >> 4 - // [203] screenlayer::vera_layer_get_width1_$1 = screenlayer::vera_layer_get_width1_$0 >> 4 -- vbuaa=vbuaa_ror_4 - lsr - lsr - lsr - lsr - // return VERA_LAYER_WIDTH[ (*config & VERA_LAYER_WIDTH_MASK) >> 4]; - // [204] screenlayer::vera_layer_get_width1_$3 = screenlayer::vera_layer_get_width1_$1 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [205] screenlayer::vera_layer_get_width1_return#0 = VERA_LAYER_WIDTH[screenlayer::vera_layer_get_width1_$3] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda VERA_LAYER_WIDTH,y - sta.z vera_layer_get_width1_return - lda VERA_LAYER_WIDTH+1,y - sta.z vera_layer_get_width1_return+1 - // screenlayer::vera_layer_get_width1_@return - // } - // [206] screenlayer::vera_layer_get_width1_return#1 = screenlayer::vera_layer_get_width1_return#0 - // screenlayer::@1 - // vera_layer_get_width(conio_screen_layer) - // [207] screenlayer::$2 = screenlayer::vera_layer_get_width1_return#1 - // conio_width = vera_layer_get_width(conio_screen_layer) - // [208] conio_width = screenlayer::$2 -- vwuz1=vwuz2 - lda.z __2 - sta.z conio_width - lda.z __2+1 - sta.z conio_width+1 - // vera_layer_get_rowshift(conio_screen_layer) - // [209] vera_layer_get_rowshift::layer#0 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [210] call vera_layer_get_rowshift - jsr vera_layer_get_rowshift - // [211] vera_layer_get_rowshift::return#2 = vera_layer_get_rowshift::return#0 - // screenlayer::@5 - // [212] screenlayer::$3 = vera_layer_get_rowshift::return#2 - // conio_rowshift = vera_layer_get_rowshift(conio_screen_layer) - // [213] conio_rowshift = screenlayer::$3 -- vbuz1=vbuaa - sta.z conio_rowshift - // vera_layer_get_rowskip(conio_screen_layer) - // [214] vera_layer_get_rowskip::layer#0 = conio_screen_layer -- vbuaa=vbuz1 - lda.z conio_screen_layer - // [215] call vera_layer_get_rowskip - jsr vera_layer_get_rowskip - // [216] vera_layer_get_rowskip::return#2 = vera_layer_get_rowskip::return#0 - // screenlayer::@6 - // [217] screenlayer::$4 = vera_layer_get_rowskip::return#2 - // conio_rowskip = vera_layer_get_rowskip(conio_screen_layer) - // [218] conio_rowskip = screenlayer::$4 -- vwuz1=vwuz2 - lda.z __4 - sta.z conio_rowskip - lda.z __4+1 - sta.z conio_rowskip+1 - // vera_layer_get_height(conio_screen_layer) - // [219] screenlayer::vera_layer_get_height1_layer#0 = conio_screen_layer -- vbuaa=vbuz1 - lda.z conio_screen_layer - // screenlayer::vera_layer_get_height1 - // byte* config = vera_layer_config[layer] - // [220] screenlayer::vera_layer_get_height1_$2 = screenlayer::vera_layer_get_height1_layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [221] screenlayer::vera_layer_get_height1_config#0 = vera_layer_config[screenlayer::vera_layer_get_height1_$2] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_config,y - sta.z vera_layer_get_height1_config - lda vera_layer_config+1,y - sta.z vera_layer_get_height1_config+1 - // *config & VERA_LAYER_HEIGHT_MASK - // [222] screenlayer::vera_layer_get_height1_$0 = *screenlayer::vera_layer_get_height1_config#0 & VERA_LAYER_HEIGHT_MASK -- vbuaa=_deref_pbuz1_band_vbuc1 - lda #VERA_LAYER_HEIGHT_MASK - ldy #0 - and (vera_layer_get_height1_config),y - // (*config & VERA_LAYER_HEIGHT_MASK) >> 6 - // [223] screenlayer::vera_layer_get_height1_$1 = screenlayer::vera_layer_get_height1_$0 >> 6 -- vbuaa=vbuaa_ror_6 - rol - rol - rol - and #3 - // return VERA_LAYER_HEIGHT[ (*config & VERA_LAYER_HEIGHT_MASK) >> 6]; - // [224] screenlayer::vera_layer_get_height1_$3 = screenlayer::vera_layer_get_height1_$1 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [225] screenlayer::vera_layer_get_height1_return#0 = VERA_LAYER_HEIGHT[screenlayer::vera_layer_get_height1_$3] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda VERA_LAYER_HEIGHT,y - sta.z vera_layer_get_height1_return - lda VERA_LAYER_HEIGHT+1,y - sta.z vera_layer_get_height1_return+1 - // screenlayer::vera_layer_get_height1_@return - // } - // [226] screenlayer::vera_layer_get_height1_return#1 = screenlayer::vera_layer_get_height1_return#0 - // screenlayer::@2 - // vera_layer_get_height(conio_screen_layer) - // [227] screenlayer::$5 = screenlayer::vera_layer_get_height1_return#1 - // conio_height = vera_layer_get_height(conio_screen_layer) - // [228] conio_height = screenlayer::$5 -- vwuz1=vwuz2 - lda.z __5 - sta.z conio_height - lda.z __5+1 - sta.z conio_height+1 - // screenlayer::@return - // } - // [229] return - rts -} - // vera_layer_set_textcolor -// Set the front color for text output. The old front text color setting is returned. -// - layer: Value of 0 or 1. -// - color: a 4 bit value ( decimal between 0 and 15) when the VERA works in 16x16 color text mode. -// An 8 bit value (decimal between 0 and 255) when the VERA works in 256 text mode. -// Note that on the VERA, the transparent color has value 0. -// char vera_layer_set_textcolor(__register(X) char layer, __register(A) char color) -vera_layer_set_textcolor: { - // vera_layer_textcolor[layer] = color - // [231] vera_layer_textcolor[vera_layer_set_textcolor::layer#6] = vera_layer_set_textcolor::color#6 -- pbuc1_derefidx_vbuxx=vbuaa - sta vera_layer_textcolor,x - // vera_layer_set_textcolor::@return - // } - // [232] return - rts -} - // vera_layer_set_backcolor -// Set the back color for text output. The old back text color setting is returned. -// - layer: Value of 0 or 1. -// - color: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// char vera_layer_set_backcolor(__register(X) char layer, __register(A) char color) -vera_layer_set_backcolor: { - // vera_layer_backcolor[layer] = color - // [234] vera_layer_backcolor[vera_layer_set_backcolor::layer#4] = vera_layer_set_backcolor::color#4 -- pbuc1_derefidx_vbuxx=vbuaa - sta vera_layer_backcolor,x - // vera_layer_set_backcolor::@return - // } - // [235] return - rts -} - // vera_layer_set_mapbase -// Set the base of the map layer with which the conio will interact. -// - layer: Value of 0 or 1. -// - mapbase: Specifies the base address of the tile map. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// void vera_layer_set_mapbase(__register(A) char layer, __register(X) char mapbase) -vera_layer_set_mapbase: { - .label addr = $25 - // byte* addr = vera_layer_mapbase[layer] - // [237] vera_layer_set_mapbase::$0 = vera_layer_set_mapbase::layer#3 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [238] vera_layer_set_mapbase::addr#0 = vera_layer_mapbase[vera_layer_set_mapbase::$0] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_mapbase,y - sta.z addr - lda vera_layer_mapbase+1,y - sta.z addr+1 - // *addr = mapbase - // [239] *vera_layer_set_mapbase::addr#0 = vera_layer_set_mapbase::mapbase#3 -- _deref_pbuz1=vbuxx - txa - ldy #0 - sta (addr),y - // vera_layer_set_mapbase::@return - // } - // [240] return - rts -} - // gotoxy -// Set the cursor to the specified position -// void gotoxy(char x, __register(X) char y) -gotoxy: { - .label __6 = $25 - .label line_offset = $25 - // if(y>CONIO_HEIGHT) - // [242] if(gotoxy::y#7<=conio_screen_height) goto gotoxy::@4 -- vbuxx_le_vbuz1_then_la1 - lda.z conio_screen_height - stx.z $ff - cmp.z $ff - bcs __b1 - // [244] phi from gotoxy to gotoxy::@1 [phi:gotoxy->gotoxy::@1] - // [244] phi gotoxy::y#10 = 0 [phi:gotoxy->gotoxy::@1#0] -- vbuxx=vbuc1 - ldx #0 - // [243] phi from gotoxy to gotoxy::@4 [phi:gotoxy->gotoxy::@4] - // gotoxy::@4 - // [244] phi from gotoxy::@4 to gotoxy::@1 [phi:gotoxy::@4->gotoxy::@1] - // [244] phi gotoxy::y#10 = gotoxy::y#7 [phi:gotoxy::@4->gotoxy::@1#0] -- register_copy - // gotoxy::@1 - __b1: - // if(x>=CONIO_WIDTH) - // [245] if(0gotoxy::@3] - // gotoxy::@3 - // gotoxy::@2 - // conio_cursor_x[conio_screen_layer] = x - // [247] conio_cursor_x[conio_screen_layer] = 0 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #0 - ldy.z conio_screen_layer - sta conio_cursor_x,y - // conio_cursor_y[conio_screen_layer] = y - // [248] conio_cursor_y[conio_screen_layer] = gotoxy::y#10 -- pbuc1_derefidx_vbuz1=vbuxx - txa - sta conio_cursor_y,y - // unsigned int line_offset = (unsigned int)y << conio_rowshift - // [249] gotoxy::$6 = (unsigned int)gotoxy::y#10 -- vwuz1=_word_vbuxx - txa - sta.z __6 - lda #0 - sta.z __6+1 - // [250] gotoxy::line_offset#0 = gotoxy::$6 << conio_rowshift -- vwuz1=vwuz1_rol_vbuz2 - ldy.z conio_rowshift - beq !e+ - !: - asl.z line_offset - rol.z line_offset+1 - dey - bne !- - !e: - // conio_line_text[conio_screen_layer] = line_offset - // [251] gotoxy::$5 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [252] conio_line_text[gotoxy::$5] = gotoxy::line_offset#0 -- pwuc1_derefidx_vbuaa=vwuz1 - tay - lda.z line_offset - sta conio_line_text,y - lda.z line_offset+1 - sta conio_line_text+1,y - // gotoxy::@return - // } - // [253] return - rts -} - // vera_layer_get_color -// Get the text and back color for text output in 16 color mode. -// - layer: Value of 0 or 1. -// - return: an 8 bit value with bit 7:4 containing the back color and bit 3:0 containing the front color. -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_color(__register(X) char layer) -vera_layer_get_color: { - .label addr = 6 - // byte* addr = vera_layer_config[layer] - // [255] vera_layer_get_color::$3 = vera_layer_get_color::layer#2 << 1 -- vbuaa=vbuxx_rol_1 - txa - asl - // [256] vera_layer_get_color::addr#0 = vera_layer_config[vera_layer_get_color::$3] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_config,y - sta.z addr - lda vera_layer_config+1,y - sta.z addr+1 - // *addr & VERA_LAYER_CONFIG_256C - // [257] vera_layer_get_color::$0 = *vera_layer_get_color::addr#0 & VERA_LAYER_CONFIG_256C -- vbuaa=_deref_pbuz1_band_vbuc1 - lda #VERA_LAYER_CONFIG_256C - ldy #0 - and (addr),y - // if( *addr & VERA_LAYER_CONFIG_256C ) - // [258] if(0!=vera_layer_get_color::$0) goto vera_layer_get_color::@1 -- 0_neq_vbuaa_then_la1 - cmp #0 - bne __b1 - // vera_layer_get_color::@2 - // vera_layer_backcolor[layer] << 4 - // [259] vera_layer_get_color::$1 = vera_layer_backcolor[vera_layer_get_color::layer#2] << 4 -- vbuaa=pbuc1_derefidx_vbuxx_rol_4 - lda vera_layer_backcolor,x - asl - asl - asl - asl - // return ((vera_layer_backcolor[layer] << 4) | vera_layer_textcolor[layer]); - // [260] vera_layer_get_color::return#2 = vera_layer_get_color::$1 | vera_layer_textcolor[vera_layer_get_color::layer#2] -- vbuaa=vbuaa_bor_pbuc1_derefidx_vbuxx - ora vera_layer_textcolor,x - // [261] phi from vera_layer_get_color::@1 vera_layer_get_color::@2 to vera_layer_get_color::@return [phi:vera_layer_get_color::@1/vera_layer_get_color::@2->vera_layer_get_color::@return] - // [261] phi vera_layer_get_color::return#3 = vera_layer_get_color::return#1 [phi:vera_layer_get_color::@1/vera_layer_get_color::@2->vera_layer_get_color::@return#0] -- register_copy - // vera_layer_get_color::@return - // } - // [262] return - rts - // vera_layer_get_color::@1 - __b1: - // return (vera_layer_textcolor[layer]); - // [263] vera_layer_get_color::return#1 = vera_layer_textcolor[vera_layer_get_color::layer#2] -- vbuaa=pbuc1_derefidx_vbuxx - lda vera_layer_textcolor,x - rts -} - // cputln -// Print a newline -cputln: { - .label temp = 6 - // word temp = conio_line_text[conio_screen_layer] - // [264] cputln::$2 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [265] cputln::temp#0 = conio_line_text[cputln::$2] -- vwuz1=pwuc1_derefidx_vbuaa - // TODO: This needs to be optimized! other variations don't compile because of sections not available! - tay - lda conio_line_text,y - sta.z temp - lda conio_line_text+1,y - sta.z temp+1 - // temp += conio_rowskip - // [266] cputln::temp#1 = cputln::temp#0 + conio_rowskip -- vwuz1=vwuz1_plus_vwuz2 - clc - lda.z temp - adc.z conio_rowskip - sta.z temp - lda.z temp+1 - adc.z conio_rowskip+1 - sta.z temp+1 - // conio_line_text[conio_screen_layer] = temp - // [267] cputln::$3 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [268] conio_line_text[cputln::$3] = cputln::temp#1 -- pwuc1_derefidx_vbuaa=vwuz1 - tay - lda.z temp - sta conio_line_text,y - lda.z temp+1 - sta conio_line_text+1,y - // conio_cursor_x[conio_screen_layer] = 0 - // [269] conio_cursor_x[conio_screen_layer] = 0 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #0 - ldy.z conio_screen_layer - sta conio_cursor_x,y - // conio_cursor_y[conio_screen_layer]++; - // [270] conio_cursor_y[conio_screen_layer] = ++ conio_cursor_y[conio_screen_layer] -- pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 - ldx.z conio_screen_layer - inc conio_cursor_y,x - // cscroll() - // [271] call cscroll - jsr cscroll - // cputln::@return - // } - // [272] return - rts -} - // memcpy_in_vram -// Copy block of memory (from VRAM to VRAM) -// Copies the values from the location pointed by src to the location pointed by dest. -// The method uses the VERA access ports 0 and 1 to copy data from and to in VRAM. -// - src_bank: 64K VRAM bank number to copy from (0/1). -// - src: pointer to the location to copy from. Note that the address is a 16 bit value! -// - src_increment: the increment indicator, VERA needs this because addressing increment is automated by VERA at each access. -// - dest_bank: 64K VRAM bank number to copy to (0/1). -// - dest: pointer to the location to copy to. Note that the address is a 16 bit value! -// - dest_increment: the increment indicator, VERA needs this because addressing increment is automated by VERA at each access. -// - num: The number of bytes to copy -// void memcpy_in_vram(__register(Y) char dest_bank, __zp($a) void *dest, char dest_increment, char src_bank, __zp(6) char *src, char src_increment, __zp(8) unsigned int num) -memcpy_in_vram: { - .label i = 2 - .label dest = $a - .label src = 6 - .label num = 8 - // *VERA_CTRL &= ~VERA_ADDRSEL - // [274] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // BYTE0(src) - // [275] memcpy_in_vram::$0 = byte0 memcpy_in_vram::src#2 -- vbuaa=_byte0_pvoz1 - lda.z src - // *VERA_ADDRX_L = BYTE0(src) - // [276] *VERA_ADDRX_L = memcpy_in_vram::$0 -- _deref_pbuc1=vbuaa - // Set address - sta VERA_ADDRX_L - // BYTE1(src) - // [277] memcpy_in_vram::$1 = byte1 memcpy_in_vram::src#2 -- vbuaa=_byte1_pvoz1 - lda.z src+1 - // *VERA_ADDRX_M = BYTE1(src) - // [278] *VERA_ADDRX_M = memcpy_in_vram::$1 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // *VERA_ADDRX_H = src_increment | src_bank - // [279] *VERA_ADDRX_H = VERA_INC_1 -- _deref_pbuc1=vbuc2 - lda #VERA_INC_1 - sta VERA_ADDRX_H - // *VERA_CTRL |= VERA_ADDRSEL - // [280] *VERA_CTRL = *VERA_CTRL | VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 - // Select DATA1 - lda #VERA_ADDRSEL - ora VERA_CTRL - sta VERA_CTRL - // BYTE0(dest) - // [281] memcpy_in_vram::$3 = byte0 memcpy_in_vram::dest#2 -- vbuaa=_byte0_pvoz1 - lda.z dest - // *VERA_ADDRX_L = BYTE0(dest) - // [282] *VERA_ADDRX_L = memcpy_in_vram::$3 -- _deref_pbuc1=vbuaa - // Set address - sta VERA_ADDRX_L - // BYTE1(dest) - // [283] memcpy_in_vram::$4 = byte1 memcpy_in_vram::dest#2 -- vbuaa=_byte1_pvoz1 - lda.z dest+1 - // *VERA_ADDRX_M = BYTE1(dest) - // [284] *VERA_ADDRX_M = memcpy_in_vram::$4 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // dest_increment | dest_bank - // [285] memcpy_in_vram::$5 = VERA_INC_1 | memcpy_in_vram::dest_bank#2 -- vbuaa=vbuc1_bor_vbuyy - tya - ora #VERA_INC_1 - // *VERA_ADDRX_H = dest_increment | dest_bank - // [286] *VERA_ADDRX_H = memcpy_in_vram::$5 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_H - // [287] phi from memcpy_in_vram to memcpy_in_vram::@1 [phi:memcpy_in_vram->memcpy_in_vram::@1] - // [287] phi memcpy_in_vram::i#2 = 0 [phi:memcpy_in_vram->memcpy_in_vram::@1#0] -- vwuz1=vwuc1 - lda #<0 - sta.z i - sta.z i+1 - // Transfer the data - // memcpy_in_vram::@1 - __b1: - // for(unsigned int i=0; imemcpy_in_vram::@1] - // [287] phi memcpy_in_vram::i#2 = memcpy_in_vram::i#1 [phi:memcpy_in_vram::@2->memcpy_in_vram::@1#0] -- register_copy - jmp __b1 -} - // vera_layer_mode_tile -// Set a vera layer in tile mode and configure the: -// - layer: Value of 0 or 1. -// - mapbase_address: A dword typed address (4 bytes), that specifies the full address of the map base. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective mapbase vera register. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// - tilebase_address: A dword typed address (4 bytes), that specifies the base address of the tile map. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective tilebase vera register. -// Note that the resulting vera register holds only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// - mapwidth: The width of the map in number of tiles. -// - mapheight: The height of the map in number of tiles. -// - tilewidth: The width of a tile, which can be 8 or 16 pixels. -// - tileheight: The height of a tile, which can be 8 or 16 pixels. -// - color_depth: The color depth in bits per pixel (BPP), which can be 1, 2, 4 or 8. -// void vera_layer_mode_tile(__zp($94) char layer, __zp($43) unsigned long mapbase_address, __zp($49) unsigned long tilebase_address, __zp($7a) unsigned int mapwidth, __zp($9f) unsigned int mapheight, __zp($a9) char tilewidth, __zp($aa) char tileheight, char color_depth) -vera_layer_mode_tile: { - .label __1 = $7c - .label __6 = $4f - .label __17 = $95 - .label __18 = $93 - .label mapbase_address = $43 - .label tilebase_address = $49 - .label mapwidth = $7a - .label layer = $94 - .label mapheight = $9f - .label tilewidth = $a9 - .label tileheight = $aa - // vera_layer_mode_tile::@1 - // case 32: - // config |= VERA_LAYER_WIDTH_32; - // vera_layer_rowshift[layer] = 6; - // vera_layer_rowskip[layer] = 64; - // break; - // [293] if(vera_layer_mode_tile::mapwidth#10==$20) goto vera_layer_mode_tile::@5 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapwidth+1 - bne !+ - lda.z mapwidth - cmp #$20 - bne !__b5+ - jmp __b5 - !__b5: - !: - // vera_layer_mode_tile::@2 - // case 64: - // config |= VERA_LAYER_WIDTH_64; - // vera_layer_rowshift[layer] = 7; - // vera_layer_rowskip[layer] = 128; - // break; - // [294] if(vera_layer_mode_tile::mapwidth#10==$40) goto vera_layer_mode_tile::@6 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapwidth+1 - bne !+ - lda.z mapwidth - cmp #$40 - bne !__b6+ - jmp __b6 - !__b6: - !: - // vera_layer_mode_tile::@3 - // case 128: - // config |= VERA_LAYER_WIDTH_128; - // vera_layer_rowshift[layer] = 8; - // vera_layer_rowskip[layer] = 256; - // break; - // [295] if(vera_layer_mode_tile::mapwidth#10==$80) goto vera_layer_mode_tile::@7 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapwidth+1 - bne !+ - lda.z mapwidth - cmp #$80 - bne !__b7+ - jmp __b7 - !__b7: - !: - // vera_layer_mode_tile::@4 - // case 256: - // config |= VERA_LAYER_WIDTH_256; - // vera_layer_rowshift[layer] = 9; - // vera_layer_rowskip[layer] = 512; - // break; - // [296] if(vera_layer_mode_tile::mapwidth#10!=$100) goto vera_layer_mode_tile::@9 -- vwuz1_neq_vwuc1_then_la1 - lda.z mapwidth+1 - cmp #>$100 - bne __b1 - lda.z mapwidth - cmp #<$100 - bne __b1 - // vera_layer_mode_tile::@8 - // vera_layer_rowshift[layer] = 9 - // [297] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 9 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #9 - ldy.z layer - sta vera_layer_rowshift,y - // vera_layer_rowskip[layer] = 512 - // [298] vera_layer_mode_tile::$14 = vera_layer_mode_tile::layer#10 << 1 -- vbuaa=vbuz1_rol_1 - tya - asl - // [299] vera_layer_rowskip[vera_layer_mode_tile::$14] = $200 -- pwuc1_derefidx_vbuaa=vwuc2 - tay - lda #<$200 - sta vera_layer_rowskip,y - lda #>$200 - sta vera_layer_rowskip+1,y - // [300] phi from vera_layer_mode_tile::@8 to vera_layer_mode_tile::@9 [phi:vera_layer_mode_tile::@8->vera_layer_mode_tile::@9] - // [300] phi vera_layer_mode_tile::config#21 = VERA_LAYER_WIDTH_256 [phi:vera_layer_mode_tile::@8->vera_layer_mode_tile::@9#0] -- vbuxx=vbuc1 - ldx #VERA_LAYER_WIDTH_256 - jmp __b9 - // [300] phi from vera_layer_mode_tile::@4 vera_layer_mode_tile::@5 to vera_layer_mode_tile::@9 [phi:vera_layer_mode_tile::@4/vera_layer_mode_tile::@5->vera_layer_mode_tile::@9] - __b1: - // [300] phi vera_layer_mode_tile::config#21 = VERA_LAYER_COLOR_DEPTH_1BPP [phi:vera_layer_mode_tile::@4/vera_layer_mode_tile::@5->vera_layer_mode_tile::@9#0] -- vbuxx=vbuc1 - ldx #VERA_LAYER_COLOR_DEPTH_1BPP - // vera_layer_mode_tile::@9 - __b9: - // case 32: - // config |= VERA_LAYER_HEIGHT_32; - // break; - // [301] if(vera_layer_mode_tile::mapheight#10==$20) goto vera_layer_mode_tile::@16 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$20 - beq __b16 - !: - // vera_layer_mode_tile::@10 - // case 64: - // config |= VERA_LAYER_HEIGHT_64; - // break; - // [302] if(vera_layer_mode_tile::mapheight#10==$40) goto vera_layer_mode_tile::@13 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$40 - bne !__b13+ - jmp __b13 - !__b13: - !: - // vera_layer_mode_tile::@11 - // case 128: - // config |= VERA_LAYER_HEIGHT_128; - // break; - // [303] if(vera_layer_mode_tile::mapheight#10==$80) goto vera_layer_mode_tile::@14 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$80 - bne !__b14+ - jmp __b14 - !__b14: - !: - // vera_layer_mode_tile::@12 - // case 256: - // config |= VERA_LAYER_HEIGHT_256; - // break; - // [304] if(vera_layer_mode_tile::mapheight#10!=$100) goto vera_layer_mode_tile::@16 -- vwuz1_neq_vwuc1_then_la1 - lda.z mapheight+1 - cmp #>$100 - bne __b16 - lda.z mapheight - cmp #<$100 - bne __b16 - // vera_layer_mode_tile::@15 - // config |= VERA_LAYER_HEIGHT_256 - // [305] vera_layer_mode_tile::config#12 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_256 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_HEIGHT_256 - tax - // [306] phi from vera_layer_mode_tile::@12 vera_layer_mode_tile::@13 vera_layer_mode_tile::@14 vera_layer_mode_tile::@15 vera_layer_mode_tile::@9 to vera_layer_mode_tile::@16 [phi:vera_layer_mode_tile::@12/vera_layer_mode_tile::@13/vera_layer_mode_tile::@14/vera_layer_mode_tile::@15/vera_layer_mode_tile::@9->vera_layer_mode_tile::@16] - // [306] phi vera_layer_mode_tile::config#25 = vera_layer_mode_tile::config#21 [phi:vera_layer_mode_tile::@12/vera_layer_mode_tile::@13/vera_layer_mode_tile::@14/vera_layer_mode_tile::@15/vera_layer_mode_tile::@9->vera_layer_mode_tile::@16#0] -- register_copy - // vera_layer_mode_tile::@16 - __b16: - // vera_layer_set_config(layer, config) - // [307] vera_layer_set_config::layer#0 = vera_layer_mode_tile::layer#10 -- vbuaa=vbuz1 - lda.z layer - // [308] vera_layer_set_config::config#0 = vera_layer_mode_tile::config#25 - // [309] call vera_layer_set_config - // [623] phi from vera_layer_mode_tile::@16 to vera_layer_set_config [phi:vera_layer_mode_tile::@16->vera_layer_set_config] - // [623] phi vera_layer_set_config::config#2 = vera_layer_set_config::config#0 [phi:vera_layer_mode_tile::@16->vera_layer_set_config#0] -- register_copy - // [623] phi vera_layer_set_config::layer#2 = vera_layer_set_config::layer#0 [phi:vera_layer_mode_tile::@16->vera_layer_set_config#1] -- register_copy - jsr vera_layer_set_config - // vera_layer_mode_tile::@23 - // WORD0(mapbase_address) - // [310] vera_layer_mode_tile::$1 = word0 vera_layer_mode_tile::mapbase_address#10 -- vwuz1=_word0_vduz2 - lda.z mapbase_address - sta.z __1 - lda.z mapbase_address+1 - sta.z __1+1 - // vera_mapbase_offset[layer] = WORD0(mapbase_address) - // [311] vera_layer_mode_tile::$17 = vera_layer_mode_tile::layer#10 << 1 -- vbuz1=vbuz2_rol_1 - lda.z layer - asl - sta.z __17 - // [312] vera_mapbase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$1 -- pwuc1_derefidx_vbuz1=vwuz2 - // mapbase - tay - lda.z __1 - sta vera_mapbase_offset,y - lda.z __1+1 - sta vera_mapbase_offset+1,y - // BYTE2(mapbase_address) - // [313] vera_layer_mode_tile::$2 = byte2 vera_layer_mode_tile::mapbase_address#10 -- vbuaa=_byte2_vduz1 - lda.z mapbase_address+2 - // vera_mapbase_bank[layer] = BYTE2(mapbase_address) - // [314] vera_mapbase_bank[vera_layer_mode_tile::layer#10] = vera_layer_mode_tile::$2 -- pbuc1_derefidx_vbuz1=vbuaa - ldy.z layer - sta vera_mapbase_bank,y - // vera_mapbase_address[layer] = mapbase_address - // [315] vera_layer_mode_tile::$18 = vera_layer_mode_tile::layer#10 << 2 -- vbuz1=vbuz2_rol_2 - tya - asl - asl - sta.z __18 - // [316] vera_mapbase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::mapbase_address#10 -- pduc1_derefidx_vbuz1=vduz2 - tay - lda.z mapbase_address - sta vera_mapbase_address,y - lda.z mapbase_address+1 - sta vera_mapbase_address+1,y - lda.z mapbase_address+2 - sta vera_mapbase_address+2,y - lda.z mapbase_address+3 - sta vera_mapbase_address+3,y - // mapbase_address = mapbase_address >> 1 - // [317] vera_layer_mode_tile::mapbase_address#0 = vera_layer_mode_tile::mapbase_address#10 >> 1 -- vduz1=vduz1_ror_1 - lsr.z mapbase_address+3 - ror.z mapbase_address+2 - ror.z mapbase_address+1 - ror.z mapbase_address - // byte mapbase = BYTE1(mapbase_address) - // [318] vera_layer_mode_tile::mapbase#0 = byte1 vera_layer_mode_tile::mapbase_address#0 -- vbuxx=_byte1_vduz1 - ldx.z mapbase_address+1 - // vera_layer_set_mapbase(layer,mapbase) - // [319] vera_layer_set_mapbase::layer#0 = vera_layer_mode_tile::layer#10 -- vbuaa=vbuz1 - lda.z layer - // [320] vera_layer_set_mapbase::mapbase#0 = vera_layer_mode_tile::mapbase#0 - // [321] call vera_layer_set_mapbase - // [236] phi from vera_layer_mode_tile::@23 to vera_layer_set_mapbase [phi:vera_layer_mode_tile::@23->vera_layer_set_mapbase] - // [236] phi vera_layer_set_mapbase::mapbase#3 = vera_layer_set_mapbase::mapbase#0 [phi:vera_layer_mode_tile::@23->vera_layer_set_mapbase#0] -- register_copy - // [236] phi vera_layer_set_mapbase::layer#3 = vera_layer_set_mapbase::layer#0 [phi:vera_layer_mode_tile::@23->vera_layer_set_mapbase#1] -- register_copy - jsr vera_layer_set_mapbase - // vera_layer_mode_tile::@24 - // WORD0(tilebase_address) - // [322] vera_layer_mode_tile::$6 = word0 vera_layer_mode_tile::tilebase_address#10 -- vwuz1=_word0_vduz2 - lda.z tilebase_address - sta.z __6 - lda.z tilebase_address+1 - sta.z __6+1 - // vera_tilebase_offset[layer] = WORD0(tilebase_address) - // [323] vera_tilebase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$6 -- pwuc1_derefidx_vbuz1=vwuz2 - // tilebase - ldy.z __17 - lda.z __6 - sta vera_tilebase_offset,y - lda.z __6+1 - sta vera_tilebase_offset+1,y - // BYTE2(tilebase_address) - // [324] vera_layer_mode_tile::$7 = byte2 vera_layer_mode_tile::tilebase_address#10 -- vbuaa=_byte2_vduz1 - lda.z tilebase_address+2 - // vera_tilebase_bank[layer] = BYTE2(tilebase_address) - // [325] vera_tilebase_bank[vera_layer_mode_tile::layer#10] = vera_layer_mode_tile::$7 -- pbuc1_derefidx_vbuz1=vbuaa - ldy.z layer - sta vera_tilebase_bank,y - // vera_tilebase_address[layer] = tilebase_address - // [326] vera_tilebase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::tilebase_address#10 -- pduc1_derefidx_vbuz1=vduz2 - ldy.z __18 - lda.z tilebase_address - sta vera_tilebase_address,y - lda.z tilebase_address+1 - sta vera_tilebase_address+1,y - lda.z tilebase_address+2 - sta vera_tilebase_address+2,y - lda.z tilebase_address+3 - sta vera_tilebase_address+3,y - // tilebase_address = tilebase_address >> 1 - // [327] vera_layer_mode_tile::tilebase_address#0 = vera_layer_mode_tile::tilebase_address#10 >> 1 -- vduz1=vduz1_ror_1 - lsr.z tilebase_address+3 - ror.z tilebase_address+2 - ror.z tilebase_address+1 - ror.z tilebase_address - // byte tilebase = BYTE1(tilebase_address) - // [328] vera_layer_mode_tile::tilebase#0 = byte1 vera_layer_mode_tile::tilebase_address#0 -- vbuaa=_byte1_vduz1 - lda.z tilebase_address+1 - // tilebase &= VERA_LAYER_TILEBASE_MASK - // [329] vera_layer_mode_tile::tilebase#1 = vera_layer_mode_tile::tilebase#0 & VERA_LAYER_TILEBASE_MASK -- vbuxx=vbuaa_band_vbuc1 - and #VERA_LAYER_TILEBASE_MASK - tax - // case 8: - // tilebase |= VERA_TILEBASE_WIDTH_8; - // break; - // [330] if(vera_layer_mode_tile::tilewidth#10==8) goto vera_layer_mode_tile::@19 -- vbuz1_eq_vbuc1_then_la1 - lda #8 - cmp.z tilewidth - beq __b19 - // vera_layer_mode_tile::@17 - // case 16: - // tilebase |= VERA_TILEBASE_WIDTH_16; - // break; - // [331] if(vera_layer_mode_tile::tilewidth#10!=$10) goto vera_layer_mode_tile::@19 -- vbuz1_neq_vbuc1_then_la1 - lda #$10 - cmp.z tilewidth - bne __b19 - // vera_layer_mode_tile::@18 - // tilebase |= VERA_TILEBASE_WIDTH_16 - // [332] vera_layer_mode_tile::tilebase#3 = vera_layer_mode_tile::tilebase#1 | VERA_TILEBASE_WIDTH_16 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_TILEBASE_WIDTH_16 - tax - // [333] phi from vera_layer_mode_tile::@17 vera_layer_mode_tile::@18 vera_layer_mode_tile::@24 to vera_layer_mode_tile::@19 [phi:vera_layer_mode_tile::@17/vera_layer_mode_tile::@18/vera_layer_mode_tile::@24->vera_layer_mode_tile::@19] - // [333] phi vera_layer_mode_tile::tilebase#12 = vera_layer_mode_tile::tilebase#1 [phi:vera_layer_mode_tile::@17/vera_layer_mode_tile::@18/vera_layer_mode_tile::@24->vera_layer_mode_tile::@19#0] -- register_copy - // vera_layer_mode_tile::@19 - __b19: - // case 8: - // tilebase |= VERA_TILEBASE_HEIGHT_8; - // break; - // [334] if(vera_layer_mode_tile::tileheight#10==8) goto vera_layer_mode_tile::@22 -- vbuz1_eq_vbuc1_then_la1 - lda #8 - cmp.z tileheight - beq __b22 - // vera_layer_mode_tile::@20 - // case 16: - // tilebase |= VERA_TILEBASE_HEIGHT_16; - // break; - // [335] if(vera_layer_mode_tile::tileheight#10!=$10) goto vera_layer_mode_tile::@22 -- vbuz1_neq_vbuc1_then_la1 - lda #$10 - cmp.z tileheight - bne __b22 - // vera_layer_mode_tile::@21 - // tilebase |= VERA_TILEBASE_HEIGHT_16 - // [336] vera_layer_mode_tile::tilebase#5 = vera_layer_mode_tile::tilebase#12 | VERA_TILEBASE_HEIGHT_16 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_TILEBASE_HEIGHT_16 - tax - // [337] phi from vera_layer_mode_tile::@19 vera_layer_mode_tile::@20 vera_layer_mode_tile::@21 to vera_layer_mode_tile::@22 [phi:vera_layer_mode_tile::@19/vera_layer_mode_tile::@20/vera_layer_mode_tile::@21->vera_layer_mode_tile::@22] - // [337] phi vera_layer_mode_tile::tilebase#10 = vera_layer_mode_tile::tilebase#12 [phi:vera_layer_mode_tile::@19/vera_layer_mode_tile::@20/vera_layer_mode_tile::@21->vera_layer_mode_tile::@22#0] -- register_copy - // vera_layer_mode_tile::@22 - __b22: - // vera_layer_set_tilebase(layer,tilebase) - // [338] vera_layer_set_tilebase::layer#0 = vera_layer_mode_tile::layer#10 -- vbuaa=vbuz1 - lda.z layer - // [339] vera_layer_set_tilebase::tilebase#0 = vera_layer_mode_tile::tilebase#10 - // [340] call vera_layer_set_tilebase - // [628] phi from vera_layer_mode_tile::@22 to vera_layer_set_tilebase [phi:vera_layer_mode_tile::@22->vera_layer_set_tilebase] - // [628] phi vera_layer_set_tilebase::tilebase#2 = vera_layer_set_tilebase::tilebase#0 [phi:vera_layer_mode_tile::@22->vera_layer_set_tilebase#0] -- register_copy - // [628] phi vera_layer_set_tilebase::layer#2 = vera_layer_set_tilebase::layer#0 [phi:vera_layer_mode_tile::@22->vera_layer_set_tilebase#1] -- register_copy - jsr vera_layer_set_tilebase - // vera_layer_mode_tile::@return - // } - // [341] return - rts - // vera_layer_mode_tile::@14 - __b14: - // config |= VERA_LAYER_HEIGHT_128 - // [342] vera_layer_mode_tile::config#11 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_128 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_HEIGHT_128 - tax - jmp __b16 - // vera_layer_mode_tile::@13 - __b13: - // config |= VERA_LAYER_HEIGHT_64 - // [343] vera_layer_mode_tile::config#10 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_64 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_HEIGHT_64 - tax - jmp __b16 - // vera_layer_mode_tile::@7 - __b7: - // vera_layer_rowshift[layer] = 8 - // [344] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 8 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #8 - ldy.z layer - sta vera_layer_rowshift,y - // vera_layer_rowskip[layer] = 256 - // [345] vera_layer_mode_tile::$13 = vera_layer_mode_tile::layer#10 << 1 -- vbuaa=vbuz1_rol_1 - tya - asl - // [346] vera_layer_rowskip[vera_layer_mode_tile::$13] = $100 -- pwuc1_derefidx_vbuaa=vwuc2 - tay - lda #<$100 - sta vera_layer_rowskip,y - lda #>$100 - sta vera_layer_rowskip+1,y - // [300] phi from vera_layer_mode_tile::@7 to vera_layer_mode_tile::@9 [phi:vera_layer_mode_tile::@7->vera_layer_mode_tile::@9] - // [300] phi vera_layer_mode_tile::config#21 = VERA_LAYER_WIDTH_128 [phi:vera_layer_mode_tile::@7->vera_layer_mode_tile::@9#0] -- vbuxx=vbuc1 - ldx #VERA_LAYER_WIDTH_128 - jmp __b9 - // vera_layer_mode_tile::@6 - __b6: - // vera_layer_rowshift[layer] = 7 - // [347] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 7 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #7 - ldy.z layer - sta vera_layer_rowshift,y - // vera_layer_rowskip[layer] = 128 - // [348] vera_layer_mode_tile::$12 = vera_layer_mode_tile::layer#10 << 1 -- vbuaa=vbuz1_rol_1 - tya - asl - // [349] vera_layer_rowskip[vera_layer_mode_tile::$12] = $80 -- pwuc1_derefidx_vbuaa=vbuc2 - tay - lda #$80 - sta vera_layer_rowskip,y - lda #0 - sta vera_layer_rowskip+1,y - // [300] phi from vera_layer_mode_tile::@6 to vera_layer_mode_tile::@9 [phi:vera_layer_mode_tile::@6->vera_layer_mode_tile::@9] - // [300] phi vera_layer_mode_tile::config#21 = VERA_LAYER_WIDTH_64 [phi:vera_layer_mode_tile::@6->vera_layer_mode_tile::@9#0] -- vbuxx=vbuc1 - ldx #VERA_LAYER_WIDTH_64 - jmp __b9 - // vera_layer_mode_tile::@5 - __b5: - // vera_layer_rowshift[layer] = 6 - // [350] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 6 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #6 - ldy.z layer - sta vera_layer_rowshift,y - // vera_layer_rowskip[layer] = 64 - // [351] vera_layer_mode_tile::$11 = vera_layer_mode_tile::layer#10 << 1 -- vbuaa=vbuz1_rol_1 - tya - asl - // [352] vera_layer_rowskip[vera_layer_mode_tile::$11] = $40 -- pwuc1_derefidx_vbuaa=vbuc2 - tay - lda #$40 - sta vera_layer_rowskip,y - lda #0 - sta vera_layer_rowskip+1,y - jmp __b1 -} - // vera_layer_mode_bitmap -// Set a vera layer in bitmap mode and configure the: -// - layer: Value of 0 or 1. -// - mapbase_address: A dword typed address (4 bytes), that specifies the full address of the map base. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective mapbase vera register. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// - tilebase_address: A dword typed address (4 bytes), that specifies the base address of the tile map. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective tilebase vera register. -// Note that the resulting vera register holds only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// - mapwidth: The width of the map in number of tiles. -// - mapheight: The height of the map in number of tiles. -// - tilewidth: The width of a tile, which can be 8 or 16 pixels. -// - tileheight: The height of a tile, which can be 8 or 16 pixels. -// - color_mode: The color mode, which can be 16 or 256. -// void vera_layer_mode_bitmap(char layer, unsigned long bitmap_address, unsigned int mapwidth, unsigned int color_depth) -vera_layer_mode_bitmap: { - .const layer = 0 - .const bitmap_address = 0 - // config - .const config = VERA_LAYER_COLOR_DEPTH_8BPP|VERA_LAYER_CONFIG_MODE_BITMAP - .const tilebase = 0 - // vera_layer_mode_bitmap::@1 - // vera_tilebase_offset[layer] = WORD0(bitmap_address) - // [354] *vera_tilebase_offset = 0 -- _deref_pwuc1=vwuc2 - // tilebase - lda #<0 - sta vera_tilebase_offset - sta vera_tilebase_offset+1 - // vera_tilebase_bank[layer] = BYTE2(bitmap_address) - // [355] *vera_tilebase_bank = 0 -- _deref_pbuc1=vbuc2 - sta vera_tilebase_bank - // vera_tilebase_address[layer] = bitmap_address - // [356] *vera_tilebase_address = vera_layer_mode_bitmap::bitmap_address#1 -- _deref_pduc1=vduc2 - lda #bitmap_address - sta vera_tilebase_address+1 - lda #>$10 - sta vera_tilebase_address+2 - lda #>bitmap_address>>$10 - sta vera_tilebase_address+3 - // vera_layer_mode_bitmap::vera_display_set_scale_double1 - // *VERA_DC_HSCALE = 64 - // [357] *VERA_DC_HSCALE = $40 -- _deref_pbuc1=vbuc2 - lda #$40 - sta VERA_DC_HSCALE - // *VERA_DC_VSCALE = 64 - // [358] *VERA_DC_VSCALE = $40 -- _deref_pbuc1=vbuc2 - sta VERA_DC_VSCALE - // [359] phi from vera_layer_mode_bitmap::vera_display_set_scale_double1 to vera_layer_mode_bitmap::@2 [phi:vera_layer_mode_bitmap::vera_display_set_scale_double1->vera_layer_mode_bitmap::@2] - // vera_layer_mode_bitmap::@2 - // vera_layer_set_config(layer, config) - // [360] call vera_layer_set_config - // [623] phi from vera_layer_mode_bitmap::@2 to vera_layer_set_config [phi:vera_layer_mode_bitmap::@2->vera_layer_set_config] - // [623] phi vera_layer_set_config::config#2 = vera_layer_mode_bitmap::config#11 [phi:vera_layer_mode_bitmap::@2->vera_layer_set_config#0] -- vbuxx=vbuc1 - ldx #config - // [623] phi vera_layer_set_config::layer#2 = vera_layer_mode_bitmap::layer#0 [phi:vera_layer_mode_bitmap::@2->vera_layer_set_config#1] -- vbuaa=vbuc1 - lda #layer - jsr vera_layer_set_config - // [361] phi from vera_layer_mode_bitmap::@2 to vera_layer_mode_bitmap::@3 [phi:vera_layer_mode_bitmap::@2->vera_layer_mode_bitmap::@3] - // vera_layer_mode_bitmap::@3 - // vera_layer_set_tilebase(layer,tilebase) - // [362] call vera_layer_set_tilebase - // [628] phi from vera_layer_mode_bitmap::@3 to vera_layer_set_tilebase [phi:vera_layer_mode_bitmap::@3->vera_layer_set_tilebase] - // [628] phi vera_layer_set_tilebase::tilebase#2 = vera_layer_mode_bitmap::tilebase#1 [phi:vera_layer_mode_bitmap::@3->vera_layer_set_tilebase#0] -- vbuxx=vbuc1 - ldx #tilebase - // [628] phi vera_layer_set_tilebase::layer#2 = vera_layer_mode_bitmap::layer#0 [phi:vera_layer_mode_bitmap::@3->vera_layer_set_tilebase#1] -- vbuaa=vbuc1 - lda #layer - jsr vera_layer_set_tilebase - // vera_layer_mode_bitmap::@return - // } - // [363] return - rts -} - // clrscr -// clears the screen and moves the cursor to the upper left-hand corner of the screen. -clrscr: { - .label __1 = $87 - .label line_text = $70 - .label color = $87 - // char* line_text = CONIO_SCREEN_TEXT - // [364] clrscr::line_text#0 = (char *)CONIO_SCREEN_TEXT#17 -- pbuz1=pbuz2 - lda.z CONIO_SCREEN_TEXT_1 - sta.z line_text - lda.z CONIO_SCREEN_TEXT_1+1 - sta.z line_text+1 - // vera_layer_get_backcolor(conio_screen_layer) - // [365] vera_layer_get_backcolor::layer#0 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [366] call vera_layer_get_backcolor - jsr vera_layer_get_backcolor - // [367] vera_layer_get_backcolor::return#0 = vera_layer_get_backcolor::return#1 - // clrscr::@7 - // [368] clrscr::$0 = vera_layer_get_backcolor::return#0 - // vera_layer_get_backcolor(conio_screen_layer) << 4 - // [369] clrscr::$1 = clrscr::$0 << 4 -- vbuz1=vbuaa_rol_4 - asl - asl - asl - asl - sta.z __1 - // vera_layer_get_textcolor(conio_screen_layer) - // [370] vera_layer_get_textcolor::layer#0 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [371] call vera_layer_get_textcolor - jsr vera_layer_get_textcolor - // [372] vera_layer_get_textcolor::return#0 = vera_layer_get_textcolor::return#1 - // clrscr::@8 - // [373] clrscr::$2 = vera_layer_get_textcolor::return#0 - // char color = ( vera_layer_get_backcolor(conio_screen_layer) << 4 ) | vera_layer_get_textcolor(conio_screen_layer) - // [374] clrscr::color#0 = clrscr::$1 | clrscr::$2 -- vbuz1=vbuz1_bor_vbuaa - ora.z color - sta.z color - // [375] phi from clrscr::@8 to clrscr::@1 [phi:clrscr::@8->clrscr::@1] - // [375] phi clrscr::line_text#2 = clrscr::line_text#0 [phi:clrscr::@8->clrscr::@1#0] -- register_copy - // [375] phi clrscr::l#2 = 0 [phi:clrscr::@8->clrscr::@1#1] -- vbuxx=vbuc1 - ldx #0 - // clrscr::@1 - __b1: - // for( char l=0;lclrscr::@4] - // [389] phi clrscr::c#2 = 0 [phi:clrscr::@2->clrscr::@4#0] -- vbuyy=vbuc1 - ldy #0 - // clrscr::@4 - __b4: - // for( char c=0;cclrscr::@1] - // [375] phi clrscr::line_text#2 = clrscr::line_text#1 [phi:clrscr::@6->clrscr::@1#0] -- register_copy - // [375] phi clrscr::l#2 = clrscr::l#1 [phi:clrscr::@6->clrscr::@1#1] -- register_copy - jmp __b1 - // clrscr::@5 - __b5: - // *VERA_DATA0 = ' ' - // [393] *VERA_DATA0 = ' ' -- _deref_pbuc1=vbuc2 - lda #' ' - sta VERA_DATA0 - // *VERA_DATA0 = color - // [394] *VERA_DATA0 = clrscr::color#0 -- _deref_pbuc1=vbuz1 - lda.z color - sta VERA_DATA0 - // for( char c=0;cclrscr::@4] - // [389] phi clrscr::c#2 = clrscr::c#1 [phi:clrscr::@5->clrscr::@4#0] -- register_copy - jmp __b4 -} - // printf_str -/// Print a NUL-terminated string -// void printf_str(void (*putc)(char), __zp($4d) const char *s) -printf_str: { - .label s = $4d - // [397] phi from printf_str printf_str::@2 to printf_str::@1 [phi:printf_str/printf_str::@2->printf_str::@1] - // [397] phi printf_str::s#8 = printf_str::s#9 [phi:printf_str/printf_str::@2->printf_str::@1#0] -- register_copy - // printf_str::@1 - __b1: - // while(c=*s++) - // [398] printf_str::c#1 = *printf_str::s#8 -- vbuaa=_deref_pbuz1 - ldy #0 - lda (s),y - // [399] printf_str::s#0 = ++ printf_str::s#8 -- pbuz1=_inc_pbuz1 - inc.z s - bne !+ - inc.z s+1 - !: - // [400] if(0!=printf_str::c#1) goto printf_str::@2 -- 0_neq_vbuaa_then_la1 - cmp #0 - bne __b2 - // printf_str::@return - // } - // [401] return - rts - // printf_str::@2 - __b2: - // putc(c) - // [402] stackpush(char) = printf_str::c#1 -- _stackpushbyte_=vbuaa - pha - // [403] callexecute cputc -- call_vprc1 - jsr cputc - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - jmp __b1 -} - // bitmap_init -// Initialize the bitmap plotter tables for a specific bitmap -// void bitmap_init(char layer, unsigned long address) -bitmap_init: { - .const layer = 0 - .const address = 0 - .label __7 = $81 - .label __10 = $83 - .label __13 = $85 - .label __23 = $37 - .label __24 = $39 - .label __25 = $3b - .label __26 = $3d - .label __28 = $3f - .label vera_layer_get_color_depth1_config = $9b - .label bitmask = $21 - .label bitshift = $20 - .label x = $67 - .label hdelta = $a3 - .label yoffs = $6a - .label y = $47 - .label __29 = $37 - .label __30 = $51 - .label __31 = $53 - .label __32 = $39 - .label __33 = $55 - .label __34 = $57 - .label __35 = $3b - .label __36 = $59 - .label __37 = $5b - .label __38 = $3d - .label __39 = $5d - .label __40 = $5f - .label __41 = $3f - // __bitmap_address = address - // [405] __bitmap_address = bitmap_init::address#0 -- vduz1=vduc1 - lda #
address - sta.z __bitmap_address+1 - lda #
>$10 - sta.z __bitmap_address+2 - lda #>address>>$10 - sta.z __bitmap_address+3 - // __bitmap_layer = layer - // [406] __bitmap_layer = bitmap_init::layer#0 -- vbuz1=vbuc1 - lda #layer - sta.z __bitmap_layer - // vera_layer_get_color_depth(__bitmap_layer) - // [407] bitmap_init::vera_layer_get_color_depth1_layer#0 = __bitmap_layer -- vbuaa=vbuz1 - // bitmap_init::vera_layer_get_color_depth1 - // byte* config = vera_layer_config[layer] - // [408] bitmap_init::vera_layer_get_color_depth1_$1 = bitmap_init::vera_layer_get_color_depth1_layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [409] bitmap_init::vera_layer_get_color_depth1_config#0 = vera_layer_config[bitmap_init::vera_layer_get_color_depth1_$1] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_config,y - sta.z vera_layer_get_color_depth1_config - lda vera_layer_config+1,y - sta.z vera_layer_get_color_depth1_config+1 - // *config & VERA_LAYER_COLOR_DEPTH_MASK - // [410] bitmap_init::vera_layer_get_color_depth1_$0 = *bitmap_init::vera_layer_get_color_depth1_config#0 & VERA_LAYER_COLOR_DEPTH_MASK -- vbuaa=_deref_pbuz1_band_vbuc1 - lda #VERA_LAYER_COLOR_DEPTH_MASK - ldy #0 - and (vera_layer_get_color_depth1_config),y - // return (*config & VERA_LAYER_COLOR_DEPTH_MASK); - // [411] bitmap_init::vera_layer_get_color_depth1_return#0 = bitmap_init::vera_layer_get_color_depth1_$0 - // bitmap_init::vera_layer_get_color_depth1_@return - // } - // [412] bitmap_init::vera_layer_get_color_depth1_return#1 = bitmap_init::vera_layer_get_color_depth1_return#0 - // bitmap_init::@16 - // vera_layer_get_color_depth(__bitmap_layer) - // [413] bitmap_init::$0 = bitmap_init::vera_layer_get_color_depth1_return#1 - // __bitmap_color_depth = vera_layer_get_color_depth(__bitmap_layer) - // [414] __bitmap_color_depth = bitmap_init::$0 -- vbuz1=vbuaa - sta.z __bitmap_color_depth - // vera_display_get_hscale() - // [415] call vera_display_get_hscale - // [637] phi from bitmap_init::@16 to vera_display_get_hscale [phi:bitmap_init::@16->vera_display_get_hscale] - jsr vera_display_get_hscale - // vera_display_get_hscale() - // [416] vera_display_get_hscale::return#2 = vera_display_get_hscale::return#0 - // bitmap_init::@17 - // [417] bitmap_init::$1 = vera_display_get_hscale::return#2 - // __bitmap_hscale = vera_display_get_hscale() - // [418] __bitmap_hscale = bitmap_init::$1 -- vbuz1=vbuxx - stx.z __bitmap_hscale - // vera_display_get_vscale() - // [419] call vera_display_get_vscale - // [644] phi from bitmap_init::@17 to vera_display_get_vscale [phi:bitmap_init::@17->vera_display_get_vscale] - jsr vera_display_get_vscale - // vera_display_get_vscale() - // [420] vera_display_get_vscale::return#2 = vera_display_get_vscale::return#0 - // bitmap_init::@18 - // [421] bitmap_init::$2 = vera_display_get_vscale::return#2 - // __bitmap_vscale = vera_display_get_vscale() - // [422] __bitmap_vscale = bitmap_init::$2 -- vbuz1=vbuxx - // Returns 1 when 640 and 2 when 320. - stx.z __bitmap_vscale - // byte bitmask = bitmasks[__bitmap_color_depth] - // [423] bitmap_init::bitmask#0 = bitmasks[__bitmap_color_depth] -- vbuz1=pbuc1_derefidx_vbuz2 - // Returns 1 when 480 and 2 when 240. - ldy.z __bitmap_color_depth - lda bitmasks,y - sta.z bitmask - // signed byte bitshift = bitshifts[__bitmap_color_depth] - // [424] bitmap_init::bitshift#0 = bitshifts[__bitmap_color_depth] -- vbsz1=pbsc1_derefidx_vbuz2 - lda bitshifts,y - sta.z bitshift - // [425] phi from bitmap_init::@18 to bitmap_init::@1 [phi:bitmap_init::@18->bitmap_init::@1] - // [425] phi bitmap_init::bitshift#10 = bitmap_init::bitshift#0 [phi:bitmap_init::@18->bitmap_init::@1#0] -- register_copy - // [425] phi bitmap_init::bitmask#10 = bitmap_init::bitmask#0 [phi:bitmap_init::@18->bitmap_init::@1#1] -- register_copy - // [425] phi bitmap_init::x#10 = 0 [phi:bitmap_init::@18->bitmap_init::@1#2] -- vwuz1=vwuc1 - lda #<0 - sta.z x - sta.z x+1 - // [425] phi from bitmap_init::@7 to bitmap_init::@1 [phi:bitmap_init::@7->bitmap_init::@1] - // [425] phi bitmap_init::bitshift#10 = bitmap_init::bitshift#14 [phi:bitmap_init::@7->bitmap_init::@1#0] -- register_copy - // [425] phi bitmap_init::bitmask#10 = bitmap_init::bitmask#16 [phi:bitmap_init::@7->bitmap_init::@1#1] -- register_copy - // [425] phi bitmap_init::x#10 = bitmap_init::x#1 [phi:bitmap_init::@7->bitmap_init::@1#2] -- register_copy - // bitmap_init::@1 - __b1: - // if(__bitmap_color_depth==0) - // [426] if(__bitmap_color_depth!=0) goto bitmap_init::@2 -- vbuz1_neq_0_then_la1 - lda.z __bitmap_color_depth - bne __b2 - // bitmap_init::@8 - // x >> 3 - // [427] bitmap_init::$7 = bitmap_init::x#10 >> 3 -- vwuz1=vwuz2_ror_3 - lda.z x+1 - lsr - sta.z __7+1 - lda.z x - ror - sta.z __7 - lsr.z __7+1 - ror.z __7 - lsr.z __7+1 - ror.z __7 - // __bitmap_plot_x[x] = (x >> 3) - // [428] bitmap_init::$23 = bitmap_init::x#10 << 1 -- vwuz1=vwuz2_rol_1 - lda.z x - asl - sta.z __23 - lda.z x+1 - rol - sta.z __23+1 - // [429] bitmap_init::$29 = __bitmap_plot_x + bitmap_init::$23 -- pwuz1=pwuc1_plus_vwuz1 - lda.z __29 - clc - adc #<__bitmap_plot_x - sta.z __29 - lda.z __29+1 - adc #>__bitmap_plot_x - sta.z __29+1 - // [430] *bitmap_init::$29 = bitmap_init::$7 -- _deref_pwuz1=vwuz2 - ldy #0 - lda.z __7 - sta (__29),y - iny - lda.z __7+1 - sta (__29),y - // __bitmap_plot_bitmask[x] = bitmask - // [431] bitmap_init::$30 = __bitmap_plot_bitmask + bitmap_init::x#10 -- pbuz1=pbuc1_plus_vwuz2 - lda.z x - clc - adc #<__bitmap_plot_bitmask - sta.z __30 - lda.z x+1 - adc #>__bitmap_plot_bitmask - sta.z __30+1 - // [432] *bitmap_init::$30 = bitmap_init::bitmask#10 -- _deref_pbuz1=vbuz2 - lda.z bitmask - ldy #0 - sta (__30),y - // __bitmap_plot_bitshift[x] = (byte)bitshift - // [433] bitmap_init::$31 = __bitmap_plot_bitshift + bitmap_init::x#10 -- pbuz1=pbuc1_plus_vwuz2 - lda.z x - clc - adc #<__bitmap_plot_bitshift - sta.z __31 - lda.z x+1 - adc #>__bitmap_plot_bitshift - sta.z __31+1 - // [434] *bitmap_init::$31 = (char)bitmap_init::bitshift#10 -- _deref_pbuz1=vbuz2 - lda.z bitshift - sta (__31),y - // bitshift -= 1 - // [435] bitmap_init::bitshift#1 = bitmap_init::bitshift#10 - 1 -- vbsz1=vbsz1_minus_1 - dec.z bitshift - // bitmask >>= 1 - // [436] bitmap_init::bitmask#1 = bitmap_init::bitmask#10 >> 1 -- vbuz1=vbuz1_ror_1 - lsr.z bitmask - // [437] phi from bitmap_init::@1 bitmap_init::@8 to bitmap_init::@2 [phi:bitmap_init::@1/bitmap_init::@8->bitmap_init::@2] - // [437] phi bitmap_init::bitshift#11 = bitmap_init::bitshift#10 [phi:bitmap_init::@1/bitmap_init::@8->bitmap_init::@2#0] -- register_copy - // [437] phi bitmap_init::bitmask#11 = bitmap_init::bitmask#10 [phi:bitmap_init::@1/bitmap_init::@8->bitmap_init::@2#1] -- register_copy - // bitmap_init::@2 - __b2: - // if(__bitmap_color_depth==1) - // [438] if(__bitmap_color_depth!=1) goto bitmap_init::@3 -- vbuz1_neq_vbuc1_then_la1 - lda #1 - cmp.z __bitmap_color_depth - bne __b3 - // bitmap_init::@9 - // x >> 2 - // [439] bitmap_init::$10 = bitmap_init::x#10 >> 2 -- vwuz1=vwuz2_ror_2 - lda.z x+1 - lsr - sta.z __10+1 - lda.z x - ror - sta.z __10 - lsr.z __10+1 - ror.z __10 - // __bitmap_plot_x[x] = (x >> 2) - // [440] bitmap_init::$24 = bitmap_init::x#10 << 1 -- vwuz1=vwuz2_rol_1 - lda.z x - asl - sta.z __24 - lda.z x+1 - rol - sta.z __24+1 - // [441] bitmap_init::$32 = __bitmap_plot_x + bitmap_init::$24 -- pwuz1=pwuc1_plus_vwuz1 - lda.z __32 - clc - adc #<__bitmap_plot_x - sta.z __32 - lda.z __32+1 - adc #>__bitmap_plot_x - sta.z __32+1 - // [442] *bitmap_init::$32 = bitmap_init::$10 -- _deref_pwuz1=vwuz2 - ldy #0 - lda.z __10 - sta (__32),y - iny - lda.z __10+1 - sta (__32),y - // __bitmap_plot_bitmask[x] = bitmask - // [443] bitmap_init::$33 = __bitmap_plot_bitmask + bitmap_init::x#10 -- pbuz1=pbuc1_plus_vwuz2 - lda.z x - clc - adc #<__bitmap_plot_bitmask - sta.z __33 - lda.z x+1 - adc #>__bitmap_plot_bitmask - sta.z __33+1 - // [444] *bitmap_init::$33 = bitmap_init::bitmask#11 -- _deref_pbuz1=vbuz2 - lda.z bitmask - ldy #0 - sta (__33),y - // __bitmap_plot_bitshift[x] = (byte)bitshift - // [445] bitmap_init::$34 = __bitmap_plot_bitshift + bitmap_init::x#10 -- pbuz1=pbuc1_plus_vwuz2 - lda.z x - clc - adc #<__bitmap_plot_bitshift - sta.z __34 - lda.z x+1 - adc #>__bitmap_plot_bitshift - sta.z __34+1 - // [446] *bitmap_init::$34 = (char)bitmap_init::bitshift#11 -- _deref_pbuz1=vbuz2 - lda.z bitshift - sta (__34),y - // bitshift -= 2 - // [447] bitmap_init::bitshift#2 = bitmap_init::bitshift#11 - 2 -- vbsz1=vbsz1_minus_2 - dec.z bitshift - dec.z bitshift - // bitmask >>= 2 - // [448] bitmap_init::bitmask#2 = bitmap_init::bitmask#11 >> 2 -- vbuz1=vbuz1_ror_2 - lda.z bitmask - lsr - lsr - sta.z bitmask - // [449] phi from bitmap_init::@2 bitmap_init::@9 to bitmap_init::@3 [phi:bitmap_init::@2/bitmap_init::@9->bitmap_init::@3] - // [449] phi bitmap_init::bitshift#12 = bitmap_init::bitshift#11 [phi:bitmap_init::@2/bitmap_init::@9->bitmap_init::@3#0] -- register_copy - // [449] phi bitmap_init::bitmask#12 = bitmap_init::bitmask#11 [phi:bitmap_init::@2/bitmap_init::@9->bitmap_init::@3#1] -- register_copy - // bitmap_init::@3 - __b3: - // if(__bitmap_color_depth==2) - // [450] if(__bitmap_color_depth!=2) goto bitmap_init::@4 -- vbuz1_neq_vbuc1_then_la1 - lda #2 - cmp.z __bitmap_color_depth - bne __b4 - // bitmap_init::@10 - // x >> 1 - // [451] bitmap_init::$13 = bitmap_init::x#10 >> 1 -- vwuz1=vwuz2_ror_1 - lda.z x+1 - lsr - sta.z __13+1 - lda.z x - ror - sta.z __13 - // __bitmap_plot_x[x] = (x >> 1) - // [452] bitmap_init::$25 = bitmap_init::x#10 << 1 -- vwuz1=vwuz2_rol_1 - lda.z x - asl - sta.z __25 - lda.z x+1 - rol - sta.z __25+1 - // [453] bitmap_init::$35 = __bitmap_plot_x + bitmap_init::$25 -- pwuz1=pwuc1_plus_vwuz1 - lda.z __35 - clc - adc #<__bitmap_plot_x - sta.z __35 - lda.z __35+1 - adc #>__bitmap_plot_x - sta.z __35+1 - // [454] *bitmap_init::$35 = bitmap_init::$13 -- _deref_pwuz1=vwuz2 - ldy #0 - lda.z __13 - sta (__35),y - iny - lda.z __13+1 - sta (__35),y - // __bitmap_plot_bitmask[x] = bitmask - // [455] bitmap_init::$36 = __bitmap_plot_bitmask + bitmap_init::x#10 -- pbuz1=pbuc1_plus_vwuz2 - lda.z x - clc - adc #<__bitmap_plot_bitmask - sta.z __36 - lda.z x+1 - adc #>__bitmap_plot_bitmask - sta.z __36+1 - // [456] *bitmap_init::$36 = bitmap_init::bitmask#12 -- _deref_pbuz1=vbuz2 - lda.z bitmask - ldy #0 - sta (__36),y - // __bitmap_plot_bitshift[x] = (byte)bitshift - // [457] bitmap_init::$37 = __bitmap_plot_bitshift + bitmap_init::x#10 -- pbuz1=pbuc1_plus_vwuz2 - lda.z x - clc - adc #<__bitmap_plot_bitshift - sta.z __37 - lda.z x+1 - adc #>__bitmap_plot_bitshift - sta.z __37+1 - // [458] *bitmap_init::$37 = (char)bitmap_init::bitshift#12 -- _deref_pbuz1=vbuz2 - lda.z bitshift - sta (__37),y - // bitshift -= 4 - // [459] bitmap_init::bitshift#3 = bitmap_init::bitshift#12 - 4 -- vbsz1=vbsz1_minus_vbsc1 - sec - sbc #4 - sta.z bitshift - // bitmask >>= 4 - // [460] bitmap_init::bitmask#3 = bitmap_init::bitmask#12 >> 4 -- vbuz1=vbuz1_ror_4 - lda.z bitmask - lsr - lsr - lsr - lsr - sta.z bitmask - // [461] phi from bitmap_init::@10 bitmap_init::@3 to bitmap_init::@4 [phi:bitmap_init::@10/bitmap_init::@3->bitmap_init::@4] - // [461] phi bitmap_init::bitmask#13 = bitmap_init::bitmask#3 [phi:bitmap_init::@10/bitmap_init::@3->bitmap_init::@4#0] -- register_copy - // [461] phi bitmap_init::bitshift#13 = bitmap_init::bitshift#3 [phi:bitmap_init::@10/bitmap_init::@3->bitmap_init::@4#1] -- register_copy - // bitmap_init::@4 - __b4: - // if(__bitmap_color_depth==3) - // [462] if(__bitmap_color_depth!=3) goto bitmap_init::@5 -- vbuz1_neq_vbuc1_then_la1 - lda #3 - cmp.z __bitmap_color_depth - bne __b5 - // bitmap_init::@11 - // __bitmap_plot_x[x] = x - // [463] bitmap_init::$26 = bitmap_init::x#10 << 1 -- vwuz1=vwuz2_rol_1 - lda.z x - asl - sta.z __26 - lda.z x+1 - rol - sta.z __26+1 - // [464] bitmap_init::$38 = __bitmap_plot_x + bitmap_init::$26 -- pwuz1=pwuc1_plus_vwuz1 - lda.z __38 - clc - adc #<__bitmap_plot_x - sta.z __38 - lda.z __38+1 - adc #>__bitmap_plot_x - sta.z __38+1 - // [465] *bitmap_init::$38 = bitmap_init::x#10 -- _deref_pwuz1=vwuz2 - ldy #0 - lda.z x - sta (__38),y - iny - lda.z x+1 - sta (__38),y - // __bitmap_plot_bitmask[x] = bitmask - // [466] bitmap_init::$39 = __bitmap_plot_bitmask + bitmap_init::x#10 -- pbuz1=pbuc1_plus_vwuz2 - lda.z x - clc - adc #<__bitmap_plot_bitmask - sta.z __39 - lda.z x+1 - adc #>__bitmap_plot_bitmask - sta.z __39+1 - // [467] *bitmap_init::$39 = bitmap_init::bitmask#13 -- _deref_pbuz1=vbuz2 - lda.z bitmask - ldy #0 - sta (__39),y - // __bitmap_plot_bitshift[x] = (byte)bitshift - // [468] bitmap_init::$40 = __bitmap_plot_bitshift + bitmap_init::x#10 -- pbuz1=pbuc1_plus_vwuz2 - lda.z x - clc - adc #<__bitmap_plot_bitshift - sta.z __40 - lda.z x+1 - adc #>__bitmap_plot_bitshift - sta.z __40+1 - // [469] *bitmap_init::$40 = (char)bitmap_init::bitshift#13 -- _deref_pbuz1=vbuz2 - lda.z bitshift - sta (__40),y - // bitmap_init::@5 - __b5: - // if(bitshift<0) - // [470] if(bitmap_init::bitshift#13>=0) goto bitmap_init::@6 -- vbsz1_ge_0_then_la1 - lda.z bitshift - cmp #0 - bpl __b6 - // bitmap_init::@12 - // bitshift = bitshifts[__bitmap_color_depth] - // [471] bitmap_init::bitshift#4 = bitshifts[__bitmap_color_depth] -- vbsz1=pbsc1_derefidx_vbuz2 - ldy.z __bitmap_color_depth - lda bitshifts,y - sta.z bitshift - // [472] phi from bitmap_init::@12 bitmap_init::@5 to bitmap_init::@6 [phi:bitmap_init::@12/bitmap_init::@5->bitmap_init::@6] - // [472] phi bitmap_init::bitshift#14 = bitmap_init::bitshift#4 [phi:bitmap_init::@12/bitmap_init::@5->bitmap_init::@6#0] -- register_copy - // bitmap_init::@6 - __b6: - // if(bitmask==0) - // [473] if(bitmap_init::bitmask#13!=0) goto bitmap_init::@7 -- vbuz1_neq_0_then_la1 - lda.z bitmask - bne __b7 - // bitmap_init::@13 - // bitmask = bitmasks[__bitmap_color_depth] - // [474] bitmap_init::bitmask#4 = bitmasks[__bitmap_color_depth] -- vbuz1=pbuc1_derefidx_vbuz2 - ldy.z __bitmap_color_depth - lda bitmasks,y - sta.z bitmask - // [475] phi from bitmap_init::@13 bitmap_init::@6 to bitmap_init::@7 [phi:bitmap_init::@13/bitmap_init::@6->bitmap_init::@7] - // [475] phi bitmap_init::bitmask#16 = bitmap_init::bitmask#4 [phi:bitmap_init::@13/bitmap_init::@6->bitmap_init::@7#0] -- register_copy - // bitmap_init::@7 - __b7: - // for(word x : 0..639) - // [476] bitmap_init::x#1 = ++ bitmap_init::x#10 -- vwuz1=_inc_vwuz1 - inc.z x - bne !+ - inc.z x+1 - !: - // [477] if(bitmap_init::x#1!=$280) goto bitmap_init::@1 -- vwuz1_neq_vwuc1_then_la1 - lda.z x+1 - cmp #>$280 - beq !__b1+ - jmp __b1 - !__b1: - lda.z x - cmp #<$280 - beq !__b1+ - jmp __b1 - !__b1: - // bitmap_init::@14 - // __bitmap_color_depth<<2 - // [478] bitmap_init::$3 = __bitmap_color_depth << 2 -- vbuaa=vbuz1_rol_2 - lda.z __bitmap_color_depth - asl - asl - // (__bitmap_color_depth<<2)+__bitmap_hscale - // [479] bitmap_init::$4 = bitmap_init::$3 + __bitmap_hscale -- vbuaa=vbuaa_plus_vbuz1 - clc - adc.z __bitmap_hscale - // word hdelta = hdeltas[(__bitmap_color_depth<<2)+__bitmap_hscale] - // [480] bitmap_init::$27 = bitmap_init::$4 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [481] bitmap_init::hdelta#0 = hdeltas[bitmap_init::$27] -- vwuz1=pwuc1_derefidx_vbuaa - // This sets the right delta to skip a whole line based on the scale, depending on the color depth. - tay - lda hdeltas,y - sta.z hdelta - lda hdeltas+1,y - sta.z hdelta+1 - // dword yoffs = __bitmap_address - // [482] bitmap_init::yoffs#0 = __bitmap_address -- vduz1=vduz2 - // We start at the bitmap address; The plot_y contains the bitmap address embedded so we know where a line starts. - lda.z __bitmap_address - sta.z yoffs - lda.z __bitmap_address+1 - sta.z yoffs+1 - lda.z __bitmap_address+2 - sta.z yoffs+2 - lda.z __bitmap_address+3 - sta.z yoffs+3 - // [483] phi from bitmap_init::@14 to bitmap_init::@15 [phi:bitmap_init::@14->bitmap_init::@15] - // [483] phi bitmap_init::yoffs#2 = bitmap_init::yoffs#0 [phi:bitmap_init::@14->bitmap_init::@15#0] -- register_copy - // [483] phi bitmap_init::y#2 = 0 [phi:bitmap_init::@14->bitmap_init::@15#1] -- vwuz1=vwuc1 - lda #<0 - sta.z y - sta.z y+1 - // [483] phi from bitmap_init::@15 to bitmap_init::@15 [phi:bitmap_init::@15->bitmap_init::@15] - // [483] phi bitmap_init::yoffs#2 = bitmap_init::yoffs#1 [phi:bitmap_init::@15->bitmap_init::@15#0] -- register_copy - // [483] phi bitmap_init::y#2 = bitmap_init::y#1 [phi:bitmap_init::@15->bitmap_init::@15#1] -- register_copy - // bitmap_init::@15 - __b15: - // __bitmap_plot_y[y] = yoffs - // [484] bitmap_init::$28 = bitmap_init::y#2 << 2 -- vwuz1=vwuz2_rol_2 - lda.z y - asl - sta.z __28 - lda.z y+1 - rol - sta.z __28+1 - asl.z __28 - rol.z __28+1 - // [485] bitmap_init::$41 = __bitmap_plot_y + bitmap_init::$28 -- pduz1=pduc1_plus_vwuz1 - lda.z __41 - clc - adc #<__bitmap_plot_y - sta.z __41 - lda.z __41+1 - adc #>__bitmap_plot_y - sta.z __41+1 - // [486] *bitmap_init::$41 = bitmap_init::yoffs#2 -- _deref_pduz1=vduz2 - ldy #0 - lda.z yoffs - sta (__41),y - iny - lda.z yoffs+1 - sta (__41),y - iny - lda.z yoffs+2 - sta (__41),y - iny - lda.z yoffs+3 - sta (__41),y - // yoffs = yoffs + hdelta - // [487] bitmap_init::yoffs#1 = bitmap_init::yoffs#2 + bitmap_init::hdelta#0 -- vduz1=vduz1_plus_vwuz2 - lda.z yoffs - clc - adc.z hdelta - sta.z yoffs - lda.z yoffs+1 - adc.z hdelta+1 - sta.z yoffs+1 - lda.z yoffs+2 - adc #0 - sta.z yoffs+2 - lda.z yoffs+3 - adc #0 - sta.z yoffs+3 - // for(word y : 0..479) - // [488] bitmap_init::y#1 = ++ bitmap_init::y#2 -- vwuz1=_inc_vwuz1 - inc.z y - bne !+ - inc.z y+1 - !: - // [489] if(bitmap_init::y#1!=$1e0) goto bitmap_init::@15 -- vwuz1_neq_vwuc1_then_la1 - lda.z y+1 - cmp #>$1e0 - bne __b15 - lda.z y - cmp #<$1e0 - bne __b15 - // bitmap_init::@return - // } - // [490] return - rts -} - // bitmap_clear -// Clear all graphics on the bitmap -bitmap_clear: { - .label vdelta = $a1 - .label hdelta = $9d - .label count = $72 - .label vdest = $91 - // word vdelta = vdeltas[__bitmap_vscale] - // [491] bitmap_clear::$6 = __bitmap_vscale << 1 -- vbuaa=vbuz1_rol_1 - lda.z __bitmap_vscale - asl - // [492] bitmap_clear::vdelta#0 = vdeltas[bitmap_clear::$6] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda vdeltas,y - sta.z vdelta - lda vdeltas+1,y - sta.z vdelta+1 - // __bitmap_color_depth<<2 - // [493] bitmap_clear::$0 = __bitmap_color_depth << 2 -- vbuaa=vbuz1_rol_2 - lda.z __bitmap_color_depth - asl - asl - // (__bitmap_color_depth<<2)+__bitmap_hscale - // [494] bitmap_clear::$1 = bitmap_clear::$0 + __bitmap_hscale -- vbuaa=vbuaa_plus_vbuz1 - clc - adc.z __bitmap_hscale - // word hdelta = hdeltas[(__bitmap_color_depth<<2)+__bitmap_hscale] - // [495] bitmap_clear::$7 = bitmap_clear::$1 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [496] bitmap_clear::hdelta#0 = hdeltas[bitmap_clear::$7] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda hdeltas,y - sta.z hdelta - lda hdeltas+1,y - sta.z hdelta+1 - // dword count = mul16u(hdelta,vdelta) - // [497] mul16u::a#0 = bitmap_clear::hdelta#0 -- vwuz1=vwuz2 - lda.z hdelta - sta.z mul16u.a - lda.z hdelta+1 - sta.z mul16u.a+1 - // [498] mul16u::b#0 = bitmap_clear::vdelta#0 - // [499] call mul16u - jsr mul16u - // [500] mul16u::return#0 = mul16u::res#2 -- vduz1=vduz2 - lda.z mul16u.res - sta.z mul16u.return - lda.z mul16u.res+1 - sta.z mul16u.return+1 - lda.z mul16u.res+2 - sta.z mul16u.return+2 - lda.z mul16u.res+3 - sta.z mul16u.return+3 - // bitmap_clear::@1 - // [501] bitmap_clear::count#0 = mul16u::return#0 - // char vbank = BYTE2(__bitmap_address) - // [502] bitmap_clear::vbank#0 = byte2 __bitmap_address -- vbuxx=_byte2_vduz1 - ldx.z __bitmap_address+2 - // WORD0(__bitmap_address) - // [503] bitmap_clear::vdest#0 = word0 __bitmap_address -- vwuz1=_word0_vduz2 - lda.z __bitmap_address - sta.z vdest - lda.z __bitmap_address+1 - sta.z vdest+1 - // memset_vram(vbank, vdest, 0, count) - // [504] memset_vram::vbank#0 = bitmap_clear::vbank#0 - // [505] memset_vram::vdest#0 = (void *)bitmap_clear::vdest#0 - // [506] memset_vram::num#0 = bitmap_clear::count#0 - // [507] call memset_vram - jsr memset_vram - // bitmap_clear::@return - // } - // [508] return - rts -} - // kbhit -// Return true if there's a key waiting, return false if not -kbhit: { - .label chptr = ch - .label IN_DEV = $28a - // Current input device number - .label GETIN = $ffe4 - .label ch = $32 - // char ch = 0 - // [509] kbhit::ch = 0 -- vbuz1=vbuc1 - lda #0 - sta.z ch - // kickasm - // kickasm( uses kbhit::chptr uses kbhit::IN_DEV uses kbhit::GETIN) {{ jsr _kbhit bne L3 jmp continue1 .var via1 = $9f60 //VIA#1 .var d1pra = via1+1 _kbhit: ldy d1pra // The count of keys pressed is stored in RAM bank 0. stz d1pra // Set d1pra to zero to access RAM bank 0. lda $A00A // Get number of characters from this address in the ROM of the CX16 (ROM 38). sty d1pra // Set d1pra to previous value. rts L3: ldy IN_DEV // Save current input device stz IN_DEV // Keyboard phy jsr GETIN // Read char, and return in .A ply sta chptr // Store the character read in ch sty IN_DEV // Restore input device ldx #>$0000 rts continue1: nop }} - // CBM GETIN API - jsr _kbhit - bne L3 - - jmp continue1 - - .var via1 = $9f60 //VIA#1 - .var d1pra = via1+1 - - _kbhit: - ldy d1pra // The count of keys pressed is stored in RAM bank 0. - stz d1pra // Set d1pra to zero to access RAM bank 0. - lda $A00A // Get number of characters from this address in the ROM of the CX16 (ROM 38). - sty d1pra // Set d1pra to previous value. - rts - - L3: - ldy IN_DEV // Save current input device - stz IN_DEV // Keyboard - phy - jsr GETIN // Read char, and return in .A - ply - sta chptr // Store the character read in ch - sty IN_DEV // Restore input device - ldx #>$0000 - rts - - continue1: - nop - - // return ch; - // [511] kbhit::return#0 = kbhit::ch -- vbuaa=vbuz1 - lda.z ch - // kbhit::@return - // } - // [512] kbhit::return#1 = kbhit::return#0 - // [513] return - rts -} - // bitmap_line -// Draw a line on the bitmap -// void bitmap_line(__zp(6) unsigned int x0, __zp($a) unsigned int x1, __zp(8) unsigned int y0, __zp(2) unsigned int y1, __register(X) char c) -bitmap_line: { - .label xd = $22 - .label yd = $29 - .label yd_1 = $27 - .label x0 = 6 - .label x1 = $a - .label y0 = 8 - .label y1 = 2 - // if(x0bitmap_line_ydxi] - // [673] phi bitmap_line_ydxi::y1#6 = bitmap_line_ydxi::y1#0 [phi:bitmap_line::@4->bitmap_line_ydxi#0] -- register_copy - // [673] phi bitmap_line_ydxi::yd#5 = bitmap_line_ydxi::yd#0 [phi:bitmap_line::@4->bitmap_line_ydxi#1] -- register_copy - // [673] phi bitmap_line_ydxi::c#3 = bitmap_line_ydxi::c#0 [phi:bitmap_line::@4->bitmap_line_ydxi#2] -- register_copy - // [673] phi bitmap_line_ydxi::y#6 = bitmap_line_ydxi::y#0 [phi:bitmap_line::@4->bitmap_line_ydxi#3] -- register_copy - // [673] phi bitmap_line_ydxi::x#5 = bitmap_line_ydxi::x#0 [phi:bitmap_line::@4->bitmap_line_ydxi#4] -- register_copy - // [673] phi bitmap_line_ydxi::xd#2 = bitmap_line_ydxi::xd#0 [phi:bitmap_line::@4->bitmap_line_ydxi#5] -- register_copy - jsr bitmap_line_ydxi - // bitmap_line::@return - // } - // [527] return - rts - // bitmap_line::@8 - __b8: - // bitmap_line_xdyi(x1, y1, x0, xd, yd, c) - // [528] bitmap_line_xdyi::x#0 = bitmap_line::x1#10 -- vwuz1=vwuz2 - lda.z x1 - sta.z bitmap_line_xdyi.x - lda.z x1+1 - sta.z bitmap_line_xdyi.x+1 - // [529] bitmap_line_xdyi::y#0 = bitmap_line::y1#10 -- vwuz1=vwuz2 - lda.z y1 - sta.z bitmap_line_xdyi.y - lda.z y1+1 - sta.z bitmap_line_xdyi.y+1 - // [530] bitmap_line_xdyi::x1#0 = bitmap_line::x0#10 - // [531] bitmap_line_xdyi::xd#0 = bitmap_line::xd#2 - // [532] bitmap_line_xdyi::yd#0 = bitmap_line::yd#2 - // [533] bitmap_line_xdyi::c#0 = bitmap_line::c#10 -- vbuz1=vbuxx - stx.z bitmap_line_xdyi.c - // [534] call bitmap_line_xdyi - // [689] phi from bitmap_line::@8 to bitmap_line_xdyi [phi:bitmap_line::@8->bitmap_line_xdyi] - // [689] phi bitmap_line_xdyi::x1#6 = bitmap_line_xdyi::x1#0 [phi:bitmap_line::@8->bitmap_line_xdyi#0] -- register_copy - // [689] phi bitmap_line_xdyi::xd#5 = bitmap_line_xdyi::xd#0 [phi:bitmap_line::@8->bitmap_line_xdyi#1] -- register_copy - // [689] phi bitmap_line_xdyi::c#3 = bitmap_line_xdyi::c#0 [phi:bitmap_line::@8->bitmap_line_xdyi#2] -- register_copy - // [689] phi bitmap_line_xdyi::y#5 = bitmap_line_xdyi::y#0 [phi:bitmap_line::@8->bitmap_line_xdyi#3] -- register_copy - // [689] phi bitmap_line_xdyi::x#6 = bitmap_line_xdyi::x#0 [phi:bitmap_line::@8->bitmap_line_xdyi#4] -- register_copy - // [689] phi bitmap_line_xdyi::yd#2 = bitmap_line_xdyi::yd#0 [phi:bitmap_line::@8->bitmap_line_xdyi#5] -- register_copy - jsr bitmap_line_xdyi - rts - // bitmap_line::@7 - __b7: - // yd = y1-y0 - // [535] bitmap_line::yd#1 = bitmap_line::y1#10 - bitmap_line::y0#10 -- vwuz1=vwuz2_minus_vwuz3 - lda.z y1 - sec - sbc.z y0 - sta.z yd - lda.z y1+1 - sbc.z y0+1 - sta.z yd+1 - // if(ydbitmap_line_ydxd] - // [705] phi bitmap_line_ydxd::y1#6 = bitmap_line_ydxd::y1#0 [phi:bitmap_line::@10->bitmap_line_ydxd#0] -- register_copy - // [705] phi bitmap_line_ydxd::yd#5 = bitmap_line_ydxd::yd#0 [phi:bitmap_line::@10->bitmap_line_ydxd#1] -- register_copy - // [705] phi bitmap_line_ydxd::c#3 = bitmap_line_ydxd::c#0 [phi:bitmap_line::@10->bitmap_line_ydxd#2] -- register_copy - // [705] phi bitmap_line_ydxd::y#7 = bitmap_line_ydxd::y#0 [phi:bitmap_line::@10->bitmap_line_ydxd#3] -- register_copy - // [705] phi bitmap_line_ydxd::x#5 = bitmap_line_ydxd::x#0 [phi:bitmap_line::@10->bitmap_line_ydxd#4] -- register_copy - // [705] phi bitmap_line_ydxd::xd#2 = bitmap_line_ydxd::xd#0 [phi:bitmap_line::@10->bitmap_line_ydxd#5] -- register_copy - jsr bitmap_line_ydxd - rts - // bitmap_line::@9 - __b9: - // bitmap_line_xdyd(x1, y1, x0, xd, yd, c) - // [544] bitmap_line_xdyd::x#0 = bitmap_line::x1#10 -- vwuz1=vwuz2 - lda.z x1 - sta.z bitmap_line_xdyd.x - lda.z x1+1 - sta.z bitmap_line_xdyd.x+1 - // [545] bitmap_line_xdyd::y#0 = bitmap_line::y1#10 -- vwuz1=vwuz2 - lda.z y1 - sta.z bitmap_line_xdyd.y - lda.z y1+1 - sta.z bitmap_line_xdyd.y+1 - // [546] bitmap_line_xdyd::x1#0 = bitmap_line::x0#10 - // [547] bitmap_line_xdyd::xd#0 = bitmap_line::xd#2 - // [548] bitmap_line_xdyd::yd#0 = bitmap_line::yd#1 - // [549] bitmap_line_xdyd::c#0 = bitmap_line::c#10 -- vbuz1=vbuxx - stx.z bitmap_line_xdyd.c - // [550] call bitmap_line_xdyd - // [721] phi from bitmap_line::@9 to bitmap_line_xdyd [phi:bitmap_line::@9->bitmap_line_xdyd] - // [721] phi bitmap_line_xdyd::x1#6 = bitmap_line_xdyd::x1#0 [phi:bitmap_line::@9->bitmap_line_xdyd#0] -- register_copy - // [721] phi bitmap_line_xdyd::xd#5 = bitmap_line_xdyd::xd#0 [phi:bitmap_line::@9->bitmap_line_xdyd#1] -- register_copy - // [721] phi bitmap_line_xdyd::c#3 = bitmap_line_xdyd::c#0 [phi:bitmap_line::@9->bitmap_line_xdyd#2] -- register_copy - // [721] phi bitmap_line_xdyd::y#5 = bitmap_line_xdyd::y#0 [phi:bitmap_line::@9->bitmap_line_xdyd#3] -- register_copy - // [721] phi bitmap_line_xdyd::x#6 = bitmap_line_xdyd::x#0 [phi:bitmap_line::@9->bitmap_line_xdyd#4] -- register_copy - // [721] phi bitmap_line_xdyd::yd#2 = bitmap_line_xdyd::yd#0 [phi:bitmap_line::@9->bitmap_line_xdyd#5] -- register_copy - jsr bitmap_line_xdyd - rts - // bitmap_line::@1 - __b1: - // xd = x1-x0 - // [551] bitmap_line::xd#1 = bitmap_line::x1#10 - bitmap_line::x0#10 -- vwuz1=vwuz2_minus_vwuz3 - lda.z x1 - sec - sbc.z x0 - sta.z xd - lda.z x1+1 - sbc.z x0+1 - sta.z xd+1 - // if(y0bitmap_line_ydxd] - // [705] phi bitmap_line_ydxd::y1#6 = bitmap_line_ydxd::y1#1 [phi:bitmap_line::@6->bitmap_line_ydxd#0] -- register_copy - // [705] phi bitmap_line_ydxd::yd#5 = bitmap_line_ydxd::yd#1 [phi:bitmap_line::@6->bitmap_line_ydxd#1] -- register_copy - // [705] phi bitmap_line_ydxd::c#3 = bitmap_line_ydxd::c#1 [phi:bitmap_line::@6->bitmap_line_ydxd#2] -- register_copy - // [705] phi bitmap_line_ydxd::y#7 = bitmap_line_ydxd::y#1 [phi:bitmap_line::@6->bitmap_line_ydxd#3] -- register_copy - // [705] phi bitmap_line_ydxd::x#5 = bitmap_line_ydxd::x#1 [phi:bitmap_line::@6->bitmap_line_ydxd#4] -- register_copy - // [705] phi bitmap_line_ydxd::xd#2 = bitmap_line_ydxd::xd#1 [phi:bitmap_line::@6->bitmap_line_ydxd#5] -- register_copy - jsr bitmap_line_ydxd - rts - // bitmap_line::@12 - __b12: - // bitmap_line_xdyd(x0, y0, x1, xd, yd, c) - // [562] bitmap_line_xdyd::x#1 = bitmap_line::x0#10 -- vwuz1=vwuz2 - lda.z x0 - sta.z bitmap_line_xdyd.x - lda.z x0+1 - sta.z bitmap_line_xdyd.x+1 - // [563] bitmap_line_xdyd::y#1 = bitmap_line::y0#10 - // [564] bitmap_line_xdyd::x1#1 = bitmap_line::x1#10 -- vwuz1=vwuz2 - lda.z x1 - sta.z bitmap_line_xdyd.x1 - lda.z x1+1 - sta.z bitmap_line_xdyd.x1+1 - // [565] bitmap_line_xdyd::xd#1 = bitmap_line::xd#1 - // [566] bitmap_line_xdyd::yd#1 = bitmap_line::yd#10 - // [567] bitmap_line_xdyd::c#1 = bitmap_line::c#10 -- vbuz1=vbuxx - stx.z bitmap_line_xdyd.c - // [568] call bitmap_line_xdyd - // [721] phi from bitmap_line::@12 to bitmap_line_xdyd [phi:bitmap_line::@12->bitmap_line_xdyd] - // [721] phi bitmap_line_xdyd::x1#6 = bitmap_line_xdyd::x1#1 [phi:bitmap_line::@12->bitmap_line_xdyd#0] -- register_copy - // [721] phi bitmap_line_xdyd::xd#5 = bitmap_line_xdyd::xd#1 [phi:bitmap_line::@12->bitmap_line_xdyd#1] -- register_copy - // [721] phi bitmap_line_xdyd::c#3 = bitmap_line_xdyd::c#1 [phi:bitmap_line::@12->bitmap_line_xdyd#2] -- register_copy - // [721] phi bitmap_line_xdyd::y#5 = bitmap_line_xdyd::y#1 [phi:bitmap_line::@12->bitmap_line_xdyd#3] -- register_copy - // [721] phi bitmap_line_xdyd::x#6 = bitmap_line_xdyd::x#1 [phi:bitmap_line::@12->bitmap_line_xdyd#4] -- register_copy - // [721] phi bitmap_line_xdyd::yd#2 = bitmap_line_xdyd::yd#1 [phi:bitmap_line::@12->bitmap_line_xdyd#5] -- register_copy - jsr bitmap_line_xdyd - rts - // bitmap_line::@11 - __b11: - // yd = y1-y0 - // [569] bitmap_line::yd#11 = bitmap_line::y1#10 - bitmap_line::y0#10 -- vwuz1=vwuz2_minus_vwuz3 - lda.z y1 - sec - sbc.z y0 - sta.z yd_1 - lda.z y1+1 - sbc.z y0+1 - sta.z yd_1+1 - // if(ydbitmap_line_ydxi] - // [673] phi bitmap_line_ydxi::y1#6 = bitmap_line_ydxi::y1#1 [phi:bitmap_line::@14->bitmap_line_ydxi#0] -- register_copy - // [673] phi bitmap_line_ydxi::yd#5 = bitmap_line_ydxi::yd#1 [phi:bitmap_line::@14->bitmap_line_ydxi#1] -- register_copy - // [673] phi bitmap_line_ydxi::c#3 = bitmap_line_ydxi::c#1 [phi:bitmap_line::@14->bitmap_line_ydxi#2] -- register_copy - // [673] phi bitmap_line_ydxi::y#6 = bitmap_line_ydxi::y#1 [phi:bitmap_line::@14->bitmap_line_ydxi#3] -- register_copy - // [673] phi bitmap_line_ydxi::x#5 = bitmap_line_ydxi::x#1 [phi:bitmap_line::@14->bitmap_line_ydxi#4] -- register_copy - // [673] phi bitmap_line_ydxi::xd#2 = bitmap_line_ydxi::xd#1 [phi:bitmap_line::@14->bitmap_line_ydxi#5] -- register_copy - jsr bitmap_line_ydxi - rts - // bitmap_line::@13 - __b13: - // bitmap_line_xdyi(x0, y0, x1, xd, yd, c) - // [578] bitmap_line_xdyi::x#1 = bitmap_line::x0#10 -- vwuz1=vwuz2 - lda.z x0 - sta.z bitmap_line_xdyi.x - lda.z x0+1 - sta.z bitmap_line_xdyi.x+1 - // [579] bitmap_line_xdyi::y#1 = bitmap_line::y0#10 - // [580] bitmap_line_xdyi::x1#1 = bitmap_line::x1#10 -- vwuz1=vwuz2 - lda.z x1 - sta.z bitmap_line_xdyi.x1 - lda.z x1+1 - sta.z bitmap_line_xdyi.x1+1 - // [581] bitmap_line_xdyi::xd#1 = bitmap_line::xd#1 - // [582] bitmap_line_xdyi::yd#1 = bitmap_line::yd#11 - // [583] bitmap_line_xdyi::c#1 = bitmap_line::c#10 -- vbuz1=vbuxx - stx.z bitmap_line_xdyi.c - // [584] call bitmap_line_xdyi - // [689] phi from bitmap_line::@13 to bitmap_line_xdyi [phi:bitmap_line::@13->bitmap_line_xdyi] - // [689] phi bitmap_line_xdyi::x1#6 = bitmap_line_xdyi::x1#1 [phi:bitmap_line::@13->bitmap_line_xdyi#0] -- register_copy - // [689] phi bitmap_line_xdyi::xd#5 = bitmap_line_xdyi::xd#1 [phi:bitmap_line::@13->bitmap_line_xdyi#1] -- register_copy - // [689] phi bitmap_line_xdyi::c#3 = bitmap_line_xdyi::c#1 [phi:bitmap_line::@13->bitmap_line_xdyi#2] -- register_copy - // [689] phi bitmap_line_xdyi::y#5 = bitmap_line_xdyi::y#1 [phi:bitmap_line::@13->bitmap_line_xdyi#3] -- register_copy - // [689] phi bitmap_line_xdyi::x#6 = bitmap_line_xdyi::x#1 [phi:bitmap_line::@13->bitmap_line_xdyi#4] -- register_copy - // [689] phi bitmap_line_xdyi::yd#2 = bitmap_line_xdyi::yd#1 [phi:bitmap_line::@13->bitmap_line_xdyi#5] -- register_copy - jsr bitmap_line_xdyi - rts -} - // rand -// Returns a pseudo-random number in the range of 0 to RAND_MAX (65535) -// Uses an xorshift pseudorandom number generator that hits all different values -// Information https://en.wikipedia.org/wiki/Xorshift -// Source http://www.retroprogramming.com/2017/07/xorshift-pseudorandom-numbers-in-z80.html -rand: { - .label __0 = $61 - .label __1 = $63 - .label __2 = $65 - .label return = $6e - // rand_state << 7 - // [586] rand::$0 = rand_state#13 << 7 -- vwuz1=vwuz2_rol_7 - lda.z rand_state+1 - lsr - lda.z rand_state - ror - sta.z __0+1 - lda #0 - ror - sta.z __0 - // rand_state ^= rand_state << 7 - // [587] rand_state#0 = rand_state#13 ^ rand::$0 -- vwuz1=vwuz1_bxor_vwuz2 - lda.z rand_state - eor.z __0 - sta.z rand_state - lda.z rand_state+1 - eor.z __0+1 - sta.z rand_state+1 - // rand_state >> 9 - // [588] rand::$1 = rand_state#0 >> 9 -- vwuz1=vwuz2_ror_9 - lsr - sta.z __1 - lda #0 - sta.z __1+1 - // rand_state ^= rand_state >> 9 - // [589] rand_state#1 = rand_state#0 ^ rand::$1 -- vwuz1=vwuz1_bxor_vwuz2 - lda.z rand_state - eor.z __1 - sta.z rand_state - lda.z rand_state+1 - eor.z __1+1 - sta.z rand_state+1 - // rand_state << 8 - // [590] rand::$2 = rand_state#1 << 8 -- vwuz1=vwuz2_rol_8 - lda.z rand_state - sta.z __2+1 - lda #0 - sta.z __2 - // rand_state ^= rand_state << 8 - // [591] rand_state#14 = rand_state#1 ^ rand::$2 -- vwuz1=vwuz1_bxor_vwuz2 - lda.z rand_state - eor.z __2 - sta.z rand_state - lda.z rand_state+1 - eor.z __2+1 - sta.z rand_state+1 - // return rand_state; - // [592] rand::return#0 = rand_state#14 -- vwuz1=vwuz2 - lda.z rand_state - sta.z return - lda.z rand_state+1 - sta.z return+1 - // rand::@return - // } - // [593] return - rts -} - // modr16u -// Performs modulo on two 16 bit unsigned ints and an initial remainder -// Returns the remainder. -// Implemented using simple binary division -// __zp($76) unsigned int modr16u(__zp(2) unsigned int dividend, __zp($8f) unsigned int divisor, unsigned int rem) -modr16u: { - .label return = $76 - .label dividend = 2 - .label divisor = $8f - // divr16u(dividend, divisor, rem) - // [595] divr16u::dividend#1 = modr16u::dividend#4 - // [596] divr16u::divisor#0 = modr16u::divisor#4 -- vwuz1=vwuz2 - lda.z divisor - sta.z divr16u.divisor - lda.z divisor+1 - sta.z divr16u.divisor+1 - // [597] call divr16u - // [737] phi from modr16u to divr16u [phi:modr16u->divr16u] - jsr divr16u - // modr16u::@1 - // return rem16u; - // [598] modr16u::return#0 = rem16u#0 -- vwuz1=vwuz2 - lda.z rem16u - sta.z return - lda.z rem16u+1 - sta.z return+1 - // modr16u::@return - // } - // [599] return - rts -} - // vera_layer_set_text_color_mode -// Set the configuration of the layer text color mode. -// - layer: Value of 0 or 1. -// - color_mode: Specifies the color mode to be VERA_LAYER_CONFIG_16 or VERA_LAYER_CONFIG_256 for text mode. -// void vera_layer_set_text_color_mode(char layer, char color_mode) -vera_layer_set_text_color_mode: { - .label addr = $25 - // byte* addr = vera_layer_config[layer] - // [600] vera_layer_set_text_color_mode::addr#0 = *(vera_layer_config+vera_layer_mode_text::layer#0*SIZEOF_POINTER) -- pbuz1=_deref_qbuc1 - lda vera_layer_config+vera_layer_mode_text.layer*SIZEOF_POINTER - sta.z addr - lda vera_layer_config+vera_layer_mode_text.layer*SIZEOF_POINTER+1 - sta.z addr+1 - // *addr &= ~VERA_LAYER_CONFIG_256C - // [601] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 & ~VERA_LAYER_CONFIG_256C -- _deref_pbuz1=_deref_pbuz1_band_vbuc1 - lda #VERA_LAYER_CONFIG_256C^$ff - ldy #0 - and (addr),y - sta (addr),y - // *addr |= color_mode - // [602] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 -- _deref_pbuz1=_deref_pbuz1 - lda (addr),y - sta (addr),y - // vera_layer_set_text_color_mode::@return - // } - // [603] return - rts -} - // vera_layer_get_mapbase_bank -// Get the map base bank of the tiles for the layer. -// - layer: Value of 0 or 1. -// - return: Bank in vera vram. -// __register(A) char vera_layer_get_mapbase_bank(__register(X) char layer) -vera_layer_get_mapbase_bank: { - // return vera_mapbase_bank[layer]; - // [604] vera_layer_get_mapbase_bank::return#0 = vera_mapbase_bank[vera_layer_get_mapbase_bank::layer#0] -- vbuaa=pbuc1_derefidx_vbuxx - lda vera_mapbase_bank,x - // vera_layer_get_mapbase_bank::@return - // } - // [605] return - rts -} - // vera_layer_get_mapbase_offset -// Get the map base lower 16-bit address (offset) of the tiles for the layer. -// - layer: Value of 0 or 1. -// - return: Offset in vera vram of the specified bank. -// __zp($8d) unsigned int vera_layer_get_mapbase_offset(__register(A) char layer) -vera_layer_get_mapbase_offset: { - .label return = $8d - // return vera_mapbase_offset[layer]; - // [606] vera_layer_get_mapbase_offset::$0 = vera_layer_get_mapbase_offset::layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [607] vera_layer_get_mapbase_offset::return#0 = vera_mapbase_offset[vera_layer_get_mapbase_offset::$0] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda vera_mapbase_offset,y - sta.z return - lda vera_mapbase_offset+1,y - sta.z return+1 - // vera_layer_get_mapbase_offset::@return - // } - // [608] return - rts -} - // vera_layer_get_rowshift -// Get the bit shift value required to skip a whole line fast. -// - layer: Value of 0 or 1. -// - return: Rowshift value to calculate fast from a y value to line offset in tile mode. -// __register(A) char vera_layer_get_rowshift(__register(X) char layer) -vera_layer_get_rowshift: { - // return vera_layer_rowshift[layer]; - // [609] vera_layer_get_rowshift::return#0 = vera_layer_rowshift[vera_layer_get_rowshift::layer#0] -- vbuaa=pbuc1_derefidx_vbuxx - lda vera_layer_rowshift,x - // vera_layer_get_rowshift::@return - // } - // [610] return - rts -} - // vera_layer_get_rowskip -// Get the value required to skip a whole line fast. -// - layer: Value of 0 or 1. -// - return: Skip value to calculate fast from a y value to line offset in tile mode. -// __zp($7f) unsigned int vera_layer_get_rowskip(__register(A) char layer) -vera_layer_get_rowskip: { - .label return = $7f - // return vera_layer_rowskip[layer]; - // [611] vera_layer_get_rowskip::$0 = vera_layer_get_rowskip::layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [612] vera_layer_get_rowskip::return#0 = vera_layer_rowskip[vera_layer_get_rowskip::$0] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda vera_layer_rowskip,y - sta.z return - lda vera_layer_rowskip+1,y - sta.z return+1 - // vera_layer_get_rowskip::@return - // } - // [613] return - rts -} - // cscroll -// Scroll the entire screen if the cursor is beyond the last line -cscroll: { - // if(conio_cursor_y[conio_screen_layer]>=CONIO_HEIGHT) - // [614] if(conio_cursor_y[conio_screen_layer]=conio_height) - // [616] if(conio_cursor_y[conio_screen_layer]cscroll::@3] - // cscroll::@3 - __b3: - // cscroll::@return - // } - // [618] return - rts - // [619] phi from cscroll::@1 to cscroll::@4 [phi:cscroll::@1->cscroll::@4] - // cscroll::@4 - __b4: - // insertup() - // [620] call insertup - jsr insertup - // cscroll::@5 - // gotoxy( 0, CONIO_HEIGHT-1) - // [621] gotoxy::y#2 = conio_screen_height - 1 -- vbuxx=vbuz1_minus_1 - ldx.z conio_screen_height - dex - // [622] call gotoxy - // [241] phi from cscroll::@5 to gotoxy [phi:cscroll::@5->gotoxy] - // [241] phi gotoxy::y#7 = gotoxy::y#2 [phi:cscroll::@5->gotoxy#0] -- register_copy - jsr gotoxy - rts -} - // vera_layer_set_config -// Set the configuration of the layer. -// - layer: Value of 0 or 1. -// - config: Specifies the modes which are specified using T256C / 'Bitmap Mode' / 'Color Depth'. -// void vera_layer_set_config(__register(A) char layer, __register(X) char config) -vera_layer_set_config: { - .label addr = $25 - // byte* addr = vera_layer_config[layer] - // [624] vera_layer_set_config::$0 = vera_layer_set_config::layer#2 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [625] vera_layer_set_config::addr#0 = vera_layer_config[vera_layer_set_config::$0] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_config,y - sta.z addr - lda vera_layer_config+1,y - sta.z addr+1 - // *addr = config - // [626] *vera_layer_set_config::addr#0 = vera_layer_set_config::config#2 -- _deref_pbuz1=vbuxx - txa - ldy #0 - sta (addr),y - // vera_layer_set_config::@return - // } - // [627] return - rts -} - // vera_layer_set_tilebase -// Set the base of the tiles for the layer with which the conio will interact. -// - layer: Value of 0 or 1. -// - tilebase: Specifies the base address of the tile map. -// Note that the register only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// void vera_layer_set_tilebase(__register(A) char layer, __register(X) char tilebase) -vera_layer_set_tilebase: { - .label addr = $25 - // byte* addr = vera_layer_tilebase[layer] - // [629] vera_layer_set_tilebase::$0 = vera_layer_set_tilebase::layer#2 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [630] vera_layer_set_tilebase::addr#0 = vera_layer_tilebase[vera_layer_set_tilebase::$0] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_tilebase,y - sta.z addr - lda vera_layer_tilebase+1,y - sta.z addr+1 - // *addr = tilebase - // [631] *vera_layer_set_tilebase::addr#0 = vera_layer_set_tilebase::tilebase#2 -- _deref_pbuz1=vbuxx - txa - ldy #0 - sta (addr),y - // vera_layer_set_tilebase::@return - // } - // [632] return - rts -} - // vera_layer_get_backcolor -// Get the back color for text output. The old back text color setting is returned. -// - layer: Value of 0 or 1. -// - return: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_backcolor(__register(X) char layer) -vera_layer_get_backcolor: { - // return vera_layer_backcolor[layer]; - // [633] vera_layer_get_backcolor::return#1 = vera_layer_backcolor[vera_layer_get_backcolor::layer#0] -- vbuaa=pbuc1_derefidx_vbuxx - lda vera_layer_backcolor,x - // vera_layer_get_backcolor::@return - // } - // [634] return - rts -} - // vera_layer_get_textcolor -// Get the front color for text output. The old front text color setting is returned. -// - layer: Value of 0 or 1. -// - return: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_textcolor(__register(X) char layer) -vera_layer_get_textcolor: { - // return vera_layer_textcolor[layer]; - // [635] vera_layer_get_textcolor::return#1 = vera_layer_textcolor[vera_layer_get_textcolor::layer#0] -- vbuaa=pbuc1_derefidx_vbuxx - lda vera_layer_textcolor,x - // vera_layer_get_textcolor::@return - // } - // [636] return - rts -} - // vera_display_get_hscale -vera_display_get_hscale: { - .const scale = 0 - // [638] phi from vera_display_get_hscale to vera_display_get_hscale::@1 [phi:vera_display_get_hscale->vera_display_get_hscale::@1] - // [638] phi vera_display_get_hscale::s#2 = 1 [phi:vera_display_get_hscale->vera_display_get_hscale::@1#0] -- vbuxx=vbuc1 - ldx #1 - // [638] phi from vera_display_get_hscale::@2 to vera_display_get_hscale::@1 [phi:vera_display_get_hscale::@2->vera_display_get_hscale::@1] - // [638] phi vera_display_get_hscale::s#2 = vera_display_get_hscale::s#1 [phi:vera_display_get_hscale::@2->vera_display_get_hscale::@1#0] -- register_copy - // vera_display_get_hscale::@1 - __b1: - // if(*VERA_DC_HSCALE==hscale[s]) - // [639] if(*VERA_DC_HSCALE!=vera_display_get_hscale::hscale[vera_display_get_hscale::s#2]) goto vera_display_get_hscale::@2 -- _deref_pbuc1_neq_pbuc2_derefidx_vbuxx_then_la1 - lda hscale,x - cmp VERA_DC_HSCALE - bne __b2 - // [642] phi from vera_display_get_hscale::@1 to vera_display_get_hscale::@3 [phi:vera_display_get_hscale::@1->vera_display_get_hscale::@3] - // [642] phi vera_display_get_hscale::return#0 = vera_display_get_hscale::s#2 [phi:vera_display_get_hscale::@1->vera_display_get_hscale::@3#0] -- register_copy - rts - // vera_display_get_hscale::@2 - __b2: - // for(byte s:1..3) - // [640] vera_display_get_hscale::s#1 = ++ vera_display_get_hscale::s#2 -- vbuxx=_inc_vbuxx - inx - // [641] if(vera_display_get_hscale::s#1!=4) goto vera_display_get_hscale::@1 -- vbuxx_neq_vbuc1_then_la1 - cpx #4 - bne __b1 - // [642] phi from vera_display_get_hscale::@2 to vera_display_get_hscale::@3 [phi:vera_display_get_hscale::@2->vera_display_get_hscale::@3] - // [642] phi vera_display_get_hscale::return#0 = vera_display_get_hscale::scale#0 [phi:vera_display_get_hscale::@2->vera_display_get_hscale::@3#0] -- vbuxx=vbuc1 - ldx #scale - // vera_display_get_hscale::@3 - // vera_display_get_hscale::@return - // } - // [643] return - rts - .segment Data - hscale: .byte 0, $80, $40, $20 -} -.segment Code - // vera_display_get_vscale -vera_display_get_vscale: { - .const scale = 0 - // [645] phi from vera_display_get_vscale to vera_display_get_vscale::@1 [phi:vera_display_get_vscale->vera_display_get_vscale::@1] - // [645] phi vera_display_get_vscale::s#2 = 1 [phi:vera_display_get_vscale->vera_display_get_vscale::@1#0] -- vbuxx=vbuc1 - ldx #1 - // [645] phi from vera_display_get_vscale::@2 to vera_display_get_vscale::@1 [phi:vera_display_get_vscale::@2->vera_display_get_vscale::@1] - // [645] phi vera_display_get_vscale::s#2 = vera_display_get_vscale::s#1 [phi:vera_display_get_vscale::@2->vera_display_get_vscale::@1#0] -- register_copy - // vera_display_get_vscale::@1 - __b1: - // if(*VERA_DC_VSCALE==vscale[s]) - // [646] if(*VERA_DC_VSCALE!=vera_display_get_vscale::vscale[vera_display_get_vscale::s#2]) goto vera_display_get_vscale::@2 -- _deref_pbuc1_neq_pbuc2_derefidx_vbuxx_then_la1 - lda vscale,x - cmp VERA_DC_VSCALE - bne __b2 - // [649] phi from vera_display_get_vscale::@1 to vera_display_get_vscale::@3 [phi:vera_display_get_vscale::@1->vera_display_get_vscale::@3] - // [649] phi vera_display_get_vscale::return#0 = vera_display_get_vscale::s#2 [phi:vera_display_get_vscale::@1->vera_display_get_vscale::@3#0] -- register_copy - rts - // vera_display_get_vscale::@2 - __b2: - // for(byte s:1..3) - // [647] vera_display_get_vscale::s#1 = ++ vera_display_get_vscale::s#2 -- vbuxx=_inc_vbuxx - inx - // [648] if(vera_display_get_vscale::s#1!=4) goto vera_display_get_vscale::@1 -- vbuxx_neq_vbuc1_then_la1 - cpx #4 - bne __b1 - // [649] phi from vera_display_get_vscale::@2 to vera_display_get_vscale::@3 [phi:vera_display_get_vscale::@2->vera_display_get_vscale::@3] - // [649] phi vera_display_get_vscale::return#0 = vera_display_get_vscale::scale#0 [phi:vera_display_get_vscale::@2->vera_display_get_vscale::@3#0] -- vbuxx=vbuc1 - ldx #scale - // vera_display_get_vscale::@3 - // vera_display_get_vscale::@return - // } - // [650] return - rts - .segment Data - vscale: .byte 0, $80, $40, $20 -} -.segment Code - // mul16u -// Perform binary multiplication of two unsigned 16-bit unsigned ints into a 32-bit unsigned long -// __zp($72) unsigned long mul16u(__zp(2) unsigned int a, __zp($a1) unsigned int b) -mul16u: { - .label a = 2 - .label b = $a1 - .label return = $72 - .label mb = $1a - .label res = $10 - // unsigned long mb = b - // [651] mul16u::mb#0 = (unsigned long)mul16u::b#0 -- vduz1=_dword_vwuz2 - lda.z b - sta.z mb - lda.z b+1 - sta.z mb+1 - lda #0 - sta.z mb+2 - sta.z mb+3 - // [652] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] - // [652] phi mul16u::mb#2 = mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy - // [652] phi mul16u::res#2 = 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 - sta.z res - sta.z res+1 - lda #<0>>$10 - sta.z res+2 - lda #>0>>$10 - sta.z res+3 - // [652] phi mul16u::a#2 = mul16u::a#0 [phi:mul16u->mul16u::@1#2] -- register_copy - // mul16u::@1 - __b1: - // while(a!=0) - // [653] if(mul16u::a#2!=0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 - lda.z a - ora.z a+1 - bne __b2 - // mul16u::@return - // } - // [654] return - rts - // mul16u::@2 - __b2: - // a&1 - // [655] mul16u::$1 = mul16u::a#2 & 1 -- vbuaa=vwuz1_band_vbuc1 - lda #1 - and.z a - // if( (a&1) != 0) - // [656] if(mul16u::$1==0) goto mul16u::@3 -- vbuaa_eq_0_then_la1 - cmp #0 - beq __b3 - // mul16u::@4 - // res = res + mb - // [657] mul16u::res#1 = mul16u::res#2 + mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 - clc - lda.z res - adc.z mb - sta.z res - lda.z res+1 - adc.z mb+1 - sta.z res+1 - lda.z res+2 - adc.z mb+2 - sta.z res+2 - lda.z res+3 - adc.z mb+3 - sta.z res+3 - // [658] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] - // [658] phi mul16u::res#6 = mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy - // mul16u::@3 - __b3: - // a = a>>1 - // [659] mul16u::a#1 = mul16u::a#2 >> 1 -- vwuz1=vwuz1_ror_1 - lsr.z a+1 - ror.z a - // mb = mb<<1 - // [660] mul16u::mb#1 = mul16u::mb#2 << 1 -- vduz1=vduz1_rol_1 - asl.z mb - rol.z mb+1 - rol.z mb+2 - rol.z mb+3 - // [652] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] - // [652] phi mul16u::mb#2 = mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy - // [652] phi mul16u::res#2 = mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy - // [652] phi mul16u::a#2 = mul16u::a#1 [phi:mul16u::@3->mul16u::@1#2] -- register_copy - jmp __b1 -} - // memset_vram -// Set block of memory to a value in VRAM. -// Sets num bytes to a value to the memory block pointed to by destination in VRAM. -// - vbank: Which 64K VRAM bank to put data into (0/1) -// - vdest: The destination address in VRAM -// - data: The value to set the vram with. -// - num: The number of bytes to set -// void memset_vram(__register(X) char vbank, __zp($91) void *vdest, char data, __zp($72) unsigned long num) -memset_vram: { - .const data = 0 - .label i = $10 - .label vdest = $91 - .label num = $72 - // *VERA_CTRL &= ~VERA_ADDRSEL - // [661] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // BYTE0(vdest) - // [662] memset_vram::$0 = byte0 memset_vram::vdest#0 -- vbuaa=_byte0_pvoz1 - lda.z vdest - // *VERA_ADDRX_L = BYTE0(vdest) - // [663] *VERA_ADDRX_L = memset_vram::$0 -- _deref_pbuc1=vbuaa - // Set address - sta VERA_ADDRX_L - // BYTE1(vdest) - // [664] memset_vram::$1 = byte1 memset_vram::vdest#0 -- vbuaa=_byte1_pvoz1 - lda.z vdest+1 - // *VERA_ADDRX_M = BYTE1(vdest) - // [665] *VERA_ADDRX_M = memset_vram::$1 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // VERA_INC_1 | vbank - // [666] memset_vram::$2 = VERA_INC_1 | memset_vram::vbank#0 -- vbuaa=vbuc1_bor_vbuxx - txa - ora #VERA_INC_1 - // *VERA_ADDRX_H = VERA_INC_1 | vbank - // [667] *VERA_ADDRX_H = memset_vram::$2 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_H - // [668] phi from memset_vram to memset_vram::@1 [phi:memset_vram->memset_vram::@1] - // [668] phi memset_vram::i#2 = 0 [phi:memset_vram->memset_vram::@1#0] -- vduz1=vduc1 - lda #<0 - sta.z i - sta.z i+1 - lda #<0>>$10 - sta.z i+2 - lda #>0>>$10 - sta.z i+3 - // Transfer the data - // memset_vram::@1 - __b1: - // for(unsigned long i = 0; imemset_vram::@1] - // [668] phi memset_vram::i#2 = memset_vram::i#1 [phi:memset_vram::@2->memset_vram::@1#0] -- register_copy - jmp __b1 -} - // bitmap_line_ydxi -// void bitmap_line_ydxi(__zp(4) unsigned int y, __zp(6) unsigned int x, __zp(8) unsigned int y1, __zp($27) unsigned int yd, __zp($22) unsigned int xd, __zp($20) char c) -bitmap_line_ydxi: { - .label __6 = $1e - .label y = 4 - .label x = 6 - .label y1 = 8 - .label yd = $27 - .label xd = $22 - .label c = $20 - .label e = $18 - // word e = xd>>1 - // [674] bitmap_line_ydxi::e#0 = bitmap_line_ydxi::xd#2 >> 1 -- vwuz1=vwuz2_ror_1 - lda.z xd+1 - lsr - sta.z e+1 - lda.z xd - ror - sta.z e - // [675] phi from bitmap_line_ydxi bitmap_line_ydxi::@2 to bitmap_line_ydxi::@1 [phi:bitmap_line_ydxi/bitmap_line_ydxi::@2->bitmap_line_ydxi::@1] - // [675] phi bitmap_line_ydxi::e#3 = bitmap_line_ydxi::e#0 [phi:bitmap_line_ydxi/bitmap_line_ydxi::@2->bitmap_line_ydxi::@1#0] -- register_copy - // [675] phi bitmap_line_ydxi::y#3 = bitmap_line_ydxi::y#6 [phi:bitmap_line_ydxi/bitmap_line_ydxi::@2->bitmap_line_ydxi::@1#1] -- register_copy - // [675] phi bitmap_line_ydxi::x#3 = bitmap_line_ydxi::x#5 [phi:bitmap_line_ydxi/bitmap_line_ydxi::@2->bitmap_line_ydxi::@1#2] -- register_copy - // bitmap_line_ydxi::@1 - __b1: - // bitmap_plot(x,y,c) - // [676] bitmap_plot::x#2 = bitmap_line_ydxi::x#3 -- vwuz1=vwuz2 - lda.z x - sta.z bitmap_plot.x - lda.z x+1 - sta.z bitmap_plot.x+1 - // [677] bitmap_plot::y#2 = bitmap_line_ydxi::y#3 - // [678] bitmap_plot::c#3 = bitmap_line_ydxi::c#3 -- vbuxx=vbuz1 - ldx.z c - // [679] call bitmap_plot - // [771] phi from bitmap_line_ydxi::@1 to bitmap_plot [phi:bitmap_line_ydxi::@1->bitmap_plot] - // [771] phi bitmap_plot::c#5 = bitmap_plot::c#3 [phi:bitmap_line_ydxi::@1->bitmap_plot#0] -- register_copy - // [771] phi bitmap_plot::y#4 = bitmap_plot::y#2 [phi:bitmap_line_ydxi::@1->bitmap_plot#1] -- register_copy - // [771] phi bitmap_plot::x#4 = bitmap_plot::x#2 [phi:bitmap_line_ydxi::@1->bitmap_plot#2] -- register_copy - jsr bitmap_plot - // bitmap_line_ydxi::@4 - // y++; - // [680] bitmap_line_ydxi::y#2 = ++ bitmap_line_ydxi::y#3 -- vwuz1=_inc_vwuz1 - inc.z y - bne !+ - inc.z y+1 - !: - // e = e+xd - // [681] bitmap_line_ydxi::e#1 = bitmap_line_ydxi::e#3 + bitmap_line_ydxi::xd#2 -- vwuz1=vwuz1_plus_vwuz2 - clc - lda.z e - adc.z xd - sta.z e - lda.z e+1 - adc.z xd+1 - sta.z e+1 - // if(yd=bitmap_line_ydxi::e#1) goto bitmap_line_ydxi::@2 -- vwuz1_ge_vwuz2_then_la1 - cmp.z yd+1 - bne !+ - lda.z e - cmp.z yd - beq __b2 - !: - bcc __b2 - // bitmap_line_ydxi::@3 - // x++; - // [683] bitmap_line_ydxi::x#2 = ++ bitmap_line_ydxi::x#3 -- vwuz1=_inc_vwuz1 - inc.z x - bne !+ - inc.z x+1 - !: - // e = e - yd - // [684] bitmap_line_ydxi::e#2 = bitmap_line_ydxi::e#1 - bitmap_line_ydxi::yd#5 -- vwuz1=vwuz1_minus_vwuz2 - lda.z e - sec - sbc.z yd - sta.z e - lda.z e+1 - sbc.z yd+1 - sta.z e+1 - // [685] phi from bitmap_line_ydxi::@3 bitmap_line_ydxi::@4 to bitmap_line_ydxi::@2 [phi:bitmap_line_ydxi::@3/bitmap_line_ydxi::@4->bitmap_line_ydxi::@2] - // [685] phi bitmap_line_ydxi::e#6 = bitmap_line_ydxi::e#2 [phi:bitmap_line_ydxi::@3/bitmap_line_ydxi::@4->bitmap_line_ydxi::@2#0] -- register_copy - // [685] phi bitmap_line_ydxi::x#6 = bitmap_line_ydxi::x#2 [phi:bitmap_line_ydxi::@3/bitmap_line_ydxi::@4->bitmap_line_ydxi::@2#1] -- register_copy - // bitmap_line_ydxi::@2 - __b2: - // y1+1 - // [686] bitmap_line_ydxi::$6 = bitmap_line_ydxi::y1#6 + 1 -- vwuz1=vwuz2_plus_1 - clc - lda.z y1 - adc #1 - sta.z __6 - lda.z y1+1 - adc #0 - sta.z __6+1 - // while (y!=(y1+1)) - // [687] if(bitmap_line_ydxi::y#2!=bitmap_line_ydxi::$6) goto bitmap_line_ydxi::@1 -- vwuz1_neq_vwuz2_then_la1 - lda.z y+1 - cmp.z __6+1 - bne __b1 - lda.z y - cmp.z __6 - bne __b1 - // bitmap_line_ydxi::@return - // } - // [688] return - rts -} - // bitmap_line_xdyi -// void bitmap_line_xdyi(__zp($1e) unsigned int x, __zp(8) unsigned int y, __zp(6) unsigned int x1, __zp($22) unsigned int xd, __zp($27) unsigned int yd, __zp($21) char c) -bitmap_line_xdyi: { - .label __6 = $e - .label x = $1e - .label y = 8 - .label x1 = 6 - .label xd = $22 - .label yd = $27 - .label c = $21 - .label e = $18 - // word e = yd>>1 - // [690] bitmap_line_xdyi::e#0 = bitmap_line_xdyi::yd#2 >> 1 -- vwuz1=vwuz2_ror_1 - lda.z yd+1 - lsr - sta.z e+1 - lda.z yd - ror - sta.z e - // [691] phi from bitmap_line_xdyi bitmap_line_xdyi::@2 to bitmap_line_xdyi::@1 [phi:bitmap_line_xdyi/bitmap_line_xdyi::@2->bitmap_line_xdyi::@1] - // [691] phi bitmap_line_xdyi::e#3 = bitmap_line_xdyi::e#0 [phi:bitmap_line_xdyi/bitmap_line_xdyi::@2->bitmap_line_xdyi::@1#0] -- register_copy - // [691] phi bitmap_line_xdyi::y#3 = bitmap_line_xdyi::y#5 [phi:bitmap_line_xdyi/bitmap_line_xdyi::@2->bitmap_line_xdyi::@1#1] -- register_copy - // [691] phi bitmap_line_xdyi::x#3 = bitmap_line_xdyi::x#6 [phi:bitmap_line_xdyi/bitmap_line_xdyi::@2->bitmap_line_xdyi::@1#2] -- register_copy - // bitmap_line_xdyi::@1 - __b1: - // bitmap_plot(x,y,c) - // [692] bitmap_plot::x#0 = bitmap_line_xdyi::x#3 - // [693] bitmap_plot::y#0 = bitmap_line_xdyi::y#3 -- vwuz1=vwuz2 - lda.z y - sta.z bitmap_plot.y - lda.z y+1 - sta.z bitmap_plot.y+1 - // [694] bitmap_plot::c#1 = bitmap_line_xdyi::c#3 -- vbuxx=vbuz1 - ldx.z c - // [695] call bitmap_plot - // [771] phi from bitmap_line_xdyi::@1 to bitmap_plot [phi:bitmap_line_xdyi::@1->bitmap_plot] - // [771] phi bitmap_plot::c#5 = bitmap_plot::c#1 [phi:bitmap_line_xdyi::@1->bitmap_plot#0] -- register_copy - // [771] phi bitmap_plot::y#4 = bitmap_plot::y#0 [phi:bitmap_line_xdyi::@1->bitmap_plot#1] -- register_copy - // [771] phi bitmap_plot::x#4 = bitmap_plot::x#0 [phi:bitmap_line_xdyi::@1->bitmap_plot#2] -- register_copy - jsr bitmap_plot - // bitmap_line_xdyi::@4 - // x++; - // [696] bitmap_line_xdyi::x#2 = ++ bitmap_line_xdyi::x#3 -- vwuz1=_inc_vwuz1 - inc.z x - bne !+ - inc.z x+1 - !: - // e = e+yd - // [697] bitmap_line_xdyi::e#1 = bitmap_line_xdyi::e#3 + bitmap_line_xdyi::yd#2 -- vwuz1=vwuz1_plus_vwuz2 - clc - lda.z e - adc.z yd - sta.z e - lda.z e+1 - adc.z yd+1 - sta.z e+1 - // if(xd=bitmap_line_xdyi::e#1) goto bitmap_line_xdyi::@2 -- vwuz1_ge_vwuz2_then_la1 - cmp.z xd+1 - bne !+ - lda.z e - cmp.z xd - beq __b2 - !: - bcc __b2 - // bitmap_line_xdyi::@3 - // y++; - // [699] bitmap_line_xdyi::y#2 = ++ bitmap_line_xdyi::y#3 -- vwuz1=_inc_vwuz1 - inc.z y - bne !+ - inc.z y+1 - !: - // e = e - xd - // [700] bitmap_line_xdyi::e#2 = bitmap_line_xdyi::e#1 - bitmap_line_xdyi::xd#5 -- vwuz1=vwuz1_minus_vwuz2 - lda.z e - sec - sbc.z xd - sta.z e - lda.z e+1 - sbc.z xd+1 - sta.z e+1 - // [701] phi from bitmap_line_xdyi::@3 bitmap_line_xdyi::@4 to bitmap_line_xdyi::@2 [phi:bitmap_line_xdyi::@3/bitmap_line_xdyi::@4->bitmap_line_xdyi::@2] - // [701] phi bitmap_line_xdyi::e#6 = bitmap_line_xdyi::e#2 [phi:bitmap_line_xdyi::@3/bitmap_line_xdyi::@4->bitmap_line_xdyi::@2#0] -- register_copy - // [701] phi bitmap_line_xdyi::y#6 = bitmap_line_xdyi::y#2 [phi:bitmap_line_xdyi::@3/bitmap_line_xdyi::@4->bitmap_line_xdyi::@2#1] -- register_copy - // bitmap_line_xdyi::@2 - __b2: - // x1+1 - // [702] bitmap_line_xdyi::$6 = bitmap_line_xdyi::x1#6 + 1 -- vwuz1=vwuz2_plus_1 - clc - lda.z x1 - adc #1 - sta.z __6 - lda.z x1+1 - adc #0 - sta.z __6+1 - // while (x!=(x1+1)) - // [703] if(bitmap_line_xdyi::x#2!=bitmap_line_xdyi::$6) goto bitmap_line_xdyi::@1 -- vwuz1_neq_vwuz2_then_la1 - lda.z x+1 - cmp.z __6+1 - bne __b1 - lda.z x - cmp.z __6 - bne __b1 - // bitmap_line_xdyi::@return - // } - // [704] return - rts -} - // bitmap_line_ydxd -// void bitmap_line_ydxd(__zp(4) unsigned int y, __zp(6) unsigned int x, __zp(8) unsigned int y1, __zp($29) unsigned int yd, __zp($22) unsigned int xd, __zp($20) char c) -bitmap_line_ydxd: { - .label __6 = $e - .label y = 4 - .label x = 6 - .label y1 = 8 - .label yd = $29 - .label xd = $22 - .label c = $20 - .label e = $18 - // word e = xd>>1 - // [706] bitmap_line_ydxd::e#0 = bitmap_line_ydxd::xd#2 >> 1 -- vwuz1=vwuz2_ror_1 - lda.z xd+1 - lsr - sta.z e+1 - lda.z xd - ror - sta.z e - // [707] phi from bitmap_line_ydxd bitmap_line_ydxd::@2 to bitmap_line_ydxd::@1 [phi:bitmap_line_ydxd/bitmap_line_ydxd::@2->bitmap_line_ydxd::@1] - // [707] phi bitmap_line_ydxd::e#3 = bitmap_line_ydxd::e#0 [phi:bitmap_line_ydxd/bitmap_line_ydxd::@2->bitmap_line_ydxd::@1#0] -- register_copy - // [707] phi bitmap_line_ydxd::y#2 = bitmap_line_ydxd::y#7 [phi:bitmap_line_ydxd/bitmap_line_ydxd::@2->bitmap_line_ydxd::@1#1] -- register_copy - // [707] phi bitmap_line_ydxd::x#3 = bitmap_line_ydxd::x#5 [phi:bitmap_line_ydxd/bitmap_line_ydxd::@2->bitmap_line_ydxd::@1#2] -- register_copy - // bitmap_line_ydxd::@1 - __b1: - // bitmap_plot(x,y,c) - // [708] bitmap_plot::x#3 = bitmap_line_ydxd::x#3 -- vwuz1=vwuz2 - lda.z x - sta.z bitmap_plot.x - lda.z x+1 - sta.z bitmap_plot.x+1 - // [709] bitmap_plot::y#3 = bitmap_line_ydxd::y#2 - // [710] bitmap_plot::c#4 = bitmap_line_ydxd::c#3 -- vbuxx=vbuz1 - ldx.z c - // [711] call bitmap_plot - // [771] phi from bitmap_line_ydxd::@1 to bitmap_plot [phi:bitmap_line_ydxd::@1->bitmap_plot] - // [771] phi bitmap_plot::c#5 = bitmap_plot::c#4 [phi:bitmap_line_ydxd::@1->bitmap_plot#0] -- register_copy - // [771] phi bitmap_plot::y#4 = bitmap_plot::y#3 [phi:bitmap_line_ydxd::@1->bitmap_plot#1] -- register_copy - // [771] phi bitmap_plot::x#4 = bitmap_plot::x#3 [phi:bitmap_line_ydxd::@1->bitmap_plot#2] -- register_copy - jsr bitmap_plot - // bitmap_line_ydxd::@4 - // y = y++; - // [712] bitmap_line_ydxd::y#3 = ++ bitmap_line_ydxd::y#2 -- vwuz1=_inc_vwuz1 - inc.z y - bne !+ - inc.z y+1 - !: - // e = e+xd - // [713] bitmap_line_ydxd::e#1 = bitmap_line_ydxd::e#3 + bitmap_line_ydxd::xd#2 -- vwuz1=vwuz1_plus_vwuz2 - clc - lda.z e - adc.z xd - sta.z e - lda.z e+1 - adc.z xd+1 - sta.z e+1 - // if(yd=bitmap_line_ydxd::e#1) goto bitmap_line_ydxd::@2 -- vwuz1_ge_vwuz2_then_la1 - cmp.z yd+1 - bne !+ - lda.z e - cmp.z yd - beq __b2 - !: - bcc __b2 - // bitmap_line_ydxd::@3 - // x--; - // [715] bitmap_line_ydxd::x#2 = -- bitmap_line_ydxd::x#3 -- vwuz1=_dec_vwuz1 - lda.z x - bne !+ - dec.z x+1 - !: - dec.z x - // e = e - yd - // [716] bitmap_line_ydxd::e#2 = bitmap_line_ydxd::e#1 - bitmap_line_ydxd::yd#5 -- vwuz1=vwuz1_minus_vwuz2 - lda.z e - sec - sbc.z yd - sta.z e - lda.z e+1 - sbc.z yd+1 - sta.z e+1 - // [717] phi from bitmap_line_ydxd::@3 bitmap_line_ydxd::@4 to bitmap_line_ydxd::@2 [phi:bitmap_line_ydxd::@3/bitmap_line_ydxd::@4->bitmap_line_ydxd::@2] - // [717] phi bitmap_line_ydxd::e#6 = bitmap_line_ydxd::e#2 [phi:bitmap_line_ydxd::@3/bitmap_line_ydxd::@4->bitmap_line_ydxd::@2#0] -- register_copy - // [717] phi bitmap_line_ydxd::x#6 = bitmap_line_ydxd::x#2 [phi:bitmap_line_ydxd::@3/bitmap_line_ydxd::@4->bitmap_line_ydxd::@2#1] -- register_copy - // bitmap_line_ydxd::@2 - __b2: - // y1+1 - // [718] bitmap_line_ydxd::$6 = bitmap_line_ydxd::y1#6 + 1 -- vwuz1=vwuz2_plus_1 - clc - lda.z y1 - adc #1 - sta.z __6 - lda.z y1+1 - adc #0 - sta.z __6+1 - // while (y!=(y1+1)) - // [719] if(bitmap_line_ydxd::y#3!=bitmap_line_ydxd::$6) goto bitmap_line_ydxd::@1 -- vwuz1_neq_vwuz2_then_la1 - lda.z y+1 - cmp.z __6+1 - bne __b1 - lda.z y - cmp.z __6 - bne __b1 - // bitmap_line_ydxd::@return - // } - // [720] return - rts -} - // bitmap_line_xdyd -// void bitmap_line_xdyd(__zp($1e) unsigned int x, __zp(8) unsigned int y, __zp(6) unsigned int x1, __zp($22) unsigned int xd, __zp($29) unsigned int yd, __zp($20) char c) -bitmap_line_xdyd: { - .label __6 = $e - .label x = $1e - .label y = 8 - .label x1 = 6 - .label xd = $22 - .label yd = $29 - .label c = $20 - .label e = $18 - // word e = yd>>1 - // [722] bitmap_line_xdyd::e#0 = bitmap_line_xdyd::yd#2 >> 1 -- vwuz1=vwuz2_ror_1 - lda.z yd+1 - lsr - sta.z e+1 - lda.z yd - ror - sta.z e - // [723] phi from bitmap_line_xdyd bitmap_line_xdyd::@2 to bitmap_line_xdyd::@1 [phi:bitmap_line_xdyd/bitmap_line_xdyd::@2->bitmap_line_xdyd::@1] - // [723] phi bitmap_line_xdyd::e#3 = bitmap_line_xdyd::e#0 [phi:bitmap_line_xdyd/bitmap_line_xdyd::@2->bitmap_line_xdyd::@1#0] -- register_copy - // [723] phi bitmap_line_xdyd::y#3 = bitmap_line_xdyd::y#5 [phi:bitmap_line_xdyd/bitmap_line_xdyd::@2->bitmap_line_xdyd::@1#1] -- register_copy - // [723] phi bitmap_line_xdyd::x#3 = bitmap_line_xdyd::x#6 [phi:bitmap_line_xdyd/bitmap_line_xdyd::@2->bitmap_line_xdyd::@1#2] -- register_copy - // bitmap_line_xdyd::@1 - __b1: - // bitmap_plot(x,y,c) - // [724] bitmap_plot::x#1 = bitmap_line_xdyd::x#3 - // [725] bitmap_plot::y#1 = bitmap_line_xdyd::y#3 -- vwuz1=vwuz2 - lda.z y - sta.z bitmap_plot.y - lda.z y+1 - sta.z bitmap_plot.y+1 - // [726] bitmap_plot::c#2 = bitmap_line_xdyd::c#3 -- vbuxx=vbuz1 - ldx.z c - // [727] call bitmap_plot - // [771] phi from bitmap_line_xdyd::@1 to bitmap_plot [phi:bitmap_line_xdyd::@1->bitmap_plot] - // [771] phi bitmap_plot::c#5 = bitmap_plot::c#2 [phi:bitmap_line_xdyd::@1->bitmap_plot#0] -- register_copy - // [771] phi bitmap_plot::y#4 = bitmap_plot::y#1 [phi:bitmap_line_xdyd::@1->bitmap_plot#1] -- register_copy - // [771] phi bitmap_plot::x#4 = bitmap_plot::x#1 [phi:bitmap_line_xdyd::@1->bitmap_plot#2] -- register_copy - jsr bitmap_plot - // bitmap_line_xdyd::@4 - // x++; - // [728] bitmap_line_xdyd::x#2 = ++ bitmap_line_xdyd::x#3 -- vwuz1=_inc_vwuz1 - inc.z x - bne !+ - inc.z x+1 - !: - // e = e+yd - // [729] bitmap_line_xdyd::e#1 = bitmap_line_xdyd::e#3 + bitmap_line_xdyd::yd#2 -- vwuz1=vwuz1_plus_vwuz2 - clc - lda.z e - adc.z yd - sta.z e - lda.z e+1 - adc.z yd+1 - sta.z e+1 - // if(xd=bitmap_line_xdyd::e#1) goto bitmap_line_xdyd::@2 -- vwuz1_ge_vwuz2_then_la1 - cmp.z xd+1 - bne !+ - lda.z e - cmp.z xd - beq __b2 - !: - bcc __b2 - // bitmap_line_xdyd::@3 - // y--; - // [731] bitmap_line_xdyd::y#2 = -- bitmap_line_xdyd::y#3 -- vwuz1=_dec_vwuz1 - lda.z y - bne !+ - dec.z y+1 - !: - dec.z y - // e = e - xd - // [732] bitmap_line_xdyd::e#2 = bitmap_line_xdyd::e#1 - bitmap_line_xdyd::xd#5 -- vwuz1=vwuz1_minus_vwuz2 - lda.z e - sec - sbc.z xd - sta.z e - lda.z e+1 - sbc.z xd+1 - sta.z e+1 - // [733] phi from bitmap_line_xdyd::@3 bitmap_line_xdyd::@4 to bitmap_line_xdyd::@2 [phi:bitmap_line_xdyd::@3/bitmap_line_xdyd::@4->bitmap_line_xdyd::@2] - // [733] phi bitmap_line_xdyd::e#6 = bitmap_line_xdyd::e#2 [phi:bitmap_line_xdyd::@3/bitmap_line_xdyd::@4->bitmap_line_xdyd::@2#0] -- register_copy - // [733] phi bitmap_line_xdyd::y#6 = bitmap_line_xdyd::y#2 [phi:bitmap_line_xdyd::@3/bitmap_line_xdyd::@4->bitmap_line_xdyd::@2#1] -- register_copy - // bitmap_line_xdyd::@2 - __b2: - // x1+1 - // [734] bitmap_line_xdyd::$6 = bitmap_line_xdyd::x1#6 + 1 -- vwuz1=vwuz2_plus_1 - clc - lda.z x1 - adc #1 - sta.z __6 - lda.z x1+1 - adc #0 - sta.z __6+1 - // while (x!=(x1+1)) - // [735] if(bitmap_line_xdyd::x#2!=bitmap_line_xdyd::$6) goto bitmap_line_xdyd::@1 -- vwuz1_neq_vwuz2_then_la1 - lda.z x+1 - cmp.z __6+1 - bne __b1 - lda.z x - cmp.z __6 - bne __b1 - // bitmap_line_xdyd::@return - // } - // [736] return - rts -} - // divr16u -// Performs division on two 16 bit unsigned ints and an initial remainder -// Returns the quotient dividend/divisor. -// The final remainder will be set into the global variable rem16u -// Implemented using simple binary division -// __zp($27) unsigned int divr16u(__zp(2) unsigned int dividend, __zp($1e) unsigned int divisor, __zp($22) unsigned int rem) -divr16u: { - .label rem = $22 - .label dividend = 2 - .label quotient = $27 - .label return = $27 - .label divisor = $1e - // [738] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] - // [738] phi divr16u::i#2 = 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 - ldx #0 - // [738] phi divr16u::quotient#3 = 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 - txa - sta.z quotient - sta.z quotient+1 - // [738] phi divr16u::dividend#2 = divr16u::dividend#1 [phi:divr16u->divr16u::@1#2] -- register_copy - // [738] phi divr16u::rem#4 = 0 [phi:divr16u->divr16u::@1#3] -- vwuz1=vbuc1 - sta.z rem - sta.z rem+1 - // [738] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] - // [738] phi divr16u::i#2 = divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - // [738] phi divr16u::quotient#3 = divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - // [738] phi divr16u::dividend#2 = divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - // [738] phi divr16u::rem#4 = divr16u::rem#10 [phi:divr16u::@3->divr16u::@1#3] -- register_copy - // divr16u::@1 - __b1: - // rem = rem << 1 - // [739] divr16u::rem#0 = divr16u::rem#4 << 1 -- vwuz1=vwuz1_rol_1 - asl.z rem - rol.z rem+1 - // BYTE1(dividend) - // [740] divr16u::$1 = byte1 divr16u::dividend#2 -- vbuaa=_byte1_vwuz1 - lda.z dividend+1 - // BYTE1(dividend) & $80 - // [741] divr16u::$2 = divr16u::$1 & $80 -- vbuaa=vbuaa_band_vbuc1 - and #$80 - // if( (BYTE1(dividend) & $80) != 0 ) - // [742] if(divr16u::$2==0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 - cmp #0 - beq __b2 - // divr16u::@4 - // rem = rem | 1 - // [743] divr16u::rem#1 = divr16u::rem#0 | 1 -- vwuz1=vwuz1_bor_vbuc1 - lda #1 - ora.z rem - sta.z rem - // [744] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] - // [744] phi divr16u::rem#5 = divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy - // divr16u::@2 - __b2: - // dividend = dividend << 1 - // [745] divr16u::dividend#0 = divr16u::dividend#2 << 1 -- vwuz1=vwuz1_rol_1 - asl.z dividend - rol.z dividend+1 - // quotient = quotient << 1 - // [746] divr16u::quotient#1 = divr16u::quotient#3 << 1 -- vwuz1=vwuz1_rol_1 - asl.z quotient - rol.z quotient+1 - // if(rem>=divisor) - // [747] if(divr16u::rem#5divr16u::@3] - // [750] phi divr16u::return#0 = divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - // [750] phi divr16u::rem#10 = divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy - // divr16u::@3 - __b3: - // for( char i : 0..15) - // [751] divr16u::i#1 = ++ divr16u::i#2 -- vbuxx=_inc_vbuxx - inx - // [752] if(divr16u::i#1!=$10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 - cpx #$10 - bne __b1 - // divr16u::@6 - // rem16u = rem - // [753] rem16u#0 = divr16u::rem#10 -- vwuz1=vwuz2 - lda.z rem - sta.z rem16u - lda.z rem+1 - sta.z rem16u+1 - // divr16u::@return - // } - // [754] return - rts -} - // insertup -// Insert a new line, and scroll the upper part of the screen up. -insertup: { - .label cy = $21 - .label width = $20 - .label line = $a - .label start = $a - // unsigned byte cy = conio_cursor_y[conio_screen_layer] - // [755] insertup::cy#0 = conio_cursor_y[conio_screen_layer] -- vbuz1=pbuc1_derefidx_vbuz2 - ldy.z conio_screen_layer - lda conio_cursor_y,y - sta.z cy - // unsigned byte width = CONIO_WIDTH * 2 - // [756] insertup::width#0 = conio_screen_width << 1 -- vbuz1=vbuz2_rol_1 - lda.z conio_screen_width - asl - sta.z width - // [757] phi from insertup to insertup::@1 [phi:insertup->insertup::@1] - // [757] phi insertup::i#2 = 1 [phi:insertup->insertup::@1#0] -- vbuxx=vbuc1 - ldx #1 - // insertup::@1 - __b1: - // for(unsigned byte i=1; i<=cy; i++) - // [758] if(insertup::i#2<=insertup::cy#0) goto insertup::@2 -- vbuxx_le_vbuz1_then_la1 - lda.z cy - stx.z $ff - cmp.z $ff - bcs __b2 - // [759] phi from insertup::@1 to insertup::@3 [phi:insertup::@1->insertup::@3] - // insertup::@3 - // clearline() - // [760] call clearline - jsr clearline - // insertup::@return - // } - // [761] return - rts - // insertup::@2 - __b2: - // i-1 - // [762] insertup::$3 = insertup::i#2 - 1 -- vbuaa=vbuxx_minus_1 - txa - sec - sbc #1 - // unsigned int line = (i-1) << conio_rowshift - // [763] insertup::line#0 = insertup::$3 << conio_rowshift -- vwuz1=vbuaa_rol_vbuz2 - ldy.z conio_rowshift - sta.z line - lda #0 - sta.z line+1 - cpy #0 - beq !e+ - !: - asl.z line - rol.z line+1 - dey - bne !- - !e: - // unsigned char* start = CONIO_SCREEN_TEXT + line - // [764] insertup::start#0 = CONIO_SCREEN_TEXT#12 + insertup::line#0 -- pbuz1=pbuz2_plus_vwuz1 - clc - lda.z start - adc.z CONIO_SCREEN_TEXT - sta.z start - lda.z start+1 - adc.z CONIO_SCREEN_TEXT+1 - sta.z start+1 - // start+conio_rowskip - // [765] memcpy_in_vram::src#0 = insertup::start#0 + conio_rowskip -- pbuz1=pbuz2_plus_vwuz3 - lda.z start - clc - adc.z conio_rowskip - sta.z memcpy_in_vram.src - lda.z start+1 - adc.z conio_rowskip+1 - sta.z memcpy_in_vram.src+1 - // memcpy_in_vram(0, start, VERA_INC_1, 0, start+conio_rowskip, VERA_INC_1, width) - // [766] memcpy_in_vram::dest#0 = (void *)insertup::start#0 - // [767] memcpy_in_vram::num#0 = insertup::width#0 -- vwuz1=vbuz2 - lda.z width - sta.z memcpy_in_vram.num - lda #0 - sta.z memcpy_in_vram.num+1 - // [768] memcpy_in_vram::src#3 = (void *)memcpy_in_vram::src#0 - // memcpy_in_vram(0, start, VERA_INC_1, 0, start+conio_rowskip, VERA_INC_1, width) - // [769] call memcpy_in_vram - // [273] phi from insertup::@2 to memcpy_in_vram [phi:insertup::@2->memcpy_in_vram] - // [273] phi memcpy_in_vram::num#3 = memcpy_in_vram::num#0 [phi:insertup::@2->memcpy_in_vram#0] -- register_copy - // [273] phi memcpy_in_vram::dest_bank#2 = 0 [phi:insertup::@2->memcpy_in_vram#1] -- vbuyy=vbuc1 - tay - // [273] phi memcpy_in_vram::dest#2 = memcpy_in_vram::dest#0 [phi:insertup::@2->memcpy_in_vram#2] -- register_copy - // [273] phi memcpy_in_vram::src#2 = memcpy_in_vram::src#3 [phi:insertup::@2->memcpy_in_vram#3] -- register_copy - jsr memcpy_in_vram - // insertup::@4 - // for(unsigned byte i=1; i<=cy; i++) - // [770] insertup::i#1 = ++ insertup::i#2 -- vbuxx=_inc_vbuxx - inx - // [757] phi from insertup::@4 to insertup::@1 [phi:insertup::@4->insertup::@1] - // [757] phi insertup::i#2 = insertup::i#1 [phi:insertup::@4->insertup::@1#0] -- register_copy - jmp __b1 -} - // bitmap_plot -// void bitmap_plot(__zp($1e) unsigned int x, __zp(4) unsigned int y, __register(X) char c) -bitmap_plot: { - .label __9 = $e - .label __10 = $c - .label plot_x = $1a - .label plot_y = $10 - .label vera_vram_address01_bankaddr = $1a - .label x = $1e - .label y = 4 - .label __12 = $e - .label __13 = $c - .label __14 = $14 - .label __15 = $16 - // dword plot_x = __bitmap_plot_x[x] - // [772] bitmap_plot::$9 = bitmap_plot::x#4 << 1 -- vwuz1=vwuz2_rol_1 - lda.z x - asl - sta.z __9 - lda.z x+1 - rol - sta.z __9+1 - // [773] bitmap_plot::$12 = __bitmap_plot_x + bitmap_plot::$9 -- pwuz1=pwuc1_plus_vwuz1 - lda.z __12 - clc - adc #<__bitmap_plot_x - sta.z __12 - lda.z __12+1 - adc #>__bitmap_plot_x - sta.z __12+1 - // [774] bitmap_plot::plot_x#0 = (unsigned long)*bitmap_plot::$12 -- vduz1=_dword__deref_pwuz2 - // Needs unsigned int arrays arranged as two underlying char arrays to allow char* plotter_x = plot_x[x]; - and eventually - char* plotter = plot_x[x] + plot_y[y]; - ldy #0 - sty.z plot_x+2 - sty.z plot_x+3 - lda (__12),y - sta.z plot_x - iny - lda (__12),y - sta.z plot_x+1 - // dword plot_y = __bitmap_plot_y[y] - // [775] bitmap_plot::$10 = bitmap_plot::y#4 << 2 -- vwuz1=vwuz2_rol_2 - lda.z y - asl - sta.z __10 - lda.z y+1 - rol - sta.z __10+1 - asl.z __10 - rol.z __10+1 - // [776] bitmap_plot::$13 = __bitmap_plot_y + bitmap_plot::$10 -- pduz1=pduc1_plus_vwuz1 - lda.z __13 - clc - adc #<__bitmap_plot_y - sta.z __13 - lda.z __13+1 - adc #>__bitmap_plot_y - sta.z __13+1 - // [777] bitmap_plot::plot_y#0 = *bitmap_plot::$13 -- vduz1=_deref_pduz2 - ldy #0 - lda (__13),y - sta.z plot_y - iny - lda (__13),y - sta.z plot_y+1 - iny - lda (__13),y - sta.z plot_y+2 - iny - lda (__13),y - sta.z plot_y+3 - // dword plotter = plot_x+plot_y - // [778] bitmap_plot::vera_vram_address01_bankaddr#0 = bitmap_plot::plot_x#0 + bitmap_plot::plot_y#0 -- vduz1=vduz1_plus_vduz2 - clc - lda.z vera_vram_address01_bankaddr - adc.z plot_y - sta.z vera_vram_address01_bankaddr - lda.z vera_vram_address01_bankaddr+1 - adc.z plot_y+1 - sta.z vera_vram_address01_bankaddr+1 - lda.z vera_vram_address01_bankaddr+2 - adc.z plot_y+2 - sta.z vera_vram_address01_bankaddr+2 - lda.z vera_vram_address01_bankaddr+3 - adc.z plot_y+3 - sta.z vera_vram_address01_bankaddr+3 - // byte bitshift = __bitmap_plot_bitshift[x] - // [779] bitmap_plot::$14 = __bitmap_plot_bitshift + bitmap_plot::x#4 -- pbuz1=pbuc1_plus_vwuz2 - lda.z x - clc - adc #<__bitmap_plot_bitshift - sta.z __14 - lda.z x+1 - adc #>__bitmap_plot_bitshift - sta.z __14+1 - // [780] bitmap_plot::bitshift#0 = *bitmap_plot::$14 -- vbuaa=_deref_pbuz1 - ldy #0 - lda (__14),y - // bitshift?c<<(bitshift):c - // [781] if(0!=bitmap_plot::bitshift#0) goto bitmap_plot::@1 -- 0_neq_vbuaa_then_la1 - cmp #0 - bne __b1 - // [783] phi from bitmap_plot bitmap_plot::@1 to bitmap_plot::@2 [phi:bitmap_plot/bitmap_plot::@1->bitmap_plot::@2] - // [783] phi bitmap_plot::c#0 = bitmap_plot::c#5 [phi:bitmap_plot/bitmap_plot::@1->bitmap_plot::@2#0] -- register_copy - jmp __b2 - // bitmap_plot::@1 - __b1: - // [782] bitmap_plot::$3 = bitmap_plot::c#5 << bitmap_plot::bitshift#0 -- vbuxx=vbuxx_rol_vbuaa - tay - txa - cpy #0 - beq !e+ - !: - asl - dey - bne !- - !e: - tax - // bitmap_plot::@2 - __b2: - // bitmap_plot::vera_vram_address01 - // *VERA_CTRL &= ~VERA_ADDRSEL - // [784] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // BYTE0(bankaddr) - // [785] bitmap_plot::vera_vram_address01_$0 = byte0 bitmap_plot::vera_vram_address01_bankaddr#0 -- vbuaa=_byte0_vduz1 - lda.z vera_vram_address01_bankaddr - // *VERA_ADDRX_L = BYTE0(bankaddr) - // [786] *VERA_ADDRX_L = bitmap_plot::vera_vram_address01_$0 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_L - // BYTE1(bankaddr) - // [787] bitmap_plot::vera_vram_address01_$1 = byte1 bitmap_plot::vera_vram_address01_bankaddr#0 -- vbuaa=_byte1_vduz1 - lda.z vera_vram_address01_bankaddr+1 - // *VERA_ADDRX_M = BYTE1(bankaddr) - // [788] *VERA_ADDRX_M = bitmap_plot::vera_vram_address01_$1 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // BYTE2(bankaddr) | incr - // [789] bitmap_plot::vera_vram_address01_$3 = byte2 bitmap_plot::vera_vram_address01_bankaddr#0 -- vbuaa=_byte2_vduz1 - lda.z vera_vram_address01_bankaddr+2 - // *VERA_ADDRX_H = BYTE2(bankaddr) | incr - // [790] *VERA_ADDRX_H = bitmap_plot::vera_vram_address01_$3 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_H - // bitmap_plot::@3 - // ~__bitmap_plot_bitmask[x] - // [791] bitmap_plot::$15 = __bitmap_plot_bitmask + bitmap_plot::x#4 -- pbuz1=pbuc1_plus_vwuz2 - lda.z x - clc - adc #<__bitmap_plot_bitmask - sta.z __15 - lda.z x+1 - adc #>__bitmap_plot_bitmask - sta.z __15+1 - // [792] bitmap_plot::$6 = ~ *bitmap_plot::$15 -- vbuaa=_bnot__deref_pbuz1 - ldy #0 - lda (__15),y - eor #$ff - // *VERA_DATA0 & ~__bitmap_plot_bitmask[x] - // [793] bitmap_plot::$7 = *VERA_DATA0 & bitmap_plot::$6 -- vbuaa=_deref_pbuc1_band_vbuaa - and VERA_DATA0 - // (*VERA_DATA0 & ~__bitmap_plot_bitmask[x]) | c - // [794] bitmap_plot::$8 = bitmap_plot::$7 | bitmap_plot::c#0 -- vbuaa=vbuaa_bor_vbuxx - stx.z $ff - ora.z $ff - // *VERA_DATA0 = (*VERA_DATA0 & ~__bitmap_plot_bitmask[x]) | c - // [795] *VERA_DATA0 = bitmap_plot::$8 -- _deref_pbuc1=vbuaa - sta VERA_DATA0 - // bitmap_plot::@return - // } - // [796] return - rts -} - // clearline -clearline: { - .label addr = $e - .label c = 4 - // *VERA_CTRL &= ~VERA_ADDRSEL - // [797] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // byte* addr = CONIO_SCREEN_TEXT + conio_line_text[conio_screen_layer] - // [798] clearline::$5 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [799] clearline::addr#0 = CONIO_SCREEN_TEXT#12 + conio_line_text[clearline::$5] -- pbuz1=pbuz2_plus_pwuc1_derefidx_vbuaa - // Set address - tay - clc - lda.z CONIO_SCREEN_TEXT - adc conio_line_text,y - sta.z addr - lda.z CONIO_SCREEN_TEXT+1 - adc conio_line_text+1,y - sta.z addr+1 - // BYTE0(addr) - // [800] clearline::$1 = byte0 clearline::addr#0 -- vbuaa=_byte0_pbuz1 - lda.z addr - // *VERA_ADDRX_L = BYTE0(addr) - // [801] *VERA_ADDRX_L = clearline::$1 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_L - // BYTE1(addr) - // [802] clearline::$2 = byte1 clearline::addr#0 -- vbuaa=_byte1_pbuz1 - lda.z addr+1 - // *VERA_ADDRX_M = BYTE1(addr) - // [803] *VERA_ADDRX_M = clearline::$2 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // *VERA_ADDRX_H = VERA_INC_1 - // [804] *VERA_ADDRX_H = VERA_INC_1 -- _deref_pbuc1=vbuc2 - lda #VERA_INC_1 - sta VERA_ADDRX_H - // char color = vera_layer_get_color( conio_screen_layer) - // [805] vera_layer_get_color::layer#1 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [806] call vera_layer_get_color - // [254] phi from clearline to vera_layer_get_color [phi:clearline->vera_layer_get_color] - // [254] phi vera_layer_get_color::layer#2 = vera_layer_get_color::layer#1 [phi:clearline->vera_layer_get_color#0] -- register_copy - jsr vera_layer_get_color - // char color = vera_layer_get_color( conio_screen_layer) - // [807] vera_layer_get_color::return#4 = vera_layer_get_color::return#3 - // clearline::@4 - // [808] clearline::color#0 = vera_layer_get_color::return#4 -- vbuxx=vbuaa - tax - // [809] phi from clearline::@4 to clearline::@1 [phi:clearline::@4->clearline::@1] - // [809] phi clearline::c#2 = 0 [phi:clearline::@4->clearline::@1#0] -- vwuz1=vwuc1 - lda #<0 - sta.z c - sta.z c+1 - // clearline::@1 - __b1: - // for( unsigned int c=0;cclearline::@1] - // [809] phi clearline::c#2 = clearline::c#1 [phi:clearline::@2->clearline::@1#0] -- register_copy - jmp __b1 -} - // File Data -.segment Data - VERA_LAYER_WIDTH: .word $20, $40, $80, $100 - VERA_LAYER_HEIGHT: .word $20, $40, $80, $100 - /// --- VERA function encapsulation --- - vera_mapbase_offset: .word 0, 0 - vera_mapbase_bank: .byte 0, 0 - vera_mapbase_address: .dword 0, 0 - vera_tilebase_offset: .word 0, 0 - vera_tilebase_bank: .byte 0, 0 - vera_tilebase_address: .dword 0, 0 - vera_layer_rowshift: .byte 0, 0 - vera_layer_rowskip: .word 0, 0 - vera_layer_config: .word VERA_L0_CONFIG, VERA_L1_CONFIG - vera_layer_enable: .byte VERA_LAYER0_ENABLE, VERA_LAYER1_ENABLE - vera_layer_mapbase: .word VERA_L0_MAPBASE, VERA_L1_MAPBASE - vera_layer_tilebase: .word VERA_L0_TILEBASE, VERA_L1_TILEBASE - vera_layer_textcolor: .byte WHITE, WHITE - vera_layer_backcolor: .byte BLUE, BLUE - // The number of bytes on the screen - // The current cursor x-position - conio_cursor_x: .byte 0, 0 - // The current cursor y-position - conio_cursor_y: .byte 0, 0 - // The current text cursor line start - conio_line_text: .word 0, 0 - // Is scrolling enabled when outputting beyond the end of the screen (1: yes, 0: no). - // If disabled the cursor just moves back to (0,0) instead - conio_scroll_enable: .byte 1, 1 - // Tables for the plotter - initialized by calling bitmap_draw_init(); - __bitmap_plot_x: .fill 2*$280, 0 - __bitmap_plot_y: .fill 4*$1e0, 0 - __bitmap_plot_bitmask: .fill $280, 0 - __bitmap_plot_bitshift: .fill $280, 0 - hdeltas: .word 0, $50, $28, $14, 0, $a0, $50, $28, 0, $140, $a0, $50, 0, $280, $140, $a0 - vdeltas: .word 0, $1e0, $f0, $a0 - bitmasks: .byte $80, $c0, $f0, $ff - .fill 1, 0 - bitshifts: .byte 7, 6, 4, 0 - .fill 1, 0 - diff --git a/src/test/ref/examples/cx16/veralib/bitmap_8bpp_320_x_240.sym b/src/test/ref/examples/cx16/veralib/bitmap_8bpp_320_x_240.sym deleted file mode 100644 index a42410c93..000000000 --- a/src/test/ref/examples/cx16/veralib/bitmap_8bpp_320_x_240.sym +++ /dev/null @@ -1,1121 +0,0 @@ -__constant const char BLACK = 0 -__constant const char BLUE = 6 -char CONIO_SCREEN_BANK -char CONIO_SCREEN_BANK#12 // CONIO_SCREEN_BANK zp[1]:136 625.0625 -char CONIO_SCREEN_BANK#15 // CONIO_SCREEN_BANK_1 zp[1]:171 7.76056338028169 -char *CONIO_SCREEN_TEXT -char *CONIO_SCREEN_TEXT#12 // CONIO_SCREEN_TEXT zp[2]:43 2.000018187272727E7 -unsigned int CONIO_SCREEN_TEXT#17 // CONIO_SCREEN_TEXT_1 zp[2]:178 0.7318840579710145 -__constant char RADIX::BINARY = 2 -__constant char RADIX::DECIMAL = $a -__constant char RADIX::HEXADECIMAL = $10 -__constant char RADIX::OCTAL = 8 -__constant char SIZEOF_POINTER = 2 -__constant unsigned int STACK_BASE = $103 -__constant const char VERA_ADDRSEL = 1 -__constant char * const VERA_ADDRX_H = (char *) 40738 -__constant char * const VERA_ADDRX_L = (char *) 40736 -__constant char * const VERA_ADDRX_M = (char *) 40737 -__constant char * const VERA_CTRL = (char *) 40741 -__constant char * const VERA_DATA0 = (char *) 40739 -__constant char * const VERA_DATA1 = (char *) 40740 -__constant char * const VERA_DC_HSCALE = (char *) 40746 -__constant char * const VERA_DC_VIDEO = (char *) 40745 -__constant char * const VERA_DC_VSCALE = (char *) 40747 -__constant const char VERA_INC_1 = $10 -__constant char * const VERA_L0_CONFIG = (char *) 40749 -__constant char * const VERA_L0_MAPBASE = (char *) 40750 -__constant char * const VERA_L0_TILEBASE = (char *) 40751 -__constant char * const VERA_L1_CONFIG = (char *) 40756 -__constant char * const VERA_L1_MAPBASE = (char *) 40757 -__constant char * const VERA_L1_TILEBASE = (char *) 40758 -__constant const char VERA_LAYER0_ENABLE = $10 -__constant const char VERA_LAYER1_ENABLE = $20 -__constant const char VERA_LAYER_COLOR_DEPTH_1BPP = 0 -__constant const char VERA_LAYER_COLOR_DEPTH_8BPP = 3 -__constant const char VERA_LAYER_COLOR_DEPTH_MASK = 3 -__constant const char VERA_LAYER_CONFIG_256C = 8 -__constant const char VERA_LAYER_CONFIG_MODE_BITMAP = 4 -__constant const unsigned int VERA_LAYER_HEIGHT[4] = { $20, $40, $80, $100 } -__constant const char VERA_LAYER_HEIGHT_128 = $80 -__constant const char VERA_LAYER_HEIGHT_256 = $c0 -__constant const char VERA_LAYER_HEIGHT_64 = $40 -__constant const char VERA_LAYER_HEIGHT_MASK = $c0 -__constant const char VERA_LAYER_TILEBASE_MASK = $fc -__constant const unsigned int VERA_LAYER_WIDTH[4] = { $20, $40, $80, $100 } -__constant const char VERA_LAYER_WIDTH_128 = $20 -__constant const char VERA_LAYER_WIDTH_256 = $30 -__constant const char VERA_LAYER_WIDTH_64 = $10 -__constant const char VERA_LAYER_WIDTH_MASK = $30 -__constant const char VERA_TILEBASE_HEIGHT_16 = 2 -__constant const char VERA_TILEBASE_WIDTH_16 = 1 -__constant const char WHITE = 1 -__constant const char YELLOW = 7 -__loadstore unsigned long __bitmap_address // zp[4]:172 4.06 -__loadstore char __bitmap_color_depth // zp[1]:167 80.4074074074074 -__loadstore char __bitmap_hscale // zp[1]:176 3.9102564102564106 -__loadstore char __bitmap_layer // zp[1]:150 204.0 -__constant const char __bitmap_plot_bitmask[$280] = { fill( $280, 0) } -__constant const char __bitmap_plot_bitshift[$280] = { fill( $280, 0) } -__constant const unsigned int __bitmap_plot_x[$280] = { fill( $280, 0) } -__constant const unsigned long __bitmap_plot_y[$1e0] = { fill( $1e0, 0) } -__loadstore char __bitmap_vscale // zp[1]:177 2.8732394366197185 -void __start() -void bitmap_clear() -char bitmap_clear::$0 // reg byte a 202.0 -char bitmap_clear::$1 // reg byte a 202.0 -char bitmap_clear::$6 // reg byte a 202.0 -char bitmap_clear::$7 // reg byte a 202.0 -unsigned long bitmap_clear::count -unsigned long bitmap_clear::count#0 // count zp[4]:114 40.4 -unsigned int bitmap_clear::hdelta -unsigned int bitmap_clear::hdelta#0 // hdelta zp[2]:157 202.0 -char bitmap_clear::vbank -char bitmap_clear::vbank#0 // reg byte x 101.0 -unsigned int bitmap_clear::vdelta -unsigned int bitmap_clear::vdelta#0 // vdelta zp[2]:161 33.666666666666664 -void *bitmap_clear::vdest -unsigned int bitmap_clear::vdest#0 // vdest zp[2]:145 50.5 -void bitmap_init(char layer , unsigned long address) -char bitmap_init::$0 // reg byte a 202.0 -char bitmap_init::$1 // reg byte x 202.0 -unsigned int bitmap_init::$10 // zp[2]:131 667.3333333333334 -unsigned int bitmap_init::$13 // zp[2]:133 667.3333333333334 -char bitmap_init::$2 // reg byte x 202.0 -unsigned int bitmap_init::$23 // zp[2]:55 2002.0 -unsigned int bitmap_init::$24 // zp[2]:57 2002.0 -unsigned int bitmap_init::$25 // zp[2]:59 2002.0 -unsigned int bitmap_init::$26 // zp[2]:61 2002.0 -char bitmap_init::$27 // reg byte a 202.0 -unsigned int bitmap_init::$28 // zp[2]:63 2002.0 -const unsigned int *bitmap_init::$29 // zp[2]:55 2002.0 -char bitmap_init::$3 // reg byte a 202.0 -const char *bitmap_init::$30 // zp[2]:81 2002.0 -const char *bitmap_init::$31 // zp[2]:83 2002.0 -const unsigned int *bitmap_init::$32 // zp[2]:57 2002.0 -const char *bitmap_init::$33 // zp[2]:85 2002.0 -const char *bitmap_init::$34 // zp[2]:87 2002.0 -const unsigned int *bitmap_init::$35 // zp[2]:59 2002.0 -const char *bitmap_init::$36 // zp[2]:89 2002.0 -const char *bitmap_init::$37 // zp[2]:91 2002.0 -const unsigned int *bitmap_init::$38 // zp[2]:61 2002.0 -const char *bitmap_init::$39 // zp[2]:93 2002.0 -char bitmap_init::$4 // reg byte a 202.0 -const char *bitmap_init::$40 // zp[2]:95 2002.0 -const unsigned long *bitmap_init::$41 // zp[2]:63 2002.0 -unsigned int bitmap_init::$7 // zp[2]:129 667.3333333333334 -unsigned long bitmap_init::address -__constant unsigned long bitmap_init::address#0 = 0 // address -char bitmap_init::bitmask -char bitmap_init::bitmask#0 // bitmask zp[1]:33 101.0 -char bitmap_init::bitmask#1 // bitmask zp[1]:33 2002.0 -char bitmap_init::bitmask#10 // bitmask zp[1]:33 373.1818181818182 -char bitmap_init::bitmask#11 // bitmask zp[1]:33 455.0 -char bitmap_init::bitmask#12 // bitmask zp[1]:33 455.0 -char bitmap_init::bitmask#13 // bitmask zp[1]:33 385.0 -char bitmap_init::bitmask#16 // bitmask zp[1]:33 1001.0 -char bitmap_init::bitmask#2 // bitmask zp[1]:33 2002.0 -char bitmap_init::bitmask#3 // bitmask zp[1]:33 2002.0 -char bitmap_init::bitmask#4 // bitmask zp[1]:33 2002.0 -signed char bitmap_init::bitshift -signed char bitmap_init::bitshift#0 // bitshift zp[1]:32 202.0 -signed char bitmap_init::bitshift#1 // bitshift zp[1]:32 1001.0 -signed char bitmap_init::bitshift#10 // bitshift zp[1]:32 310.4 -signed char bitmap_init::bitshift#11 // bitshift zp[1]:32 400.4 -signed char bitmap_init::bitshift#12 // bitshift zp[1]:32 400.4 -signed char bitmap_init::bitshift#13 // bitshift zp[1]:32 400.4 -signed char bitmap_init::bitshift#14 // bitshift zp[1]:32 500.5 -signed char bitmap_init::bitshift#2 // bitshift zp[1]:32 1001.0 -signed char bitmap_init::bitshift#3 // bitshift zp[1]:32 1001.0 -signed char bitmap_init::bitshift#4 // bitshift zp[1]:32 2002.0 -unsigned int bitmap_init::hdelta -unsigned int bitmap_init::hdelta#0 // hdelta zp[2]:163 122.44444444444446 -char bitmap_init::layer -__constant char bitmap_init::layer#0 = 0 // layer -char bitmap_init::vera_layer_get_color_depth1_$0 // reg byte a 202.0 -char bitmap_init::vera_layer_get_color_depth1_$1 // reg byte a 202.0 -char *bitmap_init::vera_layer_get_color_depth1_config -char *bitmap_init::vera_layer_get_color_depth1_config#0 // vera_layer_get_color_depth1_config zp[2]:155 202.0 -char bitmap_init::vera_layer_get_color_depth1_layer -char bitmap_init::vera_layer_get_color_depth1_layer#0 // reg byte a 202.0 -char bitmap_init::vera_layer_get_color_depth1_return -char bitmap_init::vera_layer_get_color_depth1_return#0 // reg byte a 202.0 -char bitmap_init::vera_layer_get_color_depth1_return#1 // reg byte a 202.0 -unsigned int bitmap_init::x -unsigned int bitmap_init::x#1 // x zp[2]:103 1501.5 -unsigned int bitmap_init::x#10 // x zp[2]:103 353.29411764705884 -unsigned int bitmap_init::y -unsigned int bitmap_init::y#1 // y zp[2]:71 1501.5 -unsigned int bitmap_init::y#2 // y zp[2]:71 600.5999999999999 -unsigned long bitmap_init::yoffs -unsigned long bitmap_init::yoffs#0 // yoffs zp[4]:106 202.0 -unsigned long bitmap_init::yoffs#1 // yoffs zp[4]:106 667.3333333333334 -unsigned long bitmap_init::yoffs#2 // yoffs zp[4]:106 776.0 -void bitmap_line(unsigned int x0 , unsigned int x1 , unsigned int y0 , unsigned int y1 , char c) -char bitmap_line::c -char bitmap_line::c#0 // reg byte x 202.0 -char bitmap_line::c#1 // reg byte x 2002.0 -char bitmap_line::c#10 // reg byte x 1502.037037037037 -unsigned int bitmap_line::x0 -unsigned int bitmap_line::x0#0 // x0 zp[2]:6 8.782608695652174 -unsigned int bitmap_line::x0#1 // x0 zp[2]:6 667.3333333333334 -unsigned int bitmap_line::x0#10 // x0 zp[2]:6 4555.550000000001 -unsigned int bitmap_line::x1 -unsigned int bitmap_line::x1#0 // x1 zp[2]:10 11.882352941176471 -unsigned int bitmap_line::x1#1 // x1 zp[2]:10 1001.0 -unsigned int bitmap_line::x1#10 // x1 zp[2]:10 4555.550000000001 -unsigned int bitmap_line::xd -unsigned int bitmap_line::xd#1 // xd zp[2]:34 3500.3500000000004 -unsigned int bitmap_line::xd#2 // xd zp[2]:34 3500.3500000000004 -unsigned int bitmap_line::y0 -unsigned int bitmap_line::y0#0 // y0 zp[2]:8 18.363636363636363 -unsigned int bitmap_line::y0#10 // y0 zp[2]:8 6005.6500000000015 -unsigned int bitmap_line::y1 -unsigned int bitmap_line::y1#0 // y1 zp[2]:2 40.4 -unsigned int bitmap_line::y1#10 // y1 zp[2]:2 6005.6500000000015 -unsigned int bitmap_line::yd -unsigned int bitmap_line::yd#1 // yd zp[2]:41 4444.888888888889 -unsigned int bitmap_line::yd#10 // yd zp[2]:41 4444.888888888889 -unsigned int bitmap_line::yd#11 // yd_1 zp[2]:39 4444.888888888889 -unsigned int bitmap_line::yd#2 // yd_1 zp[2]:39 4444.888888888889 -void bitmap_line_xdyd(unsigned int x , unsigned int y , unsigned int x1 , unsigned int xd , unsigned int yd , char c) -unsigned int bitmap_line_xdyd::$6 // zp[2]:14 2.00000002E8 -char bitmap_line_xdyd::c -char bitmap_line_xdyd::c#0 // c zp[1]:32 20002.0 -char bitmap_line_xdyd::c#1 // c zp[1]:32 20002.0 -char bitmap_line_xdyd::c#3 // c zp[1]:32 6668000.2 -unsigned int bitmap_line_xdyd::e -unsigned int bitmap_line_xdyd::e#0 // e zp[2]:24 200002.0 -unsigned int bitmap_line_xdyd::e#1 // e zp[2]:24 1.3333333466666667E8 -unsigned int bitmap_line_xdyd::e#2 // e zp[2]:24 2.00000002E8 -unsigned int bitmap_line_xdyd::e#3 // e zp[2]:24 3.33500005E7 -unsigned int bitmap_line_xdyd::e#6 // e zp[2]:24 1.00000001E8 -unsigned int bitmap_line_xdyd::x -unsigned int bitmap_line_xdyd::x#0 // x zp[2]:30 3333.6666666666665 -unsigned int bitmap_line_xdyd::x#1 // x zp[2]:30 3333.6666666666665 -unsigned int bitmap_line_xdyd::x#2 // x zp[2]:30 3.7500000375E7 -unsigned int bitmap_line_xdyd::x#3 // x zp[2]:30 6.00200008E7 -unsigned int bitmap_line_xdyd::x#6 // x zp[2]:30 60001.5 -unsigned int bitmap_line_xdyd::x1 -unsigned int bitmap_line_xdyd::x1#0 // x1 zp[2]:6 5000.5 -unsigned int bitmap_line_xdyd::x1#1 // x1 zp[2]:6 5000.5 -unsigned int bitmap_line_xdyd::x1#6 // x1 zp[2]:6 6668000.2 -unsigned int bitmap_line_xdyd::xd -unsigned int bitmap_line_xdyd::xd#0 // xd zp[2]:34 6667.333333333333 -unsigned int bitmap_line_xdyd::xd#1 // xd zp[2]:34 6667.333333333333 -unsigned int bitmap_line_xdyd::xd#5 // xd zp[2]:34 1.3334666933333334E7 -unsigned int bitmap_line_xdyd::y -unsigned int bitmap_line_xdyd::y#0 // y zp[2]:8 4000.4 -unsigned int bitmap_line_xdyd::y#1 // y zp[2]:8 4000.4 -unsigned int bitmap_line_xdyd::y#2 // y zp[2]:8 1.00000001E8 -unsigned int bitmap_line_xdyd::y#3 // y zp[2]:8 5.0012500625E7 -unsigned int bitmap_line_xdyd::y#5 // y zp[2]:8 60001.5 -unsigned int bitmap_line_xdyd::y#6 // y zp[2]:8 1.00000001E8 -unsigned int bitmap_line_xdyd::yd -unsigned int bitmap_line_xdyd::yd#0 // yd zp[2]:41 10001.0 -unsigned int bitmap_line_xdyd::yd#1 // yd zp[2]:41 10001.0 -unsigned int bitmap_line_xdyd::yd#2 // yd zp[2]:41 6674666.933333334 -void bitmap_line_xdyi(unsigned int x , unsigned int y , unsigned int x1 , unsigned int xd , unsigned int yd , char c) -unsigned int bitmap_line_xdyi::$6 // zp[2]:14 2.00000002E8 -char bitmap_line_xdyi::c -char bitmap_line_xdyi::c#0 // c zp[1]:33 20002.0 -char bitmap_line_xdyi::c#1 // c zp[1]:33 20002.0 -char bitmap_line_xdyi::c#3 // c zp[1]:33 6668000.2 -unsigned int bitmap_line_xdyi::e -unsigned int bitmap_line_xdyi::e#0 // e zp[2]:24 200002.0 -unsigned int bitmap_line_xdyi::e#1 // e zp[2]:24 1.3333333466666667E8 -unsigned int bitmap_line_xdyi::e#2 // e zp[2]:24 2.00000002E8 -unsigned int bitmap_line_xdyi::e#3 // e zp[2]:24 3.33500005E7 -unsigned int bitmap_line_xdyi::e#6 // e zp[2]:24 1.00000001E8 -unsigned int bitmap_line_xdyi::x -unsigned int bitmap_line_xdyi::x#0 // x zp[2]:30 3333.6666666666665 -unsigned int bitmap_line_xdyi::x#1 // x zp[2]:30 3333.6666666666665 -unsigned int bitmap_line_xdyi::x#2 // x zp[2]:30 3.7500000375E7 -unsigned int bitmap_line_xdyi::x#3 // x zp[2]:30 6.00200008E7 -unsigned int bitmap_line_xdyi::x#6 // x zp[2]:30 60001.5 -unsigned int bitmap_line_xdyi::x1 -unsigned int bitmap_line_xdyi::x1#0 // x1 zp[2]:6 5000.5 -unsigned int bitmap_line_xdyi::x1#1 // x1 zp[2]:6 5000.5 -unsigned int bitmap_line_xdyi::x1#6 // x1 zp[2]:6 6668000.2 -unsigned int bitmap_line_xdyi::xd -unsigned int bitmap_line_xdyi::xd#0 // xd zp[2]:34 6667.333333333333 -unsigned int bitmap_line_xdyi::xd#1 // xd zp[2]:34 6667.333333333333 -unsigned int bitmap_line_xdyi::xd#5 // xd zp[2]:34 1.3334666933333334E7 -unsigned int bitmap_line_xdyi::y -unsigned int bitmap_line_xdyi::y#0 // y zp[2]:8 4000.4 -unsigned int bitmap_line_xdyi::y#1 // y zp[2]:8 4000.4 -unsigned int bitmap_line_xdyi::y#2 // y zp[2]:8 1.00000001E8 -unsigned int bitmap_line_xdyi::y#3 // y zp[2]:8 5.0012500625E7 -unsigned int bitmap_line_xdyi::y#5 // y zp[2]:8 60001.5 -unsigned int bitmap_line_xdyi::y#6 // y zp[2]:8 1.00000001E8 -unsigned int bitmap_line_xdyi::yd -unsigned int bitmap_line_xdyi::yd#0 // yd zp[2]:39 10001.0 -unsigned int bitmap_line_xdyi::yd#1 // yd zp[2]:39 10001.0 -unsigned int bitmap_line_xdyi::yd#2 // yd zp[2]:39 6674666.933333334 -void bitmap_line_ydxd(unsigned int y , unsigned int x , unsigned int y1 , unsigned int yd , unsigned int xd , char c) -unsigned int bitmap_line_ydxd::$6 // zp[2]:14 2.00000002E8 -char bitmap_line_ydxd::c -char bitmap_line_ydxd::c#0 // c zp[1]:32 20002.0 -char bitmap_line_ydxd::c#1 // c zp[1]:32 20002.0 -char bitmap_line_ydxd::c#3 // c zp[1]:32 6668000.2 -unsigned int bitmap_line_ydxd::e -unsigned int bitmap_line_ydxd::e#0 // e zp[2]:24 200002.0 -unsigned int bitmap_line_ydxd::e#1 // e zp[2]:24 1.3333333466666667E8 -unsigned int bitmap_line_ydxd::e#2 // e zp[2]:24 2.00000002E8 -unsigned int bitmap_line_ydxd::e#3 // e zp[2]:24 3.33500005E7 -unsigned int bitmap_line_ydxd::e#6 // e zp[2]:24 1.00000001E8 -unsigned int bitmap_line_ydxd::x -unsigned int bitmap_line_ydxd::x#0 // x zp[2]:6 4000.4 -unsigned int bitmap_line_ydxd::x#1 // x zp[2]:6 4000.4 -unsigned int bitmap_line_ydxd::x#2 // x zp[2]:6 1.00000001E8 -unsigned int bitmap_line_ydxd::x#3 // x zp[2]:6 5.0012500625E7 -unsigned int bitmap_line_ydxd::x#5 // x zp[2]:6 60001.5 -unsigned int bitmap_line_ydxd::x#6 // x zp[2]:6 1.00000001E8 -unsigned int bitmap_line_ydxd::xd -unsigned int bitmap_line_ydxd::xd#0 // xd zp[2]:34 10001.0 -unsigned int bitmap_line_ydxd::xd#1 // xd zp[2]:34 10001.0 -unsigned int bitmap_line_ydxd::xd#2 // xd zp[2]:34 6674666.933333334 -unsigned int bitmap_line_ydxd::y -unsigned int bitmap_line_ydxd::y#0 // y zp[2]:4 3333.6666666666665 -unsigned int bitmap_line_ydxd::y#1 // y zp[2]:4 3333.6666666666665 -unsigned int bitmap_line_ydxd::y#2 // y zp[2]:4 6.00200008E7 -unsigned int bitmap_line_ydxd::y#3 // y zp[2]:4 3.7500000375E7 -unsigned int bitmap_line_ydxd::y#7 // y zp[2]:4 60001.5 -unsigned int bitmap_line_ydxd::y1 -unsigned int bitmap_line_ydxd::y1#0 // y1 zp[2]:8 5000.5 -unsigned int bitmap_line_ydxd::y1#1 // y1 zp[2]:8 5000.5 -unsigned int bitmap_line_ydxd::y1#6 // y1 zp[2]:8 6668000.2 -unsigned int bitmap_line_ydxd::yd -unsigned int bitmap_line_ydxd::yd#0 // yd zp[2]:41 6667.333333333333 -unsigned int bitmap_line_ydxd::yd#1 // yd zp[2]:41 6667.333333333333 -unsigned int bitmap_line_ydxd::yd#5 // yd zp[2]:41 1.3334666933333334E7 -void bitmap_line_ydxi(unsigned int y , unsigned int x , unsigned int y1 , unsigned int yd , unsigned int xd , char c) -unsigned int bitmap_line_ydxi::$6 // zp[2]:30 2.00000002E8 -char bitmap_line_ydxi::c -char bitmap_line_ydxi::c#0 // c zp[1]:32 20002.0 -char bitmap_line_ydxi::c#1 // c zp[1]:32 20002.0 -char bitmap_line_ydxi::c#3 // c zp[1]:32 6668000.2 -unsigned int bitmap_line_ydxi::e -unsigned int bitmap_line_ydxi::e#0 // e zp[2]:24 200002.0 -unsigned int bitmap_line_ydxi::e#1 // e zp[2]:24 1.3333333466666667E8 -unsigned int bitmap_line_ydxi::e#2 // e zp[2]:24 2.00000002E8 -unsigned int bitmap_line_ydxi::e#3 // e zp[2]:24 3.33500005E7 -unsigned int bitmap_line_ydxi::e#6 // e zp[2]:24 1.00000001E8 -unsigned int bitmap_line_ydxi::x -unsigned int bitmap_line_ydxi::x#0 // x zp[2]:6 4000.4 -unsigned int bitmap_line_ydxi::x#1 // x zp[2]:6 4000.4 -unsigned int bitmap_line_ydxi::x#2 // x zp[2]:6 1.00000001E8 -unsigned int bitmap_line_ydxi::x#3 // x zp[2]:6 5.0012500625E7 -unsigned int bitmap_line_ydxi::x#5 // x zp[2]:6 60001.5 -unsigned int bitmap_line_ydxi::x#6 // x zp[2]:6 1.00000001E8 -unsigned int bitmap_line_ydxi::xd -unsigned int bitmap_line_ydxi::xd#0 // xd zp[2]:34 10001.0 -unsigned int bitmap_line_ydxi::xd#1 // xd zp[2]:34 10001.0 -unsigned int bitmap_line_ydxi::xd#2 // xd zp[2]:34 6674666.933333334 -unsigned int bitmap_line_ydxi::y -unsigned int bitmap_line_ydxi::y#0 // y zp[2]:4 3333.6666666666665 -unsigned int bitmap_line_ydxi::y#1 // y zp[2]:4 3333.6666666666665 -unsigned int bitmap_line_ydxi::y#2 // y zp[2]:4 3.7500000375E7 -unsigned int bitmap_line_ydxi::y#3 // y zp[2]:4 6.00200008E7 -unsigned int bitmap_line_ydxi::y#6 // y zp[2]:4 60001.5 -unsigned int bitmap_line_ydxi::y1 -unsigned int bitmap_line_ydxi::y1#0 // y1 zp[2]:8 5000.5 -unsigned int bitmap_line_ydxi::y1#1 // y1 zp[2]:8 5000.5 -unsigned int bitmap_line_ydxi::y1#6 // y1 zp[2]:8 6668000.2 -unsigned int bitmap_line_ydxi::yd -unsigned int bitmap_line_ydxi::yd#0 // yd zp[2]:39 6667.333333333333 -unsigned int bitmap_line_ydxi::yd#1 // yd zp[2]:39 6667.333333333333 -unsigned int bitmap_line_ydxi::yd#5 // yd zp[2]:39 1.3334666933333334E7 -void bitmap_plot(unsigned int x , unsigned int y , char c) -unsigned int bitmap_plot::$10 // zp[2]:12 2.000000002E9 -const unsigned int *bitmap_plot::$12 // zp[2]:14 1.000000001E9 -const unsigned long *bitmap_plot::$13 // zp[2]:12 2.000000002E9 -const char *bitmap_plot::$14 // zp[2]:20 2.000000002E9 -const char *bitmap_plot::$15 // zp[2]:22 2.000000002E9 -char bitmap_plot::$3 // reg byte x 2.000000002E9 -char bitmap_plot::$6 // reg byte a 2.000000002E9 -char bitmap_plot::$7 // reg byte a 2.000000002E9 -char bitmap_plot::$8 // reg byte a 2.000000002E9 -unsigned int bitmap_plot::$9 // zp[2]:14 2.000000002E9 -char bitmap_plot::bitshift -char bitmap_plot::bitshift#0 // reg byte a 1.5000000015E9 -char bitmap_plot::c -char bitmap_plot::c#0 // reg byte x 2.72727273E8 -char bitmap_plot::c#1 // reg byte x 2.00000002E8 -char bitmap_plot::c#2 // reg byte x 2.00000002E8 -char bitmap_plot::c#3 // reg byte x 2.00000002E8 -char bitmap_plot::c#4 // reg byte x 2.00000002E8 -char bitmap_plot::c#5 // reg byte x 2.1818181872727272E8 -unsigned long bitmap_plot::plot_x -unsigned long bitmap_plot::plot_x#0 // plot_x zp[4]:26 5.000000005E8 -unsigned long bitmap_plot::plot_y -unsigned long bitmap_plot::plot_y#0 // plot_y zp[4]:16 2.000000002E9 -unsigned long bitmap_plot::plotter -char bitmap_plot::vera_vram_address01_$0 // reg byte a 2.000000002E9 -char bitmap_plot::vera_vram_address01_$1 // reg byte a 2.000000002E9 -char bitmap_plot::vera_vram_address01_$3 // reg byte a 2.000000002E9 -unsigned long bitmap_plot::vera_vram_address01_bankaddr -unsigned long bitmap_plot::vera_vram_address01_bankaddr#0 // vera_vram_address01_bankaddr zp[4]:26 3.63636364E8 -char bitmap_plot::vera_vram_address01_incr -unsigned int bitmap_plot::x -unsigned int bitmap_plot::x#0 // x zp[2]:30 6.6666667333333336E7 -unsigned int bitmap_plot::x#1 // x zp[2]:30 6.6666667333333336E7 -unsigned int bitmap_plot::x#2 // x zp[2]:30 6.6666667333333336E7 -unsigned int bitmap_plot::x#3 // x zp[2]:30 6.6666667333333336E7 -unsigned int bitmap_plot::x#4 // x zp[2]:30 1.7000000035E8 -unsigned int bitmap_plot::y -unsigned int bitmap_plot::y#0 // y zp[2]:4 1.00000001E8 -unsigned int bitmap_plot::y#1 // y zp[2]:4 1.00000001E8 -unsigned int bitmap_plot::y#2 // y zp[2]:4 1.00000001E8 -unsigned int bitmap_plot::y#3 // y zp[2]:4 1.00000001E8 -unsigned int bitmap_plot::y#4 // y zp[2]:4 3.5000000125E8 -__constant const char bitmasks[5] = { $80, $c0, $f0, $ff } -__constant const signed char bitshifts[5] = { 7, 6, 4, 0 } -void clearline() -char clearline::$1 // reg byte a 2.00000002E8 -char clearline::$2 // reg byte a 2.00000002E8 -char clearline::$5 // reg byte a 2.00000002E8 -char *clearline::addr -char *clearline::addr#0 // addr zp[2]:14 1.00000001E8 -unsigned int clearline::c -unsigned int clearline::c#1 // c zp[2]:4 2.0000000002E10 -unsigned int clearline::c#2 // c zp[2]:4 7.50000000075E9 -char clearline::color -char clearline::color#0 // reg byte x 1.6833333336666665E9 -void clrscr() -char clrscr::$0 // reg byte a 202.0 -char clrscr::$1 // zp[1]:135 40.4 -char clrscr::$2 // reg byte a 202.0 -char clrscr::$5 // reg byte a 2002.0 -char clrscr::$6 // reg byte a 2002.0 -char clrscr::$7 // reg byte a 2002.0 -char clrscr::$9 // reg byte a 202.0 -char clrscr::c -char clrscr::c#1 // reg byte y 20002.0 -char clrscr::c#2 // reg byte y 7500.75 -char *clrscr::ch -char clrscr::color -char clrscr::color#0 // color zp[1]:135 594.2352941176471 -char clrscr::l -char clrscr::l#1 // reg byte x 2002.0 -char clrscr::l#2 // reg byte x 200.2 -char *clrscr::line_text -char *clrscr::line_text#0 // line_text zp[2]:112 18.363636363636363 -char *clrscr::line_text#1 // line_text zp[2]:112 1001.0 -char *clrscr::line_text#2 // line_text zp[2]:112 293.2142857142857 -__constant char conio_cursor_x[2] = { 0, 0 } -__constant char conio_cursor_y[2] = { 0, 0 } -__loadstore unsigned int conio_height // zp[2]:51 5624.185393258427 -__constant unsigned int conio_line_text[2] = { 0, 0 } -__loadstore char conio_rowshift // zp[1]:45 5126904.086294416 -__loadstore unsigned int conio_rowskip // zp[2]:46 4902456.401960785 -__loadstore volatile char conio_screen_height // zp[1]:49 62827.3664921466 -__loadstore char conio_screen_layer // zp[1]:48 1240329.689530686 -__loadstore volatile char conio_screen_width // zp[1]:36 4.414101324229074E7 -__constant char conio_scroll_enable[2] = { 1, 1 } -__loadstore unsigned int conio_width // zp[2]:165 111.69444444444444 -void conio_x16_init() -__constant char * const conio_x16_init::BASIC_CURSOR_LINE = (char *) 214 -char conio_x16_init::line -char conio_x16_init::line#0 // line zp[1]:168 2.1999999999999997 -char conio_x16_init::line#1 // line zp[1]:168 22.0 -char conio_x16_init::line#3 // line zp[1]:168 33.0 -__stackcall void cputc(char c) -char cputc::$15 // reg byte a 20002.0 -unsigned int cputc::$16 // zp[2]:41 20002.0 -char cputc::$2 // reg byte a 20002.0 -char cputc::$4 // reg byte a 20002.0 -char cputc::$5 // reg byte a 20002.0 -char cputc::$6 // reg byte a 20002.0 -__constant char cputc::OFFSET_STACK_C = 0 -char cputc::c -char cputc::c#0 // c zp[1]:105 1764.8823529411764 -char cputc::color -char cputc::color#0 // reg byte x 1428.7142857142858 -char *cputc::conio_addr -char *cputc::conio_addr#0 // conio_addr zp[2]:30 10001.0 -char *cputc::conio_addr#1 // conio_addr zp[2]:30 6000.6 -char cputc::scroll_enable -char cputc::scroll_enable#0 // reg byte a 20002.0 -void cputln() -char cputln::$2 // reg byte a 200002.0 -char cputln::$3 // reg byte a 200002.0 -unsigned int cputln::temp -unsigned int cputln::temp#0 // temp zp[2]:6 200002.0 -unsigned int cputln::temp#1 // temp zp[2]:6 100001.0 -void cscroll() -unsigned int divr16u(unsigned int dividend , unsigned int divisor , unsigned int rem) -char divr16u::$1 // reg byte a 2000002.0 -char divr16u::$2 // reg byte a 2000002.0 -unsigned int divr16u::dividend -unsigned int divr16u::dividend#0 // dividend zp[2]:2 250000.25 -unsigned int divr16u::dividend#1 // dividend zp[2]:2 3667.333333333333 -unsigned int divr16u::dividend#2 // dividend zp[2]:2 430000.57142857136 -unsigned int divr16u::divisor -unsigned int divr16u::divisor#0 // divisor zp[2]:30 117706.05882352941 -char divr16u::i -char divr16u::i#1 // reg byte x 1500001.5 -char divr16u::i#2 // reg byte x 153846.3076923077 -unsigned int divr16u::quotient -unsigned int divr16u::quotient#1 // quotient zp[2]:39 1500001.5 -unsigned int divr16u::quotient#2 // quotient zp[2]:39 1000001.0 -unsigned int divr16u::quotient#3 // quotient zp[2]:39 250000.25 -unsigned int divr16u::rem -unsigned int divr16u::rem#0 // rem zp[2]:34 750000.75 -unsigned int divr16u::rem#1 // rem zp[2]:34 2000002.0 -unsigned int divr16u::rem#10 // rem zp[2]:34 1003334.6666666666 -unsigned int divr16u::rem#2 // rem zp[2]:34 2000002.0 -unsigned int divr16u::rem#4 // rem zp[2]:34 2000002.0 -unsigned int divr16u::rem#5 // rem zp[2]:34 1000001.0 -unsigned int divr16u::return -unsigned int divr16u::return#0 // return zp[2]:39 1000001.0 -void gotoxy(char x , char y) -char gotoxy::$5 // reg byte a 2.0000002E7 -unsigned int gotoxy::$6 // zp[2]:37 2.0000002E7 -unsigned int gotoxy::line_offset -unsigned int gotoxy::line_offset#0 // line_offset zp[2]:37 1.0000001E7 -char gotoxy::x -char gotoxy::y -char gotoxy::y#1 // reg byte x 22.0 -char gotoxy::y#10 // reg byte x 4000000.4 -char gotoxy::y#2 // reg byte x 2000002.0 -char gotoxy::y#7 // reg byte x 7000004.666666666 -__constant unsigned int hdeltas[$10] = { 0, $50, $28, $14, 0, $a0, $50, $28, 0, $140, $a0, $50, 0, $280, $140, $a0 } -void insertup() -char insertup::$3 // reg byte a 2.000000002E9 -char insertup::cy -char insertup::cy#0 // cy zp[1]:33 7.769230784615384E7 -char insertup::i -char insertup::i#1 // reg byte x 2.000000002E9 -char insertup::i#2 // reg byte x 4.000000004E8 -unsigned int insertup::line -unsigned int insertup::line#0 // line zp[2]:10 2.000000002E9 -char *insertup::start -char *insertup::start#0 // start zp[2]:10 1.000000001E9 -char insertup::width -char insertup::width#0 // width zp[1]:32 8.416666683333334E7 -char kbhit() -__constant char * const kbhit::GETIN = (char *) 65508 -__constant char * const kbhit::IN_DEV = (char *) 650 -__loadstore volatile char kbhit::ch // zp[1]:50 10001.0 -__constant char * const kbhit::chptr = &kbhit::ch -char kbhit::return -char kbhit::return#0 // reg byte a 20002.0 -char kbhit::return#1 // reg byte a 2775.75 -char kbhit::return#2 // reg byte a 202.0 -char kbhit::return#3 // reg byte a 2002.0 -void main() -char main::$30 // reg byte a 202.0 -unsigned int main::$40 // zp[2]:110 202.0 -char main::$43 // reg byte a 2002.0 -char main::bgcolor1_color -char main::bgcolor2_color -char main::bgcolor3_color -char main::color -char main::color#1 // color zp[1]:126 525.75 -char main::color#2 // color zp[1]:126 344.8888888888889 -__constant char main::s[$16] = "vera in bitmap mode, -" -__constant char main::s1[$1f] = "color depth 8 bits per pixel. -" -__constant char main::s2[$29] = "in this mode, it is possible to display -" -__constant char main::s3[$19] = "graphics in 256 colors. -" -__constant char main::s4[$10] = "press a key ..." -__constant char main::s5[$27] = "here you see all the colors possible. -" -char main::textcolor1_color -char main::textcolor2_color -char main::textcolor3_color -char main::textcolor4_color -char main::textcolor5_color -char main::vera_layer_show1_layer -unsigned int main::x -unsigned int main::x#1 // x zp[2]:120 701.0 -unsigned int main::x#3 // x zp[2]:120 310.4 -void memcpy_in_vram(char dest_bank , void *dest , char dest_increment , char src_bank , void *src , char src_increment , unsigned int num) -char memcpy_in_vram::$0 // reg byte a 2.0000000002E10 -char memcpy_in_vram::$1 // reg byte a 2.0000000002E10 -char memcpy_in_vram::$3 // reg byte a 2.0000000002E10 -char memcpy_in_vram::$4 // reg byte a 2.0000000002E10 -char memcpy_in_vram::$5 // reg byte a 2.0000000002E10 -void *memcpy_in_vram::dest -void *memcpy_in_vram::dest#0 // dest zp[2]:10 6.666666673333334E8 -void *memcpy_in_vram::dest#2 // dest zp[2]:10 2.1000000003000002E9 -char memcpy_in_vram::dest_bank -char memcpy_in_vram::dest_bank#2 // reg byte y 8.333333334166666E8 -char memcpy_in_vram::dest_increment -unsigned int memcpy_in_vram::i -unsigned int memcpy_in_vram::i#1 // i zp[2]:2 2.00000000002E11 -unsigned int memcpy_in_vram::i#2 // i zp[2]:2 1.00000000001E11 -unsigned int memcpy_in_vram::num -unsigned int memcpy_in_vram::num#0 // num zp[2]:8 1.000000001E9 -unsigned int memcpy_in_vram::num#3 // num zp[2]:8 5.611111111222221E9 -void *memcpy_in_vram::src -char *memcpy_in_vram::src#0 // src zp[2]:6 3.333333336666667E8 -void *memcpy_in_vram::src#2 // src zp[2]:6 5.25000000075E9 -void *memcpy_in_vram::src#3 // src zp[2]:6 2.000000002E9 -char memcpy_in_vram::src_bank -char memcpy_in_vram::src_increment -void memset_vram(char vbank , void *vdest , char data , unsigned long num) -char memset_vram::$0 // reg byte a 2002.0 -char memset_vram::$1 // reg byte a 2002.0 -char memset_vram::$2 // reg byte a 2002.0 -char memset_vram::data -__constant char memset_vram::data#0 = 0 // data -unsigned long memset_vram::i -unsigned long memset_vram::i#1 // i zp[4]:16 20002.0 -unsigned long memset_vram::i#2 // i zp[4]:16 10001.0 -unsigned long memset_vram::num -unsigned long memset_vram::num#0 // num zp[4]:114 841.8333333333333 -char memset_vram::vbank -char memset_vram::vbank#0 // reg byte x 137.75 -void *memset_vram::vdest -void *memset_vram::vdest#0 // vdest zp[2]:145 420.59999999999997 -unsigned int modr16u(unsigned int dividend , unsigned int divisor , unsigned int rem) -unsigned int modr16u::dividend -unsigned int modr16u::dividend#0 // dividend zp[2]:2 202.0 -unsigned int modr16u::dividend#1 // dividend zp[2]:2 202.0 -unsigned int modr16u::dividend#2 // dividend zp[2]:2 202.0 -unsigned int modr16u::dividend#3 // dividend zp[2]:2 202.0 -unsigned int modr16u::dividend#4 // dividend zp[2]:2 1405.0 -unsigned int modr16u::divisor -unsigned int modr16u::divisor#4 // divisor zp[2]:143 500.5 -unsigned int modr16u::rem -unsigned int modr16u::return -unsigned int modr16u::return#0 // return zp[2]:118 234.16666666666669 -unsigned int modr16u::return#10 // return zp[2]:118 202.0 -unsigned int modr16u::return#2 // return zp[2]:118 202.0 -unsigned int modr16u::return#3 // return zp[2]:118 202.0 -unsigned int modr16u::return#4 // return zp[2]:118 202.0 -unsigned long mul16u(unsigned int a , unsigned int b) -char mul16u::$1 // reg byte a 20002.0 -unsigned int mul16u::a -unsigned int mul16u::a#0 // a zp[2]:2 367.33333333333337 -unsigned int mul16u::a#1 // a zp[2]:2 10001.0 -unsigned int mul16u::a#2 // a zp[2]:2 6834.166666666666 -unsigned int mul16u::b -unsigned int mul16u::b#0 // b zp[2]:161 101.0 -unsigned long mul16u::mb -unsigned long mul16u::mb#0 // mb zp[4]:26 2002.0 -unsigned long mul16u::mb#1 // mb zp[4]:26 20002.0 -unsigned long mul16u::mb#2 // mb zp[4]:26 4429.142857142857 -unsigned long mul16u::res -unsigned long mul16u::res#1 // res zp[4]:16 20002.0 -unsigned long mul16u::res#2 // res zp[4]:16 5017.333333333333 -unsigned long mul16u::res#6 // res zp[4]:16 10001.0 -unsigned long mul16u::return -unsigned long mul16u::return#0 // return zp[4]:114 202.0 -void printf_str(void (*putc)(char) , const char *s) -char printf_str::c -char printf_str::c#1 // reg byte a 1001.0 -void (*printf_str::putc)(char) -const char *printf_str::s -const char *printf_str::s#0 // s zp[2]:77 400.4 -const char *printf_str::s#8 // s zp[2]:77 1552.0 -const char *printf_str::s#9 // s zp[2]:77 101.0 -unsigned int rand() -unsigned int rand::$0 // zp[2]:97 2002.0 -unsigned int rand::$1 // zp[2]:99 2002.0 -unsigned int rand::$2 // zp[2]:101 2002.0 -unsigned int rand::return -unsigned int rand::return#0 // return zp[2]:110 215.14285714285714 -unsigned int rand::return#10 // return zp[2]:110 202.0 -unsigned int rand::return#11 // return zp[2]:110 202.0 -unsigned int rand::return#12 // return zp[2]:110 202.0 -unsigned int rand::return#2 // return zp[2]:110 202.0 -unsigned int rand::return#3 // return zp[2]:110 202.0 -unsigned int rand_state -unsigned int rand_state#0 // rand_state zp[2]:53 1501.5 -unsigned int rand_state#1 // rand_state zp[2]:53 1501.5 -unsigned int rand_state#13 // rand_state zp[2]:53 1253.5 -unsigned int rand_state#14 // rand_state zp[2]:53 78.34375 -unsigned int rand_state#23 // rand_state zp[2]:53 33.666666666666664 -unsigned int rem16u -unsigned int rem16u#0 // rem16u zp[2]:65 3667.333333333333 -void screenlayer(char layer) -unsigned int screenlayer::$2 // zp[2]:137 202.0 -char screenlayer::$3 // reg byte a 202.0 -unsigned int screenlayer::$4 // zp[2]:127 202.0 -unsigned int screenlayer::$5 // zp[2]:139 202.0 -char screenlayer::layer -char screenlayer::vera_layer_get_height1_$0 // reg byte a 202.0 -char screenlayer::vera_layer_get_height1_$1 // reg byte a 202.0 -char screenlayer::vera_layer_get_height1_$2 // reg byte a 202.0 -char screenlayer::vera_layer_get_height1_$3 // reg byte a 202.0 -char *screenlayer::vera_layer_get_height1_config -char *screenlayer::vera_layer_get_height1_config#0 // vera_layer_get_height1_config zp[2]:153 202.0 -char screenlayer::vera_layer_get_height1_layer -char screenlayer::vera_layer_get_height1_layer#0 // reg byte a 202.0 -unsigned int screenlayer::vera_layer_get_height1_return -unsigned int screenlayer::vera_layer_get_height1_return#0 // vera_layer_get_height1_return zp[2]:139 202.0 -unsigned int screenlayer::vera_layer_get_height1_return#1 // vera_layer_get_height1_return zp[2]:139 202.0 -char screenlayer::vera_layer_get_width1_$0 // reg byte a 202.0 -char screenlayer::vera_layer_get_width1_$1 // reg byte a 202.0 -char screenlayer::vera_layer_get_width1_$2 // reg byte a 202.0 -char screenlayer::vera_layer_get_width1_$3 // reg byte a 202.0 -char *screenlayer::vera_layer_get_width1_config -char *screenlayer::vera_layer_get_width1_config#0 // vera_layer_get_width1_config zp[2]:151 202.0 -char screenlayer::vera_layer_get_width1_layer -char screenlayer::vera_layer_get_width1_layer#0 // reg byte a 202.0 -unsigned int screenlayer::vera_layer_get_width1_return -unsigned int screenlayer::vera_layer_get_width1_return#0 // vera_layer_get_width1_return zp[2]:137 202.0 -unsigned int screenlayer::vera_layer_get_width1_return#1 // vera_layer_get_width1_return zp[2]:137 202.0 -void screensize(char *x , char *y) -char screensize::$1 // reg byte a 202.0 -char screensize::$3 // reg byte a 202.0 -char screensize::hscale -char screensize::hscale#0 // reg byte a 202.0 -char screensize::vscale -char screensize::vscale#0 // reg byte a 202.0 -char *screensize::x -__constant char *screensize::x#0 = &conio_screen_width // x -char *screensize::y -__constant char *screensize::y#0 = &conio_screen_height // y -__constant const unsigned int vdeltas[4] = { 0, $1e0, $f0, $a0 } -char vera_display_get_hscale() -__constant char vera_display_get_hscale::hscale[4] = { 0, $80, $40, $20 } -char vera_display_get_hscale::return -char vera_display_get_hscale::return#0 // reg byte x 3367.333333333333 -char vera_display_get_hscale::return#2 // reg byte x 202.0 -char vera_display_get_hscale::s -char vera_display_get_hscale::s#1 // reg byte x 15001.5 -char vera_display_get_hscale::s#2 // reg byte x 20002.0 -char vera_display_get_hscale::scale -__constant char vera_display_get_hscale::scale#0 = 0 // scale -char vera_display_get_vscale() -char vera_display_get_vscale::return -char vera_display_get_vscale::return#0 // reg byte x 3367.333333333333 -char vera_display_get_vscale::return#2 // reg byte x 202.0 -char vera_display_get_vscale::s -char vera_display_get_vscale::s#1 // reg byte x 15001.5 -char vera_display_get_vscale::s#2 // reg byte x 20002.0 -char vera_display_get_vscale::scale -__constant char vera_display_get_vscale::scale#0 = 0 // scale -__constant char vera_display_get_vscale::vscale[4] = { 0, $80, $40, $20 } -__constant char vera_layer_backcolor[2] = { BLUE, BLUE } -__constant char *vera_layer_config[2] = { VERA_L0_CONFIG, VERA_L1_CONFIG } -__constant char vera_layer_enable[2] = { VERA_LAYER0_ENABLE, VERA_LAYER1_ENABLE } -char vera_layer_get_backcolor(char layer) -char vera_layer_get_backcolor::layer -char vera_layer_get_backcolor::layer#0 // reg byte x 1102.0 -char vera_layer_get_backcolor::return -char vera_layer_get_backcolor::return#0 // reg byte a 202.0 -char vera_layer_get_backcolor::return#1 // reg byte a 367.33333333333337 -char vera_layer_get_color(char layer) -char vera_layer_get_color::$0 // reg byte a 2.000000002E9 -char vera_layer_get_color::$1 // reg byte a 2.000000002E9 -char vera_layer_get_color::$3 // reg byte a 2.000000002E9 -char *vera_layer_get_color::addr -char *vera_layer_get_color::addr#0 // addr zp[2]:6 2.000000002E9 -char vera_layer_get_color::layer -char vera_layer_get_color::layer#0 // reg byte x 20002.0 -char vera_layer_get_color::layer#1 // reg byte x 2.00000002E8 -char vera_layer_get_color::layer#2 // reg byte x 6.833350010000001E8 -char vera_layer_get_color::return -char vera_layer_get_color::return#0 // reg byte a 20002.0 -char vera_layer_get_color::return#1 // reg byte a 2.000000002E9 -char vera_layer_get_color::return#2 // reg byte a 2.000000002E9 -char vera_layer_get_color::return#3 // reg byte a 5.25002501E8 -char vera_layer_get_color::return#4 // reg byte a 2.00000002E8 -char vera_layer_get_mapbase_bank(char layer) -char vera_layer_get_mapbase_bank::layer -char vera_layer_get_mapbase_bank::layer#0 // reg byte x 1102.0 -char vera_layer_get_mapbase_bank::return -char vera_layer_get_mapbase_bank::return#0 // reg byte a 367.33333333333337 -char vera_layer_get_mapbase_bank::return#2 // reg byte a 202.0 -unsigned int vera_layer_get_mapbase_offset(char layer) -char vera_layer_get_mapbase_offset::$0 // reg byte a 2002.0 -char vera_layer_get_mapbase_offset::layer -char vera_layer_get_mapbase_offset::layer#0 // reg byte a 1102.0 -unsigned int vera_layer_get_mapbase_offset::return -unsigned int vera_layer_get_mapbase_offset::return#0 // return zp[2]:141 367.33333333333337 -unsigned int vera_layer_get_mapbase_offset::return#2 // return zp[2]:141 202.0 -char vera_layer_get_rowshift(char layer) -char vera_layer_get_rowshift::layer -char vera_layer_get_rowshift::layer#0 // reg byte x 1102.0 -char vera_layer_get_rowshift::return -char vera_layer_get_rowshift::return#0 // reg byte a 367.33333333333337 -char vera_layer_get_rowshift::return#2 // reg byte a 202.0 -unsigned int vera_layer_get_rowskip(char layer) -char vera_layer_get_rowskip::$0 // reg byte a 2002.0 -char vera_layer_get_rowskip::layer -char vera_layer_get_rowskip::layer#0 // reg byte a 1102.0 -unsigned int vera_layer_get_rowskip::return -unsigned int vera_layer_get_rowskip::return#0 // return zp[2]:127 367.33333333333337 -unsigned int vera_layer_get_rowskip::return#2 // return zp[2]:127 202.0 -char vera_layer_get_textcolor(char layer) -char vera_layer_get_textcolor::layer -char vera_layer_get_textcolor::layer#0 // reg byte x 1102.0 -char vera_layer_get_textcolor::return -char vera_layer_get_textcolor::return#0 // reg byte a 202.0 -char vera_layer_get_textcolor::return#1 // reg byte a 367.33333333333337 -__constant char *vera_layer_mapbase[2] = { VERA_L0_MAPBASE, VERA_L1_MAPBASE } -void vera_layer_mode_bitmap(char layer , unsigned long bitmap_address , unsigned int mapwidth , unsigned int color_depth) -unsigned long vera_layer_mode_bitmap::bitmap_address -__constant unsigned long vera_layer_mode_bitmap::bitmap_address#1 = 0 // bitmap_address -unsigned int vera_layer_mode_bitmap::color_depth -char vera_layer_mode_bitmap::config -__constant char vera_layer_mode_bitmap::config#11 = VERA_LAYER_COLOR_DEPTH_8BPP|VERA_LAYER_CONFIG_MODE_BITMAP // config -char vera_layer_mode_bitmap::layer -__constant char vera_layer_mode_bitmap::layer#0 = 0 // layer -unsigned int vera_layer_mode_bitmap::mapwidth -char vera_layer_mode_bitmap::tilebase -__constant char vera_layer_mode_bitmap::tilebase#1 = 0 // tilebase -void vera_layer_mode_text(char layer , unsigned long mapbase_address , unsigned long tilebase_address , unsigned int mapwidth , unsigned int mapheight , char tilewidth , char tileheight , unsigned int color_mode) -unsigned int vera_layer_mode_text::color_mode -char vera_layer_mode_text::layer -__constant char vera_layer_mode_text::layer#0 = 1 // layer -unsigned long vera_layer_mode_text::mapbase_address -__constant unsigned long vera_layer_mode_text::mapbase_address#0 = 0 // mapbase_address -unsigned int vera_layer_mode_text::mapheight -__constant unsigned int vera_layer_mode_text::mapheight#0 = $40 // mapheight -unsigned int vera_layer_mode_text::mapwidth -__constant unsigned int vera_layer_mode_text::mapwidth#0 = $80 // mapwidth -unsigned long vera_layer_mode_text::tilebase_address -__constant unsigned long vera_layer_mode_text::tilebase_address#0 = $f800 // tilebase_address -char vera_layer_mode_text::tileheight -__constant char vera_layer_mode_text::tileheight#0 = 8 // tileheight -char vera_layer_mode_text::tilewidth -__constant char vera_layer_mode_text::tilewidth#0 = 8 // tilewidth -void vera_layer_mode_tile(char layer , unsigned long mapbase_address , unsigned long tilebase_address , unsigned int mapwidth , unsigned int mapheight , char tilewidth , char tileheight , char color_depth) -unsigned int vera_layer_mode_tile::$1 // zp[2]:124 1001.0 -char vera_layer_mode_tile::$11 // reg byte a 2002.0 -char vera_layer_mode_tile::$12 // reg byte a 2002.0 -char vera_layer_mode_tile::$13 // reg byte a 2002.0 -char vera_layer_mode_tile::$14 // reg byte a 2002.0 -char vera_layer_mode_tile::$17 // zp[1]:149 250.25 -char vera_layer_mode_tile::$18 // zp[1]:147 273.0 -char vera_layer_mode_tile::$2 // reg byte a 2002.0 -unsigned int vera_layer_mode_tile::$6 // zp[2]:79 2002.0 -char vera_layer_mode_tile::$7 // reg byte a 2002.0 -char vera_layer_mode_tile::color_depth -char vera_layer_mode_tile::config -char vera_layer_mode_tile::config#10 // reg byte x 2002.0 -char vera_layer_mode_tile::config#11 // reg byte x 2002.0 -char vera_layer_mode_tile::config#12 // reg byte x 2002.0 -char vera_layer_mode_tile::config#21 // reg byte x 1001.0 -char vera_layer_mode_tile::config#25 // reg byte x 3003.0 -char vera_layer_mode_tile::layer -char vera_layer_mode_tile::layer#10 // layer zp[1]:148 263.4210526315791 -char vera_layer_mode_tile::mapbase -char vera_layer_mode_tile::mapbase#0 // reg byte x 1001.0 -unsigned long vera_layer_mode_tile::mapbase_address -unsigned long vera_layer_mode_tile::mapbase_address#0 // mapbase_address zp[4]:67 2002.0 -unsigned long vera_layer_mode_tile::mapbase_address#10 // mapbase_address zp[4]:67 111.22222222222223 -unsigned int vera_layer_mode_tile::mapheight -unsigned int vera_layer_mode_tile::mapheight#10 // mapheight zp[2]:159 190.66666666666666 -unsigned int vera_layer_mode_tile::mapwidth -unsigned int vera_layer_mode_tile::mapwidth#10 // mapwidth zp[2]:122 1001.0 -char vera_layer_mode_tile::tilebase -char vera_layer_mode_tile::tilebase#0 // reg byte a 2002.0 -char vera_layer_mode_tile::tilebase#1 // reg byte x 1334.6666666666667 -char vera_layer_mode_tile::tilebase#10 // reg byte x 2002.0 -char vera_layer_mode_tile::tilebase#12 // reg byte x 2002.0000000000002 -char vera_layer_mode_tile::tilebase#3 // reg byte x 2002.0 -char vera_layer_mode_tile::tilebase#5 // reg byte x 2002.0 -unsigned long vera_layer_mode_tile::tilebase_address -unsigned long vera_layer_mode_tile::tilebase_address#0 // tilebase_address zp[4]:73 2002.0 -unsigned long vera_layer_mode_tile::tilebase_address#10 // tilebase_address zp[4]:73 87.04347826086956 -char vera_layer_mode_tile::tileheight -char vera_layer_mode_tile::tileheight#10 // tileheight zp[1]:170 37.074074074074076 -char vera_layer_mode_tile::tilewidth -char vera_layer_mode_tile::tilewidth#10 // tilewidth zp[1]:169 40.04 -__constant char vera_layer_rowshift[2] = { 0, 0 } -__constant unsigned int vera_layer_rowskip[2] = { 0, 0 } -char vera_layer_set_backcolor(char layer , char color) -char vera_layer_set_backcolor::color -char vera_layer_set_backcolor::color#4 // reg byte a 101.0 -char vera_layer_set_backcolor::layer -char vera_layer_set_backcolor::layer#1 // reg byte x 22.0 -char vera_layer_set_backcolor::layer#2 // reg byte x 22.0 -char vera_layer_set_backcolor::layer#3 // reg byte x 22.0 -char vera_layer_set_backcolor::layer#4 // reg byte x 134.0 -char vera_layer_set_backcolor::old -char vera_layer_set_backcolor::return -void vera_layer_set_config(char layer , char config) -char vera_layer_set_config::$0 // reg byte a 20002.0 -char *vera_layer_set_config::addr -char *vera_layer_set_config::addr#0 // addr zp[2]:37 20002.0 -char vera_layer_set_config::config -char vera_layer_set_config::config#0 // reg byte x 2002.0 -char vera_layer_set_config::config#2 // reg byte x 3667.333333333333 -char vera_layer_set_config::layer -char vera_layer_set_config::layer#0 // reg byte a 1001.0 -char vera_layer_set_config::layer#2 // reg byte a 11002.0 -void vera_layer_set_mapbase(char layer , char mapbase) -char vera_layer_set_mapbase::$0 // reg byte a 20002.0 -char *vera_layer_set_mapbase::addr -char *vera_layer_set_mapbase::addr#0 // addr zp[2]:37 20002.0 -char vera_layer_set_mapbase::layer -char vera_layer_set_mapbase::layer#0 // reg byte a 1001.0 -char vera_layer_set_mapbase::layer#3 // reg byte a 11002.0 -char vera_layer_set_mapbase::mapbase -char vera_layer_set_mapbase::mapbase#0 // reg byte x 2002.0 -char vera_layer_set_mapbase::mapbase#3 // reg byte x 3667.333333333333 -void vera_layer_set_text_color_mode(char layer , char color_mode) -char *vera_layer_set_text_color_mode::addr -char *vera_layer_set_text_color_mode::addr#0 // addr zp[2]:37 2502.5 -char vera_layer_set_text_color_mode::color_mode -char vera_layer_set_text_color_mode::layer -char vera_layer_set_textcolor(char layer , char color) -char vera_layer_set_textcolor::color -char vera_layer_set_textcolor::color#6 // reg byte a 101.0 -char vera_layer_set_textcolor::layer -char vera_layer_set_textcolor::layer#1 // reg byte x 22.0 -char vera_layer_set_textcolor::layer#2 // reg byte x 22.0 -char vera_layer_set_textcolor::layer#3 // reg byte x 22.0 -char vera_layer_set_textcolor::layer#4 // reg byte x 22.0 -char vera_layer_set_textcolor::layer#5 // reg byte x 22.0 -char vera_layer_set_textcolor::layer#6 // reg byte x 156.0 -char vera_layer_set_textcolor::old -char vera_layer_set_textcolor::return -void vera_layer_set_tilebase(char layer , char tilebase) -char vera_layer_set_tilebase::$0 // reg byte a 20002.0 -char *vera_layer_set_tilebase::addr -char *vera_layer_set_tilebase::addr#0 // addr zp[2]:37 20002.0 -char vera_layer_set_tilebase::layer -char vera_layer_set_tilebase::layer#0 // reg byte a 1001.0 -char vera_layer_set_tilebase::layer#2 // reg byte a 11002.0 -char vera_layer_set_tilebase::tilebase -char vera_layer_set_tilebase::tilebase#0 // reg byte x 2002.0 -char vera_layer_set_tilebase::tilebase#2 // reg byte x 3667.333333333333 -__constant char vera_layer_textcolor[2] = { WHITE, WHITE } -__constant char *vera_layer_tilebase[2] = { VERA_L0_TILEBASE, VERA_L1_TILEBASE } -__constant unsigned long vera_mapbase_address[2] = { 0, 0 } -__constant char vera_mapbase_bank[2] = { 0, 0 } -__constant unsigned int vera_mapbase_offset[2] = { 0, 0 } -__constant unsigned long vera_tilebase_address[2] = { 0, 0 } -__constant char vera_tilebase_bank[2] = { 0, 0 } -__constant unsigned int vera_tilebase_offset[2] = { 0, 0 } - -zp[1]:168 [ conio_x16_init::line#3 conio_x16_init::line#1 conio_x16_init::line#0 ] -zp[2]:43 [ CONIO_SCREEN_TEXT#12 ] -zp[1]:136 [ CONIO_SCREEN_BANK#12 ] -zp[2]:120 [ main::x#3 main::x#1 ] -zp[1]:126 [ main::color#2 main::color#1 ] -reg byte x [ vera_layer_set_textcolor::layer#6 vera_layer_set_textcolor::layer#1 vera_layer_set_textcolor::layer#2 vera_layer_set_textcolor::layer#3 vera_layer_set_textcolor::layer#4 vera_layer_set_textcolor::layer#5 ] -reg byte a [ vera_layer_set_textcolor::color#6 ] -reg byte x [ vera_layer_set_backcolor::layer#4 vera_layer_set_backcolor::layer#1 vera_layer_set_backcolor::layer#2 vera_layer_set_backcolor::layer#3 ] -reg byte a [ vera_layer_set_backcolor::color#4 ] -reg byte a [ vera_layer_set_mapbase::layer#3 vera_layer_set_mapbase::layer#0 ] -reg byte x [ vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::mapbase#0 ] -reg byte x [ gotoxy::y#10 gotoxy::y#7 gotoxy::y#1 gotoxy::y#2 ] -reg byte x [ vera_layer_get_color::layer#2 vera_layer_get_color::layer#1 vera_layer_get_color::layer#0 ] -reg byte a [ vera_layer_get_color::return#3 vera_layer_get_color::return#1 vera_layer_get_color::return#2 ] -reg byte y [ memcpy_in_vram::dest_bank#2 ] -zp[2]:122 [ vera_layer_mode_tile::mapwidth#10 ] -zp[1]:148 [ vera_layer_mode_tile::layer#10 ] -zp[2]:159 [ vera_layer_mode_tile::mapheight#10 ] -zp[4]:67 [ vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::mapbase_address#0 ] -zp[4]:73 [ vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilebase_address#0 ] -zp[1]:169 [ vera_layer_mode_tile::tilewidth#10 ] -zp[1]:170 [ vera_layer_mode_tile::tileheight#10 ] -reg byte x [ vera_layer_mode_tile::config#25 vera_layer_mode_tile::config#21 vera_layer_mode_tile::config#10 vera_layer_mode_tile::config#11 vera_layer_mode_tile::config#12 ] -reg byte x [ vera_layer_mode_tile::tilebase#10 vera_layer_mode_tile::tilebase#12 vera_layer_mode_tile::tilebase#1 vera_layer_mode_tile::tilebase#3 vera_layer_mode_tile::tilebase#5 ] -reg byte x [ clrscr::l#2 clrscr::l#1 ] -zp[2]:112 [ clrscr::line_text#2 clrscr::line_text#1 clrscr::line_text#0 ] -reg byte y [ clrscr::c#2 clrscr::c#1 ] -zp[2]:77 [ printf_str::s#8 printf_str::s#9 printf_str::s#0 ] -zp[2]:103 [ bitmap_init::x#10 bitmap_init::x#1 ] -zp[2]:71 [ bitmap_init::y#2 bitmap_init::y#1 ] -zp[4]:106 [ bitmap_init::yoffs#2 bitmap_init::yoffs#0 bitmap_init::yoffs#1 ] -zp[2]:10 [ bitmap_line::x1#10 bitmap_line::x1#0 bitmap_line::x1#1 memcpy_in_vram::dest#2 memcpy_in_vram::dest#0 insertup::start#0 insertup::line#0 ] -zp[2]:8 [ bitmap_line::y0#10 bitmap_line::y0#0 bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 memcpy_in_vram::num#3 memcpy_in_vram::num#0 ] -reg byte x [ bitmap_line::c#10 bitmap_line::c#0 bitmap_line::c#1 ] -zp[2]:53 [ rand_state#13 rand_state#23 rand_state#14 rand_state#0 rand_state#1 ] -zp[2]:143 [ modr16u::divisor#4 ] -reg byte a [ vera_layer_set_config::layer#2 vera_layer_set_config::layer#0 ] -reg byte x [ vera_layer_set_config::config#2 vera_layer_set_config::config#0 ] -reg byte a [ vera_layer_set_tilebase::layer#2 vera_layer_set_tilebase::layer#0 ] -reg byte x [ vera_layer_set_tilebase::tilebase#2 vera_layer_set_tilebase::tilebase#0 ] -reg byte x [ vera_display_get_hscale::return#0 vera_display_get_hscale::s#2 vera_display_get_hscale::s#1 ] -reg byte x [ vera_display_get_vscale::return#0 vera_display_get_vscale::s#2 vera_display_get_vscale::s#1 ] -zp[2]:2 [ mul16u::a#2 mul16u::a#0 mul16u::a#1 modr16u::dividend#4 modr16u::dividend#0 modr16u::dividend#1 modr16u::dividend#2 modr16u::dividend#3 divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 bitmap_line::y1#10 bitmap_line::y1#0 memcpy_in_vram::i#2 memcpy_in_vram::i#1 ] -zp[2]:24 [ bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 ] -zp[2]:34 [ divr16u::rem#4 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 bitmap_line::xd#2 bitmap_line::xd#1 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#1 bitmap_line_xdyi::xd#0 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#1 bitmap_line_xdyd::xd#0 ] -zp[2]:39 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 bitmap_line::yd#2 bitmap_line::yd#11 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#1 bitmap_line_xdyi::yd#0 ] -reg byte x [ divr16u::i#2 divr16u::i#1 ] -reg byte x [ insertup::i#2 insertup::i#1 ] -reg byte x [ bitmap_plot::c#0 bitmap_plot::$3 bitmap_plot::c#5 bitmap_plot::c#2 bitmap_plot::c#1 bitmap_plot::c#4 bitmap_plot::c#3 ] -zp[2]:4 [ clearline::c#2 clearline::c#1 bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 bitmap_plot::y#4 bitmap_plot::y#1 bitmap_plot::y#0 bitmap_plot::y#3 bitmap_plot::y#2 bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] -zp[1]:36 [ conio_screen_width ] -zp[1]:49 [ conio_screen_height ] -zp[1]:48 [ conio_screen_layer ] -zp[2]:165 [ conio_width ] -zp[2]:51 [ conio_height ] -zp[1]:45 [ conio_rowshift ] -zp[2]:46 [ conio_rowskip ] -zp[4]:172 [ __bitmap_address ] -zp[1]:150 [ __bitmap_layer ] -zp[1]:176 [ __bitmap_hscale ] -zp[1]:177 [ __bitmap_vscale ] -zp[1]:167 [ __bitmap_color_depth ] -zp[1]:105 [ cputc::c#0 ] -reg byte a [ vera_layer_get_color::return#0 ] -reg byte x [ cputc::color#0 ] -reg byte a [ cputc::$15 ] -reg byte a [ cputc::$2 ] -reg byte a [ cputc::$4 ] -reg byte a [ cputc::$5 ] -reg byte a [ cputc::$6 ] -reg byte a [ cputc::scroll_enable#0 ] -zp[2]:41 [ cputc::$16 bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 bitmap_line::yd#1 bitmap_line::yd#10 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#1 bitmap_line_xdyd::yd#0 ] -reg byte a [ kbhit::return#2 ] -reg byte a [ main::$30 ] -reg byte a [ kbhit::return#3 ] -reg byte a [ main::$43 ] -zp[2]:110 [ rand::return#2 rand::return#0 rand::return#3 rand::return#10 rand::return#11 rand::return#12 main::$40 ] -zp[2]:118 [ modr16u::return#2 modr16u::return#0 modr16u::return#3 modr16u::return#4 modr16u::return#10 ] -reg byte a [ screensize::hscale#0 ] -reg byte a [ screensize::$1 ] -reg byte a [ screensize::vscale#0 ] -reg byte a [ screensize::$3 ] -reg byte x [ vera_layer_get_mapbase_bank::layer#0 ] -reg byte a [ vera_layer_get_mapbase_bank::return#2 ] -zp[1]:171 [ CONIO_SCREEN_BANK#15 ] -reg byte a [ vera_layer_get_mapbase_offset::layer#0 ] -zp[2]:141 [ vera_layer_get_mapbase_offset::return#2 vera_layer_get_mapbase_offset::return#0 ] -zp[2]:178 [ CONIO_SCREEN_TEXT#17 ] -reg byte a [ screenlayer::vera_layer_get_width1_layer#0 ] -reg byte a [ screenlayer::vera_layer_get_width1_$2 ] -zp[2]:151 [ screenlayer::vera_layer_get_width1_config#0 ] -reg byte a [ screenlayer::vera_layer_get_width1_$0 ] -reg byte a [ screenlayer::vera_layer_get_width1_$1 ] -reg byte a [ screenlayer::vera_layer_get_width1_$3 ] -zp[2]:137 [ screenlayer::vera_layer_get_width1_return#0 screenlayer::vera_layer_get_width1_return#1 screenlayer::$2 ] -reg byte x [ vera_layer_get_rowshift::layer#0 ] -reg byte a [ vera_layer_get_rowshift::return#2 ] -reg byte a [ screenlayer::$3 ] -reg byte a [ vera_layer_get_rowskip::layer#0 ] -zp[2]:127 [ vera_layer_get_rowskip::return#2 screenlayer::$4 vera_layer_get_rowskip::return#0 ] -reg byte a [ screenlayer::vera_layer_get_height1_layer#0 ] -reg byte a [ screenlayer::vera_layer_get_height1_$2 ] -zp[2]:153 [ screenlayer::vera_layer_get_height1_config#0 ] -reg byte a [ screenlayer::vera_layer_get_height1_$0 ] -reg byte a [ screenlayer::vera_layer_get_height1_$1 ] -reg byte a [ screenlayer::vera_layer_get_height1_$3 ] -zp[2]:139 [ screenlayer::vera_layer_get_height1_return#0 screenlayer::vera_layer_get_height1_return#1 screenlayer::$5 ] -reg byte a [ vera_layer_set_mapbase::$0 ] -reg byte a [ gotoxy::$5 ] -reg byte a [ vera_layer_get_color::$3 ] -reg byte a [ vera_layer_get_color::$0 ] -reg byte a [ vera_layer_get_color::$1 ] -reg byte a [ cputln::$2 ] -zp[2]:6 [ cputln::temp#0 cputln::temp#1 vera_layer_get_color::addr#0 bitmap_line::x0#10 bitmap_line::x0#0 bitmap_line::x0#1 bitmap_line_ydxi::x#3 bitmap_line_ydxi::x#5 bitmap_line_ydxi::x#1 bitmap_line_ydxi::x#0 bitmap_line_ydxi::x#6 bitmap_line_ydxi::x#2 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#1 bitmap_line_xdyi::x1#0 bitmap_line_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#1 bitmap_line_xdyd::x1#0 memcpy_in_vram::src#2 memcpy_in_vram::src#3 memcpy_in_vram::src#0 ] -reg byte a [ cputln::$3 ] -reg byte a [ memcpy_in_vram::$0 ] -reg byte a [ memcpy_in_vram::$1 ] -reg byte a [ memcpy_in_vram::$3 ] -reg byte a [ memcpy_in_vram::$4 ] -reg byte a [ memcpy_in_vram::$5 ] -reg byte a [ vera_layer_mode_tile::$14 ] -zp[2]:124 [ vera_layer_mode_tile::$1 ] -zp[1]:149 [ vera_layer_mode_tile::$17 ] -reg byte a [ vera_layer_mode_tile::$2 ] -zp[1]:147 [ vera_layer_mode_tile::$18 ] -reg byte x [ vera_layer_mode_tile::mapbase#0 ] -zp[2]:79 [ vera_layer_mode_tile::$6 ] -reg byte a [ vera_layer_mode_tile::$7 ] -reg byte a [ vera_layer_mode_tile::tilebase#0 ] -reg byte a [ vera_layer_mode_tile::$13 ] -reg byte a [ vera_layer_mode_tile::$12 ] -reg byte a [ vera_layer_mode_tile::$11 ] -reg byte x [ vera_layer_get_backcolor::layer#0 ] -reg byte a [ vera_layer_get_backcolor::return#0 ] -reg byte a [ clrscr::$0 ] -zp[1]:135 [ clrscr::$1 clrscr::color#0 ] -reg byte x [ vera_layer_get_textcolor::layer#0 ] -reg byte a [ vera_layer_get_textcolor::return#0 ] -reg byte a [ clrscr::$2 ] -reg byte a [ clrscr::$9 ] -reg byte a [ clrscr::$5 ] -reg byte a [ clrscr::$6 ] -reg byte a [ clrscr::$7 ] -reg byte a [ printf_str::c#1 ] -reg byte a [ bitmap_init::vera_layer_get_color_depth1_layer#0 ] -reg byte a [ bitmap_init::vera_layer_get_color_depth1_$1 ] -zp[2]:155 [ bitmap_init::vera_layer_get_color_depth1_config#0 ] -reg byte a [ bitmap_init::vera_layer_get_color_depth1_$0 ] -reg byte a [ bitmap_init::vera_layer_get_color_depth1_return#0 ] -reg byte a [ bitmap_init::vera_layer_get_color_depth1_return#1 ] -reg byte a [ bitmap_init::$0 ] -reg byte x [ vera_display_get_hscale::return#2 ] -reg byte x [ bitmap_init::$1 ] -reg byte x [ vera_display_get_vscale::return#2 ] -reg byte x [ bitmap_init::$2 ] -zp[2]:129 [ bitmap_init::$7 ] -zp[2]:55 [ bitmap_init::$23 bitmap_init::$29 ] -zp[2]:81 [ bitmap_init::$30 ] -zp[2]:83 [ bitmap_init::$31 ] -zp[2]:131 [ bitmap_init::$10 ] -zp[2]:57 [ bitmap_init::$24 bitmap_init::$32 ] -zp[2]:85 [ bitmap_init::$33 ] -zp[2]:87 [ bitmap_init::$34 ] -zp[2]:133 [ bitmap_init::$13 ] -zp[2]:59 [ bitmap_init::$25 bitmap_init::$35 ] -zp[2]:89 [ bitmap_init::$36 ] -zp[2]:91 [ bitmap_init::$37 ] -zp[2]:61 [ bitmap_init::$26 bitmap_init::$38 ] -zp[2]:93 [ bitmap_init::$39 ] -zp[2]:95 [ bitmap_init::$40 ] -reg byte a [ bitmap_init::$3 ] -reg byte a [ bitmap_init::$4 ] -reg byte a [ bitmap_init::$27 ] -zp[2]:163 [ bitmap_init::hdelta#0 ] -zp[2]:63 [ bitmap_init::$28 bitmap_init::$41 ] -reg byte a [ bitmap_clear::$6 ] -zp[2]:161 [ bitmap_clear::vdelta#0 mul16u::b#0 ] -reg byte a [ bitmap_clear::$0 ] -reg byte a [ bitmap_clear::$1 ] -reg byte a [ bitmap_clear::$7 ] -zp[2]:157 [ bitmap_clear::hdelta#0 ] -zp[4]:114 [ mul16u::return#0 bitmap_clear::count#0 memset_vram::num#0 ] -reg byte x [ bitmap_clear::vbank#0 ] -zp[2]:145 [ bitmap_clear::vdest#0 memset_vram::vdest#0 ] -reg byte x [ memset_vram::vbank#0 ] -zp[1]:50 [ kbhit::ch ] -reg byte a [ kbhit::return#0 ] -reg byte a [ kbhit::return#1 ] -zp[2]:97 [ rand::$0 ] -zp[2]:99 [ rand::$1 ] -zp[2]:101 [ rand::$2 ] -reg byte a [ vera_layer_get_mapbase_bank::return#0 ] -reg byte a [ vera_layer_get_mapbase_offset::$0 ] -reg byte a [ vera_layer_get_rowshift::return#0 ] -reg byte a [ vera_layer_get_rowskip::$0 ] -reg byte a [ vera_layer_set_config::$0 ] -reg byte a [ vera_layer_set_tilebase::$0 ] -zp[2]:37 [ vera_layer_set_tilebase::addr#0 vera_layer_set_config::addr#0 vera_layer_set_text_color_mode::addr#0 gotoxy::$6 gotoxy::line_offset#0 vera_layer_set_mapbase::addr#0 ] -reg byte a [ vera_layer_get_backcolor::return#1 ] -reg byte a [ vera_layer_get_textcolor::return#1 ] -reg byte a [ mul16u::$1 ] -reg byte a [ memset_vram::$0 ] -reg byte a [ memset_vram::$1 ] -reg byte a [ memset_vram::$2 ] -zp[2]:30 [ bitmap_line_ydxi::$6 divr16u::divisor#0 cputc::conio_addr#0 cputc::conio_addr#1 bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#2 bitmap_plot::x#4 bitmap_plot::x#1 bitmap_plot::x#0 bitmap_plot::x#3 bitmap_plot::x#2 bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#2 ] -reg byte a [ divr16u::$1 ] -reg byte a [ divr16u::$2 ] -zp[2]:65 [ rem16u#0 ] -zp[1]:33 [ insertup::cy#0 bitmap_line_xdyi::c#3 bitmap_line_xdyi::c#1 bitmap_line_xdyi::c#0 bitmap_init::bitmask#13 bitmap_init::bitmask#3 bitmap_init::bitmask#12 bitmap_init::bitmask#11 bitmap_init::bitmask#10 bitmap_init::bitmask#0 bitmap_init::bitmask#16 bitmap_init::bitmask#1 bitmap_init::bitmask#2 bitmap_init::bitmask#4 ] -zp[1]:32 [ insertup::width#0 bitmap_line_xdyd::c#3 bitmap_line_xdyd::c#1 bitmap_line_xdyd::c#0 bitmap_line_ydxd::c#3 bitmap_line_ydxd::c#0 bitmap_line_ydxd::c#1 bitmap_line_ydxi::c#3 bitmap_line_ydxi::c#1 bitmap_line_ydxi::c#0 bitmap_init::bitshift#13 bitmap_init::bitshift#3 bitmap_init::bitshift#12 bitmap_init::bitshift#11 bitmap_init::bitshift#10 bitmap_init::bitshift#0 bitmap_init::bitshift#14 bitmap_init::bitshift#1 bitmap_init::bitshift#2 bitmap_init::bitshift#4 ] -reg byte a [ insertup::$3 ] -zp[4]:26 [ bitmap_plot::plot_x#0 bitmap_plot::vera_vram_address01_bankaddr#0 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] -zp[2]:12 [ bitmap_plot::$10 bitmap_plot::$13 ] -zp[4]:16 [ bitmap_plot::plot_y#0 memset_vram::i#2 memset_vram::i#1 mul16u::res#2 mul16u::res#6 mul16u::res#1 ] -zp[2]:20 [ bitmap_plot::$14 ] -reg byte a [ bitmap_plot::bitshift#0 ] -reg byte a [ bitmap_plot::vera_vram_address01_$0 ] -reg byte a [ bitmap_plot::vera_vram_address01_$1 ] -reg byte a [ bitmap_plot::vera_vram_address01_$3 ] -zp[2]:22 [ bitmap_plot::$15 ] -reg byte a [ bitmap_plot::$6 ] -reg byte a [ bitmap_plot::$7 ] -reg byte a [ bitmap_plot::$8 ] -reg byte a [ clearline::$5 ] -zp[2]:14 [ clearline::addr#0 bitmap_line_xdyd::$6 bitmap_line_ydxd::$6 bitmap_line_xdyi::$6 bitmap_plot::$9 bitmap_plot::$12 ] -reg byte a [ clearline::$1 ] -reg byte a [ clearline::$2 ] -reg byte a [ vera_layer_get_color::return#4 ] -reg byte x [ clearline::color#0 ] diff --git a/src/test/ref/examples/cx16/veralib/tilemap_8bpp_16_x_16.asm b/src/test/ref/examples/cx16/veralib/tilemap_8bpp_16_x_16.asm deleted file mode 100644 index ee6e879c3..000000000 --- a/src/test/ref/examples/cx16/veralib/tilemap_8bpp_16_x_16.asm +++ /dev/null @@ -1,2339 +0,0 @@ -// Example program for the Commander X16. -// Demonstrates the usage of the VERA tile map modes and layering. -.cpu _65c02 - // Commodore 64 PRG executable file -.file [name="tilemap_8bpp_16_x_16.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(__start) - /// The colors of the CX16 - .const BLACK = 0 - .const WHITE = 1 - .const BLUE = 6 - .const VERA_INC_1 = $10 - .const VERA_ADDRSEL = 1 - .const VERA_LAYER1_ENABLE = $20 - .const VERA_LAYER0_ENABLE = $10 - .const VERA_LAYER_WIDTH_64 = $10 - .const VERA_LAYER_WIDTH_128 = $20 - .const VERA_LAYER_WIDTH_256 = $30 - .const VERA_LAYER_WIDTH_MASK = $30 - .const VERA_LAYER_HEIGHT_64 = $40 - .const VERA_LAYER_HEIGHT_128 = $80 - .const VERA_LAYER_HEIGHT_256 = $c0 - .const VERA_LAYER_HEIGHT_MASK = $c0 - /// Bit 0-1: Color Depth (0: 1 bpp, 1: 2 bpp, 2: 4 bpp, 3: 8 bpp) - .const VERA_LAYER_COLOR_DEPTH_1BPP = 0 - .const VERA_LAYER_COLOR_DEPTH_2BPP = 1 - .const VERA_LAYER_COLOR_DEPTH_4BPP = 2 - .const VERA_LAYER_COLOR_DEPTH_8BPP = 3 - .const VERA_LAYER_CONFIG_256C = 8 - .const VERA_TILEBASE_WIDTH_16 = 1 - .const VERA_TILEBASE_HEIGHT_16 = 2 - .const VERA_LAYER_TILEBASE_MASK = $fc - .const SIZEOF_POINTER = 2 - .const STACK_BASE = $103 - /// $9F20 VRAM Address (7:0) - .label VERA_ADDRX_L = $9f20 - /// $9F21 VRAM Address (15:8) - .label VERA_ADDRX_M = $9f21 - /// $9F22 VRAM Address (7:0) - /// Bit 4-7: Address Increment The following is the amount incremented per value value:increment - /// 0:0, 1:1, 2:2, 3:4, 4:8, 5:16, 6:32, 7:64, 8:128, 9:256, 10:512, 11:40, 12:80, 13:160, 14:320, 15:640 - /// Bit 3: DECR Setting the DECR bit, will decrement instead of increment by the value set by the 'Address Increment' field. - /// Bit 0: VRAM Address (16) - .label VERA_ADDRX_H = $9f22 - /// $9F23 DATA0 VRAM Data port 0 - .label VERA_DATA0 = $9f23 - /// $9F24 DATA1 VRAM Data port 1 - .label VERA_DATA1 = $9f24 - /// $9F25 CTRL Control - /// Bit 7: Reset - /// Bit 1: DCSEL - /// Bit 2: ADDRSEL - .label VERA_CTRL = $9f25 - /// $9F29 DC_VIDEO (DCSEL=0) - /// Bit 7: Current Field Read-only bit which reflects the active interlaced field in composite and RGB modes. (0: even, 1: odd) - /// Bit 6: Sprites Enable Enable output from the Sprites renderer - /// Bit 5: Layer1 Enable Enable output from the Layer1 renderer - /// Bit 4: Layer0 Enable Enable output from the Layer0 renderer - /// Bit 2: Chroma Disable Setting 'Chroma Disable' disables output of chroma in NTSC composite mode and will give a better picture on a monochrome display. (Setting this bit will also disable the chroma output on the S-video output.) - /// Bit 0-1: Output Mode 0: Video disabled, 1: VGA output, 2: NTSC composite, 3: RGB interlaced, composite sync (via VGA connector) - .label VERA_DC_VIDEO = $9f29 - /// $9F2A DC_HSCALE (DCSEL=0) Active Display H-Scale - .label VERA_DC_HSCALE = $9f2a - /// $9F2B DC_VSCALE (DCSEL=0) Active Display V-Scale - .label VERA_DC_VSCALE = $9f2b - /// $9F2D L0_CONFIG Layer 0 Configuration - .label VERA_L0_CONFIG = $9f2d - /// $9F2E L0_MAPBASE Layer 0 Map Base Address (16:9) - .label VERA_L0_MAPBASE = $9f2e - /// Bit 0: Tile Width (0:8 pixels, 1:16 pixels) - .label VERA_L0_TILEBASE = $9f2f - /// $9F34 L1_CONFIG Layer 1 Configuration - .label VERA_L1_CONFIG = $9f34 - /// $9F35 L1_MAPBASE Layer 1 Map Base Address (16:9) - .label VERA_L1_MAPBASE = $9f35 - /// $9F36 L1_TILEBASE Layer 1 Tile Base - /// Bit 2-7: Tile Base Address (16:11) - /// Bit 1: Tile Height (0:8 pixels, 1:16 pixels) - /// Bit 0: Tile Width (0:8 pixels, 1:16 pixels) - .label VERA_L1_TILEBASE = $9f36 - // Variable holding the screen width; - .label conio_screen_width = $f - // Variable holding the screen height; - .label conio_screen_height = $21 - // Variable holding the screen layer on the VERA card with which conio interacts; - .label conio_screen_layer = $1d - // Variables holding the current map width and map height of the layer. - .label conio_width = $46 - .label conio_height = $26 - .label conio_rowshift = $18 - .label conio_rowskip = $19 - // The screen width - // The screen height - // The text screen base address, which is a 16:0 bit value in VERA VRAM. - // That is 128KB addressable space, thus 17 bits in total. - // CONIO_SCREEN_TEXT contains bits 15:0 of the address. - // CONIO_SCREEN_BANK contains bit 16, the the 64K memory bank in VERA VRAM (the upper 17th bit). - // !!! note that these values are not const for the cx16! - // This conio implements the two layers of VERA, which can be layer 0 or layer 1. - // Configuring conio to output to a different layer, will change these fields to the address base - // configured using VERA_L0_MAPBASE = 0x9f2e or VERA_L1_MAPBASE = 0x9f35. - // Using the function setscreenlayer(layer) will re-calculate using CONIO_SCREEN_TEXT and CONIO_SCREEN_BASE - // based on the values of VERA_L0_MAPBASE or VERA_L1_MAPBASE, mapping the base address of the selected layer. - // The function setscreenlayermapbase(layer,mapbase) allows to configure bit 16:9 of the - // mapbase address of the time map in VRAM of the selected layer VERA_L0_MAPBASE or VERA_L1_MAPBASE. - .label CONIO_SCREEN_TEXT = $12 - .label CONIO_SCREEN_BANK = $39 - // The screen width - // The screen height - // The text screen base address, which is a 16:0 bit value in VERA VRAM. - // That is 128KB addressable space, thus 17 bits in total. - // CONIO_SCREEN_TEXT contains bits 15:0 of the address. - // CONIO_SCREEN_BANK contains bit 16, the the 64K memory bank in VERA VRAM (the upper 17th bit). - // !!! note that these values are not const for the cx16! - // This conio implements the two layers of VERA, which can be layer 0 or layer 1. - // Configuring conio to output to a different layer, will change these fields to the address base - // configured using VERA_L0_MAPBASE = 0x9f2e or VERA_L1_MAPBASE = 0x9f35. - // Using the function setscreenlayer(layer) will re-calculate using CONIO_SCREEN_TEXT and CONIO_SCREEN_BASE - // based on the values of VERA_L0_MAPBASE or VERA_L1_MAPBASE, mapping the base address of the selected layer. - // The function setscreenlayermapbase(layer,mapbase) allows to configure bit 16:9 of the - // mapbase address of the time map in VRAM of the selected layer VERA_L0_MAPBASE or VERA_L1_MAPBASE. - .label CONIO_SCREEN_TEXT_1 = $56 -.segment Code -__start: { - // __ma unsigned byte conio_screen_width = 0 - lda #0 - sta.z conio_screen_width - // __ma unsigned byte conio_screen_height = 0 - sta.z conio_screen_height - // __ma unsigned byte conio_screen_layer = 1 - lda #1 - sta.z conio_screen_layer - // __ma word conio_width = 0 - lda #<0 - sta.z conio_width - sta.z conio_width+1 - // __ma word conio_height = 0 - sta.z conio_height - sta.z conio_height+1 - // __ma byte conio_rowshift = 0 - sta.z conio_rowshift - // __ma word conio_rowskip = 0 - sta.z conio_rowskip - sta.z conio_rowskip+1 - // #pragma constructor_for(conio_x16_init, cputc, clrscr, cscroll) - jsr conio_x16_init - jsr main - rts -} -// Set initial cursor position -conio_x16_init: { - // Position cursor at current line - .label BASIC_CURSOR_LINE = $d6 - .label line = $52 - // char line = *BASIC_CURSOR_LINE - lda.z BASIC_CURSOR_LINE - sta.z line - // vera_layer_mode_text(1,(dword)0x00000,(dword)0x0F800,128,64,8,8,16) - jsr vera_layer_mode_text - // screensize(&conio_screen_width, &conio_screen_height) - jsr screensize - // screenlayer(1) - jsr screenlayer - // vera_layer_set_textcolor(1, WHITE) - ldy #1 - jsr vera_layer_set_textcolor - // vera_layer_set_backcolor(1, BLUE) - lda #BLUE - ldy #1 - jsr vera_layer_set_backcolor - // vera_layer_set_mapbase(0,0x20) - ldx #$20 - lda #0 - jsr vera_layer_set_mapbase - // vera_layer_set_mapbase(1,0x00) - ldx #0 - lda #1 - jsr vera_layer_set_mapbase - // if(line>=CONIO_HEIGHT) - lda.z line - cmp.z conio_screen_height - bcc __b1 - // line=CONIO_HEIGHT-1 - ldx.z conio_screen_height - dex - stx.z line - __b1: - // gotoxy(0, line) - ldx.z line - jsr gotoxy - // } - rts -} -// Output one character at the current cursor position -// Moves the cursor forward. Scrolls the entire screen if needed -// void cputc(__zp($a) char c) -cputc: { - .const OFFSET_STACK_C = 0 - .label __16 = 6 - .label c = $a - .label conio_addr = 8 - tsx - lda STACK_BASE+OFFSET_STACK_C,x - sta.z c - // char color = vera_layer_get_color( conio_screen_layer) - ldx.z conio_screen_layer - jsr vera_layer_get_color - // char color = vera_layer_get_color( conio_screen_layer) - tax - // char* conio_addr = CONIO_SCREEN_TEXT + conio_line_text[conio_screen_layer] - lda.z conio_screen_layer - asl - tay - clc - lda.z CONIO_SCREEN_TEXT - adc conio_line_text,y - sta.z conio_addr - lda.z CONIO_SCREEN_TEXT+1 - adc conio_line_text+1,y - sta.z conio_addr+1 - // conio_cursor_x[conio_screen_layer] << 1 - ldy.z conio_screen_layer - lda conio_cursor_x,y - asl - // conio_addr += conio_cursor_x[conio_screen_layer] << 1 - clc - adc.z conio_addr - sta.z conio_addr - bcc !+ - inc.z conio_addr+1 - !: - // if(c=='\n') - lda #'\n' - cmp.z c - beq __b1 - // *VERA_CTRL &= ~VERA_ADDRSEL - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // BYTE0(conio_addr) - lda.z conio_addr - // *VERA_ADDRX_L = BYTE0(conio_addr) - // Set address - sta VERA_ADDRX_L - // BYTE1(conio_addr) - lda.z conio_addr+1 - // *VERA_ADDRX_M = BYTE1(conio_addr) - sta VERA_ADDRX_M - // CONIO_SCREEN_BANK | VERA_INC_1 - lda #VERA_INC_1 - ora.z CONIO_SCREEN_BANK - // *VERA_ADDRX_H = CONIO_SCREEN_BANK | VERA_INC_1 - sta VERA_ADDRX_H - // *VERA_DATA0 = c - lda.z c - sta VERA_DATA0 - // *VERA_DATA0 = color - stx VERA_DATA0 - // conio_cursor_x[conio_screen_layer]++; - ldx.z conio_screen_layer - inc conio_cursor_x,x - // byte scroll_enable = conio_scroll_enable[conio_screen_layer] - ldy.z conio_screen_layer - lda conio_scroll_enable,y - // if(scroll_enable) - cmp #0 - bne __b5 - // (unsigned int)conio_cursor_x[conio_screen_layer] == conio_width - lda conio_cursor_x,y - sta.z __16 - lda #0 - sta.z __16+1 - // if((unsigned int)conio_cursor_x[conio_screen_layer] == conio_width) - cmp.z conio_width+1 - bne __breturn - lda.z __16 - cmp.z conio_width - bne __breturn - // cputln() - jsr cputln - __breturn: - // } - rts - __b5: - // if(conio_cursor_x[conio_screen_layer] == CONIO_WIDTH) - lda.z conio_screen_width - ldy.z conio_screen_layer - cmp conio_cursor_x,y - bne __breturn - // cputln() - jsr cputln - rts - __b1: - // cputln() - jsr cputln - rts -} -main: { - .label tilebase = $48 - .label t = $3f - .label tile = $24 - .label c = $37 - // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. - .label row = $40 - .label r = $42 - .label column1 = $29 - // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. - .label row_1 = $41 - .label r1 = $43 - // memcpy_in_vram(1, (char*)0xF000, VERA_INC_1, 0, (char*)0xF800, VERA_INC_1, 256*8) - // Before we can load the tiles into memory we need to re-arrange a few things! - // The amount of tiles is 256, the color depth is 256, so each tile is 256 bytes! - // That is 65356 bytes of memory, which is 64K. Yup! One memory bank in VRAM. - // VERA VRAM holds in bank 1 many registers that interfere loading all of this data. - // So it is better to load all in bank 0, but then there is an other issue. - // So the default CX16 character set is located in bank 0, at address 0xF800. - // So we need to move this character set to bank 1, suggested is at address 0xF000. - // The CX16 by default writes textual output to layer 1 in text mode, so we need to - // realign the moved character set to 0xf000 as the new tile base for layer 1. - // We also will need to realign for layer 1 the map base from 0x00000 to 0x10000. - // This is now all easily done with a few statements in the new kickc vera lib ... - lda #<$100*8 - sta.z memcpy_in_vram.num - lda #>$100*8 - sta.z memcpy_in_vram.num+1 - lda #1 - sta.z memcpy_in_vram.dest_bank - lda #<$f000 - sta.z memcpy_in_vram.dest - lda #>$f000 - sta.z memcpy_in_vram.dest+1 - ldy #0 - lda #<$f800 - sta.z memcpy_in_vram.src - lda #>$f800 - sta.z memcpy_in_vram.src+1 - jsr memcpy_in_vram - // vera_layer_mode_tile(1, 0x10000, 0x1F000, 128, 64, 8, 8, 1) - // We copy the 128 character set of 8 bytes each. - lda #8 - sta.z vera_layer_mode_tile.tileheight - sta.z vera_layer_mode_tile.tilewidth - lda #<$1f000 - sta.z vera_layer_mode_tile.tilebase_address_1 - lda #>$1f000 - sta.z vera_layer_mode_tile.tilebase_address_1+1 - lda #<$1f000>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+2 - lda #>$1f000>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+3 - lda #<$10000 - sta.z vera_layer_mode_tile.mapbase_address_1 - lda #>$10000 - sta.z vera_layer_mode_tile.mapbase_address_1+1 - lda #<$10000>>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+2 - lda #>$10000>>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+3 - lda #<$40 - sta.z vera_layer_mode_tile.mapheight - lda #>$40 - sta.z vera_layer_mode_tile.mapheight+1 - lda #1 - sta.z vera_layer_mode_tile.layer - lda #<$80 - sta.z vera_layer_mode_tile.mapwidth - lda #>$80 - sta.z vera_layer_mode_tile.mapwidth+1 - ldx #1 - jsr vera_layer_mode_tile - // screenlayer(1) - jsr screenlayer - // vera_layer_set_textcolor(conio_screen_layer, color) - ldy.z conio_screen_layer - jsr vera_layer_set_textcolor - // vera_layer_set_backcolor(conio_screen_layer, color) - ldy.z conio_screen_layer - lda #BLACK - jsr vera_layer_set_backcolor - // clrscr() - jsr clrscr - // vera_layer_mode_tile(0, 0x14000, 0x00000, 64, 64, 16, 16, 8) - // Now we can use the full bank 0! - // We set the mapbase of the tile demo to output to 0x12000, - // and the tilebase is set to 0x0000! - lda #$10 - sta.z vera_layer_mode_tile.tileheight - sta.z vera_layer_mode_tile.tilewidth - lda #0 - sta.z vera_layer_mode_tile.tilebase_address_1 - sta.z vera_layer_mode_tile.tilebase_address_1+1 - sta.z vera_layer_mode_tile.tilebase_address_1+2 - sta.z vera_layer_mode_tile.tilebase_address_1+3 - lda #<$14000 - sta.z vera_layer_mode_tile.mapbase_address_1 - lda #>$14000 - sta.z vera_layer_mode_tile.mapbase_address_1+1 - lda #<$14000>>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+2 - lda #>$14000>>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+3 - lda #<$40 - sta.z vera_layer_mode_tile.mapheight - lda #>$40 - sta.z vera_layer_mode_tile.mapheight+1 - lda #0 - sta.z vera_layer_mode_tile.layer - lda #<$40 - sta.z vera_layer_mode_tile.mapwidth - lda #>$40 - sta.z vera_layer_mode_tile.mapwidth+1 - ldx #8 - jsr vera_layer_mode_tile - // memcpy_to_vram(0, tilebase, tiles, 256) - lda #<0 - sta.z memcpy_to_vram.vdest - sta.z memcpy_to_vram.vdest+1 - jsr memcpy_to_vram - lda #1 - sta.z t - lda #<0+$100 - sta.z tilebase - lda #>0+$100 - sta.z tilebase+1 - __b1: - ldx #0 - __b2: - // tiles[p]+=1 - lda tiles,x - inc - sta tiles,x - // for(byte p:0..255) - inx - cpx #0 - bne __b2 - // memcpy_to_vram(0, tilebase, tiles, 256) - lda.z tilebase - sta.z memcpy_to_vram.vdest - lda.z tilebase+1 - sta.z memcpy_to_vram.vdest+1 - jsr memcpy_to_vram - // tilebase+=256 - lda.z tilebase - clc - adc #<$100 - sta.z tilebase - lda.z tilebase+1 - adc #>$100 - sta.z tilebase+1 - // for(byte t:1..255) - inc.z t - lda.z t - bne __b1 - // vera_tile_area(0, 0, 0, 0, 40, 30, 0, 0, 0) - //vera_tile_area(byte layer, word tileindex, byte x, byte y, byte w, byte h, byte hflip, byte vflip, byte offset) - lda #$28 - sta.z vera_tile_area.w - lda #$1e - sta.z vera_tile_area.h - lda #0 - sta.z vera_tile_area.x - sta.z vera_tile_area.y - sta.z vera_tile_area.tileindex - sta.z vera_tile_area.tileindex+1 - jsr vera_tile_area - lda #0 - sta.z r - lda #1 - sta.z row - lda #<0 - sta.z tile - sta.z tile+1 - __b5: - lda #0 - sta.z c - tax - __b6: - // vera_tile_area(0, tile, column, row, 1, 1, 0, 0, 0) - stx.z vera_tile_area.x - lda.z row - sta.z vera_tile_area.y - lda #1 - sta.z vera_tile_area.w - sta.z vera_tile_area.h - jsr vera_tile_area - // column+=2 - inx - inx - // tile++; - inc.z tile - bne !+ - inc.z tile+1 - !: - // tile &= 0xff - lda #$ff - and.z tile - sta.z tile - lda #0 - sta.z tile+1 - // for(byte c:0..19) - inc.z c - lda #$14 - cmp.z c - bne __b6 - // row += 2 - lda.z row - clc - adc #2 - sta.z row - // for(byte r:0..11) - inc.z r - lda #$c - cmp.z r - bne __b5 - // gotoxy(0,50) - ldx #$32 - jsr gotoxy - // printf("vera in tile mode 8 x 8, color depth 8 bits per pixel.\n") - lda #s - sta.z printf_str.s+1 - jsr printf_str - // printf("in this mode, tiles are 8 pixels wide and 8 pixels tall.\n") - lda #s1 - sta.z printf_str.s+1 - jsr printf_str - // printf("each tile can have a variation of 256 colors.\n") - lda #s2 - sta.z printf_str.s+1 - jsr printf_str - // printf("the vera palette of 256 colors, can be used by setting the palette\n") - lda #s3 - sta.z printf_str.s+1 - jsr printf_str - // printf("offset for each tile.\n") - lda #s4 - sta.z printf_str.s+1 - jsr printf_str - // printf("here each column is displaying the same tile, but with different offsets!\n") - lda #s5 - sta.z printf_str.s+1 - jsr printf_str - // printf("each offset aligns to multiples of 16 colors in the palette!.\n") - lda #s6 - sta.z printf_str.s+1 - jsr printf_str - // printf("however, the first color will always be transparent (black).\n") - lda #s7 - sta.z printf_str.s+1 - jsr printf_str - // *VERA_DC_VIDEO |= vera_layer_enable[layer] - lda VERA_DC_VIDEO - ora vera_layer_enable - sta VERA_DC_VIDEO - __b9: - // kbhit() - jsr kbhit - // while(!kbhit()) - cmp #0 - beq __b9 - // vera_tile_area(0, 0, 0, 0, 40, 30, 0, 0, 0) - lda #$28 - sta.z vera_tile_area.w - lda #$1e - sta.z vera_tile_area.h - lda #0 - sta.z vera_tile_area.x - sta.z vera_tile_area.y - sta.z vera_tile_area.tileindex - sta.z vera_tile_area.tileindex+1 - jsr vera_tile_area - lda #0 - sta.z r1 - sta.z row_1 - sta.z tile - sta.z tile+1 - __b11: - ldx #0 - txa - sta.z column1 - __b12: - // vera_tile_area(0, tile, column, row, 2, 2, 0, 0, 0) - lda.z row_1 - sta.z vera_tile_area.y - lda #2 - sta.z vera_tile_area.w - sta.z vera_tile_area.h - jsr vera_tile_area - // column+=2 - lda.z column1 - clc - adc #2 - sta.z column1 - // tile++; - inc.z tile - bne !+ - inc.z tile+1 - !: - // tile &= 0xff - lda #$ff - and.z tile - sta.z tile - lda #0 - sta.z tile+1 - // for(byte c:0..19) - inx - cpx #$14 - bne __b12 - // row += 2 - lda.z row_1 - clc - adc #2 - sta.z row_1 - // for(byte r:0..11) - inc.z r1 - lda #$c - cmp.z r1 - bne __b11 - __b14: - // kbhit() - jsr kbhit - // while(!kbhit()) - cmp #0 - beq __b14 - // vera_tile_area(0, 0, 0, 0, 40, 30, 0, 0, 0) - // Now put back the defaults ... - lda #$28 - sta.z vera_tile_area.w - lda #$1e - sta.z vera_tile_area.h - lda #0 - sta.z vera_tile_area.x - sta.z vera_tile_area.y - sta.z vera_tile_area.tileindex - sta.z vera_tile_area.tileindex+1 - jsr vera_tile_area - // ~vera_layer_enable[layer] - lda vera_layer_enable - eor #$ff - // *VERA_DC_VIDEO &= ~vera_layer_enable[layer] - and VERA_DC_VIDEO - sta VERA_DC_VIDEO - // memcpy_in_vram(0, (char*)0xF800, VERA_INC_1, 1, (char*)0xF000, VERA_INC_1, 256*8) - lda #<$100*8 - sta.z memcpy_in_vram.num - lda #>$100*8 - sta.z memcpy_in_vram.num+1 - lda #0 - sta.z memcpy_in_vram.dest_bank - lda #<$f800 - sta.z memcpy_in_vram.dest - lda #>$f800 - sta.z memcpy_in_vram.dest+1 - ldy #1 - lda #<$f000 - sta.z memcpy_in_vram.src - lda #>$f000 - sta.z memcpy_in_vram.src+1 - jsr memcpy_in_vram - // vera_layer_mode_tile(1, 0x00000, 0x0F800, 128, 128, 8, 8, 1) - lda #8 - sta.z vera_layer_mode_tile.tileheight - sta.z vera_layer_mode_tile.tilewidth - lda #<$f800 - sta.z vera_layer_mode_tile.tilebase_address_1 - lda #>$f800 - sta.z vera_layer_mode_tile.tilebase_address_1+1 - lda #<$f800>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+2 - lda #>$f800>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+3 - lda #0 - sta.z vera_layer_mode_tile.mapbase_address_1 - sta.z vera_layer_mode_tile.mapbase_address_1+1 - sta.z vera_layer_mode_tile.mapbase_address_1+2 - sta.z vera_layer_mode_tile.mapbase_address_1+3 - lda #<$80 - sta.z vera_layer_mode_tile.mapheight - lda #>$80 - sta.z vera_layer_mode_tile.mapheight+1 - lda #1 - sta.z vera_layer_mode_tile.layer - lda #<$80 - sta.z vera_layer_mode_tile.mapwidth - lda #>$80 - sta.z vera_layer_mode_tile.mapwidth+1 - ldx #1 - jsr vera_layer_mode_tile - // vera_layer_mode_tile(0, 0x00000, 0x0F800, 128, 128, 8, 8, 1) - lda #8 - sta.z vera_layer_mode_tile.tileheight - sta.z vera_layer_mode_tile.tilewidth - lda #<$f800 - sta.z vera_layer_mode_tile.tilebase_address_1 - lda #>$f800 - sta.z vera_layer_mode_tile.tilebase_address_1+1 - lda #<$f800>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+2 - lda #>$f800>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+3 - lda #0 - sta.z vera_layer_mode_tile.mapbase_address_1 - sta.z vera_layer_mode_tile.mapbase_address_1+1 - sta.z vera_layer_mode_tile.mapbase_address_1+2 - sta.z vera_layer_mode_tile.mapbase_address_1+3 - lda #<$80 - sta.z vera_layer_mode_tile.mapheight - lda #>$80 - sta.z vera_layer_mode_tile.mapheight+1 - lda #0 - sta.z vera_layer_mode_tile.layer - lda #<$80 - sta.z vera_layer_mode_tile.mapwidth - lda #>$80 - sta.z vera_layer_mode_tile.mapwidth+1 - ldx #1 - jsr vera_layer_mode_tile - // screenlayer(1) - jsr screenlayer - // vera_layer_set_textcolor(conio_screen_layer, color) - ldy.z conio_screen_layer - jsr vera_layer_set_textcolor - // vera_layer_set_backcolor(conio_screen_layer, color) - ldy.z conio_screen_layer - lda #BLUE - jsr vera_layer_set_backcolor - // clrscr() - jsr clrscr - // } - rts - .segment Data - tiles: .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - s: .text @"vera in tile mode 8 x 8, color depth 8 bits per pixel.\n" - .byte 0 - s1: .text @"in this mode, tiles are 8 pixels wide and 8 pixels tall.\n" - .byte 0 - s2: .text @"each tile can have a variation of 256 colors.\n" - .byte 0 - s3: .text @"the vera palette of 256 colors, can be used by setting the palette\n" - .byte 0 - s4: .text @"offset for each tile.\n" - .byte 0 - s5: .text @"here each column is displaying the same tile, but with different offsets!\n" - .byte 0 - s6: .text @"each offset aligns to multiples of 16 colors in the palette!.\n" - .byte 0 - s7: .text @"however, the first color will always be transparent (black).\n" - .byte 0 -} -.segment Code -// Set a vera layer in text mode and configure the: -// - layer: Value of 0 or 1. -// - mapbase_address: A dword typed address (4 bytes), that specifies the full address of the map base. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective mapbase vera register. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// - tilebase_address: A dword typed address (4 bytes), that specifies the base address of the tile map. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective tilebase vera register. -// Note that the resulting vera register holds only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// - mapwidth: The width of the map in number of tiles. -// - mapheight: The height of the map in number of tiles. -// - tilewidth: The width of a tile, which can be 8 or 16 pixels. -// - tileheight: The height of a tile, which can be 8 or 16 pixels. -// - color_mode: The color mode, which can be 16 or 256. -// void vera_layer_mode_text(char layer, unsigned long mapbase_address, unsigned long tilebase_address, unsigned int mapwidth, unsigned int mapheight, char tilewidth, char tileheight, unsigned int color_mode) -vera_layer_mode_text: { - .const mapbase_address = 0 - .const tilebase_address = $f800 - .const mapwidth = $80 - .const mapheight = $40 - .const tilewidth = 8 - .const tileheight = 8 - .label layer = 1 - // vera_layer_mode_tile( layer, mapbase_address, tilebase_address, mapwidth, mapheight, tilewidth, tileheight, 1 ) - lda #tileheight - sta.z vera_layer_mode_tile.tileheight - lda #tilewidth - sta.z vera_layer_mode_tile.tilewidth - lda #tilebase_address - sta.z vera_layer_mode_tile.tilebase_address_1+1 - lda #>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+2 - lda #>tilebase_address>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+3 - lda #mapbase_address - sta.z vera_layer_mode_tile.mapbase_address_1+1 - lda #>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+2 - lda #>mapbase_address>>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+3 - lda #mapheight - sta.z vera_layer_mode_tile.mapheight+1 - lda #layer - sta.z vera_layer_mode_tile.layer - lda #mapwidth - sta.z vera_layer_mode_tile.mapwidth+1 - ldx #1 - jsr vera_layer_mode_tile - // vera_layer_set_text_color_mode( layer, VERA_LAYER_CONFIG_16C ) - jsr vera_layer_set_text_color_mode - // } - rts -} -// Return the current screen size. -// void screensize(char *x, char *y) -screensize: { - .label x = conio_screen_width - .label y = conio_screen_height - // char hscale = (*VERA_DC_HSCALE) >> 7 - // VERA returns in VERA_DC_HSCALE the value of 128 when 80 columns is used in text mode, - // and the value of 64 when 40 columns is used in text mode. - // Basically, 40 columns mode in the VERA is a double scan mode. - // Same for the VERA_DC_VSCALE mode, but then the subdivision is 60 or 30 rows. - // I still need to test the other modes, but this will suffice for now for the pure text modes. - lda VERA_DC_HSCALE - rol - rol - and #1 - // 40 << hscale - tay - lda #$28 - cpy #0 - beq !e+ - !: - asl - dey - bne !- - !e: - // *x = 40 << hscale - sta.z x - // char vscale = (*VERA_DC_VSCALE) >> 7 - lda VERA_DC_VSCALE - rol - rol - and #1 - // 30 << vscale - tay - lda #$1e - cpy #0 - beq !e+ - !: - asl - dey - bne !- - !e: - // *y = 30 << vscale - sta.z y - // } - rts -} -// Set the layer with which the conio will interact. -// - layer: value of 0 or 1. -// void screenlayer(char layer) -screenlayer: { - .label __2 = $10 - .label __4 = $35 - .label __5 = $3a - .label vera_layer_get_width1_config = $22 - .label vera_layer_get_width1_return = $10 - .label vera_layer_get_height1_config = $2b - .label vera_layer_get_height1_return = $3a - // conio_screen_layer = layer - lda #1 - sta.z conio_screen_layer - // vera_layer_get_mapbase_bank(conio_screen_layer) - tay - jsr vera_layer_get_mapbase_bank - // vera_layer_get_mapbase_offset(conio_screen_layer) - lda.z conio_screen_layer - jsr vera_layer_get_mapbase_offset - lda.z vera_layer_get_mapbase_offset.return - sta.z CONIO_SCREEN_TEXT_1 - lda.z vera_layer_get_mapbase_offset.return+1 - sta.z CONIO_SCREEN_TEXT_1+1 - // vera_layer_get_width(conio_screen_layer) - lda.z conio_screen_layer - // byte* config = vera_layer_config[layer] - asl - tay - lda vera_layer_config,y - sta.z vera_layer_get_width1_config - lda vera_layer_config+1,y - sta.z vera_layer_get_width1_config+1 - // *config & VERA_LAYER_WIDTH_MASK - lda #VERA_LAYER_WIDTH_MASK - ldy #0 - and (vera_layer_get_width1_config),y - // (*config & VERA_LAYER_WIDTH_MASK) >> 4 - lsr - lsr - lsr - lsr - // return VERA_LAYER_WIDTH[ (*config & VERA_LAYER_WIDTH_MASK) >> 4]; - asl - tay - lda VERA_LAYER_WIDTH,y - sta.z vera_layer_get_width1_return - lda VERA_LAYER_WIDTH+1,y - sta.z vera_layer_get_width1_return+1 - // } - // vera_layer_get_width(conio_screen_layer) - // conio_width = vera_layer_get_width(conio_screen_layer) - lda.z __2 - sta.z conio_width - lda.z __2+1 - sta.z conio_width+1 - // vera_layer_get_rowshift(conio_screen_layer) - ldy.z conio_screen_layer - jsr vera_layer_get_rowshift - // conio_rowshift = vera_layer_get_rowshift(conio_screen_layer) - sta.z conio_rowshift - // vera_layer_get_rowskip(conio_screen_layer) - lda.z conio_screen_layer - jsr vera_layer_get_rowskip - // conio_rowskip = vera_layer_get_rowskip(conio_screen_layer) - lda.z __4 - sta.z conio_rowskip - lda.z __4+1 - sta.z conio_rowskip+1 - // vera_layer_get_height(conio_screen_layer) - lda.z conio_screen_layer - // byte* config = vera_layer_config[layer] - asl - tay - lda vera_layer_config,y - sta.z vera_layer_get_height1_config - lda vera_layer_config+1,y - sta.z vera_layer_get_height1_config+1 - // *config & VERA_LAYER_HEIGHT_MASK - lda #VERA_LAYER_HEIGHT_MASK - ldy #0 - and (vera_layer_get_height1_config),y - // (*config & VERA_LAYER_HEIGHT_MASK) >> 6 - rol - rol - rol - and #3 - // return VERA_LAYER_HEIGHT[ (*config & VERA_LAYER_HEIGHT_MASK) >> 6]; - asl - tay - lda VERA_LAYER_HEIGHT,y - sta.z vera_layer_get_height1_return - lda VERA_LAYER_HEIGHT+1,y - sta.z vera_layer_get_height1_return+1 - // } - // vera_layer_get_height(conio_screen_layer) - // conio_height = vera_layer_get_height(conio_screen_layer) - lda.z __5 - sta.z conio_height - lda.z __5+1 - sta.z conio_height+1 - // } - rts -} -// Set the front color for text output. The old front text color setting is returned. -// - layer: Value of 0 or 1. -// - color: a 4 bit value ( decimal between 0 and 15) when the VERA works in 16x16 color text mode. -// An 8 bit value (decimal between 0 and 255) when the VERA works in 256 text mode. -// Note that on the VERA, the transparent color has value 0. -// char vera_layer_set_textcolor(__register(Y) char layer, char color) -vera_layer_set_textcolor: { - // vera_layer_textcolor[layer] = color - lda #WHITE - sta vera_layer_textcolor,y - // } - rts -} -// Set the back color for text output. The old back text color setting is returned. -// - layer: Value of 0 or 1. -// - color: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// char vera_layer_set_backcolor(__register(Y) char layer, __register(A) char color) -vera_layer_set_backcolor: { - // vera_layer_backcolor[layer] = color - sta vera_layer_backcolor,y - // } - rts -} -// Set the base of the map layer with which the conio will interact. -// - layer: Value of 0 or 1. -// - mapbase: Specifies the base address of the tile map. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// void vera_layer_set_mapbase(__register(A) char layer, __register(X) char mapbase) -vera_layer_set_mapbase: { - .label addr = $22 - // byte* addr = vera_layer_mapbase[layer] - asl - tay - lda vera_layer_mapbase,y - sta.z addr - lda vera_layer_mapbase+1,y - sta.z addr+1 - // *addr = mapbase - txa - ldy #0 - sta (addr),y - // } - rts -} -// Set the cursor to the specified position -// void gotoxy(char x, __register(X) char y) -gotoxy: { - .label __6 = $10 - .label line_offset = $10 - // if(y>CONIO_HEIGHT) - lda.z conio_screen_height - stx.z $ff - cmp.z $ff - bcs __b1 - ldx #0 - __b1: - // if(x>=CONIO_WIDTH) - lda.z conio_screen_width - // conio_cursor_x[conio_screen_layer] = x - lda #0 - ldy.z conio_screen_layer - sta conio_cursor_x,y - // conio_cursor_y[conio_screen_layer] = y - txa - sta conio_cursor_y,y - // unsigned int line_offset = (unsigned int)y << conio_rowshift - txa - sta.z __6 - lda #0 - sta.z __6+1 - ldy.z conio_rowshift - beq !e+ - !: - asl.z line_offset - rol.z line_offset+1 - dey - bne !- - !e: - // conio_line_text[conio_screen_layer] = line_offset - lda.z conio_screen_layer - asl - tay - lda.z line_offset - sta conio_line_text,y - lda.z line_offset+1 - sta conio_line_text+1,y - // } - rts -} -// Get the text and back color for text output in 16 color mode. -// - layer: Value of 0 or 1. -// - return: an 8 bit value with bit 7:4 containing the back color and bit 3:0 containing the front color. -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_color(__register(X) char layer) -vera_layer_get_color: { - .label addr = 4 - // byte* addr = vera_layer_config[layer] - txa - asl - tay - lda vera_layer_config,y - sta.z addr - lda vera_layer_config+1,y - sta.z addr+1 - // *addr & VERA_LAYER_CONFIG_256C - lda #VERA_LAYER_CONFIG_256C - ldy #0 - and (addr),y - // if( *addr & VERA_LAYER_CONFIG_256C ) - cmp #0 - bne __b1 - // vera_layer_backcolor[layer] << 4 - lda vera_layer_backcolor,x - asl - asl - asl - asl - // return ((vera_layer_backcolor[layer] << 4) | vera_layer_textcolor[layer]); - ora vera_layer_textcolor,x - // } - rts - __b1: - // return (vera_layer_textcolor[layer]); - lda vera_layer_textcolor,x - rts -} -// Print a newline -cputln: { - .label temp = 4 - // word temp = conio_line_text[conio_screen_layer] - lda.z conio_screen_layer - asl - // TODO: This needs to be optimized! other variations don't compile because of sections not available! - tay - lda conio_line_text,y - sta.z temp - lda conio_line_text+1,y - sta.z temp+1 - // temp += conio_rowskip - clc - lda.z temp - adc.z conio_rowskip - sta.z temp - lda.z temp+1 - adc.z conio_rowskip+1 - sta.z temp+1 - // conio_line_text[conio_screen_layer] = temp - lda.z conio_screen_layer - asl - tay - lda.z temp - sta conio_line_text,y - lda.z temp+1 - sta conio_line_text+1,y - // conio_cursor_x[conio_screen_layer] = 0 - lda #0 - ldy.z conio_screen_layer - sta conio_cursor_x,y - // conio_cursor_y[conio_screen_layer]++; - ldx.z conio_screen_layer - inc conio_cursor_y,x - // cscroll() - jsr cscroll - // } - rts -} -// Copy block of memory (from VRAM to VRAM) -// Copies the values from the location pointed by src to the location pointed by dest. -// The method uses the VERA access ports 0 and 1 to copy data from and to in VRAM. -// - src_bank: 64K VRAM bank number to copy from (0/1). -// - src: pointer to the location to copy from. Note that the address is a 16 bit value! -// - src_increment: the increment indicator, VERA needs this because addressing increment is automated by VERA at each access. -// - dest_bank: 64K VRAM bank number to copy to (0/1). -// - dest: pointer to the location to copy to. Note that the address is a 16 bit value! -// - dest_increment: the increment indicator, VERA needs this because addressing increment is automated by VERA at each access. -// - num: The number of bytes to copy -// void memcpy_in_vram(__zp($a) char dest_bank, __zp(8) void *dest, char dest_increment, __register(Y) char src_bank, __zp(6) char *src, char src_increment, __zp(4) unsigned int num) -memcpy_in_vram: { - .label i = 2 - .label dest = 8 - .label src = 6 - .label num = 4 - .label dest_bank = $a - // *VERA_CTRL &= ~VERA_ADDRSEL - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // BYTE0(src) - lda.z src - // *VERA_ADDRX_L = BYTE0(src) - // Set address - sta VERA_ADDRX_L - // BYTE1(src) - lda.z src+1 - // *VERA_ADDRX_M = BYTE1(src) - sta VERA_ADDRX_M - // src_increment | src_bank - tya - ora #VERA_INC_1 - // *VERA_ADDRX_H = src_increment | src_bank - sta VERA_ADDRX_H - // *VERA_CTRL |= VERA_ADDRSEL - // Select DATA1 - lda #VERA_ADDRSEL - ora VERA_CTRL - sta VERA_CTRL - // BYTE0(dest) - lda.z dest - // *VERA_ADDRX_L = BYTE0(dest) - // Set address - sta VERA_ADDRX_L - // BYTE1(dest) - lda.z dest+1 - // *VERA_ADDRX_M = BYTE1(dest) - sta VERA_ADDRX_M - // dest_increment | dest_bank - lda #VERA_INC_1 - ora.z dest_bank - // *VERA_ADDRX_H = dest_increment | dest_bank - sta VERA_ADDRX_H - lda #<0 - sta.z i - sta.z i+1 - // Transfer the data - __b1: - // for(unsigned int i=0; i$100 - bne __b13 - lda.z mapwidth - cmp #<$100 - bne __b13 - // config |= VERA_LAYER_WIDTH_256 - txa - ora #VERA_LAYER_WIDTH_256 - tax - // vera_layer_rowshift[layer] = 9 - lda #9 - ldy.z layer - sta vera_layer_rowshift,y - // vera_layer_rowskip[layer] = 512 - tya - asl - tay - lda #<$200 - sta vera_layer_rowskip,y - lda #>$200 - sta vera_layer_rowskip+1,y - __b13: - // case 32: - // config |= VERA_LAYER_HEIGHT_32; - // break; - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$20 - beq __b20 - !: - // case 64: - // config |= VERA_LAYER_HEIGHT_64; - // break; - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$40 - bne !__b17+ - jmp __b17 - !__b17: - !: - // case 128: - // config |= VERA_LAYER_HEIGHT_128; - // break; - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$80 - bne !__b18+ - jmp __b18 - !__b18: - !: - // case 256: - // config |= VERA_LAYER_HEIGHT_256; - // break; - lda.z mapheight+1 - cmp #>$100 - bne __b20 - lda.z mapheight - cmp #<$100 - bne __b20 - // config |= VERA_LAYER_HEIGHT_256 - txa - ora #VERA_LAYER_HEIGHT_256 - tax - __b20: - // vera_layer_set_config(layer, config) - lda.z layer - jsr vera_layer_set_config - // WORD0(mapbase_address) - lda.z mapbase_address_1 - sta.z __1 - lda.z mapbase_address_1+1 - sta.z __1+1 - // vera_mapbase_offset[layer] = WORD0(mapbase_address) - lda.z layer - asl - sta.z __17 - // mapbase - tay - lda.z __1 - sta vera_mapbase_offset,y - lda.z __1+1 - sta vera_mapbase_offset+1,y - // BYTE2(mapbase_address) - lda.z mapbase_address_1+2 - // vera_mapbase_bank[layer] = BYTE2(mapbase_address) - ldy.z layer - sta vera_mapbase_bank,y - // vera_mapbase_address[layer] = mapbase_address - tya - asl - asl - sta.z __18 - tay - lda.z mapbase_address_1 - sta vera_mapbase_address,y - lda.z mapbase_address_1+1 - sta vera_mapbase_address+1,y - lda.z mapbase_address_1+2 - sta vera_mapbase_address+2,y - lda.z mapbase_address_1+3 - sta vera_mapbase_address+3,y - // mapbase_address = mapbase_address >> 1 - lsr - sta.z mapbase_address+3 - lda.z mapbase_address_1+2 - ror - sta.z mapbase_address+2 - lda.z mapbase_address_1+1 - ror - sta.z mapbase_address+1 - lda.z mapbase_address_1 - ror - sta.z mapbase_address - // byte mapbase = BYTE1(mapbase_address) - ldx.z mapbase_address+1 - // vera_layer_set_mapbase(layer,mapbase) - lda.z layer - jsr vera_layer_set_mapbase - // WORD0(tilebase_address) - lda.z tilebase_address_1 - sta.z __6 - lda.z tilebase_address_1+1 - sta.z __6+1 - // vera_tilebase_offset[layer] = WORD0(tilebase_address) - // tilebase - ldy.z __17 - lda.z __6 - sta vera_tilebase_offset,y - lda.z __6+1 - sta vera_tilebase_offset+1,y - // BYTE2(tilebase_address) - lda.z tilebase_address_1+2 - // vera_tilebase_bank[layer] = BYTE2(tilebase_address) - ldy.z layer - sta vera_tilebase_bank,y - // vera_tilebase_address[layer] = tilebase_address - ldy.z __18 - lda.z tilebase_address_1 - sta vera_tilebase_address,y - lda.z tilebase_address_1+1 - sta vera_tilebase_address+1,y - lda.z tilebase_address_1+2 - sta vera_tilebase_address+2,y - lda.z tilebase_address_1+3 - sta vera_tilebase_address+3,y - // tilebase_address = tilebase_address >> 1 - lsr - sta.z tilebase_address+3 - lda.z tilebase_address_1+2 - ror - sta.z tilebase_address+2 - lda.z tilebase_address_1+1 - ror - sta.z tilebase_address+1 - lda.z tilebase_address_1 - ror - sta.z tilebase_address - // byte tilebase = BYTE1(tilebase_address) - lda.z tilebase_address+1 - // tilebase &= VERA_LAYER_TILEBASE_MASK - and #VERA_LAYER_TILEBASE_MASK - tax - // case 8: - // tilebase |= VERA_TILEBASE_WIDTH_8; - // break; - lda #8 - cmp.z tilewidth - beq __b23 - // case 16: - // tilebase |= VERA_TILEBASE_WIDTH_16; - // break; - lda #$10 - cmp.z tilewidth - bne __b23 - // tilebase |= VERA_TILEBASE_WIDTH_16 - txa - ora #VERA_TILEBASE_WIDTH_16 - tax - __b23: - // case 8: - // tilebase |= VERA_TILEBASE_HEIGHT_8; - // break; - lda #8 - cmp.z tileheight - beq __b26 - // case 16: - // tilebase |= VERA_TILEBASE_HEIGHT_16; - // break; - lda #$10 - cmp.z tileheight - bne __b26 - // tilebase |= VERA_TILEBASE_HEIGHT_16 - txa - ora #VERA_TILEBASE_HEIGHT_16 - tax - __b26: - // vera_layer_set_tilebase(layer,tilebase) - lda.z layer - jsr vera_layer_set_tilebase - // } - rts - __b18: - // config |= VERA_LAYER_HEIGHT_128 - txa - ora #VERA_LAYER_HEIGHT_128 - tax - jmp __b20 - __b17: - // config |= VERA_LAYER_HEIGHT_64 - txa - ora #VERA_LAYER_HEIGHT_64 - tax - jmp __b20 - __b11: - // config |= VERA_LAYER_WIDTH_128 - txa - ora #VERA_LAYER_WIDTH_128 - tax - // vera_layer_rowshift[layer] = 8 - lda #8 - ldy.z layer - sta vera_layer_rowshift,y - // vera_layer_rowskip[layer] = 256 - tya - asl - tay - lda #<$100 - sta vera_layer_rowskip,y - lda #>$100 - sta vera_layer_rowskip+1,y - jmp __b13 - __b10: - // config |= VERA_LAYER_WIDTH_64 - txa - ora #VERA_LAYER_WIDTH_64 - tax - // vera_layer_rowshift[layer] = 7 - lda #7 - ldy.z layer - sta vera_layer_rowshift,y - // vera_layer_rowskip[layer] = 128 - tya - asl - tay - lda #$80 - sta vera_layer_rowskip,y - lda #0 - sta vera_layer_rowskip+1,y - jmp __b13 - __b9: - // vera_layer_rowshift[layer] = 6 - lda #6 - ldy.z layer - sta vera_layer_rowshift,y - // vera_layer_rowskip[layer] = 64 - tya - asl - tay - lda #$40 - sta vera_layer_rowskip,y - lda #0 - sta vera_layer_rowskip+1,y - jmp __b13 -} -// clears the screen and moves the cursor to the upper left-hand corner of the screen. -clrscr: { - .label __1 = $53 - .label line_text = 6 - .label color = $20 - .label l = $a - // char* line_text = CONIO_SCREEN_TEXT - lda.z CONIO_SCREEN_TEXT_1 - sta.z line_text - lda.z CONIO_SCREEN_TEXT_1+1 - sta.z line_text+1 - // vera_layer_get_backcolor(conio_screen_layer) - ldy.z conio_screen_layer - jsr vera_layer_get_backcolor - // vera_layer_get_backcolor(conio_screen_layer) << 4 - asl - asl - asl - asl - sta.z __1 - // vera_layer_get_textcolor(conio_screen_layer) - ldy.z conio_screen_layer - jsr vera_layer_get_textcolor - // char color = ( vera_layer_get_backcolor(conio_screen_layer) << 4 ) | vera_layer_get_textcolor(conio_screen_layer) - ora.z __1 - sta.z color - lda #0 - sta.z l - __b1: - // for( char l=0;lmain.tiles - sta.z s+1 - __b1: - // for(char *s = src; s!=end; s++) - lda.z s+1 - cmp #>end - bne __b2 - lda.z s - cmp #1+1 - sta.z rowskip+1 - cpy #0 - beq !e+ - !: - asl.z rowskip - rol.z rowskip+1 - dey - bne !- - !e: - // hflip = vera_layer_hflip[hflip] - lda vera_layer_hflip - sta.z hflip - // vflip = vera_layer_vflip[vflip] - lda vera_layer_vflip - sta.z vflip - // byte index_l = BYTE0(tileindex) - lda.z tileindex - sta.z index_l - // byte index_h = BYTE1(tileindex) - lda.z tileindex+1 - // index_h |= hflip - ora.z hflip - // index_h |= vflip - ora.z index_h - sta.z index_h - // (word)y << shift - lda.z y - sta.z __10 - lda #0 - sta.z __10+1 - ldy.z shift - beq !e+ - !: - asl.z __4 - rol.z __4+1 - dey - bne !- - !e: - // mapbase += ((word)y << shift) - lda.z mapbase - clc - adc.z __4 - sta.z mapbase - lda.z mapbase+1 - adc.z __4+1 - sta.z mapbase+1 - lda.z mapbase+2 - adc #0 - sta.z mapbase+2 - lda.z mapbase+3 - adc #0 - sta.z mapbase+3 - // x << 1 - lda.z x - asl - // mapbase += (x << 1) - clc - adc.z mapbase - sta.z mapbase - lda.z mapbase+1 - adc #0 - sta.z mapbase+1 - lda.z mapbase+2 - adc #0 - sta.z mapbase+2 - lda.z mapbase+3 - adc #0 - sta.z mapbase+3 - lda #0 - sta.z r - __b1: - // for(byte r=0; r$0000 - rts - - continue1: - nop - - // return ch; - lda.z ch - // } - rts -} -// Set the configuration of the layer text color mode. -// - layer: Value of 0 or 1. -// - color_mode: Specifies the color mode to be VERA_LAYER_CONFIG_16 or VERA_LAYER_CONFIG_256 for text mode. -// void vera_layer_set_text_color_mode(char layer, char color_mode) -vera_layer_set_text_color_mode: { - .label addr = $22 - // byte* addr = vera_layer_config[layer] - lda vera_layer_config+vera_layer_mode_text.layer*SIZEOF_POINTER - sta.z addr - lda vera_layer_config+vera_layer_mode_text.layer*SIZEOF_POINTER+1 - sta.z addr+1 - // *addr &= ~VERA_LAYER_CONFIG_256C - lda #VERA_LAYER_CONFIG_256C^$ff - ldy #0 - and (addr),y - sta (addr),y - // *addr |= color_mode - lda (addr),y - sta (addr),y - // } - rts -} -// Get the map base bank of the tiles for the layer. -// - layer: Value of 0 or 1. -// - return: Bank in vera vram. -// __register(X) char vera_layer_get_mapbase_bank(__register(Y) char layer) -vera_layer_get_mapbase_bank: { - // return vera_mapbase_bank[layer]; - ldx vera_mapbase_bank,y - // } - rts -} -// Get the map base lower 16-bit address (offset) of the tiles for the layer. -// - layer: Value of 0 or 1. -// - return: Offset in vera vram of the specified bank. -// __zp($10) unsigned int vera_layer_get_mapbase_offset(__register(A) char layer) -vera_layer_get_mapbase_offset: { - .label return = $10 - // return vera_mapbase_offset[layer]; - asl - tay - lda vera_mapbase_offset,y - sta.z return - lda vera_mapbase_offset+1,y - sta.z return+1 - // } - rts -} -// Get the bit shift value required to skip a whole line fast. -// - layer: Value of 0 or 1. -// - return: Rowshift value to calculate fast from a y value to line offset in tile mode. -// __register(A) char vera_layer_get_rowshift(__register(Y) char layer) -vera_layer_get_rowshift: { - // return vera_layer_rowshift[layer]; - lda vera_layer_rowshift,y - // } - rts -} -// Get the value required to skip a whole line fast. -// - layer: Value of 0 or 1. -// - return: Skip value to calculate fast from a y value to line offset in tile mode. -// __zp($35) unsigned int vera_layer_get_rowskip(__register(A) char layer) -vera_layer_get_rowskip: { - .label return = $35 - // return vera_layer_rowskip[layer]; - asl - tay - lda vera_layer_rowskip,y - sta.z return - lda vera_layer_rowskip+1,y - sta.z return+1 - // } - rts -} -// Scroll the entire screen if the cursor is beyond the last line -cscroll: { - // if(conio_cursor_y[conio_screen_layer]>=CONIO_HEIGHT) - ldy.z conio_screen_layer - lda conio_cursor_y,y - cmp.z conio_screen_height - bcc __b3 - // if(conio_scroll_enable[conio_screen_layer]) - lda conio_scroll_enable,y - cmp #0 - bne __b4 - // if(conio_cursor_y[conio_screen_layer]>=conio_height) - lda conio_cursor_y,y - ldy.z conio_height+1 - bne __b3 - cmp.z conio_height - __b3: - // } - rts - __b4: - // insertup() - jsr insertup - // gotoxy( 0, CONIO_HEIGHT-1) - ldx.z conio_screen_height - dex - jsr gotoxy - rts -} -// Set the configuration of the layer. -// - layer: Value of 0 or 1. -// - config: Specifies the modes which are specified using T256C / 'Bitmap Mode' / 'Color Depth'. -// void vera_layer_set_config(__register(A) char layer, __register(X) char config) -vera_layer_set_config: { - .label addr = $22 - // byte* addr = vera_layer_config[layer] - asl - tay - lda vera_layer_config,y - sta.z addr - lda vera_layer_config+1,y - sta.z addr+1 - // *addr = config - txa - ldy #0 - sta (addr),y - // } - rts -} -// Set the base of the tiles for the layer with which the conio will interact. -// - layer: Value of 0 or 1. -// - tilebase: Specifies the base address of the tile map. -// Note that the register only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// void vera_layer_set_tilebase(__register(A) char layer, __register(X) char tilebase) -vera_layer_set_tilebase: { - .label addr = $22 - // byte* addr = vera_layer_tilebase[layer] - asl - tay - lda vera_layer_tilebase,y - sta.z addr - lda vera_layer_tilebase+1,y - sta.z addr+1 - // *addr = tilebase - txa - ldy #0 - sta (addr),y - // } - rts -} -// Get the back color for text output. The old back text color setting is returned. -// - layer: Value of 0 or 1. -// - return: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_backcolor(__register(Y) char layer) -vera_layer_get_backcolor: { - // return vera_layer_backcolor[layer]; - lda vera_layer_backcolor,y - // } - rts -} -// Get the front color for text output. The old front text color setting is returned. -// - layer: Value of 0 or 1. -// - return: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_textcolor(__register(Y) char layer) -vera_layer_get_textcolor: { - // return vera_layer_textcolor[layer]; - lda vera_layer_textcolor,y - // } - rts -} -// Insert a new line, and scroll the upper part of the screen up. -insertup: { - .label cy = $e - .label width = $b - .label line = 8 - .label start = 8 - // unsigned byte cy = conio_cursor_y[conio_screen_layer] - ldy.z conio_screen_layer - lda conio_cursor_y,y - sta.z cy - // unsigned byte width = CONIO_WIDTH * 2 - lda.z conio_screen_width - asl - sta.z width - ldx #1 - __b1: - // for(unsigned byte i=1; i<=cy; i++) - lda.z cy - stx.z $ff - cmp.z $ff - bcs __b2 - // clearline() - jsr clearline - // } - rts - __b2: - // i-1 - txa - sec - sbc #1 - // unsigned int line = (i-1) << conio_rowshift - ldy.z conio_rowshift - sta.z line - lda #0 - sta.z line+1 - cpy #0 - beq !e+ - !: - asl.z line - rol.z line+1 - dey - bne !- - !e: - // unsigned char* start = CONIO_SCREEN_TEXT + line - clc - lda.z start - adc.z CONIO_SCREEN_TEXT - sta.z start - lda.z start+1 - adc.z CONIO_SCREEN_TEXT+1 - sta.z start+1 - // start+conio_rowskip - lda.z start - clc - adc.z conio_rowskip - sta.z memcpy_in_vram.src - lda.z start+1 - adc.z conio_rowskip+1 - sta.z memcpy_in_vram.src+1 - // memcpy_in_vram(0, start, VERA_INC_1, 0, start+conio_rowskip, VERA_INC_1, width) - lda.z width - sta.z memcpy_in_vram.num - lda #0 - sta.z memcpy_in_vram.num+1 - // memcpy_in_vram(0, start, VERA_INC_1, 0, start+conio_rowskip, VERA_INC_1, width) - sta.z memcpy_in_vram.dest_bank - tay - jsr memcpy_in_vram - // for(unsigned byte i=1; i<=cy; i++) - inx - jmp __b1 -} -clearline: { - .label addr = $c - .label c = 2 - // *VERA_CTRL &= ~VERA_ADDRSEL - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // byte* addr = CONIO_SCREEN_TEXT + conio_line_text[conio_screen_layer] - lda.z conio_screen_layer - asl - // Set address - tay - clc - lda.z CONIO_SCREEN_TEXT - adc conio_line_text,y - sta.z addr - lda.z CONIO_SCREEN_TEXT+1 - adc conio_line_text+1,y - sta.z addr+1 - // BYTE0(addr) - lda.z addr - // *VERA_ADDRX_L = BYTE0(addr) - sta VERA_ADDRX_L - // BYTE1(addr) - lda.z addr+1 - // *VERA_ADDRX_M = BYTE1(addr) - sta VERA_ADDRX_M - // *VERA_ADDRX_H = VERA_INC_1 - lda #VERA_INC_1 - sta VERA_ADDRX_H - // char color = vera_layer_get_color( conio_screen_layer) - ldx.z conio_screen_layer - jsr vera_layer_get_color - // char color = vera_layer_get_color( conio_screen_layer) - tax - lda #<0 - sta.z c - sta.z c+1 - __b1: - // for( unsigned int c=0;c> 7 - [177] screensize::$1 = $28 << screensize::hscale#0 - [178] *screensize::x#0 = screensize::$1 - [179] screensize::vscale#0 = *VERA_DC_VSCALE >> 7 - [180] screensize::$3 = $1e << screensize::vscale#0 - [181] *screensize::y#0 = screensize::$3 - to:screensize::@return -screensize::@return: scope:[screensize] from screensize - [182] return - to:@return - -void screenlayer(char layer) -screenlayer: scope:[screenlayer] from conio_x16_init::@4 main::@20 main::@38 - [183] conio_screen_layer = 1 - [184] vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer - [185] call vera_layer_get_mapbase_bank - [186] vera_layer_get_mapbase_bank::return#2 = vera_layer_get_mapbase_bank::return#0 - to:screenlayer::@3 -screenlayer::@3: scope:[screenlayer] from screenlayer - [187] CONIO_SCREEN_BANK#15 = vera_layer_get_mapbase_bank::return#2 - [188] vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer - [189] call vera_layer_get_mapbase_offset - [190] vera_layer_get_mapbase_offset::return#2 = vera_layer_get_mapbase_offset::return#0 - to:screenlayer::@4 -screenlayer::@4: scope:[screenlayer] from screenlayer::@3 - [191] CONIO_SCREEN_TEXT#17 = vera_layer_get_mapbase_offset::return#2 - [192] screenlayer::vera_layer_get_width1_layer#0 = conio_screen_layer - to:screenlayer::vera_layer_get_width1 -screenlayer::vera_layer_get_width1: scope:[screenlayer] from screenlayer::@4 - [193] screenlayer::vera_layer_get_width1_$2 = screenlayer::vera_layer_get_width1_layer#0 << 1 - [194] screenlayer::vera_layer_get_width1_config#0 = vera_layer_config[screenlayer::vera_layer_get_width1_$2] - [195] screenlayer::vera_layer_get_width1_$0 = *screenlayer::vera_layer_get_width1_config#0 & VERA_LAYER_WIDTH_MASK - [196] screenlayer::vera_layer_get_width1_$1 = screenlayer::vera_layer_get_width1_$0 >> 4 - [197] screenlayer::vera_layer_get_width1_$3 = screenlayer::vera_layer_get_width1_$1 << 1 - [198] screenlayer::vera_layer_get_width1_return#0 = VERA_LAYER_WIDTH[screenlayer::vera_layer_get_width1_$3] - to:screenlayer::vera_layer_get_width1_@return -screenlayer::vera_layer_get_width1_@return: scope:[screenlayer] from screenlayer::vera_layer_get_width1 - [199] screenlayer::vera_layer_get_width1_return#1 = screenlayer::vera_layer_get_width1_return#0 - to:screenlayer::@1 -screenlayer::@1: scope:[screenlayer] from screenlayer::vera_layer_get_width1_@return - [200] screenlayer::$2 = screenlayer::vera_layer_get_width1_return#1 - [201] conio_width = screenlayer::$2 - [202] vera_layer_get_rowshift::layer#0 = conio_screen_layer - [203] call vera_layer_get_rowshift - [204] vera_layer_get_rowshift::return#2 = vera_layer_get_rowshift::return#0 - to:screenlayer::@5 -screenlayer::@5: scope:[screenlayer] from screenlayer::@1 - [205] screenlayer::$3 = vera_layer_get_rowshift::return#2 - [206] conio_rowshift = screenlayer::$3 - [207] vera_layer_get_rowskip::layer#0 = conio_screen_layer - [208] call vera_layer_get_rowskip - [209] vera_layer_get_rowskip::return#2 = vera_layer_get_rowskip::return#0 - to:screenlayer::@6 -screenlayer::@6: scope:[screenlayer] from screenlayer::@5 - [210] screenlayer::$4 = vera_layer_get_rowskip::return#2 - [211] conio_rowskip = screenlayer::$4 - [212] screenlayer::vera_layer_get_height1_layer#0 = conio_screen_layer - to:screenlayer::vera_layer_get_height1 -screenlayer::vera_layer_get_height1: scope:[screenlayer] from screenlayer::@6 - [213] screenlayer::vera_layer_get_height1_$2 = screenlayer::vera_layer_get_height1_layer#0 << 1 - [214] screenlayer::vera_layer_get_height1_config#0 = vera_layer_config[screenlayer::vera_layer_get_height1_$2] - [215] screenlayer::vera_layer_get_height1_$0 = *screenlayer::vera_layer_get_height1_config#0 & VERA_LAYER_HEIGHT_MASK - [216] screenlayer::vera_layer_get_height1_$1 = screenlayer::vera_layer_get_height1_$0 >> 6 - [217] screenlayer::vera_layer_get_height1_$3 = screenlayer::vera_layer_get_height1_$1 << 1 - [218] screenlayer::vera_layer_get_height1_return#0 = VERA_LAYER_HEIGHT[screenlayer::vera_layer_get_height1_$3] - to:screenlayer::vera_layer_get_height1_@return -screenlayer::vera_layer_get_height1_@return: scope:[screenlayer] from screenlayer::vera_layer_get_height1 - [219] screenlayer::vera_layer_get_height1_return#1 = screenlayer::vera_layer_get_height1_return#0 - to:screenlayer::@2 -screenlayer::@2: scope:[screenlayer] from screenlayer::vera_layer_get_height1_@return - [220] screenlayer::$5 = screenlayer::vera_layer_get_height1_return#1 - [221] conio_height = screenlayer::$5 - to:screenlayer::@return -screenlayer::@return: scope:[screenlayer] from screenlayer::@2 - [222] return - to:@return - -char vera_layer_set_textcolor(char layer , char color) -vera_layer_set_textcolor: scope:[vera_layer_set_textcolor] from conio_x16_init::@5 main::textcolor1 main::textcolor2 - [223] vera_layer_set_textcolor::layer#3 = phi( conio_x16_init::@5/1, main::textcolor1/vera_layer_set_textcolor::layer#1, main::textcolor2/vera_layer_set_textcolor::layer#2 ) - [224] vera_layer_textcolor[vera_layer_set_textcolor::layer#3] = WHITE - to:vera_layer_set_textcolor::@return -vera_layer_set_textcolor::@return: scope:[vera_layer_set_textcolor] from vera_layer_set_textcolor - [225] return - to:@return - -char vera_layer_set_backcolor(char layer , char color) -vera_layer_set_backcolor: scope:[vera_layer_set_backcolor] from conio_x16_init::@6 main::bgcolor1 main::bgcolor2 - [226] vera_layer_set_backcolor::color#3 = phi( conio_x16_init::@6/BLUE, main::bgcolor1/BLACK, main::bgcolor2/BLUE ) - [226] vera_layer_set_backcolor::layer#3 = phi( conio_x16_init::@6/1, main::bgcolor1/vera_layer_set_backcolor::layer#1, main::bgcolor2/vera_layer_set_backcolor::layer#2 ) - [227] vera_layer_backcolor[vera_layer_set_backcolor::layer#3] = vera_layer_set_backcolor::color#3 - to:vera_layer_set_backcolor::@return -vera_layer_set_backcolor::@return: scope:[vera_layer_set_backcolor] from vera_layer_set_backcolor - [228] return - to:@return - -void vera_layer_set_mapbase(char layer , char mapbase) -vera_layer_set_mapbase: scope:[vera_layer_set_mapbase] from conio_x16_init::@7 conio_x16_init::@8 vera_layer_mode_tile::@27 - [229] vera_layer_set_mapbase::mapbase#3 = phi( conio_x16_init::@7/$20, conio_x16_init::@8/0, vera_layer_mode_tile::@27/vera_layer_set_mapbase::mapbase#0 ) - [229] vera_layer_set_mapbase::layer#3 = phi( conio_x16_init::@7/0, conio_x16_init::@8/1, vera_layer_mode_tile::@27/vera_layer_set_mapbase::layer#0 ) - [230] vera_layer_set_mapbase::$0 = vera_layer_set_mapbase::layer#3 << 1 - [231] vera_layer_set_mapbase::addr#0 = vera_layer_mapbase[vera_layer_set_mapbase::$0] - [232] *vera_layer_set_mapbase::addr#0 = vera_layer_set_mapbase::mapbase#3 - to:vera_layer_set_mapbase::@return -vera_layer_set_mapbase::@return: scope:[vera_layer_set_mapbase] from vera_layer_set_mapbase - [233] return - to:@return - -void gotoxy(char x , char y) -gotoxy: scope:[gotoxy] from conio_x16_init::@1 cscroll::@5 main::@8 - [234] gotoxy::y#4 = phi( conio_x16_init::@1/gotoxy::y#1, cscroll::@5/gotoxy::y#2, main::@8/$32 ) - [235] if(gotoxy::y#4<=conio_screen_height) goto gotoxy::@4 - to:gotoxy::@1 -gotoxy::@4: scope:[gotoxy] from gotoxy - [236] phi() - to:gotoxy::@1 -gotoxy::@1: scope:[gotoxy] from gotoxy gotoxy::@4 - [237] gotoxy::y#5 = phi( gotoxy::@4/gotoxy::y#4, gotoxy/0 ) - [238] if(0> 1 - [319] vera_layer_mode_tile::mapbase#0 = byte1 vera_layer_mode_tile::mapbase_address#0 - [320] vera_layer_set_mapbase::layer#0 = vera_layer_mode_tile::layer#10 - [321] vera_layer_set_mapbase::mapbase#0 = vera_layer_mode_tile::mapbase#0 - [322] call vera_layer_set_mapbase - to:vera_layer_mode_tile::@28 -vera_layer_mode_tile::@28: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@27 - [323] vera_layer_mode_tile::$6 = word0 vera_layer_mode_tile::tilebase_address#10 - [324] vera_tilebase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$6 - [325] vera_layer_mode_tile::$7 = byte2 vera_layer_mode_tile::tilebase_address#10 - [326] vera_tilebase_bank[vera_layer_mode_tile::layer#10] = vera_layer_mode_tile::$7 - [327] vera_tilebase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::tilebase_address#10 - [328] vera_layer_mode_tile::tilebase_address#0 = vera_layer_mode_tile::tilebase_address#10 >> 1 - [329] vera_layer_mode_tile::tilebase#0 = byte1 vera_layer_mode_tile::tilebase_address#0 - [330] vera_layer_mode_tile::tilebase#1 = vera_layer_mode_tile::tilebase#0 & VERA_LAYER_TILEBASE_MASK - [331] if(vera_layer_mode_tile::tilewidth#10==8) goto vera_layer_mode_tile::@23 - to:vera_layer_mode_tile::@21 -vera_layer_mode_tile::@21: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@28 - [332] if(vera_layer_mode_tile::tilewidth#10!=$10) goto vera_layer_mode_tile::@23 - to:vera_layer_mode_tile::@22 -vera_layer_mode_tile::@22: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@21 - [333] vera_layer_mode_tile::tilebase#3 = vera_layer_mode_tile::tilebase#1 | VERA_TILEBASE_WIDTH_16 - to:vera_layer_mode_tile::@23 -vera_layer_mode_tile::@23: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@21 vera_layer_mode_tile::@22 vera_layer_mode_tile::@28 - [334] vera_layer_mode_tile::tilebase#12 = phi( vera_layer_mode_tile::@21/vera_layer_mode_tile::tilebase#1, vera_layer_mode_tile::@28/vera_layer_mode_tile::tilebase#1, vera_layer_mode_tile::@22/vera_layer_mode_tile::tilebase#3 ) - [335] if(vera_layer_mode_tile::tileheight#10==8) goto vera_layer_mode_tile::@26 - to:vera_layer_mode_tile::@24 -vera_layer_mode_tile::@24: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@23 - [336] if(vera_layer_mode_tile::tileheight#10!=$10) goto vera_layer_mode_tile::@26 - to:vera_layer_mode_tile::@25 -vera_layer_mode_tile::@25: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@24 - [337] vera_layer_mode_tile::tilebase#5 = vera_layer_mode_tile::tilebase#12 | VERA_TILEBASE_HEIGHT_16 - to:vera_layer_mode_tile::@26 -vera_layer_mode_tile::@26: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@23 vera_layer_mode_tile::@24 vera_layer_mode_tile::@25 - [338] vera_layer_mode_tile::tilebase#10 = phi( vera_layer_mode_tile::@24/vera_layer_mode_tile::tilebase#12, vera_layer_mode_tile::@23/vera_layer_mode_tile::tilebase#12, vera_layer_mode_tile::@25/vera_layer_mode_tile::tilebase#5 ) - [339] vera_layer_set_tilebase::layer#0 = vera_layer_mode_tile::layer#10 - [340] vera_layer_set_tilebase::tilebase#0 = vera_layer_mode_tile::tilebase#10 - [341] call vera_layer_set_tilebase - to:vera_layer_mode_tile::@return -vera_layer_mode_tile::@return: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@26 - [342] return - to:@return -vera_layer_mode_tile::@18: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@15 - [343] vera_layer_mode_tile::config#11 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_128 - to:vera_layer_mode_tile::@20 -vera_layer_mode_tile::@17: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@14 - [344] vera_layer_mode_tile::config#10 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_64 - to:vera_layer_mode_tile::@20 -vera_layer_mode_tile::@11: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@7 - [345] vera_layer_mode_tile::config#7 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_128 - [346] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 8 - [347] vera_layer_mode_tile::$13 = vera_layer_mode_tile::layer#10 << 1 - [348] vera_layer_rowskip[vera_layer_mode_tile::$13] = $100 - to:vera_layer_mode_tile::@13 -vera_layer_mode_tile::@10: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@6 - [349] vera_layer_mode_tile::config#6 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_64 - [350] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 7 - [351] vera_layer_mode_tile::$12 = vera_layer_mode_tile::layer#10 << 1 - [352] vera_layer_rowskip[vera_layer_mode_tile::$12] = $80 - to:vera_layer_mode_tile::@13 -vera_layer_mode_tile::@9: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@5 - [353] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 6 - [354] vera_layer_mode_tile::$11 = vera_layer_mode_tile::layer#10 << 1 - [355] vera_layer_rowskip[vera_layer_mode_tile::$11] = $40 - to:vera_layer_mode_tile::@13 - -void clrscr() -clrscr: scope:[clrscr] from main::@16 main::@18 - [356] clrscr::line_text#0 = (char *)CONIO_SCREEN_TEXT#17 - [357] vera_layer_get_backcolor::layer#0 = conio_screen_layer - [358] call vera_layer_get_backcolor - [359] vera_layer_get_backcolor::return#0 = vera_layer_get_backcolor::return#1 - to:clrscr::@7 -clrscr::@7: scope:[clrscr] from clrscr - [360] clrscr::$0 = vera_layer_get_backcolor::return#0 - [361] clrscr::$1 = clrscr::$0 << 4 - [362] vera_layer_get_textcolor::layer#0 = conio_screen_layer - [363] call vera_layer_get_textcolor - [364] vera_layer_get_textcolor::return#0 = vera_layer_get_textcolor::return#1 - to:clrscr::@8 -clrscr::@8: scope:[clrscr] from clrscr::@7 - [365] clrscr::$2 = vera_layer_get_textcolor::return#0 - [366] clrscr::color#0 = clrscr::$1 | clrscr::$2 - to:clrscr::@1 -clrscr::@1: scope:[clrscr] from clrscr::@6 clrscr::@8 - [367] clrscr::line_text#2 = phi( clrscr::@6/clrscr::line_text#1, clrscr::@8/clrscr::line_text#0 ) - [367] clrscr::l#2 = phi( clrscr::@6/clrscr::l#1, clrscr::@8/0 ) - [368] if(clrscr::l#2$0000 - rts - - continue1: - nop - }} - [444] kbhit::return#0 = kbhit::ch - to:kbhit::@return -kbhit::@return: scope:[kbhit] from kbhit - [445] kbhit::return#1 = kbhit::return#0 - [446] return - to:@return - -void vera_layer_set_text_color_mode(char layer , char color_mode) -vera_layer_set_text_color_mode: scope:[vera_layer_set_text_color_mode] from vera_layer_mode_text::@1 - [447] vera_layer_set_text_color_mode::addr#0 = *(vera_layer_config+vera_layer_mode_text::layer#0*SIZEOF_POINTER) - [448] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 & ~VERA_LAYER_CONFIG_256C - [449] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 - to:vera_layer_set_text_color_mode::@return -vera_layer_set_text_color_mode::@return: scope:[vera_layer_set_text_color_mode] from vera_layer_set_text_color_mode - [450] return - to:@return - -char vera_layer_get_mapbase_bank(char layer) -vera_layer_get_mapbase_bank: scope:[vera_layer_get_mapbase_bank] from screenlayer - [451] vera_layer_get_mapbase_bank::return#0 = vera_mapbase_bank[vera_layer_get_mapbase_bank::layer#0] - to:vera_layer_get_mapbase_bank::@return -vera_layer_get_mapbase_bank::@return: scope:[vera_layer_get_mapbase_bank] from vera_layer_get_mapbase_bank - [452] return - to:@return - -unsigned int vera_layer_get_mapbase_offset(char layer) -vera_layer_get_mapbase_offset: scope:[vera_layer_get_mapbase_offset] from screenlayer::@3 - [453] vera_layer_get_mapbase_offset::$0 = vera_layer_get_mapbase_offset::layer#0 << 1 - [454] vera_layer_get_mapbase_offset::return#0 = vera_mapbase_offset[vera_layer_get_mapbase_offset::$0] - to:vera_layer_get_mapbase_offset::@return -vera_layer_get_mapbase_offset::@return: scope:[vera_layer_get_mapbase_offset] from vera_layer_get_mapbase_offset - [455] return - to:@return - -char vera_layer_get_rowshift(char layer) -vera_layer_get_rowshift: scope:[vera_layer_get_rowshift] from screenlayer::@1 - [456] vera_layer_get_rowshift::return#0 = vera_layer_rowshift[vera_layer_get_rowshift::layer#0] - to:vera_layer_get_rowshift::@return -vera_layer_get_rowshift::@return: scope:[vera_layer_get_rowshift] from vera_layer_get_rowshift - [457] return - to:@return - -unsigned int vera_layer_get_rowskip(char layer) -vera_layer_get_rowskip: scope:[vera_layer_get_rowskip] from screenlayer::@5 - [458] vera_layer_get_rowskip::$0 = vera_layer_get_rowskip::layer#0 << 1 - [459] vera_layer_get_rowskip::return#0 = vera_layer_rowskip[vera_layer_get_rowskip::$0] - to:vera_layer_get_rowskip::@return -vera_layer_get_rowskip::@return: scope:[vera_layer_get_rowskip] from vera_layer_get_rowskip - [460] return - to:@return - -void cscroll() -cscroll: scope:[cscroll] from cputln - [461] if(conio_cursor_y[conio_screen_layer] conio_screen_height - gotoxy::$1 = ! gotoxy::$0 - if(gotoxy::$1) goto gotoxy::@1 - to:gotoxy::@3 -gotoxy::@1: scope:[gotoxy] from gotoxy gotoxy::@3 - gotoxy::y#6 = phi( gotoxy/gotoxy::y#4, gotoxy::@3/gotoxy::y#0 ) - gotoxy::x#4 = phi( gotoxy/gotoxy::x#6, gotoxy::@3/gotoxy::x#7 ) - gotoxy::$2 = gotoxy::x#4 >= conio_screen_width - gotoxy::$3 = ! gotoxy::$2 - if(gotoxy::$3) goto gotoxy::@2 - to:gotoxy::@4 -gotoxy::@3: scope:[gotoxy] from gotoxy - gotoxy::x#7 = phi( gotoxy/gotoxy::x#6 ) - gotoxy::y#0 = 0 - to:gotoxy::@1 -gotoxy::@2: scope:[gotoxy] from gotoxy::@1 gotoxy::@4 - gotoxy::y#5 = phi( gotoxy::@1/gotoxy::y#6, gotoxy::@4/gotoxy::y#7 ) - gotoxy::x#5 = phi( gotoxy::@1/gotoxy::x#4, gotoxy::@4/gotoxy::x#0 ) - conio_cursor_x[conio_screen_layer] = gotoxy::x#5 - conio_cursor_y[conio_screen_layer] = gotoxy::y#5 - gotoxy::$6 = (unsigned int)gotoxy::y#5 - gotoxy::line_offset#0 = gotoxy::$6 << conio_rowshift - gotoxy::$5 = conio_screen_layer * SIZEOF_UNSIGNED_INT - conio_line_text[gotoxy::$5] = gotoxy::line_offset#0 - to:gotoxy::@return -gotoxy::@4: scope:[gotoxy] from gotoxy::@1 - gotoxy::y#7 = phi( gotoxy::@1/gotoxy::y#6 ) - gotoxy::x#0 = 0 - to:gotoxy::@2 -gotoxy::@return: scope:[gotoxy] from gotoxy::@2 - return - to:@return - -void screensize(char *x , char *y) -screensize: scope:[screensize] from conio_x16_init::@3 - screensize::y#1 = phi( conio_x16_init::@3/screensize::y#0 ) - screensize::x#1 = phi( conio_x16_init::@3/screensize::x#0 ) - screensize::hscale#0 = *VERA_DC_HSCALE >> 7 - screensize::$1 = $28 << screensize::hscale#0 - *screensize::x#1 = screensize::$1 - screensize::vscale#0 = *VERA_DC_VSCALE >> 7 - screensize::$3 = $1e << screensize::vscale#0 - *screensize::y#1 = screensize::$3 - to:screensize::@return -screensize::@return: scope:[screensize] from screensize - return - to:@return - -__stackcall void cputc(char c) -cputc: scope:[cputc] from - CONIO_SCREEN_BANK#33 = phi( ) - CONIO_SCREEN_TEXT#26 = phi( ) - cputc::c#0 = stackidx(char,cputc::OFFSET_STACK_C) - vera_layer_get_color::layer#0 = conio_screen_layer - call vera_layer_get_color - vera_layer_get_color::return#0 = vera_layer_get_color::return#3 - to:cputc::@7 -cputc::@7: scope:[cputc] from cputc - CONIO_SCREEN_BANK#23 = phi( cputc/CONIO_SCREEN_BANK#33 ) - cputc::c#1 = phi( cputc/cputc::c#0 ) - CONIO_SCREEN_TEXT#12 = phi( cputc/CONIO_SCREEN_TEXT#26 ) - vera_layer_get_color::return#5 = phi( cputc/vera_layer_get_color::return#0 ) - cputc::color#0 = vera_layer_get_color::return#5 - cputc::$15 = conio_screen_layer * SIZEOF_UNSIGNED_INT - cputc::conio_addr#0 = CONIO_SCREEN_TEXT#12 + conio_line_text[cputc::$15] - cputc::$2 = conio_cursor_x[conio_screen_layer] << 1 - cputc::conio_addr#1 = cputc::conio_addr#0 + cputc::$2 - cputc::$3 = cputc::c#1 == ' -' - if(cputc::$3) goto cputc::@1 - to:cputc::@2 -cputc::@1: scope:[cputc] from cputc::@7 - CONIO_SCREEN_TEXT#72 = phi( cputc::@7/CONIO_SCREEN_TEXT#12 ) - call cputln - to:cputc::@8 -cputc::@8: scope:[cputc] from cputc::@1 - to:cputc::@return -cputc::@2: scope:[cputc] from cputc::@7 - CONIO_SCREEN_TEXT#81 = phi( cputc::@7/CONIO_SCREEN_TEXT#12 ) - cputc::color#1 = phi( cputc::@7/cputc::color#0 ) - cputc::c#2 = phi( cputc::@7/cputc::c#1 ) - CONIO_SCREEN_BANK#12 = phi( cputc::@7/CONIO_SCREEN_BANK#23 ) - cputc::conio_addr#2 = phi( cputc::@7/cputc::conio_addr#1 ) - *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL - cputc::$4 = byte0 cputc::conio_addr#2 - *VERA_ADDRX_L = cputc::$4 - cputc::$5 = byte1 cputc::conio_addr#2 - *VERA_ADDRX_M = cputc::$5 - cputc::$6 = CONIO_SCREEN_BANK#12 | VERA_INC_1 - *VERA_ADDRX_H = cputc::$6 - *VERA_DATA0 = cputc::c#2 - *VERA_DATA0 = cputc::color#1 - conio_cursor_x[conio_screen_layer] = ++ conio_cursor_x[conio_screen_layer] - cputc::scroll_enable#0 = conio_scroll_enable[conio_screen_layer] - cputc::$17 = 0 != cputc::scroll_enable#0 - if(cputc::$17) goto cputc::@5 - to:cputc::@3 -cputc::@5: scope:[cputc] from cputc::@2 - CONIO_SCREEN_TEXT#78 = phi( cputc::@2/CONIO_SCREEN_TEXT#81 ) - cputc::$11 = conio_cursor_x[conio_screen_layer] == conio_screen_width - cputc::$12 = ! cputc::$11 - if(cputc::$12) goto cputc::@return - to:cputc::@6 -cputc::@3: scope:[cputc] from cputc::@2 - CONIO_SCREEN_TEXT#77 = phi( cputc::@2/CONIO_SCREEN_TEXT#81 ) - cputc::$16 = (unsigned int)conio_cursor_x[conio_screen_layer] - cputc::$8 = cputc::$16 == conio_width - cputc::$9 = ! cputc::$8 - if(cputc::$9) goto cputc::@return - to:cputc::@4 -cputc::@4: scope:[cputc] from cputc::@3 - CONIO_SCREEN_TEXT#73 = phi( cputc::@3/CONIO_SCREEN_TEXT#77 ) - call cputln - to:cputc::@9 -cputc::@9: scope:[cputc] from cputc::@4 - to:cputc::@return -cputc::@6: scope:[cputc] from cputc::@5 - CONIO_SCREEN_TEXT#74 = phi( cputc::@5/CONIO_SCREEN_TEXT#78 ) - call cputln - to:cputc::@10 -cputc::@10: scope:[cputc] from cputc::@6 - to:cputc::@return -cputc::@return: scope:[cputc] from cputc::@10 cputc::@3 cputc::@5 cputc::@8 cputc::@9 - return - to:@return - -void cputln() -cputln: scope:[cputln] from cputc::@1 cputc::@4 cputc::@6 - CONIO_SCREEN_TEXT#67 = phi( cputc::@1/CONIO_SCREEN_TEXT#72, cputc::@4/CONIO_SCREEN_TEXT#73, cputc::@6/CONIO_SCREEN_TEXT#74 ) - cputln::$2 = conio_screen_layer * SIZEOF_UNSIGNED_INT - cputln::temp#0 = conio_line_text[cputln::$2] - cputln::temp#1 = cputln::temp#0 + conio_rowskip - cputln::$3 = conio_screen_layer * SIZEOF_UNSIGNED_INT - conio_line_text[cputln::$3] = cputln::temp#1 - conio_cursor_x[conio_screen_layer] = 0 - conio_cursor_y[conio_screen_layer] = ++ conio_cursor_y[conio_screen_layer] - call cscroll - to:cputln::@1 -cputln::@1: scope:[cputln] from cputln - to:cputln::@return -cputln::@return: scope:[cputln] from cputln::@1 - return - to:@return - -char kbhit() -kbhit: scope:[kbhit] from main::@14 main::@9 - kbhit::ch = 0 - kickasm( uses kbhit::chptr uses kbhit::IN_DEV uses kbhit::GETIN) {{ jsr _kbhit - bne L3 - - jmp continue1 - - .var via1 = $9f60 //VIA#1 - .var d1pra = via1+1 - - _kbhit: - ldy d1pra // The count of keys pressed is stored in RAM bank 0. - stz d1pra // Set d1pra to zero to access RAM bank 0. - lda $A00A // Get number of characters from this address in the ROM of the CX16 (ROM 38). - sty d1pra // Set d1pra to previous value. - rts - - L3: - ldy IN_DEV // Save current input device - stz IN_DEV // Keyboard - phy - jsr GETIN // Read char, and return in .A - ply - sta chptr // Store the character read in ch - sty IN_DEV // Restore input device - ldx #>$0000 - rts - - continue1: - nop - }} - kbhit::return#0 = kbhit::ch - to:kbhit::@return -kbhit::@return: scope:[kbhit] from kbhit - kbhit::return#4 = phi( kbhit/kbhit::return#0 ) - kbhit::return#1 = kbhit::return#4 - return - to:@return - -void vera_layer_set_config(char layer , char config) -vera_layer_set_config: scope:[vera_layer_set_config] from vera_layer_mode_tile::@24 - vera_layer_set_config::config#1 = phi( vera_layer_mode_tile::@24/vera_layer_set_config::config#0 ) - vera_layer_set_config::layer#1 = phi( vera_layer_mode_tile::@24/vera_layer_set_config::layer#0 ) - vera_layer_set_config::$0 = vera_layer_set_config::layer#1 * SIZEOF_POINTER - vera_layer_set_config::addr#0 = vera_layer_config[vera_layer_set_config::$0] - *vera_layer_set_config::addr#0 = vera_layer_set_config::config#1 - to:vera_layer_set_config::@return -vera_layer_set_config::@return: scope:[vera_layer_set_config] from vera_layer_set_config - return - to:@return - -void vera_layer_set_text_color_mode(char layer , char color_mode) -vera_layer_set_text_color_mode: scope:[vera_layer_set_text_color_mode] from vera_layer_mode_text::@2 vera_layer_mode_text::@3 - vera_layer_set_text_color_mode::color_mode#2 = phi( vera_layer_mode_text::@2/vera_layer_set_text_color_mode::color_mode#0, vera_layer_mode_text::@3/vera_layer_set_text_color_mode::color_mode#1 ) - vera_layer_set_text_color_mode::layer#2 = phi( vera_layer_mode_text::@2/vera_layer_set_text_color_mode::layer#0, vera_layer_mode_text::@3/vera_layer_set_text_color_mode::layer#1 ) - vera_layer_set_text_color_mode::$0 = vera_layer_set_text_color_mode::layer#2 * SIZEOF_POINTER - vera_layer_set_text_color_mode::addr#0 = vera_layer_config[vera_layer_set_text_color_mode::$0] - *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 & ~VERA_LAYER_CONFIG_256C - *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 | vera_layer_set_text_color_mode::color_mode#2 - to:vera_layer_set_text_color_mode::@return -vera_layer_set_text_color_mode::@return: scope:[vera_layer_set_text_color_mode] from vera_layer_set_text_color_mode - return - to:@return - -void vera_layer_set_mapbase(char layer , char mapbase) -vera_layer_set_mapbase: scope:[vera_layer_set_mapbase] from conio_x16_init::@7 conio_x16_init::@8 vera_layer_mode_tile::@33 - vera_layer_set_mapbase::mapbase#3 = phi( conio_x16_init::@7/vera_layer_set_mapbase::mapbase#1, conio_x16_init::@8/vera_layer_set_mapbase::mapbase#2, vera_layer_mode_tile::@33/vera_layer_set_mapbase::mapbase#0 ) - vera_layer_set_mapbase::layer#3 = phi( conio_x16_init::@7/vera_layer_set_mapbase::layer#1, conio_x16_init::@8/vera_layer_set_mapbase::layer#2, vera_layer_mode_tile::@33/vera_layer_set_mapbase::layer#0 ) - vera_layer_set_mapbase::$0 = vera_layer_set_mapbase::layer#3 * SIZEOF_POINTER - vera_layer_set_mapbase::addr#0 = vera_layer_mapbase[vera_layer_set_mapbase::$0] - *vera_layer_set_mapbase::addr#0 = vera_layer_set_mapbase::mapbase#3 - to:vera_layer_set_mapbase::@return -vera_layer_set_mapbase::@return: scope:[vera_layer_set_mapbase] from vera_layer_set_mapbase - return - to:@return - -char vera_layer_get_mapbase_bank(char layer) -vera_layer_get_mapbase_bank: scope:[vera_layer_get_mapbase_bank] from screenlayer - vera_layer_get_mapbase_bank::layer#1 = phi( screenlayer/vera_layer_get_mapbase_bank::layer#0 ) - vera_layer_get_mapbase_bank::return#0 = vera_mapbase_bank[vera_layer_get_mapbase_bank::layer#1] - to:vera_layer_get_mapbase_bank::@return -vera_layer_get_mapbase_bank::@return: scope:[vera_layer_get_mapbase_bank] from vera_layer_get_mapbase_bank - vera_layer_get_mapbase_bank::return#3 = phi( vera_layer_get_mapbase_bank/vera_layer_get_mapbase_bank::return#0 ) - vera_layer_get_mapbase_bank::return#1 = vera_layer_get_mapbase_bank::return#3 - return - to:@return - -unsigned int vera_layer_get_mapbase_offset(char layer) -vera_layer_get_mapbase_offset: scope:[vera_layer_get_mapbase_offset] from screenlayer::@3 - vera_layer_get_mapbase_offset::layer#1 = phi( screenlayer::@3/vera_layer_get_mapbase_offset::layer#0 ) - vera_layer_get_mapbase_offset::$0 = vera_layer_get_mapbase_offset::layer#1 * SIZEOF_UNSIGNED_INT - vera_layer_get_mapbase_offset::return#0 = vera_mapbase_offset[vera_layer_get_mapbase_offset::$0] - to:vera_layer_get_mapbase_offset::@return -vera_layer_get_mapbase_offset::@return: scope:[vera_layer_get_mapbase_offset] from vera_layer_get_mapbase_offset - vera_layer_get_mapbase_offset::return#3 = phi( vera_layer_get_mapbase_offset/vera_layer_get_mapbase_offset::return#0 ) - vera_layer_get_mapbase_offset::return#1 = vera_layer_get_mapbase_offset::return#3 - return - to:@return - -void vera_layer_set_tilebase(char layer , char tilebase) -vera_layer_set_tilebase: scope:[vera_layer_set_tilebase] from vera_layer_mode_tile::@32 - vera_layer_set_tilebase::tilebase#1 = phi( vera_layer_mode_tile::@32/vera_layer_set_tilebase::tilebase#0 ) - vera_layer_set_tilebase::layer#1 = phi( vera_layer_mode_tile::@32/vera_layer_set_tilebase::layer#0 ) - vera_layer_set_tilebase::$0 = vera_layer_set_tilebase::layer#1 * SIZEOF_POINTER - vera_layer_set_tilebase::addr#0 = vera_layer_tilebase[vera_layer_set_tilebase::$0] - *vera_layer_set_tilebase::addr#0 = vera_layer_set_tilebase::tilebase#1 - to:vera_layer_set_tilebase::@return -vera_layer_set_tilebase::@return: scope:[vera_layer_set_tilebase] from vera_layer_set_tilebase - return - to:@return - -char vera_layer_set_textcolor(char layer , char color) -vera_layer_set_textcolor: scope:[vera_layer_set_textcolor] from conio_x16_init::@5 main::textcolor1 main::textcolor2 - vera_layer_set_textcolor::color#3 = phi( conio_x16_init::@5/vera_layer_set_textcolor::color#0, main::textcolor1/vera_layer_set_textcolor::color#1, main::textcolor2/vera_layer_set_textcolor::color#2 ) - vera_layer_set_textcolor::layer#3 = phi( conio_x16_init::@5/vera_layer_set_textcolor::layer#0, main::textcolor1/vera_layer_set_textcolor::layer#1, main::textcolor2/vera_layer_set_textcolor::layer#2 ) - vera_layer_set_textcolor::old#0 = vera_layer_textcolor[vera_layer_set_textcolor::layer#3] - vera_layer_textcolor[vera_layer_set_textcolor::layer#3] = vera_layer_set_textcolor::color#3 - vera_layer_set_textcolor::return#0 = vera_layer_set_textcolor::old#0 - to:vera_layer_set_textcolor::@return -vera_layer_set_textcolor::@return: scope:[vera_layer_set_textcolor] from vera_layer_set_textcolor - vera_layer_set_textcolor::return#5 = phi( vera_layer_set_textcolor/vera_layer_set_textcolor::return#0 ) - vera_layer_set_textcolor::return#1 = vera_layer_set_textcolor::return#5 - return - to:@return - -char vera_layer_get_textcolor(char layer) -vera_layer_get_textcolor: scope:[vera_layer_get_textcolor] from clrscr::@7 - vera_layer_get_textcolor::layer#1 = phi( clrscr::@7/vera_layer_get_textcolor::layer#0 ) - vera_layer_get_textcolor::return#1 = vera_layer_textcolor[vera_layer_get_textcolor::layer#1] - to:vera_layer_get_textcolor::@return -vera_layer_get_textcolor::@return: scope:[vera_layer_get_textcolor] from vera_layer_get_textcolor - vera_layer_get_textcolor::return#4 = phi( vera_layer_get_textcolor/vera_layer_get_textcolor::return#1 ) - vera_layer_get_textcolor::return#2 = vera_layer_get_textcolor::return#4 - return - to:@return - -char vera_layer_set_backcolor(char layer , char color) -vera_layer_set_backcolor: scope:[vera_layer_set_backcolor] from conio_x16_init::@6 main::bgcolor1 main::bgcolor2 - vera_layer_set_backcolor::color#3 = phi( conio_x16_init::@6/vera_layer_set_backcolor::color#0, main::bgcolor1/vera_layer_set_backcolor::color#1, main::bgcolor2/vera_layer_set_backcolor::color#2 ) - vera_layer_set_backcolor::layer#3 = phi( conio_x16_init::@6/vera_layer_set_backcolor::layer#0, main::bgcolor1/vera_layer_set_backcolor::layer#1, main::bgcolor2/vera_layer_set_backcolor::layer#2 ) - vera_layer_set_backcolor::old#0 = vera_layer_backcolor[vera_layer_set_backcolor::layer#3] - vera_layer_backcolor[vera_layer_set_backcolor::layer#3] = vera_layer_set_backcolor::color#3 - vera_layer_set_backcolor::return#0 = vera_layer_set_backcolor::old#0 - to:vera_layer_set_backcolor::@return -vera_layer_set_backcolor::@return: scope:[vera_layer_set_backcolor] from vera_layer_set_backcolor - vera_layer_set_backcolor::return#5 = phi( vera_layer_set_backcolor/vera_layer_set_backcolor::return#0 ) - vera_layer_set_backcolor::return#1 = vera_layer_set_backcolor::return#5 - return - to:@return - -char vera_layer_get_backcolor(char layer) -vera_layer_get_backcolor: scope:[vera_layer_get_backcolor] from clrscr - vera_layer_get_backcolor::layer#1 = phi( clrscr/vera_layer_get_backcolor::layer#0 ) - vera_layer_get_backcolor::return#1 = vera_layer_backcolor[vera_layer_get_backcolor::layer#1] - to:vera_layer_get_backcolor::@return -vera_layer_get_backcolor::@return: scope:[vera_layer_get_backcolor] from vera_layer_get_backcolor - vera_layer_get_backcolor::return#4 = phi( vera_layer_get_backcolor/vera_layer_get_backcolor::return#1 ) - vera_layer_get_backcolor::return#2 = vera_layer_get_backcolor::return#4 - return - to:@return - -char vera_layer_get_color(char layer) -vera_layer_get_color: scope:[vera_layer_get_color] from clearline cputc - vera_layer_get_color::layer#2 = phi( clearline/vera_layer_get_color::layer#1, cputc/vera_layer_get_color::layer#0 ) - vera_layer_get_color::$3 = vera_layer_get_color::layer#2 * SIZEOF_POINTER - vera_layer_get_color::addr#0 = vera_layer_config[vera_layer_get_color::$3] - vera_layer_get_color::$0 = *vera_layer_get_color::addr#0 & VERA_LAYER_CONFIG_256C - vera_layer_get_color::$4 = 0 != vera_layer_get_color::$0 - if(vera_layer_get_color::$4) goto vera_layer_get_color::@1 - to:vera_layer_get_color::@2 -vera_layer_get_color::@1: scope:[vera_layer_get_color] from vera_layer_get_color - vera_layer_get_color::layer#3 = phi( vera_layer_get_color/vera_layer_get_color::layer#2 ) - vera_layer_get_color::return#1 = vera_layer_textcolor[vera_layer_get_color::layer#3] - to:vera_layer_get_color::@return -vera_layer_get_color::@2: scope:[vera_layer_get_color] from vera_layer_get_color - vera_layer_get_color::layer#4 = phi( vera_layer_get_color/vera_layer_get_color::layer#2 ) - vera_layer_get_color::$1 = vera_layer_backcolor[vera_layer_get_color::layer#4] << 4 - vera_layer_get_color::$2 = vera_layer_get_color::$1 | vera_layer_textcolor[vera_layer_get_color::layer#4] - vera_layer_get_color::return#2 = vera_layer_get_color::$2 - to:vera_layer_get_color::@return -vera_layer_get_color::@return: scope:[vera_layer_get_color] from vera_layer_get_color::@1 vera_layer_get_color::@2 - vera_layer_get_color::return#6 = phi( vera_layer_get_color::@1/vera_layer_get_color::return#1, vera_layer_get_color::@2/vera_layer_get_color::return#2 ) - vera_layer_get_color::return#3 = vera_layer_get_color::return#6 - return - to:@return - -char vera_layer_get_rowshift(char layer) -vera_layer_get_rowshift: scope:[vera_layer_get_rowshift] from screenlayer::@1 - vera_layer_get_rowshift::layer#1 = phi( screenlayer::@1/vera_layer_get_rowshift::layer#0 ) - vera_layer_get_rowshift::return#0 = vera_layer_rowshift[vera_layer_get_rowshift::layer#1] - to:vera_layer_get_rowshift::@return -vera_layer_get_rowshift::@return: scope:[vera_layer_get_rowshift] from vera_layer_get_rowshift - vera_layer_get_rowshift::return#3 = phi( vera_layer_get_rowshift/vera_layer_get_rowshift::return#0 ) - vera_layer_get_rowshift::return#1 = vera_layer_get_rowshift::return#3 - return - to:@return - -unsigned int vera_layer_get_rowskip(char layer) -vera_layer_get_rowskip: scope:[vera_layer_get_rowskip] from screenlayer::@5 - vera_layer_get_rowskip::layer#1 = phi( screenlayer::@5/vera_layer_get_rowskip::layer#0 ) - vera_layer_get_rowskip::$0 = vera_layer_get_rowskip::layer#1 * SIZEOF_UNSIGNED_INT - vera_layer_get_rowskip::return#0 = vera_layer_rowskip[vera_layer_get_rowskip::$0] - to:vera_layer_get_rowskip::@return -vera_layer_get_rowskip::@return: scope:[vera_layer_get_rowskip] from vera_layer_get_rowskip - vera_layer_get_rowskip::return#3 = phi( vera_layer_get_rowskip/vera_layer_get_rowskip::return#0 ) - vera_layer_get_rowskip::return#1 = vera_layer_get_rowskip::return#3 - return - to:@return - -void vera_layer_mode_tile(char layer , unsigned long mapbase_address , unsigned long tilebase_address , unsigned int mapwidth , unsigned int mapheight , char tilewidth , char tileheight , char color_depth) -vera_layer_mode_tile: scope:[vera_layer_mode_tile] from main::@21 main::@26 main::@46 main::@47 vera_layer_mode_text - vera_layer_mode_tile::tileheight#34 = phi( main::@21/vera_layer_mode_tile::tileheight#1, main::@26/vera_layer_mode_tile::tileheight#2, main::@46/vera_layer_mode_tile::tileheight#3, main::@47/vera_layer_mode_tile::tileheight#4, vera_layer_mode_text/vera_layer_mode_tile::tileheight#0 ) - vera_layer_mode_tile::tilewidth#30 = phi( main::@21/vera_layer_mode_tile::tilewidth#1, main::@26/vera_layer_mode_tile::tilewidth#2, main::@46/vera_layer_mode_tile::tilewidth#3, main::@47/vera_layer_mode_tile::tilewidth#4, vera_layer_mode_text/vera_layer_mode_tile::tilewidth#0 ) - vera_layer_mode_tile::tilebase_address#30 = phi( main::@21/vera_layer_mode_tile::tilebase_address#2, main::@26/vera_layer_mode_tile::tilebase_address#3, main::@46/vera_layer_mode_tile::tilebase_address#4, main::@47/vera_layer_mode_tile::tilebase_address#5, vera_layer_mode_text/vera_layer_mode_tile::tilebase_address#1 ) - vera_layer_mode_tile::mapbase_address#29 = phi( main::@21/vera_layer_mode_tile::mapbase_address#2, main::@26/vera_layer_mode_tile::mapbase_address#3, main::@46/vera_layer_mode_tile::mapbase_address#4, main::@47/vera_layer_mode_tile::mapbase_address#5, vera_layer_mode_text/vera_layer_mode_tile::mapbase_address#1 ) - vera_layer_mode_tile::mapheight#22 = phi( main::@21/vera_layer_mode_tile::mapheight#1, main::@26/vera_layer_mode_tile::mapheight#2, main::@46/vera_layer_mode_tile::mapheight#3, main::@47/vera_layer_mode_tile::mapheight#4, vera_layer_mode_text/vera_layer_mode_tile::mapheight#0 ) - vera_layer_mode_tile::layer#34 = phi( main::@21/vera_layer_mode_tile::layer#1, main::@26/vera_layer_mode_tile::layer#2, main::@46/vera_layer_mode_tile::layer#3, main::@47/vera_layer_mode_tile::layer#4, vera_layer_mode_text/vera_layer_mode_tile::layer#0 ) - vera_layer_mode_tile::mapwidth#14 = phi( main::@21/vera_layer_mode_tile::mapwidth#1, main::@26/vera_layer_mode_tile::mapwidth#2, main::@46/vera_layer_mode_tile::mapwidth#3, main::@47/vera_layer_mode_tile::mapwidth#4, vera_layer_mode_text/vera_layer_mode_tile::mapwidth#0 ) - vera_layer_mode_tile::color_depth#5 = phi( main::@21/vera_layer_mode_tile::color_depth#1, main::@26/vera_layer_mode_tile::color_depth#2, main::@46/vera_layer_mode_tile::color_depth#3, main::@47/vera_layer_mode_tile::color_depth#4, vera_layer_mode_text/vera_layer_mode_tile::color_depth#0 ) - vera_layer_mode_tile::config#0 = 0 - if(vera_layer_mode_tile::color_depth#5==1) goto vera_layer_mode_tile::@4 - to:vera_layer_mode_tile::@1 -vera_layer_mode_tile::@4: scope:[vera_layer_mode_tile] from vera_layer_mode_tile - vera_layer_mode_tile::tileheight#30 = phi( vera_layer_mode_tile/vera_layer_mode_tile::tileheight#34 ) - vera_layer_mode_tile::tilewidth#26 = phi( vera_layer_mode_tile/vera_layer_mode_tile::tilewidth#30 ) - vera_layer_mode_tile::tilebase_address#26 = phi( vera_layer_mode_tile/vera_layer_mode_tile::tilebase_address#30 ) - vera_layer_mode_tile::mapbase_address#25 = phi( vera_layer_mode_tile/vera_layer_mode_tile::mapbase_address#29 ) - vera_layer_mode_tile::mapheight#18 = phi( vera_layer_mode_tile/vera_layer_mode_tile::mapheight#22 ) - vera_layer_mode_tile::layer#26 = phi( vera_layer_mode_tile/vera_layer_mode_tile::layer#34 ) - vera_layer_mode_tile::mapwidth#10 = phi( vera_layer_mode_tile/vera_layer_mode_tile::mapwidth#14 ) - vera_layer_mode_tile::config#13 = phi( vera_layer_mode_tile/vera_layer_mode_tile::config#0 ) - vera_layer_mode_tile::config#1 = vera_layer_mode_tile::config#13 | VERA_LAYER_COLOR_DEPTH_1BPP - to:vera_layer_mode_tile::@8 -vera_layer_mode_tile::@1: scope:[vera_layer_mode_tile] from vera_layer_mode_tile - vera_layer_mode_tile::tileheight#35 = phi( vera_layer_mode_tile/vera_layer_mode_tile::tileheight#34 ) - vera_layer_mode_tile::tilewidth#31 = phi( vera_layer_mode_tile/vera_layer_mode_tile::tilewidth#30 ) - vera_layer_mode_tile::tilebase_address#31 = phi( vera_layer_mode_tile/vera_layer_mode_tile::tilebase_address#30 ) - vera_layer_mode_tile::mapbase_address#30 = phi( vera_layer_mode_tile/vera_layer_mode_tile::mapbase_address#29 ) - vera_layer_mode_tile::mapheight#23 = phi( vera_layer_mode_tile/vera_layer_mode_tile::mapheight#22 ) - vera_layer_mode_tile::layer#35 = phi( vera_layer_mode_tile/vera_layer_mode_tile::layer#34 ) - vera_layer_mode_tile::mapwidth#15 = phi( vera_layer_mode_tile/vera_layer_mode_tile::mapwidth#14 ) - vera_layer_mode_tile::config#26 = phi( vera_layer_mode_tile/vera_layer_mode_tile::config#0 ) - vera_layer_mode_tile::color_depth#6 = phi( vera_layer_mode_tile/vera_layer_mode_tile::color_depth#5 ) - if(vera_layer_mode_tile::color_depth#6==2) goto vera_layer_mode_tile::@5 - to:vera_layer_mode_tile::@2 -vera_layer_mode_tile::@5: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@1 - vera_layer_mode_tile::tileheight#31 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::tileheight#35 ) - vera_layer_mode_tile::tilewidth#27 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::tilewidth#31 ) - vera_layer_mode_tile::tilebase_address#27 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::tilebase_address#31 ) - vera_layer_mode_tile::mapbase_address#26 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::mapbase_address#30 ) - vera_layer_mode_tile::mapheight#19 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::mapheight#23 ) - vera_layer_mode_tile::layer#27 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::layer#35 ) - vera_layer_mode_tile::mapwidth#11 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::mapwidth#15 ) - vera_layer_mode_tile::config#14 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::config#26 ) - vera_layer_mode_tile::config#2 = vera_layer_mode_tile::config#14 | VERA_LAYER_COLOR_DEPTH_2BPP - to:vera_layer_mode_tile::@8 -vera_layer_mode_tile::@2: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@1 - vera_layer_mode_tile::tileheight#36 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::tileheight#35 ) - vera_layer_mode_tile::tilewidth#32 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::tilewidth#31 ) - vera_layer_mode_tile::tilebase_address#32 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::tilebase_address#31 ) - vera_layer_mode_tile::mapbase_address#31 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::mapbase_address#30 ) - vera_layer_mode_tile::mapheight#24 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::mapheight#23 ) - vera_layer_mode_tile::layer#36 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::layer#35 ) - vera_layer_mode_tile::mapwidth#16 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::mapwidth#15 ) - vera_layer_mode_tile::config#27 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::config#26 ) - vera_layer_mode_tile::color_depth#7 = phi( vera_layer_mode_tile::@1/vera_layer_mode_tile::color_depth#6 ) - if(vera_layer_mode_tile::color_depth#7==4) goto vera_layer_mode_tile::@6 - to:vera_layer_mode_tile::@3 -vera_layer_mode_tile::@6: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@2 - vera_layer_mode_tile::tileheight#32 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::tileheight#36 ) - vera_layer_mode_tile::tilewidth#28 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::tilewidth#32 ) - vera_layer_mode_tile::tilebase_address#28 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::tilebase_address#32 ) - vera_layer_mode_tile::mapbase_address#27 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::mapbase_address#31 ) - vera_layer_mode_tile::mapheight#20 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::mapheight#24 ) - vera_layer_mode_tile::layer#28 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::layer#36 ) - vera_layer_mode_tile::mapwidth#12 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::mapwidth#16 ) - vera_layer_mode_tile::config#15 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::config#27 ) - vera_layer_mode_tile::config#3 = vera_layer_mode_tile::config#15 | VERA_LAYER_COLOR_DEPTH_4BPP - to:vera_layer_mode_tile::@8 -vera_layer_mode_tile::@3: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@2 - vera_layer_mode_tile::tileheight#29 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::tileheight#36 ) - vera_layer_mode_tile::tilewidth#25 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::tilewidth#32 ) - vera_layer_mode_tile::tilebase_address#25 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::tilebase_address#32 ) - vera_layer_mode_tile::mapbase_address#24 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::mapbase_address#31 ) - vera_layer_mode_tile::mapheight#17 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::mapheight#24 ) - vera_layer_mode_tile::layer#25 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::layer#36 ) - vera_layer_mode_tile::mapwidth#9 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::mapwidth#16 ) - vera_layer_mode_tile::config#28 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::config#27 ) - vera_layer_mode_tile::color_depth#8 = phi( vera_layer_mode_tile::@2/vera_layer_mode_tile::color_depth#7 ) - if(vera_layer_mode_tile::color_depth#8==8) goto vera_layer_mode_tile::@7 - to:vera_layer_mode_tile::@8 -vera_layer_mode_tile::@7: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@3 - vera_layer_mode_tile::tileheight#33 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::tileheight#29 ) - vera_layer_mode_tile::tilewidth#29 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::tilewidth#25 ) - vera_layer_mode_tile::tilebase_address#29 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::tilebase_address#25 ) - vera_layer_mode_tile::mapbase_address#28 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::mapbase_address#24 ) - vera_layer_mode_tile::mapheight#21 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::mapheight#17 ) - vera_layer_mode_tile::layer#29 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::layer#25 ) - vera_layer_mode_tile::mapwidth#13 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::mapwidth#9 ) - vera_layer_mode_tile::config#16 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::config#28 ) - vera_layer_mode_tile::config#4 = vera_layer_mode_tile::config#16 | VERA_LAYER_COLOR_DEPTH_8BPP - to:vera_layer_mode_tile::@8 -vera_layer_mode_tile::@8: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@3 vera_layer_mode_tile::@4 vera_layer_mode_tile::@5 vera_layer_mode_tile::@6 vera_layer_mode_tile::@7 - vera_layer_mode_tile::tileheight#26 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::tileheight#29, vera_layer_mode_tile::@4/vera_layer_mode_tile::tileheight#30, vera_layer_mode_tile::@5/vera_layer_mode_tile::tileheight#31, vera_layer_mode_tile::@6/vera_layer_mode_tile::tileheight#32, vera_layer_mode_tile::@7/vera_layer_mode_tile::tileheight#33 ) - vera_layer_mode_tile::tilewidth#22 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::tilewidth#25, vera_layer_mode_tile::@4/vera_layer_mode_tile::tilewidth#26, vera_layer_mode_tile::@5/vera_layer_mode_tile::tilewidth#27, vera_layer_mode_tile::@6/vera_layer_mode_tile::tilewidth#28, vera_layer_mode_tile::@7/vera_layer_mode_tile::tilewidth#29 ) - vera_layer_mode_tile::tilebase_address#22 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::tilebase_address#25, vera_layer_mode_tile::@4/vera_layer_mode_tile::tilebase_address#26, vera_layer_mode_tile::@5/vera_layer_mode_tile::tilebase_address#27, vera_layer_mode_tile::@6/vera_layer_mode_tile::tilebase_address#28, vera_layer_mode_tile::@7/vera_layer_mode_tile::tilebase_address#29 ) - vera_layer_mode_tile::mapbase_address#21 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::mapbase_address#24, vera_layer_mode_tile::@4/vera_layer_mode_tile::mapbase_address#25, vera_layer_mode_tile::@5/vera_layer_mode_tile::mapbase_address#26, vera_layer_mode_tile::@6/vera_layer_mode_tile::mapbase_address#27, vera_layer_mode_tile::@7/vera_layer_mode_tile::mapbase_address#28 ) - vera_layer_mode_tile::mapheight#14 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::mapheight#17, vera_layer_mode_tile::@4/vera_layer_mode_tile::mapheight#18, vera_layer_mode_tile::@5/vera_layer_mode_tile::mapheight#19, vera_layer_mode_tile::@6/vera_layer_mode_tile::mapheight#20, vera_layer_mode_tile::@7/vera_layer_mode_tile::mapheight#21 ) - vera_layer_mode_tile::layer#13 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::layer#25, vera_layer_mode_tile::@4/vera_layer_mode_tile::layer#26, vera_layer_mode_tile::@5/vera_layer_mode_tile::layer#27, vera_layer_mode_tile::@6/vera_layer_mode_tile::layer#28, vera_layer_mode_tile::@7/vera_layer_mode_tile::layer#29 ) - vera_layer_mode_tile::config#29 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::config#28, vera_layer_mode_tile::@4/vera_layer_mode_tile::config#1, vera_layer_mode_tile::@5/vera_layer_mode_tile::config#2, vera_layer_mode_tile::@6/vera_layer_mode_tile::config#3, vera_layer_mode_tile::@7/vera_layer_mode_tile::config#4 ) - vera_layer_mode_tile::mapwidth#5 = phi( vera_layer_mode_tile::@3/vera_layer_mode_tile::mapwidth#9, vera_layer_mode_tile::@4/vera_layer_mode_tile::mapwidth#10, vera_layer_mode_tile::@5/vera_layer_mode_tile::mapwidth#11, vera_layer_mode_tile::@6/vera_layer_mode_tile::mapwidth#12, vera_layer_mode_tile::@7/vera_layer_mode_tile::mapwidth#13 ) - if(vera_layer_mode_tile::mapwidth#5==$20) goto vera_layer_mode_tile::@12 - to:vera_layer_mode_tile::@9 -vera_layer_mode_tile::@12: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@8 - vera_layer_mode_tile::tileheight#22 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::tileheight#26 ) - vera_layer_mode_tile::tilewidth#18 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::tilewidth#22 ) - vera_layer_mode_tile::tilebase_address#18 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::tilebase_address#22 ) - vera_layer_mode_tile::mapbase_address#17 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::mapbase_address#21 ) - vera_layer_mode_tile::mapheight#10 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::mapheight#14 ) - vera_layer_mode_tile::layer#5 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::layer#13 ) - vera_layer_mode_tile::config#17 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::config#29 ) - vera_layer_mode_tile::config#5 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_32 - vera_layer_rowshift[vera_layer_mode_tile::layer#5] = 6 - vera_layer_mode_tile::$11 = vera_layer_mode_tile::layer#5 * SIZEOF_UNSIGNED_INT - vera_layer_rowskip[vera_layer_mode_tile::$11] = $40 - to:vera_layer_mode_tile::@16 -vera_layer_mode_tile::@9: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@8 - vera_layer_mode_tile::tileheight#27 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::tileheight#26 ) - vera_layer_mode_tile::tilewidth#23 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::tilewidth#22 ) - vera_layer_mode_tile::tilebase_address#23 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::tilebase_address#22 ) - vera_layer_mode_tile::mapbase_address#22 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::mapbase_address#21 ) - vera_layer_mode_tile::mapheight#15 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::mapheight#14 ) - vera_layer_mode_tile::layer#14 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::layer#13 ) - vera_layer_mode_tile::config#30 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::config#29 ) - vera_layer_mode_tile::mapwidth#6 = phi( vera_layer_mode_tile::@8/vera_layer_mode_tile::mapwidth#5 ) - if(vera_layer_mode_tile::mapwidth#6==$40) goto vera_layer_mode_tile::@13 - to:vera_layer_mode_tile::@10 -vera_layer_mode_tile::@13: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@9 - vera_layer_mode_tile::tileheight#23 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::tileheight#27 ) - vera_layer_mode_tile::tilewidth#19 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::tilewidth#23 ) - vera_layer_mode_tile::tilebase_address#19 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::tilebase_address#23 ) - vera_layer_mode_tile::mapbase_address#18 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::mapbase_address#22 ) - vera_layer_mode_tile::mapheight#11 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::mapheight#15 ) - vera_layer_mode_tile::layer#6 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::layer#14 ) - vera_layer_mode_tile::config#18 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::config#30 ) - vera_layer_mode_tile::config#6 = vera_layer_mode_tile::config#18 | VERA_LAYER_WIDTH_64 - vera_layer_rowshift[vera_layer_mode_tile::layer#6] = 7 - vera_layer_mode_tile::$12 = vera_layer_mode_tile::layer#6 * SIZEOF_UNSIGNED_INT - vera_layer_rowskip[vera_layer_mode_tile::$12] = $80 - to:vera_layer_mode_tile::@16 -vera_layer_mode_tile::@10: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@9 - vera_layer_mode_tile::tileheight#28 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::tileheight#27 ) - vera_layer_mode_tile::tilewidth#24 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::tilewidth#23 ) - vera_layer_mode_tile::tilebase_address#24 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::tilebase_address#23 ) - vera_layer_mode_tile::mapbase_address#23 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::mapbase_address#22 ) - vera_layer_mode_tile::mapheight#16 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::mapheight#15 ) - vera_layer_mode_tile::layer#15 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::layer#14 ) - vera_layer_mode_tile::config#31 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::config#30 ) - vera_layer_mode_tile::mapwidth#7 = phi( vera_layer_mode_tile::@9/vera_layer_mode_tile::mapwidth#6 ) - if(vera_layer_mode_tile::mapwidth#7==$80) goto vera_layer_mode_tile::@14 - to:vera_layer_mode_tile::@11 -vera_layer_mode_tile::@14: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@10 - vera_layer_mode_tile::tileheight#24 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::tileheight#28 ) - vera_layer_mode_tile::tilewidth#20 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::tilewidth#24 ) - vera_layer_mode_tile::tilebase_address#20 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::tilebase_address#24 ) - vera_layer_mode_tile::mapbase_address#19 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::mapbase_address#23 ) - vera_layer_mode_tile::mapheight#12 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::mapheight#16 ) - vera_layer_mode_tile::layer#7 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::layer#15 ) - vera_layer_mode_tile::config#19 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::config#31 ) - vera_layer_mode_tile::config#7 = vera_layer_mode_tile::config#19 | VERA_LAYER_WIDTH_128 - vera_layer_rowshift[vera_layer_mode_tile::layer#7] = 8 - vera_layer_mode_tile::$13 = vera_layer_mode_tile::layer#7 * SIZEOF_UNSIGNED_INT - vera_layer_rowskip[vera_layer_mode_tile::$13] = $100 - to:vera_layer_mode_tile::@16 -vera_layer_mode_tile::@11: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@10 - vera_layer_mode_tile::tileheight#21 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::tileheight#28 ) - vera_layer_mode_tile::tilewidth#17 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::tilewidth#24 ) - vera_layer_mode_tile::tilebase_address#17 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::tilebase_address#24 ) - vera_layer_mode_tile::mapbase_address#16 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::mapbase_address#23 ) - vera_layer_mode_tile::mapheight#9 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::mapheight#16 ) - vera_layer_mode_tile::layer#16 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::layer#15 ) - vera_layer_mode_tile::config#32 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::config#31 ) - vera_layer_mode_tile::mapwidth#8 = phi( vera_layer_mode_tile::@10/vera_layer_mode_tile::mapwidth#7 ) - if(vera_layer_mode_tile::mapwidth#8==$100) goto vera_layer_mode_tile::@15 - to:vera_layer_mode_tile::@16 -vera_layer_mode_tile::@15: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@11 - vera_layer_mode_tile::tileheight#25 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::tileheight#21 ) - vera_layer_mode_tile::tilewidth#21 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::tilewidth#17 ) - vera_layer_mode_tile::tilebase_address#21 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::tilebase_address#17 ) - vera_layer_mode_tile::mapbase_address#20 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::mapbase_address#16 ) - vera_layer_mode_tile::mapheight#13 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::mapheight#9 ) - vera_layer_mode_tile::layer#8 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::layer#16 ) - vera_layer_mode_tile::config#20 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::config#32 ) - vera_layer_mode_tile::config#8 = vera_layer_mode_tile::config#20 | VERA_LAYER_WIDTH_256 - vera_layer_rowshift[vera_layer_mode_tile::layer#8] = 9 - vera_layer_mode_tile::$14 = vera_layer_mode_tile::layer#8 * SIZEOF_UNSIGNED_INT - vera_layer_rowskip[vera_layer_mode_tile::$14] = $200 - to:vera_layer_mode_tile::@16 -vera_layer_mode_tile::@16: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@11 vera_layer_mode_tile::@12 vera_layer_mode_tile::@13 vera_layer_mode_tile::@14 vera_layer_mode_tile::@15 - vera_layer_mode_tile::tileheight#18 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::tileheight#21, vera_layer_mode_tile::@12/vera_layer_mode_tile::tileheight#22, vera_layer_mode_tile::@13/vera_layer_mode_tile::tileheight#23, vera_layer_mode_tile::@14/vera_layer_mode_tile::tileheight#24, vera_layer_mode_tile::@15/vera_layer_mode_tile::tileheight#25 ) - vera_layer_mode_tile::tilewidth#14 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::tilewidth#17, vera_layer_mode_tile::@12/vera_layer_mode_tile::tilewidth#18, vera_layer_mode_tile::@13/vera_layer_mode_tile::tilewidth#19, vera_layer_mode_tile::@14/vera_layer_mode_tile::tilewidth#20, vera_layer_mode_tile::@15/vera_layer_mode_tile::tilewidth#21 ) - vera_layer_mode_tile::tilebase_address#14 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::tilebase_address#17, vera_layer_mode_tile::@12/vera_layer_mode_tile::tilebase_address#18, vera_layer_mode_tile::@13/vera_layer_mode_tile::tilebase_address#19, vera_layer_mode_tile::@14/vera_layer_mode_tile::tilebase_address#20, vera_layer_mode_tile::@15/vera_layer_mode_tile::tilebase_address#21 ) - vera_layer_mode_tile::mapbase_address#13 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::mapbase_address#16, vera_layer_mode_tile::@12/vera_layer_mode_tile::mapbase_address#17, vera_layer_mode_tile::@13/vera_layer_mode_tile::mapbase_address#18, vera_layer_mode_tile::@14/vera_layer_mode_tile::mapbase_address#19, vera_layer_mode_tile::@15/vera_layer_mode_tile::mapbase_address#20 ) - vera_layer_mode_tile::layer#30 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::layer#16, vera_layer_mode_tile::@12/vera_layer_mode_tile::layer#5, vera_layer_mode_tile::@13/vera_layer_mode_tile::layer#6, vera_layer_mode_tile::@14/vera_layer_mode_tile::layer#7, vera_layer_mode_tile::@15/vera_layer_mode_tile::layer#8 ) - vera_layer_mode_tile::config#33 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::config#32, vera_layer_mode_tile::@12/vera_layer_mode_tile::config#5, vera_layer_mode_tile::@13/vera_layer_mode_tile::config#6, vera_layer_mode_tile::@14/vera_layer_mode_tile::config#7, vera_layer_mode_tile::@15/vera_layer_mode_tile::config#8 ) - vera_layer_mode_tile::mapheight#5 = phi( vera_layer_mode_tile::@11/vera_layer_mode_tile::mapheight#9, vera_layer_mode_tile::@12/vera_layer_mode_tile::mapheight#10, vera_layer_mode_tile::@13/vera_layer_mode_tile::mapheight#11, vera_layer_mode_tile::@14/vera_layer_mode_tile::mapheight#12, vera_layer_mode_tile::@15/vera_layer_mode_tile::mapheight#13 ) - if(vera_layer_mode_tile::mapheight#5==$20) goto vera_layer_mode_tile::@20 - to:vera_layer_mode_tile::@17 -vera_layer_mode_tile::@20: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@16 - vera_layer_mode_tile::tileheight#14 = phi( vera_layer_mode_tile::@16/vera_layer_mode_tile::tileheight#18 ) - vera_layer_mode_tile::tilewidth#10 = phi( vera_layer_mode_tile::@16/vera_layer_mode_tile::tilewidth#14 ) - vera_layer_mode_tile::tilebase_address#10 = phi( vera_layer_mode_tile::@16/vera_layer_mode_tile::tilebase_address#14 ) - vera_layer_mode_tile::mapbase_address#9 = phi( vera_layer_mode_tile::@16/vera_layer_mode_tile::mapbase_address#13 ) - vera_layer_mode_tile::layer#18 = phi( vera_layer_mode_tile::@16/vera_layer_mode_tile::layer#30 ) - vera_layer_mode_tile::config#21 = phi( vera_layer_mode_tile::@16/vera_layer_mode_tile::config#33 ) - vera_layer_mode_tile::config#9 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_32 - to:vera_layer_mode_tile::@24 -vera_layer_mode_tile::@17: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@16 - vera_layer_mode_tile::tileheight#19 = phi( vera_layer_mode_tile::@16/vera_layer_mode_tile::tileheight#18 ) - vera_layer_mode_tile::tilewidth#15 = phi( vera_layer_mode_tile::@16/vera_layer_mode_tile::tilewidth#14 ) - vera_layer_mode_tile::tilebase_address#15 = phi( vera_layer_mode_tile::@16/vera_layer_mode_tile::tilebase_address#14 ) - vera_layer_mode_tile::mapbase_address#14 = phi( vera_layer_mode_tile::@16/vera_layer_mode_tile::mapbase_address#13 ) - vera_layer_mode_tile::layer#31 = phi( vera_layer_mode_tile::@16/vera_layer_mode_tile::layer#30 ) - vera_layer_mode_tile::config#34 = phi( vera_layer_mode_tile::@16/vera_layer_mode_tile::config#33 ) - vera_layer_mode_tile::mapheight#6 = phi( vera_layer_mode_tile::@16/vera_layer_mode_tile::mapheight#5 ) - if(vera_layer_mode_tile::mapheight#6==$40) goto vera_layer_mode_tile::@21 - to:vera_layer_mode_tile::@18 -vera_layer_mode_tile::@21: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@17 - vera_layer_mode_tile::tileheight#15 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::tileheight#19 ) - vera_layer_mode_tile::tilewidth#11 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::tilewidth#15 ) - vera_layer_mode_tile::tilebase_address#11 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::tilebase_address#15 ) - vera_layer_mode_tile::mapbase_address#10 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::mapbase_address#14 ) - vera_layer_mode_tile::layer#19 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::layer#31 ) - vera_layer_mode_tile::config#22 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::config#34 ) - vera_layer_mode_tile::config#10 = vera_layer_mode_tile::config#22 | VERA_LAYER_HEIGHT_64 - to:vera_layer_mode_tile::@24 -vera_layer_mode_tile::@18: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@17 - vera_layer_mode_tile::tileheight#20 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::tileheight#19 ) - vera_layer_mode_tile::tilewidth#16 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::tilewidth#15 ) - vera_layer_mode_tile::tilebase_address#16 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::tilebase_address#15 ) - vera_layer_mode_tile::mapbase_address#15 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::mapbase_address#14 ) - vera_layer_mode_tile::layer#32 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::layer#31 ) - vera_layer_mode_tile::config#35 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::config#34 ) - vera_layer_mode_tile::mapheight#7 = phi( vera_layer_mode_tile::@17/vera_layer_mode_tile::mapheight#6 ) - if(vera_layer_mode_tile::mapheight#7==$80) goto vera_layer_mode_tile::@22 - to:vera_layer_mode_tile::@19 -vera_layer_mode_tile::@22: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@18 - vera_layer_mode_tile::tileheight#16 = phi( vera_layer_mode_tile::@18/vera_layer_mode_tile::tileheight#20 ) - vera_layer_mode_tile::tilewidth#12 = phi( vera_layer_mode_tile::@18/vera_layer_mode_tile::tilewidth#16 ) - vera_layer_mode_tile::tilebase_address#12 = phi( vera_layer_mode_tile::@18/vera_layer_mode_tile::tilebase_address#16 ) - vera_layer_mode_tile::mapbase_address#11 = phi( vera_layer_mode_tile::@18/vera_layer_mode_tile::mapbase_address#15 ) - vera_layer_mode_tile::layer#20 = phi( vera_layer_mode_tile::@18/vera_layer_mode_tile::layer#32 ) - vera_layer_mode_tile::config#23 = phi( vera_layer_mode_tile::@18/vera_layer_mode_tile::config#35 ) - vera_layer_mode_tile::config#11 = vera_layer_mode_tile::config#23 | VERA_LAYER_HEIGHT_128 - to:vera_layer_mode_tile::@24 -vera_layer_mode_tile::@19: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@18 - vera_layer_mode_tile::tileheight#13 = phi( vera_layer_mode_tile::@18/vera_layer_mode_tile::tileheight#20 ) - vera_layer_mode_tile::tilewidth#9 = phi( vera_layer_mode_tile::@18/vera_layer_mode_tile::tilewidth#16 ) - vera_layer_mode_tile::tilebase_address#9 = phi( vera_layer_mode_tile::@18/vera_layer_mode_tile::tilebase_address#16 ) - vera_layer_mode_tile::mapbase_address#8 = phi( vera_layer_mode_tile::@18/vera_layer_mode_tile::mapbase_address#15 ) - vera_layer_mode_tile::layer#17 = phi( vera_layer_mode_tile::@18/vera_layer_mode_tile::layer#32 ) - vera_layer_mode_tile::config#36 = phi( vera_layer_mode_tile::@18/vera_layer_mode_tile::config#35 ) - vera_layer_mode_tile::mapheight#8 = phi( vera_layer_mode_tile::@18/vera_layer_mode_tile::mapheight#7 ) - if(vera_layer_mode_tile::mapheight#8==$100) goto vera_layer_mode_tile::@23 - to:vera_layer_mode_tile::@24 -vera_layer_mode_tile::@23: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@19 - vera_layer_mode_tile::tileheight#17 = phi( vera_layer_mode_tile::@19/vera_layer_mode_tile::tileheight#13 ) - vera_layer_mode_tile::tilewidth#13 = phi( vera_layer_mode_tile::@19/vera_layer_mode_tile::tilewidth#9 ) - vera_layer_mode_tile::tilebase_address#13 = phi( vera_layer_mode_tile::@19/vera_layer_mode_tile::tilebase_address#9 ) - vera_layer_mode_tile::mapbase_address#12 = phi( vera_layer_mode_tile::@19/vera_layer_mode_tile::mapbase_address#8 ) - vera_layer_mode_tile::layer#21 = phi( vera_layer_mode_tile::@19/vera_layer_mode_tile::layer#17 ) - vera_layer_mode_tile::config#24 = phi( vera_layer_mode_tile::@19/vera_layer_mode_tile::config#36 ) - vera_layer_mode_tile::config#12 = vera_layer_mode_tile::config#24 | VERA_LAYER_HEIGHT_256 - to:vera_layer_mode_tile::@24 -vera_layer_mode_tile::@24: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@19 vera_layer_mode_tile::@20 vera_layer_mode_tile::@21 vera_layer_mode_tile::@22 vera_layer_mode_tile::@23 - vera_layer_mode_tile::tileheight#12 = phi( vera_layer_mode_tile::@19/vera_layer_mode_tile::tileheight#13, vera_layer_mode_tile::@20/vera_layer_mode_tile::tileheight#14, vera_layer_mode_tile::@21/vera_layer_mode_tile::tileheight#15, vera_layer_mode_tile::@22/vera_layer_mode_tile::tileheight#16, vera_layer_mode_tile::@23/vera_layer_mode_tile::tileheight#17 ) - vera_layer_mode_tile::tilewidth#8 = phi( vera_layer_mode_tile::@19/vera_layer_mode_tile::tilewidth#9, vera_layer_mode_tile::@20/vera_layer_mode_tile::tilewidth#10, vera_layer_mode_tile::@21/vera_layer_mode_tile::tilewidth#11, vera_layer_mode_tile::@22/vera_layer_mode_tile::tilewidth#12, vera_layer_mode_tile::@23/vera_layer_mode_tile::tilewidth#13 ) - vera_layer_mode_tile::tilebase_address#8 = phi( vera_layer_mode_tile::@19/vera_layer_mode_tile::tilebase_address#9, vera_layer_mode_tile::@20/vera_layer_mode_tile::tilebase_address#10, vera_layer_mode_tile::@21/vera_layer_mode_tile::tilebase_address#11, vera_layer_mode_tile::@22/vera_layer_mode_tile::tilebase_address#12, vera_layer_mode_tile::@23/vera_layer_mode_tile::tilebase_address#13 ) - vera_layer_mode_tile::mapbase_address#7 = phi( vera_layer_mode_tile::@19/vera_layer_mode_tile::mapbase_address#8, vera_layer_mode_tile::@20/vera_layer_mode_tile::mapbase_address#9, vera_layer_mode_tile::@21/vera_layer_mode_tile::mapbase_address#10, vera_layer_mode_tile::@22/vera_layer_mode_tile::mapbase_address#11, vera_layer_mode_tile::@23/vera_layer_mode_tile::mapbase_address#12 ) - vera_layer_mode_tile::config#25 = phi( vera_layer_mode_tile::@19/vera_layer_mode_tile::config#36, vera_layer_mode_tile::@20/vera_layer_mode_tile::config#9, vera_layer_mode_tile::@21/vera_layer_mode_tile::config#10, vera_layer_mode_tile::@22/vera_layer_mode_tile::config#11, vera_layer_mode_tile::@23/vera_layer_mode_tile::config#12 ) - vera_layer_mode_tile::layer#9 = phi( vera_layer_mode_tile::@19/vera_layer_mode_tile::layer#17, vera_layer_mode_tile::@20/vera_layer_mode_tile::layer#18, vera_layer_mode_tile::@21/vera_layer_mode_tile::layer#19, vera_layer_mode_tile::@22/vera_layer_mode_tile::layer#20, vera_layer_mode_tile::@23/vera_layer_mode_tile::layer#21 ) - vera_layer_set_config::layer#0 = vera_layer_mode_tile::layer#9 - vera_layer_set_config::config#0 = vera_layer_mode_tile::config#25 - call vera_layer_set_config - to:vera_layer_mode_tile::@33 -vera_layer_mode_tile::@33: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@24 - vera_layer_mode_tile::tileheight#11 = phi( vera_layer_mode_tile::@24/vera_layer_mode_tile::tileheight#12 ) - vera_layer_mode_tile::tilewidth#7 = phi( vera_layer_mode_tile::@24/vera_layer_mode_tile::tilewidth#8 ) - vera_layer_mode_tile::tilebase_address#7 = phi( vera_layer_mode_tile::@24/vera_layer_mode_tile::tilebase_address#8 ) - vera_layer_mode_tile::layer#10 = phi( vera_layer_mode_tile::@24/vera_layer_mode_tile::layer#9 ) - vera_layer_mode_tile::mapbase_address#6 = phi( vera_layer_mode_tile::@24/vera_layer_mode_tile::mapbase_address#7 ) - vera_layer_mode_tile::$1 = word0 vera_layer_mode_tile::mapbase_address#6 - vera_layer_mode_tile::$15 = vera_layer_mode_tile::layer#10 * SIZEOF_UNSIGNED_INT - vera_mapbase_offset[vera_layer_mode_tile::$15] = vera_layer_mode_tile::$1 - vera_layer_mode_tile::$2 = byte2 vera_layer_mode_tile::mapbase_address#6 - vera_mapbase_bank[vera_layer_mode_tile::layer#10] = vera_layer_mode_tile::$2 - vera_layer_mode_tile::$16 = vera_layer_mode_tile::layer#10 * SIZEOF_UNSIGNED_LONG - vera_mapbase_address[vera_layer_mode_tile::$16] = vera_layer_mode_tile::mapbase_address#6 - vera_layer_mode_tile::$3 = vera_layer_mode_tile::mapbase_address#6 >> 1 - vera_layer_mode_tile::mapbase_address#0 = vera_layer_mode_tile::$3 - vera_layer_mode_tile::mapbase#0 = byte1 vera_layer_mode_tile::mapbase_address#0 - vera_layer_set_mapbase::layer#0 = vera_layer_mode_tile::layer#10 - vera_layer_set_mapbase::mapbase#0 = vera_layer_mode_tile::mapbase#0 - call vera_layer_set_mapbase - to:vera_layer_mode_tile::@34 -vera_layer_mode_tile::@34: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@33 - vera_layer_mode_tile::tileheight#10 = phi( vera_layer_mode_tile::@33/vera_layer_mode_tile::tileheight#11 ) - vera_layer_mode_tile::tilewidth#5 = phi( vera_layer_mode_tile::@33/vera_layer_mode_tile::tilewidth#7 ) - vera_layer_mode_tile::layer#11 = phi( vera_layer_mode_tile::@33/vera_layer_mode_tile::layer#10 ) - vera_layer_mode_tile::tilebase_address#6 = phi( vera_layer_mode_tile::@33/vera_layer_mode_tile::tilebase_address#7 ) - vera_layer_mode_tile::$6 = word0 vera_layer_mode_tile::tilebase_address#6 - vera_layer_mode_tile::$17 = vera_layer_mode_tile::layer#11 * SIZEOF_UNSIGNED_INT - vera_tilebase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$6 - vera_layer_mode_tile::$7 = byte2 vera_layer_mode_tile::tilebase_address#6 - vera_tilebase_bank[vera_layer_mode_tile::layer#11] = vera_layer_mode_tile::$7 - vera_layer_mode_tile::$18 = vera_layer_mode_tile::layer#11 * SIZEOF_UNSIGNED_LONG - vera_tilebase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::tilebase_address#6 - vera_layer_mode_tile::$8 = vera_layer_mode_tile::tilebase_address#6 >> 1 - vera_layer_mode_tile::tilebase_address#0 = vera_layer_mode_tile::$8 - vera_layer_mode_tile::tilebase#0 = byte1 vera_layer_mode_tile::tilebase_address#0 - vera_layer_mode_tile::tilebase#1 = vera_layer_mode_tile::tilebase#0 & VERA_LAYER_TILEBASE_MASK - if(vera_layer_mode_tile::tilewidth#5==8) goto vera_layer_mode_tile::@26 - to:vera_layer_mode_tile::@25 -vera_layer_mode_tile::@26: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@34 - vera_layer_mode_tile::layer#38 = phi( vera_layer_mode_tile::@34/vera_layer_mode_tile::layer#11 ) - vera_layer_mode_tile::tileheight#8 = phi( vera_layer_mode_tile::@34/vera_layer_mode_tile::tileheight#10 ) - vera_layer_mode_tile::tilebase#6 = phi( vera_layer_mode_tile::@34/vera_layer_mode_tile::tilebase#1 ) - vera_layer_mode_tile::tilebase#2 = vera_layer_mode_tile::tilebase#6 | VERA_TILEBASE_WIDTH_8 - to:vera_layer_mode_tile::@28 -vera_layer_mode_tile::@25: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@34 - vera_layer_mode_tile::layer#37 = phi( vera_layer_mode_tile::@34/vera_layer_mode_tile::layer#11 ) - vera_layer_mode_tile::tileheight#7 = phi( vera_layer_mode_tile::@34/vera_layer_mode_tile::tileheight#10 ) - vera_layer_mode_tile::tilebase#11 = phi( vera_layer_mode_tile::@34/vera_layer_mode_tile::tilebase#1 ) - vera_layer_mode_tile::tilewidth#6 = phi( vera_layer_mode_tile::@34/vera_layer_mode_tile::tilewidth#5 ) - if(vera_layer_mode_tile::tilewidth#6==$10) goto vera_layer_mode_tile::@27 - to:vera_layer_mode_tile::@28 -vera_layer_mode_tile::@27: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@25 - vera_layer_mode_tile::layer#39 = phi( vera_layer_mode_tile::@25/vera_layer_mode_tile::layer#37 ) - vera_layer_mode_tile::tileheight#9 = phi( vera_layer_mode_tile::@25/vera_layer_mode_tile::tileheight#7 ) - vera_layer_mode_tile::tilebase#7 = phi( vera_layer_mode_tile::@25/vera_layer_mode_tile::tilebase#11 ) - vera_layer_mode_tile::tilebase#3 = vera_layer_mode_tile::tilebase#7 | VERA_TILEBASE_WIDTH_16 - to:vera_layer_mode_tile::@28 -vera_layer_mode_tile::@28: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@25 vera_layer_mode_tile::@26 vera_layer_mode_tile::@27 - vera_layer_mode_tile::layer#33 = phi( vera_layer_mode_tile::@25/vera_layer_mode_tile::layer#37, vera_layer_mode_tile::@26/vera_layer_mode_tile::layer#38, vera_layer_mode_tile::@27/vera_layer_mode_tile::layer#39 ) - vera_layer_mode_tile::tilebase#12 = phi( vera_layer_mode_tile::@25/vera_layer_mode_tile::tilebase#11, vera_layer_mode_tile::@26/vera_layer_mode_tile::tilebase#2, vera_layer_mode_tile::@27/vera_layer_mode_tile::tilebase#3 ) - vera_layer_mode_tile::tileheight#5 = phi( vera_layer_mode_tile::@25/vera_layer_mode_tile::tileheight#7, vera_layer_mode_tile::@26/vera_layer_mode_tile::tileheight#8, vera_layer_mode_tile::@27/vera_layer_mode_tile::tileheight#9 ) - if(vera_layer_mode_tile::tileheight#5==8) goto vera_layer_mode_tile::@30 - to:vera_layer_mode_tile::@29 -vera_layer_mode_tile::@30: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@28 - vera_layer_mode_tile::layer#23 = phi( vera_layer_mode_tile::@28/vera_layer_mode_tile::layer#33 ) - vera_layer_mode_tile::tilebase#8 = phi( vera_layer_mode_tile::@28/vera_layer_mode_tile::tilebase#12 ) - vera_layer_mode_tile::tilebase#4 = vera_layer_mode_tile::tilebase#8 | VERA_TILEBASE_HEIGHT_8 - to:vera_layer_mode_tile::@32 -vera_layer_mode_tile::@29: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@28 - vera_layer_mode_tile::layer#22 = phi( vera_layer_mode_tile::@28/vera_layer_mode_tile::layer#33 ) - vera_layer_mode_tile::tilebase#13 = phi( vera_layer_mode_tile::@28/vera_layer_mode_tile::tilebase#12 ) - vera_layer_mode_tile::tileheight#6 = phi( vera_layer_mode_tile::@28/vera_layer_mode_tile::tileheight#5 ) - if(vera_layer_mode_tile::tileheight#6==$10) goto vera_layer_mode_tile::@31 - to:vera_layer_mode_tile::@32 -vera_layer_mode_tile::@31: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@29 - vera_layer_mode_tile::layer#24 = phi( vera_layer_mode_tile::@29/vera_layer_mode_tile::layer#22 ) - vera_layer_mode_tile::tilebase#9 = phi( vera_layer_mode_tile::@29/vera_layer_mode_tile::tilebase#13 ) - vera_layer_mode_tile::tilebase#5 = vera_layer_mode_tile::tilebase#9 | VERA_TILEBASE_HEIGHT_16 - to:vera_layer_mode_tile::@32 -vera_layer_mode_tile::@32: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@29 vera_layer_mode_tile::@30 vera_layer_mode_tile::@31 - vera_layer_mode_tile::tilebase#10 = phi( vera_layer_mode_tile::@29/vera_layer_mode_tile::tilebase#13, vera_layer_mode_tile::@30/vera_layer_mode_tile::tilebase#4, vera_layer_mode_tile::@31/vera_layer_mode_tile::tilebase#5 ) - vera_layer_mode_tile::layer#12 = phi( vera_layer_mode_tile::@29/vera_layer_mode_tile::layer#22, vera_layer_mode_tile::@30/vera_layer_mode_tile::layer#23, vera_layer_mode_tile::@31/vera_layer_mode_tile::layer#24 ) - vera_layer_set_tilebase::layer#0 = vera_layer_mode_tile::layer#12 - vera_layer_set_tilebase::tilebase#0 = vera_layer_mode_tile::tilebase#10 - call vera_layer_set_tilebase - to:vera_layer_mode_tile::@35 -vera_layer_mode_tile::@35: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@32 - to:vera_layer_mode_tile::@return -vera_layer_mode_tile::@return: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@35 - return - to:@return - -void vera_layer_mode_text(char layer , unsigned long mapbase_address , unsigned long tilebase_address , unsigned int mapwidth , unsigned int mapheight , char tilewidth , char tileheight , unsigned int color_mode) -vera_layer_mode_text: scope:[vera_layer_mode_text] from conio_x16_init - vera_layer_mode_text::color_mode#3 = phi( conio_x16_init/vera_layer_mode_text::color_mode#0 ) - vera_layer_mode_text::tileheight#1 = phi( conio_x16_init/vera_layer_mode_text::tileheight#0 ) - vera_layer_mode_text::tilewidth#1 = phi( conio_x16_init/vera_layer_mode_text::tilewidth#0 ) - vera_layer_mode_text::mapheight#1 = phi( conio_x16_init/vera_layer_mode_text::mapheight#0 ) - vera_layer_mode_text::mapwidth#1 = phi( conio_x16_init/vera_layer_mode_text::mapwidth#0 ) - vera_layer_mode_text::tilebase_address#1 = phi( conio_x16_init/vera_layer_mode_text::tilebase_address#0 ) - vera_layer_mode_text::mapbase_address#1 = phi( conio_x16_init/vera_layer_mode_text::mapbase_address#0 ) - vera_layer_mode_text::layer#1 = phi( conio_x16_init/vera_layer_mode_text::layer#0 ) - vera_layer_mode_tile::layer#0 = vera_layer_mode_text::layer#1 - vera_layer_mode_tile::mapbase_address#1 = vera_layer_mode_text::mapbase_address#1 - vera_layer_mode_tile::tilebase_address#1 = vera_layer_mode_text::tilebase_address#1 - vera_layer_mode_tile::mapwidth#0 = vera_layer_mode_text::mapwidth#1 - vera_layer_mode_tile::mapheight#0 = vera_layer_mode_text::mapheight#1 - vera_layer_mode_tile::tilewidth#0 = vera_layer_mode_text::tilewidth#1 - vera_layer_mode_tile::tileheight#0 = vera_layer_mode_text::tileheight#1 - vera_layer_mode_tile::color_depth#0 = 1 - call vera_layer_mode_tile - to:vera_layer_mode_text::@4 -vera_layer_mode_text::@4: scope:[vera_layer_mode_text] from vera_layer_mode_text - vera_layer_mode_text::layer#4 = phi( vera_layer_mode_text/vera_layer_mode_text::layer#1 ) - vera_layer_mode_text::color_mode#1 = phi( vera_layer_mode_text/vera_layer_mode_text::color_mode#3 ) - if(vera_layer_mode_text::color_mode#1==$10) goto vera_layer_mode_text::@2 - to:vera_layer_mode_text::@1 -vera_layer_mode_text::@2: scope:[vera_layer_mode_text] from vera_layer_mode_text::@4 - vera_layer_mode_text::layer#2 = phi( vera_layer_mode_text::@4/vera_layer_mode_text::layer#4 ) - vera_layer_set_text_color_mode::layer#0 = vera_layer_mode_text::layer#2 - vera_layer_set_text_color_mode::color_mode#0 = VERA_LAYER_CONFIG_16C - call vera_layer_set_text_color_mode - to:vera_layer_mode_text::@5 -vera_layer_mode_text::@5: scope:[vera_layer_mode_text] from vera_layer_mode_text::@2 - to:vera_layer_mode_text::@return -vera_layer_mode_text::@1: scope:[vera_layer_mode_text] from vera_layer_mode_text::@4 - vera_layer_mode_text::layer#5 = phi( vera_layer_mode_text::@4/vera_layer_mode_text::layer#4 ) - vera_layer_mode_text::color_mode#2 = phi( vera_layer_mode_text::@4/vera_layer_mode_text::color_mode#1 ) - if(vera_layer_mode_text::color_mode#2==$100) goto vera_layer_mode_text::@3 - to:vera_layer_mode_text::@return -vera_layer_mode_text::@3: scope:[vera_layer_mode_text] from vera_layer_mode_text::@1 - vera_layer_mode_text::layer#3 = phi( vera_layer_mode_text::@1/vera_layer_mode_text::layer#5 ) - vera_layer_set_text_color_mode::layer#1 = vera_layer_mode_text::layer#3 - vera_layer_set_text_color_mode::color_mode#1 = VERA_LAYER_CONFIG_256C - call vera_layer_set_text_color_mode - to:vera_layer_mode_text::@6 -vera_layer_mode_text::@6: scope:[vera_layer_mode_text] from vera_layer_mode_text::@3 - to:vera_layer_mode_text::@return -vera_layer_mode_text::@return: scope:[vera_layer_mode_text] from vera_layer_mode_text::@1 vera_layer_mode_text::@5 vera_layer_mode_text::@6 - return - to:@return - -void vera_tile_area(char layer , unsigned int tileindex , char x , char y , char w , char h , char hflip , char vflip , char offset) -vera_tile_area: scope:[vera_tile_area] from main::@10 main::@12 main::@15 main::@4 main::@6 - vera_tile_area::w#11 = phi( main::@10/vera_tile_area::w#2, main::@12/vera_tile_area::w#3, main::@15/vera_tile_area::w#4, main::@4/vera_tile_area::w#0, main::@6/vera_tile_area::w#1 ) - vera_tile_area::h#6 = phi( main::@10/vera_tile_area::h#2, main::@12/vera_tile_area::h#3, main::@15/vera_tile_area::h#4, main::@4/vera_tile_area::h#0, main::@6/vera_tile_area::h#1 ) - vera_tile_area::x#5 = phi( main::@10/vera_tile_area::x#2, main::@12/vera_tile_area::x#3, main::@15/vera_tile_area::x#4, main::@4/vera_tile_area::x#0, main::@6/vera_tile_area::x#1 ) - vera_tile_area::y#5 = phi( main::@10/vera_tile_area::y#2, main::@12/vera_tile_area::y#3, main::@15/vera_tile_area::y#4, main::@4/vera_tile_area::y#0, main::@6/vera_tile_area::y#1 ) - vera_tile_area::tileindex#5 = phi( main::@10/vera_tile_area::tileindex#2, main::@12/vera_tile_area::tileindex#3, main::@15/vera_tile_area::tileindex#4, main::@4/vera_tile_area::tileindex#0, main::@6/vera_tile_area::tileindex#1 ) - vera_tile_area::offset#6 = phi( main::@10/vera_tile_area::offset#3, main::@12/vera_tile_area::offset#4, main::@15/vera_tile_area::offset#5, main::@4/vera_tile_area::offset#1, main::@6/vera_tile_area::offset#2 ) - vera_tile_area::vflip#6 = phi( main::@10/vera_tile_area::vflip#3, main::@12/vera_tile_area::vflip#4, main::@15/vera_tile_area::vflip#5, main::@4/vera_tile_area::vflip#1, main::@6/vera_tile_area::vflip#2 ) - vera_tile_area::hflip#6 = phi( main::@10/vera_tile_area::hflip#3, main::@12/vera_tile_area::hflip#4, main::@15/vera_tile_area::hflip#5, main::@4/vera_tile_area::hflip#1, main::@6/vera_tile_area::hflip#2 ) - vera_tile_area::layer#5 = phi( main::@10/vera_tile_area::layer#2, main::@12/vera_tile_area::layer#3, main::@15/vera_tile_area::layer#4, main::@4/vera_tile_area::layer#0, main::@6/vera_tile_area::layer#1 ) - vera_tile_area::$9 = vera_tile_area::layer#5 * SIZEOF_UNSIGNED_LONG - vera_tile_area::mapbase#0 = vera_mapbase_address[vera_tile_area::$9] - vera_tile_area::shift#0 = vera_layer_rowshift[vera_tile_area::layer#5] - vera_tile_area::rowskip#0 = (unsigned int)1 << vera_tile_area::shift#0 - vera_tile_area::hflip#0 = vera_layer_hflip[vera_tile_area::hflip#6] - vera_tile_area::vflip#0 = vera_layer_vflip[vera_tile_area::vflip#6] - vera_tile_area::$1 = vera_tile_area::offset#6 << 4 - vera_tile_area::offset#0 = vera_tile_area::$1 - vera_tile_area::index_l#0 = byte0 vera_tile_area::tileindex#5 - vera_tile_area::index_h#0 = byte1 vera_tile_area::tileindex#5 - vera_tile_area::index_h#1 = vera_tile_area::index_h#0 | vera_tile_area::hflip#0 - vera_tile_area::index_h#2 = vera_tile_area::index_h#1 | vera_tile_area::vflip#0 - vera_tile_area::index_h#3 = vera_tile_area::index_h#2 | vera_tile_area::offset#0 - vera_tile_area::$10 = (unsigned int)vera_tile_area::y#5 - vera_tile_area::$4 = vera_tile_area::$10 << vera_tile_area::shift#0 - vera_tile_area::mapbase#1 = vera_tile_area::mapbase#0 + vera_tile_area::$4 - vera_tile_area::$5 = vera_tile_area::x#5 << 1 - vera_tile_area::mapbase#2 = vera_tile_area::mapbase#1 + vera_tile_area::$5 - vera_tile_area::r#0 = 0 - to:vera_tile_area::@1 -vera_tile_area::@1: scope:[vera_tile_area] from vera_tile_area vera_tile_area::@5 - vera_tile_area::rowskip#7 = phi( vera_tile_area/vera_tile_area::rowskip#0, vera_tile_area::@5/vera_tile_area::rowskip#1 ) - vera_tile_area::index_h#9 = phi( vera_tile_area/vera_tile_area::index_h#3, vera_tile_area::@5/vera_tile_area::index_h#10 ) - vera_tile_area::index_l#6 = phi( vera_tile_area/vera_tile_area::index_l#0, vera_tile_area::@5/vera_tile_area::index_l#7 ) - vera_tile_area::w#10 = phi( vera_tile_area/vera_tile_area::w#11, vera_tile_area::@5/vera_tile_area::w#12 ) - vera_tile_area::mapbase#6 = phi( vera_tile_area/vera_tile_area::mapbase#2, vera_tile_area::@5/vera_tile_area::mapbase#3 ) - vera_tile_area::h#5 = phi( vera_tile_area/vera_tile_area::h#6, vera_tile_area::@5/vera_tile_area::h#7 ) - vera_tile_area::r#2 = phi( vera_tile_area/vera_tile_area::r#0, vera_tile_area::@5/vera_tile_area::r#1 ) - vera_tile_area::$6 = vera_tile_area::r#2 < vera_tile_area::h#5 - if(vera_tile_area::$6) goto vera_tile_area::@2 - to:vera_tile_area::@return -vera_tile_area::@2: scope:[vera_tile_area] from vera_tile_area::@1 - vera_tile_area::h#12 = phi( vera_tile_area::@1/vera_tile_area::h#5 ) - vera_tile_area::r#8 = phi( vera_tile_area::@1/vera_tile_area::r#2 ) - vera_tile_area::rowskip#6 = phi( vera_tile_area::@1/vera_tile_area::rowskip#7 ) - vera_tile_area::index_h#8 = phi( vera_tile_area::@1/vera_tile_area::index_h#9 ) - vera_tile_area::index_l#5 = phi( vera_tile_area::@1/vera_tile_area::index_l#6 ) - vera_tile_area::w#9 = phi( vera_tile_area::@1/vera_tile_area::w#10 ) - vera_tile_area::mapbase#4 = phi( vera_tile_area::@1/vera_tile_area::mapbase#6 ) - vera_tile_area::vera_vram_address01_bankaddr#0 = vera_tile_area::mapbase#4 - vera_tile_area::vera_vram_address01_incr#0 = VERA_INC_1 - to:vera_tile_area::vera_vram_address01 -vera_tile_area::vera_vram_address01: scope:[vera_tile_area] from vera_tile_area::@2 - vera_tile_area::h#11 = phi( vera_tile_area::@2/vera_tile_area::h#12 ) - vera_tile_area::r#7 = phi( vera_tile_area::@2/vera_tile_area::r#8 ) - vera_tile_area::rowskip#5 = phi( vera_tile_area::@2/vera_tile_area::rowskip#6 ) - vera_tile_area::mapbase#10 = phi( vera_tile_area::@2/vera_tile_area::mapbase#4 ) - vera_tile_area::index_h#7 = phi( vera_tile_area::@2/vera_tile_area::index_h#8 ) - vera_tile_area::index_l#4 = phi( vera_tile_area::@2/vera_tile_area::index_l#5 ) - vera_tile_area::w#8 = phi( vera_tile_area::@2/vera_tile_area::w#9 ) - vera_tile_area::vera_vram_address01_incr#1 = phi( vera_tile_area::@2/vera_tile_area::vera_vram_address01_incr#0 ) - vera_tile_area::vera_vram_address01_bankaddr#1 = phi( vera_tile_area::@2/vera_tile_area::vera_vram_address01_bankaddr#0 ) - *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL - vera_tile_area::vera_vram_address01_$0 = byte0 vera_tile_area::vera_vram_address01_bankaddr#1 - *VERA_ADDRX_L = vera_tile_area::vera_vram_address01_$0 - vera_tile_area::vera_vram_address01_$1 = byte1 vera_tile_area::vera_vram_address01_bankaddr#1 - *VERA_ADDRX_M = vera_tile_area::vera_vram_address01_$1 - vera_tile_area::vera_vram_address01_$2 = byte2 vera_tile_area::vera_vram_address01_bankaddr#1 - vera_tile_area::vera_vram_address01_$3 = vera_tile_area::vera_vram_address01_$2 | vera_tile_area::vera_vram_address01_incr#1 - *VERA_ADDRX_H = vera_tile_area::vera_vram_address01_$3 - to:vera_tile_area::@6 -vera_tile_area::@6: scope:[vera_tile_area] from vera_tile_area::vera_vram_address01 - vera_tile_area::h#10 = phi( vera_tile_area::vera_vram_address01/vera_tile_area::h#11 ) - vera_tile_area::r#6 = phi( vera_tile_area::vera_vram_address01/vera_tile_area::r#7 ) - vera_tile_area::rowskip#4 = phi( vera_tile_area::vera_vram_address01/vera_tile_area::rowskip#5 ) - vera_tile_area::mapbase#9 = phi( vera_tile_area::vera_vram_address01/vera_tile_area::mapbase#10 ) - vera_tile_area::index_h#6 = phi( vera_tile_area::vera_vram_address01/vera_tile_area::index_h#7 ) - vera_tile_area::index_l#3 = phi( vera_tile_area::vera_vram_address01/vera_tile_area::index_l#4 ) - vera_tile_area::w#7 = phi( vera_tile_area::vera_vram_address01/vera_tile_area::w#8 ) - vera_tile_area::c#0 = 0 - to:vera_tile_area::@3 -vera_tile_area::@3: scope:[vera_tile_area] from vera_tile_area::@4 vera_tile_area::@6 - vera_tile_area::h#8 = phi( vera_tile_area::@4/vera_tile_area::h#9, vera_tile_area::@6/vera_tile_area::h#10 ) - vera_tile_area::r#4 = phi( vera_tile_area::@4/vera_tile_area::r#5, vera_tile_area::@6/vera_tile_area::r#6 ) - vera_tile_area::rowskip#2 = phi( vera_tile_area::@4/vera_tile_area::rowskip#3, vera_tile_area::@6/vera_tile_area::rowskip#4 ) - vera_tile_area::mapbase#7 = phi( vera_tile_area::@4/vera_tile_area::mapbase#8, vera_tile_area::@6/vera_tile_area::mapbase#9 ) - vera_tile_area::index_h#5 = phi( vera_tile_area::@4/vera_tile_area::index_h#4, vera_tile_area::@6/vera_tile_area::index_h#6 ) - vera_tile_area::index_l#2 = phi( vera_tile_area::@4/vera_tile_area::index_l#1, vera_tile_area::@6/vera_tile_area::index_l#3 ) - vera_tile_area::w#5 = phi( vera_tile_area::@4/vera_tile_area::w#6, vera_tile_area::@6/vera_tile_area::w#7 ) - vera_tile_area::c#2 = phi( vera_tile_area::@4/vera_tile_area::c#1, vera_tile_area::@6/vera_tile_area::c#0 ) - vera_tile_area::$8 = vera_tile_area::c#2 < vera_tile_area::w#5 - if(vera_tile_area::$8) goto vera_tile_area::@4 - to:vera_tile_area::@5 -vera_tile_area::@4: scope:[vera_tile_area] from vera_tile_area::@3 - vera_tile_area::h#9 = phi( vera_tile_area::@3/vera_tile_area::h#8 ) - vera_tile_area::r#5 = phi( vera_tile_area::@3/vera_tile_area::r#4 ) - vera_tile_area::rowskip#3 = phi( vera_tile_area::@3/vera_tile_area::rowskip#2 ) - vera_tile_area::mapbase#8 = phi( vera_tile_area::@3/vera_tile_area::mapbase#7 ) - vera_tile_area::w#6 = phi( vera_tile_area::@3/vera_tile_area::w#5 ) - vera_tile_area::c#3 = phi( vera_tile_area::@3/vera_tile_area::c#2 ) - vera_tile_area::index_h#4 = phi( vera_tile_area::@3/vera_tile_area::index_h#5 ) - vera_tile_area::index_l#1 = phi( vera_tile_area::@3/vera_tile_area::index_l#2 ) - *VERA_DATA0 = vera_tile_area::index_l#1 - *VERA_DATA0 = vera_tile_area::index_h#4 - vera_tile_area::c#1 = ++ vera_tile_area::c#3 - to:vera_tile_area::@3 -vera_tile_area::@5: scope:[vera_tile_area] from vera_tile_area::@3 - vera_tile_area::index_h#10 = phi( vera_tile_area::@3/vera_tile_area::index_h#5 ) - vera_tile_area::index_l#7 = phi( vera_tile_area::@3/vera_tile_area::index_l#2 ) - vera_tile_area::w#12 = phi( vera_tile_area::@3/vera_tile_area::w#5 ) - vera_tile_area::h#7 = phi( vera_tile_area::@3/vera_tile_area::h#8 ) - vera_tile_area::r#3 = phi( vera_tile_area::@3/vera_tile_area::r#4 ) - vera_tile_area::rowskip#1 = phi( vera_tile_area::@3/vera_tile_area::rowskip#2 ) - vera_tile_area::mapbase#5 = phi( vera_tile_area::@3/vera_tile_area::mapbase#7 ) - vera_tile_area::mapbase#3 = vera_tile_area::mapbase#5 + vera_tile_area::rowskip#1 - vera_tile_area::r#1 = ++ vera_tile_area::r#3 - to:vera_tile_area::@1 -vera_tile_area::@return: scope:[vera_tile_area] from vera_tile_area::@1 - return - to:@return - -void conio_x16_init() -conio_x16_init: scope:[conio_x16_init] from __start::__init1 - CONIO_SCREEN_TEXT#45 = phi( __start::__init1/CONIO_SCREEN_TEXT#7 ) - CONIO_SCREEN_BANK#42 = phi( __start::__init1/CONIO_SCREEN_BANK#7 ) - conio_x16_init::line#0 = *conio_x16_init::BASIC_CURSOR_LINE - vera_layer_mode_text::layer#0 = 1 - vera_layer_mode_text::mapbase_address#0 = (unsigned long)0 - vera_layer_mode_text::tilebase_address#0 = (unsigned long)$f800 - vera_layer_mode_text::mapwidth#0 = $80 - vera_layer_mode_text::mapheight#0 = $40 - vera_layer_mode_text::tilewidth#0 = 8 - vera_layer_mode_text::tileheight#0 = 8 - vera_layer_mode_text::color_mode#0 = $10 - call vera_layer_mode_text - to:conio_x16_init::@3 -conio_x16_init::@3: scope:[conio_x16_init] from conio_x16_init - conio_x16_init::line#9 = phi( conio_x16_init/conio_x16_init::line#0 ) - CONIO_SCREEN_TEXT#36 = phi( conio_x16_init/CONIO_SCREEN_TEXT#45 ) - CONIO_SCREEN_BANK#34 = phi( conio_x16_init/CONIO_SCREEN_BANK#42 ) - screensize::x#0 = &conio_screen_width - screensize::y#0 = &conio_screen_height - call screensize - to:conio_x16_init::@4 -conio_x16_init::@4: scope:[conio_x16_init] from conio_x16_init::@3 - conio_x16_init::line#8 = phi( conio_x16_init::@3/conio_x16_init::line#9 ) - CONIO_SCREEN_TEXT#27 = phi( conio_x16_init::@3/CONIO_SCREEN_TEXT#36 ) - CONIO_SCREEN_BANK#24 = phi( conio_x16_init::@3/CONIO_SCREEN_BANK#34 ) - screenlayer::layer#0 = 1 - call screenlayer - to:conio_x16_init::@5 -conio_x16_init::@5: scope:[conio_x16_init] from conio_x16_init::@4 - conio_x16_init::line#7 = phi( conio_x16_init::@4/conio_x16_init::line#8 ) - CONIO_SCREEN_TEXT#13 = phi( conio_x16_init::@4/CONIO_SCREEN_TEXT#3 ) - CONIO_SCREEN_BANK#13 = phi( conio_x16_init::@4/CONIO_SCREEN_BANK#3 ) - CONIO_SCREEN_BANK#0 = CONIO_SCREEN_BANK#13 - CONIO_SCREEN_TEXT#0 = CONIO_SCREEN_TEXT#13 - vera_layer_set_textcolor::layer#0 = 1 - vera_layer_set_textcolor::color#0 = WHITE - call vera_layer_set_textcolor - vera_layer_set_textcolor::return#2 = vera_layer_set_textcolor::return#1 - to:conio_x16_init::@6 -conio_x16_init::@6: scope:[conio_x16_init] from conio_x16_init::@5 - CONIO_SCREEN_TEXT#66 = phi( conio_x16_init::@5/CONIO_SCREEN_TEXT#0 ) - CONIO_SCREEN_BANK#60 = phi( conio_x16_init::@5/CONIO_SCREEN_BANK#0 ) - conio_x16_init::line#6 = phi( conio_x16_init::@5/conio_x16_init::line#7 ) - vera_layer_set_backcolor::layer#0 = 1 - vera_layer_set_backcolor::color#0 = BLUE - call vera_layer_set_backcolor - vera_layer_set_backcolor::return#2 = vera_layer_set_backcolor::return#1 - to:conio_x16_init::@7 -conio_x16_init::@7: scope:[conio_x16_init] from conio_x16_init::@6 - CONIO_SCREEN_TEXT#60 = phi( conio_x16_init::@6/CONIO_SCREEN_TEXT#66 ) - CONIO_SCREEN_BANK#56 = phi( conio_x16_init::@6/CONIO_SCREEN_BANK#60 ) - conio_x16_init::line#5 = phi( conio_x16_init::@6/conio_x16_init::line#6 ) - vera_layer_set_mapbase::layer#1 = 0 - vera_layer_set_mapbase::mapbase#1 = $20 - call vera_layer_set_mapbase - to:conio_x16_init::@8 -conio_x16_init::@8: scope:[conio_x16_init] from conio_x16_init::@7 - CONIO_SCREEN_TEXT#54 = phi( conio_x16_init::@7/CONIO_SCREEN_TEXT#60 ) - CONIO_SCREEN_BANK#51 = phi( conio_x16_init::@7/CONIO_SCREEN_BANK#56 ) - conio_x16_init::line#4 = phi( conio_x16_init::@7/conio_x16_init::line#5 ) - vera_layer_set_mapbase::layer#2 = 1 - vera_layer_set_mapbase::mapbase#2 = 0 - call vera_layer_set_mapbase - to:conio_x16_init::@9 -conio_x16_init::@9: scope:[conio_x16_init] from conio_x16_init::@8 - CONIO_SCREEN_TEXT#47 = phi( conio_x16_init::@8/CONIO_SCREEN_TEXT#54 ) - CONIO_SCREEN_BANK#44 = phi( conio_x16_init::@8/CONIO_SCREEN_BANK#51 ) - conio_x16_init::line#2 = phi( conio_x16_init::@8/conio_x16_init::line#4 ) - conio_x16_init::$7 = conio_x16_init::line#2 >= conio_screen_height - conio_x16_init::$8 = ! conio_x16_init::$7 - if(conio_x16_init::$8) goto conio_x16_init::@1 - to:conio_x16_init::@2 -conio_x16_init::@1: scope:[conio_x16_init] from conio_x16_init::@2 conio_x16_init::@9 - CONIO_SCREEN_TEXT#37 = phi( conio_x16_init::@2/CONIO_SCREEN_TEXT#46, conio_x16_init::@9/CONIO_SCREEN_TEXT#47 ) - CONIO_SCREEN_BANK#35 = phi( conio_x16_init::@2/CONIO_SCREEN_BANK#43, conio_x16_init::@9/CONIO_SCREEN_BANK#44 ) - conio_x16_init::line#3 = phi( conio_x16_init::@2/conio_x16_init::line#1, conio_x16_init::@9/conio_x16_init::line#2 ) - gotoxy::x#1 = 0 - gotoxy::y#1 = conio_x16_init::line#3 - call gotoxy - to:conio_x16_init::@10 -conio_x16_init::@10: scope:[conio_x16_init] from conio_x16_init::@1 - CONIO_SCREEN_TEXT#28 = phi( conio_x16_init::@1/CONIO_SCREEN_TEXT#37 ) - CONIO_SCREEN_BANK#25 = phi( conio_x16_init::@1/CONIO_SCREEN_BANK#35 ) - to:conio_x16_init::@return -conio_x16_init::@2: scope:[conio_x16_init] from conio_x16_init::@9 - CONIO_SCREEN_TEXT#46 = phi( conio_x16_init::@9/CONIO_SCREEN_TEXT#47 ) - CONIO_SCREEN_BANK#43 = phi( conio_x16_init::@9/CONIO_SCREEN_BANK#44 ) - conio_x16_init::$9 = conio_screen_height - 1 - conio_x16_init::line#1 = conio_x16_init::$9 - to:conio_x16_init::@1 -conio_x16_init::@return: scope:[conio_x16_init] from conio_x16_init::@10 - CONIO_SCREEN_TEXT#14 = phi( conio_x16_init::@10/CONIO_SCREEN_TEXT#28 ) - CONIO_SCREEN_BANK#14 = phi( conio_x16_init::@10/CONIO_SCREEN_BANK#25 ) - CONIO_SCREEN_BANK#1 = CONIO_SCREEN_BANK#14 - CONIO_SCREEN_TEXT#1 = CONIO_SCREEN_TEXT#14 - return - to:@return - -void clearline() -clearline: scope:[clearline] from insertup::@3 - CONIO_SCREEN_TEXT#15 = phi( insertup::@3/CONIO_SCREEN_TEXT#29 ) - *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL - clearline::$5 = conio_screen_layer * SIZEOF_UNSIGNED_INT - clearline::addr#0 = CONIO_SCREEN_TEXT#15 + conio_line_text[clearline::$5] - clearline::$1 = byte0 clearline::addr#0 - *VERA_ADDRX_L = clearline::$1 - clearline::$2 = byte1 clearline::addr#0 - *VERA_ADDRX_M = clearline::$2 - *VERA_ADDRX_H = VERA_INC_1 - vera_layer_get_color::layer#1 = conio_screen_layer - call vera_layer_get_color - vera_layer_get_color::return#4 = vera_layer_get_color::return#3 - to:clearline::@4 -clearline::@4: scope:[clearline] from clearline - vera_layer_get_color::return#7 = phi( clearline/vera_layer_get_color::return#4 ) - clearline::color#0 = vera_layer_get_color::return#7 - clearline::c#0 = 0 - to:clearline::@1 -clearline::@1: scope:[clearline] from clearline::@2 clearline::@4 - clearline::color#2 = phi( clearline::@2/clearline::color#1, clearline::@4/clearline::color#0 ) - clearline::c#2 = phi( clearline::@2/clearline::c#1, clearline::@4/clearline::c#0 ) - clearline::$4 = clearline::c#2 < conio_screen_width - if(clearline::$4) goto clearline::@2 - to:clearline::@3 -clearline::@2: scope:[clearline] from clearline::@1 - clearline::c#3 = phi( clearline::@1/clearline::c#2 ) - clearline::color#1 = phi( clearline::@1/clearline::color#2 ) - *VERA_DATA0 = ' ' - *VERA_DATA0 = clearline::color#1 - clearline::c#1 = ++ clearline::c#3 - to:clearline::@1 -clearline::@3: scope:[clearline] from clearline::@1 - conio_cursor_x[conio_screen_layer] = 0 - to:clearline::@return -clearline::@return: scope:[clearline] from clearline::@3 - return - to:@return - -void insertup() -insertup: scope:[insertup] from cscroll::@4 - CONIO_SCREEN_TEXT#38 = phi( cscroll::@4/CONIO_SCREEN_TEXT#48 ) - insertup::cy#0 = conio_cursor_y[conio_screen_layer] - insertup::width#0 = conio_screen_width * 2 - insertup::i#0 = 1 - to:insertup::@1 -insertup::@1: scope:[insertup] from insertup insertup::@4 - insertup::width#2 = phi( insertup/insertup::width#0, insertup::@4/insertup::width#3 ) - CONIO_SCREEN_TEXT#30 = phi( insertup/CONIO_SCREEN_TEXT#38, insertup::@4/CONIO_SCREEN_TEXT#39 ) - insertup::cy#1 = phi( insertup/insertup::cy#0, insertup::@4/insertup::cy#2 ) - insertup::i#2 = phi( insertup/insertup::i#0, insertup::@4/insertup::i#1 ) - insertup::$2 = insertup::i#2 <= insertup::cy#1 - if(insertup::$2) goto insertup::@2 - to:insertup::@3 -insertup::@2: scope:[insertup] from insertup::@1 - insertup::cy#3 = phi( insertup::@1/insertup::cy#1 ) - insertup::width#1 = phi( insertup::@1/insertup::width#2 ) - CONIO_SCREEN_TEXT#16 = phi( insertup::@1/CONIO_SCREEN_TEXT#30 ) - insertup::i#3 = phi( insertup::@1/insertup::i#2 ) - insertup::$3 = insertup::i#3 - 1 - insertup::line#0 = insertup::$3 << conio_rowshift - insertup::start#0 = CONIO_SCREEN_TEXT#16 + insertup::line#0 - insertup::$6 = insertup::start#0 + conio_rowskip - memcpy_in_vram::dest_bank#0 = 0 - memcpy_in_vram::dest#0 = (void *)insertup::start#0 - memcpy_in_vram::dest_increment#0 = VERA_INC_1 - memcpy_in_vram::src_bank#0 = 0 - memcpy_in_vram::src#0 = (void *)insertup::$6 - memcpy_in_vram::src_increment#0 = VERA_INC_1 - memcpy_in_vram::num#0 = insertup::width#1 - call memcpy_in_vram - to:insertup::@4 -insertup::@4: scope:[insertup] from insertup::@2 - insertup::width#3 = phi( insertup::@2/insertup::width#1 ) - CONIO_SCREEN_TEXT#39 = phi( insertup::@2/CONIO_SCREEN_TEXT#16 ) - insertup::cy#2 = phi( insertup::@2/insertup::cy#3 ) - insertup::i#4 = phi( insertup::@2/insertup::i#3 ) - insertup::i#1 = ++ insertup::i#4 - to:insertup::@1 -insertup::@3: scope:[insertup] from insertup::@1 - CONIO_SCREEN_TEXT#29 = phi( insertup::@1/CONIO_SCREEN_TEXT#30 ) - call clearline - to:insertup::@5 -insertup::@5: scope:[insertup] from insertup::@3 - to:insertup::@return -insertup::@return: scope:[insertup] from insertup::@5 - return - to:@return - -void cscroll() -cscroll: scope:[cscroll] from cputln - CONIO_SCREEN_TEXT#61 = phi( cputln/CONIO_SCREEN_TEXT#67 ) - cscroll::$0 = conio_cursor_y[conio_screen_layer] >= conio_screen_height - cscroll::$1 = ! cscroll::$0 - if(cscroll::$1) goto cscroll::@return - to:cscroll::@1 -cscroll::@1: scope:[cscroll] from cscroll - CONIO_SCREEN_TEXT#55 = phi( cscroll/CONIO_SCREEN_TEXT#61 ) - cscroll::$7 = 0 != conio_scroll_enable[conio_screen_layer] - if(cscroll::$7) goto cscroll::@4 - to:cscroll::@2 -cscroll::@4: scope:[cscroll] from cscroll::@1 - CONIO_SCREEN_TEXT#48 = phi( cscroll::@1/CONIO_SCREEN_TEXT#55 ) - call insertup - to:cscroll::@5 -cscroll::@5: scope:[cscroll] from cscroll::@4 - cscroll::$5 = conio_screen_height - 1 - gotoxy::x#2 = 0 - gotoxy::y#2 = cscroll::$5 - call gotoxy - to:cscroll::@6 -cscroll::@6: scope:[cscroll] from cscroll::@5 - to:cscroll::@return -cscroll::@2: scope:[cscroll] from cscroll::@1 - cscroll::$2 = conio_cursor_y[conio_screen_layer] >= conio_height - cscroll::$3 = ! cscroll::$2 - if(cscroll::$3) goto cscroll::@return - to:cscroll::@3 -cscroll::@3: scope:[cscroll] from cscroll::@2 - to:cscroll::@return -cscroll::@return: scope:[cscroll] from cscroll cscroll::@2 cscroll::@3 cscroll::@6 - return - to:@return - -void screenlayer(char layer) -screenlayer: scope:[screenlayer] from conio_x16_init::@4 main::@22 main::@48 - screenlayer::layer#3 = phi( conio_x16_init::@4/screenlayer::layer#0, main::@22/screenlayer::layer#1, main::@48/screenlayer::layer#2 ) - conio_screen_layer = screenlayer::layer#3 - vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer - call vera_layer_get_mapbase_bank - vera_layer_get_mapbase_bank::return#2 = vera_layer_get_mapbase_bank::return#1 - to:screenlayer::@3 -screenlayer::@3: scope:[screenlayer] from screenlayer - vera_layer_get_mapbase_bank::return#4 = phi( screenlayer/vera_layer_get_mapbase_bank::return#2 ) - screenlayer::$0 = vera_layer_get_mapbase_bank::return#4 - CONIO_SCREEN_BANK#2 = screenlayer::$0 - vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer - call vera_layer_get_mapbase_offset - vera_layer_get_mapbase_offset::return#2 = vera_layer_get_mapbase_offset::return#1 - to:screenlayer::@4 -screenlayer::@4: scope:[screenlayer] from screenlayer::@3 - CONIO_SCREEN_BANK#72 = phi( screenlayer::@3/CONIO_SCREEN_BANK#2 ) - vera_layer_get_mapbase_offset::return#4 = phi( screenlayer::@3/vera_layer_get_mapbase_offset::return#2 ) - screenlayer::$1 = vera_layer_get_mapbase_offset::return#4 - CONIO_SCREEN_TEXT#2 = (char *)screenlayer::$1 - screenlayer::vera_layer_get_width1_layer#0 = conio_screen_layer - to:screenlayer::vera_layer_get_width1 -screenlayer::vera_layer_get_width1: scope:[screenlayer] from screenlayer::@4 - CONIO_SCREEN_TEXT#79 = phi( screenlayer::@4/CONIO_SCREEN_TEXT#2 ) - CONIO_SCREEN_BANK#69 = phi( screenlayer::@4/CONIO_SCREEN_BANK#72 ) - screenlayer::vera_layer_get_width1_layer#1 = phi( screenlayer::@4/screenlayer::vera_layer_get_width1_layer#0 ) - screenlayer::vera_layer_get_width1_$2 = screenlayer::vera_layer_get_width1_layer#1 * SIZEOF_POINTER - screenlayer::vera_layer_get_width1_config#0 = vera_layer_config[screenlayer::vera_layer_get_width1_$2] - screenlayer::vera_layer_get_width1_$0 = *screenlayer::vera_layer_get_width1_config#0 & VERA_LAYER_WIDTH_MASK - screenlayer::vera_layer_get_width1_$1 = screenlayer::vera_layer_get_width1_$0 >> 4 - screenlayer::vera_layer_get_width1_$3 = screenlayer::vera_layer_get_width1_$1 * SIZEOF_UNSIGNED_INT - screenlayer::vera_layer_get_width1_return#0 = VERA_LAYER_WIDTH[screenlayer::vera_layer_get_width1_$3] - to:screenlayer::vera_layer_get_width1_@return -screenlayer::vera_layer_get_width1_@return: scope:[screenlayer] from screenlayer::vera_layer_get_width1 - CONIO_SCREEN_TEXT#75 = phi( screenlayer::vera_layer_get_width1/CONIO_SCREEN_TEXT#79 ) - CONIO_SCREEN_BANK#65 = phi( screenlayer::vera_layer_get_width1/CONIO_SCREEN_BANK#69 ) - screenlayer::vera_layer_get_width1_return#2 = phi( screenlayer::vera_layer_get_width1/screenlayer::vera_layer_get_width1_return#0 ) - screenlayer::vera_layer_get_width1_return#1 = screenlayer::vera_layer_get_width1_return#2 - to:screenlayer::@1 -screenlayer::@1: scope:[screenlayer] from screenlayer::vera_layer_get_width1_@return - CONIO_SCREEN_TEXT#68 = phi( screenlayer::vera_layer_get_width1_@return/CONIO_SCREEN_TEXT#75 ) - CONIO_SCREEN_BANK#61 = phi( screenlayer::vera_layer_get_width1_@return/CONIO_SCREEN_BANK#65 ) - screenlayer::vera_layer_get_width1_return#3 = phi( screenlayer::vera_layer_get_width1_@return/screenlayer::vera_layer_get_width1_return#1 ) - screenlayer::$2 = screenlayer::vera_layer_get_width1_return#3 - conio_width = screenlayer::$2 - vera_layer_get_rowshift::layer#0 = conio_screen_layer - call vera_layer_get_rowshift - vera_layer_get_rowshift::return#2 = vera_layer_get_rowshift::return#1 - to:screenlayer::@5 -screenlayer::@5: scope:[screenlayer] from screenlayer::@1 - CONIO_SCREEN_TEXT#62 = phi( screenlayer::@1/CONIO_SCREEN_TEXT#68 ) - CONIO_SCREEN_BANK#57 = phi( screenlayer::@1/CONIO_SCREEN_BANK#61 ) - vera_layer_get_rowshift::return#4 = phi( screenlayer::@1/vera_layer_get_rowshift::return#2 ) - screenlayer::$3 = vera_layer_get_rowshift::return#4 - conio_rowshift = screenlayer::$3 - vera_layer_get_rowskip::layer#0 = conio_screen_layer - call vera_layer_get_rowskip - vera_layer_get_rowskip::return#2 = vera_layer_get_rowskip::return#1 - to:screenlayer::@6 -screenlayer::@6: scope:[screenlayer] from screenlayer::@5 - CONIO_SCREEN_TEXT#56 = phi( screenlayer::@5/CONIO_SCREEN_TEXT#62 ) - CONIO_SCREEN_BANK#52 = phi( screenlayer::@5/CONIO_SCREEN_BANK#57 ) - vera_layer_get_rowskip::return#4 = phi( screenlayer::@5/vera_layer_get_rowskip::return#2 ) - screenlayer::$4 = vera_layer_get_rowskip::return#4 - conio_rowskip = screenlayer::$4 - screenlayer::vera_layer_get_height1_layer#0 = conio_screen_layer - to:screenlayer::vera_layer_get_height1 -screenlayer::vera_layer_get_height1: scope:[screenlayer] from screenlayer::@6 - CONIO_SCREEN_TEXT#49 = phi( screenlayer::@6/CONIO_SCREEN_TEXT#56 ) - CONIO_SCREEN_BANK#45 = phi( screenlayer::@6/CONIO_SCREEN_BANK#52 ) - screenlayer::vera_layer_get_height1_layer#1 = phi( screenlayer::@6/screenlayer::vera_layer_get_height1_layer#0 ) - screenlayer::vera_layer_get_height1_$2 = screenlayer::vera_layer_get_height1_layer#1 * SIZEOF_POINTER - screenlayer::vera_layer_get_height1_config#0 = vera_layer_config[screenlayer::vera_layer_get_height1_$2] - screenlayer::vera_layer_get_height1_$0 = *screenlayer::vera_layer_get_height1_config#0 & VERA_LAYER_HEIGHT_MASK - screenlayer::vera_layer_get_height1_$1 = screenlayer::vera_layer_get_height1_$0 >> 6 - screenlayer::vera_layer_get_height1_$3 = screenlayer::vera_layer_get_height1_$1 * SIZEOF_UNSIGNED_INT - screenlayer::vera_layer_get_height1_return#0 = VERA_LAYER_HEIGHT[screenlayer::vera_layer_get_height1_$3] - to:screenlayer::vera_layer_get_height1_@return -screenlayer::vera_layer_get_height1_@return: scope:[screenlayer] from screenlayer::vera_layer_get_height1 - CONIO_SCREEN_TEXT#40 = phi( screenlayer::vera_layer_get_height1/CONIO_SCREEN_TEXT#49 ) - CONIO_SCREEN_BANK#36 = phi( screenlayer::vera_layer_get_height1/CONIO_SCREEN_BANK#45 ) - screenlayer::vera_layer_get_height1_return#2 = phi( screenlayer::vera_layer_get_height1/screenlayer::vera_layer_get_height1_return#0 ) - screenlayer::vera_layer_get_height1_return#1 = screenlayer::vera_layer_get_height1_return#2 - to:screenlayer::@2 -screenlayer::@2: scope:[screenlayer] from screenlayer::vera_layer_get_height1_@return - CONIO_SCREEN_TEXT#31 = phi( screenlayer::vera_layer_get_height1_@return/CONIO_SCREEN_TEXT#40 ) - CONIO_SCREEN_BANK#26 = phi( screenlayer::vera_layer_get_height1_@return/CONIO_SCREEN_BANK#36 ) - screenlayer::vera_layer_get_height1_return#3 = phi( screenlayer::vera_layer_get_height1_@return/screenlayer::vera_layer_get_height1_return#1 ) - screenlayer::$5 = screenlayer::vera_layer_get_height1_return#3 - conio_height = screenlayer::$5 - to:screenlayer::@return -screenlayer::@return: scope:[screenlayer] from screenlayer::@2 - CONIO_SCREEN_TEXT#17 = phi( screenlayer::@2/CONIO_SCREEN_TEXT#31 ) - CONIO_SCREEN_BANK#15 = phi( screenlayer::@2/CONIO_SCREEN_BANK#26 ) - CONIO_SCREEN_BANK#3 = CONIO_SCREEN_BANK#15 - CONIO_SCREEN_TEXT#3 = CONIO_SCREEN_TEXT#17 - return - to:@return - -void printf_str(void (*putc)(char) , const char *s) -printf_str: scope:[printf_str] from main::@32 main::@33 main::@34 main::@35 main::@36 main::@37 main::@38 main::@39 - printf_str::putc#10 = phi( main::@32/printf_str::putc#0, main::@33/printf_str::putc#1, main::@34/printf_str::putc#2, main::@35/printf_str::putc#3, main::@36/printf_str::putc#4, main::@37/printf_str::putc#5, main::@38/printf_str::putc#6, main::@39/printf_str::putc#7 ) - printf_str::s#10 = phi( main::@32/printf_str::s#1, main::@33/printf_str::s#2, main::@34/printf_str::s#3, main::@35/printf_str::s#4, main::@36/printf_str::s#5, main::@37/printf_str::s#6, main::@38/printf_str::s#7, main::@39/printf_str::s#8 ) - printf_str::c#0 = 0 - to:printf_str::@1 -printf_str::@1: scope:[printf_str] from printf_str printf_str::@2 - printf_str::putc#9 = phi( printf_str/printf_str::putc#10, printf_str::@2/printf_str::putc#8 ) - printf_str::s#9 = phi( printf_str/printf_str::s#10, printf_str::@2/printf_str::s#11 ) - printf_str::c#1 = *printf_str::s#9 - printf_str::$0 = printf_str::c#1 - printf_str::s#0 = ++ printf_str::s#9 - printf_str::$2 = 0 != printf_str::$0 - if(printf_str::$2) goto printf_str::@2 - to:printf_str::@return -printf_str::@2: scope:[printf_str] from printf_str::@1 - printf_str::s#11 = phi( printf_str::@1/printf_str::s#0 ) - printf_str::putc#8 = phi( printf_str::@1/printf_str::putc#9 ) - printf_str::c#2 = phi( printf_str::@1/printf_str::c#1 ) - stackpush(char) = printf_str::c#2 - callexecute *printf_str::putc#8 - sideeffect stackpullpadding(1) - to:printf_str::@1 -printf_str::@return: scope:[printf_str] from printf_str::@1 - return - to:@return - -void main() -main: scope:[main] from __start::@1 - CONIO_SCREEN_TEXT#50 = phi( __start::@1/CONIO_SCREEN_TEXT#35 ) - CONIO_SCREEN_BANK#46 = phi( __start::@1/CONIO_SCREEN_BANK#30 ) - memcpy_in_vram::dest_bank#1 = 1 - memcpy_in_vram::dest#1 = (void *)(char *)$f000 - memcpy_in_vram::dest_increment#1 = VERA_INC_1 - memcpy_in_vram::src_bank#1 = 0 - memcpy_in_vram::src#1 = (void *)(char *)$f800 - memcpy_in_vram::src_increment#1 = VERA_INC_1 - memcpy_in_vram::num#1 = $100*8 - call memcpy_in_vram - to:main::@21 -main::@21: scope:[main] from main - CONIO_SCREEN_TEXT#41 = phi( main/CONIO_SCREEN_TEXT#50 ) - CONIO_SCREEN_BANK#37 = phi( main/CONIO_SCREEN_BANK#46 ) - vera_layer_mode_tile::layer#1 = 1 - vera_layer_mode_tile::mapbase_address#2 = $10000 - vera_layer_mode_tile::tilebase_address#2 = $1f000 - vera_layer_mode_tile::mapwidth#1 = $80 - vera_layer_mode_tile::mapheight#1 = $40 - vera_layer_mode_tile::tilewidth#1 = 8 - vera_layer_mode_tile::tileheight#1 = 8 - vera_layer_mode_tile::color_depth#1 = 1 - call vera_layer_mode_tile - to:main::@22 -main::@22: scope:[main] from main::@21 - CONIO_SCREEN_TEXT#32 = phi( main::@21/CONIO_SCREEN_TEXT#41 ) - CONIO_SCREEN_BANK#27 = phi( main::@21/CONIO_SCREEN_BANK#37 ) - screenlayer::layer#1 = 1 - call screenlayer - to:main::@23 -main::@23: scope:[main] from main::@22 - CONIO_SCREEN_TEXT#18 = phi( main::@22/CONIO_SCREEN_TEXT#3 ) - CONIO_SCREEN_BANK#16 = phi( main::@22/CONIO_SCREEN_BANK#3 ) - CONIO_SCREEN_BANK#4 = CONIO_SCREEN_BANK#16 - CONIO_SCREEN_TEXT#4 = CONIO_SCREEN_TEXT#18 - main::textcolor1_color#0 = WHITE - to:main::textcolor1 -main::textcolor1: scope:[main] from main::@23 - CONIO_SCREEN_BANK#75 = phi( main::@23/CONIO_SCREEN_BANK#4 ) - CONIO_SCREEN_TEXT#69 = phi( main::@23/CONIO_SCREEN_TEXT#4 ) - main::textcolor1_color#1 = phi( main::@23/main::textcolor1_color#0 ) - vera_layer_set_textcolor::layer#1 = conio_screen_layer - vera_layer_set_textcolor::color#1 = main::textcolor1_color#1 - call vera_layer_set_textcolor - vera_layer_set_textcolor::return#3 = vera_layer_set_textcolor::return#1 - to:main::@24 -main::@24: scope:[main] from main::textcolor1 - CONIO_SCREEN_BANK#73 = phi( main::textcolor1/CONIO_SCREEN_BANK#75 ) - CONIO_SCREEN_TEXT#63 = phi( main::textcolor1/CONIO_SCREEN_TEXT#69 ) - to:main::@16 -main::@16: scope:[main] from main::@24 - CONIO_SCREEN_BANK#70 = phi( main::@24/CONIO_SCREEN_BANK#73 ) - CONIO_SCREEN_TEXT#57 = phi( main::@24/CONIO_SCREEN_TEXT#63 ) - main::bgcolor1_color#0 = BLACK - to:main::bgcolor1 -main::bgcolor1: scope:[main] from main::@16 - CONIO_SCREEN_BANK#66 = phi( main::@16/CONIO_SCREEN_BANK#70 ) - CONIO_SCREEN_TEXT#51 = phi( main::@16/CONIO_SCREEN_TEXT#57 ) - main::bgcolor1_color#1 = phi( main::@16/main::bgcolor1_color#0 ) - vera_layer_set_backcolor::layer#1 = conio_screen_layer - vera_layer_set_backcolor::color#1 = main::bgcolor1_color#1 - call vera_layer_set_backcolor - vera_layer_set_backcolor::return#3 = vera_layer_set_backcolor::return#1 - to:main::@25 -main::@25: scope:[main] from main::bgcolor1 - CONIO_SCREEN_BANK#62 = phi( main::bgcolor1/CONIO_SCREEN_BANK#66 ) - CONIO_SCREEN_TEXT#42 = phi( main::bgcolor1/CONIO_SCREEN_TEXT#51 ) - to:main::@17 -main::@17: scope:[main] from main::@25 - CONIO_SCREEN_BANK#55 = phi( main::@25/CONIO_SCREEN_BANK#62 ) - CONIO_SCREEN_TEXT#24 = phi( main::@25/CONIO_SCREEN_TEXT#42 ) - call clrscr - to:main::@26 -main::@26: scope:[main] from main::@17 - CONIO_SCREEN_TEXT#114 = phi( main::@17/CONIO_SCREEN_TEXT#24 ) - CONIO_SCREEN_BANK#107 = phi( main::@17/CONIO_SCREEN_BANK#55 ) - vera_layer_mode_tile::layer#2 = 0 - vera_layer_mode_tile::mapbase_address#3 = $14000 - vera_layer_mode_tile::tilebase_address#3 = 0 - vera_layer_mode_tile::mapwidth#2 = $40 - vera_layer_mode_tile::mapheight#2 = $40 - vera_layer_mode_tile::tilewidth#2 = $10 - vera_layer_mode_tile::tileheight#2 = $10 - vera_layer_mode_tile::color_depth#2 = 8 - call vera_layer_mode_tile - to:main::@27 -main::@27: scope:[main] from main::@26 - CONIO_SCREEN_TEXT#113 = phi( main::@26/CONIO_SCREEN_TEXT#114 ) - CONIO_SCREEN_BANK#106 = phi( main::@26/CONIO_SCREEN_BANK#107 ) - main::tilebase#0 = (char *)0 - memcpy_to_vram::vbank#0 = 0 - memcpy_to_vram::vdest#0 = (void *)main::tilebase#0 - memcpy_to_vram::src#0 = (void *)main::tiles - memcpy_to_vram::num#0 = $100 - call memcpy_to_vram - to:main::@28 -main::@28: scope:[main] from main::@27 - CONIO_SCREEN_TEXT#112 = phi( main::@27/CONIO_SCREEN_TEXT#113 ) - CONIO_SCREEN_BANK#105 = phi( main::@27/CONIO_SCREEN_BANK#106 ) - main::tilebase#3 = phi( main::@27/main::tilebase#0 ) - main::tilebase#1 = main::tilebase#3 + $100 - main::t#0 = 1 - to:main::@1 -main::@1: scope:[main] from main::@28 main::@29 - CONIO_SCREEN_TEXT#111 = phi( main::@28/CONIO_SCREEN_TEXT#112, main::@29/CONIO_SCREEN_TEXT#108 ) - CONIO_SCREEN_BANK#104 = phi( main::@28/CONIO_SCREEN_BANK#105, main::@29/CONIO_SCREEN_BANK#101 ) - main::t#5 = phi( main::@28/main::t#0, main::@29/main::t#1 ) - main::tilebase#7 = phi( main::@28/main::tilebase#1, main::@29/main::tilebase#2 ) - main::p#0 = 0 - to:main::@2 -main::@2: scope:[main] from main::@1 main::@2 - CONIO_SCREEN_TEXT#110 = phi( main::@1/CONIO_SCREEN_TEXT#111, main::@2/CONIO_SCREEN_TEXT#110 ) - CONIO_SCREEN_BANK#103 = phi( main::@1/CONIO_SCREEN_BANK#104, main::@2/CONIO_SCREEN_BANK#103 ) - main::t#4 = phi( main::@1/main::t#5, main::@2/main::t#4 ) - main::tilebase#6 = phi( main::@1/main::tilebase#7, main::@2/main::tilebase#6 ) - main::p#2 = phi( main::@1/main::p#0, main::@2/main::p#1 ) - main::tiles[main::p#2] = main::tiles[main::p#2] + 1 - main::p#1 = main::p#2 + rangenext(0,$ff) - main::$29 = main::p#1 != rangelast(0,$ff) - if(main::$29) goto main::@2 - to:main::@3 -main::@3: scope:[main] from main::@2 - CONIO_SCREEN_TEXT#109 = phi( main::@2/CONIO_SCREEN_TEXT#110 ) - CONIO_SCREEN_BANK#102 = phi( main::@2/CONIO_SCREEN_BANK#103 ) - main::t#3 = phi( main::@2/main::t#4 ) - main::tilebase#4 = phi( main::@2/main::tilebase#6 ) - memcpy_to_vram::vbank#1 = 0 - memcpy_to_vram::vdest#1 = (void *)main::tilebase#4 - memcpy_to_vram::src#1 = (void *)main::tiles - memcpy_to_vram::num#1 = $100 - call memcpy_to_vram - to:main::@29 -main::@29: scope:[main] from main::@3 - CONIO_SCREEN_TEXT#108 = phi( main::@3/CONIO_SCREEN_TEXT#109 ) - CONIO_SCREEN_BANK#101 = phi( main::@3/CONIO_SCREEN_BANK#102 ) - main::t#2 = phi( main::@3/main::t#3 ) - main::tilebase#5 = phi( main::@3/main::tilebase#4 ) - main::tilebase#2 = main::tilebase#5 + $100 - main::t#1 = main::t#2 + rangenext(1,$ff) - main::$31 = main::t#1 != rangelast(1,$ff) - if(main::$31) goto main::@1 - to:main::@4 -main::@4: scope:[main] from main::@29 - CONIO_SCREEN_TEXT#107 = phi( main::@29/CONIO_SCREEN_TEXT#108 ) - CONIO_SCREEN_BANK#100 = phi( main::@29/CONIO_SCREEN_BANK#101 ) - vera_tile_area::layer#0 = 0 - vera_tile_area::tileindex#0 = 0 - vera_tile_area::x#0 = 0 - vera_tile_area::y#0 = 0 - vera_tile_area::w#0 = $28 - vera_tile_area::h#0 = $1e - vera_tile_area::hflip#1 = 0 - vera_tile_area::vflip#1 = 0 - vera_tile_area::offset#1 = 0 - call vera_tile_area - to:main::@30 -main::@30: scope:[main] from main::@4 - CONIO_SCREEN_TEXT#106 = phi( main::@4/CONIO_SCREEN_TEXT#107 ) - CONIO_SCREEN_BANK#99 = phi( main::@4/CONIO_SCREEN_BANK#100 ) - main::tile#0 = 0 - main::row#0 = 1 - main::r#0 = 0 - to:main::@5 -main::@5: scope:[main] from main::@30 main::@7 - CONIO_SCREEN_TEXT#105 = phi( main::@30/CONIO_SCREEN_TEXT#106, main::@7/CONIO_SCREEN_TEXT#102 ) - CONIO_SCREEN_BANK#98 = phi( main::@30/CONIO_SCREEN_BANK#99, main::@7/CONIO_SCREEN_BANK#95 ) - main::r#5 = phi( main::@30/main::r#0, main::@7/main::r#1 ) - main::row#9 = phi( main::@30/main::row#0, main::@7/main::row#1 ) - main::tile#10 = phi( main::@30/main::tile#0, main::@7/main::tile#12 ) - main::column#0 = 0 - main::c#0 = 0 - to:main::@6 -main::@6: scope:[main] from main::@31 main::@5 - CONIO_SCREEN_TEXT#104 = phi( main::@31/CONIO_SCREEN_TEXT#103, main::@5/CONIO_SCREEN_TEXT#105 ) - CONIO_SCREEN_BANK#97 = phi( main::@31/CONIO_SCREEN_BANK#96, main::@5/CONIO_SCREEN_BANK#98 ) - main::r#4 = phi( main::@31/main::r#3, main::@5/main::r#5 ) - main::c#3 = phi( main::@31/main::c#1, main::@5/main::c#0 ) - main::row#4 = phi( main::@31/main::row#8, main::@5/main::row#9 ) - main::column#2 = phi( main::@31/main::column#1, main::@5/main::column#0 ) - main::tile#6 = phi( main::@31/main::tile#2, main::@5/main::tile#10 ) - vera_tile_area::layer#1 = 0 - vera_tile_area::tileindex#1 = main::tile#6 - vera_tile_area::x#1 = main::column#2 - vera_tile_area::y#1 = main::row#4 - vera_tile_area::w#1 = 1 - vera_tile_area::h#1 = 1 - vera_tile_area::hflip#2 = 0 - vera_tile_area::vflip#2 = 0 - vera_tile_area::offset#2 = 0 - call vera_tile_area - to:main::@31 -main::@31: scope:[main] from main::@6 - CONIO_SCREEN_TEXT#103 = phi( main::@6/CONIO_SCREEN_TEXT#104 ) - CONIO_SCREEN_BANK#96 = phi( main::@6/CONIO_SCREEN_BANK#97 ) - main::r#3 = phi( main::@6/main::r#4 ) - main::row#8 = phi( main::@6/main::row#4 ) - main::c#2 = phi( main::@6/main::c#3 ) - main::tile#7 = phi( main::@6/main::tile#6 ) - main::column#3 = phi( main::@6/main::column#2 ) - main::column#1 = main::column#3 + 2 - main::tile#1 = ++ main::tile#7 - main::tile#2 = main::tile#1 & $ff - main::c#1 = main::c#2 + rangenext(0,$13) - main::$33 = main::c#1 != rangelast(0,$13) - if(main::$33) goto main::@6 - to:main::@7 -main::@7: scope:[main] from main::@31 - CONIO_SCREEN_TEXT#102 = phi( main::@31/CONIO_SCREEN_TEXT#103 ) - CONIO_SCREEN_BANK#95 = phi( main::@31/CONIO_SCREEN_BANK#96 ) - main::tile#12 = phi( main::@31/main::tile#2 ) - main::r#2 = phi( main::@31/main::r#3 ) - main::row#5 = phi( main::@31/main::row#8 ) - main::row#1 = main::row#5 + 2 - main::r#1 = main::r#2 + rangenext(0,$b) - main::$34 = main::r#1 != rangelast(0,$b) - if(main::$34) goto main::@5 - to:main::@8 -main::@8: scope:[main] from main::@7 - CONIO_SCREEN_TEXT#101 = phi( main::@7/CONIO_SCREEN_TEXT#102 ) - CONIO_SCREEN_BANK#94 = phi( main::@7/CONIO_SCREEN_BANK#95 ) - gotoxy::x#3 = 0 - gotoxy::y#3 = $32 - call gotoxy - to:main::@32 -main::@32: scope:[main] from main::@8 - CONIO_SCREEN_TEXT#100 = phi( main::@8/CONIO_SCREEN_TEXT#101 ) - CONIO_SCREEN_BANK#93 = phi( main::@8/CONIO_SCREEN_BANK#94 ) - printf_str::putc#0 = &cputc - printf_str::s#1 = main::s - call printf_str - to:main::@33 -main::@33: scope:[main] from main::@32 - CONIO_SCREEN_TEXT#99 = phi( main::@32/CONIO_SCREEN_TEXT#100 ) - CONIO_SCREEN_BANK#92 = phi( main::@32/CONIO_SCREEN_BANK#93 ) - printf_str::putc#1 = &cputc - printf_str::s#2 = main::s1 - call printf_str - to:main::@34 -main::@34: scope:[main] from main::@33 - CONIO_SCREEN_TEXT#98 = phi( main::@33/CONIO_SCREEN_TEXT#99 ) - CONIO_SCREEN_BANK#91 = phi( main::@33/CONIO_SCREEN_BANK#92 ) - printf_str::putc#2 = &cputc - printf_str::s#3 = main::s2 - call printf_str - to:main::@35 -main::@35: scope:[main] from main::@34 - CONIO_SCREEN_TEXT#97 = phi( main::@34/CONIO_SCREEN_TEXT#98 ) - CONIO_SCREEN_BANK#90 = phi( main::@34/CONIO_SCREEN_BANK#91 ) - printf_str::putc#3 = &cputc - printf_str::s#4 = main::s3 - call printf_str - to:main::@36 -main::@36: scope:[main] from main::@35 - CONIO_SCREEN_TEXT#96 = phi( main::@35/CONIO_SCREEN_TEXT#97 ) - CONIO_SCREEN_BANK#89 = phi( main::@35/CONIO_SCREEN_BANK#90 ) - printf_str::putc#4 = &cputc - printf_str::s#5 = main::s4 - call printf_str - to:main::@37 -main::@37: scope:[main] from main::@36 - CONIO_SCREEN_TEXT#95 = phi( main::@36/CONIO_SCREEN_TEXT#96 ) - CONIO_SCREEN_BANK#88 = phi( main::@36/CONIO_SCREEN_BANK#89 ) - printf_str::putc#5 = &cputc - printf_str::s#6 = main::s5 - call printf_str - to:main::@38 -main::@38: scope:[main] from main::@37 - CONIO_SCREEN_TEXT#94 = phi( main::@37/CONIO_SCREEN_TEXT#95 ) - CONIO_SCREEN_BANK#87 = phi( main::@37/CONIO_SCREEN_BANK#88 ) - printf_str::putc#6 = &cputc - printf_str::s#7 = main::s6 - call printf_str - to:main::@39 -main::@39: scope:[main] from main::@38 - CONIO_SCREEN_TEXT#93 = phi( main::@38/CONIO_SCREEN_TEXT#94 ) - CONIO_SCREEN_BANK#86 = phi( main::@38/CONIO_SCREEN_BANK#87 ) - printf_str::putc#7 = &cputc - printf_str::s#8 = main::s7 - call printf_str - to:main::@40 -main::@40: scope:[main] from main::@39 - CONIO_SCREEN_TEXT#92 = phi( main::@39/CONIO_SCREEN_TEXT#93 ) - CONIO_SCREEN_BANK#85 = phi( main::@39/CONIO_SCREEN_BANK#86 ) - main::vera_layer_show1_layer#0 = 0 - to:main::vera_layer_show1 -main::vera_layer_show1: scope:[main] from main::@40 - CONIO_SCREEN_TEXT#91 = phi( main::@40/CONIO_SCREEN_TEXT#92 ) - CONIO_SCREEN_BANK#84 = phi( main::@40/CONIO_SCREEN_BANK#85 ) - main::vera_layer_show1_layer#1 = phi( main::@40/main::vera_layer_show1_layer#0 ) - *VERA_DC_VIDEO = *VERA_DC_VIDEO | vera_layer_enable[main::vera_layer_show1_layer#1] - to:main::@9 -main::@9: scope:[main] from main::@41 main::vera_layer_show1 - CONIO_SCREEN_TEXT#90 = phi( main::@41/CONIO_SCREEN_TEXT#89, main::vera_layer_show1/CONIO_SCREEN_TEXT#91 ) - CONIO_SCREEN_BANK#83 = phi( main::@41/CONIO_SCREEN_BANK#82, main::vera_layer_show1/CONIO_SCREEN_BANK#84 ) - call kbhit - kbhit::return#2 = kbhit::return#1 - to:main::@41 -main::@41: scope:[main] from main::@9 - CONIO_SCREEN_TEXT#89 = phi( main::@9/CONIO_SCREEN_TEXT#90 ) - CONIO_SCREEN_BANK#82 = phi( main::@9/CONIO_SCREEN_BANK#83 ) - kbhit::return#5 = phi( main::@9/kbhit::return#2 ) - main::$35 = kbhit::return#5 - main::$42 = 0 != main::$35 - main::$36 = ! main::$42 - if(main::$36) goto main::@9 - to:main::@10 -main::@10: scope:[main] from main::@41 - CONIO_SCREEN_TEXT#88 = phi( main::@41/CONIO_SCREEN_TEXT#89 ) - CONIO_SCREEN_BANK#81 = phi( main::@41/CONIO_SCREEN_BANK#82 ) - vera_tile_area::layer#2 = 0 - vera_tile_area::tileindex#2 = 0 - vera_tile_area::x#2 = 0 - vera_tile_area::y#2 = 0 - vera_tile_area::w#2 = $28 - vera_tile_area::h#2 = $1e - vera_tile_area::hflip#3 = 0 - vera_tile_area::vflip#3 = 0 - vera_tile_area::offset#3 = 0 - call vera_tile_area - to:main::@42 -main::@42: scope:[main] from main::@10 - CONIO_SCREEN_TEXT#87 = phi( main::@10/CONIO_SCREEN_TEXT#88 ) - CONIO_SCREEN_BANK#80 = phi( main::@10/CONIO_SCREEN_BANK#81 ) - main::tile#3 = 0 - main::row#2 = 0 - main::r1#0 = 0 - to:main::@11 -main::@11: scope:[main] from main::@13 main::@42 - CONIO_SCREEN_TEXT#86 = phi( main::@13/CONIO_SCREEN_TEXT#83, main::@42/CONIO_SCREEN_TEXT#87 ) - CONIO_SCREEN_BANK#79 = phi( main::@13/CONIO_SCREEN_BANK#76, main::@42/CONIO_SCREEN_BANK#80 ) - main::r1#5 = phi( main::@13/main::r1#1, main::@42/main::r1#0 ) - main::row#10 = phi( main::@13/main::row#3, main::@42/main::row#2 ) - main::tile#11 = phi( main::@13/main::tile#13, main::@42/main::tile#3 ) - main::column1#0 = 0 - main::c1#0 = 0 - to:main::@12 -main::@12: scope:[main] from main::@11 main::@43 - CONIO_SCREEN_TEXT#85 = phi( main::@11/CONIO_SCREEN_TEXT#86, main::@43/CONIO_SCREEN_TEXT#84 ) - CONIO_SCREEN_BANK#78 = phi( main::@11/CONIO_SCREEN_BANK#79, main::@43/CONIO_SCREEN_BANK#77 ) - main::r1#4 = phi( main::@11/main::r1#5, main::@43/main::r1#3 ) - main::c1#3 = phi( main::@11/main::c1#0, main::@43/main::c1#1 ) - main::row#6 = phi( main::@11/main::row#10, main::@43/main::row#11 ) - main::column1#2 = phi( main::@11/main::column1#0, main::@43/main::column1#1 ) - main::tile#8 = phi( main::@11/main::tile#11, main::@43/main::tile#5 ) - vera_tile_area::layer#3 = 0 - vera_tile_area::tileindex#3 = main::tile#8 - vera_tile_area::x#3 = main::column1#2 - vera_tile_area::y#3 = main::row#6 - vera_tile_area::w#3 = 2 - vera_tile_area::h#3 = 2 - vera_tile_area::hflip#4 = 0 - vera_tile_area::vflip#4 = 0 - vera_tile_area::offset#4 = 0 - call vera_tile_area - to:main::@43 -main::@43: scope:[main] from main::@12 - CONIO_SCREEN_TEXT#84 = phi( main::@12/CONIO_SCREEN_TEXT#85 ) - CONIO_SCREEN_BANK#77 = phi( main::@12/CONIO_SCREEN_BANK#78 ) - main::r1#3 = phi( main::@12/main::r1#4 ) - main::row#11 = phi( main::@12/main::row#6 ) - main::c1#2 = phi( main::@12/main::c1#3 ) - main::tile#9 = phi( main::@12/main::tile#8 ) - main::column1#3 = phi( main::@12/main::column1#2 ) - main::column1#1 = main::column1#3 + 2 - main::tile#4 = ++ main::tile#9 - main::tile#5 = main::tile#4 & $ff - main::c1#1 = main::c1#2 + rangenext(0,$13) - main::$38 = main::c1#1 != rangelast(0,$13) - if(main::$38) goto main::@12 - to:main::@13 -main::@13: scope:[main] from main::@43 - CONIO_SCREEN_TEXT#83 = phi( main::@43/CONIO_SCREEN_TEXT#84 ) - CONIO_SCREEN_BANK#76 = phi( main::@43/CONIO_SCREEN_BANK#77 ) - main::tile#13 = phi( main::@43/main::tile#5 ) - main::r1#2 = phi( main::@43/main::r1#3 ) - main::row#7 = phi( main::@43/main::row#11 ) - main::row#3 = main::row#7 + 2 - main::r1#1 = main::r1#2 + rangenext(0,$b) - main::$39 = main::r1#1 != rangelast(0,$b) - if(main::$39) goto main::@11 - to:main::@14 -main::@14: scope:[main] from main::@13 main::@44 - CONIO_SCREEN_TEXT#82 = phi( main::@13/CONIO_SCREEN_TEXT#83, main::@44/CONIO_SCREEN_TEXT#80 ) - CONIO_SCREEN_BANK#74 = phi( main::@13/CONIO_SCREEN_BANK#76, main::@44/CONIO_SCREEN_BANK#71 ) - call kbhit - kbhit::return#3 = kbhit::return#1 - to:main::@44 -main::@44: scope:[main] from main::@14 - CONIO_SCREEN_TEXT#80 = phi( main::@14/CONIO_SCREEN_TEXT#82 ) - CONIO_SCREEN_BANK#71 = phi( main::@14/CONIO_SCREEN_BANK#74 ) - kbhit::return#6 = phi( main::@14/kbhit::return#3 ) - main::$40 = kbhit::return#6 - main::$43 = 0 != main::$40 - main::$41 = ! main::$43 - if(main::$41) goto main::@14 - to:main::@15 -main::@15: scope:[main] from main::@44 - CONIO_SCREEN_TEXT#76 = phi( main::@44/CONIO_SCREEN_TEXT#80 ) - CONIO_SCREEN_BANK#67 = phi( main::@44/CONIO_SCREEN_BANK#71 ) - vera_tile_area::layer#4 = 0 - vera_tile_area::tileindex#4 = 0 - vera_tile_area::x#4 = 0 - vera_tile_area::y#4 = 0 - vera_tile_area::w#4 = $28 - vera_tile_area::h#4 = $1e - vera_tile_area::hflip#5 = 0 - vera_tile_area::vflip#5 = 0 - vera_tile_area::offset#5 = 0 - call vera_tile_area - to:main::@45 -main::@45: scope:[main] from main::@15 - CONIO_SCREEN_TEXT#70 = phi( main::@15/CONIO_SCREEN_TEXT#76 ) - CONIO_SCREEN_BANK#63 = phi( main::@15/CONIO_SCREEN_BANK#67 ) - main::vera_layer_hide1_layer#0 = 0 - to:main::vera_layer_hide1 -main::vera_layer_hide1: scope:[main] from main::@45 - CONIO_SCREEN_TEXT#64 = phi( main::@45/CONIO_SCREEN_TEXT#70 ) - CONIO_SCREEN_BANK#58 = phi( main::@45/CONIO_SCREEN_BANK#63 ) - main::vera_layer_hide1_layer#1 = phi( main::@45/main::vera_layer_hide1_layer#0 ) - main::vera_layer_hide1_$0 = ~ vera_layer_enable[main::vera_layer_hide1_layer#1] - *VERA_DC_VIDEO = *VERA_DC_VIDEO & main::vera_layer_hide1_$0 - to:main::@18 -main::@18: scope:[main] from main::vera_layer_hide1 - CONIO_SCREEN_TEXT#58 = phi( main::vera_layer_hide1/CONIO_SCREEN_TEXT#64 ) - CONIO_SCREEN_BANK#53 = phi( main::vera_layer_hide1/CONIO_SCREEN_BANK#58 ) - memcpy_in_vram::dest_bank#2 = 0 - memcpy_in_vram::dest#2 = (void *)(char *)$f800 - memcpy_in_vram::dest_increment#2 = VERA_INC_1 - memcpy_in_vram::src_bank#2 = 1 - memcpy_in_vram::src#2 = (void *)(char *)$f000 - memcpy_in_vram::src_increment#2 = VERA_INC_1 - memcpy_in_vram::num#2 = $100*8 - call memcpy_in_vram - to:main::@46 -main::@46: scope:[main] from main::@18 - CONIO_SCREEN_TEXT#52 = phi( main::@18/CONIO_SCREEN_TEXT#58 ) - CONIO_SCREEN_BANK#47 = phi( main::@18/CONIO_SCREEN_BANK#53 ) - vera_layer_mode_tile::layer#3 = 1 - vera_layer_mode_tile::mapbase_address#4 = 0 - vera_layer_mode_tile::tilebase_address#4 = $f800 - vera_layer_mode_tile::mapwidth#3 = $80 - vera_layer_mode_tile::mapheight#3 = $80 - vera_layer_mode_tile::tilewidth#3 = 8 - vera_layer_mode_tile::tileheight#3 = 8 - vera_layer_mode_tile::color_depth#3 = 1 - call vera_layer_mode_tile - to:main::@47 -main::@47: scope:[main] from main::@46 - CONIO_SCREEN_TEXT#43 = phi( main::@46/CONIO_SCREEN_TEXT#52 ) - CONIO_SCREEN_BANK#38 = phi( main::@46/CONIO_SCREEN_BANK#47 ) - vera_layer_mode_tile::layer#4 = 0 - vera_layer_mode_tile::mapbase_address#5 = 0 - vera_layer_mode_tile::tilebase_address#5 = $f800 - vera_layer_mode_tile::mapwidth#4 = $80 - vera_layer_mode_tile::mapheight#4 = $80 - vera_layer_mode_tile::tilewidth#4 = 8 - vera_layer_mode_tile::tileheight#4 = 8 - vera_layer_mode_tile::color_depth#4 = 1 - call vera_layer_mode_tile - to:main::@48 -main::@48: scope:[main] from main::@47 - CONIO_SCREEN_TEXT#33 = phi( main::@47/CONIO_SCREEN_TEXT#43 ) - CONIO_SCREEN_BANK#28 = phi( main::@47/CONIO_SCREEN_BANK#38 ) - screenlayer::layer#2 = 1 - call screenlayer - to:main::@49 -main::@49: scope:[main] from main::@48 - CONIO_SCREEN_TEXT#19 = phi( main::@48/CONIO_SCREEN_TEXT#3 ) - CONIO_SCREEN_BANK#17 = phi( main::@48/CONIO_SCREEN_BANK#3 ) - CONIO_SCREEN_BANK#5 = CONIO_SCREEN_BANK#17 - CONIO_SCREEN_TEXT#5 = CONIO_SCREEN_TEXT#19 - main::textcolor2_color#0 = WHITE - to:main::textcolor2 -main::textcolor2: scope:[main] from main::@49 - CONIO_SCREEN_BANK#68 = phi( main::@49/CONIO_SCREEN_BANK#5 ) - CONIO_SCREEN_TEXT#71 = phi( main::@49/CONIO_SCREEN_TEXT#5 ) - main::textcolor2_color#1 = phi( main::@49/main::textcolor2_color#0 ) - vera_layer_set_textcolor::layer#2 = conio_screen_layer - vera_layer_set_textcolor::color#2 = main::textcolor2_color#1 - call vera_layer_set_textcolor - vera_layer_set_textcolor::return#4 = vera_layer_set_textcolor::return#1 - to:main::@50 -main::@50: scope:[main] from main::textcolor2 - CONIO_SCREEN_BANK#64 = phi( main::textcolor2/CONIO_SCREEN_BANK#68 ) - CONIO_SCREEN_TEXT#65 = phi( main::textcolor2/CONIO_SCREEN_TEXT#71 ) - to:main::@19 -main::@19: scope:[main] from main::@50 - CONIO_SCREEN_BANK#59 = phi( main::@50/CONIO_SCREEN_BANK#64 ) - CONIO_SCREEN_TEXT#59 = phi( main::@50/CONIO_SCREEN_TEXT#65 ) - main::bgcolor2_color#0 = BLUE - to:main::bgcolor2 -main::bgcolor2: scope:[main] from main::@19 - CONIO_SCREEN_BANK#54 = phi( main::@19/CONIO_SCREEN_BANK#59 ) - CONIO_SCREEN_TEXT#53 = phi( main::@19/CONIO_SCREEN_TEXT#59 ) - main::bgcolor2_color#1 = phi( main::@19/main::bgcolor2_color#0 ) - vera_layer_set_backcolor::layer#2 = conio_screen_layer - vera_layer_set_backcolor::color#2 = main::bgcolor2_color#1 - call vera_layer_set_backcolor - vera_layer_set_backcolor::return#4 = vera_layer_set_backcolor::return#1 - to:main::@51 -main::@51: scope:[main] from main::bgcolor2 - CONIO_SCREEN_BANK#48 = phi( main::bgcolor2/CONIO_SCREEN_BANK#54 ) - CONIO_SCREEN_TEXT#44 = phi( main::bgcolor2/CONIO_SCREEN_TEXT#53 ) - to:main::@20 -main::@20: scope:[main] from main::@51 - CONIO_SCREEN_BANK#39 = phi( main::@51/CONIO_SCREEN_BANK#48 ) - CONIO_SCREEN_TEXT#25 = phi( main::@51/CONIO_SCREEN_TEXT#44 ) - call clrscr - to:main::@52 -main::@52: scope:[main] from main::@20 - CONIO_SCREEN_TEXT#34 = phi( main::@20/CONIO_SCREEN_TEXT#25 ) - CONIO_SCREEN_BANK#29 = phi( main::@20/CONIO_SCREEN_BANK#39 ) - to:main::@return -main::@return: scope:[main] from main::@52 - CONIO_SCREEN_TEXT#20 = phi( main::@52/CONIO_SCREEN_TEXT#34 ) - CONIO_SCREEN_BANK#18 = phi( main::@52/CONIO_SCREEN_BANK#29 ) - CONIO_SCREEN_BANK#6 = CONIO_SCREEN_BANK#18 - CONIO_SCREEN_TEXT#6 = CONIO_SCREEN_TEXT#20 - return - to:@return - -void __start() -__start: scope:[__start] from - to:__start::__init1 -__start::__init1: scope:[__start] from __start - CONIO_SCREEN_TEXT#7 = DEFAULT_SCREEN - CONIO_SCREEN_BANK#7 = 0 - conio_screen_width = 0 - conio_screen_height = 0 - conio_screen_layer = 1 - conio_width = 0 - conio_height = 0 - conio_rowshift = 0 - conio_rowskip = 0 - call conio_x16_init - to:__start::@2 -__start::@2: scope:[__start] from __start::__init1 - CONIO_SCREEN_TEXT#21 = phi( __start::__init1/CONIO_SCREEN_TEXT#1 ) - CONIO_SCREEN_BANK#19 = phi( __start::__init1/CONIO_SCREEN_BANK#1 ) - CONIO_SCREEN_BANK#8 = CONIO_SCREEN_BANK#19 - CONIO_SCREEN_TEXT#8 = CONIO_SCREEN_TEXT#21 - to:__start::@1 -__start::@1: scope:[__start] from __start::@2 - CONIO_SCREEN_TEXT#35 = phi( __start::@2/CONIO_SCREEN_TEXT#8 ) - CONIO_SCREEN_BANK#30 = phi( __start::@2/CONIO_SCREEN_BANK#8 ) - call main - to:__start::@3 -__start::@3: scope:[__start] from __start::@1 - CONIO_SCREEN_TEXT#22 = phi( __start::@1/CONIO_SCREEN_TEXT#6 ) - CONIO_SCREEN_BANK#20 = phi( __start::@1/CONIO_SCREEN_BANK#6 ) - CONIO_SCREEN_BANK#9 = CONIO_SCREEN_BANK#20 - CONIO_SCREEN_TEXT#9 = CONIO_SCREEN_TEXT#22 - to:__start::@return -__start::@return: scope:[__start] from __start::@3 - CONIO_SCREEN_BANK#21 = phi( __start::@3/CONIO_SCREEN_BANK#9 ) - CONIO_SCREEN_TEXT#23 = phi( __start::@3/CONIO_SCREEN_TEXT#9 ) - CONIO_SCREEN_TEXT#10 = CONIO_SCREEN_TEXT#23 - CONIO_SCREEN_BANK#10 = CONIO_SCREEN_BANK#21 - return - to:@return - -SYMBOL TABLE SSA -__constant const char BLACK = 0 -__constant const char BLUE = 6 -char CONIO_SCREEN_BANK -char CONIO_SCREEN_BANK#0 -char CONIO_SCREEN_BANK#1 -char CONIO_SCREEN_BANK#10 -char CONIO_SCREEN_BANK#100 -char CONIO_SCREEN_BANK#101 -char CONIO_SCREEN_BANK#102 -char CONIO_SCREEN_BANK#103 -char CONIO_SCREEN_BANK#104 -char CONIO_SCREEN_BANK#105 -char CONIO_SCREEN_BANK#106 -char CONIO_SCREEN_BANK#107 -char CONIO_SCREEN_BANK#11 -char CONIO_SCREEN_BANK#12 -char CONIO_SCREEN_BANK#13 -char CONIO_SCREEN_BANK#14 -char CONIO_SCREEN_BANK#15 -char CONIO_SCREEN_BANK#16 -char CONIO_SCREEN_BANK#17 -char CONIO_SCREEN_BANK#18 -char CONIO_SCREEN_BANK#19 -char CONIO_SCREEN_BANK#2 -char CONIO_SCREEN_BANK#20 -char CONIO_SCREEN_BANK#21 -char CONIO_SCREEN_BANK#22 -char CONIO_SCREEN_BANK#23 -char CONIO_SCREEN_BANK#24 -char CONIO_SCREEN_BANK#25 -char CONIO_SCREEN_BANK#26 -char CONIO_SCREEN_BANK#27 -char CONIO_SCREEN_BANK#28 -char CONIO_SCREEN_BANK#29 -char CONIO_SCREEN_BANK#3 -char CONIO_SCREEN_BANK#30 -char CONIO_SCREEN_BANK#31 -char CONIO_SCREEN_BANK#32 -char CONIO_SCREEN_BANK#33 -char CONIO_SCREEN_BANK#34 -char CONIO_SCREEN_BANK#35 -char CONIO_SCREEN_BANK#36 -char CONIO_SCREEN_BANK#37 -char CONIO_SCREEN_BANK#38 -char CONIO_SCREEN_BANK#39 -char CONIO_SCREEN_BANK#4 -char CONIO_SCREEN_BANK#40 -char CONIO_SCREEN_BANK#41 -char CONIO_SCREEN_BANK#42 -char CONIO_SCREEN_BANK#43 -char CONIO_SCREEN_BANK#44 -char CONIO_SCREEN_BANK#45 -char CONIO_SCREEN_BANK#46 -char CONIO_SCREEN_BANK#47 -char CONIO_SCREEN_BANK#48 -char CONIO_SCREEN_BANK#49 -char CONIO_SCREEN_BANK#5 -char CONIO_SCREEN_BANK#50 -char CONIO_SCREEN_BANK#51 -char CONIO_SCREEN_BANK#52 -char CONIO_SCREEN_BANK#53 -char CONIO_SCREEN_BANK#54 -char CONIO_SCREEN_BANK#55 -char CONIO_SCREEN_BANK#56 -char CONIO_SCREEN_BANK#57 -char CONIO_SCREEN_BANK#58 -char CONIO_SCREEN_BANK#59 -char CONIO_SCREEN_BANK#6 -char CONIO_SCREEN_BANK#60 -char CONIO_SCREEN_BANK#61 -char CONIO_SCREEN_BANK#62 -char CONIO_SCREEN_BANK#63 -char CONIO_SCREEN_BANK#64 -char CONIO_SCREEN_BANK#65 -char CONIO_SCREEN_BANK#66 -char CONIO_SCREEN_BANK#67 -char CONIO_SCREEN_BANK#68 -char CONIO_SCREEN_BANK#69 -char CONIO_SCREEN_BANK#7 -char CONIO_SCREEN_BANK#70 -char CONIO_SCREEN_BANK#71 -char CONIO_SCREEN_BANK#72 -char CONIO_SCREEN_BANK#73 -char CONIO_SCREEN_BANK#74 -char CONIO_SCREEN_BANK#75 -char CONIO_SCREEN_BANK#76 -char CONIO_SCREEN_BANK#77 -char CONIO_SCREEN_BANK#78 -char CONIO_SCREEN_BANK#79 -char CONIO_SCREEN_BANK#8 -char CONIO_SCREEN_BANK#80 -char CONIO_SCREEN_BANK#81 -char CONIO_SCREEN_BANK#82 -char CONIO_SCREEN_BANK#83 -char CONIO_SCREEN_BANK#84 -char CONIO_SCREEN_BANK#85 -char CONIO_SCREEN_BANK#86 -char CONIO_SCREEN_BANK#87 -char CONIO_SCREEN_BANK#88 -char CONIO_SCREEN_BANK#89 -char CONIO_SCREEN_BANK#9 -char CONIO_SCREEN_BANK#90 -char CONIO_SCREEN_BANK#91 -char CONIO_SCREEN_BANK#92 -char CONIO_SCREEN_BANK#93 -char CONIO_SCREEN_BANK#94 -char CONIO_SCREEN_BANK#95 -char CONIO_SCREEN_BANK#96 -char CONIO_SCREEN_BANK#97 -char CONIO_SCREEN_BANK#98 -char CONIO_SCREEN_BANK#99 -char *CONIO_SCREEN_TEXT -char *CONIO_SCREEN_TEXT#0 -char *CONIO_SCREEN_TEXT#1 -char *CONIO_SCREEN_TEXT#10 -char *CONIO_SCREEN_TEXT#100 -char *CONIO_SCREEN_TEXT#101 -char *CONIO_SCREEN_TEXT#102 -char *CONIO_SCREEN_TEXT#103 -char *CONIO_SCREEN_TEXT#104 -char *CONIO_SCREEN_TEXT#105 -char *CONIO_SCREEN_TEXT#106 -char *CONIO_SCREEN_TEXT#107 -char *CONIO_SCREEN_TEXT#108 -char *CONIO_SCREEN_TEXT#109 -char *CONIO_SCREEN_TEXT#11 -char *CONIO_SCREEN_TEXT#110 -char *CONIO_SCREEN_TEXT#111 -char *CONIO_SCREEN_TEXT#112 -char *CONIO_SCREEN_TEXT#113 -char *CONIO_SCREEN_TEXT#114 -char *CONIO_SCREEN_TEXT#12 -char *CONIO_SCREEN_TEXT#13 -char *CONIO_SCREEN_TEXT#14 -char *CONIO_SCREEN_TEXT#15 -char *CONIO_SCREEN_TEXT#16 -char *CONIO_SCREEN_TEXT#17 -char *CONIO_SCREEN_TEXT#18 -char *CONIO_SCREEN_TEXT#19 -char *CONIO_SCREEN_TEXT#2 -char *CONIO_SCREEN_TEXT#20 -char *CONIO_SCREEN_TEXT#21 -char *CONIO_SCREEN_TEXT#22 -char *CONIO_SCREEN_TEXT#23 -char *CONIO_SCREEN_TEXT#24 -char *CONIO_SCREEN_TEXT#25 -char *CONIO_SCREEN_TEXT#26 -char *CONIO_SCREEN_TEXT#27 -char *CONIO_SCREEN_TEXT#28 -char *CONIO_SCREEN_TEXT#29 -char *CONIO_SCREEN_TEXT#3 -char *CONIO_SCREEN_TEXT#30 -char *CONIO_SCREEN_TEXT#31 -char *CONIO_SCREEN_TEXT#32 -char *CONIO_SCREEN_TEXT#33 -char *CONIO_SCREEN_TEXT#34 -char *CONIO_SCREEN_TEXT#35 -char *CONIO_SCREEN_TEXT#36 -char *CONIO_SCREEN_TEXT#37 -char *CONIO_SCREEN_TEXT#38 -char *CONIO_SCREEN_TEXT#39 -char *CONIO_SCREEN_TEXT#4 -char *CONIO_SCREEN_TEXT#40 -char *CONIO_SCREEN_TEXT#41 -char *CONIO_SCREEN_TEXT#42 -char *CONIO_SCREEN_TEXT#43 -char *CONIO_SCREEN_TEXT#44 -char *CONIO_SCREEN_TEXT#45 -char *CONIO_SCREEN_TEXT#46 -char *CONIO_SCREEN_TEXT#47 -char *CONIO_SCREEN_TEXT#48 -char *CONIO_SCREEN_TEXT#49 -char *CONIO_SCREEN_TEXT#5 -char *CONIO_SCREEN_TEXT#50 -char *CONIO_SCREEN_TEXT#51 -char *CONIO_SCREEN_TEXT#52 -char *CONIO_SCREEN_TEXT#53 -char *CONIO_SCREEN_TEXT#54 -char *CONIO_SCREEN_TEXT#55 -char *CONIO_SCREEN_TEXT#56 -char *CONIO_SCREEN_TEXT#57 -char *CONIO_SCREEN_TEXT#58 -char *CONIO_SCREEN_TEXT#59 -char *CONIO_SCREEN_TEXT#6 -char *CONIO_SCREEN_TEXT#60 -char *CONIO_SCREEN_TEXT#61 -char *CONIO_SCREEN_TEXT#62 -char *CONIO_SCREEN_TEXT#63 -char *CONIO_SCREEN_TEXT#64 -char *CONIO_SCREEN_TEXT#65 -char *CONIO_SCREEN_TEXT#66 -char *CONIO_SCREEN_TEXT#67 -char *CONIO_SCREEN_TEXT#68 -char *CONIO_SCREEN_TEXT#69 -char *CONIO_SCREEN_TEXT#7 -char *CONIO_SCREEN_TEXT#70 -char *CONIO_SCREEN_TEXT#71 -char *CONIO_SCREEN_TEXT#72 -char *CONIO_SCREEN_TEXT#73 -char *CONIO_SCREEN_TEXT#74 -char *CONIO_SCREEN_TEXT#75 -char *CONIO_SCREEN_TEXT#76 -char *CONIO_SCREEN_TEXT#77 -char *CONIO_SCREEN_TEXT#78 -char *CONIO_SCREEN_TEXT#79 -char *CONIO_SCREEN_TEXT#8 -char *CONIO_SCREEN_TEXT#80 -char *CONIO_SCREEN_TEXT#81 -char *CONIO_SCREEN_TEXT#82 -char *CONIO_SCREEN_TEXT#83 -char *CONIO_SCREEN_TEXT#84 -char *CONIO_SCREEN_TEXT#85 -char *CONIO_SCREEN_TEXT#86 -char *CONIO_SCREEN_TEXT#87 -char *CONIO_SCREEN_TEXT#88 -char *CONIO_SCREEN_TEXT#89 -char *CONIO_SCREEN_TEXT#9 -char *CONIO_SCREEN_TEXT#90 -char *CONIO_SCREEN_TEXT#91 -char *CONIO_SCREEN_TEXT#92 -char *CONIO_SCREEN_TEXT#93 -char *CONIO_SCREEN_TEXT#94 -char *CONIO_SCREEN_TEXT#95 -char *CONIO_SCREEN_TEXT#96 -char *CONIO_SCREEN_TEXT#97 -char *CONIO_SCREEN_TEXT#98 -char *CONIO_SCREEN_TEXT#99 -__constant char * const DEFAULT_SCREEN = (char *)0 -__constant char RADIX::BINARY = 2 -__constant char RADIX::DECIMAL = $a -__constant char RADIX::HEXADECIMAL = $10 -__constant char RADIX::OCTAL = 8 -__constant char SIZEOF_POINTER = 2 -__constant char SIZEOF_UNSIGNED_INT = 2 -__constant char SIZEOF_UNSIGNED_LONG = 4 -__constant unsigned int STACK_BASE = $103 -__constant const char VERA_ADDRSEL = 1 -__constant char * const VERA_ADDRX_H = (char *)$9f22 -__constant char * const VERA_ADDRX_L = (char *)$9f20 -__constant char * const VERA_ADDRX_M = (char *)$9f21 -__constant char * const VERA_CTRL = (char *)$9f25 -__constant char * const VERA_DATA0 = (char *)$9f23 -__constant char * const VERA_DATA1 = (char *)$9f24 -__constant char * const VERA_DC_HSCALE = (char *)$9f2a -__constant char * const VERA_DC_VIDEO = (char *)$9f29 -__constant char * const VERA_DC_VSCALE = (char *)$9f2b -__constant const char VERA_INC_1 = $10 -__constant char * const VERA_L0_CONFIG = (char *)$9f2d -__constant char * const VERA_L0_MAPBASE = (char *)$9f2e -__constant char * const VERA_L0_TILEBASE = (char *)$9f2f -__constant char * const VERA_L1_CONFIG = (char *)$9f34 -__constant char * const VERA_L1_MAPBASE = (char *)$9f35 -__constant char * const VERA_L1_TILEBASE = (char *)$9f36 -__constant const char VERA_LAYER0_ENABLE = $10 -__constant const char VERA_LAYER1_ENABLE = $20 -__constant const char VERA_LAYER_COLOR_DEPTH_1BPP = 0 -__constant const char VERA_LAYER_COLOR_DEPTH_2BPP = 1 -__constant const char VERA_LAYER_COLOR_DEPTH_4BPP = 2 -__constant const char VERA_LAYER_COLOR_DEPTH_8BPP = 3 -__constant const char VERA_LAYER_CONFIG_16C = 0 -__constant const char VERA_LAYER_CONFIG_256C = 8 -__constant const unsigned int VERA_LAYER_HEIGHT[4] = { $20, $40, $80, $100 } -__constant const char VERA_LAYER_HEIGHT_128 = $80 -__constant const char VERA_LAYER_HEIGHT_256 = $c0 -__constant const char VERA_LAYER_HEIGHT_32 = 0 -__constant const char VERA_LAYER_HEIGHT_64 = $40 -__constant const char VERA_LAYER_HEIGHT_MASK = $c0 -__constant const char VERA_LAYER_TILEBASE_MASK = $fc -__constant const unsigned int VERA_LAYER_WIDTH[4] = { $20, $40, $80, $100 } -__constant const char VERA_LAYER_WIDTH_128 = $20 -__constant const char VERA_LAYER_WIDTH_256 = $30 -__constant const char VERA_LAYER_WIDTH_32 = 0 -__constant const char VERA_LAYER_WIDTH_64 = $10 -__constant const char VERA_LAYER_WIDTH_MASK = $30 -__constant const char VERA_TILEBASE_HEIGHT_16 = 2 -__constant const char VERA_TILEBASE_HEIGHT_8 = 0 -__constant const char VERA_TILEBASE_WIDTH_16 = 1 -__constant const char VERA_TILEBASE_WIDTH_8 = 0 -__constant const char WHITE = 1 -void __start() -void clearline() -char clearline::$1 -char clearline::$2 -bool clearline::$4 -char clearline::$5 -char *clearline::addr -char *clearline::addr#0 -unsigned int clearline::c -unsigned int clearline::c#0 -unsigned int clearline::c#1 -unsigned int clearline::c#2 -unsigned int clearline::c#3 -char clearline::color -char clearline::color#0 -char clearline::color#1 -char clearline::color#2 -void clrscr() -char clrscr::$0 -char clrscr::$1 -char clrscr::$2 -bool clrscr::$4 -char clrscr::$5 -char clrscr::$6 -char clrscr::$7 -bool clrscr::$8 -char clrscr::$9 -char clrscr::c -char clrscr::c#0 -char clrscr::c#1 -char clrscr::c#2 -char clrscr::c#3 -char *clrscr::ch -char *clrscr::ch#0 -char clrscr::color -char clrscr::color#0 -char clrscr::color#1 -char clrscr::color#2 -char clrscr::color#3 -char clrscr::color#4 -char clrscr::color#5 -char clrscr::l -char clrscr::l#0 -char clrscr::l#1 -char clrscr::l#2 -char clrscr::l#3 -char clrscr::l#4 -char clrscr::l#5 -char clrscr::l#6 -char *clrscr::line_text -char *clrscr::line_text#0 -char *clrscr::line_text#1 -char *clrscr::line_text#2 -char *clrscr::line_text#3 -char *clrscr::line_text#4 -char *clrscr::line_text#5 -char *clrscr::line_text#6 -char *clrscr::line_text#7 -char *clrscr::line_text#8 -__constant char conio_cursor_x[2] = { 0, 0 } -__constant char conio_cursor_y[2] = { 0, 0 } -__loadstore unsigned int conio_height -__constant unsigned int conio_line_text[2] = { 0, 0 } -__loadstore char conio_rowshift -__loadstore unsigned int conio_rowskip -__loadstore volatile char conio_screen_height -__loadstore char conio_screen_layer -__loadstore volatile char conio_screen_width -__constant char conio_scroll_enable[2] = { 1, 1 } -__loadstore unsigned int conio_width -void conio_x16_init() -bool conio_x16_init::$7 -bool conio_x16_init::$8 -number conio_x16_init::$9 -__constant char * const conio_x16_init::BASIC_CURSOR_LINE = (char *)$d6 -char conio_x16_init::line -char conio_x16_init::line#0 -char conio_x16_init::line#1 -char conio_x16_init::line#2 -char conio_x16_init::line#3 -char conio_x16_init::line#4 -char conio_x16_init::line#5 -char conio_x16_init::line#6 -char conio_x16_init::line#7 -char conio_x16_init::line#8 -char conio_x16_init::line#9 -__stackcall void cputc(char c) -bool cputc::$11 -bool cputc::$12 -char cputc::$15 -unsigned int cputc::$16 -bool cputc::$17 -char cputc::$2 -bool cputc::$3 -char cputc::$4 -char cputc::$5 -char cputc::$6 -bool cputc::$8 -bool cputc::$9 -__constant char cputc::OFFSET_STACK_C = 0 -char cputc::c -char cputc::c#0 -char cputc::c#1 -char cputc::c#2 -char cputc::color -char cputc::color#0 -char cputc::color#1 -char *cputc::conio_addr -char *cputc::conio_addr#0 -char *cputc::conio_addr#1 -char *cputc::conio_addr#2 -char cputc::scroll_enable -char cputc::scroll_enable#0 -void cputln() -char cputln::$2 -char cputln::$3 -unsigned int cputln::temp -unsigned int cputln::temp#0 -unsigned int cputln::temp#1 -void cscroll() -bool cscroll::$0 -bool cscroll::$1 -bool cscroll::$2 -bool cscroll::$3 -number cscroll::$5 -bool cscroll::$7 -void gotoxy(char x , char y) -bool gotoxy::$0 -bool gotoxy::$1 -bool gotoxy::$2 -bool gotoxy::$3 -char gotoxy::$5 -unsigned int gotoxy::$6 -unsigned int gotoxy::line_offset -unsigned int gotoxy::line_offset#0 -char gotoxy::x -char gotoxy::x#0 -char gotoxy::x#1 -char gotoxy::x#2 -char gotoxy::x#3 -char gotoxy::x#4 -char gotoxy::x#5 -char gotoxy::x#6 -char gotoxy::x#7 -char gotoxy::y -char gotoxy::y#0 -char gotoxy::y#1 -char gotoxy::y#2 -char gotoxy::y#3 -char gotoxy::y#4 -char gotoxy::y#5 -char gotoxy::y#6 -char gotoxy::y#7 -void insertup() -bool insertup::$2 -number insertup::$3 -char *insertup::$6 -char insertup::cy -char insertup::cy#0 -char insertup::cy#1 -char insertup::cy#2 -char insertup::cy#3 -char insertup::i -char insertup::i#0 -char insertup::i#1 -char insertup::i#2 -char insertup::i#3 -char insertup::i#4 -unsigned int insertup::line -unsigned int insertup::line#0 -char *insertup::start -char *insertup::start#0 -char insertup::width -char insertup::width#0 -char insertup::width#1 -char insertup::width#2 -char insertup::width#3 -char kbhit() -__constant char * const kbhit::GETIN = (char *)$ffe4 -__constant char * const kbhit::IN_DEV = (char *)$28a -__loadstore volatile char kbhit::ch -__constant char * const kbhit::chptr = &kbhit::ch -char kbhit::return -char kbhit::return#0 -char kbhit::return#1 -char kbhit::return#2 -char kbhit::return#3 -char kbhit::return#4 -char kbhit::return#5 -char kbhit::return#6 -void main() -bool main::$29 -bool main::$31 -bool main::$33 -bool main::$34 -char main::$35 -bool main::$36 -bool main::$38 -bool main::$39 -char main::$40 -bool main::$41 -bool main::$42 -bool main::$43 -char main::bgcolor1_color -char main::bgcolor1_color#0 -char main::bgcolor1_color#1 -char main::bgcolor2_color -char main::bgcolor2_color#0 -char main::bgcolor2_color#1 -char main::c -char main::c#0 -char main::c#1 -char main::c#2 -char main::c#3 -char main::c1 -char main::c1#0 -char main::c1#1 -char main::c1#2 -char main::c1#3 -char main::column -char main::column#0 -char main::column#1 -char main::column#2 -char main::column#3 -char main::column1 -char main::column1#0 -char main::column1#1 -char main::column1#2 -char main::column1#3 -char main::p -char main::p#0 -char main::p#1 -char main::p#2 -char main::r -char main::r#0 -char main::r#1 -char main::r#2 -char main::r#3 -char main::r#4 -char main::r#5 -char main::r1 -char main::r1#0 -char main::r1#1 -char main::r1#2 -char main::r1#3 -char main::r1#4 -char main::r1#5 -char main::row -char main::row#0 -char main::row#1 -char main::row#10 -char main::row#11 -char main::row#2 -char main::row#3 -char main::row#4 -char main::row#5 -char main::row#6 -char main::row#7 -char main::row#8 -char main::row#9 -__constant char main::s[$38] = "vera in tile mode 8 x 8, color depth 8 bits per pixel. -" -__constant char main::s1[$3a] = "in this mode, tiles are 8 pixels wide and 8 pixels tall. -" -__constant char main::s2[$2f] = "each tile can have a variation of 256 colors. -" -__constant char main::s3[$44] = "the vera palette of 256 colors, can be used by setting the palette -" -__constant char main::s4[$17] = "offset for each tile. -" -__constant char main::s5[$4b] = "here each column is displaying the same tile, but with different offsets! -" -__constant char main::s6[$3f] = "each offset aligns to multiples of 16 colors in the palette!. -" -__constant char main::s7[$3e] = "however, the first color will always be transparent (black). -" -char main::t -char main::t#0 -char main::t#1 -char main::t#2 -char main::t#3 -char main::t#4 -char main::t#5 -char main::textcolor1_color -char main::textcolor1_color#0 -char main::textcolor1_color#1 -char main::textcolor2_color -char main::textcolor2_color#0 -char main::textcolor2_color#1 -unsigned int main::tile -unsigned int main::tile#0 -unsigned int main::tile#1 -unsigned int main::tile#10 -unsigned int main::tile#11 -unsigned int main::tile#12 -unsigned int main::tile#13 -unsigned int main::tile#2 -unsigned int main::tile#3 -unsigned int main::tile#4 -unsigned int main::tile#5 -unsigned int main::tile#6 -unsigned int main::tile#7 -unsigned int main::tile#8 -unsigned int main::tile#9 -char *main::tilebase -char *main::tilebase#0 -char *main::tilebase#1 -char *main::tilebase#2 -char *main::tilebase#3 -char *main::tilebase#4 -char *main::tilebase#5 -char *main::tilebase#6 -char *main::tilebase#7 -__constant char main::tiles[$100] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -char main::vera_layer_hide1_$0 -char main::vera_layer_hide1_layer -char main::vera_layer_hide1_layer#0 -char main::vera_layer_hide1_layer#1 -char main::vera_layer_show1_layer -char main::vera_layer_show1_layer#0 -char main::vera_layer_show1_layer#1 -void memcpy_in_vram(char dest_bank , void *dest , char dest_increment , char src_bank , void *src , char src_increment , unsigned int num) -char memcpy_in_vram::$0 -char memcpy_in_vram::$1 -char memcpy_in_vram::$2 -char memcpy_in_vram::$3 -char memcpy_in_vram::$4 -char memcpy_in_vram::$5 -bool memcpy_in_vram::$6 -void *memcpy_in_vram::dest -void *memcpy_in_vram::dest#0 -void *memcpy_in_vram::dest#1 -void *memcpy_in_vram::dest#2 -void *memcpy_in_vram::dest#3 -char memcpy_in_vram::dest_bank -char memcpy_in_vram::dest_bank#0 -char memcpy_in_vram::dest_bank#1 -char memcpy_in_vram::dest_bank#2 -char memcpy_in_vram::dest_bank#3 -char memcpy_in_vram::dest_increment -char memcpy_in_vram::dest_increment#0 -char memcpy_in_vram::dest_increment#1 -char memcpy_in_vram::dest_increment#2 -char memcpy_in_vram::dest_increment#3 -unsigned int memcpy_in_vram::i -unsigned int memcpy_in_vram::i#0 -unsigned int memcpy_in_vram::i#1 -unsigned int memcpy_in_vram::i#2 -unsigned int memcpy_in_vram::i#3 -unsigned int memcpy_in_vram::num -unsigned int memcpy_in_vram::num#0 -unsigned int memcpy_in_vram::num#1 -unsigned int memcpy_in_vram::num#2 -unsigned int memcpy_in_vram::num#3 -unsigned int memcpy_in_vram::num#4 -unsigned int memcpy_in_vram::num#5 -void *memcpy_in_vram::src -void *memcpy_in_vram::src#0 -void *memcpy_in_vram::src#1 -void *memcpy_in_vram::src#2 -void *memcpy_in_vram::src#3 -char memcpy_in_vram::src_bank -char memcpy_in_vram::src_bank#0 -char memcpy_in_vram::src_bank#1 -char memcpy_in_vram::src_bank#2 -char memcpy_in_vram::src_bank#3 -char memcpy_in_vram::src_increment -char memcpy_in_vram::src_increment#0 -char memcpy_in_vram::src_increment#1 -char memcpy_in_vram::src_increment#2 -char memcpy_in_vram::src_increment#3 -void memcpy_to_vram(char vbank , void *vdest , void *src , unsigned int num) -char memcpy_to_vram::$0 -char memcpy_to_vram::$1 -char memcpy_to_vram::$2 -bool memcpy_to_vram::$4 -char *memcpy_to_vram::$5 -char *memcpy_to_vram::end -char *memcpy_to_vram::end#0 -char *memcpy_to_vram::end#1 -char *memcpy_to_vram::end#2 -unsigned int memcpy_to_vram::num -unsigned int memcpy_to_vram::num#0 -unsigned int memcpy_to_vram::num#1 -unsigned int memcpy_to_vram::num#2 -char *memcpy_to_vram::s -char *memcpy_to_vram::s#0 -char *memcpy_to_vram::s#1 -char *memcpy_to_vram::s#2 -char *memcpy_to_vram::s#3 -void *memcpy_to_vram::src -void *memcpy_to_vram::src#0 -void *memcpy_to_vram::src#1 -void *memcpy_to_vram::src#2 -char memcpy_to_vram::vbank -char memcpy_to_vram::vbank#0 -char memcpy_to_vram::vbank#1 -char memcpy_to_vram::vbank#2 -void *memcpy_to_vram::vdest -void *memcpy_to_vram::vdest#0 -void *memcpy_to_vram::vdest#1 -void *memcpy_to_vram::vdest#2 -void printf_str(void (*putc)(char) , const char *s) -char printf_str::$0 -bool printf_str::$2 -char printf_str::c -char printf_str::c#0 -char printf_str::c#1 -char printf_str::c#2 -void (*printf_str::putc)(char) -void (*printf_str::putc#0)(char) -void (*printf_str::putc#1)(char) -void (*printf_str::putc#10)(char) -void (*printf_str::putc#2)(char) -void (*printf_str::putc#3)(char) -void (*printf_str::putc#4)(char) -void (*printf_str::putc#5)(char) -void (*printf_str::putc#6)(char) -void (*printf_str::putc#7)(char) -void (*printf_str::putc#8)(char) -void (*printf_str::putc#9)(char) -const char *printf_str::s -const char *printf_str::s#0 -const char *printf_str::s#1 -const char *printf_str::s#10 -const char *printf_str::s#11 -const char *printf_str::s#2 -const char *printf_str::s#3 -const char *printf_str::s#4 -const char *printf_str::s#5 -const char *printf_str::s#6 -const char *printf_str::s#7 -const char *printf_str::s#8 -const char *printf_str::s#9 -void screenlayer(char layer) -char screenlayer::$0 -unsigned int screenlayer::$1 -unsigned int screenlayer::$2 -char screenlayer::$3 -unsigned int screenlayer::$4 -unsigned int screenlayer::$5 -char screenlayer::layer -char screenlayer::layer#0 -char screenlayer::layer#1 -char screenlayer::layer#2 -char screenlayer::layer#3 -char screenlayer::vera_layer_get_height1_$0 -char screenlayer::vera_layer_get_height1_$1 -char screenlayer::vera_layer_get_height1_$2 -char screenlayer::vera_layer_get_height1_$3 -char *screenlayer::vera_layer_get_height1_config -char *screenlayer::vera_layer_get_height1_config#0 -char screenlayer::vera_layer_get_height1_layer -char screenlayer::vera_layer_get_height1_layer#0 -char screenlayer::vera_layer_get_height1_layer#1 -unsigned int screenlayer::vera_layer_get_height1_return -unsigned int screenlayer::vera_layer_get_height1_return#0 -unsigned int screenlayer::vera_layer_get_height1_return#1 -unsigned int screenlayer::vera_layer_get_height1_return#2 -unsigned int screenlayer::vera_layer_get_height1_return#3 -char screenlayer::vera_layer_get_width1_$0 -char screenlayer::vera_layer_get_width1_$1 -char screenlayer::vera_layer_get_width1_$2 -char screenlayer::vera_layer_get_width1_$3 -char *screenlayer::vera_layer_get_width1_config -char *screenlayer::vera_layer_get_width1_config#0 -char screenlayer::vera_layer_get_width1_layer -char screenlayer::vera_layer_get_width1_layer#0 -char screenlayer::vera_layer_get_width1_layer#1 -unsigned int screenlayer::vera_layer_get_width1_return -unsigned int screenlayer::vera_layer_get_width1_return#0 -unsigned int screenlayer::vera_layer_get_width1_return#1 -unsigned int screenlayer::vera_layer_get_width1_return#2 -unsigned int screenlayer::vera_layer_get_width1_return#3 -void screensize(char *x , char *y) -number screensize::$1 -number screensize::$3 -char screensize::hscale -char screensize::hscale#0 -char screensize::vscale -char screensize::vscale#0 -char *screensize::x -char *screensize::x#0 -char *screensize::x#1 -char *screensize::y -char *screensize::y#0 -char *screensize::y#1 -__constant char vera_layer_backcolor[2] = { BLUE, BLUE } -__constant char *vera_layer_config[2] = { VERA_L0_CONFIG, VERA_L1_CONFIG } -__constant char vera_layer_enable[2] = { VERA_LAYER0_ENABLE, VERA_LAYER1_ENABLE } -char vera_layer_get_backcolor(char layer) -char vera_layer_get_backcolor::layer -char vera_layer_get_backcolor::layer#0 -char vera_layer_get_backcolor::layer#1 -char vera_layer_get_backcolor::return -char vera_layer_get_backcolor::return#0 -char vera_layer_get_backcolor::return#1 -char vera_layer_get_backcolor::return#2 -char vera_layer_get_backcolor::return#3 -char vera_layer_get_backcolor::return#4 -char vera_layer_get_color(char layer) -char vera_layer_get_color::$0 -char vera_layer_get_color::$1 -char vera_layer_get_color::$2 -char vera_layer_get_color::$3 -bool vera_layer_get_color::$4 -char *vera_layer_get_color::addr -char *vera_layer_get_color::addr#0 -char vera_layer_get_color::layer -char vera_layer_get_color::layer#0 -char vera_layer_get_color::layer#1 -char vera_layer_get_color::layer#2 -char vera_layer_get_color::layer#3 -char vera_layer_get_color::layer#4 -char vera_layer_get_color::return -char vera_layer_get_color::return#0 -char vera_layer_get_color::return#1 -char vera_layer_get_color::return#2 -char vera_layer_get_color::return#3 -char vera_layer_get_color::return#4 -char vera_layer_get_color::return#5 -char vera_layer_get_color::return#6 -char vera_layer_get_color::return#7 -char vera_layer_get_mapbase_bank(char layer) -char vera_layer_get_mapbase_bank::layer -char vera_layer_get_mapbase_bank::layer#0 -char vera_layer_get_mapbase_bank::layer#1 -char vera_layer_get_mapbase_bank::return -char vera_layer_get_mapbase_bank::return#0 -char vera_layer_get_mapbase_bank::return#1 -char vera_layer_get_mapbase_bank::return#2 -char vera_layer_get_mapbase_bank::return#3 -char vera_layer_get_mapbase_bank::return#4 -unsigned int vera_layer_get_mapbase_offset(char layer) -char vera_layer_get_mapbase_offset::$0 -char vera_layer_get_mapbase_offset::layer -char vera_layer_get_mapbase_offset::layer#0 -char vera_layer_get_mapbase_offset::layer#1 -unsigned int vera_layer_get_mapbase_offset::return -unsigned int vera_layer_get_mapbase_offset::return#0 -unsigned int vera_layer_get_mapbase_offset::return#1 -unsigned int vera_layer_get_mapbase_offset::return#2 -unsigned int vera_layer_get_mapbase_offset::return#3 -unsigned int vera_layer_get_mapbase_offset::return#4 -char vera_layer_get_rowshift(char layer) -char vera_layer_get_rowshift::layer -char vera_layer_get_rowshift::layer#0 -char vera_layer_get_rowshift::layer#1 -char vera_layer_get_rowshift::return -char vera_layer_get_rowshift::return#0 -char vera_layer_get_rowshift::return#1 -char vera_layer_get_rowshift::return#2 -char vera_layer_get_rowshift::return#3 -char vera_layer_get_rowshift::return#4 -unsigned int vera_layer_get_rowskip(char layer) -char vera_layer_get_rowskip::$0 -char vera_layer_get_rowskip::layer -char vera_layer_get_rowskip::layer#0 -char vera_layer_get_rowskip::layer#1 -unsigned int vera_layer_get_rowskip::return -unsigned int vera_layer_get_rowskip::return#0 -unsigned int vera_layer_get_rowskip::return#1 -unsigned int vera_layer_get_rowskip::return#2 -unsigned int vera_layer_get_rowskip::return#3 -unsigned int vera_layer_get_rowskip::return#4 -char vera_layer_get_textcolor(char layer) -char vera_layer_get_textcolor::layer -char vera_layer_get_textcolor::layer#0 -char vera_layer_get_textcolor::layer#1 -char vera_layer_get_textcolor::return -char vera_layer_get_textcolor::return#0 -char vera_layer_get_textcolor::return#1 -char vera_layer_get_textcolor::return#2 -char vera_layer_get_textcolor::return#3 -char vera_layer_get_textcolor::return#4 -__constant const char vera_layer_hflip[2] = { 0, 4 } -__constant char *vera_layer_mapbase[2] = { VERA_L0_MAPBASE, VERA_L1_MAPBASE } -void vera_layer_mode_text(char layer , unsigned long mapbase_address , unsigned long tilebase_address , unsigned int mapwidth , unsigned int mapheight , char tilewidth , char tileheight , unsigned int color_mode) -unsigned int vera_layer_mode_text::color_mode -unsigned int vera_layer_mode_text::color_mode#0 -unsigned int vera_layer_mode_text::color_mode#1 -unsigned int vera_layer_mode_text::color_mode#2 -unsigned int vera_layer_mode_text::color_mode#3 -char vera_layer_mode_text::layer -char vera_layer_mode_text::layer#0 -char vera_layer_mode_text::layer#1 -char vera_layer_mode_text::layer#2 -char vera_layer_mode_text::layer#3 -char vera_layer_mode_text::layer#4 -char vera_layer_mode_text::layer#5 -unsigned long vera_layer_mode_text::mapbase_address -unsigned long vera_layer_mode_text::mapbase_address#0 -unsigned long vera_layer_mode_text::mapbase_address#1 -unsigned int vera_layer_mode_text::mapheight -unsigned int vera_layer_mode_text::mapheight#0 -unsigned int vera_layer_mode_text::mapheight#1 -unsigned int vera_layer_mode_text::mapwidth -unsigned int vera_layer_mode_text::mapwidth#0 -unsigned int vera_layer_mode_text::mapwidth#1 -unsigned long vera_layer_mode_text::tilebase_address -unsigned long vera_layer_mode_text::tilebase_address#0 -unsigned long vera_layer_mode_text::tilebase_address#1 -char vera_layer_mode_text::tileheight -char vera_layer_mode_text::tileheight#0 -char vera_layer_mode_text::tileheight#1 -char vera_layer_mode_text::tilewidth -char vera_layer_mode_text::tilewidth#0 -char vera_layer_mode_text::tilewidth#1 -void vera_layer_mode_tile(char layer , unsigned long mapbase_address , unsigned long tilebase_address , unsigned int mapwidth , unsigned int mapheight , char tilewidth , char tileheight , char color_depth) -unsigned int vera_layer_mode_tile::$1 -char vera_layer_mode_tile::$11 -char vera_layer_mode_tile::$12 -char vera_layer_mode_tile::$13 -char vera_layer_mode_tile::$14 -char vera_layer_mode_tile::$15 -char vera_layer_mode_tile::$16 -char vera_layer_mode_tile::$17 -char vera_layer_mode_tile::$18 -char vera_layer_mode_tile::$2 -unsigned long vera_layer_mode_tile::$3 -unsigned int vera_layer_mode_tile::$6 -char vera_layer_mode_tile::$7 -unsigned long vera_layer_mode_tile::$8 -char vera_layer_mode_tile::color_depth -char vera_layer_mode_tile::color_depth#0 -char vera_layer_mode_tile::color_depth#1 -char vera_layer_mode_tile::color_depth#2 -char vera_layer_mode_tile::color_depth#3 -char vera_layer_mode_tile::color_depth#4 -char vera_layer_mode_tile::color_depth#5 -char vera_layer_mode_tile::color_depth#6 -char vera_layer_mode_tile::color_depth#7 -char vera_layer_mode_tile::color_depth#8 -char vera_layer_mode_tile::config -char vera_layer_mode_tile::config#0 -char vera_layer_mode_tile::config#1 -char vera_layer_mode_tile::config#10 -char vera_layer_mode_tile::config#11 -char vera_layer_mode_tile::config#12 -char vera_layer_mode_tile::config#13 -char vera_layer_mode_tile::config#14 -char vera_layer_mode_tile::config#15 -char vera_layer_mode_tile::config#16 -char vera_layer_mode_tile::config#17 -char vera_layer_mode_tile::config#18 -char vera_layer_mode_tile::config#19 -char vera_layer_mode_tile::config#2 -char vera_layer_mode_tile::config#20 -char vera_layer_mode_tile::config#21 -char vera_layer_mode_tile::config#22 -char vera_layer_mode_tile::config#23 -char vera_layer_mode_tile::config#24 -char vera_layer_mode_tile::config#25 -char vera_layer_mode_tile::config#26 -char vera_layer_mode_tile::config#27 -char vera_layer_mode_tile::config#28 -char vera_layer_mode_tile::config#29 -char vera_layer_mode_tile::config#3 -char vera_layer_mode_tile::config#30 -char vera_layer_mode_tile::config#31 -char vera_layer_mode_tile::config#32 -char vera_layer_mode_tile::config#33 -char vera_layer_mode_tile::config#34 -char vera_layer_mode_tile::config#35 -char vera_layer_mode_tile::config#36 -char vera_layer_mode_tile::config#4 -char vera_layer_mode_tile::config#5 -char vera_layer_mode_tile::config#6 -char vera_layer_mode_tile::config#7 -char vera_layer_mode_tile::config#8 -char vera_layer_mode_tile::config#9 -char vera_layer_mode_tile::layer -char vera_layer_mode_tile::layer#0 -char vera_layer_mode_tile::layer#1 -char vera_layer_mode_tile::layer#10 -char vera_layer_mode_tile::layer#11 -char vera_layer_mode_tile::layer#12 -char vera_layer_mode_tile::layer#13 -char vera_layer_mode_tile::layer#14 -char vera_layer_mode_tile::layer#15 -char vera_layer_mode_tile::layer#16 -char vera_layer_mode_tile::layer#17 -char vera_layer_mode_tile::layer#18 -char vera_layer_mode_tile::layer#19 -char vera_layer_mode_tile::layer#2 -char vera_layer_mode_tile::layer#20 -char vera_layer_mode_tile::layer#21 -char vera_layer_mode_tile::layer#22 -char vera_layer_mode_tile::layer#23 -char vera_layer_mode_tile::layer#24 -char vera_layer_mode_tile::layer#25 -char vera_layer_mode_tile::layer#26 -char vera_layer_mode_tile::layer#27 -char vera_layer_mode_tile::layer#28 -char vera_layer_mode_tile::layer#29 -char vera_layer_mode_tile::layer#3 -char vera_layer_mode_tile::layer#30 -char vera_layer_mode_tile::layer#31 -char vera_layer_mode_tile::layer#32 -char vera_layer_mode_tile::layer#33 -char vera_layer_mode_tile::layer#34 -char vera_layer_mode_tile::layer#35 -char vera_layer_mode_tile::layer#36 -char vera_layer_mode_tile::layer#37 -char vera_layer_mode_tile::layer#38 -char vera_layer_mode_tile::layer#39 -char vera_layer_mode_tile::layer#4 -char vera_layer_mode_tile::layer#5 -char vera_layer_mode_tile::layer#6 -char vera_layer_mode_tile::layer#7 -char vera_layer_mode_tile::layer#8 -char vera_layer_mode_tile::layer#9 -char vera_layer_mode_tile::mapbase -char vera_layer_mode_tile::mapbase#0 -unsigned long vera_layer_mode_tile::mapbase_address -unsigned long vera_layer_mode_tile::mapbase_address#0 -unsigned long vera_layer_mode_tile::mapbase_address#1 -unsigned long vera_layer_mode_tile::mapbase_address#10 -unsigned long vera_layer_mode_tile::mapbase_address#11 -unsigned long vera_layer_mode_tile::mapbase_address#12 -unsigned long vera_layer_mode_tile::mapbase_address#13 -unsigned long vera_layer_mode_tile::mapbase_address#14 -unsigned long vera_layer_mode_tile::mapbase_address#15 -unsigned long vera_layer_mode_tile::mapbase_address#16 -unsigned long vera_layer_mode_tile::mapbase_address#17 -unsigned long vera_layer_mode_tile::mapbase_address#18 -unsigned long vera_layer_mode_tile::mapbase_address#19 -unsigned long vera_layer_mode_tile::mapbase_address#2 -unsigned long vera_layer_mode_tile::mapbase_address#20 -unsigned long vera_layer_mode_tile::mapbase_address#21 -unsigned long vera_layer_mode_tile::mapbase_address#22 -unsigned long vera_layer_mode_tile::mapbase_address#23 -unsigned long vera_layer_mode_tile::mapbase_address#24 -unsigned long vera_layer_mode_tile::mapbase_address#25 -unsigned long vera_layer_mode_tile::mapbase_address#26 -unsigned long vera_layer_mode_tile::mapbase_address#27 -unsigned long vera_layer_mode_tile::mapbase_address#28 -unsigned long vera_layer_mode_tile::mapbase_address#29 -unsigned long vera_layer_mode_tile::mapbase_address#3 -unsigned long vera_layer_mode_tile::mapbase_address#30 -unsigned long vera_layer_mode_tile::mapbase_address#31 -unsigned long vera_layer_mode_tile::mapbase_address#4 -unsigned long vera_layer_mode_tile::mapbase_address#5 -unsigned long vera_layer_mode_tile::mapbase_address#6 -unsigned long vera_layer_mode_tile::mapbase_address#7 -unsigned long vera_layer_mode_tile::mapbase_address#8 -unsigned long vera_layer_mode_tile::mapbase_address#9 -unsigned int vera_layer_mode_tile::mapheight -unsigned int vera_layer_mode_tile::mapheight#0 -unsigned int vera_layer_mode_tile::mapheight#1 -unsigned int vera_layer_mode_tile::mapheight#10 -unsigned int vera_layer_mode_tile::mapheight#11 -unsigned int vera_layer_mode_tile::mapheight#12 -unsigned int vera_layer_mode_tile::mapheight#13 -unsigned int vera_layer_mode_tile::mapheight#14 -unsigned int vera_layer_mode_tile::mapheight#15 -unsigned int vera_layer_mode_tile::mapheight#16 -unsigned int vera_layer_mode_tile::mapheight#17 -unsigned int vera_layer_mode_tile::mapheight#18 -unsigned int vera_layer_mode_tile::mapheight#19 -unsigned int vera_layer_mode_tile::mapheight#2 -unsigned int vera_layer_mode_tile::mapheight#20 -unsigned int vera_layer_mode_tile::mapheight#21 -unsigned int vera_layer_mode_tile::mapheight#22 -unsigned int vera_layer_mode_tile::mapheight#23 -unsigned int vera_layer_mode_tile::mapheight#24 -unsigned int vera_layer_mode_tile::mapheight#3 -unsigned int vera_layer_mode_tile::mapheight#4 -unsigned int vera_layer_mode_tile::mapheight#5 -unsigned int vera_layer_mode_tile::mapheight#6 -unsigned int vera_layer_mode_tile::mapheight#7 -unsigned int vera_layer_mode_tile::mapheight#8 -unsigned int vera_layer_mode_tile::mapheight#9 -unsigned int vera_layer_mode_tile::mapwidth -unsigned int vera_layer_mode_tile::mapwidth#0 -unsigned int vera_layer_mode_tile::mapwidth#1 -unsigned int vera_layer_mode_tile::mapwidth#10 -unsigned int vera_layer_mode_tile::mapwidth#11 -unsigned int vera_layer_mode_tile::mapwidth#12 -unsigned int vera_layer_mode_tile::mapwidth#13 -unsigned int vera_layer_mode_tile::mapwidth#14 -unsigned int vera_layer_mode_tile::mapwidth#15 -unsigned int vera_layer_mode_tile::mapwidth#16 -unsigned int vera_layer_mode_tile::mapwidth#2 -unsigned int vera_layer_mode_tile::mapwidth#3 -unsigned int vera_layer_mode_tile::mapwidth#4 -unsigned int vera_layer_mode_tile::mapwidth#5 -unsigned int vera_layer_mode_tile::mapwidth#6 -unsigned int vera_layer_mode_tile::mapwidth#7 -unsigned int vera_layer_mode_tile::mapwidth#8 -unsigned int vera_layer_mode_tile::mapwidth#9 -char vera_layer_mode_tile::tilebase -char vera_layer_mode_tile::tilebase#0 -char vera_layer_mode_tile::tilebase#1 -char vera_layer_mode_tile::tilebase#10 -char vera_layer_mode_tile::tilebase#11 -char vera_layer_mode_tile::tilebase#12 -char vera_layer_mode_tile::tilebase#13 -char vera_layer_mode_tile::tilebase#2 -char vera_layer_mode_tile::tilebase#3 -char vera_layer_mode_tile::tilebase#4 -char vera_layer_mode_tile::tilebase#5 -char vera_layer_mode_tile::tilebase#6 -char vera_layer_mode_tile::tilebase#7 -char vera_layer_mode_tile::tilebase#8 -char vera_layer_mode_tile::tilebase#9 -unsigned long vera_layer_mode_tile::tilebase_address -unsigned long vera_layer_mode_tile::tilebase_address#0 -unsigned long vera_layer_mode_tile::tilebase_address#1 -unsigned long vera_layer_mode_tile::tilebase_address#10 -unsigned long vera_layer_mode_tile::tilebase_address#11 -unsigned long vera_layer_mode_tile::tilebase_address#12 -unsigned long vera_layer_mode_tile::tilebase_address#13 -unsigned long vera_layer_mode_tile::tilebase_address#14 -unsigned long vera_layer_mode_tile::tilebase_address#15 -unsigned long vera_layer_mode_tile::tilebase_address#16 -unsigned long vera_layer_mode_tile::tilebase_address#17 -unsigned long vera_layer_mode_tile::tilebase_address#18 -unsigned long vera_layer_mode_tile::tilebase_address#19 -unsigned long vera_layer_mode_tile::tilebase_address#2 -unsigned long vera_layer_mode_tile::tilebase_address#20 -unsigned long vera_layer_mode_tile::tilebase_address#21 -unsigned long vera_layer_mode_tile::tilebase_address#22 -unsigned long vera_layer_mode_tile::tilebase_address#23 -unsigned long vera_layer_mode_tile::tilebase_address#24 -unsigned long vera_layer_mode_tile::tilebase_address#25 -unsigned long vera_layer_mode_tile::tilebase_address#26 -unsigned long vera_layer_mode_tile::tilebase_address#27 -unsigned long vera_layer_mode_tile::tilebase_address#28 -unsigned long vera_layer_mode_tile::tilebase_address#29 -unsigned long vera_layer_mode_tile::tilebase_address#3 -unsigned long vera_layer_mode_tile::tilebase_address#30 -unsigned long vera_layer_mode_tile::tilebase_address#31 -unsigned long vera_layer_mode_tile::tilebase_address#32 -unsigned long vera_layer_mode_tile::tilebase_address#4 -unsigned long vera_layer_mode_tile::tilebase_address#5 -unsigned long vera_layer_mode_tile::tilebase_address#6 -unsigned long vera_layer_mode_tile::tilebase_address#7 -unsigned long vera_layer_mode_tile::tilebase_address#8 -unsigned long vera_layer_mode_tile::tilebase_address#9 -char vera_layer_mode_tile::tileheight -char vera_layer_mode_tile::tileheight#0 -char vera_layer_mode_tile::tileheight#1 -char vera_layer_mode_tile::tileheight#10 -char vera_layer_mode_tile::tileheight#11 -char vera_layer_mode_tile::tileheight#12 -char vera_layer_mode_tile::tileheight#13 -char vera_layer_mode_tile::tileheight#14 -char vera_layer_mode_tile::tileheight#15 -char vera_layer_mode_tile::tileheight#16 -char vera_layer_mode_tile::tileheight#17 -char vera_layer_mode_tile::tileheight#18 -char vera_layer_mode_tile::tileheight#19 -char vera_layer_mode_tile::tileheight#2 -char vera_layer_mode_tile::tileheight#20 -char vera_layer_mode_tile::tileheight#21 -char vera_layer_mode_tile::tileheight#22 -char vera_layer_mode_tile::tileheight#23 -char vera_layer_mode_tile::tileheight#24 -char vera_layer_mode_tile::tileheight#25 -char vera_layer_mode_tile::tileheight#26 -char vera_layer_mode_tile::tileheight#27 -char vera_layer_mode_tile::tileheight#28 -char vera_layer_mode_tile::tileheight#29 -char vera_layer_mode_tile::tileheight#3 -char vera_layer_mode_tile::tileheight#30 -char vera_layer_mode_tile::tileheight#31 -char vera_layer_mode_tile::tileheight#32 -char vera_layer_mode_tile::tileheight#33 -char vera_layer_mode_tile::tileheight#34 -char vera_layer_mode_tile::tileheight#35 -char vera_layer_mode_tile::tileheight#36 -char vera_layer_mode_tile::tileheight#4 -char vera_layer_mode_tile::tileheight#5 -char vera_layer_mode_tile::tileheight#6 -char vera_layer_mode_tile::tileheight#7 -char vera_layer_mode_tile::tileheight#8 -char vera_layer_mode_tile::tileheight#9 -char vera_layer_mode_tile::tilewidth -char vera_layer_mode_tile::tilewidth#0 -char vera_layer_mode_tile::tilewidth#1 -char vera_layer_mode_tile::tilewidth#10 -char vera_layer_mode_tile::tilewidth#11 -char vera_layer_mode_tile::tilewidth#12 -char vera_layer_mode_tile::tilewidth#13 -char vera_layer_mode_tile::tilewidth#14 -char vera_layer_mode_tile::tilewidth#15 -char vera_layer_mode_tile::tilewidth#16 -char vera_layer_mode_tile::tilewidth#17 -char vera_layer_mode_tile::tilewidth#18 -char vera_layer_mode_tile::tilewidth#19 -char vera_layer_mode_tile::tilewidth#2 -char vera_layer_mode_tile::tilewidth#20 -char vera_layer_mode_tile::tilewidth#21 -char vera_layer_mode_tile::tilewidth#22 -char vera_layer_mode_tile::tilewidth#23 -char vera_layer_mode_tile::tilewidth#24 -char vera_layer_mode_tile::tilewidth#25 -char vera_layer_mode_tile::tilewidth#26 -char vera_layer_mode_tile::tilewidth#27 -char vera_layer_mode_tile::tilewidth#28 -char vera_layer_mode_tile::tilewidth#29 -char vera_layer_mode_tile::tilewidth#3 -char vera_layer_mode_tile::tilewidth#30 -char vera_layer_mode_tile::tilewidth#31 -char vera_layer_mode_tile::tilewidth#32 -char vera_layer_mode_tile::tilewidth#4 -char vera_layer_mode_tile::tilewidth#5 -char vera_layer_mode_tile::tilewidth#6 -char vera_layer_mode_tile::tilewidth#7 -char vera_layer_mode_tile::tilewidth#8 -char vera_layer_mode_tile::tilewidth#9 -__constant char vera_layer_rowshift[2] = { 0, 0 } -__constant unsigned int vera_layer_rowskip[2] = { 0, 0 } -char vera_layer_set_backcolor(char layer , char color) -char vera_layer_set_backcolor::color -char vera_layer_set_backcolor::color#0 -char vera_layer_set_backcolor::color#1 -char vera_layer_set_backcolor::color#2 -char vera_layer_set_backcolor::color#3 -char vera_layer_set_backcolor::layer -char vera_layer_set_backcolor::layer#0 -char vera_layer_set_backcolor::layer#1 -char vera_layer_set_backcolor::layer#2 -char vera_layer_set_backcolor::layer#3 -char vera_layer_set_backcolor::old -char vera_layer_set_backcolor::old#0 -char vera_layer_set_backcolor::return -char vera_layer_set_backcolor::return#0 -char vera_layer_set_backcolor::return#1 -char vera_layer_set_backcolor::return#2 -char vera_layer_set_backcolor::return#3 -char vera_layer_set_backcolor::return#4 -char vera_layer_set_backcolor::return#5 -void vera_layer_set_config(char layer , char config) -char vera_layer_set_config::$0 -char *vera_layer_set_config::addr -char *vera_layer_set_config::addr#0 -char vera_layer_set_config::config -char vera_layer_set_config::config#0 -char vera_layer_set_config::config#1 -char vera_layer_set_config::layer -char vera_layer_set_config::layer#0 -char vera_layer_set_config::layer#1 -void vera_layer_set_mapbase(char layer , char mapbase) -char vera_layer_set_mapbase::$0 -char *vera_layer_set_mapbase::addr -char *vera_layer_set_mapbase::addr#0 -char vera_layer_set_mapbase::layer -char vera_layer_set_mapbase::layer#0 -char vera_layer_set_mapbase::layer#1 -char vera_layer_set_mapbase::layer#2 -char vera_layer_set_mapbase::layer#3 -char vera_layer_set_mapbase::mapbase -char vera_layer_set_mapbase::mapbase#0 -char vera_layer_set_mapbase::mapbase#1 -char vera_layer_set_mapbase::mapbase#2 -char vera_layer_set_mapbase::mapbase#3 -void vera_layer_set_text_color_mode(char layer , char color_mode) -char vera_layer_set_text_color_mode::$0 -char *vera_layer_set_text_color_mode::addr -char *vera_layer_set_text_color_mode::addr#0 -char vera_layer_set_text_color_mode::color_mode -char vera_layer_set_text_color_mode::color_mode#0 -char vera_layer_set_text_color_mode::color_mode#1 -char vera_layer_set_text_color_mode::color_mode#2 -char vera_layer_set_text_color_mode::layer -char vera_layer_set_text_color_mode::layer#0 -char vera_layer_set_text_color_mode::layer#1 -char vera_layer_set_text_color_mode::layer#2 -char vera_layer_set_textcolor(char layer , char color) -char vera_layer_set_textcolor::color -char vera_layer_set_textcolor::color#0 -char vera_layer_set_textcolor::color#1 -char vera_layer_set_textcolor::color#2 -char vera_layer_set_textcolor::color#3 -char vera_layer_set_textcolor::layer -char vera_layer_set_textcolor::layer#0 -char vera_layer_set_textcolor::layer#1 -char vera_layer_set_textcolor::layer#2 -char vera_layer_set_textcolor::layer#3 -char vera_layer_set_textcolor::old -char vera_layer_set_textcolor::old#0 -char vera_layer_set_textcolor::return -char vera_layer_set_textcolor::return#0 -char vera_layer_set_textcolor::return#1 -char vera_layer_set_textcolor::return#2 -char vera_layer_set_textcolor::return#3 -char vera_layer_set_textcolor::return#4 -char vera_layer_set_textcolor::return#5 -void vera_layer_set_tilebase(char layer , char tilebase) -char vera_layer_set_tilebase::$0 -char *vera_layer_set_tilebase::addr -char *vera_layer_set_tilebase::addr#0 -char vera_layer_set_tilebase::layer -char vera_layer_set_tilebase::layer#0 -char vera_layer_set_tilebase::layer#1 -char vera_layer_set_tilebase::tilebase -char vera_layer_set_tilebase::tilebase#0 -char vera_layer_set_tilebase::tilebase#1 -__constant char vera_layer_textcolor[2] = { WHITE, WHITE } -__constant char *vera_layer_tilebase[2] = { VERA_L0_TILEBASE, VERA_L1_TILEBASE } -__constant const char vera_layer_vflip[2] = { 0, 8 } -__constant unsigned long vera_mapbase_address[2] = { 0, 0 } -__constant char vera_mapbase_bank[2] = { 0, 0 } -__constant unsigned int vera_mapbase_offset[2] = { 0, 0 } -void vera_tile_area(char layer , unsigned int tileindex , char x , char y , char w , char h , char hflip , char vflip , char offset) -char vera_tile_area::$1 -unsigned int vera_tile_area::$10 -unsigned int vera_tile_area::$4 -char vera_tile_area::$5 -bool vera_tile_area::$6 -bool vera_tile_area::$8 -char vera_tile_area::$9 -char vera_tile_area::c -char vera_tile_area::c#0 -char vera_tile_area::c#1 -char vera_tile_area::c#2 -char vera_tile_area::c#3 -char vera_tile_area::h -char vera_tile_area::h#0 -char vera_tile_area::h#1 -char vera_tile_area::h#10 -char vera_tile_area::h#11 -char vera_tile_area::h#12 -char vera_tile_area::h#2 -char vera_tile_area::h#3 -char vera_tile_area::h#4 -char vera_tile_area::h#5 -char vera_tile_area::h#6 -char vera_tile_area::h#7 -char vera_tile_area::h#8 -char vera_tile_area::h#9 -char vera_tile_area::hflip -char vera_tile_area::hflip#0 -char vera_tile_area::hflip#1 -char vera_tile_area::hflip#2 -char vera_tile_area::hflip#3 -char vera_tile_area::hflip#4 -char vera_tile_area::hflip#5 -char vera_tile_area::hflip#6 -char vera_tile_area::index_h -char vera_tile_area::index_h#0 -char vera_tile_area::index_h#1 -char vera_tile_area::index_h#10 -char vera_tile_area::index_h#2 -char vera_tile_area::index_h#3 -char vera_tile_area::index_h#4 -char vera_tile_area::index_h#5 -char vera_tile_area::index_h#6 -char vera_tile_area::index_h#7 -char vera_tile_area::index_h#8 -char vera_tile_area::index_h#9 -char vera_tile_area::index_l -char vera_tile_area::index_l#0 -char vera_tile_area::index_l#1 -char vera_tile_area::index_l#2 -char vera_tile_area::index_l#3 -char vera_tile_area::index_l#4 -char vera_tile_area::index_l#5 -char vera_tile_area::index_l#6 -char vera_tile_area::index_l#7 -char vera_tile_area::layer -char vera_tile_area::layer#0 -char vera_tile_area::layer#1 -char vera_tile_area::layer#2 -char vera_tile_area::layer#3 -char vera_tile_area::layer#4 -char vera_tile_area::layer#5 -unsigned long vera_tile_area::mapbase -unsigned long vera_tile_area::mapbase#0 -unsigned long vera_tile_area::mapbase#1 -unsigned long vera_tile_area::mapbase#10 -unsigned long vera_tile_area::mapbase#2 -unsigned long vera_tile_area::mapbase#3 -unsigned long vera_tile_area::mapbase#4 -unsigned long vera_tile_area::mapbase#5 -unsigned long vera_tile_area::mapbase#6 -unsigned long vera_tile_area::mapbase#7 -unsigned long vera_tile_area::mapbase#8 -unsigned long vera_tile_area::mapbase#9 -char vera_tile_area::offset -char vera_tile_area::offset#0 -char vera_tile_area::offset#1 -char vera_tile_area::offset#2 -char vera_tile_area::offset#3 -char vera_tile_area::offset#4 -char vera_tile_area::offset#5 -char vera_tile_area::offset#6 -char vera_tile_area::r -char vera_tile_area::r#0 -char vera_tile_area::r#1 -char vera_tile_area::r#2 -char vera_tile_area::r#3 -char vera_tile_area::r#4 -char vera_tile_area::r#5 -char vera_tile_area::r#6 -char vera_tile_area::r#7 -char vera_tile_area::r#8 -unsigned int vera_tile_area::rowskip -unsigned int vera_tile_area::rowskip#0 -unsigned int vera_tile_area::rowskip#1 -unsigned int vera_tile_area::rowskip#2 -unsigned int vera_tile_area::rowskip#3 -unsigned int vera_tile_area::rowskip#4 -unsigned int vera_tile_area::rowskip#5 -unsigned int vera_tile_area::rowskip#6 -unsigned int vera_tile_area::rowskip#7 -char vera_tile_area::shift -char vera_tile_area::shift#0 -unsigned int vera_tile_area::tileindex -unsigned int vera_tile_area::tileindex#0 -unsigned int vera_tile_area::tileindex#1 -unsigned int vera_tile_area::tileindex#2 -unsigned int vera_tile_area::tileindex#3 -unsigned int vera_tile_area::tileindex#4 -unsigned int vera_tile_area::tileindex#5 -char vera_tile_area::vera_vram_address01_$0 -char vera_tile_area::vera_vram_address01_$1 -char vera_tile_area::vera_vram_address01_$2 -char vera_tile_area::vera_vram_address01_$3 -unsigned long vera_tile_area::vera_vram_address01_bankaddr -unsigned long vera_tile_area::vera_vram_address01_bankaddr#0 -unsigned long vera_tile_area::vera_vram_address01_bankaddr#1 -char vera_tile_area::vera_vram_address01_incr -char vera_tile_area::vera_vram_address01_incr#0 -char vera_tile_area::vera_vram_address01_incr#1 -char vera_tile_area::vflip -char vera_tile_area::vflip#0 -char vera_tile_area::vflip#1 -char vera_tile_area::vflip#2 -char vera_tile_area::vflip#3 -char vera_tile_area::vflip#4 -char vera_tile_area::vflip#5 -char vera_tile_area::vflip#6 -char vera_tile_area::w -char vera_tile_area::w#0 -char vera_tile_area::w#1 -char vera_tile_area::w#10 -char vera_tile_area::w#11 -char vera_tile_area::w#12 -char vera_tile_area::w#2 -char vera_tile_area::w#3 -char vera_tile_area::w#4 -char vera_tile_area::w#5 -char vera_tile_area::w#6 -char vera_tile_area::w#7 -char vera_tile_area::w#8 -char vera_tile_area::w#9 -char vera_tile_area::x -char vera_tile_area::x#0 -char vera_tile_area::x#1 -char vera_tile_area::x#2 -char vera_tile_area::x#3 -char vera_tile_area::x#4 -char vera_tile_area::x#5 -char vera_tile_area::y -char vera_tile_area::y#0 -char vera_tile_area::y#1 -char vera_tile_area::y#2 -char vera_tile_area::y#3 -char vera_tile_area::y#4 -char vera_tile_area::y#5 -__constant unsigned long vera_tilebase_address[2] = { 0, 0 } -__constant char vera_tilebase_bank[2] = { 0, 0 } -__constant unsigned int vera_tilebase_offset[2] = { 0, 0 } - -Adding number conversion cast (unumber) 4 in clrscr::$1 = clrscr::$0 << 4 -Adding number conversion cast (unumber) 0 in conio_cursor_x[conio_screen_layer] = 0 -Adding number conversion cast (unumber) 0 in conio_cursor_y[conio_screen_layer] = 0 -Adding number conversion cast (unumber) 0 in conio_line_text[clrscr::$9] = 0 -Adding number conversion cast (unumber) 0 in gotoxy::y#0 = 0 -Adding number conversion cast (unumber) 0 in gotoxy::x#0 = 0 -Adding number conversion cast (unumber) 7 in screensize::hscale#0 = *VERA_DC_HSCALE >> 7 -Adding number conversion cast (unumber) $28 in screensize::$1 = $28 << screensize::hscale#0 -Adding number conversion cast (unumber) screensize::$1 in screensize::$1 = (unumber)$28 << screensize::hscale#0 -Adding number conversion cast (unumber) 7 in screensize::vscale#0 = *VERA_DC_VSCALE >> 7 -Adding number conversion cast (unumber) $1e in screensize::$3 = $1e << screensize::vscale#0 -Adding number conversion cast (unumber) screensize::$3 in screensize::$3 = (unumber)$1e << screensize::vscale#0 -Adding number conversion cast (unumber) 1 in cputc::$2 = conio_cursor_x[conio_screen_layer] << 1 -Adding number conversion cast (unumber) 0 in cputc::$17 = 0 != cputc::scroll_enable#0 -Adding number conversion cast (unumber) 0 in conio_cursor_x[conio_screen_layer] = 0 -Adding number conversion cast (unumber) 0 in vera_layer_get_color::$4 = 0 != vera_layer_get_color::$0 -Adding number conversion cast (unumber) 4 in vera_layer_get_color::$1 = vera_layer_backcolor[vera_layer_get_color::layer#4] << 4 -Adding number conversion cast (unumber) 1 in if(vera_layer_mode_tile::color_depth#5==1) goto vera_layer_mode_tile::@4 -Adding number conversion cast (unumber) 2 in if(vera_layer_mode_tile::color_depth#6==2) goto vera_layer_mode_tile::@5 -Adding number conversion cast (unumber) 4 in if(vera_layer_mode_tile::color_depth#7==4) goto vera_layer_mode_tile::@6 -Adding number conversion cast (unumber) 8 in if(vera_layer_mode_tile::color_depth#8==8) goto vera_layer_mode_tile::@7 -Adding number conversion cast (unumber) $20 in if(vera_layer_mode_tile::mapwidth#5==$20) goto vera_layer_mode_tile::@12 -Adding number conversion cast (unumber) 6 in vera_layer_rowshift[vera_layer_mode_tile::layer#5] = 6 -Adding number conversion cast (unumber) $40 in vera_layer_rowskip[vera_layer_mode_tile::$11] = $40 -Adding number conversion cast (unumber) $40 in if(vera_layer_mode_tile::mapwidth#6==$40) goto vera_layer_mode_tile::@13 -Adding number conversion cast (unumber) 7 in vera_layer_rowshift[vera_layer_mode_tile::layer#6] = 7 -Adding number conversion cast (unumber) $80 in vera_layer_rowskip[vera_layer_mode_tile::$12] = $80 -Adding number conversion cast (unumber) $80 in if(vera_layer_mode_tile::mapwidth#7==$80) goto vera_layer_mode_tile::@14 -Adding number conversion cast (unumber) 8 in vera_layer_rowshift[vera_layer_mode_tile::layer#7] = 8 -Adding number conversion cast (unumber) $100 in vera_layer_rowskip[vera_layer_mode_tile::$13] = $100 -Adding number conversion cast (unumber) $100 in if(vera_layer_mode_tile::mapwidth#8==$100) goto vera_layer_mode_tile::@15 -Adding number conversion cast (unumber) 9 in vera_layer_rowshift[vera_layer_mode_tile::layer#8] = 9 -Adding number conversion cast (unumber) $200 in vera_layer_rowskip[vera_layer_mode_tile::$14] = $200 -Adding number conversion cast (unumber) $20 in if(vera_layer_mode_tile::mapheight#5==$20) goto vera_layer_mode_tile::@20 -Adding number conversion cast (unumber) $40 in if(vera_layer_mode_tile::mapheight#6==$40) goto vera_layer_mode_tile::@21 -Adding number conversion cast (unumber) $80 in if(vera_layer_mode_tile::mapheight#7==$80) goto vera_layer_mode_tile::@22 -Adding number conversion cast (unumber) $100 in if(vera_layer_mode_tile::mapheight#8==$100) goto vera_layer_mode_tile::@23 -Adding number conversion cast (unumber) 1 in vera_layer_mode_tile::$3 = vera_layer_mode_tile::mapbase_address#6 >> 1 -Adding number conversion cast (unumber) 1 in vera_layer_mode_tile::$8 = vera_layer_mode_tile::tilebase_address#6 >> 1 -Adding number conversion cast (unumber) 8 in if(vera_layer_mode_tile::tilewidth#5==8) goto vera_layer_mode_tile::@26 -Adding number conversion cast (unumber) $10 in if(vera_layer_mode_tile::tilewidth#6==$10) goto vera_layer_mode_tile::@27 -Adding number conversion cast (unumber) 8 in if(vera_layer_mode_tile::tileheight#5==8) goto vera_layer_mode_tile::@30 -Adding number conversion cast (unumber) $10 in if(vera_layer_mode_tile::tileheight#6==$10) goto vera_layer_mode_tile::@31 -Adding number conversion cast (unumber) 1 in vera_layer_mode_tile::color_depth#0 = 1 -Adding number conversion cast (unumber) $10 in if(vera_layer_mode_text::color_mode#1==$10) goto vera_layer_mode_text::@2 -Adding number conversion cast (unumber) $100 in if(vera_layer_mode_text::color_mode#2==$100) goto vera_layer_mode_text::@3 -Adding number conversion cast (unumber) 4 in vera_tile_area::$1 = vera_tile_area::offset#6 << 4 -Adding number conversion cast (unumber) 1 in vera_tile_area::$5 = vera_tile_area::x#5 << 1 -Adding number conversion cast (unumber) 1 in vera_layer_mode_text::layer#0 = 1 -Adding number conversion cast (unumber) $80 in vera_layer_mode_text::mapwidth#0 = $80 -Adding number conversion cast (unumber) $40 in vera_layer_mode_text::mapheight#0 = $40 -Adding number conversion cast (unumber) 8 in vera_layer_mode_text::tilewidth#0 = 8 -Adding number conversion cast (unumber) 8 in vera_layer_mode_text::tileheight#0 = 8 -Adding number conversion cast (unumber) $10 in vera_layer_mode_text::color_mode#0 = $10 -Adding number conversion cast (unumber) 1 in screenlayer::layer#0 = 1 -Adding number conversion cast (unumber) 1 in vera_layer_set_textcolor::layer#0 = 1 -Adding number conversion cast (unumber) 1 in vera_layer_set_backcolor::layer#0 = 1 -Adding number conversion cast (unumber) 0 in vera_layer_set_mapbase::layer#1 = 0 -Adding number conversion cast (unumber) $20 in vera_layer_set_mapbase::mapbase#1 = $20 -Adding number conversion cast (unumber) 1 in vera_layer_set_mapbase::layer#2 = 1 -Adding number conversion cast (unumber) 0 in vera_layer_set_mapbase::mapbase#2 = 0 -Adding number conversion cast (unumber) 0 in gotoxy::x#1 = 0 -Adding number conversion cast (unumber) 1 in conio_x16_init::$9 = conio_screen_height - 1 -Adding number conversion cast (unumber) conio_x16_init::$9 in conio_x16_init::$9 = conio_screen_height - (unumber)1 -Adding number conversion cast (unumber) 0 in conio_cursor_x[conio_screen_layer] = 0 -Adding number conversion cast (unumber) 2 in insertup::width#0 = conio_screen_width * 2 -Adding number conversion cast (unumber) 1 in insertup::$3 = insertup::i#3 - 1 -Adding number conversion cast (unumber) insertup::$3 in insertup::$3 = insertup::i#3 - (unumber)1 -Adding number conversion cast (unumber) 0 in memcpy_in_vram::dest_bank#0 = 0 -Adding number conversion cast (unumber) 0 in memcpy_in_vram::src_bank#0 = 0 -Adding number conversion cast (unumber) 0 in cscroll::$7 = 0 != conio_scroll_enable[conio_screen_layer] -Adding number conversion cast (unumber) 1 in cscroll::$5 = conio_screen_height - 1 -Adding number conversion cast (unumber) cscroll::$5 in cscroll::$5 = conio_screen_height - (unumber)1 -Adding number conversion cast (unumber) 0 in gotoxy::x#2 = 0 -Adding number conversion cast (unumber) 4 in screenlayer::vera_layer_get_width1_$1 = screenlayer::vera_layer_get_width1_$0 >> 4 -Adding number conversion cast (unumber) 6 in screenlayer::vera_layer_get_height1_$1 = screenlayer::vera_layer_get_height1_$0 >> 6 -Adding number conversion cast (unumber) 0 in printf_str::$2 = 0 != printf_str::$0 -Adding number conversion cast (unumber) 1 in memcpy_in_vram::dest_bank#1 = 1 -Adding number conversion cast (unumber) 0 in memcpy_in_vram::src_bank#1 = 0 -Adding number conversion cast (unumber) $100*8 in memcpy_in_vram::num#1 = $100*8 -Adding number conversion cast (unumber) 1 in vera_layer_mode_tile::layer#1 = 1 -Adding number conversion cast (unumber) $10000 in vera_layer_mode_tile::mapbase_address#2 = $10000 -Adding number conversion cast (unumber) $1f000 in vera_layer_mode_tile::tilebase_address#2 = $1f000 -Adding number conversion cast (unumber) $80 in vera_layer_mode_tile::mapwidth#1 = $80 -Adding number conversion cast (unumber) $40 in vera_layer_mode_tile::mapheight#1 = $40 -Adding number conversion cast (unumber) 8 in vera_layer_mode_tile::tilewidth#1 = 8 -Adding number conversion cast (unumber) 8 in vera_layer_mode_tile::tileheight#1 = 8 -Adding number conversion cast (unumber) 1 in vera_layer_mode_tile::color_depth#1 = 1 -Adding number conversion cast (unumber) 1 in screenlayer::layer#1 = 1 -Adding number conversion cast (unumber) 0 in vera_layer_mode_tile::layer#2 = 0 -Adding number conversion cast (unumber) $14000 in vera_layer_mode_tile::mapbase_address#3 = $14000 -Adding number conversion cast (unumber) 0 in vera_layer_mode_tile::tilebase_address#3 = 0 -Adding number conversion cast (unumber) $40 in vera_layer_mode_tile::mapwidth#2 = $40 -Adding number conversion cast (unumber) $40 in vera_layer_mode_tile::mapheight#2 = $40 -Adding number conversion cast (unumber) $10 in vera_layer_mode_tile::tilewidth#2 = $10 -Adding number conversion cast (unumber) $10 in vera_layer_mode_tile::tileheight#2 = $10 -Adding number conversion cast (unumber) 8 in vera_layer_mode_tile::color_depth#2 = 8 -Adding number conversion cast (unumber) 0 in memcpy_to_vram::vbank#0 = 0 -Adding number conversion cast (unumber) $100 in memcpy_to_vram::num#0 = $100 -Adding number conversion cast (unumber) $100 in main::tilebase#1 = main::tilebase#3 + $100 -Adding number conversion cast (unumber) 1 in main::tiles[main::p#2] = main::tiles[main::p#2] + 1 -Adding number conversion cast (unumber) 0 in memcpy_to_vram::vbank#1 = 0 -Adding number conversion cast (unumber) $100 in memcpy_to_vram::num#1 = $100 -Adding number conversion cast (unumber) $100 in main::tilebase#2 = main::tilebase#5 + $100 -Adding number conversion cast (unumber) 0 in vera_tile_area::layer#0 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::tileindex#0 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::x#0 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::y#0 = 0 -Adding number conversion cast (unumber) $28 in vera_tile_area::w#0 = $28 -Adding number conversion cast (unumber) $1e in vera_tile_area::h#0 = $1e -Adding number conversion cast (unumber) 0 in vera_tile_area::hflip#1 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::vflip#1 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::offset#1 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::layer#1 = 0 -Adding number conversion cast (unumber) 1 in vera_tile_area::w#1 = 1 -Adding number conversion cast (unumber) 1 in vera_tile_area::h#1 = 1 -Adding number conversion cast (unumber) 0 in vera_tile_area::hflip#2 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::vflip#2 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::offset#2 = 0 -Adding number conversion cast (unumber) 2 in main::column#1 = main::column#3 + 2 -Adding number conversion cast (unumber) $ff in main::tile#2 = main::tile#1 & $ff -Adding number conversion cast (unumber) 2 in main::row#1 = main::row#5 + 2 -Adding number conversion cast (unumber) 0 in gotoxy::x#3 = 0 -Adding number conversion cast (unumber) $32 in gotoxy::y#3 = $32 -Adding number conversion cast (unumber) 0 in main::vera_layer_show1_layer#0 = 0 -Adding number conversion cast (unumber) 0 in main::$42 = 0 != main::$35 -Adding number conversion cast (unumber) 0 in vera_tile_area::layer#2 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::tileindex#2 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::x#2 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::y#2 = 0 -Adding number conversion cast (unumber) $28 in vera_tile_area::w#2 = $28 -Adding number conversion cast (unumber) $1e in vera_tile_area::h#2 = $1e -Adding number conversion cast (unumber) 0 in vera_tile_area::hflip#3 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::vflip#3 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::offset#3 = 0 -Adding number conversion cast (unumber) 0 in main::tile#3 = 0 -Adding number conversion cast (unumber) 0 in main::row#2 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::layer#3 = 0 -Adding number conversion cast (unumber) 2 in vera_tile_area::w#3 = 2 -Adding number conversion cast (unumber) 2 in vera_tile_area::h#3 = 2 -Adding number conversion cast (unumber) 0 in vera_tile_area::hflip#4 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::vflip#4 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::offset#4 = 0 -Adding number conversion cast (unumber) 2 in main::column1#1 = main::column1#3 + 2 -Adding number conversion cast (unumber) $ff in main::tile#5 = main::tile#4 & $ff -Adding number conversion cast (unumber) 2 in main::row#3 = main::row#7 + 2 -Adding number conversion cast (unumber) 0 in main::$43 = 0 != main::$40 -Adding number conversion cast (unumber) 0 in vera_tile_area::layer#4 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::tileindex#4 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::x#4 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::y#4 = 0 -Adding number conversion cast (unumber) $28 in vera_tile_area::w#4 = $28 -Adding number conversion cast (unumber) $1e in vera_tile_area::h#4 = $1e -Adding number conversion cast (unumber) 0 in vera_tile_area::hflip#5 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::vflip#5 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::offset#5 = 0 -Adding number conversion cast (unumber) 0 in main::vera_layer_hide1_layer#0 = 0 -Adding number conversion cast (unumber) 0 in memcpy_in_vram::dest_bank#2 = 0 -Adding number conversion cast (unumber) 1 in memcpy_in_vram::src_bank#2 = 1 -Adding number conversion cast (unumber) $100*8 in memcpy_in_vram::num#2 = $100*8 -Adding number conversion cast (unumber) 1 in vera_layer_mode_tile::layer#3 = 1 -Adding number conversion cast (unumber) 0 in vera_layer_mode_tile::mapbase_address#4 = 0 -Adding number conversion cast (unumber) $f800 in vera_layer_mode_tile::tilebase_address#4 = $f800 -Adding number conversion cast (unumber) $80 in vera_layer_mode_tile::mapwidth#3 = $80 -Adding number conversion cast (unumber) $80 in vera_layer_mode_tile::mapheight#3 = $80 -Adding number conversion cast (unumber) 8 in vera_layer_mode_tile::tilewidth#3 = 8 -Adding number conversion cast (unumber) 8 in vera_layer_mode_tile::tileheight#3 = 8 -Adding number conversion cast (unumber) 1 in vera_layer_mode_tile::color_depth#3 = 1 -Adding number conversion cast (unumber) 0 in vera_layer_mode_tile::layer#4 = 0 -Adding number conversion cast (unumber) 0 in vera_layer_mode_tile::mapbase_address#5 = 0 -Adding number conversion cast (unumber) $f800 in vera_layer_mode_tile::tilebase_address#5 = $f800 -Adding number conversion cast (unumber) $80 in vera_layer_mode_tile::mapwidth#4 = $80 -Adding number conversion cast (unumber) $80 in vera_layer_mode_tile::mapheight#4 = $80 -Adding number conversion cast (unumber) 8 in vera_layer_mode_tile::tilewidth#4 = 8 -Adding number conversion cast (unumber) 8 in vera_layer_mode_tile::tileheight#4 = 8 -Adding number conversion cast (unumber) 1 in vera_layer_mode_tile::color_depth#4 = 1 -Adding number conversion cast (unumber) 1 in screenlayer::layer#2 = 1 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast memcpy_to_vram::s#0 = (char *)memcpy_to_vram::src#2 -Inlining cast conio_cursor_x[conio_screen_layer] = (unumber)0 -Inlining cast conio_cursor_y[conio_screen_layer] = (unumber)0 -Inlining cast conio_line_text[clrscr::$9] = (unumber)0 -Inlining cast gotoxy::y#0 = (unumber)0 -Inlining cast gotoxy::x#0 = (unumber)0 -Inlining cast conio_cursor_x[conio_screen_layer] = (unumber)0 -Inlining cast vera_layer_rowshift[vera_layer_mode_tile::layer#5] = (unumber)6 -Inlining cast vera_layer_rowskip[vera_layer_mode_tile::$11] = (unumber)$40 -Inlining cast vera_layer_rowshift[vera_layer_mode_tile::layer#6] = (unumber)7 -Inlining cast vera_layer_rowskip[vera_layer_mode_tile::$12] = (unumber)$80 -Inlining cast vera_layer_rowshift[vera_layer_mode_tile::layer#7] = (unumber)8 -Inlining cast vera_layer_rowskip[vera_layer_mode_tile::$13] = (unumber)$100 -Inlining cast vera_layer_rowshift[vera_layer_mode_tile::layer#8] = (unumber)9 -Inlining cast vera_layer_rowskip[vera_layer_mode_tile::$14] = (unumber)$200 -Inlining cast vera_layer_mode_tile::color_depth#0 = (unumber)1 -Inlining cast vera_layer_mode_text::layer#0 = (unumber)1 -Inlining cast vera_layer_mode_text::mapwidth#0 = (unumber)$80 -Inlining cast vera_layer_mode_text::mapheight#0 = (unumber)$40 -Inlining cast vera_layer_mode_text::tilewidth#0 = (unumber)8 -Inlining cast vera_layer_mode_text::tileheight#0 = (unumber)8 -Inlining cast vera_layer_mode_text::color_mode#0 = (unumber)$10 -Inlining cast screenlayer::layer#0 = (unumber)1 -Inlining cast vera_layer_set_textcolor::layer#0 = (unumber)1 -Inlining cast vera_layer_set_backcolor::layer#0 = (unumber)1 -Inlining cast vera_layer_set_mapbase::layer#1 = (unumber)0 -Inlining cast vera_layer_set_mapbase::mapbase#1 = (unumber)$20 -Inlining cast vera_layer_set_mapbase::layer#2 = (unumber)1 -Inlining cast vera_layer_set_mapbase::mapbase#2 = (unumber)0 -Inlining cast gotoxy::x#1 = (unumber)0 -Inlining cast conio_cursor_x[conio_screen_layer] = (unumber)0 -Inlining cast memcpy_in_vram::dest_bank#0 = (unumber)0 -Inlining cast memcpy_in_vram::src_bank#0 = (unumber)0 -Inlining cast gotoxy::x#2 = (unumber)0 -Inlining cast memcpy_in_vram::dest_bank#1 = (unumber)1 -Inlining cast memcpy_in_vram::src_bank#1 = (unumber)0 -Inlining cast memcpy_in_vram::num#1 = (unumber)$100*8 -Inlining cast vera_layer_mode_tile::layer#1 = (unumber)1 -Inlining cast vera_layer_mode_tile::mapbase_address#2 = (unumber)$10000 -Inlining cast vera_layer_mode_tile::tilebase_address#2 = (unumber)$1f000 -Inlining cast vera_layer_mode_tile::mapwidth#1 = (unumber)$80 -Inlining cast vera_layer_mode_tile::mapheight#1 = (unumber)$40 -Inlining cast vera_layer_mode_tile::tilewidth#1 = (unumber)8 -Inlining cast vera_layer_mode_tile::tileheight#1 = (unumber)8 -Inlining cast vera_layer_mode_tile::color_depth#1 = (unumber)1 -Inlining cast screenlayer::layer#1 = (unumber)1 -Inlining cast vera_layer_mode_tile::layer#2 = (unumber)0 -Inlining cast vera_layer_mode_tile::mapbase_address#3 = (unumber)$14000 -Inlining cast vera_layer_mode_tile::tilebase_address#3 = (unumber)0 -Inlining cast vera_layer_mode_tile::mapwidth#2 = (unumber)$40 -Inlining cast vera_layer_mode_tile::mapheight#2 = (unumber)$40 -Inlining cast vera_layer_mode_tile::tilewidth#2 = (unumber)$10 -Inlining cast vera_layer_mode_tile::tileheight#2 = (unumber)$10 -Inlining cast vera_layer_mode_tile::color_depth#2 = (unumber)8 -Inlining cast memcpy_to_vram::vbank#0 = (unumber)0 -Inlining cast memcpy_to_vram::num#0 = (unumber)$100 -Inlining cast memcpy_to_vram::vbank#1 = (unumber)0 -Inlining cast memcpy_to_vram::num#1 = (unumber)$100 -Inlining cast vera_tile_area::layer#0 = (unumber)0 -Inlining cast vera_tile_area::tileindex#0 = (unumber)0 -Inlining cast vera_tile_area::x#0 = (unumber)0 -Inlining cast vera_tile_area::y#0 = (unumber)0 -Inlining cast vera_tile_area::w#0 = (unumber)$28 -Inlining cast vera_tile_area::h#0 = (unumber)$1e -Inlining cast vera_tile_area::hflip#1 = (unumber)0 -Inlining cast vera_tile_area::vflip#1 = (unumber)0 -Inlining cast vera_tile_area::offset#1 = (unumber)0 -Inlining cast vera_tile_area::layer#1 = (unumber)0 -Inlining cast vera_tile_area::w#1 = (unumber)1 -Inlining cast vera_tile_area::h#1 = (unumber)1 -Inlining cast vera_tile_area::hflip#2 = (unumber)0 -Inlining cast vera_tile_area::vflip#2 = (unumber)0 -Inlining cast vera_tile_area::offset#2 = (unumber)0 -Inlining cast gotoxy::x#3 = (unumber)0 -Inlining cast gotoxy::y#3 = (unumber)$32 -Inlining cast main::vera_layer_show1_layer#0 = (unumber)0 -Inlining cast vera_tile_area::layer#2 = (unumber)0 -Inlining cast vera_tile_area::tileindex#2 = (unumber)0 -Inlining cast vera_tile_area::x#2 = (unumber)0 -Inlining cast vera_tile_area::y#2 = (unumber)0 -Inlining cast vera_tile_area::w#2 = (unumber)$28 -Inlining cast vera_tile_area::h#2 = (unumber)$1e -Inlining cast vera_tile_area::hflip#3 = (unumber)0 -Inlining cast vera_tile_area::vflip#3 = (unumber)0 -Inlining cast vera_tile_area::offset#3 = (unumber)0 -Inlining cast main::tile#3 = (unumber)0 -Inlining cast main::row#2 = (unumber)0 -Inlining cast vera_tile_area::layer#3 = (unumber)0 -Inlining cast vera_tile_area::w#3 = (unumber)2 -Inlining cast vera_tile_area::h#3 = (unumber)2 -Inlining cast vera_tile_area::hflip#4 = (unumber)0 -Inlining cast vera_tile_area::vflip#4 = (unumber)0 -Inlining cast vera_tile_area::offset#4 = (unumber)0 -Inlining cast vera_tile_area::layer#4 = (unumber)0 -Inlining cast vera_tile_area::tileindex#4 = (unumber)0 -Inlining cast vera_tile_area::x#4 = (unumber)0 -Inlining cast vera_tile_area::y#4 = (unumber)0 -Inlining cast vera_tile_area::w#4 = (unumber)$28 -Inlining cast vera_tile_area::h#4 = (unumber)$1e -Inlining cast vera_tile_area::hflip#5 = (unumber)0 -Inlining cast vera_tile_area::vflip#5 = (unumber)0 -Inlining cast vera_tile_area::offset#5 = (unumber)0 -Inlining cast main::vera_layer_hide1_layer#0 = (unumber)0 -Inlining cast memcpy_in_vram::dest_bank#2 = (unumber)0 -Inlining cast memcpy_in_vram::src_bank#2 = (unumber)1 -Inlining cast memcpy_in_vram::num#2 = (unumber)$100*8 -Inlining cast vera_layer_mode_tile::layer#3 = (unumber)1 -Inlining cast vera_layer_mode_tile::mapbase_address#4 = (unumber)0 -Inlining cast vera_layer_mode_tile::tilebase_address#4 = (unumber)$f800 -Inlining cast vera_layer_mode_tile::mapwidth#3 = (unumber)$80 -Inlining cast vera_layer_mode_tile::mapheight#3 = (unumber)$80 -Inlining cast vera_layer_mode_tile::tilewidth#3 = (unumber)8 -Inlining cast vera_layer_mode_tile::tileheight#3 = (unumber)8 -Inlining cast vera_layer_mode_tile::color_depth#3 = (unumber)1 -Inlining cast vera_layer_mode_tile::layer#4 = (unumber)0 -Inlining cast vera_layer_mode_tile::mapbase_address#5 = (unumber)0 -Inlining cast vera_layer_mode_tile::tilebase_address#5 = (unumber)$f800 -Inlining cast vera_layer_mode_tile::mapwidth#4 = (unumber)$80 -Inlining cast vera_layer_mode_tile::mapheight#4 = (unumber)$80 -Inlining cast vera_layer_mode_tile::tilewidth#4 = (unumber)8 -Inlining cast vera_layer_mode_tile::tileheight#4 = (unumber)8 -Inlining cast vera_layer_mode_tile::color_depth#4 = (unumber)1 -Inlining cast screenlayer::layer#2 = (unumber)1 -Successful SSA optimization Pass2InlineCast -Simplifying constant pointer cast (char *) 40736 -Simplifying constant pointer cast (char *) 40737 -Simplifying constant pointer cast (char *) 40738 -Simplifying constant pointer cast (char *) 40739 -Simplifying constant pointer cast (char *) 40740 -Simplifying constant pointer cast (char *) 40741 -Simplifying constant pointer cast (char *) 40745 -Simplifying constant pointer cast (char *) 40746 -Simplifying constant pointer cast (char *) 40747 -Simplifying constant pointer cast (char *) 40749 -Simplifying constant pointer cast (char *) 40750 -Simplifying constant pointer cast (char *) 40751 -Simplifying constant pointer cast (char *) 40756 -Simplifying constant pointer cast (char *) 40757 -Simplifying constant pointer cast (char *) 40758 -Simplifying constant pointer cast (char *) 0 -Simplifying constant pointer cast (char *) 650 -Simplifying constant pointer cast (char *) 65508 -Simplifying constant pointer cast (char *) 214 -Simplifying constant integer cast 4 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast $28 -Simplifying constant integer cast 7 -Simplifying constant integer cast $1e -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 4 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 4 -Simplifying constant integer cast 8 -Simplifying constant integer cast $20 -Simplifying constant integer cast 6 -Simplifying constant integer cast $40 -Simplifying constant integer cast $40 -Simplifying constant integer cast 7 -Simplifying constant integer cast $80 -Simplifying constant integer cast $80 -Simplifying constant integer cast 8 -Simplifying constant integer cast $100 -Simplifying constant integer cast $100 -Simplifying constant integer cast 9 -Simplifying constant integer cast $200 -Simplifying constant integer cast $20 -Simplifying constant integer cast $40 -Simplifying constant integer cast $80 -Simplifying constant integer cast $100 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 8 -Simplifying constant integer cast $10 -Simplifying constant integer cast 8 -Simplifying constant integer cast $10 -Simplifying constant integer cast 1 -Simplifying constant integer cast $10 -Simplifying constant integer cast $100 -Simplifying constant integer cast 1 -Simplifying constant integer cast 4 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast $f800 -Simplifying constant integer cast $80 -Simplifying constant integer cast $40 -Simplifying constant integer cast 8 -Simplifying constant integer cast 8 -Simplifying constant integer cast $10 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast $20 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 2 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant pointer cast (char *) 61440 -Simplifying constant integer cast 0 -Simplifying constant pointer cast (char *) 63488 -Simplifying constant integer cast 1 -Simplifying constant integer cast $10000 -Simplifying constant integer cast $1f000 -Simplifying constant integer cast $80 -Simplifying constant integer cast $40 -Simplifying constant integer cast 8 -Simplifying constant integer cast 8 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast $14000 -Simplifying constant integer cast 0 -Simplifying constant integer cast $40 -Simplifying constant integer cast $40 -Simplifying constant integer cast $10 -Simplifying constant integer cast $10 -Simplifying constant integer cast 8 -Simplifying constant pointer cast (char *) 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $100 -Simplifying constant integer cast $100 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast $100 -Simplifying constant integer cast $100 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $28 -Simplifying constant integer cast $1e -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 2 -Simplifying constant integer cast $ff -Simplifying constant integer cast 2 -Simplifying constant integer cast 0 -Simplifying constant integer cast $32 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $28 -Simplifying constant integer cast $1e -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 2 -Simplifying constant integer cast $ff -Simplifying constant integer cast 2 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $28 -Simplifying constant integer cast $1e -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant pointer cast (char *) 63488 -Simplifying constant integer cast 1 -Simplifying constant pointer cast (char *) 61440 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast $f800 -Simplifying constant integer cast $80 -Simplifying constant integer cast $80 -Simplifying constant integer cast 8 -Simplifying constant integer cast 8 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $f800 -Simplifying constant integer cast $80 -Simplifying constant integer cast $80 -Simplifying constant integer cast 8 -Simplifying constant integer cast 8 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 4 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) $28 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) $1e -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 4 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 4 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) $20 -Finalized unsigned number type (char) 6 -Finalized unsigned number type (char) $40 -Finalized unsigned number type (char) $40 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) $80 -Finalized unsigned number type (char) $80 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (unsigned int) $100 -Finalized unsigned number type (unsigned int) $100 -Finalized unsigned number type (char) 9 -Finalized unsigned number type (unsigned int) $200 -Finalized unsigned number type (char) $20 -Finalized unsigned number type (char) $40 -Finalized unsigned number type (char) $80 -Finalized unsigned number type (unsigned int) $100 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) $10 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) $10 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) $10 -Finalized unsigned number type (unsigned int) $100 -Finalized unsigned number type (char) 4 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) $80 -Finalized unsigned number type (char) $40 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) $10 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) $20 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 4 -Finalized unsigned number type (char) 6 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (unsigned long) $10000 -Finalized unsigned number type (unsigned long) $1f000 -Finalized unsigned number type (char) $80 -Finalized unsigned number type (char) $40 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (unsigned long) $14000 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) $40 -Finalized unsigned number type (char) $40 -Finalized unsigned number type (char) $10 -Finalized unsigned number type (char) $10 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (unsigned int) $100 -Finalized unsigned number type (unsigned int) $100 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (unsigned int) $100 -Finalized unsigned number type (unsigned int) $100 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) $28 -Finalized unsigned number type (char) $1e -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) $ff -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) $32 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) $28 -Finalized unsigned number type (char) $1e -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) $ff -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) $28 -Finalized unsigned number type (char) $1e -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (unsigned int) $f800 -Finalized unsigned number type (char) $80 -Finalized unsigned number type (char) $80 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (unsigned int) $f800 -Finalized unsigned number type (char) $80 -Finalized unsigned number type (char) $80 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Inferred type updated to char in screensize::$1 = $28 << screensize::hscale#0 -Inferred type updated to char in screensize::$3 = $1e << screensize::vscale#0 -Inferred type updated to char in conio_x16_init::$9 = conio_screen_height - 1 -Inferred type updated to char in insertup::$3 = insertup::i#3 - 1 -Inferred type updated to char in cscroll::$5 = conio_screen_height - 1 -Inversing boolean not [86] gotoxy::$1 = gotoxy::y#4 <= conio_screen_height from [85] gotoxy::$0 = gotoxy::y#4 > conio_screen_height -Inversing boolean not [90] gotoxy::$3 = gotoxy::x#4 < conio_screen_width from [89] gotoxy::$2 = gotoxy::x#4 >= conio_screen_width -Inversing boolean not [143] cputc::$12 = conio_cursor_x[conio_screen_layer] != conio_screen_width from [142] cputc::$11 = conio_cursor_x[conio_screen_layer] == conio_screen_width -Inversing boolean not [148] cputc::$9 = cputc::$16 != conio_width from [147] cputc::$8 = cputc::$16 == conio_width -Inversing boolean not [475] conio_x16_init::$8 = conio_x16_init::line#2 < conio_screen_height from [474] conio_x16_init::$7 = conio_x16_init::line#2 >= conio_screen_height -Inversing boolean not [540] cscroll::$1 = conio_cursor_y[conio_screen_layer] < conio_screen_height from [539] cscroll::$0 = conio_cursor_y[conio_screen_layer] >= conio_screen_height -Inversing boolean not [552] cscroll::$3 = conio_cursor_y[conio_screen_layer] < conio_height from [551] cscroll::$2 = conio_cursor_y[conio_screen_layer] >= conio_height -Inversing boolean not [791] main::$36 = 0 == main::$35 from [790] main::$42 = 0 != main::$35 -Inversing boolean not [840] main::$41 = 0 == main::$40 from [839] main::$43 = 0 != main::$40 -Successful SSA optimization Pass2UnaryNotSimplification -Alias candidate removed (volatile)kbhit::return#0 = kbhit::ch kbhit::return#4 kbhit::return#1 -Alias candidate removed (volatile)screenlayer::vera_layer_get_width1_return#0 = screenlayer::vera_layer_get_width1_return#2 screenlayer::vera_layer_get_width1_return#1 screenlayer::vera_layer_get_width1_return#3 screenlayer::$2 conio_width -Alias candidate removed (volatile)conio_rowshift = screenlayer::$3 -Alias candidate removed (volatile)conio_rowskip = screenlayer::$4 -Alias candidate removed (volatile)screenlayer::vera_layer_get_height1_return#0 = screenlayer::vera_layer_get_height1_return#2 screenlayer::vera_layer_get_height1_return#1 screenlayer::vera_layer_get_height1_return#3 screenlayer::$5 conio_height -Alias memcpy_to_vram::s#2 = memcpy_to_vram::s#3 -Alias memcpy_to_vram::end#1 = memcpy_to_vram::end#2 -Alias memcpy_in_vram::i#2 = memcpy_in_vram::i#3 -Alias memcpy_in_vram::num#3 = memcpy_in_vram::num#5 -Alias vera_layer_get_backcolor::return#0 = vera_layer_get_backcolor::return#3 -Alias clrscr::line_text#0 = clrscr::line_text#8 clrscr::line_text#6 -Alias CONIO_SCREEN_BANK#32 = CONIO_SCREEN_BANK#40 CONIO_SCREEN_BANK#49 -Alias vera_layer_get_textcolor::return#0 = vera_layer_get_textcolor::return#3 -Alias clrscr::line_text#2 = clrscr::line_text#4 clrscr::ch#0 -Alias CONIO_SCREEN_BANK#11 = CONIO_SCREEN_BANK#22 -Alias clrscr::color#3 = clrscr::color#4 -Alias clrscr::l#2 = clrscr::l#5 -Alias clrscr::color#1 = clrscr::color#2 clrscr::color#5 -Alias clrscr::c#2 = clrscr::c#3 -Alias clrscr::line_text#3 = clrscr::line_text#7 clrscr::line_text#5 -Alias clrscr::l#3 = clrscr::l#6 clrscr::l#4 -Alias CONIO_SCREEN_BANK#31 = CONIO_SCREEN_BANK#50 CONIO_SCREEN_BANK#41 -Alias gotoxy::x#6 = gotoxy::x#7 -Alias gotoxy::y#6 = gotoxy::y#7 -Alias vera_layer_get_color::return#0 = vera_layer_get_color::return#5 -Alias CONIO_SCREEN_TEXT#12 = CONIO_SCREEN_TEXT#26 CONIO_SCREEN_TEXT#72 CONIO_SCREEN_TEXT#81 CONIO_SCREEN_TEXT#78 CONIO_SCREEN_TEXT#77 CONIO_SCREEN_TEXT#73 CONIO_SCREEN_TEXT#74 -Alias cputc::c#0 = cputc::c#1 cputc::c#2 -Alias CONIO_SCREEN_BANK#12 = CONIO_SCREEN_BANK#23 CONIO_SCREEN_BANK#33 -Alias cputc::conio_addr#1 = cputc::conio_addr#2 -Alias cputc::color#0 = cputc::color#1 -Alias vera_layer_get_mapbase_bank::return#0 = vera_layer_get_mapbase_bank::return#3 vera_layer_get_mapbase_bank::return#1 -Alias vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#3 vera_layer_get_mapbase_offset::return#1 -Alias vera_layer_set_textcolor::return#0 = vera_layer_set_textcolor::old#0 vera_layer_set_textcolor::return#5 vera_layer_set_textcolor::return#1 -Alias vera_layer_get_textcolor::return#1 = vera_layer_get_textcolor::return#4 vera_layer_get_textcolor::return#2 -Alias vera_layer_set_backcolor::return#0 = vera_layer_set_backcolor::old#0 vera_layer_set_backcolor::return#5 vera_layer_set_backcolor::return#1 -Alias vera_layer_get_backcolor::return#1 = vera_layer_get_backcolor::return#4 vera_layer_get_backcolor::return#2 -Alias vera_layer_get_color::layer#2 = vera_layer_get_color::layer#3 vera_layer_get_color::layer#4 -Alias vera_layer_get_color::return#2 = vera_layer_get_color::$2 -Alias vera_layer_get_color::return#3 = vera_layer_get_color::return#6 -Alias vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#3 vera_layer_get_rowshift::return#1 -Alias vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#3 vera_layer_get_rowskip::return#1 -Alias vera_layer_mode_tile::config#0 = vera_layer_mode_tile::config#13 vera_layer_mode_tile::config#26 vera_layer_mode_tile::config#14 vera_layer_mode_tile::config#27 vera_layer_mode_tile::config#15 vera_layer_mode_tile::config#28 vera_layer_mode_tile::config#16 -Alias vera_layer_mode_tile::mapwidth#10 = vera_layer_mode_tile::mapwidth#14 vera_layer_mode_tile::mapwidth#15 vera_layer_mode_tile::mapwidth#11 vera_layer_mode_tile::mapwidth#16 vera_layer_mode_tile::mapwidth#12 vera_layer_mode_tile::mapwidth#9 vera_layer_mode_tile::mapwidth#13 -Alias vera_layer_mode_tile::layer#25 = vera_layer_mode_tile::layer#26 vera_layer_mode_tile::layer#34 vera_layer_mode_tile::layer#35 vera_layer_mode_tile::layer#27 vera_layer_mode_tile::layer#36 vera_layer_mode_tile::layer#28 vera_layer_mode_tile::layer#29 -Alias vera_layer_mode_tile::mapheight#17 = vera_layer_mode_tile::mapheight#18 vera_layer_mode_tile::mapheight#22 vera_layer_mode_tile::mapheight#23 vera_layer_mode_tile::mapheight#19 vera_layer_mode_tile::mapheight#24 vera_layer_mode_tile::mapheight#20 vera_layer_mode_tile::mapheight#21 -Alias vera_layer_mode_tile::mapbase_address#24 = vera_layer_mode_tile::mapbase_address#25 vera_layer_mode_tile::mapbase_address#29 vera_layer_mode_tile::mapbase_address#30 vera_layer_mode_tile::mapbase_address#26 vera_layer_mode_tile::mapbase_address#31 vera_layer_mode_tile::mapbase_address#27 vera_layer_mode_tile::mapbase_address#28 -Alias vera_layer_mode_tile::tilebase_address#25 = vera_layer_mode_tile::tilebase_address#26 vera_layer_mode_tile::tilebase_address#30 vera_layer_mode_tile::tilebase_address#31 vera_layer_mode_tile::tilebase_address#27 vera_layer_mode_tile::tilebase_address#32 vera_layer_mode_tile::tilebase_address#28 vera_layer_mode_tile::tilebase_address#29 -Alias vera_layer_mode_tile::tilewidth#25 = vera_layer_mode_tile::tilewidth#26 vera_layer_mode_tile::tilewidth#30 vera_layer_mode_tile::tilewidth#31 vera_layer_mode_tile::tilewidth#27 vera_layer_mode_tile::tilewidth#32 vera_layer_mode_tile::tilewidth#28 vera_layer_mode_tile::tilewidth#29 -Alias vera_layer_mode_tile::tileheight#29 = vera_layer_mode_tile::tileheight#30 vera_layer_mode_tile::tileheight#34 vera_layer_mode_tile::tileheight#35 vera_layer_mode_tile::tileheight#31 vera_layer_mode_tile::tileheight#36 vera_layer_mode_tile::tileheight#32 vera_layer_mode_tile::tileheight#33 -Alias vera_layer_mode_tile::color_depth#5 = vera_layer_mode_tile::color_depth#6 vera_layer_mode_tile::color_depth#7 vera_layer_mode_tile::color_depth#8 -Alias vera_layer_mode_tile::config#17 = vera_layer_mode_tile::config#29 vera_layer_mode_tile::config#30 vera_layer_mode_tile::config#18 vera_layer_mode_tile::config#31 vera_layer_mode_tile::config#19 vera_layer_mode_tile::config#32 vera_layer_mode_tile::config#20 -Alias vera_layer_mode_tile::layer#13 = vera_layer_mode_tile::layer#5 vera_layer_mode_tile::layer#14 vera_layer_mode_tile::layer#6 vera_layer_mode_tile::layer#15 vera_layer_mode_tile::layer#7 vera_layer_mode_tile::layer#16 vera_layer_mode_tile::layer#8 -Alias vera_layer_mode_tile::mapheight#10 = vera_layer_mode_tile::mapheight#14 vera_layer_mode_tile::mapheight#15 vera_layer_mode_tile::mapheight#11 vera_layer_mode_tile::mapheight#16 vera_layer_mode_tile::mapheight#12 vera_layer_mode_tile::mapheight#9 vera_layer_mode_tile::mapheight#13 -Alias vera_layer_mode_tile::mapbase_address#16 = vera_layer_mode_tile::mapbase_address#17 vera_layer_mode_tile::mapbase_address#21 vera_layer_mode_tile::mapbase_address#22 vera_layer_mode_tile::mapbase_address#18 vera_layer_mode_tile::mapbase_address#23 vera_layer_mode_tile::mapbase_address#19 vera_layer_mode_tile::mapbase_address#20 -Alias vera_layer_mode_tile::tilebase_address#17 = vera_layer_mode_tile::tilebase_address#18 vera_layer_mode_tile::tilebase_address#22 vera_layer_mode_tile::tilebase_address#23 vera_layer_mode_tile::tilebase_address#19 vera_layer_mode_tile::tilebase_address#24 vera_layer_mode_tile::tilebase_address#20 vera_layer_mode_tile::tilebase_address#21 -Alias vera_layer_mode_tile::tilewidth#17 = vera_layer_mode_tile::tilewidth#18 vera_layer_mode_tile::tilewidth#22 vera_layer_mode_tile::tilewidth#23 vera_layer_mode_tile::tilewidth#19 vera_layer_mode_tile::tilewidth#24 vera_layer_mode_tile::tilewidth#20 vera_layer_mode_tile::tilewidth#21 -Alias vera_layer_mode_tile::tileheight#21 = vera_layer_mode_tile::tileheight#22 vera_layer_mode_tile::tileheight#26 vera_layer_mode_tile::tileheight#27 vera_layer_mode_tile::tileheight#23 vera_layer_mode_tile::tileheight#28 vera_layer_mode_tile::tileheight#24 vera_layer_mode_tile::tileheight#25 -Alias vera_layer_mode_tile::mapwidth#5 = vera_layer_mode_tile::mapwidth#6 vera_layer_mode_tile::mapwidth#7 vera_layer_mode_tile::mapwidth#8 -Alias vera_layer_mode_tile::config#21 = vera_layer_mode_tile::config#33 vera_layer_mode_tile::config#34 vera_layer_mode_tile::config#22 vera_layer_mode_tile::config#35 vera_layer_mode_tile::config#23 vera_layer_mode_tile::config#36 vera_layer_mode_tile::config#24 -Alias vera_layer_mode_tile::layer#17 = vera_layer_mode_tile::layer#18 vera_layer_mode_tile::layer#30 vera_layer_mode_tile::layer#31 vera_layer_mode_tile::layer#19 vera_layer_mode_tile::layer#32 vera_layer_mode_tile::layer#20 vera_layer_mode_tile::layer#21 -Alias vera_layer_mode_tile::mapbase_address#10 = vera_layer_mode_tile::mapbase_address#9 vera_layer_mode_tile::mapbase_address#13 vera_layer_mode_tile::mapbase_address#14 vera_layer_mode_tile::mapbase_address#15 vera_layer_mode_tile::mapbase_address#11 vera_layer_mode_tile::mapbase_address#8 vera_layer_mode_tile::mapbase_address#12 -Alias vera_layer_mode_tile::tilebase_address#10 = vera_layer_mode_tile::tilebase_address#14 vera_layer_mode_tile::tilebase_address#15 vera_layer_mode_tile::tilebase_address#11 vera_layer_mode_tile::tilebase_address#16 vera_layer_mode_tile::tilebase_address#12 vera_layer_mode_tile::tilebase_address#9 vera_layer_mode_tile::tilebase_address#13 -Alias vera_layer_mode_tile::tilewidth#10 = vera_layer_mode_tile::tilewidth#14 vera_layer_mode_tile::tilewidth#15 vera_layer_mode_tile::tilewidth#11 vera_layer_mode_tile::tilewidth#16 vera_layer_mode_tile::tilewidth#12 vera_layer_mode_tile::tilewidth#9 vera_layer_mode_tile::tilewidth#13 -Alias vera_layer_mode_tile::tileheight#13 = vera_layer_mode_tile::tileheight#14 vera_layer_mode_tile::tileheight#18 vera_layer_mode_tile::tileheight#19 vera_layer_mode_tile::tileheight#15 vera_layer_mode_tile::tileheight#20 vera_layer_mode_tile::tileheight#16 vera_layer_mode_tile::tileheight#17 -Alias vera_layer_mode_tile::mapheight#5 = vera_layer_mode_tile::mapheight#6 vera_layer_mode_tile::mapheight#7 vera_layer_mode_tile::mapheight#8 -Alias vera_layer_mode_tile::mapbase_address#6 = vera_layer_mode_tile::mapbase_address#7 -Alias vera_layer_mode_tile::layer#10 = vera_layer_mode_tile::layer#9 vera_layer_mode_tile::layer#11 vera_layer_mode_tile::layer#38 vera_layer_mode_tile::layer#37 vera_layer_mode_tile::layer#39 -Alias vera_layer_mode_tile::tilebase_address#6 = vera_layer_mode_tile::tilebase_address#7 vera_layer_mode_tile::tilebase_address#8 -Alias vera_layer_mode_tile::tilewidth#5 = vera_layer_mode_tile::tilewidth#7 vera_layer_mode_tile::tilewidth#8 vera_layer_mode_tile::tilewidth#6 -Alias vera_layer_mode_tile::tileheight#10 = vera_layer_mode_tile::tileheight#11 vera_layer_mode_tile::tileheight#12 vera_layer_mode_tile::tileheight#8 vera_layer_mode_tile::tileheight#7 vera_layer_mode_tile::tileheight#9 -Alias vera_layer_mode_tile::mapbase_address#0 = vera_layer_mode_tile::$3 -Alias vera_layer_mode_tile::tilebase_address#0 = vera_layer_mode_tile::$8 -Alias vera_layer_mode_tile::tilebase#1 = vera_layer_mode_tile::tilebase#6 vera_layer_mode_tile::tilebase#11 vera_layer_mode_tile::tilebase#7 -Alias vera_layer_mode_tile::tilebase#12 = vera_layer_mode_tile::tilebase#8 vera_layer_mode_tile::tilebase#13 vera_layer_mode_tile::tilebase#9 -Alias vera_layer_mode_tile::layer#22 = vera_layer_mode_tile::layer#23 vera_layer_mode_tile::layer#33 vera_layer_mode_tile::layer#24 -Alias vera_layer_mode_tile::tileheight#5 = vera_layer_mode_tile::tileheight#6 -Alias vera_layer_mode_text::color_mode#1 = vera_layer_mode_text::color_mode#3 vera_layer_mode_text::color_mode#2 -Alias vera_layer_mode_text::layer#1 = vera_layer_mode_text::layer#4 vera_layer_mode_text::layer#2 vera_layer_mode_text::layer#5 vera_layer_mode_text::layer#3 -Alias vera_tile_area::offset#0 = vera_tile_area::$1 -Alias vera_tile_area::mapbase#10 = vera_tile_area::mapbase#4 vera_tile_area::mapbase#6 vera_tile_area::vera_vram_address01_bankaddr#0 vera_tile_area::vera_vram_address01_bankaddr#1 vera_tile_area::mapbase#9 -Alias vera_tile_area::w#10 = vera_tile_area::w#9 vera_tile_area::w#8 vera_tile_area::w#7 -Alias vera_tile_area::index_l#3 = vera_tile_area::index_l#5 vera_tile_area::index_l#6 vera_tile_area::index_l#4 -Alias vera_tile_area::index_h#6 = vera_tile_area::index_h#8 vera_tile_area::index_h#9 vera_tile_area::index_h#7 -Alias vera_tile_area::rowskip#4 = vera_tile_area::rowskip#6 vera_tile_area::rowskip#7 vera_tile_area::rowskip#5 -Alias vera_tile_area::r#2 = vera_tile_area::r#8 vera_tile_area::r#7 vera_tile_area::r#6 -Alias vera_tile_area::h#10 = vera_tile_area::h#12 vera_tile_area::h#5 vera_tile_area::h#11 -Alias vera_tile_area::vera_vram_address01_incr#0 = vera_tile_area::vera_vram_address01_incr#1 -Alias vera_tile_area::index_l#1 = vera_tile_area::index_l#2 vera_tile_area::index_l#7 -Alias vera_tile_area::index_h#10 = vera_tile_area::index_h#4 vera_tile_area::index_h#5 -Alias vera_tile_area::c#2 = vera_tile_area::c#3 -Alias vera_tile_area::w#12 = vera_tile_area::w#6 vera_tile_area::w#5 -Alias vera_tile_area::mapbase#5 = vera_tile_area::mapbase#8 vera_tile_area::mapbase#7 -Alias vera_tile_area::rowskip#1 = vera_tile_area::rowskip#3 vera_tile_area::rowskip#2 -Alias vera_tile_area::r#3 = vera_tile_area::r#5 vera_tile_area::r#4 -Alias vera_tile_area::h#7 = vera_tile_area::h#9 vera_tile_area::h#8 -Alias CONIO_SCREEN_BANK#24 = CONIO_SCREEN_BANK#34 CONIO_SCREEN_BANK#42 -Alias CONIO_SCREEN_TEXT#27 = CONIO_SCREEN_TEXT#36 CONIO_SCREEN_TEXT#45 -Alias conio_x16_init::line#0 = conio_x16_init::line#9 conio_x16_init::line#8 conio_x16_init::line#7 conio_x16_init::line#6 conio_x16_init::line#5 conio_x16_init::line#4 conio_x16_init::line#2 -Alias CONIO_SCREEN_BANK#0 = CONIO_SCREEN_BANK#13 CONIO_SCREEN_BANK#60 CONIO_SCREEN_BANK#56 CONIO_SCREEN_BANK#51 CONIO_SCREEN_BANK#44 CONIO_SCREEN_BANK#43 -Alias CONIO_SCREEN_TEXT#0 = CONIO_SCREEN_TEXT#13 CONIO_SCREEN_TEXT#66 CONIO_SCREEN_TEXT#60 CONIO_SCREEN_TEXT#54 CONIO_SCREEN_TEXT#47 CONIO_SCREEN_TEXT#46 -Alias CONIO_SCREEN_BANK#1 = CONIO_SCREEN_BANK#25 CONIO_SCREEN_BANK#35 CONIO_SCREEN_BANK#14 -Alias CONIO_SCREEN_TEXT#1 = CONIO_SCREEN_TEXT#28 CONIO_SCREEN_TEXT#37 CONIO_SCREEN_TEXT#14 -Alias conio_x16_init::line#1 = conio_x16_init::$9 -Alias vera_layer_get_color::return#4 = vera_layer_get_color::return#7 -Alias clearline::color#1 = clearline::color#2 -Alias clearline::c#2 = clearline::c#3 -Alias insertup::i#2 = insertup::i#3 insertup::i#4 -Alias CONIO_SCREEN_TEXT#16 = CONIO_SCREEN_TEXT#30 CONIO_SCREEN_TEXT#39 CONIO_SCREEN_TEXT#29 -Alias insertup::width#1 = insertup::width#2 insertup::width#3 -Alias insertup::cy#1 = insertup::cy#3 insertup::cy#2 -Alias CONIO_SCREEN_TEXT#48 = CONIO_SCREEN_TEXT#55 CONIO_SCREEN_TEXT#61 -Alias gotoxy::y#2 = cscroll::$5 -Alias vera_layer_get_mapbase_bank::return#2 = vera_layer_get_mapbase_bank::return#4 -Alias CONIO_SCREEN_BANK#15 = CONIO_SCREEN_BANK#2 screenlayer::$0 CONIO_SCREEN_BANK#72 CONIO_SCREEN_BANK#69 CONIO_SCREEN_BANK#65 CONIO_SCREEN_BANK#61 CONIO_SCREEN_BANK#57 CONIO_SCREEN_BANK#52 CONIO_SCREEN_BANK#45 CONIO_SCREEN_BANK#36 CONIO_SCREEN_BANK#26 CONIO_SCREEN_BANK#3 -Alias vera_layer_get_mapbase_offset::return#2 = vera_layer_get_mapbase_offset::return#4 -Alias screenlayer::vera_layer_get_width1_layer#0 = screenlayer::vera_layer_get_width1_layer#1 -Alias CONIO_SCREEN_TEXT#17 = CONIO_SCREEN_TEXT#79 CONIO_SCREEN_TEXT#2 CONIO_SCREEN_TEXT#75 CONIO_SCREEN_TEXT#68 CONIO_SCREEN_TEXT#62 CONIO_SCREEN_TEXT#56 CONIO_SCREEN_TEXT#49 CONIO_SCREEN_TEXT#40 CONIO_SCREEN_TEXT#31 CONIO_SCREEN_TEXT#3 -Alias vera_layer_get_rowshift::return#2 = vera_layer_get_rowshift::return#4 -Alias vera_layer_get_rowskip::return#2 = vera_layer_get_rowskip::return#4 -Alias screenlayer::vera_layer_get_height1_layer#0 = screenlayer::vera_layer_get_height1_layer#1 -Alias printf_str::c#1 = printf_str::$0 printf_str::c#2 -Alias printf_str::putc#8 = printf_str::putc#9 -Alias printf_str::s#0 = printf_str::s#11 -Alias CONIO_SCREEN_BANK#27 = CONIO_SCREEN_BANK#37 CONIO_SCREEN_BANK#46 -Alias CONIO_SCREEN_TEXT#32 = CONIO_SCREEN_TEXT#41 CONIO_SCREEN_TEXT#50 -Alias CONIO_SCREEN_BANK#105 = CONIO_SCREEN_BANK#4 CONIO_SCREEN_BANK#16 CONIO_SCREEN_BANK#75 CONIO_SCREEN_BANK#73 CONIO_SCREEN_BANK#70 CONIO_SCREEN_BANK#66 CONIO_SCREEN_BANK#62 CONIO_SCREEN_BANK#55 CONIO_SCREEN_BANK#107 CONIO_SCREEN_BANK#106 -Alias CONIO_SCREEN_TEXT#112 = CONIO_SCREEN_TEXT#4 CONIO_SCREEN_TEXT#18 CONIO_SCREEN_TEXT#69 CONIO_SCREEN_TEXT#63 CONIO_SCREEN_TEXT#57 CONIO_SCREEN_TEXT#51 CONIO_SCREEN_TEXT#42 CONIO_SCREEN_TEXT#24 CONIO_SCREEN_TEXT#114 CONIO_SCREEN_TEXT#113 -Alias main::textcolor1_color#0 = main::textcolor1_color#1 -Alias main::bgcolor1_color#0 = main::bgcolor1_color#1 -Alias main::tilebase#0 = main::tilebase#3 -Alias main::tilebase#4 = main::tilebase#6 main::tilebase#5 -Alias main::t#2 = main::t#3 main::t#4 -Alias CONIO_SCREEN_BANK#100 = CONIO_SCREEN_BANK#102 CONIO_SCREEN_BANK#103 CONIO_SCREEN_BANK#101 CONIO_SCREEN_BANK#99 -Alias CONIO_SCREEN_TEXT#106 = CONIO_SCREEN_TEXT#109 CONIO_SCREEN_TEXT#110 CONIO_SCREEN_TEXT#108 CONIO_SCREEN_TEXT#107 -Alias main::column#2 = main::column#3 -Alias main::tile#6 = main::tile#7 -Alias main::c#2 = main::c#3 -Alias main::row#4 = main::row#8 main::row#5 -Alias main::r#2 = main::r#3 main::r#4 -Alias CONIO_SCREEN_BANK#84 = CONIO_SCREEN_BANK#96 CONIO_SCREEN_BANK#97 CONIO_SCREEN_BANK#95 CONIO_SCREEN_BANK#94 CONIO_SCREEN_BANK#93 CONIO_SCREEN_BANK#92 CONIO_SCREEN_BANK#91 CONIO_SCREEN_BANK#90 CONIO_SCREEN_BANK#89 CONIO_SCREEN_BANK#88 CONIO_SCREEN_BANK#87 CONIO_SCREEN_BANK#86 CONIO_SCREEN_BANK#85 -Alias CONIO_SCREEN_TEXT#100 = CONIO_SCREEN_TEXT#103 CONIO_SCREEN_TEXT#104 CONIO_SCREEN_TEXT#102 CONIO_SCREEN_TEXT#101 CONIO_SCREEN_TEXT#99 CONIO_SCREEN_TEXT#98 CONIO_SCREEN_TEXT#97 CONIO_SCREEN_TEXT#96 CONIO_SCREEN_TEXT#95 CONIO_SCREEN_TEXT#94 CONIO_SCREEN_TEXT#93 CONIO_SCREEN_TEXT#92 CONIO_SCREEN_TEXT#91 -Alias main::tile#12 = main::tile#2 -Alias main::vera_layer_show1_layer#0 = main::vera_layer_show1_layer#1 -Alias kbhit::return#2 = kbhit::return#5 -Alias CONIO_SCREEN_BANK#80 = CONIO_SCREEN_BANK#82 CONIO_SCREEN_BANK#83 CONIO_SCREEN_BANK#81 -Alias CONIO_SCREEN_TEXT#87 = CONIO_SCREEN_TEXT#89 CONIO_SCREEN_TEXT#90 CONIO_SCREEN_TEXT#88 -Alias main::column1#2 = main::column1#3 -Alias main::tile#8 = main::tile#9 -Alias main::c1#2 = main::c1#3 -Alias main::row#11 = main::row#6 main::row#7 -Alias main::r1#2 = main::r1#3 main::r1#4 -Alias CONIO_SCREEN_BANK#76 = CONIO_SCREEN_BANK#77 CONIO_SCREEN_BANK#78 -Alias CONIO_SCREEN_TEXT#83 = CONIO_SCREEN_TEXT#84 CONIO_SCREEN_TEXT#85 -Alias main::tile#13 = main::tile#5 -Alias kbhit::return#3 = kbhit::return#6 -Alias CONIO_SCREEN_BANK#28 = CONIO_SCREEN_BANK#71 CONIO_SCREEN_BANK#74 CONIO_SCREEN_BANK#67 CONIO_SCREEN_BANK#63 CONIO_SCREEN_BANK#58 CONIO_SCREEN_BANK#53 CONIO_SCREEN_BANK#47 CONIO_SCREEN_BANK#38 -Alias CONIO_SCREEN_TEXT#33 = CONIO_SCREEN_TEXT#80 CONIO_SCREEN_TEXT#82 CONIO_SCREEN_TEXT#76 CONIO_SCREEN_TEXT#70 CONIO_SCREEN_TEXT#64 CONIO_SCREEN_TEXT#58 CONIO_SCREEN_TEXT#52 CONIO_SCREEN_TEXT#43 -Alias main::vera_layer_hide1_layer#0 = main::vera_layer_hide1_layer#1 -Alias CONIO_SCREEN_BANK#17 = CONIO_SCREEN_BANK#5 CONIO_SCREEN_BANK#68 CONIO_SCREEN_BANK#64 CONIO_SCREEN_BANK#59 CONIO_SCREEN_BANK#54 CONIO_SCREEN_BANK#48 CONIO_SCREEN_BANK#39 CONIO_SCREEN_BANK#29 CONIO_SCREEN_BANK#18 CONIO_SCREEN_BANK#6 -Alias CONIO_SCREEN_TEXT#19 = CONIO_SCREEN_TEXT#5 CONIO_SCREEN_TEXT#71 CONIO_SCREEN_TEXT#65 CONIO_SCREEN_TEXT#59 CONIO_SCREEN_TEXT#53 CONIO_SCREEN_TEXT#44 CONIO_SCREEN_TEXT#25 CONIO_SCREEN_TEXT#34 CONIO_SCREEN_TEXT#20 CONIO_SCREEN_TEXT#6 -Alias main::textcolor2_color#0 = main::textcolor2_color#1 -Alias main::bgcolor2_color#0 = main::bgcolor2_color#1 -Alias CONIO_SCREEN_BANK#19 = CONIO_SCREEN_BANK#8 CONIO_SCREEN_BANK#30 -Alias CONIO_SCREEN_TEXT#21 = CONIO_SCREEN_TEXT#8 CONIO_SCREEN_TEXT#35 -Alias CONIO_SCREEN_BANK#10 = CONIO_SCREEN_BANK#9 CONIO_SCREEN_BANK#20 CONIO_SCREEN_BANK#21 -Alias CONIO_SCREEN_TEXT#10 = CONIO_SCREEN_TEXT#9 CONIO_SCREEN_TEXT#22 CONIO_SCREEN_TEXT#23 -Successful SSA optimization Pass2AliasElimination -Alias candidate removed (volatile)kbhit::return#0 = kbhit::ch kbhit::return#4 kbhit::return#1 -Alias candidate removed (volatile)screenlayer::vera_layer_get_width1_return#0 = screenlayer::vera_layer_get_width1_return#2 screenlayer::vera_layer_get_width1_return#1 screenlayer::vera_layer_get_width1_return#3 screenlayer::$2 conio_width -Alias candidate removed (volatile)conio_rowshift = screenlayer::$3 -Alias candidate removed (volatile)conio_rowskip = screenlayer::$4 -Alias candidate removed (volatile)screenlayer::vera_layer_get_height1_return#0 = screenlayer::vera_layer_get_height1_return#2 screenlayer::vera_layer_get_height1_return#1 screenlayer::vera_layer_get_height1_return#3 screenlayer::$5 conio_height -Alias gotoxy::x#4 = gotoxy::x#6 -Alias gotoxy::y#5 = gotoxy::y#6 -Alias vera_layer_mode_tile::mapwidth#10 = vera_layer_mode_tile::mapwidth#5 -Alias vera_layer_mode_tile::layer#10 = vera_layer_mode_tile::layer#13 vera_layer_mode_tile::layer#25 vera_layer_mode_tile::layer#17 vera_layer_mode_tile::layer#22 vera_layer_mode_tile::layer#12 -Alias vera_layer_mode_tile::mapheight#10 = vera_layer_mode_tile::mapheight#17 vera_layer_mode_tile::mapheight#5 -Alias vera_layer_mode_tile::mapbase_address#10 = vera_layer_mode_tile::mapbase_address#16 vera_layer_mode_tile::mapbase_address#24 vera_layer_mode_tile::mapbase_address#6 -Alias vera_layer_mode_tile::tilebase_address#10 = vera_layer_mode_tile::tilebase_address#17 vera_layer_mode_tile::tilebase_address#25 vera_layer_mode_tile::tilebase_address#6 -Alias vera_layer_mode_tile::tilewidth#10 = vera_layer_mode_tile::tilewidth#17 vera_layer_mode_tile::tilewidth#25 vera_layer_mode_tile::tilewidth#5 -Alias vera_layer_mode_tile::tileheight#10 = vera_layer_mode_tile::tileheight#21 vera_layer_mode_tile::tileheight#29 vera_layer_mode_tile::tileheight#13 vera_layer_mode_tile::tileheight#5 -Alias CONIO_SCREEN_BANK#0 = CONIO_SCREEN_BANK#1 -Alias CONIO_SCREEN_TEXT#0 = CONIO_SCREEN_TEXT#1 -Successful SSA optimization Pass2AliasElimination -Alias candidate removed (volatile)kbhit::return#0 = kbhit::ch kbhit::return#4 kbhit::return#1 -Alias candidate removed (volatile)screenlayer::vera_layer_get_width1_return#0 = screenlayer::vera_layer_get_width1_return#2 screenlayer::vera_layer_get_width1_return#1 screenlayer::vera_layer_get_width1_return#3 screenlayer::$2 conio_width -Alias candidate removed (volatile)conio_rowshift = screenlayer::$3 -Alias candidate removed (volatile)conio_rowskip = screenlayer::$4 -Alias candidate removed (volatile)screenlayer::vera_layer_get_height1_return#0 = screenlayer::vera_layer_get_height1_return#2 screenlayer::vera_layer_get_height1_return#1 screenlayer::vera_layer_get_height1_return#3 screenlayer::$5 conio_height -Identical Phi Values memcpy_to_vram::end#1 memcpy_to_vram::end#0 -Identical Phi Values memcpy_in_vram::num#3 memcpy_in_vram::num#4 -Identical Phi Values clrscr::color#1 clrscr::color#3 -Identical Phi Values clrscr::line_text#3 clrscr::line_text#2 -Identical Phi Values clrscr::l#3 clrscr::l#2 -Identical Phi Values CONIO_SCREEN_BANK#31 CONIO_SCREEN_BANK#11 -Identical Phi Values screensize::x#1 screensize::x#0 -Identical Phi Values screensize::y#1 screensize::y#0 -Identical Phi Values CONIO_SCREEN_TEXT#67 CONIO_SCREEN_TEXT#12 -Identical Phi Values kbhit::return#4 kbhit::return#0 -Identical Phi Values vera_layer_set_config::layer#1 vera_layer_set_config::layer#0 -Identical Phi Values vera_layer_set_config::config#1 vera_layer_set_config::config#0 -Identical Phi Values vera_layer_get_mapbase_bank::layer#1 vera_layer_get_mapbase_bank::layer#0 -Identical Phi Values vera_layer_get_mapbase_offset::layer#1 vera_layer_get_mapbase_offset::layer#0 -Identical Phi Values vera_layer_set_tilebase::layer#1 vera_layer_set_tilebase::layer#0 -Identical Phi Values vera_layer_set_tilebase::tilebase#1 vera_layer_set_tilebase::tilebase#0 -Identical Phi Values vera_layer_get_textcolor::layer#1 vera_layer_get_textcolor::layer#0 -Identical Phi Values vera_layer_get_backcolor::layer#1 vera_layer_get_backcolor::layer#0 -Identical Phi Values vera_layer_get_rowshift::layer#1 vera_layer_get_rowshift::layer#0 -Identical Phi Values vera_layer_get_rowskip::layer#1 vera_layer_get_rowskip::layer#0 -Identical Phi Values vera_layer_mode_text::layer#1 vera_layer_mode_text::layer#0 -Identical Phi Values vera_layer_mode_text::mapbase_address#1 vera_layer_mode_text::mapbase_address#0 -Identical Phi Values vera_layer_mode_text::tilebase_address#1 vera_layer_mode_text::tilebase_address#0 -Identical Phi Values vera_layer_mode_text::mapwidth#1 vera_layer_mode_text::mapwidth#0 -Identical Phi Values vera_layer_mode_text::mapheight#1 vera_layer_mode_text::mapheight#0 -Identical Phi Values vera_layer_mode_text::tilewidth#1 vera_layer_mode_text::tilewidth#0 -Identical Phi Values vera_layer_mode_text::tileheight#1 vera_layer_mode_text::tileheight#0 -Identical Phi Values vera_layer_mode_text::color_mode#1 vera_layer_mode_text::color_mode#0 -Identical Phi Values vera_tile_area::w#12 vera_tile_area::w#10 -Identical Phi Values vera_tile_area::index_l#1 vera_tile_area::index_l#3 -Identical Phi Values vera_tile_area::index_h#10 vera_tile_area::index_h#6 -Identical Phi Values vera_tile_area::mapbase#5 vera_tile_area::mapbase#10 -Identical Phi Values vera_tile_area::rowskip#1 vera_tile_area::rowskip#4 -Identical Phi Values vera_tile_area::r#3 vera_tile_area::r#2 -Identical Phi Values vera_tile_area::h#7 vera_tile_area::h#10 -Identical Phi Values CONIO_SCREEN_BANK#24 CONIO_SCREEN_BANK#7 -Identical Phi Values CONIO_SCREEN_TEXT#27 CONIO_SCREEN_TEXT#7 -Identical Phi Values CONIO_SCREEN_BANK#0 CONIO_SCREEN_BANK#15 -Identical Phi Values CONIO_SCREEN_TEXT#0 CONIO_SCREEN_TEXT#17 -Identical Phi Values CONIO_SCREEN_TEXT#15 CONIO_SCREEN_TEXT#16 -Identical Phi Values clearline::color#1 clearline::color#0 -Identical Phi Values CONIO_SCREEN_TEXT#38 CONIO_SCREEN_TEXT#48 -Identical Phi Values insertup::cy#1 insertup::cy#0 -Identical Phi Values CONIO_SCREEN_TEXT#16 CONIO_SCREEN_TEXT#38 -Identical Phi Values insertup::width#1 insertup::width#0 -Identical Phi Values CONIO_SCREEN_TEXT#48 CONIO_SCREEN_TEXT#67 -Identical Phi Values screenlayer::vera_layer_get_width1_return#2 screenlayer::vera_layer_get_width1_return#0 -Identical Phi Values screenlayer::vera_layer_get_width1_return#3 screenlayer::vera_layer_get_width1_return#1 -Identical Phi Values screenlayer::vera_layer_get_height1_return#2 screenlayer::vera_layer_get_height1_return#0 -Identical Phi Values screenlayer::vera_layer_get_height1_return#3 screenlayer::vera_layer_get_height1_return#1 -Identical Phi Values printf_str::putc#8 printf_str::putc#10 -Identical Phi Values CONIO_SCREEN_BANK#27 CONIO_SCREEN_BANK#19 -Identical Phi Values CONIO_SCREEN_TEXT#32 CONIO_SCREEN_TEXT#21 -Identical Phi Values CONIO_SCREEN_BANK#105 CONIO_SCREEN_BANK#15 -Identical Phi Values CONIO_SCREEN_TEXT#112 CONIO_SCREEN_TEXT#17 -Identical Phi Values main::tilebase#4 main::tilebase#7 -Identical Phi Values main::t#2 main::t#5 -Identical Phi Values CONIO_SCREEN_BANK#100 CONIO_SCREEN_BANK#104 -Identical Phi Values CONIO_SCREEN_TEXT#106 CONIO_SCREEN_TEXT#111 -Identical Phi Values main::row#4 main::row#9 -Identical Phi Values main::r#2 main::r#5 -Identical Phi Values CONIO_SCREEN_BANK#84 CONIO_SCREEN_BANK#98 -Identical Phi Values CONIO_SCREEN_TEXT#100 CONIO_SCREEN_TEXT#105 -Identical Phi Values CONIO_SCREEN_BANK#80 CONIO_SCREEN_BANK#84 -Identical Phi Values CONIO_SCREEN_TEXT#87 CONIO_SCREEN_TEXT#100 -Identical Phi Values main::row#11 main::row#10 -Identical Phi Values main::r1#2 main::r1#5 -Identical Phi Values CONIO_SCREEN_BANK#76 CONIO_SCREEN_BANK#79 -Identical Phi Values CONIO_SCREEN_TEXT#83 CONIO_SCREEN_TEXT#86 -Identical Phi Values CONIO_SCREEN_BANK#28 CONIO_SCREEN_BANK#76 -Identical Phi Values CONIO_SCREEN_TEXT#33 CONIO_SCREEN_TEXT#83 -Identical Phi Values CONIO_SCREEN_BANK#17 CONIO_SCREEN_BANK#15 -Identical Phi Values CONIO_SCREEN_TEXT#19 CONIO_SCREEN_TEXT#17 -Identical Phi Values CONIO_SCREEN_BANK#19 CONIO_SCREEN_BANK#0 -Identical Phi Values CONIO_SCREEN_TEXT#21 CONIO_SCREEN_TEXT#0 -Identical Phi Values CONIO_SCREEN_BANK#10 CONIO_SCREEN_BANK#17 -Identical Phi Values CONIO_SCREEN_TEXT#10 CONIO_SCREEN_TEXT#19 -Successful SSA optimization Pass2IdenticalPhiElimination -Identical Phi Values CONIO_SCREEN_TEXT#11 CONIO_SCREEN_TEXT#17 -Identical Phi Values CONIO_SCREEN_BANK#32 CONIO_SCREEN_BANK#15 -Identical Phi Values CONIO_SCREEN_BANK#11 CONIO_SCREEN_BANK#32 -Identical Phi Values clrscr::color#3 clrscr::color#0 -Identical Phi Values vera_tile_area::h#10 vera_tile_area::h#6 -Identical Phi Values vera_tile_area::w#10 vera_tile_area::w#11 -Identical Phi Values vera_tile_area::index_l#3 vera_tile_area::index_l#0 -Identical Phi Values vera_tile_area::index_h#6 vera_tile_area::index_h#3 -Identical Phi Values vera_tile_area::rowskip#4 vera_tile_area::rowskip#0 -Identical Phi Values CONIO_SCREEN_BANK#104 CONIO_SCREEN_BANK#15 -Identical Phi Values CONIO_SCREEN_TEXT#111 CONIO_SCREEN_TEXT#17 -Identical Phi Values CONIO_SCREEN_BANK#98 CONIO_SCREEN_BANK#104 -Identical Phi Values CONIO_SCREEN_TEXT#105 CONIO_SCREEN_TEXT#111 -Identical Phi Values CONIO_SCREEN_BANK#79 CONIO_SCREEN_BANK#98 -Identical Phi Values CONIO_SCREEN_TEXT#86 CONIO_SCREEN_TEXT#105 -Successful SSA optimization Pass2IdenticalPhiElimination -Simple Condition memcpy_to_vram::$4 [13] if(memcpy_to_vram::s#2!=memcpy_to_vram::end#0) goto memcpy_to_vram::@2 -Simple Condition memcpy_in_vram::$6 [35] if(memcpy_in_vram::i#2> 7 - [177] screensize::$1 = $28 << screensize::hscale#0 - [178] *screensize::x#0 = screensize::$1 - [179] screensize::vscale#0 = *VERA_DC_VSCALE >> 7 - [180] screensize::$3 = $1e << screensize::vscale#0 - [181] *screensize::y#0 = screensize::$3 - to:screensize::@return -screensize::@return: scope:[screensize] from screensize - [182] return - to:@return - -void screenlayer(char layer) -screenlayer: scope:[screenlayer] from conio_x16_init::@4 main::@20 main::@38 - [183] conio_screen_layer = 1 - [184] vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer - [185] call vera_layer_get_mapbase_bank - [186] vera_layer_get_mapbase_bank::return#2 = vera_layer_get_mapbase_bank::return#0 - to:screenlayer::@3 -screenlayer::@3: scope:[screenlayer] from screenlayer - [187] CONIO_SCREEN_BANK#15 = vera_layer_get_mapbase_bank::return#2 - [188] vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer - [189] call vera_layer_get_mapbase_offset - [190] vera_layer_get_mapbase_offset::return#2 = vera_layer_get_mapbase_offset::return#0 - to:screenlayer::@4 -screenlayer::@4: scope:[screenlayer] from screenlayer::@3 - [191] CONIO_SCREEN_TEXT#17 = vera_layer_get_mapbase_offset::return#2 - [192] screenlayer::vera_layer_get_width1_layer#0 = conio_screen_layer - to:screenlayer::vera_layer_get_width1 -screenlayer::vera_layer_get_width1: scope:[screenlayer] from screenlayer::@4 - [193] screenlayer::vera_layer_get_width1_$2 = screenlayer::vera_layer_get_width1_layer#0 << 1 - [194] screenlayer::vera_layer_get_width1_config#0 = vera_layer_config[screenlayer::vera_layer_get_width1_$2] - [195] screenlayer::vera_layer_get_width1_$0 = *screenlayer::vera_layer_get_width1_config#0 & VERA_LAYER_WIDTH_MASK - [196] screenlayer::vera_layer_get_width1_$1 = screenlayer::vera_layer_get_width1_$0 >> 4 - [197] screenlayer::vera_layer_get_width1_$3 = screenlayer::vera_layer_get_width1_$1 << 1 - [198] screenlayer::vera_layer_get_width1_return#0 = VERA_LAYER_WIDTH[screenlayer::vera_layer_get_width1_$3] - to:screenlayer::vera_layer_get_width1_@return -screenlayer::vera_layer_get_width1_@return: scope:[screenlayer] from screenlayer::vera_layer_get_width1 - [199] screenlayer::vera_layer_get_width1_return#1 = screenlayer::vera_layer_get_width1_return#0 - to:screenlayer::@1 -screenlayer::@1: scope:[screenlayer] from screenlayer::vera_layer_get_width1_@return - [200] screenlayer::$2 = screenlayer::vera_layer_get_width1_return#1 - [201] conio_width = screenlayer::$2 - [202] vera_layer_get_rowshift::layer#0 = conio_screen_layer - [203] call vera_layer_get_rowshift - [204] vera_layer_get_rowshift::return#2 = vera_layer_get_rowshift::return#0 - to:screenlayer::@5 -screenlayer::@5: scope:[screenlayer] from screenlayer::@1 - [205] screenlayer::$3 = vera_layer_get_rowshift::return#2 - [206] conio_rowshift = screenlayer::$3 - [207] vera_layer_get_rowskip::layer#0 = conio_screen_layer - [208] call vera_layer_get_rowskip - [209] vera_layer_get_rowskip::return#2 = vera_layer_get_rowskip::return#0 - to:screenlayer::@6 -screenlayer::@6: scope:[screenlayer] from screenlayer::@5 - [210] screenlayer::$4 = vera_layer_get_rowskip::return#2 - [211] conio_rowskip = screenlayer::$4 - [212] screenlayer::vera_layer_get_height1_layer#0 = conio_screen_layer - to:screenlayer::vera_layer_get_height1 -screenlayer::vera_layer_get_height1: scope:[screenlayer] from screenlayer::@6 - [213] screenlayer::vera_layer_get_height1_$2 = screenlayer::vera_layer_get_height1_layer#0 << 1 - [214] screenlayer::vera_layer_get_height1_config#0 = vera_layer_config[screenlayer::vera_layer_get_height1_$2] - [215] screenlayer::vera_layer_get_height1_$0 = *screenlayer::vera_layer_get_height1_config#0 & VERA_LAYER_HEIGHT_MASK - [216] screenlayer::vera_layer_get_height1_$1 = screenlayer::vera_layer_get_height1_$0 >> 6 - [217] screenlayer::vera_layer_get_height1_$3 = screenlayer::vera_layer_get_height1_$1 << 1 - [218] screenlayer::vera_layer_get_height1_return#0 = VERA_LAYER_HEIGHT[screenlayer::vera_layer_get_height1_$3] - to:screenlayer::vera_layer_get_height1_@return -screenlayer::vera_layer_get_height1_@return: scope:[screenlayer] from screenlayer::vera_layer_get_height1 - [219] screenlayer::vera_layer_get_height1_return#1 = screenlayer::vera_layer_get_height1_return#0 - to:screenlayer::@2 -screenlayer::@2: scope:[screenlayer] from screenlayer::vera_layer_get_height1_@return - [220] screenlayer::$5 = screenlayer::vera_layer_get_height1_return#1 - [221] conio_height = screenlayer::$5 - to:screenlayer::@return -screenlayer::@return: scope:[screenlayer] from screenlayer::@2 - [222] return - to:@return - -char vera_layer_set_textcolor(char layer , char color) -vera_layer_set_textcolor: scope:[vera_layer_set_textcolor] from conio_x16_init::@5 main::textcolor1 main::textcolor2 - [223] vera_layer_set_textcolor::layer#3 = phi( conio_x16_init::@5/1, main::textcolor1/vera_layer_set_textcolor::layer#1, main::textcolor2/vera_layer_set_textcolor::layer#2 ) - [224] vera_layer_textcolor[vera_layer_set_textcolor::layer#3] = WHITE - to:vera_layer_set_textcolor::@return -vera_layer_set_textcolor::@return: scope:[vera_layer_set_textcolor] from vera_layer_set_textcolor - [225] return - to:@return - -char vera_layer_set_backcolor(char layer , char color) -vera_layer_set_backcolor: scope:[vera_layer_set_backcolor] from conio_x16_init::@6 main::bgcolor1 main::bgcolor2 - [226] vera_layer_set_backcolor::color#3 = phi( conio_x16_init::@6/BLUE, main::bgcolor1/BLACK, main::bgcolor2/BLUE ) - [226] vera_layer_set_backcolor::layer#3 = phi( conio_x16_init::@6/1, main::bgcolor1/vera_layer_set_backcolor::layer#1, main::bgcolor2/vera_layer_set_backcolor::layer#2 ) - [227] vera_layer_backcolor[vera_layer_set_backcolor::layer#3] = vera_layer_set_backcolor::color#3 - to:vera_layer_set_backcolor::@return -vera_layer_set_backcolor::@return: scope:[vera_layer_set_backcolor] from vera_layer_set_backcolor - [228] return - to:@return - -void vera_layer_set_mapbase(char layer , char mapbase) -vera_layer_set_mapbase: scope:[vera_layer_set_mapbase] from conio_x16_init::@7 conio_x16_init::@8 vera_layer_mode_tile::@27 - [229] vera_layer_set_mapbase::mapbase#3 = phi( conio_x16_init::@7/$20, conio_x16_init::@8/0, vera_layer_mode_tile::@27/vera_layer_set_mapbase::mapbase#0 ) - [229] vera_layer_set_mapbase::layer#3 = phi( conio_x16_init::@7/0, conio_x16_init::@8/1, vera_layer_mode_tile::@27/vera_layer_set_mapbase::layer#0 ) - [230] vera_layer_set_mapbase::$0 = vera_layer_set_mapbase::layer#3 << 1 - [231] vera_layer_set_mapbase::addr#0 = vera_layer_mapbase[vera_layer_set_mapbase::$0] - [232] *vera_layer_set_mapbase::addr#0 = vera_layer_set_mapbase::mapbase#3 - to:vera_layer_set_mapbase::@return -vera_layer_set_mapbase::@return: scope:[vera_layer_set_mapbase] from vera_layer_set_mapbase - [233] return - to:@return - -void gotoxy(char x , char y) -gotoxy: scope:[gotoxy] from conio_x16_init::@1 cscroll::@5 main::@8 - [234] gotoxy::y#4 = phi( conio_x16_init::@1/gotoxy::y#1, cscroll::@5/gotoxy::y#2, main::@8/$32 ) - [235] if(gotoxy::y#4<=conio_screen_height) goto gotoxy::@4 - to:gotoxy::@1 -gotoxy::@4: scope:[gotoxy] from gotoxy - [236] phi() - to:gotoxy::@1 -gotoxy::@1: scope:[gotoxy] from gotoxy gotoxy::@4 - [237] gotoxy::y#5 = phi( gotoxy::@4/gotoxy::y#4, gotoxy/0 ) - [238] if(0> 1 - [319] vera_layer_mode_tile::mapbase#0 = byte1 vera_layer_mode_tile::mapbase_address#0 - [320] vera_layer_set_mapbase::layer#0 = vera_layer_mode_tile::layer#10 - [321] vera_layer_set_mapbase::mapbase#0 = vera_layer_mode_tile::mapbase#0 - [322] call vera_layer_set_mapbase - to:vera_layer_mode_tile::@28 -vera_layer_mode_tile::@28: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@27 - [323] vera_layer_mode_tile::$6 = word0 vera_layer_mode_tile::tilebase_address#10 - [324] vera_tilebase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$6 - [325] vera_layer_mode_tile::$7 = byte2 vera_layer_mode_tile::tilebase_address#10 - [326] vera_tilebase_bank[vera_layer_mode_tile::layer#10] = vera_layer_mode_tile::$7 - [327] vera_tilebase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::tilebase_address#10 - [328] vera_layer_mode_tile::tilebase_address#0 = vera_layer_mode_tile::tilebase_address#10 >> 1 - [329] vera_layer_mode_tile::tilebase#0 = byte1 vera_layer_mode_tile::tilebase_address#0 - [330] vera_layer_mode_tile::tilebase#1 = vera_layer_mode_tile::tilebase#0 & VERA_LAYER_TILEBASE_MASK - [331] if(vera_layer_mode_tile::tilewidth#10==8) goto vera_layer_mode_tile::@23 - to:vera_layer_mode_tile::@21 -vera_layer_mode_tile::@21: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@28 - [332] if(vera_layer_mode_tile::tilewidth#10!=$10) goto vera_layer_mode_tile::@23 - to:vera_layer_mode_tile::@22 -vera_layer_mode_tile::@22: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@21 - [333] vera_layer_mode_tile::tilebase#3 = vera_layer_mode_tile::tilebase#1 | VERA_TILEBASE_WIDTH_16 - to:vera_layer_mode_tile::@23 -vera_layer_mode_tile::@23: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@21 vera_layer_mode_tile::@22 vera_layer_mode_tile::@28 - [334] vera_layer_mode_tile::tilebase#12 = phi( vera_layer_mode_tile::@21/vera_layer_mode_tile::tilebase#1, vera_layer_mode_tile::@28/vera_layer_mode_tile::tilebase#1, vera_layer_mode_tile::@22/vera_layer_mode_tile::tilebase#3 ) - [335] if(vera_layer_mode_tile::tileheight#10==8) goto vera_layer_mode_tile::@26 - to:vera_layer_mode_tile::@24 -vera_layer_mode_tile::@24: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@23 - [336] if(vera_layer_mode_tile::tileheight#10!=$10) goto vera_layer_mode_tile::@26 - to:vera_layer_mode_tile::@25 -vera_layer_mode_tile::@25: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@24 - [337] vera_layer_mode_tile::tilebase#5 = vera_layer_mode_tile::tilebase#12 | VERA_TILEBASE_HEIGHT_16 - to:vera_layer_mode_tile::@26 -vera_layer_mode_tile::@26: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@23 vera_layer_mode_tile::@24 vera_layer_mode_tile::@25 - [338] vera_layer_mode_tile::tilebase#10 = phi( vera_layer_mode_tile::@24/vera_layer_mode_tile::tilebase#12, vera_layer_mode_tile::@23/vera_layer_mode_tile::tilebase#12, vera_layer_mode_tile::@25/vera_layer_mode_tile::tilebase#5 ) - [339] vera_layer_set_tilebase::layer#0 = vera_layer_mode_tile::layer#10 - [340] vera_layer_set_tilebase::tilebase#0 = vera_layer_mode_tile::tilebase#10 - [341] call vera_layer_set_tilebase - to:vera_layer_mode_tile::@return -vera_layer_mode_tile::@return: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@26 - [342] return - to:@return -vera_layer_mode_tile::@18: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@15 - [343] vera_layer_mode_tile::config#11 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_128 - to:vera_layer_mode_tile::@20 -vera_layer_mode_tile::@17: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@14 - [344] vera_layer_mode_tile::config#10 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_64 - to:vera_layer_mode_tile::@20 -vera_layer_mode_tile::@11: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@7 - [345] vera_layer_mode_tile::config#7 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_128 - [346] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 8 - [347] vera_layer_mode_tile::$13 = vera_layer_mode_tile::layer#10 << 1 - [348] vera_layer_rowskip[vera_layer_mode_tile::$13] = $100 - to:vera_layer_mode_tile::@13 -vera_layer_mode_tile::@10: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@6 - [349] vera_layer_mode_tile::config#6 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_64 - [350] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 7 - [351] vera_layer_mode_tile::$12 = vera_layer_mode_tile::layer#10 << 1 - [352] vera_layer_rowskip[vera_layer_mode_tile::$12] = $80 - to:vera_layer_mode_tile::@13 -vera_layer_mode_tile::@9: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@5 - [353] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 6 - [354] vera_layer_mode_tile::$11 = vera_layer_mode_tile::layer#10 << 1 - [355] vera_layer_rowskip[vera_layer_mode_tile::$11] = $40 - to:vera_layer_mode_tile::@13 - -void clrscr() -clrscr: scope:[clrscr] from main::@16 main::@18 - [356] clrscr::line_text#0 = (char *)CONIO_SCREEN_TEXT#17 - [357] vera_layer_get_backcolor::layer#0 = conio_screen_layer - [358] call vera_layer_get_backcolor - [359] vera_layer_get_backcolor::return#0 = vera_layer_get_backcolor::return#1 - to:clrscr::@7 -clrscr::@7: scope:[clrscr] from clrscr - [360] clrscr::$0 = vera_layer_get_backcolor::return#0 - [361] clrscr::$1 = clrscr::$0 << 4 - [362] vera_layer_get_textcolor::layer#0 = conio_screen_layer - [363] call vera_layer_get_textcolor - [364] vera_layer_get_textcolor::return#0 = vera_layer_get_textcolor::return#1 - to:clrscr::@8 -clrscr::@8: scope:[clrscr] from clrscr::@7 - [365] clrscr::$2 = vera_layer_get_textcolor::return#0 - [366] clrscr::color#0 = clrscr::$1 | clrscr::$2 - to:clrscr::@1 -clrscr::@1: scope:[clrscr] from clrscr::@6 clrscr::@8 - [367] clrscr::line_text#2 = phi( clrscr::@6/clrscr::line_text#1, clrscr::@8/clrscr::line_text#0 ) - [367] clrscr::l#2 = phi( clrscr::@6/clrscr::l#1, clrscr::@8/0 ) - [368] if(clrscr::l#2$0000 - rts - - continue1: - nop - }} - [444] kbhit::return#0 = kbhit::ch - to:kbhit::@return -kbhit::@return: scope:[kbhit] from kbhit - [445] kbhit::return#1 = kbhit::return#0 - [446] return - to:@return - -void vera_layer_set_text_color_mode(char layer , char color_mode) -vera_layer_set_text_color_mode: scope:[vera_layer_set_text_color_mode] from vera_layer_mode_text::@1 - [447] vera_layer_set_text_color_mode::addr#0 = *(vera_layer_config+vera_layer_mode_text::layer#0*SIZEOF_POINTER) - [448] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 & ~VERA_LAYER_CONFIG_256C - [449] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 - to:vera_layer_set_text_color_mode::@return -vera_layer_set_text_color_mode::@return: scope:[vera_layer_set_text_color_mode] from vera_layer_set_text_color_mode - [450] return - to:@return - -char vera_layer_get_mapbase_bank(char layer) -vera_layer_get_mapbase_bank: scope:[vera_layer_get_mapbase_bank] from screenlayer - [451] vera_layer_get_mapbase_bank::return#0 = vera_mapbase_bank[vera_layer_get_mapbase_bank::layer#0] - to:vera_layer_get_mapbase_bank::@return -vera_layer_get_mapbase_bank::@return: scope:[vera_layer_get_mapbase_bank] from vera_layer_get_mapbase_bank - [452] return - to:@return - -unsigned int vera_layer_get_mapbase_offset(char layer) -vera_layer_get_mapbase_offset: scope:[vera_layer_get_mapbase_offset] from screenlayer::@3 - [453] vera_layer_get_mapbase_offset::$0 = vera_layer_get_mapbase_offset::layer#0 << 1 - [454] vera_layer_get_mapbase_offset::return#0 = vera_mapbase_offset[vera_layer_get_mapbase_offset::$0] - to:vera_layer_get_mapbase_offset::@return -vera_layer_get_mapbase_offset::@return: scope:[vera_layer_get_mapbase_offset] from vera_layer_get_mapbase_offset - [455] return - to:@return - -char vera_layer_get_rowshift(char layer) -vera_layer_get_rowshift: scope:[vera_layer_get_rowshift] from screenlayer::@1 - [456] vera_layer_get_rowshift::return#0 = vera_layer_rowshift[vera_layer_get_rowshift::layer#0] - to:vera_layer_get_rowshift::@return -vera_layer_get_rowshift::@return: scope:[vera_layer_get_rowshift] from vera_layer_get_rowshift - [457] return - to:@return - -unsigned int vera_layer_get_rowskip(char layer) -vera_layer_get_rowskip: scope:[vera_layer_get_rowskip] from screenlayer::@5 - [458] vera_layer_get_rowskip::$0 = vera_layer_get_rowskip::layer#0 << 1 - [459] vera_layer_get_rowskip::return#0 = vera_layer_rowskip[vera_layer_get_rowskip::$0] - to:vera_layer_get_rowskip::@return -vera_layer_get_rowskip::@return: scope:[vera_layer_get_rowskip] from vera_layer_get_rowskip - [460] return - to:@return - -void cscroll() -cscroll: scope:[cscroll] from cputln - [461] if(conio_cursor_y[conio_screen_layer]> 7 [ screensize::hscale#0 ] ( screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::hscale#0 ] { } conio_x16_init:8::screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::hscale#0 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ conio_x16_init::line#3 conio_x16_init::line#1 conio_x16_init::line#0 ] -Statement [177] screensize::$1 = $28 << screensize::hscale#0 [ screensize::$1 ] ( screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$1 ] { } conio_x16_init:8::screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$1 ] { } ) always clobbers reg byte a -Statement [179] screensize::vscale#0 = *VERA_DC_VSCALE >> 7 [ screensize::vscale#0 ] ( screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::vscale#0 ] { } conio_x16_init:8::screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::vscale#0 ] { } ) always clobbers reg byte a -Statement [180] screensize::$3 = $1e << screensize::vscale#0 [ screensize::$3 ] ( screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$3 ] { } conio_x16_init:8::screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$3 ] { } ) always clobbers reg byte a -Statement [183] conio_screen_layer = 1 [ conio_screen_layer ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer ] { { vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_bank::return#0 = vera_layer_get_mapbase_bank::return#2 } } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer ] { { vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_bank::return#0 = vera_layer_get_mapbase_bank::return#2 } } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer ] { { vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_bank::return#0 = vera_layer_get_mapbase_bank::return#2 } } main:10::screenlayer:163 [ conio_screen_layer ] { { vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_bank::return#0 = vera_layer_get_mapbase_bank::return#2 } } ) always clobbers reg byte a -Statement [190] vera_layer_get_mapbase_offset::return#2 = vera_layer_get_mapbase_offset::return#0 [ conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#2 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#2 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#2 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#2 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } main:10::screenlayer:163 [ conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#2 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ CONIO_SCREEN_BANK#15 ] -Statement [191] CONIO_SCREEN_TEXT#17 = vera_layer_get_mapbase_offset::return#2 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:10::screenlayer:163 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } ) always clobbers reg byte a -Statement [193] screenlayer::vera_layer_get_width1_$2 = screenlayer::vera_layer_get_width1_layer#0 << 1 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$2 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$2 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$2 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$2 ] { } main:10::screenlayer:163 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$2 ] { } ) always clobbers reg byte a -Statement [194] screenlayer::vera_layer_get_width1_config#0 = vera_layer_config[screenlayer::vera_layer_get_width1_$2] [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_config#0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_config#0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_config#0 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_config#0 ] { } main:10::screenlayer:163 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_config#0 ] { } ) always clobbers reg byte a -Statement [195] screenlayer::vera_layer_get_width1_$0 = *screenlayer::vera_layer_get_width1_config#0 & VERA_LAYER_WIDTH_MASK [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$0 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$0 ] { } main:10::screenlayer:163 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$0 ] { } ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for mem[1] [ conio_x16_init::line#3 conio_x16_init::line#1 conio_x16_init::line#0 ] -Removing always clobbered register reg byte y as potential for mem[1] [ CONIO_SCREEN_BANK#15 ] -Statement [196] screenlayer::vera_layer_get_width1_$1 = screenlayer::vera_layer_get_width1_$0 >> 4 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$1 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$1 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$1 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$1 ] { } main:10::screenlayer:163 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$1 ] { } ) always clobbers reg byte a -Statement [197] screenlayer::vera_layer_get_width1_$3 = screenlayer::vera_layer_get_width1_$1 << 1 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$3 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$3 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$3 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$3 ] { } main:10::screenlayer:163 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$3 ] { } ) always clobbers reg byte a -Statement [198] screenlayer::vera_layer_get_width1_return#0 = VERA_LAYER_WIDTH[screenlayer::vera_layer_get_width1_$3] [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#0 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#0 ] { } main:10::screenlayer:163 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#0 ] { } ) always clobbers reg byte a -Statement [199] screenlayer::vera_layer_get_width1_return#1 = screenlayer::vera_layer_get_width1_return#0 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#1 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#1 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#1 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#1 ] { } main:10::screenlayer:163 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#1 ] { } ) always clobbers reg byte a -Statement [200] screenlayer::$2 = screenlayer::vera_layer_get_width1_return#1 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$2 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$2 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$2 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$2 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } main:10::screenlayer:163 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$2 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } ) always clobbers reg byte a -Statement [201] conio_width = screenlayer::$2 [ conio_screen_layer conio_width CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer conio_width CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } main:10::screenlayer:163 [ conio_screen_layer conio_width CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } ) always clobbers reg byte a -Statement [209] vera_layer_get_rowskip::return#2 = vera_layer_get_rowskip::return#0 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#2 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#2 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#2 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#2 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } main:10::screenlayer:163 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#2 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } ) always clobbers reg byte a -Statement [210] screenlayer::$4 = vera_layer_get_rowskip::return#2 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$4 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$4 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$4 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$4 ] { } main:10::screenlayer:163 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$4 ] { } ) always clobbers reg byte a -Statement [211] conio_rowskip = screenlayer::$4 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:10::screenlayer:163 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } ) always clobbers reg byte a -Statement [213] screenlayer::vera_layer_get_height1_$2 = screenlayer::vera_layer_get_height1_layer#0 << 1 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$2 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$2 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$2 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$2 ] { } main:10::screenlayer:163 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$2 ] { } ) always clobbers reg byte a -Statement [214] screenlayer::vera_layer_get_height1_config#0 = vera_layer_config[screenlayer::vera_layer_get_height1_$2] [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_config#0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_config#0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_config#0 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_config#0 ] { } main:10::screenlayer:163 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_config#0 ] { } ) always clobbers reg byte a -Statement [215] screenlayer::vera_layer_get_height1_$0 = *screenlayer::vera_layer_get_height1_config#0 & VERA_LAYER_HEIGHT_MASK [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$0 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$0 ] { } main:10::screenlayer:163 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$0 ] { } ) always clobbers reg byte a reg byte y -Statement [216] screenlayer::vera_layer_get_height1_$1 = screenlayer::vera_layer_get_height1_$0 >> 6 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$1 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$1 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$1 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$1 ] { } main:10::screenlayer:163 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$1 ] { } ) always clobbers reg byte a -Statement [217] screenlayer::vera_layer_get_height1_$3 = screenlayer::vera_layer_get_height1_$1 << 1 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$3 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$3 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$3 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$3 ] { } main:10::screenlayer:163 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$3 ] { } ) always clobbers reg byte a -Statement [218] screenlayer::vera_layer_get_height1_return#0 = VERA_LAYER_HEIGHT[screenlayer::vera_layer_get_height1_$3] [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#0 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#0 ] { } main:10::screenlayer:163 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#0 ] { } ) always clobbers reg byte a -Statement [219] screenlayer::vera_layer_get_height1_return#1 = screenlayer::vera_layer_get_height1_return#0 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#1 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#1 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#1 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#1 ] { } main:10::screenlayer:163 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#1 ] { } ) always clobbers reg byte a -Statement [220] screenlayer::$5 = screenlayer::vera_layer_get_height1_return#1 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$5 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$5 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$5 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$5 ] { } main:10::screenlayer:163 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$5 ] { } ) always clobbers reg byte a -Statement [221] conio_height = screenlayer::$5 [ conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:10::screenlayer:163 [ conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } ) always clobbers reg byte a -Statement [224] vera_layer_textcolor[vera_layer_set_textcolor::layer#3] = WHITE [ ] ( vera_layer_set_textcolor:19 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 ] { } conio_x16_init:8::vera_layer_set_textcolor:19 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 ] { } main:10::vera_layer_set_textcolor:72 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { { vera_layer_set_textcolor::layer#1 = vera_layer_set_textcolor::layer#3 conio_screen_layer } } main:10::vera_layer_set_textcolor:165 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { { vera_layer_set_textcolor::layer#2 = vera_layer_set_textcolor::layer#3 conio_screen_layer } } ) always clobbers reg byte a -Statement [230] vera_layer_set_mapbase::$0 = vera_layer_set_mapbase::layer#3 << 1 [ vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] ( vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } conio_x16_init:8::vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } conio_x16_init:8::vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } main:10::vera_layer_mode_tile:68::vera_layer_set_mapbase:322 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } main:10::vera_layer_mode_tile:78::vera_layer_set_mapbase:322 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } main:10::vera_layer_mode_tile:159::vera_layer_set_mapbase:322 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } main:10::vera_layer_mode_tile:161::vera_layer_set_mapbase:322 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:13::vera_layer_mode_tile:172::vera_layer_set_mapbase:322 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172::vera_layer_set_mapbase:322 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:121 [ vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::mapbase#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:213 [ vera_layer_mode_tile::layer#10 ] -Removing always clobbered register reg byte a as potential for mem[1] [ vera_layer_mode_tile::tilewidth#10 ] -Removing always clobbered register reg byte a as potential for mem[1] [ vera_layer_mode_tile::tileheight#10 ] -Removing always clobbered register reg byte a as potential for zp[1]:212 [ vera_layer_mode_tile::$17 ] -Removing always clobbered register reg byte a as potential for zp[1]:211 [ vera_layer_mode_tile::$18 ] -Statement [231] vera_layer_set_mapbase::addr#0 = vera_layer_mapbase[vera_layer_set_mapbase::$0] [ vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] ( vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } conio_x16_init:8::vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } conio_x16_init:8::vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } main:10::vera_layer_mode_tile:68::vera_layer_set_mapbase:322 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } main:10::vera_layer_mode_tile:78::vera_layer_set_mapbase:322 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } main:10::vera_layer_mode_tile:159::vera_layer_set_mapbase:322 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } main:10::vera_layer_mode_tile:161::vera_layer_set_mapbase:322 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:13::vera_layer_mode_tile:172::vera_layer_set_mapbase:322 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172::vera_layer_set_mapbase:322 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a -Statement [232] *vera_layer_set_mapbase::addr#0 = vera_layer_set_mapbase::mapbase#3 [ ] ( vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 ] { } conio_x16_init:8::vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 ] { } vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 ] { } conio_x16_init:8::vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 ] { } main:10::vera_layer_mode_tile:68::vera_layer_set_mapbase:322 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } main:10::vera_layer_mode_tile:78::vera_layer_set_mapbase:322 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } main:10::vera_layer_mode_tile:159::vera_layer_set_mapbase:322 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } main:10::vera_layer_mode_tile:161::vera_layer_set_mapbase:322 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:13::vera_layer_mode_tile:172::vera_layer_set_mapbase:322 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172::vera_layer_set_mapbase:322 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:213 [ vera_layer_mode_tile::layer#10 ] -Removing always clobbered register reg byte y as potential for mem[1] [ vera_layer_mode_tile::tilewidth#10 ] -Removing always clobbered register reg byte y as potential for mem[1] [ vera_layer_mode_tile::tileheight#10 ] -Removing always clobbered register reg byte y as potential for zp[1]:212 [ vera_layer_mode_tile::$17 ] -Removing always clobbered register reg byte y as potential for zp[1]:211 [ vera_layer_mode_tile::$18 ] -Statement [238] if(0> 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a -Statement [323] vera_layer_mode_tile::$6 = word0 vera_layer_mode_tile::tilebase_address#10 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } ) always clobbers reg byte a -Statement [324] vera_tilebase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$6 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } ) always clobbers reg byte a -Statement [327] vera_tilebase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::tilebase_address#10 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } ) always clobbers reg byte a -Statement [328] vera_layer_mode_tile::tilebase_address#0 = vera_layer_mode_tile::tilebase_address#10 >> 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } ) always clobbers reg byte a -Statement [330] vera_layer_mode_tile::tilebase#1 = vera_layer_mode_tile::tilebase#0 & VERA_LAYER_TILEBASE_MASK [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } ) always clobbers reg byte a -Statement [333] vera_layer_mode_tile::tilebase#3 = vera_layer_mode_tile::tilebase#1 | VERA_TILEBASE_WIDTH_16 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } ) always clobbers reg byte a -Statement [337] vera_layer_mode_tile::tilebase#5 = vera_layer_mode_tile::tilebase#12 | VERA_TILEBASE_HEIGHT_16 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } ) always clobbers reg byte a -Statement [343] vera_layer_mode_tile::config#11 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_128 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } ) always clobbers reg byte a -Statement [344] vera_layer_mode_tile::config#10 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_64 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } ) always clobbers reg byte a -Statement [345] vera_layer_mode_tile::config#7 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_128 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } ) always clobbers reg byte a -Statement [346] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 8 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } ) always clobbers reg byte a -Statement [347] vera_layer_mode_tile::$13 = vera_layer_mode_tile::layer#10 << 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 vera_layer_mode_tile::$13 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 vera_layer_mode_tile::$13 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 vera_layer_mode_tile::$13 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 vera_layer_mode_tile::$13 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 vera_layer_mode_tile::$13 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 vera_layer_mode_tile::$13 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 vera_layer_mode_tile::$13 ] { } ) always clobbers reg byte a -Statement [348] vera_layer_rowskip[vera_layer_mode_tile::$13] = $100 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } ) always clobbers reg byte a -Statement [349] vera_layer_mode_tile::config#6 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_64 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } ) always clobbers reg byte a -Statement [350] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 7 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } ) always clobbers reg byte a -Statement [351] vera_layer_mode_tile::$12 = vera_layer_mode_tile::layer#10 << 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 vera_layer_mode_tile::$12 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 vera_layer_mode_tile::$12 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 vera_layer_mode_tile::$12 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 vera_layer_mode_tile::$12 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 vera_layer_mode_tile::$12 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 vera_layer_mode_tile::$12 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 vera_layer_mode_tile::$12 ] { } ) always clobbers reg byte a -Statement [352] vera_layer_rowskip[vera_layer_mode_tile::$12] = $80 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } ) always clobbers reg byte a -Statement [353] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 6 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } ) always clobbers reg byte a -Statement [354] vera_layer_mode_tile::$11 = vera_layer_mode_tile::layer#10 << 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 vera_layer_mode_tile::$11 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 vera_layer_mode_tile::$11 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 vera_layer_mode_tile::$11 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 vera_layer_mode_tile::$11 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 vera_layer_mode_tile::$11 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 vera_layer_mode_tile::$11 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 vera_layer_mode_tile::$11 ] { } ) always clobbers reg byte a -Statement [355] vera_layer_rowskip[vera_layer_mode_tile::$11] = $40 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } ) always clobbers reg byte a -Statement [356] clrscr::line_text#0 = (char *)CONIO_SCREEN_TEXT#17 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 clrscr::line_text#0 ] ( main:10::clrscr:76 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 clrscr::line_text#0 ] { { vera_layer_get_backcolor::layer#0 = conio_screen_layer } { vera_layer_get_backcolor::return#0 = vera_layer_get_backcolor::return#1 } } main:10::clrscr:169 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 clrscr::line_text#0 ] { { vera_layer_get_backcolor::layer#0 = conio_screen_layer } { vera_layer_get_backcolor::return#0 = vera_layer_get_backcolor::return#1 } } ) always clobbers reg byte a -Statement [361] clrscr::$1 = clrscr::$0 << 4 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 clrscr::line_text#0 clrscr::$1 ] ( main:10::clrscr:76 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 clrscr::line_text#0 clrscr::$1 ] { { vera_layer_get_textcolor::layer#0 = conio_screen_layer } { vera_layer_get_textcolor::return#0 = vera_layer_get_textcolor::return#1 } } main:10::clrscr:169 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 clrscr::line_text#0 clrscr::$1 ] { { vera_layer_get_textcolor::layer#0 = conio_screen_layer } { vera_layer_get_textcolor::return#0 = vera_layer_get_textcolor::return#1 } } ) always clobbers reg byte a -Statement [369] conio_cursor_x[conio_screen_layer] = 0 [ conio_screen_layer conio_width conio_height conio_rowskip ] ( main:10::clrscr:76 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip ] { } main:10::clrscr:169 [ conio_screen_layer conio_width conio_height conio_rowskip ] { } ) always clobbers reg byte a reg byte y -Statement [370] conio_cursor_y[conio_screen_layer] = 0 [ conio_screen_layer conio_width conio_height conio_rowskip ] ( main:10::clrscr:76 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip ] { } main:10::clrscr:169 [ conio_screen_layer conio_width conio_height conio_rowskip ] { } ) always clobbers reg byte a reg byte y -Statement [371] clrscr::$9 = conio_screen_layer << 1 [ conio_screen_layer conio_width conio_height conio_rowskip clrscr::$9 ] ( main:10::clrscr:76 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip clrscr::$9 ] { } main:10::clrscr:169 [ conio_screen_layer conio_width conio_height conio_rowskip clrscr::$9 ] { } ) always clobbers reg byte a -Statement [372] conio_line_text[clrscr::$9] = 0 [ conio_screen_layer conio_width conio_height conio_rowskip ] ( main:10::clrscr:76 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip ] { } main:10::clrscr:169 [ conio_screen_layer conio_width conio_height conio_rowskip ] { } ) always clobbers reg byte a -Statement [374] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 clrscr::color#0 clrscr::l#2 clrscr::line_text#2 ] ( main:10::clrscr:76 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 clrscr::color#0 clrscr::l#2 clrscr::line_text#2 ] { } main:10::clrscr:169 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 clrscr::color#0 clrscr::l#2 clrscr::line_text#2 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:199 [ clrscr::color#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:136 [ clrscr::l#2 clrscr::l#1 ] -Statement [379] clrscr::$7 = CONIO_SCREEN_BANK#15 | VERA_INC_1 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 clrscr::color#0 clrscr::l#2 clrscr::line_text#2 clrscr::$7 ] ( main:10::clrscr:76 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 clrscr::color#0 clrscr::l#2 clrscr::line_text#2 clrscr::$7 ] { } main:10::clrscr:169 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 clrscr::color#0 clrscr::l#2 clrscr::line_text#2 clrscr::$7 ] { } ) always clobbers reg byte a -Statement [383] clrscr::line_text#1 = clrscr::line_text#2 + conio_rowskip [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 clrscr::color#0 clrscr::l#2 clrscr::line_text#1 ] ( main:10::clrscr:76 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 clrscr::color#0 clrscr::l#2 clrscr::line_text#1 ] { } main:10::clrscr:169 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 clrscr::color#0 clrscr::l#2 clrscr::line_text#1 ] { } ) always clobbers reg byte a -Statement [385] *VERA_DATA0 = ' ' [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 clrscr::color#0 clrscr::l#2 clrscr::line_text#2 clrscr::c#2 ] ( main:10::clrscr:76 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 clrscr::color#0 clrscr::l#2 clrscr::line_text#2 clrscr::c#2 ] { } main:10::clrscr:169 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 clrscr::color#0 clrscr::l#2 clrscr::line_text#2 clrscr::c#2 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:82 [ clrscr::c#2 clrscr::c#1 ] -Statement [389] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL [ memcpy_to_vram::vdest#2 ] ( main:10::memcpy_to_vram:80 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip memcpy_to_vram::vdest#2 ] { } main:10::memcpy_to_vram:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::tilebase#7 main::t#5 memcpy_to_vram::vdest#2 ] { { memcpy_to_vram::vdest#1 = memcpy_to_vram::vdest#2 } } ) always clobbers reg byte a -Statement [394] *VERA_ADDRX_H = VERA_INC_1 [ ] ( main:10::memcpy_to_vram:80 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip ] { } main:10::memcpy_to_vram:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::tilebase#7 main::t#5 ] { { memcpy_to_vram::vdest#1 = memcpy_to_vram::vdest#2 } } ) always clobbers reg byte a -Statement [396] if(memcpy_to_vram::s#2!=memcpy_to_vram::end#0) goto memcpy_to_vram::@2 [ memcpy_to_vram::s#2 ] ( main:10::memcpy_to_vram:80 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip memcpy_to_vram::s#2 ] { } main:10::memcpy_to_vram:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::tilebase#7 main::t#5 memcpy_to_vram::s#2 ] { { memcpy_to_vram::vdest#1 = memcpy_to_vram::vdest#2 } } ) always clobbers reg byte a -Statement [398] *VERA_DATA0 = *memcpy_to_vram::s#2 [ memcpy_to_vram::s#2 ] ( main:10::memcpy_to_vram:80 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip memcpy_to_vram::s#2 ] { } main:10::memcpy_to_vram:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::tilebase#7 main::t#5 memcpy_to_vram::s#2 ] { { memcpy_to_vram::vdest#1 = memcpy_to_vram::vdest#2 } } ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for mem[1] [ main::t#5 main::t#1 ] -Statement [401] vera_tile_area::mapbase#0 = *vera_mapbase_address [ vera_tile_area::tileindex#5 vera_tile_area::y#5 vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::mapbase#0 ] ( main:10::vera_tile_area:92 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::tileindex#5 vera_tile_area::y#5 vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::mapbase#0 ] { } main:10::vera_tile_area:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::tileindex#5 vera_tile_area::y#5 vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::mapbase#0 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#5 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#5 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#5 main::column#2 } } main:10::vera_tile_area:132 [ vera_tile_area::tileindex#5 vera_tile_area::y#5 vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::mapbase#0 ] { } main:10::vera_tile_area:138 [ main::row#10 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::tileindex#5 vera_tile_area::y#5 vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::mapbase#0 ] { { vera_tile_area::tileindex#3 = vera_tile_area::tileindex#5 main::tile#8 } { vera_tile_area::y#3 = vera_tile_area::y#5 main::row#10 } { vera_tile_area::x#3 = vera_tile_area::x#5 main::column1#2 } } main:10::vera_tile_area:153 [ vera_tile_area::tileindex#5 vera_tile_area::y#5 vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::mapbase#0 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:128 [ vera_tile_area::y#5 vera_tile_area::y#3 vera_tile_area::y#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:133 [ vera_tile_area::x#5 vera_tile_area::x#3 vera_tile_area::x#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:74 [ vera_tile_area::h#6 ] -Removing always clobbered register reg byte a as potential for zp[1]:68 [ vera_tile_area::w#11 ] -Statement [403] vera_tile_area::rowskip#0 = 1 << vera_tile_area::shift#0 [ vera_tile_area::tileindex#5 vera_tile_area::y#5 vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 ] ( main:10::vera_tile_area:92 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::tileindex#5 vera_tile_area::y#5 vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 ] { } main:10::vera_tile_area:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::tileindex#5 vera_tile_area::y#5 vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#5 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#5 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#5 main::column#2 } } main:10::vera_tile_area:132 [ vera_tile_area::tileindex#5 vera_tile_area::y#5 vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 ] { } main:10::vera_tile_area:138 [ main::row#10 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::tileindex#5 vera_tile_area::y#5 vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 ] { { vera_tile_area::tileindex#3 = vera_tile_area::tileindex#5 main::tile#8 } { vera_tile_area::y#3 = vera_tile_area::y#5 main::row#10 } { vera_tile_area::x#3 = vera_tile_area::x#5 main::column1#2 } } main:10::vera_tile_area:153 [ vera_tile_area::tileindex#5 vera_tile_area::y#5 vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:132 [ vera_tile_area::shift#0 ] -Statement [410] vera_tile_area::$10 = (unsigned int)vera_tile_area::y#5 [ vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$10 ] ( main:10::vera_tile_area:92 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$10 ] { } main:10::vera_tile_area:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$10 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#5 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#5 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#5 main::column#2 } } main:10::vera_tile_area:132 [ vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$10 ] { } main:10::vera_tile_area:138 [ main::row#10 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$10 ] { { vera_tile_area::tileindex#3 = vera_tile_area::tileindex#5 main::tile#8 } { vera_tile_area::y#3 = vera_tile_area::y#5 main::row#10 } { vera_tile_area::x#3 = vera_tile_area::x#5 main::column1#2 } } main:10::vera_tile_area:153 [ vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$10 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:67 [ vera_tile_area::index_l#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:66 [ vera_tile_area::index_h#2 ] -Statement [411] vera_tile_area::$4 = vera_tile_area::$10 << vera_tile_area::shift#0 [ vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::mapbase#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$4 ] ( main:10::vera_tile_area:92 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::mapbase#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$4 ] { } main:10::vera_tile_area:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::mapbase#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$4 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#5 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#5 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#5 main::column#2 } } main:10::vera_tile_area:132 [ vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::mapbase#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$4 ] { } main:10::vera_tile_area:138 [ main::row#10 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::mapbase#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$4 ] { { vera_tile_area::tileindex#3 = vera_tile_area::tileindex#5 main::tile#8 } { vera_tile_area::y#3 = vera_tile_area::y#5 main::row#10 } { vera_tile_area::x#3 = vera_tile_area::x#5 main::column1#2 } } main:10::vera_tile_area:153 [ vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::mapbase#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$4 ] { } ) always clobbers reg byte a -Statement [412] vera_tile_area::mapbase#1 = vera_tile_area::mapbase#0 + vera_tile_area::$4 [ vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 ] ( main:10::vera_tile_area:92 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 ] { } main:10::vera_tile_area:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#5 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#5 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#5 main::column#2 } } main:10::vera_tile_area:132 [ vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 ] { } main:10::vera_tile_area:138 [ main::row#10 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 ] { { vera_tile_area::tileindex#3 = vera_tile_area::tileindex#5 main::tile#8 } { vera_tile_area::y#3 = vera_tile_area::y#5 main::row#10 } { vera_tile_area::x#3 = vera_tile_area::x#5 main::column1#2 } } main:10::vera_tile_area:153 [ vera_tile_area::x#5 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 ] { } ) always clobbers reg byte a -Statement [413] vera_tile_area::$5 = vera_tile_area::x#5 << 1 [ vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 vera_tile_area::$5 ] ( main:10::vera_tile_area:92 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 vera_tile_area::$5 ] { } main:10::vera_tile_area:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 vera_tile_area::$5 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#5 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#5 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#5 main::column#2 } } main:10::vera_tile_area:132 [ vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 vera_tile_area::$5 ] { } main:10::vera_tile_area:138 [ main::row#10 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 vera_tile_area::$5 ] { { vera_tile_area::tileindex#3 = vera_tile_area::tileindex#5 main::tile#8 } { vera_tile_area::y#3 = vera_tile_area::y#5 main::row#10 } { vera_tile_area::x#3 = vera_tile_area::x#5 main::column1#2 } } main:10::vera_tile_area:153 [ vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 vera_tile_area::$5 ] { } ) always clobbers reg byte a -Statement [414] vera_tile_area::mapbase#2 = vera_tile_area::mapbase#1 + vera_tile_area::$5 [ vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#2 ] ( main:10::vera_tile_area:92 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#2 ] { } main:10::vera_tile_area:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#2 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#5 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#5 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#5 main::column#2 } } main:10::vera_tile_area:132 [ vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#2 ] { } main:10::vera_tile_area:138 [ main::row#10 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#2 ] { { vera_tile_area::tileindex#3 = vera_tile_area::tileindex#5 main::tile#8 } { vera_tile_area::y#3 = vera_tile_area::y#5 main::row#10 } { vera_tile_area::x#3 = vera_tile_area::x#5 main::column1#2 } } main:10::vera_tile_area:153 [ vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#2 ] { } ) always clobbers reg byte a -Statement [418] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL [ vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 ] ( main:10::vera_tile_area:92 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 ] { } main:10::vera_tile_area:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#5 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#5 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#5 main::column#2 } } main:10::vera_tile_area:132 [ vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 ] { } main:10::vera_tile_area:138 [ main::row#10 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 ] { { vera_tile_area::tileindex#3 = vera_tile_area::tileindex#5 main::tile#8 } { vera_tile_area::y#3 = vera_tile_area::y#5 main::row#10 } { vera_tile_area::x#3 = vera_tile_area::x#5 main::column1#2 } } main:10::vera_tile_area:153 [ vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:46 [ vera_tile_area::r#2 vera_tile_area::r#1 ] -Statement [424] vera_tile_area::vera_vram_address01_$3 = vera_tile_area::vera_vram_address01_$2 | VERA_INC_1 [ vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 vera_tile_area::vera_vram_address01_$3 ] ( main:10::vera_tile_area:92 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 vera_tile_area::vera_vram_address01_$3 ] { } main:10::vera_tile_area:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 vera_tile_area::vera_vram_address01_$3 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#5 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#5 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#5 main::column#2 } } main:10::vera_tile_area:132 [ vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 vera_tile_area::vera_vram_address01_$3 ] { } main:10::vera_tile_area:138 [ main::row#10 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 vera_tile_area::vera_vram_address01_$3 ] { { vera_tile_area::tileindex#3 = vera_tile_area::tileindex#5 main::tile#8 } { vera_tile_area::y#3 = vera_tile_area::y#5 main::row#10 } { vera_tile_area::x#3 = vera_tile_area::x#5 main::column1#2 } } main:10::vera_tile_area:153 [ vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 vera_tile_area::vera_vram_address01_$3 ] { } ) always clobbers reg byte a -Statement [428] vera_tile_area::mapbase#3 = vera_tile_area::mapbase#10 + vera_tile_area::rowskip#0 [ vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#3 ] ( main:10::vera_tile_area:92 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#3 ] { } main:10::vera_tile_area:98 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#3 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#5 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#5 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#5 main::column#2 } } main:10::vera_tile_area:132 [ vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#3 ] { } main:10::vera_tile_area:138 [ main::row#10 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#3 ] { { vera_tile_area::tileindex#3 = vera_tile_area::tileindex#5 main::tile#8 } { vera_tile_area::y#3 = vera_tile_area::y#5 main::row#10 } { vera_tile_area::x#3 = vera_tile_area::x#5 main::column1#2 } } main:10::vera_tile_area:153 [ vera_tile_area::h#6 vera_tile_area::w#11 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#3 ] { } ) always clobbers reg byte a -Statement [435] printf_str::c#1 = *printf_str::s#9 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] ( main:10::printf_str:110 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:112 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:114 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:116 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:118 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:120 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:122 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:124 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } ) always clobbers reg byte a reg byte y -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [442] kbhit::ch = 0 [ kbhit::ch ] ( main:10::kbhit:127 [ kbhit::ch ] { { kbhit::return#1 = kbhit::return#2 } } main:10::kbhit:148 [ kbhit::ch ] { { kbhit::return#1 = kbhit::return#3 } } ) always clobbers reg byte a -Statement [447] vera_layer_set_text_color_mode::addr#0 = *(vera_layer_config+vera_layer_mode_text::layer#0*SIZEOF_POINTER) [ vera_layer_set_text_color_mode::addr#0 ] ( vera_layer_mode_text:13::vera_layer_set_text_color_mode:174 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_set_text_color_mode::addr#0 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_set_text_color_mode:174 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_set_text_color_mode::addr#0 ] { } ) always clobbers reg byte a -Statement [448] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 & ~VERA_LAYER_CONFIG_256C [ vera_layer_set_text_color_mode::addr#0 ] ( vera_layer_mode_text:13::vera_layer_set_text_color_mode:174 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_set_text_color_mode::addr#0 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_set_text_color_mode:174 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_set_text_color_mode::addr#0 ] { } ) always clobbers reg byte a reg byte y -Statement [449] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 [ ] ( vera_layer_mode_text:13::vera_layer_set_text_color_mode:174 [ conio_screen_width conio_screen_height conio_x16_init::line#0 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_set_text_color_mode:174 [ conio_screen_width conio_screen_height conio_x16_init::line#0 ] { } ) always clobbers reg byte a reg byte y -Statement [453] vera_layer_get_mapbase_offset::$0 = vera_layer_get_mapbase_offset::layer#0 << 1 [ vera_layer_get_mapbase_offset::$0 ] ( screenlayer:17::vera_layer_get_mapbase_offset:189 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::$0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } conio_x16_init:8::screenlayer:17::vera_layer_get_mapbase_offset:189 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::$0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } main:10::screenlayer:70::vera_layer_get_mapbase_offset:189 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::$0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } main:10::screenlayer:163::vera_layer_get_mapbase_offset:189 [ conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::$0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } ) always clobbers reg byte a -Statement [454] vera_layer_get_mapbase_offset::return#0 = vera_mapbase_offset[vera_layer_get_mapbase_offset::$0] [ vera_layer_get_mapbase_offset::return#0 ] ( screenlayer:17::vera_layer_get_mapbase_offset:189 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } conio_x16_init:8::screenlayer:17::vera_layer_get_mapbase_offset:189 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } main:10::screenlayer:70::vera_layer_get_mapbase_offset:189 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } main:10::screenlayer:163::vera_layer_get_mapbase_offset:189 [ conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } ) always clobbers reg byte a -Statement [458] vera_layer_get_rowskip::$0 = vera_layer_get_rowskip::layer#0 << 1 [ vera_layer_get_rowskip::$0 ] ( screenlayer:17::vera_layer_get_rowskip:208 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::$0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } conio_x16_init:8::screenlayer:17::vera_layer_get_rowskip:208 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::$0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } main:10::screenlayer:70::vera_layer_get_rowskip:208 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::$0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } main:10::screenlayer:163::vera_layer_get_rowskip:208 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::$0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } ) always clobbers reg byte a -Statement [459] vera_layer_get_rowskip::return#0 = vera_layer_rowskip[vera_layer_get_rowskip::$0] [ vera_layer_get_rowskip::return#0 ] ( screenlayer:17::vera_layer_get_rowskip:208 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } conio_x16_init:8::screenlayer:17::vera_layer_get_rowskip:208 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } main:10::screenlayer:70::vera_layer_get_rowskip:208 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } main:10::screenlayer:163::vera_layer_get_rowskip:208 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } ) always clobbers reg byte a -Statement [461] if(conio_cursor_y[conio_screen_layer]> 7 [ screensize::hscale#0 ] ( screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::hscale#0 ] { } conio_x16_init:8::screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::hscale#0 ] { } ) always clobbers reg byte a -Statement [177] screensize::$1 = $28 << screensize::hscale#0 [ screensize::$1 ] ( screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$1 ] { } conio_x16_init:8::screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$1 ] { } ) always clobbers reg byte a -Statement [179] screensize::vscale#0 = *VERA_DC_VSCALE >> 7 [ screensize::vscale#0 ] ( screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::vscale#0 ] { } conio_x16_init:8::screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::vscale#0 ] { } ) always clobbers reg byte a -Statement [180] screensize::$3 = $1e << screensize::vscale#0 [ screensize::$3 ] ( screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$3 ] { } conio_x16_init:8::screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$3 ] { } ) always clobbers reg byte a -Statement [183] conio_screen_layer = 1 [ conio_screen_layer ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer ] { { vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_bank::return#0 = vera_layer_get_mapbase_bank::return#2 } } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer ] { { vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_bank::return#0 = vera_layer_get_mapbase_bank::return#2 } } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer ] { { vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_bank::return#0 = vera_layer_get_mapbase_bank::return#2 } } main:10::screenlayer:163 [ conio_screen_layer ] { { vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_bank::return#0 = vera_layer_get_mapbase_bank::return#2 } } ) always clobbers reg byte a -Statement [190] vera_layer_get_mapbase_offset::return#2 = vera_layer_get_mapbase_offset::return#0 [ conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#2 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#2 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#2 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#2 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } main:10::screenlayer:163 [ conio_screen_layer CONIO_SCREEN_BANK#15 vera_layer_get_mapbase_offset::return#2 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } ) always clobbers reg byte a -Statement [191] CONIO_SCREEN_TEXT#17 = vera_layer_get_mapbase_offset::return#2 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:10::screenlayer:163 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } ) always clobbers reg byte a -Statement [193] screenlayer::vera_layer_get_width1_$2 = screenlayer::vera_layer_get_width1_layer#0 << 1 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$2 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$2 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$2 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$2 ] { } main:10::screenlayer:163 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$2 ] { } ) always clobbers reg byte a -Statement [194] screenlayer::vera_layer_get_width1_config#0 = vera_layer_config[screenlayer::vera_layer_get_width1_$2] [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_config#0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_config#0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_config#0 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_config#0 ] { } main:10::screenlayer:163 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_config#0 ] { } ) always clobbers reg byte a -Statement [195] screenlayer::vera_layer_get_width1_$0 = *screenlayer::vera_layer_get_width1_config#0 & VERA_LAYER_WIDTH_MASK [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$0 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$0 ] { } main:10::screenlayer:163 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$0 ] { } ) always clobbers reg byte a reg byte y -Statement [196] screenlayer::vera_layer_get_width1_$1 = screenlayer::vera_layer_get_width1_$0 >> 4 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$1 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$1 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$1 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$1 ] { } main:10::screenlayer:163 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$1 ] { } ) always clobbers reg byte a -Statement [197] screenlayer::vera_layer_get_width1_$3 = screenlayer::vera_layer_get_width1_$1 << 1 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$3 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$3 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$3 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$3 ] { } main:10::screenlayer:163 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_$3 ] { } ) always clobbers reg byte a -Statement [198] screenlayer::vera_layer_get_width1_return#0 = VERA_LAYER_WIDTH[screenlayer::vera_layer_get_width1_$3] [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#0 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#0 ] { } main:10::screenlayer:163 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#0 ] { } ) always clobbers reg byte a -Statement [199] screenlayer::vera_layer_get_width1_return#1 = screenlayer::vera_layer_get_width1_return#0 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#1 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#1 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#1 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#1 ] { } main:10::screenlayer:163 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_width1_return#1 ] { } ) always clobbers reg byte a -Statement [200] screenlayer::$2 = screenlayer::vera_layer_get_width1_return#1 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$2 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$2 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$2 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$2 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } main:10::screenlayer:163 [ conio_screen_layer CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$2 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } ) always clobbers reg byte a -Statement [201] conio_width = screenlayer::$2 [ conio_screen_layer conio_width CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer conio_width CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } main:10::screenlayer:163 [ conio_screen_layer conio_width CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } ) always clobbers reg byte a -Statement [209] vera_layer_get_rowskip::return#2 = vera_layer_get_rowskip::return#0 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#2 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#2 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#2 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#2 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } main:10::screenlayer:163 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 vera_layer_get_rowskip::return#2 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } ) always clobbers reg byte a -Statement [210] screenlayer::$4 = vera_layer_get_rowskip::return#2 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$4 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$4 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$4 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$4 ] { } main:10::screenlayer:163 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$4 ] { } ) always clobbers reg byte a -Statement [211] conio_rowskip = screenlayer::$4 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:10::screenlayer:163 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } ) always clobbers reg byte a -Statement [213] screenlayer::vera_layer_get_height1_$2 = screenlayer::vera_layer_get_height1_layer#0 << 1 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$2 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$2 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$2 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$2 ] { } main:10::screenlayer:163 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$2 ] { } ) always clobbers reg byte a -Statement [214] screenlayer::vera_layer_get_height1_config#0 = vera_layer_config[screenlayer::vera_layer_get_height1_$2] [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_config#0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_config#0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_config#0 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_config#0 ] { } main:10::screenlayer:163 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_config#0 ] { } ) always clobbers reg byte a -Statement [215] screenlayer::vera_layer_get_height1_$0 = *screenlayer::vera_layer_get_height1_config#0 & VERA_LAYER_HEIGHT_MASK [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$0 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$0 ] { } main:10::screenlayer:163 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$0 ] { } ) always clobbers reg byte a reg byte y -Statement [216] screenlayer::vera_layer_get_height1_$1 = screenlayer::vera_layer_get_height1_$0 >> 6 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$1 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$1 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$1 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$1 ] { } main:10::screenlayer:163 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$1 ] { } ) always clobbers reg byte a -Statement [217] screenlayer::vera_layer_get_height1_$3 = screenlayer::vera_layer_get_height1_$1 << 1 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$3 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$3 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$3 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$3 ] { } main:10::screenlayer:163 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_$3 ] { } ) always clobbers reg byte a -Statement [218] screenlayer::vera_layer_get_height1_return#0 = VERA_LAYER_HEIGHT[screenlayer::vera_layer_get_height1_$3] [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#0 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#0 ] { } main:10::screenlayer:163 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#0 ] { } ) always clobbers reg byte a -Statement [219] screenlayer::vera_layer_get_height1_return#1 = screenlayer::vera_layer_get_height1_return#0 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#1 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#1 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#1 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#1 ] { } main:10::screenlayer:163 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::vera_layer_get_height1_return#1 ] { } ) always clobbers reg byte a -Statement [220] screenlayer::$5 = screenlayer::vera_layer_get_height1_return#1 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$5 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$5 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$5 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$5 ] { } main:10::screenlayer:163 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 screenlayer::$5 ] { } ) always clobbers reg byte a -Statement [221] conio_height = screenlayer::$5 [ conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:10::screenlayer:70 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } main:10::screenlayer:163 [ conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { } ) always clobbers reg byte a -Statement [224] vera_layer_textcolor[vera_layer_set_textcolor::layer#3] = WHITE [ ] ( vera_layer_set_textcolor:19 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 ] { } conio_x16_init:8::vera_layer_set_textcolor:19 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 ] { } main:10::vera_layer_set_textcolor:72 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { { vera_layer_set_textcolor::layer#1 = vera_layer_set_textcolor::layer#3 conio_screen_layer } } main:10::vera_layer_set_textcolor:165 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 CONIO_SCREEN_TEXT#17 ] { { vera_layer_set_textcolor::layer#2 = vera_layer_set_textcolor::layer#3 conio_screen_layer } } ) always clobbers reg byte a -Statement [230] vera_layer_set_mapbase::$0 = vera_layer_set_mapbase::layer#3 << 1 [ vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] ( vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } conio_x16_init:8::vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } conio_x16_init:8::vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } main:10::vera_layer_mode_tile:68::vera_layer_set_mapbase:322 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } main:10::vera_layer_mode_tile:78::vera_layer_set_mapbase:322 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } main:10::vera_layer_mode_tile:159::vera_layer_set_mapbase:322 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } main:10::vera_layer_mode_tile:161::vera_layer_set_mapbase:322 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:13::vera_layer_mode_tile:172::vera_layer_set_mapbase:322 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172::vera_layer_set_mapbase:322 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a -Statement [231] vera_layer_set_mapbase::addr#0 = vera_layer_mapbase[vera_layer_set_mapbase::$0] [ vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] ( vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } conio_x16_init:8::vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } conio_x16_init:8::vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } main:10::vera_layer_mode_tile:68::vera_layer_set_mapbase:322 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } main:10::vera_layer_mode_tile:78::vera_layer_set_mapbase:322 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } main:10::vera_layer_mode_tile:159::vera_layer_set_mapbase:322 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } main:10::vera_layer_mode_tile:161::vera_layer_set_mapbase:322 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:13::vera_layer_mode_tile:172::vera_layer_set_mapbase:322 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172::vera_layer_set_mapbase:322 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a -Statement [232] *vera_layer_set_mapbase::addr#0 = vera_layer_set_mapbase::mapbase#3 [ ] ( vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 ] { } conio_x16_init:8::vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 ] { } vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 ] { } conio_x16_init:8::vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift conio_x16_init::line#0 ] { } main:10::vera_layer_mode_tile:68::vera_layer_set_mapbase:322 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } main:10::vera_layer_mode_tile:78::vera_layer_set_mapbase:322 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } main:10::vera_layer_mode_tile:159::vera_layer_set_mapbase:322 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } main:10::vera_layer_mode_tile:161::vera_layer_set_mapbase:322 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:13::vera_layer_mode_tile:172::vera_layer_set_mapbase:322 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172::vera_layer_set_mapbase:322 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a reg byte y -Statement [235] if(gotoxy::y#4<=conio_screen_height) goto gotoxy::@4 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] ( gotoxy:30 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#1 = gotoxy::y#4 conio_x16_init::line#3 } } conio_x16_init:8::gotoxy:30 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#1 = gotoxy::y#4 conio_x16_init::line#3 } } main:10::gotoxy:108 [ conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { } main:10::printf_str:110::cputc:440::cputln:58::cscroll:264::gotoxy:469 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:112::cputc:440::cputln:58::cscroll:264::gotoxy:469 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:114::cputc:440::cputln:58::cscroll:264::gotoxy:469 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:116::cputc:440::cputln:58::cscroll:264::gotoxy:469 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:118::cputc:440::cputln:58::cscroll:264::gotoxy:469 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:120::cputc:440::cputln:58::cscroll:264::gotoxy:469 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:122::cputc:440::cputln:58::cscroll:264::gotoxy:469 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:124::cputc:440::cputln:58::cscroll:264::gotoxy:469 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:110::cputc:440::cputln:62::cscroll:264::gotoxy:469 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:112::cputc:440::cputln:62::cscroll:264::gotoxy:469 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:114::cputc:440::cputln:62::cscroll:264::gotoxy:469 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:116::cputc:440::cputln:62::cscroll:264::gotoxy:469 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:118::cputc:440::cputln:62::cscroll:264::gotoxy:469 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:120::cputc:440::cputln:62::cscroll:264::gotoxy:469 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:122::cputc:440::cputln:62::cscroll:264::gotoxy:469 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:124::cputc:440::cputln:62::cscroll:264::gotoxy:469 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:110::cputc:440::cputln:64::cscroll:264::gotoxy:469 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:112::cputc:440::cputln:64::cscroll:264::gotoxy:469 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:114::cputc:440::cputln:64::cscroll:264::gotoxy:469 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:116::cputc:440::cputln:64::cscroll:264::gotoxy:469 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:118::cputc:440::cputln:64::cscroll:264::gotoxy:469 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:120::cputc:440::cputln:64::cscroll:264::gotoxy:469 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:122::cputc:440::cputln:64::cscroll:264::gotoxy:469 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:124::cputc:440::cputln:64::cscroll:264::gotoxy:469 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } ) always clobbers reg byte a -Statement [238] if(0> 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a -Statement [323] vera_layer_mode_tile::$6 = word0 vera_layer_mode_tile::tilebase_address#10 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } ) always clobbers reg byte a -Statement [324] vera_tilebase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$6 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } ) always clobbers reg byte a -Statement [327] vera_tilebase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::tilebase_address#10 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } ) always clobbers reg byte a -Statement [328] vera_layer_mode_tile::tilebase_address#0 = vera_layer_mode_tile::tilebase_address#10 >> 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } ) always clobbers reg byte a -Statement [330] vera_layer_mode_tile::tilebase#1 = vera_layer_mode_tile::tilebase#0 & VERA_LAYER_TILEBASE_MASK [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } ) always clobbers reg byte a -Statement [333] vera_layer_mode_tile::tilebase#3 = vera_layer_mode_tile::tilebase#1 | VERA_TILEBASE_WIDTH_16 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } ) always clobbers reg byte a -Statement [337] vera_layer_mode_tile::tilebase#5 = vera_layer_mode_tile::tilebase#12 | VERA_TILEBASE_HEIGHT_16 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } ) always clobbers reg byte a -Statement [343] vera_layer_mode_tile::config#11 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_128 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } ) always clobbers reg byte a -Statement [344] vera_layer_mode_tile::config#10 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_64 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } ) always clobbers reg byte a -Statement [345] vera_layer_mode_tile::config#7 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_128 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } ) always clobbers reg byte a -Statement [346] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 8 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } ) always clobbers reg byte a -Statement [347] vera_layer_mode_tile::$13 = vera_layer_mode_tile::layer#10 << 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 vera_layer_mode_tile::$13 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 vera_layer_mode_tile::$13 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 vera_layer_mode_tile::$13 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 vera_layer_mode_tile::$13 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 vera_layer_mode_tile::$13 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 vera_layer_mode_tile::$13 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 vera_layer_mode_tile::$13 ] { } ) always clobbers reg byte a -Statement [348] vera_layer_rowskip[vera_layer_mode_tile::$13] = $100 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } ) always clobbers reg byte a -Statement [349] vera_layer_mode_tile::config#6 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_64 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } ) always clobbers reg byte a -Statement [350] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 7 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } ) always clobbers reg byte a -Statement [351] vera_layer_mode_tile::$12 = vera_layer_mode_tile::layer#10 << 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 vera_layer_mode_tile::$12 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 vera_layer_mode_tile::$12 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 vera_layer_mode_tile::$12 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 vera_layer_mode_tile::$12 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 vera_layer_mode_tile::$12 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 vera_layer_mode_tile::$12 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 vera_layer_mode_tile::$12 ] { } ) always clobbers reg byte a -Statement [352] vera_layer_rowskip[vera_layer_mode_tile::$12] = $80 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } ) always clobbers reg byte a -Statement [353] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 6 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } ) always clobbers reg byte a -Statement [354] vera_layer_mode_tile::$11 = vera_layer_mode_tile::layer#10 << 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 vera_layer_mode_tile::$11 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 vera_layer_mode_tile::$11 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 vera_layer_mode_tile::$11 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 vera_layer_mode_tile::$11 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 vera_layer_mode_tile::$11 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 vera_layer_mode_tile::$11 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 vera_layer_mode_tile::$11 ] { } ) always clobbers reg byte a -Statement [355] vera_layer_rowskip[vera_layer_mode_tile::$11] = $40 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] ( main:10::vera_layer_mode_tile:68 [ conio_screen_width conio_screen_height vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } main:10::vera_layer_mode_tile:78 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } main:10::vera_layer_mode_tile:159 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } main:10::vera_layer_mode_tile:161 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:172 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } ) always clobbers reg byte a -Statement [356] clrscr::line_text#0 = (char *)CONIO_SCREEN_TEXT#17 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 clrscr::line_text#0 ] ( main:10::clrscr:76 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 clrscr::line_text#0 ] { { vera_layer_get_backcolor::layer#0 = conio_screen_layer } { vera_layer_get_backcolor::return#0 = vera_layer_get_backcolor::return#1 } } main:10::clrscr:169 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 clrscr::line_text#0 ] { { vera_layer_get_backcolor::layer#0 = conio_screen_layer } { vera_layer_get_backcolor::return#0 = vera_layer_get_backcolor::return#1 } } ) always clobbers reg byte a -Statement [361] clrscr::$1 = clrscr::$0 << 4 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 clrscr::line_text#0 clrscr::$1 ] ( main:10::clrscr:76 [ conio_screen_width conio_screen_height conio_rowshift conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 clrscr::line_text#0 clrscr::$1 ] { { vera_layer_get_textcolor::layer#0 = conio_screen_layer } { vera_layer_get_textcolor::return#0 = vera_layer_get_textcolor::return#1 } } main:10::clrscr:169 [ conio_screen_layer conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#15 clrscr::line_text#0 clrscr::$1 ] { { vera_layer_get_textcolor::layer#0 = conio_screen_layer } { vera_layer_get_textcolor::return#0 = vera_layer_get_textcolor::return#1 } } ) always clobbers reg byte a -Statement [368] if(clrscr::l#20 - sta.z conio_width+1 - // [5] conio_height = 0 -- vwuz1=vwuc1 - lda #<0 - sta.z conio_height - lda #>0 - sta.z conio_height+1 - // [6] conio_rowshift = 0 -- vbuz1=vbuc1 - lda #0 - sta.z conio_rowshift - // [7] conio_rowskip = 0 -- vwuz1=vwuc1 - lda #<0 - sta.z conio_rowskip - lda #>0 - sta.z conio_rowskip+1 - // [8] call conio_x16_init - jsr conio_x16_init - // [9] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - __b1_from___init1: - jmp __b1 - // __start::@1 - __b1: - // [10] call main - // [65] phi from __start::@1 to main [phi:__start::@1->main] - main_from___b1: - jsr main - jmp __breturn - // __start::@return - __breturn: - // [11] return - rts -} - // conio_x16_init -// Set initial cursor position -conio_x16_init: { - // Position cursor at current line - .label BASIC_CURSOR_LINE = $d6 - .label line = $52 - // [12] conio_x16_init::line#0 = *conio_x16_init::BASIC_CURSOR_LINE -- vbuz1=_deref_pbuc1 - lda.z BASIC_CURSOR_LINE - sta.z line - // [13] call vera_layer_mode_text - // [171] phi from conio_x16_init to vera_layer_mode_text [phi:conio_x16_init->vera_layer_mode_text] - vera_layer_mode_text_from_conio_x16_init: - jsr vera_layer_mode_text - // [14] phi from conio_x16_init to conio_x16_init::@3 [phi:conio_x16_init->conio_x16_init::@3] - __b3_from_conio_x16_init: - jmp __b3 - // conio_x16_init::@3 - __b3: - // [15] call screensize - jsr screensize - // [16] phi from conio_x16_init::@3 to conio_x16_init::@4 [phi:conio_x16_init::@3->conio_x16_init::@4] - __b4_from___b3: - jmp __b4 - // conio_x16_init::@4 - __b4: - // [17] call screenlayer - jsr screenlayer - // [18] phi from conio_x16_init::@4 to conio_x16_init::@5 [phi:conio_x16_init::@4->conio_x16_init::@5] - __b5_from___b4: - jmp __b5 - // conio_x16_init::@5 - __b5: - // [19] call vera_layer_set_textcolor - // [223] phi from conio_x16_init::@5 to vera_layer_set_textcolor [phi:conio_x16_init::@5->vera_layer_set_textcolor] - vera_layer_set_textcolor_from___b5: - // [223] phi vera_layer_set_textcolor::layer#3 = 1 [phi:conio_x16_init::@5->vera_layer_set_textcolor#0] -- vbuyy=vbuc1 - ldy #1 - jsr vera_layer_set_textcolor - // [20] phi from conio_x16_init::@5 to conio_x16_init::@6 [phi:conio_x16_init::@5->conio_x16_init::@6] - __b6_from___b5: - jmp __b6 - // conio_x16_init::@6 - __b6: - // [21] call vera_layer_set_backcolor - // [226] phi from conio_x16_init::@6 to vera_layer_set_backcolor [phi:conio_x16_init::@6->vera_layer_set_backcolor] - vera_layer_set_backcolor_from___b6: - // [226] phi vera_layer_set_backcolor::color#3 = BLUE [phi:conio_x16_init::@6->vera_layer_set_backcolor#0] -- vbuaa=vbuc1 - lda #BLUE - // [226] phi vera_layer_set_backcolor::layer#3 = 1 [phi:conio_x16_init::@6->vera_layer_set_backcolor#1] -- vbuyy=vbuc1 - ldy #1 - jsr vera_layer_set_backcolor - // [22] phi from conio_x16_init::@6 to conio_x16_init::@7 [phi:conio_x16_init::@6->conio_x16_init::@7] - __b7_from___b6: - jmp __b7 - // conio_x16_init::@7 - __b7: - // [23] call vera_layer_set_mapbase - // [229] phi from conio_x16_init::@7 to vera_layer_set_mapbase [phi:conio_x16_init::@7->vera_layer_set_mapbase] - vera_layer_set_mapbase_from___b7: - // [229] phi vera_layer_set_mapbase::mapbase#3 = $20 [phi:conio_x16_init::@7->vera_layer_set_mapbase#0] -- vbuxx=vbuc1 - ldx #$20 - // [229] phi vera_layer_set_mapbase::layer#3 = 0 [phi:conio_x16_init::@7->vera_layer_set_mapbase#1] -- vbuaa=vbuc1 - lda #0 - jsr vera_layer_set_mapbase - // [24] phi from conio_x16_init::@7 to conio_x16_init::@8 [phi:conio_x16_init::@7->conio_x16_init::@8] - __b8_from___b7: - jmp __b8 - // conio_x16_init::@8 - __b8: - // [25] call vera_layer_set_mapbase - // [229] phi from conio_x16_init::@8 to vera_layer_set_mapbase [phi:conio_x16_init::@8->vera_layer_set_mapbase] - vera_layer_set_mapbase_from___b8: - // [229] phi vera_layer_set_mapbase::mapbase#3 = 0 [phi:conio_x16_init::@8->vera_layer_set_mapbase#0] -- vbuxx=vbuc1 - ldx #0 - // [229] phi vera_layer_set_mapbase::layer#3 = 1 [phi:conio_x16_init::@8->vera_layer_set_mapbase#1] -- vbuaa=vbuc1 - lda #1 - jsr vera_layer_set_mapbase - jmp __b9 - // conio_x16_init::@9 - __b9: - // [26] if(conio_x16_init::line#0conio_x16_init::@1] - __b1_from___b2: - __b1_from___b9: - // [28] phi conio_x16_init::line#3 = conio_x16_init::line#1 [phi:conio_x16_init::@2/conio_x16_init::@9->conio_x16_init::@1#0] -- register_copy - jmp __b1 - // conio_x16_init::@1 - __b1: - // [29] gotoxy::y#1 = conio_x16_init::line#3 -- vbuxx=vbuz1 - ldx.z line - // [30] call gotoxy - // [234] phi from conio_x16_init::@1 to gotoxy [phi:conio_x16_init::@1->gotoxy] - gotoxy_from___b1: - // [234] phi gotoxy::y#4 = gotoxy::y#1 [phi:conio_x16_init::@1->gotoxy#0] -- register_copy - jsr gotoxy - jmp __breturn - // conio_x16_init::@return - __breturn: - // [31] return - rts -} - // cputc -// Output one character at the current cursor position -// Moves the cursor forward. Scrolls the entire screen if needed -// void cputc(__zp($a) char c) -cputc: { - .const OFFSET_STACK_C = 0 - .label __16 = 6 - .label c = $a - .label conio_addr = 8 - // [33] cputc::c#0 = stackidx(char,cputc::OFFSET_STACK_C) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_C,x - sta.z c - // [34] vera_layer_get_color::layer#0 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [35] call vera_layer_get_color - // [247] phi from cputc to vera_layer_get_color [phi:cputc->vera_layer_get_color] - vera_layer_get_color_from_cputc: - // [247] phi vera_layer_get_color::layer#2 = vera_layer_get_color::layer#0 [phi:cputc->vera_layer_get_color#0] -- register_copy - jsr vera_layer_get_color - // [36] vera_layer_get_color::return#0 = vera_layer_get_color::return#3 - jmp __b7 - // cputc::@7 - __b7: - // [37] cputc::color#0 = vera_layer_get_color::return#0 -- vbuxx=vbuaa - tax - // [38] cputc::$15 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [39] cputc::conio_addr#0 = CONIO_SCREEN_TEXT#12 + conio_line_text[cputc::$15] -- pbuz1=pbuz2_plus_pwuc1_derefidx_vbuaa - tay - clc - lda.z CONIO_SCREEN_TEXT - adc conio_line_text,y - sta.z conio_addr - lda.z CONIO_SCREEN_TEXT+1 - adc conio_line_text+1,y - sta.z conio_addr+1 - // [40] cputc::$2 = conio_cursor_x[conio_screen_layer] << 1 -- vbuaa=pbuc1_derefidx_vbuz1_rol_1 - ldy.z conio_screen_layer - lda conio_cursor_x,y - asl - // [41] cputc::conio_addr#1 = cputc::conio_addr#0 + cputc::$2 -- pbuz1=pbuz1_plus_vbuaa - clc - adc.z conio_addr - sta.z conio_addr - bcc !+ - inc.z conio_addr+1 - !: - // [42] if(cputc::c#0==' ') goto cputc::@1 -- vbuz1_eq_vbuc1_then_la1 - lda #'\n' - cmp.z c - beq __b1_from___b7 - jmp __b2 - // cputc::@2 - __b2: - // [43] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // [44] cputc::$4 = byte0 cputc::conio_addr#1 -- vbuaa=_byte0_pbuz1 - lda.z conio_addr - // [45] *VERA_ADDRX_L = cputc::$4 -- _deref_pbuc1=vbuaa - // Set address - sta VERA_ADDRX_L - // [46] cputc::$5 = byte1 cputc::conio_addr#1 -- vbuaa=_byte1_pbuz1 - lda.z conio_addr+1 - // [47] *VERA_ADDRX_M = cputc::$5 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // [48] cputc::$6 = CONIO_SCREEN_BANK#12 | VERA_INC_1 -- vbuaa=vbuz1_bor_vbuc1 - lda #VERA_INC_1 - ora.z CONIO_SCREEN_BANK - // [49] *VERA_ADDRX_H = cputc::$6 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_H - // [50] *VERA_DATA0 = cputc::c#0 -- _deref_pbuc1=vbuz1 - lda.z c - sta VERA_DATA0 - // [51] *VERA_DATA0 = cputc::color#0 -- _deref_pbuc1=vbuxx - stx VERA_DATA0 - // [52] conio_cursor_x[conio_screen_layer] = ++ conio_cursor_x[conio_screen_layer] -- pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 - ldx.z conio_screen_layer - inc conio_cursor_x,x - // [53] cputc::scroll_enable#0 = conio_scroll_enable[conio_screen_layer] -- vbuaa=pbuc1_derefidx_vbuz1 - ldy.z conio_screen_layer - lda conio_scroll_enable,y - // [54] if(0!=cputc::scroll_enable#0) goto cputc::@5 -- 0_neq_vbuaa_then_la1 - cmp #0 - bne __b5 - jmp __b3 - // cputc::@3 - __b3: - // [55] cputc::$16 = (unsigned int)conio_cursor_x[conio_screen_layer] -- vwuz1=_word_pbuc1_derefidx_vbuz2 - ldy.z conio_screen_layer - lda conio_cursor_x,y - sta.z __16 - lda #0 - sta.z __16+1 - // [56] if(cputc::$16!=conio_width) goto cputc::@return -- vwuz1_neq_vwuz2_then_la1 - lda.z __16+1 - cmp.z conio_width+1 - bne __breturn - lda.z __16 - cmp.z conio_width - bne __breturn - // [57] phi from cputc::@3 to cputc::@4 [phi:cputc::@3->cputc::@4] - __b4_from___b3: - jmp __b4 - // cputc::@4 - __b4: - // [58] call cputln - jsr cputln - jmp __breturn - // cputc::@return - __breturn: - // [59] return - rts - // cputc::@5 - __b5: - // [60] if(conio_cursor_x[conio_screen_layer]!=conio_screen_width) goto cputc::@return -- pbuc1_derefidx_vbuz1_neq_vbuz2_then_la1 - lda.z conio_screen_width - ldy.z conio_screen_layer - cmp conio_cursor_x,y - bne __breturn - // [61] phi from cputc::@5 to cputc::@6 [phi:cputc::@5->cputc::@6] - __b6_from___b5: - jmp __b6 - // cputc::@6 - __b6: - // [62] call cputln - jsr cputln - jmp __breturn - // [63] phi from cputc::@7 to cputc::@1 [phi:cputc::@7->cputc::@1] - __b1_from___b7: - jmp __b1 - // cputc::@1 - __b1: - // [64] call cputln - jsr cputln - jmp __breturn -} - // main -main: { - .label tilebase = $48 - .label t = $3f - .label tile = $24 - .label c = $37 - // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. - .label row = $40 - .label r = $42 - .label column1 = $29 - // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. - .label row_1 = $41 - .label r1 = $43 - // [66] call memcpy_in_vram - // Before we can load the tiles into memory we need to re-arrange a few things! - // The amount of tiles is 256, the color depth is 256, so each tile is 256 bytes! - // That is 65356 bytes of memory, which is 64K. Yup! One memory bank in VRAM. - // VERA VRAM holds in bank 1 many registers that interfere loading all of this data. - // So it is better to load all in bank 0, but then there is an other issue. - // So the default CX16 character set is located in bank 0, at address 0xF800. - // So we need to move this character set to bank 1, suggested is at address 0xF000. - // The CX16 by default writes textual output to layer 1 in text mode, so we need to - // realign the moved character set to 0xf000 as the new tile base for layer 1. - // We also will need to realign for layer 1 the map base from 0x00000 to 0x10000. - // This is now all easily done with a few statements in the new kickc vera lib ... - // [266] phi from main to memcpy_in_vram [phi:main->memcpy_in_vram] - memcpy_in_vram_from_main: - // [266] phi memcpy_in_vram::num#4 = $100*8 [phi:main->memcpy_in_vram#0] -- vwuz1=vwuc1 - lda #<$100*8 - sta.z memcpy_in_vram.num - lda #>$100*8 - sta.z memcpy_in_vram.num+1 - // [266] phi memcpy_in_vram::dest_bank#3 = 1 [phi:main->memcpy_in_vram#1] -- vbuz1=vbuc1 - lda #1 - sta.z memcpy_in_vram.dest_bank - // [266] phi memcpy_in_vram::dest#3 = (void *)(char *) 61440 [phi:main->memcpy_in_vram#2] -- pvoz1=pvoc1 - lda #<$f000 - sta.z memcpy_in_vram.dest - lda #>$f000 - sta.z memcpy_in_vram.dest+1 - // [266] phi memcpy_in_vram::src_bank#3 = 0 [phi:main->memcpy_in_vram#3] -- vbuyy=vbuc1 - ldy #0 - // [266] phi memcpy_in_vram::src#3 = (void *)(char *) 63488 [phi:main->memcpy_in_vram#4] -- pvoz1=pvoc1 - lda #<$f800 - sta.z memcpy_in_vram.src - lda #>$f800 - sta.z memcpy_in_vram.src+1 - jsr memcpy_in_vram - // [67] phi from main to main::@19 [phi:main->main::@19] - __b19_from_main: - jmp __b19 - // main::@19 - __b19: - // [68] call vera_layer_mode_tile - // We copy the 128 character set of 8 bytes each. - // [286] phi from main::@19 to vera_layer_mode_tile [phi:main::@19->vera_layer_mode_tile] - vera_layer_mode_tile_from___b19: - // [286] phi vera_layer_mode_tile::tileheight#10 = 8 [phi:main::@19->vera_layer_mode_tile#0] -- vbuz1=vbuc1 - lda #8 - sta.z vera_layer_mode_tile.tileheight - // [286] phi vera_layer_mode_tile::tilewidth#10 = 8 [phi:main::@19->vera_layer_mode_tile#1] -- vbuz1=vbuc1 - lda #8 - sta.z vera_layer_mode_tile.tilewidth - // [286] phi vera_layer_mode_tile::tilebase_address#10 = $1f000 [phi:main::@19->vera_layer_mode_tile#2] -- vduz1=vduc1 - lda #<$1f000 - sta.z vera_layer_mode_tile.tilebase_address_1 - lda #>$1f000 - sta.z vera_layer_mode_tile.tilebase_address_1+1 - lda #<$1f000>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+2 - lda #>$1f000>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+3 - // [286] phi vera_layer_mode_tile::mapbase_address#10 = $10000 [phi:main::@19->vera_layer_mode_tile#3] -- vduz1=vduc1 - lda #<$10000 - sta.z vera_layer_mode_tile.mapbase_address_1 - lda #>$10000 - sta.z vera_layer_mode_tile.mapbase_address_1+1 - lda #<$10000>>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+2 - lda #>$10000>>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+3 - // [286] phi vera_layer_mode_tile::mapheight#10 = $40 [phi:main::@19->vera_layer_mode_tile#4] -- vwuz1=vbuc1 - lda #<$40 - sta.z vera_layer_mode_tile.mapheight - lda #>$40 - sta.z vera_layer_mode_tile.mapheight+1 - // [286] phi vera_layer_mode_tile::layer#10 = 1 [phi:main::@19->vera_layer_mode_tile#5] -- vbuz1=vbuc1 - lda #1 - sta.z vera_layer_mode_tile.layer - // [286] phi vera_layer_mode_tile::mapwidth#10 = $80 [phi:main::@19->vera_layer_mode_tile#6] -- vwuz1=vbuc1 - lda #<$80 - sta.z vera_layer_mode_tile.mapwidth - lda #>$80 - sta.z vera_layer_mode_tile.mapwidth+1 - // [286] phi vera_layer_mode_tile::color_depth#5 = 1 [phi:main::@19->vera_layer_mode_tile#7] -- vbuxx=vbuc1 - ldx #1 - jsr vera_layer_mode_tile - // [69] phi from main::@19 to main::@20 [phi:main::@19->main::@20] - __b20_from___b19: - jmp __b20 - // main::@20 - __b20: - // [70] call screenlayer - jsr screenlayer - jmp textcolor1 - // main::textcolor1 - textcolor1: - // [71] vera_layer_set_textcolor::layer#1 = conio_screen_layer -- vbuyy=vbuz1 - ldy.z conio_screen_layer - // [72] call vera_layer_set_textcolor - // [223] phi from main::textcolor1 to vera_layer_set_textcolor [phi:main::textcolor1->vera_layer_set_textcolor] - vera_layer_set_textcolor_from_textcolor1: - // [223] phi vera_layer_set_textcolor::layer#3 = vera_layer_set_textcolor::layer#1 [phi:main::textcolor1->vera_layer_set_textcolor#0] -- register_copy - jsr vera_layer_set_textcolor - jmp bgcolor1 - // main::bgcolor1 - bgcolor1: - // [73] vera_layer_set_backcolor::layer#1 = conio_screen_layer -- vbuyy=vbuz1 - ldy.z conio_screen_layer - // [74] call vera_layer_set_backcolor - // [226] phi from main::bgcolor1 to vera_layer_set_backcolor [phi:main::bgcolor1->vera_layer_set_backcolor] - vera_layer_set_backcolor_from_bgcolor1: - // [226] phi vera_layer_set_backcolor::color#3 = BLACK [phi:main::bgcolor1->vera_layer_set_backcolor#0] -- vbuaa=vbuc1 - lda #BLACK - // [226] phi vera_layer_set_backcolor::layer#3 = vera_layer_set_backcolor::layer#1 [phi:main::bgcolor1->vera_layer_set_backcolor#1] -- register_copy - jsr vera_layer_set_backcolor - // [75] phi from main::bgcolor1 to main::@16 [phi:main::bgcolor1->main::@16] - __b16_from_bgcolor1: - jmp __b16 - // main::@16 - __b16: - // [76] call clrscr - jsr clrscr - // [77] phi from main::@16 to main::@21 [phi:main::@16->main::@21] - __b21_from___b16: - jmp __b21 - // main::@21 - __b21: - // [78] call vera_layer_mode_tile - // Now we can use the full bank 0! - // We set the mapbase of the tile demo to output to 0x12000, - // and the tilebase is set to 0x0000! - // [286] phi from main::@21 to vera_layer_mode_tile [phi:main::@21->vera_layer_mode_tile] - vera_layer_mode_tile_from___b21: - // [286] phi vera_layer_mode_tile::tileheight#10 = $10 [phi:main::@21->vera_layer_mode_tile#0] -- vbuz1=vbuc1 - lda #$10 - sta.z vera_layer_mode_tile.tileheight - // [286] phi vera_layer_mode_tile::tilewidth#10 = $10 [phi:main::@21->vera_layer_mode_tile#1] -- vbuz1=vbuc1 - lda #$10 - sta.z vera_layer_mode_tile.tilewidth - // [286] phi vera_layer_mode_tile::tilebase_address#10 = 0 [phi:main::@21->vera_layer_mode_tile#2] -- vduz1=vbuc1 - lda #0 - sta.z vera_layer_mode_tile.tilebase_address_1 - lda #0 - sta.z vera_layer_mode_tile.tilebase_address_1+1 - sta.z vera_layer_mode_tile.tilebase_address_1+2 - sta.z vera_layer_mode_tile.tilebase_address_1+3 - // [286] phi vera_layer_mode_tile::mapbase_address#10 = $14000 [phi:main::@21->vera_layer_mode_tile#3] -- vduz1=vduc1 - lda #<$14000 - sta.z vera_layer_mode_tile.mapbase_address_1 - lda #>$14000 - sta.z vera_layer_mode_tile.mapbase_address_1+1 - lda #<$14000>>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+2 - lda #>$14000>>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+3 - // [286] phi vera_layer_mode_tile::mapheight#10 = $40 [phi:main::@21->vera_layer_mode_tile#4] -- vwuz1=vbuc1 - lda #<$40 - sta.z vera_layer_mode_tile.mapheight - lda #>$40 - sta.z vera_layer_mode_tile.mapheight+1 - // [286] phi vera_layer_mode_tile::layer#10 = 0 [phi:main::@21->vera_layer_mode_tile#5] -- vbuz1=vbuc1 - lda #0 - sta.z vera_layer_mode_tile.layer - // [286] phi vera_layer_mode_tile::mapwidth#10 = $40 [phi:main::@21->vera_layer_mode_tile#6] -- vwuz1=vbuc1 - lda #<$40 - sta.z vera_layer_mode_tile.mapwidth - lda #>$40 - sta.z vera_layer_mode_tile.mapwidth+1 - // [286] phi vera_layer_mode_tile::color_depth#5 = 8 [phi:main::@21->vera_layer_mode_tile#7] -- vbuxx=vbuc1 - ldx #8 - jsr vera_layer_mode_tile - // [79] phi from main::@21 to main::@22 [phi:main::@21->main::@22] - __b22_from___b21: - jmp __b22 - // main::@22 - __b22: - // [80] call memcpy_to_vram - // [388] phi from main::@22 to memcpy_to_vram [phi:main::@22->memcpy_to_vram] - memcpy_to_vram_from___b22: - // [388] phi memcpy_to_vram::vdest#2 = (void *)(char *) 0 [phi:main::@22->memcpy_to_vram#0] -- pvoz1=pvoc1 - lda #<0 - sta.z memcpy_to_vram.vdest - lda #>0 - sta.z memcpy_to_vram.vdest+1 - jsr memcpy_to_vram - // [81] phi from main::@22 to main::@1 [phi:main::@22->main::@1] - __b1_from___b22: - // [81] phi main::t#5 = 1 [phi:main::@22->main::@1#0] -- vbuz1=vbuc1 - lda #1 - sta.z t - // [81] phi main::tilebase#7 = (char *) 0+$100 [phi:main::@22->main::@1#1] -- pbuz1=pbuc1 - lda #<0+$100 - sta.z tilebase - lda #>0+$100 - sta.z tilebase+1 - jmp __b1 - // [81] phi from main::@23 to main::@1 [phi:main::@23->main::@1] - __b1_from___b23: - // [81] phi main::t#5 = main::t#1 [phi:main::@23->main::@1#0] -- register_copy - // [81] phi main::tilebase#7 = main::tilebase#2 [phi:main::@23->main::@1#1] -- register_copy - jmp __b1 - // main::@1 - __b1: - // [82] phi from main::@1 to main::@2 [phi:main::@1->main::@2] - __b2_from___b1: - // [82] phi main::p#2 = 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1 - ldx #0 - jmp __b2 - // [82] phi from main::@2 to main::@2 [phi:main::@2->main::@2] - __b2_from___b2: - // [82] phi main::p#2 = main::p#1 [phi:main::@2->main::@2#0] -- register_copy - jmp __b2 - // main::@2 - __b2: - // [83] main::tiles[main::p#2] = main::tiles[main::p#2] + 1 -- pbuc1_derefidx_vbuxx=pbuc1_derefidx_vbuxx_plus_1 - lda tiles,x - inc - sta tiles,x - // [84] main::p#1 = ++ main::p#2 -- vbuxx=_inc_vbuxx - inx - // [85] if(main::p#1!=0) goto main::@2 -- vbuxx_neq_0_then_la1 - cpx #0 - bne __b2_from___b2 - jmp __b3 - // main::@3 - __b3: - // [86] memcpy_to_vram::vdest#1 = (void *)main::tilebase#7 -- pvoz1=pvoz2 - lda.z tilebase - sta.z memcpy_to_vram.vdest - lda.z tilebase+1 - sta.z memcpy_to_vram.vdest+1 - // [87] call memcpy_to_vram - // [388] phi from main::@3 to memcpy_to_vram [phi:main::@3->memcpy_to_vram] - memcpy_to_vram_from___b3: - // [388] phi memcpy_to_vram::vdest#2 = memcpy_to_vram::vdest#1 [phi:main::@3->memcpy_to_vram#0] -- register_copy - jsr memcpy_to_vram - jmp __b23 - // main::@23 - __b23: - // [88] main::tilebase#2 = main::tilebase#7 + $100 -- pbuz1=pbuz1_plus_vwuc1 - lda.z tilebase - clc - adc #<$100 - sta.z tilebase - lda.z tilebase+1 - adc #>$100 - sta.z tilebase+1 - // [89] main::t#1 = ++ main::t#5 -- vbuz1=_inc_vbuz1 - inc.z t - // [90] if(main::t#1!=0) goto main::@1 -- vbuz1_neq_0_then_la1 - lda.z t - bne __b1_from___b23 - // [91] phi from main::@23 to main::@4 [phi:main::@23->main::@4] - __b4_from___b23: - jmp __b4 - // main::@4 - __b4: - // [92] call vera_tile_area - //vera_tile_area(byte layer, word tileindex, byte x, byte y, byte w, byte h, byte hflip, byte vflip, byte offset) - // [400] phi from main::@4 to vera_tile_area [phi:main::@4->vera_tile_area] - vera_tile_area_from___b4: - // [400] phi vera_tile_area::w#11 = $28 [phi:main::@4->vera_tile_area#0] -- vbuz1=vbuc1 - lda #$28 - sta.z vera_tile_area.w - // [400] phi vera_tile_area::h#6 = $1e [phi:main::@4->vera_tile_area#1] -- vbuz1=vbuc1 - lda #$1e - sta.z vera_tile_area.h - // [400] phi vera_tile_area::x#5 = 0 [phi:main::@4->vera_tile_area#2] -- vbuz1=vbuc1 - lda #0 - sta.z vera_tile_area.x - // [400] phi vera_tile_area::y#5 = 0 [phi:main::@4->vera_tile_area#3] -- vbuz1=vbuc1 - lda #0 - sta.z vera_tile_area.y - // [400] phi vera_tile_area::tileindex#5 = 0 [phi:main::@4->vera_tile_area#4] -- vwuz1=vbuc1 - lda #<0 - sta.z vera_tile_area.tileindex - lda #>0 - sta.z vera_tile_area.tileindex+1 - jsr vera_tile_area - // [93] phi from main::@4 to main::@5 [phi:main::@4->main::@5] - __b5_from___b4: - // [93] phi main::r#5 = 0 [phi:main::@4->main::@5#0] -- vbuz1=vbuc1 - lda #0 - sta.z r - // [93] phi main::row#9 = 1 [phi:main::@4->main::@5#1] -- vbuz1=vbuc1 - lda #1 - sta.z row - // [93] phi main::tile#10 = 0 [phi:main::@4->main::@5#2] -- vwuz1=vwuc1 - lda #<0 - sta.z tile - lda #>0 - sta.z tile+1 - jmp __b5 - // [93] phi from main::@7 to main::@5 [phi:main::@7->main::@5] - __b5_from___b7: - // [93] phi main::r#5 = main::r#1 [phi:main::@7->main::@5#0] -- register_copy - // [93] phi main::row#9 = main::row#1 [phi:main::@7->main::@5#1] -- register_copy - // [93] phi main::tile#10 = main::tile#12 [phi:main::@7->main::@5#2] -- register_copy - jmp __b5 - // main::@5 - __b5: - // [94] phi from main::@5 to main::@6 [phi:main::@5->main::@6] - __b6_from___b5: - // [94] phi main::c#2 = 0 [phi:main::@5->main::@6#0] -- vbuz1=vbuc1 - lda #0 - sta.z c - // [94] phi main::column#2 = 0 [phi:main::@5->main::@6#1] -- vbuxx=vbuc1 - ldx #0 - // [94] phi main::tile#6 = main::tile#10 [phi:main::@5->main::@6#2] -- register_copy - jmp __b6 - // [94] phi from main::@24 to main::@6 [phi:main::@24->main::@6] - __b6_from___b24: - // [94] phi main::c#2 = main::c#1 [phi:main::@24->main::@6#0] -- register_copy - // [94] phi main::column#2 = main::column#1 [phi:main::@24->main::@6#1] -- register_copy - // [94] phi main::tile#6 = main::tile#12 [phi:main::@24->main::@6#2] -- register_copy - jmp __b6 - // main::@6 - __b6: - // [95] vera_tile_area::tileindex#1 = main::tile#6 - // [96] vera_tile_area::x#1 = main::column#2 -- vbuz1=vbuxx - stx.z vera_tile_area.x - // [97] vera_tile_area::y#1 = main::row#9 -- vbuz1=vbuz2 - lda.z row - sta.z vera_tile_area.y - // [98] call vera_tile_area - // [400] phi from main::@6 to vera_tile_area [phi:main::@6->vera_tile_area] - vera_tile_area_from___b6: - // [400] phi vera_tile_area::w#11 = 1 [phi:main::@6->vera_tile_area#0] -- vbuz1=vbuc1 - lda #1 - sta.z vera_tile_area.w - // [400] phi vera_tile_area::h#6 = 1 [phi:main::@6->vera_tile_area#1] -- vbuz1=vbuc1 - lda #1 - sta.z vera_tile_area.h - // [400] phi vera_tile_area::x#5 = vera_tile_area::x#1 [phi:main::@6->vera_tile_area#2] -- register_copy - // [400] phi vera_tile_area::y#5 = vera_tile_area::y#1 [phi:main::@6->vera_tile_area#3] -- register_copy - // [400] phi vera_tile_area::tileindex#5 = vera_tile_area::tileindex#1 [phi:main::@6->vera_tile_area#4] -- register_copy - jsr vera_tile_area - jmp __b24 - // main::@24 - __b24: - // [99] main::column#1 = main::column#2 + 2 -- vbuxx=vbuxx_plus_2 - inx - inx - // [100] main::tile#1 = ++ main::tile#6 -- vwuz1=_inc_vwuz1 - inc.z tile - bne !+ - inc.z tile+1 - !: - // [101] main::tile#12 = main::tile#1 & $ff -- vwuz1=vwuz1_band_vbuc1 - lda #$ff - and.z tile - sta.z tile - lda #0 - sta.z tile+1 - // [102] main::c#1 = ++ main::c#2 -- vbuz1=_inc_vbuz1 - inc.z c - // [103] if(main::c#1!=$14) goto main::@6 -- vbuz1_neq_vbuc1_then_la1 - lda #$14 - cmp.z c - bne __b6_from___b24 - jmp __b7 - // main::@7 - __b7: - // [104] main::row#1 = main::row#9 + 2 -- vbuz1=vbuz1_plus_2 - lda.z row - clc - adc #2 - sta.z row - // [105] main::r#1 = ++ main::r#5 -- vbuz1=_inc_vbuz1 - inc.z r - // [106] if(main::r#1!=$c) goto main::@5 -- vbuz1_neq_vbuc1_then_la1 - lda #$c - cmp.z r - bne __b5_from___b7 - // [107] phi from main::@7 to main::@8 [phi:main::@7->main::@8] - __b8_from___b7: - jmp __b8 - // main::@8 - __b8: - // [108] call gotoxy - // [234] phi from main::@8 to gotoxy [phi:main::@8->gotoxy] - gotoxy_from___b8: - // [234] phi gotoxy::y#4 = $32 [phi:main::@8->gotoxy#0] -- vbuxx=vbuc1 - ldx #$32 - jsr gotoxy - // [109] phi from main::@8 to main::@25 [phi:main::@8->main::@25] - __b25_from___b8: - jmp __b25 - // main::@25 - __b25: - // [110] call printf_str - // [433] phi from main::@25 to printf_str [phi:main::@25->printf_str] - printf_str_from___b25: - // [433] phi printf_str::s#10 = main::s [phi:main::@25->printf_str#0] -- pbuz1=pbuc1 - lda #s - sta.z printf_str.s+1 - jsr printf_str - // [111] phi from main::@25 to main::@26 [phi:main::@25->main::@26] - __b26_from___b25: - jmp __b26 - // main::@26 - __b26: - // [112] call printf_str - // [433] phi from main::@26 to printf_str [phi:main::@26->printf_str] - printf_str_from___b26: - // [433] phi printf_str::s#10 = main::s1 [phi:main::@26->printf_str#0] -- pbuz1=pbuc1 - lda #s1 - sta.z printf_str.s+1 - jsr printf_str - // [113] phi from main::@26 to main::@27 [phi:main::@26->main::@27] - __b27_from___b26: - jmp __b27 - // main::@27 - __b27: - // [114] call printf_str - // [433] phi from main::@27 to printf_str [phi:main::@27->printf_str] - printf_str_from___b27: - // [433] phi printf_str::s#10 = main::s2 [phi:main::@27->printf_str#0] -- pbuz1=pbuc1 - lda #s2 - sta.z printf_str.s+1 - jsr printf_str - // [115] phi from main::@27 to main::@28 [phi:main::@27->main::@28] - __b28_from___b27: - jmp __b28 - // main::@28 - __b28: - // [116] call printf_str - // [433] phi from main::@28 to printf_str [phi:main::@28->printf_str] - printf_str_from___b28: - // [433] phi printf_str::s#10 = main::s3 [phi:main::@28->printf_str#0] -- pbuz1=pbuc1 - lda #s3 - sta.z printf_str.s+1 - jsr printf_str - // [117] phi from main::@28 to main::@29 [phi:main::@28->main::@29] - __b29_from___b28: - jmp __b29 - // main::@29 - __b29: - // [118] call printf_str - // [433] phi from main::@29 to printf_str [phi:main::@29->printf_str] - printf_str_from___b29: - // [433] phi printf_str::s#10 = main::s4 [phi:main::@29->printf_str#0] -- pbuz1=pbuc1 - lda #s4 - sta.z printf_str.s+1 - jsr printf_str - // [119] phi from main::@29 to main::@30 [phi:main::@29->main::@30] - __b30_from___b29: - jmp __b30 - // main::@30 - __b30: - // [120] call printf_str - // [433] phi from main::@30 to printf_str [phi:main::@30->printf_str] - printf_str_from___b30: - // [433] phi printf_str::s#10 = main::s5 [phi:main::@30->printf_str#0] -- pbuz1=pbuc1 - lda #s5 - sta.z printf_str.s+1 - jsr printf_str - // [121] phi from main::@30 to main::@31 [phi:main::@30->main::@31] - __b31_from___b30: - jmp __b31 - // main::@31 - __b31: - // [122] call printf_str - // [433] phi from main::@31 to printf_str [phi:main::@31->printf_str] - printf_str_from___b31: - // [433] phi printf_str::s#10 = main::s6 [phi:main::@31->printf_str#0] -- pbuz1=pbuc1 - lda #s6 - sta.z printf_str.s+1 - jsr printf_str - // [123] phi from main::@31 to main::@32 [phi:main::@31->main::@32] - __b32_from___b31: - jmp __b32 - // main::@32 - __b32: - // [124] call printf_str - // [433] phi from main::@32 to printf_str [phi:main::@32->printf_str] - printf_str_from___b32: - // [433] phi printf_str::s#10 = main::s7 [phi:main::@32->printf_str#0] -- pbuz1=pbuc1 - lda #s7 - sta.z printf_str.s+1 - jsr printf_str - jmp vera_layer_show1 - // main::vera_layer_show1 - vera_layer_show1: - // [125] *VERA_DC_VIDEO = *VERA_DC_VIDEO | *vera_layer_enable -- _deref_pbuc1=_deref_pbuc1_bor__deref_pbuc2 - lda VERA_DC_VIDEO - ora vera_layer_enable - sta VERA_DC_VIDEO - // [126] phi from main::@33 main::vera_layer_show1 to main::@9 [phi:main::@33/main::vera_layer_show1->main::@9] - __b9_from___b33: - __b9_from_vera_layer_show1: - jmp __b9 - // main::@9 - __b9: - // [127] call kbhit - jsr kbhit - // [128] kbhit::return#2 = kbhit::return#1 - jmp __b33 - // main::@33 - __b33: - // [129] main::$35 = kbhit::return#2 - // [130] if(0==main::$35) goto main::@9 -- 0_eq_vbuaa_then_la1 - cmp #0 - beq __b9_from___b33 - // [131] phi from main::@33 to main::@10 [phi:main::@33->main::@10] - __b10_from___b33: - jmp __b10 - // main::@10 - __b10: - // [132] call vera_tile_area - // [400] phi from main::@10 to vera_tile_area [phi:main::@10->vera_tile_area] - vera_tile_area_from___b10: - // [400] phi vera_tile_area::w#11 = $28 [phi:main::@10->vera_tile_area#0] -- vbuz1=vbuc1 - lda #$28 - sta.z vera_tile_area.w - // [400] phi vera_tile_area::h#6 = $1e [phi:main::@10->vera_tile_area#1] -- vbuz1=vbuc1 - lda #$1e - sta.z vera_tile_area.h - // [400] phi vera_tile_area::x#5 = 0 [phi:main::@10->vera_tile_area#2] -- vbuz1=vbuc1 - lda #0 - sta.z vera_tile_area.x - // [400] phi vera_tile_area::y#5 = 0 [phi:main::@10->vera_tile_area#3] -- vbuz1=vbuc1 - lda #0 - sta.z vera_tile_area.y - // [400] phi vera_tile_area::tileindex#5 = 0 [phi:main::@10->vera_tile_area#4] -- vwuz1=vbuc1 - lda #<0 - sta.z vera_tile_area.tileindex - lda #>0 - sta.z vera_tile_area.tileindex+1 - jsr vera_tile_area - // [133] phi from main::@10 to main::@11 [phi:main::@10->main::@11] - __b11_from___b10: - // [133] phi main::r1#5 = 0 [phi:main::@10->main::@11#0] -- vbuz1=vbuc1 - lda #0 - sta.z r1 - // [133] phi main::row#10 = 0 [phi:main::@10->main::@11#1] -- vbuz1=vbuc1 - lda #0 - sta.z row_1 - // [133] phi main::tile#11 = 0 [phi:main::@10->main::@11#2] -- vwuz1=vbuc1 - lda #<0 - sta.z tile - lda #>0 - sta.z tile+1 - jmp __b11 - // [133] phi from main::@13 to main::@11 [phi:main::@13->main::@11] - __b11_from___b13: - // [133] phi main::r1#5 = main::r1#1 [phi:main::@13->main::@11#0] -- register_copy - // [133] phi main::row#10 = main::row#3 [phi:main::@13->main::@11#1] -- register_copy - // [133] phi main::tile#11 = main::tile#13 [phi:main::@13->main::@11#2] -- register_copy - jmp __b11 - // main::@11 - __b11: - // [134] phi from main::@11 to main::@12 [phi:main::@11->main::@12] - __b12_from___b11: - // [134] phi main::c1#2 = 0 [phi:main::@11->main::@12#0] -- vbuxx=vbuc1 - ldx #0 - // [134] phi main::column1#2 = 0 [phi:main::@11->main::@12#1] -- vbuz1=vbuc1 - lda #0 - sta.z column1 - // [134] phi main::tile#8 = main::tile#11 [phi:main::@11->main::@12#2] -- register_copy - jmp __b12 - // [134] phi from main::@34 to main::@12 [phi:main::@34->main::@12] - __b12_from___b34: - // [134] phi main::c1#2 = main::c1#1 [phi:main::@34->main::@12#0] -- register_copy - // [134] phi main::column1#2 = main::column1#1 [phi:main::@34->main::@12#1] -- register_copy - // [134] phi main::tile#8 = main::tile#13 [phi:main::@34->main::@12#2] -- register_copy - jmp __b12 - // main::@12 - __b12: - // [135] vera_tile_area::tileindex#3 = main::tile#8 - // [136] vera_tile_area::x#3 = main::column1#2 - // [137] vera_tile_area::y#3 = main::row#10 -- vbuz1=vbuz2 - lda.z row_1 - sta.z vera_tile_area.y - // [138] call vera_tile_area - // [400] phi from main::@12 to vera_tile_area [phi:main::@12->vera_tile_area] - vera_tile_area_from___b12: - // [400] phi vera_tile_area::w#11 = 2 [phi:main::@12->vera_tile_area#0] -- vbuz1=vbuc1 - lda #2 - sta.z vera_tile_area.w - // [400] phi vera_tile_area::h#6 = 2 [phi:main::@12->vera_tile_area#1] -- vbuz1=vbuc1 - lda #2 - sta.z vera_tile_area.h - // [400] phi vera_tile_area::x#5 = vera_tile_area::x#3 [phi:main::@12->vera_tile_area#2] -- register_copy - // [400] phi vera_tile_area::y#5 = vera_tile_area::y#3 [phi:main::@12->vera_tile_area#3] -- register_copy - // [400] phi vera_tile_area::tileindex#5 = vera_tile_area::tileindex#3 [phi:main::@12->vera_tile_area#4] -- register_copy - jsr vera_tile_area - jmp __b34 - // main::@34 - __b34: - // [139] main::column1#1 = main::column1#2 + 2 -- vbuz1=vbuz1_plus_2 - lda.z column1 - clc - adc #2 - sta.z column1 - // [140] main::tile#4 = ++ main::tile#8 -- vwuz1=_inc_vwuz1 - inc.z tile - bne !+ - inc.z tile+1 - !: - // [141] main::tile#13 = main::tile#4 & $ff -- vwuz1=vwuz1_band_vbuc1 - lda #$ff - and.z tile - sta.z tile - lda #0 - sta.z tile+1 - // [142] main::c1#1 = ++ main::c1#2 -- vbuxx=_inc_vbuxx - inx - // [143] if(main::c1#1!=$14) goto main::@12 -- vbuxx_neq_vbuc1_then_la1 - cpx #$14 - bne __b12_from___b34 - jmp __b13 - // main::@13 - __b13: - // [144] main::row#3 = main::row#10 + 2 -- vbuz1=vbuz1_plus_2 - lda.z row_1 - clc - adc #2 - sta.z row_1 - // [145] main::r1#1 = ++ main::r1#5 -- vbuz1=_inc_vbuz1 - inc.z r1 - // [146] if(main::r1#1!=$c) goto main::@11 -- vbuz1_neq_vbuc1_then_la1 - lda #$c - cmp.z r1 - bne __b11_from___b13 - // [147] phi from main::@13 main::@35 to main::@14 [phi:main::@13/main::@35->main::@14] - __b14_from___b13: - __b14_from___b35: - jmp __b14 - // main::@14 - __b14: - // [148] call kbhit - jsr kbhit - // [149] kbhit::return#3 = kbhit::return#1 - jmp __b35 - // main::@35 - __b35: - // [150] main::$40 = kbhit::return#3 - // [151] if(0==main::$40) goto main::@14 -- 0_eq_vbuaa_then_la1 - cmp #0 - beq __b14_from___b35 - // [152] phi from main::@35 to main::@15 [phi:main::@35->main::@15] - __b15_from___b35: - jmp __b15 - // main::@15 - __b15: - // [153] call vera_tile_area - // Now put back the defaults ... - // [400] phi from main::@15 to vera_tile_area [phi:main::@15->vera_tile_area] - vera_tile_area_from___b15: - // [400] phi vera_tile_area::w#11 = $28 [phi:main::@15->vera_tile_area#0] -- vbuz1=vbuc1 - lda #$28 - sta.z vera_tile_area.w - // [400] phi vera_tile_area::h#6 = $1e [phi:main::@15->vera_tile_area#1] -- vbuz1=vbuc1 - lda #$1e - sta.z vera_tile_area.h - // [400] phi vera_tile_area::x#5 = 0 [phi:main::@15->vera_tile_area#2] -- vbuz1=vbuc1 - lda #0 - sta.z vera_tile_area.x - // [400] phi vera_tile_area::y#5 = 0 [phi:main::@15->vera_tile_area#3] -- vbuz1=vbuc1 - lda #0 - sta.z vera_tile_area.y - // [400] phi vera_tile_area::tileindex#5 = 0 [phi:main::@15->vera_tile_area#4] -- vwuz1=vbuc1 - lda #<0 - sta.z vera_tile_area.tileindex - lda #>0 - sta.z vera_tile_area.tileindex+1 - jsr vera_tile_area - jmp vera_layer_hide1 - // main::vera_layer_hide1 - vera_layer_hide1: - // [154] main::vera_layer_hide1_$0 = ~ *vera_layer_enable -- vbuaa=_bnot__deref_pbuc1 - lda vera_layer_enable - eor #$ff - // [155] *VERA_DC_VIDEO = *VERA_DC_VIDEO & main::vera_layer_hide1_$0 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa - and VERA_DC_VIDEO - sta VERA_DC_VIDEO - // [156] phi from main::vera_layer_hide1 to main::@17 [phi:main::vera_layer_hide1->main::@17] - __b17_from_vera_layer_hide1: - jmp __b17 - // main::@17 - __b17: - // [157] call memcpy_in_vram - // [266] phi from main::@17 to memcpy_in_vram [phi:main::@17->memcpy_in_vram] - memcpy_in_vram_from___b17: - // [266] phi memcpy_in_vram::num#4 = $100*8 [phi:main::@17->memcpy_in_vram#0] -- vwuz1=vwuc1 - lda #<$100*8 - sta.z memcpy_in_vram.num - lda #>$100*8 - sta.z memcpy_in_vram.num+1 - // [266] phi memcpy_in_vram::dest_bank#3 = 0 [phi:main::@17->memcpy_in_vram#1] -- vbuz1=vbuc1 - lda #0 - sta.z memcpy_in_vram.dest_bank - // [266] phi memcpy_in_vram::dest#3 = (void *)(char *) 63488 [phi:main::@17->memcpy_in_vram#2] -- pvoz1=pvoc1 - lda #<$f800 - sta.z memcpy_in_vram.dest - lda #>$f800 - sta.z memcpy_in_vram.dest+1 - // [266] phi memcpy_in_vram::src_bank#3 = 1 [phi:main::@17->memcpy_in_vram#3] -- vbuyy=vbuc1 - ldy #1 - // [266] phi memcpy_in_vram::src#3 = (void *)(char *) 61440 [phi:main::@17->memcpy_in_vram#4] -- pvoz1=pvoc1 - lda #<$f000 - sta.z memcpy_in_vram.src - lda #>$f000 - sta.z memcpy_in_vram.src+1 - jsr memcpy_in_vram - // [158] phi from main::@17 to main::@36 [phi:main::@17->main::@36] - __b36_from___b17: - jmp __b36 - // main::@36 - __b36: - // [159] call vera_layer_mode_tile - // [286] phi from main::@36 to vera_layer_mode_tile [phi:main::@36->vera_layer_mode_tile] - vera_layer_mode_tile_from___b36: - // [286] phi vera_layer_mode_tile::tileheight#10 = 8 [phi:main::@36->vera_layer_mode_tile#0] -- vbuz1=vbuc1 - lda #8 - sta.z vera_layer_mode_tile.tileheight - // [286] phi vera_layer_mode_tile::tilewidth#10 = 8 [phi:main::@36->vera_layer_mode_tile#1] -- vbuz1=vbuc1 - lda #8 - sta.z vera_layer_mode_tile.tilewidth - // [286] phi vera_layer_mode_tile::tilebase_address#10 = $f800 [phi:main::@36->vera_layer_mode_tile#2] -- vduz1=vduc1 - lda #<$f800 - sta.z vera_layer_mode_tile.tilebase_address_1 - lda #>$f800 - sta.z vera_layer_mode_tile.tilebase_address_1+1 - lda #<$f800>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+2 - lda #>$f800>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+3 - // [286] phi vera_layer_mode_tile::mapbase_address#10 = 0 [phi:main::@36->vera_layer_mode_tile#3] -- vduz1=vbuc1 - lda #0 - sta.z vera_layer_mode_tile.mapbase_address_1 - lda #0 - sta.z vera_layer_mode_tile.mapbase_address_1+1 - sta.z vera_layer_mode_tile.mapbase_address_1+2 - sta.z vera_layer_mode_tile.mapbase_address_1+3 - // [286] phi vera_layer_mode_tile::mapheight#10 = $80 [phi:main::@36->vera_layer_mode_tile#4] -- vwuz1=vbuc1 - lda #<$80 - sta.z vera_layer_mode_tile.mapheight - lda #>$80 - sta.z vera_layer_mode_tile.mapheight+1 - // [286] phi vera_layer_mode_tile::layer#10 = 1 [phi:main::@36->vera_layer_mode_tile#5] -- vbuz1=vbuc1 - lda #1 - sta.z vera_layer_mode_tile.layer - // [286] phi vera_layer_mode_tile::mapwidth#10 = $80 [phi:main::@36->vera_layer_mode_tile#6] -- vwuz1=vbuc1 - lda #<$80 - sta.z vera_layer_mode_tile.mapwidth - lda #>$80 - sta.z vera_layer_mode_tile.mapwidth+1 - // [286] phi vera_layer_mode_tile::color_depth#5 = 1 [phi:main::@36->vera_layer_mode_tile#7] -- vbuxx=vbuc1 - ldx #1 - jsr vera_layer_mode_tile - // [160] phi from main::@36 to main::@37 [phi:main::@36->main::@37] - __b37_from___b36: - jmp __b37 - // main::@37 - __b37: - // [161] call vera_layer_mode_tile - // [286] phi from main::@37 to vera_layer_mode_tile [phi:main::@37->vera_layer_mode_tile] - vera_layer_mode_tile_from___b37: - // [286] phi vera_layer_mode_tile::tileheight#10 = 8 [phi:main::@37->vera_layer_mode_tile#0] -- vbuz1=vbuc1 - lda #8 - sta.z vera_layer_mode_tile.tileheight - // [286] phi vera_layer_mode_tile::tilewidth#10 = 8 [phi:main::@37->vera_layer_mode_tile#1] -- vbuz1=vbuc1 - lda #8 - sta.z vera_layer_mode_tile.tilewidth - // [286] phi vera_layer_mode_tile::tilebase_address#10 = $f800 [phi:main::@37->vera_layer_mode_tile#2] -- vduz1=vduc1 - lda #<$f800 - sta.z vera_layer_mode_tile.tilebase_address_1 - lda #>$f800 - sta.z vera_layer_mode_tile.tilebase_address_1+1 - lda #<$f800>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+2 - lda #>$f800>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+3 - // [286] phi vera_layer_mode_tile::mapbase_address#10 = 0 [phi:main::@37->vera_layer_mode_tile#3] -- vduz1=vbuc1 - lda #0 - sta.z vera_layer_mode_tile.mapbase_address_1 - lda #0 - sta.z vera_layer_mode_tile.mapbase_address_1+1 - sta.z vera_layer_mode_tile.mapbase_address_1+2 - sta.z vera_layer_mode_tile.mapbase_address_1+3 - // [286] phi vera_layer_mode_tile::mapheight#10 = $80 [phi:main::@37->vera_layer_mode_tile#4] -- vwuz1=vbuc1 - lda #<$80 - sta.z vera_layer_mode_tile.mapheight - lda #>$80 - sta.z vera_layer_mode_tile.mapheight+1 - // [286] phi vera_layer_mode_tile::layer#10 = 0 [phi:main::@37->vera_layer_mode_tile#5] -- vbuz1=vbuc1 - lda #0 - sta.z vera_layer_mode_tile.layer - // [286] phi vera_layer_mode_tile::mapwidth#10 = $80 [phi:main::@37->vera_layer_mode_tile#6] -- vwuz1=vbuc1 - lda #<$80 - sta.z vera_layer_mode_tile.mapwidth - lda #>$80 - sta.z vera_layer_mode_tile.mapwidth+1 - // [286] phi vera_layer_mode_tile::color_depth#5 = 1 [phi:main::@37->vera_layer_mode_tile#7] -- vbuxx=vbuc1 - ldx #1 - jsr vera_layer_mode_tile - // [162] phi from main::@37 to main::@38 [phi:main::@37->main::@38] - __b38_from___b37: - jmp __b38 - // main::@38 - __b38: - // [163] call screenlayer - jsr screenlayer - jmp textcolor2 - // main::textcolor2 - textcolor2: - // [164] vera_layer_set_textcolor::layer#2 = conio_screen_layer -- vbuyy=vbuz1 - ldy.z conio_screen_layer - // [165] call vera_layer_set_textcolor - // [223] phi from main::textcolor2 to vera_layer_set_textcolor [phi:main::textcolor2->vera_layer_set_textcolor] - vera_layer_set_textcolor_from_textcolor2: - // [223] phi vera_layer_set_textcolor::layer#3 = vera_layer_set_textcolor::layer#2 [phi:main::textcolor2->vera_layer_set_textcolor#0] -- register_copy - jsr vera_layer_set_textcolor - jmp bgcolor2 - // main::bgcolor2 - bgcolor2: - // [166] vera_layer_set_backcolor::layer#2 = conio_screen_layer -- vbuyy=vbuz1 - ldy.z conio_screen_layer - // [167] call vera_layer_set_backcolor - // [226] phi from main::bgcolor2 to vera_layer_set_backcolor [phi:main::bgcolor2->vera_layer_set_backcolor] - vera_layer_set_backcolor_from_bgcolor2: - // [226] phi vera_layer_set_backcolor::color#3 = BLUE [phi:main::bgcolor2->vera_layer_set_backcolor#0] -- vbuaa=vbuc1 - lda #BLUE - // [226] phi vera_layer_set_backcolor::layer#3 = vera_layer_set_backcolor::layer#2 [phi:main::bgcolor2->vera_layer_set_backcolor#1] -- register_copy - jsr vera_layer_set_backcolor - // [168] phi from main::bgcolor2 to main::@18 [phi:main::bgcolor2->main::@18] - __b18_from_bgcolor2: - jmp __b18 - // main::@18 - __b18: - // [169] call clrscr - jsr clrscr - jmp __breturn - // main::@return - __breturn: - // [170] return - rts - .segment Data - tiles: .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - s: .text @"vera in tile mode 8 x 8, color depth 8 bits per pixel.\n" - .byte 0 - s1: .text @"in this mode, tiles are 8 pixels wide and 8 pixels tall.\n" - .byte 0 - s2: .text @"each tile can have a variation of 256 colors.\n" - .byte 0 - s3: .text @"the vera palette of 256 colors, can be used by setting the palette\n" - .byte 0 - s4: .text @"offset for each tile.\n" - .byte 0 - s5: .text @"here each column is displaying the same tile, but with different offsets!\n" - .byte 0 - s6: .text @"each offset aligns to multiples of 16 colors in the palette!.\n" - .byte 0 - s7: .text @"however, the first color will always be transparent (black).\n" - .byte 0 -} -.segment Code - // vera_layer_mode_text -// Set a vera layer in text mode and configure the: -// - layer: Value of 0 or 1. -// - mapbase_address: A dword typed address (4 bytes), that specifies the full address of the map base. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective mapbase vera register. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// - tilebase_address: A dword typed address (4 bytes), that specifies the base address of the tile map. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective tilebase vera register. -// Note that the resulting vera register holds only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// - mapwidth: The width of the map in number of tiles. -// - mapheight: The height of the map in number of tiles. -// - tilewidth: The width of a tile, which can be 8 or 16 pixels. -// - tileheight: The height of a tile, which can be 8 or 16 pixels. -// - color_mode: The color mode, which can be 16 or 256. -// void vera_layer_mode_text(char layer, unsigned long mapbase_address, unsigned long tilebase_address, unsigned int mapwidth, unsigned int mapheight, char tilewidth, char tileheight, unsigned int color_mode) -vera_layer_mode_text: { - .const mapbase_address = 0 - .const tilebase_address = $f800 - .const mapwidth = $80 - .const mapheight = $40 - .const tilewidth = 8 - .const tileheight = 8 - .label layer = 1 - // [172] call vera_layer_mode_tile - // [286] phi from vera_layer_mode_text to vera_layer_mode_tile [phi:vera_layer_mode_text->vera_layer_mode_tile] - vera_layer_mode_tile_from_vera_layer_mode_text: - // [286] phi vera_layer_mode_tile::tileheight#10 = vera_layer_mode_text::tileheight#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#0] -- vbuz1=vbuc1 - lda #tileheight - sta.z vera_layer_mode_tile.tileheight - // [286] phi vera_layer_mode_tile::tilewidth#10 = vera_layer_mode_text::tilewidth#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#1] -- vbuz1=vbuc1 - lda #tilewidth - sta.z vera_layer_mode_tile.tilewidth - // [286] phi vera_layer_mode_tile::tilebase_address#10 = vera_layer_mode_text::tilebase_address#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#2] -- vduz1=vduc1 - lda #tilebase_address - sta.z vera_layer_mode_tile.tilebase_address_1+1 - lda #>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+2 - lda #>tilebase_address>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+3 - // [286] phi vera_layer_mode_tile::mapbase_address#10 = vera_layer_mode_text::mapbase_address#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#3] -- vduz1=vduc1 - lda #mapbase_address - sta.z vera_layer_mode_tile.mapbase_address_1+1 - lda #>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+2 - lda #>mapbase_address>>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+3 - // [286] phi vera_layer_mode_tile::mapheight#10 = vera_layer_mode_text::mapheight#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#4] -- vwuz1=vwuc1 - lda #mapheight - sta.z vera_layer_mode_tile.mapheight+1 - // [286] phi vera_layer_mode_tile::layer#10 = vera_layer_mode_text::layer#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#5] -- vbuz1=vbuc1 - lda #layer - sta.z vera_layer_mode_tile.layer - // [286] phi vera_layer_mode_tile::mapwidth#10 = vera_layer_mode_text::mapwidth#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#6] -- vwuz1=vwuc1 - lda #mapwidth - sta.z vera_layer_mode_tile.mapwidth+1 - // [286] phi vera_layer_mode_tile::color_depth#5 = 1 [phi:vera_layer_mode_text->vera_layer_mode_tile#7] -- vbuxx=vbuc1 - ldx #1 - jsr vera_layer_mode_tile - // [173] phi from vera_layer_mode_text to vera_layer_mode_text::@1 [phi:vera_layer_mode_text->vera_layer_mode_text::@1] - __b1_from_vera_layer_mode_text: - jmp __b1 - // vera_layer_mode_text::@1 - __b1: - // [174] call vera_layer_set_text_color_mode - jsr vera_layer_set_text_color_mode - jmp __breturn - // vera_layer_mode_text::@return - __breturn: - // [175] return - rts -} - // screensize -// Return the current screen size. -// void screensize(char *x, char *y) -screensize: { - .label x = conio_screen_width - .label y = conio_screen_height - // [176] screensize::hscale#0 = *VERA_DC_HSCALE >> 7 -- vbuaa=_deref_pbuc1_ror_7 - // VERA returns in VERA_DC_HSCALE the value of 128 when 80 columns is used in text mode, - // and the value of 64 when 40 columns is used in text mode. - // Basically, 40 columns mode in the VERA is a double scan mode. - // Same for the VERA_DC_VSCALE mode, but then the subdivision is 60 or 30 rows. - // I still need to test the other modes, but this will suffice for now for the pure text modes. - lda VERA_DC_HSCALE - rol - rol - and #1 - // [177] screensize::$1 = $28 << screensize::hscale#0 -- vbuaa=vbuc1_rol_vbuaa - tay - lda #$28 - cpy #0 - beq !e+ - !: - asl - dey - bne !- - !e: - // [178] *screensize::x#0 = screensize::$1 -- _deref_pbuc1=vbuaa - sta.z x - // [179] screensize::vscale#0 = *VERA_DC_VSCALE >> 7 -- vbuaa=_deref_pbuc1_ror_7 - lda VERA_DC_VSCALE - rol - rol - and #1 - // [180] screensize::$3 = $1e << screensize::vscale#0 -- vbuaa=vbuc1_rol_vbuaa - tay - lda #$1e - cpy #0 - beq !e+ - !: - asl - dey - bne !- - !e: - // [181] *screensize::y#0 = screensize::$3 -- _deref_pbuc1=vbuaa - sta.z y - jmp __breturn - // screensize::@return - __breturn: - // [182] return - rts -} - // screenlayer -// Set the layer with which the conio will interact. -// - layer: value of 0 or 1. -// void screenlayer(char layer) -screenlayer: { - .label __2 = $10 - .label __4 = $35 - .label __5 = $3a - .label vera_layer_get_width1_config = $22 - .label vera_layer_get_width1_return = $10 - .label vera_layer_get_height1_config = $2b - .label vera_layer_get_height1_return = $3a - // [183] conio_screen_layer = 1 -- vbuz1=vbuc1 - lda #1 - sta.z conio_screen_layer - // [184] vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer -- vbuyy=vbuz1 - ldy.z conio_screen_layer - // [185] call vera_layer_get_mapbase_bank - jsr vera_layer_get_mapbase_bank - // [186] vera_layer_get_mapbase_bank::return#2 = vera_layer_get_mapbase_bank::return#0 - jmp __b3 - // screenlayer::@3 - __b3: - // [187] CONIO_SCREEN_BANK#15 = vera_layer_get_mapbase_bank::return#2 - // [188] vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer -- vbuaa=vbuz1 - lda.z conio_screen_layer - // [189] call vera_layer_get_mapbase_offset - jsr vera_layer_get_mapbase_offset - // [190] vera_layer_get_mapbase_offset::return#2 = vera_layer_get_mapbase_offset::return#0 - jmp __b4 - // screenlayer::@4 - __b4: - // [191] CONIO_SCREEN_TEXT#17 = vera_layer_get_mapbase_offset::return#2 -- vwuz1=vwuz2 - lda.z vera_layer_get_mapbase_offset.return - sta.z CONIO_SCREEN_TEXT_1 - lda.z vera_layer_get_mapbase_offset.return+1 - sta.z CONIO_SCREEN_TEXT_1+1 - // [192] screenlayer::vera_layer_get_width1_layer#0 = conio_screen_layer -- vbuaa=vbuz1 - lda.z conio_screen_layer - jmp vera_layer_get_width1 - // screenlayer::vera_layer_get_width1 - vera_layer_get_width1: - // [193] screenlayer::vera_layer_get_width1_$2 = screenlayer::vera_layer_get_width1_layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [194] screenlayer::vera_layer_get_width1_config#0 = vera_layer_config[screenlayer::vera_layer_get_width1_$2] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_config,y - sta.z vera_layer_get_width1_config - lda vera_layer_config+1,y - sta.z vera_layer_get_width1_config+1 - // [195] screenlayer::vera_layer_get_width1_$0 = *screenlayer::vera_layer_get_width1_config#0 & VERA_LAYER_WIDTH_MASK -- vbuaa=_deref_pbuz1_band_vbuc1 - lda #VERA_LAYER_WIDTH_MASK - ldy #0 - and (vera_layer_get_width1_config),y - // [196] screenlayer::vera_layer_get_width1_$1 = screenlayer::vera_layer_get_width1_$0 >> 4 -- vbuaa=vbuaa_ror_4 - lsr - lsr - lsr - lsr - // [197] screenlayer::vera_layer_get_width1_$3 = screenlayer::vera_layer_get_width1_$1 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [198] screenlayer::vera_layer_get_width1_return#0 = VERA_LAYER_WIDTH[screenlayer::vera_layer_get_width1_$3] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda VERA_LAYER_WIDTH,y - sta.z vera_layer_get_width1_return - lda VERA_LAYER_WIDTH+1,y - sta.z vera_layer_get_width1_return+1 - jmp vera_layer_get_width1___breturn - // screenlayer::vera_layer_get_width1_@return - vera_layer_get_width1___breturn: - // [199] screenlayer::vera_layer_get_width1_return#1 = screenlayer::vera_layer_get_width1_return#0 - jmp __b1 - // screenlayer::@1 - __b1: - // [200] screenlayer::$2 = screenlayer::vera_layer_get_width1_return#1 - // [201] conio_width = screenlayer::$2 -- vwuz1=vwuz2 - lda.z __2 - sta.z conio_width - lda.z __2+1 - sta.z conio_width+1 - // [202] vera_layer_get_rowshift::layer#0 = conio_screen_layer -- vbuyy=vbuz1 - ldy.z conio_screen_layer - // [203] call vera_layer_get_rowshift - jsr vera_layer_get_rowshift - // [204] vera_layer_get_rowshift::return#2 = vera_layer_get_rowshift::return#0 - jmp __b5 - // screenlayer::@5 - __b5: - // [205] screenlayer::$3 = vera_layer_get_rowshift::return#2 - // [206] conio_rowshift = screenlayer::$3 -- vbuz1=vbuaa - sta.z conio_rowshift - // [207] vera_layer_get_rowskip::layer#0 = conio_screen_layer -- vbuaa=vbuz1 - lda.z conio_screen_layer - // [208] call vera_layer_get_rowskip - jsr vera_layer_get_rowskip - // [209] vera_layer_get_rowskip::return#2 = vera_layer_get_rowskip::return#0 - jmp __b6 - // screenlayer::@6 - __b6: - // [210] screenlayer::$4 = vera_layer_get_rowskip::return#2 - // [211] conio_rowskip = screenlayer::$4 -- vwuz1=vwuz2 - lda.z __4 - sta.z conio_rowskip - lda.z __4+1 - sta.z conio_rowskip+1 - // [212] screenlayer::vera_layer_get_height1_layer#0 = conio_screen_layer -- vbuaa=vbuz1 - lda.z conio_screen_layer - jmp vera_layer_get_height1 - // screenlayer::vera_layer_get_height1 - vera_layer_get_height1: - // [213] screenlayer::vera_layer_get_height1_$2 = screenlayer::vera_layer_get_height1_layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [214] screenlayer::vera_layer_get_height1_config#0 = vera_layer_config[screenlayer::vera_layer_get_height1_$2] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_config,y - sta.z vera_layer_get_height1_config - lda vera_layer_config+1,y - sta.z vera_layer_get_height1_config+1 - // [215] screenlayer::vera_layer_get_height1_$0 = *screenlayer::vera_layer_get_height1_config#0 & VERA_LAYER_HEIGHT_MASK -- vbuaa=_deref_pbuz1_band_vbuc1 - lda #VERA_LAYER_HEIGHT_MASK - ldy #0 - and (vera_layer_get_height1_config),y - // [216] screenlayer::vera_layer_get_height1_$1 = screenlayer::vera_layer_get_height1_$0 >> 6 -- vbuaa=vbuaa_ror_6 - rol - rol - rol - and #3 - // [217] screenlayer::vera_layer_get_height1_$3 = screenlayer::vera_layer_get_height1_$1 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [218] screenlayer::vera_layer_get_height1_return#0 = VERA_LAYER_HEIGHT[screenlayer::vera_layer_get_height1_$3] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda VERA_LAYER_HEIGHT,y - sta.z vera_layer_get_height1_return - lda VERA_LAYER_HEIGHT+1,y - sta.z vera_layer_get_height1_return+1 - jmp vera_layer_get_height1___breturn - // screenlayer::vera_layer_get_height1_@return - vera_layer_get_height1___breturn: - // [219] screenlayer::vera_layer_get_height1_return#1 = screenlayer::vera_layer_get_height1_return#0 - jmp __b2 - // screenlayer::@2 - __b2: - // [220] screenlayer::$5 = screenlayer::vera_layer_get_height1_return#1 - // [221] conio_height = screenlayer::$5 -- vwuz1=vwuz2 - lda.z __5 - sta.z conio_height - lda.z __5+1 - sta.z conio_height+1 - jmp __breturn - // screenlayer::@return - __breturn: - // [222] return - rts -} - // vera_layer_set_textcolor -// Set the front color for text output. The old front text color setting is returned. -// - layer: Value of 0 or 1. -// - color: a 4 bit value ( decimal between 0 and 15) when the VERA works in 16x16 color text mode. -// An 8 bit value (decimal between 0 and 255) when the VERA works in 256 text mode. -// Note that on the VERA, the transparent color has value 0. -// char vera_layer_set_textcolor(__register(Y) char layer, char color) -vera_layer_set_textcolor: { - // [224] vera_layer_textcolor[vera_layer_set_textcolor::layer#3] = WHITE -- pbuc1_derefidx_vbuyy=vbuc2 - lda #WHITE - sta vera_layer_textcolor,y - jmp __breturn - // vera_layer_set_textcolor::@return - __breturn: - // [225] return - rts -} - // vera_layer_set_backcolor -// Set the back color for text output. The old back text color setting is returned. -// - layer: Value of 0 or 1. -// - color: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// char vera_layer_set_backcolor(__register(Y) char layer, __register(A) char color) -vera_layer_set_backcolor: { - // [227] vera_layer_backcolor[vera_layer_set_backcolor::layer#3] = vera_layer_set_backcolor::color#3 -- pbuc1_derefidx_vbuyy=vbuaa - sta vera_layer_backcolor,y - jmp __breturn - // vera_layer_set_backcolor::@return - __breturn: - // [228] return - rts -} - // vera_layer_set_mapbase -// Set the base of the map layer with which the conio will interact. -// - layer: Value of 0 or 1. -// - mapbase: Specifies the base address of the tile map. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// void vera_layer_set_mapbase(__register(A) char layer, __register(X) char mapbase) -vera_layer_set_mapbase: { - .label addr = $22 - // [230] vera_layer_set_mapbase::$0 = vera_layer_set_mapbase::layer#3 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [231] vera_layer_set_mapbase::addr#0 = vera_layer_mapbase[vera_layer_set_mapbase::$0] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_mapbase,y - sta.z addr - lda vera_layer_mapbase+1,y - sta.z addr+1 - // [232] *vera_layer_set_mapbase::addr#0 = vera_layer_set_mapbase::mapbase#3 -- _deref_pbuz1=vbuxx - txa - ldy #0 - sta (addr),y - jmp __breturn - // vera_layer_set_mapbase::@return - __breturn: - // [233] return - rts -} - // gotoxy -// Set the cursor to the specified position -// void gotoxy(char x, __register(X) char y) -gotoxy: { - .label __6 = $10 - .label line_offset = $10 - // [235] if(gotoxy::y#4<=conio_screen_height) goto gotoxy::@4 -- vbuxx_le_vbuz1_then_la1 - lda.z conio_screen_height - stx.z $ff - cmp.z $ff - bcs __b4_from_gotoxy - // [237] phi from gotoxy to gotoxy::@1 [phi:gotoxy->gotoxy::@1] - __b1_from_gotoxy: - // [237] phi gotoxy::y#5 = 0 [phi:gotoxy->gotoxy::@1#0] -- vbuxx=vbuc1 - ldx #0 - jmp __b1 - // [236] phi from gotoxy to gotoxy::@4 [phi:gotoxy->gotoxy::@4] - __b4_from_gotoxy: - jmp __b4 - // gotoxy::@4 - __b4: - // [237] phi from gotoxy::@4 to gotoxy::@1 [phi:gotoxy::@4->gotoxy::@1] - __b1_from___b4: - // [237] phi gotoxy::y#5 = gotoxy::y#4 [phi:gotoxy::@4->gotoxy::@1#0] -- register_copy - jmp __b1 - // gotoxy::@1 - __b1: - // [238] if(0gotoxy::@3] - __b3_from___b1: - jmp __b3 - // gotoxy::@3 - __b3: - jmp __b2 - // gotoxy::@2 - __b2: - // [240] conio_cursor_x[conio_screen_layer] = 0 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #0 - ldy.z conio_screen_layer - sta conio_cursor_x,y - // [241] conio_cursor_y[conio_screen_layer] = gotoxy::y#5 -- pbuc1_derefidx_vbuz1=vbuxx - ldy.z conio_screen_layer - txa - sta conio_cursor_y,y - // [242] gotoxy::$6 = (unsigned int)gotoxy::y#5 -- vwuz1=_word_vbuxx - txa - sta.z __6 - lda #0 - sta.z __6+1 - // [243] gotoxy::line_offset#0 = gotoxy::$6 << conio_rowshift -- vwuz1=vwuz1_rol_vbuz2 - ldy.z conio_rowshift - beq !e+ - !: - asl.z line_offset - rol.z line_offset+1 - dey - bne !- - !e: - // [244] gotoxy::$5 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [245] conio_line_text[gotoxy::$5] = gotoxy::line_offset#0 -- pwuc1_derefidx_vbuaa=vwuz1 - tay - lda.z line_offset - sta conio_line_text,y - lda.z line_offset+1 - sta conio_line_text+1,y - jmp __breturn - // gotoxy::@return - __breturn: - // [246] return - rts -} - // vera_layer_get_color -// Get the text and back color for text output in 16 color mode. -// - layer: Value of 0 or 1. -// - return: an 8 bit value with bit 7:4 containing the back color and bit 3:0 containing the front color. -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_color(__register(X) char layer) -vera_layer_get_color: { - .label addr = 4 - // [248] vera_layer_get_color::$3 = vera_layer_get_color::layer#2 << 1 -- vbuaa=vbuxx_rol_1 - txa - asl - // [249] vera_layer_get_color::addr#0 = vera_layer_config[vera_layer_get_color::$3] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_config,y - sta.z addr - lda vera_layer_config+1,y - sta.z addr+1 - // [250] vera_layer_get_color::$0 = *vera_layer_get_color::addr#0 & VERA_LAYER_CONFIG_256C -- vbuaa=_deref_pbuz1_band_vbuc1 - lda #VERA_LAYER_CONFIG_256C - ldy #0 - and (addr),y - // [251] if(0!=vera_layer_get_color::$0) goto vera_layer_get_color::@1 -- 0_neq_vbuaa_then_la1 - cmp #0 - bne __b1 - jmp __b2 - // vera_layer_get_color::@2 - __b2: - // [252] vera_layer_get_color::$1 = vera_layer_backcolor[vera_layer_get_color::layer#2] << 4 -- vbuaa=pbuc1_derefidx_vbuxx_rol_4 - lda vera_layer_backcolor,x - asl - asl - asl - asl - // [253] vera_layer_get_color::return#2 = vera_layer_get_color::$1 | vera_layer_textcolor[vera_layer_get_color::layer#2] -- vbuaa=vbuaa_bor_pbuc1_derefidx_vbuxx - ora vera_layer_textcolor,x - // [254] phi from vera_layer_get_color::@1 vera_layer_get_color::@2 to vera_layer_get_color::@return [phi:vera_layer_get_color::@1/vera_layer_get_color::@2->vera_layer_get_color::@return] - __breturn_from___b1: - __breturn_from___b2: - // [254] phi vera_layer_get_color::return#3 = vera_layer_get_color::return#1 [phi:vera_layer_get_color::@1/vera_layer_get_color::@2->vera_layer_get_color::@return#0] -- register_copy - jmp __breturn - // vera_layer_get_color::@return - __breturn: - // [255] return - rts - // vera_layer_get_color::@1 - __b1: - // [256] vera_layer_get_color::return#1 = vera_layer_textcolor[vera_layer_get_color::layer#2] -- vbuaa=pbuc1_derefidx_vbuxx - lda vera_layer_textcolor,x - jmp __breturn_from___b1 -} - // cputln -// Print a newline -cputln: { - .label temp = 4 - // [257] cputln::$2 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [258] cputln::temp#0 = conio_line_text[cputln::$2] -- vwuz1=pwuc1_derefidx_vbuaa - // TODO: This needs to be optimized! other variations don't compile because of sections not available! - tay - lda conio_line_text,y - sta.z temp - lda conio_line_text+1,y - sta.z temp+1 - // [259] cputln::temp#1 = cputln::temp#0 + conio_rowskip -- vwuz1=vwuz1_plus_vwuz2 - clc - lda.z temp - adc.z conio_rowskip - sta.z temp - lda.z temp+1 - adc.z conio_rowskip+1 - sta.z temp+1 - // [260] cputln::$3 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [261] conio_line_text[cputln::$3] = cputln::temp#1 -- pwuc1_derefidx_vbuaa=vwuz1 - tay - lda.z temp - sta conio_line_text,y - lda.z temp+1 - sta conio_line_text+1,y - // [262] conio_cursor_x[conio_screen_layer] = 0 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #0 - ldy.z conio_screen_layer - sta conio_cursor_x,y - // [263] conio_cursor_y[conio_screen_layer] = ++ conio_cursor_y[conio_screen_layer] -- pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 - ldx.z conio_screen_layer - inc conio_cursor_y,x - // [264] call cscroll - jsr cscroll - jmp __breturn - // cputln::@return - __breturn: - // [265] return - rts -} - // memcpy_in_vram -// Copy block of memory (from VRAM to VRAM) -// Copies the values from the location pointed by src to the location pointed by dest. -// The method uses the VERA access ports 0 and 1 to copy data from and to in VRAM. -// - src_bank: 64K VRAM bank number to copy from (0/1). -// - src: pointer to the location to copy from. Note that the address is a 16 bit value! -// - src_increment: the increment indicator, VERA needs this because addressing increment is automated by VERA at each access. -// - dest_bank: 64K VRAM bank number to copy to (0/1). -// - dest: pointer to the location to copy to. Note that the address is a 16 bit value! -// - dest_increment: the increment indicator, VERA needs this because addressing increment is automated by VERA at each access. -// - num: The number of bytes to copy -// void memcpy_in_vram(__zp($a) char dest_bank, __zp(8) void *dest, char dest_increment, __register(Y) char src_bank, __zp(6) char *src, char src_increment, __zp(4) unsigned int num) -memcpy_in_vram: { - .label i = 2 - .label dest = 8 - .label src = 6 - .label num = 4 - .label dest_bank = $a - // [267] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // [268] memcpy_in_vram::$0 = byte0 memcpy_in_vram::src#3 -- vbuaa=_byte0_pvoz1 - lda.z src - // [269] *VERA_ADDRX_L = memcpy_in_vram::$0 -- _deref_pbuc1=vbuaa - // Set address - sta VERA_ADDRX_L - // [270] memcpy_in_vram::$1 = byte1 memcpy_in_vram::src#3 -- vbuaa=_byte1_pvoz1 - lda.z src+1 - // [271] *VERA_ADDRX_M = memcpy_in_vram::$1 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // [272] memcpy_in_vram::$2 = VERA_INC_1 | memcpy_in_vram::src_bank#3 -- vbuaa=vbuc1_bor_vbuyy - tya - ora #VERA_INC_1 - // [273] *VERA_ADDRX_H = memcpy_in_vram::$2 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_H - // [274] *VERA_CTRL = *VERA_CTRL | VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 - // Select DATA1 - lda #VERA_ADDRSEL - ora VERA_CTRL - sta VERA_CTRL - // [275] memcpy_in_vram::$3 = byte0 memcpy_in_vram::dest#3 -- vbuaa=_byte0_pvoz1 - lda.z dest - // [276] *VERA_ADDRX_L = memcpy_in_vram::$3 -- _deref_pbuc1=vbuaa - // Set address - sta VERA_ADDRX_L - // [277] memcpy_in_vram::$4 = byte1 memcpy_in_vram::dest#3 -- vbuaa=_byte1_pvoz1 - lda.z dest+1 - // [278] *VERA_ADDRX_M = memcpy_in_vram::$4 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // [279] memcpy_in_vram::$5 = VERA_INC_1 | memcpy_in_vram::dest_bank#3 -- vbuaa=vbuc1_bor_vbuz1 - lda #VERA_INC_1 - ora.z dest_bank - // [280] *VERA_ADDRX_H = memcpy_in_vram::$5 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_H - // [281] phi from memcpy_in_vram to memcpy_in_vram::@1 [phi:memcpy_in_vram->memcpy_in_vram::@1] - __b1_from_memcpy_in_vram: - // [281] phi memcpy_in_vram::i#2 = 0 [phi:memcpy_in_vram->memcpy_in_vram::@1#0] -- vwuz1=vwuc1 - lda #<0 - sta.z i - lda #>0 - sta.z i+1 - jmp __b1 - // Transfer the data - // memcpy_in_vram::@1 - __b1: - // [282] if(memcpy_in_vram::i#2memcpy_in_vram::@1] - __b1_from___b2: - // [281] phi memcpy_in_vram::i#2 = memcpy_in_vram::i#1 [phi:memcpy_in_vram::@2->memcpy_in_vram::@1#0] -- register_copy - jmp __b1 -} - // vera_layer_mode_tile -// Set a vera layer in tile mode and configure the: -// - layer: Value of 0 or 1. -// - mapbase_address: A dword typed address (4 bytes), that specifies the full address of the map base. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective mapbase vera register. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// - tilebase_address: A dword typed address (4 bytes), that specifies the base address of the tile map. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective tilebase vera register. -// Note that the resulting vera register holds only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// - mapwidth: The width of the map in number of tiles. -// - mapheight: The height of the map in number of tiles. -// - tilewidth: The width of a tile, which can be 8 or 16 pixels. -// - tileheight: The height of a tile, which can be 8 or 16 pixels. -// - color_depth: The color depth in bits per pixel (BPP), which can be 1, 2, 4 or 8. -// void vera_layer_mode_tile(__zp($3e) char layer, __zp($2d) unsigned long mapbase_address, __zp($31) unsigned long tilebase_address, __zp($10) unsigned int mapwidth, __zp($44) unsigned int mapheight, __zp($54) char tilewidth, __zp($55) char tileheight, __register(X) char color_depth) -vera_layer_mode_tile: { - .label __1 = $35 - .label __6 = $2b - .label __17 = $3d - .label __18 = $3c - .label mapbase_address = $2d - .label tilebase_address = $31 - .label layer = $3e - .label mapwidth = $10 - .label mapheight = $44 - .label mapbase_address_1 = $4a - .label tileheight = $55 - .label tilebase_address_1 = $4e - .label tilewidth = $54 - // [287] if(vera_layer_mode_tile::color_depth#5==1) goto vera_layer_mode_tile::@5 -- vbuxx_eq_vbuc1_then_la1 - cpx #1 - beq __b5_from_vera_layer_mode_tile - jmp __b1 - // vera_layer_mode_tile::@1 - __b1: - // [288] if(vera_layer_mode_tile::color_depth#5==2) goto vera_layer_mode_tile::@5 -- vbuxx_eq_vbuc1_then_la1 - cpx #2 - beq __b5_from___b1 - jmp __b2 - // vera_layer_mode_tile::@2 - __b2: - // [289] if(vera_layer_mode_tile::color_depth#5==4) goto vera_layer_mode_tile::@5 -- vbuxx_eq_vbuc1_then_la1 - cpx #4 - beq __b5_from___b2 - jmp __b3 - // vera_layer_mode_tile::@3 - __b3: - // [290] if(vera_layer_mode_tile::color_depth#5!=8) goto vera_layer_mode_tile::@5 -- vbuxx_neq_vbuc1_then_la1 - cpx #8 - bne __b5_from___b3 - // [291] phi from vera_layer_mode_tile::@3 to vera_layer_mode_tile::@4 [phi:vera_layer_mode_tile::@3->vera_layer_mode_tile::@4] - __b4_from___b3: - jmp __b4 - // vera_layer_mode_tile::@4 - __b4: - // [292] phi from vera_layer_mode_tile::@4 to vera_layer_mode_tile::@5 [phi:vera_layer_mode_tile::@4->vera_layer_mode_tile::@5] - __b5_from___b4: - // [292] phi vera_layer_mode_tile::config#17 = VERA_LAYER_COLOR_DEPTH_8BPP [phi:vera_layer_mode_tile::@4->vera_layer_mode_tile::@5#0] -- vbuxx=vbuc1 - ldx #VERA_LAYER_COLOR_DEPTH_8BPP - jmp __b5 - // [292] phi from vera_layer_mode_tile to vera_layer_mode_tile::@5 [phi:vera_layer_mode_tile->vera_layer_mode_tile::@5] - __b5_from_vera_layer_mode_tile: - // [292] phi vera_layer_mode_tile::config#17 = VERA_LAYER_COLOR_DEPTH_1BPP [phi:vera_layer_mode_tile->vera_layer_mode_tile::@5#0] -- vbuxx=vbuc1 - ldx #VERA_LAYER_COLOR_DEPTH_1BPP - jmp __b5 - // [292] phi from vera_layer_mode_tile::@1 to vera_layer_mode_tile::@5 [phi:vera_layer_mode_tile::@1->vera_layer_mode_tile::@5] - __b5_from___b1: - // [292] phi vera_layer_mode_tile::config#17 = VERA_LAYER_COLOR_DEPTH_2BPP [phi:vera_layer_mode_tile::@1->vera_layer_mode_tile::@5#0] -- vbuxx=vbuc1 - ldx #VERA_LAYER_COLOR_DEPTH_2BPP - jmp __b5 - // [292] phi from vera_layer_mode_tile::@2 to vera_layer_mode_tile::@5 [phi:vera_layer_mode_tile::@2->vera_layer_mode_tile::@5] - __b5_from___b2: - // [292] phi vera_layer_mode_tile::config#17 = VERA_LAYER_COLOR_DEPTH_4BPP [phi:vera_layer_mode_tile::@2->vera_layer_mode_tile::@5#0] -- vbuxx=vbuc1 - ldx #VERA_LAYER_COLOR_DEPTH_4BPP - jmp __b5 - // [292] phi from vera_layer_mode_tile::@3 to vera_layer_mode_tile::@5 [phi:vera_layer_mode_tile::@3->vera_layer_mode_tile::@5] - __b5_from___b3: - // [292] phi vera_layer_mode_tile::config#17 = 0 [phi:vera_layer_mode_tile::@3->vera_layer_mode_tile::@5#0] -- vbuxx=vbuc1 - ldx #0 - jmp __b5 - // vera_layer_mode_tile::@5 - __b5: - // [293] if(vera_layer_mode_tile::mapwidth#10==$20) goto vera_layer_mode_tile::@9 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapwidth+1 - bne !+ - lda.z mapwidth - cmp #$20 - beq __b9 - !: - jmp __b6 - // vera_layer_mode_tile::@6 - __b6: - // [294] if(vera_layer_mode_tile::mapwidth#10==$40) goto vera_layer_mode_tile::@10 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapwidth+1 - bne !+ - lda.z mapwidth - cmp #$40 - beq __b10 - !: - jmp __b7 - // vera_layer_mode_tile::@7 - __b7: - // [295] if(vera_layer_mode_tile::mapwidth#10==$80) goto vera_layer_mode_tile::@11 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapwidth+1 - bne !+ - lda.z mapwidth - cmp #$80 - beq __b11 - !: - jmp __b8 - // vera_layer_mode_tile::@8 - __b8: - // [296] if(vera_layer_mode_tile::mapwidth#10!=$100) goto vera_layer_mode_tile::@13 -- vwuz1_neq_vwuc1_then_la1 - lda.z mapwidth+1 - cmp #>$100 - bne __b13_from___b8 - lda.z mapwidth - cmp #<$100 - bne __b13_from___b8 - jmp __b12 - // vera_layer_mode_tile::@12 - __b12: - // [297] vera_layer_mode_tile::config#8 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_256 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_WIDTH_256 - tax - // [298] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 9 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #9 - ldy.z layer - sta vera_layer_rowshift,y - // [299] vera_layer_mode_tile::$14 = vera_layer_mode_tile::layer#10 << 1 -- vbuaa=vbuz1_rol_1 - lda.z layer - asl - // [300] vera_layer_rowskip[vera_layer_mode_tile::$14] = $200 -- pwuc1_derefidx_vbuaa=vwuc2 - tay - lda #<$200 - sta vera_layer_rowskip,y - lda #>$200 - sta vera_layer_rowskip+1,y - // [301] phi from vera_layer_mode_tile::@10 vera_layer_mode_tile::@11 vera_layer_mode_tile::@12 vera_layer_mode_tile::@8 vera_layer_mode_tile::@9 to vera_layer_mode_tile::@13 [phi:vera_layer_mode_tile::@10/vera_layer_mode_tile::@11/vera_layer_mode_tile::@12/vera_layer_mode_tile::@8/vera_layer_mode_tile::@9->vera_layer_mode_tile::@13] - __b13_from___b10: - __b13_from___b11: - __b13_from___b12: - __b13_from___b8: - __b13_from___b9: - // [301] phi vera_layer_mode_tile::config#21 = vera_layer_mode_tile::config#6 [phi:vera_layer_mode_tile::@10/vera_layer_mode_tile::@11/vera_layer_mode_tile::@12/vera_layer_mode_tile::@8/vera_layer_mode_tile::@9->vera_layer_mode_tile::@13#0] -- register_copy - jmp __b13 - // vera_layer_mode_tile::@13 - __b13: - // [302] if(vera_layer_mode_tile::mapheight#10==$20) goto vera_layer_mode_tile::@20 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$20 - beq __b20_from___b13 - !: - jmp __b14 - // vera_layer_mode_tile::@14 - __b14: - // [303] if(vera_layer_mode_tile::mapheight#10==$40) goto vera_layer_mode_tile::@17 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$40 - beq __b17 - !: - jmp __b15 - // vera_layer_mode_tile::@15 - __b15: - // [304] if(vera_layer_mode_tile::mapheight#10==$80) goto vera_layer_mode_tile::@18 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$80 - beq __b18 - !: - jmp __b16 - // vera_layer_mode_tile::@16 - __b16: - // [305] if(vera_layer_mode_tile::mapheight#10!=$100) goto vera_layer_mode_tile::@20 -- vwuz1_neq_vwuc1_then_la1 - lda.z mapheight+1 - cmp #>$100 - bne __b20_from___b16 - lda.z mapheight - cmp #<$100 - bne __b20_from___b16 - jmp __b19 - // vera_layer_mode_tile::@19 - __b19: - // [306] vera_layer_mode_tile::config#12 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_256 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_HEIGHT_256 - tax - // [307] phi from vera_layer_mode_tile::@13 vera_layer_mode_tile::@16 vera_layer_mode_tile::@17 vera_layer_mode_tile::@18 vera_layer_mode_tile::@19 to vera_layer_mode_tile::@20 [phi:vera_layer_mode_tile::@13/vera_layer_mode_tile::@16/vera_layer_mode_tile::@17/vera_layer_mode_tile::@18/vera_layer_mode_tile::@19->vera_layer_mode_tile::@20] - __b20_from___b13: - __b20_from___b16: - __b20_from___b17: - __b20_from___b18: - __b20_from___b19: - // [307] phi vera_layer_mode_tile::config#25 = vera_layer_mode_tile::config#21 [phi:vera_layer_mode_tile::@13/vera_layer_mode_tile::@16/vera_layer_mode_tile::@17/vera_layer_mode_tile::@18/vera_layer_mode_tile::@19->vera_layer_mode_tile::@20#0] -- register_copy - jmp __b20 - // vera_layer_mode_tile::@20 - __b20: - // [308] vera_layer_set_config::layer#0 = vera_layer_mode_tile::layer#10 -- vbuaa=vbuz1 - lda.z layer - // [309] vera_layer_set_config::config#0 = vera_layer_mode_tile::config#25 - // [310] call vera_layer_set_config - jsr vera_layer_set_config - jmp __b27 - // vera_layer_mode_tile::@27 - __b27: - // [311] vera_layer_mode_tile::$1 = word0 vera_layer_mode_tile::mapbase_address#10 -- vwuz1=_word0_vduz2 - lda.z mapbase_address_1 - sta.z __1 - lda.z mapbase_address_1+1 - sta.z __1+1 - // [312] vera_layer_mode_tile::$17 = vera_layer_mode_tile::layer#10 << 1 -- vbuz1=vbuz2_rol_1 - lda.z layer - asl - sta.z __17 - // [313] vera_mapbase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$1 -- pwuc1_derefidx_vbuz1=vwuz2 - // mapbase - ldy.z __17 - lda.z __1 - sta vera_mapbase_offset,y - lda.z __1+1 - sta vera_mapbase_offset+1,y - // [314] vera_layer_mode_tile::$2 = byte2 vera_layer_mode_tile::mapbase_address#10 -- vbuaa=_byte2_vduz1 - lda.z mapbase_address_1+2 - // [315] vera_mapbase_bank[vera_layer_mode_tile::layer#10] = vera_layer_mode_tile::$2 -- pbuc1_derefidx_vbuz1=vbuaa - ldy.z layer - sta vera_mapbase_bank,y - // [316] vera_layer_mode_tile::$18 = vera_layer_mode_tile::layer#10 << 2 -- vbuz1=vbuz2_rol_2 - lda.z layer - asl - asl - sta.z __18 - // [317] vera_mapbase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::mapbase_address#10 -- pduc1_derefidx_vbuz1=vduz2 - ldy.z __18 - lda.z mapbase_address_1 - sta vera_mapbase_address,y - lda.z mapbase_address_1+1 - sta vera_mapbase_address+1,y - lda.z mapbase_address_1+2 - sta vera_mapbase_address+2,y - lda.z mapbase_address_1+3 - sta vera_mapbase_address+3,y - // [318] vera_layer_mode_tile::mapbase_address#0 = vera_layer_mode_tile::mapbase_address#10 >> 1 -- vduz1=vduz2_ror_1 - lda.z mapbase_address_1+3 - lsr - sta.z mapbase_address+3 - lda.z mapbase_address_1+2 - ror - sta.z mapbase_address+2 - lda.z mapbase_address_1+1 - ror - sta.z mapbase_address+1 - lda.z mapbase_address_1 - ror - sta.z mapbase_address - // [319] vera_layer_mode_tile::mapbase#0 = byte1 vera_layer_mode_tile::mapbase_address#0 -- vbuxx=_byte1_vduz1 - ldx.z mapbase_address+1 - // [320] vera_layer_set_mapbase::layer#0 = vera_layer_mode_tile::layer#10 -- vbuaa=vbuz1 - lda.z layer - // [321] vera_layer_set_mapbase::mapbase#0 = vera_layer_mode_tile::mapbase#0 - // [322] call vera_layer_set_mapbase - // [229] phi from vera_layer_mode_tile::@27 to vera_layer_set_mapbase [phi:vera_layer_mode_tile::@27->vera_layer_set_mapbase] - vera_layer_set_mapbase_from___b27: - // [229] phi vera_layer_set_mapbase::mapbase#3 = vera_layer_set_mapbase::mapbase#0 [phi:vera_layer_mode_tile::@27->vera_layer_set_mapbase#0] -- register_copy - // [229] phi vera_layer_set_mapbase::layer#3 = vera_layer_set_mapbase::layer#0 [phi:vera_layer_mode_tile::@27->vera_layer_set_mapbase#1] -- register_copy - jsr vera_layer_set_mapbase - jmp __b28 - // vera_layer_mode_tile::@28 - __b28: - // [323] vera_layer_mode_tile::$6 = word0 vera_layer_mode_tile::tilebase_address#10 -- vwuz1=_word0_vduz2 - lda.z tilebase_address_1 - sta.z __6 - lda.z tilebase_address_1+1 - sta.z __6+1 - // [324] vera_tilebase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$6 -- pwuc1_derefidx_vbuz1=vwuz2 - // tilebase - ldy.z __17 - lda.z __6 - sta vera_tilebase_offset,y - lda.z __6+1 - sta vera_tilebase_offset+1,y - // [325] vera_layer_mode_tile::$7 = byte2 vera_layer_mode_tile::tilebase_address#10 -- vbuaa=_byte2_vduz1 - lda.z tilebase_address_1+2 - // [326] vera_tilebase_bank[vera_layer_mode_tile::layer#10] = vera_layer_mode_tile::$7 -- pbuc1_derefidx_vbuz1=vbuaa - ldy.z layer - sta vera_tilebase_bank,y - // [327] vera_tilebase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::tilebase_address#10 -- pduc1_derefidx_vbuz1=vduz2 - ldy.z __18 - lda.z tilebase_address_1 - sta vera_tilebase_address,y - lda.z tilebase_address_1+1 - sta vera_tilebase_address+1,y - lda.z tilebase_address_1+2 - sta vera_tilebase_address+2,y - lda.z tilebase_address_1+3 - sta vera_tilebase_address+3,y - // [328] vera_layer_mode_tile::tilebase_address#0 = vera_layer_mode_tile::tilebase_address#10 >> 1 -- vduz1=vduz2_ror_1 - lda.z tilebase_address_1+3 - lsr - sta.z tilebase_address+3 - lda.z tilebase_address_1+2 - ror - sta.z tilebase_address+2 - lda.z tilebase_address_1+1 - ror - sta.z tilebase_address+1 - lda.z tilebase_address_1 - ror - sta.z tilebase_address - // [329] vera_layer_mode_tile::tilebase#0 = byte1 vera_layer_mode_tile::tilebase_address#0 -- vbuaa=_byte1_vduz1 - lda.z tilebase_address+1 - // [330] vera_layer_mode_tile::tilebase#1 = vera_layer_mode_tile::tilebase#0 & VERA_LAYER_TILEBASE_MASK -- vbuxx=vbuaa_band_vbuc1 - and #VERA_LAYER_TILEBASE_MASK - tax - // [331] if(vera_layer_mode_tile::tilewidth#10==8) goto vera_layer_mode_tile::@23 -- vbuz1_eq_vbuc1_then_la1 - lda #8 - cmp.z tilewidth - beq __b23_from___b28 - jmp __b21 - // vera_layer_mode_tile::@21 - __b21: - // [332] if(vera_layer_mode_tile::tilewidth#10!=$10) goto vera_layer_mode_tile::@23 -- vbuz1_neq_vbuc1_then_la1 - lda #$10 - cmp.z tilewidth - bne __b23_from___b21 - jmp __b22 - // vera_layer_mode_tile::@22 - __b22: - // [333] vera_layer_mode_tile::tilebase#3 = vera_layer_mode_tile::tilebase#1 | VERA_TILEBASE_WIDTH_16 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_TILEBASE_WIDTH_16 - tax - // [334] phi from vera_layer_mode_tile::@21 vera_layer_mode_tile::@22 vera_layer_mode_tile::@28 to vera_layer_mode_tile::@23 [phi:vera_layer_mode_tile::@21/vera_layer_mode_tile::@22/vera_layer_mode_tile::@28->vera_layer_mode_tile::@23] - __b23_from___b21: - __b23_from___b22: - __b23_from___b28: - // [334] phi vera_layer_mode_tile::tilebase#12 = vera_layer_mode_tile::tilebase#1 [phi:vera_layer_mode_tile::@21/vera_layer_mode_tile::@22/vera_layer_mode_tile::@28->vera_layer_mode_tile::@23#0] -- register_copy - jmp __b23 - // vera_layer_mode_tile::@23 - __b23: - // [335] if(vera_layer_mode_tile::tileheight#10==8) goto vera_layer_mode_tile::@26 -- vbuz1_eq_vbuc1_then_la1 - lda #8 - cmp.z tileheight - beq __b26_from___b23 - jmp __b24 - // vera_layer_mode_tile::@24 - __b24: - // [336] if(vera_layer_mode_tile::tileheight#10!=$10) goto vera_layer_mode_tile::@26 -- vbuz1_neq_vbuc1_then_la1 - lda #$10 - cmp.z tileheight - bne __b26_from___b24 - jmp __b25 - // vera_layer_mode_tile::@25 - __b25: - // [337] vera_layer_mode_tile::tilebase#5 = vera_layer_mode_tile::tilebase#12 | VERA_TILEBASE_HEIGHT_16 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_TILEBASE_HEIGHT_16 - tax - // [338] phi from vera_layer_mode_tile::@23 vera_layer_mode_tile::@24 vera_layer_mode_tile::@25 to vera_layer_mode_tile::@26 [phi:vera_layer_mode_tile::@23/vera_layer_mode_tile::@24/vera_layer_mode_tile::@25->vera_layer_mode_tile::@26] - __b26_from___b23: - __b26_from___b24: - __b26_from___b25: - // [338] phi vera_layer_mode_tile::tilebase#10 = vera_layer_mode_tile::tilebase#12 [phi:vera_layer_mode_tile::@23/vera_layer_mode_tile::@24/vera_layer_mode_tile::@25->vera_layer_mode_tile::@26#0] -- register_copy - jmp __b26 - // vera_layer_mode_tile::@26 - __b26: - // [339] vera_layer_set_tilebase::layer#0 = vera_layer_mode_tile::layer#10 -- vbuaa=vbuz1 - lda.z layer - // [340] vera_layer_set_tilebase::tilebase#0 = vera_layer_mode_tile::tilebase#10 - // [341] call vera_layer_set_tilebase - jsr vera_layer_set_tilebase - jmp __breturn - // vera_layer_mode_tile::@return - __breturn: - // [342] return - rts - // vera_layer_mode_tile::@18 - __b18: - // [343] vera_layer_mode_tile::config#11 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_128 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_HEIGHT_128 - tax - jmp __b20_from___b18 - // vera_layer_mode_tile::@17 - __b17: - // [344] vera_layer_mode_tile::config#10 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_64 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_HEIGHT_64 - tax - jmp __b20_from___b17 - // vera_layer_mode_tile::@11 - __b11: - // [345] vera_layer_mode_tile::config#7 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_128 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_WIDTH_128 - tax - // [346] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 8 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #8 - ldy.z layer - sta vera_layer_rowshift,y - // [347] vera_layer_mode_tile::$13 = vera_layer_mode_tile::layer#10 << 1 -- vbuaa=vbuz1_rol_1 - lda.z layer - asl - // [348] vera_layer_rowskip[vera_layer_mode_tile::$13] = $100 -- pwuc1_derefidx_vbuaa=vwuc2 - tay - lda #<$100 - sta vera_layer_rowskip,y - lda #>$100 - sta vera_layer_rowskip+1,y - jmp __b13_from___b11 - // vera_layer_mode_tile::@10 - __b10: - // [349] vera_layer_mode_tile::config#6 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_64 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_WIDTH_64 - tax - // [350] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 7 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #7 - ldy.z layer - sta vera_layer_rowshift,y - // [351] vera_layer_mode_tile::$12 = vera_layer_mode_tile::layer#10 << 1 -- vbuaa=vbuz1_rol_1 - lda.z layer - asl - // [352] vera_layer_rowskip[vera_layer_mode_tile::$12] = $80 -- pwuc1_derefidx_vbuaa=vbuc2 - tay - lda #$80 - sta vera_layer_rowskip,y - lda #0 - sta vera_layer_rowskip+1,y - jmp __b13_from___b10 - // vera_layer_mode_tile::@9 - __b9: - // [353] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 6 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #6 - ldy.z layer - sta vera_layer_rowshift,y - // [354] vera_layer_mode_tile::$11 = vera_layer_mode_tile::layer#10 << 1 -- vbuaa=vbuz1_rol_1 - lda.z layer - asl - // [355] vera_layer_rowskip[vera_layer_mode_tile::$11] = $40 -- pwuc1_derefidx_vbuaa=vbuc2 - tay - lda #$40 - sta vera_layer_rowskip,y - lda #0 - sta vera_layer_rowskip+1,y - jmp __b13_from___b9 -} - // clrscr -// clears the screen and moves the cursor to the upper left-hand corner of the screen. -clrscr: { - .label __1 = $53 - .label line_text = 6 - .label color = $20 - .label l = $a - // [356] clrscr::line_text#0 = (char *)CONIO_SCREEN_TEXT#17 -- pbuz1=pbuz2 - lda.z CONIO_SCREEN_TEXT_1 - sta.z line_text - lda.z CONIO_SCREEN_TEXT_1+1 - sta.z line_text+1 - // [357] vera_layer_get_backcolor::layer#0 = conio_screen_layer -- vbuyy=vbuz1 - ldy.z conio_screen_layer - // [358] call vera_layer_get_backcolor - jsr vera_layer_get_backcolor - // [359] vera_layer_get_backcolor::return#0 = vera_layer_get_backcolor::return#1 - jmp __b7 - // clrscr::@7 - __b7: - // [360] clrscr::$0 = vera_layer_get_backcolor::return#0 - // [361] clrscr::$1 = clrscr::$0 << 4 -- vbuz1=vbuaa_rol_4 - asl - asl - asl - asl - sta.z __1 - // [362] vera_layer_get_textcolor::layer#0 = conio_screen_layer -- vbuyy=vbuz1 - ldy.z conio_screen_layer - // [363] call vera_layer_get_textcolor - jsr vera_layer_get_textcolor - // [364] vera_layer_get_textcolor::return#0 = vera_layer_get_textcolor::return#1 - jmp __b8 - // clrscr::@8 - __b8: - // [365] clrscr::$2 = vera_layer_get_textcolor::return#0 - // [366] clrscr::color#0 = clrscr::$1 | clrscr::$2 -- vbuz1=vbuz2_bor_vbuaa - ora.z __1 - sta.z color - // [367] phi from clrscr::@8 to clrscr::@1 [phi:clrscr::@8->clrscr::@1] - __b1_from___b8: - // [367] phi clrscr::line_text#2 = clrscr::line_text#0 [phi:clrscr::@8->clrscr::@1#0] -- register_copy - // [367] phi clrscr::l#2 = 0 [phi:clrscr::@8->clrscr::@1#1] -- vbuz1=vbuc1 - lda #0 - sta.z l - jmp __b1 - // clrscr::@1 - __b1: - // [368] if(clrscr::l#2clrscr::@4] - __b4_from___b2: - // [381] phi clrscr::c#2 = 0 [phi:clrscr::@2->clrscr::@4#0] -- vbuyy=vbuc1 - ldy #0 - jmp __b4 - // clrscr::@4 - __b4: - // [382] if(clrscr::c#2clrscr::@1] - __b1_from___b6: - // [367] phi clrscr::line_text#2 = clrscr::line_text#1 [phi:clrscr::@6->clrscr::@1#0] -- register_copy - // [367] phi clrscr::l#2 = clrscr::l#1 [phi:clrscr::@6->clrscr::@1#1] -- register_copy - jmp __b1 - // clrscr::@5 - __b5: - // [385] *VERA_DATA0 = ' ' -- _deref_pbuc1=vbuc2 - lda #' ' - sta VERA_DATA0 - // [386] *VERA_DATA0 = clrscr::color#0 -- _deref_pbuc1=vbuz1 - lda.z color - sta VERA_DATA0 - // [387] clrscr::c#1 = ++ clrscr::c#2 -- vbuyy=_inc_vbuyy - iny - // [381] phi from clrscr::@5 to clrscr::@4 [phi:clrscr::@5->clrscr::@4] - __b4_from___b5: - // [381] phi clrscr::c#2 = clrscr::c#1 [phi:clrscr::@5->clrscr::@4#0] -- register_copy - jmp __b4 -} - // memcpy_to_vram -// Copy block of memory (from RAM to VRAM) -// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination in VRAM. -// - vbank: Which 64K VRAM bank to put data into (0/1) -// - vdest: The destination address in VRAM -// - src: The source address in RAM -// - num: The number of bytes to copy -// void memcpy_to_vram(char vbank, __zp(8) void *vdest, void *src, unsigned int num) -memcpy_to_vram: { - // Transfer the data - .label end = main.tiles+$100 - .label s = 4 - .label vdest = 8 - // [389] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // [390] memcpy_to_vram::$0 = byte0 memcpy_to_vram::vdest#2 -- vbuaa=_byte0_pvoz1 - lda.z vdest - // [391] *VERA_ADDRX_L = memcpy_to_vram::$0 -- _deref_pbuc1=vbuaa - // Set address - sta VERA_ADDRX_L - // [392] memcpy_to_vram::$1 = byte1 memcpy_to_vram::vdest#2 -- vbuaa=_byte1_pvoz1 - lda.z vdest+1 - // [393] *VERA_ADDRX_M = memcpy_to_vram::$1 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // [394] *VERA_ADDRX_H = VERA_INC_1 -- _deref_pbuc1=vbuc2 - lda #VERA_INC_1 - sta VERA_ADDRX_H - // [395] phi from memcpy_to_vram to memcpy_to_vram::@1 [phi:memcpy_to_vram->memcpy_to_vram::@1] - __b1_from_memcpy_to_vram: - // [395] phi memcpy_to_vram::s#2 = (char *)(void *)main::tiles [phi:memcpy_to_vram->memcpy_to_vram::@1#0] -- pbuz1=pbuc1 - lda #main.tiles - sta.z s+1 - jmp __b1 - // memcpy_to_vram::@1 - __b1: - // [396] if(memcpy_to_vram::s#2!=memcpy_to_vram::end#0) goto memcpy_to_vram::@2 -- pbuz1_neq_pbuc1_then_la1 - lda.z s+1 - cmp #>end - bne __b2 - lda.z s - cmp #memcpy_to_vram::@1] - __b1_from___b2: - // [395] phi memcpy_to_vram::s#2 = memcpy_to_vram::s#1 [phi:memcpy_to_vram::@2->memcpy_to_vram::@1#0] -- register_copy - jmp __b1 -} - // vera_tile_area -// --- TILE FUNCTIONS --- -// void vera_tile_area(char layer, __zp($24) unsigned int tileindex, __zp($29) char x, __zp($a) char y, __zp($e) char w, __zp($20) char h, __zp($28) char hflip, __zp($1b) char vflip, char offset) -vera_tile_area: { - .label __4 = 8 - .label __10 = 8 - .label mapbase = $14 - .label shift = $2a - .label rowskip = $1e - .label hflip = $28 - .label vflip = $1b - .label index_l = $1c - .label index_h = $1b - .label r = $b - .label tileindex = $24 - .label x = $29 - .label y = $a - .label h = $20 - .label w = $e - // [401] vera_tile_area::mapbase#0 = *vera_mapbase_address -- vduz1=_deref_pduc1 - lda vera_mapbase_address - sta.z mapbase - lda vera_mapbase_address+1 - sta.z mapbase+1 - lda vera_mapbase_address+2 - sta.z mapbase+2 - lda vera_mapbase_address+3 - sta.z mapbase+3 - // [402] vera_tile_area::shift#0 = *vera_layer_rowshift -- vbuz1=_deref_pbuc1 - lda vera_layer_rowshift - sta.z shift - // [403] vera_tile_area::rowskip#0 = 1 << vera_tile_area::shift#0 -- vwuz1=vwuc1_rol_vbuz2 - ldy.z shift - lda #<1 - sta.z rowskip - lda #>1+1 - sta.z rowskip+1 - cpy #0 - beq !e+ - !: - asl.z rowskip - rol.z rowskip+1 - dey - bne !- - !e: - // [404] vera_tile_area::hflip#0 = *vera_layer_hflip -- vbuz1=_deref_pbuc1 - lda vera_layer_hflip - sta.z hflip - // [405] vera_tile_area::vflip#0 = *vera_layer_vflip -- vbuz1=_deref_pbuc1 - lda vera_layer_vflip - sta.z vflip - // [406] vera_tile_area::index_l#0 = byte0 vera_tile_area::tileindex#5 -- vbuz1=_byte0_vwuz2 - lda.z tileindex - sta.z index_l - // [407] vera_tile_area::index_h#0 = byte1 vera_tile_area::tileindex#5 -- vbuaa=_byte1_vwuz1 - lda.z tileindex+1 - // [408] vera_tile_area::index_h#1 = vera_tile_area::index_h#0 | vera_tile_area::hflip#0 -- vbuaa=vbuaa_bor_vbuz1 - ora.z hflip - // [409] vera_tile_area::index_h#2 = vera_tile_area::index_h#1 | vera_tile_area::vflip#0 -- vbuz1=vbuaa_bor_vbuz1 - ora.z index_h - sta.z index_h - // [410] vera_tile_area::$10 = (unsigned int)vera_tile_area::y#5 -- vwuz1=_word_vbuz2 - lda.z y - sta.z __10 - lda #0 - sta.z __10+1 - // [411] vera_tile_area::$4 = vera_tile_area::$10 << vera_tile_area::shift#0 -- vwuz1=vwuz1_rol_vbuz2 - ldy.z shift - beq !e+ - !: - asl.z __4 - rol.z __4+1 - dey - bne !- - !e: - // [412] vera_tile_area::mapbase#1 = vera_tile_area::mapbase#0 + vera_tile_area::$4 -- vduz1=vduz1_plus_vwuz2 - lda.z mapbase - clc - adc.z __4 - sta.z mapbase - lda.z mapbase+1 - adc.z __4+1 - sta.z mapbase+1 - lda.z mapbase+2 - adc #0 - sta.z mapbase+2 - lda.z mapbase+3 - adc #0 - sta.z mapbase+3 - // [413] vera_tile_area::$5 = vera_tile_area::x#5 << 1 -- vbuaa=vbuz1_rol_1 - lda.z x - asl - // [414] vera_tile_area::mapbase#2 = vera_tile_area::mapbase#1 + vera_tile_area::$5 -- vduz1=vduz1_plus_vbuaa - clc - adc.z mapbase - sta.z mapbase - lda.z mapbase+1 - adc #0 - sta.z mapbase+1 - lda.z mapbase+2 - adc #0 - sta.z mapbase+2 - lda.z mapbase+3 - adc #0 - sta.z mapbase+3 - // [415] phi from vera_tile_area to vera_tile_area::@1 [phi:vera_tile_area->vera_tile_area::@1] - __b1_from_vera_tile_area: - // [415] phi vera_tile_area::mapbase#10 = vera_tile_area::mapbase#2 [phi:vera_tile_area->vera_tile_area::@1#0] -- register_copy - // [415] phi vera_tile_area::r#2 = 0 [phi:vera_tile_area->vera_tile_area::@1#1] -- vbuz1=vbuc1 - lda #0 - sta.z r - jmp __b1 - // vera_tile_area::@1 - __b1: - // [416] if(vera_tile_area::r#2vera_tile_area::@2] - __b2_from_vera_vram_address01: - // [426] phi vera_tile_area::c#2 = 0 [phi:vera_tile_area::vera_vram_address01->vera_tile_area::@2#0] -- vbuyy=vbuc1 - ldy #0 - jmp __b2 - // vera_tile_area::@2 - __b2: - // [427] if(vera_tile_area::c#2vera_tile_area::@1] - __b1_from___b4: - // [415] phi vera_tile_area::mapbase#10 = vera_tile_area::mapbase#3 [phi:vera_tile_area::@4->vera_tile_area::@1#0] -- register_copy - // [415] phi vera_tile_area::r#2 = vera_tile_area::r#1 [phi:vera_tile_area::@4->vera_tile_area::@1#1] -- register_copy - jmp __b1 - // vera_tile_area::@3 - __b3: - // [430] *VERA_DATA0 = vera_tile_area::index_l#0 -- _deref_pbuc1=vbuz1 - lda.z index_l - sta VERA_DATA0 - // [431] *VERA_DATA0 = vera_tile_area::index_h#2 -- _deref_pbuc1=vbuz1 - lda.z index_h - sta VERA_DATA0 - // [432] vera_tile_area::c#1 = ++ vera_tile_area::c#2 -- vbuyy=_inc_vbuyy - iny - // [426] phi from vera_tile_area::@3 to vera_tile_area::@2 [phi:vera_tile_area::@3->vera_tile_area::@2] - __b2_from___b3: - // [426] phi vera_tile_area::c#2 = vera_tile_area::c#1 [phi:vera_tile_area::@3->vera_tile_area::@2#0] -- register_copy - jmp __b2 -} - // printf_str -/// Print a NUL-terminated string -// void printf_str(void (*putc)(char), __zp($1e) const char *s) -printf_str: { - .label s = $1e - // [434] phi from printf_str printf_str::@2 to printf_str::@1 [phi:printf_str/printf_str::@2->printf_str::@1] - __b1_from_printf_str: - __b1_from___b2: - // [434] phi printf_str::s#9 = printf_str::s#10 [phi:printf_str/printf_str::@2->printf_str::@1#0] -- register_copy - jmp __b1 - // printf_str::@1 - __b1: - // [435] printf_str::c#1 = *printf_str::s#9 -- vbuaa=_deref_pbuz1 - ldy #0 - lda (s),y - // [436] printf_str::s#0 = ++ printf_str::s#9 -- pbuz1=_inc_pbuz1 - inc.z s - bne !+ - inc.z s+1 - !: - // [437] if(0!=printf_str::c#1) goto printf_str::@2 -- 0_neq_vbuaa_then_la1 - cmp #0 - bne __b2 - jmp __breturn - // printf_str::@return - __breturn: - // [438] return - rts - // printf_str::@2 - __b2: - // [439] stackpush(char) = printf_str::c#1 -- _stackpushbyte_=vbuaa - pha - // [440] callexecute cputc -- call_vprc1 - jsr cputc - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - jmp __b1_from___b2 -} - // kbhit -// Return true if there's a key waiting, return false if not -kbhit: { - .label chptr = ch - .label IN_DEV = $28a - // Current input device number - .label GETIN = $ffe4 - .label ch = $38 - // [442] kbhit::ch = 0 -- vbuz1=vbuc1 - lda #0 - sta.z ch - // kickasm( uses kbhit::chptr uses kbhit::IN_DEV uses kbhit::GETIN) {{ jsr _kbhit bne L3 jmp continue1 .var via1 = $9f60 //VIA#1 .var d1pra = via1+1 _kbhit: ldy d1pra // The count of keys pressed is stored in RAM bank 0. stz d1pra // Set d1pra to zero to access RAM bank 0. lda $A00A // Get number of characters from this address in the ROM of the CX16 (ROM 38). sty d1pra // Set d1pra to previous value. rts L3: ldy IN_DEV // Save current input device stz IN_DEV // Keyboard phy jsr GETIN // Read char, and return in .A ply sta chptr // Store the character read in ch sty IN_DEV // Restore input device ldx #>$0000 rts continue1: nop }} - // CBM GETIN API - jsr _kbhit - bne L3 - - jmp continue1 - - .var via1 = $9f60 //VIA#1 - .var d1pra = via1+1 - - _kbhit: - ldy d1pra // The count of keys pressed is stored in RAM bank 0. - stz d1pra // Set d1pra to zero to access RAM bank 0. - lda $A00A // Get number of characters from this address in the ROM of the CX16 (ROM 38). - sty d1pra // Set d1pra to previous value. - rts - - L3: - ldy IN_DEV // Save current input device - stz IN_DEV // Keyboard - phy - jsr GETIN // Read char, and return in .A - ply - sta chptr // Store the character read in ch - sty IN_DEV // Restore input device - ldx #>$0000 - rts - - continue1: - nop - - // [444] kbhit::return#0 = kbhit::ch -- vbuaa=vbuz1 - lda.z ch - jmp __breturn - // kbhit::@return - __breturn: - // [445] kbhit::return#1 = kbhit::return#0 - // [446] return - rts -} - // vera_layer_set_text_color_mode -// Set the configuration of the layer text color mode. -// - layer: Value of 0 or 1. -// - color_mode: Specifies the color mode to be VERA_LAYER_CONFIG_16 or VERA_LAYER_CONFIG_256 for text mode. -// void vera_layer_set_text_color_mode(char layer, char color_mode) -vera_layer_set_text_color_mode: { - .label addr = $22 - // [447] vera_layer_set_text_color_mode::addr#0 = *(vera_layer_config+vera_layer_mode_text::layer#0*SIZEOF_POINTER) -- pbuz1=_deref_qbuc1 - lda vera_layer_config+vera_layer_mode_text.layer*SIZEOF_POINTER - sta.z addr - lda vera_layer_config+vera_layer_mode_text.layer*SIZEOF_POINTER+1 - sta.z addr+1 - // [448] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 & ~VERA_LAYER_CONFIG_256C -- _deref_pbuz1=_deref_pbuz1_band_vbuc1 - lda #VERA_LAYER_CONFIG_256C^$ff - ldy #0 - and (addr),y - ldy #0 - sta (addr),y - // [449] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 -- _deref_pbuz1=_deref_pbuz1 - ldy #0 - lda (addr),y - ldy #0 - sta (addr),y - jmp __breturn - // vera_layer_set_text_color_mode::@return - __breturn: - // [450] return - rts -} - // vera_layer_get_mapbase_bank -// Get the map base bank of the tiles for the layer. -// - layer: Value of 0 or 1. -// - return: Bank in vera vram. -// __register(X) char vera_layer_get_mapbase_bank(__register(Y) char layer) -vera_layer_get_mapbase_bank: { - // [451] vera_layer_get_mapbase_bank::return#0 = vera_mapbase_bank[vera_layer_get_mapbase_bank::layer#0] -- vbuxx=pbuc1_derefidx_vbuyy - ldx vera_mapbase_bank,y - jmp __breturn - // vera_layer_get_mapbase_bank::@return - __breturn: - // [452] return - rts -} - // vera_layer_get_mapbase_offset -// Get the map base lower 16-bit address (offset) of the tiles for the layer. -// - layer: Value of 0 or 1. -// - return: Offset in vera vram of the specified bank. -// __zp($10) unsigned int vera_layer_get_mapbase_offset(__register(A) char layer) -vera_layer_get_mapbase_offset: { - .label return = $10 - // [453] vera_layer_get_mapbase_offset::$0 = vera_layer_get_mapbase_offset::layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [454] vera_layer_get_mapbase_offset::return#0 = vera_mapbase_offset[vera_layer_get_mapbase_offset::$0] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda vera_mapbase_offset,y - sta.z return - lda vera_mapbase_offset+1,y - sta.z return+1 - jmp __breturn - // vera_layer_get_mapbase_offset::@return - __breturn: - // [455] return - rts -} - // vera_layer_get_rowshift -// Get the bit shift value required to skip a whole line fast. -// - layer: Value of 0 or 1. -// - return: Rowshift value to calculate fast from a y value to line offset in tile mode. -// __register(A) char vera_layer_get_rowshift(__register(Y) char layer) -vera_layer_get_rowshift: { - // [456] vera_layer_get_rowshift::return#0 = vera_layer_rowshift[vera_layer_get_rowshift::layer#0] -- vbuaa=pbuc1_derefidx_vbuyy - lda vera_layer_rowshift,y - jmp __breturn - // vera_layer_get_rowshift::@return - __breturn: - // [457] return - rts -} - // vera_layer_get_rowskip -// Get the value required to skip a whole line fast. -// - layer: Value of 0 or 1. -// - return: Skip value to calculate fast from a y value to line offset in tile mode. -// __zp($35) unsigned int vera_layer_get_rowskip(__register(A) char layer) -vera_layer_get_rowskip: { - .label return = $35 - // [458] vera_layer_get_rowskip::$0 = vera_layer_get_rowskip::layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [459] vera_layer_get_rowskip::return#0 = vera_layer_rowskip[vera_layer_get_rowskip::$0] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda vera_layer_rowskip,y - sta.z return - lda vera_layer_rowskip+1,y - sta.z return+1 - jmp __breturn - // vera_layer_get_rowskip::@return - __breturn: - // [460] return - rts -} - // cscroll -// Scroll the entire screen if the cursor is beyond the last line -cscroll: { - // [461] if(conio_cursor_y[conio_screen_layer]cscroll::@3] - __b3_from___b2: - jmp __b3 - // cscroll::@3 - __b3: - jmp __breturn - // cscroll::@return - __breturn: - // [465] return - rts - // [466] phi from cscroll::@1 to cscroll::@4 [phi:cscroll::@1->cscroll::@4] - __b4_from___b1: - jmp __b4 - // cscroll::@4 - __b4: - // [467] call insertup - jsr insertup - jmp __b5 - // cscroll::@5 - __b5: - // [468] gotoxy::y#2 = conio_screen_height - 1 -- vbuxx=vbuz1_minus_1 - ldx.z conio_screen_height - dex - // [469] call gotoxy - // [234] phi from cscroll::@5 to gotoxy [phi:cscroll::@5->gotoxy] - gotoxy_from___b5: - // [234] phi gotoxy::y#4 = gotoxy::y#2 [phi:cscroll::@5->gotoxy#0] -- register_copy - jsr gotoxy - jmp __breturn -} - // vera_layer_set_config -// Set the configuration of the layer. -// - layer: Value of 0 or 1. -// - config: Specifies the modes which are specified using T256C / 'Bitmap Mode' / 'Color Depth'. -// void vera_layer_set_config(__register(A) char layer, __register(X) char config) -vera_layer_set_config: { - .label addr = $22 - // [470] vera_layer_set_config::$0 = vera_layer_set_config::layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [471] vera_layer_set_config::addr#0 = vera_layer_config[vera_layer_set_config::$0] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_config,y - sta.z addr - lda vera_layer_config+1,y - sta.z addr+1 - // [472] *vera_layer_set_config::addr#0 = vera_layer_set_config::config#0 -- _deref_pbuz1=vbuxx - txa - ldy #0 - sta (addr),y - jmp __breturn - // vera_layer_set_config::@return - __breturn: - // [473] return - rts -} - // vera_layer_set_tilebase -// Set the base of the tiles for the layer with which the conio will interact. -// - layer: Value of 0 or 1. -// - tilebase: Specifies the base address of the tile map. -// Note that the register only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// void vera_layer_set_tilebase(__register(A) char layer, __register(X) char tilebase) -vera_layer_set_tilebase: { - .label addr = $22 - // [474] vera_layer_set_tilebase::$0 = vera_layer_set_tilebase::layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [475] vera_layer_set_tilebase::addr#0 = vera_layer_tilebase[vera_layer_set_tilebase::$0] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_tilebase,y - sta.z addr - lda vera_layer_tilebase+1,y - sta.z addr+1 - // [476] *vera_layer_set_tilebase::addr#0 = vera_layer_set_tilebase::tilebase#0 -- _deref_pbuz1=vbuxx - txa - ldy #0 - sta (addr),y - jmp __breturn - // vera_layer_set_tilebase::@return - __breturn: - // [477] return - rts -} - // vera_layer_get_backcolor -// Get the back color for text output. The old back text color setting is returned. -// - layer: Value of 0 or 1. -// - return: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_backcolor(__register(Y) char layer) -vera_layer_get_backcolor: { - // [478] vera_layer_get_backcolor::return#1 = vera_layer_backcolor[vera_layer_get_backcolor::layer#0] -- vbuaa=pbuc1_derefidx_vbuyy - lda vera_layer_backcolor,y - jmp __breturn - // vera_layer_get_backcolor::@return - __breturn: - // [479] return - rts -} - // vera_layer_get_textcolor -// Get the front color for text output. The old front text color setting is returned. -// - layer: Value of 0 or 1. -// - return: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_textcolor(__register(Y) char layer) -vera_layer_get_textcolor: { - // [480] vera_layer_get_textcolor::return#1 = vera_layer_textcolor[vera_layer_get_textcolor::layer#0] -- vbuaa=pbuc1_derefidx_vbuyy - lda vera_layer_textcolor,y - jmp __breturn - // vera_layer_get_textcolor::@return - __breturn: - // [481] return - rts -} - // insertup -// Insert a new line, and scroll the upper part of the screen up. -insertup: { - .label cy = $e - .label width = $b - .label line = 8 - .label start = 8 - // [482] insertup::cy#0 = conio_cursor_y[conio_screen_layer] -- vbuz1=pbuc1_derefidx_vbuz2 - ldy.z conio_screen_layer - lda conio_cursor_y,y - sta.z cy - // [483] insertup::width#0 = conio_screen_width << 1 -- vbuz1=vbuz2_rol_1 - lda.z conio_screen_width - asl - sta.z width - // [484] phi from insertup to insertup::@1 [phi:insertup->insertup::@1] - __b1_from_insertup: - // [484] phi insertup::i#2 = 1 [phi:insertup->insertup::@1#0] -- vbuxx=vbuc1 - ldx #1 - jmp __b1 - // insertup::@1 - __b1: - // [485] if(insertup::i#2<=insertup::cy#0) goto insertup::@2 -- vbuxx_le_vbuz1_then_la1 - lda.z cy - stx.z $ff - cmp.z $ff - bcs __b2 - // [486] phi from insertup::@1 to insertup::@3 [phi:insertup::@1->insertup::@3] - __b3_from___b1: - jmp __b3 - // insertup::@3 - __b3: - // [487] call clearline - jsr clearline - jmp __breturn - // insertup::@return - __breturn: - // [488] return - rts - // insertup::@2 - __b2: - // [489] insertup::$3 = insertup::i#2 - 1 -- vbuaa=vbuxx_minus_1 - txa - sec - sbc #1 - // [490] insertup::line#0 = insertup::$3 << conio_rowshift -- vwuz1=vbuaa_rol_vbuz2 - ldy.z conio_rowshift - sta.z line - lda #0 - sta.z line+1 - cpy #0 - beq !e+ - !: - asl.z line - rol.z line+1 - dey - bne !- - !e: - // [491] insertup::start#0 = CONIO_SCREEN_TEXT#12 + insertup::line#0 -- pbuz1=pbuz2_plus_vwuz1 - clc - lda.z start - adc.z CONIO_SCREEN_TEXT - sta.z start - lda.z start+1 - adc.z CONIO_SCREEN_TEXT+1 - sta.z start+1 - // [492] memcpy_in_vram::src#0 = insertup::start#0 + conio_rowskip -- pbuz1=pbuz2_plus_vwuz3 - lda.z start - clc - adc.z conio_rowskip - sta.z memcpy_in_vram.src - lda.z start+1 - adc.z conio_rowskip+1 - sta.z memcpy_in_vram.src+1 - // [493] memcpy_in_vram::dest#0 = (void *)insertup::start#0 - // [494] memcpy_in_vram::num#0 = insertup::width#0 -- vwuz1=vbuz2 - lda.z width - sta.z memcpy_in_vram.num - lda #0 - sta.z memcpy_in_vram.num+1 - // [495] memcpy_in_vram::src#4 = (void *)memcpy_in_vram::src#0 - // [496] call memcpy_in_vram - // [266] phi from insertup::@2 to memcpy_in_vram [phi:insertup::@2->memcpy_in_vram] - memcpy_in_vram_from___b2: - // [266] phi memcpy_in_vram::num#4 = memcpy_in_vram::num#0 [phi:insertup::@2->memcpy_in_vram#0] -- register_copy - // [266] phi memcpy_in_vram::dest_bank#3 = 0 [phi:insertup::@2->memcpy_in_vram#1] -- vbuz1=vbuc1 - lda #0 - sta.z memcpy_in_vram.dest_bank - // [266] phi memcpy_in_vram::dest#3 = memcpy_in_vram::dest#0 [phi:insertup::@2->memcpy_in_vram#2] -- register_copy - // [266] phi memcpy_in_vram::src_bank#3 = 0 [phi:insertup::@2->memcpy_in_vram#3] -- vbuyy=vbuc1 - ldy #0 - // [266] phi memcpy_in_vram::src#3 = memcpy_in_vram::src#4 [phi:insertup::@2->memcpy_in_vram#4] -- register_copy - jsr memcpy_in_vram - jmp __b4 - // insertup::@4 - __b4: - // [497] insertup::i#1 = ++ insertup::i#2 -- vbuxx=_inc_vbuxx - inx - // [484] phi from insertup::@4 to insertup::@1 [phi:insertup::@4->insertup::@1] - __b1_from___b4: - // [484] phi insertup::i#2 = insertup::i#1 [phi:insertup::@4->insertup::@1#0] -- register_copy - jmp __b1 -} - // clearline -clearline: { - .label addr = $c - .label c = 2 - // [498] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // [499] clearline::$5 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [500] clearline::addr#0 = CONIO_SCREEN_TEXT#12 + conio_line_text[clearline::$5] -- pbuz1=pbuz2_plus_pwuc1_derefidx_vbuaa - // Set address - tay - clc - lda.z CONIO_SCREEN_TEXT - adc conio_line_text,y - sta.z addr - lda.z CONIO_SCREEN_TEXT+1 - adc conio_line_text+1,y - sta.z addr+1 - // [501] clearline::$1 = byte0 clearline::addr#0 -- vbuaa=_byte0_pbuz1 - lda.z addr - // [502] *VERA_ADDRX_L = clearline::$1 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_L - // [503] clearline::$2 = byte1 clearline::addr#0 -- vbuaa=_byte1_pbuz1 - lda.z addr+1 - // [504] *VERA_ADDRX_M = clearline::$2 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // [505] *VERA_ADDRX_H = VERA_INC_1 -- _deref_pbuc1=vbuc2 - lda #VERA_INC_1 - sta VERA_ADDRX_H - // [506] vera_layer_get_color::layer#1 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [507] call vera_layer_get_color - // [247] phi from clearline to vera_layer_get_color [phi:clearline->vera_layer_get_color] - vera_layer_get_color_from_clearline: - // [247] phi vera_layer_get_color::layer#2 = vera_layer_get_color::layer#1 [phi:clearline->vera_layer_get_color#0] -- register_copy - jsr vera_layer_get_color - // [508] vera_layer_get_color::return#4 = vera_layer_get_color::return#3 - jmp __b4 - // clearline::@4 - __b4: - // [509] clearline::color#0 = vera_layer_get_color::return#4 -- vbuxx=vbuaa - tax - // [510] phi from clearline::@4 to clearline::@1 [phi:clearline::@4->clearline::@1] - __b1_from___b4: - // [510] phi clearline::c#2 = 0 [phi:clearline::@4->clearline::@1#0] -- vwuz1=vwuc1 - lda #<0 - sta.z c - lda #>0 - sta.z c+1 - jmp __b1 - // clearline::@1 - __b1: - // [511] if(clearline::c#2clearline::@1] - __b1_from___b2: - // [510] phi clearline::c#2 = clearline::c#1 [phi:clearline::@2->clearline::@1#0] -- register_copy - jmp __b1 -} - // File Data -.segment Data - VERA_LAYER_WIDTH: .word $20, $40, $80, $100 - VERA_LAYER_HEIGHT: .word $20, $40, $80, $100 - /// --- VERA function encapsulation --- - vera_mapbase_offset: .word 0, 0 - vera_mapbase_bank: .byte 0, 0 - vera_mapbase_address: .dword 0, 0 - vera_tilebase_offset: .word 0, 0 - vera_tilebase_bank: .byte 0, 0 - vera_tilebase_address: .dword 0, 0 - vera_layer_rowshift: .byte 0, 0 - vera_layer_rowskip: .word 0, 0 - vera_layer_hflip: .byte 0, 4 - vera_layer_vflip: .byte 0, 8 - vera_layer_config: .word VERA_L0_CONFIG, VERA_L1_CONFIG - vera_layer_enable: .byte VERA_LAYER0_ENABLE, VERA_LAYER1_ENABLE - vera_layer_mapbase: .word VERA_L0_MAPBASE, VERA_L1_MAPBASE - vera_layer_tilebase: .word VERA_L0_TILEBASE, VERA_L1_TILEBASE - vera_layer_textcolor: .byte WHITE, WHITE - vera_layer_backcolor: .byte BLUE, BLUE - // The number of bytes on the screen - // The current cursor x-position - conio_cursor_x: .byte 0, 0 - // The current cursor y-position - conio_cursor_y: .byte 0, 0 - // The current text cursor line start - conio_line_text: .word 0, 0 - // Is scrolling enabled when outputting beyond the end of the screen (1: yes, 0: no). - // If disabled the cursor just moves back to (0,0) instead - conio_scroll_enable: .byte 1, 1 - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __init1 -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b3 -Removing instruction jmp __b4 -Removing instruction jmp __b5 -Removing instruction jmp __b6 -Removing instruction jmp __b7 -Removing instruction jmp __b8 -Removing instruction jmp __b9 -Removing instruction jmp __b2 -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b7 -Removing instruction jmp __b2 -Removing instruction jmp __b3 -Removing instruction jmp __b4 -Removing instruction jmp __breturn -Removing instruction jmp __b6 -Removing instruction jmp __b1 -Removing instruction jmp __b19 -Removing instruction jmp __b20 -Removing instruction jmp textcolor1 -Removing instruction jmp bgcolor1 -Removing instruction jmp __b16 -Removing instruction jmp __b21 -Removing instruction jmp __b22 -Removing instruction jmp __b1 -Removing instruction jmp __b2 -Removing instruction jmp __b3 -Removing instruction jmp __b23 -Removing instruction jmp __b4 -Removing instruction jmp __b5 -Removing instruction jmp __b6 -Removing instruction jmp __b24 -Removing instruction jmp __b7 -Removing instruction jmp __b8 -Removing instruction jmp __b25 -Removing instruction jmp __b26 -Removing instruction jmp __b27 -Removing instruction jmp __b28 -Removing instruction jmp __b29 -Removing instruction jmp __b30 -Removing instruction jmp __b31 -Removing instruction jmp __b32 -Removing instruction jmp vera_layer_show1 -Removing instruction jmp __b9 -Removing instruction jmp __b33 -Removing instruction jmp __b10 -Removing instruction jmp __b11 -Removing instruction jmp __b12 -Removing instruction jmp __b34 -Removing instruction jmp __b13 -Removing instruction jmp __b14 -Removing instruction jmp __b35 -Removing instruction jmp __b15 -Removing instruction jmp vera_layer_hide1 -Removing instruction jmp __b17 -Removing instruction jmp __b36 -Removing instruction jmp __b37 -Removing instruction jmp __b38 -Removing instruction jmp textcolor2 -Removing instruction jmp bgcolor2 -Removing instruction jmp __b18 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b3 -Removing instruction jmp __b4 -Removing instruction jmp vera_layer_get_width1 -Removing instruction jmp vera_layer_get_width1___breturn -Removing instruction jmp __b1 -Removing instruction jmp __b5 -Removing instruction jmp __b6 -Removing instruction jmp vera_layer_get_height1 -Removing instruction jmp vera_layer_get_height1___breturn -Removing instruction jmp __b2 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b4 -Removing instruction jmp __b1 -Removing instruction jmp __b3 -Removing instruction jmp __b2 -Removing instruction jmp __breturn -Removing instruction jmp __b2 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __b2 -Removing instruction jmp __b3 -Removing instruction jmp __b4 -Removing instruction jmp __b5 -Removing instruction jmp __b6 -Removing instruction jmp __b7 -Removing instruction jmp __b8 -Removing instruction jmp __b12 -Removing instruction jmp __b13 -Removing instruction jmp __b14 -Removing instruction jmp __b15 -Removing instruction jmp __b16 -Removing instruction jmp __b19 -Removing instruction jmp __b20 -Removing instruction jmp __b27 -Removing instruction jmp __b28 -Removing instruction jmp __b21 -Removing instruction jmp __b22 -Removing instruction jmp __b23 -Removing instruction jmp __b24 -Removing instruction jmp __b25 -Removing instruction jmp __b26 -Removing instruction jmp __breturn -Removing instruction jmp __b7 -Removing instruction jmp __b8 -Removing instruction jmp __b1 -Removing instruction jmp __b3 -Removing instruction jmp __breturn -Removing instruction jmp __b4 -Removing instruction jmp __b6 -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b2 -Removing instruction jmp __b4 -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __b2 -Removing instruction jmp __b3 -Removing instruction jmp __breturn -Removing instruction jmp __b4 -Removing instruction jmp __b5 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __b3 -Removing instruction jmp __breturn -Removing instruction jmp __b4 -Removing instruction jmp __b4 -Removing instruction jmp __b1 -Removing instruction jmp __b3 -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction lda #0 -Removing instruction lda #>0 -Removing instruction lda #<0 -Removing instruction lda #>0 -Removing instruction lda #0 -Removing instruction lda #<0 -Removing instruction lda #>0 -Removing instruction lda.z __16+1 -Removing instruction lda #8 -Removing instruction lda #$10 -Removing instruction lda #0 -Removing instruction lda #>0 -Removing instruction lda #0 -Removing instruction lda #<0 -Removing instruction lda #>0 -Removing instruction lda #>0 -Replacing instruction ldx #0 with TAX -Removing instruction lda #1 -Removing instruction lda #0 -Removing instruction lda #<0 -Removing instruction lda #>0 -Removing instruction lda #0 -Removing instruction lda #<0 -Removing instruction lda #>0 -Replacing instruction lda #0 with TXA -Removing instruction lda #2 -Removing instruction lda #0 -Removing instruction lda #<0 -Removing instruction lda #>0 -Removing instruction lda #8 -Removing instruction lda #0 -Removing instruction lda #8 -Removing instruction lda #0 -Replacing instruction ldy.z conio_screen_layer with TAY -Removing instruction ldy.z conio_screen_layer -Removing instruction lda #>0 -Replacing instruction lda.z layer with TYA -Replacing instruction ldy.z __17 with TAY -Replacing instruction lda.z layer with TYA -Replacing instruction ldy.z __18 with TAY -Removing instruction lda.z mapbase_address_1+3 -Removing instruction lda.z tilebase_address_1+3 -Replacing instruction lda.z layer with TYA -Replacing instruction lda.z layer with TYA -Replacing instruction lda.z layer with TYA -Removing instruction lda #0 -Removing instruction ldy.z conio_screen_layer -Replacing instruction lda.z conio_screen_layer with TYA -Removing instruction lda #0 -Replacing instruction ldy.z shift with TAY -Removing instruction ldy #0 -Removing instruction ldy #0 -Removing instruction ldy #0 -Replacing instruction ldy #0 with TAY -Removing instruction lda #>0 -Succesful ASM optimization Pass5UnnecesaryLoadElimination -Replacing label __b1_from___b9 with __b1 -Replacing label __b1_from___b7 with __b1 -Replacing label __b2_from___b2 with __b2 -Replacing label __b1_from___b23 with __b1 -Replacing label __b6_from___b24 with __b6 -Replacing label __b5_from___b7 with __b5 -Replacing label __b9_from___b33 with __b9 -Replacing label __b12_from___b34 with __b12 -Replacing label __b11_from___b13 with __b11 -Replacing label __b14_from___b35 with __b14 -Replacing label __b4_from_gotoxy with __b1 -Replacing label __breturn_from___b1 with __breturn -Replacing label __b13_from___b8 with __b13 -Replacing label __b13_from___b8 with __b13 -Replacing label __b20_from___b13 with __b20 -Replacing label __b20_from___b16 with __b20 -Replacing label __b20_from___b16 with __b20 -Replacing label __b23_from___b28 with __b23 -Replacing label __b23_from___b21 with __b23 -Replacing label __b26_from___b23 with __b26 -Replacing label __b26_from___b24 with __b26 -Replacing label __b20_from___b18 with __b20 -Replacing label __b20_from___b17 with __b20 -Replacing label __b13_from___b11 with __b13 -Replacing label __b13_from___b10 with __b13 -Replacing label __b13_from___b9 with __b13 -Replacing label __b1_from___b2 with __b1 -Replacing label __breturn with __b3 -Replacing label __b4_from___b1 with __b4 -Replacing label __breturn with __b3 -Replacing label __breturn with __b3 -Replacing label __breturn with __b3 -Removing instruction __b1_from___init1: -Removing instruction main_from___b1: -Removing instruction __b3_from_conio_x16_init: -Removing instruction __b4_from___b3: -Removing instruction __b5_from___b4: -Removing instruction vera_layer_set_textcolor_from___b5: -Removing instruction __b6_from___b5: -Removing instruction vera_layer_set_backcolor_from___b6: -Removing instruction __b7_from___b6: -Removing instruction vera_layer_set_mapbase_from___b7: -Removing instruction __b8_from___b7: -Removing instruction vera_layer_set_mapbase_from___b8: -Removing instruction __b1_from___b2: -Removing instruction __b1_from___b9: -Removing instruction __b4_from___b3: -Removing instruction __b6_from___b5: -Removing instruction __b1_from___b7: -Removing instruction __b19_from_main: -Removing instruction __b20_from___b19: -Removing instruction __b16_from_bgcolor1: -Removing instruction __b21_from___b16: -Removing instruction __b22_from___b21: -Removing instruction memcpy_to_vram_from___b22: -Removing instruction __b1_from___b23: -Removing instruction __b2_from___b1: -Removing instruction __b2_from___b2: -Removing instruction __b4_from___b23: -Removing instruction __b5_from___b7: -Removing instruction __b6_from___b5: -Removing instruction __b6_from___b24: -Removing instruction __b8_from___b7: -Removing instruction gotoxy_from___b8: -Removing instruction __b25_from___b8: -Removing instruction printf_str_from___b25: -Removing instruction __b26_from___b25: -Removing instruction printf_str_from___b26: -Removing instruction __b27_from___b26: -Removing instruction printf_str_from___b27: -Removing instruction __b28_from___b27: -Removing instruction printf_str_from___b28: -Removing instruction __b29_from___b28: -Removing instruction printf_str_from___b29: -Removing instruction __b30_from___b29: -Removing instruction printf_str_from___b30: -Removing instruction __b31_from___b30: -Removing instruction printf_str_from___b31: -Removing instruction __b32_from___b31: -Removing instruction printf_str_from___b32: -Removing instruction __b9_from___b33: -Removing instruction __b9_from_vera_layer_show1: -Removing instruction __b10_from___b33: -Removing instruction vera_tile_area_from___b10: -Removing instruction __b11_from___b13: -Removing instruction __b12_from___b11: -Removing instruction __b12_from___b34: -Removing instruction __b14_from___b13: -Removing instruction __b14_from___b35: -Removing instruction __b15_from___b35: -Removing instruction __b17_from_vera_layer_hide1: -Removing instruction memcpy_in_vram_from___b17: -Removing instruction __b36_from___b17: -Removing instruction vera_layer_mode_tile_from___b36: -Removing instruction __b37_from___b36: -Removing instruction vera_layer_mode_tile_from___b37: -Removing instruction __b38_from___b37: -Removing instruction __b18_from_bgcolor2: -Removing instruction __b1_from_vera_layer_mode_text: -Removing instruction vera_layer_get_width1___breturn: -Removing instruction vera_layer_get_height1___breturn: -Removing instruction __b4_from_gotoxy: -Removing instruction __b4: -Removing instruction __b1_from___b4: -Removing instruction __b3_from___b1: -Removing instruction __b3: -Removing instruction __breturn_from___b1: -Removing instruction __breturn_from___b2: -Removing instruction __b4_from___b3: -Removing instruction __b5_from___b4: -Removing instruction __b13_from___b10: -Removing instruction __b13_from___b11: -Removing instruction __b13_from___b12: -Removing instruction __b13_from___b8: -Removing instruction __b13_from___b9: -Removing instruction __b20_from___b13: -Removing instruction __b20_from___b16: -Removing instruction __b20_from___b17: -Removing instruction __b20_from___b18: -Removing instruction __b20_from___b19: -Removing instruction __b23_from___b21: -Removing instruction __b23_from___b22: -Removing instruction __b23_from___b28: -Removing instruction __b26_from___b23: -Removing instruction __b26_from___b24: -Removing instruction __b26_from___b25: -Removing instruction __b1_from_printf_str: -Removing instruction __b1_from___b2: -Removing instruction __b3_from___b2: -Removing instruction __breturn: -Removing instruction __b4_from___b1: -Removing instruction __b3_from___b1: -Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction __init1: -Removing instruction __b1: -Removing instruction __breturn: -Removing instruction vera_layer_mode_text_from_conio_x16_init: -Removing instruction __b3: -Removing instruction __b4: -Removing instruction __b5: -Removing instruction __b6: -Removing instruction __b7: -Removing instruction __b8: -Removing instruction __b9: -Removing instruction __b2: -Removing instruction gotoxy_from___b1: -Removing instruction __breturn: -Removing instruction vera_layer_get_color_from_cputc: -Removing instruction __b7: -Removing instruction __b2: -Removing instruction __b3: -Removing instruction __b4: -Removing instruction __b6: -Removing instruction memcpy_in_vram_from_main: -Removing instruction __b19: -Removing instruction vera_layer_mode_tile_from___b19: -Removing instruction __b20: -Removing instruction textcolor1: -Removing instruction vera_layer_set_textcolor_from_textcolor1: -Removing instruction bgcolor1: -Removing instruction vera_layer_set_backcolor_from_bgcolor1: -Removing instruction __b16: -Removing instruction __b21: -Removing instruction vera_layer_mode_tile_from___b21: -Removing instruction __b22: -Removing instruction __b1_from___b22: -Removing instruction __b3: -Removing instruction memcpy_to_vram_from___b3: -Removing instruction __b23: -Removing instruction __b4: -Removing instruction vera_tile_area_from___b4: -Removing instruction __b5_from___b4: -Removing instruction vera_tile_area_from___b6: -Removing instruction __b24: -Removing instruction __b7: -Removing instruction __b8: -Removing instruction __b25: -Removing instruction __b26: -Removing instruction __b27: -Removing instruction __b28: -Removing instruction __b29: -Removing instruction __b30: -Removing instruction __b31: -Removing instruction __b32: -Removing instruction vera_layer_show1: -Removing instruction __b33: -Removing instruction __b10: -Removing instruction __b11_from___b10: -Removing instruction vera_tile_area_from___b12: -Removing instruction __b34: -Removing instruction __b13: -Removing instruction __b35: -Removing instruction __b15: -Removing instruction vera_tile_area_from___b15: -Removing instruction vera_layer_hide1: -Removing instruction __b17: -Removing instruction __b36: -Removing instruction __b37: -Removing instruction __b38: -Removing instruction textcolor2: -Removing instruction vera_layer_set_textcolor_from_textcolor2: -Removing instruction bgcolor2: -Removing instruction vera_layer_set_backcolor_from_bgcolor2: -Removing instruction __b18: -Removing instruction __breturn: -Removing instruction vera_layer_mode_tile_from_vera_layer_mode_text: -Removing instruction __b1: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __b3: -Removing instruction __b4: -Removing instruction vera_layer_get_width1: -Removing instruction __b1: -Removing instruction __b5: -Removing instruction __b6: -Removing instruction vera_layer_get_height1: -Removing instruction __b2: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __b1_from_gotoxy: -Removing instruction __breturn: -Removing instruction __b2: -Removing instruction __breturn: -Removing instruction __b1_from_memcpy_in_vram: -Removing instruction __breturn: -Removing instruction __b1_from___b2: -Removing instruction __b1: -Removing instruction __b2: -Removing instruction __b3: -Removing instruction __b4: -Removing instruction __b6: -Removing instruction __b7: -Removing instruction __b8: -Removing instruction __b12: -Removing instruction __b14: -Removing instruction __b15: -Removing instruction __b16: -Removing instruction __b19: -Removing instruction __b27: -Removing instruction vera_layer_set_mapbase_from___b27: -Removing instruction __b28: -Removing instruction __b21: -Removing instruction __b22: -Removing instruction __b24: -Removing instruction __b25: -Removing instruction __breturn: -Removing instruction __b7: -Removing instruction __b8: -Removing instruction __b1_from___b8: -Removing instruction __b3: -Removing instruction __breturn: -Removing instruction __b4_from___b2: -Removing instruction __b6: -Removing instruction __b1_from___b6: -Removing instruction __b4_from___b5: -Removing instruction __b1_from_memcpy_to_vram: -Removing instruction __breturn: -Removing instruction __b1_from___b2: -Removing instruction __b1_from_vera_tile_area: -Removing instruction __breturn: -Removing instruction __b2_from_vera_vram_address01: -Removing instruction __b4: -Removing instruction __b1_from___b4: -Removing instruction __b2_from___b3: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __b1: -Removing instruction __b2: -Removing instruction __b5: -Removing instruction gotoxy_from___b5: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __b1_from_insertup: -Removing instruction __b3: -Removing instruction __breturn: -Removing instruction memcpy_in_vram_from___b2: -Removing instruction __b4: -Removing instruction __b1_from___b4: -Removing instruction vera_layer_get_color_from_clearline: -Removing instruction __b4: -Removing instruction __b1_from___b4: -Removing instruction __b3: -Removing instruction __breturn: -Removing instruction __b1_from___b2: -Succesful ASM optimization Pass5UnusedLabelElimination -Replacing jump to rts with rts in jmp __breturn -Replacing jump to rts with rts in jmp __breturn -Replacing jump to rts with rts in jmp __breturn -Replacing jump to rts with rts in jmp __b3 -Succesful ASM optimization Pass5DoubleJumpElimination -Relabelling long label __b5_from_vera_layer_mode_tile to __b1 -Relabelling long label __b5_from___b1 to __b2 -Relabelling long label __b5_from___b2 to __b3 -Relabelling long label __b5_from___b3 to __b4 -Succesful ASM optimization Pass5RelabelLongLabels -Removing instruction jmp __b1 -Removing instruction jmp __b2 -Removing instruction jmp __b5 -Removing instruction jmp __b6 -Removing instruction jmp __b11 -Removing instruction jmp __b12 -Removing instruction jmp __b1 -Removing instruction bne __b2 -Removing instruction bcc __b3 -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction ldy.z conio_screen_layer -Removing instruction ldy.z conio_screen_layer -Removing instruction ldy.z conio_screen_layer -Removing instruction lda #0 -Succesful ASM optimization Pass5UnnecesaryLoadElimination -Removing instruction __b2: -Removing instruction __breturn: -Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [1116] beq __b9 to bne -Fixing long branch [1124] beq __b10 to bne -Fixing long branch [1132] beq __b11 to bne -Fixing long branch [1166] beq __b17 to bne -Fixing long branch [1174] beq __b18 to bne - -FINAL SYMBOL TABLE -__constant const char BLACK = 0 -__constant const char BLUE = 6 -char CONIO_SCREEN_BANK -char CONIO_SCREEN_BANK#12 // CONIO_SCREEN_BANK zp[1]:57 625.0625 -char CONIO_SCREEN_BANK#15 // reg byte x 14.693333333333332 -char *CONIO_SCREEN_TEXT -char *CONIO_SCREEN_TEXT#12 // CONIO_SCREEN_TEXT zp[2]:18 2.000018187272727E7 -unsigned int CONIO_SCREEN_TEXT#17 // CONIO_SCREEN_TEXT_1 zp[2]:86 2.2954545454545454 -__constant char RADIX::BINARY = 2 -__constant char RADIX::DECIMAL = $a -__constant char RADIX::HEXADECIMAL = $10 -__constant char RADIX::OCTAL = 8 -__constant char SIZEOF_POINTER = 2 -__constant unsigned int STACK_BASE = $103 -__constant const char VERA_ADDRSEL = 1 -__constant char * const VERA_ADDRX_H = (char *) 40738 -__constant char * const VERA_ADDRX_L = (char *) 40736 -__constant char * const VERA_ADDRX_M = (char *) 40737 -__constant char * const VERA_CTRL = (char *) 40741 -__constant char * const VERA_DATA0 = (char *) 40739 -__constant char * const VERA_DATA1 = (char *) 40740 -__constant char * const VERA_DC_HSCALE = (char *) 40746 -__constant char * const VERA_DC_VIDEO = (char *) 40745 -__constant char * const VERA_DC_VSCALE = (char *) 40747 -__constant const char VERA_INC_1 = $10 -__constant char * const VERA_L0_CONFIG = (char *) 40749 -__constant char * const VERA_L0_MAPBASE = (char *) 40750 -__constant char * const VERA_L0_TILEBASE = (char *) 40751 -__constant char * const VERA_L1_CONFIG = (char *) 40756 -__constant char * const VERA_L1_MAPBASE = (char *) 40757 -__constant char * const VERA_L1_TILEBASE = (char *) 40758 -__constant const char VERA_LAYER0_ENABLE = $10 -__constant const char VERA_LAYER1_ENABLE = $20 -__constant const char VERA_LAYER_COLOR_DEPTH_1BPP = 0 -__constant const char VERA_LAYER_COLOR_DEPTH_2BPP = 1 -__constant const char VERA_LAYER_COLOR_DEPTH_4BPP = 2 -__constant const char VERA_LAYER_COLOR_DEPTH_8BPP = 3 -__constant const char VERA_LAYER_CONFIG_256C = 8 -__constant const unsigned int VERA_LAYER_HEIGHT[4] = { $20, $40, $80, $100 } -__constant const char VERA_LAYER_HEIGHT_128 = $80 -__constant const char VERA_LAYER_HEIGHT_256 = $c0 -__constant const char VERA_LAYER_HEIGHT_64 = $40 -__constant const char VERA_LAYER_HEIGHT_MASK = $c0 -__constant const char VERA_LAYER_TILEBASE_MASK = $fc -__constant const unsigned int VERA_LAYER_WIDTH[4] = { $20, $40, $80, $100 } -__constant const char VERA_LAYER_WIDTH_128 = $20 -__constant const char VERA_LAYER_WIDTH_256 = $30 -__constant const char VERA_LAYER_WIDTH_64 = $10 -__constant const char VERA_LAYER_WIDTH_MASK = $30 -__constant const char VERA_TILEBASE_HEIGHT_16 = 2 -__constant const char VERA_TILEBASE_WIDTH_16 = 1 -__constant const char WHITE = 1 -void __start() -void clearline() -char clearline::$1 // reg byte a 2.00000002E8 -char clearline::$2 // reg byte a 2.00000002E8 -char clearline::$5 // reg byte a 2.00000002E8 -char *clearline::addr -char *clearline::addr#0 // addr zp[2]:12 1.00000001E8 -unsigned int clearline::c -unsigned int clearline::c#1 // c zp[2]:2 2.0000000002E10 -unsigned int clearline::c#2 // c zp[2]:2 7.50000000075E9 -char clearline::color -char clearline::color#0 // reg byte x 1.6833333336666665E9 -void clrscr() -char clrscr::$0 // reg byte a 202.0 -char clrscr::$1 // zp[1]:83 40.4 -char clrscr::$2 // reg byte a 202.0 -char clrscr::$5 // reg byte a 2002.0 -char clrscr::$6 // reg byte a 2002.0 -char clrscr::$7 // reg byte a 2002.0 -char clrscr::$9 // reg byte a 202.0 -char clrscr::c -char clrscr::c#1 // reg byte y 20002.0 -char clrscr::c#2 // reg byte y 7500.75 -char *clrscr::ch -char clrscr::color -char clrscr::color#0 // color zp[1]:32 594.2352941176471 -char clrscr::l -char clrscr::l#1 // l zp[1]:10 2002.0 -char clrscr::l#2 // l zp[1]:10 200.2 -char *clrscr::line_text -char *clrscr::line_text#0 // line_text zp[2]:6 18.363636363636363 -char *clrscr::line_text#1 // line_text zp[2]:6 1001.0 -char *clrscr::line_text#2 // line_text zp[2]:6 293.2142857142857 -__constant char conio_cursor_x[2] = { 0, 0 } -__constant char conio_cursor_y[2] = { 0, 0 } -__loadstore unsigned int conio_height // zp[2]:38 6500.681818181818 -__constant unsigned int conio_line_text[2] = { 0, 0 } -__loadstore char conio_rowshift // zp[1]:24 5838150.895953758 -__loadstore unsigned int conio_rowskip // zp[2]:25 5556117.255555555 -__loadstore volatile char conio_screen_height // zp[1]:33 75000.16875000001 -__loadstore char conio_screen_layer // zp[1]:29 1357989.2490118577 -__loadstore volatile char conio_screen_width // zp[1]:15 5.1122500030612245E7 -__constant char conio_scroll_enable[2] = { 1, 1 } -__loadstore unsigned int conio_width // zp[2]:70 128.87820512820514 -void conio_x16_init() -__constant char * const conio_x16_init::BASIC_CURSOR_LINE = (char *) 214 -char conio_x16_init::line -char conio_x16_init::line#0 // line zp[1]:82 2.1999999999999997 -char conio_x16_init::line#1 // line zp[1]:82 22.0 -char conio_x16_init::line#3 // line zp[1]:82 33.0 -__stackcall void cputc(char c) -char cputc::$15 // reg byte a 20002.0 -unsigned int cputc::$16 // zp[2]:6 20002.0 -char cputc::$2 // reg byte a 20002.0 -char cputc::$4 // reg byte a 20002.0 -char cputc::$5 // reg byte a 20002.0 -char cputc::$6 // reg byte a 20002.0 -__constant char cputc::OFFSET_STACK_C = 0 -char cputc::c -char cputc::c#0 // c zp[1]:10 1764.8823529411764 -char cputc::color -char cputc::color#0 // reg byte x 1428.7142857142858 -char *cputc::conio_addr -char *cputc::conio_addr#0 // conio_addr zp[2]:8 10001.0 -char *cputc::conio_addr#1 // conio_addr zp[2]:8 6000.6 -char cputc::scroll_enable -char cputc::scroll_enable#0 // reg byte a 20002.0 -void cputln() -char cputln::$2 // reg byte a 200002.0 -char cputln::$3 // reg byte a 200002.0 -unsigned int cputln::temp -unsigned int cputln::temp#0 // temp zp[2]:4 200002.0 -unsigned int cputln::temp#1 // temp zp[2]:4 100001.0 -void cscroll() -void gotoxy(char x , char y) -char gotoxy::$5 // reg byte a 2.0000002E7 -unsigned int gotoxy::$6 // zp[2]:16 2.0000002E7 -unsigned int gotoxy::line_offset -unsigned int gotoxy::line_offset#0 // line_offset zp[2]:16 1.0000001E7 -char gotoxy::x -char gotoxy::y -char gotoxy::y#1 // reg byte x 22.0 -char gotoxy::y#2 // reg byte x 2000002.0 -char gotoxy::y#4 // reg byte x 7000004.666666666 -char gotoxy::y#5 // reg byte x 4000000.4 -void insertup() -char insertup::$3 // reg byte a 2.000000002E9 -char insertup::cy -char insertup::cy#0 // cy zp[1]:14 7.769230784615384E7 -char insertup::i -char insertup::i#1 // reg byte x 2.000000002E9 -char insertup::i#2 // reg byte x 4.000000004E8 -unsigned int insertup::line -unsigned int insertup::line#0 // line zp[2]:8 2.000000002E9 -char *insertup::start -char *insertup::start#0 // start zp[2]:8 1.000000001E9 -char insertup::width -char insertup::width#0 // width zp[1]:11 8.416666683333334E7 -char kbhit() -__constant char * const kbhit::GETIN = (char *) 65508 -__constant char * const kbhit::IN_DEV = (char *) 650 -__loadstore volatile char kbhit::ch // zp[1]:56 1001.0 -__constant char * const kbhit::chptr = &kbhit::ch -char kbhit::return -char kbhit::return#0 // reg byte a 2002.0 -char kbhit::return#1 // reg byte a 300.75 -char kbhit::return#2 // reg byte a 202.0 -char kbhit::return#3 // reg byte a 202.0 -void main() -char main::$35 // reg byte a 202.0 -char main::$40 // reg byte a 202.0 -char main::bgcolor1_color -char main::bgcolor2_color -char main::c -char main::c#1 // c zp[1]:55 1501.5 -char main::c#2 // c zp[1]:55 250.25 -char main::c1 -char main::c1#1 // reg byte x 1501.5 -char main::c1#2 // reg byte x 250.25 -char main::column -char main::column#1 // reg byte x 400.4 -char main::column#2 // reg byte x 600.5999999999999 -char main::column1 -char main::column1#1 // column1 zp[1]:41 400.4 -char main::column1#2 // column1 zp[1]:41 600.5999999999999 -char main::p -char main::p#1 // reg byte x 1501.5 -char main::p#2 // reg byte x 2002.0 -char main::r -char main::r#1 // r zp[1]:66 151.5 -char main::r#5 // r zp[1]:66 16.833333333333332 -char main::r1 -char main::r1#1 // r1 zp[1]:67 151.5 -char main::r1#5 // r1 zp[1]:67 16.833333333333332 -char main::row -char main::row#1 // row zp[1]:64 67.33333333333333 -char main::row#10 // row_1 zp[1]:65 109.36363636363637 -char main::row#3 // row_1 zp[1]:65 67.33333333333333 -char main::row#9 // row zp[1]:64 109.36363636363637 -__constant char main::s[$38] = "vera in tile mode 8 x 8, color depth 8 bits per pixel. -" -__constant char main::s1[$3a] = "in this mode, tiles are 8 pixels wide and 8 pixels tall. -" -__constant char main::s2[$2f] = "each tile can have a variation of 256 colors. -" -__constant char main::s3[$44] = "the vera palette of 256 colors, can be used by setting the palette -" -__constant char main::s4[$17] = "offset for each tile. -" -__constant char main::s5[$4b] = "here each column is displaying the same tile, but with different offsets! -" -__constant char main::s6[$3f] = "each offset aligns to multiples of 16 colors in the palette!. -" -__constant char main::s7[$3e] = "however, the first color will always be transparent (black). -" -char main::t -char main::t#1 // t zp[1]:63 151.5 -char main::t#5 // t zp[1]:63 25.25 -char main::textcolor1_color -char main::textcolor2_color -unsigned int main::tile -unsigned int main::tile#1 // tile zp[2]:36 2002.0 -unsigned int main::tile#10 // tile zp[2]:36 202.0 -unsigned int main::tile#11 // tile zp[2]:36 202.0 -unsigned int main::tile#12 // tile zp[2]:36 350.5 -unsigned int main::tile#13 // tile zp[2]:36 350.5 -unsigned int main::tile#4 // tile zp[2]:36 2002.0 -unsigned int main::tile#6 // tile zp[2]:36 517.3333333333334 -unsigned int main::tile#8 // tile zp[2]:36 517.3333333333334 -char *main::tilebase -char *main::tilebase#2 // tilebase zp[2]:72 67.33333333333333 -char *main::tilebase#7 // tilebase zp[2]:72 28.857142857142858 -__constant char main::tiles[$100] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -char main::vera_layer_hide1_$0 // reg byte a 22.0 -char main::vera_layer_hide1_layer -char main::vera_layer_show1_layer -void memcpy_in_vram(char dest_bank , void *dest , char dest_increment , char src_bank , void *src , char src_increment , unsigned int num) -char memcpy_in_vram::$0 // reg byte a 2.0000000002E10 -char memcpy_in_vram::$1 // reg byte a 2.0000000002E10 -char memcpy_in_vram::$2 // reg byte a 2.0000000002E10 -char memcpy_in_vram::$3 // reg byte a 2.0000000002E10 -char memcpy_in_vram::$4 // reg byte a 2.0000000002E10 -char memcpy_in_vram::$5 // reg byte a 2.0000000002E10 -void *memcpy_in_vram::dest -void *memcpy_in_vram::dest#0 // dest zp[2]:8 6.666666673333334E8 -void *memcpy_in_vram::dest#3 // dest zp[2]:8 1.9090909093636363E9 -char memcpy_in_vram::dest_bank -char memcpy_in_vram::dest_bank#3 // dest_bank zp[1]:10 7.692307693076923E8 -char memcpy_in_vram::dest_increment -unsigned int memcpy_in_vram::i -unsigned int memcpy_in_vram::i#1 // i zp[2]:2 2.00000000002E11 -unsigned int memcpy_in_vram::i#2 // i zp[2]:2 1.00000000001E11 -unsigned int memcpy_in_vram::num -unsigned int memcpy_in_vram::num#0 // num zp[2]:4 1.000000001E9 -unsigned int memcpy_in_vram::num#4 // num zp[2]:4 5.315789473789474E9 -void *memcpy_in_vram::src -char *memcpy_in_vram::src#0 // src zp[2]:6 3.333333336666667E8 -void *memcpy_in_vram::src#3 // src zp[2]:6 5.25000000075E9 -void *memcpy_in_vram::src#4 // src zp[2]:6 2.000000002E9 -char memcpy_in_vram::src_bank -char memcpy_in_vram::src_bank#3 // reg byte y 1.6666666668333333E9 -char memcpy_in_vram::src_increment -void memcpy_to_vram(char vbank , void *vdest , void *src , unsigned int num) -char memcpy_to_vram::$0 // reg byte a 2002.0 -char memcpy_to_vram::$1 // reg byte a 2002.0 -char *memcpy_to_vram::end -__constant char *memcpy_to_vram::end#0 = (char *)(void *)main::tiles+$100 // end -unsigned int memcpy_to_vram::num -char *memcpy_to_vram::s -char *memcpy_to_vram::s#1 // s zp[2]:4 200002.0 -char *memcpy_to_vram::s#2 // s zp[2]:4 133334.66666666666 -void *memcpy_to_vram::src -char memcpy_to_vram::vbank -void *memcpy_to_vram::vdest -void *memcpy_to_vram::vdest#1 // vdest zp[2]:8 202.0 -void *memcpy_to_vram::vdest#2 // vdest zp[2]:8 525.75 -void printf_str(void (*putc)(char) , const char *s) -char printf_str::c -char printf_str::c#1 // reg byte a 1001.0 -void (*printf_str::putc)(char) -const char *printf_str::s -const char *printf_str::s#0 // s zp[2]:30 400.4 -const char *printf_str::s#10 // s zp[2]:30 101.0 -const char *printf_str::s#9 // s zp[2]:30 1552.0 -void screenlayer(char layer) -unsigned int screenlayer::$2 // zp[2]:16 202.0 -char screenlayer::$3 // reg byte a 202.0 -unsigned int screenlayer::$4 // zp[2]:53 202.0 -unsigned int screenlayer::$5 // zp[2]:58 202.0 -char screenlayer::layer -char screenlayer::vera_layer_get_height1_$0 // reg byte a 202.0 -char screenlayer::vera_layer_get_height1_$1 // reg byte a 202.0 -char screenlayer::vera_layer_get_height1_$2 // reg byte a 202.0 -char screenlayer::vera_layer_get_height1_$3 // reg byte a 202.0 -char *screenlayer::vera_layer_get_height1_config -char *screenlayer::vera_layer_get_height1_config#0 // vera_layer_get_height1_config zp[2]:43 202.0 -char screenlayer::vera_layer_get_height1_layer -char screenlayer::vera_layer_get_height1_layer#0 // reg byte a 202.0 -unsigned int screenlayer::vera_layer_get_height1_return -unsigned int screenlayer::vera_layer_get_height1_return#0 // vera_layer_get_height1_return zp[2]:58 202.0 -unsigned int screenlayer::vera_layer_get_height1_return#1 // vera_layer_get_height1_return zp[2]:58 202.0 -char screenlayer::vera_layer_get_width1_$0 // reg byte a 202.0 -char screenlayer::vera_layer_get_width1_$1 // reg byte a 202.0 -char screenlayer::vera_layer_get_width1_$2 // reg byte a 202.0 -char screenlayer::vera_layer_get_width1_$3 // reg byte a 202.0 -char *screenlayer::vera_layer_get_width1_config -char *screenlayer::vera_layer_get_width1_config#0 // vera_layer_get_width1_config zp[2]:34 202.0 -char screenlayer::vera_layer_get_width1_layer -char screenlayer::vera_layer_get_width1_layer#0 // reg byte a 202.0 -unsigned int screenlayer::vera_layer_get_width1_return -unsigned int screenlayer::vera_layer_get_width1_return#0 // vera_layer_get_width1_return zp[2]:16 202.0 -unsigned int screenlayer::vera_layer_get_width1_return#1 // vera_layer_get_width1_return zp[2]:16 202.0 -void screensize(char *x , char *y) -char screensize::$1 // reg byte a 202.0 -char screensize::$3 // reg byte a 202.0 -char screensize::hscale -char screensize::hscale#0 // reg byte a 202.0 -char screensize::vscale -char screensize::vscale#0 // reg byte a 202.0 -char *screensize::x -__constant char *screensize::x#0 = &conio_screen_width // x -char *screensize::y -__constant char *screensize::y#0 = &conio_screen_height // y -__constant char vera_layer_backcolor[2] = { BLUE, BLUE } -__constant char *vera_layer_config[2] = { VERA_L0_CONFIG, VERA_L1_CONFIG } -__constant char vera_layer_enable[2] = { VERA_LAYER0_ENABLE, VERA_LAYER1_ENABLE } -char vera_layer_get_backcolor(char layer) -char vera_layer_get_backcolor::layer -char vera_layer_get_backcolor::layer#0 // reg byte y 1102.0 -char vera_layer_get_backcolor::return -char vera_layer_get_backcolor::return#0 // reg byte a 202.0 -char vera_layer_get_backcolor::return#1 // reg byte a 367.33333333333337 -char vera_layer_get_color(char layer) -char vera_layer_get_color::$0 // reg byte a 2.000000002E9 -char vera_layer_get_color::$1 // reg byte a 2.000000002E9 -char vera_layer_get_color::$3 // reg byte a 2.000000002E9 -char *vera_layer_get_color::addr -char *vera_layer_get_color::addr#0 // addr zp[2]:4 2.000000002E9 -char vera_layer_get_color::layer -char vera_layer_get_color::layer#0 // reg byte x 20002.0 -char vera_layer_get_color::layer#1 // reg byte x 2.00000002E8 -char vera_layer_get_color::layer#2 // reg byte x 6.833350010000001E8 -char vera_layer_get_color::return -char vera_layer_get_color::return#0 // reg byte a 20002.0 -char vera_layer_get_color::return#1 // reg byte a 2.000000002E9 -char vera_layer_get_color::return#2 // reg byte a 2.000000002E9 -char vera_layer_get_color::return#3 // reg byte a 5.25002501E8 -char vera_layer_get_color::return#4 // reg byte a 2.00000002E8 -char vera_layer_get_mapbase_bank(char layer) -char vera_layer_get_mapbase_bank::layer -char vera_layer_get_mapbase_bank::layer#0 // reg byte y 1102.0 -char vera_layer_get_mapbase_bank::return -char vera_layer_get_mapbase_bank::return#0 // reg byte x 367.33333333333337 -char vera_layer_get_mapbase_bank::return#2 // reg byte x 202.0 -unsigned int vera_layer_get_mapbase_offset(char layer) -char vera_layer_get_mapbase_offset::$0 // reg byte a 2002.0 -char vera_layer_get_mapbase_offset::layer -char vera_layer_get_mapbase_offset::layer#0 // reg byte a 1102.0 -unsigned int vera_layer_get_mapbase_offset::return -unsigned int vera_layer_get_mapbase_offset::return#0 // return zp[2]:16 367.33333333333337 -unsigned int vera_layer_get_mapbase_offset::return#2 // return zp[2]:16 202.0 -char vera_layer_get_rowshift(char layer) -char vera_layer_get_rowshift::layer -char vera_layer_get_rowshift::layer#0 // reg byte y 1102.0 -char vera_layer_get_rowshift::return -char vera_layer_get_rowshift::return#0 // reg byte a 367.33333333333337 -char vera_layer_get_rowshift::return#2 // reg byte a 202.0 -unsigned int vera_layer_get_rowskip(char layer) -char vera_layer_get_rowskip::$0 // reg byte a 2002.0 -char vera_layer_get_rowskip::layer -char vera_layer_get_rowskip::layer#0 // reg byte a 1102.0 -unsigned int vera_layer_get_rowskip::return -unsigned int vera_layer_get_rowskip::return#0 // return zp[2]:53 367.33333333333337 -unsigned int vera_layer_get_rowskip::return#2 // return zp[2]:53 202.0 -char vera_layer_get_textcolor(char layer) -char vera_layer_get_textcolor::layer -char vera_layer_get_textcolor::layer#0 // reg byte y 1102.0 -char vera_layer_get_textcolor::return -char vera_layer_get_textcolor::return#0 // reg byte a 202.0 -char vera_layer_get_textcolor::return#1 // reg byte a 367.33333333333337 -__constant const char vera_layer_hflip[2] = { 0, 4 } -__constant char *vera_layer_mapbase[2] = { VERA_L0_MAPBASE, VERA_L1_MAPBASE } -void vera_layer_mode_text(char layer , unsigned long mapbase_address , unsigned long tilebase_address , unsigned int mapwidth , unsigned int mapheight , char tilewidth , char tileheight , unsigned int color_mode) -unsigned int vera_layer_mode_text::color_mode -char vera_layer_mode_text::layer -__constant char vera_layer_mode_text::layer#0 = 1 // layer -unsigned long vera_layer_mode_text::mapbase_address -__constant unsigned long vera_layer_mode_text::mapbase_address#0 = 0 // mapbase_address -unsigned int vera_layer_mode_text::mapheight -__constant unsigned int vera_layer_mode_text::mapheight#0 = $40 // mapheight -unsigned int vera_layer_mode_text::mapwidth -__constant unsigned int vera_layer_mode_text::mapwidth#0 = $80 // mapwidth -unsigned long vera_layer_mode_text::tilebase_address -__constant unsigned long vera_layer_mode_text::tilebase_address#0 = $f800 // tilebase_address -char vera_layer_mode_text::tileheight -__constant char vera_layer_mode_text::tileheight#0 = 8 // tileheight -char vera_layer_mode_text::tilewidth -__constant char vera_layer_mode_text::tilewidth#0 = 8 // tilewidth -void vera_layer_mode_tile(char layer , unsigned long mapbase_address , unsigned long tilebase_address , unsigned int mapwidth , unsigned int mapheight , char tilewidth , char tileheight , char color_depth) -unsigned int vera_layer_mode_tile::$1 // zp[2]:53 1001.0 -char vera_layer_mode_tile::$11 // reg byte a 2002.0 -char vera_layer_mode_tile::$12 // reg byte a 2002.0 -char vera_layer_mode_tile::$13 // reg byte a 2002.0 -char vera_layer_mode_tile::$14 // reg byte a 2002.0 -char vera_layer_mode_tile::$17 // zp[1]:61 250.25 -char vera_layer_mode_tile::$18 // zp[1]:60 273.0 -char vera_layer_mode_tile::$2 // reg byte a 2002.0 -unsigned int vera_layer_mode_tile::$6 // zp[2]:43 2002.0 -char vera_layer_mode_tile::$7 // reg byte a 2002.0 -char vera_layer_mode_tile::color_depth -char vera_layer_mode_tile::color_depth#5 // reg byte x 1001.0 -char vera_layer_mode_tile::config -char vera_layer_mode_tile::config#10 // reg byte x 2002.0 -char vera_layer_mode_tile::config#11 // reg byte x 2002.0 -char vera_layer_mode_tile::config#12 // reg byte x 2002.0 -char vera_layer_mode_tile::config#17 // reg byte x 625.625 -char vera_layer_mode_tile::config#21 // reg byte x 2002.0000000000002 -char vera_layer_mode_tile::config#25 // reg byte x 3003.0 -char vera_layer_mode_tile::config#6 // reg byte x 500.5 -char vera_layer_mode_tile::config#7 // reg byte x 500.5 -char vera_layer_mode_tile::config#8 // reg byte x 500.5 -char vera_layer_mode_tile::layer -char vera_layer_mode_tile::layer#10 // layer zp[1]:62 227.49999999999994 -char vera_layer_mode_tile::mapbase -char vera_layer_mode_tile::mapbase#0 // reg byte x 1001.0 -unsigned long vera_layer_mode_tile::mapbase_address -unsigned long vera_layer_mode_tile::mapbase_address#0 // mapbase_address zp[4]:45 2002.0 -unsigned long vera_layer_mode_tile::mapbase_address#10 // mapbase_address_1 zp[4]:74 88.97777777777777 -unsigned int vera_layer_mode_tile::mapheight -unsigned int vera_layer_mode_tile::mapheight#10 // mapheight zp[2]:68 133.46666666666667 -unsigned int vera_layer_mode_tile::mapwidth -unsigned int vera_layer_mode_tile::mapwidth#10 // mapwidth zp[2]:16 400.4 -char vera_layer_mode_tile::tilebase -char vera_layer_mode_tile::tilebase#0 // reg byte a 2002.0 -char vera_layer_mode_tile::tilebase#1 // reg byte x 1334.6666666666667 -char vera_layer_mode_tile::tilebase#10 // reg byte x 2002.0 -char vera_layer_mode_tile::tilebase#12 // reg byte x 2002.0000000000002 -char vera_layer_mode_tile::tilebase#3 // reg byte x 2002.0 -char vera_layer_mode_tile::tilebase#5 // reg byte x 2002.0 -unsigned long vera_layer_mode_tile::tilebase_address -unsigned long vera_layer_mode_tile::tilebase_address#0 // tilebase_address zp[4]:49 2002.0 -unsigned long vera_layer_mode_tile::tilebase_address#10 // tilebase_address_1 zp[4]:78 72.8 -char vera_layer_mode_tile::tileheight -char vera_layer_mode_tile::tileheight#10 // tileheight zp[1]:85 31.77777777777778 -char vera_layer_mode_tile::tilewidth -char vera_layer_mode_tile::tilewidth#10 // tilewidth zp[1]:84 33.932203389830505 -__constant char vera_layer_rowshift[2] = { 0, 0 } -__constant unsigned int vera_layer_rowskip[2] = { 0, 0 } -char vera_layer_set_backcolor(char layer , char color) -char vera_layer_set_backcolor::color -char vera_layer_set_backcolor::color#3 // reg byte a 101.0 -char vera_layer_set_backcolor::layer -char vera_layer_set_backcolor::layer#1 // reg byte y 22.0 -char vera_layer_set_backcolor::layer#2 // reg byte y 22.0 -char vera_layer_set_backcolor::layer#3 // reg byte y 123.0 -char vera_layer_set_backcolor::old -char vera_layer_set_backcolor::return -void vera_layer_set_config(char layer , char config) -char vera_layer_set_config::$0 // reg byte a 20002.0 -char *vera_layer_set_config::addr -char *vera_layer_set_config::addr#0 // addr zp[2]:34 20002.0 -char vera_layer_set_config::config -char vera_layer_set_config::config#0 // reg byte x 3667.333333333333 -char vera_layer_set_config::layer -char vera_layer_set_config::layer#0 // reg byte a 5501.0 -void vera_layer_set_mapbase(char layer , char mapbase) -char vera_layer_set_mapbase::$0 // reg byte a 20002.0 -char *vera_layer_set_mapbase::addr -char *vera_layer_set_mapbase::addr#0 // addr zp[2]:34 20002.0 -char vera_layer_set_mapbase::layer -char vera_layer_set_mapbase::layer#0 // reg byte a 1001.0 -char vera_layer_set_mapbase::layer#3 // reg byte a 11002.0 -char vera_layer_set_mapbase::mapbase -char vera_layer_set_mapbase::mapbase#0 // reg byte x 2002.0 -char vera_layer_set_mapbase::mapbase#3 // reg byte x 3667.333333333333 -void vera_layer_set_text_color_mode(char layer , char color_mode) -char *vera_layer_set_text_color_mode::addr -char *vera_layer_set_text_color_mode::addr#0 // addr zp[2]:34 2502.5 -char vera_layer_set_text_color_mode::color_mode -char vera_layer_set_text_color_mode::layer -char vera_layer_set_textcolor(char layer , char color) -char vera_layer_set_textcolor::color -char vera_layer_set_textcolor::layer -char vera_layer_set_textcolor::layer#1 // reg byte y 22.0 -char vera_layer_set_textcolor::layer#2 // reg byte y 22.0 -char vera_layer_set_textcolor::layer#3 // reg byte y 123.0 -char vera_layer_set_textcolor::old -char vera_layer_set_textcolor::return -void vera_layer_set_tilebase(char layer , char tilebase) -char vera_layer_set_tilebase::$0 // reg byte a 20002.0 -char *vera_layer_set_tilebase::addr -char *vera_layer_set_tilebase::addr#0 // addr zp[2]:34 20002.0 -char vera_layer_set_tilebase::layer -char vera_layer_set_tilebase::layer#0 // reg byte a 5501.0 -char vera_layer_set_tilebase::tilebase -char vera_layer_set_tilebase::tilebase#0 // reg byte x 3667.333333333333 -__constant char vera_layer_textcolor[2] = { WHITE, WHITE } -__constant char *vera_layer_tilebase[2] = { VERA_L0_TILEBASE, VERA_L1_TILEBASE } -__constant const char vera_layer_vflip[2] = { 0, 8 } -__constant unsigned long vera_mapbase_address[2] = { 0, 0 } -__constant char vera_mapbase_bank[2] = { 0, 0 } -__constant unsigned int vera_mapbase_offset[2] = { 0, 0 } -void vera_tile_area(char layer , unsigned int tileindex , char x , char y , char w , char h , char hflip , char vflip , char offset) -unsigned int vera_tile_area::$10 // zp[2]:8 20002.0 -unsigned int vera_tile_area::$4 // zp[2]:8 20002.0 -char vera_tile_area::$5 // reg byte a 20002.0 -char vera_tile_area::c -char vera_tile_area::c#1 // reg byte y 2.00000002E8 -char vera_tile_area::c#2 // reg byte y 7.500000075E7 -char vera_tile_area::h -char vera_tile_area::h#6 // h zp[1]:32 312500.03125 -char vera_tile_area::hflip -char vera_tile_area::hflip#0 // hflip zp[1]:40 5000.5 -char vera_tile_area::index_h -char vera_tile_area::index_h#0 // reg byte a 20002.0 -char vera_tile_area::index_h#1 // reg byte a 20002.0 -char vera_tile_area::index_h#2 // index_h zp[1]:27 4348260.956521738 -char vera_tile_area::index_l -char vera_tile_area::index_l#0 // index_l zp[1]:28 3846538.5384615385 -char vera_tile_area::layer -unsigned long vera_tile_area::mapbase -unsigned long vera_tile_area::mapbase#0 // mapbase zp[4]:20 1818.3636363636363 -unsigned long vera_tile_area::mapbase#1 // mapbase zp[4]:20 10001.0 -unsigned long vera_tile_area::mapbase#10 // mapbase zp[4]:20 3334000.4 -unsigned long vera_tile_area::mapbase#2 // mapbase zp[4]:20 20002.0 -unsigned long vera_tile_area::mapbase#3 // mapbase zp[4]:20 1.0000001E7 -char vera_tile_area::offset -char vera_tile_area::r -char vera_tile_area::r#1 // r zp[1]:11 2.0000002E7 -char vera_tile_area::r#2 // r zp[1]:11 1875000.1875 -unsigned int vera_tile_area::rowskip -unsigned int vera_tile_area::rowskip#0 // rowskip zp[2]:30 345172.4827586207 -char vera_tile_area::shift -char vera_tile_area::shift#0 // shift zp[1]:42 3333.6666666666665 -unsigned int vera_tile_area::tileindex -unsigned int vera_tile_area::tileindex#1 // tileindex zp[2]:36 667.3333333333334 -unsigned int vera_tile_area::tileindex#3 // tileindex zp[2]:36 667.3333333333334 -unsigned int vera_tile_area::tileindex#5 // tileindex zp[2]:36 3143.4285714285716 -char vera_tile_area::vera_vram_address01_$0 // reg byte a 2.0000002E7 -char vera_tile_area::vera_vram_address01_$1 // reg byte a 2.0000002E7 -char vera_tile_area::vera_vram_address01_$2 // reg byte a 2.0000002E7 -char vera_tile_area::vera_vram_address01_$3 // reg byte a 2.0000002E7 -unsigned long vera_tile_area::vera_vram_address01_bankaddr -char vera_tile_area::vera_vram_address01_incr -char vera_tile_area::vflip -char vera_tile_area::vflip#0 // vflip zp[1]:27 5000.5 -char vera_tile_area::w -char vera_tile_area::w#11 // w zp[1]:14 3125000.03125 -char vera_tile_area::x -char vera_tile_area::x#1 // x zp[1]:41 1001.0 -char vera_tile_area::x#3 // x zp[1]:41 1001.0 -char vera_tile_area::x#5 // x zp[1]:41 923.3076923076923 -char vera_tile_area::y -char vera_tile_area::y#1 // y zp[1]:10 2002.0 -char vera_tile_area::y#3 // y zp[1]:10 2002.0 -char vera_tile_area::y#5 // y zp[1]:10 200.2 -__constant unsigned long vera_tilebase_address[2] = { 0, 0 } -__constant char vera_tilebase_bank[2] = { 0, 0 } -__constant unsigned int vera_tilebase_offset[2] = { 0, 0 } - -zp[1]:82 [ conio_x16_init::line#3 conio_x16_init::line#1 conio_x16_init::line#0 ] -zp[2]:18 [ CONIO_SCREEN_TEXT#12 ] -zp[1]:57 [ CONIO_SCREEN_BANK#12 ] -zp[2]:72 [ main::tilebase#7 main::tilebase#2 ] -zp[1]:63 [ main::t#5 main::t#1 ] -reg byte x [ main::p#2 main::p#1 ] -zp[1]:64 [ main::row#9 main::row#1 ] -zp[1]:66 [ main::r#5 main::r#1 ] -zp[2]:36 [ main::tile#6 main::tile#10 main::tile#12 main::tile#1 vera_tile_area::tileindex#5 vera_tile_area::tileindex#3 vera_tile_area::tileindex#1 main::tile#8 main::tile#11 main::tile#13 main::tile#4 ] -reg byte x [ main::column#2 main::column#1 ] -zp[1]:55 [ main::c#2 main::c#1 ] -zp[1]:65 [ main::row#10 main::row#3 ] -zp[1]:67 [ main::r1#5 main::r1#1 ] -zp[1]:41 [ main::column1#2 main::column1#1 vera_tile_area::x#5 vera_tile_area::x#3 vera_tile_area::x#1 ] -reg byte x [ main::c1#2 main::c1#1 ] -reg byte y [ vera_layer_set_textcolor::layer#3 vera_layer_set_textcolor::layer#1 vera_layer_set_textcolor::layer#2 ] -reg byte y [ vera_layer_set_backcolor::layer#3 vera_layer_set_backcolor::layer#1 vera_layer_set_backcolor::layer#2 ] -reg byte a [ vera_layer_set_backcolor::color#3 ] -reg byte a [ vera_layer_set_mapbase::layer#3 vera_layer_set_mapbase::layer#0 ] -reg byte x [ vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::mapbase#0 ] -reg byte x [ gotoxy::y#5 gotoxy::y#4 gotoxy::y#1 gotoxy::y#2 ] -reg byte x [ vera_layer_get_color::layer#2 vera_layer_get_color::layer#1 vera_layer_get_color::layer#0 ] -reg byte a [ vera_layer_get_color::return#3 vera_layer_get_color::return#1 vera_layer_get_color::return#2 ] -reg byte y [ memcpy_in_vram::src_bank#3 ] -reg byte x [ vera_layer_mode_tile::color_depth#5 ] -zp[1]:62 [ vera_layer_mode_tile::layer#10 ] -zp[2]:68 [ vera_layer_mode_tile::mapheight#10 ] -zp[4]:74 [ vera_layer_mode_tile::mapbase_address#10 ] -zp[4]:78 [ vera_layer_mode_tile::tilebase_address#10 ] -zp[1]:84 [ vera_layer_mode_tile::tilewidth#10 ] -zp[1]:85 [ vera_layer_mode_tile::tileheight#10 ] -reg byte x [ vera_layer_mode_tile::config#25 vera_layer_mode_tile::config#21 vera_layer_mode_tile::config#17 vera_layer_mode_tile::config#6 vera_layer_mode_tile::config#7 vera_layer_mode_tile::config#8 vera_layer_mode_tile::config#10 vera_layer_mode_tile::config#11 vera_layer_mode_tile::config#12 ] -reg byte x [ vera_layer_mode_tile::tilebase#10 vera_layer_mode_tile::tilebase#12 vera_layer_mode_tile::tilebase#1 vera_layer_mode_tile::tilebase#3 vera_layer_mode_tile::tilebase#5 ] -reg byte y [ clrscr::c#2 clrscr::c#1 ] -zp[4]:20 [ vera_tile_area::mapbase#10 vera_tile_area::mapbase#2 vera_tile_area::mapbase#3 vera_tile_area::mapbase#1 vera_tile_area::mapbase#0 ] -reg byte y [ vera_tile_area::c#2 vera_tile_area::c#1 ] -reg byte x [ insertup::i#2 insertup::i#1 ] -zp[2]:2 [ clearline::c#2 clearline::c#1 memcpy_in_vram::i#2 memcpy_in_vram::i#1 ] -zp[1]:15 [ conio_screen_width ] -zp[1]:33 [ conio_screen_height ] -zp[1]:29 [ conio_screen_layer ] -zp[2]:70 [ conio_width ] -zp[2]:38 [ conio_height ] -zp[1]:24 [ conio_rowshift ] -zp[2]:25 [ conio_rowskip ] -zp[1]:10 [ cputc::c#0 vera_tile_area::y#5 vera_tile_area::y#3 vera_tile_area::y#1 clrscr::l#2 clrscr::l#1 memcpy_in_vram::dest_bank#3 ] -reg byte a [ vera_layer_get_color::return#0 ] -reg byte x [ cputc::color#0 ] -reg byte a [ cputc::$15 ] -reg byte a [ cputc::$2 ] -reg byte a [ cputc::$4 ] -reg byte a [ cputc::$5 ] -reg byte a [ cputc::$6 ] -reg byte a [ cputc::scroll_enable#0 ] -zp[2]:6 [ cputc::$16 clrscr::line_text#2 clrscr::line_text#1 clrscr::line_text#0 memcpy_in_vram::src#3 memcpy_in_vram::src#4 memcpy_in_vram::src#0 ] -reg byte a [ kbhit::return#2 ] -reg byte a [ main::$35 ] -reg byte a [ kbhit::return#3 ] -reg byte a [ main::$40 ] -reg byte a [ main::vera_layer_hide1_$0 ] -reg byte a [ screensize::hscale#0 ] -reg byte a [ screensize::$1 ] -reg byte a [ screensize::vscale#0 ] -reg byte a [ screensize::$3 ] -reg byte y [ vera_layer_get_mapbase_bank::layer#0 ] -reg byte x [ vera_layer_get_mapbase_bank::return#2 ] -reg byte x [ CONIO_SCREEN_BANK#15 ] -reg byte a [ vera_layer_get_mapbase_offset::layer#0 ] -zp[2]:86 [ CONIO_SCREEN_TEXT#17 ] -reg byte a [ screenlayer::vera_layer_get_width1_layer#0 ] -reg byte a [ screenlayer::vera_layer_get_width1_$2 ] -reg byte a [ screenlayer::vera_layer_get_width1_$0 ] -reg byte a [ screenlayer::vera_layer_get_width1_$1 ] -reg byte a [ screenlayer::vera_layer_get_width1_$3 ] -reg byte y [ vera_layer_get_rowshift::layer#0 ] -reg byte a [ vera_layer_get_rowshift::return#2 ] -reg byte a [ screenlayer::$3 ] -reg byte a [ vera_layer_get_rowskip::layer#0 ] -reg byte a [ screenlayer::vera_layer_get_height1_layer#0 ] -reg byte a [ screenlayer::vera_layer_get_height1_$2 ] -reg byte a [ screenlayer::vera_layer_get_height1_$0 ] -reg byte a [ screenlayer::vera_layer_get_height1_$1 ] -reg byte a [ screenlayer::vera_layer_get_height1_$3 ] -zp[2]:58 [ screenlayer::vera_layer_get_height1_return#0 screenlayer::vera_layer_get_height1_return#1 screenlayer::$5 ] -reg byte a [ vera_layer_set_mapbase::$0 ] -zp[2]:16 [ gotoxy::$6 gotoxy::line_offset#0 screenlayer::vera_layer_get_width1_return#0 screenlayer::vera_layer_get_width1_return#1 screenlayer::$2 vera_layer_get_mapbase_offset::return#2 vera_layer_get_mapbase_offset::return#0 vera_layer_mode_tile::mapwidth#10 ] -reg byte a [ gotoxy::$5 ] -reg byte a [ vera_layer_get_color::$3 ] -reg byte a [ vera_layer_get_color::$0 ] -reg byte a [ vera_layer_get_color::$1 ] -reg byte a [ cputln::$2 ] -zp[2]:4 [ cputln::temp#0 cputln::temp#1 vera_layer_get_color::addr#0 memcpy_to_vram::s#2 memcpy_to_vram::s#1 memcpy_in_vram::num#4 memcpy_in_vram::num#0 ] -reg byte a [ cputln::$3 ] -reg byte a [ memcpy_in_vram::$0 ] -reg byte a [ memcpy_in_vram::$1 ] -reg byte a [ memcpy_in_vram::$2 ] -reg byte a [ memcpy_in_vram::$3 ] -reg byte a [ memcpy_in_vram::$4 ] -reg byte a [ memcpy_in_vram::$5 ] -reg byte a [ vera_layer_mode_tile::$14 ] -reg byte a [ vera_layer_set_config::layer#0 ] -reg byte x [ vera_layer_set_config::config#0 ] -zp[2]:53 [ vera_layer_mode_tile::$1 vera_layer_get_rowskip::return#2 screenlayer::$4 vera_layer_get_rowskip::return#0 ] -zp[1]:61 [ vera_layer_mode_tile::$17 ] -reg byte a [ vera_layer_mode_tile::$2 ] -zp[1]:60 [ vera_layer_mode_tile::$18 ] -zp[4]:45 [ vera_layer_mode_tile::mapbase_address#0 ] -reg byte x [ vera_layer_mode_tile::mapbase#0 ] -zp[2]:43 [ vera_layer_mode_tile::$6 screenlayer::vera_layer_get_height1_config#0 ] -reg byte a [ vera_layer_mode_tile::$7 ] -zp[4]:49 [ vera_layer_mode_tile::tilebase_address#0 ] -reg byte a [ vera_layer_mode_tile::tilebase#0 ] -reg byte a [ vera_layer_set_tilebase::layer#0 ] -reg byte x [ vera_layer_set_tilebase::tilebase#0 ] -reg byte a [ vera_layer_mode_tile::$13 ] -reg byte a [ vera_layer_mode_tile::$12 ] -reg byte a [ vera_layer_mode_tile::$11 ] -reg byte y [ vera_layer_get_backcolor::layer#0 ] -reg byte a [ vera_layer_get_backcolor::return#0 ] -reg byte a [ clrscr::$0 ] -zp[1]:83 [ clrscr::$1 ] -reg byte y [ vera_layer_get_textcolor::layer#0 ] -reg byte a [ vera_layer_get_textcolor::return#0 ] -reg byte a [ clrscr::$2 ] -zp[1]:32 [ clrscr::color#0 vera_tile_area::h#6 ] -reg byte a [ clrscr::$9 ] -reg byte a [ clrscr::$5 ] -reg byte a [ clrscr::$6 ] -reg byte a [ clrscr::$7 ] -reg byte a [ memcpy_to_vram::$0 ] -reg byte a [ memcpy_to_vram::$1 ] -zp[1]:42 [ vera_tile_area::shift#0 ] -zp[2]:30 [ vera_tile_area::rowskip#0 printf_str::s#9 printf_str::s#10 printf_str::s#0 ] -zp[1]:40 [ vera_tile_area::hflip#0 ] -zp[1]:27 [ vera_tile_area::vflip#0 vera_tile_area::index_h#2 ] -zp[1]:28 [ vera_tile_area::index_l#0 ] -reg byte a [ vera_tile_area::index_h#0 ] -reg byte a [ vera_tile_area::index_h#1 ] -zp[2]:8 [ vera_tile_area::$10 vera_tile_area::$4 cputc::conio_addr#0 cputc::conio_addr#1 memcpy_to_vram::vdest#2 memcpy_to_vram::vdest#1 memcpy_in_vram::dest#3 memcpy_in_vram::dest#0 insertup::start#0 insertup::line#0 ] -reg byte a [ vera_tile_area::$5 ] -reg byte a [ vera_tile_area::vera_vram_address01_$0 ] -reg byte a [ vera_tile_area::vera_vram_address01_$1 ] -reg byte a [ vera_tile_area::vera_vram_address01_$2 ] -reg byte a [ vera_tile_area::vera_vram_address01_$3 ] -reg byte a [ printf_str::c#1 ] -zp[1]:56 [ kbhit::ch ] -reg byte a [ kbhit::return#0 ] -reg byte a [ kbhit::return#1 ] -reg byte x [ vera_layer_get_mapbase_bank::return#0 ] -reg byte a [ vera_layer_get_mapbase_offset::$0 ] -reg byte a [ vera_layer_get_rowshift::return#0 ] -reg byte a [ vera_layer_get_rowskip::$0 ] -reg byte a [ vera_layer_set_config::$0 ] -reg byte a [ vera_layer_set_tilebase::$0 ] -zp[2]:34 [ vera_layer_set_tilebase::addr#0 vera_layer_set_config::addr#0 vera_layer_set_text_color_mode::addr#0 vera_layer_set_mapbase::addr#0 screenlayer::vera_layer_get_width1_config#0 ] -reg byte a [ vera_layer_get_backcolor::return#1 ] -reg byte a [ vera_layer_get_textcolor::return#1 ] -zp[1]:14 [ insertup::cy#0 vera_tile_area::w#11 ] -zp[1]:11 [ insertup::width#0 vera_tile_area::r#2 vera_tile_area::r#1 ] -reg byte a [ insertup::$3 ] -reg byte a [ clearline::$5 ] -zp[2]:12 [ clearline::addr#0 ] -reg byte a [ clearline::$1 ] -reg byte a [ clearline::$2 ] -reg byte a [ vera_layer_get_color::return#4 ] -reg byte x [ clearline::color#0 ] - - -FINAL ASSEMBLER -Score: 399171 - - // File Comments -// Example program for the Commander X16. -// Demonstrates the usage of the VERA tile map modes and layering. - // Upstart -.cpu _65c02 - // Commodore 64 PRG executable file -.file [name="tilemap_8bpp_16_x_16.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(__start) - // Global Constants & labels - /// The colors of the CX16 - .const BLACK = 0 - .const WHITE = 1 - .const BLUE = 6 - .const VERA_INC_1 = $10 - .const VERA_ADDRSEL = 1 - .const VERA_LAYER1_ENABLE = $20 - .const VERA_LAYER0_ENABLE = $10 - .const VERA_LAYER_WIDTH_64 = $10 - .const VERA_LAYER_WIDTH_128 = $20 - .const VERA_LAYER_WIDTH_256 = $30 - .const VERA_LAYER_WIDTH_MASK = $30 - .const VERA_LAYER_HEIGHT_64 = $40 - .const VERA_LAYER_HEIGHT_128 = $80 - .const VERA_LAYER_HEIGHT_256 = $c0 - .const VERA_LAYER_HEIGHT_MASK = $c0 - /// Bit 0-1: Color Depth (0: 1 bpp, 1: 2 bpp, 2: 4 bpp, 3: 8 bpp) - .const VERA_LAYER_COLOR_DEPTH_1BPP = 0 - .const VERA_LAYER_COLOR_DEPTH_2BPP = 1 - .const VERA_LAYER_COLOR_DEPTH_4BPP = 2 - .const VERA_LAYER_COLOR_DEPTH_8BPP = 3 - .const VERA_LAYER_CONFIG_256C = 8 - .const VERA_TILEBASE_WIDTH_16 = 1 - .const VERA_TILEBASE_HEIGHT_16 = 2 - .const VERA_LAYER_TILEBASE_MASK = $fc - .const SIZEOF_POINTER = 2 - .const STACK_BASE = $103 - /// $9F20 VRAM Address (7:0) - .label VERA_ADDRX_L = $9f20 - /// $9F21 VRAM Address (15:8) - .label VERA_ADDRX_M = $9f21 - /// $9F22 VRAM Address (7:0) - /// Bit 4-7: Address Increment The following is the amount incremented per value value:increment - /// 0:0, 1:1, 2:2, 3:4, 4:8, 5:16, 6:32, 7:64, 8:128, 9:256, 10:512, 11:40, 12:80, 13:160, 14:320, 15:640 - /// Bit 3: DECR Setting the DECR bit, will decrement instead of increment by the value set by the 'Address Increment' field. - /// Bit 0: VRAM Address (16) - .label VERA_ADDRX_H = $9f22 - /// $9F23 DATA0 VRAM Data port 0 - .label VERA_DATA0 = $9f23 - /// $9F24 DATA1 VRAM Data port 1 - .label VERA_DATA1 = $9f24 - /// $9F25 CTRL Control - /// Bit 7: Reset - /// Bit 1: DCSEL - /// Bit 2: ADDRSEL - .label VERA_CTRL = $9f25 - /// $9F29 DC_VIDEO (DCSEL=0) - /// Bit 7: Current Field Read-only bit which reflects the active interlaced field in composite and RGB modes. (0: even, 1: odd) - /// Bit 6: Sprites Enable Enable output from the Sprites renderer - /// Bit 5: Layer1 Enable Enable output from the Layer1 renderer - /// Bit 4: Layer0 Enable Enable output from the Layer0 renderer - /// Bit 2: Chroma Disable Setting 'Chroma Disable' disables output of chroma in NTSC composite mode and will give a better picture on a monochrome display. (Setting this bit will also disable the chroma output on the S-video output.) - /// Bit 0-1: Output Mode 0: Video disabled, 1: VGA output, 2: NTSC composite, 3: RGB interlaced, composite sync (via VGA connector) - .label VERA_DC_VIDEO = $9f29 - /// $9F2A DC_HSCALE (DCSEL=0) Active Display H-Scale - .label VERA_DC_HSCALE = $9f2a - /// $9F2B DC_VSCALE (DCSEL=0) Active Display V-Scale - .label VERA_DC_VSCALE = $9f2b - /// $9F2D L0_CONFIG Layer 0 Configuration - .label VERA_L0_CONFIG = $9f2d - /// $9F2E L0_MAPBASE Layer 0 Map Base Address (16:9) - .label VERA_L0_MAPBASE = $9f2e - /// Bit 0: Tile Width (0:8 pixels, 1:16 pixels) - .label VERA_L0_TILEBASE = $9f2f - /// $9F34 L1_CONFIG Layer 1 Configuration - .label VERA_L1_CONFIG = $9f34 - /// $9F35 L1_MAPBASE Layer 1 Map Base Address (16:9) - .label VERA_L1_MAPBASE = $9f35 - /// $9F36 L1_TILEBASE Layer 1 Tile Base - /// Bit 2-7: Tile Base Address (16:11) - /// Bit 1: Tile Height (0:8 pixels, 1:16 pixels) - /// Bit 0: Tile Width (0:8 pixels, 1:16 pixels) - .label VERA_L1_TILEBASE = $9f36 - // Variable holding the screen width; - .label conio_screen_width = $f - // Variable holding the screen height; - .label conio_screen_height = $21 - // Variable holding the screen layer on the VERA card with which conio interacts; - .label conio_screen_layer = $1d - // Variables holding the current map width and map height of the layer. - .label conio_width = $46 - .label conio_height = $26 - .label conio_rowshift = $18 - .label conio_rowskip = $19 - // The screen width - // The screen height - // The text screen base address, which is a 16:0 bit value in VERA VRAM. - // That is 128KB addressable space, thus 17 bits in total. - // CONIO_SCREEN_TEXT contains bits 15:0 of the address. - // CONIO_SCREEN_BANK contains bit 16, the the 64K memory bank in VERA VRAM (the upper 17th bit). - // !!! note that these values are not const for the cx16! - // This conio implements the two layers of VERA, which can be layer 0 or layer 1. - // Configuring conio to output to a different layer, will change these fields to the address base - // configured using VERA_L0_MAPBASE = 0x9f2e or VERA_L1_MAPBASE = 0x9f35. - // Using the function setscreenlayer(layer) will re-calculate using CONIO_SCREEN_TEXT and CONIO_SCREEN_BASE - // based on the values of VERA_L0_MAPBASE or VERA_L1_MAPBASE, mapping the base address of the selected layer. - // The function setscreenlayermapbase(layer,mapbase) allows to configure bit 16:9 of the - // mapbase address of the time map in VRAM of the selected layer VERA_L0_MAPBASE or VERA_L1_MAPBASE. - .label CONIO_SCREEN_TEXT = $12 - .label CONIO_SCREEN_BANK = $39 - // The screen width - // The screen height - // The text screen base address, which is a 16:0 bit value in VERA VRAM. - // That is 128KB addressable space, thus 17 bits in total. - // CONIO_SCREEN_TEXT contains bits 15:0 of the address. - // CONIO_SCREEN_BANK contains bit 16, the the 64K memory bank in VERA VRAM (the upper 17th bit). - // !!! note that these values are not const for the cx16! - // This conio implements the two layers of VERA, which can be layer 0 or layer 1. - // Configuring conio to output to a different layer, will change these fields to the address base - // configured using VERA_L0_MAPBASE = 0x9f2e or VERA_L1_MAPBASE = 0x9f35. - // Using the function setscreenlayer(layer) will re-calculate using CONIO_SCREEN_TEXT and CONIO_SCREEN_BASE - // based on the values of VERA_L0_MAPBASE or VERA_L1_MAPBASE, mapping the base address of the selected layer. - // The function setscreenlayermapbase(layer,mapbase) allows to configure bit 16:9 of the - // mapbase address of the time map in VRAM of the selected layer VERA_L0_MAPBASE or VERA_L1_MAPBASE. - .label CONIO_SCREEN_TEXT_1 = $56 -.segment Code - // __start -__start: { - // __start::__init1 - // __ma unsigned byte conio_screen_width = 0 - // [1] conio_screen_width = 0 -- vbuz1=vbuc1 - lda #0 - sta.z conio_screen_width - // __ma unsigned byte conio_screen_height = 0 - // [2] conio_screen_height = 0 -- vbuz1=vbuc1 - sta.z conio_screen_height - // __ma unsigned byte conio_screen_layer = 1 - // [3] conio_screen_layer = 1 -- vbuz1=vbuc1 - lda #1 - sta.z conio_screen_layer - // __ma word conio_width = 0 - // [4] conio_width = 0 -- vwuz1=vwuc1 - lda #<0 - sta.z conio_width - sta.z conio_width+1 - // __ma word conio_height = 0 - // [5] conio_height = 0 -- vwuz1=vwuc1 - sta.z conio_height - sta.z conio_height+1 - // __ma byte conio_rowshift = 0 - // [6] conio_rowshift = 0 -- vbuz1=vbuc1 - sta.z conio_rowshift - // __ma word conio_rowskip = 0 - // [7] conio_rowskip = 0 -- vwuz1=vwuc1 - sta.z conio_rowskip - sta.z conio_rowskip+1 - // #pragma constructor_for(conio_x16_init, cputc, clrscr, cscroll) - // [8] call conio_x16_init - jsr conio_x16_init - // [9] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - // __start::@1 - // [10] call main - // [65] phi from __start::@1 to main [phi:__start::@1->main] - jsr main - // __start::@return - // [11] return - rts -} - // conio_x16_init -// Set initial cursor position -conio_x16_init: { - // Position cursor at current line - .label BASIC_CURSOR_LINE = $d6 - .label line = $52 - // char line = *BASIC_CURSOR_LINE - // [12] conio_x16_init::line#0 = *conio_x16_init::BASIC_CURSOR_LINE -- vbuz1=_deref_pbuc1 - lda.z BASIC_CURSOR_LINE - sta.z line - // vera_layer_mode_text(1,(dword)0x00000,(dword)0x0F800,128,64,8,8,16) - // [13] call vera_layer_mode_text - // [171] phi from conio_x16_init to vera_layer_mode_text [phi:conio_x16_init->vera_layer_mode_text] - jsr vera_layer_mode_text - // [14] phi from conio_x16_init to conio_x16_init::@3 [phi:conio_x16_init->conio_x16_init::@3] - // conio_x16_init::@3 - // screensize(&conio_screen_width, &conio_screen_height) - // [15] call screensize - jsr screensize - // [16] phi from conio_x16_init::@3 to conio_x16_init::@4 [phi:conio_x16_init::@3->conio_x16_init::@4] - // conio_x16_init::@4 - // screenlayer(1) - // [17] call screenlayer - jsr screenlayer - // [18] phi from conio_x16_init::@4 to conio_x16_init::@5 [phi:conio_x16_init::@4->conio_x16_init::@5] - // conio_x16_init::@5 - // vera_layer_set_textcolor(1, WHITE) - // [19] call vera_layer_set_textcolor - // [223] phi from conio_x16_init::@5 to vera_layer_set_textcolor [phi:conio_x16_init::@5->vera_layer_set_textcolor] - // [223] phi vera_layer_set_textcolor::layer#3 = 1 [phi:conio_x16_init::@5->vera_layer_set_textcolor#0] -- vbuyy=vbuc1 - ldy #1 - jsr vera_layer_set_textcolor - // [20] phi from conio_x16_init::@5 to conio_x16_init::@6 [phi:conio_x16_init::@5->conio_x16_init::@6] - // conio_x16_init::@6 - // vera_layer_set_backcolor(1, BLUE) - // [21] call vera_layer_set_backcolor - // [226] phi from conio_x16_init::@6 to vera_layer_set_backcolor [phi:conio_x16_init::@6->vera_layer_set_backcolor] - // [226] phi vera_layer_set_backcolor::color#3 = BLUE [phi:conio_x16_init::@6->vera_layer_set_backcolor#0] -- vbuaa=vbuc1 - lda #BLUE - // [226] phi vera_layer_set_backcolor::layer#3 = 1 [phi:conio_x16_init::@6->vera_layer_set_backcolor#1] -- vbuyy=vbuc1 - ldy #1 - jsr vera_layer_set_backcolor - // [22] phi from conio_x16_init::@6 to conio_x16_init::@7 [phi:conio_x16_init::@6->conio_x16_init::@7] - // conio_x16_init::@7 - // vera_layer_set_mapbase(0,0x20) - // [23] call vera_layer_set_mapbase - // [229] phi from conio_x16_init::@7 to vera_layer_set_mapbase [phi:conio_x16_init::@7->vera_layer_set_mapbase] - // [229] phi vera_layer_set_mapbase::mapbase#3 = $20 [phi:conio_x16_init::@7->vera_layer_set_mapbase#0] -- vbuxx=vbuc1 - ldx #$20 - // [229] phi vera_layer_set_mapbase::layer#3 = 0 [phi:conio_x16_init::@7->vera_layer_set_mapbase#1] -- vbuaa=vbuc1 - lda #0 - jsr vera_layer_set_mapbase - // [24] phi from conio_x16_init::@7 to conio_x16_init::@8 [phi:conio_x16_init::@7->conio_x16_init::@8] - // conio_x16_init::@8 - // vera_layer_set_mapbase(1,0x00) - // [25] call vera_layer_set_mapbase - // [229] phi from conio_x16_init::@8 to vera_layer_set_mapbase [phi:conio_x16_init::@8->vera_layer_set_mapbase] - // [229] phi vera_layer_set_mapbase::mapbase#3 = 0 [phi:conio_x16_init::@8->vera_layer_set_mapbase#0] -- vbuxx=vbuc1 - ldx #0 - // [229] phi vera_layer_set_mapbase::layer#3 = 1 [phi:conio_x16_init::@8->vera_layer_set_mapbase#1] -- vbuaa=vbuc1 - lda #1 - jsr vera_layer_set_mapbase - // conio_x16_init::@9 - // if(line>=CONIO_HEIGHT) - // [26] if(conio_x16_init::line#0conio_x16_init::@1] - // [28] phi conio_x16_init::line#3 = conio_x16_init::line#1 [phi:conio_x16_init::@2/conio_x16_init::@9->conio_x16_init::@1#0] -- register_copy - // conio_x16_init::@1 - __b1: - // gotoxy(0, line) - // [29] gotoxy::y#1 = conio_x16_init::line#3 -- vbuxx=vbuz1 - ldx.z line - // [30] call gotoxy - // [234] phi from conio_x16_init::@1 to gotoxy [phi:conio_x16_init::@1->gotoxy] - // [234] phi gotoxy::y#4 = gotoxy::y#1 [phi:conio_x16_init::@1->gotoxy#0] -- register_copy - jsr gotoxy - // conio_x16_init::@return - // } - // [31] return - rts -} - // cputc -// Output one character at the current cursor position -// Moves the cursor forward. Scrolls the entire screen if needed -// void cputc(__zp($a) char c) -cputc: { - .const OFFSET_STACK_C = 0 - .label __16 = 6 - .label c = $a - .label conio_addr = 8 - // [33] cputc::c#0 = stackidx(char,cputc::OFFSET_STACK_C) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_C,x - sta.z c - // char color = vera_layer_get_color( conio_screen_layer) - // [34] vera_layer_get_color::layer#0 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [35] call vera_layer_get_color - // [247] phi from cputc to vera_layer_get_color [phi:cputc->vera_layer_get_color] - // [247] phi vera_layer_get_color::layer#2 = vera_layer_get_color::layer#0 [phi:cputc->vera_layer_get_color#0] -- register_copy - jsr vera_layer_get_color - // char color = vera_layer_get_color( conio_screen_layer) - // [36] vera_layer_get_color::return#0 = vera_layer_get_color::return#3 - // cputc::@7 - // [37] cputc::color#0 = vera_layer_get_color::return#0 -- vbuxx=vbuaa - tax - // char* conio_addr = CONIO_SCREEN_TEXT + conio_line_text[conio_screen_layer] - // [38] cputc::$15 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [39] cputc::conio_addr#0 = CONIO_SCREEN_TEXT#12 + conio_line_text[cputc::$15] -- pbuz1=pbuz2_plus_pwuc1_derefidx_vbuaa - tay - clc - lda.z CONIO_SCREEN_TEXT - adc conio_line_text,y - sta.z conio_addr - lda.z CONIO_SCREEN_TEXT+1 - adc conio_line_text+1,y - sta.z conio_addr+1 - // conio_cursor_x[conio_screen_layer] << 1 - // [40] cputc::$2 = conio_cursor_x[conio_screen_layer] << 1 -- vbuaa=pbuc1_derefidx_vbuz1_rol_1 - ldy.z conio_screen_layer - lda conio_cursor_x,y - asl - // conio_addr += conio_cursor_x[conio_screen_layer] << 1 - // [41] cputc::conio_addr#1 = cputc::conio_addr#0 + cputc::$2 -- pbuz1=pbuz1_plus_vbuaa - clc - adc.z conio_addr - sta.z conio_addr - bcc !+ - inc.z conio_addr+1 - !: - // if(c=='\n') - // [42] if(cputc::c#0==' ') goto cputc::@1 -- vbuz1_eq_vbuc1_then_la1 - lda #'\n' - cmp.z c - beq __b1 - // cputc::@2 - // *VERA_CTRL &= ~VERA_ADDRSEL - // [43] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // BYTE0(conio_addr) - // [44] cputc::$4 = byte0 cputc::conio_addr#1 -- vbuaa=_byte0_pbuz1 - lda.z conio_addr - // *VERA_ADDRX_L = BYTE0(conio_addr) - // [45] *VERA_ADDRX_L = cputc::$4 -- _deref_pbuc1=vbuaa - // Set address - sta VERA_ADDRX_L - // BYTE1(conio_addr) - // [46] cputc::$5 = byte1 cputc::conio_addr#1 -- vbuaa=_byte1_pbuz1 - lda.z conio_addr+1 - // *VERA_ADDRX_M = BYTE1(conio_addr) - // [47] *VERA_ADDRX_M = cputc::$5 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // CONIO_SCREEN_BANK | VERA_INC_1 - // [48] cputc::$6 = CONIO_SCREEN_BANK#12 | VERA_INC_1 -- vbuaa=vbuz1_bor_vbuc1 - lda #VERA_INC_1 - ora.z CONIO_SCREEN_BANK - // *VERA_ADDRX_H = CONIO_SCREEN_BANK | VERA_INC_1 - // [49] *VERA_ADDRX_H = cputc::$6 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_H - // *VERA_DATA0 = c - // [50] *VERA_DATA0 = cputc::c#0 -- _deref_pbuc1=vbuz1 - lda.z c - sta VERA_DATA0 - // *VERA_DATA0 = color - // [51] *VERA_DATA0 = cputc::color#0 -- _deref_pbuc1=vbuxx - stx VERA_DATA0 - // conio_cursor_x[conio_screen_layer]++; - // [52] conio_cursor_x[conio_screen_layer] = ++ conio_cursor_x[conio_screen_layer] -- pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 - ldx.z conio_screen_layer - inc conio_cursor_x,x - // byte scroll_enable = conio_scroll_enable[conio_screen_layer] - // [53] cputc::scroll_enable#0 = conio_scroll_enable[conio_screen_layer] -- vbuaa=pbuc1_derefidx_vbuz1 - ldy.z conio_screen_layer - lda conio_scroll_enable,y - // if(scroll_enable) - // [54] if(0!=cputc::scroll_enable#0) goto cputc::@5 -- 0_neq_vbuaa_then_la1 - cmp #0 - bne __b5 - // cputc::@3 - // (unsigned int)conio_cursor_x[conio_screen_layer] == conio_width - // [55] cputc::$16 = (unsigned int)conio_cursor_x[conio_screen_layer] -- vwuz1=_word_pbuc1_derefidx_vbuz2 - lda conio_cursor_x,y - sta.z __16 - lda #0 - sta.z __16+1 - // if((unsigned int)conio_cursor_x[conio_screen_layer] == conio_width) - // [56] if(cputc::$16!=conio_width) goto cputc::@return -- vwuz1_neq_vwuz2_then_la1 - cmp.z conio_width+1 - bne __breturn - lda.z __16 - cmp.z conio_width - bne __breturn - // [57] phi from cputc::@3 to cputc::@4 [phi:cputc::@3->cputc::@4] - // cputc::@4 - // cputln() - // [58] call cputln - jsr cputln - // cputc::@return - __breturn: - // } - // [59] return - rts - // cputc::@5 - __b5: - // if(conio_cursor_x[conio_screen_layer] == CONIO_WIDTH) - // [60] if(conio_cursor_x[conio_screen_layer]!=conio_screen_width) goto cputc::@return -- pbuc1_derefidx_vbuz1_neq_vbuz2_then_la1 - lda.z conio_screen_width - ldy.z conio_screen_layer - cmp conio_cursor_x,y - bne __breturn - // [61] phi from cputc::@5 to cputc::@6 [phi:cputc::@5->cputc::@6] - // cputc::@6 - // cputln() - // [62] call cputln - jsr cputln - rts - // [63] phi from cputc::@7 to cputc::@1 [phi:cputc::@7->cputc::@1] - // cputc::@1 - __b1: - // cputln() - // [64] call cputln - jsr cputln - rts -} - // main -main: { - .label tilebase = $48 - .label t = $3f - .label tile = $24 - .label c = $37 - // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. - .label row = $40 - .label r = $42 - .label column1 = $29 - // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. - .label row_1 = $41 - .label r1 = $43 - // memcpy_in_vram(1, (char*)0xF000, VERA_INC_1, 0, (char*)0xF800, VERA_INC_1, 256*8) - // [66] call memcpy_in_vram - // Before we can load the tiles into memory we need to re-arrange a few things! - // The amount of tiles is 256, the color depth is 256, so each tile is 256 bytes! - // That is 65356 bytes of memory, which is 64K. Yup! One memory bank in VRAM. - // VERA VRAM holds in bank 1 many registers that interfere loading all of this data. - // So it is better to load all in bank 0, but then there is an other issue. - // So the default CX16 character set is located in bank 0, at address 0xF800. - // So we need to move this character set to bank 1, suggested is at address 0xF000. - // The CX16 by default writes textual output to layer 1 in text mode, so we need to - // realign the moved character set to 0xf000 as the new tile base for layer 1. - // We also will need to realign for layer 1 the map base from 0x00000 to 0x10000. - // This is now all easily done with a few statements in the new kickc vera lib ... - // [266] phi from main to memcpy_in_vram [phi:main->memcpy_in_vram] - // [266] phi memcpy_in_vram::num#4 = $100*8 [phi:main->memcpy_in_vram#0] -- vwuz1=vwuc1 - lda #<$100*8 - sta.z memcpy_in_vram.num - lda #>$100*8 - sta.z memcpy_in_vram.num+1 - // [266] phi memcpy_in_vram::dest_bank#3 = 1 [phi:main->memcpy_in_vram#1] -- vbuz1=vbuc1 - lda #1 - sta.z memcpy_in_vram.dest_bank - // [266] phi memcpy_in_vram::dest#3 = (void *)(char *) 61440 [phi:main->memcpy_in_vram#2] -- pvoz1=pvoc1 - lda #<$f000 - sta.z memcpy_in_vram.dest - lda #>$f000 - sta.z memcpy_in_vram.dest+1 - // [266] phi memcpy_in_vram::src_bank#3 = 0 [phi:main->memcpy_in_vram#3] -- vbuyy=vbuc1 - ldy #0 - // [266] phi memcpy_in_vram::src#3 = (void *)(char *) 63488 [phi:main->memcpy_in_vram#4] -- pvoz1=pvoc1 - lda #<$f800 - sta.z memcpy_in_vram.src - lda #>$f800 - sta.z memcpy_in_vram.src+1 - jsr memcpy_in_vram - // [67] phi from main to main::@19 [phi:main->main::@19] - // main::@19 - // vera_layer_mode_tile(1, 0x10000, 0x1F000, 128, 64, 8, 8, 1) - // [68] call vera_layer_mode_tile - // We copy the 128 character set of 8 bytes each. - // [286] phi from main::@19 to vera_layer_mode_tile [phi:main::@19->vera_layer_mode_tile] - // [286] phi vera_layer_mode_tile::tileheight#10 = 8 [phi:main::@19->vera_layer_mode_tile#0] -- vbuz1=vbuc1 - lda #8 - sta.z vera_layer_mode_tile.tileheight - // [286] phi vera_layer_mode_tile::tilewidth#10 = 8 [phi:main::@19->vera_layer_mode_tile#1] -- vbuz1=vbuc1 - sta.z vera_layer_mode_tile.tilewidth - // [286] phi vera_layer_mode_tile::tilebase_address#10 = $1f000 [phi:main::@19->vera_layer_mode_tile#2] -- vduz1=vduc1 - lda #<$1f000 - sta.z vera_layer_mode_tile.tilebase_address_1 - lda #>$1f000 - sta.z vera_layer_mode_tile.tilebase_address_1+1 - lda #<$1f000>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+2 - lda #>$1f000>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+3 - // [286] phi vera_layer_mode_tile::mapbase_address#10 = $10000 [phi:main::@19->vera_layer_mode_tile#3] -- vduz1=vduc1 - lda #<$10000 - sta.z vera_layer_mode_tile.mapbase_address_1 - lda #>$10000 - sta.z vera_layer_mode_tile.mapbase_address_1+1 - lda #<$10000>>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+2 - lda #>$10000>>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+3 - // [286] phi vera_layer_mode_tile::mapheight#10 = $40 [phi:main::@19->vera_layer_mode_tile#4] -- vwuz1=vbuc1 - lda #<$40 - sta.z vera_layer_mode_tile.mapheight - lda #>$40 - sta.z vera_layer_mode_tile.mapheight+1 - // [286] phi vera_layer_mode_tile::layer#10 = 1 [phi:main::@19->vera_layer_mode_tile#5] -- vbuz1=vbuc1 - lda #1 - sta.z vera_layer_mode_tile.layer - // [286] phi vera_layer_mode_tile::mapwidth#10 = $80 [phi:main::@19->vera_layer_mode_tile#6] -- vwuz1=vbuc1 - lda #<$80 - sta.z vera_layer_mode_tile.mapwidth - lda #>$80 - sta.z vera_layer_mode_tile.mapwidth+1 - // [286] phi vera_layer_mode_tile::color_depth#5 = 1 [phi:main::@19->vera_layer_mode_tile#7] -- vbuxx=vbuc1 - ldx #1 - jsr vera_layer_mode_tile - // [69] phi from main::@19 to main::@20 [phi:main::@19->main::@20] - // main::@20 - // screenlayer(1) - // [70] call screenlayer - jsr screenlayer - // main::textcolor1 - // vera_layer_set_textcolor(conio_screen_layer, color) - // [71] vera_layer_set_textcolor::layer#1 = conio_screen_layer -- vbuyy=vbuz1 - ldy.z conio_screen_layer - // [72] call vera_layer_set_textcolor - // [223] phi from main::textcolor1 to vera_layer_set_textcolor [phi:main::textcolor1->vera_layer_set_textcolor] - // [223] phi vera_layer_set_textcolor::layer#3 = vera_layer_set_textcolor::layer#1 [phi:main::textcolor1->vera_layer_set_textcolor#0] -- register_copy - jsr vera_layer_set_textcolor - // main::bgcolor1 - // vera_layer_set_backcolor(conio_screen_layer, color) - // [73] vera_layer_set_backcolor::layer#1 = conio_screen_layer -- vbuyy=vbuz1 - ldy.z conio_screen_layer - // [74] call vera_layer_set_backcolor - // [226] phi from main::bgcolor1 to vera_layer_set_backcolor [phi:main::bgcolor1->vera_layer_set_backcolor] - // [226] phi vera_layer_set_backcolor::color#3 = BLACK [phi:main::bgcolor1->vera_layer_set_backcolor#0] -- vbuaa=vbuc1 - lda #BLACK - // [226] phi vera_layer_set_backcolor::layer#3 = vera_layer_set_backcolor::layer#1 [phi:main::bgcolor1->vera_layer_set_backcolor#1] -- register_copy - jsr vera_layer_set_backcolor - // [75] phi from main::bgcolor1 to main::@16 [phi:main::bgcolor1->main::@16] - // main::@16 - // clrscr() - // [76] call clrscr - jsr clrscr - // [77] phi from main::@16 to main::@21 [phi:main::@16->main::@21] - // main::@21 - // vera_layer_mode_tile(0, 0x14000, 0x00000, 64, 64, 16, 16, 8) - // [78] call vera_layer_mode_tile - // Now we can use the full bank 0! - // We set the mapbase of the tile demo to output to 0x12000, - // and the tilebase is set to 0x0000! - // [286] phi from main::@21 to vera_layer_mode_tile [phi:main::@21->vera_layer_mode_tile] - // [286] phi vera_layer_mode_tile::tileheight#10 = $10 [phi:main::@21->vera_layer_mode_tile#0] -- vbuz1=vbuc1 - lda #$10 - sta.z vera_layer_mode_tile.tileheight - // [286] phi vera_layer_mode_tile::tilewidth#10 = $10 [phi:main::@21->vera_layer_mode_tile#1] -- vbuz1=vbuc1 - sta.z vera_layer_mode_tile.tilewidth - // [286] phi vera_layer_mode_tile::tilebase_address#10 = 0 [phi:main::@21->vera_layer_mode_tile#2] -- vduz1=vbuc1 - lda #0 - sta.z vera_layer_mode_tile.tilebase_address_1 - sta.z vera_layer_mode_tile.tilebase_address_1+1 - sta.z vera_layer_mode_tile.tilebase_address_1+2 - sta.z vera_layer_mode_tile.tilebase_address_1+3 - // [286] phi vera_layer_mode_tile::mapbase_address#10 = $14000 [phi:main::@21->vera_layer_mode_tile#3] -- vduz1=vduc1 - lda #<$14000 - sta.z vera_layer_mode_tile.mapbase_address_1 - lda #>$14000 - sta.z vera_layer_mode_tile.mapbase_address_1+1 - lda #<$14000>>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+2 - lda #>$14000>>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+3 - // [286] phi vera_layer_mode_tile::mapheight#10 = $40 [phi:main::@21->vera_layer_mode_tile#4] -- vwuz1=vbuc1 - lda #<$40 - sta.z vera_layer_mode_tile.mapheight - lda #>$40 - sta.z vera_layer_mode_tile.mapheight+1 - // [286] phi vera_layer_mode_tile::layer#10 = 0 [phi:main::@21->vera_layer_mode_tile#5] -- vbuz1=vbuc1 - lda #0 - sta.z vera_layer_mode_tile.layer - // [286] phi vera_layer_mode_tile::mapwidth#10 = $40 [phi:main::@21->vera_layer_mode_tile#6] -- vwuz1=vbuc1 - lda #<$40 - sta.z vera_layer_mode_tile.mapwidth - lda #>$40 - sta.z vera_layer_mode_tile.mapwidth+1 - // [286] phi vera_layer_mode_tile::color_depth#5 = 8 [phi:main::@21->vera_layer_mode_tile#7] -- vbuxx=vbuc1 - ldx #8 - jsr vera_layer_mode_tile - // [79] phi from main::@21 to main::@22 [phi:main::@21->main::@22] - // main::@22 - // memcpy_to_vram(0, tilebase, tiles, 256) - // [80] call memcpy_to_vram - // [388] phi from main::@22 to memcpy_to_vram [phi:main::@22->memcpy_to_vram] - // [388] phi memcpy_to_vram::vdest#2 = (void *)(char *) 0 [phi:main::@22->memcpy_to_vram#0] -- pvoz1=pvoc1 - lda #<0 - sta.z memcpy_to_vram.vdest - sta.z memcpy_to_vram.vdest+1 - jsr memcpy_to_vram - // [81] phi from main::@22 to main::@1 [phi:main::@22->main::@1] - // [81] phi main::t#5 = 1 [phi:main::@22->main::@1#0] -- vbuz1=vbuc1 - lda #1 - sta.z t - // [81] phi main::tilebase#7 = (char *) 0+$100 [phi:main::@22->main::@1#1] -- pbuz1=pbuc1 - lda #<0+$100 - sta.z tilebase - lda #>0+$100 - sta.z tilebase+1 - // [81] phi from main::@23 to main::@1 [phi:main::@23->main::@1] - // [81] phi main::t#5 = main::t#1 [phi:main::@23->main::@1#0] -- register_copy - // [81] phi main::tilebase#7 = main::tilebase#2 [phi:main::@23->main::@1#1] -- register_copy - // main::@1 - __b1: - // [82] phi from main::@1 to main::@2 [phi:main::@1->main::@2] - // [82] phi main::p#2 = 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1 - ldx #0 - // [82] phi from main::@2 to main::@2 [phi:main::@2->main::@2] - // [82] phi main::p#2 = main::p#1 [phi:main::@2->main::@2#0] -- register_copy - // main::@2 - __b2: - // tiles[p]+=1 - // [83] main::tiles[main::p#2] = main::tiles[main::p#2] + 1 -- pbuc1_derefidx_vbuxx=pbuc1_derefidx_vbuxx_plus_1 - lda tiles,x - inc - sta tiles,x - // for(byte p:0..255) - // [84] main::p#1 = ++ main::p#2 -- vbuxx=_inc_vbuxx - inx - // [85] if(main::p#1!=0) goto main::@2 -- vbuxx_neq_0_then_la1 - cpx #0 - bne __b2 - // main::@3 - // memcpy_to_vram(0, tilebase, tiles, 256) - // [86] memcpy_to_vram::vdest#1 = (void *)main::tilebase#7 -- pvoz1=pvoz2 - lda.z tilebase - sta.z memcpy_to_vram.vdest - lda.z tilebase+1 - sta.z memcpy_to_vram.vdest+1 - // [87] call memcpy_to_vram - // [388] phi from main::@3 to memcpy_to_vram [phi:main::@3->memcpy_to_vram] - // [388] phi memcpy_to_vram::vdest#2 = memcpy_to_vram::vdest#1 [phi:main::@3->memcpy_to_vram#0] -- register_copy - jsr memcpy_to_vram - // main::@23 - // tilebase+=256 - // [88] main::tilebase#2 = main::tilebase#7 + $100 -- pbuz1=pbuz1_plus_vwuc1 - lda.z tilebase - clc - adc #<$100 - sta.z tilebase - lda.z tilebase+1 - adc #>$100 - sta.z tilebase+1 - // for(byte t:1..255) - // [89] main::t#1 = ++ main::t#5 -- vbuz1=_inc_vbuz1 - inc.z t - // [90] if(main::t#1!=0) goto main::@1 -- vbuz1_neq_0_then_la1 - lda.z t - bne __b1 - // [91] phi from main::@23 to main::@4 [phi:main::@23->main::@4] - // main::@4 - // vera_tile_area(0, 0, 0, 0, 40, 30, 0, 0, 0) - // [92] call vera_tile_area - //vera_tile_area(byte layer, word tileindex, byte x, byte y, byte w, byte h, byte hflip, byte vflip, byte offset) - // [400] phi from main::@4 to vera_tile_area [phi:main::@4->vera_tile_area] - // [400] phi vera_tile_area::w#11 = $28 [phi:main::@4->vera_tile_area#0] -- vbuz1=vbuc1 - lda #$28 - sta.z vera_tile_area.w - // [400] phi vera_tile_area::h#6 = $1e [phi:main::@4->vera_tile_area#1] -- vbuz1=vbuc1 - lda #$1e - sta.z vera_tile_area.h - // [400] phi vera_tile_area::x#5 = 0 [phi:main::@4->vera_tile_area#2] -- vbuz1=vbuc1 - lda #0 - sta.z vera_tile_area.x - // [400] phi vera_tile_area::y#5 = 0 [phi:main::@4->vera_tile_area#3] -- vbuz1=vbuc1 - sta.z vera_tile_area.y - // [400] phi vera_tile_area::tileindex#5 = 0 [phi:main::@4->vera_tile_area#4] -- vwuz1=vbuc1 - sta.z vera_tile_area.tileindex - sta.z vera_tile_area.tileindex+1 - jsr vera_tile_area - // [93] phi from main::@4 to main::@5 [phi:main::@4->main::@5] - // [93] phi main::r#5 = 0 [phi:main::@4->main::@5#0] -- vbuz1=vbuc1 - lda #0 - sta.z r - // [93] phi main::row#9 = 1 [phi:main::@4->main::@5#1] -- vbuz1=vbuc1 - lda #1 - sta.z row - // [93] phi main::tile#10 = 0 [phi:main::@4->main::@5#2] -- vwuz1=vwuc1 - lda #<0 - sta.z tile - sta.z tile+1 - // [93] phi from main::@7 to main::@5 [phi:main::@7->main::@5] - // [93] phi main::r#5 = main::r#1 [phi:main::@7->main::@5#0] -- register_copy - // [93] phi main::row#9 = main::row#1 [phi:main::@7->main::@5#1] -- register_copy - // [93] phi main::tile#10 = main::tile#12 [phi:main::@7->main::@5#2] -- register_copy - // main::@5 - __b5: - // [94] phi from main::@5 to main::@6 [phi:main::@5->main::@6] - // [94] phi main::c#2 = 0 [phi:main::@5->main::@6#0] -- vbuz1=vbuc1 - lda #0 - sta.z c - // [94] phi main::column#2 = 0 [phi:main::@5->main::@6#1] -- vbuxx=vbuc1 - tax - // [94] phi main::tile#6 = main::tile#10 [phi:main::@5->main::@6#2] -- register_copy - // [94] phi from main::@24 to main::@6 [phi:main::@24->main::@6] - // [94] phi main::c#2 = main::c#1 [phi:main::@24->main::@6#0] -- register_copy - // [94] phi main::column#2 = main::column#1 [phi:main::@24->main::@6#1] -- register_copy - // [94] phi main::tile#6 = main::tile#12 [phi:main::@24->main::@6#2] -- register_copy - // main::@6 - __b6: - // vera_tile_area(0, tile, column, row, 1, 1, 0, 0, 0) - // [95] vera_tile_area::tileindex#1 = main::tile#6 - // [96] vera_tile_area::x#1 = main::column#2 -- vbuz1=vbuxx - stx.z vera_tile_area.x - // [97] vera_tile_area::y#1 = main::row#9 -- vbuz1=vbuz2 - lda.z row - sta.z vera_tile_area.y - // [98] call vera_tile_area - // [400] phi from main::@6 to vera_tile_area [phi:main::@6->vera_tile_area] - // [400] phi vera_tile_area::w#11 = 1 [phi:main::@6->vera_tile_area#0] -- vbuz1=vbuc1 - lda #1 - sta.z vera_tile_area.w - // [400] phi vera_tile_area::h#6 = 1 [phi:main::@6->vera_tile_area#1] -- vbuz1=vbuc1 - sta.z vera_tile_area.h - // [400] phi vera_tile_area::x#5 = vera_tile_area::x#1 [phi:main::@6->vera_tile_area#2] -- register_copy - // [400] phi vera_tile_area::y#5 = vera_tile_area::y#1 [phi:main::@6->vera_tile_area#3] -- register_copy - // [400] phi vera_tile_area::tileindex#5 = vera_tile_area::tileindex#1 [phi:main::@6->vera_tile_area#4] -- register_copy - jsr vera_tile_area - // main::@24 - // column+=2 - // [99] main::column#1 = main::column#2 + 2 -- vbuxx=vbuxx_plus_2 - inx - inx - // tile++; - // [100] main::tile#1 = ++ main::tile#6 -- vwuz1=_inc_vwuz1 - inc.z tile - bne !+ - inc.z tile+1 - !: - // tile &= 0xff - // [101] main::tile#12 = main::tile#1 & $ff -- vwuz1=vwuz1_band_vbuc1 - lda #$ff - and.z tile - sta.z tile - lda #0 - sta.z tile+1 - // for(byte c:0..19) - // [102] main::c#1 = ++ main::c#2 -- vbuz1=_inc_vbuz1 - inc.z c - // [103] if(main::c#1!=$14) goto main::@6 -- vbuz1_neq_vbuc1_then_la1 - lda #$14 - cmp.z c - bne __b6 - // main::@7 - // row += 2 - // [104] main::row#1 = main::row#9 + 2 -- vbuz1=vbuz1_plus_2 - lda.z row - clc - adc #2 - sta.z row - // for(byte r:0..11) - // [105] main::r#1 = ++ main::r#5 -- vbuz1=_inc_vbuz1 - inc.z r - // [106] if(main::r#1!=$c) goto main::@5 -- vbuz1_neq_vbuc1_then_la1 - lda #$c - cmp.z r - bne __b5 - // [107] phi from main::@7 to main::@8 [phi:main::@7->main::@8] - // main::@8 - // gotoxy(0,50) - // [108] call gotoxy - // [234] phi from main::@8 to gotoxy [phi:main::@8->gotoxy] - // [234] phi gotoxy::y#4 = $32 [phi:main::@8->gotoxy#0] -- vbuxx=vbuc1 - ldx #$32 - jsr gotoxy - // [109] phi from main::@8 to main::@25 [phi:main::@8->main::@25] - // main::@25 - // printf("vera in tile mode 8 x 8, color depth 8 bits per pixel.\n") - // [110] call printf_str - // [433] phi from main::@25 to printf_str [phi:main::@25->printf_str] - // [433] phi printf_str::s#10 = main::s [phi:main::@25->printf_str#0] -- pbuz1=pbuc1 - lda #s - sta.z printf_str.s+1 - jsr printf_str - // [111] phi from main::@25 to main::@26 [phi:main::@25->main::@26] - // main::@26 - // printf("in this mode, tiles are 8 pixels wide and 8 pixels tall.\n") - // [112] call printf_str - // [433] phi from main::@26 to printf_str [phi:main::@26->printf_str] - // [433] phi printf_str::s#10 = main::s1 [phi:main::@26->printf_str#0] -- pbuz1=pbuc1 - lda #s1 - sta.z printf_str.s+1 - jsr printf_str - // [113] phi from main::@26 to main::@27 [phi:main::@26->main::@27] - // main::@27 - // printf("each tile can have a variation of 256 colors.\n") - // [114] call printf_str - // [433] phi from main::@27 to printf_str [phi:main::@27->printf_str] - // [433] phi printf_str::s#10 = main::s2 [phi:main::@27->printf_str#0] -- pbuz1=pbuc1 - lda #s2 - sta.z printf_str.s+1 - jsr printf_str - // [115] phi from main::@27 to main::@28 [phi:main::@27->main::@28] - // main::@28 - // printf("the vera palette of 256 colors, can be used by setting the palette\n") - // [116] call printf_str - // [433] phi from main::@28 to printf_str [phi:main::@28->printf_str] - // [433] phi printf_str::s#10 = main::s3 [phi:main::@28->printf_str#0] -- pbuz1=pbuc1 - lda #s3 - sta.z printf_str.s+1 - jsr printf_str - // [117] phi from main::@28 to main::@29 [phi:main::@28->main::@29] - // main::@29 - // printf("offset for each tile.\n") - // [118] call printf_str - // [433] phi from main::@29 to printf_str [phi:main::@29->printf_str] - // [433] phi printf_str::s#10 = main::s4 [phi:main::@29->printf_str#0] -- pbuz1=pbuc1 - lda #s4 - sta.z printf_str.s+1 - jsr printf_str - // [119] phi from main::@29 to main::@30 [phi:main::@29->main::@30] - // main::@30 - // printf("here each column is displaying the same tile, but with different offsets!\n") - // [120] call printf_str - // [433] phi from main::@30 to printf_str [phi:main::@30->printf_str] - // [433] phi printf_str::s#10 = main::s5 [phi:main::@30->printf_str#0] -- pbuz1=pbuc1 - lda #s5 - sta.z printf_str.s+1 - jsr printf_str - // [121] phi from main::@30 to main::@31 [phi:main::@30->main::@31] - // main::@31 - // printf("each offset aligns to multiples of 16 colors in the palette!.\n") - // [122] call printf_str - // [433] phi from main::@31 to printf_str [phi:main::@31->printf_str] - // [433] phi printf_str::s#10 = main::s6 [phi:main::@31->printf_str#0] -- pbuz1=pbuc1 - lda #s6 - sta.z printf_str.s+1 - jsr printf_str - // [123] phi from main::@31 to main::@32 [phi:main::@31->main::@32] - // main::@32 - // printf("however, the first color will always be transparent (black).\n") - // [124] call printf_str - // [433] phi from main::@32 to printf_str [phi:main::@32->printf_str] - // [433] phi printf_str::s#10 = main::s7 [phi:main::@32->printf_str#0] -- pbuz1=pbuc1 - lda #s7 - sta.z printf_str.s+1 - jsr printf_str - // main::vera_layer_show1 - // *VERA_DC_VIDEO |= vera_layer_enable[layer] - // [125] *VERA_DC_VIDEO = *VERA_DC_VIDEO | *vera_layer_enable -- _deref_pbuc1=_deref_pbuc1_bor__deref_pbuc2 - lda VERA_DC_VIDEO - ora vera_layer_enable - sta VERA_DC_VIDEO - // [126] phi from main::@33 main::vera_layer_show1 to main::@9 [phi:main::@33/main::vera_layer_show1->main::@9] - // main::@9 - __b9: - // kbhit() - // [127] call kbhit - jsr kbhit - // [128] kbhit::return#2 = kbhit::return#1 - // main::@33 - // [129] main::$35 = kbhit::return#2 - // while(!kbhit()) - // [130] if(0==main::$35) goto main::@9 -- 0_eq_vbuaa_then_la1 - cmp #0 - beq __b9 - // [131] phi from main::@33 to main::@10 [phi:main::@33->main::@10] - // main::@10 - // vera_tile_area(0, 0, 0, 0, 40, 30, 0, 0, 0) - // [132] call vera_tile_area - // [400] phi from main::@10 to vera_tile_area [phi:main::@10->vera_tile_area] - // [400] phi vera_tile_area::w#11 = $28 [phi:main::@10->vera_tile_area#0] -- vbuz1=vbuc1 - lda #$28 - sta.z vera_tile_area.w - // [400] phi vera_tile_area::h#6 = $1e [phi:main::@10->vera_tile_area#1] -- vbuz1=vbuc1 - lda #$1e - sta.z vera_tile_area.h - // [400] phi vera_tile_area::x#5 = 0 [phi:main::@10->vera_tile_area#2] -- vbuz1=vbuc1 - lda #0 - sta.z vera_tile_area.x - // [400] phi vera_tile_area::y#5 = 0 [phi:main::@10->vera_tile_area#3] -- vbuz1=vbuc1 - sta.z vera_tile_area.y - // [400] phi vera_tile_area::tileindex#5 = 0 [phi:main::@10->vera_tile_area#4] -- vwuz1=vbuc1 - sta.z vera_tile_area.tileindex - sta.z vera_tile_area.tileindex+1 - jsr vera_tile_area - // [133] phi from main::@10 to main::@11 [phi:main::@10->main::@11] - // [133] phi main::r1#5 = 0 [phi:main::@10->main::@11#0] -- vbuz1=vbuc1 - lda #0 - sta.z r1 - // [133] phi main::row#10 = 0 [phi:main::@10->main::@11#1] -- vbuz1=vbuc1 - sta.z row_1 - // [133] phi main::tile#11 = 0 [phi:main::@10->main::@11#2] -- vwuz1=vbuc1 - sta.z tile - sta.z tile+1 - // [133] phi from main::@13 to main::@11 [phi:main::@13->main::@11] - // [133] phi main::r1#5 = main::r1#1 [phi:main::@13->main::@11#0] -- register_copy - // [133] phi main::row#10 = main::row#3 [phi:main::@13->main::@11#1] -- register_copy - // [133] phi main::tile#11 = main::tile#13 [phi:main::@13->main::@11#2] -- register_copy - // main::@11 - __b11: - // [134] phi from main::@11 to main::@12 [phi:main::@11->main::@12] - // [134] phi main::c1#2 = 0 [phi:main::@11->main::@12#0] -- vbuxx=vbuc1 - ldx #0 - // [134] phi main::column1#2 = 0 [phi:main::@11->main::@12#1] -- vbuz1=vbuc1 - txa - sta.z column1 - // [134] phi main::tile#8 = main::tile#11 [phi:main::@11->main::@12#2] -- register_copy - // [134] phi from main::@34 to main::@12 [phi:main::@34->main::@12] - // [134] phi main::c1#2 = main::c1#1 [phi:main::@34->main::@12#0] -- register_copy - // [134] phi main::column1#2 = main::column1#1 [phi:main::@34->main::@12#1] -- register_copy - // [134] phi main::tile#8 = main::tile#13 [phi:main::@34->main::@12#2] -- register_copy - // main::@12 - __b12: - // vera_tile_area(0, tile, column, row, 2, 2, 0, 0, 0) - // [135] vera_tile_area::tileindex#3 = main::tile#8 - // [136] vera_tile_area::x#3 = main::column1#2 - // [137] vera_tile_area::y#3 = main::row#10 -- vbuz1=vbuz2 - lda.z row_1 - sta.z vera_tile_area.y - // [138] call vera_tile_area - // [400] phi from main::@12 to vera_tile_area [phi:main::@12->vera_tile_area] - // [400] phi vera_tile_area::w#11 = 2 [phi:main::@12->vera_tile_area#0] -- vbuz1=vbuc1 - lda #2 - sta.z vera_tile_area.w - // [400] phi vera_tile_area::h#6 = 2 [phi:main::@12->vera_tile_area#1] -- vbuz1=vbuc1 - sta.z vera_tile_area.h - // [400] phi vera_tile_area::x#5 = vera_tile_area::x#3 [phi:main::@12->vera_tile_area#2] -- register_copy - // [400] phi vera_tile_area::y#5 = vera_tile_area::y#3 [phi:main::@12->vera_tile_area#3] -- register_copy - // [400] phi vera_tile_area::tileindex#5 = vera_tile_area::tileindex#3 [phi:main::@12->vera_tile_area#4] -- register_copy - jsr vera_tile_area - // main::@34 - // column+=2 - // [139] main::column1#1 = main::column1#2 + 2 -- vbuz1=vbuz1_plus_2 - lda.z column1 - clc - adc #2 - sta.z column1 - // tile++; - // [140] main::tile#4 = ++ main::tile#8 -- vwuz1=_inc_vwuz1 - inc.z tile - bne !+ - inc.z tile+1 - !: - // tile &= 0xff - // [141] main::tile#13 = main::tile#4 & $ff -- vwuz1=vwuz1_band_vbuc1 - lda #$ff - and.z tile - sta.z tile - lda #0 - sta.z tile+1 - // for(byte c:0..19) - // [142] main::c1#1 = ++ main::c1#2 -- vbuxx=_inc_vbuxx - inx - // [143] if(main::c1#1!=$14) goto main::@12 -- vbuxx_neq_vbuc1_then_la1 - cpx #$14 - bne __b12 - // main::@13 - // row += 2 - // [144] main::row#3 = main::row#10 + 2 -- vbuz1=vbuz1_plus_2 - lda.z row_1 - clc - adc #2 - sta.z row_1 - // for(byte r:0..11) - // [145] main::r1#1 = ++ main::r1#5 -- vbuz1=_inc_vbuz1 - inc.z r1 - // [146] if(main::r1#1!=$c) goto main::@11 -- vbuz1_neq_vbuc1_then_la1 - lda #$c - cmp.z r1 - bne __b11 - // [147] phi from main::@13 main::@35 to main::@14 [phi:main::@13/main::@35->main::@14] - // main::@14 - __b14: - // kbhit() - // [148] call kbhit - jsr kbhit - // [149] kbhit::return#3 = kbhit::return#1 - // main::@35 - // [150] main::$40 = kbhit::return#3 - // while(!kbhit()) - // [151] if(0==main::$40) goto main::@14 -- 0_eq_vbuaa_then_la1 - cmp #0 - beq __b14 - // [152] phi from main::@35 to main::@15 [phi:main::@35->main::@15] - // main::@15 - // vera_tile_area(0, 0, 0, 0, 40, 30, 0, 0, 0) - // [153] call vera_tile_area - // Now put back the defaults ... - // [400] phi from main::@15 to vera_tile_area [phi:main::@15->vera_tile_area] - // [400] phi vera_tile_area::w#11 = $28 [phi:main::@15->vera_tile_area#0] -- vbuz1=vbuc1 - lda #$28 - sta.z vera_tile_area.w - // [400] phi vera_tile_area::h#6 = $1e [phi:main::@15->vera_tile_area#1] -- vbuz1=vbuc1 - lda #$1e - sta.z vera_tile_area.h - // [400] phi vera_tile_area::x#5 = 0 [phi:main::@15->vera_tile_area#2] -- vbuz1=vbuc1 - lda #0 - sta.z vera_tile_area.x - // [400] phi vera_tile_area::y#5 = 0 [phi:main::@15->vera_tile_area#3] -- vbuz1=vbuc1 - sta.z vera_tile_area.y - // [400] phi vera_tile_area::tileindex#5 = 0 [phi:main::@15->vera_tile_area#4] -- vwuz1=vbuc1 - sta.z vera_tile_area.tileindex - sta.z vera_tile_area.tileindex+1 - jsr vera_tile_area - // main::vera_layer_hide1 - // ~vera_layer_enable[layer] - // [154] main::vera_layer_hide1_$0 = ~ *vera_layer_enable -- vbuaa=_bnot__deref_pbuc1 - lda vera_layer_enable - eor #$ff - // *VERA_DC_VIDEO &= ~vera_layer_enable[layer] - // [155] *VERA_DC_VIDEO = *VERA_DC_VIDEO & main::vera_layer_hide1_$0 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa - and VERA_DC_VIDEO - sta VERA_DC_VIDEO - // [156] phi from main::vera_layer_hide1 to main::@17 [phi:main::vera_layer_hide1->main::@17] - // main::@17 - // memcpy_in_vram(0, (char*)0xF800, VERA_INC_1, 1, (char*)0xF000, VERA_INC_1, 256*8) - // [157] call memcpy_in_vram - // [266] phi from main::@17 to memcpy_in_vram [phi:main::@17->memcpy_in_vram] - // [266] phi memcpy_in_vram::num#4 = $100*8 [phi:main::@17->memcpy_in_vram#0] -- vwuz1=vwuc1 - lda #<$100*8 - sta.z memcpy_in_vram.num - lda #>$100*8 - sta.z memcpy_in_vram.num+1 - // [266] phi memcpy_in_vram::dest_bank#3 = 0 [phi:main::@17->memcpy_in_vram#1] -- vbuz1=vbuc1 - lda #0 - sta.z memcpy_in_vram.dest_bank - // [266] phi memcpy_in_vram::dest#3 = (void *)(char *) 63488 [phi:main::@17->memcpy_in_vram#2] -- pvoz1=pvoc1 - lda #<$f800 - sta.z memcpy_in_vram.dest - lda #>$f800 - sta.z memcpy_in_vram.dest+1 - // [266] phi memcpy_in_vram::src_bank#3 = 1 [phi:main::@17->memcpy_in_vram#3] -- vbuyy=vbuc1 - ldy #1 - // [266] phi memcpy_in_vram::src#3 = (void *)(char *) 61440 [phi:main::@17->memcpy_in_vram#4] -- pvoz1=pvoc1 - lda #<$f000 - sta.z memcpy_in_vram.src - lda #>$f000 - sta.z memcpy_in_vram.src+1 - jsr memcpy_in_vram - // [158] phi from main::@17 to main::@36 [phi:main::@17->main::@36] - // main::@36 - // vera_layer_mode_tile(1, 0x00000, 0x0F800, 128, 128, 8, 8, 1) - // [159] call vera_layer_mode_tile - // [286] phi from main::@36 to vera_layer_mode_tile [phi:main::@36->vera_layer_mode_tile] - // [286] phi vera_layer_mode_tile::tileheight#10 = 8 [phi:main::@36->vera_layer_mode_tile#0] -- vbuz1=vbuc1 - lda #8 - sta.z vera_layer_mode_tile.tileheight - // [286] phi vera_layer_mode_tile::tilewidth#10 = 8 [phi:main::@36->vera_layer_mode_tile#1] -- vbuz1=vbuc1 - sta.z vera_layer_mode_tile.tilewidth - // [286] phi vera_layer_mode_tile::tilebase_address#10 = $f800 [phi:main::@36->vera_layer_mode_tile#2] -- vduz1=vduc1 - lda #<$f800 - sta.z vera_layer_mode_tile.tilebase_address_1 - lda #>$f800 - sta.z vera_layer_mode_tile.tilebase_address_1+1 - lda #<$f800>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+2 - lda #>$f800>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+3 - // [286] phi vera_layer_mode_tile::mapbase_address#10 = 0 [phi:main::@36->vera_layer_mode_tile#3] -- vduz1=vbuc1 - lda #0 - sta.z vera_layer_mode_tile.mapbase_address_1 - sta.z vera_layer_mode_tile.mapbase_address_1+1 - sta.z vera_layer_mode_tile.mapbase_address_1+2 - sta.z vera_layer_mode_tile.mapbase_address_1+3 - // [286] phi vera_layer_mode_tile::mapheight#10 = $80 [phi:main::@36->vera_layer_mode_tile#4] -- vwuz1=vbuc1 - lda #<$80 - sta.z vera_layer_mode_tile.mapheight - lda #>$80 - sta.z vera_layer_mode_tile.mapheight+1 - // [286] phi vera_layer_mode_tile::layer#10 = 1 [phi:main::@36->vera_layer_mode_tile#5] -- vbuz1=vbuc1 - lda #1 - sta.z vera_layer_mode_tile.layer - // [286] phi vera_layer_mode_tile::mapwidth#10 = $80 [phi:main::@36->vera_layer_mode_tile#6] -- vwuz1=vbuc1 - lda #<$80 - sta.z vera_layer_mode_tile.mapwidth - lda #>$80 - sta.z vera_layer_mode_tile.mapwidth+1 - // [286] phi vera_layer_mode_tile::color_depth#5 = 1 [phi:main::@36->vera_layer_mode_tile#7] -- vbuxx=vbuc1 - ldx #1 - jsr vera_layer_mode_tile - // [160] phi from main::@36 to main::@37 [phi:main::@36->main::@37] - // main::@37 - // vera_layer_mode_tile(0, 0x00000, 0x0F800, 128, 128, 8, 8, 1) - // [161] call vera_layer_mode_tile - // [286] phi from main::@37 to vera_layer_mode_tile [phi:main::@37->vera_layer_mode_tile] - // [286] phi vera_layer_mode_tile::tileheight#10 = 8 [phi:main::@37->vera_layer_mode_tile#0] -- vbuz1=vbuc1 - lda #8 - sta.z vera_layer_mode_tile.tileheight - // [286] phi vera_layer_mode_tile::tilewidth#10 = 8 [phi:main::@37->vera_layer_mode_tile#1] -- vbuz1=vbuc1 - sta.z vera_layer_mode_tile.tilewidth - // [286] phi vera_layer_mode_tile::tilebase_address#10 = $f800 [phi:main::@37->vera_layer_mode_tile#2] -- vduz1=vduc1 - lda #<$f800 - sta.z vera_layer_mode_tile.tilebase_address_1 - lda #>$f800 - sta.z vera_layer_mode_tile.tilebase_address_1+1 - lda #<$f800>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+2 - lda #>$f800>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+3 - // [286] phi vera_layer_mode_tile::mapbase_address#10 = 0 [phi:main::@37->vera_layer_mode_tile#3] -- vduz1=vbuc1 - lda #0 - sta.z vera_layer_mode_tile.mapbase_address_1 - sta.z vera_layer_mode_tile.mapbase_address_1+1 - sta.z vera_layer_mode_tile.mapbase_address_1+2 - sta.z vera_layer_mode_tile.mapbase_address_1+3 - // [286] phi vera_layer_mode_tile::mapheight#10 = $80 [phi:main::@37->vera_layer_mode_tile#4] -- vwuz1=vbuc1 - lda #<$80 - sta.z vera_layer_mode_tile.mapheight - lda #>$80 - sta.z vera_layer_mode_tile.mapheight+1 - // [286] phi vera_layer_mode_tile::layer#10 = 0 [phi:main::@37->vera_layer_mode_tile#5] -- vbuz1=vbuc1 - lda #0 - sta.z vera_layer_mode_tile.layer - // [286] phi vera_layer_mode_tile::mapwidth#10 = $80 [phi:main::@37->vera_layer_mode_tile#6] -- vwuz1=vbuc1 - lda #<$80 - sta.z vera_layer_mode_tile.mapwidth - lda #>$80 - sta.z vera_layer_mode_tile.mapwidth+1 - // [286] phi vera_layer_mode_tile::color_depth#5 = 1 [phi:main::@37->vera_layer_mode_tile#7] -- vbuxx=vbuc1 - ldx #1 - jsr vera_layer_mode_tile - // [162] phi from main::@37 to main::@38 [phi:main::@37->main::@38] - // main::@38 - // screenlayer(1) - // [163] call screenlayer - jsr screenlayer - // main::textcolor2 - // vera_layer_set_textcolor(conio_screen_layer, color) - // [164] vera_layer_set_textcolor::layer#2 = conio_screen_layer -- vbuyy=vbuz1 - ldy.z conio_screen_layer - // [165] call vera_layer_set_textcolor - // [223] phi from main::textcolor2 to vera_layer_set_textcolor [phi:main::textcolor2->vera_layer_set_textcolor] - // [223] phi vera_layer_set_textcolor::layer#3 = vera_layer_set_textcolor::layer#2 [phi:main::textcolor2->vera_layer_set_textcolor#0] -- register_copy - jsr vera_layer_set_textcolor - // main::bgcolor2 - // vera_layer_set_backcolor(conio_screen_layer, color) - // [166] vera_layer_set_backcolor::layer#2 = conio_screen_layer -- vbuyy=vbuz1 - ldy.z conio_screen_layer - // [167] call vera_layer_set_backcolor - // [226] phi from main::bgcolor2 to vera_layer_set_backcolor [phi:main::bgcolor2->vera_layer_set_backcolor] - // [226] phi vera_layer_set_backcolor::color#3 = BLUE [phi:main::bgcolor2->vera_layer_set_backcolor#0] -- vbuaa=vbuc1 - lda #BLUE - // [226] phi vera_layer_set_backcolor::layer#3 = vera_layer_set_backcolor::layer#2 [phi:main::bgcolor2->vera_layer_set_backcolor#1] -- register_copy - jsr vera_layer_set_backcolor - // [168] phi from main::bgcolor2 to main::@18 [phi:main::bgcolor2->main::@18] - // main::@18 - // clrscr() - // [169] call clrscr - jsr clrscr - // main::@return - // } - // [170] return - rts - .segment Data - tiles: .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - s: .text @"vera in tile mode 8 x 8, color depth 8 bits per pixel.\n" - .byte 0 - s1: .text @"in this mode, tiles are 8 pixels wide and 8 pixels tall.\n" - .byte 0 - s2: .text @"each tile can have a variation of 256 colors.\n" - .byte 0 - s3: .text @"the vera palette of 256 colors, can be used by setting the palette\n" - .byte 0 - s4: .text @"offset for each tile.\n" - .byte 0 - s5: .text @"here each column is displaying the same tile, but with different offsets!\n" - .byte 0 - s6: .text @"each offset aligns to multiples of 16 colors in the palette!.\n" - .byte 0 - s7: .text @"however, the first color will always be transparent (black).\n" - .byte 0 -} -.segment Code - // vera_layer_mode_text -// Set a vera layer in text mode and configure the: -// - layer: Value of 0 or 1. -// - mapbase_address: A dword typed address (4 bytes), that specifies the full address of the map base. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective mapbase vera register. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// - tilebase_address: A dword typed address (4 bytes), that specifies the base address of the tile map. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective tilebase vera register. -// Note that the resulting vera register holds only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// - mapwidth: The width of the map in number of tiles. -// - mapheight: The height of the map in number of tiles. -// - tilewidth: The width of a tile, which can be 8 or 16 pixels. -// - tileheight: The height of a tile, which can be 8 or 16 pixels. -// - color_mode: The color mode, which can be 16 or 256. -// void vera_layer_mode_text(char layer, unsigned long mapbase_address, unsigned long tilebase_address, unsigned int mapwidth, unsigned int mapheight, char tilewidth, char tileheight, unsigned int color_mode) -vera_layer_mode_text: { - .const mapbase_address = 0 - .const tilebase_address = $f800 - .const mapwidth = $80 - .const mapheight = $40 - .const tilewidth = 8 - .const tileheight = 8 - .label layer = 1 - // vera_layer_mode_tile( layer, mapbase_address, tilebase_address, mapwidth, mapheight, tilewidth, tileheight, 1 ) - // [172] call vera_layer_mode_tile - // [286] phi from vera_layer_mode_text to vera_layer_mode_tile [phi:vera_layer_mode_text->vera_layer_mode_tile] - // [286] phi vera_layer_mode_tile::tileheight#10 = vera_layer_mode_text::tileheight#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#0] -- vbuz1=vbuc1 - lda #tileheight - sta.z vera_layer_mode_tile.tileheight - // [286] phi vera_layer_mode_tile::tilewidth#10 = vera_layer_mode_text::tilewidth#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#1] -- vbuz1=vbuc1 - lda #tilewidth - sta.z vera_layer_mode_tile.tilewidth - // [286] phi vera_layer_mode_tile::tilebase_address#10 = vera_layer_mode_text::tilebase_address#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#2] -- vduz1=vduc1 - lda #tilebase_address - sta.z vera_layer_mode_tile.tilebase_address_1+1 - lda #>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+2 - lda #>tilebase_address>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+3 - // [286] phi vera_layer_mode_tile::mapbase_address#10 = vera_layer_mode_text::mapbase_address#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#3] -- vduz1=vduc1 - lda #mapbase_address - sta.z vera_layer_mode_tile.mapbase_address_1+1 - lda #>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+2 - lda #>mapbase_address>>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+3 - // [286] phi vera_layer_mode_tile::mapheight#10 = vera_layer_mode_text::mapheight#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#4] -- vwuz1=vwuc1 - lda #mapheight - sta.z vera_layer_mode_tile.mapheight+1 - // [286] phi vera_layer_mode_tile::layer#10 = vera_layer_mode_text::layer#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#5] -- vbuz1=vbuc1 - lda #layer - sta.z vera_layer_mode_tile.layer - // [286] phi vera_layer_mode_tile::mapwidth#10 = vera_layer_mode_text::mapwidth#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#6] -- vwuz1=vwuc1 - lda #mapwidth - sta.z vera_layer_mode_tile.mapwidth+1 - // [286] phi vera_layer_mode_tile::color_depth#5 = 1 [phi:vera_layer_mode_text->vera_layer_mode_tile#7] -- vbuxx=vbuc1 - ldx #1 - jsr vera_layer_mode_tile - // [173] phi from vera_layer_mode_text to vera_layer_mode_text::@1 [phi:vera_layer_mode_text->vera_layer_mode_text::@1] - // vera_layer_mode_text::@1 - // vera_layer_set_text_color_mode( layer, VERA_LAYER_CONFIG_16C ) - // [174] call vera_layer_set_text_color_mode - jsr vera_layer_set_text_color_mode - // vera_layer_mode_text::@return - // } - // [175] return - rts -} - // screensize -// Return the current screen size. -// void screensize(char *x, char *y) -screensize: { - .label x = conio_screen_width - .label y = conio_screen_height - // char hscale = (*VERA_DC_HSCALE) >> 7 - // [176] screensize::hscale#0 = *VERA_DC_HSCALE >> 7 -- vbuaa=_deref_pbuc1_ror_7 - // VERA returns in VERA_DC_HSCALE the value of 128 when 80 columns is used in text mode, - // and the value of 64 when 40 columns is used in text mode. - // Basically, 40 columns mode in the VERA is a double scan mode. - // Same for the VERA_DC_VSCALE mode, but then the subdivision is 60 or 30 rows. - // I still need to test the other modes, but this will suffice for now for the pure text modes. - lda VERA_DC_HSCALE - rol - rol - and #1 - // 40 << hscale - // [177] screensize::$1 = $28 << screensize::hscale#0 -- vbuaa=vbuc1_rol_vbuaa - tay - lda #$28 - cpy #0 - beq !e+ - !: - asl - dey - bne !- - !e: - // *x = 40 << hscale - // [178] *screensize::x#0 = screensize::$1 -- _deref_pbuc1=vbuaa - sta.z x - // char vscale = (*VERA_DC_VSCALE) >> 7 - // [179] screensize::vscale#0 = *VERA_DC_VSCALE >> 7 -- vbuaa=_deref_pbuc1_ror_7 - lda VERA_DC_VSCALE - rol - rol - and #1 - // 30 << vscale - // [180] screensize::$3 = $1e << screensize::vscale#0 -- vbuaa=vbuc1_rol_vbuaa - tay - lda #$1e - cpy #0 - beq !e+ - !: - asl - dey - bne !- - !e: - // *y = 30 << vscale - // [181] *screensize::y#0 = screensize::$3 -- _deref_pbuc1=vbuaa - sta.z y - // screensize::@return - // } - // [182] return - rts -} - // screenlayer -// Set the layer with which the conio will interact. -// - layer: value of 0 or 1. -// void screenlayer(char layer) -screenlayer: { - .label __2 = $10 - .label __4 = $35 - .label __5 = $3a - .label vera_layer_get_width1_config = $22 - .label vera_layer_get_width1_return = $10 - .label vera_layer_get_height1_config = $2b - .label vera_layer_get_height1_return = $3a - // conio_screen_layer = layer - // [183] conio_screen_layer = 1 -- vbuz1=vbuc1 - lda #1 - sta.z conio_screen_layer - // vera_layer_get_mapbase_bank(conio_screen_layer) - // [184] vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer -- vbuyy=vbuz1 - tay - // [185] call vera_layer_get_mapbase_bank - jsr vera_layer_get_mapbase_bank - // [186] vera_layer_get_mapbase_bank::return#2 = vera_layer_get_mapbase_bank::return#0 - // screenlayer::@3 - // [187] CONIO_SCREEN_BANK#15 = vera_layer_get_mapbase_bank::return#2 - // vera_layer_get_mapbase_offset(conio_screen_layer) - // [188] vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer -- vbuaa=vbuz1 - lda.z conio_screen_layer - // [189] call vera_layer_get_mapbase_offset - jsr vera_layer_get_mapbase_offset - // [190] vera_layer_get_mapbase_offset::return#2 = vera_layer_get_mapbase_offset::return#0 - // screenlayer::@4 - // [191] CONIO_SCREEN_TEXT#17 = vera_layer_get_mapbase_offset::return#2 -- vwuz1=vwuz2 - lda.z vera_layer_get_mapbase_offset.return - sta.z CONIO_SCREEN_TEXT_1 - lda.z vera_layer_get_mapbase_offset.return+1 - sta.z CONIO_SCREEN_TEXT_1+1 - // vera_layer_get_width(conio_screen_layer) - // [192] screenlayer::vera_layer_get_width1_layer#0 = conio_screen_layer -- vbuaa=vbuz1 - lda.z conio_screen_layer - // screenlayer::vera_layer_get_width1 - // byte* config = vera_layer_config[layer] - // [193] screenlayer::vera_layer_get_width1_$2 = screenlayer::vera_layer_get_width1_layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [194] screenlayer::vera_layer_get_width1_config#0 = vera_layer_config[screenlayer::vera_layer_get_width1_$2] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_config,y - sta.z vera_layer_get_width1_config - lda vera_layer_config+1,y - sta.z vera_layer_get_width1_config+1 - // *config & VERA_LAYER_WIDTH_MASK - // [195] screenlayer::vera_layer_get_width1_$0 = *screenlayer::vera_layer_get_width1_config#0 & VERA_LAYER_WIDTH_MASK -- vbuaa=_deref_pbuz1_band_vbuc1 - lda #VERA_LAYER_WIDTH_MASK - ldy #0 - and (vera_layer_get_width1_config),y - // (*config & VERA_LAYER_WIDTH_MASK) >> 4 - // [196] screenlayer::vera_layer_get_width1_$1 = screenlayer::vera_layer_get_width1_$0 >> 4 -- vbuaa=vbuaa_ror_4 - lsr - lsr - lsr - lsr - // return VERA_LAYER_WIDTH[ (*config & VERA_LAYER_WIDTH_MASK) >> 4]; - // [197] screenlayer::vera_layer_get_width1_$3 = screenlayer::vera_layer_get_width1_$1 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [198] screenlayer::vera_layer_get_width1_return#0 = VERA_LAYER_WIDTH[screenlayer::vera_layer_get_width1_$3] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda VERA_LAYER_WIDTH,y - sta.z vera_layer_get_width1_return - lda VERA_LAYER_WIDTH+1,y - sta.z vera_layer_get_width1_return+1 - // screenlayer::vera_layer_get_width1_@return - // } - // [199] screenlayer::vera_layer_get_width1_return#1 = screenlayer::vera_layer_get_width1_return#0 - // screenlayer::@1 - // vera_layer_get_width(conio_screen_layer) - // [200] screenlayer::$2 = screenlayer::vera_layer_get_width1_return#1 - // conio_width = vera_layer_get_width(conio_screen_layer) - // [201] conio_width = screenlayer::$2 -- vwuz1=vwuz2 - lda.z __2 - sta.z conio_width - lda.z __2+1 - sta.z conio_width+1 - // vera_layer_get_rowshift(conio_screen_layer) - // [202] vera_layer_get_rowshift::layer#0 = conio_screen_layer -- vbuyy=vbuz1 - ldy.z conio_screen_layer - // [203] call vera_layer_get_rowshift - jsr vera_layer_get_rowshift - // [204] vera_layer_get_rowshift::return#2 = vera_layer_get_rowshift::return#0 - // screenlayer::@5 - // [205] screenlayer::$3 = vera_layer_get_rowshift::return#2 - // conio_rowshift = vera_layer_get_rowshift(conio_screen_layer) - // [206] conio_rowshift = screenlayer::$3 -- vbuz1=vbuaa - sta.z conio_rowshift - // vera_layer_get_rowskip(conio_screen_layer) - // [207] vera_layer_get_rowskip::layer#0 = conio_screen_layer -- vbuaa=vbuz1 - lda.z conio_screen_layer - // [208] call vera_layer_get_rowskip - jsr vera_layer_get_rowskip - // [209] vera_layer_get_rowskip::return#2 = vera_layer_get_rowskip::return#0 - // screenlayer::@6 - // [210] screenlayer::$4 = vera_layer_get_rowskip::return#2 - // conio_rowskip = vera_layer_get_rowskip(conio_screen_layer) - // [211] conio_rowskip = screenlayer::$4 -- vwuz1=vwuz2 - lda.z __4 - sta.z conio_rowskip - lda.z __4+1 - sta.z conio_rowskip+1 - // vera_layer_get_height(conio_screen_layer) - // [212] screenlayer::vera_layer_get_height1_layer#0 = conio_screen_layer -- vbuaa=vbuz1 - lda.z conio_screen_layer - // screenlayer::vera_layer_get_height1 - // byte* config = vera_layer_config[layer] - // [213] screenlayer::vera_layer_get_height1_$2 = screenlayer::vera_layer_get_height1_layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [214] screenlayer::vera_layer_get_height1_config#0 = vera_layer_config[screenlayer::vera_layer_get_height1_$2] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_config,y - sta.z vera_layer_get_height1_config - lda vera_layer_config+1,y - sta.z vera_layer_get_height1_config+1 - // *config & VERA_LAYER_HEIGHT_MASK - // [215] screenlayer::vera_layer_get_height1_$0 = *screenlayer::vera_layer_get_height1_config#0 & VERA_LAYER_HEIGHT_MASK -- vbuaa=_deref_pbuz1_band_vbuc1 - lda #VERA_LAYER_HEIGHT_MASK - ldy #0 - and (vera_layer_get_height1_config),y - // (*config & VERA_LAYER_HEIGHT_MASK) >> 6 - // [216] screenlayer::vera_layer_get_height1_$1 = screenlayer::vera_layer_get_height1_$0 >> 6 -- vbuaa=vbuaa_ror_6 - rol - rol - rol - and #3 - // return VERA_LAYER_HEIGHT[ (*config & VERA_LAYER_HEIGHT_MASK) >> 6]; - // [217] screenlayer::vera_layer_get_height1_$3 = screenlayer::vera_layer_get_height1_$1 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [218] screenlayer::vera_layer_get_height1_return#0 = VERA_LAYER_HEIGHT[screenlayer::vera_layer_get_height1_$3] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda VERA_LAYER_HEIGHT,y - sta.z vera_layer_get_height1_return - lda VERA_LAYER_HEIGHT+1,y - sta.z vera_layer_get_height1_return+1 - // screenlayer::vera_layer_get_height1_@return - // } - // [219] screenlayer::vera_layer_get_height1_return#1 = screenlayer::vera_layer_get_height1_return#0 - // screenlayer::@2 - // vera_layer_get_height(conio_screen_layer) - // [220] screenlayer::$5 = screenlayer::vera_layer_get_height1_return#1 - // conio_height = vera_layer_get_height(conio_screen_layer) - // [221] conio_height = screenlayer::$5 -- vwuz1=vwuz2 - lda.z __5 - sta.z conio_height - lda.z __5+1 - sta.z conio_height+1 - // screenlayer::@return - // } - // [222] return - rts -} - // vera_layer_set_textcolor -// Set the front color for text output. The old front text color setting is returned. -// - layer: Value of 0 or 1. -// - color: a 4 bit value ( decimal between 0 and 15) when the VERA works in 16x16 color text mode. -// An 8 bit value (decimal between 0 and 255) when the VERA works in 256 text mode. -// Note that on the VERA, the transparent color has value 0. -// char vera_layer_set_textcolor(__register(Y) char layer, char color) -vera_layer_set_textcolor: { - // vera_layer_textcolor[layer] = color - // [224] vera_layer_textcolor[vera_layer_set_textcolor::layer#3] = WHITE -- pbuc1_derefidx_vbuyy=vbuc2 - lda #WHITE - sta vera_layer_textcolor,y - // vera_layer_set_textcolor::@return - // } - // [225] return - rts -} - // vera_layer_set_backcolor -// Set the back color for text output. The old back text color setting is returned. -// - layer: Value of 0 or 1. -// - color: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// char vera_layer_set_backcolor(__register(Y) char layer, __register(A) char color) -vera_layer_set_backcolor: { - // vera_layer_backcolor[layer] = color - // [227] vera_layer_backcolor[vera_layer_set_backcolor::layer#3] = vera_layer_set_backcolor::color#3 -- pbuc1_derefidx_vbuyy=vbuaa - sta vera_layer_backcolor,y - // vera_layer_set_backcolor::@return - // } - // [228] return - rts -} - // vera_layer_set_mapbase -// Set the base of the map layer with which the conio will interact. -// - layer: Value of 0 or 1. -// - mapbase: Specifies the base address of the tile map. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// void vera_layer_set_mapbase(__register(A) char layer, __register(X) char mapbase) -vera_layer_set_mapbase: { - .label addr = $22 - // byte* addr = vera_layer_mapbase[layer] - // [230] vera_layer_set_mapbase::$0 = vera_layer_set_mapbase::layer#3 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [231] vera_layer_set_mapbase::addr#0 = vera_layer_mapbase[vera_layer_set_mapbase::$0] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_mapbase,y - sta.z addr - lda vera_layer_mapbase+1,y - sta.z addr+1 - // *addr = mapbase - // [232] *vera_layer_set_mapbase::addr#0 = vera_layer_set_mapbase::mapbase#3 -- _deref_pbuz1=vbuxx - txa - ldy #0 - sta (addr),y - // vera_layer_set_mapbase::@return - // } - // [233] return - rts -} - // gotoxy -// Set the cursor to the specified position -// void gotoxy(char x, __register(X) char y) -gotoxy: { - .label __6 = $10 - .label line_offset = $10 - // if(y>CONIO_HEIGHT) - // [235] if(gotoxy::y#4<=conio_screen_height) goto gotoxy::@4 -- vbuxx_le_vbuz1_then_la1 - lda.z conio_screen_height - stx.z $ff - cmp.z $ff - bcs __b1 - // [237] phi from gotoxy to gotoxy::@1 [phi:gotoxy->gotoxy::@1] - // [237] phi gotoxy::y#5 = 0 [phi:gotoxy->gotoxy::@1#0] -- vbuxx=vbuc1 - ldx #0 - // [236] phi from gotoxy to gotoxy::@4 [phi:gotoxy->gotoxy::@4] - // gotoxy::@4 - // [237] phi from gotoxy::@4 to gotoxy::@1 [phi:gotoxy::@4->gotoxy::@1] - // [237] phi gotoxy::y#5 = gotoxy::y#4 [phi:gotoxy::@4->gotoxy::@1#0] -- register_copy - // gotoxy::@1 - __b1: - // if(x>=CONIO_WIDTH) - // [238] if(0gotoxy::@3] - // gotoxy::@3 - // gotoxy::@2 - // conio_cursor_x[conio_screen_layer] = x - // [240] conio_cursor_x[conio_screen_layer] = 0 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #0 - ldy.z conio_screen_layer - sta conio_cursor_x,y - // conio_cursor_y[conio_screen_layer] = y - // [241] conio_cursor_y[conio_screen_layer] = gotoxy::y#5 -- pbuc1_derefidx_vbuz1=vbuxx - txa - sta conio_cursor_y,y - // unsigned int line_offset = (unsigned int)y << conio_rowshift - // [242] gotoxy::$6 = (unsigned int)gotoxy::y#5 -- vwuz1=_word_vbuxx - txa - sta.z __6 - lda #0 - sta.z __6+1 - // [243] gotoxy::line_offset#0 = gotoxy::$6 << conio_rowshift -- vwuz1=vwuz1_rol_vbuz2 - ldy.z conio_rowshift - beq !e+ - !: - asl.z line_offset - rol.z line_offset+1 - dey - bne !- - !e: - // conio_line_text[conio_screen_layer] = line_offset - // [244] gotoxy::$5 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [245] conio_line_text[gotoxy::$5] = gotoxy::line_offset#0 -- pwuc1_derefidx_vbuaa=vwuz1 - tay - lda.z line_offset - sta conio_line_text,y - lda.z line_offset+1 - sta conio_line_text+1,y - // gotoxy::@return - // } - // [246] return - rts -} - // vera_layer_get_color -// Get the text and back color for text output in 16 color mode. -// - layer: Value of 0 or 1. -// - return: an 8 bit value with bit 7:4 containing the back color and bit 3:0 containing the front color. -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_color(__register(X) char layer) -vera_layer_get_color: { - .label addr = 4 - // byte* addr = vera_layer_config[layer] - // [248] vera_layer_get_color::$3 = vera_layer_get_color::layer#2 << 1 -- vbuaa=vbuxx_rol_1 - txa - asl - // [249] vera_layer_get_color::addr#0 = vera_layer_config[vera_layer_get_color::$3] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_config,y - sta.z addr - lda vera_layer_config+1,y - sta.z addr+1 - // *addr & VERA_LAYER_CONFIG_256C - // [250] vera_layer_get_color::$0 = *vera_layer_get_color::addr#0 & VERA_LAYER_CONFIG_256C -- vbuaa=_deref_pbuz1_band_vbuc1 - lda #VERA_LAYER_CONFIG_256C - ldy #0 - and (addr),y - // if( *addr & VERA_LAYER_CONFIG_256C ) - // [251] if(0!=vera_layer_get_color::$0) goto vera_layer_get_color::@1 -- 0_neq_vbuaa_then_la1 - cmp #0 - bne __b1 - // vera_layer_get_color::@2 - // vera_layer_backcolor[layer] << 4 - // [252] vera_layer_get_color::$1 = vera_layer_backcolor[vera_layer_get_color::layer#2] << 4 -- vbuaa=pbuc1_derefidx_vbuxx_rol_4 - lda vera_layer_backcolor,x - asl - asl - asl - asl - // return ((vera_layer_backcolor[layer] << 4) | vera_layer_textcolor[layer]); - // [253] vera_layer_get_color::return#2 = vera_layer_get_color::$1 | vera_layer_textcolor[vera_layer_get_color::layer#2] -- vbuaa=vbuaa_bor_pbuc1_derefidx_vbuxx - ora vera_layer_textcolor,x - // [254] phi from vera_layer_get_color::@1 vera_layer_get_color::@2 to vera_layer_get_color::@return [phi:vera_layer_get_color::@1/vera_layer_get_color::@2->vera_layer_get_color::@return] - // [254] phi vera_layer_get_color::return#3 = vera_layer_get_color::return#1 [phi:vera_layer_get_color::@1/vera_layer_get_color::@2->vera_layer_get_color::@return#0] -- register_copy - // vera_layer_get_color::@return - // } - // [255] return - rts - // vera_layer_get_color::@1 - __b1: - // return (vera_layer_textcolor[layer]); - // [256] vera_layer_get_color::return#1 = vera_layer_textcolor[vera_layer_get_color::layer#2] -- vbuaa=pbuc1_derefidx_vbuxx - lda vera_layer_textcolor,x - rts -} - // cputln -// Print a newline -cputln: { - .label temp = 4 - // word temp = conio_line_text[conio_screen_layer] - // [257] cputln::$2 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [258] cputln::temp#0 = conio_line_text[cputln::$2] -- vwuz1=pwuc1_derefidx_vbuaa - // TODO: This needs to be optimized! other variations don't compile because of sections not available! - tay - lda conio_line_text,y - sta.z temp - lda conio_line_text+1,y - sta.z temp+1 - // temp += conio_rowskip - // [259] cputln::temp#1 = cputln::temp#0 + conio_rowskip -- vwuz1=vwuz1_plus_vwuz2 - clc - lda.z temp - adc.z conio_rowskip - sta.z temp - lda.z temp+1 - adc.z conio_rowskip+1 - sta.z temp+1 - // conio_line_text[conio_screen_layer] = temp - // [260] cputln::$3 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [261] conio_line_text[cputln::$3] = cputln::temp#1 -- pwuc1_derefidx_vbuaa=vwuz1 - tay - lda.z temp - sta conio_line_text,y - lda.z temp+1 - sta conio_line_text+1,y - // conio_cursor_x[conio_screen_layer] = 0 - // [262] conio_cursor_x[conio_screen_layer] = 0 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #0 - ldy.z conio_screen_layer - sta conio_cursor_x,y - // conio_cursor_y[conio_screen_layer]++; - // [263] conio_cursor_y[conio_screen_layer] = ++ conio_cursor_y[conio_screen_layer] -- pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 - ldx.z conio_screen_layer - inc conio_cursor_y,x - // cscroll() - // [264] call cscroll - jsr cscroll - // cputln::@return - // } - // [265] return - rts -} - // memcpy_in_vram -// Copy block of memory (from VRAM to VRAM) -// Copies the values from the location pointed by src to the location pointed by dest. -// The method uses the VERA access ports 0 and 1 to copy data from and to in VRAM. -// - src_bank: 64K VRAM bank number to copy from (0/1). -// - src: pointer to the location to copy from. Note that the address is a 16 bit value! -// - src_increment: the increment indicator, VERA needs this because addressing increment is automated by VERA at each access. -// - dest_bank: 64K VRAM bank number to copy to (0/1). -// - dest: pointer to the location to copy to. Note that the address is a 16 bit value! -// - dest_increment: the increment indicator, VERA needs this because addressing increment is automated by VERA at each access. -// - num: The number of bytes to copy -// void memcpy_in_vram(__zp($a) char dest_bank, __zp(8) void *dest, char dest_increment, __register(Y) char src_bank, __zp(6) char *src, char src_increment, __zp(4) unsigned int num) -memcpy_in_vram: { - .label i = 2 - .label dest = 8 - .label src = 6 - .label num = 4 - .label dest_bank = $a - // *VERA_CTRL &= ~VERA_ADDRSEL - // [267] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // BYTE0(src) - // [268] memcpy_in_vram::$0 = byte0 memcpy_in_vram::src#3 -- vbuaa=_byte0_pvoz1 - lda.z src - // *VERA_ADDRX_L = BYTE0(src) - // [269] *VERA_ADDRX_L = memcpy_in_vram::$0 -- _deref_pbuc1=vbuaa - // Set address - sta VERA_ADDRX_L - // BYTE1(src) - // [270] memcpy_in_vram::$1 = byte1 memcpy_in_vram::src#3 -- vbuaa=_byte1_pvoz1 - lda.z src+1 - // *VERA_ADDRX_M = BYTE1(src) - // [271] *VERA_ADDRX_M = memcpy_in_vram::$1 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // src_increment | src_bank - // [272] memcpy_in_vram::$2 = VERA_INC_1 | memcpy_in_vram::src_bank#3 -- vbuaa=vbuc1_bor_vbuyy - tya - ora #VERA_INC_1 - // *VERA_ADDRX_H = src_increment | src_bank - // [273] *VERA_ADDRX_H = memcpy_in_vram::$2 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_H - // *VERA_CTRL |= VERA_ADDRSEL - // [274] *VERA_CTRL = *VERA_CTRL | VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 - // Select DATA1 - lda #VERA_ADDRSEL - ora VERA_CTRL - sta VERA_CTRL - // BYTE0(dest) - // [275] memcpy_in_vram::$3 = byte0 memcpy_in_vram::dest#3 -- vbuaa=_byte0_pvoz1 - lda.z dest - // *VERA_ADDRX_L = BYTE0(dest) - // [276] *VERA_ADDRX_L = memcpy_in_vram::$3 -- _deref_pbuc1=vbuaa - // Set address - sta VERA_ADDRX_L - // BYTE1(dest) - // [277] memcpy_in_vram::$4 = byte1 memcpy_in_vram::dest#3 -- vbuaa=_byte1_pvoz1 - lda.z dest+1 - // *VERA_ADDRX_M = BYTE1(dest) - // [278] *VERA_ADDRX_M = memcpy_in_vram::$4 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // dest_increment | dest_bank - // [279] memcpy_in_vram::$5 = VERA_INC_1 | memcpy_in_vram::dest_bank#3 -- vbuaa=vbuc1_bor_vbuz1 - lda #VERA_INC_1 - ora.z dest_bank - // *VERA_ADDRX_H = dest_increment | dest_bank - // [280] *VERA_ADDRX_H = memcpy_in_vram::$5 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_H - // [281] phi from memcpy_in_vram to memcpy_in_vram::@1 [phi:memcpy_in_vram->memcpy_in_vram::@1] - // [281] phi memcpy_in_vram::i#2 = 0 [phi:memcpy_in_vram->memcpy_in_vram::@1#0] -- vwuz1=vwuc1 - lda #<0 - sta.z i - sta.z i+1 - // Transfer the data - // memcpy_in_vram::@1 - __b1: - // for(unsigned int i=0; imemcpy_in_vram::@1] - // [281] phi memcpy_in_vram::i#2 = memcpy_in_vram::i#1 [phi:memcpy_in_vram::@2->memcpy_in_vram::@1#0] -- register_copy - jmp __b1 -} - // vera_layer_mode_tile -// Set a vera layer in tile mode and configure the: -// - layer: Value of 0 or 1. -// - mapbase_address: A dword typed address (4 bytes), that specifies the full address of the map base. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective mapbase vera register. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// - tilebase_address: A dword typed address (4 bytes), that specifies the base address of the tile map. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective tilebase vera register. -// Note that the resulting vera register holds only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// - mapwidth: The width of the map in number of tiles. -// - mapheight: The height of the map in number of tiles. -// - tilewidth: The width of a tile, which can be 8 or 16 pixels. -// - tileheight: The height of a tile, which can be 8 or 16 pixels. -// - color_depth: The color depth in bits per pixel (BPP), which can be 1, 2, 4 or 8. -// void vera_layer_mode_tile(__zp($3e) char layer, __zp($2d) unsigned long mapbase_address, __zp($31) unsigned long tilebase_address, __zp($10) unsigned int mapwidth, __zp($44) unsigned int mapheight, __zp($54) char tilewidth, __zp($55) char tileheight, __register(X) char color_depth) -vera_layer_mode_tile: { - .label __1 = $35 - .label __6 = $2b - .label __17 = $3d - .label __18 = $3c - .label mapbase_address = $2d - .label tilebase_address = $31 - .label layer = $3e - .label mapwidth = $10 - .label mapheight = $44 - .label mapbase_address_1 = $4a - .label tileheight = $55 - .label tilebase_address_1 = $4e - .label tilewidth = $54 - // case 1: - // config |= VERA_LAYER_COLOR_DEPTH_1BPP; - // break; - // [287] if(vera_layer_mode_tile::color_depth#5==1) goto vera_layer_mode_tile::@5 -- vbuxx_eq_vbuc1_then_la1 - cpx #1 - beq __b1 - // vera_layer_mode_tile::@1 - // case 2: - // config |= VERA_LAYER_COLOR_DEPTH_2BPP; - // break; - // [288] if(vera_layer_mode_tile::color_depth#5==2) goto vera_layer_mode_tile::@5 -- vbuxx_eq_vbuc1_then_la1 - cpx #2 - beq __b2 - // vera_layer_mode_tile::@2 - // case 4: - // config |= VERA_LAYER_COLOR_DEPTH_4BPP; - // break; - // [289] if(vera_layer_mode_tile::color_depth#5==4) goto vera_layer_mode_tile::@5 -- vbuxx_eq_vbuc1_then_la1 - cpx #4 - beq __b3 - // vera_layer_mode_tile::@3 - // case 8: - // config |= VERA_LAYER_COLOR_DEPTH_8BPP; - // break; - // [290] if(vera_layer_mode_tile::color_depth#5!=8) goto vera_layer_mode_tile::@5 -- vbuxx_neq_vbuc1_then_la1 - cpx #8 - bne __b4 - // [291] phi from vera_layer_mode_tile::@3 to vera_layer_mode_tile::@4 [phi:vera_layer_mode_tile::@3->vera_layer_mode_tile::@4] - // vera_layer_mode_tile::@4 - // [292] phi from vera_layer_mode_tile::@4 to vera_layer_mode_tile::@5 [phi:vera_layer_mode_tile::@4->vera_layer_mode_tile::@5] - // [292] phi vera_layer_mode_tile::config#17 = VERA_LAYER_COLOR_DEPTH_8BPP [phi:vera_layer_mode_tile::@4->vera_layer_mode_tile::@5#0] -- vbuxx=vbuc1 - ldx #VERA_LAYER_COLOR_DEPTH_8BPP - jmp __b5 - // [292] phi from vera_layer_mode_tile to vera_layer_mode_tile::@5 [phi:vera_layer_mode_tile->vera_layer_mode_tile::@5] - __b1: - // [292] phi vera_layer_mode_tile::config#17 = VERA_LAYER_COLOR_DEPTH_1BPP [phi:vera_layer_mode_tile->vera_layer_mode_tile::@5#0] -- vbuxx=vbuc1 - ldx #VERA_LAYER_COLOR_DEPTH_1BPP - jmp __b5 - // [292] phi from vera_layer_mode_tile::@1 to vera_layer_mode_tile::@5 [phi:vera_layer_mode_tile::@1->vera_layer_mode_tile::@5] - __b2: - // [292] phi vera_layer_mode_tile::config#17 = VERA_LAYER_COLOR_DEPTH_2BPP [phi:vera_layer_mode_tile::@1->vera_layer_mode_tile::@5#0] -- vbuxx=vbuc1 - ldx #VERA_LAYER_COLOR_DEPTH_2BPP - jmp __b5 - // [292] phi from vera_layer_mode_tile::@2 to vera_layer_mode_tile::@5 [phi:vera_layer_mode_tile::@2->vera_layer_mode_tile::@5] - __b3: - // [292] phi vera_layer_mode_tile::config#17 = VERA_LAYER_COLOR_DEPTH_4BPP [phi:vera_layer_mode_tile::@2->vera_layer_mode_tile::@5#0] -- vbuxx=vbuc1 - ldx #VERA_LAYER_COLOR_DEPTH_4BPP - jmp __b5 - // [292] phi from vera_layer_mode_tile::@3 to vera_layer_mode_tile::@5 [phi:vera_layer_mode_tile::@3->vera_layer_mode_tile::@5] - __b4: - // [292] phi vera_layer_mode_tile::config#17 = 0 [phi:vera_layer_mode_tile::@3->vera_layer_mode_tile::@5#0] -- vbuxx=vbuc1 - ldx #0 - // vera_layer_mode_tile::@5 - __b5: - // case 32: - // config |= VERA_LAYER_WIDTH_32; - // vera_layer_rowshift[layer] = 6; - // vera_layer_rowskip[layer] = 64; - // break; - // [293] if(vera_layer_mode_tile::mapwidth#10==$20) goto vera_layer_mode_tile::@9 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapwidth+1 - bne !+ - lda.z mapwidth - cmp #$20 - bne !__b9+ - jmp __b9 - !__b9: - !: - // vera_layer_mode_tile::@6 - // case 64: - // config |= VERA_LAYER_WIDTH_64; - // vera_layer_rowshift[layer] = 7; - // vera_layer_rowskip[layer] = 128; - // break; - // [294] if(vera_layer_mode_tile::mapwidth#10==$40) goto vera_layer_mode_tile::@10 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapwidth+1 - bne !+ - lda.z mapwidth - cmp #$40 - bne !__b10+ - jmp __b10 - !__b10: - !: - // vera_layer_mode_tile::@7 - // case 128: - // config |= VERA_LAYER_WIDTH_128; - // vera_layer_rowshift[layer] = 8; - // vera_layer_rowskip[layer] = 256; - // break; - // [295] if(vera_layer_mode_tile::mapwidth#10==$80) goto vera_layer_mode_tile::@11 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapwidth+1 - bne !+ - lda.z mapwidth - cmp #$80 - bne !__b11+ - jmp __b11 - !__b11: - !: - // vera_layer_mode_tile::@8 - // case 256: - // config |= VERA_LAYER_WIDTH_256; - // vera_layer_rowshift[layer] = 9; - // vera_layer_rowskip[layer] = 512; - // break; - // [296] if(vera_layer_mode_tile::mapwidth#10!=$100) goto vera_layer_mode_tile::@13 -- vwuz1_neq_vwuc1_then_la1 - lda.z mapwidth+1 - cmp #>$100 - bne __b13 - lda.z mapwidth - cmp #<$100 - bne __b13 - // vera_layer_mode_tile::@12 - // config |= VERA_LAYER_WIDTH_256 - // [297] vera_layer_mode_tile::config#8 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_256 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_WIDTH_256 - tax - // vera_layer_rowshift[layer] = 9 - // [298] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 9 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #9 - ldy.z layer - sta vera_layer_rowshift,y - // vera_layer_rowskip[layer] = 512 - // [299] vera_layer_mode_tile::$14 = vera_layer_mode_tile::layer#10 << 1 -- vbuaa=vbuz1_rol_1 - tya - asl - // [300] vera_layer_rowskip[vera_layer_mode_tile::$14] = $200 -- pwuc1_derefidx_vbuaa=vwuc2 - tay - lda #<$200 - sta vera_layer_rowskip,y - lda #>$200 - sta vera_layer_rowskip+1,y - // [301] phi from vera_layer_mode_tile::@10 vera_layer_mode_tile::@11 vera_layer_mode_tile::@12 vera_layer_mode_tile::@8 vera_layer_mode_tile::@9 to vera_layer_mode_tile::@13 [phi:vera_layer_mode_tile::@10/vera_layer_mode_tile::@11/vera_layer_mode_tile::@12/vera_layer_mode_tile::@8/vera_layer_mode_tile::@9->vera_layer_mode_tile::@13] - // [301] phi vera_layer_mode_tile::config#21 = vera_layer_mode_tile::config#6 [phi:vera_layer_mode_tile::@10/vera_layer_mode_tile::@11/vera_layer_mode_tile::@12/vera_layer_mode_tile::@8/vera_layer_mode_tile::@9->vera_layer_mode_tile::@13#0] -- register_copy - // vera_layer_mode_tile::@13 - __b13: - // case 32: - // config |= VERA_LAYER_HEIGHT_32; - // break; - // [302] if(vera_layer_mode_tile::mapheight#10==$20) goto vera_layer_mode_tile::@20 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$20 - beq __b20 - !: - // vera_layer_mode_tile::@14 - // case 64: - // config |= VERA_LAYER_HEIGHT_64; - // break; - // [303] if(vera_layer_mode_tile::mapheight#10==$40) goto vera_layer_mode_tile::@17 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$40 - bne !__b17+ - jmp __b17 - !__b17: - !: - // vera_layer_mode_tile::@15 - // case 128: - // config |= VERA_LAYER_HEIGHT_128; - // break; - // [304] if(vera_layer_mode_tile::mapheight#10==$80) goto vera_layer_mode_tile::@18 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$80 - bne !__b18+ - jmp __b18 - !__b18: - !: - // vera_layer_mode_tile::@16 - // case 256: - // config |= VERA_LAYER_HEIGHT_256; - // break; - // [305] if(vera_layer_mode_tile::mapheight#10!=$100) goto vera_layer_mode_tile::@20 -- vwuz1_neq_vwuc1_then_la1 - lda.z mapheight+1 - cmp #>$100 - bne __b20 - lda.z mapheight - cmp #<$100 - bne __b20 - // vera_layer_mode_tile::@19 - // config |= VERA_LAYER_HEIGHT_256 - // [306] vera_layer_mode_tile::config#12 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_256 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_HEIGHT_256 - tax - // [307] phi from vera_layer_mode_tile::@13 vera_layer_mode_tile::@16 vera_layer_mode_tile::@17 vera_layer_mode_tile::@18 vera_layer_mode_tile::@19 to vera_layer_mode_tile::@20 [phi:vera_layer_mode_tile::@13/vera_layer_mode_tile::@16/vera_layer_mode_tile::@17/vera_layer_mode_tile::@18/vera_layer_mode_tile::@19->vera_layer_mode_tile::@20] - // [307] phi vera_layer_mode_tile::config#25 = vera_layer_mode_tile::config#21 [phi:vera_layer_mode_tile::@13/vera_layer_mode_tile::@16/vera_layer_mode_tile::@17/vera_layer_mode_tile::@18/vera_layer_mode_tile::@19->vera_layer_mode_tile::@20#0] -- register_copy - // vera_layer_mode_tile::@20 - __b20: - // vera_layer_set_config(layer, config) - // [308] vera_layer_set_config::layer#0 = vera_layer_mode_tile::layer#10 -- vbuaa=vbuz1 - lda.z layer - // [309] vera_layer_set_config::config#0 = vera_layer_mode_tile::config#25 - // [310] call vera_layer_set_config - jsr vera_layer_set_config - // vera_layer_mode_tile::@27 - // WORD0(mapbase_address) - // [311] vera_layer_mode_tile::$1 = word0 vera_layer_mode_tile::mapbase_address#10 -- vwuz1=_word0_vduz2 - lda.z mapbase_address_1 - sta.z __1 - lda.z mapbase_address_1+1 - sta.z __1+1 - // vera_mapbase_offset[layer] = WORD0(mapbase_address) - // [312] vera_layer_mode_tile::$17 = vera_layer_mode_tile::layer#10 << 1 -- vbuz1=vbuz2_rol_1 - lda.z layer - asl - sta.z __17 - // [313] vera_mapbase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$1 -- pwuc1_derefidx_vbuz1=vwuz2 - // mapbase - tay - lda.z __1 - sta vera_mapbase_offset,y - lda.z __1+1 - sta vera_mapbase_offset+1,y - // BYTE2(mapbase_address) - // [314] vera_layer_mode_tile::$2 = byte2 vera_layer_mode_tile::mapbase_address#10 -- vbuaa=_byte2_vduz1 - lda.z mapbase_address_1+2 - // vera_mapbase_bank[layer] = BYTE2(mapbase_address) - // [315] vera_mapbase_bank[vera_layer_mode_tile::layer#10] = vera_layer_mode_tile::$2 -- pbuc1_derefidx_vbuz1=vbuaa - ldy.z layer - sta vera_mapbase_bank,y - // vera_mapbase_address[layer] = mapbase_address - // [316] vera_layer_mode_tile::$18 = vera_layer_mode_tile::layer#10 << 2 -- vbuz1=vbuz2_rol_2 - tya - asl - asl - sta.z __18 - // [317] vera_mapbase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::mapbase_address#10 -- pduc1_derefidx_vbuz1=vduz2 - tay - lda.z mapbase_address_1 - sta vera_mapbase_address,y - lda.z mapbase_address_1+1 - sta vera_mapbase_address+1,y - lda.z mapbase_address_1+2 - sta vera_mapbase_address+2,y - lda.z mapbase_address_1+3 - sta vera_mapbase_address+3,y - // mapbase_address = mapbase_address >> 1 - // [318] vera_layer_mode_tile::mapbase_address#0 = vera_layer_mode_tile::mapbase_address#10 >> 1 -- vduz1=vduz2_ror_1 - lsr - sta.z mapbase_address+3 - lda.z mapbase_address_1+2 - ror - sta.z mapbase_address+2 - lda.z mapbase_address_1+1 - ror - sta.z mapbase_address+1 - lda.z mapbase_address_1 - ror - sta.z mapbase_address - // byte mapbase = BYTE1(mapbase_address) - // [319] vera_layer_mode_tile::mapbase#0 = byte1 vera_layer_mode_tile::mapbase_address#0 -- vbuxx=_byte1_vduz1 - ldx.z mapbase_address+1 - // vera_layer_set_mapbase(layer,mapbase) - // [320] vera_layer_set_mapbase::layer#0 = vera_layer_mode_tile::layer#10 -- vbuaa=vbuz1 - lda.z layer - // [321] vera_layer_set_mapbase::mapbase#0 = vera_layer_mode_tile::mapbase#0 - // [322] call vera_layer_set_mapbase - // [229] phi from vera_layer_mode_tile::@27 to vera_layer_set_mapbase [phi:vera_layer_mode_tile::@27->vera_layer_set_mapbase] - // [229] phi vera_layer_set_mapbase::mapbase#3 = vera_layer_set_mapbase::mapbase#0 [phi:vera_layer_mode_tile::@27->vera_layer_set_mapbase#0] -- register_copy - // [229] phi vera_layer_set_mapbase::layer#3 = vera_layer_set_mapbase::layer#0 [phi:vera_layer_mode_tile::@27->vera_layer_set_mapbase#1] -- register_copy - jsr vera_layer_set_mapbase - // vera_layer_mode_tile::@28 - // WORD0(tilebase_address) - // [323] vera_layer_mode_tile::$6 = word0 vera_layer_mode_tile::tilebase_address#10 -- vwuz1=_word0_vduz2 - lda.z tilebase_address_1 - sta.z __6 - lda.z tilebase_address_1+1 - sta.z __6+1 - // vera_tilebase_offset[layer] = WORD0(tilebase_address) - // [324] vera_tilebase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$6 -- pwuc1_derefidx_vbuz1=vwuz2 - // tilebase - ldy.z __17 - lda.z __6 - sta vera_tilebase_offset,y - lda.z __6+1 - sta vera_tilebase_offset+1,y - // BYTE2(tilebase_address) - // [325] vera_layer_mode_tile::$7 = byte2 vera_layer_mode_tile::tilebase_address#10 -- vbuaa=_byte2_vduz1 - lda.z tilebase_address_1+2 - // vera_tilebase_bank[layer] = BYTE2(tilebase_address) - // [326] vera_tilebase_bank[vera_layer_mode_tile::layer#10] = vera_layer_mode_tile::$7 -- pbuc1_derefidx_vbuz1=vbuaa - ldy.z layer - sta vera_tilebase_bank,y - // vera_tilebase_address[layer] = tilebase_address - // [327] vera_tilebase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::tilebase_address#10 -- pduc1_derefidx_vbuz1=vduz2 - ldy.z __18 - lda.z tilebase_address_1 - sta vera_tilebase_address,y - lda.z tilebase_address_1+1 - sta vera_tilebase_address+1,y - lda.z tilebase_address_1+2 - sta vera_tilebase_address+2,y - lda.z tilebase_address_1+3 - sta vera_tilebase_address+3,y - // tilebase_address = tilebase_address >> 1 - // [328] vera_layer_mode_tile::tilebase_address#0 = vera_layer_mode_tile::tilebase_address#10 >> 1 -- vduz1=vduz2_ror_1 - lsr - sta.z tilebase_address+3 - lda.z tilebase_address_1+2 - ror - sta.z tilebase_address+2 - lda.z tilebase_address_1+1 - ror - sta.z tilebase_address+1 - lda.z tilebase_address_1 - ror - sta.z tilebase_address - // byte tilebase = BYTE1(tilebase_address) - // [329] vera_layer_mode_tile::tilebase#0 = byte1 vera_layer_mode_tile::tilebase_address#0 -- vbuaa=_byte1_vduz1 - lda.z tilebase_address+1 - // tilebase &= VERA_LAYER_TILEBASE_MASK - // [330] vera_layer_mode_tile::tilebase#1 = vera_layer_mode_tile::tilebase#0 & VERA_LAYER_TILEBASE_MASK -- vbuxx=vbuaa_band_vbuc1 - and #VERA_LAYER_TILEBASE_MASK - tax - // case 8: - // tilebase |= VERA_TILEBASE_WIDTH_8; - // break; - // [331] if(vera_layer_mode_tile::tilewidth#10==8) goto vera_layer_mode_tile::@23 -- vbuz1_eq_vbuc1_then_la1 - lda #8 - cmp.z tilewidth - beq __b23 - // vera_layer_mode_tile::@21 - // case 16: - // tilebase |= VERA_TILEBASE_WIDTH_16; - // break; - // [332] if(vera_layer_mode_tile::tilewidth#10!=$10) goto vera_layer_mode_tile::@23 -- vbuz1_neq_vbuc1_then_la1 - lda #$10 - cmp.z tilewidth - bne __b23 - // vera_layer_mode_tile::@22 - // tilebase |= VERA_TILEBASE_WIDTH_16 - // [333] vera_layer_mode_tile::tilebase#3 = vera_layer_mode_tile::tilebase#1 | VERA_TILEBASE_WIDTH_16 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_TILEBASE_WIDTH_16 - tax - // [334] phi from vera_layer_mode_tile::@21 vera_layer_mode_tile::@22 vera_layer_mode_tile::@28 to vera_layer_mode_tile::@23 [phi:vera_layer_mode_tile::@21/vera_layer_mode_tile::@22/vera_layer_mode_tile::@28->vera_layer_mode_tile::@23] - // [334] phi vera_layer_mode_tile::tilebase#12 = vera_layer_mode_tile::tilebase#1 [phi:vera_layer_mode_tile::@21/vera_layer_mode_tile::@22/vera_layer_mode_tile::@28->vera_layer_mode_tile::@23#0] -- register_copy - // vera_layer_mode_tile::@23 - __b23: - // case 8: - // tilebase |= VERA_TILEBASE_HEIGHT_8; - // break; - // [335] if(vera_layer_mode_tile::tileheight#10==8) goto vera_layer_mode_tile::@26 -- vbuz1_eq_vbuc1_then_la1 - lda #8 - cmp.z tileheight - beq __b26 - // vera_layer_mode_tile::@24 - // case 16: - // tilebase |= VERA_TILEBASE_HEIGHT_16; - // break; - // [336] if(vera_layer_mode_tile::tileheight#10!=$10) goto vera_layer_mode_tile::@26 -- vbuz1_neq_vbuc1_then_la1 - lda #$10 - cmp.z tileheight - bne __b26 - // vera_layer_mode_tile::@25 - // tilebase |= VERA_TILEBASE_HEIGHT_16 - // [337] vera_layer_mode_tile::tilebase#5 = vera_layer_mode_tile::tilebase#12 | VERA_TILEBASE_HEIGHT_16 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_TILEBASE_HEIGHT_16 - tax - // [338] phi from vera_layer_mode_tile::@23 vera_layer_mode_tile::@24 vera_layer_mode_tile::@25 to vera_layer_mode_tile::@26 [phi:vera_layer_mode_tile::@23/vera_layer_mode_tile::@24/vera_layer_mode_tile::@25->vera_layer_mode_tile::@26] - // [338] phi vera_layer_mode_tile::tilebase#10 = vera_layer_mode_tile::tilebase#12 [phi:vera_layer_mode_tile::@23/vera_layer_mode_tile::@24/vera_layer_mode_tile::@25->vera_layer_mode_tile::@26#0] -- register_copy - // vera_layer_mode_tile::@26 - __b26: - // vera_layer_set_tilebase(layer,tilebase) - // [339] vera_layer_set_tilebase::layer#0 = vera_layer_mode_tile::layer#10 -- vbuaa=vbuz1 - lda.z layer - // [340] vera_layer_set_tilebase::tilebase#0 = vera_layer_mode_tile::tilebase#10 - // [341] call vera_layer_set_tilebase - jsr vera_layer_set_tilebase - // vera_layer_mode_tile::@return - // } - // [342] return - rts - // vera_layer_mode_tile::@18 - __b18: - // config |= VERA_LAYER_HEIGHT_128 - // [343] vera_layer_mode_tile::config#11 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_128 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_HEIGHT_128 - tax - jmp __b20 - // vera_layer_mode_tile::@17 - __b17: - // config |= VERA_LAYER_HEIGHT_64 - // [344] vera_layer_mode_tile::config#10 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_64 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_HEIGHT_64 - tax - jmp __b20 - // vera_layer_mode_tile::@11 - __b11: - // config |= VERA_LAYER_WIDTH_128 - // [345] vera_layer_mode_tile::config#7 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_128 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_WIDTH_128 - tax - // vera_layer_rowshift[layer] = 8 - // [346] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 8 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #8 - ldy.z layer - sta vera_layer_rowshift,y - // vera_layer_rowskip[layer] = 256 - // [347] vera_layer_mode_tile::$13 = vera_layer_mode_tile::layer#10 << 1 -- vbuaa=vbuz1_rol_1 - tya - asl - // [348] vera_layer_rowskip[vera_layer_mode_tile::$13] = $100 -- pwuc1_derefidx_vbuaa=vwuc2 - tay - lda #<$100 - sta vera_layer_rowskip,y - lda #>$100 - sta vera_layer_rowskip+1,y - jmp __b13 - // vera_layer_mode_tile::@10 - __b10: - // config |= VERA_LAYER_WIDTH_64 - // [349] vera_layer_mode_tile::config#6 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_64 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_WIDTH_64 - tax - // vera_layer_rowshift[layer] = 7 - // [350] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 7 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #7 - ldy.z layer - sta vera_layer_rowshift,y - // vera_layer_rowskip[layer] = 128 - // [351] vera_layer_mode_tile::$12 = vera_layer_mode_tile::layer#10 << 1 -- vbuaa=vbuz1_rol_1 - tya - asl - // [352] vera_layer_rowskip[vera_layer_mode_tile::$12] = $80 -- pwuc1_derefidx_vbuaa=vbuc2 - tay - lda #$80 - sta vera_layer_rowskip,y - lda #0 - sta vera_layer_rowskip+1,y - jmp __b13 - // vera_layer_mode_tile::@9 - __b9: - // vera_layer_rowshift[layer] = 6 - // [353] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 6 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #6 - ldy.z layer - sta vera_layer_rowshift,y - // vera_layer_rowskip[layer] = 64 - // [354] vera_layer_mode_tile::$11 = vera_layer_mode_tile::layer#10 << 1 -- vbuaa=vbuz1_rol_1 - tya - asl - // [355] vera_layer_rowskip[vera_layer_mode_tile::$11] = $40 -- pwuc1_derefidx_vbuaa=vbuc2 - tay - lda #$40 - sta vera_layer_rowskip,y - lda #0 - sta vera_layer_rowskip+1,y - jmp __b13 -} - // clrscr -// clears the screen and moves the cursor to the upper left-hand corner of the screen. -clrscr: { - .label __1 = $53 - .label line_text = 6 - .label color = $20 - .label l = $a - // char* line_text = CONIO_SCREEN_TEXT - // [356] clrscr::line_text#0 = (char *)CONIO_SCREEN_TEXT#17 -- pbuz1=pbuz2 - lda.z CONIO_SCREEN_TEXT_1 - sta.z line_text - lda.z CONIO_SCREEN_TEXT_1+1 - sta.z line_text+1 - // vera_layer_get_backcolor(conio_screen_layer) - // [357] vera_layer_get_backcolor::layer#0 = conio_screen_layer -- vbuyy=vbuz1 - ldy.z conio_screen_layer - // [358] call vera_layer_get_backcolor - jsr vera_layer_get_backcolor - // [359] vera_layer_get_backcolor::return#0 = vera_layer_get_backcolor::return#1 - // clrscr::@7 - // [360] clrscr::$0 = vera_layer_get_backcolor::return#0 - // vera_layer_get_backcolor(conio_screen_layer) << 4 - // [361] clrscr::$1 = clrscr::$0 << 4 -- vbuz1=vbuaa_rol_4 - asl - asl - asl - asl - sta.z __1 - // vera_layer_get_textcolor(conio_screen_layer) - // [362] vera_layer_get_textcolor::layer#0 = conio_screen_layer -- vbuyy=vbuz1 - ldy.z conio_screen_layer - // [363] call vera_layer_get_textcolor - jsr vera_layer_get_textcolor - // [364] vera_layer_get_textcolor::return#0 = vera_layer_get_textcolor::return#1 - // clrscr::@8 - // [365] clrscr::$2 = vera_layer_get_textcolor::return#0 - // char color = ( vera_layer_get_backcolor(conio_screen_layer) << 4 ) | vera_layer_get_textcolor(conio_screen_layer) - // [366] clrscr::color#0 = clrscr::$1 | clrscr::$2 -- vbuz1=vbuz2_bor_vbuaa - ora.z __1 - sta.z color - // [367] phi from clrscr::@8 to clrscr::@1 [phi:clrscr::@8->clrscr::@1] - // [367] phi clrscr::line_text#2 = clrscr::line_text#0 [phi:clrscr::@8->clrscr::@1#0] -- register_copy - // [367] phi clrscr::l#2 = 0 [phi:clrscr::@8->clrscr::@1#1] -- vbuz1=vbuc1 - lda #0 - sta.z l - // clrscr::@1 - __b1: - // for( char l=0;lclrscr::@4] - // [381] phi clrscr::c#2 = 0 [phi:clrscr::@2->clrscr::@4#0] -- vbuyy=vbuc1 - ldy #0 - // clrscr::@4 - __b4: - // for( char c=0;cclrscr::@1] - // [367] phi clrscr::line_text#2 = clrscr::line_text#1 [phi:clrscr::@6->clrscr::@1#0] -- register_copy - // [367] phi clrscr::l#2 = clrscr::l#1 [phi:clrscr::@6->clrscr::@1#1] -- register_copy - jmp __b1 - // clrscr::@5 - __b5: - // *VERA_DATA0 = ' ' - // [385] *VERA_DATA0 = ' ' -- _deref_pbuc1=vbuc2 - lda #' ' - sta VERA_DATA0 - // *VERA_DATA0 = color - // [386] *VERA_DATA0 = clrscr::color#0 -- _deref_pbuc1=vbuz1 - lda.z color - sta VERA_DATA0 - // for( char c=0;cclrscr::@4] - // [381] phi clrscr::c#2 = clrscr::c#1 [phi:clrscr::@5->clrscr::@4#0] -- register_copy - jmp __b4 -} - // memcpy_to_vram -// Copy block of memory (from RAM to VRAM) -// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination in VRAM. -// - vbank: Which 64K VRAM bank to put data into (0/1) -// - vdest: The destination address in VRAM -// - src: The source address in RAM -// - num: The number of bytes to copy -// void memcpy_to_vram(char vbank, __zp(8) void *vdest, void *src, unsigned int num) -memcpy_to_vram: { - // Transfer the data - .label end = main.tiles+$100 - .label s = 4 - .label vdest = 8 - // *VERA_CTRL &= ~VERA_ADDRSEL - // [389] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // BYTE0(vdest) - // [390] memcpy_to_vram::$0 = byte0 memcpy_to_vram::vdest#2 -- vbuaa=_byte0_pvoz1 - lda.z vdest - // *VERA_ADDRX_L = BYTE0(vdest) - // [391] *VERA_ADDRX_L = memcpy_to_vram::$0 -- _deref_pbuc1=vbuaa - // Set address - sta VERA_ADDRX_L - // BYTE1(vdest) - // [392] memcpy_to_vram::$1 = byte1 memcpy_to_vram::vdest#2 -- vbuaa=_byte1_pvoz1 - lda.z vdest+1 - // *VERA_ADDRX_M = BYTE1(vdest) - // [393] *VERA_ADDRX_M = memcpy_to_vram::$1 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // *VERA_ADDRX_H = VERA_INC_1 | vbank - // [394] *VERA_ADDRX_H = VERA_INC_1 -- _deref_pbuc1=vbuc2 - lda #VERA_INC_1 - sta VERA_ADDRX_H - // [395] phi from memcpy_to_vram to memcpy_to_vram::@1 [phi:memcpy_to_vram->memcpy_to_vram::@1] - // [395] phi memcpy_to_vram::s#2 = (char *)(void *)main::tiles [phi:memcpy_to_vram->memcpy_to_vram::@1#0] -- pbuz1=pbuc1 - lda #main.tiles - sta.z s+1 - // memcpy_to_vram::@1 - __b1: - // for(char *s = src; s!=end; s++) - // [396] if(memcpy_to_vram::s#2!=memcpy_to_vram::end#0) goto memcpy_to_vram::@2 -- pbuz1_neq_pbuc1_then_la1 - lda.z s+1 - cmp #>end - bne __b2 - lda.z s - cmp #memcpy_to_vram::@1] - // [395] phi memcpy_to_vram::s#2 = memcpy_to_vram::s#1 [phi:memcpy_to_vram::@2->memcpy_to_vram::@1#0] -- register_copy - jmp __b1 -} - // vera_tile_area -// --- TILE FUNCTIONS --- -// void vera_tile_area(char layer, __zp($24) unsigned int tileindex, __zp($29) char x, __zp($a) char y, __zp($e) char w, __zp($20) char h, __zp($28) char hflip, __zp($1b) char vflip, char offset) -vera_tile_area: { - .label __4 = 8 - .label __10 = 8 - .label mapbase = $14 - .label shift = $2a - .label rowskip = $1e - .label hflip = $28 - .label vflip = $1b - .label index_l = $1c - .label index_h = $1b - .label r = $b - .label tileindex = $24 - .label x = $29 - .label y = $a - .label h = $20 - .label w = $e - // dword mapbase = vera_mapbase_address[layer] - // [401] vera_tile_area::mapbase#0 = *vera_mapbase_address -- vduz1=_deref_pduc1 - lda vera_mapbase_address - sta.z mapbase - lda vera_mapbase_address+1 - sta.z mapbase+1 - lda vera_mapbase_address+2 - sta.z mapbase+2 - lda vera_mapbase_address+3 - sta.z mapbase+3 - // byte shift = vera_layer_rowshift[layer] - // [402] vera_tile_area::shift#0 = *vera_layer_rowshift -- vbuz1=_deref_pbuc1 - lda vera_layer_rowshift - sta.z shift - // word rowskip = (word)1 << shift - // [403] vera_tile_area::rowskip#0 = 1 << vera_tile_area::shift#0 -- vwuz1=vwuc1_rol_vbuz2 - tay - lda #<1 - sta.z rowskip - lda #>1+1 - sta.z rowskip+1 - cpy #0 - beq !e+ - !: - asl.z rowskip - rol.z rowskip+1 - dey - bne !- - !e: - // hflip = vera_layer_hflip[hflip] - // [404] vera_tile_area::hflip#0 = *vera_layer_hflip -- vbuz1=_deref_pbuc1 - lda vera_layer_hflip - sta.z hflip - // vflip = vera_layer_vflip[vflip] - // [405] vera_tile_area::vflip#0 = *vera_layer_vflip -- vbuz1=_deref_pbuc1 - lda vera_layer_vflip - sta.z vflip - // byte index_l = BYTE0(tileindex) - // [406] vera_tile_area::index_l#0 = byte0 vera_tile_area::tileindex#5 -- vbuz1=_byte0_vwuz2 - lda.z tileindex - sta.z index_l - // byte index_h = BYTE1(tileindex) - // [407] vera_tile_area::index_h#0 = byte1 vera_tile_area::tileindex#5 -- vbuaa=_byte1_vwuz1 - lda.z tileindex+1 - // index_h |= hflip - // [408] vera_tile_area::index_h#1 = vera_tile_area::index_h#0 | vera_tile_area::hflip#0 -- vbuaa=vbuaa_bor_vbuz1 - ora.z hflip - // index_h |= vflip - // [409] vera_tile_area::index_h#2 = vera_tile_area::index_h#1 | vera_tile_area::vflip#0 -- vbuz1=vbuaa_bor_vbuz1 - ora.z index_h - sta.z index_h - // (word)y << shift - // [410] vera_tile_area::$10 = (unsigned int)vera_tile_area::y#5 -- vwuz1=_word_vbuz2 - lda.z y - sta.z __10 - lda #0 - sta.z __10+1 - // [411] vera_tile_area::$4 = vera_tile_area::$10 << vera_tile_area::shift#0 -- vwuz1=vwuz1_rol_vbuz2 - ldy.z shift - beq !e+ - !: - asl.z __4 - rol.z __4+1 - dey - bne !- - !e: - // mapbase += ((word)y << shift) - // [412] vera_tile_area::mapbase#1 = vera_tile_area::mapbase#0 + vera_tile_area::$4 -- vduz1=vduz1_plus_vwuz2 - lda.z mapbase - clc - adc.z __4 - sta.z mapbase - lda.z mapbase+1 - adc.z __4+1 - sta.z mapbase+1 - lda.z mapbase+2 - adc #0 - sta.z mapbase+2 - lda.z mapbase+3 - adc #0 - sta.z mapbase+3 - // x << 1 - // [413] vera_tile_area::$5 = vera_tile_area::x#5 << 1 -- vbuaa=vbuz1_rol_1 - lda.z x - asl - // mapbase += (x << 1) - // [414] vera_tile_area::mapbase#2 = vera_tile_area::mapbase#1 + vera_tile_area::$5 -- vduz1=vduz1_plus_vbuaa - clc - adc.z mapbase - sta.z mapbase - lda.z mapbase+1 - adc #0 - sta.z mapbase+1 - lda.z mapbase+2 - adc #0 - sta.z mapbase+2 - lda.z mapbase+3 - adc #0 - sta.z mapbase+3 - // [415] phi from vera_tile_area to vera_tile_area::@1 [phi:vera_tile_area->vera_tile_area::@1] - // [415] phi vera_tile_area::mapbase#10 = vera_tile_area::mapbase#2 [phi:vera_tile_area->vera_tile_area::@1#0] -- register_copy - // [415] phi vera_tile_area::r#2 = 0 [phi:vera_tile_area->vera_tile_area::@1#1] -- vbuz1=vbuc1 - lda #0 - sta.z r - // vera_tile_area::@1 - __b1: - // for(byte r=0; rvera_tile_area::@2] - // [426] phi vera_tile_area::c#2 = 0 [phi:vera_tile_area::vera_vram_address01->vera_tile_area::@2#0] -- vbuyy=vbuc1 - ldy #0 - // vera_tile_area::@2 - __b2: - // for(byte c=0; cvera_tile_area::@1] - // [415] phi vera_tile_area::mapbase#10 = vera_tile_area::mapbase#3 [phi:vera_tile_area::@4->vera_tile_area::@1#0] -- register_copy - // [415] phi vera_tile_area::r#2 = vera_tile_area::r#1 [phi:vera_tile_area::@4->vera_tile_area::@1#1] -- register_copy - jmp __b1 - // vera_tile_area::@3 - __b3: - // *VERA_DATA0 = index_l - // [430] *VERA_DATA0 = vera_tile_area::index_l#0 -- _deref_pbuc1=vbuz1 - lda.z index_l - sta VERA_DATA0 - // *VERA_DATA0 = index_h - // [431] *VERA_DATA0 = vera_tile_area::index_h#2 -- _deref_pbuc1=vbuz1 - lda.z index_h - sta VERA_DATA0 - // for(byte c=0; cvera_tile_area::@2] - // [426] phi vera_tile_area::c#2 = vera_tile_area::c#1 [phi:vera_tile_area::@3->vera_tile_area::@2#0] -- register_copy - jmp __b2 -} - // printf_str -/// Print a NUL-terminated string -// void printf_str(void (*putc)(char), __zp($1e) const char *s) -printf_str: { - .label s = $1e - // [434] phi from printf_str printf_str::@2 to printf_str::@1 [phi:printf_str/printf_str::@2->printf_str::@1] - // [434] phi printf_str::s#9 = printf_str::s#10 [phi:printf_str/printf_str::@2->printf_str::@1#0] -- register_copy - // printf_str::@1 - __b1: - // while(c=*s++) - // [435] printf_str::c#1 = *printf_str::s#9 -- vbuaa=_deref_pbuz1 - ldy #0 - lda (s),y - // [436] printf_str::s#0 = ++ printf_str::s#9 -- pbuz1=_inc_pbuz1 - inc.z s - bne !+ - inc.z s+1 - !: - // [437] if(0!=printf_str::c#1) goto printf_str::@2 -- 0_neq_vbuaa_then_la1 - cmp #0 - bne __b2 - // printf_str::@return - // } - // [438] return - rts - // printf_str::@2 - __b2: - // putc(c) - // [439] stackpush(char) = printf_str::c#1 -- _stackpushbyte_=vbuaa - pha - // [440] callexecute cputc -- call_vprc1 - jsr cputc - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - jmp __b1 -} - // kbhit -// Return true if there's a key waiting, return false if not -kbhit: { - .label chptr = ch - .label IN_DEV = $28a - // Current input device number - .label GETIN = $ffe4 - .label ch = $38 - // char ch = 0 - // [442] kbhit::ch = 0 -- vbuz1=vbuc1 - lda #0 - sta.z ch - // kickasm - // kickasm( uses kbhit::chptr uses kbhit::IN_DEV uses kbhit::GETIN) {{ jsr _kbhit bne L3 jmp continue1 .var via1 = $9f60 //VIA#1 .var d1pra = via1+1 _kbhit: ldy d1pra // The count of keys pressed is stored in RAM bank 0. stz d1pra // Set d1pra to zero to access RAM bank 0. lda $A00A // Get number of characters from this address in the ROM of the CX16 (ROM 38). sty d1pra // Set d1pra to previous value. rts L3: ldy IN_DEV // Save current input device stz IN_DEV // Keyboard phy jsr GETIN // Read char, and return in .A ply sta chptr // Store the character read in ch sty IN_DEV // Restore input device ldx #>$0000 rts continue1: nop }} - // CBM GETIN API - jsr _kbhit - bne L3 - - jmp continue1 - - .var via1 = $9f60 //VIA#1 - .var d1pra = via1+1 - - _kbhit: - ldy d1pra // The count of keys pressed is stored in RAM bank 0. - stz d1pra // Set d1pra to zero to access RAM bank 0. - lda $A00A // Get number of characters from this address in the ROM of the CX16 (ROM 38). - sty d1pra // Set d1pra to previous value. - rts - - L3: - ldy IN_DEV // Save current input device - stz IN_DEV // Keyboard - phy - jsr GETIN // Read char, and return in .A - ply - sta chptr // Store the character read in ch - sty IN_DEV // Restore input device - ldx #>$0000 - rts - - continue1: - nop - - // return ch; - // [444] kbhit::return#0 = kbhit::ch -- vbuaa=vbuz1 - lda.z ch - // kbhit::@return - // } - // [445] kbhit::return#1 = kbhit::return#0 - // [446] return - rts -} - // vera_layer_set_text_color_mode -// Set the configuration of the layer text color mode. -// - layer: Value of 0 or 1. -// - color_mode: Specifies the color mode to be VERA_LAYER_CONFIG_16 or VERA_LAYER_CONFIG_256 for text mode. -// void vera_layer_set_text_color_mode(char layer, char color_mode) -vera_layer_set_text_color_mode: { - .label addr = $22 - // byte* addr = vera_layer_config[layer] - // [447] vera_layer_set_text_color_mode::addr#0 = *(vera_layer_config+vera_layer_mode_text::layer#0*SIZEOF_POINTER) -- pbuz1=_deref_qbuc1 - lda vera_layer_config+vera_layer_mode_text.layer*SIZEOF_POINTER - sta.z addr - lda vera_layer_config+vera_layer_mode_text.layer*SIZEOF_POINTER+1 - sta.z addr+1 - // *addr &= ~VERA_LAYER_CONFIG_256C - // [448] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 & ~VERA_LAYER_CONFIG_256C -- _deref_pbuz1=_deref_pbuz1_band_vbuc1 - lda #VERA_LAYER_CONFIG_256C^$ff - ldy #0 - and (addr),y - sta (addr),y - // *addr |= color_mode - // [449] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 -- _deref_pbuz1=_deref_pbuz1 - lda (addr),y - sta (addr),y - // vera_layer_set_text_color_mode::@return - // } - // [450] return - rts -} - // vera_layer_get_mapbase_bank -// Get the map base bank of the tiles for the layer. -// - layer: Value of 0 or 1. -// - return: Bank in vera vram. -// __register(X) char vera_layer_get_mapbase_bank(__register(Y) char layer) -vera_layer_get_mapbase_bank: { - // return vera_mapbase_bank[layer]; - // [451] vera_layer_get_mapbase_bank::return#0 = vera_mapbase_bank[vera_layer_get_mapbase_bank::layer#0] -- vbuxx=pbuc1_derefidx_vbuyy - ldx vera_mapbase_bank,y - // vera_layer_get_mapbase_bank::@return - // } - // [452] return - rts -} - // vera_layer_get_mapbase_offset -// Get the map base lower 16-bit address (offset) of the tiles for the layer. -// - layer: Value of 0 or 1. -// - return: Offset in vera vram of the specified bank. -// __zp($10) unsigned int vera_layer_get_mapbase_offset(__register(A) char layer) -vera_layer_get_mapbase_offset: { - .label return = $10 - // return vera_mapbase_offset[layer]; - // [453] vera_layer_get_mapbase_offset::$0 = vera_layer_get_mapbase_offset::layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [454] vera_layer_get_mapbase_offset::return#0 = vera_mapbase_offset[vera_layer_get_mapbase_offset::$0] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda vera_mapbase_offset,y - sta.z return - lda vera_mapbase_offset+1,y - sta.z return+1 - // vera_layer_get_mapbase_offset::@return - // } - // [455] return - rts -} - // vera_layer_get_rowshift -// Get the bit shift value required to skip a whole line fast. -// - layer: Value of 0 or 1. -// - return: Rowshift value to calculate fast from a y value to line offset in tile mode. -// __register(A) char vera_layer_get_rowshift(__register(Y) char layer) -vera_layer_get_rowshift: { - // return vera_layer_rowshift[layer]; - // [456] vera_layer_get_rowshift::return#0 = vera_layer_rowshift[vera_layer_get_rowshift::layer#0] -- vbuaa=pbuc1_derefidx_vbuyy - lda vera_layer_rowshift,y - // vera_layer_get_rowshift::@return - // } - // [457] return - rts -} - // vera_layer_get_rowskip -// Get the value required to skip a whole line fast. -// - layer: Value of 0 or 1. -// - return: Skip value to calculate fast from a y value to line offset in tile mode. -// __zp($35) unsigned int vera_layer_get_rowskip(__register(A) char layer) -vera_layer_get_rowskip: { - .label return = $35 - // return vera_layer_rowskip[layer]; - // [458] vera_layer_get_rowskip::$0 = vera_layer_get_rowskip::layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [459] vera_layer_get_rowskip::return#0 = vera_layer_rowskip[vera_layer_get_rowskip::$0] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda vera_layer_rowskip,y - sta.z return - lda vera_layer_rowskip+1,y - sta.z return+1 - // vera_layer_get_rowskip::@return - // } - // [460] return - rts -} - // cscroll -// Scroll the entire screen if the cursor is beyond the last line -cscroll: { - // if(conio_cursor_y[conio_screen_layer]>=CONIO_HEIGHT) - // [461] if(conio_cursor_y[conio_screen_layer]=conio_height) - // [463] if(conio_cursor_y[conio_screen_layer]cscroll::@3] - // cscroll::@3 - __b3: - // cscroll::@return - // } - // [465] return - rts - // [466] phi from cscroll::@1 to cscroll::@4 [phi:cscroll::@1->cscroll::@4] - // cscroll::@4 - __b4: - // insertup() - // [467] call insertup - jsr insertup - // cscroll::@5 - // gotoxy( 0, CONIO_HEIGHT-1) - // [468] gotoxy::y#2 = conio_screen_height - 1 -- vbuxx=vbuz1_minus_1 - ldx.z conio_screen_height - dex - // [469] call gotoxy - // [234] phi from cscroll::@5 to gotoxy [phi:cscroll::@5->gotoxy] - // [234] phi gotoxy::y#4 = gotoxy::y#2 [phi:cscroll::@5->gotoxy#0] -- register_copy - jsr gotoxy - rts -} - // vera_layer_set_config -// Set the configuration of the layer. -// - layer: Value of 0 or 1. -// - config: Specifies the modes which are specified using T256C / 'Bitmap Mode' / 'Color Depth'. -// void vera_layer_set_config(__register(A) char layer, __register(X) char config) -vera_layer_set_config: { - .label addr = $22 - // byte* addr = vera_layer_config[layer] - // [470] vera_layer_set_config::$0 = vera_layer_set_config::layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [471] vera_layer_set_config::addr#0 = vera_layer_config[vera_layer_set_config::$0] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_config,y - sta.z addr - lda vera_layer_config+1,y - sta.z addr+1 - // *addr = config - // [472] *vera_layer_set_config::addr#0 = vera_layer_set_config::config#0 -- _deref_pbuz1=vbuxx - txa - ldy #0 - sta (addr),y - // vera_layer_set_config::@return - // } - // [473] return - rts -} - // vera_layer_set_tilebase -// Set the base of the tiles for the layer with which the conio will interact. -// - layer: Value of 0 or 1. -// - tilebase: Specifies the base address of the tile map. -// Note that the register only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// void vera_layer_set_tilebase(__register(A) char layer, __register(X) char tilebase) -vera_layer_set_tilebase: { - .label addr = $22 - // byte* addr = vera_layer_tilebase[layer] - // [474] vera_layer_set_tilebase::$0 = vera_layer_set_tilebase::layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [475] vera_layer_set_tilebase::addr#0 = vera_layer_tilebase[vera_layer_set_tilebase::$0] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_tilebase,y - sta.z addr - lda vera_layer_tilebase+1,y - sta.z addr+1 - // *addr = tilebase - // [476] *vera_layer_set_tilebase::addr#0 = vera_layer_set_tilebase::tilebase#0 -- _deref_pbuz1=vbuxx - txa - ldy #0 - sta (addr),y - // vera_layer_set_tilebase::@return - // } - // [477] return - rts -} - // vera_layer_get_backcolor -// Get the back color for text output. The old back text color setting is returned. -// - layer: Value of 0 or 1. -// - return: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_backcolor(__register(Y) char layer) -vera_layer_get_backcolor: { - // return vera_layer_backcolor[layer]; - // [478] vera_layer_get_backcolor::return#1 = vera_layer_backcolor[vera_layer_get_backcolor::layer#0] -- vbuaa=pbuc1_derefidx_vbuyy - lda vera_layer_backcolor,y - // vera_layer_get_backcolor::@return - // } - // [479] return - rts -} - // vera_layer_get_textcolor -// Get the front color for text output. The old front text color setting is returned. -// - layer: Value of 0 or 1. -// - return: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_textcolor(__register(Y) char layer) -vera_layer_get_textcolor: { - // return vera_layer_textcolor[layer]; - // [480] vera_layer_get_textcolor::return#1 = vera_layer_textcolor[vera_layer_get_textcolor::layer#0] -- vbuaa=pbuc1_derefidx_vbuyy - lda vera_layer_textcolor,y - // vera_layer_get_textcolor::@return - // } - // [481] return - rts -} - // insertup -// Insert a new line, and scroll the upper part of the screen up. -insertup: { - .label cy = $e - .label width = $b - .label line = 8 - .label start = 8 - // unsigned byte cy = conio_cursor_y[conio_screen_layer] - // [482] insertup::cy#0 = conio_cursor_y[conio_screen_layer] -- vbuz1=pbuc1_derefidx_vbuz2 - ldy.z conio_screen_layer - lda conio_cursor_y,y - sta.z cy - // unsigned byte width = CONIO_WIDTH * 2 - // [483] insertup::width#0 = conio_screen_width << 1 -- vbuz1=vbuz2_rol_1 - lda.z conio_screen_width - asl - sta.z width - // [484] phi from insertup to insertup::@1 [phi:insertup->insertup::@1] - // [484] phi insertup::i#2 = 1 [phi:insertup->insertup::@1#0] -- vbuxx=vbuc1 - ldx #1 - // insertup::@1 - __b1: - // for(unsigned byte i=1; i<=cy; i++) - // [485] if(insertup::i#2<=insertup::cy#0) goto insertup::@2 -- vbuxx_le_vbuz1_then_la1 - lda.z cy - stx.z $ff - cmp.z $ff - bcs __b2 - // [486] phi from insertup::@1 to insertup::@3 [phi:insertup::@1->insertup::@3] - // insertup::@3 - // clearline() - // [487] call clearline - jsr clearline - // insertup::@return - // } - // [488] return - rts - // insertup::@2 - __b2: - // i-1 - // [489] insertup::$3 = insertup::i#2 - 1 -- vbuaa=vbuxx_minus_1 - txa - sec - sbc #1 - // unsigned int line = (i-1) << conio_rowshift - // [490] insertup::line#0 = insertup::$3 << conio_rowshift -- vwuz1=vbuaa_rol_vbuz2 - ldy.z conio_rowshift - sta.z line - lda #0 - sta.z line+1 - cpy #0 - beq !e+ - !: - asl.z line - rol.z line+1 - dey - bne !- - !e: - // unsigned char* start = CONIO_SCREEN_TEXT + line - // [491] insertup::start#0 = CONIO_SCREEN_TEXT#12 + insertup::line#0 -- pbuz1=pbuz2_plus_vwuz1 - clc - lda.z start - adc.z CONIO_SCREEN_TEXT - sta.z start - lda.z start+1 - adc.z CONIO_SCREEN_TEXT+1 - sta.z start+1 - // start+conio_rowskip - // [492] memcpy_in_vram::src#0 = insertup::start#0 + conio_rowskip -- pbuz1=pbuz2_plus_vwuz3 - lda.z start - clc - adc.z conio_rowskip - sta.z memcpy_in_vram.src - lda.z start+1 - adc.z conio_rowskip+1 - sta.z memcpy_in_vram.src+1 - // memcpy_in_vram(0, start, VERA_INC_1, 0, start+conio_rowskip, VERA_INC_1, width) - // [493] memcpy_in_vram::dest#0 = (void *)insertup::start#0 - // [494] memcpy_in_vram::num#0 = insertup::width#0 -- vwuz1=vbuz2 - lda.z width - sta.z memcpy_in_vram.num - lda #0 - sta.z memcpy_in_vram.num+1 - // [495] memcpy_in_vram::src#4 = (void *)memcpy_in_vram::src#0 - // memcpy_in_vram(0, start, VERA_INC_1, 0, start+conio_rowskip, VERA_INC_1, width) - // [496] call memcpy_in_vram - // [266] phi from insertup::@2 to memcpy_in_vram [phi:insertup::@2->memcpy_in_vram] - // [266] phi memcpy_in_vram::num#4 = memcpy_in_vram::num#0 [phi:insertup::@2->memcpy_in_vram#0] -- register_copy - // [266] phi memcpy_in_vram::dest_bank#3 = 0 [phi:insertup::@2->memcpy_in_vram#1] -- vbuz1=vbuc1 - sta.z memcpy_in_vram.dest_bank - // [266] phi memcpy_in_vram::dest#3 = memcpy_in_vram::dest#0 [phi:insertup::@2->memcpy_in_vram#2] -- register_copy - // [266] phi memcpy_in_vram::src_bank#3 = 0 [phi:insertup::@2->memcpy_in_vram#3] -- vbuyy=vbuc1 - tay - // [266] phi memcpy_in_vram::src#3 = memcpy_in_vram::src#4 [phi:insertup::@2->memcpy_in_vram#4] -- register_copy - jsr memcpy_in_vram - // insertup::@4 - // for(unsigned byte i=1; i<=cy; i++) - // [497] insertup::i#1 = ++ insertup::i#2 -- vbuxx=_inc_vbuxx - inx - // [484] phi from insertup::@4 to insertup::@1 [phi:insertup::@4->insertup::@1] - // [484] phi insertup::i#2 = insertup::i#1 [phi:insertup::@4->insertup::@1#0] -- register_copy - jmp __b1 -} - // clearline -clearline: { - .label addr = $c - .label c = 2 - // *VERA_CTRL &= ~VERA_ADDRSEL - // [498] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // byte* addr = CONIO_SCREEN_TEXT + conio_line_text[conio_screen_layer] - // [499] clearline::$5 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [500] clearline::addr#0 = CONIO_SCREEN_TEXT#12 + conio_line_text[clearline::$5] -- pbuz1=pbuz2_plus_pwuc1_derefidx_vbuaa - // Set address - tay - clc - lda.z CONIO_SCREEN_TEXT - adc conio_line_text,y - sta.z addr - lda.z CONIO_SCREEN_TEXT+1 - adc conio_line_text+1,y - sta.z addr+1 - // BYTE0(addr) - // [501] clearline::$1 = byte0 clearline::addr#0 -- vbuaa=_byte0_pbuz1 - lda.z addr - // *VERA_ADDRX_L = BYTE0(addr) - // [502] *VERA_ADDRX_L = clearline::$1 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_L - // BYTE1(addr) - // [503] clearline::$2 = byte1 clearline::addr#0 -- vbuaa=_byte1_pbuz1 - lda.z addr+1 - // *VERA_ADDRX_M = BYTE1(addr) - // [504] *VERA_ADDRX_M = clearline::$2 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // *VERA_ADDRX_H = VERA_INC_1 - // [505] *VERA_ADDRX_H = VERA_INC_1 -- _deref_pbuc1=vbuc2 - lda #VERA_INC_1 - sta VERA_ADDRX_H - // char color = vera_layer_get_color( conio_screen_layer) - // [506] vera_layer_get_color::layer#1 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [507] call vera_layer_get_color - // [247] phi from clearline to vera_layer_get_color [phi:clearline->vera_layer_get_color] - // [247] phi vera_layer_get_color::layer#2 = vera_layer_get_color::layer#1 [phi:clearline->vera_layer_get_color#0] -- register_copy - jsr vera_layer_get_color - // char color = vera_layer_get_color( conio_screen_layer) - // [508] vera_layer_get_color::return#4 = vera_layer_get_color::return#3 - // clearline::@4 - // [509] clearline::color#0 = vera_layer_get_color::return#4 -- vbuxx=vbuaa - tax - // [510] phi from clearline::@4 to clearline::@1 [phi:clearline::@4->clearline::@1] - // [510] phi clearline::c#2 = 0 [phi:clearline::@4->clearline::@1#0] -- vwuz1=vwuc1 - lda #<0 - sta.z c - sta.z c+1 - // clearline::@1 - __b1: - // for( unsigned int c=0;cclearline::@1] - // [510] phi clearline::c#2 = clearline::c#1 [phi:clearline::@2->clearline::@1#0] -- register_copy - jmp __b1 -} - // File Data -.segment Data - VERA_LAYER_WIDTH: .word $20, $40, $80, $100 - VERA_LAYER_HEIGHT: .word $20, $40, $80, $100 - /// --- VERA function encapsulation --- - vera_mapbase_offset: .word 0, 0 - vera_mapbase_bank: .byte 0, 0 - vera_mapbase_address: .dword 0, 0 - vera_tilebase_offset: .word 0, 0 - vera_tilebase_bank: .byte 0, 0 - vera_tilebase_address: .dword 0, 0 - vera_layer_rowshift: .byte 0, 0 - vera_layer_rowskip: .word 0, 0 - vera_layer_hflip: .byte 0, 4 - vera_layer_vflip: .byte 0, 8 - vera_layer_config: .word VERA_L0_CONFIG, VERA_L1_CONFIG - vera_layer_enable: .byte VERA_LAYER0_ENABLE, VERA_LAYER1_ENABLE - vera_layer_mapbase: .word VERA_L0_MAPBASE, VERA_L1_MAPBASE - vera_layer_tilebase: .word VERA_L0_TILEBASE, VERA_L1_TILEBASE - vera_layer_textcolor: .byte WHITE, WHITE - vera_layer_backcolor: .byte BLUE, BLUE - // The number of bytes on the screen - // The current cursor x-position - conio_cursor_x: .byte 0, 0 - // The current cursor y-position - conio_cursor_y: .byte 0, 0 - // The current text cursor line start - conio_line_text: .word 0, 0 - // Is scrolling enabled when outputting beyond the end of the screen (1: yes, 0: no). - // If disabled the cursor just moves back to (0,0) instead - conio_scroll_enable: .byte 1, 1 - diff --git a/src/test/ref/examples/cx16/veralib/tilemap_8bpp_16_x_16.sym b/src/test/ref/examples/cx16/veralib/tilemap_8bpp_16_x_16.sym deleted file mode 100644 index 1891f2ef2..000000000 --- a/src/test/ref/examples/cx16/veralib/tilemap_8bpp_16_x_16.sym +++ /dev/null @@ -1,718 +0,0 @@ -__constant const char BLACK = 0 -__constant const char BLUE = 6 -char CONIO_SCREEN_BANK -char CONIO_SCREEN_BANK#12 // CONIO_SCREEN_BANK zp[1]:57 625.0625 -char CONIO_SCREEN_BANK#15 // reg byte x 14.693333333333332 -char *CONIO_SCREEN_TEXT -char *CONIO_SCREEN_TEXT#12 // CONIO_SCREEN_TEXT zp[2]:18 2.000018187272727E7 -unsigned int CONIO_SCREEN_TEXT#17 // CONIO_SCREEN_TEXT_1 zp[2]:86 2.2954545454545454 -__constant char RADIX::BINARY = 2 -__constant char RADIX::DECIMAL = $a -__constant char RADIX::HEXADECIMAL = $10 -__constant char RADIX::OCTAL = 8 -__constant char SIZEOF_POINTER = 2 -__constant unsigned int STACK_BASE = $103 -__constant const char VERA_ADDRSEL = 1 -__constant char * const VERA_ADDRX_H = (char *) 40738 -__constant char * const VERA_ADDRX_L = (char *) 40736 -__constant char * const VERA_ADDRX_M = (char *) 40737 -__constant char * const VERA_CTRL = (char *) 40741 -__constant char * const VERA_DATA0 = (char *) 40739 -__constant char * const VERA_DATA1 = (char *) 40740 -__constant char * const VERA_DC_HSCALE = (char *) 40746 -__constant char * const VERA_DC_VIDEO = (char *) 40745 -__constant char * const VERA_DC_VSCALE = (char *) 40747 -__constant const char VERA_INC_1 = $10 -__constant char * const VERA_L0_CONFIG = (char *) 40749 -__constant char * const VERA_L0_MAPBASE = (char *) 40750 -__constant char * const VERA_L0_TILEBASE = (char *) 40751 -__constant char * const VERA_L1_CONFIG = (char *) 40756 -__constant char * const VERA_L1_MAPBASE = (char *) 40757 -__constant char * const VERA_L1_TILEBASE = (char *) 40758 -__constant const char VERA_LAYER0_ENABLE = $10 -__constant const char VERA_LAYER1_ENABLE = $20 -__constant const char VERA_LAYER_COLOR_DEPTH_1BPP = 0 -__constant const char VERA_LAYER_COLOR_DEPTH_2BPP = 1 -__constant const char VERA_LAYER_COLOR_DEPTH_4BPP = 2 -__constant const char VERA_LAYER_COLOR_DEPTH_8BPP = 3 -__constant const char VERA_LAYER_CONFIG_256C = 8 -__constant const unsigned int VERA_LAYER_HEIGHT[4] = { $20, $40, $80, $100 } -__constant const char VERA_LAYER_HEIGHT_128 = $80 -__constant const char VERA_LAYER_HEIGHT_256 = $c0 -__constant const char VERA_LAYER_HEIGHT_64 = $40 -__constant const char VERA_LAYER_HEIGHT_MASK = $c0 -__constant const char VERA_LAYER_TILEBASE_MASK = $fc -__constant const unsigned int VERA_LAYER_WIDTH[4] = { $20, $40, $80, $100 } -__constant const char VERA_LAYER_WIDTH_128 = $20 -__constant const char VERA_LAYER_WIDTH_256 = $30 -__constant const char VERA_LAYER_WIDTH_64 = $10 -__constant const char VERA_LAYER_WIDTH_MASK = $30 -__constant const char VERA_TILEBASE_HEIGHT_16 = 2 -__constant const char VERA_TILEBASE_WIDTH_16 = 1 -__constant const char WHITE = 1 -void __start() -void clearline() -char clearline::$1 // reg byte a 2.00000002E8 -char clearline::$2 // reg byte a 2.00000002E8 -char clearline::$5 // reg byte a 2.00000002E8 -char *clearline::addr -char *clearline::addr#0 // addr zp[2]:12 1.00000001E8 -unsigned int clearline::c -unsigned int clearline::c#1 // c zp[2]:2 2.0000000002E10 -unsigned int clearline::c#2 // c zp[2]:2 7.50000000075E9 -char clearline::color -char clearline::color#0 // reg byte x 1.6833333336666665E9 -void clrscr() -char clrscr::$0 // reg byte a 202.0 -char clrscr::$1 // zp[1]:83 40.4 -char clrscr::$2 // reg byte a 202.0 -char clrscr::$5 // reg byte a 2002.0 -char clrscr::$6 // reg byte a 2002.0 -char clrscr::$7 // reg byte a 2002.0 -char clrscr::$9 // reg byte a 202.0 -char clrscr::c -char clrscr::c#1 // reg byte y 20002.0 -char clrscr::c#2 // reg byte y 7500.75 -char *clrscr::ch -char clrscr::color -char clrscr::color#0 // color zp[1]:32 594.2352941176471 -char clrscr::l -char clrscr::l#1 // l zp[1]:10 2002.0 -char clrscr::l#2 // l zp[1]:10 200.2 -char *clrscr::line_text -char *clrscr::line_text#0 // line_text zp[2]:6 18.363636363636363 -char *clrscr::line_text#1 // line_text zp[2]:6 1001.0 -char *clrscr::line_text#2 // line_text zp[2]:6 293.2142857142857 -__constant char conio_cursor_x[2] = { 0, 0 } -__constant char conio_cursor_y[2] = { 0, 0 } -__loadstore unsigned int conio_height // zp[2]:38 6500.681818181818 -__constant unsigned int conio_line_text[2] = { 0, 0 } -__loadstore char conio_rowshift // zp[1]:24 5838150.895953758 -__loadstore unsigned int conio_rowskip // zp[2]:25 5556117.255555555 -__loadstore volatile char conio_screen_height // zp[1]:33 75000.16875000001 -__loadstore char conio_screen_layer // zp[1]:29 1357989.2490118577 -__loadstore volatile char conio_screen_width // zp[1]:15 5.1122500030612245E7 -__constant char conio_scroll_enable[2] = { 1, 1 } -__loadstore unsigned int conio_width // zp[2]:70 128.87820512820514 -void conio_x16_init() -__constant char * const conio_x16_init::BASIC_CURSOR_LINE = (char *) 214 -char conio_x16_init::line -char conio_x16_init::line#0 // line zp[1]:82 2.1999999999999997 -char conio_x16_init::line#1 // line zp[1]:82 22.0 -char conio_x16_init::line#3 // line zp[1]:82 33.0 -__stackcall void cputc(char c) -char cputc::$15 // reg byte a 20002.0 -unsigned int cputc::$16 // zp[2]:6 20002.0 -char cputc::$2 // reg byte a 20002.0 -char cputc::$4 // reg byte a 20002.0 -char cputc::$5 // reg byte a 20002.0 -char cputc::$6 // reg byte a 20002.0 -__constant char cputc::OFFSET_STACK_C = 0 -char cputc::c -char cputc::c#0 // c zp[1]:10 1764.8823529411764 -char cputc::color -char cputc::color#0 // reg byte x 1428.7142857142858 -char *cputc::conio_addr -char *cputc::conio_addr#0 // conio_addr zp[2]:8 10001.0 -char *cputc::conio_addr#1 // conio_addr zp[2]:8 6000.6 -char cputc::scroll_enable -char cputc::scroll_enable#0 // reg byte a 20002.0 -void cputln() -char cputln::$2 // reg byte a 200002.0 -char cputln::$3 // reg byte a 200002.0 -unsigned int cputln::temp -unsigned int cputln::temp#0 // temp zp[2]:4 200002.0 -unsigned int cputln::temp#1 // temp zp[2]:4 100001.0 -void cscroll() -void gotoxy(char x , char y) -char gotoxy::$5 // reg byte a 2.0000002E7 -unsigned int gotoxy::$6 // zp[2]:16 2.0000002E7 -unsigned int gotoxy::line_offset -unsigned int gotoxy::line_offset#0 // line_offset zp[2]:16 1.0000001E7 -char gotoxy::x -char gotoxy::y -char gotoxy::y#1 // reg byte x 22.0 -char gotoxy::y#2 // reg byte x 2000002.0 -char gotoxy::y#4 // reg byte x 7000004.666666666 -char gotoxy::y#5 // reg byte x 4000000.4 -void insertup() -char insertup::$3 // reg byte a 2.000000002E9 -char insertup::cy -char insertup::cy#0 // cy zp[1]:14 7.769230784615384E7 -char insertup::i -char insertup::i#1 // reg byte x 2.000000002E9 -char insertup::i#2 // reg byte x 4.000000004E8 -unsigned int insertup::line -unsigned int insertup::line#0 // line zp[2]:8 2.000000002E9 -char *insertup::start -char *insertup::start#0 // start zp[2]:8 1.000000001E9 -char insertup::width -char insertup::width#0 // width zp[1]:11 8.416666683333334E7 -char kbhit() -__constant char * const kbhit::GETIN = (char *) 65508 -__constant char * const kbhit::IN_DEV = (char *) 650 -__loadstore volatile char kbhit::ch // zp[1]:56 1001.0 -__constant char * const kbhit::chptr = &kbhit::ch -char kbhit::return -char kbhit::return#0 // reg byte a 2002.0 -char kbhit::return#1 // reg byte a 300.75 -char kbhit::return#2 // reg byte a 202.0 -char kbhit::return#3 // reg byte a 202.0 -void main() -char main::$35 // reg byte a 202.0 -char main::$40 // reg byte a 202.0 -char main::bgcolor1_color -char main::bgcolor2_color -char main::c -char main::c#1 // c zp[1]:55 1501.5 -char main::c#2 // c zp[1]:55 250.25 -char main::c1 -char main::c1#1 // reg byte x 1501.5 -char main::c1#2 // reg byte x 250.25 -char main::column -char main::column#1 // reg byte x 400.4 -char main::column#2 // reg byte x 600.5999999999999 -char main::column1 -char main::column1#1 // column1 zp[1]:41 400.4 -char main::column1#2 // column1 zp[1]:41 600.5999999999999 -char main::p -char main::p#1 // reg byte x 1501.5 -char main::p#2 // reg byte x 2002.0 -char main::r -char main::r#1 // r zp[1]:66 151.5 -char main::r#5 // r zp[1]:66 16.833333333333332 -char main::r1 -char main::r1#1 // r1 zp[1]:67 151.5 -char main::r1#5 // r1 zp[1]:67 16.833333333333332 -char main::row -char main::row#1 // row zp[1]:64 67.33333333333333 -char main::row#10 // row_1 zp[1]:65 109.36363636363637 -char main::row#3 // row_1 zp[1]:65 67.33333333333333 -char main::row#9 // row zp[1]:64 109.36363636363637 -__constant char main::s[$38] = "vera in tile mode 8 x 8, color depth 8 bits per pixel. -" -__constant char main::s1[$3a] = "in this mode, tiles are 8 pixels wide and 8 pixels tall. -" -__constant char main::s2[$2f] = "each tile can have a variation of 256 colors. -" -__constant char main::s3[$44] = "the vera palette of 256 colors, can be used by setting the palette -" -__constant char main::s4[$17] = "offset for each tile. -" -__constant char main::s5[$4b] = "here each column is displaying the same tile, but with different offsets! -" -__constant char main::s6[$3f] = "each offset aligns to multiples of 16 colors in the palette!. -" -__constant char main::s7[$3e] = "however, the first color will always be transparent (black). -" -char main::t -char main::t#1 // t zp[1]:63 151.5 -char main::t#5 // t zp[1]:63 25.25 -char main::textcolor1_color -char main::textcolor2_color -unsigned int main::tile -unsigned int main::tile#1 // tile zp[2]:36 2002.0 -unsigned int main::tile#10 // tile zp[2]:36 202.0 -unsigned int main::tile#11 // tile zp[2]:36 202.0 -unsigned int main::tile#12 // tile zp[2]:36 350.5 -unsigned int main::tile#13 // tile zp[2]:36 350.5 -unsigned int main::tile#4 // tile zp[2]:36 2002.0 -unsigned int main::tile#6 // tile zp[2]:36 517.3333333333334 -unsigned int main::tile#8 // tile zp[2]:36 517.3333333333334 -char *main::tilebase -char *main::tilebase#2 // tilebase zp[2]:72 67.33333333333333 -char *main::tilebase#7 // tilebase zp[2]:72 28.857142857142858 -__constant char main::tiles[$100] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -char main::vera_layer_hide1_$0 // reg byte a 22.0 -char main::vera_layer_hide1_layer -char main::vera_layer_show1_layer -void memcpy_in_vram(char dest_bank , void *dest , char dest_increment , char src_bank , void *src , char src_increment , unsigned int num) -char memcpy_in_vram::$0 // reg byte a 2.0000000002E10 -char memcpy_in_vram::$1 // reg byte a 2.0000000002E10 -char memcpy_in_vram::$2 // reg byte a 2.0000000002E10 -char memcpy_in_vram::$3 // reg byte a 2.0000000002E10 -char memcpy_in_vram::$4 // reg byte a 2.0000000002E10 -char memcpy_in_vram::$5 // reg byte a 2.0000000002E10 -void *memcpy_in_vram::dest -void *memcpy_in_vram::dest#0 // dest zp[2]:8 6.666666673333334E8 -void *memcpy_in_vram::dest#3 // dest zp[2]:8 1.9090909093636363E9 -char memcpy_in_vram::dest_bank -char memcpy_in_vram::dest_bank#3 // dest_bank zp[1]:10 7.692307693076923E8 -char memcpy_in_vram::dest_increment -unsigned int memcpy_in_vram::i -unsigned int memcpy_in_vram::i#1 // i zp[2]:2 2.00000000002E11 -unsigned int memcpy_in_vram::i#2 // i zp[2]:2 1.00000000001E11 -unsigned int memcpy_in_vram::num -unsigned int memcpy_in_vram::num#0 // num zp[2]:4 1.000000001E9 -unsigned int memcpy_in_vram::num#4 // num zp[2]:4 5.315789473789474E9 -void *memcpy_in_vram::src -char *memcpy_in_vram::src#0 // src zp[2]:6 3.333333336666667E8 -void *memcpy_in_vram::src#3 // src zp[2]:6 5.25000000075E9 -void *memcpy_in_vram::src#4 // src zp[2]:6 2.000000002E9 -char memcpy_in_vram::src_bank -char memcpy_in_vram::src_bank#3 // reg byte y 1.6666666668333333E9 -char memcpy_in_vram::src_increment -void memcpy_to_vram(char vbank , void *vdest , void *src , unsigned int num) -char memcpy_to_vram::$0 // reg byte a 2002.0 -char memcpy_to_vram::$1 // reg byte a 2002.0 -char *memcpy_to_vram::end -__constant char *memcpy_to_vram::end#0 = (char *)(void *)main::tiles+$100 // end -unsigned int memcpy_to_vram::num -char *memcpy_to_vram::s -char *memcpy_to_vram::s#1 // s zp[2]:4 200002.0 -char *memcpy_to_vram::s#2 // s zp[2]:4 133334.66666666666 -void *memcpy_to_vram::src -char memcpy_to_vram::vbank -void *memcpy_to_vram::vdest -void *memcpy_to_vram::vdest#1 // vdest zp[2]:8 202.0 -void *memcpy_to_vram::vdest#2 // vdest zp[2]:8 525.75 -void printf_str(void (*putc)(char) , const char *s) -char printf_str::c -char printf_str::c#1 // reg byte a 1001.0 -void (*printf_str::putc)(char) -const char *printf_str::s -const char *printf_str::s#0 // s zp[2]:30 400.4 -const char *printf_str::s#10 // s zp[2]:30 101.0 -const char *printf_str::s#9 // s zp[2]:30 1552.0 -void screenlayer(char layer) -unsigned int screenlayer::$2 // zp[2]:16 202.0 -char screenlayer::$3 // reg byte a 202.0 -unsigned int screenlayer::$4 // zp[2]:53 202.0 -unsigned int screenlayer::$5 // zp[2]:58 202.0 -char screenlayer::layer -char screenlayer::vera_layer_get_height1_$0 // reg byte a 202.0 -char screenlayer::vera_layer_get_height1_$1 // reg byte a 202.0 -char screenlayer::vera_layer_get_height1_$2 // reg byte a 202.0 -char screenlayer::vera_layer_get_height1_$3 // reg byte a 202.0 -char *screenlayer::vera_layer_get_height1_config -char *screenlayer::vera_layer_get_height1_config#0 // vera_layer_get_height1_config zp[2]:43 202.0 -char screenlayer::vera_layer_get_height1_layer -char screenlayer::vera_layer_get_height1_layer#0 // reg byte a 202.0 -unsigned int screenlayer::vera_layer_get_height1_return -unsigned int screenlayer::vera_layer_get_height1_return#0 // vera_layer_get_height1_return zp[2]:58 202.0 -unsigned int screenlayer::vera_layer_get_height1_return#1 // vera_layer_get_height1_return zp[2]:58 202.0 -char screenlayer::vera_layer_get_width1_$0 // reg byte a 202.0 -char screenlayer::vera_layer_get_width1_$1 // reg byte a 202.0 -char screenlayer::vera_layer_get_width1_$2 // reg byte a 202.0 -char screenlayer::vera_layer_get_width1_$3 // reg byte a 202.0 -char *screenlayer::vera_layer_get_width1_config -char *screenlayer::vera_layer_get_width1_config#0 // vera_layer_get_width1_config zp[2]:34 202.0 -char screenlayer::vera_layer_get_width1_layer -char screenlayer::vera_layer_get_width1_layer#0 // reg byte a 202.0 -unsigned int screenlayer::vera_layer_get_width1_return -unsigned int screenlayer::vera_layer_get_width1_return#0 // vera_layer_get_width1_return zp[2]:16 202.0 -unsigned int screenlayer::vera_layer_get_width1_return#1 // vera_layer_get_width1_return zp[2]:16 202.0 -void screensize(char *x , char *y) -char screensize::$1 // reg byte a 202.0 -char screensize::$3 // reg byte a 202.0 -char screensize::hscale -char screensize::hscale#0 // reg byte a 202.0 -char screensize::vscale -char screensize::vscale#0 // reg byte a 202.0 -char *screensize::x -__constant char *screensize::x#0 = &conio_screen_width // x -char *screensize::y -__constant char *screensize::y#0 = &conio_screen_height // y -__constant char vera_layer_backcolor[2] = { BLUE, BLUE } -__constant char *vera_layer_config[2] = { VERA_L0_CONFIG, VERA_L1_CONFIG } -__constant char vera_layer_enable[2] = { VERA_LAYER0_ENABLE, VERA_LAYER1_ENABLE } -char vera_layer_get_backcolor(char layer) -char vera_layer_get_backcolor::layer -char vera_layer_get_backcolor::layer#0 // reg byte y 1102.0 -char vera_layer_get_backcolor::return -char vera_layer_get_backcolor::return#0 // reg byte a 202.0 -char vera_layer_get_backcolor::return#1 // reg byte a 367.33333333333337 -char vera_layer_get_color(char layer) -char vera_layer_get_color::$0 // reg byte a 2.000000002E9 -char vera_layer_get_color::$1 // reg byte a 2.000000002E9 -char vera_layer_get_color::$3 // reg byte a 2.000000002E9 -char *vera_layer_get_color::addr -char *vera_layer_get_color::addr#0 // addr zp[2]:4 2.000000002E9 -char vera_layer_get_color::layer -char vera_layer_get_color::layer#0 // reg byte x 20002.0 -char vera_layer_get_color::layer#1 // reg byte x 2.00000002E8 -char vera_layer_get_color::layer#2 // reg byte x 6.833350010000001E8 -char vera_layer_get_color::return -char vera_layer_get_color::return#0 // reg byte a 20002.0 -char vera_layer_get_color::return#1 // reg byte a 2.000000002E9 -char vera_layer_get_color::return#2 // reg byte a 2.000000002E9 -char vera_layer_get_color::return#3 // reg byte a 5.25002501E8 -char vera_layer_get_color::return#4 // reg byte a 2.00000002E8 -char vera_layer_get_mapbase_bank(char layer) -char vera_layer_get_mapbase_bank::layer -char vera_layer_get_mapbase_bank::layer#0 // reg byte y 1102.0 -char vera_layer_get_mapbase_bank::return -char vera_layer_get_mapbase_bank::return#0 // reg byte x 367.33333333333337 -char vera_layer_get_mapbase_bank::return#2 // reg byte x 202.0 -unsigned int vera_layer_get_mapbase_offset(char layer) -char vera_layer_get_mapbase_offset::$0 // reg byte a 2002.0 -char vera_layer_get_mapbase_offset::layer -char vera_layer_get_mapbase_offset::layer#0 // reg byte a 1102.0 -unsigned int vera_layer_get_mapbase_offset::return -unsigned int vera_layer_get_mapbase_offset::return#0 // return zp[2]:16 367.33333333333337 -unsigned int vera_layer_get_mapbase_offset::return#2 // return zp[2]:16 202.0 -char vera_layer_get_rowshift(char layer) -char vera_layer_get_rowshift::layer -char vera_layer_get_rowshift::layer#0 // reg byte y 1102.0 -char vera_layer_get_rowshift::return -char vera_layer_get_rowshift::return#0 // reg byte a 367.33333333333337 -char vera_layer_get_rowshift::return#2 // reg byte a 202.0 -unsigned int vera_layer_get_rowskip(char layer) -char vera_layer_get_rowskip::$0 // reg byte a 2002.0 -char vera_layer_get_rowskip::layer -char vera_layer_get_rowskip::layer#0 // reg byte a 1102.0 -unsigned int vera_layer_get_rowskip::return -unsigned int vera_layer_get_rowskip::return#0 // return zp[2]:53 367.33333333333337 -unsigned int vera_layer_get_rowskip::return#2 // return zp[2]:53 202.0 -char vera_layer_get_textcolor(char layer) -char vera_layer_get_textcolor::layer -char vera_layer_get_textcolor::layer#0 // reg byte y 1102.0 -char vera_layer_get_textcolor::return -char vera_layer_get_textcolor::return#0 // reg byte a 202.0 -char vera_layer_get_textcolor::return#1 // reg byte a 367.33333333333337 -__constant const char vera_layer_hflip[2] = { 0, 4 } -__constant char *vera_layer_mapbase[2] = { VERA_L0_MAPBASE, VERA_L1_MAPBASE } -void vera_layer_mode_text(char layer , unsigned long mapbase_address , unsigned long tilebase_address , unsigned int mapwidth , unsigned int mapheight , char tilewidth , char tileheight , unsigned int color_mode) -unsigned int vera_layer_mode_text::color_mode -char vera_layer_mode_text::layer -__constant char vera_layer_mode_text::layer#0 = 1 // layer -unsigned long vera_layer_mode_text::mapbase_address -__constant unsigned long vera_layer_mode_text::mapbase_address#0 = 0 // mapbase_address -unsigned int vera_layer_mode_text::mapheight -__constant unsigned int vera_layer_mode_text::mapheight#0 = $40 // mapheight -unsigned int vera_layer_mode_text::mapwidth -__constant unsigned int vera_layer_mode_text::mapwidth#0 = $80 // mapwidth -unsigned long vera_layer_mode_text::tilebase_address -__constant unsigned long vera_layer_mode_text::tilebase_address#0 = $f800 // tilebase_address -char vera_layer_mode_text::tileheight -__constant char vera_layer_mode_text::tileheight#0 = 8 // tileheight -char vera_layer_mode_text::tilewidth -__constant char vera_layer_mode_text::tilewidth#0 = 8 // tilewidth -void vera_layer_mode_tile(char layer , unsigned long mapbase_address , unsigned long tilebase_address , unsigned int mapwidth , unsigned int mapheight , char tilewidth , char tileheight , char color_depth) -unsigned int vera_layer_mode_tile::$1 // zp[2]:53 1001.0 -char vera_layer_mode_tile::$11 // reg byte a 2002.0 -char vera_layer_mode_tile::$12 // reg byte a 2002.0 -char vera_layer_mode_tile::$13 // reg byte a 2002.0 -char vera_layer_mode_tile::$14 // reg byte a 2002.0 -char vera_layer_mode_tile::$17 // zp[1]:61 250.25 -char vera_layer_mode_tile::$18 // zp[1]:60 273.0 -char vera_layer_mode_tile::$2 // reg byte a 2002.0 -unsigned int vera_layer_mode_tile::$6 // zp[2]:43 2002.0 -char vera_layer_mode_tile::$7 // reg byte a 2002.0 -char vera_layer_mode_tile::color_depth -char vera_layer_mode_tile::color_depth#5 // reg byte x 1001.0 -char vera_layer_mode_tile::config -char vera_layer_mode_tile::config#10 // reg byte x 2002.0 -char vera_layer_mode_tile::config#11 // reg byte x 2002.0 -char vera_layer_mode_tile::config#12 // reg byte x 2002.0 -char vera_layer_mode_tile::config#17 // reg byte x 625.625 -char vera_layer_mode_tile::config#21 // reg byte x 2002.0000000000002 -char vera_layer_mode_tile::config#25 // reg byte x 3003.0 -char vera_layer_mode_tile::config#6 // reg byte x 500.5 -char vera_layer_mode_tile::config#7 // reg byte x 500.5 -char vera_layer_mode_tile::config#8 // reg byte x 500.5 -char vera_layer_mode_tile::layer -char vera_layer_mode_tile::layer#10 // layer zp[1]:62 227.49999999999994 -char vera_layer_mode_tile::mapbase -char vera_layer_mode_tile::mapbase#0 // reg byte x 1001.0 -unsigned long vera_layer_mode_tile::mapbase_address -unsigned long vera_layer_mode_tile::mapbase_address#0 // mapbase_address zp[4]:45 2002.0 -unsigned long vera_layer_mode_tile::mapbase_address#10 // mapbase_address_1 zp[4]:74 88.97777777777777 -unsigned int vera_layer_mode_tile::mapheight -unsigned int vera_layer_mode_tile::mapheight#10 // mapheight zp[2]:68 133.46666666666667 -unsigned int vera_layer_mode_tile::mapwidth -unsigned int vera_layer_mode_tile::mapwidth#10 // mapwidth zp[2]:16 400.4 -char vera_layer_mode_tile::tilebase -char vera_layer_mode_tile::tilebase#0 // reg byte a 2002.0 -char vera_layer_mode_tile::tilebase#1 // reg byte x 1334.6666666666667 -char vera_layer_mode_tile::tilebase#10 // reg byte x 2002.0 -char vera_layer_mode_tile::tilebase#12 // reg byte x 2002.0000000000002 -char vera_layer_mode_tile::tilebase#3 // reg byte x 2002.0 -char vera_layer_mode_tile::tilebase#5 // reg byte x 2002.0 -unsigned long vera_layer_mode_tile::tilebase_address -unsigned long vera_layer_mode_tile::tilebase_address#0 // tilebase_address zp[4]:49 2002.0 -unsigned long vera_layer_mode_tile::tilebase_address#10 // tilebase_address_1 zp[4]:78 72.8 -char vera_layer_mode_tile::tileheight -char vera_layer_mode_tile::tileheight#10 // tileheight zp[1]:85 31.77777777777778 -char vera_layer_mode_tile::tilewidth -char vera_layer_mode_tile::tilewidth#10 // tilewidth zp[1]:84 33.932203389830505 -__constant char vera_layer_rowshift[2] = { 0, 0 } -__constant unsigned int vera_layer_rowskip[2] = { 0, 0 } -char vera_layer_set_backcolor(char layer , char color) -char vera_layer_set_backcolor::color -char vera_layer_set_backcolor::color#3 // reg byte a 101.0 -char vera_layer_set_backcolor::layer -char vera_layer_set_backcolor::layer#1 // reg byte y 22.0 -char vera_layer_set_backcolor::layer#2 // reg byte y 22.0 -char vera_layer_set_backcolor::layer#3 // reg byte y 123.0 -char vera_layer_set_backcolor::old -char vera_layer_set_backcolor::return -void vera_layer_set_config(char layer , char config) -char vera_layer_set_config::$0 // reg byte a 20002.0 -char *vera_layer_set_config::addr -char *vera_layer_set_config::addr#0 // addr zp[2]:34 20002.0 -char vera_layer_set_config::config -char vera_layer_set_config::config#0 // reg byte x 3667.333333333333 -char vera_layer_set_config::layer -char vera_layer_set_config::layer#0 // reg byte a 5501.0 -void vera_layer_set_mapbase(char layer , char mapbase) -char vera_layer_set_mapbase::$0 // reg byte a 20002.0 -char *vera_layer_set_mapbase::addr -char *vera_layer_set_mapbase::addr#0 // addr zp[2]:34 20002.0 -char vera_layer_set_mapbase::layer -char vera_layer_set_mapbase::layer#0 // reg byte a 1001.0 -char vera_layer_set_mapbase::layer#3 // reg byte a 11002.0 -char vera_layer_set_mapbase::mapbase -char vera_layer_set_mapbase::mapbase#0 // reg byte x 2002.0 -char vera_layer_set_mapbase::mapbase#3 // reg byte x 3667.333333333333 -void vera_layer_set_text_color_mode(char layer , char color_mode) -char *vera_layer_set_text_color_mode::addr -char *vera_layer_set_text_color_mode::addr#0 // addr zp[2]:34 2502.5 -char vera_layer_set_text_color_mode::color_mode -char vera_layer_set_text_color_mode::layer -char vera_layer_set_textcolor(char layer , char color) -char vera_layer_set_textcolor::color -char vera_layer_set_textcolor::layer -char vera_layer_set_textcolor::layer#1 // reg byte y 22.0 -char vera_layer_set_textcolor::layer#2 // reg byte y 22.0 -char vera_layer_set_textcolor::layer#3 // reg byte y 123.0 -char vera_layer_set_textcolor::old -char vera_layer_set_textcolor::return -void vera_layer_set_tilebase(char layer , char tilebase) -char vera_layer_set_tilebase::$0 // reg byte a 20002.0 -char *vera_layer_set_tilebase::addr -char *vera_layer_set_tilebase::addr#0 // addr zp[2]:34 20002.0 -char vera_layer_set_tilebase::layer -char vera_layer_set_tilebase::layer#0 // reg byte a 5501.0 -char vera_layer_set_tilebase::tilebase -char vera_layer_set_tilebase::tilebase#0 // reg byte x 3667.333333333333 -__constant char vera_layer_textcolor[2] = { WHITE, WHITE } -__constant char *vera_layer_tilebase[2] = { VERA_L0_TILEBASE, VERA_L1_TILEBASE } -__constant const char vera_layer_vflip[2] = { 0, 8 } -__constant unsigned long vera_mapbase_address[2] = { 0, 0 } -__constant char vera_mapbase_bank[2] = { 0, 0 } -__constant unsigned int vera_mapbase_offset[2] = { 0, 0 } -void vera_tile_area(char layer , unsigned int tileindex , char x , char y , char w , char h , char hflip , char vflip , char offset) -unsigned int vera_tile_area::$10 // zp[2]:8 20002.0 -unsigned int vera_tile_area::$4 // zp[2]:8 20002.0 -char vera_tile_area::$5 // reg byte a 20002.0 -char vera_tile_area::c -char vera_tile_area::c#1 // reg byte y 2.00000002E8 -char vera_tile_area::c#2 // reg byte y 7.500000075E7 -char vera_tile_area::h -char vera_tile_area::h#6 // h zp[1]:32 312500.03125 -char vera_tile_area::hflip -char vera_tile_area::hflip#0 // hflip zp[1]:40 5000.5 -char vera_tile_area::index_h -char vera_tile_area::index_h#0 // reg byte a 20002.0 -char vera_tile_area::index_h#1 // reg byte a 20002.0 -char vera_tile_area::index_h#2 // index_h zp[1]:27 4348260.956521738 -char vera_tile_area::index_l -char vera_tile_area::index_l#0 // index_l zp[1]:28 3846538.5384615385 -char vera_tile_area::layer -unsigned long vera_tile_area::mapbase -unsigned long vera_tile_area::mapbase#0 // mapbase zp[4]:20 1818.3636363636363 -unsigned long vera_tile_area::mapbase#1 // mapbase zp[4]:20 10001.0 -unsigned long vera_tile_area::mapbase#10 // mapbase zp[4]:20 3334000.4 -unsigned long vera_tile_area::mapbase#2 // mapbase zp[4]:20 20002.0 -unsigned long vera_tile_area::mapbase#3 // mapbase zp[4]:20 1.0000001E7 -char vera_tile_area::offset -char vera_tile_area::r -char vera_tile_area::r#1 // r zp[1]:11 2.0000002E7 -char vera_tile_area::r#2 // r zp[1]:11 1875000.1875 -unsigned int vera_tile_area::rowskip -unsigned int vera_tile_area::rowskip#0 // rowskip zp[2]:30 345172.4827586207 -char vera_tile_area::shift -char vera_tile_area::shift#0 // shift zp[1]:42 3333.6666666666665 -unsigned int vera_tile_area::tileindex -unsigned int vera_tile_area::tileindex#1 // tileindex zp[2]:36 667.3333333333334 -unsigned int vera_tile_area::tileindex#3 // tileindex zp[2]:36 667.3333333333334 -unsigned int vera_tile_area::tileindex#5 // tileindex zp[2]:36 3143.4285714285716 -char vera_tile_area::vera_vram_address01_$0 // reg byte a 2.0000002E7 -char vera_tile_area::vera_vram_address01_$1 // reg byte a 2.0000002E7 -char vera_tile_area::vera_vram_address01_$2 // reg byte a 2.0000002E7 -char vera_tile_area::vera_vram_address01_$3 // reg byte a 2.0000002E7 -unsigned long vera_tile_area::vera_vram_address01_bankaddr -char vera_tile_area::vera_vram_address01_incr -char vera_tile_area::vflip -char vera_tile_area::vflip#0 // vflip zp[1]:27 5000.5 -char vera_tile_area::w -char vera_tile_area::w#11 // w zp[1]:14 3125000.03125 -char vera_tile_area::x -char vera_tile_area::x#1 // x zp[1]:41 1001.0 -char vera_tile_area::x#3 // x zp[1]:41 1001.0 -char vera_tile_area::x#5 // x zp[1]:41 923.3076923076923 -char vera_tile_area::y -char vera_tile_area::y#1 // y zp[1]:10 2002.0 -char vera_tile_area::y#3 // y zp[1]:10 2002.0 -char vera_tile_area::y#5 // y zp[1]:10 200.2 -__constant unsigned long vera_tilebase_address[2] = { 0, 0 } -__constant char vera_tilebase_bank[2] = { 0, 0 } -__constant unsigned int vera_tilebase_offset[2] = { 0, 0 } - -zp[1]:82 [ conio_x16_init::line#3 conio_x16_init::line#1 conio_x16_init::line#0 ] -zp[2]:18 [ CONIO_SCREEN_TEXT#12 ] -zp[1]:57 [ CONIO_SCREEN_BANK#12 ] -zp[2]:72 [ main::tilebase#7 main::tilebase#2 ] -zp[1]:63 [ main::t#5 main::t#1 ] -reg byte x [ main::p#2 main::p#1 ] -zp[1]:64 [ main::row#9 main::row#1 ] -zp[1]:66 [ main::r#5 main::r#1 ] -zp[2]:36 [ main::tile#6 main::tile#10 main::tile#12 main::tile#1 vera_tile_area::tileindex#5 vera_tile_area::tileindex#3 vera_tile_area::tileindex#1 main::tile#8 main::tile#11 main::tile#13 main::tile#4 ] -reg byte x [ main::column#2 main::column#1 ] -zp[1]:55 [ main::c#2 main::c#1 ] -zp[1]:65 [ main::row#10 main::row#3 ] -zp[1]:67 [ main::r1#5 main::r1#1 ] -zp[1]:41 [ main::column1#2 main::column1#1 vera_tile_area::x#5 vera_tile_area::x#3 vera_tile_area::x#1 ] -reg byte x [ main::c1#2 main::c1#1 ] -reg byte y [ vera_layer_set_textcolor::layer#3 vera_layer_set_textcolor::layer#1 vera_layer_set_textcolor::layer#2 ] -reg byte y [ vera_layer_set_backcolor::layer#3 vera_layer_set_backcolor::layer#1 vera_layer_set_backcolor::layer#2 ] -reg byte a [ vera_layer_set_backcolor::color#3 ] -reg byte a [ vera_layer_set_mapbase::layer#3 vera_layer_set_mapbase::layer#0 ] -reg byte x [ vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::mapbase#0 ] -reg byte x [ gotoxy::y#5 gotoxy::y#4 gotoxy::y#1 gotoxy::y#2 ] -reg byte x [ vera_layer_get_color::layer#2 vera_layer_get_color::layer#1 vera_layer_get_color::layer#0 ] -reg byte a [ vera_layer_get_color::return#3 vera_layer_get_color::return#1 vera_layer_get_color::return#2 ] -reg byte y [ memcpy_in_vram::src_bank#3 ] -reg byte x [ vera_layer_mode_tile::color_depth#5 ] -zp[1]:62 [ vera_layer_mode_tile::layer#10 ] -zp[2]:68 [ vera_layer_mode_tile::mapheight#10 ] -zp[4]:74 [ vera_layer_mode_tile::mapbase_address#10 ] -zp[4]:78 [ vera_layer_mode_tile::tilebase_address#10 ] -zp[1]:84 [ vera_layer_mode_tile::tilewidth#10 ] -zp[1]:85 [ vera_layer_mode_tile::tileheight#10 ] -reg byte x [ vera_layer_mode_tile::config#25 vera_layer_mode_tile::config#21 vera_layer_mode_tile::config#17 vera_layer_mode_tile::config#6 vera_layer_mode_tile::config#7 vera_layer_mode_tile::config#8 vera_layer_mode_tile::config#10 vera_layer_mode_tile::config#11 vera_layer_mode_tile::config#12 ] -reg byte x [ vera_layer_mode_tile::tilebase#10 vera_layer_mode_tile::tilebase#12 vera_layer_mode_tile::tilebase#1 vera_layer_mode_tile::tilebase#3 vera_layer_mode_tile::tilebase#5 ] -reg byte y [ clrscr::c#2 clrscr::c#1 ] -zp[4]:20 [ vera_tile_area::mapbase#10 vera_tile_area::mapbase#2 vera_tile_area::mapbase#3 vera_tile_area::mapbase#1 vera_tile_area::mapbase#0 ] -reg byte y [ vera_tile_area::c#2 vera_tile_area::c#1 ] -reg byte x [ insertup::i#2 insertup::i#1 ] -zp[2]:2 [ clearline::c#2 clearline::c#1 memcpy_in_vram::i#2 memcpy_in_vram::i#1 ] -zp[1]:15 [ conio_screen_width ] -zp[1]:33 [ conio_screen_height ] -zp[1]:29 [ conio_screen_layer ] -zp[2]:70 [ conio_width ] -zp[2]:38 [ conio_height ] -zp[1]:24 [ conio_rowshift ] -zp[2]:25 [ conio_rowskip ] -zp[1]:10 [ cputc::c#0 vera_tile_area::y#5 vera_tile_area::y#3 vera_tile_area::y#1 clrscr::l#2 clrscr::l#1 memcpy_in_vram::dest_bank#3 ] -reg byte a [ vera_layer_get_color::return#0 ] -reg byte x [ cputc::color#0 ] -reg byte a [ cputc::$15 ] -reg byte a [ cputc::$2 ] -reg byte a [ cputc::$4 ] -reg byte a [ cputc::$5 ] -reg byte a [ cputc::$6 ] -reg byte a [ cputc::scroll_enable#0 ] -zp[2]:6 [ cputc::$16 clrscr::line_text#2 clrscr::line_text#1 clrscr::line_text#0 memcpy_in_vram::src#3 memcpy_in_vram::src#4 memcpy_in_vram::src#0 ] -reg byte a [ kbhit::return#2 ] -reg byte a [ main::$35 ] -reg byte a [ kbhit::return#3 ] -reg byte a [ main::$40 ] -reg byte a [ main::vera_layer_hide1_$0 ] -reg byte a [ screensize::hscale#0 ] -reg byte a [ screensize::$1 ] -reg byte a [ screensize::vscale#0 ] -reg byte a [ screensize::$3 ] -reg byte y [ vera_layer_get_mapbase_bank::layer#0 ] -reg byte x [ vera_layer_get_mapbase_bank::return#2 ] -reg byte x [ CONIO_SCREEN_BANK#15 ] -reg byte a [ vera_layer_get_mapbase_offset::layer#0 ] -zp[2]:86 [ CONIO_SCREEN_TEXT#17 ] -reg byte a [ screenlayer::vera_layer_get_width1_layer#0 ] -reg byte a [ screenlayer::vera_layer_get_width1_$2 ] -reg byte a [ screenlayer::vera_layer_get_width1_$0 ] -reg byte a [ screenlayer::vera_layer_get_width1_$1 ] -reg byte a [ screenlayer::vera_layer_get_width1_$3 ] -reg byte y [ vera_layer_get_rowshift::layer#0 ] -reg byte a [ vera_layer_get_rowshift::return#2 ] -reg byte a [ screenlayer::$3 ] -reg byte a [ vera_layer_get_rowskip::layer#0 ] -reg byte a [ screenlayer::vera_layer_get_height1_layer#0 ] -reg byte a [ screenlayer::vera_layer_get_height1_$2 ] -reg byte a [ screenlayer::vera_layer_get_height1_$0 ] -reg byte a [ screenlayer::vera_layer_get_height1_$1 ] -reg byte a [ screenlayer::vera_layer_get_height1_$3 ] -zp[2]:58 [ screenlayer::vera_layer_get_height1_return#0 screenlayer::vera_layer_get_height1_return#1 screenlayer::$5 ] -reg byte a [ vera_layer_set_mapbase::$0 ] -zp[2]:16 [ gotoxy::$6 gotoxy::line_offset#0 screenlayer::vera_layer_get_width1_return#0 screenlayer::vera_layer_get_width1_return#1 screenlayer::$2 vera_layer_get_mapbase_offset::return#2 vera_layer_get_mapbase_offset::return#0 vera_layer_mode_tile::mapwidth#10 ] -reg byte a [ gotoxy::$5 ] -reg byte a [ vera_layer_get_color::$3 ] -reg byte a [ vera_layer_get_color::$0 ] -reg byte a [ vera_layer_get_color::$1 ] -reg byte a [ cputln::$2 ] -zp[2]:4 [ cputln::temp#0 cputln::temp#1 vera_layer_get_color::addr#0 memcpy_to_vram::s#2 memcpy_to_vram::s#1 memcpy_in_vram::num#4 memcpy_in_vram::num#0 ] -reg byte a [ cputln::$3 ] -reg byte a [ memcpy_in_vram::$0 ] -reg byte a [ memcpy_in_vram::$1 ] -reg byte a [ memcpy_in_vram::$2 ] -reg byte a [ memcpy_in_vram::$3 ] -reg byte a [ memcpy_in_vram::$4 ] -reg byte a [ memcpy_in_vram::$5 ] -reg byte a [ vera_layer_mode_tile::$14 ] -reg byte a [ vera_layer_set_config::layer#0 ] -reg byte x [ vera_layer_set_config::config#0 ] -zp[2]:53 [ vera_layer_mode_tile::$1 vera_layer_get_rowskip::return#2 screenlayer::$4 vera_layer_get_rowskip::return#0 ] -zp[1]:61 [ vera_layer_mode_tile::$17 ] -reg byte a [ vera_layer_mode_tile::$2 ] -zp[1]:60 [ vera_layer_mode_tile::$18 ] -zp[4]:45 [ vera_layer_mode_tile::mapbase_address#0 ] -reg byte x [ vera_layer_mode_tile::mapbase#0 ] -zp[2]:43 [ vera_layer_mode_tile::$6 screenlayer::vera_layer_get_height1_config#0 ] -reg byte a [ vera_layer_mode_tile::$7 ] -zp[4]:49 [ vera_layer_mode_tile::tilebase_address#0 ] -reg byte a [ vera_layer_mode_tile::tilebase#0 ] -reg byte a [ vera_layer_set_tilebase::layer#0 ] -reg byte x [ vera_layer_set_tilebase::tilebase#0 ] -reg byte a [ vera_layer_mode_tile::$13 ] -reg byte a [ vera_layer_mode_tile::$12 ] -reg byte a [ vera_layer_mode_tile::$11 ] -reg byte y [ vera_layer_get_backcolor::layer#0 ] -reg byte a [ vera_layer_get_backcolor::return#0 ] -reg byte a [ clrscr::$0 ] -zp[1]:83 [ clrscr::$1 ] -reg byte y [ vera_layer_get_textcolor::layer#0 ] -reg byte a [ vera_layer_get_textcolor::return#0 ] -reg byte a [ clrscr::$2 ] -zp[1]:32 [ clrscr::color#0 vera_tile_area::h#6 ] -reg byte a [ clrscr::$9 ] -reg byte a [ clrscr::$5 ] -reg byte a [ clrscr::$6 ] -reg byte a [ clrscr::$7 ] -reg byte a [ memcpy_to_vram::$0 ] -reg byte a [ memcpy_to_vram::$1 ] -zp[1]:42 [ vera_tile_area::shift#0 ] -zp[2]:30 [ vera_tile_area::rowskip#0 printf_str::s#9 printf_str::s#10 printf_str::s#0 ] -zp[1]:40 [ vera_tile_area::hflip#0 ] -zp[1]:27 [ vera_tile_area::vflip#0 vera_tile_area::index_h#2 ] -zp[1]:28 [ vera_tile_area::index_l#0 ] -reg byte a [ vera_tile_area::index_h#0 ] -reg byte a [ vera_tile_area::index_h#1 ] -zp[2]:8 [ vera_tile_area::$10 vera_tile_area::$4 cputc::conio_addr#0 cputc::conio_addr#1 memcpy_to_vram::vdest#2 memcpy_to_vram::vdest#1 memcpy_in_vram::dest#3 memcpy_in_vram::dest#0 insertup::start#0 insertup::line#0 ] -reg byte a [ vera_tile_area::$5 ] -reg byte a [ vera_tile_area::vera_vram_address01_$0 ] -reg byte a [ vera_tile_area::vera_vram_address01_$1 ] -reg byte a [ vera_tile_area::vera_vram_address01_$2 ] -reg byte a [ vera_tile_area::vera_vram_address01_$3 ] -reg byte a [ printf_str::c#1 ] -zp[1]:56 [ kbhit::ch ] -reg byte a [ kbhit::return#0 ] -reg byte a [ kbhit::return#1 ] -reg byte x [ vera_layer_get_mapbase_bank::return#0 ] -reg byte a [ vera_layer_get_mapbase_offset::$0 ] -reg byte a [ vera_layer_get_rowshift::return#0 ] -reg byte a [ vera_layer_get_rowskip::$0 ] -reg byte a [ vera_layer_set_config::$0 ] -reg byte a [ vera_layer_set_tilebase::$0 ] -zp[2]:34 [ vera_layer_set_tilebase::addr#0 vera_layer_set_config::addr#0 vera_layer_set_text_color_mode::addr#0 vera_layer_set_mapbase::addr#0 screenlayer::vera_layer_get_width1_config#0 ] -reg byte a [ vera_layer_get_backcolor::return#1 ] -reg byte a [ vera_layer_get_textcolor::return#1 ] -zp[1]:14 [ insertup::cy#0 vera_tile_area::w#11 ] -zp[1]:11 [ insertup::width#0 vera_tile_area::r#2 vera_tile_area::r#1 ] -reg byte a [ insertup::$3 ] -reg byte a [ clearline::$5 ] -zp[2]:12 [ clearline::addr#0 ] -reg byte a [ clearline::$1 ] -reg byte a [ clearline::$2 ] -reg byte a [ vera_layer_get_color::return#4 ] -reg byte x [ clearline::color#0 ] diff --git a/src/test/ref/examples/cx16/veralib/tilemap_8bpp_8_x_8.asm b/src/test/ref/examples/cx16/veralib/tilemap_8bpp_8_x_8.asm deleted file mode 100644 index dd077d733..000000000 --- a/src/test/ref/examples/cx16/veralib/tilemap_8bpp_8_x_8.asm +++ /dev/null @@ -1,2150 +0,0 @@ -// Example program for the Commander X16. -// Demonstrates the usage of the VERA tile map modes and layering. -.cpu _65c02 - // Commodore 64 PRG executable file -.file [name="tilemap_8bpp_8_x_8.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(__start) - /// The colors of the CX16 - .const BLACK = 0 - .const WHITE = 1 - .const BLUE = 6 - .const VERA_INC_1 = $10 - .const VERA_ADDRSEL = 1 - .const VERA_LAYER1_ENABLE = $20 - .const VERA_LAYER0_ENABLE = $10 - .const VERA_LAYER_WIDTH_64 = $10 - .const VERA_LAYER_WIDTH_128 = $20 - .const VERA_LAYER_WIDTH_256 = $30 - .const VERA_LAYER_WIDTH_MASK = $30 - .const VERA_LAYER_HEIGHT_64 = $40 - .const VERA_LAYER_HEIGHT_128 = $80 - .const VERA_LAYER_HEIGHT_256 = $c0 - .const VERA_LAYER_HEIGHT_MASK = $c0 - /// Bit 0-1: Color Depth (0: 1 bpp, 1: 2 bpp, 2: 4 bpp, 3: 8 bpp) - .const VERA_LAYER_COLOR_DEPTH_1BPP = 0 - .const VERA_LAYER_COLOR_DEPTH_2BPP = 1 - .const VERA_LAYER_COLOR_DEPTH_4BPP = 2 - .const VERA_LAYER_COLOR_DEPTH_8BPP = 3 - .const VERA_LAYER_CONFIG_256C = 8 - .const VERA_TILEBASE_WIDTH_16 = 1 - .const VERA_TILEBASE_HEIGHT_16 = 2 - .const VERA_LAYER_TILEBASE_MASK = $fc - .const SIZEOF_POINTER = 2 - .const STACK_BASE = $103 - /// $9F20 VRAM Address (7:0) - .label VERA_ADDRX_L = $9f20 - /// $9F21 VRAM Address (15:8) - .label VERA_ADDRX_M = $9f21 - /// $9F22 VRAM Address (7:0) - /// Bit 4-7: Address Increment The following is the amount incremented per value value:increment - /// 0:0, 1:1, 2:2, 3:4, 4:8, 5:16, 6:32, 7:64, 8:128, 9:256, 10:512, 11:40, 12:80, 13:160, 14:320, 15:640 - /// Bit 3: DECR Setting the DECR bit, will decrement instead of increment by the value set by the 'Address Increment' field. - /// Bit 0: VRAM Address (16) - .label VERA_ADDRX_H = $9f22 - /// $9F23 DATA0 VRAM Data port 0 - .label VERA_DATA0 = $9f23 - /// $9F24 DATA1 VRAM Data port 1 - .label VERA_DATA1 = $9f24 - /// $9F25 CTRL Control - /// Bit 7: Reset - /// Bit 1: DCSEL - /// Bit 2: ADDRSEL - .label VERA_CTRL = $9f25 - /// $9F29 DC_VIDEO (DCSEL=0) - /// Bit 7: Current Field Read-only bit which reflects the active interlaced field in composite and RGB modes. (0: even, 1: odd) - /// Bit 6: Sprites Enable Enable output from the Sprites renderer - /// Bit 5: Layer1 Enable Enable output from the Layer1 renderer - /// Bit 4: Layer0 Enable Enable output from the Layer0 renderer - /// Bit 2: Chroma Disable Setting 'Chroma Disable' disables output of chroma in NTSC composite mode and will give a better picture on a monochrome display. (Setting this bit will also disable the chroma output on the S-video output.) - /// Bit 0-1: Output Mode 0: Video disabled, 1: VGA output, 2: NTSC composite, 3: RGB interlaced, composite sync (via VGA connector) - .label VERA_DC_VIDEO = $9f29 - /// $9F2A DC_HSCALE (DCSEL=0) Active Display H-Scale - .label VERA_DC_HSCALE = $9f2a - /// $9F2B DC_VSCALE (DCSEL=0) Active Display V-Scale - .label VERA_DC_VSCALE = $9f2b - /// $9F2D L0_CONFIG Layer 0 Configuration - .label VERA_L0_CONFIG = $9f2d - /// $9F2E L0_MAPBASE Layer 0 Map Base Address (16:9) - .label VERA_L0_MAPBASE = $9f2e - /// Bit 0: Tile Width (0:8 pixels, 1:16 pixels) - .label VERA_L0_TILEBASE = $9f2f - /// $9F34 L1_CONFIG Layer 1 Configuration - .label VERA_L1_CONFIG = $9f34 - /// $9F35 L1_MAPBASE Layer 1 Map Base Address (16:9) - .label VERA_L1_MAPBASE = $9f35 - /// $9F36 L1_TILEBASE Layer 1 Tile Base - /// Bit 2-7: Tile Base Address (16:11) - /// Bit 1: Tile Height (0:8 pixels, 1:16 pixels) - /// Bit 0: Tile Width (0:8 pixels, 1:16 pixels) - .label VERA_L1_TILEBASE = $9f36 - // Variable holding the screen width; - .label conio_screen_width = $e - // Variable holding the screen height; - .label conio_screen_height = $20 - // Variable holding the screen layer on the VERA card with which conio interacts; - .label conio_screen_layer = $1c - // Variables holding the current map width and map height of the layer. - .label conio_width = $46 - .label conio_height = $26 - .label conio_rowshift = $17 - .label conio_rowskip = $18 - .label CONIO_SCREEN_BANK = $56 - // The screen width - // The screen height - // The text screen base address, which is a 16:0 bit value in VERA VRAM. - // That is 128KB addressable space, thus 17 bits in total. - // CONIO_SCREEN_TEXT contains bits 15:0 of the address. - // CONIO_SCREEN_BANK contains bit 16, the the 64K memory bank in VERA VRAM (the upper 17th bit). - // !!! note that these values are not const for the cx16! - // This conio implements the two layers of VERA, which can be layer 0 or layer 1. - // Configuring conio to output to a different layer, will change these fields to the address base - // configured using VERA_L0_MAPBASE = 0x9f2e or VERA_L1_MAPBASE = 0x9f35. - // Using the function setscreenlayer(layer) will re-calculate using CONIO_SCREEN_TEXT and CONIO_SCREEN_BASE - // based on the values of VERA_L0_MAPBASE or VERA_L1_MAPBASE, mapping the base address of the selected layer. - // The function setscreenlayermapbase(layer,mapbase) allows to configure bit 16:9 of the - // mapbase address of the time map in VRAM of the selected layer VERA_L0_MAPBASE or VERA_L1_MAPBASE. - .label CONIO_SCREEN_TEXT = $57 - // The screen width - // The screen height - // The text screen base address, which is a 16:0 bit value in VERA VRAM. - // That is 128KB addressable space, thus 17 bits in total. - // CONIO_SCREEN_TEXT contains bits 15:0 of the address. - // CONIO_SCREEN_BANK contains bit 16, the the 64K memory bank in VERA VRAM (the upper 17th bit). - // !!! note that these values are not const for the cx16! - // This conio implements the two layers of VERA, which can be layer 0 or layer 1. - // Configuring conio to output to a different layer, will change these fields to the address base - // configured using VERA_L0_MAPBASE = 0x9f2e or VERA_L1_MAPBASE = 0x9f35. - // Using the function setscreenlayer(layer) will re-calculate using CONIO_SCREEN_TEXT and CONIO_SCREEN_BASE - // based on the values of VERA_L0_MAPBASE or VERA_L1_MAPBASE, mapping the base address of the selected layer. - // The function setscreenlayermapbase(layer,mapbase) allows to configure bit 16:9 of the - // mapbase address of the time map in VRAM of the selected layer VERA_L0_MAPBASE or VERA_L1_MAPBASE. - .label CONIO_SCREEN_TEXT_1 = $11 - .label CONIO_SCREEN_BANK_1 = $3b -.segment Code -__start: { - // __ma unsigned byte conio_screen_width = 0 - lda #0 - sta.z conio_screen_width - // __ma unsigned byte conio_screen_height = 0 - sta.z conio_screen_height - // __ma unsigned byte conio_screen_layer = 1 - lda #1 - sta.z conio_screen_layer - // __ma word conio_width = 0 - lda #<0 - sta.z conio_width - sta.z conio_width+1 - // __ma word conio_height = 0 - sta.z conio_height - sta.z conio_height+1 - // __ma byte conio_rowshift = 0 - sta.z conio_rowshift - // __ma word conio_rowskip = 0 - sta.z conio_rowskip - sta.z conio_rowskip+1 - // #pragma constructor_for(conio_x16_init, cputc, clrscr, cscroll) - jsr conio_x16_init - jsr main - rts -} -// Set initial cursor position -conio_x16_init: { - // Position cursor at current line - .label BASIC_CURSOR_LINE = $d6 - .label line = $52 - // char line = *BASIC_CURSOR_LINE - lda.z BASIC_CURSOR_LINE - sta.z line - // vera_layer_mode_text(1,(dword)0x00000,(dword)0x0F800,128,64,8,8,16) - jsr vera_layer_mode_text - // screensize(&conio_screen_width, &conio_screen_height) - jsr screensize - // screenlayer(1) - jsr screenlayer - // vera_layer_set_textcolor(1, WHITE) - ldx #1 - jsr vera_layer_set_textcolor - // vera_layer_set_backcolor(1, BLUE) - lda #BLUE - ldx #1 - jsr vera_layer_set_backcolor - // vera_layer_set_mapbase(0,0x20) - ldx #$20 - lda #0 - jsr vera_layer_set_mapbase - // vera_layer_set_mapbase(1,0x00) - ldx #0 - lda #1 - jsr vera_layer_set_mapbase - // if(line>=CONIO_HEIGHT) - lda.z line - cmp.z conio_screen_height - bcc __b1 - // line=CONIO_HEIGHT-1 - ldx.z conio_screen_height - dex - stx.z line - __b1: - // gotoxy(0, line) - ldx.z line - jsr gotoxy - // } - rts -} -// Output one character at the current cursor position -// Moves the cursor forward. Scrolls the entire screen if needed -// void cputc(__zp($25) char c) -cputc: { - .const OFFSET_STACK_C = 0 - .label __16 = 2 - .label c = $25 - .label conio_addr = 8 - tsx - lda STACK_BASE+OFFSET_STACK_C,x - sta.z c - // char color = vera_layer_get_color( conio_screen_layer) - ldx.z conio_screen_layer - jsr vera_layer_get_color - // char color = vera_layer_get_color( conio_screen_layer) - tax - // char* conio_addr = CONIO_SCREEN_TEXT + conio_line_text[conio_screen_layer] - lda.z conio_screen_layer - asl - tay - clc - lda.z CONIO_SCREEN_TEXT_1 - adc conio_line_text,y - sta.z conio_addr - lda.z CONIO_SCREEN_TEXT_1+1 - adc conio_line_text+1,y - sta.z conio_addr+1 - // conio_cursor_x[conio_screen_layer] << 1 - ldy.z conio_screen_layer - lda conio_cursor_x,y - asl - // conio_addr += conio_cursor_x[conio_screen_layer] << 1 - clc - adc.z conio_addr - sta.z conio_addr - bcc !+ - inc.z conio_addr+1 - !: - // if(c=='\n') - lda #'\n' - cmp.z c - beq __b1 - // *VERA_CTRL &= ~VERA_ADDRSEL - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // BYTE0(conio_addr) - lda.z conio_addr - // *VERA_ADDRX_L = BYTE0(conio_addr) - // Set address - sta VERA_ADDRX_L - // BYTE1(conio_addr) - lda.z conio_addr+1 - // *VERA_ADDRX_M = BYTE1(conio_addr) - sta VERA_ADDRX_M - // CONIO_SCREEN_BANK | VERA_INC_1 - lda #VERA_INC_1 - ora.z CONIO_SCREEN_BANK_1 - // *VERA_ADDRX_H = CONIO_SCREEN_BANK | VERA_INC_1 - sta VERA_ADDRX_H - // *VERA_DATA0 = c - lda.z c - sta VERA_DATA0 - // *VERA_DATA0 = color - stx VERA_DATA0 - // conio_cursor_x[conio_screen_layer]++; - ldx.z conio_screen_layer - inc conio_cursor_x,x - // byte scroll_enable = conio_scroll_enable[conio_screen_layer] - ldy.z conio_screen_layer - lda conio_scroll_enable,y - // if(scroll_enable) - cmp #0 - bne __b5 - // (unsigned int)conio_cursor_x[conio_screen_layer] == conio_width - lda conio_cursor_x,y - sta.z __16 - lda #0 - sta.z __16+1 - // if((unsigned int)conio_cursor_x[conio_screen_layer] == conio_width) - cmp.z conio_width+1 - bne __breturn - lda.z __16 - cmp.z conio_width - bne __breturn - // cputln() - jsr cputln - __breturn: - // } - rts - __b5: - // if(conio_cursor_x[conio_screen_layer] == CONIO_WIDTH) - lda.z conio_screen_width - ldy.z conio_screen_layer - cmp conio_cursor_x,y - bne __breturn - // cputln() - jsr cputln - rts - __b1: - // cputln() - jsr cputln - rts -} -main: { - .label tilebase = $48 - .label t = $3f - .label tile = $23 - .label c = $39 - // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. - .label row = $40 - .label r = $42 - .label column1 = $29 - // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. - .label row_1 = $41 - .label r1 = $43 - // vera_layer_set_textcolor(conio_screen_layer, color) - ldx.z conio_screen_layer - jsr vera_layer_set_textcolor - // vera_layer_set_backcolor(conio_screen_layer, color) - ldx.z conio_screen_layer - lda #BLACK - jsr vera_layer_set_backcolor - // clrscr() - jsr clrscr - // vera_layer_mode_tile(0, 0x04000, 0x14000, 128, 128, 8, 8, 8) - lda #8 - sta.z vera_layer_mode_tile.tileheight - sta.z vera_layer_mode_tile.tilewidth - lda #<$14000 - sta.z vera_layer_mode_tile.tilebase_address_1 - lda #>$14000 - sta.z vera_layer_mode_tile.tilebase_address_1+1 - lda #<$14000>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+2 - lda #>$14000>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+3 - lda #<$4000 - sta.z vera_layer_mode_tile.mapbase_address_1 - lda #>$4000 - sta.z vera_layer_mode_tile.mapbase_address_1+1 - lda #<$4000>>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+2 - lda #>$4000>>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+3 - lda #<$80 - sta.z vera_layer_mode_tile.mapheight - lda #>$80 - sta.z vera_layer_mode_tile.mapheight+1 - lda #0 - sta.z vera_layer_mode_tile.layer - lda #<$80 - sta.z vera_layer_mode_tile.mapwidth - lda #>$80 - sta.z vera_layer_mode_tile.mapwidth+1 - ldx #8 - jsr vera_layer_mode_tile - // memcpy_to_vram(1, tilebase, tiles, 64) - lda #<$4000 - sta.z memcpy_to_vram.vdest - lda #>$4000 - sta.z memcpy_to_vram.vdest+1 - jsr memcpy_to_vram - lda #1 - sta.z t - lda #<$4000+$40 - sta.z tilebase - lda #>$4000+$40 - sta.z tilebase+1 - __b1: - ldx #0 - __b2: - // tiles[p]+=1 - lda tiles,x - inc - sta tiles,x - // for(byte p:0..63) - inx - cpx #$40 - bne __b2 - // memcpy_to_vram(1, tilebase, tiles, 64) - lda.z tilebase - sta.z memcpy_to_vram.vdest - lda.z tilebase+1 - sta.z memcpy_to_vram.vdest+1 - jsr memcpy_to_vram - // tilebase+=64 - lda #$40 - clc - adc.z tilebase - sta.z tilebase - bcc !+ - inc.z tilebase+1 - !: - // for(byte t:1..255) - inc.z t - lda.z t - bne __b1 - // vera_tile_area(0, 0, 0, 0, 80, 60, 0, 0, 0) - //vera_tile_area(byte layer, word tileindex, byte x, byte y, byte w, byte h, byte hflip, byte vflip, byte offset) - lda #$50 - sta.z vera_tile_area.w - lda #$3c - sta.z vera_tile_area.h - lda #0 - sta.z vera_tile_area.x - sta.z vera_tile_area.y - sta.z vera_tile_area.tileindex - sta.z vera_tile_area.tileindex+1 - jsr vera_tile_area - lda #0 - sta.z r - lda #1 - sta.z row - lda #<0 - sta.z tile - sta.z tile+1 - __b5: - lda #0 - sta.z c - ldx #1 - __b6: - // vera_tile_area(0, tile, column, row, 1, 1, 0, 0, 0) - stx.z vera_tile_area.x - lda.z row - sta.z vera_tile_area.y - lda #1 - sta.z vera_tile_area.w - sta.z vera_tile_area.h - jsr vera_tile_area - // column+=2 - inx - inx - // tile++; - inc.z tile - bne !+ - inc.z tile+1 - !: - // tile &= 0xff - lda #$ff - and.z tile - sta.z tile - lda #0 - sta.z tile+1 - // for(byte c:0..31) - inc.z c - lda #$20 - cmp.z c - bne __b6 - // row += 2 - lda.z row - clc - adc #2 - sta.z row - // for(byte r:0..7) - inc.z r - lda #8 - cmp.z r - bne __b5 - lda #0 - sta.z r1 - lda #$14 - sta.z row_1 - lda #<0 - sta.z tile - sta.z tile+1 - __b8: - ldx #0 - lda #1 - sta.z column1 - __b9: - // vera_tile_area(0, tile, column, row, 2, 2, 0, 0, 0) - lda.z row_1 - sta.z vera_tile_area.y - lda #2 - sta.z vera_tile_area.w - sta.z vera_tile_area.h - jsr vera_tile_area - // column+=2 - lda.z column1 - clc - adc #2 - sta.z column1 - // tile++; - inc.z tile - bne !+ - inc.z tile+1 - !: - // tile &= 0xff - lda #$ff - and.z tile - sta.z tile - lda #0 - sta.z tile+1 - // for(byte c:0..31) - inx - cpx #$20 - bne __b9 - // row += 2 - lda.z row_1 - clc - adc #2 - sta.z row_1 - // for(byte r:0..7) - inc.z r1 - lda #8 - cmp.z r1 - bne __b8 - // *VERA_DC_VIDEO |= vera_layer_enable[layer] - lda VERA_DC_VIDEO - ora vera_layer_enable - sta VERA_DC_VIDEO - // gotoxy(0,50) - ldx #$32 - jsr gotoxy - // printf("vera in tile mode 8 x 8, color depth 8 bits per pixel.\n") - lda #s - sta.z printf_str.s+1 - jsr printf_str - // printf("in this mode, tiles are 8 pixels wide and 8 pixels tall.\n") - lda #s1 - sta.z printf_str.s+1 - jsr printf_str - // printf("each tile can have a variation of 256 colors.\n") - lda #s2 - sta.z printf_str.s+1 - jsr printf_str - // printf("the vera palette of 256 colors, can be used by setting the palette\n") - lda #s3 - sta.z printf_str.s+1 - jsr printf_str - // printf("offset for each tile.\n") - lda #s4 - sta.z printf_str.s+1 - jsr printf_str - // printf("here each column is displaying the same tile, but with different offsets!\n") - lda #s5 - sta.z printf_str.s+1 - jsr printf_str - // printf("each offset aligns to multiples of 16 colors in the palette!.\n") - lda #s6 - sta.z printf_str.s+1 - jsr printf_str - // printf("however, the first color will always be transparent (black).\n") - lda #s7 - sta.z printf_str.s+1 - jsr printf_str - __b11: - // kbhit() - jsr kbhit - // while(!kbhit()) - cmp #0 - beq __b11 - // } - rts - .segment Data - tiles: .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - s: .text @"vera in tile mode 8 x 8, color depth 8 bits per pixel.\n" - .byte 0 - s1: .text @"in this mode, tiles are 8 pixels wide and 8 pixels tall.\n" - .byte 0 - s2: .text @"each tile can have a variation of 256 colors.\n" - .byte 0 - s3: .text @"the vera palette of 256 colors, can be used by setting the palette\n" - .byte 0 - s4: .text @"offset for each tile.\n" - .byte 0 - s5: .text @"here each column is displaying the same tile, but with different offsets!\n" - .byte 0 - s6: .text @"each offset aligns to multiples of 16 colors in the palette!.\n" - .byte 0 - s7: .text @"however, the first color will always be transparent (black).\n" - .byte 0 -} -.segment Code -// Set a vera layer in text mode and configure the: -// - layer: Value of 0 or 1. -// - mapbase_address: A dword typed address (4 bytes), that specifies the full address of the map base. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective mapbase vera register. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// - tilebase_address: A dword typed address (4 bytes), that specifies the base address of the tile map. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective tilebase vera register. -// Note that the resulting vera register holds only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// - mapwidth: The width of the map in number of tiles. -// - mapheight: The height of the map in number of tiles. -// - tilewidth: The width of a tile, which can be 8 or 16 pixels. -// - tileheight: The height of a tile, which can be 8 or 16 pixels. -// - color_mode: The color mode, which can be 16 or 256. -// void vera_layer_mode_text(char layer, unsigned long mapbase_address, unsigned long tilebase_address, unsigned int mapwidth, unsigned int mapheight, char tilewidth, char tileheight, unsigned int color_mode) -vera_layer_mode_text: { - .const mapbase_address = 0 - .const tilebase_address = $f800 - .const mapwidth = $80 - .const mapheight = $40 - .const tilewidth = 8 - .const tileheight = 8 - .label layer = 1 - // vera_layer_mode_tile( layer, mapbase_address, tilebase_address, mapwidth, mapheight, tilewidth, tileheight, 1 ) - lda #tileheight - sta.z vera_layer_mode_tile.tileheight - lda #tilewidth - sta.z vera_layer_mode_tile.tilewidth - lda #tilebase_address - sta.z vera_layer_mode_tile.tilebase_address_1+1 - lda #>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+2 - lda #>tilebase_address>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+3 - lda #mapbase_address - sta.z vera_layer_mode_tile.mapbase_address_1+1 - lda #>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+2 - lda #>mapbase_address>>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+3 - lda #mapheight - sta.z vera_layer_mode_tile.mapheight+1 - lda #layer - sta.z vera_layer_mode_tile.layer - lda #mapwidth - sta.z vera_layer_mode_tile.mapwidth+1 - ldx #1 - jsr vera_layer_mode_tile - // vera_layer_set_text_color_mode( layer, VERA_LAYER_CONFIG_16C ) - jsr vera_layer_set_text_color_mode - // } - rts -} -// Return the current screen size. -// void screensize(char *x, char *y) -screensize: { - .label x = conio_screen_width - .label y = conio_screen_height - // char hscale = (*VERA_DC_HSCALE) >> 7 - // VERA returns in VERA_DC_HSCALE the value of 128 when 80 columns is used in text mode, - // and the value of 64 when 40 columns is used in text mode. - // Basically, 40 columns mode in the VERA is a double scan mode. - // Same for the VERA_DC_VSCALE mode, but then the subdivision is 60 or 30 rows. - // I still need to test the other modes, but this will suffice for now for the pure text modes. - lda VERA_DC_HSCALE - rol - rol - and #1 - // 40 << hscale - tay - lda #$28 - cpy #0 - beq !e+ - !: - asl - dey - bne !- - !e: - // *x = 40 << hscale - sta.z x - // char vscale = (*VERA_DC_VSCALE) >> 7 - lda VERA_DC_VSCALE - rol - rol - and #1 - // 30 << vscale - tay - lda #$1e - cpy #0 - beq !e+ - !: - asl - dey - bne !- - !e: - // *y = 30 << vscale - sta.z y - // } - rts -} -// Set the layer with which the conio will interact. -// - layer: value of 0 or 1. -// void screenlayer(char layer) -screenlayer: { - .const layer = 1 - .label __2 = $f - .label __4 = $37 - .label __5 = $2b - .label vera_layer_get_width1_config = $21 - .label vera_layer_get_width1_return = $f - .label vera_layer_get_height1_config = $2d - .label vera_layer_get_height1_return = $2b - // conio_screen_layer = layer - lda #layer - sta.z conio_screen_layer - // vera_layer_get_mapbase_bank(conio_screen_layer) - tax - jsr vera_layer_get_mapbase_bank - sta.z CONIO_SCREEN_BANK - // vera_layer_get_mapbase_offset(conio_screen_layer) - lda.z conio_screen_layer - jsr vera_layer_get_mapbase_offset - lda.z vera_layer_get_mapbase_offset.return - sta.z CONIO_SCREEN_TEXT - lda.z vera_layer_get_mapbase_offset.return+1 - sta.z CONIO_SCREEN_TEXT+1 - // vera_layer_get_width(conio_screen_layer) - lda.z conio_screen_layer - // byte* config = vera_layer_config[layer] - asl - tay - lda vera_layer_config,y - sta.z vera_layer_get_width1_config - lda vera_layer_config+1,y - sta.z vera_layer_get_width1_config+1 - // *config & VERA_LAYER_WIDTH_MASK - lda #VERA_LAYER_WIDTH_MASK - ldy #0 - and (vera_layer_get_width1_config),y - // (*config & VERA_LAYER_WIDTH_MASK) >> 4 - lsr - lsr - lsr - lsr - // return VERA_LAYER_WIDTH[ (*config & VERA_LAYER_WIDTH_MASK) >> 4]; - asl - tay - lda VERA_LAYER_WIDTH,y - sta.z vera_layer_get_width1_return - lda VERA_LAYER_WIDTH+1,y - sta.z vera_layer_get_width1_return+1 - // } - // vera_layer_get_width(conio_screen_layer) - // conio_width = vera_layer_get_width(conio_screen_layer) - lda.z __2 - sta.z conio_width - lda.z __2+1 - sta.z conio_width+1 - // vera_layer_get_rowshift(conio_screen_layer) - ldx.z conio_screen_layer - jsr vera_layer_get_rowshift - // conio_rowshift = vera_layer_get_rowshift(conio_screen_layer) - sta.z conio_rowshift - // vera_layer_get_rowskip(conio_screen_layer) - lda.z conio_screen_layer - jsr vera_layer_get_rowskip - // conio_rowskip = vera_layer_get_rowskip(conio_screen_layer) - lda.z __4 - sta.z conio_rowskip - lda.z __4+1 - sta.z conio_rowskip+1 - // vera_layer_get_height(conio_screen_layer) - lda.z conio_screen_layer - // byte* config = vera_layer_config[layer] - asl - tay - lda vera_layer_config,y - sta.z vera_layer_get_height1_config - lda vera_layer_config+1,y - sta.z vera_layer_get_height1_config+1 - // *config & VERA_LAYER_HEIGHT_MASK - lda #VERA_LAYER_HEIGHT_MASK - ldy #0 - and (vera_layer_get_height1_config),y - // (*config & VERA_LAYER_HEIGHT_MASK) >> 6 - rol - rol - rol - and #3 - // return VERA_LAYER_HEIGHT[ (*config & VERA_LAYER_HEIGHT_MASK) >> 6]; - asl - tay - lda VERA_LAYER_HEIGHT,y - sta.z vera_layer_get_height1_return - lda VERA_LAYER_HEIGHT+1,y - sta.z vera_layer_get_height1_return+1 - // } - // vera_layer_get_height(conio_screen_layer) - // conio_height = vera_layer_get_height(conio_screen_layer) - lda.z __5 - sta.z conio_height - lda.z __5+1 - sta.z conio_height+1 - // } - rts -} -// Set the front color for text output. The old front text color setting is returned. -// - layer: Value of 0 or 1. -// - color: a 4 bit value ( decimal between 0 and 15) when the VERA works in 16x16 color text mode. -// An 8 bit value (decimal between 0 and 255) when the VERA works in 256 text mode. -// Note that on the VERA, the transparent color has value 0. -// char vera_layer_set_textcolor(__register(X) char layer, char color) -vera_layer_set_textcolor: { - // vera_layer_textcolor[layer] = color - lda #WHITE - sta vera_layer_textcolor,x - // } - rts -} -// Set the back color for text output. The old back text color setting is returned. -// - layer: Value of 0 or 1. -// - color: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// char vera_layer_set_backcolor(__register(X) char layer, __register(A) char color) -vera_layer_set_backcolor: { - // vera_layer_backcolor[layer] = color - sta vera_layer_backcolor,x - // } - rts -} -// Set the base of the map layer with which the conio will interact. -// - layer: Value of 0 or 1. -// - mapbase: Specifies the base address of the tile map. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// void vera_layer_set_mapbase(__register(A) char layer, __register(X) char mapbase) -vera_layer_set_mapbase: { - .label addr = $21 - // byte* addr = vera_layer_mapbase[layer] - asl - tay - lda vera_layer_mapbase,y - sta.z addr - lda vera_layer_mapbase+1,y - sta.z addr+1 - // *addr = mapbase - txa - ldy #0 - sta (addr),y - // } - rts -} -// Set the cursor to the specified position -// void gotoxy(char x, __register(X) char y) -gotoxy: { - .label __6 = $f - .label line_offset = $f - // if(y>CONIO_HEIGHT) - lda.z conio_screen_height - stx.z $ff - cmp.z $ff - bcs __b1 - ldx #0 - __b1: - // if(x>=CONIO_WIDTH) - lda.z conio_screen_width - // conio_cursor_x[conio_screen_layer] = x - lda #0 - ldy.z conio_screen_layer - sta conio_cursor_x,y - // conio_cursor_y[conio_screen_layer] = y - txa - sta conio_cursor_y,y - // unsigned int line_offset = (unsigned int)y << conio_rowshift - txa - sta.z __6 - lda #0 - sta.z __6+1 - ldy.z conio_rowshift - beq !e+ - !: - asl.z line_offset - rol.z line_offset+1 - dey - bne !- - !e: - // conio_line_text[conio_screen_layer] = line_offset - lda.z conio_screen_layer - asl - tay - lda.z line_offset - sta conio_line_text,y - lda.z line_offset+1 - sta conio_line_text+1,y - // } - rts -} -// Get the text and back color for text output in 16 color mode. -// - layer: Value of 0 or 1. -// - return: an 8 bit value with bit 7:4 containing the back color and bit 3:0 containing the front color. -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_color(__register(X) char layer) -vera_layer_get_color: { - .label addr = 8 - // byte* addr = vera_layer_config[layer] - txa - asl - tay - lda vera_layer_config,y - sta.z addr - lda vera_layer_config+1,y - sta.z addr+1 - // *addr & VERA_LAYER_CONFIG_256C - lda #VERA_LAYER_CONFIG_256C - ldy #0 - and (addr),y - // if( *addr & VERA_LAYER_CONFIG_256C ) - cmp #0 - bne __b1 - // vera_layer_backcolor[layer] << 4 - lda vera_layer_backcolor,x - asl - asl - asl - asl - // return ((vera_layer_backcolor[layer] << 4) | vera_layer_textcolor[layer]); - ora vera_layer_textcolor,x - // } - rts - __b1: - // return (vera_layer_textcolor[layer]); - lda vera_layer_textcolor,x - rts -} -// Print a newline -cputln: { - .label temp = 8 - // word temp = conio_line_text[conio_screen_layer] - lda.z conio_screen_layer - asl - // TODO: This needs to be optimized! other variations don't compile because of sections not available! - tay - lda conio_line_text,y - sta.z temp - lda conio_line_text+1,y - sta.z temp+1 - // temp += conio_rowskip - clc - lda.z temp - adc.z conio_rowskip - sta.z temp - lda.z temp+1 - adc.z conio_rowskip+1 - sta.z temp+1 - // conio_line_text[conio_screen_layer] = temp - lda.z conio_screen_layer - asl - tay - lda.z temp - sta conio_line_text,y - lda.z temp+1 - sta conio_line_text+1,y - // conio_cursor_x[conio_screen_layer] = 0 - lda #0 - ldy.z conio_screen_layer - sta conio_cursor_x,y - // conio_cursor_y[conio_screen_layer]++; - ldx.z conio_screen_layer - inc conio_cursor_y,x - // cscroll() - jsr cscroll - // } - rts -} -// clears the screen and moves the cursor to the upper left-hand corner of the screen. -clrscr: { - .label __1 = $53 - .label line_text = 2 - .label color = $1f - // char* line_text = CONIO_SCREEN_TEXT - lda.z CONIO_SCREEN_TEXT - sta.z line_text - lda.z CONIO_SCREEN_TEXT+1 - sta.z line_text+1 - // vera_layer_get_backcolor(conio_screen_layer) - ldx.z conio_screen_layer - jsr vera_layer_get_backcolor - // vera_layer_get_backcolor(conio_screen_layer) << 4 - asl - asl - asl - asl - sta.z __1 - // vera_layer_get_textcolor(conio_screen_layer) - ldx.z conio_screen_layer - jsr vera_layer_get_textcolor - // char color = ( vera_layer_get_backcolor(conio_screen_layer) << 4 ) | vera_layer_get_textcolor(conio_screen_layer) - ora.z __1 - sta.z color - ldx #0 - __b1: - // for( char l=0;l$100 - bne __b13 - lda.z mapwidth - cmp #<$100 - bne __b13 - // config |= VERA_LAYER_WIDTH_256 - txa - ora #VERA_LAYER_WIDTH_256 - tax - // vera_layer_rowshift[layer] = 9 - lda #9 - ldy.z layer - sta vera_layer_rowshift,y - // vera_layer_rowskip[layer] = 512 - tya - asl - tay - lda #<$200 - sta vera_layer_rowskip,y - lda #>$200 - sta vera_layer_rowskip+1,y - __b13: - // case 32: - // config |= VERA_LAYER_HEIGHT_32; - // break; - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$20 - beq __b20 - !: - // case 64: - // config |= VERA_LAYER_HEIGHT_64; - // break; - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$40 - bne !__b17+ - jmp __b17 - !__b17: - !: - // case 128: - // config |= VERA_LAYER_HEIGHT_128; - // break; - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$80 - bne !__b18+ - jmp __b18 - !__b18: - !: - // case 256: - // config |= VERA_LAYER_HEIGHT_256; - // break; - lda.z mapheight+1 - cmp #>$100 - bne __b20 - lda.z mapheight - cmp #<$100 - bne __b20 - // config |= VERA_LAYER_HEIGHT_256 - txa - ora #VERA_LAYER_HEIGHT_256 - tax - __b20: - // vera_layer_set_config(layer, config) - lda.z layer - jsr vera_layer_set_config - // WORD0(mapbase_address) - lda.z mapbase_address_1 - sta.z __1 - lda.z mapbase_address_1+1 - sta.z __1+1 - // vera_mapbase_offset[layer] = WORD0(mapbase_address) - lda.z layer - asl - sta.z __17 - // mapbase - tay - lda.z __1 - sta vera_mapbase_offset,y - lda.z __1+1 - sta vera_mapbase_offset+1,y - // BYTE2(mapbase_address) - lda.z mapbase_address_1+2 - // vera_mapbase_bank[layer] = BYTE2(mapbase_address) - ldy.z layer - sta vera_mapbase_bank,y - // vera_mapbase_address[layer] = mapbase_address - tya - asl - asl - sta.z __18 - tay - lda.z mapbase_address_1 - sta vera_mapbase_address,y - lda.z mapbase_address_1+1 - sta vera_mapbase_address+1,y - lda.z mapbase_address_1+2 - sta vera_mapbase_address+2,y - lda.z mapbase_address_1+3 - sta vera_mapbase_address+3,y - // mapbase_address = mapbase_address >> 1 - lsr - sta.z mapbase_address+3 - lda.z mapbase_address_1+2 - ror - sta.z mapbase_address+2 - lda.z mapbase_address_1+1 - ror - sta.z mapbase_address+1 - lda.z mapbase_address_1 - ror - sta.z mapbase_address - // byte mapbase = BYTE1(mapbase_address) - ldx.z mapbase_address+1 - // vera_layer_set_mapbase(layer,mapbase) - lda.z layer - jsr vera_layer_set_mapbase - // WORD0(tilebase_address) - lda.z tilebase_address_1 - sta.z __6 - lda.z tilebase_address_1+1 - sta.z __6+1 - // vera_tilebase_offset[layer] = WORD0(tilebase_address) - // tilebase - ldy.z __17 - lda.z __6 - sta vera_tilebase_offset,y - lda.z __6+1 - sta vera_tilebase_offset+1,y - // BYTE2(tilebase_address) - lda.z tilebase_address_1+2 - // vera_tilebase_bank[layer] = BYTE2(tilebase_address) - ldy.z layer - sta vera_tilebase_bank,y - // vera_tilebase_address[layer] = tilebase_address - ldy.z __18 - lda.z tilebase_address_1 - sta vera_tilebase_address,y - lda.z tilebase_address_1+1 - sta vera_tilebase_address+1,y - lda.z tilebase_address_1+2 - sta vera_tilebase_address+2,y - lda.z tilebase_address_1+3 - sta vera_tilebase_address+3,y - // tilebase_address = tilebase_address >> 1 - lsr - sta.z tilebase_address+3 - lda.z tilebase_address_1+2 - ror - sta.z tilebase_address+2 - lda.z tilebase_address_1+1 - ror - sta.z tilebase_address+1 - lda.z tilebase_address_1 - ror - sta.z tilebase_address - // byte tilebase = BYTE1(tilebase_address) - lda.z tilebase_address+1 - // tilebase &= VERA_LAYER_TILEBASE_MASK - and #VERA_LAYER_TILEBASE_MASK - tax - // case 8: - // tilebase |= VERA_TILEBASE_WIDTH_8; - // break; - lda #8 - cmp.z tilewidth - beq __b23 - // case 16: - // tilebase |= VERA_TILEBASE_WIDTH_16; - // break; - lda #$10 - cmp.z tilewidth - bne __b23 - // tilebase |= VERA_TILEBASE_WIDTH_16 - txa - ora #VERA_TILEBASE_WIDTH_16 - tax - __b23: - // case 8: - // tilebase |= VERA_TILEBASE_HEIGHT_8; - // break; - lda #8 - cmp.z tileheight - beq __b26 - // case 16: - // tilebase |= VERA_TILEBASE_HEIGHT_16; - // break; - lda #$10 - cmp.z tileheight - bne __b26 - // tilebase |= VERA_TILEBASE_HEIGHT_16 - txa - ora #VERA_TILEBASE_HEIGHT_16 - tax - __b26: - // vera_layer_set_tilebase(layer,tilebase) - lda.z layer - jsr vera_layer_set_tilebase - // } - rts - __b18: - // config |= VERA_LAYER_HEIGHT_128 - txa - ora #VERA_LAYER_HEIGHT_128 - tax - jmp __b20 - __b17: - // config |= VERA_LAYER_HEIGHT_64 - txa - ora #VERA_LAYER_HEIGHT_64 - tax - jmp __b20 - __b11: - // config |= VERA_LAYER_WIDTH_128 - txa - ora #VERA_LAYER_WIDTH_128 - tax - // vera_layer_rowshift[layer] = 8 - lda #8 - ldy.z layer - sta vera_layer_rowshift,y - // vera_layer_rowskip[layer] = 256 - tya - asl - tay - lda #<$100 - sta vera_layer_rowskip,y - lda #>$100 - sta vera_layer_rowskip+1,y - jmp __b13 - __b10: - // config |= VERA_LAYER_WIDTH_64 - txa - ora #VERA_LAYER_WIDTH_64 - tax - // vera_layer_rowshift[layer] = 7 - lda #7 - ldy.z layer - sta vera_layer_rowshift,y - // vera_layer_rowskip[layer] = 128 - tya - asl - tay - lda #$80 - sta vera_layer_rowskip,y - lda #0 - sta vera_layer_rowskip+1,y - jmp __b13 - __b9: - // vera_layer_rowshift[layer] = 6 - lda #6 - ldy.z layer - sta vera_layer_rowshift,y - // vera_layer_rowskip[layer] = 64 - tya - asl - tay - lda #$40 - sta vera_layer_rowskip,y - lda #0 - sta vera_layer_rowskip+1,y - jmp __b13 -} -// Copy block of memory (from RAM to VRAM) -// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination in VRAM. -// - vbank: Which 64K VRAM bank to put data into (0/1) -// - vdest: The destination address in VRAM -// - src: The source address in RAM -// - num: The number of bytes to copy -// void memcpy_to_vram(char vbank, __zp(2) void *vdest, void *src, unsigned int num) -memcpy_to_vram: { - // Transfer the data - .label end = main.tiles+$40 - .label s = $1d - .label vdest = 2 - // *VERA_CTRL &= ~VERA_ADDRSEL - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // BYTE0(vdest) - lda.z vdest - // *VERA_ADDRX_L = BYTE0(vdest) - // Set address - sta VERA_ADDRX_L - // BYTE1(vdest) - lda.z vdest+1 - // *VERA_ADDRX_M = BYTE1(vdest) - sta VERA_ADDRX_M - // *VERA_ADDRX_H = VERA_INC_1 | vbank - lda #VERA_INC_1|1 - sta VERA_ADDRX_H - lda #main.tiles - sta.z s+1 - __b1: - // for(char *s = src; s!=end; s++) - lda.z s+1 - cmp #>end - bne __b2 - lda.z s - cmp #1+1 - sta.z rowskip+1 - cpy #0 - beq !e+ - !: - asl.z rowskip - rol.z rowskip+1 - dey - bne !- - !e: - // hflip = vera_layer_hflip[hflip] - lda vera_layer_hflip - sta.z hflip - // vflip = vera_layer_vflip[vflip] - lda vera_layer_vflip - sta.z vflip - // byte index_l = BYTE0(tileindex) - lda.z tileindex - sta.z index_l - // byte index_h = BYTE1(tileindex) - lda.z tileindex+1 - // index_h |= hflip - ora.z hflip - // index_h |= vflip - ora.z index_h - sta.z index_h - // (word)y << shift - lda.z y - sta.z __10 - lda #0 - sta.z __10+1 - ldy.z shift - beq !e+ - !: - asl.z __4 - rol.z __4+1 - dey - bne !- - !e: - // mapbase += ((word)y << shift) - lda.z mapbase - clc - adc.z __4 - sta.z mapbase - lda.z mapbase+1 - adc.z __4+1 - sta.z mapbase+1 - lda.z mapbase+2 - adc #0 - sta.z mapbase+2 - lda.z mapbase+3 - adc #0 - sta.z mapbase+3 - // x << 1 - lda.z x - asl - // mapbase += (x << 1) - clc - adc.z mapbase - sta.z mapbase - lda.z mapbase+1 - adc #0 - sta.z mapbase+1 - lda.z mapbase+2 - adc #0 - sta.z mapbase+2 - lda.z mapbase+3 - adc #0 - sta.z mapbase+3 - lda #0 - sta.z r - __b1: - // for(byte r=0; r$0000 - rts - - continue1: - nop - - // return ch; - lda.z ch - // } - rts -} -// Set the configuration of the layer text color mode. -// - layer: Value of 0 or 1. -// - color_mode: Specifies the color mode to be VERA_LAYER_CONFIG_16 or VERA_LAYER_CONFIG_256 for text mode. -// void vera_layer_set_text_color_mode(char layer, char color_mode) -vera_layer_set_text_color_mode: { - .label addr = $2b - // byte* addr = vera_layer_config[layer] - lda vera_layer_config+vera_layer_mode_text.layer*SIZEOF_POINTER - sta.z addr - lda vera_layer_config+vera_layer_mode_text.layer*SIZEOF_POINTER+1 - sta.z addr+1 - // *addr &= ~VERA_LAYER_CONFIG_256C - lda #VERA_LAYER_CONFIG_256C^$ff - ldy #0 - and (addr),y - sta (addr),y - // *addr |= color_mode - lda (addr),y - sta (addr),y - // } - rts -} -// Get the map base bank of the tiles for the layer. -// - layer: Value of 0 or 1. -// - return: Bank in vera vram. -// __register(A) char vera_layer_get_mapbase_bank(__register(X) char layer) -vera_layer_get_mapbase_bank: { - // return vera_mapbase_bank[layer]; - lda vera_mapbase_bank,x - // } - rts -} -// Get the map base lower 16-bit address (offset) of the tiles for the layer. -// - layer: Value of 0 or 1. -// - return: Offset in vera vram of the specified bank. -// __zp($f) unsigned int vera_layer_get_mapbase_offset(__register(A) char layer) -vera_layer_get_mapbase_offset: { - .label return = $f - // return vera_mapbase_offset[layer]; - asl - tay - lda vera_mapbase_offset,y - sta.z return - lda vera_mapbase_offset+1,y - sta.z return+1 - // } - rts -} -// Get the bit shift value required to skip a whole line fast. -// - layer: Value of 0 or 1. -// - return: Rowshift value to calculate fast from a y value to line offset in tile mode. -// __register(A) char vera_layer_get_rowshift(__register(X) char layer) -vera_layer_get_rowshift: { - // return vera_layer_rowshift[layer]; - lda vera_layer_rowshift,x - // } - rts -} -// Get the value required to skip a whole line fast. -// - layer: Value of 0 or 1. -// - return: Skip value to calculate fast from a y value to line offset in tile mode. -// __zp($37) unsigned int vera_layer_get_rowskip(__register(A) char layer) -vera_layer_get_rowskip: { - .label return = $37 - // return vera_layer_rowskip[layer]; - asl - tay - lda vera_layer_rowskip,y - sta.z return - lda vera_layer_rowskip+1,y - sta.z return+1 - // } - rts -} -// Scroll the entire screen if the cursor is beyond the last line -cscroll: { - // if(conio_cursor_y[conio_screen_layer]>=CONIO_HEIGHT) - ldy.z conio_screen_layer - lda conio_cursor_y,y - cmp.z conio_screen_height - bcc __b3 - // if(conio_scroll_enable[conio_screen_layer]) - lda conio_scroll_enable,y - cmp #0 - bne __b4 - // if(conio_cursor_y[conio_screen_layer]>=conio_height) - lda conio_cursor_y,y - ldy.z conio_height+1 - bne __b3 - cmp.z conio_height - __b3: - // } - rts - __b4: - // insertup() - jsr insertup - // gotoxy( 0, CONIO_HEIGHT-1) - ldx.z conio_screen_height - dex - jsr gotoxy - rts -} -// Get the back color for text output. The old back text color setting is returned. -// - layer: Value of 0 or 1. -// - return: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_backcolor(__register(X) char layer) -vera_layer_get_backcolor: { - // return vera_layer_backcolor[layer]; - lda vera_layer_backcolor,x - // } - rts -} -// Get the front color for text output. The old front text color setting is returned. -// - layer: Value of 0 or 1. -// - return: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_textcolor(__register(X) char layer) -vera_layer_get_textcolor: { - // return vera_layer_textcolor[layer]; - lda vera_layer_textcolor,x - // } - rts -} -// Set the configuration of the layer. -// - layer: Value of 0 or 1. -// - config: Specifies the modes which are specified using T256C / 'Bitmap Mode' / 'Color Depth'. -// void vera_layer_set_config(__register(A) char layer, __register(X) char config) -vera_layer_set_config: { - .label addr = $21 - // byte* addr = vera_layer_config[layer] - asl - tay - lda vera_layer_config,y - sta.z addr - lda vera_layer_config+1,y - sta.z addr+1 - // *addr = config - txa - ldy #0 - sta (addr),y - // } - rts -} -// Set the base of the tiles for the layer with which the conio will interact. -// - layer: Value of 0 or 1. -// - tilebase: Specifies the base address of the tile map. -// Note that the register only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// void vera_layer_set_tilebase(__register(A) char layer, __register(X) char tilebase) -vera_layer_set_tilebase: { - .label addr = $21 - // byte* addr = vera_layer_tilebase[layer] - asl - tay - lda vera_layer_tilebase,y - sta.z addr - lda vera_layer_tilebase+1,y - sta.z addr+1 - // *addr = tilebase - txa - ldy #0 - sta (addr),y - // } - rts -} -// Insert a new line, and scroll the upper part of the screen up. -insertup: { - .label cy = $d - .label width = $c - .label line = 6 - .label start = 6 - // unsigned byte cy = conio_cursor_y[conio_screen_layer] - ldy.z conio_screen_layer - lda conio_cursor_y,y - sta.z cy - // unsigned byte width = CONIO_WIDTH * 2 - lda.z conio_screen_width - asl - sta.z width - ldx #1 - __b1: - // for(unsigned byte i=1; i<=cy; i++) - lda.z cy - stx.z $ff - cmp.z $ff - bcs __b2 - // clearline() - jsr clearline - // } - rts - __b2: - // i-1 - txa - sec - sbc #1 - // unsigned int line = (i-1) << conio_rowshift - ldy.z conio_rowshift - sta.z line - lda #0 - sta.z line+1 - cpy #0 - beq !e+ - !: - asl.z line - rol.z line+1 - dey - bne !- - !e: - // unsigned char* start = CONIO_SCREEN_TEXT + line - clc - lda.z start - adc.z CONIO_SCREEN_TEXT_1 - sta.z start - lda.z start+1 - adc.z CONIO_SCREEN_TEXT_1+1 - sta.z start+1 - // start+conio_rowskip - lda.z start - clc - adc.z conio_rowskip - sta.z memcpy_in_vram.src - lda.z start+1 - adc.z conio_rowskip+1 - sta.z memcpy_in_vram.src+1 - // memcpy_in_vram(0, start, VERA_INC_1, 0, start+conio_rowskip, VERA_INC_1, width) - lda.z width - sta.z memcpy_in_vram.num - lda #0 - sta.z memcpy_in_vram.num+1 - jsr memcpy_in_vram - // for(unsigned byte i=1; i<=cy; i++) - inx - jmp __b1 -} -clearline: { - .label addr = $a - .label c = 2 - // *VERA_CTRL &= ~VERA_ADDRSEL - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // byte* addr = CONIO_SCREEN_TEXT + conio_line_text[conio_screen_layer] - lda.z conio_screen_layer - asl - // Set address - tay - clc - lda.z CONIO_SCREEN_TEXT_1 - adc conio_line_text,y - sta.z addr - lda.z CONIO_SCREEN_TEXT_1+1 - adc conio_line_text+1,y - sta.z addr+1 - // BYTE0(addr) - lda.z addr - // *VERA_ADDRX_L = BYTE0(addr) - sta VERA_ADDRX_L - // BYTE1(addr) - lda.z addr+1 - // *VERA_ADDRX_M = BYTE1(addr) - sta VERA_ADDRX_M - // *VERA_ADDRX_H = VERA_INC_1 - lda #VERA_INC_1 - sta VERA_ADDRX_H - // char color = vera_layer_get_color( conio_screen_layer) - ldx.z conio_screen_layer - jsr vera_layer_get_color - // char color = vera_layer_get_color( conio_screen_layer) - tax - lda #<0 - sta.z c - sta.z c+1 - __b1: - // for( unsigned int c=0;c> 7 - [147] screensize::$1 = $28 << screensize::hscale#0 - [148] *screensize::x#0 = screensize::$1 - [149] screensize::vscale#0 = *VERA_DC_VSCALE >> 7 - [150] screensize::$3 = $1e << screensize::vscale#0 - [151] *screensize::y#0 = screensize::$3 - to:screensize::@return -screensize::@return: scope:[screensize] from screensize - [152] return - to:@return - -void screenlayer(char layer) -screenlayer: scope:[screenlayer] from conio_x16_init::@4 - [153] conio_screen_layer = screenlayer::layer#0 - [154] vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer - [155] call vera_layer_get_mapbase_bank - [156] vera_layer_get_mapbase_bank::return#2 = vera_layer_get_mapbase_bank::return#0 - to:screenlayer::@3 -screenlayer::@3: scope:[screenlayer] from screenlayer - [157] CONIO_SCREEN_BANK#11 = vera_layer_get_mapbase_bank::return#2 - [158] vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer - [159] call vera_layer_get_mapbase_offset - [160] vera_layer_get_mapbase_offset::return#2 = vera_layer_get_mapbase_offset::return#0 - to:screenlayer::@4 -screenlayer::@4: scope:[screenlayer] from screenlayer::@3 - [161] CONIO_SCREEN_TEXT#13 = vera_layer_get_mapbase_offset::return#2 - [162] screenlayer::vera_layer_get_width1_layer#0 = conio_screen_layer - to:screenlayer::vera_layer_get_width1 -screenlayer::vera_layer_get_width1: scope:[screenlayer] from screenlayer::@4 - [163] screenlayer::vera_layer_get_width1_$2 = screenlayer::vera_layer_get_width1_layer#0 << 1 - [164] screenlayer::vera_layer_get_width1_config#0 = vera_layer_config[screenlayer::vera_layer_get_width1_$2] - [165] screenlayer::vera_layer_get_width1_$0 = *screenlayer::vera_layer_get_width1_config#0 & VERA_LAYER_WIDTH_MASK - [166] screenlayer::vera_layer_get_width1_$1 = screenlayer::vera_layer_get_width1_$0 >> 4 - [167] screenlayer::vera_layer_get_width1_$3 = screenlayer::vera_layer_get_width1_$1 << 1 - [168] screenlayer::vera_layer_get_width1_return#0 = VERA_LAYER_WIDTH[screenlayer::vera_layer_get_width1_$3] - to:screenlayer::vera_layer_get_width1_@return -screenlayer::vera_layer_get_width1_@return: scope:[screenlayer] from screenlayer::vera_layer_get_width1 - [169] screenlayer::vera_layer_get_width1_return#1 = screenlayer::vera_layer_get_width1_return#0 - to:screenlayer::@1 -screenlayer::@1: scope:[screenlayer] from screenlayer::vera_layer_get_width1_@return - [170] screenlayer::$2 = screenlayer::vera_layer_get_width1_return#1 - [171] conio_width = screenlayer::$2 - [172] vera_layer_get_rowshift::layer#0 = conio_screen_layer - [173] call vera_layer_get_rowshift - [174] vera_layer_get_rowshift::return#2 = vera_layer_get_rowshift::return#0 - to:screenlayer::@5 -screenlayer::@5: scope:[screenlayer] from screenlayer::@1 - [175] screenlayer::$3 = vera_layer_get_rowshift::return#2 - [176] conio_rowshift = screenlayer::$3 - [177] vera_layer_get_rowskip::layer#0 = conio_screen_layer - [178] call vera_layer_get_rowskip - [179] vera_layer_get_rowskip::return#2 = vera_layer_get_rowskip::return#0 - to:screenlayer::@6 -screenlayer::@6: scope:[screenlayer] from screenlayer::@5 - [180] screenlayer::$4 = vera_layer_get_rowskip::return#2 - [181] conio_rowskip = screenlayer::$4 - [182] screenlayer::vera_layer_get_height1_layer#0 = conio_screen_layer - to:screenlayer::vera_layer_get_height1 -screenlayer::vera_layer_get_height1: scope:[screenlayer] from screenlayer::@6 - [183] screenlayer::vera_layer_get_height1_$2 = screenlayer::vera_layer_get_height1_layer#0 << 1 - [184] screenlayer::vera_layer_get_height1_config#0 = vera_layer_config[screenlayer::vera_layer_get_height1_$2] - [185] screenlayer::vera_layer_get_height1_$0 = *screenlayer::vera_layer_get_height1_config#0 & VERA_LAYER_HEIGHT_MASK - [186] screenlayer::vera_layer_get_height1_$1 = screenlayer::vera_layer_get_height1_$0 >> 6 - [187] screenlayer::vera_layer_get_height1_$3 = screenlayer::vera_layer_get_height1_$1 << 1 - [188] screenlayer::vera_layer_get_height1_return#0 = VERA_LAYER_HEIGHT[screenlayer::vera_layer_get_height1_$3] - to:screenlayer::vera_layer_get_height1_@return -screenlayer::vera_layer_get_height1_@return: scope:[screenlayer] from screenlayer::vera_layer_get_height1 - [189] screenlayer::vera_layer_get_height1_return#1 = screenlayer::vera_layer_get_height1_return#0 - to:screenlayer::@2 -screenlayer::@2: scope:[screenlayer] from screenlayer::vera_layer_get_height1_@return - [190] screenlayer::$5 = screenlayer::vera_layer_get_height1_return#1 - [191] conio_height = screenlayer::$5 - to:screenlayer::@return -screenlayer::@return: scope:[screenlayer] from screenlayer::@2 - [192] return - to:@return - -char vera_layer_set_textcolor(char layer , char color) -vera_layer_set_textcolor: scope:[vera_layer_set_textcolor] from conio_x16_init::@5 main::textcolor1 - [193] vera_layer_set_textcolor::layer#2 = phi( conio_x16_init::@5/1, main::textcolor1/vera_layer_set_textcolor::layer#1 ) - [194] vera_layer_textcolor[vera_layer_set_textcolor::layer#2] = WHITE - to:vera_layer_set_textcolor::@return -vera_layer_set_textcolor::@return: scope:[vera_layer_set_textcolor] from vera_layer_set_textcolor - [195] return - to:@return - -char vera_layer_set_backcolor(char layer , char color) -vera_layer_set_backcolor: scope:[vera_layer_set_backcolor] from conio_x16_init::@6 main::bgcolor1 - [196] vera_layer_set_backcolor::color#2 = phi( conio_x16_init::@6/BLUE, main::bgcolor1/BLACK ) - [196] vera_layer_set_backcolor::layer#2 = phi( conio_x16_init::@6/1, main::bgcolor1/vera_layer_set_backcolor::layer#1 ) - [197] vera_layer_backcolor[vera_layer_set_backcolor::layer#2] = vera_layer_set_backcolor::color#2 - to:vera_layer_set_backcolor::@return -vera_layer_set_backcolor::@return: scope:[vera_layer_set_backcolor] from vera_layer_set_backcolor - [198] return - to:@return - -void vera_layer_set_mapbase(char layer , char mapbase) -vera_layer_set_mapbase: scope:[vera_layer_set_mapbase] from conio_x16_init::@7 conio_x16_init::@8 vera_layer_mode_tile::@27 - [199] vera_layer_set_mapbase::mapbase#3 = phi( conio_x16_init::@7/$20, conio_x16_init::@8/0, vera_layer_mode_tile::@27/vera_layer_set_mapbase::mapbase#0 ) - [199] vera_layer_set_mapbase::layer#3 = phi( conio_x16_init::@7/0, conio_x16_init::@8/1, vera_layer_mode_tile::@27/vera_layer_set_mapbase::layer#0 ) - [200] vera_layer_set_mapbase::$0 = vera_layer_set_mapbase::layer#3 << 1 - [201] vera_layer_set_mapbase::addr#0 = vera_layer_mapbase[vera_layer_set_mapbase::$0] - [202] *vera_layer_set_mapbase::addr#0 = vera_layer_set_mapbase::mapbase#3 - to:vera_layer_set_mapbase::@return -vera_layer_set_mapbase::@return: scope:[vera_layer_set_mapbase] from vera_layer_set_mapbase - [203] return - to:@return - -void gotoxy(char x , char y) -gotoxy: scope:[gotoxy] from conio_x16_init::@1 cscroll::@5 main::@13 - [204] gotoxy::y#4 = phi( conio_x16_init::@1/gotoxy::y#1, cscroll::@5/gotoxy::y#2, main::@13/$32 ) - [205] if(gotoxy::y#4<=conio_screen_height) goto gotoxy::@4 - to:gotoxy::@1 -gotoxy::@4: scope:[gotoxy] from gotoxy - [206] phi() - to:gotoxy::@1 -gotoxy::@1: scope:[gotoxy] from gotoxy gotoxy::@4 - [207] gotoxy::y#5 = phi( gotoxy::@4/gotoxy::y#4, gotoxy/0 ) - [208] if(0> 1 - [301] vera_layer_mode_tile::mapbase#0 = byte1 vera_layer_mode_tile::mapbase_address#0 - [302] vera_layer_set_mapbase::layer#0 = vera_layer_mode_tile::layer#10 - [303] vera_layer_set_mapbase::mapbase#0 = vera_layer_mode_tile::mapbase#0 - [304] call vera_layer_set_mapbase - to:vera_layer_mode_tile::@28 -vera_layer_mode_tile::@28: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@27 - [305] vera_layer_mode_tile::$6 = word0 vera_layer_mode_tile::tilebase_address#10 - [306] vera_tilebase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$6 - [307] vera_layer_mode_tile::$7 = byte2 vera_layer_mode_tile::tilebase_address#10 - [308] vera_tilebase_bank[vera_layer_mode_tile::layer#10] = vera_layer_mode_tile::$7 - [309] vera_tilebase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::tilebase_address#10 - [310] vera_layer_mode_tile::tilebase_address#0 = vera_layer_mode_tile::tilebase_address#10 >> 1 - [311] vera_layer_mode_tile::tilebase#0 = byte1 vera_layer_mode_tile::tilebase_address#0 - [312] vera_layer_mode_tile::tilebase#1 = vera_layer_mode_tile::tilebase#0 & VERA_LAYER_TILEBASE_MASK - [313] if(vera_layer_mode_tile::tilewidth#10==8) goto vera_layer_mode_tile::@23 - to:vera_layer_mode_tile::@21 -vera_layer_mode_tile::@21: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@28 - [314] if(vera_layer_mode_tile::tilewidth#10!=$10) goto vera_layer_mode_tile::@23 - to:vera_layer_mode_tile::@22 -vera_layer_mode_tile::@22: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@21 - [315] vera_layer_mode_tile::tilebase#3 = vera_layer_mode_tile::tilebase#1 | VERA_TILEBASE_WIDTH_16 - to:vera_layer_mode_tile::@23 -vera_layer_mode_tile::@23: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@21 vera_layer_mode_tile::@22 vera_layer_mode_tile::@28 - [316] vera_layer_mode_tile::tilebase#12 = phi( vera_layer_mode_tile::@21/vera_layer_mode_tile::tilebase#1, vera_layer_mode_tile::@28/vera_layer_mode_tile::tilebase#1, vera_layer_mode_tile::@22/vera_layer_mode_tile::tilebase#3 ) - [317] if(vera_layer_mode_tile::tileheight#10==8) goto vera_layer_mode_tile::@26 - to:vera_layer_mode_tile::@24 -vera_layer_mode_tile::@24: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@23 - [318] if(vera_layer_mode_tile::tileheight#10!=$10) goto vera_layer_mode_tile::@26 - to:vera_layer_mode_tile::@25 -vera_layer_mode_tile::@25: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@24 - [319] vera_layer_mode_tile::tilebase#5 = vera_layer_mode_tile::tilebase#12 | VERA_TILEBASE_HEIGHT_16 - to:vera_layer_mode_tile::@26 -vera_layer_mode_tile::@26: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@23 vera_layer_mode_tile::@24 vera_layer_mode_tile::@25 - [320] vera_layer_mode_tile::tilebase#10 = phi( vera_layer_mode_tile::@24/vera_layer_mode_tile::tilebase#12, vera_layer_mode_tile::@23/vera_layer_mode_tile::tilebase#12, vera_layer_mode_tile::@25/vera_layer_mode_tile::tilebase#5 ) - [321] vera_layer_set_tilebase::layer#0 = vera_layer_mode_tile::layer#10 - [322] vera_layer_set_tilebase::tilebase#0 = vera_layer_mode_tile::tilebase#10 - [323] call vera_layer_set_tilebase - to:vera_layer_mode_tile::@return -vera_layer_mode_tile::@return: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@26 - [324] return - to:@return -vera_layer_mode_tile::@18: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@15 - [325] vera_layer_mode_tile::config#11 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_128 - to:vera_layer_mode_tile::@20 -vera_layer_mode_tile::@17: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@14 - [326] vera_layer_mode_tile::config#10 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_64 - to:vera_layer_mode_tile::@20 -vera_layer_mode_tile::@11: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@7 - [327] vera_layer_mode_tile::config#7 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_128 - [328] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 8 - [329] vera_layer_mode_tile::$13 = vera_layer_mode_tile::layer#10 << 1 - [330] vera_layer_rowskip[vera_layer_mode_tile::$13] = $100 - to:vera_layer_mode_tile::@13 -vera_layer_mode_tile::@10: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@6 - [331] vera_layer_mode_tile::config#6 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_64 - [332] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 7 - [333] vera_layer_mode_tile::$12 = vera_layer_mode_tile::layer#10 << 1 - [334] vera_layer_rowskip[vera_layer_mode_tile::$12] = $80 - to:vera_layer_mode_tile::@13 -vera_layer_mode_tile::@9: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@5 - [335] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 6 - [336] vera_layer_mode_tile::$11 = vera_layer_mode_tile::layer#10 << 1 - [337] vera_layer_rowskip[vera_layer_mode_tile::$11] = $40 - to:vera_layer_mode_tile::@13 - -void memcpy_to_vram(char vbank , void *vdest , void *src , unsigned int num) -memcpy_to_vram: scope:[memcpy_to_vram] from main::@15 main::@3 - [338] memcpy_to_vram::vdest#2 = phi( main::@15/(void *)(char *) 16384, main::@3/memcpy_to_vram::vdest#1 ) - [339] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL - [340] memcpy_to_vram::$0 = byte0 memcpy_to_vram::vdest#2 - [341] *VERA_ADDRX_L = memcpy_to_vram::$0 - [342] memcpy_to_vram::$1 = byte1 memcpy_to_vram::vdest#2 - [343] *VERA_ADDRX_M = memcpy_to_vram::$1 - [344] *VERA_ADDRX_H = VERA_INC_1|1 - to:memcpy_to_vram::@1 -memcpy_to_vram::@1: scope:[memcpy_to_vram] from memcpy_to_vram memcpy_to_vram::@2 - [345] memcpy_to_vram::s#2 = phi( memcpy_to_vram/(char *)(void *)main::tiles, memcpy_to_vram::@2/memcpy_to_vram::s#1 ) - [346] if(memcpy_to_vram::s#2!=memcpy_to_vram::end#0) goto memcpy_to_vram::@2 - to:memcpy_to_vram::@return -memcpy_to_vram::@return: scope:[memcpy_to_vram] from memcpy_to_vram::@1 - [347] return - to:@return -memcpy_to_vram::@2: scope:[memcpy_to_vram] from memcpy_to_vram::@1 - [348] *VERA_DATA0 = *memcpy_to_vram::s#2 - [349] memcpy_to_vram::s#1 = ++ memcpy_to_vram::s#2 - to:memcpy_to_vram::@1 - -void vera_tile_area(char layer , unsigned int tileindex , char x , char y , char w , char h , char hflip , char vflip , char offset) -vera_tile_area: scope:[vera_tile_area] from main::@4 main::@6 main::@9 - [350] vera_tile_area::w#9 = phi( main::@9/2, main::@4/$50, main::@6/1 ) - [350] vera_tile_area::h#4 = phi( main::@9/2, main::@4/$3c, main::@6/1 ) - [350] vera_tile_area::x#3 = phi( main::@9/vera_tile_area::x#2, main::@4/0, main::@6/vera_tile_area::x#1 ) - [350] vera_tile_area::y#3 = phi( main::@9/vera_tile_area::y#2, main::@4/0, main::@6/vera_tile_area::y#1 ) - [350] vera_tile_area::tileindex#3 = phi( main::@9/vera_tile_area::tileindex#2, main::@4/0, main::@6/vera_tile_area::tileindex#1 ) - [351] vera_tile_area::mapbase#0 = *vera_mapbase_address - [352] vera_tile_area::shift#0 = *vera_layer_rowshift - [353] vera_tile_area::rowskip#0 = 1 << vera_tile_area::shift#0 - [354] vera_tile_area::hflip#0 = *vera_layer_hflip - [355] vera_tile_area::vflip#0 = *vera_layer_vflip - [356] vera_tile_area::index_l#0 = byte0 vera_tile_area::tileindex#3 - [357] vera_tile_area::index_h#0 = byte1 vera_tile_area::tileindex#3 - [358] vera_tile_area::index_h#1 = vera_tile_area::index_h#0 | vera_tile_area::hflip#0 - [359] vera_tile_area::index_h#2 = vera_tile_area::index_h#1 | vera_tile_area::vflip#0 - [360] vera_tile_area::$10 = (unsigned int)vera_tile_area::y#3 - [361] vera_tile_area::$4 = vera_tile_area::$10 << vera_tile_area::shift#0 - [362] vera_tile_area::mapbase#1 = vera_tile_area::mapbase#0 + vera_tile_area::$4 - [363] vera_tile_area::$5 = vera_tile_area::x#3 << 1 - [364] vera_tile_area::mapbase#2 = vera_tile_area::mapbase#1 + vera_tile_area::$5 - to:vera_tile_area::@1 -vera_tile_area::@1: scope:[vera_tile_area] from vera_tile_area vera_tile_area::@4 - [365] vera_tile_area::mapbase#10 = phi( vera_tile_area/vera_tile_area::mapbase#2, vera_tile_area::@4/vera_tile_area::mapbase#3 ) - [365] vera_tile_area::r#2 = phi( vera_tile_area/0, vera_tile_area::@4/vera_tile_area::r#1 ) - [366] if(vera_tile_area::r#2$0000 - rts - - continue1: - nop - }} - [394] kbhit::return#0 = kbhit::ch - to:kbhit::@return -kbhit::@return: scope:[kbhit] from kbhit - [395] kbhit::return#1 = kbhit::return#0 - [396] return - to:@return - -void vera_layer_set_text_color_mode(char layer , char color_mode) -vera_layer_set_text_color_mode: scope:[vera_layer_set_text_color_mode] from vera_layer_mode_text::@1 - [397] vera_layer_set_text_color_mode::addr#0 = *(vera_layer_config+vera_layer_mode_text::layer#0*SIZEOF_POINTER) - [398] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 & ~VERA_LAYER_CONFIG_256C - [399] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 - to:vera_layer_set_text_color_mode::@return -vera_layer_set_text_color_mode::@return: scope:[vera_layer_set_text_color_mode] from vera_layer_set_text_color_mode - [400] return - to:@return - -char vera_layer_get_mapbase_bank(char layer) -vera_layer_get_mapbase_bank: scope:[vera_layer_get_mapbase_bank] from screenlayer - [401] vera_layer_get_mapbase_bank::return#0 = vera_mapbase_bank[vera_layer_get_mapbase_bank::layer#0] - to:vera_layer_get_mapbase_bank::@return -vera_layer_get_mapbase_bank::@return: scope:[vera_layer_get_mapbase_bank] from vera_layer_get_mapbase_bank - [402] return - to:@return - -unsigned int vera_layer_get_mapbase_offset(char layer) -vera_layer_get_mapbase_offset: scope:[vera_layer_get_mapbase_offset] from screenlayer::@3 - [403] vera_layer_get_mapbase_offset::$0 = vera_layer_get_mapbase_offset::layer#0 << 1 - [404] vera_layer_get_mapbase_offset::return#0 = vera_mapbase_offset[vera_layer_get_mapbase_offset::$0] - to:vera_layer_get_mapbase_offset::@return -vera_layer_get_mapbase_offset::@return: scope:[vera_layer_get_mapbase_offset] from vera_layer_get_mapbase_offset - [405] return - to:@return - -char vera_layer_get_rowshift(char layer) -vera_layer_get_rowshift: scope:[vera_layer_get_rowshift] from screenlayer::@1 - [406] vera_layer_get_rowshift::return#0 = vera_layer_rowshift[vera_layer_get_rowshift::layer#0] - to:vera_layer_get_rowshift::@return -vera_layer_get_rowshift::@return: scope:[vera_layer_get_rowshift] from vera_layer_get_rowshift - [407] return - to:@return - -unsigned int vera_layer_get_rowskip(char layer) -vera_layer_get_rowskip: scope:[vera_layer_get_rowskip] from screenlayer::@5 - [408] vera_layer_get_rowskip::$0 = vera_layer_get_rowskip::layer#0 << 1 - [409] vera_layer_get_rowskip::return#0 = vera_layer_rowskip[vera_layer_get_rowskip::$0] - to:vera_layer_get_rowskip::@return -vera_layer_get_rowskip::@return: scope:[vera_layer_get_rowskip] from vera_layer_get_rowskip - [410] return - to:@return - -void cscroll() -cscroll: scope:[cscroll] from cputln - [411] if(conio_cursor_y[conio_screen_layer]> 1 - vera_layer_mode_tile::mapbase_address#0 = vera_layer_mode_tile::$3 - vera_layer_mode_tile::mapbase#0 = byte1 vera_layer_mode_tile::mapbase_address#0 - vera_layer_set_mapbase::layer#0 = vera_layer_mode_tile::layer#7 - vera_layer_set_mapbase::mapbase#0 = vera_layer_mode_tile::mapbase#0 - call vera_layer_set_mapbase - to:vera_layer_mode_tile::@34 -vera_layer_mode_tile::@34: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@33 - vera_layer_mode_tile::tileheight#7 = phi( vera_layer_mode_tile::@33/vera_layer_mode_tile::tileheight#8 ) - vera_layer_mode_tile::tilewidth#2 = phi( vera_layer_mode_tile::@33/vera_layer_mode_tile::tilewidth#4 ) - vera_layer_mode_tile::layer#8 = phi( vera_layer_mode_tile::@33/vera_layer_mode_tile::layer#7 ) - vera_layer_mode_tile::tilebase_address#3 = phi( vera_layer_mode_tile::@33/vera_layer_mode_tile::tilebase_address#4 ) - vera_layer_mode_tile::$6 = word0 vera_layer_mode_tile::tilebase_address#3 - vera_layer_mode_tile::$17 = vera_layer_mode_tile::layer#8 * SIZEOF_UNSIGNED_INT - vera_tilebase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$6 - vera_layer_mode_tile::$7 = byte2 vera_layer_mode_tile::tilebase_address#3 - vera_tilebase_bank[vera_layer_mode_tile::layer#8] = vera_layer_mode_tile::$7 - vera_layer_mode_tile::$18 = vera_layer_mode_tile::layer#8 * SIZEOF_UNSIGNED_LONG - vera_tilebase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::tilebase_address#3 - vera_layer_mode_tile::$8 = vera_layer_mode_tile::tilebase_address#3 >> 1 - vera_layer_mode_tile::tilebase_address#0 = vera_layer_mode_tile::$8 - vera_layer_mode_tile::tilebase#0 = byte1 vera_layer_mode_tile::tilebase_address#0 - vera_layer_mode_tile::tilebase#1 = vera_layer_mode_tile::tilebase#0 & VERA_LAYER_TILEBASE_MASK - if(vera_layer_mode_tile::tilewidth#2==8) goto vera_layer_mode_tile::@26 - to:vera_layer_mode_tile::@25 -vera_layer_mode_tile::@26: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@34 - vera_layer_mode_tile::layer#35 = phi( vera_layer_mode_tile::@34/vera_layer_mode_tile::layer#8 ) - vera_layer_mode_tile::tileheight#5 = phi( vera_layer_mode_tile::@34/vera_layer_mode_tile::tileheight#7 ) - vera_layer_mode_tile::tilebase#6 = phi( vera_layer_mode_tile::@34/vera_layer_mode_tile::tilebase#1 ) - vera_layer_mode_tile::tilebase#2 = vera_layer_mode_tile::tilebase#6 | VERA_TILEBASE_WIDTH_8 - to:vera_layer_mode_tile::@28 -vera_layer_mode_tile::@25: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@34 - vera_layer_mode_tile::layer#34 = phi( vera_layer_mode_tile::@34/vera_layer_mode_tile::layer#8 ) - vera_layer_mode_tile::tileheight#4 = phi( vera_layer_mode_tile::@34/vera_layer_mode_tile::tileheight#7 ) - vera_layer_mode_tile::tilebase#11 = phi( vera_layer_mode_tile::@34/vera_layer_mode_tile::tilebase#1 ) - vera_layer_mode_tile::tilewidth#3 = phi( vera_layer_mode_tile::@34/vera_layer_mode_tile::tilewidth#2 ) - if(vera_layer_mode_tile::tilewidth#3==$10) goto vera_layer_mode_tile::@27 - to:vera_layer_mode_tile::@28 -vera_layer_mode_tile::@27: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@25 - vera_layer_mode_tile::layer#36 = phi( vera_layer_mode_tile::@25/vera_layer_mode_tile::layer#34 ) - vera_layer_mode_tile::tileheight#6 = phi( vera_layer_mode_tile::@25/vera_layer_mode_tile::tileheight#4 ) - vera_layer_mode_tile::tilebase#7 = phi( vera_layer_mode_tile::@25/vera_layer_mode_tile::tilebase#11 ) - vera_layer_mode_tile::tilebase#3 = vera_layer_mode_tile::tilebase#7 | VERA_TILEBASE_WIDTH_16 - to:vera_layer_mode_tile::@28 -vera_layer_mode_tile::@28: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@25 vera_layer_mode_tile::@26 vera_layer_mode_tile::@27 - vera_layer_mode_tile::layer#30 = phi( vera_layer_mode_tile::@25/vera_layer_mode_tile::layer#34, vera_layer_mode_tile::@26/vera_layer_mode_tile::layer#35, vera_layer_mode_tile::@27/vera_layer_mode_tile::layer#36 ) - vera_layer_mode_tile::tilebase#12 = phi( vera_layer_mode_tile::@25/vera_layer_mode_tile::tilebase#11, vera_layer_mode_tile::@26/vera_layer_mode_tile::tilebase#2, vera_layer_mode_tile::@27/vera_layer_mode_tile::tilebase#3 ) - vera_layer_mode_tile::tileheight#2 = phi( vera_layer_mode_tile::@25/vera_layer_mode_tile::tileheight#4, vera_layer_mode_tile::@26/vera_layer_mode_tile::tileheight#5, vera_layer_mode_tile::@27/vera_layer_mode_tile::tileheight#6 ) - if(vera_layer_mode_tile::tileheight#2==8) goto vera_layer_mode_tile::@30 - to:vera_layer_mode_tile::@29 -vera_layer_mode_tile::@30: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@28 - vera_layer_mode_tile::layer#20 = phi( vera_layer_mode_tile::@28/vera_layer_mode_tile::layer#30 ) - vera_layer_mode_tile::tilebase#8 = phi( vera_layer_mode_tile::@28/vera_layer_mode_tile::tilebase#12 ) - vera_layer_mode_tile::tilebase#4 = vera_layer_mode_tile::tilebase#8 | VERA_TILEBASE_HEIGHT_8 - to:vera_layer_mode_tile::@32 -vera_layer_mode_tile::@29: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@28 - vera_layer_mode_tile::layer#19 = phi( vera_layer_mode_tile::@28/vera_layer_mode_tile::layer#30 ) - vera_layer_mode_tile::tilebase#13 = phi( vera_layer_mode_tile::@28/vera_layer_mode_tile::tilebase#12 ) - vera_layer_mode_tile::tileheight#3 = phi( vera_layer_mode_tile::@28/vera_layer_mode_tile::tileheight#2 ) - if(vera_layer_mode_tile::tileheight#3==$10) goto vera_layer_mode_tile::@31 - to:vera_layer_mode_tile::@32 -vera_layer_mode_tile::@31: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@29 - vera_layer_mode_tile::layer#21 = phi( vera_layer_mode_tile::@29/vera_layer_mode_tile::layer#19 ) - vera_layer_mode_tile::tilebase#9 = phi( vera_layer_mode_tile::@29/vera_layer_mode_tile::tilebase#13 ) - vera_layer_mode_tile::tilebase#5 = vera_layer_mode_tile::tilebase#9 | VERA_TILEBASE_HEIGHT_16 - to:vera_layer_mode_tile::@32 -vera_layer_mode_tile::@32: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@29 vera_layer_mode_tile::@30 vera_layer_mode_tile::@31 - vera_layer_mode_tile::tilebase#10 = phi( vera_layer_mode_tile::@29/vera_layer_mode_tile::tilebase#13, vera_layer_mode_tile::@30/vera_layer_mode_tile::tilebase#4, vera_layer_mode_tile::@31/vera_layer_mode_tile::tilebase#5 ) - vera_layer_mode_tile::layer#9 = phi( vera_layer_mode_tile::@29/vera_layer_mode_tile::layer#19, vera_layer_mode_tile::@30/vera_layer_mode_tile::layer#20, vera_layer_mode_tile::@31/vera_layer_mode_tile::layer#21 ) - vera_layer_set_tilebase::layer#0 = vera_layer_mode_tile::layer#9 - vera_layer_set_tilebase::tilebase#0 = vera_layer_mode_tile::tilebase#10 - call vera_layer_set_tilebase - to:vera_layer_mode_tile::@35 -vera_layer_mode_tile::@35: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@32 - to:vera_layer_mode_tile::@return -vera_layer_mode_tile::@return: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@35 - return - to:@return - -void vera_layer_mode_text(char layer , unsigned long mapbase_address , unsigned long tilebase_address , unsigned int mapwidth , unsigned int mapheight , char tilewidth , char tileheight , unsigned int color_mode) -vera_layer_mode_text: scope:[vera_layer_mode_text] from conio_x16_init - vera_layer_mode_text::color_mode#3 = phi( conio_x16_init/vera_layer_mode_text::color_mode#0 ) - vera_layer_mode_text::tileheight#1 = phi( conio_x16_init/vera_layer_mode_text::tileheight#0 ) - vera_layer_mode_text::tilewidth#1 = phi( conio_x16_init/vera_layer_mode_text::tilewidth#0 ) - vera_layer_mode_text::mapheight#1 = phi( conio_x16_init/vera_layer_mode_text::mapheight#0 ) - vera_layer_mode_text::mapwidth#1 = phi( conio_x16_init/vera_layer_mode_text::mapwidth#0 ) - vera_layer_mode_text::tilebase_address#1 = phi( conio_x16_init/vera_layer_mode_text::tilebase_address#0 ) - vera_layer_mode_text::mapbase_address#1 = phi( conio_x16_init/vera_layer_mode_text::mapbase_address#0 ) - vera_layer_mode_text::layer#1 = phi( conio_x16_init/vera_layer_mode_text::layer#0 ) - vera_layer_mode_tile::layer#0 = vera_layer_mode_text::layer#1 - vera_layer_mode_tile::mapbase_address#1 = vera_layer_mode_text::mapbase_address#1 - vera_layer_mode_tile::tilebase_address#1 = vera_layer_mode_text::tilebase_address#1 - vera_layer_mode_tile::mapwidth#0 = vera_layer_mode_text::mapwidth#1 - vera_layer_mode_tile::mapheight#0 = vera_layer_mode_text::mapheight#1 - vera_layer_mode_tile::tilewidth#0 = vera_layer_mode_text::tilewidth#1 - vera_layer_mode_tile::tileheight#0 = vera_layer_mode_text::tileheight#1 - vera_layer_mode_tile::color_depth#0 = 1 - call vera_layer_mode_tile - to:vera_layer_mode_text::@4 -vera_layer_mode_text::@4: scope:[vera_layer_mode_text] from vera_layer_mode_text - vera_layer_mode_text::layer#4 = phi( vera_layer_mode_text/vera_layer_mode_text::layer#1 ) - vera_layer_mode_text::color_mode#1 = phi( vera_layer_mode_text/vera_layer_mode_text::color_mode#3 ) - if(vera_layer_mode_text::color_mode#1==$10) goto vera_layer_mode_text::@2 - to:vera_layer_mode_text::@1 -vera_layer_mode_text::@2: scope:[vera_layer_mode_text] from vera_layer_mode_text::@4 - vera_layer_mode_text::layer#2 = phi( vera_layer_mode_text::@4/vera_layer_mode_text::layer#4 ) - vera_layer_set_text_color_mode::layer#0 = vera_layer_mode_text::layer#2 - vera_layer_set_text_color_mode::color_mode#0 = VERA_LAYER_CONFIG_16C - call vera_layer_set_text_color_mode - to:vera_layer_mode_text::@5 -vera_layer_mode_text::@5: scope:[vera_layer_mode_text] from vera_layer_mode_text::@2 - to:vera_layer_mode_text::@return -vera_layer_mode_text::@1: scope:[vera_layer_mode_text] from vera_layer_mode_text::@4 - vera_layer_mode_text::layer#5 = phi( vera_layer_mode_text::@4/vera_layer_mode_text::layer#4 ) - vera_layer_mode_text::color_mode#2 = phi( vera_layer_mode_text::@4/vera_layer_mode_text::color_mode#1 ) - if(vera_layer_mode_text::color_mode#2==$100) goto vera_layer_mode_text::@3 - to:vera_layer_mode_text::@return -vera_layer_mode_text::@3: scope:[vera_layer_mode_text] from vera_layer_mode_text::@1 - vera_layer_mode_text::layer#3 = phi( vera_layer_mode_text::@1/vera_layer_mode_text::layer#5 ) - vera_layer_set_text_color_mode::layer#1 = vera_layer_mode_text::layer#3 - vera_layer_set_text_color_mode::color_mode#1 = VERA_LAYER_CONFIG_256C - call vera_layer_set_text_color_mode - to:vera_layer_mode_text::@6 -vera_layer_mode_text::@6: scope:[vera_layer_mode_text] from vera_layer_mode_text::@3 - to:vera_layer_mode_text::@return -vera_layer_mode_text::@return: scope:[vera_layer_mode_text] from vera_layer_mode_text::@1 vera_layer_mode_text::@5 vera_layer_mode_text::@6 - return - to:@return - -void vera_tile_area(char layer , unsigned int tileindex , char x , char y , char w , char h , char hflip , char vflip , char offset) -vera_tile_area: scope:[vera_tile_area] from main::@10 main::@4 main::@6 - vera_tile_area::w#9 = phi( main::@10/vera_tile_area::w#2, main::@4/vera_tile_area::w#0, main::@6/vera_tile_area::w#1 ) - vera_tile_area::h#4 = phi( main::@10/vera_tile_area::h#2, main::@4/vera_tile_area::h#0, main::@6/vera_tile_area::h#1 ) - vera_tile_area::x#3 = phi( main::@10/vera_tile_area::x#2, main::@4/vera_tile_area::x#0, main::@6/vera_tile_area::x#1 ) - vera_tile_area::y#3 = phi( main::@10/vera_tile_area::y#2, main::@4/vera_tile_area::y#0, main::@6/vera_tile_area::y#1 ) - vera_tile_area::tileindex#3 = phi( main::@10/vera_tile_area::tileindex#2, main::@4/vera_tile_area::tileindex#0, main::@6/vera_tile_area::tileindex#1 ) - vera_tile_area::offset#4 = phi( main::@10/vera_tile_area::offset#3, main::@4/vera_tile_area::offset#1, main::@6/vera_tile_area::offset#2 ) - vera_tile_area::vflip#4 = phi( main::@10/vera_tile_area::vflip#3, main::@4/vera_tile_area::vflip#1, main::@6/vera_tile_area::vflip#2 ) - vera_tile_area::hflip#4 = phi( main::@10/vera_tile_area::hflip#3, main::@4/vera_tile_area::hflip#1, main::@6/vera_tile_area::hflip#2 ) - vera_tile_area::layer#3 = phi( main::@10/vera_tile_area::layer#2, main::@4/vera_tile_area::layer#0, main::@6/vera_tile_area::layer#1 ) - vera_tile_area::$9 = vera_tile_area::layer#3 * SIZEOF_UNSIGNED_LONG - vera_tile_area::mapbase#0 = vera_mapbase_address[vera_tile_area::$9] - vera_tile_area::shift#0 = vera_layer_rowshift[vera_tile_area::layer#3] - vera_tile_area::rowskip#0 = (unsigned int)1 << vera_tile_area::shift#0 - vera_tile_area::hflip#0 = vera_layer_hflip[vera_tile_area::hflip#4] - vera_tile_area::vflip#0 = vera_layer_vflip[vera_tile_area::vflip#4] - vera_tile_area::$1 = vera_tile_area::offset#4 << 4 - vera_tile_area::offset#0 = vera_tile_area::$1 - vera_tile_area::index_l#0 = byte0 vera_tile_area::tileindex#3 - vera_tile_area::index_h#0 = byte1 vera_tile_area::tileindex#3 - vera_tile_area::index_h#1 = vera_tile_area::index_h#0 | vera_tile_area::hflip#0 - vera_tile_area::index_h#2 = vera_tile_area::index_h#1 | vera_tile_area::vflip#0 - vera_tile_area::index_h#3 = vera_tile_area::index_h#2 | vera_tile_area::offset#0 - vera_tile_area::$10 = (unsigned int)vera_tile_area::y#3 - vera_tile_area::$4 = vera_tile_area::$10 << vera_tile_area::shift#0 - vera_tile_area::mapbase#1 = vera_tile_area::mapbase#0 + vera_tile_area::$4 - vera_tile_area::$5 = vera_tile_area::x#3 << 1 - vera_tile_area::mapbase#2 = vera_tile_area::mapbase#1 + vera_tile_area::$5 - vera_tile_area::r#0 = 0 - to:vera_tile_area::@1 -vera_tile_area::@1: scope:[vera_tile_area] from vera_tile_area vera_tile_area::@5 - vera_tile_area::rowskip#7 = phi( vera_tile_area/vera_tile_area::rowskip#0, vera_tile_area::@5/vera_tile_area::rowskip#1 ) - vera_tile_area::index_h#9 = phi( vera_tile_area/vera_tile_area::index_h#3, vera_tile_area::@5/vera_tile_area::index_h#10 ) - vera_tile_area::index_l#6 = phi( vera_tile_area/vera_tile_area::index_l#0, vera_tile_area::@5/vera_tile_area::index_l#7 ) - vera_tile_area::w#8 = phi( vera_tile_area/vera_tile_area::w#9, vera_tile_area::@5/vera_tile_area::w#10 ) - vera_tile_area::mapbase#6 = phi( vera_tile_area/vera_tile_area::mapbase#2, vera_tile_area::@5/vera_tile_area::mapbase#3 ) - vera_tile_area::h#3 = phi( vera_tile_area/vera_tile_area::h#4, vera_tile_area::@5/vera_tile_area::h#5 ) - vera_tile_area::r#2 = phi( vera_tile_area/vera_tile_area::r#0, vera_tile_area::@5/vera_tile_area::r#1 ) - vera_tile_area::$6 = vera_tile_area::r#2 < vera_tile_area::h#3 - if(vera_tile_area::$6) goto vera_tile_area::@2 - to:vera_tile_area::@return -vera_tile_area::@2: scope:[vera_tile_area] from vera_tile_area::@1 - vera_tile_area::h#10 = phi( vera_tile_area::@1/vera_tile_area::h#3 ) - vera_tile_area::r#8 = phi( vera_tile_area::@1/vera_tile_area::r#2 ) - vera_tile_area::rowskip#6 = phi( vera_tile_area::@1/vera_tile_area::rowskip#7 ) - vera_tile_area::index_h#8 = phi( vera_tile_area::@1/vera_tile_area::index_h#9 ) - vera_tile_area::index_l#5 = phi( vera_tile_area::@1/vera_tile_area::index_l#6 ) - vera_tile_area::w#7 = phi( vera_tile_area::@1/vera_tile_area::w#8 ) - vera_tile_area::mapbase#4 = phi( vera_tile_area::@1/vera_tile_area::mapbase#6 ) - vera_tile_area::vera_vram_address01_bankaddr#0 = vera_tile_area::mapbase#4 - vera_tile_area::vera_vram_address01_incr#0 = VERA_INC_1 - to:vera_tile_area::vera_vram_address01 -vera_tile_area::vera_vram_address01: scope:[vera_tile_area] from vera_tile_area::@2 - vera_tile_area::h#9 = phi( vera_tile_area::@2/vera_tile_area::h#10 ) - vera_tile_area::r#7 = phi( vera_tile_area::@2/vera_tile_area::r#8 ) - vera_tile_area::rowskip#5 = phi( vera_tile_area::@2/vera_tile_area::rowskip#6 ) - vera_tile_area::mapbase#10 = phi( vera_tile_area::@2/vera_tile_area::mapbase#4 ) - vera_tile_area::index_h#7 = phi( vera_tile_area::@2/vera_tile_area::index_h#8 ) - vera_tile_area::index_l#4 = phi( vera_tile_area::@2/vera_tile_area::index_l#5 ) - vera_tile_area::w#6 = phi( vera_tile_area::@2/vera_tile_area::w#7 ) - vera_tile_area::vera_vram_address01_incr#1 = phi( vera_tile_area::@2/vera_tile_area::vera_vram_address01_incr#0 ) - vera_tile_area::vera_vram_address01_bankaddr#1 = phi( vera_tile_area::@2/vera_tile_area::vera_vram_address01_bankaddr#0 ) - *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL - vera_tile_area::vera_vram_address01_$0 = byte0 vera_tile_area::vera_vram_address01_bankaddr#1 - *VERA_ADDRX_L = vera_tile_area::vera_vram_address01_$0 - vera_tile_area::vera_vram_address01_$1 = byte1 vera_tile_area::vera_vram_address01_bankaddr#1 - *VERA_ADDRX_M = vera_tile_area::vera_vram_address01_$1 - vera_tile_area::vera_vram_address01_$2 = byte2 vera_tile_area::vera_vram_address01_bankaddr#1 - vera_tile_area::vera_vram_address01_$3 = vera_tile_area::vera_vram_address01_$2 | vera_tile_area::vera_vram_address01_incr#1 - *VERA_ADDRX_H = vera_tile_area::vera_vram_address01_$3 - to:vera_tile_area::@6 -vera_tile_area::@6: scope:[vera_tile_area] from vera_tile_area::vera_vram_address01 - vera_tile_area::h#8 = phi( vera_tile_area::vera_vram_address01/vera_tile_area::h#9 ) - vera_tile_area::r#6 = phi( vera_tile_area::vera_vram_address01/vera_tile_area::r#7 ) - vera_tile_area::rowskip#4 = phi( vera_tile_area::vera_vram_address01/vera_tile_area::rowskip#5 ) - vera_tile_area::mapbase#9 = phi( vera_tile_area::vera_vram_address01/vera_tile_area::mapbase#10 ) - vera_tile_area::index_h#6 = phi( vera_tile_area::vera_vram_address01/vera_tile_area::index_h#7 ) - vera_tile_area::index_l#3 = phi( vera_tile_area::vera_vram_address01/vera_tile_area::index_l#4 ) - vera_tile_area::w#5 = phi( vera_tile_area::vera_vram_address01/vera_tile_area::w#6 ) - vera_tile_area::c#0 = 0 - to:vera_tile_area::@3 -vera_tile_area::@3: scope:[vera_tile_area] from vera_tile_area::@4 vera_tile_area::@6 - vera_tile_area::h#6 = phi( vera_tile_area::@4/vera_tile_area::h#7, vera_tile_area::@6/vera_tile_area::h#8 ) - vera_tile_area::r#4 = phi( vera_tile_area::@4/vera_tile_area::r#5, vera_tile_area::@6/vera_tile_area::r#6 ) - vera_tile_area::rowskip#2 = phi( vera_tile_area::@4/vera_tile_area::rowskip#3, vera_tile_area::@6/vera_tile_area::rowskip#4 ) - vera_tile_area::mapbase#7 = phi( vera_tile_area::@4/vera_tile_area::mapbase#8, vera_tile_area::@6/vera_tile_area::mapbase#9 ) - vera_tile_area::index_h#5 = phi( vera_tile_area::@4/vera_tile_area::index_h#4, vera_tile_area::@6/vera_tile_area::index_h#6 ) - vera_tile_area::index_l#2 = phi( vera_tile_area::@4/vera_tile_area::index_l#1, vera_tile_area::@6/vera_tile_area::index_l#3 ) - vera_tile_area::w#3 = phi( vera_tile_area::@4/vera_tile_area::w#4, vera_tile_area::@6/vera_tile_area::w#5 ) - vera_tile_area::c#2 = phi( vera_tile_area::@4/vera_tile_area::c#1, vera_tile_area::@6/vera_tile_area::c#0 ) - vera_tile_area::$8 = vera_tile_area::c#2 < vera_tile_area::w#3 - if(vera_tile_area::$8) goto vera_tile_area::@4 - to:vera_tile_area::@5 -vera_tile_area::@4: scope:[vera_tile_area] from vera_tile_area::@3 - vera_tile_area::h#7 = phi( vera_tile_area::@3/vera_tile_area::h#6 ) - vera_tile_area::r#5 = phi( vera_tile_area::@3/vera_tile_area::r#4 ) - vera_tile_area::rowskip#3 = phi( vera_tile_area::@3/vera_tile_area::rowskip#2 ) - vera_tile_area::mapbase#8 = phi( vera_tile_area::@3/vera_tile_area::mapbase#7 ) - vera_tile_area::w#4 = phi( vera_tile_area::@3/vera_tile_area::w#3 ) - vera_tile_area::c#3 = phi( vera_tile_area::@3/vera_tile_area::c#2 ) - vera_tile_area::index_h#4 = phi( vera_tile_area::@3/vera_tile_area::index_h#5 ) - vera_tile_area::index_l#1 = phi( vera_tile_area::@3/vera_tile_area::index_l#2 ) - *VERA_DATA0 = vera_tile_area::index_l#1 - *VERA_DATA0 = vera_tile_area::index_h#4 - vera_tile_area::c#1 = ++ vera_tile_area::c#3 - to:vera_tile_area::@3 -vera_tile_area::@5: scope:[vera_tile_area] from vera_tile_area::@3 - vera_tile_area::index_h#10 = phi( vera_tile_area::@3/vera_tile_area::index_h#5 ) - vera_tile_area::index_l#7 = phi( vera_tile_area::@3/vera_tile_area::index_l#2 ) - vera_tile_area::w#10 = phi( vera_tile_area::@3/vera_tile_area::w#3 ) - vera_tile_area::h#5 = phi( vera_tile_area::@3/vera_tile_area::h#6 ) - vera_tile_area::r#3 = phi( vera_tile_area::@3/vera_tile_area::r#4 ) - vera_tile_area::rowskip#1 = phi( vera_tile_area::@3/vera_tile_area::rowskip#2 ) - vera_tile_area::mapbase#5 = phi( vera_tile_area::@3/vera_tile_area::mapbase#7 ) - vera_tile_area::mapbase#3 = vera_tile_area::mapbase#5 + vera_tile_area::rowskip#1 - vera_tile_area::r#1 = ++ vera_tile_area::r#3 - to:vera_tile_area::@1 -vera_tile_area::@return: scope:[vera_tile_area] from vera_tile_area::@1 - return - to:@return - -void clrscr() -clrscr: scope:[clrscr] from main::@15 - CONIO_SCREEN_BANK#33 = phi( main::@15/CONIO_SCREEN_BANK#37 ) - CONIO_SCREEN_TEXT#7 = phi( main::@15/CONIO_SCREEN_TEXT#16 ) - clrscr::line_text#0 = CONIO_SCREEN_TEXT#7 - vera_layer_get_backcolor::layer#0 = conio_screen_layer - call vera_layer_get_backcolor - vera_layer_get_backcolor::return#2 = vera_layer_get_backcolor::return#1 - to:clrscr::@7 -clrscr::@7: scope:[clrscr] from clrscr - CONIO_SCREEN_BANK#27 = phi( clrscr/CONIO_SCREEN_BANK#33 ) - clrscr::line_text#8 = phi( clrscr/clrscr::line_text#0 ) - vera_layer_get_backcolor::return#4 = phi( clrscr/vera_layer_get_backcolor::return#2 ) - clrscr::$0 = vera_layer_get_backcolor::return#4 - clrscr::$1 = clrscr::$0 << 4 - vera_layer_get_textcolor::layer#0 = conio_screen_layer - call vera_layer_get_textcolor - vera_layer_get_textcolor::return#2 = vera_layer_get_textcolor::return#1 - to:clrscr::@8 -clrscr::@8: scope:[clrscr] from clrscr::@7 - CONIO_SCREEN_BANK#21 = phi( clrscr::@7/CONIO_SCREEN_BANK#27 ) - clrscr::line_text#6 = phi( clrscr::@7/clrscr::line_text#8 ) - vera_layer_get_textcolor::return#4 = phi( clrscr::@7/vera_layer_get_textcolor::return#2 ) - clrscr::$2 = vera_layer_get_textcolor::return#4 - clrscr::color#0 = clrscr::$1 | clrscr::$2 - clrscr::l#0 = 0 - to:clrscr::@1 -clrscr::@1: scope:[clrscr] from clrscr::@6 clrscr::@8 - clrscr::color#4 = phi( clrscr::@6/clrscr::color#5, clrscr::@8/clrscr::color#0 ) - CONIO_SCREEN_BANK#14 = phi( clrscr::@6/CONIO_SCREEN_BANK#20, clrscr::@8/CONIO_SCREEN_BANK#21 ) - clrscr::line_text#4 = phi( clrscr::@6/clrscr::line_text#1, clrscr::@8/clrscr::line_text#6 ) - clrscr::l#2 = phi( clrscr::@6/clrscr::l#1, clrscr::@8/clrscr::l#0 ) - clrscr::$4 = clrscr::l#2 < conio_height - if(clrscr::$4) goto clrscr::@2 - to:clrscr::@3 -clrscr::@2: scope:[clrscr] from clrscr::@1 - clrscr::l#5 = phi( clrscr::@1/clrscr::l#2 ) - clrscr::color#3 = phi( clrscr::@1/clrscr::color#4 ) - CONIO_SCREEN_BANK#7 = phi( clrscr::@1/CONIO_SCREEN_BANK#14 ) - clrscr::line_text#2 = phi( clrscr::@1/clrscr::line_text#4 ) - clrscr::ch#0 = clrscr::line_text#2 - *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL - clrscr::$5 = byte0 clrscr::ch#0 - *VERA_ADDRX_L = clrscr::$5 - clrscr::$6 = byte1 clrscr::ch#0 - *VERA_ADDRX_M = clrscr::$6 - clrscr::$7 = CONIO_SCREEN_BANK#7 | VERA_INC_1 - *VERA_ADDRX_H = clrscr::$7 - clrscr::c#0 = 0 - to:clrscr::@4 -clrscr::@3: scope:[clrscr] from clrscr::@1 - conio_cursor_x[conio_screen_layer] = 0 - conio_cursor_y[conio_screen_layer] = 0 - clrscr::$9 = conio_screen_layer * SIZEOF_UNSIGNED_INT - conio_line_text[clrscr::$9] = 0 - to:clrscr::@return -clrscr::@4: scope:[clrscr] from clrscr::@2 clrscr::@5 - CONIO_SCREEN_BANK#28 = phi( clrscr::@2/CONIO_SCREEN_BANK#7, clrscr::@5/CONIO_SCREEN_BANK#34 ) - clrscr::l#4 = phi( clrscr::@2/clrscr::l#5, clrscr::@5/clrscr::l#6 ) - clrscr::line_text#5 = phi( clrscr::@2/clrscr::line_text#2, clrscr::@5/clrscr::line_text#7 ) - clrscr::color#2 = phi( clrscr::@2/clrscr::color#3, clrscr::@5/clrscr::color#1 ) - clrscr::c#2 = phi( clrscr::@2/clrscr::c#0, clrscr::@5/clrscr::c#1 ) - clrscr::$8 = clrscr::c#2 < conio_width - if(clrscr::$8) goto clrscr::@5 - to:clrscr::@6 -clrscr::@5: scope:[clrscr] from clrscr::@4 - CONIO_SCREEN_BANK#34 = phi( clrscr::@4/CONIO_SCREEN_BANK#28 ) - clrscr::l#6 = phi( clrscr::@4/clrscr::l#4 ) - clrscr::line_text#7 = phi( clrscr::@4/clrscr::line_text#5 ) - clrscr::c#3 = phi( clrscr::@4/clrscr::c#2 ) - clrscr::color#1 = phi( clrscr::@4/clrscr::color#2 ) - *VERA_DATA0 = ' ' - *VERA_DATA0 = clrscr::color#1 - clrscr::c#1 = ++ clrscr::c#3 - to:clrscr::@4 -clrscr::@6: scope:[clrscr] from clrscr::@4 - clrscr::color#5 = phi( clrscr::@4/clrscr::color#2 ) - CONIO_SCREEN_BANK#20 = phi( clrscr::@4/CONIO_SCREEN_BANK#28 ) - clrscr::l#3 = phi( clrscr::@4/clrscr::l#4 ) - clrscr::line_text#3 = phi( clrscr::@4/clrscr::line_text#5 ) - clrscr::line_text#1 = clrscr::line_text#3 + conio_rowskip - clrscr::l#1 = ++ clrscr::l#3 - to:clrscr::@1 -clrscr::@return: scope:[clrscr] from clrscr::@3 - return - to:@return - -void gotoxy(char x , char y) -gotoxy: scope:[gotoxy] from conio_x16_init::@1 cscroll::@5 main::@16 - gotoxy::x#6 = phi( conio_x16_init::@1/gotoxy::x#1, cscroll::@5/gotoxy::x#2, main::@16/gotoxy::x#3 ) - gotoxy::y#4 = phi( conio_x16_init::@1/gotoxy::y#1, cscroll::@5/gotoxy::y#2, main::@16/gotoxy::y#3 ) - gotoxy::$0 = gotoxy::y#4 > conio_screen_height - gotoxy::$1 = ! gotoxy::$0 - if(gotoxy::$1) goto gotoxy::@1 - to:gotoxy::@3 -gotoxy::@1: scope:[gotoxy] from gotoxy gotoxy::@3 - gotoxy::y#6 = phi( gotoxy/gotoxy::y#4, gotoxy::@3/gotoxy::y#0 ) - gotoxy::x#4 = phi( gotoxy/gotoxy::x#6, gotoxy::@3/gotoxy::x#7 ) - gotoxy::$2 = gotoxy::x#4 >= conio_screen_width - gotoxy::$3 = ! gotoxy::$2 - if(gotoxy::$3) goto gotoxy::@2 - to:gotoxy::@4 -gotoxy::@3: scope:[gotoxy] from gotoxy - gotoxy::x#7 = phi( gotoxy/gotoxy::x#6 ) - gotoxy::y#0 = 0 - to:gotoxy::@1 -gotoxy::@2: scope:[gotoxy] from gotoxy::@1 gotoxy::@4 - gotoxy::y#5 = phi( gotoxy::@1/gotoxy::y#6, gotoxy::@4/gotoxy::y#7 ) - gotoxy::x#5 = phi( gotoxy::@1/gotoxy::x#4, gotoxy::@4/gotoxy::x#0 ) - conio_cursor_x[conio_screen_layer] = gotoxy::x#5 - conio_cursor_y[conio_screen_layer] = gotoxy::y#5 - gotoxy::$6 = (unsigned int)gotoxy::y#5 - gotoxy::line_offset#0 = gotoxy::$6 << conio_rowshift - gotoxy::$5 = conio_screen_layer * SIZEOF_UNSIGNED_INT - conio_line_text[gotoxy::$5] = gotoxy::line_offset#0 - to:gotoxy::@return -gotoxy::@4: scope:[gotoxy] from gotoxy::@1 - gotoxy::y#7 = phi( gotoxy::@1/gotoxy::y#6 ) - gotoxy::x#0 = 0 - to:gotoxy::@2 -gotoxy::@return: scope:[gotoxy] from gotoxy::@2 - return - to:@return - -void screensize(char *x , char *y) -screensize: scope:[screensize] from conio_x16_init::@3 - screensize::y#1 = phi( conio_x16_init::@3/screensize::y#0 ) - screensize::x#1 = phi( conio_x16_init::@3/screensize::x#0 ) - screensize::hscale#0 = *VERA_DC_HSCALE >> 7 - screensize::$1 = $28 << screensize::hscale#0 - *screensize::x#1 = screensize::$1 - screensize::vscale#0 = *VERA_DC_VSCALE >> 7 - screensize::$3 = $1e << screensize::vscale#0 - *screensize::y#1 = screensize::$3 - to:screensize::@return -screensize::@return: scope:[screensize] from screensize - return - to:@return - -__stackcall void cputc(char c) -cputc: scope:[cputc] from - CONIO_SCREEN_BANK#22 = phi( ) - CONIO_SCREEN_TEXT#17 = phi( ) - cputc::c#0 = stackidx(char,cputc::OFFSET_STACK_C) - vera_layer_get_color::layer#0 = conio_screen_layer - call vera_layer_get_color - vera_layer_get_color::return#3 = vera_layer_get_color::return#2 - to:cputc::@7 -cputc::@7: scope:[cputc] from cputc - CONIO_SCREEN_BANK#15 = phi( cputc/CONIO_SCREEN_BANK#22 ) - cputc::c#1 = phi( cputc/cputc::c#0 ) - CONIO_SCREEN_TEXT#8 = phi( cputc/CONIO_SCREEN_TEXT#17 ) - vera_layer_get_color::return#6 = phi( cputc/vera_layer_get_color::return#3 ) - cputc::color#0 = vera_layer_get_color::return#6 - cputc::$15 = conio_screen_layer * SIZEOF_UNSIGNED_INT - cputc::conio_addr#0 = CONIO_SCREEN_TEXT#8 + conio_line_text[cputc::$15] - cputc::$2 = conio_cursor_x[conio_screen_layer] << 1 - cputc::conio_addr#1 = cputc::conio_addr#0 + cputc::$2 - cputc::$3 = cputc::c#1 == ' -' - if(cputc::$3) goto cputc::@1 - to:cputc::@2 -cputc::@1: scope:[cputc] from cputc::@7 - CONIO_SCREEN_TEXT#49 = phi( cputc::@7/CONIO_SCREEN_TEXT#8 ) - call cputln - to:cputc::@8 -cputc::@8: scope:[cputc] from cputc::@1 - to:cputc::@return -cputc::@2: scope:[cputc] from cputc::@7 - CONIO_SCREEN_TEXT#57 = phi( cputc::@7/CONIO_SCREEN_TEXT#8 ) - cputc::color#1 = phi( cputc::@7/cputc::color#0 ) - cputc::c#2 = phi( cputc::@7/cputc::c#1 ) - CONIO_SCREEN_BANK#8 = phi( cputc::@7/CONIO_SCREEN_BANK#15 ) - cputc::conio_addr#2 = phi( cputc::@7/cputc::conio_addr#1 ) - *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL - cputc::$4 = byte0 cputc::conio_addr#2 - *VERA_ADDRX_L = cputc::$4 - cputc::$5 = byte1 cputc::conio_addr#2 - *VERA_ADDRX_M = cputc::$5 - cputc::$6 = CONIO_SCREEN_BANK#8 | VERA_INC_1 - *VERA_ADDRX_H = cputc::$6 - *VERA_DATA0 = cputc::c#2 - *VERA_DATA0 = cputc::color#1 - conio_cursor_x[conio_screen_layer] = ++ conio_cursor_x[conio_screen_layer] - cputc::scroll_enable#0 = conio_scroll_enable[conio_screen_layer] - cputc::$17 = 0 != cputc::scroll_enable#0 - if(cputc::$17) goto cputc::@5 - to:cputc::@3 -cputc::@5: scope:[cputc] from cputc::@2 - CONIO_SCREEN_TEXT#55 = phi( cputc::@2/CONIO_SCREEN_TEXT#57 ) - cputc::$11 = conio_cursor_x[conio_screen_layer] == conio_screen_width - cputc::$12 = ! cputc::$11 - if(cputc::$12) goto cputc::@return - to:cputc::@6 -cputc::@3: scope:[cputc] from cputc::@2 - CONIO_SCREEN_TEXT#54 = phi( cputc::@2/CONIO_SCREEN_TEXT#57 ) - cputc::$16 = (unsigned int)conio_cursor_x[conio_screen_layer] - cputc::$8 = cputc::$16 == conio_width - cputc::$9 = ! cputc::$8 - if(cputc::$9) goto cputc::@return - to:cputc::@4 -cputc::@4: scope:[cputc] from cputc::@3 - CONIO_SCREEN_TEXT#50 = phi( cputc::@3/CONIO_SCREEN_TEXT#54 ) - call cputln - to:cputc::@9 -cputc::@9: scope:[cputc] from cputc::@4 - to:cputc::@return -cputc::@6: scope:[cputc] from cputc::@5 - CONIO_SCREEN_TEXT#51 = phi( cputc::@5/CONIO_SCREEN_TEXT#55 ) - call cputln - to:cputc::@10 -cputc::@10: scope:[cputc] from cputc::@6 - to:cputc::@return -cputc::@return: scope:[cputc] from cputc::@10 cputc::@3 cputc::@5 cputc::@8 cputc::@9 - return - to:@return - -void cputln() -cputln: scope:[cputln] from cputc::@1 cputc::@4 cputc::@6 - CONIO_SCREEN_TEXT#46 = phi( cputc::@1/CONIO_SCREEN_TEXT#49, cputc::@4/CONIO_SCREEN_TEXT#50, cputc::@6/CONIO_SCREEN_TEXT#51 ) - cputln::$2 = conio_screen_layer * SIZEOF_UNSIGNED_INT - cputln::temp#0 = conio_line_text[cputln::$2] - cputln::temp#1 = cputln::temp#0 + conio_rowskip - cputln::$3 = conio_screen_layer * SIZEOF_UNSIGNED_INT - conio_line_text[cputln::$3] = cputln::temp#1 - conio_cursor_x[conio_screen_layer] = 0 - conio_cursor_y[conio_screen_layer] = ++ conio_cursor_y[conio_screen_layer] - call cscroll - to:cputln::@1 -cputln::@1: scope:[cputln] from cputln - to:cputln::@return -cputln::@return: scope:[cputln] from cputln::@1 - return - to:@return - -char kbhit() -kbhit: scope:[kbhit] from main::@13 - kbhit::ch = 0 - kickasm( uses kbhit::chptr uses kbhit::IN_DEV uses kbhit::GETIN) {{ jsr _kbhit - bne L3 - - jmp continue1 - - .var via1 = $9f60 //VIA#1 - .var d1pra = via1+1 - - _kbhit: - ldy d1pra // The count of keys pressed is stored in RAM bank 0. - stz d1pra // Set d1pra to zero to access RAM bank 0. - lda $A00A // Get number of characters from this address in the ROM of the CX16 (ROM 38). - sty d1pra // Set d1pra to previous value. - rts - - L3: - ldy IN_DEV // Save current input device - stz IN_DEV // Keyboard - phy - jsr GETIN // Read char, and return in .A - ply - sta chptr // Store the character read in ch - sty IN_DEV // Restore input device - ldx #>$0000 - rts - - continue1: - nop - }} - kbhit::return#0 = kbhit::ch - to:kbhit::@return -kbhit::@return: scope:[kbhit] from kbhit - kbhit::return#3 = phi( kbhit/kbhit::return#0 ) - kbhit::return#1 = kbhit::return#3 - return - to:@return - -void conio_x16_init() -conio_x16_init: scope:[conio_x16_init] from __start::__init1 - CONIO_SCREEN_TEXT#31 = phi( __start::__init1/CONIO_SCREEN_TEXT#4 ) - CONIO_SCREEN_BANK#29 = phi( __start::__init1/CONIO_SCREEN_BANK#4 ) - conio_x16_init::line#0 = *conio_x16_init::BASIC_CURSOR_LINE - vera_layer_mode_text::layer#0 = 1 - vera_layer_mode_text::mapbase_address#0 = (unsigned long)0 - vera_layer_mode_text::tilebase_address#0 = (unsigned long)$f800 - vera_layer_mode_text::mapwidth#0 = $80 - vera_layer_mode_text::mapheight#0 = $40 - vera_layer_mode_text::tilewidth#0 = 8 - vera_layer_mode_text::tileheight#0 = 8 - vera_layer_mode_text::color_mode#0 = $10 - call vera_layer_mode_text - to:conio_x16_init::@3 -conio_x16_init::@3: scope:[conio_x16_init] from conio_x16_init - conio_x16_init::line#9 = phi( conio_x16_init/conio_x16_init::line#0 ) - CONIO_SCREEN_TEXT#24 = phi( conio_x16_init/CONIO_SCREEN_TEXT#31 ) - CONIO_SCREEN_BANK#23 = phi( conio_x16_init/CONIO_SCREEN_BANK#29 ) - screensize::x#0 = &conio_screen_width - screensize::y#0 = &conio_screen_height - call screensize - to:conio_x16_init::@4 -conio_x16_init::@4: scope:[conio_x16_init] from conio_x16_init::@3 - conio_x16_init::line#8 = phi( conio_x16_init::@3/conio_x16_init::line#9 ) - CONIO_SCREEN_TEXT#18 = phi( conio_x16_init::@3/CONIO_SCREEN_TEXT#24 ) - CONIO_SCREEN_BANK#16 = phi( conio_x16_init::@3/CONIO_SCREEN_BANK#23 ) - screenlayer::layer#0 = 1 - call screenlayer - to:conio_x16_init::@5 -conio_x16_init::@5: scope:[conio_x16_init] from conio_x16_init::@4 - conio_x16_init::line#7 = phi( conio_x16_init::@4/conio_x16_init::line#8 ) - CONIO_SCREEN_TEXT#9 = phi( conio_x16_init::@4/CONIO_SCREEN_TEXT#3 ) - CONIO_SCREEN_BANK#9 = phi( conio_x16_init::@4/CONIO_SCREEN_BANK#3 ) - CONIO_SCREEN_BANK#0 = CONIO_SCREEN_BANK#9 - CONIO_SCREEN_TEXT#0 = CONIO_SCREEN_TEXT#9 - vera_layer_set_textcolor::layer#0 = 1 - vera_layer_set_textcolor::color#0 = WHITE - call vera_layer_set_textcolor - vera_layer_set_textcolor::return#2 = vera_layer_set_textcolor::return#1 - to:conio_x16_init::@6 -conio_x16_init::@6: scope:[conio_x16_init] from conio_x16_init::@5 - CONIO_SCREEN_TEXT#45 = phi( conio_x16_init::@5/CONIO_SCREEN_TEXT#0 ) - CONIO_SCREEN_BANK#40 = phi( conio_x16_init::@5/CONIO_SCREEN_BANK#0 ) - conio_x16_init::line#6 = phi( conio_x16_init::@5/conio_x16_init::line#7 ) - vera_layer_set_backcolor::layer#0 = 1 - vera_layer_set_backcolor::color#0 = BLUE - call vera_layer_set_backcolor - vera_layer_set_backcolor::return#2 = vera_layer_set_backcolor::return#1 - to:conio_x16_init::@7 -conio_x16_init::@7: scope:[conio_x16_init] from conio_x16_init::@6 - CONIO_SCREEN_TEXT#41 = phi( conio_x16_init::@6/CONIO_SCREEN_TEXT#45 ) - CONIO_SCREEN_BANK#38 = phi( conio_x16_init::@6/CONIO_SCREEN_BANK#40 ) - conio_x16_init::line#5 = phi( conio_x16_init::@6/conio_x16_init::line#6 ) - vera_layer_set_mapbase::layer#1 = 0 - vera_layer_set_mapbase::mapbase#1 = $20 - call vera_layer_set_mapbase - to:conio_x16_init::@8 -conio_x16_init::@8: scope:[conio_x16_init] from conio_x16_init::@7 - CONIO_SCREEN_TEXT#37 = phi( conio_x16_init::@7/CONIO_SCREEN_TEXT#41 ) - CONIO_SCREEN_BANK#35 = phi( conio_x16_init::@7/CONIO_SCREEN_BANK#38 ) - conio_x16_init::line#4 = phi( conio_x16_init::@7/conio_x16_init::line#5 ) - vera_layer_set_mapbase::layer#2 = 1 - vera_layer_set_mapbase::mapbase#2 = 0 - call vera_layer_set_mapbase - to:conio_x16_init::@9 -conio_x16_init::@9: scope:[conio_x16_init] from conio_x16_init::@8 - CONIO_SCREEN_TEXT#33 = phi( conio_x16_init::@8/CONIO_SCREEN_TEXT#37 ) - CONIO_SCREEN_BANK#31 = phi( conio_x16_init::@8/CONIO_SCREEN_BANK#35 ) - conio_x16_init::line#2 = phi( conio_x16_init::@8/conio_x16_init::line#4 ) - conio_x16_init::$7 = conio_x16_init::line#2 >= conio_screen_height - conio_x16_init::$8 = ! conio_x16_init::$7 - if(conio_x16_init::$8) goto conio_x16_init::@1 - to:conio_x16_init::@2 -conio_x16_init::@1: scope:[conio_x16_init] from conio_x16_init::@2 conio_x16_init::@9 - CONIO_SCREEN_TEXT#25 = phi( conio_x16_init::@2/CONIO_SCREEN_TEXT#32, conio_x16_init::@9/CONIO_SCREEN_TEXT#33 ) - CONIO_SCREEN_BANK#24 = phi( conio_x16_init::@2/CONIO_SCREEN_BANK#30, conio_x16_init::@9/CONIO_SCREEN_BANK#31 ) - conio_x16_init::line#3 = phi( conio_x16_init::@2/conio_x16_init::line#1, conio_x16_init::@9/conio_x16_init::line#2 ) - gotoxy::x#1 = 0 - gotoxy::y#1 = conio_x16_init::line#3 - call gotoxy - to:conio_x16_init::@10 -conio_x16_init::@10: scope:[conio_x16_init] from conio_x16_init::@1 - CONIO_SCREEN_TEXT#19 = phi( conio_x16_init::@1/CONIO_SCREEN_TEXT#25 ) - CONIO_SCREEN_BANK#17 = phi( conio_x16_init::@1/CONIO_SCREEN_BANK#24 ) - to:conio_x16_init::@return -conio_x16_init::@2: scope:[conio_x16_init] from conio_x16_init::@9 - CONIO_SCREEN_TEXT#32 = phi( conio_x16_init::@9/CONIO_SCREEN_TEXT#33 ) - CONIO_SCREEN_BANK#30 = phi( conio_x16_init::@9/CONIO_SCREEN_BANK#31 ) - conio_x16_init::$9 = conio_screen_height - 1 - conio_x16_init::line#1 = conio_x16_init::$9 - to:conio_x16_init::@1 -conio_x16_init::@return: scope:[conio_x16_init] from conio_x16_init::@10 - CONIO_SCREEN_TEXT#10 = phi( conio_x16_init::@10/CONIO_SCREEN_TEXT#19 ) - CONIO_SCREEN_BANK#10 = phi( conio_x16_init::@10/CONIO_SCREEN_BANK#17 ) - CONIO_SCREEN_BANK#1 = CONIO_SCREEN_BANK#10 - CONIO_SCREEN_TEXT#1 = CONIO_SCREEN_TEXT#10 - return - to:@return - -void clearline() -clearline: scope:[clearline] from insertup::@3 - CONIO_SCREEN_TEXT#11 = phi( insertup::@3/CONIO_SCREEN_TEXT#20 ) - *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL - clearline::$5 = conio_screen_layer * SIZEOF_UNSIGNED_INT - clearline::addr#0 = CONIO_SCREEN_TEXT#11 + conio_line_text[clearline::$5] - clearline::$1 = byte0 clearline::addr#0 - *VERA_ADDRX_L = clearline::$1 - clearline::$2 = byte1 clearline::addr#0 - *VERA_ADDRX_M = clearline::$2 - *VERA_ADDRX_H = VERA_INC_1 - vera_layer_get_color::layer#1 = conio_screen_layer - call vera_layer_get_color - vera_layer_get_color::return#4 = vera_layer_get_color::return#2 - to:clearline::@4 -clearline::@4: scope:[clearline] from clearline - vera_layer_get_color::return#7 = phi( clearline/vera_layer_get_color::return#4 ) - clearline::color#0 = vera_layer_get_color::return#7 - clearline::c#0 = 0 - to:clearline::@1 -clearline::@1: scope:[clearline] from clearline::@2 clearline::@4 - clearline::color#2 = phi( clearline::@2/clearline::color#1, clearline::@4/clearline::color#0 ) - clearline::c#2 = phi( clearline::@2/clearline::c#1, clearline::@4/clearline::c#0 ) - clearline::$4 = clearline::c#2 < conio_screen_width - if(clearline::$4) goto clearline::@2 - to:clearline::@3 -clearline::@2: scope:[clearline] from clearline::@1 - clearline::c#3 = phi( clearline::@1/clearline::c#2 ) - clearline::color#1 = phi( clearline::@1/clearline::color#2 ) - *VERA_DATA0 = ' ' - *VERA_DATA0 = clearline::color#1 - clearline::c#1 = ++ clearline::c#3 - to:clearline::@1 -clearline::@3: scope:[clearline] from clearline::@1 - conio_cursor_x[conio_screen_layer] = 0 - to:clearline::@return -clearline::@return: scope:[clearline] from clearline::@3 - return - to:@return - -void insertup() -insertup: scope:[insertup] from cscroll::@4 - CONIO_SCREEN_TEXT#26 = phi( cscroll::@4/CONIO_SCREEN_TEXT#34 ) - insertup::cy#0 = conio_cursor_y[conio_screen_layer] - insertup::width#0 = conio_screen_width * 2 - insertup::i#0 = 1 - to:insertup::@1 -insertup::@1: scope:[insertup] from insertup insertup::@4 - insertup::width#2 = phi( insertup/insertup::width#0, insertup::@4/insertup::width#3 ) - CONIO_SCREEN_TEXT#21 = phi( insertup/CONIO_SCREEN_TEXT#26, insertup::@4/CONIO_SCREEN_TEXT#27 ) - insertup::cy#1 = phi( insertup/insertup::cy#0, insertup::@4/insertup::cy#2 ) - insertup::i#2 = phi( insertup/insertup::i#0, insertup::@4/insertup::i#1 ) - insertup::$2 = insertup::i#2 <= insertup::cy#1 - if(insertup::$2) goto insertup::@2 - to:insertup::@3 -insertup::@2: scope:[insertup] from insertup::@1 - insertup::cy#3 = phi( insertup::@1/insertup::cy#1 ) - insertup::width#1 = phi( insertup::@1/insertup::width#2 ) - CONIO_SCREEN_TEXT#12 = phi( insertup::@1/CONIO_SCREEN_TEXT#21 ) - insertup::i#3 = phi( insertup::@1/insertup::i#2 ) - insertup::$3 = insertup::i#3 - 1 - insertup::line#0 = insertup::$3 << conio_rowshift - insertup::start#0 = CONIO_SCREEN_TEXT#12 + insertup::line#0 - insertup::$6 = insertup::start#0 + conio_rowskip - memcpy_in_vram::dest_bank#0 = 0 - memcpy_in_vram::dest#0 = (void *)insertup::start#0 - memcpy_in_vram::dest_increment#0 = VERA_INC_1 - memcpy_in_vram::src_bank#0 = 0 - memcpy_in_vram::src#0 = (void *)insertup::$6 - memcpy_in_vram::src_increment#0 = VERA_INC_1 - memcpy_in_vram::num#0 = insertup::width#1 - call memcpy_in_vram - to:insertup::@4 -insertup::@4: scope:[insertup] from insertup::@2 - insertup::width#3 = phi( insertup::@2/insertup::width#1 ) - CONIO_SCREEN_TEXT#27 = phi( insertup::@2/CONIO_SCREEN_TEXT#12 ) - insertup::cy#2 = phi( insertup::@2/insertup::cy#3 ) - insertup::i#4 = phi( insertup::@2/insertup::i#3 ) - insertup::i#1 = ++ insertup::i#4 - to:insertup::@1 -insertup::@3: scope:[insertup] from insertup::@1 - CONIO_SCREEN_TEXT#20 = phi( insertup::@1/CONIO_SCREEN_TEXT#21 ) - call clearline - to:insertup::@5 -insertup::@5: scope:[insertup] from insertup::@3 - to:insertup::@return -insertup::@return: scope:[insertup] from insertup::@5 - return - to:@return - -void cscroll() -cscroll: scope:[cscroll] from cputln - CONIO_SCREEN_TEXT#42 = phi( cputln/CONIO_SCREEN_TEXT#46 ) - cscroll::$0 = conio_cursor_y[conio_screen_layer] >= conio_screen_height - cscroll::$1 = ! cscroll::$0 - if(cscroll::$1) goto cscroll::@return - to:cscroll::@1 -cscroll::@1: scope:[cscroll] from cscroll - CONIO_SCREEN_TEXT#38 = phi( cscroll/CONIO_SCREEN_TEXT#42 ) - cscroll::$7 = 0 != conio_scroll_enable[conio_screen_layer] - if(cscroll::$7) goto cscroll::@4 - to:cscroll::@2 -cscroll::@4: scope:[cscroll] from cscroll::@1 - CONIO_SCREEN_TEXT#34 = phi( cscroll::@1/CONIO_SCREEN_TEXT#38 ) - call insertup - to:cscroll::@5 -cscroll::@5: scope:[cscroll] from cscroll::@4 - cscroll::$5 = conio_screen_height - 1 - gotoxy::x#2 = 0 - gotoxy::y#2 = cscroll::$5 - call gotoxy - to:cscroll::@6 -cscroll::@6: scope:[cscroll] from cscroll::@5 - to:cscroll::@return -cscroll::@2: scope:[cscroll] from cscroll::@1 - cscroll::$2 = conio_cursor_y[conio_screen_layer] >= conio_height - cscroll::$3 = ! cscroll::$2 - if(cscroll::$3) goto cscroll::@return - to:cscroll::@3 -cscroll::@3: scope:[cscroll] from cscroll::@2 - to:cscroll::@return -cscroll::@return: scope:[cscroll] from cscroll cscroll::@2 cscroll::@3 cscroll::@6 - return - to:@return - -void screenlayer(char layer) -screenlayer: scope:[screenlayer] from conio_x16_init::@4 - screenlayer::layer#1 = phi( conio_x16_init::@4/screenlayer::layer#0 ) - conio_screen_layer = screenlayer::layer#1 - vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer - call vera_layer_get_mapbase_bank - vera_layer_get_mapbase_bank::return#2 = vera_layer_get_mapbase_bank::return#1 - to:screenlayer::@3 -screenlayer::@3: scope:[screenlayer] from screenlayer - vera_layer_get_mapbase_bank::return#4 = phi( screenlayer/vera_layer_get_mapbase_bank::return#2 ) - screenlayer::$0 = vera_layer_get_mapbase_bank::return#4 - CONIO_SCREEN_BANK#2 = screenlayer::$0 - vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer - call vera_layer_get_mapbase_offset - vera_layer_get_mapbase_offset::return#2 = vera_layer_get_mapbase_offset::return#1 - to:screenlayer::@4 -screenlayer::@4: scope:[screenlayer] from screenlayer::@3 - CONIO_SCREEN_BANK#47 = phi( screenlayer::@3/CONIO_SCREEN_BANK#2 ) - vera_layer_get_mapbase_offset::return#4 = phi( screenlayer::@3/vera_layer_get_mapbase_offset::return#2 ) - screenlayer::$1 = vera_layer_get_mapbase_offset::return#4 - CONIO_SCREEN_TEXT#2 = (char *)screenlayer::$1 - screenlayer::vera_layer_get_width1_layer#0 = conio_screen_layer - to:screenlayer::vera_layer_get_width1 -screenlayer::vera_layer_get_width1: scope:[screenlayer] from screenlayer::@4 - CONIO_SCREEN_TEXT#56 = phi( screenlayer::@4/CONIO_SCREEN_TEXT#2 ) - CONIO_SCREEN_BANK#45 = phi( screenlayer::@4/CONIO_SCREEN_BANK#47 ) - screenlayer::vera_layer_get_width1_layer#1 = phi( screenlayer::@4/screenlayer::vera_layer_get_width1_layer#0 ) - screenlayer::vera_layer_get_width1_$2 = screenlayer::vera_layer_get_width1_layer#1 * SIZEOF_POINTER - screenlayer::vera_layer_get_width1_config#0 = vera_layer_config[screenlayer::vera_layer_get_width1_$2] - screenlayer::vera_layer_get_width1_$0 = *screenlayer::vera_layer_get_width1_config#0 & VERA_LAYER_WIDTH_MASK - screenlayer::vera_layer_get_width1_$1 = screenlayer::vera_layer_get_width1_$0 >> 4 - screenlayer::vera_layer_get_width1_$3 = screenlayer::vera_layer_get_width1_$1 * SIZEOF_UNSIGNED_INT - screenlayer::vera_layer_get_width1_return#0 = VERA_LAYER_WIDTH[screenlayer::vera_layer_get_width1_$3] - to:screenlayer::vera_layer_get_width1_@return -screenlayer::vera_layer_get_width1_@return: scope:[screenlayer] from screenlayer::vera_layer_get_width1 - CONIO_SCREEN_TEXT#52 = phi( screenlayer::vera_layer_get_width1/CONIO_SCREEN_TEXT#56 ) - CONIO_SCREEN_BANK#43 = phi( screenlayer::vera_layer_get_width1/CONIO_SCREEN_BANK#45 ) - screenlayer::vera_layer_get_width1_return#2 = phi( screenlayer::vera_layer_get_width1/screenlayer::vera_layer_get_width1_return#0 ) - screenlayer::vera_layer_get_width1_return#1 = screenlayer::vera_layer_get_width1_return#2 - to:screenlayer::@1 -screenlayer::@1: scope:[screenlayer] from screenlayer::vera_layer_get_width1_@return - CONIO_SCREEN_TEXT#47 = phi( screenlayer::vera_layer_get_width1_@return/CONIO_SCREEN_TEXT#52 ) - CONIO_SCREEN_BANK#41 = phi( screenlayer::vera_layer_get_width1_@return/CONIO_SCREEN_BANK#43 ) - screenlayer::vera_layer_get_width1_return#3 = phi( screenlayer::vera_layer_get_width1_@return/screenlayer::vera_layer_get_width1_return#1 ) - screenlayer::$2 = screenlayer::vera_layer_get_width1_return#3 - conio_width = screenlayer::$2 - vera_layer_get_rowshift::layer#0 = conio_screen_layer - call vera_layer_get_rowshift - vera_layer_get_rowshift::return#2 = vera_layer_get_rowshift::return#1 - to:screenlayer::@5 -screenlayer::@5: scope:[screenlayer] from screenlayer::@1 - CONIO_SCREEN_TEXT#43 = phi( screenlayer::@1/CONIO_SCREEN_TEXT#47 ) - CONIO_SCREEN_BANK#39 = phi( screenlayer::@1/CONIO_SCREEN_BANK#41 ) - vera_layer_get_rowshift::return#4 = phi( screenlayer::@1/vera_layer_get_rowshift::return#2 ) - screenlayer::$3 = vera_layer_get_rowshift::return#4 - conio_rowshift = screenlayer::$3 - vera_layer_get_rowskip::layer#0 = conio_screen_layer - call vera_layer_get_rowskip - vera_layer_get_rowskip::return#2 = vera_layer_get_rowskip::return#1 - to:screenlayer::@6 -screenlayer::@6: scope:[screenlayer] from screenlayer::@5 - CONIO_SCREEN_TEXT#39 = phi( screenlayer::@5/CONIO_SCREEN_TEXT#43 ) - CONIO_SCREEN_BANK#36 = phi( screenlayer::@5/CONIO_SCREEN_BANK#39 ) - vera_layer_get_rowskip::return#4 = phi( screenlayer::@5/vera_layer_get_rowskip::return#2 ) - screenlayer::$4 = vera_layer_get_rowskip::return#4 - conio_rowskip = screenlayer::$4 - screenlayer::vera_layer_get_height1_layer#0 = conio_screen_layer - to:screenlayer::vera_layer_get_height1 -screenlayer::vera_layer_get_height1: scope:[screenlayer] from screenlayer::@6 - CONIO_SCREEN_TEXT#35 = phi( screenlayer::@6/CONIO_SCREEN_TEXT#39 ) - CONIO_SCREEN_BANK#32 = phi( screenlayer::@6/CONIO_SCREEN_BANK#36 ) - screenlayer::vera_layer_get_height1_layer#1 = phi( screenlayer::@6/screenlayer::vera_layer_get_height1_layer#0 ) - screenlayer::vera_layer_get_height1_$2 = screenlayer::vera_layer_get_height1_layer#1 * SIZEOF_POINTER - screenlayer::vera_layer_get_height1_config#0 = vera_layer_config[screenlayer::vera_layer_get_height1_$2] - screenlayer::vera_layer_get_height1_$0 = *screenlayer::vera_layer_get_height1_config#0 & VERA_LAYER_HEIGHT_MASK - screenlayer::vera_layer_get_height1_$1 = screenlayer::vera_layer_get_height1_$0 >> 6 - screenlayer::vera_layer_get_height1_$3 = screenlayer::vera_layer_get_height1_$1 * SIZEOF_UNSIGNED_INT - screenlayer::vera_layer_get_height1_return#0 = VERA_LAYER_HEIGHT[screenlayer::vera_layer_get_height1_$3] - to:screenlayer::vera_layer_get_height1_@return -screenlayer::vera_layer_get_height1_@return: scope:[screenlayer] from screenlayer::vera_layer_get_height1 - CONIO_SCREEN_TEXT#28 = phi( screenlayer::vera_layer_get_height1/CONIO_SCREEN_TEXT#35 ) - CONIO_SCREEN_BANK#25 = phi( screenlayer::vera_layer_get_height1/CONIO_SCREEN_BANK#32 ) - screenlayer::vera_layer_get_height1_return#2 = phi( screenlayer::vera_layer_get_height1/screenlayer::vera_layer_get_height1_return#0 ) - screenlayer::vera_layer_get_height1_return#1 = screenlayer::vera_layer_get_height1_return#2 - to:screenlayer::@2 -screenlayer::@2: scope:[screenlayer] from screenlayer::vera_layer_get_height1_@return - CONIO_SCREEN_TEXT#22 = phi( screenlayer::vera_layer_get_height1_@return/CONIO_SCREEN_TEXT#28 ) - CONIO_SCREEN_BANK#18 = phi( screenlayer::vera_layer_get_height1_@return/CONIO_SCREEN_BANK#25 ) - screenlayer::vera_layer_get_height1_return#3 = phi( screenlayer::vera_layer_get_height1_@return/screenlayer::vera_layer_get_height1_return#1 ) - screenlayer::$5 = screenlayer::vera_layer_get_height1_return#3 - conio_height = screenlayer::$5 - to:screenlayer::@return -screenlayer::@return: scope:[screenlayer] from screenlayer::@2 - CONIO_SCREEN_TEXT#13 = phi( screenlayer::@2/CONIO_SCREEN_TEXT#22 ) - CONIO_SCREEN_BANK#11 = phi( screenlayer::@2/CONIO_SCREEN_BANK#18 ) - CONIO_SCREEN_BANK#3 = CONIO_SCREEN_BANK#11 - CONIO_SCREEN_TEXT#3 = CONIO_SCREEN_TEXT#13 - return - to:@return - -void printf_str(void (*putc)(char) , const char *s) -printf_str: scope:[printf_str] from main::@26 main::@27 main::@28 main::@29 main::@30 main::@31 main::@32 main::@33 - printf_str::putc#10 = phi( main::@26/printf_str::putc#0, main::@27/printf_str::putc#1, main::@28/printf_str::putc#2, main::@29/printf_str::putc#3, main::@30/printf_str::putc#4, main::@31/printf_str::putc#5, main::@32/printf_str::putc#6, main::@33/printf_str::putc#7 ) - printf_str::s#10 = phi( main::@26/printf_str::s#1, main::@27/printf_str::s#2, main::@28/printf_str::s#3, main::@29/printf_str::s#4, main::@30/printf_str::s#5, main::@31/printf_str::s#6, main::@32/printf_str::s#7, main::@33/printf_str::s#8 ) - printf_str::c#0 = 0 - to:printf_str::@1 -printf_str::@1: scope:[printf_str] from printf_str printf_str::@2 - printf_str::putc#9 = phi( printf_str/printf_str::putc#10, printf_str::@2/printf_str::putc#8 ) - printf_str::s#9 = phi( printf_str/printf_str::s#10, printf_str::@2/printf_str::s#11 ) - printf_str::c#1 = *printf_str::s#9 - printf_str::$0 = printf_str::c#1 - printf_str::s#0 = ++ printf_str::s#9 - printf_str::$2 = 0 != printf_str::$0 - if(printf_str::$2) goto printf_str::@2 - to:printf_str::@return -printf_str::@2: scope:[printf_str] from printf_str::@1 - printf_str::s#11 = phi( printf_str::@1/printf_str::s#0 ) - printf_str::putc#8 = phi( printf_str::@1/printf_str::putc#9 ) - printf_str::c#2 = phi( printf_str::@1/printf_str::c#1 ) - stackpush(char) = printf_str::c#2 - callexecute *printf_str::putc#8 - sideeffect stackpullpadding(1) - to:printf_str::@1 -printf_str::@return: scope:[printf_str] from printf_str::@1 - return - to:@return - -void main() -main: scope:[main] from __start::@1 - CONIO_SCREEN_BANK#50 = phi( __start::@1/CONIO_SCREEN_BANK#26 ) - CONIO_SCREEN_TEXT#53 = phi( __start::@1/CONIO_SCREEN_TEXT#30 ) - main::textcolor1_color#0 = WHITE - to:main::textcolor1 -main::textcolor1: scope:[main] from main - CONIO_SCREEN_BANK#49 = phi( main/CONIO_SCREEN_BANK#50 ) - CONIO_SCREEN_TEXT#48 = phi( main/CONIO_SCREEN_TEXT#53 ) - main::textcolor1_color#1 = phi( main/main::textcolor1_color#0 ) - vera_layer_set_textcolor::layer#1 = conio_screen_layer - vera_layer_set_textcolor::color#1 = main::textcolor1_color#1 - call vera_layer_set_textcolor - vera_layer_set_textcolor::return#3 = vera_layer_set_textcolor::return#1 - to:main::@17 -main::@17: scope:[main] from main::textcolor1 - CONIO_SCREEN_BANK#48 = phi( main::textcolor1/CONIO_SCREEN_BANK#49 ) - CONIO_SCREEN_TEXT#44 = phi( main::textcolor1/CONIO_SCREEN_TEXT#48 ) - to:main::@14 -main::@14: scope:[main] from main::@17 - CONIO_SCREEN_BANK#46 = phi( main::@17/CONIO_SCREEN_BANK#48 ) - CONIO_SCREEN_TEXT#40 = phi( main::@17/CONIO_SCREEN_TEXT#44 ) - main::bgcolor1_color#0 = BLACK - to:main::bgcolor1 -main::bgcolor1: scope:[main] from main::@14 - CONIO_SCREEN_BANK#44 = phi( main::@14/CONIO_SCREEN_BANK#46 ) - CONIO_SCREEN_TEXT#36 = phi( main::@14/CONIO_SCREEN_TEXT#40 ) - main::bgcolor1_color#1 = phi( main::@14/main::bgcolor1_color#0 ) - vera_layer_set_backcolor::layer#1 = conio_screen_layer - vera_layer_set_backcolor::color#1 = main::bgcolor1_color#1 - call vera_layer_set_backcolor - vera_layer_set_backcolor::return#3 = vera_layer_set_backcolor::return#1 - to:main::@18 -main::@18: scope:[main] from main::bgcolor1 - CONIO_SCREEN_BANK#42 = phi( main::bgcolor1/CONIO_SCREEN_BANK#44 ) - CONIO_SCREEN_TEXT#29 = phi( main::bgcolor1/CONIO_SCREEN_TEXT#36 ) - to:main::@15 -main::@15: scope:[main] from main::@18 - CONIO_SCREEN_BANK#37 = phi( main::@18/CONIO_SCREEN_BANK#42 ) - CONIO_SCREEN_TEXT#16 = phi( main::@18/CONIO_SCREEN_TEXT#29 ) - call clrscr - to:main::@19 -main::@19: scope:[main] from main::@15 - vera_layer_mode_tile::layer#1 = 0 - vera_layer_mode_tile::mapbase_address#2 = $4000 - vera_layer_mode_tile::tilebase_address#2 = $14000 - vera_layer_mode_tile::mapwidth#1 = $80 - vera_layer_mode_tile::mapheight#1 = $80 - vera_layer_mode_tile::tilewidth#1 = 8 - vera_layer_mode_tile::tileheight#1 = 8 - vera_layer_mode_tile::color_depth#1 = 8 - call vera_layer_mode_tile - to:main::@20 -main::@20: scope:[main] from main::@19 - main::tilebase#0 = (char *)$4000 - memcpy_to_vram::vbank#0 = 1 - memcpy_to_vram::vdest#0 = (void *)main::tilebase#0 - memcpy_to_vram::src#0 = (void *)main::tiles - memcpy_to_vram::num#0 = $40 - call memcpy_to_vram - to:main::@21 -main::@21: scope:[main] from main::@20 - main::tilebase#3 = phi( main::@20/main::tilebase#0 ) - main::tilebase#1 = main::tilebase#3 + $40 - main::t#0 = 1 - to:main::@1 -main::@1: scope:[main] from main::@21 main::@22 - main::t#5 = phi( main::@21/main::t#0, main::@22/main::t#1 ) - main::tilebase#7 = phi( main::@21/main::tilebase#1, main::@22/main::tilebase#2 ) - main::p#0 = 0 - to:main::@2 -main::@2: scope:[main] from main::@1 main::@2 - main::t#4 = phi( main::@1/main::t#5, main::@2/main::t#4 ) - main::tilebase#6 = phi( main::@1/main::tilebase#7, main::@2/main::tilebase#6 ) - main::p#2 = phi( main::@1/main::p#0, main::@2/main::p#1 ) - main::tiles[main::p#2] = main::tiles[main::p#2] + 1 - main::p#1 = main::p#2 + rangenext(0,$3f) - main::$16 = main::p#1 != rangelast(0,$3f) - if(main::$16) goto main::@2 - to:main::@3 -main::@3: scope:[main] from main::@2 - main::t#3 = phi( main::@2/main::t#4 ) - main::tilebase#4 = phi( main::@2/main::tilebase#6 ) - memcpy_to_vram::vbank#1 = 1 - memcpy_to_vram::vdest#1 = (void *)main::tilebase#4 - memcpy_to_vram::src#1 = (void *)main::tiles - memcpy_to_vram::num#1 = $40 - call memcpy_to_vram - to:main::@22 -main::@22: scope:[main] from main::@3 - main::t#2 = phi( main::@3/main::t#3 ) - main::tilebase#5 = phi( main::@3/main::tilebase#4 ) - main::tilebase#2 = main::tilebase#5 + $40 - main::t#1 = main::t#2 + rangenext(1,$ff) - main::$18 = main::t#1 != rangelast(1,$ff) - if(main::$18) goto main::@1 - to:main::@4 -main::@4: scope:[main] from main::@22 - vera_tile_area::layer#0 = 0 - vera_tile_area::tileindex#0 = 0 - vera_tile_area::x#0 = 0 - vera_tile_area::y#0 = 0 - vera_tile_area::w#0 = $50 - vera_tile_area::h#0 = $3c - vera_tile_area::hflip#1 = 0 - vera_tile_area::vflip#1 = 0 - vera_tile_area::offset#1 = 0 - call vera_tile_area - to:main::@23 -main::@23: scope:[main] from main::@4 - main::tile#0 = 0 - main::row#0 = 1 - main::r#0 = 0 - to:main::@5 -main::@5: scope:[main] from main::@23 main::@7 - main::r#5 = phi( main::@23/main::r#0, main::@7/main::r#1 ) - main::row#9 = phi( main::@23/main::row#0, main::@7/main::row#1 ) - main::tile#10 = phi( main::@23/main::tile#0, main::@7/main::tile#12 ) - main::column#0 = 1 - main::c#0 = 0 - to:main::@6 -main::@6: scope:[main] from main::@24 main::@5 - main::r#4 = phi( main::@24/main::r#3, main::@5/main::r#5 ) - main::c#3 = phi( main::@24/main::c#1, main::@5/main::c#0 ) - main::row#4 = phi( main::@24/main::row#8, main::@5/main::row#9 ) - main::column#2 = phi( main::@24/main::column#1, main::@5/main::column#0 ) - main::tile#6 = phi( main::@24/main::tile#2, main::@5/main::tile#10 ) - vera_tile_area::layer#1 = 0 - vera_tile_area::tileindex#1 = main::tile#6 - vera_tile_area::x#1 = main::column#2 - vera_tile_area::y#1 = main::row#4 - vera_tile_area::w#1 = 1 - vera_tile_area::h#1 = 1 - vera_tile_area::hflip#2 = 0 - vera_tile_area::vflip#2 = 0 - vera_tile_area::offset#2 = 0 - call vera_tile_area - to:main::@24 -main::@24: scope:[main] from main::@6 - main::r#3 = phi( main::@6/main::r#4 ) - main::row#8 = phi( main::@6/main::row#4 ) - main::c#2 = phi( main::@6/main::c#3 ) - main::tile#7 = phi( main::@6/main::tile#6 ) - main::column#3 = phi( main::@6/main::column#2 ) - main::column#1 = main::column#3 + 2 - main::tile#1 = ++ main::tile#7 - main::tile#2 = main::tile#1 & $ff - main::c#1 = main::c#2 + rangenext(0,$1f) - main::$20 = main::c#1 != rangelast(0,$1f) - if(main::$20) goto main::@6 - to:main::@7 -main::@7: scope:[main] from main::@24 - main::tile#12 = phi( main::@24/main::tile#2 ) - main::r#2 = phi( main::@24/main::r#3 ) - main::row#5 = phi( main::@24/main::row#8 ) - main::row#1 = main::row#5 + 2 - main::r#1 = main::r#2 + rangenext(0,7) - main::$21 = main::r#1 != rangelast(0,7) - if(main::$21) goto main::@5 - to:main::@8 -main::@8: scope:[main] from main::@7 - main::tile#3 = 0 - main::row#2 = $14 - main::r1#0 = 0 - to:main::@9 -main::@9: scope:[main] from main::@11 main::@8 - main::r1#5 = phi( main::@11/main::r1#1, main::@8/main::r1#0 ) - main::row#11 = phi( main::@11/main::row#3, main::@8/main::row#2 ) - main::tile#11 = phi( main::@11/main::tile#13, main::@8/main::tile#3 ) - main::column1#0 = 1 - main::c1#0 = 0 - to:main::@10 -main::@10: scope:[main] from main::@25 main::@9 - main::r1#4 = phi( main::@25/main::r1#3, main::@9/main::r1#5 ) - main::c1#3 = phi( main::@25/main::c1#1, main::@9/main::c1#0 ) - main::row#6 = phi( main::@25/main::row#10, main::@9/main::row#11 ) - main::column1#2 = phi( main::@25/main::column1#1, main::@9/main::column1#0 ) - main::tile#8 = phi( main::@25/main::tile#5, main::@9/main::tile#11 ) - vera_tile_area::layer#2 = 0 - vera_tile_area::tileindex#2 = main::tile#8 - vera_tile_area::x#2 = main::column1#2 - vera_tile_area::y#2 = main::row#6 - vera_tile_area::w#2 = 2 - vera_tile_area::h#2 = 2 - vera_tile_area::hflip#3 = 0 - vera_tile_area::vflip#3 = 0 - vera_tile_area::offset#3 = 0 - call vera_tile_area - to:main::@25 -main::@25: scope:[main] from main::@10 - main::r1#3 = phi( main::@10/main::r1#4 ) - main::row#10 = phi( main::@10/main::row#6 ) - main::c1#2 = phi( main::@10/main::c1#3 ) - main::tile#9 = phi( main::@10/main::tile#8 ) - main::column1#3 = phi( main::@10/main::column1#2 ) - main::column1#1 = main::column1#3 + 2 - main::tile#4 = ++ main::tile#9 - main::tile#5 = main::tile#4 & $ff - main::c1#1 = main::c1#2 + rangenext(0,$1f) - main::$23 = main::c1#1 != rangelast(0,$1f) - if(main::$23) goto main::@10 - to:main::@11 -main::@11: scope:[main] from main::@25 - main::tile#13 = phi( main::@25/main::tile#5 ) - main::r1#2 = phi( main::@25/main::r1#3 ) - main::row#7 = phi( main::@25/main::row#10 ) - main::row#3 = main::row#7 + 2 - main::r1#1 = main::r1#2 + rangenext(0,7) - main::$24 = main::r1#1 != rangelast(0,7) - if(main::$24) goto main::@9 - to:main::@12 -main::@12: scope:[main] from main::@11 - main::vera_layer_show1_layer#0 = 0 - to:main::vera_layer_show1 -main::vera_layer_show1: scope:[main] from main::@12 - main::vera_layer_show1_layer#1 = phi( main::@12/main::vera_layer_show1_layer#0 ) - *VERA_DC_VIDEO = *VERA_DC_VIDEO | vera_layer_enable[main::vera_layer_show1_layer#1] - to:main::@16 -main::@16: scope:[main] from main::vera_layer_show1 - gotoxy::x#3 = 0 - gotoxy::y#3 = $32 - call gotoxy - to:main::@26 -main::@26: scope:[main] from main::@16 - printf_str::putc#0 = &cputc - printf_str::s#1 = main::s - call printf_str - to:main::@27 -main::@27: scope:[main] from main::@26 - printf_str::putc#1 = &cputc - printf_str::s#2 = main::s1 - call printf_str - to:main::@28 -main::@28: scope:[main] from main::@27 - printf_str::putc#2 = &cputc - printf_str::s#3 = main::s2 - call printf_str - to:main::@29 -main::@29: scope:[main] from main::@28 - printf_str::putc#3 = &cputc - printf_str::s#4 = main::s3 - call printf_str - to:main::@30 -main::@30: scope:[main] from main::@29 - printf_str::putc#4 = &cputc - printf_str::s#5 = main::s4 - call printf_str - to:main::@31 -main::@31: scope:[main] from main::@30 - printf_str::putc#5 = &cputc - printf_str::s#6 = main::s5 - call printf_str - to:main::@32 -main::@32: scope:[main] from main::@31 - printf_str::putc#6 = &cputc - printf_str::s#7 = main::s6 - call printf_str - to:main::@33 -main::@33: scope:[main] from main::@32 - printf_str::putc#7 = &cputc - printf_str::s#8 = main::s7 - call printf_str - to:main::@34 -main::@34: scope:[main] from main::@33 - to:main::@13 -main::@13: scope:[main] from main::@34 main::@35 - call kbhit - kbhit::return#2 = kbhit::return#1 - to:main::@35 -main::@35: scope:[main] from main::@13 - kbhit::return#4 = phi( main::@13/kbhit::return#2 ) - main::$25 = kbhit::return#4 - main::$27 = 0 != main::$25 - main::$26 = ! main::$27 - if(main::$26) goto main::@13 - to:main::@return -main::@return: scope:[main] from main::@35 - return - to:@return - -void __start() -__start: scope:[__start] from - to:__start::__init1 -__start::__init1: scope:[__start] from __start - CONIO_SCREEN_TEXT#4 = DEFAULT_SCREEN - CONIO_SCREEN_BANK#4 = 0 - conio_screen_width = 0 - conio_screen_height = 0 - conio_screen_layer = 1 - conio_width = 0 - conio_height = 0 - conio_rowshift = 0 - conio_rowskip = 0 - call conio_x16_init - to:__start::@2 -__start::@2: scope:[__start] from __start::__init1 - CONIO_SCREEN_TEXT#14 = phi( __start::__init1/CONIO_SCREEN_TEXT#1 ) - CONIO_SCREEN_BANK#12 = phi( __start::__init1/CONIO_SCREEN_BANK#1 ) - CONIO_SCREEN_BANK#5 = CONIO_SCREEN_BANK#12 - CONIO_SCREEN_TEXT#5 = CONIO_SCREEN_TEXT#14 - to:__start::@1 -__start::@1: scope:[__start] from __start::@2 - CONIO_SCREEN_BANK#26 = phi( __start::@2/CONIO_SCREEN_BANK#5 ) - CONIO_SCREEN_TEXT#30 = phi( __start::@2/CONIO_SCREEN_TEXT#5 ) - call main - to:__start::@3 -__start::@3: scope:[__start] from __start::@1 - CONIO_SCREEN_BANK#19 = phi( __start::@1/CONIO_SCREEN_BANK#26 ) - CONIO_SCREEN_TEXT#23 = phi( __start::@1/CONIO_SCREEN_TEXT#30 ) - to:__start::@return -__start::@return: scope:[__start] from __start::@3 - CONIO_SCREEN_BANK#13 = phi( __start::@3/CONIO_SCREEN_BANK#19 ) - CONIO_SCREEN_TEXT#15 = phi( __start::@3/CONIO_SCREEN_TEXT#23 ) - CONIO_SCREEN_TEXT#6 = CONIO_SCREEN_TEXT#15 - CONIO_SCREEN_BANK#6 = CONIO_SCREEN_BANK#13 - return - to:@return - -SYMBOL TABLE SSA -__constant const char BLACK = 0 -__constant const char BLUE = 6 -char CONIO_SCREEN_BANK -char CONIO_SCREEN_BANK#0 -char CONIO_SCREEN_BANK#1 -char CONIO_SCREEN_BANK#10 -char CONIO_SCREEN_BANK#11 -char CONIO_SCREEN_BANK#12 -char CONIO_SCREEN_BANK#13 -char CONIO_SCREEN_BANK#14 -char CONIO_SCREEN_BANK#15 -char CONIO_SCREEN_BANK#16 -char CONIO_SCREEN_BANK#17 -char CONIO_SCREEN_BANK#18 -char CONIO_SCREEN_BANK#19 -char CONIO_SCREEN_BANK#2 -char CONIO_SCREEN_BANK#20 -char CONIO_SCREEN_BANK#21 -char CONIO_SCREEN_BANK#22 -char CONIO_SCREEN_BANK#23 -char CONIO_SCREEN_BANK#24 -char CONIO_SCREEN_BANK#25 -char CONIO_SCREEN_BANK#26 -char CONIO_SCREEN_BANK#27 -char CONIO_SCREEN_BANK#28 -char CONIO_SCREEN_BANK#29 -char CONIO_SCREEN_BANK#3 -char CONIO_SCREEN_BANK#30 -char CONIO_SCREEN_BANK#31 -char CONIO_SCREEN_BANK#32 -char CONIO_SCREEN_BANK#33 -char CONIO_SCREEN_BANK#34 -char CONIO_SCREEN_BANK#35 -char CONIO_SCREEN_BANK#36 -char CONIO_SCREEN_BANK#37 -char CONIO_SCREEN_BANK#38 -char CONIO_SCREEN_BANK#39 -char CONIO_SCREEN_BANK#4 -char CONIO_SCREEN_BANK#40 -char CONIO_SCREEN_BANK#41 -char CONIO_SCREEN_BANK#42 -char CONIO_SCREEN_BANK#43 -char CONIO_SCREEN_BANK#44 -char CONIO_SCREEN_BANK#45 -char CONIO_SCREEN_BANK#46 -char CONIO_SCREEN_BANK#47 -char CONIO_SCREEN_BANK#48 -char CONIO_SCREEN_BANK#49 -char CONIO_SCREEN_BANK#5 -char CONIO_SCREEN_BANK#50 -char CONIO_SCREEN_BANK#6 -char CONIO_SCREEN_BANK#7 -char CONIO_SCREEN_BANK#8 -char CONIO_SCREEN_BANK#9 -char *CONIO_SCREEN_TEXT -char *CONIO_SCREEN_TEXT#0 -char *CONIO_SCREEN_TEXT#1 -char *CONIO_SCREEN_TEXT#10 -char *CONIO_SCREEN_TEXT#11 -char *CONIO_SCREEN_TEXT#12 -char *CONIO_SCREEN_TEXT#13 -char *CONIO_SCREEN_TEXT#14 -char *CONIO_SCREEN_TEXT#15 -char *CONIO_SCREEN_TEXT#16 -char *CONIO_SCREEN_TEXT#17 -char *CONIO_SCREEN_TEXT#18 -char *CONIO_SCREEN_TEXT#19 -char *CONIO_SCREEN_TEXT#2 -char *CONIO_SCREEN_TEXT#20 -char *CONIO_SCREEN_TEXT#21 -char *CONIO_SCREEN_TEXT#22 -char *CONIO_SCREEN_TEXT#23 -char *CONIO_SCREEN_TEXT#24 -char *CONIO_SCREEN_TEXT#25 -char *CONIO_SCREEN_TEXT#26 -char *CONIO_SCREEN_TEXT#27 -char *CONIO_SCREEN_TEXT#28 -char *CONIO_SCREEN_TEXT#29 -char *CONIO_SCREEN_TEXT#3 -char *CONIO_SCREEN_TEXT#30 -char *CONIO_SCREEN_TEXT#31 -char *CONIO_SCREEN_TEXT#32 -char *CONIO_SCREEN_TEXT#33 -char *CONIO_SCREEN_TEXT#34 -char *CONIO_SCREEN_TEXT#35 -char *CONIO_SCREEN_TEXT#36 -char *CONIO_SCREEN_TEXT#37 -char *CONIO_SCREEN_TEXT#38 -char *CONIO_SCREEN_TEXT#39 -char *CONIO_SCREEN_TEXT#4 -char *CONIO_SCREEN_TEXT#40 -char *CONIO_SCREEN_TEXT#41 -char *CONIO_SCREEN_TEXT#42 -char *CONIO_SCREEN_TEXT#43 -char *CONIO_SCREEN_TEXT#44 -char *CONIO_SCREEN_TEXT#45 -char *CONIO_SCREEN_TEXT#46 -char *CONIO_SCREEN_TEXT#47 -char *CONIO_SCREEN_TEXT#48 -char *CONIO_SCREEN_TEXT#49 -char *CONIO_SCREEN_TEXT#5 -char *CONIO_SCREEN_TEXT#50 -char *CONIO_SCREEN_TEXT#51 -char *CONIO_SCREEN_TEXT#52 -char *CONIO_SCREEN_TEXT#53 -char *CONIO_SCREEN_TEXT#54 -char *CONIO_SCREEN_TEXT#55 -char *CONIO_SCREEN_TEXT#56 -char *CONIO_SCREEN_TEXT#57 -char *CONIO_SCREEN_TEXT#6 -char *CONIO_SCREEN_TEXT#7 -char *CONIO_SCREEN_TEXT#8 -char *CONIO_SCREEN_TEXT#9 -__constant char * const DEFAULT_SCREEN = (char *)0 -__constant char RADIX::BINARY = 2 -__constant char RADIX::DECIMAL = $a -__constant char RADIX::HEXADECIMAL = $10 -__constant char RADIX::OCTAL = 8 -__constant char SIZEOF_POINTER = 2 -__constant char SIZEOF_UNSIGNED_INT = 2 -__constant char SIZEOF_UNSIGNED_LONG = 4 -__constant unsigned int STACK_BASE = $103 -__constant const char VERA_ADDRSEL = 1 -__constant char * const VERA_ADDRX_H = (char *)$9f22 -__constant char * const VERA_ADDRX_L = (char *)$9f20 -__constant char * const VERA_ADDRX_M = (char *)$9f21 -__constant char * const VERA_CTRL = (char *)$9f25 -__constant char * const VERA_DATA0 = (char *)$9f23 -__constant char * const VERA_DATA1 = (char *)$9f24 -__constant char * const VERA_DC_HSCALE = (char *)$9f2a -__constant char * const VERA_DC_VIDEO = (char *)$9f29 -__constant char * const VERA_DC_VSCALE = (char *)$9f2b -__constant const char VERA_INC_1 = $10 -__constant char * const VERA_L0_CONFIG = (char *)$9f2d -__constant char * const VERA_L0_MAPBASE = (char *)$9f2e -__constant char * const VERA_L0_TILEBASE = (char *)$9f2f -__constant char * const VERA_L1_CONFIG = (char *)$9f34 -__constant char * const VERA_L1_MAPBASE = (char *)$9f35 -__constant char * const VERA_L1_TILEBASE = (char *)$9f36 -__constant const char VERA_LAYER0_ENABLE = $10 -__constant const char VERA_LAYER1_ENABLE = $20 -__constant const char VERA_LAYER_COLOR_DEPTH_1BPP = 0 -__constant const char VERA_LAYER_COLOR_DEPTH_2BPP = 1 -__constant const char VERA_LAYER_COLOR_DEPTH_4BPP = 2 -__constant const char VERA_LAYER_COLOR_DEPTH_8BPP = 3 -__constant const char VERA_LAYER_CONFIG_16C = 0 -__constant const char VERA_LAYER_CONFIG_256C = 8 -__constant const unsigned int VERA_LAYER_HEIGHT[4] = { $20, $40, $80, $100 } -__constant const char VERA_LAYER_HEIGHT_128 = $80 -__constant const char VERA_LAYER_HEIGHT_256 = $c0 -__constant const char VERA_LAYER_HEIGHT_32 = 0 -__constant const char VERA_LAYER_HEIGHT_64 = $40 -__constant const char VERA_LAYER_HEIGHT_MASK = $c0 -__constant const char VERA_LAYER_TILEBASE_MASK = $fc -__constant const unsigned int VERA_LAYER_WIDTH[4] = { $20, $40, $80, $100 } -__constant const char VERA_LAYER_WIDTH_128 = $20 -__constant const char VERA_LAYER_WIDTH_256 = $30 -__constant const char VERA_LAYER_WIDTH_32 = 0 -__constant const char VERA_LAYER_WIDTH_64 = $10 -__constant const char VERA_LAYER_WIDTH_MASK = $30 -__constant const char VERA_TILEBASE_HEIGHT_16 = 2 -__constant const char VERA_TILEBASE_HEIGHT_8 = 0 -__constant const char VERA_TILEBASE_WIDTH_16 = 1 -__constant const char VERA_TILEBASE_WIDTH_8 = 0 -__constant const char WHITE = 1 -void __start() -void clearline() -char clearline::$1 -char clearline::$2 -bool clearline::$4 -char clearline::$5 -char *clearline::addr -char *clearline::addr#0 -unsigned int clearline::c -unsigned int clearline::c#0 -unsigned int clearline::c#1 -unsigned int clearline::c#2 -unsigned int clearline::c#3 -char clearline::color -char clearline::color#0 -char clearline::color#1 -char clearline::color#2 -void clrscr() -char clrscr::$0 -char clrscr::$1 -char clrscr::$2 -bool clrscr::$4 -char clrscr::$5 -char clrscr::$6 -char clrscr::$7 -bool clrscr::$8 -char clrscr::$9 -char clrscr::c -char clrscr::c#0 -char clrscr::c#1 -char clrscr::c#2 -char clrscr::c#3 -char *clrscr::ch -char *clrscr::ch#0 -char clrscr::color -char clrscr::color#0 -char clrscr::color#1 -char clrscr::color#2 -char clrscr::color#3 -char clrscr::color#4 -char clrscr::color#5 -char clrscr::l -char clrscr::l#0 -char clrscr::l#1 -char clrscr::l#2 -char clrscr::l#3 -char clrscr::l#4 -char clrscr::l#5 -char clrscr::l#6 -char *clrscr::line_text -char *clrscr::line_text#0 -char *clrscr::line_text#1 -char *clrscr::line_text#2 -char *clrscr::line_text#3 -char *clrscr::line_text#4 -char *clrscr::line_text#5 -char *clrscr::line_text#6 -char *clrscr::line_text#7 -char *clrscr::line_text#8 -__constant char conio_cursor_x[2] = { 0, 0 } -__constant char conio_cursor_y[2] = { 0, 0 } -__loadstore unsigned int conio_height -__constant unsigned int conio_line_text[2] = { 0, 0 } -__loadstore char conio_rowshift -__loadstore unsigned int conio_rowskip -__loadstore volatile char conio_screen_height -__loadstore char conio_screen_layer -__loadstore volatile char conio_screen_width -__constant char conio_scroll_enable[2] = { 1, 1 } -__loadstore unsigned int conio_width -void conio_x16_init() -bool conio_x16_init::$7 -bool conio_x16_init::$8 -number conio_x16_init::$9 -__constant char * const conio_x16_init::BASIC_CURSOR_LINE = (char *)$d6 -char conio_x16_init::line -char conio_x16_init::line#0 -char conio_x16_init::line#1 -char conio_x16_init::line#2 -char conio_x16_init::line#3 -char conio_x16_init::line#4 -char conio_x16_init::line#5 -char conio_x16_init::line#6 -char conio_x16_init::line#7 -char conio_x16_init::line#8 -char conio_x16_init::line#9 -__stackcall void cputc(char c) -bool cputc::$11 -bool cputc::$12 -char cputc::$15 -unsigned int cputc::$16 -bool cputc::$17 -char cputc::$2 -bool cputc::$3 -char cputc::$4 -char cputc::$5 -char cputc::$6 -bool cputc::$8 -bool cputc::$9 -__constant char cputc::OFFSET_STACK_C = 0 -char cputc::c -char cputc::c#0 -char cputc::c#1 -char cputc::c#2 -char cputc::color -char cputc::color#0 -char cputc::color#1 -char *cputc::conio_addr -char *cputc::conio_addr#0 -char *cputc::conio_addr#1 -char *cputc::conio_addr#2 -char cputc::scroll_enable -char cputc::scroll_enable#0 -void cputln() -char cputln::$2 -char cputln::$3 -unsigned int cputln::temp -unsigned int cputln::temp#0 -unsigned int cputln::temp#1 -void cscroll() -bool cscroll::$0 -bool cscroll::$1 -bool cscroll::$2 -bool cscroll::$3 -number cscroll::$5 -bool cscroll::$7 -void gotoxy(char x , char y) -bool gotoxy::$0 -bool gotoxy::$1 -bool gotoxy::$2 -bool gotoxy::$3 -char gotoxy::$5 -unsigned int gotoxy::$6 -unsigned int gotoxy::line_offset -unsigned int gotoxy::line_offset#0 -char gotoxy::x -char gotoxy::x#0 -char gotoxy::x#1 -char gotoxy::x#2 -char gotoxy::x#3 -char gotoxy::x#4 -char gotoxy::x#5 -char gotoxy::x#6 -char gotoxy::x#7 -char gotoxy::y -char gotoxy::y#0 -char gotoxy::y#1 -char gotoxy::y#2 -char gotoxy::y#3 -char gotoxy::y#4 -char gotoxy::y#5 -char gotoxy::y#6 -char gotoxy::y#7 -void insertup() -bool insertup::$2 -number insertup::$3 -char *insertup::$6 -char insertup::cy -char insertup::cy#0 -char insertup::cy#1 -char insertup::cy#2 -char insertup::cy#3 -char insertup::i -char insertup::i#0 -char insertup::i#1 -char insertup::i#2 -char insertup::i#3 -char insertup::i#4 -unsigned int insertup::line -unsigned int insertup::line#0 -char *insertup::start -char *insertup::start#0 -char insertup::width -char insertup::width#0 -char insertup::width#1 -char insertup::width#2 -char insertup::width#3 -char kbhit() -__constant char * const kbhit::GETIN = (char *)$ffe4 -__constant char * const kbhit::IN_DEV = (char *)$28a -__loadstore volatile char kbhit::ch -__constant char * const kbhit::chptr = &kbhit::ch -char kbhit::return -char kbhit::return#0 -char kbhit::return#1 -char kbhit::return#2 -char kbhit::return#3 -char kbhit::return#4 -void main() -bool main::$16 -bool main::$18 -bool main::$20 -bool main::$21 -bool main::$23 -bool main::$24 -char main::$25 -bool main::$26 -bool main::$27 -char main::bgcolor1_color -char main::bgcolor1_color#0 -char main::bgcolor1_color#1 -char main::c -char main::c#0 -char main::c#1 -char main::c#2 -char main::c#3 -char main::c1 -char main::c1#0 -char main::c1#1 -char main::c1#2 -char main::c1#3 -char main::column -char main::column#0 -char main::column#1 -char main::column#2 -char main::column#3 -char main::column1 -char main::column1#0 -char main::column1#1 -char main::column1#2 -char main::column1#3 -char main::p -char main::p#0 -char main::p#1 -char main::p#2 -char main::r -char main::r#0 -char main::r#1 -char main::r#2 -char main::r#3 -char main::r#4 -char main::r#5 -char main::r1 -char main::r1#0 -char main::r1#1 -char main::r1#2 -char main::r1#3 -char main::r1#4 -char main::r1#5 -char main::row -char main::row#0 -char main::row#1 -char main::row#10 -char main::row#11 -char main::row#2 -char main::row#3 -char main::row#4 -char main::row#5 -char main::row#6 -char main::row#7 -char main::row#8 -char main::row#9 -__constant char main::s[$38] = "vera in tile mode 8 x 8, color depth 8 bits per pixel. -" -__constant char main::s1[$3a] = "in this mode, tiles are 8 pixels wide and 8 pixels tall. -" -__constant char main::s2[$2f] = "each tile can have a variation of 256 colors. -" -__constant char main::s3[$44] = "the vera palette of 256 colors, can be used by setting the palette -" -__constant char main::s4[$17] = "offset for each tile. -" -__constant char main::s5[$4b] = "here each column is displaying the same tile, but with different offsets! -" -__constant char main::s6[$3f] = "each offset aligns to multiples of 16 colors in the palette!. -" -__constant char main::s7[$3e] = "however, the first color will always be transparent (black). -" -char main::t -char main::t#0 -char main::t#1 -char main::t#2 -char main::t#3 -char main::t#4 -char main::t#5 -char main::textcolor1_color -char main::textcolor1_color#0 -char main::textcolor1_color#1 -unsigned int main::tile -unsigned int main::tile#0 -unsigned int main::tile#1 -unsigned int main::tile#10 -unsigned int main::tile#11 -unsigned int main::tile#12 -unsigned int main::tile#13 -unsigned int main::tile#2 -unsigned int main::tile#3 -unsigned int main::tile#4 -unsigned int main::tile#5 -unsigned int main::tile#6 -unsigned int main::tile#7 -unsigned int main::tile#8 -unsigned int main::tile#9 -char *main::tilebase -char *main::tilebase#0 -char *main::tilebase#1 -char *main::tilebase#2 -char *main::tilebase#3 -char *main::tilebase#4 -char *main::tilebase#5 -char *main::tilebase#6 -char *main::tilebase#7 -__constant char main::tiles[$40] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -char main::vera_layer_show1_layer -char main::vera_layer_show1_layer#0 -char main::vera_layer_show1_layer#1 -void memcpy_in_vram(char dest_bank , void *dest , char dest_increment , char src_bank , void *src , char src_increment , unsigned int num) -char memcpy_in_vram::$0 -char memcpy_in_vram::$1 -char memcpy_in_vram::$2 -char memcpy_in_vram::$3 -char memcpy_in_vram::$4 -char memcpy_in_vram::$5 -bool memcpy_in_vram::$6 -void *memcpy_in_vram::dest -void *memcpy_in_vram::dest#0 -void *memcpy_in_vram::dest#1 -char memcpy_in_vram::dest_bank -char memcpy_in_vram::dest_bank#0 -char memcpy_in_vram::dest_bank#1 -char memcpy_in_vram::dest_increment -char memcpy_in_vram::dest_increment#0 -char memcpy_in_vram::dest_increment#1 -unsigned int memcpy_in_vram::i -unsigned int memcpy_in_vram::i#0 -unsigned int memcpy_in_vram::i#1 -unsigned int memcpy_in_vram::i#2 -unsigned int memcpy_in_vram::i#3 -unsigned int memcpy_in_vram::num -unsigned int memcpy_in_vram::num#0 -unsigned int memcpy_in_vram::num#1 -unsigned int memcpy_in_vram::num#2 -unsigned int memcpy_in_vram::num#3 -void *memcpy_in_vram::src -void *memcpy_in_vram::src#0 -void *memcpy_in_vram::src#1 -char memcpy_in_vram::src_bank -char memcpy_in_vram::src_bank#0 -char memcpy_in_vram::src_bank#1 -char memcpy_in_vram::src_increment -char memcpy_in_vram::src_increment#0 -char memcpy_in_vram::src_increment#1 -void memcpy_to_vram(char vbank , void *vdest , void *src , unsigned int num) -char memcpy_to_vram::$0 -char memcpy_to_vram::$1 -char memcpy_to_vram::$2 -bool memcpy_to_vram::$4 -char *memcpy_to_vram::$5 -char *memcpy_to_vram::end -char *memcpy_to_vram::end#0 -char *memcpy_to_vram::end#1 -char *memcpy_to_vram::end#2 -unsigned int memcpy_to_vram::num -unsigned int memcpy_to_vram::num#0 -unsigned int memcpy_to_vram::num#1 -unsigned int memcpy_to_vram::num#2 -char *memcpy_to_vram::s -char *memcpy_to_vram::s#0 -char *memcpy_to_vram::s#1 -char *memcpy_to_vram::s#2 -char *memcpy_to_vram::s#3 -void *memcpy_to_vram::src -void *memcpy_to_vram::src#0 -void *memcpy_to_vram::src#1 -void *memcpy_to_vram::src#2 -char memcpy_to_vram::vbank -char memcpy_to_vram::vbank#0 -char memcpy_to_vram::vbank#1 -char memcpy_to_vram::vbank#2 -void *memcpy_to_vram::vdest -void *memcpy_to_vram::vdest#0 -void *memcpy_to_vram::vdest#1 -void *memcpy_to_vram::vdest#2 -void printf_str(void (*putc)(char) , const char *s) -char printf_str::$0 -bool printf_str::$2 -char printf_str::c -char printf_str::c#0 -char printf_str::c#1 -char printf_str::c#2 -void (*printf_str::putc)(char) -void (*printf_str::putc#0)(char) -void (*printf_str::putc#1)(char) -void (*printf_str::putc#10)(char) -void (*printf_str::putc#2)(char) -void (*printf_str::putc#3)(char) -void (*printf_str::putc#4)(char) -void (*printf_str::putc#5)(char) -void (*printf_str::putc#6)(char) -void (*printf_str::putc#7)(char) -void (*printf_str::putc#8)(char) -void (*printf_str::putc#9)(char) -const char *printf_str::s -const char *printf_str::s#0 -const char *printf_str::s#1 -const char *printf_str::s#10 -const char *printf_str::s#11 -const char *printf_str::s#2 -const char *printf_str::s#3 -const char *printf_str::s#4 -const char *printf_str::s#5 -const char *printf_str::s#6 -const char *printf_str::s#7 -const char *printf_str::s#8 -const char *printf_str::s#9 -void screenlayer(char layer) -char screenlayer::$0 -unsigned int screenlayer::$1 -unsigned int screenlayer::$2 -char screenlayer::$3 -unsigned int screenlayer::$4 -unsigned int screenlayer::$5 -char screenlayer::layer -char screenlayer::layer#0 -char screenlayer::layer#1 -char screenlayer::vera_layer_get_height1_$0 -char screenlayer::vera_layer_get_height1_$1 -char screenlayer::vera_layer_get_height1_$2 -char screenlayer::vera_layer_get_height1_$3 -char *screenlayer::vera_layer_get_height1_config -char *screenlayer::vera_layer_get_height1_config#0 -char screenlayer::vera_layer_get_height1_layer -char screenlayer::vera_layer_get_height1_layer#0 -char screenlayer::vera_layer_get_height1_layer#1 -unsigned int screenlayer::vera_layer_get_height1_return -unsigned int screenlayer::vera_layer_get_height1_return#0 -unsigned int screenlayer::vera_layer_get_height1_return#1 -unsigned int screenlayer::vera_layer_get_height1_return#2 -unsigned int screenlayer::vera_layer_get_height1_return#3 -char screenlayer::vera_layer_get_width1_$0 -char screenlayer::vera_layer_get_width1_$1 -char screenlayer::vera_layer_get_width1_$2 -char screenlayer::vera_layer_get_width1_$3 -char *screenlayer::vera_layer_get_width1_config -char *screenlayer::vera_layer_get_width1_config#0 -char screenlayer::vera_layer_get_width1_layer -char screenlayer::vera_layer_get_width1_layer#0 -char screenlayer::vera_layer_get_width1_layer#1 -unsigned int screenlayer::vera_layer_get_width1_return -unsigned int screenlayer::vera_layer_get_width1_return#0 -unsigned int screenlayer::vera_layer_get_width1_return#1 -unsigned int screenlayer::vera_layer_get_width1_return#2 -unsigned int screenlayer::vera_layer_get_width1_return#3 -void screensize(char *x , char *y) -number screensize::$1 -number screensize::$3 -char screensize::hscale -char screensize::hscale#0 -char screensize::vscale -char screensize::vscale#0 -char *screensize::x -char *screensize::x#0 -char *screensize::x#1 -char *screensize::y -char *screensize::y#0 -char *screensize::y#1 -__constant char vera_layer_backcolor[2] = { BLUE, BLUE } -__constant char *vera_layer_config[2] = { VERA_L0_CONFIG, VERA_L1_CONFIG } -__constant char vera_layer_enable[2] = { VERA_LAYER0_ENABLE, VERA_LAYER1_ENABLE } -char vera_layer_get_backcolor(char layer) -char vera_layer_get_backcolor::layer -char vera_layer_get_backcolor::layer#0 -char vera_layer_get_backcolor::layer#1 -char vera_layer_get_backcolor::return -char vera_layer_get_backcolor::return#0 -char vera_layer_get_backcolor::return#1 -char vera_layer_get_backcolor::return#2 -char vera_layer_get_backcolor::return#3 -char vera_layer_get_backcolor::return#4 -char vera_layer_get_color(char layer) -char vera_layer_get_color::$0 -char vera_layer_get_color::$1 -char vera_layer_get_color::$2 -char vera_layer_get_color::$3 -bool vera_layer_get_color::$4 -char *vera_layer_get_color::addr -char *vera_layer_get_color::addr#0 -char vera_layer_get_color::layer -char vera_layer_get_color::layer#0 -char vera_layer_get_color::layer#1 -char vera_layer_get_color::layer#2 -char vera_layer_get_color::layer#3 -char vera_layer_get_color::layer#4 -char vera_layer_get_color::return -char vera_layer_get_color::return#0 -char vera_layer_get_color::return#1 -char vera_layer_get_color::return#2 -char vera_layer_get_color::return#3 -char vera_layer_get_color::return#4 -char vera_layer_get_color::return#5 -char vera_layer_get_color::return#6 -char vera_layer_get_color::return#7 -char vera_layer_get_mapbase_bank(char layer) -char vera_layer_get_mapbase_bank::layer -char vera_layer_get_mapbase_bank::layer#0 -char vera_layer_get_mapbase_bank::layer#1 -char vera_layer_get_mapbase_bank::return -char vera_layer_get_mapbase_bank::return#0 -char vera_layer_get_mapbase_bank::return#1 -char vera_layer_get_mapbase_bank::return#2 -char vera_layer_get_mapbase_bank::return#3 -char vera_layer_get_mapbase_bank::return#4 -unsigned int vera_layer_get_mapbase_offset(char layer) -char vera_layer_get_mapbase_offset::$0 -char vera_layer_get_mapbase_offset::layer -char vera_layer_get_mapbase_offset::layer#0 -char vera_layer_get_mapbase_offset::layer#1 -unsigned int vera_layer_get_mapbase_offset::return -unsigned int vera_layer_get_mapbase_offset::return#0 -unsigned int vera_layer_get_mapbase_offset::return#1 -unsigned int vera_layer_get_mapbase_offset::return#2 -unsigned int vera_layer_get_mapbase_offset::return#3 -unsigned int vera_layer_get_mapbase_offset::return#4 -char vera_layer_get_rowshift(char layer) -char vera_layer_get_rowshift::layer -char vera_layer_get_rowshift::layer#0 -char vera_layer_get_rowshift::layer#1 -char vera_layer_get_rowshift::return -char vera_layer_get_rowshift::return#0 -char vera_layer_get_rowshift::return#1 -char vera_layer_get_rowshift::return#2 -char vera_layer_get_rowshift::return#3 -char vera_layer_get_rowshift::return#4 -unsigned int vera_layer_get_rowskip(char layer) -char vera_layer_get_rowskip::$0 -char vera_layer_get_rowskip::layer -char vera_layer_get_rowskip::layer#0 -char vera_layer_get_rowskip::layer#1 -unsigned int vera_layer_get_rowskip::return -unsigned int vera_layer_get_rowskip::return#0 -unsigned int vera_layer_get_rowskip::return#1 -unsigned int vera_layer_get_rowskip::return#2 -unsigned int vera_layer_get_rowskip::return#3 -unsigned int vera_layer_get_rowskip::return#4 -char vera_layer_get_textcolor(char layer) -char vera_layer_get_textcolor::layer -char vera_layer_get_textcolor::layer#0 -char vera_layer_get_textcolor::layer#1 -char vera_layer_get_textcolor::return -char vera_layer_get_textcolor::return#0 -char vera_layer_get_textcolor::return#1 -char vera_layer_get_textcolor::return#2 -char vera_layer_get_textcolor::return#3 -char vera_layer_get_textcolor::return#4 -__constant const char vera_layer_hflip[2] = { 0, 4 } -__constant char *vera_layer_mapbase[2] = { VERA_L0_MAPBASE, VERA_L1_MAPBASE } -void vera_layer_mode_text(char layer , unsigned long mapbase_address , unsigned long tilebase_address , unsigned int mapwidth , unsigned int mapheight , char tilewidth , char tileheight , unsigned int color_mode) -unsigned int vera_layer_mode_text::color_mode -unsigned int vera_layer_mode_text::color_mode#0 -unsigned int vera_layer_mode_text::color_mode#1 -unsigned int vera_layer_mode_text::color_mode#2 -unsigned int vera_layer_mode_text::color_mode#3 -char vera_layer_mode_text::layer -char vera_layer_mode_text::layer#0 -char vera_layer_mode_text::layer#1 -char vera_layer_mode_text::layer#2 -char vera_layer_mode_text::layer#3 -char vera_layer_mode_text::layer#4 -char vera_layer_mode_text::layer#5 -unsigned long vera_layer_mode_text::mapbase_address -unsigned long vera_layer_mode_text::mapbase_address#0 -unsigned long vera_layer_mode_text::mapbase_address#1 -unsigned int vera_layer_mode_text::mapheight -unsigned int vera_layer_mode_text::mapheight#0 -unsigned int vera_layer_mode_text::mapheight#1 -unsigned int vera_layer_mode_text::mapwidth -unsigned int vera_layer_mode_text::mapwidth#0 -unsigned int vera_layer_mode_text::mapwidth#1 -unsigned long vera_layer_mode_text::tilebase_address -unsigned long vera_layer_mode_text::tilebase_address#0 -unsigned long vera_layer_mode_text::tilebase_address#1 -char vera_layer_mode_text::tileheight -char vera_layer_mode_text::tileheight#0 -char vera_layer_mode_text::tileheight#1 -char vera_layer_mode_text::tilewidth -char vera_layer_mode_text::tilewidth#0 -char vera_layer_mode_text::tilewidth#1 -void vera_layer_mode_tile(char layer , unsigned long mapbase_address , unsigned long tilebase_address , unsigned int mapwidth , unsigned int mapheight , char tilewidth , char tileheight , char color_depth) -unsigned int vera_layer_mode_tile::$1 -char vera_layer_mode_tile::$11 -char vera_layer_mode_tile::$12 -char vera_layer_mode_tile::$13 -char vera_layer_mode_tile::$14 -char vera_layer_mode_tile::$15 -char vera_layer_mode_tile::$16 -char vera_layer_mode_tile::$17 -char vera_layer_mode_tile::$18 -char vera_layer_mode_tile::$2 -unsigned long vera_layer_mode_tile::$3 -unsigned int vera_layer_mode_tile::$6 -char vera_layer_mode_tile::$7 -unsigned long vera_layer_mode_tile::$8 -char vera_layer_mode_tile::color_depth -char vera_layer_mode_tile::color_depth#0 -char vera_layer_mode_tile::color_depth#1 -char vera_layer_mode_tile::color_depth#2 -char vera_layer_mode_tile::color_depth#3 -char vera_layer_mode_tile::color_depth#4 -char vera_layer_mode_tile::color_depth#5 -char vera_layer_mode_tile::config -char vera_layer_mode_tile::config#0 -char vera_layer_mode_tile::config#1 -char vera_layer_mode_tile::config#10 -char vera_layer_mode_tile::config#11 -char vera_layer_mode_tile::config#12 -char vera_layer_mode_tile::config#13 -char vera_layer_mode_tile::config#14 -char vera_layer_mode_tile::config#15 -char vera_layer_mode_tile::config#16 -char vera_layer_mode_tile::config#17 -char vera_layer_mode_tile::config#18 -char vera_layer_mode_tile::config#19 -char vera_layer_mode_tile::config#2 -char vera_layer_mode_tile::config#20 -char vera_layer_mode_tile::config#21 -char vera_layer_mode_tile::config#22 -char vera_layer_mode_tile::config#23 -char vera_layer_mode_tile::config#24 -char vera_layer_mode_tile::config#25 -char vera_layer_mode_tile::config#26 -char vera_layer_mode_tile::config#27 -char vera_layer_mode_tile::config#28 -char vera_layer_mode_tile::config#29 -char vera_layer_mode_tile::config#3 -char vera_layer_mode_tile::config#30 -char vera_layer_mode_tile::config#31 -char vera_layer_mode_tile::config#32 -char vera_layer_mode_tile::config#33 -char vera_layer_mode_tile::config#34 -char vera_layer_mode_tile::config#35 -char vera_layer_mode_tile::config#36 -char vera_layer_mode_tile::config#4 -char vera_layer_mode_tile::config#5 -char vera_layer_mode_tile::config#6 -char vera_layer_mode_tile::config#7 -char vera_layer_mode_tile::config#8 -char vera_layer_mode_tile::config#9 -char vera_layer_mode_tile::layer -char vera_layer_mode_tile::layer#0 -char vera_layer_mode_tile::layer#1 -char vera_layer_mode_tile::layer#10 -char vera_layer_mode_tile::layer#11 -char vera_layer_mode_tile::layer#12 -char vera_layer_mode_tile::layer#13 -char vera_layer_mode_tile::layer#14 -char vera_layer_mode_tile::layer#15 -char vera_layer_mode_tile::layer#16 -char vera_layer_mode_tile::layer#17 -char vera_layer_mode_tile::layer#18 -char vera_layer_mode_tile::layer#19 -char vera_layer_mode_tile::layer#2 -char vera_layer_mode_tile::layer#20 -char vera_layer_mode_tile::layer#21 -char vera_layer_mode_tile::layer#22 -char vera_layer_mode_tile::layer#23 -char vera_layer_mode_tile::layer#24 -char vera_layer_mode_tile::layer#25 -char vera_layer_mode_tile::layer#26 -char vera_layer_mode_tile::layer#27 -char vera_layer_mode_tile::layer#28 -char vera_layer_mode_tile::layer#29 -char vera_layer_mode_tile::layer#3 -char vera_layer_mode_tile::layer#30 -char vera_layer_mode_tile::layer#31 -char vera_layer_mode_tile::layer#32 -char vera_layer_mode_tile::layer#33 -char vera_layer_mode_tile::layer#34 -char vera_layer_mode_tile::layer#35 -char vera_layer_mode_tile::layer#36 -char vera_layer_mode_tile::layer#4 -char vera_layer_mode_tile::layer#5 -char vera_layer_mode_tile::layer#6 -char vera_layer_mode_tile::layer#7 -char vera_layer_mode_tile::layer#8 -char vera_layer_mode_tile::layer#9 -char vera_layer_mode_tile::mapbase -char vera_layer_mode_tile::mapbase#0 -unsigned long vera_layer_mode_tile::mapbase_address -unsigned long vera_layer_mode_tile::mapbase_address#0 -unsigned long vera_layer_mode_tile::mapbase_address#1 -unsigned long vera_layer_mode_tile::mapbase_address#10 -unsigned long vera_layer_mode_tile::mapbase_address#11 -unsigned long vera_layer_mode_tile::mapbase_address#12 -unsigned long vera_layer_mode_tile::mapbase_address#13 -unsigned long vera_layer_mode_tile::mapbase_address#14 -unsigned long vera_layer_mode_tile::mapbase_address#15 -unsigned long vera_layer_mode_tile::mapbase_address#16 -unsigned long vera_layer_mode_tile::mapbase_address#17 -unsigned long vera_layer_mode_tile::mapbase_address#18 -unsigned long vera_layer_mode_tile::mapbase_address#19 -unsigned long vera_layer_mode_tile::mapbase_address#2 -unsigned long vera_layer_mode_tile::mapbase_address#20 -unsigned long vera_layer_mode_tile::mapbase_address#21 -unsigned long vera_layer_mode_tile::mapbase_address#22 -unsigned long vera_layer_mode_tile::mapbase_address#23 -unsigned long vera_layer_mode_tile::mapbase_address#24 -unsigned long vera_layer_mode_tile::mapbase_address#25 -unsigned long vera_layer_mode_tile::mapbase_address#26 -unsigned long vera_layer_mode_tile::mapbase_address#27 -unsigned long vera_layer_mode_tile::mapbase_address#28 -unsigned long vera_layer_mode_tile::mapbase_address#3 -unsigned long vera_layer_mode_tile::mapbase_address#4 -unsigned long vera_layer_mode_tile::mapbase_address#5 -unsigned long vera_layer_mode_tile::mapbase_address#6 -unsigned long vera_layer_mode_tile::mapbase_address#7 -unsigned long vera_layer_mode_tile::mapbase_address#8 -unsigned long vera_layer_mode_tile::mapbase_address#9 -unsigned int vera_layer_mode_tile::mapheight -unsigned int vera_layer_mode_tile::mapheight#0 -unsigned int vera_layer_mode_tile::mapheight#1 -unsigned int vera_layer_mode_tile::mapheight#10 -unsigned int vera_layer_mode_tile::mapheight#11 -unsigned int vera_layer_mode_tile::mapheight#12 -unsigned int vera_layer_mode_tile::mapheight#13 -unsigned int vera_layer_mode_tile::mapheight#14 -unsigned int vera_layer_mode_tile::mapheight#15 -unsigned int vera_layer_mode_tile::mapheight#16 -unsigned int vera_layer_mode_tile::mapheight#17 -unsigned int vera_layer_mode_tile::mapheight#18 -unsigned int vera_layer_mode_tile::mapheight#19 -unsigned int vera_layer_mode_tile::mapheight#2 -unsigned int vera_layer_mode_tile::mapheight#20 -unsigned int vera_layer_mode_tile::mapheight#21 -unsigned int vera_layer_mode_tile::mapheight#3 -unsigned int vera_layer_mode_tile::mapheight#4 -unsigned int vera_layer_mode_tile::mapheight#5 -unsigned int vera_layer_mode_tile::mapheight#6 -unsigned int vera_layer_mode_tile::mapheight#7 -unsigned int vera_layer_mode_tile::mapheight#8 -unsigned int vera_layer_mode_tile::mapheight#9 -unsigned int vera_layer_mode_tile::mapwidth -unsigned int vera_layer_mode_tile::mapwidth#0 -unsigned int vera_layer_mode_tile::mapwidth#1 -unsigned int vera_layer_mode_tile::mapwidth#10 -unsigned int vera_layer_mode_tile::mapwidth#11 -unsigned int vera_layer_mode_tile::mapwidth#12 -unsigned int vera_layer_mode_tile::mapwidth#13 -unsigned int vera_layer_mode_tile::mapwidth#2 -unsigned int vera_layer_mode_tile::mapwidth#3 -unsigned int vera_layer_mode_tile::mapwidth#4 -unsigned int vera_layer_mode_tile::mapwidth#5 -unsigned int vera_layer_mode_tile::mapwidth#6 -unsigned int vera_layer_mode_tile::mapwidth#7 -unsigned int vera_layer_mode_tile::mapwidth#8 -unsigned int vera_layer_mode_tile::mapwidth#9 -char vera_layer_mode_tile::tilebase -char vera_layer_mode_tile::tilebase#0 -char vera_layer_mode_tile::tilebase#1 -char vera_layer_mode_tile::tilebase#10 -char vera_layer_mode_tile::tilebase#11 -char vera_layer_mode_tile::tilebase#12 -char vera_layer_mode_tile::tilebase#13 -char vera_layer_mode_tile::tilebase#2 -char vera_layer_mode_tile::tilebase#3 -char vera_layer_mode_tile::tilebase#4 -char vera_layer_mode_tile::tilebase#5 -char vera_layer_mode_tile::tilebase#6 -char vera_layer_mode_tile::tilebase#7 -char vera_layer_mode_tile::tilebase#8 -char vera_layer_mode_tile::tilebase#9 -unsigned long vera_layer_mode_tile::tilebase_address -unsigned long vera_layer_mode_tile::tilebase_address#0 -unsigned long vera_layer_mode_tile::tilebase_address#1 -unsigned long vera_layer_mode_tile::tilebase_address#10 -unsigned long vera_layer_mode_tile::tilebase_address#11 -unsigned long vera_layer_mode_tile::tilebase_address#12 -unsigned long vera_layer_mode_tile::tilebase_address#13 -unsigned long vera_layer_mode_tile::tilebase_address#14 -unsigned long vera_layer_mode_tile::tilebase_address#15 -unsigned long vera_layer_mode_tile::tilebase_address#16 -unsigned long vera_layer_mode_tile::tilebase_address#17 -unsigned long vera_layer_mode_tile::tilebase_address#18 -unsigned long vera_layer_mode_tile::tilebase_address#19 -unsigned long vera_layer_mode_tile::tilebase_address#2 -unsigned long vera_layer_mode_tile::tilebase_address#20 -unsigned long vera_layer_mode_tile::tilebase_address#21 -unsigned long vera_layer_mode_tile::tilebase_address#22 -unsigned long vera_layer_mode_tile::tilebase_address#23 -unsigned long vera_layer_mode_tile::tilebase_address#24 -unsigned long vera_layer_mode_tile::tilebase_address#25 -unsigned long vera_layer_mode_tile::tilebase_address#26 -unsigned long vera_layer_mode_tile::tilebase_address#27 -unsigned long vera_layer_mode_tile::tilebase_address#28 -unsigned long vera_layer_mode_tile::tilebase_address#29 -unsigned long vera_layer_mode_tile::tilebase_address#3 -unsigned long vera_layer_mode_tile::tilebase_address#4 -unsigned long vera_layer_mode_tile::tilebase_address#5 -unsigned long vera_layer_mode_tile::tilebase_address#6 -unsigned long vera_layer_mode_tile::tilebase_address#7 -unsigned long vera_layer_mode_tile::tilebase_address#8 -unsigned long vera_layer_mode_tile::tilebase_address#9 -char vera_layer_mode_tile::tileheight -char vera_layer_mode_tile::tileheight#0 -char vera_layer_mode_tile::tileheight#1 -char vera_layer_mode_tile::tileheight#10 -char vera_layer_mode_tile::tileheight#11 -char vera_layer_mode_tile::tileheight#12 -char vera_layer_mode_tile::tileheight#13 -char vera_layer_mode_tile::tileheight#14 -char vera_layer_mode_tile::tileheight#15 -char vera_layer_mode_tile::tileheight#16 -char vera_layer_mode_tile::tileheight#17 -char vera_layer_mode_tile::tileheight#18 -char vera_layer_mode_tile::tileheight#19 -char vera_layer_mode_tile::tileheight#2 -char vera_layer_mode_tile::tileheight#20 -char vera_layer_mode_tile::tileheight#21 -char vera_layer_mode_tile::tileheight#22 -char vera_layer_mode_tile::tileheight#23 -char vera_layer_mode_tile::tileheight#24 -char vera_layer_mode_tile::tileheight#25 -char vera_layer_mode_tile::tileheight#26 -char vera_layer_mode_tile::tileheight#27 -char vera_layer_mode_tile::tileheight#28 -char vera_layer_mode_tile::tileheight#29 -char vera_layer_mode_tile::tileheight#3 -char vera_layer_mode_tile::tileheight#30 -char vera_layer_mode_tile::tileheight#31 -char vera_layer_mode_tile::tileheight#32 -char vera_layer_mode_tile::tileheight#33 -char vera_layer_mode_tile::tileheight#4 -char vera_layer_mode_tile::tileheight#5 -char vera_layer_mode_tile::tileheight#6 -char vera_layer_mode_tile::tileheight#7 -char vera_layer_mode_tile::tileheight#8 -char vera_layer_mode_tile::tileheight#9 -char vera_layer_mode_tile::tilewidth -char vera_layer_mode_tile::tilewidth#0 -char vera_layer_mode_tile::tilewidth#1 -char vera_layer_mode_tile::tilewidth#10 -char vera_layer_mode_tile::tilewidth#11 -char vera_layer_mode_tile::tilewidth#12 -char vera_layer_mode_tile::tilewidth#13 -char vera_layer_mode_tile::tilewidth#14 -char vera_layer_mode_tile::tilewidth#15 -char vera_layer_mode_tile::tilewidth#16 -char vera_layer_mode_tile::tilewidth#17 -char vera_layer_mode_tile::tilewidth#18 -char vera_layer_mode_tile::tilewidth#19 -char vera_layer_mode_tile::tilewidth#2 -char vera_layer_mode_tile::tilewidth#20 -char vera_layer_mode_tile::tilewidth#21 -char vera_layer_mode_tile::tilewidth#22 -char vera_layer_mode_tile::tilewidth#23 -char vera_layer_mode_tile::tilewidth#24 -char vera_layer_mode_tile::tilewidth#25 -char vera_layer_mode_tile::tilewidth#26 -char vera_layer_mode_tile::tilewidth#27 -char vera_layer_mode_tile::tilewidth#28 -char vera_layer_mode_tile::tilewidth#29 -char vera_layer_mode_tile::tilewidth#3 -char vera_layer_mode_tile::tilewidth#4 -char vera_layer_mode_tile::tilewidth#5 -char vera_layer_mode_tile::tilewidth#6 -char vera_layer_mode_tile::tilewidth#7 -char vera_layer_mode_tile::tilewidth#8 -char vera_layer_mode_tile::tilewidth#9 -__constant char vera_layer_rowshift[2] = { 0, 0 } -__constant unsigned int vera_layer_rowskip[2] = { 0, 0 } -char vera_layer_set_backcolor(char layer , char color) -char vera_layer_set_backcolor::color -char vera_layer_set_backcolor::color#0 -char vera_layer_set_backcolor::color#1 -char vera_layer_set_backcolor::color#2 -char vera_layer_set_backcolor::layer -char vera_layer_set_backcolor::layer#0 -char vera_layer_set_backcolor::layer#1 -char vera_layer_set_backcolor::layer#2 -char vera_layer_set_backcolor::old -char vera_layer_set_backcolor::old#0 -char vera_layer_set_backcolor::return -char vera_layer_set_backcolor::return#0 -char vera_layer_set_backcolor::return#1 -char vera_layer_set_backcolor::return#2 -char vera_layer_set_backcolor::return#3 -char vera_layer_set_backcolor::return#4 -void vera_layer_set_config(char layer , char config) -char vera_layer_set_config::$0 -char *vera_layer_set_config::addr -char *vera_layer_set_config::addr#0 -char vera_layer_set_config::config -char vera_layer_set_config::config#0 -char vera_layer_set_config::config#1 -char vera_layer_set_config::layer -char vera_layer_set_config::layer#0 -char vera_layer_set_config::layer#1 -void vera_layer_set_mapbase(char layer , char mapbase) -char vera_layer_set_mapbase::$0 -char *vera_layer_set_mapbase::addr -char *vera_layer_set_mapbase::addr#0 -char vera_layer_set_mapbase::layer -char vera_layer_set_mapbase::layer#0 -char vera_layer_set_mapbase::layer#1 -char vera_layer_set_mapbase::layer#2 -char vera_layer_set_mapbase::layer#3 -char vera_layer_set_mapbase::mapbase -char vera_layer_set_mapbase::mapbase#0 -char vera_layer_set_mapbase::mapbase#1 -char vera_layer_set_mapbase::mapbase#2 -char vera_layer_set_mapbase::mapbase#3 -void vera_layer_set_text_color_mode(char layer , char color_mode) -char vera_layer_set_text_color_mode::$0 -char *vera_layer_set_text_color_mode::addr -char *vera_layer_set_text_color_mode::addr#0 -char vera_layer_set_text_color_mode::color_mode -char vera_layer_set_text_color_mode::color_mode#0 -char vera_layer_set_text_color_mode::color_mode#1 -char vera_layer_set_text_color_mode::color_mode#2 -char vera_layer_set_text_color_mode::layer -char vera_layer_set_text_color_mode::layer#0 -char vera_layer_set_text_color_mode::layer#1 -char vera_layer_set_text_color_mode::layer#2 -char vera_layer_set_textcolor(char layer , char color) -char vera_layer_set_textcolor::color -char vera_layer_set_textcolor::color#0 -char vera_layer_set_textcolor::color#1 -char vera_layer_set_textcolor::color#2 -char vera_layer_set_textcolor::layer -char vera_layer_set_textcolor::layer#0 -char vera_layer_set_textcolor::layer#1 -char vera_layer_set_textcolor::layer#2 -char vera_layer_set_textcolor::old -char vera_layer_set_textcolor::old#0 -char vera_layer_set_textcolor::return -char vera_layer_set_textcolor::return#0 -char vera_layer_set_textcolor::return#1 -char vera_layer_set_textcolor::return#2 -char vera_layer_set_textcolor::return#3 -char vera_layer_set_textcolor::return#4 -void vera_layer_set_tilebase(char layer , char tilebase) -char vera_layer_set_tilebase::$0 -char *vera_layer_set_tilebase::addr -char *vera_layer_set_tilebase::addr#0 -char vera_layer_set_tilebase::layer -char vera_layer_set_tilebase::layer#0 -char vera_layer_set_tilebase::layer#1 -char vera_layer_set_tilebase::tilebase -char vera_layer_set_tilebase::tilebase#0 -char vera_layer_set_tilebase::tilebase#1 -__constant char vera_layer_textcolor[2] = { WHITE, WHITE } -__constant char *vera_layer_tilebase[2] = { VERA_L0_TILEBASE, VERA_L1_TILEBASE } -__constant const char vera_layer_vflip[2] = { 0, 8 } -__constant unsigned long vera_mapbase_address[2] = { 0, 0 } -__constant char vera_mapbase_bank[2] = { 0, 0 } -__constant unsigned int vera_mapbase_offset[2] = { 0, 0 } -void vera_tile_area(char layer , unsigned int tileindex , char x , char y , char w , char h , char hflip , char vflip , char offset) -char vera_tile_area::$1 -unsigned int vera_tile_area::$10 -unsigned int vera_tile_area::$4 -char vera_tile_area::$5 -bool vera_tile_area::$6 -bool vera_tile_area::$8 -char vera_tile_area::$9 -char vera_tile_area::c -char vera_tile_area::c#0 -char vera_tile_area::c#1 -char vera_tile_area::c#2 -char vera_tile_area::c#3 -char vera_tile_area::h -char vera_tile_area::h#0 -char vera_tile_area::h#1 -char vera_tile_area::h#10 -char vera_tile_area::h#2 -char vera_tile_area::h#3 -char vera_tile_area::h#4 -char vera_tile_area::h#5 -char vera_tile_area::h#6 -char vera_tile_area::h#7 -char vera_tile_area::h#8 -char vera_tile_area::h#9 -char vera_tile_area::hflip -char vera_tile_area::hflip#0 -char vera_tile_area::hflip#1 -char vera_tile_area::hflip#2 -char vera_tile_area::hflip#3 -char vera_tile_area::hflip#4 -char vera_tile_area::index_h -char vera_tile_area::index_h#0 -char vera_tile_area::index_h#1 -char vera_tile_area::index_h#10 -char vera_tile_area::index_h#2 -char vera_tile_area::index_h#3 -char vera_tile_area::index_h#4 -char vera_tile_area::index_h#5 -char vera_tile_area::index_h#6 -char vera_tile_area::index_h#7 -char vera_tile_area::index_h#8 -char vera_tile_area::index_h#9 -char vera_tile_area::index_l -char vera_tile_area::index_l#0 -char vera_tile_area::index_l#1 -char vera_tile_area::index_l#2 -char vera_tile_area::index_l#3 -char vera_tile_area::index_l#4 -char vera_tile_area::index_l#5 -char vera_tile_area::index_l#6 -char vera_tile_area::index_l#7 -char vera_tile_area::layer -char vera_tile_area::layer#0 -char vera_tile_area::layer#1 -char vera_tile_area::layer#2 -char vera_tile_area::layer#3 -unsigned long vera_tile_area::mapbase -unsigned long vera_tile_area::mapbase#0 -unsigned long vera_tile_area::mapbase#1 -unsigned long vera_tile_area::mapbase#10 -unsigned long vera_tile_area::mapbase#2 -unsigned long vera_tile_area::mapbase#3 -unsigned long vera_tile_area::mapbase#4 -unsigned long vera_tile_area::mapbase#5 -unsigned long vera_tile_area::mapbase#6 -unsigned long vera_tile_area::mapbase#7 -unsigned long vera_tile_area::mapbase#8 -unsigned long vera_tile_area::mapbase#9 -char vera_tile_area::offset -char vera_tile_area::offset#0 -char vera_tile_area::offset#1 -char vera_tile_area::offset#2 -char vera_tile_area::offset#3 -char vera_tile_area::offset#4 -char vera_tile_area::r -char vera_tile_area::r#0 -char vera_tile_area::r#1 -char vera_tile_area::r#2 -char vera_tile_area::r#3 -char vera_tile_area::r#4 -char vera_tile_area::r#5 -char vera_tile_area::r#6 -char vera_tile_area::r#7 -char vera_tile_area::r#8 -unsigned int vera_tile_area::rowskip -unsigned int vera_tile_area::rowskip#0 -unsigned int vera_tile_area::rowskip#1 -unsigned int vera_tile_area::rowskip#2 -unsigned int vera_tile_area::rowskip#3 -unsigned int vera_tile_area::rowskip#4 -unsigned int vera_tile_area::rowskip#5 -unsigned int vera_tile_area::rowskip#6 -unsigned int vera_tile_area::rowskip#7 -char vera_tile_area::shift -char vera_tile_area::shift#0 -unsigned int vera_tile_area::tileindex -unsigned int vera_tile_area::tileindex#0 -unsigned int vera_tile_area::tileindex#1 -unsigned int vera_tile_area::tileindex#2 -unsigned int vera_tile_area::tileindex#3 -char vera_tile_area::vera_vram_address01_$0 -char vera_tile_area::vera_vram_address01_$1 -char vera_tile_area::vera_vram_address01_$2 -char vera_tile_area::vera_vram_address01_$3 -unsigned long vera_tile_area::vera_vram_address01_bankaddr -unsigned long vera_tile_area::vera_vram_address01_bankaddr#0 -unsigned long vera_tile_area::vera_vram_address01_bankaddr#1 -char vera_tile_area::vera_vram_address01_incr -char vera_tile_area::vera_vram_address01_incr#0 -char vera_tile_area::vera_vram_address01_incr#1 -char vera_tile_area::vflip -char vera_tile_area::vflip#0 -char vera_tile_area::vflip#1 -char vera_tile_area::vflip#2 -char vera_tile_area::vflip#3 -char vera_tile_area::vflip#4 -char vera_tile_area::w -char vera_tile_area::w#0 -char vera_tile_area::w#1 -char vera_tile_area::w#10 -char vera_tile_area::w#2 -char vera_tile_area::w#3 -char vera_tile_area::w#4 -char vera_tile_area::w#5 -char vera_tile_area::w#6 -char vera_tile_area::w#7 -char vera_tile_area::w#8 -char vera_tile_area::w#9 -char vera_tile_area::x -char vera_tile_area::x#0 -char vera_tile_area::x#1 -char vera_tile_area::x#2 -char vera_tile_area::x#3 -char vera_tile_area::y -char vera_tile_area::y#0 -char vera_tile_area::y#1 -char vera_tile_area::y#2 -char vera_tile_area::y#3 -__constant unsigned long vera_tilebase_address[2] = { 0, 0 } -__constant char vera_tilebase_bank[2] = { 0, 0 } -__constant unsigned int vera_tilebase_offset[2] = { 0, 0 } - -Adding number conversion cast (unumber) 0 in vera_layer_get_color::$4 = 0 != vera_layer_get_color::$0 -Adding number conversion cast (unumber) 4 in vera_layer_get_color::$1 = vera_layer_backcolor[vera_layer_get_color::layer#4] << 4 -Adding number conversion cast (unumber) 1 in if(vera_layer_mode_tile::color_depth#2==1) goto vera_layer_mode_tile::@4 -Adding number conversion cast (unumber) 2 in if(vera_layer_mode_tile::color_depth#3==2) goto vera_layer_mode_tile::@5 -Adding number conversion cast (unumber) 4 in if(vera_layer_mode_tile::color_depth#4==4) goto vera_layer_mode_tile::@6 -Adding number conversion cast (unumber) 8 in if(vera_layer_mode_tile::color_depth#5==8) goto vera_layer_mode_tile::@7 -Adding number conversion cast (unumber) $20 in if(vera_layer_mode_tile::mapwidth#2==$20) goto vera_layer_mode_tile::@12 -Adding number conversion cast (unumber) 6 in vera_layer_rowshift[vera_layer_mode_tile::layer#2] = 6 -Adding number conversion cast (unumber) $40 in vera_layer_rowskip[vera_layer_mode_tile::$11] = $40 -Adding number conversion cast (unumber) $40 in if(vera_layer_mode_tile::mapwidth#3==$40) goto vera_layer_mode_tile::@13 -Adding number conversion cast (unumber) 7 in vera_layer_rowshift[vera_layer_mode_tile::layer#3] = 7 -Adding number conversion cast (unumber) $80 in vera_layer_rowskip[vera_layer_mode_tile::$12] = $80 -Adding number conversion cast (unumber) $80 in if(vera_layer_mode_tile::mapwidth#4==$80) goto vera_layer_mode_tile::@14 -Adding number conversion cast (unumber) 8 in vera_layer_rowshift[vera_layer_mode_tile::layer#4] = 8 -Adding number conversion cast (unumber) $100 in vera_layer_rowskip[vera_layer_mode_tile::$13] = $100 -Adding number conversion cast (unumber) $100 in if(vera_layer_mode_tile::mapwidth#5==$100) goto vera_layer_mode_tile::@15 -Adding number conversion cast (unumber) 9 in vera_layer_rowshift[vera_layer_mode_tile::layer#5] = 9 -Adding number conversion cast (unumber) $200 in vera_layer_rowskip[vera_layer_mode_tile::$14] = $200 -Adding number conversion cast (unumber) $20 in if(vera_layer_mode_tile::mapheight#2==$20) goto vera_layer_mode_tile::@20 -Adding number conversion cast (unumber) $40 in if(vera_layer_mode_tile::mapheight#3==$40) goto vera_layer_mode_tile::@21 -Adding number conversion cast (unumber) $80 in if(vera_layer_mode_tile::mapheight#4==$80) goto vera_layer_mode_tile::@22 -Adding number conversion cast (unumber) $100 in if(vera_layer_mode_tile::mapheight#5==$100) goto vera_layer_mode_tile::@23 -Adding number conversion cast (unumber) 1 in vera_layer_mode_tile::$3 = vera_layer_mode_tile::mapbase_address#3 >> 1 -Adding number conversion cast (unumber) 1 in vera_layer_mode_tile::$8 = vera_layer_mode_tile::tilebase_address#3 >> 1 -Adding number conversion cast (unumber) 8 in if(vera_layer_mode_tile::tilewidth#2==8) goto vera_layer_mode_tile::@26 -Adding number conversion cast (unumber) $10 in if(vera_layer_mode_tile::tilewidth#3==$10) goto vera_layer_mode_tile::@27 -Adding number conversion cast (unumber) 8 in if(vera_layer_mode_tile::tileheight#2==8) goto vera_layer_mode_tile::@30 -Adding number conversion cast (unumber) $10 in if(vera_layer_mode_tile::tileheight#3==$10) goto vera_layer_mode_tile::@31 -Adding number conversion cast (unumber) 1 in vera_layer_mode_tile::color_depth#0 = 1 -Adding number conversion cast (unumber) $10 in if(vera_layer_mode_text::color_mode#1==$10) goto vera_layer_mode_text::@2 -Adding number conversion cast (unumber) $100 in if(vera_layer_mode_text::color_mode#2==$100) goto vera_layer_mode_text::@3 -Adding number conversion cast (unumber) 4 in vera_tile_area::$1 = vera_tile_area::offset#4 << 4 -Adding number conversion cast (unumber) 1 in vera_tile_area::$5 = vera_tile_area::x#3 << 1 -Adding number conversion cast (unumber) 4 in clrscr::$1 = clrscr::$0 << 4 -Adding number conversion cast (unumber) 0 in conio_cursor_x[conio_screen_layer] = 0 -Adding number conversion cast (unumber) 0 in conio_cursor_y[conio_screen_layer] = 0 -Adding number conversion cast (unumber) 0 in conio_line_text[clrscr::$9] = 0 -Adding number conversion cast (unumber) 0 in gotoxy::y#0 = 0 -Adding number conversion cast (unumber) 0 in gotoxy::x#0 = 0 -Adding number conversion cast (unumber) 7 in screensize::hscale#0 = *VERA_DC_HSCALE >> 7 -Adding number conversion cast (unumber) $28 in screensize::$1 = $28 << screensize::hscale#0 -Adding number conversion cast (unumber) screensize::$1 in screensize::$1 = (unumber)$28 << screensize::hscale#0 -Adding number conversion cast (unumber) 7 in screensize::vscale#0 = *VERA_DC_VSCALE >> 7 -Adding number conversion cast (unumber) $1e in screensize::$3 = $1e << screensize::vscale#0 -Adding number conversion cast (unumber) screensize::$3 in screensize::$3 = (unumber)$1e << screensize::vscale#0 -Adding number conversion cast (unumber) 1 in cputc::$2 = conio_cursor_x[conio_screen_layer] << 1 -Adding number conversion cast (unumber) 0 in cputc::$17 = 0 != cputc::scroll_enable#0 -Adding number conversion cast (unumber) 0 in conio_cursor_x[conio_screen_layer] = 0 -Adding number conversion cast (unumber) 1 in vera_layer_mode_text::layer#0 = 1 -Adding number conversion cast (unumber) $80 in vera_layer_mode_text::mapwidth#0 = $80 -Adding number conversion cast (unumber) $40 in vera_layer_mode_text::mapheight#0 = $40 -Adding number conversion cast (unumber) 8 in vera_layer_mode_text::tilewidth#0 = 8 -Adding number conversion cast (unumber) 8 in vera_layer_mode_text::tileheight#0 = 8 -Adding number conversion cast (unumber) $10 in vera_layer_mode_text::color_mode#0 = $10 -Adding number conversion cast (unumber) 1 in screenlayer::layer#0 = 1 -Adding number conversion cast (unumber) 1 in vera_layer_set_textcolor::layer#0 = 1 -Adding number conversion cast (unumber) 1 in vera_layer_set_backcolor::layer#0 = 1 -Adding number conversion cast (unumber) 0 in vera_layer_set_mapbase::layer#1 = 0 -Adding number conversion cast (unumber) $20 in vera_layer_set_mapbase::mapbase#1 = $20 -Adding number conversion cast (unumber) 1 in vera_layer_set_mapbase::layer#2 = 1 -Adding number conversion cast (unumber) 0 in vera_layer_set_mapbase::mapbase#2 = 0 -Adding number conversion cast (unumber) 0 in gotoxy::x#1 = 0 -Adding number conversion cast (unumber) 1 in conio_x16_init::$9 = conio_screen_height - 1 -Adding number conversion cast (unumber) conio_x16_init::$9 in conio_x16_init::$9 = conio_screen_height - (unumber)1 -Adding number conversion cast (unumber) 0 in conio_cursor_x[conio_screen_layer] = 0 -Adding number conversion cast (unumber) 2 in insertup::width#0 = conio_screen_width * 2 -Adding number conversion cast (unumber) 1 in insertup::$3 = insertup::i#3 - 1 -Adding number conversion cast (unumber) insertup::$3 in insertup::$3 = insertup::i#3 - (unumber)1 -Adding number conversion cast (unumber) 0 in memcpy_in_vram::dest_bank#0 = 0 -Adding number conversion cast (unumber) 0 in memcpy_in_vram::src_bank#0 = 0 -Adding number conversion cast (unumber) 0 in cscroll::$7 = 0 != conio_scroll_enable[conio_screen_layer] -Adding number conversion cast (unumber) 1 in cscroll::$5 = conio_screen_height - 1 -Adding number conversion cast (unumber) cscroll::$5 in cscroll::$5 = conio_screen_height - (unumber)1 -Adding number conversion cast (unumber) 0 in gotoxy::x#2 = 0 -Adding number conversion cast (unumber) 4 in screenlayer::vera_layer_get_width1_$1 = screenlayer::vera_layer_get_width1_$0 >> 4 -Adding number conversion cast (unumber) 6 in screenlayer::vera_layer_get_height1_$1 = screenlayer::vera_layer_get_height1_$0 >> 6 -Adding number conversion cast (unumber) 0 in printf_str::$2 = 0 != printf_str::$0 -Adding number conversion cast (unumber) 0 in vera_layer_mode_tile::layer#1 = 0 -Adding number conversion cast (unumber) $4000 in vera_layer_mode_tile::mapbase_address#2 = $4000 -Adding number conversion cast (unumber) $14000 in vera_layer_mode_tile::tilebase_address#2 = $14000 -Adding number conversion cast (unumber) $80 in vera_layer_mode_tile::mapwidth#1 = $80 -Adding number conversion cast (unumber) $80 in vera_layer_mode_tile::mapheight#1 = $80 -Adding number conversion cast (unumber) 8 in vera_layer_mode_tile::tilewidth#1 = 8 -Adding number conversion cast (unumber) 8 in vera_layer_mode_tile::tileheight#1 = 8 -Adding number conversion cast (unumber) 8 in vera_layer_mode_tile::color_depth#1 = 8 -Adding number conversion cast (unumber) 1 in memcpy_to_vram::vbank#0 = 1 -Adding number conversion cast (unumber) $40 in memcpy_to_vram::num#0 = $40 -Adding number conversion cast (unumber) $40 in main::tilebase#1 = main::tilebase#3 + $40 -Adding number conversion cast (unumber) 1 in main::tiles[main::p#2] = main::tiles[main::p#2] + 1 -Adding number conversion cast (unumber) 1 in memcpy_to_vram::vbank#1 = 1 -Adding number conversion cast (unumber) $40 in memcpy_to_vram::num#1 = $40 -Adding number conversion cast (unumber) $40 in main::tilebase#2 = main::tilebase#5 + $40 -Adding number conversion cast (unumber) 0 in vera_tile_area::layer#0 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::tileindex#0 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::x#0 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::y#0 = 0 -Adding number conversion cast (unumber) $50 in vera_tile_area::w#0 = $50 -Adding number conversion cast (unumber) $3c in vera_tile_area::h#0 = $3c -Adding number conversion cast (unumber) 0 in vera_tile_area::hflip#1 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::vflip#1 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::offset#1 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::layer#1 = 0 -Adding number conversion cast (unumber) 1 in vera_tile_area::w#1 = 1 -Adding number conversion cast (unumber) 1 in vera_tile_area::h#1 = 1 -Adding number conversion cast (unumber) 0 in vera_tile_area::hflip#2 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::vflip#2 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::offset#2 = 0 -Adding number conversion cast (unumber) 2 in main::column#1 = main::column#3 + 2 -Adding number conversion cast (unumber) $ff in main::tile#2 = main::tile#1 & $ff -Adding number conversion cast (unumber) 2 in main::row#1 = main::row#5 + 2 -Adding number conversion cast (unumber) 0 in main::tile#3 = 0 -Adding number conversion cast (unumber) $14 in main::row#2 = $14 -Adding number conversion cast (unumber) 0 in vera_tile_area::layer#2 = 0 -Adding number conversion cast (unumber) 2 in vera_tile_area::w#2 = 2 -Adding number conversion cast (unumber) 2 in vera_tile_area::h#2 = 2 -Adding number conversion cast (unumber) 0 in vera_tile_area::hflip#3 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::vflip#3 = 0 -Adding number conversion cast (unumber) 0 in vera_tile_area::offset#3 = 0 -Adding number conversion cast (unumber) 2 in main::column1#1 = main::column1#3 + 2 -Adding number conversion cast (unumber) $ff in main::tile#5 = main::tile#4 & $ff -Adding number conversion cast (unumber) 2 in main::row#3 = main::row#7 + 2 -Adding number conversion cast (unumber) 0 in main::vera_layer_show1_layer#0 = 0 -Adding number conversion cast (unumber) 0 in gotoxy::x#3 = 0 -Adding number conversion cast (unumber) $32 in gotoxy::y#3 = $32 -Adding number conversion cast (unumber) 0 in main::$27 = 0 != main::$25 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast memcpy_to_vram::s#0 = (char *)memcpy_to_vram::src#2 -Inlining cast vera_layer_rowshift[vera_layer_mode_tile::layer#2] = (unumber)6 -Inlining cast vera_layer_rowskip[vera_layer_mode_tile::$11] = (unumber)$40 -Inlining cast vera_layer_rowshift[vera_layer_mode_tile::layer#3] = (unumber)7 -Inlining cast vera_layer_rowskip[vera_layer_mode_tile::$12] = (unumber)$80 -Inlining cast vera_layer_rowshift[vera_layer_mode_tile::layer#4] = (unumber)8 -Inlining cast vera_layer_rowskip[vera_layer_mode_tile::$13] = (unumber)$100 -Inlining cast vera_layer_rowshift[vera_layer_mode_tile::layer#5] = (unumber)9 -Inlining cast vera_layer_rowskip[vera_layer_mode_tile::$14] = (unumber)$200 -Inlining cast vera_layer_mode_tile::color_depth#0 = (unumber)1 -Inlining cast conio_cursor_x[conio_screen_layer] = (unumber)0 -Inlining cast conio_cursor_y[conio_screen_layer] = (unumber)0 -Inlining cast conio_line_text[clrscr::$9] = (unumber)0 -Inlining cast gotoxy::y#0 = (unumber)0 -Inlining cast gotoxy::x#0 = (unumber)0 -Inlining cast conio_cursor_x[conio_screen_layer] = (unumber)0 -Inlining cast vera_layer_mode_text::layer#0 = (unumber)1 -Inlining cast vera_layer_mode_text::mapwidth#0 = (unumber)$80 -Inlining cast vera_layer_mode_text::mapheight#0 = (unumber)$40 -Inlining cast vera_layer_mode_text::tilewidth#0 = (unumber)8 -Inlining cast vera_layer_mode_text::tileheight#0 = (unumber)8 -Inlining cast vera_layer_mode_text::color_mode#0 = (unumber)$10 -Inlining cast screenlayer::layer#0 = (unumber)1 -Inlining cast vera_layer_set_textcolor::layer#0 = (unumber)1 -Inlining cast vera_layer_set_backcolor::layer#0 = (unumber)1 -Inlining cast vera_layer_set_mapbase::layer#1 = (unumber)0 -Inlining cast vera_layer_set_mapbase::mapbase#1 = (unumber)$20 -Inlining cast vera_layer_set_mapbase::layer#2 = (unumber)1 -Inlining cast vera_layer_set_mapbase::mapbase#2 = (unumber)0 -Inlining cast gotoxy::x#1 = (unumber)0 -Inlining cast conio_cursor_x[conio_screen_layer] = (unumber)0 -Inlining cast memcpy_in_vram::dest_bank#0 = (unumber)0 -Inlining cast memcpy_in_vram::src_bank#0 = (unumber)0 -Inlining cast gotoxy::x#2 = (unumber)0 -Inlining cast vera_layer_mode_tile::layer#1 = (unumber)0 -Inlining cast vera_layer_mode_tile::mapbase_address#2 = (unumber)$4000 -Inlining cast vera_layer_mode_tile::tilebase_address#2 = (unumber)$14000 -Inlining cast vera_layer_mode_tile::mapwidth#1 = (unumber)$80 -Inlining cast vera_layer_mode_tile::mapheight#1 = (unumber)$80 -Inlining cast vera_layer_mode_tile::tilewidth#1 = (unumber)8 -Inlining cast vera_layer_mode_tile::tileheight#1 = (unumber)8 -Inlining cast vera_layer_mode_tile::color_depth#1 = (unumber)8 -Inlining cast memcpy_to_vram::vbank#0 = (unumber)1 -Inlining cast memcpy_to_vram::num#0 = (unumber)$40 -Inlining cast memcpy_to_vram::vbank#1 = (unumber)1 -Inlining cast memcpy_to_vram::num#1 = (unumber)$40 -Inlining cast vera_tile_area::layer#0 = (unumber)0 -Inlining cast vera_tile_area::tileindex#0 = (unumber)0 -Inlining cast vera_tile_area::x#0 = (unumber)0 -Inlining cast vera_tile_area::y#0 = (unumber)0 -Inlining cast vera_tile_area::w#0 = (unumber)$50 -Inlining cast vera_tile_area::h#0 = (unumber)$3c -Inlining cast vera_tile_area::hflip#1 = (unumber)0 -Inlining cast vera_tile_area::vflip#1 = (unumber)0 -Inlining cast vera_tile_area::offset#1 = (unumber)0 -Inlining cast vera_tile_area::layer#1 = (unumber)0 -Inlining cast vera_tile_area::w#1 = (unumber)1 -Inlining cast vera_tile_area::h#1 = (unumber)1 -Inlining cast vera_tile_area::hflip#2 = (unumber)0 -Inlining cast vera_tile_area::vflip#2 = (unumber)0 -Inlining cast vera_tile_area::offset#2 = (unumber)0 -Inlining cast main::tile#3 = (unumber)0 -Inlining cast main::row#2 = (unumber)$14 -Inlining cast vera_tile_area::layer#2 = (unumber)0 -Inlining cast vera_tile_area::w#2 = (unumber)2 -Inlining cast vera_tile_area::h#2 = (unumber)2 -Inlining cast vera_tile_area::hflip#3 = (unumber)0 -Inlining cast vera_tile_area::vflip#3 = (unumber)0 -Inlining cast vera_tile_area::offset#3 = (unumber)0 -Inlining cast main::vera_layer_show1_layer#0 = (unumber)0 -Inlining cast gotoxy::x#3 = (unumber)0 -Inlining cast gotoxy::y#3 = (unumber)$32 -Successful SSA optimization Pass2InlineCast -Simplifying constant pointer cast (char *) 40736 -Simplifying constant pointer cast (char *) 40737 -Simplifying constant pointer cast (char *) 40738 -Simplifying constant pointer cast (char *) 40739 -Simplifying constant pointer cast (char *) 40740 -Simplifying constant pointer cast (char *) 40741 -Simplifying constant pointer cast (char *) 40745 -Simplifying constant pointer cast (char *) 40746 -Simplifying constant pointer cast (char *) 40747 -Simplifying constant pointer cast (char *) 40749 -Simplifying constant pointer cast (char *) 40750 -Simplifying constant pointer cast (char *) 40751 -Simplifying constant pointer cast (char *) 40756 -Simplifying constant pointer cast (char *) 40757 -Simplifying constant pointer cast (char *) 40758 -Simplifying constant pointer cast (char *) 0 -Simplifying constant pointer cast (char *) 650 -Simplifying constant pointer cast (char *) 65508 -Simplifying constant pointer cast (char *) 214 -Simplifying constant integer cast 0 -Simplifying constant integer cast 4 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 4 -Simplifying constant integer cast 8 -Simplifying constant integer cast $20 -Simplifying constant integer cast 6 -Simplifying constant integer cast $40 -Simplifying constant integer cast $40 -Simplifying constant integer cast 7 -Simplifying constant integer cast $80 -Simplifying constant integer cast $80 -Simplifying constant integer cast 8 -Simplifying constant integer cast $100 -Simplifying constant integer cast $100 -Simplifying constant integer cast 9 -Simplifying constant integer cast $200 -Simplifying constant integer cast $20 -Simplifying constant integer cast $40 -Simplifying constant integer cast $80 -Simplifying constant integer cast $100 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 8 -Simplifying constant integer cast $10 -Simplifying constant integer cast 8 -Simplifying constant integer cast $10 -Simplifying constant integer cast 1 -Simplifying constant integer cast $10 -Simplifying constant integer cast $100 -Simplifying constant integer cast 1 -Simplifying constant integer cast 4 -Simplifying constant integer cast 1 -Simplifying constant integer cast 4 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast $28 -Simplifying constant integer cast 7 -Simplifying constant integer cast $1e -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast $f800 -Simplifying constant integer cast $80 -Simplifying constant integer cast $40 -Simplifying constant integer cast 8 -Simplifying constant integer cast 8 -Simplifying constant integer cast $10 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast $20 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 2 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $4000 -Simplifying constant integer cast $14000 -Simplifying constant integer cast $80 -Simplifying constant integer cast $80 -Simplifying constant integer cast 8 -Simplifying constant integer cast 8 -Simplifying constant integer cast 8 -Simplifying constant pointer cast (char *) 16384 -Simplifying constant integer cast 1 -Simplifying constant integer cast $40 -Simplifying constant integer cast $40 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast $40 -Simplifying constant integer cast $40 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $50 -Simplifying constant integer cast $3c -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 2 -Simplifying constant integer cast $ff -Simplifying constant integer cast 2 -Simplifying constant integer cast 0 -Simplifying constant integer cast $14 -Simplifying constant integer cast 0 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 2 -Simplifying constant integer cast $ff -Simplifying constant integer cast 2 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $32 -Simplifying constant integer cast 0 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 4 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 4 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) $20 -Finalized unsigned number type (char) 6 -Finalized unsigned number type (char) $40 -Finalized unsigned number type (char) $40 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) $80 -Finalized unsigned number type (char) $80 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (unsigned int) $100 -Finalized unsigned number type (unsigned int) $100 -Finalized unsigned number type (char) 9 -Finalized unsigned number type (unsigned int) $200 -Finalized unsigned number type (char) $20 -Finalized unsigned number type (char) $40 -Finalized unsigned number type (char) $80 -Finalized unsigned number type (unsigned int) $100 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) $10 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) $10 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) $10 -Finalized unsigned number type (unsigned int) $100 -Finalized unsigned number type (char) 4 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 4 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) $28 -Finalized unsigned number type (char) 7 -Finalized unsigned number type (char) $1e -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) $80 -Finalized unsigned number type (char) $40 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) $10 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) $20 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 4 -Finalized unsigned number type (char) 6 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (unsigned int) $4000 -Finalized unsigned number type (unsigned long) $14000 -Finalized unsigned number type (char) $80 -Finalized unsigned number type (char) $80 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) 8 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) $40 -Finalized unsigned number type (char) $40 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) $40 -Finalized unsigned number type (char) $40 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) $50 -Finalized unsigned number type (char) $3c -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 1 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) $ff -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) $14 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) $ff -Finalized unsigned number type (char) 2 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) 0 -Finalized unsigned number type (char) $32 -Finalized unsigned number type (char) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions -Inferred type updated to char in screensize::$1 = $28 << screensize::hscale#0 -Inferred type updated to char in screensize::$3 = $1e << screensize::vscale#0 -Inferred type updated to char in conio_x16_init::$9 = conio_screen_height - 1 -Inferred type updated to char in insertup::$3 = insertup::i#3 - 1 -Inferred type updated to char in cscroll::$5 = conio_screen_height - 1 -Inversing boolean not [350] gotoxy::$1 = gotoxy::y#4 <= conio_screen_height from [349] gotoxy::$0 = gotoxy::y#4 > conio_screen_height -Inversing boolean not [354] gotoxy::$3 = gotoxy::x#4 < conio_screen_width from [353] gotoxy::$2 = gotoxy::x#4 >= conio_screen_width -Inversing boolean not [407] cputc::$12 = conio_cursor_x[conio_screen_layer] != conio_screen_width from [406] cputc::$11 = conio_cursor_x[conio_screen_layer] == conio_screen_width -Inversing boolean not [412] cputc::$9 = cputc::$16 != conio_width from [411] cputc::$8 = cputc::$16 == conio_width -Inversing boolean not [475] conio_x16_init::$8 = conio_x16_init::line#2 < conio_screen_height from [474] conio_x16_init::$7 = conio_x16_init::line#2 >= conio_screen_height -Inversing boolean not [540] cscroll::$1 = conio_cursor_y[conio_screen_layer] < conio_screen_height from [539] cscroll::$0 = conio_cursor_y[conio_screen_layer] >= conio_screen_height -Inversing boolean not [552] cscroll::$3 = conio_cursor_y[conio_screen_layer] < conio_height from [551] cscroll::$2 = conio_cursor_y[conio_screen_layer] >= conio_height -Inversing boolean not [781] main::$26 = 0 == main::$25 from [780] main::$27 = 0 != main::$25 -Successful SSA optimization Pass2UnaryNotSimplification -Alias candidate removed (volatile)kbhit::return#0 = kbhit::ch kbhit::return#3 kbhit::return#1 -Alias candidate removed (volatile)screenlayer::vera_layer_get_width1_return#0 = screenlayer::vera_layer_get_width1_return#2 screenlayer::vera_layer_get_width1_return#1 screenlayer::vera_layer_get_width1_return#3 screenlayer::$2 conio_width -Alias candidate removed (volatile)conio_rowshift = screenlayer::$3 -Alias candidate removed (volatile)conio_rowskip = screenlayer::$4 -Alias candidate removed (volatile)screenlayer::vera_layer_get_height1_return#0 = screenlayer::vera_layer_get_height1_return#2 screenlayer::vera_layer_get_height1_return#1 screenlayer::vera_layer_get_height1_return#3 screenlayer::$5 conio_height -Alias memcpy_to_vram::s#2 = memcpy_to_vram::s#3 -Alias memcpy_to_vram::end#1 = memcpy_to_vram::end#2 -Alias memcpy_in_vram::i#2 = memcpy_in_vram::i#3 -Alias memcpy_in_vram::num#1 = memcpy_in_vram::num#3 -Alias vera_layer_get_mapbase_bank::return#0 = vera_layer_get_mapbase_bank::return#3 vera_layer_get_mapbase_bank::return#1 -Alias vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#3 vera_layer_get_mapbase_offset::return#1 -Alias vera_layer_set_textcolor::return#0 = vera_layer_set_textcolor::old#0 vera_layer_set_textcolor::return#4 vera_layer_set_textcolor::return#1 -Alias vera_layer_get_textcolor::return#0 = vera_layer_get_textcolor::return#3 vera_layer_get_textcolor::return#1 -Alias vera_layer_set_backcolor::return#0 = vera_layer_set_backcolor::old#0 vera_layer_set_backcolor::return#4 vera_layer_set_backcolor::return#1 -Alias vera_layer_get_backcolor::return#0 = vera_layer_get_backcolor::return#3 vera_layer_get_backcolor::return#1 -Alias vera_layer_get_color::layer#2 = vera_layer_get_color::layer#3 vera_layer_get_color::layer#4 -Alias vera_layer_get_color::return#1 = vera_layer_get_color::$2 -Alias vera_layer_get_color::return#2 = vera_layer_get_color::return#5 -Alias vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#3 vera_layer_get_rowshift::return#1 -Alias vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#3 vera_layer_get_rowskip::return#1 -Alias vera_layer_mode_tile::config#0 = vera_layer_mode_tile::config#13 vera_layer_mode_tile::config#26 vera_layer_mode_tile::config#14 vera_layer_mode_tile::config#27 vera_layer_mode_tile::config#15 vera_layer_mode_tile::config#28 vera_layer_mode_tile::config#16 -Alias vera_layer_mode_tile::mapwidth#10 = vera_layer_mode_tile::mapwidth#7 vera_layer_mode_tile::mapwidth#11 vera_layer_mode_tile::mapwidth#12 vera_layer_mode_tile::mapwidth#8 vera_layer_mode_tile::mapwidth#13 vera_layer_mode_tile::mapwidth#9 vera_layer_mode_tile::mapwidth#6 -Alias vera_layer_mode_tile::layer#22 = vera_layer_mode_tile::layer#23 vera_layer_mode_tile::layer#31 vera_layer_mode_tile::layer#32 vera_layer_mode_tile::layer#24 vera_layer_mode_tile::layer#33 vera_layer_mode_tile::layer#25 vera_layer_mode_tile::layer#26 -Alias vera_layer_mode_tile::mapheight#14 = vera_layer_mode_tile::mapheight#15 vera_layer_mode_tile::mapheight#19 vera_layer_mode_tile::mapheight#20 vera_layer_mode_tile::mapheight#16 vera_layer_mode_tile::mapheight#21 vera_layer_mode_tile::mapheight#17 vera_layer_mode_tile::mapheight#18 -Alias vera_layer_mode_tile::mapbase_address#21 = vera_layer_mode_tile::mapbase_address#22 vera_layer_mode_tile::mapbase_address#26 vera_layer_mode_tile::mapbase_address#27 vera_layer_mode_tile::mapbase_address#23 vera_layer_mode_tile::mapbase_address#28 vera_layer_mode_tile::mapbase_address#24 vera_layer_mode_tile::mapbase_address#25 -Alias vera_layer_mode_tile::tilebase_address#22 = vera_layer_mode_tile::tilebase_address#23 vera_layer_mode_tile::tilebase_address#27 vera_layer_mode_tile::tilebase_address#28 vera_layer_mode_tile::tilebase_address#24 vera_layer_mode_tile::tilebase_address#29 vera_layer_mode_tile::tilebase_address#25 vera_layer_mode_tile::tilebase_address#26 -Alias vera_layer_mode_tile::tilewidth#22 = vera_layer_mode_tile::tilewidth#23 vera_layer_mode_tile::tilewidth#27 vera_layer_mode_tile::tilewidth#28 vera_layer_mode_tile::tilewidth#24 vera_layer_mode_tile::tilewidth#29 vera_layer_mode_tile::tilewidth#25 vera_layer_mode_tile::tilewidth#26 -Alias vera_layer_mode_tile::tileheight#26 = vera_layer_mode_tile::tileheight#27 vera_layer_mode_tile::tileheight#31 vera_layer_mode_tile::tileheight#32 vera_layer_mode_tile::tileheight#28 vera_layer_mode_tile::tileheight#33 vera_layer_mode_tile::tileheight#29 vera_layer_mode_tile::tileheight#30 -Alias vera_layer_mode_tile::color_depth#2 = vera_layer_mode_tile::color_depth#3 vera_layer_mode_tile::color_depth#4 vera_layer_mode_tile::color_depth#5 -Alias vera_layer_mode_tile::config#17 = vera_layer_mode_tile::config#29 vera_layer_mode_tile::config#30 vera_layer_mode_tile::config#18 vera_layer_mode_tile::config#31 vera_layer_mode_tile::config#19 vera_layer_mode_tile::config#32 vera_layer_mode_tile::config#20 -Alias vera_layer_mode_tile::layer#10 = vera_layer_mode_tile::layer#2 vera_layer_mode_tile::layer#11 vera_layer_mode_tile::layer#3 vera_layer_mode_tile::layer#12 vera_layer_mode_tile::layer#4 vera_layer_mode_tile::layer#13 vera_layer_mode_tile::layer#5 -Alias vera_layer_mode_tile::mapheight#10 = vera_layer_mode_tile::mapheight#7 vera_layer_mode_tile::mapheight#11 vera_layer_mode_tile::mapheight#12 vera_layer_mode_tile::mapheight#8 vera_layer_mode_tile::mapheight#13 vera_layer_mode_tile::mapheight#9 vera_layer_mode_tile::mapheight#6 -Alias vera_layer_mode_tile::mapbase_address#13 = vera_layer_mode_tile::mapbase_address#14 vera_layer_mode_tile::mapbase_address#18 vera_layer_mode_tile::mapbase_address#19 vera_layer_mode_tile::mapbase_address#15 vera_layer_mode_tile::mapbase_address#20 vera_layer_mode_tile::mapbase_address#16 vera_layer_mode_tile::mapbase_address#17 -Alias vera_layer_mode_tile::tilebase_address#14 = vera_layer_mode_tile::tilebase_address#15 vera_layer_mode_tile::tilebase_address#19 vera_layer_mode_tile::tilebase_address#20 vera_layer_mode_tile::tilebase_address#16 vera_layer_mode_tile::tilebase_address#21 vera_layer_mode_tile::tilebase_address#17 vera_layer_mode_tile::tilebase_address#18 -Alias vera_layer_mode_tile::tilewidth#14 = vera_layer_mode_tile::tilewidth#15 vera_layer_mode_tile::tilewidth#19 vera_layer_mode_tile::tilewidth#20 vera_layer_mode_tile::tilewidth#16 vera_layer_mode_tile::tilewidth#21 vera_layer_mode_tile::tilewidth#17 vera_layer_mode_tile::tilewidth#18 -Alias vera_layer_mode_tile::tileheight#18 = vera_layer_mode_tile::tileheight#19 vera_layer_mode_tile::tileheight#23 vera_layer_mode_tile::tileheight#24 vera_layer_mode_tile::tileheight#20 vera_layer_mode_tile::tileheight#25 vera_layer_mode_tile::tileheight#21 vera_layer_mode_tile::tileheight#22 -Alias vera_layer_mode_tile::mapwidth#2 = vera_layer_mode_tile::mapwidth#3 vera_layer_mode_tile::mapwidth#4 vera_layer_mode_tile::mapwidth#5 -Alias vera_layer_mode_tile::config#21 = vera_layer_mode_tile::config#33 vera_layer_mode_tile::config#34 vera_layer_mode_tile::config#22 vera_layer_mode_tile::config#35 vera_layer_mode_tile::config#23 vera_layer_mode_tile::config#36 vera_layer_mode_tile::config#24 -Alias vera_layer_mode_tile::layer#14 = vera_layer_mode_tile::layer#15 vera_layer_mode_tile::layer#27 vera_layer_mode_tile::layer#28 vera_layer_mode_tile::layer#16 vera_layer_mode_tile::layer#29 vera_layer_mode_tile::layer#17 vera_layer_mode_tile::layer#18 -Alias vera_layer_mode_tile::mapbase_address#10 = vera_layer_mode_tile::mapbase_address#6 vera_layer_mode_tile::mapbase_address#11 vera_layer_mode_tile::mapbase_address#7 vera_layer_mode_tile::mapbase_address#12 vera_layer_mode_tile::mapbase_address#8 vera_layer_mode_tile::mapbase_address#5 vera_layer_mode_tile::mapbase_address#9 -Alias vera_layer_mode_tile::tilebase_address#10 = vera_layer_mode_tile::tilebase_address#7 vera_layer_mode_tile::tilebase_address#11 vera_layer_mode_tile::tilebase_address#12 vera_layer_mode_tile::tilebase_address#8 vera_layer_mode_tile::tilebase_address#13 vera_layer_mode_tile::tilebase_address#9 vera_layer_mode_tile::tilebase_address#6 -Alias vera_layer_mode_tile::tilewidth#10 = vera_layer_mode_tile::tilewidth#7 vera_layer_mode_tile::tilewidth#11 vera_layer_mode_tile::tilewidth#12 vera_layer_mode_tile::tilewidth#8 vera_layer_mode_tile::tilewidth#13 vera_layer_mode_tile::tilewidth#9 vera_layer_mode_tile::tilewidth#6 -Alias vera_layer_mode_tile::tileheight#10 = vera_layer_mode_tile::tileheight#11 vera_layer_mode_tile::tileheight#15 vera_layer_mode_tile::tileheight#16 vera_layer_mode_tile::tileheight#12 vera_layer_mode_tile::tileheight#17 vera_layer_mode_tile::tileheight#13 vera_layer_mode_tile::tileheight#14 -Alias vera_layer_mode_tile::mapheight#2 = vera_layer_mode_tile::mapheight#3 vera_layer_mode_tile::mapheight#4 vera_layer_mode_tile::mapheight#5 -Alias vera_layer_mode_tile::mapbase_address#3 = vera_layer_mode_tile::mapbase_address#4 -Alias vera_layer_mode_tile::layer#34 = vera_layer_mode_tile::layer#7 vera_layer_mode_tile::layer#6 vera_layer_mode_tile::layer#8 vera_layer_mode_tile::layer#35 vera_layer_mode_tile::layer#36 -Alias vera_layer_mode_tile::tilebase_address#3 = vera_layer_mode_tile::tilebase_address#4 vera_layer_mode_tile::tilebase_address#5 -Alias vera_layer_mode_tile::tilewidth#2 = vera_layer_mode_tile::tilewidth#4 vera_layer_mode_tile::tilewidth#5 vera_layer_mode_tile::tilewidth#3 -Alias vera_layer_mode_tile::tileheight#4 = vera_layer_mode_tile::tileheight#8 vera_layer_mode_tile::tileheight#9 vera_layer_mode_tile::tileheight#7 vera_layer_mode_tile::tileheight#5 vera_layer_mode_tile::tileheight#6 -Alias vera_layer_mode_tile::mapbase_address#0 = vera_layer_mode_tile::$3 -Alias vera_layer_mode_tile::tilebase_address#0 = vera_layer_mode_tile::$8 -Alias vera_layer_mode_tile::tilebase#1 = vera_layer_mode_tile::tilebase#6 vera_layer_mode_tile::tilebase#11 vera_layer_mode_tile::tilebase#7 -Alias vera_layer_mode_tile::tilebase#12 = vera_layer_mode_tile::tilebase#8 vera_layer_mode_tile::tilebase#13 vera_layer_mode_tile::tilebase#9 -Alias vera_layer_mode_tile::layer#19 = vera_layer_mode_tile::layer#20 vera_layer_mode_tile::layer#30 vera_layer_mode_tile::layer#21 -Alias vera_layer_mode_tile::tileheight#2 = vera_layer_mode_tile::tileheight#3 -Alias vera_layer_mode_text::color_mode#1 = vera_layer_mode_text::color_mode#3 vera_layer_mode_text::color_mode#2 -Alias vera_layer_mode_text::layer#1 = vera_layer_mode_text::layer#4 vera_layer_mode_text::layer#2 vera_layer_mode_text::layer#5 vera_layer_mode_text::layer#3 -Alias vera_tile_area::offset#0 = vera_tile_area::$1 -Alias vera_tile_area::mapbase#10 = vera_tile_area::mapbase#4 vera_tile_area::mapbase#6 vera_tile_area::vera_vram_address01_bankaddr#0 vera_tile_area::vera_vram_address01_bankaddr#1 vera_tile_area::mapbase#9 -Alias vera_tile_area::w#5 = vera_tile_area::w#7 vera_tile_area::w#8 vera_tile_area::w#6 -Alias vera_tile_area::index_l#3 = vera_tile_area::index_l#5 vera_tile_area::index_l#6 vera_tile_area::index_l#4 -Alias vera_tile_area::index_h#6 = vera_tile_area::index_h#8 vera_tile_area::index_h#9 vera_tile_area::index_h#7 -Alias vera_tile_area::rowskip#4 = vera_tile_area::rowskip#6 vera_tile_area::rowskip#7 vera_tile_area::rowskip#5 -Alias vera_tile_area::r#2 = vera_tile_area::r#8 vera_tile_area::r#7 vera_tile_area::r#6 -Alias vera_tile_area::h#10 = vera_tile_area::h#3 vera_tile_area::h#9 vera_tile_area::h#8 -Alias vera_tile_area::vera_vram_address01_incr#0 = vera_tile_area::vera_vram_address01_incr#1 -Alias vera_tile_area::index_l#1 = vera_tile_area::index_l#2 vera_tile_area::index_l#7 -Alias vera_tile_area::index_h#10 = vera_tile_area::index_h#4 vera_tile_area::index_h#5 -Alias vera_tile_area::c#2 = vera_tile_area::c#3 -Alias vera_tile_area::w#10 = vera_tile_area::w#4 vera_tile_area::w#3 -Alias vera_tile_area::mapbase#5 = vera_tile_area::mapbase#8 vera_tile_area::mapbase#7 -Alias vera_tile_area::rowskip#1 = vera_tile_area::rowskip#3 vera_tile_area::rowskip#2 -Alias vera_tile_area::r#3 = vera_tile_area::r#5 vera_tile_area::r#4 -Alias vera_tile_area::h#5 = vera_tile_area::h#7 vera_tile_area::h#6 -Alias vera_layer_get_backcolor::return#2 = vera_layer_get_backcolor::return#4 -Alias clrscr::line_text#0 = clrscr::line_text#8 clrscr::line_text#6 -Alias CONIO_SCREEN_BANK#21 = CONIO_SCREEN_BANK#27 CONIO_SCREEN_BANK#33 -Alias vera_layer_get_textcolor::return#2 = vera_layer_get_textcolor::return#4 -Alias clrscr::line_text#2 = clrscr::line_text#4 clrscr::ch#0 -Alias CONIO_SCREEN_BANK#14 = CONIO_SCREEN_BANK#7 -Alias clrscr::color#3 = clrscr::color#4 -Alias clrscr::l#2 = clrscr::l#5 -Alias clrscr::color#1 = clrscr::color#2 clrscr::color#5 -Alias clrscr::c#2 = clrscr::c#3 -Alias clrscr::line_text#3 = clrscr::line_text#7 clrscr::line_text#5 -Alias clrscr::l#3 = clrscr::l#6 clrscr::l#4 -Alias CONIO_SCREEN_BANK#20 = CONIO_SCREEN_BANK#34 CONIO_SCREEN_BANK#28 -Alias gotoxy::x#6 = gotoxy::x#7 -Alias gotoxy::y#6 = gotoxy::y#7 -Alias vera_layer_get_color::return#3 = vera_layer_get_color::return#6 -Alias CONIO_SCREEN_TEXT#17 = CONIO_SCREEN_TEXT#8 CONIO_SCREEN_TEXT#49 CONIO_SCREEN_TEXT#57 CONIO_SCREEN_TEXT#55 CONIO_SCREEN_TEXT#54 CONIO_SCREEN_TEXT#50 CONIO_SCREEN_TEXT#51 -Alias cputc::c#0 = cputc::c#1 cputc::c#2 -Alias CONIO_SCREEN_BANK#15 = CONIO_SCREEN_BANK#22 CONIO_SCREEN_BANK#8 -Alias cputc::conio_addr#1 = cputc::conio_addr#2 -Alias cputc::color#0 = cputc::color#1 -Alias CONIO_SCREEN_BANK#16 = CONIO_SCREEN_BANK#23 CONIO_SCREEN_BANK#29 -Alias CONIO_SCREEN_TEXT#18 = CONIO_SCREEN_TEXT#24 CONIO_SCREEN_TEXT#31 -Alias conio_x16_init::line#0 = conio_x16_init::line#9 conio_x16_init::line#8 conio_x16_init::line#7 conio_x16_init::line#6 conio_x16_init::line#5 conio_x16_init::line#4 conio_x16_init::line#2 -Alias CONIO_SCREEN_BANK#0 = CONIO_SCREEN_BANK#9 CONIO_SCREEN_BANK#40 CONIO_SCREEN_BANK#38 CONIO_SCREEN_BANK#35 CONIO_SCREEN_BANK#31 CONIO_SCREEN_BANK#30 -Alias CONIO_SCREEN_TEXT#0 = CONIO_SCREEN_TEXT#9 CONIO_SCREEN_TEXT#45 CONIO_SCREEN_TEXT#41 CONIO_SCREEN_TEXT#37 CONIO_SCREEN_TEXT#33 CONIO_SCREEN_TEXT#32 -Alias CONIO_SCREEN_BANK#1 = CONIO_SCREEN_BANK#17 CONIO_SCREEN_BANK#24 CONIO_SCREEN_BANK#10 -Alias CONIO_SCREEN_TEXT#1 = CONIO_SCREEN_TEXT#19 CONIO_SCREEN_TEXT#25 CONIO_SCREEN_TEXT#10 -Alias conio_x16_init::line#1 = conio_x16_init::$9 -Alias vera_layer_get_color::return#4 = vera_layer_get_color::return#7 -Alias clearline::color#1 = clearline::color#2 -Alias clearline::c#2 = clearline::c#3 -Alias insertup::i#2 = insertup::i#3 insertup::i#4 -Alias CONIO_SCREEN_TEXT#12 = CONIO_SCREEN_TEXT#21 CONIO_SCREEN_TEXT#27 CONIO_SCREEN_TEXT#20 -Alias insertup::width#1 = insertup::width#2 insertup::width#3 -Alias insertup::cy#1 = insertup::cy#3 insertup::cy#2 -Alias CONIO_SCREEN_TEXT#34 = CONIO_SCREEN_TEXT#38 CONIO_SCREEN_TEXT#42 -Alias gotoxy::y#2 = cscroll::$5 -Alias vera_layer_get_mapbase_bank::return#2 = vera_layer_get_mapbase_bank::return#4 -Alias CONIO_SCREEN_BANK#11 = CONIO_SCREEN_BANK#2 screenlayer::$0 CONIO_SCREEN_BANK#47 CONIO_SCREEN_BANK#45 CONIO_SCREEN_BANK#43 CONIO_SCREEN_BANK#41 CONIO_SCREEN_BANK#39 CONIO_SCREEN_BANK#36 CONIO_SCREEN_BANK#32 CONIO_SCREEN_BANK#25 CONIO_SCREEN_BANK#18 CONIO_SCREEN_BANK#3 -Alias vera_layer_get_mapbase_offset::return#2 = vera_layer_get_mapbase_offset::return#4 -Alias screenlayer::vera_layer_get_width1_layer#0 = screenlayer::vera_layer_get_width1_layer#1 -Alias CONIO_SCREEN_TEXT#13 = CONIO_SCREEN_TEXT#56 CONIO_SCREEN_TEXT#2 CONIO_SCREEN_TEXT#52 CONIO_SCREEN_TEXT#47 CONIO_SCREEN_TEXT#43 CONIO_SCREEN_TEXT#39 CONIO_SCREEN_TEXT#35 CONIO_SCREEN_TEXT#28 CONIO_SCREEN_TEXT#22 CONIO_SCREEN_TEXT#3 -Alias vera_layer_get_rowshift::return#2 = vera_layer_get_rowshift::return#4 -Alias vera_layer_get_rowskip::return#2 = vera_layer_get_rowskip::return#4 -Alias screenlayer::vera_layer_get_height1_layer#0 = screenlayer::vera_layer_get_height1_layer#1 -Alias printf_str::c#1 = printf_str::$0 printf_str::c#2 -Alias printf_str::putc#8 = printf_str::putc#9 -Alias printf_str::s#0 = printf_str::s#11 -Alias main::textcolor1_color#0 = main::textcolor1_color#1 -Alias CONIO_SCREEN_TEXT#16 = CONIO_SCREEN_TEXT#48 CONIO_SCREEN_TEXT#53 CONIO_SCREEN_TEXT#44 CONIO_SCREEN_TEXT#40 CONIO_SCREEN_TEXT#36 CONIO_SCREEN_TEXT#29 -Alias CONIO_SCREEN_BANK#37 = CONIO_SCREEN_BANK#49 CONIO_SCREEN_BANK#50 CONIO_SCREEN_BANK#48 CONIO_SCREEN_BANK#46 CONIO_SCREEN_BANK#44 CONIO_SCREEN_BANK#42 -Alias main::bgcolor1_color#0 = main::bgcolor1_color#1 -Alias main::tilebase#0 = main::tilebase#3 -Alias main::tilebase#4 = main::tilebase#6 main::tilebase#5 -Alias main::t#2 = main::t#3 main::t#4 -Alias main::column#2 = main::column#3 -Alias main::tile#6 = main::tile#7 -Alias main::c#2 = main::c#3 -Alias main::row#4 = main::row#8 main::row#5 -Alias main::r#2 = main::r#3 main::r#4 -Alias main::tile#12 = main::tile#2 -Alias main::column1#2 = main::column1#3 -Alias main::tile#8 = main::tile#9 -Alias main::c1#2 = main::c1#3 -Alias main::row#10 = main::row#6 main::row#7 -Alias main::r1#2 = main::r1#3 main::r1#4 -Alias main::tile#13 = main::tile#5 -Alias main::vera_layer_show1_layer#0 = main::vera_layer_show1_layer#1 -Alias kbhit::return#2 = kbhit::return#4 -Alias CONIO_SCREEN_BANK#12 = CONIO_SCREEN_BANK#5 CONIO_SCREEN_BANK#26 CONIO_SCREEN_BANK#19 CONIO_SCREEN_BANK#13 CONIO_SCREEN_BANK#6 -Alias CONIO_SCREEN_TEXT#14 = CONIO_SCREEN_TEXT#5 CONIO_SCREEN_TEXT#30 CONIO_SCREEN_TEXT#23 CONIO_SCREEN_TEXT#15 CONIO_SCREEN_TEXT#6 -Successful SSA optimization Pass2AliasElimination -Alias candidate removed (volatile)kbhit::return#0 = kbhit::ch kbhit::return#3 kbhit::return#1 -Alias candidate removed (volatile)screenlayer::vera_layer_get_width1_return#0 = screenlayer::vera_layer_get_width1_return#2 screenlayer::vera_layer_get_width1_return#1 screenlayer::vera_layer_get_width1_return#3 screenlayer::$2 conio_width -Alias candidate removed (volatile)conio_rowshift = screenlayer::$3 -Alias candidate removed (volatile)conio_rowskip = screenlayer::$4 -Alias candidate removed (volatile)screenlayer::vera_layer_get_height1_return#0 = screenlayer::vera_layer_get_height1_return#2 screenlayer::vera_layer_get_height1_return#1 screenlayer::vera_layer_get_height1_return#3 screenlayer::$5 conio_height -Alias vera_layer_mode_tile::mapwidth#10 = vera_layer_mode_tile::mapwidth#2 -Alias vera_layer_mode_tile::layer#10 = vera_layer_mode_tile::layer#22 vera_layer_mode_tile::layer#14 vera_layer_mode_tile::layer#34 vera_layer_mode_tile::layer#19 vera_layer_mode_tile::layer#9 -Alias vera_layer_mode_tile::mapheight#10 = vera_layer_mode_tile::mapheight#14 vera_layer_mode_tile::mapheight#2 -Alias vera_layer_mode_tile::mapbase_address#10 = vera_layer_mode_tile::mapbase_address#13 vera_layer_mode_tile::mapbase_address#21 vera_layer_mode_tile::mapbase_address#3 -Alias vera_layer_mode_tile::tilebase_address#10 = vera_layer_mode_tile::tilebase_address#14 vera_layer_mode_tile::tilebase_address#22 vera_layer_mode_tile::tilebase_address#3 -Alias vera_layer_mode_tile::tilewidth#10 = vera_layer_mode_tile::tilewidth#14 vera_layer_mode_tile::tilewidth#22 vera_layer_mode_tile::tilewidth#2 -Alias vera_layer_mode_tile::tileheight#10 = vera_layer_mode_tile::tileheight#18 vera_layer_mode_tile::tileheight#26 vera_layer_mode_tile::tileheight#4 vera_layer_mode_tile::tileheight#2 -Alias gotoxy::x#4 = gotoxy::x#6 -Alias gotoxy::y#5 = gotoxy::y#6 -Alias CONIO_SCREEN_BANK#0 = CONIO_SCREEN_BANK#1 -Alias CONIO_SCREEN_TEXT#0 = CONIO_SCREEN_TEXT#1 -Successful SSA optimization Pass2AliasElimination -Alias candidate removed (volatile)kbhit::return#0 = kbhit::ch kbhit::return#3 kbhit::return#1 -Alias candidate removed (volatile)screenlayer::vera_layer_get_width1_return#0 = screenlayer::vera_layer_get_width1_return#2 screenlayer::vera_layer_get_width1_return#1 screenlayer::vera_layer_get_width1_return#3 screenlayer::$2 conio_width -Alias candidate removed (volatile)conio_rowshift = screenlayer::$3 -Alias candidate removed (volatile)conio_rowskip = screenlayer::$4 -Alias candidate removed (volatile)screenlayer::vera_layer_get_height1_return#0 = screenlayer::vera_layer_get_height1_return#2 screenlayer::vera_layer_get_height1_return#1 screenlayer::vera_layer_get_height1_return#3 screenlayer::$5 conio_height -Identical Phi Values memcpy_to_vram::end#1 memcpy_to_vram::end#0 -Identical Phi Values memcpy_in_vram::src#1 memcpy_in_vram::src#0 -Identical Phi Values memcpy_in_vram::src_increment#1 memcpy_in_vram::src_increment#0 -Identical Phi Values memcpy_in_vram::src_bank#1 memcpy_in_vram::src_bank#0 -Identical Phi Values memcpy_in_vram::dest#1 memcpy_in_vram::dest#0 -Identical Phi Values memcpy_in_vram::dest_increment#1 memcpy_in_vram::dest_increment#0 -Identical Phi Values memcpy_in_vram::dest_bank#1 memcpy_in_vram::dest_bank#0 -Identical Phi Values memcpy_in_vram::num#2 memcpy_in_vram::num#0 -Identical Phi Values memcpy_in_vram::num#1 memcpy_in_vram::num#2 -Identical Phi Values vera_layer_set_config::layer#1 vera_layer_set_config::layer#0 -Identical Phi Values vera_layer_set_config::config#1 vera_layer_set_config::config#0 -Identical Phi Values vera_layer_get_mapbase_bank::layer#1 vera_layer_get_mapbase_bank::layer#0 -Identical Phi Values vera_layer_get_mapbase_offset::layer#1 vera_layer_get_mapbase_offset::layer#0 -Identical Phi Values vera_layer_set_tilebase::layer#1 vera_layer_set_tilebase::layer#0 -Identical Phi Values vera_layer_set_tilebase::tilebase#1 vera_layer_set_tilebase::tilebase#0 -Identical Phi Values vera_layer_get_textcolor::layer#1 vera_layer_get_textcolor::layer#0 -Identical Phi Values vera_layer_get_backcolor::layer#1 vera_layer_get_backcolor::layer#0 -Identical Phi Values vera_layer_get_rowshift::layer#1 vera_layer_get_rowshift::layer#0 -Identical Phi Values vera_layer_get_rowskip::layer#1 vera_layer_get_rowskip::layer#0 -Identical Phi Values vera_layer_mode_text::layer#1 vera_layer_mode_text::layer#0 -Identical Phi Values vera_layer_mode_text::mapbase_address#1 vera_layer_mode_text::mapbase_address#0 -Identical Phi Values vera_layer_mode_text::tilebase_address#1 vera_layer_mode_text::tilebase_address#0 -Identical Phi Values vera_layer_mode_text::mapwidth#1 vera_layer_mode_text::mapwidth#0 -Identical Phi Values vera_layer_mode_text::mapheight#1 vera_layer_mode_text::mapheight#0 -Identical Phi Values vera_layer_mode_text::tilewidth#1 vera_layer_mode_text::tilewidth#0 -Identical Phi Values vera_layer_mode_text::tileheight#1 vera_layer_mode_text::tileheight#0 -Identical Phi Values vera_layer_mode_text::color_mode#1 vera_layer_mode_text::color_mode#0 -Identical Phi Values vera_tile_area::w#10 vera_tile_area::w#5 -Identical Phi Values vera_tile_area::index_l#1 vera_tile_area::index_l#3 -Identical Phi Values vera_tile_area::index_h#10 vera_tile_area::index_h#6 -Identical Phi Values vera_tile_area::mapbase#5 vera_tile_area::mapbase#10 -Identical Phi Values vera_tile_area::rowskip#1 vera_tile_area::rowskip#4 -Identical Phi Values vera_tile_area::r#3 vera_tile_area::r#2 -Identical Phi Values vera_tile_area::h#5 vera_tile_area::h#10 -Identical Phi Values CONIO_SCREEN_TEXT#7 CONIO_SCREEN_TEXT#16 -Identical Phi Values CONIO_SCREEN_BANK#21 CONIO_SCREEN_BANK#37 -Identical Phi Values clrscr::color#1 clrscr::color#3 -Identical Phi Values clrscr::line_text#3 clrscr::line_text#2 -Identical Phi Values clrscr::l#3 clrscr::l#2 -Identical Phi Values CONIO_SCREEN_BANK#20 CONIO_SCREEN_BANK#14 -Identical Phi Values screensize::x#1 screensize::x#0 -Identical Phi Values screensize::y#1 screensize::y#0 -Identical Phi Values CONIO_SCREEN_TEXT#46 CONIO_SCREEN_TEXT#17 -Identical Phi Values kbhit::return#3 kbhit::return#0 -Identical Phi Values CONIO_SCREEN_BANK#16 CONIO_SCREEN_BANK#4 -Identical Phi Values CONIO_SCREEN_TEXT#18 CONIO_SCREEN_TEXT#4 -Identical Phi Values CONIO_SCREEN_BANK#0 CONIO_SCREEN_BANK#11 -Identical Phi Values CONIO_SCREEN_TEXT#0 CONIO_SCREEN_TEXT#13 -Identical Phi Values CONIO_SCREEN_TEXT#11 CONIO_SCREEN_TEXT#12 -Identical Phi Values clearline::color#1 clearline::color#0 -Identical Phi Values CONIO_SCREEN_TEXT#26 CONIO_SCREEN_TEXT#34 -Identical Phi Values insertup::cy#1 insertup::cy#0 -Identical Phi Values CONIO_SCREEN_TEXT#12 CONIO_SCREEN_TEXT#26 -Identical Phi Values insertup::width#1 insertup::width#0 -Identical Phi Values CONIO_SCREEN_TEXT#34 CONIO_SCREEN_TEXT#46 -Identical Phi Values screenlayer::layer#1 screenlayer::layer#0 -Identical Phi Values screenlayer::vera_layer_get_width1_return#2 screenlayer::vera_layer_get_width1_return#0 -Identical Phi Values screenlayer::vera_layer_get_width1_return#3 screenlayer::vera_layer_get_width1_return#1 -Identical Phi Values screenlayer::vera_layer_get_height1_return#2 screenlayer::vera_layer_get_height1_return#0 -Identical Phi Values screenlayer::vera_layer_get_height1_return#3 screenlayer::vera_layer_get_height1_return#1 -Identical Phi Values printf_str::putc#8 printf_str::putc#10 -Identical Phi Values CONIO_SCREEN_TEXT#16 CONIO_SCREEN_TEXT#14 -Identical Phi Values CONIO_SCREEN_BANK#37 CONIO_SCREEN_BANK#12 -Identical Phi Values main::tilebase#4 main::tilebase#7 -Identical Phi Values main::t#2 main::t#5 -Identical Phi Values main::row#4 main::row#9 -Identical Phi Values main::r#2 main::r#5 -Identical Phi Values main::row#10 main::row#11 -Identical Phi Values main::r1#2 main::r1#5 -Identical Phi Values CONIO_SCREEN_BANK#12 CONIO_SCREEN_BANK#0 -Identical Phi Values CONIO_SCREEN_TEXT#14 CONIO_SCREEN_TEXT#0 -Successful SSA optimization Pass2IdenticalPhiElimination -Identical Phi Values vera_tile_area::h#10 vera_tile_area::h#4 -Identical Phi Values vera_tile_area::w#5 vera_tile_area::w#9 -Identical Phi Values vera_tile_area::index_l#3 vera_tile_area::index_l#0 -Identical Phi Values vera_tile_area::index_h#6 vera_tile_area::index_h#3 -Identical Phi Values vera_tile_area::rowskip#4 vera_tile_area::rowskip#0 -Identical Phi Values CONIO_SCREEN_BANK#14 CONIO_SCREEN_BANK#11 -Identical Phi Values clrscr::color#3 clrscr::color#0 -Successful SSA optimization Pass2IdenticalPhiElimination -Simple Condition memcpy_to_vram::$4 [13] if(memcpy_to_vram::s#2!=memcpy_to_vram::end#0) goto memcpy_to_vram::@2 -Simple Condition memcpy_in_vram::$6 [35] if(memcpy_in_vram::i#2> 7 - [147] screensize::$1 = $28 << screensize::hscale#0 - [148] *screensize::x#0 = screensize::$1 - [149] screensize::vscale#0 = *VERA_DC_VSCALE >> 7 - [150] screensize::$3 = $1e << screensize::vscale#0 - [151] *screensize::y#0 = screensize::$3 - to:screensize::@return -screensize::@return: scope:[screensize] from screensize - [152] return - to:@return - -void screenlayer(char layer) -screenlayer: scope:[screenlayer] from conio_x16_init::@4 - [153] conio_screen_layer = screenlayer::layer#0 - [154] vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer - [155] call vera_layer_get_mapbase_bank - [156] vera_layer_get_mapbase_bank::return#2 = vera_layer_get_mapbase_bank::return#0 - to:screenlayer::@3 -screenlayer::@3: scope:[screenlayer] from screenlayer - [157] CONIO_SCREEN_BANK#11 = vera_layer_get_mapbase_bank::return#2 - [158] vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer - [159] call vera_layer_get_mapbase_offset - [160] vera_layer_get_mapbase_offset::return#2 = vera_layer_get_mapbase_offset::return#0 - to:screenlayer::@4 -screenlayer::@4: scope:[screenlayer] from screenlayer::@3 - [161] CONIO_SCREEN_TEXT#13 = vera_layer_get_mapbase_offset::return#2 - [162] screenlayer::vera_layer_get_width1_layer#0 = conio_screen_layer - to:screenlayer::vera_layer_get_width1 -screenlayer::vera_layer_get_width1: scope:[screenlayer] from screenlayer::@4 - [163] screenlayer::vera_layer_get_width1_$2 = screenlayer::vera_layer_get_width1_layer#0 << 1 - [164] screenlayer::vera_layer_get_width1_config#0 = vera_layer_config[screenlayer::vera_layer_get_width1_$2] - [165] screenlayer::vera_layer_get_width1_$0 = *screenlayer::vera_layer_get_width1_config#0 & VERA_LAYER_WIDTH_MASK - [166] screenlayer::vera_layer_get_width1_$1 = screenlayer::vera_layer_get_width1_$0 >> 4 - [167] screenlayer::vera_layer_get_width1_$3 = screenlayer::vera_layer_get_width1_$1 << 1 - [168] screenlayer::vera_layer_get_width1_return#0 = VERA_LAYER_WIDTH[screenlayer::vera_layer_get_width1_$3] - to:screenlayer::vera_layer_get_width1_@return -screenlayer::vera_layer_get_width1_@return: scope:[screenlayer] from screenlayer::vera_layer_get_width1 - [169] screenlayer::vera_layer_get_width1_return#1 = screenlayer::vera_layer_get_width1_return#0 - to:screenlayer::@1 -screenlayer::@1: scope:[screenlayer] from screenlayer::vera_layer_get_width1_@return - [170] screenlayer::$2 = screenlayer::vera_layer_get_width1_return#1 - [171] conio_width = screenlayer::$2 - [172] vera_layer_get_rowshift::layer#0 = conio_screen_layer - [173] call vera_layer_get_rowshift - [174] vera_layer_get_rowshift::return#2 = vera_layer_get_rowshift::return#0 - to:screenlayer::@5 -screenlayer::@5: scope:[screenlayer] from screenlayer::@1 - [175] screenlayer::$3 = vera_layer_get_rowshift::return#2 - [176] conio_rowshift = screenlayer::$3 - [177] vera_layer_get_rowskip::layer#0 = conio_screen_layer - [178] call vera_layer_get_rowskip - [179] vera_layer_get_rowskip::return#2 = vera_layer_get_rowskip::return#0 - to:screenlayer::@6 -screenlayer::@6: scope:[screenlayer] from screenlayer::@5 - [180] screenlayer::$4 = vera_layer_get_rowskip::return#2 - [181] conio_rowskip = screenlayer::$4 - [182] screenlayer::vera_layer_get_height1_layer#0 = conio_screen_layer - to:screenlayer::vera_layer_get_height1 -screenlayer::vera_layer_get_height1: scope:[screenlayer] from screenlayer::@6 - [183] screenlayer::vera_layer_get_height1_$2 = screenlayer::vera_layer_get_height1_layer#0 << 1 - [184] screenlayer::vera_layer_get_height1_config#0 = vera_layer_config[screenlayer::vera_layer_get_height1_$2] - [185] screenlayer::vera_layer_get_height1_$0 = *screenlayer::vera_layer_get_height1_config#0 & VERA_LAYER_HEIGHT_MASK - [186] screenlayer::vera_layer_get_height1_$1 = screenlayer::vera_layer_get_height1_$0 >> 6 - [187] screenlayer::vera_layer_get_height1_$3 = screenlayer::vera_layer_get_height1_$1 << 1 - [188] screenlayer::vera_layer_get_height1_return#0 = VERA_LAYER_HEIGHT[screenlayer::vera_layer_get_height1_$3] - to:screenlayer::vera_layer_get_height1_@return -screenlayer::vera_layer_get_height1_@return: scope:[screenlayer] from screenlayer::vera_layer_get_height1 - [189] screenlayer::vera_layer_get_height1_return#1 = screenlayer::vera_layer_get_height1_return#0 - to:screenlayer::@2 -screenlayer::@2: scope:[screenlayer] from screenlayer::vera_layer_get_height1_@return - [190] screenlayer::$5 = screenlayer::vera_layer_get_height1_return#1 - [191] conio_height = screenlayer::$5 - to:screenlayer::@return -screenlayer::@return: scope:[screenlayer] from screenlayer::@2 - [192] return - to:@return - -char vera_layer_set_textcolor(char layer , char color) -vera_layer_set_textcolor: scope:[vera_layer_set_textcolor] from conio_x16_init::@5 main::textcolor1 - [193] vera_layer_set_textcolor::layer#2 = phi( conio_x16_init::@5/1, main::textcolor1/vera_layer_set_textcolor::layer#1 ) - [194] vera_layer_textcolor[vera_layer_set_textcolor::layer#2] = WHITE - to:vera_layer_set_textcolor::@return -vera_layer_set_textcolor::@return: scope:[vera_layer_set_textcolor] from vera_layer_set_textcolor - [195] return - to:@return - -char vera_layer_set_backcolor(char layer , char color) -vera_layer_set_backcolor: scope:[vera_layer_set_backcolor] from conio_x16_init::@6 main::bgcolor1 - [196] vera_layer_set_backcolor::color#2 = phi( conio_x16_init::@6/BLUE, main::bgcolor1/BLACK ) - [196] vera_layer_set_backcolor::layer#2 = phi( conio_x16_init::@6/1, main::bgcolor1/vera_layer_set_backcolor::layer#1 ) - [197] vera_layer_backcolor[vera_layer_set_backcolor::layer#2] = vera_layer_set_backcolor::color#2 - to:vera_layer_set_backcolor::@return -vera_layer_set_backcolor::@return: scope:[vera_layer_set_backcolor] from vera_layer_set_backcolor - [198] return - to:@return - -void vera_layer_set_mapbase(char layer , char mapbase) -vera_layer_set_mapbase: scope:[vera_layer_set_mapbase] from conio_x16_init::@7 conio_x16_init::@8 vera_layer_mode_tile::@27 - [199] vera_layer_set_mapbase::mapbase#3 = phi( conio_x16_init::@7/$20, conio_x16_init::@8/0, vera_layer_mode_tile::@27/vera_layer_set_mapbase::mapbase#0 ) - [199] vera_layer_set_mapbase::layer#3 = phi( conio_x16_init::@7/0, conio_x16_init::@8/1, vera_layer_mode_tile::@27/vera_layer_set_mapbase::layer#0 ) - [200] vera_layer_set_mapbase::$0 = vera_layer_set_mapbase::layer#3 << 1 - [201] vera_layer_set_mapbase::addr#0 = vera_layer_mapbase[vera_layer_set_mapbase::$0] - [202] *vera_layer_set_mapbase::addr#0 = vera_layer_set_mapbase::mapbase#3 - to:vera_layer_set_mapbase::@return -vera_layer_set_mapbase::@return: scope:[vera_layer_set_mapbase] from vera_layer_set_mapbase - [203] return - to:@return - -void gotoxy(char x , char y) -gotoxy: scope:[gotoxy] from conio_x16_init::@1 cscroll::@5 main::@13 - [204] gotoxy::y#4 = phi( conio_x16_init::@1/gotoxy::y#1, cscroll::@5/gotoxy::y#2, main::@13/$32 ) - [205] if(gotoxy::y#4<=conio_screen_height) goto gotoxy::@4 - to:gotoxy::@1 -gotoxy::@4: scope:[gotoxy] from gotoxy - [206] phi() - to:gotoxy::@1 -gotoxy::@1: scope:[gotoxy] from gotoxy gotoxy::@4 - [207] gotoxy::y#5 = phi( gotoxy::@4/gotoxy::y#4, gotoxy/0 ) - [208] if(0> 1 - [301] vera_layer_mode_tile::mapbase#0 = byte1 vera_layer_mode_tile::mapbase_address#0 - [302] vera_layer_set_mapbase::layer#0 = vera_layer_mode_tile::layer#10 - [303] vera_layer_set_mapbase::mapbase#0 = vera_layer_mode_tile::mapbase#0 - [304] call vera_layer_set_mapbase - to:vera_layer_mode_tile::@28 -vera_layer_mode_tile::@28: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@27 - [305] vera_layer_mode_tile::$6 = word0 vera_layer_mode_tile::tilebase_address#10 - [306] vera_tilebase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$6 - [307] vera_layer_mode_tile::$7 = byte2 vera_layer_mode_tile::tilebase_address#10 - [308] vera_tilebase_bank[vera_layer_mode_tile::layer#10] = vera_layer_mode_tile::$7 - [309] vera_tilebase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::tilebase_address#10 - [310] vera_layer_mode_tile::tilebase_address#0 = vera_layer_mode_tile::tilebase_address#10 >> 1 - [311] vera_layer_mode_tile::tilebase#0 = byte1 vera_layer_mode_tile::tilebase_address#0 - [312] vera_layer_mode_tile::tilebase#1 = vera_layer_mode_tile::tilebase#0 & VERA_LAYER_TILEBASE_MASK - [313] if(vera_layer_mode_tile::tilewidth#10==8) goto vera_layer_mode_tile::@23 - to:vera_layer_mode_tile::@21 -vera_layer_mode_tile::@21: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@28 - [314] if(vera_layer_mode_tile::tilewidth#10!=$10) goto vera_layer_mode_tile::@23 - to:vera_layer_mode_tile::@22 -vera_layer_mode_tile::@22: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@21 - [315] vera_layer_mode_tile::tilebase#3 = vera_layer_mode_tile::tilebase#1 | VERA_TILEBASE_WIDTH_16 - to:vera_layer_mode_tile::@23 -vera_layer_mode_tile::@23: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@21 vera_layer_mode_tile::@22 vera_layer_mode_tile::@28 - [316] vera_layer_mode_tile::tilebase#12 = phi( vera_layer_mode_tile::@21/vera_layer_mode_tile::tilebase#1, vera_layer_mode_tile::@28/vera_layer_mode_tile::tilebase#1, vera_layer_mode_tile::@22/vera_layer_mode_tile::tilebase#3 ) - [317] if(vera_layer_mode_tile::tileheight#10==8) goto vera_layer_mode_tile::@26 - to:vera_layer_mode_tile::@24 -vera_layer_mode_tile::@24: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@23 - [318] if(vera_layer_mode_tile::tileheight#10!=$10) goto vera_layer_mode_tile::@26 - to:vera_layer_mode_tile::@25 -vera_layer_mode_tile::@25: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@24 - [319] vera_layer_mode_tile::tilebase#5 = vera_layer_mode_tile::tilebase#12 | VERA_TILEBASE_HEIGHT_16 - to:vera_layer_mode_tile::@26 -vera_layer_mode_tile::@26: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@23 vera_layer_mode_tile::@24 vera_layer_mode_tile::@25 - [320] vera_layer_mode_tile::tilebase#10 = phi( vera_layer_mode_tile::@24/vera_layer_mode_tile::tilebase#12, vera_layer_mode_tile::@23/vera_layer_mode_tile::tilebase#12, vera_layer_mode_tile::@25/vera_layer_mode_tile::tilebase#5 ) - [321] vera_layer_set_tilebase::layer#0 = vera_layer_mode_tile::layer#10 - [322] vera_layer_set_tilebase::tilebase#0 = vera_layer_mode_tile::tilebase#10 - [323] call vera_layer_set_tilebase - to:vera_layer_mode_tile::@return -vera_layer_mode_tile::@return: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@26 - [324] return - to:@return -vera_layer_mode_tile::@18: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@15 - [325] vera_layer_mode_tile::config#11 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_128 - to:vera_layer_mode_tile::@20 -vera_layer_mode_tile::@17: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@14 - [326] vera_layer_mode_tile::config#10 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_64 - to:vera_layer_mode_tile::@20 -vera_layer_mode_tile::@11: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@7 - [327] vera_layer_mode_tile::config#7 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_128 - [328] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 8 - [329] vera_layer_mode_tile::$13 = vera_layer_mode_tile::layer#10 << 1 - [330] vera_layer_rowskip[vera_layer_mode_tile::$13] = $100 - to:vera_layer_mode_tile::@13 -vera_layer_mode_tile::@10: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@6 - [331] vera_layer_mode_tile::config#6 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_64 - [332] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 7 - [333] vera_layer_mode_tile::$12 = vera_layer_mode_tile::layer#10 << 1 - [334] vera_layer_rowskip[vera_layer_mode_tile::$12] = $80 - to:vera_layer_mode_tile::@13 -vera_layer_mode_tile::@9: scope:[vera_layer_mode_tile] from vera_layer_mode_tile::@5 - [335] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 6 - [336] vera_layer_mode_tile::$11 = vera_layer_mode_tile::layer#10 << 1 - [337] vera_layer_rowskip[vera_layer_mode_tile::$11] = $40 - to:vera_layer_mode_tile::@13 - -void memcpy_to_vram(char vbank , void *vdest , void *src , unsigned int num) -memcpy_to_vram: scope:[memcpy_to_vram] from main::@15 main::@3 - [338] memcpy_to_vram::vdest#2 = phi( main::@15/(void *)(char *) 16384, main::@3/memcpy_to_vram::vdest#1 ) - [339] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL - [340] memcpy_to_vram::$0 = byte0 memcpy_to_vram::vdest#2 - [341] *VERA_ADDRX_L = memcpy_to_vram::$0 - [342] memcpy_to_vram::$1 = byte1 memcpy_to_vram::vdest#2 - [343] *VERA_ADDRX_M = memcpy_to_vram::$1 - [344] *VERA_ADDRX_H = VERA_INC_1|1 - to:memcpy_to_vram::@1 -memcpy_to_vram::@1: scope:[memcpy_to_vram] from memcpy_to_vram memcpy_to_vram::@2 - [345] memcpy_to_vram::s#2 = phi( memcpy_to_vram/(char *)(void *)main::tiles, memcpy_to_vram::@2/memcpy_to_vram::s#1 ) - [346] if(memcpy_to_vram::s#2!=memcpy_to_vram::end#0) goto memcpy_to_vram::@2 - to:memcpy_to_vram::@return -memcpy_to_vram::@return: scope:[memcpy_to_vram] from memcpy_to_vram::@1 - [347] return - to:@return -memcpy_to_vram::@2: scope:[memcpy_to_vram] from memcpy_to_vram::@1 - [348] *VERA_DATA0 = *memcpy_to_vram::s#2 - [349] memcpy_to_vram::s#1 = ++ memcpy_to_vram::s#2 - to:memcpy_to_vram::@1 - -void vera_tile_area(char layer , unsigned int tileindex , char x , char y , char w , char h , char hflip , char vflip , char offset) -vera_tile_area: scope:[vera_tile_area] from main::@4 main::@6 main::@9 - [350] vera_tile_area::w#9 = phi( main::@9/2, main::@4/$50, main::@6/1 ) - [350] vera_tile_area::h#4 = phi( main::@9/2, main::@4/$3c, main::@6/1 ) - [350] vera_tile_area::x#3 = phi( main::@9/vera_tile_area::x#2, main::@4/0, main::@6/vera_tile_area::x#1 ) - [350] vera_tile_area::y#3 = phi( main::@9/vera_tile_area::y#2, main::@4/0, main::@6/vera_tile_area::y#1 ) - [350] vera_tile_area::tileindex#3 = phi( main::@9/vera_tile_area::tileindex#2, main::@4/0, main::@6/vera_tile_area::tileindex#1 ) - [351] vera_tile_area::mapbase#0 = *vera_mapbase_address - [352] vera_tile_area::shift#0 = *vera_layer_rowshift - [353] vera_tile_area::rowskip#0 = 1 << vera_tile_area::shift#0 - [354] vera_tile_area::hflip#0 = *vera_layer_hflip - [355] vera_tile_area::vflip#0 = *vera_layer_vflip - [356] vera_tile_area::index_l#0 = byte0 vera_tile_area::tileindex#3 - [357] vera_tile_area::index_h#0 = byte1 vera_tile_area::tileindex#3 - [358] vera_tile_area::index_h#1 = vera_tile_area::index_h#0 | vera_tile_area::hflip#0 - [359] vera_tile_area::index_h#2 = vera_tile_area::index_h#1 | vera_tile_area::vflip#0 - [360] vera_tile_area::$10 = (unsigned int)vera_tile_area::y#3 - [361] vera_tile_area::$4 = vera_tile_area::$10 << vera_tile_area::shift#0 - [362] vera_tile_area::mapbase#1 = vera_tile_area::mapbase#0 + vera_tile_area::$4 - [363] vera_tile_area::$5 = vera_tile_area::x#3 << 1 - [364] vera_tile_area::mapbase#2 = vera_tile_area::mapbase#1 + vera_tile_area::$5 - to:vera_tile_area::@1 -vera_tile_area::@1: scope:[vera_tile_area] from vera_tile_area vera_tile_area::@4 - [365] vera_tile_area::mapbase#10 = phi( vera_tile_area/vera_tile_area::mapbase#2, vera_tile_area::@4/vera_tile_area::mapbase#3 ) - [365] vera_tile_area::r#2 = phi( vera_tile_area/0, vera_tile_area::@4/vera_tile_area::r#1 ) - [366] if(vera_tile_area::r#2$0000 - rts - - continue1: - nop - }} - [394] kbhit::return#0 = kbhit::ch - to:kbhit::@return -kbhit::@return: scope:[kbhit] from kbhit - [395] kbhit::return#1 = kbhit::return#0 - [396] return - to:@return - -void vera_layer_set_text_color_mode(char layer , char color_mode) -vera_layer_set_text_color_mode: scope:[vera_layer_set_text_color_mode] from vera_layer_mode_text::@1 - [397] vera_layer_set_text_color_mode::addr#0 = *(vera_layer_config+vera_layer_mode_text::layer#0*SIZEOF_POINTER) - [398] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 & ~VERA_LAYER_CONFIG_256C - [399] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 - to:vera_layer_set_text_color_mode::@return -vera_layer_set_text_color_mode::@return: scope:[vera_layer_set_text_color_mode] from vera_layer_set_text_color_mode - [400] return - to:@return - -char vera_layer_get_mapbase_bank(char layer) -vera_layer_get_mapbase_bank: scope:[vera_layer_get_mapbase_bank] from screenlayer - [401] vera_layer_get_mapbase_bank::return#0 = vera_mapbase_bank[vera_layer_get_mapbase_bank::layer#0] - to:vera_layer_get_mapbase_bank::@return -vera_layer_get_mapbase_bank::@return: scope:[vera_layer_get_mapbase_bank] from vera_layer_get_mapbase_bank - [402] return - to:@return - -unsigned int vera_layer_get_mapbase_offset(char layer) -vera_layer_get_mapbase_offset: scope:[vera_layer_get_mapbase_offset] from screenlayer::@3 - [403] vera_layer_get_mapbase_offset::$0 = vera_layer_get_mapbase_offset::layer#0 << 1 - [404] vera_layer_get_mapbase_offset::return#0 = vera_mapbase_offset[vera_layer_get_mapbase_offset::$0] - to:vera_layer_get_mapbase_offset::@return -vera_layer_get_mapbase_offset::@return: scope:[vera_layer_get_mapbase_offset] from vera_layer_get_mapbase_offset - [405] return - to:@return - -char vera_layer_get_rowshift(char layer) -vera_layer_get_rowshift: scope:[vera_layer_get_rowshift] from screenlayer::@1 - [406] vera_layer_get_rowshift::return#0 = vera_layer_rowshift[vera_layer_get_rowshift::layer#0] - to:vera_layer_get_rowshift::@return -vera_layer_get_rowshift::@return: scope:[vera_layer_get_rowshift] from vera_layer_get_rowshift - [407] return - to:@return - -unsigned int vera_layer_get_rowskip(char layer) -vera_layer_get_rowskip: scope:[vera_layer_get_rowskip] from screenlayer::@5 - [408] vera_layer_get_rowskip::$0 = vera_layer_get_rowskip::layer#0 << 1 - [409] vera_layer_get_rowskip::return#0 = vera_layer_rowskip[vera_layer_get_rowskip::$0] - to:vera_layer_get_rowskip::@return -vera_layer_get_rowskip::@return: scope:[vera_layer_get_rowskip] from vera_layer_get_rowskip - [410] return - to:@return - -void cscroll() -cscroll: scope:[cscroll] from cputln - [411] if(conio_cursor_y[conio_screen_layer]> 7 [ screensize::hscale#0 ] ( screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::hscale#0 ] { } conio_x16_init:8::screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::hscale#0 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ conio_x16_init::line#3 conio_x16_init::line#1 conio_x16_init::line#0 ] -Statement [147] screensize::$1 = $28 << screensize::hscale#0 [ screensize::$1 ] ( screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$1 ] { } conio_x16_init:8::screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$1 ] { } ) always clobbers reg byte a -Statement [149] screensize::vscale#0 = *VERA_DC_VSCALE >> 7 [ screensize::vscale#0 ] ( screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::vscale#0 ] { } conio_x16_init:8::screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::vscale#0 ] { } ) always clobbers reg byte a -Statement [150] screensize::$3 = $1e << screensize::vscale#0 [ screensize::$3 ] ( screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$3 ] { } conio_x16_init:8::screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$3 ] { } ) always clobbers reg byte a -Statement [153] conio_screen_layer = screenlayer::layer#0 [ conio_screen_layer ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer ] { { vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_bank::return#0 = vera_layer_get_mapbase_bank::return#2 } } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer ] { { vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_bank::return#0 = vera_layer_get_mapbase_bank::return#2 } } ) always clobbers reg byte a -Statement [160] vera_layer_get_mapbase_offset::return#2 = vera_layer_get_mapbase_offset::return#0 [ conio_screen_layer CONIO_SCREEN_BANK#11 vera_layer_get_mapbase_offset::return#2 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 vera_layer_get_mapbase_offset::return#2 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 vera_layer_get_mapbase_offset::return#2 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ CONIO_SCREEN_BANK#11 ] -Statement [161] CONIO_SCREEN_TEXT#13 = vera_layer_get_mapbase_offset::return#2 [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } ) always clobbers reg byte a -Statement [163] screenlayer::vera_layer_get_width1_$2 = screenlayer::vera_layer_get_width1_layer#0 << 1 [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$2 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$2 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$2 ] { } ) always clobbers reg byte a -Statement [164] screenlayer::vera_layer_get_width1_config#0 = vera_layer_config[screenlayer::vera_layer_get_width1_$2] [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_config#0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_config#0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_config#0 ] { } ) always clobbers reg byte a -Statement [165] screenlayer::vera_layer_get_width1_$0 = *screenlayer::vera_layer_get_width1_config#0 & VERA_LAYER_WIDTH_MASK [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$0 ] { } ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for mem[1] [ conio_x16_init::line#3 conio_x16_init::line#1 conio_x16_init::line#0 ] -Removing always clobbered register reg byte y as potential for mem[1] [ CONIO_SCREEN_BANK#11 ] -Statement [166] screenlayer::vera_layer_get_width1_$1 = screenlayer::vera_layer_get_width1_$0 >> 4 [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$1 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$1 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$1 ] { } ) always clobbers reg byte a -Statement [167] screenlayer::vera_layer_get_width1_$3 = screenlayer::vera_layer_get_width1_$1 << 1 [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$3 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$3 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$3 ] { } ) always clobbers reg byte a -Statement [168] screenlayer::vera_layer_get_width1_return#0 = VERA_LAYER_WIDTH[screenlayer::vera_layer_get_width1_$3] [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_return#0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_return#0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_return#0 ] { } ) always clobbers reg byte a -Statement [169] screenlayer::vera_layer_get_width1_return#1 = screenlayer::vera_layer_get_width1_return#0 [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_return#1 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_return#1 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_return#1 ] { } ) always clobbers reg byte a -Statement [170] screenlayer::$2 = screenlayer::vera_layer_get_width1_return#1 [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$2 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$2 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$2 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } ) always clobbers reg byte a -Statement [171] conio_width = screenlayer::$2 [ conio_screen_layer conio_width CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } ) always clobbers reg byte a -Statement [179] vera_layer_get_rowskip::return#2 = vera_layer_get_rowskip::return#0 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_get_rowskip::return#2 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_get_rowskip::return#2 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_get_rowskip::return#2 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } ) always clobbers reg byte a -Statement [180] screenlayer::$4 = vera_layer_get_rowskip::return#2 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$4 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$4 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$4 ] { } ) always clobbers reg byte a -Statement [181] conio_rowskip = screenlayer::$4 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } ) always clobbers reg byte a -Statement [183] screenlayer::vera_layer_get_height1_$2 = screenlayer::vera_layer_get_height1_layer#0 << 1 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$2 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$2 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$2 ] { } ) always clobbers reg byte a -Statement [184] screenlayer::vera_layer_get_height1_config#0 = vera_layer_config[screenlayer::vera_layer_get_height1_$2] [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_config#0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_config#0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_config#0 ] { } ) always clobbers reg byte a -Statement [185] screenlayer::vera_layer_get_height1_$0 = *screenlayer::vera_layer_get_height1_config#0 & VERA_LAYER_HEIGHT_MASK [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$0 ] { } ) always clobbers reg byte a reg byte y -Statement [186] screenlayer::vera_layer_get_height1_$1 = screenlayer::vera_layer_get_height1_$0 >> 6 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$1 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$1 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$1 ] { } ) always clobbers reg byte a -Statement [187] screenlayer::vera_layer_get_height1_$3 = screenlayer::vera_layer_get_height1_$1 << 1 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$3 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$3 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$3 ] { } ) always clobbers reg byte a -Statement [188] screenlayer::vera_layer_get_height1_return#0 = VERA_LAYER_HEIGHT[screenlayer::vera_layer_get_height1_$3] [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_return#0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_return#0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_return#0 ] { } ) always clobbers reg byte a -Statement [189] screenlayer::vera_layer_get_height1_return#1 = screenlayer::vera_layer_get_height1_return#0 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_return#1 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_return#1 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_return#1 ] { } ) always clobbers reg byte a -Statement [190] screenlayer::$5 = screenlayer::vera_layer_get_height1_return#1 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$5 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$5 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$5 ] { } ) always clobbers reg byte a -Statement [191] conio_height = screenlayer::$5 [ conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } ) always clobbers reg byte a -Statement [194] vera_layer_textcolor[vera_layer_set_textcolor::layer#2] = WHITE [ ] ( vera_layer_set_textcolor:19 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } conio_x16_init:8::vera_layer_set_textcolor:19 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } main:10::vera_layer_set_textcolor:67 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { { vera_layer_set_textcolor::layer#1 = vera_layer_set_textcolor::layer#2 conio_screen_layer } } ) always clobbers reg byte a -Statement [200] vera_layer_set_mapbase::$0 = vera_layer_set_mapbase::layer#3 << 1 [ vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] ( vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } conio_x16_init:8::vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } conio_x16_init:8::vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } main:10::vera_layer_mode_tile:73::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:13::vera_layer_mode_tile:142::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:113 [ vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::mapbase#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:207 [ vera_layer_mode_tile::layer#10 ] -Removing always clobbered register reg byte a as potential for mem[1] [ vera_layer_mode_tile::tilewidth#10 ] -Removing always clobbered register reg byte a as potential for mem[1] [ vera_layer_mode_tile::tileheight#10 ] -Removing always clobbered register reg byte a as potential for zp[1]:206 [ vera_layer_mode_tile::$17 ] -Removing always clobbered register reg byte a as potential for zp[1]:205 [ vera_layer_mode_tile::$18 ] -Statement [201] vera_layer_set_mapbase::addr#0 = vera_layer_mapbase[vera_layer_set_mapbase::$0] [ vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] ( vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } conio_x16_init:8::vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } conio_x16_init:8::vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } main:10::vera_layer_mode_tile:73::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:13::vera_layer_mode_tile:142::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a -Statement [202] *vera_layer_set_mapbase::addr#0 = vera_layer_set_mapbase::mapbase#3 [ ] ( vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } conio_x16_init:8::vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } conio_x16_init:8::vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } main:10::vera_layer_mode_tile:73::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:13::vera_layer_mode_tile:142::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:207 [ vera_layer_mode_tile::layer#10 ] -Removing always clobbered register reg byte y as potential for mem[1] [ vera_layer_mode_tile::tilewidth#10 ] -Removing always clobbered register reg byte y as potential for mem[1] [ vera_layer_mode_tile::tileheight#10 ] -Removing always clobbered register reg byte y as potential for zp[1]:206 [ vera_layer_mode_tile::$17 ] -Removing always clobbered register reg byte y as potential for zp[1]:205 [ vera_layer_mode_tile::$18 ] -Statement [208] if(0> 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a -Statement [305] vera_layer_mode_tile::$6 = word0 vera_layer_mode_tile::tilebase_address#10 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } ) always clobbers reg byte a -Statement [306] vera_tilebase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$6 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } ) always clobbers reg byte a -Statement [309] vera_tilebase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::tilebase_address#10 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } ) always clobbers reg byte a -Statement [310] vera_layer_mode_tile::tilebase_address#0 = vera_layer_mode_tile::tilebase_address#10 >> 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } ) always clobbers reg byte a -Statement [312] vera_layer_mode_tile::tilebase#1 = vera_layer_mode_tile::tilebase#0 & VERA_LAYER_TILEBASE_MASK [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } ) always clobbers reg byte a -Statement [315] vera_layer_mode_tile::tilebase#3 = vera_layer_mode_tile::tilebase#1 | VERA_TILEBASE_WIDTH_16 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } ) always clobbers reg byte a -Statement [319] vera_layer_mode_tile::tilebase#5 = vera_layer_mode_tile::tilebase#12 | VERA_TILEBASE_HEIGHT_16 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } ) always clobbers reg byte a -Statement [325] vera_layer_mode_tile::config#11 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_128 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } ) always clobbers reg byte a -Statement [326] vera_layer_mode_tile::config#10 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_64 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } ) always clobbers reg byte a -Statement [327] vera_layer_mode_tile::config#7 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_128 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } ) always clobbers reg byte a -Statement [328] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 8 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } ) always clobbers reg byte a -Statement [329] vera_layer_mode_tile::$13 = vera_layer_mode_tile::layer#10 << 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 vera_layer_mode_tile::$13 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 vera_layer_mode_tile::$13 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 vera_layer_mode_tile::$13 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 vera_layer_mode_tile::$13 ] { } ) always clobbers reg byte a -Statement [330] vera_layer_rowskip[vera_layer_mode_tile::$13] = $100 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } ) always clobbers reg byte a -Statement [331] vera_layer_mode_tile::config#6 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_64 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } ) always clobbers reg byte a -Statement [332] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 7 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } ) always clobbers reg byte a -Statement [333] vera_layer_mode_tile::$12 = vera_layer_mode_tile::layer#10 << 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 vera_layer_mode_tile::$12 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 vera_layer_mode_tile::$12 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 vera_layer_mode_tile::$12 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 vera_layer_mode_tile::$12 ] { } ) always clobbers reg byte a -Statement [334] vera_layer_rowskip[vera_layer_mode_tile::$12] = $80 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } ) always clobbers reg byte a -Statement [335] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 6 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } ) always clobbers reg byte a -Statement [336] vera_layer_mode_tile::$11 = vera_layer_mode_tile::layer#10 << 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 vera_layer_mode_tile::$11 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 vera_layer_mode_tile::$11 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 vera_layer_mode_tile::$11 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 vera_layer_mode_tile::$11 ] { } ) always clobbers reg byte a -Statement [337] vera_layer_rowskip[vera_layer_mode_tile::$11] = $40 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } ) always clobbers reg byte a -Statement [339] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL [ memcpy_to_vram::vdest#2 ] ( main:10::memcpy_to_vram:75 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip memcpy_to_vram::vdest#2 ] { } main:10::memcpy_to_vram:82 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::tilebase#7 main::t#5 memcpy_to_vram::vdest#2 ] { { memcpy_to_vram::vdest#1 = memcpy_to_vram::vdest#2 } } ) always clobbers reg byte a -Statement [344] *VERA_ADDRX_H = VERA_INC_1|1 [ ] ( main:10::memcpy_to_vram:75 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip ] { } main:10::memcpy_to_vram:82 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::tilebase#7 main::t#5 ] { { memcpy_to_vram::vdest#1 = memcpy_to_vram::vdest#2 } } ) always clobbers reg byte a -Statement [346] if(memcpy_to_vram::s#2!=memcpy_to_vram::end#0) goto memcpy_to_vram::@2 [ memcpy_to_vram::s#2 ] ( main:10::memcpy_to_vram:75 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip memcpy_to_vram::s#2 ] { } main:10::memcpy_to_vram:82 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::tilebase#7 main::t#5 memcpy_to_vram::s#2 ] { { memcpy_to_vram::vdest#1 = memcpy_to_vram::vdest#2 } } ) always clobbers reg byte a -Statement [348] *VERA_DATA0 = *memcpy_to_vram::s#2 [ memcpy_to_vram::s#2 ] ( main:10::memcpy_to_vram:75 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip memcpy_to_vram::s#2 ] { } main:10::memcpy_to_vram:82 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::tilebase#7 main::t#5 memcpy_to_vram::s#2 ] { { memcpy_to_vram::vdest#1 = memcpy_to_vram::vdest#2 } } ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for mem[1] [ main::t#5 main::t#1 ] -Statement [351] vera_tile_area::mapbase#0 = *vera_mapbase_address [ vera_tile_area::tileindex#3 vera_tile_area::y#3 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::tileindex#3 vera_tile_area::y#3 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::tileindex#3 vera_tile_area::y#3 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::tileindex#3 vera_tile_area::y#3 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:122 [ vera_tile_area::y#3 vera_tile_area::y#2 vera_tile_area::y#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:127 [ vera_tile_area::x#3 vera_tile_area::x#2 vera_tile_area::x#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:68 [ vera_tile_area::h#4 ] -Removing always clobbered register reg byte a as potential for zp[1]:62 [ vera_tile_area::w#9 ] -Statement [353] vera_tile_area::rowskip#0 = 1 << vera_tile_area::shift#0 [ vera_tile_area::tileindex#3 vera_tile_area::y#3 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::tileindex#3 vera_tile_area::y#3 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::tileindex#3 vera_tile_area::y#3 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::tileindex#3 vera_tile_area::y#3 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:126 [ vera_tile_area::shift#0 ] -Statement [360] vera_tile_area::$10 = (unsigned int)vera_tile_area::y#3 [ vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$10 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$10 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$10 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$10 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:61 [ vera_tile_area::index_l#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:60 [ vera_tile_area::index_h#2 ] -Statement [361] vera_tile_area::$4 = vera_tile_area::$10 << vera_tile_area::shift#0 [ vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$4 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$4 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$4 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$4 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Statement [362] vera_tile_area::mapbase#1 = vera_tile_area::mapbase#0 + vera_tile_area::$4 [ vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Statement [363] vera_tile_area::$5 = vera_tile_area::x#3 << 1 [ vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 vera_tile_area::$5 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 vera_tile_area::$5 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 vera_tile_area::$5 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 vera_tile_area::$5 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Statement [364] vera_tile_area::mapbase#2 = vera_tile_area::mapbase#1 + vera_tile_area::$5 [ vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#2 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#2 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#2 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#2 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Statement [368] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL [ vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:40 [ vera_tile_area::r#2 vera_tile_area::r#1 ] -Statement [374] vera_tile_area::vera_vram_address01_$3 = vera_tile_area::vera_vram_address01_$2 | VERA_INC_1 [ vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 vera_tile_area::vera_vram_address01_$3 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 vera_tile_area::vera_vram_address01_$3 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 vera_tile_area::vera_vram_address01_$3 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 vera_tile_area::vera_vram_address01_$3 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Statement [378] vera_tile_area::mapbase#3 = vera_tile_area::mapbase#10 + vera_tile_area::rowskip#0 [ vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#3 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#3 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#3 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#3 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Statement [385] printf_str::c#1 = *printf_str::s#9 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] ( main:10::printf_str:120 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:122 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:124 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:126 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:128 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:130 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:132 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:134 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } ) always clobbers reg byte a reg byte y -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [392] kbhit::ch = 0 [ kbhit::ch ] ( main:10::kbhit:136 [ kbhit::ch ] { { kbhit::return#1 = kbhit::return#2 } } ) always clobbers reg byte a -Statement [397] vera_layer_set_text_color_mode::addr#0 = *(vera_layer_config+vera_layer_mode_text::layer#0*SIZEOF_POINTER) [ vera_layer_set_text_color_mode::addr#0 ] ( vera_layer_mode_text:13::vera_layer_set_text_color_mode:144 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_set_text_color_mode::addr#0 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_set_text_color_mode:144 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_set_text_color_mode::addr#0 ] { } ) always clobbers reg byte a -Statement [398] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 & ~VERA_LAYER_CONFIG_256C [ vera_layer_set_text_color_mode::addr#0 ] ( vera_layer_mode_text:13::vera_layer_set_text_color_mode:144 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_set_text_color_mode::addr#0 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_set_text_color_mode:144 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_set_text_color_mode::addr#0 ] { } ) always clobbers reg byte a reg byte y -Statement [399] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 [ ] ( vera_layer_mode_text:13::vera_layer_set_text_color_mode:144 [ conio_screen_width conio_screen_height conio_x16_init::line#0 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_set_text_color_mode:144 [ conio_screen_width conio_screen_height conio_x16_init::line#0 ] { } ) always clobbers reg byte a reg byte y -Statement [403] vera_layer_get_mapbase_offset::$0 = vera_layer_get_mapbase_offset::layer#0 << 1 [ vera_layer_get_mapbase_offset::$0 ] ( screenlayer:17::vera_layer_get_mapbase_offset:159 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 vera_layer_get_mapbase_offset::$0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } conio_x16_init:8::screenlayer:17::vera_layer_get_mapbase_offset:159 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 vera_layer_get_mapbase_offset::$0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } ) always clobbers reg byte a -Statement [404] vera_layer_get_mapbase_offset::return#0 = vera_mapbase_offset[vera_layer_get_mapbase_offset::$0] [ vera_layer_get_mapbase_offset::return#0 ] ( screenlayer:17::vera_layer_get_mapbase_offset:159 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 vera_layer_get_mapbase_offset::return#0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } conio_x16_init:8::screenlayer:17::vera_layer_get_mapbase_offset:159 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 vera_layer_get_mapbase_offset::return#0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } ) always clobbers reg byte a -Statement [408] vera_layer_get_rowskip::$0 = vera_layer_get_rowskip::layer#0 << 1 [ vera_layer_get_rowskip::$0 ] ( screenlayer:17::vera_layer_get_rowskip:178 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_get_rowskip::$0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } conio_x16_init:8::screenlayer:17::vera_layer_get_rowskip:178 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_get_rowskip::$0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } ) always clobbers reg byte a -Statement [409] vera_layer_get_rowskip::return#0 = vera_layer_rowskip[vera_layer_get_rowskip::$0] [ vera_layer_get_rowskip::return#0 ] ( screenlayer:17::vera_layer_get_rowskip:178 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_get_rowskip::return#0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } conio_x16_init:8::screenlayer:17::vera_layer_get_rowskip:178 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_get_rowskip::return#0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } ) always clobbers reg byte a -Statement [411] if(conio_cursor_y[conio_screen_layer]> 7 [ screensize::hscale#0 ] ( screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::hscale#0 ] { } conio_x16_init:8::screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::hscale#0 ] { } ) always clobbers reg byte a -Statement [147] screensize::$1 = $28 << screensize::hscale#0 [ screensize::$1 ] ( screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$1 ] { } conio_x16_init:8::screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$1 ] { } ) always clobbers reg byte a -Statement [149] screensize::vscale#0 = *VERA_DC_VSCALE >> 7 [ screensize::vscale#0 ] ( screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::vscale#0 ] { } conio_x16_init:8::screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::vscale#0 ] { } ) always clobbers reg byte a -Statement [150] screensize::$3 = $1e << screensize::vscale#0 [ screensize::$3 ] ( screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$3 ] { } conio_x16_init:8::screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$3 ] { } ) always clobbers reg byte a -Statement [153] conio_screen_layer = screenlayer::layer#0 [ conio_screen_layer ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer ] { { vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_bank::return#0 = vera_layer_get_mapbase_bank::return#2 } } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer ] { { vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_bank::return#0 = vera_layer_get_mapbase_bank::return#2 } } ) always clobbers reg byte a -Statement [160] vera_layer_get_mapbase_offset::return#2 = vera_layer_get_mapbase_offset::return#0 [ conio_screen_layer CONIO_SCREEN_BANK#11 vera_layer_get_mapbase_offset::return#2 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 vera_layer_get_mapbase_offset::return#2 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 vera_layer_get_mapbase_offset::return#2 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } ) always clobbers reg byte a -Statement [161] CONIO_SCREEN_TEXT#13 = vera_layer_get_mapbase_offset::return#2 [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } ) always clobbers reg byte a -Statement [163] screenlayer::vera_layer_get_width1_$2 = screenlayer::vera_layer_get_width1_layer#0 << 1 [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$2 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$2 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$2 ] { } ) always clobbers reg byte a -Statement [164] screenlayer::vera_layer_get_width1_config#0 = vera_layer_config[screenlayer::vera_layer_get_width1_$2] [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_config#0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_config#0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_config#0 ] { } ) always clobbers reg byte a -Statement [165] screenlayer::vera_layer_get_width1_$0 = *screenlayer::vera_layer_get_width1_config#0 & VERA_LAYER_WIDTH_MASK [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$0 ] { } ) always clobbers reg byte a reg byte y -Statement [166] screenlayer::vera_layer_get_width1_$1 = screenlayer::vera_layer_get_width1_$0 >> 4 [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$1 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$1 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$1 ] { } ) always clobbers reg byte a -Statement [167] screenlayer::vera_layer_get_width1_$3 = screenlayer::vera_layer_get_width1_$1 << 1 [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$3 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$3 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$3 ] { } ) always clobbers reg byte a -Statement [168] screenlayer::vera_layer_get_width1_return#0 = VERA_LAYER_WIDTH[screenlayer::vera_layer_get_width1_$3] [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_return#0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_return#0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_return#0 ] { } ) always clobbers reg byte a -Statement [169] screenlayer::vera_layer_get_width1_return#1 = screenlayer::vera_layer_get_width1_return#0 [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_return#1 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_return#1 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_return#1 ] { } ) always clobbers reg byte a -Statement [170] screenlayer::$2 = screenlayer::vera_layer_get_width1_return#1 [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$2 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$2 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$2 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } ) always clobbers reg byte a -Statement [171] conio_width = screenlayer::$2 [ conio_screen_layer conio_width CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } ) always clobbers reg byte a -Statement [179] vera_layer_get_rowskip::return#2 = vera_layer_get_rowskip::return#0 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_get_rowskip::return#2 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_get_rowskip::return#2 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_get_rowskip::return#2 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } ) always clobbers reg byte a -Statement [180] screenlayer::$4 = vera_layer_get_rowskip::return#2 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$4 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$4 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$4 ] { } ) always clobbers reg byte a -Statement [181] conio_rowskip = screenlayer::$4 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } ) always clobbers reg byte a -Statement [183] screenlayer::vera_layer_get_height1_$2 = screenlayer::vera_layer_get_height1_layer#0 << 1 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$2 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$2 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$2 ] { } ) always clobbers reg byte a -Statement [184] screenlayer::vera_layer_get_height1_config#0 = vera_layer_config[screenlayer::vera_layer_get_height1_$2] [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_config#0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_config#0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_config#0 ] { } ) always clobbers reg byte a -Statement [185] screenlayer::vera_layer_get_height1_$0 = *screenlayer::vera_layer_get_height1_config#0 & VERA_LAYER_HEIGHT_MASK [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$0 ] { } ) always clobbers reg byte a reg byte y -Statement [186] screenlayer::vera_layer_get_height1_$1 = screenlayer::vera_layer_get_height1_$0 >> 6 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$1 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$1 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$1 ] { } ) always clobbers reg byte a -Statement [187] screenlayer::vera_layer_get_height1_$3 = screenlayer::vera_layer_get_height1_$1 << 1 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$3 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$3 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$3 ] { } ) always clobbers reg byte a -Statement [188] screenlayer::vera_layer_get_height1_return#0 = VERA_LAYER_HEIGHT[screenlayer::vera_layer_get_height1_$3] [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_return#0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_return#0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_return#0 ] { } ) always clobbers reg byte a -Statement [189] screenlayer::vera_layer_get_height1_return#1 = screenlayer::vera_layer_get_height1_return#0 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_return#1 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_return#1 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_return#1 ] { } ) always clobbers reg byte a -Statement [190] screenlayer::$5 = screenlayer::vera_layer_get_height1_return#1 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$5 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$5 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$5 ] { } ) always clobbers reg byte a -Statement [191] conio_height = screenlayer::$5 [ conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } ) always clobbers reg byte a -Statement [194] vera_layer_textcolor[vera_layer_set_textcolor::layer#2] = WHITE [ ] ( vera_layer_set_textcolor:19 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } conio_x16_init:8::vera_layer_set_textcolor:19 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } main:10::vera_layer_set_textcolor:67 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { { vera_layer_set_textcolor::layer#1 = vera_layer_set_textcolor::layer#2 conio_screen_layer } } ) always clobbers reg byte a -Statement [200] vera_layer_set_mapbase::$0 = vera_layer_set_mapbase::layer#3 << 1 [ vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] ( vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } conio_x16_init:8::vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } conio_x16_init:8::vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } main:10::vera_layer_mode_tile:73::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:13::vera_layer_mode_tile:142::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a -Statement [201] vera_layer_set_mapbase::addr#0 = vera_layer_mapbase[vera_layer_set_mapbase::$0] [ vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] ( vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } conio_x16_init:8::vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } conio_x16_init:8::vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } main:10::vera_layer_mode_tile:73::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:13::vera_layer_mode_tile:142::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a -Statement [202] *vera_layer_set_mapbase::addr#0 = vera_layer_set_mapbase::mapbase#3 [ ] ( vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } conio_x16_init:8::vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } conio_x16_init:8::vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } main:10::vera_layer_mode_tile:73::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:13::vera_layer_mode_tile:142::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a reg byte y -Statement [205] if(gotoxy::y#4<=conio_screen_height) goto gotoxy::@4 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] ( gotoxy:30 [ conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#1 = gotoxy::y#4 conio_x16_init::line#3 } } conio_x16_init:8::gotoxy:30 [ conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#1 = gotoxy::y#4 conio_x16_init::line#3 } } main:10::gotoxy:118 [ conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { } main:10::printf_str:120::cputc:390::cputln:58::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:122::cputc:390::cputln:58::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:124::cputc:390::cputln:58::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:126::cputc:390::cputln:58::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:128::cputc:390::cputln:58::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:130::cputc:390::cputln:58::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:132::cputc:390::cputln:58::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:134::cputc:390::cputln:58::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:120::cputc:390::cputln:62::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:122::cputc:390::cputln:62::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:124::cputc:390::cputln:62::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:126::cputc:390::cputln:62::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:128::cputc:390::cputln:62::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:130::cputc:390::cputln:62::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:132::cputc:390::cputln:62::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:134::cputc:390::cputln:62::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:120::cputc:390::cputln:64::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:122::cputc:390::cputln:64::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:124::cputc:390::cputln:64::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:126::cputc:390::cputln:64::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:128::cputc:390::cputln:64::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:130::cputc:390::cputln:64::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:132::cputc:390::cputln:64::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:134::cputc:390::cputln:64::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } ) always clobbers reg byte a -Statement [208] if(0> 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a -Statement [305] vera_layer_mode_tile::$6 = word0 vera_layer_mode_tile::tilebase_address#10 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } ) always clobbers reg byte a -Statement [306] vera_tilebase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$6 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } ) always clobbers reg byte a -Statement [309] vera_tilebase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::tilebase_address#10 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } ) always clobbers reg byte a -Statement [310] vera_layer_mode_tile::tilebase_address#0 = vera_layer_mode_tile::tilebase_address#10 >> 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } ) always clobbers reg byte a -Statement [312] vera_layer_mode_tile::tilebase#1 = vera_layer_mode_tile::tilebase#0 & VERA_LAYER_TILEBASE_MASK [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } ) always clobbers reg byte a -Statement [315] vera_layer_mode_tile::tilebase#3 = vera_layer_mode_tile::tilebase#1 | VERA_TILEBASE_WIDTH_16 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } ) always clobbers reg byte a -Statement [319] vera_layer_mode_tile::tilebase#5 = vera_layer_mode_tile::tilebase#12 | VERA_TILEBASE_HEIGHT_16 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } ) always clobbers reg byte a -Statement [325] vera_layer_mode_tile::config#11 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_128 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } ) always clobbers reg byte a -Statement [326] vera_layer_mode_tile::config#10 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_64 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } ) always clobbers reg byte a -Statement [327] vera_layer_mode_tile::config#7 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_128 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } ) always clobbers reg byte a -Statement [328] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 8 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } ) always clobbers reg byte a -Statement [329] vera_layer_mode_tile::$13 = vera_layer_mode_tile::layer#10 << 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 vera_layer_mode_tile::$13 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 vera_layer_mode_tile::$13 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 vera_layer_mode_tile::$13 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 vera_layer_mode_tile::$13 ] { } ) always clobbers reg byte a -Statement [330] vera_layer_rowskip[vera_layer_mode_tile::$13] = $100 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } ) always clobbers reg byte a -Statement [331] vera_layer_mode_tile::config#6 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_64 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } ) always clobbers reg byte a -Statement [332] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 7 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } ) always clobbers reg byte a -Statement [333] vera_layer_mode_tile::$12 = vera_layer_mode_tile::layer#10 << 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 vera_layer_mode_tile::$12 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 vera_layer_mode_tile::$12 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 vera_layer_mode_tile::$12 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 vera_layer_mode_tile::$12 ] { } ) always clobbers reg byte a -Statement [334] vera_layer_rowskip[vera_layer_mode_tile::$12] = $80 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } ) always clobbers reg byte a -Statement [335] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 6 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } ) always clobbers reg byte a -Statement [336] vera_layer_mode_tile::$11 = vera_layer_mode_tile::layer#10 << 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 vera_layer_mode_tile::$11 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 vera_layer_mode_tile::$11 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 vera_layer_mode_tile::$11 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 vera_layer_mode_tile::$11 ] { } ) always clobbers reg byte a -Statement [337] vera_layer_rowskip[vera_layer_mode_tile::$11] = $40 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } ) always clobbers reg byte a -Statement [339] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL [ memcpy_to_vram::vdest#2 ] ( main:10::memcpy_to_vram:75 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip memcpy_to_vram::vdest#2 ] { } main:10::memcpy_to_vram:82 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::tilebase#7 main::t#5 memcpy_to_vram::vdest#2 ] { { memcpy_to_vram::vdest#1 = memcpy_to_vram::vdest#2 } } ) always clobbers reg byte a -Statement [344] *VERA_ADDRX_H = VERA_INC_1|1 [ ] ( main:10::memcpy_to_vram:75 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip ] { } main:10::memcpy_to_vram:82 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::tilebase#7 main::t#5 ] { { memcpy_to_vram::vdest#1 = memcpy_to_vram::vdest#2 } } ) always clobbers reg byte a -Statement [346] if(memcpy_to_vram::s#2!=memcpy_to_vram::end#0) goto memcpy_to_vram::@2 [ memcpy_to_vram::s#2 ] ( main:10::memcpy_to_vram:75 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip memcpy_to_vram::s#2 ] { } main:10::memcpy_to_vram:82 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::tilebase#7 main::t#5 memcpy_to_vram::s#2 ] { { memcpy_to_vram::vdest#1 = memcpy_to_vram::vdest#2 } } ) always clobbers reg byte a -Statement [348] *VERA_DATA0 = *memcpy_to_vram::s#2 [ memcpy_to_vram::s#2 ] ( main:10::memcpy_to_vram:75 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip memcpy_to_vram::s#2 ] { } main:10::memcpy_to_vram:82 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::tilebase#7 main::t#5 memcpy_to_vram::s#2 ] { { memcpy_to_vram::vdest#1 = memcpy_to_vram::vdest#2 } } ) always clobbers reg byte a reg byte y -Statement [351] vera_tile_area::mapbase#0 = *vera_mapbase_address [ vera_tile_area::tileindex#3 vera_tile_area::y#3 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::tileindex#3 vera_tile_area::y#3 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::tileindex#3 vera_tile_area::y#3 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::tileindex#3 vera_tile_area::y#3 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Statement [353] vera_tile_area::rowskip#0 = 1 << vera_tile_area::shift#0 [ vera_tile_area::tileindex#3 vera_tile_area::y#3 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::tileindex#3 vera_tile_area::y#3 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::tileindex#3 vera_tile_area::y#3 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::tileindex#3 vera_tile_area::y#3 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Statement [360] vera_tile_area::$10 = (unsigned int)vera_tile_area::y#3 [ vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$10 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$10 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$10 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$10 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Statement [361] vera_tile_area::$4 = vera_tile_area::$10 << vera_tile_area::shift#0 [ vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$4 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$4 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$4 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$4 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Statement [362] vera_tile_area::mapbase#1 = vera_tile_area::mapbase#0 + vera_tile_area::$4 [ vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Statement [363] vera_tile_area::$5 = vera_tile_area::x#3 << 1 [ vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 vera_tile_area::$5 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 vera_tile_area::$5 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 vera_tile_area::$5 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 vera_tile_area::$5 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Statement [364] vera_tile_area::mapbase#2 = vera_tile_area::mapbase#1 + vera_tile_area::$5 [ vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#2 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#2 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#2 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#2 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Statement [368] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL [ vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Statement [374] vera_tile_area::vera_vram_address01_$3 = vera_tile_area::vera_vram_address01_$2 | VERA_INC_1 [ vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 vera_tile_area::vera_vram_address01_$3 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 vera_tile_area::vera_vram_address01_$3 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 vera_tile_area::vera_vram_address01_$3 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 vera_tile_area::vera_vram_address01_$3 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Statement [378] vera_tile_area::mapbase#3 = vera_tile_area::mapbase#10 + vera_tile_area::rowskip#0 [ vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#3 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#3 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#3 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#3 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Statement [385] printf_str::c#1 = *printf_str::s#9 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] ( main:10::printf_str:120 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:122 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:124 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:126 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:128 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:130 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:132 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:134 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } ) always clobbers reg byte a reg byte y -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [392] kbhit::ch = 0 [ kbhit::ch ] ( main:10::kbhit:136 [ kbhit::ch ] { { kbhit::return#1 = kbhit::return#2 } } ) always clobbers reg byte a -Statement [397] vera_layer_set_text_color_mode::addr#0 = *(vera_layer_config+vera_layer_mode_text::layer#0*SIZEOF_POINTER) [ vera_layer_set_text_color_mode::addr#0 ] ( vera_layer_mode_text:13::vera_layer_set_text_color_mode:144 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_set_text_color_mode::addr#0 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_set_text_color_mode:144 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_set_text_color_mode::addr#0 ] { } ) always clobbers reg byte a -Statement [398] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 & ~VERA_LAYER_CONFIG_256C [ vera_layer_set_text_color_mode::addr#0 ] ( vera_layer_mode_text:13::vera_layer_set_text_color_mode:144 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_set_text_color_mode::addr#0 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_set_text_color_mode:144 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_set_text_color_mode::addr#0 ] { } ) always clobbers reg byte a reg byte y -Statement [399] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 [ ] ( vera_layer_mode_text:13::vera_layer_set_text_color_mode:144 [ conio_screen_width conio_screen_height conio_x16_init::line#0 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_set_text_color_mode:144 [ conio_screen_width conio_screen_height conio_x16_init::line#0 ] { } ) always clobbers reg byte a reg byte y -Statement [403] vera_layer_get_mapbase_offset::$0 = vera_layer_get_mapbase_offset::layer#0 << 1 [ vera_layer_get_mapbase_offset::$0 ] ( screenlayer:17::vera_layer_get_mapbase_offset:159 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 vera_layer_get_mapbase_offset::$0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } conio_x16_init:8::screenlayer:17::vera_layer_get_mapbase_offset:159 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 vera_layer_get_mapbase_offset::$0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } ) always clobbers reg byte a -Statement [404] vera_layer_get_mapbase_offset::return#0 = vera_mapbase_offset[vera_layer_get_mapbase_offset::$0] [ vera_layer_get_mapbase_offset::return#0 ] ( screenlayer:17::vera_layer_get_mapbase_offset:159 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 vera_layer_get_mapbase_offset::return#0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } conio_x16_init:8::screenlayer:17::vera_layer_get_mapbase_offset:159 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 vera_layer_get_mapbase_offset::return#0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } ) always clobbers reg byte a -Statement [408] vera_layer_get_rowskip::$0 = vera_layer_get_rowskip::layer#0 << 1 [ vera_layer_get_rowskip::$0 ] ( screenlayer:17::vera_layer_get_rowskip:178 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_get_rowskip::$0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } conio_x16_init:8::screenlayer:17::vera_layer_get_rowskip:178 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_get_rowskip::$0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } ) always clobbers reg byte a -Statement [409] vera_layer_get_rowskip::return#0 = vera_layer_rowskip[vera_layer_get_rowskip::$0] [ vera_layer_get_rowskip::return#0 ] ( screenlayer:17::vera_layer_get_rowskip:178 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_get_rowskip::return#0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } conio_x16_init:8::screenlayer:17::vera_layer_get_rowskip:178 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_get_rowskip::return#0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } ) always clobbers reg byte a -Statement [411] if(conio_cursor_y[conio_screen_layer]> 7 [ screensize::hscale#0 ] ( screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::hscale#0 ] { } conio_x16_init:8::screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::hscale#0 ] { } ) always clobbers reg byte a -Statement [147] screensize::$1 = $28 << screensize::hscale#0 [ screensize::$1 ] ( screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$1 ] { } conio_x16_init:8::screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$1 ] { } ) always clobbers reg byte a -Statement [149] screensize::vscale#0 = *VERA_DC_VSCALE >> 7 [ screensize::vscale#0 ] ( screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::vscale#0 ] { } conio_x16_init:8::screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::vscale#0 ] { } ) always clobbers reg byte a -Statement [150] screensize::$3 = $1e << screensize::vscale#0 [ screensize::$3 ] ( screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$3 ] { } conio_x16_init:8::screensize:15 [ conio_screen_width conio_screen_height conio_x16_init::line#0 screensize::$3 ] { } ) always clobbers reg byte a -Statement [153] conio_screen_layer = screenlayer::layer#0 [ conio_screen_layer ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer ] { { vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_bank::return#0 = vera_layer_get_mapbase_bank::return#2 } } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer ] { { vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_bank::return#0 = vera_layer_get_mapbase_bank::return#2 } } ) always clobbers reg byte a -Statement [160] vera_layer_get_mapbase_offset::return#2 = vera_layer_get_mapbase_offset::return#0 [ conio_screen_layer CONIO_SCREEN_BANK#11 vera_layer_get_mapbase_offset::return#2 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 vera_layer_get_mapbase_offset::return#2 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 vera_layer_get_mapbase_offset::return#2 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } ) always clobbers reg byte a -Statement [161] CONIO_SCREEN_TEXT#13 = vera_layer_get_mapbase_offset::return#2 [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } ) always clobbers reg byte a -Statement [163] screenlayer::vera_layer_get_width1_$2 = screenlayer::vera_layer_get_width1_layer#0 << 1 [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$2 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$2 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$2 ] { } ) always clobbers reg byte a -Statement [164] screenlayer::vera_layer_get_width1_config#0 = vera_layer_config[screenlayer::vera_layer_get_width1_$2] [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_config#0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_config#0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_config#0 ] { } ) always clobbers reg byte a -Statement [165] screenlayer::vera_layer_get_width1_$0 = *screenlayer::vera_layer_get_width1_config#0 & VERA_LAYER_WIDTH_MASK [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$0 ] { } ) always clobbers reg byte a reg byte y -Statement [166] screenlayer::vera_layer_get_width1_$1 = screenlayer::vera_layer_get_width1_$0 >> 4 [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$1 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$1 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$1 ] { } ) always clobbers reg byte a -Statement [167] screenlayer::vera_layer_get_width1_$3 = screenlayer::vera_layer_get_width1_$1 << 1 [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$3 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$3 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_$3 ] { } ) always clobbers reg byte a -Statement [168] screenlayer::vera_layer_get_width1_return#0 = VERA_LAYER_WIDTH[screenlayer::vera_layer_get_width1_$3] [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_return#0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_return#0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_return#0 ] { } ) always clobbers reg byte a -Statement [169] screenlayer::vera_layer_get_width1_return#1 = screenlayer::vera_layer_get_width1_return#0 [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_return#1 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_return#1 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_width1_return#1 ] { } ) always clobbers reg byte a -Statement [170] screenlayer::$2 = screenlayer::vera_layer_get_width1_return#1 [ conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$2 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$2 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$2 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } ) always clobbers reg byte a -Statement [171] conio_width = screenlayer::$2 [ conio_screen_layer conio_width CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { { vera_layer_get_rowshift::layer#0 = conio_screen_layer } { vera_layer_get_rowshift::return#0 = vera_layer_get_rowshift::return#2 } } ) always clobbers reg byte a -Statement [179] vera_layer_get_rowskip::return#2 = vera_layer_get_rowskip::return#0 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_get_rowskip::return#2 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_get_rowskip::return#2 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_get_rowskip::return#2 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } ) always clobbers reg byte a -Statement [180] screenlayer::$4 = vera_layer_get_rowskip::return#2 [ conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$4 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$4 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$4 ] { } ) always clobbers reg byte a -Statement [181] conio_rowskip = screenlayer::$4 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } ) always clobbers reg byte a -Statement [183] screenlayer::vera_layer_get_height1_$2 = screenlayer::vera_layer_get_height1_layer#0 << 1 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$2 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$2 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$2 ] { } ) always clobbers reg byte a -Statement [184] screenlayer::vera_layer_get_height1_config#0 = vera_layer_config[screenlayer::vera_layer_get_height1_$2] [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_config#0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_config#0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_config#0 ] { } ) always clobbers reg byte a -Statement [185] screenlayer::vera_layer_get_height1_$0 = *screenlayer::vera_layer_get_height1_config#0 & VERA_LAYER_HEIGHT_MASK [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$0 ] { } ) always clobbers reg byte a reg byte y -Statement [186] screenlayer::vera_layer_get_height1_$1 = screenlayer::vera_layer_get_height1_$0 >> 6 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$1 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$1 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$1 ] { } ) always clobbers reg byte a -Statement [187] screenlayer::vera_layer_get_height1_$3 = screenlayer::vera_layer_get_height1_$1 << 1 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$3 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$3 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_$3 ] { } ) always clobbers reg byte a -Statement [188] screenlayer::vera_layer_get_height1_return#0 = VERA_LAYER_HEIGHT[screenlayer::vera_layer_get_height1_$3] [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_return#0 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_return#0 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_return#0 ] { } ) always clobbers reg byte a -Statement [189] screenlayer::vera_layer_get_height1_return#1 = screenlayer::vera_layer_get_height1_return#0 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_return#1 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_return#1 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::vera_layer_get_height1_return#1 ] { } ) always clobbers reg byte a -Statement [190] screenlayer::$5 = screenlayer::vera_layer_get_height1_return#1 [ conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$5 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$5 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 screenlayer::$5 ] { } ) always clobbers reg byte a -Statement [191] conio_height = screenlayer::$5 [ conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] ( screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } conio_x16_init:8::screenlayer:17 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } ) always clobbers reg byte a -Statement [194] vera_layer_textcolor[vera_layer_set_textcolor::layer#2] = WHITE [ ] ( vera_layer_set_textcolor:19 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } conio_x16_init:8::vera_layer_set_textcolor:19 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } main:10::vera_layer_set_textcolor:67 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { { vera_layer_set_textcolor::layer#1 = vera_layer_set_textcolor::layer#2 conio_screen_layer } } ) always clobbers reg byte a -Statement [200] vera_layer_set_mapbase::$0 = vera_layer_set_mapbase::layer#3 << 1 [ vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] ( vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } conio_x16_init:8::vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } conio_x16_init:8::vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { } main:10::vera_layer_mode_tile:73::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:13::vera_layer_mode_tile:142::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::$0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a -Statement [201] vera_layer_set_mapbase::addr#0 = vera_layer_mapbase[vera_layer_set_mapbase::$0] [ vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] ( vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } conio_x16_init:8::vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } conio_x16_init:8::vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { } main:10::vera_layer_mode_tile:73::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:13::vera_layer_mode_tile:142::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::addr#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a -Statement [202] *vera_layer_set_mapbase::addr#0 = vera_layer_set_mapbase::mapbase#3 [ ] ( vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } conio_x16_init:8::vera_layer_set_mapbase:23 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } conio_x16_init:8::vera_layer_set_mapbase:25 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip conio_x16_init::line#0 CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 ] { } main:10::vera_layer_mode_tile:73::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:13::vera_layer_mode_tile:142::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142::vera_layer_set_mapbase:304 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a reg byte y -Statement [205] if(gotoxy::y#4<=conio_screen_height) goto gotoxy::@4 [ conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] ( gotoxy:30 [ conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#1 = gotoxy::y#4 conio_x16_init::line#3 } } conio_x16_init:8::gotoxy:30 [ conio_width conio_height conio_rowskip CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#1 = gotoxy::y#4 conio_x16_init::line#3 } } main:10::gotoxy:118 [ conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { } main:10::printf_str:120::cputc:390::cputln:58::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:122::cputc:390::cputln:58::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:124::cputc:390::cputln:58::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:126::cputc:390::cputln:58::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:128::cputc:390::cputln:58::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:130::cputc:390::cputln:58::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:132::cputc:390::cputln:58::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:134::cputc:390::cputln:58::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:120::cputc:390::cputln:62::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:122::cputc:390::cputln:62::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:124::cputc:390::cputln:62::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:126::cputc:390::cputln:62::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:128::cputc:390::cputln:62::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:130::cputc:390::cputln:62::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:132::cputc:390::cputln:62::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:134::cputc:390::cputln:62::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:120::cputc:390::cputln:64::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:122::cputc:390::cputln:64::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:124::cputc:390::cputln:64::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:126::cputc:390::cputln:64::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:128::cputc:390::cputln:64::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:130::cputc:390::cputln:64::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:132::cputc:390::cputln:64::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } main:10::printf_str:134::cputc:390::cputln:64::cscroll:234::gotoxy:419 [ printf_str::s#0 conio_width conio_height conio_rowskip conio_screen_width conio_screen_height conio_screen_layer conio_rowshift gotoxy::y#4 ] { { gotoxy::y#2 = gotoxy::y#4 } } ) always clobbers reg byte a -Statement [208] if(0> 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::mapbase_address#0 ] { { vera_layer_set_mapbase::layer#0 = vera_layer_set_mapbase::layer#3 vera_layer_mode_tile::layer#10 } { vera_layer_set_mapbase::mapbase#0 = vera_layer_set_mapbase::mapbase#3 vera_layer_mode_tile::mapbase#0 } } ) always clobbers reg byte a -Statement [305] vera_layer_mode_tile::$6 = word0 vera_layer_mode_tile::tilebase_address#10 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$17 vera_layer_mode_tile::$18 vera_layer_mode_tile::$6 ] { } ) always clobbers reg byte a -Statement [306] vera_tilebase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$6 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::$18 ] { } ) always clobbers reg byte a -Statement [309] vera_tilebase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::tilebase_address#10 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 ] { } ) always clobbers reg byte a -Statement [310] vera_layer_mode_tile::tilebase_address#0 = vera_layer_mode_tile::tilebase_address#10 >> 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase_address#0 ] { } ) always clobbers reg byte a -Statement [312] vera_layer_mode_tile::tilebase#1 = vera_layer_mode_tile::tilebase#0 & VERA_LAYER_TILEBASE_MASK [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#1 ] { } ) always clobbers reg byte a -Statement [315] vera_layer_mode_tile::tilebase#3 = vera_layer_mode_tile::tilebase#1 | VERA_TILEBASE_WIDTH_16 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::tilebase#3 ] { } ) always clobbers reg byte a -Statement [319] vera_layer_mode_tile::tilebase#5 = vera_layer_mode_tile::tilebase#12 | VERA_TILEBASE_HEIGHT_16 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::tilebase#5 ] { } ) always clobbers reg byte a -Statement [325] vera_layer_mode_tile::config#11 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_128 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#11 ] { } ) always clobbers reg byte a -Statement [326] vera_layer_mode_tile::config#10 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_64 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#10 ] { } ) always clobbers reg byte a -Statement [327] vera_layer_mode_tile::config#7 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_128 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } ) always clobbers reg byte a -Statement [328] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 8 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } ) always clobbers reg byte a -Statement [329] vera_layer_mode_tile::$13 = vera_layer_mode_tile::layer#10 << 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 vera_layer_mode_tile::$13 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 vera_layer_mode_tile::$13 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 vera_layer_mode_tile::$13 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 vera_layer_mode_tile::$13 ] { } ) always clobbers reg byte a -Statement [330] vera_layer_rowskip[vera_layer_mode_tile::$13] = $100 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#7 ] { } ) always clobbers reg byte a -Statement [331] vera_layer_mode_tile::config#6 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_64 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } ) always clobbers reg byte a -Statement [332] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 7 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } ) always clobbers reg byte a -Statement [333] vera_layer_mode_tile::$12 = vera_layer_mode_tile::layer#10 << 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 vera_layer_mode_tile::$12 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 vera_layer_mode_tile::$12 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 vera_layer_mode_tile::$12 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 vera_layer_mode_tile::$12 ] { } ) always clobbers reg byte a -Statement [334] vera_layer_rowskip[vera_layer_mode_tile::$12] = $80 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#6 ] { } ) always clobbers reg byte a -Statement [335] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 6 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } ) always clobbers reg byte a -Statement [336] vera_layer_mode_tile::$11 = vera_layer_mode_tile::layer#10 << 1 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 vera_layer_mode_tile::$11 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 vera_layer_mode_tile::$11 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 vera_layer_mode_tile::$11 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 vera_layer_mode_tile::$11 ] { } ) always clobbers reg byte a -Statement [337] vera_layer_rowskip[vera_layer_mode_tile::$11] = $40 [ vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] ( main:10::vera_layer_mode_tile:73 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_mode_tile:142 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_mode_tile::layer#10 vera_layer_mode_tile::mapheight#10 vera_layer_mode_tile::mapbase_address#10 vera_layer_mode_tile::tilebase_address#10 vera_layer_mode_tile::tilewidth#10 vera_layer_mode_tile::tileheight#10 vera_layer_mode_tile::config#17 ] { } ) always clobbers reg byte a -Statement [339] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL [ memcpy_to_vram::vdest#2 ] ( main:10::memcpy_to_vram:75 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip memcpy_to_vram::vdest#2 ] { } main:10::memcpy_to_vram:82 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::tilebase#7 main::t#5 memcpy_to_vram::vdest#2 ] { { memcpy_to_vram::vdest#1 = memcpy_to_vram::vdest#2 } } ) always clobbers reg byte a -Statement [344] *VERA_ADDRX_H = VERA_INC_1|1 [ ] ( main:10::memcpy_to_vram:75 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip ] { } main:10::memcpy_to_vram:82 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::tilebase#7 main::t#5 ] { { memcpy_to_vram::vdest#1 = memcpy_to_vram::vdest#2 } } ) always clobbers reg byte a -Statement [346] if(memcpy_to_vram::s#2!=memcpy_to_vram::end#0) goto memcpy_to_vram::@2 [ memcpy_to_vram::s#2 ] ( main:10::memcpy_to_vram:75 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip memcpy_to_vram::s#2 ] { } main:10::memcpy_to_vram:82 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::tilebase#7 main::t#5 memcpy_to_vram::s#2 ] { { memcpy_to_vram::vdest#1 = memcpy_to_vram::vdest#2 } } ) always clobbers reg byte a -Statement [348] *VERA_DATA0 = *memcpy_to_vram::s#2 [ memcpy_to_vram::s#2 ] ( main:10::memcpy_to_vram:75 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip memcpy_to_vram::s#2 ] { } main:10::memcpy_to_vram:82 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::tilebase#7 main::t#5 memcpy_to_vram::s#2 ] { { memcpy_to_vram::vdest#1 = memcpy_to_vram::vdest#2 } } ) always clobbers reg byte a reg byte y -Statement [351] vera_tile_area::mapbase#0 = *vera_mapbase_address [ vera_tile_area::tileindex#3 vera_tile_area::y#3 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::tileindex#3 vera_tile_area::y#3 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::tileindex#3 vera_tile_area::y#3 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::tileindex#3 vera_tile_area::y#3 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Statement [353] vera_tile_area::rowskip#0 = 1 << vera_tile_area::shift#0 [ vera_tile_area::tileindex#3 vera_tile_area::y#3 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::tileindex#3 vera_tile_area::y#3 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::tileindex#3 vera_tile_area::y#3 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::tileindex#3 vera_tile_area::y#3 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Statement [360] vera_tile_area::$10 = (unsigned int)vera_tile_area::y#3 [ vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$10 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$10 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$10 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::shift#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$10 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Statement [361] vera_tile_area::$4 = vera_tile_area::$10 << vera_tile_area::shift#0 [ vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$4 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$4 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$4 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::mapbase#0 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::$4 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Statement [362] vera_tile_area::mapbase#1 = vera_tile_area::mapbase#0 + vera_tile_area::$4 [ vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::x#3 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Statement [363] vera_tile_area::$5 = vera_tile_area::x#3 << 1 [ vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 vera_tile_area::$5 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 vera_tile_area::$5 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 vera_tile_area::$5 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#1 vera_tile_area::$5 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Statement [364] vera_tile_area::mapbase#2 = vera_tile_area::mapbase#1 + vera_tile_area::$5 [ vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#2 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#2 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#2 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::mapbase#2 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Statement [368] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL [ vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Statement [374] vera_tile_area::vera_vram_address01_$3 = vera_tile_area::vera_vram_address01_$2 | VERA_INC_1 [ vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 vera_tile_area::vera_vram_address01_$3 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 vera_tile_area::vera_vram_address01_$3 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 vera_tile_area::vera_vram_address01_$3 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#10 vera_tile_area::vera_vram_address01_$3 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Statement [378] vera_tile_area::mapbase#3 = vera_tile_area::mapbase#10 + vera_tile_area::rowskip#0 [ vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#3 ] ( main:10::vera_tile_area:87 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#3 ] { } main:10::vera_tile_area:93 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#9 main::r#5 main::tile#6 main::column#2 main::c#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#3 ] { { vera_tile_area::tileindex#1 = vera_tile_area::tileindex#3 main::tile#6 } { vera_tile_area::y#1 = vera_tile_area::y#3 main::row#9 } { vera_tile_area::x#1 = vera_tile_area::x#3 main::column#2 } } main:10::vera_tile_area:107 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip main::row#11 main::r1#5 main::tile#8 main::column1#2 main::c1#2 vera_tile_area::h#4 vera_tile_area::w#9 vera_tile_area::rowskip#0 vera_tile_area::index_l#0 vera_tile_area::index_h#2 vera_tile_area::r#2 vera_tile_area::mapbase#3 ] { { vera_tile_area::tileindex#2 = vera_tile_area::tileindex#3 main::tile#8 } { vera_tile_area::y#2 = vera_tile_area::y#3 main::row#11 } { vera_tile_area::x#2 = vera_tile_area::x#3 main::column1#2 } } ) always clobbers reg byte a -Statement [385] printf_str::c#1 = *printf_str::s#9 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] ( main:10::printf_str:120 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:122 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:124 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:126 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:128 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:130 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:132 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } main:10::printf_str:134 [ conio_screen_width conio_screen_height conio_screen_layer conio_width conio_height conio_rowshift conio_rowskip printf_str::s#9 printf_str::c#1 ] { } ) always clobbers reg byte a reg byte y -Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [392] kbhit::ch = 0 [ kbhit::ch ] ( main:10::kbhit:136 [ kbhit::ch ] { { kbhit::return#1 = kbhit::return#2 } } ) always clobbers reg byte a -Statement [397] vera_layer_set_text_color_mode::addr#0 = *(vera_layer_config+vera_layer_mode_text::layer#0*SIZEOF_POINTER) [ vera_layer_set_text_color_mode::addr#0 ] ( vera_layer_mode_text:13::vera_layer_set_text_color_mode:144 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_set_text_color_mode::addr#0 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_set_text_color_mode:144 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_set_text_color_mode::addr#0 ] { } ) always clobbers reg byte a -Statement [398] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 & ~VERA_LAYER_CONFIG_256C [ vera_layer_set_text_color_mode::addr#0 ] ( vera_layer_mode_text:13::vera_layer_set_text_color_mode:144 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_set_text_color_mode::addr#0 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_set_text_color_mode:144 [ conio_screen_width conio_screen_height conio_x16_init::line#0 vera_layer_set_text_color_mode::addr#0 ] { } ) always clobbers reg byte a reg byte y -Statement [399] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 [ ] ( vera_layer_mode_text:13::vera_layer_set_text_color_mode:144 [ conio_screen_width conio_screen_height conio_x16_init::line#0 ] { } conio_x16_init:8::vera_layer_mode_text:13::vera_layer_set_text_color_mode:144 [ conio_screen_width conio_screen_height conio_x16_init::line#0 ] { } ) always clobbers reg byte a reg byte y -Statement [403] vera_layer_get_mapbase_offset::$0 = vera_layer_get_mapbase_offset::layer#0 << 1 [ vera_layer_get_mapbase_offset::$0 ] ( screenlayer:17::vera_layer_get_mapbase_offset:159 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 vera_layer_get_mapbase_offset::$0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } conio_x16_init:8::screenlayer:17::vera_layer_get_mapbase_offset:159 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 vera_layer_get_mapbase_offset::$0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } ) always clobbers reg byte a -Statement [404] vera_layer_get_mapbase_offset::return#0 = vera_mapbase_offset[vera_layer_get_mapbase_offset::$0] [ vera_layer_get_mapbase_offset::return#0 ] ( screenlayer:17::vera_layer_get_mapbase_offset:159 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 vera_layer_get_mapbase_offset::return#0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } conio_x16_init:8::screenlayer:17::vera_layer_get_mapbase_offset:159 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer CONIO_SCREEN_BANK#11 vera_layer_get_mapbase_offset::return#0 ] { { vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer } { vera_layer_get_mapbase_offset::return#0 = vera_layer_get_mapbase_offset::return#2 } } ) always clobbers reg byte a -Statement [408] vera_layer_get_rowskip::$0 = vera_layer_get_rowskip::layer#0 << 1 [ vera_layer_get_rowskip::$0 ] ( screenlayer:17::vera_layer_get_rowskip:178 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_get_rowskip::$0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } conio_x16_init:8::screenlayer:17::vera_layer_get_rowskip:178 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_get_rowskip::$0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } ) always clobbers reg byte a -Statement [409] vera_layer_get_rowskip::return#0 = vera_layer_rowskip[vera_layer_get_rowskip::$0] [ vera_layer_get_rowskip::return#0 ] ( screenlayer:17::vera_layer_get_rowskip:178 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_get_rowskip::return#0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } conio_x16_init:8::screenlayer:17::vera_layer_get_rowskip:178 [ conio_screen_width conio_screen_height conio_x16_init::line#0 conio_screen_layer conio_width conio_rowshift CONIO_SCREEN_BANK#11 CONIO_SCREEN_TEXT#13 vera_layer_get_rowskip::return#0 ] { { vera_layer_get_rowskip::layer#0 = conio_screen_layer } { vera_layer_get_rowskip::return#0 = vera_layer_get_rowskip::return#2 } } ) always clobbers reg byte a -Statement [411] if(conio_cursor_y[conio_screen_layer]0 - sta.z conio_width+1 - // [5] conio_height = 0 -- vwuz1=vwuc1 - lda #<0 - sta.z conio_height - lda #>0 - sta.z conio_height+1 - // [6] conio_rowshift = 0 -- vbuz1=vbuc1 - lda #0 - sta.z conio_rowshift - // [7] conio_rowskip = 0 -- vwuz1=vwuc1 - lda #<0 - sta.z conio_rowskip - lda #>0 - sta.z conio_rowskip+1 - // [8] call conio_x16_init - jsr conio_x16_init - // [9] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - __b1_from___init1: - jmp __b1 - // __start::@1 - __b1: - // [10] call main - // [65] phi from __start::@1 to main [phi:__start::@1->main] - main_from___b1: - jsr main - jmp __breturn - // __start::@return - __breturn: - // [11] return - rts -} - // conio_x16_init -// Set initial cursor position -conio_x16_init: { - // Position cursor at current line - .label BASIC_CURSOR_LINE = $d6 - .label line = $52 - // [12] conio_x16_init::line#0 = *conio_x16_init::BASIC_CURSOR_LINE -- vbuz1=_deref_pbuc1 - lda.z BASIC_CURSOR_LINE - sta.z line - // [13] call vera_layer_mode_text - // [141] phi from conio_x16_init to vera_layer_mode_text [phi:conio_x16_init->vera_layer_mode_text] - vera_layer_mode_text_from_conio_x16_init: - jsr vera_layer_mode_text - // [14] phi from conio_x16_init to conio_x16_init::@3 [phi:conio_x16_init->conio_x16_init::@3] - __b3_from_conio_x16_init: - jmp __b3 - // conio_x16_init::@3 - __b3: - // [15] call screensize - jsr screensize - // [16] phi from conio_x16_init::@3 to conio_x16_init::@4 [phi:conio_x16_init::@3->conio_x16_init::@4] - __b4_from___b3: - jmp __b4 - // conio_x16_init::@4 - __b4: - // [17] call screenlayer - jsr screenlayer - // [18] phi from conio_x16_init::@4 to conio_x16_init::@5 [phi:conio_x16_init::@4->conio_x16_init::@5] - __b5_from___b4: - jmp __b5 - // conio_x16_init::@5 - __b5: - // [19] call vera_layer_set_textcolor - // [193] phi from conio_x16_init::@5 to vera_layer_set_textcolor [phi:conio_x16_init::@5->vera_layer_set_textcolor] - vera_layer_set_textcolor_from___b5: - // [193] phi vera_layer_set_textcolor::layer#2 = 1 [phi:conio_x16_init::@5->vera_layer_set_textcolor#0] -- vbuxx=vbuc1 - ldx #1 - jsr vera_layer_set_textcolor - // [20] phi from conio_x16_init::@5 to conio_x16_init::@6 [phi:conio_x16_init::@5->conio_x16_init::@6] - __b6_from___b5: - jmp __b6 - // conio_x16_init::@6 - __b6: - // [21] call vera_layer_set_backcolor - // [196] phi from conio_x16_init::@6 to vera_layer_set_backcolor [phi:conio_x16_init::@6->vera_layer_set_backcolor] - vera_layer_set_backcolor_from___b6: - // [196] phi vera_layer_set_backcolor::color#2 = BLUE [phi:conio_x16_init::@6->vera_layer_set_backcolor#0] -- vbuaa=vbuc1 - lda #BLUE - // [196] phi vera_layer_set_backcolor::layer#2 = 1 [phi:conio_x16_init::@6->vera_layer_set_backcolor#1] -- vbuxx=vbuc1 - ldx #1 - jsr vera_layer_set_backcolor - // [22] phi from conio_x16_init::@6 to conio_x16_init::@7 [phi:conio_x16_init::@6->conio_x16_init::@7] - __b7_from___b6: - jmp __b7 - // conio_x16_init::@7 - __b7: - // [23] call vera_layer_set_mapbase - // [199] phi from conio_x16_init::@7 to vera_layer_set_mapbase [phi:conio_x16_init::@7->vera_layer_set_mapbase] - vera_layer_set_mapbase_from___b7: - // [199] phi vera_layer_set_mapbase::mapbase#3 = $20 [phi:conio_x16_init::@7->vera_layer_set_mapbase#0] -- vbuxx=vbuc1 - ldx #$20 - // [199] phi vera_layer_set_mapbase::layer#3 = 0 [phi:conio_x16_init::@7->vera_layer_set_mapbase#1] -- vbuaa=vbuc1 - lda #0 - jsr vera_layer_set_mapbase - // [24] phi from conio_x16_init::@7 to conio_x16_init::@8 [phi:conio_x16_init::@7->conio_x16_init::@8] - __b8_from___b7: - jmp __b8 - // conio_x16_init::@8 - __b8: - // [25] call vera_layer_set_mapbase - // [199] phi from conio_x16_init::@8 to vera_layer_set_mapbase [phi:conio_x16_init::@8->vera_layer_set_mapbase] - vera_layer_set_mapbase_from___b8: - // [199] phi vera_layer_set_mapbase::mapbase#3 = 0 [phi:conio_x16_init::@8->vera_layer_set_mapbase#0] -- vbuxx=vbuc1 - ldx #0 - // [199] phi vera_layer_set_mapbase::layer#3 = 1 [phi:conio_x16_init::@8->vera_layer_set_mapbase#1] -- vbuaa=vbuc1 - lda #1 - jsr vera_layer_set_mapbase - jmp __b9 - // conio_x16_init::@9 - __b9: - // [26] if(conio_x16_init::line#0conio_x16_init::@1] - __b1_from___b2: - __b1_from___b9: - // [28] phi conio_x16_init::line#3 = conio_x16_init::line#1 [phi:conio_x16_init::@2/conio_x16_init::@9->conio_x16_init::@1#0] -- register_copy - jmp __b1 - // conio_x16_init::@1 - __b1: - // [29] gotoxy::y#1 = conio_x16_init::line#3 -- vbuxx=vbuz1 - ldx.z line - // [30] call gotoxy - // [204] phi from conio_x16_init::@1 to gotoxy [phi:conio_x16_init::@1->gotoxy] - gotoxy_from___b1: - // [204] phi gotoxy::y#4 = gotoxy::y#1 [phi:conio_x16_init::@1->gotoxy#0] -- register_copy - jsr gotoxy - jmp __breturn - // conio_x16_init::@return - __breturn: - // [31] return - rts -} - // cputc -// Output one character at the current cursor position -// Moves the cursor forward. Scrolls the entire screen if needed -// void cputc(__zp($25) char c) -cputc: { - .const OFFSET_STACK_C = 0 - .label __16 = 2 - .label c = $25 - .label conio_addr = 8 - // [33] cputc::c#0 = stackidx(char,cputc::OFFSET_STACK_C) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_C,x - sta.z c - // [34] vera_layer_get_color::layer#0 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [35] call vera_layer_get_color - // [217] phi from cputc to vera_layer_get_color [phi:cputc->vera_layer_get_color] - vera_layer_get_color_from_cputc: - // [217] phi vera_layer_get_color::layer#2 = vera_layer_get_color::layer#0 [phi:cputc->vera_layer_get_color#0] -- register_copy - jsr vera_layer_get_color - // [36] vera_layer_get_color::return#3 = vera_layer_get_color::return#2 - jmp __b7 - // cputc::@7 - __b7: - // [37] cputc::color#0 = vera_layer_get_color::return#3 -- vbuxx=vbuaa - tax - // [38] cputc::$15 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [39] cputc::conio_addr#0 = CONIO_SCREEN_TEXT#17 + conio_line_text[cputc::$15] -- pbuz1=pbuz2_plus_pwuc1_derefidx_vbuaa - tay - clc - lda.z CONIO_SCREEN_TEXT_1 - adc conio_line_text,y - sta.z conio_addr - lda.z CONIO_SCREEN_TEXT_1+1 - adc conio_line_text+1,y - sta.z conio_addr+1 - // [40] cputc::$2 = conio_cursor_x[conio_screen_layer] << 1 -- vbuaa=pbuc1_derefidx_vbuz1_rol_1 - ldy.z conio_screen_layer - lda conio_cursor_x,y - asl - // [41] cputc::conio_addr#1 = cputc::conio_addr#0 + cputc::$2 -- pbuz1=pbuz1_plus_vbuaa - clc - adc.z conio_addr - sta.z conio_addr - bcc !+ - inc.z conio_addr+1 - !: - // [42] if(cputc::c#0==' ') goto cputc::@1 -- vbuz1_eq_vbuc1_then_la1 - lda #'\n' - cmp.z c - beq __b1_from___b7 - jmp __b2 - // cputc::@2 - __b2: - // [43] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // [44] cputc::$4 = byte0 cputc::conio_addr#1 -- vbuaa=_byte0_pbuz1 - lda.z conio_addr - // [45] *VERA_ADDRX_L = cputc::$4 -- _deref_pbuc1=vbuaa - // Set address - sta VERA_ADDRX_L - // [46] cputc::$5 = byte1 cputc::conio_addr#1 -- vbuaa=_byte1_pbuz1 - lda.z conio_addr+1 - // [47] *VERA_ADDRX_M = cputc::$5 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // [48] cputc::$6 = CONIO_SCREEN_BANK#15 | VERA_INC_1 -- vbuaa=vbuz1_bor_vbuc1 - lda #VERA_INC_1 - ora.z CONIO_SCREEN_BANK_1 - // [49] *VERA_ADDRX_H = cputc::$6 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_H - // [50] *VERA_DATA0 = cputc::c#0 -- _deref_pbuc1=vbuz1 - lda.z c - sta VERA_DATA0 - // [51] *VERA_DATA0 = cputc::color#0 -- _deref_pbuc1=vbuxx - stx VERA_DATA0 - // [52] conio_cursor_x[conio_screen_layer] = ++ conio_cursor_x[conio_screen_layer] -- pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 - ldx.z conio_screen_layer - inc conio_cursor_x,x - // [53] cputc::scroll_enable#0 = conio_scroll_enable[conio_screen_layer] -- vbuaa=pbuc1_derefidx_vbuz1 - ldy.z conio_screen_layer - lda conio_scroll_enable,y - // [54] if(0!=cputc::scroll_enable#0) goto cputc::@5 -- 0_neq_vbuaa_then_la1 - cmp #0 - bne __b5 - jmp __b3 - // cputc::@3 - __b3: - // [55] cputc::$16 = (unsigned int)conio_cursor_x[conio_screen_layer] -- vwuz1=_word_pbuc1_derefidx_vbuz2 - ldy.z conio_screen_layer - lda conio_cursor_x,y - sta.z __16 - lda #0 - sta.z __16+1 - // [56] if(cputc::$16!=conio_width) goto cputc::@return -- vwuz1_neq_vwuz2_then_la1 - lda.z __16+1 - cmp.z conio_width+1 - bne __breturn - lda.z __16 - cmp.z conio_width - bne __breturn - // [57] phi from cputc::@3 to cputc::@4 [phi:cputc::@3->cputc::@4] - __b4_from___b3: - jmp __b4 - // cputc::@4 - __b4: - // [58] call cputln - jsr cputln - jmp __breturn - // cputc::@return - __breturn: - // [59] return - rts - // cputc::@5 - __b5: - // [60] if(conio_cursor_x[conio_screen_layer]!=conio_screen_width) goto cputc::@return -- pbuc1_derefidx_vbuz1_neq_vbuz2_then_la1 - lda.z conio_screen_width - ldy.z conio_screen_layer - cmp conio_cursor_x,y - bne __breturn - // [61] phi from cputc::@5 to cputc::@6 [phi:cputc::@5->cputc::@6] - __b6_from___b5: - jmp __b6 - // cputc::@6 - __b6: - // [62] call cputln - jsr cputln - jmp __breturn - // [63] phi from cputc::@7 to cputc::@1 [phi:cputc::@7->cputc::@1] - __b1_from___b7: - jmp __b1 - // cputc::@1 - __b1: - // [64] call cputln - jsr cputln - jmp __breturn -} - // main -main: { - .label tilebase = $48 - .label t = $3f - .label tile = $23 - .label c = $39 - // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. - .label row = $40 - .label r = $42 - .label column1 = $29 - // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. - .label row_1 = $41 - .label r1 = $43 - jmp textcolor1 - // main::textcolor1 - textcolor1: - // [66] vera_layer_set_textcolor::layer#1 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [67] call vera_layer_set_textcolor - // [193] phi from main::textcolor1 to vera_layer_set_textcolor [phi:main::textcolor1->vera_layer_set_textcolor] - vera_layer_set_textcolor_from_textcolor1: - // [193] phi vera_layer_set_textcolor::layer#2 = vera_layer_set_textcolor::layer#1 [phi:main::textcolor1->vera_layer_set_textcolor#0] -- register_copy - jsr vera_layer_set_textcolor - jmp bgcolor1 - // main::bgcolor1 - bgcolor1: - // [68] vera_layer_set_backcolor::layer#1 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [69] call vera_layer_set_backcolor - // [196] phi from main::bgcolor1 to vera_layer_set_backcolor [phi:main::bgcolor1->vera_layer_set_backcolor] - vera_layer_set_backcolor_from_bgcolor1: - // [196] phi vera_layer_set_backcolor::color#2 = BLACK [phi:main::bgcolor1->vera_layer_set_backcolor#0] -- vbuaa=vbuc1 - lda #BLACK - // [196] phi vera_layer_set_backcolor::layer#2 = vera_layer_set_backcolor::layer#1 [phi:main::bgcolor1->vera_layer_set_backcolor#1] -- register_copy - jsr vera_layer_set_backcolor - // [70] phi from main::bgcolor1 to main::@12 [phi:main::bgcolor1->main::@12] - __b12_from_bgcolor1: - jmp __b12 - // main::@12 - __b12: - // [71] call clrscr - jsr clrscr - // [72] phi from main::@12 to main::@14 [phi:main::@12->main::@14] - __b14_from___b12: - jmp __b14 - // main::@14 - __b14: - // [73] call vera_layer_mode_tile - // [268] phi from main::@14 to vera_layer_mode_tile [phi:main::@14->vera_layer_mode_tile] - vera_layer_mode_tile_from___b14: - // [268] phi vera_layer_mode_tile::tileheight#10 = 8 [phi:main::@14->vera_layer_mode_tile#0] -- vbuz1=vbuc1 - lda #8 - sta.z vera_layer_mode_tile.tileheight - // [268] phi vera_layer_mode_tile::tilewidth#10 = 8 [phi:main::@14->vera_layer_mode_tile#1] -- vbuz1=vbuc1 - lda #8 - sta.z vera_layer_mode_tile.tilewidth - // [268] phi vera_layer_mode_tile::tilebase_address#10 = $14000 [phi:main::@14->vera_layer_mode_tile#2] -- vduz1=vduc1 - lda #<$14000 - sta.z vera_layer_mode_tile.tilebase_address_1 - lda #>$14000 - sta.z vera_layer_mode_tile.tilebase_address_1+1 - lda #<$14000>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+2 - lda #>$14000>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+3 - // [268] phi vera_layer_mode_tile::mapbase_address#10 = $4000 [phi:main::@14->vera_layer_mode_tile#3] -- vduz1=vduc1 - lda #<$4000 - sta.z vera_layer_mode_tile.mapbase_address_1 - lda #>$4000 - sta.z vera_layer_mode_tile.mapbase_address_1+1 - lda #<$4000>>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+2 - lda #>$4000>>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+3 - // [268] phi vera_layer_mode_tile::mapheight#10 = $80 [phi:main::@14->vera_layer_mode_tile#4] -- vwuz1=vbuc1 - lda #<$80 - sta.z vera_layer_mode_tile.mapheight - lda #>$80 - sta.z vera_layer_mode_tile.mapheight+1 - // [268] phi vera_layer_mode_tile::layer#10 = 0 [phi:main::@14->vera_layer_mode_tile#5] -- vbuz1=vbuc1 - lda #0 - sta.z vera_layer_mode_tile.layer - // [268] phi vera_layer_mode_tile::mapwidth#10 = $80 [phi:main::@14->vera_layer_mode_tile#6] -- vwuz1=vbuc1 - lda #<$80 - sta.z vera_layer_mode_tile.mapwidth - lda #>$80 - sta.z vera_layer_mode_tile.mapwidth+1 - // [268] phi vera_layer_mode_tile::color_depth#2 = 8 [phi:main::@14->vera_layer_mode_tile#7] -- vbuxx=vbuc1 - ldx #8 - jsr vera_layer_mode_tile - // [74] phi from main::@14 to main::@15 [phi:main::@14->main::@15] - __b15_from___b14: - jmp __b15 - // main::@15 - __b15: - // [75] call memcpy_to_vram - // [338] phi from main::@15 to memcpy_to_vram [phi:main::@15->memcpy_to_vram] - memcpy_to_vram_from___b15: - // [338] phi memcpy_to_vram::vdest#2 = (void *)(char *) 16384 [phi:main::@15->memcpy_to_vram#0] -- pvoz1=pvoc1 - lda #<$4000 - sta.z memcpy_to_vram.vdest - lda #>$4000 - sta.z memcpy_to_vram.vdest+1 - jsr memcpy_to_vram - // [76] phi from main::@15 to main::@1 [phi:main::@15->main::@1] - __b1_from___b15: - // [76] phi main::t#5 = 1 [phi:main::@15->main::@1#0] -- vbuz1=vbuc1 - lda #1 - sta.z t - // [76] phi main::tilebase#7 = (char *) 16384+$40 [phi:main::@15->main::@1#1] -- pbuz1=pbuc1 - lda #<$4000+$40 - sta.z tilebase - lda #>$4000+$40 - sta.z tilebase+1 - jmp __b1 - // [76] phi from main::@16 to main::@1 [phi:main::@16->main::@1] - __b1_from___b16: - // [76] phi main::t#5 = main::t#1 [phi:main::@16->main::@1#0] -- register_copy - // [76] phi main::tilebase#7 = main::tilebase#2 [phi:main::@16->main::@1#1] -- register_copy - jmp __b1 - // main::@1 - __b1: - // [77] phi from main::@1 to main::@2 [phi:main::@1->main::@2] - __b2_from___b1: - // [77] phi main::p#2 = 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1 - ldx #0 - jmp __b2 - // [77] phi from main::@2 to main::@2 [phi:main::@2->main::@2] - __b2_from___b2: - // [77] phi main::p#2 = main::p#1 [phi:main::@2->main::@2#0] -- register_copy - jmp __b2 - // main::@2 - __b2: - // [78] main::tiles[main::p#2] = main::tiles[main::p#2] + 1 -- pbuc1_derefidx_vbuxx=pbuc1_derefidx_vbuxx_plus_1 - lda tiles,x - inc - sta tiles,x - // [79] main::p#1 = ++ main::p#2 -- vbuxx=_inc_vbuxx - inx - // [80] if(main::p#1!=$40) goto main::@2 -- vbuxx_neq_vbuc1_then_la1 - cpx #$40 - bne __b2_from___b2 - jmp __b3 - // main::@3 - __b3: - // [81] memcpy_to_vram::vdest#1 = (void *)main::tilebase#7 -- pvoz1=pvoz2 - lda.z tilebase - sta.z memcpy_to_vram.vdest - lda.z tilebase+1 - sta.z memcpy_to_vram.vdest+1 - // [82] call memcpy_to_vram - // [338] phi from main::@3 to memcpy_to_vram [phi:main::@3->memcpy_to_vram] - memcpy_to_vram_from___b3: - // [338] phi memcpy_to_vram::vdest#2 = memcpy_to_vram::vdest#1 [phi:main::@3->memcpy_to_vram#0] -- register_copy - jsr memcpy_to_vram - jmp __b16 - // main::@16 - __b16: - // [83] main::tilebase#2 = main::tilebase#7 + $40 -- pbuz1=pbuz1_plus_vbuc1 - lda #$40 - clc - adc.z tilebase - sta.z tilebase - bcc !+ - inc.z tilebase+1 - !: - // [84] main::t#1 = ++ main::t#5 -- vbuz1=_inc_vbuz1 - inc.z t - // [85] if(main::t#1!=0) goto main::@1 -- vbuz1_neq_0_then_la1 - lda.z t - bne __b1_from___b16 - // [86] phi from main::@16 to main::@4 [phi:main::@16->main::@4] - __b4_from___b16: - jmp __b4 - // main::@4 - __b4: - // [87] call vera_tile_area - //vera_tile_area(byte layer, word tileindex, byte x, byte y, byte w, byte h, byte hflip, byte vflip, byte offset) - // [350] phi from main::@4 to vera_tile_area [phi:main::@4->vera_tile_area] - vera_tile_area_from___b4: - // [350] phi vera_tile_area::w#9 = $50 [phi:main::@4->vera_tile_area#0] -- vbuz1=vbuc1 - lda #$50 - sta.z vera_tile_area.w - // [350] phi vera_tile_area::h#4 = $3c [phi:main::@4->vera_tile_area#1] -- vbuz1=vbuc1 - lda #$3c - sta.z vera_tile_area.h - // [350] phi vera_tile_area::x#3 = 0 [phi:main::@4->vera_tile_area#2] -- vbuz1=vbuc1 - lda #0 - sta.z vera_tile_area.x - // [350] phi vera_tile_area::y#3 = 0 [phi:main::@4->vera_tile_area#3] -- vbuz1=vbuc1 - lda #0 - sta.z vera_tile_area.y - // [350] phi vera_tile_area::tileindex#3 = 0 [phi:main::@4->vera_tile_area#4] -- vwuz1=vbuc1 - lda #<0 - sta.z vera_tile_area.tileindex - lda #>0 - sta.z vera_tile_area.tileindex+1 - jsr vera_tile_area - // [88] phi from main::@4 to main::@5 [phi:main::@4->main::@5] - __b5_from___b4: - // [88] phi main::r#5 = 0 [phi:main::@4->main::@5#0] -- vbuz1=vbuc1 - lda #0 - sta.z r - // [88] phi main::row#9 = 1 [phi:main::@4->main::@5#1] -- vbuz1=vbuc1 - lda #1 - sta.z row - // [88] phi main::tile#10 = 0 [phi:main::@4->main::@5#2] -- vwuz1=vwuc1 - lda #<0 - sta.z tile - lda #>0 - sta.z tile+1 - jmp __b5 - // [88] phi from main::@7 to main::@5 [phi:main::@7->main::@5] - __b5_from___b7: - // [88] phi main::r#5 = main::r#1 [phi:main::@7->main::@5#0] -- register_copy - // [88] phi main::row#9 = main::row#1 [phi:main::@7->main::@5#1] -- register_copy - // [88] phi main::tile#10 = main::tile#12 [phi:main::@7->main::@5#2] -- register_copy - jmp __b5 - // main::@5 - __b5: - // [89] phi from main::@5 to main::@6 [phi:main::@5->main::@6] - __b6_from___b5: - // [89] phi main::c#2 = 0 [phi:main::@5->main::@6#0] -- vbuz1=vbuc1 - lda #0 - sta.z c - // [89] phi main::column#2 = 1 [phi:main::@5->main::@6#1] -- vbuxx=vbuc1 - ldx #1 - // [89] phi main::tile#6 = main::tile#10 [phi:main::@5->main::@6#2] -- register_copy - jmp __b6 - // [89] phi from main::@17 to main::@6 [phi:main::@17->main::@6] - __b6_from___b17: - // [89] phi main::c#2 = main::c#1 [phi:main::@17->main::@6#0] -- register_copy - // [89] phi main::column#2 = main::column#1 [phi:main::@17->main::@6#1] -- register_copy - // [89] phi main::tile#6 = main::tile#12 [phi:main::@17->main::@6#2] -- register_copy - jmp __b6 - // main::@6 - __b6: - // [90] vera_tile_area::tileindex#1 = main::tile#6 - // [91] vera_tile_area::x#1 = main::column#2 -- vbuz1=vbuxx - stx.z vera_tile_area.x - // [92] vera_tile_area::y#1 = main::row#9 -- vbuz1=vbuz2 - lda.z row - sta.z vera_tile_area.y - // [93] call vera_tile_area - // [350] phi from main::@6 to vera_tile_area [phi:main::@6->vera_tile_area] - vera_tile_area_from___b6: - // [350] phi vera_tile_area::w#9 = 1 [phi:main::@6->vera_tile_area#0] -- vbuz1=vbuc1 - lda #1 - sta.z vera_tile_area.w - // [350] phi vera_tile_area::h#4 = 1 [phi:main::@6->vera_tile_area#1] -- vbuz1=vbuc1 - lda #1 - sta.z vera_tile_area.h - // [350] phi vera_tile_area::x#3 = vera_tile_area::x#1 [phi:main::@6->vera_tile_area#2] -- register_copy - // [350] phi vera_tile_area::y#3 = vera_tile_area::y#1 [phi:main::@6->vera_tile_area#3] -- register_copy - // [350] phi vera_tile_area::tileindex#3 = vera_tile_area::tileindex#1 [phi:main::@6->vera_tile_area#4] -- register_copy - jsr vera_tile_area - jmp __b17 - // main::@17 - __b17: - // [94] main::column#1 = main::column#2 + 2 -- vbuxx=vbuxx_plus_2 - inx - inx - // [95] main::tile#1 = ++ main::tile#6 -- vwuz1=_inc_vwuz1 - inc.z tile - bne !+ - inc.z tile+1 - !: - // [96] main::tile#12 = main::tile#1 & $ff -- vwuz1=vwuz1_band_vbuc1 - lda #$ff - and.z tile - sta.z tile - lda #0 - sta.z tile+1 - // [97] main::c#1 = ++ main::c#2 -- vbuz1=_inc_vbuz1 - inc.z c - // [98] if(main::c#1!=$20) goto main::@6 -- vbuz1_neq_vbuc1_then_la1 - lda #$20 - cmp.z c - bne __b6_from___b17 - jmp __b7 - // main::@7 - __b7: - // [99] main::row#1 = main::row#9 + 2 -- vbuz1=vbuz1_plus_2 - lda.z row - clc - adc #2 - sta.z row - // [100] main::r#1 = ++ main::r#5 -- vbuz1=_inc_vbuz1 - inc.z r - // [101] if(main::r#1!=8) goto main::@5 -- vbuz1_neq_vbuc1_then_la1 - lda #8 - cmp.z r - bne __b5_from___b7 - // [102] phi from main::@7 to main::@8 [phi:main::@7->main::@8] - __b8_from___b7: - // [102] phi main::r1#5 = 0 [phi:main::@7->main::@8#0] -- vbuz1=vbuc1 - lda #0 - sta.z r1 - // [102] phi main::row#11 = $14 [phi:main::@7->main::@8#1] -- vbuz1=vbuc1 - lda #$14 - sta.z row_1 - // [102] phi main::tile#11 = 0 [phi:main::@7->main::@8#2] -- vwuz1=vbuc1 - lda #<0 - sta.z tile - lda #>0 - sta.z tile+1 - jmp __b8 - // [102] phi from main::@10 to main::@8 [phi:main::@10->main::@8] - __b8_from___b10: - // [102] phi main::r1#5 = main::r1#1 [phi:main::@10->main::@8#0] -- register_copy - // [102] phi main::row#11 = main::row#3 [phi:main::@10->main::@8#1] -- register_copy - // [102] phi main::tile#11 = main::tile#13 [phi:main::@10->main::@8#2] -- register_copy - jmp __b8 - // main::@8 - __b8: - // [103] phi from main::@8 to main::@9 [phi:main::@8->main::@9] - __b9_from___b8: - // [103] phi main::c1#2 = 0 [phi:main::@8->main::@9#0] -- vbuxx=vbuc1 - ldx #0 - // [103] phi main::column1#2 = 1 [phi:main::@8->main::@9#1] -- vbuz1=vbuc1 - lda #1 - sta.z column1 - // [103] phi main::tile#8 = main::tile#11 [phi:main::@8->main::@9#2] -- register_copy - jmp __b9 - // [103] phi from main::@18 to main::@9 [phi:main::@18->main::@9] - __b9_from___b18: - // [103] phi main::c1#2 = main::c1#1 [phi:main::@18->main::@9#0] -- register_copy - // [103] phi main::column1#2 = main::column1#1 [phi:main::@18->main::@9#1] -- register_copy - // [103] phi main::tile#8 = main::tile#13 [phi:main::@18->main::@9#2] -- register_copy - jmp __b9 - // main::@9 - __b9: - // [104] vera_tile_area::tileindex#2 = main::tile#8 - // [105] vera_tile_area::x#2 = main::column1#2 - // [106] vera_tile_area::y#2 = main::row#11 -- vbuz1=vbuz2 - lda.z row_1 - sta.z vera_tile_area.y - // [107] call vera_tile_area - // [350] phi from main::@9 to vera_tile_area [phi:main::@9->vera_tile_area] - vera_tile_area_from___b9: - // [350] phi vera_tile_area::w#9 = 2 [phi:main::@9->vera_tile_area#0] -- vbuz1=vbuc1 - lda #2 - sta.z vera_tile_area.w - // [350] phi vera_tile_area::h#4 = 2 [phi:main::@9->vera_tile_area#1] -- vbuz1=vbuc1 - lda #2 - sta.z vera_tile_area.h - // [350] phi vera_tile_area::x#3 = vera_tile_area::x#2 [phi:main::@9->vera_tile_area#2] -- register_copy - // [350] phi vera_tile_area::y#3 = vera_tile_area::y#2 [phi:main::@9->vera_tile_area#3] -- register_copy - // [350] phi vera_tile_area::tileindex#3 = vera_tile_area::tileindex#2 [phi:main::@9->vera_tile_area#4] -- register_copy - jsr vera_tile_area - jmp __b18 - // main::@18 - __b18: - // [108] main::column1#1 = main::column1#2 + 2 -- vbuz1=vbuz1_plus_2 - lda.z column1 - clc - adc #2 - sta.z column1 - // [109] main::tile#4 = ++ main::tile#8 -- vwuz1=_inc_vwuz1 - inc.z tile - bne !+ - inc.z tile+1 - !: - // [110] main::tile#13 = main::tile#4 & $ff -- vwuz1=vwuz1_band_vbuc1 - lda #$ff - and.z tile - sta.z tile - lda #0 - sta.z tile+1 - // [111] main::c1#1 = ++ main::c1#2 -- vbuxx=_inc_vbuxx - inx - // [112] if(main::c1#1!=$20) goto main::@9 -- vbuxx_neq_vbuc1_then_la1 - cpx #$20 - bne __b9_from___b18 - jmp __b10 - // main::@10 - __b10: - // [113] main::row#3 = main::row#11 + 2 -- vbuz1=vbuz1_plus_2 - lda.z row_1 - clc - adc #2 - sta.z row_1 - // [114] main::r1#1 = ++ main::r1#5 -- vbuz1=_inc_vbuz1 - inc.z r1 - // [115] if(main::r1#1!=8) goto main::@8 -- vbuz1_neq_vbuc1_then_la1 - lda #8 - cmp.z r1 - bne __b8_from___b10 - jmp vera_layer_show1 - // main::vera_layer_show1 - vera_layer_show1: - // [116] *VERA_DC_VIDEO = *VERA_DC_VIDEO | *vera_layer_enable -- _deref_pbuc1=_deref_pbuc1_bor__deref_pbuc2 - lda VERA_DC_VIDEO - ora vera_layer_enable - sta VERA_DC_VIDEO - // [117] phi from main::vera_layer_show1 to main::@13 [phi:main::vera_layer_show1->main::@13] - __b13_from_vera_layer_show1: - jmp __b13 - // main::@13 - __b13: - // [118] call gotoxy - // [204] phi from main::@13 to gotoxy [phi:main::@13->gotoxy] - gotoxy_from___b13: - // [204] phi gotoxy::y#4 = $32 [phi:main::@13->gotoxy#0] -- vbuxx=vbuc1 - ldx #$32 - jsr gotoxy - // [119] phi from main::@13 to main::@19 [phi:main::@13->main::@19] - __b19_from___b13: - jmp __b19 - // main::@19 - __b19: - // [120] call printf_str - // [383] phi from main::@19 to printf_str [phi:main::@19->printf_str] - printf_str_from___b19: - // [383] phi printf_str::s#10 = main::s [phi:main::@19->printf_str#0] -- pbuz1=pbuc1 - lda #s - sta.z printf_str.s+1 - jsr printf_str - // [121] phi from main::@19 to main::@20 [phi:main::@19->main::@20] - __b20_from___b19: - jmp __b20 - // main::@20 - __b20: - // [122] call printf_str - // [383] phi from main::@20 to printf_str [phi:main::@20->printf_str] - printf_str_from___b20: - // [383] phi printf_str::s#10 = main::s1 [phi:main::@20->printf_str#0] -- pbuz1=pbuc1 - lda #s1 - sta.z printf_str.s+1 - jsr printf_str - // [123] phi from main::@20 to main::@21 [phi:main::@20->main::@21] - __b21_from___b20: - jmp __b21 - // main::@21 - __b21: - // [124] call printf_str - // [383] phi from main::@21 to printf_str [phi:main::@21->printf_str] - printf_str_from___b21: - // [383] phi printf_str::s#10 = main::s2 [phi:main::@21->printf_str#0] -- pbuz1=pbuc1 - lda #s2 - sta.z printf_str.s+1 - jsr printf_str - // [125] phi from main::@21 to main::@22 [phi:main::@21->main::@22] - __b22_from___b21: - jmp __b22 - // main::@22 - __b22: - // [126] call printf_str - // [383] phi from main::@22 to printf_str [phi:main::@22->printf_str] - printf_str_from___b22: - // [383] phi printf_str::s#10 = main::s3 [phi:main::@22->printf_str#0] -- pbuz1=pbuc1 - lda #s3 - sta.z printf_str.s+1 - jsr printf_str - // [127] phi from main::@22 to main::@23 [phi:main::@22->main::@23] - __b23_from___b22: - jmp __b23 - // main::@23 - __b23: - // [128] call printf_str - // [383] phi from main::@23 to printf_str [phi:main::@23->printf_str] - printf_str_from___b23: - // [383] phi printf_str::s#10 = main::s4 [phi:main::@23->printf_str#0] -- pbuz1=pbuc1 - lda #s4 - sta.z printf_str.s+1 - jsr printf_str - // [129] phi from main::@23 to main::@24 [phi:main::@23->main::@24] - __b24_from___b23: - jmp __b24 - // main::@24 - __b24: - // [130] call printf_str - // [383] phi from main::@24 to printf_str [phi:main::@24->printf_str] - printf_str_from___b24: - // [383] phi printf_str::s#10 = main::s5 [phi:main::@24->printf_str#0] -- pbuz1=pbuc1 - lda #s5 - sta.z printf_str.s+1 - jsr printf_str - // [131] phi from main::@24 to main::@25 [phi:main::@24->main::@25] - __b25_from___b24: - jmp __b25 - // main::@25 - __b25: - // [132] call printf_str - // [383] phi from main::@25 to printf_str [phi:main::@25->printf_str] - printf_str_from___b25: - // [383] phi printf_str::s#10 = main::s6 [phi:main::@25->printf_str#0] -- pbuz1=pbuc1 - lda #s6 - sta.z printf_str.s+1 - jsr printf_str - // [133] phi from main::@25 to main::@26 [phi:main::@25->main::@26] - __b26_from___b25: - jmp __b26 - // main::@26 - __b26: - // [134] call printf_str - // [383] phi from main::@26 to printf_str [phi:main::@26->printf_str] - printf_str_from___b26: - // [383] phi printf_str::s#10 = main::s7 [phi:main::@26->printf_str#0] -- pbuz1=pbuc1 - lda #s7 - sta.z printf_str.s+1 - jsr printf_str - // [135] phi from main::@26 main::@27 to main::@11 [phi:main::@26/main::@27->main::@11] - __b11_from___b26: - __b11_from___b27: - jmp __b11 - // main::@11 - __b11: - // [136] call kbhit - jsr kbhit - // [137] kbhit::return#2 = kbhit::return#1 - jmp __b27 - // main::@27 - __b27: - // [138] main::$25 = kbhit::return#2 - // [139] if(0==main::$25) goto main::@11 -- 0_eq_vbuaa_then_la1 - cmp #0 - beq __b11_from___b27 - jmp __breturn - // main::@return - __breturn: - // [140] return - rts - .segment Data - tiles: .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - s: .text @"vera in tile mode 8 x 8, color depth 8 bits per pixel.\n" - .byte 0 - s1: .text @"in this mode, tiles are 8 pixels wide and 8 pixels tall.\n" - .byte 0 - s2: .text @"each tile can have a variation of 256 colors.\n" - .byte 0 - s3: .text @"the vera palette of 256 colors, can be used by setting the palette\n" - .byte 0 - s4: .text @"offset for each tile.\n" - .byte 0 - s5: .text @"here each column is displaying the same tile, but with different offsets!\n" - .byte 0 - s6: .text @"each offset aligns to multiples of 16 colors in the palette!.\n" - .byte 0 - s7: .text @"however, the first color will always be transparent (black).\n" - .byte 0 -} -.segment Code - // vera_layer_mode_text -// Set a vera layer in text mode and configure the: -// - layer: Value of 0 or 1. -// - mapbase_address: A dword typed address (4 bytes), that specifies the full address of the map base. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective mapbase vera register. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// - tilebase_address: A dword typed address (4 bytes), that specifies the base address of the tile map. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective tilebase vera register. -// Note that the resulting vera register holds only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// - mapwidth: The width of the map in number of tiles. -// - mapheight: The height of the map in number of tiles. -// - tilewidth: The width of a tile, which can be 8 or 16 pixels. -// - tileheight: The height of a tile, which can be 8 or 16 pixels. -// - color_mode: The color mode, which can be 16 or 256. -// void vera_layer_mode_text(char layer, unsigned long mapbase_address, unsigned long tilebase_address, unsigned int mapwidth, unsigned int mapheight, char tilewidth, char tileheight, unsigned int color_mode) -vera_layer_mode_text: { - .const mapbase_address = 0 - .const tilebase_address = $f800 - .const mapwidth = $80 - .const mapheight = $40 - .const tilewidth = 8 - .const tileheight = 8 - .label layer = 1 - // [142] call vera_layer_mode_tile - // [268] phi from vera_layer_mode_text to vera_layer_mode_tile [phi:vera_layer_mode_text->vera_layer_mode_tile] - vera_layer_mode_tile_from_vera_layer_mode_text: - // [268] phi vera_layer_mode_tile::tileheight#10 = vera_layer_mode_text::tileheight#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#0] -- vbuz1=vbuc1 - lda #tileheight - sta.z vera_layer_mode_tile.tileheight - // [268] phi vera_layer_mode_tile::tilewidth#10 = vera_layer_mode_text::tilewidth#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#1] -- vbuz1=vbuc1 - lda #tilewidth - sta.z vera_layer_mode_tile.tilewidth - // [268] phi vera_layer_mode_tile::tilebase_address#10 = vera_layer_mode_text::tilebase_address#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#2] -- vduz1=vduc1 - lda #tilebase_address - sta.z vera_layer_mode_tile.tilebase_address_1+1 - lda #>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+2 - lda #>tilebase_address>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+3 - // [268] phi vera_layer_mode_tile::mapbase_address#10 = vera_layer_mode_text::mapbase_address#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#3] -- vduz1=vduc1 - lda #mapbase_address - sta.z vera_layer_mode_tile.mapbase_address_1+1 - lda #>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+2 - lda #>mapbase_address>>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+3 - // [268] phi vera_layer_mode_tile::mapheight#10 = vera_layer_mode_text::mapheight#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#4] -- vwuz1=vwuc1 - lda #mapheight - sta.z vera_layer_mode_tile.mapheight+1 - // [268] phi vera_layer_mode_tile::layer#10 = vera_layer_mode_text::layer#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#5] -- vbuz1=vbuc1 - lda #layer - sta.z vera_layer_mode_tile.layer - // [268] phi vera_layer_mode_tile::mapwidth#10 = vera_layer_mode_text::mapwidth#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#6] -- vwuz1=vwuc1 - lda #mapwidth - sta.z vera_layer_mode_tile.mapwidth+1 - // [268] phi vera_layer_mode_tile::color_depth#2 = 1 [phi:vera_layer_mode_text->vera_layer_mode_tile#7] -- vbuxx=vbuc1 - ldx #1 - jsr vera_layer_mode_tile - // [143] phi from vera_layer_mode_text to vera_layer_mode_text::@1 [phi:vera_layer_mode_text->vera_layer_mode_text::@1] - __b1_from_vera_layer_mode_text: - jmp __b1 - // vera_layer_mode_text::@1 - __b1: - // [144] call vera_layer_set_text_color_mode - jsr vera_layer_set_text_color_mode - jmp __breturn - // vera_layer_mode_text::@return - __breturn: - // [145] return - rts -} - // screensize -// Return the current screen size. -// void screensize(char *x, char *y) -screensize: { - .label x = conio_screen_width - .label y = conio_screen_height - // [146] screensize::hscale#0 = *VERA_DC_HSCALE >> 7 -- vbuaa=_deref_pbuc1_ror_7 - // VERA returns in VERA_DC_HSCALE the value of 128 when 80 columns is used in text mode, - // and the value of 64 when 40 columns is used in text mode. - // Basically, 40 columns mode in the VERA is a double scan mode. - // Same for the VERA_DC_VSCALE mode, but then the subdivision is 60 or 30 rows. - // I still need to test the other modes, but this will suffice for now for the pure text modes. - lda VERA_DC_HSCALE - rol - rol - and #1 - // [147] screensize::$1 = $28 << screensize::hscale#0 -- vbuaa=vbuc1_rol_vbuaa - tay - lda #$28 - cpy #0 - beq !e+ - !: - asl - dey - bne !- - !e: - // [148] *screensize::x#0 = screensize::$1 -- _deref_pbuc1=vbuaa - sta.z x - // [149] screensize::vscale#0 = *VERA_DC_VSCALE >> 7 -- vbuaa=_deref_pbuc1_ror_7 - lda VERA_DC_VSCALE - rol - rol - and #1 - // [150] screensize::$3 = $1e << screensize::vscale#0 -- vbuaa=vbuc1_rol_vbuaa - tay - lda #$1e - cpy #0 - beq !e+ - !: - asl - dey - bne !- - !e: - // [151] *screensize::y#0 = screensize::$3 -- _deref_pbuc1=vbuaa - sta.z y - jmp __breturn - // screensize::@return - __breturn: - // [152] return - rts -} - // screenlayer -// Set the layer with which the conio will interact. -// - layer: value of 0 or 1. -// void screenlayer(char layer) -screenlayer: { - .const layer = 1 - .label __2 = $f - .label __4 = $37 - .label __5 = $2b - .label vera_layer_get_width1_config = $21 - .label vera_layer_get_width1_return = $f - .label vera_layer_get_height1_config = $2d - .label vera_layer_get_height1_return = $2b - // [153] conio_screen_layer = screenlayer::layer#0 -- vbuz1=vbuc1 - lda #layer - sta.z conio_screen_layer - // [154] vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [155] call vera_layer_get_mapbase_bank - jsr vera_layer_get_mapbase_bank - // [156] vera_layer_get_mapbase_bank::return#2 = vera_layer_get_mapbase_bank::return#0 - jmp __b3 - // screenlayer::@3 - __b3: - // [157] CONIO_SCREEN_BANK#11 = vera_layer_get_mapbase_bank::return#2 -- vbuz1=vbuaa - sta.z CONIO_SCREEN_BANK - // [158] vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer -- vbuaa=vbuz1 - lda.z conio_screen_layer - // [159] call vera_layer_get_mapbase_offset - jsr vera_layer_get_mapbase_offset - // [160] vera_layer_get_mapbase_offset::return#2 = vera_layer_get_mapbase_offset::return#0 - jmp __b4 - // screenlayer::@4 - __b4: - // [161] CONIO_SCREEN_TEXT#13 = vera_layer_get_mapbase_offset::return#2 -- vwuz1=vwuz2 - lda.z vera_layer_get_mapbase_offset.return - sta.z CONIO_SCREEN_TEXT - lda.z vera_layer_get_mapbase_offset.return+1 - sta.z CONIO_SCREEN_TEXT+1 - // [162] screenlayer::vera_layer_get_width1_layer#0 = conio_screen_layer -- vbuaa=vbuz1 - lda.z conio_screen_layer - jmp vera_layer_get_width1 - // screenlayer::vera_layer_get_width1 - vera_layer_get_width1: - // [163] screenlayer::vera_layer_get_width1_$2 = screenlayer::vera_layer_get_width1_layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [164] screenlayer::vera_layer_get_width1_config#0 = vera_layer_config[screenlayer::vera_layer_get_width1_$2] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_config,y - sta.z vera_layer_get_width1_config - lda vera_layer_config+1,y - sta.z vera_layer_get_width1_config+1 - // [165] screenlayer::vera_layer_get_width1_$0 = *screenlayer::vera_layer_get_width1_config#0 & VERA_LAYER_WIDTH_MASK -- vbuaa=_deref_pbuz1_band_vbuc1 - lda #VERA_LAYER_WIDTH_MASK - ldy #0 - and (vera_layer_get_width1_config),y - // [166] screenlayer::vera_layer_get_width1_$1 = screenlayer::vera_layer_get_width1_$0 >> 4 -- vbuaa=vbuaa_ror_4 - lsr - lsr - lsr - lsr - // [167] screenlayer::vera_layer_get_width1_$3 = screenlayer::vera_layer_get_width1_$1 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [168] screenlayer::vera_layer_get_width1_return#0 = VERA_LAYER_WIDTH[screenlayer::vera_layer_get_width1_$3] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda VERA_LAYER_WIDTH,y - sta.z vera_layer_get_width1_return - lda VERA_LAYER_WIDTH+1,y - sta.z vera_layer_get_width1_return+1 - jmp vera_layer_get_width1___breturn - // screenlayer::vera_layer_get_width1_@return - vera_layer_get_width1___breturn: - // [169] screenlayer::vera_layer_get_width1_return#1 = screenlayer::vera_layer_get_width1_return#0 - jmp __b1 - // screenlayer::@1 - __b1: - // [170] screenlayer::$2 = screenlayer::vera_layer_get_width1_return#1 - // [171] conio_width = screenlayer::$2 -- vwuz1=vwuz2 - lda.z __2 - sta.z conio_width - lda.z __2+1 - sta.z conio_width+1 - // [172] vera_layer_get_rowshift::layer#0 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [173] call vera_layer_get_rowshift - jsr vera_layer_get_rowshift - // [174] vera_layer_get_rowshift::return#2 = vera_layer_get_rowshift::return#0 - jmp __b5 - // screenlayer::@5 - __b5: - // [175] screenlayer::$3 = vera_layer_get_rowshift::return#2 - // [176] conio_rowshift = screenlayer::$3 -- vbuz1=vbuaa - sta.z conio_rowshift - // [177] vera_layer_get_rowskip::layer#0 = conio_screen_layer -- vbuaa=vbuz1 - lda.z conio_screen_layer - // [178] call vera_layer_get_rowskip - jsr vera_layer_get_rowskip - // [179] vera_layer_get_rowskip::return#2 = vera_layer_get_rowskip::return#0 - jmp __b6 - // screenlayer::@6 - __b6: - // [180] screenlayer::$4 = vera_layer_get_rowskip::return#2 - // [181] conio_rowskip = screenlayer::$4 -- vwuz1=vwuz2 - lda.z __4 - sta.z conio_rowskip - lda.z __4+1 - sta.z conio_rowskip+1 - // [182] screenlayer::vera_layer_get_height1_layer#0 = conio_screen_layer -- vbuaa=vbuz1 - lda.z conio_screen_layer - jmp vera_layer_get_height1 - // screenlayer::vera_layer_get_height1 - vera_layer_get_height1: - // [183] screenlayer::vera_layer_get_height1_$2 = screenlayer::vera_layer_get_height1_layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [184] screenlayer::vera_layer_get_height1_config#0 = vera_layer_config[screenlayer::vera_layer_get_height1_$2] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_config,y - sta.z vera_layer_get_height1_config - lda vera_layer_config+1,y - sta.z vera_layer_get_height1_config+1 - // [185] screenlayer::vera_layer_get_height1_$0 = *screenlayer::vera_layer_get_height1_config#0 & VERA_LAYER_HEIGHT_MASK -- vbuaa=_deref_pbuz1_band_vbuc1 - lda #VERA_LAYER_HEIGHT_MASK - ldy #0 - and (vera_layer_get_height1_config),y - // [186] screenlayer::vera_layer_get_height1_$1 = screenlayer::vera_layer_get_height1_$0 >> 6 -- vbuaa=vbuaa_ror_6 - rol - rol - rol - and #3 - // [187] screenlayer::vera_layer_get_height1_$3 = screenlayer::vera_layer_get_height1_$1 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [188] screenlayer::vera_layer_get_height1_return#0 = VERA_LAYER_HEIGHT[screenlayer::vera_layer_get_height1_$3] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda VERA_LAYER_HEIGHT,y - sta.z vera_layer_get_height1_return - lda VERA_LAYER_HEIGHT+1,y - sta.z vera_layer_get_height1_return+1 - jmp vera_layer_get_height1___breturn - // screenlayer::vera_layer_get_height1_@return - vera_layer_get_height1___breturn: - // [189] screenlayer::vera_layer_get_height1_return#1 = screenlayer::vera_layer_get_height1_return#0 - jmp __b2 - // screenlayer::@2 - __b2: - // [190] screenlayer::$5 = screenlayer::vera_layer_get_height1_return#1 - // [191] conio_height = screenlayer::$5 -- vwuz1=vwuz2 - lda.z __5 - sta.z conio_height - lda.z __5+1 - sta.z conio_height+1 - jmp __breturn - // screenlayer::@return - __breturn: - // [192] return - rts -} - // vera_layer_set_textcolor -// Set the front color for text output. The old front text color setting is returned. -// - layer: Value of 0 or 1. -// - color: a 4 bit value ( decimal between 0 and 15) when the VERA works in 16x16 color text mode. -// An 8 bit value (decimal between 0 and 255) when the VERA works in 256 text mode. -// Note that on the VERA, the transparent color has value 0. -// char vera_layer_set_textcolor(__register(X) char layer, char color) -vera_layer_set_textcolor: { - // [194] vera_layer_textcolor[vera_layer_set_textcolor::layer#2] = WHITE -- pbuc1_derefidx_vbuxx=vbuc2 - lda #WHITE - sta vera_layer_textcolor,x - jmp __breturn - // vera_layer_set_textcolor::@return - __breturn: - // [195] return - rts -} - // vera_layer_set_backcolor -// Set the back color for text output. The old back text color setting is returned. -// - layer: Value of 0 or 1. -// - color: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// char vera_layer_set_backcolor(__register(X) char layer, __register(A) char color) -vera_layer_set_backcolor: { - // [197] vera_layer_backcolor[vera_layer_set_backcolor::layer#2] = vera_layer_set_backcolor::color#2 -- pbuc1_derefidx_vbuxx=vbuaa - sta vera_layer_backcolor,x - jmp __breturn - // vera_layer_set_backcolor::@return - __breturn: - // [198] return - rts -} - // vera_layer_set_mapbase -// Set the base of the map layer with which the conio will interact. -// - layer: Value of 0 or 1. -// - mapbase: Specifies the base address of the tile map. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// void vera_layer_set_mapbase(__register(A) char layer, __register(X) char mapbase) -vera_layer_set_mapbase: { - .label addr = $21 - // [200] vera_layer_set_mapbase::$0 = vera_layer_set_mapbase::layer#3 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [201] vera_layer_set_mapbase::addr#0 = vera_layer_mapbase[vera_layer_set_mapbase::$0] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_mapbase,y - sta.z addr - lda vera_layer_mapbase+1,y - sta.z addr+1 - // [202] *vera_layer_set_mapbase::addr#0 = vera_layer_set_mapbase::mapbase#3 -- _deref_pbuz1=vbuxx - txa - ldy #0 - sta (addr),y - jmp __breturn - // vera_layer_set_mapbase::@return - __breturn: - // [203] return - rts -} - // gotoxy -// Set the cursor to the specified position -// void gotoxy(char x, __register(X) char y) -gotoxy: { - .label __6 = $f - .label line_offset = $f - // [205] if(gotoxy::y#4<=conio_screen_height) goto gotoxy::@4 -- vbuxx_le_vbuz1_then_la1 - lda.z conio_screen_height - stx.z $ff - cmp.z $ff - bcs __b4_from_gotoxy - // [207] phi from gotoxy to gotoxy::@1 [phi:gotoxy->gotoxy::@1] - __b1_from_gotoxy: - // [207] phi gotoxy::y#5 = 0 [phi:gotoxy->gotoxy::@1#0] -- vbuxx=vbuc1 - ldx #0 - jmp __b1 - // [206] phi from gotoxy to gotoxy::@4 [phi:gotoxy->gotoxy::@4] - __b4_from_gotoxy: - jmp __b4 - // gotoxy::@4 - __b4: - // [207] phi from gotoxy::@4 to gotoxy::@1 [phi:gotoxy::@4->gotoxy::@1] - __b1_from___b4: - // [207] phi gotoxy::y#5 = gotoxy::y#4 [phi:gotoxy::@4->gotoxy::@1#0] -- register_copy - jmp __b1 - // gotoxy::@1 - __b1: - // [208] if(0gotoxy::@3] - __b3_from___b1: - jmp __b3 - // gotoxy::@3 - __b3: - jmp __b2 - // gotoxy::@2 - __b2: - // [210] conio_cursor_x[conio_screen_layer] = 0 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #0 - ldy.z conio_screen_layer - sta conio_cursor_x,y - // [211] conio_cursor_y[conio_screen_layer] = gotoxy::y#5 -- pbuc1_derefidx_vbuz1=vbuxx - ldy.z conio_screen_layer - txa - sta conio_cursor_y,y - // [212] gotoxy::$6 = (unsigned int)gotoxy::y#5 -- vwuz1=_word_vbuxx - txa - sta.z __6 - lda #0 - sta.z __6+1 - // [213] gotoxy::line_offset#0 = gotoxy::$6 << conio_rowshift -- vwuz1=vwuz1_rol_vbuz2 - ldy.z conio_rowshift - beq !e+ - !: - asl.z line_offset - rol.z line_offset+1 - dey - bne !- - !e: - // [214] gotoxy::$5 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [215] conio_line_text[gotoxy::$5] = gotoxy::line_offset#0 -- pwuc1_derefidx_vbuaa=vwuz1 - tay - lda.z line_offset - sta conio_line_text,y - lda.z line_offset+1 - sta conio_line_text+1,y - jmp __breturn - // gotoxy::@return - __breturn: - // [216] return - rts -} - // vera_layer_get_color -// Get the text and back color for text output in 16 color mode. -// - layer: Value of 0 or 1. -// - return: an 8 bit value with bit 7:4 containing the back color and bit 3:0 containing the front color. -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_color(__register(X) char layer) -vera_layer_get_color: { - .label addr = 8 - // [218] vera_layer_get_color::$3 = vera_layer_get_color::layer#2 << 1 -- vbuaa=vbuxx_rol_1 - txa - asl - // [219] vera_layer_get_color::addr#0 = vera_layer_config[vera_layer_get_color::$3] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_config,y - sta.z addr - lda vera_layer_config+1,y - sta.z addr+1 - // [220] vera_layer_get_color::$0 = *vera_layer_get_color::addr#0 & VERA_LAYER_CONFIG_256C -- vbuaa=_deref_pbuz1_band_vbuc1 - lda #VERA_LAYER_CONFIG_256C - ldy #0 - and (addr),y - // [221] if(0!=vera_layer_get_color::$0) goto vera_layer_get_color::@1 -- 0_neq_vbuaa_then_la1 - cmp #0 - bne __b1 - jmp __b2 - // vera_layer_get_color::@2 - __b2: - // [222] vera_layer_get_color::$1 = vera_layer_backcolor[vera_layer_get_color::layer#2] << 4 -- vbuaa=pbuc1_derefidx_vbuxx_rol_4 - lda vera_layer_backcolor,x - asl - asl - asl - asl - // [223] vera_layer_get_color::return#1 = vera_layer_get_color::$1 | vera_layer_textcolor[vera_layer_get_color::layer#2] -- vbuaa=vbuaa_bor_pbuc1_derefidx_vbuxx - ora vera_layer_textcolor,x - // [224] phi from vera_layer_get_color::@1 vera_layer_get_color::@2 to vera_layer_get_color::@return [phi:vera_layer_get_color::@1/vera_layer_get_color::@2->vera_layer_get_color::@return] - __breturn_from___b1: - __breturn_from___b2: - // [224] phi vera_layer_get_color::return#2 = vera_layer_get_color::return#0 [phi:vera_layer_get_color::@1/vera_layer_get_color::@2->vera_layer_get_color::@return#0] -- register_copy - jmp __breturn - // vera_layer_get_color::@return - __breturn: - // [225] return - rts - // vera_layer_get_color::@1 - __b1: - // [226] vera_layer_get_color::return#0 = vera_layer_textcolor[vera_layer_get_color::layer#2] -- vbuaa=pbuc1_derefidx_vbuxx - lda vera_layer_textcolor,x - jmp __breturn_from___b1 -} - // cputln -// Print a newline -cputln: { - .label temp = 8 - // [227] cputln::$2 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [228] cputln::temp#0 = conio_line_text[cputln::$2] -- vwuz1=pwuc1_derefidx_vbuaa - // TODO: This needs to be optimized! other variations don't compile because of sections not available! - tay - lda conio_line_text,y - sta.z temp - lda conio_line_text+1,y - sta.z temp+1 - // [229] cputln::temp#1 = cputln::temp#0 + conio_rowskip -- vwuz1=vwuz1_plus_vwuz2 - clc - lda.z temp - adc.z conio_rowskip - sta.z temp - lda.z temp+1 - adc.z conio_rowskip+1 - sta.z temp+1 - // [230] cputln::$3 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [231] conio_line_text[cputln::$3] = cputln::temp#1 -- pwuc1_derefidx_vbuaa=vwuz1 - tay - lda.z temp - sta conio_line_text,y - lda.z temp+1 - sta conio_line_text+1,y - // [232] conio_cursor_x[conio_screen_layer] = 0 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #0 - ldy.z conio_screen_layer - sta conio_cursor_x,y - // [233] conio_cursor_y[conio_screen_layer] = ++ conio_cursor_y[conio_screen_layer] -- pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 - ldx.z conio_screen_layer - inc conio_cursor_y,x - // [234] call cscroll - jsr cscroll - jmp __breturn - // cputln::@return - __breturn: - // [235] return - rts -} - // clrscr -// clears the screen and moves the cursor to the upper left-hand corner of the screen. -clrscr: { - .label __1 = $53 - .label line_text = 2 - .label color = $1f - // [236] clrscr::line_text#0 = (char *)CONIO_SCREEN_TEXT#13 -- pbuz1=pbuz2 - lda.z CONIO_SCREEN_TEXT - sta.z line_text - lda.z CONIO_SCREEN_TEXT+1 - sta.z line_text+1 - // [237] vera_layer_get_backcolor::layer#0 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [238] call vera_layer_get_backcolor - jsr vera_layer_get_backcolor - // [239] vera_layer_get_backcolor::return#2 = vera_layer_get_backcolor::return#0 - jmp __b7 - // clrscr::@7 - __b7: - // [240] clrscr::$0 = vera_layer_get_backcolor::return#2 - // [241] clrscr::$1 = clrscr::$0 << 4 -- vbuz1=vbuaa_rol_4 - asl - asl - asl - asl - sta.z __1 - // [242] vera_layer_get_textcolor::layer#0 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [243] call vera_layer_get_textcolor - jsr vera_layer_get_textcolor - // [244] vera_layer_get_textcolor::return#2 = vera_layer_get_textcolor::return#0 - jmp __b8 - // clrscr::@8 - __b8: - // [245] clrscr::$2 = vera_layer_get_textcolor::return#2 - // [246] clrscr::color#0 = clrscr::$1 | clrscr::$2 -- vbuz1=vbuz2_bor_vbuaa - ora.z __1 - sta.z color - // [247] phi from clrscr::@8 to clrscr::@1 [phi:clrscr::@8->clrscr::@1] - __b1_from___b8: - // [247] phi clrscr::line_text#2 = clrscr::line_text#0 [phi:clrscr::@8->clrscr::@1#0] -- register_copy - // [247] phi clrscr::l#2 = 0 [phi:clrscr::@8->clrscr::@1#1] -- vbuxx=vbuc1 - ldx #0 - jmp __b1 - // clrscr::@1 - __b1: - // [248] if(clrscr::l#2clrscr::@4] - __b4_from___b2: - // [261] phi clrscr::c#2 = 0 [phi:clrscr::@2->clrscr::@4#0] -- vbuyy=vbuc1 - ldy #0 - jmp __b4 - // clrscr::@4 - __b4: - // [262] if(clrscr::c#2clrscr::@1] - __b1_from___b6: - // [247] phi clrscr::line_text#2 = clrscr::line_text#1 [phi:clrscr::@6->clrscr::@1#0] -- register_copy - // [247] phi clrscr::l#2 = clrscr::l#1 [phi:clrscr::@6->clrscr::@1#1] -- register_copy - jmp __b1 - // clrscr::@5 - __b5: - // [265] *VERA_DATA0 = ' ' -- _deref_pbuc1=vbuc2 - lda #' ' - sta VERA_DATA0 - // [266] *VERA_DATA0 = clrscr::color#0 -- _deref_pbuc1=vbuz1 - lda.z color - sta VERA_DATA0 - // [267] clrscr::c#1 = ++ clrscr::c#2 -- vbuyy=_inc_vbuyy - iny - // [261] phi from clrscr::@5 to clrscr::@4 [phi:clrscr::@5->clrscr::@4] - __b4_from___b5: - // [261] phi clrscr::c#2 = clrscr::c#1 [phi:clrscr::@5->clrscr::@4#0] -- register_copy - jmp __b4 -} - // vera_layer_mode_tile -// Set a vera layer in tile mode and configure the: -// - layer: Value of 0 or 1. -// - mapbase_address: A dword typed address (4 bytes), that specifies the full address of the map base. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective mapbase vera register. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// - tilebase_address: A dword typed address (4 bytes), that specifies the base address of the tile map. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective tilebase vera register. -// Note that the resulting vera register holds only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// - mapwidth: The width of the map in number of tiles. -// - mapheight: The height of the map in number of tiles. -// - tilewidth: The width of a tile, which can be 8 or 16 pixels. -// - tileheight: The height of a tile, which can be 8 or 16 pixels. -// - color_depth: The color depth in bits per pixel (BPP), which can be 1, 2, 4 or 8. -// void vera_layer_mode_tile(__zp($3e) char layer, __zp($2f) unsigned long mapbase_address, __zp($33) unsigned long tilebase_address, __zp($f) unsigned int mapwidth, __zp($44) unsigned int mapheight, __zp($54) char tilewidth, __zp($55) char tileheight, __register(X) char color_depth) -vera_layer_mode_tile: { - .label __1 = $37 - .label __6 = $2d - .label __17 = $3d - .label __18 = $3c - .label mapbase_address = $2f - .label tilebase_address = $33 - .label mapwidth = $f - .label layer = $3e - .label mapheight = $44 - .label mapbase_address_1 = $4a - .label tilebase_address_1 = $4e - .label tilewidth = $54 - .label tileheight = $55 - // [269] if(vera_layer_mode_tile::color_depth#2==1) goto vera_layer_mode_tile::@5 -- vbuxx_eq_vbuc1_then_la1 - cpx #1 - beq __b5_from_vera_layer_mode_tile - jmp __b1 - // vera_layer_mode_tile::@1 - __b1: - // [270] if(vera_layer_mode_tile::color_depth#2==2) goto vera_layer_mode_tile::@5 -- vbuxx_eq_vbuc1_then_la1 - cpx #2 - beq __b5_from___b1 - jmp __b2 - // vera_layer_mode_tile::@2 - __b2: - // [271] if(vera_layer_mode_tile::color_depth#2==4) goto vera_layer_mode_tile::@5 -- vbuxx_eq_vbuc1_then_la1 - cpx #4 - beq __b5_from___b2 - jmp __b3 - // vera_layer_mode_tile::@3 - __b3: - // [272] if(vera_layer_mode_tile::color_depth#2!=8) goto vera_layer_mode_tile::@5 -- vbuxx_neq_vbuc1_then_la1 - cpx #8 - bne __b5_from___b3 - // [273] phi from vera_layer_mode_tile::@3 to vera_layer_mode_tile::@4 [phi:vera_layer_mode_tile::@3->vera_layer_mode_tile::@4] - __b4_from___b3: - jmp __b4 - // vera_layer_mode_tile::@4 - __b4: - // [274] phi from vera_layer_mode_tile::@4 to vera_layer_mode_tile::@5 [phi:vera_layer_mode_tile::@4->vera_layer_mode_tile::@5] - __b5_from___b4: - // [274] phi vera_layer_mode_tile::config#17 = VERA_LAYER_COLOR_DEPTH_8BPP [phi:vera_layer_mode_tile::@4->vera_layer_mode_tile::@5#0] -- vbuxx=vbuc1 - ldx #VERA_LAYER_COLOR_DEPTH_8BPP - jmp __b5 - // [274] phi from vera_layer_mode_tile to vera_layer_mode_tile::@5 [phi:vera_layer_mode_tile->vera_layer_mode_tile::@5] - __b5_from_vera_layer_mode_tile: - // [274] phi vera_layer_mode_tile::config#17 = VERA_LAYER_COLOR_DEPTH_1BPP [phi:vera_layer_mode_tile->vera_layer_mode_tile::@5#0] -- vbuxx=vbuc1 - ldx #VERA_LAYER_COLOR_DEPTH_1BPP - jmp __b5 - // [274] phi from vera_layer_mode_tile::@1 to vera_layer_mode_tile::@5 [phi:vera_layer_mode_tile::@1->vera_layer_mode_tile::@5] - __b5_from___b1: - // [274] phi vera_layer_mode_tile::config#17 = VERA_LAYER_COLOR_DEPTH_2BPP [phi:vera_layer_mode_tile::@1->vera_layer_mode_tile::@5#0] -- vbuxx=vbuc1 - ldx #VERA_LAYER_COLOR_DEPTH_2BPP - jmp __b5 - // [274] phi from vera_layer_mode_tile::@2 to vera_layer_mode_tile::@5 [phi:vera_layer_mode_tile::@2->vera_layer_mode_tile::@5] - __b5_from___b2: - // [274] phi vera_layer_mode_tile::config#17 = VERA_LAYER_COLOR_DEPTH_4BPP [phi:vera_layer_mode_tile::@2->vera_layer_mode_tile::@5#0] -- vbuxx=vbuc1 - ldx #VERA_LAYER_COLOR_DEPTH_4BPP - jmp __b5 - // [274] phi from vera_layer_mode_tile::@3 to vera_layer_mode_tile::@5 [phi:vera_layer_mode_tile::@3->vera_layer_mode_tile::@5] - __b5_from___b3: - // [274] phi vera_layer_mode_tile::config#17 = 0 [phi:vera_layer_mode_tile::@3->vera_layer_mode_tile::@5#0] -- vbuxx=vbuc1 - ldx #0 - jmp __b5 - // vera_layer_mode_tile::@5 - __b5: - // [275] if(vera_layer_mode_tile::mapwidth#10==$20) goto vera_layer_mode_tile::@9 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapwidth+1 - bne !+ - lda.z mapwidth - cmp #$20 - beq __b9 - !: - jmp __b6 - // vera_layer_mode_tile::@6 - __b6: - // [276] if(vera_layer_mode_tile::mapwidth#10==$40) goto vera_layer_mode_tile::@10 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapwidth+1 - bne !+ - lda.z mapwidth - cmp #$40 - beq __b10 - !: - jmp __b7 - // vera_layer_mode_tile::@7 - __b7: - // [277] if(vera_layer_mode_tile::mapwidth#10==$80) goto vera_layer_mode_tile::@11 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapwidth+1 - bne !+ - lda.z mapwidth - cmp #$80 - beq __b11 - !: - jmp __b8 - // vera_layer_mode_tile::@8 - __b8: - // [278] if(vera_layer_mode_tile::mapwidth#10!=$100) goto vera_layer_mode_tile::@13 -- vwuz1_neq_vwuc1_then_la1 - lda.z mapwidth+1 - cmp #>$100 - bne __b13_from___b8 - lda.z mapwidth - cmp #<$100 - bne __b13_from___b8 - jmp __b12 - // vera_layer_mode_tile::@12 - __b12: - // [279] vera_layer_mode_tile::config#8 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_256 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_WIDTH_256 - tax - // [280] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 9 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #9 - ldy.z layer - sta vera_layer_rowshift,y - // [281] vera_layer_mode_tile::$14 = vera_layer_mode_tile::layer#10 << 1 -- vbuaa=vbuz1_rol_1 - lda.z layer - asl - // [282] vera_layer_rowskip[vera_layer_mode_tile::$14] = $200 -- pwuc1_derefidx_vbuaa=vwuc2 - tay - lda #<$200 - sta vera_layer_rowskip,y - lda #>$200 - sta vera_layer_rowskip+1,y - // [283] phi from vera_layer_mode_tile::@10 vera_layer_mode_tile::@11 vera_layer_mode_tile::@12 vera_layer_mode_tile::@8 vera_layer_mode_tile::@9 to vera_layer_mode_tile::@13 [phi:vera_layer_mode_tile::@10/vera_layer_mode_tile::@11/vera_layer_mode_tile::@12/vera_layer_mode_tile::@8/vera_layer_mode_tile::@9->vera_layer_mode_tile::@13] - __b13_from___b10: - __b13_from___b11: - __b13_from___b12: - __b13_from___b8: - __b13_from___b9: - // [283] phi vera_layer_mode_tile::config#21 = vera_layer_mode_tile::config#6 [phi:vera_layer_mode_tile::@10/vera_layer_mode_tile::@11/vera_layer_mode_tile::@12/vera_layer_mode_tile::@8/vera_layer_mode_tile::@9->vera_layer_mode_tile::@13#0] -- register_copy - jmp __b13 - // vera_layer_mode_tile::@13 - __b13: - // [284] if(vera_layer_mode_tile::mapheight#10==$20) goto vera_layer_mode_tile::@20 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$20 - beq __b20_from___b13 - !: - jmp __b14 - // vera_layer_mode_tile::@14 - __b14: - // [285] if(vera_layer_mode_tile::mapheight#10==$40) goto vera_layer_mode_tile::@17 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$40 - beq __b17 - !: - jmp __b15 - // vera_layer_mode_tile::@15 - __b15: - // [286] if(vera_layer_mode_tile::mapheight#10==$80) goto vera_layer_mode_tile::@18 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$80 - beq __b18 - !: - jmp __b16 - // vera_layer_mode_tile::@16 - __b16: - // [287] if(vera_layer_mode_tile::mapheight#10!=$100) goto vera_layer_mode_tile::@20 -- vwuz1_neq_vwuc1_then_la1 - lda.z mapheight+1 - cmp #>$100 - bne __b20_from___b16 - lda.z mapheight - cmp #<$100 - bne __b20_from___b16 - jmp __b19 - // vera_layer_mode_tile::@19 - __b19: - // [288] vera_layer_mode_tile::config#12 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_256 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_HEIGHT_256 - tax - // [289] phi from vera_layer_mode_tile::@13 vera_layer_mode_tile::@16 vera_layer_mode_tile::@17 vera_layer_mode_tile::@18 vera_layer_mode_tile::@19 to vera_layer_mode_tile::@20 [phi:vera_layer_mode_tile::@13/vera_layer_mode_tile::@16/vera_layer_mode_tile::@17/vera_layer_mode_tile::@18/vera_layer_mode_tile::@19->vera_layer_mode_tile::@20] - __b20_from___b13: - __b20_from___b16: - __b20_from___b17: - __b20_from___b18: - __b20_from___b19: - // [289] phi vera_layer_mode_tile::config#25 = vera_layer_mode_tile::config#21 [phi:vera_layer_mode_tile::@13/vera_layer_mode_tile::@16/vera_layer_mode_tile::@17/vera_layer_mode_tile::@18/vera_layer_mode_tile::@19->vera_layer_mode_tile::@20#0] -- register_copy - jmp __b20 - // vera_layer_mode_tile::@20 - __b20: - // [290] vera_layer_set_config::layer#0 = vera_layer_mode_tile::layer#10 -- vbuaa=vbuz1 - lda.z layer - // [291] vera_layer_set_config::config#0 = vera_layer_mode_tile::config#25 - // [292] call vera_layer_set_config - jsr vera_layer_set_config - jmp __b27 - // vera_layer_mode_tile::@27 - __b27: - // [293] vera_layer_mode_tile::$1 = word0 vera_layer_mode_tile::mapbase_address#10 -- vwuz1=_word0_vduz2 - lda.z mapbase_address_1 - sta.z __1 - lda.z mapbase_address_1+1 - sta.z __1+1 - // [294] vera_layer_mode_tile::$17 = vera_layer_mode_tile::layer#10 << 1 -- vbuz1=vbuz2_rol_1 - lda.z layer - asl - sta.z __17 - // [295] vera_mapbase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$1 -- pwuc1_derefidx_vbuz1=vwuz2 - // mapbase - ldy.z __17 - lda.z __1 - sta vera_mapbase_offset,y - lda.z __1+1 - sta vera_mapbase_offset+1,y - // [296] vera_layer_mode_tile::$2 = byte2 vera_layer_mode_tile::mapbase_address#10 -- vbuaa=_byte2_vduz1 - lda.z mapbase_address_1+2 - // [297] vera_mapbase_bank[vera_layer_mode_tile::layer#10] = vera_layer_mode_tile::$2 -- pbuc1_derefidx_vbuz1=vbuaa - ldy.z layer - sta vera_mapbase_bank,y - // [298] vera_layer_mode_tile::$18 = vera_layer_mode_tile::layer#10 << 2 -- vbuz1=vbuz2_rol_2 - lda.z layer - asl - asl - sta.z __18 - // [299] vera_mapbase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::mapbase_address#10 -- pduc1_derefidx_vbuz1=vduz2 - ldy.z __18 - lda.z mapbase_address_1 - sta vera_mapbase_address,y - lda.z mapbase_address_1+1 - sta vera_mapbase_address+1,y - lda.z mapbase_address_1+2 - sta vera_mapbase_address+2,y - lda.z mapbase_address_1+3 - sta vera_mapbase_address+3,y - // [300] vera_layer_mode_tile::mapbase_address#0 = vera_layer_mode_tile::mapbase_address#10 >> 1 -- vduz1=vduz2_ror_1 - lda.z mapbase_address_1+3 - lsr - sta.z mapbase_address+3 - lda.z mapbase_address_1+2 - ror - sta.z mapbase_address+2 - lda.z mapbase_address_1+1 - ror - sta.z mapbase_address+1 - lda.z mapbase_address_1 - ror - sta.z mapbase_address - // [301] vera_layer_mode_tile::mapbase#0 = byte1 vera_layer_mode_tile::mapbase_address#0 -- vbuxx=_byte1_vduz1 - ldx.z mapbase_address+1 - // [302] vera_layer_set_mapbase::layer#0 = vera_layer_mode_tile::layer#10 -- vbuaa=vbuz1 - lda.z layer - // [303] vera_layer_set_mapbase::mapbase#0 = vera_layer_mode_tile::mapbase#0 - // [304] call vera_layer_set_mapbase - // [199] phi from vera_layer_mode_tile::@27 to vera_layer_set_mapbase [phi:vera_layer_mode_tile::@27->vera_layer_set_mapbase] - vera_layer_set_mapbase_from___b27: - // [199] phi vera_layer_set_mapbase::mapbase#3 = vera_layer_set_mapbase::mapbase#0 [phi:vera_layer_mode_tile::@27->vera_layer_set_mapbase#0] -- register_copy - // [199] phi vera_layer_set_mapbase::layer#3 = vera_layer_set_mapbase::layer#0 [phi:vera_layer_mode_tile::@27->vera_layer_set_mapbase#1] -- register_copy - jsr vera_layer_set_mapbase - jmp __b28 - // vera_layer_mode_tile::@28 - __b28: - // [305] vera_layer_mode_tile::$6 = word0 vera_layer_mode_tile::tilebase_address#10 -- vwuz1=_word0_vduz2 - lda.z tilebase_address_1 - sta.z __6 - lda.z tilebase_address_1+1 - sta.z __6+1 - // [306] vera_tilebase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$6 -- pwuc1_derefidx_vbuz1=vwuz2 - // tilebase - ldy.z __17 - lda.z __6 - sta vera_tilebase_offset,y - lda.z __6+1 - sta vera_tilebase_offset+1,y - // [307] vera_layer_mode_tile::$7 = byte2 vera_layer_mode_tile::tilebase_address#10 -- vbuaa=_byte2_vduz1 - lda.z tilebase_address_1+2 - // [308] vera_tilebase_bank[vera_layer_mode_tile::layer#10] = vera_layer_mode_tile::$7 -- pbuc1_derefidx_vbuz1=vbuaa - ldy.z layer - sta vera_tilebase_bank,y - // [309] vera_tilebase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::tilebase_address#10 -- pduc1_derefidx_vbuz1=vduz2 - ldy.z __18 - lda.z tilebase_address_1 - sta vera_tilebase_address,y - lda.z tilebase_address_1+1 - sta vera_tilebase_address+1,y - lda.z tilebase_address_1+2 - sta vera_tilebase_address+2,y - lda.z tilebase_address_1+3 - sta vera_tilebase_address+3,y - // [310] vera_layer_mode_tile::tilebase_address#0 = vera_layer_mode_tile::tilebase_address#10 >> 1 -- vduz1=vduz2_ror_1 - lda.z tilebase_address_1+3 - lsr - sta.z tilebase_address+3 - lda.z tilebase_address_1+2 - ror - sta.z tilebase_address+2 - lda.z tilebase_address_1+1 - ror - sta.z tilebase_address+1 - lda.z tilebase_address_1 - ror - sta.z tilebase_address - // [311] vera_layer_mode_tile::tilebase#0 = byte1 vera_layer_mode_tile::tilebase_address#0 -- vbuaa=_byte1_vduz1 - lda.z tilebase_address+1 - // [312] vera_layer_mode_tile::tilebase#1 = vera_layer_mode_tile::tilebase#0 & VERA_LAYER_TILEBASE_MASK -- vbuxx=vbuaa_band_vbuc1 - and #VERA_LAYER_TILEBASE_MASK - tax - // [313] if(vera_layer_mode_tile::tilewidth#10==8) goto vera_layer_mode_tile::@23 -- vbuz1_eq_vbuc1_then_la1 - lda #8 - cmp.z tilewidth - beq __b23_from___b28 - jmp __b21 - // vera_layer_mode_tile::@21 - __b21: - // [314] if(vera_layer_mode_tile::tilewidth#10!=$10) goto vera_layer_mode_tile::@23 -- vbuz1_neq_vbuc1_then_la1 - lda #$10 - cmp.z tilewidth - bne __b23_from___b21 - jmp __b22 - // vera_layer_mode_tile::@22 - __b22: - // [315] vera_layer_mode_tile::tilebase#3 = vera_layer_mode_tile::tilebase#1 | VERA_TILEBASE_WIDTH_16 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_TILEBASE_WIDTH_16 - tax - // [316] phi from vera_layer_mode_tile::@21 vera_layer_mode_tile::@22 vera_layer_mode_tile::@28 to vera_layer_mode_tile::@23 [phi:vera_layer_mode_tile::@21/vera_layer_mode_tile::@22/vera_layer_mode_tile::@28->vera_layer_mode_tile::@23] - __b23_from___b21: - __b23_from___b22: - __b23_from___b28: - // [316] phi vera_layer_mode_tile::tilebase#12 = vera_layer_mode_tile::tilebase#1 [phi:vera_layer_mode_tile::@21/vera_layer_mode_tile::@22/vera_layer_mode_tile::@28->vera_layer_mode_tile::@23#0] -- register_copy - jmp __b23 - // vera_layer_mode_tile::@23 - __b23: - // [317] if(vera_layer_mode_tile::tileheight#10==8) goto vera_layer_mode_tile::@26 -- vbuz1_eq_vbuc1_then_la1 - lda #8 - cmp.z tileheight - beq __b26_from___b23 - jmp __b24 - // vera_layer_mode_tile::@24 - __b24: - // [318] if(vera_layer_mode_tile::tileheight#10!=$10) goto vera_layer_mode_tile::@26 -- vbuz1_neq_vbuc1_then_la1 - lda #$10 - cmp.z tileheight - bne __b26_from___b24 - jmp __b25 - // vera_layer_mode_tile::@25 - __b25: - // [319] vera_layer_mode_tile::tilebase#5 = vera_layer_mode_tile::tilebase#12 | VERA_TILEBASE_HEIGHT_16 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_TILEBASE_HEIGHT_16 - tax - // [320] phi from vera_layer_mode_tile::@23 vera_layer_mode_tile::@24 vera_layer_mode_tile::@25 to vera_layer_mode_tile::@26 [phi:vera_layer_mode_tile::@23/vera_layer_mode_tile::@24/vera_layer_mode_tile::@25->vera_layer_mode_tile::@26] - __b26_from___b23: - __b26_from___b24: - __b26_from___b25: - // [320] phi vera_layer_mode_tile::tilebase#10 = vera_layer_mode_tile::tilebase#12 [phi:vera_layer_mode_tile::@23/vera_layer_mode_tile::@24/vera_layer_mode_tile::@25->vera_layer_mode_tile::@26#0] -- register_copy - jmp __b26 - // vera_layer_mode_tile::@26 - __b26: - // [321] vera_layer_set_tilebase::layer#0 = vera_layer_mode_tile::layer#10 -- vbuaa=vbuz1 - lda.z layer - // [322] vera_layer_set_tilebase::tilebase#0 = vera_layer_mode_tile::tilebase#10 - // [323] call vera_layer_set_tilebase - jsr vera_layer_set_tilebase - jmp __breturn - // vera_layer_mode_tile::@return - __breturn: - // [324] return - rts - // vera_layer_mode_tile::@18 - __b18: - // [325] vera_layer_mode_tile::config#11 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_128 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_HEIGHT_128 - tax - jmp __b20_from___b18 - // vera_layer_mode_tile::@17 - __b17: - // [326] vera_layer_mode_tile::config#10 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_64 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_HEIGHT_64 - tax - jmp __b20_from___b17 - // vera_layer_mode_tile::@11 - __b11: - // [327] vera_layer_mode_tile::config#7 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_128 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_WIDTH_128 - tax - // [328] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 8 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #8 - ldy.z layer - sta vera_layer_rowshift,y - // [329] vera_layer_mode_tile::$13 = vera_layer_mode_tile::layer#10 << 1 -- vbuaa=vbuz1_rol_1 - lda.z layer - asl - // [330] vera_layer_rowskip[vera_layer_mode_tile::$13] = $100 -- pwuc1_derefidx_vbuaa=vwuc2 - tay - lda #<$100 - sta vera_layer_rowskip,y - lda #>$100 - sta vera_layer_rowskip+1,y - jmp __b13_from___b11 - // vera_layer_mode_tile::@10 - __b10: - // [331] vera_layer_mode_tile::config#6 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_64 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_WIDTH_64 - tax - // [332] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 7 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #7 - ldy.z layer - sta vera_layer_rowshift,y - // [333] vera_layer_mode_tile::$12 = vera_layer_mode_tile::layer#10 << 1 -- vbuaa=vbuz1_rol_1 - lda.z layer - asl - // [334] vera_layer_rowskip[vera_layer_mode_tile::$12] = $80 -- pwuc1_derefidx_vbuaa=vbuc2 - tay - lda #$80 - sta vera_layer_rowskip,y - lda #0 - sta vera_layer_rowskip+1,y - jmp __b13_from___b10 - // vera_layer_mode_tile::@9 - __b9: - // [335] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 6 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #6 - ldy.z layer - sta vera_layer_rowshift,y - // [336] vera_layer_mode_tile::$11 = vera_layer_mode_tile::layer#10 << 1 -- vbuaa=vbuz1_rol_1 - lda.z layer - asl - // [337] vera_layer_rowskip[vera_layer_mode_tile::$11] = $40 -- pwuc1_derefidx_vbuaa=vbuc2 - tay - lda #$40 - sta vera_layer_rowskip,y - lda #0 - sta vera_layer_rowskip+1,y - jmp __b13_from___b9 -} - // memcpy_to_vram -// Copy block of memory (from RAM to VRAM) -// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination in VRAM. -// - vbank: Which 64K VRAM bank to put data into (0/1) -// - vdest: The destination address in VRAM -// - src: The source address in RAM -// - num: The number of bytes to copy -// void memcpy_to_vram(char vbank, __zp(2) void *vdest, void *src, unsigned int num) -memcpy_to_vram: { - // Transfer the data - .label end = main.tiles+$40 - .label s = $1d - .label vdest = 2 - // [339] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // [340] memcpy_to_vram::$0 = byte0 memcpy_to_vram::vdest#2 -- vbuaa=_byte0_pvoz1 - lda.z vdest - // [341] *VERA_ADDRX_L = memcpy_to_vram::$0 -- _deref_pbuc1=vbuaa - // Set address - sta VERA_ADDRX_L - // [342] memcpy_to_vram::$1 = byte1 memcpy_to_vram::vdest#2 -- vbuaa=_byte1_pvoz1 - lda.z vdest+1 - // [343] *VERA_ADDRX_M = memcpy_to_vram::$1 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // [344] *VERA_ADDRX_H = VERA_INC_1|1 -- _deref_pbuc1=vbuc2 - lda #VERA_INC_1|1 - sta VERA_ADDRX_H - // [345] phi from memcpy_to_vram to memcpy_to_vram::@1 [phi:memcpy_to_vram->memcpy_to_vram::@1] - __b1_from_memcpy_to_vram: - // [345] phi memcpy_to_vram::s#2 = (char *)(void *)main::tiles [phi:memcpy_to_vram->memcpy_to_vram::@1#0] -- pbuz1=pbuc1 - lda #main.tiles - sta.z s+1 - jmp __b1 - // memcpy_to_vram::@1 - __b1: - // [346] if(memcpy_to_vram::s#2!=memcpy_to_vram::end#0) goto memcpy_to_vram::@2 -- pbuz1_neq_pbuc1_then_la1 - lda.z s+1 - cmp #>end - bne __b2 - lda.z s - cmp #memcpy_to_vram::@1] - __b1_from___b2: - // [345] phi memcpy_to_vram::s#2 = memcpy_to_vram::s#1 [phi:memcpy_to_vram::@2->memcpy_to_vram::@1#0] -- register_copy - jmp __b1 -} - // vera_tile_area -// --- TILE FUNCTIONS --- -// void vera_tile_area(char layer, __zp($23) unsigned int tileindex, __zp($29) char x, __zp($25) char y, __zp($d) char w, __zp($1f) char h, __zp($28) char hflip, __zp($1a) char vflip, char offset) -vera_tile_area: { - .label __4 = 2 - .label __10 = 2 - .label mapbase = $13 - .label shift = $2a - .label rowskip = 8 - .label hflip = $28 - .label vflip = $1a - .label index_l = $1b - .label index_h = $1a - .label r = $c - .label tileindex = $23 - .label x = $29 - .label y = $25 - .label h = $1f - .label w = $d - // [351] vera_tile_area::mapbase#0 = *vera_mapbase_address -- vduz1=_deref_pduc1 - lda vera_mapbase_address - sta.z mapbase - lda vera_mapbase_address+1 - sta.z mapbase+1 - lda vera_mapbase_address+2 - sta.z mapbase+2 - lda vera_mapbase_address+3 - sta.z mapbase+3 - // [352] vera_tile_area::shift#0 = *vera_layer_rowshift -- vbuz1=_deref_pbuc1 - lda vera_layer_rowshift - sta.z shift - // [353] vera_tile_area::rowskip#0 = 1 << vera_tile_area::shift#0 -- vwuz1=vwuc1_rol_vbuz2 - ldy.z shift - lda #<1 - sta.z rowskip - lda #>1+1 - sta.z rowskip+1 - cpy #0 - beq !e+ - !: - asl.z rowskip - rol.z rowskip+1 - dey - bne !- - !e: - // [354] vera_tile_area::hflip#0 = *vera_layer_hflip -- vbuz1=_deref_pbuc1 - lda vera_layer_hflip - sta.z hflip - // [355] vera_tile_area::vflip#0 = *vera_layer_vflip -- vbuz1=_deref_pbuc1 - lda vera_layer_vflip - sta.z vflip - // [356] vera_tile_area::index_l#0 = byte0 vera_tile_area::tileindex#3 -- vbuz1=_byte0_vwuz2 - lda.z tileindex - sta.z index_l - // [357] vera_tile_area::index_h#0 = byte1 vera_tile_area::tileindex#3 -- vbuaa=_byte1_vwuz1 - lda.z tileindex+1 - // [358] vera_tile_area::index_h#1 = vera_tile_area::index_h#0 | vera_tile_area::hflip#0 -- vbuaa=vbuaa_bor_vbuz1 - ora.z hflip - // [359] vera_tile_area::index_h#2 = vera_tile_area::index_h#1 | vera_tile_area::vflip#0 -- vbuz1=vbuaa_bor_vbuz1 - ora.z index_h - sta.z index_h - // [360] vera_tile_area::$10 = (unsigned int)vera_tile_area::y#3 -- vwuz1=_word_vbuz2 - lda.z y - sta.z __10 - lda #0 - sta.z __10+1 - // [361] vera_tile_area::$4 = vera_tile_area::$10 << vera_tile_area::shift#0 -- vwuz1=vwuz1_rol_vbuz2 - ldy.z shift - beq !e+ - !: - asl.z __4 - rol.z __4+1 - dey - bne !- - !e: - // [362] vera_tile_area::mapbase#1 = vera_tile_area::mapbase#0 + vera_tile_area::$4 -- vduz1=vduz1_plus_vwuz2 - lda.z mapbase - clc - adc.z __4 - sta.z mapbase - lda.z mapbase+1 - adc.z __4+1 - sta.z mapbase+1 - lda.z mapbase+2 - adc #0 - sta.z mapbase+2 - lda.z mapbase+3 - adc #0 - sta.z mapbase+3 - // [363] vera_tile_area::$5 = vera_tile_area::x#3 << 1 -- vbuaa=vbuz1_rol_1 - lda.z x - asl - // [364] vera_tile_area::mapbase#2 = vera_tile_area::mapbase#1 + vera_tile_area::$5 -- vduz1=vduz1_plus_vbuaa - clc - adc.z mapbase - sta.z mapbase - lda.z mapbase+1 - adc #0 - sta.z mapbase+1 - lda.z mapbase+2 - adc #0 - sta.z mapbase+2 - lda.z mapbase+3 - adc #0 - sta.z mapbase+3 - // [365] phi from vera_tile_area to vera_tile_area::@1 [phi:vera_tile_area->vera_tile_area::@1] - __b1_from_vera_tile_area: - // [365] phi vera_tile_area::mapbase#10 = vera_tile_area::mapbase#2 [phi:vera_tile_area->vera_tile_area::@1#0] -- register_copy - // [365] phi vera_tile_area::r#2 = 0 [phi:vera_tile_area->vera_tile_area::@1#1] -- vbuz1=vbuc1 - lda #0 - sta.z r - jmp __b1 - // vera_tile_area::@1 - __b1: - // [366] if(vera_tile_area::r#2vera_tile_area::@2] - __b2_from_vera_vram_address01: - // [376] phi vera_tile_area::c#2 = 0 [phi:vera_tile_area::vera_vram_address01->vera_tile_area::@2#0] -- vbuyy=vbuc1 - ldy #0 - jmp __b2 - // vera_tile_area::@2 - __b2: - // [377] if(vera_tile_area::c#2vera_tile_area::@1] - __b1_from___b4: - // [365] phi vera_tile_area::mapbase#10 = vera_tile_area::mapbase#3 [phi:vera_tile_area::@4->vera_tile_area::@1#0] -- register_copy - // [365] phi vera_tile_area::r#2 = vera_tile_area::r#1 [phi:vera_tile_area::@4->vera_tile_area::@1#1] -- register_copy - jmp __b1 - // vera_tile_area::@3 - __b3: - // [380] *VERA_DATA0 = vera_tile_area::index_l#0 -- _deref_pbuc1=vbuz1 - lda.z index_l - sta VERA_DATA0 - // [381] *VERA_DATA0 = vera_tile_area::index_h#2 -- _deref_pbuc1=vbuz1 - lda.z index_h - sta VERA_DATA0 - // [382] vera_tile_area::c#1 = ++ vera_tile_area::c#2 -- vbuyy=_inc_vbuyy - iny - // [376] phi from vera_tile_area::@3 to vera_tile_area::@2 [phi:vera_tile_area::@3->vera_tile_area::@2] - __b2_from___b3: - // [376] phi vera_tile_area::c#2 = vera_tile_area::c#1 [phi:vera_tile_area::@3->vera_tile_area::@2#0] -- register_copy - jmp __b2 -} - // printf_str -/// Print a NUL-terminated string -// void printf_str(void (*putc)(char), __zp($1d) const char *s) -printf_str: { - .label s = $1d - // [384] phi from printf_str printf_str::@2 to printf_str::@1 [phi:printf_str/printf_str::@2->printf_str::@1] - __b1_from_printf_str: - __b1_from___b2: - // [384] phi printf_str::s#9 = printf_str::s#10 [phi:printf_str/printf_str::@2->printf_str::@1#0] -- register_copy - jmp __b1 - // printf_str::@1 - __b1: - // [385] printf_str::c#1 = *printf_str::s#9 -- vbuaa=_deref_pbuz1 - ldy #0 - lda (s),y - // [386] printf_str::s#0 = ++ printf_str::s#9 -- pbuz1=_inc_pbuz1 - inc.z s - bne !+ - inc.z s+1 - !: - // [387] if(0!=printf_str::c#1) goto printf_str::@2 -- 0_neq_vbuaa_then_la1 - cmp #0 - bne __b2 - jmp __breturn - // printf_str::@return - __breturn: - // [388] return - rts - // printf_str::@2 - __b2: - // [389] stackpush(char) = printf_str::c#1 -- _stackpushbyte_=vbuaa - pha - // [390] callexecute cputc -- call_vprc1 - jsr cputc - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - jmp __b1_from___b2 -} - // kbhit -// Return true if there's a key waiting, return false if not -kbhit: { - .label chptr = ch - .label IN_DEV = $28a - // Current input device number - .label GETIN = $ffe4 - .label ch = $3a - // [392] kbhit::ch = 0 -- vbuz1=vbuc1 - lda #0 - sta.z ch - // kickasm( uses kbhit::chptr uses kbhit::IN_DEV uses kbhit::GETIN) {{ jsr _kbhit bne L3 jmp continue1 .var via1 = $9f60 //VIA#1 .var d1pra = via1+1 _kbhit: ldy d1pra // The count of keys pressed is stored in RAM bank 0. stz d1pra // Set d1pra to zero to access RAM bank 0. lda $A00A // Get number of characters from this address in the ROM of the CX16 (ROM 38). sty d1pra // Set d1pra to previous value. rts L3: ldy IN_DEV // Save current input device stz IN_DEV // Keyboard phy jsr GETIN // Read char, and return in .A ply sta chptr // Store the character read in ch sty IN_DEV // Restore input device ldx #>$0000 rts continue1: nop }} - // CBM GETIN API - jsr _kbhit - bne L3 - - jmp continue1 - - .var via1 = $9f60 //VIA#1 - .var d1pra = via1+1 - - _kbhit: - ldy d1pra // The count of keys pressed is stored in RAM bank 0. - stz d1pra // Set d1pra to zero to access RAM bank 0. - lda $A00A // Get number of characters from this address in the ROM of the CX16 (ROM 38). - sty d1pra // Set d1pra to previous value. - rts - - L3: - ldy IN_DEV // Save current input device - stz IN_DEV // Keyboard - phy - jsr GETIN // Read char, and return in .A - ply - sta chptr // Store the character read in ch - sty IN_DEV // Restore input device - ldx #>$0000 - rts - - continue1: - nop - - // [394] kbhit::return#0 = kbhit::ch -- vbuaa=vbuz1 - lda.z ch - jmp __breturn - // kbhit::@return - __breturn: - // [395] kbhit::return#1 = kbhit::return#0 - // [396] return - rts -} - // vera_layer_set_text_color_mode -// Set the configuration of the layer text color mode. -// - layer: Value of 0 or 1. -// - color_mode: Specifies the color mode to be VERA_LAYER_CONFIG_16 or VERA_LAYER_CONFIG_256 for text mode. -// void vera_layer_set_text_color_mode(char layer, char color_mode) -vera_layer_set_text_color_mode: { - .label addr = $2b - // [397] vera_layer_set_text_color_mode::addr#0 = *(vera_layer_config+vera_layer_mode_text::layer#0*SIZEOF_POINTER) -- pbuz1=_deref_qbuc1 - lda vera_layer_config+vera_layer_mode_text.layer*SIZEOF_POINTER - sta.z addr - lda vera_layer_config+vera_layer_mode_text.layer*SIZEOF_POINTER+1 - sta.z addr+1 - // [398] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 & ~VERA_LAYER_CONFIG_256C -- _deref_pbuz1=_deref_pbuz1_band_vbuc1 - lda #VERA_LAYER_CONFIG_256C^$ff - ldy #0 - and (addr),y - ldy #0 - sta (addr),y - // [399] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 -- _deref_pbuz1=_deref_pbuz1 - ldy #0 - lda (addr),y - ldy #0 - sta (addr),y - jmp __breturn - // vera_layer_set_text_color_mode::@return - __breturn: - // [400] return - rts -} - // vera_layer_get_mapbase_bank -// Get the map base bank of the tiles for the layer. -// - layer: Value of 0 or 1. -// - return: Bank in vera vram. -// __register(A) char vera_layer_get_mapbase_bank(__register(X) char layer) -vera_layer_get_mapbase_bank: { - // [401] vera_layer_get_mapbase_bank::return#0 = vera_mapbase_bank[vera_layer_get_mapbase_bank::layer#0] -- vbuaa=pbuc1_derefidx_vbuxx - lda vera_mapbase_bank,x - jmp __breturn - // vera_layer_get_mapbase_bank::@return - __breturn: - // [402] return - rts -} - // vera_layer_get_mapbase_offset -// Get the map base lower 16-bit address (offset) of the tiles for the layer. -// - layer: Value of 0 or 1. -// - return: Offset in vera vram of the specified bank. -// __zp($f) unsigned int vera_layer_get_mapbase_offset(__register(A) char layer) -vera_layer_get_mapbase_offset: { - .label return = $f - // [403] vera_layer_get_mapbase_offset::$0 = vera_layer_get_mapbase_offset::layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [404] vera_layer_get_mapbase_offset::return#0 = vera_mapbase_offset[vera_layer_get_mapbase_offset::$0] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda vera_mapbase_offset,y - sta.z return - lda vera_mapbase_offset+1,y - sta.z return+1 - jmp __breturn - // vera_layer_get_mapbase_offset::@return - __breturn: - // [405] return - rts -} - // vera_layer_get_rowshift -// Get the bit shift value required to skip a whole line fast. -// - layer: Value of 0 or 1. -// - return: Rowshift value to calculate fast from a y value to line offset in tile mode. -// __register(A) char vera_layer_get_rowshift(__register(X) char layer) -vera_layer_get_rowshift: { - // [406] vera_layer_get_rowshift::return#0 = vera_layer_rowshift[vera_layer_get_rowshift::layer#0] -- vbuaa=pbuc1_derefidx_vbuxx - lda vera_layer_rowshift,x - jmp __breturn - // vera_layer_get_rowshift::@return - __breturn: - // [407] return - rts -} - // vera_layer_get_rowskip -// Get the value required to skip a whole line fast. -// - layer: Value of 0 or 1. -// - return: Skip value to calculate fast from a y value to line offset in tile mode. -// __zp($37) unsigned int vera_layer_get_rowskip(__register(A) char layer) -vera_layer_get_rowskip: { - .label return = $37 - // [408] vera_layer_get_rowskip::$0 = vera_layer_get_rowskip::layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [409] vera_layer_get_rowskip::return#0 = vera_layer_rowskip[vera_layer_get_rowskip::$0] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda vera_layer_rowskip,y - sta.z return - lda vera_layer_rowskip+1,y - sta.z return+1 - jmp __breturn - // vera_layer_get_rowskip::@return - __breturn: - // [410] return - rts -} - // cscroll -// Scroll the entire screen if the cursor is beyond the last line -cscroll: { - // [411] if(conio_cursor_y[conio_screen_layer]cscroll::@3] - __b3_from___b2: - jmp __b3 - // cscroll::@3 - __b3: - jmp __breturn - // cscroll::@return - __breturn: - // [415] return - rts - // [416] phi from cscroll::@1 to cscroll::@4 [phi:cscroll::@1->cscroll::@4] - __b4_from___b1: - jmp __b4 - // cscroll::@4 - __b4: - // [417] call insertup - jsr insertup - jmp __b5 - // cscroll::@5 - __b5: - // [418] gotoxy::y#2 = conio_screen_height - 1 -- vbuxx=vbuz1_minus_1 - ldx.z conio_screen_height - dex - // [419] call gotoxy - // [204] phi from cscroll::@5 to gotoxy [phi:cscroll::@5->gotoxy] - gotoxy_from___b5: - // [204] phi gotoxy::y#4 = gotoxy::y#2 [phi:cscroll::@5->gotoxy#0] -- register_copy - jsr gotoxy - jmp __breturn -} - // vera_layer_get_backcolor -// Get the back color for text output. The old back text color setting is returned. -// - layer: Value of 0 or 1. -// - return: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_backcolor(__register(X) char layer) -vera_layer_get_backcolor: { - // [420] vera_layer_get_backcolor::return#0 = vera_layer_backcolor[vera_layer_get_backcolor::layer#0] -- vbuaa=pbuc1_derefidx_vbuxx - lda vera_layer_backcolor,x - jmp __breturn - // vera_layer_get_backcolor::@return - __breturn: - // [421] return - rts -} - // vera_layer_get_textcolor -// Get the front color for text output. The old front text color setting is returned. -// - layer: Value of 0 or 1. -// - return: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_textcolor(__register(X) char layer) -vera_layer_get_textcolor: { - // [422] vera_layer_get_textcolor::return#0 = vera_layer_textcolor[vera_layer_get_textcolor::layer#0] -- vbuaa=pbuc1_derefidx_vbuxx - lda vera_layer_textcolor,x - jmp __breturn - // vera_layer_get_textcolor::@return - __breturn: - // [423] return - rts -} - // vera_layer_set_config -// Set the configuration of the layer. -// - layer: Value of 0 or 1. -// - config: Specifies the modes which are specified using T256C / 'Bitmap Mode' / 'Color Depth'. -// void vera_layer_set_config(__register(A) char layer, __register(X) char config) -vera_layer_set_config: { - .label addr = $21 - // [424] vera_layer_set_config::$0 = vera_layer_set_config::layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [425] vera_layer_set_config::addr#0 = vera_layer_config[vera_layer_set_config::$0] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_config,y - sta.z addr - lda vera_layer_config+1,y - sta.z addr+1 - // [426] *vera_layer_set_config::addr#0 = vera_layer_set_config::config#0 -- _deref_pbuz1=vbuxx - txa - ldy #0 - sta (addr),y - jmp __breturn - // vera_layer_set_config::@return - __breturn: - // [427] return - rts -} - // vera_layer_set_tilebase -// Set the base of the tiles for the layer with which the conio will interact. -// - layer: Value of 0 or 1. -// - tilebase: Specifies the base address of the tile map. -// Note that the register only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// void vera_layer_set_tilebase(__register(A) char layer, __register(X) char tilebase) -vera_layer_set_tilebase: { - .label addr = $21 - // [428] vera_layer_set_tilebase::$0 = vera_layer_set_tilebase::layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [429] vera_layer_set_tilebase::addr#0 = vera_layer_tilebase[vera_layer_set_tilebase::$0] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_tilebase,y - sta.z addr - lda vera_layer_tilebase+1,y - sta.z addr+1 - // [430] *vera_layer_set_tilebase::addr#0 = vera_layer_set_tilebase::tilebase#0 -- _deref_pbuz1=vbuxx - txa - ldy #0 - sta (addr),y - jmp __breturn - // vera_layer_set_tilebase::@return - __breturn: - // [431] return - rts -} - // insertup -// Insert a new line, and scroll the upper part of the screen up. -insertup: { - .label cy = $d - .label width = $c - .label line = 6 - .label start = 6 - // [432] insertup::cy#0 = conio_cursor_y[conio_screen_layer] -- vbuz1=pbuc1_derefidx_vbuz2 - ldy.z conio_screen_layer - lda conio_cursor_y,y - sta.z cy - // [433] insertup::width#0 = conio_screen_width << 1 -- vbuz1=vbuz2_rol_1 - lda.z conio_screen_width - asl - sta.z width - // [434] phi from insertup to insertup::@1 [phi:insertup->insertup::@1] - __b1_from_insertup: - // [434] phi insertup::i#2 = 1 [phi:insertup->insertup::@1#0] -- vbuxx=vbuc1 - ldx #1 - jmp __b1 - // insertup::@1 - __b1: - // [435] if(insertup::i#2<=insertup::cy#0) goto insertup::@2 -- vbuxx_le_vbuz1_then_la1 - lda.z cy - stx.z $ff - cmp.z $ff - bcs __b2 - // [436] phi from insertup::@1 to insertup::@3 [phi:insertup::@1->insertup::@3] - __b3_from___b1: - jmp __b3 - // insertup::@3 - __b3: - // [437] call clearline - jsr clearline - jmp __breturn - // insertup::@return - __breturn: - // [438] return - rts - // insertup::@2 - __b2: - // [439] insertup::$3 = insertup::i#2 - 1 -- vbuaa=vbuxx_minus_1 - txa - sec - sbc #1 - // [440] insertup::line#0 = insertup::$3 << conio_rowshift -- vwuz1=vbuaa_rol_vbuz2 - ldy.z conio_rowshift - sta.z line - lda #0 - sta.z line+1 - cpy #0 - beq !e+ - !: - asl.z line - rol.z line+1 - dey - bne !- - !e: - // [441] insertup::start#0 = CONIO_SCREEN_TEXT#17 + insertup::line#0 -- pbuz1=pbuz2_plus_vwuz1 - clc - lda.z start - adc.z CONIO_SCREEN_TEXT_1 - sta.z start - lda.z start+1 - adc.z CONIO_SCREEN_TEXT_1+1 - sta.z start+1 - // [442] memcpy_in_vram::src#0 = insertup::start#0 + conio_rowskip -- pbuz1=pbuz2_plus_vwuz3 - lda.z start - clc - adc.z conio_rowskip - sta.z memcpy_in_vram.src - lda.z start+1 - adc.z conio_rowskip+1 - sta.z memcpy_in_vram.src+1 - // [443] memcpy_in_vram::dest#0 = (void *)insertup::start#0 - // [444] memcpy_in_vram::num#0 = insertup::width#0 -- vwuz1=vbuz2 - lda.z width - sta.z memcpy_in_vram.num - lda #0 - sta.z memcpy_in_vram.num+1 - // [445] call memcpy_in_vram - jsr memcpy_in_vram - jmp __b4 - // insertup::@4 - __b4: - // [446] insertup::i#1 = ++ insertup::i#2 -- vbuxx=_inc_vbuxx - inx - // [434] phi from insertup::@4 to insertup::@1 [phi:insertup::@4->insertup::@1] - __b1_from___b4: - // [434] phi insertup::i#2 = insertup::i#1 [phi:insertup::@4->insertup::@1#0] -- register_copy - jmp __b1 -} - // clearline -clearline: { - .label addr = $a - .label c = 2 - // [447] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // [448] clearline::$5 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [449] clearline::addr#0 = CONIO_SCREEN_TEXT#17 + conio_line_text[clearline::$5] -- pbuz1=pbuz2_plus_pwuc1_derefidx_vbuaa - // Set address - tay - clc - lda.z CONIO_SCREEN_TEXT_1 - adc conio_line_text,y - sta.z addr - lda.z CONIO_SCREEN_TEXT_1+1 - adc conio_line_text+1,y - sta.z addr+1 - // [450] clearline::$1 = byte0 clearline::addr#0 -- vbuaa=_byte0_pbuz1 - lda.z addr - // [451] *VERA_ADDRX_L = clearline::$1 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_L - // [452] clearline::$2 = byte1 clearline::addr#0 -- vbuaa=_byte1_pbuz1 - lda.z addr+1 - // [453] *VERA_ADDRX_M = clearline::$2 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // [454] *VERA_ADDRX_H = VERA_INC_1 -- _deref_pbuc1=vbuc2 - lda #VERA_INC_1 - sta VERA_ADDRX_H - // [455] vera_layer_get_color::layer#1 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [456] call vera_layer_get_color - // [217] phi from clearline to vera_layer_get_color [phi:clearline->vera_layer_get_color] - vera_layer_get_color_from_clearline: - // [217] phi vera_layer_get_color::layer#2 = vera_layer_get_color::layer#1 [phi:clearline->vera_layer_get_color#0] -- register_copy - jsr vera_layer_get_color - // [457] vera_layer_get_color::return#4 = vera_layer_get_color::return#2 - jmp __b4 - // clearline::@4 - __b4: - // [458] clearline::color#0 = vera_layer_get_color::return#4 -- vbuxx=vbuaa - tax - // [459] phi from clearline::@4 to clearline::@1 [phi:clearline::@4->clearline::@1] - __b1_from___b4: - // [459] phi clearline::c#2 = 0 [phi:clearline::@4->clearline::@1#0] -- vwuz1=vwuc1 - lda #<0 - sta.z c - lda #>0 - sta.z c+1 - jmp __b1 - // clearline::@1 - __b1: - // [460] if(clearline::c#2clearline::@1] - __b1_from___b2: - // [459] phi clearline::c#2 = clearline::c#1 [phi:clearline::@2->clearline::@1#0] -- register_copy - jmp __b1 -} - // memcpy_in_vram -// Copy block of memory (from VRAM to VRAM) -// Copies the values from the location pointed by src to the location pointed by dest. -// The method uses the VERA access ports 0 and 1 to copy data from and to in VRAM. -// - src_bank: 64K VRAM bank number to copy from (0/1). -// - src: pointer to the location to copy from. Note that the address is a 16 bit value! -// - src_increment: the increment indicator, VERA needs this because addressing increment is automated by VERA at each access. -// - dest_bank: 64K VRAM bank number to copy to (0/1). -// - dest: pointer to the location to copy to. Note that the address is a 16 bit value! -// - dest_increment: the increment indicator, VERA needs this because addressing increment is automated by VERA at each access. -// - num: The number of bytes to copy -// void memcpy_in_vram(char dest_bank, __zp(6) void *dest, char dest_increment, char src_bank, __zp($a) char *src, char src_increment, __zp(4) unsigned int num) -memcpy_in_vram: { - .label i = 2 - .label dest = 6 - .label src = $a - .label num = 4 - // [466] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // [467] memcpy_in_vram::$0 = byte0 (void *)memcpy_in_vram::src#0 -- vbuaa=_byte0_pvoz1 - lda.z src - // [468] *VERA_ADDRX_L = memcpy_in_vram::$0 -- _deref_pbuc1=vbuaa - // Set address - sta VERA_ADDRX_L - // [469] memcpy_in_vram::$1 = byte1 (void *)memcpy_in_vram::src#0 -- vbuaa=_byte1_pvoz1 - lda.z src+1 - // [470] *VERA_ADDRX_M = memcpy_in_vram::$1 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // [471] *VERA_ADDRX_H = VERA_INC_1 -- _deref_pbuc1=vbuc2 - lda #VERA_INC_1 - sta VERA_ADDRX_H - // [472] *VERA_CTRL = *VERA_CTRL | VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 - // Select DATA1 - lda #VERA_ADDRSEL - ora VERA_CTRL - sta VERA_CTRL - // [473] memcpy_in_vram::$3 = byte0 memcpy_in_vram::dest#0 -- vbuaa=_byte0_pvoz1 - lda.z dest - // [474] *VERA_ADDRX_L = memcpy_in_vram::$3 -- _deref_pbuc1=vbuaa - // Set address - sta VERA_ADDRX_L - // [475] memcpy_in_vram::$4 = byte1 memcpy_in_vram::dest#0 -- vbuaa=_byte1_pvoz1 - lda.z dest+1 - // [476] *VERA_ADDRX_M = memcpy_in_vram::$4 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // [477] *VERA_ADDRX_H = VERA_INC_1 -- _deref_pbuc1=vbuc2 - lda #VERA_INC_1 - sta VERA_ADDRX_H - // [478] phi from memcpy_in_vram to memcpy_in_vram::@1 [phi:memcpy_in_vram->memcpy_in_vram::@1] - __b1_from_memcpy_in_vram: - // [478] phi memcpy_in_vram::i#2 = 0 [phi:memcpy_in_vram->memcpy_in_vram::@1#0] -- vwuz1=vwuc1 - lda #<0 - sta.z i - lda #>0 - sta.z i+1 - jmp __b1 - // Transfer the data - // memcpy_in_vram::@1 - __b1: - // [479] if(memcpy_in_vram::i#2memcpy_in_vram::@1] - __b1_from___b2: - // [478] phi memcpy_in_vram::i#2 = memcpy_in_vram::i#1 [phi:memcpy_in_vram::@2->memcpy_in_vram::@1#0] -- register_copy - jmp __b1 -} - // File Data -.segment Data - VERA_LAYER_WIDTH: .word $20, $40, $80, $100 - VERA_LAYER_HEIGHT: .word $20, $40, $80, $100 - /// --- VERA function encapsulation --- - vera_mapbase_offset: .word 0, 0 - vera_mapbase_bank: .byte 0, 0 - vera_mapbase_address: .dword 0, 0 - vera_tilebase_offset: .word 0, 0 - vera_tilebase_bank: .byte 0, 0 - vera_tilebase_address: .dword 0, 0 - vera_layer_rowshift: .byte 0, 0 - vera_layer_rowskip: .word 0, 0 - vera_layer_hflip: .byte 0, 4 - vera_layer_vflip: .byte 0, 8 - vera_layer_config: .word VERA_L0_CONFIG, VERA_L1_CONFIG - vera_layer_enable: .byte VERA_LAYER0_ENABLE, VERA_LAYER1_ENABLE - vera_layer_mapbase: .word VERA_L0_MAPBASE, VERA_L1_MAPBASE - vera_layer_tilebase: .word VERA_L0_TILEBASE, VERA_L1_TILEBASE - vera_layer_textcolor: .byte WHITE, WHITE - vera_layer_backcolor: .byte BLUE, BLUE - // The number of bytes on the screen - // The current cursor x-position - conio_cursor_x: .byte 0, 0 - // The current cursor y-position - conio_cursor_y: .byte 0, 0 - // The current text cursor line start - conio_line_text: .word 0, 0 - // Is scrolling enabled when outputting beyond the end of the screen (1: yes, 0: no). - // If disabled the cursor just moves back to (0,0) instead - conio_scroll_enable: .byte 1, 1 - -ASSEMBLER OPTIMIZATIONS -Removing instruction jmp __init1 -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b3 -Removing instruction jmp __b4 -Removing instruction jmp __b5 -Removing instruction jmp __b6 -Removing instruction jmp __b7 -Removing instruction jmp __b8 -Removing instruction jmp __b9 -Removing instruction jmp __b2 -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b7 -Removing instruction jmp __b2 -Removing instruction jmp __b3 -Removing instruction jmp __b4 -Removing instruction jmp __breturn -Removing instruction jmp __b6 -Removing instruction jmp __b1 -Removing instruction jmp textcolor1 -Removing instruction jmp bgcolor1 -Removing instruction jmp __b12 -Removing instruction jmp __b14 -Removing instruction jmp __b15 -Removing instruction jmp __b1 -Removing instruction jmp __b2 -Removing instruction jmp __b3 -Removing instruction jmp __b16 -Removing instruction jmp __b4 -Removing instruction jmp __b5 -Removing instruction jmp __b6 -Removing instruction jmp __b17 -Removing instruction jmp __b7 -Removing instruction jmp __b8 -Removing instruction jmp __b9 -Removing instruction jmp __b18 -Removing instruction jmp __b10 -Removing instruction jmp vera_layer_show1 -Removing instruction jmp __b13 -Removing instruction jmp __b19 -Removing instruction jmp __b20 -Removing instruction jmp __b21 -Removing instruction jmp __b22 -Removing instruction jmp __b23 -Removing instruction jmp __b24 -Removing instruction jmp __b25 -Removing instruction jmp __b26 -Removing instruction jmp __b11 -Removing instruction jmp __b27 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b3 -Removing instruction jmp __b4 -Removing instruction jmp vera_layer_get_width1 -Removing instruction jmp vera_layer_get_width1___breturn -Removing instruction jmp __b1 -Removing instruction jmp __b5 -Removing instruction jmp __b6 -Removing instruction jmp vera_layer_get_height1 -Removing instruction jmp vera_layer_get_height1___breturn -Removing instruction jmp __b2 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b4 -Removing instruction jmp __b1 -Removing instruction jmp __b3 -Removing instruction jmp __b2 -Removing instruction jmp __breturn -Removing instruction jmp __b2 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b7 -Removing instruction jmp __b8 -Removing instruction jmp __b1 -Removing instruction jmp __b3 -Removing instruction jmp __breturn -Removing instruction jmp __b4 -Removing instruction jmp __b6 -Removing instruction jmp __b1 -Removing instruction jmp __b2 -Removing instruction jmp __b3 -Removing instruction jmp __b4 -Removing instruction jmp __b5 -Removing instruction jmp __b6 -Removing instruction jmp __b7 -Removing instruction jmp __b8 -Removing instruction jmp __b12 -Removing instruction jmp __b13 -Removing instruction jmp __b14 -Removing instruction jmp __b15 -Removing instruction jmp __b16 -Removing instruction jmp __b19 -Removing instruction jmp __b20 -Removing instruction jmp __b27 -Removing instruction jmp __b28 -Removing instruction jmp __b21 -Removing instruction jmp __b22 -Removing instruction jmp __b23 -Removing instruction jmp __b24 -Removing instruction jmp __b25 -Removing instruction jmp __b26 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __b2 -Removing instruction jmp __b4 -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __b2 -Removing instruction jmp __b3 -Removing instruction jmp __breturn -Removing instruction jmp __b4 -Removing instruction jmp __b5 -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __b3 -Removing instruction jmp __breturn -Removing instruction jmp __b4 -Removing instruction jmp __b4 -Removing instruction jmp __b1 -Removing instruction jmp __b3 -Removing instruction jmp __breturn -Removing instruction jmp __b1 -Removing instruction jmp __breturn -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction lda #0 -Removing instruction lda #>0 -Removing instruction lda #<0 -Removing instruction lda #>0 -Removing instruction lda #0 -Removing instruction lda #<0 -Removing instruction lda #>0 -Removing instruction lda.z __16+1 -Removing instruction lda #8 -Removing instruction lda #0 -Removing instruction lda #<0 -Removing instruction lda #>0 -Removing instruction lda #>0 -Removing instruction lda #1 -Removing instruction lda #>0 -Removing instruction lda #2 -Replacing instruction ldx.z conio_screen_layer with TAX -Removing instruction ldy.z conio_screen_layer -Removing instruction lda #0 -Removing instruction ldy.z conio_screen_layer -Replacing instruction lda.z conio_screen_layer with TYA -Removing instruction lda #0 -Replacing instruction lda.z layer with TYA -Replacing instruction ldy.z __17 with TAY -Replacing instruction lda.z layer with TYA -Replacing instruction ldy.z __18 with TAY -Removing instruction lda.z mapbase_address_1+3 -Removing instruction lda.z tilebase_address_1+3 -Replacing instruction lda.z layer with TYA -Replacing instruction lda.z layer with TYA -Replacing instruction lda.z layer with TYA -Replacing instruction ldy.z shift with TAY -Removing instruction ldy #0 -Removing instruction ldy #0 -Removing instruction ldy #0 -Removing instruction lda #>0 -Removing instruction lda #>0 -Succesful ASM optimization Pass5UnnecesaryLoadElimination -Replacing label __b1_from___b9 with __b1 -Replacing label __b1_from___b7 with __b1 -Replacing label __b2_from___b2 with __b2 -Replacing label __b1_from___b16 with __b1 -Replacing label __b6_from___b17 with __b6 -Replacing label __b5_from___b7 with __b5 -Replacing label __b9_from___b18 with __b9 -Replacing label __b8_from___b10 with __b8 -Replacing label __b11_from___b27 with __b11 -Replacing label __b4_from_gotoxy with __b1 -Replacing label __breturn_from___b1 with __breturn -Replacing label __b13_from___b8 with __b13 -Replacing label __b13_from___b8 with __b13 -Replacing label __b20_from___b13 with __b20 -Replacing label __b20_from___b16 with __b20 -Replacing label __b20_from___b16 with __b20 -Replacing label __b23_from___b28 with __b23 -Replacing label __b23_from___b21 with __b23 -Replacing label __b26_from___b23 with __b26 -Replacing label __b26_from___b24 with __b26 -Replacing label __b20_from___b18 with __b20 -Replacing label __b20_from___b17 with __b20 -Replacing label __b13_from___b11 with __b13 -Replacing label __b13_from___b10 with __b13 -Replacing label __b13_from___b9 with __b13 -Replacing label __b1_from___b2 with __b1 -Replacing label __breturn with __b3 -Replacing label __b4_from___b1 with __b4 -Replacing label __breturn with __b3 -Replacing label __breturn with __b3 -Replacing label __breturn with __b3 -Removing instruction __b1_from___init1: -Removing instruction main_from___b1: -Removing instruction __b3_from_conio_x16_init: -Removing instruction __b4_from___b3: -Removing instruction __b5_from___b4: -Removing instruction vera_layer_set_textcolor_from___b5: -Removing instruction __b6_from___b5: -Removing instruction vera_layer_set_backcolor_from___b6: -Removing instruction __b7_from___b6: -Removing instruction vera_layer_set_mapbase_from___b7: -Removing instruction __b8_from___b7: -Removing instruction vera_layer_set_mapbase_from___b8: -Removing instruction __b1_from___b2: -Removing instruction __b1_from___b9: -Removing instruction __b4_from___b3: -Removing instruction __b6_from___b5: -Removing instruction __b1_from___b7: -Removing instruction __b12_from_bgcolor1: -Removing instruction __b14_from___b12: -Removing instruction vera_layer_mode_tile_from___b14: -Removing instruction __b15_from___b14: -Removing instruction memcpy_to_vram_from___b15: -Removing instruction __b1_from___b16: -Removing instruction __b2_from___b1: -Removing instruction __b2_from___b2: -Removing instruction __b4_from___b16: -Removing instruction __b5_from___b7: -Removing instruction __b6_from___b5: -Removing instruction __b6_from___b17: -Removing instruction __b8_from___b10: -Removing instruction __b9_from___b8: -Removing instruction __b9_from___b18: -Removing instruction __b13_from_vera_layer_show1: -Removing instruction gotoxy_from___b13: -Removing instruction __b19_from___b13: -Removing instruction printf_str_from___b19: -Removing instruction __b20_from___b19: -Removing instruction printf_str_from___b20: -Removing instruction __b21_from___b20: -Removing instruction printf_str_from___b21: -Removing instruction __b22_from___b21: -Removing instruction printf_str_from___b22: -Removing instruction __b23_from___b22: -Removing instruction printf_str_from___b23: -Removing instruction __b24_from___b23: -Removing instruction printf_str_from___b24: -Removing instruction __b25_from___b24: -Removing instruction printf_str_from___b25: -Removing instruction __b26_from___b25: -Removing instruction printf_str_from___b26: -Removing instruction __b11_from___b26: -Removing instruction __b11_from___b27: -Removing instruction __b1_from_vera_layer_mode_text: -Removing instruction vera_layer_get_width1___breturn: -Removing instruction vera_layer_get_height1___breturn: -Removing instruction __b4_from_gotoxy: -Removing instruction __b4: -Removing instruction __b1_from___b4: -Removing instruction __b3_from___b1: -Removing instruction __b3: -Removing instruction __breturn_from___b1: -Removing instruction __breturn_from___b2: -Removing instruction __b4_from___b3: -Removing instruction __b5_from___b4: -Removing instruction __b13_from___b10: -Removing instruction __b13_from___b11: -Removing instruction __b13_from___b12: -Removing instruction __b13_from___b8: -Removing instruction __b13_from___b9: -Removing instruction __b20_from___b13: -Removing instruction __b20_from___b16: -Removing instruction __b20_from___b17: -Removing instruction __b20_from___b18: -Removing instruction __b20_from___b19: -Removing instruction __b23_from___b21: -Removing instruction __b23_from___b22: -Removing instruction __b23_from___b28: -Removing instruction __b26_from___b23: -Removing instruction __b26_from___b24: -Removing instruction __b26_from___b25: -Removing instruction __b1_from_printf_str: -Removing instruction __b1_from___b2: -Removing instruction __b3_from___b2: -Removing instruction __breturn: -Removing instruction __b4_from___b1: -Removing instruction __b3_from___b1: -Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction __init1: -Removing instruction __b1: -Removing instruction __breturn: -Removing instruction vera_layer_mode_text_from_conio_x16_init: -Removing instruction __b3: -Removing instruction __b4: -Removing instruction __b5: -Removing instruction __b6: -Removing instruction __b7: -Removing instruction __b8: -Removing instruction __b9: -Removing instruction __b2: -Removing instruction gotoxy_from___b1: -Removing instruction __breturn: -Removing instruction vera_layer_get_color_from_cputc: -Removing instruction __b7: -Removing instruction __b2: -Removing instruction __b3: -Removing instruction __b4: -Removing instruction __b6: -Removing instruction textcolor1: -Removing instruction vera_layer_set_textcolor_from_textcolor1: -Removing instruction bgcolor1: -Removing instruction vera_layer_set_backcolor_from_bgcolor1: -Removing instruction __b12: -Removing instruction __b14: -Removing instruction __b15: -Removing instruction __b1_from___b15: -Removing instruction __b3: -Removing instruction memcpy_to_vram_from___b3: -Removing instruction __b16: -Removing instruction __b4: -Removing instruction vera_tile_area_from___b4: -Removing instruction __b5_from___b4: -Removing instruction vera_tile_area_from___b6: -Removing instruction __b17: -Removing instruction __b7: -Removing instruction __b8_from___b7: -Removing instruction vera_tile_area_from___b9: -Removing instruction __b18: -Removing instruction __b10: -Removing instruction vera_layer_show1: -Removing instruction __b13: -Removing instruction __b19: -Removing instruction __b20: -Removing instruction __b21: -Removing instruction __b22: -Removing instruction __b23: -Removing instruction __b24: -Removing instruction __b25: -Removing instruction __b26: -Removing instruction __b27: -Removing instruction __breturn: -Removing instruction vera_layer_mode_tile_from_vera_layer_mode_text: -Removing instruction __b1: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __b3: -Removing instruction __b4: -Removing instruction vera_layer_get_width1: -Removing instruction __b1: -Removing instruction __b5: -Removing instruction __b6: -Removing instruction vera_layer_get_height1: -Removing instruction __b2: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __b1_from_gotoxy: -Removing instruction __breturn: -Removing instruction __b2: -Removing instruction __breturn: -Removing instruction __b7: -Removing instruction __b8: -Removing instruction __b1_from___b8: -Removing instruction __b3: -Removing instruction __breturn: -Removing instruction __b4_from___b2: -Removing instruction __b6: -Removing instruction __b1_from___b6: -Removing instruction __b4_from___b5: -Removing instruction __b1: -Removing instruction __b2: -Removing instruction __b3: -Removing instruction __b4: -Removing instruction __b6: -Removing instruction __b7: -Removing instruction __b8: -Removing instruction __b12: -Removing instruction __b14: -Removing instruction __b15: -Removing instruction __b16: -Removing instruction __b19: -Removing instruction __b27: -Removing instruction vera_layer_set_mapbase_from___b27: -Removing instruction __b28: -Removing instruction __b21: -Removing instruction __b22: -Removing instruction __b24: -Removing instruction __b25: -Removing instruction __breturn: -Removing instruction __b1_from_memcpy_to_vram: -Removing instruction __breturn: -Removing instruction __b1_from___b2: -Removing instruction __b1_from_vera_tile_area: -Removing instruction __breturn: -Removing instruction __b2_from_vera_vram_address01: -Removing instruction __b4: -Removing instruction __b1_from___b4: -Removing instruction __b2_from___b3: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __b1: -Removing instruction __b2: -Removing instruction __b5: -Removing instruction gotoxy_from___b5: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __breturn: -Removing instruction __b1_from_insertup: -Removing instruction __b3: -Removing instruction __breturn: -Removing instruction __b4: -Removing instruction __b1_from___b4: -Removing instruction vera_layer_get_color_from_clearline: -Removing instruction __b4: -Removing instruction __b1_from___b4: -Removing instruction __b3: -Removing instruction __breturn: -Removing instruction __b1_from___b2: -Removing instruction __b1_from_memcpy_in_vram: -Removing instruction __breturn: -Removing instruction __b1_from___b2: -Succesful ASM optimization Pass5UnusedLabelElimination -Replacing jump to rts with rts in jmp __breturn -Replacing jump to rts with rts in jmp __breturn -Replacing jump to rts with rts in jmp __breturn -Replacing jump to rts with rts in jmp __b3 -Succesful ASM optimization Pass5DoubleJumpElimination -Relabelling long label __b5_from_vera_layer_mode_tile to __b1 -Relabelling long label __b5_from___b1 to __b2 -Relabelling long label __b5_from___b2 to __b3 -Relabelling long label __b5_from___b3 to __b4 -Succesful ASM optimization Pass5RelabelLongLabels -Removing instruction jmp __b1 -Removing instruction jmp __b2 -Removing instruction jmp __b5 -Removing instruction jmp __b6 -Removing instruction jmp __b8 -Removing instruction jmp __b9 -Removing instruction jmp __b1 -Removing instruction bne __b2 -Removing instruction bcc __b3 -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction ldy.z conio_screen_layer -Removing instruction ldy.z conio_screen_layer -Removing instruction ldy.z conio_screen_layer -Succesful ASM optimization Pass5UnnecesaryLoadElimination -Removing instruction __b2: -Removing instruction __breturn: -Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [963] beq __b9 to bne -Fixing long branch [971] beq __b10 to bne -Fixing long branch [979] beq __b11 to bne -Fixing long branch [1013] beq __b17 to bne -Fixing long branch [1021] beq __b18 to bne - -FINAL SYMBOL TABLE -__constant const char BLACK = 0 -__constant const char BLUE = 6 -char CONIO_SCREEN_BANK -char CONIO_SCREEN_BANK#11 // CONIO_SCREEN_BANK zp[1]:86 12.813953488372093 -char CONIO_SCREEN_BANK#15 // CONIO_SCREEN_BANK_1 zp[1]:59 625.0625 -char *CONIO_SCREEN_TEXT -unsigned int CONIO_SCREEN_TEXT#13 // CONIO_SCREEN_TEXT zp[2]:87 1.8363636363636364 -char *CONIO_SCREEN_TEXT#17 // CONIO_SCREEN_TEXT_1 zp[2]:17 2.0370555611111112E7 -__constant char RADIX::BINARY = 2 -__constant char RADIX::DECIMAL = $a -__constant char RADIX::HEXADECIMAL = $10 -__constant char RADIX::OCTAL = 8 -__constant char SIZEOF_POINTER = 2 -__constant unsigned int STACK_BASE = $103 -__constant const char VERA_ADDRSEL = 1 -__constant char * const VERA_ADDRX_H = (char *) 40738 -__constant char * const VERA_ADDRX_L = (char *) 40736 -__constant char * const VERA_ADDRX_M = (char *) 40737 -__constant char * const VERA_CTRL = (char *) 40741 -__constant char * const VERA_DATA0 = (char *) 40739 -__constant char * const VERA_DATA1 = (char *) 40740 -__constant char * const VERA_DC_HSCALE = (char *) 40746 -__constant char * const VERA_DC_VIDEO = (char *) 40745 -__constant char * const VERA_DC_VSCALE = (char *) 40747 -__constant const char VERA_INC_1 = $10 -__constant char * const VERA_L0_CONFIG = (char *) 40749 -__constant char * const VERA_L0_MAPBASE = (char *) 40750 -__constant char * const VERA_L0_TILEBASE = (char *) 40751 -__constant char * const VERA_L1_CONFIG = (char *) 40756 -__constant char * const VERA_L1_MAPBASE = (char *) 40757 -__constant char * const VERA_L1_TILEBASE = (char *) 40758 -__constant const char VERA_LAYER0_ENABLE = $10 -__constant const char VERA_LAYER1_ENABLE = $20 -__constant const char VERA_LAYER_COLOR_DEPTH_1BPP = 0 -__constant const char VERA_LAYER_COLOR_DEPTH_2BPP = 1 -__constant const char VERA_LAYER_COLOR_DEPTH_4BPP = 2 -__constant const char VERA_LAYER_COLOR_DEPTH_8BPP = 3 -__constant const char VERA_LAYER_CONFIG_256C = 8 -__constant const unsigned int VERA_LAYER_HEIGHT[4] = { $20, $40, $80, $100 } -__constant const char VERA_LAYER_HEIGHT_128 = $80 -__constant const char VERA_LAYER_HEIGHT_256 = $c0 -__constant const char VERA_LAYER_HEIGHT_64 = $40 -__constant const char VERA_LAYER_HEIGHT_MASK = $c0 -__constant const char VERA_LAYER_TILEBASE_MASK = $fc -__constant const unsigned int VERA_LAYER_WIDTH[4] = { $20, $40, $80, $100 } -__constant const char VERA_LAYER_WIDTH_128 = $20 -__constant const char VERA_LAYER_WIDTH_256 = $30 -__constant const char VERA_LAYER_WIDTH_64 = $10 -__constant const char VERA_LAYER_WIDTH_MASK = $30 -__constant const char VERA_TILEBASE_HEIGHT_16 = 2 -__constant const char VERA_TILEBASE_WIDTH_16 = 1 -__constant const char WHITE = 1 -void __start() -void clearline() -char clearline::$1 // reg byte a 2.00000002E8 -char clearline::$2 // reg byte a 2.00000002E8 -char clearline::$5 // reg byte a 2.00000002E8 -char *clearline::addr -char *clearline::addr#0 // addr zp[2]:10 1.00000001E8 -unsigned int clearline::c -unsigned int clearline::c#1 // c zp[2]:2 2.0000000002E10 -unsigned int clearline::c#2 // c zp[2]:2 7.50000000075E9 -char clearline::color -char clearline::color#0 // reg byte x 1.6833333336666665E9 -void clrscr() -char clrscr::$0 // reg byte a 202.0 -char clrscr::$1 // zp[1]:83 40.4 -char clrscr::$2 // reg byte a 202.0 -char clrscr::$5 // reg byte a 2002.0 -char clrscr::$6 // reg byte a 2002.0 -char clrscr::$7 // reg byte a 2002.0 -char clrscr::$9 // reg byte a 202.0 -char clrscr::c -char clrscr::c#1 // reg byte y 20002.0 -char clrscr::c#2 // reg byte y 7500.75 -char *clrscr::ch -char clrscr::color -char clrscr::color#0 // color zp[1]:31 594.2352941176471 -char clrscr::l -char clrscr::l#1 // reg byte x 2002.0 -char clrscr::l#2 // reg byte x 200.2 -char *clrscr::line_text -char *clrscr::line_text#0 // line_text zp[2]:2 18.363636363636363 -char *clrscr::line_text#1 // line_text zp[2]:2 1001.0 -char *clrscr::line_text#2 // line_text zp[2]:2 293.2142857142857 -__constant char conio_cursor_x[2] = { 0, 0 } -__constant char conio_cursor_y[2] = { 0, 0 } -__loadstore unsigned int conio_height // zp[2]:38 5561.694444444444 -__constant unsigned int conio_line_text[2] = { 0, 0 } -__loadstore char conio_rowshift // zp[1]:23 5287958.664921466 -__loadstore unsigned int conio_rowskip // zp[2]:24 4878541.980487805 -__loadstore volatile char conio_screen_height // zp[1]:32 70588.39411764707 -__loadstore char conio_screen_layer // zp[1]:28 1296495.313207547 -__loadstore volatile char conio_screen_width // zp[1]:14 4.8878097590243906E7 -__constant char conio_scroll_enable[2] = { 1, 1 } -__loadstore unsigned int conio_width // zp[2]:70 110.46703296703298 -void conio_x16_init() -__constant char * const conio_x16_init::BASIC_CURSOR_LINE = (char *) 214 -char conio_x16_init::line -char conio_x16_init::line#0 // line zp[1]:82 2.1999999999999997 -char conio_x16_init::line#1 // line zp[1]:82 22.0 -char conio_x16_init::line#3 // line zp[1]:82 33.0 -__stackcall void cputc(char c) -char cputc::$15 // reg byte a 20002.0 -unsigned int cputc::$16 // zp[2]:2 20002.0 -char cputc::$2 // reg byte a 20002.0 -char cputc::$4 // reg byte a 20002.0 -char cputc::$5 // reg byte a 20002.0 -char cputc::$6 // reg byte a 20002.0 -__constant char cputc::OFFSET_STACK_C = 0 -char cputc::c -char cputc::c#0 // c zp[1]:37 1764.8823529411764 -char cputc::color -char cputc::color#0 // reg byte x 1428.7142857142858 -char *cputc::conio_addr -char *cputc::conio_addr#0 // conio_addr zp[2]:8 10001.0 -char *cputc::conio_addr#1 // conio_addr zp[2]:8 6000.6 -char cputc::scroll_enable -char cputc::scroll_enable#0 // reg byte a 20002.0 -void cputln() -char cputln::$2 // reg byte a 200002.0 -char cputln::$3 // reg byte a 200002.0 -unsigned int cputln::temp -unsigned int cputln::temp#0 // temp zp[2]:8 200002.0 -unsigned int cputln::temp#1 // temp zp[2]:8 100001.0 -void cscroll() -void gotoxy(char x , char y) -char gotoxy::$5 // reg byte a 2.0000002E7 -unsigned int gotoxy::$6 // zp[2]:15 2.0000002E7 -unsigned int gotoxy::line_offset -unsigned int gotoxy::line_offset#0 // line_offset zp[2]:15 1.0000001E7 -char gotoxy::x -char gotoxy::y -char gotoxy::y#1 // reg byte x 22.0 -char gotoxy::y#2 // reg byte x 2000002.0 -char gotoxy::y#4 // reg byte x 7000004.666666666 -char gotoxy::y#5 // reg byte x 4000000.4 -void insertup() -char insertup::$3 // reg byte a 2.000000002E9 -char insertup::cy -char insertup::cy#0 // cy zp[1]:13 8.416666683333334E7 -char insertup::i -char insertup::i#1 // reg byte x 2.000000002E9 -char insertup::i#2 // reg byte x 4.444444448888889E8 -unsigned int insertup::line -unsigned int insertup::line#0 // line zp[2]:6 2.000000002E9 -char *insertup::start -char *insertup::start#0 // start zp[2]:6 1.000000001E9 -char insertup::width -char insertup::width#0 // width zp[1]:12 9.1818182E7 -char kbhit() -__constant char * const kbhit::GETIN = (char *) 65508 -__constant char * const kbhit::IN_DEV = (char *) 650 -__loadstore volatile char kbhit::ch // zp[1]:58 1001.0 -__constant char * const kbhit::chptr = &kbhit::ch -char kbhit::return -char kbhit::return#0 // reg byte a 2002.0 -char kbhit::return#1 // reg byte a 367.33333333333337 -char kbhit::return#2 // reg byte a 202.0 -void main() -char main::$25 // reg byte a 202.0 -char main::bgcolor1_color -char main::c -char main::c#1 // c zp[1]:57 1501.5 -char main::c#2 // c zp[1]:57 250.25 -char main::c1 -char main::c1#1 // reg byte x 1501.5 -char main::c1#2 // reg byte x 250.25 -char main::column -char main::column#1 // reg byte x 400.4 -char main::column#2 // reg byte x 600.5999999999999 -char main::column1 -char main::column1#1 // column1 zp[1]:41 400.4 -char main::column1#2 // column1 zp[1]:41 600.5999999999999 -char main::p -char main::p#1 // reg byte x 1501.5 -char main::p#2 // reg byte x 2002.0 -char main::r -char main::r#1 // r zp[1]:66 151.5 -char main::r#5 // r zp[1]:66 16.833333333333332 -char main::r1 -char main::r1#1 // r1 zp[1]:67 151.5 -char main::r1#5 // r1 zp[1]:67 16.833333333333332 -char main::row -char main::row#1 // row zp[1]:64 67.33333333333333 -char main::row#11 // row_1 zp[1]:65 109.36363636363637 -char main::row#3 // row_1 zp[1]:65 67.33333333333333 -char main::row#9 // row zp[1]:64 109.36363636363637 -__constant char main::s[$38] = "vera in tile mode 8 x 8, color depth 8 bits per pixel. -" -__constant char main::s1[$3a] = "in this mode, tiles are 8 pixels wide and 8 pixels tall. -" -__constant char main::s2[$2f] = "each tile can have a variation of 256 colors. -" -__constant char main::s3[$44] = "the vera palette of 256 colors, can be used by setting the palette -" -__constant char main::s4[$17] = "offset for each tile. -" -__constant char main::s5[$4b] = "here each column is displaying the same tile, but with different offsets! -" -__constant char main::s6[$3f] = "each offset aligns to multiples of 16 colors in the palette!. -" -__constant char main::s7[$3e] = "however, the first color will always be transparent (black). -" -char main::t -char main::t#1 // t zp[1]:63 151.5 -char main::t#5 // t zp[1]:63 25.25 -char main::textcolor1_color -unsigned int main::tile -unsigned int main::tile#1 // tile zp[2]:35 2002.0 -unsigned int main::tile#10 // tile zp[2]:35 202.0 -unsigned int main::tile#11 // tile zp[2]:35 202.0 -unsigned int main::tile#12 // tile zp[2]:35 350.5 -unsigned int main::tile#13 // tile zp[2]:35 350.5 -unsigned int main::tile#4 // tile zp[2]:35 2002.0 -unsigned int main::tile#6 // tile zp[2]:35 517.3333333333334 -unsigned int main::tile#8 // tile zp[2]:35 517.3333333333334 -char *main::tilebase -char *main::tilebase#2 // tilebase zp[2]:72 67.33333333333333 -char *main::tilebase#7 // tilebase zp[2]:72 28.857142857142858 -__constant char main::tiles[$40] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -char main::vera_layer_show1_layer -void memcpy_in_vram(char dest_bank , void *dest , char dest_increment , char src_bank , void *src , char src_increment , unsigned int num) -char memcpy_in_vram::$0 // reg byte a 2.0000000002E10 -char memcpy_in_vram::$1 // reg byte a 2.0000000002E10 -char memcpy_in_vram::$3 // reg byte a 2.0000000002E10 -char memcpy_in_vram::$4 // reg byte a 2.0000000002E10 -void *memcpy_in_vram::dest -void *memcpy_in_vram::dest#0 // dest zp[2]:6 1.9090909093636363E9 -char memcpy_in_vram::dest_bank -char memcpy_in_vram::dest_increment -unsigned int memcpy_in_vram::i -unsigned int memcpy_in_vram::i#1 // i zp[2]:2 2.0000000000002E13 -unsigned int memcpy_in_vram::i#2 // i zp[2]:2 1.0000000000001E13 -unsigned int memcpy_in_vram::num -unsigned int memcpy_in_vram::num#0 // num zp[2]:4 5.882941176471765E11 -void *memcpy_in_vram::src -char *memcpy_in_vram::src#0 // src zp[2]:10 1.6666666683333334E8 -char memcpy_in_vram::src_bank -char memcpy_in_vram::src_increment -void memcpy_to_vram(char vbank , void *vdest , void *src , unsigned int num) -char memcpy_to_vram::$0 // reg byte a 2002.0 -char memcpy_to_vram::$1 // reg byte a 2002.0 -char *memcpy_to_vram::end -__constant char *memcpy_to_vram::end#0 = (char *)(void *)main::tiles+$40 // end -unsigned int memcpy_to_vram::num -char *memcpy_to_vram::s -char *memcpy_to_vram::s#1 // s zp[2]:29 200002.0 -char *memcpy_to_vram::s#2 // s zp[2]:29 133334.66666666666 -void *memcpy_to_vram::src -char memcpy_to_vram::vbank -void *memcpy_to_vram::vdest -void *memcpy_to_vram::vdest#1 // vdest zp[2]:2 202.0 -void *memcpy_to_vram::vdest#2 // vdest zp[2]:2 525.75 -void printf_str(void (*putc)(char) , const char *s) -char printf_str::c -char printf_str::c#1 // reg byte a 1001.0 -void (*printf_str::putc)(char) -const char *printf_str::s -const char *printf_str::s#0 // s zp[2]:29 400.4 -const char *printf_str::s#10 // s zp[2]:29 101.0 -const char *printf_str::s#9 // s zp[2]:29 1552.0 -void screenlayer(char layer) -unsigned int screenlayer::$2 // zp[2]:15 202.0 -char screenlayer::$3 // reg byte a 202.0 -unsigned int screenlayer::$4 // zp[2]:55 202.0 -unsigned int screenlayer::$5 // zp[2]:43 202.0 -char screenlayer::layer -__constant char screenlayer::layer#0 = 1 // layer -char screenlayer::vera_layer_get_height1_$0 // reg byte a 202.0 -char screenlayer::vera_layer_get_height1_$1 // reg byte a 202.0 -char screenlayer::vera_layer_get_height1_$2 // reg byte a 202.0 -char screenlayer::vera_layer_get_height1_$3 // reg byte a 202.0 -char *screenlayer::vera_layer_get_height1_config -char *screenlayer::vera_layer_get_height1_config#0 // vera_layer_get_height1_config zp[2]:45 202.0 -char screenlayer::vera_layer_get_height1_layer -char screenlayer::vera_layer_get_height1_layer#0 // reg byte a 202.0 -unsigned int screenlayer::vera_layer_get_height1_return -unsigned int screenlayer::vera_layer_get_height1_return#0 // vera_layer_get_height1_return zp[2]:43 202.0 -unsigned int screenlayer::vera_layer_get_height1_return#1 // vera_layer_get_height1_return zp[2]:43 202.0 -char screenlayer::vera_layer_get_width1_$0 // reg byte a 202.0 -char screenlayer::vera_layer_get_width1_$1 // reg byte a 202.0 -char screenlayer::vera_layer_get_width1_$2 // reg byte a 202.0 -char screenlayer::vera_layer_get_width1_$3 // reg byte a 202.0 -char *screenlayer::vera_layer_get_width1_config -char *screenlayer::vera_layer_get_width1_config#0 // vera_layer_get_width1_config zp[2]:33 202.0 -char screenlayer::vera_layer_get_width1_layer -char screenlayer::vera_layer_get_width1_layer#0 // reg byte a 202.0 -unsigned int screenlayer::vera_layer_get_width1_return -unsigned int screenlayer::vera_layer_get_width1_return#0 // vera_layer_get_width1_return zp[2]:15 202.0 -unsigned int screenlayer::vera_layer_get_width1_return#1 // vera_layer_get_width1_return zp[2]:15 202.0 -void screensize(char *x , char *y) -char screensize::$1 // reg byte a 202.0 -char screensize::$3 // reg byte a 202.0 -char screensize::hscale -char screensize::hscale#0 // reg byte a 202.0 -char screensize::vscale -char screensize::vscale#0 // reg byte a 202.0 -char *screensize::x -__constant char *screensize::x#0 = &conio_screen_width // x -char *screensize::y -__constant char *screensize::y#0 = &conio_screen_height // y -__constant char vera_layer_backcolor[2] = { BLUE, BLUE } -__constant char *vera_layer_config[2] = { VERA_L0_CONFIG, VERA_L1_CONFIG } -__constant char vera_layer_enable[2] = { VERA_LAYER0_ENABLE, VERA_LAYER1_ENABLE } -char vera_layer_get_backcolor(char layer) -char vera_layer_get_backcolor::layer -char vera_layer_get_backcolor::layer#0 // reg byte x 1102.0 -char vera_layer_get_backcolor::return -char vera_layer_get_backcolor::return#0 // reg byte a 367.33333333333337 -char vera_layer_get_backcolor::return#2 // reg byte a 202.0 -char vera_layer_get_color(char layer) -char vera_layer_get_color::$0 // reg byte a 2.000000002E9 -char vera_layer_get_color::$1 // reg byte a 2.000000002E9 -char vera_layer_get_color::$3 // reg byte a 2.000000002E9 -char *vera_layer_get_color::addr -char *vera_layer_get_color::addr#0 // addr zp[2]:8 2.000000002E9 -char vera_layer_get_color::layer -char vera_layer_get_color::layer#0 // reg byte x 20002.0 -char vera_layer_get_color::layer#1 // reg byte x 2.00000002E8 -char vera_layer_get_color::layer#2 // reg byte x 6.833350010000001E8 -char vera_layer_get_color::return -char vera_layer_get_color::return#0 // reg byte a 2.000000002E9 -char vera_layer_get_color::return#1 // reg byte a 2.000000002E9 -char vera_layer_get_color::return#2 // reg byte a 5.25002501E8 -char vera_layer_get_color::return#3 // reg byte a 20002.0 -char vera_layer_get_color::return#4 // reg byte a 2.00000002E8 -char vera_layer_get_mapbase_bank(char layer) -char vera_layer_get_mapbase_bank::layer -char vera_layer_get_mapbase_bank::layer#0 // reg byte x 1102.0 -char vera_layer_get_mapbase_bank::return -char vera_layer_get_mapbase_bank::return#0 // reg byte a 367.33333333333337 -char vera_layer_get_mapbase_bank::return#2 // reg byte a 202.0 -unsigned int vera_layer_get_mapbase_offset(char layer) -char vera_layer_get_mapbase_offset::$0 // reg byte a 2002.0 -char vera_layer_get_mapbase_offset::layer -char vera_layer_get_mapbase_offset::layer#0 // reg byte a 1102.0 -unsigned int vera_layer_get_mapbase_offset::return -unsigned int vera_layer_get_mapbase_offset::return#0 // return zp[2]:15 367.33333333333337 -unsigned int vera_layer_get_mapbase_offset::return#2 // return zp[2]:15 202.0 -char vera_layer_get_rowshift(char layer) -char vera_layer_get_rowshift::layer -char vera_layer_get_rowshift::layer#0 // reg byte x 1102.0 -char vera_layer_get_rowshift::return -char vera_layer_get_rowshift::return#0 // reg byte a 367.33333333333337 -char vera_layer_get_rowshift::return#2 // reg byte a 202.0 -unsigned int vera_layer_get_rowskip(char layer) -char vera_layer_get_rowskip::$0 // reg byte a 2002.0 -char vera_layer_get_rowskip::layer -char vera_layer_get_rowskip::layer#0 // reg byte a 1102.0 -unsigned int vera_layer_get_rowskip::return -unsigned int vera_layer_get_rowskip::return#0 // return zp[2]:55 367.33333333333337 -unsigned int vera_layer_get_rowskip::return#2 // return zp[2]:55 202.0 -char vera_layer_get_textcolor(char layer) -char vera_layer_get_textcolor::layer -char vera_layer_get_textcolor::layer#0 // reg byte x 1102.0 -char vera_layer_get_textcolor::return -char vera_layer_get_textcolor::return#0 // reg byte a 367.33333333333337 -char vera_layer_get_textcolor::return#2 // reg byte a 202.0 -__constant const char vera_layer_hflip[2] = { 0, 4 } -__constant char *vera_layer_mapbase[2] = { VERA_L0_MAPBASE, VERA_L1_MAPBASE } -void vera_layer_mode_text(char layer , unsigned long mapbase_address , unsigned long tilebase_address , unsigned int mapwidth , unsigned int mapheight , char tilewidth , char tileheight , unsigned int color_mode) -unsigned int vera_layer_mode_text::color_mode -char vera_layer_mode_text::layer -__constant char vera_layer_mode_text::layer#0 = 1 // layer -unsigned long vera_layer_mode_text::mapbase_address -__constant unsigned long vera_layer_mode_text::mapbase_address#0 = 0 // mapbase_address -unsigned int vera_layer_mode_text::mapheight -__constant unsigned int vera_layer_mode_text::mapheight#0 = $40 // mapheight -unsigned int vera_layer_mode_text::mapwidth -__constant unsigned int vera_layer_mode_text::mapwidth#0 = $80 // mapwidth -unsigned long vera_layer_mode_text::tilebase_address -__constant unsigned long vera_layer_mode_text::tilebase_address#0 = $f800 // tilebase_address -char vera_layer_mode_text::tileheight -__constant char vera_layer_mode_text::tileheight#0 = 8 // tileheight -char vera_layer_mode_text::tilewidth -__constant char vera_layer_mode_text::tilewidth#0 = 8 // tilewidth -void vera_layer_mode_tile(char layer , unsigned long mapbase_address , unsigned long tilebase_address , unsigned int mapwidth , unsigned int mapheight , char tilewidth , char tileheight , char color_depth) -unsigned int vera_layer_mode_tile::$1 // zp[2]:55 1001.0 -char vera_layer_mode_tile::$11 // reg byte a 2002.0 -char vera_layer_mode_tile::$12 // reg byte a 2002.0 -char vera_layer_mode_tile::$13 // reg byte a 2002.0 -char vera_layer_mode_tile::$14 // reg byte a 2002.0 -char vera_layer_mode_tile::$17 // zp[1]:61 250.25 -char vera_layer_mode_tile::$18 // zp[1]:60 273.0 -char vera_layer_mode_tile::$2 // reg byte a 2002.0 -unsigned int vera_layer_mode_tile::$6 // zp[2]:45 2002.0 -char vera_layer_mode_tile::$7 // reg byte a 2002.0 -char vera_layer_mode_tile::color_depth -char vera_layer_mode_tile::color_depth#2 // reg byte x 1001.0 -char vera_layer_mode_tile::config -char vera_layer_mode_tile::config#10 // reg byte x 2002.0 -char vera_layer_mode_tile::config#11 // reg byte x 2002.0 -char vera_layer_mode_tile::config#12 // reg byte x 2002.0 -char vera_layer_mode_tile::config#17 // reg byte x 625.625 -char vera_layer_mode_tile::config#21 // reg byte x 2002.0000000000002 -char vera_layer_mode_tile::config#25 // reg byte x 3003.0 -char vera_layer_mode_tile::config#6 // reg byte x 500.5 -char vera_layer_mode_tile::config#7 // reg byte x 500.5 -char vera_layer_mode_tile::config#8 // reg byte x 500.5 -char vera_layer_mode_tile::layer -char vera_layer_mode_tile::layer#10 // layer zp[1]:62 227.49999999999994 -char vera_layer_mode_tile::mapbase -char vera_layer_mode_tile::mapbase#0 // reg byte x 1001.0 -unsigned long vera_layer_mode_tile::mapbase_address -unsigned long vera_layer_mode_tile::mapbase_address#0 // mapbase_address zp[4]:47 2002.0 -unsigned long vera_layer_mode_tile::mapbase_address#10 // mapbase_address_1 zp[4]:74 88.97777777777777 -unsigned int vera_layer_mode_tile::mapheight -unsigned int vera_layer_mode_tile::mapheight#10 // mapheight zp[2]:68 133.46666666666667 -unsigned int vera_layer_mode_tile::mapwidth -unsigned int vera_layer_mode_tile::mapwidth#10 // mapwidth zp[2]:15 400.4 -char vera_layer_mode_tile::tilebase -char vera_layer_mode_tile::tilebase#0 // reg byte a 2002.0 -char vera_layer_mode_tile::tilebase#1 // reg byte x 1334.6666666666667 -char vera_layer_mode_tile::tilebase#10 // reg byte x 2002.0 -char vera_layer_mode_tile::tilebase#12 // reg byte x 2002.0000000000002 -char vera_layer_mode_tile::tilebase#3 // reg byte x 2002.0 -char vera_layer_mode_tile::tilebase#5 // reg byte x 2002.0 -unsigned long vera_layer_mode_tile::tilebase_address -unsigned long vera_layer_mode_tile::tilebase_address#0 // tilebase_address zp[4]:51 2002.0 -unsigned long vera_layer_mode_tile::tilebase_address#10 // tilebase_address_1 zp[4]:78 72.8 -char vera_layer_mode_tile::tileheight -char vera_layer_mode_tile::tileheight#10 // tileheight zp[1]:85 31.77777777777778 -char vera_layer_mode_tile::tilewidth -char vera_layer_mode_tile::tilewidth#10 // tilewidth zp[1]:84 33.932203389830505 -__constant char vera_layer_rowshift[2] = { 0, 0 } -__constant unsigned int vera_layer_rowskip[2] = { 0, 0 } -char vera_layer_set_backcolor(char layer , char color) -char vera_layer_set_backcolor::color -char vera_layer_set_backcolor::color#2 // reg byte a 101.0 -char vera_layer_set_backcolor::layer -char vera_layer_set_backcolor::layer#1 // reg byte x 22.0 -char vera_layer_set_backcolor::layer#2 // reg byte x 112.0 -char vera_layer_set_backcolor::old -char vera_layer_set_backcolor::return -void vera_layer_set_config(char layer , char config) -char vera_layer_set_config::$0 // reg byte a 20002.0 -char *vera_layer_set_config::addr -char *vera_layer_set_config::addr#0 // addr zp[2]:33 20002.0 -char vera_layer_set_config::config -char vera_layer_set_config::config#0 // reg byte x 3667.333333333333 -char vera_layer_set_config::layer -char vera_layer_set_config::layer#0 // reg byte a 5501.0 -void vera_layer_set_mapbase(char layer , char mapbase) -char vera_layer_set_mapbase::$0 // reg byte a 20002.0 -char *vera_layer_set_mapbase::addr -char *vera_layer_set_mapbase::addr#0 // addr zp[2]:33 20002.0 -char vera_layer_set_mapbase::layer -char vera_layer_set_mapbase::layer#0 // reg byte a 1001.0 -char vera_layer_set_mapbase::layer#3 // reg byte a 11002.0 -char vera_layer_set_mapbase::mapbase -char vera_layer_set_mapbase::mapbase#0 // reg byte x 2002.0 -char vera_layer_set_mapbase::mapbase#3 // reg byte x 3667.333333333333 -void vera_layer_set_text_color_mode(char layer , char color_mode) -char *vera_layer_set_text_color_mode::addr -char *vera_layer_set_text_color_mode::addr#0 // addr zp[2]:43 2502.5 -char vera_layer_set_text_color_mode::color_mode -char vera_layer_set_text_color_mode::layer -char vera_layer_set_textcolor(char layer , char color) -char vera_layer_set_textcolor::color -char vera_layer_set_textcolor::layer -char vera_layer_set_textcolor::layer#1 // reg byte x 22.0 -char vera_layer_set_textcolor::layer#2 // reg byte x 112.0 -char vera_layer_set_textcolor::old -char vera_layer_set_textcolor::return -void vera_layer_set_tilebase(char layer , char tilebase) -char vera_layer_set_tilebase::$0 // reg byte a 20002.0 -char *vera_layer_set_tilebase::addr -char *vera_layer_set_tilebase::addr#0 // addr zp[2]:33 20002.0 -char vera_layer_set_tilebase::layer -char vera_layer_set_tilebase::layer#0 // reg byte a 5501.0 -char vera_layer_set_tilebase::tilebase -char vera_layer_set_tilebase::tilebase#0 // reg byte x 3667.333333333333 -__constant char vera_layer_textcolor[2] = { WHITE, WHITE } -__constant char *vera_layer_tilebase[2] = { VERA_L0_TILEBASE, VERA_L1_TILEBASE } -__constant const char vera_layer_vflip[2] = { 0, 8 } -__constant unsigned long vera_mapbase_address[2] = { 0, 0 } -__constant char vera_mapbase_bank[2] = { 0, 0 } -__constant unsigned int vera_mapbase_offset[2] = { 0, 0 } -void vera_tile_area(char layer , unsigned int tileindex , char x , char y , char w , char h , char hflip , char vflip , char offset) -unsigned int vera_tile_area::$10 // zp[2]:2 20002.0 -unsigned int vera_tile_area::$4 // zp[2]:2 20002.0 -char vera_tile_area::$5 // reg byte a 20002.0 -char vera_tile_area::c -char vera_tile_area::c#1 // reg byte y 2.00000002E8 -char vera_tile_area::c#2 // reg byte y 7.500000075E7 -char vera_tile_area::h -char vera_tile_area::h#4 // h zp[1]:31 312500.03125 -char vera_tile_area::hflip -char vera_tile_area::hflip#0 // hflip zp[1]:40 5000.5 -char vera_tile_area::index_h -char vera_tile_area::index_h#0 // reg byte a 20002.0 -char vera_tile_area::index_h#1 // reg byte a 20002.0 -char vera_tile_area::index_h#2 // index_h zp[1]:26 4348260.956521738 -char vera_tile_area::index_l -char vera_tile_area::index_l#0 // index_l zp[1]:27 3846538.5384615385 -char vera_tile_area::layer -unsigned long vera_tile_area::mapbase -unsigned long vera_tile_area::mapbase#0 // mapbase zp[4]:19 1818.3636363636363 -unsigned long vera_tile_area::mapbase#1 // mapbase zp[4]:19 10001.0 -unsigned long vera_tile_area::mapbase#10 // mapbase zp[4]:19 3334000.4 -unsigned long vera_tile_area::mapbase#2 // mapbase zp[4]:19 20002.0 -unsigned long vera_tile_area::mapbase#3 // mapbase zp[4]:19 1.0000001E7 -char vera_tile_area::offset -char vera_tile_area::r -char vera_tile_area::r#1 // r zp[1]:12 2.0000002E7 -char vera_tile_area::r#2 // r zp[1]:12 1875000.1875 -unsigned int vera_tile_area::rowskip -unsigned int vera_tile_area::rowskip#0 // rowskip zp[2]:8 345172.4827586207 -char vera_tile_area::shift -char vera_tile_area::shift#0 // shift zp[1]:42 3333.6666666666665 -unsigned int vera_tile_area::tileindex -unsigned int vera_tile_area::tileindex#1 // tileindex zp[2]:35 667.3333333333334 -unsigned int vera_tile_area::tileindex#2 // tileindex zp[2]:35 667.3333333333334 -unsigned int vera_tile_area::tileindex#3 // tileindex zp[2]:35 3143.4285714285716 -char vera_tile_area::vera_vram_address01_$0 // reg byte a 2.0000002E7 -char vera_tile_area::vera_vram_address01_$1 // reg byte a 2.0000002E7 -char vera_tile_area::vera_vram_address01_$2 // reg byte a 2.0000002E7 -char vera_tile_area::vera_vram_address01_$3 // reg byte a 2.0000002E7 -unsigned long vera_tile_area::vera_vram_address01_bankaddr -char vera_tile_area::vera_vram_address01_incr -char vera_tile_area::vflip -char vera_tile_area::vflip#0 // vflip zp[1]:26 5000.5 -char vera_tile_area::w -char vera_tile_area::w#9 // w zp[1]:13 3125000.03125 -char vera_tile_area::x -char vera_tile_area::x#1 // x zp[1]:41 1001.0 -char vera_tile_area::x#2 // x zp[1]:41 1001.0 -char vera_tile_area::x#3 // x zp[1]:41 923.3076923076923 -char vera_tile_area::y -char vera_tile_area::y#1 // y zp[1]:37 2002.0 -char vera_tile_area::y#2 // y zp[1]:37 2002.0 -char vera_tile_area::y#3 // y zp[1]:37 200.2 -__constant unsigned long vera_tilebase_address[2] = { 0, 0 } -__constant char vera_tilebase_bank[2] = { 0, 0 } -__constant unsigned int vera_tilebase_offset[2] = { 0, 0 } - -zp[1]:82 [ conio_x16_init::line#3 conio_x16_init::line#1 conio_x16_init::line#0 ] -zp[2]:17 [ CONIO_SCREEN_TEXT#17 ] -zp[1]:59 [ CONIO_SCREEN_BANK#15 ] -zp[2]:72 [ main::tilebase#7 main::tilebase#2 ] -zp[1]:63 [ main::t#5 main::t#1 ] -reg byte x [ main::p#2 main::p#1 ] -zp[1]:64 [ main::row#9 main::row#1 ] -zp[1]:66 [ main::r#5 main::r#1 ] -zp[2]:35 [ main::tile#6 main::tile#10 main::tile#12 main::tile#1 vera_tile_area::tileindex#3 vera_tile_area::tileindex#2 vera_tile_area::tileindex#1 main::tile#8 main::tile#11 main::tile#13 main::tile#4 ] -reg byte x [ main::column#2 main::column#1 ] -zp[1]:57 [ main::c#2 main::c#1 ] -zp[1]:65 [ main::row#11 main::row#3 ] -zp[1]:67 [ main::r1#5 main::r1#1 ] -zp[1]:41 [ main::column1#2 main::column1#1 vera_tile_area::x#3 vera_tile_area::x#2 vera_tile_area::x#1 ] -reg byte x [ main::c1#2 main::c1#1 ] -reg byte x [ vera_layer_set_textcolor::layer#2 vera_layer_set_textcolor::layer#1 ] -reg byte x [ vera_layer_set_backcolor::layer#2 vera_layer_set_backcolor::layer#1 ] -reg byte a [ vera_layer_set_backcolor::color#2 ] -reg byte a [ vera_layer_set_mapbase::layer#3 vera_layer_set_mapbase::layer#0 ] -reg byte x [ vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::mapbase#0 ] -reg byte x [ gotoxy::y#5 gotoxy::y#4 gotoxy::y#1 gotoxy::y#2 ] -reg byte x [ vera_layer_get_color::layer#2 vera_layer_get_color::layer#1 vera_layer_get_color::layer#0 ] -reg byte a [ vera_layer_get_color::return#2 vera_layer_get_color::return#0 vera_layer_get_color::return#1 ] -reg byte x [ clrscr::l#2 clrscr::l#1 ] -reg byte y [ clrscr::c#2 clrscr::c#1 ] -reg byte x [ vera_layer_mode_tile::color_depth#2 ] -zp[1]:62 [ vera_layer_mode_tile::layer#10 ] -zp[2]:68 [ vera_layer_mode_tile::mapheight#10 ] -zp[4]:74 [ vera_layer_mode_tile::mapbase_address#10 ] -zp[4]:78 [ vera_layer_mode_tile::tilebase_address#10 ] -zp[1]:84 [ vera_layer_mode_tile::tilewidth#10 ] -zp[1]:85 [ vera_layer_mode_tile::tileheight#10 ] -reg byte x [ vera_layer_mode_tile::config#25 vera_layer_mode_tile::config#21 vera_layer_mode_tile::config#17 vera_layer_mode_tile::config#6 vera_layer_mode_tile::config#7 vera_layer_mode_tile::config#8 vera_layer_mode_tile::config#10 vera_layer_mode_tile::config#11 vera_layer_mode_tile::config#12 ] -reg byte x [ vera_layer_mode_tile::tilebase#10 vera_layer_mode_tile::tilebase#12 vera_layer_mode_tile::tilebase#1 vera_layer_mode_tile::tilebase#3 vera_layer_mode_tile::tilebase#5 ] -zp[4]:19 [ vera_tile_area::mapbase#10 vera_tile_area::mapbase#2 vera_tile_area::mapbase#3 vera_tile_area::mapbase#1 vera_tile_area::mapbase#0 ] -reg byte y [ vera_tile_area::c#2 vera_tile_area::c#1 ] -zp[2]:29 [ printf_str::s#9 printf_str::s#10 printf_str::s#0 memcpy_to_vram::s#2 memcpy_to_vram::s#1 ] -reg byte x [ insertup::i#2 insertup::i#1 ] -zp[1]:14 [ conio_screen_width ] -zp[1]:32 [ conio_screen_height ] -zp[1]:28 [ conio_screen_layer ] -zp[2]:70 [ conio_width ] -zp[2]:38 [ conio_height ] -zp[1]:23 [ conio_rowshift ] -zp[2]:24 [ conio_rowskip ] -zp[1]:37 [ cputc::c#0 vera_tile_area::y#3 vera_tile_area::y#2 vera_tile_area::y#1 ] -reg byte a [ vera_layer_get_color::return#3 ] -reg byte x [ cputc::color#0 ] -reg byte a [ cputc::$15 ] -reg byte a [ cputc::$2 ] -reg byte a [ cputc::$4 ] -reg byte a [ cputc::$5 ] -reg byte a [ cputc::$6 ] -reg byte a [ cputc::scroll_enable#0 ] -reg byte a [ kbhit::return#2 ] -reg byte a [ main::$25 ] -reg byte a [ screensize::hscale#0 ] -reg byte a [ screensize::$1 ] -reg byte a [ screensize::vscale#0 ] -reg byte a [ screensize::$3 ] -reg byte x [ vera_layer_get_mapbase_bank::layer#0 ] -reg byte a [ vera_layer_get_mapbase_bank::return#2 ] -zp[1]:86 [ CONIO_SCREEN_BANK#11 ] -reg byte a [ vera_layer_get_mapbase_offset::layer#0 ] -zp[2]:87 [ CONIO_SCREEN_TEXT#13 ] -reg byte a [ screenlayer::vera_layer_get_width1_layer#0 ] -reg byte a [ screenlayer::vera_layer_get_width1_$2 ] -reg byte a [ screenlayer::vera_layer_get_width1_$0 ] -reg byte a [ screenlayer::vera_layer_get_width1_$1 ] -reg byte a [ screenlayer::vera_layer_get_width1_$3 ] -reg byte x [ vera_layer_get_rowshift::layer#0 ] -reg byte a [ vera_layer_get_rowshift::return#2 ] -reg byte a [ screenlayer::$3 ] -reg byte a [ vera_layer_get_rowskip::layer#0 ] -reg byte a [ screenlayer::vera_layer_get_height1_layer#0 ] -reg byte a [ screenlayer::vera_layer_get_height1_$2 ] -reg byte a [ screenlayer::vera_layer_get_height1_$0 ] -reg byte a [ screenlayer::vera_layer_get_height1_$1 ] -reg byte a [ screenlayer::vera_layer_get_height1_$3 ] -reg byte a [ vera_layer_set_mapbase::$0 ] -zp[2]:15 [ gotoxy::$6 gotoxy::line_offset#0 screenlayer::vera_layer_get_width1_return#0 screenlayer::vera_layer_get_width1_return#1 screenlayer::$2 vera_layer_get_mapbase_offset::return#2 vera_layer_get_mapbase_offset::return#0 vera_layer_mode_tile::mapwidth#10 ] -reg byte a [ gotoxy::$5 ] -reg byte a [ vera_layer_get_color::$3 ] -reg byte a [ vera_layer_get_color::$0 ] -reg byte a [ vera_layer_get_color::$1 ] -reg byte a [ cputln::$2 ] -reg byte a [ cputln::$3 ] -reg byte x [ vera_layer_get_backcolor::layer#0 ] -reg byte a [ vera_layer_get_backcolor::return#2 ] -reg byte a [ clrscr::$0 ] -zp[1]:83 [ clrscr::$1 ] -reg byte x [ vera_layer_get_textcolor::layer#0 ] -reg byte a [ vera_layer_get_textcolor::return#2 ] -reg byte a [ clrscr::$2 ] -zp[1]:31 [ clrscr::color#0 vera_tile_area::h#4 ] -reg byte a [ clrscr::$9 ] -reg byte a [ clrscr::$5 ] -reg byte a [ clrscr::$6 ] -reg byte a [ clrscr::$7 ] -reg byte a [ vera_layer_mode_tile::$14 ] -reg byte a [ vera_layer_set_config::layer#0 ] -reg byte x [ vera_layer_set_config::config#0 ] -zp[2]:55 [ vera_layer_mode_tile::$1 vera_layer_get_rowskip::return#2 screenlayer::$4 vera_layer_get_rowskip::return#0 ] -zp[1]:61 [ vera_layer_mode_tile::$17 ] -reg byte a [ vera_layer_mode_tile::$2 ] -zp[1]:60 [ vera_layer_mode_tile::$18 ] -zp[4]:47 [ vera_layer_mode_tile::mapbase_address#0 ] -reg byte x [ vera_layer_mode_tile::mapbase#0 ] -zp[2]:45 [ vera_layer_mode_tile::$6 screenlayer::vera_layer_get_height1_config#0 ] -reg byte a [ vera_layer_mode_tile::$7 ] -zp[4]:51 [ vera_layer_mode_tile::tilebase_address#0 ] -reg byte a [ vera_layer_mode_tile::tilebase#0 ] -reg byte a [ vera_layer_set_tilebase::layer#0 ] -reg byte x [ vera_layer_set_tilebase::tilebase#0 ] -reg byte a [ vera_layer_mode_tile::$13 ] -reg byte a [ vera_layer_mode_tile::$12 ] -reg byte a [ vera_layer_mode_tile::$11 ] -reg byte a [ memcpy_to_vram::$0 ] -reg byte a [ memcpy_to_vram::$1 ] -zp[1]:42 [ vera_tile_area::shift#0 ] -zp[2]:8 [ vera_tile_area::rowskip#0 cputc::conio_addr#0 cputc::conio_addr#1 cputln::temp#0 cputln::temp#1 vera_layer_get_color::addr#0 ] -zp[1]:40 [ vera_tile_area::hflip#0 ] -zp[1]:26 [ vera_tile_area::vflip#0 vera_tile_area::index_h#2 ] -zp[1]:27 [ vera_tile_area::index_l#0 ] -reg byte a [ vera_tile_area::index_h#0 ] -reg byte a [ vera_tile_area::index_h#1 ] -zp[2]:2 [ vera_tile_area::$10 vera_tile_area::$4 cputc::$16 memcpy_in_vram::i#2 memcpy_in_vram::i#1 clearline::c#2 clearline::c#1 memcpy_to_vram::vdest#2 memcpy_to_vram::vdest#1 clrscr::line_text#2 clrscr::line_text#1 clrscr::line_text#0 ] -reg byte a [ vera_tile_area::$5 ] -reg byte a [ vera_tile_area::vera_vram_address01_$0 ] -reg byte a [ vera_tile_area::vera_vram_address01_$1 ] -reg byte a [ vera_tile_area::vera_vram_address01_$2 ] -reg byte a [ vera_tile_area::vera_vram_address01_$3 ] -reg byte a [ printf_str::c#1 ] -zp[1]:58 [ kbhit::ch ] -reg byte a [ kbhit::return#0 ] -reg byte a [ kbhit::return#1 ] -zp[2]:43 [ vera_layer_set_text_color_mode::addr#0 screenlayer::vera_layer_get_height1_return#0 screenlayer::vera_layer_get_height1_return#1 screenlayer::$5 ] -reg byte a [ vera_layer_get_mapbase_bank::return#0 ] -reg byte a [ vera_layer_get_mapbase_offset::$0 ] -reg byte a [ vera_layer_get_rowshift::return#0 ] -reg byte a [ vera_layer_get_rowskip::$0 ] -reg byte a [ vera_layer_get_backcolor::return#0 ] -reg byte a [ vera_layer_get_textcolor::return#0 ] -reg byte a [ vera_layer_set_config::$0 ] -reg byte a [ vera_layer_set_tilebase::$0 ] -zp[2]:33 [ vera_layer_set_tilebase::addr#0 vera_layer_set_config::addr#0 vera_layer_set_mapbase::addr#0 screenlayer::vera_layer_get_width1_config#0 ] -zp[1]:13 [ insertup::cy#0 vera_tile_area::w#9 ] -zp[1]:12 [ insertup::width#0 vera_tile_area::r#2 vera_tile_area::r#1 ] -reg byte a [ insertup::$3 ] -zp[2]:6 [ insertup::line#0 insertup::start#0 memcpy_in_vram::dest#0 ] -zp[2]:4 [ memcpy_in_vram::num#0 ] -reg byte a [ clearline::$5 ] -zp[2]:10 [ clearline::addr#0 memcpy_in_vram::src#0 ] -reg byte a [ clearline::$1 ] -reg byte a [ clearline::$2 ] -reg byte a [ vera_layer_get_color::return#4 ] -reg byte x [ clearline::color#0 ] -reg byte a [ memcpy_in_vram::$0 ] -reg byte a [ memcpy_in_vram::$1 ] -reg byte a [ memcpy_in_vram::$3 ] -reg byte a [ memcpy_in_vram::$4 ] - - -FINAL ASSEMBLER -Score: 449677 - - // File Comments -// Example program for the Commander X16. -// Demonstrates the usage of the VERA tile map modes and layering. - // Upstart -.cpu _65c02 - // Commodore 64 PRG executable file -.file [name="tilemap_8bpp_8_x_8.prg", type="prg", segments="Program"] -.segmentdef Program [segments="Basic, Code, Data"] -.segmentdef Basic [start=$0801] -.segmentdef Code [start=$80d] -.segmentdef Data [startAfter="Code"] -.segment Basic -:BasicUpstart(__start) - // Global Constants & labels - /// The colors of the CX16 - .const BLACK = 0 - .const WHITE = 1 - .const BLUE = 6 - .const VERA_INC_1 = $10 - .const VERA_ADDRSEL = 1 - .const VERA_LAYER1_ENABLE = $20 - .const VERA_LAYER0_ENABLE = $10 - .const VERA_LAYER_WIDTH_64 = $10 - .const VERA_LAYER_WIDTH_128 = $20 - .const VERA_LAYER_WIDTH_256 = $30 - .const VERA_LAYER_WIDTH_MASK = $30 - .const VERA_LAYER_HEIGHT_64 = $40 - .const VERA_LAYER_HEIGHT_128 = $80 - .const VERA_LAYER_HEIGHT_256 = $c0 - .const VERA_LAYER_HEIGHT_MASK = $c0 - /// Bit 0-1: Color Depth (0: 1 bpp, 1: 2 bpp, 2: 4 bpp, 3: 8 bpp) - .const VERA_LAYER_COLOR_DEPTH_1BPP = 0 - .const VERA_LAYER_COLOR_DEPTH_2BPP = 1 - .const VERA_LAYER_COLOR_DEPTH_4BPP = 2 - .const VERA_LAYER_COLOR_DEPTH_8BPP = 3 - .const VERA_LAYER_CONFIG_256C = 8 - .const VERA_TILEBASE_WIDTH_16 = 1 - .const VERA_TILEBASE_HEIGHT_16 = 2 - .const VERA_LAYER_TILEBASE_MASK = $fc - .const SIZEOF_POINTER = 2 - .const STACK_BASE = $103 - /// $9F20 VRAM Address (7:0) - .label VERA_ADDRX_L = $9f20 - /// $9F21 VRAM Address (15:8) - .label VERA_ADDRX_M = $9f21 - /// $9F22 VRAM Address (7:0) - /// Bit 4-7: Address Increment The following is the amount incremented per value value:increment - /// 0:0, 1:1, 2:2, 3:4, 4:8, 5:16, 6:32, 7:64, 8:128, 9:256, 10:512, 11:40, 12:80, 13:160, 14:320, 15:640 - /// Bit 3: DECR Setting the DECR bit, will decrement instead of increment by the value set by the 'Address Increment' field. - /// Bit 0: VRAM Address (16) - .label VERA_ADDRX_H = $9f22 - /// $9F23 DATA0 VRAM Data port 0 - .label VERA_DATA0 = $9f23 - /// $9F24 DATA1 VRAM Data port 1 - .label VERA_DATA1 = $9f24 - /// $9F25 CTRL Control - /// Bit 7: Reset - /// Bit 1: DCSEL - /// Bit 2: ADDRSEL - .label VERA_CTRL = $9f25 - /// $9F29 DC_VIDEO (DCSEL=0) - /// Bit 7: Current Field Read-only bit which reflects the active interlaced field in composite and RGB modes. (0: even, 1: odd) - /// Bit 6: Sprites Enable Enable output from the Sprites renderer - /// Bit 5: Layer1 Enable Enable output from the Layer1 renderer - /// Bit 4: Layer0 Enable Enable output from the Layer0 renderer - /// Bit 2: Chroma Disable Setting 'Chroma Disable' disables output of chroma in NTSC composite mode and will give a better picture on a monochrome display. (Setting this bit will also disable the chroma output on the S-video output.) - /// Bit 0-1: Output Mode 0: Video disabled, 1: VGA output, 2: NTSC composite, 3: RGB interlaced, composite sync (via VGA connector) - .label VERA_DC_VIDEO = $9f29 - /// $9F2A DC_HSCALE (DCSEL=0) Active Display H-Scale - .label VERA_DC_HSCALE = $9f2a - /// $9F2B DC_VSCALE (DCSEL=0) Active Display V-Scale - .label VERA_DC_VSCALE = $9f2b - /// $9F2D L0_CONFIG Layer 0 Configuration - .label VERA_L0_CONFIG = $9f2d - /// $9F2E L0_MAPBASE Layer 0 Map Base Address (16:9) - .label VERA_L0_MAPBASE = $9f2e - /// Bit 0: Tile Width (0:8 pixels, 1:16 pixels) - .label VERA_L0_TILEBASE = $9f2f - /// $9F34 L1_CONFIG Layer 1 Configuration - .label VERA_L1_CONFIG = $9f34 - /// $9F35 L1_MAPBASE Layer 1 Map Base Address (16:9) - .label VERA_L1_MAPBASE = $9f35 - /// $9F36 L1_TILEBASE Layer 1 Tile Base - /// Bit 2-7: Tile Base Address (16:11) - /// Bit 1: Tile Height (0:8 pixels, 1:16 pixels) - /// Bit 0: Tile Width (0:8 pixels, 1:16 pixels) - .label VERA_L1_TILEBASE = $9f36 - // Variable holding the screen width; - .label conio_screen_width = $e - // Variable holding the screen height; - .label conio_screen_height = $20 - // Variable holding the screen layer on the VERA card with which conio interacts; - .label conio_screen_layer = $1c - // Variables holding the current map width and map height of the layer. - .label conio_width = $46 - .label conio_height = $26 - .label conio_rowshift = $17 - .label conio_rowskip = $18 - .label CONIO_SCREEN_BANK = $56 - // The screen width - // The screen height - // The text screen base address, which is a 16:0 bit value in VERA VRAM. - // That is 128KB addressable space, thus 17 bits in total. - // CONIO_SCREEN_TEXT contains bits 15:0 of the address. - // CONIO_SCREEN_BANK contains bit 16, the the 64K memory bank in VERA VRAM (the upper 17th bit). - // !!! note that these values are not const for the cx16! - // This conio implements the two layers of VERA, which can be layer 0 or layer 1. - // Configuring conio to output to a different layer, will change these fields to the address base - // configured using VERA_L0_MAPBASE = 0x9f2e or VERA_L1_MAPBASE = 0x9f35. - // Using the function setscreenlayer(layer) will re-calculate using CONIO_SCREEN_TEXT and CONIO_SCREEN_BASE - // based on the values of VERA_L0_MAPBASE or VERA_L1_MAPBASE, mapping the base address of the selected layer. - // The function setscreenlayermapbase(layer,mapbase) allows to configure bit 16:9 of the - // mapbase address of the time map in VRAM of the selected layer VERA_L0_MAPBASE or VERA_L1_MAPBASE. - .label CONIO_SCREEN_TEXT = $57 - // The screen width - // The screen height - // The text screen base address, which is a 16:0 bit value in VERA VRAM. - // That is 128KB addressable space, thus 17 bits in total. - // CONIO_SCREEN_TEXT contains bits 15:0 of the address. - // CONIO_SCREEN_BANK contains bit 16, the the 64K memory bank in VERA VRAM (the upper 17th bit). - // !!! note that these values are not const for the cx16! - // This conio implements the two layers of VERA, which can be layer 0 or layer 1. - // Configuring conio to output to a different layer, will change these fields to the address base - // configured using VERA_L0_MAPBASE = 0x9f2e or VERA_L1_MAPBASE = 0x9f35. - // Using the function setscreenlayer(layer) will re-calculate using CONIO_SCREEN_TEXT and CONIO_SCREEN_BASE - // based on the values of VERA_L0_MAPBASE or VERA_L1_MAPBASE, mapping the base address of the selected layer. - // The function setscreenlayermapbase(layer,mapbase) allows to configure bit 16:9 of the - // mapbase address of the time map in VRAM of the selected layer VERA_L0_MAPBASE or VERA_L1_MAPBASE. - .label CONIO_SCREEN_TEXT_1 = $11 - .label CONIO_SCREEN_BANK_1 = $3b -.segment Code - // __start -__start: { - // __start::__init1 - // __ma unsigned byte conio_screen_width = 0 - // [1] conio_screen_width = 0 -- vbuz1=vbuc1 - lda #0 - sta.z conio_screen_width - // __ma unsigned byte conio_screen_height = 0 - // [2] conio_screen_height = 0 -- vbuz1=vbuc1 - sta.z conio_screen_height - // __ma unsigned byte conio_screen_layer = 1 - // [3] conio_screen_layer = 1 -- vbuz1=vbuc1 - lda #1 - sta.z conio_screen_layer - // __ma word conio_width = 0 - // [4] conio_width = 0 -- vwuz1=vwuc1 - lda #<0 - sta.z conio_width - sta.z conio_width+1 - // __ma word conio_height = 0 - // [5] conio_height = 0 -- vwuz1=vwuc1 - sta.z conio_height - sta.z conio_height+1 - // __ma byte conio_rowshift = 0 - // [6] conio_rowshift = 0 -- vbuz1=vbuc1 - sta.z conio_rowshift - // __ma word conio_rowskip = 0 - // [7] conio_rowskip = 0 -- vwuz1=vwuc1 - sta.z conio_rowskip - sta.z conio_rowskip+1 - // #pragma constructor_for(conio_x16_init, cputc, clrscr, cscroll) - // [8] call conio_x16_init - jsr conio_x16_init - // [9] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] - // __start::@1 - // [10] call main - // [65] phi from __start::@1 to main [phi:__start::@1->main] - jsr main - // __start::@return - // [11] return - rts -} - // conio_x16_init -// Set initial cursor position -conio_x16_init: { - // Position cursor at current line - .label BASIC_CURSOR_LINE = $d6 - .label line = $52 - // char line = *BASIC_CURSOR_LINE - // [12] conio_x16_init::line#0 = *conio_x16_init::BASIC_CURSOR_LINE -- vbuz1=_deref_pbuc1 - lda.z BASIC_CURSOR_LINE - sta.z line - // vera_layer_mode_text(1,(dword)0x00000,(dword)0x0F800,128,64,8,8,16) - // [13] call vera_layer_mode_text - // [141] phi from conio_x16_init to vera_layer_mode_text [phi:conio_x16_init->vera_layer_mode_text] - jsr vera_layer_mode_text - // [14] phi from conio_x16_init to conio_x16_init::@3 [phi:conio_x16_init->conio_x16_init::@3] - // conio_x16_init::@3 - // screensize(&conio_screen_width, &conio_screen_height) - // [15] call screensize - jsr screensize - // [16] phi from conio_x16_init::@3 to conio_x16_init::@4 [phi:conio_x16_init::@3->conio_x16_init::@4] - // conio_x16_init::@4 - // screenlayer(1) - // [17] call screenlayer - jsr screenlayer - // [18] phi from conio_x16_init::@4 to conio_x16_init::@5 [phi:conio_x16_init::@4->conio_x16_init::@5] - // conio_x16_init::@5 - // vera_layer_set_textcolor(1, WHITE) - // [19] call vera_layer_set_textcolor - // [193] phi from conio_x16_init::@5 to vera_layer_set_textcolor [phi:conio_x16_init::@5->vera_layer_set_textcolor] - // [193] phi vera_layer_set_textcolor::layer#2 = 1 [phi:conio_x16_init::@5->vera_layer_set_textcolor#0] -- vbuxx=vbuc1 - ldx #1 - jsr vera_layer_set_textcolor - // [20] phi from conio_x16_init::@5 to conio_x16_init::@6 [phi:conio_x16_init::@5->conio_x16_init::@6] - // conio_x16_init::@6 - // vera_layer_set_backcolor(1, BLUE) - // [21] call vera_layer_set_backcolor - // [196] phi from conio_x16_init::@6 to vera_layer_set_backcolor [phi:conio_x16_init::@6->vera_layer_set_backcolor] - // [196] phi vera_layer_set_backcolor::color#2 = BLUE [phi:conio_x16_init::@6->vera_layer_set_backcolor#0] -- vbuaa=vbuc1 - lda #BLUE - // [196] phi vera_layer_set_backcolor::layer#2 = 1 [phi:conio_x16_init::@6->vera_layer_set_backcolor#1] -- vbuxx=vbuc1 - ldx #1 - jsr vera_layer_set_backcolor - // [22] phi from conio_x16_init::@6 to conio_x16_init::@7 [phi:conio_x16_init::@6->conio_x16_init::@7] - // conio_x16_init::@7 - // vera_layer_set_mapbase(0,0x20) - // [23] call vera_layer_set_mapbase - // [199] phi from conio_x16_init::@7 to vera_layer_set_mapbase [phi:conio_x16_init::@7->vera_layer_set_mapbase] - // [199] phi vera_layer_set_mapbase::mapbase#3 = $20 [phi:conio_x16_init::@7->vera_layer_set_mapbase#0] -- vbuxx=vbuc1 - ldx #$20 - // [199] phi vera_layer_set_mapbase::layer#3 = 0 [phi:conio_x16_init::@7->vera_layer_set_mapbase#1] -- vbuaa=vbuc1 - lda #0 - jsr vera_layer_set_mapbase - // [24] phi from conio_x16_init::@7 to conio_x16_init::@8 [phi:conio_x16_init::@7->conio_x16_init::@8] - // conio_x16_init::@8 - // vera_layer_set_mapbase(1,0x00) - // [25] call vera_layer_set_mapbase - // [199] phi from conio_x16_init::@8 to vera_layer_set_mapbase [phi:conio_x16_init::@8->vera_layer_set_mapbase] - // [199] phi vera_layer_set_mapbase::mapbase#3 = 0 [phi:conio_x16_init::@8->vera_layer_set_mapbase#0] -- vbuxx=vbuc1 - ldx #0 - // [199] phi vera_layer_set_mapbase::layer#3 = 1 [phi:conio_x16_init::@8->vera_layer_set_mapbase#1] -- vbuaa=vbuc1 - lda #1 - jsr vera_layer_set_mapbase - // conio_x16_init::@9 - // if(line>=CONIO_HEIGHT) - // [26] if(conio_x16_init::line#0conio_x16_init::@1] - // [28] phi conio_x16_init::line#3 = conio_x16_init::line#1 [phi:conio_x16_init::@2/conio_x16_init::@9->conio_x16_init::@1#0] -- register_copy - // conio_x16_init::@1 - __b1: - // gotoxy(0, line) - // [29] gotoxy::y#1 = conio_x16_init::line#3 -- vbuxx=vbuz1 - ldx.z line - // [30] call gotoxy - // [204] phi from conio_x16_init::@1 to gotoxy [phi:conio_x16_init::@1->gotoxy] - // [204] phi gotoxy::y#4 = gotoxy::y#1 [phi:conio_x16_init::@1->gotoxy#0] -- register_copy - jsr gotoxy - // conio_x16_init::@return - // } - // [31] return - rts -} - // cputc -// Output one character at the current cursor position -// Moves the cursor forward. Scrolls the entire screen if needed -// void cputc(__zp($25) char c) -cputc: { - .const OFFSET_STACK_C = 0 - .label __16 = 2 - .label c = $25 - .label conio_addr = 8 - // [33] cputc::c#0 = stackidx(char,cputc::OFFSET_STACK_C) -- vbuz1=_stackidxbyte_vbuc1 - tsx - lda STACK_BASE+OFFSET_STACK_C,x - sta.z c - // char color = vera_layer_get_color( conio_screen_layer) - // [34] vera_layer_get_color::layer#0 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [35] call vera_layer_get_color - // [217] phi from cputc to vera_layer_get_color [phi:cputc->vera_layer_get_color] - // [217] phi vera_layer_get_color::layer#2 = vera_layer_get_color::layer#0 [phi:cputc->vera_layer_get_color#0] -- register_copy - jsr vera_layer_get_color - // char color = vera_layer_get_color( conio_screen_layer) - // [36] vera_layer_get_color::return#3 = vera_layer_get_color::return#2 - // cputc::@7 - // [37] cputc::color#0 = vera_layer_get_color::return#3 -- vbuxx=vbuaa - tax - // char* conio_addr = CONIO_SCREEN_TEXT + conio_line_text[conio_screen_layer] - // [38] cputc::$15 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [39] cputc::conio_addr#0 = CONIO_SCREEN_TEXT#17 + conio_line_text[cputc::$15] -- pbuz1=pbuz2_plus_pwuc1_derefidx_vbuaa - tay - clc - lda.z CONIO_SCREEN_TEXT_1 - adc conio_line_text,y - sta.z conio_addr - lda.z CONIO_SCREEN_TEXT_1+1 - adc conio_line_text+1,y - sta.z conio_addr+1 - // conio_cursor_x[conio_screen_layer] << 1 - // [40] cputc::$2 = conio_cursor_x[conio_screen_layer] << 1 -- vbuaa=pbuc1_derefidx_vbuz1_rol_1 - ldy.z conio_screen_layer - lda conio_cursor_x,y - asl - // conio_addr += conio_cursor_x[conio_screen_layer] << 1 - // [41] cputc::conio_addr#1 = cputc::conio_addr#0 + cputc::$2 -- pbuz1=pbuz1_plus_vbuaa - clc - adc.z conio_addr - sta.z conio_addr - bcc !+ - inc.z conio_addr+1 - !: - // if(c=='\n') - // [42] if(cputc::c#0==' ') goto cputc::@1 -- vbuz1_eq_vbuc1_then_la1 - lda #'\n' - cmp.z c - beq __b1 - // cputc::@2 - // *VERA_CTRL &= ~VERA_ADDRSEL - // [43] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // BYTE0(conio_addr) - // [44] cputc::$4 = byte0 cputc::conio_addr#1 -- vbuaa=_byte0_pbuz1 - lda.z conio_addr - // *VERA_ADDRX_L = BYTE0(conio_addr) - // [45] *VERA_ADDRX_L = cputc::$4 -- _deref_pbuc1=vbuaa - // Set address - sta VERA_ADDRX_L - // BYTE1(conio_addr) - // [46] cputc::$5 = byte1 cputc::conio_addr#1 -- vbuaa=_byte1_pbuz1 - lda.z conio_addr+1 - // *VERA_ADDRX_M = BYTE1(conio_addr) - // [47] *VERA_ADDRX_M = cputc::$5 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // CONIO_SCREEN_BANK | VERA_INC_1 - // [48] cputc::$6 = CONIO_SCREEN_BANK#15 | VERA_INC_1 -- vbuaa=vbuz1_bor_vbuc1 - lda #VERA_INC_1 - ora.z CONIO_SCREEN_BANK_1 - // *VERA_ADDRX_H = CONIO_SCREEN_BANK | VERA_INC_1 - // [49] *VERA_ADDRX_H = cputc::$6 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_H - // *VERA_DATA0 = c - // [50] *VERA_DATA0 = cputc::c#0 -- _deref_pbuc1=vbuz1 - lda.z c - sta VERA_DATA0 - // *VERA_DATA0 = color - // [51] *VERA_DATA0 = cputc::color#0 -- _deref_pbuc1=vbuxx - stx VERA_DATA0 - // conio_cursor_x[conio_screen_layer]++; - // [52] conio_cursor_x[conio_screen_layer] = ++ conio_cursor_x[conio_screen_layer] -- pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 - ldx.z conio_screen_layer - inc conio_cursor_x,x - // byte scroll_enable = conio_scroll_enable[conio_screen_layer] - // [53] cputc::scroll_enable#0 = conio_scroll_enable[conio_screen_layer] -- vbuaa=pbuc1_derefidx_vbuz1 - ldy.z conio_screen_layer - lda conio_scroll_enable,y - // if(scroll_enable) - // [54] if(0!=cputc::scroll_enable#0) goto cputc::@5 -- 0_neq_vbuaa_then_la1 - cmp #0 - bne __b5 - // cputc::@3 - // (unsigned int)conio_cursor_x[conio_screen_layer] == conio_width - // [55] cputc::$16 = (unsigned int)conio_cursor_x[conio_screen_layer] -- vwuz1=_word_pbuc1_derefidx_vbuz2 - lda conio_cursor_x,y - sta.z __16 - lda #0 - sta.z __16+1 - // if((unsigned int)conio_cursor_x[conio_screen_layer] == conio_width) - // [56] if(cputc::$16!=conio_width) goto cputc::@return -- vwuz1_neq_vwuz2_then_la1 - cmp.z conio_width+1 - bne __breturn - lda.z __16 - cmp.z conio_width - bne __breturn - // [57] phi from cputc::@3 to cputc::@4 [phi:cputc::@3->cputc::@4] - // cputc::@4 - // cputln() - // [58] call cputln - jsr cputln - // cputc::@return - __breturn: - // } - // [59] return - rts - // cputc::@5 - __b5: - // if(conio_cursor_x[conio_screen_layer] == CONIO_WIDTH) - // [60] if(conio_cursor_x[conio_screen_layer]!=conio_screen_width) goto cputc::@return -- pbuc1_derefidx_vbuz1_neq_vbuz2_then_la1 - lda.z conio_screen_width - ldy.z conio_screen_layer - cmp conio_cursor_x,y - bne __breturn - // [61] phi from cputc::@5 to cputc::@6 [phi:cputc::@5->cputc::@6] - // cputc::@6 - // cputln() - // [62] call cputln - jsr cputln - rts - // [63] phi from cputc::@7 to cputc::@1 [phi:cputc::@7->cputc::@1] - // cputc::@1 - __b1: - // cputln() - // [64] call cputln - jsr cputln - rts -} - // main -main: { - .label tilebase = $48 - .label t = $3f - .label tile = $23 - .label c = $39 - // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. - .label row = $40 - .label r = $42 - .label column1 = $29 - // Draw 4 squares with each tile, starting from row 4, width 1, height 1, separated by 2 characters. - .label row_1 = $41 - .label r1 = $43 - // main::textcolor1 - // vera_layer_set_textcolor(conio_screen_layer, color) - // [66] vera_layer_set_textcolor::layer#1 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [67] call vera_layer_set_textcolor - // [193] phi from main::textcolor1 to vera_layer_set_textcolor [phi:main::textcolor1->vera_layer_set_textcolor] - // [193] phi vera_layer_set_textcolor::layer#2 = vera_layer_set_textcolor::layer#1 [phi:main::textcolor1->vera_layer_set_textcolor#0] -- register_copy - jsr vera_layer_set_textcolor - // main::bgcolor1 - // vera_layer_set_backcolor(conio_screen_layer, color) - // [68] vera_layer_set_backcolor::layer#1 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [69] call vera_layer_set_backcolor - // [196] phi from main::bgcolor1 to vera_layer_set_backcolor [phi:main::bgcolor1->vera_layer_set_backcolor] - // [196] phi vera_layer_set_backcolor::color#2 = BLACK [phi:main::bgcolor1->vera_layer_set_backcolor#0] -- vbuaa=vbuc1 - lda #BLACK - // [196] phi vera_layer_set_backcolor::layer#2 = vera_layer_set_backcolor::layer#1 [phi:main::bgcolor1->vera_layer_set_backcolor#1] -- register_copy - jsr vera_layer_set_backcolor - // [70] phi from main::bgcolor1 to main::@12 [phi:main::bgcolor1->main::@12] - // main::@12 - // clrscr() - // [71] call clrscr - jsr clrscr - // [72] phi from main::@12 to main::@14 [phi:main::@12->main::@14] - // main::@14 - // vera_layer_mode_tile(0, 0x04000, 0x14000, 128, 128, 8, 8, 8) - // [73] call vera_layer_mode_tile - // [268] phi from main::@14 to vera_layer_mode_tile [phi:main::@14->vera_layer_mode_tile] - // [268] phi vera_layer_mode_tile::tileheight#10 = 8 [phi:main::@14->vera_layer_mode_tile#0] -- vbuz1=vbuc1 - lda #8 - sta.z vera_layer_mode_tile.tileheight - // [268] phi vera_layer_mode_tile::tilewidth#10 = 8 [phi:main::@14->vera_layer_mode_tile#1] -- vbuz1=vbuc1 - sta.z vera_layer_mode_tile.tilewidth - // [268] phi vera_layer_mode_tile::tilebase_address#10 = $14000 [phi:main::@14->vera_layer_mode_tile#2] -- vduz1=vduc1 - lda #<$14000 - sta.z vera_layer_mode_tile.tilebase_address_1 - lda #>$14000 - sta.z vera_layer_mode_tile.tilebase_address_1+1 - lda #<$14000>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+2 - lda #>$14000>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+3 - // [268] phi vera_layer_mode_tile::mapbase_address#10 = $4000 [phi:main::@14->vera_layer_mode_tile#3] -- vduz1=vduc1 - lda #<$4000 - sta.z vera_layer_mode_tile.mapbase_address_1 - lda #>$4000 - sta.z vera_layer_mode_tile.mapbase_address_1+1 - lda #<$4000>>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+2 - lda #>$4000>>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+3 - // [268] phi vera_layer_mode_tile::mapheight#10 = $80 [phi:main::@14->vera_layer_mode_tile#4] -- vwuz1=vbuc1 - lda #<$80 - sta.z vera_layer_mode_tile.mapheight - lda #>$80 - sta.z vera_layer_mode_tile.mapheight+1 - // [268] phi vera_layer_mode_tile::layer#10 = 0 [phi:main::@14->vera_layer_mode_tile#5] -- vbuz1=vbuc1 - lda #0 - sta.z vera_layer_mode_tile.layer - // [268] phi vera_layer_mode_tile::mapwidth#10 = $80 [phi:main::@14->vera_layer_mode_tile#6] -- vwuz1=vbuc1 - lda #<$80 - sta.z vera_layer_mode_tile.mapwidth - lda #>$80 - sta.z vera_layer_mode_tile.mapwidth+1 - // [268] phi vera_layer_mode_tile::color_depth#2 = 8 [phi:main::@14->vera_layer_mode_tile#7] -- vbuxx=vbuc1 - ldx #8 - jsr vera_layer_mode_tile - // [74] phi from main::@14 to main::@15 [phi:main::@14->main::@15] - // main::@15 - // memcpy_to_vram(1, tilebase, tiles, 64) - // [75] call memcpy_to_vram - // [338] phi from main::@15 to memcpy_to_vram [phi:main::@15->memcpy_to_vram] - // [338] phi memcpy_to_vram::vdest#2 = (void *)(char *) 16384 [phi:main::@15->memcpy_to_vram#0] -- pvoz1=pvoc1 - lda #<$4000 - sta.z memcpy_to_vram.vdest - lda #>$4000 - sta.z memcpy_to_vram.vdest+1 - jsr memcpy_to_vram - // [76] phi from main::@15 to main::@1 [phi:main::@15->main::@1] - // [76] phi main::t#5 = 1 [phi:main::@15->main::@1#0] -- vbuz1=vbuc1 - lda #1 - sta.z t - // [76] phi main::tilebase#7 = (char *) 16384+$40 [phi:main::@15->main::@1#1] -- pbuz1=pbuc1 - lda #<$4000+$40 - sta.z tilebase - lda #>$4000+$40 - sta.z tilebase+1 - // [76] phi from main::@16 to main::@1 [phi:main::@16->main::@1] - // [76] phi main::t#5 = main::t#1 [phi:main::@16->main::@1#0] -- register_copy - // [76] phi main::tilebase#7 = main::tilebase#2 [phi:main::@16->main::@1#1] -- register_copy - // main::@1 - __b1: - // [77] phi from main::@1 to main::@2 [phi:main::@1->main::@2] - // [77] phi main::p#2 = 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1 - ldx #0 - // [77] phi from main::@2 to main::@2 [phi:main::@2->main::@2] - // [77] phi main::p#2 = main::p#1 [phi:main::@2->main::@2#0] -- register_copy - // main::@2 - __b2: - // tiles[p]+=1 - // [78] main::tiles[main::p#2] = main::tiles[main::p#2] + 1 -- pbuc1_derefidx_vbuxx=pbuc1_derefidx_vbuxx_plus_1 - lda tiles,x - inc - sta tiles,x - // for(byte p:0..63) - // [79] main::p#1 = ++ main::p#2 -- vbuxx=_inc_vbuxx - inx - // [80] if(main::p#1!=$40) goto main::@2 -- vbuxx_neq_vbuc1_then_la1 - cpx #$40 - bne __b2 - // main::@3 - // memcpy_to_vram(1, tilebase, tiles, 64) - // [81] memcpy_to_vram::vdest#1 = (void *)main::tilebase#7 -- pvoz1=pvoz2 - lda.z tilebase - sta.z memcpy_to_vram.vdest - lda.z tilebase+1 - sta.z memcpy_to_vram.vdest+1 - // [82] call memcpy_to_vram - // [338] phi from main::@3 to memcpy_to_vram [phi:main::@3->memcpy_to_vram] - // [338] phi memcpy_to_vram::vdest#2 = memcpy_to_vram::vdest#1 [phi:main::@3->memcpy_to_vram#0] -- register_copy - jsr memcpy_to_vram - // main::@16 - // tilebase+=64 - // [83] main::tilebase#2 = main::tilebase#7 + $40 -- pbuz1=pbuz1_plus_vbuc1 - lda #$40 - clc - adc.z tilebase - sta.z tilebase - bcc !+ - inc.z tilebase+1 - !: - // for(byte t:1..255) - // [84] main::t#1 = ++ main::t#5 -- vbuz1=_inc_vbuz1 - inc.z t - // [85] if(main::t#1!=0) goto main::@1 -- vbuz1_neq_0_then_la1 - lda.z t - bne __b1 - // [86] phi from main::@16 to main::@4 [phi:main::@16->main::@4] - // main::@4 - // vera_tile_area(0, 0, 0, 0, 80, 60, 0, 0, 0) - // [87] call vera_tile_area - //vera_tile_area(byte layer, word tileindex, byte x, byte y, byte w, byte h, byte hflip, byte vflip, byte offset) - // [350] phi from main::@4 to vera_tile_area [phi:main::@4->vera_tile_area] - // [350] phi vera_tile_area::w#9 = $50 [phi:main::@4->vera_tile_area#0] -- vbuz1=vbuc1 - lda #$50 - sta.z vera_tile_area.w - // [350] phi vera_tile_area::h#4 = $3c [phi:main::@4->vera_tile_area#1] -- vbuz1=vbuc1 - lda #$3c - sta.z vera_tile_area.h - // [350] phi vera_tile_area::x#3 = 0 [phi:main::@4->vera_tile_area#2] -- vbuz1=vbuc1 - lda #0 - sta.z vera_tile_area.x - // [350] phi vera_tile_area::y#3 = 0 [phi:main::@4->vera_tile_area#3] -- vbuz1=vbuc1 - sta.z vera_tile_area.y - // [350] phi vera_tile_area::tileindex#3 = 0 [phi:main::@4->vera_tile_area#4] -- vwuz1=vbuc1 - sta.z vera_tile_area.tileindex - sta.z vera_tile_area.tileindex+1 - jsr vera_tile_area - // [88] phi from main::@4 to main::@5 [phi:main::@4->main::@5] - // [88] phi main::r#5 = 0 [phi:main::@4->main::@5#0] -- vbuz1=vbuc1 - lda #0 - sta.z r - // [88] phi main::row#9 = 1 [phi:main::@4->main::@5#1] -- vbuz1=vbuc1 - lda #1 - sta.z row - // [88] phi main::tile#10 = 0 [phi:main::@4->main::@5#2] -- vwuz1=vwuc1 - lda #<0 - sta.z tile - sta.z tile+1 - // [88] phi from main::@7 to main::@5 [phi:main::@7->main::@5] - // [88] phi main::r#5 = main::r#1 [phi:main::@7->main::@5#0] -- register_copy - // [88] phi main::row#9 = main::row#1 [phi:main::@7->main::@5#1] -- register_copy - // [88] phi main::tile#10 = main::tile#12 [phi:main::@7->main::@5#2] -- register_copy - // main::@5 - __b5: - // [89] phi from main::@5 to main::@6 [phi:main::@5->main::@6] - // [89] phi main::c#2 = 0 [phi:main::@5->main::@6#0] -- vbuz1=vbuc1 - lda #0 - sta.z c - // [89] phi main::column#2 = 1 [phi:main::@5->main::@6#1] -- vbuxx=vbuc1 - ldx #1 - // [89] phi main::tile#6 = main::tile#10 [phi:main::@5->main::@6#2] -- register_copy - // [89] phi from main::@17 to main::@6 [phi:main::@17->main::@6] - // [89] phi main::c#2 = main::c#1 [phi:main::@17->main::@6#0] -- register_copy - // [89] phi main::column#2 = main::column#1 [phi:main::@17->main::@6#1] -- register_copy - // [89] phi main::tile#6 = main::tile#12 [phi:main::@17->main::@6#2] -- register_copy - // main::@6 - __b6: - // vera_tile_area(0, tile, column, row, 1, 1, 0, 0, 0) - // [90] vera_tile_area::tileindex#1 = main::tile#6 - // [91] vera_tile_area::x#1 = main::column#2 -- vbuz1=vbuxx - stx.z vera_tile_area.x - // [92] vera_tile_area::y#1 = main::row#9 -- vbuz1=vbuz2 - lda.z row - sta.z vera_tile_area.y - // [93] call vera_tile_area - // [350] phi from main::@6 to vera_tile_area [phi:main::@6->vera_tile_area] - // [350] phi vera_tile_area::w#9 = 1 [phi:main::@6->vera_tile_area#0] -- vbuz1=vbuc1 - lda #1 - sta.z vera_tile_area.w - // [350] phi vera_tile_area::h#4 = 1 [phi:main::@6->vera_tile_area#1] -- vbuz1=vbuc1 - sta.z vera_tile_area.h - // [350] phi vera_tile_area::x#3 = vera_tile_area::x#1 [phi:main::@6->vera_tile_area#2] -- register_copy - // [350] phi vera_tile_area::y#3 = vera_tile_area::y#1 [phi:main::@6->vera_tile_area#3] -- register_copy - // [350] phi vera_tile_area::tileindex#3 = vera_tile_area::tileindex#1 [phi:main::@6->vera_tile_area#4] -- register_copy - jsr vera_tile_area - // main::@17 - // column+=2 - // [94] main::column#1 = main::column#2 + 2 -- vbuxx=vbuxx_plus_2 - inx - inx - // tile++; - // [95] main::tile#1 = ++ main::tile#6 -- vwuz1=_inc_vwuz1 - inc.z tile - bne !+ - inc.z tile+1 - !: - // tile &= 0xff - // [96] main::tile#12 = main::tile#1 & $ff -- vwuz1=vwuz1_band_vbuc1 - lda #$ff - and.z tile - sta.z tile - lda #0 - sta.z tile+1 - // for(byte c:0..31) - // [97] main::c#1 = ++ main::c#2 -- vbuz1=_inc_vbuz1 - inc.z c - // [98] if(main::c#1!=$20) goto main::@6 -- vbuz1_neq_vbuc1_then_la1 - lda #$20 - cmp.z c - bne __b6 - // main::@7 - // row += 2 - // [99] main::row#1 = main::row#9 + 2 -- vbuz1=vbuz1_plus_2 - lda.z row - clc - adc #2 - sta.z row - // for(byte r:0..7) - // [100] main::r#1 = ++ main::r#5 -- vbuz1=_inc_vbuz1 - inc.z r - // [101] if(main::r#1!=8) goto main::@5 -- vbuz1_neq_vbuc1_then_la1 - lda #8 - cmp.z r - bne __b5 - // [102] phi from main::@7 to main::@8 [phi:main::@7->main::@8] - // [102] phi main::r1#5 = 0 [phi:main::@7->main::@8#0] -- vbuz1=vbuc1 - lda #0 - sta.z r1 - // [102] phi main::row#11 = $14 [phi:main::@7->main::@8#1] -- vbuz1=vbuc1 - lda #$14 - sta.z row_1 - // [102] phi main::tile#11 = 0 [phi:main::@7->main::@8#2] -- vwuz1=vbuc1 - lda #<0 - sta.z tile - sta.z tile+1 - // [102] phi from main::@10 to main::@8 [phi:main::@10->main::@8] - // [102] phi main::r1#5 = main::r1#1 [phi:main::@10->main::@8#0] -- register_copy - // [102] phi main::row#11 = main::row#3 [phi:main::@10->main::@8#1] -- register_copy - // [102] phi main::tile#11 = main::tile#13 [phi:main::@10->main::@8#2] -- register_copy - // main::@8 - __b8: - // [103] phi from main::@8 to main::@9 [phi:main::@8->main::@9] - // [103] phi main::c1#2 = 0 [phi:main::@8->main::@9#0] -- vbuxx=vbuc1 - ldx #0 - // [103] phi main::column1#2 = 1 [phi:main::@8->main::@9#1] -- vbuz1=vbuc1 - lda #1 - sta.z column1 - // [103] phi main::tile#8 = main::tile#11 [phi:main::@8->main::@9#2] -- register_copy - // [103] phi from main::@18 to main::@9 [phi:main::@18->main::@9] - // [103] phi main::c1#2 = main::c1#1 [phi:main::@18->main::@9#0] -- register_copy - // [103] phi main::column1#2 = main::column1#1 [phi:main::@18->main::@9#1] -- register_copy - // [103] phi main::tile#8 = main::tile#13 [phi:main::@18->main::@9#2] -- register_copy - // main::@9 - __b9: - // vera_tile_area(0, tile, column, row, 2, 2, 0, 0, 0) - // [104] vera_tile_area::tileindex#2 = main::tile#8 - // [105] vera_tile_area::x#2 = main::column1#2 - // [106] vera_tile_area::y#2 = main::row#11 -- vbuz1=vbuz2 - lda.z row_1 - sta.z vera_tile_area.y - // [107] call vera_tile_area - // [350] phi from main::@9 to vera_tile_area [phi:main::@9->vera_tile_area] - // [350] phi vera_tile_area::w#9 = 2 [phi:main::@9->vera_tile_area#0] -- vbuz1=vbuc1 - lda #2 - sta.z vera_tile_area.w - // [350] phi vera_tile_area::h#4 = 2 [phi:main::@9->vera_tile_area#1] -- vbuz1=vbuc1 - sta.z vera_tile_area.h - // [350] phi vera_tile_area::x#3 = vera_tile_area::x#2 [phi:main::@9->vera_tile_area#2] -- register_copy - // [350] phi vera_tile_area::y#3 = vera_tile_area::y#2 [phi:main::@9->vera_tile_area#3] -- register_copy - // [350] phi vera_tile_area::tileindex#3 = vera_tile_area::tileindex#2 [phi:main::@9->vera_tile_area#4] -- register_copy - jsr vera_tile_area - // main::@18 - // column+=2 - // [108] main::column1#1 = main::column1#2 + 2 -- vbuz1=vbuz1_plus_2 - lda.z column1 - clc - adc #2 - sta.z column1 - // tile++; - // [109] main::tile#4 = ++ main::tile#8 -- vwuz1=_inc_vwuz1 - inc.z tile - bne !+ - inc.z tile+1 - !: - // tile &= 0xff - // [110] main::tile#13 = main::tile#4 & $ff -- vwuz1=vwuz1_band_vbuc1 - lda #$ff - and.z tile - sta.z tile - lda #0 - sta.z tile+1 - // for(byte c:0..31) - // [111] main::c1#1 = ++ main::c1#2 -- vbuxx=_inc_vbuxx - inx - // [112] if(main::c1#1!=$20) goto main::@9 -- vbuxx_neq_vbuc1_then_la1 - cpx #$20 - bne __b9 - // main::@10 - // row += 2 - // [113] main::row#3 = main::row#11 + 2 -- vbuz1=vbuz1_plus_2 - lda.z row_1 - clc - adc #2 - sta.z row_1 - // for(byte r:0..7) - // [114] main::r1#1 = ++ main::r1#5 -- vbuz1=_inc_vbuz1 - inc.z r1 - // [115] if(main::r1#1!=8) goto main::@8 -- vbuz1_neq_vbuc1_then_la1 - lda #8 - cmp.z r1 - bne __b8 - // main::vera_layer_show1 - // *VERA_DC_VIDEO |= vera_layer_enable[layer] - // [116] *VERA_DC_VIDEO = *VERA_DC_VIDEO | *vera_layer_enable -- _deref_pbuc1=_deref_pbuc1_bor__deref_pbuc2 - lda VERA_DC_VIDEO - ora vera_layer_enable - sta VERA_DC_VIDEO - // [117] phi from main::vera_layer_show1 to main::@13 [phi:main::vera_layer_show1->main::@13] - // main::@13 - // gotoxy(0,50) - // [118] call gotoxy - // [204] phi from main::@13 to gotoxy [phi:main::@13->gotoxy] - // [204] phi gotoxy::y#4 = $32 [phi:main::@13->gotoxy#0] -- vbuxx=vbuc1 - ldx #$32 - jsr gotoxy - // [119] phi from main::@13 to main::@19 [phi:main::@13->main::@19] - // main::@19 - // printf("vera in tile mode 8 x 8, color depth 8 bits per pixel.\n") - // [120] call printf_str - // [383] phi from main::@19 to printf_str [phi:main::@19->printf_str] - // [383] phi printf_str::s#10 = main::s [phi:main::@19->printf_str#0] -- pbuz1=pbuc1 - lda #s - sta.z printf_str.s+1 - jsr printf_str - // [121] phi from main::@19 to main::@20 [phi:main::@19->main::@20] - // main::@20 - // printf("in this mode, tiles are 8 pixels wide and 8 pixels tall.\n") - // [122] call printf_str - // [383] phi from main::@20 to printf_str [phi:main::@20->printf_str] - // [383] phi printf_str::s#10 = main::s1 [phi:main::@20->printf_str#0] -- pbuz1=pbuc1 - lda #s1 - sta.z printf_str.s+1 - jsr printf_str - // [123] phi from main::@20 to main::@21 [phi:main::@20->main::@21] - // main::@21 - // printf("each tile can have a variation of 256 colors.\n") - // [124] call printf_str - // [383] phi from main::@21 to printf_str [phi:main::@21->printf_str] - // [383] phi printf_str::s#10 = main::s2 [phi:main::@21->printf_str#0] -- pbuz1=pbuc1 - lda #s2 - sta.z printf_str.s+1 - jsr printf_str - // [125] phi from main::@21 to main::@22 [phi:main::@21->main::@22] - // main::@22 - // printf("the vera palette of 256 colors, can be used by setting the palette\n") - // [126] call printf_str - // [383] phi from main::@22 to printf_str [phi:main::@22->printf_str] - // [383] phi printf_str::s#10 = main::s3 [phi:main::@22->printf_str#0] -- pbuz1=pbuc1 - lda #s3 - sta.z printf_str.s+1 - jsr printf_str - // [127] phi from main::@22 to main::@23 [phi:main::@22->main::@23] - // main::@23 - // printf("offset for each tile.\n") - // [128] call printf_str - // [383] phi from main::@23 to printf_str [phi:main::@23->printf_str] - // [383] phi printf_str::s#10 = main::s4 [phi:main::@23->printf_str#0] -- pbuz1=pbuc1 - lda #s4 - sta.z printf_str.s+1 - jsr printf_str - // [129] phi from main::@23 to main::@24 [phi:main::@23->main::@24] - // main::@24 - // printf("here each column is displaying the same tile, but with different offsets!\n") - // [130] call printf_str - // [383] phi from main::@24 to printf_str [phi:main::@24->printf_str] - // [383] phi printf_str::s#10 = main::s5 [phi:main::@24->printf_str#0] -- pbuz1=pbuc1 - lda #s5 - sta.z printf_str.s+1 - jsr printf_str - // [131] phi from main::@24 to main::@25 [phi:main::@24->main::@25] - // main::@25 - // printf("each offset aligns to multiples of 16 colors in the palette!.\n") - // [132] call printf_str - // [383] phi from main::@25 to printf_str [phi:main::@25->printf_str] - // [383] phi printf_str::s#10 = main::s6 [phi:main::@25->printf_str#0] -- pbuz1=pbuc1 - lda #s6 - sta.z printf_str.s+1 - jsr printf_str - // [133] phi from main::@25 to main::@26 [phi:main::@25->main::@26] - // main::@26 - // printf("however, the first color will always be transparent (black).\n") - // [134] call printf_str - // [383] phi from main::@26 to printf_str [phi:main::@26->printf_str] - // [383] phi printf_str::s#10 = main::s7 [phi:main::@26->printf_str#0] -- pbuz1=pbuc1 - lda #s7 - sta.z printf_str.s+1 - jsr printf_str - // [135] phi from main::@26 main::@27 to main::@11 [phi:main::@26/main::@27->main::@11] - // main::@11 - __b11: - // kbhit() - // [136] call kbhit - jsr kbhit - // [137] kbhit::return#2 = kbhit::return#1 - // main::@27 - // [138] main::$25 = kbhit::return#2 - // while(!kbhit()) - // [139] if(0==main::$25) goto main::@11 -- 0_eq_vbuaa_then_la1 - cmp #0 - beq __b11 - // main::@return - // } - // [140] return - rts - .segment Data - tiles: .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - s: .text @"vera in tile mode 8 x 8, color depth 8 bits per pixel.\n" - .byte 0 - s1: .text @"in this mode, tiles are 8 pixels wide and 8 pixels tall.\n" - .byte 0 - s2: .text @"each tile can have a variation of 256 colors.\n" - .byte 0 - s3: .text @"the vera palette of 256 colors, can be used by setting the palette\n" - .byte 0 - s4: .text @"offset for each tile.\n" - .byte 0 - s5: .text @"here each column is displaying the same tile, but with different offsets!\n" - .byte 0 - s6: .text @"each offset aligns to multiples of 16 colors in the palette!.\n" - .byte 0 - s7: .text @"however, the first color will always be transparent (black).\n" - .byte 0 -} -.segment Code - // vera_layer_mode_text -// Set a vera layer in text mode and configure the: -// - layer: Value of 0 or 1. -// - mapbase_address: A dword typed address (4 bytes), that specifies the full address of the map base. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective mapbase vera register. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// - tilebase_address: A dword typed address (4 bytes), that specifies the base address of the tile map. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective tilebase vera register. -// Note that the resulting vera register holds only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// - mapwidth: The width of the map in number of tiles. -// - mapheight: The height of the map in number of tiles. -// - tilewidth: The width of a tile, which can be 8 or 16 pixels. -// - tileheight: The height of a tile, which can be 8 or 16 pixels. -// - color_mode: The color mode, which can be 16 or 256. -// void vera_layer_mode_text(char layer, unsigned long mapbase_address, unsigned long tilebase_address, unsigned int mapwidth, unsigned int mapheight, char tilewidth, char tileheight, unsigned int color_mode) -vera_layer_mode_text: { - .const mapbase_address = 0 - .const tilebase_address = $f800 - .const mapwidth = $80 - .const mapheight = $40 - .const tilewidth = 8 - .const tileheight = 8 - .label layer = 1 - // vera_layer_mode_tile( layer, mapbase_address, tilebase_address, mapwidth, mapheight, tilewidth, tileheight, 1 ) - // [142] call vera_layer_mode_tile - // [268] phi from vera_layer_mode_text to vera_layer_mode_tile [phi:vera_layer_mode_text->vera_layer_mode_tile] - // [268] phi vera_layer_mode_tile::tileheight#10 = vera_layer_mode_text::tileheight#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#0] -- vbuz1=vbuc1 - lda #tileheight - sta.z vera_layer_mode_tile.tileheight - // [268] phi vera_layer_mode_tile::tilewidth#10 = vera_layer_mode_text::tilewidth#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#1] -- vbuz1=vbuc1 - lda #tilewidth - sta.z vera_layer_mode_tile.tilewidth - // [268] phi vera_layer_mode_tile::tilebase_address#10 = vera_layer_mode_text::tilebase_address#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#2] -- vduz1=vduc1 - lda #tilebase_address - sta.z vera_layer_mode_tile.tilebase_address_1+1 - lda #>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+2 - lda #>tilebase_address>>$10 - sta.z vera_layer_mode_tile.tilebase_address_1+3 - // [268] phi vera_layer_mode_tile::mapbase_address#10 = vera_layer_mode_text::mapbase_address#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#3] -- vduz1=vduc1 - lda #mapbase_address - sta.z vera_layer_mode_tile.mapbase_address_1+1 - lda #>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+2 - lda #>mapbase_address>>$10 - sta.z vera_layer_mode_tile.mapbase_address_1+3 - // [268] phi vera_layer_mode_tile::mapheight#10 = vera_layer_mode_text::mapheight#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#4] -- vwuz1=vwuc1 - lda #mapheight - sta.z vera_layer_mode_tile.mapheight+1 - // [268] phi vera_layer_mode_tile::layer#10 = vera_layer_mode_text::layer#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#5] -- vbuz1=vbuc1 - lda #layer - sta.z vera_layer_mode_tile.layer - // [268] phi vera_layer_mode_tile::mapwidth#10 = vera_layer_mode_text::mapwidth#0 [phi:vera_layer_mode_text->vera_layer_mode_tile#6] -- vwuz1=vwuc1 - lda #mapwidth - sta.z vera_layer_mode_tile.mapwidth+1 - // [268] phi vera_layer_mode_tile::color_depth#2 = 1 [phi:vera_layer_mode_text->vera_layer_mode_tile#7] -- vbuxx=vbuc1 - ldx #1 - jsr vera_layer_mode_tile - // [143] phi from vera_layer_mode_text to vera_layer_mode_text::@1 [phi:vera_layer_mode_text->vera_layer_mode_text::@1] - // vera_layer_mode_text::@1 - // vera_layer_set_text_color_mode( layer, VERA_LAYER_CONFIG_16C ) - // [144] call vera_layer_set_text_color_mode - jsr vera_layer_set_text_color_mode - // vera_layer_mode_text::@return - // } - // [145] return - rts -} - // screensize -// Return the current screen size. -// void screensize(char *x, char *y) -screensize: { - .label x = conio_screen_width - .label y = conio_screen_height - // char hscale = (*VERA_DC_HSCALE) >> 7 - // [146] screensize::hscale#0 = *VERA_DC_HSCALE >> 7 -- vbuaa=_deref_pbuc1_ror_7 - // VERA returns in VERA_DC_HSCALE the value of 128 when 80 columns is used in text mode, - // and the value of 64 when 40 columns is used in text mode. - // Basically, 40 columns mode in the VERA is a double scan mode. - // Same for the VERA_DC_VSCALE mode, but then the subdivision is 60 or 30 rows. - // I still need to test the other modes, but this will suffice for now for the pure text modes. - lda VERA_DC_HSCALE - rol - rol - and #1 - // 40 << hscale - // [147] screensize::$1 = $28 << screensize::hscale#0 -- vbuaa=vbuc1_rol_vbuaa - tay - lda #$28 - cpy #0 - beq !e+ - !: - asl - dey - bne !- - !e: - // *x = 40 << hscale - // [148] *screensize::x#0 = screensize::$1 -- _deref_pbuc1=vbuaa - sta.z x - // char vscale = (*VERA_DC_VSCALE) >> 7 - // [149] screensize::vscale#0 = *VERA_DC_VSCALE >> 7 -- vbuaa=_deref_pbuc1_ror_7 - lda VERA_DC_VSCALE - rol - rol - and #1 - // 30 << vscale - // [150] screensize::$3 = $1e << screensize::vscale#0 -- vbuaa=vbuc1_rol_vbuaa - tay - lda #$1e - cpy #0 - beq !e+ - !: - asl - dey - bne !- - !e: - // *y = 30 << vscale - // [151] *screensize::y#0 = screensize::$3 -- _deref_pbuc1=vbuaa - sta.z y - // screensize::@return - // } - // [152] return - rts -} - // screenlayer -// Set the layer with which the conio will interact. -// - layer: value of 0 or 1. -// void screenlayer(char layer) -screenlayer: { - .const layer = 1 - .label __2 = $f - .label __4 = $37 - .label __5 = $2b - .label vera_layer_get_width1_config = $21 - .label vera_layer_get_width1_return = $f - .label vera_layer_get_height1_config = $2d - .label vera_layer_get_height1_return = $2b - // conio_screen_layer = layer - // [153] conio_screen_layer = screenlayer::layer#0 -- vbuz1=vbuc1 - lda #layer - sta.z conio_screen_layer - // vera_layer_get_mapbase_bank(conio_screen_layer) - // [154] vera_layer_get_mapbase_bank::layer#0 = conio_screen_layer -- vbuxx=vbuz1 - tax - // [155] call vera_layer_get_mapbase_bank - jsr vera_layer_get_mapbase_bank - // [156] vera_layer_get_mapbase_bank::return#2 = vera_layer_get_mapbase_bank::return#0 - // screenlayer::@3 - // [157] CONIO_SCREEN_BANK#11 = vera_layer_get_mapbase_bank::return#2 -- vbuz1=vbuaa - sta.z CONIO_SCREEN_BANK - // vera_layer_get_mapbase_offset(conio_screen_layer) - // [158] vera_layer_get_mapbase_offset::layer#0 = conio_screen_layer -- vbuaa=vbuz1 - lda.z conio_screen_layer - // [159] call vera_layer_get_mapbase_offset - jsr vera_layer_get_mapbase_offset - // [160] vera_layer_get_mapbase_offset::return#2 = vera_layer_get_mapbase_offset::return#0 - // screenlayer::@4 - // [161] CONIO_SCREEN_TEXT#13 = vera_layer_get_mapbase_offset::return#2 -- vwuz1=vwuz2 - lda.z vera_layer_get_mapbase_offset.return - sta.z CONIO_SCREEN_TEXT - lda.z vera_layer_get_mapbase_offset.return+1 - sta.z CONIO_SCREEN_TEXT+1 - // vera_layer_get_width(conio_screen_layer) - // [162] screenlayer::vera_layer_get_width1_layer#0 = conio_screen_layer -- vbuaa=vbuz1 - lda.z conio_screen_layer - // screenlayer::vera_layer_get_width1 - // byte* config = vera_layer_config[layer] - // [163] screenlayer::vera_layer_get_width1_$2 = screenlayer::vera_layer_get_width1_layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [164] screenlayer::vera_layer_get_width1_config#0 = vera_layer_config[screenlayer::vera_layer_get_width1_$2] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_config,y - sta.z vera_layer_get_width1_config - lda vera_layer_config+1,y - sta.z vera_layer_get_width1_config+1 - // *config & VERA_LAYER_WIDTH_MASK - // [165] screenlayer::vera_layer_get_width1_$0 = *screenlayer::vera_layer_get_width1_config#0 & VERA_LAYER_WIDTH_MASK -- vbuaa=_deref_pbuz1_band_vbuc1 - lda #VERA_LAYER_WIDTH_MASK - ldy #0 - and (vera_layer_get_width1_config),y - // (*config & VERA_LAYER_WIDTH_MASK) >> 4 - // [166] screenlayer::vera_layer_get_width1_$1 = screenlayer::vera_layer_get_width1_$0 >> 4 -- vbuaa=vbuaa_ror_4 - lsr - lsr - lsr - lsr - // return VERA_LAYER_WIDTH[ (*config & VERA_LAYER_WIDTH_MASK) >> 4]; - // [167] screenlayer::vera_layer_get_width1_$3 = screenlayer::vera_layer_get_width1_$1 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [168] screenlayer::vera_layer_get_width1_return#0 = VERA_LAYER_WIDTH[screenlayer::vera_layer_get_width1_$3] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda VERA_LAYER_WIDTH,y - sta.z vera_layer_get_width1_return - lda VERA_LAYER_WIDTH+1,y - sta.z vera_layer_get_width1_return+1 - // screenlayer::vera_layer_get_width1_@return - // } - // [169] screenlayer::vera_layer_get_width1_return#1 = screenlayer::vera_layer_get_width1_return#0 - // screenlayer::@1 - // vera_layer_get_width(conio_screen_layer) - // [170] screenlayer::$2 = screenlayer::vera_layer_get_width1_return#1 - // conio_width = vera_layer_get_width(conio_screen_layer) - // [171] conio_width = screenlayer::$2 -- vwuz1=vwuz2 - lda.z __2 - sta.z conio_width - lda.z __2+1 - sta.z conio_width+1 - // vera_layer_get_rowshift(conio_screen_layer) - // [172] vera_layer_get_rowshift::layer#0 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [173] call vera_layer_get_rowshift - jsr vera_layer_get_rowshift - // [174] vera_layer_get_rowshift::return#2 = vera_layer_get_rowshift::return#0 - // screenlayer::@5 - // [175] screenlayer::$3 = vera_layer_get_rowshift::return#2 - // conio_rowshift = vera_layer_get_rowshift(conio_screen_layer) - // [176] conio_rowshift = screenlayer::$3 -- vbuz1=vbuaa - sta.z conio_rowshift - // vera_layer_get_rowskip(conio_screen_layer) - // [177] vera_layer_get_rowskip::layer#0 = conio_screen_layer -- vbuaa=vbuz1 - lda.z conio_screen_layer - // [178] call vera_layer_get_rowskip - jsr vera_layer_get_rowskip - // [179] vera_layer_get_rowskip::return#2 = vera_layer_get_rowskip::return#0 - // screenlayer::@6 - // [180] screenlayer::$4 = vera_layer_get_rowskip::return#2 - // conio_rowskip = vera_layer_get_rowskip(conio_screen_layer) - // [181] conio_rowskip = screenlayer::$4 -- vwuz1=vwuz2 - lda.z __4 - sta.z conio_rowskip - lda.z __4+1 - sta.z conio_rowskip+1 - // vera_layer_get_height(conio_screen_layer) - // [182] screenlayer::vera_layer_get_height1_layer#0 = conio_screen_layer -- vbuaa=vbuz1 - lda.z conio_screen_layer - // screenlayer::vera_layer_get_height1 - // byte* config = vera_layer_config[layer] - // [183] screenlayer::vera_layer_get_height1_$2 = screenlayer::vera_layer_get_height1_layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [184] screenlayer::vera_layer_get_height1_config#0 = vera_layer_config[screenlayer::vera_layer_get_height1_$2] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_config,y - sta.z vera_layer_get_height1_config - lda vera_layer_config+1,y - sta.z vera_layer_get_height1_config+1 - // *config & VERA_LAYER_HEIGHT_MASK - // [185] screenlayer::vera_layer_get_height1_$0 = *screenlayer::vera_layer_get_height1_config#0 & VERA_LAYER_HEIGHT_MASK -- vbuaa=_deref_pbuz1_band_vbuc1 - lda #VERA_LAYER_HEIGHT_MASK - ldy #0 - and (vera_layer_get_height1_config),y - // (*config & VERA_LAYER_HEIGHT_MASK) >> 6 - // [186] screenlayer::vera_layer_get_height1_$1 = screenlayer::vera_layer_get_height1_$0 >> 6 -- vbuaa=vbuaa_ror_6 - rol - rol - rol - and #3 - // return VERA_LAYER_HEIGHT[ (*config & VERA_LAYER_HEIGHT_MASK) >> 6]; - // [187] screenlayer::vera_layer_get_height1_$3 = screenlayer::vera_layer_get_height1_$1 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [188] screenlayer::vera_layer_get_height1_return#0 = VERA_LAYER_HEIGHT[screenlayer::vera_layer_get_height1_$3] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda VERA_LAYER_HEIGHT,y - sta.z vera_layer_get_height1_return - lda VERA_LAYER_HEIGHT+1,y - sta.z vera_layer_get_height1_return+1 - // screenlayer::vera_layer_get_height1_@return - // } - // [189] screenlayer::vera_layer_get_height1_return#1 = screenlayer::vera_layer_get_height1_return#0 - // screenlayer::@2 - // vera_layer_get_height(conio_screen_layer) - // [190] screenlayer::$5 = screenlayer::vera_layer_get_height1_return#1 - // conio_height = vera_layer_get_height(conio_screen_layer) - // [191] conio_height = screenlayer::$5 -- vwuz1=vwuz2 - lda.z __5 - sta.z conio_height - lda.z __5+1 - sta.z conio_height+1 - // screenlayer::@return - // } - // [192] return - rts -} - // vera_layer_set_textcolor -// Set the front color for text output. The old front text color setting is returned. -// - layer: Value of 0 or 1. -// - color: a 4 bit value ( decimal between 0 and 15) when the VERA works in 16x16 color text mode. -// An 8 bit value (decimal between 0 and 255) when the VERA works in 256 text mode. -// Note that on the VERA, the transparent color has value 0. -// char vera_layer_set_textcolor(__register(X) char layer, char color) -vera_layer_set_textcolor: { - // vera_layer_textcolor[layer] = color - // [194] vera_layer_textcolor[vera_layer_set_textcolor::layer#2] = WHITE -- pbuc1_derefidx_vbuxx=vbuc2 - lda #WHITE - sta vera_layer_textcolor,x - // vera_layer_set_textcolor::@return - // } - // [195] return - rts -} - // vera_layer_set_backcolor -// Set the back color for text output. The old back text color setting is returned. -// - layer: Value of 0 or 1. -// - color: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// char vera_layer_set_backcolor(__register(X) char layer, __register(A) char color) -vera_layer_set_backcolor: { - // vera_layer_backcolor[layer] = color - // [197] vera_layer_backcolor[vera_layer_set_backcolor::layer#2] = vera_layer_set_backcolor::color#2 -- pbuc1_derefidx_vbuxx=vbuaa - sta vera_layer_backcolor,x - // vera_layer_set_backcolor::@return - // } - // [198] return - rts -} - // vera_layer_set_mapbase -// Set the base of the map layer with which the conio will interact. -// - layer: Value of 0 or 1. -// - mapbase: Specifies the base address of the tile map. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// void vera_layer_set_mapbase(__register(A) char layer, __register(X) char mapbase) -vera_layer_set_mapbase: { - .label addr = $21 - // byte* addr = vera_layer_mapbase[layer] - // [200] vera_layer_set_mapbase::$0 = vera_layer_set_mapbase::layer#3 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [201] vera_layer_set_mapbase::addr#0 = vera_layer_mapbase[vera_layer_set_mapbase::$0] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_mapbase,y - sta.z addr - lda vera_layer_mapbase+1,y - sta.z addr+1 - // *addr = mapbase - // [202] *vera_layer_set_mapbase::addr#0 = vera_layer_set_mapbase::mapbase#3 -- _deref_pbuz1=vbuxx - txa - ldy #0 - sta (addr),y - // vera_layer_set_mapbase::@return - // } - // [203] return - rts -} - // gotoxy -// Set the cursor to the specified position -// void gotoxy(char x, __register(X) char y) -gotoxy: { - .label __6 = $f - .label line_offset = $f - // if(y>CONIO_HEIGHT) - // [205] if(gotoxy::y#4<=conio_screen_height) goto gotoxy::@4 -- vbuxx_le_vbuz1_then_la1 - lda.z conio_screen_height - stx.z $ff - cmp.z $ff - bcs __b1 - // [207] phi from gotoxy to gotoxy::@1 [phi:gotoxy->gotoxy::@1] - // [207] phi gotoxy::y#5 = 0 [phi:gotoxy->gotoxy::@1#0] -- vbuxx=vbuc1 - ldx #0 - // [206] phi from gotoxy to gotoxy::@4 [phi:gotoxy->gotoxy::@4] - // gotoxy::@4 - // [207] phi from gotoxy::@4 to gotoxy::@1 [phi:gotoxy::@4->gotoxy::@1] - // [207] phi gotoxy::y#5 = gotoxy::y#4 [phi:gotoxy::@4->gotoxy::@1#0] -- register_copy - // gotoxy::@1 - __b1: - // if(x>=CONIO_WIDTH) - // [208] if(0gotoxy::@3] - // gotoxy::@3 - // gotoxy::@2 - // conio_cursor_x[conio_screen_layer] = x - // [210] conio_cursor_x[conio_screen_layer] = 0 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #0 - ldy.z conio_screen_layer - sta conio_cursor_x,y - // conio_cursor_y[conio_screen_layer] = y - // [211] conio_cursor_y[conio_screen_layer] = gotoxy::y#5 -- pbuc1_derefidx_vbuz1=vbuxx - txa - sta conio_cursor_y,y - // unsigned int line_offset = (unsigned int)y << conio_rowshift - // [212] gotoxy::$6 = (unsigned int)gotoxy::y#5 -- vwuz1=_word_vbuxx - txa - sta.z __6 - lda #0 - sta.z __6+1 - // [213] gotoxy::line_offset#0 = gotoxy::$6 << conio_rowshift -- vwuz1=vwuz1_rol_vbuz2 - ldy.z conio_rowshift - beq !e+ - !: - asl.z line_offset - rol.z line_offset+1 - dey - bne !- - !e: - // conio_line_text[conio_screen_layer] = line_offset - // [214] gotoxy::$5 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [215] conio_line_text[gotoxy::$5] = gotoxy::line_offset#0 -- pwuc1_derefidx_vbuaa=vwuz1 - tay - lda.z line_offset - sta conio_line_text,y - lda.z line_offset+1 - sta conio_line_text+1,y - // gotoxy::@return - // } - // [216] return - rts -} - // vera_layer_get_color -// Get the text and back color for text output in 16 color mode. -// - layer: Value of 0 or 1. -// - return: an 8 bit value with bit 7:4 containing the back color and bit 3:0 containing the front color. -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_color(__register(X) char layer) -vera_layer_get_color: { - .label addr = 8 - // byte* addr = vera_layer_config[layer] - // [218] vera_layer_get_color::$3 = vera_layer_get_color::layer#2 << 1 -- vbuaa=vbuxx_rol_1 - txa - asl - // [219] vera_layer_get_color::addr#0 = vera_layer_config[vera_layer_get_color::$3] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_config,y - sta.z addr - lda vera_layer_config+1,y - sta.z addr+1 - // *addr & VERA_LAYER_CONFIG_256C - // [220] vera_layer_get_color::$0 = *vera_layer_get_color::addr#0 & VERA_LAYER_CONFIG_256C -- vbuaa=_deref_pbuz1_band_vbuc1 - lda #VERA_LAYER_CONFIG_256C - ldy #0 - and (addr),y - // if( *addr & VERA_LAYER_CONFIG_256C ) - // [221] if(0!=vera_layer_get_color::$0) goto vera_layer_get_color::@1 -- 0_neq_vbuaa_then_la1 - cmp #0 - bne __b1 - // vera_layer_get_color::@2 - // vera_layer_backcolor[layer] << 4 - // [222] vera_layer_get_color::$1 = vera_layer_backcolor[vera_layer_get_color::layer#2] << 4 -- vbuaa=pbuc1_derefidx_vbuxx_rol_4 - lda vera_layer_backcolor,x - asl - asl - asl - asl - // return ((vera_layer_backcolor[layer] << 4) | vera_layer_textcolor[layer]); - // [223] vera_layer_get_color::return#1 = vera_layer_get_color::$1 | vera_layer_textcolor[vera_layer_get_color::layer#2] -- vbuaa=vbuaa_bor_pbuc1_derefidx_vbuxx - ora vera_layer_textcolor,x - // [224] phi from vera_layer_get_color::@1 vera_layer_get_color::@2 to vera_layer_get_color::@return [phi:vera_layer_get_color::@1/vera_layer_get_color::@2->vera_layer_get_color::@return] - // [224] phi vera_layer_get_color::return#2 = vera_layer_get_color::return#0 [phi:vera_layer_get_color::@1/vera_layer_get_color::@2->vera_layer_get_color::@return#0] -- register_copy - // vera_layer_get_color::@return - // } - // [225] return - rts - // vera_layer_get_color::@1 - __b1: - // return (vera_layer_textcolor[layer]); - // [226] vera_layer_get_color::return#0 = vera_layer_textcolor[vera_layer_get_color::layer#2] -- vbuaa=pbuc1_derefidx_vbuxx - lda vera_layer_textcolor,x - rts -} - // cputln -// Print a newline -cputln: { - .label temp = 8 - // word temp = conio_line_text[conio_screen_layer] - // [227] cputln::$2 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [228] cputln::temp#0 = conio_line_text[cputln::$2] -- vwuz1=pwuc1_derefidx_vbuaa - // TODO: This needs to be optimized! other variations don't compile because of sections not available! - tay - lda conio_line_text,y - sta.z temp - lda conio_line_text+1,y - sta.z temp+1 - // temp += conio_rowskip - // [229] cputln::temp#1 = cputln::temp#0 + conio_rowskip -- vwuz1=vwuz1_plus_vwuz2 - clc - lda.z temp - adc.z conio_rowskip - sta.z temp - lda.z temp+1 - adc.z conio_rowskip+1 - sta.z temp+1 - // conio_line_text[conio_screen_layer] = temp - // [230] cputln::$3 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [231] conio_line_text[cputln::$3] = cputln::temp#1 -- pwuc1_derefidx_vbuaa=vwuz1 - tay - lda.z temp - sta conio_line_text,y - lda.z temp+1 - sta conio_line_text+1,y - // conio_cursor_x[conio_screen_layer] = 0 - // [232] conio_cursor_x[conio_screen_layer] = 0 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #0 - ldy.z conio_screen_layer - sta conio_cursor_x,y - // conio_cursor_y[conio_screen_layer]++; - // [233] conio_cursor_y[conio_screen_layer] = ++ conio_cursor_y[conio_screen_layer] -- pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1 - ldx.z conio_screen_layer - inc conio_cursor_y,x - // cscroll() - // [234] call cscroll - jsr cscroll - // cputln::@return - // } - // [235] return - rts -} - // clrscr -// clears the screen and moves the cursor to the upper left-hand corner of the screen. -clrscr: { - .label __1 = $53 - .label line_text = 2 - .label color = $1f - // char* line_text = CONIO_SCREEN_TEXT - // [236] clrscr::line_text#0 = (char *)CONIO_SCREEN_TEXT#13 -- pbuz1=pbuz2 - lda.z CONIO_SCREEN_TEXT - sta.z line_text - lda.z CONIO_SCREEN_TEXT+1 - sta.z line_text+1 - // vera_layer_get_backcolor(conio_screen_layer) - // [237] vera_layer_get_backcolor::layer#0 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [238] call vera_layer_get_backcolor - jsr vera_layer_get_backcolor - // [239] vera_layer_get_backcolor::return#2 = vera_layer_get_backcolor::return#0 - // clrscr::@7 - // [240] clrscr::$0 = vera_layer_get_backcolor::return#2 - // vera_layer_get_backcolor(conio_screen_layer) << 4 - // [241] clrscr::$1 = clrscr::$0 << 4 -- vbuz1=vbuaa_rol_4 - asl - asl - asl - asl - sta.z __1 - // vera_layer_get_textcolor(conio_screen_layer) - // [242] vera_layer_get_textcolor::layer#0 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [243] call vera_layer_get_textcolor - jsr vera_layer_get_textcolor - // [244] vera_layer_get_textcolor::return#2 = vera_layer_get_textcolor::return#0 - // clrscr::@8 - // [245] clrscr::$2 = vera_layer_get_textcolor::return#2 - // char color = ( vera_layer_get_backcolor(conio_screen_layer) << 4 ) | vera_layer_get_textcolor(conio_screen_layer) - // [246] clrscr::color#0 = clrscr::$1 | clrscr::$2 -- vbuz1=vbuz2_bor_vbuaa - ora.z __1 - sta.z color - // [247] phi from clrscr::@8 to clrscr::@1 [phi:clrscr::@8->clrscr::@1] - // [247] phi clrscr::line_text#2 = clrscr::line_text#0 [phi:clrscr::@8->clrscr::@1#0] -- register_copy - // [247] phi clrscr::l#2 = 0 [phi:clrscr::@8->clrscr::@1#1] -- vbuxx=vbuc1 - ldx #0 - // clrscr::@1 - __b1: - // for( char l=0;lclrscr::@4] - // [261] phi clrscr::c#2 = 0 [phi:clrscr::@2->clrscr::@4#0] -- vbuyy=vbuc1 - ldy #0 - // clrscr::@4 - __b4: - // for( char c=0;cclrscr::@1] - // [247] phi clrscr::line_text#2 = clrscr::line_text#1 [phi:clrscr::@6->clrscr::@1#0] -- register_copy - // [247] phi clrscr::l#2 = clrscr::l#1 [phi:clrscr::@6->clrscr::@1#1] -- register_copy - jmp __b1 - // clrscr::@5 - __b5: - // *VERA_DATA0 = ' ' - // [265] *VERA_DATA0 = ' ' -- _deref_pbuc1=vbuc2 - lda #' ' - sta VERA_DATA0 - // *VERA_DATA0 = color - // [266] *VERA_DATA0 = clrscr::color#0 -- _deref_pbuc1=vbuz1 - lda.z color - sta VERA_DATA0 - // for( char c=0;cclrscr::@4] - // [261] phi clrscr::c#2 = clrscr::c#1 [phi:clrscr::@5->clrscr::@4#0] -- register_copy - jmp __b4 -} - // vera_layer_mode_tile -// Set a vera layer in tile mode and configure the: -// - layer: Value of 0 or 1. -// - mapbase_address: A dword typed address (4 bytes), that specifies the full address of the map base. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective mapbase vera register. -// Note that the register only specifies bits 16:9 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 512 bytes. -// - tilebase_address: A dword typed address (4 bytes), that specifies the base address of the tile map. -// The function does the translation from the dword that contains the 17 bit address, -// to the respective tilebase vera register. -// Note that the resulting vera register holds only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// - mapwidth: The width of the map in number of tiles. -// - mapheight: The height of the map in number of tiles. -// - tilewidth: The width of a tile, which can be 8 or 16 pixels. -// - tileheight: The height of a tile, which can be 8 or 16 pixels. -// - color_depth: The color depth in bits per pixel (BPP), which can be 1, 2, 4 or 8. -// void vera_layer_mode_tile(__zp($3e) char layer, __zp($2f) unsigned long mapbase_address, __zp($33) unsigned long tilebase_address, __zp($f) unsigned int mapwidth, __zp($44) unsigned int mapheight, __zp($54) char tilewidth, __zp($55) char tileheight, __register(X) char color_depth) -vera_layer_mode_tile: { - .label __1 = $37 - .label __6 = $2d - .label __17 = $3d - .label __18 = $3c - .label mapbase_address = $2f - .label tilebase_address = $33 - .label mapwidth = $f - .label layer = $3e - .label mapheight = $44 - .label mapbase_address_1 = $4a - .label tilebase_address_1 = $4e - .label tilewidth = $54 - .label tileheight = $55 - // case 1: - // config |= VERA_LAYER_COLOR_DEPTH_1BPP; - // break; - // [269] if(vera_layer_mode_tile::color_depth#2==1) goto vera_layer_mode_tile::@5 -- vbuxx_eq_vbuc1_then_la1 - cpx #1 - beq __b1 - // vera_layer_mode_tile::@1 - // case 2: - // config |= VERA_LAYER_COLOR_DEPTH_2BPP; - // break; - // [270] if(vera_layer_mode_tile::color_depth#2==2) goto vera_layer_mode_tile::@5 -- vbuxx_eq_vbuc1_then_la1 - cpx #2 - beq __b2 - // vera_layer_mode_tile::@2 - // case 4: - // config |= VERA_LAYER_COLOR_DEPTH_4BPP; - // break; - // [271] if(vera_layer_mode_tile::color_depth#2==4) goto vera_layer_mode_tile::@5 -- vbuxx_eq_vbuc1_then_la1 - cpx #4 - beq __b3 - // vera_layer_mode_tile::@3 - // case 8: - // config |= VERA_LAYER_COLOR_DEPTH_8BPP; - // break; - // [272] if(vera_layer_mode_tile::color_depth#2!=8) goto vera_layer_mode_tile::@5 -- vbuxx_neq_vbuc1_then_la1 - cpx #8 - bne __b4 - // [273] phi from vera_layer_mode_tile::@3 to vera_layer_mode_tile::@4 [phi:vera_layer_mode_tile::@3->vera_layer_mode_tile::@4] - // vera_layer_mode_tile::@4 - // [274] phi from vera_layer_mode_tile::@4 to vera_layer_mode_tile::@5 [phi:vera_layer_mode_tile::@4->vera_layer_mode_tile::@5] - // [274] phi vera_layer_mode_tile::config#17 = VERA_LAYER_COLOR_DEPTH_8BPP [phi:vera_layer_mode_tile::@4->vera_layer_mode_tile::@5#0] -- vbuxx=vbuc1 - ldx #VERA_LAYER_COLOR_DEPTH_8BPP - jmp __b5 - // [274] phi from vera_layer_mode_tile to vera_layer_mode_tile::@5 [phi:vera_layer_mode_tile->vera_layer_mode_tile::@5] - __b1: - // [274] phi vera_layer_mode_tile::config#17 = VERA_LAYER_COLOR_DEPTH_1BPP [phi:vera_layer_mode_tile->vera_layer_mode_tile::@5#0] -- vbuxx=vbuc1 - ldx #VERA_LAYER_COLOR_DEPTH_1BPP - jmp __b5 - // [274] phi from vera_layer_mode_tile::@1 to vera_layer_mode_tile::@5 [phi:vera_layer_mode_tile::@1->vera_layer_mode_tile::@5] - __b2: - // [274] phi vera_layer_mode_tile::config#17 = VERA_LAYER_COLOR_DEPTH_2BPP [phi:vera_layer_mode_tile::@1->vera_layer_mode_tile::@5#0] -- vbuxx=vbuc1 - ldx #VERA_LAYER_COLOR_DEPTH_2BPP - jmp __b5 - // [274] phi from vera_layer_mode_tile::@2 to vera_layer_mode_tile::@5 [phi:vera_layer_mode_tile::@2->vera_layer_mode_tile::@5] - __b3: - // [274] phi vera_layer_mode_tile::config#17 = VERA_LAYER_COLOR_DEPTH_4BPP [phi:vera_layer_mode_tile::@2->vera_layer_mode_tile::@5#0] -- vbuxx=vbuc1 - ldx #VERA_LAYER_COLOR_DEPTH_4BPP - jmp __b5 - // [274] phi from vera_layer_mode_tile::@3 to vera_layer_mode_tile::@5 [phi:vera_layer_mode_tile::@3->vera_layer_mode_tile::@5] - __b4: - // [274] phi vera_layer_mode_tile::config#17 = 0 [phi:vera_layer_mode_tile::@3->vera_layer_mode_tile::@5#0] -- vbuxx=vbuc1 - ldx #0 - // vera_layer_mode_tile::@5 - __b5: - // case 32: - // config |= VERA_LAYER_WIDTH_32; - // vera_layer_rowshift[layer] = 6; - // vera_layer_rowskip[layer] = 64; - // break; - // [275] if(vera_layer_mode_tile::mapwidth#10==$20) goto vera_layer_mode_tile::@9 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapwidth+1 - bne !+ - lda.z mapwidth - cmp #$20 - bne !__b9+ - jmp __b9 - !__b9: - !: - // vera_layer_mode_tile::@6 - // case 64: - // config |= VERA_LAYER_WIDTH_64; - // vera_layer_rowshift[layer] = 7; - // vera_layer_rowskip[layer] = 128; - // break; - // [276] if(vera_layer_mode_tile::mapwidth#10==$40) goto vera_layer_mode_tile::@10 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapwidth+1 - bne !+ - lda.z mapwidth - cmp #$40 - bne !__b10+ - jmp __b10 - !__b10: - !: - // vera_layer_mode_tile::@7 - // case 128: - // config |= VERA_LAYER_WIDTH_128; - // vera_layer_rowshift[layer] = 8; - // vera_layer_rowskip[layer] = 256; - // break; - // [277] if(vera_layer_mode_tile::mapwidth#10==$80) goto vera_layer_mode_tile::@11 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapwidth+1 - bne !+ - lda.z mapwidth - cmp #$80 - bne !__b11+ - jmp __b11 - !__b11: - !: - // vera_layer_mode_tile::@8 - // case 256: - // config |= VERA_LAYER_WIDTH_256; - // vera_layer_rowshift[layer] = 9; - // vera_layer_rowskip[layer] = 512; - // break; - // [278] if(vera_layer_mode_tile::mapwidth#10!=$100) goto vera_layer_mode_tile::@13 -- vwuz1_neq_vwuc1_then_la1 - lda.z mapwidth+1 - cmp #>$100 - bne __b13 - lda.z mapwidth - cmp #<$100 - bne __b13 - // vera_layer_mode_tile::@12 - // config |= VERA_LAYER_WIDTH_256 - // [279] vera_layer_mode_tile::config#8 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_256 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_WIDTH_256 - tax - // vera_layer_rowshift[layer] = 9 - // [280] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 9 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #9 - ldy.z layer - sta vera_layer_rowshift,y - // vera_layer_rowskip[layer] = 512 - // [281] vera_layer_mode_tile::$14 = vera_layer_mode_tile::layer#10 << 1 -- vbuaa=vbuz1_rol_1 - tya - asl - // [282] vera_layer_rowskip[vera_layer_mode_tile::$14] = $200 -- pwuc1_derefidx_vbuaa=vwuc2 - tay - lda #<$200 - sta vera_layer_rowskip,y - lda #>$200 - sta vera_layer_rowskip+1,y - // [283] phi from vera_layer_mode_tile::@10 vera_layer_mode_tile::@11 vera_layer_mode_tile::@12 vera_layer_mode_tile::@8 vera_layer_mode_tile::@9 to vera_layer_mode_tile::@13 [phi:vera_layer_mode_tile::@10/vera_layer_mode_tile::@11/vera_layer_mode_tile::@12/vera_layer_mode_tile::@8/vera_layer_mode_tile::@9->vera_layer_mode_tile::@13] - // [283] phi vera_layer_mode_tile::config#21 = vera_layer_mode_tile::config#6 [phi:vera_layer_mode_tile::@10/vera_layer_mode_tile::@11/vera_layer_mode_tile::@12/vera_layer_mode_tile::@8/vera_layer_mode_tile::@9->vera_layer_mode_tile::@13#0] -- register_copy - // vera_layer_mode_tile::@13 - __b13: - // case 32: - // config |= VERA_LAYER_HEIGHT_32; - // break; - // [284] if(vera_layer_mode_tile::mapheight#10==$20) goto vera_layer_mode_tile::@20 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$20 - beq __b20 - !: - // vera_layer_mode_tile::@14 - // case 64: - // config |= VERA_LAYER_HEIGHT_64; - // break; - // [285] if(vera_layer_mode_tile::mapheight#10==$40) goto vera_layer_mode_tile::@17 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$40 - bne !__b17+ - jmp __b17 - !__b17: - !: - // vera_layer_mode_tile::@15 - // case 128: - // config |= VERA_LAYER_HEIGHT_128; - // break; - // [286] if(vera_layer_mode_tile::mapheight#10==$80) goto vera_layer_mode_tile::@18 -- vwuz1_eq_vbuc1_then_la1 - lda.z mapheight+1 - bne !+ - lda.z mapheight - cmp #$80 - bne !__b18+ - jmp __b18 - !__b18: - !: - // vera_layer_mode_tile::@16 - // case 256: - // config |= VERA_LAYER_HEIGHT_256; - // break; - // [287] if(vera_layer_mode_tile::mapheight#10!=$100) goto vera_layer_mode_tile::@20 -- vwuz1_neq_vwuc1_then_la1 - lda.z mapheight+1 - cmp #>$100 - bne __b20 - lda.z mapheight - cmp #<$100 - bne __b20 - // vera_layer_mode_tile::@19 - // config |= VERA_LAYER_HEIGHT_256 - // [288] vera_layer_mode_tile::config#12 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_256 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_HEIGHT_256 - tax - // [289] phi from vera_layer_mode_tile::@13 vera_layer_mode_tile::@16 vera_layer_mode_tile::@17 vera_layer_mode_tile::@18 vera_layer_mode_tile::@19 to vera_layer_mode_tile::@20 [phi:vera_layer_mode_tile::@13/vera_layer_mode_tile::@16/vera_layer_mode_tile::@17/vera_layer_mode_tile::@18/vera_layer_mode_tile::@19->vera_layer_mode_tile::@20] - // [289] phi vera_layer_mode_tile::config#25 = vera_layer_mode_tile::config#21 [phi:vera_layer_mode_tile::@13/vera_layer_mode_tile::@16/vera_layer_mode_tile::@17/vera_layer_mode_tile::@18/vera_layer_mode_tile::@19->vera_layer_mode_tile::@20#0] -- register_copy - // vera_layer_mode_tile::@20 - __b20: - // vera_layer_set_config(layer, config) - // [290] vera_layer_set_config::layer#0 = vera_layer_mode_tile::layer#10 -- vbuaa=vbuz1 - lda.z layer - // [291] vera_layer_set_config::config#0 = vera_layer_mode_tile::config#25 - // [292] call vera_layer_set_config - jsr vera_layer_set_config - // vera_layer_mode_tile::@27 - // WORD0(mapbase_address) - // [293] vera_layer_mode_tile::$1 = word0 vera_layer_mode_tile::mapbase_address#10 -- vwuz1=_word0_vduz2 - lda.z mapbase_address_1 - sta.z __1 - lda.z mapbase_address_1+1 - sta.z __1+1 - // vera_mapbase_offset[layer] = WORD0(mapbase_address) - // [294] vera_layer_mode_tile::$17 = vera_layer_mode_tile::layer#10 << 1 -- vbuz1=vbuz2_rol_1 - lda.z layer - asl - sta.z __17 - // [295] vera_mapbase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$1 -- pwuc1_derefidx_vbuz1=vwuz2 - // mapbase - tay - lda.z __1 - sta vera_mapbase_offset,y - lda.z __1+1 - sta vera_mapbase_offset+1,y - // BYTE2(mapbase_address) - // [296] vera_layer_mode_tile::$2 = byte2 vera_layer_mode_tile::mapbase_address#10 -- vbuaa=_byte2_vduz1 - lda.z mapbase_address_1+2 - // vera_mapbase_bank[layer] = BYTE2(mapbase_address) - // [297] vera_mapbase_bank[vera_layer_mode_tile::layer#10] = vera_layer_mode_tile::$2 -- pbuc1_derefidx_vbuz1=vbuaa - ldy.z layer - sta vera_mapbase_bank,y - // vera_mapbase_address[layer] = mapbase_address - // [298] vera_layer_mode_tile::$18 = vera_layer_mode_tile::layer#10 << 2 -- vbuz1=vbuz2_rol_2 - tya - asl - asl - sta.z __18 - // [299] vera_mapbase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::mapbase_address#10 -- pduc1_derefidx_vbuz1=vduz2 - tay - lda.z mapbase_address_1 - sta vera_mapbase_address,y - lda.z mapbase_address_1+1 - sta vera_mapbase_address+1,y - lda.z mapbase_address_1+2 - sta vera_mapbase_address+2,y - lda.z mapbase_address_1+3 - sta vera_mapbase_address+3,y - // mapbase_address = mapbase_address >> 1 - // [300] vera_layer_mode_tile::mapbase_address#0 = vera_layer_mode_tile::mapbase_address#10 >> 1 -- vduz1=vduz2_ror_1 - lsr - sta.z mapbase_address+3 - lda.z mapbase_address_1+2 - ror - sta.z mapbase_address+2 - lda.z mapbase_address_1+1 - ror - sta.z mapbase_address+1 - lda.z mapbase_address_1 - ror - sta.z mapbase_address - // byte mapbase = BYTE1(mapbase_address) - // [301] vera_layer_mode_tile::mapbase#0 = byte1 vera_layer_mode_tile::mapbase_address#0 -- vbuxx=_byte1_vduz1 - ldx.z mapbase_address+1 - // vera_layer_set_mapbase(layer,mapbase) - // [302] vera_layer_set_mapbase::layer#0 = vera_layer_mode_tile::layer#10 -- vbuaa=vbuz1 - lda.z layer - // [303] vera_layer_set_mapbase::mapbase#0 = vera_layer_mode_tile::mapbase#0 - // [304] call vera_layer_set_mapbase - // [199] phi from vera_layer_mode_tile::@27 to vera_layer_set_mapbase [phi:vera_layer_mode_tile::@27->vera_layer_set_mapbase] - // [199] phi vera_layer_set_mapbase::mapbase#3 = vera_layer_set_mapbase::mapbase#0 [phi:vera_layer_mode_tile::@27->vera_layer_set_mapbase#0] -- register_copy - // [199] phi vera_layer_set_mapbase::layer#3 = vera_layer_set_mapbase::layer#0 [phi:vera_layer_mode_tile::@27->vera_layer_set_mapbase#1] -- register_copy - jsr vera_layer_set_mapbase - // vera_layer_mode_tile::@28 - // WORD0(tilebase_address) - // [305] vera_layer_mode_tile::$6 = word0 vera_layer_mode_tile::tilebase_address#10 -- vwuz1=_word0_vduz2 - lda.z tilebase_address_1 - sta.z __6 - lda.z tilebase_address_1+1 - sta.z __6+1 - // vera_tilebase_offset[layer] = WORD0(tilebase_address) - // [306] vera_tilebase_offset[vera_layer_mode_tile::$17] = vera_layer_mode_tile::$6 -- pwuc1_derefidx_vbuz1=vwuz2 - // tilebase - ldy.z __17 - lda.z __6 - sta vera_tilebase_offset,y - lda.z __6+1 - sta vera_tilebase_offset+1,y - // BYTE2(tilebase_address) - // [307] vera_layer_mode_tile::$7 = byte2 vera_layer_mode_tile::tilebase_address#10 -- vbuaa=_byte2_vduz1 - lda.z tilebase_address_1+2 - // vera_tilebase_bank[layer] = BYTE2(tilebase_address) - // [308] vera_tilebase_bank[vera_layer_mode_tile::layer#10] = vera_layer_mode_tile::$7 -- pbuc1_derefidx_vbuz1=vbuaa - ldy.z layer - sta vera_tilebase_bank,y - // vera_tilebase_address[layer] = tilebase_address - // [309] vera_tilebase_address[vera_layer_mode_tile::$18] = vera_layer_mode_tile::tilebase_address#10 -- pduc1_derefidx_vbuz1=vduz2 - ldy.z __18 - lda.z tilebase_address_1 - sta vera_tilebase_address,y - lda.z tilebase_address_1+1 - sta vera_tilebase_address+1,y - lda.z tilebase_address_1+2 - sta vera_tilebase_address+2,y - lda.z tilebase_address_1+3 - sta vera_tilebase_address+3,y - // tilebase_address = tilebase_address >> 1 - // [310] vera_layer_mode_tile::tilebase_address#0 = vera_layer_mode_tile::tilebase_address#10 >> 1 -- vduz1=vduz2_ror_1 - lsr - sta.z tilebase_address+3 - lda.z tilebase_address_1+2 - ror - sta.z tilebase_address+2 - lda.z tilebase_address_1+1 - ror - sta.z tilebase_address+1 - lda.z tilebase_address_1 - ror - sta.z tilebase_address - // byte tilebase = BYTE1(tilebase_address) - // [311] vera_layer_mode_tile::tilebase#0 = byte1 vera_layer_mode_tile::tilebase_address#0 -- vbuaa=_byte1_vduz1 - lda.z tilebase_address+1 - // tilebase &= VERA_LAYER_TILEBASE_MASK - // [312] vera_layer_mode_tile::tilebase#1 = vera_layer_mode_tile::tilebase#0 & VERA_LAYER_TILEBASE_MASK -- vbuxx=vbuaa_band_vbuc1 - and #VERA_LAYER_TILEBASE_MASK - tax - // case 8: - // tilebase |= VERA_TILEBASE_WIDTH_8; - // break; - // [313] if(vera_layer_mode_tile::tilewidth#10==8) goto vera_layer_mode_tile::@23 -- vbuz1_eq_vbuc1_then_la1 - lda #8 - cmp.z tilewidth - beq __b23 - // vera_layer_mode_tile::@21 - // case 16: - // tilebase |= VERA_TILEBASE_WIDTH_16; - // break; - // [314] if(vera_layer_mode_tile::tilewidth#10!=$10) goto vera_layer_mode_tile::@23 -- vbuz1_neq_vbuc1_then_la1 - lda #$10 - cmp.z tilewidth - bne __b23 - // vera_layer_mode_tile::@22 - // tilebase |= VERA_TILEBASE_WIDTH_16 - // [315] vera_layer_mode_tile::tilebase#3 = vera_layer_mode_tile::tilebase#1 | VERA_TILEBASE_WIDTH_16 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_TILEBASE_WIDTH_16 - tax - // [316] phi from vera_layer_mode_tile::@21 vera_layer_mode_tile::@22 vera_layer_mode_tile::@28 to vera_layer_mode_tile::@23 [phi:vera_layer_mode_tile::@21/vera_layer_mode_tile::@22/vera_layer_mode_tile::@28->vera_layer_mode_tile::@23] - // [316] phi vera_layer_mode_tile::tilebase#12 = vera_layer_mode_tile::tilebase#1 [phi:vera_layer_mode_tile::@21/vera_layer_mode_tile::@22/vera_layer_mode_tile::@28->vera_layer_mode_tile::@23#0] -- register_copy - // vera_layer_mode_tile::@23 - __b23: - // case 8: - // tilebase |= VERA_TILEBASE_HEIGHT_8; - // break; - // [317] if(vera_layer_mode_tile::tileheight#10==8) goto vera_layer_mode_tile::@26 -- vbuz1_eq_vbuc1_then_la1 - lda #8 - cmp.z tileheight - beq __b26 - // vera_layer_mode_tile::@24 - // case 16: - // tilebase |= VERA_TILEBASE_HEIGHT_16; - // break; - // [318] if(vera_layer_mode_tile::tileheight#10!=$10) goto vera_layer_mode_tile::@26 -- vbuz1_neq_vbuc1_then_la1 - lda #$10 - cmp.z tileheight - bne __b26 - // vera_layer_mode_tile::@25 - // tilebase |= VERA_TILEBASE_HEIGHT_16 - // [319] vera_layer_mode_tile::tilebase#5 = vera_layer_mode_tile::tilebase#12 | VERA_TILEBASE_HEIGHT_16 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_TILEBASE_HEIGHT_16 - tax - // [320] phi from vera_layer_mode_tile::@23 vera_layer_mode_tile::@24 vera_layer_mode_tile::@25 to vera_layer_mode_tile::@26 [phi:vera_layer_mode_tile::@23/vera_layer_mode_tile::@24/vera_layer_mode_tile::@25->vera_layer_mode_tile::@26] - // [320] phi vera_layer_mode_tile::tilebase#10 = vera_layer_mode_tile::tilebase#12 [phi:vera_layer_mode_tile::@23/vera_layer_mode_tile::@24/vera_layer_mode_tile::@25->vera_layer_mode_tile::@26#0] -- register_copy - // vera_layer_mode_tile::@26 - __b26: - // vera_layer_set_tilebase(layer,tilebase) - // [321] vera_layer_set_tilebase::layer#0 = vera_layer_mode_tile::layer#10 -- vbuaa=vbuz1 - lda.z layer - // [322] vera_layer_set_tilebase::tilebase#0 = vera_layer_mode_tile::tilebase#10 - // [323] call vera_layer_set_tilebase - jsr vera_layer_set_tilebase - // vera_layer_mode_tile::@return - // } - // [324] return - rts - // vera_layer_mode_tile::@18 - __b18: - // config |= VERA_LAYER_HEIGHT_128 - // [325] vera_layer_mode_tile::config#11 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_128 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_HEIGHT_128 - tax - jmp __b20 - // vera_layer_mode_tile::@17 - __b17: - // config |= VERA_LAYER_HEIGHT_64 - // [326] vera_layer_mode_tile::config#10 = vera_layer_mode_tile::config#21 | VERA_LAYER_HEIGHT_64 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_HEIGHT_64 - tax - jmp __b20 - // vera_layer_mode_tile::@11 - __b11: - // config |= VERA_LAYER_WIDTH_128 - // [327] vera_layer_mode_tile::config#7 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_128 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_WIDTH_128 - tax - // vera_layer_rowshift[layer] = 8 - // [328] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 8 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #8 - ldy.z layer - sta vera_layer_rowshift,y - // vera_layer_rowskip[layer] = 256 - // [329] vera_layer_mode_tile::$13 = vera_layer_mode_tile::layer#10 << 1 -- vbuaa=vbuz1_rol_1 - tya - asl - // [330] vera_layer_rowskip[vera_layer_mode_tile::$13] = $100 -- pwuc1_derefidx_vbuaa=vwuc2 - tay - lda #<$100 - sta vera_layer_rowskip,y - lda #>$100 - sta vera_layer_rowskip+1,y - jmp __b13 - // vera_layer_mode_tile::@10 - __b10: - // config |= VERA_LAYER_WIDTH_64 - // [331] vera_layer_mode_tile::config#6 = vera_layer_mode_tile::config#17 | VERA_LAYER_WIDTH_64 -- vbuxx=vbuxx_bor_vbuc1 - txa - ora #VERA_LAYER_WIDTH_64 - tax - // vera_layer_rowshift[layer] = 7 - // [332] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 7 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #7 - ldy.z layer - sta vera_layer_rowshift,y - // vera_layer_rowskip[layer] = 128 - // [333] vera_layer_mode_tile::$12 = vera_layer_mode_tile::layer#10 << 1 -- vbuaa=vbuz1_rol_1 - tya - asl - // [334] vera_layer_rowskip[vera_layer_mode_tile::$12] = $80 -- pwuc1_derefidx_vbuaa=vbuc2 - tay - lda #$80 - sta vera_layer_rowskip,y - lda #0 - sta vera_layer_rowskip+1,y - jmp __b13 - // vera_layer_mode_tile::@9 - __b9: - // vera_layer_rowshift[layer] = 6 - // [335] vera_layer_rowshift[vera_layer_mode_tile::layer#10] = 6 -- pbuc1_derefidx_vbuz1=vbuc2 - lda #6 - ldy.z layer - sta vera_layer_rowshift,y - // vera_layer_rowskip[layer] = 64 - // [336] vera_layer_mode_tile::$11 = vera_layer_mode_tile::layer#10 << 1 -- vbuaa=vbuz1_rol_1 - tya - asl - // [337] vera_layer_rowskip[vera_layer_mode_tile::$11] = $40 -- pwuc1_derefidx_vbuaa=vbuc2 - tay - lda #$40 - sta vera_layer_rowskip,y - lda #0 - sta vera_layer_rowskip+1,y - jmp __b13 -} - // memcpy_to_vram -// Copy block of memory (from RAM to VRAM) -// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination in VRAM. -// - vbank: Which 64K VRAM bank to put data into (0/1) -// - vdest: The destination address in VRAM -// - src: The source address in RAM -// - num: The number of bytes to copy -// void memcpy_to_vram(char vbank, __zp(2) void *vdest, void *src, unsigned int num) -memcpy_to_vram: { - // Transfer the data - .label end = main.tiles+$40 - .label s = $1d - .label vdest = 2 - // *VERA_CTRL &= ~VERA_ADDRSEL - // [339] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // BYTE0(vdest) - // [340] memcpy_to_vram::$0 = byte0 memcpy_to_vram::vdest#2 -- vbuaa=_byte0_pvoz1 - lda.z vdest - // *VERA_ADDRX_L = BYTE0(vdest) - // [341] *VERA_ADDRX_L = memcpy_to_vram::$0 -- _deref_pbuc1=vbuaa - // Set address - sta VERA_ADDRX_L - // BYTE1(vdest) - // [342] memcpy_to_vram::$1 = byte1 memcpy_to_vram::vdest#2 -- vbuaa=_byte1_pvoz1 - lda.z vdest+1 - // *VERA_ADDRX_M = BYTE1(vdest) - // [343] *VERA_ADDRX_M = memcpy_to_vram::$1 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // *VERA_ADDRX_H = VERA_INC_1 | vbank - // [344] *VERA_ADDRX_H = VERA_INC_1|1 -- _deref_pbuc1=vbuc2 - lda #VERA_INC_1|1 - sta VERA_ADDRX_H - // [345] phi from memcpy_to_vram to memcpy_to_vram::@1 [phi:memcpy_to_vram->memcpy_to_vram::@1] - // [345] phi memcpy_to_vram::s#2 = (char *)(void *)main::tiles [phi:memcpy_to_vram->memcpy_to_vram::@1#0] -- pbuz1=pbuc1 - lda #main.tiles - sta.z s+1 - // memcpy_to_vram::@1 - __b1: - // for(char *s = src; s!=end; s++) - // [346] if(memcpy_to_vram::s#2!=memcpy_to_vram::end#0) goto memcpy_to_vram::@2 -- pbuz1_neq_pbuc1_then_la1 - lda.z s+1 - cmp #>end - bne __b2 - lda.z s - cmp #memcpy_to_vram::@1] - // [345] phi memcpy_to_vram::s#2 = memcpy_to_vram::s#1 [phi:memcpy_to_vram::@2->memcpy_to_vram::@1#0] -- register_copy - jmp __b1 -} - // vera_tile_area -// --- TILE FUNCTIONS --- -// void vera_tile_area(char layer, __zp($23) unsigned int tileindex, __zp($29) char x, __zp($25) char y, __zp($d) char w, __zp($1f) char h, __zp($28) char hflip, __zp($1a) char vflip, char offset) -vera_tile_area: { - .label __4 = 2 - .label __10 = 2 - .label mapbase = $13 - .label shift = $2a - .label rowskip = 8 - .label hflip = $28 - .label vflip = $1a - .label index_l = $1b - .label index_h = $1a - .label r = $c - .label tileindex = $23 - .label x = $29 - .label y = $25 - .label h = $1f - .label w = $d - // dword mapbase = vera_mapbase_address[layer] - // [351] vera_tile_area::mapbase#0 = *vera_mapbase_address -- vduz1=_deref_pduc1 - lda vera_mapbase_address - sta.z mapbase - lda vera_mapbase_address+1 - sta.z mapbase+1 - lda vera_mapbase_address+2 - sta.z mapbase+2 - lda vera_mapbase_address+3 - sta.z mapbase+3 - // byte shift = vera_layer_rowshift[layer] - // [352] vera_tile_area::shift#0 = *vera_layer_rowshift -- vbuz1=_deref_pbuc1 - lda vera_layer_rowshift - sta.z shift - // word rowskip = (word)1 << shift - // [353] vera_tile_area::rowskip#0 = 1 << vera_tile_area::shift#0 -- vwuz1=vwuc1_rol_vbuz2 - tay - lda #<1 - sta.z rowskip - lda #>1+1 - sta.z rowskip+1 - cpy #0 - beq !e+ - !: - asl.z rowskip - rol.z rowskip+1 - dey - bne !- - !e: - // hflip = vera_layer_hflip[hflip] - // [354] vera_tile_area::hflip#0 = *vera_layer_hflip -- vbuz1=_deref_pbuc1 - lda vera_layer_hflip - sta.z hflip - // vflip = vera_layer_vflip[vflip] - // [355] vera_tile_area::vflip#0 = *vera_layer_vflip -- vbuz1=_deref_pbuc1 - lda vera_layer_vflip - sta.z vflip - // byte index_l = BYTE0(tileindex) - // [356] vera_tile_area::index_l#0 = byte0 vera_tile_area::tileindex#3 -- vbuz1=_byte0_vwuz2 - lda.z tileindex - sta.z index_l - // byte index_h = BYTE1(tileindex) - // [357] vera_tile_area::index_h#0 = byte1 vera_tile_area::tileindex#3 -- vbuaa=_byte1_vwuz1 - lda.z tileindex+1 - // index_h |= hflip - // [358] vera_tile_area::index_h#1 = vera_tile_area::index_h#0 | vera_tile_area::hflip#0 -- vbuaa=vbuaa_bor_vbuz1 - ora.z hflip - // index_h |= vflip - // [359] vera_tile_area::index_h#2 = vera_tile_area::index_h#1 | vera_tile_area::vflip#0 -- vbuz1=vbuaa_bor_vbuz1 - ora.z index_h - sta.z index_h - // (word)y << shift - // [360] vera_tile_area::$10 = (unsigned int)vera_tile_area::y#3 -- vwuz1=_word_vbuz2 - lda.z y - sta.z __10 - lda #0 - sta.z __10+1 - // [361] vera_tile_area::$4 = vera_tile_area::$10 << vera_tile_area::shift#0 -- vwuz1=vwuz1_rol_vbuz2 - ldy.z shift - beq !e+ - !: - asl.z __4 - rol.z __4+1 - dey - bne !- - !e: - // mapbase += ((word)y << shift) - // [362] vera_tile_area::mapbase#1 = vera_tile_area::mapbase#0 + vera_tile_area::$4 -- vduz1=vduz1_plus_vwuz2 - lda.z mapbase - clc - adc.z __4 - sta.z mapbase - lda.z mapbase+1 - adc.z __4+1 - sta.z mapbase+1 - lda.z mapbase+2 - adc #0 - sta.z mapbase+2 - lda.z mapbase+3 - adc #0 - sta.z mapbase+3 - // x << 1 - // [363] vera_tile_area::$5 = vera_tile_area::x#3 << 1 -- vbuaa=vbuz1_rol_1 - lda.z x - asl - // mapbase += (x << 1) - // [364] vera_tile_area::mapbase#2 = vera_tile_area::mapbase#1 + vera_tile_area::$5 -- vduz1=vduz1_plus_vbuaa - clc - adc.z mapbase - sta.z mapbase - lda.z mapbase+1 - adc #0 - sta.z mapbase+1 - lda.z mapbase+2 - adc #0 - sta.z mapbase+2 - lda.z mapbase+3 - adc #0 - sta.z mapbase+3 - // [365] phi from vera_tile_area to vera_tile_area::@1 [phi:vera_tile_area->vera_tile_area::@1] - // [365] phi vera_tile_area::mapbase#10 = vera_tile_area::mapbase#2 [phi:vera_tile_area->vera_tile_area::@1#0] -- register_copy - // [365] phi vera_tile_area::r#2 = 0 [phi:vera_tile_area->vera_tile_area::@1#1] -- vbuz1=vbuc1 - lda #0 - sta.z r - // vera_tile_area::@1 - __b1: - // for(byte r=0; rvera_tile_area::@2] - // [376] phi vera_tile_area::c#2 = 0 [phi:vera_tile_area::vera_vram_address01->vera_tile_area::@2#0] -- vbuyy=vbuc1 - ldy #0 - // vera_tile_area::@2 - __b2: - // for(byte c=0; cvera_tile_area::@1] - // [365] phi vera_tile_area::mapbase#10 = vera_tile_area::mapbase#3 [phi:vera_tile_area::@4->vera_tile_area::@1#0] -- register_copy - // [365] phi vera_tile_area::r#2 = vera_tile_area::r#1 [phi:vera_tile_area::@4->vera_tile_area::@1#1] -- register_copy - jmp __b1 - // vera_tile_area::@3 - __b3: - // *VERA_DATA0 = index_l - // [380] *VERA_DATA0 = vera_tile_area::index_l#0 -- _deref_pbuc1=vbuz1 - lda.z index_l - sta VERA_DATA0 - // *VERA_DATA0 = index_h - // [381] *VERA_DATA0 = vera_tile_area::index_h#2 -- _deref_pbuc1=vbuz1 - lda.z index_h - sta VERA_DATA0 - // for(byte c=0; cvera_tile_area::@2] - // [376] phi vera_tile_area::c#2 = vera_tile_area::c#1 [phi:vera_tile_area::@3->vera_tile_area::@2#0] -- register_copy - jmp __b2 -} - // printf_str -/// Print a NUL-terminated string -// void printf_str(void (*putc)(char), __zp($1d) const char *s) -printf_str: { - .label s = $1d - // [384] phi from printf_str printf_str::@2 to printf_str::@1 [phi:printf_str/printf_str::@2->printf_str::@1] - // [384] phi printf_str::s#9 = printf_str::s#10 [phi:printf_str/printf_str::@2->printf_str::@1#0] -- register_copy - // printf_str::@1 - __b1: - // while(c=*s++) - // [385] printf_str::c#1 = *printf_str::s#9 -- vbuaa=_deref_pbuz1 - ldy #0 - lda (s),y - // [386] printf_str::s#0 = ++ printf_str::s#9 -- pbuz1=_inc_pbuz1 - inc.z s - bne !+ - inc.z s+1 - !: - // [387] if(0!=printf_str::c#1) goto printf_str::@2 -- 0_neq_vbuaa_then_la1 - cmp #0 - bne __b2 - // printf_str::@return - // } - // [388] return - rts - // printf_str::@2 - __b2: - // putc(c) - // [389] stackpush(char) = printf_str::c#1 -- _stackpushbyte_=vbuaa - pha - // [390] callexecute cputc -- call_vprc1 - jsr cputc - // sideeffect stackpullpadding(1) -- _stackpullpadding_1 - pla - jmp __b1 -} - // kbhit -// Return true if there's a key waiting, return false if not -kbhit: { - .label chptr = ch - .label IN_DEV = $28a - // Current input device number - .label GETIN = $ffe4 - .label ch = $3a - // char ch = 0 - // [392] kbhit::ch = 0 -- vbuz1=vbuc1 - lda #0 - sta.z ch - // kickasm - // kickasm( uses kbhit::chptr uses kbhit::IN_DEV uses kbhit::GETIN) {{ jsr _kbhit bne L3 jmp continue1 .var via1 = $9f60 //VIA#1 .var d1pra = via1+1 _kbhit: ldy d1pra // The count of keys pressed is stored in RAM bank 0. stz d1pra // Set d1pra to zero to access RAM bank 0. lda $A00A // Get number of characters from this address in the ROM of the CX16 (ROM 38). sty d1pra // Set d1pra to previous value. rts L3: ldy IN_DEV // Save current input device stz IN_DEV // Keyboard phy jsr GETIN // Read char, and return in .A ply sta chptr // Store the character read in ch sty IN_DEV // Restore input device ldx #>$0000 rts continue1: nop }} - // CBM GETIN API - jsr _kbhit - bne L3 - - jmp continue1 - - .var via1 = $9f60 //VIA#1 - .var d1pra = via1+1 - - _kbhit: - ldy d1pra // The count of keys pressed is stored in RAM bank 0. - stz d1pra // Set d1pra to zero to access RAM bank 0. - lda $A00A // Get number of characters from this address in the ROM of the CX16 (ROM 38). - sty d1pra // Set d1pra to previous value. - rts - - L3: - ldy IN_DEV // Save current input device - stz IN_DEV // Keyboard - phy - jsr GETIN // Read char, and return in .A - ply - sta chptr // Store the character read in ch - sty IN_DEV // Restore input device - ldx #>$0000 - rts - - continue1: - nop - - // return ch; - // [394] kbhit::return#0 = kbhit::ch -- vbuaa=vbuz1 - lda.z ch - // kbhit::@return - // } - // [395] kbhit::return#1 = kbhit::return#0 - // [396] return - rts -} - // vera_layer_set_text_color_mode -// Set the configuration of the layer text color mode. -// - layer: Value of 0 or 1. -// - color_mode: Specifies the color mode to be VERA_LAYER_CONFIG_16 or VERA_LAYER_CONFIG_256 for text mode. -// void vera_layer_set_text_color_mode(char layer, char color_mode) -vera_layer_set_text_color_mode: { - .label addr = $2b - // byte* addr = vera_layer_config[layer] - // [397] vera_layer_set_text_color_mode::addr#0 = *(vera_layer_config+vera_layer_mode_text::layer#0*SIZEOF_POINTER) -- pbuz1=_deref_qbuc1 - lda vera_layer_config+vera_layer_mode_text.layer*SIZEOF_POINTER - sta.z addr - lda vera_layer_config+vera_layer_mode_text.layer*SIZEOF_POINTER+1 - sta.z addr+1 - // *addr &= ~VERA_LAYER_CONFIG_256C - // [398] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 & ~VERA_LAYER_CONFIG_256C -- _deref_pbuz1=_deref_pbuz1_band_vbuc1 - lda #VERA_LAYER_CONFIG_256C^$ff - ldy #0 - and (addr),y - sta (addr),y - // *addr |= color_mode - // [399] *vera_layer_set_text_color_mode::addr#0 = *vera_layer_set_text_color_mode::addr#0 -- _deref_pbuz1=_deref_pbuz1 - lda (addr),y - sta (addr),y - // vera_layer_set_text_color_mode::@return - // } - // [400] return - rts -} - // vera_layer_get_mapbase_bank -// Get the map base bank of the tiles for the layer. -// - layer: Value of 0 or 1. -// - return: Bank in vera vram. -// __register(A) char vera_layer_get_mapbase_bank(__register(X) char layer) -vera_layer_get_mapbase_bank: { - // return vera_mapbase_bank[layer]; - // [401] vera_layer_get_mapbase_bank::return#0 = vera_mapbase_bank[vera_layer_get_mapbase_bank::layer#0] -- vbuaa=pbuc1_derefidx_vbuxx - lda vera_mapbase_bank,x - // vera_layer_get_mapbase_bank::@return - // } - // [402] return - rts -} - // vera_layer_get_mapbase_offset -// Get the map base lower 16-bit address (offset) of the tiles for the layer. -// - layer: Value of 0 or 1. -// - return: Offset in vera vram of the specified bank. -// __zp($f) unsigned int vera_layer_get_mapbase_offset(__register(A) char layer) -vera_layer_get_mapbase_offset: { - .label return = $f - // return vera_mapbase_offset[layer]; - // [403] vera_layer_get_mapbase_offset::$0 = vera_layer_get_mapbase_offset::layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [404] vera_layer_get_mapbase_offset::return#0 = vera_mapbase_offset[vera_layer_get_mapbase_offset::$0] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda vera_mapbase_offset,y - sta.z return - lda vera_mapbase_offset+1,y - sta.z return+1 - // vera_layer_get_mapbase_offset::@return - // } - // [405] return - rts -} - // vera_layer_get_rowshift -// Get the bit shift value required to skip a whole line fast. -// - layer: Value of 0 or 1. -// - return: Rowshift value to calculate fast from a y value to line offset in tile mode. -// __register(A) char vera_layer_get_rowshift(__register(X) char layer) -vera_layer_get_rowshift: { - // return vera_layer_rowshift[layer]; - // [406] vera_layer_get_rowshift::return#0 = vera_layer_rowshift[vera_layer_get_rowshift::layer#0] -- vbuaa=pbuc1_derefidx_vbuxx - lda vera_layer_rowshift,x - // vera_layer_get_rowshift::@return - // } - // [407] return - rts -} - // vera_layer_get_rowskip -// Get the value required to skip a whole line fast. -// - layer: Value of 0 or 1. -// - return: Skip value to calculate fast from a y value to line offset in tile mode. -// __zp($37) unsigned int vera_layer_get_rowskip(__register(A) char layer) -vera_layer_get_rowskip: { - .label return = $37 - // return vera_layer_rowskip[layer]; - // [408] vera_layer_get_rowskip::$0 = vera_layer_get_rowskip::layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [409] vera_layer_get_rowskip::return#0 = vera_layer_rowskip[vera_layer_get_rowskip::$0] -- vwuz1=pwuc1_derefidx_vbuaa - tay - lda vera_layer_rowskip,y - sta.z return - lda vera_layer_rowskip+1,y - sta.z return+1 - // vera_layer_get_rowskip::@return - // } - // [410] return - rts -} - // cscroll -// Scroll the entire screen if the cursor is beyond the last line -cscroll: { - // if(conio_cursor_y[conio_screen_layer]>=CONIO_HEIGHT) - // [411] if(conio_cursor_y[conio_screen_layer]=conio_height) - // [413] if(conio_cursor_y[conio_screen_layer]cscroll::@3] - // cscroll::@3 - __b3: - // cscroll::@return - // } - // [415] return - rts - // [416] phi from cscroll::@1 to cscroll::@4 [phi:cscroll::@1->cscroll::@4] - // cscroll::@4 - __b4: - // insertup() - // [417] call insertup - jsr insertup - // cscroll::@5 - // gotoxy( 0, CONIO_HEIGHT-1) - // [418] gotoxy::y#2 = conio_screen_height - 1 -- vbuxx=vbuz1_minus_1 - ldx.z conio_screen_height - dex - // [419] call gotoxy - // [204] phi from cscroll::@5 to gotoxy [phi:cscroll::@5->gotoxy] - // [204] phi gotoxy::y#4 = gotoxy::y#2 [phi:cscroll::@5->gotoxy#0] -- register_copy - jsr gotoxy - rts -} - // vera_layer_get_backcolor -// Get the back color for text output. The old back text color setting is returned. -// - layer: Value of 0 or 1. -// - return: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_backcolor(__register(X) char layer) -vera_layer_get_backcolor: { - // return vera_layer_backcolor[layer]; - // [420] vera_layer_get_backcolor::return#0 = vera_layer_backcolor[vera_layer_get_backcolor::layer#0] -- vbuaa=pbuc1_derefidx_vbuxx - lda vera_layer_backcolor,x - // vera_layer_get_backcolor::@return - // } - // [421] return - rts -} - // vera_layer_get_textcolor -// Get the front color for text output. The old front text color setting is returned. -// - layer: Value of 0 or 1. -// - return: a 4 bit value ( decimal between 0 and 15). -// This will only work when the VERA is in 16 color mode! -// Note that on the VERA, the transparent color has value 0. -// __register(A) char vera_layer_get_textcolor(__register(X) char layer) -vera_layer_get_textcolor: { - // return vera_layer_textcolor[layer]; - // [422] vera_layer_get_textcolor::return#0 = vera_layer_textcolor[vera_layer_get_textcolor::layer#0] -- vbuaa=pbuc1_derefidx_vbuxx - lda vera_layer_textcolor,x - // vera_layer_get_textcolor::@return - // } - // [423] return - rts -} - // vera_layer_set_config -// Set the configuration of the layer. -// - layer: Value of 0 or 1. -// - config: Specifies the modes which are specified using T256C / 'Bitmap Mode' / 'Color Depth'. -// void vera_layer_set_config(__register(A) char layer, __register(X) char config) -vera_layer_set_config: { - .label addr = $21 - // byte* addr = vera_layer_config[layer] - // [424] vera_layer_set_config::$0 = vera_layer_set_config::layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [425] vera_layer_set_config::addr#0 = vera_layer_config[vera_layer_set_config::$0] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_config,y - sta.z addr - lda vera_layer_config+1,y - sta.z addr+1 - // *addr = config - // [426] *vera_layer_set_config::addr#0 = vera_layer_set_config::config#0 -- _deref_pbuz1=vbuxx - txa - ldy #0 - sta (addr),y - // vera_layer_set_config::@return - // } - // [427] return - rts -} - // vera_layer_set_tilebase -// Set the base of the tiles for the layer with which the conio will interact. -// - layer: Value of 0 or 1. -// - tilebase: Specifies the base address of the tile map. -// Note that the register only specifies bits 16:11 of the address, -// so the resulting address in the VERA VRAM is always aligned to a multiple of 2048 bytes! -// void vera_layer_set_tilebase(__register(A) char layer, __register(X) char tilebase) -vera_layer_set_tilebase: { - .label addr = $21 - // byte* addr = vera_layer_tilebase[layer] - // [428] vera_layer_set_tilebase::$0 = vera_layer_set_tilebase::layer#0 << 1 -- vbuaa=vbuaa_rol_1 - asl - // [429] vera_layer_set_tilebase::addr#0 = vera_layer_tilebase[vera_layer_set_tilebase::$0] -- pbuz1=qbuc1_derefidx_vbuaa - tay - lda vera_layer_tilebase,y - sta.z addr - lda vera_layer_tilebase+1,y - sta.z addr+1 - // *addr = tilebase - // [430] *vera_layer_set_tilebase::addr#0 = vera_layer_set_tilebase::tilebase#0 -- _deref_pbuz1=vbuxx - txa - ldy #0 - sta (addr),y - // vera_layer_set_tilebase::@return - // } - // [431] return - rts -} - // insertup -// Insert a new line, and scroll the upper part of the screen up. -insertup: { - .label cy = $d - .label width = $c - .label line = 6 - .label start = 6 - // unsigned byte cy = conio_cursor_y[conio_screen_layer] - // [432] insertup::cy#0 = conio_cursor_y[conio_screen_layer] -- vbuz1=pbuc1_derefidx_vbuz2 - ldy.z conio_screen_layer - lda conio_cursor_y,y - sta.z cy - // unsigned byte width = CONIO_WIDTH * 2 - // [433] insertup::width#0 = conio_screen_width << 1 -- vbuz1=vbuz2_rol_1 - lda.z conio_screen_width - asl - sta.z width - // [434] phi from insertup to insertup::@1 [phi:insertup->insertup::@1] - // [434] phi insertup::i#2 = 1 [phi:insertup->insertup::@1#0] -- vbuxx=vbuc1 - ldx #1 - // insertup::@1 - __b1: - // for(unsigned byte i=1; i<=cy; i++) - // [435] if(insertup::i#2<=insertup::cy#0) goto insertup::@2 -- vbuxx_le_vbuz1_then_la1 - lda.z cy - stx.z $ff - cmp.z $ff - bcs __b2 - // [436] phi from insertup::@1 to insertup::@3 [phi:insertup::@1->insertup::@3] - // insertup::@3 - // clearline() - // [437] call clearline - jsr clearline - // insertup::@return - // } - // [438] return - rts - // insertup::@2 - __b2: - // i-1 - // [439] insertup::$3 = insertup::i#2 - 1 -- vbuaa=vbuxx_minus_1 - txa - sec - sbc #1 - // unsigned int line = (i-1) << conio_rowshift - // [440] insertup::line#0 = insertup::$3 << conio_rowshift -- vwuz1=vbuaa_rol_vbuz2 - ldy.z conio_rowshift - sta.z line - lda #0 - sta.z line+1 - cpy #0 - beq !e+ - !: - asl.z line - rol.z line+1 - dey - bne !- - !e: - // unsigned char* start = CONIO_SCREEN_TEXT + line - // [441] insertup::start#0 = CONIO_SCREEN_TEXT#17 + insertup::line#0 -- pbuz1=pbuz2_plus_vwuz1 - clc - lda.z start - adc.z CONIO_SCREEN_TEXT_1 - sta.z start - lda.z start+1 - adc.z CONIO_SCREEN_TEXT_1+1 - sta.z start+1 - // start+conio_rowskip - // [442] memcpy_in_vram::src#0 = insertup::start#0 + conio_rowskip -- pbuz1=pbuz2_plus_vwuz3 - lda.z start - clc - adc.z conio_rowskip - sta.z memcpy_in_vram.src - lda.z start+1 - adc.z conio_rowskip+1 - sta.z memcpy_in_vram.src+1 - // memcpy_in_vram(0, start, VERA_INC_1, 0, start+conio_rowskip, VERA_INC_1, width) - // [443] memcpy_in_vram::dest#0 = (void *)insertup::start#0 - // [444] memcpy_in_vram::num#0 = insertup::width#0 -- vwuz1=vbuz2 - lda.z width - sta.z memcpy_in_vram.num - lda #0 - sta.z memcpy_in_vram.num+1 - // [445] call memcpy_in_vram - jsr memcpy_in_vram - // insertup::@4 - // for(unsigned byte i=1; i<=cy; i++) - // [446] insertup::i#1 = ++ insertup::i#2 -- vbuxx=_inc_vbuxx - inx - // [434] phi from insertup::@4 to insertup::@1 [phi:insertup::@4->insertup::@1] - // [434] phi insertup::i#2 = insertup::i#1 [phi:insertup::@4->insertup::@1#0] -- register_copy - jmp __b1 -} - // clearline -clearline: { - .label addr = $a - .label c = 2 - // *VERA_CTRL &= ~VERA_ADDRSEL - // [447] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // byte* addr = CONIO_SCREEN_TEXT + conio_line_text[conio_screen_layer] - // [448] clearline::$5 = conio_screen_layer << 1 -- vbuaa=vbuz1_rol_1 - lda.z conio_screen_layer - asl - // [449] clearline::addr#0 = CONIO_SCREEN_TEXT#17 + conio_line_text[clearline::$5] -- pbuz1=pbuz2_plus_pwuc1_derefidx_vbuaa - // Set address - tay - clc - lda.z CONIO_SCREEN_TEXT_1 - adc conio_line_text,y - sta.z addr - lda.z CONIO_SCREEN_TEXT_1+1 - adc conio_line_text+1,y - sta.z addr+1 - // BYTE0(addr) - // [450] clearline::$1 = byte0 clearline::addr#0 -- vbuaa=_byte0_pbuz1 - lda.z addr - // *VERA_ADDRX_L = BYTE0(addr) - // [451] *VERA_ADDRX_L = clearline::$1 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_L - // BYTE1(addr) - // [452] clearline::$2 = byte1 clearline::addr#0 -- vbuaa=_byte1_pbuz1 - lda.z addr+1 - // *VERA_ADDRX_M = BYTE1(addr) - // [453] *VERA_ADDRX_M = clearline::$2 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // *VERA_ADDRX_H = VERA_INC_1 - // [454] *VERA_ADDRX_H = VERA_INC_1 -- _deref_pbuc1=vbuc2 - lda #VERA_INC_1 - sta VERA_ADDRX_H - // char color = vera_layer_get_color( conio_screen_layer) - // [455] vera_layer_get_color::layer#1 = conio_screen_layer -- vbuxx=vbuz1 - ldx.z conio_screen_layer - // [456] call vera_layer_get_color - // [217] phi from clearline to vera_layer_get_color [phi:clearline->vera_layer_get_color] - // [217] phi vera_layer_get_color::layer#2 = vera_layer_get_color::layer#1 [phi:clearline->vera_layer_get_color#0] -- register_copy - jsr vera_layer_get_color - // char color = vera_layer_get_color( conio_screen_layer) - // [457] vera_layer_get_color::return#4 = vera_layer_get_color::return#2 - // clearline::@4 - // [458] clearline::color#0 = vera_layer_get_color::return#4 -- vbuxx=vbuaa - tax - // [459] phi from clearline::@4 to clearline::@1 [phi:clearline::@4->clearline::@1] - // [459] phi clearline::c#2 = 0 [phi:clearline::@4->clearline::@1#0] -- vwuz1=vwuc1 - lda #<0 - sta.z c - sta.z c+1 - // clearline::@1 - __b1: - // for( unsigned int c=0;cclearline::@1] - // [459] phi clearline::c#2 = clearline::c#1 [phi:clearline::@2->clearline::@1#0] -- register_copy - jmp __b1 -} - // memcpy_in_vram -// Copy block of memory (from VRAM to VRAM) -// Copies the values from the location pointed by src to the location pointed by dest. -// The method uses the VERA access ports 0 and 1 to copy data from and to in VRAM. -// - src_bank: 64K VRAM bank number to copy from (0/1). -// - src: pointer to the location to copy from. Note that the address is a 16 bit value! -// - src_increment: the increment indicator, VERA needs this because addressing increment is automated by VERA at each access. -// - dest_bank: 64K VRAM bank number to copy to (0/1). -// - dest: pointer to the location to copy to. Note that the address is a 16 bit value! -// - dest_increment: the increment indicator, VERA needs this because addressing increment is automated by VERA at each access. -// - num: The number of bytes to copy -// void memcpy_in_vram(char dest_bank, __zp(6) void *dest, char dest_increment, char src_bank, __zp($a) char *src, char src_increment, __zp(4) unsigned int num) -memcpy_in_vram: { - .label i = 2 - .label dest = 6 - .label src = $a - .label num = 4 - // *VERA_CTRL &= ~VERA_ADDRSEL - // [466] *VERA_CTRL = *VERA_CTRL & ~VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 - // Select DATA0 - lda #VERA_ADDRSEL^$ff - and VERA_CTRL - sta VERA_CTRL - // BYTE0(src) - // [467] memcpy_in_vram::$0 = byte0 (void *)memcpy_in_vram::src#0 -- vbuaa=_byte0_pvoz1 - lda.z src - // *VERA_ADDRX_L = BYTE0(src) - // [468] *VERA_ADDRX_L = memcpy_in_vram::$0 -- _deref_pbuc1=vbuaa - // Set address - sta VERA_ADDRX_L - // BYTE1(src) - // [469] memcpy_in_vram::$1 = byte1 (void *)memcpy_in_vram::src#0 -- vbuaa=_byte1_pvoz1 - lda.z src+1 - // *VERA_ADDRX_M = BYTE1(src) - // [470] *VERA_ADDRX_M = memcpy_in_vram::$1 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // *VERA_ADDRX_H = src_increment | src_bank - // [471] *VERA_ADDRX_H = VERA_INC_1 -- _deref_pbuc1=vbuc2 - lda #VERA_INC_1 - sta VERA_ADDRX_H - // *VERA_CTRL |= VERA_ADDRSEL - // [472] *VERA_CTRL = *VERA_CTRL | VERA_ADDRSEL -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 - // Select DATA1 - lda #VERA_ADDRSEL - ora VERA_CTRL - sta VERA_CTRL - // BYTE0(dest) - // [473] memcpy_in_vram::$3 = byte0 memcpy_in_vram::dest#0 -- vbuaa=_byte0_pvoz1 - lda.z dest - // *VERA_ADDRX_L = BYTE0(dest) - // [474] *VERA_ADDRX_L = memcpy_in_vram::$3 -- _deref_pbuc1=vbuaa - // Set address - sta VERA_ADDRX_L - // BYTE1(dest) - // [475] memcpy_in_vram::$4 = byte1 memcpy_in_vram::dest#0 -- vbuaa=_byte1_pvoz1 - lda.z dest+1 - // *VERA_ADDRX_M = BYTE1(dest) - // [476] *VERA_ADDRX_M = memcpy_in_vram::$4 -- _deref_pbuc1=vbuaa - sta VERA_ADDRX_M - // *VERA_ADDRX_H = dest_increment | dest_bank - // [477] *VERA_ADDRX_H = VERA_INC_1 -- _deref_pbuc1=vbuc2 - lda #VERA_INC_1 - sta VERA_ADDRX_H - // [478] phi from memcpy_in_vram to memcpy_in_vram::@1 [phi:memcpy_in_vram->memcpy_in_vram::@1] - // [478] phi memcpy_in_vram::i#2 = 0 [phi:memcpy_in_vram->memcpy_in_vram::@1#0] -- vwuz1=vwuc1 - lda #<0 - sta.z i - sta.z i+1 - // Transfer the data - // memcpy_in_vram::@1 - __b1: - // for(unsigned int i=0; imemcpy_in_vram::@1] - // [478] phi memcpy_in_vram::i#2 = memcpy_in_vram::i#1 [phi:memcpy_in_vram::@2->memcpy_in_vram::@1#0] -- register_copy - jmp __b1 -} - // File Data -.segment Data - VERA_LAYER_WIDTH: .word $20, $40, $80, $100 - VERA_LAYER_HEIGHT: .word $20, $40, $80, $100 - /// --- VERA function encapsulation --- - vera_mapbase_offset: .word 0, 0 - vera_mapbase_bank: .byte 0, 0 - vera_mapbase_address: .dword 0, 0 - vera_tilebase_offset: .word 0, 0 - vera_tilebase_bank: .byte 0, 0 - vera_tilebase_address: .dword 0, 0 - vera_layer_rowshift: .byte 0, 0 - vera_layer_rowskip: .word 0, 0 - vera_layer_hflip: .byte 0, 4 - vera_layer_vflip: .byte 0, 8 - vera_layer_config: .word VERA_L0_CONFIG, VERA_L1_CONFIG - vera_layer_enable: .byte VERA_LAYER0_ENABLE, VERA_LAYER1_ENABLE - vera_layer_mapbase: .word VERA_L0_MAPBASE, VERA_L1_MAPBASE - vera_layer_tilebase: .word VERA_L0_TILEBASE, VERA_L1_TILEBASE - vera_layer_textcolor: .byte WHITE, WHITE - vera_layer_backcolor: .byte BLUE, BLUE - // The number of bytes on the screen - // The current cursor x-position - conio_cursor_x: .byte 0, 0 - // The current cursor y-position - conio_cursor_y: .byte 0, 0 - // The current text cursor line start - conio_line_text: .word 0, 0 - // Is scrolling enabled when outputting beyond the end of the screen (1: yes, 0: no). - // If disabled the cursor just moves back to (0,0) instead - conio_scroll_enable: .byte 1, 1 - diff --git a/src/test/ref/examples/cx16/veralib/tilemap_8bpp_8_x_8.sym b/src/test/ref/examples/cx16/veralib/tilemap_8bpp_8_x_8.sym deleted file mode 100644 index 03872ec88..000000000 --- a/src/test/ref/examples/cx16/veralib/tilemap_8bpp_8_x_8.sym +++ /dev/null @@ -1,698 +0,0 @@ -__constant const char BLACK = 0 -__constant const char BLUE = 6 -char CONIO_SCREEN_BANK -char CONIO_SCREEN_BANK#11 // CONIO_SCREEN_BANK zp[1]:86 12.813953488372093 -char CONIO_SCREEN_BANK#15 // CONIO_SCREEN_BANK_1 zp[1]:59 625.0625 -char *CONIO_SCREEN_TEXT -unsigned int CONIO_SCREEN_TEXT#13 // CONIO_SCREEN_TEXT zp[2]:87 1.8363636363636364 -char *CONIO_SCREEN_TEXT#17 // CONIO_SCREEN_TEXT_1 zp[2]:17 2.0370555611111112E7 -__constant char RADIX::BINARY = 2 -__constant char RADIX::DECIMAL = $a -__constant char RADIX::HEXADECIMAL = $10 -__constant char RADIX::OCTAL = 8 -__constant char SIZEOF_POINTER = 2 -__constant unsigned int STACK_BASE = $103 -__constant const char VERA_ADDRSEL = 1 -__constant char * const VERA_ADDRX_H = (char *) 40738 -__constant char * const VERA_ADDRX_L = (char *) 40736 -__constant char * const VERA_ADDRX_M = (char *) 40737 -__constant char * const VERA_CTRL = (char *) 40741 -__constant char * const VERA_DATA0 = (char *) 40739 -__constant char * const VERA_DATA1 = (char *) 40740 -__constant char * const VERA_DC_HSCALE = (char *) 40746 -__constant char * const VERA_DC_VIDEO = (char *) 40745 -__constant char * const VERA_DC_VSCALE = (char *) 40747 -__constant const char VERA_INC_1 = $10 -__constant char * const VERA_L0_CONFIG = (char *) 40749 -__constant char * const VERA_L0_MAPBASE = (char *) 40750 -__constant char * const VERA_L0_TILEBASE = (char *) 40751 -__constant char * const VERA_L1_CONFIG = (char *) 40756 -__constant char * const VERA_L1_MAPBASE = (char *) 40757 -__constant char * const VERA_L1_TILEBASE = (char *) 40758 -__constant const char VERA_LAYER0_ENABLE = $10 -__constant const char VERA_LAYER1_ENABLE = $20 -__constant const char VERA_LAYER_COLOR_DEPTH_1BPP = 0 -__constant const char VERA_LAYER_COLOR_DEPTH_2BPP = 1 -__constant const char VERA_LAYER_COLOR_DEPTH_4BPP = 2 -__constant const char VERA_LAYER_COLOR_DEPTH_8BPP = 3 -__constant const char VERA_LAYER_CONFIG_256C = 8 -__constant const unsigned int VERA_LAYER_HEIGHT[4] = { $20, $40, $80, $100 } -__constant const char VERA_LAYER_HEIGHT_128 = $80 -__constant const char VERA_LAYER_HEIGHT_256 = $c0 -__constant const char VERA_LAYER_HEIGHT_64 = $40 -__constant const char VERA_LAYER_HEIGHT_MASK = $c0 -__constant const char VERA_LAYER_TILEBASE_MASK = $fc -__constant const unsigned int VERA_LAYER_WIDTH[4] = { $20, $40, $80, $100 } -__constant const char VERA_LAYER_WIDTH_128 = $20 -__constant const char VERA_LAYER_WIDTH_256 = $30 -__constant const char VERA_LAYER_WIDTH_64 = $10 -__constant const char VERA_LAYER_WIDTH_MASK = $30 -__constant const char VERA_TILEBASE_HEIGHT_16 = 2 -__constant const char VERA_TILEBASE_WIDTH_16 = 1 -__constant const char WHITE = 1 -void __start() -void clearline() -char clearline::$1 // reg byte a 2.00000002E8 -char clearline::$2 // reg byte a 2.00000002E8 -char clearline::$5 // reg byte a 2.00000002E8 -char *clearline::addr -char *clearline::addr#0 // addr zp[2]:10 1.00000001E8 -unsigned int clearline::c -unsigned int clearline::c#1 // c zp[2]:2 2.0000000002E10 -unsigned int clearline::c#2 // c zp[2]:2 7.50000000075E9 -char clearline::color -char clearline::color#0 // reg byte x 1.6833333336666665E9 -void clrscr() -char clrscr::$0 // reg byte a 202.0 -char clrscr::$1 // zp[1]:83 40.4 -char clrscr::$2 // reg byte a 202.0 -char clrscr::$5 // reg byte a 2002.0 -char clrscr::$6 // reg byte a 2002.0 -char clrscr::$7 // reg byte a 2002.0 -char clrscr::$9 // reg byte a 202.0 -char clrscr::c -char clrscr::c#1 // reg byte y 20002.0 -char clrscr::c#2 // reg byte y 7500.75 -char *clrscr::ch -char clrscr::color -char clrscr::color#0 // color zp[1]:31 594.2352941176471 -char clrscr::l -char clrscr::l#1 // reg byte x 2002.0 -char clrscr::l#2 // reg byte x 200.2 -char *clrscr::line_text -char *clrscr::line_text#0 // line_text zp[2]:2 18.363636363636363 -char *clrscr::line_text#1 // line_text zp[2]:2 1001.0 -char *clrscr::line_text#2 // line_text zp[2]:2 293.2142857142857 -__constant char conio_cursor_x[2] = { 0, 0 } -__constant char conio_cursor_y[2] = { 0, 0 } -__loadstore unsigned int conio_height // zp[2]:38 5561.694444444444 -__constant unsigned int conio_line_text[2] = { 0, 0 } -__loadstore char conio_rowshift // zp[1]:23 5287958.664921466 -__loadstore unsigned int conio_rowskip // zp[2]:24 4878541.980487805 -__loadstore volatile char conio_screen_height // zp[1]:32 70588.39411764707 -__loadstore char conio_screen_layer // zp[1]:28 1296495.313207547 -__loadstore volatile char conio_screen_width // zp[1]:14 4.8878097590243906E7 -__constant char conio_scroll_enable[2] = { 1, 1 } -__loadstore unsigned int conio_width // zp[2]:70 110.46703296703298 -void conio_x16_init() -__constant char * const conio_x16_init::BASIC_CURSOR_LINE = (char *) 214 -char conio_x16_init::line -char conio_x16_init::line#0 // line zp[1]:82 2.1999999999999997 -char conio_x16_init::line#1 // line zp[1]:82 22.0 -char conio_x16_init::line#3 // line zp[1]:82 33.0 -__stackcall void cputc(char c) -char cputc::$15 // reg byte a 20002.0 -unsigned int cputc::$16 // zp[2]:2 20002.0 -char cputc::$2 // reg byte a 20002.0 -char cputc::$4 // reg byte a 20002.0 -char cputc::$5 // reg byte a 20002.0 -char cputc::$6 // reg byte a 20002.0 -__constant char cputc::OFFSET_STACK_C = 0 -char cputc::c -char cputc::c#0 // c zp[1]:37 1764.8823529411764 -char cputc::color -char cputc::color#0 // reg byte x 1428.7142857142858 -char *cputc::conio_addr -char *cputc::conio_addr#0 // conio_addr zp[2]:8 10001.0 -char *cputc::conio_addr#1 // conio_addr zp[2]:8 6000.6 -char cputc::scroll_enable -char cputc::scroll_enable#0 // reg byte a 20002.0 -void cputln() -char cputln::$2 // reg byte a 200002.0 -char cputln::$3 // reg byte a 200002.0 -unsigned int cputln::temp -unsigned int cputln::temp#0 // temp zp[2]:8 200002.0 -unsigned int cputln::temp#1 // temp zp[2]:8 100001.0 -void cscroll() -void gotoxy(char x , char y) -char gotoxy::$5 // reg byte a 2.0000002E7 -unsigned int gotoxy::$6 // zp[2]:15 2.0000002E7 -unsigned int gotoxy::line_offset -unsigned int gotoxy::line_offset#0 // line_offset zp[2]:15 1.0000001E7 -char gotoxy::x -char gotoxy::y -char gotoxy::y#1 // reg byte x 22.0 -char gotoxy::y#2 // reg byte x 2000002.0 -char gotoxy::y#4 // reg byte x 7000004.666666666 -char gotoxy::y#5 // reg byte x 4000000.4 -void insertup() -char insertup::$3 // reg byte a 2.000000002E9 -char insertup::cy -char insertup::cy#0 // cy zp[1]:13 8.416666683333334E7 -char insertup::i -char insertup::i#1 // reg byte x 2.000000002E9 -char insertup::i#2 // reg byte x 4.444444448888889E8 -unsigned int insertup::line -unsigned int insertup::line#0 // line zp[2]:6 2.000000002E9 -char *insertup::start -char *insertup::start#0 // start zp[2]:6 1.000000001E9 -char insertup::width -char insertup::width#0 // width zp[1]:12 9.1818182E7 -char kbhit() -__constant char * const kbhit::GETIN = (char *) 65508 -__constant char * const kbhit::IN_DEV = (char *) 650 -__loadstore volatile char kbhit::ch // zp[1]:58 1001.0 -__constant char * const kbhit::chptr = &kbhit::ch -char kbhit::return -char kbhit::return#0 // reg byte a 2002.0 -char kbhit::return#1 // reg byte a 367.33333333333337 -char kbhit::return#2 // reg byte a 202.0 -void main() -char main::$25 // reg byte a 202.0 -char main::bgcolor1_color -char main::c -char main::c#1 // c zp[1]:57 1501.5 -char main::c#2 // c zp[1]:57 250.25 -char main::c1 -char main::c1#1 // reg byte x 1501.5 -char main::c1#2 // reg byte x 250.25 -char main::column -char main::column#1 // reg byte x 400.4 -char main::column#2 // reg byte x 600.5999999999999 -char main::column1 -char main::column1#1 // column1 zp[1]:41 400.4 -char main::column1#2 // column1 zp[1]:41 600.5999999999999 -char main::p -char main::p#1 // reg byte x 1501.5 -char main::p#2 // reg byte x 2002.0 -char main::r -char main::r#1 // r zp[1]:66 151.5 -char main::r#5 // r zp[1]:66 16.833333333333332 -char main::r1 -char main::r1#1 // r1 zp[1]:67 151.5 -char main::r1#5 // r1 zp[1]:67 16.833333333333332 -char main::row -char main::row#1 // row zp[1]:64 67.33333333333333 -char main::row#11 // row_1 zp[1]:65 109.36363636363637 -char main::row#3 // row_1 zp[1]:65 67.33333333333333 -char main::row#9 // row zp[1]:64 109.36363636363637 -__constant char main::s[$38] = "vera in tile mode 8 x 8, color depth 8 bits per pixel. -" -__constant char main::s1[$3a] = "in this mode, tiles are 8 pixels wide and 8 pixels tall. -" -__constant char main::s2[$2f] = "each tile can have a variation of 256 colors. -" -__constant char main::s3[$44] = "the vera palette of 256 colors, can be used by setting the palette -" -__constant char main::s4[$17] = "offset for each tile. -" -__constant char main::s5[$4b] = "here each column is displaying the same tile, but with different offsets! -" -__constant char main::s6[$3f] = "each offset aligns to multiples of 16 colors in the palette!. -" -__constant char main::s7[$3e] = "however, the first color will always be transparent (black). -" -char main::t -char main::t#1 // t zp[1]:63 151.5 -char main::t#5 // t zp[1]:63 25.25 -char main::textcolor1_color -unsigned int main::tile -unsigned int main::tile#1 // tile zp[2]:35 2002.0 -unsigned int main::tile#10 // tile zp[2]:35 202.0 -unsigned int main::tile#11 // tile zp[2]:35 202.0 -unsigned int main::tile#12 // tile zp[2]:35 350.5 -unsigned int main::tile#13 // tile zp[2]:35 350.5 -unsigned int main::tile#4 // tile zp[2]:35 2002.0 -unsigned int main::tile#6 // tile zp[2]:35 517.3333333333334 -unsigned int main::tile#8 // tile zp[2]:35 517.3333333333334 -char *main::tilebase -char *main::tilebase#2 // tilebase zp[2]:72 67.33333333333333 -char *main::tilebase#7 // tilebase zp[2]:72 28.857142857142858 -__constant char main::tiles[$40] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -char main::vera_layer_show1_layer -void memcpy_in_vram(char dest_bank , void *dest , char dest_increment , char src_bank , void *src , char src_increment , unsigned int num) -char memcpy_in_vram::$0 // reg byte a 2.0000000002E10 -char memcpy_in_vram::$1 // reg byte a 2.0000000002E10 -char memcpy_in_vram::$3 // reg byte a 2.0000000002E10 -char memcpy_in_vram::$4 // reg byte a 2.0000000002E10 -void *memcpy_in_vram::dest -void *memcpy_in_vram::dest#0 // dest zp[2]:6 1.9090909093636363E9 -char memcpy_in_vram::dest_bank -char memcpy_in_vram::dest_increment -unsigned int memcpy_in_vram::i -unsigned int memcpy_in_vram::i#1 // i zp[2]:2 2.0000000000002E13 -unsigned int memcpy_in_vram::i#2 // i zp[2]:2 1.0000000000001E13 -unsigned int memcpy_in_vram::num -unsigned int memcpy_in_vram::num#0 // num zp[2]:4 5.882941176471765E11 -void *memcpy_in_vram::src -char *memcpy_in_vram::src#0 // src zp[2]:10 1.6666666683333334E8 -char memcpy_in_vram::src_bank -char memcpy_in_vram::src_increment -void memcpy_to_vram(char vbank , void *vdest , void *src , unsigned int num) -char memcpy_to_vram::$0 // reg byte a 2002.0 -char memcpy_to_vram::$1 // reg byte a 2002.0 -char *memcpy_to_vram::end -__constant char *memcpy_to_vram::end#0 = (char *)(void *)main::tiles+$40 // end -unsigned int memcpy_to_vram::num -char *memcpy_to_vram::s -char *memcpy_to_vram::s#1 // s zp[2]:29 200002.0 -char *memcpy_to_vram::s#2 // s zp[2]:29 133334.66666666666 -void *memcpy_to_vram::src -char memcpy_to_vram::vbank -void *memcpy_to_vram::vdest -void *memcpy_to_vram::vdest#1 // vdest zp[2]:2 202.0 -void *memcpy_to_vram::vdest#2 // vdest zp[2]:2 525.75 -void printf_str(void (*putc)(char) , const char *s) -char printf_str::c -char printf_str::c#1 // reg byte a 1001.0 -void (*printf_str::putc)(char) -const char *printf_str::s -const char *printf_str::s#0 // s zp[2]:29 400.4 -const char *printf_str::s#10 // s zp[2]:29 101.0 -const char *printf_str::s#9 // s zp[2]:29 1552.0 -void screenlayer(char layer) -unsigned int screenlayer::$2 // zp[2]:15 202.0 -char screenlayer::$3 // reg byte a 202.0 -unsigned int screenlayer::$4 // zp[2]:55 202.0 -unsigned int screenlayer::$5 // zp[2]:43 202.0 -char screenlayer::layer -__constant char screenlayer::layer#0 = 1 // layer -char screenlayer::vera_layer_get_height1_$0 // reg byte a 202.0 -char screenlayer::vera_layer_get_height1_$1 // reg byte a 202.0 -char screenlayer::vera_layer_get_height1_$2 // reg byte a 202.0 -char screenlayer::vera_layer_get_height1_$3 // reg byte a 202.0 -char *screenlayer::vera_layer_get_height1_config -char *screenlayer::vera_layer_get_height1_config#0 // vera_layer_get_height1_config zp[2]:45 202.0 -char screenlayer::vera_layer_get_height1_layer -char screenlayer::vera_layer_get_height1_layer#0 // reg byte a 202.0 -unsigned int screenlayer::vera_layer_get_height1_return -unsigned int screenlayer::vera_layer_get_height1_return#0 // vera_layer_get_height1_return zp[2]:43 202.0 -unsigned int screenlayer::vera_layer_get_height1_return#1 // vera_layer_get_height1_return zp[2]:43 202.0 -char screenlayer::vera_layer_get_width1_$0 // reg byte a 202.0 -char screenlayer::vera_layer_get_width1_$1 // reg byte a 202.0 -char screenlayer::vera_layer_get_width1_$2 // reg byte a 202.0 -char screenlayer::vera_layer_get_width1_$3 // reg byte a 202.0 -char *screenlayer::vera_layer_get_width1_config -char *screenlayer::vera_layer_get_width1_config#0 // vera_layer_get_width1_config zp[2]:33 202.0 -char screenlayer::vera_layer_get_width1_layer -char screenlayer::vera_layer_get_width1_layer#0 // reg byte a 202.0 -unsigned int screenlayer::vera_layer_get_width1_return -unsigned int screenlayer::vera_layer_get_width1_return#0 // vera_layer_get_width1_return zp[2]:15 202.0 -unsigned int screenlayer::vera_layer_get_width1_return#1 // vera_layer_get_width1_return zp[2]:15 202.0 -void screensize(char *x , char *y) -char screensize::$1 // reg byte a 202.0 -char screensize::$3 // reg byte a 202.0 -char screensize::hscale -char screensize::hscale#0 // reg byte a 202.0 -char screensize::vscale -char screensize::vscale#0 // reg byte a 202.0 -char *screensize::x -__constant char *screensize::x#0 = &conio_screen_width // x -char *screensize::y -__constant char *screensize::y#0 = &conio_screen_height // y -__constant char vera_layer_backcolor[2] = { BLUE, BLUE } -__constant char *vera_layer_config[2] = { VERA_L0_CONFIG, VERA_L1_CONFIG } -__constant char vera_layer_enable[2] = { VERA_LAYER0_ENABLE, VERA_LAYER1_ENABLE } -char vera_layer_get_backcolor(char layer) -char vera_layer_get_backcolor::layer -char vera_layer_get_backcolor::layer#0 // reg byte x 1102.0 -char vera_layer_get_backcolor::return -char vera_layer_get_backcolor::return#0 // reg byte a 367.33333333333337 -char vera_layer_get_backcolor::return#2 // reg byte a 202.0 -char vera_layer_get_color(char layer) -char vera_layer_get_color::$0 // reg byte a 2.000000002E9 -char vera_layer_get_color::$1 // reg byte a 2.000000002E9 -char vera_layer_get_color::$3 // reg byte a 2.000000002E9 -char *vera_layer_get_color::addr -char *vera_layer_get_color::addr#0 // addr zp[2]:8 2.000000002E9 -char vera_layer_get_color::layer -char vera_layer_get_color::layer#0 // reg byte x 20002.0 -char vera_layer_get_color::layer#1 // reg byte x 2.00000002E8 -char vera_layer_get_color::layer#2 // reg byte x 6.833350010000001E8 -char vera_layer_get_color::return -char vera_layer_get_color::return#0 // reg byte a 2.000000002E9 -char vera_layer_get_color::return#1 // reg byte a 2.000000002E9 -char vera_layer_get_color::return#2 // reg byte a 5.25002501E8 -char vera_layer_get_color::return#3 // reg byte a 20002.0 -char vera_layer_get_color::return#4 // reg byte a 2.00000002E8 -char vera_layer_get_mapbase_bank(char layer) -char vera_layer_get_mapbase_bank::layer -char vera_layer_get_mapbase_bank::layer#0 // reg byte x 1102.0 -char vera_layer_get_mapbase_bank::return -char vera_layer_get_mapbase_bank::return#0 // reg byte a 367.33333333333337 -char vera_layer_get_mapbase_bank::return#2 // reg byte a 202.0 -unsigned int vera_layer_get_mapbase_offset(char layer) -char vera_layer_get_mapbase_offset::$0 // reg byte a 2002.0 -char vera_layer_get_mapbase_offset::layer -char vera_layer_get_mapbase_offset::layer#0 // reg byte a 1102.0 -unsigned int vera_layer_get_mapbase_offset::return -unsigned int vera_layer_get_mapbase_offset::return#0 // return zp[2]:15 367.33333333333337 -unsigned int vera_layer_get_mapbase_offset::return#2 // return zp[2]:15 202.0 -char vera_layer_get_rowshift(char layer) -char vera_layer_get_rowshift::layer -char vera_layer_get_rowshift::layer#0 // reg byte x 1102.0 -char vera_layer_get_rowshift::return -char vera_layer_get_rowshift::return#0 // reg byte a 367.33333333333337 -char vera_layer_get_rowshift::return#2 // reg byte a 202.0 -unsigned int vera_layer_get_rowskip(char layer) -char vera_layer_get_rowskip::$0 // reg byte a 2002.0 -char vera_layer_get_rowskip::layer -char vera_layer_get_rowskip::layer#0 // reg byte a 1102.0 -unsigned int vera_layer_get_rowskip::return -unsigned int vera_layer_get_rowskip::return#0 // return zp[2]:55 367.33333333333337 -unsigned int vera_layer_get_rowskip::return#2 // return zp[2]:55 202.0 -char vera_layer_get_textcolor(char layer) -char vera_layer_get_textcolor::layer -char vera_layer_get_textcolor::layer#0 // reg byte x 1102.0 -char vera_layer_get_textcolor::return -char vera_layer_get_textcolor::return#0 // reg byte a 367.33333333333337 -char vera_layer_get_textcolor::return#2 // reg byte a 202.0 -__constant const char vera_layer_hflip[2] = { 0, 4 } -__constant char *vera_layer_mapbase[2] = { VERA_L0_MAPBASE, VERA_L1_MAPBASE } -void vera_layer_mode_text(char layer , unsigned long mapbase_address , unsigned long tilebase_address , unsigned int mapwidth , unsigned int mapheight , char tilewidth , char tileheight , unsigned int color_mode) -unsigned int vera_layer_mode_text::color_mode -char vera_layer_mode_text::layer -__constant char vera_layer_mode_text::layer#0 = 1 // layer -unsigned long vera_layer_mode_text::mapbase_address -__constant unsigned long vera_layer_mode_text::mapbase_address#0 = 0 // mapbase_address -unsigned int vera_layer_mode_text::mapheight -__constant unsigned int vera_layer_mode_text::mapheight#0 = $40 // mapheight -unsigned int vera_layer_mode_text::mapwidth -__constant unsigned int vera_layer_mode_text::mapwidth#0 = $80 // mapwidth -unsigned long vera_layer_mode_text::tilebase_address -__constant unsigned long vera_layer_mode_text::tilebase_address#0 = $f800 // tilebase_address -char vera_layer_mode_text::tileheight -__constant char vera_layer_mode_text::tileheight#0 = 8 // tileheight -char vera_layer_mode_text::tilewidth -__constant char vera_layer_mode_text::tilewidth#0 = 8 // tilewidth -void vera_layer_mode_tile(char layer , unsigned long mapbase_address , unsigned long tilebase_address , unsigned int mapwidth , unsigned int mapheight , char tilewidth , char tileheight , char color_depth) -unsigned int vera_layer_mode_tile::$1 // zp[2]:55 1001.0 -char vera_layer_mode_tile::$11 // reg byte a 2002.0 -char vera_layer_mode_tile::$12 // reg byte a 2002.0 -char vera_layer_mode_tile::$13 // reg byte a 2002.0 -char vera_layer_mode_tile::$14 // reg byte a 2002.0 -char vera_layer_mode_tile::$17 // zp[1]:61 250.25 -char vera_layer_mode_tile::$18 // zp[1]:60 273.0 -char vera_layer_mode_tile::$2 // reg byte a 2002.0 -unsigned int vera_layer_mode_tile::$6 // zp[2]:45 2002.0 -char vera_layer_mode_tile::$7 // reg byte a 2002.0 -char vera_layer_mode_tile::color_depth -char vera_layer_mode_tile::color_depth#2 // reg byte x 1001.0 -char vera_layer_mode_tile::config -char vera_layer_mode_tile::config#10 // reg byte x 2002.0 -char vera_layer_mode_tile::config#11 // reg byte x 2002.0 -char vera_layer_mode_tile::config#12 // reg byte x 2002.0 -char vera_layer_mode_tile::config#17 // reg byte x 625.625 -char vera_layer_mode_tile::config#21 // reg byte x 2002.0000000000002 -char vera_layer_mode_tile::config#25 // reg byte x 3003.0 -char vera_layer_mode_tile::config#6 // reg byte x 500.5 -char vera_layer_mode_tile::config#7 // reg byte x 500.5 -char vera_layer_mode_tile::config#8 // reg byte x 500.5 -char vera_layer_mode_tile::layer -char vera_layer_mode_tile::layer#10 // layer zp[1]:62 227.49999999999994 -char vera_layer_mode_tile::mapbase -char vera_layer_mode_tile::mapbase#0 // reg byte x 1001.0 -unsigned long vera_layer_mode_tile::mapbase_address -unsigned long vera_layer_mode_tile::mapbase_address#0 // mapbase_address zp[4]:47 2002.0 -unsigned long vera_layer_mode_tile::mapbase_address#10 // mapbase_address_1 zp[4]:74 88.97777777777777 -unsigned int vera_layer_mode_tile::mapheight -unsigned int vera_layer_mode_tile::mapheight#10 // mapheight zp[2]:68 133.46666666666667 -unsigned int vera_layer_mode_tile::mapwidth -unsigned int vera_layer_mode_tile::mapwidth#10 // mapwidth zp[2]:15 400.4 -char vera_layer_mode_tile::tilebase -char vera_layer_mode_tile::tilebase#0 // reg byte a 2002.0 -char vera_layer_mode_tile::tilebase#1 // reg byte x 1334.6666666666667 -char vera_layer_mode_tile::tilebase#10 // reg byte x 2002.0 -char vera_layer_mode_tile::tilebase#12 // reg byte x 2002.0000000000002 -char vera_layer_mode_tile::tilebase#3 // reg byte x 2002.0 -char vera_layer_mode_tile::tilebase#5 // reg byte x 2002.0 -unsigned long vera_layer_mode_tile::tilebase_address -unsigned long vera_layer_mode_tile::tilebase_address#0 // tilebase_address zp[4]:51 2002.0 -unsigned long vera_layer_mode_tile::tilebase_address#10 // tilebase_address_1 zp[4]:78 72.8 -char vera_layer_mode_tile::tileheight -char vera_layer_mode_tile::tileheight#10 // tileheight zp[1]:85 31.77777777777778 -char vera_layer_mode_tile::tilewidth -char vera_layer_mode_tile::tilewidth#10 // tilewidth zp[1]:84 33.932203389830505 -__constant char vera_layer_rowshift[2] = { 0, 0 } -__constant unsigned int vera_layer_rowskip[2] = { 0, 0 } -char vera_layer_set_backcolor(char layer , char color) -char vera_layer_set_backcolor::color -char vera_layer_set_backcolor::color#2 // reg byte a 101.0 -char vera_layer_set_backcolor::layer -char vera_layer_set_backcolor::layer#1 // reg byte x 22.0 -char vera_layer_set_backcolor::layer#2 // reg byte x 112.0 -char vera_layer_set_backcolor::old -char vera_layer_set_backcolor::return -void vera_layer_set_config(char layer , char config) -char vera_layer_set_config::$0 // reg byte a 20002.0 -char *vera_layer_set_config::addr -char *vera_layer_set_config::addr#0 // addr zp[2]:33 20002.0 -char vera_layer_set_config::config -char vera_layer_set_config::config#0 // reg byte x 3667.333333333333 -char vera_layer_set_config::layer -char vera_layer_set_config::layer#0 // reg byte a 5501.0 -void vera_layer_set_mapbase(char layer , char mapbase) -char vera_layer_set_mapbase::$0 // reg byte a 20002.0 -char *vera_layer_set_mapbase::addr -char *vera_layer_set_mapbase::addr#0 // addr zp[2]:33 20002.0 -char vera_layer_set_mapbase::layer -char vera_layer_set_mapbase::layer#0 // reg byte a 1001.0 -char vera_layer_set_mapbase::layer#3 // reg byte a 11002.0 -char vera_layer_set_mapbase::mapbase -char vera_layer_set_mapbase::mapbase#0 // reg byte x 2002.0 -char vera_layer_set_mapbase::mapbase#3 // reg byte x 3667.333333333333 -void vera_layer_set_text_color_mode(char layer , char color_mode) -char *vera_layer_set_text_color_mode::addr -char *vera_layer_set_text_color_mode::addr#0 // addr zp[2]:43 2502.5 -char vera_layer_set_text_color_mode::color_mode -char vera_layer_set_text_color_mode::layer -char vera_layer_set_textcolor(char layer , char color) -char vera_layer_set_textcolor::color -char vera_layer_set_textcolor::layer -char vera_layer_set_textcolor::layer#1 // reg byte x 22.0 -char vera_layer_set_textcolor::layer#2 // reg byte x 112.0 -char vera_layer_set_textcolor::old -char vera_layer_set_textcolor::return -void vera_layer_set_tilebase(char layer , char tilebase) -char vera_layer_set_tilebase::$0 // reg byte a 20002.0 -char *vera_layer_set_tilebase::addr -char *vera_layer_set_tilebase::addr#0 // addr zp[2]:33 20002.0 -char vera_layer_set_tilebase::layer -char vera_layer_set_tilebase::layer#0 // reg byte a 5501.0 -char vera_layer_set_tilebase::tilebase -char vera_layer_set_tilebase::tilebase#0 // reg byte x 3667.333333333333 -__constant char vera_layer_textcolor[2] = { WHITE, WHITE } -__constant char *vera_layer_tilebase[2] = { VERA_L0_TILEBASE, VERA_L1_TILEBASE } -__constant const char vera_layer_vflip[2] = { 0, 8 } -__constant unsigned long vera_mapbase_address[2] = { 0, 0 } -__constant char vera_mapbase_bank[2] = { 0, 0 } -__constant unsigned int vera_mapbase_offset[2] = { 0, 0 } -void vera_tile_area(char layer , unsigned int tileindex , char x , char y , char w , char h , char hflip , char vflip , char offset) -unsigned int vera_tile_area::$10 // zp[2]:2 20002.0 -unsigned int vera_tile_area::$4 // zp[2]:2 20002.0 -char vera_tile_area::$5 // reg byte a 20002.0 -char vera_tile_area::c -char vera_tile_area::c#1 // reg byte y 2.00000002E8 -char vera_tile_area::c#2 // reg byte y 7.500000075E7 -char vera_tile_area::h -char vera_tile_area::h#4 // h zp[1]:31 312500.03125 -char vera_tile_area::hflip -char vera_tile_area::hflip#0 // hflip zp[1]:40 5000.5 -char vera_tile_area::index_h -char vera_tile_area::index_h#0 // reg byte a 20002.0 -char vera_tile_area::index_h#1 // reg byte a 20002.0 -char vera_tile_area::index_h#2 // index_h zp[1]:26 4348260.956521738 -char vera_tile_area::index_l -char vera_tile_area::index_l#0 // index_l zp[1]:27 3846538.5384615385 -char vera_tile_area::layer -unsigned long vera_tile_area::mapbase -unsigned long vera_tile_area::mapbase#0 // mapbase zp[4]:19 1818.3636363636363 -unsigned long vera_tile_area::mapbase#1 // mapbase zp[4]:19 10001.0 -unsigned long vera_tile_area::mapbase#10 // mapbase zp[4]:19 3334000.4 -unsigned long vera_tile_area::mapbase#2 // mapbase zp[4]:19 20002.0 -unsigned long vera_tile_area::mapbase#3 // mapbase zp[4]:19 1.0000001E7 -char vera_tile_area::offset -char vera_tile_area::r -char vera_tile_area::r#1 // r zp[1]:12 2.0000002E7 -char vera_tile_area::r#2 // r zp[1]:12 1875000.1875 -unsigned int vera_tile_area::rowskip -unsigned int vera_tile_area::rowskip#0 // rowskip zp[2]:8 345172.4827586207 -char vera_tile_area::shift -char vera_tile_area::shift#0 // shift zp[1]:42 3333.6666666666665 -unsigned int vera_tile_area::tileindex -unsigned int vera_tile_area::tileindex#1 // tileindex zp[2]:35 667.3333333333334 -unsigned int vera_tile_area::tileindex#2 // tileindex zp[2]:35 667.3333333333334 -unsigned int vera_tile_area::tileindex#3 // tileindex zp[2]:35 3143.4285714285716 -char vera_tile_area::vera_vram_address01_$0 // reg byte a 2.0000002E7 -char vera_tile_area::vera_vram_address01_$1 // reg byte a 2.0000002E7 -char vera_tile_area::vera_vram_address01_$2 // reg byte a 2.0000002E7 -char vera_tile_area::vera_vram_address01_$3 // reg byte a 2.0000002E7 -unsigned long vera_tile_area::vera_vram_address01_bankaddr -char vera_tile_area::vera_vram_address01_incr -char vera_tile_area::vflip -char vera_tile_area::vflip#0 // vflip zp[1]:26 5000.5 -char vera_tile_area::w -char vera_tile_area::w#9 // w zp[1]:13 3125000.03125 -char vera_tile_area::x -char vera_tile_area::x#1 // x zp[1]:41 1001.0 -char vera_tile_area::x#2 // x zp[1]:41 1001.0 -char vera_tile_area::x#3 // x zp[1]:41 923.3076923076923 -char vera_tile_area::y -char vera_tile_area::y#1 // y zp[1]:37 2002.0 -char vera_tile_area::y#2 // y zp[1]:37 2002.0 -char vera_tile_area::y#3 // y zp[1]:37 200.2 -__constant unsigned long vera_tilebase_address[2] = { 0, 0 } -__constant char vera_tilebase_bank[2] = { 0, 0 } -__constant unsigned int vera_tilebase_offset[2] = { 0, 0 } - -zp[1]:82 [ conio_x16_init::line#3 conio_x16_init::line#1 conio_x16_init::line#0 ] -zp[2]:17 [ CONIO_SCREEN_TEXT#17 ] -zp[1]:59 [ CONIO_SCREEN_BANK#15 ] -zp[2]:72 [ main::tilebase#7 main::tilebase#2 ] -zp[1]:63 [ main::t#5 main::t#1 ] -reg byte x [ main::p#2 main::p#1 ] -zp[1]:64 [ main::row#9 main::row#1 ] -zp[1]:66 [ main::r#5 main::r#1 ] -zp[2]:35 [ main::tile#6 main::tile#10 main::tile#12 main::tile#1 vera_tile_area::tileindex#3 vera_tile_area::tileindex#2 vera_tile_area::tileindex#1 main::tile#8 main::tile#11 main::tile#13 main::tile#4 ] -reg byte x [ main::column#2 main::column#1 ] -zp[1]:57 [ main::c#2 main::c#1 ] -zp[1]:65 [ main::row#11 main::row#3 ] -zp[1]:67 [ main::r1#5 main::r1#1 ] -zp[1]:41 [ main::column1#2 main::column1#1 vera_tile_area::x#3 vera_tile_area::x#2 vera_tile_area::x#1 ] -reg byte x [ main::c1#2 main::c1#1 ] -reg byte x [ vera_layer_set_textcolor::layer#2 vera_layer_set_textcolor::layer#1 ] -reg byte x [ vera_layer_set_backcolor::layer#2 vera_layer_set_backcolor::layer#1 ] -reg byte a [ vera_layer_set_backcolor::color#2 ] -reg byte a [ vera_layer_set_mapbase::layer#3 vera_layer_set_mapbase::layer#0 ] -reg byte x [ vera_layer_set_mapbase::mapbase#3 vera_layer_set_mapbase::mapbase#0 ] -reg byte x [ gotoxy::y#5 gotoxy::y#4 gotoxy::y#1 gotoxy::y#2 ] -reg byte x [ vera_layer_get_color::layer#2 vera_layer_get_color::layer#1 vera_layer_get_color::layer#0 ] -reg byte a [ vera_layer_get_color::return#2 vera_layer_get_color::return#0 vera_layer_get_color::return#1 ] -reg byte x [ clrscr::l#2 clrscr::l#1 ] -reg byte y [ clrscr::c#2 clrscr::c#1 ] -reg byte x [ vera_layer_mode_tile::color_depth#2 ] -zp[1]:62 [ vera_layer_mode_tile::layer#10 ] -zp[2]:68 [ vera_layer_mode_tile::mapheight#10 ] -zp[4]:74 [ vera_layer_mode_tile::mapbase_address#10 ] -zp[4]:78 [ vera_layer_mode_tile::tilebase_address#10 ] -zp[1]:84 [ vera_layer_mode_tile::tilewidth#10 ] -zp[1]:85 [ vera_layer_mode_tile::tileheight#10 ] -reg byte x [ vera_layer_mode_tile::config#25 vera_layer_mode_tile::config#21 vera_layer_mode_tile::config#17 vera_layer_mode_tile::config#6 vera_layer_mode_tile::config#7 vera_layer_mode_tile::config#8 vera_layer_mode_tile::config#10 vera_layer_mode_tile::config#11 vera_layer_mode_tile::config#12 ] -reg byte x [ vera_layer_mode_tile::tilebase#10 vera_layer_mode_tile::tilebase#12 vera_layer_mode_tile::tilebase#1 vera_layer_mode_tile::tilebase#3 vera_layer_mode_tile::tilebase#5 ] -zp[4]:19 [ vera_tile_area::mapbase#10 vera_tile_area::mapbase#2 vera_tile_area::mapbase#3 vera_tile_area::mapbase#1 vera_tile_area::mapbase#0 ] -reg byte y [ vera_tile_area::c#2 vera_tile_area::c#1 ] -zp[2]:29 [ printf_str::s#9 printf_str::s#10 printf_str::s#0 memcpy_to_vram::s#2 memcpy_to_vram::s#1 ] -reg byte x [ insertup::i#2 insertup::i#1 ] -zp[1]:14 [ conio_screen_width ] -zp[1]:32 [ conio_screen_height ] -zp[1]:28 [ conio_screen_layer ] -zp[2]:70 [ conio_width ] -zp[2]:38 [ conio_height ] -zp[1]:23 [ conio_rowshift ] -zp[2]:24 [ conio_rowskip ] -zp[1]:37 [ cputc::c#0 vera_tile_area::y#3 vera_tile_area::y#2 vera_tile_area::y#1 ] -reg byte a [ vera_layer_get_color::return#3 ] -reg byte x [ cputc::color#0 ] -reg byte a [ cputc::$15 ] -reg byte a [ cputc::$2 ] -reg byte a [ cputc::$4 ] -reg byte a [ cputc::$5 ] -reg byte a [ cputc::$6 ] -reg byte a [ cputc::scroll_enable#0 ] -reg byte a [ kbhit::return#2 ] -reg byte a [ main::$25 ] -reg byte a [ screensize::hscale#0 ] -reg byte a [ screensize::$1 ] -reg byte a [ screensize::vscale#0 ] -reg byte a [ screensize::$3 ] -reg byte x [ vera_layer_get_mapbase_bank::layer#0 ] -reg byte a [ vera_layer_get_mapbase_bank::return#2 ] -zp[1]:86 [ CONIO_SCREEN_BANK#11 ] -reg byte a [ vera_layer_get_mapbase_offset::layer#0 ] -zp[2]:87 [ CONIO_SCREEN_TEXT#13 ] -reg byte a [ screenlayer::vera_layer_get_width1_layer#0 ] -reg byte a [ screenlayer::vera_layer_get_width1_$2 ] -reg byte a [ screenlayer::vera_layer_get_width1_$0 ] -reg byte a [ screenlayer::vera_layer_get_width1_$1 ] -reg byte a [ screenlayer::vera_layer_get_width1_$3 ] -reg byte x [ vera_layer_get_rowshift::layer#0 ] -reg byte a [ vera_layer_get_rowshift::return#2 ] -reg byte a [ screenlayer::$3 ] -reg byte a [ vera_layer_get_rowskip::layer#0 ] -reg byte a [ screenlayer::vera_layer_get_height1_layer#0 ] -reg byte a [ screenlayer::vera_layer_get_height1_$2 ] -reg byte a [ screenlayer::vera_layer_get_height1_$0 ] -reg byte a [ screenlayer::vera_layer_get_height1_$1 ] -reg byte a [ screenlayer::vera_layer_get_height1_$3 ] -reg byte a [ vera_layer_set_mapbase::$0 ] -zp[2]:15 [ gotoxy::$6 gotoxy::line_offset#0 screenlayer::vera_layer_get_width1_return#0 screenlayer::vera_layer_get_width1_return#1 screenlayer::$2 vera_layer_get_mapbase_offset::return#2 vera_layer_get_mapbase_offset::return#0 vera_layer_mode_tile::mapwidth#10 ] -reg byte a [ gotoxy::$5 ] -reg byte a [ vera_layer_get_color::$3 ] -reg byte a [ vera_layer_get_color::$0 ] -reg byte a [ vera_layer_get_color::$1 ] -reg byte a [ cputln::$2 ] -reg byte a [ cputln::$3 ] -reg byte x [ vera_layer_get_backcolor::layer#0 ] -reg byte a [ vera_layer_get_backcolor::return#2 ] -reg byte a [ clrscr::$0 ] -zp[1]:83 [ clrscr::$1 ] -reg byte x [ vera_layer_get_textcolor::layer#0 ] -reg byte a [ vera_layer_get_textcolor::return#2 ] -reg byte a [ clrscr::$2 ] -zp[1]:31 [ clrscr::color#0 vera_tile_area::h#4 ] -reg byte a [ clrscr::$9 ] -reg byte a [ clrscr::$5 ] -reg byte a [ clrscr::$6 ] -reg byte a [ clrscr::$7 ] -reg byte a [ vera_layer_mode_tile::$14 ] -reg byte a [ vera_layer_set_config::layer#0 ] -reg byte x [ vera_layer_set_config::config#0 ] -zp[2]:55 [ vera_layer_mode_tile::$1 vera_layer_get_rowskip::return#2 screenlayer::$4 vera_layer_get_rowskip::return#0 ] -zp[1]:61 [ vera_layer_mode_tile::$17 ] -reg byte a [ vera_layer_mode_tile::$2 ] -zp[1]:60 [ vera_layer_mode_tile::$18 ] -zp[4]:47 [ vera_layer_mode_tile::mapbase_address#0 ] -reg byte x [ vera_layer_mode_tile::mapbase#0 ] -zp[2]:45 [ vera_layer_mode_tile::$6 screenlayer::vera_layer_get_height1_config#0 ] -reg byte a [ vera_layer_mode_tile::$7 ] -zp[4]:51 [ vera_layer_mode_tile::tilebase_address#0 ] -reg byte a [ vera_layer_mode_tile::tilebase#0 ] -reg byte a [ vera_layer_set_tilebase::layer#0 ] -reg byte x [ vera_layer_set_tilebase::tilebase#0 ] -reg byte a [ vera_layer_mode_tile::$13 ] -reg byte a [ vera_layer_mode_tile::$12 ] -reg byte a [ vera_layer_mode_tile::$11 ] -reg byte a [ memcpy_to_vram::$0 ] -reg byte a [ memcpy_to_vram::$1 ] -zp[1]:42 [ vera_tile_area::shift#0 ] -zp[2]:8 [ vera_tile_area::rowskip#0 cputc::conio_addr#0 cputc::conio_addr#1 cputln::temp#0 cputln::temp#1 vera_layer_get_color::addr#0 ] -zp[1]:40 [ vera_tile_area::hflip#0 ] -zp[1]:26 [ vera_tile_area::vflip#0 vera_tile_area::index_h#2 ] -zp[1]:27 [ vera_tile_area::index_l#0 ] -reg byte a [ vera_tile_area::index_h#0 ] -reg byte a [ vera_tile_area::index_h#1 ] -zp[2]:2 [ vera_tile_area::$10 vera_tile_area::$4 cputc::$16 memcpy_in_vram::i#2 memcpy_in_vram::i#1 clearline::c#2 clearline::c#1 memcpy_to_vram::vdest#2 memcpy_to_vram::vdest#1 clrscr::line_text#2 clrscr::line_text#1 clrscr::line_text#0 ] -reg byte a [ vera_tile_area::$5 ] -reg byte a [ vera_tile_area::vera_vram_address01_$0 ] -reg byte a [ vera_tile_area::vera_vram_address01_$1 ] -reg byte a [ vera_tile_area::vera_vram_address01_$2 ] -reg byte a [ vera_tile_area::vera_vram_address01_$3 ] -reg byte a [ printf_str::c#1 ] -zp[1]:58 [ kbhit::ch ] -reg byte a [ kbhit::return#0 ] -reg byte a [ kbhit::return#1 ] -zp[2]:43 [ vera_layer_set_text_color_mode::addr#0 screenlayer::vera_layer_get_height1_return#0 screenlayer::vera_layer_get_height1_return#1 screenlayer::$5 ] -reg byte a [ vera_layer_get_mapbase_bank::return#0 ] -reg byte a [ vera_layer_get_mapbase_offset::$0 ] -reg byte a [ vera_layer_get_rowshift::return#0 ] -reg byte a [ vera_layer_get_rowskip::$0 ] -reg byte a [ vera_layer_get_backcolor::return#0 ] -reg byte a [ vera_layer_get_textcolor::return#0 ] -reg byte a [ vera_layer_set_config::$0 ] -reg byte a [ vera_layer_set_tilebase::$0 ] -zp[2]:33 [ vera_layer_set_tilebase::addr#0 vera_layer_set_config::addr#0 vera_layer_set_mapbase::addr#0 screenlayer::vera_layer_get_width1_config#0 ] -zp[1]:13 [ insertup::cy#0 vera_tile_area::w#9 ] -zp[1]:12 [ insertup::width#0 vera_tile_area::r#2 vera_tile_area::r#1 ] -reg byte a [ insertup::$3 ] -zp[2]:6 [ insertup::line#0 insertup::start#0 memcpy_in_vram::dest#0 ] -zp[2]:4 [ memcpy_in_vram::num#0 ] -reg byte a [ clearline::$5 ] -zp[2]:10 [ clearline::addr#0 memcpy_in_vram::src#0 ] -reg byte a [ clearline::$1 ] -reg byte a [ clearline::$2 ] -reg byte a [ vera_layer_get_color::return#4 ] -reg byte x [ clearline::color#0 ] -reg byte a [ memcpy_in_vram::$0 ] -reg byte a [ memcpy_in_vram::$1 ] -reg byte a [ memcpy_in_vram::$3 ] -reg byte a [ memcpy_in_vram::$4 ] diff --git a/src/test/ref/examples/helloworld/helloworld.log b/src/test/ref/examples/helloworld/helloworld.log index 06f0e6a9a..b5aa40ebc 100644 --- a/src/test/ref/examples/helloworld/helloworld.log +++ b/src/test/ref/examples/helloworld/helloworld.log @@ -12,6 +12,8 @@ Eliminating unused variable with no statement memcpy::$0 Eliminating unused variable with no statement memset::$2 Eliminating unused variable with no statement gotoxy::$4 Eliminating unused variable with no statement printf_buffer +Eliminating unused variable with no statement __snprintf_capacity +Eliminating unused variable with no statement __snprintf_size Eliminating unused variable with no statement main::$0 Calling convention STACK_CALL adding prepare/execute/finalize for call *printf_str::putc printf_str::c Calling convention STACK_CALL replacing param(cputc::c) with stackidx(char,cputc::OFFSET_STACK_C) diff --git a/src/test/ref/examples/mega65/dypp65.log b/src/test/ref/examples/mega65/dypp65.log index 164eb0c8e..f96c42980 100644 --- a/src/test/ref/examples/mega65/dypp65.log +++ b/src/test/ref/examples/mega65/dypp65.log @@ -42,6 +42,7 @@ Setting inferred volatile on symbol affected by address-of: memoryRemap256M::yVa Setting inferred volatile on symbol affected by address-of: memoryRemap256M::zVal in asm { ldalMb ldx#$0f ldyuMb ldz#$0f map ldaaVal ldxxVal ldyyVal ldzzVal map eom } Inlined call vicSelectGfxBank::$0 = call toDd00(vicSelectGfxBank::gfx) Inlined call call SEI +Inlined call call __init Eliminating unused variable with no statement memoryRemap::$0 Eliminating unused variable with no statement memoryRemap::$4 Eliminating unused variable with no statement memoryRemap::$5 @@ -129,7 +130,7 @@ memset_dma256::@return: scope:[memset_dma256] from memset_dma256 to:@return void main() -main: scope:[main] from __start +main: scope:[main] from __start::@1 to:main::SEI1 main::SEI1: scope:[main] from main asm { sei } @@ -276,11 +277,15 @@ main::@return: scope:[main] from void __start() __start: scope:[__start] from - call main + to:__start::__init1 +__start::__init1: scope:[__start] from __start to:__start::@1 -__start::@1: scope:[__start] from __start +__start::@1: scope:[__start] from __start::__init1 + call main + to:__start::@2 +__start::@2: scope:[__start] from __start::@1 to:__start::@return -__start::@return: scope:[__start] from __start::@1 +__start::@return: scope:[__start] from __start::@2 return to:@return @@ -756,7 +761,9 @@ Eliminating unused constant OFFSET_STRUCT_F018_DMAGIC_ADDRLSBTRIG Successful SSA optimization PassNEliminateUnusedVars Removing unused procedure __start Removing unused procedure block __start +Removing unused procedure block __start::__init1 Removing unused procedure block __start::@1 +Removing unused procedure block __start::@2 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart Constant right-side identified [0] memoryRemap::aVal = byte0 memoryRemap::lowerPageOffset#0 diff --git a/src/test/ref/examples/mega65/helloworld-mega65.log b/src/test/ref/examples/mega65/helloworld-mega65.log index f4fcca264..70d7a8b67 100644 --- a/src/test/ref/examples/mega65/helloworld-mega65.log +++ b/src/test/ref/examples/mega65/helloworld-mega65.log @@ -30,6 +30,8 @@ Eliminating unused variable with no statement memoryRemap::$5 Eliminating unused variable with no statement memoryRemap::$9 Eliminating unused variable with no statement conio_mega65_init::$2 Eliminating unused variable with no statement printf_buffer +Eliminating unused variable with no statement __snprintf_capacity +Eliminating unused variable with no statement __snprintf_size Eliminating unused variable with no statement main::$0 Calling convention STACK_CALL adding prepare/execute/finalize for call *printf_str::putc printf_str::c Calling convention STACK_CALL replacing param(cputc::c) with stackidx(char,cputc::OFFSET_STACK_C) diff --git a/src/test/ref/examples/memfast/memfast.asm b/src/test/ref/examples/memfast/memfast.asm new file mode 100644 index 000000000..723a2de0a --- /dev/null +++ b/src/test/ref/examples/memfast/memfast.asm @@ -0,0 +1,170 @@ +/** + * @file memfast.c + * @author Sven Van de Velde (sven.van.de.velde@telenet.be) + * @brief Demonstration of functions memcpy_fast and memset_fast + * for 8 bit architectures. + * @version 0.1 + * @date 2023-04-14 + * + * @copyright Copyright (c) 2023 + * + */ + // Commodore 64 PRG executable file +.file [name="memfast.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(__start) + .const LIGHT_BLUE = $e + /// Color Ram + .label COLORRAM = $d800 + /// Default address of screen character matrix + .label DEFAULT_SCREEN = $400 +.segment Code +__start: { + // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) + jsr conio_c64_init + jsr main + rts +} +// Set initial cursor position +conio_c64_init: { + // Position cursor at current line + .label BASIC_CURSOR_LINE = $d6 + // char line = *BASIC_CURSOR_LINE + lda.z BASIC_CURSOR_LINE + // if(line>=CONIO_HEIGHT) + cmp #$19 + bcc __b1 + lda #$19-1 + __b1: + // gotoxy(0, line) + jsr gotoxy + // } + rts +} +main: { + .label screen = $400 + .label bottom = $400+$28*$c + // *((char*)0xd018) = 0x17 + // Show mixed chars on screen + lda #$17 + sta $d018 + // clrscr() + // Clear screen + jsr clrscr + ldy #0 + __b1: + ldx #<$100 + memset_fast1___b1: + // *(destination+num) = c + tya + sta screen,x + // num--; + dex + // while(num) + cpx #0 + bne memset_fast1___b1 + // memcpy_fast(bottom, screen, 256) + // 256 will be truncated to 0, which will copy 256 bytes! + jsr memcpy_fast + // for(char i:0..255) + iny + cpy #0 + bne __b1 + // } + rts +} +// Set the cursor to the specified position +// void gotoxy(char x, __register(A) char y) +gotoxy: { + // if(y>CONIO_HEIGHT) + cmp #$19+1 + // } + rts +} +// clears the screen and moves the cursor to the upper left-hand corner of the screen. +clrscr: { + .label line_text = 4 + .label line_cols = 2 + lda #COLORRAM + sta.z line_cols+1 + lda #DEFAULT_SCREEN + sta.z line_text+1 + ldx #0 + __b1: + // for( char l=0;l $19 + gotoxy::$1 = ! gotoxy::$0 + if(gotoxy::$1) goto gotoxy::@1 + to:gotoxy::@2 +gotoxy::@1: scope:[gotoxy] from gotoxy gotoxy::@2 + gotoxy::x#2 = phi( gotoxy/gotoxy::x#3, gotoxy::@2/gotoxy::x#4 ) + gotoxy::$2 = gotoxy::x#2 >= $28 + gotoxy::$3 = ! gotoxy::$2 + if(gotoxy::$3) goto gotoxy::@return + to:gotoxy::@3 +gotoxy::@2: scope:[gotoxy] from gotoxy + gotoxy::x#4 = phi( gotoxy/gotoxy::x#3 ) + gotoxy::y#0 = 0 + to:gotoxy::@1 +gotoxy::@3: scope:[gotoxy] from gotoxy::@1 + gotoxy::x#0 = 0 + to:gotoxy::@return +gotoxy::@return: scope:[gotoxy] from gotoxy::@1 gotoxy::@3 + return + to:@return + +char * memcpy_fast(char *destination , char *source , char num) +memcpy_fast: scope:[memcpy_fast] from main::@2 + memcpy_fast::source#2 = phi( main::@2/memcpy_fast::source#0 ) + memcpy_fast::num#3 = phi( main::@2/memcpy_fast::num#1 ) + memcpy_fast::destination#3 = phi( main::@2/memcpy_fast::destination#0 ) + to:memcpy_fast::@1 +memcpy_fast::@1: scope:[memcpy_fast] from memcpy_fast memcpy_fast::@1 + memcpy_fast::source#1 = phi( memcpy_fast/memcpy_fast::source#2, memcpy_fast::@1/memcpy_fast::source#1 ) + memcpy_fast::num#2 = phi( memcpy_fast/memcpy_fast::num#3, memcpy_fast::@1/memcpy_fast::num#0 ) + memcpy_fast::destination#1 = phi( memcpy_fast/memcpy_fast::destination#3, memcpy_fast::@1/memcpy_fast::destination#1 ) + memcpy_fast::$0 = memcpy_fast::destination#1 + memcpy_fast::num#2 + memcpy_fast::$1 = memcpy_fast::source#1 + memcpy_fast::num#2 + *memcpy_fast::$0 = *memcpy_fast::$1 + memcpy_fast::num#0 = -- memcpy_fast::num#2 + memcpy_fast::$2 = 0 != memcpy_fast::num#0 + if(memcpy_fast::$2) goto memcpy_fast::@1 + to:memcpy_fast::@2 +memcpy_fast::@2: scope:[memcpy_fast] from memcpy_fast::@1 + memcpy_fast::destination#2 = phi( memcpy_fast::@1/memcpy_fast::destination#1 ) + memcpy_fast::return#0 = memcpy_fast::destination#2 + to:memcpy_fast::@return +memcpy_fast::@return: scope:[memcpy_fast] from memcpy_fast::@2 + memcpy_fast::return#3 = phi( memcpy_fast::@2/memcpy_fast::return#0 ) + memcpy_fast::return#1 = memcpy_fast::return#3 + return + to:@return + +void conio_c64_init() +conio_c64_init: scope:[conio_c64_init] from __start::__init1 + conio_c64_init::line#0 = *conio_c64_init::BASIC_CURSOR_LINE + conio_c64_init::$0 = conio_c64_init::line#0 >= $19 + conio_c64_init::$1 = ! conio_c64_init::$0 + if(conio_c64_init::$1) goto conio_c64_init::@1 + to:conio_c64_init::@2 +conio_c64_init::@1: scope:[conio_c64_init] from conio_c64_init conio_c64_init::@2 + conio_c64_init::line#2 = phi( conio_c64_init/conio_c64_init::line#0, conio_c64_init::@2/conio_c64_init::line#1 ) + gotoxy::x#1 = 0 + gotoxy::y#1 = conio_c64_init::line#2 + call gotoxy + to:conio_c64_init::@3 +conio_c64_init::@3: scope:[conio_c64_init] from conio_c64_init::@1 + to:conio_c64_init::@return +conio_c64_init::@2: scope:[conio_c64_init] from conio_c64_init + conio_c64_init::line#1 = $19-1 + to:conio_c64_init::@1 +conio_c64_init::@return: scope:[conio_c64_init] from conio_c64_init::@3 + return + to:@return + +void main() +main: scope:[main] from __start::@1 + *((char *)$d018) = $17 + call clrscr + to:main::@3 +main::@3: scope:[main] from main + main::i#0 = 0 + to:main::@1 +main::@1: scope:[main] from main::@3 main::@4 + main::i#2 = phi( main::@3/main::i#0, main::@4/main::i#1 ) + main::memset_fast1_destination#0 = main::screen + main::memset_fast1_c#0 = main::i#2 + main::memset_fast1_num#0 = $100 + to:main::memset_fast1 +main::memset_fast1: scope:[main] from main::@1 + main::i#6 = phi( main::@1/main::i#2 ) + main::memset_fast1_c#2 = phi( main::@1/main::memset_fast1_c#0 ) + main::memset_fast1_num#3 = phi( main::@1/main::memset_fast1_num#0 ) + main::memset_fast1_destination#2 = phi( main::@1/main::memset_fast1_destination#0 ) + to:main::memset_fast1_@1 +main::memset_fast1_@1: scope:[main] from main::memset_fast1 main::memset_fast1_@1 + main::i#5 = phi( main::memset_fast1/main::i#6, main::memset_fast1_@1/main::i#5 ) + main::memset_fast1_c#1 = phi( main::memset_fast1/main::memset_fast1_c#2, main::memset_fast1_@1/main::memset_fast1_c#1 ) + main::memset_fast1_num#2 = phi( main::memset_fast1/main::memset_fast1_num#3, main::memset_fast1_@1/main::memset_fast1_num#1 ) + main::memset_fast1_destination#1 = phi( main::memset_fast1/main::memset_fast1_destination#2, main::memset_fast1_@1/main::memset_fast1_destination#1 ) + main::memset_fast1_$0 = main::memset_fast1_destination#1 + main::memset_fast1_num#2 + *main::memset_fast1_$0 = main::memset_fast1_c#1 + main::memset_fast1_num#1 = -- main::memset_fast1_num#2 + main::memset_fast1_$1 = 0 != main::memset_fast1_num#1 + if(main::memset_fast1_$1) goto main::memset_fast1_@1 + to:main::@2 +main::@2: scope:[main] from main::memset_fast1_@1 + main::i#4 = phi( main::memset_fast1_@1/main::i#5 ) + memcpy_fast::destination#0 = main::bottom + memcpy_fast::source#0 = main::screen + memcpy_fast::num#1 = $100 + call memcpy_fast + memcpy_fast::return#2 = memcpy_fast::return#1 + to:main::@4 +main::@4: scope:[main] from main::@2 + main::i#3 = phi( main::@2/main::i#4 ) + main::i#1 = main::i#3 + rangenext(0,$ff) + main::$3 = main::i#1 != rangelast(0,$ff) + if(main::$3) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@4 + return + to:@return + +void __start() +__start: scope:[__start] from + to:__start::__init1 +__start::__init1: scope:[__start] from __start + conio_textcolor = LIGHT_BLUE + call conio_c64_init + to:__start::@2 +__start::@2: scope:[__start] from __start::__init1 + to:__start::@1 +__start::@1: scope:[__start] from __start::@2 + call main + to:__start::@3 +__start::@3: scope:[__start] from __start::@1 + to:__start::@return +__start::@return: scope:[__start] from __start::@3 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const COLORRAM = (char *)$d800 +__constant char * const DEFAULT_SCREEN = (char *)$400 +__constant const char LIGHT_BLUE = $e +void __start() +void clrscr() +bool clrscr::$0 +bool clrscr::$1 +char clrscr::c +char clrscr::c#0 +char clrscr::c#1 +char clrscr::c#2 +char clrscr::c#3 +char clrscr::l +char clrscr::l#0 +char clrscr::l#1 +char clrscr::l#2 +char clrscr::l#3 +char clrscr::l#4 +char clrscr::l#5 +char clrscr::l#6 +char *clrscr::line_cols +char *clrscr::line_cols#0 +char *clrscr::line_cols#1 +char *clrscr::line_cols#2 +char *clrscr::line_cols#3 +char *clrscr::line_cols#4 +char *clrscr::line_cols#5 +char *clrscr::line_cols#6 +char *clrscr::line_text +char *clrscr::line_text#0 +char *clrscr::line_text#1 +char *clrscr::line_text#2 +char *clrscr::line_text#3 +char *clrscr::line_text#4 +char *clrscr::line_text#5 +char *clrscr::line_text#6 +void conio_c64_init() +bool conio_c64_init::$0 +bool conio_c64_init::$1 +__constant char * const conio_c64_init::BASIC_CURSOR_LINE = (char *)$d6 +char conio_c64_init::line +char conio_c64_init::line#0 +char conio_c64_init::line#1 +char conio_c64_init::line#2 +__loadstore char conio_textcolor +void gotoxy(char x , char y) +bool gotoxy::$0 +bool gotoxy::$1 +bool gotoxy::$2 +bool gotoxy::$3 +char gotoxy::x +char gotoxy::x#0 +char gotoxy::x#1 +char gotoxy::x#2 +char gotoxy::x#3 +char gotoxy::x#4 +char gotoxy::y +char gotoxy::y#0 +char gotoxy::y#1 +char gotoxy::y#2 +void main() +bool main::$3 +__constant const char *main::bottom = (char *)$400+$28*$c +char main::i +char main::i#0 +char main::i#1 +char main::i#2 +char main::i#3 +char main::i#4 +char main::i#5 +char main::i#6 +char *main::memset_fast1_$0 +bool main::memset_fast1_$1 +char main::memset_fast1_c +char main::memset_fast1_c#0 +char main::memset_fast1_c#1 +char main::memset_fast1_c#2 +char *main::memset_fast1_destination +char *main::memset_fast1_destination#0 +char *main::memset_fast1_destination#1 +char *main::memset_fast1_destination#2 +char main::memset_fast1_num +char main::memset_fast1_num#0 +char main::memset_fast1_num#1 +char main::memset_fast1_num#2 +char main::memset_fast1_num#3 +__constant const char *main::screen = (char *)$400 +char * memcpy_fast(char *destination , char *source , char num) +char *memcpy_fast::$0 +char *memcpy_fast::$1 +bool memcpy_fast::$2 +char *memcpy_fast::destination +char *memcpy_fast::destination#0 +char *memcpy_fast::destination#1 +char *memcpy_fast::destination#2 +char *memcpy_fast::destination#3 +char memcpy_fast::num +char memcpy_fast::num#0 +char memcpy_fast::num#1 +char memcpy_fast::num#2 +char memcpy_fast::num#3 +char *memcpy_fast::return +char *memcpy_fast::return#0 +char *memcpy_fast::return#1 +char *memcpy_fast::return#2 +char *memcpy_fast::return#3 +char *memcpy_fast::source +char *memcpy_fast::source#0 +char *memcpy_fast::source#1 +char *memcpy_fast::source#2 + +Adding number conversion cast (unumber) $28*$c in +Adding number conversion cast (unumber) $19 in clrscr::$0 = clrscr::l#2 < $19 +Adding number conversion cast (unumber) $28 in clrscr::$1 = clrscr::c#2 < $28 +Adding number conversion cast (unumber) $28 in clrscr::line_text#1 = clrscr::line_text#3 + $28 +Adding number conversion cast (unumber) $28 in clrscr::line_cols#1 = clrscr::line_cols#3 + $28 +Adding number conversion cast (unumber) $19 in gotoxy::$0 = gotoxy::y#2 > $19 +Adding number conversion cast (unumber) $28 in gotoxy::$2 = gotoxy::x#2 >= $28 +Adding number conversion cast (unumber) 0 in gotoxy::y#0 = 0 +Adding number conversion cast (unumber) 0 in gotoxy::x#0 = 0 +Adding number conversion cast (unumber) 0 in memcpy_fast::$2 = 0 != memcpy_fast::num#0 +Adding number conversion cast (unumber) $19 in conio_c64_init::$0 = conio_c64_init::line#0 >= $19 +Adding number conversion cast (unumber) 0 in gotoxy::x#1 = 0 +Adding number conversion cast (unumber) $19-1 in conio_c64_init::line#1 = $19-1 +Adding number conversion cast (unumber) $17 in *((char *)$d018) = $17 +Adding number conversion cast (unumber) $100 in main::memset_fast1_num#0 = $100 +Adding number conversion cast (unumber) 0 in main::memset_fast1_$1 = 0 != main::memset_fast1_num#1 +Adding number conversion cast (unumber) $100 in memcpy_fast::num#1 = $100 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast gotoxy::y#0 = (unumber)0 +Inlining cast gotoxy::x#0 = (unumber)0 +Inlining cast gotoxy::x#1 = (unumber)0 +Inlining cast conio_c64_init::line#1 = (unumber)$19-1 +Inlining cast *((char *)$d018) = (unumber)$17 +Inlining cast main::memset_fast1_num#0 = (unumber)$100 +Inlining cast memcpy_fast::num#1 = (unumber)$100 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 55296 +Simplifying constant pointer cast (char *) 1024 +Simplifying constant pointer cast (char *) 214 +Simplifying constant pointer cast (char *) 1024 +Simplifying constant pointer cast (char *) 1024 +Simplifying constant integer cast $19 +Simplifying constant integer cast $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast $19 +Simplifying constant integer cast $28 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast $19 +Simplifying constant integer cast 0 +Simplifying constant integer cast $17 +Simplifying constant pointer cast (char *) 53272 +Simplifying constant integer cast $100 +Simplifying constant integer cast 0 +Simplifying constant integer cast $100 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) $19 +Finalized unsigned number type (char) $28 +Finalized unsigned number type (char) $28 +Finalized unsigned number type (char) $28 +Finalized unsigned number type (char) $19 +Finalized unsigned number type (char) $28 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $19 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $17 +Finalized unsigned number type (unsigned int) $100 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (unsigned int) $100 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inversing boolean not [22] gotoxy::$1 = gotoxy::y#2 <= $19 from [21] gotoxy::$0 = gotoxy::y#2 > $19 +Inversing boolean not [26] gotoxy::$3 = gotoxy::x#2 < $28 from [25] gotoxy::$2 = gotoxy::x#2 >= $28 +Inversing boolean not [47] conio_c64_init::$1 = conio_c64_init::line#0 < $19 from [46] conio_c64_init::$0 = conio_c64_init::line#0 >= $19 +Successful SSA optimization Pass2UnaryNotSimplification +Alias clrscr::line_text#5 = clrscr::line_text#6 +Alias clrscr::line_cols#5 = clrscr::line_cols#6 +Alias clrscr::l#2 = clrscr::l#5 +Alias clrscr::line_text#2 = clrscr::line_text#4 clrscr::line_text#3 +Alias clrscr::c#2 = clrscr::c#3 +Alias clrscr::line_cols#2 = clrscr::line_cols#4 clrscr::line_cols#3 +Alias clrscr::l#3 = clrscr::l#6 clrscr::l#4 +Alias gotoxy::x#3 = gotoxy::x#4 +Alias memcpy_fast::return#0 = memcpy_fast::destination#2 memcpy_fast::destination#1 memcpy_fast::return#3 memcpy_fast::return#1 +Alias main::memset_fast1_c#0 = main::i#2 main::memset_fast1_c#2 main::i#6 +Alias main::memset_fast1_destination#0 = main::memset_fast1_destination#2 +Alias main::memset_fast1_num#0 = main::memset_fast1_num#3 +Alias main::i#3 = main::i#4 main::i#5 +Successful SSA optimization Pass2AliasElimination +Alias gotoxy::x#2 = gotoxy::x#3 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values clrscr::line_text#2 clrscr::line_text#5 +Identical Phi Values clrscr::line_cols#2 clrscr::line_cols#5 +Identical Phi Values clrscr::l#3 clrscr::l#2 +Identical Phi Values gotoxy::y#2 gotoxy::y#1 +Identical Phi Values gotoxy::x#2 gotoxy::x#1 +Identical Phi Values memcpy_fast::destination#3 memcpy_fast::destination#0 +Identical Phi Values memcpy_fast::num#3 memcpy_fast::num#1 +Identical Phi Values memcpy_fast::source#2 memcpy_fast::source#0 +Identical Phi Values memcpy_fast::return#0 memcpy_fast::destination#3 +Identical Phi Values memcpy_fast::source#1 memcpy_fast::source#2 +Identical Phi Values main::memset_fast1_destination#1 main::memset_fast1_destination#0 +Identical Phi Values main::memset_fast1_c#1 main::memset_fast1_c#0 +Identical Phi Values main::i#3 main::memset_fast1_c#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Simple Condition clrscr::$0 [5] if(clrscr::l#2<$19) goto clrscr::@2 +Simple Condition clrscr::$1 [9] if(clrscr::c#2<$28) goto clrscr::@4 +Simple Condition gotoxy::$1 [19] if(gotoxy::y#1<=$19) goto gotoxy::@1 +Simple Condition gotoxy::$3 [21] if(gotoxy::x#1<$28) goto gotoxy::@return +Simple Condition memcpy_fast::$2 [32] if(0!=memcpy_fast::num#0) goto memcpy_fast::@1 +Simple Condition conio_c64_init::$1 [36] if(conio_c64_init::line#0<$19) goto conio_c64_init::@1 +Simple Condition main::memset_fast1_$1 [54] if(0!=main::memset_fast1_num#1) goto main::memset_fast1_@1 +Simple Condition main::$3 [62] if(main::i#1!=rangelast(0,$ff)) goto main::@1 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant right-side identified [41] conio_c64_init::line#1 = (unumber)$19-1 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant clrscr::line_text#0 = DEFAULT_SCREEN +Constant clrscr::line_cols#0 = COLORRAM +Constant clrscr::l#0 = 0 +Constant clrscr::c#0 = 0 +Constant gotoxy::y#0 = 0 +Constant gotoxy::x#0 = 0 +Constant gotoxy::x#1 = 0 +Constant conio_c64_init::line#1 = (unumber)$19-1 +Constant main::i#0 = 0 +Constant main::memset_fast1_destination#0 = main::screen +Constant main::memset_fast1_num#0 = $100 +Constant memcpy_fast::destination#0 = main::bottom +Constant memcpy_fast::source#0 = main::screen +Constant memcpy_fast::num#1 = $100 +Constant conio_textcolor = LIGHT_BLUE +Successful SSA optimization Pass2ConstantIdentification +Constant memcpy_fast::return#2 = memcpy_fast::destination#0 +Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [21] if(gotoxy::x#1<$28) goto gotoxy::@return +Successful SSA optimization Pass2ConstantIfs +Resolved ranged next value [60] main::i#1 = ++ main::memset_fast1_c#0 to ++ +Resolved ranged comparison value [62] if(main::i#1!=rangelast(0,$ff)) goto main::@1 to 0 +Rewriting conditional comparison [19] if(gotoxy::y#1<=$19) goto gotoxy::@1 +Converting *(pointer+n) to pointer[n] [29] *memcpy_fast::$0 = *memcpy_fast::$1 -- memcpy_fast::source#0[memcpy_fast::num#2] +Converting *(pointer+n) to pointer[n] [29] *memcpy_fast::$0 = memcpy_fast::source#0[memcpy_fast::num#2] -- memcpy_fast::destination#0[memcpy_fast::num#2] +Converting *(pointer+n) to pointer[n] [51] *main::memset_fast1_$0 = main::memset_fast1_c#0 -- main::memset_fast1_destination#0[main::memset_fast1_num#2] +Successful SSA optimization Pass2InlineDerefIdx +Removing unused block gotoxy::@3 +Successful SSA optimization Pass2EliminateUnusedBlocks +Eliminating unused variable memcpy_fast::$0 and assignment [14] memcpy_fast::$0 = memcpy_fast::destination#0 + memcpy_fast::num#2 +Eliminating unused variable memcpy_fast::$1 and assignment [15] memcpy_fast::$1 = memcpy_fast::source#0 + memcpy_fast::num#2 +Eliminating unused variable main::memset_fast1_$0 and assignment [30] main::memset_fast1_$0 = main::memset_fast1_destination#0 + main::memset_fast1_num#2 +Eliminating unused constant gotoxy::y#0 +Eliminating unused constant gotoxy::x#0 +Eliminating unused constant gotoxy::x#1 +Eliminating unused constant memcpy_fast::return#2 +Successful SSA optimization PassNEliminateUnusedVars +Adding number conversion cast (unumber) $19+1 in if(gotoxy::y#1<$19+1) goto gotoxy::@1 +Adding number conversion cast (unumber) 1 in if(gotoxy::y#1<(unumber)$19+1) goto gotoxy::@1 +Adding number conversion cast (unumber) 0 in if(main::i#1!=0) goto main::@1 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant integer cast $19+(unumber)1 +Simplifying constant integer cast 1 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inlining constant with var siblings clrscr::line_text#0 +Inlining constant with var siblings clrscr::line_cols#0 +Inlining constant with var siblings clrscr::l#0 +Inlining constant with var siblings clrscr::c#0 +Inlining constant with var siblings memcpy_fast::num#1 +Inlining constant with var siblings conio_c64_init::line#1 +Inlining constant with var siblings main::i#0 +Inlining constant with var siblings main::memset_fast1_num#0 +Constant inlined memcpy_fast::destination#0 = main::bottom +Constant inlined memcpy_fast::source#0 = main::screen +Constant inlined conio_c64_init::line#1 = (char)$19-1 +Constant inlined main::memset_fast1_num#0 = $100 +Constant inlined main::memset_fast1_destination#0 = main::screen +Constant inlined clrscr::line_text#0 = DEFAULT_SCREEN +Constant inlined main::i#0 = 0 +Constant inlined conio_textcolor = LIGHT_BLUE +Constant inlined memcpy_fast::num#1 = $100 +Constant inlined clrscr::l#0 = 0 +Constant inlined clrscr::c#0 = 0 +Constant inlined clrscr::line_cols#0 = COLORRAM +Successful SSA optimization Pass2ConstantInlining +Finalized unsigned number type (char) $28 +Finalized unsigned number type (char) $c +Finalized unsigned number type (char) $19 +Finalized unsigned number type (char) 1 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Simplifying constant integer cast $19-1 +Successful SSA optimization PassNCastSimplification +Added new block during phi lifting memcpy_fast::@3(between memcpy_fast::@1 and memcpy_fast::@1) +Added new block during phi lifting conio_c64_init::@4(between conio_c64_init and conio_c64_init::@1) +Added new block during phi lifting main::@5(between main::@4 and main::@1) +Added new block during phi lifting main::@6(between main::memset_fast1_@1 and main::memset_fast1_@1) +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::__init1 +Adding NOP phi() at start of __start::@2 +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of __start::@3 +Adding NOP phi() at start of conio_c64_init::@2 +Adding NOP phi() at start of conio_c64_init::@3 +Adding NOP phi() at start of main::@3 +Adding NOP phi() at start of main::memset_fast1 +Adding NOP phi() at start of main::@2 +Adding NOP phi() at start of gotoxy::@2 +Adding NOP phi() at start of gotoxy::@1 +Adding NOP phi() at start of clrscr +Adding NOP phi() at start of clrscr::@2 +Adding NOP phi() at start of memcpy_fast +Adding NOP phi() at start of memcpy_fast::@2 +CALL GRAPH +Calls in [__start] to conio_c64_init:2 main:5 +Calls in [conio_c64_init] to gotoxy:13 +Calls in [main] to clrscr:18 memcpy_fast:27 + +Created 8 initial phi equivalence classes +Coalesced [16] conio_c64_init::line#3 = conio_c64_init::line#0 +Coalesced [31] main::memset_fast1_c#3 = main::i#1 +Coalesced [32] main::memset_fast1_num#4 = main::memset_fast1_num#1 +Coalesced [47] clrscr::l#7 = clrscr::l#1 +Coalesced [48] clrscr::line_text#7 = clrscr::line_text#1 +Coalesced [49] clrscr::line_cols#7 = clrscr::line_cols#1 +Coalesced [53] clrscr::c#4 = clrscr::c#1 +Coalesced [61] memcpy_fast::num#4 = memcpy_fast::num#0 +Coalesced down to 8 phi equivalence classes +Culled Empty Block label __start::@2 +Culled Empty Block label __start::@3 +Culled Empty Block label conio_c64_init::@2 +Culled Empty Block label conio_c64_init::@3 +Culled Empty Block label main::@3 +Culled Empty Block label main::@5 +Culled Empty Block label main::@6 +Culled Empty Block label gotoxy::@1 +Culled Empty Block label clrscr::@2 +Culled Empty Block label memcpy_fast::@2 +Culled Empty Block label memcpy_fast::@3 +Renumbering block clrscr::@3 to clrscr::@2 +Renumbering block clrscr::@4 to clrscr::@3 +Renumbering block clrscr::@5 to clrscr::@4 +Renumbering block gotoxy::@2 to gotoxy::@1 +Renumbering block conio_c64_init::@4 to conio_c64_init::@2 +Renumbering block main::@4 to main::@3 +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::__init1 +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of conio_c64_init::@2 +Adding NOP phi() at start of main::memset_fast1 +Adding NOP phi() at start of main::@2 +Adding NOP phi() at start of gotoxy::@1 +Adding NOP phi() at start of clrscr +Adding NOP phi() at start of memcpy_fast + +FINAL CONTROL FLOW GRAPH + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] phi() + [2] call conio_c64_init + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [3] phi() + [4] call main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [5] return + to:@return + +void conio_c64_init() +conio_c64_init: scope:[conio_c64_init] from __start::__init1 + [6] conio_c64_init::line#0 = *conio_c64_init::BASIC_CURSOR_LINE + [7] if(conio_c64_init::line#0<$19) goto conio_c64_init::@2 + to:conio_c64_init::@1 +conio_c64_init::@2: scope:[conio_c64_init] from conio_c64_init + [8] phi() + to:conio_c64_init::@1 +conio_c64_init::@1: scope:[conio_c64_init] from conio_c64_init conio_c64_init::@2 + [9] conio_c64_init::line#2 = phi( conio_c64_init::@2/conio_c64_init::line#0, conio_c64_init/$19-1 ) + [10] gotoxy::y#1 = conio_c64_init::line#2 + [11] call gotoxy + to:conio_c64_init::@return +conio_c64_init::@return: scope:[conio_c64_init] from conio_c64_init::@1 + [12] return + to:@return + +void main() +main: scope:[main] from __start::@1 + [13] *((char *) 53272) = $17 + [14] call clrscr + to:main::@1 +main::@1: scope:[main] from main main::@3 + [15] main::memset_fast1_c#0 = phi( main/0, main::@3/main::i#1 ) + to:main::memset_fast1 +main::memset_fast1: scope:[main] from main::@1 + [16] phi() + to:main::memset_fast1_@1 +main::memset_fast1_@1: scope:[main] from main::memset_fast1 main::memset_fast1_@1 + [17] main::memset_fast1_num#2 = phi( main::memset_fast1/$100, main::memset_fast1_@1/main::memset_fast1_num#1 ) + [18] main::screen[main::memset_fast1_num#2] = main::memset_fast1_c#0 + [19] main::memset_fast1_num#1 = -- main::memset_fast1_num#2 + [20] if(0!=main::memset_fast1_num#1) goto main::memset_fast1_@1 + to:main::@2 +main::@2: scope:[main] from main::memset_fast1_@1 + [21] phi() + [22] call memcpy_fast + to:main::@3 +main::@3: scope:[main] from main::@2 + [23] main::i#1 = ++ main::memset_fast1_c#0 + [24] if(main::i#1!=0) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@3 + [25] return + to:@return + +void gotoxy(char x , char y) +gotoxy: scope:[gotoxy] from conio_c64_init::@1 + [26] if(gotoxy::y#1<$19+1) goto gotoxy::@return + to:gotoxy::@1 +gotoxy::@1: scope:[gotoxy] from gotoxy + [27] phi() + to:gotoxy::@return +gotoxy::@return: scope:[gotoxy] from gotoxy gotoxy::@1 + [28] return + to:@return + +void clrscr() +clrscr: scope:[clrscr] from main + [29] phi() + to:clrscr::@1 +clrscr::@1: scope:[clrscr] from clrscr clrscr::@4 + [30] clrscr::line_cols#5 = phi( clrscr/COLORRAM, clrscr::@4/clrscr::line_cols#1 ) + [30] clrscr::line_text#5 = phi( clrscr/DEFAULT_SCREEN, clrscr::@4/clrscr::line_text#1 ) + [30] clrscr::l#2 = phi( clrscr/0, clrscr::@4/clrscr::l#1 ) + [31] if(clrscr::l#2<$19) goto clrscr::@2 + to:clrscr::@return +clrscr::@return: scope:[clrscr] from clrscr::@1 + [32] return + to:@return +clrscr::@2: scope:[clrscr] from clrscr::@1 clrscr::@3 + [33] clrscr::c#2 = phi( clrscr::@1/0, clrscr::@3/clrscr::c#1 ) + [34] if(clrscr::c#2<$28) goto clrscr::@3 + to:clrscr::@4 +clrscr::@4: scope:[clrscr] from clrscr::@2 + [35] clrscr::line_text#1 = clrscr::line_text#5 + $28 + [36] clrscr::line_cols#1 = clrscr::line_cols#5 + $28 + [37] clrscr::l#1 = ++ clrscr::l#2 + to:clrscr::@1 +clrscr::@3: scope:[clrscr] from clrscr::@2 + [38] clrscr::line_text#5[clrscr::c#2] = ' ' + [39] clrscr::line_cols#5[clrscr::c#2] = LIGHT_BLUE + [40] clrscr::c#1 = ++ clrscr::c#2 + to:clrscr::@2 + +char * memcpy_fast(char *destination , char *source , char num) +memcpy_fast: scope:[memcpy_fast] from main::@2 + [41] phi() + to:memcpy_fast::@1 +memcpy_fast::@1: scope:[memcpy_fast] from memcpy_fast memcpy_fast::@1 + [42] memcpy_fast::num#2 = phi( memcpy_fast/$100, memcpy_fast::@1/memcpy_fast::num#0 ) + [43] main::bottom[memcpy_fast::num#2] = main::screen[memcpy_fast::num#2] + [44] memcpy_fast::num#0 = -- memcpy_fast::num#2 + [45] if(0!=memcpy_fast::num#0) goto memcpy_fast::@1 + to:memcpy_fast::@return +memcpy_fast::@return: scope:[memcpy_fast] from memcpy_fast::@1 + [46] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void __start() +void clrscr() +char clrscr::c +char clrscr::c#1 // 20002.0 +char clrscr::c#2 // 12501.25 +char clrscr::l +char clrscr::l#1 // 2002.0 +char clrscr::l#2 // 333.6666666666667 +char *clrscr::line_cols +char *clrscr::line_cols#1 // 1001.0 +char *clrscr::line_cols#5 // 1500.375 +char *clrscr::line_text +char *clrscr::line_text#1 // 667.3333333333334 +char *clrscr::line_text#5 // 1714.7142857142858 +void conio_c64_init() +char conio_c64_init::line +char conio_c64_init::line#0 // 11.0 +char conio_c64_init::line#2 // 22.0 +void gotoxy(char x , char y) +char gotoxy::x +char gotoxy::y +char gotoxy::y#1 // 112.0 +void main() +char main::i +char main::i#1 // 151.5 +char main::memset_fast1_c +char main::memset_fast1_c#0 // 150.375 +char *main::memset_fast1_destination +char main::memset_fast1_num +char main::memset_fast1_num#1 // 1501.5 +char main::memset_fast1_num#2 // 1501.5 +char * memcpy_fast(char *destination , char *source , char num) +char *memcpy_fast::destination +char memcpy_fast::num +char memcpy_fast::num#0 // 150001.5 +char memcpy_fast::num#2 // 200002.0 +char *memcpy_fast::return +char *memcpy_fast::source + +Initial phi equivalence classes +[ conio_c64_init::line#2 conio_c64_init::line#0 ] +[ main::memset_fast1_c#0 main::i#1 ] +[ main::memset_fast1_num#2 main::memset_fast1_num#1 ] +[ clrscr::l#2 clrscr::l#1 ] +[ clrscr::line_text#5 clrscr::line_text#1 ] +[ clrscr::line_cols#5 clrscr::line_cols#1 ] +[ clrscr::c#2 clrscr::c#1 ] +[ memcpy_fast::num#2 memcpy_fast::num#0 ] +Added variable gotoxy::y#1 to live range equivalence class [ gotoxy::y#1 ] +Complete equivalence classes +[ conio_c64_init::line#2 conio_c64_init::line#0 ] +[ main::memset_fast1_c#0 main::i#1 ] +[ main::memset_fast1_num#2 main::memset_fast1_num#1 ] +[ clrscr::l#2 clrscr::l#1 ] +[ clrscr::line_text#5 clrscr::line_text#1 ] +[ clrscr::line_cols#5 clrscr::line_cols#1 ] +[ clrscr::c#2 clrscr::c#1 ] +[ memcpy_fast::num#2 memcpy_fast::num#0 ] +[ gotoxy::y#1 ] +Allocated zp[1]:2 [ memcpy_fast::num#2 memcpy_fast::num#0 ] +Allocated zp[1]:3 [ clrscr::c#2 clrscr::c#1 ] +Allocated zp[1]:4 [ main::memset_fast1_num#2 main::memset_fast1_num#1 ] +Allocated zp[2]:5 [ clrscr::line_cols#5 clrscr::line_cols#1 ] +Allocated zp[2]:7 [ clrscr::line_text#5 clrscr::line_text#1 ] +Allocated zp[1]:9 [ clrscr::l#2 clrscr::l#1 ] +Allocated zp[1]:10 [ main::memset_fast1_c#0 main::i#1 ] +Allocated zp[1]:11 [ gotoxy::y#1 ] +Allocated zp[1]:12 [ conio_c64_init::line#2 conio_c64_init::line#0 ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [13] *((char *) 53272) = $17 [ ] ( main:4 [ ] { } ) always clobbers reg byte a +Statement [35] clrscr::line_text#1 = clrscr::line_text#5 + $28 [ clrscr::l#2 clrscr::line_cols#5 clrscr::line_text#1 ] ( main:4::clrscr:14 [ clrscr::l#2 clrscr::line_cols#5 clrscr::line_text#1 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:9 [ clrscr::l#2 clrscr::l#1 ] +Statement [36] clrscr::line_cols#1 = clrscr::line_cols#5 + $28 [ clrscr::l#2 clrscr::line_text#1 clrscr::line_cols#1 ] ( main:4::clrscr:14 [ clrscr::l#2 clrscr::line_text#1 clrscr::line_cols#1 ] { } ) always clobbers reg byte a +Statement [38] clrscr::line_text#5[clrscr::c#2] = ' ' [ clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] ( main:4::clrscr:14 [ clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:3 [ clrscr::c#2 clrscr::c#1 ] +Statement [39] clrscr::line_cols#5[clrscr::c#2] = LIGHT_BLUE [ clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] ( main:4::clrscr:14 [ clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] { } ) always clobbers reg byte a +Statement [43] main::bottom[memcpy_fast::num#2] = main::screen[memcpy_fast::num#2] [ memcpy_fast::num#2 ] ( main:4::memcpy_fast:22 [ main::memset_fast1_c#0 memcpy_fast::num#2 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:10 [ main::memset_fast1_c#0 main::i#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:2 [ memcpy_fast::num#2 memcpy_fast::num#0 ] +Statement [13] *((char *) 53272) = $17 [ ] ( main:4 [ ] { } ) always clobbers reg byte a +Statement [18] main::screen[main::memset_fast1_num#2] = main::memset_fast1_c#0 [ main::memset_fast1_c#0 main::memset_fast1_num#2 ] ( main:4 [ main::memset_fast1_c#0 main::memset_fast1_num#2 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::memset_fast1_num#2 main::memset_fast1_num#1 ] +Statement [35] clrscr::line_text#1 = clrscr::line_text#5 + $28 [ clrscr::l#2 clrscr::line_cols#5 clrscr::line_text#1 ] ( main:4::clrscr:14 [ clrscr::l#2 clrscr::line_cols#5 clrscr::line_text#1 ] { } ) always clobbers reg byte a +Statement [36] clrscr::line_cols#1 = clrscr::line_cols#5 + $28 [ clrscr::l#2 clrscr::line_text#1 clrscr::line_cols#1 ] ( main:4::clrscr:14 [ clrscr::l#2 clrscr::line_text#1 clrscr::line_cols#1 ] { } ) always clobbers reg byte a +Statement [38] clrscr::line_text#5[clrscr::c#2] = ' ' [ clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] ( main:4::clrscr:14 [ clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] { } ) always clobbers reg byte a +Statement [39] clrscr::line_cols#5[clrscr::c#2] = LIGHT_BLUE [ clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] ( main:4::clrscr:14 [ clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] { } ) always clobbers reg byte a +Statement [43] main::bottom[memcpy_fast::num#2] = main::screen[memcpy_fast::num#2] [ memcpy_fast::num#2 ] ( main:4::memcpy_fast:22 [ main::memset_fast1_c#0 memcpy_fast::num#2 ] { } ) always clobbers reg byte a +Statement [13] *((char *) 53272) = $17 [ ] ( main:4 [ ] { } ) always clobbers reg byte a +Statement [18] main::screen[main::memset_fast1_num#2] = main::memset_fast1_c#0 [ main::memset_fast1_c#0 main::memset_fast1_num#2 ] ( main:4 [ main::memset_fast1_c#0 main::memset_fast1_num#2 ] { } ) always clobbers reg byte a +Statement [35] clrscr::line_text#1 = clrscr::line_text#5 + $28 [ clrscr::l#2 clrscr::line_cols#5 clrscr::line_text#1 ] ( main:4::clrscr:14 [ clrscr::l#2 clrscr::line_cols#5 clrscr::line_text#1 ] { } ) always clobbers reg byte a +Statement [36] clrscr::line_cols#1 = clrscr::line_cols#5 + $28 [ clrscr::l#2 clrscr::line_text#1 clrscr::line_cols#1 ] ( main:4::clrscr:14 [ clrscr::l#2 clrscr::line_text#1 clrscr::line_cols#1 ] { } ) always clobbers reg byte a +Statement [38] clrscr::line_text#5[clrscr::c#2] = ' ' [ clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] ( main:4::clrscr:14 [ clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] { } ) always clobbers reg byte a +Statement [39] clrscr::line_cols#5[clrscr::c#2] = LIGHT_BLUE [ clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] ( main:4::clrscr:14 [ clrscr::l#2 clrscr::line_text#5 clrscr::line_cols#5 clrscr::c#2 ] { } ) always clobbers reg byte a +Statement [43] main::bottom[memcpy_fast::num#2] = main::screen[memcpy_fast::num#2] [ memcpy_fast::num#2 ] ( main:4::memcpy_fast:22 [ main::memset_fast1_c#0 memcpy_fast::num#2 ] { } ) always clobbers reg byte a +Potential registers zp[1]:12 [ conio_c64_init::line#2 conio_c64_init::line#0 ] : zp[1]:12 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:10 [ main::memset_fast1_c#0 main::i#1 ] : zp[1]:10 , reg byte x , reg byte y , +Potential registers zp[1]:4 [ main::memset_fast1_num#2 main::memset_fast1_num#1 ] : zp[1]:4 , reg byte x , reg byte y , +Potential registers zp[1]:9 [ clrscr::l#2 clrscr::l#1 ] : zp[1]:9 , reg byte x , reg byte y , +Potential registers zp[2]:7 [ clrscr::line_text#5 clrscr::line_text#1 ] : zp[2]:7 , +Potential registers zp[2]:5 [ clrscr::line_cols#5 clrscr::line_cols#1 ] : zp[2]:5 , +Potential registers zp[1]:3 [ clrscr::c#2 clrscr::c#1 ] : zp[1]:3 , reg byte x , reg byte y , +Potential registers zp[1]:2 [ memcpy_fast::num#2 memcpy_fast::num#0 ] : zp[1]:2 , reg byte x , reg byte y , +Potential registers zp[1]:11 [ gotoxy::y#1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [memcpy_fast] 350,003.5: zp[1]:2 [ memcpy_fast::num#2 memcpy_fast::num#0 ] +Uplift Scope [clrscr] 32,503.25: zp[1]:3 [ clrscr::c#2 clrscr::c#1 ] 2,501.38: zp[2]:5 [ clrscr::line_cols#5 clrscr::line_cols#1 ] 2,382.05: zp[2]:7 [ clrscr::line_text#5 clrscr::line_text#1 ] 2,335.67: zp[1]:9 [ clrscr::l#2 clrscr::l#1 ] +Uplift Scope [main] 3,003: zp[1]:4 [ main::memset_fast1_num#2 main::memset_fast1_num#1 ] 301.88: zp[1]:10 [ main::memset_fast1_c#0 main::i#1 ] +Uplift Scope [gotoxy] 112: zp[1]:11 [ gotoxy::y#1 ] +Uplift Scope [conio_c64_init] 33: zp[1]:12 [ conio_c64_init::line#2 conio_c64_init::line#0 ] +Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6569_VICII] +Uplift Scope [MOS6581_SID] +Uplift Scope [__start] +Uplift Scope [] + +Uplifting [memcpy_fast] best 12080 combination reg byte x [ memcpy_fast::num#2 memcpy_fast::num#0 ] +Uplifting [clrscr] best 10490 combination reg byte y [ clrscr::c#2 clrscr::c#1 ] zp[2]:5 [ clrscr::line_cols#5 clrscr::line_cols#1 ] zp[2]:7 [ clrscr::line_text#5 clrscr::line_text#1 ] reg byte x [ clrscr::l#2 clrscr::l#1 ] +Uplifting [main] best 9320 combination reg byte x [ main::memset_fast1_num#2 main::memset_fast1_num#1 ] reg byte y [ main::memset_fast1_c#0 main::i#1 ] +Uplifting [gotoxy] best 9314 combination reg byte a [ gotoxy::y#1 ] +Uplifting [conio_c64_init] best 9302 combination reg byte a [ conio_c64_init::line#2 conio_c64_init::line#0 ] +Uplifting [MOS6526_CIA] best 9302 combination +Uplifting [MOS6569_VICII] best 9302 combination +Uplifting [MOS6581_SID] best 9302 combination +Uplifting [__start] best 9302 combination +Uplifting [] best 9302 combination +Allocated (was zp[2]:5) zp[2]:2 [ clrscr::line_cols#5 clrscr::line_cols#1 ] +Allocated (was zp[2]:7) zp[2]:4 [ clrscr::line_text#5 clrscr::line_text#1 ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +/** + * @file memfast.c + * @author Sven Van de Velde (sven.van.de.velde@telenet.be) + * @brief Demonstration of functions memcpy_fast and memset_fast + * for 8 bit architectures. + * @version 0.1 + * @date 2023-04-14 + * + * @copyright Copyright (c) 2023 + * + */ + // Upstart + // Commodore 64 PRG executable file +.file [name="memfast.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(__start) + // Global Constants & labels + .const LIGHT_BLUE = $e + /// Color Ram + .label COLORRAM = $d800 + /// Default address of screen character matrix + .label DEFAULT_SCREEN = $400 +.segment Code + // __start +__start: { + // [1] phi from __start to __start::__init1 [phi:__start->__start::__init1] + __init1_from___start: + jmp __init1 + // __start::__init1 + __init1: + // [2] call conio_c64_init + jsr conio_c64_init + // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + __b1_from___init1: + jmp __b1 + // __start::@1 + __b1: + // [4] call main + jsr main + jmp __breturn + // __start::@return + __breturn: + // [5] return + rts +} + // conio_c64_init +// Set initial cursor position +conio_c64_init: { + // Position cursor at current line + .label BASIC_CURSOR_LINE = $d6 + // [6] conio_c64_init::line#0 = *conio_c64_init::BASIC_CURSOR_LINE -- vbuaa=_deref_pbuc1 + lda.z BASIC_CURSOR_LINE + // [7] if(conio_c64_init::line#0<$19) goto conio_c64_init::@2 -- vbuaa_lt_vbuc1_then_la1 + cmp #$19 + bcc __b2_from_conio_c64_init + // [9] phi from conio_c64_init to conio_c64_init::@1 [phi:conio_c64_init->conio_c64_init::@1] + __b1_from_conio_c64_init: + // [9] phi conio_c64_init::line#2 = $19-1 [phi:conio_c64_init->conio_c64_init::@1#0] -- vbuaa=vbuc1 + lda #$19-1 + jmp __b1 + // [8] phi from conio_c64_init to conio_c64_init::@2 [phi:conio_c64_init->conio_c64_init::@2] + __b2_from_conio_c64_init: + jmp __b2 + // conio_c64_init::@2 + __b2: + // [9] phi from conio_c64_init::@2 to conio_c64_init::@1 [phi:conio_c64_init::@2->conio_c64_init::@1] + __b1_from___b2: + // [9] phi conio_c64_init::line#2 = conio_c64_init::line#0 [phi:conio_c64_init::@2->conio_c64_init::@1#0] -- register_copy + jmp __b1 + // conio_c64_init::@1 + __b1: + // [10] gotoxy::y#1 = conio_c64_init::line#2 + // [11] call gotoxy + jsr gotoxy + jmp __breturn + // conio_c64_init::@return + __breturn: + // [12] return + rts +} + // main +main: { + .label screen = $400 + .label bottom = $400+$28*$c + // [13] *((char *) 53272) = $17 -- _deref_pbuc1=vbuc2 + // Show mixed chars on screen + lda #$17 + sta $d018 + // [14] call clrscr + // Clear screen + // [29] phi from main to clrscr [phi:main->clrscr] + clrscr_from_main: + jsr clrscr + // [15] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + // [15] phi main::memset_fast1_c#0 = 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 + ldy #0 + jmp __b1 + // [15] phi from main::@3 to main::@1 [phi:main::@3->main::@1] + __b1_from___b3: + // [15] phi main::memset_fast1_c#0 = main::i#1 [phi:main::@3->main::@1#0] -- register_copy + jmp __b1 + // main::@1 + __b1: + // [16] phi from main::@1 to main::memset_fast1 [phi:main::@1->main::memset_fast1] + memset_fast1_from___b1: + jmp memset_fast1 + // main::memset_fast1 + memset_fast1: + // [17] phi from main::memset_fast1 to main::memset_fast1_@1 [phi:main::memset_fast1->main::memset_fast1_@1] + memset_fast1___b1_from_memset_fast1: + // [17] phi main::memset_fast1_num#2 = $100 [phi:main::memset_fast1->main::memset_fast1_@1#0] -- vbuxx=vwuc1 + ldx #<$100 + jmp memset_fast1___b1 + // [17] phi from main::memset_fast1_@1 to main::memset_fast1_@1 [phi:main::memset_fast1_@1->main::memset_fast1_@1] + memset_fast1___b1_from_memset_fast1___b1: + // [17] phi main::memset_fast1_num#2 = main::memset_fast1_num#1 [phi:main::memset_fast1_@1->main::memset_fast1_@1#0] -- register_copy + jmp memset_fast1___b1 + // main::memset_fast1_@1 + memset_fast1___b1: + // [18] main::screen[main::memset_fast1_num#2] = main::memset_fast1_c#0 -- pbuc1_derefidx_vbuxx=vbuyy + tya + sta screen,x + // [19] main::memset_fast1_num#1 = -- main::memset_fast1_num#2 -- vbuxx=_dec_vbuxx + dex + // [20] if(0!=main::memset_fast1_num#1) goto main::memset_fast1_@1 -- 0_neq_vbuxx_then_la1 + cpx #0 + bne memset_fast1___b1_from_memset_fast1___b1 + // [21] phi from main::memset_fast1_@1 to main::@2 [phi:main::memset_fast1_@1->main::@2] + __b2_from_memset_fast1___b1: + jmp __b2 + // main::@2 + __b2: + // [22] call memcpy_fast + // 256 will be truncated to 0, which will copy 256 bytes! + // [41] phi from main::@2 to memcpy_fast [phi:main::@2->memcpy_fast] + memcpy_fast_from___b2: + jsr memcpy_fast + jmp __b3 + // main::@3 + __b3: + // [23] main::i#1 = ++ main::memset_fast1_c#0 -- vbuyy=_inc_vbuyy + iny + // [24] if(main::i#1!=0) goto main::@1 -- vbuyy_neq_0_then_la1 + cpy #0 + bne __b1_from___b3 + jmp __breturn + // main::@return + __breturn: + // [25] return + rts +} + // gotoxy +// Set the cursor to the specified position +// void gotoxy(char x, __register(A) char y) +gotoxy: { + // [26] if(gotoxy::y#1<$19+1) goto gotoxy::@return -- vbuaa_lt_vbuc1_then_la1 + cmp #$19+1 + bcc __breturn + // [27] phi from gotoxy to gotoxy::@1 [phi:gotoxy->gotoxy::@1] + __b1_from_gotoxy: + jmp __b1 + // gotoxy::@1 + __b1: + jmp __breturn + // gotoxy::@return + __breturn: + // [28] return + rts +} + // clrscr +// clears the screen and moves the cursor to the upper left-hand corner of the screen. +clrscr: { + .label line_text = 4 + .label line_cols = 2 + // [30] phi from clrscr to clrscr::@1 [phi:clrscr->clrscr::@1] + __b1_from_clrscr: + // [30] phi clrscr::line_cols#5 = COLORRAM [phi:clrscr->clrscr::@1#0] -- pbuz1=pbuc1 + lda #COLORRAM + sta.z line_cols+1 + // [30] phi clrscr::line_text#5 = DEFAULT_SCREEN [phi:clrscr->clrscr::@1#1] -- pbuz1=pbuc1 + lda #DEFAULT_SCREEN + sta.z line_text+1 + // [30] phi clrscr::l#2 = 0 [phi:clrscr->clrscr::@1#2] -- vbuxx=vbuc1 + ldx #0 + jmp __b1 + // clrscr::@1 + __b1: + // [31] if(clrscr::l#2<$19) goto clrscr::@2 -- vbuxx_lt_vbuc1_then_la1 + cpx #$19 + bcc __b2_from___b1 + jmp __breturn + // clrscr::@return + __breturn: + // [32] return + rts + // [33] phi from clrscr::@1 to clrscr::@2 [phi:clrscr::@1->clrscr::@2] + __b2_from___b1: + // [33] phi clrscr::c#2 = 0 [phi:clrscr::@1->clrscr::@2#0] -- vbuyy=vbuc1 + ldy #0 + jmp __b2 + // clrscr::@2 + __b2: + // [34] if(clrscr::c#2<$28) goto clrscr::@3 -- vbuyy_lt_vbuc1_then_la1 + cpy #$28 + bcc __b3 + jmp __b4 + // clrscr::@4 + __b4: + // [35] clrscr::line_text#1 = clrscr::line_text#5 + $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc.z line_text + sta.z line_text + bcc !+ + inc.z line_text+1 + !: + // [36] clrscr::line_cols#1 = clrscr::line_cols#5 + $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc.z line_cols + sta.z line_cols + bcc !+ + inc.z line_cols+1 + !: + // [37] clrscr::l#1 = ++ clrscr::l#2 -- vbuxx=_inc_vbuxx + inx + // [30] phi from clrscr::@4 to clrscr::@1 [phi:clrscr::@4->clrscr::@1] + __b1_from___b4: + // [30] phi clrscr::line_cols#5 = clrscr::line_cols#1 [phi:clrscr::@4->clrscr::@1#0] -- register_copy + // [30] phi clrscr::line_text#5 = clrscr::line_text#1 [phi:clrscr::@4->clrscr::@1#1] -- register_copy + // [30] phi clrscr::l#2 = clrscr::l#1 [phi:clrscr::@4->clrscr::@1#2] -- register_copy + jmp __b1 + // clrscr::@3 + __b3: + // [38] clrscr::line_text#5[clrscr::c#2] = ' ' -- pbuz1_derefidx_vbuyy=vbuc1 + lda #' ' + sta (line_text),y + // [39] clrscr::line_cols#5[clrscr::c#2] = LIGHT_BLUE -- pbuz1_derefidx_vbuyy=vbuc1 + lda #LIGHT_BLUE + sta (line_cols),y + // [40] clrscr::c#1 = ++ clrscr::c#2 -- vbuyy=_inc_vbuyy + iny + // [33] phi from clrscr::@3 to clrscr::@2 [phi:clrscr::@3->clrscr::@2] + __b2_from___b3: + // [33] phi clrscr::c#2 = clrscr::c#1 [phi:clrscr::@3->clrscr::@2#0] -- register_copy + jmp __b2 +} + // memcpy_fast +/** + * @brief Fast copy of data from a source to a destination memory address. + * Since the amount of bytes to be copied is a byte long, it can be executed very fast. + * The parameter num can have a value 0, which in case is equal to 256, + * which allows 256 bytes to be copied using one single byte counter! + * Depending on the optimization of the compiler, this implementation can + * result in very fast code, but it should be inlined! + * + * @param destination The memory address as the destination. + * @param source The memory address as the source. + * @param num The amount of bytes to be copied. A value of 0 will copy 256 bytes!!! + * @return void* The resulting destination memory address. + */ +// char * memcpy_fast(char *destination, char *source, __register(X) char num) +memcpy_fast: { + // [42] phi from memcpy_fast to memcpy_fast::@1 [phi:memcpy_fast->memcpy_fast::@1] + __b1_from_memcpy_fast: + // [42] phi memcpy_fast::num#2 = $100 [phi:memcpy_fast->memcpy_fast::@1#0] -- vbuxx=vwuc1 + ldx #<$100 + jmp __b1 + // [42] phi from memcpy_fast::@1 to memcpy_fast::@1 [phi:memcpy_fast::@1->memcpy_fast::@1] + __b1_from___b1: + // [42] phi memcpy_fast::num#2 = memcpy_fast::num#0 [phi:memcpy_fast::@1->memcpy_fast::@1#0] -- register_copy + jmp __b1 + // memcpy_fast::@1 + __b1: + // [43] main::bottom[memcpy_fast::num#2] = main::screen[memcpy_fast::num#2] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda main.screen,x + sta main.bottom,x + // [44] memcpy_fast::num#0 = -- memcpy_fast::num#2 -- vbuxx=_dec_vbuxx + dex + // [45] if(0!=memcpy_fast::num#0) goto memcpy_fast::@1 -- 0_neq_vbuxx_then_la1 + cpx #0 + bne __b1_from___b1 + jmp __breturn + // memcpy_fast::@return + __breturn: + // [46] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __init1 +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b2 +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp memset_fast1 +Removing instruction jmp memset_fast1___b1 +Removing instruction jmp __b2 +Removing instruction jmp __b3 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b2 +Removing instruction jmp __b4 +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Replacing label __b2_from_conio_c64_init with __b1 +Replacing label memset_fast1___b1_from_memset_fast1___b1 with memset_fast1___b1 +Replacing label __b1_from___b3 with __b1 +Replacing label __breturn with __b1 +Replacing label __b1_from___b1 with __b1 +Removing instruction __init1_from___start: +Removing instruction __b1_from___init1: +Removing instruction __b2_from_conio_c64_init: +Removing instruction __b2: +Removing instruction __b1_from___b2: +Removing instruction __b1_from___b3: +Removing instruction memset_fast1_from___b1: +Removing instruction memset_fast1: +Removing instruction memset_fast1___b1_from_memset_fast1: +Removing instruction memset_fast1___b1_from_memset_fast1___b1: +Removing instruction __b2_from_memset_fast1___b1: +Removing instruction __b1_from_gotoxy: +Removing instruction __breturn: +Removing instruction __b1_from___b1: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction __init1: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __b1_from_conio_c64_init: +Removing instruction __breturn: +Removing instruction clrscr_from_main: +Removing instruction __b1_from_main: +Removing instruction __b2: +Removing instruction memcpy_fast_from___b2: +Removing instruction __b3: +Removing instruction __breturn: +Removing instruction __b1_from_clrscr: +Removing instruction __breturn: +Removing instruction __b4: +Removing instruction __b1_from___b4: +Removing instruction __b2_from___b3: +Removing instruction __b1_from_memcpy_fast: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Relabelling long label __b2_from___b1 to __b4 +Succesful ASM optimization Pass5RelabelLongLabels +Removing instruction jmp __b1 +Removing instruction jmp __b1 +Removing instruction jmp memset_fast1___b1 +Removing instruction bcc __b1 +Removing instruction jmp __b1 +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __b1: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char * const COLORRAM = (char *) 55296 +__constant char * const DEFAULT_SCREEN = (char *) 1024 +__constant const char LIGHT_BLUE = $e +void __start() +void clrscr() +char clrscr::c +char clrscr::c#1 // reg byte y 20002.0 +char clrscr::c#2 // reg byte y 12501.25 +char clrscr::l +char clrscr::l#1 // reg byte x 2002.0 +char clrscr::l#2 // reg byte x 333.6666666666667 +char *clrscr::line_cols +char *clrscr::line_cols#1 // line_cols zp[2]:2 1001.0 +char *clrscr::line_cols#5 // line_cols zp[2]:2 1500.375 +char *clrscr::line_text +char *clrscr::line_text#1 // line_text zp[2]:4 667.3333333333334 +char *clrscr::line_text#5 // line_text zp[2]:4 1714.7142857142858 +void conio_c64_init() +__constant char * const conio_c64_init::BASIC_CURSOR_LINE = (char *) 214 +char conio_c64_init::line +char conio_c64_init::line#0 // reg byte a 11.0 +char conio_c64_init::line#2 // reg byte a 22.0 +void gotoxy(char x , char y) +char gotoxy::x +char gotoxy::y +char gotoxy::y#1 // reg byte a 112.0 +void main() +__constant const char *main::bottom = (char *) 1024+(unsigned int)$28*$c +char main::i +char main::i#1 // reg byte y 151.5 +char main::memset_fast1_c +char main::memset_fast1_c#0 // reg byte y 150.375 +char *main::memset_fast1_destination +char main::memset_fast1_num +char main::memset_fast1_num#1 // reg byte x 1501.5 +char main::memset_fast1_num#2 // reg byte x 1501.5 +__constant const char *main::screen = (char *) 1024 +char * memcpy_fast(char *destination , char *source , char num) +char *memcpy_fast::destination +char memcpy_fast::num +char memcpy_fast::num#0 // reg byte x 150001.5 +char memcpy_fast::num#2 // reg byte x 200002.0 +char *memcpy_fast::return +char *memcpy_fast::source + +reg byte a [ conio_c64_init::line#2 conio_c64_init::line#0 ] +reg byte y [ main::memset_fast1_c#0 main::i#1 ] +reg byte x [ main::memset_fast1_num#2 main::memset_fast1_num#1 ] +reg byte x [ clrscr::l#2 clrscr::l#1 ] +zp[2]:4 [ clrscr::line_text#5 clrscr::line_text#1 ] +zp[2]:2 [ clrscr::line_cols#5 clrscr::line_cols#1 ] +reg byte y [ clrscr::c#2 clrscr::c#1 ] +reg byte x [ memcpy_fast::num#2 memcpy_fast::num#0 ] +reg byte a [ gotoxy::y#1 ] + + +FINAL ASSEMBLER +Score: 6933 + + // File Comments +/** + * @file memfast.c + * @author Sven Van de Velde (sven.van.de.velde@telenet.be) + * @brief Demonstration of functions memcpy_fast and memset_fast + * for 8 bit architectures. + * @version 0.1 + * @date 2023-04-14 + * + * @copyright Copyright (c) 2023 + * + */ + // Upstart + // Commodore 64 PRG executable file +.file [name="memfast.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(__start) + // Global Constants & labels + .const LIGHT_BLUE = $e + /// Color Ram + .label COLORRAM = $d800 + /// Default address of screen character matrix + .label DEFAULT_SCREEN = $400 +.segment Code + // __start +__start: { + // [1] phi from __start to __start::__init1 [phi:__start->__start::__init1] + // __start::__init1 + // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) + // [2] call conio_c64_init + jsr conio_c64_init + // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // __start::@1 + // [4] call main + jsr main + // __start::@return + // [5] return + rts +} + // conio_c64_init +// Set initial cursor position +conio_c64_init: { + // Position cursor at current line + .label BASIC_CURSOR_LINE = $d6 + // char line = *BASIC_CURSOR_LINE + // [6] conio_c64_init::line#0 = *conio_c64_init::BASIC_CURSOR_LINE -- vbuaa=_deref_pbuc1 + lda.z BASIC_CURSOR_LINE + // if(line>=CONIO_HEIGHT) + // [7] if(conio_c64_init::line#0<$19) goto conio_c64_init::@2 -- vbuaa_lt_vbuc1_then_la1 + cmp #$19 + bcc __b1 + // [9] phi from conio_c64_init to conio_c64_init::@1 [phi:conio_c64_init->conio_c64_init::@1] + // [9] phi conio_c64_init::line#2 = $19-1 [phi:conio_c64_init->conio_c64_init::@1#0] -- vbuaa=vbuc1 + lda #$19-1 + // [8] phi from conio_c64_init to conio_c64_init::@2 [phi:conio_c64_init->conio_c64_init::@2] + // conio_c64_init::@2 + // [9] phi from conio_c64_init::@2 to conio_c64_init::@1 [phi:conio_c64_init::@2->conio_c64_init::@1] + // [9] phi conio_c64_init::line#2 = conio_c64_init::line#0 [phi:conio_c64_init::@2->conio_c64_init::@1#0] -- register_copy + // conio_c64_init::@1 + __b1: + // gotoxy(0, line) + // [10] gotoxy::y#1 = conio_c64_init::line#2 + // [11] call gotoxy + jsr gotoxy + // conio_c64_init::@return + // } + // [12] return + rts +} + // main +main: { + .label screen = $400 + .label bottom = $400+$28*$c + // *((char*)0xd018) = 0x17 + // [13] *((char *) 53272) = $17 -- _deref_pbuc1=vbuc2 + // Show mixed chars on screen + lda #$17 + sta $d018 + // clrscr() + // [14] call clrscr + // Clear screen + // [29] phi from main to clrscr [phi:main->clrscr] + jsr clrscr + // [15] phi from main to main::@1 [phi:main->main::@1] + // [15] phi main::memset_fast1_c#0 = 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 + ldy #0 + // [15] phi from main::@3 to main::@1 [phi:main::@3->main::@1] + // [15] phi main::memset_fast1_c#0 = main::i#1 [phi:main::@3->main::@1#0] -- register_copy + // main::@1 + __b1: + // [16] phi from main::@1 to main::memset_fast1 [phi:main::@1->main::memset_fast1] + // main::memset_fast1 + // [17] phi from main::memset_fast1 to main::memset_fast1_@1 [phi:main::memset_fast1->main::memset_fast1_@1] + // [17] phi main::memset_fast1_num#2 = $100 [phi:main::memset_fast1->main::memset_fast1_@1#0] -- vbuxx=vwuc1 + ldx #<$100 + // [17] phi from main::memset_fast1_@1 to main::memset_fast1_@1 [phi:main::memset_fast1_@1->main::memset_fast1_@1] + // [17] phi main::memset_fast1_num#2 = main::memset_fast1_num#1 [phi:main::memset_fast1_@1->main::memset_fast1_@1#0] -- register_copy + // main::memset_fast1_@1 + memset_fast1___b1: + // *(destination+num) = c + // [18] main::screen[main::memset_fast1_num#2] = main::memset_fast1_c#0 -- pbuc1_derefidx_vbuxx=vbuyy + tya + sta screen,x + // num--; + // [19] main::memset_fast1_num#1 = -- main::memset_fast1_num#2 -- vbuxx=_dec_vbuxx + dex + // while(num) + // [20] if(0!=main::memset_fast1_num#1) goto main::memset_fast1_@1 -- 0_neq_vbuxx_then_la1 + cpx #0 + bne memset_fast1___b1 + // [21] phi from main::memset_fast1_@1 to main::@2 [phi:main::memset_fast1_@1->main::@2] + // main::@2 + // memcpy_fast(bottom, screen, 256) + // [22] call memcpy_fast + // 256 will be truncated to 0, which will copy 256 bytes! + // [41] phi from main::@2 to memcpy_fast [phi:main::@2->memcpy_fast] + jsr memcpy_fast + // main::@3 + // for(char i:0..255) + // [23] main::i#1 = ++ main::memset_fast1_c#0 -- vbuyy=_inc_vbuyy + iny + // [24] if(main::i#1!=0) goto main::@1 -- vbuyy_neq_0_then_la1 + cpy #0 + bne __b1 + // main::@return + // } + // [25] return + rts +} + // gotoxy +// Set the cursor to the specified position +// void gotoxy(char x, __register(A) char y) +gotoxy: { + // if(y>CONIO_HEIGHT) + // [26] if(gotoxy::y#1<$19+1) goto gotoxy::@return -- vbuaa_lt_vbuc1_then_la1 + cmp #$19+1 + // [27] phi from gotoxy to gotoxy::@1 [phi:gotoxy->gotoxy::@1] + // gotoxy::@1 + // gotoxy::@return + // } + // [28] return + rts +} + // clrscr +// clears the screen and moves the cursor to the upper left-hand corner of the screen. +clrscr: { + .label line_text = 4 + .label line_cols = 2 + // [30] phi from clrscr to clrscr::@1 [phi:clrscr->clrscr::@1] + // [30] phi clrscr::line_cols#5 = COLORRAM [phi:clrscr->clrscr::@1#0] -- pbuz1=pbuc1 + lda #COLORRAM + sta.z line_cols+1 + // [30] phi clrscr::line_text#5 = DEFAULT_SCREEN [phi:clrscr->clrscr::@1#1] -- pbuz1=pbuc1 + lda #DEFAULT_SCREEN + sta.z line_text+1 + // [30] phi clrscr::l#2 = 0 [phi:clrscr->clrscr::@1#2] -- vbuxx=vbuc1 + ldx #0 + // clrscr::@1 + __b1: + // for( char l=0;lclrscr::@2] + __b4: + // [33] phi clrscr::c#2 = 0 [phi:clrscr::@1->clrscr::@2#0] -- vbuyy=vbuc1 + ldy #0 + // clrscr::@2 + __b2: + // for( char c=0;cclrscr::@1] + // [30] phi clrscr::line_cols#5 = clrscr::line_cols#1 [phi:clrscr::@4->clrscr::@1#0] -- register_copy + // [30] phi clrscr::line_text#5 = clrscr::line_text#1 [phi:clrscr::@4->clrscr::@1#1] -- register_copy + // [30] phi clrscr::l#2 = clrscr::l#1 [phi:clrscr::@4->clrscr::@1#2] -- register_copy + jmp __b1 + // clrscr::@3 + __b3: + // line_text[c] = ' ' + // [38] clrscr::line_text#5[clrscr::c#2] = ' ' -- pbuz1_derefidx_vbuyy=vbuc1 + lda #' ' + sta (line_text),y + // line_cols[c] = conio_textcolor + // [39] clrscr::line_cols#5[clrscr::c#2] = LIGHT_BLUE -- pbuz1_derefidx_vbuyy=vbuc1 + lda #LIGHT_BLUE + sta (line_cols),y + // for( char c=0;cclrscr::@2] + // [33] phi clrscr::c#2 = clrscr::c#1 [phi:clrscr::@3->clrscr::@2#0] -- register_copy + jmp __b2 +} + // memcpy_fast +/** + * @brief Fast copy of data from a source to a destination memory address. + * Since the amount of bytes to be copied is a byte long, it can be executed very fast. + * The parameter num can have a value 0, which in case is equal to 256, + * which allows 256 bytes to be copied using one single byte counter! + * Depending on the optimization of the compiler, this implementation can + * result in very fast code, but it should be inlined! + * + * @param destination The memory address as the destination. + * @param source The memory address as the source. + * @param num The amount of bytes to be copied. A value of 0 will copy 256 bytes!!! + * @return void* The resulting destination memory address. + */ +// char * memcpy_fast(char *destination, char *source, __register(X) char num) +memcpy_fast: { + // [42] phi from memcpy_fast to memcpy_fast::@1 [phi:memcpy_fast->memcpy_fast::@1] + // [42] phi memcpy_fast::num#2 = $100 [phi:memcpy_fast->memcpy_fast::@1#0] -- vbuxx=vwuc1 + ldx #<$100 + // [42] phi from memcpy_fast::@1 to memcpy_fast::@1 [phi:memcpy_fast::@1->memcpy_fast::@1] + // [42] phi memcpy_fast::num#2 = memcpy_fast::num#0 [phi:memcpy_fast::@1->memcpy_fast::@1#0] -- register_copy + // memcpy_fast::@1 + __b1: + // *(destination+num) = *(source+num) + // [43] main::bottom[memcpy_fast::num#2] = main::screen[memcpy_fast::num#2] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda main.screen,x + sta main.bottom,x + // num--; + // [44] memcpy_fast::num#0 = -- memcpy_fast::num#2 -- vbuxx=_dec_vbuxx + dex + // while(num) + // [45] if(0!=memcpy_fast::num#0) goto memcpy_fast::@1 -- 0_neq_vbuxx_then_la1 + cpx #0 + bne __b1 + // memcpy_fast::@return + // } + // [46] return + rts +} + // File Data + diff --git a/src/test/ref/examples/memfast/memfast.sym b/src/test/ref/examples/memfast/memfast.sym new file mode 100644 index 000000000..288a1b763 --- /dev/null +++ b/src/test/ref/examples/memfast/memfast.sym @@ -0,0 +1,54 @@ +__constant char * const COLORRAM = (char *) 55296 +__constant char * const DEFAULT_SCREEN = (char *) 1024 +__constant const char LIGHT_BLUE = $e +void __start() +void clrscr() +char clrscr::c +char clrscr::c#1 // reg byte y 20002.0 +char clrscr::c#2 // reg byte y 12501.25 +char clrscr::l +char clrscr::l#1 // reg byte x 2002.0 +char clrscr::l#2 // reg byte x 333.6666666666667 +char *clrscr::line_cols +char *clrscr::line_cols#1 // line_cols zp[2]:2 1001.0 +char *clrscr::line_cols#5 // line_cols zp[2]:2 1500.375 +char *clrscr::line_text +char *clrscr::line_text#1 // line_text zp[2]:4 667.3333333333334 +char *clrscr::line_text#5 // line_text zp[2]:4 1714.7142857142858 +void conio_c64_init() +__constant char * const conio_c64_init::BASIC_CURSOR_LINE = (char *) 214 +char conio_c64_init::line +char conio_c64_init::line#0 // reg byte a 11.0 +char conio_c64_init::line#2 // reg byte a 22.0 +void gotoxy(char x , char y) +char gotoxy::x +char gotoxy::y +char gotoxy::y#1 // reg byte a 112.0 +void main() +__constant const char *main::bottom = (char *) 1024+(unsigned int)$28*$c +char main::i +char main::i#1 // reg byte y 151.5 +char main::memset_fast1_c +char main::memset_fast1_c#0 // reg byte y 150.375 +char *main::memset_fast1_destination +char main::memset_fast1_num +char main::memset_fast1_num#1 // reg byte x 1501.5 +char main::memset_fast1_num#2 // reg byte x 1501.5 +__constant const char *main::screen = (char *) 1024 +char * memcpy_fast(char *destination , char *source , char num) +char *memcpy_fast::destination +char memcpy_fast::num +char memcpy_fast::num#0 // reg byte x 150001.5 +char memcpy_fast::num#2 // reg byte x 200002.0 +char *memcpy_fast::return +char *memcpy_fast::source + +reg byte a [ conio_c64_init::line#2 conio_c64_init::line#0 ] +reg byte y [ main::memset_fast1_c#0 main::i#1 ] +reg byte x [ main::memset_fast1_num#2 main::memset_fast1_num#1 ] +reg byte x [ clrscr::l#2 clrscr::l#1 ] +zp[2]:4 [ clrscr::line_text#5 clrscr::line_text#1 ] +zp[2]:2 [ clrscr::line_cols#5 clrscr::line_cols#1 ] +reg byte y [ clrscr::c#2 clrscr::c#1 ] +reg byte x [ memcpy_fast::num#2 memcpy_fast::num#0 ] +reg byte a [ gotoxy::y#1 ] diff --git a/src/test/ref/examples/plus4/plus4-randomwalk.asm b/src/test/ref/examples/plus4/plus4-randomwalk.asm index e94972352..3c1cb1a84 100644 --- a/src/test/ref/examples/plus4/plus4-randomwalk.asm +++ b/src/test/ref/examples/plus4/plus4-randomwalk.asm @@ -18,7 +18,7 @@ .segmentdef Code [start=$100d] .segmentdef Data [startAfter="Code"] .segment Basic -:BasicUpstart(main) +:BasicUpstart(__start) .const OFFSET_STRUCT_MOS7360_TED_BG_COLOR = $15 .const OFFSET_STRUCT_MOS7360_TED_BORDER_COLOR = $19 .const OFFSET_STRUCT_MOS7360_TED_RASTER_LO = $1d @@ -29,18 +29,27 @@ /// The TED chip controlling video and sound on the Plus/4 and Commodore 16 .label TED = $ff00 // The random state variable - .label rand_state = 2 + .label rand_state = $11 .segment Code +__start: { + // volatile unsigned int rand_state = 1 + lda #<1 + sta.z rand_state + lda #>1 + sta.z rand_state+1 + jsr main + rts +} main: { - .label __3 = $d - .label __6 = $11 - .label __8 = $d + .label __3 = 2 + .label __6 = $f + .label __8 = 2 .label __10 = $b - .label __24 = $d - .label offset = $d + .label __24 = 2 + .label offset = 2 .label y = 6 - .label __29 = $f - .label __30 = $d + .label __29 = $d + .label __30 = 2 // memset(DEFAULT_SCREEN, 0xa0, 1000) ldx #$a0 lda #BORDER_COLOR = 0 sta TED+OFFSET_STRUCT_MOS7360_TED_BORDER_COLOR - lda #<1 - sta.z rand_state - lda #>1 - sta.z rand_state+1 ldx #$14 lda #$c sta.z y diff --git a/src/test/ref/examples/plus4/plus4-randomwalk.cfg b/src/test/ref/examples/plus4/plus4-randomwalk.cfg index 3a8cae751..5d01730a8 100644 --- a/src/test/ref/examples/plus4/plus4-randomwalk.cfg +++ b/src/test/ref/examples/plus4/plus4-randomwalk.cfg @@ -1,120 +1,134 @@ +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] rand_state = 1 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [2] phi() + [3] call main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [4] return + to:@return + void main() -main: scope:[main] from - [0] phi() - [1] call memset +main: scope:[main] from __start::@1 + [5] phi() + [6] call memset to:main::@10 main::@10: scope:[main] from main - [2] phi() - [3] call memset + [7] phi() + [8] call memset to:main::@11 main::@11: scope:[main] from main::@10 - [4] phi() - [5] call memset + [9] phi() + [10] call memset to:main::@12 main::@12: scope:[main] from main::@11 - [6] *((char *)TED+OFFSET_STRUCT_MOS7360_TED_BG_COLOR) = 0 - [7] *((char *)TED+OFFSET_STRUCT_MOS7360_TED_BORDER_COLOR) = 0 + [11] *((char *)TED+OFFSET_STRUCT_MOS7360_TED_BG_COLOR) = 0 + [12] *((char *)TED+OFFSET_STRUCT_MOS7360_TED_BORDER_COLOR) = 0 to:main::@1 main::@1: scope:[main] from main::@12 main::@6 - [8] rand_state#12 = phi( main::@12/1, main::@6/rand_state#10 ) - [8] main::x#11 = phi( main::@12/$14, main::@6/main::x#10 ) - [8] main::y#11 = phi( main::@12/$c, main::@6/main::y#10 ) + [13] main::x#11 = phi( main::@12/$14, main::@6/main::x#10 ) + [13] main::y#11 = phi( main::@12/$c, main::@6/main::y#10 ) to:main::@2 main::@2: scope:[main] from main::@1 - [9] main::$24 = (unsigned int)main::y#11 - [10] main::$29 = main::$24 << 2 - [11] main::$30 = main::$29 + main::$24 - [12] main::$3 = main::$30 << 3 - [13] main::offset#0 = main::$3 + main::x#11 - [14] main::$6 = VISITS + main::offset#0 - [15] *main::$6 = ++ *main::$6 - [16] main::cnt#0 = *main::$6 - [17] main::$8 = DEFAULT_COLORRAM + main::offset#0 - [18] main::$9 = main::cnt#0 & $f - [19] *main::$8 = FADE[main::$9] - [20] call rand - [21] rand::return#2 = rand::return#0 + [14] main::$24 = (unsigned int)main::y#11 + [15] main::$29 = main::$24 << 2 + [16] main::$30 = main::$29 + main::$24 + [17] main::$3 = main::$30 << 3 + [18] main::offset#0 = main::$3 + main::x#11 + [19] main::$6 = VISITS + main::offset#0 + [20] *main::$6 = ++ *main::$6 + [21] main::cnt#0 = *main::$6 + [22] main::$8 = DEFAULT_COLORRAM + main::offset#0 + [23] main::$9 = main::cnt#0 & $f + [24] *main::$8 = FADE[main::$9] + [25] call rand + [26] rand::return#2 = rand::return#0 to:main::@13 main::@13: scope:[main] from main::@2 - [22] main::$10 = rand::return#2 - [23] main::rnd#0 = byte1 main::$10 - [24] main::$12 = main::rnd#0 & $80 - [25] if(0!=main::$12) goto main::@3 + [27] main::$10 = rand::return#2 + [28] main::rnd#0 = byte1 main::$10 + [29] main::$12 = main::rnd#0 & $80 + [30] if(0!=main::$12) goto main::@3 to:main::@7 main::@7: scope:[main] from main::@13 - [26] main::$13 = main::rnd#0 & $40 - [27] if(0!=main::$13) goto main::@4 + [31] main::$13 = main::rnd#0 & $40 + [32] if(0!=main::$13) goto main::@4 to:main::@8 main::@8: scope:[main] from main::@7 - [28] main::y#2 = -- main::y#11 - [29] if(main::y#2!=$ff) goto main::@14 + [33] main::y#2 = -- main::y#11 + [34] if(main::y#2!=$ff) goto main::@14 to:main::@6 main::@14: scope:[main] from main::@8 - [30] phi() - to:main::@6 -main::@6: scope:[main] from main::@14 main::@15 main::@16 main::@17 main::@4 main::@5 main::@6 main::@8 main::@9 - [31] main::x#10 = phi( main::@14/main::x#11, main::@8/main::x#11, main::@15/main::x#2, main::@9/0, main::@16/main::x#11, main::@4/main::x#11, main::@17/main::x#1, main::@5/$27, main::@6/main::x#10 ) - [31] main::y#10 = phi( main::@14/main::y#2, main::@8/0, main::@15/main::y#11, main::@9/main::y#11, main::@16/main::y#1, main::@4/$18, main::@17/main::y#11, main::@5/main::y#11, main::@6/main::y#10 ) - [32] if(*((char *)TED+OFFSET_STRUCT_MOS7360_TED_RASTER_LO)!=$ff) goto main::@6 - to:main::@1 -main::@4: scope:[main] from main::@7 - [33] main::y#1 = ++ main::y#11 - [34] if(main::y#1!=$19) goto main::@16 - to:main::@6 -main::@16: scope:[main] from main::@4 [35] phi() to:main::@6 -main::@3: scope:[main] from main::@13 - [36] main::$18 = main::rnd#0 & $40 - [37] if(0!=main::$18) goto main::@5 - to:main::@9 -main::@9: scope:[main] from main::@3 - [38] main::x#2 = -- main::x#11 - [39] if(main::x#2!=$ff) goto main::@15 +main::@6: scope:[main] from main::@14 main::@15 main::@16 main::@17 main::@4 main::@5 main::@6 main::@8 main::@9 + [36] main::x#10 = phi( main::@14/main::x#11, main::@8/main::x#11, main::@15/main::x#2, main::@9/0, main::@16/main::x#11, main::@4/main::x#11, main::@17/main::x#1, main::@5/$27, main::@6/main::x#10 ) + [36] main::y#10 = phi( main::@14/main::y#2, main::@8/0, main::@15/main::y#11, main::@9/main::y#11, main::@16/main::y#1, main::@4/$18, main::@17/main::y#11, main::@5/main::y#11, main::@6/main::y#10 ) + [37] if(*((char *)TED+OFFSET_STRUCT_MOS7360_TED_RASTER_LO)!=$ff) goto main::@6 + to:main::@1 +main::@4: scope:[main] from main::@7 + [38] main::y#1 = ++ main::y#11 + [39] if(main::y#1!=$19) goto main::@16 to:main::@6 -main::@15: scope:[main] from main::@9 +main::@16: scope:[main] from main::@4 [40] phi() to:main::@6 +main::@3: scope:[main] from main::@13 + [41] main::$18 = main::rnd#0 & $40 + [42] if(0!=main::$18) goto main::@5 + to:main::@9 +main::@9: scope:[main] from main::@3 + [43] main::x#2 = -- main::x#11 + [44] if(main::x#2!=$ff) goto main::@15 + to:main::@6 +main::@15: scope:[main] from main::@9 + [45] phi() + to:main::@6 main::@5: scope:[main] from main::@3 - [41] main::x#1 = ++ main::x#11 - [42] if(main::x#1!=$28) goto main::@17 + [46] main::x#1 = ++ main::x#11 + [47] if(main::x#1!=$28) goto main::@17 to:main::@6 main::@17: scope:[main] from main::@5 - [43] phi() + [48] phi() to:main::@6 void * memset(void *str , char c , unsigned int num) memset: scope:[memset] from main main::@10 main::@11 - [44] memset::c#5 = phi( main/$a0, main::@10/0, main::@11/0 ) - [44] memset::str#4 = phi( main/(void *)DEFAULT_SCREEN, main::@10/(void *)DEFAULT_COLORRAM, main::@11/(void *)VISITS ) + [49] memset::c#5 = phi( main/$a0, main::@10/0, main::@11/0 ) + [49] memset::str#4 = phi( main/(void *)DEFAULT_SCREEN, main::@10/(void *)DEFAULT_COLORRAM, main::@11/(void *)VISITS ) to:memset::@1 memset::@1: scope:[memset] from memset - [45] memset::end#0 = (char *)memset::str#4 + $3e8 - [46] memset::dst#4 = (char *)memset::str#4 + [50] memset::end#0 = (char *)memset::str#4 + $3e8 + [51] memset::dst#4 = (char *)memset::str#4 to:memset::@2 memset::@2: scope:[memset] from memset::@1 memset::@3 - [47] memset::dst#2 = phi( memset::@1/memset::dst#4, memset::@3/memset::dst#1 ) - [48] if(memset::dst#2!=memset::end#0) goto memset::@3 + [52] memset::dst#2 = phi( memset::@1/memset::dst#4, memset::@3/memset::dst#1 ) + [53] if(memset::dst#2!=memset::end#0) goto memset::@3 to:memset::@return memset::@return: scope:[memset] from memset::@2 - [49] return + [54] return to:@return memset::@3: scope:[memset] from memset::@2 - [50] *memset::dst#2 = memset::c#5 - [51] memset::dst#1 = ++ memset::dst#2 + [55] *memset::dst#2 = memset::c#5 + [56] memset::dst#1 = ++ memset::dst#2 to:memset::@2 unsigned int rand() rand: scope:[rand] from main::@2 - [52] rand::$0 = rand_state#12 << 7 - [53] rand_state#0 = rand_state#12 ^ rand::$0 - [54] rand::$1 = rand_state#0 >> 9 - [55] rand_state#1 = rand_state#0 ^ rand::$1 - [56] rand::$2 = rand_state#1 << 8 - [57] rand_state#10 = rand_state#1 ^ rand::$2 - [58] rand::return#0 = rand_state#10 + [57] rand::$0 = rand_state << 7 + [58] rand_state = rand_state ^ rand::$0 + [59] rand::$1 = rand_state >> 9 + [60] rand_state = rand_state ^ rand::$1 + [61] rand::$2 = rand_state << 8 + [62] rand_state = rand_state ^ rand::$2 + [63] rand::return#0 = rand_state to:rand::@return rand::@return: scope:[rand] from rand - [59] return + [64] return to:@return diff --git a/src/test/ref/examples/plus4/plus4-randomwalk.log b/src/test/ref/examples/plus4/plus4-randomwalk.log index 91996d03d..5904b6adc 100644 --- a/src/test/ref/examples/plus4/plus4-randomwalk.log +++ b/src/test/ref/examples/plus4/plus4-randomwalk.log @@ -53,26 +53,22 @@ memset::@return: scope:[memset] from memset::@1 unsigned int rand() rand: scope:[rand] from main::@2 - rand_state#9 = phi( main::@2/rand_state#15 ) - rand::$0 = rand_state#9 << 7 - rand_state#0 = rand_state#9 ^ rand::$0 - rand::$1 = rand_state#0 >> 9 - rand_state#1 = rand_state#0 ^ rand::$1 - rand::$2 = rand_state#1 << 8 - rand_state#2 = rand_state#1 ^ rand::$2 - rand::return#0 = rand_state#2 + rand::$0 = rand_state << 7 + rand_state = rand_state ^ rand::$0 + rand::$1 = rand_state >> 9 + rand_state = rand_state ^ rand::$1 + rand::$2 = rand_state << 8 + rand_state = rand_state ^ rand::$2 + rand::return#0 = rand_state to:rand::@return rand::@return: scope:[rand] from rand - rand_state#10 = phi( rand/rand_state#2 ) rand::return#3 = phi( rand/rand::return#0 ) rand::return#1 = rand::return#3 - rand_state#3 = rand_state#10 return to:@return void main() main: scope:[main] from __start::@1 - rand_state#32 = phi( __start::@1/rand_state#17 ) memset::str#0 = (void *)DEFAULT_SCREEN memset::c#0 = $a0 memset::num#0 = $3e8 @@ -80,7 +76,6 @@ main: scope:[main] from __start::@1 memset::return#2 = memset::return#1 to:main::@14 main::@14: scope:[main] from main - rand_state#29 = phi( main/rand_state#32 ) memset::str#1 = (void *)DEFAULT_COLORRAM memset::c#1 = 0 memset::num#1 = $3e8 @@ -88,7 +83,6 @@ main::@14: scope:[main] from main memset::return#3 = memset::return#1 to:main::@15 main::@15: scope:[main] from main::@14 - rand_state#20 = phi( main::@14/rand_state#29 ) memset::str#2 = (void *)VISITS memset::c#2 = 0 memset::num#2 = $3e8 @@ -96,21 +90,18 @@ main::@15: scope:[main] from main::@14 memset::return#4 = memset::return#1 to:main::@16 main::@16: scope:[main] from main::@15 - rand_state#18 = phi( main::@15/rand_state#20 ) *((char *)TED+OFFSET_STRUCT_MOS7360_TED_BG_COLOR) = 0 *((char *)TED+OFFSET_STRUCT_MOS7360_TED_BORDER_COLOR) = 0 main::x#0 = $14 main::y#0 = $c to:main::@1 main::@1: scope:[main] from main::@16 main::@8 - rand_state#16 = phi( main::@16/rand_state#18, main::@8/rand_state#19 ) main::x#8 = phi( main::@16/main::x#0, main::@8/main::x#10 ) main::y#8 = phi( main::@16/main::y#0, main::@8/main::y#10 ) main::$25 = 0 != 1 if(main::$25) goto main::@2 to:main::@return main::@2: scope:[main] from main::@1 - rand_state#15 = phi( main::@1/rand_state#16 ) main::x#5 = phi( main::@1/main::x#8 ) main::y#5 = phi( main::@1/main::y#8 ) main::$24 = (unsigned int)main::y#5 @@ -129,17 +120,14 @@ main::@2: scope:[main] from main::@1 main::@17: scope:[main] from main::@2 main::y#11 = phi( main::@2/main::y#5 ) main::x#11 = phi( main::@2/main::x#5 ) - rand_state#11 = phi( main::@2/rand_state#3 ) rand::return#4 = phi( main::@2/rand::return#2 ) main::$10 = rand::return#4 - rand_state#4 = rand_state#11 main::rnd#0 = byte1 main::$10 main::$12 = main::rnd#0 & $80 main::$26 = 0 != main::$12 if(main::$26) goto main::@3 to:main::@9 main::@3: scope:[main] from main::@17 - rand_state#31 = phi( main::@17/rand_state#4 ) main::y#16 = phi( main::@17/main::y#11 ) main::x#9 = phi( main::@17/main::x#11 ) main::rnd#1 = phi( main::@17/main::rnd#0 ) @@ -148,7 +136,6 @@ main::@3: scope:[main] from main::@17 if(main::$27) goto main::@6 to:main::@12 main::@9: scope:[main] from main::@17 - rand_state#30 = phi( main::@17/rand_state#4 ) main::x#16 = phi( main::@17/main::x#11 ) main::y#9 = phi( main::@17/main::y#11 ) main::rnd#2 = phi( main::@17/main::rnd#0 ) @@ -157,7 +144,6 @@ main::@9: scope:[main] from main::@17 if(main::$28) goto main::@4 to:main::@10 main::@4: scope:[main] from main::@9 - rand_state#25 = phi( main::@9/rand_state#30 ) main::x#14 = phi( main::@9/main::x#16 ) main::y#6 = phi( main::@9/main::y#9 ) main::y#1 = ++ main::y#6 @@ -166,7 +152,6 @@ main::@4: scope:[main] from main::@9 if(main::$17) goto main::@8 to:main::@5 main::@10: scope:[main] from main::@9 - rand_state#21 = phi( main::@9/rand_state#30 ) main::x#12 = phi( main::@9/main::x#16 ) main::y#7 = phi( main::@9/main::y#9 ) main::y#2 = -- main::y#7 @@ -175,17 +160,14 @@ main::@10: scope:[main] from main::@9 if(main::$15) goto main::@8 to:main::@11 main::@11: scope:[main] from main::@10 - rand_state#22 = phi( main::@10/rand_state#21 ) main::x#13 = phi( main::@10/main::x#12 ) main::y#3 = 0 to:main::@8 main::@5: scope:[main] from main::@4 - rand_state#26 = phi( main::@4/rand_state#25 ) main::x#15 = phi( main::@4/main::x#14 ) main::y#4 = $18 to:main::@8 main::@6: scope:[main] from main::@3 - rand_state#27 = phi( main::@3/rand_state#31 ) main::y#14 = phi( main::@3/main::y#16 ) main::x#6 = phi( main::@3/main::x#9 ) main::x#1 = ++ main::x#6 @@ -194,7 +176,6 @@ main::@6: scope:[main] from main::@3 if(main::$22) goto main::@8 to:main::@7 main::@12: scope:[main] from main::@3 - rand_state#23 = phi( main::@3/rand_state#31 ) main::y#12 = phi( main::@3/main::y#16 ) main::x#7 = phi( main::@3/main::x#9 ) main::x#2 = -- main::x#7 @@ -203,25 +184,20 @@ main::@12: scope:[main] from main::@3 if(main::$20) goto main::@8 to:main::@13 main::@13: scope:[main] from main::@12 - rand_state#24 = phi( main::@12/rand_state#23 ) main::y#13 = phi( main::@12/main::y#12 ) main::x#3 = 0 to:main::@8 main::@7: scope:[main] from main::@6 - rand_state#28 = phi( main::@6/rand_state#27 ) main::y#15 = phi( main::@6/main::y#14 ) main::x#4 = $27 to:main::@8 main::@8: scope:[main] from main::@10 main::@11 main::@12 main::@13 main::@4 main::@5 main::@6 main::@7 main::@8 - rand_state#19 = phi( main::@10/rand_state#21, main::@11/rand_state#22, main::@12/rand_state#23, main::@13/rand_state#24, main::@4/rand_state#25, main::@5/rand_state#26, main::@6/rand_state#27, main::@7/rand_state#28, main::@8/rand_state#19 ) main::x#10 = phi( main::@10/main::x#12, main::@11/main::x#13, main::@12/main::x#2, main::@13/main::x#3, main::@4/main::x#14, main::@5/main::x#15, main::@6/main::x#1, main::@7/main::x#4, main::@8/main::x#10 ) main::y#10 = phi( main::@10/main::y#2, main::@11/main::y#3, main::@12/main::y#12, main::@13/main::y#13, main::@4/main::y#1, main::@5/main::y#4, main::@6/main::y#14, main::@7/main::y#15, main::@8/main::y#10 ) main::$23 = *((char *)TED+OFFSET_STRUCT_MOS7360_TED_RASTER_LO) != $ff if(main::$23) goto main::@8 to:main::@1 main::@return: scope:[main] from main::@1 - rand_state#12 = phi( main::@1/rand_state#16 ) - rand_state#5 = rand_state#12 return to:@return @@ -229,19 +205,14 @@ void __start() __start: scope:[__start] from to:__start::__init1 __start::__init1: scope:[__start] from __start - rand_state#6 = 1 + rand_state = 1 to:__start::@1 __start::@1: scope:[__start] from __start::__init1 - rand_state#17 = phi( __start::__init1/rand_state#6 ) call main to:__start::@2 __start::@2: scope:[__start] from __start::@1 - rand_state#13 = phi( __start::@1/rand_state#5 ) - rand_state#7 = rand_state#13 to:__start::@return __start::@return: scope:[__start] from __start::@2 - rand_state#14 = phi( __start::@2/rand_state#7 ) - rand_state#8 = rand_state#14 return to:@return @@ -381,45 +352,12 @@ unsigned int rand::return#1 unsigned int rand::return#2 unsigned int rand::return#3 unsigned int rand::return#4 -unsigned int rand_state -unsigned int rand_state#0 -unsigned int rand_state#1 -unsigned int rand_state#10 -unsigned int rand_state#11 -unsigned int rand_state#12 -unsigned int rand_state#13 -unsigned int rand_state#14 -unsigned int rand_state#15 -unsigned int rand_state#16 -unsigned int rand_state#17 -unsigned int rand_state#18 -unsigned int rand_state#19 -unsigned int rand_state#2 -unsigned int rand_state#20 -unsigned int rand_state#21 -unsigned int rand_state#22 -unsigned int rand_state#23 -unsigned int rand_state#24 -unsigned int rand_state#25 -unsigned int rand_state#26 -unsigned int rand_state#27 -unsigned int rand_state#28 -unsigned int rand_state#29 -unsigned int rand_state#3 -unsigned int rand_state#30 -unsigned int rand_state#31 -unsigned int rand_state#32 -unsigned int rand_state#4 -unsigned int rand_state#5 -unsigned int rand_state#6 -unsigned int rand_state#7 -unsigned int rand_state#8 -unsigned int rand_state#9 +__loadstore volatile unsigned int rand_state Adding number conversion cast (unumber) 0 in memset::$0 = memset::num#3 > 0 -Adding number conversion cast (unumber) 7 in rand::$0 = rand_state#9 << 7 -Adding number conversion cast (unumber) 9 in rand::$1 = rand_state#0 >> 9 -Adding number conversion cast (unumber) 8 in rand::$2 = rand_state#1 << 8 +Adding number conversion cast (unumber) 7 in rand::$0 = rand_state << 7 +Adding number conversion cast (unumber) 9 in rand::$1 = rand_state >> 9 +Adding number conversion cast (unumber) 8 in rand::$2 = rand_state << 8 Adding number conversion cast (unumber) $a0 in memset::c#0 = $a0 Adding number conversion cast (unumber) $3e8 in memset::num#0 = $3e8 Adding number conversion cast (unumber) 0 in memset::c#1 = 0 @@ -534,10 +472,10 @@ Inferred type updated to char in main::$12 = main::rnd#0 & $80 Inferred type updated to char in main::$18 = main::rnd#1 & $40 Inferred type updated to char in main::$13 = main::rnd#2 & $40 Inversing boolean not [2] memset::$1 = memset::num#3 <= 0 from [1] memset::$0 = memset::num#3 > 0 -Inversing boolean not [88] main::$17 = main::y#1 != $19 from [87] main::$16 = main::y#1 == $19 -Inversing boolean not [93] main::$15 = main::y#2 != $ff from [92] main::$14 = main::y#2 == $ff -Inversing boolean not [102] main::$22 = main::x#1 != $28 from [101] main::$21 = main::x#1 == $28 -Inversing boolean not [107] main::$20 = main::x#2 != $ff from [106] main::$19 = main::x#2 == $ff +Inversing boolean not [81] main::$17 = main::y#1 != $19 from [80] main::$16 = main::y#1 == $19 +Inversing boolean not [86] main::$15 = main::y#2 != $ff from [85] main::$14 = main::y#2 == $ff +Inversing boolean not [95] main::$22 = main::x#1 != $28 from [94] main::$21 = main::x#1 == $28 +Inversing boolean not [100] main::$20 = main::x#2 != $ff from [99] main::$19 = main::x#2 == $ff Successful SSA optimization Pass2UnaryNotSimplification Alias memset::return#0 = memset::str#3 memset::return#5 memset::return#1 Alias memset::str#4 = memset::str#5 @@ -548,41 +486,30 @@ Alias memset::dst#2 = memset::dst#3 Alias memset::end#1 = memset::end#2 Alias memset::str#6 = memset::str#7 Alias rand::return#0 = rand::return#3 rand::return#1 -Alias rand_state#10 = rand_state#2 rand_state#3 -Alias rand_state#18 = rand_state#29 rand_state#32 rand_state#20 Alias main::y#11 = main::y#5 main::y#8 main::y#16 main::y#9 main::y#6 main::y#7 main::y#14 main::y#12 main::y#13 main::y#15 Alias main::x#11 = main::x#5 main::x#8 main::x#9 main::x#16 main::x#14 main::x#12 main::x#13 main::x#15 main::x#6 main::x#7 -Alias rand_state#12 = rand_state#15 rand_state#16 rand_state#5 Alias rand::return#2 = rand::return#4 -Alias rand_state#11 = rand_state#4 rand_state#31 rand_state#30 rand_state#25 rand_state#21 rand_state#22 rand_state#26 rand_state#27 rand_state#23 rand_state#24 rand_state#28 Alias main::rnd#0 = main::rnd#1 main::rnd#2 -Alias rand_state#17 = rand_state#6 -Alias rand_state#13 = rand_state#7 rand_state#14 rand_state#8 Successful SSA optimization Pass2AliasElimination Identical Phi Values memset::end#1 memset::end#0 Identical Phi Values memset::str#6 memset::str#4 Identical Phi Values memset::c#3 memset::c#5 -Identical Phi Values rand_state#9 rand_state#12 -Identical Phi Values rand_state#18 rand_state#17 -Identical Phi Values rand_state#11 rand_state#10 -Identical Phi Values rand_state#19 rand_state#11 -Identical Phi Values rand_state#13 rand_state#12 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values memset::return#0 memset::str#4 Successful SSA optimization Pass2IdenticalPhiElimination -Identified duplicate assignment right side [63] main::$6 = VISITS + main::offset#0 +Identified duplicate assignment right side [57] main::$6 = VISITS + main::offset#0 Successful SSA optimization Pass2DuplicateRValueIdentification Simple Condition memset::$1 [2] if(memset::num#3<=0) goto memset::@1 Simple Condition memset::$3 [9] if(memset::dst#2!=memset::end#0) goto memset::@4 -Simple Condition main::$25 [44] if(0!=1) goto main::@2 -Simple Condition main::$26 [62] if(0!=main::$12) goto main::@3 -Simple Condition main::$27 [65] if(0!=main::$18) goto main::@6 -Simple Condition main::$28 [68] if(0!=main::$13) goto main::@4 -Simple Condition main::$17 [71] if(main::y#1!=$19) goto main::@8 -Simple Condition main::$15 [74] if(main::y#2!=$ff) goto main::@8 -Simple Condition main::$22 [79] if(main::x#1!=$28) goto main::@8 -Simple Condition main::$20 [82] if(main::x#2!=$ff) goto main::@8 -Simple Condition main::$23 [87] if(*((char *)TED+OFFSET_STRUCT_MOS7360_TED_RASTER_LO)!=$ff) goto main::@8 +Simple Condition main::$25 [42] if(0!=1) goto main::@2 +Simple Condition main::$26 [59] if(0!=main::$12) goto main::@3 +Simple Condition main::$27 [62] if(0!=main::$18) goto main::@6 +Simple Condition main::$28 [65] if(0!=main::$13) goto main::@4 +Simple Condition main::$17 [68] if(main::y#1!=$19) goto main::@8 +Simple Condition main::$15 [71] if(main::y#2!=$ff) goto main::@8 +Simple Condition main::$22 [76] if(main::x#1!=$28) goto main::@8 +Simple Condition main::$20 [79] if(main::x#2!=$ff) goto main::@8 +Simple Condition main::$23 [84] if(*((char *)TED+OFFSET_STRUCT_MOS7360_TED_RASTER_LO)!=$ff) goto main::@8 Successful SSA optimization Pass2ConditionalJumpSimplification Constant memset::str#0 = (void *)DEFAULT_SCREEN Constant memset::c#0 = $a0 @@ -599,9 +526,8 @@ Constant main::y#3 = 0 Constant main::y#4 = $18 Constant main::x#3 = 0 Constant main::x#4 = $27 -Constant rand_state#17 = 1 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [44] if(0!=1) goto main::@2 +if() condition always true - replacing block destination [42] if(0!=1) goto main::@2 Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks @@ -609,13 +535,6 @@ Eliminating unused variable memset::return#2 and assignment [19] memset::return# Eliminating unused variable memset::return#3 and assignment [21] memset::return#3 = memset::str#4 Eliminating unused variable memset::return#4 and assignment [23] memset::return#4 = memset::str#4 Successful SSA optimization PassNEliminateUnusedVars -Removing unused procedure __start -Removing unused procedure block __start -Removing unused procedure block __start::__init1 -Removing unused procedure block __start::@1 -Removing unused procedure block __start::@2 -Removing unused procedure block __start::@return -Successful SSA optimization PassNEliminateEmptyStart Alias main::$6 = main::$5 Successful SSA optimization Pass2AliasElimination Inlining Noop Cast [2] memset::$4 = (char *)memset::str#4 keeping memset::str#4 @@ -637,10 +556,8 @@ Inlining constant with var siblings main::y#3 Inlining constant with var siblings main::y#4 Inlining constant with var siblings main::x#3 Inlining constant with var siblings main::x#4 -Inlining constant with var siblings rand_state#17 Constant inlined memset::str#2 = (void *)VISITS Constant inlined memset::str#1 = (void *)DEFAULT_COLORRAM -Constant inlined rand_state#17 = 1 Constant inlined memset::str#0 = (void *)DEFAULT_SCREEN Constant inlined memset::num#2 = $3e8 Constant inlined main::x#3 = 0 @@ -677,33 +594,37 @@ Added new block during phi lifting main::@20(between main::@12 and main::@8) Added new block during phi lifting main::@21(between main::@4 and main::@8) Added new block during phi lifting main::@22(between main::@6 and main::@8) Added new block during phi lifting main::@23(between main::@8 and main::@8) +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of __start::@2 Adding NOP phi() at start of main Adding NOP phi() at start of main::@14 Adding NOP phi() at start of main::@15 Adding NOP phi() at start of memset::@1 CALL GRAPH -Calls in [main] to memset:1 memset:3 memset:5 rand:20 +Calls in [__start] to main:3 +Calls in [main] to memset:7 memset:9 memset:11 rand:26 -Created 8 initial phi equivalence classes -Coalesced [30] main::x#19 = main::x#11 -Coalesced [33] main::y#17 = main::y#10 -Coalesced (already) [34] main::x#17 = main::x#10 -Coalesced [35] rand_state#33 = rand_state#10 -Coalesced (already) [36] main::y#24 = main::y#10 -Coalesced (already) [37] main::x#24 = main::x#10 -Coalesced [38] main::y#18 = main::y#2 -Coalesced (already) [39] main::x#18 = main::x#11 -Coalesced (already) [42] main::x#22 = main::x#11 -Coalesced [43] main::y#21 = main::y#1 -Coalesced (already) [44] main::x#21 = main::x#11 -Coalesced (already) [49] main::y#20 = main::y#11 -Coalesced (already) [50] main::y#19 = main::y#11 -Coalesced [51] main::x#20 = main::x#2 -Coalesced (already) [54] main::y#23 = main::y#11 -Coalesced (already) [55] main::y#22 = main::y#11 -Coalesced [56] main::x#23 = main::x#1 -Coalesced [66] memset::dst#5 = memset::dst#1 -Coalesced down to 6 phi equivalence classes +Created 7 initial phi equivalence classes +Coalesced [36] main::x#19 = main::x#11 +Coalesced [39] main::y#17 = main::y#10 +Coalesced (already) [40] main::x#17 = main::x#10 +Coalesced (already) [41] main::y#24 = main::y#10 +Coalesced (already) [42] main::x#24 = main::x#10 +Coalesced [43] main::y#18 = main::y#2 +Coalesced (already) [44] main::x#18 = main::x#11 +Coalesced (already) [47] main::x#22 = main::x#11 +Coalesced [48] main::y#21 = main::y#1 +Coalesced (already) [49] main::x#21 = main::x#11 +Coalesced (already) [54] main::y#20 = main::y#11 +Coalesced (already) [55] main::y#19 = main::y#11 +Coalesced [56] main::x#20 = main::x#2 +Coalesced (already) [59] main::y#23 = main::y#11 +Coalesced (already) [60] main::y#22 = main::y#11 +Coalesced [61] main::x#23 = main::x#1 +Coalesced [71] memset::dst#5 = memset::dst#1 +Coalesced down to 5 phi equivalence classes +Culled Empty Block label __start::@2 Culled Empty Block label main::@11 Culled Empty Block label main::@18 Culled Empty Block label main::@23 @@ -727,6 +648,8 @@ Renumbering block main::@19 to main::@14 Renumbering block main::@20 to main::@15 Renumbering block main::@21 to main::@16 Renumbering block main::@22 to main::@17 +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 Adding NOP phi() at start of main Adding NOP phi() at start of main::@10 Adding NOP phi() at start of main::@11 @@ -737,189 +660,200 @@ Adding NOP phi() at start of main::@17 FINAL CONTROL FLOW GRAPH -void main() -main: scope:[main] from +void __start() +__start: scope:[__start] from [0] phi() - [1] call memset + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] rand_state = 1 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [2] phi() + [3] call main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [4] return + to:@return + +void main() +main: scope:[main] from __start::@1 + [5] phi() + [6] call memset to:main::@10 main::@10: scope:[main] from main - [2] phi() - [3] call memset + [7] phi() + [8] call memset to:main::@11 main::@11: scope:[main] from main::@10 - [4] phi() - [5] call memset + [9] phi() + [10] call memset to:main::@12 main::@12: scope:[main] from main::@11 - [6] *((char *)TED+OFFSET_STRUCT_MOS7360_TED_BG_COLOR) = 0 - [7] *((char *)TED+OFFSET_STRUCT_MOS7360_TED_BORDER_COLOR) = 0 + [11] *((char *)TED+OFFSET_STRUCT_MOS7360_TED_BG_COLOR) = 0 + [12] *((char *)TED+OFFSET_STRUCT_MOS7360_TED_BORDER_COLOR) = 0 to:main::@1 main::@1: scope:[main] from main::@12 main::@6 - [8] rand_state#12 = phi( main::@12/1, main::@6/rand_state#10 ) - [8] main::x#11 = phi( main::@12/$14, main::@6/main::x#10 ) - [8] main::y#11 = phi( main::@12/$c, main::@6/main::y#10 ) + [13] main::x#11 = phi( main::@12/$14, main::@6/main::x#10 ) + [13] main::y#11 = phi( main::@12/$c, main::@6/main::y#10 ) to:main::@2 main::@2: scope:[main] from main::@1 - [9] main::$24 = (unsigned int)main::y#11 - [10] main::$29 = main::$24 << 2 - [11] main::$30 = main::$29 + main::$24 - [12] main::$3 = main::$30 << 3 - [13] main::offset#0 = main::$3 + main::x#11 - [14] main::$6 = VISITS + main::offset#0 - [15] *main::$6 = ++ *main::$6 - [16] main::cnt#0 = *main::$6 - [17] main::$8 = DEFAULT_COLORRAM + main::offset#0 - [18] main::$9 = main::cnt#0 & $f - [19] *main::$8 = FADE[main::$9] - [20] call rand - [21] rand::return#2 = rand::return#0 + [14] main::$24 = (unsigned int)main::y#11 + [15] main::$29 = main::$24 << 2 + [16] main::$30 = main::$29 + main::$24 + [17] main::$3 = main::$30 << 3 + [18] main::offset#0 = main::$3 + main::x#11 + [19] main::$6 = VISITS + main::offset#0 + [20] *main::$6 = ++ *main::$6 + [21] main::cnt#0 = *main::$6 + [22] main::$8 = DEFAULT_COLORRAM + main::offset#0 + [23] main::$9 = main::cnt#0 & $f + [24] *main::$8 = FADE[main::$9] + [25] call rand + [26] rand::return#2 = rand::return#0 to:main::@13 main::@13: scope:[main] from main::@2 - [22] main::$10 = rand::return#2 - [23] main::rnd#0 = byte1 main::$10 - [24] main::$12 = main::rnd#0 & $80 - [25] if(0!=main::$12) goto main::@3 + [27] main::$10 = rand::return#2 + [28] main::rnd#0 = byte1 main::$10 + [29] main::$12 = main::rnd#0 & $80 + [30] if(0!=main::$12) goto main::@3 to:main::@7 main::@7: scope:[main] from main::@13 - [26] main::$13 = main::rnd#0 & $40 - [27] if(0!=main::$13) goto main::@4 + [31] main::$13 = main::rnd#0 & $40 + [32] if(0!=main::$13) goto main::@4 to:main::@8 main::@8: scope:[main] from main::@7 - [28] main::y#2 = -- main::y#11 - [29] if(main::y#2!=$ff) goto main::@14 + [33] main::y#2 = -- main::y#11 + [34] if(main::y#2!=$ff) goto main::@14 to:main::@6 main::@14: scope:[main] from main::@8 - [30] phi() - to:main::@6 -main::@6: scope:[main] from main::@14 main::@15 main::@16 main::@17 main::@4 main::@5 main::@6 main::@8 main::@9 - [31] main::x#10 = phi( main::@14/main::x#11, main::@8/main::x#11, main::@15/main::x#2, main::@9/0, main::@16/main::x#11, main::@4/main::x#11, main::@17/main::x#1, main::@5/$27, main::@6/main::x#10 ) - [31] main::y#10 = phi( main::@14/main::y#2, main::@8/0, main::@15/main::y#11, main::@9/main::y#11, main::@16/main::y#1, main::@4/$18, main::@17/main::y#11, main::@5/main::y#11, main::@6/main::y#10 ) - [32] if(*((char *)TED+OFFSET_STRUCT_MOS7360_TED_RASTER_LO)!=$ff) goto main::@6 - to:main::@1 -main::@4: scope:[main] from main::@7 - [33] main::y#1 = ++ main::y#11 - [34] if(main::y#1!=$19) goto main::@16 - to:main::@6 -main::@16: scope:[main] from main::@4 [35] phi() to:main::@6 -main::@3: scope:[main] from main::@13 - [36] main::$18 = main::rnd#0 & $40 - [37] if(0!=main::$18) goto main::@5 - to:main::@9 -main::@9: scope:[main] from main::@3 - [38] main::x#2 = -- main::x#11 - [39] if(main::x#2!=$ff) goto main::@15 +main::@6: scope:[main] from main::@14 main::@15 main::@16 main::@17 main::@4 main::@5 main::@6 main::@8 main::@9 + [36] main::x#10 = phi( main::@14/main::x#11, main::@8/main::x#11, main::@15/main::x#2, main::@9/0, main::@16/main::x#11, main::@4/main::x#11, main::@17/main::x#1, main::@5/$27, main::@6/main::x#10 ) + [36] main::y#10 = phi( main::@14/main::y#2, main::@8/0, main::@15/main::y#11, main::@9/main::y#11, main::@16/main::y#1, main::@4/$18, main::@17/main::y#11, main::@5/main::y#11, main::@6/main::y#10 ) + [37] if(*((char *)TED+OFFSET_STRUCT_MOS7360_TED_RASTER_LO)!=$ff) goto main::@6 + to:main::@1 +main::@4: scope:[main] from main::@7 + [38] main::y#1 = ++ main::y#11 + [39] if(main::y#1!=$19) goto main::@16 to:main::@6 -main::@15: scope:[main] from main::@9 +main::@16: scope:[main] from main::@4 [40] phi() to:main::@6 +main::@3: scope:[main] from main::@13 + [41] main::$18 = main::rnd#0 & $40 + [42] if(0!=main::$18) goto main::@5 + to:main::@9 +main::@9: scope:[main] from main::@3 + [43] main::x#2 = -- main::x#11 + [44] if(main::x#2!=$ff) goto main::@15 + to:main::@6 +main::@15: scope:[main] from main::@9 + [45] phi() + to:main::@6 main::@5: scope:[main] from main::@3 - [41] main::x#1 = ++ main::x#11 - [42] if(main::x#1!=$28) goto main::@17 + [46] main::x#1 = ++ main::x#11 + [47] if(main::x#1!=$28) goto main::@17 to:main::@6 main::@17: scope:[main] from main::@5 - [43] phi() + [48] phi() to:main::@6 void * memset(void *str , char c , unsigned int num) memset: scope:[memset] from main main::@10 main::@11 - [44] memset::c#5 = phi( main/$a0, main::@10/0, main::@11/0 ) - [44] memset::str#4 = phi( main/(void *)DEFAULT_SCREEN, main::@10/(void *)DEFAULT_COLORRAM, main::@11/(void *)VISITS ) + [49] memset::c#5 = phi( main/$a0, main::@10/0, main::@11/0 ) + [49] memset::str#4 = phi( main/(void *)DEFAULT_SCREEN, main::@10/(void *)DEFAULT_COLORRAM, main::@11/(void *)VISITS ) to:memset::@1 memset::@1: scope:[memset] from memset - [45] memset::end#0 = (char *)memset::str#4 + $3e8 - [46] memset::dst#4 = (char *)memset::str#4 + [50] memset::end#0 = (char *)memset::str#4 + $3e8 + [51] memset::dst#4 = (char *)memset::str#4 to:memset::@2 memset::@2: scope:[memset] from memset::@1 memset::@3 - [47] memset::dst#2 = phi( memset::@1/memset::dst#4, memset::@3/memset::dst#1 ) - [48] if(memset::dst#2!=memset::end#0) goto memset::@3 + [52] memset::dst#2 = phi( memset::@1/memset::dst#4, memset::@3/memset::dst#1 ) + [53] if(memset::dst#2!=memset::end#0) goto memset::@3 to:memset::@return memset::@return: scope:[memset] from memset::@2 - [49] return + [54] return to:@return memset::@3: scope:[memset] from memset::@2 - [50] *memset::dst#2 = memset::c#5 - [51] memset::dst#1 = ++ memset::dst#2 + [55] *memset::dst#2 = memset::c#5 + [56] memset::dst#1 = ++ memset::dst#2 to:memset::@2 unsigned int rand() rand: scope:[rand] from main::@2 - [52] rand::$0 = rand_state#12 << 7 - [53] rand_state#0 = rand_state#12 ^ rand::$0 - [54] rand::$1 = rand_state#0 >> 9 - [55] rand_state#1 = rand_state#0 ^ rand::$1 - [56] rand::$2 = rand_state#1 << 8 - [57] rand_state#10 = rand_state#1 ^ rand::$2 - [58] rand::return#0 = rand_state#10 + [57] rand::$0 = rand_state << 7 + [58] rand_state = rand_state ^ rand::$0 + [59] rand::$1 = rand_state >> 9 + [60] rand_state = rand_state ^ rand::$1 + [61] rand::$2 = rand_state << 8 + [62] rand_state = rand_state ^ rand::$2 + [63] rand::return#0 = rand_state to:rand::@return rand::@return: scope:[rand] from rand - [59] return + [64] return to:@return VARIABLE REGISTER WEIGHTS +void __start() void main() -unsigned int main::$10 // 22.0 -char main::$12 // 22.0 -char main::$13 // 22.0 -char main::$18 // 22.0 -unsigned int main::$24 // 16.5 -unsigned int main::$29 // 22.0 -unsigned int main::$3 // 22.0 -unsigned int main::$30 // 22.0 -char *main::$6 // 22.0 -char *main::$8 // 11.0 -char main::$9 // 22.0 +unsigned int main::$10 // 202.0 +char main::$12 // 202.0 +char main::$13 // 202.0 +char main::$18 // 202.0 +unsigned int main::$24 // 151.5 +unsigned int main::$29 // 202.0 +unsigned int main::$3 // 202.0 +unsigned int main::$30 // 202.0 +char *main::$6 // 202.0 +char *main::$8 // 101.0 +char main::$9 // 202.0 char main::cnt -char main::cnt#0 // 11.0 +char main::cnt#0 // 101.0 unsigned int main::offset -unsigned int main::offset#0 // 8.25 +unsigned int main::offset#0 // 75.75 char main::rnd -char main::rnd#0 // 14.666666666666666 +char main::rnd#0 // 134.66666666666666 char main::x -char main::x#1 // 11.0 -char main::x#10 // 184.5 -char main::x#11 // 6.357142857142859 -char main::x#2 // 11.0 +char main::x#1 // 101.0 +char main::x#10 // 1804.5 +char main::x#11 // 60.99999999999998 +char main::x#2 // 101.0 char main::y -char main::y#1 // 11.0 -char main::y#10 // 184.5 -char main::y#11 // 5.964285714285716 -char main::y#2 // 11.0 +char main::y#1 // 101.0 +char main::y#10 // 1804.5 +char main::y#11 // 57.392857142857125 +char main::y#2 // 101.0 void * memset(void *str , char c , unsigned int num) char memset::c -char memset::c#5 // 14.428571428571429 +char memset::c#5 // 143.0 char *memset::dst -char *memset::dst#1 // 202.0 -char *memset::dst#2 // 138.33333333333331 -char *memset::dst#4 // 22.0 +char *memset::dst#1 // 2002.0 +char *memset::dst#2 // 1368.3333333333335 +char *memset::dst#4 // 202.0 char *memset::end -char *memset::end#0 // 18.666666666666664 +char *memset::end#0 // 183.66666666666669 unsigned int memset::num void *memset::return void *memset::str void *memset::str#4 unsigned int rand() -unsigned int rand::$0 // 202.0 -unsigned int rand::$1 // 202.0 -unsigned int rand::$2 // 202.0 +unsigned int rand::$0 // 2002.0 +unsigned int rand::$1 // 2002.0 +unsigned int rand::$2 // 2002.0 unsigned int rand::return -unsigned int rand::return#0 // 37.33333333333333 -unsigned int rand::return#2 // 22.0 -unsigned int rand_state -unsigned int rand_state#0 // 151.5 -unsigned int rand_state#1 // 151.5 -unsigned int rand_state#10 // 11.222222222222223 -unsigned int rand_state#12 // 23.307692307692307 +unsigned int rand::return#0 // 367.33333333333337 +unsigned int rand::return#2 // 202.0 +__loadstore volatile unsigned int rand_state // 185.40740740740742 Initial phi equivalence classes [ main::y#11 main::y#10 main::y#2 main::y#1 ] [ main::x#11 main::x#10 main::x#2 main::x#1 ] -[ rand_state#12 rand_state#10 ] [ memset::str#4 ] [ memset::c#5 ] [ memset::dst#2 memset::dst#4 memset::dst#1 ] +Added variable rand_state to live range equivalence class [ rand_state ] Added variable main::$24 to live range equivalence class [ main::$24 ] Added variable main::$29 to live range equivalence class [ main::$29 ] Added variable main::$30 to live range equivalence class [ main::$30 ] @@ -937,18 +871,16 @@ Added variable main::$13 to live range equivalence class [ main::$13 ] Added variable main::$18 to live range equivalence class [ main::$18 ] Added variable memset::end#0 to live range equivalence class [ memset::end#0 ] Added variable rand::$0 to live range equivalence class [ rand::$0 ] -Added variable rand_state#0 to live range equivalence class [ rand_state#0 ] Added variable rand::$1 to live range equivalence class [ rand::$1 ] -Added variable rand_state#1 to live range equivalence class [ rand_state#1 ] Added variable rand::$2 to live range equivalence class [ rand::$2 ] Added variable rand::return#0 to live range equivalence class [ rand::return#0 ] Complete equivalence classes [ main::y#11 main::y#10 main::y#2 main::y#1 ] [ main::x#11 main::x#10 main::x#2 main::x#1 ] -[ rand_state#12 rand_state#10 ] [ memset::str#4 ] [ memset::c#5 ] [ memset::dst#2 memset::dst#4 memset::dst#1 ] +[ rand_state ] [ main::$24 ] [ main::$29 ] [ main::$30 ] @@ -966,9 +898,7 @@ Complete equivalence classes [ main::$18 ] [ memset::end#0 ] [ rand::$0 ] -[ rand_state#0 ] [ rand::$1 ] -[ rand_state#1 ] [ rand::$2 ] [ rand::return#0 ] Allocated zp[2]:2 [ memset::dst#2 memset::dst#4 memset::dst#1 ] @@ -977,170 +907,168 @@ Allocated zp[1]:5 [ main::y#11 main::y#10 main::y#2 main::y#1 ] Allocated zp[2]:6 [ rand::$0 ] Allocated zp[2]:8 [ rand::$1 ] Allocated zp[2]:10 [ rand::$2 ] -Allocated zp[2]:12 [ rand_state#0 ] -Allocated zp[2]:14 [ rand_state#1 ] -Allocated zp[2]:16 [ rand::return#0 ] -Allocated zp[2]:18 [ rand_state#12 rand_state#10 ] -Allocated zp[2]:20 [ main::$29 ] -Allocated zp[2]:22 [ main::$30 ] -Allocated zp[2]:24 [ main::$3 ] -Allocated zp[2]:26 [ main::$6 ] -Allocated zp[1]:28 [ main::$9 ] -Allocated zp[2]:29 [ rand::return#2 ] -Allocated zp[2]:31 [ main::$10 ] -Allocated zp[1]:33 [ main::$12 ] -Allocated zp[1]:34 [ main::$13 ] -Allocated zp[1]:35 [ main::$18 ] -Allocated zp[2]:36 [ memset::end#0 ] -Allocated zp[2]:38 [ main::$24 ] -Allocated zp[1]:40 [ main::rnd#0 ] -Allocated zp[1]:41 [ memset::c#5 ] -Allocated zp[1]:42 [ main::cnt#0 ] -Allocated zp[2]:43 [ main::$8 ] -Allocated zp[2]:45 [ main::offset#0 ] -Allocated zp[2]:47 [ memset::str#4 ] +Allocated zp[2]:12 [ rand::return#0 ] +Allocated zp[2]:14 [ main::$29 ] +Allocated zp[2]:16 [ main::$30 ] +Allocated zp[2]:18 [ main::$3 ] +Allocated zp[2]:20 [ main::$6 ] +Allocated zp[1]:22 [ main::$9 ] +Allocated zp[2]:23 [ rand::return#2 ] +Allocated zp[2]:25 [ main::$10 ] +Allocated zp[1]:27 [ main::$12 ] +Allocated zp[1]:28 [ main::$13 ] +Allocated zp[1]:29 [ main::$18 ] +Allocated zp[2]:30 [ rand_state ] +Allocated zp[2]:32 [ memset::end#0 ] +Allocated zp[2]:34 [ main::$24 ] +Allocated zp[1]:36 [ memset::c#5 ] +Allocated zp[1]:37 [ main::rnd#0 ] +Allocated zp[1]:38 [ main::cnt#0 ] +Allocated zp[2]:39 [ main::$8 ] +Allocated zp[2]:41 [ main::offset#0 ] +Allocated zp[2]:43 [ memset::str#4 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [6] *((char *)TED+OFFSET_STRUCT_MOS7360_TED_BG_COLOR) = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [7] *((char *)TED+OFFSET_STRUCT_MOS7360_TED_BORDER_COLOR) = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [9] main::$24 = (unsigned int)main::y#11 [ main::y#11 main::x#11 rand_state#12 main::$24 ] ( [ main::y#11 main::x#11 rand_state#12 main::$24 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [1] rand_state = 1 [ rand_state ] ( [ rand_state ] { } ) always clobbers reg byte a +Statement [11] *((char *)TED+OFFSET_STRUCT_MOS7360_TED_BG_COLOR) = 0 [ rand_state ] ( main:3 [ rand_state ] { } ) always clobbers reg byte a +Statement [12] *((char *)TED+OFFSET_STRUCT_MOS7360_TED_BORDER_COLOR) = 0 [ rand_state ] ( main:3 [ rand_state ] { } ) always clobbers reg byte a +Statement [14] main::$24 = (unsigned int)main::y#11 [ rand_state main::y#11 main::x#11 main::$24 ] ( main:3 [ rand_state main::y#11 main::x#11 main::$24 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:5 [ main::y#11 main::y#10 main::y#2 main::y#1 ] Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::x#11 main::x#10 main::x#2 main::x#1 ] -Statement [10] main::$29 = main::$24 << 2 [ main::y#11 main::x#11 rand_state#12 main::$24 main::$29 ] ( [ main::y#11 main::x#11 rand_state#12 main::$24 main::$29 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [11] main::$30 = main::$29 + main::$24 [ main::y#11 main::x#11 rand_state#12 main::$30 ] ( [ main::y#11 main::x#11 rand_state#12 main::$30 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [12] main::$3 = main::$30 << 3 [ main::y#11 main::x#11 rand_state#12 main::$3 ] ( [ main::y#11 main::x#11 rand_state#12 main::$3 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [13] main::offset#0 = main::$3 + main::x#11 [ main::y#11 main::x#11 rand_state#12 main::offset#0 ] ( [ main::y#11 main::x#11 rand_state#12 main::offset#0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [14] main::$6 = VISITS + main::offset#0 [ main::y#11 main::x#11 rand_state#12 main::offset#0 main::$6 ] ( [ main::y#11 main::x#11 rand_state#12 main::offset#0 main::$6 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [15] *main::$6 = ++ *main::$6 [ main::y#11 main::x#11 rand_state#12 main::offset#0 main::$6 ] ( [ main::y#11 main::x#11 rand_state#12 main::offset#0 main::$6 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a reg byte y +Statement [15] main::$29 = main::$24 << 2 [ rand_state main::y#11 main::x#11 main::$24 main::$29 ] ( main:3 [ rand_state main::y#11 main::x#11 main::$24 main::$29 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [16] main::$30 = main::$29 + main::$24 [ rand_state main::y#11 main::x#11 main::$30 ] ( main:3 [ rand_state main::y#11 main::x#11 main::$30 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [17] main::$3 = main::$30 << 3 [ rand_state main::y#11 main::x#11 main::$3 ] ( main:3 [ rand_state main::y#11 main::x#11 main::$3 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [18] main::offset#0 = main::$3 + main::x#11 [ rand_state main::y#11 main::x#11 main::offset#0 ] ( main:3 [ rand_state main::y#11 main::x#11 main::offset#0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [19] main::$6 = VISITS + main::offset#0 [ rand_state main::y#11 main::x#11 main::offset#0 main::$6 ] ( main:3 [ rand_state main::y#11 main::x#11 main::offset#0 main::$6 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [20] *main::$6 = ++ *main::$6 [ rand_state main::y#11 main::x#11 main::offset#0 main::$6 ] ( main:3 [ rand_state main::y#11 main::x#11 main::offset#0 main::$6 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:5 [ main::y#11 main::y#10 main::y#2 main::y#1 ] Removing always clobbered register reg byte y as potential for zp[1]:4 [ main::x#11 main::x#10 main::x#2 main::x#1 ] -Statement [16] main::cnt#0 = *main::$6 [ main::y#11 main::x#11 rand_state#12 main::offset#0 main::cnt#0 ] ( [ main::y#11 main::x#11 rand_state#12 main::offset#0 main::cnt#0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a reg byte y -Statement [17] main::$8 = DEFAULT_COLORRAM + main::offset#0 [ main::y#11 main::x#11 rand_state#12 main::cnt#0 main::$8 ] ( [ main::y#11 main::x#11 rand_state#12 main::cnt#0 main::$8 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:42 [ main::cnt#0 ] -Statement [18] main::$9 = main::cnt#0 & $f [ main::y#11 main::x#11 rand_state#12 main::$8 main::$9 ] ( [ main::y#11 main::x#11 rand_state#12 main::$8 main::$9 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [19] *main::$8 = FADE[main::$9] [ main::y#11 main::x#11 rand_state#12 ] ( [ main::y#11 main::x#11 rand_state#12 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a reg byte y -Statement [21] rand::return#2 = rand::return#0 [ main::y#11 main::x#11 rand_state#10 rand::return#2 ] ( [ main::y#11 main::x#11 rand_state#10 rand::return#2 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [22] main::$10 = rand::return#2 [ main::y#11 main::x#11 rand_state#10 main::$10 ] ( [ main::y#11 main::x#11 rand_state#10 main::$10 ] { } ) always clobbers reg byte a -Statement [32] if(*((char *)TED+OFFSET_STRUCT_MOS7360_TED_RASTER_LO)!=$ff) goto main::@6 [ main::y#10 main::x#10 rand_state#10 ] ( [ main::y#10 main::x#10 rand_state#10 ] { } ) always clobbers reg byte a -Statement [45] memset::end#0 = (char *)memset::str#4 + $3e8 [ memset::str#4 memset::c#5 memset::end#0 ] ( memset:1 [ memset::str#4 memset::c#5 memset::end#0 ] { } memset:3 [ memset::str#4 memset::c#5 memset::end#0 ] { } memset:5 [ memset::str#4 memset::c#5 memset::end#0 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:41 [ memset::c#5 ] -Statement [46] memset::dst#4 = (char *)memset::str#4 [ memset::c#5 memset::end#0 memset::dst#4 ] ( memset:1 [ memset::c#5 memset::end#0 memset::dst#4 ] { } memset:3 [ memset::c#5 memset::end#0 memset::dst#4 ] { } memset:5 [ memset::c#5 memset::end#0 memset::dst#4 ] { } ) always clobbers reg byte a -Statement [48] if(memset::dst#2!=memset::end#0) goto memset::@3 [ memset::c#5 memset::end#0 memset::dst#2 ] ( memset:1 [ memset::c#5 memset::end#0 memset::dst#2 ] { } memset:3 [ memset::c#5 memset::end#0 memset::dst#2 ] { } memset:5 [ memset::c#5 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a -Statement [50] *memset::dst#2 = memset::c#5 [ memset::c#5 memset::end#0 memset::dst#2 ] ( memset:1 [ memset::c#5 memset::end#0 memset::dst#2 ] { } memset:3 [ memset::c#5 memset::end#0 memset::dst#2 ] { } memset:5 [ memset::c#5 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:41 [ memset::c#5 ] -Statement [52] rand::$0 = rand_state#12 << 7 [ rand_state#12 rand::$0 ] ( rand:20 [ main::y#11 main::x#11 rand_state#12 rand::$0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [53] rand_state#0 = rand_state#12 ^ rand::$0 [ rand_state#0 ] ( rand:20 [ main::y#11 main::x#11 rand_state#0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [54] rand::$1 = rand_state#0 >> 9 [ rand_state#0 rand::$1 ] ( rand:20 [ main::y#11 main::x#11 rand_state#0 rand::$1 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [55] rand_state#1 = rand_state#0 ^ rand::$1 [ rand_state#1 ] ( rand:20 [ main::y#11 main::x#11 rand_state#1 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [56] rand::$2 = rand_state#1 << 8 [ rand_state#1 rand::$2 ] ( rand:20 [ main::y#11 main::x#11 rand_state#1 rand::$2 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [57] rand_state#10 = rand_state#1 ^ rand::$2 [ rand_state#10 ] ( rand:20 [ main::y#11 main::x#11 rand_state#10 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [58] rand::return#0 = rand_state#10 [ rand_state#10 rand::return#0 ] ( rand:20 [ main::y#11 main::x#11 rand_state#10 rand::return#0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [6] *((char *)TED+OFFSET_STRUCT_MOS7360_TED_BG_COLOR) = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [7] *((char *)TED+OFFSET_STRUCT_MOS7360_TED_BORDER_COLOR) = 0 [ ] ( [ ] { } ) always clobbers reg byte a -Statement [9] main::$24 = (unsigned int)main::y#11 [ main::y#11 main::x#11 rand_state#12 main::$24 ] ( [ main::y#11 main::x#11 rand_state#12 main::$24 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [10] main::$29 = main::$24 << 2 [ main::y#11 main::x#11 rand_state#12 main::$24 main::$29 ] ( [ main::y#11 main::x#11 rand_state#12 main::$24 main::$29 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [11] main::$30 = main::$29 + main::$24 [ main::y#11 main::x#11 rand_state#12 main::$30 ] ( [ main::y#11 main::x#11 rand_state#12 main::$30 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [12] main::$3 = main::$30 << 3 [ main::y#11 main::x#11 rand_state#12 main::$3 ] ( [ main::y#11 main::x#11 rand_state#12 main::$3 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [13] main::offset#0 = main::$3 + main::x#11 [ main::y#11 main::x#11 rand_state#12 main::offset#0 ] ( [ main::y#11 main::x#11 rand_state#12 main::offset#0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [14] main::$6 = VISITS + main::offset#0 [ main::y#11 main::x#11 rand_state#12 main::offset#0 main::$6 ] ( [ main::y#11 main::x#11 rand_state#12 main::offset#0 main::$6 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [15] *main::$6 = ++ *main::$6 [ main::y#11 main::x#11 rand_state#12 main::offset#0 main::$6 ] ( [ main::y#11 main::x#11 rand_state#12 main::offset#0 main::$6 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a reg byte y -Statement [16] main::cnt#0 = *main::$6 [ main::y#11 main::x#11 rand_state#12 main::offset#0 main::cnt#0 ] ( [ main::y#11 main::x#11 rand_state#12 main::offset#0 main::cnt#0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a reg byte y -Statement [17] main::$8 = DEFAULT_COLORRAM + main::offset#0 [ main::y#11 main::x#11 rand_state#12 main::cnt#0 main::$8 ] ( [ main::y#11 main::x#11 rand_state#12 main::cnt#0 main::$8 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [18] main::$9 = main::cnt#0 & $f [ main::y#11 main::x#11 rand_state#12 main::$8 main::$9 ] ( [ main::y#11 main::x#11 rand_state#12 main::$8 main::$9 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [19] *main::$8 = FADE[main::$9] [ main::y#11 main::x#11 rand_state#12 ] ( [ main::y#11 main::x#11 rand_state#12 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a reg byte y -Statement [21] rand::return#2 = rand::return#0 [ main::y#11 main::x#11 rand_state#10 rand::return#2 ] ( [ main::y#11 main::x#11 rand_state#10 rand::return#2 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [22] main::$10 = rand::return#2 [ main::y#11 main::x#11 rand_state#10 main::$10 ] ( [ main::y#11 main::x#11 rand_state#10 main::$10 ] { } ) always clobbers reg byte a -Statement [32] if(*((char *)TED+OFFSET_STRUCT_MOS7360_TED_RASTER_LO)!=$ff) goto main::@6 [ main::y#10 main::x#10 rand_state#10 ] ( [ main::y#10 main::x#10 rand_state#10 ] { } ) always clobbers reg byte a -Statement [45] memset::end#0 = (char *)memset::str#4 + $3e8 [ memset::str#4 memset::c#5 memset::end#0 ] ( memset:1 [ memset::str#4 memset::c#5 memset::end#0 ] { } memset:3 [ memset::str#4 memset::c#5 memset::end#0 ] { } memset:5 [ memset::str#4 memset::c#5 memset::end#0 ] { } ) always clobbers reg byte a -Statement [46] memset::dst#4 = (char *)memset::str#4 [ memset::c#5 memset::end#0 memset::dst#4 ] ( memset:1 [ memset::c#5 memset::end#0 memset::dst#4 ] { } memset:3 [ memset::c#5 memset::end#0 memset::dst#4 ] { } memset:5 [ memset::c#5 memset::end#0 memset::dst#4 ] { } ) always clobbers reg byte a -Statement [48] if(memset::dst#2!=memset::end#0) goto memset::@3 [ memset::c#5 memset::end#0 memset::dst#2 ] ( memset:1 [ memset::c#5 memset::end#0 memset::dst#2 ] { } memset:3 [ memset::c#5 memset::end#0 memset::dst#2 ] { } memset:5 [ memset::c#5 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a -Statement [50] *memset::dst#2 = memset::c#5 [ memset::c#5 memset::end#0 memset::dst#2 ] ( memset:1 [ memset::c#5 memset::end#0 memset::dst#2 ] { } memset:3 [ memset::c#5 memset::end#0 memset::dst#2 ] { } memset:5 [ memset::c#5 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a reg byte y -Statement [52] rand::$0 = rand_state#12 << 7 [ rand_state#12 rand::$0 ] ( rand:20 [ main::y#11 main::x#11 rand_state#12 rand::$0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [53] rand_state#0 = rand_state#12 ^ rand::$0 [ rand_state#0 ] ( rand:20 [ main::y#11 main::x#11 rand_state#0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [54] rand::$1 = rand_state#0 >> 9 [ rand_state#0 rand::$1 ] ( rand:20 [ main::y#11 main::x#11 rand_state#0 rand::$1 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [55] rand_state#1 = rand_state#0 ^ rand::$1 [ rand_state#1 ] ( rand:20 [ main::y#11 main::x#11 rand_state#1 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [56] rand::$2 = rand_state#1 << 8 [ rand_state#1 rand::$2 ] ( rand:20 [ main::y#11 main::x#11 rand_state#1 rand::$2 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [57] rand_state#10 = rand_state#1 ^ rand::$2 [ rand_state#10 ] ( rand:20 [ main::y#11 main::x#11 rand_state#10 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [58] rand::return#0 = rand_state#10 [ rand_state#10 rand::return#0 ] ( rand:20 [ main::y#11 main::x#11 rand_state#10 rand::return#0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [21] main::cnt#0 = *main::$6 [ rand_state main::y#11 main::x#11 main::offset#0 main::cnt#0 ] ( main:3 [ rand_state main::y#11 main::x#11 main::offset#0 main::cnt#0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a reg byte y +Statement [22] main::$8 = DEFAULT_COLORRAM + main::offset#0 [ rand_state main::y#11 main::x#11 main::cnt#0 main::$8 ] ( main:3 [ rand_state main::y#11 main::x#11 main::cnt#0 main::$8 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:38 [ main::cnt#0 ] +Statement [23] main::$9 = main::cnt#0 & $f [ rand_state main::y#11 main::x#11 main::$8 main::$9 ] ( main:3 [ rand_state main::y#11 main::x#11 main::$8 main::$9 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [24] *main::$8 = FADE[main::$9] [ rand_state main::y#11 main::x#11 ] ( main:3 [ rand_state main::y#11 main::x#11 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a reg byte y +Statement [26] rand::return#2 = rand::return#0 [ rand_state main::y#11 main::x#11 rand::return#2 ] ( main:3 [ rand_state main::y#11 main::x#11 rand::return#2 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [27] main::$10 = rand::return#2 [ rand_state main::y#11 main::x#11 main::$10 ] ( main:3 [ rand_state main::y#11 main::x#11 main::$10 ] { } ) always clobbers reg byte a +Statement [37] if(*((char *)TED+OFFSET_STRUCT_MOS7360_TED_RASTER_LO)!=$ff) goto main::@6 [ rand_state main::y#10 main::x#10 ] ( main:3 [ rand_state main::y#10 main::x#10 ] { } ) always clobbers reg byte a +Statement [50] memset::end#0 = (char *)memset::str#4 + $3e8 [ memset::str#4 memset::c#5 memset::end#0 ] ( main:3::memset:6 [ rand_state memset::str#4 memset::c#5 memset::end#0 ] { } main:3::memset:8 [ rand_state memset::str#4 memset::c#5 memset::end#0 ] { } main:3::memset:10 [ rand_state memset::str#4 memset::c#5 memset::end#0 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:36 [ memset::c#5 ] +Statement [51] memset::dst#4 = (char *)memset::str#4 [ memset::c#5 memset::end#0 memset::dst#4 ] ( main:3::memset:6 [ rand_state memset::c#5 memset::end#0 memset::dst#4 ] { } main:3::memset:8 [ rand_state memset::c#5 memset::end#0 memset::dst#4 ] { } main:3::memset:10 [ rand_state memset::c#5 memset::end#0 memset::dst#4 ] { } ) always clobbers reg byte a +Statement [53] if(memset::dst#2!=memset::end#0) goto memset::@3 [ memset::c#5 memset::end#0 memset::dst#2 ] ( main:3::memset:6 [ rand_state memset::c#5 memset::end#0 memset::dst#2 ] { } main:3::memset:8 [ rand_state memset::c#5 memset::end#0 memset::dst#2 ] { } main:3::memset:10 [ rand_state memset::c#5 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a +Statement [55] *memset::dst#2 = memset::c#5 [ memset::c#5 memset::end#0 memset::dst#2 ] ( main:3::memset:6 [ rand_state memset::c#5 memset::end#0 memset::dst#2 ] { } main:3::memset:8 [ rand_state memset::c#5 memset::end#0 memset::dst#2 ] { } main:3::memset:10 [ rand_state memset::c#5 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:36 [ memset::c#5 ] +Statement [57] rand::$0 = rand_state << 7 [ rand_state rand::$0 ] ( main:3::rand:25 [ main::y#11 main::x#11 rand_state rand::$0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [58] rand_state = rand_state ^ rand::$0 [ rand_state ] ( main:3::rand:25 [ main::y#11 main::x#11 rand_state ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [59] rand::$1 = rand_state >> 9 [ rand_state rand::$1 ] ( main:3::rand:25 [ main::y#11 main::x#11 rand_state rand::$1 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [60] rand_state = rand_state ^ rand::$1 [ rand_state ] ( main:3::rand:25 [ main::y#11 main::x#11 rand_state ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [61] rand::$2 = rand_state << 8 [ rand_state rand::$2 ] ( main:3::rand:25 [ main::y#11 main::x#11 rand_state rand::$2 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [62] rand_state = rand_state ^ rand::$2 [ rand_state ] ( main:3::rand:25 [ main::y#11 main::x#11 rand_state ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [63] rand::return#0 = rand_state [ rand_state rand::return#0 ] ( main:3::rand:25 [ main::y#11 main::x#11 rand_state rand::return#0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [1] rand_state = 1 [ rand_state ] ( [ rand_state ] { } ) always clobbers reg byte a +Statement [11] *((char *)TED+OFFSET_STRUCT_MOS7360_TED_BG_COLOR) = 0 [ rand_state ] ( main:3 [ rand_state ] { } ) always clobbers reg byte a +Statement [12] *((char *)TED+OFFSET_STRUCT_MOS7360_TED_BORDER_COLOR) = 0 [ rand_state ] ( main:3 [ rand_state ] { } ) always clobbers reg byte a +Statement [14] main::$24 = (unsigned int)main::y#11 [ rand_state main::y#11 main::x#11 main::$24 ] ( main:3 [ rand_state main::y#11 main::x#11 main::$24 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [15] main::$29 = main::$24 << 2 [ rand_state main::y#11 main::x#11 main::$24 main::$29 ] ( main:3 [ rand_state main::y#11 main::x#11 main::$24 main::$29 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [16] main::$30 = main::$29 + main::$24 [ rand_state main::y#11 main::x#11 main::$30 ] ( main:3 [ rand_state main::y#11 main::x#11 main::$30 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [17] main::$3 = main::$30 << 3 [ rand_state main::y#11 main::x#11 main::$3 ] ( main:3 [ rand_state main::y#11 main::x#11 main::$3 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [18] main::offset#0 = main::$3 + main::x#11 [ rand_state main::y#11 main::x#11 main::offset#0 ] ( main:3 [ rand_state main::y#11 main::x#11 main::offset#0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [19] main::$6 = VISITS + main::offset#0 [ rand_state main::y#11 main::x#11 main::offset#0 main::$6 ] ( main:3 [ rand_state main::y#11 main::x#11 main::offset#0 main::$6 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [20] *main::$6 = ++ *main::$6 [ rand_state main::y#11 main::x#11 main::offset#0 main::$6 ] ( main:3 [ rand_state main::y#11 main::x#11 main::offset#0 main::$6 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a reg byte y +Statement [21] main::cnt#0 = *main::$6 [ rand_state main::y#11 main::x#11 main::offset#0 main::cnt#0 ] ( main:3 [ rand_state main::y#11 main::x#11 main::offset#0 main::cnt#0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a reg byte y +Statement [22] main::$8 = DEFAULT_COLORRAM + main::offset#0 [ rand_state main::y#11 main::x#11 main::cnt#0 main::$8 ] ( main:3 [ rand_state main::y#11 main::x#11 main::cnt#0 main::$8 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [23] main::$9 = main::cnt#0 & $f [ rand_state main::y#11 main::x#11 main::$8 main::$9 ] ( main:3 [ rand_state main::y#11 main::x#11 main::$8 main::$9 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [24] *main::$8 = FADE[main::$9] [ rand_state main::y#11 main::x#11 ] ( main:3 [ rand_state main::y#11 main::x#11 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a reg byte y +Statement [26] rand::return#2 = rand::return#0 [ rand_state main::y#11 main::x#11 rand::return#2 ] ( main:3 [ rand_state main::y#11 main::x#11 rand::return#2 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [27] main::$10 = rand::return#2 [ rand_state main::y#11 main::x#11 main::$10 ] ( main:3 [ rand_state main::y#11 main::x#11 main::$10 ] { } ) always clobbers reg byte a +Statement [37] if(*((char *)TED+OFFSET_STRUCT_MOS7360_TED_RASTER_LO)!=$ff) goto main::@6 [ rand_state main::y#10 main::x#10 ] ( main:3 [ rand_state main::y#10 main::x#10 ] { } ) always clobbers reg byte a +Statement [50] memset::end#0 = (char *)memset::str#4 + $3e8 [ memset::str#4 memset::c#5 memset::end#0 ] ( main:3::memset:6 [ rand_state memset::str#4 memset::c#5 memset::end#0 ] { } main:3::memset:8 [ rand_state memset::str#4 memset::c#5 memset::end#0 ] { } main:3::memset:10 [ rand_state memset::str#4 memset::c#5 memset::end#0 ] { } ) always clobbers reg byte a +Statement [51] memset::dst#4 = (char *)memset::str#4 [ memset::c#5 memset::end#0 memset::dst#4 ] ( main:3::memset:6 [ rand_state memset::c#5 memset::end#0 memset::dst#4 ] { } main:3::memset:8 [ rand_state memset::c#5 memset::end#0 memset::dst#4 ] { } main:3::memset:10 [ rand_state memset::c#5 memset::end#0 memset::dst#4 ] { } ) always clobbers reg byte a +Statement [53] if(memset::dst#2!=memset::end#0) goto memset::@3 [ memset::c#5 memset::end#0 memset::dst#2 ] ( main:3::memset:6 [ rand_state memset::c#5 memset::end#0 memset::dst#2 ] { } main:3::memset:8 [ rand_state memset::c#5 memset::end#0 memset::dst#2 ] { } main:3::memset:10 [ rand_state memset::c#5 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a +Statement [55] *memset::dst#2 = memset::c#5 [ memset::c#5 memset::end#0 memset::dst#2 ] ( main:3::memset:6 [ rand_state memset::c#5 memset::end#0 memset::dst#2 ] { } main:3::memset:8 [ rand_state memset::c#5 memset::end#0 memset::dst#2 ] { } main:3::memset:10 [ rand_state memset::c#5 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a reg byte y +Statement [57] rand::$0 = rand_state << 7 [ rand_state rand::$0 ] ( main:3::rand:25 [ main::y#11 main::x#11 rand_state rand::$0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [58] rand_state = rand_state ^ rand::$0 [ rand_state ] ( main:3::rand:25 [ main::y#11 main::x#11 rand_state ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [59] rand::$1 = rand_state >> 9 [ rand_state rand::$1 ] ( main:3::rand:25 [ main::y#11 main::x#11 rand_state rand::$1 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [60] rand_state = rand_state ^ rand::$1 [ rand_state ] ( main:3::rand:25 [ main::y#11 main::x#11 rand_state ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [61] rand::$2 = rand_state << 8 [ rand_state rand::$2 ] ( main:3::rand:25 [ main::y#11 main::x#11 rand_state rand::$2 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [62] rand_state = rand_state ^ rand::$2 [ rand_state ] ( main:3::rand:25 [ main::y#11 main::x#11 rand_state ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [63] rand::return#0 = rand_state [ rand_state rand::return#0 ] ( main:3::rand:25 [ main::y#11 main::x#11 rand_state rand::return#0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a Potential registers zp[1]:5 [ main::y#11 main::y#10 main::y#2 main::y#1 ] : zp[1]:5 , reg byte x , Potential registers zp[1]:4 [ main::x#11 main::x#10 main::x#2 main::x#1 ] : zp[1]:4 , reg byte x , -Potential registers zp[2]:18 [ rand_state#12 rand_state#10 ] : zp[2]:18 , -Potential registers zp[2]:47 [ memset::str#4 ] : zp[2]:47 , -Potential registers zp[1]:41 [ memset::c#5 ] : zp[1]:41 , reg byte x , +Potential registers zp[2]:43 [ memset::str#4 ] : zp[2]:43 , +Potential registers zp[1]:36 [ memset::c#5 ] : zp[1]:36 , reg byte x , Potential registers zp[2]:2 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:2 , -Potential registers zp[2]:38 [ main::$24 ] : zp[2]:38 , -Potential registers zp[2]:20 [ main::$29 ] : zp[2]:20 , -Potential registers zp[2]:22 [ main::$30 ] : zp[2]:22 , -Potential registers zp[2]:24 [ main::$3 ] : zp[2]:24 , -Potential registers zp[2]:45 [ main::offset#0 ] : zp[2]:45 , -Potential registers zp[2]:26 [ main::$6 ] : zp[2]:26 , -Potential registers zp[1]:42 [ main::cnt#0 ] : zp[1]:42 , reg byte x , reg byte y , -Potential registers zp[2]:43 [ main::$8 ] : zp[2]:43 , -Potential registers zp[1]:28 [ main::$9 ] : zp[1]:28 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:29 [ rand::return#2 ] : zp[2]:29 , -Potential registers zp[2]:31 [ main::$10 ] : zp[2]:31 , -Potential registers zp[1]:40 [ main::rnd#0 ] : zp[1]:40 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:33 [ main::$12 ] : zp[1]:33 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:34 [ main::$13 ] : zp[1]:34 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:35 [ main::$18 ] : zp[1]:35 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:36 [ memset::end#0 ] : zp[2]:36 , +Potential registers zp[2]:30 [ rand_state ] : zp[2]:30 , +Potential registers zp[2]:34 [ main::$24 ] : zp[2]:34 , +Potential registers zp[2]:14 [ main::$29 ] : zp[2]:14 , +Potential registers zp[2]:16 [ main::$30 ] : zp[2]:16 , +Potential registers zp[2]:18 [ main::$3 ] : zp[2]:18 , +Potential registers zp[2]:41 [ main::offset#0 ] : zp[2]:41 , +Potential registers zp[2]:20 [ main::$6 ] : zp[2]:20 , +Potential registers zp[1]:38 [ main::cnt#0 ] : zp[1]:38 , reg byte x , reg byte y , +Potential registers zp[2]:39 [ main::$8 ] : zp[2]:39 , +Potential registers zp[1]:22 [ main::$9 ] : zp[1]:22 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:23 [ rand::return#2 ] : zp[2]:23 , +Potential registers zp[2]:25 [ main::$10 ] : zp[2]:25 , +Potential registers zp[1]:37 [ main::rnd#0 ] : zp[1]:37 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:27 [ main::$12 ] : zp[1]:27 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:28 [ main::$13 ] : zp[1]:28 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:29 [ main::$18 ] : zp[1]:29 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:32 [ memset::end#0 ] : zp[2]:32 , Potential registers zp[2]:6 [ rand::$0 ] : zp[2]:6 , -Potential registers zp[2]:12 [ rand_state#0 ] : zp[2]:12 , Potential registers zp[2]:8 [ rand::$1 ] : zp[2]:8 , -Potential registers zp[2]:14 [ rand_state#1 ] : zp[2]:14 , Potential registers zp[2]:10 [ rand::$2 ] : zp[2]:10 , -Potential registers zp[2]:16 [ rand::return#0 ] : zp[2]:16 , +Potential registers zp[2]:12 [ rand::return#0 ] : zp[2]:12 , REGISTER UPLIFT SCOPES -Uplift Scope [main] 212.86: zp[1]:4 [ main::x#11 main::x#10 main::x#2 main::x#1 ] 212.46: zp[1]:5 [ main::y#11 main::y#10 main::y#2 main::y#1 ] 22: zp[2]:20 [ main::$29 ] 22: zp[2]:22 [ main::$30 ] 22: zp[2]:24 [ main::$3 ] 22: zp[2]:26 [ main::$6 ] 22: zp[1]:28 [ main::$9 ] 22: zp[2]:31 [ main::$10 ] 22: zp[1]:33 [ main::$12 ] 22: zp[1]:34 [ main::$13 ] 22: zp[1]:35 [ main::$18 ] 16.5: zp[2]:38 [ main::$24 ] 14.67: zp[1]:40 [ main::rnd#0 ] 11: zp[1]:42 [ main::cnt#0 ] 11: zp[2]:43 [ main::$8 ] 8.25: zp[2]:45 [ main::offset#0 ] -Uplift Scope [rand] 202: zp[2]:6 [ rand::$0 ] 202: zp[2]:8 [ rand::$1 ] 202: zp[2]:10 [ rand::$2 ] 37.33: zp[2]:16 [ rand::return#0 ] 22: zp[2]:29 [ rand::return#2 ] -Uplift Scope [memset] 362.33: zp[2]:2 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 18.67: zp[2]:36 [ memset::end#0 ] 14.43: zp[1]:41 [ memset::c#5 ] 0: zp[2]:47 [ memset::str#4 ] -Uplift Scope [] 151.5: zp[2]:12 [ rand_state#0 ] 151.5: zp[2]:14 [ rand_state#1 ] 34.53: zp[2]:18 [ rand_state#12 rand_state#10 ] +Uplift Scope [rand] 2,002: zp[2]:6 [ rand::$0 ] 2,002: zp[2]:8 [ rand::$1 ] 2,002: zp[2]:10 [ rand::$2 ] 367.33: zp[2]:12 [ rand::return#0 ] 202: zp[2]:23 [ rand::return#2 ] +Uplift Scope [main] 2,067.5: zp[1]:4 [ main::x#11 main::x#10 main::x#2 main::x#1 ] 2,063.89: zp[1]:5 [ main::y#11 main::y#10 main::y#2 main::y#1 ] 202: zp[2]:14 [ main::$29 ] 202: zp[2]:16 [ main::$30 ] 202: zp[2]:18 [ main::$3 ] 202: zp[2]:20 [ main::$6 ] 202: zp[1]:22 [ main::$9 ] 202: zp[2]:25 [ main::$10 ] 202: zp[1]:27 [ main::$12 ] 202: zp[1]:28 [ main::$13 ] 202: zp[1]:29 [ main::$18 ] 151.5: zp[2]:34 [ main::$24 ] 134.67: zp[1]:37 [ main::rnd#0 ] 101: zp[1]:38 [ main::cnt#0 ] 101: zp[2]:39 [ main::$8 ] 75.75: zp[2]:41 [ main::offset#0 ] +Uplift Scope [memset] 3,572.33: zp[2]:2 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 183.67: zp[2]:32 [ memset::end#0 ] 143: zp[1]:36 [ memset::c#5 ] 0: zp[2]:43 [ memset::str#4 ] +Uplift Scope [] 185.41: zp[2]:30 [ rand_state ] Uplift Scope [MOS7360_TED] Uplift Scope [MOS6551_ACIA] Uplift Scope [MOS6529_PIO] Uplift Scope [MOS7501_PORT] Uplift Scope [PLUS4_ROM_BANKING] Uplift Scope [RADIX] +Uplift Scope [__start] -Uplifting [main] best 8134 combination reg byte x [ main::x#11 main::x#10 main::x#2 main::x#1 ] zp[1]:5 [ main::y#11 main::y#10 main::y#2 main::y#1 ] zp[2]:20 [ main::$29 ] zp[2]:22 [ main::$30 ] zp[2]:24 [ main::$3 ] zp[2]:26 [ main::$6 ] reg byte a [ main::$9 ] zp[2]:31 [ main::$10 ] reg byte a [ main::$12 ] reg byte a [ main::$13 ] zp[1]:35 [ main::$18 ] zp[2]:38 [ main::$24 ] zp[1]:40 [ main::rnd#0 ] zp[1]:42 [ main::cnt#0 ] zp[2]:43 [ main::$8 ] zp[2]:45 [ main::offset#0 ] +Uplifting [rand] best 8972 combination zp[2]:6 [ rand::$0 ] zp[2]:8 [ rand::$1 ] zp[2]:10 [ rand::$2 ] zp[2]:12 [ rand::return#0 ] zp[2]:23 [ rand::return#2 ] +Uplifting [main] best 8092 combination reg byte x [ main::x#11 main::x#10 main::x#2 main::x#1 ] zp[1]:5 [ main::y#11 main::y#10 main::y#2 main::y#1 ] zp[2]:14 [ main::$29 ] zp[2]:16 [ main::$30 ] zp[2]:18 [ main::$3 ] zp[2]:20 [ main::$6 ] reg byte a [ main::$9 ] zp[2]:25 [ main::$10 ] reg byte a [ main::$12 ] reg byte a [ main::$13 ] zp[1]:29 [ main::$18 ] zp[2]:34 [ main::$24 ] zp[1]:37 [ main::rnd#0 ] zp[1]:38 [ main::cnt#0 ] zp[2]:39 [ main::$8 ] zp[2]:41 [ main::offset#0 ] Limited combination testing to 100 combinations of 12288 possible. -Uplifting [rand] best 8134 combination zp[2]:6 [ rand::$0 ] zp[2]:8 [ rand::$1 ] zp[2]:10 [ rand::$2 ] zp[2]:16 [ rand::return#0 ] zp[2]:29 [ rand::return#2 ] -Uplifting [memset] best 8115 combination zp[2]:2 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:36 [ memset::end#0 ] reg byte x [ memset::c#5 ] zp[2]:47 [ memset::str#4 ] -Uplifting [] best 8115 combination zp[2]:12 [ rand_state#0 ] zp[2]:14 [ rand_state#1 ] zp[2]:18 [ rand_state#12 rand_state#10 ] -Uplifting [MOS7360_TED] best 8115 combination -Uplifting [MOS6551_ACIA] best 8115 combination -Uplifting [MOS6529_PIO] best 8115 combination -Uplifting [MOS7501_PORT] best 8115 combination -Uplifting [PLUS4_ROM_BANKING] best 8115 combination -Uplifting [RADIX] best 8115 combination +Uplifting [memset] best 8073 combination zp[2]:2 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:32 [ memset::end#0 ] reg byte x [ memset::c#5 ] zp[2]:43 [ memset::str#4 ] +Uplifting [] best 8073 combination zp[2]:30 [ rand_state ] +Uplifting [MOS7360_TED] best 8073 combination +Uplifting [MOS6551_ACIA] best 8073 combination +Uplifting [MOS6529_PIO] best 8073 combination +Uplifting [MOS7501_PORT] best 8073 combination +Uplifting [PLUS4_ROM_BANKING] best 8073 combination +Uplifting [RADIX] best 8073 combination +Uplifting [__start] best 8073 combination Attempting to uplift remaining variables inzp[1]:5 [ main::y#11 main::y#10 main::y#2 main::y#1 ] -Uplifting [main] best 8115 combination zp[1]:5 [ main::y#11 main::y#10 main::y#2 main::y#1 ] -Attempting to uplift remaining variables inzp[1]:35 [ main::$18 ] -Uplifting [main] best 8075 combination reg byte a [ main::$18 ] -Attempting to uplift remaining variables inzp[1]:40 [ main::rnd#0 ] -Uplifting [main] best 8015 combination reg byte y [ main::rnd#0 ] -Attempting to uplift remaining variables inzp[1]:42 [ main::cnt#0 ] -Uplifting [main] best 7995 combination reg byte y [ main::cnt#0 ] -Coalescing zero page register [ zp[2]:18 [ rand_state#12 rand_state#10 ] ] with [ zp[2]:12 [ rand_state#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:18 [ rand_state#12 rand_state#10 rand_state#0 ] ] with [ zp[2]:14 [ rand_state#1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:47 [ memset::str#4 ] ] with [ zp[2]:2 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:38 [ main::$24 ] ] with [ zp[2]:22 [ main::$30 ] ] - score: 1 -Coalescing zero page register [ zp[2]:24 [ main::$3 ] ] with [ zp[2]:45 [ main::offset#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:29 [ rand::return#2 ] ] with [ zp[2]:31 [ main::$10 ] ] - score: 1 -Coalescing zero page register [ zp[2]:29 [ rand::return#2 main::$10 ] ] with [ zp[2]:16 [ rand::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:38 [ main::$24 main::$30 ] ] with [ zp[2]:24 [ main::$3 main::offset#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:38 [ main::$24 main::$30 main::$3 main::offset#0 ] ] with [ zp[2]:43 [ main::$8 ] ] - score: 1 -Coalescing zero page register [ zp[2]:47 [ memset::str#4 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp[2]:18 [ rand_state#12 rand_state#10 rand_state#0 rand_state#1 ] ] -Coalescing zero page register [ zp[2]:6 [ rand::$0 ] ] with [ zp[2]:36 [ memset::end#0 ] ] -Allocated (was zp[2]:47) zp[2]:2 [ memset::str#4 memset::dst#2 memset::dst#4 memset::dst#1 rand_state#12 rand_state#10 rand_state#0 rand_state#1 ] +Uplifting [main] best 8073 combination zp[1]:5 [ main::y#11 main::y#10 main::y#2 main::y#1 ] +Attempting to uplift remaining variables inzp[1]:29 [ main::$18 ] +Uplifting [main] best 8033 combination reg byte a [ main::$18 ] +Attempting to uplift remaining variables inzp[1]:37 [ main::rnd#0 ] +Uplifting [main] best 7973 combination reg byte y [ main::rnd#0 ] +Attempting to uplift remaining variables inzp[1]:38 [ main::cnt#0 ] +Uplifting [main] best 7953 combination reg byte y [ main::cnt#0 ] +Coalescing zero page register [ zp[2]:43 [ memset::str#4 ] ] with [ zp[2]:2 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:34 [ main::$24 ] ] with [ zp[2]:16 [ main::$30 ] ] - score: 1 +Coalescing zero page register [ zp[2]:18 [ main::$3 ] ] with [ zp[2]:41 [ main::offset#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:23 [ rand::return#2 ] ] with [ zp[2]:25 [ main::$10 ] ] - score: 1 +Coalescing zero page register [ zp[2]:23 [ rand::return#2 main::$10 ] ] with [ zp[2]:12 [ rand::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:34 [ main::$24 main::$30 ] ] with [ zp[2]:18 [ main::$3 main::offset#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:34 [ main::$24 main::$30 main::$3 main::offset#0 ] ] with [ zp[2]:39 [ main::$8 ] ] - score: 1 +Coalescing zero page register [ zp[2]:34 [ main::$24 main::$30 main::$3 main::offset#0 main::$8 ] ] with [ zp[2]:43 [ memset::str#4 memset::dst#2 memset::dst#4 memset::dst#1 ] ] +Coalescing zero page register [ zp[2]:6 [ rand::$0 ] ] with [ zp[2]:32 [ memset::end#0 ] ] +Allocated (was zp[2]:34) zp[2]:2 [ main::$24 main::$30 main::$3 main::offset#0 main::$8 memset::str#4 memset::dst#2 memset::dst#4 memset::dst#1 ] Allocated (was zp[2]:6) zp[2]:4 [ rand::$0 memset::end#0 ] Allocated (was zp[1]:5) zp[1]:6 [ main::y#11 main::y#10 main::y#2 main::y#1 ] Allocated (was zp[2]:8) zp[2]:7 [ rand::$1 ] Allocated (was zp[2]:10) zp[2]:9 [ rand::$2 ] -Allocated (was zp[2]:29) zp[2]:11 [ rand::return#2 main::$10 rand::return#0 ] -Allocated (was zp[2]:38) zp[2]:13 [ main::$24 main::$30 main::$3 main::offset#0 main::$8 ] -Allocated (was zp[2]:20) zp[2]:15 [ main::$29 ] -Allocated (was zp[2]:26) zp[2]:17 [ main::$6 ] +Allocated (was zp[2]:23) zp[2]:11 [ rand::return#2 main::$10 rand::return#0 ] +Allocated (was zp[2]:14) zp[2]:13 [ main::$29 ] +Allocated (was zp[2]:20) zp[2]:15 [ main::$6 ] +Allocated (was zp[2]:30) zp[2]:17 [ rand_state ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -1165,7 +1093,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segmentdef Code [start=$100d] .segmentdef Data [startAfter="Code"] .segment Basic -:BasicUpstart(main) +:BasicUpstart(__start) // Global Constants & labels .const OFFSET_STRUCT_MOS7360_TED_BG_COLOR = $15 .const OFFSET_STRUCT_MOS7360_TED_BORDER_COLOR = $19 @@ -1177,57 +1105,82 @@ ASSEMBLER BEFORE OPTIMIZATION /// The TED chip controlling video and sound on the Plus/4 and Commodore 16 .label TED = $ff00 // The random state variable - .label rand_state = 2 + .label rand_state = $11 .segment Code + // __start +__start: { + jmp __init1 + // __start::__init1 + __init1: + // [1] rand_state = 1 -- vwuz1=vwuc1 + lda #<1 + sta.z rand_state + lda #>1 + sta.z rand_state+1 + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + __b1_from___init1: + jmp __b1 + // __start::@1 + __b1: + // [3] call main + // [5] phi from __start::@1 to main [phi:__start::@1->main] + main_from___b1: + jsr main + jmp __breturn + // __start::@return + __breturn: + // [4] return + rts +} // main main: { - .label __3 = $d - .label __6 = $11 - .label __8 = $d + .label __3 = 2 + .label __6 = $f + .label __8 = 2 .label __10 = $b - .label __24 = $d - .label offset = $d + .label __24 = 2 + .label offset = 2 .label y = 6 - .label __29 = $f - .label __30 = $d - // [1] call memset - // [44] phi from main to memset [phi:main->memset] + .label __29 = $d + .label __30 = 2 + // [6] call memset + // [49] phi from main to memset [phi:main->memset] memset_from_main: - // [44] phi memset::c#5 = $a0 [phi:main->memset#0] -- vbuxx=vbuc1 + // [49] phi memset::c#5 = $a0 [phi:main->memset#0] -- vbuxx=vbuc1 ldx #$a0 - // [44] phi memset::str#4 = (void *)DEFAULT_SCREEN [phi:main->memset#1] -- pvoz1=pvoc1 + // [49] phi memset::str#4 = (void *)DEFAULT_SCREEN [phi:main->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN sta.z memset.str+1 jsr memset - // [2] phi from main to main::@10 [phi:main->main::@10] + // [7] phi from main to main::@10 [phi:main->main::@10] __b10_from_main: jmp __b10 // main::@10 __b10: - // [3] call memset - // [44] phi from main::@10 to memset [phi:main::@10->memset] + // [8] call memset + // [49] phi from main::@10 to memset [phi:main::@10->memset] memset_from___b10: - // [44] phi memset::c#5 = 0 [phi:main::@10->memset#0] -- vbuxx=vbuc1 + // [49] phi memset::c#5 = 0 [phi:main::@10->memset#0] -- vbuxx=vbuc1 ldx #0 - // [44] phi memset::str#4 = (void *)DEFAULT_COLORRAM [phi:main::@10->memset#1] -- pvoz1=pvoc1 + // [49] phi memset::str#4 = (void *)DEFAULT_COLORRAM [phi:main::@10->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_COLORRAM sta.z memset.str+1 jsr memset - // [4] phi from main::@10 to main::@11 [phi:main::@10->main::@11] + // [9] phi from main::@10 to main::@11 [phi:main::@10->main::@11] __b11_from___b10: jmp __b11 // main::@11 __b11: - // [5] call memset - // [44] phi from main::@11 to memset [phi:main::@11->memset] + // [10] call memset + // [49] phi from main::@11 to memset [phi:main::@11->memset] memset_from___b11: - // [44] phi memset::c#5 = 0 [phi:main::@11->memset#0] -- vbuxx=vbuc1 + // [49] phi memset::c#5 = 0 [phi:main::@11->memset#0] -- vbuxx=vbuc1 ldx #0 - // [44] phi memset::str#4 = (void *)VISITS [phi:main::@11->memset#1] -- pvoz1=pvoc1 + // [49] phi memset::str#4 = (void *)VISITS [phi:main::@11->memset#1] -- pvoz1=pvoc1 lda #VISITS @@ -1236,22 +1189,17 @@ main: { jmp __b12 // main::@12 __b12: - // [6] *((char *)TED+OFFSET_STRUCT_MOS7360_TED_BG_COLOR) = 0 -- _deref_pbuc1=vbuc2 + // [11] *((char *)TED+OFFSET_STRUCT_MOS7360_TED_BG_COLOR) = 0 -- _deref_pbuc1=vbuc2 lda #0 sta TED+OFFSET_STRUCT_MOS7360_TED_BG_COLOR - // [7] *((char *)TED+OFFSET_STRUCT_MOS7360_TED_BORDER_COLOR) = 0 -- _deref_pbuc1=vbuc2 + // [12] *((char *)TED+OFFSET_STRUCT_MOS7360_TED_BORDER_COLOR) = 0 -- _deref_pbuc1=vbuc2 lda #0 sta TED+OFFSET_STRUCT_MOS7360_TED_BORDER_COLOR - // [8] phi from main::@12 to main::@1 [phi:main::@12->main::@1] + // [13] phi from main::@12 to main::@1 [phi:main::@12->main::@1] __b1_from___b12: - // [8] phi rand_state#12 = 1 [phi:main::@12->main::@1#0] -- vwuz1=vwuc1 - lda #<1 - sta.z rand_state - lda #>1 - sta.z rand_state+1 - // [8] phi main::x#11 = $14 [phi:main::@12->main::@1#1] -- vbuxx=vbuc1 + // [13] phi main::x#11 = $14 [phi:main::@12->main::@1#0] -- vbuxx=vbuc1 ldx #$14 - // [8] phi main::y#11 = $c [phi:main::@12->main::@1#2] -- vbuz1=vbuc1 + // [13] phi main::y#11 = $c [phi:main::@12->main::@1#1] -- vbuz1=vbuc1 lda #$c sta.z y jmp __b1 @@ -1260,12 +1208,12 @@ main: { jmp __b2 // main::@2 __b2: - // [9] main::$24 = (unsigned int)main::y#11 -- vwuz1=_word_vbuz2 + // [14] main::$24 = (unsigned int)main::y#11 -- vwuz1=_word_vbuz2 lda.z y sta.z __24 lda #0 sta.z __24+1 - // [10] main::$29 = main::$24 << 2 -- vwuz1=vwuz2_rol_2 + // [15] main::$29 = main::$24 << 2 -- vwuz1=vwuz2_rol_2 lda.z __24 asl sta.z __29 @@ -1274,7 +1222,7 @@ main: { sta.z __29+1 asl.z __29 rol.z __29+1 - // [11] main::$30 = main::$29 + main::$24 -- vwuz1=vwuz2_plus_vwuz1 + // [16] main::$30 = main::$29 + main::$24 -- vwuz1=vwuz2_plus_vwuz1 clc lda.z __30 adc.z __29 @@ -1282,14 +1230,14 @@ main: { lda.z __30+1 adc.z __29+1 sta.z __30+1 - // [12] main::$3 = main::$30 << 3 -- vwuz1=vwuz1_rol_3 + // [17] main::$3 = main::$30 << 3 -- vwuz1=vwuz1_rol_3 asl.z __3 rol.z __3+1 asl.z __3 rol.z __3+1 asl.z __3 rol.z __3+1 - // [13] main::offset#0 = main::$3 + main::x#11 -- vwuz1=vwuz1_plus_vbuxx + // [18] main::offset#0 = main::$3 + main::x#11 -- vwuz1=vwuz1_plus_vbuxx txa clc adc.z offset @@ -1297,7 +1245,7 @@ main: { bcc !+ inc.z offset+1 !: - // [14] main::$6 = VISITS + main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 + // [19] main::$6 = VISITS + main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 lda.z offset clc adc #VISITS sta.z __6+1 - // [15] *main::$6 = ++ *main::$6 -- _deref_pbuz1=_inc__deref_pbuz1 + // [20] *main::$6 = ++ *main::$6 -- _deref_pbuz1=_inc__deref_pbuz1 ldy #0 lda (__6),y clc adc #1 ldy #0 sta (__6),y - // [16] main::cnt#0 = *main::$6 -- vbuyy=_deref_pbuz1 + // [21] main::cnt#0 = *main::$6 -- vbuyy=_deref_pbuz1 ldy #0 lda (__6),y tay - // [17] main::$8 = DEFAULT_COLORRAM + main::offset#0 -- pbuz1=pbuc1_plus_vwuz1 + // [22] main::$8 = DEFAULT_COLORRAM + main::offset#0 -- pbuz1=pbuc1_plus_vwuz1 lda.z __8 clc adc #DEFAULT_COLORRAM sta.z __8+1 - // [18] main::$9 = main::cnt#0 & $f -- vbuaa=vbuyy_band_vbuc1 + // [23] main::$9 = main::cnt#0 & $f -- vbuaa=vbuyy_band_vbuc1 tya and #$f - // [19] *main::$8 = FADE[main::$9] -- _deref_pbuz1=pbuc1_derefidx_vbuaa + // [24] *main::$8 = FADE[main::$9] -- _deref_pbuz1=pbuc1_derefidx_vbuaa tay lda FADE,y ldy #0 sta (__8),y - // [20] call rand + // [25] call rand jsr rand - // [21] rand::return#2 = rand::return#0 + // [26] rand::return#2 = rand::return#0 jmp __b13 // main::@13 __b13: - // [22] main::$10 = rand::return#2 - // [23] main::rnd#0 = byte1 main::$10 -- vbuyy=_byte1_vwuz1 + // [27] main::$10 = rand::return#2 + // [28] main::rnd#0 = byte1 main::$10 -- vbuyy=_byte1_vwuz1 ldy.z __10+1 - // [24] main::$12 = main::rnd#0 & $80 -- vbuaa=vbuyy_band_vbuc1 + // [29] main::$12 = main::rnd#0 & $80 -- vbuaa=vbuyy_band_vbuc1 tya and #$80 - // [25] if(0!=main::$12) goto main::@3 -- 0_neq_vbuaa_then_la1 + // [30] if(0!=main::$12) goto main::@3 -- 0_neq_vbuaa_then_la1 cmp #0 bne __b3 jmp __b7 // main::@7 __b7: - // [26] main::$13 = main::rnd#0 & $40 -- vbuaa=vbuyy_band_vbuc1 + // [31] main::$13 = main::rnd#0 & $40 -- vbuaa=vbuyy_band_vbuc1 tya and #$40 - // [27] if(0!=main::$13) goto main::@4 -- 0_neq_vbuaa_then_la1 + // [32] if(0!=main::$13) goto main::@4 -- 0_neq_vbuaa_then_la1 cmp #0 bne __b4 jmp __b8 // main::@8 __b8: - // [28] main::y#2 = -- main::y#11 -- vbuz1=_dec_vbuz1 + // [33] main::y#2 = -- main::y#11 -- vbuz1=_dec_vbuz1 dec.z y - // [29] if(main::y#2!=$ff) goto main::@14 -- vbuz1_neq_vbuc1_then_la1 + // [34] if(main::y#2!=$ff) goto main::@14 -- vbuz1_neq_vbuc1_then_la1 lda #$ff cmp.z y bne __b14_from___b8 - // [31] phi from main::@8 to main::@6 [phi:main::@8->main::@6] + // [36] phi from main::@8 to main::@6 [phi:main::@8->main::@6] __b6_from___b8: - // [31] phi main::x#10 = main::x#11 [phi:main::@8->main::@6#0] -- register_copy - // [31] phi main::y#10 = 0 [phi:main::@8->main::@6#1] -- vbuz1=vbuc1 + // [36] phi main::x#10 = main::x#11 [phi:main::@8->main::@6#0] -- register_copy + // [36] phi main::y#10 = 0 [phi:main::@8->main::@6#1] -- vbuz1=vbuc1 lda #0 sta.z y jmp __b6 - // [30] phi from main::@8 to main::@14 [phi:main::@8->main::@14] + // [35] phi from main::@8 to main::@14 [phi:main::@8->main::@14] __b14_from___b8: jmp __b14 // main::@14 __b14: - // [31] phi from main::@14 main::@15 main::@16 main::@17 main::@6 to main::@6 [phi:main::@14/main::@15/main::@16/main::@17/main::@6->main::@6] + // [36] phi from main::@14 main::@15 main::@16 main::@17 main::@6 to main::@6 [phi:main::@14/main::@15/main::@16/main::@17/main::@6->main::@6] __b6_from___b14: __b6_from___b15: __b6_from___b16: __b6_from___b17: __b6_from___b6: - // [31] phi main::x#10 = main::x#11 [phi:main::@14/main::@15/main::@16/main::@17/main::@6->main::@6#0] -- register_copy - // [31] phi main::y#10 = main::y#2 [phi:main::@14/main::@15/main::@16/main::@17/main::@6->main::@6#1] -- register_copy + // [36] phi main::x#10 = main::x#11 [phi:main::@14/main::@15/main::@16/main::@17/main::@6->main::@6#0] -- register_copy + // [36] phi main::y#10 = main::y#2 [phi:main::@14/main::@15/main::@16/main::@17/main::@6->main::@6#1] -- register_copy jmp __b6 // main::@6 __b6: - // [32] if(*((char *)TED+OFFSET_STRUCT_MOS7360_TED_RASTER_LO)!=$ff) goto main::@6 -- _deref_pbuc1_neq_vbuc2_then_la1 + // [37] if(*((char *)TED+OFFSET_STRUCT_MOS7360_TED_RASTER_LO)!=$ff) goto main::@6 -- _deref_pbuc1_neq_vbuc2_then_la1 lda #$ff cmp TED+OFFSET_STRUCT_MOS7360_TED_RASTER_LO bne __b6_from___b6 - // [8] phi from main::@6 to main::@1 [phi:main::@6->main::@1] + // [13] phi from main::@6 to main::@1 [phi:main::@6->main::@1] __b1_from___b6: - // [8] phi rand_state#12 = rand_state#10 [phi:main::@6->main::@1#0] -- register_copy - // [8] phi main::x#11 = main::x#10 [phi:main::@6->main::@1#1] -- register_copy - // [8] phi main::y#11 = main::y#10 [phi:main::@6->main::@1#2] -- register_copy + // [13] phi main::x#11 = main::x#10 [phi:main::@6->main::@1#0] -- register_copy + // [13] phi main::y#11 = main::y#10 [phi:main::@6->main::@1#1] -- register_copy jmp __b1 // main::@4 __b4: - // [33] main::y#1 = ++ main::y#11 -- vbuz1=_inc_vbuz1 + // [38] main::y#1 = ++ main::y#11 -- vbuz1=_inc_vbuz1 inc.z y - // [34] if(main::y#1!=$19) goto main::@16 -- vbuz1_neq_vbuc1_then_la1 + // [39] if(main::y#1!=$19) goto main::@16 -- vbuz1_neq_vbuc1_then_la1 lda #$19 cmp.z y bne __b16_from___b4 - // [31] phi from main::@4 to main::@6 [phi:main::@4->main::@6] + // [36] phi from main::@4 to main::@6 [phi:main::@4->main::@6] __b6_from___b4: - // [31] phi main::x#10 = main::x#11 [phi:main::@4->main::@6#0] -- register_copy - // [31] phi main::y#10 = $18 [phi:main::@4->main::@6#1] -- vbuz1=vbuc1 + // [36] phi main::x#10 = main::x#11 [phi:main::@4->main::@6#0] -- register_copy + // [36] phi main::y#10 = $18 [phi:main::@4->main::@6#1] -- vbuz1=vbuc1 lda #$18 sta.z y jmp __b6 - // [35] phi from main::@4 to main::@16 [phi:main::@4->main::@16] + // [40] phi from main::@4 to main::@16 [phi:main::@4->main::@16] __b16_from___b4: jmp __b16 // main::@16 @@ -1421,27 +1368,27 @@ main: { jmp __b6_from___b16 // main::@3 __b3: - // [36] main::$18 = main::rnd#0 & $40 -- vbuaa=vbuyy_band_vbuc1 + // [41] main::$18 = main::rnd#0 & $40 -- vbuaa=vbuyy_band_vbuc1 tya and #$40 - // [37] if(0!=main::$18) goto main::@5 -- 0_neq_vbuaa_then_la1 + // [42] if(0!=main::$18) goto main::@5 -- 0_neq_vbuaa_then_la1 cmp #0 bne __b5 jmp __b9 // main::@9 __b9: - // [38] main::x#2 = -- main::x#11 -- vbuxx=_dec_vbuxx + // [43] main::x#2 = -- main::x#11 -- vbuxx=_dec_vbuxx dex - // [39] if(main::x#2!=$ff) goto main::@15 -- vbuxx_neq_vbuc1_then_la1 + // [44] if(main::x#2!=$ff) goto main::@15 -- vbuxx_neq_vbuc1_then_la1 cpx #$ff bne __b15_from___b9 - // [31] phi from main::@9 to main::@6 [phi:main::@9->main::@6] + // [36] phi from main::@9 to main::@6 [phi:main::@9->main::@6] __b6_from___b9: - // [31] phi main::x#10 = 0 [phi:main::@9->main::@6#0] -- vbuxx=vbuc1 + // [36] phi main::x#10 = 0 [phi:main::@9->main::@6#0] -- vbuxx=vbuc1 ldx #0 - // [31] phi main::y#10 = main::y#11 [phi:main::@9->main::@6#1] -- register_copy + // [36] phi main::y#10 = main::y#11 [phi:main::@9->main::@6#1] -- register_copy jmp __b6 - // [40] phi from main::@9 to main::@15 [phi:main::@9->main::@15] + // [45] phi from main::@9 to main::@15 [phi:main::@9->main::@15] __b15_from___b9: jmp __b15 // main::@15 @@ -1449,18 +1396,18 @@ main: { jmp __b6_from___b15 // main::@5 __b5: - // [41] main::x#1 = ++ main::x#11 -- vbuxx=_inc_vbuxx + // [46] main::x#1 = ++ main::x#11 -- vbuxx=_inc_vbuxx inx - // [42] if(main::x#1!=$28) goto main::@17 -- vbuxx_neq_vbuc1_then_la1 + // [47] if(main::x#1!=$28) goto main::@17 -- vbuxx_neq_vbuc1_then_la1 cpx #$28 bne __b17_from___b5 - // [31] phi from main::@5 to main::@6 [phi:main::@5->main::@6] + // [36] phi from main::@5 to main::@6 [phi:main::@5->main::@6] __b6_from___b5: - // [31] phi main::x#10 = $27 [phi:main::@5->main::@6#0] -- vbuxx=vbuc1 + // [36] phi main::x#10 = $27 [phi:main::@5->main::@6#0] -- vbuxx=vbuc1 ldx #$27 - // [31] phi main::y#10 = main::y#11 [phi:main::@5->main::@6#1] -- register_copy + // [36] phi main::y#10 = main::y#11 [phi:main::@5->main::@6#1] -- register_copy jmp __b6 - // [43] phi from main::@5 to main::@17 [phi:main::@5->main::@17] + // [48] phi from main::@5 to main::@17 [phi:main::@5->main::@17] __b17_from___b5: jmp __b17 // main::@17 @@ -1477,7 +1424,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [45] memset::end#0 = (char *)memset::str#4 + $3e8 -- pbuz1=pbuz2_plus_vwuc1 + // [50] memset::end#0 = (char *)memset::str#4 + $3e8 -- pbuz1=pbuz2_plus_vwuc1 lda.z str clc adc #<$3e8 @@ -1485,15 +1432,15 @@ memset: { lda.z str+1 adc #>$3e8 sta.z end+1 - // [46] memset::dst#4 = (char *)memset::str#4 - // [47] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + // [51] memset::dst#4 = (char *)memset::str#4 + // [52] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] __b2_from___b1: __b2_from___b3: - // [47] phi memset::dst#2 = memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + // [52] phi memset::dst#2 = memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy jmp __b2 // memset::@2 __b2: - // [48] if(memset::dst#2!=memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + // [53] if(memset::dst#2!=memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 lda.z dst+1 cmp.z end+1 bne __b3 @@ -1503,15 +1450,15 @@ memset: { jmp __breturn // memset::@return __breturn: - // [49] return + // [54] return rts // memset::@3 __b3: - // [50] *memset::dst#2 = memset::c#5 -- _deref_pbuz1=vbuxx + // [55] *memset::dst#2 = memset::c#5 -- _deref_pbuz1=vbuxx txa ldy #0 sta (dst),y - // [51] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 + // [56] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 @@ -1528,7 +1475,7 @@ rand: { .label __1 = 7 .label __2 = 9 .label return = $b - // [52] rand::$0 = rand_state#12 << 7 -- vwuz1=vwuz2_rol_7 + // [57] rand::$0 = rand_state << 7 -- vwuz1=vwuz2_rol_7 lda.z rand_state+1 lsr lda.z rand_state @@ -1537,39 +1484,39 @@ rand: { lda #0 ror sta.z __0 - // [53] rand_state#0 = rand_state#12 ^ rand::$0 -- vwuz1=vwuz1_bxor_vwuz2 + // [58] rand_state = rand_state ^ rand::$0 -- vwuz1=vwuz1_bxor_vwuz2 lda.z rand_state eor.z __0 sta.z rand_state lda.z rand_state+1 eor.z __0+1 sta.z rand_state+1 - // [54] rand::$1 = rand_state#0 >> 9 -- vwuz1=vwuz2_ror_9 + // [59] rand::$1 = rand_state >> 9 -- vwuz1=vwuz2_ror_9 lda.z rand_state+1 lsr sta.z __1 lda #0 sta.z __1+1 - // [55] rand_state#1 = rand_state#0 ^ rand::$1 -- vwuz1=vwuz1_bxor_vwuz2 + // [60] rand_state = rand_state ^ rand::$1 -- vwuz1=vwuz1_bxor_vwuz2 lda.z rand_state eor.z __1 sta.z rand_state lda.z rand_state+1 eor.z __1+1 sta.z rand_state+1 - // [56] rand::$2 = rand_state#1 << 8 -- vwuz1=vwuz2_rol_8 + // [61] rand::$2 = rand_state << 8 -- vwuz1=vwuz2_rol_8 lda.z rand_state sta.z __2+1 lda #0 sta.z __2 - // [57] rand_state#10 = rand_state#1 ^ rand::$2 -- vwuz1=vwuz1_bxor_vwuz2 + // [62] rand_state = rand_state ^ rand::$2 -- vwuz1=vwuz1_bxor_vwuz2 lda.z rand_state eor.z __2 sta.z rand_state lda.z rand_state+1 eor.z __2+1 sta.z rand_state+1 - // [58] rand::return#0 = rand_state#10 -- vwuz1=vwuz2 + // [63] rand::return#0 = rand_state -- vwuz1=vwuz2 lda.z rand_state sta.z return lda.z rand_state+1 @@ -1577,7 +1524,7 @@ rand: { jmp __breturn // rand::@return __breturn: - // [59] return + // [64] return rts } // File Data @@ -1588,6 +1535,9 @@ rand: { VISITS: .fill $3e8, 0 ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __init1 +Removing instruction jmp __b1 +Removing instruction jmp __breturn Removing instruction jmp __b10 Removing instruction jmp __b11 Removing instruction jmp __b12 @@ -1622,6 +1572,8 @@ Replacing label __b6_from___b15 with __b6 Replacing label __b17_from___b5 with __b17 Replacing label __b6_from___b17 with __b6 Replacing label __b2_from___b3 with __b2 +Removing instruction __b1_from___init1: +Removing instruction main_from___b1: Removing instruction __b10_from_main: Removing instruction memset_from___b10: Removing instruction __b11_from___b10: @@ -1640,6 +1592,9 @@ Removing instruction __b17_from___b5: Removing instruction __b2_from___b1: Removing instruction __b2_from___b3: Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction __init1: +Removing instruction __b1: +Removing instruction __breturn: Removing instruction memset_from_main: Removing instruction __b10: Removing instruction __b11: @@ -1686,67 +1641,64 @@ __constant char RADIX::HEXADECIMAL = $10 __constant char RADIX::OCTAL = 8 __constant struct MOS7360_TED * const TED = (struct MOS7360_TED *) 65280 __constant char VISITS[$3e8] = { fill( $3e8, 0) } +void __start() void main() -unsigned int main::$10 // zp[2]:11 22.0 -char main::$12 // reg byte a 22.0 -char main::$13 // reg byte a 22.0 -char main::$18 // reg byte a 22.0 -unsigned int main::$24 // zp[2]:13 16.5 -unsigned int main::$29 // zp[2]:15 22.0 -unsigned int main::$3 // zp[2]:13 22.0 -unsigned int main::$30 // zp[2]:13 22.0 -char *main::$6 // zp[2]:17 22.0 -char *main::$8 // zp[2]:13 11.0 -char main::$9 // reg byte a 22.0 +unsigned int main::$10 // zp[2]:11 202.0 +char main::$12 // reg byte a 202.0 +char main::$13 // reg byte a 202.0 +char main::$18 // reg byte a 202.0 +unsigned int main::$24 // zp[2]:2 151.5 +unsigned int main::$29 // zp[2]:13 202.0 +unsigned int main::$3 // zp[2]:2 202.0 +unsigned int main::$30 // zp[2]:2 202.0 +char *main::$6 // zp[2]:15 202.0 +char *main::$8 // zp[2]:2 101.0 +char main::$9 // reg byte a 202.0 char main::cnt -char main::cnt#0 // reg byte y 11.0 +char main::cnt#0 // reg byte y 101.0 unsigned int main::offset -unsigned int main::offset#0 // offset zp[2]:13 8.25 +unsigned int main::offset#0 // offset zp[2]:2 75.75 char main::rnd -char main::rnd#0 // reg byte y 14.666666666666666 +char main::rnd#0 // reg byte y 134.66666666666666 char main::x -char main::x#1 // reg byte x 11.0 -char main::x#10 // reg byte x 184.5 -char main::x#11 // reg byte x 6.357142857142859 -char main::x#2 // reg byte x 11.0 +char main::x#1 // reg byte x 101.0 +char main::x#10 // reg byte x 1804.5 +char main::x#11 // reg byte x 60.99999999999998 +char main::x#2 // reg byte x 101.0 char main::y -char main::y#1 // y zp[1]:6 11.0 -char main::y#10 // y zp[1]:6 184.5 -char main::y#11 // y zp[1]:6 5.964285714285716 -char main::y#2 // y zp[1]:6 11.0 +char main::y#1 // y zp[1]:6 101.0 +char main::y#10 // y zp[1]:6 1804.5 +char main::y#11 // y zp[1]:6 57.392857142857125 +char main::y#2 // y zp[1]:6 101.0 void * memset(void *str , char c , unsigned int num) char memset::c -char memset::c#5 // reg byte x 14.428571428571429 +char memset::c#5 // reg byte x 143.0 char *memset::dst -char *memset::dst#1 // dst zp[2]:2 202.0 -char *memset::dst#2 // dst zp[2]:2 138.33333333333331 -char *memset::dst#4 // dst zp[2]:2 22.0 +char *memset::dst#1 // dst zp[2]:2 2002.0 +char *memset::dst#2 // dst zp[2]:2 1368.3333333333335 +char *memset::dst#4 // dst zp[2]:2 202.0 char *memset::end -char *memset::end#0 // end zp[2]:4 18.666666666666664 +char *memset::end#0 // end zp[2]:4 183.66666666666669 unsigned int memset::num void *memset::return void *memset::str void *memset::str#4 // str zp[2]:2 unsigned int rand() -unsigned int rand::$0 // zp[2]:4 202.0 -unsigned int rand::$1 // zp[2]:7 202.0 -unsigned int rand::$2 // zp[2]:9 202.0 +unsigned int rand::$0 // zp[2]:4 2002.0 +unsigned int rand::$1 // zp[2]:7 2002.0 +unsigned int rand::$2 // zp[2]:9 2002.0 unsigned int rand::return -unsigned int rand::return#0 // return zp[2]:11 37.33333333333333 -unsigned int rand::return#2 // return zp[2]:11 22.0 -unsigned int rand_state -unsigned int rand_state#0 // rand_state zp[2]:2 151.5 -unsigned int rand_state#1 // rand_state zp[2]:2 151.5 -unsigned int rand_state#10 // rand_state zp[2]:2 11.222222222222223 -unsigned int rand_state#12 // rand_state zp[2]:2 23.307692307692307 +unsigned int rand::return#0 // return zp[2]:11 367.33333333333337 +unsigned int rand::return#2 // return zp[2]:11 202.0 +__loadstore volatile unsigned int rand_state // zp[2]:17 185.40740740740742 zp[1]:6 [ main::y#11 main::y#10 main::y#2 main::y#1 ] reg byte x [ main::x#11 main::x#10 main::x#2 main::x#1 ] -zp[2]:2 [ memset::str#4 memset::dst#2 memset::dst#4 memset::dst#1 rand_state#12 rand_state#10 rand_state#0 rand_state#1 ] reg byte x [ memset::c#5 ] -zp[2]:13 [ main::$24 main::$30 main::$3 main::offset#0 main::$8 ] -zp[2]:15 [ main::$29 ] -zp[2]:17 [ main::$6 ] +zp[2]:17 [ rand_state ] +zp[2]:2 [ main::$24 main::$30 main::$3 main::offset#0 main::$8 memset::str#4 memset::dst#2 memset::dst#4 memset::dst#1 ] +zp[2]:13 [ main::$29 ] +zp[2]:15 [ main::$6 ] reg byte y [ main::cnt#0 ] reg byte a [ main::$9 ] zp[2]:11 [ rand::return#2 main::$10 rand::return#0 ] @@ -1760,7 +1712,7 @@ zp[2]:9 [ rand::$2 ] FINAL ASSEMBLER -Score: 6541 +Score: 6463 // File Comments // Random walk with color fading for Commodore Plus/4 / C16 @@ -1784,7 +1736,7 @@ Score: 6541 .segmentdef Code [start=$100d] .segmentdef Data [startAfter="Code"] .segment Basic -:BasicUpstart(main) +:BasicUpstart(__start) // Global Constants & labels .const OFFSET_STRUCT_MOS7360_TED_BG_COLOR = $15 .const OFFSET_STRUCT_MOS7360_TED_BORDER_COLOR = $19 @@ -1796,51 +1748,69 @@ Score: 6541 /// The TED chip controlling video and sound on the Plus/4 and Commodore 16 .label TED = $ff00 // The random state variable - .label rand_state = 2 + .label rand_state = $11 .segment Code + // __start +__start: { + // __start::__init1 + // volatile unsigned int rand_state = 1 + // [1] rand_state = 1 -- vwuz1=vwuc1 + lda #<1 + sta.z rand_state + lda #>1 + sta.z rand_state+1 + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // __start::@1 + // [3] call main + // [5] phi from __start::@1 to main [phi:__start::@1->main] + jsr main + // __start::@return + // [4] return + rts +} // main main: { - .label __3 = $d - .label __6 = $11 - .label __8 = $d + .label __3 = 2 + .label __6 = $f + .label __8 = 2 .label __10 = $b - .label __24 = $d - .label offset = $d + .label __24 = 2 + .label offset = 2 .label y = 6 - .label __29 = $f - .label __30 = $d + .label __29 = $d + .label __30 = 2 // memset(DEFAULT_SCREEN, 0xa0, 1000) - // [1] call memset - // [44] phi from main to memset [phi:main->memset] - // [44] phi memset::c#5 = $a0 [phi:main->memset#0] -- vbuxx=vbuc1 + // [6] call memset + // [49] phi from main to memset [phi:main->memset] + // [49] phi memset::c#5 = $a0 [phi:main->memset#0] -- vbuxx=vbuc1 ldx #$a0 - // [44] phi memset::str#4 = (void *)DEFAULT_SCREEN [phi:main->memset#1] -- pvoz1=pvoc1 + // [49] phi memset::str#4 = (void *)DEFAULT_SCREEN [phi:main->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN sta.z memset.str+1 jsr memset - // [2] phi from main to main::@10 [phi:main->main::@10] + // [7] phi from main to main::@10 [phi:main->main::@10] // main::@10 // memset(DEFAULT_COLORRAM, 0, 1000) - // [3] call memset - // [44] phi from main::@10 to memset [phi:main::@10->memset] - // [44] phi memset::c#5 = 0 [phi:main::@10->memset#0] -- vbuxx=vbuc1 + // [8] call memset + // [49] phi from main::@10 to memset [phi:main::@10->memset] + // [49] phi memset::c#5 = 0 [phi:main::@10->memset#0] -- vbuxx=vbuc1 ldx #0 - // [44] phi memset::str#4 = (void *)DEFAULT_COLORRAM [phi:main::@10->memset#1] -- pvoz1=pvoc1 + // [49] phi memset::str#4 = (void *)DEFAULT_COLORRAM [phi:main::@10->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_COLORRAM sta.z memset.str+1 jsr memset - // [4] phi from main::@10 to main::@11 [phi:main::@10->main::@11] + // [9] phi from main::@10 to main::@11 [phi:main::@10->main::@11] // main::@11 // memset(VISITS, 0, 1000) - // [5] call memset - // [44] phi from main::@11 to memset [phi:main::@11->memset] - // [44] phi memset::c#5 = 0 [phi:main::@11->memset#0] -- vbuxx=vbuc1 + // [10] call memset + // [49] phi from main::@11 to memset [phi:main::@11->memset] + // [49] phi memset::c#5 = 0 [phi:main::@11->memset#0] -- vbuxx=vbuc1 ldx #0 - // [44] phi memset::str#4 = (void *)VISITS [phi:main::@11->memset#1] -- pvoz1=pvoc1 + // [49] phi memset::str#4 = (void *)VISITS [phi:main::@11->memset#1] -- pvoz1=pvoc1 lda #VISITS @@ -1848,33 +1818,28 @@ main: { jsr memset // main::@12 // TED->BG_COLOR = 0 - // [6] *((char *)TED+OFFSET_STRUCT_MOS7360_TED_BG_COLOR) = 0 -- _deref_pbuc1=vbuc2 + // [11] *((char *)TED+OFFSET_STRUCT_MOS7360_TED_BG_COLOR) = 0 -- _deref_pbuc1=vbuc2 lda #0 sta TED+OFFSET_STRUCT_MOS7360_TED_BG_COLOR // TED->BORDER_COLOR = 0 - // [7] *((char *)TED+OFFSET_STRUCT_MOS7360_TED_BORDER_COLOR) = 0 -- _deref_pbuc1=vbuc2 + // [12] *((char *)TED+OFFSET_STRUCT_MOS7360_TED_BORDER_COLOR) = 0 -- _deref_pbuc1=vbuc2 sta TED+OFFSET_STRUCT_MOS7360_TED_BORDER_COLOR - // [8] phi from main::@12 to main::@1 [phi:main::@12->main::@1] - // [8] phi rand_state#12 = 1 [phi:main::@12->main::@1#0] -- vwuz1=vwuc1 - lda #<1 - sta.z rand_state - lda #>1 - sta.z rand_state+1 - // [8] phi main::x#11 = $14 [phi:main::@12->main::@1#1] -- vbuxx=vbuc1 + // [13] phi from main::@12 to main::@1 [phi:main::@12->main::@1] + // [13] phi main::x#11 = $14 [phi:main::@12->main::@1#0] -- vbuxx=vbuc1 ldx #$14 - // [8] phi main::y#11 = $c [phi:main::@12->main::@1#2] -- vbuz1=vbuc1 + // [13] phi main::y#11 = $c [phi:main::@12->main::@1#1] -- vbuz1=vbuc1 lda #$c sta.z y // main::@1 // main::@2 __b2: // (unsigned int)y*40 - // [9] main::$24 = (unsigned int)main::y#11 -- vwuz1=_word_vbuz2 + // [14] main::$24 = (unsigned int)main::y#11 -- vwuz1=_word_vbuz2 lda.z y sta.z __24 lda #0 sta.z __24+1 - // [10] main::$29 = main::$24 << 2 -- vwuz1=vwuz2_rol_2 + // [15] main::$29 = main::$24 << 2 -- vwuz1=vwuz2_rol_2 lda.z __24 asl sta.z __29 @@ -1883,7 +1848,7 @@ main: { sta.z __29+1 asl.z __29 rol.z __29+1 - // [11] main::$30 = main::$29 + main::$24 -- vwuz1=vwuz2_plus_vwuz1 + // [16] main::$30 = main::$29 + main::$24 -- vwuz1=vwuz2_plus_vwuz1 clc lda.z __30 adc.z __29 @@ -1891,7 +1856,7 @@ main: { lda.z __30+1 adc.z __29+1 sta.z __30+1 - // [12] main::$3 = main::$30 << 3 -- vwuz1=vwuz1_rol_3 + // [17] main::$3 = main::$30 << 3 -- vwuz1=vwuz1_rol_3 asl.z __3 rol.z __3+1 asl.z __3 @@ -1899,7 +1864,7 @@ main: { asl.z __3 rol.z __3+1 // unsigned int offset = (unsigned int)y*40+x - // [13] main::offset#0 = main::$3 + main::x#11 -- vwuz1=vwuz1_plus_vbuxx + // [18] main::offset#0 = main::$3 + main::x#11 -- vwuz1=vwuz1_plus_vbuxx txa clc adc.z offset @@ -1908,7 +1873,7 @@ main: { inc.z offset+1 !: // VISITS+offset - // [14] main::$6 = VISITS + main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 + // [19] main::$6 = VISITS + main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 lda.z offset clc adc #VISITS sta.z __6+1 // char cnt = ++*(VISITS+offset) - // [15] *main::$6 = ++ *main::$6 -- _deref_pbuz1=_inc__deref_pbuz1 + // [20] *main::$6 = ++ *main::$6 -- _deref_pbuz1=_inc__deref_pbuz1 ldy #0 lda (__6),y clc adc #1 sta (__6),y - // [16] main::cnt#0 = *main::$6 -- vbuyy=_deref_pbuz1 + // [21] main::cnt#0 = *main::$6 -- vbuyy=_deref_pbuz1 lda (__6),y tay // DEFAULT_COLORRAM+offset - // [17] main::$8 = DEFAULT_COLORRAM + main::offset#0 -- pbuz1=pbuc1_plus_vwuz1 + // [22] main::$8 = DEFAULT_COLORRAM + main::offset#0 -- pbuz1=pbuc1_plus_vwuz1 lda.z __8 clc adc #DEFAULT_COLORRAM sta.z __8+1 // cnt&0xf - // [18] main::$9 = main::cnt#0 & $f -- vbuaa=vbuyy_band_vbuc1 + // [23] main::$9 = main::cnt#0 & $f -- vbuaa=vbuyy_band_vbuc1 tya and #$f // *(DEFAULT_COLORRAM+offset) = FADE[cnt&0xf] - // [19] *main::$8 = FADE[main::$9] -- _deref_pbuz1=pbuc1_derefidx_vbuaa + // [24] *main::$8 = FADE[main::$9] -- _deref_pbuz1=pbuc1_derefidx_vbuaa tay lda FADE,y ldy #0 sta (__8),y // rand() - // [20] call rand + // [25] call rand jsr rand - // [21] rand::return#2 = rand::return#0 + // [26] rand::return#2 = rand::return#0 // main::@13 - // [22] main::$10 = rand::return#2 + // [27] main::$10 = rand::return#2 // char rnd = BYTE1(rand()) - // [23] main::rnd#0 = byte1 main::$10 -- vbuyy=_byte1_vwuz1 + // [28] main::rnd#0 = byte1 main::$10 -- vbuyy=_byte1_vwuz1 ldy.z __10+1 // rnd & 0x80 - // [24] main::$12 = main::rnd#0 & $80 -- vbuaa=vbuyy_band_vbuc1 + // [29] main::$12 = main::rnd#0 & $80 -- vbuaa=vbuyy_band_vbuc1 tya and #$80 // if(rnd & 0x80) - // [25] if(0!=main::$12) goto main::@3 -- 0_neq_vbuaa_then_la1 + // [30] if(0!=main::$12) goto main::@3 -- 0_neq_vbuaa_then_la1 cmp #0 bne __b3 // main::@7 // rnd & 0x40 - // [26] main::$13 = main::rnd#0 & $40 -- vbuaa=vbuyy_band_vbuc1 + // [31] main::$13 = main::rnd#0 & $40 -- vbuaa=vbuyy_band_vbuc1 tya and #$40 // if(rnd & 0x40) - // [27] if(0!=main::$13) goto main::@4 -- 0_neq_vbuaa_then_la1 + // [32] if(0!=main::$13) goto main::@4 -- 0_neq_vbuaa_then_la1 cmp #0 bne __b4 // main::@8 // y--; - // [28] main::y#2 = -- main::y#11 -- vbuz1=_dec_vbuz1 + // [33] main::y#2 = -- main::y#11 -- vbuz1=_dec_vbuz1 dec.z y // if(y==0xff) - // [29] if(main::y#2!=$ff) goto main::@14 -- vbuz1_neq_vbuc1_then_la1 + // [34] if(main::y#2!=$ff) goto main::@14 -- vbuz1_neq_vbuc1_then_la1 lda #$ff cmp.z y bne __b6 - // [31] phi from main::@8 to main::@6 [phi:main::@8->main::@6] - // [31] phi main::x#10 = main::x#11 [phi:main::@8->main::@6#0] -- register_copy - // [31] phi main::y#10 = 0 [phi:main::@8->main::@6#1] -- vbuz1=vbuc1 + // [36] phi from main::@8 to main::@6 [phi:main::@8->main::@6] + // [36] phi main::x#10 = main::x#11 [phi:main::@8->main::@6#0] -- register_copy + // [36] phi main::y#10 = 0 [phi:main::@8->main::@6#1] -- vbuz1=vbuc1 lda #0 sta.z y - // [30] phi from main::@8 to main::@14 [phi:main::@8->main::@14] + // [35] phi from main::@8 to main::@14 [phi:main::@8->main::@14] // main::@14 - // [31] phi from main::@14 main::@15 main::@16 main::@17 main::@6 to main::@6 [phi:main::@14/main::@15/main::@16/main::@17/main::@6->main::@6] - // [31] phi main::x#10 = main::x#11 [phi:main::@14/main::@15/main::@16/main::@17/main::@6->main::@6#0] -- register_copy - // [31] phi main::y#10 = main::y#2 [phi:main::@14/main::@15/main::@16/main::@17/main::@6->main::@6#1] -- register_copy + // [36] phi from main::@14 main::@15 main::@16 main::@17 main::@6 to main::@6 [phi:main::@14/main::@15/main::@16/main::@17/main::@6->main::@6] + // [36] phi main::x#10 = main::x#11 [phi:main::@14/main::@15/main::@16/main::@17/main::@6->main::@6#0] -- register_copy + // [36] phi main::y#10 = main::y#2 [phi:main::@14/main::@15/main::@16/main::@17/main::@6->main::@6#1] -- register_copy // main::@6 __b6: // while(TED->RASTER_LO!=0xff) - // [32] if(*((char *)TED+OFFSET_STRUCT_MOS7360_TED_RASTER_LO)!=$ff) goto main::@6 -- _deref_pbuc1_neq_vbuc2_then_la1 + // [37] if(*((char *)TED+OFFSET_STRUCT_MOS7360_TED_RASTER_LO)!=$ff) goto main::@6 -- _deref_pbuc1_neq_vbuc2_then_la1 lda #$ff cmp TED+OFFSET_STRUCT_MOS7360_TED_RASTER_LO bne __b6 - // [8] phi from main::@6 to main::@1 [phi:main::@6->main::@1] - // [8] phi rand_state#12 = rand_state#10 [phi:main::@6->main::@1#0] -- register_copy - // [8] phi main::x#11 = main::x#10 [phi:main::@6->main::@1#1] -- register_copy - // [8] phi main::y#11 = main::y#10 [phi:main::@6->main::@1#2] -- register_copy + // [13] phi from main::@6 to main::@1 [phi:main::@6->main::@1] + // [13] phi main::x#11 = main::x#10 [phi:main::@6->main::@1#0] -- register_copy + // [13] phi main::y#11 = main::y#10 [phi:main::@6->main::@1#1] -- register_copy jmp __b2 // main::@4 __b4: // y++; - // [33] main::y#1 = ++ main::y#11 -- vbuz1=_inc_vbuz1 + // [38] main::y#1 = ++ main::y#11 -- vbuz1=_inc_vbuz1 inc.z y // if(y==25) - // [34] if(main::y#1!=$19) goto main::@16 -- vbuz1_neq_vbuc1_then_la1 + // [39] if(main::y#1!=$19) goto main::@16 -- vbuz1_neq_vbuc1_then_la1 lda #$19 cmp.z y bne __b6 - // [31] phi from main::@4 to main::@6 [phi:main::@4->main::@6] - // [31] phi main::x#10 = main::x#11 [phi:main::@4->main::@6#0] -- register_copy - // [31] phi main::y#10 = $18 [phi:main::@4->main::@6#1] -- vbuz1=vbuc1 + // [36] phi from main::@4 to main::@6 [phi:main::@4->main::@6] + // [36] phi main::x#10 = main::x#11 [phi:main::@4->main::@6#0] -- register_copy + // [36] phi main::y#10 = $18 [phi:main::@4->main::@6#1] -- vbuz1=vbuc1 lda #$18 sta.z y jmp __b6 - // [35] phi from main::@4 to main::@16 [phi:main::@4->main::@16] + // [40] phi from main::@4 to main::@16 [phi:main::@4->main::@16] // main::@16 // main::@3 __b3: // rnd& 0x40 - // [36] main::$18 = main::rnd#0 & $40 -- vbuaa=vbuyy_band_vbuc1 + // [41] main::$18 = main::rnd#0 & $40 -- vbuaa=vbuyy_band_vbuc1 tya and #$40 // if(rnd& 0x40) - // [37] if(0!=main::$18) goto main::@5 -- 0_neq_vbuaa_then_la1 + // [42] if(0!=main::$18) goto main::@5 -- 0_neq_vbuaa_then_la1 cmp #0 bne __b5 // main::@9 // x--; - // [38] main::x#2 = -- main::x#11 -- vbuxx=_dec_vbuxx + // [43] main::x#2 = -- main::x#11 -- vbuxx=_dec_vbuxx dex // if(x==0xff) - // [39] if(main::x#2!=$ff) goto main::@15 -- vbuxx_neq_vbuc1_then_la1 + // [44] if(main::x#2!=$ff) goto main::@15 -- vbuxx_neq_vbuc1_then_la1 cpx #$ff bne __b6 - // [31] phi from main::@9 to main::@6 [phi:main::@9->main::@6] - // [31] phi main::x#10 = 0 [phi:main::@9->main::@6#0] -- vbuxx=vbuc1 + // [36] phi from main::@9 to main::@6 [phi:main::@9->main::@6] + // [36] phi main::x#10 = 0 [phi:main::@9->main::@6#0] -- vbuxx=vbuc1 ldx #0 - // [31] phi main::y#10 = main::y#11 [phi:main::@9->main::@6#1] -- register_copy + // [36] phi main::y#10 = main::y#11 [phi:main::@9->main::@6#1] -- register_copy jmp __b6 - // [40] phi from main::@9 to main::@15 [phi:main::@9->main::@15] + // [45] phi from main::@9 to main::@15 [phi:main::@9->main::@15] // main::@15 // main::@5 __b5: // x++; - // [41] main::x#1 = ++ main::x#11 -- vbuxx=_inc_vbuxx + // [46] main::x#1 = ++ main::x#11 -- vbuxx=_inc_vbuxx inx // if(x==40) - // [42] if(main::x#1!=$28) goto main::@17 -- vbuxx_neq_vbuc1_then_la1 + // [47] if(main::x#1!=$28) goto main::@17 -- vbuxx_neq_vbuc1_then_la1 cpx #$28 bne __b6 - // [31] phi from main::@5 to main::@6 [phi:main::@5->main::@6] - // [31] phi main::x#10 = $27 [phi:main::@5->main::@6#0] -- vbuxx=vbuc1 + // [36] phi from main::@5 to main::@6 [phi:main::@5->main::@6] + // [36] phi main::x#10 = $27 [phi:main::@5->main::@6#0] -- vbuxx=vbuc1 ldx #$27 - // [31] phi main::y#10 = main::y#11 [phi:main::@5->main::@6#1] -- register_copy + // [36] phi main::y#10 = main::y#11 [phi:main::@5->main::@6#1] -- register_copy jmp __b6 - // [43] phi from main::@5 to main::@17 [phi:main::@5->main::@17] + // [48] phi from main::@5 to main::@17 [phi:main::@5->main::@17] // main::@17 } // memset @@ -2071,7 +2035,7 @@ memset: { .label str = 2 // memset::@1 // char* end = (char*)str + num - // [45] memset::end#0 = (char *)memset::str#4 + $3e8 -- pbuz1=pbuz2_plus_vwuc1 + // [50] memset::end#0 = (char *)memset::str#4 + $3e8 -- pbuz1=pbuz2_plus_vwuc1 lda.z str clc adc #<$3e8 @@ -2079,13 +2043,13 @@ memset: { lda.z str+1 adc #>$3e8 sta.z end+1 - // [46] memset::dst#4 = (char *)memset::str#4 - // [47] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] - // [47] phi memset::dst#2 = memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + // [51] memset::dst#4 = (char *)memset::str#4 + // [52] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + // [52] phi memset::dst#2 = memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy // memset::@2 __b2: // for(char* dst = str; dst!=end; dst++) - // [48] if(memset::dst#2!=memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + // [53] if(memset::dst#2!=memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 lda.z dst+1 cmp.z end+1 bne __b3 @@ -2094,17 +2058,17 @@ memset: { bne __b3 // memset::@return // } - // [49] return + // [54] return rts // memset::@3 __b3: // *dst = c - // [50] *memset::dst#2 = memset::c#5 -- _deref_pbuz1=vbuxx + // [55] *memset::dst#2 = memset::c#5 -- _deref_pbuz1=vbuxx txa ldy #0 sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [51] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 + // [56] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 @@ -2122,7 +2086,7 @@ rand: { .label __2 = 9 .label return = $b // rand_state << 7 - // [52] rand::$0 = rand_state#12 << 7 -- vwuz1=vwuz2_rol_7 + // [57] rand::$0 = rand_state << 7 -- vwuz1=vwuz2_rol_7 lda.z rand_state+1 lsr lda.z rand_state @@ -2132,7 +2096,7 @@ rand: { ror sta.z __0 // rand_state ^= rand_state << 7 - // [53] rand_state#0 = rand_state#12 ^ rand::$0 -- vwuz1=vwuz1_bxor_vwuz2 + // [58] rand_state = rand_state ^ rand::$0 -- vwuz1=vwuz1_bxor_vwuz2 lda.z rand_state eor.z __0 sta.z rand_state @@ -2140,13 +2104,13 @@ rand: { eor.z __0+1 sta.z rand_state+1 // rand_state >> 9 - // [54] rand::$1 = rand_state#0 >> 9 -- vwuz1=vwuz2_ror_9 + // [59] rand::$1 = rand_state >> 9 -- vwuz1=vwuz2_ror_9 lsr sta.z __1 lda #0 sta.z __1+1 // rand_state ^= rand_state >> 9 - // [55] rand_state#1 = rand_state#0 ^ rand::$1 -- vwuz1=vwuz1_bxor_vwuz2 + // [60] rand_state = rand_state ^ rand::$1 -- vwuz1=vwuz1_bxor_vwuz2 lda.z rand_state eor.z __1 sta.z rand_state @@ -2154,13 +2118,13 @@ rand: { eor.z __1+1 sta.z rand_state+1 // rand_state << 8 - // [56] rand::$2 = rand_state#1 << 8 -- vwuz1=vwuz2_rol_8 + // [61] rand::$2 = rand_state << 8 -- vwuz1=vwuz2_rol_8 lda.z rand_state sta.z __2+1 lda #0 sta.z __2 // rand_state ^= rand_state << 8 - // [57] rand_state#10 = rand_state#1 ^ rand::$2 -- vwuz1=vwuz1_bxor_vwuz2 + // [62] rand_state = rand_state ^ rand::$2 -- vwuz1=vwuz1_bxor_vwuz2 lda.z rand_state eor.z __2 sta.z rand_state @@ -2168,14 +2132,14 @@ rand: { eor.z __2+1 sta.z rand_state+1 // return rand_state; - // [58] rand::return#0 = rand_state#10 -- vwuz1=vwuz2 + // [63] rand::return#0 = rand_state -- vwuz1=vwuz2 lda.z rand_state sta.z return lda.z rand_state+1 sta.z return+1 // rand::@return // } - // [59] return + // [64] return rts } // File Data diff --git a/src/test/ref/examples/plus4/plus4-randomwalk.sym b/src/test/ref/examples/plus4/plus4-randomwalk.sym index 20587df85..6d88a7797 100644 --- a/src/test/ref/examples/plus4/plus4-randomwalk.sym +++ b/src/test/ref/examples/plus4/plus4-randomwalk.sym @@ -10,67 +10,64 @@ __constant char RADIX::HEXADECIMAL = $10 __constant char RADIX::OCTAL = 8 __constant struct MOS7360_TED * const TED = (struct MOS7360_TED *) 65280 __constant char VISITS[$3e8] = { fill( $3e8, 0) } +void __start() void main() -unsigned int main::$10 // zp[2]:11 22.0 -char main::$12 // reg byte a 22.0 -char main::$13 // reg byte a 22.0 -char main::$18 // reg byte a 22.0 -unsigned int main::$24 // zp[2]:13 16.5 -unsigned int main::$29 // zp[2]:15 22.0 -unsigned int main::$3 // zp[2]:13 22.0 -unsigned int main::$30 // zp[2]:13 22.0 -char *main::$6 // zp[2]:17 22.0 -char *main::$8 // zp[2]:13 11.0 -char main::$9 // reg byte a 22.0 +unsigned int main::$10 // zp[2]:11 202.0 +char main::$12 // reg byte a 202.0 +char main::$13 // reg byte a 202.0 +char main::$18 // reg byte a 202.0 +unsigned int main::$24 // zp[2]:2 151.5 +unsigned int main::$29 // zp[2]:13 202.0 +unsigned int main::$3 // zp[2]:2 202.0 +unsigned int main::$30 // zp[2]:2 202.0 +char *main::$6 // zp[2]:15 202.0 +char *main::$8 // zp[2]:2 101.0 +char main::$9 // reg byte a 202.0 char main::cnt -char main::cnt#0 // reg byte y 11.0 +char main::cnt#0 // reg byte y 101.0 unsigned int main::offset -unsigned int main::offset#0 // offset zp[2]:13 8.25 +unsigned int main::offset#0 // offset zp[2]:2 75.75 char main::rnd -char main::rnd#0 // reg byte y 14.666666666666666 +char main::rnd#0 // reg byte y 134.66666666666666 char main::x -char main::x#1 // reg byte x 11.0 -char main::x#10 // reg byte x 184.5 -char main::x#11 // reg byte x 6.357142857142859 -char main::x#2 // reg byte x 11.0 +char main::x#1 // reg byte x 101.0 +char main::x#10 // reg byte x 1804.5 +char main::x#11 // reg byte x 60.99999999999998 +char main::x#2 // reg byte x 101.0 char main::y -char main::y#1 // y zp[1]:6 11.0 -char main::y#10 // y zp[1]:6 184.5 -char main::y#11 // y zp[1]:6 5.964285714285716 -char main::y#2 // y zp[1]:6 11.0 +char main::y#1 // y zp[1]:6 101.0 +char main::y#10 // y zp[1]:6 1804.5 +char main::y#11 // y zp[1]:6 57.392857142857125 +char main::y#2 // y zp[1]:6 101.0 void * memset(void *str , char c , unsigned int num) char memset::c -char memset::c#5 // reg byte x 14.428571428571429 +char memset::c#5 // reg byte x 143.0 char *memset::dst -char *memset::dst#1 // dst zp[2]:2 202.0 -char *memset::dst#2 // dst zp[2]:2 138.33333333333331 -char *memset::dst#4 // dst zp[2]:2 22.0 +char *memset::dst#1 // dst zp[2]:2 2002.0 +char *memset::dst#2 // dst zp[2]:2 1368.3333333333335 +char *memset::dst#4 // dst zp[2]:2 202.0 char *memset::end -char *memset::end#0 // end zp[2]:4 18.666666666666664 +char *memset::end#0 // end zp[2]:4 183.66666666666669 unsigned int memset::num void *memset::return void *memset::str void *memset::str#4 // str zp[2]:2 unsigned int rand() -unsigned int rand::$0 // zp[2]:4 202.0 -unsigned int rand::$1 // zp[2]:7 202.0 -unsigned int rand::$2 // zp[2]:9 202.0 +unsigned int rand::$0 // zp[2]:4 2002.0 +unsigned int rand::$1 // zp[2]:7 2002.0 +unsigned int rand::$2 // zp[2]:9 2002.0 unsigned int rand::return -unsigned int rand::return#0 // return zp[2]:11 37.33333333333333 -unsigned int rand::return#2 // return zp[2]:11 22.0 -unsigned int rand_state -unsigned int rand_state#0 // rand_state zp[2]:2 151.5 -unsigned int rand_state#1 // rand_state zp[2]:2 151.5 -unsigned int rand_state#10 // rand_state zp[2]:2 11.222222222222223 -unsigned int rand_state#12 // rand_state zp[2]:2 23.307692307692307 +unsigned int rand::return#0 // return zp[2]:11 367.33333333333337 +unsigned int rand::return#2 // return zp[2]:11 202.0 +__loadstore volatile unsigned int rand_state // zp[2]:17 185.40740740740742 zp[1]:6 [ main::y#11 main::y#10 main::y#2 main::y#1 ] reg byte x [ main::x#11 main::x#10 main::x#2 main::x#1 ] -zp[2]:2 [ memset::str#4 memset::dst#2 memset::dst#4 memset::dst#1 rand_state#12 rand_state#10 rand_state#0 rand_state#1 ] reg byte x [ memset::c#5 ] -zp[2]:13 [ main::$24 main::$30 main::$3 main::offset#0 main::$8 ] -zp[2]:15 [ main::$29 ] -zp[2]:17 [ main::$6 ] +zp[2]:17 [ rand_state ] +zp[2]:2 [ main::$24 main::$30 main::$3 main::offset#0 main::$8 memset::str#4 memset::dst#2 memset::dst#4 memset::dst#1 ] +zp[2]:13 [ main::$29 ] +zp[2]:15 [ main::$6 ] reg byte y [ main::cnt#0 ] reg byte a [ main::$9 ] zp[2]:11 [ rand::return#2 main::$10 rand::return#0 ] diff --git a/src/test/ref/function-pointer-noarg-call-14.log b/src/test/ref/function-pointer-noarg-call-14.log index da9ae74fb..177a0cb8a 100644 --- a/src/test/ref/function-pointer-noarg-call-14.log +++ b/src/test/ref/function-pointer-noarg-call-14.log @@ -12,6 +12,8 @@ Eliminating unused variable with no statement memcpy::$0 Eliminating unused variable with no statement memset::$2 Eliminating unused variable with no statement gotoxy::$4 Eliminating unused variable with no statement printf_buffer +Eliminating unused variable with no statement __snprintf_capacity +Eliminating unused variable with no statement __snprintf_size Eliminating unused variable with no statement hello::$0 Eliminating unused variable with no statement world::$0 Calling convention STACK_CALL adding prepare/execute/finalize for call *printf_str::putc printf_str::c diff --git a/src/test/ref/memcpy-0.log b/src/test/ref/memcpy-0.log index 3a6c0f1db..5fc5ed8ac 100644 --- a/src/test/ref/memcpy-0.log +++ b/src/test/ref/memcpy-0.log @@ -1,5 +1,6 @@ Inlined call vicSelectGfxBank::$0 = call toDd00(vicSelectGfxBank::gfx) Inlined call main::$0 = call toD018(SCREEN_COPY, CHARSET) +Inlined call call __init Eliminating unused variable with no statement memcpy::$0 CONTROL FLOW GRAPH SSA @@ -42,7 +43,7 @@ memcpy::@return: scope:[memcpy] from memcpy::@3 to:@return void main() -main: scope:[main] from __start +main: scope:[main] from __start::@1 main::toD0181_screen#0 = SCREEN_COPY main::toD0181_gfx#0 = CHARSET to:main::toD0181 @@ -92,11 +93,15 @@ main::@return: scope:[main] from main::@3 void __start() __start: scope:[__start] from - call main + to:__start::__init1 +__start::__init1: scope:[__start] from __start to:__start::@1 -__start::@1: scope:[__start] from __start +__start::@1: scope:[__start] from __start::__init1 + call main + to:__start::@2 +__start::@2: scope:[__start] from __start::@1 to:__start::@return -__start::@return: scope:[__start] from __start::@1 +__start::@return: scope:[__start] from __start::@2 return to:@return @@ -243,7 +248,9 @@ Eliminating unused variable memcpy::return#3 and assignment [24] memcpy::return# Successful SSA optimization PassNEliminateUnusedVars Removing unused procedure __start Removing unused procedure block __start +Removing unused procedure block __start::__init1 Removing unused procedure block __start::@1 +Removing unused procedure block __start::@2 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart Constant right-side identified [11] main::toD0181_$0 = main::toD0181_$7 & $3fff diff --git a/src/test/ref/memcpy-1.log b/src/test/ref/memcpy-1.log index ff7dcf584..22b01f234 100644 --- a/src/test/ref/memcpy-1.log +++ b/src/test/ref/memcpy-1.log @@ -1,3 +1,4 @@ +Inlined call call __init Eliminating unused variable with no statement memcpy::$0 CONTROL FLOW GRAPH SSA @@ -40,7 +41,7 @@ memcpy::@return: scope:[memcpy] from memcpy::@3 to:@return void main() -main: scope:[main] from __start +main: scope:[main] from __start::@1 main::sc#0 = SCREEN main::camelot#0 = CAMELOT main::i#0 = 0 @@ -94,11 +95,15 @@ main::@return: scope:[main] from main::@6 void __start() __start: scope:[__start] from - call main + to:__start::__init1 +__start::__init1: scope:[__start] from __start to:__start::@1 -__start::@1: scope:[__start] from __start +__start::@1: scope:[__start] from __start::__init1 + call main + to:__start::@2 +__start::@2: scope:[__start] from __start::@1 to:__start::@return -__start::@return: scope:[__start] from __start::@1 +__start::@return: scope:[__start] from __start::@2 return to:@return @@ -232,7 +237,9 @@ Eliminating unused variable memcpy::return#3 and assignment [26] memcpy::return# Successful SSA optimization PassNEliminateUnusedVars Removing unused procedure __start Removing unused procedure block __start +Removing unused procedure block __start::__init1 Removing unused procedure block __start::@1 +Removing unused procedure block __start::@2 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart Adding number conversion cast (unumber) 7 in [16] if(main::i#1!=7) goto main::@1 diff --git a/src/test/ref/millfork-benchmarks/plasma-kc.asm b/src/test/ref/millfork-benchmarks/plasma-kc.asm index 06943154b..13116900e 100644 --- a/src/test/ref/millfork-benchmarks/plasma-kc.asm +++ b/src/test/ref/millfork-benchmarks/plasma-kc.asm @@ -24,26 +24,30 @@ .label SCREEN2 = $e400 .label CHARSET = $e800 .label print_screen = $400 - .label last_time = $16 - .label print_line_cursor = $14 // The random state variable - .label rand_state = 2 - .label Ticks = 6 - .label Ticks_1 = 4 - .label print_char_cursor = $a + .label rand_state = $e + .label last_time = $18 + .label print_line_cursor = $16 + .label Ticks = 8 + .label Ticks_1 = 2 + .label print_char_cursor = $11 .segment Code __start: { + // volatile unsigned int rand_state = 1 + lda #<1 + sta.z rand_state + lda #>1 + sta.z rand_state+1 // unsigned int last_time - lda #<0 sta.z last_time sta.z last_time+1 jsr main rts } main: { - .label block = $18 - .label v = $19 - .label count = 2 + .label block = $1a + .label v = $1b + .label count = $16 // makechar() jsr makechar // start() @@ -110,18 +114,15 @@ main: { jmp __b1 } makechar: { - .label __3 = $a - .label __4 = $c - .label __7 = $14 - .label __8 = $14 - .label s = $12 - .label c = $d - .label i = $f - .label __10 = $14 - lda #<1 - sta.z rand_state - lda #>1 - sta.z rand_state+1 + .label __3 = 8 + .label __4 = $a + .label __7 = $11 + .label __8 = $11 + .label s = $14 + .label c = $b + .label i = $d + .label __10 = $11 + lda #<0 sta.z c sta.z c+1 __b1: @@ -251,17 +252,17 @@ end: { // } rts } -// void doplasma(__zp($d) char *scrn) +// void doplasma(__zp($b) char *scrn) doplasma: { .const c2A = 0 .const c2B = 0 - .label c1a = $12 - .label c1b = $c - .label ii = $f - .label c2a = $13 - .label c2b = $11 + .label c1a = $14 + .label c1b = $a + .label ii = $d + .label c2a = $15 + .label c2b = $13 .label i = $10 - .label scrn = $d + .label scrn = $b lda #0 sta.z c1b sta.z c1a @@ -364,10 +365,10 @@ doplasma: { // Information https://en.wikipedia.org/wiki/Xorshift // Source http://www.retroprogramming.com/2017/07/xorshift-pseudorandom-numbers-in-z80.html rand: { - .label __0 = 6 + .label __0 = 2 .label __1 = 4 - .label __2 = 8 - .label return = $a + .label __2 = 6 + .label return = 8 // rand_state << 7 lda.z rand_state+1 lsr @@ -417,9 +418,9 @@ rand: { rts } // Print a unsigned int as HEX -// void print_uint(__zp(4) unsigned int w) +// void print_uint(__zp(2) unsigned int w) print_uint: { - .label w = 4 + .label w = 2 // print_uchar(BYTE1(w)) ldx.z w+1 lda #> 9 - [89] rand_state#1 = rand_state#0 ^ rand::$1 - [90] rand::$2 = rand_state#1 << 8 - [91] rand_state#12 = rand_state#1 ^ rand::$2 - [92] rand::return#0 = rand_state#12 + [87] rand::$0 = rand_state << 7 + [88] rand_state = rand_state ^ rand::$0 + [89] rand::$1 = rand_state >> 9 + [90] rand_state = rand_state ^ rand::$1 + [91] rand::$2 = rand_state << 8 + [92] rand_state = rand_state ^ rand::$2 + [93] rand::return#0 = rand_state to:rand::@return rand::@return: scope:[rand] from rand - [93] return + [94] return to:@return void print_uint(unsigned int w) print_uint: scope:[print_uint] from end::@1 - [94] print_uchar::b#0 = byte1 print_uint::w#0 - [95] call print_uchar + [95] print_uchar::b#0 = byte1 print_uint::w#0 + [96] call print_uchar to:print_uint::@1 print_uint::@1: scope:[print_uint] from print_uint - [96] print_uchar::b#1 = byte0 print_uint::w#0 - [97] call print_uchar + [97] print_uchar::b#1 = byte0 print_uint::w#0 + [98] call print_uchar to:print_uint::@return print_uint::@return: scope:[print_uint] from print_uint::@1 - [98] return + [99] return to:@return void print_ln() print_ln: scope:[print_ln] from end::@2 - [99] phi() + [100] phi() to:print_ln::@1 print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 - [100] print_line_cursor#9 = phi( print_ln/print_screen#0, print_ln::@1/print_line_cursor#0 ) - [101] print_line_cursor#0 = print_line_cursor#9 + $28 - [102] if(print_line_cursor#0> 4 - [106] print_char::ch#0 = print_hextab[print_uchar::$0] - [107] call print_char + [105] print_char_cursor#37 = phi( print_uint/print_screen#0, print_uint::@1/print_char_cursor#27 ) + [105] print_uchar::b#2 = phi( print_uint/print_uchar::b#0, print_uint::@1/print_uchar::b#1 ) + [106] print_uchar::$0 = print_uchar::b#2 >> 4 + [107] print_char::ch#0 = print_hextab[print_uchar::$0] + [108] call print_char to:print_uchar::@1 print_uchar::@1: scope:[print_uchar] from print_uchar - [108] print_uchar::$2 = print_uchar::b#2 & $f - [109] print_char::ch#1 = print_hextab[print_uchar::$2] - [110] call print_char + [109] print_uchar::$2 = print_uchar::b#2 & $f + [110] print_char::ch#1 = print_hextab[print_uchar::$2] + [111] call print_char to:print_uchar::@return print_uchar::@return: scope:[print_uchar] from print_uchar::@1 - [111] return + [112] return to:@return void print_char(char ch) print_char: scope:[print_char] from print_uchar print_uchar::@1 - [112] print_char_cursor#26 = phi( print_uchar/print_char_cursor#37, print_uchar::@1/print_char_cursor#27 ) - [112] print_char::ch#2 = phi( print_uchar/print_char::ch#0, print_uchar::@1/print_char::ch#1 ) - [113] *print_char_cursor#26 = print_char::ch#2 - [114] print_char_cursor#27 = ++ print_char_cursor#26 + [113] print_char_cursor#26 = phi( print_uchar/print_char_cursor#37, print_uchar::@1/print_char_cursor#27 ) + [113] print_char::ch#2 = phi( print_uchar/print_char::ch#0, print_uchar::@1/print_char::ch#1 ) + [114] *print_char_cursor#26 = print_char::ch#2 + [115] print_char_cursor#27 = ++ print_char_cursor#26 to:print_char::@return print_char::@return: scope:[print_char] from print_char - [115] return + [116] return to:@return diff --git a/src/test/ref/millfork-benchmarks/plasma-kc.log b/src/test/ref/millfork-benchmarks/plasma-kc.log index 6498dc65b..8cbca9519 100644 --- a/src/test/ref/millfork-benchmarks/plasma-kc.log +++ b/src/test/ref/millfork-benchmarks/plasma-kc.log @@ -96,20 +96,17 @@ print_char::@return: scope:[print_char] from print_char unsigned int rand() rand: scope:[rand] from makechar::@7 - rand_state#11 = phi( makechar::@7/rand_state#19 ) - rand::$0 = rand_state#11 << 7 - rand_state#0 = rand_state#11 ^ rand::$0 - rand::$1 = rand_state#0 >> 9 - rand_state#1 = rand_state#0 ^ rand::$1 - rand::$2 = rand_state#1 << 8 - rand_state#2 = rand_state#1 ^ rand::$2 - rand::return#0 = rand_state#2 + rand::$0 = rand_state << 7 + rand_state = rand_state ^ rand::$0 + rand::$1 = rand_state >> 9 + rand_state = rand_state ^ rand::$1 + rand::$2 = rand_state << 8 + rand_state = rand_state ^ rand::$2 + rand::return#0 = rand_state to:rand::@return rand::@return: scope:[rand] from rand - rand_state#12 = phi( rand/rand_state#2 ) rand::return#3 = phi( rand/rand::return#0 ) rand::return#1 = rand::return#3 - rand_state#3 = rand_state#12 return to:@return @@ -288,7 +285,6 @@ doplasma::@return: scope:[doplasma] from doplasma::@7 void makechar() makechar: scope:[makechar] from main - rand_state#24 = phi( main/rand_state#21 ) makechar::i#0 = 0 makechar::ii#0 = 0 makechar::b#0 = 0 @@ -297,13 +293,11 @@ makechar: scope:[makechar] from main makechar::c#1 = 0 to:makechar::@1 makechar::@1: scope:[makechar] from makechar makechar::@5 - rand_state#20 = phi( makechar/rand_state#24, makechar::@5/rand_state#25 ) makechar::c#3 = phi( makechar/makechar::c#1, makechar::@5/makechar::c#2 ) makechar::$0 = makechar::c#3 < $100 if(makechar::$0) goto makechar::@2 to:makechar::@return makechar::@2: scope:[makechar] from makechar::@1 - rand_state#32 = phi( makechar::@1/rand_state#20 ) makechar::c#4 = phi( makechar::@1/makechar::c#3 ) makechar::$9 = (char)makechar::c#4 makechar::s#1 = sinetable[makechar::$9] @@ -311,7 +305,6 @@ makechar::@2: scope:[makechar] from makechar::@1 to:makechar::@3 makechar::@3: scope:[makechar] from makechar::@2 makechar::@8 makechar::s#7 = phi( makechar::@2/makechar::s#1, makechar::@8/makechar::s#9 ) - rand_state#28 = phi( makechar::@2/rand_state#32, makechar::@8/rand_state#33 ) makechar::c#7 = phi( makechar::@2/makechar::c#4, makechar::@8/makechar::c#6 ) makechar::i#3 = phi( makechar::@2/makechar::i#1, makechar::@8/makechar::i#2 ) makechar::$1 = makechar::i#3 < 8 @@ -319,20 +312,17 @@ makechar::@3: scope:[makechar] from makechar::@2 makechar::@8 to:makechar::@5 makechar::@4: scope:[makechar] from makechar::@3 makechar::s#5 = phi( makechar::@3/makechar::s#7 ) - rand_state#29 = phi( makechar::@3/rand_state#28 ) makechar::i#6 = phi( makechar::@3/makechar::i#3 ) makechar::c#9 = phi( makechar::@3/makechar::c#7 ) makechar::b#1 = 0 makechar::ii#1 = 0 to:makechar::@6 makechar::@5: scope:[makechar] from makechar::@3 - rand_state#25 = phi( makechar::@3/rand_state#28 ) makechar::c#5 = phi( makechar::@3/makechar::c#7 ) makechar::c#2 = ++ makechar::c#5 to:makechar::@1 makechar::@6: scope:[makechar] from makechar::@4 makechar::@9 makechar::s#4 = phi( makechar::@4/makechar::s#5, makechar::@9/makechar::s#6 ) - rand_state#26 = phi( makechar::@4/rand_state#29, makechar::@9/rand_state#30 ) makechar::b#5 = phi( makechar::@4/makechar::b#1, makechar::@9/makechar::b#7 ) makechar::i#5 = phi( makechar::@4/makechar::i#6, makechar::@9/makechar::i#7 ) makechar::c#8 = phi( makechar::@4/makechar::c#9, makechar::@9/makechar::c#10 ) @@ -346,7 +336,6 @@ makechar::@7: scope:[makechar] from makechar::@6 makechar::b#8 = phi( makechar::@6/makechar::b#5 ) makechar::ii#7 = phi( makechar::@6/makechar::ii#3 ) makechar::s#3 = phi( makechar::@6/makechar::s#4 ) - rand_state#19 = phi( makechar::@6/rand_state#26 ) call rand rand::return#2 = rand::return#1 to:makechar::@11 @@ -356,10 +345,8 @@ makechar::@11: scope:[makechar] from makechar::@7 makechar::b#6 = phi( makechar::@7/makechar::b#8 ) makechar::ii#6 = phi( makechar::@7/makechar::ii#7 ) makechar::s#2 = phi( makechar::@7/makechar::s#3 ) - rand_state#13 = phi( makechar::@7/rand_state#3 ) rand::return#4 = phi( makechar::@7/rand::return#2 ) makechar::$3 = rand::return#4 - rand_state#4 = rand_state#13 makechar::$4 = makechar::$3 & $ff makechar::$5 = makechar::$4 > makechar::s#2 makechar::$6 = ! makechar::$5 @@ -367,7 +354,6 @@ makechar::@11: scope:[makechar] from makechar::@7 to:makechar::@10 makechar::@8: scope:[makechar] from makechar::@6 makechar::s#9 = phi( makechar::@6/makechar::s#4 ) - rand_state#33 = phi( makechar::@6/rand_state#26 ) makechar::b#3 = phi( makechar::@6/makechar::b#5 ) makechar::i#4 = phi( makechar::@6/makechar::i#5 ) makechar::c#6 = phi( makechar::@6/makechar::c#8 ) @@ -378,7 +364,6 @@ makechar::@8: scope:[makechar] from makechar::@6 to:makechar::@3 makechar::@9: scope:[makechar] from makechar::@10 makechar::@11 makechar::s#6 = phi( makechar::@10/makechar::s#8, makechar::@11/makechar::s#2 ) - rand_state#30 = phi( makechar::@10/rand_state#34, makechar::@11/rand_state#4 ) makechar::b#7 = phi( makechar::@10/makechar::b#2, makechar::@11/makechar::b#6 ) makechar::i#7 = phi( makechar::@10/makechar::i#8, makechar::@11/makechar::i#9 ) makechar::c#10 = phi( makechar::@10/makechar::c#11, makechar::@11/makechar::c#12 ) @@ -387,7 +372,6 @@ makechar::@9: scope:[makechar] from makechar::@10 makechar::@11 to:makechar::@6 makechar::@10: scope:[makechar] from makechar::@11 makechar::s#8 = phi( makechar::@11/makechar::s#2 ) - rand_state#34 = phi( makechar::@11/rand_state#4 ) makechar::i#8 = phi( makechar::@11/makechar::i#9 ) makechar::c#11 = phi( makechar::@11/makechar::c#12 ) makechar::ii#5 = phi( makechar::@11/makechar::ii#6 ) @@ -395,8 +379,6 @@ makechar::@10: scope:[makechar] from makechar::@11 makechar::b#2 = makechar::b#4 | bittab[makechar::ii#5] to:makechar::@9 makechar::@return: scope:[makechar] from makechar::@1 - rand_state#14 = phi( makechar::@1/rand_state#20 ) - rand_state#5 = rand_state#14 return to:@return @@ -405,7 +387,6 @@ main: scope:[main] from __start::@1 print_line_cursor#29 = phi( __start::@1/print_line_cursor#21 ) print_char_cursor#47 = phi( __start::@1/print_char_cursor#40 ) Ticks#23 = phi( __start::@1/Ticks#16 ) - rand_state#21 = phi( __start::@1/rand_state#23 ) main::v#0 = 0 main::block#0 = 0 main::count#0 = $1f4 @@ -416,12 +397,9 @@ main::@4: scope:[main] from main print_char_cursor#45 = phi( main/print_char_cursor#47 ) Ticks#21 = phi( main/Ticks#23 ) main::count#6 = phi( main/main::count#0 ) - rand_state#15 = phi( main/rand_state#5 ) - rand_state#6 = rand_state#15 call start to:main::@5 main::@5: scope:[main] from main::@4 - rand_state#35 = phi( main::@4/rand_state#6 ) print_line_cursor#25 = phi( main::@4/print_line_cursor#27 ) print_char_cursor#43 = phi( main::@4/print_char_cursor#45 ) Ticks#19 = phi( main::@4/Ticks#21 ) @@ -435,7 +413,6 @@ main::@5: scope:[main] from main::@4 main::v#1 = *VICII_MEMORY to:main::@1 main::@1: scope:[main] from main::@5 main::@7 - rand_state#31 = phi( main::@5/rand_state#35, main::@7/rand_state#36 ) print_line_cursor#23 = phi( main::@5/print_line_cursor#25, main::@7/print_line_cursor#26 ) print_char_cursor#42 = phi( main::@5/print_char_cursor#43, main::@7/print_char_cursor#44 ) Ticks#18 = phi( main::@5/Ticks#19, main::@7/Ticks#20 ) @@ -446,7 +423,6 @@ main::@1: scope:[main] from main::@5 main::@7 if(main::$6) goto main::@2 to:main::@3 main::@2: scope:[main] from main::@1 - rand_state#38 = phi( main::@1/rand_state#31 ) print_line_cursor#30 = phi( main::@1/print_line_cursor#23 ) print_char_cursor#48 = phi( main::@1/print_char_cursor#42 ) Ticks#24 = phi( main::@1/Ticks#18 ) @@ -457,7 +433,6 @@ main::@2: scope:[main] from main::@1 call doplasma to:main::@6 main::@6: scope:[main] from main::@2 - rand_state#37 = phi( main::@2/rand_state#38 ) print_line_cursor#28 = phi( main::@2/print_line_cursor#30 ) print_char_cursor#46 = phi( main::@2/print_char_cursor#48 ) Ticks#22 = phi( main::@2/Ticks#24 ) @@ -469,7 +444,6 @@ main::@6: scope:[main] from main::@2 call doplasma to:main::@7 main::@7: scope:[main] from main::@6 - rand_state#36 = phi( main::@6/rand_state#37 ) print_line_cursor#26 = phi( main::@6/print_line_cursor#28 ) print_char_cursor#44 = phi( main::@6/print_char_cursor#46 ) Ticks#20 = phi( main::@6/Ticks#22 ) @@ -480,7 +454,6 @@ main::@7: scope:[main] from main::@6 main::count#1 = -- main::count#3 to:main::@1 main::@3: scope:[main] from main::@1 - rand_state#27 = phi( main::@1/rand_state#31 ) print_line_cursor#20 = phi( main::@1/print_line_cursor#23 ) print_char_cursor#39 = phi( main::@1/print_char_cursor#42 ) Ticks#15 = phi( main::@1/Ticks#18 ) @@ -491,7 +464,6 @@ main::@3: scope:[main] from main::@1 call end to:main::@8 main::@8: scope:[main] from main::@3 - rand_state#22 = phi( main::@3/rand_state#27 ) print_line_cursor#14 = phi( main::@3/print_line_cursor#3 ) print_char_cursor#31 = phi( main::@3/print_char_cursor#12 ) Ticks#10 = phi( main::@3/Ticks#2 ) @@ -504,10 +476,8 @@ main::@return: scope:[main] from main::@8 print_line_cursor#15 = phi( main::@8/print_line_cursor#4 ) print_char_cursor#32 = phi( main::@8/print_char_cursor#13 ) Ticks#11 = phi( main::@8/Ticks#3 ) - rand_state#16 = phi( main::@8/rand_state#22 ) main::return#3 = phi( main::@8/main::return#0 ) main::return#1 = main::return#3 - rand_state#7 = rand_state#16 Ticks#4 = Ticks#11 print_char_cursor#14 = print_char_cursor#32 print_line_cursor#5 = print_line_cursor#15 @@ -518,7 +488,7 @@ void __start() __start: scope:[__start] from to:__start::__init1 __start::__init1: scope:[__start] from __start - rand_state#8 = 1 + rand_state = 1 print_screen#0 = (char *)$400 print_line_cursor#6 = print_screen#0 print_char_cursor#15 = print_line_cursor#6 @@ -530,7 +500,6 @@ __start::@1: scope:[__start] from __start::__init1 print_line_cursor#21 = phi( __start::__init1/print_line_cursor#6 ) print_char_cursor#40 = phi( __start::__init1/print_char_cursor#15 ) Ticks#16 = phi( __start::__init1/Ticks#5 ) - rand_state#23 = phi( __start::__init1/rand_state#8 ) call main main::return#2 = main::return#1 to:__start::@2 @@ -539,8 +508,6 @@ __start::@2: scope:[__start] from __start::@1 print_line_cursor#16 = phi( __start::@1/print_line_cursor#5 ) print_char_cursor#33 = phi( __start::@1/print_char_cursor#14 ) Ticks#12 = phi( __start::@1/Ticks#4 ) - rand_state#17 = phi( __start::@1/rand_state#7 ) - rand_state#9 = rand_state#17 Ticks#6 = Ticks#12 print_char_cursor#16 = print_char_cursor#33 print_line_cursor#7 = print_line_cursor#16 @@ -550,8 +517,6 @@ __start::@return: scope:[__start] from __start::@2 print_char_cursor#34 = phi( __start::@2/print_char_cursor#16 ) print_line_cursor#17 = phi( __start::@2/print_line_cursor#7 ) print_screen#2 = phi( __start::@2/print_screen#3 ) - rand_state#18 = phi( __start::@2/rand_state#9 ) - rand_state#10 = rand_state#18 print_screen#1 = print_screen#2 print_line_cursor#8 = print_line_cursor#17 print_char_cursor#17 = print_char_cursor#34 @@ -934,46 +899,7 @@ unsigned int rand::return#1 unsigned int rand::return#2 unsigned int rand::return#3 unsigned int rand::return#4 -unsigned int rand_state -unsigned int rand_state#0 -unsigned int rand_state#1 -unsigned int rand_state#10 -unsigned int rand_state#11 -unsigned int rand_state#12 -unsigned int rand_state#13 -unsigned int rand_state#14 -unsigned int rand_state#15 -unsigned int rand_state#16 -unsigned int rand_state#17 -unsigned int rand_state#18 -unsigned int rand_state#19 -unsigned int rand_state#2 -unsigned int rand_state#20 -unsigned int rand_state#21 -unsigned int rand_state#22 -unsigned int rand_state#23 -unsigned int rand_state#24 -unsigned int rand_state#25 -unsigned int rand_state#26 -unsigned int rand_state#27 -unsigned int rand_state#28 -unsigned int rand_state#29 -unsigned int rand_state#3 -unsigned int rand_state#30 -unsigned int rand_state#31 -unsigned int rand_state#32 -unsigned int rand_state#33 -unsigned int rand_state#34 -unsigned int rand_state#35 -unsigned int rand_state#36 -unsigned int rand_state#37 -unsigned int rand_state#38 -unsigned int rand_state#4 -unsigned int rand_state#5 -unsigned int rand_state#6 -unsigned int rand_state#7 -unsigned int rand_state#8 -unsigned int rand_state#9 +__loadstore volatile unsigned int rand_state __constant const char sinetable[$100] = { $80, $7d, $7a, $77, $74, $70, $6d, $6a, $67, $64, $61, $5e, $5b, $58, $55, $52, $4f, $4d, $4a, $47, $44, $41, $3f, $3c, $39, $37, $34, $32, $2f, $2d, $2b, $28, $26, $24, $22, $20, $1e, $1c, $1a, $18, $16, $15, $13, $11, $10, $f, $d, $c, $b, $a, 8, 7, 6, 6, 5, 4, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 8, $a, $b, $c, $d, $f, $10, $11, $13, $15, $16, $18, $1a, $1c, $1e, $20, $22, $24, $26, $28, $2b, $2d, $2f, $32, $34, $37, $39, $3c, $3f, $41, $44, $47, $4a, $4d, $4f, $52, $55, $58, $5b, $5e, $61, $64, $67, $6a, $6d, $70, $74, $77, $7a, $7d, $80, $83, $86, $89, $8c, $90, $93, $96, $99, $9c, $9f, $a2, $a5, $a8, $ab, $ae, $b1, $b3, $b6, $b9, $bc, $bf, $c1, $c4, $c7, $c9, $cc, $ce, $d1, $d3, $d5, $d8, $da, $dc, $de, $e0, $e2, $e4, $e6, $e8, $ea, $eb, $ed, $ef, $f0, $f1, $f3, $f4, $f5, $f6, $f8, $f9, $fa, $fa, $fb, $fc, $fd, $fd, $fe, $fe, $fe, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $fe, $fe, $fe, $fd, $fd, $fc, $fb, $fa, $fa, $f9, $f8, $f6, $f5, $f4, $f3, $f1, $f0, $ef, $ed, $eb, $ea, $e8, $e6, $e4, $e2, $e0, $de, $dc, $da, $d8, $d5, $d3, $d1, $ce, $cc, $c9, $c7, $c4, $c1, $bf, $bc, $b9, $b6, $b3, $b1, $ae, $ab, $a8, $a5, $a2, $9f, $9c, $99, $96, $93, $90, $8c, $89, $86, $83 } void start() __constant unsigned int * const start::LAST_TIME = &last_time @@ -992,9 +918,9 @@ Adding number conversion cast (unumber) $28 in print_ln::$0 = print_line_cursor# Adding number conversion cast (unumber) 4 in print_uchar::$0 = print_uchar::b#2 >> 4 Adding number conversion cast (unumber) $f in print_uchar::$2 = print_uchar::b#3 & $f Adding number conversion cast (unumber) print_uchar::$2 in print_uchar::$2 = print_uchar::b#3 & (unumber)$f -Adding number conversion cast (unumber) 7 in rand::$0 = rand_state#11 << 7 -Adding number conversion cast (unumber) 9 in rand::$1 = rand_state#0 >> 9 -Adding number conversion cast (unumber) 8 in rand::$2 = rand_state#1 << 8 +Adding number conversion cast (unumber) 7 in rand::$0 = rand_state << 7 +Adding number conversion cast (unumber) 9 in rand::$1 = rand_state >> 9 +Adding number conversion cast (unumber) 8 in rand::$2 = rand_state << 8 Adding number conversion cast (unumber) 0 in doplasma::ii#1 = 0 Adding number conversion cast (unumber) $19 in doplasma::$0 = doplasma::ii#3 < $19 Adding number conversion cast (unumber) 4 in doplasma::c1a#2 = doplasma::c1a#3 + 4 @@ -1143,7 +1069,7 @@ Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to char in print_uchar::$2 = print_uchar::b#3 & $f Inferred type updated to char in makechar::$4 = makechar::$3 & $ff Inferred type updated to char in main::$2 = main::block#1 & $fc -Inversing boolean not [172] makechar::$6 = makechar::$4 <= makechar::s#2 from [171] makechar::$5 = makechar::$4 > makechar::s#2 +Inversing boolean not [168] makechar::$6 = makechar::$4 <= makechar::s#2 from [167] makechar::$5 = makechar::$4 > makechar::s#2 Successful SSA optimization Pass2UnaryNotSimplification Alias print_line_cursor#0 = print_ln::$0 print_line_cursor#10 print_char_cursor#0 print_line_cursor#11 print_char_cursor#19 print_line_cursor#1 print_char_cursor#1 Alias print_uchar::b#0 = print_uint::$0 @@ -1156,7 +1082,6 @@ Alias print_char_cursor#23 = print_char_cursor#5 Alias print_char_cursor#24 = print_char_cursor#6 print_char_cursor#25 print_char_cursor#7 Alias print_char_cursor#27 = print_char_cursor#8 print_char_cursor#9 Alias rand::return#0 = rand::return#3 rand::return#1 -Alias rand_state#12 = rand_state#2 rand_state#3 Alias Ticks#0 = Ticks#8 Alias print_char_cursor#38 = print_char_cursor#41 Alias print_line_cursor#19 = print_line_cursor#22 print_line_cursor#24 @@ -1186,24 +1111,19 @@ Alias doplasma::j#3 = doplasma::j#4 Alias doplasma::jj#4 = doplasma::jj#6 doplasma::jj#5 Alias doplasma::scrn#3 = doplasma::scrn#5 doplasma::scrn#4 Alias makechar::c#3 = makechar::c#4 -Alias rand_state#14 = rand_state#32 rand_state#20 rand_state#5 Alias makechar::c#5 = makechar::c#9 makechar::c#7 Alias makechar::i#3 = makechar::i#6 -Alias rand_state#25 = rand_state#29 rand_state#28 Alias makechar::s#5 = makechar::s#7 -Alias rand_state#19 = rand_state#26 rand_state#33 Alias makechar::s#2 = makechar::s#3 makechar::s#4 makechar::s#9 makechar::s#8 Alias makechar::ii#3 = makechar::ii#7 makechar::ii#6 makechar::ii#5 Alias makechar::b#3 = makechar::b#8 makechar::b#5 makechar::b#6 makechar::b#4 Alias makechar::c#11 = makechar::c#13 makechar::c#8 makechar::c#12 makechar::c#6 Alias makechar::i#10 = makechar::i#5 makechar::i#9 makechar::i#4 makechar::i#8 Alias rand::return#2 = rand::return#4 -Alias rand_state#13 = rand_state#4 rand_state#34 Alias main::count#0 = main::count#6 main::count#4 Alias Ticks#19 = Ticks#21 Ticks#23 Alias print_char_cursor#43 = print_char_cursor#45 print_char_cursor#47 Alias print_line_cursor#25 = print_line_cursor#27 print_line_cursor#29 -Alias rand_state#15 = rand_state#6 rand_state#35 Alias main::tmp#1 = main::$2 Alias main::count#2 = main::count#7 main::count#5 main::count#3 Alias main::v#2 = main::v#6 main::v#3 main::v#5 main::v#4 @@ -1211,15 +1131,12 @@ Alias main::block#2 = main::block#6 main::block#3 main::block#5 main::block#4 Alias Ticks#15 = Ticks#24 Ticks#18 Ticks#22 Ticks#20 Alias print_char_cursor#39 = print_char_cursor#48 print_char_cursor#42 print_char_cursor#46 print_char_cursor#44 Alias print_line_cursor#20 = print_line_cursor#30 print_line_cursor#23 print_line_cursor#28 print_line_cursor#26 -Alias rand_state#16 = rand_state#38 rand_state#31 rand_state#37 rand_state#36 rand_state#27 rand_state#22 rand_state#7 Alias Ticks#10 = Ticks#3 Ticks#11 Ticks#4 Alias print_char_cursor#13 = print_char_cursor#31 print_char_cursor#32 print_char_cursor#14 Alias print_line_cursor#14 = print_line_cursor#4 print_line_cursor#15 print_line_cursor#5 Alias main::return#0 = main::return#3 main::return#1 Alias print_screen#0 = print_line_cursor#6 print_char_cursor#15 print_char_cursor#40 print_line_cursor#21 print_screen#4 print_screen#3 print_screen#2 print_screen#1 -Alias rand_state#23 = rand_state#8 Alias Ticks#16 = Ticks#5 -Alias rand_state#10 = rand_state#9 rand_state#17 rand_state#18 Alias Ticks#12 = Ticks#6 Ticks#13 Ticks#7 Alias print_char_cursor#16 = print_char_cursor#33 print_char_cursor#34 print_char_cursor#17 Alias print_line_cursor#16 = print_line_cursor#7 print_line_cursor#17 print_line_cursor#8 @@ -1227,7 +1144,6 @@ Successful SSA optimization Pass2AliasElimination Alias makechar::ii#3 = makechar::ii#4 Alias makechar::c#10 = makechar::c#11 Alias makechar::i#10 = makechar::i#7 -Alias rand_state#13 = rand_state#30 Alias makechar::s#2 = makechar::s#6 Successful SSA optimization Pass2AliasElimination Identical Phi Values print_line_cursor#18 print_line_cursor#19 @@ -1239,7 +1155,6 @@ Identical Phi Values print_char_cursor#2 print_char_cursor#24 Identical Phi Values print_char_cursor#21 print_char_cursor#24 Identical Phi Values print_char_cursor#23 print_char_cursor#27 Identical Phi Values print_char_cursor#24 print_char_cursor#27 -Identical Phi Values rand_state#11 rand_state#19 Identical Phi Values print_char_cursor#38 print_char_cursor#39 Identical Phi Values print_line_cursor#19 print_line_cursor#20 Identical Phi Values print_char_cursor#10 print_char_cursor#21 @@ -1255,26 +1170,20 @@ Identical Phi Values doplasma::c2B#3 doplasma::c2B#2 Identical Phi Values doplasma::scrn#11 doplasma::scrn#10 Identical Phi Values doplasma::jj#4 doplasma::jj#3 Identical Phi Values doplasma::scrn#3 doplasma::scrn#6 -Identical Phi Values rand_state#24 rand_state#21 Identical Phi Values makechar::c#10 makechar::c#5 Identical Phi Values makechar::i#10 makechar::i#3 Identical Phi Values makechar::s#2 makechar::s#5 -Identical Phi Values rand_state#13 rand_state#12 -Identical Phi Values rand_state#21 rand_state#23 Identical Phi Values Ticks#19 Ticks#16 Identical Phi Values print_char_cursor#43 print_screen#0 Identical Phi Values print_line_cursor#25 print_screen#0 -Identical Phi Values rand_state#15 rand_state#14 Identical Phi Values main::v#2 main::v#1 Identical Phi Values main::block#2 main::block#1 Identical Phi Values Ticks#15 Ticks#19 Identical Phi Values print_char_cursor#39 print_char_cursor#43 Identical Phi Values print_line_cursor#20 print_line_cursor#25 -Identical Phi Values rand_state#16 rand_state#15 Identical Phi Values Ticks#10 Ticks#1 Identical Phi Values print_char_cursor#13 print_char_cursor#11 Identical Phi Values print_line_cursor#14 print_line_cursor#12 -Identical Phi Values rand_state#10 rand_state#16 Identical Phi Values Ticks#12 Ticks#10 Identical Phi Values print_char_cursor#16 print_char_cursor#13 Identical Phi Values print_line_cursor#16 print_line_cursor#14 @@ -1283,15 +1192,15 @@ Identical Phi Values makechar::c#5 makechar::c#3 Identical Phi Values makechar::s#5 makechar::s#1 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition print_ln::$1 [4] if(print_line_cursor#0>$e^3 in [146] main::tmp#2 = main::tmp#1 | (char)(unsigned int)SCREEN1>>$e^3 +Simplifying constant evaluating to zero (char)(unsigned int)SCREEN1>>$e^3 in [142] main::tmp#2 = main::tmp#1 | (char)(unsigned int)SCREEN1>>$e^3 Successful SSA optimization PassNSimplifyConstantZero -Simplifying expression containing zero 3 in [72] doplasma::c1A#1 = doplasma::c1a#1 + 3 -Simplifying expression containing zero 5 in [73] doplasma::c1B#1 = doplasma::c1b#1 - 5 -Simplifying expression containing zero 2 in [83] doplasma::c2A#1 = doplasma::c2A#0 + 2 -Simplifying expression containing zero 3 in [84] doplasma::c2B#1 = doplasma::c2B#0 - 3 -Simplifying expression containing zero (char *)CIA2 in [143] main::block#1 = *((char *)CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Simplifying expression containing zero main::tmp#1 in [146] main::tmp#2 = main::tmp#1 | 0 -Simplifying expression containing zero (char *)CIA2 in [147] *((char *)CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A) = main::tmp#2 -Simplifying expression containing zero (char *)CIA2 in [160] *((char *)CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A) = main::block#1 +Simplifying expression containing zero 3 in [71] doplasma::c1A#1 = doplasma::c1a#1 + 3 +Simplifying expression containing zero 5 in [72] doplasma::c1B#1 = doplasma::c1b#1 - 5 +Simplifying expression containing zero 2 in [82] doplasma::c2A#1 = doplasma::c2A#0 + 2 +Simplifying expression containing zero 3 in [83] doplasma::c2B#1 = doplasma::c2B#0 - 3 +Simplifying expression containing zero (char *)CIA2 in [139] main::block#1 = *((char *)CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A) +Simplifying expression containing zero main::tmp#1 in [142] main::tmp#2 = main::tmp#1 | 0 +Simplifying expression containing zero (char *)CIA2 in [143] *((char *)CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A) = main::tmp#2 +Simplifying expression containing zero (char *)CIA2 in [156] *((char *)CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A) = main::block#1 Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused variable doplasma::c1A#1 and assignment [47] doplasma::c1A#1 = 3 Eliminating unused variable doplasma::c1B#1 and assignment [48] doplasma::c1B#1 = 5 @@ -1388,7 +1296,6 @@ Inlining constant with var siblings makechar::i#1 Inlining constant with var siblings makechar::b#1 Inlining constant with var siblings makechar::ii#1 Inlining constant with var siblings main::count#0 -Inlining constant with var siblings rand_state#23 Constant inlined makechar::c#1 = 0 Constant inlined makechar::b#1 = 0 Constant inlined doplasma::i#1 = 0 @@ -1402,7 +1309,6 @@ Constant inlined doplasma::scrn#1 = SCREEN1 Constant inlined doplasma::c1a#1 = 0 Constant inlined doplasma::c1b#1 = 0 Constant inlined makechar::i#1 = 0 -Constant inlined rand_state#23 = 1 Successful SSA optimization Pass2ConstantInlining Finalized unsigned number type (char) 2 Finalized unsigned number type (char) 8 @@ -1424,6 +1330,7 @@ Adding NOP phi() at start of main::@4 Adding NOP phi() at start of main::@8 Adding NOP phi() at start of main::@2 Adding NOP phi() at start of makechar +Adding NOP phi() at start of makechar::@4 Adding NOP phi() at start of makechar::@7 Adding NOP phi() at start of end::@2 Adding NOP phi() at start of end::@3 @@ -1434,45 +1341,40 @@ Adding NOP phi() at start of print_ln Adding NOP phi() at start of print_ln::@2 Adding NOP phi() at start of print_uchar::@2 CALL GRAPH -Calls in [__start] to main:3 -Calls in [main] to makechar:7 start:9 end:18 doplasma:22 doplasma:24 -Calls in [makechar] to rand:51 -Calls in [end] to start:67 print_uint:71 print_ln:73 -Calls in [print_uint] to print_uchar:123 print_uchar:127 -Calls in [print_uchar] to print_char:142 print_char:147 +Calls in [__start] to main:4 +Calls in [main] to makechar:8 start:10 end:19 doplasma:23 doplasma:25 +Calls in [makechar] to rand:49 +Calls in [end] to start:64 print_uint:68 print_ln:70 +Calls in [print_uint] to print_uchar:120 print_uchar:124 +Calls in [print_uchar] to print_char:139 print_char:144 -Created 24 initial phi equivalence classes -Coalesced [27] main::count#8 = main::count#1 -Coalesced [34] rand_state#40 = rand_state#14 +Created 21 initial phi equivalence classes +Coalesced [28] main::count#8 = main::count#1 Coalesced [38] makechar::c#14 = makechar::c#2 -Coalesced (already) [39] rand_state#39 = rand_state#25 -Coalesced [40] rand_state#42 = rand_state#25 -Coalesced [48] makechar::i#11 = makechar::i#2 -Coalesced (already) [49] rand_state#41 = rand_state#19 -Coalesced [57] makechar::b#10 = makechar::b#2 -Coalesced [60] makechar::ii#8 = makechar::ii#2 -Coalesced [61] makechar::b#9 = makechar::b#7 -Coalesced [62] rand_state#43 = rand_state#12 -Coalesced (already) [63] makechar::b#11 = makechar::b#3 -Coalesced [82] doplasma::scrn#16 = doplasma::scrn#13 -Coalesced [91] doplasma::jj#8 = doplasma::jj#2 -Coalesced [92] doplasma::scrn#15 = doplasma::scrn#0 -Coalesced [96] doplasma::j#5 = doplasma::j#2 -Coalesced [102] doplasma::i#5 = doplasma::i#2 -Coalesced [103] doplasma::c2a#5 = doplasma::c2a#2 -Coalesced [104] doplasma::c2b#5 = doplasma::c2b#2 -Coalesced [110] doplasma::ii#5 = doplasma::ii#2 -Coalesced [111] doplasma::c1a#5 = doplasma::c1a#2 -Coalesced [112] doplasma::c1b#5 = doplasma::c1b#2 -Coalesced [122] print_uchar::b#4 = print_uchar::b#0 -Coalesced [125] print_uchar::b#5 = print_uchar::b#1 -Coalesced [126] print_char_cursor#49 = print_char_cursor#27 -Coalesced [136] print_line_cursor#31 = print_line_cursor#0 -Coalesced [140] print_char::ch#3 = print_char::ch#0 -Coalesced [141] print_char_cursor#50 = print_char_cursor#37 -Coalesced [145] print_char::ch#4 = print_char::ch#1 -Coalesced (already) [146] print_char_cursor#51 = print_char_cursor#27 -Coalesced down to 19 phi equivalence classes +Coalesced [47] makechar::i#11 = makechar::i#2 +Coalesced [55] makechar::b#10 = makechar::b#2 +Coalesced [58] makechar::ii#8 = makechar::ii#2 +Coalesced [59] makechar::b#9 = makechar::b#7 +Coalesced (already) [60] makechar::b#11 = makechar::b#3 +Coalesced [79] doplasma::scrn#16 = doplasma::scrn#13 +Coalesced [88] doplasma::jj#8 = doplasma::jj#2 +Coalesced [89] doplasma::scrn#15 = doplasma::scrn#0 +Coalesced [93] doplasma::j#5 = doplasma::j#2 +Coalesced [99] doplasma::i#5 = doplasma::i#2 +Coalesced [100] doplasma::c2a#5 = doplasma::c2a#2 +Coalesced [101] doplasma::c2b#5 = doplasma::c2b#2 +Coalesced [107] doplasma::ii#5 = doplasma::ii#2 +Coalesced [108] doplasma::c1a#5 = doplasma::c1a#2 +Coalesced [109] doplasma::c1b#5 = doplasma::c1b#2 +Coalesced [119] print_uchar::b#4 = print_uchar::b#0 +Coalesced [122] print_uchar::b#5 = print_uchar::b#1 +Coalesced [123] print_char_cursor#49 = print_char_cursor#27 +Coalesced [133] print_line_cursor#31 = print_line_cursor#0 +Coalesced [137] print_char::ch#3 = print_char::ch#0 +Coalesced [138] print_char_cursor#50 = print_char_cursor#37 +Coalesced [142] print_char::ch#4 = print_char::ch#1 +Coalesced (already) [143] print_char_cursor#51 = print_char_cursor#27 +Coalesced down to 18 phi equivalence classes Culled Empty Block label __start::@2 Culled Empty Block label main::@8 Culled Empty Block label makechar::@4 @@ -1515,109 +1417,107 @@ __start: scope:[__start] from [0] phi() to:__start::__init1 __start::__init1: scope:[__start] from __start - [1] last_time = 0 + [1] rand_state = 1 + [2] last_time = 0 to:__start::@1 __start::@1: scope:[__start] from __start::__init1 - [2] phi() - [3] call main + [3] phi() + [4] call main to:__start::@return __start::@return: scope:[__start] from __start::@1 - [4] return + [5] return to:@return int main() main: scope:[main] from __start::@1 - [5] phi() - [6] call makechar + [6] phi() + [7] call makechar to:main::@4 main::@4: scope:[main] from main - [7] phi() - [8] call start + [8] phi() + [9] call start to:main::@5 main::@5: scope:[main] from main::@4 - [9] main::block#1 = *((char *)CIA2) - [10] main::tmp#1 = main::block#1 & $fc - [11] *((char *)CIA2) = main::tmp#1 - [12] main::v#1 = *VICII_MEMORY + [10] main::block#1 = *((char *)CIA2) + [11] main::tmp#1 = main::block#1 & $fc + [12] *((char *)CIA2) = main::tmp#1 + [13] main::v#1 = *VICII_MEMORY to:main::@1 main::@1: scope:[main] from main::@5 main::@7 - [13] main::count#2 = phi( main::@5/$1f4, main::@7/main::count#1 ) - [14] if(0!=main::count#2) goto main::@2 + [14] main::count#2 = phi( main::@5/$1f4, main::@7/main::count#1 ) + [15] if(0!=main::count#2) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@1 - [15] *VICII_MEMORY = main::v#1 - [16] *((char *)CIA2) = main::block#1 - [17] call end + [16] *VICII_MEMORY = main::v#1 + [17] *((char *)CIA2) = main::block#1 + [18] call end to:main::@return main::@return: scope:[main] from main::@3 - [18] return + [19] return to:@return main::@2: scope:[main] from main::@1 - [19] phi() - [20] call doplasma + [20] phi() + [21] call doplasma to:main::@6 main::@6: scope:[main] from main::@2 - [21] *VICII_MEMORY = PAGE1 - [22] call doplasma + [22] *VICII_MEMORY = PAGE1 + [23] call doplasma to:main::@7 main::@7: scope:[main] from main::@6 - [23] *VICII_MEMORY = PAGE2 - [24] main::count#1 = -- main::count#2 + [24] *VICII_MEMORY = PAGE2 + [25] main::count#1 = -- main::count#2 to:main::@1 void makechar() makechar: scope:[makechar] from main - [25] phi() + [26] phi() to:makechar::@1 makechar::@1: scope:[makechar] from makechar makechar::@4 - [26] rand_state#14 = phi( makechar/1, makechar::@4/rand_state#25 ) - [26] makechar::c#3 = phi( makechar/0, makechar::@4/makechar::c#2 ) - [27] if(makechar::c#3<$100) goto makechar::@2 + [27] makechar::c#3 = phi( makechar/0, makechar::@4/makechar::c#2 ) + [28] if(makechar::c#3<$100) goto makechar::@2 to:makechar::@return makechar::@return: scope:[makechar] from makechar::@1 - [28] return + [29] return to:@return makechar::@2: scope:[makechar] from makechar::@1 - [29] makechar::$9 = (char)makechar::c#3 - [30] makechar::s#1 = sinetable[makechar::$9] + [30] makechar::$9 = (char)makechar::c#3 + [31] makechar::s#1 = sinetable[makechar::$9] to:makechar::@3 makechar::@3: scope:[makechar] from makechar::@2 makechar::@7 - [31] rand_state#25 = phi( makechar::@2/rand_state#14, makechar::@7/rand_state#19 ) - [31] makechar::i#3 = phi( makechar::@2/0, makechar::@7/makechar::i#2 ) - [32] if(makechar::i#3<8) goto makechar::@5 + [32] makechar::i#3 = phi( makechar::@2/0, makechar::@7/makechar::i#2 ) + [33] if(makechar::i#3<8) goto makechar::@5 to:makechar::@4 makechar::@4: scope:[makechar] from makechar::@3 - [33] makechar::c#2 = ++ makechar::c#3 + [34] makechar::c#2 = ++ makechar::c#3 to:makechar::@1 makechar::@5: scope:[makechar] from makechar::@3 makechar::@8 - [34] rand_state#19 = phi( makechar::@3/rand_state#25, makechar::@8/rand_state#12 ) - [34] makechar::b#3 = phi( makechar::@3/0, makechar::@8/makechar::b#7 ) - [34] makechar::ii#3 = phi( makechar::@3/0, makechar::@8/makechar::ii#2 ) - [35] if(makechar::ii#3<8) goto makechar::@6 + [35] makechar::b#3 = phi( makechar::@3/0, makechar::@8/makechar::b#7 ) + [35] makechar::ii#3 = phi( makechar::@3/0, makechar::@8/makechar::ii#2 ) + [36] if(makechar::ii#3<8) goto makechar::@6 to:makechar::@7 makechar::@7: scope:[makechar] from makechar::@5 - [36] makechar::$7 = makechar::c#3 << 3 - [37] makechar::$8 = makechar::$7 + makechar::i#3 - [38] makechar::$10 = CHARSET + makechar::$8 - [39] *makechar::$10 = makechar::b#3 - [40] makechar::i#2 = ++ makechar::i#3 + [37] makechar::$7 = makechar::c#3 << 3 + [38] makechar::$8 = makechar::$7 + makechar::i#3 + [39] makechar::$10 = CHARSET + makechar::$8 + [40] *makechar::$10 = makechar::b#3 + [41] makechar::i#2 = ++ makechar::i#3 to:makechar::@3 makechar::@6: scope:[makechar] from makechar::@5 - [41] phi() - [42] call rand - [43] rand::return#2 = rand::return#0 + [42] phi() + [43] call rand + [44] rand::return#2 = rand::return#0 to:makechar::@10 makechar::@10: scope:[makechar] from makechar::@6 - [44] makechar::$3 = rand::return#2 - [45] makechar::$4 = makechar::$3 & $ff - [46] if(makechar::$4<=makechar::s#1) goto makechar::@8 + [45] makechar::$3 = rand::return#2 + [46] makechar::$4 = makechar::$3 & $ff + [47] if(makechar::$4<=makechar::s#1) goto makechar::@8 to:makechar::@9 makechar::@9: scope:[makechar] from makechar::@10 - [47] makechar::b#2 = makechar::b#3 | bittab[makechar::ii#3] + [48] makechar::b#2 = makechar::b#3 | bittab[makechar::ii#3] to:makechar::@8 makechar::@8: scope:[makechar] from makechar::@10 makechar::@9 - [48] makechar::b#7 = phi( makechar::@9/makechar::b#2, makechar::@10/makechar::b#3 ) - [49] makechar::ii#2 = ++ makechar::ii#3 + [49] makechar::b#7 = phi( makechar::@9/makechar::b#2, makechar::@10/makechar::b#3 ) + [50] makechar::ii#2 = ++ makechar::ii#3 to:makechar::@5 void start() @@ -1625,146 +1525,146 @@ start: scope:[start] from end main::@4 asm { jsr$FFDE staLAST_TIME stxLAST_TIME+1 } to:start::@return start::@return: scope:[start] from start - [51] return + [52] return to:@return void end() end: scope:[end] from main::@3 - [52] Ticks#0 = last_time - [53] call start + [53] Ticks#0 = last_time + [54] call start to:end::@1 end::@1: scope:[end] from end - [54] last_time = last_time - Ticks#0 - [55] Ticks#1 = last_time - [56] print_uint::w#0 = Ticks#1 - [57] call print_uint + [55] last_time = last_time - Ticks#0 + [56] Ticks#1 = last_time + [57] print_uint::w#0 = Ticks#1 + [58] call print_uint to:end::@2 end::@2: scope:[end] from end::@1 - [58] phi() - [59] call print_ln + [59] phi() + [60] call print_ln to:end::@return end::@return: scope:[end] from end::@2 - [60] return + [61] return to:@return void doplasma(char *scrn) doplasma: scope:[doplasma] from main::@2 main::@6 - [61] doplasma::scrn#13 = phi( main::@2/SCREEN1, main::@6/SCREEN2 ) + [62] doplasma::scrn#13 = phi( main::@2/SCREEN1, main::@6/SCREEN2 ) to:doplasma::@1 doplasma::@1: scope:[doplasma] from doplasma doplasma::@2 - [62] doplasma::c1b#3 = phi( doplasma/0, doplasma::@2/doplasma::c1b#2 ) - [62] doplasma::c1a#3 = phi( doplasma/0, doplasma::@2/doplasma::c1a#2 ) - [62] doplasma::ii#3 = phi( doplasma/0, doplasma::@2/doplasma::ii#2 ) - [63] if(doplasma::ii#3<$19) goto doplasma::@2 + [63] doplasma::c1b#3 = phi( doplasma/0, doplasma::@2/doplasma::c1b#2 ) + [63] doplasma::c1a#3 = phi( doplasma/0, doplasma::@2/doplasma::c1a#2 ) + [63] doplasma::ii#3 = phi( doplasma/0, doplasma::@2/doplasma::ii#2 ) + [64] if(doplasma::ii#3<$19) goto doplasma::@2 to:doplasma::@3 doplasma::@3: scope:[doplasma] from doplasma::@1 doplasma::@4 - [64] doplasma::c2b#3 = phi( doplasma::@1/doplasma::c2B#0, doplasma::@4/doplasma::c2b#2 ) - [64] doplasma::c2a#3 = phi( doplasma::@1/doplasma::c2A#0, doplasma::@4/doplasma::c2a#2 ) - [64] doplasma::i#3 = phi( doplasma::@1/0, doplasma::@4/doplasma::i#2 ) - [65] if(doplasma::i#3<$28) goto doplasma::@4 + [65] doplasma::c2b#3 = phi( doplasma::@1/doplasma::c2B#0, doplasma::@4/doplasma::c2b#2 ) + [65] doplasma::c2a#3 = phi( doplasma::@1/doplasma::c2A#0, doplasma::@4/doplasma::c2a#2 ) + [65] doplasma::i#3 = phi( doplasma::@1/0, doplasma::@4/doplasma::i#2 ) + [66] if(doplasma::i#3<$28) goto doplasma::@4 to:doplasma::@5 doplasma::@5: scope:[doplasma] from doplasma::@3 doplasma::@8 - [66] doplasma::scrn#6 = phi( doplasma::@8/doplasma::scrn#0, doplasma::@3/doplasma::scrn#13 ) - [66] doplasma::jj#3 = phi( doplasma::@8/doplasma::jj#2, doplasma::@3/0 ) - [67] if(doplasma::jj#3<$19) goto doplasma::@6 + [67] doplasma::scrn#6 = phi( doplasma::@8/doplasma::scrn#0, doplasma::@3/doplasma::scrn#13 ) + [67] doplasma::jj#3 = phi( doplasma::@8/doplasma::jj#2, doplasma::@3/0 ) + [68] if(doplasma::jj#3<$19) goto doplasma::@6 to:doplasma::@return doplasma::@return: scope:[doplasma] from doplasma::@5 - [68] return + [69] return to:@return doplasma::@6: scope:[doplasma] from doplasma::@5 doplasma::@7 - [69] doplasma::j#3 = phi( doplasma::@7/doplasma::j#2, doplasma::@5/0 ) - [70] if(doplasma::j#3<$28) goto doplasma::@7 + [70] doplasma::j#3 = phi( doplasma::@7/doplasma::j#2, doplasma::@5/0 ) + [71] if(doplasma::j#3<$28) goto doplasma::@7 to:doplasma::@8 doplasma::@8: scope:[doplasma] from doplasma::@6 - [71] doplasma::scrn#0 = doplasma::scrn#6 + $28 - [72] doplasma::jj#2 = ++ doplasma::jj#3 + [72] doplasma::scrn#0 = doplasma::scrn#6 + $28 + [73] doplasma::jj#2 = ++ doplasma::jj#3 to:doplasma::@5 doplasma::@7: scope:[doplasma] from doplasma::@6 - [73] doplasma::$6 = xbuf[doplasma::j#3] + ybuf[doplasma::jj#3] - [74] doplasma::scrn#6[doplasma::j#3] = doplasma::$6 - [75] doplasma::j#2 = ++ doplasma::j#3 + [74] doplasma::$6 = xbuf[doplasma::j#3] + ybuf[doplasma::jj#3] + [75] doplasma::scrn#6[doplasma::j#3] = doplasma::$6 + [76] doplasma::j#2 = ++ doplasma::j#3 to:doplasma::@6 doplasma::@4: scope:[doplasma] from doplasma::@3 - [76] doplasma::$3 = sinetable[doplasma::c2a#3] + sinetable[doplasma::c2b#3] - [77] xbuf[doplasma::i#3] = doplasma::$3 - [78] doplasma::c2a#2 = doplasma::c2a#3 + 3 - [79] doplasma::c2b#2 = doplasma::c2b#3 + 7 - [80] doplasma::i#2 = ++ doplasma::i#3 + [77] doplasma::$3 = sinetable[doplasma::c2a#3] + sinetable[doplasma::c2b#3] + [78] xbuf[doplasma::i#3] = doplasma::$3 + [79] doplasma::c2a#2 = doplasma::c2a#3 + 3 + [80] doplasma::c2b#2 = doplasma::c2b#3 + 7 + [81] doplasma::i#2 = ++ doplasma::i#3 to:doplasma::@3 doplasma::@2: scope:[doplasma] from doplasma::@1 - [81] doplasma::$1 = sinetable[doplasma::c1a#3] + sinetable[doplasma::c1b#3] - [82] ybuf[doplasma::ii#3] = doplasma::$1 - [83] doplasma::c1a#2 = doplasma::c1a#3 + 4 - [84] doplasma::c1b#2 = doplasma::c1b#3 + 9 - [85] doplasma::ii#2 = ++ doplasma::ii#3 + [82] doplasma::$1 = sinetable[doplasma::c1a#3] + sinetable[doplasma::c1b#3] + [83] ybuf[doplasma::ii#3] = doplasma::$1 + [84] doplasma::c1a#2 = doplasma::c1a#3 + 4 + [85] doplasma::c1b#2 = doplasma::c1b#3 + 9 + [86] doplasma::ii#2 = ++ doplasma::ii#3 to:doplasma::@1 unsigned int rand() rand: scope:[rand] from makechar::@6 - [86] rand::$0 = rand_state#19 << 7 - [87] rand_state#0 = rand_state#19 ^ rand::$0 - [88] rand::$1 = rand_state#0 >> 9 - [89] rand_state#1 = rand_state#0 ^ rand::$1 - [90] rand::$2 = rand_state#1 << 8 - [91] rand_state#12 = rand_state#1 ^ rand::$2 - [92] rand::return#0 = rand_state#12 + [87] rand::$0 = rand_state << 7 + [88] rand_state = rand_state ^ rand::$0 + [89] rand::$1 = rand_state >> 9 + [90] rand_state = rand_state ^ rand::$1 + [91] rand::$2 = rand_state << 8 + [92] rand_state = rand_state ^ rand::$2 + [93] rand::return#0 = rand_state to:rand::@return rand::@return: scope:[rand] from rand - [93] return + [94] return to:@return void print_uint(unsigned int w) print_uint: scope:[print_uint] from end::@1 - [94] print_uchar::b#0 = byte1 print_uint::w#0 - [95] call print_uchar + [95] print_uchar::b#0 = byte1 print_uint::w#0 + [96] call print_uchar to:print_uint::@1 print_uint::@1: scope:[print_uint] from print_uint - [96] print_uchar::b#1 = byte0 print_uint::w#0 - [97] call print_uchar + [97] print_uchar::b#1 = byte0 print_uint::w#0 + [98] call print_uchar to:print_uint::@return print_uint::@return: scope:[print_uint] from print_uint::@1 - [98] return + [99] return to:@return void print_ln() print_ln: scope:[print_ln] from end::@2 - [99] phi() + [100] phi() to:print_ln::@1 print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 - [100] print_line_cursor#9 = phi( print_ln/print_screen#0, print_ln::@1/print_line_cursor#0 ) - [101] print_line_cursor#0 = print_line_cursor#9 + $28 - [102] if(print_line_cursor#0> 4 - [106] print_char::ch#0 = print_hextab[print_uchar::$0] - [107] call print_char + [105] print_char_cursor#37 = phi( print_uint/print_screen#0, print_uint::@1/print_char_cursor#27 ) + [105] print_uchar::b#2 = phi( print_uint/print_uchar::b#0, print_uint::@1/print_uchar::b#1 ) + [106] print_uchar::$0 = print_uchar::b#2 >> 4 + [107] print_char::ch#0 = print_hextab[print_uchar::$0] + [108] call print_char to:print_uchar::@1 print_uchar::@1: scope:[print_uchar] from print_uchar - [108] print_uchar::$2 = print_uchar::b#2 & $f - [109] print_char::ch#1 = print_hextab[print_uchar::$2] - [110] call print_char + [109] print_uchar::$2 = print_uchar::b#2 & $f + [110] print_char::ch#1 = print_hextab[print_uchar::$2] + [111] call print_char to:print_uchar::@return print_uchar::@return: scope:[print_uchar] from print_uchar::@1 - [111] return + [112] return to:@return void print_char(char ch) print_char: scope:[print_char] from print_uchar print_uchar::@1 - [112] print_char_cursor#26 = phi( print_uchar/print_char_cursor#37, print_uchar::@1/print_char_cursor#27 ) - [112] print_char::ch#2 = phi( print_uchar/print_char::ch#0, print_uchar::@1/print_char::ch#1 ) - [113] *print_char_cursor#26 = print_char::ch#2 - [114] print_char_cursor#27 = ++ print_char_cursor#26 + [113] print_char_cursor#26 = phi( print_uchar/print_char_cursor#37, print_uchar::@1/print_char_cursor#27 ) + [113] print_char::ch#2 = phi( print_uchar/print_char::ch#0, print_uchar::@1/print_char::ch#1 ) + [114] *print_char_cursor#26 = print_char::ch#2 + [115] print_char_cursor#27 = ++ print_char_cursor#26 to:print_char::@return print_char::@return: scope:[print_char] from print_char - [115] return + [116] return to:@return @@ -1875,19 +1775,12 @@ unsigned int rand::$2 // 2000002.0 unsigned int rand::return unsigned int rand::return#0 // 366667.3333333334 unsigned int rand::return#2 // 200002.0 -unsigned int rand_state -unsigned int rand_state#0 // 1500001.5 -unsigned int rand_state#1 // 1500001.5 -unsigned int rand_state#12 // 190909.36363636365 -unsigned int rand_state#14 // 500.5 -unsigned int rand_state#19 // 235556.11111111112 -unsigned int rand_state#25 // 7334.666666666666 +__loadstore volatile unsigned int rand_state // 277778.1111111111 void start() Initial phi equivalence classes [ main::count#2 main::count#1 ] [ makechar::c#3 makechar::c#2 ] -[ rand_state#14 rand_state#25 rand_state#19 rand_state#12 ] [ makechar::i#3 makechar::i#2 ] [ makechar::ii#3 makechar::ii#2 ] [ makechar::b#3 makechar::b#7 makechar::b#2 ] @@ -1904,6 +1797,7 @@ Initial phi equivalence classes [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] [ print_char_cursor#26 print_char_cursor#37 print_char_cursor#27 ] +Added variable rand_state to live range equivalence class [ rand_state ] Added variable last_time to live range equivalence class [ last_time ] Added variable main::block#1 to live range equivalence class [ main::block#1 ] Added variable main::tmp#1 to live range equivalence class [ main::tmp#1 ] @@ -1923,9 +1817,7 @@ Added variable doplasma::$6 to live range equivalence class [ doplasma::$6 ] Added variable doplasma::$3 to live range equivalence class [ doplasma::$3 ] Added variable doplasma::$1 to live range equivalence class [ doplasma::$1 ] Added variable rand::$0 to live range equivalence class [ rand::$0 ] -Added variable rand_state#0 to live range equivalence class [ rand_state#0 ] Added variable rand::$1 to live range equivalence class [ rand::$1 ] -Added variable rand_state#1 to live range equivalence class [ rand_state#1 ] Added variable rand::$2 to live range equivalence class [ rand::$2 ] Added variable rand::return#0 to live range equivalence class [ rand::return#0 ] Added variable print_uchar::$0 to live range equivalence class [ print_uchar::$0 ] @@ -1933,7 +1825,6 @@ Added variable print_uchar::$2 to live range equivalence class [ print_uchar::$2 Complete equivalence classes [ main::count#2 main::count#1 ] [ makechar::c#3 makechar::c#2 ] -[ rand_state#14 rand_state#25 rand_state#19 rand_state#12 ] [ makechar::i#3 makechar::i#2 ] [ makechar::ii#3 makechar::ii#2 ] [ makechar::b#3 makechar::b#7 makechar::b#2 ] @@ -1950,6 +1841,7 @@ Complete equivalence classes [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] [ print_char_cursor#26 print_char_cursor#37 print_char_cursor#27 ] +[ rand_state ] [ last_time ] [ main::block#1 ] [ main::tmp#1 ] @@ -1969,9 +1861,7 @@ Complete equivalence classes [ doplasma::$3 ] [ doplasma::$1 ] [ rand::$0 ] -[ rand_state#0 ] [ rand::$1 ] -[ rand_state#1 ] [ rand::$2 ] [ rand::return#0 ] [ print_uchar::$0 ] @@ -1981,199 +1871,197 @@ Allocated zp[1]:3 [ doplasma::$6 ] Allocated zp[2]:4 [ rand::$0 ] Allocated zp[2]:6 [ rand::$1 ] Allocated zp[2]:8 [ rand::$2 ] -Allocated zp[2]:10 [ rand_state#0 ] -Allocated zp[2]:12 [ rand_state#1 ] -Allocated zp[2]:14 [ rand_state#14 rand_state#25 rand_state#19 rand_state#12 ] -Allocated zp[1]:16 [ makechar::b#3 makechar::b#7 makechar::b#2 ] -Allocated zp[2]:17 [ rand::return#0 ] -Allocated zp[1]:19 [ doplasma::jj#3 doplasma::jj#2 ] -Allocated zp[2]:20 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ] -Allocated zp[1]:22 [ doplasma::ii#3 doplasma::ii#2 ] -Allocated zp[1]:23 [ doplasma::i#3 doplasma::i#2 ] -Allocated zp[1]:24 [ makechar::ii#3 makechar::ii#2 ] -Allocated zp[2]:25 [ rand::return#2 ] -Allocated zp[2]:27 [ makechar::$3 ] -Allocated zp[1]:29 [ makechar::$4 ] -Allocated zp[1]:30 [ doplasma::$3 ] -Allocated zp[1]:31 [ doplasma::$1 ] -Allocated zp[1]:32 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] -Allocated zp[1]:33 [ doplasma::c1b#3 doplasma::c1b#2 ] -Allocated zp[1]:34 [ doplasma::c2b#3 doplasma::c2b#2 ] -Allocated zp[1]:35 [ doplasma::c1a#3 doplasma::c1a#2 ] -Allocated zp[1]:36 [ doplasma::c2a#3 doplasma::c2a#2 ] -Allocated zp[2]:37 [ print_char_cursor#26 print_char_cursor#37 print_char_cursor#27 ] -Allocated zp[2]:39 [ print_line_cursor#9 print_line_cursor#0 ] -Allocated zp[1]:41 [ makechar::i#3 makechar::i#2 ] -Allocated zp[2]:42 [ makechar::$7 ] -Allocated zp[2]:44 [ makechar::$8 ] -Allocated zp[2]:46 [ makechar::$10 ] -Allocated zp[1]:48 [ print_uchar::$0 ] -Allocated zp[1]:49 [ print_uchar::$2 ] -Allocated zp[1]:50 [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] -Allocated zp[1]:51 [ makechar::s#1 ] -Allocated zp[2]:52 [ makechar::c#3 makechar::c#2 ] -Allocated zp[1]:54 [ makechar::$9 ] -Allocated zp[2]:55 [ print_uint::w#0 ] -Allocated zp[2]:57 [ main::count#2 main::count#1 ] -Allocated zp[2]:59 [ Ticks#1 ] -Allocated zp[2]:61 [ Ticks#0 ] -Allocated zp[1]:63 [ main::tmp#1 ] -Allocated zp[2]:64 [ last_time ] -Allocated zp[1]:66 [ main::block#1 ] -Allocated zp[1]:67 [ main::v#1 ] +Allocated zp[1]:10 [ makechar::b#3 makechar::b#7 makechar::b#2 ] +Allocated zp[2]:11 [ rand::return#0 ] +Allocated zp[1]:13 [ doplasma::jj#3 doplasma::jj#2 ] +Allocated zp[2]:14 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ] +Allocated zp[2]:16 [ rand_state ] +Allocated zp[1]:18 [ doplasma::ii#3 doplasma::ii#2 ] +Allocated zp[1]:19 [ doplasma::i#3 doplasma::i#2 ] +Allocated zp[1]:20 [ makechar::ii#3 makechar::ii#2 ] +Allocated zp[2]:21 [ rand::return#2 ] +Allocated zp[2]:23 [ makechar::$3 ] +Allocated zp[1]:25 [ makechar::$4 ] +Allocated zp[1]:26 [ doplasma::$3 ] +Allocated zp[1]:27 [ doplasma::$1 ] +Allocated zp[1]:28 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] +Allocated zp[1]:29 [ doplasma::c1b#3 doplasma::c1b#2 ] +Allocated zp[1]:30 [ doplasma::c2b#3 doplasma::c2b#2 ] +Allocated zp[1]:31 [ doplasma::c1a#3 doplasma::c1a#2 ] +Allocated zp[1]:32 [ doplasma::c2a#3 doplasma::c2a#2 ] +Allocated zp[2]:33 [ print_char_cursor#26 print_char_cursor#37 print_char_cursor#27 ] +Allocated zp[2]:35 [ print_line_cursor#9 print_line_cursor#0 ] +Allocated zp[1]:37 [ makechar::i#3 makechar::i#2 ] +Allocated zp[2]:38 [ makechar::$7 ] +Allocated zp[2]:40 [ makechar::$8 ] +Allocated zp[2]:42 [ makechar::$10 ] +Allocated zp[1]:44 [ print_uchar::$0 ] +Allocated zp[1]:45 [ print_uchar::$2 ] +Allocated zp[1]:46 [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] +Allocated zp[1]:47 [ makechar::s#1 ] +Allocated zp[2]:48 [ makechar::c#3 makechar::c#2 ] +Allocated zp[1]:50 [ makechar::$9 ] +Allocated zp[2]:51 [ print_uint::w#0 ] +Allocated zp[2]:53 [ main::count#2 main::count#1 ] +Allocated zp[2]:55 [ Ticks#1 ] +Allocated zp[2]:57 [ Ticks#0 ] +Allocated zp[1]:59 [ main::tmp#1 ] +Allocated zp[2]:60 [ last_time ] +Allocated zp[1]:62 [ main::block#1 ] +Allocated zp[1]:63 [ main::v#1 ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] last_time = 0 [ last_time ] ( [ last_time ] { } ) always clobbers reg byte a -Statement [14] if(0!=main::count#2) goto main::@2 [ last_time main::block#1 main::v#1 main::count#2 ] ( main:3 [ last_time main::block#1 main::v#1 main::count#2 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:66 [ main::block#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:67 [ main::v#1 ] -Statement [21] *VICII_MEMORY = PAGE1 [ last_time main::block#1 main::v#1 main::count#2 ] ( main:3 [ last_time main::block#1 main::v#1 main::count#2 ] { } ) always clobbers reg byte a -Statement [23] *VICII_MEMORY = PAGE2 [ last_time main::block#1 main::v#1 main::count#2 ] ( main:3 [ last_time main::block#1 main::v#1 main::count#2 ] { } ) always clobbers reg byte a -Statement [24] main::count#1 = -- main::count#2 [ last_time main::block#1 main::v#1 main::count#1 ] ( main:3 [ last_time main::block#1 main::v#1 main::count#1 ] { } ) always clobbers reg byte a -Statement [27] if(makechar::c#3<$100) goto makechar::@2 [ makechar::c#3 rand_state#14 ] ( main:3::makechar:6 [ last_time makechar::c#3 rand_state#14 ] { } ) always clobbers reg byte a -Statement [36] makechar::$7 = makechar::c#3 << 3 [ makechar::c#3 makechar::s#1 makechar::i#3 rand_state#19 makechar::b#3 makechar::$7 ] ( main:3::makechar:6 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 rand_state#19 makechar::b#3 makechar::$7 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:51 [ makechar::s#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:41 [ makechar::i#3 makechar::i#2 ] -Removing always clobbered register reg byte a as potential for zp[1]:16 [ makechar::b#3 makechar::b#7 makechar::b#2 ] -Statement [37] makechar::$8 = makechar::$7 + makechar::i#3 [ makechar::c#3 makechar::s#1 makechar::i#3 rand_state#19 makechar::b#3 makechar::$8 ] ( main:3::makechar:6 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 rand_state#19 makechar::b#3 makechar::$8 ] { } ) always clobbers reg byte a -Statement [38] makechar::$10 = CHARSET + makechar::$8 [ makechar::c#3 makechar::s#1 makechar::i#3 rand_state#19 makechar::b#3 makechar::$10 ] ( main:3::makechar:6 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 rand_state#19 makechar::b#3 makechar::$10 ] { } ) always clobbers reg byte a -Statement [39] *makechar::$10 = makechar::b#3 [ makechar::c#3 makechar::s#1 makechar::i#3 rand_state#19 ] ( main:3::makechar:6 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 rand_state#19 ] { } ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:51 [ makechar::s#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:41 [ makechar::i#3 makechar::i#2 ] -Statement [43] rand::return#2 = rand::return#0 [ makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state#12 rand::return#2 ] ( main:3::makechar:6 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state#12 rand::return#2 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:24 [ makechar::ii#3 makechar::ii#2 ] -Statement [44] makechar::$3 = rand::return#2 [ makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state#12 makechar::$3 ] ( main:3::makechar:6 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state#12 makechar::$3 ] { } ) always clobbers reg byte a -Statement [45] makechar::$4 = makechar::$3 & $ff [ makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state#12 makechar::$4 ] ( main:3::makechar:6 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state#12 makechar::$4 ] { } ) always clobbers reg byte a -Statement [47] makechar::b#2 = makechar::b#3 | bittab[makechar::ii#3] [ makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 rand_state#12 makechar::b#2 ] ( main:3::makechar:6 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 rand_state#12 makechar::b#2 ] { } ) always clobbers reg byte a +Statement [1] rand_state = 1 [ rand_state ] ( [ rand_state ] { } ) always clobbers reg byte a +Statement [2] last_time = 0 [ rand_state last_time ] ( [ rand_state last_time ] { } ) always clobbers reg byte a +Statement [15] if(0!=main::count#2) goto main::@2 [ last_time main::block#1 main::v#1 main::count#2 ] ( main:4 [ last_time main::block#1 main::v#1 main::count#2 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:62 [ main::block#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:63 [ main::v#1 ] +Statement [22] *VICII_MEMORY = PAGE1 [ last_time main::block#1 main::v#1 main::count#2 ] ( main:4 [ last_time main::block#1 main::v#1 main::count#2 ] { } ) always clobbers reg byte a +Statement [24] *VICII_MEMORY = PAGE2 [ last_time main::block#1 main::v#1 main::count#2 ] ( main:4 [ last_time main::block#1 main::v#1 main::count#2 ] { } ) always clobbers reg byte a +Statement [25] main::count#1 = -- main::count#2 [ last_time main::block#1 main::v#1 main::count#1 ] ( main:4 [ last_time main::block#1 main::v#1 main::count#1 ] { } ) always clobbers reg byte a +Statement [28] if(makechar::c#3<$100) goto makechar::@2 [ rand_state makechar::c#3 ] ( main:4::makechar:7 [ last_time rand_state makechar::c#3 ] { } ) always clobbers reg byte a +Statement [37] makechar::$7 = makechar::c#3 << 3 [ rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$7 ] ( main:4::makechar:7 [ last_time rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$7 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:47 [ makechar::s#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:37 [ makechar::i#3 makechar::i#2 ] +Removing always clobbered register reg byte a as potential for zp[1]:10 [ makechar::b#3 makechar::b#7 makechar::b#2 ] +Statement [38] makechar::$8 = makechar::$7 + makechar::i#3 [ rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$8 ] ( main:4::makechar:7 [ last_time rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$8 ] { } ) always clobbers reg byte a +Statement [39] makechar::$10 = CHARSET + makechar::$8 [ rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$10 ] ( main:4::makechar:7 [ last_time rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$10 ] { } ) always clobbers reg byte a +Statement [40] *makechar::$10 = makechar::b#3 [ rand_state makechar::c#3 makechar::s#1 makechar::i#3 ] ( main:4::makechar:7 [ last_time rand_state makechar::c#3 makechar::s#1 makechar::i#3 ] { } ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:47 [ makechar::s#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:37 [ makechar::i#3 makechar::i#2 ] +Statement [44] rand::return#2 = rand::return#0 [ rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand::return#2 ] ( main:4::makechar:7 [ last_time rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand::return#2 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:20 [ makechar::ii#3 makechar::ii#2 ] +Statement [45] makechar::$3 = rand::return#2 [ rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 makechar::$3 ] ( main:4::makechar:7 [ last_time rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 makechar::$3 ] { } ) always clobbers reg byte a +Statement [46] makechar::$4 = makechar::$3 & $ff [ rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 makechar::$4 ] ( main:4::makechar:7 [ last_time rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 makechar::$4 ] { } ) always clobbers reg byte a +Statement [48] makechar::b#2 = makechar::b#3 | bittab[makechar::ii#3] [ rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#2 ] ( main:4::makechar:7 [ last_time rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#2 ] { } ) always clobbers reg byte a Statement asm { jsr$FFDE staLAST_TIME stxLAST_TIME+1 } always clobbers reg byte a reg byte x reg byte y -Statement [52] Ticks#0 = last_time [ last_time Ticks#0 ] ( main:3::end:17 [ last_time Ticks#0 ] { } ) always clobbers reg byte a -Statement [54] last_time = last_time - Ticks#0 [ last_time ] ( main:3::end:17 [ last_time ] { { Ticks#1 = print_uint::w#0 } } ) always clobbers reg byte a -Statement [55] Ticks#1 = last_time [ Ticks#1 ] ( main:3::end:17 [ Ticks#1 ] { { Ticks#1 = print_uint::w#0 } } ) always clobbers reg byte a -Statement [56] print_uint::w#0 = Ticks#1 [ print_uint::w#0 ] ( main:3::end:17 [ print_uint::w#0 ] { { Ticks#1 = print_uint::w#0 } } ) always clobbers reg byte a -Statement [71] doplasma::scrn#0 = doplasma::scrn#6 + $28 [ doplasma::jj#3 doplasma::scrn#0 ] ( main:3::doplasma:20 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#0 ] { } main:3::doplasma:22 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#0 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:19 [ doplasma::jj#3 doplasma::jj#2 ] -Statement [73] doplasma::$6 = xbuf[doplasma::j#3] + ybuf[doplasma::jj#3] [ doplasma::jj#3 doplasma::scrn#6 doplasma::j#3 doplasma::$6 ] ( main:3::doplasma:20 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#6 doplasma::j#3 doplasma::$6 ] { } main:3::doplasma:22 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#6 doplasma::j#3 doplasma::$6 ] { } ) always clobbers reg byte a +Statement [53] Ticks#0 = last_time [ last_time Ticks#0 ] ( main:4::end:18 [ last_time Ticks#0 ] { } ) always clobbers reg byte a +Statement [55] last_time = last_time - Ticks#0 [ last_time ] ( main:4::end:18 [ last_time ] { { Ticks#1 = print_uint::w#0 } } ) always clobbers reg byte a +Statement [56] Ticks#1 = last_time [ Ticks#1 ] ( main:4::end:18 [ Ticks#1 ] { { Ticks#1 = print_uint::w#0 } } ) always clobbers reg byte a +Statement [57] print_uint::w#0 = Ticks#1 [ print_uint::w#0 ] ( main:4::end:18 [ print_uint::w#0 ] { { Ticks#1 = print_uint::w#0 } } ) always clobbers reg byte a +Statement [72] doplasma::scrn#0 = doplasma::scrn#6 + $28 [ doplasma::jj#3 doplasma::scrn#0 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#0 ] { } main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#0 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:13 [ doplasma::jj#3 doplasma::jj#2 ] +Statement [74] doplasma::$6 = xbuf[doplasma::j#3] + ybuf[doplasma::jj#3] [ doplasma::jj#3 doplasma::scrn#6 doplasma::j#3 doplasma::$6 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#6 doplasma::j#3 doplasma::$6 ] { } main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#6 doplasma::j#3 doplasma::$6 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:2 [ doplasma::j#3 doplasma::j#2 ] -Statement [76] doplasma::$3 = sinetable[doplasma::c2a#3] + sinetable[doplasma::c2b#3] [ doplasma::scrn#13 doplasma::i#3 doplasma::c2a#3 doplasma::c2b#3 doplasma::$3 ] ( main:3::doplasma:20 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#3 doplasma::c2b#3 doplasma::$3 ] { } main:3::doplasma:22 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#3 doplasma::c2b#3 doplasma::$3 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:23 [ doplasma::i#3 doplasma::i#2 ] -Removing always clobbered register reg byte a as potential for zp[1]:36 [ doplasma::c2a#3 doplasma::c2a#2 ] -Removing always clobbered register reg byte a as potential for zp[1]:34 [ doplasma::c2b#3 doplasma::c2b#2 ] -Statement [78] doplasma::c2a#2 = doplasma::c2a#3 + 3 [ doplasma::scrn#13 doplasma::i#3 doplasma::c2b#3 doplasma::c2a#2 ] ( main:3::doplasma:20 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2b#3 doplasma::c2a#2 ] { } main:3::doplasma:22 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2b#3 doplasma::c2a#2 ] { } ) always clobbers reg byte a -Statement [79] doplasma::c2b#2 = doplasma::c2b#3 + 7 [ doplasma::scrn#13 doplasma::i#3 doplasma::c2a#2 doplasma::c2b#2 ] ( main:3::doplasma:20 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#2 doplasma::c2b#2 ] { } main:3::doplasma:22 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#2 doplasma::c2b#2 ] { } ) always clobbers reg byte a -Statement [81] doplasma::$1 = sinetable[doplasma::c1a#3] + sinetable[doplasma::c1b#3] [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] ( main:3::doplasma:20 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] { } main:3::doplasma:22 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:22 [ doplasma::ii#3 doplasma::ii#2 ] -Removing always clobbered register reg byte a as potential for zp[1]:35 [ doplasma::c1a#3 doplasma::c1a#2 ] -Removing always clobbered register reg byte a as potential for zp[1]:33 [ doplasma::c1b#3 doplasma::c1b#2 ] -Statement [83] doplasma::c1a#2 = doplasma::c1a#3 + 4 [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] ( main:3::doplasma:20 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] { } main:3::doplasma:22 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] { } ) always clobbers reg byte a -Statement [84] doplasma::c1b#2 = doplasma::c1b#3 + 9 [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] ( main:3::doplasma:20 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] { } main:3::doplasma:22 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] { } ) always clobbers reg byte a -Statement [86] rand::$0 = rand_state#19 << 7 [ rand_state#19 rand::$0 ] ( main:3::makechar:6::rand:42 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state#19 rand::$0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [87] rand_state#0 = rand_state#19 ^ rand::$0 [ rand_state#0 ] ( main:3::makechar:6::rand:42 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state#0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [88] rand::$1 = rand_state#0 >> 9 [ rand_state#0 rand::$1 ] ( main:3::makechar:6::rand:42 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state#0 rand::$1 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [89] rand_state#1 = rand_state#0 ^ rand::$1 [ rand_state#1 ] ( main:3::makechar:6::rand:42 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state#1 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [90] rand::$2 = rand_state#1 << 8 [ rand_state#1 rand::$2 ] ( main:3::makechar:6::rand:42 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state#1 rand::$2 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [91] rand_state#12 = rand_state#1 ^ rand::$2 [ rand_state#12 ] ( main:3::makechar:6::rand:42 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state#12 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [92] rand::return#0 = rand_state#12 [ rand_state#12 rand::return#0 ] ( main:3::makechar:6::rand:42 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state#12 rand::return#0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [101] print_line_cursor#0 = print_line_cursor#9 + $28 [ print_line_cursor#0 print_char_cursor#27 ] ( main:3::end:17::print_ln:59 [ print_line_cursor#0 print_char_cursor#27 ] { } ) always clobbers reg byte a -Statement [102] if(print_line_cursor#0> 4 [ print_uchar::b#2 print_char_cursor#37 print_uchar::$0 ] ( main:3::end:17::print_uint:57::print_uchar:95 [ print_uint::w#0 print_uchar::b#2 print_char_cursor#37 print_uchar::$0 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#0 = print_char::ch#2 } { print_char_cursor#26 = print_char_cursor#37 } } main:3::end:17::print_uint:57::print_uchar:97 [ print_uchar::b#2 print_char_cursor#37 print_uchar::$0 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#26 = print_char_cursor#37 print_char_cursor#27 } { print_char::ch#0 = print_char::ch#2 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:50 [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] -Statement [108] print_uchar::$2 = print_uchar::b#2 & $f [ print_char_cursor#27 print_uchar::$2 ] ( main:3::end:17::print_uint:57::print_uchar:95 [ print_uint::w#0 print_char_cursor#27 print_uchar::$2 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#1 = print_char::ch#2 } { print_char_cursor#26 = print_char_cursor#27 } } main:3::end:17::print_uint:57::print_uchar:97 [ print_char_cursor#27 print_uchar::$2 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#26 = print_char_cursor#37 print_char_cursor#27 } { print_char::ch#1 = print_char::ch#2 } } ) always clobbers reg byte a -Statement [113] *print_char_cursor#26 = print_char::ch#2 [ print_char_cursor#26 ] ( main:3::end:17::print_uint:57::print_uchar:95::print_char:107 [ print_uint::w#0 print_uchar::b#2 print_char_cursor#26 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#0 = print_char::ch#2 } { print_char_cursor#26 = print_char_cursor#37 } } main:3::end:17::print_uint:57::print_uchar:97::print_char:107 [ print_uchar::b#2 print_char_cursor#26 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#26 = print_char_cursor#37 print_char_cursor#27 } { print_char::ch#0 = print_char::ch#2 } } main:3::end:17::print_uint:57::print_uchar:95::print_char:110 [ print_uint::w#0 print_char_cursor#26 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#1 = print_char::ch#2 } { print_char_cursor#26 = print_char_cursor#27 } } main:3::end:17::print_uint:57::print_uchar:97::print_char:110 [ print_char_cursor#26 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#26 = print_char_cursor#37 print_char_cursor#27 } { print_char::ch#1 = print_char::ch#2 } } ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:50 [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] -Statement [1] last_time = 0 [ last_time ] ( [ last_time ] { } ) always clobbers reg byte a -Statement [10] main::tmp#1 = main::block#1 & $fc [ last_time main::block#1 main::tmp#1 ] ( main:3 [ last_time main::block#1 main::tmp#1 ] { } ) always clobbers reg byte a -Statement [14] if(0!=main::count#2) goto main::@2 [ last_time main::block#1 main::v#1 main::count#2 ] ( main:3 [ last_time main::block#1 main::v#1 main::count#2 ] { } ) always clobbers reg byte a -Statement [21] *VICII_MEMORY = PAGE1 [ last_time main::block#1 main::v#1 main::count#2 ] ( main:3 [ last_time main::block#1 main::v#1 main::count#2 ] { } ) always clobbers reg byte a -Statement [23] *VICII_MEMORY = PAGE2 [ last_time main::block#1 main::v#1 main::count#2 ] ( main:3 [ last_time main::block#1 main::v#1 main::count#2 ] { } ) always clobbers reg byte a -Statement [24] main::count#1 = -- main::count#2 [ last_time main::block#1 main::v#1 main::count#1 ] ( main:3 [ last_time main::block#1 main::v#1 main::count#1 ] { } ) always clobbers reg byte a -Statement [27] if(makechar::c#3<$100) goto makechar::@2 [ makechar::c#3 rand_state#14 ] ( main:3::makechar:6 [ last_time makechar::c#3 rand_state#14 ] { } ) always clobbers reg byte a -Statement [36] makechar::$7 = makechar::c#3 << 3 [ makechar::c#3 makechar::s#1 makechar::i#3 rand_state#19 makechar::b#3 makechar::$7 ] ( main:3::makechar:6 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 rand_state#19 makechar::b#3 makechar::$7 ] { } ) always clobbers reg byte a -Statement [37] makechar::$8 = makechar::$7 + makechar::i#3 [ makechar::c#3 makechar::s#1 makechar::i#3 rand_state#19 makechar::b#3 makechar::$8 ] ( main:3::makechar:6 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 rand_state#19 makechar::b#3 makechar::$8 ] { } ) always clobbers reg byte a -Statement [38] makechar::$10 = CHARSET + makechar::$8 [ makechar::c#3 makechar::s#1 makechar::i#3 rand_state#19 makechar::b#3 makechar::$10 ] ( main:3::makechar:6 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 rand_state#19 makechar::b#3 makechar::$10 ] { } ) always clobbers reg byte a -Statement [39] *makechar::$10 = makechar::b#3 [ makechar::c#3 makechar::s#1 makechar::i#3 rand_state#19 ] ( main:3::makechar:6 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 rand_state#19 ] { } ) always clobbers reg byte a reg byte y -Statement [43] rand::return#2 = rand::return#0 [ makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state#12 rand::return#2 ] ( main:3::makechar:6 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state#12 rand::return#2 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [44] makechar::$3 = rand::return#2 [ makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state#12 makechar::$3 ] ( main:3::makechar:6 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state#12 makechar::$3 ] { } ) always clobbers reg byte a -Statement [45] makechar::$4 = makechar::$3 & $ff [ makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state#12 makechar::$4 ] ( main:3::makechar:6 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state#12 makechar::$4 ] { } ) always clobbers reg byte a -Statement [47] makechar::b#2 = makechar::b#3 | bittab[makechar::ii#3] [ makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 rand_state#12 makechar::b#2 ] ( main:3::makechar:6 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 rand_state#12 makechar::b#2 ] { } ) always clobbers reg byte a +Statement [77] doplasma::$3 = sinetable[doplasma::c2a#3] + sinetable[doplasma::c2b#3] [ doplasma::scrn#13 doplasma::i#3 doplasma::c2a#3 doplasma::c2b#3 doplasma::$3 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#3 doplasma::c2b#3 doplasma::$3 ] { } main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#3 doplasma::c2b#3 doplasma::$3 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:19 [ doplasma::i#3 doplasma::i#2 ] +Removing always clobbered register reg byte a as potential for zp[1]:32 [ doplasma::c2a#3 doplasma::c2a#2 ] +Removing always clobbered register reg byte a as potential for zp[1]:30 [ doplasma::c2b#3 doplasma::c2b#2 ] +Statement [79] doplasma::c2a#2 = doplasma::c2a#3 + 3 [ doplasma::scrn#13 doplasma::i#3 doplasma::c2b#3 doplasma::c2a#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2b#3 doplasma::c2a#2 ] { } main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2b#3 doplasma::c2a#2 ] { } ) always clobbers reg byte a +Statement [80] doplasma::c2b#2 = doplasma::c2b#3 + 7 [ doplasma::scrn#13 doplasma::i#3 doplasma::c2a#2 doplasma::c2b#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#2 doplasma::c2b#2 ] { } main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#2 doplasma::c2b#2 ] { } ) always clobbers reg byte a +Statement [82] doplasma::$1 = sinetable[doplasma::c1a#3] + sinetable[doplasma::c1b#3] [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] { } main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:18 [ doplasma::ii#3 doplasma::ii#2 ] +Removing always clobbered register reg byte a as potential for zp[1]:31 [ doplasma::c1a#3 doplasma::c1a#2 ] +Removing always clobbered register reg byte a as potential for zp[1]:29 [ doplasma::c1b#3 doplasma::c1b#2 ] +Statement [84] doplasma::c1a#2 = doplasma::c1a#3 + 4 [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] { } main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] { } ) always clobbers reg byte a +Statement [85] doplasma::c1b#2 = doplasma::c1b#3 + 9 [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] { } main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] { } ) always clobbers reg byte a +Statement [87] rand::$0 = rand_state << 7 [ rand_state rand::$0 ] ( main:4::makechar:7::rand:43 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state rand::$0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [88] rand_state = rand_state ^ rand::$0 [ rand_state ] ( main:4::makechar:7::rand:43 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [89] rand::$1 = rand_state >> 9 [ rand_state rand::$1 ] ( main:4::makechar:7::rand:43 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state rand::$1 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [90] rand_state = rand_state ^ rand::$1 [ rand_state ] ( main:4::makechar:7::rand:43 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [91] rand::$2 = rand_state << 8 [ rand_state rand::$2 ] ( main:4::makechar:7::rand:43 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state rand::$2 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [92] rand_state = rand_state ^ rand::$2 [ rand_state ] ( main:4::makechar:7::rand:43 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [93] rand::return#0 = rand_state [ rand_state rand::return#0 ] ( main:4::makechar:7::rand:43 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state rand::return#0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [102] print_line_cursor#0 = print_line_cursor#9 + $28 [ print_line_cursor#0 print_char_cursor#27 ] ( main:4::end:18::print_ln:60 [ print_line_cursor#0 print_char_cursor#27 ] { } ) always clobbers reg byte a +Statement [103] if(print_line_cursor#0> 4 [ print_uchar::b#2 print_char_cursor#37 print_uchar::$0 ] ( main:4::end:18::print_uint:58::print_uchar:96 [ print_uint::w#0 print_uchar::b#2 print_char_cursor#37 print_uchar::$0 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#0 = print_char::ch#2 } { print_char_cursor#26 = print_char_cursor#37 } } main:4::end:18::print_uint:58::print_uchar:98 [ print_uchar::b#2 print_char_cursor#37 print_uchar::$0 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#26 = print_char_cursor#37 print_char_cursor#27 } { print_char::ch#0 = print_char::ch#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:46 [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] +Statement [109] print_uchar::$2 = print_uchar::b#2 & $f [ print_char_cursor#27 print_uchar::$2 ] ( main:4::end:18::print_uint:58::print_uchar:96 [ print_uint::w#0 print_char_cursor#27 print_uchar::$2 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#1 = print_char::ch#2 } { print_char_cursor#26 = print_char_cursor#27 } } main:4::end:18::print_uint:58::print_uchar:98 [ print_char_cursor#27 print_uchar::$2 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#26 = print_char_cursor#37 print_char_cursor#27 } { print_char::ch#1 = print_char::ch#2 } } ) always clobbers reg byte a +Statement [114] *print_char_cursor#26 = print_char::ch#2 [ print_char_cursor#26 ] ( main:4::end:18::print_uint:58::print_uchar:96::print_char:108 [ print_uint::w#0 print_uchar::b#2 print_char_cursor#26 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#0 = print_char::ch#2 } { print_char_cursor#26 = print_char_cursor#37 } } main:4::end:18::print_uint:58::print_uchar:98::print_char:108 [ print_uchar::b#2 print_char_cursor#26 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#26 = print_char_cursor#37 print_char_cursor#27 } { print_char::ch#0 = print_char::ch#2 } } main:4::end:18::print_uint:58::print_uchar:96::print_char:111 [ print_uint::w#0 print_char_cursor#26 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#1 = print_char::ch#2 } { print_char_cursor#26 = print_char_cursor#27 } } main:4::end:18::print_uint:58::print_uchar:98::print_char:111 [ print_char_cursor#26 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#26 = print_char_cursor#37 print_char_cursor#27 } { print_char::ch#1 = print_char::ch#2 } } ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:46 [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] +Statement [1] rand_state = 1 [ rand_state ] ( [ rand_state ] { } ) always clobbers reg byte a +Statement [2] last_time = 0 [ rand_state last_time ] ( [ rand_state last_time ] { } ) always clobbers reg byte a +Statement [11] main::tmp#1 = main::block#1 & $fc [ last_time main::block#1 main::tmp#1 ] ( main:4 [ last_time main::block#1 main::tmp#1 ] { } ) always clobbers reg byte a +Statement [15] if(0!=main::count#2) goto main::@2 [ last_time main::block#1 main::v#1 main::count#2 ] ( main:4 [ last_time main::block#1 main::v#1 main::count#2 ] { } ) always clobbers reg byte a +Statement [22] *VICII_MEMORY = PAGE1 [ last_time main::block#1 main::v#1 main::count#2 ] ( main:4 [ last_time main::block#1 main::v#1 main::count#2 ] { } ) always clobbers reg byte a +Statement [24] *VICII_MEMORY = PAGE2 [ last_time main::block#1 main::v#1 main::count#2 ] ( main:4 [ last_time main::block#1 main::v#1 main::count#2 ] { } ) always clobbers reg byte a +Statement [25] main::count#1 = -- main::count#2 [ last_time main::block#1 main::v#1 main::count#1 ] ( main:4 [ last_time main::block#1 main::v#1 main::count#1 ] { } ) always clobbers reg byte a +Statement [28] if(makechar::c#3<$100) goto makechar::@2 [ rand_state makechar::c#3 ] ( main:4::makechar:7 [ last_time rand_state makechar::c#3 ] { } ) always clobbers reg byte a +Statement [37] makechar::$7 = makechar::c#3 << 3 [ rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$7 ] ( main:4::makechar:7 [ last_time rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$7 ] { } ) always clobbers reg byte a +Statement [38] makechar::$8 = makechar::$7 + makechar::i#3 [ rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$8 ] ( main:4::makechar:7 [ last_time rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$8 ] { } ) always clobbers reg byte a +Statement [39] makechar::$10 = CHARSET + makechar::$8 [ rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$10 ] ( main:4::makechar:7 [ last_time rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::b#3 makechar::$10 ] { } ) always clobbers reg byte a +Statement [40] *makechar::$10 = makechar::b#3 [ rand_state makechar::c#3 makechar::s#1 makechar::i#3 ] ( main:4::makechar:7 [ last_time rand_state makechar::c#3 makechar::s#1 makechar::i#3 ] { } ) always clobbers reg byte a reg byte y +Statement [44] rand::return#2 = rand::return#0 [ rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand::return#2 ] ( main:4::makechar:7 [ last_time rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand::return#2 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [45] makechar::$3 = rand::return#2 [ rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 makechar::$3 ] ( main:4::makechar:7 [ last_time rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 makechar::$3 ] { } ) always clobbers reg byte a +Statement [46] makechar::$4 = makechar::$3 & $ff [ rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 makechar::$4 ] ( main:4::makechar:7 [ last_time rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 makechar::$4 ] { } ) always clobbers reg byte a +Statement [48] makechar::b#2 = makechar::b#3 | bittab[makechar::ii#3] [ rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#2 ] ( main:4::makechar:7 [ last_time rand_state makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#2 ] { } ) always clobbers reg byte a Statement asm { jsr$FFDE staLAST_TIME stxLAST_TIME+1 } always clobbers reg byte a reg byte x reg byte y -Statement [52] Ticks#0 = last_time [ last_time Ticks#0 ] ( main:3::end:17 [ last_time Ticks#0 ] { } ) always clobbers reg byte a -Statement [54] last_time = last_time - Ticks#0 [ last_time ] ( main:3::end:17 [ last_time ] { { Ticks#1 = print_uint::w#0 } } ) always clobbers reg byte a -Statement [55] Ticks#1 = last_time [ Ticks#1 ] ( main:3::end:17 [ Ticks#1 ] { { Ticks#1 = print_uint::w#0 } } ) always clobbers reg byte a -Statement [56] print_uint::w#0 = Ticks#1 [ print_uint::w#0 ] ( main:3::end:17 [ print_uint::w#0 ] { { Ticks#1 = print_uint::w#0 } } ) always clobbers reg byte a -Statement [71] doplasma::scrn#0 = doplasma::scrn#6 + $28 [ doplasma::jj#3 doplasma::scrn#0 ] ( main:3::doplasma:20 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#0 ] { } main:3::doplasma:22 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#0 ] { } ) always clobbers reg byte a -Statement [73] doplasma::$6 = xbuf[doplasma::j#3] + ybuf[doplasma::jj#3] [ doplasma::jj#3 doplasma::scrn#6 doplasma::j#3 doplasma::$6 ] ( main:3::doplasma:20 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#6 doplasma::j#3 doplasma::$6 ] { } main:3::doplasma:22 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#6 doplasma::j#3 doplasma::$6 ] { } ) always clobbers reg byte a -Statement [76] doplasma::$3 = sinetable[doplasma::c2a#3] + sinetable[doplasma::c2b#3] [ doplasma::scrn#13 doplasma::i#3 doplasma::c2a#3 doplasma::c2b#3 doplasma::$3 ] ( main:3::doplasma:20 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#3 doplasma::c2b#3 doplasma::$3 ] { } main:3::doplasma:22 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#3 doplasma::c2b#3 doplasma::$3 ] { } ) always clobbers reg byte a -Statement [78] doplasma::c2a#2 = doplasma::c2a#3 + 3 [ doplasma::scrn#13 doplasma::i#3 doplasma::c2b#3 doplasma::c2a#2 ] ( main:3::doplasma:20 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2b#3 doplasma::c2a#2 ] { } main:3::doplasma:22 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2b#3 doplasma::c2a#2 ] { } ) always clobbers reg byte a -Statement [79] doplasma::c2b#2 = doplasma::c2b#3 + 7 [ doplasma::scrn#13 doplasma::i#3 doplasma::c2a#2 doplasma::c2b#2 ] ( main:3::doplasma:20 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#2 doplasma::c2b#2 ] { } main:3::doplasma:22 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#2 doplasma::c2b#2 ] { } ) always clobbers reg byte a -Statement [81] doplasma::$1 = sinetable[doplasma::c1a#3] + sinetable[doplasma::c1b#3] [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] ( main:3::doplasma:20 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] { } main:3::doplasma:22 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] { } ) always clobbers reg byte a -Statement [83] doplasma::c1a#2 = doplasma::c1a#3 + 4 [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] ( main:3::doplasma:20 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] { } main:3::doplasma:22 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] { } ) always clobbers reg byte a -Statement [84] doplasma::c1b#2 = doplasma::c1b#3 + 9 [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] ( main:3::doplasma:20 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] { } main:3::doplasma:22 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] { } ) always clobbers reg byte a -Statement [86] rand::$0 = rand_state#19 << 7 [ rand_state#19 rand::$0 ] ( main:3::makechar:6::rand:42 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state#19 rand::$0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [87] rand_state#0 = rand_state#19 ^ rand::$0 [ rand_state#0 ] ( main:3::makechar:6::rand:42 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state#0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [88] rand::$1 = rand_state#0 >> 9 [ rand_state#0 rand::$1 ] ( main:3::makechar:6::rand:42 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state#0 rand::$1 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [89] rand_state#1 = rand_state#0 ^ rand::$1 [ rand_state#1 ] ( main:3::makechar:6::rand:42 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state#1 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [90] rand::$2 = rand_state#1 << 8 [ rand_state#1 rand::$2 ] ( main:3::makechar:6::rand:42 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state#1 rand::$2 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [91] rand_state#12 = rand_state#1 ^ rand::$2 [ rand_state#12 ] ( main:3::makechar:6::rand:42 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state#12 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [92] rand::return#0 = rand_state#12 [ rand_state#12 rand::return#0 ] ( main:3::makechar:6::rand:42 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state#12 rand::return#0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [101] print_line_cursor#0 = print_line_cursor#9 + $28 [ print_line_cursor#0 print_char_cursor#27 ] ( main:3::end:17::print_ln:59 [ print_line_cursor#0 print_char_cursor#27 ] { } ) always clobbers reg byte a -Statement [102] if(print_line_cursor#0> 4 [ print_uchar::b#2 print_char_cursor#37 print_uchar::$0 ] ( main:3::end:17::print_uint:57::print_uchar:95 [ print_uint::w#0 print_uchar::b#2 print_char_cursor#37 print_uchar::$0 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#0 = print_char::ch#2 } { print_char_cursor#26 = print_char_cursor#37 } } main:3::end:17::print_uint:57::print_uchar:97 [ print_uchar::b#2 print_char_cursor#37 print_uchar::$0 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#26 = print_char_cursor#37 print_char_cursor#27 } { print_char::ch#0 = print_char::ch#2 } } ) always clobbers reg byte a -Statement [108] print_uchar::$2 = print_uchar::b#2 & $f [ print_char_cursor#27 print_uchar::$2 ] ( main:3::end:17::print_uint:57::print_uchar:95 [ print_uint::w#0 print_char_cursor#27 print_uchar::$2 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#1 = print_char::ch#2 } { print_char_cursor#26 = print_char_cursor#27 } } main:3::end:17::print_uint:57::print_uchar:97 [ print_char_cursor#27 print_uchar::$2 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#26 = print_char_cursor#37 print_char_cursor#27 } { print_char::ch#1 = print_char::ch#2 } } ) always clobbers reg byte a -Statement [113] *print_char_cursor#26 = print_char::ch#2 [ print_char_cursor#26 ] ( main:3::end:17::print_uint:57::print_uchar:95::print_char:107 [ print_uint::w#0 print_uchar::b#2 print_char_cursor#26 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#0 = print_char::ch#2 } { print_char_cursor#26 = print_char_cursor#37 } } main:3::end:17::print_uint:57::print_uchar:97::print_char:107 [ print_uchar::b#2 print_char_cursor#26 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#26 = print_char_cursor#37 print_char_cursor#27 } { print_char::ch#0 = print_char::ch#2 } } main:3::end:17::print_uint:57::print_uchar:95::print_char:110 [ print_uint::w#0 print_char_cursor#26 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#1 = print_char::ch#2 } { print_char_cursor#26 = print_char_cursor#27 } } main:3::end:17::print_uint:57::print_uchar:97::print_char:110 [ print_char_cursor#26 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#26 = print_char_cursor#37 print_char_cursor#27 } { print_char::ch#1 = print_char::ch#2 } } ) always clobbers reg byte y -Potential registers zp[2]:57 [ main::count#2 main::count#1 ] : zp[2]:57 , -Potential registers zp[2]:52 [ makechar::c#3 makechar::c#2 ] : zp[2]:52 , -Potential registers zp[2]:14 [ rand_state#14 rand_state#25 rand_state#19 rand_state#12 ] : zp[2]:14 , -Potential registers zp[1]:41 [ makechar::i#3 makechar::i#2 ] : zp[1]:41 , reg byte x , -Potential registers zp[1]:24 [ makechar::ii#3 makechar::ii#2 ] : zp[1]:24 , reg byte x , reg byte y , -Potential registers zp[1]:16 [ makechar::b#3 makechar::b#7 makechar::b#2 ] : zp[1]:16 , reg byte x , reg byte y , -Potential registers zp[1]:22 [ doplasma::ii#3 doplasma::ii#2 ] : zp[1]:22 , reg byte x , reg byte y , -Potential registers zp[1]:35 [ doplasma::c1a#3 doplasma::c1a#2 ] : zp[1]:35 , reg byte x , reg byte y , -Potential registers zp[1]:33 [ doplasma::c1b#3 doplasma::c1b#2 ] : zp[1]:33 , reg byte x , reg byte y , -Potential registers zp[1]:23 [ doplasma::i#3 doplasma::i#2 ] : zp[1]:23 , reg byte x , reg byte y , -Potential registers zp[1]:36 [ doplasma::c2a#3 doplasma::c2a#2 ] : zp[1]:36 , reg byte x , reg byte y , -Potential registers zp[1]:34 [ doplasma::c2b#3 doplasma::c2b#2 ] : zp[1]:34 , reg byte x , reg byte y , -Potential registers zp[1]:19 [ doplasma::jj#3 doplasma::jj#2 ] : zp[1]:19 , reg byte x , reg byte y , -Potential registers zp[2]:20 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ] : zp[2]:20 , +Statement [53] Ticks#0 = last_time [ last_time Ticks#0 ] ( main:4::end:18 [ last_time Ticks#0 ] { } ) always clobbers reg byte a +Statement [55] last_time = last_time - Ticks#0 [ last_time ] ( main:4::end:18 [ last_time ] { { Ticks#1 = print_uint::w#0 } } ) always clobbers reg byte a +Statement [56] Ticks#1 = last_time [ Ticks#1 ] ( main:4::end:18 [ Ticks#1 ] { { Ticks#1 = print_uint::w#0 } } ) always clobbers reg byte a +Statement [57] print_uint::w#0 = Ticks#1 [ print_uint::w#0 ] ( main:4::end:18 [ print_uint::w#0 ] { { Ticks#1 = print_uint::w#0 } } ) always clobbers reg byte a +Statement [72] doplasma::scrn#0 = doplasma::scrn#6 + $28 [ doplasma::jj#3 doplasma::scrn#0 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#0 ] { } main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#0 ] { } ) always clobbers reg byte a +Statement [74] doplasma::$6 = xbuf[doplasma::j#3] + ybuf[doplasma::jj#3] [ doplasma::jj#3 doplasma::scrn#6 doplasma::j#3 doplasma::$6 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#6 doplasma::j#3 doplasma::$6 ] { } main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::jj#3 doplasma::scrn#6 doplasma::j#3 doplasma::$6 ] { } ) always clobbers reg byte a +Statement [77] doplasma::$3 = sinetable[doplasma::c2a#3] + sinetable[doplasma::c2b#3] [ doplasma::scrn#13 doplasma::i#3 doplasma::c2a#3 doplasma::c2b#3 doplasma::$3 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#3 doplasma::c2b#3 doplasma::$3 ] { } main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#3 doplasma::c2b#3 doplasma::$3 ] { } ) always clobbers reg byte a +Statement [79] doplasma::c2a#2 = doplasma::c2a#3 + 3 [ doplasma::scrn#13 doplasma::i#3 doplasma::c2b#3 doplasma::c2a#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2b#3 doplasma::c2a#2 ] { } main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2b#3 doplasma::c2a#2 ] { } ) always clobbers reg byte a +Statement [80] doplasma::c2b#2 = doplasma::c2b#3 + 7 [ doplasma::scrn#13 doplasma::i#3 doplasma::c2a#2 doplasma::c2b#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#2 doplasma::c2b#2 ] { } main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::i#3 doplasma::c2a#2 doplasma::c2b#2 ] { } ) always clobbers reg byte a +Statement [82] doplasma::$1 = sinetable[doplasma::c1a#3] + sinetable[doplasma::c1b#3] [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] { } main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#3 doplasma::c1b#3 doplasma::$1 ] { } ) always clobbers reg byte a +Statement [84] doplasma::c1a#2 = doplasma::c1a#3 + 4 [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] { } main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1b#3 doplasma::c1a#2 ] { } ) always clobbers reg byte a +Statement [85] doplasma::c1b#2 = doplasma::c1b#3 + 9 [ doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] ( main:4::doplasma:21 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] { } main:4::doplasma:23 [ last_time main::block#1 main::v#1 main::count#2 doplasma::scrn#13 doplasma::ii#3 doplasma::c1a#2 doplasma::c1b#2 ] { } ) always clobbers reg byte a +Statement [87] rand::$0 = rand_state << 7 [ rand_state rand::$0 ] ( main:4::makechar:7::rand:43 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state rand::$0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [88] rand_state = rand_state ^ rand::$0 [ rand_state ] ( main:4::makechar:7::rand:43 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [89] rand::$1 = rand_state >> 9 [ rand_state rand::$1 ] ( main:4::makechar:7::rand:43 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state rand::$1 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [90] rand_state = rand_state ^ rand::$1 [ rand_state ] ( main:4::makechar:7::rand:43 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [91] rand::$2 = rand_state << 8 [ rand_state rand::$2 ] ( main:4::makechar:7::rand:43 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state rand::$2 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [92] rand_state = rand_state ^ rand::$2 [ rand_state ] ( main:4::makechar:7::rand:43 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [93] rand::return#0 = rand_state [ rand_state rand::return#0 ] ( main:4::makechar:7::rand:43 [ last_time makechar::c#3 makechar::s#1 makechar::i#3 makechar::ii#3 makechar::b#3 rand_state rand::return#0 ] { { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [102] print_line_cursor#0 = print_line_cursor#9 + $28 [ print_line_cursor#0 print_char_cursor#27 ] ( main:4::end:18::print_ln:60 [ print_line_cursor#0 print_char_cursor#27 ] { } ) always clobbers reg byte a +Statement [103] if(print_line_cursor#0> 4 [ print_uchar::b#2 print_char_cursor#37 print_uchar::$0 ] ( main:4::end:18::print_uint:58::print_uchar:96 [ print_uint::w#0 print_uchar::b#2 print_char_cursor#37 print_uchar::$0 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#0 = print_char::ch#2 } { print_char_cursor#26 = print_char_cursor#37 } } main:4::end:18::print_uint:58::print_uchar:98 [ print_uchar::b#2 print_char_cursor#37 print_uchar::$0 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#26 = print_char_cursor#37 print_char_cursor#27 } { print_char::ch#0 = print_char::ch#2 } } ) always clobbers reg byte a +Statement [109] print_uchar::$2 = print_uchar::b#2 & $f [ print_char_cursor#27 print_uchar::$2 ] ( main:4::end:18::print_uint:58::print_uchar:96 [ print_uint::w#0 print_char_cursor#27 print_uchar::$2 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#1 = print_char::ch#2 } { print_char_cursor#26 = print_char_cursor#27 } } main:4::end:18::print_uint:58::print_uchar:98 [ print_char_cursor#27 print_uchar::$2 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#26 = print_char_cursor#37 print_char_cursor#27 } { print_char::ch#1 = print_char::ch#2 } } ) always clobbers reg byte a +Statement [114] *print_char_cursor#26 = print_char::ch#2 [ print_char_cursor#26 ] ( main:4::end:18::print_uint:58::print_uchar:96::print_char:108 [ print_uint::w#0 print_uchar::b#2 print_char_cursor#26 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#0 = print_char::ch#2 } { print_char_cursor#26 = print_char_cursor#37 } } main:4::end:18::print_uint:58::print_uchar:98::print_char:108 [ print_uchar::b#2 print_char_cursor#26 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#26 = print_char_cursor#37 print_char_cursor#27 } { print_char::ch#0 = print_char::ch#2 } } main:4::end:18::print_uint:58::print_uchar:96::print_char:111 [ print_uint::w#0 print_char_cursor#26 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#1 = print_char::ch#2 } { print_char_cursor#26 = print_char_cursor#27 } } main:4::end:18::print_uint:58::print_uchar:98::print_char:111 [ print_char_cursor#26 ] { { Ticks#1 = print_uint::w#0 } { print_uchar::b#1 = print_uchar::b#2 } { print_char_cursor#26 = print_char_cursor#37 print_char_cursor#27 } { print_char::ch#1 = print_char::ch#2 } } ) always clobbers reg byte y +Potential registers zp[2]:53 [ main::count#2 main::count#1 ] : zp[2]:53 , +Potential registers zp[2]:48 [ makechar::c#3 makechar::c#2 ] : zp[2]:48 , +Potential registers zp[1]:37 [ makechar::i#3 makechar::i#2 ] : zp[1]:37 , reg byte x , +Potential registers zp[1]:20 [ makechar::ii#3 makechar::ii#2 ] : zp[1]:20 , reg byte x , reg byte y , +Potential registers zp[1]:10 [ makechar::b#3 makechar::b#7 makechar::b#2 ] : zp[1]:10 , reg byte x , reg byte y , +Potential registers zp[1]:18 [ doplasma::ii#3 doplasma::ii#2 ] : zp[1]:18 , reg byte x , reg byte y , +Potential registers zp[1]:31 [ doplasma::c1a#3 doplasma::c1a#2 ] : zp[1]:31 , reg byte x , reg byte y , +Potential registers zp[1]:29 [ doplasma::c1b#3 doplasma::c1b#2 ] : zp[1]:29 , reg byte x , reg byte y , +Potential registers zp[1]:19 [ doplasma::i#3 doplasma::i#2 ] : zp[1]:19 , reg byte x , reg byte y , +Potential registers zp[1]:32 [ doplasma::c2a#3 doplasma::c2a#2 ] : zp[1]:32 , reg byte x , reg byte y , +Potential registers zp[1]:30 [ doplasma::c2b#3 doplasma::c2b#2 ] : zp[1]:30 , reg byte x , reg byte y , +Potential registers zp[1]:13 [ doplasma::jj#3 doplasma::jj#2 ] : zp[1]:13 , reg byte x , reg byte y , +Potential registers zp[2]:14 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ] : zp[2]:14 , Potential registers zp[1]:2 [ doplasma::j#3 doplasma::j#2 ] : zp[1]:2 , reg byte x , reg byte y , -Potential registers zp[2]:39 [ print_line_cursor#9 print_line_cursor#0 ] : zp[2]:39 , -Potential registers zp[1]:50 [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] : zp[1]:50 , reg byte x , -Potential registers zp[1]:32 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] : zp[1]:32 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:37 [ print_char_cursor#26 print_char_cursor#37 print_char_cursor#27 ] : zp[2]:37 , -Potential registers zp[2]:64 [ last_time ] : zp[2]:64 , -Potential registers zp[1]:66 [ main::block#1 ] : zp[1]:66 , reg byte x , reg byte y , -Potential registers zp[1]:63 [ main::tmp#1 ] : zp[1]:63 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:67 [ main::v#1 ] : zp[1]:67 , reg byte x , reg byte y , -Potential registers zp[1]:54 [ makechar::$9 ] : zp[1]:54 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:51 [ makechar::s#1 ] : zp[1]:51 , reg byte x , -Potential registers zp[2]:42 [ makechar::$7 ] : zp[2]:42 , -Potential registers zp[2]:44 [ makechar::$8 ] : zp[2]:44 , -Potential registers zp[2]:46 [ makechar::$10 ] : zp[2]:46 , -Potential registers zp[2]:25 [ rand::return#2 ] : zp[2]:25 , -Potential registers zp[2]:27 [ makechar::$3 ] : zp[2]:27 , -Potential registers zp[1]:29 [ makechar::$4 ] : zp[1]:29 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:61 [ Ticks#0 ] : zp[2]:61 , -Potential registers zp[2]:59 [ Ticks#1 ] : zp[2]:59 , -Potential registers zp[2]:55 [ print_uint::w#0 ] : zp[2]:55 , +Potential registers zp[2]:35 [ print_line_cursor#9 print_line_cursor#0 ] : zp[2]:35 , +Potential registers zp[1]:46 [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] : zp[1]:46 , reg byte x , +Potential registers zp[1]:28 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] : zp[1]:28 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:33 [ print_char_cursor#26 print_char_cursor#37 print_char_cursor#27 ] : zp[2]:33 , +Potential registers zp[2]:16 [ rand_state ] : zp[2]:16 , +Potential registers zp[2]:60 [ last_time ] : zp[2]:60 , +Potential registers zp[1]:62 [ main::block#1 ] : zp[1]:62 , reg byte x , reg byte y , +Potential registers zp[1]:59 [ main::tmp#1 ] : zp[1]:59 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:63 [ main::v#1 ] : zp[1]:63 , reg byte x , reg byte y , +Potential registers zp[1]:50 [ makechar::$9 ] : zp[1]:50 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:47 [ makechar::s#1 ] : zp[1]:47 , reg byte x , +Potential registers zp[2]:38 [ makechar::$7 ] : zp[2]:38 , +Potential registers zp[2]:40 [ makechar::$8 ] : zp[2]:40 , +Potential registers zp[2]:42 [ makechar::$10 ] : zp[2]:42 , +Potential registers zp[2]:21 [ rand::return#2 ] : zp[2]:21 , +Potential registers zp[2]:23 [ makechar::$3 ] : zp[2]:23 , +Potential registers zp[1]:25 [ makechar::$4 ] : zp[1]:25 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:57 [ Ticks#0 ] : zp[2]:57 , +Potential registers zp[2]:55 [ Ticks#1 ] : zp[2]:55 , +Potential registers zp[2]:51 [ print_uint::w#0 ] : zp[2]:51 , Potential registers zp[1]:3 [ doplasma::$6 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:30 [ doplasma::$3 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:31 [ doplasma::$1 ] : zp[1]:31 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:26 [ doplasma::$3 ] : zp[1]:26 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:27 [ doplasma::$1 ] : zp[1]:27 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:4 [ rand::$0 ] : zp[2]:4 , -Potential registers zp[2]:10 [ rand_state#0 ] : zp[2]:10 , Potential registers zp[2]:6 [ rand::$1 ] : zp[2]:6 , -Potential registers zp[2]:12 [ rand_state#1 ] : zp[2]:12 , Potential registers zp[2]:8 [ rand::$2 ] : zp[2]:8 , -Potential registers zp[2]:17 [ rand::return#0 ] : zp[2]:17 , -Potential registers zp[1]:48 [ print_uchar::$0 ] : zp[1]:48 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:49 [ print_uchar::$2 ] : zp[1]:49 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:11 [ rand::return#0 ] : zp[2]:11 , +Potential registers zp[1]:44 [ print_uchar::$0 ] : zp[1]:44 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:45 [ print_uchar::$2 ] : zp[1]:45 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [doplasma] 3,250,003.25: zp[1]:2 [ doplasma::j#3 doplasma::j#2 ] 2,000,002: zp[1]:3 [ doplasma::$6 ] 362,502.5: zp[1]:19 [ doplasma::jj#3 doplasma::jj#2 ] 292,382.59: zp[2]:20 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ] 266,669.33: zp[1]:22 [ doplasma::ii#3 doplasma::ii#2 ] 266,669.33: zp[1]:23 [ doplasma::i#3 doplasma::i#2 ] 200,002: zp[1]:30 [ doplasma::$3 ] 200,002: zp[1]:31 [ doplasma::$1 ] 160,001.6: zp[1]:33 [ doplasma::c1b#3 doplasma::c1b#2 ] 160,001.6: zp[1]:34 [ doplasma::c2b#3 doplasma::c2b#2 ] 141,668.08: zp[1]:35 [ doplasma::c1a#3 doplasma::c1a#2 ] 141,668.08: zp[1]:36 [ doplasma::c2a#3 doplasma::c2a#2 ] -Uplift Scope [rand] 2,000,002: zp[2]:4 [ rand::$0 ] 2,000,002: zp[2]:6 [ rand::$1 ] 2,000,002: zp[2]:8 [ rand::$2 ] 366,667.33: zp[2]:17 [ rand::return#0 ] 200,002: zp[2]:25 [ rand::return#2 ] -Uplift Scope [] 1,500,001.5: zp[2]:10 [ rand_state#0 ] 1,500,001.5: zp[2]:12 [ rand_state#1 ] 434,300.64: zp[2]:14 [ rand_state#14 rand_state#25 rand_state#19 rand_state#12 ] 120,787.22: zp[2]:37 [ print_char_cursor#26 print_char_cursor#37 print_char_cursor#27 ] 35,003.5: zp[2]:39 [ print_line_cursor#9 print_line_cursor#0 ] 202: zp[2]:59 [ Ticks#1 ] 101: zp[2]:61 [ Ticks#0 ] 17.65: zp[2]:64 [ last_time ] -Uplift Scope [makechar] 378,185.68: zp[1]:16 [ makechar::b#3 makechar::b#7 makechar::b#2 ] 240,002.4: zp[1]:24 [ makechar::ii#3 makechar::ii#2 ] 200,002: zp[2]:27 [ makechar::$3 ] 200,002: zp[1]:29 [ makechar::$4 ] 22,355.18: zp[1]:41 [ makechar::i#3 makechar::i#2 ] 20,002: zp[2]:42 [ makechar::$7 ] 20,002: zp[2]:44 [ makechar::$8 ] 20,002: zp[2]:46 [ makechar::$10 ] 5,315.89: zp[1]:51 [ makechar::s#1 ] 2,593.09: zp[2]:52 [ makechar::c#3 makechar::c#2 ] 2,002: zp[1]:54 [ makechar::$9 ] -Uplift Scope [print_char] 160,007: zp[1]:32 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] -Uplift Scope [print_uchar] 20,002: zp[1]:48 [ print_uchar::$0 ] 20,002: zp[1]:49 [ print_uchar::$2 ] 9,505: zp[1]:50 [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] -Uplift Scope [print_uint] 701: zp[2]:55 [ print_uint::w#0 ] -Uplift Scope [main] 245.29: zp[2]:57 [ main::count#2 main::count#1 ] 22: zp[1]:63 [ main::tmp#1 ] 2.54: zp[1]:66 [ main::block#1 ] 2.44: zp[1]:67 [ main::v#1 ] +Uplift Scope [doplasma] 3,250,003.25: zp[1]:2 [ doplasma::j#3 doplasma::j#2 ] 2,000,002: zp[1]:3 [ doplasma::$6 ] 362,502.5: zp[1]:13 [ doplasma::jj#3 doplasma::jj#2 ] 292,382.59: zp[2]:14 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ] 266,669.33: zp[1]:18 [ doplasma::ii#3 doplasma::ii#2 ] 266,669.33: zp[1]:19 [ doplasma::i#3 doplasma::i#2 ] 200,002: zp[1]:26 [ doplasma::$3 ] 200,002: zp[1]:27 [ doplasma::$1 ] 160,001.6: zp[1]:29 [ doplasma::c1b#3 doplasma::c1b#2 ] 160,001.6: zp[1]:30 [ doplasma::c2b#3 doplasma::c2b#2 ] 141,668.08: zp[1]:31 [ doplasma::c1a#3 doplasma::c1a#2 ] 141,668.08: zp[1]:32 [ doplasma::c2a#3 doplasma::c2a#2 ] +Uplift Scope [rand] 2,000,002: zp[2]:4 [ rand::$0 ] 2,000,002: zp[2]:6 [ rand::$1 ] 2,000,002: zp[2]:8 [ rand::$2 ] 366,667.33: zp[2]:11 [ rand::return#0 ] 200,002: zp[2]:21 [ rand::return#2 ] +Uplift Scope [makechar] 378,185.68: zp[1]:10 [ makechar::b#3 makechar::b#7 makechar::b#2 ] 240,002.4: zp[1]:20 [ makechar::ii#3 makechar::ii#2 ] 200,002: zp[2]:23 [ makechar::$3 ] 200,002: zp[1]:25 [ makechar::$4 ] 22,355.18: zp[1]:37 [ makechar::i#3 makechar::i#2 ] 20,002: zp[2]:38 [ makechar::$7 ] 20,002: zp[2]:40 [ makechar::$8 ] 20,002: zp[2]:42 [ makechar::$10 ] 5,315.89: zp[1]:47 [ makechar::s#1 ] 2,593.09: zp[2]:48 [ makechar::c#3 makechar::c#2 ] 2,002: zp[1]:50 [ makechar::$9 ] +Uplift Scope [] 277,778.11: zp[2]:16 [ rand_state ] 120,787.22: zp[2]:33 [ print_char_cursor#26 print_char_cursor#37 print_char_cursor#27 ] 35,003.5: zp[2]:35 [ print_line_cursor#9 print_line_cursor#0 ] 202: zp[2]:55 [ Ticks#1 ] 101: zp[2]:57 [ Ticks#0 ] 17.65: zp[2]:60 [ last_time ] +Uplift Scope [print_char] 160,007: zp[1]:28 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] +Uplift Scope [print_uchar] 20,002: zp[1]:44 [ print_uchar::$0 ] 20,002: zp[1]:45 [ print_uchar::$2 ] 9,505: zp[1]:46 [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] +Uplift Scope [print_uint] 701: zp[2]:51 [ print_uint::w#0 ] +Uplift Scope [main] 245.29: zp[2]:53 [ main::count#2 main::count#1 ] 22: zp[1]:59 [ main::tmp#1 ] 2.54: zp[1]:62 [ main::block#1 ] 2.44: zp[1]:63 [ main::v#1 ] Uplift Scope [print_ln] Uplift Scope [RADIX] Uplift Scope [MOS6526_CIA] @@ -2183,83 +2071,82 @@ Uplift Scope [start] Uplift Scope [end] Uplift Scope [__start] -Uplifting [doplasma] best 171110 combination reg byte y [ doplasma::j#3 doplasma::j#2 ] reg byte a [ doplasma::$6 ] reg byte x [ doplasma::jj#3 doplasma::jj#2 ] zp[2]:20 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ] zp[1]:22 [ doplasma::ii#3 doplasma::ii#2 ] zp[1]:23 [ doplasma::i#3 doplasma::i#2 ] zp[1]:30 [ doplasma::$3 ] zp[1]:31 [ doplasma::$1 ] zp[1]:33 [ doplasma::c1b#3 doplasma::c1b#2 ] zp[1]:34 [ doplasma::c2b#3 doplasma::c2b#2 ] zp[1]:35 [ doplasma::c1a#3 doplasma::c1a#2 ] zp[1]:36 [ doplasma::c2a#3 doplasma::c2a#2 ] +Uplifting [doplasma] best 171020 combination reg byte y [ doplasma::j#3 doplasma::j#2 ] reg byte a [ doplasma::$6 ] reg byte x [ doplasma::jj#3 doplasma::jj#2 ] zp[2]:14 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ] zp[1]:18 [ doplasma::ii#3 doplasma::ii#2 ] zp[1]:19 [ doplasma::i#3 doplasma::i#2 ] zp[1]:26 [ doplasma::$3 ] zp[1]:27 [ doplasma::$1 ] zp[1]:29 [ doplasma::c1b#3 doplasma::c1b#2 ] zp[1]:30 [ doplasma::c2b#3 doplasma::c2b#2 ] zp[1]:31 [ doplasma::c1a#3 doplasma::c1a#2 ] zp[1]:32 [ doplasma::c2a#3 doplasma::c2a#2 ] Limited combination testing to 100 combinations of 419904 possible. -Uplifting [rand] best 171110 combination zp[2]:4 [ rand::$0 ] zp[2]:6 [ rand::$1 ] zp[2]:8 [ rand::$2 ] zp[2]:17 [ rand::return#0 ] zp[2]:25 [ rand::return#2 ] -Uplifting [] best 171110 combination zp[2]:10 [ rand_state#0 ] zp[2]:12 [ rand_state#1 ] zp[2]:14 [ rand_state#14 rand_state#25 rand_state#19 rand_state#12 ] zp[2]:37 [ print_char_cursor#26 print_char_cursor#37 print_char_cursor#27 ] zp[2]:39 [ print_line_cursor#9 print_line_cursor#0 ] zp[2]:59 [ Ticks#1 ] zp[2]:61 [ Ticks#0 ] zp[2]:64 [ last_time ] -Uplifting [makechar] best 154010 combination reg byte y [ makechar::b#3 makechar::b#7 makechar::b#2 ] reg byte x [ makechar::ii#3 makechar::ii#2 ] zp[2]:27 [ makechar::$3 ] zp[1]:29 [ makechar::$4 ] zp[1]:41 [ makechar::i#3 makechar::i#2 ] zp[2]:42 [ makechar::$7 ] zp[2]:44 [ makechar::$8 ] zp[2]:46 [ makechar::$10 ] zp[1]:51 [ makechar::s#1 ] zp[2]:52 [ makechar::c#3 makechar::c#2 ] zp[1]:54 [ makechar::$9 ] +Uplifting [rand] best 171020 combination zp[2]:4 [ rand::$0 ] zp[2]:6 [ rand::$1 ] zp[2]:8 [ rand::$2 ] zp[2]:11 [ rand::return#0 ] zp[2]:21 [ rand::return#2 ] +Uplifting [makechar] best 153920 combination reg byte y [ makechar::b#3 makechar::b#7 makechar::b#2 ] reg byte x [ makechar::ii#3 makechar::ii#2 ] zp[2]:23 [ makechar::$3 ] zp[1]:25 [ makechar::$4 ] zp[1]:37 [ makechar::i#3 makechar::i#2 ] zp[2]:38 [ makechar::$7 ] zp[2]:40 [ makechar::$8 ] zp[2]:42 [ makechar::$10 ] zp[1]:47 [ makechar::s#1 ] zp[2]:48 [ makechar::c#3 makechar::c#2 ] zp[1]:50 [ makechar::$9 ] Limited combination testing to 100 combinations of 576 possible. -Uplifting [print_char] best 154001 combination reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] -Uplifting [print_uchar] best 153983 combination reg byte a [ print_uchar::$0 ] reg byte x [ print_uchar::$2 ] reg byte x [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] -Uplifting [print_uint] best 153983 combination zp[2]:55 [ print_uint::w#0 ] -Uplifting [main] best 153977 combination zp[2]:57 [ main::count#2 main::count#1 ] reg byte a [ main::tmp#1 ] zp[1]:66 [ main::block#1 ] zp[1]:67 [ main::v#1 ] -Uplifting [print_ln] best 153977 combination -Uplifting [RADIX] best 153977 combination -Uplifting [MOS6526_CIA] best 153977 combination -Uplifting [MOS6569_VICII] best 153977 combination -Uplifting [MOS6581_SID] best 153977 combination -Uplifting [start] best 153977 combination -Uplifting [end] best 153977 combination -Uplifting [__start] best 153977 combination -Attempting to uplift remaining variables inzp[1]:22 [ doplasma::ii#3 doplasma::ii#2 ] -Uplifting [doplasma] best 153977 combination zp[1]:22 [ doplasma::ii#3 doplasma::ii#2 ] -Attempting to uplift remaining variables inzp[1]:23 [ doplasma::i#3 doplasma::i#2 ] -Uplifting [doplasma] best 153977 combination zp[1]:23 [ doplasma::i#3 doplasma::i#2 ] -Attempting to uplift remaining variables inzp[1]:29 [ makechar::$4 ] -Uplifting [makechar] best 153977 combination zp[1]:29 [ makechar::$4 ] -Attempting to uplift remaining variables inzp[1]:30 [ doplasma::$3 ] -Uplifting [doplasma] best 153377 combination reg byte a [ doplasma::$3 ] -Attempting to uplift remaining variables inzp[1]:31 [ doplasma::$1 ] -Uplifting [doplasma] best 152777 combination reg byte a [ doplasma::$1 ] -Attempting to uplift remaining variables inzp[1]:33 [ doplasma::c1b#3 doplasma::c1b#2 ] -Uplifting [doplasma] best 152777 combination zp[1]:33 [ doplasma::c1b#3 doplasma::c1b#2 ] -Attempting to uplift remaining variables inzp[1]:34 [ doplasma::c2b#3 doplasma::c2b#2 ] -Uplifting [doplasma] best 152777 combination zp[1]:34 [ doplasma::c2b#3 doplasma::c2b#2 ] -Attempting to uplift remaining variables inzp[1]:35 [ doplasma::c1a#3 doplasma::c1a#2 ] -Uplifting [doplasma] best 152777 combination zp[1]:35 [ doplasma::c1a#3 doplasma::c1a#2 ] -Attempting to uplift remaining variables inzp[1]:36 [ doplasma::c2a#3 doplasma::c2a#2 ] -Uplifting [doplasma] best 152777 combination zp[1]:36 [ doplasma::c2a#3 doplasma::c2a#2 ] -Attempting to uplift remaining variables inzp[1]:41 [ makechar::i#3 makechar::i#2 ] -Uplifting [makechar] best 152777 combination zp[1]:41 [ makechar::i#3 makechar::i#2 ] -Attempting to uplift remaining variables inzp[1]:51 [ makechar::s#1 ] -Uplifting [makechar] best 152777 combination zp[1]:51 [ makechar::s#1 ] -Attempting to uplift remaining variables inzp[1]:54 [ makechar::$9 ] -Uplifting [makechar] best 152717 combination reg byte x [ makechar::$9 ] -Attempting to uplift remaining variables inzp[1]:66 [ main::block#1 ] -Uplifting [main] best 152717 combination zp[1]:66 [ main::block#1 ] -Attempting to uplift remaining variables inzp[1]:67 [ main::v#1 ] -Uplifting [main] best 152717 combination zp[1]:67 [ main::v#1 ] -Coalescing zero page register [ zp[2]:14 [ rand_state#14 rand_state#25 rand_state#19 rand_state#12 ] ] with [ zp[2]:10 [ rand_state#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:14 [ rand_state#14 rand_state#25 rand_state#19 rand_state#12 rand_state#0 ] ] with [ zp[2]:12 [ rand_state#1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:42 [ makechar::$7 ] ] with [ zp[2]:44 [ makechar::$8 ] ] - score: 1 -Coalescing zero page register [ zp[2]:25 [ rand::return#2 ] ] with [ zp[2]:27 [ makechar::$3 ] ] - score: 1 -Coalescing zero page register [ zp[2]:25 [ rand::return#2 makechar::$3 ] ] with [ zp[2]:17 [ rand::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:59 [ Ticks#1 ] ] with [ zp[2]:55 [ print_uint::w#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:42 [ makechar::$7 makechar::$8 ] ] with [ zp[2]:46 [ makechar::$10 ] ] - score: 1 -Coalescing zero page register [ zp[2]:14 [ rand_state#14 rand_state#25 rand_state#19 rand_state#12 rand_state#0 rand_state#1 ] ] with [ zp[2]:57 [ main::count#2 main::count#1 ] ] -Coalescing zero page register [ zp[1]:22 [ doplasma::ii#3 doplasma::ii#2 ] ] with [ zp[1]:41 [ makechar::i#3 makechar::i#2 ] ] -Coalescing zero page register [ zp[2]:20 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ] ] with [ zp[2]:52 [ makechar::c#3 makechar::c#2 ] ] -Coalescing zero page register [ zp[1]:51 [ makechar::s#1 ] ] with [ zp[1]:35 [ doplasma::c1a#3 doplasma::c1a#2 ] ] -Coalescing zero page register [ zp[2]:42 [ makechar::$7 makechar::$8 makechar::$10 ] ] with [ zp[2]:39 [ print_line_cursor#9 print_line_cursor#0 ] ] -Coalescing zero page register [ zp[2]:25 [ rand::return#2 makechar::$3 rand::return#0 ] ] with [ zp[2]:37 [ print_char_cursor#26 print_char_cursor#37 print_char_cursor#27 ] ] -Coalescing zero page register [ zp[1]:29 [ makechar::$4 ] ] with [ zp[1]:33 [ doplasma::c1b#3 doplasma::c1b#2 ] ] -Coalescing zero page register [ zp[2]:4 [ rand::$0 ] ] with [ zp[2]:61 [ Ticks#0 ] ] -Coalescing zero page register [ zp[2]:6 [ rand::$1 ] ] with [ zp[2]:59 [ Ticks#1 print_uint::w#0 ] ] -Allocated (was zp[2]:14) zp[2]:2 [ rand_state#14 rand_state#25 rand_state#19 rand_state#12 rand_state#0 rand_state#1 main::count#2 main::count#1 ] -Allocated (was zp[2]:6) zp[2]:4 [ rand::$1 Ticks#1 print_uint::w#0 ] -Allocated (was zp[2]:4) zp[2]:6 [ rand::$0 Ticks#0 ] -Allocated (was zp[2]:25) zp[2]:10 [ rand::return#2 makechar::$3 rand::return#0 print_char_cursor#26 print_char_cursor#37 print_char_cursor#27 ] -Allocated (was zp[1]:29) zp[1]:12 [ makechar::$4 doplasma::c1b#3 doplasma::c1b#2 ] -Allocated (was zp[2]:20) zp[2]:13 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 makechar::c#3 makechar::c#2 ] -Allocated (was zp[1]:22) zp[1]:15 [ doplasma::ii#3 doplasma::ii#2 makechar::i#3 makechar::i#2 ] -Allocated (was zp[1]:23) zp[1]:16 [ doplasma::i#3 doplasma::i#2 ] -Allocated (was zp[1]:34) zp[1]:17 [ doplasma::c2b#3 doplasma::c2b#2 ] -Allocated (was zp[1]:51) zp[1]:18 [ makechar::s#1 doplasma::c1a#3 doplasma::c1a#2 ] -Allocated (was zp[1]:36) zp[1]:19 [ doplasma::c2a#3 doplasma::c2a#2 ] -Allocated (was zp[2]:42) zp[2]:20 [ makechar::$7 makechar::$8 makechar::$10 print_line_cursor#9 print_line_cursor#0 ] -Allocated (was zp[2]:64) zp[2]:22 [ last_time ] -Allocated (was zp[1]:66) zp[1]:24 [ main::block#1 ] -Allocated (was zp[1]:67) zp[1]:25 [ main::v#1 ] +Uplifting [] best 153920 combination zp[2]:16 [ rand_state ] zp[2]:33 [ print_char_cursor#26 print_char_cursor#37 print_char_cursor#27 ] zp[2]:35 [ print_line_cursor#9 print_line_cursor#0 ] zp[2]:55 [ Ticks#1 ] zp[2]:57 [ Ticks#0 ] zp[2]:60 [ last_time ] +Uplifting [print_char] best 153911 combination reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] +Uplifting [print_uchar] best 153893 combination reg byte a [ print_uchar::$0 ] reg byte x [ print_uchar::$2 ] reg byte x [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] +Uplifting [print_uint] best 153893 combination zp[2]:51 [ print_uint::w#0 ] +Uplifting [main] best 153887 combination zp[2]:53 [ main::count#2 main::count#1 ] reg byte a [ main::tmp#1 ] zp[1]:62 [ main::block#1 ] zp[1]:63 [ main::v#1 ] +Uplifting [print_ln] best 153887 combination +Uplifting [RADIX] best 153887 combination +Uplifting [MOS6526_CIA] best 153887 combination +Uplifting [MOS6569_VICII] best 153887 combination +Uplifting [MOS6581_SID] best 153887 combination +Uplifting [start] best 153887 combination +Uplifting [end] best 153887 combination +Uplifting [__start] best 153887 combination +Attempting to uplift remaining variables inzp[1]:18 [ doplasma::ii#3 doplasma::ii#2 ] +Uplifting [doplasma] best 153887 combination zp[1]:18 [ doplasma::ii#3 doplasma::ii#2 ] +Attempting to uplift remaining variables inzp[1]:19 [ doplasma::i#3 doplasma::i#2 ] +Uplifting [doplasma] best 153887 combination zp[1]:19 [ doplasma::i#3 doplasma::i#2 ] +Attempting to uplift remaining variables inzp[1]:25 [ makechar::$4 ] +Uplifting [makechar] best 153887 combination zp[1]:25 [ makechar::$4 ] +Attempting to uplift remaining variables inzp[1]:26 [ doplasma::$3 ] +Uplifting [doplasma] best 153287 combination reg byte a [ doplasma::$3 ] +Attempting to uplift remaining variables inzp[1]:27 [ doplasma::$1 ] +Uplifting [doplasma] best 152687 combination reg byte a [ doplasma::$1 ] +Attempting to uplift remaining variables inzp[1]:29 [ doplasma::c1b#3 doplasma::c1b#2 ] +Uplifting [doplasma] best 152687 combination zp[1]:29 [ doplasma::c1b#3 doplasma::c1b#2 ] +Attempting to uplift remaining variables inzp[1]:30 [ doplasma::c2b#3 doplasma::c2b#2 ] +Uplifting [doplasma] best 152687 combination zp[1]:30 [ doplasma::c2b#3 doplasma::c2b#2 ] +Attempting to uplift remaining variables inzp[1]:31 [ doplasma::c1a#3 doplasma::c1a#2 ] +Uplifting [doplasma] best 152687 combination zp[1]:31 [ doplasma::c1a#3 doplasma::c1a#2 ] +Attempting to uplift remaining variables inzp[1]:32 [ doplasma::c2a#3 doplasma::c2a#2 ] +Uplifting [doplasma] best 152687 combination zp[1]:32 [ doplasma::c2a#3 doplasma::c2a#2 ] +Attempting to uplift remaining variables inzp[1]:37 [ makechar::i#3 makechar::i#2 ] +Uplifting [makechar] best 152687 combination zp[1]:37 [ makechar::i#3 makechar::i#2 ] +Attempting to uplift remaining variables inzp[1]:47 [ makechar::s#1 ] +Uplifting [makechar] best 152687 combination zp[1]:47 [ makechar::s#1 ] +Attempting to uplift remaining variables inzp[1]:50 [ makechar::$9 ] +Uplifting [makechar] best 152627 combination reg byte x [ makechar::$9 ] +Attempting to uplift remaining variables inzp[1]:62 [ main::block#1 ] +Uplifting [main] best 152627 combination zp[1]:62 [ main::block#1 ] +Attempting to uplift remaining variables inzp[1]:63 [ main::v#1 ] +Uplifting [main] best 152627 combination zp[1]:63 [ main::v#1 ] +Coalescing zero page register [ zp[2]:38 [ makechar::$7 ] ] with [ zp[2]:40 [ makechar::$8 ] ] - score: 1 +Coalescing zero page register [ zp[2]:21 [ rand::return#2 ] ] with [ zp[2]:23 [ makechar::$3 ] ] - score: 1 +Coalescing zero page register [ zp[2]:21 [ rand::return#2 makechar::$3 ] ] with [ zp[2]:11 [ rand::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:55 [ Ticks#1 ] ] with [ zp[2]:51 [ print_uint::w#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:38 [ makechar::$7 makechar::$8 ] ] with [ zp[2]:42 [ makechar::$10 ] ] - score: 1 +Coalescing zero page register [ zp[1]:18 [ doplasma::ii#3 doplasma::ii#2 ] ] with [ zp[1]:37 [ makechar::i#3 makechar::i#2 ] ] +Coalescing zero page register [ zp[2]:14 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 ] ] with [ zp[2]:48 [ makechar::c#3 makechar::c#2 ] ] +Coalescing zero page register [ zp[2]:35 [ print_line_cursor#9 print_line_cursor#0 ] ] with [ zp[2]:53 [ main::count#2 main::count#1 ] ] +Coalescing zero page register [ zp[1]:47 [ makechar::s#1 ] ] with [ zp[1]:31 [ doplasma::c1a#3 doplasma::c1a#2 ] ] +Coalescing zero page register [ zp[2]:38 [ makechar::$7 makechar::$8 makechar::$10 ] ] with [ zp[2]:33 [ print_char_cursor#26 print_char_cursor#37 print_char_cursor#27 ] ] +Coalescing zero page register [ zp[1]:25 [ makechar::$4 ] ] with [ zp[1]:29 [ doplasma::c1b#3 doplasma::c1b#2 ] ] +Coalescing zero page register [ zp[2]:57 [ Ticks#0 ] ] with [ zp[2]:21 [ rand::return#2 makechar::$3 rand::return#0 ] ] +Coalescing zero page register [ zp[2]:4 [ rand::$0 ] ] with [ zp[2]:55 [ Ticks#1 print_uint::w#0 ] ] +Allocated (was zp[2]:4) zp[2]:2 [ rand::$0 Ticks#1 print_uint::w#0 ] +Allocated (was zp[2]:6) zp[2]:4 [ rand::$1 ] +Allocated (was zp[2]:8) zp[2]:6 [ rand::$2 ] +Allocated (was zp[2]:57) zp[2]:8 [ Ticks#0 rand::return#2 makechar::$3 rand::return#0 ] +Allocated (was zp[1]:25) zp[1]:10 [ makechar::$4 doplasma::c1b#3 doplasma::c1b#2 ] +Allocated (was zp[2]:14) zp[2]:11 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 makechar::c#3 makechar::c#2 ] +Allocated (was zp[1]:18) zp[1]:13 [ doplasma::ii#3 doplasma::ii#2 makechar::i#3 makechar::i#2 ] +Allocated (was zp[2]:16) zp[2]:14 [ rand_state ] +Allocated (was zp[1]:19) zp[1]:16 [ doplasma::i#3 doplasma::i#2 ] +Allocated (was zp[2]:38) zp[2]:17 [ makechar::$7 makechar::$8 makechar::$10 print_char_cursor#26 print_char_cursor#37 print_char_cursor#27 ] +Allocated (was zp[1]:30) zp[1]:19 [ doplasma::c2b#3 doplasma::c2b#2 ] +Allocated (was zp[1]:47) zp[1]:20 [ makechar::s#1 doplasma::c1a#3 doplasma::c1a#2 ] +Allocated (was zp[1]:32) zp[1]:21 [ doplasma::c2a#3 doplasma::c2a#2 ] +Allocated (was zp[2]:35) zp[2]:22 [ print_line_cursor#9 print_line_cursor#0 main::count#2 main::count#1 ] +Allocated (was zp[2]:60) zp[2]:24 [ last_time ] +Allocated (was zp[1]:62) zp[1]:26 [ main::block#1 ] +Allocated (was zp[1]:63) zp[1]:27 [ main::v#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -2291,72 +2178,77 @@ ASSEMBLER BEFORE OPTIMIZATION .label SCREEN2 = $e400 .label CHARSET = $e800 .label print_screen = $400 - .label last_time = $16 - .label print_line_cursor = $14 // The random state variable - .label rand_state = 2 - .label Ticks = 6 - .label Ticks_1 = 4 - .label print_char_cursor = $a + .label rand_state = $e + .label last_time = $18 + .label print_line_cursor = $16 + .label Ticks = 8 + .label Ticks_1 = 2 + .label print_char_cursor = $11 .segment Code // __start __start: { jmp __init1 // __start::__init1 __init1: - // [1] last_time = 0 -- vwuz1=vwuc1 + // [1] rand_state = 1 -- vwuz1=vwuc1 + lda #<1 + sta.z rand_state + lda #>1 + sta.z rand_state+1 + // [2] last_time = 0 -- vwuz1=vwuc1 lda #<0 sta.z last_time lda #>0 sta.z last_time+1 - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [4] call main + // [6] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn // __start::@return __breturn: - // [4] return + // [5] return rts } // main main: { - .label block = $18 - .label v = $19 - .label count = 2 - // [6] call makechar - // [25] phi from main to makechar [phi:main->makechar] + .label block = $1a + .label v = $1b + .label count = $16 + // [7] call makechar + // [26] phi from main to makechar [phi:main->makechar] makechar_from_main: jsr makechar - // [7] phi from main to main::@4 [phi:main->main::@4] + // [8] phi from main to main::@4 [phi:main->main::@4] __b4_from_main: jmp __b4 // main::@4 __b4: - // [8] call start + // [9] call start jsr start jmp __b5 // main::@5 __b5: - // [9] main::block#1 = *((char *)CIA2) -- vbuz1=_deref_pbuc1 + // [10] main::block#1 = *((char *)CIA2) -- vbuz1=_deref_pbuc1 lda CIA2 sta.z block - // [10] main::tmp#1 = main::block#1 & $fc -- vbuaa=vbuz1_band_vbuc1 + // [11] main::tmp#1 = main::block#1 & $fc -- vbuaa=vbuz1_band_vbuc1 lda #$fc and.z block - // [11] *((char *)CIA2) = main::tmp#1 -- _deref_pbuc1=vbuaa + // [12] *((char *)CIA2) = main::tmp#1 -- _deref_pbuc1=vbuaa sta CIA2 - // [12] main::v#1 = *VICII_MEMORY -- vbuz1=_deref_pbuc1 + // [13] main::v#1 = *VICII_MEMORY -- vbuz1=_deref_pbuc1 lda VICII_MEMORY sta.z v - // [13] phi from main::@5 to main::@1 [phi:main::@5->main::@1] + // [14] phi from main::@5 to main::@1 [phi:main::@5->main::@1] __b1_from___b5: - // [13] phi main::count#2 = $1f4 [phi:main::@5->main::@1#0] -- vwuz1=vwuc1 + // [14] phi main::count#2 = $1f4 [phi:main::@5->main::@1#0] -- vwuz1=vwuc1 lda #<$1f4 sta.z count lda #>$1f4 @@ -2365,37 +2257,37 @@ main: { /* Run the demo until a key was hit */ // main::@1 __b1: - // [14] if(0!=main::count#2) goto main::@2 -- 0_neq_vwuz1_then_la1 + // [15] if(0!=main::count#2) goto main::@2 -- 0_neq_vwuz1_then_la1 lda.z count ora.z count+1 bne __b2_from___b1 jmp __b3 // main::@3 __b3: - // [15] *VICII_MEMORY = main::v#1 -- _deref_pbuc1=vbuz1 + // [16] *VICII_MEMORY = main::v#1 -- _deref_pbuc1=vbuz1 lda.z v sta VICII_MEMORY - // [16] *((char *)CIA2) = main::block#1 -- _deref_pbuc1=vbuz1 + // [17] *((char *)CIA2) = main::block#1 -- _deref_pbuc1=vbuz1 lda.z block sta CIA2 - // [17] call end + // [18] call end /* Reset screen colors */ jsr end jmp __breturn // main::@return __breturn: - // [18] return + // [19] return rts - // [19] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [20] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: jmp __b2 // main::@2 __b2: - // [20] call doplasma + // [21] call doplasma /* Build page 1, then make it visible */ - // [61] phi from main::@2 to doplasma [phi:main::@2->doplasma] + // [62] phi from main::@2 to doplasma [phi:main::@2->doplasma] doplasma_from___b2: - // [61] phi doplasma::scrn#13 = SCREEN1 [phi:main::@2->doplasma#0] -- pbuz1=pbuc1 + // [62] phi doplasma::scrn#13 = SCREEN1 [phi:main::@2->doplasma#0] -- pbuz1=pbuc1 lda #SCREEN1 @@ -2404,14 +2296,14 @@ main: { jmp __b6 // main::@6 __b6: - // [21] *VICII_MEMORY = PAGE1 -- _deref_pbuc1=vbuc2 + // [22] *VICII_MEMORY = PAGE1 -- _deref_pbuc1=vbuc2 lda #PAGE1 sta VICII_MEMORY - // [22] call doplasma + // [23] call doplasma /* Build page 2, then make it visible */ - // [61] phi from main::@6 to doplasma [phi:main::@6->doplasma] + // [62] phi from main::@6 to doplasma [phi:main::@6->doplasma] doplasma_from___b6: - // [61] phi doplasma::scrn#13 = SCREEN2 [phi:main::@6->doplasma#0] -- pbuz1=pbuc1 + // [62] phi doplasma::scrn#13 = SCREEN2 [phi:main::@6->doplasma#0] -- pbuz1=pbuc1 lda #SCREEN2 @@ -2420,38 +2312,33 @@ main: { jmp __b7 // main::@7 __b7: - // [23] *VICII_MEMORY = PAGE2 -- _deref_pbuc1=vbuc2 + // [24] *VICII_MEMORY = PAGE2 -- _deref_pbuc1=vbuc2 lda #PAGE2 sta VICII_MEMORY - // [24] main::count#1 = -- main::count#2 -- vwuz1=_dec_vwuz1 + // [25] main::count#1 = -- main::count#2 -- vwuz1=_dec_vwuz1 lda.z count bne !+ dec.z count+1 !: dec.z count - // [13] phi from main::@7 to main::@1 [phi:main::@7->main::@1] + // [14] phi from main::@7 to main::@1 [phi:main::@7->main::@1] __b1_from___b7: - // [13] phi main::count#2 = main::count#1 [phi:main::@7->main::@1#0] -- register_copy + // [14] phi main::count#2 = main::count#1 [phi:main::@7->main::@1#0] -- register_copy jmp __b1 } // makechar makechar: { - .label __3 = $a - .label __4 = $c - .label __7 = $14 - .label __8 = $14 - .label s = $12 - .label c = $d - .label i = $f - .label __10 = $14 - // [26] phi from makechar to makechar::@1 [phi:makechar->makechar::@1] + .label __3 = 8 + .label __4 = $a + .label __7 = $11 + .label __8 = $11 + .label s = $14 + .label c = $b + .label i = $d + .label __10 = $11 + // [27] phi from makechar to makechar::@1 [phi:makechar->makechar::@1] __b1_from_makechar: - // [26] phi rand_state#14 = 1 [phi:makechar->makechar::@1#0] -- vwuz1=vwuc1 - lda #<1 - sta.z rand_state - lda #>1 - sta.z rand_state+1 - // [26] phi makechar::c#3 = 0 [phi:makechar->makechar::@1#1] -- vwuz1=vbuc1 + // [27] phi makechar::c#3 = 0 [phi:makechar->makechar::@1#0] -- vwuz1=vbuc1 lda #<0 sta.z c lda #>0 @@ -2459,7 +2346,7 @@ makechar: { jmp __b1 // makechar::@1 __b1: - // [27] if(makechar::c#3<$100) goto makechar::@2 -- vwuz1_lt_vwuc1_then_la1 + // [28] if(makechar::c#3<$100) goto makechar::@2 -- vwuz1_lt_vwuc1_then_la1 lda.z c+1 cmp #>$100 bcc __b2 @@ -2471,58 +2358,55 @@ makechar: { jmp __breturn // makechar::@return __breturn: - // [28] return + // [29] return rts // makechar::@2 __b2: - // [29] makechar::$9 = (char)makechar::c#3 -- vbuxx=_byte_vwuz1 + // [30] makechar::$9 = (char)makechar::c#3 -- vbuxx=_byte_vwuz1 ldx.z c - // [30] makechar::s#1 = sinetable[makechar::$9] -- vbuz1=pbuc1_derefidx_vbuxx + // [31] makechar::s#1 = sinetable[makechar::$9] -- vbuz1=pbuc1_derefidx_vbuxx lda sinetable,x sta.z s - // [31] phi from makechar::@2 to makechar::@3 [phi:makechar::@2->makechar::@3] + // [32] phi from makechar::@2 to makechar::@3 [phi:makechar::@2->makechar::@3] __b3_from___b2: - // [31] phi rand_state#25 = rand_state#14 [phi:makechar::@2->makechar::@3#0] -- register_copy - // [31] phi makechar::i#3 = 0 [phi:makechar::@2->makechar::@3#1] -- vbuz1=vbuc1 + // [32] phi makechar::i#3 = 0 [phi:makechar::@2->makechar::@3#0] -- vbuz1=vbuc1 lda #0 sta.z i jmp __b3 // makechar::@3 __b3: - // [32] if(makechar::i#3<8) goto makechar::@5 -- vbuz1_lt_vbuc1_then_la1 + // [33] if(makechar::i#3<8) goto makechar::@5 -- vbuz1_lt_vbuc1_then_la1 lda.z i cmp #8 bcc __b5_from___b3 jmp __b4 // makechar::@4 __b4: - // [33] makechar::c#2 = ++ makechar::c#3 -- vwuz1=_inc_vwuz1 + // [34] makechar::c#2 = ++ makechar::c#3 -- vwuz1=_inc_vwuz1 inc.z c bne !+ inc.z c+1 !: - // [26] phi from makechar::@4 to makechar::@1 [phi:makechar::@4->makechar::@1] + // [27] phi from makechar::@4 to makechar::@1 [phi:makechar::@4->makechar::@1] __b1_from___b4: - // [26] phi rand_state#14 = rand_state#25 [phi:makechar::@4->makechar::@1#0] -- register_copy - // [26] phi makechar::c#3 = makechar::c#2 [phi:makechar::@4->makechar::@1#1] -- register_copy + // [27] phi makechar::c#3 = makechar::c#2 [phi:makechar::@4->makechar::@1#0] -- register_copy jmp __b1 - // [34] phi from makechar::@3 to makechar::@5 [phi:makechar::@3->makechar::@5] + // [35] phi from makechar::@3 to makechar::@5 [phi:makechar::@3->makechar::@5] __b5_from___b3: - // [34] phi rand_state#19 = rand_state#25 [phi:makechar::@3->makechar::@5#0] -- register_copy - // [34] phi makechar::b#3 = 0 [phi:makechar::@3->makechar::@5#1] -- vbuyy=vbuc1 + // [35] phi makechar::b#3 = 0 [phi:makechar::@3->makechar::@5#0] -- vbuyy=vbuc1 ldy #0 - // [34] phi makechar::ii#3 = 0 [phi:makechar::@3->makechar::@5#2] -- vbuxx=vbuc1 + // [35] phi makechar::ii#3 = 0 [phi:makechar::@3->makechar::@5#1] -- vbuxx=vbuc1 ldx #0 jmp __b5 // makechar::@5 __b5: - // [35] if(makechar::ii#3<8) goto makechar::@6 -- vbuxx_lt_vbuc1_then_la1 + // [36] if(makechar::ii#3<8) goto makechar::@6 -- vbuxx_lt_vbuc1_then_la1 cpx #8 bcc __b6_from___b5 jmp __b7 // makechar::@7 __b7: - // [36] makechar::$7 = makechar::c#3 << 3 -- vwuz1=vwuz2_rol_3 + // [37] makechar::$7 = makechar::c#3 << 3 -- vwuz1=vwuz2_rol_3 lda.z c asl sta.z __7 @@ -2533,7 +2417,7 @@ makechar: { rol.z __7+1 asl.z __7 rol.z __7+1 - // [37] makechar::$8 = makechar::$7 + makechar::i#3 -- vwuz1=vwuz1_plus_vbuz2 + // [38] makechar::$8 = makechar::$7 + makechar::i#3 -- vwuz1=vwuz1_plus_vbuz2 lda.z i clc adc.z __8 @@ -2541,7 +2425,7 @@ makechar: { bcc !+ inc.z __8+1 !: - // [38] makechar::$10 = CHARSET + makechar::$8 -- pbuz1=pbuc1_plus_vwuz1 + // [39] makechar::$10 = CHARSET + makechar::$8 -- pbuz1=pbuc1_plus_vwuz1 lda.z __10 clc adc #CHARSET sta.z __10+1 - // [39] *makechar::$10 = makechar::b#3 -- _deref_pbuz1=vbuyy + // [40] *makechar::$10 = makechar::b#3 -- _deref_pbuz1=vbuyy tya ldy #0 sta (__10),y - // [40] makechar::i#2 = ++ makechar::i#3 -- vbuz1=_inc_vbuz1 + // [41] makechar::i#2 = ++ makechar::i#3 -- vbuz1=_inc_vbuz1 inc.z i - // [31] phi from makechar::@7 to makechar::@3 [phi:makechar::@7->makechar::@3] + // [32] phi from makechar::@7 to makechar::@3 [phi:makechar::@7->makechar::@3] __b3_from___b7: - // [31] phi rand_state#25 = rand_state#19 [phi:makechar::@7->makechar::@3#0] -- register_copy - // [31] phi makechar::i#3 = makechar::i#2 [phi:makechar::@7->makechar::@3#1] -- register_copy + // [32] phi makechar::i#3 = makechar::i#2 [phi:makechar::@7->makechar::@3#0] -- register_copy jmp __b3 - // [41] phi from makechar::@5 to makechar::@6 [phi:makechar::@5->makechar::@6] + // [42] phi from makechar::@5 to makechar::@6 [phi:makechar::@5->makechar::@6] __b6_from___b5: jmp __b6 // makechar::@6 __b6: - // [42] call rand + // [43] call rand jsr rand - // [43] rand::return#2 = rand::return#0 + // [44] rand::return#2 = rand::return#0 jmp __b10 // makechar::@10 __b10: - // [44] makechar::$3 = rand::return#2 - // [45] makechar::$4 = makechar::$3 & $ff -- vbuz1=vwuz2_band_vbuc1 + // [45] makechar::$3 = rand::return#2 + // [46] makechar::$4 = makechar::$3 & $ff -- vbuz1=vwuz2_band_vbuc1 lda #$ff and.z __3 sta.z __4 - // [46] if(makechar::$4<=makechar::s#1) goto makechar::@8 -- vbuz1_le_vbuz2_then_la1 + // [47] if(makechar::$4<=makechar::s#1) goto makechar::@8 -- vbuz1_le_vbuz2_then_la1 lda.z s cmp.z __4 bcs __b8_from___b10 jmp __b9 // makechar::@9 __b9: - // [47] makechar::b#2 = makechar::b#3 | bittab[makechar::ii#3] -- vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx + // [48] makechar::b#2 = makechar::b#3 | bittab[makechar::ii#3] -- vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx tya ora bittab,x tay - // [48] phi from makechar::@10 makechar::@9 to makechar::@8 [phi:makechar::@10/makechar::@9->makechar::@8] + // [49] phi from makechar::@10 makechar::@9 to makechar::@8 [phi:makechar::@10/makechar::@9->makechar::@8] __b8_from___b10: __b8_from___b9: - // [48] phi makechar::b#7 = makechar::b#3 [phi:makechar::@10/makechar::@9->makechar::@8#0] -- register_copy + // [49] phi makechar::b#7 = makechar::b#3 [phi:makechar::@10/makechar::@9->makechar::@8#0] -- register_copy jmp __b8 // makechar::@8 __b8: - // [49] makechar::ii#2 = ++ makechar::ii#3 -- vbuxx=_inc_vbuxx + // [50] makechar::ii#2 = ++ makechar::ii#3 -- vbuxx=_inc_vbuxx inx - // [34] phi from makechar::@8 to makechar::@5 [phi:makechar::@8->makechar::@5] + // [35] phi from makechar::@8 to makechar::@5 [phi:makechar::@8->makechar::@5] __b5_from___b8: - // [34] phi rand_state#19 = rand_state#12 [phi:makechar::@8->makechar::@5#0] -- register_copy - // [34] phi makechar::b#3 = makechar::b#7 [phi:makechar::@8->makechar::@5#1] -- register_copy - // [34] phi makechar::ii#3 = makechar::ii#2 [phi:makechar::@8->makechar::@5#2] -- register_copy + // [35] phi makechar::b#3 = makechar::b#7 [phi:makechar::@8->makechar::@5#0] -- register_copy + // [35] phi makechar::ii#3 = makechar::ii#2 [phi:makechar::@8->makechar::@5#1] -- register_copy jmp __b5 } // start @@ -2613,22 +2495,22 @@ start: { jmp __breturn // start::@return __breturn: - // [51] return + // [52] return rts } // end end: { - // [52] Ticks#0 = last_time -- vwuz1=vwuz2 + // [53] Ticks#0 = last_time -- vwuz1=vwuz2 lda.z last_time sta.z Ticks lda.z last_time+1 sta.z Ticks+1 - // [53] call start + // [54] call start jsr start jmp __b1 // end::@1 __b1: - // [54] last_time = last_time - Ticks#0 -- vwuz1=vwuz1_minus_vwuz2 + // [55] last_time = last_time - Ticks#0 -- vwuz1=vwuz1_minus_vwuz2 lda.z last_time sec sbc.z Ticks @@ -2636,107 +2518,107 @@ end: { lda.z last_time+1 sbc.z Ticks+1 sta.z last_time+1 - // [55] Ticks#1 = last_time -- vwuz1=vwuz2 + // [56] Ticks#1 = last_time -- vwuz1=vwuz2 lda.z last_time sta.z Ticks_1 lda.z last_time+1 sta.z Ticks_1+1 - // [56] print_uint::w#0 = Ticks#1 - // [57] call print_uint + // [57] print_uint::w#0 = Ticks#1 + // [58] call print_uint jsr print_uint - // [58] phi from end::@1 to end::@2 [phi:end::@1->end::@2] + // [59] phi from end::@1 to end::@2 [phi:end::@1->end::@2] __b2_from___b1: jmp __b2 // end::@2 __b2: - // [59] call print_ln - // [99] phi from end::@2 to print_ln [phi:end::@2->print_ln] + // [60] call print_ln + // [100] phi from end::@2 to print_ln [phi:end::@2->print_ln] print_ln_from___b2: jsr print_ln jmp __breturn // end::@return __breturn: - // [60] return + // [61] return rts } // doplasma -// void doplasma(__zp($d) char *scrn) +// void doplasma(__zp($b) char *scrn) doplasma: { .const c2A = 0 .const c2B = 0 - .label c1a = $12 - .label c1b = $c - .label ii = $f - .label c2a = $13 - .label c2b = $11 + .label c1a = $14 + .label c1b = $a + .label ii = $d + .label c2a = $15 + .label c2b = $13 .label i = $10 - .label scrn = $d - // [62] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1] + .label scrn = $b + // [63] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1] __b1_from_doplasma: - // [62] phi doplasma::c1b#3 = 0 [phi:doplasma->doplasma::@1#0] -- vbuz1=vbuc1 + // [63] phi doplasma::c1b#3 = 0 [phi:doplasma->doplasma::@1#0] -- vbuz1=vbuc1 lda #0 sta.z c1b - // [62] phi doplasma::c1a#3 = 0 [phi:doplasma->doplasma::@1#1] -- vbuz1=vbuc1 + // [63] phi doplasma::c1a#3 = 0 [phi:doplasma->doplasma::@1#1] -- vbuz1=vbuc1 lda #0 sta.z c1a - // [62] phi doplasma::ii#3 = 0 [phi:doplasma->doplasma::@1#2] -- vbuz1=vbuc1 + // [63] phi doplasma::ii#3 = 0 [phi:doplasma->doplasma::@1#2] -- vbuz1=vbuc1 lda #0 sta.z ii jmp __b1 // doplasma::@1 __b1: - // [63] if(doplasma::ii#3<$19) goto doplasma::@2 -- vbuz1_lt_vbuc1_then_la1 + // [64] if(doplasma::ii#3<$19) goto doplasma::@2 -- vbuz1_lt_vbuc1_then_la1 lda.z ii cmp #$19 bcc __b2 - // [64] phi from doplasma::@1 to doplasma::@3 [phi:doplasma::@1->doplasma::@3] + // [65] phi from doplasma::@1 to doplasma::@3 [phi:doplasma::@1->doplasma::@3] __b3_from___b1: - // [64] phi doplasma::c2b#3 = doplasma::c2B#0 [phi:doplasma::@1->doplasma::@3#0] -- vbuz1=vbuc1 + // [65] phi doplasma::c2b#3 = doplasma::c2B#0 [phi:doplasma::@1->doplasma::@3#0] -- vbuz1=vbuc1 lda #c2B sta.z c2b - // [64] phi doplasma::c2a#3 = doplasma::c2A#0 [phi:doplasma::@1->doplasma::@3#1] -- vbuz1=vbuc1 + // [65] phi doplasma::c2a#3 = doplasma::c2A#0 [phi:doplasma::@1->doplasma::@3#1] -- vbuz1=vbuc1 lda #c2A sta.z c2a - // [64] phi doplasma::i#3 = 0 [phi:doplasma::@1->doplasma::@3#2] -- vbuz1=vbuc1 + // [65] phi doplasma::i#3 = 0 [phi:doplasma::@1->doplasma::@3#2] -- vbuz1=vbuc1 lda #0 sta.z i jmp __b3 // doplasma::@3 __b3: - // [65] if(doplasma::i#3<$28) goto doplasma::@4 -- vbuz1_lt_vbuc1_then_la1 + // [66] if(doplasma::i#3<$28) goto doplasma::@4 -- vbuz1_lt_vbuc1_then_la1 lda.z i cmp #$28 bcc __b4 - // [66] phi from doplasma::@3 to doplasma::@5 [phi:doplasma::@3->doplasma::@5] + // [67] phi from doplasma::@3 to doplasma::@5 [phi:doplasma::@3->doplasma::@5] __b5_from___b3: - // [66] phi doplasma::scrn#6 = doplasma::scrn#13 [phi:doplasma::@3->doplasma::@5#0] -- register_copy - // [66] phi doplasma::jj#3 = 0 [phi:doplasma::@3->doplasma::@5#1] -- vbuxx=vbuc1 + // [67] phi doplasma::scrn#6 = doplasma::scrn#13 [phi:doplasma::@3->doplasma::@5#0] -- register_copy + // [67] phi doplasma::jj#3 = 0 [phi:doplasma::@3->doplasma::@5#1] -- vbuxx=vbuc1 ldx #0 jmp __b5 // doplasma::@5 __b5: - // [67] if(doplasma::jj#3<$19) goto doplasma::@6 -- vbuxx_lt_vbuc1_then_la1 + // [68] if(doplasma::jj#3<$19) goto doplasma::@6 -- vbuxx_lt_vbuc1_then_la1 cpx #$19 bcc __b6_from___b5 jmp __breturn // doplasma::@return __breturn: - // [68] return + // [69] return rts - // [69] phi from doplasma::@5 to doplasma::@6 [phi:doplasma::@5->doplasma::@6] + // [70] phi from doplasma::@5 to doplasma::@6 [phi:doplasma::@5->doplasma::@6] __b6_from___b5: - // [69] phi doplasma::j#3 = 0 [phi:doplasma::@5->doplasma::@6#0] -- vbuyy=vbuc1 + // [70] phi doplasma::j#3 = 0 [phi:doplasma::@5->doplasma::@6#0] -- vbuyy=vbuc1 ldy #0 jmp __b6 // doplasma::@6 __b6: - // [70] if(doplasma::j#3<$28) goto doplasma::@7 -- vbuyy_lt_vbuc1_then_la1 + // [71] if(doplasma::j#3<$28) goto doplasma::@7 -- vbuyy_lt_vbuc1_then_la1 cpy #$28 bcc __b7 jmp __b8 // doplasma::@8 __b8: - // [71] doplasma::scrn#0 = doplasma::scrn#6 + $28 -- pbuz1=pbuz1_plus_vbuc1 + // [72] doplasma::scrn#0 = doplasma::scrn#6 + $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z scrn @@ -2744,80 +2626,80 @@ doplasma: { bcc !+ inc.z scrn+1 !: - // [72] doplasma::jj#2 = ++ doplasma::jj#3 -- vbuxx=_inc_vbuxx + // [73] doplasma::jj#2 = ++ doplasma::jj#3 -- vbuxx=_inc_vbuxx inx - // [66] phi from doplasma::@8 to doplasma::@5 [phi:doplasma::@8->doplasma::@5] + // [67] phi from doplasma::@8 to doplasma::@5 [phi:doplasma::@8->doplasma::@5] __b5_from___b8: - // [66] phi doplasma::scrn#6 = doplasma::scrn#0 [phi:doplasma::@8->doplasma::@5#0] -- register_copy - // [66] phi doplasma::jj#3 = doplasma::jj#2 [phi:doplasma::@8->doplasma::@5#1] -- register_copy + // [67] phi doplasma::scrn#6 = doplasma::scrn#0 [phi:doplasma::@8->doplasma::@5#0] -- register_copy + // [67] phi doplasma::jj#3 = doplasma::jj#2 [phi:doplasma::@8->doplasma::@5#1] -- register_copy jmp __b5 // doplasma::@7 __b7: - // [73] doplasma::$6 = xbuf[doplasma::j#3] + ybuf[doplasma::jj#3] -- vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx + // [74] doplasma::$6 = xbuf[doplasma::j#3] + ybuf[doplasma::jj#3] -- vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx lda xbuf,y clc adc ybuf,x - // [74] doplasma::scrn#6[doplasma::j#3] = doplasma::$6 -- pbuz1_derefidx_vbuyy=vbuaa + // [75] doplasma::scrn#6[doplasma::j#3] = doplasma::$6 -- pbuz1_derefidx_vbuyy=vbuaa sta (scrn),y - // [75] doplasma::j#2 = ++ doplasma::j#3 -- vbuyy=_inc_vbuyy + // [76] doplasma::j#2 = ++ doplasma::j#3 -- vbuyy=_inc_vbuyy iny - // [69] phi from doplasma::@7 to doplasma::@6 [phi:doplasma::@7->doplasma::@6] + // [70] phi from doplasma::@7 to doplasma::@6 [phi:doplasma::@7->doplasma::@6] __b6_from___b7: - // [69] phi doplasma::j#3 = doplasma::j#2 [phi:doplasma::@7->doplasma::@6#0] -- register_copy + // [70] phi doplasma::j#3 = doplasma::j#2 [phi:doplasma::@7->doplasma::@6#0] -- register_copy jmp __b6 // doplasma::@4 __b4: - // [76] doplasma::$3 = sinetable[doplasma::c2a#3] + sinetable[doplasma::c2b#3] -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 + // [77] doplasma::$3 = sinetable[doplasma::c2a#3] + sinetable[doplasma::c2b#3] -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 ldy.z c2a lda sinetable,y ldy.z c2b clc adc sinetable,y - // [77] xbuf[doplasma::i#3] = doplasma::$3 -- pbuc1_derefidx_vbuz1=vbuaa + // [78] xbuf[doplasma::i#3] = doplasma::$3 -- pbuc1_derefidx_vbuz1=vbuaa ldy.z i sta xbuf,y - // [78] doplasma::c2a#2 = doplasma::c2a#3 + 3 -- vbuz1=vbuz1_plus_vbuc1 + // [79] doplasma::c2a#2 = doplasma::c2a#3 + 3 -- vbuz1=vbuz1_plus_vbuc1 lax.z c2a axs #-[3] stx.z c2a - // [79] doplasma::c2b#2 = doplasma::c2b#3 + 7 -- vbuz1=vbuz1_plus_vbuc1 + // [80] doplasma::c2b#2 = doplasma::c2b#3 + 7 -- vbuz1=vbuz1_plus_vbuc1 lax.z c2b axs #-[7] stx.z c2b - // [80] doplasma::i#2 = ++ doplasma::i#3 -- vbuz1=_inc_vbuz1 + // [81] doplasma::i#2 = ++ doplasma::i#3 -- vbuz1=_inc_vbuz1 inc.z i - // [64] phi from doplasma::@4 to doplasma::@3 [phi:doplasma::@4->doplasma::@3] + // [65] phi from doplasma::@4 to doplasma::@3 [phi:doplasma::@4->doplasma::@3] __b3_from___b4: - // [64] phi doplasma::c2b#3 = doplasma::c2b#2 [phi:doplasma::@4->doplasma::@3#0] -- register_copy - // [64] phi doplasma::c2a#3 = doplasma::c2a#2 [phi:doplasma::@4->doplasma::@3#1] -- register_copy - // [64] phi doplasma::i#3 = doplasma::i#2 [phi:doplasma::@4->doplasma::@3#2] -- register_copy + // [65] phi doplasma::c2b#3 = doplasma::c2b#2 [phi:doplasma::@4->doplasma::@3#0] -- register_copy + // [65] phi doplasma::c2a#3 = doplasma::c2a#2 [phi:doplasma::@4->doplasma::@3#1] -- register_copy + // [65] phi doplasma::i#3 = doplasma::i#2 [phi:doplasma::@4->doplasma::@3#2] -- register_copy jmp __b3 // doplasma::@2 __b2: - // [81] doplasma::$1 = sinetable[doplasma::c1a#3] + sinetable[doplasma::c1b#3] -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 + // [82] doplasma::$1 = sinetable[doplasma::c1a#3] + sinetable[doplasma::c1b#3] -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 ldy.z c1a lda sinetable,y ldy.z c1b clc adc sinetable,y - // [82] ybuf[doplasma::ii#3] = doplasma::$1 -- pbuc1_derefidx_vbuz1=vbuaa + // [83] ybuf[doplasma::ii#3] = doplasma::$1 -- pbuc1_derefidx_vbuz1=vbuaa ldy.z ii sta ybuf,y - // [83] doplasma::c1a#2 = doplasma::c1a#3 + 4 -- vbuz1=vbuz1_plus_vbuc1 + // [84] doplasma::c1a#2 = doplasma::c1a#3 + 4 -- vbuz1=vbuz1_plus_vbuc1 lax.z c1a axs #-[4] stx.z c1a - // [84] doplasma::c1b#2 = doplasma::c1b#3 + 9 -- vbuz1=vbuz1_plus_vbuc1 + // [85] doplasma::c1b#2 = doplasma::c1b#3 + 9 -- vbuz1=vbuz1_plus_vbuc1 lax.z c1b axs #-[9] stx.z c1b - // [85] doplasma::ii#2 = ++ doplasma::ii#3 -- vbuz1=_inc_vbuz1 + // [86] doplasma::ii#2 = ++ doplasma::ii#3 -- vbuz1=_inc_vbuz1 inc.z ii - // [62] phi from doplasma::@2 to doplasma::@1 [phi:doplasma::@2->doplasma::@1] + // [63] phi from doplasma::@2 to doplasma::@1 [phi:doplasma::@2->doplasma::@1] __b1_from___b2: - // [62] phi doplasma::c1b#3 = doplasma::c1b#2 [phi:doplasma::@2->doplasma::@1#0] -- register_copy - // [62] phi doplasma::c1a#3 = doplasma::c1a#2 [phi:doplasma::@2->doplasma::@1#1] -- register_copy - // [62] phi doplasma::ii#3 = doplasma::ii#2 [phi:doplasma::@2->doplasma::@1#2] -- register_copy + // [63] phi doplasma::c1b#3 = doplasma::c1b#2 [phi:doplasma::@2->doplasma::@1#0] -- register_copy + // [63] phi doplasma::c1a#3 = doplasma::c1a#2 [phi:doplasma::@2->doplasma::@1#1] -- register_copy + // [63] phi doplasma::ii#3 = doplasma::ii#2 [phi:doplasma::@2->doplasma::@1#2] -- register_copy jmp __b1 } // rand @@ -2826,11 +2708,11 @@ doplasma: { // Information https://en.wikipedia.org/wiki/Xorshift // Source http://www.retroprogramming.com/2017/07/xorshift-pseudorandom-numbers-in-z80.html rand: { - .label __0 = 6 + .label __0 = 2 .label __1 = 4 - .label __2 = 8 - .label return = $a - // [86] rand::$0 = rand_state#19 << 7 -- vwuz1=vwuz2_rol_7 + .label __2 = 6 + .label return = 8 + // [87] rand::$0 = rand_state << 7 -- vwuz1=vwuz2_rol_7 lda.z rand_state+1 lsr lda.z rand_state @@ -2839,39 +2721,39 @@ rand: { lda #0 ror sta.z __0 - // [87] rand_state#0 = rand_state#19 ^ rand::$0 -- vwuz1=vwuz1_bxor_vwuz2 + // [88] rand_state = rand_state ^ rand::$0 -- vwuz1=vwuz1_bxor_vwuz2 lda.z rand_state eor.z __0 sta.z rand_state lda.z rand_state+1 eor.z __0+1 sta.z rand_state+1 - // [88] rand::$1 = rand_state#0 >> 9 -- vwuz1=vwuz2_ror_9 + // [89] rand::$1 = rand_state >> 9 -- vwuz1=vwuz2_ror_9 lda.z rand_state+1 lsr sta.z __1 lda #0 sta.z __1+1 - // [89] rand_state#1 = rand_state#0 ^ rand::$1 -- vwuz1=vwuz1_bxor_vwuz2 + // [90] rand_state = rand_state ^ rand::$1 -- vwuz1=vwuz1_bxor_vwuz2 lda.z rand_state eor.z __1 sta.z rand_state lda.z rand_state+1 eor.z __1+1 sta.z rand_state+1 - // [90] rand::$2 = rand_state#1 << 8 -- vwuz1=vwuz2_rol_8 + // [91] rand::$2 = rand_state << 8 -- vwuz1=vwuz2_rol_8 lda.z rand_state sta.z __2+1 lda #0 sta.z __2 - // [91] rand_state#12 = rand_state#1 ^ rand::$2 -- vwuz1=vwuz1_bxor_vwuz2 + // [92] rand_state = rand_state ^ rand::$2 -- vwuz1=vwuz1_bxor_vwuz2 lda.z rand_state eor.z __2 sta.z rand_state lda.z rand_state+1 eor.z __2+1 sta.z rand_state+1 - // [92] rand::return#0 = rand_state#12 -- vwuz1=vwuz2 + // [93] rand::return#0 = rand_state -- vwuz1=vwuz2 lda.z rand_state sta.z return lda.z rand_state+1 @@ -2879,61 +2761,61 @@ rand: { jmp __breturn // rand::@return __breturn: - // [93] return + // [94] return rts } // print_uint // Print a unsigned int as HEX -// void print_uint(__zp(4) unsigned int w) +// void print_uint(__zp(2) unsigned int w) print_uint: { - .label w = 4 - // [94] print_uchar::b#0 = byte1 print_uint::w#0 -- vbuxx=_byte1_vwuz1 + .label w = 2 + // [95] print_uchar::b#0 = byte1 print_uint::w#0 -- vbuxx=_byte1_vwuz1 ldx.z w+1 - // [95] call print_uchar - // [104] phi from print_uint to print_uchar [phi:print_uint->print_uchar] + // [96] call print_uchar + // [105] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: - // [104] phi print_char_cursor#37 = print_screen#0 [phi:print_uint->print_uchar#0] -- pbuz1=pbuc1 + // [105] phi print_char_cursor#37 = print_screen#0 [phi:print_uint->print_uchar#0] -- pbuz1=pbuc1 lda #print_screen sta.z print_char_cursor+1 - // [104] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [105] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 __b1: - // [96] print_uchar::b#1 = byte0 print_uint::w#0 -- vbuxx=_byte0_vwuz1 + // [97] print_uchar::b#1 = byte0 print_uint::w#0 -- vbuxx=_byte0_vwuz1 ldx.z w - // [97] call print_uchar - // [104] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] + // [98] call print_uchar + // [105] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: - // [104] phi print_char_cursor#37 = print_char_cursor#27 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [104] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [105] phi print_char_cursor#37 = print_char_cursor#27 [phi:print_uint::@1->print_uchar#0] -- register_copy + // [105] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return __breturn: - // [98] return + // [99] return rts } // print_ln // Print a newline print_ln: { - // [100] phi from print_ln to print_ln::@1 [phi:print_ln->print_ln::@1] + // [101] phi from print_ln to print_ln::@1 [phi:print_ln->print_ln::@1] __b1_from_print_ln: - // [100] phi print_line_cursor#9 = print_screen#0 [phi:print_ln->print_ln::@1#0] -- pbuz1=pbuc1 + // [101] phi print_line_cursor#9 = print_screen#0 [phi:print_ln->print_ln::@1#0] -- pbuz1=pbuc1 lda #print_screen sta.z print_line_cursor+1 jmp __b1 - // [100] phi from print_ln::@1 to print_ln::@1 [phi:print_ln::@1->print_ln::@1] + // [101] phi from print_ln::@1 to print_ln::@1 [phi:print_ln::@1->print_ln::@1] __b1_from___b1: - // [100] phi print_line_cursor#9 = print_line_cursor#0 [phi:print_ln::@1->print_ln::@1#0] -- register_copy + // [101] phi print_line_cursor#9 = print_line_cursor#0 [phi:print_ln::@1->print_ln::@1#0] -- register_copy jmp __b1 // print_ln::@1 __b1: - // [101] print_line_cursor#0 = print_line_cursor#9 + $28 -- pbuz1=pbuz1_plus_vbuc1 + // [102] print_line_cursor#0 = print_line_cursor#9 + $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z print_line_cursor @@ -2941,7 +2823,7 @@ print_ln: { bcc !+ inc.z print_line_cursor+1 !: - // [102] if(print_line_cursor#0> 4 -- vbuaa=vbuxx_ror_4 + // [106] print_uchar::$0 = print_uchar::b#2 >> 4 -- vbuaa=vbuxx_ror_4 txa lsr lsr lsr lsr - // [106] print_char::ch#0 = print_hextab[print_uchar::$0] -- vbuaa=pbuc1_derefidx_vbuaa + // [107] print_char::ch#0 = print_hextab[print_uchar::$0] -- vbuaa=pbuc1_derefidx_vbuaa tay lda print_hextab,y - // [107] call print_char + // [108] call print_char // Table of hexadecimal digits - // [112] phi from print_uchar to print_char [phi:print_uchar->print_char] + // [113] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: - // [112] phi print_char_cursor#26 = print_char_cursor#37 [phi:print_uchar->print_char#0] -- register_copy - // [112] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [113] phi print_char_cursor#26 = print_char_cursor#37 [phi:print_uchar->print_char#0] -- register_copy + // [113] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 __b1: - // [108] print_uchar::$2 = print_uchar::b#2 & $f -- vbuxx=vbuxx_band_vbuc1 + // [109] print_uchar::$2 = print_uchar::b#2 & $f -- vbuxx=vbuxx_band_vbuc1 lda #$f axs #0 - // [109] print_char::ch#1 = print_hextab[print_uchar::$2] -- vbuaa=pbuc1_derefidx_vbuxx + // [110] print_char::ch#1 = print_hextab[print_uchar::$2] -- vbuaa=pbuc1_derefidx_vbuxx lda print_hextab,x - // [110] call print_char - // [112] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] + // [111] call print_char + // [113] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: - // [112] phi print_char_cursor#26 = print_char_cursor#27 [phi:print_uchar::@1->print_char#0] -- register_copy - // [112] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [113] phi print_char_cursor#26 = print_char_cursor#27 [phi:print_uchar::@1->print_char#0] -- register_copy + // [113] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return __breturn: - // [111] return + // [112] return rts } // print_char // Print a single char // void print_char(__register(A) char ch) print_char: { - // [113] *print_char_cursor#26 = print_char::ch#2 -- _deref_pbuz1=vbuaa + // [114] *print_char_cursor#26 = print_char::ch#2 -- _deref_pbuz1=vbuaa ldy #0 sta (print_char_cursor),y - // [114] print_char_cursor#27 = ++ print_char_cursor#26 -- pbuz1=_inc_pbuz1 + // [115] print_char_cursor#27 = ++ print_char_cursor#26 -- pbuz1=_inc_pbuz1 inc.z print_char_cursor bne !+ inc.z print_char_cursor+1 @@ -3011,7 +2893,7 @@ print_char: { jmp __breturn // print_char::@return __breturn: - // [115] return + // [116] return rts } // File Data @@ -3064,9 +2946,9 @@ Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination -Removing instruction lda #>0 Removing instruction lda #<0 Removing instruction lda #>0 +Removing instruction lda #>0 Removing instruction lda #0 Removing instruction lda #0 Removing instruction lda.z rand_state+1 @@ -3155,8 +3037,8 @@ __constant char RADIX::OCTAL = 8 __constant char * const SCREEN1 = (char *) 57344 __constant char * const SCREEN2 = (char *) 58368 unsigned int Ticks -unsigned int Ticks#0 // Ticks zp[2]:6 101.0 -unsigned int Ticks#1 // Ticks_1 zp[2]:4 202.0 +unsigned int Ticks#0 // Ticks zp[2]:8 101.0 +unsigned int Ticks#1 // Ticks_1 zp[2]:2 202.0 __constant char * const VICII_MEMORY = (char *) 53272 void __start() __constant const char bittab[] = { 1, 2, 4, 8, $10, $20, $40, $80 } @@ -3167,27 +3049,27 @@ char doplasma::$6 // reg byte a 2000002.0 char doplasma::c1A char doplasma::c1B char doplasma::c1a -char doplasma::c1a#2 // c1a zp[1]:18 66667.33333333333 -char doplasma::c1a#3 // c1a zp[1]:18 75000.75 +char doplasma::c1a#2 // c1a zp[1]:20 66667.33333333333 +char doplasma::c1a#3 // c1a zp[1]:20 75000.75 char doplasma::c1b -char doplasma::c1b#2 // c1b zp[1]:12 100001.0 -char doplasma::c1b#3 // c1b zp[1]:12 60000.600000000006 +char doplasma::c1b#2 // c1b zp[1]:10 100001.0 +char doplasma::c1b#3 // c1b zp[1]:10 60000.600000000006 char doplasma::c2A __constant char doplasma::c2A#0 = 0 // c2A char doplasma::c2B __constant char doplasma::c2B#0 = 0 // c2B char doplasma::c2a -char doplasma::c2a#2 // c2a zp[1]:19 66667.33333333333 -char doplasma::c2a#3 // c2a zp[1]:19 75000.75 +char doplasma::c2a#2 // c2a zp[1]:21 66667.33333333333 +char doplasma::c2a#3 // c2a zp[1]:21 75000.75 char doplasma::c2b -char doplasma::c2b#2 // c2b zp[1]:17 100001.0 -char doplasma::c2b#3 // c2b zp[1]:17 60000.600000000006 +char doplasma::c2b#2 // c2b zp[1]:19 100001.0 +char doplasma::c2b#3 // c2b zp[1]:19 60000.600000000006 char doplasma::i char doplasma::i#2 // i zp[1]:16 200002.0 char doplasma::i#3 // i zp[1]:16 66667.33333333333 char doplasma::ii -char doplasma::ii#2 // ii zp[1]:15 200002.0 -char doplasma::ii#3 // ii zp[1]:15 66667.33333333333 +char doplasma::ii#2 // ii zp[1]:13 200002.0 +char doplasma::ii#3 // ii zp[1]:13 66667.33333333333 char doplasma::j char doplasma::j#2 // reg byte y 2000002.0 char doplasma::j#3 // reg byte y 1250001.25 @@ -3195,57 +3077,57 @@ char doplasma::jj char doplasma::jj#2 // reg byte x 200002.0 char doplasma::jj#3 // reg byte x 162500.5 char *doplasma::scrn -char *doplasma::scrn#0 // scrn zp[2]:13 100001.0 -char *doplasma::scrn#13 // scrn zp[2]:13 6666.733333333334 -char *doplasma::scrn#6 // scrn zp[2]:13 185714.85714285713 +char *doplasma::scrn#0 // scrn zp[2]:11 100001.0 +char *doplasma::scrn#13 // scrn zp[2]:11 6666.733333333334 +char *doplasma::scrn#6 // scrn zp[2]:11 185714.85714285713 void end() -__loadstore volatile unsigned int last_time // zp[2]:22 17.652173913043477 +__loadstore volatile unsigned int last_time // zp[2]:24 17.652173913043477 int main() char main::block -char main::block#1 // block zp[1]:24 2.5384615384615383 +char main::block#1 // block zp[1]:26 2.5384615384615383 unsigned int main::count -unsigned int main::count#1 // count zp[2]:2 202.0 -unsigned int main::count#2 // count zp[2]:2 43.285714285714285 +unsigned int main::count#1 // count zp[2]:22 202.0 +unsigned int main::count#2 // count zp[2]:22 43.285714285714285 int main::return char main::tmp char main::tmp#1 // reg byte a 22.0 char main::v -char main::v#1 // v zp[1]:25 2.4444444444444446 +char main::v#1 // v zp[1]:27 2.4444444444444446 void makechar() -char *makechar::$10 // zp[2]:20 20002.0 -unsigned int makechar::$3 // zp[2]:10 200002.0 -char makechar::$4 // zp[1]:12 200002.0 -unsigned int makechar::$7 // zp[2]:20 20002.0 -unsigned int makechar::$8 // zp[2]:20 20002.0 +char *makechar::$10 // zp[2]:17 20002.0 +unsigned int makechar::$3 // zp[2]:8 200002.0 +char makechar::$4 // zp[1]:10 200002.0 +unsigned int makechar::$7 // zp[2]:17 20002.0 +unsigned int makechar::$8 // zp[2]:17 20002.0 char makechar::$9 // reg byte x 2002.0 char makechar::b char makechar::b#2 // reg byte y 200002.0 char makechar::b#3 // reg byte y 28182.181818181816 char makechar::b#7 // reg byte y 150001.5 unsigned int makechar::c -unsigned int makechar::c#2 // c zp[2]:13 2002.0 -unsigned int makechar::c#3 // c zp[2]:13 591.090909090909 +unsigned int makechar::c#2 // c zp[2]:11 2002.0 +unsigned int makechar::c#3 // c zp[2]:11 591.090909090909 char makechar::i -char makechar::i#2 // i zp[1]:15 20002.0 -char makechar::i#3 // i zp[1]:15 2353.176470588235 +char makechar::i#2 // i zp[1]:13 20002.0 +char makechar::i#3 // i zp[1]:13 2353.176470588235 char makechar::ii char makechar::ii#2 // reg byte x 200002.0 char makechar::ii#3 // reg byte x 40000.4 char makechar::s -char makechar::s#1 // s zp[1]:18 5315.894736842105 +char makechar::s#1 // s zp[1]:20 5315.894736842105 void print_char(char ch) char print_char::ch char print_char::ch#0 // reg byte a 20002.0 char print_char::ch#1 // reg byte a 20002.0 char print_char::ch#2 // reg byte a 120003.0 char *print_char_cursor -char *print_char_cursor#26 // print_char_cursor zp[2]:10 110002.0 -char *print_char_cursor#27 // print_char_cursor zp[2]:10 7117.882352941177 -char *print_char_cursor#37 // print_char_cursor zp[2]:10 3667.333333333333 +char *print_char_cursor#26 // print_char_cursor zp[2]:17 110002.0 +char *print_char_cursor#27 // print_char_cursor zp[2]:17 7117.882352941177 +char *print_char_cursor#37 // print_char_cursor zp[2]:17 3667.333333333333 __constant const char print_hextab[] = "0123456789abcdef"z char *print_line_cursor -char *print_line_cursor#0 // print_line_cursor zp[2]:20 15001.5 -char *print_line_cursor#9 // print_line_cursor zp[2]:20 20002.0 +char *print_line_cursor#0 // print_line_cursor zp[2]:22 15001.5 +char *print_line_cursor#9 // print_line_cursor zp[2]:22 20002.0 void print_ln() char *print_screen __constant char *print_screen#0 = (char *) 1024 // print_screen @@ -3258,60 +3140,55 @@ char print_uchar::b#1 // reg byte x 2002.0 char print_uchar::b#2 // reg byte x 5501.0 void print_uint(unsigned int w) unsigned int print_uint::w -unsigned int print_uint::w#0 // w zp[2]:4 701.0 +unsigned int print_uint::w#0 // w zp[2]:2 701.0 unsigned int rand() -unsigned int rand::$0 // zp[2]:6 2000002.0 +unsigned int rand::$0 // zp[2]:2 2000002.0 unsigned int rand::$1 // zp[2]:4 2000002.0 -unsigned int rand::$2 // zp[2]:8 2000002.0 +unsigned int rand::$2 // zp[2]:6 2000002.0 unsigned int rand::return -unsigned int rand::return#0 // return zp[2]:10 366667.3333333334 -unsigned int rand::return#2 // return zp[2]:10 200002.0 -unsigned int rand_state -unsigned int rand_state#0 // rand_state zp[2]:2 1500001.5 -unsigned int rand_state#1 // rand_state zp[2]:2 1500001.5 -unsigned int rand_state#12 // rand_state zp[2]:2 190909.36363636365 -unsigned int rand_state#14 // rand_state zp[2]:2 500.5 -unsigned int rand_state#19 // rand_state zp[2]:2 235556.11111111112 -unsigned int rand_state#25 // rand_state zp[2]:2 7334.666666666666 +unsigned int rand::return#0 // return zp[2]:8 366667.3333333334 +unsigned int rand::return#2 // return zp[2]:8 200002.0 +__loadstore volatile unsigned int rand_state // zp[2]:14 277778.1111111111 __constant const char sinetable[$100] = { $80, $7d, $7a, $77, $74, $70, $6d, $6a, $67, $64, $61, $5e, $5b, $58, $55, $52, $4f, $4d, $4a, $47, $44, $41, $3f, $3c, $39, $37, $34, $32, $2f, $2d, $2b, $28, $26, $24, $22, $20, $1e, $1c, $1a, $18, $16, $15, $13, $11, $10, $f, $d, $c, $b, $a, 8, 7, 6, 6, 5, 4, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 8, $a, $b, $c, $d, $f, $10, $11, $13, $15, $16, $18, $1a, $1c, $1e, $20, $22, $24, $26, $28, $2b, $2d, $2f, $32, $34, $37, $39, $3c, $3f, $41, $44, $47, $4a, $4d, $4f, $52, $55, $58, $5b, $5e, $61, $64, $67, $6a, $6d, $70, $74, $77, $7a, $7d, $80, $83, $86, $89, $8c, $90, $93, $96, $99, $9c, $9f, $a2, $a5, $a8, $ab, $ae, $b1, $b3, $b6, $b9, $bc, $bf, $c1, $c4, $c7, $c9, $cc, $ce, $d1, $d3, $d5, $d8, $da, $dc, $de, $e0, $e2, $e4, $e6, $e8, $ea, $eb, $ed, $ef, $f0, $f1, $f3, $f4, $f5, $f6, $f8, $f9, $fa, $fa, $fb, $fc, $fd, $fd, $fe, $fe, $fe, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $fe, $fe, $fe, $fd, $fd, $fc, $fb, $fa, $fa, $f9, $f8, $f6, $f5, $f4, $f3, $f1, $f0, $ef, $ed, $eb, $ea, $e8, $e6, $e4, $e2, $e0, $de, $dc, $da, $d8, $d5, $d3, $d1, $ce, $cc, $c9, $c7, $c4, $c1, $bf, $bc, $b9, $b6, $b3, $b1, $ae, $ab, $a8, $a5, $a2, $9f, $9c, $99, $96, $93, $90, $8c, $89, $86, $83 } void start() __constant unsigned int * const start::LAST_TIME = &last_time __constant char xbuf[$28] = { fill( $28, 0) } __constant char ybuf[$19] = { fill( $19, 0) } -zp[2]:2 [ rand_state#14 rand_state#25 rand_state#19 rand_state#12 rand_state#0 rand_state#1 main::count#2 main::count#1 ] reg byte x [ makechar::ii#3 makechar::ii#2 ] reg byte y [ makechar::b#3 makechar::b#7 makechar::b#2 ] -zp[1]:15 [ doplasma::ii#3 doplasma::ii#2 makechar::i#3 makechar::i#2 ] +zp[1]:13 [ doplasma::ii#3 doplasma::ii#2 makechar::i#3 makechar::i#2 ] zp[1]:16 [ doplasma::i#3 doplasma::i#2 ] -zp[1]:19 [ doplasma::c2a#3 doplasma::c2a#2 ] -zp[1]:17 [ doplasma::c2b#3 doplasma::c2b#2 ] +zp[1]:21 [ doplasma::c2a#3 doplasma::c2a#2 ] +zp[1]:19 [ doplasma::c2b#3 doplasma::c2b#2 ] reg byte x [ doplasma::jj#3 doplasma::jj#2 ] -zp[2]:13 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 makechar::c#3 makechar::c#2 ] +zp[2]:11 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 makechar::c#3 makechar::c#2 ] reg byte y [ doplasma::j#3 doplasma::j#2 ] +zp[2]:22 [ print_line_cursor#9 print_line_cursor#0 main::count#2 main::count#1 ] reg byte x [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] -zp[2]:22 [ last_time ] -zp[1]:24 [ main::block#1 ] +zp[2]:14 [ rand_state ] +zp[2]:24 [ last_time ] +zp[1]:26 [ main::block#1 ] reg byte a [ main::tmp#1 ] -zp[1]:25 [ main::v#1 ] +zp[1]:27 [ main::v#1 ] reg byte x [ makechar::$9 ] -zp[1]:18 [ makechar::s#1 doplasma::c1a#3 doplasma::c1a#2 ] -zp[2]:20 [ makechar::$7 makechar::$8 makechar::$10 print_line_cursor#9 print_line_cursor#0 ] -zp[2]:10 [ rand::return#2 makechar::$3 rand::return#0 print_char_cursor#26 print_char_cursor#37 print_char_cursor#27 ] -zp[1]:12 [ makechar::$4 doplasma::c1b#3 doplasma::c1b#2 ] +zp[1]:20 [ makechar::s#1 doplasma::c1a#3 doplasma::c1a#2 ] +zp[2]:17 [ makechar::$7 makechar::$8 makechar::$10 print_char_cursor#26 print_char_cursor#37 print_char_cursor#27 ] +zp[1]:10 [ makechar::$4 doplasma::c1b#3 doplasma::c1b#2 ] +zp[2]:8 [ Ticks#0 rand::return#2 makechar::$3 rand::return#0 ] reg byte a [ doplasma::$6 ] reg byte a [ doplasma::$3 ] reg byte a [ doplasma::$1 ] -zp[2]:6 [ rand::$0 Ticks#0 ] -zp[2]:4 [ rand::$1 Ticks#1 print_uint::w#0 ] -zp[2]:8 [ rand::$2 ] +zp[2]:2 [ rand::$0 Ticks#1 print_uint::w#0 ] +zp[2]:4 [ rand::$1 ] +zp[2]:6 [ rand::$2 ] reg byte a [ print_uchar::$0 ] reg byte x [ print_uchar::$2 ] FINAL ASSEMBLER -Score: 102089 +Score: 102017 // File Comments /// @file @@ -3342,63 +3219,68 @@ Score: 102089 .label SCREEN2 = $e400 .label CHARSET = $e800 .label print_screen = $400 - .label last_time = $16 - .label print_line_cursor = $14 // The random state variable - .label rand_state = 2 - .label Ticks = 6 - .label Ticks_1 = 4 - .label print_char_cursor = $a + .label rand_state = $e + .label last_time = $18 + .label print_line_cursor = $16 + .label Ticks = 8 + .label Ticks_1 = 2 + .label print_char_cursor = $11 .segment Code // __start __start: { // __start::__init1 + // volatile unsigned int rand_state = 1 + // [1] rand_state = 1 -- vwuz1=vwuc1 + lda #<1 + sta.z rand_state + lda #>1 + sta.z rand_state+1 // unsigned int last_time - // [1] last_time = 0 -- vwuz1=vwuc1 - lda #<0 + // [2] last_time = 0 -- vwuz1=vwuc1 sta.z last_time sta.z last_time+1 - // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // [3] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [3] call main - // [5] phi from __start::@1 to main [phi:__start::@1->main] + // [4] call main + // [6] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return - // [4] return + // [5] return rts } // main main: { - .label block = $18 - .label v = $19 - .label count = 2 + .label block = $1a + .label v = $1b + .label count = $16 // makechar() - // [6] call makechar - // [25] phi from main to makechar [phi:main->makechar] + // [7] call makechar + // [26] phi from main to makechar [phi:main->makechar] jsr makechar - // [7] phi from main to main::@4 [phi:main->main::@4] + // [8] phi from main to main::@4 [phi:main->main::@4] // main::@4 // start() - // [8] call start + // [9] call start jsr start // main::@5 // block = CIA2->PORT_A - // [9] main::block#1 = *((char *)CIA2) -- vbuz1=_deref_pbuc1 + // [10] main::block#1 = *((char *)CIA2) -- vbuz1=_deref_pbuc1 lda CIA2 sta.z block // tmp = block & 0xFC - // [10] main::tmp#1 = main::block#1 & $fc -- vbuaa=vbuz1_band_vbuc1 + // [11] main::tmp#1 = main::block#1 & $fc -- vbuaa=vbuz1_band_vbuc1 lda #$fc and.z block // CIA2->PORT_A = tmp - // [11] *((char *)CIA2) = main::tmp#1 -- _deref_pbuc1=vbuaa + // [12] *((char *)CIA2) = main::tmp#1 -- _deref_pbuc1=vbuaa sta CIA2 // v = *VICII_MEMORY - // [12] main::v#1 = *VICII_MEMORY -- vbuz1=_deref_pbuc1 + // [13] main::v#1 = *VICII_MEMORY -- vbuz1=_deref_pbuc1 lda VICII_MEMORY sta.z v - // [13] phi from main::@5 to main::@1 [phi:main::@5->main::@1] - // [13] phi main::count#2 = $1f4 [phi:main::@5->main::@1#0] -- vwuz1=vwuc1 + // [14] phi from main::@5 to main::@1 [phi:main::@5->main::@1] + // [14] phi main::count#2 = $1f4 [phi:main::@5->main::@1#0] -- vwuz1=vwuc1 lda #<$1f4 sta.z count lda #>$1f4 @@ -3407,35 +3289,35 @@ main: { // main::@1 __b1: // while (count) - // [14] if(0!=main::count#2) goto main::@2 -- 0_neq_vwuz1_then_la1 + // [15] if(0!=main::count#2) goto main::@2 -- 0_neq_vwuz1_then_la1 lda.z count ora.z count+1 bne __b2 // main::@3 // *VICII_MEMORY = v - // [15] *VICII_MEMORY = main::v#1 -- _deref_pbuc1=vbuz1 + // [16] *VICII_MEMORY = main::v#1 -- _deref_pbuc1=vbuz1 lda.z v sta VICII_MEMORY // CIA2->PORT_A = block - // [16] *((char *)CIA2) = main::block#1 -- _deref_pbuc1=vbuz1 + // [17] *((char *)CIA2) = main::block#1 -- _deref_pbuc1=vbuz1 lda.z block sta CIA2 // end() - // [17] call end + // [18] call end /* Reset screen colors */ jsr end // main::@return // } - // [18] return + // [19] return rts - // [19] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [20] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 __b2: // doplasma ((char*)SCREEN1) - // [20] call doplasma + // [21] call doplasma /* Build page 1, then make it visible */ - // [61] phi from main::@2 to doplasma [phi:main::@2->doplasma] - // [61] phi doplasma::scrn#13 = SCREEN1 [phi:main::@2->doplasma#0] -- pbuz1=pbuc1 + // [62] phi from main::@2 to doplasma [phi:main::@2->doplasma] + // [62] phi doplasma::scrn#13 = SCREEN1 [phi:main::@2->doplasma#0] -- pbuz1=pbuc1 lda #SCREEN1 @@ -3443,14 +3325,14 @@ main: { jsr doplasma // main::@6 // *VICII_MEMORY = PAGE1 - // [21] *VICII_MEMORY = PAGE1 -- _deref_pbuc1=vbuc2 + // [22] *VICII_MEMORY = PAGE1 -- _deref_pbuc1=vbuc2 lda #PAGE1 sta VICII_MEMORY // doplasma ((char*)SCREEN2) - // [22] call doplasma + // [23] call doplasma /* Build page 2, then make it visible */ - // [61] phi from main::@6 to doplasma [phi:main::@6->doplasma] - // [61] phi doplasma::scrn#13 = SCREEN2 [phi:main::@6->doplasma#0] -- pbuz1=pbuc1 + // [62] phi from main::@6 to doplasma [phi:main::@6->doplasma] + // [62] phi doplasma::scrn#13 = SCREEN2 [phi:main::@6->doplasma#0] -- pbuz1=pbuc1 lda #SCREEN2 @@ -3458,43 +3340,39 @@ main: { jsr doplasma // main::@7 // *VICII_MEMORY = PAGE2 - // [23] *VICII_MEMORY = PAGE2 -- _deref_pbuc1=vbuc2 + // [24] *VICII_MEMORY = PAGE2 -- _deref_pbuc1=vbuc2 lda #PAGE2 sta VICII_MEMORY // --count; - // [24] main::count#1 = -- main::count#2 -- vwuz1=_dec_vwuz1 + // [25] main::count#1 = -- main::count#2 -- vwuz1=_dec_vwuz1 lda.z count bne !+ dec.z count+1 !: dec.z count - // [13] phi from main::@7 to main::@1 [phi:main::@7->main::@1] - // [13] phi main::count#2 = main::count#1 [phi:main::@7->main::@1#0] -- register_copy + // [14] phi from main::@7 to main::@1 [phi:main::@7->main::@1] + // [14] phi main::count#2 = main::count#1 [phi:main::@7->main::@1#0] -- register_copy jmp __b1 } // makechar makechar: { - .label __3 = $a - .label __4 = $c - .label __7 = $14 - .label __8 = $14 - .label s = $12 - .label c = $d - .label i = $f - .label __10 = $14 - // [26] phi from makechar to makechar::@1 [phi:makechar->makechar::@1] - // [26] phi rand_state#14 = 1 [phi:makechar->makechar::@1#0] -- vwuz1=vwuc1 - lda #<1 - sta.z rand_state - lda #>1 - sta.z rand_state+1 - // [26] phi makechar::c#3 = 0 [phi:makechar->makechar::@1#1] -- vwuz1=vbuc1 + .label __3 = 8 + .label __4 = $a + .label __7 = $11 + .label __8 = $11 + .label s = $14 + .label c = $b + .label i = $d + .label __10 = $11 + // [27] phi from makechar to makechar::@1 [phi:makechar->makechar::@1] + // [27] phi makechar::c#3 = 0 [phi:makechar->makechar::@1#0] -- vwuz1=vbuc1 + lda #<0 sta.z c sta.z c+1 // makechar::@1 __b1: // for (c = 0; c < 0x100; ++c) - // [27] if(makechar::c#3<$100) goto makechar::@2 -- vwuz1_lt_vwuc1_then_la1 + // [28] if(makechar::c#3<$100) goto makechar::@2 -- vwuz1_lt_vwuc1_then_la1 lda.z c+1 cmp #>$100 bcc __b2 @@ -3505,55 +3383,52 @@ makechar: { !: // makechar::@return // } - // [28] return + // [29] return rts // makechar::@2 __b2: // s = sinetable[(char)c] - // [29] makechar::$9 = (char)makechar::c#3 -- vbuxx=_byte_vwuz1 + // [30] makechar::$9 = (char)makechar::c#3 -- vbuxx=_byte_vwuz1 ldx.z c - // [30] makechar::s#1 = sinetable[makechar::$9] -- vbuz1=pbuc1_derefidx_vbuxx + // [31] makechar::s#1 = sinetable[makechar::$9] -- vbuz1=pbuc1_derefidx_vbuxx lda sinetable,x sta.z s - // [31] phi from makechar::@2 to makechar::@3 [phi:makechar::@2->makechar::@3] - // [31] phi rand_state#25 = rand_state#14 [phi:makechar::@2->makechar::@3#0] -- register_copy - // [31] phi makechar::i#3 = 0 [phi:makechar::@2->makechar::@3#1] -- vbuz1=vbuc1 + // [32] phi from makechar::@2 to makechar::@3 [phi:makechar::@2->makechar::@3] + // [32] phi makechar::i#3 = 0 [phi:makechar::@2->makechar::@3#0] -- vbuz1=vbuc1 lda #0 sta.z i // makechar::@3 __b3: // for (i = 0; i < 8; ++i) - // [32] if(makechar::i#3<8) goto makechar::@5 -- vbuz1_lt_vbuc1_then_la1 + // [33] if(makechar::i#3<8) goto makechar::@5 -- vbuz1_lt_vbuc1_then_la1 lda.z i cmp #8 bcc __b4 // makechar::@4 // for (c = 0; c < 0x100; ++c) - // [33] makechar::c#2 = ++ makechar::c#3 -- vwuz1=_inc_vwuz1 + // [34] makechar::c#2 = ++ makechar::c#3 -- vwuz1=_inc_vwuz1 inc.z c bne !+ inc.z c+1 !: - // [26] phi from makechar::@4 to makechar::@1 [phi:makechar::@4->makechar::@1] - // [26] phi rand_state#14 = rand_state#25 [phi:makechar::@4->makechar::@1#0] -- register_copy - // [26] phi makechar::c#3 = makechar::c#2 [phi:makechar::@4->makechar::@1#1] -- register_copy + // [27] phi from makechar::@4 to makechar::@1 [phi:makechar::@4->makechar::@1] + // [27] phi makechar::c#3 = makechar::c#2 [phi:makechar::@4->makechar::@1#0] -- register_copy jmp __b1 - // [34] phi from makechar::@3 to makechar::@5 [phi:makechar::@3->makechar::@5] + // [35] phi from makechar::@3 to makechar::@5 [phi:makechar::@3->makechar::@5] __b4: - // [34] phi rand_state#19 = rand_state#25 [phi:makechar::@3->makechar::@5#0] -- register_copy - // [34] phi makechar::b#3 = 0 [phi:makechar::@3->makechar::@5#1] -- vbuyy=vbuc1 + // [35] phi makechar::b#3 = 0 [phi:makechar::@3->makechar::@5#0] -- vbuyy=vbuc1 ldy #0 - // [34] phi makechar::ii#3 = 0 [phi:makechar::@3->makechar::@5#2] -- vbuxx=vbuc1 + // [35] phi makechar::ii#3 = 0 [phi:makechar::@3->makechar::@5#1] -- vbuxx=vbuc1 ldx #0 // makechar::@5 __b5: // for (ii = 0; ii < 8; ++ii) - // [35] if(makechar::ii#3<8) goto makechar::@6 -- vbuxx_lt_vbuc1_then_la1 + // [36] if(makechar::ii#3<8) goto makechar::@6 -- vbuxx_lt_vbuc1_then_la1 cpx #8 bcc __b6 // makechar::@7 // c<<3 - // [36] makechar::$7 = makechar::c#3 << 3 -- vwuz1=vwuz2_rol_3 + // [37] makechar::$7 = makechar::c#3 << 3 -- vwuz1=vwuz2_rol_3 lda.z c asl sta.z __7 @@ -3565,7 +3440,7 @@ makechar: { asl.z __7 rol.z __7+1 // (c<<3) + i - // [37] makechar::$8 = makechar::$7 + makechar::i#3 -- vwuz1=vwuz1_plus_vbuz2 + // [38] makechar::$8 = makechar::$7 + makechar::i#3 -- vwuz1=vwuz1_plus_vbuz2 lda.z i clc adc.z __8 @@ -3574,7 +3449,7 @@ makechar: { inc.z __8+1 !: // ((char*)CHARSET) [(c<<3) + i] = b - // [38] makechar::$10 = CHARSET + makechar::$8 -- pbuz1=pbuc1_plus_vwuz1 + // [39] makechar::$10 = CHARSET + makechar::$8 -- pbuz1=pbuc1_plus_vwuz1 lda.z __10 clc adc #CHARSET sta.z __10+1 - // [39] *makechar::$10 = makechar::b#3 -- _deref_pbuz1=vbuyy + // [40] *makechar::$10 = makechar::b#3 -- _deref_pbuz1=vbuyy tya ldy #0 sta (__10),y // for (i = 0; i < 8; ++i) - // [40] makechar::i#2 = ++ makechar::i#3 -- vbuz1=_inc_vbuz1 + // [41] makechar::i#2 = ++ makechar::i#3 -- vbuz1=_inc_vbuz1 inc.z i - // [31] phi from makechar::@7 to makechar::@3 [phi:makechar::@7->makechar::@3] - // [31] phi rand_state#25 = rand_state#19 [phi:makechar::@7->makechar::@3#0] -- register_copy - // [31] phi makechar::i#3 = makechar::i#2 [phi:makechar::@7->makechar::@3#1] -- register_copy + // [32] phi from makechar::@7 to makechar::@3 [phi:makechar::@7->makechar::@3] + // [32] phi makechar::i#3 = makechar::i#2 [phi:makechar::@7->makechar::@3#0] -- register_copy jmp __b3 - // [41] phi from makechar::@5 to makechar::@6 [phi:makechar::@5->makechar::@6] + // [42] phi from makechar::@5 to makechar::@6 [phi:makechar::@5->makechar::@6] // makechar::@6 __b6: // rand() - // [42] call rand + // [43] call rand jsr rand - // [43] rand::return#2 = rand::return#0 + // [44] rand::return#2 = rand::return#0 // makechar::@10 - // [44] makechar::$3 = rand::return#2 + // [45] makechar::$3 = rand::return#2 // rand() & 0xFF - // [45] makechar::$4 = makechar::$3 & $ff -- vbuz1=vwuz2_band_vbuc1 + // [46] makechar::$4 = makechar::$3 & $ff -- vbuz1=vwuz2_band_vbuc1 lda #$ff and.z __3 sta.z __4 // if ((rand() & 0xFF) > s) - // [46] if(makechar::$4<=makechar::s#1) goto makechar::@8 -- vbuz1_le_vbuz2_then_la1 + // [47] if(makechar::$4<=makechar::s#1) goto makechar::@8 -- vbuz1_le_vbuz2_then_la1 lda.z s cmp.z __4 bcs __b8 // makechar::@9 // b |= bittab[ii] - // [47] makechar::b#2 = makechar::b#3 | bittab[makechar::ii#3] -- vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx + // [48] makechar::b#2 = makechar::b#3 | bittab[makechar::ii#3] -- vbuyy=vbuyy_bor_pbuc1_derefidx_vbuxx tya ora bittab,x tay - // [48] phi from makechar::@10 makechar::@9 to makechar::@8 [phi:makechar::@10/makechar::@9->makechar::@8] - // [48] phi makechar::b#7 = makechar::b#3 [phi:makechar::@10/makechar::@9->makechar::@8#0] -- register_copy + // [49] phi from makechar::@10 makechar::@9 to makechar::@8 [phi:makechar::@10/makechar::@9->makechar::@8] + // [49] phi makechar::b#7 = makechar::b#3 [phi:makechar::@10/makechar::@9->makechar::@8#0] -- register_copy // makechar::@8 __b8: // for (ii = 0; ii < 8; ++ii) - // [49] makechar::ii#2 = ++ makechar::ii#3 -- vbuxx=_inc_vbuxx + // [50] makechar::ii#2 = ++ makechar::ii#3 -- vbuxx=_inc_vbuxx inx - // [34] phi from makechar::@8 to makechar::@5 [phi:makechar::@8->makechar::@5] - // [34] phi rand_state#19 = rand_state#12 [phi:makechar::@8->makechar::@5#0] -- register_copy - // [34] phi makechar::b#3 = makechar::b#7 [phi:makechar::@8->makechar::@5#1] -- register_copy - // [34] phi makechar::ii#3 = makechar::ii#2 [phi:makechar::@8->makechar::@5#2] -- register_copy + // [35] phi from makechar::@8 to makechar::@5 [phi:makechar::@8->makechar::@5] + // [35] phi makechar::b#3 = makechar::b#7 [phi:makechar::@8->makechar::@5#0] -- register_copy + // [35] phi makechar::ii#3 = makechar::ii#2 [phi:makechar::@8->makechar::@5#1] -- register_copy jmp __b5 } // start @@ -3641,23 +3514,23 @@ start: { stx LAST_TIME+1 // start::@return // } - // [51] return + // [52] return rts } // end end: { // Ticks = last_time - // [52] Ticks#0 = last_time -- vwuz1=vwuz2 + // [53] Ticks#0 = last_time -- vwuz1=vwuz2 lda.z last_time sta.z Ticks lda.z last_time+1 sta.z Ticks+1 // start() - // [53] call start + // [54] call start jsr start // end::@1 // last_time -= Ticks - // [54] last_time = last_time - Ticks#0 -- vwuz1=vwuz1_minus_vwuz2 + // [55] last_time = last_time - Ticks#0 -- vwuz1=vwuz1_minus_vwuz2 lda.z last_time sec sbc.z Ticks @@ -3666,97 +3539,97 @@ end: { sbc.z Ticks+1 sta.z last_time+1 // Ticks = last_time - // [55] Ticks#1 = last_time -- vwuz1=vwuz2 + // [56] Ticks#1 = last_time -- vwuz1=vwuz2 lda.z last_time sta.z Ticks_1 lda.z last_time+1 sta.z Ticks_1+1 // print_uint(Ticks) - // [56] print_uint::w#0 = Ticks#1 - // [57] call print_uint + // [57] print_uint::w#0 = Ticks#1 + // [58] call print_uint jsr print_uint - // [58] phi from end::@1 to end::@2 [phi:end::@1->end::@2] + // [59] phi from end::@1 to end::@2 [phi:end::@1->end::@2] // end::@2 // print_ln() - // [59] call print_ln - // [99] phi from end::@2 to print_ln [phi:end::@2->print_ln] + // [60] call print_ln + // [100] phi from end::@2 to print_ln [phi:end::@2->print_ln] jsr print_ln // end::@return // } - // [60] return + // [61] return rts } // doplasma -// void doplasma(__zp($d) char *scrn) +// void doplasma(__zp($b) char *scrn) doplasma: { .const c2A = 0 .const c2B = 0 - .label c1a = $12 - .label c1b = $c - .label ii = $f - .label c2a = $13 - .label c2b = $11 + .label c1a = $14 + .label c1b = $a + .label ii = $d + .label c2a = $15 + .label c2b = $13 .label i = $10 - .label scrn = $d - // [62] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1] - // [62] phi doplasma::c1b#3 = 0 [phi:doplasma->doplasma::@1#0] -- vbuz1=vbuc1 + .label scrn = $b + // [63] phi from doplasma to doplasma::@1 [phi:doplasma->doplasma::@1] + // [63] phi doplasma::c1b#3 = 0 [phi:doplasma->doplasma::@1#0] -- vbuz1=vbuc1 lda #0 sta.z c1b - // [62] phi doplasma::c1a#3 = 0 [phi:doplasma->doplasma::@1#1] -- vbuz1=vbuc1 + // [63] phi doplasma::c1a#3 = 0 [phi:doplasma->doplasma::@1#1] -- vbuz1=vbuc1 sta.z c1a - // [62] phi doplasma::ii#3 = 0 [phi:doplasma->doplasma::@1#2] -- vbuz1=vbuc1 + // [63] phi doplasma::ii#3 = 0 [phi:doplasma->doplasma::@1#2] -- vbuz1=vbuc1 sta.z ii // doplasma::@1 __b1: // for (ii = 0; ii < 25; ++ii) - // [63] if(doplasma::ii#3<$19) goto doplasma::@2 -- vbuz1_lt_vbuc1_then_la1 + // [64] if(doplasma::ii#3<$19) goto doplasma::@2 -- vbuz1_lt_vbuc1_then_la1 lda.z ii cmp #$19 bcc __b2 - // [64] phi from doplasma::@1 to doplasma::@3 [phi:doplasma::@1->doplasma::@3] - // [64] phi doplasma::c2b#3 = doplasma::c2B#0 [phi:doplasma::@1->doplasma::@3#0] -- vbuz1=vbuc1 + // [65] phi from doplasma::@1 to doplasma::@3 [phi:doplasma::@1->doplasma::@3] + // [65] phi doplasma::c2b#3 = doplasma::c2B#0 [phi:doplasma::@1->doplasma::@3#0] -- vbuz1=vbuc1 lda #c2B sta.z c2b - // [64] phi doplasma::c2a#3 = doplasma::c2A#0 [phi:doplasma::@1->doplasma::@3#1] -- vbuz1=vbuc1 + // [65] phi doplasma::c2a#3 = doplasma::c2A#0 [phi:doplasma::@1->doplasma::@3#1] -- vbuz1=vbuc1 lda #c2A sta.z c2a - // [64] phi doplasma::i#3 = 0 [phi:doplasma::@1->doplasma::@3#2] -- vbuz1=vbuc1 + // [65] phi doplasma::i#3 = 0 [phi:doplasma::@1->doplasma::@3#2] -- vbuz1=vbuc1 lda #0 sta.z i // doplasma::@3 __b3: // for (i = 0; i < 40; ++i) - // [65] if(doplasma::i#3<$28) goto doplasma::@4 -- vbuz1_lt_vbuc1_then_la1 + // [66] if(doplasma::i#3<$28) goto doplasma::@4 -- vbuz1_lt_vbuc1_then_la1 lda.z i cmp #$28 bcc __b4 - // [66] phi from doplasma::@3 to doplasma::@5 [phi:doplasma::@3->doplasma::@5] - // [66] phi doplasma::scrn#6 = doplasma::scrn#13 [phi:doplasma::@3->doplasma::@5#0] -- register_copy - // [66] phi doplasma::jj#3 = 0 [phi:doplasma::@3->doplasma::@5#1] -- vbuxx=vbuc1 + // [67] phi from doplasma::@3 to doplasma::@5 [phi:doplasma::@3->doplasma::@5] + // [67] phi doplasma::scrn#6 = doplasma::scrn#13 [phi:doplasma::@3->doplasma::@5#0] -- register_copy + // [67] phi doplasma::jj#3 = 0 [phi:doplasma::@3->doplasma::@5#1] -- vbuxx=vbuc1 ldx #0 // doplasma::@5 __b5: // for (jj = 0; jj < 25; ++jj) - // [67] if(doplasma::jj#3<$19) goto doplasma::@6 -- vbuxx_lt_vbuc1_then_la1 + // [68] if(doplasma::jj#3<$19) goto doplasma::@6 -- vbuxx_lt_vbuc1_then_la1 cpx #$19 bcc __b8 // doplasma::@return // } - // [68] return + // [69] return rts - // [69] phi from doplasma::@5 to doplasma::@6 [phi:doplasma::@5->doplasma::@6] + // [70] phi from doplasma::@5 to doplasma::@6 [phi:doplasma::@5->doplasma::@6] __b8: - // [69] phi doplasma::j#3 = 0 [phi:doplasma::@5->doplasma::@6#0] -- vbuyy=vbuc1 + // [70] phi doplasma::j#3 = 0 [phi:doplasma::@5->doplasma::@6#0] -- vbuyy=vbuc1 ldy #0 // doplasma::@6 __b6: // for (j = 0; j < 40; ++j) - // [70] if(doplasma::j#3<$28) goto doplasma::@7 -- vbuyy_lt_vbuc1_then_la1 + // [71] if(doplasma::j#3<$28) goto doplasma::@7 -- vbuyy_lt_vbuc1_then_la1 cpy #$28 bcc __b7 // doplasma::@8 // scrn += 40 - // [71] doplasma::scrn#0 = doplasma::scrn#6 + $28 -- pbuz1=pbuz1_plus_vbuc1 + // [72] doplasma::scrn#0 = doplasma::scrn#6 + $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z scrn @@ -3765,89 +3638,89 @@ doplasma: { inc.z scrn+1 !: // for (jj = 0; jj < 25; ++jj) - // [72] doplasma::jj#2 = ++ doplasma::jj#3 -- vbuxx=_inc_vbuxx + // [73] doplasma::jj#2 = ++ doplasma::jj#3 -- vbuxx=_inc_vbuxx inx - // [66] phi from doplasma::@8 to doplasma::@5 [phi:doplasma::@8->doplasma::@5] - // [66] phi doplasma::scrn#6 = doplasma::scrn#0 [phi:doplasma::@8->doplasma::@5#0] -- register_copy - // [66] phi doplasma::jj#3 = doplasma::jj#2 [phi:doplasma::@8->doplasma::@5#1] -- register_copy + // [67] phi from doplasma::@8 to doplasma::@5 [phi:doplasma::@8->doplasma::@5] + // [67] phi doplasma::scrn#6 = doplasma::scrn#0 [phi:doplasma::@8->doplasma::@5#0] -- register_copy + // [67] phi doplasma::jj#3 = doplasma::jj#2 [phi:doplasma::@8->doplasma::@5#1] -- register_copy jmp __b5 // doplasma::@7 __b7: // xbuf[j] + ybuf[jj] - // [73] doplasma::$6 = xbuf[doplasma::j#3] + ybuf[doplasma::jj#3] -- vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx + // [74] doplasma::$6 = xbuf[doplasma::j#3] + ybuf[doplasma::jj#3] -- vbuaa=pbuc1_derefidx_vbuyy_plus_pbuc2_derefidx_vbuxx lda xbuf,y clc adc ybuf,x // scrn[j] = (xbuf[j] + ybuf[jj]) - // [74] doplasma::scrn#6[doplasma::j#3] = doplasma::$6 -- pbuz1_derefidx_vbuyy=vbuaa + // [75] doplasma::scrn#6[doplasma::j#3] = doplasma::$6 -- pbuz1_derefidx_vbuyy=vbuaa sta (scrn),y // for (j = 0; j < 40; ++j) - // [75] doplasma::j#2 = ++ doplasma::j#3 -- vbuyy=_inc_vbuyy + // [76] doplasma::j#2 = ++ doplasma::j#3 -- vbuyy=_inc_vbuyy iny - // [69] phi from doplasma::@7 to doplasma::@6 [phi:doplasma::@7->doplasma::@6] - // [69] phi doplasma::j#3 = doplasma::j#2 [phi:doplasma::@7->doplasma::@6#0] -- register_copy + // [70] phi from doplasma::@7 to doplasma::@6 [phi:doplasma::@7->doplasma::@6] + // [70] phi doplasma::j#3 = doplasma::j#2 [phi:doplasma::@7->doplasma::@6#0] -- register_copy jmp __b6 // doplasma::@4 __b4: // sinetable[c2a] + sinetable[c2b] - // [76] doplasma::$3 = sinetable[doplasma::c2a#3] + sinetable[doplasma::c2b#3] -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 + // [77] doplasma::$3 = sinetable[doplasma::c2a#3] + sinetable[doplasma::c2b#3] -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 ldy.z c2a lda sinetable,y ldy.z c2b clc adc sinetable,y // xbuf[i] = (sinetable[c2a] + sinetable[c2b]) - // [77] xbuf[doplasma::i#3] = doplasma::$3 -- pbuc1_derefidx_vbuz1=vbuaa + // [78] xbuf[doplasma::i#3] = doplasma::$3 -- pbuc1_derefidx_vbuz1=vbuaa ldy.z i sta xbuf,y // c2a += 3 - // [78] doplasma::c2a#2 = doplasma::c2a#3 + 3 -- vbuz1=vbuz1_plus_vbuc1 + // [79] doplasma::c2a#2 = doplasma::c2a#3 + 3 -- vbuz1=vbuz1_plus_vbuc1 lax.z c2a axs #-[3] stx.z c2a // c2b += 7 - // [79] doplasma::c2b#2 = doplasma::c2b#3 + 7 -- vbuz1=vbuz1_plus_vbuc1 + // [80] doplasma::c2b#2 = doplasma::c2b#3 + 7 -- vbuz1=vbuz1_plus_vbuc1 lax.z c2b axs #-[7] stx.z c2b // for (i = 0; i < 40; ++i) - // [80] doplasma::i#2 = ++ doplasma::i#3 -- vbuz1=_inc_vbuz1 + // [81] doplasma::i#2 = ++ doplasma::i#3 -- vbuz1=_inc_vbuz1 inc.z i - // [64] phi from doplasma::@4 to doplasma::@3 [phi:doplasma::@4->doplasma::@3] - // [64] phi doplasma::c2b#3 = doplasma::c2b#2 [phi:doplasma::@4->doplasma::@3#0] -- register_copy - // [64] phi doplasma::c2a#3 = doplasma::c2a#2 [phi:doplasma::@4->doplasma::@3#1] -- register_copy - // [64] phi doplasma::i#3 = doplasma::i#2 [phi:doplasma::@4->doplasma::@3#2] -- register_copy + // [65] phi from doplasma::@4 to doplasma::@3 [phi:doplasma::@4->doplasma::@3] + // [65] phi doplasma::c2b#3 = doplasma::c2b#2 [phi:doplasma::@4->doplasma::@3#0] -- register_copy + // [65] phi doplasma::c2a#3 = doplasma::c2a#2 [phi:doplasma::@4->doplasma::@3#1] -- register_copy + // [65] phi doplasma::i#3 = doplasma::i#2 [phi:doplasma::@4->doplasma::@3#2] -- register_copy jmp __b3 // doplasma::@2 __b2: // sinetable[c1a] + sinetable[c1b] - // [81] doplasma::$1 = sinetable[doplasma::c1a#3] + sinetable[doplasma::c1b#3] -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 + // [82] doplasma::$1 = sinetable[doplasma::c1a#3] + sinetable[doplasma::c1b#3] -- vbuaa=pbuc1_derefidx_vbuz1_plus_pbuc1_derefidx_vbuz2 ldy.z c1a lda sinetable,y ldy.z c1b clc adc sinetable,y // ybuf[ii] = (sinetable[c1a] + sinetable[c1b]) - // [82] ybuf[doplasma::ii#3] = doplasma::$1 -- pbuc1_derefidx_vbuz1=vbuaa + // [83] ybuf[doplasma::ii#3] = doplasma::$1 -- pbuc1_derefidx_vbuz1=vbuaa ldy.z ii sta ybuf,y // c1a += 4 - // [83] doplasma::c1a#2 = doplasma::c1a#3 + 4 -- vbuz1=vbuz1_plus_vbuc1 + // [84] doplasma::c1a#2 = doplasma::c1a#3 + 4 -- vbuz1=vbuz1_plus_vbuc1 lax.z c1a axs #-[4] stx.z c1a // c1b += 9 - // [84] doplasma::c1b#2 = doplasma::c1b#3 + 9 -- vbuz1=vbuz1_plus_vbuc1 + // [85] doplasma::c1b#2 = doplasma::c1b#3 + 9 -- vbuz1=vbuz1_plus_vbuc1 lax.z c1b axs #-[9] stx.z c1b // for (ii = 0; ii < 25; ++ii) - // [85] doplasma::ii#2 = ++ doplasma::ii#3 -- vbuz1=_inc_vbuz1 + // [86] doplasma::ii#2 = ++ doplasma::ii#3 -- vbuz1=_inc_vbuz1 inc.z ii - // [62] phi from doplasma::@2 to doplasma::@1 [phi:doplasma::@2->doplasma::@1] - // [62] phi doplasma::c1b#3 = doplasma::c1b#2 [phi:doplasma::@2->doplasma::@1#0] -- register_copy - // [62] phi doplasma::c1a#3 = doplasma::c1a#2 [phi:doplasma::@2->doplasma::@1#1] -- register_copy - // [62] phi doplasma::ii#3 = doplasma::ii#2 [phi:doplasma::@2->doplasma::@1#2] -- register_copy + // [63] phi from doplasma::@2 to doplasma::@1 [phi:doplasma::@2->doplasma::@1] + // [63] phi doplasma::c1b#3 = doplasma::c1b#2 [phi:doplasma::@2->doplasma::@1#0] -- register_copy + // [63] phi doplasma::c1a#3 = doplasma::c1a#2 [phi:doplasma::@2->doplasma::@1#1] -- register_copy + // [63] phi doplasma::ii#3 = doplasma::ii#2 [phi:doplasma::@2->doplasma::@1#2] -- register_copy jmp __b1 } // rand @@ -3856,12 +3729,12 @@ doplasma: { // Information https://en.wikipedia.org/wiki/Xorshift // Source http://www.retroprogramming.com/2017/07/xorshift-pseudorandom-numbers-in-z80.html rand: { - .label __0 = 6 + .label __0 = 2 .label __1 = 4 - .label __2 = 8 - .label return = $a + .label __2 = 6 + .label return = 8 // rand_state << 7 - // [86] rand::$0 = rand_state#19 << 7 -- vwuz1=vwuz2_rol_7 + // [87] rand::$0 = rand_state << 7 -- vwuz1=vwuz2_rol_7 lda.z rand_state+1 lsr lda.z rand_state @@ -3871,7 +3744,7 @@ rand: { ror sta.z __0 // rand_state ^= rand_state << 7 - // [87] rand_state#0 = rand_state#19 ^ rand::$0 -- vwuz1=vwuz1_bxor_vwuz2 + // [88] rand_state = rand_state ^ rand::$0 -- vwuz1=vwuz1_bxor_vwuz2 lda.z rand_state eor.z __0 sta.z rand_state @@ -3879,13 +3752,13 @@ rand: { eor.z __0+1 sta.z rand_state+1 // rand_state >> 9 - // [88] rand::$1 = rand_state#0 >> 9 -- vwuz1=vwuz2_ror_9 + // [89] rand::$1 = rand_state >> 9 -- vwuz1=vwuz2_ror_9 lsr sta.z __1 lda #0 sta.z __1+1 // rand_state ^= rand_state >> 9 - // [89] rand_state#1 = rand_state#0 ^ rand::$1 -- vwuz1=vwuz1_bxor_vwuz2 + // [90] rand_state = rand_state ^ rand::$1 -- vwuz1=vwuz1_bxor_vwuz2 lda.z rand_state eor.z __1 sta.z rand_state @@ -3893,13 +3766,13 @@ rand: { eor.z __1+1 sta.z rand_state+1 // rand_state << 8 - // [90] rand::$2 = rand_state#1 << 8 -- vwuz1=vwuz2_rol_8 + // [91] rand::$2 = rand_state << 8 -- vwuz1=vwuz2_rol_8 lda.z rand_state sta.z __2+1 lda #0 sta.z __2 // rand_state ^= rand_state << 8 - // [91] rand_state#12 = rand_state#1 ^ rand::$2 -- vwuz1=vwuz1_bxor_vwuz2 + // [92] rand_state = rand_state ^ rand::$2 -- vwuz1=vwuz1_bxor_vwuz2 lda.z rand_state eor.z __2 sta.z rand_state @@ -3907,62 +3780,62 @@ rand: { eor.z __2+1 sta.z rand_state+1 // return rand_state; - // [92] rand::return#0 = rand_state#12 -- vwuz1=vwuz2 + // [93] rand::return#0 = rand_state -- vwuz1=vwuz2 lda.z rand_state sta.z return lda.z rand_state+1 sta.z return+1 // rand::@return // } - // [93] return + // [94] return rts } // print_uint // Print a unsigned int as HEX -// void print_uint(__zp(4) unsigned int w) +// void print_uint(__zp(2) unsigned int w) print_uint: { - .label w = 4 + .label w = 2 // print_uchar(BYTE1(w)) - // [94] print_uchar::b#0 = byte1 print_uint::w#0 -- vbuxx=_byte1_vwuz1 + // [95] print_uchar::b#0 = byte1 print_uint::w#0 -- vbuxx=_byte1_vwuz1 ldx.z w+1 - // [95] call print_uchar - // [104] phi from print_uint to print_uchar [phi:print_uint->print_uchar] - // [104] phi print_char_cursor#37 = print_screen#0 [phi:print_uint->print_uchar#0] -- pbuz1=pbuc1 + // [96] call print_uchar + // [105] phi from print_uint to print_uchar [phi:print_uint->print_uchar] + // [105] phi print_char_cursor#37 = print_screen#0 [phi:print_uint->print_uchar#0] -- pbuz1=pbuc1 lda #print_screen sta.z print_char_cursor+1 - // [104] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy + // [105] phi print_uchar::b#2 = print_uchar::b#0 [phi:print_uint->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(BYTE0(w)) - // [96] print_uchar::b#1 = byte0 print_uint::w#0 -- vbuxx=_byte0_vwuz1 + // [97] print_uchar::b#1 = byte0 print_uint::w#0 -- vbuxx=_byte0_vwuz1 ldx.z w - // [97] call print_uchar - // [104] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] - // [104] phi print_char_cursor#37 = print_char_cursor#27 [phi:print_uint::@1->print_uchar#0] -- register_copy - // [104] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy + // [98] call print_uchar + // [105] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] + // [105] phi print_char_cursor#37 = print_char_cursor#27 [phi:print_uint::@1->print_uchar#0] -- register_copy + // [105] phi print_uchar::b#2 = print_uchar::b#1 [phi:print_uint::@1->print_uchar#1] -- register_copy jsr print_uchar // print_uint::@return // } - // [98] return + // [99] return rts } // print_ln // Print a newline print_ln: { - // [100] phi from print_ln to print_ln::@1 [phi:print_ln->print_ln::@1] - // [100] phi print_line_cursor#9 = print_screen#0 [phi:print_ln->print_ln::@1#0] -- pbuz1=pbuc1 + // [101] phi from print_ln to print_ln::@1 [phi:print_ln->print_ln::@1] + // [101] phi print_line_cursor#9 = print_screen#0 [phi:print_ln->print_ln::@1#0] -- pbuz1=pbuc1 lda #print_screen sta.z print_line_cursor+1 - // [100] phi from print_ln::@1 to print_ln::@1 [phi:print_ln::@1->print_ln::@1] - // [100] phi print_line_cursor#9 = print_line_cursor#0 [phi:print_ln::@1->print_ln::@1#0] -- register_copy + // [101] phi from print_ln::@1 to print_ln::@1 [phi:print_ln::@1->print_ln::@1] + // [101] phi print_line_cursor#9 = print_line_cursor#0 [phi:print_ln::@1->print_ln::@1#0] -- register_copy // print_ln::@1 __b1: // print_line_cursor + $28 - // [101] print_line_cursor#0 = print_line_cursor#9 + $28 -- pbuz1=pbuz1_plus_vbuc1 + // [102] print_line_cursor#0 = print_line_cursor#9 + $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z print_line_cursor @@ -3971,7 +3844,7 @@ print_ln: { inc.z print_line_cursor+1 !: // while (print_line_cursor>4 - // [105] print_uchar::$0 = print_uchar::b#2 >> 4 -- vbuaa=vbuxx_ror_4 + // [106] print_uchar::$0 = print_uchar::b#2 >> 4 -- vbuaa=vbuxx_ror_4 txa lsr lsr lsr lsr // print_char(print_hextab[b>>4]) - // [106] print_char::ch#0 = print_hextab[print_uchar::$0] -- vbuaa=pbuc1_derefidx_vbuaa + // [107] print_char::ch#0 = print_hextab[print_uchar::$0] -- vbuaa=pbuc1_derefidx_vbuaa tay lda print_hextab,y - // [107] call print_char + // [108] call print_char // Table of hexadecimal digits - // [112] phi from print_uchar to print_char [phi:print_uchar->print_char] - // [112] phi print_char_cursor#26 = print_char_cursor#37 [phi:print_uchar->print_char#0] -- register_copy - // [112] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy + // [113] phi from print_uchar to print_char [phi:print_uchar->print_char] + // [113] phi print_char_cursor#26 = print_char_cursor#37 [phi:print_uchar->print_char#0] -- register_copy + // [113] phi print_char::ch#2 = print_char::ch#0 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f - // [108] print_uchar::$2 = print_uchar::b#2 & $f -- vbuxx=vbuxx_band_vbuc1 + // [109] print_uchar::$2 = print_uchar::b#2 & $f -- vbuxx=vbuxx_band_vbuc1 lda #$f axs #0 // print_char(print_hextab[b&$f]) - // [109] print_char::ch#1 = print_hextab[print_uchar::$2] -- vbuaa=pbuc1_derefidx_vbuxx + // [110] print_char::ch#1 = print_hextab[print_uchar::$2] -- vbuaa=pbuc1_derefidx_vbuxx lda print_hextab,x - // [110] call print_char - // [112] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] - // [112] phi print_char_cursor#26 = print_char_cursor#27 [phi:print_uchar::@1->print_char#0] -- register_copy - // [112] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy + // [111] call print_char + // [113] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] + // [113] phi print_char_cursor#26 = print_char_cursor#27 [phi:print_uchar::@1->print_char#0] -- register_copy + // [113] phi print_char::ch#2 = print_char::ch#1 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } - // [111] return + // [112] return rts } // print_char @@ -4029,18 +3902,18 @@ print_uchar: { // void print_char(__register(A) char ch) print_char: { // *(print_char_cursor++) = ch - // [113] *print_char_cursor#26 = print_char::ch#2 -- _deref_pbuz1=vbuaa + // [114] *print_char_cursor#26 = print_char::ch#2 -- _deref_pbuz1=vbuaa ldy #0 sta (print_char_cursor),y // *(print_char_cursor++) = ch; - // [114] print_char_cursor#27 = ++ print_char_cursor#26 -- pbuz1=_inc_pbuz1 + // [115] print_char_cursor#27 = ++ print_char_cursor#26 -- pbuz1=_inc_pbuz1 inc.z print_char_cursor bne !+ inc.z print_char_cursor+1 !: // print_char::@return // } - // [115] return + // [116] return rts } // File Data diff --git a/src/test/ref/millfork-benchmarks/plasma-kc.sym b/src/test/ref/millfork-benchmarks/plasma-kc.sym index aa326e57a..e4d8f8c75 100644 --- a/src/test/ref/millfork-benchmarks/plasma-kc.sym +++ b/src/test/ref/millfork-benchmarks/plasma-kc.sym @@ -9,8 +9,8 @@ __constant char RADIX::OCTAL = 8 __constant char * const SCREEN1 = (char *) 57344 __constant char * const SCREEN2 = (char *) 58368 unsigned int Ticks -unsigned int Ticks#0 // Ticks zp[2]:6 101.0 -unsigned int Ticks#1 // Ticks_1 zp[2]:4 202.0 +unsigned int Ticks#0 // Ticks zp[2]:8 101.0 +unsigned int Ticks#1 // Ticks_1 zp[2]:2 202.0 __constant char * const VICII_MEMORY = (char *) 53272 void __start() __constant const char bittab[] = { 1, 2, 4, 8, $10, $20, $40, $80 } @@ -21,27 +21,27 @@ char doplasma::$6 // reg byte a 2000002.0 char doplasma::c1A char doplasma::c1B char doplasma::c1a -char doplasma::c1a#2 // c1a zp[1]:18 66667.33333333333 -char doplasma::c1a#3 // c1a zp[1]:18 75000.75 +char doplasma::c1a#2 // c1a zp[1]:20 66667.33333333333 +char doplasma::c1a#3 // c1a zp[1]:20 75000.75 char doplasma::c1b -char doplasma::c1b#2 // c1b zp[1]:12 100001.0 -char doplasma::c1b#3 // c1b zp[1]:12 60000.600000000006 +char doplasma::c1b#2 // c1b zp[1]:10 100001.0 +char doplasma::c1b#3 // c1b zp[1]:10 60000.600000000006 char doplasma::c2A __constant char doplasma::c2A#0 = 0 // c2A char doplasma::c2B __constant char doplasma::c2B#0 = 0 // c2B char doplasma::c2a -char doplasma::c2a#2 // c2a zp[1]:19 66667.33333333333 -char doplasma::c2a#3 // c2a zp[1]:19 75000.75 +char doplasma::c2a#2 // c2a zp[1]:21 66667.33333333333 +char doplasma::c2a#3 // c2a zp[1]:21 75000.75 char doplasma::c2b -char doplasma::c2b#2 // c2b zp[1]:17 100001.0 -char doplasma::c2b#3 // c2b zp[1]:17 60000.600000000006 +char doplasma::c2b#2 // c2b zp[1]:19 100001.0 +char doplasma::c2b#3 // c2b zp[1]:19 60000.600000000006 char doplasma::i char doplasma::i#2 // i zp[1]:16 200002.0 char doplasma::i#3 // i zp[1]:16 66667.33333333333 char doplasma::ii -char doplasma::ii#2 // ii zp[1]:15 200002.0 -char doplasma::ii#3 // ii zp[1]:15 66667.33333333333 +char doplasma::ii#2 // ii zp[1]:13 200002.0 +char doplasma::ii#3 // ii zp[1]:13 66667.33333333333 char doplasma::j char doplasma::j#2 // reg byte y 2000002.0 char doplasma::j#3 // reg byte y 1250001.25 @@ -49,57 +49,57 @@ char doplasma::jj char doplasma::jj#2 // reg byte x 200002.0 char doplasma::jj#3 // reg byte x 162500.5 char *doplasma::scrn -char *doplasma::scrn#0 // scrn zp[2]:13 100001.0 -char *doplasma::scrn#13 // scrn zp[2]:13 6666.733333333334 -char *doplasma::scrn#6 // scrn zp[2]:13 185714.85714285713 +char *doplasma::scrn#0 // scrn zp[2]:11 100001.0 +char *doplasma::scrn#13 // scrn zp[2]:11 6666.733333333334 +char *doplasma::scrn#6 // scrn zp[2]:11 185714.85714285713 void end() -__loadstore volatile unsigned int last_time // zp[2]:22 17.652173913043477 +__loadstore volatile unsigned int last_time // zp[2]:24 17.652173913043477 int main() char main::block -char main::block#1 // block zp[1]:24 2.5384615384615383 +char main::block#1 // block zp[1]:26 2.5384615384615383 unsigned int main::count -unsigned int main::count#1 // count zp[2]:2 202.0 -unsigned int main::count#2 // count zp[2]:2 43.285714285714285 +unsigned int main::count#1 // count zp[2]:22 202.0 +unsigned int main::count#2 // count zp[2]:22 43.285714285714285 int main::return char main::tmp char main::tmp#1 // reg byte a 22.0 char main::v -char main::v#1 // v zp[1]:25 2.4444444444444446 +char main::v#1 // v zp[1]:27 2.4444444444444446 void makechar() -char *makechar::$10 // zp[2]:20 20002.0 -unsigned int makechar::$3 // zp[2]:10 200002.0 -char makechar::$4 // zp[1]:12 200002.0 -unsigned int makechar::$7 // zp[2]:20 20002.0 -unsigned int makechar::$8 // zp[2]:20 20002.0 +char *makechar::$10 // zp[2]:17 20002.0 +unsigned int makechar::$3 // zp[2]:8 200002.0 +char makechar::$4 // zp[1]:10 200002.0 +unsigned int makechar::$7 // zp[2]:17 20002.0 +unsigned int makechar::$8 // zp[2]:17 20002.0 char makechar::$9 // reg byte x 2002.0 char makechar::b char makechar::b#2 // reg byte y 200002.0 char makechar::b#3 // reg byte y 28182.181818181816 char makechar::b#7 // reg byte y 150001.5 unsigned int makechar::c -unsigned int makechar::c#2 // c zp[2]:13 2002.0 -unsigned int makechar::c#3 // c zp[2]:13 591.090909090909 +unsigned int makechar::c#2 // c zp[2]:11 2002.0 +unsigned int makechar::c#3 // c zp[2]:11 591.090909090909 char makechar::i -char makechar::i#2 // i zp[1]:15 20002.0 -char makechar::i#3 // i zp[1]:15 2353.176470588235 +char makechar::i#2 // i zp[1]:13 20002.0 +char makechar::i#3 // i zp[1]:13 2353.176470588235 char makechar::ii char makechar::ii#2 // reg byte x 200002.0 char makechar::ii#3 // reg byte x 40000.4 char makechar::s -char makechar::s#1 // s zp[1]:18 5315.894736842105 +char makechar::s#1 // s zp[1]:20 5315.894736842105 void print_char(char ch) char print_char::ch char print_char::ch#0 // reg byte a 20002.0 char print_char::ch#1 // reg byte a 20002.0 char print_char::ch#2 // reg byte a 120003.0 char *print_char_cursor -char *print_char_cursor#26 // print_char_cursor zp[2]:10 110002.0 -char *print_char_cursor#27 // print_char_cursor zp[2]:10 7117.882352941177 -char *print_char_cursor#37 // print_char_cursor zp[2]:10 3667.333333333333 +char *print_char_cursor#26 // print_char_cursor zp[2]:17 110002.0 +char *print_char_cursor#27 // print_char_cursor zp[2]:17 7117.882352941177 +char *print_char_cursor#37 // print_char_cursor zp[2]:17 3667.333333333333 __constant const char print_hextab[] = "0123456789abcdef"z char *print_line_cursor -char *print_line_cursor#0 // print_line_cursor zp[2]:20 15001.5 -char *print_line_cursor#9 // print_line_cursor zp[2]:20 20002.0 +char *print_line_cursor#0 // print_line_cursor zp[2]:22 15001.5 +char *print_line_cursor#9 // print_line_cursor zp[2]:22 20002.0 void print_ln() char *print_screen __constant char *print_screen#0 = (char *) 1024 // print_screen @@ -112,53 +112,48 @@ char print_uchar::b#1 // reg byte x 2002.0 char print_uchar::b#2 // reg byte x 5501.0 void print_uint(unsigned int w) unsigned int print_uint::w -unsigned int print_uint::w#0 // w zp[2]:4 701.0 +unsigned int print_uint::w#0 // w zp[2]:2 701.0 unsigned int rand() -unsigned int rand::$0 // zp[2]:6 2000002.0 +unsigned int rand::$0 // zp[2]:2 2000002.0 unsigned int rand::$1 // zp[2]:4 2000002.0 -unsigned int rand::$2 // zp[2]:8 2000002.0 +unsigned int rand::$2 // zp[2]:6 2000002.0 unsigned int rand::return -unsigned int rand::return#0 // return zp[2]:10 366667.3333333334 -unsigned int rand::return#2 // return zp[2]:10 200002.0 -unsigned int rand_state -unsigned int rand_state#0 // rand_state zp[2]:2 1500001.5 -unsigned int rand_state#1 // rand_state zp[2]:2 1500001.5 -unsigned int rand_state#12 // rand_state zp[2]:2 190909.36363636365 -unsigned int rand_state#14 // rand_state zp[2]:2 500.5 -unsigned int rand_state#19 // rand_state zp[2]:2 235556.11111111112 -unsigned int rand_state#25 // rand_state zp[2]:2 7334.666666666666 +unsigned int rand::return#0 // return zp[2]:8 366667.3333333334 +unsigned int rand::return#2 // return zp[2]:8 200002.0 +__loadstore volatile unsigned int rand_state // zp[2]:14 277778.1111111111 __constant const char sinetable[$100] = { $80, $7d, $7a, $77, $74, $70, $6d, $6a, $67, $64, $61, $5e, $5b, $58, $55, $52, $4f, $4d, $4a, $47, $44, $41, $3f, $3c, $39, $37, $34, $32, $2f, $2d, $2b, $28, $26, $24, $22, $20, $1e, $1c, $1a, $18, $16, $15, $13, $11, $10, $f, $d, $c, $b, $a, 8, 7, 6, 6, 5, 4, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 8, $a, $b, $c, $d, $f, $10, $11, $13, $15, $16, $18, $1a, $1c, $1e, $20, $22, $24, $26, $28, $2b, $2d, $2f, $32, $34, $37, $39, $3c, $3f, $41, $44, $47, $4a, $4d, $4f, $52, $55, $58, $5b, $5e, $61, $64, $67, $6a, $6d, $70, $74, $77, $7a, $7d, $80, $83, $86, $89, $8c, $90, $93, $96, $99, $9c, $9f, $a2, $a5, $a8, $ab, $ae, $b1, $b3, $b6, $b9, $bc, $bf, $c1, $c4, $c7, $c9, $cc, $ce, $d1, $d3, $d5, $d8, $da, $dc, $de, $e0, $e2, $e4, $e6, $e8, $ea, $eb, $ed, $ef, $f0, $f1, $f3, $f4, $f5, $f6, $f8, $f9, $fa, $fa, $fb, $fc, $fd, $fd, $fe, $fe, $fe, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $fe, $fe, $fe, $fd, $fd, $fc, $fb, $fa, $fa, $f9, $f8, $f6, $f5, $f4, $f3, $f1, $f0, $ef, $ed, $eb, $ea, $e8, $e6, $e4, $e2, $e0, $de, $dc, $da, $d8, $d5, $d3, $d1, $ce, $cc, $c9, $c7, $c4, $c1, $bf, $bc, $b9, $b6, $b3, $b1, $ae, $ab, $a8, $a5, $a2, $9f, $9c, $99, $96, $93, $90, $8c, $89, $86, $83 } void start() __constant unsigned int * const start::LAST_TIME = &last_time __constant char xbuf[$28] = { fill( $28, 0) } __constant char ybuf[$19] = { fill( $19, 0) } -zp[2]:2 [ rand_state#14 rand_state#25 rand_state#19 rand_state#12 rand_state#0 rand_state#1 main::count#2 main::count#1 ] reg byte x [ makechar::ii#3 makechar::ii#2 ] reg byte y [ makechar::b#3 makechar::b#7 makechar::b#2 ] -zp[1]:15 [ doplasma::ii#3 doplasma::ii#2 makechar::i#3 makechar::i#2 ] +zp[1]:13 [ doplasma::ii#3 doplasma::ii#2 makechar::i#3 makechar::i#2 ] zp[1]:16 [ doplasma::i#3 doplasma::i#2 ] -zp[1]:19 [ doplasma::c2a#3 doplasma::c2a#2 ] -zp[1]:17 [ doplasma::c2b#3 doplasma::c2b#2 ] +zp[1]:21 [ doplasma::c2a#3 doplasma::c2a#2 ] +zp[1]:19 [ doplasma::c2b#3 doplasma::c2b#2 ] reg byte x [ doplasma::jj#3 doplasma::jj#2 ] -zp[2]:13 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 makechar::c#3 makechar::c#2 ] +zp[2]:11 [ doplasma::scrn#6 doplasma::scrn#0 doplasma::scrn#13 makechar::c#3 makechar::c#2 ] reg byte y [ doplasma::j#3 doplasma::j#2 ] +zp[2]:22 [ print_line_cursor#9 print_line_cursor#0 main::count#2 main::count#1 ] reg byte x [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] -zp[2]:22 [ last_time ] -zp[1]:24 [ main::block#1 ] +zp[2]:14 [ rand_state ] +zp[2]:24 [ last_time ] +zp[1]:26 [ main::block#1 ] reg byte a [ main::tmp#1 ] -zp[1]:25 [ main::v#1 ] +zp[1]:27 [ main::v#1 ] reg byte x [ makechar::$9 ] -zp[1]:18 [ makechar::s#1 doplasma::c1a#3 doplasma::c1a#2 ] -zp[2]:20 [ makechar::$7 makechar::$8 makechar::$10 print_line_cursor#9 print_line_cursor#0 ] -zp[2]:10 [ rand::return#2 makechar::$3 rand::return#0 print_char_cursor#26 print_char_cursor#37 print_char_cursor#27 ] -zp[1]:12 [ makechar::$4 doplasma::c1b#3 doplasma::c1b#2 ] +zp[1]:20 [ makechar::s#1 doplasma::c1a#3 doplasma::c1a#2 ] +zp[2]:17 [ makechar::$7 makechar::$8 makechar::$10 print_char_cursor#26 print_char_cursor#37 print_char_cursor#27 ] +zp[1]:10 [ makechar::$4 doplasma::c1b#3 doplasma::c1b#2 ] +zp[2]:8 [ Ticks#0 rand::return#2 makechar::$3 rand::return#0 ] reg byte a [ doplasma::$6 ] reg byte a [ doplasma::$3 ] reg byte a [ doplasma::$1 ] -zp[2]:6 [ rand::$0 Ticks#0 ] -zp[2]:4 [ rand::$1 Ticks#1 print_uint::w#0 ] -zp[2]:8 [ rand::$2 ] +zp[2]:2 [ rand::$0 Ticks#1 print_uint::w#0 ] +zp[2]:4 [ rand::$1 ] +zp[2]:6 [ rand::$2 ] reg byte a [ print_uchar::$0 ] reg byte x [ print_uchar::$2 ] diff --git a/src/test/ref/plus4-keyboard-test.log b/src/test/ref/plus4-keyboard-test.log index 3e88ecc22..1803c5c9b 100644 --- a/src/test/ref/plus4-keyboard-test.log +++ b/src/test/ref/plus4-keyboard-test.log @@ -1,3 +1,4 @@ +Inlined call call __init Eliminating unused variable with no statement memset::$2 Eliminating unused variable with no statement main::$4 @@ -47,7 +48,7 @@ memset::@return: scope:[memset] from memset::@1 to:@return void main() -main: scope:[main] from __start +main: scope:[main] from __start::@1 asm { sei } memset::str#0 = (void *)DEFAULT_SCREEN memset::c#0 = ' ' @@ -126,11 +127,15 @@ main::@return: scope:[main] from main::@1 void __start() __start: scope:[__start] from - call main + to:__start::__init1 +__start::__init1: scope:[__start] from __start to:__start::@1 -__start::@1: scope:[__start] from __start +__start::@1: scope:[__start] from __start::__init1 + call main + to:__start::@2 +__start::@2: scope:[__start] from __start::@1 to:__start::@return -__start::@return: scope:[__start] from __start::@1 +__start::@return: scope:[__start] from __start::@2 return to:@return @@ -332,7 +337,9 @@ Eliminating unused constant memset::return#2 Successful SSA optimization PassNEliminateUnusedVars Removing unused procedure __start Removing unused procedure block __start +Removing unused procedure block __start::__init1 Removing unused procedure block __start::@1 +Removing unused procedure block __start::@2 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart Constant right-side identified [0] memset::end#0 = memset::$4 + memset::num#0 diff --git a/src/test/ref/printf-17.asm b/src/test/ref/printf-17.asm index 867b12fb4..410faf3d3 100644 --- a/src/test/ref/printf-17.asm +++ b/src/test/ref/printf-17.asm @@ -15,26 +15,14 @@ .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 .const STACK_BASE = $103 .const SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c - /// The capacity of the buffer (n passed to snprintf()) - /// Used to hold state while printing - .label __snprintf_capacity = $18 - // The number of chars that would have been filled when printing without capacity. Grows even after size>capacity. - /// Used to hold state while printing - .label __snprintf_size = $14 /// Current position in the buffer being filled ( initially *s passed to snprintf() /// Used to hold state while printing - .label __snprintf_buffer = $16 + .label __snprintf_buffer = $14 .label screen = $e .segment Code __start: { - // volatile size_t __snprintf_capacity - lda #<0 - sta.z __snprintf_capacity - sta.z __snprintf_capacity+1 - // volatile size_t __snprintf_size - sta.z __snprintf_size - sta.z __snprintf_size+1 // char * __snprintf_buffer + lda #<0 sta.z __snprintf_buffer sta.z __snprintf_buffer+1 jsr main @@ -50,16 +38,16 @@ snputc: { lda STACK_BASE+OFFSET_STACK_C,x tax // ++__snprintf_size; - inc.z __snprintf_size + inc __snprintf_size bne !+ - inc.z __snprintf_size+1 + inc __snprintf_size+1 !: // if(__snprintf_size > __snprintf_capacity) - lda.z __snprintf_size+1 - cmp.z __snprintf_capacity+1 + lda __snprintf_size+1 + cmp __snprintf_capacity+1 bne !+ - lda.z __snprintf_size - cmp.z __snprintf_capacity + lda __snprintf_size + cmp __snprintf_capacity beq __b1 !: bcc __b1 @@ -67,11 +55,11 @@ snputc: { rts __b1: // if(__snprintf_size==__snprintf_capacity) - lda.z __snprintf_size+1 - cmp.z __snprintf_capacity+1 + lda __snprintf_size+1 + cmp __snprintf_capacity+1 bne __b2 - lda.z __snprintf_size - cmp.z __snprintf_capacity + lda __snprintf_size + cmp __snprintf_capacity bne __b2 ldx #0 __b2: @@ -269,13 +257,13 @@ snprintf_init: { .label n = 2 // __snprintf_capacity = n lda.z n - sta.z __snprintf_capacity + sta __snprintf_capacity lda.z n+1 - sta.z __snprintf_capacity+1 + sta __snprintf_capacity+1 // __snprintf_size = 0 lda #<0 - sta.z __snprintf_size - sta.z __snprintf_size+1 + sta __snprintf_size + sta __snprintf_size+1 // __snprintf_buffer = s lda #capacity. + /// Used to hold state while printing + __snprintf_size: .word 0 diff --git a/src/test/ref/printf-17.cfg b/src/test/ref/printf-17.cfg index a08bafd59..954a78f9a 100644 --- a/src/test/ref/printf-17.cfg +++ b/src/test/ref/printf-17.cfg @@ -4,488 +4,486 @@ __start: scope:[__start] from [0] phi() to:__start::__init1 __start::__init1: scope:[__start] from __start - [1] __snprintf_capacity = 0 - [2] __snprintf_size = 0 - [3] __snprintf_buffer = (char *) 0 + [1] __snprintf_buffer = (char *) 0 to:__start::@1 __start::@1: scope:[__start] from __start::__init1 - [4] phi() - [5] call main + [2] phi() + [3] call main to:__start::@return __start::@return: scope:[__start] from __start::@1 - [6] return + [4] return to:@return __stackcall void snputc(char c) snputc: scope:[snputc] from - [7] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) - [8] __snprintf_size = ++ __snprintf_size - [9] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 + [5] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) + [6] __snprintf_size = ++ __snprintf_size + [7] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 to:snputc::@return snputc::@return: scope:[snputc] from snputc snputc::@2 - [10] return + [8] return to:@return snputc::@1: scope:[snputc] from snputc - [11] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 + [9] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 to:snputc::@2 snputc::@3: scope:[snputc] from snputc::@1 - [12] phi() + [10] phi() to:snputc::@2 snputc::@2: scope:[snputc] from snputc::@1 snputc::@3 - [13] snputc::c#2 = phi( snputc::@3/snputc::c#0, snputc::@1/0 ) - [14] *__snprintf_buffer = snputc::c#2 - [15] __snprintf_buffer = ++ __snprintf_buffer + [11] snputc::c#2 = phi( snputc::@3/snputc::c#0, snputc::@1/0 ) + [12] *__snprintf_buffer = snputc::c#2 + [13] __snprintf_buffer = ++ __snprintf_buffer to:snputc::@return void main() main: scope:[main] from __start::@1 - [16] phi() - [17] call snprintf_init + [14] phi() + [15] call snprintf_init to:main::@1 main::@1: scope:[main] from main - [18] phi() - [19] call printf_str + [16] phi() + [17] call printf_str to:main::@2 main::@2: scope:[main] from main::@1 - [20] stackpush(char) = 0 - [21] callexecute snputc + [18] stackpush(char) = 0 + [19] callexecute snputc sideeffect stackpullpadding(1) - [23] call print + [21] call print to:main::@3 main::@3: scope:[main] from main::@2 - [24] phi() - [25] call snprintf_init + [22] phi() + [23] call snprintf_init to:main::@4 main::@4: scope:[main] from main::@3 - [26] phi() - [27] call printf_str + [24] phi() + [25] call printf_str to:main::@5 main::@5: scope:[main] from main::@4 - [28] phi() - [29] call printf_string + [26] phi() + [27] call printf_string to:main::@6 main::@6: scope:[main] from main::@5 - [30] stackpush(char) = '!' - [31] callexecute snputc + [28] stackpush(char) = '!' + [29] callexecute snputc sideeffect stackpullpadding(1) - [33] call printf_str + [31] call printf_str to:main::@7 main::@7: scope:[main] from main::@6 - [34] stackpush(char) = 0 - [35] callexecute snputc + [32] stackpush(char) = 0 + [33] callexecute snputc sideeffect stackpullpadding(1) - [37] call print + [35] call print to:main::@8 main::@8: scope:[main] from main::@7 - [38] phi() - [39] call snprintf_init + [36] phi() + [37] call snprintf_init to:main::@9 main::@9: scope:[main] from main::@8 - [40] phi() - [41] call printf_str + [38] phi() + [39] call printf_str to:main::@10 main::@10: scope:[main] from main::@9 - [42] phi() - [43] call printf_sint + [40] phi() + [41] call printf_sint to:main::@11 main::@11: scope:[main] from main::@10 - [44] phi() - [45] call printf_str + [42] phi() + [43] call printf_str to:main::@12 main::@12: scope:[main] from main::@11 - [46] phi() - [47] call printf_uint + [44] phi() + [45] call printf_uint to:main::@13 main::@13: scope:[main] from main::@12 - [48] phi() - [49] call printf_str + [46] phi() + [47] call printf_str to:main::@14 main::@14: scope:[main] from main::@13 - [50] stackpush(char) = 0 - [51] callexecute snputc + [48] stackpush(char) = 0 + [49] callexecute snputc sideeffect stackpullpadding(1) - [53] call print + [51] call print to:main::@15 main::@15: scope:[main] from main::@14 - [54] phi() - [55] call snprintf_init + [52] phi() + [53] call snprintf_init to:main::@16 main::@16: scope:[main] from main::@15 - [56] phi() - [57] call printf_str + [54] phi() + [55] call printf_str to:main::@17 main::@17: scope:[main] from main::@16 - [58] phi() - [59] call printf_sint + [56] phi() + [57] call printf_sint to:main::@18 main::@18: scope:[main] from main::@17 - [60] phi() - [61] call printf_str + [58] phi() + [59] call printf_str to:main::@19 main::@19: scope:[main] from main::@18 - [62] stackpush(char) = 0 - [63] callexecute snputc + [60] stackpush(char) = 0 + [61] callexecute snputc sideeffect stackpullpadding(1) - [65] call print + [63] call print to:main::@return main::@return: scope:[main] from main::@19 - [66] return + [64] return to:@return void snprintf_init(char *s , unsigned int n) snprintf_init: scope:[snprintf_init] from main main::@15 main::@3 main::@8 - [67] snprintf_init::n#4 = phi( main/$14, main::@15/6, main::@3/$14, main::@8/$14 ) - [68] __snprintf_capacity = snprintf_init::n#4 - [69] __snprintf_size = 0 - [70] __snprintf_buffer = BUF + [65] snprintf_init::n#4 = phi( main/$14, main::@15/6, main::@3/$14, main::@8/$14 ) + [66] __snprintf_capacity = snprintf_init::n#4 + [67] __snprintf_size = 0 + [68] __snprintf_buffer = BUF to:snprintf_init::@return snprintf_init::@return: scope:[snprintf_init] from snprintf_init - [71] return + [69] return to:@return void printf_str(void (*putc)(char) , const char *s) printf_str: scope:[printf_str] from main::@1 main::@11 main::@13 main::@16 main::@18 main::@4 main::@6 main::@9 printf_number_buffer::@5 printf_string::@1 - [72] printf_str::putc#12 = phi( main::@1/&snputc, main::@11/&snputc, main::@13/&snputc, main::@16/&snputc, main::@18/&snputc, main::@4/&snputc, main::@6/&snputc, main::@9/&snputc, printf_number_buffer::@5/printf_str::putc#0, printf_string::@1/printf_string::putc#0 ) - [72] printf_str::s#12 = phi( main::@1/main::s, main::@11/main::s4, main::@13/main::s5, main::@16/main::s6, main::@18/main::s5, main::@4/main::s1, main::@6/main::s2, main::@9/main::s1, printf_number_buffer::@5/(char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS, printf_string::@1/main::str ) + [70] printf_str::putc#12 = phi( main::@1/&snputc, main::@11/&snputc, main::@13/&snputc, main::@16/&snputc, main::@18/&snputc, main::@4/&snputc, main::@6/&snputc, main::@9/&snputc, printf_number_buffer::@5/printf_str::putc#0, printf_string::@1/printf_string::putc#0 ) + [70] printf_str::s#12 = phi( main::@1/main::s, main::@11/main::s4, main::@13/main::s5, main::@16/main::s6, main::@18/main::s5, main::@4/main::s1, main::@6/main::s2, main::@9/main::s1, printf_number_buffer::@5/(char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS, printf_string::@1/main::str ) to:printf_str::@1 printf_str::@1: scope:[printf_str] from printf_str printf_str::@2 - [73] printf_str::s#11 = phi( printf_str/printf_str::s#12, printf_str::@2/printf_str::s#0 ) - [74] printf_str::c#1 = *printf_str::s#11 - [75] printf_str::s#0 = ++ printf_str::s#11 - [76] if(0!=printf_str::c#1) goto printf_str::@2 + [71] printf_str::s#11 = phi( printf_str/printf_str::s#12, printf_str::@2/printf_str::s#0 ) + [72] printf_str::c#1 = *printf_str::s#11 + [73] printf_str::s#0 = ++ printf_str::s#11 + [74] if(0!=printf_str::c#1) goto printf_str::@2 to:printf_str::@return printf_str::@return: scope:[printf_str] from printf_str::@1 - [77] return + [75] return to:@return printf_str::@2: scope:[printf_str] from printf_str::@1 - [78] stackpush(char) = printf_str::c#1 - [79] callexecute *printf_str::putc#12 + [76] stackpush(char) = printf_str::c#1 + [77] callexecute *printf_str::putc#12 sideeffect stackpullpadding(1) to:printf_str::@1 void print(char *msg) print: scope:[print] from main::@14 main::@19 main::@2 main::@7 - [81] screen#25 = phi( main::@14/screen#1, main::@19/screen#1, main::@2/(char *) 1024, main::@7/screen#1 ) + [79] screen#25 = phi( main::@14/screen#1, main::@19/screen#1, main::@2/(char *) 1024, main::@7/screen#1 ) to:print::@1 print::@1: scope:[print] from print print::@2 - [82] screen#1 = phi( print/screen#25, print::@2/screen#0 ) - [82] print::msg#5 = phi( print/BUF, print::@2/print::msg#0 ) - [83] if(0!=*print::msg#5) goto print::@2 + [80] screen#1 = phi( print/screen#25, print::@2/screen#0 ) + [80] print::msg#5 = phi( print/BUF, print::@2/print::msg#0 ) + [81] if(0!=*print::msg#5) goto print::@2 to:print::@return print::@return: scope:[print] from print::@1 - [84] return + [82] return to:@return print::@2: scope:[print] from print::@1 - [85] *screen#1 = *print::msg#5 - [86] screen#0 = ++ screen#1 - [87] print::msg#0 = ++ print::msg#5 + [83] *screen#1 = *print::msg#5 + [84] screen#0 = ++ screen#1 + [85] print::msg#0 = ++ print::msg#5 to:print::@1 void printf_string(void (*putc)(char) , char *str , char format_min_length , char format_justify_left) printf_string: scope:[printf_string] from main::@5 - [88] phi() + [86] phi() to:printf_string::@1 printf_string::@1: scope:[printf_string] from printf_string - [89] phi() - [90] call printf_str + [87] phi() + [88] call printf_str to:printf_string::@return printf_string::@return: scope:[printf_string] from printf_string::@1 - [91] return + [89] return to:@return void printf_sint(void (*putc)(char) , int value , char format_min_length , char format_justify_left , char format_sign_always , char format_zero_padding , char format_upper_case , char format_radix) printf_sint: scope:[printf_sint] from main::@10 main::@17 - [92] printf_sint::value#3 = phi( main::@10/3, main::@17/$56ce ) - [93] *((char *)&printf_buffer) = 0 - [94] if(printf_sint::value#3<0) goto printf_sint::@1 + [90] printf_sint::value#3 = phi( main::@10/3, main::@17/$56ce ) + [91] *((char *)&printf_buffer) = 0 + [92] if(printf_sint::value#3<0) goto printf_sint::@1 to:printf_sint::@2 printf_sint::@1: scope:[printf_sint] from printf_sint - [95] printf_sint::value#0 = - printf_sint::value#3 - [96] *((char *)&printf_buffer) = '-' + [93] printf_sint::value#0 = - printf_sint::value#3 + [94] *((char *)&printf_buffer) = '-' to:printf_sint::@2 printf_sint::@2: scope:[printf_sint] from printf_sint printf_sint::@1 - [97] printf_sint::value#5 = phi( printf_sint::@1/printf_sint::value#0, printf_sint/printf_sint::value#3 ) - [98] utoa::value#1 = (unsigned int)printf_sint::value#5 - [99] call utoa + [95] printf_sint::value#5 = phi( printf_sint::@1/printf_sint::value#0, printf_sint/printf_sint::value#3 ) + [96] utoa::value#1 = (unsigned int)printf_sint::value#5 + [97] call utoa to:printf_sint::@3 printf_sint::@3: scope:[printf_sint] from printf_sint::@2 - [100] printf_number_buffer::buffer_sign#0 = *((char *)&printf_buffer) - [101] call printf_number_buffer + [98] printf_number_buffer::buffer_sign#0 = *((char *)&printf_buffer) + [99] call printf_number_buffer to:printf_sint::@return printf_sint::@return: scope:[printf_sint] from printf_sint::@3 - [102] return + [100] return to:@return void printf_uint(void (*putc)(char) , unsigned int uvalue , char format_min_length , char format_justify_left , char format_sign_always , char format_zero_padding , char format_upper_case , char format_radix) printf_uint: scope:[printf_uint] from main::@12 - [103] phi() + [101] phi() to:printf_uint::@1 printf_uint::@1: scope:[printf_uint] from printf_uint - [104] *((char *)&printf_buffer) = 0 - [105] call utoa + [102] *((char *)&printf_buffer) = 0 + [103] call utoa to:printf_uint::@2 printf_uint::@2: scope:[printf_uint] from printf_uint::@1 - [106] printf_number_buffer::buffer_sign#1 = *((char *)&printf_buffer) - [107] call printf_number_buffer + [104] printf_number_buffer::buffer_sign#1 = *((char *)&printf_buffer) + [105] call printf_number_buffer to:printf_uint::@return printf_uint::@return: scope:[printf_uint] from printf_uint::@2 - [108] return + [106] return to:@return void utoa(unsigned int value , char *buffer , char radix) utoa: scope:[utoa] from printf_sint::@2 printf_uint::@1 - [109] utoa::value#10 = phi( printf_sint::@2/utoa::value#1, printf_uint::@1/printf_uint::uvalue#0 ) - [109] utoa::radix#2 = phi( printf_sint::@2/DECIMAL, printf_uint::@1/HEXADECIMAL ) - [110] if(utoa::radix#2==DECIMAL) goto utoa::@1 + [107] utoa::value#10 = phi( printf_sint::@2/utoa::value#1, printf_uint::@1/printf_uint::uvalue#0 ) + [107] utoa::radix#2 = phi( printf_sint::@2/DECIMAL, printf_uint::@1/HEXADECIMAL ) + [108] if(utoa::radix#2==DECIMAL) goto utoa::@1 to:utoa::@2 utoa::@2: scope:[utoa] from utoa - [111] if(utoa::radix#2==HEXADECIMAL) goto utoa::@1 + [109] if(utoa::radix#2==HEXADECIMAL) goto utoa::@1 to:utoa::@3 utoa::@3: scope:[utoa] from utoa::@2 - [112] if(utoa::radix#2==OCTAL) goto utoa::@1 + [110] if(utoa::radix#2==OCTAL) goto utoa::@1 to:utoa::@4 utoa::@4: scope:[utoa] from utoa::@3 - [113] if(utoa::radix#2==BINARY) goto utoa::@1 + [111] if(utoa::radix#2==BINARY) goto utoa::@1 to:utoa::@5 utoa::@5: scope:[utoa] from utoa::@4 - [114] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS) = 'e' - [115] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1) = 'r' - [116] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2) = 'r' - [117] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3) = 0 + [112] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS) = 'e' + [113] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1) = 'r' + [114] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2) = 'r' + [115] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3) = 0 to:utoa::@return utoa::@return: scope:[utoa] from utoa::@5 utoa::@8 - [118] return + [116] return to:@return utoa::@1: scope:[utoa] from utoa utoa::@2 utoa::@3 utoa::@4 - [119] utoa::digit_values#8 = phi( utoa/RADIX_DECIMAL_VALUES, utoa::@2/RADIX_HEXADECIMAL_VALUES, utoa::@3/RADIX_OCTAL_VALUES, utoa::@4/RADIX_BINARY_VALUES ) - [119] utoa::max_digits#7 = phi( utoa/5, utoa::@2/4, utoa::@3/6, utoa::@4/$10 ) + [117] utoa::digit_values#8 = phi( utoa/RADIX_DECIMAL_VALUES, utoa::@2/RADIX_HEXADECIMAL_VALUES, utoa::@3/RADIX_OCTAL_VALUES, utoa::@4/RADIX_BINARY_VALUES ) + [117] utoa::max_digits#7 = phi( utoa/5, utoa::@2/4, utoa::@3/6, utoa::@4/$10 ) to:utoa::@6 utoa::@6: scope:[utoa] from utoa::@1 utoa::@9 - [120] utoa::buffer#10 = phi( utoa::@9/utoa::buffer#15, utoa::@1/(char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS ) - [120] utoa::started#2 = phi( utoa::@9/utoa::started#4, utoa::@1/0 ) - [120] utoa::value#3 = phi( utoa::@9/utoa::value#7, utoa::@1/utoa::value#10 ) - [120] utoa::digit#2 = phi( utoa::@9/utoa::digit#1, utoa::@1/0 ) - [121] utoa::$4 = utoa::max_digits#7 - 1 - [122] if(utoa::digit#2=utoa::digit_value#0) goto utoa::@10 + [128] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@10 to:utoa::@9 utoa::@9: scope:[utoa] from utoa::@11 utoa::@12 - [131] utoa::buffer#15 = phi( utoa::@12/utoa::buffer#10, utoa::@11/utoa::buffer#4 ) - [131] utoa::started#4 = phi( utoa::@12/utoa::started#2, utoa::@11/1 ) - [131] utoa::value#7 = phi( utoa::@12/utoa::value#3, utoa::@11/utoa::value#0 ) - [132] utoa::digit#1 = ++ utoa::digit#2 + [129] utoa::buffer#15 = phi( utoa::@12/utoa::buffer#10, utoa::@11/utoa::buffer#4 ) + [129] utoa::started#4 = phi( utoa::@12/utoa::started#2, utoa::@11/1 ) + [129] utoa::value#7 = phi( utoa::@12/utoa::value#3, utoa::@11/utoa::value#0 ) + [130] utoa::digit#1 = ++ utoa::digit#2 to:utoa::@6 utoa::@10: scope:[utoa] from utoa::@12 utoa::@7 - [133] utoa_append::buffer#0 = utoa::buffer#10 - [134] utoa_append::value#0 = utoa::value#3 - [135] utoa_append::sub#0 = utoa::digit_value#0 - [136] call utoa_append - [137] utoa_append::return#0 = utoa_append::value#2 + [131] utoa_append::buffer#0 = utoa::buffer#10 + [132] utoa_append::value#0 = utoa::value#3 + [133] utoa_append::sub#0 = utoa::digit_value#0 + [134] call utoa_append + [135] utoa_append::return#0 = utoa_append::value#2 to:utoa::@11 utoa::@11: scope:[utoa] from utoa::@10 - [138] utoa::value#0 = utoa_append::return#0 - [139] utoa::buffer#4 = ++ utoa::buffer#10 + [136] utoa::value#0 = utoa_append::return#0 + [137] utoa::buffer#4 = ++ utoa::buffer#10 to:utoa::@9 void printf_number_buffer(void (*putc)(char) , char buffer_sign , char *buffer_digits , char format_min_length , char format_justify_left , char format_sign_always , char format_zero_padding , char format_upper_case , char format_radix) printf_number_buffer: scope:[printf_number_buffer] from printf_sint::@3 printf_uint::@2 - [140] printf_number_buffer::format_upper_case#10 = phi( printf_sint::@3/0, printf_uint::@2/printf_uint::format_upper_case#0 ) - [140] printf_number_buffer::putc#10 = phi( printf_sint::@3/&snputc, printf_uint::@2/printf_uint::putc#0 ) - [140] printf_number_buffer::buffer_sign#10 = phi( printf_sint::@3/printf_number_buffer::buffer_sign#0, printf_uint::@2/printf_number_buffer::buffer_sign#1 ) - [140] printf_number_buffer::format_zero_padding#10 = phi( printf_sint::@3/0, printf_uint::@2/printf_uint::format_zero_padding#0 ) - [140] printf_number_buffer::format_justify_left#10 = phi( printf_sint::@3/0, printf_uint::@2/printf_uint::format_justify_left#0 ) - [140] printf_number_buffer::format_min_length#2 = phi( printf_sint::@3/0, printf_uint::@2/printf_uint::format_min_length#0 ) - [141] if(0==printf_number_buffer::format_min_length#2) goto printf_number_buffer::@1 + [138] printf_number_buffer::format_upper_case#10 = phi( printf_sint::@3/0, printf_uint::@2/printf_uint::format_upper_case#0 ) + [138] printf_number_buffer::putc#10 = phi( printf_sint::@3/&snputc, printf_uint::@2/printf_uint::putc#0 ) + [138] printf_number_buffer::buffer_sign#10 = phi( printf_sint::@3/printf_number_buffer::buffer_sign#0, printf_uint::@2/printf_number_buffer::buffer_sign#1 ) + [138] printf_number_buffer::format_zero_padding#10 = phi( printf_sint::@3/0, printf_uint::@2/printf_uint::format_zero_padding#0 ) + [138] printf_number_buffer::format_justify_left#10 = phi( printf_sint::@3/0, printf_uint::@2/printf_uint::format_justify_left#0 ) + [138] printf_number_buffer::format_min_length#2 = phi( printf_sint::@3/0, printf_uint::@2/printf_uint::format_min_length#0 ) + [139] if(0==printf_number_buffer::format_min_length#2) goto printf_number_buffer::@1 to:printf_number_buffer::@6 printf_number_buffer::@6: scope:[printf_number_buffer] from printf_number_buffer - [142] phi() - [143] call strlen - [144] strlen::return#2 = strlen::len#2 + [140] phi() + [141] call strlen + [142] strlen::return#2 = strlen::len#2 to:printf_number_buffer::@14 printf_number_buffer::@14: scope:[printf_number_buffer] from printf_number_buffer::@6 - [145] printf_number_buffer::$19 = strlen::return#2 - [146] printf_number_buffer::len#0 = (signed char)printf_number_buffer::$19 - [147] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 + [143] printf_number_buffer::$19 = strlen::return#2 + [144] printf_number_buffer::len#0 = (signed char)printf_number_buffer::$19 + [145] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 to:printf_number_buffer::@7 printf_number_buffer::@7: scope:[printf_number_buffer] from printf_number_buffer::@14 - [148] printf_number_buffer::len#1 = ++ printf_number_buffer::len#0 + [146] printf_number_buffer::len#1 = ++ printf_number_buffer::len#0 to:printf_number_buffer::@13 printf_number_buffer::@13: scope:[printf_number_buffer] from printf_number_buffer::@14 printf_number_buffer::@7 - [149] printf_number_buffer::len#2 = phi( printf_number_buffer::@14/printf_number_buffer::len#0, printf_number_buffer::@7/printf_number_buffer::len#1 ) - [150] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#2 - printf_number_buffer::len#2 - [151] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 + [147] printf_number_buffer::len#2 = phi( printf_number_buffer::@14/printf_number_buffer::len#0, printf_number_buffer::@7/printf_number_buffer::len#1 ) + [148] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#2 - printf_number_buffer::len#2 + [149] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 to:printf_number_buffer::@1 printf_number_buffer::@21: scope:[printf_number_buffer] from printf_number_buffer::@13 - [152] phi() + [150] phi() to:printf_number_buffer::@1 printf_number_buffer::@1: scope:[printf_number_buffer] from printf_number_buffer printf_number_buffer::@13 printf_number_buffer::@21 - [153] printf_number_buffer::padding#10 = phi( printf_number_buffer/0, printf_number_buffer::@21/printf_number_buffer::padding#1, printf_number_buffer::@13/0 ) - [154] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 + [151] printf_number_buffer::padding#10 = phi( printf_number_buffer/0, printf_number_buffer::@21/printf_number_buffer::padding#1, printf_number_buffer::@13/0 ) + [152] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 to:printf_number_buffer::@17 printf_number_buffer::@17: scope:[printf_number_buffer] from printf_number_buffer::@1 - [155] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 + [153] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 to:printf_number_buffer::@16 printf_number_buffer::@16: scope:[printf_number_buffer] from printf_number_buffer::@17 - [156] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 + [154] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 to:printf_number_buffer::@2 printf_number_buffer::@8: scope:[printf_number_buffer] from printf_number_buffer::@16 - [157] printf_padding::putc#0 = printf_number_buffer::putc#10 - [158] printf_padding::length#0 = (char)printf_number_buffer::padding#10 - [159] call printf_padding + [155] printf_padding::putc#0 = printf_number_buffer::putc#10 + [156] printf_padding::length#0 = (char)printf_number_buffer::padding#10 + [157] call printf_padding to:printf_number_buffer::@2 printf_number_buffer::@2: scope:[printf_number_buffer] from printf_number_buffer::@1 printf_number_buffer::@16 printf_number_buffer::@17 printf_number_buffer::@8 - [160] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 + [158] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 to:printf_number_buffer::@9 printf_number_buffer::@9: scope:[printf_number_buffer] from printf_number_buffer::@2 - [161] stackpush(char) = printf_number_buffer::buffer_sign#10 - [162] callexecute *printf_number_buffer::putc#10 + [159] stackpush(char) = printf_number_buffer::buffer_sign#10 + [160] callexecute *printf_number_buffer::putc#10 sideeffect stackpullpadding(1) to:printf_number_buffer::@3 printf_number_buffer::@3: scope:[printf_number_buffer] from printf_number_buffer::@2 printf_number_buffer::@9 - [164] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 + [162] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 to:printf_number_buffer::@18 printf_number_buffer::@18: scope:[printf_number_buffer] from printf_number_buffer::@3 - [165] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 + [163] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 to:printf_number_buffer::@4 printf_number_buffer::@10: scope:[printf_number_buffer] from printf_number_buffer::@18 - [166] printf_padding::putc#1 = printf_number_buffer::putc#10 - [167] printf_padding::length#1 = (char)printf_number_buffer::padding#10 - [168] call printf_padding + [164] printf_padding::putc#1 = printf_number_buffer::putc#10 + [165] printf_padding::length#1 = (char)printf_number_buffer::padding#10 + [166] call printf_padding to:printf_number_buffer::@4 printf_number_buffer::@4: scope:[printf_number_buffer] from printf_number_buffer::@10 printf_number_buffer::@18 printf_number_buffer::@3 - [169] if(0==printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 + [167] if(0==printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 to:printf_number_buffer::@11 printf_number_buffer::@11: scope:[printf_number_buffer] from printf_number_buffer::@4 - [170] phi() - [171] call strupr + [168] phi() + [169] call strupr to:printf_number_buffer::@5 printf_number_buffer::@5: scope:[printf_number_buffer] from printf_number_buffer::@11 printf_number_buffer::@4 - [172] printf_str::putc#0 = printf_number_buffer::putc#10 - [173] call printf_str + [170] printf_str::putc#0 = printf_number_buffer::putc#10 + [171] call printf_str to:printf_number_buffer::@15 printf_number_buffer::@15: scope:[printf_number_buffer] from printf_number_buffer::@5 - [174] if(0==printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return + [172] if(0==printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return to:printf_number_buffer::@20 printf_number_buffer::@20: scope:[printf_number_buffer] from printf_number_buffer::@15 - [175] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return + [173] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return to:printf_number_buffer::@19 printf_number_buffer::@19: scope:[printf_number_buffer] from printf_number_buffer::@20 - [176] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 + [174] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 to:printf_number_buffer::@return printf_number_buffer::@12: scope:[printf_number_buffer] from printf_number_buffer::@19 - [177] printf_padding::putc#2 = printf_number_buffer::putc#10 - [178] printf_padding::length#2 = (char)printf_number_buffer::padding#10 - [179] call printf_padding + [175] printf_padding::putc#2 = printf_number_buffer::putc#10 + [176] printf_padding::length#2 = (char)printf_number_buffer::padding#10 + [177] call printf_padding to:printf_number_buffer::@return printf_number_buffer::@return: scope:[printf_number_buffer] from printf_number_buffer::@12 printf_number_buffer::@15 printf_number_buffer::@19 printf_number_buffer::@20 - [180] return + [178] return to:@return unsigned int utoa_append(char *buffer , unsigned int value , unsigned int sub) utoa_append: scope:[utoa_append] from utoa::@10 - [181] phi() + [179] phi() to:utoa_append::@1 utoa_append::@1: scope:[utoa_append] from utoa_append utoa_append::@2 - [182] utoa_append::digit#2 = phi( utoa_append/0, utoa_append::@2/utoa_append::digit#1 ) - [182] utoa_append::value#2 = phi( utoa_append/utoa_append::value#0, utoa_append::@2/utoa_append::value#1 ) - [183] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 + [180] utoa_append::digit#2 = phi( utoa_append/0, utoa_append::@2/utoa_append::digit#1 ) + [180] utoa_append::value#2 = phi( utoa_append/utoa_append::value#0, utoa_append::@2/utoa_append::value#1 ) + [181] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 to:utoa_append::@3 utoa_append::@3: scope:[utoa_append] from utoa_append::@1 - [184] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] + [182] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] to:utoa_append::@return utoa_append::@return: scope:[utoa_append] from utoa_append::@3 - [185] return + [183] return to:@return utoa_append::@2: scope:[utoa_append] from utoa_append::@1 - [186] utoa_append::digit#1 = ++ utoa_append::digit#2 - [187] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 + [184] utoa_append::digit#1 = ++ utoa_append::digit#2 + [185] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 to:utoa_append::@1 unsigned int strlen(char *str) strlen: scope:[strlen] from printf_number_buffer::@6 - [188] phi() + [186] phi() to:strlen::@1 strlen::@1: scope:[strlen] from strlen strlen::@2 - [189] strlen::len#2 = phi( strlen/0, strlen::@2/strlen::len#1 ) - [189] strlen::str#3 = phi( strlen/(char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS, strlen::@2/strlen::str#0 ) - [190] if(0!=*strlen::str#3) goto strlen::@2 + [187] strlen::len#2 = phi( strlen/0, strlen::@2/strlen::len#1 ) + [187] strlen::str#3 = phi( strlen/(char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS, strlen::@2/strlen::str#0 ) + [188] if(0!=*strlen::str#3) goto strlen::@2 to:strlen::@return strlen::@return: scope:[strlen] from strlen::@1 - [191] return + [189] return to:@return strlen::@2: scope:[strlen] from strlen::@1 - [192] strlen::len#1 = ++ strlen::len#2 - [193] strlen::str#0 = ++ strlen::str#3 + [190] strlen::len#1 = ++ strlen::len#2 + [191] strlen::str#0 = ++ strlen::str#3 to:strlen::@1 void printf_padding(void (*putc)(char) , char pad , char length) printf_padding: scope:[printf_padding] from printf_number_buffer::@10 printf_number_buffer::@12 printf_number_buffer::@8 - [194] printf_padding::putc#7 = phi( printf_number_buffer::@10/printf_padding::putc#1, printf_number_buffer::@12/printf_padding::putc#2, printf_number_buffer::@8/printf_padding::putc#0 ) - [194] printf_padding::pad#7 = phi( printf_number_buffer::@10/'0', printf_number_buffer::@12/' ', printf_number_buffer::@8/' ' ) - [194] printf_padding::length#6 = phi( printf_number_buffer::@10/printf_padding::length#1, printf_number_buffer::@12/printf_padding::length#2, printf_number_buffer::@8/printf_padding::length#0 ) + [192] printf_padding::putc#7 = phi( printf_number_buffer::@10/printf_padding::putc#1, printf_number_buffer::@12/printf_padding::putc#2, printf_number_buffer::@8/printf_padding::putc#0 ) + [192] printf_padding::pad#7 = phi( printf_number_buffer::@10/'0', printf_number_buffer::@12/' ', printf_number_buffer::@8/' ' ) + [192] printf_padding::length#6 = phi( printf_number_buffer::@10/printf_padding::length#1, printf_number_buffer::@12/printf_padding::length#2, printf_number_buffer::@8/printf_padding::length#0 ) to:printf_padding::@1 printf_padding::@1: scope:[printf_padding] from printf_padding printf_padding::@3 - [195] printf_padding::i#2 = phi( printf_padding/0, printf_padding::@3/printf_padding::i#1 ) - [196] if(printf_padding::i#2=utoa::digit_value#0) goto utoa::@14 -Simple Condition printf_number_buffer::$35 [222] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 -Simple Condition printf_number_buffer::$2 [223] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@21 -Simple Condition printf_number_buffer::$36 [225] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 -Simple Condition printf_number_buffer::$37 [227] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 -Simple Condition printf_number_buffer::$14 [228] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@24 -Simple Condition printf_string::$17 [230] if(0!=printf_string::padding#0) goto printf_string::@5 -Simple Condition printf_string::$18 [232] if(0!=printf_string::padding#0) goto printf_string::@6 +Simple Condition toupper::$1 [217] if(toupper::ch#0<='z') goto toupper::@1 +Simple Condition utoa::$6 [218] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@14 +Simple Condition printf_number_buffer::$35 [220] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 +Simple Condition printf_number_buffer::$2 [221] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@21 +Simple Condition printf_number_buffer::$36 [223] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 +Simple Condition printf_number_buffer::$37 [225] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 +Simple Condition printf_number_buffer::$14 [226] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@24 +Simple Condition printf_string::$17 [228] if(0!=printf_string::padding#0) goto printf_string::@5 +Simple Condition printf_string::$18 [230] if(0!=printf_string::padding#0) goto printf_string::@6 Successful SSA optimization Pass2ConditionalJumpSimplification Negating conditional jump and destination [8] if(toupper::ch#0<'a') goto toupper::@2 Negating conditional jump and destination [110] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 @@ -2684,8 +2682,8 @@ Negating conditional jump and destination [127] if(0==printf_number_buffer::form Negating conditional jump and destination [140] if(0==printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return Negating conditional jump and destination [149] if(0!=printf_string::format_justify_left#0) goto printf_string::@2 Negating conditional jump and destination [152] if(0==printf_string::format_justify_left#0) goto printf_string::@return -Negating conditional jump and destination [223] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 -Negating conditional jump and destination [228] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return +Negating conditional jump and destination [221] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 +Negating conditional jump and destination [226] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return Successful SSA optimization Pass2ConditionalJumpSequenceImprovement Constant right-side identified [153] printf_padding::length#3 = (char)printf_string::padding#0 Constant right-side identified [155] printf_padding::length#4 = (char)printf_string::padding#0 @@ -2695,8 +2693,8 @@ Constant printf_padding::length#4 = (char)printf_string::padding#0 Successful SSA optimization Pass2ConstantIdentification if() condition always false - eliminating [149] if(0!=printf_string::format_justify_left#0) goto printf_string::@2 if() condition always true - replacing block destination [152] if(0==printf_string::format_justify_left#0) goto printf_string::@return -if() condition always false - eliminating [230] if(0!=printf_string::padding#0) goto printf_string::@5 -if() condition always false - eliminating [232] if(0!=printf_string::padding#0) goto printf_string::@6 +if() condition always false - eliminating [228] if(0!=printf_string::padding#0) goto printf_string::@5 +if() condition always false - eliminating [230] if(0!=printf_string::padding#0) goto printf_string::@6 Successful SSA optimization Pass2ConstantIfs Simplifying constant evaluating to zero (char)printf_string::padding#0 in Simplifying constant evaluating to zero (char)printf_string::padding#0 in @@ -3042,61 +3040,61 @@ Adding NOP phi() at start of strlen::@3 Adding NOP phi() at start of strupr Adding NOP phi() at start of strupr::@3 CALL GRAPH -Calls in [__start] to main:6 -Calls in [main] to snprintf_init:20 printf_str:22 snputc:24 print:26 snprintf_init:28 printf_str:30 printf_string:32 snputc:34 printf_str:36 snputc:38 print:41 snprintf_init:43 printf_str:45 printf_sint:47 printf_str:49 printf_uint:51 printf_str:53 snputc:55 print:58 snprintf_init:60 printf_str:62 printf_sint:64 printf_str:66 snputc:68 print:71 -Calls in [printf_str] to null:87 -Calls in [printf_string] to printf_str:104 -Calls in [printf_sint] to utoa:114 printf_number_buffer:117 -Calls in [printf_uint] to utoa:126 printf_number_buffer:129 -Calls in [utoa] to utoa_append:168 -Calls in [printf_number_buffer] to strlen:180 null:197 strupr:203 printf_str:207 printf_padding:216 printf_padding:222 printf_padding:228 -Calls in [strupr] to toupper:256 -Calls in [printf_padding] to null:267 +Calls in [__start] to main:4 +Calls in [main] to snprintf_init:18 printf_str:20 snputc:22 print:24 snprintf_init:26 printf_str:28 printf_string:30 snputc:32 printf_str:34 snputc:36 print:39 snprintf_init:41 printf_str:43 printf_sint:45 printf_str:47 printf_uint:49 printf_str:51 snputc:53 print:56 snprintf_init:58 printf_str:60 printf_sint:62 printf_str:64 snputc:66 print:69 +Calls in [printf_str] to null:85 +Calls in [printf_string] to printf_str:102 +Calls in [printf_sint] to utoa:112 printf_number_buffer:115 +Calls in [printf_uint] to utoa:124 printf_number_buffer:127 +Calls in [utoa] to utoa_append:166 +Calls in [printf_number_buffer] to strlen:178 null:195 strupr:201 printf_str:205 printf_padding:214 printf_padding:220 printf_padding:226 +Calls in [strupr] to toupper:254 +Calls in [printf_padding] to null:265 Created 39 initial phi equivalence classes -Coalesced [18] snputc::c#4 = snputc::c#0 -Coalesced [40] screen#42 = screen#1 -Coalesced (already) [57] screen#40 = screen#1 -Coalesced (already) [70] screen#41 = screen#1 -Coalesced [80] printf_str::s#14 = printf_str::s#12 -Coalesced [89] printf_str::s#15 = printf_str::s#0 -Coalesced (already) [91] screen#43 = screen#25 -Coalesced [98] print::msg#8 = print::msg#0 -Coalesced [99] screen#44 = screen#0 -Coalesced [110] printf_sint::value#9 = printf_sint::value#3 -Coalesced [113] utoa::value#17 = utoa::value#1 -Coalesced [116] printf_number_buffer::buffer_sign#13 = printf_number_buffer::buffer_sign#0 -Coalesced [122] printf_sint::value#8 = printf_sint::value#0 -Coalesced [128] printf_number_buffer::buffer_sign#14 = printf_number_buffer::buffer_sign#1 -Coalesced [144] utoa::value#19 = utoa::value#10 -Coalesced [156] utoa::value#20 = utoa::value#3 -Coalesced [157] utoa::started#6 = utoa::started#2 -Coalesced [158] utoa::buffer#24 = utoa::buffer#10 -Coalesced [161] utoa::digit#7 = utoa::digit#1 -Coalesced (already) [162] utoa::value#18 = utoa::value#7 -Coalesced (already) [163] utoa::started#5 = utoa::started#4 -Coalesced (already) [164] utoa::buffer#23 = utoa::buffer#15 -Coalesced [172] utoa::value#21 = utoa::value#0 -Coalesced [173] utoa::buffer#25 = utoa::buffer#4 -Coalesced [186] printf_number_buffer::len#5 = printf_number_buffer::len#1 -Coalesced [206] printf_str::putc#13 = printf_str::putc#0 -Coalesced [214] printf_padding::length#10 = printf_padding::length#2 -Coalesced [215] printf_padding::putc#10 = printf_padding::putc#2 -Coalesced [220] printf_padding::length#9 = printf_padding::length#1 -Coalesced [221] printf_padding::putc#9 = printf_padding::putc#1 -Coalesced [226] printf_padding::length#11 = printf_padding::length#0 -Coalesced [227] printf_padding::putc#11 = printf_padding::putc#0 -Coalesced [230] printf_number_buffer::padding#17 = printf_number_buffer::padding#1 -Coalesced [231] printf_number_buffer::len#4 = printf_number_buffer::len#0 -Coalesced [232] utoa_append::value#6 = utoa_append::value#0 -Coalesced [239] utoa_append::value#7 = utoa_append::value#1 -Coalesced [240] utoa_append::digit#5 = utoa_append::digit#1 -Coalesced [248] strlen::str#6 = strlen::str#0 -Coalesced [249] strlen::len#5 = strlen::len#1 -Coalesced [261] strupr::src#5 = strupr::src#1 -Coalesced [270] printf_padding::i#5 = printf_padding::i#1 -Coalesced [273] toupper::return#7 = toupper::ch#0 -Coalesced [277] toupper::return#6 = toupper::return#0 +Coalesced [16] snputc::c#4 = snputc::c#0 +Coalesced [38] screen#42 = screen#1 +Coalesced (already) [55] screen#40 = screen#1 +Coalesced (already) [68] screen#41 = screen#1 +Coalesced [78] printf_str::s#14 = printf_str::s#12 +Coalesced [87] printf_str::s#15 = printf_str::s#0 +Coalesced (already) [89] screen#43 = screen#25 +Coalesced [96] print::msg#8 = print::msg#0 +Coalesced [97] screen#44 = screen#0 +Coalesced [108] printf_sint::value#9 = printf_sint::value#3 +Coalesced [111] utoa::value#17 = utoa::value#1 +Coalesced [114] printf_number_buffer::buffer_sign#13 = printf_number_buffer::buffer_sign#0 +Coalesced [120] printf_sint::value#8 = printf_sint::value#0 +Coalesced [126] printf_number_buffer::buffer_sign#14 = printf_number_buffer::buffer_sign#1 +Coalesced [142] utoa::value#19 = utoa::value#10 +Coalesced [154] utoa::value#20 = utoa::value#3 +Coalesced [155] utoa::started#6 = utoa::started#2 +Coalesced [156] utoa::buffer#24 = utoa::buffer#10 +Coalesced [159] utoa::digit#7 = utoa::digit#1 +Coalesced (already) [160] utoa::value#18 = utoa::value#7 +Coalesced (already) [161] utoa::started#5 = utoa::started#4 +Coalesced (already) [162] utoa::buffer#23 = utoa::buffer#15 +Coalesced [170] utoa::value#21 = utoa::value#0 +Coalesced [171] utoa::buffer#25 = utoa::buffer#4 +Coalesced [184] printf_number_buffer::len#5 = printf_number_buffer::len#1 +Coalesced [204] printf_str::putc#13 = printf_str::putc#0 +Coalesced [212] printf_padding::length#10 = printf_padding::length#2 +Coalesced [213] printf_padding::putc#10 = printf_padding::putc#2 +Coalesced [218] printf_padding::length#9 = printf_padding::length#1 +Coalesced [219] printf_padding::putc#9 = printf_padding::putc#1 +Coalesced [224] printf_padding::length#11 = printf_padding::length#0 +Coalesced [225] printf_padding::putc#11 = printf_padding::putc#0 +Coalesced [228] printf_number_buffer::padding#17 = printf_number_buffer::padding#1 +Coalesced [229] printf_number_buffer::len#4 = printf_number_buffer::len#0 +Coalesced [230] utoa_append::value#6 = utoa_append::value#0 +Coalesced [237] utoa_append::value#7 = utoa_append::value#1 +Coalesced [238] utoa_append::digit#5 = utoa_append::digit#1 +Coalesced [246] strlen::str#6 = strlen::str#0 +Coalesced [247] strlen::len#5 = strlen::len#1 +Coalesced [259] strupr::src#5 = strupr::src#1 +Coalesced [268] printf_padding::i#5 = printf_padding::i#1 +Coalesced [271] toupper::return#7 = toupper::ch#0 +Coalesced [275] toupper::return#6 = toupper::return#0 Coalesced down to 32 phi equivalence classes Culled Empty Block label __start::@2 Culled Empty Block label __start::@3 @@ -3185,497 +3183,495 @@ __start: scope:[__start] from [0] phi() to:__start::__init1 __start::__init1: scope:[__start] from __start - [1] __snprintf_capacity = 0 - [2] __snprintf_size = 0 - [3] __snprintf_buffer = (char *) 0 + [1] __snprintf_buffer = (char *) 0 to:__start::@1 __start::@1: scope:[__start] from __start::__init1 - [4] phi() - [5] call main + [2] phi() + [3] call main to:__start::@return __start::@return: scope:[__start] from __start::@1 - [6] return + [4] return to:@return __stackcall void snputc(char c) snputc: scope:[snputc] from - [7] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) - [8] __snprintf_size = ++ __snprintf_size - [9] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 + [5] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) + [6] __snprintf_size = ++ __snprintf_size + [7] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 to:snputc::@return snputc::@return: scope:[snputc] from snputc snputc::@2 - [10] return + [8] return to:@return snputc::@1: scope:[snputc] from snputc - [11] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 + [9] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 to:snputc::@2 snputc::@3: scope:[snputc] from snputc::@1 - [12] phi() + [10] phi() to:snputc::@2 snputc::@2: scope:[snputc] from snputc::@1 snputc::@3 - [13] snputc::c#2 = phi( snputc::@3/snputc::c#0, snputc::@1/0 ) - [14] *__snprintf_buffer = snputc::c#2 - [15] __snprintf_buffer = ++ __snprintf_buffer + [11] snputc::c#2 = phi( snputc::@3/snputc::c#0, snputc::@1/0 ) + [12] *__snprintf_buffer = snputc::c#2 + [13] __snprintf_buffer = ++ __snprintf_buffer to:snputc::@return void main() main: scope:[main] from __start::@1 - [16] phi() - [17] call snprintf_init + [14] phi() + [15] call snprintf_init to:main::@1 main::@1: scope:[main] from main - [18] phi() - [19] call printf_str + [16] phi() + [17] call printf_str to:main::@2 main::@2: scope:[main] from main::@1 - [20] stackpush(char) = 0 - [21] callexecute snputc + [18] stackpush(char) = 0 + [19] callexecute snputc sideeffect stackpullpadding(1) - [23] call print + [21] call print to:main::@3 main::@3: scope:[main] from main::@2 - [24] phi() - [25] call snprintf_init + [22] phi() + [23] call snprintf_init to:main::@4 main::@4: scope:[main] from main::@3 - [26] phi() - [27] call printf_str + [24] phi() + [25] call printf_str to:main::@5 main::@5: scope:[main] from main::@4 - [28] phi() - [29] call printf_string + [26] phi() + [27] call printf_string to:main::@6 main::@6: scope:[main] from main::@5 - [30] stackpush(char) = '!' - [31] callexecute snputc + [28] stackpush(char) = '!' + [29] callexecute snputc sideeffect stackpullpadding(1) - [33] call printf_str + [31] call printf_str to:main::@7 main::@7: scope:[main] from main::@6 - [34] stackpush(char) = 0 - [35] callexecute snputc + [32] stackpush(char) = 0 + [33] callexecute snputc sideeffect stackpullpadding(1) - [37] call print + [35] call print to:main::@8 main::@8: scope:[main] from main::@7 - [38] phi() - [39] call snprintf_init + [36] phi() + [37] call snprintf_init to:main::@9 main::@9: scope:[main] from main::@8 - [40] phi() - [41] call printf_str + [38] phi() + [39] call printf_str to:main::@10 main::@10: scope:[main] from main::@9 - [42] phi() - [43] call printf_sint + [40] phi() + [41] call printf_sint to:main::@11 main::@11: scope:[main] from main::@10 - [44] phi() - [45] call printf_str + [42] phi() + [43] call printf_str to:main::@12 main::@12: scope:[main] from main::@11 - [46] phi() - [47] call printf_uint + [44] phi() + [45] call printf_uint to:main::@13 main::@13: scope:[main] from main::@12 - [48] phi() - [49] call printf_str + [46] phi() + [47] call printf_str to:main::@14 main::@14: scope:[main] from main::@13 - [50] stackpush(char) = 0 - [51] callexecute snputc + [48] stackpush(char) = 0 + [49] callexecute snputc sideeffect stackpullpadding(1) - [53] call print + [51] call print to:main::@15 main::@15: scope:[main] from main::@14 - [54] phi() - [55] call snprintf_init + [52] phi() + [53] call snprintf_init to:main::@16 main::@16: scope:[main] from main::@15 - [56] phi() - [57] call printf_str + [54] phi() + [55] call printf_str to:main::@17 main::@17: scope:[main] from main::@16 - [58] phi() - [59] call printf_sint + [56] phi() + [57] call printf_sint to:main::@18 main::@18: scope:[main] from main::@17 - [60] phi() - [61] call printf_str + [58] phi() + [59] call printf_str to:main::@19 main::@19: scope:[main] from main::@18 - [62] stackpush(char) = 0 - [63] callexecute snputc + [60] stackpush(char) = 0 + [61] callexecute snputc sideeffect stackpullpadding(1) - [65] call print + [63] call print to:main::@return main::@return: scope:[main] from main::@19 - [66] return + [64] return to:@return void snprintf_init(char *s , unsigned int n) snprintf_init: scope:[snprintf_init] from main main::@15 main::@3 main::@8 - [67] snprintf_init::n#4 = phi( main/$14, main::@15/6, main::@3/$14, main::@8/$14 ) - [68] __snprintf_capacity = snprintf_init::n#4 - [69] __snprintf_size = 0 - [70] __snprintf_buffer = BUF + [65] snprintf_init::n#4 = phi( main/$14, main::@15/6, main::@3/$14, main::@8/$14 ) + [66] __snprintf_capacity = snprintf_init::n#4 + [67] __snprintf_size = 0 + [68] __snprintf_buffer = BUF to:snprintf_init::@return snprintf_init::@return: scope:[snprintf_init] from snprintf_init - [71] return + [69] return to:@return void printf_str(void (*putc)(char) , const char *s) printf_str: scope:[printf_str] from main::@1 main::@11 main::@13 main::@16 main::@18 main::@4 main::@6 main::@9 printf_number_buffer::@5 printf_string::@1 - [72] printf_str::putc#12 = phi( main::@1/&snputc, main::@11/&snputc, main::@13/&snputc, main::@16/&snputc, main::@18/&snputc, main::@4/&snputc, main::@6/&snputc, main::@9/&snputc, printf_number_buffer::@5/printf_str::putc#0, printf_string::@1/printf_string::putc#0 ) - [72] printf_str::s#12 = phi( main::@1/main::s, main::@11/main::s4, main::@13/main::s5, main::@16/main::s6, main::@18/main::s5, main::@4/main::s1, main::@6/main::s2, main::@9/main::s1, printf_number_buffer::@5/(char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS, printf_string::@1/main::str ) + [70] printf_str::putc#12 = phi( main::@1/&snputc, main::@11/&snputc, main::@13/&snputc, main::@16/&snputc, main::@18/&snputc, main::@4/&snputc, main::@6/&snputc, main::@9/&snputc, printf_number_buffer::@5/printf_str::putc#0, printf_string::@1/printf_string::putc#0 ) + [70] printf_str::s#12 = phi( main::@1/main::s, main::@11/main::s4, main::@13/main::s5, main::@16/main::s6, main::@18/main::s5, main::@4/main::s1, main::@6/main::s2, main::@9/main::s1, printf_number_buffer::@5/(char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS, printf_string::@1/main::str ) to:printf_str::@1 printf_str::@1: scope:[printf_str] from printf_str printf_str::@2 - [73] printf_str::s#11 = phi( printf_str/printf_str::s#12, printf_str::@2/printf_str::s#0 ) - [74] printf_str::c#1 = *printf_str::s#11 - [75] printf_str::s#0 = ++ printf_str::s#11 - [76] if(0!=printf_str::c#1) goto printf_str::@2 + [71] printf_str::s#11 = phi( printf_str/printf_str::s#12, printf_str::@2/printf_str::s#0 ) + [72] printf_str::c#1 = *printf_str::s#11 + [73] printf_str::s#0 = ++ printf_str::s#11 + [74] if(0!=printf_str::c#1) goto printf_str::@2 to:printf_str::@return printf_str::@return: scope:[printf_str] from printf_str::@1 - [77] return + [75] return to:@return printf_str::@2: scope:[printf_str] from printf_str::@1 - [78] stackpush(char) = printf_str::c#1 - [79] callexecute *printf_str::putc#12 + [76] stackpush(char) = printf_str::c#1 + [77] callexecute *printf_str::putc#12 sideeffect stackpullpadding(1) to:printf_str::@1 void print(char *msg) print: scope:[print] from main::@14 main::@19 main::@2 main::@7 - [81] screen#25 = phi( main::@14/screen#1, main::@19/screen#1, main::@2/(char *) 1024, main::@7/screen#1 ) + [79] screen#25 = phi( main::@14/screen#1, main::@19/screen#1, main::@2/(char *) 1024, main::@7/screen#1 ) to:print::@1 print::@1: scope:[print] from print print::@2 - [82] screen#1 = phi( print/screen#25, print::@2/screen#0 ) - [82] print::msg#5 = phi( print/BUF, print::@2/print::msg#0 ) - [83] if(0!=*print::msg#5) goto print::@2 + [80] screen#1 = phi( print/screen#25, print::@2/screen#0 ) + [80] print::msg#5 = phi( print/BUF, print::@2/print::msg#0 ) + [81] if(0!=*print::msg#5) goto print::@2 to:print::@return print::@return: scope:[print] from print::@1 - [84] return + [82] return to:@return print::@2: scope:[print] from print::@1 - [85] *screen#1 = *print::msg#5 - [86] screen#0 = ++ screen#1 - [87] print::msg#0 = ++ print::msg#5 + [83] *screen#1 = *print::msg#5 + [84] screen#0 = ++ screen#1 + [85] print::msg#0 = ++ print::msg#5 to:print::@1 void printf_string(void (*putc)(char) , char *str , char format_min_length , char format_justify_left) printf_string: scope:[printf_string] from main::@5 - [88] phi() + [86] phi() to:printf_string::@1 printf_string::@1: scope:[printf_string] from printf_string - [89] phi() - [90] call printf_str + [87] phi() + [88] call printf_str to:printf_string::@return printf_string::@return: scope:[printf_string] from printf_string::@1 - [91] return + [89] return to:@return void printf_sint(void (*putc)(char) , int value , char format_min_length , char format_justify_left , char format_sign_always , char format_zero_padding , char format_upper_case , char format_radix) printf_sint: scope:[printf_sint] from main::@10 main::@17 - [92] printf_sint::value#3 = phi( main::@10/3, main::@17/$56ce ) - [93] *((char *)&printf_buffer) = 0 - [94] if(printf_sint::value#3<0) goto printf_sint::@1 + [90] printf_sint::value#3 = phi( main::@10/3, main::@17/$56ce ) + [91] *((char *)&printf_buffer) = 0 + [92] if(printf_sint::value#3<0) goto printf_sint::@1 to:printf_sint::@2 printf_sint::@1: scope:[printf_sint] from printf_sint - [95] printf_sint::value#0 = - printf_sint::value#3 - [96] *((char *)&printf_buffer) = '-' + [93] printf_sint::value#0 = - printf_sint::value#3 + [94] *((char *)&printf_buffer) = '-' to:printf_sint::@2 printf_sint::@2: scope:[printf_sint] from printf_sint printf_sint::@1 - [97] printf_sint::value#5 = phi( printf_sint::@1/printf_sint::value#0, printf_sint/printf_sint::value#3 ) - [98] utoa::value#1 = (unsigned int)printf_sint::value#5 - [99] call utoa + [95] printf_sint::value#5 = phi( printf_sint::@1/printf_sint::value#0, printf_sint/printf_sint::value#3 ) + [96] utoa::value#1 = (unsigned int)printf_sint::value#5 + [97] call utoa to:printf_sint::@3 printf_sint::@3: scope:[printf_sint] from printf_sint::@2 - [100] printf_number_buffer::buffer_sign#0 = *((char *)&printf_buffer) - [101] call printf_number_buffer + [98] printf_number_buffer::buffer_sign#0 = *((char *)&printf_buffer) + [99] call printf_number_buffer to:printf_sint::@return printf_sint::@return: scope:[printf_sint] from printf_sint::@3 - [102] return + [100] return to:@return void printf_uint(void (*putc)(char) , unsigned int uvalue , char format_min_length , char format_justify_left , char format_sign_always , char format_zero_padding , char format_upper_case , char format_radix) printf_uint: scope:[printf_uint] from main::@12 - [103] phi() + [101] phi() to:printf_uint::@1 printf_uint::@1: scope:[printf_uint] from printf_uint - [104] *((char *)&printf_buffer) = 0 - [105] call utoa + [102] *((char *)&printf_buffer) = 0 + [103] call utoa to:printf_uint::@2 printf_uint::@2: scope:[printf_uint] from printf_uint::@1 - [106] printf_number_buffer::buffer_sign#1 = *((char *)&printf_buffer) - [107] call printf_number_buffer + [104] printf_number_buffer::buffer_sign#1 = *((char *)&printf_buffer) + [105] call printf_number_buffer to:printf_uint::@return printf_uint::@return: scope:[printf_uint] from printf_uint::@2 - [108] return + [106] return to:@return void utoa(unsigned int value , char *buffer , char radix) utoa: scope:[utoa] from printf_sint::@2 printf_uint::@1 - [109] utoa::value#10 = phi( printf_sint::@2/utoa::value#1, printf_uint::@1/printf_uint::uvalue#0 ) - [109] utoa::radix#2 = phi( printf_sint::@2/DECIMAL, printf_uint::@1/HEXADECIMAL ) - [110] if(utoa::radix#2==DECIMAL) goto utoa::@1 + [107] utoa::value#10 = phi( printf_sint::@2/utoa::value#1, printf_uint::@1/printf_uint::uvalue#0 ) + [107] utoa::radix#2 = phi( printf_sint::@2/DECIMAL, printf_uint::@1/HEXADECIMAL ) + [108] if(utoa::radix#2==DECIMAL) goto utoa::@1 to:utoa::@2 utoa::@2: scope:[utoa] from utoa - [111] if(utoa::radix#2==HEXADECIMAL) goto utoa::@1 + [109] if(utoa::radix#2==HEXADECIMAL) goto utoa::@1 to:utoa::@3 utoa::@3: scope:[utoa] from utoa::@2 - [112] if(utoa::radix#2==OCTAL) goto utoa::@1 + [110] if(utoa::radix#2==OCTAL) goto utoa::@1 to:utoa::@4 utoa::@4: scope:[utoa] from utoa::@3 - [113] if(utoa::radix#2==BINARY) goto utoa::@1 + [111] if(utoa::radix#2==BINARY) goto utoa::@1 to:utoa::@5 utoa::@5: scope:[utoa] from utoa::@4 - [114] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS) = 'e' - [115] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1) = 'r' - [116] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2) = 'r' - [117] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3) = 0 + [112] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS) = 'e' + [113] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1) = 'r' + [114] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2) = 'r' + [115] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3) = 0 to:utoa::@return utoa::@return: scope:[utoa] from utoa::@5 utoa::@8 - [118] return + [116] return to:@return utoa::@1: scope:[utoa] from utoa utoa::@2 utoa::@3 utoa::@4 - [119] utoa::digit_values#8 = phi( utoa/RADIX_DECIMAL_VALUES, utoa::@2/RADIX_HEXADECIMAL_VALUES, utoa::@3/RADIX_OCTAL_VALUES, utoa::@4/RADIX_BINARY_VALUES ) - [119] utoa::max_digits#7 = phi( utoa/5, utoa::@2/4, utoa::@3/6, utoa::@4/$10 ) + [117] utoa::digit_values#8 = phi( utoa/RADIX_DECIMAL_VALUES, utoa::@2/RADIX_HEXADECIMAL_VALUES, utoa::@3/RADIX_OCTAL_VALUES, utoa::@4/RADIX_BINARY_VALUES ) + [117] utoa::max_digits#7 = phi( utoa/5, utoa::@2/4, utoa::@3/6, utoa::@4/$10 ) to:utoa::@6 utoa::@6: scope:[utoa] from utoa::@1 utoa::@9 - [120] utoa::buffer#10 = phi( utoa::@9/utoa::buffer#15, utoa::@1/(char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS ) - [120] utoa::started#2 = phi( utoa::@9/utoa::started#4, utoa::@1/0 ) - [120] utoa::value#3 = phi( utoa::@9/utoa::value#7, utoa::@1/utoa::value#10 ) - [120] utoa::digit#2 = phi( utoa::@9/utoa::digit#1, utoa::@1/0 ) - [121] utoa::$4 = utoa::max_digits#7 - 1 - [122] if(utoa::digit#2=utoa::digit_value#0) goto utoa::@10 + [128] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@10 to:utoa::@9 utoa::@9: scope:[utoa] from utoa::@11 utoa::@12 - [131] utoa::buffer#15 = phi( utoa::@12/utoa::buffer#10, utoa::@11/utoa::buffer#4 ) - [131] utoa::started#4 = phi( utoa::@12/utoa::started#2, utoa::@11/1 ) - [131] utoa::value#7 = phi( utoa::@12/utoa::value#3, utoa::@11/utoa::value#0 ) - [132] utoa::digit#1 = ++ utoa::digit#2 + [129] utoa::buffer#15 = phi( utoa::@12/utoa::buffer#10, utoa::@11/utoa::buffer#4 ) + [129] utoa::started#4 = phi( utoa::@12/utoa::started#2, utoa::@11/1 ) + [129] utoa::value#7 = phi( utoa::@12/utoa::value#3, utoa::@11/utoa::value#0 ) + [130] utoa::digit#1 = ++ utoa::digit#2 to:utoa::@6 utoa::@10: scope:[utoa] from utoa::@12 utoa::@7 - [133] utoa_append::buffer#0 = utoa::buffer#10 - [134] utoa_append::value#0 = utoa::value#3 - [135] utoa_append::sub#0 = utoa::digit_value#0 - [136] call utoa_append - [137] utoa_append::return#0 = utoa_append::value#2 + [131] utoa_append::buffer#0 = utoa::buffer#10 + [132] utoa_append::value#0 = utoa::value#3 + [133] utoa_append::sub#0 = utoa::digit_value#0 + [134] call utoa_append + [135] utoa_append::return#0 = utoa_append::value#2 to:utoa::@11 utoa::@11: scope:[utoa] from utoa::@10 - [138] utoa::value#0 = utoa_append::return#0 - [139] utoa::buffer#4 = ++ utoa::buffer#10 + [136] utoa::value#0 = utoa_append::return#0 + [137] utoa::buffer#4 = ++ utoa::buffer#10 to:utoa::@9 void printf_number_buffer(void (*putc)(char) , char buffer_sign , char *buffer_digits , char format_min_length , char format_justify_left , char format_sign_always , char format_zero_padding , char format_upper_case , char format_radix) printf_number_buffer: scope:[printf_number_buffer] from printf_sint::@3 printf_uint::@2 - [140] printf_number_buffer::format_upper_case#10 = phi( printf_sint::@3/0, printf_uint::@2/printf_uint::format_upper_case#0 ) - [140] printf_number_buffer::putc#10 = phi( printf_sint::@3/&snputc, printf_uint::@2/printf_uint::putc#0 ) - [140] printf_number_buffer::buffer_sign#10 = phi( printf_sint::@3/printf_number_buffer::buffer_sign#0, printf_uint::@2/printf_number_buffer::buffer_sign#1 ) - [140] printf_number_buffer::format_zero_padding#10 = phi( printf_sint::@3/0, printf_uint::@2/printf_uint::format_zero_padding#0 ) - [140] printf_number_buffer::format_justify_left#10 = phi( printf_sint::@3/0, printf_uint::@2/printf_uint::format_justify_left#0 ) - [140] printf_number_buffer::format_min_length#2 = phi( printf_sint::@3/0, printf_uint::@2/printf_uint::format_min_length#0 ) - [141] if(0==printf_number_buffer::format_min_length#2) goto printf_number_buffer::@1 + [138] printf_number_buffer::format_upper_case#10 = phi( printf_sint::@3/0, printf_uint::@2/printf_uint::format_upper_case#0 ) + [138] printf_number_buffer::putc#10 = phi( printf_sint::@3/&snputc, printf_uint::@2/printf_uint::putc#0 ) + [138] printf_number_buffer::buffer_sign#10 = phi( printf_sint::@3/printf_number_buffer::buffer_sign#0, printf_uint::@2/printf_number_buffer::buffer_sign#1 ) + [138] printf_number_buffer::format_zero_padding#10 = phi( printf_sint::@3/0, printf_uint::@2/printf_uint::format_zero_padding#0 ) + [138] printf_number_buffer::format_justify_left#10 = phi( printf_sint::@3/0, printf_uint::@2/printf_uint::format_justify_left#0 ) + [138] printf_number_buffer::format_min_length#2 = phi( printf_sint::@3/0, printf_uint::@2/printf_uint::format_min_length#0 ) + [139] if(0==printf_number_buffer::format_min_length#2) goto printf_number_buffer::@1 to:printf_number_buffer::@6 printf_number_buffer::@6: scope:[printf_number_buffer] from printf_number_buffer - [142] phi() - [143] call strlen - [144] strlen::return#2 = strlen::len#2 + [140] phi() + [141] call strlen + [142] strlen::return#2 = strlen::len#2 to:printf_number_buffer::@14 printf_number_buffer::@14: scope:[printf_number_buffer] from printf_number_buffer::@6 - [145] printf_number_buffer::$19 = strlen::return#2 - [146] printf_number_buffer::len#0 = (signed char)printf_number_buffer::$19 - [147] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 + [143] printf_number_buffer::$19 = strlen::return#2 + [144] printf_number_buffer::len#0 = (signed char)printf_number_buffer::$19 + [145] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 to:printf_number_buffer::@7 printf_number_buffer::@7: scope:[printf_number_buffer] from printf_number_buffer::@14 - [148] printf_number_buffer::len#1 = ++ printf_number_buffer::len#0 + [146] printf_number_buffer::len#1 = ++ printf_number_buffer::len#0 to:printf_number_buffer::@13 printf_number_buffer::@13: scope:[printf_number_buffer] from printf_number_buffer::@14 printf_number_buffer::@7 - [149] printf_number_buffer::len#2 = phi( printf_number_buffer::@14/printf_number_buffer::len#0, printf_number_buffer::@7/printf_number_buffer::len#1 ) - [150] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#2 - printf_number_buffer::len#2 - [151] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 + [147] printf_number_buffer::len#2 = phi( printf_number_buffer::@14/printf_number_buffer::len#0, printf_number_buffer::@7/printf_number_buffer::len#1 ) + [148] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#2 - printf_number_buffer::len#2 + [149] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 to:printf_number_buffer::@1 printf_number_buffer::@21: scope:[printf_number_buffer] from printf_number_buffer::@13 - [152] phi() + [150] phi() to:printf_number_buffer::@1 printf_number_buffer::@1: scope:[printf_number_buffer] from printf_number_buffer printf_number_buffer::@13 printf_number_buffer::@21 - [153] printf_number_buffer::padding#10 = phi( printf_number_buffer/0, printf_number_buffer::@21/printf_number_buffer::padding#1, printf_number_buffer::@13/0 ) - [154] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 + [151] printf_number_buffer::padding#10 = phi( printf_number_buffer/0, printf_number_buffer::@21/printf_number_buffer::padding#1, printf_number_buffer::@13/0 ) + [152] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 to:printf_number_buffer::@17 printf_number_buffer::@17: scope:[printf_number_buffer] from printf_number_buffer::@1 - [155] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 + [153] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 to:printf_number_buffer::@16 printf_number_buffer::@16: scope:[printf_number_buffer] from printf_number_buffer::@17 - [156] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 + [154] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 to:printf_number_buffer::@2 printf_number_buffer::@8: scope:[printf_number_buffer] from printf_number_buffer::@16 - [157] printf_padding::putc#0 = printf_number_buffer::putc#10 - [158] printf_padding::length#0 = (char)printf_number_buffer::padding#10 - [159] call printf_padding + [155] printf_padding::putc#0 = printf_number_buffer::putc#10 + [156] printf_padding::length#0 = (char)printf_number_buffer::padding#10 + [157] call printf_padding to:printf_number_buffer::@2 printf_number_buffer::@2: scope:[printf_number_buffer] from printf_number_buffer::@1 printf_number_buffer::@16 printf_number_buffer::@17 printf_number_buffer::@8 - [160] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 + [158] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 to:printf_number_buffer::@9 printf_number_buffer::@9: scope:[printf_number_buffer] from printf_number_buffer::@2 - [161] stackpush(char) = printf_number_buffer::buffer_sign#10 - [162] callexecute *printf_number_buffer::putc#10 + [159] stackpush(char) = printf_number_buffer::buffer_sign#10 + [160] callexecute *printf_number_buffer::putc#10 sideeffect stackpullpadding(1) to:printf_number_buffer::@3 printf_number_buffer::@3: scope:[printf_number_buffer] from printf_number_buffer::@2 printf_number_buffer::@9 - [164] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 + [162] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 to:printf_number_buffer::@18 printf_number_buffer::@18: scope:[printf_number_buffer] from printf_number_buffer::@3 - [165] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 + [163] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 to:printf_number_buffer::@4 printf_number_buffer::@10: scope:[printf_number_buffer] from printf_number_buffer::@18 - [166] printf_padding::putc#1 = printf_number_buffer::putc#10 - [167] printf_padding::length#1 = (char)printf_number_buffer::padding#10 - [168] call printf_padding + [164] printf_padding::putc#1 = printf_number_buffer::putc#10 + [165] printf_padding::length#1 = (char)printf_number_buffer::padding#10 + [166] call printf_padding to:printf_number_buffer::@4 printf_number_buffer::@4: scope:[printf_number_buffer] from printf_number_buffer::@10 printf_number_buffer::@18 printf_number_buffer::@3 - [169] if(0==printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 + [167] if(0==printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 to:printf_number_buffer::@11 printf_number_buffer::@11: scope:[printf_number_buffer] from printf_number_buffer::@4 - [170] phi() - [171] call strupr + [168] phi() + [169] call strupr to:printf_number_buffer::@5 printf_number_buffer::@5: scope:[printf_number_buffer] from printf_number_buffer::@11 printf_number_buffer::@4 - [172] printf_str::putc#0 = printf_number_buffer::putc#10 - [173] call printf_str + [170] printf_str::putc#0 = printf_number_buffer::putc#10 + [171] call printf_str to:printf_number_buffer::@15 printf_number_buffer::@15: scope:[printf_number_buffer] from printf_number_buffer::@5 - [174] if(0==printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return + [172] if(0==printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return to:printf_number_buffer::@20 printf_number_buffer::@20: scope:[printf_number_buffer] from printf_number_buffer::@15 - [175] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return + [173] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return to:printf_number_buffer::@19 printf_number_buffer::@19: scope:[printf_number_buffer] from printf_number_buffer::@20 - [176] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 + [174] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 to:printf_number_buffer::@return printf_number_buffer::@12: scope:[printf_number_buffer] from printf_number_buffer::@19 - [177] printf_padding::putc#2 = printf_number_buffer::putc#10 - [178] printf_padding::length#2 = (char)printf_number_buffer::padding#10 - [179] call printf_padding + [175] printf_padding::putc#2 = printf_number_buffer::putc#10 + [176] printf_padding::length#2 = (char)printf_number_buffer::padding#10 + [177] call printf_padding to:printf_number_buffer::@return printf_number_buffer::@return: scope:[printf_number_buffer] from printf_number_buffer::@12 printf_number_buffer::@15 printf_number_buffer::@19 printf_number_buffer::@20 - [180] return + [178] return to:@return unsigned int utoa_append(char *buffer , unsigned int value , unsigned int sub) utoa_append: scope:[utoa_append] from utoa::@10 - [181] phi() + [179] phi() to:utoa_append::@1 utoa_append::@1: scope:[utoa_append] from utoa_append utoa_append::@2 - [182] utoa_append::digit#2 = phi( utoa_append/0, utoa_append::@2/utoa_append::digit#1 ) - [182] utoa_append::value#2 = phi( utoa_append/utoa_append::value#0, utoa_append::@2/utoa_append::value#1 ) - [183] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 + [180] utoa_append::digit#2 = phi( utoa_append/0, utoa_append::@2/utoa_append::digit#1 ) + [180] utoa_append::value#2 = phi( utoa_append/utoa_append::value#0, utoa_append::@2/utoa_append::value#1 ) + [181] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 to:utoa_append::@3 utoa_append::@3: scope:[utoa_append] from utoa_append::@1 - [184] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] + [182] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] to:utoa_append::@return utoa_append::@return: scope:[utoa_append] from utoa_append::@3 - [185] return + [183] return to:@return utoa_append::@2: scope:[utoa_append] from utoa_append::@1 - [186] utoa_append::digit#1 = ++ utoa_append::digit#2 - [187] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 + [184] utoa_append::digit#1 = ++ utoa_append::digit#2 + [185] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 to:utoa_append::@1 unsigned int strlen(char *str) strlen: scope:[strlen] from printf_number_buffer::@6 - [188] phi() + [186] phi() to:strlen::@1 strlen::@1: scope:[strlen] from strlen strlen::@2 - [189] strlen::len#2 = phi( strlen/0, strlen::@2/strlen::len#1 ) - [189] strlen::str#3 = phi( strlen/(char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS, strlen::@2/strlen::str#0 ) - [190] if(0!=*strlen::str#3) goto strlen::@2 + [187] strlen::len#2 = phi( strlen/0, strlen::@2/strlen::len#1 ) + [187] strlen::str#3 = phi( strlen/(char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS, strlen::@2/strlen::str#0 ) + [188] if(0!=*strlen::str#3) goto strlen::@2 to:strlen::@return strlen::@return: scope:[strlen] from strlen::@1 - [191] return + [189] return to:@return strlen::@2: scope:[strlen] from strlen::@1 - [192] strlen::len#1 = ++ strlen::len#2 - [193] strlen::str#0 = ++ strlen::str#3 + [190] strlen::len#1 = ++ strlen::len#2 + [191] strlen::str#0 = ++ strlen::str#3 to:strlen::@1 void printf_padding(void (*putc)(char) , char pad , char length) printf_padding: scope:[printf_padding] from printf_number_buffer::@10 printf_number_buffer::@12 printf_number_buffer::@8 - [194] printf_padding::putc#7 = phi( printf_number_buffer::@10/printf_padding::putc#1, printf_number_buffer::@12/printf_padding::putc#2, printf_number_buffer::@8/printf_padding::putc#0 ) - [194] printf_padding::pad#7 = phi( printf_number_buffer::@10/'0', printf_number_buffer::@12/' ', printf_number_buffer::@8/' ' ) - [194] printf_padding::length#6 = phi( printf_number_buffer::@10/printf_padding::length#1, printf_number_buffer::@12/printf_padding::length#2, printf_number_buffer::@8/printf_padding::length#0 ) + [192] printf_padding::putc#7 = phi( printf_number_buffer::@10/printf_padding::putc#1, printf_number_buffer::@12/printf_padding::putc#2, printf_number_buffer::@8/printf_padding::putc#0 ) + [192] printf_padding::pad#7 = phi( printf_number_buffer::@10/'0', printf_number_buffer::@12/' ', printf_number_buffer::@8/' ' ) + [192] printf_padding::length#6 = phi( printf_number_buffer::@10/printf_padding::length#1, printf_number_buffer::@12/printf_padding::length#2, printf_number_buffer::@8/printf_padding::length#0 ) to:printf_padding::@1 printf_padding::@1: scope:[printf_padding] from printf_padding printf_padding::@3 - [195] printf_padding::i#2 = phi( printf_padding/0, printf_padding::@3/printf_padding::i#1 ) - [196] if(printf_padding::i#2=utoa::digit_value#0) goto utoa::@10 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } ) always clobbers reg byte a -Statement [133] utoa_append::buffer#0 = utoa::buffer#10 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [134] utoa_append::value#0 = utoa::value#3 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [135] utoa_append::sub#0 = utoa::digit_value#0 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [137] utoa_append::return#0 = utoa_append::value#2 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [138] utoa::value#0 = utoa_append::return#0 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { } ) always clobbers reg byte a -Statement [144] strlen::return#2 = strlen::len#2 [ printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a +Statement [128] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@10 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } ) always clobbers reg byte a +Statement [131] utoa_append::buffer#0 = utoa::buffer#10 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [132] utoa_append::value#0 = utoa::value#3 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [133] utoa_append::sub#0 = utoa::digit_value#0 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [135] utoa_append::return#0 = utoa_append::value#2 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [136] utoa::value#0 = utoa_append::return#0 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { } ) always clobbers reg byte a +Statement [142] strlen::return#2 = strlen::len#2 [ printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:65 [ printf_number_buffer::format_min_length#2 ] Removing always clobbered register reg byte a as potential for zp[1]:57 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 printf_number_buffer::buffer_sign#1 ] Removing always clobbered register reg byte a as potential for zp[1]:68 [ printf_number_buffer::format_upper_case#10 ] -Statement [145] printf_number_buffer::$19 = strlen::return#2 [ printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [150] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#2 - printf_number_buffer::len#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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [151] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [154] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [155] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [156] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [157] printf_padding::putc#0 = printf_number_buffer::putc#10 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [161] stackpush(char) = printf_number_buffer::buffer_sign#10 [ ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [162] callexecute *printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a reg byte x reg byte y +Statement [143] printf_number_buffer::$19 = strlen::return#2 [ printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [148] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#2 - printf_number_buffer::len#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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [149] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [152] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [153] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [154] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [155] printf_padding::putc#0 = printf_number_buffer::putc#10 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a +Statement [159] stackpush(char) = printf_number_buffer::buffer_sign#10 [ ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [160] callexecute *printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a reg byte x reg byte y Removing always clobbered register reg byte x as potential for zp[1]:68 [ printf_number_buffer::format_upper_case#10 ] Removing always clobbered register reg byte y as potential for zp[1]:68 [ printf_number_buffer::format_upper_case#10 ] Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [164] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [165] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [166] printf_padding::putc#1 = printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [169] if(0==printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [172] printf_str::putc#0 = printf_number_buffer::putc#10 [ printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [174] if(0==printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return [ printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [175] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return [ printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [176] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 [ printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [177] printf_padding::putc#2 = printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [183] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:5::printf_sint:43::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_sint:59::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:105::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [162] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [163] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [164] printf_padding::putc#1 = printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a +Statement [167] if(0==printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [170] printf_str::putc#0 = printf_number_buffer::putc#10 [ printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } ) always clobbers reg byte a +Statement [172] if(0==printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return [ printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [173] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return [ printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [174] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 [ printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [175] printf_padding::putc#2 = printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a +Statement [181] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:3::printf_sint:41::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_sint:57::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:103::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:4 [ utoa_append::digit#2 utoa_append::digit#1 ] -Statement [184] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] [ utoa_append::value#2 ] ( main:5::printf_sint:43::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_sint:59::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:105::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a reg byte y -Statement [187] 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:5::printf_sint:43::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_sint:59::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:105::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [190] if(0!=*strlen::str#3) goto strlen::@2 [ printf_buffer strlen::len#2 strlen::str#3 ] ( main:5::printf_sint:43::printf_number_buffer:101::strlen:143 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_sint:59::printf_number_buffer:101::strlen:143 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_uint:47::printf_number_buffer:107::strlen:143 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a reg byte y +Statement [182] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] [ utoa_append::value#2 ] ( main:3::printf_sint:41::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_sint:57::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:103::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a reg byte y +Statement [185] 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:3::printf_sint:41::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_sint:57::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:103::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [188] if(0!=*strlen::str#3) goto strlen::@2 [ printf_buffer strlen::len#2 strlen::str#3 ] ( main:3::printf_sint:41::printf_number_buffer:99::strlen:141 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:3::printf_sint:57::printf_number_buffer:99::strlen:141 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:3::printf_uint:45::printf_number_buffer:105::strlen:141 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:65 [ printf_number_buffer::format_min_length#2 ] Removing always clobbered register reg byte y as potential for zp[1]:57 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 printf_number_buffer::buffer_sign#1 ] -Statement [199] callexecute *printf_padding::putc#7 [ printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] ( main:5::printf_sint:43::printf_number_buffer:101::printf_padding:159 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_sint:59::printf_number_buffer:101::printf_padding:159 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:107::printf_padding:159 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_sint:43::printf_number_buffer:101::printf_padding:168 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_sint:59::printf_number_buffer:101::printf_padding:168 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:107::printf_padding:168 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_sint:43::printf_number_buffer:101::printf_padding:179 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_sint:59::printf_number_buffer:101::printf_padding:179 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:107::printf_padding:179 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a reg byte x reg byte y +Statement [197] callexecute *printf_padding::putc#7 [ printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] ( main:3::printf_sint:41::printf_number_buffer:99::printf_padding:157 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_sint:57::printf_number_buffer:99::printf_padding:157 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:105::printf_padding:157 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_sint:41::printf_number_buffer:99::printf_padding:166 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_sint:57::printf_number_buffer:99::printf_padding:166 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:105::printf_padding:166 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_sint:41::printf_number_buffer:99::printf_padding:177 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_sint:57::printf_number_buffer:99::printf_padding:177 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:105::printf_padding:177 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a reg byte x reg byte y Removing always clobbered register reg byte x as potential for zp[1]:57 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#0 printf_number_buffer::buffer_sign#1 ] Removing always clobbered register reg byte a as potential for zp[1]:26 [ printf_padding::length#6 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] Removing always clobbered register reg byte x as potential for zp[1]:26 [ printf_padding::length#6 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] @@ -4104,181 +4098,177 @@ Removing always clobbered register reg byte a as potential for zp[1]:10 [ printf Removing always clobbered register reg byte x as potential for zp[1]:10 [ printf_padding::i#2 printf_padding::i#1 ] Removing always clobbered register reg byte y as potential for zp[1]:10 [ printf_padding::i#2 printf_padding::i#1 ] Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [204] if(0!=*strupr::src#2) goto strupr::@2 [ strupr::src#2 ] ( main:5::printf_sint:43::printf_number_buffer:101::strupr:171 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101::strupr:171 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107::strupr:171 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a reg byte y -Statement [206] toupper::ch#0 = *strupr::src#2 [ strupr::src#2 toupper::ch#0 ] ( main:5::printf_sint:43::printf_number_buffer:101::strupr:171 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } main:5::printf_sint:59::printf_number_buffer:101::strupr:171 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } main:5::printf_uint:47::printf_number_buffer:107::strupr:171 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#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 } } ) always clobbers reg byte a reg byte y -Statement [210] *strupr::src#2 = strupr::$0 [ strupr::src#2 ] ( main:5::printf_sint:43::printf_number_buffer:101::strupr:171 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101::strupr:171 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107::strupr:171 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte y -Statement [214] toupper::return#0 = toupper::ch#0 + 'A'-'a' [ toupper::return#0 ] ( main:5::printf_sint:43::printf_number_buffer:101::strupr:171::toupper:207 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } main:5::printf_sint:59::printf_number_buffer:101::strupr:171::toupper:207 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } main:5::printf_uint:47::printf_number_buffer:107::strupr:171::toupper:207 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } ) always clobbers reg byte a -Statement [1] __snprintf_capacity = 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a -Statement [2] __snprintf_size = 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a -Statement [3] __snprintf_buffer = (char *) 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a -Statement [7] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) [ __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] ( [ __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:21 [ printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:31 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:35 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:51 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:63 [ screen#1 __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } ) always clobbers reg byte a reg byte x -Statement [9] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 [ __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] ( [ __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:21 [ printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:31 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:35 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:51 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:63 [ screen#1 __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } ) always clobbers reg byte a -Statement [11] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 [ __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] ( [ __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:21 [ printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:31 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:35 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:51 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:63 [ screen#1 __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } ) always clobbers reg byte a -Statement [14] *__snprintf_buffer = snputc::c#2 [ __snprintf_capacity __snprintf_size __snprintf_buffer ] ( [ __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snputc:21 [ printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snputc:31 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snputc:35 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snputc:51 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snputc:63 [ screen#1 __snprintf_capacity __snprintf_size __snprintf_buffer ] { } ) always clobbers reg byte a reg byte y -Statement [20] stackpush(char) = 0 [ __snprintf_capacity __snprintf_size __snprintf_buffer printf_buffer ] ( main:5 [ __snprintf_capacity __snprintf_size __snprintf_buffer printf_buffer ] { } ) always clobbers reg byte a +Statement [202] if(0!=*strupr::src#2) goto strupr::@2 [ strupr::src#2 ] ( main:3::printf_sint:41::printf_number_buffer:99::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a reg byte y +Statement [204] toupper::ch#0 = *strupr::src#2 [ strupr::src#2 toupper::ch#0 ] ( main:3::printf_sint:41::printf_number_buffer:99::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } main:3::printf_sint:57::printf_number_buffer:99::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } main:3::printf_uint:45::printf_number_buffer:105::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#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 } } ) always clobbers reg byte a reg byte y +Statement [208] *strupr::src#2 = strupr::$0 [ strupr::src#2 ] ( main:3::printf_sint:41::printf_number_buffer:99::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte y +Statement [212] toupper::return#0 = toupper::ch#0 + 'A'-'a' [ toupper::return#0 ] ( main:3::printf_sint:41::printf_number_buffer:99::strupr:169::toupper:205 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } main:3::printf_sint:57::printf_number_buffer:99::strupr:169::toupper:205 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } main:3::printf_uint:45::printf_number_buffer:105::strupr:169::toupper:205 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } ) always clobbers reg byte a +Statement [1] __snprintf_buffer = (char *) 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a +Statement [5] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) [ __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] ( [ __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:19 [ printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:29 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:33 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:49 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:61 [ screen#1 __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } ) always clobbers reg byte a reg byte x +Statement [7] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 [ __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] ( [ __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:19 [ printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:29 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:33 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:49 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:61 [ screen#1 __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } ) always clobbers reg byte a +Statement [9] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 [ __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] ( [ __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:19 [ printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:29 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:33 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:49 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:61 [ screen#1 __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } ) always clobbers reg byte a +Statement [12] *__snprintf_buffer = snputc::c#2 [ __snprintf_buffer __snprintf_size __snprintf_capacity ] ( [ __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snputc:19 [ printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snputc:29 [ screen#1 printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snputc:33 [ screen#1 printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snputc:49 [ screen#1 printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snputc:61 [ screen#1 __snprintf_buffer __snprintf_size __snprintf_capacity ] { } ) always clobbers reg byte a reg byte y +Statement [18] stackpush(char) = 0 [ __snprintf_buffer __snprintf_size __snprintf_capacity printf_buffer ] ( main:3 [ __snprintf_buffer __snprintf_size __snprintf_capacity printf_buffer ] { } ) always clobbers reg byte a Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [30] stackpush(char) = '!' [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] ( main:5 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [28] stackpush(char) = '!' [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] ( main:3 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [34] stackpush(char) = 0 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] ( main:5 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { { screen#1 = screen#25 } } ) always clobbers reg byte a +Statement [32] stackpush(char) = 0 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] ( main:3 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { screen#1 = screen#25 } } ) always clobbers reg byte a Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [50] stackpush(char) = 0 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] ( main:5 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { { screen#1 = screen#25 } } ) always clobbers reg byte a +Statement [48] stackpush(char) = 0 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] ( main:3 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { screen#1 = screen#25 } } ) always clobbers reg byte a Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [62] stackpush(char) = 0 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 ] ( main:5 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 ] { { screen#1 = screen#25 } } ) always clobbers reg byte a +Statement [60] stackpush(char) = 0 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 ] ( main:3 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 ] { { screen#1 = screen#25 } } ) always clobbers reg byte a Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [68] __snprintf_capacity = snprintf_init::n#4 [ __snprintf_capacity ] ( main:5::snprintf_init:17 [ printf_buffer __snprintf_capacity ] { } main:5::snprintf_init:25 [ screen#1 printf_buffer __snprintf_capacity ] { } main:5::snprintf_init:39 [ screen#1 printf_buffer __snprintf_capacity ] { } main:5::snprintf_init:55 [ screen#1 printf_buffer __snprintf_capacity ] { } ) always clobbers reg byte a -Statement [69] __snprintf_size = 0 [ __snprintf_capacity __snprintf_size ] ( main:5::snprintf_init:17 [ printf_buffer __snprintf_capacity __snprintf_size ] { } main:5::snprintf_init:25 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size ] { } main:5::snprintf_init:39 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size ] { } main:5::snprintf_init:55 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size ] { } ) always clobbers reg byte a -Statement [70] __snprintf_buffer = BUF [ __snprintf_capacity __snprintf_size __snprintf_buffer ] ( main:5::snprintf_init:17 [ printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snprintf_init:25 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snprintf_init:39 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snprintf_init:55 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } ) always clobbers reg byte a -Statement [74] printf_str::c#1 = *printf_str::s#11 [ printf_str::s#11 printf_str::c#1 printf_buffer ] ( main:5::printf_str:19 [ __snprintf_capacity __snprintf_size __snprintf_buffer printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:27 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:33 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:41 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:45 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:49 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:57 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:61 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_string:29::printf_str:90 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_sint:43::printf_number_buffer:101::printf_str:173 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#11 printf_str::c#1 printf_buffer ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_sint:59::printf_number_buffer:101::printf_str:173 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#11 printf_str::c#1 printf_buffer ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:107::printf_str:173 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#11 printf_str::c#1 printf_buffer ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } ) always clobbers reg byte a reg byte y -Statement [79] callexecute *printf_str::putc#12 [ printf_str::s#0 printf_buffer ] ( main:5::printf_str:19 [ __snprintf_capacity __snprintf_size __snprintf_buffer printf_str::s#0 printf_buffer ] { } main:5::printf_str:27 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_str:33 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_str:41 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_str:45 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_str:49 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_str:57 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_str:61 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_string:29::printf_str:90 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_sint:43::printf_number_buffer:101::printf_str:173 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#0 printf_buffer ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_sint:59::printf_number_buffer:101::printf_str:173 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#0 printf_buffer ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:107::printf_str:173 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#0 printf_buffer ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } ) always clobbers reg byte a reg byte x reg byte y +Statement [66] __snprintf_capacity = snprintf_init::n#4 [ __snprintf_capacity ] ( main:3::snprintf_init:15 [ printf_buffer __snprintf_capacity ] { } main:3::snprintf_init:23 [ screen#1 printf_buffer __snprintf_capacity ] { } main:3::snprintf_init:37 [ screen#1 printf_buffer __snprintf_capacity ] { } main:3::snprintf_init:53 [ screen#1 printf_buffer __snprintf_capacity ] { } ) always clobbers reg byte a +Statement [67] __snprintf_size = 0 [ __snprintf_size __snprintf_capacity ] ( main:3::snprintf_init:15 [ printf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snprintf_init:23 [ screen#1 printf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snprintf_init:37 [ screen#1 printf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snprintf_init:53 [ screen#1 printf_buffer __snprintf_size __snprintf_capacity ] { } ) always clobbers reg byte a +Statement [68] __snprintf_buffer = BUF [ __snprintf_buffer __snprintf_size __snprintf_capacity ] ( main:3::snprintf_init:15 [ printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snprintf_init:23 [ screen#1 printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snprintf_init:37 [ screen#1 printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snprintf_init:53 [ screen#1 printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } ) always clobbers reg byte a +Statement [72] printf_str::c#1 = *printf_str::s#11 [ printf_str::s#11 printf_str::c#1 printf_buffer ] ( main:3::printf_str:17 [ __snprintf_buffer __snprintf_size __snprintf_capacity printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:25 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:31 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:39 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:43 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:47 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:55 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:59 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_string:27::printf_str:88 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_sint:41::printf_number_buffer:99::printf_str:171 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#11 printf_str::c#1 printf_buffer ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:3::printf_sint:57::printf_number_buffer:99::printf_str:171 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#11 printf_str::c#1 printf_buffer ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:105::printf_str:171 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#11 printf_str::c#1 printf_buffer ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } ) always clobbers reg byte a reg byte y +Statement [77] callexecute *printf_str::putc#12 [ printf_str::s#0 printf_buffer ] ( main:3::printf_str:17 [ __snprintf_buffer __snprintf_size __snprintf_capacity printf_str::s#0 printf_buffer ] { } main:3::printf_str:25 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_str:31 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_str:39 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_str:43 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_str:47 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_str:55 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_str:59 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_string:27::printf_str:88 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_sint:41::printf_number_buffer:99::printf_str:171 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#0 printf_buffer ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:3::printf_sint:57::printf_number_buffer:99::printf_str:171 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#0 printf_buffer ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:105::printf_str:171 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#0 printf_buffer ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } ) always clobbers reg byte a reg byte x reg byte y Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [83] if(0!=*print::msg#5) goto print::@2 [ screen#1 print::msg#5 ] ( main:5::print:23 [ printf_buffer screen#1 print::msg#5 ] { } main:5::print:37 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:5::print:53 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:5::print:65 [ screen#1 print::msg#5 ] { { screen#1 = screen#25 } } ) always clobbers reg byte a reg byte y -Statement [85] *screen#1 = *print::msg#5 [ screen#1 print::msg#5 ] ( main:5::print:23 [ printf_buffer screen#1 print::msg#5 ] { } main:5::print:37 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:5::print:53 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:5::print:65 [ screen#1 print::msg#5 ] { { screen#1 = screen#25 } } ) always clobbers reg byte a reg byte y -Statement [93] *((char *)&printf_buffer) = 0 [ printf_sint::value#3 printf_buffer ] ( main:5::printf_sint:43 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_sint::value#3 printf_buffer ] { } main:5::printf_sint:59 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_sint::value#3 printf_buffer ] { } ) always clobbers reg byte a -Statement [94] if(printf_sint::value#3<0) goto printf_sint::@1 [ printf_sint::value#3 printf_buffer ] ( main:5::printf_sint:43 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_sint::value#3 printf_buffer ] { } main:5::printf_sint:59 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_sint::value#3 printf_buffer ] { } ) always clobbers reg byte a -Statement [95] printf_sint::value#0 = - printf_sint::value#3 [ printf_buffer printf_sint::value#0 ] ( main:5::printf_sint:43 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_sint::value#0 ] { } main:5::printf_sint:59 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_sint::value#0 ] { } ) always clobbers reg byte a -Statement [96] *((char *)&printf_buffer) = '-' [ printf_buffer printf_sint::value#0 ] ( main:5::printf_sint:43 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_sint::value#0 ] { } main:5::printf_sint:59 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_sint::value#0 ] { } ) always clobbers reg byte a -Statement [98] utoa::value#1 = (unsigned int)printf_sint::value#5 [ printf_buffer utoa::value#1 ] ( main:5::printf_sint:43 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::value#1 ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_sint:59 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::value#1 ] { { utoa::value#1 = utoa::value#10 } } ) always clobbers reg byte a -Statement [100] printf_number_buffer::buffer_sign#0 = *((char *)&printf_buffer) [ printf_buffer printf_number_buffer::buffer_sign#0 ] ( main:5::printf_sint:43 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::buffer_sign#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::buffer_sign#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [104] *((char *)&printf_buffer) = 0 [ printf_buffer ] ( main:5::printf_uint:47 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a -Statement [106] printf_number_buffer::buffer_sign#1 = *((char *)&printf_buffer) [ printf_buffer printf_number_buffer::buffer_sign#1 ] ( main:5::printf_uint:47 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::buffer_sign#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [114] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS) = 'e' [ printf_buffer ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a -Statement [115] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1) = 'r' [ printf_buffer ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a -Statement [116] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2) = 'r' [ printf_buffer ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a -Statement [117] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3) = 0 [ printf_buffer ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a -Statement [124] *utoa::buffer#10 = DIGITS[utoa::$11] [ printf_buffer utoa::buffer#10 ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::buffer#10 ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::buffer#10 ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::buffer#10 ] { } ) always clobbers reg byte a reg byte y -Statement [125] utoa::buffer#3 = ++ utoa::buffer#10 [ printf_buffer utoa::buffer#3 ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::buffer#3 ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::buffer#3 ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::buffer#3 ] { } ) always clobbers reg byte a -Statement [126] *utoa::buffer#3 = 0 [ printf_buffer ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a reg byte y -Statement [127] utoa::$10 = utoa::digit#2 << 1 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { } ) always clobbers reg byte a -Statement [128] utoa::digit_value#0 = utoa::digit_values#8[utoa::$10] [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } ) always clobbers reg byte a reg byte y -Statement [130] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@10 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } ) always clobbers reg byte a -Statement [133] utoa_append::buffer#0 = utoa::buffer#10 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [134] utoa_append::value#0 = utoa::value#3 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [135] utoa_append::sub#0 = utoa::digit_value#0 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [137] utoa_append::return#0 = utoa_append::value#2 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [138] utoa::value#0 = utoa_append::return#0 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { } ) always clobbers reg byte a -Statement [144] strlen::return#2 = strlen::len#2 [ printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a -Statement [145] printf_number_buffer::$19 = strlen::return#2 [ printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [147] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 [ printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [81] if(0!=*print::msg#5) goto print::@2 [ screen#1 print::msg#5 ] ( main:3::print:21 [ printf_buffer screen#1 print::msg#5 ] { } main:3::print:35 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:3::print:51 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:3::print:63 [ screen#1 print::msg#5 ] { { screen#1 = screen#25 } } ) always clobbers reg byte a reg byte y +Statement [83] *screen#1 = *print::msg#5 [ screen#1 print::msg#5 ] ( main:3::print:21 [ printf_buffer screen#1 print::msg#5 ] { } main:3::print:35 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:3::print:51 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:3::print:63 [ screen#1 print::msg#5 ] { { screen#1 = screen#25 } } ) always clobbers reg byte a reg byte y +Statement [91] *((char *)&printf_buffer) = 0 [ printf_sint::value#3 printf_buffer ] ( main:3::printf_sint:41 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_sint::value#3 printf_buffer ] { } main:3::printf_sint:57 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_sint::value#3 printf_buffer ] { } ) always clobbers reg byte a +Statement [92] if(printf_sint::value#3<0) goto printf_sint::@1 [ printf_sint::value#3 printf_buffer ] ( main:3::printf_sint:41 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_sint::value#3 printf_buffer ] { } main:3::printf_sint:57 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_sint::value#3 printf_buffer ] { } ) always clobbers reg byte a +Statement [93] printf_sint::value#0 = - printf_sint::value#3 [ printf_buffer printf_sint::value#0 ] ( main:3::printf_sint:41 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_sint::value#0 ] { } main:3::printf_sint:57 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_sint::value#0 ] { } ) always clobbers reg byte a +Statement [94] *((char *)&printf_buffer) = '-' [ printf_buffer printf_sint::value#0 ] ( main:3::printf_sint:41 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_sint::value#0 ] { } main:3::printf_sint:57 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_sint::value#0 ] { } ) always clobbers reg byte a +Statement [96] utoa::value#1 = (unsigned int)printf_sint::value#5 [ printf_buffer utoa::value#1 ] ( main:3::printf_sint:41 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::value#1 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_sint:57 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::value#1 ] { { utoa::value#1 = utoa::value#10 } } ) always clobbers reg byte a +Statement [98] printf_number_buffer::buffer_sign#0 = *((char *)&printf_buffer) [ printf_buffer printf_number_buffer::buffer_sign#0 ] ( main:3::printf_sint:41 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::buffer_sign#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::buffer_sign#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [102] *((char *)&printf_buffer) = 0 [ printf_buffer ] ( main:3::printf_uint:45 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [104] printf_number_buffer::buffer_sign#1 = *((char *)&printf_buffer) [ printf_buffer printf_number_buffer::buffer_sign#1 ] ( main:3::printf_uint:45 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::buffer_sign#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [112] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS) = 'e' [ printf_buffer ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [113] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1) = 'r' [ printf_buffer ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [114] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2) = 'r' [ printf_buffer ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [115] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3) = 0 [ printf_buffer ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [122] *utoa::buffer#10 = DIGITS[utoa::$11] [ printf_buffer utoa::buffer#10 ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::buffer#10 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::buffer#10 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::buffer#10 ] { } ) always clobbers reg byte a reg byte y +Statement [123] utoa::buffer#3 = ++ utoa::buffer#10 [ printf_buffer utoa::buffer#3 ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::buffer#3 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::buffer#3 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::buffer#3 ] { } ) always clobbers reg byte a +Statement [124] *utoa::buffer#3 = 0 [ printf_buffer ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a reg byte y +Statement [125] utoa::$10 = utoa::digit#2 << 1 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { } ) always clobbers reg byte a +Statement [126] utoa::digit_value#0 = utoa::digit_values#8[utoa::$10] [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } ) always clobbers reg byte a reg byte y +Statement [128] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@10 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } ) always clobbers reg byte a +Statement [131] utoa_append::buffer#0 = utoa::buffer#10 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [132] utoa_append::value#0 = utoa::value#3 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [133] utoa_append::sub#0 = utoa::digit_value#0 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [135] utoa_append::return#0 = utoa_append::value#2 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [136] utoa::value#0 = utoa_append::return#0 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { } ) always clobbers reg byte a +Statement [142] strlen::return#2 = strlen::len#2 [ printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a +Statement [143] printf_number_buffer::$19 = strlen::return#2 [ printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [145] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 [ printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:38 [ printf_number_buffer::len#2 printf_number_buffer::len#0 printf_number_buffer::len#1 ] -Statement [150] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#2 - printf_number_buffer::len#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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [151] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [154] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [155] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [156] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [157] printf_padding::putc#0 = printf_number_buffer::putc#10 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [158] printf_padding::length#0 = (char)printf_number_buffer::padding#10 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [160] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [161] stackpush(char) = printf_number_buffer::buffer_sign#10 [ ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [162] callexecute *printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a reg byte x reg byte y +Statement [148] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#2 - printf_number_buffer::len#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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [149] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [152] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [153] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [154] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [155] printf_padding::putc#0 = printf_number_buffer::putc#10 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a +Statement [156] printf_padding::length#0 = (char)printf_number_buffer::padding#10 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a +Statement [158] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [159] stackpush(char) = printf_number_buffer::buffer_sign#10 [ ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [160] callexecute *printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a reg byte x reg byte y Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [164] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [165] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [166] printf_padding::putc#1 = printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [167] printf_padding::length#1 = (char)printf_number_buffer::padding#10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 printf_padding::length#1 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 printf_padding::length#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 printf_padding::length#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 printf_padding::length#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [169] if(0==printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [172] printf_str::putc#0 = printf_number_buffer::putc#10 [ printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [174] if(0==printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return [ printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [175] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return [ printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [176] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 [ printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [177] printf_padding::putc#2 = printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [178] printf_padding::length#2 = (char)printf_number_buffer::padding#10 [ printf_buffer printf_padding::putc#2 printf_padding::length#2 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_padding::putc#2 printf_padding::length#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_padding::putc#2 printf_padding::length#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_padding::putc#2 printf_padding::length#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [183] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:5::printf_sint:43::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_sint:59::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:105::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [184] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] [ utoa_append::value#2 ] ( main:5::printf_sint:43::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_sint:59::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:105::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a reg byte y -Statement [187] 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:5::printf_sint:43::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_sint:59::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:105::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [190] if(0!=*strlen::str#3) goto strlen::@2 [ printf_buffer strlen::len#2 strlen::str#3 ] ( main:5::printf_sint:43::printf_number_buffer:101::strlen:143 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_sint:59::printf_number_buffer:101::strlen:143 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_uint:47::printf_number_buffer:107::strlen:143 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a reg byte y -Statement [196] if(printf_padding::i#2=utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:3::printf_sint:41::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_sint:57::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:103::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [182] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] [ utoa_append::value#2 ] ( main:3::printf_sint:41::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_sint:57::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:103::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a reg byte y +Statement [185] 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:3::printf_sint:41::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_sint:57::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:103::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [188] if(0!=*strlen::str#3) goto strlen::@2 [ printf_buffer strlen::len#2 strlen::str#3 ] ( main:3::printf_sint:41::printf_number_buffer:99::strlen:141 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:3::printf_sint:57::printf_number_buffer:99::strlen:141 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:3::printf_uint:45::printf_number_buffer:105::strlen:141 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a reg byte y +Statement [194] if(printf_padding::i#2=utoa::digit_value#0) goto utoa::@10 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } ) always clobbers reg byte a -Statement [133] utoa_append::buffer#0 = utoa::buffer#10 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [134] utoa_append::value#0 = utoa::value#3 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [135] utoa_append::sub#0 = utoa::digit_value#0 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [137] utoa_append::return#0 = utoa_append::value#2 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [138] utoa::value#0 = utoa_append::return#0 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] ( main:5::printf_sint:43::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_sint:59::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { { utoa::value#1 = utoa::value#10 } } main:5::printf_uint:47::utoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { } ) always clobbers reg byte a -Statement [144] strlen::return#2 = strlen::len#2 [ printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a -Statement [145] printf_number_buffer::$19 = strlen::return#2 [ printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [147] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 [ printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [150] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#2 - printf_number_buffer::len#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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [151] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [154] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [155] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [156] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [157] printf_padding::putc#0 = printf_number_buffer::putc#10 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [158] printf_padding::length#0 = (char)printf_number_buffer::padding#10 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [160] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [161] stackpush(char) = printf_number_buffer::buffer_sign#10 [ ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [162] callexecute *printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a reg byte x reg byte y +Statement [81] if(0!=*print::msg#5) goto print::@2 [ screen#1 print::msg#5 ] ( main:3::print:21 [ printf_buffer screen#1 print::msg#5 ] { } main:3::print:35 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:3::print:51 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:3::print:63 [ screen#1 print::msg#5 ] { { screen#1 = screen#25 } } ) always clobbers reg byte a reg byte y +Statement [83] *screen#1 = *print::msg#5 [ screen#1 print::msg#5 ] ( main:3::print:21 [ printf_buffer screen#1 print::msg#5 ] { } main:3::print:35 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:3::print:51 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:3::print:63 [ screen#1 print::msg#5 ] { { screen#1 = screen#25 } } ) always clobbers reg byte a reg byte y +Statement [91] *((char *)&printf_buffer) = 0 [ printf_sint::value#3 printf_buffer ] ( main:3::printf_sint:41 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_sint::value#3 printf_buffer ] { } main:3::printf_sint:57 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_sint::value#3 printf_buffer ] { } ) always clobbers reg byte a +Statement [92] if(printf_sint::value#3<0) goto printf_sint::@1 [ printf_sint::value#3 printf_buffer ] ( main:3::printf_sint:41 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_sint::value#3 printf_buffer ] { } main:3::printf_sint:57 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_sint::value#3 printf_buffer ] { } ) always clobbers reg byte a +Statement [93] printf_sint::value#0 = - printf_sint::value#3 [ printf_buffer printf_sint::value#0 ] ( main:3::printf_sint:41 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_sint::value#0 ] { } main:3::printf_sint:57 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_sint::value#0 ] { } ) always clobbers reg byte a +Statement [94] *((char *)&printf_buffer) = '-' [ printf_buffer printf_sint::value#0 ] ( main:3::printf_sint:41 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_sint::value#0 ] { } main:3::printf_sint:57 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_sint::value#0 ] { } ) always clobbers reg byte a +Statement [96] utoa::value#1 = (unsigned int)printf_sint::value#5 [ printf_buffer utoa::value#1 ] ( main:3::printf_sint:41 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::value#1 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_sint:57 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::value#1 ] { { utoa::value#1 = utoa::value#10 } } ) always clobbers reg byte a +Statement [98] printf_number_buffer::buffer_sign#0 = *((char *)&printf_buffer) [ printf_buffer printf_number_buffer::buffer_sign#0 ] ( main:3::printf_sint:41 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::buffer_sign#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::buffer_sign#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [102] *((char *)&printf_buffer) = 0 [ printf_buffer ] ( main:3::printf_uint:45 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [104] printf_number_buffer::buffer_sign#1 = *((char *)&printf_buffer) [ printf_buffer printf_number_buffer::buffer_sign#1 ] ( main:3::printf_uint:45 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::buffer_sign#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [112] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS) = 'e' [ printf_buffer ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [113] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1) = 'r' [ printf_buffer ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [114] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2) = 'r' [ printf_buffer ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [115] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3) = 0 [ printf_buffer ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [122] *utoa::buffer#10 = DIGITS[utoa::$11] [ printf_buffer utoa::buffer#10 ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::buffer#10 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::buffer#10 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::buffer#10 ] { } ) always clobbers reg byte a reg byte y +Statement [123] utoa::buffer#3 = ++ utoa::buffer#10 [ printf_buffer utoa::buffer#3 ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::buffer#3 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::buffer#3 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::buffer#3 ] { } ) always clobbers reg byte a +Statement [124] *utoa::buffer#3 = 0 [ printf_buffer ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a reg byte y +Statement [125] utoa::$10 = utoa::digit#2 << 1 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { } ) always clobbers reg byte a +Statement [126] utoa::digit_value#0 = utoa::digit_values#8[utoa::$10] [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } ) always clobbers reg byte a reg byte y +Statement [128] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@10 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } ) always clobbers reg byte a +Statement [131] utoa_append::buffer#0 = utoa::buffer#10 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [132] utoa_append::value#0 = utoa::value#3 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [133] utoa_append::sub#0 = utoa::digit_value#0 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [135] utoa_append::return#0 = utoa_append::value#2 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [136] utoa::value#0 = utoa_append::return#0 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] ( main:3::printf_sint:41::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_sint:57::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { { utoa::value#1 = utoa::value#10 } } main:3::printf_uint:45::utoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { } ) always clobbers reg byte a +Statement [142] strlen::return#2 = strlen::len#2 [ printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a +Statement [143] printf_number_buffer::$19 = strlen::return#2 [ printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [145] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 [ printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [148] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#2 - printf_number_buffer::len#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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [149] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [152] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [153] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [154] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [155] printf_padding::putc#0 = printf_number_buffer::putc#10 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a +Statement [156] printf_padding::length#0 = (char)printf_number_buffer::padding#10 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a +Statement [158] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [159] stackpush(char) = printf_number_buffer::buffer_sign#10 [ ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [160] callexecute *printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_sint:57::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a reg byte x reg byte y Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [164] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [165] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [166] printf_padding::putc#1 = printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [167] printf_padding::length#1 = (char)printf_number_buffer::padding#10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 printf_padding::length#1 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 printf_padding::length#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 printf_padding::length#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 printf_padding::length#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [169] if(0==printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [172] printf_str::putc#0 = printf_number_buffer::putc#10 [ printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [174] if(0==printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return [ printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [175] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return [ printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [176] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 [ printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [177] printf_padding::putc#2 = printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [178] printf_padding::length#2 = (char)printf_number_buffer::padding#10 [ printf_buffer printf_padding::putc#2 printf_padding::length#2 ] ( main:5::printf_sint:43::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_padding::putc#2 printf_padding::length#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_sint:59::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_padding::putc#2 printf_padding::length#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_padding::putc#2 printf_padding::length#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [183] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:5::printf_sint:43::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_sint:59::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:105::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [184] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] [ utoa_append::value#2 ] ( main:5::printf_sint:43::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_sint:59::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:105::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a reg byte y -Statement [187] 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:5::printf_sint:43::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_sint:59::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:105::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [190] if(0!=*strlen::str#3) goto strlen::@2 [ printf_buffer strlen::len#2 strlen::str#3 ] ( main:5::printf_sint:43::printf_number_buffer:101::strlen:143 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_sint:59::printf_number_buffer:101::strlen:143 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_uint:47::printf_number_buffer:107::strlen:143 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a reg byte y -Statement [196] if(printf_padding::i#2=utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:3::printf_sint:41::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_sint:57::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:103::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [182] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] [ utoa_append::value#2 ] ( main:3::printf_sint:41::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_sint:57::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:103::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a reg byte y +Statement [185] 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:3::printf_sint:41::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_sint:57::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa::value#1 = utoa::value#10 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:103::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [188] if(0!=*strlen::str#3) goto strlen::@2 [ printf_buffer strlen::len#2 strlen::str#3 ] ( main:3::printf_sint:41::printf_number_buffer:99::strlen:141 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:3::printf_sint:57::printf_number_buffer:99::strlen:141 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:3::printf_uint:45::printf_number_buffer:105::strlen:141 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_min_length#2 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a reg byte y +Statement [194] if(printf_padding::i#2capacity. - /// Used to hold state while printing - .label __snprintf_size = $14 /// Current position in the buffer being filled ( initially *s passed to snprintf() /// Used to hold state while printing - .label __snprintf_buffer = $16 + .label __snprintf_buffer = $14 .label screen = $e .segment Code // __start @@ -4477,34 +4459,24 @@ __start: { jmp __init1 // __start::__init1 __init1: - // [1] __snprintf_capacity = 0 -- vwuz1=vwuc1 - lda #<0 - sta.z __snprintf_capacity - lda #>0 - sta.z __snprintf_capacity+1 - // [2] __snprintf_size = 0 -- vwuz1=vwuc1 - lda #<0 - sta.z __snprintf_size - lda #>0 - sta.z __snprintf_size+1 - // [3] __snprintf_buffer = (char *) 0 -- pbuz1=pbuc1 + // [1] __snprintf_buffer = (char *) 0 -- pbuz1=pbuc1 lda #<0 sta.z __snprintf_buffer lda #>0 sta.z __snprintf_buffer+1 - // [4] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [5] call main - // [16] phi from __start::@1 to main [phi:__start::@1->main] + // [3] call main + // [14] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn // __start::@return __breturn: - // [6] return + // [4] return rts } // snputc @@ -4514,60 +4486,60 @@ __start: { // void snputc(__register(X) char c) snputc: { .const OFFSET_STACK_C = 0 - // [7] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) -- vbuxx=_stackidxbyte_vbuc1 + // [5] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) -- vbuxx=_stackidxbyte_vbuc1 tsx lda STACK_BASE+OFFSET_STACK_C,x tax - // [8] __snprintf_size = ++ __snprintf_size -- vwuz1=_inc_vwuz1 - inc.z __snprintf_size + // [6] __snprintf_size = ++ __snprintf_size -- vwum1=_inc_vwum1 + inc __snprintf_size bne !+ - inc.z __snprintf_size+1 + inc __snprintf_size+1 !: - // [9] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 -- vwuz1_le_vwuz2_then_la1 - lda.z __snprintf_size+1 - cmp.z __snprintf_capacity+1 + // [7] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 -- vwum1_le_vwum2_then_la1 + lda __snprintf_size+1 + cmp __snprintf_capacity+1 bne !+ - lda.z __snprintf_size - cmp.z __snprintf_capacity + lda __snprintf_size + cmp __snprintf_capacity beq __b1 !: bcc __b1 jmp __breturn // snputc::@return __breturn: - // [10] return + // [8] return rts // snputc::@1 __b1: - // [11] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 -- vwuz1_neq_vwuz2_then_la1 - lda.z __snprintf_size+1 - cmp.z __snprintf_capacity+1 + // [9] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 -- vwum1_neq_vwum2_then_la1 + lda __snprintf_size+1 + cmp __snprintf_capacity+1 bne __b3_from___b1 - lda.z __snprintf_size - cmp.z __snprintf_capacity + lda __snprintf_size + cmp __snprintf_capacity bne __b3_from___b1 - // [13] phi from snputc::@1 to snputc::@2 [phi:snputc::@1->snputc::@2] + // [11] phi from snputc::@1 to snputc::@2 [phi:snputc::@1->snputc::@2] __b2_from___b1: - // [13] phi snputc::c#2 = 0 [phi:snputc::@1->snputc::@2#0] -- vbuxx=vbuc1 + // [11] phi snputc::c#2 = 0 [phi:snputc::@1->snputc::@2#0] -- vbuxx=vbuc1 ldx #0 jmp __b2 - // [12] phi from snputc::@1 to snputc::@3 [phi:snputc::@1->snputc::@3] + // [10] phi from snputc::@1 to snputc::@3 [phi:snputc::@1->snputc::@3] __b3_from___b1: jmp __b3 // snputc::@3 __b3: - // [13] phi from snputc::@3 to snputc::@2 [phi:snputc::@3->snputc::@2] + // [11] phi from snputc::@3 to snputc::@2 [phi:snputc::@3->snputc::@2] __b2_from___b3: - // [13] phi snputc::c#2 = snputc::c#0 [phi:snputc::@3->snputc::@2#0] -- register_copy + // [11] phi snputc::c#2 = snputc::c#0 [phi:snputc::@3->snputc::@2#0] -- register_copy jmp __b2 // snputc::@2 __b2: - // [14] *__snprintf_buffer = snputc::c#2 -- _deref_pbuz1=vbuxx + // [12] *__snprintf_buffer = snputc::c#2 -- _deref_pbuz1=vbuxx // Append char txa ldy #0 sta (__snprintf_buffer),y - // [15] __snprintf_buffer = ++ __snprintf_buffer -- pbuz1=_inc_pbuz1 + // [13] __snprintf_buffer = ++ __snprintf_buffer -- pbuz1=_inc_pbuz1 inc.z __snprintf_buffer bne !+ inc.z __snprintf_buffer+1 @@ -4576,29 +4548,29 @@ snputc: { } // main main: { - // [17] call snprintf_init - // [67] phi from main to snprintf_init [phi:main->snprintf_init] + // [15] call snprintf_init + // [65] phi from main to snprintf_init [phi:main->snprintf_init] snprintf_init_from_main: - // [67] phi snprintf_init::n#4 = $14 [phi:main->snprintf_init#0] -- vwuz1=vbuc1 + // [65] phi snprintf_init::n#4 = $14 [phi:main->snprintf_init#0] -- vwuz1=vbuc1 lda #<$14 sta.z snprintf_init.n lda #>$14 sta.z snprintf_init.n+1 jsr snprintf_init - // [18] phi from main to main::@1 [phi:main->main::@1] + // [16] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: jmp __b1 // main::@1 __b1: - // [19] call printf_str - // [72] phi from main::@1 to printf_str [phi:main::@1->printf_str] + // [17] call printf_str + // [70] phi from main::@1 to printf_str [phi:main::@1->printf_str] printf_str_from___b1: - // [72] phi printf_str::putc#12 = &snputc [phi:main::@1->printf_str#0] -- pprz1=pprc1 + // [70] phi printf_str::putc#12 = &snputc [phi:main::@1->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 + // [70] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -4607,83 +4579,83 @@ main: { jmp __b2 // main::@2 __b2: - // [20] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 + // [18] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 lda #0 pha - // [21] callexecute snputc -- call_vprc1 + // [19] callexecute snputc -- call_vprc1 jsr snputc // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla - // [23] call print - // [81] phi from main::@2 to print [phi:main::@2->print] + // [21] call print + // [79] phi from main::@2 to print [phi:main::@2->print] print_from___b2: - // [81] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- pbuz1=pbuc1 + // [79] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- pbuz1=pbuc1 lda #<$400 sta.z screen lda #>$400 sta.z screen+1 jsr print - // [24] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + // [22] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: jmp __b3 // main::@3 __b3: - // [25] call snprintf_init - // [67] phi from main::@3 to snprintf_init [phi:main::@3->snprintf_init] + // [23] call snprintf_init + // [65] phi from main::@3 to snprintf_init [phi:main::@3->snprintf_init] snprintf_init_from___b3: - // [67] phi snprintf_init::n#4 = $14 [phi:main::@3->snprintf_init#0] -- vwuz1=vbuc1 + // [65] phi snprintf_init::n#4 = $14 [phi:main::@3->snprintf_init#0] -- vwuz1=vbuc1 lda #<$14 sta.z snprintf_init.n lda #>$14 sta.z snprintf_init.n+1 jsr snprintf_init - // [26] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // [24] phi from main::@3 to main::@4 [phi:main::@3->main::@4] __b4_from___b3: jmp __b4 // main::@4 __b4: - // [27] call printf_str - // [72] phi from main::@4 to printf_str [phi:main::@4->printf_str] + // [25] call printf_str + // [70] phi from main::@4 to printf_str [phi:main::@4->printf_str] printf_str_from___b4: - // [72] phi printf_str::putc#12 = &snputc [phi:main::@4->printf_str#0] -- pprz1=pprc1 + // [70] phi printf_str::putc#12 = &snputc [phi:main::@4->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- pbuz1=pbuc1 + // [70] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- pbuz1=pbuc1 lda #s1 sta.z printf_str.s+1 jsr printf_str - // [28] phi from main::@4 to main::@5 [phi:main::@4->main::@5] + // [26] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: jmp __b5 // main::@5 __b5: - // [29] call printf_string - // [88] phi from main::@5 to printf_string [phi:main::@5->printf_string] + // [27] call printf_string + // [86] phi from main::@5 to printf_string [phi:main::@5->printf_string] printf_string_from___b5: jsr printf_string jmp __b6 // main::@6 __b6: - // [30] stackpush(char) = '!' -- _stackpushbyte_=vbuc1 + // [28] stackpush(char) = '!' -- _stackpushbyte_=vbuc1 lda #'!' pha - // [31] callexecute snputc -- call_vprc1 + // [29] callexecute snputc -- call_vprc1 jsr snputc // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla - // [33] call printf_str - // [72] phi from main::@6 to printf_str [phi:main::@6->printf_str] + // [31] call printf_str + // [70] phi from main::@6 to printf_str [phi:main::@6->printf_str] printf_str_from___b6: - // [72] phi printf_str::putc#12 = &snputc [phi:main::@6->printf_str#0] -- pprz1=pprc1 + // [70] phi printf_str::putc#12 = &snputc [phi:main::@6->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 + // [70] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -4692,107 +4664,107 @@ main: { jmp __b7 // main::@7 __b7: - // [34] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 + // [32] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 lda #0 pha - // [35] callexecute snputc -- call_vprc1 + // [33] callexecute snputc -- call_vprc1 jsr snputc // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla - // [37] call print - // [81] phi from main::@7 to print [phi:main::@7->print] + // [35] call print + // [79] phi from main::@7 to print [phi:main::@7->print] print_from___b7: - // [81] phi screen#25 = screen#1 [phi:main::@7->print#0] -- register_copy + // [79] phi screen#25 = screen#1 [phi:main::@7->print#0] -- register_copy jsr print - // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] + // [36] phi from main::@7 to main::@8 [phi:main::@7->main::@8] __b8_from___b7: jmp __b8 // main::@8 __b8: - // [39] call snprintf_init - // [67] phi from main::@8 to snprintf_init [phi:main::@8->snprintf_init] + // [37] call snprintf_init + // [65] phi from main::@8 to snprintf_init [phi:main::@8->snprintf_init] snprintf_init_from___b8: - // [67] phi snprintf_init::n#4 = $14 [phi:main::@8->snprintf_init#0] -- vwuz1=vbuc1 + // [65] phi snprintf_init::n#4 = $14 [phi:main::@8->snprintf_init#0] -- vwuz1=vbuc1 lda #<$14 sta.z snprintf_init.n lda #>$14 sta.z snprintf_init.n+1 jsr snprintf_init - // [40] phi from main::@8 to main::@9 [phi:main::@8->main::@9] + // [38] phi from main::@8 to main::@9 [phi:main::@8->main::@9] __b9_from___b8: jmp __b9 // main::@9 __b9: - // [41] call printf_str - // [72] phi from main::@9 to printf_str [phi:main::@9->printf_str] + // [39] call printf_str + // [70] phi from main::@9 to printf_str [phi:main::@9->printf_str] printf_str_from___b9: - // [72] phi printf_str::putc#12 = &snputc [phi:main::@9->printf_str#0] -- pprz1=pprc1 + // [70] phi printf_str::putc#12 = &snputc [phi:main::@9->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 + // [70] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 lda #s1 sta.z printf_str.s+1 jsr printf_str - // [42] phi from main::@9 to main::@10 [phi:main::@9->main::@10] + // [40] phi from main::@9 to main::@10 [phi:main::@9->main::@10] __b10_from___b9: jmp __b10 // main::@10 __b10: - // [43] call printf_sint - // [92] phi from main::@10 to printf_sint [phi:main::@10->printf_sint] + // [41] call printf_sint + // [90] phi from main::@10 to printf_sint [phi:main::@10->printf_sint] printf_sint_from___b10: - // [92] phi printf_sint::value#3 = 3 [phi:main::@10->printf_sint#0] -- vwsz1=vbsc1 + // [90] phi printf_sint::value#3 = 3 [phi:main::@10->printf_sint#0] -- vwsz1=vbsc1 lda #<3 sta.z printf_sint.value lda #>3 sta.z printf_sint.value+1 jsr printf_sint - // [44] phi from main::@10 to main::@11 [phi:main::@10->main::@11] + // [42] phi from main::@10 to main::@11 [phi:main::@10->main::@11] __b11_from___b10: jmp __b11 // main::@11 __b11: - // [45] call printf_str - // [72] phi from main::@11 to printf_str [phi:main::@11->printf_str] + // [43] call printf_str + // [70] phi from main::@11 to printf_str [phi:main::@11->printf_str] printf_str_from___b11: - // [72] phi printf_str::putc#12 = &snputc [phi:main::@11->printf_str#0] -- pprz1=pprc1 + // [70] phi printf_str::putc#12 = &snputc [phi:main::@11->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 + // [70] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 lda #s4 sta.z printf_str.s+1 jsr printf_str - // [46] phi from main::@11 to main::@12 [phi:main::@11->main::@12] + // [44] phi from main::@11 to main::@12 [phi:main::@11->main::@12] __b12_from___b11: jmp __b12 // main::@12 __b12: - // [47] call printf_uint - // [103] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] + // [45] call printf_uint + // [101] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] printf_uint_from___b12: jsr printf_uint - // [48] phi from main::@12 to main::@13 [phi:main::@12->main::@13] + // [46] phi from main::@12 to main::@13 [phi:main::@12->main::@13] __b13_from___b12: jmp __b13 // main::@13 __b13: - // [49] call printf_str - // [72] phi from main::@13 to printf_str [phi:main::@13->printf_str] + // [47] call printf_str + // [70] phi from main::@13 to printf_str [phi:main::@13->printf_str] printf_str_from___b13: - // [72] phi printf_str::putc#12 = &snputc [phi:main::@13->printf_str#0] -- pprz1=pprc1 + // [70] phi printf_str::putc#12 = &snputc [phi:main::@13->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 + // [70] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 lda #s5 @@ -4801,79 +4773,79 @@ main: { jmp __b14 // main::@14 __b14: - // [50] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 + // [48] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 lda #0 pha - // [51] callexecute snputc -- call_vprc1 + // [49] callexecute snputc -- call_vprc1 jsr snputc // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla - // [53] call print - // [81] phi from main::@14 to print [phi:main::@14->print] + // [51] call print + // [79] phi from main::@14 to print [phi:main::@14->print] print_from___b14: - // [81] phi screen#25 = screen#1 [phi:main::@14->print#0] -- register_copy + // [79] phi screen#25 = screen#1 [phi:main::@14->print#0] -- register_copy jsr print - // [54] phi from main::@14 to main::@15 [phi:main::@14->main::@15] + // [52] phi from main::@14 to main::@15 [phi:main::@14->main::@15] __b15_from___b14: jmp __b15 // main::@15 __b15: - // [55] call snprintf_init - // [67] phi from main::@15 to snprintf_init [phi:main::@15->snprintf_init] + // [53] call snprintf_init + // [65] phi from main::@15 to snprintf_init [phi:main::@15->snprintf_init] snprintf_init_from___b15: - // [67] phi snprintf_init::n#4 = 6 [phi:main::@15->snprintf_init#0] -- vwuz1=vbuc1 + // [65] phi snprintf_init::n#4 = 6 [phi:main::@15->snprintf_init#0] -- vwuz1=vbuc1 lda #<6 sta.z snprintf_init.n lda #>6 sta.z snprintf_init.n+1 jsr snprintf_init - // [56] phi from main::@15 to main::@16 [phi:main::@15->main::@16] + // [54] phi from main::@15 to main::@16 [phi:main::@15->main::@16] __b16_from___b15: jmp __b16 // main::@16 __b16: - // [57] call printf_str - // [72] phi from main::@16 to printf_str [phi:main::@16->printf_str] + // [55] call printf_str + // [70] phi from main::@16 to printf_str [phi:main::@16->printf_str] printf_str_from___b16: - // [72] phi printf_str::putc#12 = &snputc [phi:main::@16->printf_str#0] -- pprz1=pprc1 + // [70] phi printf_str::putc#12 = &snputc [phi:main::@16->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 + // [70] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 lda #s6 sta.z printf_str.s+1 jsr printf_str - // [58] phi from main::@16 to main::@17 [phi:main::@16->main::@17] + // [56] phi from main::@16 to main::@17 [phi:main::@16->main::@17] __b17_from___b16: jmp __b17 // main::@17 __b17: - // [59] call printf_sint - // [92] phi from main::@17 to printf_sint [phi:main::@17->printf_sint] + // [57] call printf_sint + // [90] phi from main::@17 to printf_sint [phi:main::@17->printf_sint] printf_sint_from___b17: - // [92] phi printf_sint::value#3 = $56ce [phi:main::@17->printf_sint#0] -- vwsz1=vwsc1 + // [90] phi printf_sint::value#3 = $56ce [phi:main::@17->printf_sint#0] -- vwsz1=vwsc1 lda #<$56ce sta.z printf_sint.value lda #>$56ce sta.z printf_sint.value+1 jsr printf_sint - // [60] phi from main::@17 to main::@18 [phi:main::@17->main::@18] + // [58] phi from main::@17 to main::@18 [phi:main::@17->main::@18] __b18_from___b17: jmp __b18 // main::@18 __b18: - // [61] call printf_str - // [72] phi from main::@18 to printf_str [phi:main::@18->printf_str] + // [59] call printf_str + // [70] phi from main::@18 to printf_str [phi:main::@18->printf_str] printf_str_from___b18: - // [72] phi printf_str::putc#12 = &snputc [phi:main::@18->printf_str#0] -- pprz1=pprc1 + // [70] phi printf_str::putc#12 = &snputc [phi:main::@18->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- pbuz1=pbuc1 + // [70] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- pbuz1=pbuc1 lda #s5 @@ -4882,22 +4854,22 @@ main: { jmp __b19 // main::@19 __b19: - // [62] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 + // [60] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 lda #0 pha - // [63] callexecute snputc -- call_vprc1 + // [61] callexecute snputc -- call_vprc1 jsr snputc // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla - // [65] call print - // [81] phi from main::@19 to print [phi:main::@19->print] + // [63] call print + // [79] phi from main::@19 to print [phi:main::@19->print] print_from___b19: - // [81] phi screen#25 = screen#1 [phi:main::@19->print#0] -- register_copy + // [79] phi screen#25 = screen#1 [phi:main::@19->print#0] -- register_copy jsr print jmp __breturn // main::@return __breturn: - // [66] return + // [64] return rts .segment Data s: .text "hello world! " @@ -4921,17 +4893,17 @@ main: { // void snprintf_init(char *s, __zp(2) unsigned int n) snprintf_init: { .label n = 2 - // [68] __snprintf_capacity = snprintf_init::n#4 -- vwuz1=vwuz2 + // [66] __snprintf_capacity = snprintf_init::n#4 -- vwum1=vwuz2 lda.z n - sta.z __snprintf_capacity + sta __snprintf_capacity lda.z n+1 - sta.z __snprintf_capacity+1 - // [69] __snprintf_size = 0 -- vwuz1=vbuc1 + sta __snprintf_capacity+1 + // [67] __snprintf_size = 0 -- vwum1=vbuc1 lda #<0 - sta.z __snprintf_size + sta __snprintf_size lda #>0 - sta.z __snprintf_size+1 - // [70] __snprintf_buffer = BUF -- pbuz1=pbuc1 + sta __snprintf_size+1 + // [68] __snprintf_buffer = BUF -- pbuz1=pbuc1 lda #BUF @@ -4939,7 +4911,7 @@ snprintf_init: { jmp __breturn // snprintf_init::@return __breturn: - // [71] return + // [69] return rts } // printf_str @@ -4948,34 +4920,34 @@ snprintf_init: { printf_str: { .label s = 6 .label putc = 2 - // [73] phi from printf_str printf_str::@2 to printf_str::@1 [phi:printf_str/printf_str::@2->printf_str::@1] + // [71] phi from printf_str printf_str::@2 to printf_str::@1 [phi:printf_str/printf_str::@2->printf_str::@1] __b1_from_printf_str: __b1_from___b2: - // [73] phi printf_str::s#11 = printf_str::s#12 [phi:printf_str/printf_str::@2->printf_str::@1#0] -- register_copy + // [71] phi printf_str::s#11 = printf_str::s#12 [phi:printf_str/printf_str::@2->printf_str::@1#0] -- register_copy jmp __b1 // printf_str::@1 __b1: - // [74] printf_str::c#1 = *printf_str::s#11 -- vbuaa=_deref_pbuz1 + // [72] printf_str::c#1 = *printf_str::s#11 -- vbuaa=_deref_pbuz1 ldy #0 lda (s),y - // [75] printf_str::s#0 = ++ printf_str::s#11 -- pbuz1=_inc_pbuz1 + // [73] printf_str::s#0 = ++ printf_str::s#11 -- pbuz1=_inc_pbuz1 inc.z s bne !+ inc.z s+1 !: - // [76] if(0!=printf_str::c#1) goto printf_str::@2 -- 0_neq_vbuaa_then_la1 + // [74] if(0!=printf_str::c#1) goto printf_str::@2 -- 0_neq_vbuaa_then_la1 cmp #0 bne __b2 jmp __breturn // printf_str::@return __breturn: - // [77] return + // [75] return rts // printf_str::@2 __b2: - // [78] stackpush(char) = printf_str::c#1 -- _stackpushbyte_=vbuaa + // [76] stackpush(char) = printf_str::c#1 -- _stackpushbyte_=vbuaa pha - // [79] callexecute *printf_str::putc#12 -- call__deref_pprz1 + // [77] callexecute *printf_str::putc#12 -- call__deref_pprz1 jsr icall6 // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla @@ -4988,10 +4960,10 @@ printf_str: { // void print(__zp(6) char *msg) print: { .label msg = 6 - // [82] phi from print to print::@1 [phi:print->print::@1] + // [80] phi from print to print::@1 [phi:print->print::@1] __b1_from_print: - // [82] phi screen#1 = screen#25 [phi:print->print::@1#0] -- register_copy - // [82] phi print::msg#5 = BUF [phi:print->print::@1#1] -- pbuz1=pbuc1 + // [80] phi screen#1 = screen#25 [phi:print->print::@1#0] -- register_copy + // [80] phi print::msg#5 = BUF [phi:print->print::@1#1] -- pbuz1=pbuc1 lda #BUF @@ -4999,7 +4971,7 @@ print: { jmp __b1 // print::@1 __b1: - // [83] if(0!=*print::msg#5) goto print::@2 -- 0_neq__deref_pbuz1_then_la1 + // [81] if(0!=*print::msg#5) goto print::@2 -- 0_neq__deref_pbuz1_then_la1 ldy #0 lda (msg),y cmp #0 @@ -5007,29 +4979,29 @@ print: { jmp __breturn // print::@return __breturn: - // [84] return + // [82] return rts // print::@2 __b2: - // [85] *screen#1 = *print::msg#5 -- _deref_pbuz1=_deref_pbuz2 + // [83] *screen#1 = *print::msg#5 -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (msg),y ldy #0 sta (screen),y - // [86] screen#0 = ++ screen#1 -- pbuz1=_inc_pbuz1 + // [84] screen#0 = ++ screen#1 -- pbuz1=_inc_pbuz1 inc.z screen bne !+ inc.z screen+1 !: - // [87] print::msg#0 = ++ print::msg#5 -- pbuz1=_inc_pbuz1 + // [85] print::msg#0 = ++ print::msg#5 -- pbuz1=_inc_pbuz1 inc.z msg bne !+ inc.z msg+1 !: - // [82] phi from print::@2 to print::@1 [phi:print::@2->print::@1] + // [80] phi from print::@2 to print::@1 [phi:print::@2->print::@1] __b1_from___b2: - // [82] phi screen#1 = screen#0 [phi:print::@2->print::@1#0] -- register_copy - // [82] phi print::msg#5 = print::msg#0 [phi:print::@2->print::@1#1] -- register_copy + // [80] phi screen#1 = screen#0 [phi:print::@2->print::@1#0] -- register_copy + // [80] phi print::msg#5 = print::msg#0 [phi:print::@2->print::@1#1] -- register_copy jmp __b1 } // printf_string @@ -5038,20 +5010,20 @@ print: { // void printf_string(void (*putc)(char), char *str, char format_min_length, char format_justify_left) printf_string: { .label putc = snputc - // [89] phi from printf_string to printf_string::@1 [phi:printf_string->printf_string::@1] + // [87] phi from printf_string to printf_string::@1 [phi:printf_string->printf_string::@1] __b1_from_printf_string: jmp __b1 // printf_string::@1 __b1: - // [90] call printf_str - // [72] phi from printf_string::@1 to printf_str [phi:printf_string::@1->printf_str] + // [88] call printf_str + // [70] phi from printf_string::@1 to printf_str [phi:printf_string::@1->printf_str] printf_str_from___b1: - // [72] phi printf_str::putc#12 = printf_string::putc#0 [phi:printf_string::@1->printf_str#0] -- pprz1=pprc1 + // [70] phi printf_str::putc#12 = printf_string::putc#0 [phi:printf_string::@1->printf_str#0] -- pprz1=pprc1 lda #putc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- pbuz1=pbuc1 + // [70] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- pbuz1=pbuc1 lda #main.str @@ -5060,7 +5032,7 @@ printf_string: { jmp __breturn // printf_string::@return __breturn: - // [91] return + // [89] return rts } // printf_sint @@ -5068,21 +5040,21 @@ printf_string: { // void printf_sint(void (*putc)(char), __zp(2) int value, char format_min_length, char format_justify_left, char format_sign_always, char format_zero_padding, char format_upper_case, char format_radix) printf_sint: { .label value = 2 - // [93] *((char *)&printf_buffer) = 0 -- _deref_pbuc1=vbuc2 + // [91] *((char *)&printf_buffer) = 0 -- _deref_pbuc1=vbuc2 // Handle any sign lda #0 sta printf_buffer - // [94] if(printf_sint::value#3<0) goto printf_sint::@1 -- vwsz1_lt_0_then_la1 + // [92] if(printf_sint::value#3<0) goto printf_sint::@1 -- vwsz1_lt_0_then_la1 lda.z value+1 bmi __b1 - // [97] phi from printf_sint printf_sint::@1 to printf_sint::@2 [phi:printf_sint/printf_sint::@1->printf_sint::@2] + // [95] phi from printf_sint printf_sint::@1 to printf_sint::@2 [phi:printf_sint/printf_sint::@1->printf_sint::@2] __b2_from_printf_sint: __b2_from___b1: - // [97] phi printf_sint::value#5 = printf_sint::value#3 [phi:printf_sint/printf_sint::@1->printf_sint::@2#0] -- register_copy + // [95] phi printf_sint::value#5 = printf_sint::value#3 [phi:printf_sint/printf_sint::@1->printf_sint::@2#0] -- register_copy jmp __b2 // printf_sint::@1 __b1: - // [95] printf_sint::value#0 = - printf_sint::value#3 -- vwsz1=_neg_vwsz1 + // [93] printf_sint::value#0 = - printf_sint::value#3 -- vwsz1=_neg_vwsz1 lda #0 sec sbc.z value @@ -5090,52 +5062,52 @@ printf_sint: { lda #0 sbc.z value+1 sta.z value+1 - // [96] *((char *)&printf_buffer) = '-' -- _deref_pbuc1=vbuc2 + // [94] *((char *)&printf_buffer) = '-' -- _deref_pbuc1=vbuc2 lda #'-' sta printf_buffer jmp __b2_from___b1 // printf_sint::@2 __b2: - // [98] utoa::value#1 = (unsigned int)printf_sint::value#5 - // [99] call utoa - // [109] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] + // [96] utoa::value#1 = (unsigned int)printf_sint::value#5 + // [97] call utoa + // [107] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] utoa_from___b2: - // [109] phi utoa::value#10 = utoa::value#1 [phi:printf_sint::@2->utoa#0] -- register_copy - // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- vbuxx=vbuc1 + // [107] phi utoa::value#10 = utoa::value#1 [phi:printf_sint::@2->utoa#0] -- register_copy + // [107] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- vbuxx=vbuc1 ldx #DECIMAL jsr utoa jmp __b3 // printf_sint::@3 __b3: - // [100] printf_number_buffer::buffer_sign#0 = *((char *)&printf_buffer) -- vbuz1=_deref_pbuc1 + // [98] printf_number_buffer::buffer_sign#0 = *((char *)&printf_buffer) -- vbuz1=_deref_pbuc1 lda printf_buffer sta.z printf_number_buffer.buffer_sign - // [101] call printf_number_buffer + // [99] call printf_number_buffer // Print using format - // [140] phi from printf_sint::@3 to printf_number_buffer [phi:printf_sint::@3->printf_number_buffer] + // [138] phi from printf_sint::@3 to printf_number_buffer [phi:printf_sint::@3->printf_number_buffer] printf_number_buffer_from___b3: - // [140] phi printf_number_buffer::format_upper_case#10 = 0 [phi:printf_sint::@3->printf_number_buffer#0] -- vbuz1=vbuc1 + // [138] phi printf_number_buffer::format_upper_case#10 = 0 [phi:printf_sint::@3->printf_number_buffer#0] -- vbuz1=vbuc1 lda #0 sta.z printf_number_buffer.format_upper_case - // [140] phi printf_number_buffer::putc#10 = &snputc [phi:printf_sint::@3->printf_number_buffer#1] -- pprz1=pprc1 + // [138] phi printf_number_buffer::putc#10 = &snputc [phi:printf_sint::@3->printf_number_buffer#1] -- pprz1=pprc1 lda #snputc sta.z printf_number_buffer.putc+1 - // [140] phi printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#0 [phi:printf_sint::@3->printf_number_buffer#2] -- register_copy - // [140] phi printf_number_buffer::format_zero_padding#10 = 0 [phi:printf_sint::@3->printf_number_buffer#3] -- vbuz1=vbuc1 + // [138] phi printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#0 [phi:printf_sint::@3->printf_number_buffer#2] -- register_copy + // [138] phi printf_number_buffer::format_zero_padding#10 = 0 [phi:printf_sint::@3->printf_number_buffer#3] -- vbuz1=vbuc1 lda #0 sta.z printf_number_buffer.format_zero_padding - // [140] phi printf_number_buffer::format_justify_left#10 = 0 [phi:printf_sint::@3->printf_number_buffer#4] -- vbuz1=vbuc1 + // [138] phi printf_number_buffer::format_justify_left#10 = 0 [phi:printf_sint::@3->printf_number_buffer#4] -- vbuz1=vbuc1 lda #0 sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#2 = 0 [phi:printf_sint::@3->printf_number_buffer#5] -- vbuxx=vbuc1 + // [138] phi printf_number_buffer::format_min_length#2 = 0 [phi:printf_sint::@3->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #0 jsr printf_number_buffer jmp __breturn // printf_sint::@return __breturn: - // [102] return + // [100] return rts } // printf_uint @@ -5151,54 +5123,54 @@ printf_uint: { jmp __b1 // printf_uint::@1 __b1: - // [104] *((char *)&printf_buffer) = 0 -- _deref_pbuc1=vbuc2 + // [102] *((char *)&printf_buffer) = 0 -- _deref_pbuc1=vbuc2 // Handle any sign lda #0 sta printf_buffer - // [105] call utoa + // [103] call utoa // Format number into buffer - // [109] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] + // [107] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] utoa_from___b1: - // [109] phi utoa::value#10 = printf_uint::uvalue#0 [phi:printf_uint::@1->utoa#0] -- vwuz1=vwuc1 + // [107] phi utoa::value#10 = printf_uint::uvalue#0 [phi:printf_uint::@1->utoa#0] -- vwuz1=vwuc1 lda #uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- vbuxx=vbuc1 + // [107] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- vbuxx=vbuc1 ldx #HEXADECIMAL jsr utoa jmp __b2 // printf_uint::@2 __b2: - // [106] printf_number_buffer::buffer_sign#1 = *((char *)&printf_buffer) -- vbuz1=_deref_pbuc1 + // [104] printf_number_buffer::buffer_sign#1 = *((char *)&printf_buffer) -- vbuz1=_deref_pbuc1 lda printf_buffer sta.z printf_number_buffer.buffer_sign - // [107] call printf_number_buffer + // [105] call printf_number_buffer // Print using format - // [140] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] + // [138] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] printf_number_buffer_from___b2: - // [140] phi printf_number_buffer::format_upper_case#10 = printf_uint::format_upper_case#0 [phi:printf_uint::@2->printf_number_buffer#0] -- vbuz1=vbuc1 + // [138] phi printf_number_buffer::format_upper_case#10 = printf_uint::format_upper_case#0 [phi:printf_uint::@2->printf_number_buffer#0] -- vbuz1=vbuc1 lda #format_upper_case sta.z printf_number_buffer.format_upper_case - // [140] phi printf_number_buffer::putc#10 = printf_uint::putc#0 [phi:printf_uint::@2->printf_number_buffer#1] -- pprz1=pprc1 + // [138] phi printf_number_buffer::putc#10 = printf_uint::putc#0 [phi:printf_uint::@2->printf_number_buffer#1] -- pprz1=pprc1 lda #putc sta.z printf_number_buffer.putc+1 - // [140] phi printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#1 [phi:printf_uint::@2->printf_number_buffer#2] -- register_copy - // [140] phi printf_number_buffer::format_zero_padding#10 = printf_uint::format_zero_padding#0 [phi:printf_uint::@2->printf_number_buffer#3] -- vbuz1=vbuc1 + // [138] phi printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#1 [phi:printf_uint::@2->printf_number_buffer#2] -- register_copy + // [138] phi printf_number_buffer::format_zero_padding#10 = printf_uint::format_zero_padding#0 [phi:printf_uint::@2->printf_number_buffer#3] -- vbuz1=vbuc1 lda #format_zero_padding sta.z printf_number_buffer.format_zero_padding - // [140] phi printf_number_buffer::format_justify_left#10 = printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 + // [138] phi printf_number_buffer::format_justify_left#10 = printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#2 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [138] phi printf_number_buffer::format_min_length#2 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer jmp __breturn // printf_uint::@return __breturn: - // [108] return + // [106] return rts } // utoa @@ -5215,115 +5187,115 @@ utoa: { .label value = 2 .label max_digits = $11 .label digit_values = 6 - // [110] if(utoa::radix#2==DECIMAL) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 + // [108] if(utoa::radix#2==DECIMAL) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 cpx #DECIMAL beq __b1_from_utoa jmp __b2 // utoa::@2 __b2: - // [111] if(utoa::radix#2==HEXADECIMAL) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 + // [109] if(utoa::radix#2==HEXADECIMAL) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 cpx #HEXADECIMAL beq __b1_from___b2 jmp __b3 // utoa::@3 __b3: - // [112] if(utoa::radix#2==OCTAL) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 + // [110] if(utoa::radix#2==OCTAL) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 cpx #OCTAL beq __b1_from___b3 jmp __b4 // utoa::@4 __b4: - // [113] if(utoa::radix#2==BINARY) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 + // [111] if(utoa::radix#2==BINARY) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 cpx #BINARY beq __b1_from___b4 jmp __b5 // utoa::@5 __b5: - // [114] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS) = 'e' -- _deref_pbuc1=vbuc2 + // [112] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS) = 'e' -- _deref_pbuc1=vbuc2 // Unknown radix lda #'e' sta printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS - // [115] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1) = 'r' -- _deref_pbuc1=vbuc2 + // [113] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1) = 'r' -- _deref_pbuc1=vbuc2 lda #'r' sta printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1 - // [116] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2) = 'r' -- _deref_pbuc1=vbuc2 + // [114] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2) = 'r' -- _deref_pbuc1=vbuc2 lda #'r' sta printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2 - // [117] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3) = 0 -- _deref_pbuc1=vbuc2 + // [115] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3) = 0 -- _deref_pbuc1=vbuc2 lda #0 sta printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3 jmp __breturn // utoa::@return __breturn: - // [118] return + // [116] return rts - // [119] phi from utoa to utoa::@1 [phi:utoa->utoa::@1] + // [117] phi from utoa to utoa::@1 [phi:utoa->utoa::@1] __b1_from_utoa: - // [119] phi utoa::digit_values#8 = RADIX_DECIMAL_VALUES [phi:utoa->utoa::@1#0] -- pwuz1=pwuc1 + // [117] phi utoa::digit_values#8 = RADIX_DECIMAL_VALUES [phi:utoa->utoa::@1#0] -- pwuz1=pwuc1 lda #RADIX_DECIMAL_VALUES sta.z digit_values+1 - // [119] phi utoa::max_digits#7 = 5 [phi:utoa->utoa::@1#1] -- vbuz1=vbuc1 + // [117] phi utoa::max_digits#7 = 5 [phi:utoa->utoa::@1#1] -- vbuz1=vbuc1 lda #5 sta.z max_digits jmp __b1 - // [119] phi from utoa::@2 to utoa::@1 [phi:utoa::@2->utoa::@1] + // [117] phi from utoa::@2 to utoa::@1 [phi:utoa::@2->utoa::@1] __b1_from___b2: - // [119] phi utoa::digit_values#8 = RADIX_HEXADECIMAL_VALUES [phi:utoa::@2->utoa::@1#0] -- pwuz1=pwuc1 + // [117] phi utoa::digit_values#8 = RADIX_HEXADECIMAL_VALUES [phi:utoa::@2->utoa::@1#0] -- pwuz1=pwuc1 lda #RADIX_HEXADECIMAL_VALUES sta.z digit_values+1 - // [119] phi utoa::max_digits#7 = 4 [phi:utoa::@2->utoa::@1#1] -- vbuz1=vbuc1 + // [117] phi utoa::max_digits#7 = 4 [phi:utoa::@2->utoa::@1#1] -- vbuz1=vbuc1 lda #4 sta.z max_digits jmp __b1 - // [119] phi from utoa::@3 to utoa::@1 [phi:utoa::@3->utoa::@1] + // [117] phi from utoa::@3 to utoa::@1 [phi:utoa::@3->utoa::@1] __b1_from___b3: - // [119] phi utoa::digit_values#8 = RADIX_OCTAL_VALUES [phi:utoa::@3->utoa::@1#0] -- pwuz1=pwuc1 + // [117] phi utoa::digit_values#8 = RADIX_OCTAL_VALUES [phi:utoa::@3->utoa::@1#0] -- pwuz1=pwuc1 lda #RADIX_OCTAL_VALUES sta.z digit_values+1 - // [119] phi utoa::max_digits#7 = 6 [phi:utoa::@3->utoa::@1#1] -- vbuz1=vbuc1 + // [117] phi utoa::max_digits#7 = 6 [phi:utoa::@3->utoa::@1#1] -- vbuz1=vbuc1 lda #6 sta.z max_digits jmp __b1 - // [119] phi from utoa::@4 to utoa::@1 [phi:utoa::@4->utoa::@1] + // [117] phi from utoa::@4 to utoa::@1 [phi:utoa::@4->utoa::@1] __b1_from___b4: - // [119] phi utoa::digit_values#8 = RADIX_BINARY_VALUES [phi:utoa::@4->utoa::@1#0] -- pwuz1=pwuc1 + // [117] phi utoa::digit_values#8 = RADIX_BINARY_VALUES [phi:utoa::@4->utoa::@1#0] -- pwuz1=pwuc1 lda #RADIX_BINARY_VALUES sta.z digit_values+1 - // [119] phi utoa::max_digits#7 = $10 [phi:utoa::@4->utoa::@1#1] -- vbuz1=vbuc1 + // [117] phi utoa::max_digits#7 = $10 [phi:utoa::@4->utoa::@1#1] -- vbuz1=vbuc1 lda #$10 sta.z max_digits jmp __b1 // utoa::@1 __b1: - // [120] phi from utoa::@1 to utoa::@6 [phi:utoa::@1->utoa::@6] + // [118] phi from utoa::@1 to utoa::@6 [phi:utoa::@1->utoa::@6] __b6_from___b1: - // [120] phi utoa::buffer#10 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:utoa::@1->utoa::@6#0] -- pbuz1=pbuc1 + // [118] phi utoa::buffer#10 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:utoa::@1->utoa::@6#0] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS sta.z buffer+1 - // [120] phi utoa::started#2 = 0 [phi:utoa::@1->utoa::@6#1] -- vbuxx=vbuc1 + // [118] phi utoa::started#2 = 0 [phi:utoa::@1->utoa::@6#1] -- vbuxx=vbuc1 ldx #0 - // [120] phi utoa::value#3 = utoa::value#10 [phi:utoa::@1->utoa::@6#2] -- register_copy - // [120] phi utoa::digit#2 = 0 [phi:utoa::@1->utoa::@6#3] -- vbuz1=vbuc1 + // [118] phi utoa::value#3 = utoa::value#10 [phi:utoa::@1->utoa::@6#2] -- register_copy + // [118] phi utoa::digit#2 = 0 [phi:utoa::@1->utoa::@6#3] -- vbuz1=vbuc1 lda #0 sta.z digit jmp __b6 // utoa::@6 __b6: - // [121] utoa::$4 = utoa::max_digits#7 - 1 -- vbuaa=vbuz1_minus_1 + // [119] utoa::$4 = utoa::max_digits#7 - 1 -- vbuaa=vbuz1_minus_1 lda.z max_digits sec sbc #1 - // [122] if(utoa::digit#2=utoa::digit_value#0) goto utoa::@10 -- vwuz1_ge_vwuz2_then_la1 + // [128] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@10 -- vwuz1_ge_vwuz2_then_la1 lda.z digit_value+1 cmp.z value+1 bne !+ @@ -5374,48 +5346,48 @@ utoa: { beq __b10 !: bcc __b10 - // [131] phi from utoa::@12 to utoa::@9 [phi:utoa::@12->utoa::@9] + // [129] phi from utoa::@12 to utoa::@9 [phi:utoa::@12->utoa::@9] __b9_from___b12: - // [131] phi utoa::buffer#15 = utoa::buffer#10 [phi:utoa::@12->utoa::@9#0] -- register_copy - // [131] phi utoa::started#4 = utoa::started#2 [phi:utoa::@12->utoa::@9#1] -- register_copy - // [131] phi utoa::value#7 = utoa::value#3 [phi:utoa::@12->utoa::@9#2] -- register_copy + // [129] phi utoa::buffer#15 = utoa::buffer#10 [phi:utoa::@12->utoa::@9#0] -- register_copy + // [129] phi utoa::started#4 = utoa::started#2 [phi:utoa::@12->utoa::@9#1] -- register_copy + // [129] phi utoa::value#7 = utoa::value#3 [phi:utoa::@12->utoa::@9#2] -- register_copy jmp __b9 // utoa::@9 __b9: - // [132] utoa::digit#1 = ++ utoa::digit#2 -- vbuz1=_inc_vbuz1 + // [130] utoa::digit#1 = ++ utoa::digit#2 -- vbuz1=_inc_vbuz1 inc.z digit - // [120] phi from utoa::@9 to utoa::@6 [phi:utoa::@9->utoa::@6] + // [118] phi from utoa::@9 to utoa::@6 [phi:utoa::@9->utoa::@6] __b6_from___b9: - // [120] phi utoa::buffer#10 = utoa::buffer#15 [phi:utoa::@9->utoa::@6#0] -- register_copy - // [120] phi utoa::started#2 = utoa::started#4 [phi:utoa::@9->utoa::@6#1] -- register_copy - // [120] phi utoa::value#3 = utoa::value#7 [phi:utoa::@9->utoa::@6#2] -- register_copy - // [120] phi utoa::digit#2 = utoa::digit#1 [phi:utoa::@9->utoa::@6#3] -- register_copy + // [118] phi utoa::buffer#10 = utoa::buffer#15 [phi:utoa::@9->utoa::@6#0] -- register_copy + // [118] phi utoa::started#2 = utoa::started#4 [phi:utoa::@9->utoa::@6#1] -- register_copy + // [118] phi utoa::value#3 = utoa::value#7 [phi:utoa::@9->utoa::@6#2] -- register_copy + // [118] phi utoa::digit#2 = utoa::digit#1 [phi:utoa::@9->utoa::@6#3] -- register_copy jmp __b6 // utoa::@10 __b10: - // [133] utoa_append::buffer#0 = utoa::buffer#10 - // [134] utoa_append::value#0 = utoa::value#3 - // [135] utoa_append::sub#0 = utoa::digit_value#0 - // [136] call utoa_append - // [181] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] + // [131] utoa_append::buffer#0 = utoa::buffer#10 + // [132] utoa_append::value#0 = utoa::value#3 + // [133] utoa_append::sub#0 = utoa::digit_value#0 + // [134] call utoa_append + // [179] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] utoa_append_from___b10: jsr utoa_append - // [137] utoa_append::return#0 = utoa_append::value#2 + // [135] utoa_append::return#0 = utoa_append::value#2 jmp __b11 // utoa::@11 __b11: - // [138] utoa::value#0 = utoa_append::return#0 - // [139] utoa::buffer#4 = ++ utoa::buffer#10 -- pbuz1=_inc_pbuz1 + // [136] utoa::value#0 = utoa_append::return#0 + // [137] utoa::buffer#4 = ++ utoa::buffer#10 -- pbuz1=_inc_pbuz1 inc.z buffer bne !+ inc.z buffer+1 !: - // [131] phi from utoa::@11 to utoa::@9 [phi:utoa::@11->utoa::@9] + // [129] phi from utoa::@11 to utoa::@9 [phi:utoa::@11->utoa::@9] __b9_from___b11: - // [131] phi utoa::buffer#15 = utoa::buffer#4 [phi:utoa::@11->utoa::@9#0] -- register_copy - // [131] phi utoa::started#4 = 1 [phi:utoa::@11->utoa::@9#1] -- vbuxx=vbuc1 + // [129] phi utoa::buffer#15 = utoa::buffer#4 [phi:utoa::@11->utoa::@9#0] -- register_copy + // [129] phi utoa::started#4 = 1 [phi:utoa::@11->utoa::@9#1] -- vbuxx=vbuc1 ldx #1 - // [131] phi utoa::value#7 = utoa::value#0 [phi:utoa::@11->utoa::@9#2] -- register_copy + // [129] phi utoa::value#7 = utoa::value#0 [phi:utoa::@11->utoa::@9#2] -- register_copy jmp __b9 } // printf_number_buffer @@ -5430,170 +5402,170 @@ printf_number_buffer: { .label format_zero_padding = $c .label format_justify_left = $11 .label format_upper_case = $13 - // [141] if(0==printf_number_buffer::format_min_length#2) goto printf_number_buffer::@1 -- 0_eq_vbuxx_then_la1 + // [139] if(0==printf_number_buffer::format_min_length#2) goto printf_number_buffer::@1 -- 0_eq_vbuxx_then_la1 cpx #0 beq __b1_from_printf_number_buffer - // [142] phi from printf_number_buffer to printf_number_buffer::@6 [phi:printf_number_buffer->printf_number_buffer::@6] + // [140] phi from printf_number_buffer to printf_number_buffer::@6 [phi:printf_number_buffer->printf_number_buffer::@6] __b6_from_printf_number_buffer: jmp __b6 // printf_number_buffer::@6 __b6: - // [143] call strlen - // [188] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] + // [141] call strlen + // [186] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] strlen_from___b6: jsr strlen - // [144] strlen::return#2 = strlen::len#2 + // [142] strlen::return#2 = strlen::len#2 jmp __b14 // printf_number_buffer::@14 __b14: - // [145] printf_number_buffer::$19 = strlen::return#2 - // [146] printf_number_buffer::len#0 = (signed char)printf_number_buffer::$19 -- vbsyy=_sbyte_vwuz1 + // [143] printf_number_buffer::$19 = strlen::return#2 + // [144] printf_number_buffer::len#0 = (signed char)printf_number_buffer::$19 -- vbsyy=_sbyte_vwuz1 // There is a minimum length - work out the padding ldy.z __19 - // [147] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 -- 0_eq_vbuz1_then_la1 + // [145] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 -- 0_eq_vbuz1_then_la1 lda.z buffer_sign beq __b13_from___b14 jmp __b7 // printf_number_buffer::@7 __b7: - // [148] printf_number_buffer::len#1 = ++ printf_number_buffer::len#0 -- vbsyy=_inc_vbsyy + // [146] printf_number_buffer::len#1 = ++ printf_number_buffer::len#0 -- vbsyy=_inc_vbsyy iny - // [149] phi from printf_number_buffer::@14 printf_number_buffer::@7 to printf_number_buffer::@13 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13] + // [147] phi from printf_number_buffer::@14 printf_number_buffer::@7 to printf_number_buffer::@13 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13] __b13_from___b14: __b13_from___b7: - // [149] phi printf_number_buffer::len#2 = printf_number_buffer::len#0 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13#0] -- register_copy + // [147] phi printf_number_buffer::len#2 = printf_number_buffer::len#0 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13#0] -- register_copy jmp __b13 // printf_number_buffer::@13 __b13: - // [150] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#2 - printf_number_buffer::len#2 -- vbsz1=vbsxx_minus_vbsyy + // [148] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#2 - printf_number_buffer::len#2 -- vbsz1=vbsxx_minus_vbsyy txa sty.z $ff sec sbc.z $ff sta.z padding - // [151] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 -- vbsz1_ge_0_then_la1 + // [149] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 -- vbsz1_ge_0_then_la1 lda.z padding cmp #0 bpl __b21_from___b13 - // [153] phi from printf_number_buffer printf_number_buffer::@13 to printf_number_buffer::@1 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1] + // [151] phi from printf_number_buffer printf_number_buffer::@13 to printf_number_buffer::@1 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1] __b1_from_printf_number_buffer: __b1_from___b13: - // [153] phi printf_number_buffer::padding#10 = 0 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1#0] -- vbsz1=vbsc1 + // [151] phi printf_number_buffer::padding#10 = 0 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1#0] -- vbsz1=vbsc1 lda #0 sta.z padding jmp __b1 - // [152] phi from printf_number_buffer::@13 to printf_number_buffer::@21 [phi:printf_number_buffer::@13->printf_number_buffer::@21] + // [150] phi from printf_number_buffer::@13 to printf_number_buffer::@21 [phi:printf_number_buffer::@13->printf_number_buffer::@21] __b21_from___b13: jmp __b21 // printf_number_buffer::@21 __b21: - // [153] phi from printf_number_buffer::@21 to printf_number_buffer::@1 [phi:printf_number_buffer::@21->printf_number_buffer::@1] + // [151] phi from printf_number_buffer::@21 to printf_number_buffer::@1 [phi:printf_number_buffer::@21->printf_number_buffer::@1] __b1_from___b21: - // [153] phi printf_number_buffer::padding#10 = printf_number_buffer::padding#1 [phi:printf_number_buffer::@21->printf_number_buffer::@1#0] -- register_copy + // [151] phi printf_number_buffer::padding#10 = printf_number_buffer::padding#1 [phi:printf_number_buffer::@21->printf_number_buffer::@1#0] -- register_copy jmp __b1 // printf_number_buffer::@1 __b1: - // [154] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 -- 0_neq_vbuz1_then_la1 + // [152] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 -- 0_neq_vbuz1_then_la1 lda.z format_justify_left bne __b2 jmp __b17 // printf_number_buffer::@17 __b17: - // [155] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 -- 0_neq_vbuz1_then_la1 + // [153] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 -- 0_neq_vbuz1_then_la1 lda.z format_zero_padding bne __b2 jmp __b16 // printf_number_buffer::@16 __b16: - // [156] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 -- 0_neq_vbsz1_then_la1 + // [154] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 -- 0_neq_vbsz1_then_la1 lda.z padding cmp #0 bne __b8 jmp __b2 // printf_number_buffer::@8 __b8: - // [157] printf_padding::putc#0 = printf_number_buffer::putc#10 - // [158] printf_padding::length#0 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuz2 + // [155] printf_padding::putc#0 = printf_number_buffer::putc#10 + // [156] printf_padding::length#0 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuz2 lda.z padding sta.z printf_padding.length - // [159] call printf_padding - // [194] phi from printf_number_buffer::@8 to printf_padding [phi:printf_number_buffer::@8->printf_padding] + // [157] call printf_padding + // [192] phi from printf_number_buffer::@8 to printf_padding [phi:printf_number_buffer::@8->printf_padding] printf_padding_from___b8: - // [194] phi printf_padding::putc#7 = printf_padding::putc#0 [phi:printf_number_buffer::@8->printf_padding#0] -- register_copy - // [194] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 + // [192] phi printf_padding::putc#7 = printf_padding::putc#0 [phi:printf_number_buffer::@8->printf_padding#0] -- register_copy + // [192] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy + // [192] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy jsr printf_padding jmp __b2 // printf_number_buffer::@2 __b2: - // [160] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 -- 0_eq_vbuz1_then_la1 + // [158] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 -- 0_eq_vbuz1_then_la1 lda.z buffer_sign beq __b3 jmp __b9 // printf_number_buffer::@9 __b9: - // [161] stackpush(char) = printf_number_buffer::buffer_sign#10 -- _stackpushbyte_=vbuz1 + // [159] stackpush(char) = printf_number_buffer::buffer_sign#10 -- _stackpushbyte_=vbuz1 lda.z buffer_sign pha - // [162] callexecute *printf_number_buffer::putc#10 -- call__deref_pprz1 + // [160] callexecute *printf_number_buffer::putc#10 -- call__deref_pprz1 jsr icall7 // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla jmp __b3 // printf_number_buffer::@3 __b3: - // [164] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 -- 0_eq_vbuz1_then_la1 + // [162] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 -- 0_eq_vbuz1_then_la1 lda.z format_zero_padding beq __b4 jmp __b18 // printf_number_buffer::@18 __b18: - // [165] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 -- 0_neq_vbsz1_then_la1 + // [163] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 -- 0_neq_vbsz1_then_la1 lda.z padding cmp #0 bne __b10 jmp __b4 // printf_number_buffer::@10 __b10: - // [166] printf_padding::putc#1 = printf_number_buffer::putc#10 - // [167] printf_padding::length#1 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuz2 + // [164] printf_padding::putc#1 = printf_number_buffer::putc#10 + // [165] printf_padding::length#1 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuz2 lda.z padding sta.z printf_padding.length - // [168] call printf_padding - // [194] phi from printf_number_buffer::@10 to printf_padding [phi:printf_number_buffer::@10->printf_padding] + // [166] call printf_padding + // [192] phi from printf_number_buffer::@10 to printf_padding [phi:printf_number_buffer::@10->printf_padding] printf_padding_from___b10: - // [194] phi printf_padding::putc#7 = printf_padding::putc#1 [phi:printf_number_buffer::@10->printf_padding#0] -- register_copy - // [194] phi printf_padding::pad#7 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 + // [192] phi printf_padding::putc#7 = printf_padding::putc#1 [phi:printf_number_buffer::@10->printf_padding#0] -- register_copy + // [192] phi printf_padding::pad#7 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy + // [192] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy jsr printf_padding jmp __b4 // printf_number_buffer::@4 __b4: - // [169] if(0==printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 -- 0_eq_vbuz1_then_la1 + // [167] if(0==printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 -- 0_eq_vbuz1_then_la1 lda.z format_upper_case beq __b5 - // [170] phi from printf_number_buffer::@4 to printf_number_buffer::@11 [phi:printf_number_buffer::@4->printf_number_buffer::@11] + // [168] phi from printf_number_buffer::@4 to printf_number_buffer::@11 [phi:printf_number_buffer::@4->printf_number_buffer::@11] __b11_from___b4: jmp __b11 // printf_number_buffer::@11 __b11: - // [171] call strupr - // [202] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] + // [169] call strupr + // [200] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] strupr_from___b11: jsr strupr jmp __b5 // printf_number_buffer::@5 __b5: - // [172] printf_str::putc#0 = printf_number_buffer::putc#10 - // [173] call printf_str - // [72] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] + // [170] printf_str::putc#0 = printf_number_buffer::putc#10 + // [171] call printf_str + // [70] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] printf_str_from___b5: - // [72] phi printf_str::putc#12 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [72] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 + // [70] phi printf_str::putc#12 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy + // [70] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -5602,42 +5574,42 @@ printf_number_buffer: { jmp __b15 // printf_number_buffer::@15 __b15: - // [174] if(0==printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return -- 0_eq_vbuz1_then_la1 + // [172] if(0==printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return -- 0_eq_vbuz1_then_la1 lda.z format_justify_left beq __breturn jmp __b20 // printf_number_buffer::@20 __b20: - // [175] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return -- 0_neq_vbuz1_then_la1 + // [173] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return -- 0_neq_vbuz1_then_la1 lda.z format_zero_padding bne __breturn jmp __b19 // printf_number_buffer::@19 __b19: - // [176] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 -- 0_neq_vbsz1_then_la1 + // [174] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 -- 0_neq_vbsz1_then_la1 lda.z padding cmp #0 bne __b12 jmp __breturn // printf_number_buffer::@12 __b12: - // [177] printf_padding::putc#2 = printf_number_buffer::putc#10 - // [178] printf_padding::length#2 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuz2 + // [175] printf_padding::putc#2 = printf_number_buffer::putc#10 + // [176] printf_padding::length#2 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuz2 lda.z padding sta.z printf_padding.length - // [179] call printf_padding - // [194] phi from printf_number_buffer::@12 to printf_padding [phi:printf_number_buffer::@12->printf_padding] + // [177] call printf_padding + // [192] phi from printf_number_buffer::@12 to printf_padding [phi:printf_number_buffer::@12->printf_padding] printf_padding_from___b12: - // [194] phi printf_padding::putc#7 = printf_padding::putc#2 [phi:printf_number_buffer::@12->printf_padding#0] -- register_copy - // [194] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 + // [192] phi printf_padding::putc#7 = printf_padding::putc#2 [phi:printf_number_buffer::@12->printf_padding#0] -- register_copy + // [192] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy + // [192] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy jsr printf_padding jmp __breturn // printf_number_buffer::@return __breturn: - // [180] return + // [178] return rts // Outside Flow icall7: @@ -5658,15 +5630,15 @@ utoa_append: { .label value = 2 .label sub = 4 .label return = 2 - // [182] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] + // [180] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] __b1_from_utoa_append: - // [182] phi utoa_append::digit#2 = 0 [phi:utoa_append->utoa_append::@1#0] -- vbuxx=vbuc1 + // [180] phi utoa_append::digit#2 = 0 [phi:utoa_append->utoa_append::@1#0] -- vbuxx=vbuc1 ldx #0 - // [182] phi utoa_append::value#2 = utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy + // [180] phi utoa_append::value#2 = utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy jmp __b1 // utoa_append::@1 __b1: - // [183] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 + // [181] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 lda.z sub+1 cmp.z value+1 bne !+ @@ -5678,20 +5650,20 @@ utoa_append: { jmp __b3 // utoa_append::@3 __b3: - // [184] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [182] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda DIGITS,x ldy #0 sta (buffer),y jmp __breturn // utoa_append::@return __breturn: - // [185] return + // [183] return rts // utoa_append::@2 __b2: - // [186] utoa_append::digit#1 = ++ utoa_append::digit#2 -- vbuxx=_inc_vbuxx + // [184] utoa_append::digit#1 = ++ utoa_append::digit#2 -- vbuxx=_inc_vbuxx inx - // [187] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 + // [185] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 lda.z value sec sbc.z sub @@ -5699,10 +5671,10 @@ utoa_append: { lda.z value+1 sbc.z sub+1 sta.z value+1 - // [182] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] + // [180] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] __b1_from___b2: - // [182] phi utoa_append::digit#2 = utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy - // [182] phi utoa_append::value#2 = utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy + // [180] phi utoa_append::digit#2 = utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy + // [180] phi utoa_append::value#2 = utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy jmp __b1 } // strlen @@ -5712,14 +5684,14 @@ strlen: { .label len = 9 .label str = 6 .label return = 9 - // [189] phi from strlen to strlen::@1 [phi:strlen->strlen::@1] + // [187] phi from strlen to strlen::@1 [phi:strlen->strlen::@1] __b1_from_strlen: - // [189] phi strlen::len#2 = 0 [phi:strlen->strlen::@1#0] -- vwuz1=vwuc1 + // [187] phi strlen::len#2 = 0 [phi:strlen->strlen::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z len lda #>0 sta.z len+1 - // [189] phi strlen::str#3 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:strlen->strlen::@1#1] -- pbuz1=pbuc1 + // [187] phi strlen::str#3 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:strlen->strlen::@1#1] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -5727,7 +5699,7 @@ strlen: { jmp __b1 // strlen::@1 __b1: - // [190] if(0!=*strlen::str#3) goto strlen::@2 -- 0_neq__deref_pbuz1_then_la1 + // [188] if(0!=*strlen::str#3) goto strlen::@2 -- 0_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y cmp #0 @@ -5735,24 +5707,24 @@ strlen: { jmp __breturn // strlen::@return __breturn: - // [191] return + // [189] return rts // strlen::@2 __b2: - // [192] strlen::len#1 = ++ strlen::len#2 -- vwuz1=_inc_vwuz1 + // [190] strlen::len#1 = ++ strlen::len#2 -- vwuz1=_inc_vwuz1 inc.z len bne !+ inc.z len+1 !: - // [193] strlen::str#0 = ++ strlen::str#3 -- pbuz1=_inc_pbuz1 + // [191] strlen::str#0 = ++ strlen::str#3 -- pbuz1=_inc_pbuz1 inc.z str bne !+ inc.z str+1 !: - // [189] phi from strlen::@2 to strlen::@1 [phi:strlen::@2->strlen::@1] + // [187] phi from strlen::@2 to strlen::@1 [phi:strlen::@2->strlen::@1] __b1_from___b2: - // [189] phi strlen::len#2 = strlen::len#1 [phi:strlen::@2->strlen::@1#0] -- register_copy - // [189] phi strlen::str#3 = strlen::str#0 [phi:strlen::@2->strlen::@1#1] -- register_copy + // [187] phi strlen::len#2 = strlen::len#1 [phi:strlen::@2->strlen::@1#0] -- register_copy + // [187] phi strlen::str#3 = strlen::str#0 [phi:strlen::@2->strlen::@1#1] -- register_copy jmp __b1 } // printf_padding @@ -5763,40 +5735,40 @@ printf_padding: { .label putc = 2 .label length = $b .label pad = $d - // [195] phi from printf_padding to printf_padding::@1 [phi:printf_padding->printf_padding::@1] + // [193] phi from printf_padding to printf_padding::@1 [phi:printf_padding->printf_padding::@1] __b1_from_printf_padding: - // [195] phi printf_padding::i#2 = 0 [phi:printf_padding->printf_padding::@1#0] -- vbuz1=vbuc1 + // [193] phi printf_padding::i#2 = 0 [phi:printf_padding->printf_padding::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i jmp __b1 // printf_padding::@1 __b1: - // [196] if(printf_padding::i#2printf_padding::@1] + // [193] phi from printf_padding::@3 to printf_padding::@1 [phi:printf_padding::@3->printf_padding::@1] __b1_from___b3: - // [195] phi printf_padding::i#2 = printf_padding::i#1 [phi:printf_padding::@3->printf_padding::@1#0] -- register_copy + // [193] phi printf_padding::i#2 = printf_padding::i#1 [phi:printf_padding::@3->printf_padding::@1#0] -- register_copy jmp __b1 // Outside Flow icall8: @@ -5808,9 +5780,9 @@ printf_padding: { strupr: { .label str = printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS .label src = 4 - // [203] phi from strupr to strupr::@1 [phi:strupr->strupr::@1] + // [201] phi from strupr to strupr::@1 [phi:strupr->strupr::@1] __b1_from_strupr: - // [203] phi strupr::src#2 = strupr::str#0 [phi:strupr->strupr::@1#0] -- pbuz1=pbuc1 + // [201] phi strupr::src#2 = strupr::str#0 [phi:strupr->strupr::@1#0] -- pbuz1=pbuc1 lda #str @@ -5818,7 +5790,7 @@ strupr: { jmp __b1 // strupr::@1 __b1: - // [204] if(0!=*strupr::src#2) goto strupr::@2 -- 0_neq__deref_pbuz1_then_la1 + // [202] if(0!=*strupr::src#2) goto strupr::@2 -- 0_neq__deref_pbuz1_then_la1 ldy #0 lda (src),y cmp #0 @@ -5826,31 +5798,31 @@ strupr: { jmp __breturn // strupr::@return __breturn: - // [205] return + // [203] return rts // strupr::@2 __b2: - // [206] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 + // [204] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [207] call toupper + // [205] call toupper jsr toupper - // [208] toupper::return#3 = toupper::return#2 + // [206] toupper::return#3 = toupper::return#2 jmp __b3 // strupr::@3 __b3: - // [209] strupr::$0 = toupper::return#3 - // [210] *strupr::src#2 = strupr::$0 -- _deref_pbuz1=vbuaa + // [207] strupr::$0 = toupper::return#3 + // [208] *strupr::src#2 = strupr::$0 -- _deref_pbuz1=vbuaa ldy #0 sta (src),y - // [211] strupr::src#1 = ++ strupr::src#2 -- pbuz1=_inc_pbuz1 + // [209] strupr::src#1 = ++ strupr::src#2 -- pbuz1=_inc_pbuz1 inc.z src bne !+ inc.z src+1 !: - // [203] phi from strupr::@3 to strupr::@1 [phi:strupr::@3->strupr::@1] + // [201] phi from strupr::@3 to strupr::@1 [phi:strupr::@3->strupr::@1] __b1_from___b3: - // [203] phi strupr::src#2 = strupr::src#1 [phi:strupr::@3->strupr::@1#0] -- register_copy + // [201] phi strupr::src#2 = strupr::src#1 [phi:strupr::@3->strupr::@1#0] -- register_copy jmp __b1 } // toupper @@ -5858,31 +5830,31 @@ strupr: { // Returns uppercase equivalent to c, if such value exists, else c remains unchanged // __register(A) char toupper(__register(A) char ch) toupper: { - // [212] if(toupper::ch#0<'a') goto toupper::@return -- vbuaa_lt_vbuc1_then_la1 + // [210] if(toupper::ch#0<'a') goto toupper::@return -- vbuaa_lt_vbuc1_then_la1 cmp #'a' bcc __breturn_from_toupper jmp __b2 // toupper::@2 __b2: - // [213] if(toupper::ch#0<='z') goto toupper::@1 -- vbuaa_le_vbuc1_then_la1 + // [211] if(toupper::ch#0<='z') goto toupper::@1 -- vbuaa_le_vbuc1_then_la1 cmp #'z' bcc __b1 beq __b1 - // [215] phi from toupper toupper::@1 toupper::@2 to toupper::@return [phi:toupper/toupper::@1/toupper::@2->toupper::@return] + // [213] phi from toupper toupper::@1 toupper::@2 to toupper::@return [phi:toupper/toupper::@1/toupper::@2->toupper::@return] __breturn_from_toupper: __breturn_from___b1: __breturn_from___b2: - // [215] phi toupper::return#2 = toupper::ch#0 [phi:toupper/toupper::@1/toupper::@2->toupper::@return#0] -- register_copy + // [213] phi toupper::return#2 = toupper::ch#0 [phi:toupper/toupper::@1/toupper::@2->toupper::@return#0] -- register_copy jmp __breturn // toupper::@1 __b1: - // [214] toupper::return#0 = toupper::ch#0 + 'A'-'a' -- vbuaa=vbuaa_plus_vbuc1 + // [212] toupper::return#0 = toupper::ch#0 + 'A'-'a' -- vbuaa=vbuaa_plus_vbuc1 clc adc #'A'-'a' jmp __breturn_from___b1 // toupper::@return __breturn: - // [216] return + // [214] return rts } // File Data @@ -5900,6 +5872,12 @@ toupper: { BUF: .fill $14, 0 // Buffer used for stringified number being printed printf_buffer: .fill SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER, 0 + /// The capacity of the buffer (n passed to snprintf()) + /// Used to hold state while printing + __snprintf_capacity: .word 0 + // The number of chars that would have been filled when printing without capacity. Grows even after size>capacity. + /// Used to hold state while printing + __snprintf_size: .word 0 ASSEMBLER OPTIMIZATIONS Removing instruction jmp __init1 @@ -5984,10 +5962,6 @@ Removing instruction jmp __b3 Removing instruction jmp __b2 Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #>0 -Removing instruction lda #<0 -Removing instruction lda #>0 -Removing instruction lda #<0 -Removing instruction lda #>0 Removing instruction lda #>0 Removing instruction ldy #0 Removing instruction lda #0 @@ -6195,9 +6169,9 @@ __constant unsigned int RADIX_HEXADECIMAL_VALUES[] = { $1000, $100, $10 } __constant unsigned int RADIX_OCTAL_VALUES[] = { $8000, $1000, $200, $40, 8 } __constant char SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c __constant unsigned int STACK_BASE = $103 -__loadstore char *__snprintf_buffer // zp[2]:22 9.022222222222222 -__loadstore volatile unsigned int __snprintf_capacity // zp[2]:24 6.48936170212766 -__loadstore volatile unsigned int __snprintf_size // zp[2]:20 11.021739130434781 +__loadstore char *__snprintf_buffer // zp[2]:20 9.022222222222222 +__loadstore volatile unsigned int __snprintf_capacity = 0 // mem[2] 6.446808510638299 +__loadstore volatile unsigned int __snprintf_size = 0 // mem[2] 10.978260869565217 void __start() void main() __constant char main::s[$e] = "hello world! " @@ -6405,9 +6379,9 @@ zp[1]:11 [ printf_padding::length#6 printf_padding::length#1 printf_padding::len zp[1]:13 [ printf_padding::pad#7 ] zp[1]:8 [ printf_padding::i#2 printf_padding::i#1 ] reg byte a [ toupper::return#2 toupper::return#0 toupper::ch#0 ] -zp[2]:24 [ __snprintf_capacity ] -zp[2]:20 [ __snprintf_size ] -zp[2]:22 [ __snprintf_buffer ] +zp[2]:20 [ __snprintf_buffer ] +mem[2] [ __snprintf_size ] +mem[2] [ __snprintf_capacity ] reg byte a [ printf_str::c#1 ] reg byte a [ utoa::$4 ] reg byte x [ utoa::$11 ] @@ -6419,7 +6393,7 @@ mem[12] [ printf_buffer ] FINAL ASSEMBLER -Score: 9652 +Score: 9654 // File Comments // Tests snprintf function call rewriting @@ -6441,40 +6415,26 @@ Score: 9652 .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 .const STACK_BASE = $103 .const SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c - /// The capacity of the buffer (n passed to snprintf()) - /// Used to hold state while printing - .label __snprintf_capacity = $18 - // The number of chars that would have been filled when printing without capacity. Grows even after size>capacity. - /// Used to hold state while printing - .label __snprintf_size = $14 /// Current position in the buffer being filled ( initially *s passed to snprintf() /// Used to hold state while printing - .label __snprintf_buffer = $16 + .label __snprintf_buffer = $14 .label screen = $e .segment Code // __start __start: { // __start::__init1 - // volatile size_t __snprintf_capacity - // [1] __snprintf_capacity = 0 -- vwuz1=vwuc1 - lda #<0 - sta.z __snprintf_capacity - sta.z __snprintf_capacity+1 - // volatile size_t __snprintf_size - // [2] __snprintf_size = 0 -- vwuz1=vwuc1 - sta.z __snprintf_size - sta.z __snprintf_size+1 // char * __snprintf_buffer - // [3] __snprintf_buffer = (char *) 0 -- pbuz1=pbuc1 + // [1] __snprintf_buffer = (char *) 0 -- pbuz1=pbuc1 + lda #<0 sta.z __snprintf_buffer sta.z __snprintf_buffer+1 - // [4] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [5] call main - // [16] phi from __start::@1 to main [phi:__start::@1->main] + // [3] call main + // [14] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return - // [6] return + // [4] return rts } // snputc @@ -6484,57 +6444,57 @@ __start: { // void snputc(__register(X) char c) snputc: { .const OFFSET_STACK_C = 0 - // [7] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) -- vbuxx=_stackidxbyte_vbuc1 + // [5] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) -- vbuxx=_stackidxbyte_vbuc1 tsx lda STACK_BASE+OFFSET_STACK_C,x tax // ++__snprintf_size; - // [8] __snprintf_size = ++ __snprintf_size -- vwuz1=_inc_vwuz1 - inc.z __snprintf_size + // [6] __snprintf_size = ++ __snprintf_size -- vwum1=_inc_vwum1 + inc __snprintf_size bne !+ - inc.z __snprintf_size+1 + inc __snprintf_size+1 !: // if(__snprintf_size > __snprintf_capacity) - // [9] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 -- vwuz1_le_vwuz2_then_la1 - lda.z __snprintf_size+1 - cmp.z __snprintf_capacity+1 + // [7] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 -- vwum1_le_vwum2_then_la1 + lda __snprintf_size+1 + cmp __snprintf_capacity+1 bne !+ - lda.z __snprintf_size - cmp.z __snprintf_capacity + lda __snprintf_size + cmp __snprintf_capacity beq __b1 !: bcc __b1 // snputc::@return // } - // [10] return + // [8] return rts // snputc::@1 __b1: // if(__snprintf_size==__snprintf_capacity) - // [11] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 -- vwuz1_neq_vwuz2_then_la1 - lda.z __snprintf_size+1 - cmp.z __snprintf_capacity+1 + // [9] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 -- vwum1_neq_vwum2_then_la1 + lda __snprintf_size+1 + cmp __snprintf_capacity+1 bne __b2 - lda.z __snprintf_size - cmp.z __snprintf_capacity + lda __snprintf_size + cmp __snprintf_capacity bne __b2 - // [13] phi from snputc::@1 to snputc::@2 [phi:snputc::@1->snputc::@2] - // [13] phi snputc::c#2 = 0 [phi:snputc::@1->snputc::@2#0] -- vbuxx=vbuc1 + // [11] phi from snputc::@1 to snputc::@2 [phi:snputc::@1->snputc::@2] + // [11] phi snputc::c#2 = 0 [phi:snputc::@1->snputc::@2#0] -- vbuxx=vbuc1 ldx #0 - // [12] phi from snputc::@1 to snputc::@3 [phi:snputc::@1->snputc::@3] + // [10] phi from snputc::@1 to snputc::@3 [phi:snputc::@1->snputc::@3] // snputc::@3 - // [13] phi from snputc::@3 to snputc::@2 [phi:snputc::@3->snputc::@2] - // [13] phi snputc::c#2 = snputc::c#0 [phi:snputc::@3->snputc::@2#0] -- register_copy + // [11] phi from snputc::@3 to snputc::@2 [phi:snputc::@3->snputc::@2] + // [11] phi snputc::c#2 = snputc::c#0 [phi:snputc::@3->snputc::@2#0] -- register_copy // snputc::@2 __b2: // *(__snprintf_buffer++) = c - // [14] *__snprintf_buffer = snputc::c#2 -- _deref_pbuz1=vbuxx + // [12] *__snprintf_buffer = snputc::c#2 -- _deref_pbuz1=vbuxx // Append char txa ldy #0 sta (__snprintf_buffer),y // *(__snprintf_buffer++) = c; - // [15] __snprintf_buffer = ++ __snprintf_buffer -- pbuz1=_inc_pbuz1 + // [13] __snprintf_buffer = ++ __snprintf_buffer -- pbuz1=_inc_pbuz1 inc.z __snprintf_buffer bne !+ inc.z __snprintf_buffer+1 @@ -6544,25 +6504,25 @@ snputc: { // main main: { // snprintf(BUF, 20, "hello world! ") - // [17] call snprintf_init - // [67] phi from main to snprintf_init [phi:main->snprintf_init] - // [67] phi snprintf_init::n#4 = $14 [phi:main->snprintf_init#0] -- vwuz1=vbuc1 + // [15] call snprintf_init + // [65] phi from main to snprintf_init [phi:main->snprintf_init] + // [65] phi snprintf_init::n#4 = $14 [phi:main->snprintf_init#0] -- vwuz1=vbuc1 lda #<$14 sta.z snprintf_init.n lda #>$14 sta.z snprintf_init.n+1 jsr snprintf_init - // [18] phi from main to main::@1 [phi:main->main::@1] + // [16] phi from main to main::@1 [phi:main->main::@1] // main::@1 // snprintf(BUF, 20, "hello world! ") - // [19] call printf_str - // [72] phi from main::@1 to printf_str [phi:main::@1->printf_str] - // [72] phi printf_str::putc#12 = &snputc [phi:main::@1->printf_str#0] -- pprz1=pprc1 + // [17] call printf_str + // [70] phi from main::@1 to printf_str [phi:main::@1->printf_str] + // [70] phi printf_str::putc#12 = &snputc [phi:main::@1->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 + // [70] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -6570,72 +6530,72 @@ main: { jsr printf_str // main::@2 // snprintf(BUF, 20, "hello world! ") - // [20] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 + // [18] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 lda #0 pha - // [21] callexecute snputc -- call_vprc1 + // [19] callexecute snputc -- call_vprc1 jsr snputc // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla // print(BUF) - // [23] call print - // [81] phi from main::@2 to print [phi:main::@2->print] - // [81] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- pbuz1=pbuc1 + // [21] call print + // [79] phi from main::@2 to print [phi:main::@2->print] + // [79] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- pbuz1=pbuc1 lda #<$400 sta.z screen lda #>$400 sta.z screen+1 jsr print - // [24] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + // [22] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // snprintf(BUF, 20, "hello %s%c ", "world", '!') - // [25] call snprintf_init - // [67] phi from main::@3 to snprintf_init [phi:main::@3->snprintf_init] - // [67] phi snprintf_init::n#4 = $14 [phi:main::@3->snprintf_init#0] -- vwuz1=vbuc1 + // [23] call snprintf_init + // [65] phi from main::@3 to snprintf_init [phi:main::@3->snprintf_init] + // [65] phi snprintf_init::n#4 = $14 [phi:main::@3->snprintf_init#0] -- vwuz1=vbuc1 lda #<$14 sta.z snprintf_init.n lda #>$14 sta.z snprintf_init.n+1 jsr snprintf_init - // [26] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // [24] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // snprintf(BUF, 20, "hello %s%c ", "world", '!') - // [27] call printf_str - // [72] phi from main::@4 to printf_str [phi:main::@4->printf_str] - // [72] phi printf_str::putc#12 = &snputc [phi:main::@4->printf_str#0] -- pprz1=pprc1 + // [25] call printf_str + // [70] phi from main::@4 to printf_str [phi:main::@4->printf_str] + // [70] phi printf_str::putc#12 = &snputc [phi:main::@4->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- pbuz1=pbuc1 + // [70] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- pbuz1=pbuc1 lda #s1 sta.z printf_str.s+1 jsr printf_str - // [28] phi from main::@4 to main::@5 [phi:main::@4->main::@5] + // [26] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 // snprintf(BUF, 20, "hello %s%c ", "world", '!') - // [29] call printf_string - // [88] phi from main::@5 to printf_string [phi:main::@5->printf_string] + // [27] call printf_string + // [86] phi from main::@5 to printf_string [phi:main::@5->printf_string] jsr printf_string // main::@6 // snprintf(BUF, 20, "hello %s%c ", "world", '!') - // [30] stackpush(char) = '!' -- _stackpushbyte_=vbuc1 + // [28] stackpush(char) = '!' -- _stackpushbyte_=vbuc1 lda #'!' pha - // [31] callexecute snputc -- call_vprc1 + // [29] callexecute snputc -- call_vprc1 jsr snputc // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla - // [33] call printf_str - // [72] phi from main::@6 to printf_str [phi:main::@6->printf_str] - // [72] phi printf_str::putc#12 = &snputc [phi:main::@6->printf_str#0] -- pprz1=pprc1 + // [31] call printf_str + // [70] phi from main::@6 to printf_str [phi:main::@6->printf_str] + // [70] phi printf_str::putc#12 = &snputc [phi:main::@6->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 + // [70] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -6643,89 +6603,89 @@ main: { jsr printf_str // main::@7 // snprintf(BUF, 20, "hello %s%c ", "world", '!') - // [34] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 + // [32] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 lda #0 pha - // [35] callexecute snputc -- call_vprc1 + // [33] callexecute snputc -- call_vprc1 jsr snputc // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla // print(BUF) - // [37] call print - // [81] phi from main::@7 to print [phi:main::@7->print] - // [81] phi screen#25 = screen#1 [phi:main::@7->print#0] -- register_copy + // [35] call print + // [79] phi from main::@7 to print [phi:main::@7->print] + // [79] phi screen#25 = screen#1 [phi:main::@7->print#0] -- register_copy jsr print - // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] + // [36] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 // snprintf(BUF, 20, "hello %d+%x! ", 3,11) - // [39] call snprintf_init - // [67] phi from main::@8 to snprintf_init [phi:main::@8->snprintf_init] - // [67] phi snprintf_init::n#4 = $14 [phi:main::@8->snprintf_init#0] -- vwuz1=vbuc1 + // [37] call snprintf_init + // [65] phi from main::@8 to snprintf_init [phi:main::@8->snprintf_init] + // [65] phi snprintf_init::n#4 = $14 [phi:main::@8->snprintf_init#0] -- vwuz1=vbuc1 lda #<$14 sta.z snprintf_init.n lda #>$14 sta.z snprintf_init.n+1 jsr snprintf_init - // [40] phi from main::@8 to main::@9 [phi:main::@8->main::@9] + // [38] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 // snprintf(BUF, 20, "hello %d+%x! ", 3,11) - // [41] call printf_str - // [72] phi from main::@9 to printf_str [phi:main::@9->printf_str] - // [72] phi printf_str::putc#12 = &snputc [phi:main::@9->printf_str#0] -- pprz1=pprc1 + // [39] call printf_str + // [70] phi from main::@9 to printf_str [phi:main::@9->printf_str] + // [70] phi printf_str::putc#12 = &snputc [phi:main::@9->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 + // [70] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 lda #s1 sta.z printf_str.s+1 jsr printf_str - // [42] phi from main::@9 to main::@10 [phi:main::@9->main::@10] + // [40] phi from main::@9 to main::@10 [phi:main::@9->main::@10] // main::@10 // snprintf(BUF, 20, "hello %d+%x! ", 3,11) - // [43] call printf_sint - // [92] phi from main::@10 to printf_sint [phi:main::@10->printf_sint] - // [92] phi printf_sint::value#3 = 3 [phi:main::@10->printf_sint#0] -- vwsz1=vbsc1 + // [41] call printf_sint + // [90] phi from main::@10 to printf_sint [phi:main::@10->printf_sint] + // [90] phi printf_sint::value#3 = 3 [phi:main::@10->printf_sint#0] -- vwsz1=vbsc1 lda #<3 sta.z printf_sint.value lda #>3 sta.z printf_sint.value+1 jsr printf_sint - // [44] phi from main::@10 to main::@11 [phi:main::@10->main::@11] + // [42] phi from main::@10 to main::@11 [phi:main::@10->main::@11] // main::@11 // snprintf(BUF, 20, "hello %d+%x! ", 3,11) - // [45] call printf_str - // [72] phi from main::@11 to printf_str [phi:main::@11->printf_str] - // [72] phi printf_str::putc#12 = &snputc [phi:main::@11->printf_str#0] -- pprz1=pprc1 + // [43] call printf_str + // [70] phi from main::@11 to printf_str [phi:main::@11->printf_str] + // [70] phi printf_str::putc#12 = &snputc [phi:main::@11->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 + // [70] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 lda #s4 sta.z printf_str.s+1 jsr printf_str - // [46] phi from main::@11 to main::@12 [phi:main::@11->main::@12] + // [44] phi from main::@11 to main::@12 [phi:main::@11->main::@12] // main::@12 // snprintf(BUF, 20, "hello %d+%x! ", 3,11) - // [47] call printf_uint - // [103] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] + // [45] call printf_uint + // [101] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] jsr printf_uint - // [48] phi from main::@12 to main::@13 [phi:main::@12->main::@13] + // [46] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 // snprintf(BUF, 20, "hello %d+%x! ", 3,11) - // [49] call printf_str - // [72] phi from main::@13 to printf_str [phi:main::@13->printf_str] - // [72] phi printf_str::putc#12 = &snputc [phi:main::@13->printf_str#0] -- pprz1=pprc1 + // [47] call printf_str + // [70] phi from main::@13 to printf_str [phi:main::@13->printf_str] + // [70] phi printf_str::putc#12 = &snputc [phi:main::@13->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 + // [70] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 lda #s5 @@ -6733,67 +6693,67 @@ main: { jsr printf_str // main::@14 // snprintf(BUF, 20, "hello %d+%x! ", 3,11) - // [50] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 + // [48] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 lda #0 pha - // [51] callexecute snputc -- call_vprc1 + // [49] callexecute snputc -- call_vprc1 jsr snputc // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla // print(BUF) - // [53] call print - // [81] phi from main::@14 to print [phi:main::@14->print] - // [81] phi screen#25 = screen#1 [phi:main::@14->print#0] -- register_copy + // [51] call print + // [79] phi from main::@14 to print [phi:main::@14->print] + // [79] phi screen#25 = screen#1 [phi:main::@14->print#0] -- register_copy jsr print - // [54] phi from main::@14 to main::@15 [phi:main::@14->main::@15] + // [52] phi from main::@14 to main::@15 [phi:main::@14->main::@15] // main::@15 // snprintf(BUF, 6, "hi %d! ", 22222) - // [55] call snprintf_init - // [67] phi from main::@15 to snprintf_init [phi:main::@15->snprintf_init] - // [67] phi snprintf_init::n#4 = 6 [phi:main::@15->snprintf_init#0] -- vwuz1=vbuc1 + // [53] call snprintf_init + // [65] phi from main::@15 to snprintf_init [phi:main::@15->snprintf_init] + // [65] phi snprintf_init::n#4 = 6 [phi:main::@15->snprintf_init#0] -- vwuz1=vbuc1 lda #<6 sta.z snprintf_init.n lda #>6 sta.z snprintf_init.n+1 jsr snprintf_init - // [56] phi from main::@15 to main::@16 [phi:main::@15->main::@16] + // [54] phi from main::@15 to main::@16 [phi:main::@15->main::@16] // main::@16 // snprintf(BUF, 6, "hi %d! ", 22222) - // [57] call printf_str - // [72] phi from main::@16 to printf_str [phi:main::@16->printf_str] - // [72] phi printf_str::putc#12 = &snputc [phi:main::@16->printf_str#0] -- pprz1=pprc1 + // [55] call printf_str + // [70] phi from main::@16 to printf_str [phi:main::@16->printf_str] + // [70] phi printf_str::putc#12 = &snputc [phi:main::@16->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 + // [70] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 lda #s6 sta.z printf_str.s+1 jsr printf_str - // [58] phi from main::@16 to main::@17 [phi:main::@16->main::@17] + // [56] phi from main::@16 to main::@17 [phi:main::@16->main::@17] // main::@17 // snprintf(BUF, 6, "hi %d! ", 22222) - // [59] call printf_sint - // [92] phi from main::@17 to printf_sint [phi:main::@17->printf_sint] - // [92] phi printf_sint::value#3 = $56ce [phi:main::@17->printf_sint#0] -- vwsz1=vwsc1 + // [57] call printf_sint + // [90] phi from main::@17 to printf_sint [phi:main::@17->printf_sint] + // [90] phi printf_sint::value#3 = $56ce [phi:main::@17->printf_sint#0] -- vwsz1=vwsc1 lda #<$56ce sta.z printf_sint.value lda #>$56ce sta.z printf_sint.value+1 jsr printf_sint - // [60] phi from main::@17 to main::@18 [phi:main::@17->main::@18] + // [58] phi from main::@17 to main::@18 [phi:main::@17->main::@18] // main::@18 // snprintf(BUF, 6, "hi %d! ", 22222) - // [61] call printf_str - // [72] phi from main::@18 to printf_str [phi:main::@18->printf_str] - // [72] phi printf_str::putc#12 = &snputc [phi:main::@18->printf_str#0] -- pprz1=pprc1 + // [59] call printf_str + // [70] phi from main::@18 to printf_str [phi:main::@18->printf_str] + // [70] phi printf_str::putc#12 = &snputc [phi:main::@18->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- pbuz1=pbuc1 + // [70] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- pbuz1=pbuc1 lda #s5 @@ -6801,21 +6761,21 @@ main: { jsr printf_str // main::@19 // snprintf(BUF, 6, "hi %d! ", 22222) - // [62] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 + // [60] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 lda #0 pha - // [63] callexecute snputc -- call_vprc1 + // [61] callexecute snputc -- call_vprc1 jsr snputc // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla // print(BUF) - // [65] call print - // [81] phi from main::@19 to print [phi:main::@19->print] - // [81] phi screen#25 = screen#1 [phi:main::@19->print#0] -- register_copy + // [63] call print + // [79] phi from main::@19 to print [phi:main::@19->print] + // [79] phi screen#25 = screen#1 [phi:main::@19->print#0] -- register_copy jsr print // main::@return // } - // [66] return + // [64] return rts .segment Data s: .text "hello world! " @@ -6840,25 +6800,25 @@ main: { snprintf_init: { .label n = 2 // __snprintf_capacity = n - // [68] __snprintf_capacity = snprintf_init::n#4 -- vwuz1=vwuz2 + // [66] __snprintf_capacity = snprintf_init::n#4 -- vwum1=vwuz2 lda.z n - sta.z __snprintf_capacity + sta __snprintf_capacity lda.z n+1 - sta.z __snprintf_capacity+1 + sta __snprintf_capacity+1 // __snprintf_size = 0 - // [69] __snprintf_size = 0 -- vwuz1=vbuc1 + // [67] __snprintf_size = 0 -- vwum1=vbuc1 lda #<0 - sta.z __snprintf_size - sta.z __snprintf_size+1 + sta __snprintf_size + sta __snprintf_size+1 // __snprintf_buffer = s - // [70] __snprintf_buffer = BUF -- pbuz1=pbuc1 + // [68] __snprintf_buffer = BUF -- pbuz1=pbuc1 lda #BUF sta.z __snprintf_buffer+1 // snprintf_init::@return // } - // [71] return + // [69] return rts } // printf_str @@ -6867,32 +6827,32 @@ snprintf_init: { printf_str: { .label s = 6 .label putc = 2 - // [73] phi from printf_str printf_str::@2 to printf_str::@1 [phi:printf_str/printf_str::@2->printf_str::@1] - // [73] phi printf_str::s#11 = printf_str::s#12 [phi:printf_str/printf_str::@2->printf_str::@1#0] -- register_copy + // [71] phi from printf_str printf_str::@2 to printf_str::@1 [phi:printf_str/printf_str::@2->printf_str::@1] + // [71] phi printf_str::s#11 = printf_str::s#12 [phi:printf_str/printf_str::@2->printf_str::@1#0] -- register_copy // printf_str::@1 __b1: // while(c=*s++) - // [74] printf_str::c#1 = *printf_str::s#11 -- vbuaa=_deref_pbuz1 + // [72] printf_str::c#1 = *printf_str::s#11 -- vbuaa=_deref_pbuz1 ldy #0 lda (s),y - // [75] printf_str::s#0 = ++ printf_str::s#11 -- pbuz1=_inc_pbuz1 + // [73] printf_str::s#0 = ++ printf_str::s#11 -- pbuz1=_inc_pbuz1 inc.z s bne !+ inc.z s+1 !: - // [76] if(0!=printf_str::c#1) goto printf_str::@2 -- 0_neq_vbuaa_then_la1 + // [74] if(0!=printf_str::c#1) goto printf_str::@2 -- 0_neq_vbuaa_then_la1 cmp #0 bne __b2 // printf_str::@return // } - // [77] return + // [75] return rts // printf_str::@2 __b2: // putc(c) - // [78] stackpush(char) = printf_str::c#1 -- _stackpushbyte_=vbuaa + // [76] stackpush(char) = printf_str::c#1 -- _stackpushbyte_=vbuaa pha - // [79] callexecute *printf_str::putc#12 -- call__deref_pprz1 + // [77] callexecute *printf_str::putc#12 -- call__deref_pprz1 jsr icall6 // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla @@ -6905,9 +6865,9 @@ printf_str: { // void print(__zp(6) char *msg) print: { .label msg = 6 - // [82] phi from print to print::@1 [phi:print->print::@1] - // [82] phi screen#1 = screen#25 [phi:print->print::@1#0] -- register_copy - // [82] phi print::msg#5 = BUF [phi:print->print::@1#1] -- pbuz1=pbuc1 + // [80] phi from print to print::@1 [phi:print->print::@1] + // [80] phi screen#1 = screen#25 [phi:print->print::@1#0] -- register_copy + // [80] phi print::msg#5 = BUF [phi:print->print::@1#1] -- pbuz1=pbuc1 lda #BUF @@ -6915,36 +6875,36 @@ print: { // print::@1 __b1: // while(*msg) - // [83] if(0!=*print::msg#5) goto print::@2 -- 0_neq__deref_pbuz1_then_la1 + // [81] if(0!=*print::msg#5) goto print::@2 -- 0_neq__deref_pbuz1_then_la1 ldy #0 lda (msg),y cmp #0 bne __b2 // print::@return // } - // [84] return + // [82] return rts // print::@2 __b2: // *(screen++) = *(msg++) - // [85] *screen#1 = *print::msg#5 -- _deref_pbuz1=_deref_pbuz2 + // [83] *screen#1 = *print::msg#5 -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (msg),y sta (screen),y // *(screen++) = *(msg++); - // [86] screen#0 = ++ screen#1 -- pbuz1=_inc_pbuz1 + // [84] screen#0 = ++ screen#1 -- pbuz1=_inc_pbuz1 inc.z screen bne !+ inc.z screen+1 !: - // [87] print::msg#0 = ++ print::msg#5 -- pbuz1=_inc_pbuz1 + // [85] print::msg#0 = ++ print::msg#5 -- pbuz1=_inc_pbuz1 inc.z msg bne !+ inc.z msg+1 !: - // [82] phi from print::@2 to print::@1 [phi:print::@2->print::@1] - // [82] phi screen#1 = screen#0 [phi:print::@2->print::@1#0] -- register_copy - // [82] phi print::msg#5 = print::msg#0 [phi:print::@2->print::@1#1] -- register_copy + // [80] phi from print::@2 to print::@1 [phi:print::@2->print::@1] + // [80] phi screen#1 = screen#0 [phi:print::@2->print::@1#0] -- register_copy + // [80] phi print::msg#5 = print::msg#0 [phi:print::@2->print::@1#1] -- register_copy jmp __b1 } // printf_string @@ -6953,17 +6913,17 @@ print: { // void printf_string(void (*putc)(char), char *str, char format_min_length, char format_justify_left) printf_string: { .label putc = snputc - // [89] phi from printf_string to printf_string::@1 [phi:printf_string->printf_string::@1] + // [87] phi from printf_string to printf_string::@1 [phi:printf_string->printf_string::@1] // printf_string::@1 // printf_str(putc, str) - // [90] call printf_str - // [72] phi from printf_string::@1 to printf_str [phi:printf_string::@1->printf_str] - // [72] phi printf_str::putc#12 = printf_string::putc#0 [phi:printf_string::@1->printf_str#0] -- pprz1=pprc1 + // [88] call printf_str + // [70] phi from printf_string::@1 to printf_str [phi:printf_string::@1->printf_str] + // [70] phi printf_str::putc#12 = printf_string::putc#0 [phi:printf_string::@1->printf_str#0] -- pprz1=pprc1 lda #putc sta.z printf_str.putc+1 - // [72] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- pbuz1=pbuc1 + // [70] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- pbuz1=pbuc1 lda #main.str @@ -6971,7 +6931,7 @@ printf_string: { jsr printf_str // printf_string::@return // } - // [91] return + // [89] return rts } // printf_sint @@ -6980,21 +6940,21 @@ printf_string: { printf_sint: { .label value = 2 // printf_buffer.sign = 0 - // [93] *((char *)&printf_buffer) = 0 -- _deref_pbuc1=vbuc2 + // [91] *((char *)&printf_buffer) = 0 -- _deref_pbuc1=vbuc2 // Handle any sign lda #0 sta printf_buffer // if(value<0) - // [94] if(printf_sint::value#3<0) goto printf_sint::@1 -- vwsz1_lt_0_then_la1 + // [92] if(printf_sint::value#3<0) goto printf_sint::@1 -- vwsz1_lt_0_then_la1 lda.z value+1 bmi __b1 - // [97] phi from printf_sint printf_sint::@1 to printf_sint::@2 [phi:printf_sint/printf_sint::@1->printf_sint::@2] - // [97] phi printf_sint::value#5 = printf_sint::value#3 [phi:printf_sint/printf_sint::@1->printf_sint::@2#0] -- register_copy + // [95] phi from printf_sint printf_sint::@1 to printf_sint::@2 [phi:printf_sint/printf_sint::@1->printf_sint::@2] + // [95] phi printf_sint::value#5 = printf_sint::value#3 [phi:printf_sint/printf_sint::@1->printf_sint::@2#0] -- register_copy jmp __b2 // printf_sint::@1 __b1: // value = -value - // [95] printf_sint::value#0 = - printf_sint::value#3 -- vwsz1=_neg_vwsz1 + // [93] printf_sint::value#0 = - printf_sint::value#3 -- vwsz1=_neg_vwsz1 lda #0 sec sbc.z value @@ -7003,47 +6963,47 @@ printf_sint: { sbc.z value+1 sta.z value+1 // printf_buffer.sign = '-' - // [96] *((char *)&printf_buffer) = '-' -- _deref_pbuc1=vbuc2 + // [94] *((char *)&printf_buffer) = '-' -- _deref_pbuc1=vbuc2 lda #'-' sta printf_buffer // printf_sint::@2 __b2: // utoa(uvalue, printf_buffer.digits, format.radix) - // [98] utoa::value#1 = (unsigned int)printf_sint::value#5 - // [99] call utoa - // [109] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] - // [109] phi utoa::value#10 = utoa::value#1 [phi:printf_sint::@2->utoa#0] -- register_copy - // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- vbuxx=vbuc1 + // [96] utoa::value#1 = (unsigned int)printf_sint::value#5 + // [97] call utoa + // [107] phi from printf_sint::@2 to utoa [phi:printf_sint::@2->utoa] + // [107] phi utoa::value#10 = utoa::value#1 [phi:printf_sint::@2->utoa#0] -- register_copy + // [107] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@2->utoa#1] -- vbuxx=vbuc1 ldx #DECIMAL jsr utoa // printf_sint::@3 // printf_number_buffer(putc, printf_buffer, format) - // [100] printf_number_buffer::buffer_sign#0 = *((char *)&printf_buffer) -- vbuz1=_deref_pbuc1 + // [98] printf_number_buffer::buffer_sign#0 = *((char *)&printf_buffer) -- vbuz1=_deref_pbuc1 lda printf_buffer sta.z printf_number_buffer.buffer_sign - // [101] call printf_number_buffer + // [99] call printf_number_buffer // Print using format - // [140] phi from printf_sint::@3 to printf_number_buffer [phi:printf_sint::@3->printf_number_buffer] - // [140] phi printf_number_buffer::format_upper_case#10 = 0 [phi:printf_sint::@3->printf_number_buffer#0] -- vbuz1=vbuc1 + // [138] phi from printf_sint::@3 to printf_number_buffer [phi:printf_sint::@3->printf_number_buffer] + // [138] phi printf_number_buffer::format_upper_case#10 = 0 [phi:printf_sint::@3->printf_number_buffer#0] -- vbuz1=vbuc1 lda #0 sta.z printf_number_buffer.format_upper_case - // [140] phi printf_number_buffer::putc#10 = &snputc [phi:printf_sint::@3->printf_number_buffer#1] -- pprz1=pprc1 + // [138] phi printf_number_buffer::putc#10 = &snputc [phi:printf_sint::@3->printf_number_buffer#1] -- pprz1=pprc1 lda #snputc sta.z printf_number_buffer.putc+1 - // [140] phi printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#0 [phi:printf_sint::@3->printf_number_buffer#2] -- register_copy - // [140] phi printf_number_buffer::format_zero_padding#10 = 0 [phi:printf_sint::@3->printf_number_buffer#3] -- vbuz1=vbuc1 + // [138] phi printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#0 [phi:printf_sint::@3->printf_number_buffer#2] -- register_copy + // [138] phi printf_number_buffer::format_zero_padding#10 = 0 [phi:printf_sint::@3->printf_number_buffer#3] -- vbuz1=vbuc1 lda #0 sta.z printf_number_buffer.format_zero_padding - // [140] phi printf_number_buffer::format_justify_left#10 = 0 [phi:printf_sint::@3->printf_number_buffer#4] -- vbuz1=vbuc1 + // [138] phi printf_number_buffer::format_justify_left#10 = 0 [phi:printf_sint::@3->printf_number_buffer#4] -- vbuz1=vbuc1 sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#2 = 0 [phi:printf_sint::@3->printf_number_buffer#5] -- vbuxx=vbuc1 + // [138] phi printf_number_buffer::format_min_length#2 = 0 [phi:printf_sint::@3->printf_number_buffer#5] -- vbuxx=vbuc1 tax jsr printf_number_buffer // printf_sint::@return // } - // [102] return + // [100] return rts } // printf_uint @@ -7058,51 +7018,51 @@ printf_uint: { .label putc = snputc // printf_uint::@1 // printf_buffer.sign = format.sign_always?'+':0 - // [104] *((char *)&printf_buffer) = 0 -- _deref_pbuc1=vbuc2 + // [102] *((char *)&printf_buffer) = 0 -- _deref_pbuc1=vbuc2 // Handle any sign lda #0 sta printf_buffer // utoa(uvalue, printf_buffer.digits, format.radix) - // [105] call utoa + // [103] call utoa // Format number into buffer - // [109] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] - // [109] phi utoa::value#10 = printf_uint::uvalue#0 [phi:printf_uint::@1->utoa#0] -- vwuz1=vwuc1 + // [107] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] + // [107] phi utoa::value#10 = printf_uint::uvalue#0 [phi:printf_uint::@1->utoa#0] -- vwuz1=vwuc1 lda #uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- vbuxx=vbuc1 + // [107] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- vbuxx=vbuc1 ldx #HEXADECIMAL jsr utoa // printf_uint::@2 // printf_number_buffer(putc, printf_buffer, format) - // [106] printf_number_buffer::buffer_sign#1 = *((char *)&printf_buffer) -- vbuz1=_deref_pbuc1 + // [104] printf_number_buffer::buffer_sign#1 = *((char *)&printf_buffer) -- vbuz1=_deref_pbuc1 lda printf_buffer sta.z printf_number_buffer.buffer_sign - // [107] call printf_number_buffer + // [105] call printf_number_buffer // Print using format - // [140] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] - // [140] phi printf_number_buffer::format_upper_case#10 = printf_uint::format_upper_case#0 [phi:printf_uint::@2->printf_number_buffer#0] -- vbuz1=vbuc1 + // [138] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] + // [138] phi printf_number_buffer::format_upper_case#10 = printf_uint::format_upper_case#0 [phi:printf_uint::@2->printf_number_buffer#0] -- vbuz1=vbuc1 lda #format_upper_case sta.z printf_number_buffer.format_upper_case - // [140] phi printf_number_buffer::putc#10 = printf_uint::putc#0 [phi:printf_uint::@2->printf_number_buffer#1] -- pprz1=pprc1 + // [138] phi printf_number_buffer::putc#10 = printf_uint::putc#0 [phi:printf_uint::@2->printf_number_buffer#1] -- pprz1=pprc1 lda #putc sta.z printf_number_buffer.putc+1 - // [140] phi printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#1 [phi:printf_uint::@2->printf_number_buffer#2] -- register_copy - // [140] phi printf_number_buffer::format_zero_padding#10 = printf_uint::format_zero_padding#0 [phi:printf_uint::@2->printf_number_buffer#3] -- vbuz1=vbuc1 + // [138] phi printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#1 [phi:printf_uint::@2->printf_number_buffer#2] -- register_copy + // [138] phi printf_number_buffer::format_zero_padding#10 = printf_uint::format_zero_padding#0 [phi:printf_uint::@2->printf_number_buffer#3] -- vbuz1=vbuc1 lda #format_zero_padding sta.z printf_number_buffer.format_zero_padding - // [140] phi printf_number_buffer::format_justify_left#10 = printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 + // [138] phi printf_number_buffer::format_justify_left#10 = printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#2 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [138] phi printf_number_buffer::format_min_length#2 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer // printf_uint::@return // } - // [108] return + // [106] return rts } // utoa @@ -7120,130 +7080,130 @@ utoa: { .label max_digits = $11 .label digit_values = 6 // if(radix==DECIMAL) - // [110] if(utoa::radix#2==DECIMAL) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 + // [108] if(utoa::radix#2==DECIMAL) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 cpx #DECIMAL beq __b2 // utoa::@2 // if(radix==HEXADECIMAL) - // [111] if(utoa::radix#2==HEXADECIMAL) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 + // [109] if(utoa::radix#2==HEXADECIMAL) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 cpx #HEXADECIMAL beq __b3 // utoa::@3 // if(radix==OCTAL) - // [112] if(utoa::radix#2==OCTAL) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 + // [110] if(utoa::radix#2==OCTAL) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 cpx #OCTAL beq __b4 // utoa::@4 // if(radix==BINARY) - // [113] if(utoa::radix#2==BINARY) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 + // [111] if(utoa::radix#2==BINARY) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 cpx #BINARY beq __b5 // utoa::@5 // *buffer++ = 'e' - // [114] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS) = 'e' -- _deref_pbuc1=vbuc2 + // [112] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS) = 'e' -- _deref_pbuc1=vbuc2 // Unknown radix lda #'e' sta printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS // *buffer++ = 'r' - // [115] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1) = 'r' -- _deref_pbuc1=vbuc2 + // [113] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1) = 'r' -- _deref_pbuc1=vbuc2 lda #'r' sta printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1 - // [116] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2) = 'r' -- _deref_pbuc1=vbuc2 + // [114] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2) = 'r' -- _deref_pbuc1=vbuc2 sta printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2 // *buffer = 0 - // [117] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3) = 0 -- _deref_pbuc1=vbuc2 + // [115] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3) = 0 -- _deref_pbuc1=vbuc2 lda #0 sta printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3 // utoa::@return // } - // [118] return + // [116] return rts - // [119] phi from utoa to utoa::@1 [phi:utoa->utoa::@1] + // [117] phi from utoa to utoa::@1 [phi:utoa->utoa::@1] __b2: - // [119] phi utoa::digit_values#8 = RADIX_DECIMAL_VALUES [phi:utoa->utoa::@1#0] -- pwuz1=pwuc1 + // [117] phi utoa::digit_values#8 = RADIX_DECIMAL_VALUES [phi:utoa->utoa::@1#0] -- pwuz1=pwuc1 lda #RADIX_DECIMAL_VALUES sta.z digit_values+1 - // [119] phi utoa::max_digits#7 = 5 [phi:utoa->utoa::@1#1] -- vbuz1=vbuc1 + // [117] phi utoa::max_digits#7 = 5 [phi:utoa->utoa::@1#1] -- vbuz1=vbuc1 lda #5 sta.z max_digits jmp __b1 - // [119] phi from utoa::@2 to utoa::@1 [phi:utoa::@2->utoa::@1] + // [117] phi from utoa::@2 to utoa::@1 [phi:utoa::@2->utoa::@1] __b3: - // [119] phi utoa::digit_values#8 = RADIX_HEXADECIMAL_VALUES [phi:utoa::@2->utoa::@1#0] -- pwuz1=pwuc1 + // [117] phi utoa::digit_values#8 = RADIX_HEXADECIMAL_VALUES [phi:utoa::@2->utoa::@1#0] -- pwuz1=pwuc1 lda #RADIX_HEXADECIMAL_VALUES sta.z digit_values+1 - // [119] phi utoa::max_digits#7 = 4 [phi:utoa::@2->utoa::@1#1] -- vbuz1=vbuc1 + // [117] phi utoa::max_digits#7 = 4 [phi:utoa::@2->utoa::@1#1] -- vbuz1=vbuc1 lda #4 sta.z max_digits jmp __b1 - // [119] phi from utoa::@3 to utoa::@1 [phi:utoa::@3->utoa::@1] + // [117] phi from utoa::@3 to utoa::@1 [phi:utoa::@3->utoa::@1] __b4: - // [119] phi utoa::digit_values#8 = RADIX_OCTAL_VALUES [phi:utoa::@3->utoa::@1#0] -- pwuz1=pwuc1 + // [117] phi utoa::digit_values#8 = RADIX_OCTAL_VALUES [phi:utoa::@3->utoa::@1#0] -- pwuz1=pwuc1 lda #RADIX_OCTAL_VALUES sta.z digit_values+1 - // [119] phi utoa::max_digits#7 = 6 [phi:utoa::@3->utoa::@1#1] -- vbuz1=vbuc1 + // [117] phi utoa::max_digits#7 = 6 [phi:utoa::@3->utoa::@1#1] -- vbuz1=vbuc1 lda #6 sta.z max_digits jmp __b1 - // [119] phi from utoa::@4 to utoa::@1 [phi:utoa::@4->utoa::@1] + // [117] phi from utoa::@4 to utoa::@1 [phi:utoa::@4->utoa::@1] __b5: - // [119] phi utoa::digit_values#8 = RADIX_BINARY_VALUES [phi:utoa::@4->utoa::@1#0] -- pwuz1=pwuc1 + // [117] phi utoa::digit_values#8 = RADIX_BINARY_VALUES [phi:utoa::@4->utoa::@1#0] -- pwuz1=pwuc1 lda #RADIX_BINARY_VALUES sta.z digit_values+1 - // [119] phi utoa::max_digits#7 = $10 [phi:utoa::@4->utoa::@1#1] -- vbuz1=vbuc1 + // [117] phi utoa::max_digits#7 = $10 [phi:utoa::@4->utoa::@1#1] -- vbuz1=vbuc1 lda #$10 sta.z max_digits // utoa::@1 __b1: - // [120] phi from utoa::@1 to utoa::@6 [phi:utoa::@1->utoa::@6] - // [120] phi utoa::buffer#10 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:utoa::@1->utoa::@6#0] -- pbuz1=pbuc1 + // [118] phi from utoa::@1 to utoa::@6 [phi:utoa::@1->utoa::@6] + // [118] phi utoa::buffer#10 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:utoa::@1->utoa::@6#0] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS sta.z buffer+1 - // [120] phi utoa::started#2 = 0 [phi:utoa::@1->utoa::@6#1] -- vbuxx=vbuc1 + // [118] phi utoa::started#2 = 0 [phi:utoa::@1->utoa::@6#1] -- vbuxx=vbuc1 ldx #0 - // [120] phi utoa::value#3 = utoa::value#10 [phi:utoa::@1->utoa::@6#2] -- register_copy - // [120] phi utoa::digit#2 = 0 [phi:utoa::@1->utoa::@6#3] -- vbuz1=vbuc1 + // [118] phi utoa::value#3 = utoa::value#10 [phi:utoa::@1->utoa::@6#2] -- register_copy + // [118] phi utoa::digit#2 = 0 [phi:utoa::@1->utoa::@6#3] -- vbuz1=vbuc1 txa sta.z digit // utoa::@6 __b6: // max_digits-1 - // [121] utoa::$4 = utoa::max_digits#7 - 1 -- vbuaa=vbuz1_minus_1 + // [119] utoa::$4 = utoa::max_digits#7 - 1 -- vbuaa=vbuz1_minus_1 lda.z max_digits sec sbc #1 // for( char digit=0; digit= digit_value) - // [129] if(0!=utoa::started#2) goto utoa::@10 -- 0_neq_vbuxx_then_la1 + // [127] if(0!=utoa::started#2) goto utoa::@10 -- 0_neq_vbuxx_then_la1 cpx #0 bne __b10 // utoa::@12 - // [130] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@10 -- vwuz1_ge_vwuz2_then_la1 + // [128] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@10 -- vwuz1_ge_vwuz2_then_la1 cmp.z value+1 bne !+ lda.z digit_value @@ -7274,46 +7234,46 @@ utoa: { beq __b10 !: bcc __b10 - // [131] phi from utoa::@12 to utoa::@9 [phi:utoa::@12->utoa::@9] - // [131] phi utoa::buffer#15 = utoa::buffer#10 [phi:utoa::@12->utoa::@9#0] -- register_copy - // [131] phi utoa::started#4 = utoa::started#2 [phi:utoa::@12->utoa::@9#1] -- register_copy - // [131] phi utoa::value#7 = utoa::value#3 [phi:utoa::@12->utoa::@9#2] -- register_copy + // [129] phi from utoa::@12 to utoa::@9 [phi:utoa::@12->utoa::@9] + // [129] phi utoa::buffer#15 = utoa::buffer#10 [phi:utoa::@12->utoa::@9#0] -- register_copy + // [129] phi utoa::started#4 = utoa::started#2 [phi:utoa::@12->utoa::@9#1] -- register_copy + // [129] phi utoa::value#7 = utoa::value#3 [phi:utoa::@12->utoa::@9#2] -- register_copy // utoa::@9 __b9: // for( char digit=0; digitutoa::@6] - // [120] phi utoa::buffer#10 = utoa::buffer#15 [phi:utoa::@9->utoa::@6#0] -- register_copy - // [120] phi utoa::started#2 = utoa::started#4 [phi:utoa::@9->utoa::@6#1] -- register_copy - // [120] phi utoa::value#3 = utoa::value#7 [phi:utoa::@9->utoa::@6#2] -- register_copy - // [120] phi utoa::digit#2 = utoa::digit#1 [phi:utoa::@9->utoa::@6#3] -- register_copy + // [118] phi from utoa::@9 to utoa::@6 [phi:utoa::@9->utoa::@6] + // [118] phi utoa::buffer#10 = utoa::buffer#15 [phi:utoa::@9->utoa::@6#0] -- register_copy + // [118] phi utoa::started#2 = utoa::started#4 [phi:utoa::@9->utoa::@6#1] -- register_copy + // [118] phi utoa::value#3 = utoa::value#7 [phi:utoa::@9->utoa::@6#2] -- register_copy + // [118] phi utoa::digit#2 = utoa::digit#1 [phi:utoa::@9->utoa::@6#3] -- register_copy jmp __b6 // utoa::@10 __b10: // utoa_append(buffer++, value, digit_value) - // [133] utoa_append::buffer#0 = utoa::buffer#10 - // [134] utoa_append::value#0 = utoa::value#3 - // [135] utoa_append::sub#0 = utoa::digit_value#0 - // [136] call utoa_append - // [181] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] + // [131] utoa_append::buffer#0 = utoa::buffer#10 + // [132] utoa_append::value#0 = utoa::value#3 + // [133] utoa_append::sub#0 = utoa::digit_value#0 + // [134] call utoa_append + // [179] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] jsr utoa_append // utoa_append(buffer++, value, digit_value) - // [137] utoa_append::return#0 = utoa_append::value#2 + // [135] utoa_append::return#0 = utoa_append::value#2 // utoa::@11 // value = utoa_append(buffer++, value, digit_value) - // [138] utoa::value#0 = utoa_append::return#0 + // [136] utoa::value#0 = utoa_append::return#0 // value = utoa_append(buffer++, value, digit_value); - // [139] utoa::buffer#4 = ++ utoa::buffer#10 -- pbuz1=_inc_pbuz1 + // [137] utoa::buffer#4 = ++ utoa::buffer#10 -- pbuz1=_inc_pbuz1 inc.z buffer bne !+ inc.z buffer+1 !: - // [131] phi from utoa::@11 to utoa::@9 [phi:utoa::@11->utoa::@9] - // [131] phi utoa::buffer#15 = utoa::buffer#4 [phi:utoa::@11->utoa::@9#0] -- register_copy - // [131] phi utoa::started#4 = 1 [phi:utoa::@11->utoa::@9#1] -- vbuxx=vbuc1 + // [129] phi from utoa::@11 to utoa::@9 [phi:utoa::@11->utoa::@9] + // [129] phi utoa::buffer#15 = utoa::buffer#4 [phi:utoa::@11->utoa::@9#0] -- register_copy + // [129] phi utoa::started#4 = 1 [phi:utoa::@11->utoa::@9#1] -- vbuxx=vbuc1 ldx #1 - // [131] phi utoa::value#7 = utoa::value#0 [phi:utoa::@11->utoa::@9#2] -- register_copy + // [129] phi utoa::value#7 = utoa::value#0 [phi:utoa::@11->utoa::@9#2] -- register_copy jmp __b9 } // printf_number_buffer @@ -7329,67 +7289,67 @@ printf_number_buffer: { .label format_justify_left = $11 .label format_upper_case = $13 // if(format.min_length) - // [141] if(0==printf_number_buffer::format_min_length#2) goto printf_number_buffer::@1 -- 0_eq_vbuxx_then_la1 + // [139] if(0==printf_number_buffer::format_min_length#2) goto printf_number_buffer::@1 -- 0_eq_vbuxx_then_la1 cpx #0 beq __b6 - // [142] phi from printf_number_buffer to printf_number_buffer::@6 [phi:printf_number_buffer->printf_number_buffer::@6] + // [140] phi from printf_number_buffer to printf_number_buffer::@6 [phi:printf_number_buffer->printf_number_buffer::@6] // printf_number_buffer::@6 // strlen(buffer.digits) - // [143] call strlen - // [188] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] + // [141] call strlen + // [186] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] jsr strlen // strlen(buffer.digits) - // [144] strlen::return#2 = strlen::len#2 + // [142] strlen::return#2 = strlen::len#2 // printf_number_buffer::@14 - // [145] printf_number_buffer::$19 = strlen::return#2 + // [143] printf_number_buffer::$19 = strlen::return#2 // signed char len = (signed char)strlen(buffer.digits) - // [146] printf_number_buffer::len#0 = (signed char)printf_number_buffer::$19 -- vbsyy=_sbyte_vwuz1 + // [144] printf_number_buffer::len#0 = (signed char)printf_number_buffer::$19 -- vbsyy=_sbyte_vwuz1 // There is a minimum length - work out the padding ldy.z __19 // if(buffer.sign) - // [147] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 -- 0_eq_vbuz1_then_la1 + // [145] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 -- 0_eq_vbuz1_then_la1 lda.z buffer_sign beq __b13 // printf_number_buffer::@7 // len++; - // [148] printf_number_buffer::len#1 = ++ printf_number_buffer::len#0 -- vbsyy=_inc_vbsyy + // [146] printf_number_buffer::len#1 = ++ printf_number_buffer::len#0 -- vbsyy=_inc_vbsyy iny - // [149] phi from printf_number_buffer::@14 printf_number_buffer::@7 to printf_number_buffer::@13 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13] - // [149] phi printf_number_buffer::len#2 = printf_number_buffer::len#0 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13#0] -- register_copy + // [147] phi from printf_number_buffer::@14 printf_number_buffer::@7 to printf_number_buffer::@13 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13] + // [147] phi printf_number_buffer::len#2 = printf_number_buffer::len#0 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13#0] -- register_copy // printf_number_buffer::@13 __b13: // padding = (signed char)format.min_length - len - // [150] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#2 - printf_number_buffer::len#2 -- vbsz1=vbsxx_minus_vbsyy + // [148] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#2 - printf_number_buffer::len#2 -- vbsz1=vbsxx_minus_vbsyy txa sty.z $ff sec sbc.z $ff sta.z padding // if(padding<0) - // [151] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 -- vbsz1_ge_0_then_la1 + // [149] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 -- vbsz1_ge_0_then_la1 cmp #0 bpl __b1 - // [153] phi from printf_number_buffer printf_number_buffer::@13 to printf_number_buffer::@1 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1] + // [151] phi from printf_number_buffer printf_number_buffer::@13 to printf_number_buffer::@1 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1] __b6: - // [153] phi printf_number_buffer::padding#10 = 0 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1#0] -- vbsz1=vbsc1 + // [151] phi printf_number_buffer::padding#10 = 0 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1#0] -- vbsz1=vbsc1 lda #0 sta.z padding - // [152] phi from printf_number_buffer::@13 to printf_number_buffer::@21 [phi:printf_number_buffer::@13->printf_number_buffer::@21] + // [150] phi from printf_number_buffer::@13 to printf_number_buffer::@21 [phi:printf_number_buffer::@13->printf_number_buffer::@21] // printf_number_buffer::@21 - // [153] phi from printf_number_buffer::@21 to printf_number_buffer::@1 [phi:printf_number_buffer::@21->printf_number_buffer::@1] - // [153] phi printf_number_buffer::padding#10 = printf_number_buffer::padding#1 [phi:printf_number_buffer::@21->printf_number_buffer::@1#0] -- register_copy + // [151] phi from printf_number_buffer::@21 to printf_number_buffer::@1 [phi:printf_number_buffer::@21->printf_number_buffer::@1] + // [151] phi printf_number_buffer::padding#10 = printf_number_buffer::padding#1 [phi:printf_number_buffer::@21->printf_number_buffer::@1#0] -- register_copy // printf_number_buffer::@1 __b1: // if(!format.justify_left && !format.zero_padding && padding) - // [154] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 -- 0_neq_vbuz1_then_la1 + // [152] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 -- 0_neq_vbuz1_then_la1 lda.z format_justify_left bne __b2 // printf_number_buffer::@17 - // [155] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 -- 0_neq_vbuz1_then_la1 + // [153] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 -- 0_neq_vbuz1_then_la1 lda.z format_zero_padding bne __b2 // printf_number_buffer::@16 - // [156] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 -- 0_neq_vbsz1_then_la1 + // [154] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 -- 0_neq_vbsz1_then_la1 lda.z padding cmp #0 bne __b8 @@ -7397,40 +7357,40 @@ printf_number_buffer: { // printf_number_buffer::@8 __b8: // printf_padding(putc, ' ',(char)padding) - // [157] printf_padding::putc#0 = printf_number_buffer::putc#10 - // [158] printf_padding::length#0 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuz2 + // [155] printf_padding::putc#0 = printf_number_buffer::putc#10 + // [156] printf_padding::length#0 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuz2 lda.z padding sta.z printf_padding.length - // [159] call printf_padding - // [194] phi from printf_number_buffer::@8 to printf_padding [phi:printf_number_buffer::@8->printf_padding] - // [194] phi printf_padding::putc#7 = printf_padding::putc#0 [phi:printf_number_buffer::@8->printf_padding#0] -- register_copy - // [194] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 + // [157] call printf_padding + // [192] phi from printf_number_buffer::@8 to printf_padding [phi:printf_number_buffer::@8->printf_padding] + // [192] phi printf_padding::putc#7 = printf_padding::putc#0 [phi:printf_number_buffer::@8->printf_padding#0] -- register_copy + // [192] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy + // [192] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy jsr printf_padding // printf_number_buffer::@2 __b2: // if(buffer.sign) - // [160] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 -- 0_eq_vbuz1_then_la1 + // [158] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 -- 0_eq_vbuz1_then_la1 lda.z buffer_sign beq __b3 // printf_number_buffer::@9 // putc(buffer.sign) - // [161] stackpush(char) = printf_number_buffer::buffer_sign#10 -- _stackpushbyte_=vbuz1 + // [159] stackpush(char) = printf_number_buffer::buffer_sign#10 -- _stackpushbyte_=vbuz1 pha - // [162] callexecute *printf_number_buffer::putc#10 -- call__deref_pprz1 + // [160] callexecute *printf_number_buffer::putc#10 -- call__deref_pprz1 jsr icall7 // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla // printf_number_buffer::@3 __b3: // if(format.zero_padding && padding) - // [164] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 -- 0_eq_vbuz1_then_la1 + // [162] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 -- 0_eq_vbuz1_then_la1 lda.z format_zero_padding beq __b4 // printf_number_buffer::@18 - // [165] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 -- 0_neq_vbsz1_then_la1 + // [163] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 -- 0_neq_vbsz1_then_la1 lda.z padding cmp #0 bne __b10 @@ -7438,38 +7398,38 @@ printf_number_buffer: { // printf_number_buffer::@10 __b10: // printf_padding(putc, '0',(char)padding) - // [166] printf_padding::putc#1 = printf_number_buffer::putc#10 - // [167] printf_padding::length#1 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuz2 + // [164] printf_padding::putc#1 = printf_number_buffer::putc#10 + // [165] printf_padding::length#1 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuz2 lda.z padding sta.z printf_padding.length - // [168] call printf_padding - // [194] phi from printf_number_buffer::@10 to printf_padding [phi:printf_number_buffer::@10->printf_padding] - // [194] phi printf_padding::putc#7 = printf_padding::putc#1 [phi:printf_number_buffer::@10->printf_padding#0] -- register_copy - // [194] phi printf_padding::pad#7 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 + // [166] call printf_padding + // [192] phi from printf_number_buffer::@10 to printf_padding [phi:printf_number_buffer::@10->printf_padding] + // [192] phi printf_padding::putc#7 = printf_padding::putc#1 [phi:printf_number_buffer::@10->printf_padding#0] -- register_copy + // [192] phi printf_padding::pad#7 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy + // [192] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy jsr printf_padding // printf_number_buffer::@4 __b4: // if(format.upper_case) - // [169] if(0==printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 -- 0_eq_vbuz1_then_la1 + // [167] if(0==printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 -- 0_eq_vbuz1_then_la1 lda.z format_upper_case beq __b5 - // [170] phi from printf_number_buffer::@4 to printf_number_buffer::@11 [phi:printf_number_buffer::@4->printf_number_buffer::@11] + // [168] phi from printf_number_buffer::@4 to printf_number_buffer::@11 [phi:printf_number_buffer::@4->printf_number_buffer::@11] // printf_number_buffer::@11 // strupr(buffer.digits) - // [171] call strupr - // [202] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] + // [169] call strupr + // [200] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] jsr strupr // printf_number_buffer::@5 __b5: // printf_str(putc, buffer.digits) - // [172] printf_str::putc#0 = printf_number_buffer::putc#10 - // [173] call printf_str - // [72] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] - // [72] phi printf_str::putc#12 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [72] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 + // [170] printf_str::putc#0 = printf_number_buffer::putc#10 + // [171] call printf_str + // [70] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] + // [70] phi printf_str::putc#12 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy + // [70] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -7477,15 +7437,15 @@ printf_number_buffer: { jsr printf_str // printf_number_buffer::@15 // if(format.justify_left && !format.zero_padding && padding) - // [174] if(0==printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return -- 0_eq_vbuz1_then_la1 + // [172] if(0==printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return -- 0_eq_vbuz1_then_la1 lda.z format_justify_left beq __breturn // printf_number_buffer::@20 - // [175] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return -- 0_neq_vbuz1_then_la1 + // [173] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return -- 0_neq_vbuz1_then_la1 lda.z format_zero_padding bne __breturn // printf_number_buffer::@19 - // [176] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 -- 0_neq_vbsz1_then_la1 + // [174] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 -- 0_neq_vbsz1_then_la1 lda.z padding cmp #0 bne __b12 @@ -7493,22 +7453,22 @@ printf_number_buffer: { // printf_number_buffer::@12 __b12: // printf_padding(putc, ' ',(char)padding) - // [177] printf_padding::putc#2 = printf_number_buffer::putc#10 - // [178] printf_padding::length#2 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuz2 + // [175] printf_padding::putc#2 = printf_number_buffer::putc#10 + // [176] printf_padding::length#2 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuz2 lda.z padding sta.z printf_padding.length - // [179] call printf_padding - // [194] phi from printf_number_buffer::@12 to printf_padding [phi:printf_number_buffer::@12->printf_padding] - // [194] phi printf_padding::putc#7 = printf_padding::putc#2 [phi:printf_number_buffer::@12->printf_padding#0] -- register_copy - // [194] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 + // [177] call printf_padding + // [192] phi from printf_number_buffer::@12 to printf_padding [phi:printf_number_buffer::@12->printf_padding] + // [192] phi printf_padding::putc#7 = printf_padding::putc#2 [phi:printf_number_buffer::@12->printf_padding#0] -- register_copy + // [192] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [194] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy + // [192] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy jsr printf_padding // printf_number_buffer::@return __breturn: // } - // [180] return + // [178] return rts // Outside Flow icall7: @@ -7529,14 +7489,14 @@ utoa_append: { .label value = 2 .label sub = 4 .label return = 2 - // [182] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] - // [182] phi utoa_append::digit#2 = 0 [phi:utoa_append->utoa_append::@1#0] -- vbuxx=vbuc1 + // [180] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] + // [180] phi utoa_append::digit#2 = 0 [phi:utoa_append->utoa_append::@1#0] -- vbuxx=vbuc1 ldx #0 - // [182] phi utoa_append::value#2 = utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy + // [180] phi utoa_append::value#2 = utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy // utoa_append::@1 __b1: // while (value >= sub) - // [183] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 + // [181] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 lda.z sub+1 cmp.z value+1 bne !+ @@ -7547,21 +7507,21 @@ utoa_append: { bcc __b2 // utoa_append::@3 // *buffer = DIGITS[digit] - // [184] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [182] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda DIGITS,x ldy #0 sta (buffer),y // utoa_append::@return // } - // [185] return + // [183] return rts // utoa_append::@2 __b2: // digit++; - // [186] utoa_append::digit#1 = ++ utoa_append::digit#2 -- vbuxx=_inc_vbuxx + // [184] utoa_append::digit#1 = ++ utoa_append::digit#2 -- vbuxx=_inc_vbuxx inx // value -= sub - // [187] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 + // [185] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 lda.z value sec sbc.z sub @@ -7569,9 +7529,9 @@ utoa_append: { lda.z value+1 sbc.z sub+1 sta.z value+1 - // [182] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] - // [182] phi utoa_append::digit#2 = utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy - // [182] phi utoa_append::value#2 = utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy + // [180] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] + // [180] phi utoa_append::digit#2 = utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy + // [180] phi utoa_append::value#2 = utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy jmp __b1 } // strlen @@ -7581,12 +7541,12 @@ strlen: { .label len = 9 .label str = 6 .label return = 9 - // [189] phi from strlen to strlen::@1 [phi:strlen->strlen::@1] - // [189] phi strlen::len#2 = 0 [phi:strlen->strlen::@1#0] -- vwuz1=vwuc1 + // [187] phi from strlen to strlen::@1 [phi:strlen->strlen::@1] + // [187] phi strlen::len#2 = 0 [phi:strlen->strlen::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z len sta.z len+1 - // [189] phi strlen::str#3 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:strlen->strlen::@1#1] -- pbuz1=pbuc1 + // [187] phi strlen::str#3 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:strlen->strlen::@1#1] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -7594,32 +7554,32 @@ strlen: { // strlen::@1 __b1: // while(*str) - // [190] if(0!=*strlen::str#3) goto strlen::@2 -- 0_neq__deref_pbuz1_then_la1 + // [188] if(0!=*strlen::str#3) goto strlen::@2 -- 0_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y cmp #0 bne __b2 // strlen::@return // } - // [191] return + // [189] return rts // strlen::@2 __b2: // len++; - // [192] strlen::len#1 = ++ strlen::len#2 -- vwuz1=_inc_vwuz1 + // [190] strlen::len#1 = ++ strlen::len#2 -- vwuz1=_inc_vwuz1 inc.z len bne !+ inc.z len+1 !: // str++; - // [193] strlen::str#0 = ++ strlen::str#3 -- pbuz1=_inc_pbuz1 + // [191] strlen::str#0 = ++ strlen::str#3 -- pbuz1=_inc_pbuz1 inc.z str bne !+ inc.z str+1 !: - // [189] phi from strlen::@2 to strlen::@1 [phi:strlen::@2->strlen::@1] - // [189] phi strlen::len#2 = strlen::len#1 [phi:strlen::@2->strlen::@1#0] -- register_copy - // [189] phi strlen::str#3 = strlen::str#0 [phi:strlen::@2->strlen::@1#1] -- register_copy + // [187] phi from strlen::@2 to strlen::@1 [phi:strlen::@2->strlen::@1] + // [187] phi strlen::len#2 = strlen::len#1 [phi:strlen::@2->strlen::@1#0] -- register_copy + // [187] phi strlen::str#3 = strlen::str#0 [phi:strlen::@2->strlen::@1#1] -- register_copy jmp __b1 } // printf_padding @@ -7630,37 +7590,37 @@ printf_padding: { .label putc = 2 .label length = $b .label pad = $d - // [195] phi from printf_padding to printf_padding::@1 [phi:printf_padding->printf_padding::@1] - // [195] phi printf_padding::i#2 = 0 [phi:printf_padding->printf_padding::@1#0] -- vbuz1=vbuc1 + // [193] phi from printf_padding to printf_padding::@1 [phi:printf_padding->printf_padding::@1] + // [193] phi printf_padding::i#2 = 0 [phi:printf_padding->printf_padding::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i // printf_padding::@1 __b1: // for(char i=0;iprintf_padding::@1] - // [195] phi printf_padding::i#2 = printf_padding::i#1 [phi:printf_padding::@3->printf_padding::@1#0] -- register_copy + // [193] phi from printf_padding::@3 to printf_padding::@1 [phi:printf_padding::@3->printf_padding::@1] + // [193] phi printf_padding::i#2 = printf_padding::i#1 [phi:printf_padding::@3->printf_padding::@1#0] -- register_copy jmp __b1 // Outside Flow icall8: @@ -7672,8 +7632,8 @@ printf_padding: { strupr: { .label str = printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS .label src = 4 - // [203] phi from strupr to strupr::@1 [phi:strupr->strupr::@1] - // [203] phi strupr::src#2 = strupr::str#0 [phi:strupr->strupr::@1#0] -- pbuz1=pbuc1 + // [201] phi from strupr to strupr::@1 [phi:strupr->strupr::@1] + // [201] phi strupr::src#2 = strupr::str#0 [phi:strupr->strupr::@1#0] -- pbuz1=pbuc1 lda #str @@ -7681,38 +7641,38 @@ strupr: { // strupr::@1 __b1: // while(*src) - // [204] if(0!=*strupr::src#2) goto strupr::@2 -- 0_neq__deref_pbuz1_then_la1 + // [202] if(0!=*strupr::src#2) goto strupr::@2 -- 0_neq__deref_pbuz1_then_la1 ldy #0 lda (src),y cmp #0 bne __b2 // strupr::@return // } - // [205] return + // [203] return rts // strupr::@2 __b2: // toupper(*src) - // [206] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 + // [204] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [207] call toupper + // [205] call toupper jsr toupper - // [208] toupper::return#3 = toupper::return#2 + // [206] toupper::return#3 = toupper::return#2 // strupr::@3 - // [209] strupr::$0 = toupper::return#3 + // [207] strupr::$0 = toupper::return#3 // *src = toupper(*src) - // [210] *strupr::src#2 = strupr::$0 -- _deref_pbuz1=vbuaa + // [208] *strupr::src#2 = strupr::$0 -- _deref_pbuz1=vbuaa ldy #0 sta (src),y // src++; - // [211] strupr::src#1 = ++ strupr::src#2 -- pbuz1=_inc_pbuz1 + // [209] strupr::src#1 = ++ strupr::src#2 -- pbuz1=_inc_pbuz1 inc.z src bne !+ inc.z src+1 !: - // [203] phi from strupr::@3 to strupr::@1 [phi:strupr::@3->strupr::@1] - // [203] phi strupr::src#2 = strupr::src#1 [phi:strupr::@3->strupr::@1#0] -- register_copy + // [201] phi from strupr::@3 to strupr::@1 [phi:strupr::@3->strupr::@1] + // [201] phi strupr::src#2 = strupr::src#1 [phi:strupr::@3->strupr::@1#0] -- register_copy jmp __b1 } // toupper @@ -7721,27 +7681,27 @@ strupr: { // __register(A) char toupper(__register(A) char ch) toupper: { // if(ch>='a' && ch<='z') - // [212] if(toupper::ch#0<'a') goto toupper::@return -- vbuaa_lt_vbuc1_then_la1 + // [210] if(toupper::ch#0<'a') goto toupper::@return -- vbuaa_lt_vbuc1_then_la1 cmp #'a' bcc __breturn // toupper::@2 - // [213] if(toupper::ch#0<='z') goto toupper::@1 -- vbuaa_le_vbuc1_then_la1 + // [211] if(toupper::ch#0<='z') goto toupper::@1 -- vbuaa_le_vbuc1_then_la1 cmp #'z' bcc __b1 beq __b1 - // [215] phi from toupper toupper::@1 toupper::@2 to toupper::@return [phi:toupper/toupper::@1/toupper::@2->toupper::@return] - // [215] phi toupper::return#2 = toupper::ch#0 [phi:toupper/toupper::@1/toupper::@2->toupper::@return#0] -- register_copy + // [213] phi from toupper toupper::@1 toupper::@2 to toupper::@return [phi:toupper/toupper::@1/toupper::@2->toupper::@return] + // [213] phi toupper::return#2 = toupper::ch#0 [phi:toupper/toupper::@1/toupper::@2->toupper::@return#0] -- register_copy rts // toupper::@1 __b1: // return ch + ('A'-'a'); - // [214] toupper::return#0 = toupper::ch#0 + 'A'-'a' -- vbuaa=vbuaa_plus_vbuc1 + // [212] toupper::return#0 = toupper::ch#0 + 'A'-'a' -- vbuaa=vbuaa_plus_vbuc1 clc adc #'A'-'a' // toupper::@return __breturn: // } - // [216] return + // [214] return rts } // File Data @@ -7759,4 +7719,10 @@ toupper: { BUF: .fill $14, 0 // Buffer used for stringified number being printed printf_buffer: .fill SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER, 0 + /// The capacity of the buffer (n passed to snprintf()) + /// Used to hold state while printing + __snprintf_capacity: .word 0 + // The number of chars that would have been filled when printing without capacity. Grows even after size>capacity. + /// Used to hold state while printing + __snprintf_size: .word 0 diff --git a/src/test/ref/printf-17.sym b/src/test/ref/printf-17.sym index e904eeee7..e5231ac49 100644 --- a/src/test/ref/printf-17.sym +++ b/src/test/ref/printf-17.sym @@ -15,9 +15,9 @@ __constant unsigned int RADIX_HEXADECIMAL_VALUES[] = { $1000, $100, $10 } __constant unsigned int RADIX_OCTAL_VALUES[] = { $8000, $1000, $200, $40, 8 } __constant char SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c __constant unsigned int STACK_BASE = $103 -__loadstore char *__snprintf_buffer // zp[2]:22 9.022222222222222 -__loadstore volatile unsigned int __snprintf_capacity // zp[2]:24 6.48936170212766 -__loadstore volatile unsigned int __snprintf_size // zp[2]:20 11.021739130434781 +__loadstore char *__snprintf_buffer // zp[2]:20 9.022222222222222 +__loadstore volatile unsigned int __snprintf_capacity = 0 // mem[2] 6.446808510638299 +__loadstore volatile unsigned int __snprintf_size = 0 // mem[2] 10.978260869565217 void __start() void main() __constant char main::s[$e] = "hello world! " @@ -225,9 +225,9 @@ zp[1]:11 [ printf_padding::length#6 printf_padding::length#1 printf_padding::len zp[1]:13 [ printf_padding::pad#7 ] zp[1]:8 [ printf_padding::i#2 printf_padding::i#1 ] reg byte a [ toupper::return#2 toupper::return#0 toupper::ch#0 ] -zp[2]:24 [ __snprintf_capacity ] -zp[2]:20 [ __snprintf_size ] -zp[2]:22 [ __snprintf_buffer ] +zp[2]:20 [ __snprintf_buffer ] +mem[2] [ __snprintf_size ] +mem[2] [ __snprintf_capacity ] reg byte a [ printf_str::c#1 ] reg byte a [ utoa::$4 ] reg byte x [ utoa::$11 ] diff --git a/src/test/ref/printf-18.asm b/src/test/ref/printf-18.asm index 821a535b8..b899ebbd3 100644 --- a/src/test/ref/printf-18.asm +++ b/src/test/ref/printf-18.asm @@ -18,20 +18,14 @@ // The current cursor x-position .label conio_cursor_x = $12 // The current cursor y-position - .label conio_cursor_y = $15 + .label conio_cursor_y = $13 // The current text cursor line start - .label conio_line_text = $18 + .label conio_line_text = $16 // The current color cursor line start - .label conio_line_color = $1a - /// The capacity of the buffer (n passed to snprintf()) - /// Used to hold state while printing - .label __snprintf_capacity = $1c - // The number of chars that would have been filled when printing without capacity. Grows even after size>capacity. - /// Used to hold state while printing - .label __snprintf_size = $13 + .label conio_line_color = $18 /// Current position in the buffer being filled ( initially *s passed to snprintf() /// Used to hold state while printing - .label __snprintf_buffer = $16 + .label __snprintf_buffer = $14 .segment Code __start: { // __ma char conio_cursor_x = 0 @@ -49,14 +43,8 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // volatile size_t __snprintf_capacity - lda #<0 - sta.z __snprintf_capacity - sta.z __snprintf_capacity+1 - // volatile size_t __snprintf_size - sta.z __snprintf_size - sta.z __snprintf_size+1 // char * __snprintf_buffer + lda #<0 sta.z __snprintf_buffer sta.z __snprintf_buffer+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) @@ -74,16 +62,16 @@ snputc: { lda STACK_BASE+OFFSET_STACK_C,x tax // ++__snprintf_size; - inc.z __snprintf_size + inc __snprintf_size bne !+ - inc.z __snprintf_size+1 + inc __snprintf_size+1 !: // if(__snprintf_size > __snprintf_capacity) - lda.z __snprintf_size+1 - cmp.z __snprintf_capacity+1 + lda __snprintf_size+1 + cmp __snprintf_capacity+1 bne !+ - lda.z __snprintf_size - cmp.z __snprintf_capacity + lda __snprintf_size + cmp __snprintf_capacity beq __b1 !: bcc __b1 @@ -91,11 +79,11 @@ snputc: { rts __b1: // if(__snprintf_size==__snprintf_capacity) - lda.z __snprintf_size+1 - cmp.z __snprintf_capacity+1 + lda __snprintf_size+1 + cmp __snprintf_capacity+1 bne __b2 - lda.z __snprintf_size - cmp.z __snprintf_capacity + lda __snprintf_size + cmp __snprintf_capacity bne __b2 ldx #0 __b2: @@ -389,13 +377,13 @@ snprintf_init: { .label s = $a // __snprintf_capacity = n lda #<$14 - sta.z __snprintf_capacity + sta __snprintf_capacity lda #>$14 - sta.z __snprintf_capacity+1 + sta __snprintf_capacity+1 // __snprintf_size = 0 lda #<0 - sta.z __snprintf_size - sta.z __snprintf_size+1 + sta __snprintf_size + sta __snprintf_size+1 // __snprintf_buffer = s lda.z s sta.z __snprintf_buffer @@ -585,3 +573,9 @@ memset: { .segment Data BUF1: .fill $14, 0 BUF2: .fill $14, 0 + /// The capacity of the buffer (n passed to snprintf()) + /// Used to hold state while printing + __snprintf_capacity: .word 0 + // The number of chars that would have been filled when printing without capacity. Grows even after size>capacity. + /// Used to hold state while printing + __snprintf_size: .word 0 diff --git a/src/test/ref/printf-18.cfg b/src/test/ref/printf-18.cfg index 3a4e4c1eb..8d7b29d61 100644 --- a/src/test/ref/printf-18.cfg +++ b/src/test/ref/printf-18.cfg @@ -8,284 +8,282 @@ __start::__init1: scope:[__start] from __start [2] conio_cursor_y = 0 [3] conio_line_text = DEFAULT_SCREEN [4] conio_line_color = COLORRAM - [5] __snprintf_capacity = 0 - [6] __snprintf_size = 0 - [7] __snprintf_buffer = (char *) 0 - [8] call conio_c64_init + [5] __snprintf_buffer = (char *) 0 + [6] call conio_c64_init to:__start::@1 __start::@1: scope:[__start] from __start::__init1 - [9] phi() - [10] call main + [7] phi() + [8] call main to:__start::@return __start::@return: scope:[__start] from __start::@1 - [11] return + [9] return to:@return __stackcall void snputc(char c) snputc: scope:[snputc] from - [12] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) - [13] __snprintf_size = ++ __snprintf_size - [14] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 + [10] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) + [11] __snprintf_size = ++ __snprintf_size + [12] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 to:snputc::@return snputc::@return: scope:[snputc] from snputc snputc::@2 - [15] return + [13] return to:@return snputc::@1: scope:[snputc] from snputc - [16] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 + [14] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 to:snputc::@2 snputc::@3: scope:[snputc] from snputc::@1 - [17] phi() + [15] phi() to:snputc::@2 snputc::@2: scope:[snputc] from snputc::@1 snputc::@3 - [18] snputc::c#2 = phi( snputc::@3/snputc::c#0, snputc::@1/0 ) - [19] *__snprintf_buffer = snputc::c#2 - [20] __snprintf_buffer = ++ __snprintf_buffer + [16] snputc::c#2 = phi( snputc::@3/snputc::c#0, snputc::@1/0 ) + [17] *__snprintf_buffer = snputc::c#2 + [18] __snprintf_buffer = ++ __snprintf_buffer to:snputc::@return void conio_c64_init() conio_c64_init: scope:[conio_c64_init] from __start::__init1 - [21] conio_c64_init::line#0 = *conio_c64_init::BASIC_CURSOR_LINE - [22] if(conio_c64_init::line#0<$19) goto conio_c64_init::@2 + [19] conio_c64_init::line#0 = *conio_c64_init::BASIC_CURSOR_LINE + [20] if(conio_c64_init::line#0<$19) goto conio_c64_init::@2 to:conio_c64_init::@1 conio_c64_init::@2: scope:[conio_c64_init] from conio_c64_init - [23] phi() + [21] phi() to:conio_c64_init::@1 conio_c64_init::@1: scope:[conio_c64_init] from conio_c64_init conio_c64_init::@2 - [24] conio_c64_init::line#2 = phi( conio_c64_init::@2/conio_c64_init::line#0, conio_c64_init/$19-1 ) - [25] gotoxy::y#2 = conio_c64_init::line#2 - [26] call gotoxy + [22] conio_c64_init::line#2 = phi( conio_c64_init::@2/conio_c64_init::line#0, conio_c64_init/$19-1 ) + [23] gotoxy::y#2 = conio_c64_init::line#2 + [24] call gotoxy to:conio_c64_init::@return conio_c64_init::@return: scope:[conio_c64_init] from conio_c64_init::@1 - [27] return + [25] return to:@return __stackcall void cputc(char c) cputc: scope:[cputc] from - [28] cputc::c#0 = stackidx(char,cputc::OFFSET_STACK_C) - [29] if(cputc::c#0==' + [26] cputc::c#0 = stackidx(char,cputc::OFFSET_STACK_C) + [27] if(cputc::c#0==' ') goto cputc::@1 to:cputc::@2 cputc::@2: scope:[cputc] from cputc - [30] conio_line_text[conio_cursor_x] = cputc::c#0 - [31] conio_line_color[conio_cursor_x] = LIGHT_BLUE - [32] conio_cursor_x = ++ conio_cursor_x - [33] if(conio_cursor_x!=$28) goto cputc::@return + [28] conio_line_text[conio_cursor_x] = cputc::c#0 + [29] conio_line_color[conio_cursor_x] = LIGHT_BLUE + [30] conio_cursor_x = ++ conio_cursor_x + [31] if(conio_cursor_x!=$28) goto cputc::@return to:cputc::@3 cputc::@3: scope:[cputc] from cputc::@2 - [34] phi() - [35] call cputln + [32] phi() + [33] call cputln to:cputc::@return cputc::@return: scope:[cputc] from cputc::@1 cputc::@2 cputc::@3 - [36] return + [34] return to:@return cputc::@1: scope:[cputc] from cputc - [37] phi() - [38] call cputln + [35] phi() + [36] call cputln to:cputc::@return void main() main: scope:[main] from __start::@1 - [39] phi() - [40] call snprintf_init + [37] phi() + [38] call snprintf_init to:main::@1 main::@1: scope:[main] from main - [41] phi() - [42] call printf_str + [39] phi() + [40] call printf_str to:main::@2 main::@2: scope:[main] from main::@1 - [43] stackpush(char) = 0 - [44] callexecute snputc + [41] stackpush(char) = 0 + [42] callexecute snputc sideeffect stackpullpadding(1) - [46] call snprintf_init + [44] call snprintf_init to:main::@3 main::@3: scope:[main] from main::@2 - [47] phi() - [48] call printf_str + [45] phi() + [46] call printf_str to:main::@4 main::@4: scope:[main] from main::@3 - [49] phi() - [50] call printf_string + [47] phi() + [48] call printf_string to:main::@5 main::@5: scope:[main] from main::@4 - [51] stackpush(char) = '!' - [52] callexecute snputc + [49] stackpush(char) = '!' + [50] callexecute snputc sideeffect stackpullpadding(1) - [54] stackpush(char) = 0 - [55] callexecute snputc + [52] stackpush(char) = 0 + [53] callexecute snputc sideeffect stackpullpadding(1) - [57] call printf_str + [55] call printf_str to:main::@6 main::@6: scope:[main] from main::@5 - [58] phi() - [59] call printf_string + [56] phi() + [57] call printf_string to:main::@7 main::@7: scope:[main] from main::@6 - [60] phi() - [61] call printf_str + [58] phi() + [59] call printf_str to:main::@8 main::@8: scope:[main] from main::@7 - [62] phi() - [63] call printf_string + [60] phi() + [61] call printf_string to:main::@9 main::@9: scope:[main] from main::@8 - [64] phi() - [65] call printf_str + [62] phi() + [63] call printf_str to:main::@return main::@return: scope:[main] from main::@9 - [66] return + [64] return to:@return void gotoxy(char x , char y) gotoxy: scope:[gotoxy] from conio_c64_init::@1 - [67] if(gotoxy::y#2<$19+1) goto gotoxy::@3 + [65] if(gotoxy::y#2<$19+1) goto gotoxy::@3 to:gotoxy::@1 gotoxy::@3: scope:[gotoxy] from gotoxy - [68] phi() + [66] phi() to:gotoxy::@1 gotoxy::@1: scope:[gotoxy] from gotoxy gotoxy::@3 - [69] gotoxy::y#4 = phi( gotoxy::@3/gotoxy::y#2, gotoxy/0 ) + [67] gotoxy::y#4 = phi( gotoxy::@3/gotoxy::y#2, gotoxy/0 ) to:gotoxy::@2 gotoxy::@2: scope:[gotoxy] from gotoxy::@1 - [70] conio_cursor_x = gotoxy::x#2 - [71] conio_cursor_y = gotoxy::y#4 - [72] gotoxy::$7 = (unsigned int)gotoxy::y#4 - [73] gotoxy::$8 = gotoxy::$7 << 2 - [74] gotoxy::$9 = gotoxy::$8 + gotoxy::$7 - [75] gotoxy::line_offset#0 = gotoxy::$9 << 3 - [76] gotoxy::$5 = DEFAULT_SCREEN + gotoxy::line_offset#0 - [77] conio_line_text = gotoxy::$5 - [78] gotoxy::$6 = COLORRAM + gotoxy::line_offset#0 - [79] conio_line_color = gotoxy::$6 + [68] conio_cursor_x = gotoxy::x#2 + [69] conio_cursor_y = gotoxy::y#4 + [70] gotoxy::$7 = (unsigned int)gotoxy::y#4 + [71] gotoxy::$8 = gotoxy::$7 << 2 + [72] gotoxy::$9 = gotoxy::$8 + gotoxy::$7 + [73] gotoxy::line_offset#0 = gotoxy::$9 << 3 + [74] gotoxy::$5 = DEFAULT_SCREEN + gotoxy::line_offset#0 + [75] conio_line_text = gotoxy::$5 + [76] gotoxy::$6 = COLORRAM + gotoxy::line_offset#0 + [77] conio_line_color = gotoxy::$6 to:gotoxy::@return gotoxy::@return: scope:[gotoxy] from gotoxy::@2 - [80] return + [78] return to:@return void cputln() cputln: scope:[cputln] from cputc::@1 cputc::@3 - [81] conio_line_text = conio_line_text + $28 - [82] conio_line_color = conio_line_color + $28 - [83] conio_cursor_x = 0 - [84] conio_cursor_y = ++ conio_cursor_y - [85] call cscroll + [79] conio_line_text = conio_line_text + $28 + [80] conio_line_color = conio_line_color + $28 + [81] conio_cursor_x = 0 + [82] conio_cursor_y = ++ conio_cursor_y + [83] call cscroll to:cputln::@return cputln::@return: scope:[cputln] from cputln - [86] return + [84] return to:@return void snprintf_init(char *s , unsigned int n) snprintf_init: scope:[snprintf_init] from main main::@2 - [87] snprintf_init::s#2 = phi( main/BUF1, main::@2/BUF2 ) - [88] __snprintf_capacity = $14 - [89] __snprintf_size = 0 - [90] __snprintf_buffer = snprintf_init::s#2 + [85] snprintf_init::s#2 = phi( main/BUF1, main::@2/BUF2 ) + [86] __snprintf_capacity = $14 + [87] __snprintf_size = 0 + [88] __snprintf_buffer = snprintf_init::s#2 to:snprintf_init::@return snprintf_init::@return: scope:[snprintf_init] from snprintf_init - [91] return + [89] return to:@return void printf_str(void (*putc)(char) , const char *s) printf_str: scope:[printf_str] from main::@1 main::@3 main::@5 main::@7 main::@9 printf_string::@1 - [92] printf_str::putc#8 = phi( main::@1/&snputc, main::@3/&snputc, main::@5/&cputc, main::@7/&cputc, main::@9/&cputc, printf_string::@1/printf_str::putc#0 ) - [92] printf_str::s#8 = phi( main::@1/main::s, main::@3/main::s1, main::@5/main::s2, main::@7/main::s3, main::@9/main::s2, printf_string::@1/printf_str::s#1 ) + [90] printf_str::putc#8 = phi( main::@1/&snputc, main::@3/&snputc, main::@5/&cputc, main::@7/&cputc, main::@9/&cputc, printf_string::@1/printf_str::putc#0 ) + [90] printf_str::s#8 = phi( main::@1/main::s, main::@3/main::s1, main::@5/main::s2, main::@7/main::s3, main::@9/main::s2, printf_string::@1/printf_str::s#1 ) to:printf_str::@1 printf_str::@1: scope:[printf_str] from printf_str printf_str::@2 - [93] printf_str::s#7 = phi( printf_str/printf_str::s#8, printf_str::@2/printf_str::s#0 ) - [94] printf_str::c#1 = *printf_str::s#7 - [95] printf_str::s#0 = ++ printf_str::s#7 - [96] if(0!=printf_str::c#1) goto printf_str::@2 + [91] printf_str::s#7 = phi( printf_str/printf_str::s#8, printf_str::@2/printf_str::s#0 ) + [92] printf_str::c#1 = *printf_str::s#7 + [93] printf_str::s#0 = ++ printf_str::s#7 + [94] if(0!=printf_str::c#1) goto printf_str::@2 to:printf_str::@return printf_str::@return: scope:[printf_str] from printf_str::@1 - [97] return + [95] return to:@return printf_str::@2: scope:[printf_str] from printf_str::@1 - [98] stackpush(char) = printf_str::c#1 - [99] callexecute *printf_str::putc#8 + [96] stackpush(char) = printf_str::c#1 + [97] callexecute *printf_str::putc#8 sideeffect stackpullpadding(1) to:printf_str::@1 void printf_string(void (*putc)(char) , char *str , char format_min_length , char format_justify_left) printf_string: scope:[printf_string] from main::@4 main::@6 main::@8 - [101] printf_string::putc#10 = phi( main::@4/&snputc, main::@6/&cputc, main::@8/&cputc ) - [101] printf_string::str#10 = phi( main::@4/main::str, main::@6/BUF1, main::@8/BUF2 ) + [99] printf_string::putc#10 = phi( main::@4/&snputc, main::@6/&cputc, main::@8/&cputc ) + [99] printf_string::str#10 = phi( main::@4/main::str, main::@6/BUF1, main::@8/BUF2 ) to:printf_string::@1 printf_string::@1: scope:[printf_string] from printf_string - [102] printf_str::putc#0 = printf_string::putc#10 - [103] printf_str::s#1 = printf_string::str#10 - [104] call printf_str + [100] printf_str::putc#0 = printf_string::putc#10 + [101] printf_str::s#1 = printf_string::str#10 + [102] call printf_str to:printf_string::@return printf_string::@return: scope:[printf_string] from printf_string::@1 - [105] return + [103] return to:@return void cscroll() cscroll: scope:[cscroll] from cputln - [106] if(conio_cursor_y!=$19) goto cscroll::@return + [104] if(conio_cursor_y!=$19) goto cscroll::@return to:cscroll::@1 cscroll::@1: scope:[cscroll] from cscroll - [107] phi() - [108] call memcpy + [105] phi() + [106] call memcpy to:cscroll::@2 cscroll::@2: scope:[cscroll] from cscroll::@1 - [109] phi() - [110] call memcpy + [107] phi() + [108] call memcpy to:cscroll::@3 cscroll::@3: scope:[cscroll] from cscroll::@2 - [111] phi() - [112] call memset + [109] phi() + [110] call memset to:cscroll::@4 cscroll::@4: scope:[cscroll] from cscroll::@3 - [113] phi() - [114] call memset + [111] phi() + [112] call memset to:cscroll::@5 cscroll::@5: scope:[cscroll] from cscroll::@4 - [115] conio_line_text = conio_line_text - $28 - [116] conio_line_color = conio_line_color - $28 - [117] conio_cursor_y = -- conio_cursor_y + [113] conio_line_text = conio_line_text - $28 + [114] conio_line_color = conio_line_color - $28 + [115] conio_cursor_y = -- conio_cursor_y to:cscroll::@return cscroll::@return: scope:[cscroll] from cscroll cscroll::@5 - [118] return + [116] return to:@return void * memcpy(void *destination , void *source , unsigned int num) memcpy: scope:[memcpy] from cscroll::@1 cscroll::@2 - [119] memcpy::destination#2 = phi( cscroll::@1/(void *)DEFAULT_SCREEN, cscroll::@2/(void *)COLORRAM ) - [119] memcpy::source#2 = phi( cscroll::@1/(void *)DEFAULT_SCREEN+$28, cscroll::@2/(void *)COLORRAM+$28 ) - [120] memcpy::src_end#0 = (char *)memcpy::source#2 + (unsigned int)$19*$28-$28 - [121] memcpy::src#4 = (char *)memcpy::source#2 - [122] memcpy::dst#4 = (char *)memcpy::destination#2 + [117] memcpy::destination#2 = phi( cscroll::@1/(void *)DEFAULT_SCREEN, cscroll::@2/(void *)COLORRAM ) + [117] memcpy::source#2 = phi( cscroll::@1/(void *)DEFAULT_SCREEN+$28, cscroll::@2/(void *)COLORRAM+$28 ) + [118] memcpy::src_end#0 = (char *)memcpy::source#2 + (unsigned int)$19*$28-$28 + [119] memcpy::src#4 = (char *)memcpy::source#2 + [120] memcpy::dst#4 = (char *)memcpy::destination#2 to:memcpy::@1 memcpy::@1: scope:[memcpy] from memcpy memcpy::@2 - [123] memcpy::dst#2 = phi( memcpy/memcpy::dst#4, memcpy::@2/memcpy::dst#1 ) - [123] memcpy::src#2 = phi( memcpy/memcpy::src#4, memcpy::@2/memcpy::src#1 ) - [124] if(memcpy::src#2!=memcpy::src_end#0) goto memcpy::@2 + [121] memcpy::dst#2 = phi( memcpy/memcpy::dst#4, memcpy::@2/memcpy::dst#1 ) + [121] memcpy::src#2 = phi( memcpy/memcpy::src#4, memcpy::@2/memcpy::src#1 ) + [122] if(memcpy::src#2!=memcpy::src_end#0) goto memcpy::@2 to:memcpy::@return memcpy::@return: scope:[memcpy] from memcpy::@1 - [125] return + [123] return to:@return memcpy::@2: scope:[memcpy] from memcpy::@1 - [126] *memcpy::dst#2 = *memcpy::src#2 - [127] memcpy::dst#1 = ++ memcpy::dst#2 - [128] memcpy::src#1 = ++ memcpy::src#2 + [124] *memcpy::dst#2 = *memcpy::src#2 + [125] memcpy::dst#1 = ++ memcpy::dst#2 + [126] memcpy::src#1 = ++ memcpy::src#2 to:memcpy::@1 void * memset(void *str , char c , unsigned int num) memset: scope:[memset] from cscroll::@3 cscroll::@4 - [129] memset::c#4 = phi( cscroll::@3/' ', cscroll::@4/LIGHT_BLUE ) - [129] memset::str#3 = phi( cscroll::@3/(void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28, cscroll::@4/(void *)COLORRAM+(unsigned int)$19*$28-$28 ) + [127] memset::c#4 = phi( cscroll::@3/' ', cscroll::@4/LIGHT_BLUE ) + [127] memset::str#3 = phi( cscroll::@3/(void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28, cscroll::@4/(void *)COLORRAM+(unsigned int)$19*$28-$28 ) to:memset::@1 memset::@1: scope:[memset] from memset - [130] memset::end#0 = (char *)memset::str#3 + $28 - [131] memset::dst#4 = (char *)memset::str#3 + [128] memset::end#0 = (char *)memset::str#3 + $28 + [129] memset::dst#4 = (char *)memset::str#3 to:memset::@2 memset::@2: scope:[memset] from memset::@1 memset::@3 - [132] memset::dst#2 = phi( memset::@1/memset::dst#4, memset::@3/memset::dst#1 ) - [133] if(memset::dst#2!=memset::end#0) goto memset::@3 + [130] memset::dst#2 = phi( memset::@1/memset::dst#4, memset::@3/memset::dst#1 ) + [131] if(memset::dst#2!=memset::end#0) goto memset::@3 to:memset::@return memset::@return: scope:[memset] from memset::@2 - [134] return + [132] return to:@return memset::@3: scope:[memset] from memset::@2 - [135] *memset::dst#2 = memset::c#4 - [136] memset::dst#1 = ++ memset::dst#2 + [133] *memset::dst#2 = memset::c#4 + [134] memset::dst#1 = ++ memset::dst#2 to:memset::@2 diff --git a/src/test/ref/printf-18.log b/src/test/ref/printf-18.log index ef837a417..75b5bf0dc 100644 --- a/src/test/ref/printf-18.log +++ b/src/test/ref/printf-18.log @@ -588,8 +588,6 @@ __start::__init1: scope:[__start] from __start conio_line_color = COLORRAM conio_textcolor = LIGHT_BLUE conio_scroll_enable = 1 - __snprintf_capacity = 0 - __snprintf_size = 0 __snprintf_buffer = (char *) 0 call conio_c64_init to:__start::@2 @@ -616,8 +614,8 @@ __constant char RADIX::HEXADECIMAL = $10 __constant char RADIX::OCTAL = 8 __constant unsigned int STACK_BASE = $103 __loadstore char *__snprintf_buffer -__loadstore volatile unsigned int __snprintf_capacity -__loadstore volatile unsigned int __snprintf_size +__loadstore volatile unsigned int __snprintf_capacity = 0 +__loadstore volatile unsigned int __snprintf_size = 0 void __start() void conio_c64_init() bool conio_c64_init::$0 @@ -1268,8 +1266,8 @@ Identical Phi Values gotoxy::x#3 gotoxy::x#2 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition printf_string::$1 [91] if(0==printf_string::format_justify_left#10) goto printf_string::@11 Simple Condition printf_string::$16 [104] if(0!=printf_string::format_justify_left#10) goto printf_string::@12 -Simple Condition printf_string::$17 [156] if(0!=printf_string::padding#3) goto printf_string::@5 -Simple Condition printf_string::$18 [158] if(0!=printf_string::padding#3) goto printf_string::@6 +Simple Condition printf_string::$17 [154] if(0!=printf_string::padding#3) goto printf_string::@5 +Simple Condition printf_string::$18 [156] if(0!=printf_string::padding#3) goto printf_string::@6 Successful SSA optimization Pass2ConditionalJumpSimplification Negating conditional jump and destination [91] if(0!=printf_string::format_justify_left#10) goto printf_string::@2 Negating conditional jump and destination [104] if(0==printf_string::format_justify_left#10) goto printf_string::@return @@ -1458,7 +1456,7 @@ Successful SSA optimization Pass2ConstantRValueConsolidation Constant printf_padding::length#0 = (char)0 Successful SSA optimization Pass2ConstantIdentification if() condition always false - eliminating [69] if(printf_padding::i#2capacity. - /// Used to hold state while printing - .label __snprintf_size = $13 + .label conio_line_color = $18 /// Current position in the buffer being filled ( initially *s passed to snprintf() /// Used to hold state while printing - .label __snprintf_buffer = $16 + .label __snprintf_buffer = $14 .segment Code // __start __start: { @@ -2374,36 +2358,26 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // [5] __snprintf_capacity = 0 -- vwuz1=vwuc1 - lda #<0 - sta.z __snprintf_capacity - lda #>0 - sta.z __snprintf_capacity+1 - // [6] __snprintf_size = 0 -- vwuz1=vwuc1 - lda #<0 - sta.z __snprintf_size - lda #>0 - sta.z __snprintf_size+1 - // [7] __snprintf_buffer = (char *) 0 -- pbuz1=pbuc1 + // [5] __snprintf_buffer = (char *) 0 -- pbuz1=pbuc1 lda #<0 sta.z __snprintf_buffer lda #>0 sta.z __snprintf_buffer+1 - // [8] call conio_c64_init + // [6] call conio_c64_init jsr conio_c64_init - // [9] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [10] call main - // [39] phi from __start::@1 to main [phi:__start::@1->main] + // [8] call main + // [37] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn // __start::@return __breturn: - // [11] return + // [9] return rts } // snputc @@ -2413,60 +2387,60 @@ __start: { // void snputc(__register(X) char c) snputc: { .const OFFSET_STACK_C = 0 - // [12] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) -- vbuxx=_stackidxbyte_vbuc1 + // [10] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) -- vbuxx=_stackidxbyte_vbuc1 tsx lda STACK_BASE+OFFSET_STACK_C,x tax - // [13] __snprintf_size = ++ __snprintf_size -- vwuz1=_inc_vwuz1 - inc.z __snprintf_size + // [11] __snprintf_size = ++ __snprintf_size -- vwum1=_inc_vwum1 + inc __snprintf_size bne !+ - inc.z __snprintf_size+1 + inc __snprintf_size+1 !: - // [14] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 -- vwuz1_le_vwuz2_then_la1 - lda.z __snprintf_size+1 - cmp.z __snprintf_capacity+1 + // [12] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 -- vwum1_le_vwum2_then_la1 + lda __snprintf_size+1 + cmp __snprintf_capacity+1 bne !+ - lda.z __snprintf_size - cmp.z __snprintf_capacity + lda __snprintf_size + cmp __snprintf_capacity beq __b1 !: bcc __b1 jmp __breturn // snputc::@return __breturn: - // [15] return + // [13] return rts // snputc::@1 __b1: - // [16] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 -- vwuz1_neq_vwuz2_then_la1 - lda.z __snprintf_size+1 - cmp.z __snprintf_capacity+1 + // [14] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 -- vwum1_neq_vwum2_then_la1 + lda __snprintf_size+1 + cmp __snprintf_capacity+1 bne __b3_from___b1 - lda.z __snprintf_size - cmp.z __snprintf_capacity + lda __snprintf_size + cmp __snprintf_capacity bne __b3_from___b1 - // [18] phi from snputc::@1 to snputc::@2 [phi:snputc::@1->snputc::@2] + // [16] phi from snputc::@1 to snputc::@2 [phi:snputc::@1->snputc::@2] __b2_from___b1: - // [18] phi snputc::c#2 = 0 [phi:snputc::@1->snputc::@2#0] -- vbuxx=vbuc1 + // [16] phi snputc::c#2 = 0 [phi:snputc::@1->snputc::@2#0] -- vbuxx=vbuc1 ldx #0 jmp __b2 - // [17] phi from snputc::@1 to snputc::@3 [phi:snputc::@1->snputc::@3] + // [15] phi from snputc::@1 to snputc::@3 [phi:snputc::@1->snputc::@3] __b3_from___b1: jmp __b3 // snputc::@3 __b3: - // [18] phi from snputc::@3 to snputc::@2 [phi:snputc::@3->snputc::@2] + // [16] phi from snputc::@3 to snputc::@2 [phi:snputc::@3->snputc::@2] __b2_from___b3: - // [18] phi snputc::c#2 = snputc::c#0 [phi:snputc::@3->snputc::@2#0] -- register_copy + // [16] phi snputc::c#2 = snputc::c#0 [phi:snputc::@3->snputc::@2#0] -- register_copy jmp __b2 // snputc::@2 __b2: - // [19] *__snprintf_buffer = snputc::c#2 -- _deref_pbuz1=vbuxx + // [17] *__snprintf_buffer = snputc::c#2 -- _deref_pbuz1=vbuxx // Append char txa ldy #0 sta (__snprintf_buffer),y - // [20] __snprintf_buffer = ++ __snprintf_buffer -- pbuz1=_inc_pbuz1 + // [18] __snprintf_buffer = ++ __snprintf_buffer -- pbuz1=_inc_pbuz1 inc.z __snprintf_buffer bne !+ inc.z __snprintf_buffer+1 @@ -2478,34 +2452,34 @@ snputc: { conio_c64_init: { // Position cursor at current line .label BASIC_CURSOR_LINE = $d6 - // [21] conio_c64_init::line#0 = *conio_c64_init::BASIC_CURSOR_LINE -- vbuxx=_deref_pbuc1 + // [19] conio_c64_init::line#0 = *conio_c64_init::BASIC_CURSOR_LINE -- vbuxx=_deref_pbuc1 ldx.z BASIC_CURSOR_LINE - // [22] if(conio_c64_init::line#0<$19) goto conio_c64_init::@2 -- vbuxx_lt_vbuc1_then_la1 + // [20] if(conio_c64_init::line#0<$19) goto conio_c64_init::@2 -- vbuxx_lt_vbuc1_then_la1 cpx #$19 bcc __b2_from_conio_c64_init - // [24] phi from conio_c64_init to conio_c64_init::@1 [phi:conio_c64_init->conio_c64_init::@1] + // [22] phi from conio_c64_init to conio_c64_init::@1 [phi:conio_c64_init->conio_c64_init::@1] __b1_from_conio_c64_init: - // [24] phi conio_c64_init::line#2 = $19-1 [phi:conio_c64_init->conio_c64_init::@1#0] -- vbuxx=vbuc1 + // [22] phi conio_c64_init::line#2 = $19-1 [phi:conio_c64_init->conio_c64_init::@1#0] -- vbuxx=vbuc1 ldx #$19-1 jmp __b1 - // [23] phi from conio_c64_init to conio_c64_init::@2 [phi:conio_c64_init->conio_c64_init::@2] + // [21] phi from conio_c64_init to conio_c64_init::@2 [phi:conio_c64_init->conio_c64_init::@2] __b2_from_conio_c64_init: jmp __b2 // conio_c64_init::@2 __b2: - // [24] phi from conio_c64_init::@2 to conio_c64_init::@1 [phi:conio_c64_init::@2->conio_c64_init::@1] + // [22] phi from conio_c64_init::@2 to conio_c64_init::@1 [phi:conio_c64_init::@2->conio_c64_init::@1] __b1_from___b2: - // [24] phi conio_c64_init::line#2 = conio_c64_init::line#0 [phi:conio_c64_init::@2->conio_c64_init::@1#0] -- register_copy + // [22] phi conio_c64_init::line#2 = conio_c64_init::line#0 [phi:conio_c64_init::@2->conio_c64_init::@1#0] -- register_copy jmp __b1 // conio_c64_init::@1 __b1: - // [25] gotoxy::y#2 = conio_c64_init::line#2 - // [26] call gotoxy + // [23] gotoxy::y#2 = conio_c64_init::line#2 + // [24] call gotoxy jsr gotoxy jmp __breturn // conio_c64_init::@return __breturn: - // [27] return + // [25] return rts } // cputc @@ -2514,74 +2488,74 @@ conio_c64_init: { // void cputc(__register(A) char c) cputc: { .const OFFSET_STACK_C = 0 - // [28] cputc::c#0 = stackidx(char,cputc::OFFSET_STACK_C) -- vbuaa=_stackidxbyte_vbuc1 + // [26] cputc::c#0 = stackidx(char,cputc::OFFSET_STACK_C) -- vbuaa=_stackidxbyte_vbuc1 tsx lda STACK_BASE+OFFSET_STACK_C,x - // [29] if(cputc::c#0==' ') goto cputc::@1 -- vbuaa_eq_vbuc1_then_la1 + // [27] if(cputc::c#0==' ') goto cputc::@1 -- vbuaa_eq_vbuc1_then_la1 cmp #'\n' beq __b1_from_cputc jmp __b2 // cputc::@2 __b2: - // [30] conio_line_text[conio_cursor_x] = cputc::c#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [28] conio_line_text[conio_cursor_x] = cputc::c#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy.z conio_cursor_x sta (conio_line_text),y - // [31] conio_line_color[conio_cursor_x] = LIGHT_BLUE -- pbuz1_derefidx_vbuz2=vbuc1 + // [29] 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 - // [32] conio_cursor_x = ++ conio_cursor_x -- vbuz1=_inc_vbuz1 + // [30] conio_cursor_x = ++ conio_cursor_x -- vbuz1=_inc_vbuz1 inc.z conio_cursor_x - // [33] if(conio_cursor_x!=$28) goto cputc::@return -- vbuz1_neq_vbuc1_then_la1 + // [31] if(conio_cursor_x!=$28) goto cputc::@return -- vbuz1_neq_vbuc1_then_la1 lda #$28 cmp.z conio_cursor_x bne __breturn - // [34] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] + // [32] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] __b3_from___b2: jmp __b3 // cputc::@3 __b3: - // [35] call cputln + // [33] call cputln jsr cputln jmp __breturn // cputc::@return __breturn: - // [36] return + // [34] return rts - // [37] phi from cputc to cputc::@1 [phi:cputc->cputc::@1] + // [35] phi from cputc to cputc::@1 [phi:cputc->cputc::@1] __b1_from_cputc: jmp __b1 // cputc::@1 __b1: - // [38] call cputln + // [36] call cputln jsr cputln jmp __breturn } // main main: { - // [40] call snprintf_init - // [87] phi from main to snprintf_init [phi:main->snprintf_init] + // [38] call snprintf_init + // [85] phi from main to snprintf_init [phi:main->snprintf_init] snprintf_init_from_main: - // [87] phi snprintf_init::s#2 = BUF1 [phi:main->snprintf_init#0] -- pbuz1=pbuc1 + // [85] phi snprintf_init::s#2 = BUF1 [phi:main->snprintf_init#0] -- pbuz1=pbuc1 lda #BUF1 sta.z snprintf_init.s+1 jsr snprintf_init - // [41] phi from main to main::@1 [phi:main->main::@1] + // [39] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: jmp __b1 // main::@1 __b1: - // [42] call printf_str - // [92] phi from main::@1 to printf_str [phi:main::@1->printf_str] + // [40] call printf_str + // [90] phi from main::@1 to printf_str [phi:main::@1->printf_str] printf_str_from___b1: - // [92] phi printf_str::putc#8 = &snputc [phi:main::@1->printf_str#0] -- pprz1=pprc1 + // [90] phi printf_str::putc#8 = &snputc [phi:main::@1->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 + // [90] phi printf_str::s#8 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -2590,55 +2564,55 @@ main: { jmp __b2 // main::@2 __b2: - // [43] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 + // [41] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 lda #0 pha - // [44] callexecute snputc -- call_vprc1 + // [42] callexecute snputc -- call_vprc1 jsr snputc // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla - // [46] call snprintf_init - // [87] phi from main::@2 to snprintf_init [phi:main::@2->snprintf_init] + // [44] call snprintf_init + // [85] phi from main::@2 to snprintf_init [phi:main::@2->snprintf_init] snprintf_init_from___b2: - // [87] phi snprintf_init::s#2 = BUF2 [phi:main::@2->snprintf_init#0] -- pbuz1=pbuc1 + // [85] phi snprintf_init::s#2 = BUF2 [phi:main::@2->snprintf_init#0] -- pbuz1=pbuc1 lda #BUF2 sta.z snprintf_init.s+1 jsr snprintf_init - // [47] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + // [45] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: jmp __b3 // main::@3 __b3: - // [48] call printf_str - // [92] phi from main::@3 to printf_str [phi:main::@3->printf_str] + // [46] call printf_str + // [90] phi from main::@3 to printf_str [phi:main::@3->printf_str] printf_str_from___b3: - // [92] phi printf_str::putc#8 = &snputc [phi:main::@3->printf_str#0] -- pprz1=pprc1 + // [90] phi printf_str::putc#8 = &snputc [phi:main::@3->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s1 [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 + // [90] phi printf_str::s#8 = main::s1 [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 lda #s1 sta.z printf_str.s+1 jsr printf_str - // [49] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // [47] phi from main::@3 to main::@4 [phi:main::@3->main::@4] __b4_from___b3: jmp __b4 // main::@4 __b4: - // [50] call printf_string - // [101] phi from main::@4 to printf_string [phi:main::@4->printf_string] + // [48] call printf_string + // [99] phi from main::@4 to printf_string [phi:main::@4->printf_string] printf_string_from___b4: - // [101] phi printf_string::putc#10 = &snputc [phi:main::@4->printf_string#0] -- pprz1=pprc1 + // [99] phi printf_string::putc#10 = &snputc [phi:main::@4->printf_string#0] -- pprz1=pprc1 lda #snputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = main::str [phi:main::@4->printf_string#1] -- pbuz1=pbuc1 + // [99] phi printf_string::str#10 = main::str [phi:main::@4->printf_string#1] -- pbuz1=pbuc1 lda #str @@ -2647,105 +2621,105 @@ main: { jmp __b5 // main::@5 __b5: - // [51] stackpush(char) = '!' -- _stackpushbyte_=vbuc1 + // [49] stackpush(char) = '!' -- _stackpushbyte_=vbuc1 lda #'!' pha - // [52] callexecute snputc -- call_vprc1 + // [50] callexecute snputc -- call_vprc1 jsr snputc // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla - // [54] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 + // [52] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 lda #0 pha - // [55] callexecute snputc -- call_vprc1 + // [53] callexecute snputc -- call_vprc1 jsr snputc // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla - // [57] call printf_str - // [92] phi from main::@5 to printf_str [phi:main::@5->printf_str] + // [55] call printf_str + // [90] phi from main::@5 to printf_str [phi:main::@5->printf_str] printf_str_from___b5: - // [92] phi printf_str::putc#8 = &cputc [phi:main::@5->printf_str#0] -- pprz1=pprc1 + // [90] phi printf_str::putc#8 = &cputc [phi:main::@5->printf_str#0] -- pprz1=pprc1 lda #cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s2 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 + // [90] phi printf_str::s#8 = main::s2 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 lda #s2 sta.z printf_str.s+1 jsr printf_str - // [58] phi from main::@5 to main::@6 [phi:main::@5->main::@6] + // [56] phi from main::@5 to main::@6 [phi:main::@5->main::@6] __b6_from___b5: jmp __b6 // main::@6 __b6: - // [59] call printf_string - // [101] phi from main::@6 to printf_string [phi:main::@6->printf_string] + // [57] call printf_string + // [99] phi from main::@6 to printf_string [phi:main::@6->printf_string] printf_string_from___b6: - // [101] phi printf_string::putc#10 = &cputc [phi:main::@6->printf_string#0] -- pprz1=pprc1 + // [99] phi printf_string::putc#10 = &cputc [phi:main::@6->printf_string#0] -- pprz1=pprc1 lda #cputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = BUF1 [phi:main::@6->printf_string#1] -- pbuz1=pbuc1 + // [99] phi printf_string::str#10 = BUF1 [phi:main::@6->printf_string#1] -- pbuz1=pbuc1 lda #BUF1 sta.z printf_string.str+1 jsr printf_string - // [60] phi from main::@6 to main::@7 [phi:main::@6->main::@7] + // [58] phi from main::@6 to main::@7 [phi:main::@6->main::@7] __b7_from___b6: jmp __b7 // main::@7 __b7: - // [61] call printf_str - // [92] phi from main::@7 to printf_str [phi:main::@7->printf_str] + // [59] call printf_str + // [90] phi from main::@7 to printf_str [phi:main::@7->printf_str] printf_str_from___b7: - // [92] phi printf_str::putc#8 = &cputc [phi:main::@7->printf_str#0] -- pprz1=pprc1 + // [90] phi printf_str::putc#8 = &cputc [phi:main::@7->printf_str#0] -- pprz1=pprc1 lda #cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s3 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 + // [90] phi printf_str::s#8 = main::s3 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 lda #s3 sta.z printf_str.s+1 jsr printf_str - // [62] phi from main::@7 to main::@8 [phi:main::@7->main::@8] + // [60] phi from main::@7 to main::@8 [phi:main::@7->main::@8] __b8_from___b7: jmp __b8 // main::@8 __b8: - // [63] call printf_string - // [101] phi from main::@8 to printf_string [phi:main::@8->printf_string] + // [61] call printf_string + // [99] phi from main::@8 to printf_string [phi:main::@8->printf_string] printf_string_from___b8: - // [101] phi printf_string::putc#10 = &cputc [phi:main::@8->printf_string#0] -- pprz1=pprc1 + // [99] phi printf_string::putc#10 = &cputc [phi:main::@8->printf_string#0] -- pprz1=pprc1 lda #cputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = BUF2 [phi:main::@8->printf_string#1] -- pbuz1=pbuc1 + // [99] phi printf_string::str#10 = BUF2 [phi:main::@8->printf_string#1] -- pbuz1=pbuc1 lda #BUF2 sta.z printf_string.str+1 jsr printf_string - // [64] phi from main::@8 to main::@9 [phi:main::@8->main::@9] + // [62] phi from main::@8 to main::@9 [phi:main::@8->main::@9] __b9_from___b8: jmp __b9 // main::@9 __b9: - // [65] call printf_str - // [92] phi from main::@9 to printf_str [phi:main::@9->printf_str] + // [63] call printf_str + // [90] phi from main::@9 to printf_str [phi:main::@9->printf_str] printf_str_from___b9: - // [92] phi printf_str::putc#8 = &cputc [phi:main::@9->printf_str#0] -- pprz1=pprc1 + // [90] phi printf_str::putc#8 = &cputc [phi:main::@9->printf_str#0] -- pprz1=pprc1 lda #cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s2 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 + // [90] phi printf_str::s#8 = main::s2 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -2754,7 +2728,7 @@ main: { jmp __breturn // main::@return __breturn: - // [66] return + // [64] return rts .segment Data s: .text "hello world!" @@ -2780,39 +2754,39 @@ gotoxy: { .label line_offset = $c .label __8 = $e .label __9 = $c - // [67] if(gotoxy::y#2<$19+1) goto gotoxy::@3 -- vbuxx_lt_vbuc1_then_la1 + // [65] if(gotoxy::y#2<$19+1) goto gotoxy::@3 -- vbuxx_lt_vbuc1_then_la1 cpx #$19+1 bcc __b3_from_gotoxy - // [69] phi from gotoxy to gotoxy::@1 [phi:gotoxy->gotoxy::@1] + // [67] phi from gotoxy to gotoxy::@1 [phi:gotoxy->gotoxy::@1] __b1_from_gotoxy: - // [69] phi gotoxy::y#4 = 0 [phi:gotoxy->gotoxy::@1#0] -- vbuxx=vbuc1 + // [67] phi gotoxy::y#4 = 0 [phi:gotoxy->gotoxy::@1#0] -- vbuxx=vbuc1 ldx #0 jmp __b1 - // [68] phi from gotoxy to gotoxy::@3 [phi:gotoxy->gotoxy::@3] + // [66] phi from gotoxy to gotoxy::@3 [phi:gotoxy->gotoxy::@3] __b3_from_gotoxy: jmp __b3 // gotoxy::@3 __b3: - // [69] phi from gotoxy::@3 to gotoxy::@1 [phi:gotoxy::@3->gotoxy::@1] + // [67] phi from gotoxy::@3 to gotoxy::@1 [phi:gotoxy::@3->gotoxy::@1] __b1_from___b3: - // [69] phi gotoxy::y#4 = gotoxy::y#2 [phi:gotoxy::@3->gotoxy::@1#0] -- register_copy + // [67] phi gotoxy::y#4 = gotoxy::y#2 [phi:gotoxy::@3->gotoxy::@1#0] -- register_copy jmp __b1 // gotoxy::@1 __b1: jmp __b2 // gotoxy::@2 __b2: - // [70] conio_cursor_x = gotoxy::x#2 -- vbuz1=vbuc1 + // [68] conio_cursor_x = gotoxy::x#2 -- vbuz1=vbuc1 lda #x sta.z conio_cursor_x - // [71] conio_cursor_y = gotoxy::y#4 -- vbuz1=vbuxx + // [69] conio_cursor_y = gotoxy::y#4 -- vbuz1=vbuxx stx.z conio_cursor_y - // [72] gotoxy::$7 = (unsigned int)gotoxy::y#4 -- vwuz1=_word_vbuxx + // [70] gotoxy::$7 = (unsigned int)gotoxy::y#4 -- vwuz1=_word_vbuxx txa sta.z __7 lda #0 sta.z __7+1 - // [73] gotoxy::$8 = gotoxy::$7 << 2 -- vwuz1=vwuz2_rol_2 + // [71] gotoxy::$8 = gotoxy::$7 << 2 -- vwuz1=vwuz2_rol_2 lda.z __7 asl sta.z __8 @@ -2821,7 +2795,7 @@ gotoxy: { sta.z __8+1 asl.z __8 rol.z __8+1 - // [74] gotoxy::$9 = gotoxy::$8 + gotoxy::$7 -- vwuz1=vwuz2_plus_vwuz1 + // [72] gotoxy::$9 = gotoxy::$8 + gotoxy::$7 -- vwuz1=vwuz2_plus_vwuz1 clc lda.z __9 adc.z __8 @@ -2829,14 +2803,14 @@ gotoxy: { lda.z __9+1 adc.z __8+1 sta.z __9+1 - // [75] gotoxy::line_offset#0 = gotoxy::$9 << 3 -- vwuz1=vwuz1_rol_3 + // [73] gotoxy::line_offset#0 = gotoxy::$9 << 3 -- vwuz1=vwuz1_rol_3 asl.z line_offset rol.z line_offset+1 asl.z line_offset rol.z line_offset+1 asl.z line_offset rol.z line_offset+1 - // [76] gotoxy::$5 = DEFAULT_SCREEN + gotoxy::line_offset#0 -- pbuz1=pbuc1_plus_vwuz2 + // [74] gotoxy::$5 = DEFAULT_SCREEN + gotoxy::line_offset#0 -- pbuz1=pbuc1_plus_vwuz2 lda.z line_offset clc adc #DEFAULT_SCREEN sta.z __5+1 - // [77] conio_line_text = gotoxy::$5 -- pbuz1=pbuz2 + // [75] conio_line_text = gotoxy::$5 -- pbuz1=pbuz2 lda.z __5 sta.z conio_line_text lda.z __5+1 sta.z conio_line_text+1 - // [78] gotoxy::$6 = COLORRAM + gotoxy::line_offset#0 -- pbuz1=pbuc1_plus_vwuz1 + // [76] gotoxy::$6 = COLORRAM + gotoxy::line_offset#0 -- pbuz1=pbuc1_plus_vwuz1 lda.z __6 clc adc #COLORRAM sta.z __6+1 - // [79] conio_line_color = gotoxy::$6 -- pbuz1=pbuz2 + // [77] conio_line_color = gotoxy::$6 -- pbuz1=pbuz2 lda.z __6 sta.z conio_line_color lda.z __6+1 @@ -2865,13 +2839,13 @@ gotoxy: { jmp __breturn // gotoxy::@return __breturn: - // [80] return + // [78] return rts } // cputln // Print a newline cputln: { - // [81] conio_line_text = conio_line_text + $28 -- pbuz1=pbuz1_plus_vbuc1 + // [79] conio_line_text = conio_line_text + $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z conio_line_text @@ -2879,7 +2853,7 @@ cputln: { bcc !+ inc.z conio_line_text+1 !: - // [82] conio_line_color = conio_line_color + $28 -- pbuz1=pbuz1_plus_vbuc1 + // [80] conio_line_color = conio_line_color + $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z conio_line_color @@ -2887,17 +2861,17 @@ cputln: { bcc !+ inc.z conio_line_color+1 !: - // [83] conio_cursor_x = 0 -- vbuz1=vbuc1 + // [81] conio_cursor_x = 0 -- vbuz1=vbuc1 lda #0 sta.z conio_cursor_x - // [84] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 + // [82] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y - // [85] call cscroll + // [83] call cscroll jsr cscroll jmp __breturn // cputln::@return __breturn: - // [86] return + // [84] return rts } // snprintf_init @@ -2905,17 +2879,17 @@ cputln: { // void snprintf_init(__zp($a) char *s, unsigned int n) snprintf_init: { .label s = $a - // [88] __snprintf_capacity = $14 -- vwuz1=vbuc1 + // [86] __snprintf_capacity = $14 -- vwum1=vbuc1 lda #<$14 - sta.z __snprintf_capacity + sta __snprintf_capacity lda #>$14 - sta.z __snprintf_capacity+1 - // [89] __snprintf_size = 0 -- vwuz1=vbuc1 + sta __snprintf_capacity+1 + // [87] __snprintf_size = 0 -- vwum1=vbuc1 lda #<0 - sta.z __snprintf_size + sta __snprintf_size lda #>0 - sta.z __snprintf_size+1 - // [90] __snprintf_buffer = snprintf_init::s#2 -- pbuz1=pbuz2 + sta __snprintf_size+1 + // [88] __snprintf_buffer = snprintf_init::s#2 -- pbuz1=pbuz2 lda.z s sta.z __snprintf_buffer lda.z s+1 @@ -2923,7 +2897,7 @@ snprintf_init: { jmp __breturn // snprintf_init::@return __breturn: - // [91] return + // [89] return rts } // printf_str @@ -2932,34 +2906,34 @@ snprintf_init: { printf_str: { .label s = 4 .label putc = $a - // [93] phi from printf_str printf_str::@2 to printf_str::@1 [phi:printf_str/printf_str::@2->printf_str::@1] + // [91] phi from printf_str printf_str::@2 to printf_str::@1 [phi:printf_str/printf_str::@2->printf_str::@1] __b1_from_printf_str: __b1_from___b2: - // [93] phi printf_str::s#7 = printf_str::s#8 [phi:printf_str/printf_str::@2->printf_str::@1#0] -- register_copy + // [91] phi printf_str::s#7 = printf_str::s#8 [phi:printf_str/printf_str::@2->printf_str::@1#0] -- register_copy jmp __b1 // printf_str::@1 __b1: - // [94] printf_str::c#1 = *printf_str::s#7 -- vbuaa=_deref_pbuz1 + // [92] printf_str::c#1 = *printf_str::s#7 -- vbuaa=_deref_pbuz1 ldy #0 lda (s),y - // [95] printf_str::s#0 = ++ printf_str::s#7 -- pbuz1=_inc_pbuz1 + // [93] printf_str::s#0 = ++ printf_str::s#7 -- pbuz1=_inc_pbuz1 inc.z s bne !+ inc.z s+1 !: - // [96] if(0!=printf_str::c#1) goto printf_str::@2 -- 0_neq_vbuaa_then_la1 + // [94] if(0!=printf_str::c#1) goto printf_str::@2 -- 0_neq_vbuaa_then_la1 cmp #0 bne __b2 jmp __breturn // printf_str::@return __breturn: - // [97] return + // [95] return rts // printf_str::@2 __b2: - // [98] stackpush(char) = printf_str::c#1 -- _stackpushbyte_=vbuaa + // [96] stackpush(char) = printf_str::c#1 -- _stackpushbyte_=vbuaa pha - // [99] callexecute *printf_str::putc#8 -- call__deref_pprz1 + // [97] callexecute *printf_str::putc#8 -- call__deref_pprz1 jsr icall4 // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla @@ -2978,92 +2952,92 @@ printf_string: { jmp __b1 // printf_string::@1 __b1: - // [102] printf_str::putc#0 = printf_string::putc#10 - // [103] printf_str::s#1 = printf_string::str#10 - // [104] call printf_str - // [92] phi from printf_string::@1 to printf_str [phi:printf_string::@1->printf_str] + // [100] printf_str::putc#0 = printf_string::putc#10 + // [101] printf_str::s#1 = printf_string::str#10 + // [102] call printf_str + // [90] phi from printf_string::@1 to printf_str [phi:printf_string::@1->printf_str] printf_str_from___b1: - // [92] phi printf_str::putc#8 = printf_str::putc#0 [phi:printf_string::@1->printf_str#0] -- register_copy - // [92] phi printf_str::s#8 = printf_str::s#1 [phi:printf_string::@1->printf_str#1] -- register_copy + // [90] phi printf_str::putc#8 = printf_str::putc#0 [phi:printf_string::@1->printf_str#0] -- register_copy + // [90] phi printf_str::s#8 = printf_str::s#1 [phi:printf_string::@1->printf_str#1] -- register_copy jsr printf_str jmp __breturn // printf_string::@return __breturn: - // [105] return + // [103] return rts } // cscroll // Scroll the entire screen if the cursor is beyond the last line cscroll: { - // [106] if(conio_cursor_y!=$19) goto cscroll::@return -- vbuz1_neq_vbuc1_then_la1 + // [104] if(conio_cursor_y!=$19) goto cscroll::@return -- vbuz1_neq_vbuc1_then_la1 lda #$19 cmp.z conio_cursor_y bne __breturn - // [107] phi from cscroll to cscroll::@1 [phi:cscroll->cscroll::@1] + // [105] phi from cscroll to cscroll::@1 [phi:cscroll->cscroll::@1] __b1_from_cscroll: jmp __b1 // cscroll::@1 __b1: - // [108] call memcpy - // [119] phi from cscroll::@1 to memcpy [phi:cscroll::@1->memcpy] + // [106] call memcpy + // [117] phi from cscroll::@1 to memcpy [phi:cscroll::@1->memcpy] memcpy_from___b1: - // [119] phi memcpy::destination#2 = (void *)DEFAULT_SCREEN [phi:cscroll::@1->memcpy#0] -- pvoz1=pvoc1 + // [117] phi memcpy::destination#2 = (void *)DEFAULT_SCREEN [phi:cscroll::@1->memcpy#0] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN sta.z memcpy.destination+1 - // [119] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [117] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 sta.z memcpy.source+1 jsr memcpy - // [109] phi from cscroll::@1 to cscroll::@2 [phi:cscroll::@1->cscroll::@2] + // [107] phi from cscroll::@1 to cscroll::@2 [phi:cscroll::@1->cscroll::@2] __b2_from___b1: jmp __b2 // cscroll::@2 __b2: - // [110] call memcpy - // [119] phi from cscroll::@2 to memcpy [phi:cscroll::@2->memcpy] + // [108] call memcpy + // [117] phi from cscroll::@2 to memcpy [phi:cscroll::@2->memcpy] memcpy_from___b2: - // [119] phi memcpy::destination#2 = (void *)COLORRAM [phi:cscroll::@2->memcpy#0] -- pvoz1=pvoc1 + // [117] phi memcpy::destination#2 = (void *)COLORRAM [phi:cscroll::@2->memcpy#0] -- pvoz1=pvoc1 lda #COLORRAM sta.z memcpy.destination+1 - // [119] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [117] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 sta.z memcpy.source+1 jsr memcpy - // [111] phi from cscroll::@2 to cscroll::@3 [phi:cscroll::@2->cscroll::@3] + // [109] phi from cscroll::@2 to cscroll::@3 [phi:cscroll::@2->cscroll::@3] __b3_from___b2: jmp __b3 // cscroll::@3 __b3: - // [112] call memset - // [129] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] + // [110] call memset + // [127] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] memset_from___b3: - // [129] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 + // [127] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [129] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [127] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 sta.z memset.str+1 jsr memset - // [113] phi from cscroll::@3 to cscroll::@4 [phi:cscroll::@3->cscroll::@4] + // [111] phi from cscroll::@3 to cscroll::@4 [phi:cscroll::@3->cscroll::@4] __b4_from___b3: jmp __b4 // cscroll::@4 __b4: - // [114] call memset - // [129] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] + // [112] call memset + // [127] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] memset_from___b4: - // [129] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 + // [127] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [129] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [127] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -3072,7 +3046,7 @@ cscroll: { jmp __b5 // cscroll::@5 __b5: - // [115] conio_line_text = conio_line_text - $28 -- pbuz1=pbuz1_minus_vbuc1 + // [113] conio_line_text = conio_line_text - $28 -- pbuz1=pbuz1_minus_vbuc1 sec lda.z conio_line_text sbc #$28 @@ -3080,7 +3054,7 @@ cscroll: { lda.z conio_line_text+1 sbc #0 sta.z conio_line_text+1 - // [116] conio_line_color = conio_line_color - $28 -- pbuz1=pbuz1_minus_vbuc1 + // [114] conio_line_color = conio_line_color - $28 -- pbuz1=pbuz1_minus_vbuc1 sec lda.z conio_line_color sbc #$28 @@ -3088,12 +3062,12 @@ cscroll: { lda.z conio_line_color+1 sbc #0 sta.z conio_line_color+1 - // [117] conio_cursor_y = -- conio_cursor_y -- vbuz1=_dec_vbuz1 + // [115] conio_cursor_y = -- conio_cursor_y -- vbuz1=_dec_vbuz1 dec.z conio_cursor_y jmp __breturn // cscroll::@return __breturn: - // [118] return + // [116] return rts } // memcpy @@ -3106,7 +3080,7 @@ memcpy: { .label src = 2 .label source = 2 .label destination = 6 - // [120] memcpy::src_end#0 = (char *)memcpy::source#2 + (unsigned int)$19*$28-$28 -- pbuz1=pbuz2_plus_vwuc1 + // [118] memcpy::src_end#0 = (char *)memcpy::source#2 + (unsigned int)$19*$28-$28 -- pbuz1=pbuz2_plus_vwuc1 lda.z source clc adc #<$19*$28-$28 @@ -3114,17 +3088,17 @@ memcpy: { lda.z source+1 adc #>$19*$28-$28 sta.z src_end+1 - // [121] memcpy::src#4 = (char *)memcpy::source#2 - // [122] memcpy::dst#4 = (char *)memcpy::destination#2 - // [123] phi from memcpy memcpy::@2 to memcpy::@1 [phi:memcpy/memcpy::@2->memcpy::@1] + // [119] memcpy::src#4 = (char *)memcpy::source#2 + // [120] memcpy::dst#4 = (char *)memcpy::destination#2 + // [121] phi from memcpy memcpy::@2 to memcpy::@1 [phi:memcpy/memcpy::@2->memcpy::@1] __b1_from_memcpy: __b1_from___b2: - // [123] phi memcpy::dst#2 = memcpy::dst#4 [phi:memcpy/memcpy::@2->memcpy::@1#0] -- register_copy - // [123] phi memcpy::src#2 = memcpy::src#4 [phi:memcpy/memcpy::@2->memcpy::@1#1] -- register_copy + // [121] phi memcpy::dst#2 = memcpy::dst#4 [phi:memcpy/memcpy::@2->memcpy::@1#0] -- register_copy + // [121] phi memcpy::src#2 = memcpy::src#4 [phi:memcpy/memcpy::@2->memcpy::@1#1] -- register_copy jmp __b1 // memcpy::@1 __b1: - // [124] if(memcpy::src#2!=memcpy::src_end#0) goto memcpy::@2 -- pbuz1_neq_pbuz2_then_la1 + // [122] if(memcpy::src#2!=memcpy::src_end#0) goto memcpy::@2 -- pbuz1_neq_pbuz2_then_la1 lda.z src+1 cmp.z src_end+1 bne __b2 @@ -3134,21 +3108,21 @@ memcpy: { jmp __breturn // memcpy::@return __breturn: - // [125] return + // [123] return rts // memcpy::@2 __b2: - // [126] *memcpy::dst#2 = *memcpy::src#2 -- _deref_pbuz1=_deref_pbuz2 + // [124] *memcpy::dst#2 = *memcpy::src#2 -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (src),y ldy #0 sta (dst),y - // [127] memcpy::dst#1 = ++ memcpy::dst#2 -- pbuz1=_inc_pbuz1 + // [125] memcpy::dst#1 = ++ memcpy::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: - // [128] memcpy::src#1 = ++ memcpy::src#2 -- pbuz1=_inc_pbuz1 + // [126] memcpy::src#1 = ++ memcpy::src#2 -- pbuz1=_inc_pbuz1 inc.z src bne !+ inc.z src+1 @@ -3165,7 +3139,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [130] memset::end#0 = (char *)memset::str#3 + $28 -- pbuz1=pbuz2_plus_vbuc1 + // [128] memset::end#0 = (char *)memset::str#3 + $28 -- pbuz1=pbuz2_plus_vbuc1 lda #$28 clc adc.z str @@ -3173,15 +3147,15 @@ memset: { lda #0 adc.z str+1 sta.z end+1 - // [131] memset::dst#4 = (char *)memset::str#3 - // [132] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + // [129] memset::dst#4 = (char *)memset::str#3 + // [130] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] __b2_from___b1: __b2_from___b3: - // [132] phi memset::dst#2 = memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + // [130] phi memset::dst#2 = memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy jmp __b2 // memset::@2 __b2: - // [133] if(memset::dst#2!=memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + // [131] if(memset::dst#2!=memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 lda.z dst+1 cmp.z end+1 bne __b3 @@ -3191,15 +3165,15 @@ memset: { jmp __breturn // memset::@return __breturn: - // [134] return + // [132] return rts // memset::@3 __b3: - // [135] *memset::dst#2 = memset::c#4 -- _deref_pbuz1=vbuxx + // [133] *memset::dst#2 = memset::c#4 -- _deref_pbuz1=vbuxx txa ldy #0 sta (dst),y - // [136] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 + // [134] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 @@ -3210,6 +3184,12 @@ memset: { .segment Data BUF1: .fill $14, 0 BUF2: .fill $14, 0 + /// The capacity of the buffer (n passed to snprintf()) + /// Used to hold state while printing + __snprintf_capacity: .word 0 + // The number of chars that would have been filled when printing without capacity. Grows even after size>capacity. + /// Used to hold state while printing + __snprintf_size: .word 0 ASSEMBLER OPTIMIZATIONS Removing instruction jmp __init1 @@ -3259,10 +3239,6 @@ Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #0 Removing instruction lda #>0 -Removing instruction lda #<0 -Removing instruction lda #>0 -Removing instruction lda #<0 -Removing instruction lda #>0 Removing instruction ldy.z conio_cursor_x Removing instruction lda #>0 Removing instruction ldy #0 @@ -3378,9 +3354,9 @@ __constant char RADIX::DECIMAL = $a __constant char RADIX::HEXADECIMAL = $10 __constant char RADIX::OCTAL = 8 __constant unsigned int STACK_BASE = $103 -__loadstore char *__snprintf_buffer // zp[2]:22 16.916666666666664 -__loadstore volatile unsigned int __snprintf_capacity // zp[2]:28 11.730769230769232 -__loadstore volatile unsigned int __snprintf_size // zp[2]:19 20.279999999999998 +__loadstore char *__snprintf_buffer // zp[2]:20 16.916666666666664 +__loadstore volatile unsigned int __snprintf_capacity = 0 // mem[2] 11.653846153846153 +__loadstore volatile unsigned int __snprintf_size = 0 // mem[2] 20.2 void __start() void conio_c64_init() __constant char * const conio_c64_init::BASIC_CURSOR_LINE = (char *) 214 @@ -3388,9 +3364,9 @@ char conio_c64_init::line char conio_c64_init::line#0 // reg byte x 11.0 char conio_c64_init::line#2 // reg byte x 22.0 __loadstore char conio_cursor_x // zp[1]:18 24.799999999999997 -__loadstore char conio_cursor_y // zp[1]:21 18.608695652173914 -__loadstore char *conio_line_color // zp[2]:26 14.954545454545453 -__loadstore char *conio_line_text // zp[2]:24 15.666666666666668 +__loadstore char conio_cursor_y // zp[1]:19 18.608695652173914 +__loadstore char *conio_line_color // zp[2]:24 14.954545454545453 +__loadstore char *conio_line_text // zp[2]:22 15.666666666666668 __stackcall void cputc(char c) __constant char cputc::OFFSET_STACK_C = 0 char cputc::c @@ -3485,23 +3461,23 @@ zp[2]:4 [ printf_str::s#7 printf_str::s#8 printf_str::s#1 printf_str::s#0 printf zp[2]:2 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 ] reg byte x [ memset::c#4 ] zp[1]:18 [ conio_cursor_x ] -zp[1]:21 [ conio_cursor_y ] -zp[2]:24 [ conio_line_text ] -zp[2]:26 [ conio_line_color ] -zp[2]:28 [ __snprintf_capacity ] -zp[2]:19 [ __snprintf_size ] -zp[2]:22 [ __snprintf_buffer ] +zp[1]:19 [ conio_cursor_y ] +zp[2]:22 [ conio_line_text ] +zp[2]:24 [ conio_line_color ] +zp[2]:20 [ __snprintf_buffer ] +mem[2] [ __snprintf_size ] reg byte a [ cputc::c#0 ] zp[2]:12 [ gotoxy::$7 gotoxy::$9 gotoxy::line_offset#0 gotoxy::$6 ] zp[2]:14 [ gotoxy::$8 ] zp[2]:16 [ gotoxy::$5 ] +mem[2] [ __snprintf_capacity ] reg byte a [ printf_str::c#1 ] zp[2]:8 [ memcpy::src_end#0 ] zp[2]:6 [ memset::end#0 memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] FINAL ASSEMBLER -Score: 2464 +Score: 2466 // File Comments // Tests snprintf function call rewriting @@ -3526,20 +3502,14 @@ Score: 2464 // The current cursor x-position .label conio_cursor_x = $12 // The current cursor y-position - .label conio_cursor_y = $15 + .label conio_cursor_y = $13 // The current text cursor line start - .label conio_line_text = $18 + .label conio_line_text = $16 // The current color cursor line start - .label conio_line_color = $1a - /// The capacity of the buffer (n passed to snprintf()) - /// Used to hold state while printing - .label __snprintf_capacity = $1c - // The number of chars that would have been filled when printing without capacity. Grows even after size>capacity. - /// Used to hold state while printing - .label __snprintf_size = $13 + .label conio_line_color = $18 /// Current position in the buffer being filled ( initially *s passed to snprintf() /// Used to hold state while printing - .label __snprintf_buffer = $16 + .label __snprintf_buffer = $14 .segment Code // __start __start: { @@ -3563,29 +3533,21 @@ __start: { sta.z conio_line_color lda #>COLORRAM sta.z conio_line_color+1 - // volatile size_t __snprintf_capacity - // [5] __snprintf_capacity = 0 -- vwuz1=vwuc1 - lda #<0 - sta.z __snprintf_capacity - sta.z __snprintf_capacity+1 - // volatile size_t __snprintf_size - // [6] __snprintf_size = 0 -- vwuz1=vwuc1 - sta.z __snprintf_size - sta.z __snprintf_size+1 // char * __snprintf_buffer - // [7] __snprintf_buffer = (char *) 0 -- pbuz1=pbuc1 + // [5] __snprintf_buffer = (char *) 0 -- pbuz1=pbuc1 + lda #<0 sta.z __snprintf_buffer sta.z __snprintf_buffer+1 // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) - // [8] call conio_c64_init + // [6] call conio_c64_init jsr conio_c64_init - // [9] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // [7] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [10] call main - // [39] phi from __start::@1 to main [phi:__start::@1->main] + // [8] call main + // [37] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return - // [11] return + // [9] return rts } // snputc @@ -3595,57 +3557,57 @@ __start: { // void snputc(__register(X) char c) snputc: { .const OFFSET_STACK_C = 0 - // [12] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) -- vbuxx=_stackidxbyte_vbuc1 + // [10] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) -- vbuxx=_stackidxbyte_vbuc1 tsx lda STACK_BASE+OFFSET_STACK_C,x tax // ++__snprintf_size; - // [13] __snprintf_size = ++ __snprintf_size -- vwuz1=_inc_vwuz1 - inc.z __snprintf_size + // [11] __snprintf_size = ++ __snprintf_size -- vwum1=_inc_vwum1 + inc __snprintf_size bne !+ - inc.z __snprintf_size+1 + inc __snprintf_size+1 !: // if(__snprintf_size > __snprintf_capacity) - // [14] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 -- vwuz1_le_vwuz2_then_la1 - lda.z __snprintf_size+1 - cmp.z __snprintf_capacity+1 + // [12] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 -- vwum1_le_vwum2_then_la1 + lda __snprintf_size+1 + cmp __snprintf_capacity+1 bne !+ - lda.z __snprintf_size - cmp.z __snprintf_capacity + lda __snprintf_size + cmp __snprintf_capacity beq __b1 !: bcc __b1 // snputc::@return // } - // [15] return + // [13] return rts // snputc::@1 __b1: // if(__snprintf_size==__snprintf_capacity) - // [16] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 -- vwuz1_neq_vwuz2_then_la1 - lda.z __snprintf_size+1 - cmp.z __snprintf_capacity+1 + // [14] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 -- vwum1_neq_vwum2_then_la1 + lda __snprintf_size+1 + cmp __snprintf_capacity+1 bne __b2 - lda.z __snprintf_size - cmp.z __snprintf_capacity + lda __snprintf_size + cmp __snprintf_capacity bne __b2 - // [18] phi from snputc::@1 to snputc::@2 [phi:snputc::@1->snputc::@2] - // [18] phi snputc::c#2 = 0 [phi:snputc::@1->snputc::@2#0] -- vbuxx=vbuc1 + // [16] phi from snputc::@1 to snputc::@2 [phi:snputc::@1->snputc::@2] + // [16] phi snputc::c#2 = 0 [phi:snputc::@1->snputc::@2#0] -- vbuxx=vbuc1 ldx #0 - // [17] phi from snputc::@1 to snputc::@3 [phi:snputc::@1->snputc::@3] + // [15] phi from snputc::@1 to snputc::@3 [phi:snputc::@1->snputc::@3] // snputc::@3 - // [18] phi from snputc::@3 to snputc::@2 [phi:snputc::@3->snputc::@2] - // [18] phi snputc::c#2 = snputc::c#0 [phi:snputc::@3->snputc::@2#0] -- register_copy + // [16] phi from snputc::@3 to snputc::@2 [phi:snputc::@3->snputc::@2] + // [16] phi snputc::c#2 = snputc::c#0 [phi:snputc::@3->snputc::@2#0] -- register_copy // snputc::@2 __b2: // *(__snprintf_buffer++) = c - // [19] *__snprintf_buffer = snputc::c#2 -- _deref_pbuz1=vbuxx + // [17] *__snprintf_buffer = snputc::c#2 -- _deref_pbuz1=vbuxx // Append char txa ldy #0 sta (__snprintf_buffer),y // *(__snprintf_buffer++) = c; - // [20] __snprintf_buffer = ++ __snprintf_buffer -- pbuz1=_inc_pbuz1 + // [18] __snprintf_buffer = ++ __snprintf_buffer -- pbuz1=_inc_pbuz1 inc.z __snprintf_buffer bne !+ inc.z __snprintf_buffer+1 @@ -3658,28 +3620,28 @@ conio_c64_init: { // Position cursor at current line .label BASIC_CURSOR_LINE = $d6 // char line = *BASIC_CURSOR_LINE - // [21] conio_c64_init::line#0 = *conio_c64_init::BASIC_CURSOR_LINE -- vbuxx=_deref_pbuc1 + // [19] conio_c64_init::line#0 = *conio_c64_init::BASIC_CURSOR_LINE -- vbuxx=_deref_pbuc1 ldx.z BASIC_CURSOR_LINE // if(line>=CONIO_HEIGHT) - // [22] if(conio_c64_init::line#0<$19) goto conio_c64_init::@2 -- vbuxx_lt_vbuc1_then_la1 + // [20] if(conio_c64_init::line#0<$19) goto conio_c64_init::@2 -- vbuxx_lt_vbuc1_then_la1 cpx #$19 bcc __b1 - // [24] phi from conio_c64_init to conio_c64_init::@1 [phi:conio_c64_init->conio_c64_init::@1] - // [24] phi conio_c64_init::line#2 = $19-1 [phi:conio_c64_init->conio_c64_init::@1#0] -- vbuxx=vbuc1 + // [22] phi from conio_c64_init to conio_c64_init::@1 [phi:conio_c64_init->conio_c64_init::@1] + // [22] phi conio_c64_init::line#2 = $19-1 [phi:conio_c64_init->conio_c64_init::@1#0] -- vbuxx=vbuc1 ldx #$19-1 - // [23] phi from conio_c64_init to conio_c64_init::@2 [phi:conio_c64_init->conio_c64_init::@2] + // [21] phi from conio_c64_init to conio_c64_init::@2 [phi:conio_c64_init->conio_c64_init::@2] // conio_c64_init::@2 - // [24] phi from conio_c64_init::@2 to conio_c64_init::@1 [phi:conio_c64_init::@2->conio_c64_init::@1] - // [24] phi conio_c64_init::line#2 = conio_c64_init::line#0 [phi:conio_c64_init::@2->conio_c64_init::@1#0] -- register_copy + // [22] phi from conio_c64_init::@2 to conio_c64_init::@1 [phi:conio_c64_init::@2->conio_c64_init::@1] + // [22] phi conio_c64_init::line#2 = conio_c64_init::line#0 [phi:conio_c64_init::@2->conio_c64_init::@1#0] -- register_copy // conio_c64_init::@1 __b1: // gotoxy(0, line) - // [25] gotoxy::y#2 = conio_c64_init::line#2 - // [26] call gotoxy + // [23] gotoxy::y#2 = conio_c64_init::line#2 + // [24] call gotoxy jsr gotoxy // conio_c64_init::@return // } - // [27] return + // [25] return rts } // cputc @@ -3688,69 +3650,69 @@ conio_c64_init: { // void cputc(__register(A) char c) cputc: { .const OFFSET_STACK_C = 0 - // [28] cputc::c#0 = stackidx(char,cputc::OFFSET_STACK_C) -- vbuaa=_stackidxbyte_vbuc1 + // [26] cputc::c#0 = stackidx(char,cputc::OFFSET_STACK_C) -- vbuaa=_stackidxbyte_vbuc1 tsx lda STACK_BASE+OFFSET_STACK_C,x // if(c=='\n') - // [29] if(cputc::c#0==' ') goto cputc::@1 -- vbuaa_eq_vbuc1_then_la1 + // [27] if(cputc::c#0==' ') goto cputc::@1 -- vbuaa_eq_vbuc1_then_la1 cmp #'\n' beq __b1 // cputc::@2 // conio_line_text[conio_cursor_x] = c - // [30] conio_line_text[conio_cursor_x] = cputc::c#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [28] conio_line_text[conio_cursor_x] = cputc::c#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy.z conio_cursor_x sta (conio_line_text),y // conio_line_color[conio_cursor_x] = conio_textcolor - // [31] conio_line_color[conio_cursor_x] = LIGHT_BLUE -- pbuz1_derefidx_vbuz2=vbuc1 + // [29] conio_line_color[conio_cursor_x] = LIGHT_BLUE -- pbuz1_derefidx_vbuz2=vbuc1 lda #LIGHT_BLUE sta (conio_line_color),y // if(++conio_cursor_x==CONIO_WIDTH) - // [32] conio_cursor_x = ++ conio_cursor_x -- vbuz1=_inc_vbuz1 + // [30] conio_cursor_x = ++ conio_cursor_x -- vbuz1=_inc_vbuz1 inc.z conio_cursor_x - // [33] if(conio_cursor_x!=$28) goto cputc::@return -- vbuz1_neq_vbuc1_then_la1 + // [31] if(conio_cursor_x!=$28) goto cputc::@return -- vbuz1_neq_vbuc1_then_la1 lda #$28 cmp.z conio_cursor_x bne __breturn - // [34] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] + // [32] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] // cputc::@3 // cputln() - // [35] call cputln + // [33] call cputln jsr cputln // cputc::@return __breturn: // } - // [36] return + // [34] return rts - // [37] phi from cputc to cputc::@1 [phi:cputc->cputc::@1] + // [35] phi from cputc to cputc::@1 [phi:cputc->cputc::@1] // cputc::@1 __b1: // cputln() - // [38] call cputln + // [36] call cputln jsr cputln rts } // main main: { // snprintf(BUF1, 20, "hello world!") - // [40] call snprintf_init - // [87] phi from main to snprintf_init [phi:main->snprintf_init] - // [87] phi snprintf_init::s#2 = BUF1 [phi:main->snprintf_init#0] -- pbuz1=pbuc1 + // [38] call snprintf_init + // [85] phi from main to snprintf_init [phi:main->snprintf_init] + // [85] phi snprintf_init::s#2 = BUF1 [phi:main->snprintf_init#0] -- pbuz1=pbuc1 lda #BUF1 sta.z snprintf_init.s+1 jsr snprintf_init - // [41] phi from main to main::@1 [phi:main->main::@1] + // [39] phi from main to main::@1 [phi:main->main::@1] // main::@1 // snprintf(BUF1, 20, "hello world!") - // [42] call printf_str - // [92] phi from main::@1 to printf_str [phi:main::@1->printf_str] - // [92] phi printf_str::putc#8 = &snputc [phi:main::@1->printf_str#0] -- pprz1=pprc1 + // [40] call printf_str + // [90] phi from main::@1 to printf_str [phi:main::@1->printf_str] + // [90] phi printf_str::putc#8 = &snputc [phi:main::@1->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 + // [90] phi printf_str::s#8 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -3758,49 +3720,49 @@ main: { jsr printf_str // main::@2 // snprintf(BUF1, 20, "hello world!") - // [43] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 + // [41] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 lda #0 pha - // [44] callexecute snputc -- call_vprc1 + // [42] callexecute snputc -- call_vprc1 jsr snputc // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla // snprintf(BUF2, 20, "hello %s%c", "world", '!') - // [46] call snprintf_init - // [87] phi from main::@2 to snprintf_init [phi:main::@2->snprintf_init] - // [87] phi snprintf_init::s#2 = BUF2 [phi:main::@2->snprintf_init#0] -- pbuz1=pbuc1 + // [44] call snprintf_init + // [85] phi from main::@2 to snprintf_init [phi:main::@2->snprintf_init] + // [85] phi snprintf_init::s#2 = BUF2 [phi:main::@2->snprintf_init#0] -- pbuz1=pbuc1 lda #BUF2 sta.z snprintf_init.s+1 jsr snprintf_init - // [47] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + // [45] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // snprintf(BUF2, 20, "hello %s%c", "world", '!') - // [48] call printf_str - // [92] phi from main::@3 to printf_str [phi:main::@3->printf_str] - // [92] phi printf_str::putc#8 = &snputc [phi:main::@3->printf_str#0] -- pprz1=pprc1 + // [46] call printf_str + // [90] phi from main::@3 to printf_str [phi:main::@3->printf_str] + // [90] phi printf_str::putc#8 = &snputc [phi:main::@3->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s1 [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 + // [90] phi printf_str::s#8 = main::s1 [phi:main::@3->printf_str#1] -- pbuz1=pbuc1 lda #s1 sta.z printf_str.s+1 jsr printf_str - // [49] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // [47] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // snprintf(BUF2, 20, "hello %s%c", "world", '!') - // [50] call printf_string - // [101] phi from main::@4 to printf_string [phi:main::@4->printf_string] - // [101] phi printf_string::putc#10 = &snputc [phi:main::@4->printf_string#0] -- pprz1=pprc1 + // [48] call printf_string + // [99] phi from main::@4 to printf_string [phi:main::@4->printf_string] + // [99] phi printf_string::putc#10 = &snputc [phi:main::@4->printf_string#0] -- pprz1=pprc1 lda #snputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = main::str [phi:main::@4->printf_string#1] -- pbuz1=pbuc1 + // [99] phi printf_string::str#10 = main::str [phi:main::@4->printf_string#1] -- pbuz1=pbuc1 lda #str @@ -3808,93 +3770,93 @@ main: { jsr printf_string // main::@5 // snprintf(BUF2, 20, "hello %s%c", "world", '!') - // [51] stackpush(char) = '!' -- _stackpushbyte_=vbuc1 + // [49] stackpush(char) = '!' -- _stackpushbyte_=vbuc1 lda #'!' pha - // [52] callexecute snputc -- call_vprc1 + // [50] callexecute snputc -- call_vprc1 jsr snputc // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla - // [54] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 + // [52] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 lda #0 pha - // [55] callexecute snputc -- call_vprc1 + // [53] callexecute snputc -- call_vprc1 jsr snputc // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla // printf("-%s- -%s-", BUF1, BUF2) - // [57] call printf_str - // [92] phi from main::@5 to printf_str [phi:main::@5->printf_str] - // [92] phi printf_str::putc#8 = &cputc [phi:main::@5->printf_str#0] -- pprz1=pprc1 + // [55] call printf_str + // [90] phi from main::@5 to printf_str [phi:main::@5->printf_str] + // [90] phi printf_str::putc#8 = &cputc [phi:main::@5->printf_str#0] -- pprz1=pprc1 lda #cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s2 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 + // [90] phi printf_str::s#8 = main::s2 [phi:main::@5->printf_str#1] -- pbuz1=pbuc1 lda #s2 sta.z printf_str.s+1 jsr printf_str - // [58] phi from main::@5 to main::@6 [phi:main::@5->main::@6] + // [56] phi from main::@5 to main::@6 [phi:main::@5->main::@6] // main::@6 // printf("-%s- -%s-", BUF1, BUF2) - // [59] call printf_string - // [101] phi from main::@6 to printf_string [phi:main::@6->printf_string] - // [101] phi printf_string::putc#10 = &cputc [phi:main::@6->printf_string#0] -- pprz1=pprc1 + // [57] call printf_string + // [99] phi from main::@6 to printf_string [phi:main::@6->printf_string] + // [99] phi printf_string::putc#10 = &cputc [phi:main::@6->printf_string#0] -- pprz1=pprc1 lda #cputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = BUF1 [phi:main::@6->printf_string#1] -- pbuz1=pbuc1 + // [99] phi printf_string::str#10 = BUF1 [phi:main::@6->printf_string#1] -- pbuz1=pbuc1 lda #BUF1 sta.z printf_string.str+1 jsr printf_string - // [60] phi from main::@6 to main::@7 [phi:main::@6->main::@7] + // [58] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 // printf("-%s- -%s-", BUF1, BUF2) - // [61] call printf_str - // [92] phi from main::@7 to printf_str [phi:main::@7->printf_str] - // [92] phi printf_str::putc#8 = &cputc [phi:main::@7->printf_str#0] -- pprz1=pprc1 + // [59] call printf_str + // [90] phi from main::@7 to printf_str [phi:main::@7->printf_str] + // [90] phi printf_str::putc#8 = &cputc [phi:main::@7->printf_str#0] -- pprz1=pprc1 lda #cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s3 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 + // [90] phi printf_str::s#8 = main::s3 [phi:main::@7->printf_str#1] -- pbuz1=pbuc1 lda #s3 sta.z printf_str.s+1 jsr printf_str - // [62] phi from main::@7 to main::@8 [phi:main::@7->main::@8] + // [60] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 // printf("-%s- -%s-", BUF1, BUF2) - // [63] call printf_string - // [101] phi from main::@8 to printf_string [phi:main::@8->printf_string] - // [101] phi printf_string::putc#10 = &cputc [phi:main::@8->printf_string#0] -- pprz1=pprc1 + // [61] call printf_string + // [99] phi from main::@8 to printf_string [phi:main::@8->printf_string] + // [99] phi printf_string::putc#10 = &cputc [phi:main::@8->printf_string#0] -- pprz1=pprc1 lda #cputc sta.z printf_string.putc+1 - // [101] phi printf_string::str#10 = BUF2 [phi:main::@8->printf_string#1] -- pbuz1=pbuc1 + // [99] phi printf_string::str#10 = BUF2 [phi:main::@8->printf_string#1] -- pbuz1=pbuc1 lda #BUF2 sta.z printf_string.str+1 jsr printf_string - // [64] phi from main::@8 to main::@9 [phi:main::@8->main::@9] + // [62] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 // printf("-%s- -%s-", BUF1, BUF2) - // [65] call printf_str - // [92] phi from main::@9 to printf_str [phi:main::@9->printf_str] - // [92] phi printf_str::putc#8 = &cputc [phi:main::@9->printf_str#0] -- pprz1=pprc1 + // [63] call printf_str + // [90] phi from main::@9 to printf_str [phi:main::@9->printf_str] + // [90] phi printf_str::putc#8 = &cputc [phi:main::@9->printf_str#0] -- pprz1=pprc1 lda #cputc sta.z printf_str.putc+1 - // [92] phi printf_str::s#8 = main::s2 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 + // [90] phi printf_str::s#8 = main::s2 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -3902,7 +3864,7 @@ main: { jsr printf_str // main::@return // } - // [66] return + // [64] return rts .segment Data s: .text "hello world!" @@ -3929,33 +3891,33 @@ gotoxy: { .label __8 = $e .label __9 = $c // if(y>CONIO_HEIGHT) - // [67] if(gotoxy::y#2<$19+1) goto gotoxy::@3 -- vbuxx_lt_vbuc1_then_la1 + // [65] if(gotoxy::y#2<$19+1) goto gotoxy::@3 -- vbuxx_lt_vbuc1_then_la1 cpx #$19+1 bcc __b2 - // [69] phi from gotoxy to gotoxy::@1 [phi:gotoxy->gotoxy::@1] - // [69] phi gotoxy::y#4 = 0 [phi:gotoxy->gotoxy::@1#0] -- vbuxx=vbuc1 + // [67] phi from gotoxy to gotoxy::@1 [phi:gotoxy->gotoxy::@1] + // [67] phi gotoxy::y#4 = 0 [phi:gotoxy->gotoxy::@1#0] -- vbuxx=vbuc1 ldx #0 - // [68] phi from gotoxy to gotoxy::@3 [phi:gotoxy->gotoxy::@3] + // [66] phi from gotoxy to gotoxy::@3 [phi:gotoxy->gotoxy::@3] // gotoxy::@3 - // [69] phi from gotoxy::@3 to gotoxy::@1 [phi:gotoxy::@3->gotoxy::@1] - // [69] phi gotoxy::y#4 = gotoxy::y#2 [phi:gotoxy::@3->gotoxy::@1#0] -- register_copy + // [67] phi from gotoxy::@3 to gotoxy::@1 [phi:gotoxy::@3->gotoxy::@1] + // [67] phi gotoxy::y#4 = gotoxy::y#2 [phi:gotoxy::@3->gotoxy::@1#0] -- register_copy // gotoxy::@1 // gotoxy::@2 __b2: // conio_cursor_x = x - // [70] conio_cursor_x = gotoxy::x#2 -- vbuz1=vbuc1 + // [68] conio_cursor_x = gotoxy::x#2 -- vbuz1=vbuc1 lda #x sta.z conio_cursor_x // conio_cursor_y = y - // [71] conio_cursor_y = gotoxy::y#4 -- vbuz1=vbuxx + // [69] conio_cursor_y = gotoxy::y#4 -- vbuz1=vbuxx stx.z conio_cursor_y // unsigned int line_offset = (unsigned int)y*CONIO_WIDTH - // [72] gotoxy::$7 = (unsigned int)gotoxy::y#4 -- vwuz1=_word_vbuxx + // [70] gotoxy::$7 = (unsigned int)gotoxy::y#4 -- vwuz1=_word_vbuxx txa sta.z __7 lda #0 sta.z __7+1 - // [73] gotoxy::$8 = gotoxy::$7 << 2 -- vwuz1=vwuz2_rol_2 + // [71] gotoxy::$8 = gotoxy::$7 << 2 -- vwuz1=vwuz2_rol_2 lda.z __7 asl sta.z __8 @@ -3964,7 +3926,7 @@ gotoxy: { sta.z __8+1 asl.z __8 rol.z __8+1 - // [74] gotoxy::$9 = gotoxy::$8 + gotoxy::$7 -- vwuz1=vwuz2_plus_vwuz1 + // [72] gotoxy::$9 = gotoxy::$8 + gotoxy::$7 -- vwuz1=vwuz2_plus_vwuz1 clc lda.z __9 adc.z __8 @@ -3972,7 +3934,7 @@ gotoxy: { lda.z __9+1 adc.z __8+1 sta.z __9+1 - // [75] gotoxy::line_offset#0 = gotoxy::$9 << 3 -- vwuz1=vwuz1_rol_3 + // [73] gotoxy::line_offset#0 = gotoxy::$9 << 3 -- vwuz1=vwuz1_rol_3 asl.z line_offset rol.z line_offset+1 asl.z line_offset @@ -3980,7 +3942,7 @@ gotoxy: { asl.z line_offset rol.z line_offset+1 // CONIO_SCREEN_TEXT + line_offset - // [76] gotoxy::$5 = DEFAULT_SCREEN + gotoxy::line_offset#0 -- pbuz1=pbuc1_plus_vwuz2 + // [74] gotoxy::$5 = DEFAULT_SCREEN + gotoxy::line_offset#0 -- pbuz1=pbuc1_plus_vwuz2 lda.z line_offset clc adc #DEFAULT_SCREEN sta.z __5+1 // conio_line_text = CONIO_SCREEN_TEXT + line_offset - // [77] conio_line_text = gotoxy::$5 -- pbuz1=pbuz2 + // [75] conio_line_text = gotoxy::$5 -- pbuz1=pbuz2 lda.z __5 sta.z conio_line_text lda.z __5+1 sta.z conio_line_text+1 // CONIO_SCREEN_COLORS + line_offset - // [78] gotoxy::$6 = COLORRAM + gotoxy::line_offset#0 -- pbuz1=pbuc1_plus_vwuz1 + // [76] gotoxy::$6 = COLORRAM + gotoxy::line_offset#0 -- pbuz1=pbuc1_plus_vwuz1 lda.z __6 clc adc #COLORRAM sta.z __6+1 // conio_line_color = CONIO_SCREEN_COLORS + line_offset - // [79] conio_line_color = gotoxy::$6 -- pbuz1=pbuz2 + // [77] conio_line_color = gotoxy::$6 -- pbuz1=pbuz2 lda.z __6 sta.z conio_line_color lda.z __6+1 sta.z conio_line_color+1 // gotoxy::@return // } - // [80] return + // [78] return rts } // cputln // Print a newline cputln: { // conio_line_text += CONIO_WIDTH - // [81] conio_line_text = conio_line_text + $28 -- pbuz1=pbuz1_plus_vbuc1 + // [79] conio_line_text = conio_line_text + $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z conio_line_text @@ -4027,7 +3989,7 @@ cputln: { inc.z conio_line_text+1 !: // conio_line_color += CONIO_WIDTH - // [82] conio_line_color = conio_line_color + $28 -- pbuz1=pbuz1_plus_vbuc1 + // [80] conio_line_color = conio_line_color + $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z conio_line_color @@ -4036,18 +3998,18 @@ cputln: { inc.z conio_line_color+1 !: // conio_cursor_x = 0 - // [83] conio_cursor_x = 0 -- vbuz1=vbuc1 + // [81] conio_cursor_x = 0 -- vbuz1=vbuc1 lda #0 sta.z conio_cursor_x // conio_cursor_y++; - // [84] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 + // [82] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 inc.z conio_cursor_y // cscroll() - // [85] call cscroll + // [83] call cscroll jsr cscroll // cputln::@return // } - // [86] return + // [84] return rts } // snprintf_init @@ -4056,25 +4018,25 @@ cputln: { snprintf_init: { .label s = $a // __snprintf_capacity = n - // [88] __snprintf_capacity = $14 -- vwuz1=vbuc1 + // [86] __snprintf_capacity = $14 -- vwum1=vbuc1 lda #<$14 - sta.z __snprintf_capacity + sta __snprintf_capacity lda #>$14 - sta.z __snprintf_capacity+1 + sta __snprintf_capacity+1 // __snprintf_size = 0 - // [89] __snprintf_size = 0 -- vwuz1=vbuc1 + // [87] __snprintf_size = 0 -- vwum1=vbuc1 lda #<0 - sta.z __snprintf_size - sta.z __snprintf_size+1 + sta __snprintf_size + sta __snprintf_size+1 // __snprintf_buffer = s - // [90] __snprintf_buffer = snprintf_init::s#2 -- pbuz1=pbuz2 + // [88] __snprintf_buffer = snprintf_init::s#2 -- pbuz1=pbuz2 lda.z s sta.z __snprintf_buffer lda.z s+1 sta.z __snprintf_buffer+1 // snprintf_init::@return // } - // [91] return + // [89] return rts } // printf_str @@ -4083,32 +4045,32 @@ snprintf_init: { printf_str: { .label s = 4 .label putc = $a - // [93] phi from printf_str printf_str::@2 to printf_str::@1 [phi:printf_str/printf_str::@2->printf_str::@1] - // [93] phi printf_str::s#7 = printf_str::s#8 [phi:printf_str/printf_str::@2->printf_str::@1#0] -- register_copy + // [91] phi from printf_str printf_str::@2 to printf_str::@1 [phi:printf_str/printf_str::@2->printf_str::@1] + // [91] phi printf_str::s#7 = printf_str::s#8 [phi:printf_str/printf_str::@2->printf_str::@1#0] -- register_copy // printf_str::@1 __b1: // while(c=*s++) - // [94] printf_str::c#1 = *printf_str::s#7 -- vbuaa=_deref_pbuz1 + // [92] printf_str::c#1 = *printf_str::s#7 -- vbuaa=_deref_pbuz1 ldy #0 lda (s),y - // [95] printf_str::s#0 = ++ printf_str::s#7 -- pbuz1=_inc_pbuz1 + // [93] printf_str::s#0 = ++ printf_str::s#7 -- pbuz1=_inc_pbuz1 inc.z s bne !+ inc.z s+1 !: - // [96] if(0!=printf_str::c#1) goto printf_str::@2 -- 0_neq_vbuaa_then_la1 + // [94] if(0!=printf_str::c#1) goto printf_str::@2 -- 0_neq_vbuaa_then_la1 cmp #0 bne __b2 // printf_str::@return // } - // [97] return + // [95] return rts // printf_str::@2 __b2: // putc(c) - // [98] stackpush(char) = printf_str::c#1 -- _stackpushbyte_=vbuaa + // [96] stackpush(char) = printf_str::c#1 -- _stackpushbyte_=vbuaa pha - // [99] callexecute *printf_str::putc#8 -- call__deref_pprz1 + // [97] callexecute *printf_str::putc#8 -- call__deref_pprz1 jsr icall4 // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla @@ -4126,79 +4088,79 @@ printf_string: { .label str = 4 // printf_string::@1 // printf_str(putc, str) - // [102] printf_str::putc#0 = printf_string::putc#10 - // [103] printf_str::s#1 = printf_string::str#10 - // [104] call printf_str - // [92] phi from printf_string::@1 to printf_str [phi:printf_string::@1->printf_str] - // [92] phi printf_str::putc#8 = printf_str::putc#0 [phi:printf_string::@1->printf_str#0] -- register_copy - // [92] phi printf_str::s#8 = printf_str::s#1 [phi:printf_string::@1->printf_str#1] -- register_copy + // [100] printf_str::putc#0 = printf_string::putc#10 + // [101] printf_str::s#1 = printf_string::str#10 + // [102] call printf_str + // [90] phi from printf_string::@1 to printf_str [phi:printf_string::@1->printf_str] + // [90] phi printf_str::putc#8 = printf_str::putc#0 [phi:printf_string::@1->printf_str#0] -- register_copy + // [90] phi printf_str::s#8 = printf_str::s#1 [phi:printf_string::@1->printf_str#1] -- register_copy jsr printf_str // printf_string::@return // } - // [105] return + // [103] return rts } // cscroll // Scroll the entire screen if the cursor is beyond the last line cscroll: { // if(conio_cursor_y==CONIO_HEIGHT) - // [106] if(conio_cursor_y!=$19) goto cscroll::@return -- vbuz1_neq_vbuc1_then_la1 + // [104] if(conio_cursor_y!=$19) goto cscroll::@return -- vbuz1_neq_vbuc1_then_la1 lda #$19 cmp.z conio_cursor_y bne __breturn - // [107] phi from cscroll to cscroll::@1 [phi:cscroll->cscroll::@1] + // [105] phi from cscroll to cscroll::@1 [phi:cscroll->cscroll::@1] // cscroll::@1 // memcpy(CONIO_SCREEN_TEXT, CONIO_SCREEN_TEXT+CONIO_WIDTH, CONIO_BYTES-CONIO_WIDTH) - // [108] call memcpy - // [119] phi from cscroll::@1 to memcpy [phi:cscroll::@1->memcpy] - // [119] phi memcpy::destination#2 = (void *)DEFAULT_SCREEN [phi:cscroll::@1->memcpy#0] -- pvoz1=pvoc1 + // [106] call memcpy + // [117] phi from cscroll::@1 to memcpy [phi:cscroll::@1->memcpy] + // [117] phi memcpy::destination#2 = (void *)DEFAULT_SCREEN [phi:cscroll::@1->memcpy#0] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN sta.z memcpy.destination+1 - // [119] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + // [117] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$28 sta.z memcpy.source+1 jsr memcpy - // [109] phi from cscroll::@1 to cscroll::@2 [phi:cscroll::@1->cscroll::@2] + // [107] phi from cscroll::@1 to cscroll::@2 [phi:cscroll::@1->cscroll::@2] // cscroll::@2 // memcpy(CONIO_SCREEN_COLORS, CONIO_SCREEN_COLORS+CONIO_WIDTH, CONIO_BYTES-CONIO_WIDTH) - // [110] call memcpy - // [119] phi from cscroll::@2 to memcpy [phi:cscroll::@2->memcpy] - // [119] phi memcpy::destination#2 = (void *)COLORRAM [phi:cscroll::@2->memcpy#0] -- pvoz1=pvoc1 + // [108] call memcpy + // [117] phi from cscroll::@2 to memcpy [phi:cscroll::@2->memcpy] + // [117] phi memcpy::destination#2 = (void *)COLORRAM [phi:cscroll::@2->memcpy#0] -- pvoz1=pvoc1 lda #COLORRAM sta.z memcpy.destination+1 - // [119] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + // [117] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 lda #COLORRAM+$28 sta.z memcpy.source+1 jsr memcpy - // [111] phi from cscroll::@2 to cscroll::@3 [phi:cscroll::@2->cscroll::@3] + // [109] phi from cscroll::@2 to cscroll::@3 [phi:cscroll::@2->cscroll::@3] // cscroll::@3 // memset(CONIO_SCREEN_TEXT+CONIO_BYTES-CONIO_WIDTH, ' ', CONIO_WIDTH) - // [112] call memset - // [129] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] - // [129] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 + // [110] call memset + // [127] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] + // [127] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuxx=vbuc1 ldx #' ' - // [129] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + // [127] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 lda #DEFAULT_SCREEN+$19*$28-$28 sta.z memset.str+1 jsr memset - // [113] phi from cscroll::@3 to cscroll::@4 [phi:cscroll::@3->cscroll::@4] + // [111] phi from cscroll::@3 to cscroll::@4 [phi:cscroll::@3->cscroll::@4] // cscroll::@4 // memset(CONIO_SCREEN_COLORS+CONIO_BYTES-CONIO_WIDTH, conio_textcolor, CONIO_WIDTH) - // [114] call memset - // [129] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] - // [129] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 + // [112] call memset + // [127] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] + // [127] phi memset::c#4 = LIGHT_BLUE [phi:cscroll::@4->memset#0] -- vbuxx=vbuc1 ldx #LIGHT_BLUE - // [129] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + // [127] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 lda #COLORRAM+$19*$28-$28 @@ -4206,7 +4168,7 @@ cscroll: { jsr memset // cscroll::@5 // conio_line_text -= CONIO_WIDTH - // [115] conio_line_text = conio_line_text - $28 -- pbuz1=pbuz1_minus_vbuc1 + // [113] conio_line_text = conio_line_text - $28 -- pbuz1=pbuz1_minus_vbuc1 sec lda.z conio_line_text sbc #$28 @@ -4215,7 +4177,7 @@ cscroll: { sbc #0 sta.z conio_line_text+1 // conio_line_color -= CONIO_WIDTH - // [116] conio_line_color = conio_line_color - $28 -- pbuz1=pbuz1_minus_vbuc1 + // [114] conio_line_color = conio_line_color - $28 -- pbuz1=pbuz1_minus_vbuc1 sec lda.z conio_line_color sbc #$28 @@ -4224,12 +4186,12 @@ cscroll: { sbc #0 sta.z conio_line_color+1 // conio_cursor_y--; - // [117] conio_cursor_y = -- conio_cursor_y -- vbuz1=_dec_vbuz1 + // [115] conio_cursor_y = -- conio_cursor_y -- vbuz1=_dec_vbuz1 dec.z conio_cursor_y // cscroll::@return __breturn: // } - // [118] return + // [116] return rts } // memcpy @@ -4243,7 +4205,7 @@ memcpy: { .label source = 2 .label destination = 6 // char* src_end = (char*)source+num - // [120] memcpy::src_end#0 = (char *)memcpy::source#2 + (unsigned int)$19*$28-$28 -- pbuz1=pbuz2_plus_vwuc1 + // [118] memcpy::src_end#0 = (char *)memcpy::source#2 + (unsigned int)$19*$28-$28 -- pbuz1=pbuz2_plus_vwuc1 lda.z source clc adc #<$19*$28-$28 @@ -4251,15 +4213,15 @@ memcpy: { lda.z source+1 adc #>$19*$28-$28 sta.z src_end+1 - // [121] memcpy::src#4 = (char *)memcpy::source#2 - // [122] memcpy::dst#4 = (char *)memcpy::destination#2 - // [123] phi from memcpy memcpy::@2 to memcpy::@1 [phi:memcpy/memcpy::@2->memcpy::@1] - // [123] phi memcpy::dst#2 = memcpy::dst#4 [phi:memcpy/memcpy::@2->memcpy::@1#0] -- register_copy - // [123] phi memcpy::src#2 = memcpy::src#4 [phi:memcpy/memcpy::@2->memcpy::@1#1] -- register_copy + // [119] memcpy::src#4 = (char *)memcpy::source#2 + // [120] memcpy::dst#4 = (char *)memcpy::destination#2 + // [121] phi from memcpy memcpy::@2 to memcpy::@1 [phi:memcpy/memcpy::@2->memcpy::@1] + // [121] phi memcpy::dst#2 = memcpy::dst#4 [phi:memcpy/memcpy::@2->memcpy::@1#0] -- register_copy + // [121] phi memcpy::src#2 = memcpy::src#4 [phi:memcpy/memcpy::@2->memcpy::@1#1] -- register_copy // memcpy::@1 __b1: // while(src!=src_end) - // [124] if(memcpy::src#2!=memcpy::src_end#0) goto memcpy::@2 -- pbuz1_neq_pbuz2_then_la1 + // [122] if(memcpy::src#2!=memcpy::src_end#0) goto memcpy::@2 -- pbuz1_neq_pbuz2_then_la1 lda.z src+1 cmp.z src_end+1 bne __b2 @@ -4268,22 +4230,22 @@ memcpy: { bne __b2 // memcpy::@return // } - // [125] return + // [123] return rts // memcpy::@2 __b2: // *dst++ = *src++ - // [126] *memcpy::dst#2 = *memcpy::src#2 -- _deref_pbuz1=_deref_pbuz2 + // [124] *memcpy::dst#2 = *memcpy::src#2 -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (src),y sta (dst),y // *dst++ = *src++; - // [127] memcpy::dst#1 = ++ memcpy::dst#2 -- pbuz1=_inc_pbuz1 + // [125] memcpy::dst#1 = ++ memcpy::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: - // [128] memcpy::src#1 = ++ memcpy::src#2 -- pbuz1=_inc_pbuz1 + // [126] memcpy::src#1 = ++ memcpy::src#2 -- pbuz1=_inc_pbuz1 inc.z src bne !+ inc.z src+1 @@ -4299,7 +4261,7 @@ memset: { .label str = 2 // memset::@1 // char* end = (char*)str + num - // [130] memset::end#0 = (char *)memset::str#3 + $28 -- pbuz1=pbuz2_plus_vbuc1 + // [128] memset::end#0 = (char *)memset::str#3 + $28 -- pbuz1=pbuz2_plus_vbuc1 lda #$28 clc adc.z str @@ -4307,13 +4269,13 @@ memset: { lda #0 adc.z str+1 sta.z end+1 - // [131] memset::dst#4 = (char *)memset::str#3 - // [132] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] - // [132] phi memset::dst#2 = memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + // [129] memset::dst#4 = (char *)memset::str#3 + // [130] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + // [130] phi memset::dst#2 = memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy // memset::@2 __b2: // for(char* dst = str; dst!=end; dst++) - // [133] if(memset::dst#2!=memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + // [131] if(memset::dst#2!=memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 lda.z dst+1 cmp.z end+1 bne __b3 @@ -4322,17 +4284,17 @@ memset: { bne __b3 // memset::@return // } - // [134] return + // [132] return rts // memset::@3 __b3: // *dst = c - // [135] *memset::dst#2 = memset::c#4 -- _deref_pbuz1=vbuxx + // [133] *memset::dst#2 = memset::c#4 -- _deref_pbuz1=vbuxx txa ldy #0 sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [136] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 + // [134] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 @@ -4343,4 +4305,10 @@ memset: { .segment Data BUF1: .fill $14, 0 BUF2: .fill $14, 0 + /// The capacity of the buffer (n passed to snprintf()) + /// Used to hold state while printing + __snprintf_capacity: .word 0 + // The number of chars that would have been filled when printing without capacity. Grows even after size>capacity. + /// Used to hold state while printing + __snprintf_size: .word 0 diff --git a/src/test/ref/printf-18.sym b/src/test/ref/printf-18.sym index e8fdc6959..fb7508f12 100644 --- a/src/test/ref/printf-18.sym +++ b/src/test/ref/printf-18.sym @@ -8,9 +8,9 @@ __constant char RADIX::DECIMAL = $a __constant char RADIX::HEXADECIMAL = $10 __constant char RADIX::OCTAL = 8 __constant unsigned int STACK_BASE = $103 -__loadstore char *__snprintf_buffer // zp[2]:22 16.916666666666664 -__loadstore volatile unsigned int __snprintf_capacity // zp[2]:28 11.730769230769232 -__loadstore volatile unsigned int __snprintf_size // zp[2]:19 20.279999999999998 +__loadstore char *__snprintf_buffer // zp[2]:20 16.916666666666664 +__loadstore volatile unsigned int __snprintf_capacity = 0 // mem[2] 11.653846153846153 +__loadstore volatile unsigned int __snprintf_size = 0 // mem[2] 20.2 void __start() void conio_c64_init() __constant char * const conio_c64_init::BASIC_CURSOR_LINE = (char *) 214 @@ -18,9 +18,9 @@ char conio_c64_init::line char conio_c64_init::line#0 // reg byte x 11.0 char conio_c64_init::line#2 // reg byte x 22.0 __loadstore char conio_cursor_x // zp[1]:18 24.799999999999997 -__loadstore char conio_cursor_y // zp[1]:21 18.608695652173914 -__loadstore char *conio_line_color // zp[2]:26 14.954545454545453 -__loadstore char *conio_line_text // zp[2]:24 15.666666666666668 +__loadstore char conio_cursor_y // zp[1]:19 18.608695652173914 +__loadstore char *conio_line_color // zp[2]:24 14.954545454545453 +__loadstore char *conio_line_text // zp[2]:22 15.666666666666668 __stackcall void cputc(char c) __constant char cputc::OFFSET_STACK_C = 0 char cputc::c @@ -115,16 +115,16 @@ zp[2]:4 [ printf_str::s#7 printf_str::s#8 printf_str::s#1 printf_str::s#0 printf zp[2]:2 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 ] reg byte x [ memset::c#4 ] zp[1]:18 [ conio_cursor_x ] -zp[1]:21 [ conio_cursor_y ] -zp[2]:24 [ conio_line_text ] -zp[2]:26 [ conio_line_color ] -zp[2]:28 [ __snprintf_capacity ] -zp[2]:19 [ __snprintf_size ] -zp[2]:22 [ __snprintf_buffer ] +zp[1]:19 [ conio_cursor_y ] +zp[2]:22 [ conio_line_text ] +zp[2]:24 [ conio_line_color ] +zp[2]:20 [ __snprintf_buffer ] +mem[2] [ __snprintf_size ] reg byte a [ cputc::c#0 ] zp[2]:12 [ gotoxy::$7 gotoxy::$9 gotoxy::line_offset#0 gotoxy::$6 ] zp[2]:14 [ gotoxy::$8 ] zp[2]:16 [ gotoxy::$5 ] +mem[2] [ __snprintf_capacity ] reg byte a [ printf_str::c#1 ] zp[2]:8 [ memcpy::src_end#0 ] zp[2]:6 [ memset::end#0 memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] diff --git a/src/test/ref/printf-19.asm b/src/test/ref/printf-19.asm index 7ef26f82a..da6e0d6e8 100644 --- a/src/test/ref/printf-19.asm +++ b/src/test/ref/printf-19.asm @@ -15,26 +15,14 @@ .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 .const STACK_BASE = $103 .const SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c - /// The capacity of the buffer (n passed to snprintf()) - /// Used to hold state while printing - .label __snprintf_capacity = $20 - // The number of chars that would have been filled when printing without capacity. Grows even after size>capacity. - /// Used to hold state while printing - .label __snprintf_size = $1c /// Current position in the buffer being filled ( initially *s passed to snprintf() /// Used to hold state while printing - .label __snprintf_buffer = $1e + .label __snprintf_buffer = $1c .label screen = $17 .segment Code __start: { - // volatile size_t __snprintf_capacity - lda #<0 - sta.z __snprintf_capacity - sta.z __snprintf_capacity+1 - // volatile size_t __snprintf_size - sta.z __snprintf_size - sta.z __snprintf_size+1 // char * __snprintf_buffer + lda #<0 sta.z __snprintf_buffer sta.z __snprintf_buffer+1 jsr main @@ -50,16 +38,16 @@ snputc: { lda STACK_BASE+OFFSET_STACK_C,x tax // ++__snprintf_size; - inc.z __snprintf_size + inc __snprintf_size bne !+ - inc.z __snprintf_size+1 + inc __snprintf_size+1 !: // if(__snprintf_size > __snprintf_capacity) - lda.z __snprintf_size+1 - cmp.z __snprintf_capacity+1 + lda __snprintf_size+1 + cmp __snprintf_capacity+1 bne !+ - lda.z __snprintf_size - cmp.z __snprintf_capacity + lda __snprintf_size + cmp __snprintf_capacity beq __b1 !: bcc __b1 @@ -67,11 +55,11 @@ snputc: { rts __b1: // if(__snprintf_size==__snprintf_capacity) - lda.z __snprintf_size+1 - cmp.z __snprintf_capacity+1 + lda __snprintf_size+1 + cmp __snprintf_capacity+1 bne __b2 - lda.z __snprintf_size - cmp.z __snprintf_capacity + lda __snprintf_size + cmp __snprintf_capacity bne __b2 ldx #0 __b2: @@ -244,13 +232,13 @@ main: { snprintf_init: { // __snprintf_capacity = n lda #<$ffff - sta.z __snprintf_capacity + sta __snprintf_capacity lda #>$ffff - sta.z __snprintf_capacity+1 + sta __snprintf_capacity+1 // __snprintf_size = 0 lda #<0 - sta.z __snprintf_size - sta.z __snprintf_size+1 + sta __snprintf_size + sta __snprintf_size+1 // __snprintf_buffer = s lda #capacity. + /// Used to hold state while printing + __snprintf_size: .word 0 diff --git a/src/test/ref/printf-19.cfg b/src/test/ref/printf-19.cfg index d479aca8f..42a1a2513 100644 --- a/src/test/ref/printf-19.cfg +++ b/src/test/ref/printf-19.cfg @@ -4,562 +4,560 @@ __start: scope:[__start] from [0] phi() to:__start::__init1 __start::__init1: scope:[__start] from __start - [1] __snprintf_capacity = 0 - [2] __snprintf_size = 0 - [3] __snprintf_buffer = (char *) 0 + [1] __snprintf_buffer = (char *) 0 to:__start::@1 __start::@1: scope:[__start] from __start::__init1 - [4] phi() - [5] call main + [2] phi() + [3] call main to:__start::@return __start::@return: scope:[__start] from __start::@1 - [6] return + [4] return to:@return __stackcall void snputc(char c) snputc: scope:[snputc] from - [7] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) - [8] __snprintf_size = ++ __snprintf_size - [9] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 + [5] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) + [6] __snprintf_size = ++ __snprintf_size + [7] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 to:snputc::@return snputc::@return: scope:[snputc] from snputc snputc::@2 - [10] return + [8] return to:@return snputc::@1: scope:[snputc] from snputc - [11] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 + [9] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 to:snputc::@2 snputc::@3: scope:[snputc] from snputc::@1 - [12] phi() + [10] phi() to:snputc::@2 snputc::@2: scope:[snputc] from snputc::@1 snputc::@3 - [13] snputc::c#2 = phi( snputc::@3/snputc::c#0, snputc::@1/0 ) - [14] *__snprintf_buffer = snputc::c#2 - [15] __snprintf_buffer = ++ __snprintf_buffer + [11] snputc::c#2 = phi( snputc::@3/snputc::c#0, snputc::@1/0 ) + [12] *__snprintf_buffer = snputc::c#2 + [13] __snprintf_buffer = ++ __snprintf_buffer to:snputc::@return void main() main: scope:[main] from __start::@1 - [16] phi() - [17] call snprintf_init + [14] phi() + [15] call snprintf_init to:main::@1 main::@1: scope:[main] from main - [18] phi() - [19] call printf_str + [16] phi() + [17] call printf_str to:main::@2 main::@2: scope:[main] from main::@1 - [20] stackpush(char) = 0 - [21] callexecute snputc + [18] stackpush(char) = 0 + [19] callexecute snputc sideeffect stackpullpadding(1) - [23] call print + [21] call print to:main::@3 main::@3: scope:[main] from main::@2 - [24] phi() - [25] call snprintf_init + [22] phi() + [23] call snprintf_init to:main::@4 main::@4: scope:[main] from main::@3 - [26] phi() - [27] call printf_str + [24] phi() + [25] call printf_str to:main::@5 main::@5: scope:[main] from main::@4 - [28] phi() - [29] call printf_string + [26] phi() + [27] call printf_string to:main::@6 main::@6: scope:[main] from main::@5 - [30] stackpush(char) = '!' - [31] callexecute snputc + [28] stackpush(char) = '!' + [29] callexecute snputc sideeffect stackpullpadding(1) - [33] call printf_str + [31] call printf_str to:main::@7 main::@7: scope:[main] from main::@6 - [34] stackpush(char) = 0 - [35] callexecute snputc + [32] stackpush(char) = 0 + [33] callexecute snputc sideeffect stackpullpadding(1) - [37] call print + [35] call print to:main::@8 main::@8: scope:[main] from main::@7 - [38] phi() - [39] call snprintf_init + [36] phi() + [37] call snprintf_init to:main::@9 main::@9: scope:[main] from main::@8 - [40] phi() - [41] call printf_str + [38] phi() + [39] call printf_str to:main::@10 main::@10: scope:[main] from main::@9 - [42] phi() - [43] call printf_sint + [40] phi() + [41] call printf_sint to:main::@11 main::@11: scope:[main] from main::@10 - [44] phi() - [45] call printf_str + [42] phi() + [43] call printf_str to:main::@12 main::@12: scope:[main] from main::@11 - [46] phi() - [47] call printf_uint + [44] phi() + [45] call printf_uint to:main::@13 main::@13: scope:[main] from main::@12 - [48] phi() - [49] call printf_str + [46] phi() + [47] call printf_str to:main::@14 main::@14: scope:[main] from main::@13 - [50] stackpush(char) = 0 - [51] callexecute snputc + [48] stackpush(char) = 0 + [49] callexecute snputc sideeffect stackpullpadding(1) - [53] call print + [51] call print to:main::@15 main::@15: scope:[main] from main::@14 - [54] phi() - [55] call snprintf_init + [52] phi() + [53] call snprintf_init to:main::@16 main::@16: scope:[main] from main::@15 - [56] phi() - [57] call printf_str + [54] phi() + [55] call printf_str to:main::@17 main::@17: scope:[main] from main::@16 - [58] phi() - [59] call printf_slong + [56] phi() + [57] call printf_slong to:main::@18 main::@18: scope:[main] from main::@17 - [60] phi() - [61] call printf_str + [58] phi() + [59] call printf_str to:main::@19 main::@19: scope:[main] from main::@18 - [62] stackpush(char) = 0 - [63] callexecute snputc + [60] stackpush(char) = 0 + [61] callexecute snputc sideeffect stackpullpadding(1) - [65] call print + [63] call print to:main::@return main::@return: scope:[main] from main::@19 - [66] return + [64] return to:@return void snprintf_init(char *s , unsigned int n) snprintf_init: scope:[snprintf_init] from main main::@15 main::@3 main::@8 - [67] __snprintf_capacity = $ffff - [68] __snprintf_size = 0 - [69] __snprintf_buffer = BUF + [65] __snprintf_capacity = $ffff + [66] __snprintf_size = 0 + [67] __snprintf_buffer = BUF to:snprintf_init::@return snprintf_init::@return: scope:[snprintf_init] from snprintf_init - [70] return + [68] return to:@return void printf_str(void (*putc)(char) , const char *s) printf_str: scope:[printf_str] from main::@1 main::@11 main::@13 main::@16 main::@18 main::@4 main::@6 main::@9 printf_number_buffer::@5 printf_string::@1 - [71] printf_str::putc#12 = phi( main::@1/&snputc, main::@11/&snputc, main::@13/&snputc, main::@16/&snputc, main::@18/&snputc, main::@4/&snputc, main::@6/&snputc, main::@9/&snputc, printf_number_buffer::@5/printf_str::putc#0, printf_string::@1/printf_string::putc#0 ) - [71] printf_str::s#12 = phi( main::@1/main::s, main::@11/main::s4, main::@13/main::s5, main::@16/main::s6, main::@18/main::s5, main::@4/main::s1, main::@6/main::s2, main::@9/main::s1, printf_number_buffer::@5/(char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS, printf_string::@1/main::str ) + [69] printf_str::putc#12 = phi( main::@1/&snputc, main::@11/&snputc, main::@13/&snputc, main::@16/&snputc, main::@18/&snputc, main::@4/&snputc, main::@6/&snputc, main::@9/&snputc, printf_number_buffer::@5/printf_str::putc#0, printf_string::@1/printf_string::putc#0 ) + [69] printf_str::s#12 = phi( main::@1/main::s, main::@11/main::s4, main::@13/main::s5, main::@16/main::s6, main::@18/main::s5, main::@4/main::s1, main::@6/main::s2, main::@9/main::s1, printf_number_buffer::@5/(char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS, printf_string::@1/main::str ) to:printf_str::@1 printf_str::@1: scope:[printf_str] from printf_str printf_str::@2 - [72] printf_str::s#11 = phi( printf_str/printf_str::s#12, printf_str::@2/printf_str::s#0 ) - [73] printf_str::c#1 = *printf_str::s#11 - [74] printf_str::s#0 = ++ printf_str::s#11 - [75] if(0!=printf_str::c#1) goto printf_str::@2 + [70] printf_str::s#11 = phi( printf_str/printf_str::s#12, printf_str::@2/printf_str::s#0 ) + [71] printf_str::c#1 = *printf_str::s#11 + [72] printf_str::s#0 = ++ printf_str::s#11 + [73] if(0!=printf_str::c#1) goto printf_str::@2 to:printf_str::@return printf_str::@return: scope:[printf_str] from printf_str::@1 - [76] return + [74] return to:@return printf_str::@2: scope:[printf_str] from printf_str::@1 - [77] stackpush(char) = printf_str::c#1 - [78] callexecute *printf_str::putc#12 + [75] stackpush(char) = printf_str::c#1 + [76] callexecute *printf_str::putc#12 sideeffect stackpullpadding(1) to:printf_str::@1 void print(char *msg) print: scope:[print] from main::@14 main::@19 main::@2 main::@7 - [80] screen#25 = phi( main::@14/screen#1, main::@19/screen#1, main::@2/(char *) 1024, main::@7/screen#1 ) + [78] screen#25 = phi( main::@14/screen#1, main::@19/screen#1, main::@2/(char *) 1024, main::@7/screen#1 ) to:print::@1 print::@1: scope:[print] from print print::@2 - [81] screen#1 = phi( print/screen#25, print::@2/screen#0 ) - [81] print::msg#5 = phi( print/BUF, print::@2/print::msg#0 ) - [82] if(0!=*print::msg#5) goto print::@2 + [79] screen#1 = phi( print/screen#25, print::@2/screen#0 ) + [79] print::msg#5 = phi( print/BUF, print::@2/print::msg#0 ) + [80] if(0!=*print::msg#5) goto print::@2 to:print::@return print::@return: scope:[print] from print::@1 - [83] return + [81] return to:@return print::@2: scope:[print] from print::@1 - [84] *screen#1 = *print::msg#5 - [85] screen#0 = ++ screen#1 - [86] print::msg#0 = ++ print::msg#5 + [82] *screen#1 = *print::msg#5 + [83] screen#0 = ++ screen#1 + [84] print::msg#0 = ++ print::msg#5 to:print::@1 void printf_string(void (*putc)(char) , char *str , char format_min_length , char format_justify_left) printf_string: scope:[printf_string] from main::@5 - [87] phi() + [85] phi() to:printf_string::@1 printf_string::@1: scope:[printf_string] from printf_string - [88] phi() - [89] call printf_str + [86] phi() + [87] call printf_str to:printf_string::@return printf_string::@return: scope:[printf_string] from printf_string::@1 - [90] return + [88] return to:@return void printf_sint(void (*putc)(char) , int value , char format_min_length , char format_justify_left , char format_sign_always , char format_zero_padding , char format_upper_case , char format_radix) printf_sint: scope:[printf_sint] from main::@10 - [91] *((char *)&printf_buffer) = 0 + [89] *((char *)&printf_buffer) = 0 to:printf_sint::@1 printf_sint::@1: scope:[printf_sint] from printf_sint - [92] phi() - [93] call utoa + [90] phi() + [91] call utoa to:printf_sint::@2 printf_sint::@2: scope:[printf_sint] from printf_sint::@1 - [94] printf_number_buffer::buffer_sign#1 = *((char *)&printf_buffer) - [95] call printf_number_buffer + [92] printf_number_buffer::buffer_sign#1 = *((char *)&printf_buffer) + [93] call printf_number_buffer to:printf_sint::@return printf_sint::@return: scope:[printf_sint] from printf_sint::@2 - [96] return + [94] return to:@return void printf_uint(void (*putc)(char) , unsigned int uvalue , char format_min_length , char format_justify_left , char format_sign_always , char format_zero_padding , char format_upper_case , char format_radix) printf_uint: scope:[printf_uint] from main::@12 - [97] phi() + [95] phi() to:printf_uint::@1 printf_uint::@1: scope:[printf_uint] from printf_uint - [98] *((char *)&printf_buffer) = 0 - [99] call utoa + [96] *((char *)&printf_buffer) = 0 + [97] call utoa to:printf_uint::@2 printf_uint::@2: scope:[printf_uint] from printf_uint::@1 - [100] printf_number_buffer::buffer_sign#2 = *((char *)&printf_buffer) - [101] call printf_number_buffer + [98] printf_number_buffer::buffer_sign#2 = *((char *)&printf_buffer) + [99] call printf_number_buffer to:printf_uint::@return printf_uint::@return: scope:[printf_uint] from printf_uint::@2 - [102] return + [100] return to:@return void printf_slong(void (*putc)(char) , long value , char format_min_length , char format_justify_left , char format_sign_always , char format_zero_padding , char format_upper_case , char format_radix) printf_slong: scope:[printf_slong] from main::@17 - [103] *((char *)&printf_buffer) = 0 + [101] *((char *)&printf_buffer) = 0 to:printf_slong::@1 printf_slong::@1: scope:[printf_slong] from printf_slong - [104] phi() - [105] call ultoa + [102] phi() + [103] call ultoa to:printf_slong::@2 printf_slong::@2: scope:[printf_slong] from printf_slong::@1 - [106] printf_number_buffer::buffer_sign#0 = *((char *)&printf_buffer) - [107] call printf_number_buffer + [104] printf_number_buffer::buffer_sign#0 = *((char *)&printf_buffer) + [105] call printf_number_buffer to:printf_slong::@return printf_slong::@return: scope:[printf_slong] from printf_slong::@2 - [108] return + [106] return to:@return void utoa(unsigned int value , char *buffer , char radix) utoa: scope:[utoa] from printf_sint::@1 printf_uint::@1 - [109] utoa::value#10 = phi( printf_sint::@1/printf_sint::uvalue#0, printf_uint::@1/printf_uint::uvalue#0 ) - [109] utoa::radix#2 = phi( printf_sint::@1/DECIMAL, printf_uint::@1/HEXADECIMAL ) - [110] if(utoa::radix#2==DECIMAL) goto utoa::@1 + [107] utoa::value#10 = phi( printf_sint::@1/printf_sint::uvalue#0, printf_uint::@1/printf_uint::uvalue#0 ) + [107] utoa::radix#2 = phi( printf_sint::@1/DECIMAL, printf_uint::@1/HEXADECIMAL ) + [108] if(utoa::radix#2==DECIMAL) goto utoa::@1 to:utoa::@2 utoa::@2: scope:[utoa] from utoa - [111] if(utoa::radix#2==HEXADECIMAL) goto utoa::@1 + [109] if(utoa::radix#2==HEXADECIMAL) goto utoa::@1 to:utoa::@3 utoa::@3: scope:[utoa] from utoa::@2 - [112] if(utoa::radix#2==OCTAL) goto utoa::@1 + [110] if(utoa::radix#2==OCTAL) goto utoa::@1 to:utoa::@4 utoa::@4: scope:[utoa] from utoa::@3 - [113] if(utoa::radix#2==BINARY) goto utoa::@1 + [111] if(utoa::radix#2==BINARY) goto utoa::@1 to:utoa::@5 utoa::@5: scope:[utoa] from utoa::@4 - [114] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS) = 'e' - [115] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1) = 'r' - [116] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2) = 'r' - [117] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3) = 0 + [112] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS) = 'e' + [113] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1) = 'r' + [114] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2) = 'r' + [115] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3) = 0 to:utoa::@return utoa::@return: scope:[utoa] from utoa::@5 utoa::@8 - [118] return + [116] return to:@return utoa::@1: scope:[utoa] from utoa utoa::@2 utoa::@3 utoa::@4 - [119] utoa::digit_values#8 = phi( utoa/RADIX_DECIMAL_VALUES, utoa::@2/RADIX_HEXADECIMAL_VALUES, utoa::@3/RADIX_OCTAL_VALUES, utoa::@4/RADIX_BINARY_VALUES ) - [119] utoa::max_digits#7 = phi( utoa/5, utoa::@2/4, utoa::@3/6, utoa::@4/$10 ) + [117] utoa::digit_values#8 = phi( utoa/RADIX_DECIMAL_VALUES, utoa::@2/RADIX_HEXADECIMAL_VALUES, utoa::@3/RADIX_OCTAL_VALUES, utoa::@4/RADIX_BINARY_VALUES ) + [117] utoa::max_digits#7 = phi( utoa/5, utoa::@2/4, utoa::@3/6, utoa::@4/$10 ) to:utoa::@6 utoa::@6: scope:[utoa] from utoa::@1 utoa::@9 - [120] utoa::buffer#10 = phi( utoa::@9/utoa::buffer#15, utoa::@1/(char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS ) - [120] utoa::started#2 = phi( utoa::@9/utoa::started#4, utoa::@1/0 ) - [120] utoa::value#3 = phi( utoa::@9/utoa::value#7, utoa::@1/utoa::value#10 ) - [120] utoa::digit#2 = phi( utoa::@9/utoa::digit#1, utoa::@1/0 ) - [121] utoa::$4 = utoa::max_digits#7 - 1 - [122] if(utoa::digit#2=utoa::digit_value#0) goto utoa::@10 + [128] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@10 to:utoa::@9 utoa::@9: scope:[utoa] from utoa::@11 utoa::@12 - [131] utoa::buffer#15 = phi( utoa::@12/utoa::buffer#10, utoa::@11/utoa::buffer#4 ) - [131] utoa::started#4 = phi( utoa::@12/utoa::started#2, utoa::@11/1 ) - [131] utoa::value#7 = phi( utoa::@12/utoa::value#3, utoa::@11/utoa::value#0 ) - [132] utoa::digit#1 = ++ utoa::digit#2 + [129] utoa::buffer#15 = phi( utoa::@12/utoa::buffer#10, utoa::@11/utoa::buffer#4 ) + [129] utoa::started#4 = phi( utoa::@12/utoa::started#2, utoa::@11/1 ) + [129] utoa::value#7 = phi( utoa::@12/utoa::value#3, utoa::@11/utoa::value#0 ) + [130] utoa::digit#1 = ++ utoa::digit#2 to:utoa::@6 utoa::@10: scope:[utoa] from utoa::@12 utoa::@7 - [133] utoa_append::buffer#0 = utoa::buffer#10 - [134] utoa_append::value#0 = utoa::value#3 - [135] utoa_append::sub#0 = utoa::digit_value#0 - [136] call utoa_append - [137] utoa_append::return#0 = utoa_append::value#2 + [131] utoa_append::buffer#0 = utoa::buffer#10 + [132] utoa_append::value#0 = utoa::value#3 + [133] utoa_append::sub#0 = utoa::digit_value#0 + [134] call utoa_append + [135] utoa_append::return#0 = utoa_append::value#2 to:utoa::@11 utoa::@11: scope:[utoa] from utoa::@10 - [138] utoa::value#0 = utoa_append::return#0 - [139] utoa::buffer#4 = ++ utoa::buffer#10 + [136] utoa::value#0 = utoa_append::return#0 + [137] utoa::buffer#4 = ++ utoa::buffer#10 to:utoa::@9 void printf_number_buffer(void (*putc)(char) , char buffer_sign , char *buffer_digits , char format_min_length , char format_justify_left , char format_sign_always , char format_zero_padding , char format_upper_case , char format_radix) printf_number_buffer: scope:[printf_number_buffer] from printf_sint::@2 printf_slong::@2 printf_uint::@2 - [140] printf_number_buffer::format_upper_case#10 = phi( printf_sint::@2/printf_sint::format_upper_case#0, printf_slong::@2/printf_slong::format_upper_case#0, printf_uint::@2/printf_uint::format_upper_case#0 ) - [140] printf_number_buffer::putc#10 = phi( printf_sint::@2/printf_sint::putc#0, printf_slong::@2/printf_slong::putc#0, printf_uint::@2/printf_uint::putc#0 ) - [140] printf_number_buffer::buffer_sign#10 = phi( printf_sint::@2/printf_number_buffer::buffer_sign#1, printf_slong::@2/printf_number_buffer::buffer_sign#0, printf_uint::@2/printf_number_buffer::buffer_sign#2 ) - [140] printf_number_buffer::format_zero_padding#10 = phi( printf_sint::@2/printf_sint::format_zero_padding#0, printf_slong::@2/printf_slong::format_zero_padding#0, printf_uint::@2/printf_uint::format_zero_padding#0 ) - [140] printf_number_buffer::format_justify_left#10 = phi( printf_sint::@2/printf_sint::format_justify_left#0, printf_slong::@2/printf_slong::format_justify_left#0, printf_uint::@2/printf_uint::format_justify_left#0 ) - [140] printf_number_buffer::format_min_length#3 = phi( printf_sint::@2/printf_sint::format_min_length#0, printf_slong::@2/printf_slong::format_min_length#0, printf_uint::@2/printf_uint::format_min_length#0 ) - [141] if(0==printf_number_buffer::format_min_length#3) goto printf_number_buffer::@1 + [138] printf_number_buffer::format_upper_case#10 = phi( printf_sint::@2/printf_sint::format_upper_case#0, printf_slong::@2/printf_slong::format_upper_case#0, printf_uint::@2/printf_uint::format_upper_case#0 ) + [138] printf_number_buffer::putc#10 = phi( printf_sint::@2/printf_sint::putc#0, printf_slong::@2/printf_slong::putc#0, printf_uint::@2/printf_uint::putc#0 ) + [138] printf_number_buffer::buffer_sign#10 = phi( printf_sint::@2/printf_number_buffer::buffer_sign#1, printf_slong::@2/printf_number_buffer::buffer_sign#0, printf_uint::@2/printf_number_buffer::buffer_sign#2 ) + [138] printf_number_buffer::format_zero_padding#10 = phi( printf_sint::@2/printf_sint::format_zero_padding#0, printf_slong::@2/printf_slong::format_zero_padding#0, printf_uint::@2/printf_uint::format_zero_padding#0 ) + [138] printf_number_buffer::format_justify_left#10 = phi( printf_sint::@2/printf_sint::format_justify_left#0, printf_slong::@2/printf_slong::format_justify_left#0, printf_uint::@2/printf_uint::format_justify_left#0 ) + [138] printf_number_buffer::format_min_length#3 = phi( printf_sint::@2/printf_sint::format_min_length#0, printf_slong::@2/printf_slong::format_min_length#0, printf_uint::@2/printf_uint::format_min_length#0 ) + [139] if(0==printf_number_buffer::format_min_length#3) goto printf_number_buffer::@1 to:printf_number_buffer::@6 printf_number_buffer::@6: scope:[printf_number_buffer] from printf_number_buffer - [142] phi() - [143] call strlen - [144] strlen::return#2 = strlen::len#2 + [140] phi() + [141] call strlen + [142] strlen::return#2 = strlen::len#2 to:printf_number_buffer::@14 printf_number_buffer::@14: scope:[printf_number_buffer] from printf_number_buffer::@6 - [145] printf_number_buffer::$19 = strlen::return#2 - [146] printf_number_buffer::len#0 = (signed char)printf_number_buffer::$19 - [147] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 + [143] printf_number_buffer::$19 = strlen::return#2 + [144] printf_number_buffer::len#0 = (signed char)printf_number_buffer::$19 + [145] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 to:printf_number_buffer::@7 printf_number_buffer::@7: scope:[printf_number_buffer] from printf_number_buffer::@14 - [148] printf_number_buffer::len#1 = ++ printf_number_buffer::len#0 + [146] printf_number_buffer::len#1 = ++ printf_number_buffer::len#0 to:printf_number_buffer::@13 printf_number_buffer::@13: scope:[printf_number_buffer] from printf_number_buffer::@14 printf_number_buffer::@7 - [149] printf_number_buffer::len#2 = phi( printf_number_buffer::@14/printf_number_buffer::len#0, printf_number_buffer::@7/printf_number_buffer::len#1 ) - [150] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#3 - printf_number_buffer::len#2 - [151] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 + [147] printf_number_buffer::len#2 = phi( printf_number_buffer::@14/printf_number_buffer::len#0, printf_number_buffer::@7/printf_number_buffer::len#1 ) + [148] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#3 - printf_number_buffer::len#2 + [149] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 to:printf_number_buffer::@1 printf_number_buffer::@21: scope:[printf_number_buffer] from printf_number_buffer::@13 - [152] phi() + [150] phi() to:printf_number_buffer::@1 printf_number_buffer::@1: scope:[printf_number_buffer] from printf_number_buffer printf_number_buffer::@13 printf_number_buffer::@21 - [153] printf_number_buffer::padding#10 = phi( printf_number_buffer/0, printf_number_buffer::@21/printf_number_buffer::padding#1, printf_number_buffer::@13/0 ) - [154] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 + [151] printf_number_buffer::padding#10 = phi( printf_number_buffer/0, printf_number_buffer::@21/printf_number_buffer::padding#1, printf_number_buffer::@13/0 ) + [152] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 to:printf_number_buffer::@17 printf_number_buffer::@17: scope:[printf_number_buffer] from printf_number_buffer::@1 - [155] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 + [153] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 to:printf_number_buffer::@16 printf_number_buffer::@16: scope:[printf_number_buffer] from printf_number_buffer::@17 - [156] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 + [154] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 to:printf_number_buffer::@2 printf_number_buffer::@8: scope:[printf_number_buffer] from printf_number_buffer::@16 - [157] printf_padding::putc#0 = printf_number_buffer::putc#10 - [158] printf_padding::length#0 = (char)printf_number_buffer::padding#10 - [159] call printf_padding + [155] printf_padding::putc#0 = printf_number_buffer::putc#10 + [156] printf_padding::length#0 = (char)printf_number_buffer::padding#10 + [157] call printf_padding to:printf_number_buffer::@2 printf_number_buffer::@2: scope:[printf_number_buffer] from printf_number_buffer::@1 printf_number_buffer::@16 printf_number_buffer::@17 printf_number_buffer::@8 - [160] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 + [158] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 to:printf_number_buffer::@9 printf_number_buffer::@9: scope:[printf_number_buffer] from printf_number_buffer::@2 - [161] stackpush(char) = printf_number_buffer::buffer_sign#10 - [162] callexecute *printf_number_buffer::putc#10 + [159] stackpush(char) = printf_number_buffer::buffer_sign#10 + [160] callexecute *printf_number_buffer::putc#10 sideeffect stackpullpadding(1) to:printf_number_buffer::@3 printf_number_buffer::@3: scope:[printf_number_buffer] from printf_number_buffer::@2 printf_number_buffer::@9 - [164] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 + [162] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 to:printf_number_buffer::@18 printf_number_buffer::@18: scope:[printf_number_buffer] from printf_number_buffer::@3 - [165] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 + [163] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 to:printf_number_buffer::@4 printf_number_buffer::@10: scope:[printf_number_buffer] from printf_number_buffer::@18 - [166] printf_padding::putc#1 = printf_number_buffer::putc#10 - [167] printf_padding::length#1 = (char)printf_number_buffer::padding#10 - [168] call printf_padding + [164] printf_padding::putc#1 = printf_number_buffer::putc#10 + [165] printf_padding::length#1 = (char)printf_number_buffer::padding#10 + [166] call printf_padding to:printf_number_buffer::@4 printf_number_buffer::@4: scope:[printf_number_buffer] from printf_number_buffer::@10 printf_number_buffer::@18 printf_number_buffer::@3 - [169] if(0==printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 + [167] if(0==printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 to:printf_number_buffer::@11 printf_number_buffer::@11: scope:[printf_number_buffer] from printf_number_buffer::@4 - [170] phi() - [171] call strupr + [168] phi() + [169] call strupr to:printf_number_buffer::@5 printf_number_buffer::@5: scope:[printf_number_buffer] from printf_number_buffer::@11 printf_number_buffer::@4 - [172] printf_str::putc#0 = printf_number_buffer::putc#10 - [173] call printf_str + [170] printf_str::putc#0 = printf_number_buffer::putc#10 + [171] call printf_str to:printf_number_buffer::@15 printf_number_buffer::@15: scope:[printf_number_buffer] from printf_number_buffer::@5 - [174] if(0==printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return + [172] if(0==printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return to:printf_number_buffer::@20 printf_number_buffer::@20: scope:[printf_number_buffer] from printf_number_buffer::@15 - [175] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return + [173] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return to:printf_number_buffer::@19 printf_number_buffer::@19: scope:[printf_number_buffer] from printf_number_buffer::@20 - [176] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 + [174] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 to:printf_number_buffer::@return printf_number_buffer::@12: scope:[printf_number_buffer] from printf_number_buffer::@19 - [177] printf_padding::putc#2 = printf_number_buffer::putc#10 - [178] printf_padding::length#2 = (char)printf_number_buffer::padding#10 - [179] call printf_padding + [175] printf_padding::putc#2 = printf_number_buffer::putc#10 + [176] printf_padding::length#2 = (char)printf_number_buffer::padding#10 + [177] call printf_padding to:printf_number_buffer::@return printf_number_buffer::@return: scope:[printf_number_buffer] from printf_number_buffer::@12 printf_number_buffer::@15 printf_number_buffer::@19 printf_number_buffer::@20 - [180] return + [178] return to:@return void ultoa(unsigned long value , char *buffer , char radix) ultoa: scope:[ultoa] from printf_slong::@1 - [181] phi() + [179] phi() to:ultoa::@1 ultoa::@1: scope:[ultoa] from ultoa ultoa::@4 - [182] ultoa::buffer#11 = phi( ultoa::@4/ultoa::buffer#14, ultoa/(char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS ) - [182] ultoa::started#2 = phi( ultoa::@4/ultoa::started#4, ultoa/0 ) - [182] ultoa::value#2 = phi( ultoa::@4/ultoa::value#6, ultoa/printf_slong::uvalue#0 ) - [182] ultoa::digit#2 = phi( ultoa::@4/ultoa::digit#1, ultoa/0 ) - [183] if(ultoa::digit#2=ultoa::digit_value#0) goto ultoa::@5 + [190] if(ultoa::value#2>=ultoa::digit_value#0) goto ultoa::@5 to:ultoa::@4 ultoa::@4: scope:[ultoa] from ultoa::@6 ultoa::@7 - [193] ultoa::buffer#14 = phi( ultoa::@7/ultoa::buffer#11, ultoa::@6/ultoa::buffer#4 ) - [193] ultoa::started#4 = phi( ultoa::@7/ultoa::started#2, ultoa::@6/1 ) - [193] ultoa::value#6 = phi( ultoa::@7/ultoa::value#2, ultoa::@6/ultoa::value#0 ) - [194] ultoa::digit#1 = ++ ultoa::digit#2 + [191] ultoa::buffer#14 = phi( ultoa::@7/ultoa::buffer#11, ultoa::@6/ultoa::buffer#4 ) + [191] ultoa::started#4 = phi( ultoa::@7/ultoa::started#2, ultoa::@6/1 ) + [191] ultoa::value#6 = phi( ultoa::@7/ultoa::value#2, ultoa::@6/ultoa::value#0 ) + [192] ultoa::digit#1 = ++ ultoa::digit#2 to:ultoa::@1 ultoa::@5: scope:[ultoa] from ultoa::@2 ultoa::@7 - [195] ultoa_append::buffer#0 = ultoa::buffer#11 - [196] ultoa_append::value#0 = ultoa::value#2 - [197] ultoa_append::sub#0 = ultoa::digit_value#0 - [198] call ultoa_append - [199] ultoa_append::return#0 = ultoa_append::value#2 + [193] ultoa_append::buffer#0 = ultoa::buffer#11 + [194] ultoa_append::value#0 = ultoa::value#2 + [195] ultoa_append::sub#0 = ultoa::digit_value#0 + [196] call ultoa_append + [197] ultoa_append::return#0 = ultoa_append::value#2 to:ultoa::@6 ultoa::@6: scope:[ultoa] from ultoa::@5 - [200] ultoa::value#0 = ultoa_append::return#0 - [201] ultoa::buffer#4 = ++ ultoa::buffer#11 + [198] ultoa::value#0 = ultoa_append::return#0 + [199] ultoa::buffer#4 = ++ ultoa::buffer#11 to:ultoa::@4 unsigned int utoa_append(char *buffer , unsigned int value , unsigned int sub) utoa_append: scope:[utoa_append] from utoa::@10 - [202] phi() + [200] phi() to:utoa_append::@1 utoa_append::@1: scope:[utoa_append] from utoa_append utoa_append::@2 - [203] utoa_append::digit#2 = phi( utoa_append/0, utoa_append::@2/utoa_append::digit#1 ) - [203] utoa_append::value#2 = phi( utoa_append/utoa_append::value#0, utoa_append::@2/utoa_append::value#1 ) - [204] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 + [201] utoa_append::digit#2 = phi( utoa_append/0, utoa_append::@2/utoa_append::digit#1 ) + [201] utoa_append::value#2 = phi( utoa_append/utoa_append::value#0, utoa_append::@2/utoa_append::value#1 ) + [202] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 to:utoa_append::@3 utoa_append::@3: scope:[utoa_append] from utoa_append::@1 - [205] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] + [203] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] to:utoa_append::@return utoa_append::@return: scope:[utoa_append] from utoa_append::@3 - [206] return + [204] return to:@return utoa_append::@2: scope:[utoa_append] from utoa_append::@1 - [207] utoa_append::digit#1 = ++ utoa_append::digit#2 - [208] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 + [205] utoa_append::digit#1 = ++ utoa_append::digit#2 + [206] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 to:utoa_append::@1 unsigned int strlen(char *str) strlen: scope:[strlen] from printf_number_buffer::@6 - [209] phi() + [207] phi() to:strlen::@1 strlen::@1: scope:[strlen] from strlen strlen::@2 - [210] strlen::len#2 = phi( strlen/0, strlen::@2/strlen::len#1 ) - [210] strlen::str#3 = phi( strlen/(char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS, strlen::@2/strlen::str#0 ) - [211] if(0!=*strlen::str#3) goto strlen::@2 + [208] strlen::len#2 = phi( strlen/0, strlen::@2/strlen::len#1 ) + [208] strlen::str#3 = phi( strlen/(char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS, strlen::@2/strlen::str#0 ) + [209] if(0!=*strlen::str#3) goto strlen::@2 to:strlen::@return strlen::@return: scope:[strlen] from strlen::@1 - [212] return + [210] return to:@return strlen::@2: scope:[strlen] from strlen::@1 - [213] strlen::len#1 = ++ strlen::len#2 - [214] strlen::str#0 = ++ strlen::str#3 + [211] strlen::len#1 = ++ strlen::len#2 + [212] strlen::str#0 = ++ strlen::str#3 to:strlen::@1 void printf_padding(void (*putc)(char) , char pad , char length) printf_padding: scope:[printf_padding] from printf_number_buffer::@10 printf_number_buffer::@12 printf_number_buffer::@8 - [215] printf_padding::putc#7 = phi( printf_number_buffer::@10/printf_padding::putc#1, printf_number_buffer::@12/printf_padding::putc#2, printf_number_buffer::@8/printf_padding::putc#0 ) - [215] printf_padding::pad#7 = phi( printf_number_buffer::@10/'0', printf_number_buffer::@12/' ', printf_number_buffer::@8/' ' ) - [215] printf_padding::length#6 = phi( printf_number_buffer::@10/printf_padding::length#1, printf_number_buffer::@12/printf_padding::length#2, printf_number_buffer::@8/printf_padding::length#0 ) + [213] printf_padding::putc#7 = phi( printf_number_buffer::@10/printf_padding::putc#1, printf_number_buffer::@12/printf_padding::putc#2, printf_number_buffer::@8/printf_padding::putc#0 ) + [213] printf_padding::pad#7 = phi( printf_number_buffer::@10/'0', printf_number_buffer::@12/' ', printf_number_buffer::@8/' ' ) + [213] printf_padding::length#6 = phi( printf_number_buffer::@10/printf_padding::length#1, printf_number_buffer::@12/printf_padding::length#2, printf_number_buffer::@8/printf_padding::length#0 ) to:printf_padding::@1 printf_padding::@1: scope:[printf_padding] from printf_padding printf_padding::@3 - [216] printf_padding::i#2 = phi( printf_padding/0, printf_padding::@3/printf_padding::i#1 ) - [217] if(printf_padding::i#2=ultoa_append::sub#0) goto ultoa_append::@2 + [232] ultoa_append::digit#2 = phi( ultoa_append/0, ultoa_append::@2/ultoa_append::digit#1 ) + [232] ultoa_append::value#2 = phi( ultoa_append/ultoa_append::value#0, ultoa_append::@2/ultoa_append::value#1 ) + [233] if(ultoa_append::value#2>=ultoa_append::sub#0) goto ultoa_append::@2 to:ultoa_append::@3 ultoa_append::@3: scope:[ultoa_append] from ultoa_append::@1 - [236] *ultoa_append::buffer#0 = DIGITS[ultoa_append::digit#2] + [234] *ultoa_append::buffer#0 = DIGITS[ultoa_append::digit#2] to:ultoa_append::@return ultoa_append::@return: scope:[ultoa_append] from ultoa_append::@3 - [237] return + [235] return to:@return ultoa_append::@2: scope:[ultoa_append] from ultoa_append::@1 - [238] ultoa_append::digit#1 = ++ ultoa_append::digit#2 - [239] ultoa_append::value#1 = ultoa_append::value#2 - ultoa_append::sub#0 + [236] ultoa_append::digit#1 = ++ ultoa_append::digit#2 + [237] ultoa_append::value#1 = ultoa_append::value#2 - ultoa_append::sub#0 to:ultoa_append::@1 char toupper(char ch) toupper: scope:[toupper] from strupr::@2 - [240] if(toupper::ch#0<'a') goto toupper::@return + [238] if(toupper::ch#0<'a') goto toupper::@return to:toupper::@2 toupper::@2: scope:[toupper] from toupper - [241] if(toupper::ch#0<='z') goto toupper::@1 + [239] if(toupper::ch#0<='z') goto toupper::@1 to:toupper::@return toupper::@1: scope:[toupper] from toupper::@2 - [242] toupper::return#0 = toupper::ch#0 + 'A'-'a' + [240] toupper::return#0 = toupper::ch#0 + 'A'-'a' to:toupper::@return toupper::@return: scope:[toupper] from toupper toupper::@1 toupper::@2 - [243] toupper::return#2 = phi( toupper::@1/toupper::return#0, toupper/toupper::ch#0, toupper::@2/toupper::ch#0 ) - [244] return + [241] toupper::return#2 = phi( toupper::@1/toupper::return#0, toupper/toupper::ch#0, toupper::@2/toupper::ch#0 ) + [242] return to:@return diff --git a/src/test/ref/printf-19.log b/src/test/ref/printf-19.log index a8ac45c87..879f702f3 100644 --- a/src/test/ref/printf-19.log +++ b/src/test/ref/printf-19.log @@ -1424,8 +1424,6 @@ void __start() __start: scope:[__start] from to:__start::__init1 __start::__init1: scope:[__start] from __start - __snprintf_capacity = 0 - __snprintf_size = 0 __snprintf_buffer = (char *) 0 screen#7 = (char *)$400 call conio_c64_init @@ -1472,8 +1470,8 @@ __constant char SIZEOF_UNSIGNED_INT = 2 __constant char SIZEOF_UNSIGNED_LONG = 4 __constant unsigned int STACK_BASE = $103 __loadstore char *__snprintf_buffer -__loadstore volatile unsigned int __snprintf_capacity -__loadstore volatile unsigned int __snprintf_size +__loadstore volatile unsigned int __snprintf_capacity = 0 +__loadstore volatile unsigned int __snprintf_size = 0 void __start() void conio_c64_init() bool conio_c64_init::$0 @@ -3208,7 +3206,7 @@ Simplifying expression containing zero (char *)&printf_buffer in [249] *((char * Simplifying expression containing zero (char *)&printf_buffer in [255] printf_number_buffer::buffer_sign#2 = *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) Simplifying expression containing zero printf_string::len#0 in [339] printf_string::padding#1 = printf_string::$13 - printf_string::len#0 Successful SSA optimization PassNSimplifyExpressionWithZero -Removing call to empty/unused procedure [483] call conio_c64_init +Removing call to empty/unused procedure [481] call conio_c64_init Successful SSA optimization PassNEliminateUnusedConstructors Eliminating variable ultoa::buffer#0 from unused block ultoa::@9 Eliminating variable ultoa::buffer#1 from unused block ultoa::@9 @@ -3348,16 +3346,16 @@ Simple Condition printf_number_buffer::$33 [152] if(0!=printf_number_buffer::for Simple Condition printf_number_buffer::$34 [165] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@25 Simple Condition printf_string::$1 [174] if(0==printf_string::format_justify_left#0) goto printf_string::@11 Simple Condition printf_string::$16 [177] if(0!=printf_string::format_justify_left#0) goto printf_string::@12 -Simple Condition toupper::$1 [244] if(toupper::ch#0<='z') goto toupper::@1 -Simple Condition utoa::$6 [245] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@14 -Simple Condition ultoa::$6 [246] if(ultoa::value#2>=ultoa::digit_value#0) goto ultoa::@14 -Simple Condition printf_number_buffer::$35 [248] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 -Simple Condition printf_number_buffer::$2 [249] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@21 -Simple Condition printf_number_buffer::$36 [251] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 -Simple Condition printf_number_buffer::$37 [253] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 -Simple Condition printf_number_buffer::$14 [254] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@24 -Simple Condition printf_string::$17 [256] if(0!=printf_string::padding#0) goto printf_string::@5 -Simple Condition printf_string::$18 [258] if(0!=printf_string::padding#0) goto printf_string::@6 +Simple Condition toupper::$1 [242] if(toupper::ch#0<='z') goto toupper::@1 +Simple Condition utoa::$6 [243] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@14 +Simple Condition ultoa::$6 [244] if(ultoa::value#2>=ultoa::digit_value#0) goto ultoa::@14 +Simple Condition printf_number_buffer::$35 [246] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 +Simple Condition printf_number_buffer::$2 [247] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@21 +Simple Condition printf_number_buffer::$36 [249] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 +Simple Condition printf_number_buffer::$37 [251] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 +Simple Condition printf_number_buffer::$14 [252] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@24 +Simple Condition printf_string::$17 [254] if(0!=printf_string::padding#0) goto printf_string::@5 +Simple Condition printf_string::$18 [256] if(0!=printf_string::padding#0) goto printf_string::@6 Successful SSA optimization Pass2ConditionalJumpSimplification Negating conditional jump and destination [8] if(toupper::ch#0<'a') goto toupper::@2 Negating conditional jump and destination [135] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 @@ -3365,8 +3363,8 @@ Negating conditional jump and destination [152] if(0==printf_number_buffer::form Negating conditional jump and destination [165] if(0==printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return Negating conditional jump and destination [174] if(0!=printf_string::format_justify_left#0) goto printf_string::@2 Negating conditional jump and destination [177] if(0==printf_string::format_justify_left#0) goto printf_string::@return -Negating conditional jump and destination [249] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 -Negating conditional jump and destination [254] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return +Negating conditional jump and destination [247] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 +Negating conditional jump and destination [252] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return Successful SSA optimization Pass2ConditionalJumpSequenceImprovement Constant right-side identified [59] ultoa::$4 = ultoa::max_digits#1 - 1 Constant right-side identified [110] printf_slong::uvalue#0 = (unsigned long)printf_slong::value#1 @@ -3385,8 +3383,8 @@ Constant utoa::value#1 = printf_sint::uvalue#0 Successful SSA optimization Pass2ConstantIdentification if() condition always false - eliminating [174] if(0!=printf_string::format_justify_left#0) goto printf_string::@2 if() condition always true - replacing block destination [177] if(0==printf_string::format_justify_left#0) goto printf_string::@return -if() condition always false - eliminating [256] if(0!=printf_string::padding#0) goto printf_string::@5 -if() condition always false - eliminating [258] if(0!=printf_string::padding#0) goto printf_string::@6 +if() condition always false - eliminating [254] if(0!=printf_string::padding#0) goto printf_string::@5 +if() condition always false - eliminating [256] if(0!=printf_string::padding#0) goto printf_string::@6 Successful SSA optimization Pass2ConstantIfs Simplifying constant evaluating to zero (char)printf_string::padding#0 in Simplifying constant evaluating to zero (char)printf_string::padding#0 in @@ -3722,73 +3720,73 @@ Adding NOP phi() at start of strlen::@3 Adding NOP phi() at start of strupr Adding NOP phi() at start of strupr::@3 CALL GRAPH -Calls in [__start] to main:6 -Calls in [main] to snprintf_init:20 printf_str:22 snputc:24 print:26 snprintf_init:28 printf_str:30 printf_string:32 snputc:34 printf_str:36 snputc:38 print:41 snprintf_init:43 printf_str:45 printf_sint:47 printf_str:49 printf_uint:51 printf_str:53 snputc:55 print:58 snprintf_init:60 printf_str:62 printf_slong:64 printf_str:66 snputc:68 print:71 -Calls in [printf_str] to null:86 -Calls in [printf_string] to printf_str:103 -Calls in [printf_sint] to utoa:109 printf_number_buffer:112 -Calls in [printf_uint] to utoa:118 printf_number_buffer:121 -Calls in [printf_slong] to ultoa:127 printf_number_buffer:130 -Calls in [utoa] to utoa_append:169 -Calls in [printf_number_buffer] to strlen:181 null:198 strupr:204 printf_str:208 printf_padding:217 printf_padding:223 printf_padding:229 -Calls in [ultoa] to ultoa_append:259 -Calls in [strupr] to toupper:289 -Calls in [printf_padding] to null:300 +Calls in [__start] to main:4 +Calls in [main] to snprintf_init:18 printf_str:20 snputc:22 print:24 snprintf_init:26 printf_str:28 printf_string:30 snputc:32 printf_str:34 snputc:36 print:39 snprintf_init:41 printf_str:43 printf_sint:45 printf_str:47 printf_uint:49 printf_str:51 snputc:53 print:56 snprintf_init:58 printf_str:60 printf_slong:62 printf_str:64 snputc:66 print:69 +Calls in [printf_str] to null:84 +Calls in [printf_string] to printf_str:101 +Calls in [printf_sint] to utoa:107 printf_number_buffer:110 +Calls in [printf_uint] to utoa:116 printf_number_buffer:119 +Calls in [printf_slong] to ultoa:125 printf_number_buffer:128 +Calls in [utoa] to utoa_append:167 +Calls in [printf_number_buffer] to strlen:179 null:196 strupr:202 printf_str:206 printf_padding:215 printf_padding:221 printf_padding:227 +Calls in [ultoa] to ultoa_append:257 +Calls in [strupr] to toupper:287 +Calls in [printf_padding] to null:298 Created 45 initial phi equivalence classes -Coalesced [18] snputc::c#4 = snputc::c#0 -Coalesced [40] screen#42 = screen#1 -Coalesced (already) [57] screen#40 = screen#1 -Coalesced (already) [70] screen#41 = screen#1 -Coalesced [79] printf_str::s#14 = printf_str::s#12 -Coalesced [88] printf_str::s#15 = printf_str::s#0 -Coalesced (already) [90] screen#43 = screen#25 -Coalesced [97] print::msg#8 = print::msg#0 -Coalesced [98] screen#44 = screen#0 -Coalesced [111] printf_number_buffer::buffer_sign#14 = printf_number_buffer::buffer_sign#1 -Coalesced [120] printf_number_buffer::buffer_sign#16 = printf_number_buffer::buffer_sign#2 -Coalesced [129] printf_number_buffer::buffer_sign#15 = printf_number_buffer::buffer_sign#0 -Coalesced [145] utoa::value#18 = utoa::value#10 -Coalesced [157] utoa::value#19 = utoa::value#3 -Coalesced [158] utoa::started#6 = utoa::started#2 -Coalesced [159] utoa::buffer#24 = utoa::buffer#10 -Coalesced [162] utoa::digit#7 = utoa::digit#1 -Coalesced (already) [163] utoa::value#17 = utoa::value#7 -Coalesced (already) [164] utoa::started#5 = utoa::started#4 -Coalesced (already) [165] utoa::buffer#23 = utoa::buffer#15 -Coalesced [173] utoa::value#20 = utoa::value#0 -Coalesced [174] utoa::buffer#25 = utoa::buffer#4 -Coalesced [187] printf_number_buffer::len#5 = printf_number_buffer::len#1 -Coalesced [207] printf_str::putc#13 = printf_str::putc#0 -Coalesced [215] printf_padding::length#10 = printf_padding::length#2 -Coalesced [216] printf_padding::putc#10 = printf_padding::putc#2 -Coalesced [221] printf_padding::length#9 = printf_padding::length#1 -Coalesced [222] printf_padding::putc#9 = printf_padding::putc#1 -Coalesced [227] printf_padding::length#11 = printf_padding::length#0 -Coalesced [228] printf_padding::putc#11 = printf_padding::putc#0 -Coalesced [231] printf_number_buffer::padding#17 = printf_number_buffer::padding#1 -Coalesced [232] printf_number_buffer::len#4 = printf_number_buffer::len#0 -Coalesced [247] ultoa::value#17 = ultoa::value#2 -Coalesced [248] ultoa::started#6 = ultoa::started#2 -Coalesced [249] ultoa::buffer#23 = ultoa::buffer#11 -Coalesced [252] ultoa::digit#7 = ultoa::digit#1 -Coalesced (already) [253] ultoa::value#16 = ultoa::value#6 -Coalesced (already) [254] ultoa::started#5 = ultoa::started#4 -Coalesced (already) [255] ultoa::buffer#22 = ultoa::buffer#14 -Coalesced [263] ultoa::value#18 = ultoa::value#0 -Coalesced [264] ultoa::buffer#24 = ultoa::buffer#4 -Coalesced [265] utoa_append::value#6 = utoa_append::value#0 -Coalesced [272] utoa_append::value#7 = utoa_append::value#1 -Coalesced [273] utoa_append::digit#5 = utoa_append::digit#1 -Coalesced [281] strlen::str#6 = strlen::str#0 -Coalesced [282] strlen::len#5 = strlen::len#1 -Coalesced [294] strupr::src#5 = strupr::src#1 -Coalesced [303] printf_padding::i#5 = printf_padding::i#1 -Coalesced [304] ultoa_append::value#6 = ultoa_append::value#0 -Coalesced [311] ultoa_append::value#7 = ultoa_append::value#1 -Coalesced [312] ultoa_append::digit#5 = ultoa_append::digit#1 -Coalesced [315] toupper::return#7 = toupper::ch#0 -Coalesced [319] toupper::return#6 = toupper::return#0 +Coalesced [16] snputc::c#4 = snputc::c#0 +Coalesced [38] screen#42 = screen#1 +Coalesced (already) [55] screen#40 = screen#1 +Coalesced (already) [68] screen#41 = screen#1 +Coalesced [77] printf_str::s#14 = printf_str::s#12 +Coalesced [86] printf_str::s#15 = printf_str::s#0 +Coalesced (already) [88] screen#43 = screen#25 +Coalesced [95] print::msg#8 = print::msg#0 +Coalesced [96] screen#44 = screen#0 +Coalesced [109] printf_number_buffer::buffer_sign#14 = printf_number_buffer::buffer_sign#1 +Coalesced [118] printf_number_buffer::buffer_sign#16 = printf_number_buffer::buffer_sign#2 +Coalesced [127] printf_number_buffer::buffer_sign#15 = printf_number_buffer::buffer_sign#0 +Coalesced [143] utoa::value#18 = utoa::value#10 +Coalesced [155] utoa::value#19 = utoa::value#3 +Coalesced [156] utoa::started#6 = utoa::started#2 +Coalesced [157] utoa::buffer#24 = utoa::buffer#10 +Coalesced [160] utoa::digit#7 = utoa::digit#1 +Coalesced (already) [161] utoa::value#17 = utoa::value#7 +Coalesced (already) [162] utoa::started#5 = utoa::started#4 +Coalesced (already) [163] utoa::buffer#23 = utoa::buffer#15 +Coalesced [171] utoa::value#20 = utoa::value#0 +Coalesced [172] utoa::buffer#25 = utoa::buffer#4 +Coalesced [185] printf_number_buffer::len#5 = printf_number_buffer::len#1 +Coalesced [205] printf_str::putc#13 = printf_str::putc#0 +Coalesced [213] printf_padding::length#10 = printf_padding::length#2 +Coalesced [214] printf_padding::putc#10 = printf_padding::putc#2 +Coalesced [219] printf_padding::length#9 = printf_padding::length#1 +Coalesced [220] printf_padding::putc#9 = printf_padding::putc#1 +Coalesced [225] printf_padding::length#11 = printf_padding::length#0 +Coalesced [226] printf_padding::putc#11 = printf_padding::putc#0 +Coalesced [229] printf_number_buffer::padding#17 = printf_number_buffer::padding#1 +Coalesced [230] printf_number_buffer::len#4 = printf_number_buffer::len#0 +Coalesced [245] ultoa::value#17 = ultoa::value#2 +Coalesced [246] ultoa::started#6 = ultoa::started#2 +Coalesced [247] ultoa::buffer#23 = ultoa::buffer#11 +Coalesced [250] ultoa::digit#7 = ultoa::digit#1 +Coalesced (already) [251] ultoa::value#16 = ultoa::value#6 +Coalesced (already) [252] ultoa::started#5 = ultoa::started#4 +Coalesced (already) [253] ultoa::buffer#22 = ultoa::buffer#14 +Coalesced [261] ultoa::value#18 = ultoa::value#0 +Coalesced [262] ultoa::buffer#24 = ultoa::buffer#4 +Coalesced [263] utoa_append::value#6 = utoa_append::value#0 +Coalesced [270] utoa_append::value#7 = utoa_append::value#1 +Coalesced [271] utoa_append::digit#5 = utoa_append::digit#1 +Coalesced [279] strlen::str#6 = strlen::str#0 +Coalesced [280] strlen::len#5 = strlen::len#1 +Coalesced [292] strupr::src#5 = strupr::src#1 +Coalesced [301] printf_padding::i#5 = printf_padding::i#1 +Coalesced [302] ultoa_append::value#6 = ultoa_append::value#0 +Coalesced [309] ultoa_append::value#7 = ultoa_append::value#1 +Coalesced [310] ultoa_append::digit#5 = ultoa_append::digit#1 +Coalesced [313] toupper::return#7 = toupper::ch#0 +Coalesced [317] toupper::return#6 = toupper::return#0 Coalesced down to 36 phi equivalence classes Culled Empty Block label __start::@2 Culled Empty Block label __start::@3 @@ -3896,571 +3894,569 @@ __start: scope:[__start] from [0] phi() to:__start::__init1 __start::__init1: scope:[__start] from __start - [1] __snprintf_capacity = 0 - [2] __snprintf_size = 0 - [3] __snprintf_buffer = (char *) 0 + [1] __snprintf_buffer = (char *) 0 to:__start::@1 __start::@1: scope:[__start] from __start::__init1 - [4] phi() - [5] call main + [2] phi() + [3] call main to:__start::@return __start::@return: scope:[__start] from __start::@1 - [6] return + [4] return to:@return __stackcall void snputc(char c) snputc: scope:[snputc] from - [7] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) - [8] __snprintf_size = ++ __snprintf_size - [9] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 + [5] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) + [6] __snprintf_size = ++ __snprintf_size + [7] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 to:snputc::@return snputc::@return: scope:[snputc] from snputc snputc::@2 - [10] return + [8] return to:@return snputc::@1: scope:[snputc] from snputc - [11] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 + [9] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 to:snputc::@2 snputc::@3: scope:[snputc] from snputc::@1 - [12] phi() + [10] phi() to:snputc::@2 snputc::@2: scope:[snputc] from snputc::@1 snputc::@3 - [13] snputc::c#2 = phi( snputc::@3/snputc::c#0, snputc::@1/0 ) - [14] *__snprintf_buffer = snputc::c#2 - [15] __snprintf_buffer = ++ __snprintf_buffer + [11] snputc::c#2 = phi( snputc::@3/snputc::c#0, snputc::@1/0 ) + [12] *__snprintf_buffer = snputc::c#2 + [13] __snprintf_buffer = ++ __snprintf_buffer to:snputc::@return void main() main: scope:[main] from __start::@1 - [16] phi() - [17] call snprintf_init + [14] phi() + [15] call snprintf_init to:main::@1 main::@1: scope:[main] from main - [18] phi() - [19] call printf_str + [16] phi() + [17] call printf_str to:main::@2 main::@2: scope:[main] from main::@1 - [20] stackpush(char) = 0 - [21] callexecute snputc + [18] stackpush(char) = 0 + [19] callexecute snputc sideeffect stackpullpadding(1) - [23] call print + [21] call print to:main::@3 main::@3: scope:[main] from main::@2 - [24] phi() - [25] call snprintf_init + [22] phi() + [23] call snprintf_init to:main::@4 main::@4: scope:[main] from main::@3 - [26] phi() - [27] call printf_str + [24] phi() + [25] call printf_str to:main::@5 main::@5: scope:[main] from main::@4 - [28] phi() - [29] call printf_string + [26] phi() + [27] call printf_string to:main::@6 main::@6: scope:[main] from main::@5 - [30] stackpush(char) = '!' - [31] callexecute snputc + [28] stackpush(char) = '!' + [29] callexecute snputc sideeffect stackpullpadding(1) - [33] call printf_str + [31] call printf_str to:main::@7 main::@7: scope:[main] from main::@6 - [34] stackpush(char) = 0 - [35] callexecute snputc + [32] stackpush(char) = 0 + [33] callexecute snputc sideeffect stackpullpadding(1) - [37] call print + [35] call print to:main::@8 main::@8: scope:[main] from main::@7 - [38] phi() - [39] call snprintf_init + [36] phi() + [37] call snprintf_init to:main::@9 main::@9: scope:[main] from main::@8 - [40] phi() - [41] call printf_str + [38] phi() + [39] call printf_str to:main::@10 main::@10: scope:[main] from main::@9 - [42] phi() - [43] call printf_sint + [40] phi() + [41] call printf_sint to:main::@11 main::@11: scope:[main] from main::@10 - [44] phi() - [45] call printf_str + [42] phi() + [43] call printf_str to:main::@12 main::@12: scope:[main] from main::@11 - [46] phi() - [47] call printf_uint + [44] phi() + [45] call printf_uint to:main::@13 main::@13: scope:[main] from main::@12 - [48] phi() - [49] call printf_str + [46] phi() + [47] call printf_str to:main::@14 main::@14: scope:[main] from main::@13 - [50] stackpush(char) = 0 - [51] callexecute snputc + [48] stackpush(char) = 0 + [49] callexecute snputc sideeffect stackpullpadding(1) - [53] call print + [51] call print to:main::@15 main::@15: scope:[main] from main::@14 - [54] phi() - [55] call snprintf_init + [52] phi() + [53] call snprintf_init to:main::@16 main::@16: scope:[main] from main::@15 - [56] phi() - [57] call printf_str + [54] phi() + [55] call printf_str to:main::@17 main::@17: scope:[main] from main::@16 - [58] phi() - [59] call printf_slong + [56] phi() + [57] call printf_slong to:main::@18 main::@18: scope:[main] from main::@17 - [60] phi() - [61] call printf_str + [58] phi() + [59] call printf_str to:main::@19 main::@19: scope:[main] from main::@18 - [62] stackpush(char) = 0 - [63] callexecute snputc + [60] stackpush(char) = 0 + [61] callexecute snputc sideeffect stackpullpadding(1) - [65] call print + [63] call print to:main::@return main::@return: scope:[main] from main::@19 - [66] return + [64] return to:@return void snprintf_init(char *s , unsigned int n) snprintf_init: scope:[snprintf_init] from main main::@15 main::@3 main::@8 - [67] __snprintf_capacity = $ffff - [68] __snprintf_size = 0 - [69] __snprintf_buffer = BUF + [65] __snprintf_capacity = $ffff + [66] __snprintf_size = 0 + [67] __snprintf_buffer = BUF to:snprintf_init::@return snprintf_init::@return: scope:[snprintf_init] from snprintf_init - [70] return + [68] return to:@return void printf_str(void (*putc)(char) , const char *s) printf_str: scope:[printf_str] from main::@1 main::@11 main::@13 main::@16 main::@18 main::@4 main::@6 main::@9 printf_number_buffer::@5 printf_string::@1 - [71] printf_str::putc#12 = phi( main::@1/&snputc, main::@11/&snputc, main::@13/&snputc, main::@16/&snputc, main::@18/&snputc, main::@4/&snputc, main::@6/&snputc, main::@9/&snputc, printf_number_buffer::@5/printf_str::putc#0, printf_string::@1/printf_string::putc#0 ) - [71] printf_str::s#12 = phi( main::@1/main::s, main::@11/main::s4, main::@13/main::s5, main::@16/main::s6, main::@18/main::s5, main::@4/main::s1, main::@6/main::s2, main::@9/main::s1, printf_number_buffer::@5/(char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS, printf_string::@1/main::str ) + [69] printf_str::putc#12 = phi( main::@1/&snputc, main::@11/&snputc, main::@13/&snputc, main::@16/&snputc, main::@18/&snputc, main::@4/&snputc, main::@6/&snputc, main::@9/&snputc, printf_number_buffer::@5/printf_str::putc#0, printf_string::@1/printf_string::putc#0 ) + [69] printf_str::s#12 = phi( main::@1/main::s, main::@11/main::s4, main::@13/main::s5, main::@16/main::s6, main::@18/main::s5, main::@4/main::s1, main::@6/main::s2, main::@9/main::s1, printf_number_buffer::@5/(char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS, printf_string::@1/main::str ) to:printf_str::@1 printf_str::@1: scope:[printf_str] from printf_str printf_str::@2 - [72] printf_str::s#11 = phi( printf_str/printf_str::s#12, printf_str::@2/printf_str::s#0 ) - [73] printf_str::c#1 = *printf_str::s#11 - [74] printf_str::s#0 = ++ printf_str::s#11 - [75] if(0!=printf_str::c#1) goto printf_str::@2 + [70] printf_str::s#11 = phi( printf_str/printf_str::s#12, printf_str::@2/printf_str::s#0 ) + [71] printf_str::c#1 = *printf_str::s#11 + [72] printf_str::s#0 = ++ printf_str::s#11 + [73] if(0!=printf_str::c#1) goto printf_str::@2 to:printf_str::@return printf_str::@return: scope:[printf_str] from printf_str::@1 - [76] return + [74] return to:@return printf_str::@2: scope:[printf_str] from printf_str::@1 - [77] stackpush(char) = printf_str::c#1 - [78] callexecute *printf_str::putc#12 + [75] stackpush(char) = printf_str::c#1 + [76] callexecute *printf_str::putc#12 sideeffect stackpullpadding(1) to:printf_str::@1 void print(char *msg) print: scope:[print] from main::@14 main::@19 main::@2 main::@7 - [80] screen#25 = phi( main::@14/screen#1, main::@19/screen#1, main::@2/(char *) 1024, main::@7/screen#1 ) + [78] screen#25 = phi( main::@14/screen#1, main::@19/screen#1, main::@2/(char *) 1024, main::@7/screen#1 ) to:print::@1 print::@1: scope:[print] from print print::@2 - [81] screen#1 = phi( print/screen#25, print::@2/screen#0 ) - [81] print::msg#5 = phi( print/BUF, print::@2/print::msg#0 ) - [82] if(0!=*print::msg#5) goto print::@2 + [79] screen#1 = phi( print/screen#25, print::@2/screen#0 ) + [79] print::msg#5 = phi( print/BUF, print::@2/print::msg#0 ) + [80] if(0!=*print::msg#5) goto print::@2 to:print::@return print::@return: scope:[print] from print::@1 - [83] return + [81] return to:@return print::@2: scope:[print] from print::@1 - [84] *screen#1 = *print::msg#5 - [85] screen#0 = ++ screen#1 - [86] print::msg#0 = ++ print::msg#5 + [82] *screen#1 = *print::msg#5 + [83] screen#0 = ++ screen#1 + [84] print::msg#0 = ++ print::msg#5 to:print::@1 void printf_string(void (*putc)(char) , char *str , char format_min_length , char format_justify_left) printf_string: scope:[printf_string] from main::@5 - [87] phi() + [85] phi() to:printf_string::@1 printf_string::@1: scope:[printf_string] from printf_string - [88] phi() - [89] call printf_str + [86] phi() + [87] call printf_str to:printf_string::@return printf_string::@return: scope:[printf_string] from printf_string::@1 - [90] return + [88] return to:@return void printf_sint(void (*putc)(char) , int value , char format_min_length , char format_justify_left , char format_sign_always , char format_zero_padding , char format_upper_case , char format_radix) printf_sint: scope:[printf_sint] from main::@10 - [91] *((char *)&printf_buffer) = 0 + [89] *((char *)&printf_buffer) = 0 to:printf_sint::@1 printf_sint::@1: scope:[printf_sint] from printf_sint - [92] phi() - [93] call utoa + [90] phi() + [91] call utoa to:printf_sint::@2 printf_sint::@2: scope:[printf_sint] from printf_sint::@1 - [94] printf_number_buffer::buffer_sign#1 = *((char *)&printf_buffer) - [95] call printf_number_buffer + [92] printf_number_buffer::buffer_sign#1 = *((char *)&printf_buffer) + [93] call printf_number_buffer to:printf_sint::@return printf_sint::@return: scope:[printf_sint] from printf_sint::@2 - [96] return + [94] return to:@return void printf_uint(void (*putc)(char) , unsigned int uvalue , char format_min_length , char format_justify_left , char format_sign_always , char format_zero_padding , char format_upper_case , char format_radix) printf_uint: scope:[printf_uint] from main::@12 - [97] phi() + [95] phi() to:printf_uint::@1 printf_uint::@1: scope:[printf_uint] from printf_uint - [98] *((char *)&printf_buffer) = 0 - [99] call utoa + [96] *((char *)&printf_buffer) = 0 + [97] call utoa to:printf_uint::@2 printf_uint::@2: scope:[printf_uint] from printf_uint::@1 - [100] printf_number_buffer::buffer_sign#2 = *((char *)&printf_buffer) - [101] call printf_number_buffer + [98] printf_number_buffer::buffer_sign#2 = *((char *)&printf_buffer) + [99] call printf_number_buffer to:printf_uint::@return printf_uint::@return: scope:[printf_uint] from printf_uint::@2 - [102] return + [100] return to:@return void printf_slong(void (*putc)(char) , long value , char format_min_length , char format_justify_left , char format_sign_always , char format_zero_padding , char format_upper_case , char format_radix) printf_slong: scope:[printf_slong] from main::@17 - [103] *((char *)&printf_buffer) = 0 + [101] *((char *)&printf_buffer) = 0 to:printf_slong::@1 printf_slong::@1: scope:[printf_slong] from printf_slong - [104] phi() - [105] call ultoa + [102] phi() + [103] call ultoa to:printf_slong::@2 printf_slong::@2: scope:[printf_slong] from printf_slong::@1 - [106] printf_number_buffer::buffer_sign#0 = *((char *)&printf_buffer) - [107] call printf_number_buffer + [104] printf_number_buffer::buffer_sign#0 = *((char *)&printf_buffer) + [105] call printf_number_buffer to:printf_slong::@return printf_slong::@return: scope:[printf_slong] from printf_slong::@2 - [108] return + [106] return to:@return void utoa(unsigned int value , char *buffer , char radix) utoa: scope:[utoa] from printf_sint::@1 printf_uint::@1 - [109] utoa::value#10 = phi( printf_sint::@1/printf_sint::uvalue#0, printf_uint::@1/printf_uint::uvalue#0 ) - [109] utoa::radix#2 = phi( printf_sint::@1/DECIMAL, printf_uint::@1/HEXADECIMAL ) - [110] if(utoa::radix#2==DECIMAL) goto utoa::@1 + [107] utoa::value#10 = phi( printf_sint::@1/printf_sint::uvalue#0, printf_uint::@1/printf_uint::uvalue#0 ) + [107] utoa::radix#2 = phi( printf_sint::@1/DECIMAL, printf_uint::@1/HEXADECIMAL ) + [108] if(utoa::radix#2==DECIMAL) goto utoa::@1 to:utoa::@2 utoa::@2: scope:[utoa] from utoa - [111] if(utoa::radix#2==HEXADECIMAL) goto utoa::@1 + [109] if(utoa::radix#2==HEXADECIMAL) goto utoa::@1 to:utoa::@3 utoa::@3: scope:[utoa] from utoa::@2 - [112] if(utoa::radix#2==OCTAL) goto utoa::@1 + [110] if(utoa::radix#2==OCTAL) goto utoa::@1 to:utoa::@4 utoa::@4: scope:[utoa] from utoa::@3 - [113] if(utoa::radix#2==BINARY) goto utoa::@1 + [111] if(utoa::radix#2==BINARY) goto utoa::@1 to:utoa::@5 utoa::@5: scope:[utoa] from utoa::@4 - [114] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS) = 'e' - [115] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1) = 'r' - [116] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2) = 'r' - [117] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3) = 0 + [112] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS) = 'e' + [113] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1) = 'r' + [114] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2) = 'r' + [115] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3) = 0 to:utoa::@return utoa::@return: scope:[utoa] from utoa::@5 utoa::@8 - [118] return + [116] return to:@return utoa::@1: scope:[utoa] from utoa utoa::@2 utoa::@3 utoa::@4 - [119] utoa::digit_values#8 = phi( utoa/RADIX_DECIMAL_VALUES, utoa::@2/RADIX_HEXADECIMAL_VALUES, utoa::@3/RADIX_OCTAL_VALUES, utoa::@4/RADIX_BINARY_VALUES ) - [119] utoa::max_digits#7 = phi( utoa/5, utoa::@2/4, utoa::@3/6, utoa::@4/$10 ) + [117] utoa::digit_values#8 = phi( utoa/RADIX_DECIMAL_VALUES, utoa::@2/RADIX_HEXADECIMAL_VALUES, utoa::@3/RADIX_OCTAL_VALUES, utoa::@4/RADIX_BINARY_VALUES ) + [117] utoa::max_digits#7 = phi( utoa/5, utoa::@2/4, utoa::@3/6, utoa::@4/$10 ) to:utoa::@6 utoa::@6: scope:[utoa] from utoa::@1 utoa::@9 - [120] utoa::buffer#10 = phi( utoa::@9/utoa::buffer#15, utoa::@1/(char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS ) - [120] utoa::started#2 = phi( utoa::@9/utoa::started#4, utoa::@1/0 ) - [120] utoa::value#3 = phi( utoa::@9/utoa::value#7, utoa::@1/utoa::value#10 ) - [120] utoa::digit#2 = phi( utoa::@9/utoa::digit#1, utoa::@1/0 ) - [121] utoa::$4 = utoa::max_digits#7 - 1 - [122] if(utoa::digit#2=utoa::digit_value#0) goto utoa::@10 + [128] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@10 to:utoa::@9 utoa::@9: scope:[utoa] from utoa::@11 utoa::@12 - [131] utoa::buffer#15 = phi( utoa::@12/utoa::buffer#10, utoa::@11/utoa::buffer#4 ) - [131] utoa::started#4 = phi( utoa::@12/utoa::started#2, utoa::@11/1 ) - [131] utoa::value#7 = phi( utoa::@12/utoa::value#3, utoa::@11/utoa::value#0 ) - [132] utoa::digit#1 = ++ utoa::digit#2 + [129] utoa::buffer#15 = phi( utoa::@12/utoa::buffer#10, utoa::@11/utoa::buffer#4 ) + [129] utoa::started#4 = phi( utoa::@12/utoa::started#2, utoa::@11/1 ) + [129] utoa::value#7 = phi( utoa::@12/utoa::value#3, utoa::@11/utoa::value#0 ) + [130] utoa::digit#1 = ++ utoa::digit#2 to:utoa::@6 utoa::@10: scope:[utoa] from utoa::@12 utoa::@7 - [133] utoa_append::buffer#0 = utoa::buffer#10 - [134] utoa_append::value#0 = utoa::value#3 - [135] utoa_append::sub#0 = utoa::digit_value#0 - [136] call utoa_append - [137] utoa_append::return#0 = utoa_append::value#2 + [131] utoa_append::buffer#0 = utoa::buffer#10 + [132] utoa_append::value#0 = utoa::value#3 + [133] utoa_append::sub#0 = utoa::digit_value#0 + [134] call utoa_append + [135] utoa_append::return#0 = utoa_append::value#2 to:utoa::@11 utoa::@11: scope:[utoa] from utoa::@10 - [138] utoa::value#0 = utoa_append::return#0 - [139] utoa::buffer#4 = ++ utoa::buffer#10 + [136] utoa::value#0 = utoa_append::return#0 + [137] utoa::buffer#4 = ++ utoa::buffer#10 to:utoa::@9 void printf_number_buffer(void (*putc)(char) , char buffer_sign , char *buffer_digits , char format_min_length , char format_justify_left , char format_sign_always , char format_zero_padding , char format_upper_case , char format_radix) printf_number_buffer: scope:[printf_number_buffer] from printf_sint::@2 printf_slong::@2 printf_uint::@2 - [140] printf_number_buffer::format_upper_case#10 = phi( printf_sint::@2/printf_sint::format_upper_case#0, printf_slong::@2/printf_slong::format_upper_case#0, printf_uint::@2/printf_uint::format_upper_case#0 ) - [140] printf_number_buffer::putc#10 = phi( printf_sint::@2/printf_sint::putc#0, printf_slong::@2/printf_slong::putc#0, printf_uint::@2/printf_uint::putc#0 ) - [140] printf_number_buffer::buffer_sign#10 = phi( printf_sint::@2/printf_number_buffer::buffer_sign#1, printf_slong::@2/printf_number_buffer::buffer_sign#0, printf_uint::@2/printf_number_buffer::buffer_sign#2 ) - [140] printf_number_buffer::format_zero_padding#10 = phi( printf_sint::@2/printf_sint::format_zero_padding#0, printf_slong::@2/printf_slong::format_zero_padding#0, printf_uint::@2/printf_uint::format_zero_padding#0 ) - [140] printf_number_buffer::format_justify_left#10 = phi( printf_sint::@2/printf_sint::format_justify_left#0, printf_slong::@2/printf_slong::format_justify_left#0, printf_uint::@2/printf_uint::format_justify_left#0 ) - [140] printf_number_buffer::format_min_length#3 = phi( printf_sint::@2/printf_sint::format_min_length#0, printf_slong::@2/printf_slong::format_min_length#0, printf_uint::@2/printf_uint::format_min_length#0 ) - [141] if(0==printf_number_buffer::format_min_length#3) goto printf_number_buffer::@1 + [138] printf_number_buffer::format_upper_case#10 = phi( printf_sint::@2/printf_sint::format_upper_case#0, printf_slong::@2/printf_slong::format_upper_case#0, printf_uint::@2/printf_uint::format_upper_case#0 ) + [138] printf_number_buffer::putc#10 = phi( printf_sint::@2/printf_sint::putc#0, printf_slong::@2/printf_slong::putc#0, printf_uint::@2/printf_uint::putc#0 ) + [138] printf_number_buffer::buffer_sign#10 = phi( printf_sint::@2/printf_number_buffer::buffer_sign#1, printf_slong::@2/printf_number_buffer::buffer_sign#0, printf_uint::@2/printf_number_buffer::buffer_sign#2 ) + [138] printf_number_buffer::format_zero_padding#10 = phi( printf_sint::@2/printf_sint::format_zero_padding#0, printf_slong::@2/printf_slong::format_zero_padding#0, printf_uint::@2/printf_uint::format_zero_padding#0 ) + [138] printf_number_buffer::format_justify_left#10 = phi( printf_sint::@2/printf_sint::format_justify_left#0, printf_slong::@2/printf_slong::format_justify_left#0, printf_uint::@2/printf_uint::format_justify_left#0 ) + [138] printf_number_buffer::format_min_length#3 = phi( printf_sint::@2/printf_sint::format_min_length#0, printf_slong::@2/printf_slong::format_min_length#0, printf_uint::@2/printf_uint::format_min_length#0 ) + [139] if(0==printf_number_buffer::format_min_length#3) goto printf_number_buffer::@1 to:printf_number_buffer::@6 printf_number_buffer::@6: scope:[printf_number_buffer] from printf_number_buffer - [142] phi() - [143] call strlen - [144] strlen::return#2 = strlen::len#2 + [140] phi() + [141] call strlen + [142] strlen::return#2 = strlen::len#2 to:printf_number_buffer::@14 printf_number_buffer::@14: scope:[printf_number_buffer] from printf_number_buffer::@6 - [145] printf_number_buffer::$19 = strlen::return#2 - [146] printf_number_buffer::len#0 = (signed char)printf_number_buffer::$19 - [147] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 + [143] printf_number_buffer::$19 = strlen::return#2 + [144] printf_number_buffer::len#0 = (signed char)printf_number_buffer::$19 + [145] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 to:printf_number_buffer::@7 printf_number_buffer::@7: scope:[printf_number_buffer] from printf_number_buffer::@14 - [148] printf_number_buffer::len#1 = ++ printf_number_buffer::len#0 + [146] printf_number_buffer::len#1 = ++ printf_number_buffer::len#0 to:printf_number_buffer::@13 printf_number_buffer::@13: scope:[printf_number_buffer] from printf_number_buffer::@14 printf_number_buffer::@7 - [149] printf_number_buffer::len#2 = phi( printf_number_buffer::@14/printf_number_buffer::len#0, printf_number_buffer::@7/printf_number_buffer::len#1 ) - [150] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#3 - printf_number_buffer::len#2 - [151] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 + [147] printf_number_buffer::len#2 = phi( printf_number_buffer::@14/printf_number_buffer::len#0, printf_number_buffer::@7/printf_number_buffer::len#1 ) + [148] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#3 - printf_number_buffer::len#2 + [149] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 to:printf_number_buffer::@1 printf_number_buffer::@21: scope:[printf_number_buffer] from printf_number_buffer::@13 - [152] phi() + [150] phi() to:printf_number_buffer::@1 printf_number_buffer::@1: scope:[printf_number_buffer] from printf_number_buffer printf_number_buffer::@13 printf_number_buffer::@21 - [153] printf_number_buffer::padding#10 = phi( printf_number_buffer/0, printf_number_buffer::@21/printf_number_buffer::padding#1, printf_number_buffer::@13/0 ) - [154] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 + [151] printf_number_buffer::padding#10 = phi( printf_number_buffer/0, printf_number_buffer::@21/printf_number_buffer::padding#1, printf_number_buffer::@13/0 ) + [152] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 to:printf_number_buffer::@17 printf_number_buffer::@17: scope:[printf_number_buffer] from printf_number_buffer::@1 - [155] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 + [153] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 to:printf_number_buffer::@16 printf_number_buffer::@16: scope:[printf_number_buffer] from printf_number_buffer::@17 - [156] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 + [154] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 to:printf_number_buffer::@2 printf_number_buffer::@8: scope:[printf_number_buffer] from printf_number_buffer::@16 - [157] printf_padding::putc#0 = printf_number_buffer::putc#10 - [158] printf_padding::length#0 = (char)printf_number_buffer::padding#10 - [159] call printf_padding + [155] printf_padding::putc#0 = printf_number_buffer::putc#10 + [156] printf_padding::length#0 = (char)printf_number_buffer::padding#10 + [157] call printf_padding to:printf_number_buffer::@2 printf_number_buffer::@2: scope:[printf_number_buffer] from printf_number_buffer::@1 printf_number_buffer::@16 printf_number_buffer::@17 printf_number_buffer::@8 - [160] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 + [158] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 to:printf_number_buffer::@9 printf_number_buffer::@9: scope:[printf_number_buffer] from printf_number_buffer::@2 - [161] stackpush(char) = printf_number_buffer::buffer_sign#10 - [162] callexecute *printf_number_buffer::putc#10 + [159] stackpush(char) = printf_number_buffer::buffer_sign#10 + [160] callexecute *printf_number_buffer::putc#10 sideeffect stackpullpadding(1) to:printf_number_buffer::@3 printf_number_buffer::@3: scope:[printf_number_buffer] from printf_number_buffer::@2 printf_number_buffer::@9 - [164] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 + [162] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 to:printf_number_buffer::@18 printf_number_buffer::@18: scope:[printf_number_buffer] from printf_number_buffer::@3 - [165] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 + [163] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 to:printf_number_buffer::@4 printf_number_buffer::@10: scope:[printf_number_buffer] from printf_number_buffer::@18 - [166] printf_padding::putc#1 = printf_number_buffer::putc#10 - [167] printf_padding::length#1 = (char)printf_number_buffer::padding#10 - [168] call printf_padding + [164] printf_padding::putc#1 = printf_number_buffer::putc#10 + [165] printf_padding::length#1 = (char)printf_number_buffer::padding#10 + [166] call printf_padding to:printf_number_buffer::@4 printf_number_buffer::@4: scope:[printf_number_buffer] from printf_number_buffer::@10 printf_number_buffer::@18 printf_number_buffer::@3 - [169] if(0==printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 + [167] if(0==printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 to:printf_number_buffer::@11 printf_number_buffer::@11: scope:[printf_number_buffer] from printf_number_buffer::@4 - [170] phi() - [171] call strupr + [168] phi() + [169] call strupr to:printf_number_buffer::@5 printf_number_buffer::@5: scope:[printf_number_buffer] from printf_number_buffer::@11 printf_number_buffer::@4 - [172] printf_str::putc#0 = printf_number_buffer::putc#10 - [173] call printf_str + [170] printf_str::putc#0 = printf_number_buffer::putc#10 + [171] call printf_str to:printf_number_buffer::@15 printf_number_buffer::@15: scope:[printf_number_buffer] from printf_number_buffer::@5 - [174] if(0==printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return + [172] if(0==printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return to:printf_number_buffer::@20 printf_number_buffer::@20: scope:[printf_number_buffer] from printf_number_buffer::@15 - [175] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return + [173] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return to:printf_number_buffer::@19 printf_number_buffer::@19: scope:[printf_number_buffer] from printf_number_buffer::@20 - [176] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 + [174] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 to:printf_number_buffer::@return printf_number_buffer::@12: scope:[printf_number_buffer] from printf_number_buffer::@19 - [177] printf_padding::putc#2 = printf_number_buffer::putc#10 - [178] printf_padding::length#2 = (char)printf_number_buffer::padding#10 - [179] call printf_padding + [175] printf_padding::putc#2 = printf_number_buffer::putc#10 + [176] printf_padding::length#2 = (char)printf_number_buffer::padding#10 + [177] call printf_padding to:printf_number_buffer::@return printf_number_buffer::@return: scope:[printf_number_buffer] from printf_number_buffer::@12 printf_number_buffer::@15 printf_number_buffer::@19 printf_number_buffer::@20 - [180] return + [178] return to:@return void ultoa(unsigned long value , char *buffer , char radix) ultoa: scope:[ultoa] from printf_slong::@1 - [181] phi() + [179] phi() to:ultoa::@1 ultoa::@1: scope:[ultoa] from ultoa ultoa::@4 - [182] ultoa::buffer#11 = phi( ultoa::@4/ultoa::buffer#14, ultoa/(char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS ) - [182] ultoa::started#2 = phi( ultoa::@4/ultoa::started#4, ultoa/0 ) - [182] ultoa::value#2 = phi( ultoa::@4/ultoa::value#6, ultoa/printf_slong::uvalue#0 ) - [182] ultoa::digit#2 = phi( ultoa::@4/ultoa::digit#1, ultoa/0 ) - [183] if(ultoa::digit#2=ultoa::digit_value#0) goto ultoa::@5 + [190] if(ultoa::value#2>=ultoa::digit_value#0) goto ultoa::@5 to:ultoa::@4 ultoa::@4: scope:[ultoa] from ultoa::@6 ultoa::@7 - [193] ultoa::buffer#14 = phi( ultoa::@7/ultoa::buffer#11, ultoa::@6/ultoa::buffer#4 ) - [193] ultoa::started#4 = phi( ultoa::@7/ultoa::started#2, ultoa::@6/1 ) - [193] ultoa::value#6 = phi( ultoa::@7/ultoa::value#2, ultoa::@6/ultoa::value#0 ) - [194] ultoa::digit#1 = ++ ultoa::digit#2 + [191] ultoa::buffer#14 = phi( ultoa::@7/ultoa::buffer#11, ultoa::@6/ultoa::buffer#4 ) + [191] ultoa::started#4 = phi( ultoa::@7/ultoa::started#2, ultoa::@6/1 ) + [191] ultoa::value#6 = phi( ultoa::@7/ultoa::value#2, ultoa::@6/ultoa::value#0 ) + [192] ultoa::digit#1 = ++ ultoa::digit#2 to:ultoa::@1 ultoa::@5: scope:[ultoa] from ultoa::@2 ultoa::@7 - [195] ultoa_append::buffer#0 = ultoa::buffer#11 - [196] ultoa_append::value#0 = ultoa::value#2 - [197] ultoa_append::sub#0 = ultoa::digit_value#0 - [198] call ultoa_append - [199] ultoa_append::return#0 = ultoa_append::value#2 + [193] ultoa_append::buffer#0 = ultoa::buffer#11 + [194] ultoa_append::value#0 = ultoa::value#2 + [195] ultoa_append::sub#0 = ultoa::digit_value#0 + [196] call ultoa_append + [197] ultoa_append::return#0 = ultoa_append::value#2 to:ultoa::@6 ultoa::@6: scope:[ultoa] from ultoa::@5 - [200] ultoa::value#0 = ultoa_append::return#0 - [201] ultoa::buffer#4 = ++ ultoa::buffer#11 + [198] ultoa::value#0 = ultoa_append::return#0 + [199] ultoa::buffer#4 = ++ ultoa::buffer#11 to:ultoa::@4 unsigned int utoa_append(char *buffer , unsigned int value , unsigned int sub) utoa_append: scope:[utoa_append] from utoa::@10 - [202] phi() + [200] phi() to:utoa_append::@1 utoa_append::@1: scope:[utoa_append] from utoa_append utoa_append::@2 - [203] utoa_append::digit#2 = phi( utoa_append/0, utoa_append::@2/utoa_append::digit#1 ) - [203] utoa_append::value#2 = phi( utoa_append/utoa_append::value#0, utoa_append::@2/utoa_append::value#1 ) - [204] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 + [201] utoa_append::digit#2 = phi( utoa_append/0, utoa_append::@2/utoa_append::digit#1 ) + [201] utoa_append::value#2 = phi( utoa_append/utoa_append::value#0, utoa_append::@2/utoa_append::value#1 ) + [202] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 to:utoa_append::@3 utoa_append::@3: scope:[utoa_append] from utoa_append::@1 - [205] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] + [203] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] to:utoa_append::@return utoa_append::@return: scope:[utoa_append] from utoa_append::@3 - [206] return + [204] return to:@return utoa_append::@2: scope:[utoa_append] from utoa_append::@1 - [207] utoa_append::digit#1 = ++ utoa_append::digit#2 - [208] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 + [205] utoa_append::digit#1 = ++ utoa_append::digit#2 + [206] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 to:utoa_append::@1 unsigned int strlen(char *str) strlen: scope:[strlen] from printf_number_buffer::@6 - [209] phi() + [207] phi() to:strlen::@1 strlen::@1: scope:[strlen] from strlen strlen::@2 - [210] strlen::len#2 = phi( strlen/0, strlen::@2/strlen::len#1 ) - [210] strlen::str#3 = phi( strlen/(char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS, strlen::@2/strlen::str#0 ) - [211] if(0!=*strlen::str#3) goto strlen::@2 + [208] strlen::len#2 = phi( strlen/0, strlen::@2/strlen::len#1 ) + [208] strlen::str#3 = phi( strlen/(char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS, strlen::@2/strlen::str#0 ) + [209] if(0!=*strlen::str#3) goto strlen::@2 to:strlen::@return strlen::@return: scope:[strlen] from strlen::@1 - [212] return + [210] return to:@return strlen::@2: scope:[strlen] from strlen::@1 - [213] strlen::len#1 = ++ strlen::len#2 - [214] strlen::str#0 = ++ strlen::str#3 + [211] strlen::len#1 = ++ strlen::len#2 + [212] strlen::str#0 = ++ strlen::str#3 to:strlen::@1 void printf_padding(void (*putc)(char) , char pad , char length) printf_padding: scope:[printf_padding] from printf_number_buffer::@10 printf_number_buffer::@12 printf_number_buffer::@8 - [215] printf_padding::putc#7 = phi( printf_number_buffer::@10/printf_padding::putc#1, printf_number_buffer::@12/printf_padding::putc#2, printf_number_buffer::@8/printf_padding::putc#0 ) - [215] printf_padding::pad#7 = phi( printf_number_buffer::@10/'0', printf_number_buffer::@12/' ', printf_number_buffer::@8/' ' ) - [215] printf_padding::length#6 = phi( printf_number_buffer::@10/printf_padding::length#1, printf_number_buffer::@12/printf_padding::length#2, printf_number_buffer::@8/printf_padding::length#0 ) + [213] printf_padding::putc#7 = phi( printf_number_buffer::@10/printf_padding::putc#1, printf_number_buffer::@12/printf_padding::putc#2, printf_number_buffer::@8/printf_padding::putc#0 ) + [213] printf_padding::pad#7 = phi( printf_number_buffer::@10/'0', printf_number_buffer::@12/' ', printf_number_buffer::@8/' ' ) + [213] printf_padding::length#6 = phi( printf_number_buffer::@10/printf_padding::length#1, printf_number_buffer::@12/printf_padding::length#2, printf_number_buffer::@8/printf_padding::length#0 ) to:printf_padding::@1 printf_padding::@1: scope:[printf_padding] from printf_padding printf_padding::@3 - [216] printf_padding::i#2 = phi( printf_padding/0, printf_padding::@3/printf_padding::i#1 ) - [217] if(printf_padding::i#2=ultoa_append::sub#0) goto ultoa_append::@2 + [232] ultoa_append::digit#2 = phi( ultoa_append/0, ultoa_append::@2/ultoa_append::digit#1 ) + [232] ultoa_append::value#2 = phi( ultoa_append/ultoa_append::value#0, ultoa_append::@2/ultoa_append::value#1 ) + [233] if(ultoa_append::value#2>=ultoa_append::sub#0) goto ultoa_append::@2 to:ultoa_append::@3 ultoa_append::@3: scope:[ultoa_append] from ultoa_append::@1 - [236] *ultoa_append::buffer#0 = DIGITS[ultoa_append::digit#2] + [234] *ultoa_append::buffer#0 = DIGITS[ultoa_append::digit#2] to:ultoa_append::@return ultoa_append::@return: scope:[ultoa_append] from ultoa_append::@3 - [237] return + [235] return to:@return ultoa_append::@2: scope:[ultoa_append] from ultoa_append::@1 - [238] ultoa_append::digit#1 = ++ ultoa_append::digit#2 - [239] ultoa_append::value#1 = ultoa_append::value#2 - ultoa_append::sub#0 + [236] ultoa_append::digit#1 = ++ ultoa_append::digit#2 + [237] ultoa_append::value#1 = ultoa_append::value#2 - ultoa_append::sub#0 to:ultoa_append::@1 char toupper(char ch) toupper: scope:[toupper] from strupr::@2 - [240] if(toupper::ch#0<'a') goto toupper::@return + [238] if(toupper::ch#0<'a') goto toupper::@return to:toupper::@2 toupper::@2: scope:[toupper] from toupper - [241] if(toupper::ch#0<='z') goto toupper::@1 + [239] if(toupper::ch#0<='z') goto toupper::@1 to:toupper::@return toupper::@1: scope:[toupper] from toupper::@2 - [242] toupper::return#0 = toupper::ch#0 + 'A'-'a' + [240] toupper::return#0 = toupper::ch#0 + 'A'-'a' to:toupper::@return toupper::@return: scope:[toupper] from toupper toupper::@1 toupper::@2 - [243] toupper::return#2 = phi( toupper::@1/toupper::return#0, toupper/toupper::ch#0, toupper::@2/toupper::ch#0 ) - [244] return + [241] toupper::return#2 = phi( toupper::@1/toupper::return#0, toupper/toupper::ch#0, toupper::@2/toupper::ch#0 ) + [242] return to:@return VARIABLE REGISTER WEIGHTS __loadstore char *__snprintf_buffer // 9.022222222222222 -__loadstore volatile unsigned int __snprintf_capacity // 6.48936170212766 -__loadstore volatile unsigned int __snprintf_size // 11.021739130434781 +__loadstore volatile unsigned int __snprintf_capacity = 0 // 6.446808510638299 +__loadstore volatile unsigned int __snprintf_size = 0 // 10.978260869565217 void __start() void main() void print(char *msg) @@ -4714,9 +4710,9 @@ Initial phi equivalence classes [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] [ ultoa_append::digit#2 ultoa_append::digit#1 ] [ toupper::return#2 toupper::return#0 toupper::ch#0 ] -Added variable __snprintf_capacity to live range equivalence class [ __snprintf_capacity ] -Added variable __snprintf_size to live range equivalence class [ __snprintf_size ] Added variable __snprintf_buffer to live range equivalence class [ __snprintf_buffer ] +Added variable __snprintf_size to live range equivalence class [ __snprintf_size ] +Added variable __snprintf_capacity to live range equivalence class [ __snprintf_capacity ] Added variable printf_str::c#1 to live range equivalence class [ printf_str::c#1 ] Added variable utoa::$4 to live range equivalence class [ utoa::$4 ] Added variable utoa::$11 to live range equivalence class [ utoa::$11 ] @@ -4775,9 +4771,9 @@ Complete equivalence classes [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] [ ultoa_append::digit#2 ultoa_append::digit#1 ] [ toupper::return#2 toupper::return#0 toupper::ch#0 ] -[ __snprintf_capacity ] -[ __snprintf_size ] [ __snprintf_buffer ] +[ __snprintf_size ] +[ __snprintf_capacity ] [ printf_str::c#1 ] [ utoa::$4 ] [ utoa::$11 ] @@ -4855,117 +4851,115 @@ Allocated zp[1]:92 [ printf_number_buffer::format_min_length#3 ] Allocated zp[1]:93 [ printf_number_buffer::format_zero_padding#10 ] Allocated zp[1]:94 [ printf_number_buffer::format_justify_left#10 ] Allocated zp[1]:95 [ printf_number_buffer::format_upper_case#10 ] -Allocated zp[2]:96 [ __snprintf_size ] -Allocated zp[2]:98 [ __snprintf_buffer ] -Allocated zp[2]:100 [ __snprintf_capacity ] +Allocated mem[2] [ __snprintf_size ] +Allocated zp[2]:96 [ __snprintf_buffer ] +Allocated mem[2] [ __snprintf_capacity ] Allocated mem[12] [ printf_buffer ] REGISTER UPLIFT POTENTIAL REGISTERS -Statement [1] __snprintf_capacity = 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a -Statement [2] __snprintf_size = 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a -Statement [3] __snprintf_buffer = (char *) 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a -Statement [7] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) [ __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] ( [ __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:21 [ printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:31 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:35 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:51 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:63 [ screen#1 __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } ) always clobbers reg byte a reg byte x -Statement [9] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 [ __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] ( [ __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:21 [ printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:31 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:35 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:51 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:63 [ screen#1 __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } ) always clobbers reg byte a +Statement [1] __snprintf_buffer = (char *) 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a +Statement [5] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) [ __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] ( [ __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:19 [ printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:29 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:33 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:49 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:61 [ screen#1 __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } ) always clobbers reg byte a reg byte x +Statement [7] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 [ __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] ( [ __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:19 [ printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:29 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:33 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:49 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:61 [ screen#1 __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:89 [ snputc::c#2 snputc::c#0 ] -Statement [11] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 [ __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] ( [ __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:21 [ printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:31 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:35 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:51 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:63 [ screen#1 __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } ) always clobbers reg byte a -Statement [14] *__snprintf_buffer = snputc::c#2 [ __snprintf_capacity __snprintf_size __snprintf_buffer ] ( [ __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snputc:21 [ printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snputc:31 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snputc:35 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snputc:51 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snputc:63 [ screen#1 __snprintf_capacity __snprintf_size __snprintf_buffer ] { } ) always clobbers reg byte a reg byte y -Statement [20] stackpush(char) = 0 [ __snprintf_capacity __snprintf_size __snprintf_buffer printf_buffer ] ( main:5 [ __snprintf_capacity __snprintf_size __snprintf_buffer printf_buffer ] { } ) always clobbers reg byte a +Statement [9] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 [ __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] ( [ __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:19 [ printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:29 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:33 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:49 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:61 [ screen#1 __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } ) always clobbers reg byte a +Statement [12] *__snprintf_buffer = snputc::c#2 [ __snprintf_buffer __snprintf_size __snprintf_capacity ] ( [ __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snputc:19 [ printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snputc:29 [ screen#1 printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snputc:33 [ screen#1 printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snputc:49 [ screen#1 printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snputc:61 [ screen#1 __snprintf_buffer __snprintf_size __snprintf_capacity ] { } ) always clobbers reg byte a reg byte y +Statement [18] stackpush(char) = 0 [ __snprintf_buffer __snprintf_size __snprintf_capacity printf_buffer ] ( main:3 [ __snprintf_buffer __snprintf_size __snprintf_capacity printf_buffer ] { } ) always clobbers reg byte a Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [30] stackpush(char) = '!' [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] ( main:5 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [28] stackpush(char) = '!' [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] ( main:3 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [34] stackpush(char) = 0 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] ( main:5 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { { screen#1 = screen#25 } } ) always clobbers reg byte a +Statement [32] stackpush(char) = 0 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] ( main:3 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { screen#1 = screen#25 } } ) always clobbers reg byte a Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [50] stackpush(char) = 0 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] ( main:5 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { { screen#1 = screen#25 } } ) always clobbers reg byte a +Statement [48] stackpush(char) = 0 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] ( main:3 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { screen#1 = screen#25 } } ) always clobbers reg byte a Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [62] stackpush(char) = 0 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 ] ( main:5 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 ] { { screen#1 = screen#25 } } ) always clobbers reg byte a +Statement [60] stackpush(char) = 0 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 ] ( main:3 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 ] { { screen#1 = screen#25 } } ) always clobbers reg byte a Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [67] __snprintf_capacity = $ffff [ __snprintf_capacity ] ( main:5::snprintf_init:17 [ printf_buffer __snprintf_capacity ] { } main:5::snprintf_init:25 [ screen#1 printf_buffer __snprintf_capacity ] { } main:5::snprintf_init:39 [ screen#1 printf_buffer __snprintf_capacity ] { } main:5::snprintf_init:55 [ screen#1 printf_buffer __snprintf_capacity ] { } ) always clobbers reg byte a -Statement [68] __snprintf_size = 0 [ __snprintf_capacity __snprintf_size ] ( main:5::snprintf_init:17 [ printf_buffer __snprintf_capacity __snprintf_size ] { } main:5::snprintf_init:25 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size ] { } main:5::snprintf_init:39 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size ] { } main:5::snprintf_init:55 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size ] { } ) always clobbers reg byte a -Statement [69] __snprintf_buffer = BUF [ __snprintf_capacity __snprintf_size __snprintf_buffer ] ( main:5::snprintf_init:17 [ printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snprintf_init:25 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snprintf_init:39 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snprintf_init:55 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } ) always clobbers reg byte a -Statement [73] printf_str::c#1 = *printf_str::s#11 [ printf_str::s#11 printf_str::c#1 printf_buffer ] ( main:5::printf_str:19 [ __snprintf_capacity __snprintf_size __snprintf_buffer printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:27 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:33 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:41 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:45 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:49 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:57 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:61 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_string:29::printf_str:89 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_sint:43::printf_number_buffer:95::printf_str:173 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#11 printf_str::c#1 printf_buffer ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101::printf_str:173 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#11 printf_str::c#1 printf_buffer ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107::printf_str:173 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#11 printf_str::c#1 printf_buffer ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } ) always clobbers reg byte a reg byte y +Statement [65] __snprintf_capacity = $ffff [ __snprintf_capacity ] ( main:3::snprintf_init:15 [ printf_buffer __snprintf_capacity ] { } main:3::snprintf_init:23 [ screen#1 printf_buffer __snprintf_capacity ] { } main:3::snprintf_init:37 [ screen#1 printf_buffer __snprintf_capacity ] { } main:3::snprintf_init:53 [ screen#1 printf_buffer __snprintf_capacity ] { } ) always clobbers reg byte a +Statement [66] __snprintf_size = 0 [ __snprintf_size __snprintf_capacity ] ( main:3::snprintf_init:15 [ printf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snprintf_init:23 [ screen#1 printf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snprintf_init:37 [ screen#1 printf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snprintf_init:53 [ screen#1 printf_buffer __snprintf_size __snprintf_capacity ] { } ) always clobbers reg byte a +Statement [67] __snprintf_buffer = BUF [ __snprintf_buffer __snprintf_size __snprintf_capacity ] ( main:3::snprintf_init:15 [ printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snprintf_init:23 [ screen#1 printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snprintf_init:37 [ screen#1 printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snprintf_init:53 [ screen#1 printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } ) always clobbers reg byte a +Statement [71] printf_str::c#1 = *printf_str::s#11 [ printf_str::s#11 printf_str::c#1 printf_buffer ] ( main:3::printf_str:17 [ __snprintf_buffer __snprintf_size __snprintf_capacity printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:25 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:31 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:39 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:43 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:47 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:55 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:59 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_string:27::printf_str:87 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_sint:41::printf_number_buffer:93::printf_str:171 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#11 printf_str::c#1 printf_buffer ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:99::printf_str:171 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#11 printf_str::c#1 printf_buffer ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:3::printf_slong:57::printf_number_buffer:105::printf_str:171 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#11 printf_str::c#1 printf_buffer ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp[1]:94 [ printf_number_buffer::format_justify_left#10 ] Removing always clobbered register reg byte y as potential for zp[1]:94 [ printf_number_buffer::format_justify_left#10 ] Removing always clobbered register reg byte a as potential for zp[1]:93 [ printf_number_buffer::format_zero_padding#10 ] Removing always clobbered register reg byte y as potential for zp[1]:93 [ printf_number_buffer::format_zero_padding#10 ] Removing always clobbered register reg byte a as potential for zp[1]:81 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] Removing always clobbered register reg byte y as potential for zp[1]:81 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] -Statement [78] callexecute *printf_str::putc#12 [ printf_str::s#0 printf_buffer ] ( main:5::printf_str:19 [ __snprintf_capacity __snprintf_size __snprintf_buffer printf_str::s#0 printf_buffer ] { } main:5::printf_str:27 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_str:33 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_str:41 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_str:45 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_str:49 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_str:57 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_str:61 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_string:29::printf_str:89 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_sint:43::printf_number_buffer:95::printf_str:173 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#0 printf_buffer ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101::printf_str:173 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#0 printf_buffer ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107::printf_str:173 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#0 printf_buffer ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } ) always clobbers reg byte a reg byte x reg byte y +Statement [76] callexecute *printf_str::putc#12 [ printf_str::s#0 printf_buffer ] ( main:3::printf_str:17 [ __snprintf_buffer __snprintf_size __snprintf_capacity printf_str::s#0 printf_buffer ] { } main:3::printf_str:25 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_str:31 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_str:39 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_str:43 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_str:47 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_str:55 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_str:59 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_string:27::printf_str:87 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_sint:41::printf_number_buffer:93::printf_str:171 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#0 printf_buffer ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:99::printf_str:171 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#0 printf_buffer ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:3::printf_slong:57::printf_number_buffer:105::printf_str:171 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#0 printf_buffer ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } ) always clobbers reg byte a reg byte x reg byte y Removing always clobbered register reg byte x as potential for zp[1]:94 [ printf_number_buffer::format_justify_left#10 ] Removing always clobbered register reg byte x as potential for zp[1]:93 [ printf_number_buffer::format_zero_padding#10 ] Removing always clobbered register reg byte x as potential for zp[1]:81 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [82] if(0!=*print::msg#5) goto print::@2 [ screen#1 print::msg#5 ] ( main:5::print:23 [ printf_buffer screen#1 print::msg#5 ] { } main:5::print:37 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:5::print:53 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:5::print:65 [ screen#1 print::msg#5 ] { { screen#1 = screen#25 } } ) always clobbers reg byte a reg byte y -Statement [84] *screen#1 = *print::msg#5 [ screen#1 print::msg#5 ] ( main:5::print:23 [ printf_buffer screen#1 print::msg#5 ] { } main:5::print:37 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:5::print:53 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:5::print:65 [ screen#1 print::msg#5 ] { { screen#1 = screen#25 } } ) always clobbers reg byte a reg byte y -Statement [91] *((char *)&printf_buffer) = 0 [ printf_buffer ] ( main:5::printf_sint:43 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a -Statement [98] *((char *)&printf_buffer) = 0 [ printf_buffer ] ( main:5::printf_uint:47 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a -Statement [103] *((char *)&printf_buffer) = 0 [ printf_buffer ] ( main:5::printf_slong:59 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a -Statement [114] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS) = 'e' [ printf_buffer ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a -Statement [115] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1) = 'r' [ printf_buffer ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a -Statement [116] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2) = 'r' [ printf_buffer ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a -Statement [117] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3) = 0 [ printf_buffer ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a -Statement [124] *utoa::buffer#10 = DIGITS[utoa::$11] [ printf_buffer utoa::buffer#10 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::buffer#10 ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::buffer#10 ] { } ) always clobbers reg byte a reg byte y -Statement [125] utoa::buffer#3 = ++ utoa::buffer#10 [ printf_buffer utoa::buffer#3 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::buffer#3 ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::buffer#3 ] { } ) always clobbers reg byte a -Statement [126] *utoa::buffer#3 = 0 [ printf_buffer ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a reg byte y -Statement [127] utoa::$10 = utoa::digit#2 << 1 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { } ) always clobbers reg byte a +Statement [80] if(0!=*print::msg#5) goto print::@2 [ screen#1 print::msg#5 ] ( main:3::print:21 [ printf_buffer screen#1 print::msg#5 ] { } main:3::print:35 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:3::print:51 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:3::print:63 [ screen#1 print::msg#5 ] { { screen#1 = screen#25 } } ) always clobbers reg byte a reg byte y +Statement [82] *screen#1 = *print::msg#5 [ screen#1 print::msg#5 ] ( main:3::print:21 [ printf_buffer screen#1 print::msg#5 ] { } main:3::print:35 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:3::print:51 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:3::print:63 [ screen#1 print::msg#5 ] { { screen#1 = screen#25 } } ) always clobbers reg byte a reg byte y +Statement [89] *((char *)&printf_buffer) = 0 [ printf_buffer ] ( main:3::printf_sint:41 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [96] *((char *)&printf_buffer) = 0 [ printf_buffer ] ( main:3::printf_uint:45 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [101] *((char *)&printf_buffer) = 0 [ printf_buffer ] ( main:3::printf_slong:57 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [112] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS) = 'e' [ printf_buffer ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [113] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1) = 'r' [ printf_buffer ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [114] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2) = 'r' [ printf_buffer ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [115] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3) = 0 [ printf_buffer ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [122] *utoa::buffer#10 = DIGITS[utoa::$11] [ printf_buffer utoa::buffer#10 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::buffer#10 ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::buffer#10 ] { } ) always clobbers reg byte a reg byte y +Statement [123] utoa::buffer#3 = ++ utoa::buffer#10 [ printf_buffer utoa::buffer#3 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::buffer#3 ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::buffer#3 ] { } ) always clobbers reg byte a +Statement [124] *utoa::buffer#3 = 0 [ printf_buffer ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a reg byte y +Statement [125] utoa::$10 = utoa::digit#2 << 1 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:86 [ utoa::max_digits#7 ] Removing always clobbered register reg byte a as potential for zp[1]:43 [ utoa::digit#2 utoa::digit#1 ] Removing always clobbered register reg byte a as potential for zp[1]:55 [ utoa::started#2 utoa::started#4 ] -Statement [128] utoa::digit_value#0 = utoa::digit_values#8[utoa::$10] [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } ) always clobbers reg byte a reg byte y +Statement [126] utoa::digit_value#0 = utoa::digit_values#8[utoa::$10] [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:86 [ utoa::max_digits#7 ] Removing always clobbered register reg byte y as potential for zp[1]:43 [ utoa::digit#2 utoa::digit#1 ] Removing always clobbered register reg byte y as potential for zp[1]:55 [ utoa::started#2 utoa::started#4 ] -Statement [130] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@10 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } ) always clobbers reg byte a -Statement [133] utoa_append::buffer#0 = utoa::buffer#10 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [134] utoa_append::value#0 = utoa::value#3 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [135] utoa_append::sub#0 = utoa::digit_value#0 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [137] utoa_append::return#0 = utoa_append::value#2 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [138] utoa::value#0 = utoa_append::return#0 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { } ) always clobbers reg byte a -Statement [144] strlen::return#2 = strlen::len#2 [ printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::return#2 = strlen::len#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a +Statement [128] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@10 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } ) always clobbers reg byte a +Statement [131] utoa_append::buffer#0 = utoa::buffer#10 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [132] utoa_append::value#0 = utoa::value#3 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [133] utoa_append::sub#0 = utoa::digit_value#0 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [135] utoa_append::return#0 = utoa_append::value#2 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [136] utoa::value#0 = utoa_append::return#0 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { } ) always clobbers reg byte a +Statement [142] strlen::return#2 = strlen::len#2 [ printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::return#2 = strlen::len#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:92 [ printf_number_buffer::format_min_length#3 ] Removing always clobbered register reg byte a as potential for zp[1]:85 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 printf_number_buffer::buffer_sign#2 ] Removing always clobbered register reg byte a as potential for zp[1]:95 [ printf_number_buffer::format_upper_case#10 ] -Statement [145] printf_number_buffer::$19 = strlen::return#2 [ printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [150] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#3 - printf_number_buffer::len#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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [151] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [154] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [155] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [156] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [157] printf_padding::putc#0 = printf_number_buffer::putc#10 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [161] stackpush(char) = printf_number_buffer::buffer_sign#10 [ ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [162] callexecute *printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a reg byte x reg byte y +Statement [143] printf_number_buffer::$19 = strlen::return#2 [ printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [148] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#3 - printf_number_buffer::len#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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [149] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [152] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [153] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [154] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [155] printf_padding::putc#0 = printf_number_buffer::putc#10 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a +Statement [159] stackpush(char) = printf_number_buffer::buffer_sign#10 [ ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [160] callexecute *printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a reg byte x reg byte y Removing always clobbered register reg byte x as potential for zp[1]:95 [ printf_number_buffer::format_upper_case#10 ] Removing always clobbered register reg byte y as potential for zp[1]:95 [ printf_number_buffer::format_upper_case#10 ] Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [164] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [165] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [166] printf_padding::putc#1 = printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [169] if(0==printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [172] printf_str::putc#0 = printf_number_buffer::putc#10 [ printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [174] if(0==printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return [ printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [175] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return [ printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [176] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 [ printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [177] printf_padding::putc#2 = printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [184] ultoa::$11 = (char)ultoa::value#2 [ printf_buffer ultoa::buffer#11 ultoa::$11 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::buffer#11 ultoa::$11 ] { } ) always clobbers reg byte a -Statement [185] *ultoa::buffer#11 = DIGITS[ultoa::$11] [ printf_buffer ultoa::buffer#11 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::buffer#11 ] { } ) always clobbers reg byte a reg byte y -Statement [186] ultoa::buffer#3 = ++ ultoa::buffer#11 [ printf_buffer ultoa::buffer#3 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::buffer#3 ] { } ) always clobbers reg byte a -Statement [187] *ultoa::buffer#3 = 0 [ printf_buffer ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a reg byte y -Statement [189] ultoa::$10 = ultoa::digit#2 << 2 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::$10 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::$10 ] { } ) always clobbers reg byte a +Statement [162] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [163] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [164] printf_padding::putc#1 = printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a +Statement [167] if(0==printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [170] printf_str::putc#0 = printf_number_buffer::putc#10 [ printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } ) always clobbers reg byte a +Statement [172] if(0==printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return [ printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [173] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return [ printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [174] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 [ printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [175] printf_padding::putc#2 = printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a +Statement [182] ultoa::$11 = (char)ultoa::value#2 [ printf_buffer ultoa::buffer#11 ultoa::$11 ] ( main:3::printf_slong:57::ultoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::buffer#11 ultoa::$11 ] { } ) always clobbers reg byte a +Statement [183] *ultoa::buffer#11 = DIGITS[ultoa::$11] [ printf_buffer ultoa::buffer#11 ] ( main:3::printf_slong:57::ultoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::buffer#11 ] { } ) always clobbers reg byte a reg byte y +Statement [184] ultoa::buffer#3 = ++ ultoa::buffer#11 [ printf_buffer ultoa::buffer#3 ] ( main:3::printf_slong:57::ultoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::buffer#3 ] { } ) always clobbers reg byte a +Statement [185] *ultoa::buffer#3 = 0 [ printf_buffer ] ( main:3::printf_slong:57::ultoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a reg byte y +Statement [187] ultoa::$10 = ultoa::digit#2 << 2 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::$10 ] ( main:3::printf_slong:57::ultoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::$10 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:42 [ ultoa::digit#2 ultoa::digit#1 ] Removing always clobbered register reg byte a as potential for zp[1]:54 [ ultoa::started#2 ultoa::started#4 ] -Statement [190] ultoa::digit_value#0 = RADIX_DECIMAL_VALUES_LONG[ultoa::$10] [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] { } ) always clobbers reg byte a -Statement [192] if(ultoa::value#2>=ultoa::digit_value#0) goto ultoa::@5 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] { } ) always clobbers reg byte a -Statement [195] ultoa_append::buffer#0 = ultoa::buffer#11 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [196] ultoa_append::value#0 = ultoa::value#2 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ultoa_append::value#0 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ultoa_append::value#0 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [197] ultoa_append::sub#0 = ultoa::digit_value#0 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [199] ultoa_append::return#0 = ultoa_append::value#2 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::return#0 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::return#0 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [200] ultoa::value#0 = ultoa_append::return#0 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::value#0 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::value#0 ] { } ) always clobbers reg byte a -Statement [204] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:5::printf_sint:43::utoa:93::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [188] ultoa::digit_value#0 = RADIX_DECIMAL_VALUES_LONG[ultoa::$10] [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ( main:3::printf_slong:57::ultoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] { } ) always clobbers reg byte a +Statement [190] if(ultoa::value#2>=ultoa::digit_value#0) goto ultoa::@5 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ( main:3::printf_slong:57::ultoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] { } ) always clobbers reg byte a +Statement [193] ultoa_append::buffer#0 = ultoa::buffer#11 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ] ( main:3::printf_slong:57::ultoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [194] ultoa_append::value#0 = ultoa::value#2 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ultoa_append::value#0 ] ( main:3::printf_slong:57::ultoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ultoa_append::value#0 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [195] ultoa_append::sub#0 = ultoa::digit_value#0 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] ( main:3::printf_slong:57::ultoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [197] ultoa_append::return#0 = ultoa_append::value#2 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::return#0 ] ( main:3::printf_slong:57::ultoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::return#0 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [198] ultoa::value#0 = ultoa_append::return#0 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::value#0 ] ( main:3::printf_slong:57::ultoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::value#0 ] { } ) always clobbers reg byte a +Statement [202] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:3::printf_sint:41::utoa:91::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:8 [ utoa_append::digit#2 utoa_append::digit#1 ] -Statement [205] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] [ utoa_append::value#2 ] ( main:5::printf_sint:43::utoa:93::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a reg byte y -Statement [208] 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:5::printf_sint:43::utoa:93::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [211] if(0!=*strlen::str#3) goto strlen::@2 [ printf_buffer strlen::len#2 strlen::str#3 ] ( main:5::printf_sint:43::printf_number_buffer:95::strlen:143 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_uint:47::printf_number_buffer:101::strlen:143 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::return#2 = strlen::len#2 } } main:5::printf_slong:59::printf_number_buffer:107::strlen:143 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a reg byte y +Statement [203] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] [ utoa_append::value#2 ] ( main:3::printf_sint:41::utoa:91::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a reg byte y +Statement [206] 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:3::printf_sint:41::utoa:91::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [209] if(0!=*strlen::str#3) goto strlen::@2 [ printf_buffer strlen::len#2 strlen::str#3 ] ( main:3::printf_sint:41::printf_number_buffer:93::strlen:141 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:3::printf_uint:45::printf_number_buffer:99::strlen:141 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::return#2 = strlen::len#2 } } main:3::printf_slong:57::printf_number_buffer:105::strlen:141 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:92 [ printf_number_buffer::format_min_length#3 ] Removing always clobbered register reg byte y as potential for zp[1]:85 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 printf_number_buffer::buffer_sign#2 ] -Statement [220] callexecute *printf_padding::putc#7 [ printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] ( main:5::printf_sint:43::printf_number_buffer:95::printf_padding:159 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101::printf_padding:159 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107::printf_padding:159 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_sint:43::printf_number_buffer:95::printf_padding:168 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101::printf_padding:168 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107::printf_padding:168 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_sint:43::printf_number_buffer:95::printf_padding:179 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101::printf_padding:179 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107::printf_padding:179 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a reg byte x reg byte y +Statement [218] callexecute *printf_padding::putc#7 [ printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] ( main:3::printf_sint:41::printf_number_buffer:93::printf_padding:157 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:99::printf_padding:157 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_slong:57::printf_number_buffer:105::printf_padding:157 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_sint:41::printf_number_buffer:93::printf_padding:166 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:99::printf_padding:166 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_slong:57::printf_number_buffer:105::printf_padding:166 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_sint:41::printf_number_buffer:93::printf_padding:177 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:99::printf_padding:177 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_slong:57::printf_number_buffer:105::printf_padding:177 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_padding::length#6 printf_padding::pad#7 printf_padding::i#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a reg byte x reg byte y Removing always clobbered register reg byte x as potential for zp[1]:85 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 printf_number_buffer::buffer_sign#2 ] Removing always clobbered register reg byte a as potential for zp[1]:41 [ printf_padding::length#6 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] Removing always clobbered register reg byte x as potential for zp[1]:41 [ printf_padding::length#6 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] @@ -4977,212 +4971,208 @@ Removing always clobbered register reg byte a as potential for zp[1]:19 [ printf Removing always clobbered register reg byte x as potential for zp[1]:19 [ printf_padding::i#2 printf_padding::i#1 ] Removing always clobbered register reg byte y as potential for zp[1]:19 [ printf_padding::i#2 printf_padding::i#1 ] Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [225] if(0!=*strupr::src#2) goto strupr::@2 [ strupr::src#2 ] ( main:5::printf_sint:43::printf_number_buffer:95::strupr:171 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101::strupr:171 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107::strupr:171 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a reg byte y -Statement [227] toupper::ch#0 = *strupr::src#2 [ strupr::src#2 toupper::ch#0 ] ( main:5::printf_sint:43::printf_number_buffer:95::strupr:171 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#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:5::printf_uint:47::printf_number_buffer:101::strupr:171 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { toupper::return#2 = toupper::return#3 } } main:5::printf_slong:59::printf_number_buffer:107::strupr:171 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } ) always clobbers reg byte a reg byte y -Statement [231] *strupr::src#2 = strupr::$0 [ strupr::src#2 ] ( main:5::printf_sint:43::printf_number_buffer:95::strupr:171 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101::strupr:171 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107::strupr:171 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte y -Statement [235] if(ultoa_append::value#2>=ultoa_append::sub#0) goto ultoa_append::@2 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] ( main:5::printf_slong:59::ultoa:105::ultoa_append:198 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [223] if(0!=*strupr::src#2) goto strupr::@2 [ strupr::src#2 ] ( main:3::printf_sint:41::printf_number_buffer:93::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a reg byte y +Statement [225] toupper::ch#0 = *strupr::src#2 [ strupr::src#2 toupper::ch#0 ] ( main:3::printf_sint:41::printf_number_buffer:93::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#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:3::printf_uint:45::printf_number_buffer:99::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { toupper::return#2 = toupper::return#3 } } main:3::printf_slong:57::printf_number_buffer:105::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } ) always clobbers reg byte a reg byte y +Statement [229] *strupr::src#2 = strupr::$0 [ strupr::src#2 ] ( main:3::printf_sint:41::printf_number_buffer:93::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte y +Statement [233] if(ultoa_append::value#2>=ultoa_append::sub#0) goto ultoa_append::@2 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] ( main:3::printf_slong:57::ultoa:103::ultoa_append:196 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:9 [ ultoa_append::digit#2 ultoa_append::digit#1 ] -Statement [236] *ultoa_append::buffer#0 = DIGITS[ultoa_append::digit#2] [ ultoa_append::value#2 ] ( main:5::printf_slong:59::ultoa:105::ultoa_append:198 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::value#2 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a reg byte y +Statement [234] *ultoa_append::buffer#0 = DIGITS[ultoa_append::digit#2] [ ultoa_append::value#2 ] ( main:3::printf_slong:57::ultoa:103::ultoa_append:196 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::value#2 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:42 [ ultoa::digit#2 ultoa::digit#1 ] -Statement [239] ultoa_append::value#1 = ultoa_append::value#2 - ultoa_append::sub#0 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] ( main:5::printf_slong:59::ultoa:105::ultoa_append:198 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [242] toupper::return#0 = toupper::ch#0 + 'A'-'a' [ toupper::return#0 ] ( main:5::printf_sint:43::printf_number_buffer:95::strupr:171::toupper:228 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } main:5::printf_uint:47::printf_number_buffer:101::strupr:171::toupper:228 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { toupper::return#2 = toupper::return#3 } } main:5::printf_slong:59::printf_number_buffer:107::strupr:171::toupper:228 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } ) always clobbers reg byte a -Statement [1] __snprintf_capacity = 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a -Statement [2] __snprintf_size = 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a -Statement [3] __snprintf_buffer = (char *) 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a -Statement [7] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) [ __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] ( [ __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:21 [ printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:31 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:35 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:51 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:63 [ screen#1 __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } ) always clobbers reg byte a reg byte x -Statement [9] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 [ __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] ( [ __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:21 [ printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:31 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:35 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:51 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:63 [ screen#1 __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } ) always clobbers reg byte a -Statement [11] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 [ __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] ( [ __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:21 [ printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:31 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:35 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:51 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:63 [ screen#1 __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } ) always clobbers reg byte a -Statement [14] *__snprintf_buffer = snputc::c#2 [ __snprintf_capacity __snprintf_size __snprintf_buffer ] ( [ __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snputc:21 [ printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snputc:31 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snputc:35 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snputc:51 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snputc:63 [ screen#1 __snprintf_capacity __snprintf_size __snprintf_buffer ] { } ) always clobbers reg byte a reg byte y -Statement [20] stackpush(char) = 0 [ __snprintf_capacity __snprintf_size __snprintf_buffer printf_buffer ] ( main:5 [ __snprintf_capacity __snprintf_size __snprintf_buffer printf_buffer ] { } ) always clobbers reg byte a +Statement [237] ultoa_append::value#1 = ultoa_append::value#2 - ultoa_append::sub#0 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] ( main:3::printf_slong:57::ultoa:103::ultoa_append:196 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [240] toupper::return#0 = toupper::ch#0 + 'A'-'a' [ toupper::return#0 ] ( main:3::printf_sint:41::printf_number_buffer:93::strupr:169::toupper:226 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } main:3::printf_uint:45::printf_number_buffer:99::strupr:169::toupper:226 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { toupper::return#2 = toupper::return#3 } } main:3::printf_slong:57::printf_number_buffer:105::strupr:169::toupper:226 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } ) always clobbers reg byte a +Statement [1] __snprintf_buffer = (char *) 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a +Statement [5] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) [ __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] ( [ __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:19 [ printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:29 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:33 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:49 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:61 [ screen#1 __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } ) always clobbers reg byte a reg byte x +Statement [7] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 [ __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] ( [ __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:19 [ printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:29 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:33 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:49 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:61 [ screen#1 __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } ) always clobbers reg byte a +Statement [9] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 [ __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] ( [ __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:19 [ printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:29 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:33 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:49 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:61 [ screen#1 __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } ) always clobbers reg byte a +Statement [12] *__snprintf_buffer = snputc::c#2 [ __snprintf_buffer __snprintf_size __snprintf_capacity ] ( [ __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snputc:19 [ printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snputc:29 [ screen#1 printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snputc:33 [ screen#1 printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snputc:49 [ screen#1 printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snputc:61 [ screen#1 __snprintf_buffer __snprintf_size __snprintf_capacity ] { } ) always clobbers reg byte a reg byte y +Statement [18] stackpush(char) = 0 [ __snprintf_buffer __snprintf_size __snprintf_capacity printf_buffer ] ( main:3 [ __snprintf_buffer __snprintf_size __snprintf_capacity printf_buffer ] { } ) always clobbers reg byte a Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [30] stackpush(char) = '!' [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] ( main:5 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [28] stackpush(char) = '!' [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] ( main:3 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [34] stackpush(char) = 0 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] ( main:5 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { { screen#1 = screen#25 } } ) always clobbers reg byte a +Statement [32] stackpush(char) = 0 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] ( main:3 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { screen#1 = screen#25 } } ) always clobbers reg byte a Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [50] stackpush(char) = 0 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] ( main:5 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { { screen#1 = screen#25 } } ) always clobbers reg byte a +Statement [48] stackpush(char) = 0 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] ( main:3 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { screen#1 = screen#25 } } ) always clobbers reg byte a Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [62] stackpush(char) = 0 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 ] ( main:5 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 ] { { screen#1 = screen#25 } } ) always clobbers reg byte a +Statement [60] stackpush(char) = 0 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 ] ( main:3 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 ] { { screen#1 = screen#25 } } ) always clobbers reg byte a Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [67] __snprintf_capacity = $ffff [ __snprintf_capacity ] ( main:5::snprintf_init:17 [ printf_buffer __snprintf_capacity ] { } main:5::snprintf_init:25 [ screen#1 printf_buffer __snprintf_capacity ] { } main:5::snprintf_init:39 [ screen#1 printf_buffer __snprintf_capacity ] { } main:5::snprintf_init:55 [ screen#1 printf_buffer __snprintf_capacity ] { } ) always clobbers reg byte a -Statement [68] __snprintf_size = 0 [ __snprintf_capacity __snprintf_size ] ( main:5::snprintf_init:17 [ printf_buffer __snprintf_capacity __snprintf_size ] { } main:5::snprintf_init:25 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size ] { } main:5::snprintf_init:39 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size ] { } main:5::snprintf_init:55 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size ] { } ) always clobbers reg byte a -Statement [69] __snprintf_buffer = BUF [ __snprintf_capacity __snprintf_size __snprintf_buffer ] ( main:5::snprintf_init:17 [ printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snprintf_init:25 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snprintf_init:39 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snprintf_init:55 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } ) always clobbers reg byte a -Statement [73] printf_str::c#1 = *printf_str::s#11 [ printf_str::s#11 printf_str::c#1 printf_buffer ] ( main:5::printf_str:19 [ __snprintf_capacity __snprintf_size __snprintf_buffer printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:27 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:33 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:41 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:45 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:49 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:57 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:61 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_string:29::printf_str:89 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_sint:43::printf_number_buffer:95::printf_str:173 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#11 printf_str::c#1 printf_buffer ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101::printf_str:173 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#11 printf_str::c#1 printf_buffer ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107::printf_str:173 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#11 printf_str::c#1 printf_buffer ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } ) always clobbers reg byte a reg byte y -Statement [78] callexecute *printf_str::putc#12 [ printf_str::s#0 printf_buffer ] ( main:5::printf_str:19 [ __snprintf_capacity __snprintf_size __snprintf_buffer printf_str::s#0 printf_buffer ] { } main:5::printf_str:27 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_str:33 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_str:41 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_str:45 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_str:49 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_str:57 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_str:61 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_string:29::printf_str:89 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_sint:43::printf_number_buffer:95::printf_str:173 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#0 printf_buffer ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101::printf_str:173 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#0 printf_buffer ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107::printf_str:173 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#0 printf_buffer ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } ) always clobbers reg byte a reg byte x reg byte y +Statement [65] __snprintf_capacity = $ffff [ __snprintf_capacity ] ( main:3::snprintf_init:15 [ printf_buffer __snprintf_capacity ] { } main:3::snprintf_init:23 [ screen#1 printf_buffer __snprintf_capacity ] { } main:3::snprintf_init:37 [ screen#1 printf_buffer __snprintf_capacity ] { } main:3::snprintf_init:53 [ screen#1 printf_buffer __snprintf_capacity ] { } ) always clobbers reg byte a +Statement [66] __snprintf_size = 0 [ __snprintf_size __snprintf_capacity ] ( main:3::snprintf_init:15 [ printf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snprintf_init:23 [ screen#1 printf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snprintf_init:37 [ screen#1 printf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snprintf_init:53 [ screen#1 printf_buffer __snprintf_size __snprintf_capacity ] { } ) always clobbers reg byte a +Statement [67] __snprintf_buffer = BUF [ __snprintf_buffer __snprintf_size __snprintf_capacity ] ( main:3::snprintf_init:15 [ printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snprintf_init:23 [ screen#1 printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snprintf_init:37 [ screen#1 printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snprintf_init:53 [ screen#1 printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } ) always clobbers reg byte a +Statement [71] printf_str::c#1 = *printf_str::s#11 [ printf_str::s#11 printf_str::c#1 printf_buffer ] ( main:3::printf_str:17 [ __snprintf_buffer __snprintf_size __snprintf_capacity printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:25 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:31 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:39 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:43 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:47 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:55 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:59 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_string:27::printf_str:87 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_sint:41::printf_number_buffer:93::printf_str:171 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#11 printf_str::c#1 printf_buffer ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:99::printf_str:171 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#11 printf_str::c#1 printf_buffer ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:3::printf_slong:57::printf_number_buffer:105::printf_str:171 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#11 printf_str::c#1 printf_buffer ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } ) always clobbers reg byte a reg byte y +Statement [76] callexecute *printf_str::putc#12 [ printf_str::s#0 printf_buffer ] ( main:3::printf_str:17 [ __snprintf_buffer __snprintf_size __snprintf_capacity printf_str::s#0 printf_buffer ] { } main:3::printf_str:25 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_str:31 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_str:39 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_str:43 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_str:47 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_str:55 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_str:59 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_string:27::printf_str:87 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_sint:41::printf_number_buffer:93::printf_str:171 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#0 printf_buffer ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:99::printf_str:171 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#0 printf_buffer ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:3::printf_slong:57::printf_number_buffer:105::printf_str:171 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#0 printf_buffer ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } ) always clobbers reg byte a reg byte x reg byte y Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [82] if(0!=*print::msg#5) goto print::@2 [ screen#1 print::msg#5 ] ( main:5::print:23 [ printf_buffer screen#1 print::msg#5 ] { } main:5::print:37 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:5::print:53 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:5::print:65 [ screen#1 print::msg#5 ] { { screen#1 = screen#25 } } ) always clobbers reg byte a reg byte y -Statement [84] *screen#1 = *print::msg#5 [ screen#1 print::msg#5 ] ( main:5::print:23 [ printf_buffer screen#1 print::msg#5 ] { } main:5::print:37 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:5::print:53 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:5::print:65 [ screen#1 print::msg#5 ] { { screen#1 = screen#25 } } ) always clobbers reg byte a reg byte y -Statement [91] *((char *)&printf_buffer) = 0 [ printf_buffer ] ( main:5::printf_sint:43 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a -Statement [94] printf_number_buffer::buffer_sign#1 = *((char *)&printf_buffer) [ printf_buffer printf_number_buffer::buffer_sign#1 ] ( main:5::printf_sint:43 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::buffer_sign#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [98] *((char *)&printf_buffer) = 0 [ printf_buffer ] ( main:5::printf_uint:47 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a -Statement [100] printf_number_buffer::buffer_sign#2 = *((char *)&printf_buffer) [ printf_buffer printf_number_buffer::buffer_sign#2 ] ( main:5::printf_uint:47 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::buffer_sign#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } ) always clobbers reg byte a -Statement [103] *((char *)&printf_buffer) = 0 [ printf_buffer ] ( main:5::printf_slong:59 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a -Statement [106] printf_number_buffer::buffer_sign#0 = *((char *)&printf_buffer) [ printf_buffer printf_number_buffer::buffer_sign#0 ] ( main:5::printf_slong:59 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::buffer_sign#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [114] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS) = 'e' [ printf_buffer ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a -Statement [115] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1) = 'r' [ printf_buffer ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a -Statement [116] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2) = 'r' [ printf_buffer ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a -Statement [117] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3) = 0 [ printf_buffer ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a -Statement [124] *utoa::buffer#10 = DIGITS[utoa::$11] [ printf_buffer utoa::buffer#10 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::buffer#10 ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::buffer#10 ] { } ) always clobbers reg byte a reg byte y -Statement [125] utoa::buffer#3 = ++ utoa::buffer#10 [ printf_buffer utoa::buffer#3 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::buffer#3 ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::buffer#3 ] { } ) always clobbers reg byte a -Statement [126] *utoa::buffer#3 = 0 [ printf_buffer ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a reg byte y -Statement [127] utoa::$10 = utoa::digit#2 << 1 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { } ) always clobbers reg byte a -Statement [128] utoa::digit_value#0 = utoa::digit_values#8[utoa::$10] [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } ) always clobbers reg byte a reg byte y -Statement [130] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@10 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } ) always clobbers reg byte a -Statement [133] utoa_append::buffer#0 = utoa::buffer#10 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [134] utoa_append::value#0 = utoa::value#3 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [135] utoa_append::sub#0 = utoa::digit_value#0 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [137] utoa_append::return#0 = utoa_append::value#2 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [138] utoa::value#0 = utoa_append::return#0 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { } ) always clobbers reg byte a -Statement [144] strlen::return#2 = strlen::len#2 [ printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::return#2 = strlen::len#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a -Statement [145] printf_number_buffer::$19 = strlen::return#2 [ printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [147] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 [ printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [80] if(0!=*print::msg#5) goto print::@2 [ screen#1 print::msg#5 ] ( main:3::print:21 [ printf_buffer screen#1 print::msg#5 ] { } main:3::print:35 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:3::print:51 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:3::print:63 [ screen#1 print::msg#5 ] { { screen#1 = screen#25 } } ) always clobbers reg byte a reg byte y +Statement [82] *screen#1 = *print::msg#5 [ screen#1 print::msg#5 ] ( main:3::print:21 [ printf_buffer screen#1 print::msg#5 ] { } main:3::print:35 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:3::print:51 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:3::print:63 [ screen#1 print::msg#5 ] { { screen#1 = screen#25 } } ) always clobbers reg byte a reg byte y +Statement [89] *((char *)&printf_buffer) = 0 [ printf_buffer ] ( main:3::printf_sint:41 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [92] printf_number_buffer::buffer_sign#1 = *((char *)&printf_buffer) [ printf_buffer printf_number_buffer::buffer_sign#1 ] ( main:3::printf_sint:41 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::buffer_sign#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [96] *((char *)&printf_buffer) = 0 [ printf_buffer ] ( main:3::printf_uint:45 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [98] printf_number_buffer::buffer_sign#2 = *((char *)&printf_buffer) [ printf_buffer printf_number_buffer::buffer_sign#2 ] ( main:3::printf_uint:45 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::buffer_sign#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } ) always clobbers reg byte a +Statement [101] *((char *)&printf_buffer) = 0 [ printf_buffer ] ( main:3::printf_slong:57 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [104] printf_number_buffer::buffer_sign#0 = *((char *)&printf_buffer) [ printf_buffer printf_number_buffer::buffer_sign#0 ] ( main:3::printf_slong:57 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::buffer_sign#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [112] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS) = 'e' [ printf_buffer ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [113] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1) = 'r' [ printf_buffer ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [114] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2) = 'r' [ printf_buffer ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [115] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3) = 0 [ printf_buffer ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [122] *utoa::buffer#10 = DIGITS[utoa::$11] [ printf_buffer utoa::buffer#10 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::buffer#10 ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::buffer#10 ] { } ) always clobbers reg byte a reg byte y +Statement [123] utoa::buffer#3 = ++ utoa::buffer#10 [ printf_buffer utoa::buffer#3 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::buffer#3 ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::buffer#3 ] { } ) always clobbers reg byte a +Statement [124] *utoa::buffer#3 = 0 [ printf_buffer ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a reg byte y +Statement [125] utoa::$10 = utoa::digit#2 << 1 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { } ) always clobbers reg byte a +Statement [126] utoa::digit_value#0 = utoa::digit_values#8[utoa::$10] [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } ) always clobbers reg byte a reg byte y +Statement [128] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@10 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } ) always clobbers reg byte a +Statement [131] utoa_append::buffer#0 = utoa::buffer#10 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [132] utoa_append::value#0 = utoa::value#3 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [133] utoa_append::sub#0 = utoa::digit_value#0 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [135] utoa_append::return#0 = utoa_append::value#2 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [136] utoa::value#0 = utoa_append::return#0 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { } ) always clobbers reg byte a +Statement [142] strlen::return#2 = strlen::len#2 [ printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::return#2 = strlen::len#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a +Statement [143] printf_number_buffer::$19 = strlen::return#2 [ printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [145] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 [ printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:62 [ printf_number_buffer::len#2 printf_number_buffer::len#0 printf_number_buffer::len#1 ] -Statement [150] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#3 - printf_number_buffer::len#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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [151] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [154] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [155] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [156] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [157] printf_padding::putc#0 = printf_number_buffer::putc#10 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [158] printf_padding::length#0 = (char)printf_number_buffer::padding#10 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [160] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [161] stackpush(char) = printf_number_buffer::buffer_sign#10 [ ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [162] callexecute *printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a reg byte x reg byte y +Statement [148] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#3 - printf_number_buffer::len#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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [149] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [152] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [153] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [154] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [155] printf_padding::putc#0 = printf_number_buffer::putc#10 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a +Statement [156] printf_padding::length#0 = (char)printf_number_buffer::padding#10 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a +Statement [158] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [159] stackpush(char) = printf_number_buffer::buffer_sign#10 [ ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [160] callexecute *printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a reg byte x reg byte y Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [164] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [165] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [166] printf_padding::putc#1 = printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [167] printf_padding::length#1 = (char)printf_number_buffer::padding#10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 printf_padding::length#1 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 printf_padding::length#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 printf_padding::length#1 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 printf_padding::length#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [169] if(0==printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [172] printf_str::putc#0 = printf_number_buffer::putc#10 [ printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [174] if(0==printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return [ printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [175] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return [ printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [176] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 [ printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [177] printf_padding::putc#2 = printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [178] printf_padding::length#2 = (char)printf_number_buffer::padding#10 [ printf_buffer printf_padding::putc#2 printf_padding::length#2 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_padding::putc#2 printf_padding::length#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_padding::putc#2 printf_padding::length#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_padding::putc#2 printf_padding::length#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [184] ultoa::$11 = (char)ultoa::value#2 [ printf_buffer ultoa::buffer#11 ultoa::$11 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::buffer#11 ultoa::$11 ] { } ) always clobbers reg byte a -Statement [185] *ultoa::buffer#11 = DIGITS[ultoa::$11] [ printf_buffer ultoa::buffer#11 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::buffer#11 ] { } ) always clobbers reg byte a reg byte y -Statement [186] ultoa::buffer#3 = ++ ultoa::buffer#11 [ printf_buffer ultoa::buffer#3 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::buffer#3 ] { } ) always clobbers reg byte a -Statement [187] *ultoa::buffer#3 = 0 [ printf_buffer ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a reg byte y -Statement [189] ultoa::$10 = ultoa::digit#2 << 2 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::$10 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::$10 ] { } ) always clobbers reg byte a -Statement [190] ultoa::digit_value#0 = RADIX_DECIMAL_VALUES_LONG[ultoa::$10] [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] { } ) always clobbers reg byte a -Statement [192] if(ultoa::value#2>=ultoa::digit_value#0) goto ultoa::@5 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] { } ) always clobbers reg byte a -Statement [195] ultoa_append::buffer#0 = ultoa::buffer#11 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [196] ultoa_append::value#0 = ultoa::value#2 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ultoa_append::value#0 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ultoa_append::value#0 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [197] ultoa_append::sub#0 = ultoa::digit_value#0 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [199] ultoa_append::return#0 = ultoa_append::value#2 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::return#0 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::return#0 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [200] ultoa::value#0 = ultoa_append::return#0 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::value#0 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::value#0 ] { } ) always clobbers reg byte a -Statement [204] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:5::printf_sint:43::utoa:93::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [205] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] [ utoa_append::value#2 ] ( main:5::printf_sint:43::utoa:93::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a reg byte y -Statement [208] 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:5::printf_sint:43::utoa:93::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [211] if(0!=*strlen::str#3) goto strlen::@2 [ printf_buffer strlen::len#2 strlen::str#3 ] ( main:5::printf_sint:43::printf_number_buffer:95::strlen:143 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_uint:47::printf_number_buffer:101::strlen:143 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::return#2 = strlen::len#2 } } main:5::printf_slong:59::printf_number_buffer:107::strlen:143 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a reg byte y -Statement [217] if(printf_padding::i#2=ultoa::digit_value#0) goto ultoa::@5 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ( main:3::printf_slong:57::ultoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] { } ) always clobbers reg byte a +Statement [193] ultoa_append::buffer#0 = ultoa::buffer#11 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ] ( main:3::printf_slong:57::ultoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [194] ultoa_append::value#0 = ultoa::value#2 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ultoa_append::value#0 ] ( main:3::printf_slong:57::ultoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ultoa_append::value#0 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [195] ultoa_append::sub#0 = ultoa::digit_value#0 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] ( main:3::printf_slong:57::ultoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [197] ultoa_append::return#0 = ultoa_append::value#2 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::return#0 ] ( main:3::printf_slong:57::ultoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::return#0 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [198] ultoa::value#0 = ultoa_append::return#0 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::value#0 ] ( main:3::printf_slong:57::ultoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::value#0 ] { } ) always clobbers reg byte a +Statement [202] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:3::printf_sint:41::utoa:91::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [203] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] [ utoa_append::value#2 ] ( main:3::printf_sint:41::utoa:91::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a reg byte y +Statement [206] 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:3::printf_sint:41::utoa:91::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [209] if(0!=*strlen::str#3) goto strlen::@2 [ printf_buffer strlen::len#2 strlen::str#3 ] ( main:3::printf_sint:41::printf_number_buffer:93::strlen:141 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:3::printf_uint:45::printf_number_buffer:99::strlen:141 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::return#2 = strlen::len#2 } } main:3::printf_slong:57::printf_number_buffer:105::strlen:141 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a reg byte y +Statement [215] if(printf_padding::i#2=ultoa_append::sub#0) goto ultoa_append::@2 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] ( main:5::printf_slong:59::ultoa:105::ultoa_append:198 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [236] *ultoa_append::buffer#0 = DIGITS[ultoa_append::digit#2] [ ultoa_append::value#2 ] ( main:5::printf_slong:59::ultoa:105::ultoa_append:198 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::value#2 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a reg byte y -Statement [239] ultoa_append::value#1 = ultoa_append::value#2 - ultoa_append::sub#0 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] ( main:5::printf_slong:59::ultoa:105::ultoa_append:198 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [242] toupper::return#0 = toupper::ch#0 + 'A'-'a' [ toupper::return#0 ] ( main:5::printf_sint:43::printf_number_buffer:95::strupr:171::toupper:228 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } main:5::printf_uint:47::printf_number_buffer:101::strupr:171::toupper:228 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { toupper::return#2 = toupper::return#3 } } main:5::printf_slong:59::printf_number_buffer:107::strupr:171::toupper:228 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } ) always clobbers reg byte a -Statement [1] __snprintf_capacity = 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a -Statement [2] __snprintf_size = 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a -Statement [3] __snprintf_buffer = (char *) 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a -Statement [7] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) [ __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] ( [ __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:21 [ printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:31 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:35 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:51 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:63 [ screen#1 __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } ) always clobbers reg byte a reg byte x -Statement [9] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 [ __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] ( [ __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:21 [ printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:31 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:35 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:51 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:63 [ screen#1 __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } ) always clobbers reg byte a -Statement [11] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 [ __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] ( [ __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:21 [ printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:31 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:35 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:51 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } main:5::snputc:63 [ screen#1 __snprintf_capacity __snprintf_size __snprintf_buffer snputc::c#0 ] { } ) always clobbers reg byte a -Statement [14] *__snprintf_buffer = snputc::c#2 [ __snprintf_capacity __snprintf_size __snprintf_buffer ] ( [ __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snputc:21 [ printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snputc:31 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snputc:35 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snputc:51 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snputc:63 [ screen#1 __snprintf_capacity __snprintf_size __snprintf_buffer ] { } ) always clobbers reg byte a reg byte y -Statement [20] stackpush(char) = 0 [ __snprintf_capacity __snprintf_size __snprintf_buffer printf_buffer ] ( main:5 [ __snprintf_capacity __snprintf_size __snprintf_buffer printf_buffer ] { } ) always clobbers reg byte a +Statement [223] if(0!=*strupr::src#2) goto strupr::@2 [ strupr::src#2 ] ( main:3::printf_sint:41::printf_number_buffer:93::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a reg byte y +Statement [225] toupper::ch#0 = *strupr::src#2 [ strupr::src#2 toupper::ch#0 ] ( main:3::printf_sint:41::printf_number_buffer:93::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#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:3::printf_uint:45::printf_number_buffer:99::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { toupper::return#2 = toupper::return#3 } } main:3::printf_slong:57::printf_number_buffer:105::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } ) always clobbers reg byte a reg byte y +Statement [229] *strupr::src#2 = strupr::$0 [ strupr::src#2 ] ( main:3::printf_sint:41::printf_number_buffer:93::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte y +Statement [233] if(ultoa_append::value#2>=ultoa_append::sub#0) goto ultoa_append::@2 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] ( main:3::printf_slong:57::ultoa:103::ultoa_append:196 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [234] *ultoa_append::buffer#0 = DIGITS[ultoa_append::digit#2] [ ultoa_append::value#2 ] ( main:3::printf_slong:57::ultoa:103::ultoa_append:196 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::value#2 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a reg byte y +Statement [237] ultoa_append::value#1 = ultoa_append::value#2 - ultoa_append::sub#0 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] ( main:3::printf_slong:57::ultoa:103::ultoa_append:196 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [240] toupper::return#0 = toupper::ch#0 + 'A'-'a' [ toupper::return#0 ] ( main:3::printf_sint:41::printf_number_buffer:93::strupr:169::toupper:226 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } main:3::printf_uint:45::printf_number_buffer:99::strupr:169::toupper:226 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { toupper::return#2 = toupper::return#3 } } main:3::printf_slong:57::printf_number_buffer:105::strupr:169::toupper:226 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } ) always clobbers reg byte a +Statement [1] __snprintf_buffer = (char *) 0 [ printf_buffer ] ( [ printf_buffer ] { } ) always clobbers reg byte a +Statement [5] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) [ __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] ( [ __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:19 [ printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:29 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:33 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:49 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:61 [ screen#1 __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } ) always clobbers reg byte a reg byte x +Statement [7] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 [ __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] ( [ __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:19 [ printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:29 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:33 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:49 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:61 [ screen#1 __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } ) always clobbers reg byte a +Statement [9] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 [ __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] ( [ __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:19 [ printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:29 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:33 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:49 [ screen#1 printf_buffer __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } main:3::snputc:61 [ screen#1 __snprintf_buffer snputc::c#0 __snprintf_size __snprintf_capacity ] { } ) always clobbers reg byte a +Statement [12] *__snprintf_buffer = snputc::c#2 [ __snprintf_buffer __snprintf_size __snprintf_capacity ] ( [ __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snputc:19 [ printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snputc:29 [ screen#1 printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snputc:33 [ screen#1 printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snputc:49 [ screen#1 printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snputc:61 [ screen#1 __snprintf_buffer __snprintf_size __snprintf_capacity ] { } ) always clobbers reg byte a reg byte y +Statement [18] stackpush(char) = 0 [ __snprintf_buffer __snprintf_size __snprintf_capacity printf_buffer ] ( main:3 [ __snprintf_buffer __snprintf_size __snprintf_capacity printf_buffer ] { } ) always clobbers reg byte a Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [30] stackpush(char) = '!' [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] ( main:5 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [28] stackpush(char) = '!' [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] ( main:3 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [34] stackpush(char) = 0 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] ( main:5 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { { screen#1 = screen#25 } } ) always clobbers reg byte a +Statement [32] stackpush(char) = 0 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] ( main:3 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { screen#1 = screen#25 } } ) always clobbers reg byte a Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [50] stackpush(char) = 0 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] ( main:5 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { { screen#1 = screen#25 } } ) always clobbers reg byte a +Statement [48] stackpush(char) = 0 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] ( main:3 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { { screen#1 = screen#25 } } ) always clobbers reg byte a Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [62] stackpush(char) = 0 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 ] ( main:5 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 ] { { screen#1 = screen#25 } } ) always clobbers reg byte a +Statement [60] stackpush(char) = 0 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 ] ( main:3 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 ] { { screen#1 = screen#25 } } ) always clobbers reg byte a Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [67] __snprintf_capacity = $ffff [ __snprintf_capacity ] ( main:5::snprintf_init:17 [ printf_buffer __snprintf_capacity ] { } main:5::snprintf_init:25 [ screen#1 printf_buffer __snprintf_capacity ] { } main:5::snprintf_init:39 [ screen#1 printf_buffer __snprintf_capacity ] { } main:5::snprintf_init:55 [ screen#1 printf_buffer __snprintf_capacity ] { } ) always clobbers reg byte a -Statement [68] __snprintf_size = 0 [ __snprintf_capacity __snprintf_size ] ( main:5::snprintf_init:17 [ printf_buffer __snprintf_capacity __snprintf_size ] { } main:5::snprintf_init:25 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size ] { } main:5::snprintf_init:39 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size ] { } main:5::snprintf_init:55 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size ] { } ) always clobbers reg byte a -Statement [69] __snprintf_buffer = BUF [ __snprintf_capacity __snprintf_size __snprintf_buffer ] ( main:5::snprintf_init:17 [ printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snprintf_init:25 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snprintf_init:39 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } main:5::snprintf_init:55 [ screen#1 printf_buffer __snprintf_capacity __snprintf_size __snprintf_buffer ] { } ) always clobbers reg byte a -Statement [73] printf_str::c#1 = *printf_str::s#11 [ printf_str::s#11 printf_str::c#1 printf_buffer ] ( main:5::printf_str:19 [ __snprintf_capacity __snprintf_size __snprintf_buffer printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:27 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:33 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:41 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:45 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:49 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:57 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_str:61 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_string:29::printf_str:89 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:5::printf_sint:43::printf_number_buffer:95::printf_str:173 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#11 printf_str::c#1 printf_buffer ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101::printf_str:173 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#11 printf_str::c#1 printf_buffer ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107::printf_str:173 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#11 printf_str::c#1 printf_buffer ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } ) always clobbers reg byte a reg byte y -Statement [78] callexecute *printf_str::putc#12 [ printf_str::s#0 printf_buffer ] ( main:5::printf_str:19 [ __snprintf_capacity __snprintf_size __snprintf_buffer printf_str::s#0 printf_buffer ] { } main:5::printf_str:27 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_str:33 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_str:41 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_str:45 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_str:49 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_str:57 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_str:61 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_string:29::printf_str:89 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::s#0 printf_buffer ] { } main:5::printf_sint:43::printf_number_buffer:95::printf_str:173 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#0 printf_buffer ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101::printf_str:173 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#0 printf_buffer ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107::printf_str:173 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#0 printf_buffer ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } ) always clobbers reg byte a reg byte x reg byte y +Statement [65] __snprintf_capacity = $ffff [ __snprintf_capacity ] ( main:3::snprintf_init:15 [ printf_buffer __snprintf_capacity ] { } main:3::snprintf_init:23 [ screen#1 printf_buffer __snprintf_capacity ] { } main:3::snprintf_init:37 [ screen#1 printf_buffer __snprintf_capacity ] { } main:3::snprintf_init:53 [ screen#1 printf_buffer __snprintf_capacity ] { } ) always clobbers reg byte a +Statement [66] __snprintf_size = 0 [ __snprintf_size __snprintf_capacity ] ( main:3::snprintf_init:15 [ printf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snprintf_init:23 [ screen#1 printf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snprintf_init:37 [ screen#1 printf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snprintf_init:53 [ screen#1 printf_buffer __snprintf_size __snprintf_capacity ] { } ) always clobbers reg byte a +Statement [67] __snprintf_buffer = BUF [ __snprintf_buffer __snprintf_size __snprintf_capacity ] ( main:3::snprintf_init:15 [ printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snprintf_init:23 [ screen#1 printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snprintf_init:37 [ screen#1 printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } main:3::snprintf_init:53 [ screen#1 printf_buffer __snprintf_buffer __snprintf_size __snprintf_capacity ] { } ) always clobbers reg byte a +Statement [71] printf_str::c#1 = *printf_str::s#11 [ printf_str::s#11 printf_str::c#1 printf_buffer ] ( main:3::printf_str:17 [ __snprintf_buffer __snprintf_size __snprintf_capacity printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:25 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:31 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:39 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:43 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:47 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:55 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_str:59 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_string:27::printf_str:87 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#11 printf_str::c#1 printf_buffer ] { } main:3::printf_sint:41::printf_number_buffer:93::printf_str:171 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#11 printf_str::c#1 printf_buffer ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:99::printf_str:171 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#11 printf_str::c#1 printf_buffer ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:3::printf_slong:57::printf_number_buffer:105::printf_str:171 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#11 printf_str::c#1 printf_buffer ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } ) always clobbers reg byte a reg byte y +Statement [76] callexecute *printf_str::putc#12 [ printf_str::s#0 printf_buffer ] ( main:3::printf_str:17 [ __snprintf_buffer __snprintf_size __snprintf_capacity printf_str::s#0 printf_buffer ] { } main:3::printf_str:25 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_str:31 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_str:39 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_str:43 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_str:47 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_str:55 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_str:59 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_string:27::printf_str:87 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_str::s#0 printf_buffer ] { } main:3::printf_sint:41::printf_number_buffer:93::printf_str:171 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#0 printf_buffer ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:99::printf_str:171 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#0 printf_buffer ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:3::printf_slong:57::printf_number_buffer:105::printf_str:171 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 printf_str::s#0 printf_buffer ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } ) always clobbers reg byte a reg byte x reg byte y Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [82] if(0!=*print::msg#5) goto print::@2 [ screen#1 print::msg#5 ] ( main:5::print:23 [ printf_buffer screen#1 print::msg#5 ] { } main:5::print:37 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:5::print:53 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:5::print:65 [ screen#1 print::msg#5 ] { { screen#1 = screen#25 } } ) always clobbers reg byte a reg byte y -Statement [84] *screen#1 = *print::msg#5 [ screen#1 print::msg#5 ] ( main:5::print:23 [ printf_buffer screen#1 print::msg#5 ] { } main:5::print:37 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:5::print:53 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:5::print:65 [ screen#1 print::msg#5 ] { { screen#1 = screen#25 } } ) always clobbers reg byte a reg byte y -Statement [91] *((char *)&printf_buffer) = 0 [ printf_buffer ] ( main:5::printf_sint:43 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a -Statement [94] printf_number_buffer::buffer_sign#1 = *((char *)&printf_buffer) [ printf_buffer printf_number_buffer::buffer_sign#1 ] ( main:5::printf_sint:43 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::buffer_sign#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [98] *((char *)&printf_buffer) = 0 [ printf_buffer ] ( main:5::printf_uint:47 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a -Statement [100] printf_number_buffer::buffer_sign#2 = *((char *)&printf_buffer) [ printf_buffer printf_number_buffer::buffer_sign#2 ] ( main:5::printf_uint:47 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::buffer_sign#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } ) always clobbers reg byte a -Statement [103] *((char *)&printf_buffer) = 0 [ printf_buffer ] ( main:5::printf_slong:59 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a -Statement [106] printf_number_buffer::buffer_sign#0 = *((char *)&printf_buffer) [ printf_buffer printf_number_buffer::buffer_sign#0 ] ( main:5::printf_slong:59 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::buffer_sign#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [114] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS) = 'e' [ printf_buffer ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a -Statement [115] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1) = 'r' [ printf_buffer ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a -Statement [116] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2) = 'r' [ printf_buffer ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a -Statement [117] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3) = 0 [ printf_buffer ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a -Statement [124] *utoa::buffer#10 = DIGITS[utoa::$11] [ printf_buffer utoa::buffer#10 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::buffer#10 ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::buffer#10 ] { } ) always clobbers reg byte a reg byte y -Statement [125] utoa::buffer#3 = ++ utoa::buffer#10 [ printf_buffer utoa::buffer#3 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::buffer#3 ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::buffer#3 ] { } ) always clobbers reg byte a -Statement [126] *utoa::buffer#3 = 0 [ printf_buffer ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a reg byte y -Statement [127] utoa::$10 = utoa::digit#2 << 1 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { } ) always clobbers reg byte a -Statement [128] utoa::digit_value#0 = utoa::digit_values#8[utoa::$10] [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } ) always clobbers reg byte a reg byte y -Statement [130] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@10 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } ) always clobbers reg byte a -Statement [133] utoa_append::buffer#0 = utoa::buffer#10 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [134] utoa_append::value#0 = utoa::value#3 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [135] utoa_append::sub#0 = utoa::digit_value#0 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [137] utoa_append::return#0 = utoa_append::value#2 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [138] utoa::value#0 = utoa_append::return#0 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] ( main:5::printf_sint:43::utoa:93 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { } main:5::printf_uint:47::utoa:99 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { } ) always clobbers reg byte a -Statement [144] strlen::return#2 = strlen::len#2 [ printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::return#2 = strlen::len#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a -Statement [145] printf_number_buffer::$19 = strlen::return#2 [ printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [147] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 [ printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [150] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#3 - printf_number_buffer::len#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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [151] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [154] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [155] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [156] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [157] printf_padding::putc#0 = printf_number_buffer::putc#10 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [158] printf_padding::length#0 = (char)printf_number_buffer::padding#10 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [160] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [161] stackpush(char) = printf_number_buffer::buffer_sign#10 [ ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [162] callexecute *printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a reg byte x reg byte y +Statement [80] if(0!=*print::msg#5) goto print::@2 [ screen#1 print::msg#5 ] ( main:3::print:21 [ printf_buffer screen#1 print::msg#5 ] { } main:3::print:35 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:3::print:51 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:3::print:63 [ screen#1 print::msg#5 ] { { screen#1 = screen#25 } } ) always clobbers reg byte a reg byte y +Statement [82] *screen#1 = *print::msg#5 [ screen#1 print::msg#5 ] ( main:3::print:21 [ printf_buffer screen#1 print::msg#5 ] { } main:3::print:35 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:3::print:51 [ printf_buffer screen#1 print::msg#5 ] { { screen#1 = screen#25 } } main:3::print:63 [ screen#1 print::msg#5 ] { { screen#1 = screen#25 } } ) always clobbers reg byte a reg byte y +Statement [89] *((char *)&printf_buffer) = 0 [ printf_buffer ] ( main:3::printf_sint:41 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [92] printf_number_buffer::buffer_sign#1 = *((char *)&printf_buffer) [ printf_buffer printf_number_buffer::buffer_sign#1 ] ( main:3::printf_sint:41 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::buffer_sign#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [96] *((char *)&printf_buffer) = 0 [ printf_buffer ] ( main:3::printf_uint:45 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [98] printf_number_buffer::buffer_sign#2 = *((char *)&printf_buffer) [ printf_buffer printf_number_buffer::buffer_sign#2 ] ( main:3::printf_uint:45 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::buffer_sign#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } ) always clobbers reg byte a +Statement [101] *((char *)&printf_buffer) = 0 [ printf_buffer ] ( main:3::printf_slong:57 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [104] printf_number_buffer::buffer_sign#0 = *((char *)&printf_buffer) [ printf_buffer printf_number_buffer::buffer_sign#0 ] ( main:3::printf_slong:57 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::buffer_sign#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [112] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS) = 'e' [ printf_buffer ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [113] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1) = 'r' [ printf_buffer ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [114] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2) = 'r' [ printf_buffer ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [115] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3) = 0 [ printf_buffer ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a +Statement [122] *utoa::buffer#10 = DIGITS[utoa::$11] [ printf_buffer utoa::buffer#10 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::buffer#10 ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::buffer#10 ] { } ) always clobbers reg byte a reg byte y +Statement [123] utoa::buffer#3 = ++ utoa::buffer#10 [ printf_buffer utoa::buffer#3 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::buffer#3 ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::buffer#3 ] { } ) always clobbers reg byte a +Statement [124] *utoa::buffer#3 = 0 [ printf_buffer ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ] { } ) always clobbers reg byte a reg byte y +Statement [125] utoa::$10 = utoa::digit#2 << 1 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { } ) always clobbers reg byte a +Statement [126] utoa::digit_value#0 = utoa::digit_values#8[utoa::$10] [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } ) always clobbers reg byte a reg byte y +Statement [128] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@10 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { } ) always clobbers reg byte a +Statement [131] utoa_append::buffer#0 = utoa::buffer#10 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [132] utoa_append::value#0 = utoa::value#3 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [133] utoa_append::sub#0 = utoa::digit_value#0 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [135] utoa_append::return#0 = utoa_append::value#2 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [136] utoa::value#0 = utoa_append::return#0 [ printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] ( main:3::printf_sint:41::utoa:91 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { } main:3::printf_uint:45::utoa:97 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { } ) always clobbers reg byte a +Statement [142] strlen::return#2 = strlen::len#2 [ printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::return#2 = strlen::len#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 strlen::return#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a +Statement [143] printf_number_buffer::$19 = strlen::return#2 [ printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::$19 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [145] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 [ printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_min_length#3 printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::buffer_sign#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::len#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [148] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#3 - printf_number_buffer::len#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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [149] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [152] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [153] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [154] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [155] printf_padding::putc#0 = printf_number_buffer::putc#10 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a +Statement [156] printf_padding::length#0 = (char)printf_number_buffer::padding#10 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#0 printf_padding::length#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#0 = printf_padding::length#6 } { printf_padding::putc#0 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a +Statement [158] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 [ 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [159] stackpush(char) = printf_number_buffer::buffer_sign#10 [ ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a +Statement [160] callexecute *printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:3::printf_sint:41::printf_number_buffer:93 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a reg byte x reg byte y Statement sideeffect stackpullpadding(1) always clobbers reg byte a -Statement [164] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [165] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [166] printf_padding::putc#1 = printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [167] printf_padding::length#1 = (char)printf_number_buffer::padding#10 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 printf_padding::length#1 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 printf_padding::length#1 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 printf_padding::length#1 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::format_upper_case#10 printf_number_buffer::padding#10 printf_padding::putc#1 printf_padding::length#1 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#1 = printf_padding::length#6 } { printf_padding::putc#1 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [169] if(0==printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 [ printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [172] printf_str::putc#0 = printf_number_buffer::putc#10 [ printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_str::putc#0 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_str::putc#0 = printf_str::putc#12 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [174] if(0==printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return [ printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [175] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return [ printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [176] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 [ printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::putc#10 printf_number_buffer::padding#10 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a -Statement [177] printf_padding::putc#2 = printf_number_buffer::putc#10 [ printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::padding#10 printf_padding::putc#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [178] printf_padding::length#2 = (char)printf_number_buffer::padding#10 [ printf_buffer printf_padding::putc#2 printf_padding::length#2 ] ( main:5::printf_sint:43::printf_number_buffer:95 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_padding::putc#2 printf_padding::length#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_uint:47::printf_number_buffer:101 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_padding::putc#2 printf_padding::length#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } main:5::printf_slong:59::printf_number_buffer:107 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_padding::putc#2 printf_padding::length#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { printf_padding::length#2 = printf_padding::length#6 } { printf_padding::putc#2 = printf_padding::putc#7 printf_number_buffer::putc#10 } } ) always clobbers reg byte a -Statement [184] ultoa::$11 = (char)ultoa::value#2 [ printf_buffer ultoa::buffer#11 ultoa::$11 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::buffer#11 ultoa::$11 ] { } ) always clobbers reg byte a -Statement [185] *ultoa::buffer#11 = DIGITS[ultoa::$11] [ printf_buffer ultoa::buffer#11 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::buffer#11 ] { } ) always clobbers reg byte a reg byte y -Statement [186] ultoa::buffer#3 = ++ ultoa::buffer#11 [ printf_buffer ultoa::buffer#3 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::buffer#3 ] { } ) always clobbers reg byte a -Statement [187] *ultoa::buffer#3 = 0 [ printf_buffer ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ] { } ) always clobbers reg byte a reg byte y -Statement [189] ultoa::$10 = ultoa::digit#2 << 2 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::$10 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::$10 ] { } ) always clobbers reg byte a -Statement [190] ultoa::digit_value#0 = RADIX_DECIMAL_VALUES_LONG[ultoa::$10] [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] { } ) always clobbers reg byte a -Statement [192] if(ultoa::value#2>=ultoa::digit_value#0) goto ultoa::@5 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] { } ) always clobbers reg byte a -Statement [195] ultoa_append::buffer#0 = ultoa::buffer#11 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [196] ultoa_append::value#0 = ultoa::value#2 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ultoa_append::value#0 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ultoa_append::value#0 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [197] ultoa_append::sub#0 = ultoa::digit_value#0 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [199] ultoa_append::return#0 = ultoa_append::value#2 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::return#0 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::return#0 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [200] ultoa::value#0 = ultoa_append::return#0 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::value#0 ] ( main:5::printf_slong:59::ultoa:105 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::value#0 ] { } ) always clobbers reg byte a -Statement [204] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:5::printf_sint:43::utoa:93::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [205] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] [ utoa_append::value#2 ] ( main:5::printf_sint:43::utoa:93::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a reg byte y -Statement [208] 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:5::printf_sint:43::utoa:93::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:5::printf_uint:47::utoa:99::utoa_append:136 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a -Statement [211] if(0!=*strlen::str#3) goto strlen::@2 [ printf_buffer strlen::len#2 strlen::str#3 ] ( main:5::printf_sint:43::printf_number_buffer:95::strlen:143 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:5::printf_uint:47::printf_number_buffer:101::strlen:143 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::return#2 = strlen::len#2 } } main:5::printf_slong:59::printf_number_buffer:107::strlen:143 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a reg byte y -Statement [217] if(printf_padding::i#2=ultoa::digit_value#0) goto ultoa::@5 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] ( main:3::printf_slong:57::ultoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::started#2 ultoa::buffer#11 ultoa::digit_value#0 ] { } ) always clobbers reg byte a +Statement [193] ultoa_append::buffer#0 = ultoa::buffer#11 [ printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ] ( main:3::printf_slong:57::ultoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::value#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [194] ultoa_append::value#0 = ultoa::value#2 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ultoa_append::value#0 ] ( main:3::printf_slong:57::ultoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::digit_value#0 ultoa_append::buffer#0 ultoa_append::value#0 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [195] ultoa_append::sub#0 = ultoa::digit_value#0 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] ( main:3::printf_slong:57::ultoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::value#0 ultoa_append::sub#0 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [197] ultoa_append::return#0 = ultoa_append::value#2 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::return#0 ] ( main:3::printf_slong:57::ultoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::return#0 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [198] ultoa::value#0 = ultoa_append::return#0 [ printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::value#0 ] ( main:3::printf_slong:57::ultoa:103 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa::value#0 ] { } ) always clobbers reg byte a +Statement [202] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:3::printf_sint:41::utoa:91::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [203] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] [ utoa_append::value#2 ] ( main:3::printf_sint:41::utoa:91::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a reg byte y +Statement [206] 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:3::printf_sint:41::utoa:91::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:3::printf_uint:45::utoa:97::utoa_append:134 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer utoa::max_digits#7 utoa::digit_values#8 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [209] if(0!=*strlen::str#3) goto strlen::@2 [ printf_buffer strlen::len#2 strlen::str#3 ] ( main:3::printf_sint:41::printf_number_buffer:93::strlen:141 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } main:3::printf_uint:45::printf_number_buffer:99::strlen:141 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { strlen::return#2 = strlen::len#2 } } main:3::printf_slong:57::printf_number_buffer:105::strlen:141 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 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::putc#10 printf_number_buffer::format_upper_case#10 printf_buffer strlen::len#2 strlen::str#3 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { strlen::return#2 = strlen::len#2 } } ) always clobbers reg byte a reg byte y +Statement [215] if(printf_padding::i#2=ultoa_append::sub#0) goto ultoa_append::@2 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] ( main:5::printf_slong:59::ultoa:105::ultoa_append:198 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [236] *ultoa_append::buffer#0 = DIGITS[ultoa_append::digit#2] [ ultoa_append::value#2 ] ( main:5::printf_slong:59::ultoa:105::ultoa_append:198 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::value#2 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a reg byte y -Statement [239] ultoa_append::value#1 = ultoa_append::value#2 - ultoa_append::sub#0 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] ( main:5::printf_slong:59::ultoa:105::ultoa_append:198 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a -Statement [242] toupper::return#0 = toupper::ch#0 + 'A'-'a' [ toupper::return#0 ] ( main:5::printf_sint:43::printf_number_buffer:95::strupr:171::toupper:228 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } main:5::printf_uint:47::printf_number_buffer:101::strupr:171::toupper:228 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { toupper::return#2 = toupper::return#3 } } main:5::printf_slong:59::printf_number_buffer:107::strupr:171::toupper:228 [ __snprintf_capacity __snprintf_size __snprintf_buffer screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } ) always clobbers reg byte a +Statement [223] if(0!=*strupr::src#2) goto strupr::@2 [ strupr::src#2 ] ( main:3::printf_sint:41::printf_number_buffer:93::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte a reg byte y +Statement [225] toupper::ch#0 = *strupr::src#2 [ strupr::src#2 toupper::ch#0 ] ( main:3::printf_sint:41::printf_number_buffer:93::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#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:3::printf_uint:45::printf_number_buffer:99::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { toupper::return#2 = toupper::return#3 } } main:3::printf_slong:57::printf_number_buffer:105::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::ch#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } ) always clobbers reg byte a reg byte y +Statement [229] *strupr::src#2 = strupr::$0 [ strupr::src#2 ] ( main:3::printf_sint:41::printf_number_buffer:93::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } } main:3::printf_uint:45::printf_number_buffer:99::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } } main:3::printf_slong:57::printf_number_buffer:105::strupr:169 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } } ) always clobbers reg byte y +Statement [233] if(ultoa_append::value#2>=ultoa_append::sub#0) goto ultoa_append::@2 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] ( main:3::printf_slong:57::ultoa:103::ultoa_append:196 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#2 ultoa_append::digit#2 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [234] *ultoa_append::buffer#0 = DIGITS[ultoa_append::digit#2] [ ultoa_append::value#2 ] ( main:3::printf_slong:57::ultoa:103::ultoa_append:196 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::value#2 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a reg byte y +Statement [237] ultoa_append::value#1 = ultoa_append::value#2 - ultoa_append::sub#0 [ ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] ( main:3::printf_slong:57::ultoa:103::ultoa_append:196 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer ultoa::digit#2 ultoa::buffer#11 ultoa_append::buffer#0 ultoa_append::sub#0 ultoa_append::value#1 ultoa_append::digit#1 ] { { ultoa_append::buffer#0 = ultoa::buffer#11 } { ultoa_append::value#0 = ultoa::value#2 } { ultoa_append::sub#0 = ultoa::digit_value#0 } { ultoa_append::return#0 = ultoa_append::value#2 } } ) always clobbers reg byte a +Statement [240] toupper::return#0 = toupper::ch#0 + 'A'-'a' [ toupper::return#0 ] ( main:3::printf_sint:41::printf_number_buffer:93::strupr:169::toupper:226 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#1 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } main:3::printf_uint:45::printf_number_buffer:99::strupr:169::toupper:226 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 } { toupper::return#2 = toupper::return#3 } } main:3::printf_slong:57::printf_number_buffer:105::strupr:169::toupper:226 [ __snprintf_buffer __snprintf_size __snprintf_capacity screen#1 printf_buffer printf_number_buffer::format_justify_left#10 printf_number_buffer::format_zero_padding#10 printf_number_buffer::putc#10 printf_number_buffer::padding#10 strupr::src#2 toupper::return#0 ] { { printf_number_buffer::buffer_sign#0 = printf_number_buffer::buffer_sign#10 } { toupper::return#2 = toupper::return#3 } } ) always clobbers reg byte a Potential registers zp[1]:89 [ snputc::c#2 snputc::c#0 ] : zp[1]:89 , reg byte x , reg byte y , Potential registers zp[2]:60 [ printf_str::putc#12 printf_str::putc#0 ] : zp[2]:60 , Potential registers zp[2]:22 [ printf_str::s#11 printf_str::s#12 printf_str::s#0 ] : zp[2]:22 , @@ -5219,9 +5209,9 @@ Potential registers zp[2]:20 [ strupr::src#2 strupr::src#1 ] : zp[2]:20 , Potential registers zp[4]:4 [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] : zp[4]:4 , Potential registers zp[1]:9 [ ultoa_append::digit#2 ultoa_append::digit#1 ] : zp[1]:9 , reg byte x , reg byte y , Potential registers zp[1]:10 [ toupper::return#2 toupper::return#0 toupper::ch#0 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:100 [ __snprintf_capacity ] : zp[2]:100 , -Potential registers zp[2]:96 [ __snprintf_size ] : zp[2]:96 , -Potential registers zp[2]:98 [ __snprintf_buffer ] : zp[2]:98 , +Potential registers zp[2]:96 [ __snprintf_buffer ] : zp[2]:96 , +Potential registers mem[2] [ __snprintf_size ] : mem[2] , +Potential registers mem[2] [ __snprintf_capacity ] : mem[2] , Potential registers zp[1]:28 [ printf_str::c#1 ] : zp[1]:28 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:44 [ utoa::$4 ] : zp[1]:44 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:71 [ utoa::$11 ] : zp[1]:71 , reg byte a , reg byte x , reg byte y , @@ -5256,7 +5246,7 @@ Uplift Scope [utoa] 37,803.9: zp[2]:31 [ utoa::buffer#10 utoa::buffer#15 utoa::b Uplift Scope [ultoa] 38,003.93: zp[2]:29 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ] 30,717.36: zp[4]:35 [ ultoa::value#2 ultoa::value#6 ultoa::value#0 ] 22,859.43: zp[1]:42 [ ultoa::digit#2 ultoa::digit#1 ] 20,002: zp[1]:48 [ ultoa::$10 ] 15,001.5: zp[1]:54 [ ultoa::started#2 ultoa::started#4 ] 6,000.6: zp[4]:65 [ ultoa::digit_value#0 ] 2,002: zp[1]:76 [ ultoa::$11 ] 2,002: zp[2]:77 [ ultoa::buffer#3 ] Uplift Scope [printf_number_buffer] 6,506.5: zp[1]:62 [ printf_number_buffer::len#2 printf_number_buffer::len#0 printf_number_buffer::len#1 ] 1,167.83: zp[1]:81 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] 1,001: zp[2]:83 [ printf_number_buffer::$19 ] 763.43: zp[1]:85 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 printf_number_buffer::buffer_sign#2 ] 111.22: zp[2]:90 [ printf_number_buffer::putc#10 ] 100.1: zp[1]:92 [ printf_number_buffer::format_min_length#3 ] 88.32: zp[1]:93 [ printf_number_buffer::format_zero_padding#10 ] 60.67: zp[1]:94 [ printf_number_buffer::format_justify_left#10 ] 35.75: zp[1]:95 [ printf_number_buffer::format_upper_case#10 ] Uplift Scope [print] 3,003: zp[2]:69 [ print::msg#5 print::msg#0 ] -Uplift Scope [] 1,203.2: zp[2]:79 [ screen#25 screen#1 screen#0 ] 11.02: zp[2]:96 [ __snprintf_size ] 9.02: zp[2]:98 [ __snprintf_buffer ] 6.49: zp[2]:100 [ __snprintf_capacity ] 0: mem[12] [ printf_buffer ] +Uplift Scope [] 1,203.2: zp[2]:79 [ screen#25 screen#1 screen#0 ] 10.98: mem[2] [ __snprintf_size ] 9.02: zp[2]:96 [ __snprintf_buffer ] 6.45: mem[2] [ __snprintf_capacity ] 0: mem[12] [ printf_buffer ] Uplift Scope [snputc] 242.4: zp[1]:89 [ snputc::c#2 snputc::c#0 ] Uplift Scope [RADIX] Uplift Scope [MOS6526_CIA] @@ -5273,60 +5263,60 @@ Uplift Scope [snprintf_init] Uplift Scope [main] Uplift Scope [__start] -Uplifting [utoa_append] best 25005 combination zp[2]:2 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] reg byte x [ utoa_append::digit#2 utoa_append::digit#1 ] zp[2]:11 [ utoa_append::sub#0 ] zp[2]:46 [ utoa_append::return#0 ] zp[2]:56 [ utoa_append::buffer#0 ] -Uplifting [ultoa_append] best 24402 combination zp[4]:4 [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] reg byte x [ ultoa_append::digit#2 ultoa_append::digit#1 ] zp[4]:13 [ ultoa_append::sub#0 ] zp[4]:49 [ ultoa_append::return#0 ] zp[2]:58 [ ultoa_append::buffer#0 ] -Uplifting [toupper] best 24275 combination reg byte a [ toupper::return#2 toupper::return#0 toupper::ch#0 ] reg byte a [ toupper::return#3 ] -Uplifting [strupr] best 24215 combination zp[2]:20 [ strupr::src#2 strupr::src#1 ] reg byte a [ strupr::$0 ] -Uplifting [strlen] best 24215 combination zp[2]:17 [ strlen::str#3 strlen::str#0 ] zp[2]:26 [ strlen::len#2 strlen::len#1 ] zp[2]:74 [ strlen::return#2 ] -Uplifting [printf_str] best 24145 combination zp[2]:22 [ printf_str::s#11 printf_str::s#12 printf_str::s#0 ] reg byte a [ printf_str::c#1 ] zp[2]:60 [ printf_str::putc#12 printf_str::putc#0 ] -Uplifting [printf_padding] best 24145 combination zp[1]:19 [ printf_padding::i#2 printf_padding::i#1 ] zp[2]:33 [ printf_padding::putc#7 printf_padding::putc#1 printf_padding::putc#2 printf_padding::putc#0 ] zp[1]:41 [ printf_padding::length#6 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] zp[1]:53 [ printf_padding::pad#7 ] -Uplifting [utoa] best 24020 combination zp[2]:31 [ utoa::buffer#10 utoa::buffer#15 utoa::buffer#4 ] zp[2]:39 [ utoa::value#3 utoa::value#7 utoa::value#10 utoa::value#0 ] zp[1]:43 [ utoa::digit#2 utoa::digit#1 ] reg byte a [ utoa::$4 ] reg byte a [ utoa::$10 ] reg byte x [ utoa::started#2 utoa::started#4 ] zp[2]:63 [ utoa::digit_value#0 ] zp[1]:71 [ utoa::$11 ] zp[2]:72 [ utoa::buffer#3 ] zp[1]:82 [ utoa::radix#2 ] zp[1]:86 [ utoa::max_digits#7 ] zp[2]:87 [ utoa::digit_values#8 ] +Uplifting [utoa_append] best 24999 combination zp[2]:2 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] reg byte x [ utoa_append::digit#2 utoa_append::digit#1 ] zp[2]:11 [ utoa_append::sub#0 ] zp[2]:46 [ utoa_append::return#0 ] zp[2]:56 [ utoa_append::buffer#0 ] +Uplifting [ultoa_append] best 24396 combination zp[4]:4 [ ultoa_append::value#2 ultoa_append::value#0 ultoa_append::value#1 ] reg byte x [ ultoa_append::digit#2 ultoa_append::digit#1 ] zp[4]:13 [ ultoa_append::sub#0 ] zp[4]:49 [ ultoa_append::return#0 ] zp[2]:58 [ ultoa_append::buffer#0 ] +Uplifting [toupper] best 24269 combination reg byte a [ toupper::return#2 toupper::return#0 toupper::ch#0 ] reg byte a [ toupper::return#3 ] +Uplifting [strupr] best 24209 combination zp[2]:20 [ strupr::src#2 strupr::src#1 ] reg byte a [ strupr::$0 ] +Uplifting [strlen] best 24209 combination zp[2]:17 [ strlen::str#3 strlen::str#0 ] zp[2]:26 [ strlen::len#2 strlen::len#1 ] zp[2]:74 [ strlen::return#2 ] +Uplifting [printf_str] best 24139 combination zp[2]:22 [ printf_str::s#11 printf_str::s#12 printf_str::s#0 ] reg byte a [ printf_str::c#1 ] zp[2]:60 [ printf_str::putc#12 printf_str::putc#0 ] +Uplifting [printf_padding] best 24139 combination zp[1]:19 [ printf_padding::i#2 printf_padding::i#1 ] zp[2]:33 [ printf_padding::putc#7 printf_padding::putc#1 printf_padding::putc#2 printf_padding::putc#0 ] zp[1]:41 [ printf_padding::length#6 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] zp[1]:53 [ printf_padding::pad#7 ] +Uplifting [utoa] best 24014 combination zp[2]:31 [ utoa::buffer#10 utoa::buffer#15 utoa::buffer#4 ] zp[2]:39 [ utoa::value#3 utoa::value#7 utoa::value#10 utoa::value#0 ] zp[1]:43 [ utoa::digit#2 utoa::digit#1 ] reg byte a [ utoa::$4 ] reg byte a [ utoa::$10 ] reg byte x [ utoa::started#2 utoa::started#4 ] zp[2]:63 [ utoa::digit_value#0 ] zp[1]:71 [ utoa::$11 ] zp[2]:72 [ utoa::buffer#3 ] zp[1]:82 [ utoa::radix#2 ] zp[1]:86 [ utoa::max_digits#7 ] zp[2]:87 [ utoa::digit_values#8 ] Limited combination testing to 100 combinations of 2048 possible. -Uplifting [ultoa] best 23906 combination zp[2]:29 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ] zp[4]:35 [ ultoa::value#2 ultoa::value#6 ultoa::value#0 ] zp[1]:42 [ ultoa::digit#2 ultoa::digit#1 ] reg byte a [ ultoa::$10 ] reg byte x [ ultoa::started#2 ultoa::started#4 ] zp[4]:65 [ ultoa::digit_value#0 ] reg byte a [ ultoa::$11 ] zp[2]:77 [ ultoa::buffer#3 ] -Uplifting [printf_number_buffer] best 23892 combination reg byte y [ printf_number_buffer::len#2 printf_number_buffer::len#0 printf_number_buffer::len#1 ] zp[1]:81 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] zp[2]:83 [ printf_number_buffer::$19 ] zp[1]:85 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 printf_number_buffer::buffer_sign#2 ] zp[2]:90 [ printf_number_buffer::putc#10 ] reg byte x [ printf_number_buffer::format_min_length#3 ] zp[1]:93 [ printf_number_buffer::format_zero_padding#10 ] zp[1]:94 [ printf_number_buffer::format_justify_left#10 ] zp[1]:95 [ printf_number_buffer::format_upper_case#10 ] -Uplifting [print] best 23892 combination zp[2]:69 [ print::msg#5 print::msg#0 ] -Uplifting [] best 23892 combination zp[2]:79 [ screen#25 screen#1 screen#0 ] zp[2]:96 [ __snprintf_size ] zp[2]:98 [ __snprintf_buffer ] zp[2]:100 [ __snprintf_capacity ] mem[12] [ printf_buffer ] -Uplifting [snputc] best 23887 combination reg byte x [ snputc::c#2 snputc::c#0 ] -Uplifting [RADIX] best 23887 combination -Uplifting [MOS6526_CIA] best 23887 combination -Uplifting [MOS6569_VICII] best 23887 combination -Uplifting [MOS6581_SID] best 23887 combination -Uplifting [printf_format_number] best 23887 combination -Uplifting [printf_buffer_number] best 23887 combination -Uplifting [printf_slong] best 23887 combination -Uplifting [printf_sint] best 23887 combination -Uplifting [printf_uint] best 23887 combination -Uplifting [printf_format_string] best 23887 combination -Uplifting [printf_string] best 23887 combination -Uplifting [snprintf_init] best 23887 combination -Uplifting [main] best 23887 combination -Uplifting [__start] best 23887 combination +Uplifting [ultoa] best 23900 combination zp[2]:29 [ ultoa::buffer#11 ultoa::buffer#14 ultoa::buffer#4 ] zp[4]:35 [ ultoa::value#2 ultoa::value#6 ultoa::value#0 ] zp[1]:42 [ ultoa::digit#2 ultoa::digit#1 ] reg byte a [ ultoa::$10 ] reg byte x [ ultoa::started#2 ultoa::started#4 ] zp[4]:65 [ ultoa::digit_value#0 ] reg byte a [ ultoa::$11 ] zp[2]:77 [ ultoa::buffer#3 ] +Uplifting [printf_number_buffer] best 23886 combination reg byte y [ printf_number_buffer::len#2 printf_number_buffer::len#0 printf_number_buffer::len#1 ] zp[1]:81 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] zp[2]:83 [ printf_number_buffer::$19 ] zp[1]:85 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 printf_number_buffer::buffer_sign#2 ] zp[2]:90 [ printf_number_buffer::putc#10 ] reg byte x [ printf_number_buffer::format_min_length#3 ] zp[1]:93 [ printf_number_buffer::format_zero_padding#10 ] zp[1]:94 [ printf_number_buffer::format_justify_left#10 ] zp[1]:95 [ printf_number_buffer::format_upper_case#10 ] +Uplifting [print] best 23886 combination zp[2]:69 [ print::msg#5 print::msg#0 ] +Uplifting [] best 23886 combination zp[2]:79 [ screen#25 screen#1 screen#0 ] mem[2] [ __snprintf_size ] zp[2]:96 [ __snprintf_buffer ] mem[2] [ __snprintf_capacity ] mem[12] [ printf_buffer ] +Uplifting [snputc] best 23881 combination reg byte x [ snputc::c#2 snputc::c#0 ] +Uplifting [RADIX] best 23881 combination +Uplifting [MOS6526_CIA] best 23881 combination +Uplifting [MOS6569_VICII] best 23881 combination +Uplifting [MOS6581_SID] best 23881 combination +Uplifting [printf_format_number] best 23881 combination +Uplifting [printf_buffer_number] best 23881 combination +Uplifting [printf_slong] best 23881 combination +Uplifting [printf_sint] best 23881 combination +Uplifting [printf_uint] best 23881 combination +Uplifting [printf_format_string] best 23881 combination +Uplifting [printf_string] best 23881 combination +Uplifting [snprintf_init] best 23881 combination +Uplifting [main] best 23881 combination +Uplifting [__start] best 23881 combination Attempting to uplift remaining variables inzp[1]:19 [ printf_padding::i#2 printf_padding::i#1 ] -Uplifting [printf_padding] best 23887 combination zp[1]:19 [ printf_padding::i#2 printf_padding::i#1 ] +Uplifting [printf_padding] best 23881 combination zp[1]:19 [ printf_padding::i#2 printf_padding::i#1 ] Attempting to uplift remaining variables inzp[1]:41 [ printf_padding::length#6 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] -Uplifting [printf_padding] best 23887 combination zp[1]:41 [ printf_padding::length#6 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] +Uplifting [printf_padding] best 23881 combination zp[1]:41 [ printf_padding::length#6 printf_padding::length#1 printf_padding::length#2 printf_padding::length#0 ] Attempting to uplift remaining variables inzp[1]:42 [ ultoa::digit#2 ultoa::digit#1 ] -Uplifting [ultoa] best 23887 combination zp[1]:42 [ ultoa::digit#2 ultoa::digit#1 ] +Uplifting [ultoa] best 23881 combination zp[1]:42 [ ultoa::digit#2 ultoa::digit#1 ] Attempting to uplift remaining variables inzp[1]:43 [ utoa::digit#2 utoa::digit#1 ] -Uplifting [utoa] best 23887 combination zp[1]:43 [ utoa::digit#2 utoa::digit#1 ] +Uplifting [utoa] best 23881 combination zp[1]:43 [ utoa::digit#2 utoa::digit#1 ] Attempting to uplift remaining variables inzp[1]:53 [ printf_padding::pad#7 ] -Uplifting [printf_padding] best 23887 combination zp[1]:53 [ printf_padding::pad#7 ] +Uplifting [printf_padding] best 23881 combination zp[1]:53 [ printf_padding::pad#7 ] Attempting to uplift remaining variables inzp[1]:71 [ utoa::$11 ] -Uplifting [utoa] best 23881 combination reg byte x [ utoa::$11 ] +Uplifting [utoa] best 23875 combination reg byte x [ utoa::$11 ] Attempting to uplift remaining variables inzp[1]:81 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] -Uplifting [printf_number_buffer] best 23881 combination zp[1]:81 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] +Uplifting [printf_number_buffer] best 23875 combination zp[1]:81 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] Attempting to uplift remaining variables inzp[1]:82 [ utoa::radix#2 ] -Uplifting [utoa] best 23863 combination reg byte x [ utoa::radix#2 ] +Uplifting [utoa] best 23857 combination reg byte x [ utoa::radix#2 ] Attempting to uplift remaining variables inzp[1]:85 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 printf_number_buffer::buffer_sign#2 ] -Uplifting [printf_number_buffer] best 23863 combination zp[1]:85 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 printf_number_buffer::buffer_sign#2 ] +Uplifting [printf_number_buffer] best 23857 combination zp[1]:85 [ printf_number_buffer::buffer_sign#10 printf_number_buffer::buffer_sign#1 printf_number_buffer::buffer_sign#0 printf_number_buffer::buffer_sign#2 ] Attempting to uplift remaining variables inzp[1]:86 [ utoa::max_digits#7 ] -Uplifting [utoa] best 23863 combination zp[1]:86 [ utoa::max_digits#7 ] +Uplifting [utoa] best 23857 combination zp[1]:86 [ utoa::max_digits#7 ] Attempting to uplift remaining variables inzp[1]:93 [ printf_number_buffer::format_zero_padding#10 ] -Uplifting [printf_number_buffer] best 23863 combination zp[1]:93 [ printf_number_buffer::format_zero_padding#10 ] +Uplifting [printf_number_buffer] best 23857 combination zp[1]:93 [ printf_number_buffer::format_zero_padding#10 ] Attempting to uplift remaining variables inzp[1]:94 [ printf_number_buffer::format_justify_left#10 ] -Uplifting [printf_number_buffer] best 23863 combination zp[1]:94 [ printf_number_buffer::format_justify_left#10 ] +Uplifting [printf_number_buffer] best 23857 combination zp[1]:94 [ printf_number_buffer::format_justify_left#10 ] Attempting to uplift remaining variables inzp[1]:95 [ printf_number_buffer::format_upper_case#10 ] -Uplifting [printf_number_buffer] best 23863 combination zp[1]:95 [ printf_number_buffer::format_upper_case#10 ] +Uplifting [printf_number_buffer] best 23857 combination zp[1]:95 [ printf_number_buffer::format_upper_case#10 ] Coalescing zero page register [ zp[2]:90 [ printf_number_buffer::putc#10 ] ] with [ zp[2]:33 [ printf_padding::putc#7 printf_padding::putc#1 printf_padding::putc#2 printf_padding::putc#0 ] ] - score: 3 Coalescing zero page register [ zp[2]:60 [ printf_str::putc#12 printf_str::putc#0 ] ] with [ zp[2]:90 [ printf_number_buffer::putc#10 printf_padding::putc#7 printf_padding::putc#1 printf_padding::putc#2 printf_padding::putc#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:39 [ utoa::value#3 utoa::value#7 utoa::value#10 utoa::value#0 ] ] with [ zp[2]:2 [ utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 ] ] - score: 1 @@ -5366,9 +5356,7 @@ Allocated (was zp[2]:79) zp[2]:23 [ screen#25 screen#1 screen#0 ] Allocated (was zp[1]:81) zp[1]:25 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 ] Allocated (was zp[1]:94) zp[1]:26 [ printf_number_buffer::format_justify_left#10 utoa::max_digits#7 ] Allocated (was zp[1]:95) zp[1]:27 [ printf_number_buffer::format_upper_case#10 ] -Allocated (was zp[2]:96) zp[2]:28 [ __snprintf_size ] -Allocated (was zp[2]:98) zp[2]:30 [ __snprintf_buffer ] -Allocated (was zp[2]:100) zp[2]:32 [ __snprintf_capacity ] +Allocated (was zp[2]:96) zp[2]:28 [ __snprintf_buffer ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -5391,15 +5379,9 @@ ASSEMBLER BEFORE OPTIMIZATION .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 .const STACK_BASE = $103 .const SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c - /// The capacity of the buffer (n passed to snprintf()) - /// Used to hold state while printing - .label __snprintf_capacity = $20 - // The number of chars that would have been filled when printing without capacity. Grows even after size>capacity. - /// Used to hold state while printing - .label __snprintf_size = $1c /// Current position in the buffer being filled ( initially *s passed to snprintf() /// Used to hold state while printing - .label __snprintf_buffer = $1e + .label __snprintf_buffer = $1c .label screen = $17 .segment Code // __start @@ -5407,34 +5389,24 @@ __start: { jmp __init1 // __start::__init1 __init1: - // [1] __snprintf_capacity = 0 -- vwuz1=vwuc1 - lda #<0 - sta.z __snprintf_capacity - lda #>0 - sta.z __snprintf_capacity+1 - // [2] __snprintf_size = 0 -- vwuz1=vwuc1 - lda #<0 - sta.z __snprintf_size - lda #>0 - sta.z __snprintf_size+1 - // [3] __snprintf_buffer = (char *) 0 -- pbuz1=pbuc1 + // [1] __snprintf_buffer = (char *) 0 -- pbuz1=pbuc1 lda #<0 sta.z __snprintf_buffer lda #>0 sta.z __snprintf_buffer+1 - // [4] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] __b1_from___init1: jmp __b1 // __start::@1 __b1: - // [5] call main - // [16] phi from __start::@1 to main [phi:__start::@1->main] + // [3] call main + // [14] phi from __start::@1 to main [phi:__start::@1->main] main_from___b1: jsr main jmp __breturn // __start::@return __breturn: - // [6] return + // [4] return rts } // snputc @@ -5444,60 +5416,60 @@ __start: { // void snputc(__register(X) char c) snputc: { .const OFFSET_STACK_C = 0 - // [7] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) -- vbuxx=_stackidxbyte_vbuc1 + // [5] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) -- vbuxx=_stackidxbyte_vbuc1 tsx lda STACK_BASE+OFFSET_STACK_C,x tax - // [8] __snprintf_size = ++ __snprintf_size -- vwuz1=_inc_vwuz1 - inc.z __snprintf_size + // [6] __snprintf_size = ++ __snprintf_size -- vwum1=_inc_vwum1 + inc __snprintf_size bne !+ - inc.z __snprintf_size+1 + inc __snprintf_size+1 !: - // [9] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 -- vwuz1_le_vwuz2_then_la1 - lda.z __snprintf_size+1 - cmp.z __snprintf_capacity+1 + // [7] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 -- vwum1_le_vwum2_then_la1 + lda __snprintf_size+1 + cmp __snprintf_capacity+1 bne !+ - lda.z __snprintf_size - cmp.z __snprintf_capacity + lda __snprintf_size + cmp __snprintf_capacity beq __b1 !: bcc __b1 jmp __breturn // snputc::@return __breturn: - // [10] return + // [8] return rts // snputc::@1 __b1: - // [11] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 -- vwuz1_neq_vwuz2_then_la1 - lda.z __snprintf_size+1 - cmp.z __snprintf_capacity+1 + // [9] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 -- vwum1_neq_vwum2_then_la1 + lda __snprintf_size+1 + cmp __snprintf_capacity+1 bne __b3_from___b1 - lda.z __snprintf_size - cmp.z __snprintf_capacity + lda __snprintf_size + cmp __snprintf_capacity bne __b3_from___b1 - // [13] phi from snputc::@1 to snputc::@2 [phi:snputc::@1->snputc::@2] + // [11] phi from snputc::@1 to snputc::@2 [phi:snputc::@1->snputc::@2] __b2_from___b1: - // [13] phi snputc::c#2 = 0 [phi:snputc::@1->snputc::@2#0] -- vbuxx=vbuc1 + // [11] phi snputc::c#2 = 0 [phi:snputc::@1->snputc::@2#0] -- vbuxx=vbuc1 ldx #0 jmp __b2 - // [12] phi from snputc::@1 to snputc::@3 [phi:snputc::@1->snputc::@3] + // [10] phi from snputc::@1 to snputc::@3 [phi:snputc::@1->snputc::@3] __b3_from___b1: jmp __b3 // snputc::@3 __b3: - // [13] phi from snputc::@3 to snputc::@2 [phi:snputc::@3->snputc::@2] + // [11] phi from snputc::@3 to snputc::@2 [phi:snputc::@3->snputc::@2] __b2_from___b3: - // [13] phi snputc::c#2 = snputc::c#0 [phi:snputc::@3->snputc::@2#0] -- register_copy + // [11] phi snputc::c#2 = snputc::c#0 [phi:snputc::@3->snputc::@2#0] -- register_copy jmp __b2 // snputc::@2 __b2: - // [14] *__snprintf_buffer = snputc::c#2 -- _deref_pbuz1=vbuxx + // [12] *__snprintf_buffer = snputc::c#2 -- _deref_pbuz1=vbuxx // Append char txa ldy #0 sta (__snprintf_buffer),y - // [15] __snprintf_buffer = ++ __snprintf_buffer -- pbuz1=_inc_pbuz1 + // [13] __snprintf_buffer = ++ __snprintf_buffer -- pbuz1=_inc_pbuz1 inc.z __snprintf_buffer bne !+ inc.z __snprintf_buffer+1 @@ -5506,22 +5478,22 @@ snputc: { } // main main: { - // [17] call snprintf_init + // [15] call snprintf_init jsr snprintf_init - // [18] phi from main to main::@1 [phi:main->main::@1] + // [16] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: jmp __b1 // main::@1 __b1: - // [19] call printf_str - // [71] phi from main::@1 to printf_str [phi:main::@1->printf_str] + // [17] call printf_str + // [69] phi from main::@1 to printf_str [phi:main::@1->printf_str] printf_str_from___b1: - // [71] phi printf_str::putc#12 = &snputc [phi:main::@1->printf_str#0] -- pprz1=pprc1 + // [69] phi printf_str::putc#12 = &snputc [phi:main::@1->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 + // [69] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -5530,76 +5502,76 @@ main: { jmp __b2 // main::@2 __b2: - // [20] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 + // [18] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 lda #0 pha - // [21] callexecute snputc -- call_vprc1 + // [19] callexecute snputc -- call_vprc1 jsr snputc // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla - // [23] call print - // [80] phi from main::@2 to print [phi:main::@2->print] + // [21] call print + // [78] phi from main::@2 to print [phi:main::@2->print] print_from___b2: - // [80] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- pbuz1=pbuc1 + // [78] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- pbuz1=pbuc1 lda #<$400 sta.z screen lda #>$400 sta.z screen+1 jsr print - // [24] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + // [22] phi from main::@2 to main::@3 [phi:main::@2->main::@3] __b3_from___b2: jmp __b3 // main::@3 __b3: - // [25] call snprintf_init + // [23] call snprintf_init jsr snprintf_init - // [26] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // [24] phi from main::@3 to main::@4 [phi:main::@3->main::@4] __b4_from___b3: jmp __b4 // main::@4 __b4: - // [27] call printf_str - // [71] phi from main::@4 to printf_str [phi:main::@4->printf_str] + // [25] call printf_str + // [69] phi from main::@4 to printf_str [phi:main::@4->printf_str] printf_str_from___b4: - // [71] phi printf_str::putc#12 = &snputc [phi:main::@4->printf_str#0] -- pprz1=pprc1 + // [69] phi printf_str::putc#12 = &snputc [phi:main::@4->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- pbuz1=pbuc1 + // [69] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- pbuz1=pbuc1 lda #s1 sta.z printf_str.s+1 jsr printf_str - // [28] phi from main::@4 to main::@5 [phi:main::@4->main::@5] + // [26] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: jmp __b5 // main::@5 __b5: - // [29] call printf_string - // [87] phi from main::@5 to printf_string [phi:main::@5->printf_string] + // [27] call printf_string + // [85] phi from main::@5 to printf_string [phi:main::@5->printf_string] printf_string_from___b5: jsr printf_string jmp __b6 // main::@6 __b6: - // [30] stackpush(char) = '!' -- _stackpushbyte_=vbuc1 + // [28] stackpush(char) = '!' -- _stackpushbyte_=vbuc1 lda #'!' pha - // [31] callexecute snputc -- call_vprc1 + // [29] callexecute snputc -- call_vprc1 jsr snputc // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla - // [33] call printf_str - // [71] phi from main::@6 to printf_str [phi:main::@6->printf_str] + // [31] call printf_str + // [69] phi from main::@6 to printf_str [phi:main::@6->printf_str] printf_str_from___b6: - // [71] phi printf_str::putc#12 = &snputc [phi:main::@6->printf_str#0] -- pprz1=pprc1 + // [69] phi printf_str::putc#12 = &snputc [phi:main::@6->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 + // [69] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -5608,93 +5580,93 @@ main: { jmp __b7 // main::@7 __b7: - // [34] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 + // [32] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 lda #0 pha - // [35] callexecute snputc -- call_vprc1 + // [33] callexecute snputc -- call_vprc1 jsr snputc // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla - // [37] call print - // [80] phi from main::@7 to print [phi:main::@7->print] + // [35] call print + // [78] phi from main::@7 to print [phi:main::@7->print] print_from___b7: - // [80] phi screen#25 = screen#1 [phi:main::@7->print#0] -- register_copy + // [78] phi screen#25 = screen#1 [phi:main::@7->print#0] -- register_copy jsr print - // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] + // [36] phi from main::@7 to main::@8 [phi:main::@7->main::@8] __b8_from___b7: jmp __b8 // main::@8 __b8: - // [39] call snprintf_init + // [37] call snprintf_init jsr snprintf_init - // [40] phi from main::@8 to main::@9 [phi:main::@8->main::@9] + // [38] phi from main::@8 to main::@9 [phi:main::@8->main::@9] __b9_from___b8: jmp __b9 // main::@9 __b9: - // [41] call printf_str - // [71] phi from main::@9 to printf_str [phi:main::@9->printf_str] + // [39] call printf_str + // [69] phi from main::@9 to printf_str [phi:main::@9->printf_str] printf_str_from___b9: - // [71] phi printf_str::putc#12 = &snputc [phi:main::@9->printf_str#0] -- pprz1=pprc1 + // [69] phi printf_str::putc#12 = &snputc [phi:main::@9->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 + // [69] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 lda #s1 sta.z printf_str.s+1 jsr printf_str - // [42] phi from main::@9 to main::@10 [phi:main::@9->main::@10] + // [40] phi from main::@9 to main::@10 [phi:main::@9->main::@10] __b10_from___b9: jmp __b10 // main::@10 __b10: - // [43] call printf_sint + // [41] call printf_sint jsr printf_sint - // [44] phi from main::@10 to main::@11 [phi:main::@10->main::@11] + // [42] phi from main::@10 to main::@11 [phi:main::@10->main::@11] __b11_from___b10: jmp __b11 // main::@11 __b11: - // [45] call printf_str - // [71] phi from main::@11 to printf_str [phi:main::@11->printf_str] + // [43] call printf_str + // [69] phi from main::@11 to printf_str [phi:main::@11->printf_str] printf_str_from___b11: - // [71] phi printf_str::putc#12 = &snputc [phi:main::@11->printf_str#0] -- pprz1=pprc1 + // [69] phi printf_str::putc#12 = &snputc [phi:main::@11->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 + // [69] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 lda #s4 sta.z printf_str.s+1 jsr printf_str - // [46] phi from main::@11 to main::@12 [phi:main::@11->main::@12] + // [44] phi from main::@11 to main::@12 [phi:main::@11->main::@12] __b12_from___b11: jmp __b12 // main::@12 __b12: - // [47] call printf_uint - // [97] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] + // [45] call printf_uint + // [95] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] printf_uint_from___b12: jsr printf_uint - // [48] phi from main::@12 to main::@13 [phi:main::@12->main::@13] + // [46] phi from main::@12 to main::@13 [phi:main::@12->main::@13] __b13_from___b12: jmp __b13 // main::@13 __b13: - // [49] call printf_str - // [71] phi from main::@13 to printf_str [phi:main::@13->printf_str] + // [47] call printf_str + // [69] phi from main::@13 to printf_str [phi:main::@13->printf_str] printf_str_from___b13: - // [71] phi printf_str::putc#12 = &snputc [phi:main::@13->printf_str#0] -- pprz1=pprc1 + // [69] phi printf_str::putc#12 = &snputc [phi:main::@13->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 + // [69] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 lda #s5 @@ -5703,65 +5675,65 @@ main: { jmp __b14 // main::@14 __b14: - // [50] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 + // [48] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 lda #0 pha - // [51] callexecute snputc -- call_vprc1 + // [49] callexecute snputc -- call_vprc1 jsr snputc // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla - // [53] call print - // [80] phi from main::@14 to print [phi:main::@14->print] + // [51] call print + // [78] phi from main::@14 to print [phi:main::@14->print] print_from___b14: - // [80] phi screen#25 = screen#1 [phi:main::@14->print#0] -- register_copy + // [78] phi screen#25 = screen#1 [phi:main::@14->print#0] -- register_copy jsr print - // [54] phi from main::@14 to main::@15 [phi:main::@14->main::@15] + // [52] phi from main::@14 to main::@15 [phi:main::@14->main::@15] __b15_from___b14: jmp __b15 // main::@15 __b15: - // [55] call snprintf_init + // [53] call snprintf_init jsr snprintf_init - // [56] phi from main::@15 to main::@16 [phi:main::@15->main::@16] + // [54] phi from main::@15 to main::@16 [phi:main::@15->main::@16] __b16_from___b15: jmp __b16 // main::@16 __b16: - // [57] call printf_str - // [71] phi from main::@16 to printf_str [phi:main::@16->printf_str] + // [55] call printf_str + // [69] phi from main::@16 to printf_str [phi:main::@16->printf_str] printf_str_from___b16: - // [71] phi printf_str::putc#12 = &snputc [phi:main::@16->printf_str#0] -- pprz1=pprc1 + // [69] phi printf_str::putc#12 = &snputc [phi:main::@16->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 + // [69] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 lda #s6 sta.z printf_str.s+1 jsr printf_str - // [58] phi from main::@16 to main::@17 [phi:main::@16->main::@17] + // [56] phi from main::@16 to main::@17 [phi:main::@16->main::@17] __b17_from___b16: jmp __b17 // main::@17 __b17: - // [59] call printf_slong + // [57] call printf_slong jsr printf_slong - // [60] phi from main::@17 to main::@18 [phi:main::@17->main::@18] + // [58] phi from main::@17 to main::@18 [phi:main::@17->main::@18] __b18_from___b17: jmp __b18 // main::@18 __b18: - // [61] call printf_str - // [71] phi from main::@18 to printf_str [phi:main::@18->printf_str] + // [59] call printf_str + // [69] phi from main::@18 to printf_str [phi:main::@18->printf_str] printf_str_from___b18: - // [71] phi printf_str::putc#12 = &snputc [phi:main::@18->printf_str#0] -- pprz1=pprc1 + // [69] phi printf_str::putc#12 = &snputc [phi:main::@18->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- pbuz1=pbuc1 + // [69] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- pbuz1=pbuc1 lda #s5 @@ -5770,22 +5742,22 @@ main: { jmp __b19 // main::@19 __b19: - // [62] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 + // [60] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 lda #0 pha - // [63] callexecute snputc -- call_vprc1 + // [61] callexecute snputc -- call_vprc1 jsr snputc // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla - // [65] call print - // [80] phi from main::@19 to print [phi:main::@19->print] + // [63] call print + // [78] phi from main::@19 to print [phi:main::@19->print] print_from___b19: - // [80] phi screen#25 = screen#1 [phi:main::@19->print#0] -- register_copy + // [78] phi screen#25 = screen#1 [phi:main::@19->print#0] -- register_copy jsr print jmp __breturn // main::@return __breturn: - // [66] return + // [64] return rts .segment Data s: .text "hello world! " @@ -5808,17 +5780,17 @@ main: { /// Initialize the snprintf() state // void snprintf_init(char *s, unsigned int n) snprintf_init: { - // [67] __snprintf_capacity = $ffff -- vwuz1=vwuc1 + // [65] __snprintf_capacity = $ffff -- vwum1=vwuc1 lda #<$ffff - sta.z __snprintf_capacity + sta __snprintf_capacity lda #>$ffff - sta.z __snprintf_capacity+1 - // [68] __snprintf_size = 0 -- vwuz1=vbuc1 + sta __snprintf_capacity+1 + // [66] __snprintf_size = 0 -- vwum1=vbuc1 lda #<0 - sta.z __snprintf_size + sta __snprintf_size lda #>0 - sta.z __snprintf_size+1 - // [69] __snprintf_buffer = BUF -- pbuz1=pbuc1 + sta __snprintf_size+1 + // [67] __snprintf_buffer = BUF -- pbuz1=pbuc1 lda #BUF @@ -5826,7 +5798,7 @@ snprintf_init: { jmp __breturn // snprintf_init::@return __breturn: - // [70] return + // [68] return rts } // printf_str @@ -5835,34 +5807,34 @@ snprintf_init: { printf_str: { .label s = $e .label putc = 2 - // [72] phi from printf_str printf_str::@2 to printf_str::@1 [phi:printf_str/printf_str::@2->printf_str::@1] + // [70] phi from printf_str printf_str::@2 to printf_str::@1 [phi:printf_str/printf_str::@2->printf_str::@1] __b1_from_printf_str: __b1_from___b2: - // [72] phi printf_str::s#11 = printf_str::s#12 [phi:printf_str/printf_str::@2->printf_str::@1#0] -- register_copy + // [70] phi printf_str::s#11 = printf_str::s#12 [phi:printf_str/printf_str::@2->printf_str::@1#0] -- register_copy jmp __b1 // printf_str::@1 __b1: - // [73] printf_str::c#1 = *printf_str::s#11 -- vbuaa=_deref_pbuz1 + // [71] printf_str::c#1 = *printf_str::s#11 -- vbuaa=_deref_pbuz1 ldy #0 lda (s),y - // [74] printf_str::s#0 = ++ printf_str::s#11 -- pbuz1=_inc_pbuz1 + // [72] printf_str::s#0 = ++ printf_str::s#11 -- pbuz1=_inc_pbuz1 inc.z s bne !+ inc.z s+1 !: - // [75] if(0!=printf_str::c#1) goto printf_str::@2 -- 0_neq_vbuaa_then_la1 + // [73] if(0!=printf_str::c#1) goto printf_str::@2 -- 0_neq_vbuaa_then_la1 cmp #0 bne __b2 jmp __breturn // printf_str::@return __breturn: - // [76] return + // [74] return rts // printf_str::@2 __b2: - // [77] stackpush(char) = printf_str::c#1 -- _stackpushbyte_=vbuaa + // [75] stackpush(char) = printf_str::c#1 -- _stackpushbyte_=vbuaa pha - // [78] callexecute *printf_str::putc#12 -- call__deref_pprz1 + // [76] callexecute *printf_str::putc#12 -- call__deref_pprz1 jsr icall6 // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla @@ -5875,10 +5847,10 @@ printf_str: { // void print(__zp(2) char *msg) print: { .label msg = 2 - // [81] phi from print to print::@1 [phi:print->print::@1] + // [79] phi from print to print::@1 [phi:print->print::@1] __b1_from_print: - // [81] phi screen#1 = screen#25 [phi:print->print::@1#0] -- register_copy - // [81] phi print::msg#5 = BUF [phi:print->print::@1#1] -- pbuz1=pbuc1 + // [79] phi screen#1 = screen#25 [phi:print->print::@1#0] -- register_copy + // [79] phi print::msg#5 = BUF [phi:print->print::@1#1] -- pbuz1=pbuc1 lda #BUF @@ -5886,7 +5858,7 @@ print: { jmp __b1 // print::@1 __b1: - // [82] if(0!=*print::msg#5) goto print::@2 -- 0_neq__deref_pbuz1_then_la1 + // [80] if(0!=*print::msg#5) goto print::@2 -- 0_neq__deref_pbuz1_then_la1 ldy #0 lda (msg),y cmp #0 @@ -5894,29 +5866,29 @@ print: { jmp __breturn // print::@return __breturn: - // [83] return + // [81] return rts // print::@2 __b2: - // [84] *screen#1 = *print::msg#5 -- _deref_pbuz1=_deref_pbuz2 + // [82] *screen#1 = *print::msg#5 -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (msg),y ldy #0 sta (screen),y - // [85] screen#0 = ++ screen#1 -- pbuz1=_inc_pbuz1 + // [83] screen#0 = ++ screen#1 -- pbuz1=_inc_pbuz1 inc.z screen bne !+ inc.z screen+1 !: - // [86] print::msg#0 = ++ print::msg#5 -- pbuz1=_inc_pbuz1 + // [84] print::msg#0 = ++ print::msg#5 -- pbuz1=_inc_pbuz1 inc.z msg bne !+ inc.z msg+1 !: - // [81] phi from print::@2 to print::@1 [phi:print::@2->print::@1] + // [79] phi from print::@2 to print::@1 [phi:print::@2->print::@1] __b1_from___b2: - // [81] phi screen#1 = screen#0 [phi:print::@2->print::@1#0] -- register_copy - // [81] phi print::msg#5 = print::msg#0 [phi:print::@2->print::@1#1] -- register_copy + // [79] phi screen#1 = screen#0 [phi:print::@2->print::@1#0] -- register_copy + // [79] phi print::msg#5 = print::msg#0 [phi:print::@2->print::@1#1] -- register_copy jmp __b1 } // printf_string @@ -5925,20 +5897,20 @@ print: { // void printf_string(void (*putc)(char), char *str, char format_min_length, char format_justify_left) printf_string: { .label putc = snputc - // [88] phi from printf_string to printf_string::@1 [phi:printf_string->printf_string::@1] + // [86] phi from printf_string to printf_string::@1 [phi:printf_string->printf_string::@1] __b1_from_printf_string: jmp __b1 // printf_string::@1 __b1: - // [89] call printf_str - // [71] phi from printf_string::@1 to printf_str [phi:printf_string::@1->printf_str] + // [87] call printf_str + // [69] phi from printf_string::@1 to printf_str [phi:printf_string::@1->printf_str] printf_str_from___b1: - // [71] phi printf_str::putc#12 = printf_string::putc#0 [phi:printf_string::@1->printf_str#0] -- pprz1=pprc1 + // [69] phi printf_str::putc#12 = printf_string::putc#0 [phi:printf_string::@1->printf_str#0] -- pprz1=pprc1 lda #putc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- pbuz1=pbuc1 + // [69] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- pbuz1=pbuc1 lda #main.str @@ -5947,7 +5919,7 @@ printf_string: { jmp __breturn // printf_string::@return __breturn: - // [90] return + // [88] return rts } // printf_sint @@ -5962,58 +5934,58 @@ printf_sint: { // Format number into buffer .const uvalue = value .label putc = snputc - // [91] *((char *)&printf_buffer) = 0 -- _deref_pbuc1=vbuc2 + // [89] *((char *)&printf_buffer) = 0 -- _deref_pbuc1=vbuc2 // Handle any sign lda #0 sta printf_buffer - // [92] phi from printf_sint to printf_sint::@1 [phi:printf_sint->printf_sint::@1] + // [90] phi from printf_sint to printf_sint::@1 [phi:printf_sint->printf_sint::@1] __b1_from_printf_sint: jmp __b1 // printf_sint::@1 __b1: - // [93] call utoa - // [109] phi from printf_sint::@1 to utoa [phi:printf_sint::@1->utoa] + // [91] call utoa + // [107] phi from printf_sint::@1 to utoa [phi:printf_sint::@1->utoa] utoa_from___b1: - // [109] phi utoa::value#10 = printf_sint::uvalue#0 [phi:printf_sint::@1->utoa#0] -- vwuz1=vwuc1 + // [107] phi utoa::value#10 = printf_sint::uvalue#0 [phi:printf_sint::@1->utoa#0] -- vwuz1=vwuc1 lda #uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@1->utoa#1] -- vbuxx=vbuc1 + // [107] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@1->utoa#1] -- vbuxx=vbuc1 ldx #DECIMAL jsr utoa jmp __b2 // printf_sint::@2 __b2: - // [94] printf_number_buffer::buffer_sign#1 = *((char *)&printf_buffer) -- vbuz1=_deref_pbuc1 + // [92] printf_number_buffer::buffer_sign#1 = *((char *)&printf_buffer) -- vbuz1=_deref_pbuc1 lda printf_buffer sta.z printf_number_buffer.buffer_sign - // [95] call printf_number_buffer + // [93] call printf_number_buffer // Print using format - // [140] phi from printf_sint::@2 to printf_number_buffer [phi:printf_sint::@2->printf_number_buffer] + // [138] phi from printf_sint::@2 to printf_number_buffer [phi:printf_sint::@2->printf_number_buffer] printf_number_buffer_from___b2: - // [140] phi printf_number_buffer::format_upper_case#10 = printf_sint::format_upper_case#0 [phi:printf_sint::@2->printf_number_buffer#0] -- vbuz1=vbuc1 + // [138] phi printf_number_buffer::format_upper_case#10 = printf_sint::format_upper_case#0 [phi:printf_sint::@2->printf_number_buffer#0] -- vbuz1=vbuc1 lda #format_upper_case sta.z printf_number_buffer.format_upper_case - // [140] phi printf_number_buffer::putc#10 = printf_sint::putc#0 [phi:printf_sint::@2->printf_number_buffer#1] -- pprz1=pprc1 + // [138] phi printf_number_buffer::putc#10 = printf_sint::putc#0 [phi:printf_sint::@2->printf_number_buffer#1] -- pprz1=pprc1 lda #putc sta.z printf_number_buffer.putc+1 - // [140] phi printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#1 [phi:printf_sint::@2->printf_number_buffer#2] -- register_copy - // [140] phi printf_number_buffer::format_zero_padding#10 = printf_sint::format_zero_padding#0 [phi:printf_sint::@2->printf_number_buffer#3] -- vbuz1=vbuc1 + // [138] phi printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#1 [phi:printf_sint::@2->printf_number_buffer#2] -- register_copy + // [138] phi printf_number_buffer::format_zero_padding#10 = printf_sint::format_zero_padding#0 [phi:printf_sint::@2->printf_number_buffer#3] -- vbuz1=vbuc1 lda #format_zero_padding sta.z printf_number_buffer.format_zero_padding - // [140] phi printf_number_buffer::format_justify_left#10 = printf_sint::format_justify_left#0 [phi:printf_sint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 + // [138] phi printf_number_buffer::format_justify_left#10 = printf_sint::format_justify_left#0 [phi:printf_sint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_sint::format_min_length#0 [phi:printf_sint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [138] phi printf_number_buffer::format_min_length#3 = printf_sint::format_min_length#0 [phi:printf_sint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer jmp __breturn // printf_sint::@return __breturn: - // [96] return + // [94] return rts } // printf_uint @@ -6029,54 +6001,54 @@ printf_uint: { jmp __b1 // printf_uint::@1 __b1: - // [98] *((char *)&printf_buffer) = 0 -- _deref_pbuc1=vbuc2 + // [96] *((char *)&printf_buffer) = 0 -- _deref_pbuc1=vbuc2 // Handle any sign lda #0 sta printf_buffer - // [99] call utoa + // [97] call utoa // Format number into buffer - // [109] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] + // [107] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] utoa_from___b1: - // [109] phi utoa::value#10 = printf_uint::uvalue#0 [phi:printf_uint::@1->utoa#0] -- vwuz1=vwuc1 + // [107] phi utoa::value#10 = printf_uint::uvalue#0 [phi:printf_uint::@1->utoa#0] -- vwuz1=vwuc1 lda #uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- vbuxx=vbuc1 + // [107] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- vbuxx=vbuc1 ldx #HEXADECIMAL jsr utoa jmp __b2 // printf_uint::@2 __b2: - // [100] printf_number_buffer::buffer_sign#2 = *((char *)&printf_buffer) -- vbuz1=_deref_pbuc1 + // [98] printf_number_buffer::buffer_sign#2 = *((char *)&printf_buffer) -- vbuz1=_deref_pbuc1 lda printf_buffer sta.z printf_number_buffer.buffer_sign - // [101] call printf_number_buffer + // [99] call printf_number_buffer // Print using format - // [140] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] + // [138] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] printf_number_buffer_from___b2: - // [140] phi printf_number_buffer::format_upper_case#10 = printf_uint::format_upper_case#0 [phi:printf_uint::@2->printf_number_buffer#0] -- vbuz1=vbuc1 + // [138] phi printf_number_buffer::format_upper_case#10 = printf_uint::format_upper_case#0 [phi:printf_uint::@2->printf_number_buffer#0] -- vbuz1=vbuc1 lda #format_upper_case sta.z printf_number_buffer.format_upper_case - // [140] phi printf_number_buffer::putc#10 = printf_uint::putc#0 [phi:printf_uint::@2->printf_number_buffer#1] -- pprz1=pprc1 + // [138] phi printf_number_buffer::putc#10 = printf_uint::putc#0 [phi:printf_uint::@2->printf_number_buffer#1] -- pprz1=pprc1 lda #putc sta.z printf_number_buffer.putc+1 - // [140] phi printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 [phi:printf_uint::@2->printf_number_buffer#2] -- register_copy - // [140] phi printf_number_buffer::format_zero_padding#10 = printf_uint::format_zero_padding#0 [phi:printf_uint::@2->printf_number_buffer#3] -- vbuz1=vbuc1 + // [138] phi printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 [phi:printf_uint::@2->printf_number_buffer#2] -- register_copy + // [138] phi printf_number_buffer::format_zero_padding#10 = printf_uint::format_zero_padding#0 [phi:printf_uint::@2->printf_number_buffer#3] -- vbuz1=vbuc1 lda #format_zero_padding sta.z printf_number_buffer.format_zero_padding - // [140] phi printf_number_buffer::format_justify_left#10 = printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 + // [138] phi printf_number_buffer::format_justify_left#10 = printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [138] phi printf_number_buffer::format_min_length#3 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer jmp __breturn // printf_uint::@return __breturn: - // [102] return + // [100] return rts } // printf_slong @@ -6091,51 +6063,51 @@ printf_slong: { .label putc = snputc // Format number into buffer .label uvalue = value - // [103] *((char *)&printf_buffer) = 0 -- _deref_pbuc1=vbuc2 + // [101] *((char *)&printf_buffer) = 0 -- _deref_pbuc1=vbuc2 // Handle any sign lda #0 sta printf_buffer - // [104] phi from printf_slong to printf_slong::@1 [phi:printf_slong->printf_slong::@1] + // [102] phi from printf_slong to printf_slong::@1 [phi:printf_slong->printf_slong::@1] __b1_from_printf_slong: jmp __b1 // printf_slong::@1 __b1: - // [105] call ultoa - // [181] phi from printf_slong::@1 to ultoa [phi:printf_slong::@1->ultoa] + // [103] call ultoa + // [179] phi from printf_slong::@1 to ultoa [phi:printf_slong::@1->ultoa] ultoa_from___b1: jsr ultoa jmp __b2 // printf_slong::@2 __b2: - // [106] printf_number_buffer::buffer_sign#0 = *((char *)&printf_buffer) -- vbuz1=_deref_pbuc1 + // [104] printf_number_buffer::buffer_sign#0 = *((char *)&printf_buffer) -- vbuz1=_deref_pbuc1 lda printf_buffer sta.z printf_number_buffer.buffer_sign - // [107] call printf_number_buffer + // [105] call printf_number_buffer // Print using format - // [140] phi from printf_slong::@2 to printf_number_buffer [phi:printf_slong::@2->printf_number_buffer] + // [138] phi from printf_slong::@2 to printf_number_buffer [phi:printf_slong::@2->printf_number_buffer] printf_number_buffer_from___b2: - // [140] phi printf_number_buffer::format_upper_case#10 = printf_slong::format_upper_case#0 [phi:printf_slong::@2->printf_number_buffer#0] -- vbuz1=vbuc1 + // [138] phi printf_number_buffer::format_upper_case#10 = printf_slong::format_upper_case#0 [phi:printf_slong::@2->printf_number_buffer#0] -- vbuz1=vbuc1 lda #format_upper_case sta.z printf_number_buffer.format_upper_case - // [140] phi printf_number_buffer::putc#10 = printf_slong::putc#0 [phi:printf_slong::@2->printf_number_buffer#1] -- pprz1=pprc1 + // [138] phi printf_number_buffer::putc#10 = printf_slong::putc#0 [phi:printf_slong::@2->printf_number_buffer#1] -- pprz1=pprc1 lda #putc sta.z printf_number_buffer.putc+1 - // [140] phi printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#0 [phi:printf_slong::@2->printf_number_buffer#2] -- register_copy - // [140] phi printf_number_buffer::format_zero_padding#10 = printf_slong::format_zero_padding#0 [phi:printf_slong::@2->printf_number_buffer#3] -- vbuz1=vbuc1 + // [138] phi printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#0 [phi:printf_slong::@2->printf_number_buffer#2] -- register_copy + // [138] phi printf_number_buffer::format_zero_padding#10 = printf_slong::format_zero_padding#0 [phi:printf_slong::@2->printf_number_buffer#3] -- vbuz1=vbuc1 lda #format_zero_padding sta.z printf_number_buffer.format_zero_padding - // [140] phi printf_number_buffer::format_justify_left#10 = printf_slong::format_justify_left#0 [phi:printf_slong::@2->printf_number_buffer#4] -- vbuz1=vbuc1 + // [138] phi printf_number_buffer::format_justify_left#10 = printf_slong::format_justify_left#0 [phi:printf_slong::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_slong::format_min_length#0 [phi:printf_slong::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [138] phi printf_number_buffer::format_min_length#3 = printf_slong::format_min_length#0 [phi:printf_slong::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer jmp __breturn // printf_slong::@return __breturn: - // [108] return + // [106] return rts } // utoa @@ -6152,115 +6124,115 @@ utoa: { .label value = 2 .label max_digits = $1a .label digit_values = $e - // [110] if(utoa::radix#2==DECIMAL) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 + // [108] if(utoa::radix#2==DECIMAL) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 cpx #DECIMAL beq __b1_from_utoa jmp __b2 // utoa::@2 __b2: - // [111] if(utoa::radix#2==HEXADECIMAL) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 + // [109] if(utoa::radix#2==HEXADECIMAL) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 cpx #HEXADECIMAL beq __b1_from___b2 jmp __b3 // utoa::@3 __b3: - // [112] if(utoa::radix#2==OCTAL) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 + // [110] if(utoa::radix#2==OCTAL) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 cpx #OCTAL beq __b1_from___b3 jmp __b4 // utoa::@4 __b4: - // [113] if(utoa::radix#2==BINARY) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 + // [111] if(utoa::radix#2==BINARY) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 cpx #BINARY beq __b1_from___b4 jmp __b5 // utoa::@5 __b5: - // [114] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS) = 'e' -- _deref_pbuc1=vbuc2 + // [112] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS) = 'e' -- _deref_pbuc1=vbuc2 // Unknown radix lda #'e' sta printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS - // [115] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1) = 'r' -- _deref_pbuc1=vbuc2 + // [113] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1) = 'r' -- _deref_pbuc1=vbuc2 lda #'r' sta printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1 - // [116] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2) = 'r' -- _deref_pbuc1=vbuc2 + // [114] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2) = 'r' -- _deref_pbuc1=vbuc2 lda #'r' sta printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2 - // [117] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3) = 0 -- _deref_pbuc1=vbuc2 + // [115] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3) = 0 -- _deref_pbuc1=vbuc2 lda #0 sta printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3 jmp __breturn // utoa::@return __breturn: - // [118] return + // [116] return rts - // [119] phi from utoa to utoa::@1 [phi:utoa->utoa::@1] + // [117] phi from utoa to utoa::@1 [phi:utoa->utoa::@1] __b1_from_utoa: - // [119] phi utoa::digit_values#8 = RADIX_DECIMAL_VALUES [phi:utoa->utoa::@1#0] -- pwuz1=pwuc1 + // [117] phi utoa::digit_values#8 = RADIX_DECIMAL_VALUES [phi:utoa->utoa::@1#0] -- pwuz1=pwuc1 lda #RADIX_DECIMAL_VALUES sta.z digit_values+1 - // [119] phi utoa::max_digits#7 = 5 [phi:utoa->utoa::@1#1] -- vbuz1=vbuc1 + // [117] phi utoa::max_digits#7 = 5 [phi:utoa->utoa::@1#1] -- vbuz1=vbuc1 lda #5 sta.z max_digits jmp __b1 - // [119] phi from utoa::@2 to utoa::@1 [phi:utoa::@2->utoa::@1] + // [117] phi from utoa::@2 to utoa::@1 [phi:utoa::@2->utoa::@1] __b1_from___b2: - // [119] phi utoa::digit_values#8 = RADIX_HEXADECIMAL_VALUES [phi:utoa::@2->utoa::@1#0] -- pwuz1=pwuc1 + // [117] phi utoa::digit_values#8 = RADIX_HEXADECIMAL_VALUES [phi:utoa::@2->utoa::@1#0] -- pwuz1=pwuc1 lda #RADIX_HEXADECIMAL_VALUES sta.z digit_values+1 - // [119] phi utoa::max_digits#7 = 4 [phi:utoa::@2->utoa::@1#1] -- vbuz1=vbuc1 + // [117] phi utoa::max_digits#7 = 4 [phi:utoa::@2->utoa::@1#1] -- vbuz1=vbuc1 lda #4 sta.z max_digits jmp __b1 - // [119] phi from utoa::@3 to utoa::@1 [phi:utoa::@3->utoa::@1] + // [117] phi from utoa::@3 to utoa::@1 [phi:utoa::@3->utoa::@1] __b1_from___b3: - // [119] phi utoa::digit_values#8 = RADIX_OCTAL_VALUES [phi:utoa::@3->utoa::@1#0] -- pwuz1=pwuc1 + // [117] phi utoa::digit_values#8 = RADIX_OCTAL_VALUES [phi:utoa::@3->utoa::@1#0] -- pwuz1=pwuc1 lda #RADIX_OCTAL_VALUES sta.z digit_values+1 - // [119] phi utoa::max_digits#7 = 6 [phi:utoa::@3->utoa::@1#1] -- vbuz1=vbuc1 + // [117] phi utoa::max_digits#7 = 6 [phi:utoa::@3->utoa::@1#1] -- vbuz1=vbuc1 lda #6 sta.z max_digits jmp __b1 - // [119] phi from utoa::@4 to utoa::@1 [phi:utoa::@4->utoa::@1] + // [117] phi from utoa::@4 to utoa::@1 [phi:utoa::@4->utoa::@1] __b1_from___b4: - // [119] phi utoa::digit_values#8 = RADIX_BINARY_VALUES [phi:utoa::@4->utoa::@1#0] -- pwuz1=pwuc1 + // [117] phi utoa::digit_values#8 = RADIX_BINARY_VALUES [phi:utoa::@4->utoa::@1#0] -- pwuz1=pwuc1 lda #RADIX_BINARY_VALUES sta.z digit_values+1 - // [119] phi utoa::max_digits#7 = $10 [phi:utoa::@4->utoa::@1#1] -- vbuz1=vbuc1 + // [117] phi utoa::max_digits#7 = $10 [phi:utoa::@4->utoa::@1#1] -- vbuz1=vbuc1 lda #$10 sta.z max_digits jmp __b1 // utoa::@1 __b1: - // [120] phi from utoa::@1 to utoa::@6 [phi:utoa::@1->utoa::@6] + // [118] phi from utoa::@1 to utoa::@6 [phi:utoa::@1->utoa::@6] __b6_from___b1: - // [120] phi utoa::buffer#10 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:utoa::@1->utoa::@6#0] -- pbuz1=pbuc1 + // [118] phi utoa::buffer#10 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:utoa::@1->utoa::@6#0] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS sta.z buffer+1 - // [120] phi utoa::started#2 = 0 [phi:utoa::@1->utoa::@6#1] -- vbuxx=vbuc1 + // [118] phi utoa::started#2 = 0 [phi:utoa::@1->utoa::@6#1] -- vbuxx=vbuc1 ldx #0 - // [120] phi utoa::value#3 = utoa::value#10 [phi:utoa::@1->utoa::@6#2] -- register_copy - // [120] phi utoa::digit#2 = 0 [phi:utoa::@1->utoa::@6#3] -- vbuz1=vbuc1 + // [118] phi utoa::value#3 = utoa::value#10 [phi:utoa::@1->utoa::@6#2] -- register_copy + // [118] phi utoa::digit#2 = 0 [phi:utoa::@1->utoa::@6#3] -- vbuz1=vbuc1 lda #0 sta.z digit jmp __b6 // utoa::@6 __b6: - // [121] utoa::$4 = utoa::max_digits#7 - 1 -- vbuaa=vbuz1_minus_1 + // [119] utoa::$4 = utoa::max_digits#7 - 1 -- vbuaa=vbuz1_minus_1 lda.z max_digits sec sbc #1 - // [122] if(utoa::digit#2=utoa::digit_value#0) goto utoa::@10 -- vwuz1_ge_vwuz2_then_la1 + // [128] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@10 -- vwuz1_ge_vwuz2_then_la1 lda.z digit_value+1 cmp.z value+1 bne !+ @@ -6311,48 +6283,48 @@ utoa: { beq __b10 !: bcc __b10 - // [131] phi from utoa::@12 to utoa::@9 [phi:utoa::@12->utoa::@9] + // [129] phi from utoa::@12 to utoa::@9 [phi:utoa::@12->utoa::@9] __b9_from___b12: - // [131] phi utoa::buffer#15 = utoa::buffer#10 [phi:utoa::@12->utoa::@9#0] -- register_copy - // [131] phi utoa::started#4 = utoa::started#2 [phi:utoa::@12->utoa::@9#1] -- register_copy - // [131] phi utoa::value#7 = utoa::value#3 [phi:utoa::@12->utoa::@9#2] -- register_copy + // [129] phi utoa::buffer#15 = utoa::buffer#10 [phi:utoa::@12->utoa::@9#0] -- register_copy + // [129] phi utoa::started#4 = utoa::started#2 [phi:utoa::@12->utoa::@9#1] -- register_copy + // [129] phi utoa::value#7 = utoa::value#3 [phi:utoa::@12->utoa::@9#2] -- register_copy jmp __b9 // utoa::@9 __b9: - // [132] utoa::digit#1 = ++ utoa::digit#2 -- vbuz1=_inc_vbuz1 + // [130] utoa::digit#1 = ++ utoa::digit#2 -- vbuz1=_inc_vbuz1 inc.z digit - // [120] phi from utoa::@9 to utoa::@6 [phi:utoa::@9->utoa::@6] + // [118] phi from utoa::@9 to utoa::@6 [phi:utoa::@9->utoa::@6] __b6_from___b9: - // [120] phi utoa::buffer#10 = utoa::buffer#15 [phi:utoa::@9->utoa::@6#0] -- register_copy - // [120] phi utoa::started#2 = utoa::started#4 [phi:utoa::@9->utoa::@6#1] -- register_copy - // [120] phi utoa::value#3 = utoa::value#7 [phi:utoa::@9->utoa::@6#2] -- register_copy - // [120] phi utoa::digit#2 = utoa::digit#1 [phi:utoa::@9->utoa::@6#3] -- register_copy + // [118] phi utoa::buffer#10 = utoa::buffer#15 [phi:utoa::@9->utoa::@6#0] -- register_copy + // [118] phi utoa::started#2 = utoa::started#4 [phi:utoa::@9->utoa::@6#1] -- register_copy + // [118] phi utoa::value#3 = utoa::value#7 [phi:utoa::@9->utoa::@6#2] -- register_copy + // [118] phi utoa::digit#2 = utoa::digit#1 [phi:utoa::@9->utoa::@6#3] -- register_copy jmp __b6 // utoa::@10 __b10: - // [133] utoa_append::buffer#0 = utoa::buffer#10 - // [134] utoa_append::value#0 = utoa::value#3 - // [135] utoa_append::sub#0 = utoa::digit_value#0 - // [136] call utoa_append - // [202] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] + // [131] utoa_append::buffer#0 = utoa::buffer#10 + // [132] utoa_append::value#0 = utoa::value#3 + // [133] utoa_append::sub#0 = utoa::digit_value#0 + // [134] call utoa_append + // [200] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] utoa_append_from___b10: jsr utoa_append - // [137] utoa_append::return#0 = utoa_append::value#2 + // [135] utoa_append::return#0 = utoa_append::value#2 jmp __b11 // utoa::@11 __b11: - // [138] utoa::value#0 = utoa_append::return#0 - // [139] utoa::buffer#4 = ++ utoa::buffer#10 -- pbuz1=_inc_pbuz1 + // [136] utoa::value#0 = utoa_append::return#0 + // [137] utoa::buffer#4 = ++ utoa::buffer#10 -- pbuz1=_inc_pbuz1 inc.z buffer bne !+ inc.z buffer+1 !: - // [131] phi from utoa::@11 to utoa::@9 [phi:utoa::@11->utoa::@9] + // [129] phi from utoa::@11 to utoa::@9 [phi:utoa::@11->utoa::@9] __b9_from___b11: - // [131] phi utoa::buffer#15 = utoa::buffer#4 [phi:utoa::@11->utoa::@9#0] -- register_copy - // [131] phi utoa::started#4 = 1 [phi:utoa::@11->utoa::@9#1] -- vbuxx=vbuc1 + // [129] phi utoa::buffer#15 = utoa::buffer#4 [phi:utoa::@11->utoa::@9#0] -- register_copy + // [129] phi utoa::started#4 = 1 [phi:utoa::@11->utoa::@9#1] -- vbuxx=vbuc1 ldx #1 - // [131] phi utoa::value#7 = utoa::value#0 [phi:utoa::@11->utoa::@9#2] -- register_copy + // [129] phi utoa::value#7 = utoa::value#0 [phi:utoa::@11->utoa::@9#2] -- register_copy jmp __b9 } // printf_number_buffer @@ -6367,170 +6339,170 @@ printf_number_buffer: { .label putc = 2 .label format_justify_left = $1a .label format_upper_case = $1b - // [141] if(0==printf_number_buffer::format_min_length#3) goto printf_number_buffer::@1 -- 0_eq_vbuxx_then_la1 + // [139] if(0==printf_number_buffer::format_min_length#3) goto printf_number_buffer::@1 -- 0_eq_vbuxx_then_la1 cpx #0 beq __b1_from_printf_number_buffer - // [142] phi from printf_number_buffer to printf_number_buffer::@6 [phi:printf_number_buffer->printf_number_buffer::@6] + // [140] phi from printf_number_buffer to printf_number_buffer::@6 [phi:printf_number_buffer->printf_number_buffer::@6] __b6_from_printf_number_buffer: jmp __b6 // printf_number_buffer::@6 __b6: - // [143] call strlen - // [209] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] + // [141] call strlen + // [207] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] strlen_from___b6: jsr strlen - // [144] strlen::return#2 = strlen::len#2 + // [142] strlen::return#2 = strlen::len#2 jmp __b14 // printf_number_buffer::@14 __b14: - // [145] printf_number_buffer::$19 = strlen::return#2 - // [146] printf_number_buffer::len#0 = (signed char)printf_number_buffer::$19 -- vbsyy=_sbyte_vwuz1 + // [143] printf_number_buffer::$19 = strlen::return#2 + // [144] printf_number_buffer::len#0 = (signed char)printf_number_buffer::$19 -- vbsyy=_sbyte_vwuz1 // There is a minimum length - work out the padding ldy.z __19 - // [147] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 -- 0_eq_vbuz1_then_la1 + // [145] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 -- 0_eq_vbuz1_then_la1 lda.z buffer_sign beq __b13_from___b14 jmp __b7 // printf_number_buffer::@7 __b7: - // [148] printf_number_buffer::len#1 = ++ printf_number_buffer::len#0 -- vbsyy=_inc_vbsyy + // [146] printf_number_buffer::len#1 = ++ printf_number_buffer::len#0 -- vbsyy=_inc_vbsyy iny - // [149] phi from printf_number_buffer::@14 printf_number_buffer::@7 to printf_number_buffer::@13 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13] + // [147] phi from printf_number_buffer::@14 printf_number_buffer::@7 to printf_number_buffer::@13 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13] __b13_from___b14: __b13_from___b7: - // [149] phi printf_number_buffer::len#2 = printf_number_buffer::len#0 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13#0] -- register_copy + // [147] phi printf_number_buffer::len#2 = printf_number_buffer::len#0 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13#0] -- register_copy jmp __b13 // printf_number_buffer::@13 __b13: - // [150] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#3 - printf_number_buffer::len#2 -- vbsz1=vbsxx_minus_vbsyy + // [148] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#3 - printf_number_buffer::len#2 -- vbsz1=vbsxx_minus_vbsyy txa sty.z $ff sec sbc.z $ff sta.z padding - // [151] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 -- vbsz1_ge_0_then_la1 + // [149] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 -- vbsz1_ge_0_then_la1 lda.z padding cmp #0 bpl __b21_from___b13 - // [153] phi from printf_number_buffer printf_number_buffer::@13 to printf_number_buffer::@1 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1] + // [151] phi from printf_number_buffer printf_number_buffer::@13 to printf_number_buffer::@1 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1] __b1_from_printf_number_buffer: __b1_from___b13: - // [153] phi printf_number_buffer::padding#10 = 0 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1#0] -- vbsz1=vbsc1 + // [151] phi printf_number_buffer::padding#10 = 0 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1#0] -- vbsz1=vbsc1 lda #0 sta.z padding jmp __b1 - // [152] phi from printf_number_buffer::@13 to printf_number_buffer::@21 [phi:printf_number_buffer::@13->printf_number_buffer::@21] + // [150] phi from printf_number_buffer::@13 to printf_number_buffer::@21 [phi:printf_number_buffer::@13->printf_number_buffer::@21] __b21_from___b13: jmp __b21 // printf_number_buffer::@21 __b21: - // [153] phi from printf_number_buffer::@21 to printf_number_buffer::@1 [phi:printf_number_buffer::@21->printf_number_buffer::@1] + // [151] phi from printf_number_buffer::@21 to printf_number_buffer::@1 [phi:printf_number_buffer::@21->printf_number_buffer::@1] __b1_from___b21: - // [153] phi printf_number_buffer::padding#10 = printf_number_buffer::padding#1 [phi:printf_number_buffer::@21->printf_number_buffer::@1#0] -- register_copy + // [151] phi printf_number_buffer::padding#10 = printf_number_buffer::padding#1 [phi:printf_number_buffer::@21->printf_number_buffer::@1#0] -- register_copy jmp __b1 // printf_number_buffer::@1 __b1: - // [154] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 -- 0_neq_vbuz1_then_la1 + // [152] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 -- 0_neq_vbuz1_then_la1 lda.z format_justify_left bne __b2 jmp __b17 // printf_number_buffer::@17 __b17: - // [155] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 -- 0_neq_vbuz1_then_la1 + // [153] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 -- 0_neq_vbuz1_then_la1 lda.z format_zero_padding bne __b2 jmp __b16 // printf_number_buffer::@16 __b16: - // [156] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 -- 0_neq_vbsz1_then_la1 + // [154] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 -- 0_neq_vbsz1_then_la1 lda.z padding cmp #0 bne __b8 jmp __b2 // printf_number_buffer::@8 __b8: - // [157] printf_padding::putc#0 = printf_number_buffer::putc#10 - // [158] printf_padding::length#0 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuz2 + // [155] printf_padding::putc#0 = printf_number_buffer::putc#10 + // [156] printf_padding::length#0 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuz2 lda.z padding sta.z printf_padding.length - // [159] call printf_padding - // [215] phi from printf_number_buffer::@8 to printf_padding [phi:printf_number_buffer::@8->printf_padding] + // [157] call printf_padding + // [213] phi from printf_number_buffer::@8 to printf_padding [phi:printf_number_buffer::@8->printf_padding] printf_padding_from___b8: - // [215] phi printf_padding::putc#7 = printf_padding::putc#0 [phi:printf_number_buffer::@8->printf_padding#0] -- register_copy - // [215] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 + // [213] phi printf_padding::putc#7 = printf_padding::putc#0 [phi:printf_number_buffer::@8->printf_padding#0] -- register_copy + // [213] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy + // [213] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy jsr printf_padding jmp __b2 // printf_number_buffer::@2 __b2: - // [160] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 -- 0_eq_vbuz1_then_la1 + // [158] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 -- 0_eq_vbuz1_then_la1 lda.z buffer_sign beq __b3 jmp __b9 // printf_number_buffer::@9 __b9: - // [161] stackpush(char) = printf_number_buffer::buffer_sign#10 -- _stackpushbyte_=vbuz1 + // [159] stackpush(char) = printf_number_buffer::buffer_sign#10 -- _stackpushbyte_=vbuz1 lda.z buffer_sign pha - // [162] callexecute *printf_number_buffer::putc#10 -- call__deref_pprz1 + // [160] callexecute *printf_number_buffer::putc#10 -- call__deref_pprz1 jsr icall7 // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla jmp __b3 // printf_number_buffer::@3 __b3: - // [164] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 -- 0_eq_vbuz1_then_la1 + // [162] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 -- 0_eq_vbuz1_then_la1 lda.z format_zero_padding beq __b4 jmp __b18 // printf_number_buffer::@18 __b18: - // [165] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 -- 0_neq_vbsz1_then_la1 + // [163] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 -- 0_neq_vbsz1_then_la1 lda.z padding cmp #0 bne __b10 jmp __b4 // printf_number_buffer::@10 __b10: - // [166] printf_padding::putc#1 = printf_number_buffer::putc#10 - // [167] printf_padding::length#1 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuz2 + // [164] printf_padding::putc#1 = printf_number_buffer::putc#10 + // [165] printf_padding::length#1 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuz2 lda.z padding sta.z printf_padding.length - // [168] call printf_padding - // [215] phi from printf_number_buffer::@10 to printf_padding [phi:printf_number_buffer::@10->printf_padding] + // [166] call printf_padding + // [213] phi from printf_number_buffer::@10 to printf_padding [phi:printf_number_buffer::@10->printf_padding] printf_padding_from___b10: - // [215] phi printf_padding::putc#7 = printf_padding::putc#1 [phi:printf_number_buffer::@10->printf_padding#0] -- register_copy - // [215] phi printf_padding::pad#7 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 + // [213] phi printf_padding::putc#7 = printf_padding::putc#1 [phi:printf_number_buffer::@10->printf_padding#0] -- register_copy + // [213] phi printf_padding::pad#7 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy + // [213] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy jsr printf_padding jmp __b4 // printf_number_buffer::@4 __b4: - // [169] if(0==printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 -- 0_eq_vbuz1_then_la1 + // [167] if(0==printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 -- 0_eq_vbuz1_then_la1 lda.z format_upper_case beq __b5 - // [170] phi from printf_number_buffer::@4 to printf_number_buffer::@11 [phi:printf_number_buffer::@4->printf_number_buffer::@11] + // [168] phi from printf_number_buffer::@4 to printf_number_buffer::@11 [phi:printf_number_buffer::@4->printf_number_buffer::@11] __b11_from___b4: jmp __b11 // printf_number_buffer::@11 __b11: - // [171] call strupr - // [223] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] + // [169] call strupr + // [221] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] strupr_from___b11: jsr strupr jmp __b5 // printf_number_buffer::@5 __b5: - // [172] printf_str::putc#0 = printf_number_buffer::putc#10 - // [173] call printf_str - // [71] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] + // [170] printf_str::putc#0 = printf_number_buffer::putc#10 + // [171] call printf_str + // [69] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] printf_str_from___b5: - // [71] phi printf_str::putc#12 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [71] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 + // [69] phi printf_str::putc#12 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy + // [69] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -6539,42 +6511,42 @@ printf_number_buffer: { jmp __b15 // printf_number_buffer::@15 __b15: - // [174] if(0==printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return -- 0_eq_vbuz1_then_la1 + // [172] if(0==printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return -- 0_eq_vbuz1_then_la1 lda.z format_justify_left beq __breturn jmp __b20 // printf_number_buffer::@20 __b20: - // [175] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return -- 0_neq_vbuz1_then_la1 + // [173] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return -- 0_neq_vbuz1_then_la1 lda.z format_zero_padding bne __breturn jmp __b19 // printf_number_buffer::@19 __b19: - // [176] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 -- 0_neq_vbsz1_then_la1 + // [174] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 -- 0_neq_vbsz1_then_la1 lda.z padding cmp #0 bne __b12 jmp __breturn // printf_number_buffer::@12 __b12: - // [177] printf_padding::putc#2 = printf_number_buffer::putc#10 - // [178] printf_padding::length#2 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuz2 + // [175] printf_padding::putc#2 = printf_number_buffer::putc#10 + // [176] printf_padding::length#2 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuz2 lda.z padding sta.z printf_padding.length - // [179] call printf_padding - // [215] phi from printf_number_buffer::@12 to printf_padding [phi:printf_number_buffer::@12->printf_padding] + // [177] call printf_padding + // [213] phi from printf_number_buffer::@12 to printf_padding [phi:printf_number_buffer::@12->printf_padding] printf_padding_from___b12: - // [215] phi printf_padding::putc#7 = printf_padding::putc#2 [phi:printf_number_buffer::@12->printf_padding#0] -- register_copy - // [215] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 + // [213] phi printf_padding::putc#7 = printf_padding::putc#2 [phi:printf_number_buffer::@12->printf_padding#0] -- register_copy + // [213] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy + // [213] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy jsr printf_padding jmp __breturn // printf_number_buffer::@return __breturn: - // [180] return + // [178] return rts // Outside Flow icall7: @@ -6593,16 +6565,16 @@ ultoa: { .label buffer = 2 .label digit = $14 .label value = 4 - // [182] phi from ultoa to ultoa::@1 [phi:ultoa->ultoa::@1] + // [180] phi from ultoa to ultoa::@1 [phi:ultoa->ultoa::@1] __b1_from_ultoa: - // [182] phi ultoa::buffer#11 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:ultoa->ultoa::@1#0] -- pbuz1=pbuc1 + // [180] phi ultoa::buffer#11 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:ultoa->ultoa::@1#0] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS sta.z buffer+1 - // [182] phi ultoa::started#2 = 0 [phi:ultoa->ultoa::@1#1] -- vbuxx=vbuc1 + // [180] phi ultoa::started#2 = 0 [phi:ultoa->ultoa::@1#1] -- vbuxx=vbuc1 ldx #0 - // [182] phi ultoa::value#2 = printf_slong::uvalue#0 [phi:ultoa->ultoa::@1#2] -- vduz1=vduc1 + // [180] phi ultoa::value#2 = printf_slong::uvalue#0 [phi:ultoa->ultoa::@1#2] -- vduz1=vduc1 lda #printf_slong.uvalue @@ -6611,47 +6583,47 @@ ultoa: { sta.z value+2 lda #>printf_slong.uvalue>>$10 sta.z value+3 - // [182] phi ultoa::digit#2 = 0 [phi:ultoa->ultoa::@1#3] -- vbuz1=vbuc1 + // [180] phi ultoa::digit#2 = 0 [phi:ultoa->ultoa::@1#3] -- vbuz1=vbuc1 lda #0 sta.z digit jmp __b1 // ultoa::@1 __b1: - // [183] if(ultoa::digit#2=ultoa::digit_value#0) goto ultoa::@5 -- vduz1_ge_vduz2_then_la1 + // [190] if(ultoa::value#2>=ultoa::digit_value#0) goto ultoa::@5 -- vduz1_ge_vduz2_then_la1 lda.z value+3 cmp.z digit_value+3 bcc !+ @@ -6684,48 +6656,48 @@ ultoa: { cmp.z digit_value bcs __b5 !: - // [193] phi from ultoa::@7 to ultoa::@4 [phi:ultoa::@7->ultoa::@4] + // [191] phi from ultoa::@7 to ultoa::@4 [phi:ultoa::@7->ultoa::@4] __b4_from___b7: - // [193] phi ultoa::buffer#14 = ultoa::buffer#11 [phi:ultoa::@7->ultoa::@4#0] -- register_copy - // [193] phi ultoa::started#4 = ultoa::started#2 [phi:ultoa::@7->ultoa::@4#1] -- register_copy - // [193] phi ultoa::value#6 = ultoa::value#2 [phi:ultoa::@7->ultoa::@4#2] -- register_copy + // [191] phi ultoa::buffer#14 = ultoa::buffer#11 [phi:ultoa::@7->ultoa::@4#0] -- register_copy + // [191] phi ultoa::started#4 = ultoa::started#2 [phi:ultoa::@7->ultoa::@4#1] -- register_copy + // [191] phi ultoa::value#6 = ultoa::value#2 [phi:ultoa::@7->ultoa::@4#2] -- register_copy jmp __b4 // ultoa::@4 __b4: - // [194] ultoa::digit#1 = ++ ultoa::digit#2 -- vbuz1=_inc_vbuz1 + // [192] ultoa::digit#1 = ++ ultoa::digit#2 -- vbuz1=_inc_vbuz1 inc.z digit - // [182] phi from ultoa::@4 to ultoa::@1 [phi:ultoa::@4->ultoa::@1] + // [180] phi from ultoa::@4 to ultoa::@1 [phi:ultoa::@4->ultoa::@1] __b1_from___b4: - // [182] phi ultoa::buffer#11 = ultoa::buffer#14 [phi:ultoa::@4->ultoa::@1#0] -- register_copy - // [182] phi ultoa::started#2 = ultoa::started#4 [phi:ultoa::@4->ultoa::@1#1] -- register_copy - // [182] phi ultoa::value#2 = ultoa::value#6 [phi:ultoa::@4->ultoa::@1#2] -- register_copy - // [182] phi ultoa::digit#2 = ultoa::digit#1 [phi:ultoa::@4->ultoa::@1#3] -- register_copy + // [180] phi ultoa::buffer#11 = ultoa::buffer#14 [phi:ultoa::@4->ultoa::@1#0] -- register_copy + // [180] phi ultoa::started#2 = ultoa::started#4 [phi:ultoa::@4->ultoa::@1#1] -- register_copy + // [180] phi ultoa::value#2 = ultoa::value#6 [phi:ultoa::@4->ultoa::@1#2] -- register_copy + // [180] phi ultoa::digit#2 = ultoa::digit#1 [phi:ultoa::@4->ultoa::@1#3] -- register_copy jmp __b1 // ultoa::@5 __b5: - // [195] ultoa_append::buffer#0 = ultoa::buffer#11 - // [196] ultoa_append::value#0 = ultoa::value#2 - // [197] ultoa_append::sub#0 = ultoa::digit_value#0 - // [198] call ultoa_append - // [233] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] + // [193] ultoa_append::buffer#0 = ultoa::buffer#11 + // [194] ultoa_append::value#0 = ultoa::value#2 + // [195] ultoa_append::sub#0 = ultoa::digit_value#0 + // [196] call ultoa_append + // [231] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] ultoa_append_from___b5: jsr ultoa_append - // [199] ultoa_append::return#0 = ultoa_append::value#2 + // [197] ultoa_append::return#0 = ultoa_append::value#2 jmp __b6 // ultoa::@6 __b6: - // [200] ultoa::value#0 = ultoa_append::return#0 - // [201] ultoa::buffer#4 = ++ ultoa::buffer#11 -- pbuz1=_inc_pbuz1 + // [198] ultoa::value#0 = ultoa_append::return#0 + // [199] ultoa::buffer#4 = ++ ultoa::buffer#11 -- pbuz1=_inc_pbuz1 inc.z buffer bne !+ inc.z buffer+1 !: - // [193] phi from ultoa::@6 to ultoa::@4 [phi:ultoa::@6->ultoa::@4] + // [191] phi from ultoa::@6 to ultoa::@4 [phi:ultoa::@6->ultoa::@4] __b4_from___b6: - // [193] phi ultoa::buffer#14 = ultoa::buffer#4 [phi:ultoa::@6->ultoa::@4#0] -- register_copy - // [193] phi ultoa::started#4 = 1 [phi:ultoa::@6->ultoa::@4#1] -- vbuxx=vbuc1 + // [191] phi ultoa::buffer#14 = ultoa::buffer#4 [phi:ultoa::@6->ultoa::@4#0] -- register_copy + // [191] phi ultoa::started#4 = 1 [phi:ultoa::@6->ultoa::@4#1] -- vbuxx=vbuc1 ldx #1 - // [193] phi ultoa::value#6 = ultoa::value#0 [phi:ultoa::@6->ultoa::@4#2] -- register_copy + // [191] phi ultoa::value#6 = ultoa::value#0 [phi:ultoa::@6->ultoa::@4#2] -- register_copy jmp __b4 } // utoa_append @@ -6743,15 +6715,15 @@ utoa_append: { .label value = 2 .label sub = 8 .label return = 2 - // [203] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] + // [201] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] __b1_from_utoa_append: - // [203] phi utoa_append::digit#2 = 0 [phi:utoa_append->utoa_append::@1#0] -- vbuxx=vbuc1 + // [201] phi utoa_append::digit#2 = 0 [phi:utoa_append->utoa_append::@1#0] -- vbuxx=vbuc1 ldx #0 - // [203] phi utoa_append::value#2 = utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy + // [201] phi utoa_append::value#2 = utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy jmp __b1 // utoa_append::@1 __b1: - // [204] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 + // [202] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 lda.z sub+1 cmp.z value+1 bne !+ @@ -6763,20 +6735,20 @@ utoa_append: { jmp __b3 // utoa_append::@3 __b3: - // [205] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [203] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda DIGITS,x ldy #0 sta (buffer),y jmp __breturn // utoa_append::@return __breturn: - // [206] return + // [204] return rts // utoa_append::@2 __b2: - // [207] utoa_append::digit#1 = ++ utoa_append::digit#2 -- vbuxx=_inc_vbuxx + // [205] utoa_append::digit#1 = ++ utoa_append::digit#2 -- vbuxx=_inc_vbuxx inx - // [208] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 + // [206] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 lda.z value sec sbc.z sub @@ -6784,10 +6756,10 @@ utoa_append: { lda.z value+1 sbc.z sub+1 sta.z value+1 - // [203] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] + // [201] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] __b1_from___b2: - // [203] phi utoa_append::digit#2 = utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy - // [203] phi utoa_append::value#2 = utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy + // [201] phi utoa_append::digit#2 = utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy + // [201] phi utoa_append::value#2 = utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy jmp __b1 } // strlen @@ -6797,14 +6769,14 @@ strlen: { .label len = 8 .label str = $10 .label return = 8 - // [210] phi from strlen to strlen::@1 [phi:strlen->strlen::@1] + // [208] phi from strlen to strlen::@1 [phi:strlen->strlen::@1] __b1_from_strlen: - // [210] phi strlen::len#2 = 0 [phi:strlen->strlen::@1#0] -- vwuz1=vwuc1 + // [208] phi strlen::len#2 = 0 [phi:strlen->strlen::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z len lda #>0 sta.z len+1 - // [210] phi strlen::str#3 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:strlen->strlen::@1#1] -- pbuz1=pbuc1 + // [208] phi strlen::str#3 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:strlen->strlen::@1#1] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -6812,7 +6784,7 @@ strlen: { jmp __b1 // strlen::@1 __b1: - // [211] if(0!=*strlen::str#3) goto strlen::@2 -- 0_neq__deref_pbuz1_then_la1 + // [209] if(0!=*strlen::str#3) goto strlen::@2 -- 0_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y cmp #0 @@ -6820,24 +6792,24 @@ strlen: { jmp __breturn // strlen::@return __breturn: - // [212] return + // [210] return rts // strlen::@2 __b2: - // [213] strlen::len#1 = ++ strlen::len#2 -- vwuz1=_inc_vwuz1 + // [211] strlen::len#1 = ++ strlen::len#2 -- vwuz1=_inc_vwuz1 inc.z len bne !+ inc.z len+1 !: - // [214] strlen::str#0 = ++ strlen::str#3 -- pbuz1=_inc_pbuz1 + // [212] strlen::str#0 = ++ strlen::str#3 -- pbuz1=_inc_pbuz1 inc.z str bne !+ inc.z str+1 !: - // [210] phi from strlen::@2 to strlen::@1 [phi:strlen::@2->strlen::@1] + // [208] phi from strlen::@2 to strlen::@1 [phi:strlen::@2->strlen::@1] __b1_from___b2: - // [210] phi strlen::len#2 = strlen::len#1 [phi:strlen::@2->strlen::@1#0] -- register_copy - // [210] phi strlen::str#3 = strlen::str#0 [phi:strlen::@2->strlen::@1#1] -- register_copy + // [208] phi strlen::len#2 = strlen::len#1 [phi:strlen::@2->strlen::@1#0] -- register_copy + // [208] phi strlen::str#3 = strlen::str#0 [phi:strlen::@2->strlen::@1#1] -- register_copy jmp __b1 } // printf_padding @@ -6848,40 +6820,40 @@ printf_padding: { .label putc = 2 .label length = $13 .label pad = $16 - // [216] phi from printf_padding to printf_padding::@1 [phi:printf_padding->printf_padding::@1] + // [214] phi from printf_padding to printf_padding::@1 [phi:printf_padding->printf_padding::@1] __b1_from_printf_padding: - // [216] phi printf_padding::i#2 = 0 [phi:printf_padding->printf_padding::@1#0] -- vbuz1=vbuc1 + // [214] phi printf_padding::i#2 = 0 [phi:printf_padding->printf_padding::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i jmp __b1 // printf_padding::@1 __b1: - // [217] if(printf_padding::i#2printf_padding::@1] + // [214] phi from printf_padding::@3 to printf_padding::@1 [phi:printf_padding::@3->printf_padding::@1] __b1_from___b3: - // [216] phi printf_padding::i#2 = printf_padding::i#1 [phi:printf_padding::@3->printf_padding::@1#0] -- register_copy + // [214] phi printf_padding::i#2 = printf_padding::i#1 [phi:printf_padding::@3->printf_padding::@1#0] -- register_copy jmp __b1 // Outside Flow icall8: @@ -6893,9 +6865,9 @@ printf_padding: { strupr: { .label str = printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS .label src = $e - // [224] phi from strupr to strupr::@1 [phi:strupr->strupr::@1] + // [222] phi from strupr to strupr::@1 [phi:strupr->strupr::@1] __b1_from_strupr: - // [224] phi strupr::src#2 = strupr::str#0 [phi:strupr->strupr::@1#0] -- pbuz1=pbuc1 + // [222] phi strupr::src#2 = strupr::str#0 [phi:strupr->strupr::@1#0] -- pbuz1=pbuc1 lda #str @@ -6903,7 +6875,7 @@ strupr: { jmp __b1 // strupr::@1 __b1: - // [225] if(0!=*strupr::src#2) goto strupr::@2 -- 0_neq__deref_pbuz1_then_la1 + // [223] if(0!=*strupr::src#2) goto strupr::@2 -- 0_neq__deref_pbuz1_then_la1 ldy #0 lda (src),y cmp #0 @@ -6911,31 +6883,31 @@ strupr: { jmp __breturn // strupr::@return __breturn: - // [226] return + // [224] return rts // strupr::@2 __b2: - // [227] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 + // [225] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [228] call toupper + // [226] call toupper jsr toupper - // [229] toupper::return#3 = toupper::return#2 + // [227] toupper::return#3 = toupper::return#2 jmp __b3 // strupr::@3 __b3: - // [230] strupr::$0 = toupper::return#3 - // [231] *strupr::src#2 = strupr::$0 -- _deref_pbuz1=vbuaa + // [228] strupr::$0 = toupper::return#3 + // [229] *strupr::src#2 = strupr::$0 -- _deref_pbuz1=vbuaa ldy #0 sta (src),y - // [232] strupr::src#1 = ++ strupr::src#2 -- pbuz1=_inc_pbuz1 + // [230] strupr::src#1 = ++ strupr::src#2 -- pbuz1=_inc_pbuz1 inc.z src bne !+ inc.z src+1 !: - // [224] phi from strupr::@3 to strupr::@1 [phi:strupr::@3->strupr::@1] + // [222] phi from strupr::@3 to strupr::@1 [phi:strupr::@3->strupr::@1] __b1_from___b3: - // [224] phi strupr::src#2 = strupr::src#1 [phi:strupr::@3->strupr::@1#0] -- register_copy + // [222] phi strupr::src#2 = strupr::src#1 [phi:strupr::@3->strupr::@1#0] -- register_copy jmp __b1 } // ultoa_append @@ -6953,15 +6925,15 @@ ultoa_append: { .label value = 4 .label sub = $a .label return = 4 - // [234] phi from ultoa_append to ultoa_append::@1 [phi:ultoa_append->ultoa_append::@1] + // [232] phi from ultoa_append to ultoa_append::@1 [phi:ultoa_append->ultoa_append::@1] __b1_from_ultoa_append: - // [234] phi ultoa_append::digit#2 = 0 [phi:ultoa_append->ultoa_append::@1#0] -- vbuxx=vbuc1 + // [232] phi ultoa_append::digit#2 = 0 [phi:ultoa_append->ultoa_append::@1#0] -- vbuxx=vbuc1 ldx #0 - // [234] phi ultoa_append::value#2 = ultoa_append::value#0 [phi:ultoa_append->ultoa_append::@1#1] -- register_copy + // [232] phi ultoa_append::value#2 = ultoa_append::value#0 [phi:ultoa_append->ultoa_append::@1#1] -- register_copy jmp __b1 // ultoa_append::@1 __b1: - // [235] if(ultoa_append::value#2>=ultoa_append::sub#0) goto ultoa_append::@2 -- vduz1_ge_vduz2_then_la1 + // [233] if(ultoa_append::value#2>=ultoa_append::sub#0) goto ultoa_append::@2 -- vduz1_ge_vduz2_then_la1 lda.z value+3 cmp.z sub+3 bcc !+ @@ -6981,20 +6953,20 @@ ultoa_append: { jmp __b3 // ultoa_append::@3 __b3: - // [236] *ultoa_append::buffer#0 = DIGITS[ultoa_append::digit#2] -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [234] *ultoa_append::buffer#0 = DIGITS[ultoa_append::digit#2] -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda DIGITS,x ldy #0 sta (buffer),y jmp __breturn // ultoa_append::@return __breturn: - // [237] return + // [235] return rts // ultoa_append::@2 __b2: - // [238] ultoa_append::digit#1 = ++ ultoa_append::digit#2 -- vbuxx=_inc_vbuxx + // [236] ultoa_append::digit#1 = ++ ultoa_append::digit#2 -- vbuxx=_inc_vbuxx inx - // [239] ultoa_append::value#1 = ultoa_append::value#2 - ultoa_append::sub#0 -- vduz1=vduz1_minus_vduz2 + // [237] ultoa_append::value#1 = ultoa_append::value#2 - ultoa_append::sub#0 -- vduz1=vduz1_minus_vduz2 lda.z value sec sbc.z sub @@ -7008,10 +6980,10 @@ ultoa_append: { lda.z value+3 sbc.z sub+3 sta.z value+3 - // [234] phi from ultoa_append::@2 to ultoa_append::@1 [phi:ultoa_append::@2->ultoa_append::@1] + // [232] phi from ultoa_append::@2 to ultoa_append::@1 [phi:ultoa_append::@2->ultoa_append::@1] __b1_from___b2: - // [234] phi ultoa_append::digit#2 = ultoa_append::digit#1 [phi:ultoa_append::@2->ultoa_append::@1#0] -- register_copy - // [234] phi ultoa_append::value#2 = ultoa_append::value#1 [phi:ultoa_append::@2->ultoa_append::@1#1] -- register_copy + // [232] phi ultoa_append::digit#2 = ultoa_append::digit#1 [phi:ultoa_append::@2->ultoa_append::@1#0] -- register_copy + // [232] phi ultoa_append::value#2 = ultoa_append::value#1 [phi:ultoa_append::@2->ultoa_append::@1#1] -- register_copy jmp __b1 } // toupper @@ -7019,31 +6991,31 @@ ultoa_append: { // Returns uppercase equivalent to c, if such value exists, else c remains unchanged // __register(A) char toupper(__register(A) char ch) toupper: { - // [240] if(toupper::ch#0<'a') goto toupper::@return -- vbuaa_lt_vbuc1_then_la1 + // [238] if(toupper::ch#0<'a') goto toupper::@return -- vbuaa_lt_vbuc1_then_la1 cmp #'a' bcc __breturn_from_toupper jmp __b2 // toupper::@2 __b2: - // [241] if(toupper::ch#0<='z') goto toupper::@1 -- vbuaa_le_vbuc1_then_la1 + // [239] if(toupper::ch#0<='z') goto toupper::@1 -- vbuaa_le_vbuc1_then_la1 cmp #'z' bcc __b1 beq __b1 - // [243] phi from toupper toupper::@1 toupper::@2 to toupper::@return [phi:toupper/toupper::@1/toupper::@2->toupper::@return] + // [241] phi from toupper toupper::@1 toupper::@2 to toupper::@return [phi:toupper/toupper::@1/toupper::@2->toupper::@return] __breturn_from_toupper: __breturn_from___b1: __breturn_from___b2: - // [243] phi toupper::return#2 = toupper::ch#0 [phi:toupper/toupper::@1/toupper::@2->toupper::@return#0] -- register_copy + // [241] phi toupper::return#2 = toupper::ch#0 [phi:toupper/toupper::@1/toupper::@2->toupper::@return#0] -- register_copy jmp __breturn // toupper::@1 __b1: - // [242] toupper::return#0 = toupper::ch#0 + 'A'-'a' -- vbuaa=vbuaa_plus_vbuc1 + // [240] toupper::return#0 = toupper::ch#0 + 'A'-'a' -- vbuaa=vbuaa_plus_vbuc1 clc adc #'A'-'a' jmp __breturn_from___b1 // toupper::@return __breturn: - // [244] return + // [242] return rts } // File Data @@ -7063,6 +7035,12 @@ toupper: { BUF: .fill $14, 0 // Buffer used for stringified number being printed printf_buffer: .fill SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER, 0 + /// The capacity of the buffer (n passed to snprintf()) + /// Used to hold state while printing + __snprintf_capacity: .word 0 + // The number of chars that would have been filled when printing without capacity. Grows even after size>capacity. + /// Used to hold state while printing + __snprintf_size: .word 0 ASSEMBLER OPTIMIZATIONS Removing instruction jmp __init1 @@ -7160,10 +7138,6 @@ Removing instruction jmp __breturn Removing instruction jmp __b2 Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #>0 -Removing instruction lda #<0 -Removing instruction lda #>0 -Removing instruction lda #<0 -Removing instruction lda #>0 Removing instruction lda #>0 Removing instruction ldy #0 Removing instruction lda #'r' @@ -7382,9 +7356,9 @@ __constant unsigned int RADIX_HEXADECIMAL_VALUES[] = { $1000, $100, $10 } __constant unsigned int RADIX_OCTAL_VALUES[] = { $8000, $1000, $200, $40, 8 } __constant char SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c __constant unsigned int STACK_BASE = $103 -__loadstore char *__snprintf_buffer // zp[2]:30 9.022222222222222 -__loadstore volatile unsigned int __snprintf_capacity // zp[2]:32 6.48936170212766 -__loadstore volatile unsigned int __snprintf_size // zp[2]:28 11.021739130434781 +__loadstore char *__snprintf_buffer // zp[2]:28 9.022222222222222 +__loadstore volatile unsigned int __snprintf_capacity = 0 // mem[2] 6.446808510638299 +__loadstore volatile unsigned int __snprintf_size = 0 // mem[2] 10.978260869565217 void __start() void main() __constant char main::s[$e] = "hello world! " @@ -7654,9 +7628,9 @@ zp[1]:18 [ printf_padding::i#2 printf_padding::i#1 ] zp[2]:14 [ strupr::src#2 strupr::src#1 utoa::digit_values#8 printf_str::s#11 printf_str::s#12 printf_str::s#0 ] reg byte x [ ultoa_append::digit#2 ultoa_append::digit#1 ] reg byte a [ toupper::return#2 toupper::return#0 toupper::ch#0 ] -zp[2]:32 [ __snprintf_capacity ] -zp[2]:28 [ __snprintf_size ] -zp[2]:30 [ __snprintf_buffer ] +zp[2]:28 [ __snprintf_buffer ] +mem[2] [ __snprintf_size ] +mem[2] [ __snprintf_capacity ] reg byte a [ printf_str::c#1 ] reg byte a [ utoa::$4 ] reg byte x [ utoa::$11 ] @@ -7671,7 +7645,7 @@ mem[12] [ printf_buffer ] FINAL ASSEMBLER -Score: 19897 +Score: 19899 // File Comments // Tests sprintf function call rewriting @@ -7693,40 +7667,26 @@ Score: 19897 .const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1 .const STACK_BASE = $103 .const SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c - /// The capacity of the buffer (n passed to snprintf()) - /// Used to hold state while printing - .label __snprintf_capacity = $20 - // The number of chars that would have been filled when printing without capacity. Grows even after size>capacity. - /// Used to hold state while printing - .label __snprintf_size = $1c /// Current position in the buffer being filled ( initially *s passed to snprintf() /// Used to hold state while printing - .label __snprintf_buffer = $1e + .label __snprintf_buffer = $1c .label screen = $17 .segment Code // __start __start: { // __start::__init1 - // volatile size_t __snprintf_capacity - // [1] __snprintf_capacity = 0 -- vwuz1=vwuc1 - lda #<0 - sta.z __snprintf_capacity - sta.z __snprintf_capacity+1 - // volatile size_t __snprintf_size - // [2] __snprintf_size = 0 -- vwuz1=vwuc1 - sta.z __snprintf_size - sta.z __snprintf_size+1 // char * __snprintf_buffer - // [3] __snprintf_buffer = (char *) 0 -- pbuz1=pbuc1 + // [1] __snprintf_buffer = (char *) 0 -- pbuz1=pbuc1 + lda #<0 sta.z __snprintf_buffer sta.z __snprintf_buffer+1 - // [4] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // [2] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] // __start::@1 - // [5] call main - // [16] phi from __start::@1 to main [phi:__start::@1->main] + // [3] call main + // [14] phi from __start::@1 to main [phi:__start::@1->main] jsr main // __start::@return - // [6] return + // [4] return rts } // snputc @@ -7736,57 +7696,57 @@ __start: { // void snputc(__register(X) char c) snputc: { .const OFFSET_STACK_C = 0 - // [7] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) -- vbuxx=_stackidxbyte_vbuc1 + // [5] snputc::c#0 = stackidx(char,snputc::OFFSET_STACK_C) -- vbuxx=_stackidxbyte_vbuc1 tsx lda STACK_BASE+OFFSET_STACK_C,x tax // ++__snprintf_size; - // [8] __snprintf_size = ++ __snprintf_size -- vwuz1=_inc_vwuz1 - inc.z __snprintf_size + // [6] __snprintf_size = ++ __snprintf_size -- vwum1=_inc_vwum1 + inc __snprintf_size bne !+ - inc.z __snprintf_size+1 + inc __snprintf_size+1 !: // if(__snprintf_size > __snprintf_capacity) - // [9] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 -- vwuz1_le_vwuz2_then_la1 - lda.z __snprintf_size+1 - cmp.z __snprintf_capacity+1 + // [7] if(__snprintf_size<=__snprintf_capacity) goto snputc::@1 -- vwum1_le_vwum2_then_la1 + lda __snprintf_size+1 + cmp __snprintf_capacity+1 bne !+ - lda.z __snprintf_size - cmp.z __snprintf_capacity + lda __snprintf_size + cmp __snprintf_capacity beq __b1 !: bcc __b1 // snputc::@return // } - // [10] return + // [8] return rts // snputc::@1 __b1: // if(__snprintf_size==__snprintf_capacity) - // [11] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 -- vwuz1_neq_vwuz2_then_la1 - lda.z __snprintf_size+1 - cmp.z __snprintf_capacity+1 + // [9] if(__snprintf_size!=__snprintf_capacity) goto snputc::@3 -- vwum1_neq_vwum2_then_la1 + lda __snprintf_size+1 + cmp __snprintf_capacity+1 bne __b2 - lda.z __snprintf_size - cmp.z __snprintf_capacity + lda __snprintf_size + cmp __snprintf_capacity bne __b2 - // [13] phi from snputc::@1 to snputc::@2 [phi:snputc::@1->snputc::@2] - // [13] phi snputc::c#2 = 0 [phi:snputc::@1->snputc::@2#0] -- vbuxx=vbuc1 + // [11] phi from snputc::@1 to snputc::@2 [phi:snputc::@1->snputc::@2] + // [11] phi snputc::c#2 = 0 [phi:snputc::@1->snputc::@2#0] -- vbuxx=vbuc1 ldx #0 - // [12] phi from snputc::@1 to snputc::@3 [phi:snputc::@1->snputc::@3] + // [10] phi from snputc::@1 to snputc::@3 [phi:snputc::@1->snputc::@3] // snputc::@3 - // [13] phi from snputc::@3 to snputc::@2 [phi:snputc::@3->snputc::@2] - // [13] phi snputc::c#2 = snputc::c#0 [phi:snputc::@3->snputc::@2#0] -- register_copy + // [11] phi from snputc::@3 to snputc::@2 [phi:snputc::@3->snputc::@2] + // [11] phi snputc::c#2 = snputc::c#0 [phi:snputc::@3->snputc::@2#0] -- register_copy // snputc::@2 __b2: // *(__snprintf_buffer++) = c - // [14] *__snprintf_buffer = snputc::c#2 -- _deref_pbuz1=vbuxx + // [12] *__snprintf_buffer = snputc::c#2 -- _deref_pbuz1=vbuxx // Append char txa ldy #0 sta (__snprintf_buffer),y // *(__snprintf_buffer++) = c; - // [15] __snprintf_buffer = ++ __snprintf_buffer -- pbuz1=_inc_pbuz1 + // [13] __snprintf_buffer = ++ __snprintf_buffer -- pbuz1=_inc_pbuz1 inc.z __snprintf_buffer bne !+ inc.z __snprintf_buffer+1 @@ -7796,19 +7756,19 @@ snputc: { // main main: { // sprintf(BUF, "hello world! ") - // [17] call snprintf_init + // [15] call snprintf_init jsr snprintf_init - // [18] phi from main to main::@1 [phi:main->main::@1] + // [16] phi from main to main::@1 [phi:main->main::@1] // main::@1 // sprintf(BUF, "hello world! ") - // [19] call printf_str - // [71] phi from main::@1 to printf_str [phi:main::@1->printf_str] - // [71] phi printf_str::putc#12 = &snputc [phi:main::@1->printf_str#0] -- pprz1=pprc1 + // [17] call printf_str + // [69] phi from main::@1 to printf_str [phi:main::@1->printf_str] + // [69] phi printf_str::putc#12 = &snputc [phi:main::@1->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 + // [69] phi printf_str::s#12 = main::s [phi:main::@1->printf_str#1] -- pbuz1=pbuc1 lda #s @@ -7816,66 +7776,66 @@ main: { jsr printf_str // main::@2 // sprintf(BUF, "hello world! ") - // [20] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 + // [18] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 lda #0 pha - // [21] callexecute snputc -- call_vprc1 + // [19] callexecute snputc -- call_vprc1 jsr snputc // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla // print(BUF) - // [23] call print - // [80] phi from main::@2 to print [phi:main::@2->print] - // [80] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- pbuz1=pbuc1 + // [21] call print + // [78] phi from main::@2 to print [phi:main::@2->print] + // [78] phi screen#25 = (char *) 1024 [phi:main::@2->print#0] -- pbuz1=pbuc1 lda #<$400 sta.z screen lda #>$400 sta.z screen+1 jsr print - // [24] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + // [22] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 // sprintf(BUF, "hello %s%c ", "world", '!') - // [25] call snprintf_init + // [23] call snprintf_init jsr snprintf_init - // [26] phi from main::@3 to main::@4 [phi:main::@3->main::@4] + // [24] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // sprintf(BUF, "hello %s%c ", "world", '!') - // [27] call printf_str - // [71] phi from main::@4 to printf_str [phi:main::@4->printf_str] - // [71] phi printf_str::putc#12 = &snputc [phi:main::@4->printf_str#0] -- pprz1=pprc1 + // [25] call printf_str + // [69] phi from main::@4 to printf_str [phi:main::@4->printf_str] + // [69] phi printf_str::putc#12 = &snputc [phi:main::@4->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- pbuz1=pbuc1 + // [69] phi printf_str::s#12 = main::s1 [phi:main::@4->printf_str#1] -- pbuz1=pbuc1 lda #s1 sta.z printf_str.s+1 jsr printf_str - // [28] phi from main::@4 to main::@5 [phi:main::@4->main::@5] + // [26] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 // sprintf(BUF, "hello %s%c ", "world", '!') - // [29] call printf_string - // [87] phi from main::@5 to printf_string [phi:main::@5->printf_string] + // [27] call printf_string + // [85] phi from main::@5 to printf_string [phi:main::@5->printf_string] jsr printf_string // main::@6 // sprintf(BUF, "hello %s%c ", "world", '!') - // [30] stackpush(char) = '!' -- _stackpushbyte_=vbuc1 + // [28] stackpush(char) = '!' -- _stackpushbyte_=vbuc1 lda #'!' pha - // [31] callexecute snputc -- call_vprc1 + // [29] callexecute snputc -- call_vprc1 jsr snputc // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla - // [33] call printf_str - // [71] phi from main::@6 to printf_str [phi:main::@6->printf_str] - // [71] phi printf_str::putc#12 = &snputc [phi:main::@6->printf_str#0] -- pprz1=pprc1 + // [31] call printf_str + // [69] phi from main::@6 to printf_str [phi:main::@6->printf_str] + // [69] phi printf_str::putc#12 = &snputc [phi:main::@6->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 + // [69] phi printf_str::s#12 = main::s2 [phi:main::@6->printf_str#1] -- pbuz1=pbuc1 lda #s2 @@ -7883,77 +7843,77 @@ main: { jsr printf_str // main::@7 // sprintf(BUF, "hello %s%c ", "world", '!') - // [34] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 + // [32] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 lda #0 pha - // [35] callexecute snputc -- call_vprc1 + // [33] callexecute snputc -- call_vprc1 jsr snputc // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla // print(BUF) - // [37] call print - // [80] phi from main::@7 to print [phi:main::@7->print] - // [80] phi screen#25 = screen#1 [phi:main::@7->print#0] -- register_copy + // [35] call print + // [78] phi from main::@7 to print [phi:main::@7->print] + // [78] phi screen#25 = screen#1 [phi:main::@7->print#0] -- register_copy jsr print - // [38] phi from main::@7 to main::@8 [phi:main::@7->main::@8] + // [36] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 // sprintf(BUF, "hello %d+%x! ", 3,11) - // [39] call snprintf_init + // [37] call snprintf_init jsr snprintf_init - // [40] phi from main::@8 to main::@9 [phi:main::@8->main::@9] + // [38] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 // sprintf(BUF, "hello %d+%x! ", 3,11) - // [41] call printf_str - // [71] phi from main::@9 to printf_str [phi:main::@9->printf_str] - // [71] phi printf_str::putc#12 = &snputc [phi:main::@9->printf_str#0] -- pprz1=pprc1 + // [39] call printf_str + // [69] phi from main::@9 to printf_str [phi:main::@9->printf_str] + // [69] phi printf_str::putc#12 = &snputc [phi:main::@9->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 + // [69] phi printf_str::s#12 = main::s1 [phi:main::@9->printf_str#1] -- pbuz1=pbuc1 lda #s1 sta.z printf_str.s+1 jsr printf_str - // [42] phi from main::@9 to main::@10 [phi:main::@9->main::@10] + // [40] phi from main::@9 to main::@10 [phi:main::@9->main::@10] // main::@10 // sprintf(BUF, "hello %d+%x! ", 3,11) - // [43] call printf_sint + // [41] call printf_sint jsr printf_sint - // [44] phi from main::@10 to main::@11 [phi:main::@10->main::@11] + // [42] phi from main::@10 to main::@11 [phi:main::@10->main::@11] // main::@11 // sprintf(BUF, "hello %d+%x! ", 3,11) - // [45] call printf_str - // [71] phi from main::@11 to printf_str [phi:main::@11->printf_str] - // [71] phi printf_str::putc#12 = &snputc [phi:main::@11->printf_str#0] -- pprz1=pprc1 + // [43] call printf_str + // [69] phi from main::@11 to printf_str [phi:main::@11->printf_str] + // [69] phi printf_str::putc#12 = &snputc [phi:main::@11->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 + // [69] phi printf_str::s#12 = main::s4 [phi:main::@11->printf_str#1] -- pbuz1=pbuc1 lda #s4 sta.z printf_str.s+1 jsr printf_str - // [46] phi from main::@11 to main::@12 [phi:main::@11->main::@12] + // [44] phi from main::@11 to main::@12 [phi:main::@11->main::@12] // main::@12 // sprintf(BUF, "hello %d+%x! ", 3,11) - // [47] call printf_uint - // [97] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] + // [45] call printf_uint + // [95] phi from main::@12 to printf_uint [phi:main::@12->printf_uint] jsr printf_uint - // [48] phi from main::@12 to main::@13 [phi:main::@12->main::@13] + // [46] phi from main::@12 to main::@13 [phi:main::@12->main::@13] // main::@13 // sprintf(BUF, "hello %d+%x! ", 3,11) - // [49] call printf_str - // [71] phi from main::@13 to printf_str [phi:main::@13->printf_str] - // [71] phi printf_str::putc#12 = &snputc [phi:main::@13->printf_str#0] -- pprz1=pprc1 + // [47] call printf_str + // [69] phi from main::@13 to printf_str [phi:main::@13->printf_str] + // [69] phi printf_str::putc#12 = &snputc [phi:main::@13->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 + // [69] phi printf_str::s#12 = main::s5 [phi:main::@13->printf_str#1] -- pbuz1=pbuc1 lda #s5 @@ -7961,55 +7921,55 @@ main: { jsr printf_str // main::@14 // sprintf(BUF, "hello %d+%x! ", 3,11) - // [50] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 + // [48] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 lda #0 pha - // [51] callexecute snputc -- call_vprc1 + // [49] callexecute snputc -- call_vprc1 jsr snputc // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla // print(BUF) - // [53] call print - // [80] phi from main::@14 to print [phi:main::@14->print] - // [80] phi screen#25 = screen#1 [phi:main::@14->print#0] -- register_copy + // [51] call print + // [78] phi from main::@14 to print [phi:main::@14->print] + // [78] phi screen#25 = screen#1 [phi:main::@14->print#0] -- register_copy jsr print - // [54] phi from main::@14 to main::@15 [phi:main::@14->main::@15] + // [52] phi from main::@14 to main::@15 [phi:main::@14->main::@15] // main::@15 // sprintf(BUF, "hi %ld! ", 22222222l) - // [55] call snprintf_init + // [53] call snprintf_init jsr snprintf_init - // [56] phi from main::@15 to main::@16 [phi:main::@15->main::@16] + // [54] phi from main::@15 to main::@16 [phi:main::@15->main::@16] // main::@16 // sprintf(BUF, "hi %ld! ", 22222222l) - // [57] call printf_str - // [71] phi from main::@16 to printf_str [phi:main::@16->printf_str] - // [71] phi printf_str::putc#12 = &snputc [phi:main::@16->printf_str#0] -- pprz1=pprc1 + // [55] call printf_str + // [69] phi from main::@16 to printf_str [phi:main::@16->printf_str] + // [69] phi printf_str::putc#12 = &snputc [phi:main::@16->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 + // [69] phi printf_str::s#12 = main::s6 [phi:main::@16->printf_str#1] -- pbuz1=pbuc1 lda #s6 sta.z printf_str.s+1 jsr printf_str - // [58] phi from main::@16 to main::@17 [phi:main::@16->main::@17] + // [56] phi from main::@16 to main::@17 [phi:main::@16->main::@17] // main::@17 // sprintf(BUF, "hi %ld! ", 22222222l) - // [59] call printf_slong + // [57] call printf_slong jsr printf_slong - // [60] phi from main::@17 to main::@18 [phi:main::@17->main::@18] + // [58] phi from main::@17 to main::@18 [phi:main::@17->main::@18] // main::@18 // sprintf(BUF, "hi %ld! ", 22222222l) - // [61] call printf_str - // [71] phi from main::@18 to printf_str [phi:main::@18->printf_str] - // [71] phi printf_str::putc#12 = &snputc [phi:main::@18->printf_str#0] -- pprz1=pprc1 + // [59] call printf_str + // [69] phi from main::@18 to printf_str [phi:main::@18->printf_str] + // [69] phi printf_str::putc#12 = &snputc [phi:main::@18->printf_str#0] -- pprz1=pprc1 lda #snputc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- pbuz1=pbuc1 + // [69] phi printf_str::s#12 = main::s5 [phi:main::@18->printf_str#1] -- pbuz1=pbuc1 lda #s5 @@ -8017,21 +7977,21 @@ main: { jsr printf_str // main::@19 // sprintf(BUF, "hi %ld! ", 22222222l) - // [62] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 + // [60] stackpush(char) = 0 -- _stackpushbyte_=vbuc1 lda #0 pha - // [63] callexecute snputc -- call_vprc1 + // [61] callexecute snputc -- call_vprc1 jsr snputc // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla // print(BUF) - // [65] call print - // [80] phi from main::@19 to print [phi:main::@19->print] - // [80] phi screen#25 = screen#1 [phi:main::@19->print#0] -- register_copy + // [63] call print + // [78] phi from main::@19 to print [phi:main::@19->print] + // [78] phi screen#25 = screen#1 [phi:main::@19->print#0] -- register_copy jsr print // main::@return // } - // [66] return + // [64] return rts .segment Data s: .text "hello world! " @@ -8055,25 +8015,25 @@ main: { // void snprintf_init(char *s, unsigned int n) snprintf_init: { // __snprintf_capacity = n - // [67] __snprintf_capacity = $ffff -- vwuz1=vwuc1 + // [65] __snprintf_capacity = $ffff -- vwum1=vwuc1 lda #<$ffff - sta.z __snprintf_capacity + sta __snprintf_capacity lda #>$ffff - sta.z __snprintf_capacity+1 + sta __snprintf_capacity+1 // __snprintf_size = 0 - // [68] __snprintf_size = 0 -- vwuz1=vbuc1 + // [66] __snprintf_size = 0 -- vwum1=vbuc1 lda #<0 - sta.z __snprintf_size - sta.z __snprintf_size+1 + sta __snprintf_size + sta __snprintf_size+1 // __snprintf_buffer = s - // [69] __snprintf_buffer = BUF -- pbuz1=pbuc1 + // [67] __snprintf_buffer = BUF -- pbuz1=pbuc1 lda #BUF sta.z __snprintf_buffer+1 // snprintf_init::@return // } - // [70] return + // [68] return rts } // printf_str @@ -8082,32 +8042,32 @@ snprintf_init: { printf_str: { .label s = $e .label putc = 2 - // [72] phi from printf_str printf_str::@2 to printf_str::@1 [phi:printf_str/printf_str::@2->printf_str::@1] - // [72] phi printf_str::s#11 = printf_str::s#12 [phi:printf_str/printf_str::@2->printf_str::@1#0] -- register_copy + // [70] phi from printf_str printf_str::@2 to printf_str::@1 [phi:printf_str/printf_str::@2->printf_str::@1] + // [70] phi printf_str::s#11 = printf_str::s#12 [phi:printf_str/printf_str::@2->printf_str::@1#0] -- register_copy // printf_str::@1 __b1: // while(c=*s++) - // [73] printf_str::c#1 = *printf_str::s#11 -- vbuaa=_deref_pbuz1 + // [71] printf_str::c#1 = *printf_str::s#11 -- vbuaa=_deref_pbuz1 ldy #0 lda (s),y - // [74] printf_str::s#0 = ++ printf_str::s#11 -- pbuz1=_inc_pbuz1 + // [72] printf_str::s#0 = ++ printf_str::s#11 -- pbuz1=_inc_pbuz1 inc.z s bne !+ inc.z s+1 !: - // [75] if(0!=printf_str::c#1) goto printf_str::@2 -- 0_neq_vbuaa_then_la1 + // [73] if(0!=printf_str::c#1) goto printf_str::@2 -- 0_neq_vbuaa_then_la1 cmp #0 bne __b2 // printf_str::@return // } - // [76] return + // [74] return rts // printf_str::@2 __b2: // putc(c) - // [77] stackpush(char) = printf_str::c#1 -- _stackpushbyte_=vbuaa + // [75] stackpush(char) = printf_str::c#1 -- _stackpushbyte_=vbuaa pha - // [78] callexecute *printf_str::putc#12 -- call__deref_pprz1 + // [76] callexecute *printf_str::putc#12 -- call__deref_pprz1 jsr icall6 // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla @@ -8120,9 +8080,9 @@ printf_str: { // void print(__zp(2) char *msg) print: { .label msg = 2 - // [81] phi from print to print::@1 [phi:print->print::@1] - // [81] phi screen#1 = screen#25 [phi:print->print::@1#0] -- register_copy - // [81] phi print::msg#5 = BUF [phi:print->print::@1#1] -- pbuz1=pbuc1 + // [79] phi from print to print::@1 [phi:print->print::@1] + // [79] phi screen#1 = screen#25 [phi:print->print::@1#0] -- register_copy + // [79] phi print::msg#5 = BUF [phi:print->print::@1#1] -- pbuz1=pbuc1 lda #BUF @@ -8130,36 +8090,36 @@ print: { // print::@1 __b1: // while(*msg) - // [82] if(0!=*print::msg#5) goto print::@2 -- 0_neq__deref_pbuz1_then_la1 + // [80] if(0!=*print::msg#5) goto print::@2 -- 0_neq__deref_pbuz1_then_la1 ldy #0 lda (msg),y cmp #0 bne __b2 // print::@return // } - // [83] return + // [81] return rts // print::@2 __b2: // *(screen++) = *(msg++) - // [84] *screen#1 = *print::msg#5 -- _deref_pbuz1=_deref_pbuz2 + // [82] *screen#1 = *print::msg#5 -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (msg),y sta (screen),y // *(screen++) = *(msg++); - // [85] screen#0 = ++ screen#1 -- pbuz1=_inc_pbuz1 + // [83] screen#0 = ++ screen#1 -- pbuz1=_inc_pbuz1 inc.z screen bne !+ inc.z screen+1 !: - // [86] print::msg#0 = ++ print::msg#5 -- pbuz1=_inc_pbuz1 + // [84] print::msg#0 = ++ print::msg#5 -- pbuz1=_inc_pbuz1 inc.z msg bne !+ inc.z msg+1 !: - // [81] phi from print::@2 to print::@1 [phi:print::@2->print::@1] - // [81] phi screen#1 = screen#0 [phi:print::@2->print::@1#0] -- register_copy - // [81] phi print::msg#5 = print::msg#0 [phi:print::@2->print::@1#1] -- register_copy + // [79] phi from print::@2 to print::@1 [phi:print::@2->print::@1] + // [79] phi screen#1 = screen#0 [phi:print::@2->print::@1#0] -- register_copy + // [79] phi print::msg#5 = print::msg#0 [phi:print::@2->print::@1#1] -- register_copy jmp __b1 } // printf_string @@ -8168,17 +8128,17 @@ print: { // void printf_string(void (*putc)(char), char *str, char format_min_length, char format_justify_left) printf_string: { .label putc = snputc - // [88] phi from printf_string to printf_string::@1 [phi:printf_string->printf_string::@1] + // [86] phi from printf_string to printf_string::@1 [phi:printf_string->printf_string::@1] // printf_string::@1 // printf_str(putc, str) - // [89] call printf_str - // [71] phi from printf_string::@1 to printf_str [phi:printf_string::@1->printf_str] - // [71] phi printf_str::putc#12 = printf_string::putc#0 [phi:printf_string::@1->printf_str#0] -- pprz1=pprc1 + // [87] call printf_str + // [69] phi from printf_string::@1 to printf_str [phi:printf_string::@1->printf_str] + // [69] phi printf_str::putc#12 = printf_string::putc#0 [phi:printf_string::@1->printf_str#0] -- pprz1=pprc1 lda #putc sta.z printf_str.putc+1 - // [71] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- pbuz1=pbuc1 + // [69] phi printf_str::s#12 = main::str [phi:printf_string::@1->printf_str#1] -- pbuz1=pbuc1 lda #main.str @@ -8186,7 +8146,7 @@ printf_string: { jsr printf_str // printf_string::@return // } - // [90] return + // [88] return rts } // printf_sint @@ -8202,52 +8162,52 @@ printf_sint: { .const uvalue = value .label putc = snputc // printf_buffer.sign = 0 - // [91] *((char *)&printf_buffer) = 0 -- _deref_pbuc1=vbuc2 + // [89] *((char *)&printf_buffer) = 0 -- _deref_pbuc1=vbuc2 // Handle any sign lda #0 sta printf_buffer - // [92] phi from printf_sint to printf_sint::@1 [phi:printf_sint->printf_sint::@1] + // [90] phi from printf_sint to printf_sint::@1 [phi:printf_sint->printf_sint::@1] // printf_sint::@1 // utoa(uvalue, printf_buffer.digits, format.radix) - // [93] call utoa - // [109] phi from printf_sint::@1 to utoa [phi:printf_sint::@1->utoa] - // [109] phi utoa::value#10 = printf_sint::uvalue#0 [phi:printf_sint::@1->utoa#0] -- vwuz1=vwuc1 + // [91] call utoa + // [107] phi from printf_sint::@1 to utoa [phi:printf_sint::@1->utoa] + // [107] phi utoa::value#10 = printf_sint::uvalue#0 [phi:printf_sint::@1->utoa#0] -- vwuz1=vwuc1 lda #uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@1->utoa#1] -- vbuxx=vbuc1 + // [107] phi utoa::radix#2 = DECIMAL [phi:printf_sint::@1->utoa#1] -- vbuxx=vbuc1 ldx #DECIMAL jsr utoa // printf_sint::@2 // printf_number_buffer(putc, printf_buffer, format) - // [94] printf_number_buffer::buffer_sign#1 = *((char *)&printf_buffer) -- vbuz1=_deref_pbuc1 + // [92] printf_number_buffer::buffer_sign#1 = *((char *)&printf_buffer) -- vbuz1=_deref_pbuc1 lda printf_buffer sta.z printf_number_buffer.buffer_sign - // [95] call printf_number_buffer + // [93] call printf_number_buffer // Print using format - // [140] phi from printf_sint::@2 to printf_number_buffer [phi:printf_sint::@2->printf_number_buffer] - // [140] phi printf_number_buffer::format_upper_case#10 = printf_sint::format_upper_case#0 [phi:printf_sint::@2->printf_number_buffer#0] -- vbuz1=vbuc1 + // [138] phi from printf_sint::@2 to printf_number_buffer [phi:printf_sint::@2->printf_number_buffer] + // [138] phi printf_number_buffer::format_upper_case#10 = printf_sint::format_upper_case#0 [phi:printf_sint::@2->printf_number_buffer#0] -- vbuz1=vbuc1 lda #format_upper_case sta.z printf_number_buffer.format_upper_case - // [140] phi printf_number_buffer::putc#10 = printf_sint::putc#0 [phi:printf_sint::@2->printf_number_buffer#1] -- pprz1=pprc1 + // [138] phi printf_number_buffer::putc#10 = printf_sint::putc#0 [phi:printf_sint::@2->printf_number_buffer#1] -- pprz1=pprc1 lda #putc sta.z printf_number_buffer.putc+1 - // [140] phi printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#1 [phi:printf_sint::@2->printf_number_buffer#2] -- register_copy - // [140] phi printf_number_buffer::format_zero_padding#10 = printf_sint::format_zero_padding#0 [phi:printf_sint::@2->printf_number_buffer#3] -- vbuz1=vbuc1 + // [138] phi printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#1 [phi:printf_sint::@2->printf_number_buffer#2] -- register_copy + // [138] phi printf_number_buffer::format_zero_padding#10 = printf_sint::format_zero_padding#0 [phi:printf_sint::@2->printf_number_buffer#3] -- vbuz1=vbuc1 lda #format_zero_padding sta.z printf_number_buffer.format_zero_padding - // [140] phi printf_number_buffer::format_justify_left#10 = printf_sint::format_justify_left#0 [phi:printf_sint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 + // [138] phi printf_number_buffer::format_justify_left#10 = printf_sint::format_justify_left#0 [phi:printf_sint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_sint::format_min_length#0 [phi:printf_sint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [138] phi printf_number_buffer::format_min_length#3 = printf_sint::format_min_length#0 [phi:printf_sint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer // printf_sint::@return // } - // [96] return + // [94] return rts } // printf_uint @@ -8262,51 +8222,51 @@ printf_uint: { .label putc = snputc // printf_uint::@1 // printf_buffer.sign = format.sign_always?'+':0 - // [98] *((char *)&printf_buffer) = 0 -- _deref_pbuc1=vbuc2 + // [96] *((char *)&printf_buffer) = 0 -- _deref_pbuc1=vbuc2 // Handle any sign lda #0 sta printf_buffer // utoa(uvalue, printf_buffer.digits, format.radix) - // [99] call utoa + // [97] call utoa // Format number into buffer - // [109] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] - // [109] phi utoa::value#10 = printf_uint::uvalue#0 [phi:printf_uint::@1->utoa#0] -- vwuz1=vwuc1 + // [107] phi from printf_uint::@1 to utoa [phi:printf_uint::@1->utoa] + // [107] phi utoa::value#10 = printf_uint::uvalue#0 [phi:printf_uint::@1->utoa#0] -- vwuz1=vwuc1 lda #uvalue sta.z utoa.value+1 - // [109] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- vbuxx=vbuc1 + // [107] phi utoa::radix#2 = HEXADECIMAL [phi:printf_uint::@1->utoa#1] -- vbuxx=vbuc1 ldx #HEXADECIMAL jsr utoa // printf_uint::@2 // printf_number_buffer(putc, printf_buffer, format) - // [100] printf_number_buffer::buffer_sign#2 = *((char *)&printf_buffer) -- vbuz1=_deref_pbuc1 + // [98] printf_number_buffer::buffer_sign#2 = *((char *)&printf_buffer) -- vbuz1=_deref_pbuc1 lda printf_buffer sta.z printf_number_buffer.buffer_sign - // [101] call printf_number_buffer + // [99] call printf_number_buffer // Print using format - // [140] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] - // [140] phi printf_number_buffer::format_upper_case#10 = printf_uint::format_upper_case#0 [phi:printf_uint::@2->printf_number_buffer#0] -- vbuz1=vbuc1 + // [138] phi from printf_uint::@2 to printf_number_buffer [phi:printf_uint::@2->printf_number_buffer] + // [138] phi printf_number_buffer::format_upper_case#10 = printf_uint::format_upper_case#0 [phi:printf_uint::@2->printf_number_buffer#0] -- vbuz1=vbuc1 lda #format_upper_case sta.z printf_number_buffer.format_upper_case - // [140] phi printf_number_buffer::putc#10 = printf_uint::putc#0 [phi:printf_uint::@2->printf_number_buffer#1] -- pprz1=pprc1 + // [138] phi printf_number_buffer::putc#10 = printf_uint::putc#0 [phi:printf_uint::@2->printf_number_buffer#1] -- pprz1=pprc1 lda #putc sta.z printf_number_buffer.putc+1 - // [140] phi printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 [phi:printf_uint::@2->printf_number_buffer#2] -- register_copy - // [140] phi printf_number_buffer::format_zero_padding#10 = printf_uint::format_zero_padding#0 [phi:printf_uint::@2->printf_number_buffer#3] -- vbuz1=vbuc1 + // [138] phi printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#2 [phi:printf_uint::@2->printf_number_buffer#2] -- register_copy + // [138] phi printf_number_buffer::format_zero_padding#10 = printf_uint::format_zero_padding#0 [phi:printf_uint::@2->printf_number_buffer#3] -- vbuz1=vbuc1 lda #format_zero_padding sta.z printf_number_buffer.format_zero_padding - // [140] phi printf_number_buffer::format_justify_left#10 = printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 + // [138] phi printf_number_buffer::format_justify_left#10 = printf_uint::format_justify_left#0 [phi:printf_uint::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [138] phi printf_number_buffer::format_min_length#3 = printf_uint::format_min_length#0 [phi:printf_uint::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer // printf_uint::@return // } - // [102] return + // [100] return rts } // printf_slong @@ -8322,45 +8282,45 @@ printf_slong: { // Format number into buffer .label uvalue = value // printf_buffer.sign = 0 - // [103] *((char *)&printf_buffer) = 0 -- _deref_pbuc1=vbuc2 + // [101] *((char *)&printf_buffer) = 0 -- _deref_pbuc1=vbuc2 // Handle any sign lda #0 sta printf_buffer - // [104] phi from printf_slong to printf_slong::@1 [phi:printf_slong->printf_slong::@1] + // [102] phi from printf_slong to printf_slong::@1 [phi:printf_slong->printf_slong::@1] // printf_slong::@1 // ultoa(uvalue, printf_buffer.digits, format.radix) - // [105] call ultoa - // [181] phi from printf_slong::@1 to ultoa [phi:printf_slong::@1->ultoa] + // [103] call ultoa + // [179] phi from printf_slong::@1 to ultoa [phi:printf_slong::@1->ultoa] jsr ultoa // printf_slong::@2 // printf_number_buffer(putc, printf_buffer, format) - // [106] printf_number_buffer::buffer_sign#0 = *((char *)&printf_buffer) -- vbuz1=_deref_pbuc1 + // [104] printf_number_buffer::buffer_sign#0 = *((char *)&printf_buffer) -- vbuz1=_deref_pbuc1 lda printf_buffer sta.z printf_number_buffer.buffer_sign - // [107] call printf_number_buffer + // [105] call printf_number_buffer // Print using format - // [140] phi from printf_slong::@2 to printf_number_buffer [phi:printf_slong::@2->printf_number_buffer] - // [140] phi printf_number_buffer::format_upper_case#10 = printf_slong::format_upper_case#0 [phi:printf_slong::@2->printf_number_buffer#0] -- vbuz1=vbuc1 + // [138] phi from printf_slong::@2 to printf_number_buffer [phi:printf_slong::@2->printf_number_buffer] + // [138] phi printf_number_buffer::format_upper_case#10 = printf_slong::format_upper_case#0 [phi:printf_slong::@2->printf_number_buffer#0] -- vbuz1=vbuc1 lda #format_upper_case sta.z printf_number_buffer.format_upper_case - // [140] phi printf_number_buffer::putc#10 = printf_slong::putc#0 [phi:printf_slong::@2->printf_number_buffer#1] -- pprz1=pprc1 + // [138] phi printf_number_buffer::putc#10 = printf_slong::putc#0 [phi:printf_slong::@2->printf_number_buffer#1] -- pprz1=pprc1 lda #putc sta.z printf_number_buffer.putc+1 - // [140] phi printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#0 [phi:printf_slong::@2->printf_number_buffer#2] -- register_copy - // [140] phi printf_number_buffer::format_zero_padding#10 = printf_slong::format_zero_padding#0 [phi:printf_slong::@2->printf_number_buffer#3] -- vbuz1=vbuc1 + // [138] phi printf_number_buffer::buffer_sign#10 = printf_number_buffer::buffer_sign#0 [phi:printf_slong::@2->printf_number_buffer#2] -- register_copy + // [138] phi printf_number_buffer::format_zero_padding#10 = printf_slong::format_zero_padding#0 [phi:printf_slong::@2->printf_number_buffer#3] -- vbuz1=vbuc1 lda #format_zero_padding sta.z printf_number_buffer.format_zero_padding - // [140] phi printf_number_buffer::format_justify_left#10 = printf_slong::format_justify_left#0 [phi:printf_slong::@2->printf_number_buffer#4] -- vbuz1=vbuc1 + // [138] phi printf_number_buffer::format_justify_left#10 = printf_slong::format_justify_left#0 [phi:printf_slong::@2->printf_number_buffer#4] -- vbuz1=vbuc1 lda #format_justify_left sta.z printf_number_buffer.format_justify_left - // [140] phi printf_number_buffer::format_min_length#3 = printf_slong::format_min_length#0 [phi:printf_slong::@2->printf_number_buffer#5] -- vbuxx=vbuc1 + // [138] phi printf_number_buffer::format_min_length#3 = printf_slong::format_min_length#0 [phi:printf_slong::@2->printf_number_buffer#5] -- vbuxx=vbuc1 ldx #format_min_length jsr printf_number_buffer // printf_slong::@return // } - // [108] return + // [106] return rts } // utoa @@ -8378,130 +8338,130 @@ utoa: { .label max_digits = $1a .label digit_values = $e // if(radix==DECIMAL) - // [110] if(utoa::radix#2==DECIMAL) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 + // [108] if(utoa::radix#2==DECIMAL) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 cpx #DECIMAL beq __b2 // utoa::@2 // if(radix==HEXADECIMAL) - // [111] if(utoa::radix#2==HEXADECIMAL) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 + // [109] if(utoa::radix#2==HEXADECIMAL) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 cpx #HEXADECIMAL beq __b3 // utoa::@3 // if(radix==OCTAL) - // [112] if(utoa::radix#2==OCTAL) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 + // [110] if(utoa::radix#2==OCTAL) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 cpx #OCTAL beq __b4 // utoa::@4 // if(radix==BINARY) - // [113] if(utoa::radix#2==BINARY) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 + // [111] if(utoa::radix#2==BINARY) goto utoa::@1 -- vbuxx_eq_vbuc1_then_la1 cpx #BINARY beq __b5 // utoa::@5 // *buffer++ = 'e' - // [114] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS) = 'e' -- _deref_pbuc1=vbuc2 + // [112] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS) = 'e' -- _deref_pbuc1=vbuc2 // Unknown radix lda #'e' sta printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS // *buffer++ = 'r' - // [115] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1) = 'r' -- _deref_pbuc1=vbuc2 + // [113] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1) = 'r' -- _deref_pbuc1=vbuc2 lda #'r' sta printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+1 - // [116] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2) = 'r' -- _deref_pbuc1=vbuc2 + // [114] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2) = 'r' -- _deref_pbuc1=vbuc2 sta printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+2 // *buffer = 0 - // [117] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3) = 0 -- _deref_pbuc1=vbuc2 + // [115] *((char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3) = 0 -- _deref_pbuc1=vbuc2 lda #0 sta printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS+3 // utoa::@return // } - // [118] return + // [116] return rts - // [119] phi from utoa to utoa::@1 [phi:utoa->utoa::@1] + // [117] phi from utoa to utoa::@1 [phi:utoa->utoa::@1] __b2: - // [119] phi utoa::digit_values#8 = RADIX_DECIMAL_VALUES [phi:utoa->utoa::@1#0] -- pwuz1=pwuc1 + // [117] phi utoa::digit_values#8 = RADIX_DECIMAL_VALUES [phi:utoa->utoa::@1#0] -- pwuz1=pwuc1 lda #RADIX_DECIMAL_VALUES sta.z digit_values+1 - // [119] phi utoa::max_digits#7 = 5 [phi:utoa->utoa::@1#1] -- vbuz1=vbuc1 + // [117] phi utoa::max_digits#7 = 5 [phi:utoa->utoa::@1#1] -- vbuz1=vbuc1 lda #5 sta.z max_digits jmp __b1 - // [119] phi from utoa::@2 to utoa::@1 [phi:utoa::@2->utoa::@1] + // [117] phi from utoa::@2 to utoa::@1 [phi:utoa::@2->utoa::@1] __b3: - // [119] phi utoa::digit_values#8 = RADIX_HEXADECIMAL_VALUES [phi:utoa::@2->utoa::@1#0] -- pwuz1=pwuc1 + // [117] phi utoa::digit_values#8 = RADIX_HEXADECIMAL_VALUES [phi:utoa::@2->utoa::@1#0] -- pwuz1=pwuc1 lda #RADIX_HEXADECIMAL_VALUES sta.z digit_values+1 - // [119] phi utoa::max_digits#7 = 4 [phi:utoa::@2->utoa::@1#1] -- vbuz1=vbuc1 + // [117] phi utoa::max_digits#7 = 4 [phi:utoa::@2->utoa::@1#1] -- vbuz1=vbuc1 lda #4 sta.z max_digits jmp __b1 - // [119] phi from utoa::@3 to utoa::@1 [phi:utoa::@3->utoa::@1] + // [117] phi from utoa::@3 to utoa::@1 [phi:utoa::@3->utoa::@1] __b4: - // [119] phi utoa::digit_values#8 = RADIX_OCTAL_VALUES [phi:utoa::@3->utoa::@1#0] -- pwuz1=pwuc1 + // [117] phi utoa::digit_values#8 = RADIX_OCTAL_VALUES [phi:utoa::@3->utoa::@1#0] -- pwuz1=pwuc1 lda #RADIX_OCTAL_VALUES sta.z digit_values+1 - // [119] phi utoa::max_digits#7 = 6 [phi:utoa::@3->utoa::@1#1] -- vbuz1=vbuc1 + // [117] phi utoa::max_digits#7 = 6 [phi:utoa::@3->utoa::@1#1] -- vbuz1=vbuc1 lda #6 sta.z max_digits jmp __b1 - // [119] phi from utoa::@4 to utoa::@1 [phi:utoa::@4->utoa::@1] + // [117] phi from utoa::@4 to utoa::@1 [phi:utoa::@4->utoa::@1] __b5: - // [119] phi utoa::digit_values#8 = RADIX_BINARY_VALUES [phi:utoa::@4->utoa::@1#0] -- pwuz1=pwuc1 + // [117] phi utoa::digit_values#8 = RADIX_BINARY_VALUES [phi:utoa::@4->utoa::@1#0] -- pwuz1=pwuc1 lda #RADIX_BINARY_VALUES sta.z digit_values+1 - // [119] phi utoa::max_digits#7 = $10 [phi:utoa::@4->utoa::@1#1] -- vbuz1=vbuc1 + // [117] phi utoa::max_digits#7 = $10 [phi:utoa::@4->utoa::@1#1] -- vbuz1=vbuc1 lda #$10 sta.z max_digits // utoa::@1 __b1: - // [120] phi from utoa::@1 to utoa::@6 [phi:utoa::@1->utoa::@6] - // [120] phi utoa::buffer#10 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:utoa::@1->utoa::@6#0] -- pbuz1=pbuc1 + // [118] phi from utoa::@1 to utoa::@6 [phi:utoa::@1->utoa::@6] + // [118] phi utoa::buffer#10 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:utoa::@1->utoa::@6#0] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS sta.z buffer+1 - // [120] phi utoa::started#2 = 0 [phi:utoa::@1->utoa::@6#1] -- vbuxx=vbuc1 + // [118] phi utoa::started#2 = 0 [phi:utoa::@1->utoa::@6#1] -- vbuxx=vbuc1 ldx #0 - // [120] phi utoa::value#3 = utoa::value#10 [phi:utoa::@1->utoa::@6#2] -- register_copy - // [120] phi utoa::digit#2 = 0 [phi:utoa::@1->utoa::@6#3] -- vbuz1=vbuc1 + // [118] phi utoa::value#3 = utoa::value#10 [phi:utoa::@1->utoa::@6#2] -- register_copy + // [118] phi utoa::digit#2 = 0 [phi:utoa::@1->utoa::@6#3] -- vbuz1=vbuc1 txa sta.z digit // utoa::@6 __b6: // max_digits-1 - // [121] utoa::$4 = utoa::max_digits#7 - 1 -- vbuaa=vbuz1_minus_1 + // [119] utoa::$4 = utoa::max_digits#7 - 1 -- vbuaa=vbuz1_minus_1 lda.z max_digits sec sbc #1 // for( char digit=0; digit= digit_value) - // [129] if(0!=utoa::started#2) goto utoa::@10 -- 0_neq_vbuxx_then_la1 + // [127] if(0!=utoa::started#2) goto utoa::@10 -- 0_neq_vbuxx_then_la1 cpx #0 bne __b10 // utoa::@12 - // [130] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@10 -- vwuz1_ge_vwuz2_then_la1 + // [128] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@10 -- vwuz1_ge_vwuz2_then_la1 cmp.z value+1 bne !+ lda.z digit_value @@ -8532,46 +8492,46 @@ utoa: { beq __b10 !: bcc __b10 - // [131] phi from utoa::@12 to utoa::@9 [phi:utoa::@12->utoa::@9] - // [131] phi utoa::buffer#15 = utoa::buffer#10 [phi:utoa::@12->utoa::@9#0] -- register_copy - // [131] phi utoa::started#4 = utoa::started#2 [phi:utoa::@12->utoa::@9#1] -- register_copy - // [131] phi utoa::value#7 = utoa::value#3 [phi:utoa::@12->utoa::@9#2] -- register_copy + // [129] phi from utoa::@12 to utoa::@9 [phi:utoa::@12->utoa::@9] + // [129] phi utoa::buffer#15 = utoa::buffer#10 [phi:utoa::@12->utoa::@9#0] -- register_copy + // [129] phi utoa::started#4 = utoa::started#2 [phi:utoa::@12->utoa::@9#1] -- register_copy + // [129] phi utoa::value#7 = utoa::value#3 [phi:utoa::@12->utoa::@9#2] -- register_copy // utoa::@9 __b9: // for( char digit=0; digitutoa::@6] - // [120] phi utoa::buffer#10 = utoa::buffer#15 [phi:utoa::@9->utoa::@6#0] -- register_copy - // [120] phi utoa::started#2 = utoa::started#4 [phi:utoa::@9->utoa::@6#1] -- register_copy - // [120] phi utoa::value#3 = utoa::value#7 [phi:utoa::@9->utoa::@6#2] -- register_copy - // [120] phi utoa::digit#2 = utoa::digit#1 [phi:utoa::@9->utoa::@6#3] -- register_copy + // [118] phi from utoa::@9 to utoa::@6 [phi:utoa::@9->utoa::@6] + // [118] phi utoa::buffer#10 = utoa::buffer#15 [phi:utoa::@9->utoa::@6#0] -- register_copy + // [118] phi utoa::started#2 = utoa::started#4 [phi:utoa::@9->utoa::@6#1] -- register_copy + // [118] phi utoa::value#3 = utoa::value#7 [phi:utoa::@9->utoa::@6#2] -- register_copy + // [118] phi utoa::digit#2 = utoa::digit#1 [phi:utoa::@9->utoa::@6#3] -- register_copy jmp __b6 // utoa::@10 __b10: // utoa_append(buffer++, value, digit_value) - // [133] utoa_append::buffer#0 = utoa::buffer#10 - // [134] utoa_append::value#0 = utoa::value#3 - // [135] utoa_append::sub#0 = utoa::digit_value#0 - // [136] call utoa_append - // [202] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] + // [131] utoa_append::buffer#0 = utoa::buffer#10 + // [132] utoa_append::value#0 = utoa::value#3 + // [133] utoa_append::sub#0 = utoa::digit_value#0 + // [134] call utoa_append + // [200] phi from utoa::@10 to utoa_append [phi:utoa::@10->utoa_append] jsr utoa_append // utoa_append(buffer++, value, digit_value) - // [137] utoa_append::return#0 = utoa_append::value#2 + // [135] utoa_append::return#0 = utoa_append::value#2 // utoa::@11 // value = utoa_append(buffer++, value, digit_value) - // [138] utoa::value#0 = utoa_append::return#0 + // [136] utoa::value#0 = utoa_append::return#0 // value = utoa_append(buffer++, value, digit_value); - // [139] utoa::buffer#4 = ++ utoa::buffer#10 -- pbuz1=_inc_pbuz1 + // [137] utoa::buffer#4 = ++ utoa::buffer#10 -- pbuz1=_inc_pbuz1 inc.z buffer bne !+ inc.z buffer+1 !: - // [131] phi from utoa::@11 to utoa::@9 [phi:utoa::@11->utoa::@9] - // [131] phi utoa::buffer#15 = utoa::buffer#4 [phi:utoa::@11->utoa::@9#0] -- register_copy - // [131] phi utoa::started#4 = 1 [phi:utoa::@11->utoa::@9#1] -- vbuxx=vbuc1 + // [129] phi from utoa::@11 to utoa::@9 [phi:utoa::@11->utoa::@9] + // [129] phi utoa::buffer#15 = utoa::buffer#4 [phi:utoa::@11->utoa::@9#0] -- register_copy + // [129] phi utoa::started#4 = 1 [phi:utoa::@11->utoa::@9#1] -- vbuxx=vbuc1 ldx #1 - // [131] phi utoa::value#7 = utoa::value#0 [phi:utoa::@11->utoa::@9#2] -- register_copy + // [129] phi utoa::value#7 = utoa::value#0 [phi:utoa::@11->utoa::@9#2] -- register_copy jmp __b9 } // printf_number_buffer @@ -8587,67 +8547,67 @@ printf_number_buffer: { .label format_justify_left = $1a .label format_upper_case = $1b // if(format.min_length) - // [141] if(0==printf_number_buffer::format_min_length#3) goto printf_number_buffer::@1 -- 0_eq_vbuxx_then_la1 + // [139] if(0==printf_number_buffer::format_min_length#3) goto printf_number_buffer::@1 -- 0_eq_vbuxx_then_la1 cpx #0 beq __b6 - // [142] phi from printf_number_buffer to printf_number_buffer::@6 [phi:printf_number_buffer->printf_number_buffer::@6] + // [140] phi from printf_number_buffer to printf_number_buffer::@6 [phi:printf_number_buffer->printf_number_buffer::@6] // printf_number_buffer::@6 // strlen(buffer.digits) - // [143] call strlen - // [209] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] + // [141] call strlen + // [207] phi from printf_number_buffer::@6 to strlen [phi:printf_number_buffer::@6->strlen] jsr strlen // strlen(buffer.digits) - // [144] strlen::return#2 = strlen::len#2 + // [142] strlen::return#2 = strlen::len#2 // printf_number_buffer::@14 - // [145] printf_number_buffer::$19 = strlen::return#2 + // [143] printf_number_buffer::$19 = strlen::return#2 // signed char len = (signed char)strlen(buffer.digits) - // [146] printf_number_buffer::len#0 = (signed char)printf_number_buffer::$19 -- vbsyy=_sbyte_vwuz1 + // [144] printf_number_buffer::len#0 = (signed char)printf_number_buffer::$19 -- vbsyy=_sbyte_vwuz1 // There is a minimum length - work out the padding ldy.z __19 // if(buffer.sign) - // [147] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 -- 0_eq_vbuz1_then_la1 + // [145] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@13 -- 0_eq_vbuz1_then_la1 lda.z buffer_sign beq __b13 // printf_number_buffer::@7 // len++; - // [148] printf_number_buffer::len#1 = ++ printf_number_buffer::len#0 -- vbsyy=_inc_vbsyy + // [146] printf_number_buffer::len#1 = ++ printf_number_buffer::len#0 -- vbsyy=_inc_vbsyy iny - // [149] phi from printf_number_buffer::@14 printf_number_buffer::@7 to printf_number_buffer::@13 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13] - // [149] phi printf_number_buffer::len#2 = printf_number_buffer::len#0 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13#0] -- register_copy + // [147] phi from printf_number_buffer::@14 printf_number_buffer::@7 to printf_number_buffer::@13 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13] + // [147] phi printf_number_buffer::len#2 = printf_number_buffer::len#0 [phi:printf_number_buffer::@14/printf_number_buffer::@7->printf_number_buffer::@13#0] -- register_copy // printf_number_buffer::@13 __b13: // padding = (signed char)format.min_length - len - // [150] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#3 - printf_number_buffer::len#2 -- vbsz1=vbsxx_minus_vbsyy + // [148] printf_number_buffer::padding#1 = (signed char)printf_number_buffer::format_min_length#3 - printf_number_buffer::len#2 -- vbsz1=vbsxx_minus_vbsyy txa sty.z $ff sec sbc.z $ff sta.z padding // if(padding<0) - // [151] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 -- vbsz1_ge_0_then_la1 + // [149] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@21 -- vbsz1_ge_0_then_la1 cmp #0 bpl __b1 - // [153] phi from printf_number_buffer printf_number_buffer::@13 to printf_number_buffer::@1 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1] + // [151] phi from printf_number_buffer printf_number_buffer::@13 to printf_number_buffer::@1 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1] __b6: - // [153] phi printf_number_buffer::padding#10 = 0 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1#0] -- vbsz1=vbsc1 + // [151] phi printf_number_buffer::padding#10 = 0 [phi:printf_number_buffer/printf_number_buffer::@13->printf_number_buffer::@1#0] -- vbsz1=vbsc1 lda #0 sta.z padding - // [152] phi from printf_number_buffer::@13 to printf_number_buffer::@21 [phi:printf_number_buffer::@13->printf_number_buffer::@21] + // [150] phi from printf_number_buffer::@13 to printf_number_buffer::@21 [phi:printf_number_buffer::@13->printf_number_buffer::@21] // printf_number_buffer::@21 - // [153] phi from printf_number_buffer::@21 to printf_number_buffer::@1 [phi:printf_number_buffer::@21->printf_number_buffer::@1] - // [153] phi printf_number_buffer::padding#10 = printf_number_buffer::padding#1 [phi:printf_number_buffer::@21->printf_number_buffer::@1#0] -- register_copy + // [151] phi from printf_number_buffer::@21 to printf_number_buffer::@1 [phi:printf_number_buffer::@21->printf_number_buffer::@1] + // [151] phi printf_number_buffer::padding#10 = printf_number_buffer::padding#1 [phi:printf_number_buffer::@21->printf_number_buffer::@1#0] -- register_copy // printf_number_buffer::@1 __b1: // if(!format.justify_left && !format.zero_padding && padding) - // [154] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 -- 0_neq_vbuz1_then_la1 + // [152] if(0!=printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@2 -- 0_neq_vbuz1_then_la1 lda.z format_justify_left bne __b2 // printf_number_buffer::@17 - // [155] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 -- 0_neq_vbuz1_then_la1 + // [153] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@2 -- 0_neq_vbuz1_then_la1 lda.z format_zero_padding bne __b2 // printf_number_buffer::@16 - // [156] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 -- 0_neq_vbsz1_then_la1 + // [154] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@8 -- 0_neq_vbsz1_then_la1 lda.z padding cmp #0 bne __b8 @@ -8655,40 +8615,40 @@ printf_number_buffer: { // printf_number_buffer::@8 __b8: // printf_padding(putc, ' ',(char)padding) - // [157] printf_padding::putc#0 = printf_number_buffer::putc#10 - // [158] printf_padding::length#0 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuz2 + // [155] printf_padding::putc#0 = printf_number_buffer::putc#10 + // [156] printf_padding::length#0 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuz2 lda.z padding sta.z printf_padding.length - // [159] call printf_padding - // [215] phi from printf_number_buffer::@8 to printf_padding [phi:printf_number_buffer::@8->printf_padding] - // [215] phi printf_padding::putc#7 = printf_padding::putc#0 [phi:printf_number_buffer::@8->printf_padding#0] -- register_copy - // [215] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 + // [157] call printf_padding + // [213] phi from printf_number_buffer::@8 to printf_padding [phi:printf_number_buffer::@8->printf_padding] + // [213] phi printf_padding::putc#7 = printf_padding::putc#0 [phi:printf_number_buffer::@8->printf_padding#0] -- register_copy + // [213] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@8->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy + // [213] phi printf_padding::length#6 = printf_padding::length#0 [phi:printf_number_buffer::@8->printf_padding#2] -- register_copy jsr printf_padding // printf_number_buffer::@2 __b2: // if(buffer.sign) - // [160] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 -- 0_eq_vbuz1_then_la1 + // [158] if(0==printf_number_buffer::buffer_sign#10) goto printf_number_buffer::@3 -- 0_eq_vbuz1_then_la1 lda.z buffer_sign beq __b3 // printf_number_buffer::@9 // putc(buffer.sign) - // [161] stackpush(char) = printf_number_buffer::buffer_sign#10 -- _stackpushbyte_=vbuz1 + // [159] stackpush(char) = printf_number_buffer::buffer_sign#10 -- _stackpushbyte_=vbuz1 pha - // [162] callexecute *printf_number_buffer::putc#10 -- call__deref_pprz1 + // [160] callexecute *printf_number_buffer::putc#10 -- call__deref_pprz1 jsr icall7 // sideeffect stackpullpadding(1) -- _stackpullpadding_1 pla // printf_number_buffer::@3 __b3: // if(format.zero_padding && padding) - // [164] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 -- 0_eq_vbuz1_then_la1 + // [162] if(0==printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@4 -- 0_eq_vbuz1_then_la1 lda.z format_zero_padding beq __b4 // printf_number_buffer::@18 - // [165] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 -- 0_neq_vbsz1_then_la1 + // [163] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@10 -- 0_neq_vbsz1_then_la1 lda.z padding cmp #0 bne __b10 @@ -8696,38 +8656,38 @@ printf_number_buffer: { // printf_number_buffer::@10 __b10: // printf_padding(putc, '0',(char)padding) - // [166] printf_padding::putc#1 = printf_number_buffer::putc#10 - // [167] printf_padding::length#1 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuz2 + // [164] printf_padding::putc#1 = printf_number_buffer::putc#10 + // [165] printf_padding::length#1 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuz2 lda.z padding sta.z printf_padding.length - // [168] call printf_padding - // [215] phi from printf_number_buffer::@10 to printf_padding [phi:printf_number_buffer::@10->printf_padding] - // [215] phi printf_padding::putc#7 = printf_padding::putc#1 [phi:printf_number_buffer::@10->printf_padding#0] -- register_copy - // [215] phi printf_padding::pad#7 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 + // [166] call printf_padding + // [213] phi from printf_number_buffer::@10 to printf_padding [phi:printf_number_buffer::@10->printf_padding] + // [213] phi printf_padding::putc#7 = printf_padding::putc#1 [phi:printf_number_buffer::@10->printf_padding#0] -- register_copy + // [213] phi printf_padding::pad#7 = '0' [phi:printf_number_buffer::@10->printf_padding#1] -- vbuz1=vbuc1 lda #'0' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy + // [213] phi printf_padding::length#6 = printf_padding::length#1 [phi:printf_number_buffer::@10->printf_padding#2] -- register_copy jsr printf_padding // printf_number_buffer::@4 __b4: // if(format.upper_case) - // [169] if(0==printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 -- 0_eq_vbuz1_then_la1 + // [167] if(0==printf_number_buffer::format_upper_case#10) goto printf_number_buffer::@5 -- 0_eq_vbuz1_then_la1 lda.z format_upper_case beq __b5 - // [170] phi from printf_number_buffer::@4 to printf_number_buffer::@11 [phi:printf_number_buffer::@4->printf_number_buffer::@11] + // [168] phi from printf_number_buffer::@4 to printf_number_buffer::@11 [phi:printf_number_buffer::@4->printf_number_buffer::@11] // printf_number_buffer::@11 // strupr(buffer.digits) - // [171] call strupr - // [223] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] + // [169] call strupr + // [221] phi from printf_number_buffer::@11 to strupr [phi:printf_number_buffer::@11->strupr] jsr strupr // printf_number_buffer::@5 __b5: // printf_str(putc, buffer.digits) - // [172] printf_str::putc#0 = printf_number_buffer::putc#10 - // [173] call printf_str - // [71] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] - // [71] phi printf_str::putc#12 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy - // [71] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 + // [170] printf_str::putc#0 = printf_number_buffer::putc#10 + // [171] call printf_str + // [69] phi from printf_number_buffer::@5 to printf_str [phi:printf_number_buffer::@5->printf_str] + // [69] phi printf_str::putc#12 = printf_str::putc#0 [phi:printf_number_buffer::@5->printf_str#0] -- register_copy + // [69] phi printf_str::s#12 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:printf_number_buffer::@5->printf_str#1] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -8735,15 +8695,15 @@ printf_number_buffer: { jsr printf_str // printf_number_buffer::@15 // if(format.justify_left && !format.zero_padding && padding) - // [174] if(0==printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return -- 0_eq_vbuz1_then_la1 + // [172] if(0==printf_number_buffer::format_justify_left#10) goto printf_number_buffer::@return -- 0_eq_vbuz1_then_la1 lda.z format_justify_left beq __breturn // printf_number_buffer::@20 - // [175] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return -- 0_neq_vbuz1_then_la1 + // [173] if(0!=printf_number_buffer::format_zero_padding#10) goto printf_number_buffer::@return -- 0_neq_vbuz1_then_la1 lda.z format_zero_padding bne __breturn // printf_number_buffer::@19 - // [176] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 -- 0_neq_vbsz1_then_la1 + // [174] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@12 -- 0_neq_vbsz1_then_la1 lda.z padding cmp #0 bne __b12 @@ -8751,22 +8711,22 @@ printf_number_buffer: { // printf_number_buffer::@12 __b12: // printf_padding(putc, ' ',(char)padding) - // [177] printf_padding::putc#2 = printf_number_buffer::putc#10 - // [178] printf_padding::length#2 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuz2 + // [175] printf_padding::putc#2 = printf_number_buffer::putc#10 + // [176] printf_padding::length#2 = (char)printf_number_buffer::padding#10 -- vbuz1=vbuz2 lda.z padding sta.z printf_padding.length - // [179] call printf_padding - // [215] phi from printf_number_buffer::@12 to printf_padding [phi:printf_number_buffer::@12->printf_padding] - // [215] phi printf_padding::putc#7 = printf_padding::putc#2 [phi:printf_number_buffer::@12->printf_padding#0] -- register_copy - // [215] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 + // [177] call printf_padding + // [213] phi from printf_number_buffer::@12 to printf_padding [phi:printf_number_buffer::@12->printf_padding] + // [213] phi printf_padding::putc#7 = printf_padding::putc#2 [phi:printf_number_buffer::@12->printf_padding#0] -- register_copy + // [213] phi printf_padding::pad#7 = ' ' [phi:printf_number_buffer::@12->printf_padding#1] -- vbuz1=vbuc1 lda #' ' sta.z printf_padding.pad - // [215] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy + // [213] phi printf_padding::length#6 = printf_padding::length#2 [phi:printf_number_buffer::@12->printf_padding#2] -- register_copy jsr printf_padding // printf_number_buffer::@return __breturn: // } - // [180] return + // [178] return rts // Outside Flow icall7: @@ -8785,15 +8745,15 @@ ultoa: { .label buffer = 2 .label digit = $14 .label value = 4 - // [182] phi from ultoa to ultoa::@1 [phi:ultoa->ultoa::@1] - // [182] phi ultoa::buffer#11 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:ultoa->ultoa::@1#0] -- pbuz1=pbuc1 + // [180] phi from ultoa to ultoa::@1 [phi:ultoa->ultoa::@1] + // [180] phi ultoa::buffer#11 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:ultoa->ultoa::@1#0] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS sta.z buffer+1 - // [182] phi ultoa::started#2 = 0 [phi:ultoa->ultoa::@1#1] -- vbuxx=vbuc1 + // [180] phi ultoa::started#2 = 0 [phi:ultoa->ultoa::@1#1] -- vbuxx=vbuc1 ldx #0 - // [182] phi ultoa::value#2 = printf_slong::uvalue#0 [phi:ultoa->ultoa::@1#2] -- vduz1=vduc1 + // [180] phi ultoa::value#2 = printf_slong::uvalue#0 [phi:ultoa->ultoa::@1#2] -- vduz1=vduc1 lda #printf_slong.uvalue @@ -8802,48 +8762,48 @@ ultoa: { sta.z value+2 lda #>printf_slong.uvalue>>$10 sta.z value+3 - // [182] phi ultoa::digit#2 = 0 [phi:ultoa->ultoa::@1#3] -- vbuz1=vbuc1 + // [180] phi ultoa::digit#2 = 0 [phi:ultoa->ultoa::@1#3] -- vbuz1=vbuc1 txa sta.z digit // ultoa::@1 __b1: // for( char digit=0; digit= digit_value) - // [191] if(0!=ultoa::started#2) goto ultoa::@5 -- 0_neq_vbuxx_then_la1 + // [189] if(0!=ultoa::started#2) goto ultoa::@5 -- 0_neq_vbuxx_then_la1 cpx #0 bne __b5 // ultoa::@7 - // [192] if(ultoa::value#2>=ultoa::digit_value#0) goto ultoa::@5 -- vduz1_ge_vduz2_then_la1 + // [190] if(ultoa::value#2>=ultoa::digit_value#0) goto ultoa::@5 -- vduz1_ge_vduz2_then_la1 lda.z value+3 cmp.z digit_value+3 bcc !+ @@ -8875,46 +8835,46 @@ ultoa: { cmp.z digit_value bcs __b5 !: - // [193] phi from ultoa::@7 to ultoa::@4 [phi:ultoa::@7->ultoa::@4] - // [193] phi ultoa::buffer#14 = ultoa::buffer#11 [phi:ultoa::@7->ultoa::@4#0] -- register_copy - // [193] phi ultoa::started#4 = ultoa::started#2 [phi:ultoa::@7->ultoa::@4#1] -- register_copy - // [193] phi ultoa::value#6 = ultoa::value#2 [phi:ultoa::@7->ultoa::@4#2] -- register_copy + // [191] phi from ultoa::@7 to ultoa::@4 [phi:ultoa::@7->ultoa::@4] + // [191] phi ultoa::buffer#14 = ultoa::buffer#11 [phi:ultoa::@7->ultoa::@4#0] -- register_copy + // [191] phi ultoa::started#4 = ultoa::started#2 [phi:ultoa::@7->ultoa::@4#1] -- register_copy + // [191] phi ultoa::value#6 = ultoa::value#2 [phi:ultoa::@7->ultoa::@4#2] -- register_copy // ultoa::@4 __b4: // for( char digit=0; digitultoa::@1] - // [182] phi ultoa::buffer#11 = ultoa::buffer#14 [phi:ultoa::@4->ultoa::@1#0] -- register_copy - // [182] phi ultoa::started#2 = ultoa::started#4 [phi:ultoa::@4->ultoa::@1#1] -- register_copy - // [182] phi ultoa::value#2 = ultoa::value#6 [phi:ultoa::@4->ultoa::@1#2] -- register_copy - // [182] phi ultoa::digit#2 = ultoa::digit#1 [phi:ultoa::@4->ultoa::@1#3] -- register_copy + // [180] phi from ultoa::@4 to ultoa::@1 [phi:ultoa::@4->ultoa::@1] + // [180] phi ultoa::buffer#11 = ultoa::buffer#14 [phi:ultoa::@4->ultoa::@1#0] -- register_copy + // [180] phi ultoa::started#2 = ultoa::started#4 [phi:ultoa::@4->ultoa::@1#1] -- register_copy + // [180] phi ultoa::value#2 = ultoa::value#6 [phi:ultoa::@4->ultoa::@1#2] -- register_copy + // [180] phi ultoa::digit#2 = ultoa::digit#1 [phi:ultoa::@4->ultoa::@1#3] -- register_copy jmp __b1 // ultoa::@5 __b5: // ultoa_append(buffer++, value, digit_value) - // [195] ultoa_append::buffer#0 = ultoa::buffer#11 - // [196] ultoa_append::value#0 = ultoa::value#2 - // [197] ultoa_append::sub#0 = ultoa::digit_value#0 - // [198] call ultoa_append - // [233] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] + // [193] ultoa_append::buffer#0 = ultoa::buffer#11 + // [194] ultoa_append::value#0 = ultoa::value#2 + // [195] ultoa_append::sub#0 = ultoa::digit_value#0 + // [196] call ultoa_append + // [231] phi from ultoa::@5 to ultoa_append [phi:ultoa::@5->ultoa_append] jsr ultoa_append // ultoa_append(buffer++, value, digit_value) - // [199] ultoa_append::return#0 = ultoa_append::value#2 + // [197] ultoa_append::return#0 = ultoa_append::value#2 // ultoa::@6 // value = ultoa_append(buffer++, value, digit_value) - // [200] ultoa::value#0 = ultoa_append::return#0 + // [198] ultoa::value#0 = ultoa_append::return#0 // value = ultoa_append(buffer++, value, digit_value); - // [201] ultoa::buffer#4 = ++ ultoa::buffer#11 -- pbuz1=_inc_pbuz1 + // [199] ultoa::buffer#4 = ++ ultoa::buffer#11 -- pbuz1=_inc_pbuz1 inc.z buffer bne !+ inc.z buffer+1 !: - // [193] phi from ultoa::@6 to ultoa::@4 [phi:ultoa::@6->ultoa::@4] - // [193] phi ultoa::buffer#14 = ultoa::buffer#4 [phi:ultoa::@6->ultoa::@4#0] -- register_copy - // [193] phi ultoa::started#4 = 1 [phi:ultoa::@6->ultoa::@4#1] -- vbuxx=vbuc1 + // [191] phi from ultoa::@6 to ultoa::@4 [phi:ultoa::@6->ultoa::@4] + // [191] phi ultoa::buffer#14 = ultoa::buffer#4 [phi:ultoa::@6->ultoa::@4#0] -- register_copy + // [191] phi ultoa::started#4 = 1 [phi:ultoa::@6->ultoa::@4#1] -- vbuxx=vbuc1 ldx #1 - // [193] phi ultoa::value#6 = ultoa::value#0 [phi:ultoa::@6->ultoa::@4#2] -- register_copy + // [191] phi ultoa::value#6 = ultoa::value#0 [phi:ultoa::@6->ultoa::@4#2] -- register_copy jmp __b4 } // utoa_append @@ -8932,14 +8892,14 @@ utoa_append: { .label value = 2 .label sub = 8 .label return = 2 - // [203] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] - // [203] phi utoa_append::digit#2 = 0 [phi:utoa_append->utoa_append::@1#0] -- vbuxx=vbuc1 + // [201] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] + // [201] phi utoa_append::digit#2 = 0 [phi:utoa_append->utoa_append::@1#0] -- vbuxx=vbuc1 ldx #0 - // [203] phi utoa_append::value#2 = utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy + // [201] phi utoa_append::value#2 = utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy // utoa_append::@1 __b1: // while (value >= sub) - // [204] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 + // [202] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 lda.z sub+1 cmp.z value+1 bne !+ @@ -8950,21 +8910,21 @@ utoa_append: { bcc __b2 // utoa_append::@3 // *buffer = DIGITS[digit] - // [205] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [203] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda DIGITS,x ldy #0 sta (buffer),y // utoa_append::@return // } - // [206] return + // [204] return rts // utoa_append::@2 __b2: // digit++; - // [207] utoa_append::digit#1 = ++ utoa_append::digit#2 -- vbuxx=_inc_vbuxx + // [205] utoa_append::digit#1 = ++ utoa_append::digit#2 -- vbuxx=_inc_vbuxx inx // value -= sub - // [208] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 + // [206] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 lda.z value sec sbc.z sub @@ -8972,9 +8932,9 @@ utoa_append: { lda.z value+1 sbc.z sub+1 sta.z value+1 - // [203] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] - // [203] phi utoa_append::digit#2 = utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy - // [203] phi utoa_append::value#2 = utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy + // [201] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] + // [201] phi utoa_append::digit#2 = utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy + // [201] phi utoa_append::value#2 = utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy jmp __b1 } // strlen @@ -8984,12 +8944,12 @@ strlen: { .label len = 8 .label str = $10 .label return = 8 - // [210] phi from strlen to strlen::@1 [phi:strlen->strlen::@1] - // [210] phi strlen::len#2 = 0 [phi:strlen->strlen::@1#0] -- vwuz1=vwuc1 + // [208] phi from strlen to strlen::@1 [phi:strlen->strlen::@1] + // [208] phi strlen::len#2 = 0 [phi:strlen->strlen::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z len sta.z len+1 - // [210] phi strlen::str#3 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:strlen->strlen::@1#1] -- pbuz1=pbuc1 + // [208] phi strlen::str#3 = (char *)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS [phi:strlen->strlen::@1#1] -- pbuz1=pbuc1 lda #printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS @@ -8997,32 +8957,32 @@ strlen: { // strlen::@1 __b1: // while(*str) - // [211] if(0!=*strlen::str#3) goto strlen::@2 -- 0_neq__deref_pbuz1_then_la1 + // [209] if(0!=*strlen::str#3) goto strlen::@2 -- 0_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y cmp #0 bne __b2 // strlen::@return // } - // [212] return + // [210] return rts // strlen::@2 __b2: // len++; - // [213] strlen::len#1 = ++ strlen::len#2 -- vwuz1=_inc_vwuz1 + // [211] strlen::len#1 = ++ strlen::len#2 -- vwuz1=_inc_vwuz1 inc.z len bne !+ inc.z len+1 !: // str++; - // [214] strlen::str#0 = ++ strlen::str#3 -- pbuz1=_inc_pbuz1 + // [212] strlen::str#0 = ++ strlen::str#3 -- pbuz1=_inc_pbuz1 inc.z str bne !+ inc.z str+1 !: - // [210] phi from strlen::@2 to strlen::@1 [phi:strlen::@2->strlen::@1] - // [210] phi strlen::len#2 = strlen::len#1 [phi:strlen::@2->strlen::@1#0] -- register_copy - // [210] phi strlen::str#3 = strlen::str#0 [phi:strlen::@2->strlen::@1#1] -- register_copy + // [208] phi from strlen::@2 to strlen::@1 [phi:strlen::@2->strlen::@1] + // [208] phi strlen::len#2 = strlen::len#1 [phi:strlen::@2->strlen::@1#0] -- register_copy + // [208] phi strlen::str#3 = strlen::str#0 [phi:strlen::@2->strlen::@1#1] -- register_copy jmp __b1 } // printf_padding @@ -9033,37 +8993,37 @@ printf_padding: { .label putc = 2 .label length = $13 .label pad = $16 - // [216] phi from printf_padding to printf_padding::@1 [phi:printf_padding->printf_padding::@1] - // [216] phi printf_padding::i#2 = 0 [phi:printf_padding->printf_padding::@1#0] -- vbuz1=vbuc1 + // [214] phi from printf_padding to printf_padding::@1 [phi:printf_padding->printf_padding::@1] + // [214] phi printf_padding::i#2 = 0 [phi:printf_padding->printf_padding::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i // printf_padding::@1 __b1: // for(char i=0;iprintf_padding::@1] - // [216] phi printf_padding::i#2 = printf_padding::i#1 [phi:printf_padding::@3->printf_padding::@1#0] -- register_copy + // [214] phi from printf_padding::@3 to printf_padding::@1 [phi:printf_padding::@3->printf_padding::@1] + // [214] phi printf_padding::i#2 = printf_padding::i#1 [phi:printf_padding::@3->printf_padding::@1#0] -- register_copy jmp __b1 // Outside Flow icall8: @@ -9075,8 +9035,8 @@ printf_padding: { strupr: { .label str = printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS .label src = $e - // [224] phi from strupr to strupr::@1 [phi:strupr->strupr::@1] - // [224] phi strupr::src#2 = strupr::str#0 [phi:strupr->strupr::@1#0] -- pbuz1=pbuc1 + // [222] phi from strupr to strupr::@1 [phi:strupr->strupr::@1] + // [222] phi strupr::src#2 = strupr::str#0 [phi:strupr->strupr::@1#0] -- pbuz1=pbuc1 lda #str @@ -9084,38 +9044,38 @@ strupr: { // strupr::@1 __b1: // while(*src) - // [225] if(0!=*strupr::src#2) goto strupr::@2 -- 0_neq__deref_pbuz1_then_la1 + // [223] if(0!=*strupr::src#2) goto strupr::@2 -- 0_neq__deref_pbuz1_then_la1 ldy #0 lda (src),y cmp #0 bne __b2 // strupr::@return // } - // [226] return + // [224] return rts // strupr::@2 __b2: // toupper(*src) - // [227] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 + // [225] toupper::ch#0 = *strupr::src#2 -- vbuaa=_deref_pbuz1 ldy #0 lda (src),y - // [228] call toupper + // [226] call toupper jsr toupper - // [229] toupper::return#3 = toupper::return#2 + // [227] toupper::return#3 = toupper::return#2 // strupr::@3 - // [230] strupr::$0 = toupper::return#3 + // [228] strupr::$0 = toupper::return#3 // *src = toupper(*src) - // [231] *strupr::src#2 = strupr::$0 -- _deref_pbuz1=vbuaa + // [229] *strupr::src#2 = strupr::$0 -- _deref_pbuz1=vbuaa ldy #0 sta (src),y // src++; - // [232] strupr::src#1 = ++ strupr::src#2 -- pbuz1=_inc_pbuz1 + // [230] strupr::src#1 = ++ strupr::src#2 -- pbuz1=_inc_pbuz1 inc.z src bne !+ inc.z src+1 !: - // [224] phi from strupr::@3 to strupr::@1 [phi:strupr::@3->strupr::@1] - // [224] phi strupr::src#2 = strupr::src#1 [phi:strupr::@3->strupr::@1#0] -- register_copy + // [222] phi from strupr::@3 to strupr::@1 [phi:strupr::@3->strupr::@1] + // [222] phi strupr::src#2 = strupr::src#1 [phi:strupr::@3->strupr::@1#0] -- register_copy jmp __b1 } // ultoa_append @@ -9133,14 +9093,14 @@ ultoa_append: { .label value = 4 .label sub = $a .label return = 4 - // [234] phi from ultoa_append to ultoa_append::@1 [phi:ultoa_append->ultoa_append::@1] - // [234] phi ultoa_append::digit#2 = 0 [phi:ultoa_append->ultoa_append::@1#0] -- vbuxx=vbuc1 + // [232] phi from ultoa_append to ultoa_append::@1 [phi:ultoa_append->ultoa_append::@1] + // [232] phi ultoa_append::digit#2 = 0 [phi:ultoa_append->ultoa_append::@1#0] -- vbuxx=vbuc1 ldx #0 - // [234] phi ultoa_append::value#2 = ultoa_append::value#0 [phi:ultoa_append->ultoa_append::@1#1] -- register_copy + // [232] phi ultoa_append::value#2 = ultoa_append::value#0 [phi:ultoa_append->ultoa_append::@1#1] -- register_copy // ultoa_append::@1 __b1: // while (value >= sub) - // [235] if(ultoa_append::value#2>=ultoa_append::sub#0) goto ultoa_append::@2 -- vduz1_ge_vduz2_then_la1 + // [233] if(ultoa_append::value#2>=ultoa_append::sub#0) goto ultoa_append::@2 -- vduz1_ge_vduz2_then_la1 lda.z value+3 cmp.z sub+3 bcc !+ @@ -9159,21 +9119,21 @@ ultoa_append: { !: // ultoa_append::@3 // *buffer = DIGITS[digit] - // [236] *ultoa_append::buffer#0 = DIGITS[ultoa_append::digit#2] -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [234] *ultoa_append::buffer#0 = DIGITS[ultoa_append::digit#2] -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda DIGITS,x ldy #0 sta (buffer),y // ultoa_append::@return // } - // [237] return + // [235] return rts // ultoa_append::@2 __b2: // digit++; - // [238] ultoa_append::digit#1 = ++ ultoa_append::digit#2 -- vbuxx=_inc_vbuxx + // [236] ultoa_append::digit#1 = ++ ultoa_append::digit#2 -- vbuxx=_inc_vbuxx inx // value -= sub - // [239] ultoa_append::value#1 = ultoa_append::value#2 - ultoa_append::sub#0 -- vduz1=vduz1_minus_vduz2 + // [237] ultoa_append::value#1 = ultoa_append::value#2 - ultoa_append::sub#0 -- vduz1=vduz1_minus_vduz2 lda.z value sec sbc.z sub @@ -9187,9 +9147,9 @@ ultoa_append: { lda.z value+3 sbc.z sub+3 sta.z value+3 - // [234] phi from ultoa_append::@2 to ultoa_append::@1 [phi:ultoa_append::@2->ultoa_append::@1] - // [234] phi ultoa_append::digit#2 = ultoa_append::digit#1 [phi:ultoa_append::@2->ultoa_append::@1#0] -- register_copy - // [234] phi ultoa_append::value#2 = ultoa_append::value#1 [phi:ultoa_append::@2->ultoa_append::@1#1] -- register_copy + // [232] phi from ultoa_append::@2 to ultoa_append::@1 [phi:ultoa_append::@2->ultoa_append::@1] + // [232] phi ultoa_append::digit#2 = ultoa_append::digit#1 [phi:ultoa_append::@2->ultoa_append::@1#0] -- register_copy + // [232] phi ultoa_append::value#2 = ultoa_append::value#1 [phi:ultoa_append::@2->ultoa_append::@1#1] -- register_copy jmp __b1 } // toupper @@ -9198,27 +9158,27 @@ ultoa_append: { // __register(A) char toupper(__register(A) char ch) toupper: { // if(ch>='a' && ch<='z') - // [240] if(toupper::ch#0<'a') goto toupper::@return -- vbuaa_lt_vbuc1_then_la1 + // [238] if(toupper::ch#0<'a') goto toupper::@return -- vbuaa_lt_vbuc1_then_la1 cmp #'a' bcc __breturn // toupper::@2 - // [241] if(toupper::ch#0<='z') goto toupper::@1 -- vbuaa_le_vbuc1_then_la1 + // [239] if(toupper::ch#0<='z') goto toupper::@1 -- vbuaa_le_vbuc1_then_la1 cmp #'z' bcc __b1 beq __b1 - // [243] phi from toupper toupper::@1 toupper::@2 to toupper::@return [phi:toupper/toupper::@1/toupper::@2->toupper::@return] - // [243] phi toupper::return#2 = toupper::ch#0 [phi:toupper/toupper::@1/toupper::@2->toupper::@return#0] -- register_copy + // [241] phi from toupper toupper::@1 toupper::@2 to toupper::@return [phi:toupper/toupper::@1/toupper::@2->toupper::@return] + // [241] phi toupper::return#2 = toupper::ch#0 [phi:toupper/toupper::@1/toupper::@2->toupper::@return#0] -- register_copy rts // toupper::@1 __b1: // return ch + ('A'-'a'); - // [242] toupper::return#0 = toupper::ch#0 + 'A'-'a' -- vbuaa=vbuaa_plus_vbuc1 + // [240] toupper::return#0 = toupper::ch#0 + 'A'-'a' -- vbuaa=vbuaa_plus_vbuc1 clc adc #'A'-'a' // toupper::@return __breturn: // } - // [244] return + // [242] return rts } // File Data @@ -9238,4 +9198,10 @@ toupper: { BUF: .fill $14, 0 // Buffer used for stringified number being printed printf_buffer: .fill SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER, 0 + /// The capacity of the buffer (n passed to snprintf()) + /// Used to hold state while printing + __snprintf_capacity: .word 0 + // The number of chars that would have been filled when printing without capacity. Grows even after size>capacity. + /// Used to hold state while printing + __snprintf_size: .word 0 diff --git a/src/test/ref/printf-19.sym b/src/test/ref/printf-19.sym index 7666c2698..e94fd5214 100644 --- a/src/test/ref/printf-19.sym +++ b/src/test/ref/printf-19.sym @@ -16,9 +16,9 @@ __constant unsigned int RADIX_HEXADECIMAL_VALUES[] = { $1000, $100, $10 } __constant unsigned int RADIX_OCTAL_VALUES[] = { $8000, $1000, $200, $40, 8 } __constant char SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c __constant unsigned int STACK_BASE = $103 -__loadstore char *__snprintf_buffer // zp[2]:30 9.022222222222222 -__loadstore volatile unsigned int __snprintf_capacity // zp[2]:32 6.48936170212766 -__loadstore volatile unsigned int __snprintf_size // zp[2]:28 11.021739130434781 +__loadstore char *__snprintf_buffer // zp[2]:28 9.022222222222222 +__loadstore volatile unsigned int __snprintf_capacity = 0 // mem[2] 6.446808510638299 +__loadstore volatile unsigned int __snprintf_size = 0 // mem[2] 10.978260869565217 void __start() void main() __constant char main::s[$e] = "hello world! " @@ -288,9 +288,9 @@ zp[1]:18 [ printf_padding::i#2 printf_padding::i#1 ] zp[2]:14 [ strupr::src#2 strupr::src#1 utoa::digit_values#8 printf_str::s#11 printf_str::s#12 printf_str::s#0 ] reg byte x [ ultoa_append::digit#2 ultoa_append::digit#1 ] reg byte a [ toupper::return#2 toupper::return#0 toupper::ch#0 ] -zp[2]:32 [ __snprintf_capacity ] -zp[2]:28 [ __snprintf_size ] -zp[2]:30 [ __snprintf_buffer ] +zp[2]:28 [ __snprintf_buffer ] +mem[2] [ __snprintf_size ] +mem[2] [ __snprintf_capacity ] reg byte a [ printf_str::c#1 ] reg byte a [ utoa::$4 ] reg byte x [ utoa::$11 ] diff --git a/src/test/ref/stars-2.log b/src/test/ref/stars-2.log index ef8de9f69..b18f77bf6 100644 --- a/src/test/ref/stars-2.log +++ b/src/test/ref/stars-2.log @@ -16,6 +16,8 @@ Inlined call call __init Eliminating unused variable with no statement memcpy::$0 Eliminating unused variable with no statement memset::$2 Eliminating unused variable with no statement gotoxy::$4 +Eliminating unused variable with no statement __snprintf_capacity +Eliminating unused variable with no statement __snprintf_size Eliminating unused variable with no statement main::$2 Calling convention STACK_CALL adding prepare/execute/finalize for call *printf_str::putc printf_str::c Calling convention STACK_CALL adding prepare/execute/finalize for call *printf_padding::putc printf_padding::pad diff --git a/src/test/ref/strcmp-0.log b/src/test/ref/strcmp-0.log index 3f97576c7..2295ba337 100644 --- a/src/test/ref/strcmp-0.log +++ b/src/test/ref/strcmp-0.log @@ -25,6 +25,8 @@ Inlined call call __init Eliminating unused variable with no statement memcpy::$0 Eliminating unused variable with no statement memset::$2 Eliminating unused variable with no statement gotoxy::$4 +Eliminating unused variable with no statement __snprintf_capacity +Eliminating unused variable with no statement __snprintf_size Eliminating unused variable with no statement assert_cmp::$4 Eliminating unused variable with no statement assert_cmp::$6 Calling convention STACK_CALL adding prepare/execute/finalize for call *printf_str::putc printf_str::c diff --git a/src/test/ref/tod-1.asm b/src/test/ref/tod-1.asm index 9b4bbc9ec..5ff04acb5 100644 --- a/src/test/ref/tod-1.asm +++ b/src/test/ref/tod-1.asm @@ -5,7 +5,7 @@ /// Implements similar functions as conio.h from CC65 for compatibility /// See https://github.com/cc65/cc65/blob/master/include/conio.h // -/// Currently C64/PLUS4/VIC20 platforms are supported +/// Currently CX16/C64/PLUS4/VIC20 platforms are supported // Commodore 64 PRG executable file .file [name="tod-1.prg", type="prg", segments="Program"] .segmentdef Program [segments="Basic, Code, Data"] diff --git a/src/test/ref/tod-1.log b/src/test/ref/tod-1.log index 2a06ad9f5..fc5915e6f 100644 --- a/src/test/ref/tod-1.log +++ b/src/test/ref/tod-1.log @@ -2069,7 +2069,7 @@ ASSEMBLER BEFORE OPTIMIZATION /// Implements similar functions as conio.h from CC65 for compatibility /// See https://github.com/cc65/cc65/blob/master/include/conio.h // -/// Currently C64/PLUS4/VIC20 platforms are supported +/// Currently CX16/C64/PLUS4/VIC20 platforms are supported // Upstart // Commodore 64 PRG executable file .file [name="tod-1.prg", type="prg", segments="Program"] @@ -3137,7 +3137,7 @@ Score: 106430 /// Implements similar functions as conio.h from CC65 for compatibility /// See https://github.com/cc65/cc65/blob/master/include/conio.h // -/// Currently C64/PLUS4/VIC20 platforms are supported +/// Currently CX16/C64/PLUS4/VIC20 platforms are supported // Upstart // Commodore 64 PRG executable file .file [name="tod-1.prg", type="prg", segments="Program"] diff --git a/src/test/ref/weeip-bbslist.log b/src/test/ref/weeip-bbslist.log index b8f240724..83782917e 100644 --- a/src/test/ref/weeip-bbslist.log +++ b/src/test/ref/weeip-bbslist.log @@ -19,6 +19,8 @@ Inlined call call __init Eliminating unused variable with no statement memcpy::$0 Eliminating unused variable with no statement memset::$2 Eliminating unused variable with no statement gotoxy::$4 +Eliminating unused variable with no statement __snprintf_capacity +Eliminating unused variable with no statement __snprintf_size Eliminating unused variable with no statement main::$0 Calling convention STACK_CALL adding prepare/execute/finalize for call *printf_str::putc printf_str::c Calling convention STACK_CALL adding prepare/execute/finalize for call *printf_padding::putc printf_padding::pad